Name: series-workflowd6kxv Phase: Failed StartedAt: 2026-08-18 06:31:50 +0000 UTC FinishedAt: 2026-08-18 07:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6kxv[0] Phase: Succeeded StartedAt: 2026-08-18 06:31:50 +0000 UTC FinishedAt: 2026-08-18 07:12:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6kxv[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 06:31:50 +0000 UTC FinishedAt: 2026-08-18 07:12:07 +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+CgkJCTx0ZD4yMDI2LzA4LzE4IDA3OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiBzdHJpY3RseSByZXF1aXJlcyBhIHNwZWNpZmljIERldmljZSBUcmVlIGNvbmZpZ3VyYXRpb24gKGRldi1cdTAwM2VvZl9ub2RlIG11c3QgYmUgcHJlc2VudCwgcGFyZW50IG11c3QgYmUgJiMzOTtldGhlcm5ldC1waHktcGFja2FnZSYjMzk7LCBzcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZ3MsIHJlZ3VsYXRvcnMsIGNsb2NrcywgYW5kIEkyQyBkZXZpY2VzKS4gU2luY2Ugc3l6a2FsbGVyIHJ1bnMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUpIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgZGV2aWNlIHRyZWUgc2V0dXAsIHRoZSBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA3OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2FmM2YzOWQwNTlkNjljMmFlYzhmYTE0ZTdmOWQxOTNhZmM3ZWFiYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA3OjExOjI0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWU5MGM0ZmZlY2NlYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxuQEAgLTAsMCAmIzQzOzEsMTY1IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2VzXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOlxuJiM0MzsgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnRcbiYjNDM7ICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlXG4mIzQzOyAgcGFja2FnZSBjb250cm9sIHBhdGhzIGRpZmZlci4gQUMyMDAgcGFja2FnZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWRcbiYjNDM7ICB0aHJvdWdoIHRoZSBjb21wYW5pb24gSUMmIzM5O3MgSTJDIHJlZ2lzdGVyIGludGVyZmFjZSwgd2hpbGUgQUMzMDAgY29udHJvbFxuJiM0MzsgIHJlZ2lzdGVycyBvY2N1cHkgYSBzZWNvbmQgQ2xhdXNlIDIyIGFkZHJlc3MgZml4ZWQgYXQgMTYgcGx1cyB0aGUgbGluayBQSFlcbiYjNDM7ICBhZGRyZXNzLlxuJiM0MztcbiYjNDM7ICBTeXN0ZW1zIHdpdGggYSBrbm93biBwYWNrYWdlIHVzZSB0aGUgY29ycmVzcG9uZGluZyBBQzIwMCBvciBBQzMwMCBjb21wYXRpYmxlLlxuJiM0MzsgIFN5c3RlbXMgd2hpY2ggY2FuIGNvbnRhaW4gZWl0aGVyIHBhY2thZ2UgdXNlIHRoZSBBQ3gwMCBjb21wYXRpYmxlIGFuZCBhXG4mIzQzOyAgcGFja2VkIE5WTUVNIGNvbmZpZ3VyYXRpb24gZmllbGQgdG8gc2VsZWN0IHRoZSBiYWNrZW5kIGF0IHJ1bnRpbWUuXG4mIzQzO1xuJiM0MzsgIFRoZSBsaW5rIFBIWSBjYW5ub3QgcmVwb3J0IGl0cyBJRCB1bnRpbCB0aGUgcGFja2FnZSBjb250cm9sIHNlcXVlbmNlIGhhc1xuJiM0MzsgIGNvbXBsZXRlZCwgc28gaXRzIGNoaWxkIG5vZGUgc3VwcGxpZXMgdGhlIGRvY3VtZW50ZWQgUEhZIElELiBUaGUgcGFja2FnZSBhbmRcbiYjNDM7ICBjaGlsZCB1c2UgdGhlIHNhbWUgYmFzZSBhZGRyZXNzLiBUaGUgQUMyMDAgZHJpdmVyIHByb2dyYW1zIHRoYXQgYWRkcmVzcyBpbnRvXG4mIzQzOyAgdGhlIHBhY2thZ2UsIHdoaWxlIHRoZSBBQzMwMCBkcml2ZXIgZGVyaXZlcyBpdHMgY29udHJvbCBhZGRyZXNzIGZyb20gaXQuXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBlbnVtOlxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhpbXVtOiAzMVxuJiM0MztcbiYjNDM7ICBjbG9ja3M6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MzsgICAgZGVzY3JpcHRpb246IEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6XG4mIzQzO1xuJiM0MzsgIHZjYy1zdXBwbHk6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgMy4zIFYgcGFja2FnZSBzdXBwbHkuIFRoaXMgaXMgY29ubmVjdGVkIHRvIEVQSFlfVkNDIG9uIEFDMjAwIGFuZCBWQ0MxXG4mIzQzOyAgICAgIG9uIEFDMzAwLlxuJiM0MztcbiYjNDM7ICBudm1lbS1jZWxsczpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgUGFja2VkIEVQSFkgY29uZmlndXJhdGlvbiBmaWVsZC4gQml0cyAzIHRocm91Z2ggMCBjb250YWluIHRoZSBhbmFsb2dcbiYjNDM7ICAgICAgY2FsaWJyYXRpb24gY29kZSwgYml0cyA3IHRocm91Z2ggNCBhcmUgcmVzZXJ2ZWQsIGJpdCA4IHNlbGVjdHMgQUMzMDBcbiYjNDM7ICAgICAgd2hlbiBzZXQgYW5kIEFDMjAwIHdoZW4gY2xlYXIsIGFuZCBiaXQgOSByZXF1ZXN0cyB0aGUgQUMzMDBcbiYjNDM7ICAgICAgbG93LWNhbGlicmF0aW9uIHR1bmluZyBzZXF1ZW5jZS4gQSBmaXhlZCBBQzIwMCBwYWNrYWdlIG1heSBwcm92aWRlIG9ubHlcbiYjNDM7ICAgICAgdGhlIGxvdyBjYWxpYnJhdGlvbiBiaXRzIG9yIG9taXQgdGhlIGNlbGwgYW5kIHVzZSBpdHMgaW50ZXJuYWwgZUZ1c2VcbiYjNDM7ICAgICAgY29weSBpbnN0ZWFkLlxuJiM0MztcbiYjNDM7ICBudm1lbS1jZWxsLW5hbWVzOlxuJiM0MzsgICAgY29uc3Q6IGNvbmZpZ3VyYXRpb25cbiYjNDM7XG4mIzQzOyAgeC1wb3dlcnMsYWMyMDA6XG4mIzQzOyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9waGFuZGxlXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgUGhhbmRsZSB0byB0aGUgQUMyMDAgY29tcGFuaW9uIElDIGRlc2NyaWJlZCBieSB0aGUgeC1wb3dlcnMsYWMyMDAgTUZEXG4mIzQzOyAgICAgIGJpbmRpbmcuIEl0cyBJMkMgaW50ZXJmYWNlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgcGFja2FnZSBjb250cm9sXG4mIzQzOyAgICAgIHJlZ2lzdGVycyB1c2VkIHRvIHBvd2VyIGFuZCBjb25maWd1cmUgdGhlIEV0aGVybmV0IFBIWS5cbiYjNDM7XG4mIzQzOyAgeC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZDpcbiYjNDM7ICAgIHR5cGU6IGJvb2xlYW5cbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBJbnZlcnQgdGhlIHhNSUkgcmVjZWl2ZSBjbG9jayBpbnNpZGUgdGhlIFBIWS4gVGhpcyBpcyByZXF1aXJlZCBieSBzb21lXG4mIzQzOyAgICAgIFNvQyBpbnRlZ3JhdGlvbnMsIGluY2x1ZGluZyB0aGUgQWxsd2lubmVyIEg2IEFDMjAwIGNvbm5lY3Rpb24uXG4mIzQzO1xuJiM0MztwYXR0ZXJuUHJvcGVydGllczpcbiYjNDM7ICBeZXRoZXJuZXQtcGh5QFthLWYwLTldJiM0MzskOlxuJiM0MzsgICAgJHJlZjogZXRoZXJuZXQtcGh5LnlhbWwjXG4mIzQzOyAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgIGNvbnN0OiBldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcbiYjNDM7ICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAtIGNvbXBhdGlibGVcbiYjNDM7ICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gdmNjLXN1cHBseVxuJiM0MztcbiYjNDM7ZGVwZW5kZW50UmVxdWlyZWQ6XG4mIzQzOyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdXG4mIzQzO1xuJiM0MzthbGxPZjpcbiYjNDM7ICAtICRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjbG9ja3M6IGZhbHNlXG4mIzQzOyAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZVxuJiM0MzsgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAtIGNsb2Nrc1xuJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHNcbiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXNcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAtIGNsb2Nrc1xuJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHNcbiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXNcbiYjNDM7ICAgICAgICAtIHgtcG93ZXJzLGFjMjAwXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgZW51bTpcbiYjNDM7ICAgICAgICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbiYjNDM7ICAgICAgICAgICAgLSB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcbiYjNDM7ICAgIHRoZW46XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgcmVnOlxuJiM0MzsgICAgICAgICAgbWF4aW11bTogN1xuJiM0MzsgICAgICBwYXR0ZXJuUHJvcGVydGllczpcbiYjNDM7ICAgICAgICBeZXRoZXJuZXQtcGh5QFthLWYwLTldJiM0MzskOlxuJiM0MzsgICAgICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICAgICAgcmVnOlxuJiM0MzsgICAgICAgICAgICAgIG1heGltdW06IDdcbiYjNDM7XG4mIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgbWRpbyB7XG4mIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZwd20gNVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgdmNjLXN1cHBseSA9IFx1MDAzY1x1MDAyNnJlZ18zdjNcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXHUwMDNjXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXCYjMzQ7Y29uZmlndXJhdGlvblwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgeC1wb3dlcnMsYWMyMDAgPSBcdTAwM2NcdTAwMjZhYzIwMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuJiM0MztcbiYjNDM7Li4uXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuaW5kZXggYjRlZjkyN2ZkNGE2Ny4uZDM4MzU1OTdlMzc5NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuQEAgLTQ4NCw2ICYjNDM7NDg0LDE3IEBAIGNvbmZpZyBWSVRFU1NFX1BIWVxuIFx0aGVscFxuIFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIHZzYzgyNDRcbiBcbiYjNDM7Y29uZmlnIFhQT1dFUlNfQUNYMDBfUEhZXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7WC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBDT01NT05fQ0xLIFx1MDAyNlx1MDAyNiBOVk1FTSBcdTAwMjZcdTAwMjYgT0ZfTURJTyBcdTAwMjZcdTAwMjYgUkVHVUxBVE9SXG4mIzQzO1x0ZGVwZW5kcyBvbiBJMkMgfHwgIUkyQ1xuJiM0MztcdHNlbGVjdCBQSFlfUEFDS0FHRVxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIEVuYWJsZSB0aGUgRmFzdCBFdGhlcm5ldCBQSFkgZHJpdmVyIHNoYXJlZCBieSB0aGUgWC1Qb3dlcnMgQUMyMDBcbiYjNDM7XHQgIGFuZCBBQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyIGNvbmZpZ3VyZXMgdGhlaXIgY29tbW9uIE1ESU8gUEhZXG4mIzQzO1x0ICByZWdpc3RlcnMgYW5kIHRoZSBwYWNrYWdlLXNwZWNpZmljIEFDMjAwIEkyQyBvciBBQzMwMCBNRElPIGNvbnRyb2xcbiYjNDM7XHQgIHJlZ2lzdGVycy5cbiYjNDM7XG4gY29uZmlnIFhJTElOWF9HTUlJMlJHTUlJXG4gXHR0cmlzdGF0ZSBcJiMzNDtYaWxpbnggR01JSTJSR01JSSBjb252ZXJ0ZXIgZHJpdmVyXCYjMzQ7XG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXG5pbmRleCAyNWM0YTNjMjQyOWY3Li40OTU3NWZhMTg1MjIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbkBAIC0xMDEsNCAmIzQzOzEwMSw1IEBAIG9iai0kKENPTkZJR19TTVNDX1BIWSlcdFx0JiM0Mzs9IHNtc2Mub1xuIG9iai0kKENPTkZJR19TVEUxMFhQKVx0XHQmIzQzOz0gc3RlMTBYcC5vXG4gb2JqLSQoQ09ORklHX1RFUkFORVRJQ1NfUEhZKVx0JiM0Mzs9IHRlcmFuZXRpY3Mub1xuIG9iai0kKENPTkZJR19WSVRFU1NFX1BIWSlcdCYjNDM7PSB2aXRlc3NlLm9cbiYjNDM7b2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKVx0JiM0Mzs9IHhwb3dlcnMvXG4gb2JqLSQoQ09ORklHX1hJTElOWF9HTUlJMlJHTUlJKSAmIzQzOz0geGlsaW54X2dtaWkycmdtaWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZTk3N2E3OTU4MzI1XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsMyBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO3hwb3dlcnMtYWN4MDAteSA6PSBhY3gwMC5vIGFjMjAwLm8gYWMzMDAub1xuJiM0MztvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpICYjNDM7PSB4cG93ZXJzLWFjeDAwLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFmZGQyYTNkZmJlNDFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmNcbkBAIC0wLDAgJiM0MzsxLDMxNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIFgtUG93ZXJzIEFDMjAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyIEFybSBMdGQuIChBbmRyZSBQcnp5d2FyYSBcdTAwM2NhbmRyZS5wcnp5d2FyYUBhcm0uY29tXHUwMDNlKVxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2FjeDAwLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVFx0M1xuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXHQyNDAwMDAwMFxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXHQyNzAwMDAwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFR1x0XHRcdDB4MDAxNFxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFXHRcdFx0QklUKDEpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHXHRcdFx0MHgwMDE2XG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFXHRcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsvKiBBQzIwMC1pbnRlcm5hbCBjb3B5IG9mIHRoZSBFdGhlcm5ldCBQSFkgY2FsaWJyYXRpb24gZUZ1c2UuICovXG4mIzQzOyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUdcdFx0XHQweDgwMDRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DVExfUkVHXHRcdFx0MHg2MDAwXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLXHRcdFx0R0VOTUFTSyg4LCA0KVxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfUk1JSV9TRUxcdFx0XHRCSVQoMTEpXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0tcdFx0R0VOTUFTSygxNSwgMTIpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwge1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcbiYjNDM7XHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4mIzQzO1x0c3RydWN0IHJlZ3VsYXRvciAqdmNjO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiYjNDM7XHR1MTYgZXBoeV9jdGw7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBoeV9hZGRyO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4mIzQzO1x0Ym9vbCBzdXBwbHlfZW5hYmxlZDtcbiYjNDM7XHRib29sIHBvd2VyZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdTE2IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VlcGh5X2N0bCB8XG4mIzQzO1x0XHQocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuJiM0MztcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XG4mIzQzO1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSywgcHJpdi1cdTAwM2VwaHlfYWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LFxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCByZWcsIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cmVnLCBFUlJfUFRSKHJldCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuJiM0MztcdFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbiYjNDM7XHRcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU0hVVERPV04pO1xuJiM0MztcdFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsIDApO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHRcdGVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRyZXQgPSBlcnI7XG4mIzQzO1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vwb3dlcmVkID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuJiM0MztcdFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2V2Y2MpO1xuJiM0MztcdFx0aWYgKCFlcnIpXG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcbiYjNDM7XHRcdGVsc2UgaWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2FjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4mIzQzO1x0XHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbiYjNDM7XHRcdFx0XHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMLFxuJiM0MztcdFx0XHRcdFx0IGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4mIzQzO1x0XHRcdFx0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1x0dTE2IGVwaHlfY3RsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlfYWRkciBcdTAwM2UgRklFTERfTUFYKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSykpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2VwaHlfYWRkciA9PSBwaHlfYWRkcilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4mIzQzO1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1x0cHJpdi1cdTAwM2VwaHlfYWRkciA9IHBoeV9hZGRyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbiYjNDM7XHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2V2Y2MpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXBoeV9jdGwgPSBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gQUMyMDBcbiYjNDM7XHQgKiBzcGVjaWZpZXMgbm8gYWRkaXRpb25hbCBkZWxheSBiZXR3ZWVuIHRoZXNlIGNvbnRyb2xzLiBUaGUgY29tcGFuaW9uXG4mIzQzO1x0ICogTUZEIHByb3ZpZGVyIGhhcyBjb21wbGV0ZWQgaXRzIGlucHV0LWNsb2NrIHN0YXJ0dXAgZGVsYXkgYmVmb3JlXG4mIzQzO1x0ICogcHVibGlzaGluZyB0aGUgcmVnbWFwLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxuJiM0MztcdFx0XHRcdCAgIGVwaHlfY3RsIHwgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLFxuJiM0MztcdFx0XHRcdCAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuJiM0MztcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRywgZXBoeV9jdGwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2Rpc2FibGU6XG4mIzQzO1x0LyogQXR0ZW1wdCBldmVyeSBzdGVwIG9mIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSBhZnRlciBhIHBhcnRpYWwgc3RhcnQuICovXG4mIzQzO1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbiYjNDM7XHRhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbiYjNDM7YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdCAgICAgIGJvb2wgaGFzX2NhbGlicmF0aW9uLCB1OCBjYWxpYnJhdGlvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaW50ZXJuYWxfY2FsaWJyYXRpb247XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICphYzIwMF9ub2RlO1xuJiM0MztcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XG4mIzQzO1x0dTggYnBzX2VmZnVzZV9jb2RlO1xuJiM0MztcdHN0cnVjdCBjbGsgKmNsaztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0cHJpdi1cdTAwM2VkZXYgPSBkZXY7XG4mIzQzO1x0cHJpdi1cdTAwM2V2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsIFwmIzM0O3ZjY1wmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXZjYykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXG5cJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0YWMyMDBfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGFja2FnZV9ub2RlLCBcJiMzNDt4LXBvd2VycyxhYzIwMFwmIzM0OywgMCk7XG4mIzQzO1x0aWYgKCFhYzIwMF9ub2RlKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O21pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXFxuXCYjMzQ7KSk7XG4mIzQzO1x0Y2xpZW50ID0gb2ZfZmluZF9pMmNfZGV2aWNlX2J5X25vZGUoYWMyMDBfbm9kZSk7XG4mIzQzO1x0b2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7XG4mIzQzO1x0aWYgKCFjbGllbnQpIHtcbiYjNDM7XHRcdHJldCA9IElTX0VOQUJMRUQoQ09ORklHX0kyQykgPyAtRVBST0JFX0RFRkVSIDogLUVOT0RFVjtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O0FDMjAwIGRldmljZSBpcyBub3QgcmVnaXN0ZXJlZFxcblwmIzM0OykpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcdTAwMjZjbGllbnQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgICAgIERMX0ZMQUdfQVVUT1JFTU9WRV9DT05TVU1FUikpIHtcbiYjNDM7XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gbGluayBBQzIwMCBkZXZpY2VcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X2NsaWVudDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRldmljZV9sb2NrKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuJiM0MztcdGlmIChkZXZpY2VfaXNfYm91bmQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldikpXG4mIzQzO1x0XHRwcml2LVx1MDAzZXJlZ21hcCA9IGRldl9nZXRfcmVnbWFwKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIE5VTEwpO1xuJiM0MztcdGRldmljZV91bmxvY2soXHUwMDI2Y2xpZW50LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZXJlZ21hcCkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O0FDMjAwIGRyaXZlciBpcyBub3QgcmVhZHlcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X2NsaWVudDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghaGFzX2NhbGlicmF0aW9uKSB7XG4mIzQzO1x0XHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsXG4mIzQzO1x0XHRcdFx0ICBcdTAwMjZpbnRlcm5hbF9jYWxpYnJhdGlvbik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9lcnJvcjtcbiYjNDM7XHRcdGNhbGlicmF0aW9uID0gaW50ZXJuYWxfY2FsaWJyYXRpb247XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovXG4mIzQzO1x0YnBzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICYjNDM7IEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuJiM0MztcdFx0XHQgICBGSUVMRF9NQVgoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0spO1xuJiM0MztcdHByaXYtXHUwMDNlZXBoeV9jdGwgPVxuJiM0MztcdFx0RklFTERfUFJFUChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSywgYnBzX2VmZnVzZV9jb2RlKTtcbiYjNDM7XHQvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXG4mIzQzO1xuJiM0MztcdGNsayA9IGNsa19nZXQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihjbGspKSB7XG4mIzQzO1x0XHRyZXQgPSBQVFJfRVJSKGNsayk7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnJvcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBib3VuZCBBQzIwMCBwcm92aWRlciBlbmFibGVzIGFuZCBleGNsdXNpdmVseSBwaW5zIHRoaXMgcmF0ZS4gKi9cbiYjNDM7XHRjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspO1xuJiM0MztcdGNsa19wdXQoY2xrKTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjbGtfcmF0ZSkge1xuJiM0MztcdGNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XG4mIzQzO1x0XHRwcml2LVx1MDAzZWVwaHlfY3RsIHw9IEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDt1bnN1cHBvcnRlZCBBQzIwMCBjbG9jayByYXRlICVsdSBIelxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgY2xrX3JhdGUpO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X2NsaWVudDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29uO1xuJiM0MztcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vZmYgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmY7XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xuJiM0MztcdC8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi9cbiYjNDM7XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4mIzQzO1x0cHV0X2RldmljZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNnByaXYtXHUwMDNlY29udHJvbDtcbiYjNDM7XG4mIzQzO291dF9lcnJvcjpcbiYjNDM7XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcJiMzNDtmYWlsZWQgdG8gaW5pdGlhbGl6ZSBBQzIwMCBjb250cm9sXFxuXCYjMzQ7KTtcbiYjNDM7b3V0X3B1dF9jbGllbnQ6XG4mIzQzO1x0cHV0X2RldmljZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hYTU2MDQzMmExNGM5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXG5AQCAtMCwwICYjNDM7MSwzODcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBYLVBvd2VycyBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uL3BoeWxpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2FjeDAwLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVFx0M1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXHQyNDAwMDAwMFxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaXHQyNTAwMDAwMFxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXHQyNzAwMDAwMFxuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX1JFR1x0XHRcdDB4MDBcbiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLXHRcdEdFTk1BU0soMTEsIDgpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMX01BU0tcdFx0XHRHRU5NQVNLKDcsIDYpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAwKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSlcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaXHRcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDIpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRVx0XHRcdEJJVCg1KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEVcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgQUMzMDBfQ0xLSU5fR0FUSU5HX0VOQUJMRVx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlRcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE9cdFx0QklUKDMpXG4mIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLXHRcdEdFTk1BU0soMiwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0JJQVMxX1JFR1x0XHRcdDB4MDJcbiYjNDM7I2RlZmluZSBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRVx0XHRCSVQoMTUpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19JT19SRUdcdFx0XHQweDA1XG4mIzQzOyNkZWZpbmUgQUMzMDBfTURJT19EUlZfTUFTS1x0XHRcdEdFTk1BU0soMTUsIDE0KVxuJiM0MzsjZGVmaW5lIEFDMzAwX01JSV9EUlZfTUFTS1x0XHRcdEdFTk1BU0soMTEsIDEwKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0lPX0RSVl9MRVZFTF8yXHRcdFx0MlxuJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEVcdFx0XHRCSVQoNClcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEVcdFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DT05GSUdfUkVHXHRcdFx0MHgwNlxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLXHRcdEdFTk1BU0soMTUsIDEyKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfUk1JSV9TRUxcdFx0XHRCSVQoMTEpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUyBcXFxuJiM0MztcdChBQzMwMF9FRlVTRV9DTEtfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRSB8IFxcXG4mIzQzO1x0IEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHwgXFxcbiYjNDM7XHQgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0lPX1ZBTFVFIFxcXG4mIzQzO1x0KEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcbiYjNDM7XHQgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4mIzQzO1x0IEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUgfCBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEUpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwge1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuJiM0MztcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcbiYjNDM7XHRzdHJ1Y3QgY2xrICpjbGs7XG4mIzQzO1x0dTE2IHN5c19jb250cm9sO1xuJiM0MztcdHUxNiBlcGh5X2NvbmZpZztcbiYjNDM7XHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xuJiM0MztcdGJvb2wgcGFja2FnZV9rbm93bjtcbiYjNDM7XHRib29sIGludGVybmFsX2RsZG87XG4mIzQzO1x0Ym9vbCBzdXBwbHlfZW5hYmxlZDtcbiYjNDM7XHRib29sIHBvd2VyZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50XG4mIzQzO2FjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VwaHlkZXYtXHUwMDNlbWRpby5hZGRyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVx1MDAzZXBoeWRldixcbiYjNDM7XHRcdFx0XHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xuJiM0MztcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcbiYjNDM7XHRcdFx0XHR1MTYgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSwgdmFsKTtcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9tb2RpZnkoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxuJiM0MztcdFx0XHRcdCB1MTYgbWFzaywgdTE2IHNldClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuJiM0MztcdFx0dTE2IHZhbCA9IChyZXQgXHUwMDI2IH5tYXNrKSB8IChzZXQgXHUwMDI2IG1hc2spO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHZhbCA9PSByZXQgPyAwIDpcbiYjNDM7XHRcdFx0X19waHlfcGFja2FnZV93cml0ZShwcml2LVx1MDAzZXBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsXG4mIzQzO1x0XHRcdFx0XHQgICAgcmVnbnVtLCB2YWwpO1xuJiM0MztcdH1cbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlZXBoeV9jb25maWcgfFxuJiM0MztcdFx0KHByaXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbiYjNDM7XHRcdCBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIGNoaXAgcmVzZXQgcmVzdG9yZXMgRExET0VOIHRvIG9uZS4gVW50aWwgUEtHX1NUQVRVUyBoYXMgaWRlbnRpZmllZFxuJiM0MztcdCAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGVcbiYjNDM7XHQgKiBib290bG9hZGVyIGJ5IGFzc2VydGluZyBvbmx5IHRoZSBFUEhZIHJlc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiAhcHJpdi1cdTAwM2VwYWNrYWdlX2tub3duIHx8ICFwcml2LVx1MDAzZWludGVybmFsX2RsZG8gP1xuJiM0MztcdFx0QUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCA6IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4mIzQzO1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4mIzQzO1x0XHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuJiM0MztcdFx0XHRcdFx0ICAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4mIzQzO1x0XHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLCAwKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRyZXQgPSBlcnI7XG4mIzQzO1x0XHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcbiYjNDM7XHRcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVx1MDAzZWNsayk7XG4mIzQzO1x0XHRwcml2LVx1MDAzZXBvd2VyZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4mIzQzO1x0XHRlcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVx1MDAzZXZjYyk7XG4mIzQzO1x0XHRpZiAoIWVycilcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IGZhbHNlO1xuJiM0MztcdFx0ZWxzZSBpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7YWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZClcbiYjNDM7XHRcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4mIzQzO1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9STUlJX1NFTCxcbiYjNDM7XHRcdFx0XHRcdCAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuJiM0MztcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuJiM0MztcdHU4IHBhY2thZ2Vfc3RhdHVzO1xuJiM0MztcdHUxNiByZXNldF92YWx1ZTtcbiYjNDM7XHRpbnQgc3lzX2NvbnRyb2w7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeV9hZGRyICE9IGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuJiM0MztcdFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVx1MDAzZXZjYyk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0LyogV2FpdCBmb3IgdGhlIHBvd2VyLW9uIHJlc2V0IGludGVydmFsIHNwZWNpZmllZCBieSB0aGUgbWFudWFsLiAqL1xuJiM0MztcdFx0ZnNsZWVwKDEwMDAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LVx1MDAzZWNsayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKiBLZWVwIHRoZSBleHRlcm5hbC1zdXBwbHkgY29uZmlndXJhdGlvbiBhY3Jvc3MgY2hpcCByZXNldHMuICovXG4mIzQzO1x0cmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTtcbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsIHJlc2V0X3ZhbHVlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgbWFudWFsIHJlcXVpcmVzIGJvdGggcmVzZXRzIHRvIGJlIHJlbGVhc2VkIGJlZm9yZSB0aGUgY2xvY2tzLiAqL1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcbiYjNDM7XHRcdFx0XHQgIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdC8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi9cbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgcHJpdi1cdTAwM2VzeXNfY29udHJvbCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0c3lzX2NvbnRyb2wgPSBhYzMwMF9lcGh5X2N0bF9yZWFkKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyk7XG4mIzQzO1x0aWYgKHN5c19jb250cm9sIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRyZXQgPSBzeXNfY29udHJvbDtcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBhY2thZ2Vfc3RhdHVzID0gRklFTERfR0VUKEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0ssIHN5c19jb250cm9sKTtcbiYjNDM7XHRpZiAoKH5wYWNrYWdlX3N0YXR1cyBcdTAwMjYgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSAhPVxuJiM0MztcdCAgICBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWludGVybmFsX2RsZG8gPSBwYWNrYWdlX3N0YXR1cyBcdTAwMjYgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExETztcbiYjNDM7XHRwcml2LVx1MDAzZXBhY2thZ2Vfa25vd24gPSB0cnVlO1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9TWVNfQklBUzFfUkVHLFxuJiM0MztcdFx0XHRcdCAgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSxcbiYjNDM7XHRcdFx0XHQgICBwcml2LVx1MDAzZWludGVybmFsX2RsZG8gP1xuJiM0MztcdFx0XHRcdCAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFIDogMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCB0aGUgZG9jdW1lbnRlZCBkZWZhdWx0IGRyaXZlIGxldmVsIGFuZCBsZWF2ZSB0aGUgSVJRIGRpc2FibGVkLiAqL1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsXG4mIzQzO1x0XHRcdFx0ICAgQUMzMDBfU1lTX0lPX1ZBTFVFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRmc2xlZXAoMTAwMDApO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4mIzQzO1x0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbiYjNDM7XHRcdFx0XHQgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdGZzbGVlcCgxMDAwMCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3Bvd2VyX29mZjpcbiYjNDM7XHRhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdGNsa19wdXQoZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuJiM0MzthYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBjbGtfcmF0ZTtcbiYjNDM7XHR1OCBiZ3NfZWZmdXNlX2NvZGU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5hZGRyIFx1MDAzZSBGSUVMRF9NQVgoQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxcblwmIzM0OykpO1xuJiM0MztcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXCYjMzQ7dmNjXCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNldmNjKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNldmNjKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBwYWNrYWdlIHN1cHBseVxcblwmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWNsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlY2xrKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNlY2xrKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBpbnB1dCBjbG9ja1xcblwmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X2Nsa19wdXQsIHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgcHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxuXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRzd2l0Y2ggKGNsa19yYXRlKSB7XG4mIzQzO1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjpcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDt1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgY2xrX3JhdGUpKTtcbiYjNDM7XHR9XG4mIzQzO1x0cHJpdi1cdTAwM2VzeXNfY29udHJvbCB8PSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUztcbiYjNDM7XG4mIzQzO1x0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xuJiM0MztcdGJnc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiAmIzQzOyBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUKSBcdTAwMjZcbiYjNDM7XHRcdFx0ICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTtcbiYjNDM7XHRwcml2LVx1MDAzZWVwaHlfY29uZmlnID1cbiYjNDM7XHRcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0ssIGJnc19lZmZ1c2VfY29kZSk7XG4mIzQzO1x0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb24gPSBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vbjtcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuJiM0MztcdHByaXYtXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcbiYjNDM7XHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2cHJpdi1cdTAwM2Vjb250cm9sO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lZDIzYTNjYmZlMmExXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXG5AQCAtMCwwICYjNDM7MSw2MjEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAxOSBKZXJuZWogU2tyYWJlYyBcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbnZtZW0tY29uc3VtZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vcGh5bGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YWN4MDAuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0lEXHRcdFx0XHQweDAwNDQxNDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0tcdEdFTk1BU0soMywgMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwXHRcdEJJVCg4KVxuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPV1x0QklUKDkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFR1x0XHRcdDB4MWZcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLXHRcdFx0R0VOTUFTSygxMiwgOClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzBcdFx0XHRcdDBcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzFcdFx0XHRcdDFcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzJcdFx0XHRcdDJcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzZcdFx0XHRcdDZcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzhcdFx0XHRcdDhcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUdcdFx0MHgxM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUXHRCSVQoMTIpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfTUFTS1x0XHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUT1x0XHQyXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFR1x0XHQweDEyXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFXHQweDQ4MjRcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHXHRcdDB4MTNcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRVx0XHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUdcdDB4MTdcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFXHRCSVQoMylcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFR1x0XHQweDE4XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0tcdFx0R0VOTUFTSygxNCwgMTIpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFRcdDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHXHRcdDB4MTBcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFXHQweDU1MjNcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUdcdFx0MHgxM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFXHRcdDB4ZjAwMFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUdcdDB4MTRcbiYjNDM7I2RlZmluZSBBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGZcbiYjNDM7I2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGJcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUUgMHg3ODA5XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHXHRcdFx0MHgxNVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTS1x0XHRHRU5NQVNLKDE1LCA4KVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLXHRcdEdFTk1BU0soNywgMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRShfMTAwbSwgXzEwbSkgXFxcbiYjNDM7XHQoRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0ssIChfMTAwbSkpIHwgXFxcbiYjNDM7XHQgRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xME1fTUFTSywgKF8xMG0pKSlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFIFxcXG4mIzQzO1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgxNSwgMHgzMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFIFxcXG4mIzQzO1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgzNSwgMHgzMylcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHXHRcdDB4MThcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRVx0XHQweDAwYmNcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFR1x0XHQweDFkXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyBCSVQoMTEpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUU1x0MHgwMDQ0XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFIFxcXG4mIzQzO1x0KEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgfCBcXFxuJiM0MztcdCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQW5vdGhlciBpbnRlZ3JhdGlvbiBvZiB0aGlzIGV4YWN0LUlEIFBIWSBkb2N1bWVudHMgaXRzIGRpZ2l0YWwgdmVuZG9yXG4mIzQzOyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMFxuJiM0MzsgKiBhbmFsb2ctcGFnZSBmaWVsZCBlbmNvZGluZ3MgcmVtYWluIHVucHVibGlzaGVkLCBzbyBrZWVwIHRob3NlIGFzIG9wYXF1ZVxuJiM0MzsgKiB2ZW5kb3IgaW5pdGlhbGl6YXRpb24gdmFsdWVzIGluc3RlYWQgb2YgaW52ZW50aW5nIGJpdCBkZWZpbml0aW9ucy5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2IHtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2w7XG4mIzQzO1x0LyogU2VyaWFsaXplcyBwYWNrYWdlIHN0YXRlIGFuZCBtdWx0aS1yZWdpc3RlciBwb3dlciBzZXF1ZW5jZXMuICovXG4mIzQzO1x0c3RydWN0IG11dGV4IHN0YXRlX2xvY2s7XG4mIzQzO1x0Ym9vbCBpc19hYzMwMDtcbiYjNDM7XHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xuJiM0MztcdGJvb2wgeG1paV9yeF9jbG9ja19pbnZlcnRlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHLFxuJiM0MztcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2Vwb3dlcl9vbihwcml2LVx1MDAzZWNvbnRyb2wsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHByaXYtXHUwMDNlcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29mZihwcml2LVx1MDAzZWNvbnRyb2wpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2VzZXRfaW50ZXJmYWNlKHByaXYtXHUwMDNlY29udHJvbCxcbiYjNDM7XHRcdFx0XHRcdCAgICBwaHlkZXYtXHUwMDNlaW50ZXJmYWNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRwaHlkZXZfd2Fybihwcml2LVx1MDAzZXBoeWRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgRVJSX1BUUihyZXQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2Uodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1x0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgdTE2ICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xuJiM0MztcdHNpemVfdCBpO1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1x0dTggKmJ1ZjtcbiYjNDM7XHR1MTYgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0Y2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpO1xuJiM0MztcdGlmIChJU19FUlIoY2VsbCkpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihjZWxsKTtcbiYjNDM7XG4mIzQzO1x0YnVmID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFx1MDAyNmxlbik7XG4mIzQzO1x0bnZtZW1fY2VsbF9wdXQoY2VsbCk7XG4mIzQzO1x0aWYgKElTX0VSUihidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoYnVmKTtcbiYjNDM7XHRpZiAoIWxlbiB8fCBsZW4gXHUwMDNlIHNpemVvZigqdmFsdWUpKSB7XG4mIzQzO1x0XHRrZnJlZShidWYpO1xuJiM0MztcdFx0cmV0dXJuIGxlbiA/IC1FUkFOR0UgOiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHZhbCB8PSAodTE2KWJ1ZltpXSBcdTAwM2NcdTAwM2MgKDggKiBpKTtcbiYjNDM7XHRrZnJlZShidWYpO1xuJiM0MztcdCp2YWx1ZSA9IHZhbDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9pbml0X3BhY2thZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xuJiM0MztcdGJvb2wgc2VsZWN0YWJsZTtcbiYjNDM7XHRib29sIGZpeGVkX2FjMzAwO1xuJiM0MztcdGJvb2wgaGFzX2NvbmZpZ3VyYXRpb247XG4mIzQzO1x0dTggY2FsaWJyYXRpb247XG4mIzQzO1x0dTMyIGJhc2VfYWRkcjtcbiYjNDM7XHR1MTYgY29uZmlndXJhdGlvbiA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChkZXYtXHUwMDNlb2Zfbm9kZSk7XG4mIzQzO1x0aWYgKCFwYWNrYWdlX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoIW9mX25vZGVfbmFtZV9lcShwYWNrYWdlX25vZGUsIFwmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlXCYjMzQ7KSkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O1BIWSBpcyBub3QgaW4gYW4gRXRoZXJuZXQgUEhZIHBhY2thZ2VcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYWNrYWdlX25vZGUsIFwmIzM0O3JlZ1wmIzM0OywgXHUwMDI2YmFzZV9hZGRyKTtcbiYjNDM7XHRpZiAocmV0IHx8IGJhc2VfYWRkciAhPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVwmIzM0Oyk7XG4mIzQzO1x0Zml4ZWRfYWMzMDAgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBcJiMzNDt4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcJiMzNDspO1xuJiM0MztcdGlmICghc2VsZWN0YWJsZSBcdTAwMjZcdTAwMjYgIWZpeGVkX2FjMzAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXCYjMzQ7KSkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3Vuc3VwcG9ydGVkIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1xuJiM0MztcdGhhc19jb25maWd1cmF0aW9uID1cbiYjNDM7XHRcdG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhwYWNrYWdlX25vZGUsIFwmIzM0O252bWVtLWNlbGwtbmFtZXNcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgXCYjMzQ7Y29uZmlndXJhdGlvblwmIzM0OykgXHUwMDNlPSAwO1xuJiM0MztcdGlmIChoYXNfY29uZmlndXJhdGlvbikge1xuJiM0MztcdFx0cmV0ID0gYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihwYWNrYWdlX25vZGUsIFwmIzM0O2NvbmZpZ3VyYXRpb25cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFx1MDAyNmNvbmZpZ3VyYXRpb24pO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSBpZiAoc2VsZWN0YWJsZSB8fCBmaXhlZF9hYzMwMCkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3BhY2thZ2UgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzZWxlY3RhYmxlKSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID1cbiYjNDM7XHRcdFx0Y29uZmlndXJhdGlvbiBcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vpc19hYzMwMCA9IGZpeGVkX2FjMzAwO1xuJiM0MztcdFx0aWYgKGhhc19jb25maWd1cmF0aW9uIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDApICE9XG4mIzQzO1x0XHQgICAgcHJpdi1cdTAwM2Vpc19hYzMwMCkge1xuJiM0MztcdFx0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICBcJiMzNDtjb25maWd1cmF0aW9uIGRvZXMgbm90IG1hdGNoIHBhY2thZ2VcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNhbGlicmF0aW9uID0gRklFTERfR0VUKEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0ssXG4mIzQzO1x0XHRcdFx0Y29uZmlndXJhdGlvbik7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPVxuJiM0MztcdFx0cHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVyk7XG4mIzQzO1x0cHJpdi1cdTAwM2V4bWlpX3J4X2Nsb2NrX2ludmVydGVkID1cbiYjNDM7XHRcdG9mX3Byb3BlcnR5X3JlYWRfYm9vbChwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgXCYjMzQ7eC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwKVxuJiM0MztcdFx0cHJpdi1cdTAwM2Vjb250cm9sID1cbiYjNDM7XHRcdFx0YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHByaXYtXHUwMDNlY29udHJvbCA9XG4mIzQzO1x0XHRcdGFjMjAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGhhc19jb25maWd1cmF0aW9uLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuJiM0MztcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyhwcml2LVx1MDAzZWNvbnRyb2wpO1xuJiM0MztcbiYjNDM7b3V0X3B1dF9ub2RlOlxuJiM0MztcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEFDWDAwX1BBR0VfMSxcbiYjNDM7XHRcdFx0ICAgICAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgICAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZW9mX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbiYjNDM7XHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9pbml0X3BhY2thZ2UocGh5ZGV2LCBwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuJiM0MztcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjeDAwX2VwaHlfY29udHJvbF9yZWxlYXNlLCBwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gcG93ZXIgb24gY29udHJvbCBibG9ja1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdC8qIEFDeDAwIGNhbiBhY2tub3dsZWRnZSByZXNldCBpbiBwb3dlci1kb3duIHdpdGhvdXQgcmVzdGFydGluZy4gKi9cbiYjNDM7XHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X3NvZnRfcmVzZXQocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztvdXRfcG93ZXJfb2ZmOlxuJiM0MztcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTtcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2FjeDAwX2VwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHR1MTYgYWZlX2VxX3J4X2RldGVjdCA9IHByaXYtXHUwMDNlaXNfYWMzMDAgP1xuJiM0MztcdFx0QUMzMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRSA6XG4mIzQzO1x0XHRBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFO1xuJiM0MztcdHUxNiB0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUU7XG4mIzQzO1x0dTE2IGdsb2JhbF9jb25maWc7XG4mIzQzO1x0aW50IG9sZHBhZ2U7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRnbG9iYWxfY29uZmlnID0gRklFTERfUFJFUChBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLFxuJiM0MztcdFx0XHRcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQpXG4mIzQzO1x0XHRnbG9iYWxfY29uZmlnIHw9IEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8wLFxuJiM0MztcdFx0XHQgICAgICAgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUcsXG4mIzQzO1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XG4mIzQzO1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLCBnbG9iYWxfY29uZmlnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbiYjNDM7XHRcdGFmZV9lcV9yeF9kZXRlY3QgPVxuJiM0MztcdFx0XHRBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUU7XG4mIzQzO1x0XHR0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvbGRwYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8xKTtcbiYjNDM7XHRpZiAob2xkcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBvbGRwYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEUsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXG4mIzQzO1x0XHRcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgIGFmZV9lcV9yeF9kZXRlY3QpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbiYjNDM7XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV84KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUpO1xuJiM0MztcbiYjNDM7b3V0X3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cbiYjNDM7XHRyZXQgPSBnZW5waHlfYzQ1X2FuX2NvbmZpZ19lZWVfYW5lZyhwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcdHJldCA9IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4ocHJpdik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19hY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0LyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi9cbiYjNDM7XHRyZXQgPSBfX2FjeDAwX2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO291dF9wb3dlcl9vZmY6XG4mIzQzO1x0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcdHJldCA9IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJlc3VtZV9yZXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIHN1c3BlbmQgY2FsbGJhY2sgaXMgaW52b2tlZCB3aXRob3V0IHRoZSBwaHlsaWIgbG9jayBoZWxkLiAqL1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cGh5ZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHJlc3VtZV9yZXQgPSBfX2FjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJlc3VtZV9yZXQpXG4mIzQzO1x0XHRcdHBoeWRldl93YXJuKHBoeWRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlY292ZXIgZnJvbSBzdXNwZW5kIGVycm9yOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIEVSUl9QVFIocmVzdW1lX3JldCkpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO291dF91bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHBoeWRldi1cdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xuJiM0MztcdGJvb2wgbWF0Y2g7XG4mIzQzO1xuJiM0MztcdGlmICghZ2VucGh5X21hdGNoX3BoeV9kZXZpY2UocGh5ZGV2LCBwaHlkcnYpIHx8ICFub2RlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFJLNjMwIHJlcG9ydHMgdGhlIHNhbWUgUEhZIElELCBzbyBhbHNvIG1hdGNoIHRoZSBwYWNrYWdlIGlkZW50aXR5LiAqL1xuJiM0MztcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4mIzQzO1x0aWYgKCFwYWNrYWdlX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRtYXRjaCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O3gtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwmIzM0OykgfHxcbiYjNDM7XHRcdG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwmIzM0OykgfHxcbiYjNDM7XHRcdG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVwmIzM0Oyk7XG4mIzQzO1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1hdGNoO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWN4MDBfZXBoeV9kcml2ZXJbXSA9IHtcbiYjNDM7XHR7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCksXG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O1gtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFlcJiMzNDssXG4mIzQzO1x0XHQubWF0Y2hfcGh5X2RldmljZSA9IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZSxcbiYjNDM7XHRcdC5wcm9iZSA9IGFjeDAwX2VwaHlfcHJvYmUsXG4mIzQzO1x0XHQucmVhZF9wYWdlID0gYWN4MDBfZXBoeV9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZSA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZSxcbiYjNDM7XHRcdC5zb2Z0X3Jlc2V0ID0gYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0LFxuJiM0MztcdFx0LmNvbmZpZ19pbml0ID0gYWN4MDBfZXBoeV9jb25maWdfaW5pdCxcbiYjNDM7XHRcdC5kaXNhYmxlX2F1dG9ub21vdXNfZWVlID0gYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlLFxuJiM0MztcdFx0LnN1c3BlbmQgPSBhY3gwMF9lcGh5X3N1c3BlbmQsXG4mIzQzO1x0XHQucmVzdW1lID0gYWN4MDBfZXBoeV9yZXN1bWUsXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7bW9kdWxlX3BoeV9kcml2ZXIoYWN4MDBfZXBoeV9kcml2ZXIpO1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhY3gwMF9lcGh5X3RibFtdID0ge1xuJiM0MztcdHsgUEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpIH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYWN4MDBfZXBoeV90YmwpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1gtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXJcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmggYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2RmNjA4NGM3YTc3MlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxuQEAgLTAsMCAmIzQzOzEsMjggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsjaWZuZGVmIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxuJiM0MzsjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VUXHQxNlxuJiM0MztcbiYjNDM7c3RydWN0IGRldmljZV9ub2RlO1xuJiM0MztcbiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7XG4mIzQzO1x0aW50ICgqcG93ZXJfb24pKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBwaHlfYWRkcik7XG4mIzQzO1x0aW50ICgqcG93ZXJfb2ZmKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKTtcbiYjNDM7XHRpbnQgKCpzZXRfaW50ZXJmYWNlKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4mIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHQgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbiYjNDM7YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pO1xuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDc6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gc3RyaWN0bHkgcmVxdWlyZXMgYSBzcGVjaWZpYyBEZXZpY2UgVHJlZSBjb25maWd1cmF0aW9uIChkZXYtXHUwMDNlb2Zfbm9kZSBtdXN0IGJlIHByZXNlbnQsIHBhcmVudCBtdXN0IGJlICYjMzk7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM5Oywgc3BlY2lmaWMgY29tcGF0aWJsZSBzdHJpbmdzLCByZWd1bGF0b3JzLCBjbG9ja3MsIGFuZCBJMkMgZGV2aWNlcykuIFNpbmNlIHN5emthbGxlciBydW5zIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSB3aXRob3V0IHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGRldmljZSB0cmVlIHNldHVwLCB0aGUgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNhZjNmMzlkMDU5ZDY5YzJhZWM4ZmExNGU3ZjlkMTkzYWZjN2VhYmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwNzoxMToyNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmVlOTBjNGZmZWNjZWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sCkBAIC0wLDAgJiM0MzsxLDE2NSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKQomIzQzOyVZQU1MIDEuMgomIzQzOy0tLQomIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIwomIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sIwomIzQzOwomIzQzO3RpdGxlOiBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2VzCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIEphbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OwomIzQzOwomIzQzO2Rlc2NyaXB0aW9uOgomIzQzOyAgVGhlIEFDMjAwIGFuZCBBQzMwMCBjb250YWluIGNvbXBhdGlibGUgRmFzdCBFdGhlcm5ldCBQSFkgYmxvY2tzIHdoaWNoIHJlcG9ydAomIzQzOyAgdGhlIHNhbWUgQ2xhdXNlIDIyIFBIWSBJRCBhbmQgdXNlIHRoZSBzYW1lIGxpbmstc2lkZSByZWdpc3RlciBsYXlvdXQuIFRoZQomIzQzOyAgcGFja2FnZSBjb250cm9sIHBhdGhzIGRpZmZlci4gQUMyMDAgcGFja2FnZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQKJiM0MzsgIHRocm91Z2ggdGhlIGNvbXBhbmlvbiBJQyYjMzk7cyBJMkMgcmVnaXN0ZXIgaW50ZXJmYWNlLCB3aGlsZSBBQzMwMCBjb250cm9sCiYjNDM7ICByZWdpc3RlcnMgb2NjdXB5IGEgc2Vjb25kIENsYXVzZSAyMiBhZGRyZXNzIGZpeGVkIGF0IDE2IHBsdXMgdGhlIGxpbmsgUEhZCiYjNDM7ICBhZGRyZXNzLgomIzQzOwomIzQzOyAgU3lzdGVtcyB3aXRoIGEga25vd24gcGFja2FnZSB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgQUMyMDAgb3IgQUMzMDAgY29tcGF0aWJsZS4KJiM0MzsgIFN5c3RlbXMgd2hpY2ggY2FuIGNvbnRhaW4gZWl0aGVyIHBhY2thZ2UgdXNlIHRoZSBBQ3gwMCBjb21wYXRpYmxlIGFuZCBhCiYjNDM7ICBwYWNrZWQgTlZNRU0gY29uZmlndXJhdGlvbiBmaWVsZCB0byBzZWxlY3QgdGhlIGJhY2tlbmQgYXQgcnVudGltZS4KJiM0MzsKJiM0MzsgIFRoZSBsaW5rIFBIWSBjYW5ub3QgcmVwb3J0IGl0cyBJRCB1bnRpbCB0aGUgcGFja2FnZSBjb250cm9sIHNlcXVlbmNlIGhhcwomIzQzOyAgY29tcGxldGVkLCBzbyBpdHMgY2hpbGQgbm9kZSBzdXBwbGllcyB0aGUgZG9jdW1lbnRlZCBQSFkgSUQuIFRoZSBwYWNrYWdlIGFuZAomIzQzOyAgY2hpbGQgdXNlIHRoZSBzYW1lIGJhc2UgYWRkcmVzcy4gVGhlIEFDMjAwIGRyaXZlciBwcm9ncmFtcyB0aGF0IGFkZHJlc3MgaW50bwomIzQzOyAgdGhlIHBhY2thZ2UsIHdoaWxlIHRoZSBBQzMwMCBkcml2ZXIgZGVyaXZlcyBpdHMgY29udHJvbCBhZGRyZXNzIGZyb20gaXQuCiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGVudW06CiYjNDM7ICAgICAgLSB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZQomIzQzOyAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlCiYjNDM7CiYjNDM7ICByZWc6CiYjNDM7ICAgIG1heGltdW06IDMxCiYjNDM7CiYjNDM7ICBjbG9ja3M6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7ICAgIGRlc2NyaXB0aW9uOiBBQzMwMCBpbnB1dCBjbG9jaywgcnVubmluZyBhdCAyNCwgMjUsIG9yIDI3IE1IegomIzQzOwomIzQzOyAgdmNjLXN1cHBseToKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgMy4zIFYgcGFja2FnZSBzdXBwbHkuIFRoaXMgaXMgY29ubmVjdGVkIHRvIEVQSFlfVkNDIG9uIEFDMjAwIGFuZCBWQ0MxCiYjNDM7ICAgICAgb24gQUMzMDAuCiYjNDM7CiYjNDM7ICBudm1lbS1jZWxsczoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgUGFja2VkIEVQSFkgY29uZmlndXJhdGlvbiBmaWVsZC4gQml0cyAzIHRocm91Z2ggMCBjb250YWluIHRoZSBhbmFsb2cKJiM0MzsgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMAomIzQzOyAgICAgIHdoZW4gc2V0IGFuZCBBQzIwMCB3aGVuIGNsZWFyLCBhbmQgYml0IDkgcmVxdWVzdHMgdGhlIEFDMzAwCiYjNDM7ICAgICAgbG93LWNhbGlicmF0aW9uIHR1bmluZyBzZXF1ZW5jZS4gQSBmaXhlZCBBQzIwMCBwYWNrYWdlIG1heSBwcm92aWRlIG9ubHkKJiM0MzsgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZQomIzQzOyAgICAgIGNvcHkgaW5zdGVhZC4KJiM0MzsKJiM0MzsgIG52bWVtLWNlbGwtbmFtZXM6CiYjNDM7ICAgIGNvbnN0OiBjb25maWd1cmF0aW9uCiYjNDM7CiYjNDM7ICB4LXBvd2VycyxhYzIwMDoKJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvcGhhbmRsZQomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBQaGFuZGxlIHRvIHRoZSBBQzIwMCBjb21wYW5pb24gSUMgZGVzY3JpYmVkIGJ5IHRoZSB4LXBvd2VycyxhYzIwMCBNRkQKJiM0MzsgICAgICBiaW5kaW5nLiBJdHMgSTJDIGludGVyZmFjZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHBhY2thZ2UgY29udHJvbAomIzQzOyAgICAgIHJlZ2lzdGVycyB1c2VkIHRvIHBvd2VyIGFuZCBjb25maWd1cmUgdGhlIEV0aGVybmV0IFBIWS4KJiM0MzsKJiM0MzsgIHgtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQ6CiYjNDM7ICAgIHR5cGU6IGJvb2xlYW4KJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgSW52ZXJ0IHRoZSB4TUlJIHJlY2VpdmUgY2xvY2sgaW5zaWRlIHRoZSBQSFkuIFRoaXMgaXMgcmVxdWlyZWQgYnkgc29tZQomIzQzOyAgICAgIFNvQyBpbnRlZ3JhdGlvbnMsIGluY2x1ZGluZyB0aGUgQWxsd2lubmVyIEg2IEFDMjAwIGNvbm5lY3Rpb24uCiYjNDM7CiYjNDM7cGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICBeZXRoZXJuZXQtcGh5QFthLWYwLTldJiM0MzskOgomIzQzOyAgICAkcmVmOiBldGhlcm5ldC1waHkueWFtbCMKJiM0MzsgICAgcHJvcGVydGllczoKJiM0MzsgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMAomIzQzOyAgICByZXF1aXJlZDoKJiM0MzsgICAgICAtIGNvbXBhdGlibGUKJiM0MzsgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7ICAtIHZjYy1zdXBwbHkKJiM0MzsKJiM0MztkZXBlbmRlbnRSZXF1aXJlZDoKJiM0MzsgIG52bWVtLWNlbGxzOiBbIG52bWVtLWNlbGwtbmFtZXMgXQomIzQzOwomIzQzO2FsbE9mOgomIzQzOyAgLSAkcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sIwomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZQomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjbG9ja3M6IGZhbHNlCiYjNDM7ICAgICAgcmVxdWlyZWQ6CiYjNDM7ICAgICAgICAtIHgtcG93ZXJzLGFjMjAwCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlCiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZQomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSBjbG9ja3MKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHMKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lcwomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZQomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSBjbG9ja3MKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHMKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lcwomIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzIwMAomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgZW51bToKJiM0MzsgICAgICAgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZQomIzQzOyAgICAgICAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlCiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIHJlZzoKJiM0MzsgICAgICAgICAgbWF4aW11bTogNwomIzQzOyAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSYjNDM7JDoKJiM0MzsgICAgICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgICAgICByZWc6CiYjNDM7ICAgICAgICAgICAgICBtYXhpbXVtOiA3CiYjNDM7CiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzO2V4YW1wbGVzOgomIzQzOyAgLSB8CiYjNDM7ICAgIG1kaW8gewomIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZSYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICBjbG9ja3MgPSAmbHQ7JmFtcDtwd20gNSZndDs7CiYjNDM7ICAgICAgICAgICAgdmNjLXN1cHBseSA9ICZsdDsmYW1wO3JlZ18zdjMmZ3Q7OwomIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gJmx0OyZhbXA7ZXBoeV9jb25maWd1cmF0aW9uJmd0OzsKJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gJiMzNDtjb25maWd1cmF0aW9uJiMzNDs7CiYjNDM7ICAgICAgICAgICAgeC1wb3dlcnMsYWMyMDAgPSAmbHQ7JmFtcDthYzIwMCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAgewomIzQzOyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDtldGhlcm5ldC1waHktaWQwMDQ0LjE0MDAmIzM0OzsKJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwomIzQzOwomIzQzOy4uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwppbmRleCBiNGVmOTI3ZmQ0YTY3Li5kMzgzNTU5N2UzNzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwpAQCAtNDg0LDYgJiM0Mzs0ODQsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZCiAJaGVscAogCSAgQ3VycmVudGx5IHN1cHBvcnRzIHRoZSB2c2M4MjQ0CiAKJiM0Mztjb25maWcgWFBPV0VSU19BQ1gwMF9QSFkKJiM0MzsJdHJpc3RhdGUgJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkmIzM0OwomIzQzOwlkZXBlbmRzIG9uIENPTU1PTl9DTEsgJmFtcDsmYW1wOyBOVk1FTSAmYW1wOyZhbXA7IE9GX01ESU8gJmFtcDsmYW1wOyBSRUdVTEFUT1IKJiM0MzsJZGVwZW5kcyBvbiBJMkMgfHwgIUkyQwomIzQzOwlzZWxlY3QgUEhZX1BBQ0tBR0UKJiM0MzsJaGVscAomIzQzOwkgIEVuYWJsZSB0aGUgRmFzdCBFdGhlcm5ldCBQSFkgZHJpdmVyIHNoYXJlZCBieSB0aGUgWC1Qb3dlcnMgQUMyMDAKJiM0MzsJICBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciBjb25maWd1cmVzIHRoZWlyIGNvbW1vbiBNRElPIFBIWQomIzQzOwkgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbAomIzQzOwkgIHJlZ2lzdGVycy4KJiM0MzsKIGNvbmZpZyBYSUxJTlhfR01JSTJSR01JSQogCXRyaXN0YXRlICYjMzQ7WGlsaW54IEdNSUkyUkdNSUkgY29udmVydGVyIGRyaXZlciYjMzQ7CiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCmluZGV4IDI1YzRhM2MyNDI5ZjcuLjQ5NTc1ZmExODUyMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKQEAgLTEwMSw0ICYjNDM7MTAxLDUgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKQkJJiM0Mzs9IHNtc2Mubwogb2JqLSQoQ09ORklHX1NURTEwWFApCQkmIzQzOz0gc3RlMTBYcC5vCiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpCSYjNDM7PSB0ZXJhbmV0aWNzLm8KIG9iai0kKENPTkZJR19WSVRFU1NFX1BIWSkJJiM0Mzs9IHZpdGVzc2UubwomIzQzO29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkJJiM0Mzs9IHhwb3dlcnMvCiBvYmotJChDT05GSUdfWElMSU5YX0dNSUkyUkdNSUkpICYjNDM7PSB4aWxpbnhfZ21paTJyZ21paS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlOTc3YTc5NTgzMjUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSwzIEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzO3hwb3dlcnMtYWN4MDAteSA6PSBhY3gwMC5vIGFjMjAwLm8gYWMzMDAubwomIzQzO29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkgJiM0Mzs9IHhwb3dlcnMtYWN4MDAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYWZkZDJhM2RmYmU0MQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMKQEAgLTAsMCAmIzQzOzEsMzE0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZAomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyIEFybSBMdGQuIChBbmRyZSBQcnp5d2FyYSAmbHQ7YW5kcmUucHJ6eXdhcmFAYXJtLmNvbSZndDspCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaTJjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWdtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2FjeDAwLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVAkzCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWgkyNDAwMDAwMAomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFoJMjcwMDAwMDAKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHCQkJMHgwMDE0CiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUCQlCSVQoMCkKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRQkJCUJJVCgxKQomIzQzOwomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcJCQkweDAwMTYKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRQkJCUJJVCgwKQomIzQzOwomIzQzOy8qIEFDMjAwLWludGVybmFsIGNvcHkgb2YgdGhlIEV0aGVybmV0IFBIWSBjYWxpYnJhdGlvbiBlRnVzZS4gKi8KJiM0MzsjZGVmaW5lIEFDMjAwX0VGVVNFX0VQSFlfUkVHCQkJMHg4MDA0CiYjNDM7CiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NUTF9SRUcJCQkweDYwMDAKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfU0hVVERPV04JCQlCSVQoMCkKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFoJCUJJVCgyKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLCQkJR0VOTUFTSyg4LCA0KQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9STUlJX1NFTAkJCUJJVCgxMSkKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLCQlHRU5NQVNLKDE1LCAxMikKJiM0MzsKJiM0MztzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7CiYjNDM7CXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKJiM0MzsJc3RydWN0IHJlZ3VsYXRvciAqdmNjOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiYjNDM7CXUxNiBlcGh5X2N0bDsKJiM0MzsJdW5zaWduZWQgaW50IHBoeV9hZGRyOwomIzQzOwlwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlOwomIzQzOwlib29sIHN1cHBseV9lbmFibGVkOwomIzQzOwlib29sIHBvd2VyZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7ZXBoeV9jdGwgfAomIzQzOwkJKHByaXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApIHwKJiM0MzsJCUZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LSZndDtwaHlfYWRkcik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LAomIzQzOwkJCQl1bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsdWUpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWdtYXBfd3JpdGUocHJpdi0mZ3Q7cmVnbWFwLCByZWcsIHZhbHVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWRldl9lcnIocHJpdi0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxuJiMzNDssCiYjNDM7CQkJcmVnLCBFUlJfUFRSKHJldCkpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtwb3dlcmVkKSB7CiYjNDM7CQlyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsCiYjNDM7CQkJCQkgICBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfAomIzQzOwkJCQkJICAgQUMyMDBfRVBIWV9TSFVURE9XTik7CiYjNDM7CQllcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CQllcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CiYjNDM7CQlwcml2LSZndDtwb3dlcmVkID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3N1cHBseV9lbmFibGVkKSB7CiYjNDM7CQllcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LSZndDt2Y2MpOwomIzQzOwkJaWYgKCFlcnIpCiYjNDM7CQkJcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQgPSBmYWxzZTsKJiM0MzsJCWVsc2UgaWYgKCFyZXQpCiYjNDM7CQkJcmV0ID0gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7CiYjNDM7CiYjNDM7CXJldHVybiBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7YWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCSAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZSA9PSBpbnRlcmZhY2UpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpCiYjNDM7CQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBBQzIwMF9FUEhZX0NUTF9SRUcsCiYjNDM7CQkJCQkgQUMyMDBfRVBIWV9STUlJX1NFTCwKJiM0MzsJCQkJCSBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgPwomIzQzOwkJCQkJIEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlwcml2LSZndDtpbnRlcmZhY2UgPSBpbnRlcmZhY2U7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwl1MTYgZXBoeV9jdGw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlfYWRkciAmZ3Q7IEZJRUxEX01BWChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0spKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtwb3dlcmVkICZhbXA7JmFtcDsgcHJpdi0mZ3Q7cGh5X2FkZHIgPT0gcGh5X2FkZHIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpIHsKJiM0MzsJCXJldCA9IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsJcHJpdi0mZ3Q7cGh5X2FkZHIgPSBwaHlfYWRkcjsKJiM0MzsKJiM0MzsJaWYgKCFwcml2LSZndDtzdXBwbHlfZW5hYmxlZCkgewomIzQzOwkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LSZndDt2Y2MpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVwaHlfY3RsID0gYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTdGFydCBmcm9tIGEgZGlzYWJsZWQgc3RhdGUgYmVmb3JlIGFwcGx5aW5nIHRoZSBjb25maWd1cmF0aW9uLiBBQzIwMAomIzQzOwkgKiBzcGVjaWZpZXMgbm8gYWRkaXRpb25hbCBkZWxheSBiZXR3ZWVuIHRoZXNlIGNvbnRyb2xzLiBUaGUgY29tcGFuaW9uCiYjNDM7CSAqIE1GRCBwcm92aWRlciBoYXMgY29tcGxldGVkIGl0cyBpbnB1dC1jbG9jayBzdGFydHVwIGRlbGF5IGJlZm9yZQomIzQzOwkgKiBwdWJsaXNoaW5nIHRoZSByZWdtYXAuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9kaXNhYmxlOwomIzQzOwomIzQzOwlyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywKJiM0MzsJCQkJICAgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRywKJiM0MzsJCQkJICAgZXBoeV9jdGwgfCBBQzIwMF9FUEhZX1NIVVRET1dOKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLAomIzQzOwkJCQkgICBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHwKJiM0MzsJCQkJICAgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRywgZXBoeV9jdGwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IHRydWU7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9kaXNhYmxlOgomIzQzOwkvKiBBdHRlbXB0IGV2ZXJ5IHN0ZXAgb2YgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFmdGVyIGEgcGFydGlhbCBzdGFydC4gKi8KJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IHRydWU7CiYjNDM7CWFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsCiYjNDM7CQkgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICphYzIwMF9ub2RlOwomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXY7CiYjNDM7CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7CiYjNDM7CXU4IGJwc19lZmZ1c2VfY29kZTsKJiM0MzsJc3RydWN0IGNsayAqY2xrOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwlwcml2LSZndDtkZXYgPSBkZXY7CiYjNDM7CXByaXYtJmd0O3ZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgJiMzNDt2Y2MmIzM0Oyk7CiYjNDM7CWlmIChJU19FUlIocHJpdi0mZ3Q7dmNjKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtJmd0O3ZjYyksCiYjNDM7CQkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGdldCBwYWNrYWdlIHN1cHBseVxuJiMzNDspKTsKJiM0MzsKJiM0MzsJYWMyMDBfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGFja2FnZV9ub2RlLCAmIzM0O3gtcG93ZXJzLGFjMjAwJiMzNDssIDApOwomIzQzOwlpZiAoIWFjMjAwX25vZGUpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDttaXNzaW5nIHgtcG93ZXJzLGFjMjAwIHJlZmVyZW5jZVxuJiMzNDspKTsKJiM0MzsJY2xpZW50ID0gb2ZfZmluZF9pMmNfZGV2aWNlX2J5X25vZGUoYWMyMDBfbm9kZSk7CiYjNDM7CW9mX25vZGVfcHV0KGFjMjAwX25vZGUpOwomIzQzOwlpZiAoIWNsaWVudCkgewomIzQzOwkJcmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAgJiMzNDtBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcbiYjMzQ7KSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCAmYW1wO2NsaWVudC0mZ3Q7ZGV2LAomIzQzOwkJCSAgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O2ZhaWxlZCB0byBsaW5rIEFDMjAwIGRldmljZVxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X2NsaWVudDsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXZpY2VfbG9jaygmYW1wO2NsaWVudC0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKGRldmljZV9pc19ib3VuZCgmYW1wO2NsaWVudC0mZ3Q7ZGV2KSkKJiM0MzsJCXByaXYtJmd0O3JlZ21hcCA9IGRldl9nZXRfcmVnbWFwKCZhbXA7Y2xpZW50LSZndDtkZXYsIE5VTEwpOwomIzQzOwlkZXZpY2VfdW5sb2NrKCZhbXA7Y2xpZW50LSZndDtkZXYpOwomIzQzOwlpZiAoIXByaXYtJmd0O3JlZ21hcCkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsCiYjNDM7CQkJCSAgICAmIzM0O0FDMjAwIGRyaXZlciBpcyBub3QgcmVhZHlcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9jbGllbnQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFoYXNfY2FsaWJyYXRpb24pIHsKJiM0MzsJCXJldCA9IHJlZ21hcF9yZWFkKHByaXYtJmd0O3JlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsCiYjNDM7CQkJCSAgJmFtcDtpbnRlcm5hbF9jYWxpYnJhdGlvbik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gb3V0X2Vycm9yOwomIzQzOwkJY2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovCiYjNDM7CWJwc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiAmIzQzOyBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUKSAmYW1wOwomIzQzOwkJCSAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7CiYjNDM7CXByaXYtJmd0O2VwaHlfY3RsID0KJiM0MzsJCUZJRUxEX1BSRVAoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0ssIGJwc19lZmZ1c2VfY29kZSk7CiYjNDM7CS8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi8KJiM0MzsKJiM0MzsJY2xrID0gY2xrX2dldCgmYW1wO2NsaWVudC0mZ3Q7ZGV2LCBOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihjbGspKSB7CiYjNDM7CQlyZXQgPSBQVFJfRVJSKGNsayk7CiYjNDM7CQlnb3RvIG91dF9lcnJvcjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGUgYm91bmQgQUMyMDAgcHJvdmlkZXIgZW5hYmxlcyBhbmQgZXhjbHVzaXZlbHkgcGlucyB0aGlzIHJhdGUuICovCiYjNDM7CWNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7CiYjNDM7CWNsa19wdXQoY2xrKTsKJiM0MzsKJiM0MzsJc3dpdGNoIChjbGtfcmF0ZSkgewomIzQzOwljYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOgomIzQzOwkJcHJpdi0mZ3Q7ZXBoeV9jdGwgfD0gQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaOgomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7dW5zdXBwb3J0ZWQgQUMyMDAgY2xvY2sgcmF0ZSAlbHUgSHpcbiYjMzQ7LAomIzQzOwkJCQkgICAgY2xrX3JhdGUpOwomIzQzOwkJZ290byBvdXRfcHV0X2NsaWVudDsKJiM0MzsJfQomIzQzOwomIzQzOwlwcml2LSZndDtjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmOwomIzQzOwlwcml2LSZndDtjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlOwomIzQzOwkvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovCiYjNDM7CXByaXYtJmd0O2ludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7CiYjNDM7CXB1dF9kZXZpY2UoJmFtcDtjbGllbnQtJmd0O2Rldik7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO3ByaXYtJmd0O2NvbnRyb2w7CiYjNDM7CiYjNDM7b3V0X2Vycm9yOgomIzQzOwlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplIEFDMjAwIGNvbnRyb2xcbiYjMzQ7KTsKJiM0MztvdXRfcHV0X2NsaWVudDoKJiM0MzsJcHV0X2RldmljZSgmYW1wO2NsaWVudC0mZ3Q7ZGV2KTsKJiM0MzsJcmV0dXJuIEVSUl9QVFIocmV0KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hYTU2MDQzMmExNGM5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuYwpAQCAtMCwwICYjNDM7MSwzODcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBYLVBvd2VycyBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgJmx0O2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9waHlsaWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDthY3gwMC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQJMwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFoJMjQwMDAwMDAKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaCTI1MDAwMDAwCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWgkyNzAwMDAwMAomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfUkVHCQkJMHgwMAomIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTSwkJR0VOTUFTSygxMSwgOCkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLCQkJR0VOTUFTSyg3LCA2KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWgkJRklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMCkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFoJCUZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDEpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaCQlGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAyKQomIzQzOyNkZWZpbmUgQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRQkJCUJJVCg1KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRQkJQklUKDQpCiYjNDM7I2RlZmluZSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFCQlCSVQoMikKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQJCUJJVCgxKQomIzQzOyNkZWZpbmUgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVAkJQklUKDApCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPCQlCSVQoMykKJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSwkJR0VOTUFTSygyLCAwKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0JJQVMxX1JFRwkJCTB4MDIKJiM0MzsjZGVmaW5lIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFCQlCSVQoMTUpCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHCQkJMHgwNQomIzQzOyNkZWZpbmUgQUMzMDBfTURJT19EUlZfTUFTSwkJCUdFTk1BU0soMTUsIDE0KQomIzQzOyNkZWZpbmUgQUMzMDBfTUlJX0RSVl9NQVNLCQkJR0VOTUFTSygxMSwgMTApCiYjNDM7I2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMgkJCTIKJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUJCQlCSVQoNCkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRQkJCUJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DT05GSUdfUkVHCQkJMHgwNgomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0sJCUdFTk1BU0soMTUsIDEyKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9STUlJX1NFTAkJCUJJVCgxMSkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfU0hVVERPV04JCQlCSVQoMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTIFwKJiM0MzsJKEFDMzAwX0VGVVNFX0NMS19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFIHwgXAomIzQzOwkgQUMzMDBfQ0xLSU5fR0FUSU5HX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfCBcCiYjNDM7CSBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0lPX1ZBTFVFIFwKJiM0MzsJKEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXAomIzQzOwkgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFwKJiM0MzsJIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUgfCBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEUpCiYjNDM7CiYjNDM7c3RydWN0IGFjMzAwX2VwaHlfY3RsIHsKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sOwomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwomIzQzOwlzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7CiYjNDM7CXN0cnVjdCBjbGsgKmNsazsKJiM0MzsJdTE2IHN5c19jb250cm9sOwomIzQzOwl1MTYgZXBoeV9jb25maWc7CiYjNDM7CXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7CiYjNDM7CWJvb2wgcGFja2FnZV9rbm93bjsKJiM0MzsJYm9vbCBpbnRlcm5hbF9kbGRvOwomIzQzOwlib29sIHN1cHBseV9lbmFibGVkOwomIzQzOwlib29sIHBvd2VyZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50CiYjNDM7YWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CXJldHVybiBwcml2LSZndDtwaHlkZXYtJmd0O21kaW8uYWRkcjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9yZWFkKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CXJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LSZndDtwaHlkZXYsCiYjNDM7CQkJCSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7CiYjNDM7CXBoeV91bmxvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sCiYjNDM7CQkJCXUxNiB2YWwpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwaHlfbG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwlyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSwgdmFsKTsKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX21vZGlmeShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sCiYjNDM7CQkJCSB1MTYgbWFzaywgdTE2IHNldCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CXJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LSZndDtwaHlkZXYsCiYjNDM7CQkJCSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCkgewomIzQzOwkJdTE2IHZhbCA9IChyZXQgJmFtcDsgfm1hc2spIHwgKHNldCAmYW1wOyBtYXNrKTsKJiM0MzsKJiM0MzsJCXJldCA9IHZhbCA9PSByZXQgPyAwIDoKJiM0MzsJCQlfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJCSAgICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsCiYjNDM7CQkJCQkgICAgcmVnbnVtLCB2YWwpOwomIzQzOwl9CiYjNDM7CXBoeV91bmxvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHByaXYtJmd0O2VwaHlfY29uZmlnIHwKJiM0MzsJCShwcml2LSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgPwomIzQzOwkJIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBBIGNoaXAgcmVzZXQgcmVzdG9yZXMgRExET0VOIHRvIG9uZS4gVW50aWwgUEtHX1NUQVRVUyBoYXMgaWRlbnRpZmllZAomIzQzOwkgKiB0aGUgc3VwcGx5IGFycmFuZ2VtZW50LCBwcmVzZXJ2ZSBhbnkgZXh0ZXJuYWwtVkREIHNldHVwIGxlZnQgYnkgdGhlCiYjNDM7CSAqIGJvb3Rsb2FkZXIgYnkgYXNzZXJ0aW5nIG9ubHkgdGhlIEVQSFkgcmVzZXQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gIXByaXYtJmd0O3BhY2thZ2Vfa25vd24gfHwgIXByaXYtJmd0O2ludGVybmFsX2RsZG8gPwomIzQzOwkJQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCA6IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpIHsKJiM0MzsJCXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRywKJiM0MzsJCQkJCSAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8CiYjNDM7CQkJCQkgICBBQzMwMF9FUEhZX1NIVVRET1dOKTsKJiM0MzsJCWVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsIDApOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJcmV0ID0gZXJyOwomIzQzOwkJZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLAomIzQzOwkJCQkJICAgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdikpOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJcmV0ID0gZXJyOwomIzQzOwomIzQzOwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtJmd0O2Nsayk7CiYjNDM7CQlwcml2LSZndDtwb3dlcmVkID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3N1cHBseV9lbmFibGVkKSB7CiYjNDM7CQllcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LSZndDt2Y2MpOwomIzQzOwkJaWYgKCFlcnIpCiYjNDM7CQkJcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQgPSBmYWxzZTsKJiM0MzsJCWVsc2UgaWYgKCFyZXQpCiYjNDM7CQkJcmV0ID0gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7CiYjNDM7CiYjNDM7CXJldHVybiBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7YWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCSAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZSA9PSBpbnRlcmZhY2UpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpCiYjNDM7CQlyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLAomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwsCiYjNDM7CQkJCQkgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID8KJiM0MzsJCQkJCSAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcHJpdi0mZ3Q7aW50ZXJmYWNlID0gaW50ZXJmYWNlOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGludCBwaHlfYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsJdTggcGFja2FnZV9zdGF0dXM7CiYjNDM7CXUxNiByZXNldF92YWx1ZTsKJiM0MzsJaW50IHN5c19jb250cm9sOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocGh5X2FkZHIgIT0gYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtwb3dlcmVkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQpIHsKJiM0MzsJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi0mZ3Q7dmNjKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCXByaXYtJmd0O3N1cHBseV9lbmFibGVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCS8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi8KJiM0MzsJCWZzbGVlcCgxMDAwMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtJmd0O2Nsayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CXByaXYtJmd0O3Bvd2VyZWQgPSB0cnVlOwomIzQzOwomIzQzOwkvKiBLZWVwIHRoZSBleHRlcm5hbC1zdXBwbHkgY29uZmlndXJhdGlvbiBhY3Jvc3MgY2hpcCByZXNldHMuICovCiYjNDM7CXJlc2V0X3ZhbHVlID0gYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdik7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywgcmVzZXRfdmFsdWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBUaGUgbWFudWFsIHJlcXVpcmVzIGJvdGggcmVzZXRzIHRvIGJlIHJlbGVhc2VkIGJlZm9yZSB0aGUgY2xvY2tzLiAqLwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCSAgIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfAomIzQzOwkJCQkgIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBSZXRhaW4gdGhlIHZlbmRvciBjbG9jay1lbmFibGUgZGVmYXVsdHMsIGluY2x1ZGluZyB0aGUgZUZ1c2UgY2xvY2suICovCiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywKJiM0MzsJCQkJICAgcHJpdi0mZ3Q7c3lzX2NvbnRyb2wpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlzeXNfY29udHJvbCA9IGFjMzAwX2VwaHlfY3RsX3JlYWQocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHKTsKJiM0MzsJaWYgKHN5c19jb250cm9sICZsdDsgMCkgewomIzQzOwkJcmV0ID0gc3lzX2NvbnRyb2w7CiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGFja2FnZV9zdGF0dXMgPSBGSUVMRF9HRVQoQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTSywgc3lzX2NvbnRyb2wpOwomIzQzOwlpZiAoKH5wYWNrYWdlX3N0YXR1cyAmYW1wOyBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9CiYjNDM7CSAgICBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7aW50ZXJuYWxfZGxkbyA9IHBhY2thZ2Vfc3RhdHVzICZhbXA7IEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE87CiYjNDM7CXByaXYtJmd0O3BhY2thZ2Vfa25vd24gPSB0cnVlOwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfU1lTX0JJQVMxX1JFRywKJiM0MzsJCQkJICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLAomIzQzOwkJCQkgICBwcml2LSZndDtpbnRlcm5hbF9kbGRvID8KJiM0MzsJCQkJICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUgOiAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJLyogS2VlcCB0aGUgZG9jdW1lbnRlZCBkZWZhdWx0IGRyaXZlIGxldmVsIGFuZCBsZWF2ZSB0aGUgSVJRIGRpc2FibGVkLiAqLwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLAomIzQzOwkJCQkgICBBQzMwMF9TWVNfSU9fVkFMVUUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlmc2xlZXAoMTAwMDApOwomIzQzOwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsCiYjNDM7CQkJCSAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8CiYjNDM7CQkJCSAgQUMzMDBfRVBIWV9TSFVURE9XTik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CWZzbGVlcCgxMDAwMCk7CiYjNDM7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRywKJiM0MzsJCQkJICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3Bvd2VyX29mZjoKJiM0MzsJYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwljbGtfcHV0KGRhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICoKJiM0MzthYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKJiM0MzsJc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2OwomIzQzOwl1bnNpZ25lZCBsb25nIGNsa19yYXRlOwomIzQzOwl1OCBiZ3NfZWZmdXNlX2NvZGU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CWlmIChwaHlkZXYtJmd0O21kaW8uYWRkciAmZ3Q7IEZJRUxEX01BWChBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkgICAgICYjMzQ7bGluayBhZGRyZXNzIGlzIG91dHNpZGUgdGhlIHBhY2thZ2UgcmFuZ2VcbiYjMzQ7KSk7CiYjNDM7CXByaXYtJmd0O3BoeWRldiA9IHBoeWRldjsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7dmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCAmIzM0O3ZjYyYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDt2Y2MpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7dmNjKSwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XG4mIzM0OykpOwomIzQzOwomIzQzOwlwcml2LSZndDtjbGsgPSBvZl9jbGtfZ2V0KHBhY2thZ2Vfbm9kZSwgMCk7CiYjNDM7CWlmIChJU19FUlIocHJpdi0mZ3Q7Y2xrKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtJmd0O2NsayksCiYjNDM7CQkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGdldCBpbnB1dCBjbG9ja1xuJiMzNDspKTsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWMzMDBfZXBoeV9jbGtfcHV0LCBwcml2LSZndDtjbGspOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgcHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsCiYjNDM7CQkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGxvY2sgY2xvY2sgcmF0ZVxuJiMzNDspKTsKJiM0MzsKJiM0MzsJY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUocHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJc3dpdGNoIChjbGtfcmF0ZSkgewomIzQzOwljYXNlIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOgomIzQzOwkJcHJpdi0mZ3Q7c3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6CiYjNDM7CQlwcml2LSZndDtzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFo7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWjoKJiM0MzsJCXByaXYtJmd0O3N5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWjsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkgICAgICYjMzQ7dW5zdXBwb3J0ZWQgaW5wdXQgY2xvY2sgcmF0ZSAlbHUgSHpcbiYjMzQ7LAomIzQzOwkJCQkJICAgICBjbGtfcmF0ZSkpOwomIzQzOwl9CiYjNDM7CXByaXYtJmd0O3N5c19jb250cm9sIHw9IEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTOwomIzQzOwomIzQzOwkvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovCiYjNDM7CWJnc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiAmIzQzOyBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUKSAmYW1wOwomIzQzOwkJCSAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7CiYjNDM7CXByaXYtJmd0O2VwaHlfY29uZmlnID0KJiM0MzsJCUZJRUxEX1BSRVAoQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0ssIGJnc19lZmZ1c2VfY29kZSk7CiYjNDM7CS8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi8KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7Y29udHJvbC5wb3dlcl9vbiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uOwomIzQzOwlwcml2LSZndDtjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjsKJiM0MzsJcHJpdi0mZ3Q7Y29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTsKJiM0MzsJLyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqLwomIzQzOwlwcml2LSZndDtpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJOwomIzQzOwomIzQzOwlyZXR1cm4gJmFtcDtwcml2LSZndDtjb250cm9sOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmVkMjNhM2NiZmUyYTEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jCkBAIC0wLDAgJiM0MzsxLDYyMSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXIKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAxOSBKZXJuZWogU2tyYWJlYyAmbHQ7amVybmVqLnNrcmFiZWNAZ21haWwuY29tJmd0OwomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9udm1lbS1jb25zdW1lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vcGh5bGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YWN4MDAuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0lECQkJCTB4MDA0NDE0MDAKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0sJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMAkJQklUKDgpCiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cJQklUKDkpCiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcJCQkweDFmCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLCQkJR0VOTUFTSygxMiwgOCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMAkJCQkwCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzEJCQkJMQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV8yCQkJCTIKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfNgkJCQk2CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzgJCQkJOAomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUcJCTB4MTMKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUCUJJVCgxMikKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0sJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8JCTIKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFRwkJMHgxMgomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFCTB4NDgyNAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRwkJMHgxMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEUJCQlCSVQoMTUpCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcJMHgxNwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRQlCSVQoMykKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUcJCTB4MTgKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLCQlHRU5NQVNLKDE0LCAxMikKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUCTAKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRwkJMHgxMAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRQkweDU1MjMKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFRwkJMHgxMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUJCTB4ZjAwMAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFRwkweDE0CiYjNDM7I2RlZmluZSBBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFCTB4NzA4ZgomIzQzOyNkZWZpbmUgQUMzMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRQkweDcwOGIKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFRwkJCTB4MTUKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSwkJR0VOTUFTSygxNSwgOCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLCQlHRU5NQVNLKDcsIDApCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRShfMTAwbSwgXzEwbSkgXAomIzQzOwkoRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0ssIChfMTAwbSkpIHwgXAomIzQzOwkgRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xME1fTUFTSywgKF8xMG0pKSkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUUgXAomIzQzOwlBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRSBcCiYjNDM7CUFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MzUsIDB4MzMpCiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUcJCTB4MTgKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFCQkweDAwYmMKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHCQkweDFkCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMJMHgwMDQ0CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXAomIzQzOwkoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFwKJiM0MzsJIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBbm90aGVyIGludGVncmF0aW9uIG9mIHRoaXMgZXhhY3QtSUQgUEhZIGRvY3VtZW50cyBpdHMgZGlnaXRhbCB2ZW5kb3IKJiM0MzsgKiByZWdpc3RlciBtYXAsIHdoaWNoIGFsc28gbWF0Y2hlcyB0aGUgb2JzZXJ2ZWQgQUN4MDAgcmVzZXQgdmFsdWVzLiBUaGUgQUN4MDAKJiM0MzsgKiBhbmFsb2ctcGFnZSBmaWVsZCBlbmNvZGluZ3MgcmVtYWluIHVucHVibGlzaGVkLCBzbyBrZWVwIHRob3NlIGFzIG9wYXF1ZQomIzQzOyAqIHZlbmRvciBpbml0aWFsaXphdGlvbiB2YWx1ZXMgaW5zdGVhZCBvZiBpbnZlbnRpbmcgYml0IGRlZmluaXRpb25zLgomIzQzOyAqLwomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X3ByaXYgewomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sOwomIzQzOwkvKiBTZXJpYWxpemVzIHBhY2thZ2Ugc3RhdGUgYW5kIG11bHRpLXJlZ2lzdGVyIHBvd2VyIHNlcXVlbmNlcy4gKi8KJiM0MzsJc3RydWN0IG11dGV4IHN0YXRlX2xvY2s7CiYjNDM7CWJvb2wgaXNfYWMzMDA7CiYjNDM7CWJvb2wgdXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmc7CiYjNDM7CWJvb2wgeG1paV9yeF9jbG9ja19pbnZlcnRlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcsCiYjNDM7CQkJICAgRklFTERfUFJFUChBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLLCBwYWdlKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBwcml2LSZndDtjb250cm9sLSZndDtwb3dlcl9vbihwcml2LSZndDtjb250cm9sLAomIzQzOwkJCQkgICAgICAgcHJpdi0mZ3Q7cGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O2NvbnRyb2wtJmd0O3Bvd2VyX29mZihwcml2LSZndDtjb250cm9sKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSAmYW1wOyZhbXA7CiYjNDM7CSAgICBwaHlkZXYtJmd0O2ludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7Y29udHJvbC0mZ3Q7c2V0X2ludGVyZmFjZShwcml2LSZndDtjb250cm9sLAomIzQzOwkJCQkJICAgIHBoeWRldi0mZ3Q7aW50ZXJmYWNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcGh5ZGV2X3dhcm4ocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCSAgICAmIzM0O2ZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXG4mIzM0OywKJiM0MzsJCQkgICAgRVJSX1BUUihyZXQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2Uodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CWFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiYjNDM7CQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgdTE2ICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBudm1lbV9jZWxsICpjZWxsOwomIzQzOwlzaXplX3QgaTsKJiM0MzsJc2l6ZV90IGxlbjsKJiM0MzsJdTggKmJ1ZjsKJiM0MzsJdTE2IHZhbCA9IDA7CiYjNDM7CiYjNDM7CWNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChub2RlLCBuYW1lKTsKJiM0MzsJaWYgKElTX0VSUihjZWxsKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKGNlbGwpOwomIzQzOwomIzQzOwlidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgJmFtcDtsZW4pOwomIzQzOwludm1lbV9jZWxsX3B1dChjZWxsKTsKJiM0MzsJaWYgKElTX0VSUihidWYpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoYnVmKTsKJiM0MzsJaWYgKCFsZW4gfHwgbGVuICZndDsgc2l6ZW9mKCp2YWx1ZSkpIHsKJiM0MzsJCWtmcmVlKGJ1Zik7CiYjNDM7CQlyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGxlbjsgaSYjNDM7JiM0MzspCiYjNDM7CQl2YWwgfD0gKHUxNilidWZbaV0gJmx0OyZsdDsgKDggKiBpKTsKJiM0MzsJa2ZyZWUoYnVmKTsKJiM0MzsJKnZhbHVlID0gdmFsOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTsKJiM0MzsJYm9vbCBzZWxlY3RhYmxlOwomIzQzOwlib29sIGZpeGVkX2FjMzAwOwomIzQzOwlib29sIGhhc19jb25maWd1cmF0aW9uOwomIzQzOwl1OCBjYWxpYnJhdGlvbjsKJiM0MzsJdTMyIGJhc2VfYWRkcjsKJiM0MzsJdTE2IGNvbmZpZ3VyYXRpb24gPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KGRldi0mZ3Q7b2Zfbm9kZSk7CiYjNDM7CWlmICghcGFja2FnZV9ub2RlKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgJiMzNDtldGhlcm5ldC1waHktcGFja2FnZSYjMzQ7KSkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O1BIWSBpcyBub3QgaW4gYW4gRXRoZXJuZXQgUEhZIHBhY2thZ2VcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgJiMzNDtyZWcmIzM0OywgJmFtcDtiYXNlX2FkZHIpOwomIzQzOwlpZiAocmV0IHx8IGJhc2VfYWRkciAhPSBwaHlkZXYtJmd0O21kaW8uYWRkcikgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O3BhY2thZ2UgYW5kIGxpbmsgUEhZIGFkZHJlc3NlcyBkaWZmZXJcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkgICAgICYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlJiMzNDspOwomIzQzOwlmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSAgICAgICYjMzQ7eC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlJiMzNDspOwomIzQzOwlpZiAoIXNlbGVjdGFibGUgJmFtcDsmYW1wOyAhZml4ZWRfYWMzMDAgJmFtcDsmYW1wOwomIzQzOwkgICAgIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJICAgICAmIzM0O3gtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZSYjMzQ7KSkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O3Vuc3VwcG9ydGVkIEV0aGVybmV0IFBIWSBwYWNrYWdlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CiYjNDM7CWhhc19jb25maWd1cmF0aW9uID0KJiM0MzsJCW9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhwYWNrYWdlX25vZGUsICYjMzQ7bnZtZW0tY2VsbC1uYW1lcyYjMzQ7LAomIzQzOwkJCQkJICYjMzQ7Y29uZmlndXJhdGlvbiYjMzQ7KSAmZ3Q7PSAwOwomIzQzOwlpZiAoaGFzX2NvbmZpZ3VyYXRpb24pIHsKJiM0MzsJCXJldCA9IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYocGFja2FnZV9ub2RlLCAmIzM0O2NvbmZpZ3VyYXRpb24mIzM0OywKJiM0MzsJCQkJCQkmYW1wO2NvbmZpZ3VyYXRpb24pOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsCiYjNDM7CQkJCQkgICAgJiMzNDtmYWlsZWQgdG8gcmVhZCBwYWNrYWdlIGNvbmZpZ3VyYXRpb25cbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7cGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2VsZWN0YWJsZSkgewomIzQzOwkJcHJpdi0mZ3Q7aXNfYWMzMDAgPQomIzQzOwkJCWNvbmZpZ3VyYXRpb24gJmFtcDsgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXByaXYtJmd0O2lzX2FjMzAwID0gZml4ZWRfYWMzMDA7CiYjNDM7CQlpZiAoaGFzX2NvbmZpZ3VyYXRpb24gJmFtcDsmYW1wOwomIzQzOwkJICAgICEhKGNvbmZpZ3VyYXRpb24gJmFtcDsgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMCkgIT0KJiM0MzsJCSAgICBwcml2LSZndDtpc19hYzMwMCkgewomIzQzOwkJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkJICAgICYjMzQ7Y29uZmlndXJhdGlvbiBkb2VzIG5vdCBtYXRjaCBwYWNrYWdlXG4mIzM0Oyk7CiYjNDM7CQkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSywKJiM0MzsJCQkJY29uZmlndXJhdGlvbik7CiYjNDM7CiYjNDM7CXByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nID0KJiM0MzsJCXByaXYtJmd0O2lzX2FjMzAwICZhbXA7JmFtcDsKJiM0MzsJCSEhKGNvbmZpZ3VyYXRpb24gJmFtcDsgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XKTsKJiM0MzsJcHJpdi0mZ3Q7eG1paV9yeF9jbG9ja19pbnZlcnRlZCA9CiYjNDM7CQlvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGFja2FnZV9ub2RlLAomIzQzOwkJCQkgICAgICAmIzM0O3gtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCkKJiM0MzsJCXByaXYtJmd0O2NvbnRyb2wgPQomIzQzOwkJCWFjMzAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSAgICAgIGNhbGlicmF0aW9uKTsKJiM0MzsJZWxzZQomIzQzOwkJcHJpdi0mZ3Q7Y29udHJvbCA9CiYjNDM7CQkJYWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLAomIzQzOwkJCQkJICAgICAgaGFzX2NvbmZpZ3VyYXRpb24sCiYjNDM7CQkJCQkgICAgICBjYWxpYnJhdGlvbik7CiYjNDM7CXJldCA9IFBUUl9FUlJfT1JfWkVSTyhwcml2LSZndDtjb250cm9sKTsKJiM0MzsKJiM0MztvdXRfcHV0X25vZGU6CiYjNDM7CW9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CXJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzEsCiYjNDM7CQkJICAgICAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRywKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O29mX25vZGUpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7cGh5ZGV2ID0gcGh5ZGV2OwomIzQzOwltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHBoeWRldiwgcHJpdik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3ByaXYgPSBwcml2OwomIzQzOwlyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSwgcHJpdik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBwb3dlciBvbiBjb250cm9sIGJsb2NrXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBBQ3gwMCBjYW4gYWNrbm93bGVkZ2UgcmVzZXQgaW4gcG93ZXItZG93biB3aXRob3V0IHJlc3RhcnRpbmcuICovCiYjNDM7CXJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VucGh5X3NvZnRfcmVzZXQocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzO291dF9wb3dlcl9vZmY6CiYjNDM7CWFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2FjeDAwX2VwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CXUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi0mZ3Q7aXNfYWMzMDAgPwomIzQzOwkJQUMzMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRSA6CiYjNDM7CQlBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFOwomIzQzOwl1MTYgdHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFOwomIzQzOwl1MTYgZ2xvYmFsX2NvbmZpZzsKJiM0MzsJaW50IG9sZHBhZ2U7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJZ2xvYmFsX2NvbmZpZyA9IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSywKJiM0MzsJCQkJICAgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUTyk7CiYjNDM7CWlmIChwcml2LSZndDt4bWlpX3J4X2Nsb2NrX2ludmVydGVkKQomIzQzOwkJZ2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEFDWDAwX1BBR0VfMCwKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUcsCiYjNDM7CQkJICAgICAgIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUIHwKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSywgZ2xvYmFsX2NvbmZpZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aXNfYWMzMDAgJmFtcDsmYW1wOyBwcml2LSZndDt1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykgewomIzQzOwkJYWZlX2VxX3J4X2RldGVjdCA9CiYjNDM7CQkJQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFOwomIzQzOwkJdHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFOwomIzQzOwl9CiYjNDM7CiYjNDM7CW9sZHBhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzEpOwomIzQzOwlpZiAob2xkcGFnZSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gb2xkcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsCiYjNDM7CQkJICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLAomIzQzOwkJCSAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssCiYjNDM7CQkJCSAgICAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfNik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFRywKJiM0MzsJCQkgIGFmZV9lcV9yeF9kZXRlY3QpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFRywKJiM0MzsJCQkgIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwICZhbXA7JmFtcDsgcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9SRUcsIHR4X2xldmVsX3ZhbHVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV84KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwICZhbXA7JmFtcDsgcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCSAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUpOwomIzQzOwomIzQzO291dF9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldCA9IHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi8KJiM0MzsJcmV0ID0gZ2VucGh5X2M0NV9hbl9jb25maWdfZWVlX2FuZWcocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CXJldCA9IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2FjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3BoeWRldi0mZ3Q7bG9jayk7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBQb3dlcmluZyBvZmYgdGhlIGNvbnRyb2wgYmxvY2sgbG9zZXMgdGhlIHZlbmRvci1wYWdlIHN0YXRlLiAqLwomIzQzOwlyZXQgPSBfX2FjeDAwX2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7b3V0X3Bvd2VyX29mZjoKJiM0MzsJYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CXJldCA9IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJlc3VtZV9yZXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIFRoZSBzdXNwZW5kIGNhbGxiYWNrIGlzIGludm9rZWQgd2l0aG91dCB0aGUgcGh5bGliIGxvY2sgaGVsZC4gKi8KJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3BoeWRldi0mZ3Q7bG9jayk7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcmVzdW1lX3JldCA9IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7CiYjNDM7CQlpZiAocmVzdW1lX3JldCkKJiM0MzsJCQlwaHlkZXZfd2FybihwaHlkZXYsCiYjNDM7CQkJCSAgICAmIzM0O2ZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXG4mIzM0OywKJiM0MzsJCQkJICAgIEVSUl9QVFIocmVzdW1lX3JldCkpOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3BoeWRldi0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LSZndDttZGlvLmRldi5vZl9ub2RlOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTsKJiM0MzsJYm9vbCBtYXRjaDsKJiM0MzsKJiM0MzsJaWYgKCFnZW5waHlfbWF0Y2hfcGh5X2RldmljZShwaHlkZXYsIHBoeWRydikgfHwgIW5vZGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogUks2MzAgcmVwb3J0cyB0aGUgc2FtZSBQSFkgSUQsIHNvIGFsc28gbWF0Y2ggdGhlIHBhY2thZ2UgaWRlbnRpdHkuICovCiYjNDM7CXBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7CiYjNDM7CWlmICghcGFja2FnZV9ub2RlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW1hdGNoID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkJJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UmIzM0OykgfHwKJiM0MzsJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSYjMzQ7eC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlJiMzNDspIHx8CiYjNDM7CQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZSYjMzQ7KTsKJiM0MzsJb2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hdGNoOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWN4MDBfZXBoeV9kcml2ZXJbXSA9IHsKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLAomIzQzOwkJLm5hbWUgPSAmIzM0O1gtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFkmIzM0OywKJiM0MzsJCS5tYXRjaF9waHlfZGV2aWNlID0gYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlLAomIzQzOwkJLnByb2JlID0gYWN4MDBfZXBoeV9wcm9iZSwKJiM0MzsJCS5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSwKJiM0MzsJCS53cml0ZV9wYWdlID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlLAomIzQzOwkJLnNvZnRfcmVzZXQgPSBhY3gwMF9lcGh5X3NvZnRfcmVzZXQsCiYjNDM7CQkuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LAomIzQzOwkJLmRpc2FibGVfYXV0b25vbW91c19lZWUgPSBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUsCiYjNDM7CQkuc3VzcGVuZCA9IGFjeDAwX2VwaHlfc3VzcGVuZCwKJiM0MzsJCS5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSwKJiM0MzsJfSwKJiM0Mzt9OwomIzQzO21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFjeDAwX2VwaHlfdGJsW10gPSB7CiYjNDM7CXsgUEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpIH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7CiYjNDM7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0phbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaCBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uN2RmNjA4NGM3YTc3MgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmgKQEAgLTAsMCAmIzQzOzEsMjggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7I2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0gKJiM0MzsjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQJMTYKJiM0MzsKJiM0MztzdHJ1Y3QgZGV2aWNlX25vZGU7CiYjNDM7CiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7CiYjNDM7CWludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCXVuc2lnbmVkIGludCBwaHlfYWRkcik7CiYjNDM7CWludCAoKnBvd2VyX29mZikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCk7CiYjNDM7CWludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsCiYjNDM7CQkgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTsKJiM0MzsKJiM0MzsjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDc6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MjQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA4NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgRHJpdmVyKioKCk9rYXksIHNvIHdlIGhhdmUgYSBuZXcgZHJpdmVyIGZvciBFdGhlcm5ldCBQSFlzIHNwZWNpZmljYWxseSBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MsIHJlc2lkaW5nIGluIGBkcml2ZXJzL25ldC9waHkveHBvd2Vycy9gLiBJdCBkZWZpbmVzIGBDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFlgIGFuZCBpbXBsZW1lbnRzIHRoZSB1c3VhbCBQSFkgZHJpdmVyIGZ1bmN0aW9uczogcHJvYmUsIHJlc2V0LCBpbml0aWFsaXphdGlvbiwgYW5kIHBvd2VyIG1hbmFnZW1lbnQgKHN1c3BlbmQvcmVzdW1lKS4gQWxzbywgSSBzZWUgYGFjMjAwX2VwaHlfY3RsX2NyZWF0ZWAgYW5kIGBhYzMwMF9lcGh5X2N0bF9jcmVhdGVgLCB3aGljaCBwcm9iYWJseSBoYW5kbGUgc29tZSBkZXZpY2Utc3BlY2lmaWMgY29udHJvbCBhc3BlY3RzLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGludGVyYWN0IHdpdGggdGhpcyBkcml2ZXIsIGFuZCBob3cgdG8gdHJpZ2dlciBpdHMgcHJvYmUgZnVuY3Rpb24uIEl0JiMzOTtzIGFuIEV0aGVybmV0IFBIWSwgc28gdGhlIHN0YW5kYXJkIGFjY2VzcyBtZXRob2QgaXMgdmlhIE1ESU8uIENhbiBJIHJlYWNoIHRoaXMgY29kZSBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBRRU1VIGVtdWxhdGVzIHNvbWUgbmV0d29yayBpbnRlcmZhY2VzLCBidXQgZG9lcyBpdCBhY3R1YWxseSBlbXVsYXRlIHRoZSBYLVBvd2VycyBBQzIwMC9BQzMwMCBQSFk/IE5vLCBwcm9iYWJseSBub3QuCgpTbywgaG93IGRvIEkgZ2V0IHRoZSBwcm9iZSBmdW5jdGlvbiBjYWxsZWQ/IFBIWSBkcml2ZXJzIGFyZSB1c3VhbGx5IHByb2JlZCBieSB0aGUgTURJTyBidXMgZHJpdmVyIGJhc2VkIG9uIGRldmljZSB0cmVlIGluZm9ybWF0aW9uIG9yIGhhcmR3YXJlIHByb2JpbmcuIEkgbmVlZCBhbiBNRElPIGJ1cyBhbmQgYSBkZXZpY2UgcmVnaXN0ZXJlZCBvbiBpdC4gQ2FuIEkgc2V0IHVwIGEgdmlydHVhbCBNRElPIGJ1cyBhbmQgaW5qZWN0IGEgZGV2aWNlIGZvciB0ZXN0aW5nPyBTeXprYWxsZXIgaXMgdGhlIGdvLXRvIGZ1enppbmcgdG9vbCwgYnV0IGRvZXMgaXQgaGF2ZSBhIHdheSB0byBpbmplY3QgTURJTyBkZXZpY2VzIGRpcmVjdGx5PwoKSSBrbm93IHN5emthbGxlciBjYW4gY3JlYXRlIHZpcnR1YWwgZGV2aWNlcyBmb3IgdmFyaW91cyBzdWJzeXN0ZW1zIC0gVVNCICh2aGNpKSwgV2lGaSAobWFjODAyMTFfaHdzaW0pLCBpbnB1dCAodWlucHV0KSwgRFJNICh2a21zKSwgQUxTQSAoc25kLWFsb29wKS4gRG9lcyBpdCBoYXZlIGFueXRoaW5nIGVxdWl2YWxlbnQgZm9yIE1ESU8/IEkgbmVlZCB0byBjaGVjayBpdHMgTURJTyBkZXNjcmlwdGlvbnMuCgpJIHJlbWVtYmVyIHRoaW5raW5nIGFib3V0IGBtZGlvLW1vY2t1cGAgb3Igc2ltaWxhci4gTm8sIHRoZXJlJiMzOTtzIG5vdGhpbmcgc3BlY2lmaWMuIFRoZXJlJiMzOTtzIGB0dW5gIG9yIGB0YXBgIGJ1dCB0aGV5IGRvbiYjMzk7dCBpbnZvbHZlIE1ESU8uCgpDYW4gSSB0cmlnZ2VyIHRoaXMgZnJvbSB1c2VyIHNwYWNlPyBVc3VhbGx5LCBQSFkgZGV2aWNlcyBhcmUgaW5zdGFudGlhdGVkIGJ5IHRoZSBNRElPIGJ1cyBkcml2ZXIsIGJ1dCBtYXliZSB2aWEgc3lzZnMgb3IgbmV0bGluaz8gTm8sIHRoYXQmIzM5O3Mgbm90IHRoZSBub3JtYWwgc2V0dXAuIFN5emthbGxlciBoYXMgYHN5el9pbml0X25ldF9kZXZpY2VgLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBpbnN0YW50aWF0ZSBNRElPIFBIWXMuCgpBaGEhIFRoZSBBQzIwMCBkcml2ZXIgdXNlcyBJMkMgdG8gY29tbXVuaWNhdGUuIEl0IGNhbGxzIGBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZWAuIElmIGl0JiMzOTtzIGFuIEkyQyBkZXZpY2UsIGNhbiBJIGxldmVyYWdlIHN5emthbGxlciYjMzk7cyBJMkMgaW5qZWN0aW9uIHZpYSBgL2Rldi9pMmMtKmA/IEkyQyBkZXZpY2UgaW5zdGFudGlhdGlvbiBmcm9tIHVzZXJzcGFjZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBkb25lIHZpYSBzeXNmcyB1c2luZyBgbmV3X2RldmljZWAuIEJ1dCB0aGUgcHJvYmUgZnVuY3Rpb24gKGBhY3gwMF9lcGh5X3Byb2JlYCkgaXMgYSBQSFkgZHJpdmVyIHByb2JlIGZ1bmN0aW9uLgoKTG9va2luZyBhdCB0aGUgZHJpdmVyIGNvZGUsIGl0IGRlZmluZXMgYGFjeDAwX2VwaHlfZHJpdmVyYCwgd2l0aCBhIFBIWSBJRCBtYXRjaC4KYGBgYwpzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWN4MDBfZXBoeV9kcml2ZXJbXSA9IHsKCXsKCQlQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCksCgkJLm5hbWUgPSAmIzM0O1gtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFkmIzM0OywKCQkubWF0Y2hfcGh5X2RldmljZSA9IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZSwKLi4uCmBgYApTbywgdG8gZ2V0IGl0IHByb2JlZCwgSSBuZWVkIHRvIHJlZ2lzdGVyIGEgUEhZIGRldmljZSB3aXRoIHRoZSBtYXRjaGluZyBJRCBvbiBhbiBNRElPIGJ1cy4gQ2FuIHN5emthbGxlciBjcmVhdGUgYW4gTURJTyBidXMgYW5kIHJlZ2lzdGVyIHRoaXMgUEhZIGRldmljZT8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzeXprYWxsZXIgZG9jdW1lbnRhdGlvbiBhbmQgY29kZSB0byBzZWUgaWYgaXQgc3VwcG9ydHMgY3JlYXRpbmcgdmlydHVhbCBNRElPIGJ1c2VzIGFuZCByZWdpc3RlcmluZyB2aXJ0dWFsIFBIWSBkZXZpY2VzLiBUaGVyZSBhcmUgYSBmZXcgdmlydHVhbCBNRElPIGRyaXZlcnMgbGlrZSBgbWRpby1iY20tdW5pbWFjYC4KVGhlIGtleSBpcyB0byBkZXRlcm1pbmUgaWYgSSBjYW4gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IFBIWSBkZXZpY2VzIHdpdGggYXJiaXRyYXJ5IElEcyB0aHJvdWdoIGEgdmlydHVhbCBkcml2ZXIgaW4gc3l6a2FsbGVyLiBJZiBub3QsIEkmIzM5O20gc3R1Y2suCkxldCYjMzk7cyBzZWUgaWYgc3l6a2FsbGVyIGhhcyBNRElPIGRlc2NyaXB0aW9ucyBhbmQgaG93IGl0IGhhbmRsZXMgdGhlbS4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIGdldHRpbmcgdGhpcyBkcml2ZXIgdGVzdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvZHNhLmM9NjIyPXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxubmV0L2RzYS9kc2EuYy02NTQtXHRpZiAoIWRzLVx1MDAzZXVzZXJfbWlpX2J1cyBcdTAwMjZcdTAwMjYgZHMtXHUwMDNlb3BzLVx1MDAzZXBoeV9yZWFkKSB7XG5uZXQvZHNhL2RzYS5jOjY1NTpcdFx0ZHMtXHUwMDNldXNlcl9taWlfYnVzID0gbWRpb2J1c19hbGxvYygpO1xubmV0L2RzYS9kc2EuYy02NTYtXHRcdGlmICghZHMtXHUwMDNldXNlcl9taWlfYnVzKSB7XG4tLVxubmV0L2RzYS9kc2EuYy02NjItXG5uZXQvZHNhL2RzYS5jOjY2MzpcdFx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihkcy1cdTAwM2V1c2VyX21paV9idXMpO1xubmV0L2RzYS9kc2EuYy02NjQtXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2RzYS9kc2EuYy02NzQtXHRpZiAoZHMtXHUwMDNldXNlcl9taWlfYnVzIFx1MDAyNlx1MDAyNiBkcy1cdTAwM2VvcHMtXHUwMDNlcGh5X3JlYWQpXG5uZXQvZHNhL2RzYS5jOjY3NTpcdFx0bWRpb2J1c19mcmVlKGRzLVx1MDAzZXVzZXJfbWlpX2J1cyk7XG5uZXQvZHNhL2RzYS5jLTY3Ni10ZWFyZG93bjpcbi0tXG5uZXQvZHNhL2RzYS5jPTY4Nj1zdGF0aWMgdm9pZCBkc2Ffc3dpdGNoX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5uZXQvZHNhL2RzYS5jLTY5My1cdGlmIChkcy1cdTAwM2V1c2VyX21paV9idXMgXHUwMDI2XHUwMDI2IGRzLVx1MDAzZW9wcy1cdTAwM2VwaHlfcmVhZCkge1xubmV0L2RzYS9kc2EuYzo2OTQ6XHRcdG1kaW9idXNfdW5yZWdpc3Rlcihkcy1cdTAwM2V1c2VyX21paV9idXMpO1xubmV0L2RzYS9kc2EuYzo2OTU6XHRcdG1kaW9idXNfZnJlZShkcy1cdTAwM2V1c2VyX21paV9idXMpO1xubmV0L2RzYS9kc2EuYy02OTYtXHRcdGRzLVx1MDAzZXVzZXJfbWlpX2J1cyA9IE5VTEw7XG4tLVxubmV0L2RzYS9wb3J0LmMtMTEtI2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxubmV0L2RzYS9wb3J0LmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbWRpby5oXHUwMDNlXG5uZXQvZHNhL3BvcnQuYy0xMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxuLS1cbm5ldC9kc2EvcG9ydC5jPTE3MjY9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkc2Ffc3dpdGNoZXNfYXBwbHlfd29ya2Fyb3VuZHNbXSA9IHtcbi0tXG5uZXQvZHNhL3BvcnQuYy0xNzk2LSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKVxubmV0L2RzYS9wb3J0LmM6MTc5NzpcdFwmIzM0O3Ntc2MsbGFuOTMwMy1tZGlvXCYjMzQ7LFxubmV0L2RzYS9wb3J0LmMtMTc5OC0jZW5kaWZcbi0tXG5uZXQvZHNhL3VzZXIuYy0xMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxubmV0L2RzYS91c2VyLmM6MTQ6I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbWRpby5oXHUwMDNlXG5uZXQvZHNhL3VzZXIuYzoxNTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2Vcbm5ldC9kc2EvdXNlci5jLTE2LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4tLVxubmV0L2RzYS91c2VyLmM9MjYzNz1zdGF0aWMgaW50IGRzYV91c2VyX3BoeV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICp1c2VyX2RldiwgaW50IGFkZHIsXG4tLVxubmV0L2RzYS91c2VyLmMtMjY0Mi1cbm5ldC9kc2EvdXNlci5jOjI2NDM6XHR1c2VyX2Rldi1cdTAwM2VwaHlkZXYgPSBtZGlvYnVzX2dldF9waHkoZHMtXHUwMDNldXNlcl9taWlfYnVzLCBhZGRyKTtcbm5ldC9kc2EvdXNlci5jLTI2NDQtXHRpZiAoIXVzZXJfZGV2LVx1MDAzZXBoeWRldikge1xuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jPTU4Nz1jb252ZXJ0X2xlZ2FjeV9zZXR0aW5nc190b19saW5rX2tzZXR0aW5ncyhcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYy02MjEtXHRcdD0gbGVnYWN5X3NldHRpbmdzLVx1MDAzZWF1dG9uZWc7XG5uZXQvZXRodG9vbC9jb21tb24uYzo2MjI6XHRsaW5rX2tzZXR0aW5ncy1cdTAwM2ViYXNlLm1kaW9fc3VwcG9ydFxubmV0L2V0aHRvb2wvY29tbW9uLmM6NjIzOlx0XHQ9IGxlZ2FjeV9zZXR0aW5ncy1cdTAwM2VtZGlvX3N1cHBvcnQ7XG5uZXQvZXRodG9vbC9jb21tb24uYy02MjQtXHRsaW5rX2tzZXR0aW5ncy1cdTAwM2ViYXNlLmV0aF90cF9tZGl4XG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz0zODI9Y29udmVydF9saW5rX2tzZXR0aW5nc190b19sZWdhY3lfc2V0dGluZ3MoXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy00MTItXHRcdD0gbGlua19rc2V0dGluZ3MtXHUwMDNlYmFzZS5hdXRvbmVnO1xubmV0L2V0aHRvb2wvaW9jdGwuYzo0MTM6XHRsZWdhY3lfc2V0dGluZ3MtXHUwMDNlbWRpb19zdXBwb3J0XG5uZXQvZXRodG9vbC9pb2N0bC5jOjQxNDpcdFx0PSBsaW5rX2tzZXR0aW5ncy1cdTAwM2ViYXNlLm1kaW9fc3VwcG9ydDtcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDE1LVx0bGVnYWN5X3NldHRpbmdzLVx1MDAzZWV0aF90cF9tZGl4XG4tLVxubmV0L2V0aHRvb2wvcGh5LmM9NzA9c3RhdGljIGludCBwaHlfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXG4tLVxubmV0L2V0aHRvb2wvcGh5LmMtOTEtXG5uZXQvZXRodG9vbC9waHkuYzo5MjpcdHJlcF9kYXRhLVx1MDAzZW5hbWUgPSBrc3RyZHVwKGRldl9uYW1lKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiksIEdGUF9LRVJORUwpO1xubmV0L2V0aHRvb2wvcGh5LmMtOTMtXHRpZiAoIXJlcF9kYXRhLVx1MDAzZW5hbWUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDc6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MzQKCQkJCQkJCW91dHB1dDogMTM3CgkJCQkJCQl0aG91Z2h0czogOTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBUYXJnZXQgQ29kZSBmb3IgRnV6emluZyBGZWFzaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZ3JlcHBlciBvdXRwdXQgcG9pbnRlZCBtZSB0b3dhcmRzIE1ESU8gdXNhZ2Ugd2l0aGluIERTQSBhbmQgZXRodG9vbCwgYW5kIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55IHdheSB0byBnZXQgYSBQSFkgZGV2aWNlIGluc3RhbnRpYXRlZCBmcm9tIHVzZXJzcGFjZS4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgYG1kaW9idXNfcmVnaXN0ZXJgLCB3aGljaCBpcyBjYWxsZWQgYnkgTURJTyBidXMgZHJpdmVycywgYW5kIHdoZXRoZXIgU3l6a2FsbGVyIGNvdWxkIHRyaWdnZXIgdGhlIGNyZWF0aW9uIG9mIGFuIE1ESU8gYnVzLiBQb3RlbnRpYWxseSwgSSB0aG91Z2h0IG1heWJlIGEgdmlydHVhbCBkcml2ZXIgY291bGQgZG8gdGhpcy4KCkhvd2V2ZXIsIGEgZGVlcGVyIGxvb2sgcmV2ZWFscyBzb21lIHNpZ25pZmljYW50IGh1cmRsZXMuIFRoZSB0YXJnZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBldGhlcm5ldC1waHktcGFja2FnZWAgZHJpdmVyLCByZWxpZXMgaGVhdmlseSBvbiBhIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGUgc3RydWN0dXJlLiBJdCBuZWVkcyBgZGV2LSZndDtvZl9ub2RlYCB0byBleGlzdCBhbmQgaXRzIHBhcmVudCB0byBiZSBuYW1lZCBgJiMzNDtldGhlcm5ldC1waHktcGFja2FnZSYjMzQ7YC4gSXQmIzM5O3MgcHJldHR5IHN0cmljdCBhYm91dCB0aGlzLCBpbW1lZGlhdGVseSByZXR1cm5pbmcgYW4gZXJyb3IgaWYgdGhlc2UgY29uZGl0aW9ucyBhcmVuJiMzOTt0IG1ldC4KCkluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VICh3aGljaCBTeXprYWxsZXIgdXNlcyksIGBkZXYtJmd0O29mX25vZGVgIGlzIGdvaW5nIHRvIGJlIE5VTEwgdW5sZXNzIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUgaXMgcHJvdmlkZWQuIFN5emthbGxlciBkb2VzbiYjMzk7dCBpbmplY3QgYXJiaXRyYXJ5IGRldmljZSB0cmVlIG5vZGVzIGR1cmluZyBydW50aW1lOyB0aGUgZGV2aWNlIHRyZWUgaXMgZml4ZWQgYXQgYm9vdCB0aW1lLCBwcm92aWRlZCBieSBRRU1VLiBUaGF0IG1lYW5zIHVubGVzcyB0aGUgUUVNVSBtYWNoaW5lIHVzZWQgYnkgc3l6a2FsbGVyIChsaWtlIGBxMzVgLCBgcGNgIGZvciB4ODYgb3IgYHZpcnRgIGZvciBhcm02NCkgaGFzIHRoaXMgKmV4YWN0KiBkZXZpY2UgdHJlZSBub2RlLCB0aGUgZHJpdmVyIHdpbGwgbmV2ZXIgcHJvYmUgc3VjY2Vzc2Z1bGx5LiBBbmQgU3l6a2FsbGVyIGRlZmluaXRlbHkgZG9lc24mIzM5O3QgdXNlIGEgY3VzdG9tIGRldmljZSB0cmVlIHdpdGggdGhpbmdzIGxpa2UgYCYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlJiMzNDtgIG9yIGAmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZSYjMzQ7YC4gVGhpcyBpcyBhIGhhcmQgc3RvcC4KCkkgYnJpZWZseSBjb25zaWRlcmVkIGBvZl9vdmVybGF5YCBhcyBhIHBvdGVudGlhbCB3b3JrYXJvdW5kLCBpZiBgQ09ORklHX09GX09WRVJMQVlgIHdhcyBlbmFibGVkIGFuZCB0aGVyZSB3YXMgYSB1c2Vyc3BhY2UgaW50ZXJmYWNlIHRvIGxvYWQgb3ZlcmxheXMuIEJ1dCBpdCYjMzk7cyBoaWdobHkgdW5saWtlbHkgU3l6a2FsbGVyIGdlbmVyYXRlcyB2YWxpZCBPRiBvdmVybGF5cyBmb3IgdGhpcyBzcGVjaWZpYyBQSFkgZHJpdmVyLCBhbmQgSSBkb24mIzM5O3QgdGhpbmsgT0Ygb3ZlcmxheXMgYXJlIHVzdWFsbHkgbG9hZGVkIGZyb20gdXNlcnNwYWNlLiBGdXJ0aGVybW9yZSwgdGhlIGRyaXZlciBhbHNvIHJlcXVpcmVzIEkyQyBkZXZpY2VzLCByZWd1bGF0b3JzLCBhbmQgY2xvY2tzLiBJdCB3aWxsIG5lZWQgYSBjb21wbGV4IGRldmljZSB0cmVlIHNldHVwLgoKU28sIHRoaXMgbG9va3MgbGlrZSBhIGhhcmR3YXJlLXNwZWNpZmljIGFuZCBoaWdobHkgdW5saWtlbHkgcGF0aCBpbiBhbnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBkcml2ZXIgZXhwZWN0cyBzcGVjaWZpYyBoYXJkd2FyZSAoWC1Qb3dlcnMgQUMyMDAvQUMzMDApIGFuZCByZWxhdGVkIHNldHRpbmdzLCBhbmQgaXQgd29uJiMzOTt0IHdvcmsgd2l0aG91dCBhIGRldmljZSB0cmVlIHRoYXQgaGFzIHRoZSByaWdodCBzZXR1cC4KCk5vdywgbGV0IG1lIGdvIGJhY2sgdG8gdGhlIHJ1bGUuLi4gJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAtIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGlzIHBlcmZlY3RseSBtYXRjaGVzIHRoaXMgc2l0dWF0aW9uLgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHBhdGNoIGlzIG5vdCB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiBzdHJpY3RseSByZXF1aXJlcyBhIHNwZWNpZmljIERldmljZSBUcmVlIGNvbmZpZ3VyYXRpb24gKGRldi1cdTAwM2VvZl9ub2RlIG11c3QgYmUgcHJlc2VudCwgcGFyZW50IG11c3QgYmUgJiMzOTtldGhlcm5ldC1waHktcGFja2FnZSYjMzk7LCBzcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZ3MsIHJlZ3VsYXRvcnMsIGNsb2NrcywgYW5kIEkyQyBkZXZpY2VzKS4gU2luY2Ugc3l6a2FsbGVyIHJ1bnMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUpIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgZGV2aWNlIHRyZWUgc2V0dXAsIHRoZSBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uIHN0cmljdGx5IHJlcXVpcmVzIGEgc3BlY2lmaWMgRGV2aWNlIFRyZWUgY29uZmlndXJhdGlvbiAoZGV2LVx1MDAzZW9mX25vZGUgbXVzdCBiZSBwcmVzZW50LCBwYXJlbnQgbXVzdCBiZSAmIzM5O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzOTssIHNwZWNpZmljIGNvbXBhdGlibGUgc3RyaW5ncywgcmVndWxhdG9ycywgY2xvY2tzLCBhbmQgSTJDIGRldmljZXMpLiBTaW5jZSBzeXprYWxsZXIgcnVucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSkgd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGFuZCBkZXZpY2UgdHJlZSBzZXR1cCwgdGhlIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDc6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA3OjExOjI2LjM1NDA2NTYwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNjI4MDY1OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIHN0cmljdGx5IHJlcXVpcmVzIGEgc3BlY2lmaWMgRGV2aWNlIFRyZWUgY29uZmlndXJhdGlvbiAoZGV2LVxcdTAwM2VvZl9ub2RlIG11c3QgYmUgcHJlc2VudCwgcGFyZW50IG11c3QgYmUgJ2V0aGVybmV0LXBoeS1wYWNrYWdlJywgc3BlY2lmaWMgY29tcGF0aWJsZSBzdHJpbmdzLCByZWd1bGF0b3JzLCBjbG9ja3MsIGFuZCBJMkMgZGV2aWNlcykuIFNpbmNlIHN5emthbGxlciBydW5zIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSB3aXRob3V0IHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGRldmljZSB0cmVlIHNldHVwLCB0aGUgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDc6MTE6MjYuMzU0MDcyMTU0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI3NDA0MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2FmM2YzOWQwNTlkNjljMmFlYzhmYTE0ZTdmOWQxOTNhZmM3ZWFiYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwNzoxMToyNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWU5MGM0ZmZlY2NlYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXFxuQEAgLTAsMCArMSwxNjUgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZXNcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjpcXG4rICBUaGUgQUMyMDAgYW5kIEFDMzAwIGNvbnRhaW4gY29tcGF0aWJsZSBGYXN0IEV0aGVybmV0IFBIWSBibG9ja3Mgd2hpY2ggcmVwb3J0XFxuKyAgdGhlIHNhbWUgQ2xhdXNlIDIyIFBIWSBJRCBhbmQgdXNlIHRoZSBzYW1lIGxpbmstc2lkZSByZWdpc3RlciBsYXlvdXQuIFRoZVxcbisgIHBhY2thZ2UgY29udHJvbCBwYXRocyBkaWZmZXIuIEFDMjAwIHBhY2thZ2UgY29udHJvbCByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkXFxuKyAgdGhyb3VnaCB0aGUgY29tcGFuaW9uIElDJ3MgSTJDIHJlZ2lzdGVyIGludGVyZmFjZSwgd2hpbGUgQUMzMDAgY29udHJvbFxcbisgIHJlZ2lzdGVycyBvY2N1cHkgYSBzZWNvbmQgQ2xhdXNlIDIyIGFkZHJlc3MgZml4ZWQgYXQgMTYgcGx1cyB0aGUgbGluayBQSFlcXG4rICBhZGRyZXNzLlxcbitcXG4rICBTeXN0ZW1zIHdpdGggYSBrbm93biBwYWNrYWdlIHVzZSB0aGUgY29ycmVzcG9uZGluZyBBQzIwMCBvciBBQzMwMCBjb21wYXRpYmxlLlxcbisgIFN5c3RlbXMgd2hpY2ggY2FuIGNvbnRhaW4gZWl0aGVyIHBhY2thZ2UgdXNlIHRoZSBBQ3gwMCBjb21wYXRpYmxlIGFuZCBhXFxuKyAgcGFja2VkIE5WTUVNIGNvbmZpZ3VyYXRpb24gZmllbGQgdG8gc2VsZWN0IHRoZSBiYWNrZW5kIGF0IHJ1bnRpbWUuXFxuK1xcbisgIFRoZSBsaW5rIFBIWSBjYW5ub3QgcmVwb3J0IGl0cyBJRCB1bnRpbCB0aGUgcGFja2FnZSBjb250cm9sIHNlcXVlbmNlIGhhc1xcbisgIGNvbXBsZXRlZCwgc28gaXRzIGNoaWxkIG5vZGUgc3VwcGxpZXMgdGhlIGRvY3VtZW50ZWQgUEhZIElELiBUaGUgcGFja2FnZSBhbmRcXG4rICBjaGlsZCB1c2UgdGhlIHNhbWUgYmFzZSBhZGRyZXNzLiBUaGUgQUMyMDAgZHJpdmVyIHByb2dyYW1zIHRoYXQgYWRkcmVzcyBpbnRvXFxuKyAgdGhlIHBhY2thZ2UsIHdoaWxlIHRoZSBBQzMwMCBkcml2ZXIgZGVyaXZlcyBpdHMgY29udHJvbCBhZGRyZXNzIGZyb20gaXQuXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBlbnVtOlxcbisgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcbisgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxcbisgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbitcXG4rICByZWc6XFxuKyAgICBtYXhpbXVtOiAzMVxcbitcXG4rICBjbG9ja3M6XFxuKyAgICBtYXhJdGVtczogMVxcbisgICAgZGVzY3JpcHRpb246IEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6XFxuK1xcbisgIHZjYy1zdXBwbHk6XFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgMy4zIFYgcGFja2FnZSBzdXBwbHkuIFRoaXMgaXMgY29ubmVjdGVkIHRvIEVQSFlfVkNDIG9uIEFDMjAwIGFuZCBWQ0MxXFxuKyAgICAgIG9uIEFDMzAwLlxcbitcXG4rICBudm1lbS1jZWxsczpcXG4rICAgIG1heEl0ZW1zOiAxXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgUGFja2VkIEVQSFkgY29uZmlndXJhdGlvbiBmaWVsZC4gQml0cyAzIHRocm91Z2ggMCBjb250YWluIHRoZSBhbmFsb2dcXG4rICAgICAgY2FsaWJyYXRpb24gY29kZSwgYml0cyA3IHRocm91Z2ggNCBhcmUgcmVzZXJ2ZWQsIGJpdCA4IHNlbGVjdHMgQUMzMDBcXG4rICAgICAgd2hlbiBzZXQgYW5kIEFDMjAwIHdoZW4gY2xlYXIsIGFuZCBiaXQgOSByZXF1ZXN0cyB0aGUgQUMzMDBcXG4rICAgICAgbG93LWNhbGlicmF0aW9uIHR1bmluZyBzZXF1ZW5jZS4gQSBmaXhlZCBBQzIwMCBwYWNrYWdlIG1heSBwcm92aWRlIG9ubHlcXG4rICAgICAgdGhlIGxvdyBjYWxpYnJhdGlvbiBiaXRzIG9yIG9taXQgdGhlIGNlbGwgYW5kIHVzZSBpdHMgaW50ZXJuYWwgZUZ1c2VcXG4rICAgICAgY29weSBpbnN0ZWFkLlxcbitcXG4rICBudm1lbS1jZWxsLW5hbWVzOlxcbisgICAgY29uc3Q6IGNvbmZpZ3VyYXRpb25cXG4rXFxuKyAgeC1wb3dlcnMsYWMyMDA6XFxuKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9waGFuZGxlXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgUGhhbmRsZSB0byB0aGUgQUMyMDAgY29tcGFuaW9uIElDIGRlc2NyaWJlZCBieSB0aGUgeC1wb3dlcnMsYWMyMDAgTUZEXFxuKyAgICAgIGJpbmRpbmcuIEl0cyBJMkMgaW50ZXJmYWNlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgcGFja2FnZSBjb250cm9sXFxuKyAgICAgIHJlZ2lzdGVycyB1c2VkIHRvIHBvd2VyIGFuZCBjb25maWd1cmUgdGhlIEV0aGVybmV0IFBIWS5cXG4rXFxuKyAgeC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZDpcXG4rICAgIHR5cGU6IGJvb2xlYW5cXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBJbnZlcnQgdGhlIHhNSUkgcmVjZWl2ZSBjbG9jayBpbnNpZGUgdGhlIFBIWS4gVGhpcyBpcyByZXF1aXJlZCBieSBzb21lXFxuKyAgICAgIFNvQyBpbnRlZ3JhdGlvbnMsIGluY2x1ZGluZyB0aGUgQWxsd2lubmVyIEg2IEFDMjAwIGNvbm5lY3Rpb24uXFxuK1xcbitwYXR0ZXJuUHJvcGVydGllczpcXG4rICBeZXRoZXJuZXQtcGh5QFthLWYwLTldKyQ6XFxuKyAgICAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcXG4rICAgIHByb3BlcnRpZXM6XFxuKyAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFxcbisgICAgcmVxdWlyZWQ6XFxuKyAgICAgIC0gY29tcGF0aWJsZVxcbisgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuKyAgLSB2Y2Mtc3VwcGx5XFxuK1xcbitkZXBlbmRlbnRSZXF1aXJlZDpcXG4rICBudm1lbS1jZWxsczogWyBudm1lbS1jZWxsLW5hbWVzIF1cXG4rXFxuK2FsbE9mOlxcbisgIC0gJHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCNcXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxuKyAgICB0aGVuOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNsb2NrczogZmFsc2VcXG4rICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxcbisgIC0gaWY6XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcXG4rICAgIHRoZW46XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgeC1wb3dlcnMsYWMyMDA6IGZhbHNlXFxuKyAgICAgIHJlcXVpcmVkOlxcbisgICAgICAgIC0gY2xvY2tzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsc1xcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xcbisgIC0gaWY6XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcXG4rICAgIHRoZW46XFxuKyAgICAgIHJlcXVpcmVkOlxcbisgICAgICAgIC0gY2xvY2tzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsc1xcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBlbnVtOlxcbisgICAgICAgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxcbisgICAgICAgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICByZWc6XFxuKyAgICAgICAgICBtYXhpbXVtOiA3XFxuKyAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxcbisgICAgICAgIF5ldGhlcm5ldC1waHlAW2EtZjAtOV0rJDpcXG4rICAgICAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgICAgIHJlZzpcXG4rICAgICAgICAgICAgICBtYXhpbXVtOiA3XFxuK1xcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAtIHxcXG4rICAgIG1kaW8ge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZwd20gNVxcdTAwM2U7XFxuKyAgICAgICAgICAgIHZjYy1zdXBwbHkgPSBcXHUwMDNjXFx1MDAyNnJlZ18zdjNcXHUwMDNlO1xcbisgICAgICAgICAgICBudm1lbS1jZWxscyA9IFxcdTAwM2NcXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXFx1MDAzZTtcXG4rICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFxcXCJjb25maWd1cmF0aW9uXFxcIjtcXG4rICAgICAgICAgICAgeC1wb3dlcnMsYWMyMDAgPSBcXHUwMDNjXFx1MDAyNmFjMjAwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAwIHtcXG4rICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwiZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXFxcIjtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rXFxuKy4uLlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuaW5kZXggYjRlZjkyN2ZkNGE2Ny4uZDM4MzU1OTdlMzc5NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuQEAgLTQ4NCw2ICs0ODQsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXFxuIFxcdGhlbHBcXG4gXFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIHZzYzgyNDRcXG4gXFxuK2NvbmZpZyBYUE9XRVJTX0FDWDAwX1BIWVxcbitcXHR0cmlzdGF0ZSBcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZXFxcIlxcbitcXHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXFx1MDAyNlxcdTAwMjYgTlZNRU0gXFx1MDAyNlxcdTAwMjYgT0ZfTURJTyBcXHUwMDI2XFx1MDAyNiBSRUdVTEFUT1JcXG4rXFx0ZGVwZW5kcyBvbiBJMkMgfHwgIUkyQ1xcbitcXHRzZWxlY3QgUEhZX1BBQ0tBR0VcXG4rXFx0aGVscFxcbitcXHQgIEVuYWJsZSB0aGUgRmFzdCBFdGhlcm5ldCBQSFkgZHJpdmVyIHNoYXJlZCBieSB0aGUgWC1Qb3dlcnMgQUMyMDBcXG4rXFx0ICBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciBjb25maWd1cmVzIHRoZWlyIGNvbW1vbiBNRElPIFBIWVxcbitcXHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxcbitcXHQgIHJlZ2lzdGVycy5cXG4rXFxuIGNvbmZpZyBYSUxJTlhfR01JSTJSR01JSVxcbiBcXHR0cmlzdGF0ZSBcXFwiWGlsaW54IEdNSUkyUkdNSUkgY29udmVydGVyIGRyaXZlclxcXCJcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcXG5pbmRleCAyNWM0YTNjMjQyOWY3Li40OTU3NWZhMTg1MjIzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxcbkBAIC0xMDEsNCArMTAxLDUgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKVxcdFxcdCs9IHNtc2Mub1xcbiBvYmotJChDT05GSUdfU1RFMTBYUClcXHRcXHQrPSBzdGUxMFhwLm9cXG4gb2JqLSQoQ09ORklHX1RFUkFORVRJQ1NfUEhZKVxcdCs9IHRlcmFuZXRpY3Mub1xcbiBvYmotJChDT05GSUdfVklURVNTRV9QSFkpXFx0Kz0gdml0ZXNzZS5vXFxuK29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSlcXHQrPSB4cG93ZXJzL1xcbiBvYmotJChDT05GSUdfWElMSU5YX0dNSUkyUkdNSUkpICs9IHhpbGlueF9nbWlpMnJnbWlpLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWU5NzdhNzk1ODMyNVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxcbkBAIC0wLDAgKzEsMyBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK3hwb3dlcnMtYWN4MDAteSA6PSBhY3gwMC5vIGFjMjAwLm8gYWMzMDAub1xcbitvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpICs9IHhwb3dlcnMtYWN4MDAub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWZkZDJhM2RmYmU0MVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXFxuQEAgLTAsMCArMSwzMTQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBYLVBvd2VycyBBQzIwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyMiBBcm0gTHRkLiAoQW5kcmUgUHJ6eXdhcmEgXFx1MDAzY2FuZHJlLnByenl3YXJhQGFybS5jb21cXHUwMDNlKVxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2kyYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVnbWFwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJhY3gwMC5oXFxcIlxcbitcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUXFx0M1xcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXFx0MjQwMDAwMDBcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWlxcdDI3MDAwMDAwXFxuK1xcbisjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHXFx0XFx0XFx0MHgwMDE0XFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRVxcdFxcdFxcdEJJVCgxKVxcbitcXG4rI2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFR1xcdFxcdFxcdDB4MDAxNlxcbisjZGVmaW5lIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRVxcdFxcdFxcdEJJVCgwKVxcbitcXG4rLyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqL1xcbisjZGVmaW5lIEFDMjAwX0VGVVNFX0VQSFlfUkVHXFx0XFx0XFx0MHg4MDA0XFxuK1xcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFR1xcdFxcdFxcdDB4NjAwMFxcbisjZGVmaW5lIEFDMjAwX0VQSFlfU0hVVERPV05cXHRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLXFx0XFx0XFx0R0VOTUFTSyg4LCA0KVxcbisjZGVmaW5lIEFDMjAwX0VQSFlfUk1JSV9TRUxcXHRcXHRcXHRCSVQoMTEpXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0tcXHRcXHRHRU5NQVNLKDE1LCAxMilcXG4rXFxuK3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcXG4rXFx0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xcbitcXHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4rXFx0dTE2IGVwaHlfY3RsO1xcbitcXHR1bnNpZ25lZCBpbnQgcGh5X2FkZHI7XFxuK1xcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XFxuK1xcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XFxuK1xcdGJvb2wgcG93ZXJlZDtcXG4rfTtcXG4rXFxuK3N0YXRpYyB1MTYgYWMyMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlZXBoeV9jdGwgfFxcbitcXHRcXHQocHJpdi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XFxuK1xcdFxcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LVxcdTAwM2VwaHlfYWRkcik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVxcdTAwM2VyZWdtYXAsIHJlZywgdmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfZXJyKHByaXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmVnLCBFUlJfUFRSKHJldCkpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKSB7XFxuK1xcdFxcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgQUMyMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdFxcdGVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLCAwKTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFx0XFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcXG4rXFx0XFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cXHUwMDNldmNjKTtcXG4rXFx0XFx0aWYgKCFlcnIpXFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XFxuK1xcdFxcdGVsc2UgaWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcXG4re1xcbitcXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFxuK1xcdHJldHVybiBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK2FjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBBQzIwMF9FUEhZX0NUTF9SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCBBQzIwMF9FUEhZX1JNSUlfU0VMLFxcbitcXHRcXHRcXHRcXHRcXHQgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0XFx0XFx0XFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKVxcbit7XFxuK1xcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXHR1MTYgZXBoeV9jdGw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocGh5X2FkZHIgXFx1MDAzZSBGSUVMRF9NQVgoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VwaHlfYWRkciA9PSBwaHlfYWRkcilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZCkge1xcbitcXHRcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcdHByaXYtXFx1MDAzZXBoeV9hZGRyID0gcGh5X2FkZHI7XFxuK1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXN1cHBseV9lbmFibGVkKSB7XFxuK1xcdFxcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cXHUwMDNldmNjKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRlcGh5X2N0bCA9IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFN0YXJ0IGZyb20gYSBkaXNhYmxlZCBzdGF0ZSBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyYXRpb24uIEFDMjAwXFxuK1xcdCAqIHNwZWNpZmllcyBubyBhZGRpdGlvbmFsIGRlbGF5IGJldHdlZW4gdGhlc2UgY29udHJvbHMuIFRoZSBjb21wYW5pb25cXG4rXFx0ICogTUZEIHByb3ZpZGVyIGhhcyBjb21wbGV0ZWQgaXRzIGlucHV0LWNsb2NrIHN0YXJ0dXAgZGVsYXkgYmVmb3JlXFxuK1xcdCAqIHB1Ymxpc2hpbmcgdGhlIHJlZ21hcC5cXG4rXFx0ICovXFxuK1xcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfZGlzYWJsZTtcXG4rXFxuK1xcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBlcGh5X2N0bCB8IEFDMjAwX0VQSFlfU0hVVERPV04pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxcbitcXHRcXHRcXHRcXHQgICBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRwcml2LVxcdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfZGlzYWJsZTpcXG4rXFx0LyogQXR0ZW1wdCBldmVyeSBzdGVwIG9mIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSBhZnRlciBhIHBhcnRpYWwgc3RhcnQuICovXFxuK1xcdHByaXYtXFx1MDAzZXBvd2VyZWQgPSB0cnVlO1xcbitcXHRhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHR1bnNpZ25lZCBpbnQgaW50ZXJuYWxfY2FsaWJyYXRpb247XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWMyMDBfbm9kZTtcXG4rXFx0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2O1xcbitcXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50O1xcbitcXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xcbitcXHR1OCBicHNfZWZmdXNlX2NvZGU7XFxuK1xcdHN0cnVjdCBjbGsgKmNsaztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0cHJpdi1cXHUwMDNlZGV2ID0gZGV2O1xcbitcXHRwcml2LVxcdTAwM2V2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsIFxcXCJ2Y2NcXFwiKTtcXG4rXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2V2Y2MpKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVxcdTAwM2V2Y2MpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XFxcXG5cXFwiKSk7XFxuK1xcbitcXHRhYzIwMF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwYWNrYWdlX25vZGUsIFxcXCJ4LXBvd2VycyxhYzIwMFxcXCIsIDApO1xcbitcXHRpZiAoIWFjMjAwX25vZGUpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJtaXNzaW5nIHgtcG93ZXJzLGFjMjAwIHJlZmVyZW5jZVxcXFxuXFxcIikpO1xcbitcXHRjbGllbnQgPSBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShhYzIwMF9ub2RlKTtcXG4rXFx0b2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7XFxuK1xcdGlmICghY2xpZW50KSB7XFxuK1xcdFxcdHJldCA9IElTX0VOQUJMRUQoQ09ORklHX0kyQykgPyAtRVBST0JFX0RFRkVSIDogLUVOT0RFVjtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiQUMyMDAgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkXFxcXG5cXFwiKSk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZGV2aWNlX2xpbmtfYWRkKGRldiwgXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgICAgIERMX0ZMQUdfQVVUT1JFTU9WRV9DT05TVU1FUikpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIGxpbmsgQUMyMDAgZGV2aWNlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X2NsaWVudDtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2aWNlX2xvY2soXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKGRldmljZV9pc19ib3VuZChcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYpKVxcbitcXHRcXHRwcml2LVxcdTAwM2VyZWdtYXAgPSBkZXZfZ2V0X3JlZ21hcChcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIE5VTEwpO1xcbitcXHRkZXZpY2VfdW5sb2NrKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldik7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlcmVnbWFwKSB7XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRVBST0JFX0RFRkVSLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIkFDMjAwIGRyaXZlciBpcyBub3QgcmVhZHlcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfY2xpZW50O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWhhc19jYWxpYnJhdGlvbikge1xcbitcXHRcXHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVxcdTAwM2VyZWdtYXAsIEFDMjAwX0VGVVNFX0VQSFlfUkVHLFxcbitcXHRcXHRcXHRcXHQgIFxcdTAwMjZpbnRlcm5hbF9jYWxpYnJhdGlvbik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X2Vycm9yO1xcbitcXHRcXHRjYWxpYnJhdGlvbiA9IGludGVybmFsX2NhbGlicmF0aW9uO1xcbitcXHR9XFxuK1xcbitcXHQvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovXFxuK1xcdGJwc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVQpIFxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgRklFTERfTUFYKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLKTtcXG4rXFx0cHJpdi1cXHUwMDNlZXBoeV9jdGwgPVxcbitcXHRcXHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLLCBicHNfZWZmdXNlX2NvZGUpO1xcbitcXHQvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXFxuK1xcbitcXHRjbGsgPSBjbGtfZ2V0KFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldiwgTlVMTCk7XFxuK1xcdGlmIChJU19FUlIoY2xrKSkge1xcbitcXHRcXHRyZXQgPSBQVFJfRVJSKGNsayk7XFxuK1xcdFxcdGdvdG8gb3V0X2Vycm9yO1xcbitcXHR9XFxuK1xcbitcXHQvKiBUaGUgYm91bmQgQUMyMDAgcHJvdmlkZXIgZW5hYmxlcyBhbmQgZXhjbHVzaXZlbHkgcGlucyB0aGlzIHJhdGUuICovXFxuK1xcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XFxuK1xcdGNsa19wdXQoY2xrKTtcXG4rXFxuK1xcdHN3aXRjaCAoY2xrX3JhdGUpIHtcXG4rXFx0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlZXBoeV9jdGwgfD0gQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJ1bnN1cHBvcnRlZCBBQzIwMCBjbG9jayByYXRlICVsdSBIelxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIGNsa19yYXRlKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X2NsaWVudDtcXG4rXFx0fVxcbitcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29uO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcXG4rXFx0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xcbitcXHRwdXRfZGV2aWNlKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldik7XFxuK1xcbitcXHRyZXR1cm4gXFx1MDAyNnByaXYtXFx1MDAzZWNvbnRyb2w7XFxuK1xcbitvdXRfZXJyb3I6XFxuK1xcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBBQzIwMCBjb250cm9sXFxcXG5cXFwiKTtcXG4rb3V0X3B1dF9jbGllbnQ6XFxuK1xcdHB1dF9kZXZpY2UoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KTtcXG4rXFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWE1NjA0MzJhMTRjOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXFxuQEAgLTAsMCArMSwzODcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBYLVBvd2VycyBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcIi4uL3BoeWxpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYWN4MDAuaFxcXCJcXG4rXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVFxcdDNcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWlxcdDI0MDAwMDAwXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFpcXHQyNTAwMDAwMFxcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXFx0MjcwMDAwMDBcXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUdcXHRcXHRcXHQweDAwXFxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTS1xcdFxcdEdFTk1BU0soMTEsIDgpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMX01BU0tcXHRcXHRcXHRHRU5NQVNLKDcsIDYpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWlxcdFxcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDApXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWlxcdFxcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDEpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWlxcdFxcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDIpXFxuKyNkZWZpbmUgQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRVxcdFxcdFxcdEJJVCg1KVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEVcXHRcXHRCSVQoNClcXG4rI2RlZmluZSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFxcdFxcdEJJVCgxKVxcbisjZGVmaW5lIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlRcXHRcXHRCSVQoMClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExET1xcdFxcdEJJVCgzKVxcbisjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTS1xcdFxcdEdFTk1BU0soMiwgMClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0JJQVMxX1JFR1xcdFxcdFxcdDB4MDJcXG4rI2RlZmluZSBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRVxcdFxcdEJJVCgxNSlcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0lPX1JFR1xcdFxcdFxcdDB4MDVcXG4rI2RlZmluZSBBQzMwMF9NRElPX0RSVl9NQVNLXFx0XFx0XFx0R0VOTUFTSygxNSwgMTQpXFxuKyNkZWZpbmUgQUMzMDBfTUlJX0RSVl9NQVNLXFx0XFx0XFx0R0VOTUFTSygxMSwgMTApXFxuKyNkZWZpbmUgQUMzMDBfSU9fRFJWX0xFVkVMXzJcXHRcXHRcXHQyXFxuKyNkZWZpbmUgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRVxcdFxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRVxcdFxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NPTkZJR19SRUdcXHRcXHRcXHQweDA2XFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0tcXHRcXHRHRU5NQVNLKDE1LCAxMilcXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMXFx0XFx0XFx0QklUKDExKVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfU0hVVERPV05cXHRcXHRcXHRCSVQoMClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXFxcXFxcbitcXHQoQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEUgfCBcXFxcXFxuK1xcdCBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFxcXFxcXG4rXFx0IEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpXFxuK1xcbisjZGVmaW5lIEFDMzAwX1NZU19JT19WQUxVRSBcXFxcXFxuK1xcdChGSUVMRF9QUkVQKEFDMzAwX01ESU9fRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXFxcXG4rXFx0IEZJRUxEX1BSRVAoQUMzMDBfTUlJX0RSVl9NQVNLLCBBQzMwMF9JT19EUlZfTEVWRUxfMikgfCBcXFxcXFxuK1xcdCBBQzMwMF9DTEtJTl9QQURfRU5BQkxFIHwgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFKVxcbitcXG4rc3RydWN0IGFjMzAwX2VwaHlfY3RsIHtcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbitcXHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XFxuK1xcdHN0cnVjdCBjbGsgKmNsaztcXG4rXFx0dTE2IHN5c19jb250cm9sO1xcbitcXHR1MTYgZXBoeV9jb25maWc7XFxuK1xcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XFxuK1xcdGJvb2wgcGFja2FnZV9rbm93bjtcXG4rXFx0Ym9vbCBpbnRlcm5hbF9kbGRvO1xcbitcXHRib29sIHN1cHBseV9lbmFibGVkO1xcbitcXHRib29sIHBvd2VyZWQ7XFxuK307XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgaW50XFxuK2FjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXFxuK3tcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZXBoeWRldi1cXHUwMDNlbWRpby5hZGRyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcXG4rXFx0XFx0XFx0XFx0dTE2IHZhbClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwcml2LVxcdTAwM2VwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0sIHZhbCk7XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcXG4rXFx0XFx0XFx0XFx0IHUxNiBtYXNrLCB1MTYgc2V0KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0dTE2IHZhbCA9IChyZXQgXFx1MDAyNiB+bWFzaykgfCAoc2V0IFxcdTAwMjYgbWFzayk7XFxuK1xcbitcXHRcXHRyZXQgPSB2YWwgPT0gcmV0ID8gMCA6XFxuK1xcdFxcdFxcdF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcmVnbnVtLCB2YWwpO1xcbitcXHR9XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlZXBoeV9jb25maWcgfFxcbitcXHRcXHQocHJpdi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0IEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogQSBjaGlwIHJlc2V0IHJlc3RvcmVzIERMRE9FTiB0byBvbmUuIFVudGlsIFBLR19TVEFUVVMgaGFzIGlkZW50aWZpZWRcXG4rXFx0ICogdGhlIHN1cHBseSBhcnJhbmdlbWVudCwgcHJlc2VydmUgYW55IGV4dGVybmFsLVZERCBzZXR1cCBsZWZ0IGJ5IHRoZVxcbitcXHQgKiBib290bG9hZGVyIGJ5IGFzc2VydGluZyBvbmx5IHRoZSBFUEhZIHJlc2V0LlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuICFwcml2LVxcdTAwM2VwYWNrYWdlX2tub3duIHx8ICFwcml2LVxcdTAwM2VpbnRlcm5hbF9kbGRvID9cXG4rXFx0XFx0QUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCA6IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZCkge1xcbitcXHRcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xcbitcXHRcXHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLCAwKTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFx0XFx0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHRcXHQgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRyZXQgPSBlcnI7XFxuK1xcbitcXHRcXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cXHUwMDNlY2xrKTtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcXG4rXFx0XFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cXHUwMDNldmNjKTtcXG4rXFx0XFx0aWYgKCFlcnIpXFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XFxuK1xcdFxcdGVsc2UgaWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcXG4re1xcbitcXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFxuK1xcdHJldHVybiBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK2FjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQUMzMDBfRVBIWV9STUlJX1NFTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFx0dTggcGFja2FnZV9zdGF0dXM7XFxuK1xcdHUxNiByZXNldF92YWx1ZTtcXG4rXFx0aW50IHN5c19jb250cm9sO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeV9hZGRyICE9IGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXN1cHBseV9lbmFibGVkKSB7XFxuK1xcdFxcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cXHUwMDNldmNjKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xcbitcXG4rXFx0XFx0LyogV2FpdCBmb3IgdGhlIHBvd2VyLW9uIHJlc2V0IGludGVydmFsIHNwZWNpZmllZCBieSB0aGUgbWFudWFsLiAqL1xcbitcXHRcXHRmc2xlZXAoMTAwMDApO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cXHUwMDNlY2xrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXHRwcml2LVxcdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcXG4rXFxuK1xcdC8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi9cXG4rXFx0cmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTtcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLCByZXNldF92YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdC8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovXFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XFxuK1xcdFxcdFxcdFxcdCAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdC8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi9cXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBwcml2LVxcdTAwM2VzeXNfY29udHJvbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdHN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpO1xcbitcXHRpZiAoc3lzX2NvbnRyb2wgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHJldCA9IHN5c19jb250cm9sO1xcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcdH1cXG4rXFxuK1xcdHBhY2thZ2Vfc3RhdHVzID0gRklFTERfR0VUKEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0ssIHN5c19jb250cm9sKTtcXG4rXFx0aWYgKCh+cGFja2FnZV9zdGF0dXMgXFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9XFxuK1xcdCAgICBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcm5hbF9kbGRvID0gcGFja2FnZV9zdGF0dXMgXFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPO1xcbitcXHRwcml2LVxcdTAwM2VwYWNrYWdlX2tub3duID0gdHJ1ZTtcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHByaXYsIEFDMzAwX1NZU19CSUFTMV9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSxcXG4rXFx0XFx0XFx0XFx0ICAgcHJpdi1cXHUwMDNlaW50ZXJuYWxfZGxkbyA/XFxuK1xcdFxcdFxcdFxcdCAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFIDogMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdC8qIEtlZXAgdGhlIGRvY3VtZW50ZWQgZGVmYXVsdCBkcml2ZSBsZXZlbCBhbmQgbGVhdmUgdGhlIElSUSBkaXNhYmxlZC4gKi9cXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgQUMzMDBfU1lTX0lPX1ZBTFVFKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0ZnNsZWVwKDEwMDAwKTtcXG4rXFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcXG4rXFx0XFx0XFx0XFx0ICBBQzMwMF9FUEhZX1NIVVRET1dOKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0ZnNsZWVwKDEwMDAwKTtcXG4rXFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcG93ZXJfb2ZmOlxcbitcXHRhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0Y2xrX3B1dChkYXRhKTtcXG4rfVxcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdjtcXG4rXFx0dW5zaWduZWQgbG9uZyBjbGtfcmF0ZTtcXG4rXFx0dTggYmdzX2VmZnVzZV9jb2RlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXByaXYpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIgXFx1MDAzZSBGSUVMRF9NQVgoQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImxpbmsgYWRkcmVzcyBpcyBvdXRzaWRlIHRoZSBwYWNrYWdlIHJhbmdlXFxcXG5cXFwiKSk7XFxuK1xcdHByaXYtXFx1MDAzZXBoeWRldiA9IHBoeWRldjtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXFxcInZjY1xcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXZjYykpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXFx1MDAzZXZjYyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXFxcblxcXCIpKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWNsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTtcXG4rXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VjbGspKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVxcdTAwM2VjbGspLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXFxcXG5cXFwiKSk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X2Nsa19wdXQsIHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBwcml2LVxcdTAwM2VjbGspO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxcXG5cXFwiKSk7XFxuK1xcbitcXHRjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRzd2l0Y2ggKGNsa19yYXRlKSB7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJ1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBjbGtfcmF0ZSkpO1xcbitcXHR9XFxuK1xcdHByaXYtXFx1MDAzZXN5c19jb250cm9sIHw9IEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTO1xcbitcXG4rXFx0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xcbitcXHRiZ3NfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gKyBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUKSBcXHUwMDI2XFxuK1xcdFxcdFxcdCAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7XFxuK1xcdHByaXYtXFx1MDAzZWVwaHlfY29uZmlnID1cXG4rXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTtcXG4rXFx0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcXG4rXFx0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjZwcml2LVxcdTAwM2Vjb250cm9sO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lZDIzYTNjYmZlMmExXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmNcXG5AQCAtMCwwICsxLDYyMSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXJcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjIFxcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cXHUwMDNlXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbnZtZW0tY29uc3VtZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCIuLi9waHlsaWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImFjeDAwLmhcXFwiXFxuK1xcbisjZGVmaW5lIEFDWDAwX0VQSFlfSURcXHRcXHRcXHRcXHQweDAwNDQxNDAwXFxuK1xcbisjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0tcXHRHRU5NQVNLKDMsIDApXFxuKyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPV1xcdEJJVCg5KVxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9SRUdcXHRcXHRcXHQweDFmXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfTUFTS1xcdFxcdFxcdEdFTk1BU0soMTIsIDgpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV8wXFx0XFx0XFx0XFx0MFxcbisjZGVmaW5lIEFDWDAwX1BBR0VfMVxcdFxcdFxcdFxcdDFcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzJcXHRcXHRcXHRcXHQyXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV82XFx0XFx0XFx0XFx0NlxcbisjZGVmaW5lIEFDWDAwX1BBR0VfOFxcdFxcdFxcdFxcdDhcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUdcXHRcXHQweDEzXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlRcXHRCSVQoMTIpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfTUFTS1xcdFxcdEdFTk1BU0soMSwgMClcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPXFx0XFx0MlxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUdcXHRcXHQweDEyXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFXFx0MHg0ODI0XFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFR1xcdFxcdDB4MTNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRVxcdFxcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUdcXHQweDE3XFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRVxcdEJJVCgzKVxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHXFx0XFx0MHgxOFxcbisjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLXFx0XFx0R0VOTUFTSygxNCwgMTIpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFRcXHQwXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFR1xcdFxcdDB4MTBcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFXFx0MHg1NTIzXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHXFx0XFx0MHgxM1xcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFXFx0XFx0MHhmMDAwXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFR1xcdDB4MTRcXG4rI2RlZmluZSBBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXFx0MHg3MDhmXFxuKyNkZWZpbmUgQUMzMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRVxcdDB4NzA4YlxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDlcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9SRUdcXHRcXHRcXHQweDE1XFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLXFx0XFx0R0VOTUFTSygxNSwgOClcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xME1fTUFTS1xcdFxcdEdFTk1BU0soNywgMClcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRShfMTAwbSwgXzEwbSkgXFxcXFxcbitcXHQoRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0ssIChfMTAwbSkpIHwgXFxcXFxcbitcXHQgRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xME1fTUFTSywgKF8xMG0pKSlcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFIFxcXFxcXG4rXFx0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgxNSwgMHgzMClcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFIFxcXFxcXG4rXFx0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgzNSwgMHgzMylcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHXFx0XFx0MHgxOFxcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFXFx0XFx0MHgwMGJjXFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUdcXHRcXHQweDFkXFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyBCSVQoMTEpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUU1xcdDB4MDA0NFxcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSBcXFxcXFxuK1xcdChBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIHwgXFxcXFxcbitcXHQgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUylcXG4rXFxuKy8qXFxuKyAqIEFub3RoZXIgaW50ZWdyYXRpb24gb2YgdGhpcyBleGFjdC1JRCBQSFkgZG9jdW1lbnRzIGl0cyBkaWdpdGFsIHZlbmRvclxcbisgKiByZWdpc3RlciBtYXAsIHdoaWNoIGFsc28gbWF0Y2hlcyB0aGUgb2JzZXJ2ZWQgQUN4MDAgcmVzZXQgdmFsdWVzLiBUaGUgQUN4MDBcXG4rICogYW5hbG9nLXBhZ2UgZmllbGQgZW5jb2RpbmdzIHJlbWFpbiB1bnB1Ymxpc2hlZCwgc28ga2VlcCB0aG9zZSBhcyBvcGFxdWVcXG4rICogdmVuZG9yIGluaXRpYWxpemF0aW9uIHZhbHVlcyBpbnN0ZWFkIG9mIGludmVudGluZyBiaXQgZGVmaW5pdGlvbnMuXFxuKyAqL1xcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfcHJpdiB7XFxuK1xcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2w7XFxuK1xcdC8qIFNlcmlhbGl6ZXMgcGFja2FnZSBzdGF0ZSBhbmQgbXVsdGktcmVnaXN0ZXIgcG93ZXIgc2VxdWVuY2VzLiAqL1xcbitcXHRzdHJ1Y3QgbXV0ZXggc3RhdGVfbG9jaztcXG4rXFx0Ym9vbCBpc19hYzMwMDtcXG4rXFx0Ym9vbCB1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZztcXG4rXFx0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xcbit9O1xcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxcbit7XFxuK1xcdHJldHVybiBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyxcXG4rXFx0XFx0XFx0ICAgRklFTERfUFJFUChBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLLCBwYWdlKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY29udHJvbC1cXHUwMDNlcG93ZXJfb24ocHJpdi1cXHUwMDNlY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHByaXYtXFx1MDAzZXBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY29udHJvbC1cXHUwMDNlcG93ZXJfb2ZmKHByaXYtXFx1MDAzZWNvbnRyb2wpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfTkEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZWNvbnRyb2wtXFx1MDAzZXNldF9pbnRlcmZhY2UocHJpdi1cXHUwMDNlY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHBoeWRldl93YXJuKHByaXYtXFx1MDAzZXBoeWRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gcG93ZXIgb2ZmIGNvbnRyb2wgYmxvY2s6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIEVSUl9QVFIocmV0KSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFjeDAwX2VwaHlfY29udHJvbF9yZWxlYXNlKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IGRhdGE7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHUxNiAqdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG52bWVtX2NlbGwgKmNlbGw7XFxuK1xcdHNpemVfdCBpO1xcbitcXHRzaXplX3QgbGVuO1xcbitcXHR1OCAqYnVmO1xcbitcXHR1MTYgdmFsID0gMDtcXG4rXFxuK1xcdGNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChub2RlLCBuYW1lKTtcXG4rXFx0aWYgKElTX0VSUihjZWxsKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoY2VsbCk7XFxuK1xcbitcXHRidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgXFx1MDAyNmxlbik7XFxuK1xcdG52bWVtX2NlbGxfcHV0KGNlbGwpO1xcbitcXHRpZiAoSVNfRVJSKGJ1ZikpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGJ1Zik7XFxuK1xcdGlmICghbGVuIHx8IGxlbiBcXHUwMDNlIHNpemVvZigqdmFsdWUpKSB7XFxuK1xcdFxcdGtmcmVlKGJ1Zik7XFxuK1xcdFxcdHJldHVybiBsZW4gPyAtRVJBTkdFIDogLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlbjsgaSsrKVxcbitcXHRcXHR2YWwgfD0gKHUxNilidWZbaV0gXFx1MDAzY1xcdTAwM2MgKDggKiBpKTtcXG4rXFx0a2ZyZWUoYnVmKTtcXG4rXFx0KnZhbHVlID0gdmFsO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9pbml0X3BhY2thZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7XFxuK1xcdGJvb2wgc2VsZWN0YWJsZTtcXG4rXFx0Ym9vbCBmaXhlZF9hYzMwMDtcXG4rXFx0Ym9vbCBoYXNfY29uZmlndXJhdGlvbjtcXG4rXFx0dTggY2FsaWJyYXRpb247XFxuK1xcdHUzMiBiYXNlX2FkZHI7XFxuK1xcdHUxNiBjb25maWd1cmF0aW9uID0gMDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQoZGV2LVxcdTAwM2VvZl9ub2RlKTtcXG4rXFx0aWYgKCFwYWNrYWdlX25vZGUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIW9mX25vZGVfbmFtZV9lcShwYWNrYWdlX25vZGUsIFxcXCJldGhlcm5ldC1waHktcGFja2FnZVxcXCIpKSB7XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIlBIWSBpcyBub3QgaW4gYW4gRXRoZXJuZXQgUEhZIHBhY2thZ2VcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGFja2FnZV9ub2RlLCBcXFwicmVnXFxcIiwgXFx1MDAyNmJhc2VfYWRkcik7XFxuK1xcdGlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi1cXHUwMDNlbWRpby5hZGRyKSB7XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInBhY2thZ2UgYW5kIGxpbmsgUEhZIGFkZHJlc3NlcyBkaWZmZXJcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFx0fVxcbitcXG4rXFx0c2VsZWN0YWJsZSA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXFxcIik7XFxuK1xcdGZpeGVkX2FjMzAwID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxcIik7XFxuK1xcdGlmICghc2VsZWN0YWJsZSBcXHUwMDI2XFx1MDAyNiAhZml4ZWRfYWMzMDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcXCIpKSB7XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInVuc3VwcG9ydGVkIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXG4rXFx0aGFzX2NvbmZpZ3VyYXRpb24gPVxcbitcXHRcXHRvZl9wcm9wZXJ0eV9tYXRjaF9zdHJpbmcocGFja2FnZV9ub2RlLCBcXFwibnZtZW0tY2VsbC1uYW1lc1xcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXFwiY29uZmlndXJhdGlvblxcXCIpIFxcdTAwM2U9IDA7XFxuK1xcdGlmIChoYXNfY29uZmlndXJhdGlvbikge1xcbitcXHRcXHRyZXQgPSBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHBhY2thZ2Vfbm9kZSwgXFxcImNvbmZpZ3VyYXRpb25cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Y29uZmlndXJhdGlvbik7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gcmVhZCBwYWNrYWdlIGNvbmZpZ3VyYXRpb25cXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2UgaWYgKHNlbGVjdGFibGUgfHwgZml4ZWRfYWMzMDApIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwicGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzZWxlY3RhYmxlKSB7XFxuK1xcdFxcdHByaXYtXFx1MDAzZWlzX2FjMzAwID1cXG4rXFx0XFx0XFx0Y29uZmlndXJhdGlvbiBcXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDA7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHByaXYtXFx1MDAzZWlzX2FjMzAwID0gZml4ZWRfYWMzMDA7XFxuK1xcdFxcdGlmIChoYXNfY29uZmlndXJhdGlvbiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgISEoY29uZmlndXJhdGlvbiBcXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDApICE9XFxuK1xcdFxcdCAgICBwcml2LVxcdTAwM2Vpc19hYzMwMCkge1xcbitcXHRcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJjb25maWd1cmF0aW9uIGRvZXMgbm90IG1hdGNoIHBhY2thZ2VcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRjYWxpYnJhdGlvbiA9IEZJRUxEX0dFVChBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLLFxcbitcXHRcXHRcXHRcXHRjb25maWd1cmF0aW9uKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nID1cXG4rXFx0XFx0cHJpdi1cXHUwMDNlaXNfYWMzMDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ISEoY29uZmlndXJhdGlvbiBcXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVyk7XFxuK1xcdHByaXYtXFx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQgPVxcbitcXHRcXHRvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgICBcXFwieC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZFxcXCIpO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlzX2FjMzAwKVxcbitcXHRcXHRwcml2LVxcdTAwM2Vjb250cm9sID1cXG4rXFx0XFx0XFx0YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBjYWxpYnJhdGlvbik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cHJpdi1cXHUwMDNlY29udHJvbCA9XFxuK1xcdFxcdFxcdGFjMjAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgaGFzX2NvbmZpZ3VyYXRpb24sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGNhbGlicmF0aW9uKTtcXG4rXFx0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtXFx1MDAzZWNvbnRyb2wpO1xcbitcXG4rb3V0X3B1dF9ub2RlOlxcbitcXHRvZl9ub2RlX3B1dChwYWNrYWdlX25vZGUpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0cmV0ID0gcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEFDWDAwX1BBR0VfMSxcXG4rXFx0XFx0XFx0ICAgICAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICAgICAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWRldi1cXHUwMDNlb2Zfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwcml2LVxcdTAwM2VwaHlkZXYgPSBwaHlkZXY7XFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShwaHlkZXYsIHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4rXFx0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBwb3dlciBvbiBjb250cm9sIGJsb2NrXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wb3dlcl9vZmY7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Bvd2VyX29mZjtcXG4rXFxuK1xcdC8qIEFDeDAwIGNhbiBhY2tub3dsZWRnZSByZXNldCBpbiBwb3dlci1kb3duIHdpdGhvdXQgcmVzdGFydGluZy4gKi9cXG4rXFx0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wb3dlcl9vZmY7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfc29mdF9yZXNldChwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wb3dlcl9vZmY7XFxuK1xcbitcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcbitvdXRfcG93ZXJfb2ZmOlxcbitcXHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4ocHJpdik7XFxuK291dF91bmxvY2s6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdHUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi1cXHUwMDNlaXNfYWMzMDAgP1xcbitcXHRcXHRBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFIDpcXG4rXFx0XFx0QUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRTtcXG4rXFx0dTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTtcXG4rXFx0dTE2IGdsb2JhbF9jb25maWc7XFxuK1xcdGludCBvbGRwYWdlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRnbG9iYWxfY29uZmlnID0gRklFTERfUFJFUChBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLFxcbitcXHRcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQpXFxuK1xcdFxcdGdsb2JhbF9jb25maWcgfD0gQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQ7XFxuK1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8wLFxcbitcXHRcXHRcXHQgICAgICAgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUcsXFxuK1xcdFxcdFxcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XFxuK1xcdFxcdFxcdCAgICAgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLCBnbG9iYWxfY29uZmlnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xcbitcXHRcXHRhZmVfZXFfcnhfZGV0ZWN0ID1cXG4rXFx0XFx0XFx0QUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFO1xcbitcXHRcXHR0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUU7XFxuK1xcdH1cXG4rXFxuK1xcdG9sZHBhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzEpO1xcbitcXHRpZiAob2xkcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBvbGRwYWdlO1xcbitcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRSwgMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8yKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcXG4rXFx0XFx0XFx0ICAgRklFTERfUFJFUChBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV82KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgYWZlX2VxX3J4X2RldGVjdCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfOCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlzX2FjMzAwIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTtcXG4rXFxuK291dF9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldCA9IHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cXG4rXFx0cmV0ID0gZ2VucGh5X2M0NV9hbl9jb25maWdfZWVlX2FuZWcocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGdlbnBoeV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXHRyZXQgPSBfX2FjeDAwX2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX2FjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZWxvY2spO1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wb3dlcl9vZmY7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Bvd2VyX29mZjtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcG93ZXJfb2ZmO1xcbitcXG4rXFx0LyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi9cXG4rXFx0cmV0ID0gX19hY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Bvd2VyX29mZjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rb3V0X3Bvd2VyX29mZjpcXG4rXFx0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0cmV0ID0gX19hY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUocGh5ZGV2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJlc3VtZV9yZXQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBUaGUgc3VzcGVuZCBjYWxsYmFjayBpcyBpbnZva2VkIHdpdGhvdXQgdGhlIHBoeWxpYiBsb2NrIGhlbGQuICovXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBoeWRldi1cXHUwMDNlbG9jayk7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRyZXN1bWVfcmV0ID0gX19hY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJlc3VtZV9yZXQpXFxuK1xcdFxcdFxcdHBoeWRldl93YXJuKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gcmVjb3ZlciBmcm9tIHN1c3BlbmQgZXJyb3I6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIEVSUl9QVFIocmVzdW1lX3JldCkpO1xcbitcXHR9XFxuK1xcbitvdXRfdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBoeWRldi1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwaHlkZXYtXFx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xcbitcXHRib29sIG1hdGNoO1xcbitcXG4rXFx0aWYgKCFnZW5waHlfbWF0Y2hfcGh5X2RldmljZShwaHlkZXYsIHBoeWRydikgfHwgIW5vZGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogUks2MzAgcmVwb3J0cyB0aGUgc2FtZSBQSFkgSUQsIHNvIGFsc28gbWF0Y2ggdGhlIHBhY2thZ2UgaWRlbnRpdHkuICovXFxuK1xcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7XFxuK1xcdGlmICghcGFja2FnZV9ub2RlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0bWF0Y2ggPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcXFwiKSB8fFxcbitcXHRcXHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJ4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcXFwiKSB8fFxcbitcXHRcXHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcXFwiKTtcXG4rXFx0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcXG4rXFxuK1xcdHJldHVybiBtYXRjaDtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7XFxuK1xcdHtcXG4rXFx0XFx0UEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLFxcbitcXHRcXHQubmFtZSA9IFxcXCJYLVBvd2VycyBBQzIwMC9BQzMwMCBFUEhZXFxcIixcXG4rXFx0XFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXFxuK1xcdFxcdC5wcm9iZSA9IGFjeDAwX2VwaHlfcHJvYmUsXFxuK1xcdFxcdC5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSxcXG4rXFx0XFx0LndyaXRlX3BhZ2UgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UsXFxuK1xcdFxcdC5zb2Z0X3Jlc2V0ID0gYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0LFxcbitcXHRcXHQuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LFxcbitcXHRcXHQuZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSA9IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSxcXG4rXFx0XFx0LnN1c3BlbmQgPSBhY3gwMF9lcGh5X3N1c3BlbmQsXFxuK1xcdFxcdC5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSxcXG4rXFx0fSxcXG4rfTtcXG4rbW9kdWxlX3BoeV9kcml2ZXIoYWN4MDBfZXBoeV9kcml2ZXIpO1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhY3gwMF9lcGh5X3RibFtdID0ge1xcbitcXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSB9LFxcbitcXHR7IH1cXG4rfTtcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7XFxuK1xcbitNT0RVTEVfQVVUSE9SKFxcXCJKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaCBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxcbkBAIC0wLDAgKzEsMjggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisjaWZuZGVmIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxcbisjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vyci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVFxcdDE2XFxuK1xcbitzdHJ1Y3QgZGV2aWNlX25vZGU7XFxuK1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIHtcXG4rXFx0aW50ICgqcG93ZXJfb24pKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBwaHlfYWRkcik7XFxuK1xcdGludCAoKnBvd2VyX29mZikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCk7XFxuK1xcdGludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXFxuK1xcdFxcdFxcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7XFxuK307XFxuK1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcXG4rYWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxcbitcXHRcXHQgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pO1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcXG4rYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbik7XFxuK1xcbisjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDc6MTE6MjcuODgyMTUwNDI4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjkwOTk5Njk3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiBzdHJpY3RseSByZXF1aXJlcyBhIHNwZWNpZmljIERldmljZSBUcmVlIGNvbmZpZ3VyYXRpb24gKGRldi1cXHUwMDNlb2Zfbm9kZSBtdXN0IGJlIHByZXNlbnQsIHBhcmVudCBtdXN0IGJlICdldGhlcm5ldC1waHktcGFja2FnZScsIHNwZWNpZmljIGNvbXBhdGlibGUgc3RyaW5ncywgcmVndWxhdG9ycywgY2xvY2tzLCBhbmQgSTJDIGRldmljZXMpLiBTaW5jZSBzeXprYWxsZXIgcnVucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSkgd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGFuZCBkZXZpY2UgdHJlZSBzZXR1cCwgdGhlIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNhZjNmMzlkMDU5ZDY5YzJhZWM4ZmExNGU3ZjlkMTkzYWZjN2VhYmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwNzoxMToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWU5MGM0ZmZlY2NlYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxuQEAgLTAsMCArMSwxNjUgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlc1xuK1xuK21haW50YWluZXJzOlxuKyAgLSBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246XG4rICBUaGUgQUMyMDAgYW5kIEFDMzAwIGNvbnRhaW4gY29tcGF0aWJsZSBGYXN0IEV0aGVybmV0IFBIWSBibG9ja3Mgd2hpY2ggcmVwb3J0XG4rICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlXG4rICBwYWNrYWdlIGNvbnRyb2wgcGF0aHMgZGlmZmVyLiBBQzIwMCBwYWNrYWdlIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZFxuKyAgdGhyb3VnaCB0aGUgY29tcGFuaW9uIElDJ3MgSTJDIHJlZ2lzdGVyIGludGVyZmFjZSwgd2hpbGUgQUMzMDAgY29udHJvbFxuKyAgcmVnaXN0ZXJzIG9jY3VweSBhIHNlY29uZCBDbGF1c2UgMjIgYWRkcmVzcyBmaXhlZCBhdCAxNiBwbHVzIHRoZSBsaW5rIFBIWVxuKyAgYWRkcmVzcy5cbitcbisgIFN5c3RlbXMgd2l0aCBhIGtub3duIHBhY2thZ2UgdXNlIHRoZSBjb3JyZXNwb25kaW5nIEFDMjAwIG9yIEFDMzAwIGNvbXBhdGlibGUuXG4rICBTeXN0ZW1zIHdoaWNoIGNhbiBjb250YWluIGVpdGhlciBwYWNrYWdlIHVzZSB0aGUgQUN4MDAgY29tcGF0aWJsZSBhbmQgYVxuKyAgcGFja2VkIE5WTUVNIGNvbmZpZ3VyYXRpb24gZmllbGQgdG8gc2VsZWN0IHRoZSBiYWNrZW5kIGF0IHJ1bnRpbWUuXG4rXG4rICBUaGUgbGluayBQSFkgY2Fubm90IHJlcG9ydCBpdHMgSUQgdW50aWwgdGhlIHBhY2thZ2UgY29udHJvbCBzZXF1ZW5jZSBoYXNcbisgIGNvbXBsZXRlZCwgc28gaXRzIGNoaWxkIG5vZGUgc3VwcGxpZXMgdGhlIGRvY3VtZW50ZWQgUEhZIElELiBUaGUgcGFja2FnZSBhbmRcbisgIGNoaWxkIHVzZSB0aGUgc2FtZSBiYXNlIGFkZHJlc3MuIFRoZSBBQzIwMCBkcml2ZXIgcHJvZ3JhbXMgdGhhdCBhZGRyZXNzIGludG9cbisgIHRoZSBwYWNrYWdlLCB3aGlsZSB0aGUgQUMzMDAgZHJpdmVyIGRlcml2ZXMgaXRzIGNvbnRyb2wgYWRkcmVzcyBmcm9tIGl0LlxuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBlbnVtOlxuKyAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4rICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbisgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuK1xuKyAgcmVnOlxuKyAgICBtYXhpbXVtOiAzMVxuK1xuKyAgY2xvY2tzOlxuKyAgICBtYXhJdGVtczogMVxuKyAgICBkZXNjcmlwdGlvbjogQUMzMDAgaW5wdXQgY2xvY2ssIHJ1bm5pbmcgYXQgMjQsIDI1LCBvciAyNyBNSHpcbitcbisgIHZjYy1zdXBwbHk6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIDMuMyBWIHBhY2thZ2Ugc3VwcGx5LiBUaGlzIGlzIGNvbm5lY3RlZCB0byBFUEhZX1ZDQyBvbiBBQzIwMCBhbmQgVkNDMVxuKyAgICAgIG9uIEFDMzAwLlxuK1xuKyAgbnZtZW0tY2VsbHM6XG4rICAgIG1heEl0ZW1zOiAxXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFBhY2tlZCBFUEhZIGNvbmZpZ3VyYXRpb24gZmllbGQuIEJpdHMgMyB0aHJvdWdoIDAgY29udGFpbiB0aGUgYW5hbG9nXG4rICAgICAgY2FsaWJyYXRpb24gY29kZSwgYml0cyA3IHRocm91Z2ggNCBhcmUgcmVzZXJ2ZWQsIGJpdCA4IHNlbGVjdHMgQUMzMDBcbisgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxuKyAgICAgIGxvdy1jYWxpYnJhdGlvbiB0dW5pbmcgc2VxdWVuY2UuIEEgZml4ZWQgQUMyMDAgcGFja2FnZSBtYXkgcHJvdmlkZSBvbmx5XG4rICAgICAgdGhlIGxvdyBjYWxpYnJhdGlvbiBiaXRzIG9yIG9taXQgdGhlIGNlbGwgYW5kIHVzZSBpdHMgaW50ZXJuYWwgZUZ1c2VcbisgICAgICBjb3B5IGluc3RlYWQuXG4rXG4rICBudm1lbS1jZWxsLW5hbWVzOlxuKyAgICBjb25zdDogY29uZmlndXJhdGlvblxuK1xuKyAgeC1wb3dlcnMsYWMyMDA6XG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgUGhhbmRsZSB0byB0aGUgQUMyMDAgY29tcGFuaW9uIElDIGRlc2NyaWJlZCBieSB0aGUgeC1wb3dlcnMsYWMyMDAgTUZEXG4rICAgICAgYmluZGluZy4gSXRzIEkyQyBpbnRlcmZhY2UgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBwYWNrYWdlIGNvbnRyb2xcbisgICAgICByZWdpc3RlcnMgdXNlZCB0byBwb3dlciBhbmQgY29uZmlndXJlIHRoZSBFdGhlcm5ldCBQSFkuXG4rXG4rICB4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkOlxuKyAgICB0eXBlOiBib29sZWFuXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIEludmVydCB0aGUgeE1JSSByZWNlaXZlIGNsb2NrIGluc2lkZSB0aGUgUEhZLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHNvbWVcbisgICAgICBTb0MgaW50ZWdyYXRpb25zLCBpbmNsdWRpbmcgdGhlIEFsbHdpbm5lciBINiBBQzIwMCBjb25uZWN0aW9uLlxuK1xuK3BhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxuKyAgICAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcbisgICAgcHJvcGVydGllczpcbisgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFxuKyAgICByZXF1aXJlZDpcbisgICAgICAtIGNvbXBhdGlibGVcbisgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK3JlcXVpcmVkOlxuKyAgLSBjb21wYXRpYmxlXG4rICAtIHZjYy1zdXBwbHlcbitcbitkZXBlbmRlbnRSZXF1aXJlZDpcbisgIG52bWVtLWNlbGxzOiBbIG52bWVtLWNlbGwtbmFtZXMgXVxuK1xuK2FsbE9mOlxuKyAgLSAkcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuKyAgICB0aGVuOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjbG9ja3M6IGZhbHNlXG4rICAgICAgcmVxdWlyZWQ6XG4rICAgICAgICAtIHgtcG93ZXJzLGFjMjAwXG4rICAtIGlmOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXG4rICAgIHRoZW46XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZVxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSBjbG9ja3NcbisgICAgICAgIC0gbnZtZW0tY2VsbHNcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuKyAgICB0aGVuOlxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSBjbG9ja3NcbisgICAgICAgIC0gbnZtZW0tY2VsbHNcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuKyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgZW51bTpcbisgICAgICAgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuKyAgICAgICAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4rICAgIHRoZW46XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIHJlZzpcbisgICAgICAgICAgbWF4aW11bTogN1xuKyAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgICAgICAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxuKyAgICAgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgICAgIHJlZzpcbisgICAgICAgICAgICAgIG1heGltdW06IDdcbitcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rZXhhbXBsZXM6XG4rICAtIHxcbisgICAgbWRpbyB7XG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcIjtcbisgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2cHdtIDVcdTAwM2U7XG4rICAgICAgICAgICAgdmNjLXN1cHBseSA9IFx1MDAzY1x1MDAyNnJlZ18zdjNcdTAwM2U7XG4rICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSBcdTAwM2NcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cdTAwM2U7XG4rICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFwiY29uZmlndXJhdGlvblwiO1xuKyAgICAgICAgICAgIHgtcG93ZXJzLGFjMjAwID0gXHUwMDNjXHUwMDI2YWMyMDBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xuKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcIjtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbitcbisuLi5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCBiNGVmOTI3ZmQ0YTY3Li5kMzgzNTU5N2UzNzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5AQCAtNDg0LDYgKzQ4NCwxNyBAQCBjb25maWcgVklURVNTRV9QSFlcbiBcdGhlbHBcbiBcdCAgQ3VycmVudGx5IHN1cHBvcnRzIHRoZSB2c2M4MjQ0XG4gXG4rY29uZmlnIFhQT1dFUlNfQUNYMDBfUEhZXG4rXHR0cmlzdGF0ZSBcIlgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWVwiXG4rXHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXHUwMDI2XHUwMDI2IE5WTUVNIFx1MDAyNlx1MDAyNiBPRl9NRElPIFx1MDAyNlx1MDAyNiBSRUdVTEFUT1JcbitcdGRlcGVuZHMgb24gSTJDIHx8ICFJMkNcbitcdHNlbGVjdCBQSFlfUEFDS0FHRVxuK1x0aGVscFxuK1x0ICBFbmFibGUgdGhlIEZhc3QgRXRoZXJuZXQgUEhZIGRyaXZlciBzaGFyZWQgYnkgdGhlIFgtUG93ZXJzIEFDMjAwXG4rXHQgIGFuZCBBQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyIGNvbmZpZ3VyZXMgdGhlaXIgY29tbW9uIE1ESU8gUEhZXG4rXHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxuK1x0ICByZWdpc3RlcnMuXG4rXG4gY29uZmlnIFhJTElOWF9HTUlJMlJHTUlJXG4gXHR0cmlzdGF0ZSBcIlhpbGlueCBHTUlJMlJHTUlJIGNvbnZlcnRlciBkcml2ZXJcIlxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuaW5kZXggMjVjNGEzYzI0MjlmNy4uNDk1NzVmYTE4NTIyMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXG5AQCAtMTAxLDQgKzEwMSw1IEBAIG9iai0kKENPTkZJR19TTVNDX1BIWSlcdFx0Kz0gc21zYy5vXG4gb2JqLSQoQ09ORklHX1NURTEwWFApXHRcdCs9IHN0ZTEwWHAub1xuIG9iai0kKENPTkZJR19URVJBTkVUSUNTX1BIWSlcdCs9IHRlcmFuZXRpY3Mub1xuIG9iai0kKENPTkZJR19WSVRFU1NFX1BIWSlcdCs9IHZpdGVzc2Uub1xuK29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSlcdCs9IHhwb3dlcnMvXG4gb2JqLSQoQ09ORklHX1hJTElOWF9HTUlJMlJHTUlJKSArPSB4aWxpbnhfZ21paTJyZ21paS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlOTc3YTc5NTgzMjVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXG5AQCAtMCwwICsxLDMgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4reHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vXG4rb2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKSArPSB4cG93ZXJzLWFjeDAwLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFmZGQyYTNkZmJlNDFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmNcbkBAIC0wLDAgKzEsMzE0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogWC1Qb3dlcnMgQUMyMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZFxuKyAqXG4rICogQ29weXJpZ2h0IChjKSAyMDIyIEFybSBMdGQuIChBbmRyZSBQcnp5d2FyYSBcdTAwM2NhbmRyZS5wcnp5d2FyYUBhcm0uY29tXHUwMDNlKVxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJhY3gwMC5oXCJcbitcbisjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVRcdDNcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXHQyNDAwMDAwMFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcdDI3MDAwMDAwXG4rXG4rI2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFR1x0XHRcdDB4MDAxNFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMClcbisjZGVmaW5lIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRVx0XHRcdEJJVCgxKVxuK1xuKyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUdcdFx0XHQweDAwMTZcbisjZGVmaW5lIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRVx0XHRcdEJJVCgwKVxuK1xuKy8qIEFDMjAwLWludGVybmFsIGNvcHkgb2YgdGhlIEV0aGVybmV0IFBIWSBjYWxpYnJhdGlvbiBlRnVzZS4gKi9cbisjZGVmaW5lIEFDMjAwX0VGVVNFX0VQSFlfUkVHXHRcdFx0MHg4MDA0XG4rXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NUTF9SRUdcdFx0XHQweDYwMDBcbisjZGVmaW5lIEFDMjAwX0VQSFlfU0hVVERPV05cdFx0XHRCSVQoMClcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcdFx0QklUKDIpXG4rI2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0tcdFx0XHRHRU5NQVNLKDgsIDQpXG4rI2RlZmluZSBBQzIwMF9FUEhZX1JNSUlfU0VMXHRcdFx0QklUKDExKVxuKyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0tcdFx0R0VOTUFTSygxNSwgMTIpXG4rXG4rc3RydWN0IGFjMjAwX2VwaHlfY3RsIHtcbitcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcbitcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbitcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcbitcdHN0cnVjdCBkZXZpY2UgKmRldjtcbitcdHUxNiBlcGh5X2N0bDtcbitcdHVuc2lnbmVkIGludCBwaHlfYWRkcjtcbitcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4rXHRib29sIHN1cHBseV9lbmFibGVkO1xuK1x0Ym9vbCBwb3dlcmVkO1xuK307XG4rXG4rc3RhdGljIHUxNiBhYzIwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY3RsIHxcbitcdFx0KHByaXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbitcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XG4rXHRcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LVx1MDAzZXBoeV9hZGRyKTtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsdWUpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWx1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcImZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcblwiLFxuK1x0XHRcdHJlZywgRVJSX1BUUihyZXQpKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0aW50IGVycjtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuK1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4rXHRcdFx0XHRcdCAgIGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XG4rXHRcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU0hVVERPV04pO1xuK1x0XHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdHJldCA9IGVycjtcbitcdFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXG4rXHRcdHByaXYtXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xuK1x0fVxuK1xuK1x0aWYgKHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbitcdFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2V2Y2MpO1xuK1x0XHRpZiAoIWVycilcbitcdFx0XHRwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XG4rXHRcdGVsc2UgaWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbit7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcbitcdHJldHVybiBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuK31cbitcbitzdGF0aWMgaW50XG4rYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4rXHRcdHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRVBIWV9DVExfUkVHLFxuK1x0XHRcdFx0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCxcbitcdFx0XHRcdFx0IGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4rXHRcdFx0XHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4rXHRpZiAoIXJldClcbitcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXG4re1xuK1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXHR1MTYgZXBoeV9jdGw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeV9hZGRyIFx1MDAzZSBGSUVMRF9NQVgoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXBoeV9hZGRyID09IHBoeV9hZGRyKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpIHtcbitcdFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cHJpdi1cdTAwM2VwaHlfYWRkciA9IHBoeV9hZGRyO1xuK1xuK1x0aWYgKCFwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4rXHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2V2Y2MpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0ZXBoeV9jdGwgPSBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdik7XG4rXG4rXHQvKlxuK1x0ICogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gQUMyMDBcbitcdCAqIHNwZWNpZmllcyBubyBhZGRpdGlvbmFsIGRlbGF5IGJldHdlZW4gdGhlc2UgY29udHJvbHMuIFRoZSBjb21wYW5pb25cbitcdCAqIE1GRCBwcm92aWRlciBoYXMgY29tcGxldGVkIGl0cyBpbnB1dC1jbG9jayBzdGFydHVwIGRlbGF5IGJlZm9yZVxuK1x0ICogcHVibGlzaGluZyB0aGUgcmVnbWFwLlxuK1x0ICovXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsXG4rXHRcdFx0XHQgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfZGlzYWJsZTtcbitcbitcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbitcdFx0XHRcdCAgIGVwaHlfY3RsIHwgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsXG4rXHRcdFx0XHQgICBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcbitcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbitcdHJldHVybiAwO1xuK1xuK2Vycl9kaXNhYmxlOlxuK1x0LyogQXR0ZW1wdCBldmVyeSBzdGVwIG9mIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSBhZnRlciBhIHBhcnRpYWwgc3RhcnQuICovXG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1x0YWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbitcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWMyMDBfbm9kZTtcbitcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdjtcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7XG4rXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuK1x0dTggYnBzX2VmZnVzZV9jb2RlO1xuK1x0c3RydWN0IGNsayAqY2xrO1xuK1x0aW50IHJldDtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRwcml2LVx1MDAzZWRldiA9IGRldjtcbitcdHByaXYtXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcInZjY1wiKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2V2Y2MpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XFxuXCIpKTtcbitcbitcdGFjMjAwX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBhY2thZ2Vfbm9kZSwgXCJ4LXBvd2VycyxhYzIwMFwiLCAwKTtcbitcdGlmICghYWMyMDBfbm9kZSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICAgXCJtaXNzaW5nIHgtcG93ZXJzLGFjMjAwIHJlZmVyZW5jZVxcblwiKSk7XG4rXHRjbGllbnQgPSBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShhYzIwMF9ub2RlKTtcbitcdG9mX25vZGVfcHV0KGFjMjAwX25vZGUpO1xuK1x0aWYgKCFjbGllbnQpIHtcbitcdFx0cmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWO1xuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgIFwiQUMyMDAgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkXFxuXCIpKTtcbitcdH1cbitcbitcdGlmICghZGV2aWNlX2xpbmtfYWRkKGRldiwgXHUwMDI2Y2xpZW50LVx1MDAzZWRldixcbitcdFx0XHQgICAgIERMX0ZMQUdfQVVUT1JFTU9WRV9DT05TVU1FUikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJmYWlsZWQgdG8gbGluayBBQzIwMCBkZXZpY2VcXG5cIik7XG4rXHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4rXHR9XG4rXG4rXHRkZXZpY2VfbG9jayhcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbitcdGlmIChkZXZpY2VfaXNfYm91bmQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldikpXG4rXHRcdHByaXYtXHUwMDNlcmVnbWFwID0gZGV2X2dldF9yZWdtYXAoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4rXHRkZXZpY2VfdW5sb2NrKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuK1x0aWYgKCFwcml2LVx1MDAzZXJlZ21hcCkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcbitcdFx0XHRcdCAgICBcIkFDMjAwIGRyaXZlciBpcyBub3QgcmVhZHlcXG5cIik7XG4rXHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4rXHR9XG4rXG4rXHRpZiAoIWhhc19jYWxpYnJhdGlvbikge1xuK1x0XHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsXG4rXHRcdFx0XHQgIFx1MDAyNmludGVybmFsX2NhbGlicmF0aW9uKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF9lcnJvcjtcbitcdFx0Y2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbitcdH1cbitcbitcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbitcdGJwc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuK1x0XHRcdCAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7XG4rXHRwcml2LVx1MDAzZWVwaHlfY3RsID1cbitcdFx0RklFTERfUFJFUChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSywgYnBzX2VmZnVzZV9jb2RlKTtcbitcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbitcbitcdGNsayA9IGNsa19nZXQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4rXHRpZiAoSVNfRVJSKGNsaykpIHtcbitcdFx0cmV0ID0gUFRSX0VSUihjbGspO1xuK1x0XHRnb3RvIG91dF9lcnJvcjtcbitcdH1cbitcbitcdC8qIFRoZSBib3VuZCBBQzIwMCBwcm92aWRlciBlbmFibGVzIGFuZCBleGNsdXNpdmVseSBwaW5zIHRoaXMgcmF0ZS4gKi9cbitcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XG4rXHRjbGtfcHV0KGNsayk7XG4rXG4rXHRzd2l0Y2ggKGNsa19yYXRlKSB7XG4rXHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxuK1x0XHRwcml2LVx1MDAzZWVwaHlfY3RsIHw9IEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcInVuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XFxuXCIsXG4rXHRcdFx0XHQgICAgY2xrX3JhdGUpO1xuK1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuK1x0fVxuK1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247XG4rXHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xuK1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuK1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuK1x0cHV0X2RldmljZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbitcbitcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4rXG4rb3V0X2Vycm9yOlxuK1x0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBBQzIwMCBjb250cm9sXFxuXCIpO1xuK291dF9wdXRfY2xpZW50OlxuK1x0cHV0X2RldmljZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbitcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWE1NjA0MzJhMTRjOVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuY1xuQEAgLTAsMCArMSwzODcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBYLVBvd2VycyBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiLi4vcGh5bGliLmhcIlxuKyNpbmNsdWRlIFwiYWN4MDAuaFwiXG4rXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUXHQzXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWlx0MjQwMDAwMDBcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaXHQyNTAwMDAwMFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcdDI3MDAwMDAwXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUdcdFx0XHQweDAwXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLXHRcdEdFTk1BU0soMTEsIDgpXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfTUFTS1x0XHRcdEdFTk1BU0soNywgNilcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMClcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSlcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMilcbisjZGVmaW5lIEFDMzAwX0VGVVNFX0NMS19FTkFCTEVcdFx0XHRCSVQoNSlcbisjZGVmaW5lIEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEVcdFx0QklUKDQpXG4rI2RlZmluZSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFXHRcdEJJVCgyKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMSlcbisjZGVmaW5lIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlRcdFx0QklUKDApXG4rXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPXHRcdEJJVCgzKVxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLXHRcdEdFTk1BU0soMiwgMClcbitcbisjZGVmaW5lIEFDMzAwX1NZU19CSUFTMV9SRUdcdFx0XHQweDAyXG4rI2RlZmluZSBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRVx0XHRCSVQoMTUpXG4rXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHXHRcdFx0MHgwNVxuKyNkZWZpbmUgQUMzMDBfTURJT19EUlZfTUFTS1x0XHRcdEdFTk1BU0soMTUsIDE0KVxuKyNkZWZpbmUgQUMzMDBfTUlJX0RSVl9NQVNLXHRcdFx0R0VOTUFTSygxMSwgMTApXG4rI2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMlx0XHRcdDJcbisjZGVmaW5lIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEVcdFx0XHRCSVQoNClcbisjZGVmaW5lIEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRVx0XHRcdEJJVCgwKVxuK1xuKyNkZWZpbmUgQUMzMDBfRVBIWV9DT05GSUdfUkVHXHRcdFx0MHgwNlxuKyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0tcdFx0R0VOTUFTSygxNSwgMTIpXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMXHRcdFx0QklUKDExKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuK1xuKyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXFxcbitcdChBQzMwMF9FRlVTRV9DTEtfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRSB8IFxcXG4rXHQgQUMzMDBfQ0xLSU5fR0FUSU5HX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfCBcXFxuK1x0IEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpXG4rXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fVkFMVUUgXFxcbitcdChGSUVMRF9QUkVQKEFDMzAwX01ESU9fRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4rXHQgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4rXHQgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRSB8IEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRSlcbitcbitzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwge1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbitcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcbitcdHN0cnVjdCBjbGsgKmNsaztcbitcdHUxNiBzeXNfY29udHJvbDtcbitcdHUxNiBlcGh5X2NvbmZpZztcbitcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4rXHRib29sIHBhY2thZ2Vfa25vd247XG4rXHRib29sIGludGVybmFsX2RsZG87XG4rXHRib29sIHN1cHBseV9lbmFibGVkO1xuK1x0Ym9vbCBwb3dlcmVkO1xuK307XG4rXG4rc3RhdGljIHVuc2lnbmVkIGludFxuK2FjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcjtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9yZWFkKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcbitcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXG4rXHRcdFx0XHR1MTYgdmFsKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdFx0ICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSwgdmFsKTtcbitcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9tb2RpZnkoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxuK1x0XHRcdFx0IHUxNiBtYXNrLCB1MTYgc2V0KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cdTAwM2VwaHlkZXYsXG4rXHRcdFx0XHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xuK1x0aWYgKHJldCBcdTAwM2U9IDApIHtcbitcdFx0dTE2IHZhbCA9IChyZXQgXHUwMDI2IH5tYXNrKSB8IChzZXQgXHUwMDI2IG1hc2spO1xuK1xuK1x0XHRyZXQgPSB2YWwgPT0gcmV0ID8gMCA6XG4rXHRcdFx0X19waHlfcGFja2FnZV93cml0ZShwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCxcbitcdFx0XHRcdFx0ICAgIHJlZ251bSwgdmFsKTtcbitcdH1cbitcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY29uZmlnIHxcbitcdFx0KHByaXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbitcdFx0IEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcbit9XG4rXG4rc3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0LypcbitcdCAqIEEgY2hpcCByZXNldCByZXN0b3JlcyBETERPRU4gdG8gb25lLiBVbnRpbCBQS0dfU1RBVFVTIGhhcyBpZGVudGlmaWVkXG4rXHQgKiB0aGUgc3VwcGx5IGFycmFuZ2VtZW50LCBwcmVzZXJ2ZSBhbnkgZXh0ZXJuYWwtVkREIHNldHVwIGxlZnQgYnkgdGhlXG4rXHQgKiBib290bG9hZGVyIGJ5IGFzc2VydGluZyBvbmx5IHRoZSBFUEhZIHJlc2V0LlxuK1x0ICovXG4rXHRyZXR1cm4gIXByaXYtXHUwMDNlcGFja2FnZV9rbm93biB8fCAhcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbitcdFx0QUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCA6IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0aW50IGVycjtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuK1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XG4rXHRcdFx0XHRcdCAgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xuK1x0XHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLCAwKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0XHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1xuK1x0XHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cdTAwM2VjbGspO1xuK1x0XHRwcml2LVx1MDAzZXBvd2VyZWQgPSBmYWxzZTtcbitcdH1cbitcbitcdGlmIChwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4rXHRcdGVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtXHUwMDNldmNjKTtcbitcdFx0aWYgKCFlcnIpXG4rXHRcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IGZhbHNlO1xuK1x0XHRlbHNlIGlmICghcmV0KVxuK1x0XHRcdHJldCA9IGVycjtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpXG4re1xuK1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXG4rXHRyZXR1cm4gYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbit9XG4rXG4rc3RhdGljIGludFxuK2FjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4re1xuK1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbitcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlID09IGludGVyZmFjZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKVxuK1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuK1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9STUlJX1NFTCxcbitcdFx0XHRcdFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4rXHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4rXHRpZiAoIXJldClcbitcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXG4re1xuK1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXHR1OCBwYWNrYWdlX3N0YXR1cztcbitcdHUxNiByZXNldF92YWx1ZTtcbitcdGludCBzeXNfY29udHJvbDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocGh5X2FkZHIgIT0gYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4rXHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2V2Y2MpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xuK1xuK1x0XHQvKiBXYWl0IGZvciB0aGUgcG93ZXItb24gcmVzZXQgaW50ZXJ2YWwgc3BlY2lmaWVkIGJ5IHRoZSBtYW51YWwuICovXG4rXHRcdGZzbGVlcCgxMDAwMCk7XG4rXHR9XG4rXG4rXHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cdTAwM2VjbGspO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbitcbitcdC8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi9cbitcdHJlc2V0X3ZhbHVlID0gYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdik7XG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsIHJlc2V0X3ZhbHVlKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdC8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgICBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcbitcdFx0XHRcdCAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHQvKiBSZXRhaW4gdGhlIHZlbmRvciBjbG9jay1lbmFibGUgZGVmYXVsdHMsIGluY2x1ZGluZyB0aGUgZUZ1c2UgY2xvY2suICovXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgICBwcml2LVx1MDAzZXN5c19jb250cm9sKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdHN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpO1xuK1x0aWYgKHN5c19jb250cm9sIFx1MDAzYyAwKSB7XG4rXHRcdHJldCA9IHN5c19jb250cm9sO1xuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXHR9XG4rXG4rXHRwYWNrYWdlX3N0YXR1cyA9IEZJRUxEX0dFVChBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLLCBzeXNfY29udHJvbCk7XG4rXHRpZiAoKH5wYWNrYWdlX3N0YXR1cyBcdTAwMjYgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSAhPVxuK1x0ICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXHR9XG4rXG4rXHRwcml2LVx1MDAzZWludGVybmFsX2RsZG8gPSBwYWNrYWdlX3N0YXR1cyBcdTAwMjYgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExETztcbitcdHByaXYtXHUwMDNlcGFja2FnZV9rbm93biA9IHRydWU7XG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfU1lTX0JJQVMxX1JFRyxcbitcdFx0XHRcdCAgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSxcbitcdFx0XHRcdCAgIHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA/XG4rXHRcdFx0XHQgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSA6IDApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0LyogS2VlcCB0aGUgZG9jdW1lbnRlZCBkZWZhdWx0IGRyaXZlIGxldmVsIGFuZCBsZWF2ZSB0aGUgSVJRIGRpc2FibGVkLiAqL1xuK1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRyxcbitcdFx0XHRcdCAgIEFDMzAwX1NZU19JT19WQUxVRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHRmc2xlZXAoMTAwMDApO1xuK1xuK1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuK1x0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbitcdFx0XHRcdCAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHRmc2xlZXAoMTAwMDApO1xuK1xuK1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuK1x0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9wb3dlcl9vZmY6XG4rXHRhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpXG4re1xuK1x0Y2xrX3B1dChkYXRhKTtcbit9XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4rYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7XG4rXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuK1x0dTggYmdzX2VmZnVzZV9jb2RlO1xuK1x0aW50IHJldDtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYWRkciBcdTAwM2UgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgIFwibGluayBhZGRyZXNzIGlzIG91dHNpZGUgdGhlIHBhY2thZ2UgcmFuZ2VcXG5cIikpO1xuK1x0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXY7XG4rXG4rXHRwcml2LVx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXCJ2Y2NcIik7XG4rXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNldmNjKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi1cdTAwM2V2Y2MpLFxuK1x0XHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCBwYWNrYWdlIHN1cHBseVxcblwiKSk7XG4rXG4rXHRwcml2LVx1MDAzZWNsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2VjbGspKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZWNsayksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXFxuXCIpKTtcbitcbitcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfY2xrX3B1dCwgcHJpdi1cdTAwM2VjbGspO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcbitcdHJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIHByaXYtXHUwMDNlY2xrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxuXCIpKTtcbitcbitcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlY2xrKTtcbitcdHN3aXRjaCAoY2xrX3JhdGUpIHtcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgIFwidW5zdXBwb3J0ZWQgaW5wdXQgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cIixcbitcdFx0XHRcdFx0ICAgICBjbGtfcmF0ZSkpO1xuK1x0fVxuK1x0cHJpdi1cdTAwM2VzeXNfY29udHJvbCB8PSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUztcbitcbitcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbitcdGJnc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuK1x0XHRcdCAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7XG4rXHRwcml2LVx1MDAzZWVwaHlfY29uZmlnID1cbitcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTtcbitcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbitcbitcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uO1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcbitcdHByaXYtXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcbitcdC8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi9cbitcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbitcbitcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWQyM2EzY2JmZTJhMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuY1xuQEAgLTAsMCArMSw2MjEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXHUwMDNjamVybmVqLnNrcmFiZWNAZ21haWwuY29tXHUwMDNlXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCIuLi9waHlsaWIuaFwiXG4rI2luY2x1ZGUgXCJhY3gwMC5oXCJcbitcbisjZGVmaW5lIEFDWDAwX0VQSFlfSURcdFx0XHRcdDB4MDA0NDE0MDBcbitcbisjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0tcdEdFTk1BU0soMywgMClcbisjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDBcdFx0QklUKDgpXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1dcdEJJVCg5KVxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHXHRcdFx0MHgxZlxuKyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfTUFTS1x0XHRcdEdFTk1BU0soMTIsIDgpXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzBcdFx0XHRcdDBcbisjZGVmaW5lIEFDWDAwX1BBR0VfMVx0XHRcdFx0MVxuKyNkZWZpbmUgQUNYMDBfUEFHRV8yXHRcdFx0XHQyXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzZcdFx0XHRcdDZcbisjZGVmaW5lIEFDWDAwX1BBR0VfOFx0XHRcdFx0OFxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUdcdFx0MHgxM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlRcdEJJVCgxMilcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0tcdFx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUT1x0XHQyXG4rXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUdcdFx0MHgxMlxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFXHQweDQ4MjRcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUdcdFx0MHgxM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEVcdFx0XHRCSVQoMTUpXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUdcdDB4MTdcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEVcdEJJVCgzKVxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFR1x0XHQweDE4XG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTS1x0XHRHRU5NQVNLKDE0LCAxMilcbisjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUXHQwXG4rXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUdcdFx0MHgxMFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRVx0MHg1NTIzXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUdcdFx0MHgxM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUVcdFx0MHhmMDAwXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHXHQweDE0XG4rI2RlZmluZSBBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGZcbisjZGVmaW5lIEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcdDB4NzA4YlxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFIDB4NzgwOVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHXHRcdFx0MHgxNVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xME1fTUFTS1x0XHRHRU5NQVNLKDcsIDApXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRShfMTAwbSwgXzEwbSkgXFxcbitcdChGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcXFxuK1x0IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0ssIChfMTBtKSkpXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFIFxcXG4rXHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRSBcXFxuK1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgzNSwgMHgzMylcbitcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFR1x0XHQweDE4XG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRVx0XHQweDAwYmNcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHXHRcdDB4MWRcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgQklUKDExKVxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUU1x0MHgwMDQ0XG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXFxcbitcdChBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIHwgXFxcbitcdCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTKVxuK1xuKy8qXG4rICogQW5vdGhlciBpbnRlZ3JhdGlvbiBvZiB0aGlzIGV4YWN0LUlEIFBIWSBkb2N1bWVudHMgaXRzIGRpZ2l0YWwgdmVuZG9yXG4rICogcmVnaXN0ZXIgbWFwLCB3aGljaCBhbHNvIG1hdGNoZXMgdGhlIG9ic2VydmVkIEFDeDAwIHJlc2V0IHZhbHVlcy4gVGhlIEFDeDAwXG4rICogYW5hbG9nLXBhZ2UgZmllbGQgZW5jb2RpbmdzIHJlbWFpbiB1bnB1Ymxpc2hlZCwgc28ga2VlcCB0aG9zZSBhcyBvcGFxdWVcbisgKiB2ZW5kb3IgaW5pdGlhbGl6YXRpb24gdmFsdWVzIGluc3RlYWQgb2YgaW52ZW50aW5nIGJpdCBkZWZpbml0aW9ucy5cbisgKi9cbitcbitzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2IHtcbitcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sO1xuK1x0LyogU2VyaWFsaXplcyBwYWNrYWdlIHN0YXRlIGFuZCBtdWx0aS1yZWdpc3RlciBwb3dlciBzZXF1ZW5jZXMuICovXG4rXHRzdHJ1Y3QgbXV0ZXggc3RhdGVfbG9jaztcbitcdGJvb2wgaXNfYWMzMDA7XG4rXHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xuK1x0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xuK307XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdHJldHVybiBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyxcbitcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29uKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdCAgICAgICBwcml2LVx1MDAzZXBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29mZihwcml2LVx1MDAzZWNvbnRyb2wpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2VzZXRfaW50ZXJmYWNlKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHBoeWRldl93YXJuKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdCAgICBcImZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXFxuXCIsXG4rXHRcdFx0ICAgIEVSUl9QVFIocmV0KSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFjeDAwX2VwaHlfY29udHJvbF9yZWxlYXNlKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IGRhdGE7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4ocHJpdik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcbitcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgdTE2ICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDtcbitcdHNpemVfdCBpO1xuK1x0c2l6ZV90IGxlbjtcbitcdHU4ICpidWY7XG4rXHR1MTYgdmFsID0gMDtcbitcbitcdGNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChub2RlLCBuYW1lKTtcbitcdGlmIChJU19FUlIoY2VsbCkpXG4rXHRcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xuK1xuK1x0YnVmID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFx1MDAyNmxlbik7XG4rXHRudm1lbV9jZWxsX3B1dChjZWxsKTtcbitcdGlmIChJU19FUlIoYnVmKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoYnVmKTtcbitcdGlmICghbGVuIHx8IGxlbiBcdTAwM2Ugc2l6ZW9mKCp2YWx1ZSkpIHtcbitcdFx0a2ZyZWUoYnVmKTtcbitcdFx0cmV0dXJuIGxlbiA/IC1FUkFOR0UgOiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpKyspXG4rXHRcdHZhbCB8PSAodTE2KWJ1ZltpXSBcdTAwM2NcdTAwM2MgKDggKiBpKTtcbitcdGtmcmVlKGJ1Zik7XG4rXHQqdmFsdWUgPSB2YWw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0ICAgc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbitcdGJvb2wgc2VsZWN0YWJsZTtcbitcdGJvb2wgZml4ZWRfYWMzMDA7XG4rXHRib29sIGhhc19jb25maWd1cmF0aW9uO1xuK1x0dTggY2FsaWJyYXRpb247XG4rXHR1MzIgYmFzZV9hZGRyO1xuK1x0dTE2IGNvbmZpZ3VyYXRpb24gPSAwO1xuK1x0aW50IHJldDtcbitcbitcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQoZGV2LVx1MDAzZW9mX25vZGUpO1xuK1x0aWYgKCFwYWNrYWdlX25vZGUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKCFvZl9ub2RlX25hbWVfZXEocGFja2FnZV9ub2RlLCBcImV0aGVybmV0LXBoeS1wYWNrYWdlXCIpKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwiUEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHR9XG4rXG4rXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYWNrYWdlX25vZGUsIFwicmVnXCIsIFx1MDAyNmJhc2VfYWRkcik7XG4rXHRpZiAocmV0IHx8IGJhc2VfYWRkciAhPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwicGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHR9XG4rXG4rXHRzZWxlY3RhYmxlID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHQgICAgIFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCIpO1xuK1x0Zml4ZWRfYWMzMDAgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdCAgICAgIFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXCIpO1xuK1x0aWYgKCFzZWxlY3RhYmxlIFx1MDAyNlx1MDAyNiAhZml4ZWRfYWMzMDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdCAgICAgXCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcIikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJ1bnN1cHBvcnRlZCBFdGhlcm5ldCBQSFkgcGFja2FnZVxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHR9XG4rXG4rXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXG4rXHRoYXNfY29uZmlndXJhdGlvbiA9XG4rXHRcdG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhwYWNrYWdlX25vZGUsIFwibnZtZW0tY2VsbC1uYW1lc1wiLFxuK1x0XHRcdFx0XHQgXCJjb25maWd1cmF0aW9uXCIpIFx1MDAzZT0gMDtcbitcdGlmIChoYXNfY29uZmlndXJhdGlvbikge1xuK1x0XHRyZXQgPSBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHBhY2thZ2Vfbm9kZSwgXCJjb25maWd1cmF0aW9uXCIsXG4rXHRcdFx0XHRcdFx0XHUwMDI2Y29uZmlndXJhdGlvbik7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgXCJmYWlsZWQgdG8gcmVhZCBwYWNrYWdlIGNvbmZpZ3VyYXRpb25cXG5cIik7XG4rXHRcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHRcdH1cbitcdH0gZWxzZSBpZiAoc2VsZWN0YWJsZSB8fCBmaXhlZF9hYzMwMCkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcInBhY2thZ2UgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZFxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHR9XG4rXG4rXHRpZiAoc2VsZWN0YWJsZSkge1xuK1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID1cbitcdFx0XHRjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwO1xuK1x0fSBlbHNlIHtcbitcdFx0cHJpdi1cdTAwM2Vpc19hYzMwMCA9IGZpeGVkX2FjMzAwO1xuK1x0XHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhIShjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwKSAhPVxuK1x0XHQgICAgcHJpdi1cdTAwM2Vpc19hYzMwMCkge1xuK1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgXCJjb25maWd1cmF0aW9uIGRvZXMgbm90IG1hdGNoIHBhY2thZ2VcXG5cIik7XG4rXHRcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHRcdH1cbitcdH1cbitcbitcdGNhbGlicmF0aW9uID0gRklFTERfR0VUKEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0ssXG4rXHRcdFx0XHRjb25maWd1cmF0aW9uKTtcbitcbitcdHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPVxuK1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNlxuK1x0XHQhIShjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cpO1xuK1x0cHJpdi1cdTAwM2V4bWlpX3J4X2Nsb2NrX2ludmVydGVkID1cbitcdFx0b2ZfcHJvcGVydHlfcmVhZF9ib29sKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdCAgICAgIFwieC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZFwiKTtcbitcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwKVxuK1x0XHRwcml2LVx1MDAzZWNvbnRyb2wgPVxuK1x0XHRcdGFjMzAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuK1x0ZWxzZVxuK1x0XHRwcml2LVx1MDAzZWNvbnRyb2wgPVxuK1x0XHRcdGFjMjAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0ICAgICAgaGFzX2NvbmZpZ3VyYXRpb24sXG4rXHRcdFx0XHRcdCAgICAgIGNhbGlicmF0aW9uKTtcbitcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyhwcml2LVx1MDAzZWNvbnRyb2wpO1xuK1xuK291dF9wdXRfbm9kZTpcbitcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8xLFxuK1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2O1xuK1x0aW50IHJldDtcbitcbitcdGlmICghZGV2LVx1MDAzZW9mX25vZGUpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1x0cmV0ID0gYWN4MDBfZXBoeV9pbml0X3BhY2thZ2UocGh5ZGV2LCBwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4rXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSwgcHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gcG93ZXIgb24gY29udHJvbCBibG9ja1xcblwiKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdC8qIEFDeDAwIGNhbiBhY2tub3dsZWRnZSByZXNldCBpbiBwb3dlci1kb3duIHdpdGhvdXQgcmVzdGFydGluZy4gKi9cbitcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdHJldCA9IGdlbnBoeV9zb2Z0X3Jlc2V0KHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4rXG4rXHRnb3RvIG91dF91bmxvY2s7XG4rXG4rb3V0X3Bvd2VyX29mZjpcbitcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTtcbitvdXRfdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdHUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi1cdTAwM2Vpc19hYzMwMCA/XG4rXHRcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxuK1x0XHRBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFO1xuK1x0dTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTtcbitcdHUxNiBnbG9iYWxfY29uZmlnO1xuK1x0aW50IG9sZHBhZ2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1xuK1x0Z2xvYmFsX2NvbmZpZyA9IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSyxcbitcdFx0XHRcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xuK1x0aWYgKHByaXYtXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcbitcdFx0Z2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDtcbitcbitcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHLFxuK1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4rXHRcdGFmZV9lcV9yeF9kZXRlY3QgPVxuK1x0XHRcdEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRTtcbitcdFx0dHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFO1xuK1x0fVxuK1xuK1x0b2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7XG4rXHRpZiAob2xkcGFnZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIG9sZHBhZ2U7XG4rXG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFRyxcbitcdFx0XHQgIEFDWDAwX1BBR0UxX0FQU19ESVNBQkxFRF80U19WQUxVRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFLCAwKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcbitcdFx0XHQgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLFxuK1x0XHRcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXG4rXHRcdFx0XHQgICAgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVCkpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV82KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFRyxcbitcdFx0XHQgIGFmZV9lcV9yeF9kZXRlY3QpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9WQUxVRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRpZiAocHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xuK1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0fVxuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9SRUcsIHR4X2xldmVsX3ZhbHVlKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfOCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRpZiAocHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xuK1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHLFxuK1x0XHRcdFx0ICBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUpO1xuK1xuK291dF9yZXN0b3JlX3BhZ2U6XG4rXHRyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBSZXN0b3JlIHRoZSBzdGFuZGFyZCBFRUUgcG9saWN5IHJldGFpbmVkIGJ5IHBoeWxpYiBhY3Jvc3MgcmVzZXRzLiAqL1xuK1x0cmV0ID0gZ2VucGh5X2M0NV9hbl9jb25maWdfZWVlX2FuZWcocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcdHJldCA9IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJldDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGh5ZGV2LVx1MDAzZWxvY2spO1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1xuK1x0cmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4rXG4rXHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4rXG4rXHQvKiBQb3dlcmluZyBvZmYgdGhlIGNvbnRyb2wgYmxvY2sgbG9zZXMgdGhlIHZlbmRvci1wYWdlIHN0YXRlLiAqL1xuK1x0cmV0ID0gX19hY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitvdXRfcG93ZXJfb2ZmOlxuK1x0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRyZXQgPSBfX2FjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXN1bWVfcmV0O1xuK1x0aW50IHJldDtcbitcbitcdC8qIFRoZSBzdXNwZW5kIGNhbGxiYWNrIGlzIGludm9rZWQgd2l0aG91dCB0aGUgcGh5bGliIGxvY2sgaGVsZC4gKi9cbitcdG11dGV4X2xvY2soXHUwMDI2cGh5ZGV2LVx1MDAzZWxvY2spO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1xuK1x0cmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHJlc3VtZV9yZXQgPSBfX2FjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpO1xuK1x0XHRpZiAocmVzdW1lX3JldClcbitcdFx0XHRwaHlkZXZfd2FybihwaHlkZXYsXG4rXHRcdFx0XHQgICAgXCJmYWlsZWQgdG8gcmVjb3ZlciBmcm9tIHN1c3BlbmQgZXJyb3I6ICVwZVxcblwiLFxuK1x0XHRcdFx0ICAgIEVSUl9QVFIocmVzdW1lX3JldCkpO1xuK1x0fVxuK1xuK291dF91bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4re1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbitcdGJvb2wgbWF0Y2g7XG4rXG4rXHRpZiAoIWdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHBoeWRldiwgcGh5ZHJ2KSB8fCAhbm9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBSSzYzMCByZXBvcnRzIHRoZSBzYW1lIFBIWSBJRCwgc28gYWxzbyBtYXRjaCB0aGUgcGFja2FnZSBpZGVudGl0eS4gKi9cbitcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4rXHRpZiAoIXBhY2thZ2Vfbm9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXHRtYXRjaCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0XCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcIikgfHxcbitcdFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHRcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwiKSB8fFxuK1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCIpO1xuK1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbitcbitcdHJldHVybiBtYXRjaDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7XG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSxcbitcdFx0Lm5hbWUgPSBcIlgtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFlcIixcbitcdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXG4rXHRcdC5wcm9iZSA9IGFjeDAwX2VwaHlfcHJvYmUsXG4rXHRcdC5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSxcbitcdFx0LndyaXRlX3BhZ2UgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UsXG4rXHRcdC5zb2Z0X3Jlc2V0ID0gYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0LFxuK1x0XHQuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LFxuK1x0XHQuZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSA9IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSxcbitcdFx0LnN1c3BlbmQgPSBhY3gwMF9lcGh5X3N1c3BlbmQsXG4rXHRcdC5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSxcbitcdH0sXG4rfTtcbittb2R1bGVfcGh5X2RyaXZlcihhY3gwMF9lcGh5X2RyaXZlcik7XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhY3gwMF9lcGh5X3RibFtdID0ge1xuK1x0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCkgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcbkBAIC0wLDAgKzEsMjggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rI2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbisjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbitcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVFx0MTZcbitcbitzdHJ1Y3QgZGV2aWNlX25vZGU7XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7XG4rXHRpbnQgKCpwb3dlcl9vbikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xuK1x0aW50ICgqcG93ZXJfb2ZmKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKTtcbitcdGludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbit9O1xuK1xuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbitcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbithYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTtcbitcbisjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA3OjExOjI3Ljg4MjE1MTUzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MDA5OTY2MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIERyaXZlcioqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBuZXcgZHJpdmVyIGZvciBFdGhlcm5ldCBQSFlzIHNwZWNpZmljYWxseSBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MsIHJlc2lkaW5nIGluIGBkcml2ZXJzL25ldC9waHkveHBvd2Vycy9gLiBJdCBkZWZpbmVzIGBDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFlgIGFuZCBpbXBsZW1lbnRzIHRoZSB1c3VhbCBQSFkgZHJpdmVyIGZ1bmN0aW9uczogcHJvYmUsIHJlc2V0LCBpbml0aWFsaXphdGlvbiwgYW5kIHBvd2VyIG1hbmFnZW1lbnQgKHN1c3BlbmQvcmVzdW1lKS4gQWxzbywgSSBzZWUgYGFjMjAwX2VwaHlfY3RsX2NyZWF0ZWAgYW5kIGBhYzMwMF9lcGh5X2N0bF9jcmVhdGVgLCB3aGljaCBwcm9iYWJseSBoYW5kbGUgc29tZSBkZXZpY2Utc3BlY2lmaWMgY29udHJvbCBhc3BlY3RzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBob3cgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGRyaXZlciwgYW5kIGhvdyB0byB0cmlnZ2VyIGl0cyBwcm9iZSBmdW5jdGlvbi4gSXQncyBhbiBFdGhlcm5ldCBQSFksIHNvIHRoZSBzdGFuZGFyZCBhY2Nlc3MgbWV0aG9kIGlzIHZpYSBNRElPLiBDYW4gSSByZWFjaCB0aGlzIGNvZGUgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IGxpa2UgUUVNVT8gUUVNVSBlbXVsYXRlcyBzb21lIG5ldHdvcmsgaW50ZXJmYWNlcywgYnV0IGRvZXMgaXQgYWN0dWFsbHkgZW11bGF0ZSB0aGUgWC1Qb3dlcnMgQUMyMDAvQUMzMDAgUEhZPyBObywgcHJvYmFibHkgbm90LlxuXG5TbywgaG93IGRvIEkgZ2V0IHRoZSBwcm9iZSBmdW5jdGlvbiBjYWxsZWQ/IFBIWSBkcml2ZXJzIGFyZSB1c3VhbGx5IHByb2JlZCBieSB0aGUgTURJTyBidXMgZHJpdmVyIGJhc2VkIG9uIGRldmljZSB0cmVlIGluZm9ybWF0aW9uIG9yIGhhcmR3YXJlIHByb2JpbmcuIEkgbmVlZCBhbiBNRElPIGJ1cyBhbmQgYSBkZXZpY2UgcmVnaXN0ZXJlZCBvbiBpdC4gQ2FuIEkgc2V0IHVwIGEgdmlydHVhbCBNRElPIGJ1cyBhbmQgaW5qZWN0IGEgZGV2aWNlIGZvciB0ZXN0aW5nPyBTeXprYWxsZXIgaXMgdGhlIGdvLXRvIGZ1enppbmcgdG9vbCwgYnV0IGRvZXMgaXQgaGF2ZSBhIHdheSB0byBpbmplY3QgTURJTyBkZXZpY2VzIGRpcmVjdGx5P1xuXG5JIGtub3cgc3l6a2FsbGVyIGNhbiBjcmVhdGUgdmlydHVhbCBkZXZpY2VzIGZvciB2YXJpb3VzIHN1YnN5c3RlbXMgLSBVU0IgKHZoY2kpLCBXaUZpIChtYWM4MDIxMV9od3NpbSksIGlucHV0ICh1aW5wdXQpLCBEUk0gKHZrbXMpLCBBTFNBIChzbmQtYWxvb3ApLiBEb2VzIGl0IGhhdmUgYW55dGhpbmcgZXF1aXZhbGVudCBmb3IgTURJTz8gSSBuZWVkIHRvIGNoZWNrIGl0cyBNRElPIGRlc2NyaXB0aW9ucy5cblxuSSByZW1lbWJlciB0aGlua2luZyBhYm91dCBgbWRpby1tb2NrdXBgIG9yIHNpbWlsYXIuIE5vLCB0aGVyZSdzIG5vdGhpbmcgc3BlY2lmaWMuIFRoZXJlJ3MgYHR1bmAgb3IgYHRhcGAgYnV0IHRoZXkgZG9uJ3QgaW52b2x2ZSBNRElPLlxuXG5DYW4gSSB0cmlnZ2VyIHRoaXMgZnJvbSB1c2VyIHNwYWNlPyBVc3VhbGx5LCBQSFkgZGV2aWNlcyBhcmUgaW5zdGFudGlhdGVkIGJ5IHRoZSBNRElPIGJ1cyBkcml2ZXIsIGJ1dCBtYXliZSB2aWEgc3lzZnMgb3IgbmV0bGluaz8gTm8sIHRoYXQncyBub3QgdGhlIG5vcm1hbCBzZXR1cC4gU3l6a2FsbGVyIGhhcyBgc3l6X2luaXRfbmV0X2RldmljZWAsIGJ1dCB0aGF0IGRvZXNuJ3QgaW5zdGFudGlhdGUgTURJTyBQSFlzLlxuXG5BaGEhIFRoZSBBQzIwMCBkcml2ZXIgdXNlcyBJMkMgdG8gY29tbXVuaWNhdGUuIEl0IGNhbGxzIGBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZWAuIElmIGl0J3MgYW4gSTJDIGRldmljZSwgY2FuIEkgbGV2ZXJhZ2Ugc3l6a2FsbGVyJ3MgSTJDIGluamVjdGlvbiB2aWEgYC9kZXYvaTJjLSpgPyBJMkMgZGV2aWNlIGluc3RhbnRpYXRpb24gZnJvbSB1c2Vyc3BhY2UgY291bGQgcG90ZW50aWFsbHkgYmUgZG9uZSB2aWEgc3lzZnMgdXNpbmcgYG5ld19kZXZpY2VgLiBCdXQgdGhlIHByb2JlIGZ1bmN0aW9uIChgYWN4MDBfZXBoeV9wcm9iZWApIGlzIGEgUEhZIGRyaXZlciBwcm9iZSBmdW5jdGlvbi5cblxuTG9va2luZyBhdCB0aGUgZHJpdmVyIGNvZGUsIGl0IGRlZmluZXMgYGFjeDAwX2VwaHlfZHJpdmVyYCwgd2l0aCBhIFBIWSBJRCBtYXRjaC5cbmBgYGNcbnN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhY3gwMF9lcGh5X2RyaXZlcltdID0ge1xuXHR7XG5cdFx0UEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLFxuXHRcdC5uYW1lID0gXCJYLVBvd2VycyBBQzIwMC9BQzMwMCBFUEhZXCIsXG5cdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXG4uLi5cbmBgYFxuU28sIHRvIGdldCBpdCBwcm9iZWQsIEkgbmVlZCB0byByZWdpc3RlciBhIFBIWSBkZXZpY2Ugd2l0aCB0aGUgbWF0Y2hpbmcgSUQgb24gYW4gTURJTyBidXMuIENhbiBzeXprYWxsZXIgY3JlYXRlIGFuIE1ESU8gYnVzIGFuZCByZWdpc3RlciB0aGlzIFBIWSBkZXZpY2U/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gYW5kIGNvZGUgdG8gc2VlIGlmIGl0IHN1cHBvcnRzIGNyZWF0aW5nIHZpcnR1YWwgTURJTyBidXNlcyBhbmQgcmVnaXN0ZXJpbmcgdmlydHVhbCBQSFkgZGV2aWNlcy4gVGhlcmUgYXJlIGEgZmV3IHZpcnR1YWwgTURJTyBkcml2ZXJzIGxpa2UgYG1kaW8tYmNtLXVuaW1hY2AuXG5UaGUga2V5IGlzIHRvIGRldGVybWluZSBpZiBJIGNhbiBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgUEhZIGRldmljZXMgd2l0aCBhcmJpdHJhcnkgSURzIHRocm91Z2ggYSB2aXJ0dWFsIGRyaXZlciBpbiBzeXprYWxsZXIuIElmIG5vdCwgSSdtIHN0dWNrLlxuTGV0J3Mgc2VlIGlmIHN5emthbGxlciBoYXMgTURJTyBkZXNjcmlwdGlvbnMgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZW0uIFRoYXQncyB0aGUga2V5IHRvIGdldHRpbmcgdGhpcyBkcml2ZXIgdGVzdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQyNCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA3OjExOjQxLjg5MjEyMjExNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg4NTY1MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kc2EvZHNhLmM9NjIyPXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTY1NC1cXHRpZiAoIWRzLVxcdTAwM2V1c2VyX21paV9idXMgXFx1MDAyNlxcdTAwMjYgZHMtXFx1MDAzZW9wcy1cXHUwMDNlcGh5X3JlYWQpIHtcXG5uZXQvZHNhL2RzYS5jOjY1NTpcXHRcXHRkcy1cXHUwMDNldXNlcl9taWlfYnVzID0gbWRpb2J1c19hbGxvYygpO1xcbm5ldC9kc2EvZHNhLmMtNjU2LVxcdFxcdGlmICghZHMtXFx1MDAzZXVzZXJfbWlpX2J1cykge1xcbi0tXFxubmV0L2RzYS9kc2EuYy02NjItXFxubmV0L2RzYS9kc2EuYzo2NjM6XFx0XFx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihkcy1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG5uZXQvZHNhL2RzYS5jLTY2NC1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9kc2EvZHNhLmMtNjc0LVxcdGlmIChkcy1cXHUwMDNldXNlcl9taWlfYnVzIFxcdTAwMjZcXHUwMDI2IGRzLVxcdTAwM2VvcHMtXFx1MDAzZXBoeV9yZWFkKVxcbm5ldC9kc2EvZHNhLmM6Njc1OlxcdFxcdG1kaW9idXNfZnJlZShkcy1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG5uZXQvZHNhL2RzYS5jLTY3Ni10ZWFyZG93bjpcXG4tLVxcbm5ldC9kc2EvZHNhLmM9Njg2PXN0YXRpYyB2b2lkIGRzYV9zd2l0Y2hfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxubmV0L2RzYS9kc2EuYy02OTMtXFx0aWYgKGRzLVxcdTAwM2V1c2VyX21paV9idXMgXFx1MDAyNlxcdTAwMjYgZHMtXFx1MDAzZW9wcy1cXHUwMDNlcGh5X3JlYWQpIHtcXG5uZXQvZHNhL2RzYS5jOjY5NDpcXHRcXHRtZGlvYnVzX3VucmVnaXN0ZXIoZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyk7XFxubmV0L2RzYS9kc2EuYzo2OTU6XFx0XFx0bWRpb2J1c19mcmVlKGRzLVxcdTAwM2V1c2VyX21paV9idXMpO1xcbm5ldC9kc2EvZHNhLmMtNjk2LVxcdFxcdGRzLVxcdTAwM2V1c2VyX21paV9idXMgPSBOVUxMO1xcbi0tXFxubmV0L2RzYS9wb3J0LmMtMTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxubmV0L2RzYS9wb3J0LmM6MTI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG5uZXQvZHNhL3BvcnQuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbmV0LmhcXHUwMDNlXFxuLS1cXG5uZXQvZHNhL3BvcnQuYz0xNzI2PXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZHNhX3N3aXRjaGVzX2FwcGx5X3dvcmthcm91bmRzW10gPSB7XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0xNzk2LSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKVxcbm5ldC9kc2EvcG9ydC5jOjE3OTc6XFx0XFxcInNtc2MsbGFuOTMwMy1tZGlvXFxcIixcXG5uZXQvZHNhL3BvcnQuYy0xNzk4LSNlbmRpZlxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTMtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX25ldC5oXFx1MDAzZVxcbm5ldC9kc2EvdXNlci5jOjE0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9tZGlvLmhcXHUwMDNlXFxubmV0L2RzYS91c2VyLmM6MTU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG5uZXQvZHNhL3VzZXIuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcXHUwMDNlXFxuLS1cXG5uZXQvZHNhL3VzZXIuYz0yNjM3PXN0YXRpYyBpbnQgZHNhX3VzZXJfcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKnVzZXJfZGV2LCBpbnQgYWRkcixcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTI2NDItXFxubmV0L2RzYS91c2VyLmM6MjY0MzpcXHR1c2VyX2Rldi1cXHUwMDNlcGh5ZGV2ID0gbWRpb2J1c19nZXRfcGh5KGRzLVxcdTAwM2V1c2VyX21paV9idXMsIGFkZHIpO1xcbm5ldC9kc2EvdXNlci5jLTI2NDQtXFx0aWYgKCF1c2VyX2Rldi1cXHUwMDNlcGh5ZGV2KSB7XFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uYz01ODc9Y29udmVydF9sZWdhY3lfc2V0dGluZ3NfdG9fbGlua19rc2V0dGluZ3MoXFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uYy02MjEtXFx0XFx0PSBsZWdhY3lfc2V0dGluZ3MtXFx1MDAzZWF1dG9uZWc7XFxubmV0L2V0aHRvb2wvY29tbW9uLmM6NjIyOlxcdGxpbmtfa3NldHRpbmdzLVxcdTAwM2ViYXNlLm1kaW9fc3VwcG9ydFxcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjYyMzpcXHRcXHQ9IGxlZ2FjeV9zZXR0aW5ncy1cXHUwMDNlbWRpb19zdXBwb3J0O1xcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTYyNC1cXHRsaW5rX2tzZXR0aW5ncy1cXHUwMDNlYmFzZS5ldGhfdHBfbWRpeFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0zODI9Y29udmVydF9saW5rX2tzZXR0aW5nc190b19sZWdhY3lfc2V0dGluZ3MoXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQxMi1cXHRcXHQ9IGxpbmtfa3NldHRpbmdzLVxcdTAwM2ViYXNlLmF1dG9uZWc7XFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0MTM6XFx0bGVnYWN5X3NldHRpbmdzLVxcdTAwM2VtZGlvX3N1cHBvcnRcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjQxNDpcXHRcXHQ9IGxpbmtfa3NldHRpbmdzLVxcdTAwM2ViYXNlLm1kaW9fc3VwcG9ydDtcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQxNS1cXHRsZWdhY3lfc2V0dGluZ3MtXFx1MDAzZWV0aF90cF9tZGl4XFxuLS1cXG5uZXQvZXRodG9vbC9waHkuYz03MD1zdGF0aWMgaW50IHBoeV9wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcXG4tLVxcbm5ldC9ldGh0b29sL3BoeS5jLTkxLVxcbm5ldC9ldGh0b29sL3BoeS5jOjkyOlxcdHJlcF9kYXRhLVxcdTAwM2VuYW1lID0ga3N0cmR1cChkZXZfbmFtZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiksIEdGUF9LRVJORUwpO1xcbm5ldC9ldGh0b29sL3BoeS5jLTkzLVxcdGlmICghcmVwX2RhdGEtXFx1MDAzZW5hbWUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA3OjExOjQyLjA1MDk4NDc5NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0OTMxMTEzMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBUYXJnZXQgQ29kZSBmb3IgRnV6emluZyBGZWFzaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGdyZXBwZXIgb3V0cHV0IHBvaW50ZWQgbWUgdG93YXJkcyBNRElPIHVzYWdlIHdpdGhpbiBEU0EgYW5kIGV0aHRvb2wsIGFuZCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbnkgd2F5IHRvIGdldCBhIFBIWSBkZXZpY2UgaW5zdGFudGlhdGVkIGZyb20gdXNlcnNwYWNlLiBJbml0aWFsbHksIEkgdGhvdWdodCBhYm91dCBgbWRpb2J1c19yZWdpc3RlcmAsIHdoaWNoIGlzIGNhbGxlZCBieSBNRElPIGJ1cyBkcml2ZXJzLCBhbmQgd2hldGhlciBTeXprYWxsZXIgY291bGQgdHJpZ2dlciB0aGUgY3JlYXRpb24gb2YgYW4gTURJTyBidXMuIFBvdGVudGlhbGx5LCBJIHRob3VnaHQgbWF5YmUgYSB2aXJ0dWFsIGRyaXZlciBjb3VsZCBkbyB0aGlzLlxuXG5Ib3dldmVyLCBhIGRlZXBlciBsb29rIHJldmVhbHMgc29tZSBzaWduaWZpY2FudCBodXJkbGVzLiBUaGUgdGFyZ2V0IGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgZXRoZXJuZXQtcGh5LXBhY2thZ2VgIGRyaXZlciwgcmVsaWVzIGhlYXZpbHkgb24gYSBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlIHN0cnVjdHVyZS4gSXQgbmVlZHMgYGRldi1cdTAwM2VvZl9ub2RlYCB0byBleGlzdCBhbmQgaXRzIHBhcmVudCB0byBiZSBuYW1lZCBgXCJldGhlcm5ldC1waHktcGFja2FnZVwiYC4gSXQncyBwcmV0dHkgc3RyaWN0IGFib3V0IHRoaXMsIGltbWVkaWF0ZWx5IHJldHVybmluZyBhbiBlcnJvciBpZiB0aGVzZSBjb25kaXRpb25zIGFyZW4ndCBtZXQuXG5cbkluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VICh3aGljaCBTeXprYWxsZXIgdXNlcyksIGBkZXYtXHUwMDNlb2Zfbm9kZWAgaXMgZ29pbmcgdG8gYmUgTlVMTCB1bmxlc3MgYSBzcGVjaWZpYyBkZXZpY2UgdHJlZSBpcyBwcm92aWRlZC4gU3l6a2FsbGVyIGRvZXNuJ3QgaW5qZWN0IGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlcyBkdXJpbmcgcnVudGltZTsgdGhlIGRldmljZSB0cmVlIGlzIGZpeGVkIGF0IGJvb3QgdGltZSwgcHJvdmlkZWQgYnkgUUVNVS4gVGhhdCBtZWFucyB1bmxlc3MgdGhlIFFFTVUgbWFjaGluZSB1c2VkIGJ5IHN5emthbGxlciAobGlrZSBgcTM1YCwgYHBjYCBmb3IgeDg2IG9yIGB2aXJ0YCBmb3IgYXJtNjQpIGhhcyB0aGlzICpleGFjdCogZGV2aWNlIHRyZWUgbm9kZSwgdGhlIGRyaXZlciB3aWxsIG5ldmVyIHByb2JlIHN1Y2Nlc3NmdWxseS4gQW5kIFN5emthbGxlciBkZWZpbml0ZWx5IGRvZXNuJ3QgdXNlIGEgY3VzdG9tIGRldmljZSB0cmVlIHdpdGggdGhpbmdzIGxpa2UgYFwieC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXCJgIG9yIGBcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwiYC4gVGhpcyBpcyBhIGhhcmQgc3RvcC5cblxuSSBicmllZmx5IGNvbnNpZGVyZWQgYG9mX292ZXJsYXlgIGFzIGEgcG90ZW50aWFsIHdvcmthcm91bmQsIGlmIGBDT05GSUdfT0ZfT1ZFUkxBWWAgd2FzIGVuYWJsZWQgYW5kIHRoZXJlIHdhcyBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgdG8gbG9hZCBvdmVybGF5cy4gQnV0IGl0J3MgaGlnaGx5IHVubGlrZWx5IFN5emthbGxlciBnZW5lcmF0ZXMgdmFsaWQgT0Ygb3ZlcmxheXMgZm9yIHRoaXMgc3BlY2lmaWMgUEhZIGRyaXZlciwgYW5kIEkgZG9uJ3QgdGhpbmsgT0Ygb3ZlcmxheXMgYXJlIHVzdWFsbHkgbG9hZGVkIGZyb20gdXNlcnNwYWNlLiBGdXJ0aGVybW9yZSwgdGhlIGRyaXZlciBhbHNvIHJlcXVpcmVzIEkyQyBkZXZpY2VzLCByZWd1bGF0b3JzLCBhbmQgY2xvY2tzLiBJdCB3aWxsIG5lZWQgYSBjb21wbGV4IGRldmljZSB0cmVlIHNldHVwLlxuXG5TbywgdGhpcyBsb29rcyBsaWtlIGEgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIGhpZ2hseSB1bmxpa2VseSBwYXRoIGluIGFueSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIGRyaXZlciBleHBlY3RzIHNwZWNpZmljIGhhcmR3YXJlIChYLVBvd2VycyBBQzIwMC9BQzMwMCkgYW5kIHJlbGF0ZWQgc2V0dGluZ3MsIGFuZCBpdCB3b24ndCB3b3JrIHdpdGhvdXQgYSBkZXZpY2UgdHJlZSB0aGF0IGhhcyB0aGUgcmlnaHQgc2V0dXAuXG5cbk5vdywgbGV0IG1lIGdvIGJhY2sgdG8gdGhlIHJ1bGUuLi4gXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAtIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBUaGlzIHBlcmZlY3RseSBtYXRjaGVzIHRoaXMgc2l0dWF0aW9uLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcGF0Y2ggaXMgbm90IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDM0LCJPdXRwdXRUb2tlbnMiOjEzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNzoxMTo1Ni45ODIxMDAwNDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiBzdHJpY3RseSByZXF1aXJlcyBhIHNwZWNpZmljIERldmljZSBUcmVlIGNvbmZpZ3VyYXRpb24gKGRldi1cXHUwMDNlb2Zfbm9kZSBtdXN0IGJlIHByZXNlbnQsIHBhcmVudCBtdXN0IGJlICdldGhlcm5ldC1waHktcGFja2FnZScsIHNwZWNpZmljIGNvbXBhdGlibGUgc3RyaW5ncywgcmVndWxhdG9ycywgY2xvY2tzLCBhbmQgSTJDIGRldmljZXMpLiBTaW5jZSBzeXprYWxsZXIgcnVucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSkgd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGFuZCBkZXZpY2UgdHJlZSBzZXR1cCwgdGhlIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiBzdHJpY3RseSByZXF1aXJlcyBhIHNwZWNpZmljIERldmljZSBUcmVlIGNvbmZpZ3VyYXRpb24gKGRldi1cXHUwMDNlb2Zfbm9kZSBtdXN0IGJlIHByZXNlbnQsIHBhcmVudCBtdXN0IGJlICdldGhlcm5ldC1waHktcGFja2FnZScsIHNwZWNpZmljIGNvbXBhdGlibGUgc3RyaW5ncywgcmVndWxhdG9ycywgY2xvY2tzLCBhbmQgSTJDIGRldmljZXMpLiBTaW5jZSBzeXprYWxsZXIgcnVucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSkgd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGFuZCBkZXZpY2UgdHJlZSBzZXR1cCwgdGhlIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA3OjExOjU2Ljk4MjEyMTc0MloiLCJTZXEiOjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6kxv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 06:31:50 +0000 UTC FinishedAt: 2026-08-18 07:11:57 +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+CgkJCTx0ZD4yMDI2LzA4LzE4IDA3OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiBzdHJpY3RseSByZXF1aXJlcyBhIHNwZWNpZmljIERldmljZSBUcmVlIGNvbmZpZ3VyYXRpb24gKGRldi1cdTAwM2VvZl9ub2RlIG11c3QgYmUgcHJlc2VudCwgcGFyZW50IG11c3QgYmUgJiMzOTtldGhlcm5ldC1waHktcGFja2FnZSYjMzk7LCBzcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZ3MsIHJlZ3VsYXRvcnMsIGNsb2NrcywgYW5kIEkyQyBkZXZpY2VzKS4gU2luY2Ugc3l6a2FsbGVyIHJ1bnMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUpIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgZGV2aWNlIHRyZWUgc2V0dXAsIHRoZSBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA3OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2FmM2YzOWQwNTlkNjljMmFlYzhmYTE0ZTdmOWQxOTNhZmM3ZWFiYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA3OjExOjI0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWU5MGM0ZmZlY2NlYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxuQEAgLTAsMCAmIzQzOzEsMTY1IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2VzXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOlxuJiM0MzsgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnRcbiYjNDM7ICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlXG4mIzQzOyAgcGFja2FnZSBjb250cm9sIHBhdGhzIGRpZmZlci4gQUMyMDAgcGFja2FnZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWRcbiYjNDM7ICB0aHJvdWdoIHRoZSBjb21wYW5pb24gSUMmIzM5O3MgSTJDIHJlZ2lzdGVyIGludGVyZmFjZSwgd2hpbGUgQUMzMDAgY29udHJvbFxuJiM0MzsgIHJlZ2lzdGVycyBvY2N1cHkgYSBzZWNvbmQgQ2xhdXNlIDIyIGFkZHJlc3MgZml4ZWQgYXQgMTYgcGx1cyB0aGUgbGluayBQSFlcbiYjNDM7ICBhZGRyZXNzLlxuJiM0MztcbiYjNDM7ICBTeXN0ZW1zIHdpdGggYSBrbm93biBwYWNrYWdlIHVzZSB0aGUgY29ycmVzcG9uZGluZyBBQzIwMCBvciBBQzMwMCBjb21wYXRpYmxlLlxuJiM0MzsgIFN5c3RlbXMgd2hpY2ggY2FuIGNvbnRhaW4gZWl0aGVyIHBhY2thZ2UgdXNlIHRoZSBBQ3gwMCBjb21wYXRpYmxlIGFuZCBhXG4mIzQzOyAgcGFja2VkIE5WTUVNIGNvbmZpZ3VyYXRpb24gZmllbGQgdG8gc2VsZWN0IHRoZSBiYWNrZW5kIGF0IHJ1bnRpbWUuXG4mIzQzO1xuJiM0MzsgIFRoZSBsaW5rIFBIWSBjYW5ub3QgcmVwb3J0IGl0cyBJRCB1bnRpbCB0aGUgcGFja2FnZSBjb250cm9sIHNlcXVlbmNlIGhhc1xuJiM0MzsgIGNvbXBsZXRlZCwgc28gaXRzIGNoaWxkIG5vZGUgc3VwcGxpZXMgdGhlIGRvY3VtZW50ZWQgUEhZIElELiBUaGUgcGFja2FnZSBhbmRcbiYjNDM7ICBjaGlsZCB1c2UgdGhlIHNhbWUgYmFzZSBhZGRyZXNzLiBUaGUgQUMyMDAgZHJpdmVyIHByb2dyYW1zIHRoYXQgYWRkcmVzcyBpbnRvXG4mIzQzOyAgdGhlIHBhY2thZ2UsIHdoaWxlIHRoZSBBQzMwMCBkcml2ZXIgZGVyaXZlcyBpdHMgY29udHJvbCBhZGRyZXNzIGZyb20gaXQuXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBlbnVtOlxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhpbXVtOiAzMVxuJiM0MztcbiYjNDM7ICBjbG9ja3M6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MzsgICAgZGVzY3JpcHRpb246IEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6XG4mIzQzO1xuJiM0MzsgIHZjYy1zdXBwbHk6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgMy4zIFYgcGFja2FnZSBzdXBwbHkuIFRoaXMgaXMgY29ubmVjdGVkIHRvIEVQSFlfVkNDIG9uIEFDMjAwIGFuZCBWQ0MxXG4mIzQzOyAgICAgIG9uIEFDMzAwLlxuJiM0MztcbiYjNDM7ICBudm1lbS1jZWxsczpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgUGFja2VkIEVQSFkgY29uZmlndXJhdGlvbiBmaWVsZC4gQml0cyAzIHRocm91Z2ggMCBjb250YWluIHRoZSBhbmFsb2dcbiYjNDM7ICAgICAgY2FsaWJyYXRpb24gY29kZSwgYml0cyA3IHRocm91Z2ggNCBhcmUgcmVzZXJ2ZWQsIGJpdCA4IHNlbGVjdHMgQUMzMDBcbiYjNDM7ICAgICAgd2hlbiBzZXQgYW5kIEFDMjAwIHdoZW4gY2xlYXIsIGFuZCBiaXQgOSByZXF1ZXN0cyB0aGUgQUMzMDBcbiYjNDM7ICAgICAgbG93LWNhbGlicmF0aW9uIHR1bmluZyBzZXF1ZW5jZS4gQSBmaXhlZCBBQzIwMCBwYWNrYWdlIG1heSBwcm92aWRlIG9ubHlcbiYjNDM7ICAgICAgdGhlIGxvdyBjYWxpYnJhdGlvbiBiaXRzIG9yIG9taXQgdGhlIGNlbGwgYW5kIHVzZSBpdHMgaW50ZXJuYWwgZUZ1c2VcbiYjNDM7ICAgICAgY29weSBpbnN0ZWFkLlxuJiM0MztcbiYjNDM7ICBudm1lbS1jZWxsLW5hbWVzOlxuJiM0MzsgICAgY29uc3Q6IGNvbmZpZ3VyYXRpb25cbiYjNDM7XG4mIzQzOyAgeC1wb3dlcnMsYWMyMDA6XG4mIzQzOyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9waGFuZGxlXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgUGhhbmRsZSB0byB0aGUgQUMyMDAgY29tcGFuaW9uIElDIGRlc2NyaWJlZCBieSB0aGUgeC1wb3dlcnMsYWMyMDAgTUZEXG4mIzQzOyAgICAgIGJpbmRpbmcuIEl0cyBJMkMgaW50ZXJmYWNlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgcGFja2FnZSBjb250cm9sXG4mIzQzOyAgICAgIHJlZ2lzdGVycyB1c2VkIHRvIHBvd2VyIGFuZCBjb25maWd1cmUgdGhlIEV0aGVybmV0IFBIWS5cbiYjNDM7XG4mIzQzOyAgeC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZDpcbiYjNDM7ICAgIHR5cGU6IGJvb2xlYW5cbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBJbnZlcnQgdGhlIHhNSUkgcmVjZWl2ZSBjbG9jayBpbnNpZGUgdGhlIFBIWS4gVGhpcyBpcyByZXF1aXJlZCBieSBzb21lXG4mIzQzOyAgICAgIFNvQyBpbnRlZ3JhdGlvbnMsIGluY2x1ZGluZyB0aGUgQWxsd2lubmVyIEg2IEFDMjAwIGNvbm5lY3Rpb24uXG4mIzQzO1xuJiM0MztwYXR0ZXJuUHJvcGVydGllczpcbiYjNDM7ICBeZXRoZXJuZXQtcGh5QFthLWYwLTldJiM0MzskOlxuJiM0MzsgICAgJHJlZjogZXRoZXJuZXQtcGh5LnlhbWwjXG4mIzQzOyAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgIGNvbnN0OiBldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcbiYjNDM7ICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAtIGNvbXBhdGlibGVcbiYjNDM7ICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gdmNjLXN1cHBseVxuJiM0MztcbiYjNDM7ZGVwZW5kZW50UmVxdWlyZWQ6XG4mIzQzOyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdXG4mIzQzO1xuJiM0MzthbGxPZjpcbiYjNDM7ICAtICRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjbG9ja3M6IGZhbHNlXG4mIzQzOyAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZVxuJiM0MzsgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAtIGNsb2Nrc1xuJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHNcbiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXNcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAtIGNsb2Nrc1xuJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHNcbiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXNcbiYjNDM7ICAgICAgICAtIHgtcG93ZXJzLGFjMjAwXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgZW51bTpcbiYjNDM7ICAgICAgICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbiYjNDM7ICAgICAgICAgICAgLSB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcbiYjNDM7ICAgIHRoZW46XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgcmVnOlxuJiM0MzsgICAgICAgICAgbWF4aW11bTogN1xuJiM0MzsgICAgICBwYXR0ZXJuUHJvcGVydGllczpcbiYjNDM7ICAgICAgICBeZXRoZXJuZXQtcGh5QFthLWYwLTldJiM0MzskOlxuJiM0MzsgICAgICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICAgICAgcmVnOlxuJiM0MzsgICAgICAgICAgICAgIG1heGltdW06IDdcbiYjNDM7XG4mIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgbWRpbyB7XG4mIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZwd20gNVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgdmNjLXN1cHBseSA9IFx1MDAzY1x1MDAyNnJlZ18zdjNcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXHUwMDNjXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXCYjMzQ7Y29uZmlndXJhdGlvblwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgeC1wb3dlcnMsYWMyMDAgPSBcdTAwM2NcdTAwMjZhYzIwMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuJiM0MztcbiYjNDM7Li4uXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuaW5kZXggYjRlZjkyN2ZkNGE2Ny4uZDM4MzU1OTdlMzc5NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuQEAgLTQ4NCw2ICYjNDM7NDg0LDE3IEBAIGNvbmZpZyBWSVRFU1NFX1BIWVxuIFx0aGVscFxuIFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIHZzYzgyNDRcbiBcbiYjNDM7Y29uZmlnIFhQT1dFUlNfQUNYMDBfUEhZXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7WC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBDT01NT05fQ0xLIFx1MDAyNlx1MDAyNiBOVk1FTSBcdTAwMjZcdTAwMjYgT0ZfTURJTyBcdTAwMjZcdTAwMjYgUkVHVUxBVE9SXG4mIzQzO1x0ZGVwZW5kcyBvbiBJMkMgfHwgIUkyQ1xuJiM0MztcdHNlbGVjdCBQSFlfUEFDS0FHRVxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIEVuYWJsZSB0aGUgRmFzdCBFdGhlcm5ldCBQSFkgZHJpdmVyIHNoYXJlZCBieSB0aGUgWC1Qb3dlcnMgQUMyMDBcbiYjNDM7XHQgIGFuZCBBQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyIGNvbmZpZ3VyZXMgdGhlaXIgY29tbW9uIE1ESU8gUEhZXG4mIzQzO1x0ICByZWdpc3RlcnMgYW5kIHRoZSBwYWNrYWdlLXNwZWNpZmljIEFDMjAwIEkyQyBvciBBQzMwMCBNRElPIGNvbnRyb2xcbiYjNDM7XHQgIHJlZ2lzdGVycy5cbiYjNDM7XG4gY29uZmlnIFhJTElOWF9HTUlJMlJHTUlJXG4gXHR0cmlzdGF0ZSBcJiMzNDtYaWxpbnggR01JSTJSR01JSSBjb252ZXJ0ZXIgZHJpdmVyXCYjMzQ7XG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXG5pbmRleCAyNWM0YTNjMjQyOWY3Li40OTU3NWZhMTg1MjIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbkBAIC0xMDEsNCAmIzQzOzEwMSw1IEBAIG9iai0kKENPTkZJR19TTVNDX1BIWSlcdFx0JiM0Mzs9IHNtc2Mub1xuIG9iai0kKENPTkZJR19TVEUxMFhQKVx0XHQmIzQzOz0gc3RlMTBYcC5vXG4gb2JqLSQoQ09ORklHX1RFUkFORVRJQ1NfUEhZKVx0JiM0Mzs9IHRlcmFuZXRpY3Mub1xuIG9iai0kKENPTkZJR19WSVRFU1NFX1BIWSlcdCYjNDM7PSB2aXRlc3NlLm9cbiYjNDM7b2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKVx0JiM0Mzs9IHhwb3dlcnMvXG4gb2JqLSQoQ09ORklHX1hJTElOWF9HTUlJMlJHTUlJKSAmIzQzOz0geGlsaW54X2dtaWkycmdtaWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZTk3N2E3OTU4MzI1XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsMyBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO3hwb3dlcnMtYWN4MDAteSA6PSBhY3gwMC5vIGFjMjAwLm8gYWMzMDAub1xuJiM0MztvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpICYjNDM7PSB4cG93ZXJzLWFjeDAwLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFmZGQyYTNkZmJlNDFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmNcbkBAIC0wLDAgJiM0MzsxLDMxNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIFgtUG93ZXJzIEFDMjAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyIEFybSBMdGQuIChBbmRyZSBQcnp5d2FyYSBcdTAwM2NhbmRyZS5wcnp5d2FyYUBhcm0uY29tXHUwMDNlKVxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2FjeDAwLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVFx0M1xuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXHQyNDAwMDAwMFxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXHQyNzAwMDAwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFR1x0XHRcdDB4MDAxNFxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFXHRcdFx0QklUKDEpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHXHRcdFx0MHgwMDE2XG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFXHRcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsvKiBBQzIwMC1pbnRlcm5hbCBjb3B5IG9mIHRoZSBFdGhlcm5ldCBQSFkgY2FsaWJyYXRpb24gZUZ1c2UuICovXG4mIzQzOyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUdcdFx0XHQweDgwMDRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DVExfUkVHXHRcdFx0MHg2MDAwXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLXHRcdFx0R0VOTUFTSyg4LCA0KVxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfUk1JSV9TRUxcdFx0XHRCSVQoMTEpXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0tcdFx0R0VOTUFTSygxNSwgMTIpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwge1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcbiYjNDM7XHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4mIzQzO1x0c3RydWN0IHJlZ3VsYXRvciAqdmNjO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiYjNDM7XHR1MTYgZXBoeV9jdGw7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBoeV9hZGRyO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4mIzQzO1x0Ym9vbCBzdXBwbHlfZW5hYmxlZDtcbiYjNDM7XHRib29sIHBvd2VyZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdTE2IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VlcGh5X2N0bCB8XG4mIzQzO1x0XHQocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuJiM0MztcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XG4mIzQzO1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSywgcHJpdi1cdTAwM2VwaHlfYWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LFxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCByZWcsIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cmVnLCBFUlJfUFRSKHJldCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuJiM0MztcdFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbiYjNDM7XHRcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU0hVVERPV04pO1xuJiM0MztcdFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsIDApO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHRcdGVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRyZXQgPSBlcnI7XG4mIzQzO1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vwb3dlcmVkID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuJiM0MztcdFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2V2Y2MpO1xuJiM0MztcdFx0aWYgKCFlcnIpXG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcbiYjNDM7XHRcdGVsc2UgaWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2FjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4mIzQzO1x0XHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbiYjNDM7XHRcdFx0XHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMLFxuJiM0MztcdFx0XHRcdFx0IGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4mIzQzO1x0XHRcdFx0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1x0dTE2IGVwaHlfY3RsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlfYWRkciBcdTAwM2UgRklFTERfTUFYKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSykpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2VwaHlfYWRkciA9PSBwaHlfYWRkcilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4mIzQzO1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1x0cHJpdi1cdTAwM2VwaHlfYWRkciA9IHBoeV9hZGRyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbiYjNDM7XHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2V2Y2MpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXBoeV9jdGwgPSBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gQUMyMDBcbiYjNDM7XHQgKiBzcGVjaWZpZXMgbm8gYWRkaXRpb25hbCBkZWxheSBiZXR3ZWVuIHRoZXNlIGNvbnRyb2xzLiBUaGUgY29tcGFuaW9uXG4mIzQzO1x0ICogTUZEIHByb3ZpZGVyIGhhcyBjb21wbGV0ZWQgaXRzIGlucHV0LWNsb2NrIHN0YXJ0dXAgZGVsYXkgYmVmb3JlXG4mIzQzO1x0ICogcHVibGlzaGluZyB0aGUgcmVnbWFwLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxuJiM0MztcdFx0XHRcdCAgIGVwaHlfY3RsIHwgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLFxuJiM0MztcdFx0XHRcdCAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuJiM0MztcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRywgZXBoeV9jdGwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2Rpc2FibGU6XG4mIzQzO1x0LyogQXR0ZW1wdCBldmVyeSBzdGVwIG9mIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSBhZnRlciBhIHBhcnRpYWwgc3RhcnQuICovXG4mIzQzO1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbiYjNDM7XHRhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbiYjNDM7YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdCAgICAgIGJvb2wgaGFzX2NhbGlicmF0aW9uLCB1OCBjYWxpYnJhdGlvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaW50ZXJuYWxfY2FsaWJyYXRpb247XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICphYzIwMF9ub2RlO1xuJiM0MztcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XG4mIzQzO1x0dTggYnBzX2VmZnVzZV9jb2RlO1xuJiM0MztcdHN0cnVjdCBjbGsgKmNsaztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0cHJpdi1cdTAwM2VkZXYgPSBkZXY7XG4mIzQzO1x0cHJpdi1cdTAwM2V2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsIFwmIzM0O3ZjY1wmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXZjYykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXG5cJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0YWMyMDBfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGFja2FnZV9ub2RlLCBcJiMzNDt4LXBvd2VycyxhYzIwMFwmIzM0OywgMCk7XG4mIzQzO1x0aWYgKCFhYzIwMF9ub2RlKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O21pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXFxuXCYjMzQ7KSk7XG4mIzQzO1x0Y2xpZW50ID0gb2ZfZmluZF9pMmNfZGV2aWNlX2J5X25vZGUoYWMyMDBfbm9kZSk7XG4mIzQzO1x0b2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7XG4mIzQzO1x0aWYgKCFjbGllbnQpIHtcbiYjNDM7XHRcdHJldCA9IElTX0VOQUJMRUQoQ09ORklHX0kyQykgPyAtRVBST0JFX0RFRkVSIDogLUVOT0RFVjtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O0FDMjAwIGRldmljZSBpcyBub3QgcmVnaXN0ZXJlZFxcblwmIzM0OykpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcdTAwMjZjbGllbnQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgICAgIERMX0ZMQUdfQVVUT1JFTU9WRV9DT05TVU1FUikpIHtcbiYjNDM7XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gbGluayBBQzIwMCBkZXZpY2VcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X2NsaWVudDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRldmljZV9sb2NrKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuJiM0MztcdGlmIChkZXZpY2VfaXNfYm91bmQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldikpXG4mIzQzO1x0XHRwcml2LVx1MDAzZXJlZ21hcCA9IGRldl9nZXRfcmVnbWFwKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIE5VTEwpO1xuJiM0MztcdGRldmljZV91bmxvY2soXHUwMDI2Y2xpZW50LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZXJlZ21hcCkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O0FDMjAwIGRyaXZlciBpcyBub3QgcmVhZHlcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X2NsaWVudDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghaGFzX2NhbGlicmF0aW9uKSB7XG4mIzQzO1x0XHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsXG4mIzQzO1x0XHRcdFx0ICBcdTAwMjZpbnRlcm5hbF9jYWxpYnJhdGlvbik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9lcnJvcjtcbiYjNDM7XHRcdGNhbGlicmF0aW9uID0gaW50ZXJuYWxfY2FsaWJyYXRpb247XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovXG4mIzQzO1x0YnBzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICYjNDM7IEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuJiM0MztcdFx0XHQgICBGSUVMRF9NQVgoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0spO1xuJiM0MztcdHByaXYtXHUwMDNlZXBoeV9jdGwgPVxuJiM0MztcdFx0RklFTERfUFJFUChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSywgYnBzX2VmZnVzZV9jb2RlKTtcbiYjNDM7XHQvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXG4mIzQzO1xuJiM0MztcdGNsayA9IGNsa19nZXQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihjbGspKSB7XG4mIzQzO1x0XHRyZXQgPSBQVFJfRVJSKGNsayk7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnJvcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBib3VuZCBBQzIwMCBwcm92aWRlciBlbmFibGVzIGFuZCBleGNsdXNpdmVseSBwaW5zIHRoaXMgcmF0ZS4gKi9cbiYjNDM7XHRjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspO1xuJiM0MztcdGNsa19wdXQoY2xrKTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjbGtfcmF0ZSkge1xuJiM0MztcdGNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XG4mIzQzO1x0XHRwcml2LVx1MDAzZWVwaHlfY3RsIHw9IEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDt1bnN1cHBvcnRlZCBBQzIwMCBjbG9jayByYXRlICVsdSBIelxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgY2xrX3JhdGUpO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X2NsaWVudDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29uO1xuJiM0MztcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vZmYgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmY7XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xuJiM0MztcdC8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi9cbiYjNDM7XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4mIzQzO1x0cHV0X2RldmljZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNnByaXYtXHUwMDNlY29udHJvbDtcbiYjNDM7XG4mIzQzO291dF9lcnJvcjpcbiYjNDM7XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcJiMzNDtmYWlsZWQgdG8gaW5pdGlhbGl6ZSBBQzIwMCBjb250cm9sXFxuXCYjMzQ7KTtcbiYjNDM7b3V0X3B1dF9jbGllbnQ6XG4mIzQzO1x0cHV0X2RldmljZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hYTU2MDQzMmExNGM5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXG5AQCAtMCwwICYjNDM7MSwzODcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBYLVBvd2VycyBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uL3BoeWxpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2FjeDAwLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVFx0M1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXHQyNDAwMDAwMFxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaXHQyNTAwMDAwMFxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXHQyNzAwMDAwMFxuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX1JFR1x0XHRcdDB4MDBcbiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLXHRcdEdFTk1BU0soMTEsIDgpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMX01BU0tcdFx0XHRHRU5NQVNLKDcsIDYpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAwKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSlcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaXHRcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDIpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRVx0XHRcdEJJVCg1KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEVcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgQUMzMDBfQ0xLSU5fR0FUSU5HX0VOQUJMRVx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlRcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE9cdFx0QklUKDMpXG4mIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLXHRcdEdFTk1BU0soMiwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0JJQVMxX1JFR1x0XHRcdDB4MDJcbiYjNDM7I2RlZmluZSBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRVx0XHRCSVQoMTUpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19JT19SRUdcdFx0XHQweDA1XG4mIzQzOyNkZWZpbmUgQUMzMDBfTURJT19EUlZfTUFTS1x0XHRcdEdFTk1BU0soMTUsIDE0KVxuJiM0MzsjZGVmaW5lIEFDMzAwX01JSV9EUlZfTUFTS1x0XHRcdEdFTk1BU0soMTEsIDEwKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0lPX0RSVl9MRVZFTF8yXHRcdFx0MlxuJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEVcdFx0XHRCSVQoNClcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEVcdFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DT05GSUdfUkVHXHRcdFx0MHgwNlxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLXHRcdEdFTk1BU0soMTUsIDEyKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfUk1JSV9TRUxcdFx0XHRCSVQoMTEpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUyBcXFxuJiM0MztcdChBQzMwMF9FRlVTRV9DTEtfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRSB8IFxcXG4mIzQzO1x0IEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHwgXFxcbiYjNDM7XHQgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0lPX1ZBTFVFIFxcXG4mIzQzO1x0KEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcbiYjNDM7XHQgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4mIzQzO1x0IEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUgfCBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEUpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwge1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuJiM0MztcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcbiYjNDM7XHRzdHJ1Y3QgY2xrICpjbGs7XG4mIzQzO1x0dTE2IHN5c19jb250cm9sO1xuJiM0MztcdHUxNiBlcGh5X2NvbmZpZztcbiYjNDM7XHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xuJiM0MztcdGJvb2wgcGFja2FnZV9rbm93bjtcbiYjNDM7XHRib29sIGludGVybmFsX2RsZG87XG4mIzQzO1x0Ym9vbCBzdXBwbHlfZW5hYmxlZDtcbiYjNDM7XHRib29sIHBvd2VyZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50XG4mIzQzO2FjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VwaHlkZXYtXHUwMDNlbWRpby5hZGRyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVx1MDAzZXBoeWRldixcbiYjNDM7XHRcdFx0XHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xuJiM0MztcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcbiYjNDM7XHRcdFx0XHR1MTYgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSwgdmFsKTtcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9tb2RpZnkoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxuJiM0MztcdFx0XHRcdCB1MTYgbWFzaywgdTE2IHNldClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuJiM0MztcdFx0dTE2IHZhbCA9IChyZXQgXHUwMDI2IH5tYXNrKSB8IChzZXQgXHUwMDI2IG1hc2spO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHZhbCA9PSByZXQgPyAwIDpcbiYjNDM7XHRcdFx0X19waHlfcGFja2FnZV93cml0ZShwcml2LVx1MDAzZXBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsXG4mIzQzO1x0XHRcdFx0XHQgICAgcmVnbnVtLCB2YWwpO1xuJiM0MztcdH1cbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlZXBoeV9jb25maWcgfFxuJiM0MztcdFx0KHByaXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbiYjNDM7XHRcdCBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIGNoaXAgcmVzZXQgcmVzdG9yZXMgRExET0VOIHRvIG9uZS4gVW50aWwgUEtHX1NUQVRVUyBoYXMgaWRlbnRpZmllZFxuJiM0MztcdCAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGVcbiYjNDM7XHQgKiBib290bG9hZGVyIGJ5IGFzc2VydGluZyBvbmx5IHRoZSBFUEhZIHJlc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiAhcHJpdi1cdTAwM2VwYWNrYWdlX2tub3duIHx8ICFwcml2LVx1MDAzZWludGVybmFsX2RsZG8gP1xuJiM0MztcdFx0QUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCA6IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4mIzQzO1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4mIzQzO1x0XHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuJiM0MztcdFx0XHRcdFx0ICAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4mIzQzO1x0XHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLCAwKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRyZXQgPSBlcnI7XG4mIzQzO1x0XHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcbiYjNDM7XHRcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVx1MDAzZWNsayk7XG4mIzQzO1x0XHRwcml2LVx1MDAzZXBvd2VyZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4mIzQzO1x0XHRlcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVx1MDAzZXZjYyk7XG4mIzQzO1x0XHRpZiAoIWVycilcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IGZhbHNlO1xuJiM0MztcdFx0ZWxzZSBpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7YWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZClcbiYjNDM7XHRcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4mIzQzO1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9STUlJX1NFTCxcbiYjNDM7XHRcdFx0XHRcdCAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuJiM0MztcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuJiM0MztcdHU4IHBhY2thZ2Vfc3RhdHVzO1xuJiM0MztcdHUxNiByZXNldF92YWx1ZTtcbiYjNDM7XHRpbnQgc3lzX2NvbnRyb2w7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeV9hZGRyICE9IGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuJiM0MztcdFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVx1MDAzZXZjYyk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0LyogV2FpdCBmb3IgdGhlIHBvd2VyLW9uIHJlc2V0IGludGVydmFsIHNwZWNpZmllZCBieSB0aGUgbWFudWFsLiAqL1xuJiM0MztcdFx0ZnNsZWVwKDEwMDAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LVx1MDAzZWNsayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKiBLZWVwIHRoZSBleHRlcm5hbC1zdXBwbHkgY29uZmlndXJhdGlvbiBhY3Jvc3MgY2hpcCByZXNldHMuICovXG4mIzQzO1x0cmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTtcbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsIHJlc2V0X3ZhbHVlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgbWFudWFsIHJlcXVpcmVzIGJvdGggcmVzZXRzIHRvIGJlIHJlbGVhc2VkIGJlZm9yZSB0aGUgY2xvY2tzLiAqL1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcbiYjNDM7XHRcdFx0XHQgIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdC8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi9cbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgcHJpdi1cdTAwM2VzeXNfY29udHJvbCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0c3lzX2NvbnRyb2wgPSBhYzMwMF9lcGh5X2N0bF9yZWFkKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyk7XG4mIzQzO1x0aWYgKHN5c19jb250cm9sIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRyZXQgPSBzeXNfY29udHJvbDtcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBhY2thZ2Vfc3RhdHVzID0gRklFTERfR0VUKEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0ssIHN5c19jb250cm9sKTtcbiYjNDM7XHRpZiAoKH5wYWNrYWdlX3N0YXR1cyBcdTAwMjYgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSAhPVxuJiM0MztcdCAgICBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWludGVybmFsX2RsZG8gPSBwYWNrYWdlX3N0YXR1cyBcdTAwMjYgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExETztcbiYjNDM7XHRwcml2LVx1MDAzZXBhY2thZ2Vfa25vd24gPSB0cnVlO1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9TWVNfQklBUzFfUkVHLFxuJiM0MztcdFx0XHRcdCAgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSxcbiYjNDM7XHRcdFx0XHQgICBwcml2LVx1MDAzZWludGVybmFsX2RsZG8gP1xuJiM0MztcdFx0XHRcdCAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFIDogMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCB0aGUgZG9jdW1lbnRlZCBkZWZhdWx0IGRyaXZlIGxldmVsIGFuZCBsZWF2ZSB0aGUgSVJRIGRpc2FibGVkLiAqL1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsXG4mIzQzO1x0XHRcdFx0ICAgQUMzMDBfU1lTX0lPX1ZBTFVFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRmc2xlZXAoMTAwMDApO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4mIzQzO1x0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbiYjNDM7XHRcdFx0XHQgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdGZzbGVlcCgxMDAwMCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3Bvd2VyX29mZjpcbiYjNDM7XHRhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdGNsa19wdXQoZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuJiM0MzthYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBjbGtfcmF0ZTtcbiYjNDM7XHR1OCBiZ3NfZWZmdXNlX2NvZGU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5hZGRyIFx1MDAzZSBGSUVMRF9NQVgoQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxcblwmIzM0OykpO1xuJiM0MztcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXCYjMzQ7dmNjXCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNldmNjKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNldmNjKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBwYWNrYWdlIHN1cHBseVxcblwmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWNsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlY2xrKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNlY2xrKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBpbnB1dCBjbG9ja1xcblwmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X2Nsa19wdXQsIHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgcHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxuXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRzd2l0Y2ggKGNsa19yYXRlKSB7XG4mIzQzO1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjpcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDt1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgY2xrX3JhdGUpKTtcbiYjNDM7XHR9XG4mIzQzO1x0cHJpdi1cdTAwM2VzeXNfY29udHJvbCB8PSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUztcbiYjNDM7XG4mIzQzO1x0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xuJiM0MztcdGJnc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiAmIzQzOyBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUKSBcdTAwMjZcbiYjNDM7XHRcdFx0ICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTtcbiYjNDM7XHRwcml2LVx1MDAzZWVwaHlfY29uZmlnID1cbiYjNDM7XHRcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0ssIGJnc19lZmZ1c2VfY29kZSk7XG4mIzQzO1x0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb24gPSBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vbjtcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuJiM0MztcdHByaXYtXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcbiYjNDM7XHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2cHJpdi1cdTAwM2Vjb250cm9sO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lZDIzYTNjYmZlMmExXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXG5AQCAtMCwwICYjNDM7MSw2MjEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAxOSBKZXJuZWogU2tyYWJlYyBcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbnZtZW0tY29uc3VtZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vcGh5bGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YWN4MDAuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0lEXHRcdFx0XHQweDAwNDQxNDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0tcdEdFTk1BU0soMywgMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwXHRcdEJJVCg4KVxuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPV1x0QklUKDkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFR1x0XHRcdDB4MWZcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLXHRcdFx0R0VOTUFTSygxMiwgOClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzBcdFx0XHRcdDBcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzFcdFx0XHRcdDFcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzJcdFx0XHRcdDJcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzZcdFx0XHRcdDZcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzhcdFx0XHRcdDhcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUdcdFx0MHgxM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUXHRCSVQoMTIpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfTUFTS1x0XHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUT1x0XHQyXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFR1x0XHQweDEyXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFXHQweDQ4MjRcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHXHRcdDB4MTNcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRVx0XHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUdcdDB4MTdcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFXHRCSVQoMylcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFR1x0XHQweDE4XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0tcdFx0R0VOTUFTSygxNCwgMTIpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFRcdDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHXHRcdDB4MTBcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFXHQweDU1MjNcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUdcdFx0MHgxM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFXHRcdDB4ZjAwMFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUdcdDB4MTRcbiYjNDM7I2RlZmluZSBBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGZcbiYjNDM7I2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGJcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUUgMHg3ODA5XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHXHRcdFx0MHgxNVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTS1x0XHRHRU5NQVNLKDE1LCA4KVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLXHRcdEdFTk1BU0soNywgMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRShfMTAwbSwgXzEwbSkgXFxcbiYjNDM7XHQoRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0ssIChfMTAwbSkpIHwgXFxcbiYjNDM7XHQgRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xME1fTUFTSywgKF8xMG0pKSlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFIFxcXG4mIzQzO1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgxNSwgMHgzMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFIFxcXG4mIzQzO1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgzNSwgMHgzMylcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHXHRcdDB4MThcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRVx0XHQweDAwYmNcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFR1x0XHQweDFkXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyBCSVQoMTEpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUU1x0MHgwMDQ0XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFIFxcXG4mIzQzO1x0KEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgfCBcXFxuJiM0MztcdCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQW5vdGhlciBpbnRlZ3JhdGlvbiBvZiB0aGlzIGV4YWN0LUlEIFBIWSBkb2N1bWVudHMgaXRzIGRpZ2l0YWwgdmVuZG9yXG4mIzQzOyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMFxuJiM0MzsgKiBhbmFsb2ctcGFnZSBmaWVsZCBlbmNvZGluZ3MgcmVtYWluIHVucHVibGlzaGVkLCBzbyBrZWVwIHRob3NlIGFzIG9wYXF1ZVxuJiM0MzsgKiB2ZW5kb3IgaW5pdGlhbGl6YXRpb24gdmFsdWVzIGluc3RlYWQgb2YgaW52ZW50aW5nIGJpdCBkZWZpbml0aW9ucy5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2IHtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2w7XG4mIzQzO1x0LyogU2VyaWFsaXplcyBwYWNrYWdlIHN0YXRlIGFuZCBtdWx0aS1yZWdpc3RlciBwb3dlciBzZXF1ZW5jZXMuICovXG4mIzQzO1x0c3RydWN0IG11dGV4IHN0YXRlX2xvY2s7XG4mIzQzO1x0Ym9vbCBpc19hYzMwMDtcbiYjNDM7XHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xuJiM0MztcdGJvb2wgeG1paV9yeF9jbG9ja19pbnZlcnRlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHLFxuJiM0MztcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2Vwb3dlcl9vbihwcml2LVx1MDAzZWNvbnRyb2wsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHByaXYtXHUwMDNlcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29mZihwcml2LVx1MDAzZWNvbnRyb2wpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2VzZXRfaW50ZXJmYWNlKHByaXYtXHUwMDNlY29udHJvbCxcbiYjNDM7XHRcdFx0XHRcdCAgICBwaHlkZXYtXHUwMDNlaW50ZXJmYWNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRwaHlkZXZfd2Fybihwcml2LVx1MDAzZXBoeWRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgRVJSX1BUUihyZXQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2Uodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1x0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgdTE2ICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xuJiM0MztcdHNpemVfdCBpO1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1x0dTggKmJ1ZjtcbiYjNDM7XHR1MTYgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0Y2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpO1xuJiM0MztcdGlmIChJU19FUlIoY2VsbCkpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihjZWxsKTtcbiYjNDM7XG4mIzQzO1x0YnVmID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFx1MDAyNmxlbik7XG4mIzQzO1x0bnZtZW1fY2VsbF9wdXQoY2VsbCk7XG4mIzQzO1x0aWYgKElTX0VSUihidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoYnVmKTtcbiYjNDM7XHRpZiAoIWxlbiB8fCBsZW4gXHUwMDNlIHNpemVvZigqdmFsdWUpKSB7XG4mIzQzO1x0XHRrZnJlZShidWYpO1xuJiM0MztcdFx0cmV0dXJuIGxlbiA/IC1FUkFOR0UgOiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHZhbCB8PSAodTE2KWJ1ZltpXSBcdTAwM2NcdTAwM2MgKDggKiBpKTtcbiYjNDM7XHRrZnJlZShidWYpO1xuJiM0MztcdCp2YWx1ZSA9IHZhbDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9pbml0X3BhY2thZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xuJiM0MztcdGJvb2wgc2VsZWN0YWJsZTtcbiYjNDM7XHRib29sIGZpeGVkX2FjMzAwO1xuJiM0MztcdGJvb2wgaGFzX2NvbmZpZ3VyYXRpb247XG4mIzQzO1x0dTggY2FsaWJyYXRpb247XG4mIzQzO1x0dTMyIGJhc2VfYWRkcjtcbiYjNDM7XHR1MTYgY29uZmlndXJhdGlvbiA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChkZXYtXHUwMDNlb2Zfbm9kZSk7XG4mIzQzO1x0aWYgKCFwYWNrYWdlX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoIW9mX25vZGVfbmFtZV9lcShwYWNrYWdlX25vZGUsIFwmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlXCYjMzQ7KSkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O1BIWSBpcyBub3QgaW4gYW4gRXRoZXJuZXQgUEhZIHBhY2thZ2VcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYWNrYWdlX25vZGUsIFwmIzM0O3JlZ1wmIzM0OywgXHUwMDI2YmFzZV9hZGRyKTtcbiYjNDM7XHRpZiAocmV0IHx8IGJhc2VfYWRkciAhPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVwmIzM0Oyk7XG4mIzQzO1x0Zml4ZWRfYWMzMDAgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBcJiMzNDt4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcJiMzNDspO1xuJiM0MztcdGlmICghc2VsZWN0YWJsZSBcdTAwMjZcdTAwMjYgIWZpeGVkX2FjMzAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXCYjMzQ7KSkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3Vuc3VwcG9ydGVkIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1xuJiM0MztcdGhhc19jb25maWd1cmF0aW9uID1cbiYjNDM7XHRcdG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhwYWNrYWdlX25vZGUsIFwmIzM0O252bWVtLWNlbGwtbmFtZXNcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgXCYjMzQ7Y29uZmlndXJhdGlvblwmIzM0OykgXHUwMDNlPSAwO1xuJiM0MztcdGlmIChoYXNfY29uZmlndXJhdGlvbikge1xuJiM0MztcdFx0cmV0ID0gYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihwYWNrYWdlX25vZGUsIFwmIzM0O2NvbmZpZ3VyYXRpb25cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFx1MDAyNmNvbmZpZ3VyYXRpb24pO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSBpZiAoc2VsZWN0YWJsZSB8fCBmaXhlZF9hYzMwMCkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3BhY2thZ2UgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzZWxlY3RhYmxlKSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID1cbiYjNDM7XHRcdFx0Y29uZmlndXJhdGlvbiBcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vpc19hYzMwMCA9IGZpeGVkX2FjMzAwO1xuJiM0MztcdFx0aWYgKGhhc19jb25maWd1cmF0aW9uIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDApICE9XG4mIzQzO1x0XHQgICAgcHJpdi1cdTAwM2Vpc19hYzMwMCkge1xuJiM0MztcdFx0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICBcJiMzNDtjb25maWd1cmF0aW9uIGRvZXMgbm90IG1hdGNoIHBhY2thZ2VcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNhbGlicmF0aW9uID0gRklFTERfR0VUKEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0ssXG4mIzQzO1x0XHRcdFx0Y29uZmlndXJhdGlvbik7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPVxuJiM0MztcdFx0cHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVyk7XG4mIzQzO1x0cHJpdi1cdTAwM2V4bWlpX3J4X2Nsb2NrX2ludmVydGVkID1cbiYjNDM7XHRcdG9mX3Byb3BlcnR5X3JlYWRfYm9vbChwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgXCYjMzQ7eC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwKVxuJiM0MztcdFx0cHJpdi1cdTAwM2Vjb250cm9sID1cbiYjNDM7XHRcdFx0YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHByaXYtXHUwMDNlY29udHJvbCA9XG4mIzQzO1x0XHRcdGFjMjAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGhhc19jb25maWd1cmF0aW9uLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuJiM0MztcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyhwcml2LVx1MDAzZWNvbnRyb2wpO1xuJiM0MztcbiYjNDM7b3V0X3B1dF9ub2RlOlxuJiM0MztcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEFDWDAwX1BBR0VfMSxcbiYjNDM7XHRcdFx0ICAgICAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgICAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZW9mX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbiYjNDM7XHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9pbml0X3BhY2thZ2UocGh5ZGV2LCBwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuJiM0MztcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjeDAwX2VwaHlfY29udHJvbF9yZWxlYXNlLCBwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gcG93ZXIgb24gY29udHJvbCBibG9ja1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdC8qIEFDeDAwIGNhbiBhY2tub3dsZWRnZSByZXNldCBpbiBwb3dlci1kb3duIHdpdGhvdXQgcmVzdGFydGluZy4gKi9cbiYjNDM7XHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X3NvZnRfcmVzZXQocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztvdXRfcG93ZXJfb2ZmOlxuJiM0MztcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTtcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2FjeDAwX2VwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHR1MTYgYWZlX2VxX3J4X2RldGVjdCA9IHByaXYtXHUwMDNlaXNfYWMzMDAgP1xuJiM0MztcdFx0QUMzMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRSA6XG4mIzQzO1x0XHRBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFO1xuJiM0MztcdHUxNiB0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUU7XG4mIzQzO1x0dTE2IGdsb2JhbF9jb25maWc7XG4mIzQzO1x0aW50IG9sZHBhZ2U7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRnbG9iYWxfY29uZmlnID0gRklFTERfUFJFUChBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLFxuJiM0MztcdFx0XHRcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQpXG4mIzQzO1x0XHRnbG9iYWxfY29uZmlnIHw9IEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8wLFxuJiM0MztcdFx0XHQgICAgICAgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUcsXG4mIzQzO1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XG4mIzQzO1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLCBnbG9iYWxfY29uZmlnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbiYjNDM7XHRcdGFmZV9lcV9yeF9kZXRlY3QgPVxuJiM0MztcdFx0XHRBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUU7XG4mIzQzO1x0XHR0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvbGRwYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8xKTtcbiYjNDM7XHRpZiAob2xkcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBvbGRwYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEUsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXG4mIzQzO1x0XHRcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgIGFmZV9lcV9yeF9kZXRlY3QpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbiYjNDM7XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV84KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUpO1xuJiM0MztcbiYjNDM7b3V0X3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cbiYjNDM7XHRyZXQgPSBnZW5waHlfYzQ1X2FuX2NvbmZpZ19lZWVfYW5lZyhwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcdHJldCA9IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4ocHJpdik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19hY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0LyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi9cbiYjNDM7XHRyZXQgPSBfX2FjeDAwX2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO291dF9wb3dlcl9vZmY6XG4mIzQzO1x0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcdHJldCA9IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJlc3VtZV9yZXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIHN1c3BlbmQgY2FsbGJhY2sgaXMgaW52b2tlZCB3aXRob3V0IHRoZSBwaHlsaWIgbG9jayBoZWxkLiAqL1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cGh5ZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHJlc3VtZV9yZXQgPSBfX2FjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJlc3VtZV9yZXQpXG4mIzQzO1x0XHRcdHBoeWRldl93YXJuKHBoeWRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlY292ZXIgZnJvbSBzdXNwZW5kIGVycm9yOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIEVSUl9QVFIocmVzdW1lX3JldCkpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO291dF91bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHBoeWRldi1cdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xuJiM0MztcdGJvb2wgbWF0Y2g7XG4mIzQzO1xuJiM0MztcdGlmICghZ2VucGh5X21hdGNoX3BoeV9kZXZpY2UocGh5ZGV2LCBwaHlkcnYpIHx8ICFub2RlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFJLNjMwIHJlcG9ydHMgdGhlIHNhbWUgUEhZIElELCBzbyBhbHNvIG1hdGNoIHRoZSBwYWNrYWdlIGlkZW50aXR5LiAqL1xuJiM0MztcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4mIzQzO1x0aWYgKCFwYWNrYWdlX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRtYXRjaCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O3gtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwmIzM0OykgfHxcbiYjNDM7XHRcdG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwmIzM0OykgfHxcbiYjNDM7XHRcdG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVwmIzM0Oyk7XG4mIzQzO1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1hdGNoO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWN4MDBfZXBoeV9kcml2ZXJbXSA9IHtcbiYjNDM7XHR7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCksXG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O1gtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFlcJiMzNDssXG4mIzQzO1x0XHQubWF0Y2hfcGh5X2RldmljZSA9IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZSxcbiYjNDM7XHRcdC5wcm9iZSA9IGFjeDAwX2VwaHlfcHJvYmUsXG4mIzQzO1x0XHQucmVhZF9wYWdlID0gYWN4MDBfZXBoeV9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZSA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZSxcbiYjNDM7XHRcdC5zb2Z0X3Jlc2V0ID0gYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0LFxuJiM0MztcdFx0LmNvbmZpZ19pbml0ID0gYWN4MDBfZXBoeV9jb25maWdfaW5pdCxcbiYjNDM7XHRcdC5kaXNhYmxlX2F1dG9ub21vdXNfZWVlID0gYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlLFxuJiM0MztcdFx0LnN1c3BlbmQgPSBhY3gwMF9lcGh5X3N1c3BlbmQsXG4mIzQzO1x0XHQucmVzdW1lID0gYWN4MDBfZXBoeV9yZXN1bWUsXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7bW9kdWxlX3BoeV9kcml2ZXIoYWN4MDBfZXBoeV9kcml2ZXIpO1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhY3gwMF9lcGh5X3RibFtdID0ge1xuJiM0MztcdHsgUEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpIH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYWN4MDBfZXBoeV90YmwpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1gtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXJcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmggYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2RmNjA4NGM3YTc3MlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxuQEAgLTAsMCAmIzQzOzEsMjggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsjaWZuZGVmIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxuJiM0MzsjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VUXHQxNlxuJiM0MztcbiYjNDM7c3RydWN0IGRldmljZV9ub2RlO1xuJiM0MztcbiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7XG4mIzQzO1x0aW50ICgqcG93ZXJfb24pKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBwaHlfYWRkcik7XG4mIzQzO1x0aW50ICgqcG93ZXJfb2ZmKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKTtcbiYjNDM7XHRpbnQgKCpzZXRfaW50ZXJmYWNlKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4mIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHQgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbiYjNDM7YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pO1xuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDc6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gc3RyaWN0bHkgcmVxdWlyZXMgYSBzcGVjaWZpYyBEZXZpY2UgVHJlZSBjb25maWd1cmF0aW9uIChkZXYtXHUwMDNlb2Zfbm9kZSBtdXN0IGJlIHByZXNlbnQsIHBhcmVudCBtdXN0IGJlICYjMzk7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM5Oywgc3BlY2lmaWMgY29tcGF0aWJsZSBzdHJpbmdzLCByZWd1bGF0b3JzLCBjbG9ja3MsIGFuZCBJMkMgZGV2aWNlcykuIFNpbmNlIHN5emthbGxlciBydW5zIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSB3aXRob3V0IHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGRldmljZSB0cmVlIHNldHVwLCB0aGUgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNhZjNmMzlkMDU5ZDY5YzJhZWM4ZmExNGU3ZjlkMTkzYWZjN2VhYmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwNzoxMToyNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmVlOTBjNGZmZWNjZWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sCkBAIC0wLDAgJiM0MzsxLDE2NSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKQomIzQzOyVZQU1MIDEuMgomIzQzOy0tLQomIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIwomIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sIwomIzQzOwomIzQzO3RpdGxlOiBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2VzCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIEphbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OwomIzQzOwomIzQzO2Rlc2NyaXB0aW9uOgomIzQzOyAgVGhlIEFDMjAwIGFuZCBBQzMwMCBjb250YWluIGNvbXBhdGlibGUgRmFzdCBFdGhlcm5ldCBQSFkgYmxvY2tzIHdoaWNoIHJlcG9ydAomIzQzOyAgdGhlIHNhbWUgQ2xhdXNlIDIyIFBIWSBJRCBhbmQgdXNlIHRoZSBzYW1lIGxpbmstc2lkZSByZWdpc3RlciBsYXlvdXQuIFRoZQomIzQzOyAgcGFja2FnZSBjb250cm9sIHBhdGhzIGRpZmZlci4gQUMyMDAgcGFja2FnZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQKJiM0MzsgIHRocm91Z2ggdGhlIGNvbXBhbmlvbiBJQyYjMzk7cyBJMkMgcmVnaXN0ZXIgaW50ZXJmYWNlLCB3aGlsZSBBQzMwMCBjb250cm9sCiYjNDM7ICByZWdpc3RlcnMgb2NjdXB5IGEgc2Vjb25kIENsYXVzZSAyMiBhZGRyZXNzIGZpeGVkIGF0IDE2IHBsdXMgdGhlIGxpbmsgUEhZCiYjNDM7ICBhZGRyZXNzLgomIzQzOwomIzQzOyAgU3lzdGVtcyB3aXRoIGEga25vd24gcGFja2FnZSB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgQUMyMDAgb3IgQUMzMDAgY29tcGF0aWJsZS4KJiM0MzsgIFN5c3RlbXMgd2hpY2ggY2FuIGNvbnRhaW4gZWl0aGVyIHBhY2thZ2UgdXNlIHRoZSBBQ3gwMCBjb21wYXRpYmxlIGFuZCBhCiYjNDM7ICBwYWNrZWQgTlZNRU0gY29uZmlndXJhdGlvbiBmaWVsZCB0byBzZWxlY3QgdGhlIGJhY2tlbmQgYXQgcnVudGltZS4KJiM0MzsKJiM0MzsgIFRoZSBsaW5rIFBIWSBjYW5ub3QgcmVwb3J0IGl0cyBJRCB1bnRpbCB0aGUgcGFja2FnZSBjb250cm9sIHNlcXVlbmNlIGhhcwomIzQzOyAgY29tcGxldGVkLCBzbyBpdHMgY2hpbGQgbm9kZSBzdXBwbGllcyB0aGUgZG9jdW1lbnRlZCBQSFkgSUQuIFRoZSBwYWNrYWdlIGFuZAomIzQzOyAgY2hpbGQgdXNlIHRoZSBzYW1lIGJhc2UgYWRkcmVzcy4gVGhlIEFDMjAwIGRyaXZlciBwcm9ncmFtcyB0aGF0IGFkZHJlc3MgaW50bwomIzQzOyAgdGhlIHBhY2thZ2UsIHdoaWxlIHRoZSBBQzMwMCBkcml2ZXIgZGVyaXZlcyBpdHMgY29udHJvbCBhZGRyZXNzIGZyb20gaXQuCiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGVudW06CiYjNDM7ICAgICAgLSB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZQomIzQzOyAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlCiYjNDM7CiYjNDM7ICByZWc6CiYjNDM7ICAgIG1heGltdW06IDMxCiYjNDM7CiYjNDM7ICBjbG9ja3M6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7ICAgIGRlc2NyaXB0aW9uOiBBQzMwMCBpbnB1dCBjbG9jaywgcnVubmluZyBhdCAyNCwgMjUsIG9yIDI3IE1IegomIzQzOwomIzQzOyAgdmNjLXN1cHBseToKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgMy4zIFYgcGFja2FnZSBzdXBwbHkuIFRoaXMgaXMgY29ubmVjdGVkIHRvIEVQSFlfVkNDIG9uIEFDMjAwIGFuZCBWQ0MxCiYjNDM7ICAgICAgb24gQUMzMDAuCiYjNDM7CiYjNDM7ICBudm1lbS1jZWxsczoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgUGFja2VkIEVQSFkgY29uZmlndXJhdGlvbiBmaWVsZC4gQml0cyAzIHRocm91Z2ggMCBjb250YWluIHRoZSBhbmFsb2cKJiM0MzsgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMAomIzQzOyAgICAgIHdoZW4gc2V0IGFuZCBBQzIwMCB3aGVuIGNsZWFyLCBhbmQgYml0IDkgcmVxdWVzdHMgdGhlIEFDMzAwCiYjNDM7ICAgICAgbG93LWNhbGlicmF0aW9uIHR1bmluZyBzZXF1ZW5jZS4gQSBmaXhlZCBBQzIwMCBwYWNrYWdlIG1heSBwcm92aWRlIG9ubHkKJiM0MzsgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZQomIzQzOyAgICAgIGNvcHkgaW5zdGVhZC4KJiM0MzsKJiM0MzsgIG52bWVtLWNlbGwtbmFtZXM6CiYjNDM7ICAgIGNvbnN0OiBjb25maWd1cmF0aW9uCiYjNDM7CiYjNDM7ICB4LXBvd2VycyxhYzIwMDoKJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvcGhhbmRsZQomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBQaGFuZGxlIHRvIHRoZSBBQzIwMCBjb21wYW5pb24gSUMgZGVzY3JpYmVkIGJ5IHRoZSB4LXBvd2VycyxhYzIwMCBNRkQKJiM0MzsgICAgICBiaW5kaW5nLiBJdHMgSTJDIGludGVyZmFjZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHBhY2thZ2UgY29udHJvbAomIzQzOyAgICAgIHJlZ2lzdGVycyB1c2VkIHRvIHBvd2VyIGFuZCBjb25maWd1cmUgdGhlIEV0aGVybmV0IFBIWS4KJiM0MzsKJiM0MzsgIHgtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQ6CiYjNDM7ICAgIHR5cGU6IGJvb2xlYW4KJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgSW52ZXJ0IHRoZSB4TUlJIHJlY2VpdmUgY2xvY2sgaW5zaWRlIHRoZSBQSFkuIFRoaXMgaXMgcmVxdWlyZWQgYnkgc29tZQomIzQzOyAgICAgIFNvQyBpbnRlZ3JhdGlvbnMsIGluY2x1ZGluZyB0aGUgQWxsd2lubmVyIEg2IEFDMjAwIGNvbm5lY3Rpb24uCiYjNDM7CiYjNDM7cGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICBeZXRoZXJuZXQtcGh5QFthLWYwLTldJiM0MzskOgomIzQzOyAgICAkcmVmOiBldGhlcm5ldC1waHkueWFtbCMKJiM0MzsgICAgcHJvcGVydGllczoKJiM0MzsgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMAomIzQzOyAgICByZXF1aXJlZDoKJiM0MzsgICAgICAtIGNvbXBhdGlibGUKJiM0MzsgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7ICAtIHZjYy1zdXBwbHkKJiM0MzsKJiM0MztkZXBlbmRlbnRSZXF1aXJlZDoKJiM0MzsgIG52bWVtLWNlbGxzOiBbIG52bWVtLWNlbGwtbmFtZXMgXQomIzQzOwomIzQzO2FsbE9mOgomIzQzOyAgLSAkcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sIwomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZQomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjbG9ja3M6IGZhbHNlCiYjNDM7ICAgICAgcmVxdWlyZWQ6CiYjNDM7ICAgICAgICAtIHgtcG93ZXJzLGFjMjAwCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlCiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZQomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSBjbG9ja3MKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHMKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lcwomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZQomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSBjbG9ja3MKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHMKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lcwomIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzIwMAomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgZW51bToKJiM0MzsgICAgICAgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZQomIzQzOyAgICAgICAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlCiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIHJlZzoKJiM0MzsgICAgICAgICAgbWF4aW11bTogNwomIzQzOyAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSYjNDM7JDoKJiM0MzsgICAgICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgICAgICByZWc6CiYjNDM7ICAgICAgICAgICAgICBtYXhpbXVtOiA3CiYjNDM7CiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzO2V4YW1wbGVzOgomIzQzOyAgLSB8CiYjNDM7ICAgIG1kaW8gewomIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZSYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICBjbG9ja3MgPSAmbHQ7JmFtcDtwd20gNSZndDs7CiYjNDM7ICAgICAgICAgICAgdmNjLXN1cHBseSA9ICZsdDsmYW1wO3JlZ18zdjMmZ3Q7OwomIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gJmx0OyZhbXA7ZXBoeV9jb25maWd1cmF0aW9uJmd0OzsKJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gJiMzNDtjb25maWd1cmF0aW9uJiMzNDs7CiYjNDM7ICAgICAgICAgICAgeC1wb3dlcnMsYWMyMDAgPSAmbHQ7JmFtcDthYzIwMCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAgewomIzQzOyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDtldGhlcm5ldC1waHktaWQwMDQ0LjE0MDAmIzM0OzsKJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwomIzQzOwomIzQzOy4uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwppbmRleCBiNGVmOTI3ZmQ0YTY3Li5kMzgzNTU5N2UzNzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwpAQCAtNDg0LDYgJiM0Mzs0ODQsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZCiAJaGVscAogCSAgQ3VycmVudGx5IHN1cHBvcnRzIHRoZSB2c2M4MjQ0CiAKJiM0Mztjb25maWcgWFBPV0VSU19BQ1gwMF9QSFkKJiM0MzsJdHJpc3RhdGUgJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkmIzM0OwomIzQzOwlkZXBlbmRzIG9uIENPTU1PTl9DTEsgJmFtcDsmYW1wOyBOVk1FTSAmYW1wOyZhbXA7IE9GX01ESU8gJmFtcDsmYW1wOyBSRUdVTEFUT1IKJiM0MzsJZGVwZW5kcyBvbiBJMkMgfHwgIUkyQwomIzQzOwlzZWxlY3QgUEhZX1BBQ0tBR0UKJiM0MzsJaGVscAomIzQzOwkgIEVuYWJsZSB0aGUgRmFzdCBFdGhlcm5ldCBQSFkgZHJpdmVyIHNoYXJlZCBieSB0aGUgWC1Qb3dlcnMgQUMyMDAKJiM0MzsJICBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciBjb25maWd1cmVzIHRoZWlyIGNvbW1vbiBNRElPIFBIWQomIzQzOwkgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbAomIzQzOwkgIHJlZ2lzdGVycy4KJiM0MzsKIGNvbmZpZyBYSUxJTlhfR01JSTJSR01JSQogCXRyaXN0YXRlICYjMzQ7WGlsaW54IEdNSUkyUkdNSUkgY29udmVydGVyIGRyaXZlciYjMzQ7CiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCmluZGV4IDI1YzRhM2MyNDI5ZjcuLjQ5NTc1ZmExODUyMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKQEAgLTEwMSw0ICYjNDM7MTAxLDUgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKQkJJiM0Mzs9IHNtc2Mubwogb2JqLSQoQ09ORklHX1NURTEwWFApCQkmIzQzOz0gc3RlMTBYcC5vCiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpCSYjNDM7PSB0ZXJhbmV0aWNzLm8KIG9iai0kKENPTkZJR19WSVRFU1NFX1BIWSkJJiM0Mzs9IHZpdGVzc2UubwomIzQzO29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkJJiM0Mzs9IHhwb3dlcnMvCiBvYmotJChDT05GSUdfWElMSU5YX0dNSUkyUkdNSUkpICYjNDM7PSB4aWxpbnhfZ21paTJyZ21paS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlOTc3YTc5NTgzMjUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSwzIEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzO3hwb3dlcnMtYWN4MDAteSA6PSBhY3gwMC5vIGFjMjAwLm8gYWMzMDAubwomIzQzO29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkgJiM0Mzs9IHhwb3dlcnMtYWN4MDAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYWZkZDJhM2RmYmU0MQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMKQEAgLTAsMCAmIzQzOzEsMzE0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZAomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyIEFybSBMdGQuIChBbmRyZSBQcnp5d2FyYSAmbHQ7YW5kcmUucHJ6eXdhcmFAYXJtLmNvbSZndDspCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaTJjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWdtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2FjeDAwLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVAkzCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWgkyNDAwMDAwMAomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFoJMjcwMDAwMDAKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHCQkJMHgwMDE0CiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUCQlCSVQoMCkKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRQkJCUJJVCgxKQomIzQzOwomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcJCQkweDAwMTYKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRQkJCUJJVCgwKQomIzQzOwomIzQzOy8qIEFDMjAwLWludGVybmFsIGNvcHkgb2YgdGhlIEV0aGVybmV0IFBIWSBjYWxpYnJhdGlvbiBlRnVzZS4gKi8KJiM0MzsjZGVmaW5lIEFDMjAwX0VGVVNFX0VQSFlfUkVHCQkJMHg4MDA0CiYjNDM7CiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NUTF9SRUcJCQkweDYwMDAKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfU0hVVERPV04JCQlCSVQoMCkKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFoJCUJJVCgyKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLCQkJR0VOTUFTSyg4LCA0KQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9STUlJX1NFTAkJCUJJVCgxMSkKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLCQlHRU5NQVNLKDE1LCAxMikKJiM0MzsKJiM0MztzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7CiYjNDM7CXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKJiM0MzsJc3RydWN0IHJlZ3VsYXRvciAqdmNjOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiYjNDM7CXUxNiBlcGh5X2N0bDsKJiM0MzsJdW5zaWduZWQgaW50IHBoeV9hZGRyOwomIzQzOwlwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlOwomIzQzOwlib29sIHN1cHBseV9lbmFibGVkOwomIzQzOwlib29sIHBvd2VyZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7ZXBoeV9jdGwgfAomIzQzOwkJKHByaXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApIHwKJiM0MzsJCUZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LSZndDtwaHlfYWRkcik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LAomIzQzOwkJCQl1bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsdWUpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWdtYXBfd3JpdGUocHJpdi0mZ3Q7cmVnbWFwLCByZWcsIHZhbHVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWRldl9lcnIocHJpdi0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxuJiMzNDssCiYjNDM7CQkJcmVnLCBFUlJfUFRSKHJldCkpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtwb3dlcmVkKSB7CiYjNDM7CQlyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsCiYjNDM7CQkJCQkgICBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfAomIzQzOwkJCQkJICAgQUMyMDBfRVBIWV9TSFVURE9XTik7CiYjNDM7CQllcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CQllcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CiYjNDM7CQlwcml2LSZndDtwb3dlcmVkID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3N1cHBseV9lbmFibGVkKSB7CiYjNDM7CQllcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LSZndDt2Y2MpOwomIzQzOwkJaWYgKCFlcnIpCiYjNDM7CQkJcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQgPSBmYWxzZTsKJiM0MzsJCWVsc2UgaWYgKCFyZXQpCiYjNDM7CQkJcmV0ID0gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7CiYjNDM7CiYjNDM7CXJldHVybiBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7YWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCSAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZSA9PSBpbnRlcmZhY2UpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpCiYjNDM7CQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBBQzIwMF9FUEhZX0NUTF9SRUcsCiYjNDM7CQkJCQkgQUMyMDBfRVBIWV9STUlJX1NFTCwKJiM0MzsJCQkJCSBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgPwomIzQzOwkJCQkJIEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlwcml2LSZndDtpbnRlcmZhY2UgPSBpbnRlcmZhY2U7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwl1MTYgZXBoeV9jdGw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlfYWRkciAmZ3Q7IEZJRUxEX01BWChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0spKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtwb3dlcmVkICZhbXA7JmFtcDsgcHJpdi0mZ3Q7cGh5X2FkZHIgPT0gcGh5X2FkZHIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpIHsKJiM0MzsJCXJldCA9IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsJcHJpdi0mZ3Q7cGh5X2FkZHIgPSBwaHlfYWRkcjsKJiM0MzsKJiM0MzsJaWYgKCFwcml2LSZndDtzdXBwbHlfZW5hYmxlZCkgewomIzQzOwkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LSZndDt2Y2MpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVwaHlfY3RsID0gYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTdGFydCBmcm9tIGEgZGlzYWJsZWQgc3RhdGUgYmVmb3JlIGFwcGx5aW5nIHRoZSBjb25maWd1cmF0aW9uLiBBQzIwMAomIzQzOwkgKiBzcGVjaWZpZXMgbm8gYWRkaXRpb25hbCBkZWxheSBiZXR3ZWVuIHRoZXNlIGNvbnRyb2xzLiBUaGUgY29tcGFuaW9uCiYjNDM7CSAqIE1GRCBwcm92aWRlciBoYXMgY29tcGxldGVkIGl0cyBpbnB1dC1jbG9jayBzdGFydHVwIGRlbGF5IGJlZm9yZQomIzQzOwkgKiBwdWJsaXNoaW5nIHRoZSByZWdtYXAuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9kaXNhYmxlOwomIzQzOwomIzQzOwlyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywKJiM0MzsJCQkJICAgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRywKJiM0MzsJCQkJICAgZXBoeV9jdGwgfCBBQzIwMF9FUEhZX1NIVVRET1dOKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLAomIzQzOwkJCQkgICBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHwKJiM0MzsJCQkJICAgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRywgZXBoeV9jdGwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IHRydWU7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9kaXNhYmxlOgomIzQzOwkvKiBBdHRlbXB0IGV2ZXJ5IHN0ZXAgb2YgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFmdGVyIGEgcGFydGlhbCBzdGFydC4gKi8KJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IHRydWU7CiYjNDM7CWFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsCiYjNDM7CQkgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICphYzIwMF9ub2RlOwomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXY7CiYjNDM7CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7CiYjNDM7CXU4IGJwc19lZmZ1c2VfY29kZTsKJiM0MzsJc3RydWN0IGNsayAqY2xrOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwlwcml2LSZndDtkZXYgPSBkZXY7CiYjNDM7CXByaXYtJmd0O3ZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgJiMzNDt2Y2MmIzM0Oyk7CiYjNDM7CWlmIChJU19FUlIocHJpdi0mZ3Q7dmNjKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtJmd0O3ZjYyksCiYjNDM7CQkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGdldCBwYWNrYWdlIHN1cHBseVxuJiMzNDspKTsKJiM0MzsKJiM0MzsJYWMyMDBfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGFja2FnZV9ub2RlLCAmIzM0O3gtcG93ZXJzLGFjMjAwJiMzNDssIDApOwomIzQzOwlpZiAoIWFjMjAwX25vZGUpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDttaXNzaW5nIHgtcG93ZXJzLGFjMjAwIHJlZmVyZW5jZVxuJiMzNDspKTsKJiM0MzsJY2xpZW50ID0gb2ZfZmluZF9pMmNfZGV2aWNlX2J5X25vZGUoYWMyMDBfbm9kZSk7CiYjNDM7CW9mX25vZGVfcHV0KGFjMjAwX25vZGUpOwomIzQzOwlpZiAoIWNsaWVudCkgewomIzQzOwkJcmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAgJiMzNDtBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcbiYjMzQ7KSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCAmYW1wO2NsaWVudC0mZ3Q7ZGV2LAomIzQzOwkJCSAgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O2ZhaWxlZCB0byBsaW5rIEFDMjAwIGRldmljZVxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X2NsaWVudDsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXZpY2VfbG9jaygmYW1wO2NsaWVudC0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKGRldmljZV9pc19ib3VuZCgmYW1wO2NsaWVudC0mZ3Q7ZGV2KSkKJiM0MzsJCXByaXYtJmd0O3JlZ21hcCA9IGRldl9nZXRfcmVnbWFwKCZhbXA7Y2xpZW50LSZndDtkZXYsIE5VTEwpOwomIzQzOwlkZXZpY2VfdW5sb2NrKCZhbXA7Y2xpZW50LSZndDtkZXYpOwomIzQzOwlpZiAoIXByaXYtJmd0O3JlZ21hcCkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsCiYjNDM7CQkJCSAgICAmIzM0O0FDMjAwIGRyaXZlciBpcyBub3QgcmVhZHlcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9jbGllbnQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFoYXNfY2FsaWJyYXRpb24pIHsKJiM0MzsJCXJldCA9IHJlZ21hcF9yZWFkKHByaXYtJmd0O3JlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsCiYjNDM7CQkJCSAgJmFtcDtpbnRlcm5hbF9jYWxpYnJhdGlvbik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gb3V0X2Vycm9yOwomIzQzOwkJY2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovCiYjNDM7CWJwc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiAmIzQzOyBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUKSAmYW1wOwomIzQzOwkJCSAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7CiYjNDM7CXByaXYtJmd0O2VwaHlfY3RsID0KJiM0MzsJCUZJRUxEX1BSRVAoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0ssIGJwc19lZmZ1c2VfY29kZSk7CiYjNDM7CS8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi8KJiM0MzsKJiM0MzsJY2xrID0gY2xrX2dldCgmYW1wO2NsaWVudC0mZ3Q7ZGV2LCBOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihjbGspKSB7CiYjNDM7CQlyZXQgPSBQVFJfRVJSKGNsayk7CiYjNDM7CQlnb3RvIG91dF9lcnJvcjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGUgYm91bmQgQUMyMDAgcHJvdmlkZXIgZW5hYmxlcyBhbmQgZXhjbHVzaXZlbHkgcGlucyB0aGlzIHJhdGUuICovCiYjNDM7CWNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7CiYjNDM7CWNsa19wdXQoY2xrKTsKJiM0MzsKJiM0MzsJc3dpdGNoIChjbGtfcmF0ZSkgewomIzQzOwljYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOgomIzQzOwkJcHJpdi0mZ3Q7ZXBoeV9jdGwgfD0gQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaOgomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7dW5zdXBwb3J0ZWQgQUMyMDAgY2xvY2sgcmF0ZSAlbHUgSHpcbiYjMzQ7LAomIzQzOwkJCQkgICAgY2xrX3JhdGUpOwomIzQzOwkJZ290byBvdXRfcHV0X2NsaWVudDsKJiM0MzsJfQomIzQzOwomIzQzOwlwcml2LSZndDtjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmOwomIzQzOwlwcml2LSZndDtjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlOwomIzQzOwkvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovCiYjNDM7CXByaXYtJmd0O2ludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7CiYjNDM7CXB1dF9kZXZpY2UoJmFtcDtjbGllbnQtJmd0O2Rldik7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO3ByaXYtJmd0O2NvbnRyb2w7CiYjNDM7CiYjNDM7b3V0X2Vycm9yOgomIzQzOwlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplIEFDMjAwIGNvbnRyb2xcbiYjMzQ7KTsKJiM0MztvdXRfcHV0X2NsaWVudDoKJiM0MzsJcHV0X2RldmljZSgmYW1wO2NsaWVudC0mZ3Q7ZGV2KTsKJiM0MzsJcmV0dXJuIEVSUl9QVFIocmV0KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hYTU2MDQzMmExNGM5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuYwpAQCAtMCwwICYjNDM7MSwzODcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBYLVBvd2VycyBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgJmx0O2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9waHlsaWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDthY3gwMC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQJMwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFoJMjQwMDAwMDAKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaCTI1MDAwMDAwCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWgkyNzAwMDAwMAomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfUkVHCQkJMHgwMAomIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTSwkJR0VOTUFTSygxMSwgOCkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLCQkJR0VOTUFTSyg3LCA2KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWgkJRklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMCkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFoJCUZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDEpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaCQlGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAyKQomIzQzOyNkZWZpbmUgQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRQkJCUJJVCg1KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRQkJQklUKDQpCiYjNDM7I2RlZmluZSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFCQlCSVQoMikKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQJCUJJVCgxKQomIzQzOyNkZWZpbmUgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVAkJQklUKDApCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPCQlCSVQoMykKJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSwkJR0VOTUFTSygyLCAwKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0JJQVMxX1JFRwkJCTB4MDIKJiM0MzsjZGVmaW5lIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFCQlCSVQoMTUpCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHCQkJMHgwNQomIzQzOyNkZWZpbmUgQUMzMDBfTURJT19EUlZfTUFTSwkJCUdFTk1BU0soMTUsIDE0KQomIzQzOyNkZWZpbmUgQUMzMDBfTUlJX0RSVl9NQVNLCQkJR0VOTUFTSygxMSwgMTApCiYjNDM7I2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMgkJCTIKJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUJCQlCSVQoNCkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRQkJCUJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DT05GSUdfUkVHCQkJMHgwNgomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0sJCUdFTk1BU0soMTUsIDEyKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9STUlJX1NFTAkJCUJJVCgxMSkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfU0hVVERPV04JCQlCSVQoMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTIFwKJiM0MzsJKEFDMzAwX0VGVVNFX0NMS19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFIHwgXAomIzQzOwkgQUMzMDBfQ0xLSU5fR0FUSU5HX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfCBcCiYjNDM7CSBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0lPX1ZBTFVFIFwKJiM0MzsJKEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXAomIzQzOwkgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFwKJiM0MzsJIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUgfCBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEUpCiYjNDM7CiYjNDM7c3RydWN0IGFjMzAwX2VwaHlfY3RsIHsKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sOwomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwomIzQzOwlzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7CiYjNDM7CXN0cnVjdCBjbGsgKmNsazsKJiM0MzsJdTE2IHN5c19jb250cm9sOwomIzQzOwl1MTYgZXBoeV9jb25maWc7CiYjNDM7CXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7CiYjNDM7CWJvb2wgcGFja2FnZV9rbm93bjsKJiM0MzsJYm9vbCBpbnRlcm5hbF9kbGRvOwomIzQzOwlib29sIHN1cHBseV9lbmFibGVkOwomIzQzOwlib29sIHBvd2VyZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50CiYjNDM7YWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CXJldHVybiBwcml2LSZndDtwaHlkZXYtJmd0O21kaW8uYWRkcjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9yZWFkKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CXJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LSZndDtwaHlkZXYsCiYjNDM7CQkJCSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7CiYjNDM7CXBoeV91bmxvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sCiYjNDM7CQkJCXUxNiB2YWwpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwaHlfbG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwlyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSwgdmFsKTsKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX21vZGlmeShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sCiYjNDM7CQkJCSB1MTYgbWFzaywgdTE2IHNldCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CXJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LSZndDtwaHlkZXYsCiYjNDM7CQkJCSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCkgewomIzQzOwkJdTE2IHZhbCA9IChyZXQgJmFtcDsgfm1hc2spIHwgKHNldCAmYW1wOyBtYXNrKTsKJiM0MzsKJiM0MzsJCXJldCA9IHZhbCA9PSByZXQgPyAwIDoKJiM0MzsJCQlfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJCSAgICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsCiYjNDM7CQkJCQkgICAgcmVnbnVtLCB2YWwpOwomIzQzOwl9CiYjNDM7CXBoeV91bmxvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHByaXYtJmd0O2VwaHlfY29uZmlnIHwKJiM0MzsJCShwcml2LSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgPwomIzQzOwkJIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBBIGNoaXAgcmVzZXQgcmVzdG9yZXMgRExET0VOIHRvIG9uZS4gVW50aWwgUEtHX1NUQVRVUyBoYXMgaWRlbnRpZmllZAomIzQzOwkgKiB0aGUgc3VwcGx5IGFycmFuZ2VtZW50LCBwcmVzZXJ2ZSBhbnkgZXh0ZXJuYWwtVkREIHNldHVwIGxlZnQgYnkgdGhlCiYjNDM7CSAqIGJvb3Rsb2FkZXIgYnkgYXNzZXJ0aW5nIG9ubHkgdGhlIEVQSFkgcmVzZXQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gIXByaXYtJmd0O3BhY2thZ2Vfa25vd24gfHwgIXByaXYtJmd0O2ludGVybmFsX2RsZG8gPwomIzQzOwkJQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCA6IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpIHsKJiM0MzsJCXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRywKJiM0MzsJCQkJCSAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8CiYjNDM7CQkJCQkgICBBQzMwMF9FUEhZX1NIVVRET1dOKTsKJiM0MzsJCWVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsIDApOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJcmV0ID0gZXJyOwomIzQzOwkJZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLAomIzQzOwkJCQkJICAgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdikpOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJcmV0ID0gZXJyOwomIzQzOwomIzQzOwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtJmd0O2Nsayk7CiYjNDM7CQlwcml2LSZndDtwb3dlcmVkID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3N1cHBseV9lbmFibGVkKSB7CiYjNDM7CQllcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LSZndDt2Y2MpOwomIzQzOwkJaWYgKCFlcnIpCiYjNDM7CQkJcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQgPSBmYWxzZTsKJiM0MzsJCWVsc2UgaWYgKCFyZXQpCiYjNDM7CQkJcmV0ID0gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7CiYjNDM7CiYjNDM7CXJldHVybiBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7YWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCSAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZSA9PSBpbnRlcmZhY2UpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpCiYjNDM7CQlyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLAomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwsCiYjNDM7CQkJCQkgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID8KJiM0MzsJCQkJCSAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcHJpdi0mZ3Q7aW50ZXJmYWNlID0gaW50ZXJmYWNlOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGludCBwaHlfYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsJdTggcGFja2FnZV9zdGF0dXM7CiYjNDM7CXUxNiByZXNldF92YWx1ZTsKJiM0MzsJaW50IHN5c19jb250cm9sOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocGh5X2FkZHIgIT0gYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtwb3dlcmVkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQpIHsKJiM0MzsJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi0mZ3Q7dmNjKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCXByaXYtJmd0O3N1cHBseV9lbmFibGVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCS8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi8KJiM0MzsJCWZzbGVlcCgxMDAwMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtJmd0O2Nsayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CXByaXYtJmd0O3Bvd2VyZWQgPSB0cnVlOwomIzQzOwomIzQzOwkvKiBLZWVwIHRoZSBleHRlcm5hbC1zdXBwbHkgY29uZmlndXJhdGlvbiBhY3Jvc3MgY2hpcCByZXNldHMuICovCiYjNDM7CXJlc2V0X3ZhbHVlID0gYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdik7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywgcmVzZXRfdmFsdWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBUaGUgbWFudWFsIHJlcXVpcmVzIGJvdGggcmVzZXRzIHRvIGJlIHJlbGVhc2VkIGJlZm9yZSB0aGUgY2xvY2tzLiAqLwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCSAgIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfAomIzQzOwkJCQkgIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBSZXRhaW4gdGhlIHZlbmRvciBjbG9jay1lbmFibGUgZGVmYXVsdHMsIGluY2x1ZGluZyB0aGUgZUZ1c2UgY2xvY2suICovCiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywKJiM0MzsJCQkJICAgcHJpdi0mZ3Q7c3lzX2NvbnRyb2wpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlzeXNfY29udHJvbCA9IGFjMzAwX2VwaHlfY3RsX3JlYWQocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHKTsKJiM0MzsJaWYgKHN5c19jb250cm9sICZsdDsgMCkgewomIzQzOwkJcmV0ID0gc3lzX2NvbnRyb2w7CiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGFja2FnZV9zdGF0dXMgPSBGSUVMRF9HRVQoQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTSywgc3lzX2NvbnRyb2wpOwomIzQzOwlpZiAoKH5wYWNrYWdlX3N0YXR1cyAmYW1wOyBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9CiYjNDM7CSAgICBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7aW50ZXJuYWxfZGxkbyA9IHBhY2thZ2Vfc3RhdHVzICZhbXA7IEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE87CiYjNDM7CXByaXYtJmd0O3BhY2thZ2Vfa25vd24gPSB0cnVlOwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfU1lTX0JJQVMxX1JFRywKJiM0MzsJCQkJICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLAomIzQzOwkJCQkgICBwcml2LSZndDtpbnRlcm5hbF9kbGRvID8KJiM0MzsJCQkJICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUgOiAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJLyogS2VlcCB0aGUgZG9jdW1lbnRlZCBkZWZhdWx0IGRyaXZlIGxldmVsIGFuZCBsZWF2ZSB0aGUgSVJRIGRpc2FibGVkLiAqLwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLAomIzQzOwkJCQkgICBBQzMwMF9TWVNfSU9fVkFMVUUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlmc2xlZXAoMTAwMDApOwomIzQzOwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsCiYjNDM7CQkJCSAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8CiYjNDM7CQkJCSAgQUMzMDBfRVBIWV9TSFVURE9XTik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CWZzbGVlcCgxMDAwMCk7CiYjNDM7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRywKJiM0MzsJCQkJICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3Bvd2VyX29mZjoKJiM0MzsJYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwljbGtfcHV0KGRhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICoKJiM0MzthYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKJiM0MzsJc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2OwomIzQzOwl1bnNpZ25lZCBsb25nIGNsa19yYXRlOwomIzQzOwl1OCBiZ3NfZWZmdXNlX2NvZGU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CWlmIChwaHlkZXYtJmd0O21kaW8uYWRkciAmZ3Q7IEZJRUxEX01BWChBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkgICAgICYjMzQ7bGluayBhZGRyZXNzIGlzIG91dHNpZGUgdGhlIHBhY2thZ2UgcmFuZ2VcbiYjMzQ7KSk7CiYjNDM7CXByaXYtJmd0O3BoeWRldiA9IHBoeWRldjsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7dmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCAmIzM0O3ZjYyYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDt2Y2MpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7dmNjKSwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XG4mIzM0OykpOwomIzQzOwomIzQzOwlwcml2LSZndDtjbGsgPSBvZl9jbGtfZ2V0KHBhY2thZ2Vfbm9kZSwgMCk7CiYjNDM7CWlmIChJU19FUlIocHJpdi0mZ3Q7Y2xrKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtJmd0O2NsayksCiYjNDM7CQkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGdldCBpbnB1dCBjbG9ja1xuJiMzNDspKTsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWMzMDBfZXBoeV9jbGtfcHV0LCBwcml2LSZndDtjbGspOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgcHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsCiYjNDM7CQkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGxvY2sgY2xvY2sgcmF0ZVxuJiMzNDspKTsKJiM0MzsKJiM0MzsJY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUocHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJc3dpdGNoIChjbGtfcmF0ZSkgewomIzQzOwljYXNlIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOgomIzQzOwkJcHJpdi0mZ3Q7c3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6CiYjNDM7CQlwcml2LSZndDtzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFo7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWjoKJiM0MzsJCXByaXYtJmd0O3N5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWjsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkgICAgICYjMzQ7dW5zdXBwb3J0ZWQgaW5wdXQgY2xvY2sgcmF0ZSAlbHUgSHpcbiYjMzQ7LAomIzQzOwkJCQkJICAgICBjbGtfcmF0ZSkpOwomIzQzOwl9CiYjNDM7CXByaXYtJmd0O3N5c19jb250cm9sIHw9IEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTOwomIzQzOwomIzQzOwkvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovCiYjNDM7CWJnc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiAmIzQzOyBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUKSAmYW1wOwomIzQzOwkJCSAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7CiYjNDM7CXByaXYtJmd0O2VwaHlfY29uZmlnID0KJiM0MzsJCUZJRUxEX1BSRVAoQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0ssIGJnc19lZmZ1c2VfY29kZSk7CiYjNDM7CS8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi8KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7Y29udHJvbC5wb3dlcl9vbiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uOwomIzQzOwlwcml2LSZndDtjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjsKJiM0MzsJcHJpdi0mZ3Q7Y29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTsKJiM0MzsJLyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqLwomIzQzOwlwcml2LSZndDtpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJOwomIzQzOwomIzQzOwlyZXR1cm4gJmFtcDtwcml2LSZndDtjb250cm9sOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmVkMjNhM2NiZmUyYTEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jCkBAIC0wLDAgJiM0MzsxLDYyMSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXIKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAxOSBKZXJuZWogU2tyYWJlYyAmbHQ7amVybmVqLnNrcmFiZWNAZ21haWwuY29tJmd0OwomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9udm1lbS1jb25zdW1lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vcGh5bGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YWN4MDAuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0lECQkJCTB4MDA0NDE0MDAKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0sJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMAkJQklUKDgpCiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cJQklUKDkpCiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcJCQkweDFmCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLCQkJR0VOTUFTSygxMiwgOCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMAkJCQkwCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzEJCQkJMQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV8yCQkJCTIKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfNgkJCQk2CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzgJCQkJOAomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUcJCTB4MTMKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUCUJJVCgxMikKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0sJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8JCTIKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFRwkJMHgxMgomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFCTB4NDgyNAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRwkJMHgxMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEUJCQlCSVQoMTUpCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcJMHgxNwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRQlCSVQoMykKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUcJCTB4MTgKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLCQlHRU5NQVNLKDE0LCAxMikKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUCTAKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRwkJMHgxMAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRQkweDU1MjMKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFRwkJMHgxMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUJCTB4ZjAwMAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFRwkweDE0CiYjNDM7I2RlZmluZSBBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFCTB4NzA4ZgomIzQzOyNkZWZpbmUgQUMzMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRQkweDcwOGIKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFRwkJCTB4MTUKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSwkJR0VOTUFTSygxNSwgOCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLCQlHRU5NQVNLKDcsIDApCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRShfMTAwbSwgXzEwbSkgXAomIzQzOwkoRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0ssIChfMTAwbSkpIHwgXAomIzQzOwkgRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xME1fTUFTSywgKF8xMG0pKSkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUUgXAomIzQzOwlBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRSBcCiYjNDM7CUFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MzUsIDB4MzMpCiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUcJCTB4MTgKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFCQkweDAwYmMKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHCQkweDFkCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMJMHgwMDQ0CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXAomIzQzOwkoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFwKJiM0MzsJIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBbm90aGVyIGludGVncmF0aW9uIG9mIHRoaXMgZXhhY3QtSUQgUEhZIGRvY3VtZW50cyBpdHMgZGlnaXRhbCB2ZW5kb3IKJiM0MzsgKiByZWdpc3RlciBtYXAsIHdoaWNoIGFsc28gbWF0Y2hlcyB0aGUgb2JzZXJ2ZWQgQUN4MDAgcmVzZXQgdmFsdWVzLiBUaGUgQUN4MDAKJiM0MzsgKiBhbmFsb2ctcGFnZSBmaWVsZCBlbmNvZGluZ3MgcmVtYWluIHVucHVibGlzaGVkLCBzbyBrZWVwIHRob3NlIGFzIG9wYXF1ZQomIzQzOyAqIHZlbmRvciBpbml0aWFsaXphdGlvbiB2YWx1ZXMgaW5zdGVhZCBvZiBpbnZlbnRpbmcgYml0IGRlZmluaXRpb25zLgomIzQzOyAqLwomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X3ByaXYgewomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sOwomIzQzOwkvKiBTZXJpYWxpemVzIHBhY2thZ2Ugc3RhdGUgYW5kIG11bHRpLXJlZ2lzdGVyIHBvd2VyIHNlcXVlbmNlcy4gKi8KJiM0MzsJc3RydWN0IG11dGV4IHN0YXRlX2xvY2s7CiYjNDM7CWJvb2wgaXNfYWMzMDA7CiYjNDM7CWJvb2wgdXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmc7CiYjNDM7CWJvb2wgeG1paV9yeF9jbG9ja19pbnZlcnRlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcsCiYjNDM7CQkJICAgRklFTERfUFJFUChBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLLCBwYWdlKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBwcml2LSZndDtjb250cm9sLSZndDtwb3dlcl9vbihwcml2LSZndDtjb250cm9sLAomIzQzOwkJCQkgICAgICAgcHJpdi0mZ3Q7cGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O2NvbnRyb2wtJmd0O3Bvd2VyX29mZihwcml2LSZndDtjb250cm9sKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSAmYW1wOyZhbXA7CiYjNDM7CSAgICBwaHlkZXYtJmd0O2ludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7Y29udHJvbC0mZ3Q7c2V0X2ludGVyZmFjZShwcml2LSZndDtjb250cm9sLAomIzQzOwkJCQkJICAgIHBoeWRldi0mZ3Q7aW50ZXJmYWNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcGh5ZGV2X3dhcm4ocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCSAgICAmIzM0O2ZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXG4mIzM0OywKJiM0MzsJCQkgICAgRVJSX1BUUihyZXQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2Uodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CWFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiYjNDM7CQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgdTE2ICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBudm1lbV9jZWxsICpjZWxsOwomIzQzOwlzaXplX3QgaTsKJiM0MzsJc2l6ZV90IGxlbjsKJiM0MzsJdTggKmJ1ZjsKJiM0MzsJdTE2IHZhbCA9IDA7CiYjNDM7CiYjNDM7CWNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChub2RlLCBuYW1lKTsKJiM0MzsJaWYgKElTX0VSUihjZWxsKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKGNlbGwpOwomIzQzOwomIzQzOwlidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgJmFtcDtsZW4pOwomIzQzOwludm1lbV9jZWxsX3B1dChjZWxsKTsKJiM0MzsJaWYgKElTX0VSUihidWYpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoYnVmKTsKJiM0MzsJaWYgKCFsZW4gfHwgbGVuICZndDsgc2l6ZW9mKCp2YWx1ZSkpIHsKJiM0MzsJCWtmcmVlKGJ1Zik7CiYjNDM7CQlyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGxlbjsgaSYjNDM7JiM0MzspCiYjNDM7CQl2YWwgfD0gKHUxNilidWZbaV0gJmx0OyZsdDsgKDggKiBpKTsKJiM0MzsJa2ZyZWUoYnVmKTsKJiM0MzsJKnZhbHVlID0gdmFsOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTsKJiM0MzsJYm9vbCBzZWxlY3RhYmxlOwomIzQzOwlib29sIGZpeGVkX2FjMzAwOwomIzQzOwlib29sIGhhc19jb25maWd1cmF0aW9uOwomIzQzOwl1OCBjYWxpYnJhdGlvbjsKJiM0MzsJdTMyIGJhc2VfYWRkcjsKJiM0MzsJdTE2IGNvbmZpZ3VyYXRpb24gPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KGRldi0mZ3Q7b2Zfbm9kZSk7CiYjNDM7CWlmICghcGFja2FnZV9ub2RlKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgJiMzNDtldGhlcm5ldC1waHktcGFja2FnZSYjMzQ7KSkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O1BIWSBpcyBub3QgaW4gYW4gRXRoZXJuZXQgUEhZIHBhY2thZ2VcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgJiMzNDtyZWcmIzM0OywgJmFtcDtiYXNlX2FkZHIpOwomIzQzOwlpZiAocmV0IHx8IGJhc2VfYWRkciAhPSBwaHlkZXYtJmd0O21kaW8uYWRkcikgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O3BhY2thZ2UgYW5kIGxpbmsgUEhZIGFkZHJlc3NlcyBkaWZmZXJcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkgICAgICYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlJiMzNDspOwomIzQzOwlmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSAgICAgICYjMzQ7eC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlJiMzNDspOwomIzQzOwlpZiAoIXNlbGVjdGFibGUgJmFtcDsmYW1wOyAhZml4ZWRfYWMzMDAgJmFtcDsmYW1wOwomIzQzOwkgICAgIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJICAgICAmIzM0O3gtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZSYjMzQ7KSkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O3Vuc3VwcG9ydGVkIEV0aGVybmV0IFBIWSBwYWNrYWdlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CiYjNDM7CWhhc19jb25maWd1cmF0aW9uID0KJiM0MzsJCW9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhwYWNrYWdlX25vZGUsICYjMzQ7bnZtZW0tY2VsbC1uYW1lcyYjMzQ7LAomIzQzOwkJCQkJICYjMzQ7Y29uZmlndXJhdGlvbiYjMzQ7KSAmZ3Q7PSAwOwomIzQzOwlpZiAoaGFzX2NvbmZpZ3VyYXRpb24pIHsKJiM0MzsJCXJldCA9IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYocGFja2FnZV9ub2RlLCAmIzM0O2NvbmZpZ3VyYXRpb24mIzM0OywKJiM0MzsJCQkJCQkmYW1wO2NvbmZpZ3VyYXRpb24pOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsCiYjNDM7CQkJCQkgICAgJiMzNDtmYWlsZWQgdG8gcmVhZCBwYWNrYWdlIGNvbmZpZ3VyYXRpb25cbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7cGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2VsZWN0YWJsZSkgewomIzQzOwkJcHJpdi0mZ3Q7aXNfYWMzMDAgPQomIzQzOwkJCWNvbmZpZ3VyYXRpb24gJmFtcDsgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXByaXYtJmd0O2lzX2FjMzAwID0gZml4ZWRfYWMzMDA7CiYjNDM7CQlpZiAoaGFzX2NvbmZpZ3VyYXRpb24gJmFtcDsmYW1wOwomIzQzOwkJICAgICEhKGNvbmZpZ3VyYXRpb24gJmFtcDsgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMCkgIT0KJiM0MzsJCSAgICBwcml2LSZndDtpc19hYzMwMCkgewomIzQzOwkJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkJICAgICYjMzQ7Y29uZmlndXJhdGlvbiBkb2VzIG5vdCBtYXRjaCBwYWNrYWdlXG4mIzM0Oyk7CiYjNDM7CQkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSywKJiM0MzsJCQkJY29uZmlndXJhdGlvbik7CiYjNDM7CiYjNDM7CXByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nID0KJiM0MzsJCXByaXYtJmd0O2lzX2FjMzAwICZhbXA7JmFtcDsKJiM0MzsJCSEhKGNvbmZpZ3VyYXRpb24gJmFtcDsgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XKTsKJiM0MzsJcHJpdi0mZ3Q7eG1paV9yeF9jbG9ja19pbnZlcnRlZCA9CiYjNDM7CQlvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGFja2FnZV9ub2RlLAomIzQzOwkJCQkgICAgICAmIzM0O3gtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCkKJiM0MzsJCXByaXYtJmd0O2NvbnRyb2wgPQomIzQzOwkJCWFjMzAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSAgICAgIGNhbGlicmF0aW9uKTsKJiM0MzsJZWxzZQomIzQzOwkJcHJpdi0mZ3Q7Y29udHJvbCA9CiYjNDM7CQkJYWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLAomIzQzOwkJCQkJICAgICAgaGFzX2NvbmZpZ3VyYXRpb24sCiYjNDM7CQkJCQkgICAgICBjYWxpYnJhdGlvbik7CiYjNDM7CXJldCA9IFBUUl9FUlJfT1JfWkVSTyhwcml2LSZndDtjb250cm9sKTsKJiM0MzsKJiM0MztvdXRfcHV0X25vZGU6CiYjNDM7CW9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CXJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzEsCiYjNDM7CQkJICAgICAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRywKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O29mX25vZGUpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7cGh5ZGV2ID0gcGh5ZGV2OwomIzQzOwltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHBoeWRldiwgcHJpdik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3ByaXYgPSBwcml2OwomIzQzOwlyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSwgcHJpdik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBwb3dlciBvbiBjb250cm9sIGJsb2NrXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBBQ3gwMCBjYW4gYWNrbm93bGVkZ2UgcmVzZXQgaW4gcG93ZXItZG93biB3aXRob3V0IHJlc3RhcnRpbmcuICovCiYjNDM7CXJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VucGh5X3NvZnRfcmVzZXQocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzO291dF9wb3dlcl9vZmY6CiYjNDM7CWFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2FjeDAwX2VwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CXUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi0mZ3Q7aXNfYWMzMDAgPwomIzQzOwkJQUMzMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRSA6CiYjNDM7CQlBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFOwomIzQzOwl1MTYgdHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFOwomIzQzOwl1MTYgZ2xvYmFsX2NvbmZpZzsKJiM0MzsJaW50IG9sZHBhZ2U7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJZ2xvYmFsX2NvbmZpZyA9IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSywKJiM0MzsJCQkJICAgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUTyk7CiYjNDM7CWlmIChwcml2LSZndDt4bWlpX3J4X2Nsb2NrX2ludmVydGVkKQomIzQzOwkJZ2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEFDWDAwX1BBR0VfMCwKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUcsCiYjNDM7CQkJICAgICAgIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUIHwKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSywgZ2xvYmFsX2NvbmZpZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aXNfYWMzMDAgJmFtcDsmYW1wOyBwcml2LSZndDt1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykgewomIzQzOwkJYWZlX2VxX3J4X2RldGVjdCA9CiYjNDM7CQkJQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFOwomIzQzOwkJdHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFOwomIzQzOwl9CiYjNDM7CiYjNDM7CW9sZHBhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzEpOwomIzQzOwlpZiAob2xkcGFnZSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gb2xkcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsCiYjNDM7CQkJICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLAomIzQzOwkJCSAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssCiYjNDM7CQkJCSAgICAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfNik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFRywKJiM0MzsJCQkgIGFmZV9lcV9yeF9kZXRlY3QpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFRywKJiM0MzsJCQkgIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwICZhbXA7JmFtcDsgcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9SRUcsIHR4X2xldmVsX3ZhbHVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV84KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwICZhbXA7JmFtcDsgcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCSAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUpOwomIzQzOwomIzQzO291dF9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldCA9IHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi8KJiM0MzsJcmV0ID0gZ2VucGh5X2M0NV9hbl9jb25maWdfZWVlX2FuZWcocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CXJldCA9IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2FjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3BoeWRldi0mZ3Q7bG9jayk7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBQb3dlcmluZyBvZmYgdGhlIGNvbnRyb2wgYmxvY2sgbG9zZXMgdGhlIHZlbmRvci1wYWdlIHN0YXRlLiAqLwomIzQzOwlyZXQgPSBfX2FjeDAwX2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7b3V0X3Bvd2VyX29mZjoKJiM0MzsJYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CXJldCA9IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJlc3VtZV9yZXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIFRoZSBzdXNwZW5kIGNhbGxiYWNrIGlzIGludm9rZWQgd2l0aG91dCB0aGUgcGh5bGliIGxvY2sgaGVsZC4gKi8KJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3BoeWRldi0mZ3Q7bG9jayk7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcmVzdW1lX3JldCA9IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7CiYjNDM7CQlpZiAocmVzdW1lX3JldCkKJiM0MzsJCQlwaHlkZXZfd2FybihwaHlkZXYsCiYjNDM7CQkJCSAgICAmIzM0O2ZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXG4mIzM0OywKJiM0MzsJCQkJICAgIEVSUl9QVFIocmVzdW1lX3JldCkpOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3BoeWRldi0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LSZndDttZGlvLmRldi5vZl9ub2RlOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTsKJiM0MzsJYm9vbCBtYXRjaDsKJiM0MzsKJiM0MzsJaWYgKCFnZW5waHlfbWF0Y2hfcGh5X2RldmljZShwaHlkZXYsIHBoeWRydikgfHwgIW5vZGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogUks2MzAgcmVwb3J0cyB0aGUgc2FtZSBQSFkgSUQsIHNvIGFsc28gbWF0Y2ggdGhlIHBhY2thZ2UgaWRlbnRpdHkuICovCiYjNDM7CXBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7CiYjNDM7CWlmICghcGFja2FnZV9ub2RlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW1hdGNoID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkJJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UmIzM0OykgfHwKJiM0MzsJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSYjMzQ7eC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlJiMzNDspIHx8CiYjNDM7CQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZSYjMzQ7KTsKJiM0MzsJb2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hdGNoOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWN4MDBfZXBoeV9kcml2ZXJbXSA9IHsKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLAomIzQzOwkJLm5hbWUgPSAmIzM0O1gtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFkmIzM0OywKJiM0MzsJCS5tYXRjaF9waHlfZGV2aWNlID0gYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlLAomIzQzOwkJLnByb2JlID0gYWN4MDBfZXBoeV9wcm9iZSwKJiM0MzsJCS5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSwKJiM0MzsJCS53cml0ZV9wYWdlID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlLAomIzQzOwkJLnNvZnRfcmVzZXQgPSBhY3gwMF9lcGh5X3NvZnRfcmVzZXQsCiYjNDM7CQkuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LAomIzQzOwkJLmRpc2FibGVfYXV0b25vbW91c19lZWUgPSBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUsCiYjNDM7CQkuc3VzcGVuZCA9IGFjeDAwX2VwaHlfc3VzcGVuZCwKJiM0MzsJCS5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSwKJiM0MzsJfSwKJiM0Mzt9OwomIzQzO21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFjeDAwX2VwaHlfdGJsW10gPSB7CiYjNDM7CXsgUEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpIH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7CiYjNDM7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0phbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaCBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uN2RmNjA4NGM3YTc3MgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmgKQEAgLTAsMCAmIzQzOzEsMjggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7I2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0gKJiM0MzsjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQJMTYKJiM0MzsKJiM0MztzdHJ1Y3QgZGV2aWNlX25vZGU7CiYjNDM7CiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7CiYjNDM7CWludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCXVuc2lnbmVkIGludCBwaHlfYWRkcik7CiYjNDM7CWludCAoKnBvd2VyX29mZikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCk7CiYjNDM7CWludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsCiYjNDM7CQkgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTsKJiM0MzsKJiM0MzsjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDc6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MjQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA4NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgRHJpdmVyKioKCk9rYXksIHNvIHdlIGhhdmUgYSBuZXcgZHJpdmVyIGZvciBFdGhlcm5ldCBQSFlzIHNwZWNpZmljYWxseSBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MsIHJlc2lkaW5nIGluIGBkcml2ZXJzL25ldC9waHkveHBvd2Vycy9gLiBJdCBkZWZpbmVzIGBDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFlgIGFuZCBpbXBsZW1lbnRzIHRoZSB1c3VhbCBQSFkgZHJpdmVyIGZ1bmN0aW9uczogcHJvYmUsIHJlc2V0LCBpbml0aWFsaXphdGlvbiwgYW5kIHBvd2VyIG1hbmFnZW1lbnQgKHN1c3BlbmQvcmVzdW1lKS4gQWxzbywgSSBzZWUgYGFjMjAwX2VwaHlfY3RsX2NyZWF0ZWAgYW5kIGBhYzMwMF9lcGh5X2N0bF9jcmVhdGVgLCB3aGljaCBwcm9iYWJseSBoYW5kbGUgc29tZSBkZXZpY2Utc3BlY2lmaWMgY29udHJvbCBhc3BlY3RzLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGludGVyYWN0IHdpdGggdGhpcyBkcml2ZXIsIGFuZCBob3cgdG8gdHJpZ2dlciBpdHMgcHJvYmUgZnVuY3Rpb24uIEl0JiMzOTtzIGFuIEV0aGVybmV0IFBIWSwgc28gdGhlIHN0YW5kYXJkIGFjY2VzcyBtZXRob2QgaXMgdmlhIE1ESU8uIENhbiBJIHJlYWNoIHRoaXMgY29kZSBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBRRU1VIGVtdWxhdGVzIHNvbWUgbmV0d29yayBpbnRlcmZhY2VzLCBidXQgZG9lcyBpdCBhY3R1YWxseSBlbXVsYXRlIHRoZSBYLVBvd2VycyBBQzIwMC9BQzMwMCBQSFk/IE5vLCBwcm9iYWJseSBub3QuCgpTbywgaG93IGRvIEkgZ2V0IHRoZSBwcm9iZSBmdW5jdGlvbiBjYWxsZWQ/IFBIWSBkcml2ZXJzIGFyZSB1c3VhbGx5IHByb2JlZCBieSB0aGUgTURJTyBidXMgZHJpdmVyIGJhc2VkIG9uIGRldmljZSB0cmVlIGluZm9ybWF0aW9uIG9yIGhhcmR3YXJlIHByb2JpbmcuIEkgbmVlZCBhbiBNRElPIGJ1cyBhbmQgYSBkZXZpY2UgcmVnaXN0ZXJlZCBvbiBpdC4gQ2FuIEkgc2V0IHVwIGEgdmlydHVhbCBNRElPIGJ1cyBhbmQgaW5qZWN0IGEgZGV2aWNlIGZvciB0ZXN0aW5nPyBTeXprYWxsZXIgaXMgdGhlIGdvLXRvIGZ1enppbmcgdG9vbCwgYnV0IGRvZXMgaXQgaGF2ZSBhIHdheSB0byBpbmplY3QgTURJTyBkZXZpY2VzIGRpcmVjdGx5PwoKSSBrbm93IHN5emthbGxlciBjYW4gY3JlYXRlIHZpcnR1YWwgZGV2aWNlcyBmb3IgdmFyaW91cyBzdWJzeXN0ZW1zIC0gVVNCICh2aGNpKSwgV2lGaSAobWFjODAyMTFfaHdzaW0pLCBpbnB1dCAodWlucHV0KSwgRFJNICh2a21zKSwgQUxTQSAoc25kLWFsb29wKS4gRG9lcyBpdCBoYXZlIGFueXRoaW5nIGVxdWl2YWxlbnQgZm9yIE1ESU8/IEkgbmVlZCB0byBjaGVjayBpdHMgTURJTyBkZXNjcmlwdGlvbnMuCgpJIHJlbWVtYmVyIHRoaW5raW5nIGFib3V0IGBtZGlvLW1vY2t1cGAgb3Igc2ltaWxhci4gTm8sIHRoZXJlJiMzOTtzIG5vdGhpbmcgc3BlY2lmaWMuIFRoZXJlJiMzOTtzIGB0dW5gIG9yIGB0YXBgIGJ1dCB0aGV5IGRvbiYjMzk7dCBpbnZvbHZlIE1ESU8uCgpDYW4gSSB0cmlnZ2VyIHRoaXMgZnJvbSB1c2VyIHNwYWNlPyBVc3VhbGx5LCBQSFkgZGV2aWNlcyBhcmUgaW5zdGFudGlhdGVkIGJ5IHRoZSBNRElPIGJ1cyBkcml2ZXIsIGJ1dCBtYXliZSB2aWEgc3lzZnMgb3IgbmV0bGluaz8gTm8sIHRoYXQmIzM5O3Mgbm90IHRoZSBub3JtYWwgc2V0dXAuIFN5emthbGxlciBoYXMgYHN5el9pbml0X25ldF9kZXZpY2VgLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBpbnN0YW50aWF0ZSBNRElPIFBIWXMuCgpBaGEhIFRoZSBBQzIwMCBkcml2ZXIgdXNlcyBJMkMgdG8gY29tbXVuaWNhdGUuIEl0IGNhbGxzIGBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZWAuIElmIGl0JiMzOTtzIGFuIEkyQyBkZXZpY2UsIGNhbiBJIGxldmVyYWdlIHN5emthbGxlciYjMzk7cyBJMkMgaW5qZWN0aW9uIHZpYSBgL2Rldi9pMmMtKmA/IEkyQyBkZXZpY2UgaW5zdGFudGlhdGlvbiBmcm9tIHVzZXJzcGFjZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBkb25lIHZpYSBzeXNmcyB1c2luZyBgbmV3X2RldmljZWAuIEJ1dCB0aGUgcHJvYmUgZnVuY3Rpb24gKGBhY3gwMF9lcGh5X3Byb2JlYCkgaXMgYSBQSFkgZHJpdmVyIHByb2JlIGZ1bmN0aW9uLgoKTG9va2luZyBhdCB0aGUgZHJpdmVyIGNvZGUsIGl0IGRlZmluZXMgYGFjeDAwX2VwaHlfZHJpdmVyYCwgd2l0aCBhIFBIWSBJRCBtYXRjaC4KYGBgYwpzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWN4MDBfZXBoeV9kcml2ZXJbXSA9IHsKCXsKCQlQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCksCgkJLm5hbWUgPSAmIzM0O1gtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFkmIzM0OywKCQkubWF0Y2hfcGh5X2RldmljZSA9IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZSwKLi4uCmBgYApTbywgdG8gZ2V0IGl0IHByb2JlZCwgSSBuZWVkIHRvIHJlZ2lzdGVyIGEgUEhZIGRldmljZSB3aXRoIHRoZSBtYXRjaGluZyBJRCBvbiBhbiBNRElPIGJ1cy4gQ2FuIHN5emthbGxlciBjcmVhdGUgYW4gTURJTyBidXMgYW5kIHJlZ2lzdGVyIHRoaXMgUEhZIGRldmljZT8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzeXprYWxsZXIgZG9jdW1lbnRhdGlvbiBhbmQgY29kZSB0byBzZWUgaWYgaXQgc3VwcG9ydHMgY3JlYXRpbmcgdmlydHVhbCBNRElPIGJ1c2VzIGFuZCByZWdpc3RlcmluZyB2aXJ0dWFsIFBIWSBkZXZpY2VzLiBUaGVyZSBhcmUgYSBmZXcgdmlydHVhbCBNRElPIGRyaXZlcnMgbGlrZSBgbWRpby1iY20tdW5pbWFjYC4KVGhlIGtleSBpcyB0byBkZXRlcm1pbmUgaWYgSSBjYW4gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IFBIWSBkZXZpY2VzIHdpdGggYXJiaXRyYXJ5IElEcyB0aHJvdWdoIGEgdmlydHVhbCBkcml2ZXIgaW4gc3l6a2FsbGVyLiBJZiBub3QsIEkmIzM5O20gc3R1Y2suCkxldCYjMzk7cyBzZWUgaWYgc3l6a2FsbGVyIGhhcyBNRElPIGRlc2NyaXB0aW9ucyBhbmQgaG93IGl0IGhhbmRsZXMgdGhlbS4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIGdldHRpbmcgdGhpcyBkcml2ZXIgdGVzdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvZHNhLmM9NjIyPXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxubmV0L2RzYS9kc2EuYy02NTQtXHRpZiAoIWRzLVx1MDAzZXVzZXJfbWlpX2J1cyBcdTAwMjZcdTAwMjYgZHMtXHUwMDNlb3BzLVx1MDAzZXBoeV9yZWFkKSB7XG5uZXQvZHNhL2RzYS5jOjY1NTpcdFx0ZHMtXHUwMDNldXNlcl9taWlfYnVzID0gbWRpb2J1c19hbGxvYygpO1xubmV0L2RzYS9kc2EuYy02NTYtXHRcdGlmICghZHMtXHUwMDNldXNlcl9taWlfYnVzKSB7XG4tLVxubmV0L2RzYS9kc2EuYy02NjItXG5uZXQvZHNhL2RzYS5jOjY2MzpcdFx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihkcy1cdTAwM2V1c2VyX21paV9idXMpO1xubmV0L2RzYS9kc2EuYy02NjQtXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2RzYS9kc2EuYy02NzQtXHRpZiAoZHMtXHUwMDNldXNlcl9taWlfYnVzIFx1MDAyNlx1MDAyNiBkcy1cdTAwM2VvcHMtXHUwMDNlcGh5X3JlYWQpXG5uZXQvZHNhL2RzYS5jOjY3NTpcdFx0bWRpb2J1c19mcmVlKGRzLVx1MDAzZXVzZXJfbWlpX2J1cyk7XG5uZXQvZHNhL2RzYS5jLTY3Ni10ZWFyZG93bjpcbi0tXG5uZXQvZHNhL2RzYS5jPTY4Nj1zdGF0aWMgdm9pZCBkc2Ffc3dpdGNoX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5uZXQvZHNhL2RzYS5jLTY5My1cdGlmIChkcy1cdTAwM2V1c2VyX21paV9idXMgXHUwMDI2XHUwMDI2IGRzLVx1MDAzZW9wcy1cdTAwM2VwaHlfcmVhZCkge1xubmV0L2RzYS9kc2EuYzo2OTQ6XHRcdG1kaW9idXNfdW5yZWdpc3Rlcihkcy1cdTAwM2V1c2VyX21paV9idXMpO1xubmV0L2RzYS9kc2EuYzo2OTU6XHRcdG1kaW9idXNfZnJlZShkcy1cdTAwM2V1c2VyX21paV9idXMpO1xubmV0L2RzYS9kc2EuYy02OTYtXHRcdGRzLVx1MDAzZXVzZXJfbWlpX2J1cyA9IE5VTEw7XG4tLVxubmV0L2RzYS9wb3J0LmMtMTEtI2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxubmV0L2RzYS9wb3J0LmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbWRpby5oXHUwMDNlXG5uZXQvZHNhL3BvcnQuYy0xMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxuLS1cbm5ldC9kc2EvcG9ydC5jPTE3MjY9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkc2Ffc3dpdGNoZXNfYXBwbHlfd29ya2Fyb3VuZHNbXSA9IHtcbi0tXG5uZXQvZHNhL3BvcnQuYy0xNzk2LSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKVxubmV0L2RzYS9wb3J0LmM6MTc5NzpcdFwmIzM0O3Ntc2MsbGFuOTMwMy1tZGlvXCYjMzQ7LFxubmV0L2RzYS9wb3J0LmMtMTc5OC0jZW5kaWZcbi0tXG5uZXQvZHNhL3VzZXIuYy0xMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxubmV0L2RzYS91c2VyLmM6MTQ6I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbWRpby5oXHUwMDNlXG5uZXQvZHNhL3VzZXIuYzoxNTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2Vcbm5ldC9kc2EvdXNlci5jLTE2LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4tLVxubmV0L2RzYS91c2VyLmM9MjYzNz1zdGF0aWMgaW50IGRzYV91c2VyX3BoeV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICp1c2VyX2RldiwgaW50IGFkZHIsXG4tLVxubmV0L2RzYS91c2VyLmMtMjY0Mi1cbm5ldC9kc2EvdXNlci5jOjI2NDM6XHR1c2VyX2Rldi1cdTAwM2VwaHlkZXYgPSBtZGlvYnVzX2dldF9waHkoZHMtXHUwMDNldXNlcl9taWlfYnVzLCBhZGRyKTtcbm5ldC9kc2EvdXNlci5jLTI2NDQtXHRpZiAoIXVzZXJfZGV2LVx1MDAzZXBoeWRldikge1xuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jPTU4Nz1jb252ZXJ0X2xlZ2FjeV9zZXR0aW5nc190b19saW5rX2tzZXR0aW5ncyhcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYy02MjEtXHRcdD0gbGVnYWN5X3NldHRpbmdzLVx1MDAzZWF1dG9uZWc7XG5uZXQvZXRodG9vbC9jb21tb24uYzo2MjI6XHRsaW5rX2tzZXR0aW5ncy1cdTAwM2ViYXNlLm1kaW9fc3VwcG9ydFxubmV0L2V0aHRvb2wvY29tbW9uLmM6NjIzOlx0XHQ9IGxlZ2FjeV9zZXR0aW5ncy1cdTAwM2VtZGlvX3N1cHBvcnQ7XG5uZXQvZXRodG9vbC9jb21tb24uYy02MjQtXHRsaW5rX2tzZXR0aW5ncy1cdTAwM2ViYXNlLmV0aF90cF9tZGl4XG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz0zODI9Y29udmVydF9saW5rX2tzZXR0aW5nc190b19sZWdhY3lfc2V0dGluZ3MoXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy00MTItXHRcdD0gbGlua19rc2V0dGluZ3MtXHUwMDNlYmFzZS5hdXRvbmVnO1xubmV0L2V0aHRvb2wvaW9jdGwuYzo0MTM6XHRsZWdhY3lfc2V0dGluZ3MtXHUwMDNlbWRpb19zdXBwb3J0XG5uZXQvZXRodG9vbC9pb2N0bC5jOjQxNDpcdFx0PSBsaW5rX2tzZXR0aW5ncy1cdTAwM2ViYXNlLm1kaW9fc3VwcG9ydDtcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDE1LVx0bGVnYWN5X3NldHRpbmdzLVx1MDAzZWV0aF90cF9tZGl4XG4tLVxubmV0L2V0aHRvb2wvcGh5LmM9NzA9c3RhdGljIGludCBwaHlfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXG4tLVxubmV0L2V0aHRvb2wvcGh5LmMtOTEtXG5uZXQvZXRodG9vbC9waHkuYzo5MjpcdHJlcF9kYXRhLVx1MDAzZW5hbWUgPSBrc3RyZHVwKGRldl9uYW1lKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiksIEdGUF9LRVJORUwpO1xubmV0L2V0aHRvb2wvcGh5LmMtOTMtXHRpZiAoIXJlcF9kYXRhLVx1MDAzZW5hbWUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDc6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MzQKCQkJCQkJCW91dHB1dDogMTM3CgkJCQkJCQl0aG91Z2h0czogOTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBUYXJnZXQgQ29kZSBmb3IgRnV6emluZyBGZWFzaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZ3JlcHBlciBvdXRwdXQgcG9pbnRlZCBtZSB0b3dhcmRzIE1ESU8gdXNhZ2Ugd2l0aGluIERTQSBhbmQgZXRodG9vbCwgYW5kIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55IHdheSB0byBnZXQgYSBQSFkgZGV2aWNlIGluc3RhbnRpYXRlZCBmcm9tIHVzZXJzcGFjZS4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgYG1kaW9idXNfcmVnaXN0ZXJgLCB3aGljaCBpcyBjYWxsZWQgYnkgTURJTyBidXMgZHJpdmVycywgYW5kIHdoZXRoZXIgU3l6a2FsbGVyIGNvdWxkIHRyaWdnZXIgdGhlIGNyZWF0aW9uIG9mIGFuIE1ESU8gYnVzLiBQb3RlbnRpYWxseSwgSSB0aG91Z2h0IG1heWJlIGEgdmlydHVhbCBkcml2ZXIgY291bGQgZG8gdGhpcy4KCkhvd2V2ZXIsIGEgZGVlcGVyIGxvb2sgcmV2ZWFscyBzb21lIHNpZ25pZmljYW50IGh1cmRsZXMuIFRoZSB0YXJnZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBldGhlcm5ldC1waHktcGFja2FnZWAgZHJpdmVyLCByZWxpZXMgaGVhdmlseSBvbiBhIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGUgc3RydWN0dXJlLiBJdCBuZWVkcyBgZGV2LSZndDtvZl9ub2RlYCB0byBleGlzdCBhbmQgaXRzIHBhcmVudCB0byBiZSBuYW1lZCBgJiMzNDtldGhlcm5ldC1waHktcGFja2FnZSYjMzQ7YC4gSXQmIzM5O3MgcHJldHR5IHN0cmljdCBhYm91dCB0aGlzLCBpbW1lZGlhdGVseSByZXR1cm5pbmcgYW4gZXJyb3IgaWYgdGhlc2UgY29uZGl0aW9ucyBhcmVuJiMzOTt0IG1ldC4KCkluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VICh3aGljaCBTeXprYWxsZXIgdXNlcyksIGBkZXYtJmd0O29mX25vZGVgIGlzIGdvaW5nIHRvIGJlIE5VTEwgdW5sZXNzIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUgaXMgcHJvdmlkZWQuIFN5emthbGxlciBkb2VzbiYjMzk7dCBpbmplY3QgYXJiaXRyYXJ5IGRldmljZSB0cmVlIG5vZGVzIGR1cmluZyBydW50aW1lOyB0aGUgZGV2aWNlIHRyZWUgaXMgZml4ZWQgYXQgYm9vdCB0aW1lLCBwcm92aWRlZCBieSBRRU1VLiBUaGF0IG1lYW5zIHVubGVzcyB0aGUgUUVNVSBtYWNoaW5lIHVzZWQgYnkgc3l6a2FsbGVyIChsaWtlIGBxMzVgLCBgcGNgIGZvciB4ODYgb3IgYHZpcnRgIGZvciBhcm02NCkgaGFzIHRoaXMgKmV4YWN0KiBkZXZpY2UgdHJlZSBub2RlLCB0aGUgZHJpdmVyIHdpbGwgbmV2ZXIgcHJvYmUgc3VjY2Vzc2Z1bGx5LiBBbmQgU3l6a2FsbGVyIGRlZmluaXRlbHkgZG9lc24mIzM5O3QgdXNlIGEgY3VzdG9tIGRldmljZSB0cmVlIHdpdGggdGhpbmdzIGxpa2UgYCYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlJiMzNDtgIG9yIGAmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZSYjMzQ7YC4gVGhpcyBpcyBhIGhhcmQgc3RvcC4KCkkgYnJpZWZseSBjb25zaWRlcmVkIGBvZl9vdmVybGF5YCBhcyBhIHBvdGVudGlhbCB3b3JrYXJvdW5kLCBpZiBgQ09ORklHX09GX09WRVJMQVlgIHdhcyBlbmFibGVkIGFuZCB0aGVyZSB3YXMgYSB1c2Vyc3BhY2UgaW50ZXJmYWNlIHRvIGxvYWQgb3ZlcmxheXMuIEJ1dCBpdCYjMzk7cyBoaWdobHkgdW5saWtlbHkgU3l6a2FsbGVyIGdlbmVyYXRlcyB2YWxpZCBPRiBvdmVybGF5cyBmb3IgdGhpcyBzcGVjaWZpYyBQSFkgZHJpdmVyLCBhbmQgSSBkb24mIzM5O3QgdGhpbmsgT0Ygb3ZlcmxheXMgYXJlIHVzdWFsbHkgbG9hZGVkIGZyb20gdXNlcnNwYWNlLiBGdXJ0aGVybW9yZSwgdGhlIGRyaXZlciBhbHNvIHJlcXVpcmVzIEkyQyBkZXZpY2VzLCByZWd1bGF0b3JzLCBhbmQgY2xvY2tzLiBJdCB3aWxsIG5lZWQgYSBjb21wbGV4IGRldmljZSB0cmVlIHNldHVwLgoKU28sIHRoaXMgbG9va3MgbGlrZSBhIGhhcmR3YXJlLXNwZWNpZmljIGFuZCBoaWdobHkgdW5saWtlbHkgcGF0aCBpbiBhbnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBkcml2ZXIgZXhwZWN0cyBzcGVjaWZpYyBoYXJkd2FyZSAoWC1Qb3dlcnMgQUMyMDAvQUMzMDApIGFuZCByZWxhdGVkIHNldHRpbmdzLCBhbmQgaXQgd29uJiMzOTt0IHdvcmsgd2l0aG91dCBhIGRldmljZSB0cmVlIHRoYXQgaGFzIHRoZSByaWdodCBzZXR1cC4KCk5vdywgbGV0IG1lIGdvIGJhY2sgdG8gdGhlIHJ1bGUuLi4gJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAtIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGlzIHBlcmZlY3RseSBtYXRjaGVzIHRoaXMgc2l0dWF0aW9uLgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHBhdGNoIGlzIG5vdCB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiBzdHJpY3RseSByZXF1aXJlcyBhIHNwZWNpZmljIERldmljZSBUcmVlIGNvbmZpZ3VyYXRpb24gKGRldi1cdTAwM2VvZl9ub2RlIG11c3QgYmUgcHJlc2VudCwgcGFyZW50IG11c3QgYmUgJiMzOTtldGhlcm5ldC1waHktcGFja2FnZSYjMzk7LCBzcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZ3MsIHJlZ3VsYXRvcnMsIGNsb2NrcywgYW5kIEkyQyBkZXZpY2VzKS4gU2luY2Ugc3l6a2FsbGVyIHJ1bnMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUpIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgZGV2aWNlIHRyZWUgc2V0dXAsIHRoZSBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uIHN0cmljdGx5IHJlcXVpcmVzIGEgc3BlY2lmaWMgRGV2aWNlIFRyZWUgY29uZmlndXJhdGlvbiAoZGV2LVx1MDAzZW9mX25vZGUgbXVzdCBiZSBwcmVzZW50LCBwYXJlbnQgbXVzdCBiZSAmIzM5O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzOTssIHNwZWNpZmljIGNvbXBhdGlibGUgc3RyaW5ncywgcmVndWxhdG9ycywgY2xvY2tzLCBhbmQgSTJDIGRldmljZXMpLiBTaW5jZSBzeXprYWxsZXIgcnVucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSkgd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGFuZCBkZXZpY2UgdHJlZSBzZXR1cCwgdGhlIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDc6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA3OjExOjI2LjM1NDA2NTYwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNjI4MDY1OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIHN0cmljdGx5IHJlcXVpcmVzIGEgc3BlY2lmaWMgRGV2aWNlIFRyZWUgY29uZmlndXJhdGlvbiAoZGV2LVxcdTAwM2VvZl9ub2RlIG11c3QgYmUgcHJlc2VudCwgcGFyZW50IG11c3QgYmUgJ2V0aGVybmV0LXBoeS1wYWNrYWdlJywgc3BlY2lmaWMgY29tcGF0aWJsZSBzdHJpbmdzLCByZWd1bGF0b3JzLCBjbG9ja3MsIGFuZCBJMkMgZGV2aWNlcykuIFNpbmNlIHN5emthbGxlciBydW5zIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSB3aXRob3V0IHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGRldmljZSB0cmVlIHNldHVwLCB0aGUgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDc6MTE6MjYuMzU0MDcyMTU0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI3NDA0MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2FmM2YzOWQwNTlkNjljMmFlYzhmYTE0ZTdmOWQxOTNhZmM3ZWFiYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwNzoxMToyNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWU5MGM0ZmZlY2NlYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXFxuQEAgLTAsMCArMSwxNjUgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZXNcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjpcXG4rICBUaGUgQUMyMDAgYW5kIEFDMzAwIGNvbnRhaW4gY29tcGF0aWJsZSBGYXN0IEV0aGVybmV0IFBIWSBibG9ja3Mgd2hpY2ggcmVwb3J0XFxuKyAgdGhlIHNhbWUgQ2xhdXNlIDIyIFBIWSBJRCBhbmQgdXNlIHRoZSBzYW1lIGxpbmstc2lkZSByZWdpc3RlciBsYXlvdXQuIFRoZVxcbisgIHBhY2thZ2UgY29udHJvbCBwYXRocyBkaWZmZXIuIEFDMjAwIHBhY2thZ2UgY29udHJvbCByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkXFxuKyAgdGhyb3VnaCB0aGUgY29tcGFuaW9uIElDJ3MgSTJDIHJlZ2lzdGVyIGludGVyZmFjZSwgd2hpbGUgQUMzMDAgY29udHJvbFxcbisgIHJlZ2lzdGVycyBvY2N1cHkgYSBzZWNvbmQgQ2xhdXNlIDIyIGFkZHJlc3MgZml4ZWQgYXQgMTYgcGx1cyB0aGUgbGluayBQSFlcXG4rICBhZGRyZXNzLlxcbitcXG4rICBTeXN0ZW1zIHdpdGggYSBrbm93biBwYWNrYWdlIHVzZSB0aGUgY29ycmVzcG9uZGluZyBBQzIwMCBvciBBQzMwMCBjb21wYXRpYmxlLlxcbisgIFN5c3RlbXMgd2hpY2ggY2FuIGNvbnRhaW4gZWl0aGVyIHBhY2thZ2UgdXNlIHRoZSBBQ3gwMCBjb21wYXRpYmxlIGFuZCBhXFxuKyAgcGFja2VkIE5WTUVNIGNvbmZpZ3VyYXRpb24gZmllbGQgdG8gc2VsZWN0IHRoZSBiYWNrZW5kIGF0IHJ1bnRpbWUuXFxuK1xcbisgIFRoZSBsaW5rIFBIWSBjYW5ub3QgcmVwb3J0IGl0cyBJRCB1bnRpbCB0aGUgcGFja2FnZSBjb250cm9sIHNlcXVlbmNlIGhhc1xcbisgIGNvbXBsZXRlZCwgc28gaXRzIGNoaWxkIG5vZGUgc3VwcGxpZXMgdGhlIGRvY3VtZW50ZWQgUEhZIElELiBUaGUgcGFja2FnZSBhbmRcXG4rICBjaGlsZCB1c2UgdGhlIHNhbWUgYmFzZSBhZGRyZXNzLiBUaGUgQUMyMDAgZHJpdmVyIHByb2dyYW1zIHRoYXQgYWRkcmVzcyBpbnRvXFxuKyAgdGhlIHBhY2thZ2UsIHdoaWxlIHRoZSBBQzMwMCBkcml2ZXIgZGVyaXZlcyBpdHMgY29udHJvbCBhZGRyZXNzIGZyb20gaXQuXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBlbnVtOlxcbisgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcbisgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxcbisgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbitcXG4rICByZWc6XFxuKyAgICBtYXhpbXVtOiAzMVxcbitcXG4rICBjbG9ja3M6XFxuKyAgICBtYXhJdGVtczogMVxcbisgICAgZGVzY3JpcHRpb246IEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6XFxuK1xcbisgIHZjYy1zdXBwbHk6XFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgMy4zIFYgcGFja2FnZSBzdXBwbHkuIFRoaXMgaXMgY29ubmVjdGVkIHRvIEVQSFlfVkNDIG9uIEFDMjAwIGFuZCBWQ0MxXFxuKyAgICAgIG9uIEFDMzAwLlxcbitcXG4rICBudm1lbS1jZWxsczpcXG4rICAgIG1heEl0ZW1zOiAxXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgUGFja2VkIEVQSFkgY29uZmlndXJhdGlvbiBmaWVsZC4gQml0cyAzIHRocm91Z2ggMCBjb250YWluIHRoZSBhbmFsb2dcXG4rICAgICAgY2FsaWJyYXRpb24gY29kZSwgYml0cyA3IHRocm91Z2ggNCBhcmUgcmVzZXJ2ZWQsIGJpdCA4IHNlbGVjdHMgQUMzMDBcXG4rICAgICAgd2hlbiBzZXQgYW5kIEFDMjAwIHdoZW4gY2xlYXIsIGFuZCBiaXQgOSByZXF1ZXN0cyB0aGUgQUMzMDBcXG4rICAgICAgbG93LWNhbGlicmF0aW9uIHR1bmluZyBzZXF1ZW5jZS4gQSBmaXhlZCBBQzIwMCBwYWNrYWdlIG1heSBwcm92aWRlIG9ubHlcXG4rICAgICAgdGhlIGxvdyBjYWxpYnJhdGlvbiBiaXRzIG9yIG9taXQgdGhlIGNlbGwgYW5kIHVzZSBpdHMgaW50ZXJuYWwgZUZ1c2VcXG4rICAgICAgY29weSBpbnN0ZWFkLlxcbitcXG4rICBudm1lbS1jZWxsLW5hbWVzOlxcbisgICAgY29uc3Q6IGNvbmZpZ3VyYXRpb25cXG4rXFxuKyAgeC1wb3dlcnMsYWMyMDA6XFxuKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9waGFuZGxlXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgUGhhbmRsZSB0byB0aGUgQUMyMDAgY29tcGFuaW9uIElDIGRlc2NyaWJlZCBieSB0aGUgeC1wb3dlcnMsYWMyMDAgTUZEXFxuKyAgICAgIGJpbmRpbmcuIEl0cyBJMkMgaW50ZXJmYWNlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgcGFja2FnZSBjb250cm9sXFxuKyAgICAgIHJlZ2lzdGVycyB1c2VkIHRvIHBvd2VyIGFuZCBjb25maWd1cmUgdGhlIEV0aGVybmV0IFBIWS5cXG4rXFxuKyAgeC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZDpcXG4rICAgIHR5cGU6IGJvb2xlYW5cXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBJbnZlcnQgdGhlIHhNSUkgcmVjZWl2ZSBjbG9jayBpbnNpZGUgdGhlIFBIWS4gVGhpcyBpcyByZXF1aXJlZCBieSBzb21lXFxuKyAgICAgIFNvQyBpbnRlZ3JhdGlvbnMsIGluY2x1ZGluZyB0aGUgQWxsd2lubmVyIEg2IEFDMjAwIGNvbm5lY3Rpb24uXFxuK1xcbitwYXR0ZXJuUHJvcGVydGllczpcXG4rICBeZXRoZXJuZXQtcGh5QFthLWYwLTldKyQ6XFxuKyAgICAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcXG4rICAgIHByb3BlcnRpZXM6XFxuKyAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFxcbisgICAgcmVxdWlyZWQ6XFxuKyAgICAgIC0gY29tcGF0aWJsZVxcbisgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuKyAgLSB2Y2Mtc3VwcGx5XFxuK1xcbitkZXBlbmRlbnRSZXF1aXJlZDpcXG4rICBudm1lbS1jZWxsczogWyBudm1lbS1jZWxsLW5hbWVzIF1cXG4rXFxuK2FsbE9mOlxcbisgIC0gJHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCNcXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxuKyAgICB0aGVuOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNsb2NrczogZmFsc2VcXG4rICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxcbisgIC0gaWY6XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcXG4rICAgIHRoZW46XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgeC1wb3dlcnMsYWMyMDA6IGZhbHNlXFxuKyAgICAgIHJlcXVpcmVkOlxcbisgICAgICAgIC0gY2xvY2tzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsc1xcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xcbisgIC0gaWY6XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcXG4rICAgIHRoZW46XFxuKyAgICAgIHJlcXVpcmVkOlxcbisgICAgICAgIC0gY2xvY2tzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsc1xcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBlbnVtOlxcbisgICAgICAgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxcbisgICAgICAgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICByZWc6XFxuKyAgICAgICAgICBtYXhpbXVtOiA3XFxuKyAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxcbisgICAgICAgIF5ldGhlcm5ldC1waHlAW2EtZjAtOV0rJDpcXG4rICAgICAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgICAgIHJlZzpcXG4rICAgICAgICAgICAgICBtYXhpbXVtOiA3XFxuK1xcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAtIHxcXG4rICAgIG1kaW8ge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZwd20gNVxcdTAwM2U7XFxuKyAgICAgICAgICAgIHZjYy1zdXBwbHkgPSBcXHUwMDNjXFx1MDAyNnJlZ18zdjNcXHUwMDNlO1xcbisgICAgICAgICAgICBudm1lbS1jZWxscyA9IFxcdTAwM2NcXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXFx1MDAzZTtcXG4rICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFxcXCJjb25maWd1cmF0aW9uXFxcIjtcXG4rICAgICAgICAgICAgeC1wb3dlcnMsYWMyMDAgPSBcXHUwMDNjXFx1MDAyNmFjMjAwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAwIHtcXG4rICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwiZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXFxcIjtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rXFxuKy4uLlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuaW5kZXggYjRlZjkyN2ZkNGE2Ny4uZDM4MzU1OTdlMzc5NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuQEAgLTQ4NCw2ICs0ODQsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXFxuIFxcdGhlbHBcXG4gXFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIHZzYzgyNDRcXG4gXFxuK2NvbmZpZyBYUE9XRVJTX0FDWDAwX1BIWVxcbitcXHR0cmlzdGF0ZSBcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZXFxcIlxcbitcXHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXFx1MDAyNlxcdTAwMjYgTlZNRU0gXFx1MDAyNlxcdTAwMjYgT0ZfTURJTyBcXHUwMDI2XFx1MDAyNiBSRUdVTEFUT1JcXG4rXFx0ZGVwZW5kcyBvbiBJMkMgfHwgIUkyQ1xcbitcXHRzZWxlY3QgUEhZX1BBQ0tBR0VcXG4rXFx0aGVscFxcbitcXHQgIEVuYWJsZSB0aGUgRmFzdCBFdGhlcm5ldCBQSFkgZHJpdmVyIHNoYXJlZCBieSB0aGUgWC1Qb3dlcnMgQUMyMDBcXG4rXFx0ICBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciBjb25maWd1cmVzIHRoZWlyIGNvbW1vbiBNRElPIFBIWVxcbitcXHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxcbitcXHQgIHJlZ2lzdGVycy5cXG4rXFxuIGNvbmZpZyBYSUxJTlhfR01JSTJSR01JSVxcbiBcXHR0cmlzdGF0ZSBcXFwiWGlsaW54IEdNSUkyUkdNSUkgY29udmVydGVyIGRyaXZlclxcXCJcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcXG5pbmRleCAyNWM0YTNjMjQyOWY3Li40OTU3NWZhMTg1MjIzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxcbkBAIC0xMDEsNCArMTAxLDUgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKVxcdFxcdCs9IHNtc2Mub1xcbiBvYmotJChDT05GSUdfU1RFMTBYUClcXHRcXHQrPSBzdGUxMFhwLm9cXG4gb2JqLSQoQ09ORklHX1RFUkFORVRJQ1NfUEhZKVxcdCs9IHRlcmFuZXRpY3Mub1xcbiBvYmotJChDT05GSUdfVklURVNTRV9QSFkpXFx0Kz0gdml0ZXNzZS5vXFxuK29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSlcXHQrPSB4cG93ZXJzL1xcbiBvYmotJChDT05GSUdfWElMSU5YX0dNSUkyUkdNSUkpICs9IHhpbGlueF9nbWlpMnJnbWlpLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWU5NzdhNzk1ODMyNVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxcbkBAIC0wLDAgKzEsMyBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK3hwb3dlcnMtYWN4MDAteSA6PSBhY3gwMC5vIGFjMjAwLm8gYWMzMDAub1xcbitvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpICs9IHhwb3dlcnMtYWN4MDAub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWZkZDJhM2RmYmU0MVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXFxuQEAgLTAsMCArMSwzMTQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBYLVBvd2VycyBBQzIwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyMiBBcm0gTHRkLiAoQW5kcmUgUHJ6eXdhcmEgXFx1MDAzY2FuZHJlLnByenl3YXJhQGFybS5jb21cXHUwMDNlKVxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2kyYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVnbWFwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJhY3gwMC5oXFxcIlxcbitcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUXFx0M1xcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXFx0MjQwMDAwMDBcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWlxcdDI3MDAwMDAwXFxuK1xcbisjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHXFx0XFx0XFx0MHgwMDE0XFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRVxcdFxcdFxcdEJJVCgxKVxcbitcXG4rI2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFR1xcdFxcdFxcdDB4MDAxNlxcbisjZGVmaW5lIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRVxcdFxcdFxcdEJJVCgwKVxcbitcXG4rLyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqL1xcbisjZGVmaW5lIEFDMjAwX0VGVVNFX0VQSFlfUkVHXFx0XFx0XFx0MHg4MDA0XFxuK1xcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFR1xcdFxcdFxcdDB4NjAwMFxcbisjZGVmaW5lIEFDMjAwX0VQSFlfU0hVVERPV05cXHRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLXFx0XFx0XFx0R0VOTUFTSyg4LCA0KVxcbisjZGVmaW5lIEFDMjAwX0VQSFlfUk1JSV9TRUxcXHRcXHRcXHRCSVQoMTEpXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0tcXHRcXHRHRU5NQVNLKDE1LCAxMilcXG4rXFxuK3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcXG4rXFx0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xcbitcXHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4rXFx0dTE2IGVwaHlfY3RsO1xcbitcXHR1bnNpZ25lZCBpbnQgcGh5X2FkZHI7XFxuK1xcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XFxuK1xcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XFxuK1xcdGJvb2wgcG93ZXJlZDtcXG4rfTtcXG4rXFxuK3N0YXRpYyB1MTYgYWMyMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlZXBoeV9jdGwgfFxcbitcXHRcXHQocHJpdi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XFxuK1xcdFxcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LVxcdTAwM2VwaHlfYWRkcik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVxcdTAwM2VyZWdtYXAsIHJlZywgdmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfZXJyKHByaXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmVnLCBFUlJfUFRSKHJldCkpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKSB7XFxuK1xcdFxcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgQUMyMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdFxcdGVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLCAwKTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFx0XFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcXG4rXFx0XFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cXHUwMDNldmNjKTtcXG4rXFx0XFx0aWYgKCFlcnIpXFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XFxuK1xcdFxcdGVsc2UgaWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcXG4re1xcbitcXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFxuK1xcdHJldHVybiBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK2FjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBBQzIwMF9FUEhZX0NUTF9SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCBBQzIwMF9FUEhZX1JNSUlfU0VMLFxcbitcXHRcXHRcXHRcXHRcXHQgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0XFx0XFx0XFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKVxcbit7XFxuK1xcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXHR1MTYgZXBoeV9jdGw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocGh5X2FkZHIgXFx1MDAzZSBGSUVMRF9NQVgoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VwaHlfYWRkciA9PSBwaHlfYWRkcilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZCkge1xcbitcXHRcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcdHByaXYtXFx1MDAzZXBoeV9hZGRyID0gcGh5X2FkZHI7XFxuK1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXN1cHBseV9lbmFibGVkKSB7XFxuK1xcdFxcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cXHUwMDNldmNjKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRlcGh5X2N0bCA9IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFN0YXJ0IGZyb20gYSBkaXNhYmxlZCBzdGF0ZSBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyYXRpb24uIEFDMjAwXFxuK1xcdCAqIHNwZWNpZmllcyBubyBhZGRpdGlvbmFsIGRlbGF5IGJldHdlZW4gdGhlc2UgY29udHJvbHMuIFRoZSBjb21wYW5pb25cXG4rXFx0ICogTUZEIHByb3ZpZGVyIGhhcyBjb21wbGV0ZWQgaXRzIGlucHV0LWNsb2NrIHN0YXJ0dXAgZGVsYXkgYmVmb3JlXFxuK1xcdCAqIHB1Ymxpc2hpbmcgdGhlIHJlZ21hcC5cXG4rXFx0ICovXFxuK1xcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfZGlzYWJsZTtcXG4rXFxuK1xcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBlcGh5X2N0bCB8IEFDMjAwX0VQSFlfU0hVVERPV04pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxcbitcXHRcXHRcXHRcXHQgICBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRwcml2LVxcdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfZGlzYWJsZTpcXG4rXFx0LyogQXR0ZW1wdCBldmVyeSBzdGVwIG9mIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSBhZnRlciBhIHBhcnRpYWwgc3RhcnQuICovXFxuK1xcdHByaXYtXFx1MDAzZXBvd2VyZWQgPSB0cnVlO1xcbitcXHRhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHR1bnNpZ25lZCBpbnQgaW50ZXJuYWxfY2FsaWJyYXRpb247XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWMyMDBfbm9kZTtcXG4rXFx0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2O1xcbitcXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50O1xcbitcXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xcbitcXHR1OCBicHNfZWZmdXNlX2NvZGU7XFxuK1xcdHN0cnVjdCBjbGsgKmNsaztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0cHJpdi1cXHUwMDNlZGV2ID0gZGV2O1xcbitcXHRwcml2LVxcdTAwM2V2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsIFxcXCJ2Y2NcXFwiKTtcXG4rXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2V2Y2MpKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVxcdTAwM2V2Y2MpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XFxcXG5cXFwiKSk7XFxuK1xcbitcXHRhYzIwMF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwYWNrYWdlX25vZGUsIFxcXCJ4LXBvd2VycyxhYzIwMFxcXCIsIDApO1xcbitcXHRpZiAoIWFjMjAwX25vZGUpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJtaXNzaW5nIHgtcG93ZXJzLGFjMjAwIHJlZmVyZW5jZVxcXFxuXFxcIikpO1xcbitcXHRjbGllbnQgPSBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShhYzIwMF9ub2RlKTtcXG4rXFx0b2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7XFxuK1xcdGlmICghY2xpZW50KSB7XFxuK1xcdFxcdHJldCA9IElTX0VOQUJMRUQoQ09ORklHX0kyQykgPyAtRVBST0JFX0RFRkVSIDogLUVOT0RFVjtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiQUMyMDAgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkXFxcXG5cXFwiKSk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZGV2aWNlX2xpbmtfYWRkKGRldiwgXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgICAgIERMX0ZMQUdfQVVUT1JFTU9WRV9DT05TVU1FUikpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIGxpbmsgQUMyMDAgZGV2aWNlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X2NsaWVudDtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2aWNlX2xvY2soXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKGRldmljZV9pc19ib3VuZChcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYpKVxcbitcXHRcXHRwcml2LVxcdTAwM2VyZWdtYXAgPSBkZXZfZ2V0X3JlZ21hcChcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIE5VTEwpO1xcbitcXHRkZXZpY2VfdW5sb2NrKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldik7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlcmVnbWFwKSB7XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRVBST0JFX0RFRkVSLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIkFDMjAwIGRyaXZlciBpcyBub3QgcmVhZHlcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfY2xpZW50O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWhhc19jYWxpYnJhdGlvbikge1xcbitcXHRcXHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVxcdTAwM2VyZWdtYXAsIEFDMjAwX0VGVVNFX0VQSFlfUkVHLFxcbitcXHRcXHRcXHRcXHQgIFxcdTAwMjZpbnRlcm5hbF9jYWxpYnJhdGlvbik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X2Vycm9yO1xcbitcXHRcXHRjYWxpYnJhdGlvbiA9IGludGVybmFsX2NhbGlicmF0aW9uO1xcbitcXHR9XFxuK1xcbitcXHQvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovXFxuK1xcdGJwc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVQpIFxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgRklFTERfTUFYKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLKTtcXG4rXFx0cHJpdi1cXHUwMDNlZXBoeV9jdGwgPVxcbitcXHRcXHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLLCBicHNfZWZmdXNlX2NvZGUpO1xcbitcXHQvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXFxuK1xcbitcXHRjbGsgPSBjbGtfZ2V0KFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldiwgTlVMTCk7XFxuK1xcdGlmIChJU19FUlIoY2xrKSkge1xcbitcXHRcXHRyZXQgPSBQVFJfRVJSKGNsayk7XFxuK1xcdFxcdGdvdG8gb3V0X2Vycm9yO1xcbitcXHR9XFxuK1xcbitcXHQvKiBUaGUgYm91bmQgQUMyMDAgcHJvdmlkZXIgZW5hYmxlcyBhbmQgZXhjbHVzaXZlbHkgcGlucyB0aGlzIHJhdGUuICovXFxuK1xcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XFxuK1xcdGNsa19wdXQoY2xrKTtcXG4rXFxuK1xcdHN3aXRjaCAoY2xrX3JhdGUpIHtcXG4rXFx0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlZXBoeV9jdGwgfD0gQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJ1bnN1cHBvcnRlZCBBQzIwMCBjbG9jayByYXRlICVsdSBIelxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIGNsa19yYXRlKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X2NsaWVudDtcXG4rXFx0fVxcbitcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29uO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcXG4rXFx0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xcbitcXHRwdXRfZGV2aWNlKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldik7XFxuK1xcbitcXHRyZXR1cm4gXFx1MDAyNnByaXYtXFx1MDAzZWNvbnRyb2w7XFxuK1xcbitvdXRfZXJyb3I6XFxuK1xcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBBQzIwMCBjb250cm9sXFxcXG5cXFwiKTtcXG4rb3V0X3B1dF9jbGllbnQ6XFxuK1xcdHB1dF9kZXZpY2UoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KTtcXG4rXFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWE1NjA0MzJhMTRjOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXFxuQEAgLTAsMCArMSwzODcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBYLVBvd2VycyBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcIi4uL3BoeWxpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYWN4MDAuaFxcXCJcXG4rXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVFxcdDNcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWlxcdDI0MDAwMDAwXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFpcXHQyNTAwMDAwMFxcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXFx0MjcwMDAwMDBcXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUdcXHRcXHRcXHQweDAwXFxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTS1xcdFxcdEdFTk1BU0soMTEsIDgpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMX01BU0tcXHRcXHRcXHRHRU5NQVNLKDcsIDYpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWlxcdFxcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDApXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWlxcdFxcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDEpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWlxcdFxcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDIpXFxuKyNkZWZpbmUgQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRVxcdFxcdFxcdEJJVCg1KVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEVcXHRcXHRCSVQoNClcXG4rI2RlZmluZSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFxcdFxcdEJJVCgxKVxcbisjZGVmaW5lIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlRcXHRcXHRCSVQoMClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExET1xcdFxcdEJJVCgzKVxcbisjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTS1xcdFxcdEdFTk1BU0soMiwgMClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0JJQVMxX1JFR1xcdFxcdFxcdDB4MDJcXG4rI2RlZmluZSBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRVxcdFxcdEJJVCgxNSlcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0lPX1JFR1xcdFxcdFxcdDB4MDVcXG4rI2RlZmluZSBBQzMwMF9NRElPX0RSVl9NQVNLXFx0XFx0XFx0R0VOTUFTSygxNSwgMTQpXFxuKyNkZWZpbmUgQUMzMDBfTUlJX0RSVl9NQVNLXFx0XFx0XFx0R0VOTUFTSygxMSwgMTApXFxuKyNkZWZpbmUgQUMzMDBfSU9fRFJWX0xFVkVMXzJcXHRcXHRcXHQyXFxuKyNkZWZpbmUgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRVxcdFxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRVxcdFxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NPTkZJR19SRUdcXHRcXHRcXHQweDA2XFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0tcXHRcXHRHRU5NQVNLKDE1LCAxMilcXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMXFx0XFx0XFx0QklUKDExKVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfU0hVVERPV05cXHRcXHRcXHRCSVQoMClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXFxcXFxcbitcXHQoQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEUgfCBcXFxcXFxuK1xcdCBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFxcXFxcXG4rXFx0IEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpXFxuK1xcbisjZGVmaW5lIEFDMzAwX1NZU19JT19WQUxVRSBcXFxcXFxuK1xcdChGSUVMRF9QUkVQKEFDMzAwX01ESU9fRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXFxcXG4rXFx0IEZJRUxEX1BSRVAoQUMzMDBfTUlJX0RSVl9NQVNLLCBBQzMwMF9JT19EUlZfTEVWRUxfMikgfCBcXFxcXFxuK1xcdCBBQzMwMF9DTEtJTl9QQURfRU5BQkxFIHwgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFKVxcbitcXG4rc3RydWN0IGFjMzAwX2VwaHlfY3RsIHtcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbitcXHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XFxuK1xcdHN0cnVjdCBjbGsgKmNsaztcXG4rXFx0dTE2IHN5c19jb250cm9sO1xcbitcXHR1MTYgZXBoeV9jb25maWc7XFxuK1xcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XFxuK1xcdGJvb2wgcGFja2FnZV9rbm93bjtcXG4rXFx0Ym9vbCBpbnRlcm5hbF9kbGRvO1xcbitcXHRib29sIHN1cHBseV9lbmFibGVkO1xcbitcXHRib29sIHBvd2VyZWQ7XFxuK307XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgaW50XFxuK2FjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXFxuK3tcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZXBoeWRldi1cXHUwMDNlbWRpby5hZGRyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcXG4rXFx0XFx0XFx0XFx0dTE2IHZhbClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwcml2LVxcdTAwM2VwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0sIHZhbCk7XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcXG4rXFx0XFx0XFx0XFx0IHUxNiBtYXNrLCB1MTYgc2V0KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0dTE2IHZhbCA9IChyZXQgXFx1MDAyNiB+bWFzaykgfCAoc2V0IFxcdTAwMjYgbWFzayk7XFxuK1xcbitcXHRcXHRyZXQgPSB2YWwgPT0gcmV0ID8gMCA6XFxuK1xcdFxcdFxcdF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcmVnbnVtLCB2YWwpO1xcbitcXHR9XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlZXBoeV9jb25maWcgfFxcbitcXHRcXHQocHJpdi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0IEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogQSBjaGlwIHJlc2V0IHJlc3RvcmVzIERMRE9FTiB0byBvbmUuIFVudGlsIFBLR19TVEFUVVMgaGFzIGlkZW50aWZpZWRcXG4rXFx0ICogdGhlIHN1cHBseSBhcnJhbmdlbWVudCwgcHJlc2VydmUgYW55IGV4dGVybmFsLVZERCBzZXR1cCBsZWZ0IGJ5IHRoZVxcbitcXHQgKiBib290bG9hZGVyIGJ5IGFzc2VydGluZyBvbmx5IHRoZSBFUEhZIHJlc2V0LlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuICFwcml2LVxcdTAwM2VwYWNrYWdlX2tub3duIHx8ICFwcml2LVxcdTAwM2VpbnRlcm5hbF9kbGRvID9cXG4rXFx0XFx0QUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCA6IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZCkge1xcbitcXHRcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xcbitcXHRcXHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLCAwKTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFx0XFx0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHRcXHQgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRyZXQgPSBlcnI7XFxuK1xcbitcXHRcXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cXHUwMDNlY2xrKTtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcXG4rXFx0XFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cXHUwMDNldmNjKTtcXG4rXFx0XFx0aWYgKCFlcnIpXFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XFxuK1xcdFxcdGVsc2UgaWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcXG4re1xcbitcXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFxuK1xcdHJldHVybiBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK2FjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQUMzMDBfRVBIWV9STUlJX1NFTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFx0dTggcGFja2FnZV9zdGF0dXM7XFxuK1xcdHUxNiByZXNldF92YWx1ZTtcXG4rXFx0aW50IHN5c19jb250cm9sO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeV9hZGRyICE9IGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXN1cHBseV9lbmFibGVkKSB7XFxuK1xcdFxcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cXHUwMDNldmNjKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xcbitcXG4rXFx0XFx0LyogV2FpdCBmb3IgdGhlIHBvd2VyLW9uIHJlc2V0IGludGVydmFsIHNwZWNpZmllZCBieSB0aGUgbWFudWFsLiAqL1xcbitcXHRcXHRmc2xlZXAoMTAwMDApO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cXHUwMDNlY2xrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXHRwcml2LVxcdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcXG4rXFxuK1xcdC8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi9cXG4rXFx0cmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTtcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLCByZXNldF92YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdC8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovXFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XFxuK1xcdFxcdFxcdFxcdCAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdC8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi9cXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBwcml2LVxcdTAwM2VzeXNfY29udHJvbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdHN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpO1xcbitcXHRpZiAoc3lzX2NvbnRyb2wgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHJldCA9IHN5c19jb250cm9sO1xcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcdH1cXG4rXFxuK1xcdHBhY2thZ2Vfc3RhdHVzID0gRklFTERfR0VUKEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0ssIHN5c19jb250cm9sKTtcXG4rXFx0aWYgKCh+cGFja2FnZV9zdGF0dXMgXFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9XFxuK1xcdCAgICBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcm5hbF9kbGRvID0gcGFja2FnZV9zdGF0dXMgXFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPO1xcbitcXHRwcml2LVxcdTAwM2VwYWNrYWdlX2tub3duID0gdHJ1ZTtcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHByaXYsIEFDMzAwX1NZU19CSUFTMV9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSxcXG4rXFx0XFx0XFx0XFx0ICAgcHJpdi1cXHUwMDNlaW50ZXJuYWxfZGxkbyA/XFxuK1xcdFxcdFxcdFxcdCAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFIDogMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdC8qIEtlZXAgdGhlIGRvY3VtZW50ZWQgZGVmYXVsdCBkcml2ZSBsZXZlbCBhbmQgbGVhdmUgdGhlIElSUSBkaXNhYmxlZC4gKi9cXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgQUMzMDBfU1lTX0lPX1ZBTFVFKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0ZnNsZWVwKDEwMDAwKTtcXG4rXFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcXG4rXFx0XFx0XFx0XFx0ICBBQzMwMF9FUEhZX1NIVVRET1dOKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0ZnNsZWVwKDEwMDAwKTtcXG4rXFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcG93ZXJfb2ZmOlxcbitcXHRhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0Y2xrX3B1dChkYXRhKTtcXG4rfVxcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdjtcXG4rXFx0dW5zaWduZWQgbG9uZyBjbGtfcmF0ZTtcXG4rXFx0dTggYmdzX2VmZnVzZV9jb2RlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXByaXYpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIgXFx1MDAzZSBGSUVMRF9NQVgoQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImxpbmsgYWRkcmVzcyBpcyBvdXRzaWRlIHRoZSBwYWNrYWdlIHJhbmdlXFxcXG5cXFwiKSk7XFxuK1xcdHByaXYtXFx1MDAzZXBoeWRldiA9IHBoeWRldjtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXFxcInZjY1xcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXZjYykpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXFx1MDAzZXZjYyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXFxcblxcXCIpKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWNsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTtcXG4rXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VjbGspKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVxcdTAwM2VjbGspLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXFxcXG5cXFwiKSk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X2Nsa19wdXQsIHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBwcml2LVxcdTAwM2VjbGspO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxcXG5cXFwiKSk7XFxuK1xcbitcXHRjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRzd2l0Y2ggKGNsa19yYXRlKSB7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJ1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBjbGtfcmF0ZSkpO1xcbitcXHR9XFxuK1xcdHByaXYtXFx1MDAzZXN5c19jb250cm9sIHw9IEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTO1xcbitcXG4rXFx0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xcbitcXHRiZ3NfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gKyBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUKSBcXHUwMDI2XFxuK1xcdFxcdFxcdCAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7XFxuK1xcdHByaXYtXFx1MDAzZWVwaHlfY29uZmlnID1cXG4rXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTtcXG4rXFx0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcXG4rXFx0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjZwcml2LVxcdTAwM2Vjb250cm9sO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lZDIzYTNjYmZlMmExXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmNcXG5AQCAtMCwwICsxLDYyMSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXJcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjIFxcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cXHUwMDNlXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbnZtZW0tY29uc3VtZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCIuLi9waHlsaWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImFjeDAwLmhcXFwiXFxuK1xcbisjZGVmaW5lIEFDWDAwX0VQSFlfSURcXHRcXHRcXHRcXHQweDAwNDQxNDAwXFxuK1xcbisjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0tcXHRHRU5NQVNLKDMsIDApXFxuKyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPV1xcdEJJVCg5KVxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9SRUdcXHRcXHRcXHQweDFmXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfTUFTS1xcdFxcdFxcdEdFTk1BU0soMTIsIDgpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV8wXFx0XFx0XFx0XFx0MFxcbisjZGVmaW5lIEFDWDAwX1BBR0VfMVxcdFxcdFxcdFxcdDFcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzJcXHRcXHRcXHRcXHQyXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV82XFx0XFx0XFx0XFx0NlxcbisjZGVmaW5lIEFDWDAwX1BBR0VfOFxcdFxcdFxcdFxcdDhcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUdcXHRcXHQweDEzXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlRcXHRCSVQoMTIpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfTUFTS1xcdFxcdEdFTk1BU0soMSwgMClcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPXFx0XFx0MlxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUdcXHRcXHQweDEyXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFXFx0MHg0ODI0XFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFR1xcdFxcdDB4MTNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRVxcdFxcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUdcXHQweDE3XFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRVxcdEJJVCgzKVxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHXFx0XFx0MHgxOFxcbisjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLXFx0XFx0R0VOTUFTSygxNCwgMTIpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFRcXHQwXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFR1xcdFxcdDB4MTBcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFXFx0MHg1NTIzXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHXFx0XFx0MHgxM1xcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFXFx0XFx0MHhmMDAwXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFR1xcdDB4MTRcXG4rI2RlZmluZSBBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXFx0MHg3MDhmXFxuKyNkZWZpbmUgQUMzMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRVxcdDB4NzA4YlxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDlcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9SRUdcXHRcXHRcXHQweDE1XFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLXFx0XFx0R0VOTUFTSygxNSwgOClcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xME1fTUFTS1xcdFxcdEdFTk1BU0soNywgMClcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRShfMTAwbSwgXzEwbSkgXFxcXFxcbitcXHQoRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0ssIChfMTAwbSkpIHwgXFxcXFxcbitcXHQgRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xME1fTUFTSywgKF8xMG0pKSlcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFIFxcXFxcXG4rXFx0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgxNSwgMHgzMClcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFIFxcXFxcXG4rXFx0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgzNSwgMHgzMylcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHXFx0XFx0MHgxOFxcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFXFx0XFx0MHgwMGJjXFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUdcXHRcXHQweDFkXFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyBCSVQoMTEpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUU1xcdDB4MDA0NFxcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSBcXFxcXFxuK1xcdChBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIHwgXFxcXFxcbitcXHQgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUylcXG4rXFxuKy8qXFxuKyAqIEFub3RoZXIgaW50ZWdyYXRpb24gb2YgdGhpcyBleGFjdC1JRCBQSFkgZG9jdW1lbnRzIGl0cyBkaWdpdGFsIHZlbmRvclxcbisgKiByZWdpc3RlciBtYXAsIHdoaWNoIGFsc28gbWF0Y2hlcyB0aGUgb2JzZXJ2ZWQgQUN4MDAgcmVzZXQgdmFsdWVzLiBUaGUgQUN4MDBcXG4rICogYW5hbG9nLXBhZ2UgZmllbGQgZW5jb2RpbmdzIHJlbWFpbiB1bnB1Ymxpc2hlZCwgc28ga2VlcCB0aG9zZSBhcyBvcGFxdWVcXG4rICogdmVuZG9yIGluaXRpYWxpemF0aW9uIHZhbHVlcyBpbnN0ZWFkIG9mIGludmVudGluZyBiaXQgZGVmaW5pdGlvbnMuXFxuKyAqL1xcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfcHJpdiB7XFxuK1xcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2w7XFxuK1xcdC8qIFNlcmlhbGl6ZXMgcGFja2FnZSBzdGF0ZSBhbmQgbXVsdGktcmVnaXN0ZXIgcG93ZXIgc2VxdWVuY2VzLiAqL1xcbitcXHRzdHJ1Y3QgbXV0ZXggc3RhdGVfbG9jaztcXG4rXFx0Ym9vbCBpc19hYzMwMDtcXG4rXFx0Ym9vbCB1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZztcXG4rXFx0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xcbit9O1xcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxcbit7XFxuK1xcdHJldHVybiBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyxcXG4rXFx0XFx0XFx0ICAgRklFTERfUFJFUChBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLLCBwYWdlKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY29udHJvbC1cXHUwMDNlcG93ZXJfb24ocHJpdi1cXHUwMDNlY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHByaXYtXFx1MDAzZXBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY29udHJvbC1cXHUwMDNlcG93ZXJfb2ZmKHByaXYtXFx1MDAzZWNvbnRyb2wpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfTkEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZWNvbnRyb2wtXFx1MDAzZXNldF9pbnRlcmZhY2UocHJpdi1cXHUwMDNlY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHBoeWRldl93YXJuKHByaXYtXFx1MDAzZXBoeWRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gcG93ZXIgb2ZmIGNvbnRyb2wgYmxvY2s6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIEVSUl9QVFIocmV0KSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFjeDAwX2VwaHlfY29udHJvbF9yZWxlYXNlKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IGRhdGE7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHUxNiAqdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG52bWVtX2NlbGwgKmNlbGw7XFxuK1xcdHNpemVfdCBpO1xcbitcXHRzaXplX3QgbGVuO1xcbitcXHR1OCAqYnVmO1xcbitcXHR1MTYgdmFsID0gMDtcXG4rXFxuK1xcdGNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChub2RlLCBuYW1lKTtcXG4rXFx0aWYgKElTX0VSUihjZWxsKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoY2VsbCk7XFxuK1xcbitcXHRidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgXFx1MDAyNmxlbik7XFxuK1xcdG52bWVtX2NlbGxfcHV0KGNlbGwpO1xcbitcXHRpZiAoSVNfRVJSKGJ1ZikpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGJ1Zik7XFxuK1xcdGlmICghbGVuIHx8IGxlbiBcXHUwMDNlIHNpemVvZigqdmFsdWUpKSB7XFxuK1xcdFxcdGtmcmVlKGJ1Zik7XFxuK1xcdFxcdHJldHVybiBsZW4gPyAtRVJBTkdFIDogLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlbjsgaSsrKVxcbitcXHRcXHR2YWwgfD0gKHUxNilidWZbaV0gXFx1MDAzY1xcdTAwM2MgKDggKiBpKTtcXG4rXFx0a2ZyZWUoYnVmKTtcXG4rXFx0KnZhbHVlID0gdmFsO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9pbml0X3BhY2thZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7XFxuK1xcdGJvb2wgc2VsZWN0YWJsZTtcXG4rXFx0Ym9vbCBmaXhlZF9hYzMwMDtcXG4rXFx0Ym9vbCBoYXNfY29uZmlndXJhdGlvbjtcXG4rXFx0dTggY2FsaWJyYXRpb247XFxuK1xcdHUzMiBiYXNlX2FkZHI7XFxuK1xcdHUxNiBjb25maWd1cmF0aW9uID0gMDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQoZGV2LVxcdTAwM2VvZl9ub2RlKTtcXG4rXFx0aWYgKCFwYWNrYWdlX25vZGUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIW9mX25vZGVfbmFtZV9lcShwYWNrYWdlX25vZGUsIFxcXCJldGhlcm5ldC1waHktcGFja2FnZVxcXCIpKSB7XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIlBIWSBpcyBub3QgaW4gYW4gRXRoZXJuZXQgUEhZIHBhY2thZ2VcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGFja2FnZV9ub2RlLCBcXFwicmVnXFxcIiwgXFx1MDAyNmJhc2VfYWRkcik7XFxuK1xcdGlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi1cXHUwMDNlbWRpby5hZGRyKSB7XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInBhY2thZ2UgYW5kIGxpbmsgUEhZIGFkZHJlc3NlcyBkaWZmZXJcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFx0fVxcbitcXG4rXFx0c2VsZWN0YWJsZSA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXFxcIik7XFxuK1xcdGZpeGVkX2FjMzAwID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxcIik7XFxuK1xcdGlmICghc2VsZWN0YWJsZSBcXHUwMDI2XFx1MDAyNiAhZml4ZWRfYWMzMDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcXCIpKSB7XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInVuc3VwcG9ydGVkIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXG4rXFx0aGFzX2NvbmZpZ3VyYXRpb24gPVxcbitcXHRcXHRvZl9wcm9wZXJ0eV9tYXRjaF9zdHJpbmcocGFja2FnZV9ub2RlLCBcXFwibnZtZW0tY2VsbC1uYW1lc1xcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXFwiY29uZmlndXJhdGlvblxcXCIpIFxcdTAwM2U9IDA7XFxuK1xcdGlmIChoYXNfY29uZmlndXJhdGlvbikge1xcbitcXHRcXHRyZXQgPSBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHBhY2thZ2Vfbm9kZSwgXFxcImNvbmZpZ3VyYXRpb25cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Y29uZmlndXJhdGlvbik7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gcmVhZCBwYWNrYWdlIGNvbmZpZ3VyYXRpb25cXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2UgaWYgKHNlbGVjdGFibGUgfHwgZml4ZWRfYWMzMDApIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwicGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzZWxlY3RhYmxlKSB7XFxuK1xcdFxcdHByaXYtXFx1MDAzZWlzX2FjMzAwID1cXG4rXFx0XFx0XFx0Y29uZmlndXJhdGlvbiBcXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDA7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHByaXYtXFx1MDAzZWlzX2FjMzAwID0gZml4ZWRfYWMzMDA7XFxuK1xcdFxcdGlmIChoYXNfY29uZmlndXJhdGlvbiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgISEoY29uZmlndXJhdGlvbiBcXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDApICE9XFxuK1xcdFxcdCAgICBwcml2LVxcdTAwM2Vpc19hYzMwMCkge1xcbitcXHRcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJjb25maWd1cmF0aW9uIGRvZXMgbm90IG1hdGNoIHBhY2thZ2VcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRjYWxpYnJhdGlvbiA9IEZJRUxEX0dFVChBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLLFxcbitcXHRcXHRcXHRcXHRjb25maWd1cmF0aW9uKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nID1cXG4rXFx0XFx0cHJpdi1cXHUwMDNlaXNfYWMzMDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ISEoY29uZmlndXJhdGlvbiBcXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVyk7XFxuK1xcdHByaXYtXFx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQgPVxcbitcXHRcXHRvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgICBcXFwieC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZFxcXCIpO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlzX2FjMzAwKVxcbitcXHRcXHRwcml2LVxcdTAwM2Vjb250cm9sID1cXG4rXFx0XFx0XFx0YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBjYWxpYnJhdGlvbik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cHJpdi1cXHUwMDNlY29udHJvbCA9XFxuK1xcdFxcdFxcdGFjMjAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgaGFzX2NvbmZpZ3VyYXRpb24sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGNhbGlicmF0aW9uKTtcXG4rXFx0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtXFx1MDAzZWNvbnRyb2wpO1xcbitcXG4rb3V0X3B1dF9ub2RlOlxcbitcXHRvZl9ub2RlX3B1dChwYWNrYWdlX25vZGUpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0cmV0ID0gcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEFDWDAwX1BBR0VfMSxcXG4rXFx0XFx0XFx0ICAgICAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICAgICAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWRldi1cXHUwMDNlb2Zfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwcml2LVxcdTAwM2VwaHlkZXYgPSBwaHlkZXY7XFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShwaHlkZXYsIHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4rXFx0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBwb3dlciBvbiBjb250cm9sIGJsb2NrXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wb3dlcl9vZmY7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Bvd2VyX29mZjtcXG4rXFxuK1xcdC8qIEFDeDAwIGNhbiBhY2tub3dsZWRnZSByZXNldCBpbiBwb3dlci1kb3duIHdpdGhvdXQgcmVzdGFydGluZy4gKi9cXG4rXFx0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wb3dlcl9vZmY7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfc29mdF9yZXNldChwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wb3dlcl9vZmY7XFxuK1xcbitcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcbitvdXRfcG93ZXJfb2ZmOlxcbitcXHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4ocHJpdik7XFxuK291dF91bmxvY2s6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdHUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi1cXHUwMDNlaXNfYWMzMDAgP1xcbitcXHRcXHRBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFIDpcXG4rXFx0XFx0QUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRTtcXG4rXFx0dTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTtcXG4rXFx0dTE2IGdsb2JhbF9jb25maWc7XFxuK1xcdGludCBvbGRwYWdlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRnbG9iYWxfY29uZmlnID0gRklFTERfUFJFUChBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLFxcbitcXHRcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQpXFxuK1xcdFxcdGdsb2JhbF9jb25maWcgfD0gQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQ7XFxuK1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8wLFxcbitcXHRcXHRcXHQgICAgICAgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUcsXFxuK1xcdFxcdFxcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XFxuK1xcdFxcdFxcdCAgICAgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLCBnbG9iYWxfY29uZmlnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xcbitcXHRcXHRhZmVfZXFfcnhfZGV0ZWN0ID1cXG4rXFx0XFx0XFx0QUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFO1xcbitcXHRcXHR0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUU7XFxuK1xcdH1cXG4rXFxuK1xcdG9sZHBhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzEpO1xcbitcXHRpZiAob2xkcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBvbGRwYWdlO1xcbitcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRSwgMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8yKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcXG4rXFx0XFx0XFx0ICAgRklFTERfUFJFUChBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV82KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgYWZlX2VxX3J4X2RldGVjdCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfOCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlzX2FjMzAwIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTtcXG4rXFxuK291dF9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldCA9IHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cXG4rXFx0cmV0ID0gZ2VucGh5X2M0NV9hbl9jb25maWdfZWVlX2FuZWcocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGdlbnBoeV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXHRyZXQgPSBfX2FjeDAwX2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX2FjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZWxvY2spO1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wb3dlcl9vZmY7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Bvd2VyX29mZjtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcG93ZXJfb2ZmO1xcbitcXG4rXFx0LyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi9cXG4rXFx0cmV0ID0gX19hY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Bvd2VyX29mZjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rb3V0X3Bvd2VyX29mZjpcXG4rXFx0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0cmV0ID0gX19hY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUocGh5ZGV2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJlc3VtZV9yZXQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBUaGUgc3VzcGVuZCBjYWxsYmFjayBpcyBpbnZva2VkIHdpdGhvdXQgdGhlIHBoeWxpYiBsb2NrIGhlbGQuICovXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBoeWRldi1cXHUwMDNlbG9jayk7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRyZXN1bWVfcmV0ID0gX19hY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJlc3VtZV9yZXQpXFxuK1xcdFxcdFxcdHBoeWRldl93YXJuKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gcmVjb3ZlciBmcm9tIHN1c3BlbmQgZXJyb3I6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIEVSUl9QVFIocmVzdW1lX3JldCkpO1xcbitcXHR9XFxuK1xcbitvdXRfdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBoeWRldi1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwaHlkZXYtXFx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xcbitcXHRib29sIG1hdGNoO1xcbitcXG4rXFx0aWYgKCFnZW5waHlfbWF0Y2hfcGh5X2RldmljZShwaHlkZXYsIHBoeWRydikgfHwgIW5vZGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogUks2MzAgcmVwb3J0cyB0aGUgc2FtZSBQSFkgSUQsIHNvIGFsc28gbWF0Y2ggdGhlIHBhY2thZ2UgaWRlbnRpdHkuICovXFxuK1xcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7XFxuK1xcdGlmICghcGFja2FnZV9ub2RlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0bWF0Y2ggPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcXFwiKSB8fFxcbitcXHRcXHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJ4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcXFwiKSB8fFxcbitcXHRcXHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcXFwiKTtcXG4rXFx0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcXG4rXFxuK1xcdHJldHVybiBtYXRjaDtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7XFxuK1xcdHtcXG4rXFx0XFx0UEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLFxcbitcXHRcXHQubmFtZSA9IFxcXCJYLVBvd2VycyBBQzIwMC9BQzMwMCBFUEhZXFxcIixcXG4rXFx0XFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXFxuK1xcdFxcdC5wcm9iZSA9IGFjeDAwX2VwaHlfcHJvYmUsXFxuK1xcdFxcdC5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSxcXG4rXFx0XFx0LndyaXRlX3BhZ2UgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UsXFxuK1xcdFxcdC5zb2Z0X3Jlc2V0ID0gYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0LFxcbitcXHRcXHQuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LFxcbitcXHRcXHQuZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSA9IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSxcXG4rXFx0XFx0LnN1c3BlbmQgPSBhY3gwMF9lcGh5X3N1c3BlbmQsXFxuK1xcdFxcdC5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSxcXG4rXFx0fSxcXG4rfTtcXG4rbW9kdWxlX3BoeV9kcml2ZXIoYWN4MDBfZXBoeV9kcml2ZXIpO1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhY3gwMF9lcGh5X3RibFtdID0ge1xcbitcXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSB9LFxcbitcXHR7IH1cXG4rfTtcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7XFxuK1xcbitNT0RVTEVfQVVUSE9SKFxcXCJKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaCBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxcbkBAIC0wLDAgKzEsMjggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisjaWZuZGVmIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxcbisjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vyci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVFxcdDE2XFxuK1xcbitzdHJ1Y3QgZGV2aWNlX25vZGU7XFxuK1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIHtcXG4rXFx0aW50ICgqcG93ZXJfb24pKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBwaHlfYWRkcik7XFxuK1xcdGludCAoKnBvd2VyX29mZikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCk7XFxuK1xcdGludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXFxuK1xcdFxcdFxcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7XFxuK307XFxuK1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcXG4rYWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxcbitcXHRcXHQgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pO1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcXG4rYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbik7XFxuK1xcbisjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDc6MTE6MjcuODgyMTUwNDI4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjkwOTk5Njk3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiBzdHJpY3RseSByZXF1aXJlcyBhIHNwZWNpZmljIERldmljZSBUcmVlIGNvbmZpZ3VyYXRpb24gKGRldi1cXHUwMDNlb2Zfbm9kZSBtdXN0IGJlIHByZXNlbnQsIHBhcmVudCBtdXN0IGJlICdldGhlcm5ldC1waHktcGFja2FnZScsIHNwZWNpZmljIGNvbXBhdGlibGUgc3RyaW5ncywgcmVndWxhdG9ycywgY2xvY2tzLCBhbmQgSTJDIGRldmljZXMpLiBTaW5jZSBzeXprYWxsZXIgcnVucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSkgd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGFuZCBkZXZpY2UgdHJlZSBzZXR1cCwgdGhlIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNhZjNmMzlkMDU5ZDY5YzJhZWM4ZmExNGU3ZjlkMTkzYWZjN2VhYmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwNzoxMToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWU5MGM0ZmZlY2NlYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxuQEAgLTAsMCArMSwxNjUgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlc1xuK1xuK21haW50YWluZXJzOlxuKyAgLSBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246XG4rICBUaGUgQUMyMDAgYW5kIEFDMzAwIGNvbnRhaW4gY29tcGF0aWJsZSBGYXN0IEV0aGVybmV0IFBIWSBibG9ja3Mgd2hpY2ggcmVwb3J0XG4rICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlXG4rICBwYWNrYWdlIGNvbnRyb2wgcGF0aHMgZGlmZmVyLiBBQzIwMCBwYWNrYWdlIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZFxuKyAgdGhyb3VnaCB0aGUgY29tcGFuaW9uIElDJ3MgSTJDIHJlZ2lzdGVyIGludGVyZmFjZSwgd2hpbGUgQUMzMDAgY29udHJvbFxuKyAgcmVnaXN0ZXJzIG9jY3VweSBhIHNlY29uZCBDbGF1c2UgMjIgYWRkcmVzcyBmaXhlZCBhdCAxNiBwbHVzIHRoZSBsaW5rIFBIWVxuKyAgYWRkcmVzcy5cbitcbisgIFN5c3RlbXMgd2l0aCBhIGtub3duIHBhY2thZ2UgdXNlIHRoZSBjb3JyZXNwb25kaW5nIEFDMjAwIG9yIEFDMzAwIGNvbXBhdGlibGUuXG4rICBTeXN0ZW1zIHdoaWNoIGNhbiBjb250YWluIGVpdGhlciBwYWNrYWdlIHVzZSB0aGUgQUN4MDAgY29tcGF0aWJsZSBhbmQgYVxuKyAgcGFja2VkIE5WTUVNIGNvbmZpZ3VyYXRpb24gZmllbGQgdG8gc2VsZWN0IHRoZSBiYWNrZW5kIGF0IHJ1bnRpbWUuXG4rXG4rICBUaGUgbGluayBQSFkgY2Fubm90IHJlcG9ydCBpdHMgSUQgdW50aWwgdGhlIHBhY2thZ2UgY29udHJvbCBzZXF1ZW5jZSBoYXNcbisgIGNvbXBsZXRlZCwgc28gaXRzIGNoaWxkIG5vZGUgc3VwcGxpZXMgdGhlIGRvY3VtZW50ZWQgUEhZIElELiBUaGUgcGFja2FnZSBhbmRcbisgIGNoaWxkIHVzZSB0aGUgc2FtZSBiYXNlIGFkZHJlc3MuIFRoZSBBQzIwMCBkcml2ZXIgcHJvZ3JhbXMgdGhhdCBhZGRyZXNzIGludG9cbisgIHRoZSBwYWNrYWdlLCB3aGlsZSB0aGUgQUMzMDAgZHJpdmVyIGRlcml2ZXMgaXRzIGNvbnRyb2wgYWRkcmVzcyBmcm9tIGl0LlxuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBlbnVtOlxuKyAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4rICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbisgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuK1xuKyAgcmVnOlxuKyAgICBtYXhpbXVtOiAzMVxuK1xuKyAgY2xvY2tzOlxuKyAgICBtYXhJdGVtczogMVxuKyAgICBkZXNjcmlwdGlvbjogQUMzMDAgaW5wdXQgY2xvY2ssIHJ1bm5pbmcgYXQgMjQsIDI1LCBvciAyNyBNSHpcbitcbisgIHZjYy1zdXBwbHk6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIDMuMyBWIHBhY2thZ2Ugc3VwcGx5LiBUaGlzIGlzIGNvbm5lY3RlZCB0byBFUEhZX1ZDQyBvbiBBQzIwMCBhbmQgVkNDMVxuKyAgICAgIG9uIEFDMzAwLlxuK1xuKyAgbnZtZW0tY2VsbHM6XG4rICAgIG1heEl0ZW1zOiAxXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFBhY2tlZCBFUEhZIGNvbmZpZ3VyYXRpb24gZmllbGQuIEJpdHMgMyB0aHJvdWdoIDAgY29udGFpbiB0aGUgYW5hbG9nXG4rICAgICAgY2FsaWJyYXRpb24gY29kZSwgYml0cyA3IHRocm91Z2ggNCBhcmUgcmVzZXJ2ZWQsIGJpdCA4IHNlbGVjdHMgQUMzMDBcbisgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxuKyAgICAgIGxvdy1jYWxpYnJhdGlvbiB0dW5pbmcgc2VxdWVuY2UuIEEgZml4ZWQgQUMyMDAgcGFja2FnZSBtYXkgcHJvdmlkZSBvbmx5XG4rICAgICAgdGhlIGxvdyBjYWxpYnJhdGlvbiBiaXRzIG9yIG9taXQgdGhlIGNlbGwgYW5kIHVzZSBpdHMgaW50ZXJuYWwgZUZ1c2VcbisgICAgICBjb3B5IGluc3RlYWQuXG4rXG4rICBudm1lbS1jZWxsLW5hbWVzOlxuKyAgICBjb25zdDogY29uZmlndXJhdGlvblxuK1xuKyAgeC1wb3dlcnMsYWMyMDA6XG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgUGhhbmRsZSB0byB0aGUgQUMyMDAgY29tcGFuaW9uIElDIGRlc2NyaWJlZCBieSB0aGUgeC1wb3dlcnMsYWMyMDAgTUZEXG4rICAgICAgYmluZGluZy4gSXRzIEkyQyBpbnRlcmZhY2UgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBwYWNrYWdlIGNvbnRyb2xcbisgICAgICByZWdpc3RlcnMgdXNlZCB0byBwb3dlciBhbmQgY29uZmlndXJlIHRoZSBFdGhlcm5ldCBQSFkuXG4rXG4rICB4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkOlxuKyAgICB0eXBlOiBib29sZWFuXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIEludmVydCB0aGUgeE1JSSByZWNlaXZlIGNsb2NrIGluc2lkZSB0aGUgUEhZLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHNvbWVcbisgICAgICBTb0MgaW50ZWdyYXRpb25zLCBpbmNsdWRpbmcgdGhlIEFsbHdpbm5lciBINiBBQzIwMCBjb25uZWN0aW9uLlxuK1xuK3BhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxuKyAgICAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcbisgICAgcHJvcGVydGllczpcbisgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFxuKyAgICByZXF1aXJlZDpcbisgICAgICAtIGNvbXBhdGlibGVcbisgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK3JlcXVpcmVkOlxuKyAgLSBjb21wYXRpYmxlXG4rICAtIHZjYy1zdXBwbHlcbitcbitkZXBlbmRlbnRSZXF1aXJlZDpcbisgIG52bWVtLWNlbGxzOiBbIG52bWVtLWNlbGwtbmFtZXMgXVxuK1xuK2FsbE9mOlxuKyAgLSAkcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuKyAgICB0aGVuOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjbG9ja3M6IGZhbHNlXG4rICAgICAgcmVxdWlyZWQ6XG4rICAgICAgICAtIHgtcG93ZXJzLGFjMjAwXG4rICAtIGlmOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXG4rICAgIHRoZW46XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZVxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSBjbG9ja3NcbisgICAgICAgIC0gbnZtZW0tY2VsbHNcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuKyAgICB0aGVuOlxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSBjbG9ja3NcbisgICAgICAgIC0gbnZtZW0tY2VsbHNcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuKyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgZW51bTpcbisgICAgICAgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuKyAgICAgICAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4rICAgIHRoZW46XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIHJlZzpcbisgICAgICAgICAgbWF4aW11bTogN1xuKyAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgICAgICAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxuKyAgICAgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgICAgIHJlZzpcbisgICAgICAgICAgICAgIG1heGltdW06IDdcbitcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rZXhhbXBsZXM6XG4rICAtIHxcbisgICAgbWRpbyB7XG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcIjtcbisgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2cHdtIDVcdTAwM2U7XG4rICAgICAgICAgICAgdmNjLXN1cHBseSA9IFx1MDAzY1x1MDAyNnJlZ18zdjNcdTAwM2U7XG4rICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSBcdTAwM2NcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cdTAwM2U7XG4rICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFwiY29uZmlndXJhdGlvblwiO1xuKyAgICAgICAgICAgIHgtcG93ZXJzLGFjMjAwID0gXHUwMDNjXHUwMDI2YWMyMDBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xuKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcIjtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbitcbisuLi5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCBiNGVmOTI3ZmQ0YTY3Li5kMzgzNTU5N2UzNzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5AQCAtNDg0LDYgKzQ4NCwxNyBAQCBjb25maWcgVklURVNTRV9QSFlcbiBcdGhlbHBcbiBcdCAgQ3VycmVudGx5IHN1cHBvcnRzIHRoZSB2c2M4MjQ0XG4gXG4rY29uZmlnIFhQT1dFUlNfQUNYMDBfUEhZXG4rXHR0cmlzdGF0ZSBcIlgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWVwiXG4rXHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXHUwMDI2XHUwMDI2IE5WTUVNIFx1MDAyNlx1MDAyNiBPRl9NRElPIFx1MDAyNlx1MDAyNiBSRUdVTEFUT1JcbitcdGRlcGVuZHMgb24gSTJDIHx8ICFJMkNcbitcdHNlbGVjdCBQSFlfUEFDS0FHRVxuK1x0aGVscFxuK1x0ICBFbmFibGUgdGhlIEZhc3QgRXRoZXJuZXQgUEhZIGRyaXZlciBzaGFyZWQgYnkgdGhlIFgtUG93ZXJzIEFDMjAwXG4rXHQgIGFuZCBBQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyIGNvbmZpZ3VyZXMgdGhlaXIgY29tbW9uIE1ESU8gUEhZXG4rXHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxuK1x0ICByZWdpc3RlcnMuXG4rXG4gY29uZmlnIFhJTElOWF9HTUlJMlJHTUlJXG4gXHR0cmlzdGF0ZSBcIlhpbGlueCBHTUlJMlJHTUlJIGNvbnZlcnRlciBkcml2ZXJcIlxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuaW5kZXggMjVjNGEzYzI0MjlmNy4uNDk1NzVmYTE4NTIyMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXG5AQCAtMTAxLDQgKzEwMSw1IEBAIG9iai0kKENPTkZJR19TTVNDX1BIWSlcdFx0Kz0gc21zYy5vXG4gb2JqLSQoQ09ORklHX1NURTEwWFApXHRcdCs9IHN0ZTEwWHAub1xuIG9iai0kKENPTkZJR19URVJBTkVUSUNTX1BIWSlcdCs9IHRlcmFuZXRpY3Mub1xuIG9iai0kKENPTkZJR19WSVRFU1NFX1BIWSlcdCs9IHZpdGVzc2Uub1xuK29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSlcdCs9IHhwb3dlcnMvXG4gb2JqLSQoQ09ORklHX1hJTElOWF9HTUlJMlJHTUlJKSArPSB4aWxpbnhfZ21paTJyZ21paS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlOTc3YTc5NTgzMjVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXG5AQCAtMCwwICsxLDMgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4reHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vXG4rb2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKSArPSB4cG93ZXJzLWFjeDAwLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFmZGQyYTNkZmJlNDFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmNcbkBAIC0wLDAgKzEsMzE0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogWC1Qb3dlcnMgQUMyMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZFxuKyAqXG4rICogQ29weXJpZ2h0IChjKSAyMDIyIEFybSBMdGQuIChBbmRyZSBQcnp5d2FyYSBcdTAwM2NhbmRyZS5wcnp5d2FyYUBhcm0uY29tXHUwMDNlKVxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJhY3gwMC5oXCJcbitcbisjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVRcdDNcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXHQyNDAwMDAwMFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcdDI3MDAwMDAwXG4rXG4rI2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFR1x0XHRcdDB4MDAxNFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMClcbisjZGVmaW5lIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRVx0XHRcdEJJVCgxKVxuK1xuKyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUdcdFx0XHQweDAwMTZcbisjZGVmaW5lIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRVx0XHRcdEJJVCgwKVxuK1xuKy8qIEFDMjAwLWludGVybmFsIGNvcHkgb2YgdGhlIEV0aGVybmV0IFBIWSBjYWxpYnJhdGlvbiBlRnVzZS4gKi9cbisjZGVmaW5lIEFDMjAwX0VGVVNFX0VQSFlfUkVHXHRcdFx0MHg4MDA0XG4rXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NUTF9SRUdcdFx0XHQweDYwMDBcbisjZGVmaW5lIEFDMjAwX0VQSFlfU0hVVERPV05cdFx0XHRCSVQoMClcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcdFx0QklUKDIpXG4rI2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0tcdFx0XHRHRU5NQVNLKDgsIDQpXG4rI2RlZmluZSBBQzIwMF9FUEhZX1JNSUlfU0VMXHRcdFx0QklUKDExKVxuKyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0tcdFx0R0VOTUFTSygxNSwgMTIpXG4rXG4rc3RydWN0IGFjMjAwX2VwaHlfY3RsIHtcbitcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcbitcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbitcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcbitcdHN0cnVjdCBkZXZpY2UgKmRldjtcbitcdHUxNiBlcGh5X2N0bDtcbitcdHVuc2lnbmVkIGludCBwaHlfYWRkcjtcbitcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4rXHRib29sIHN1cHBseV9lbmFibGVkO1xuK1x0Ym9vbCBwb3dlcmVkO1xuK307XG4rXG4rc3RhdGljIHUxNiBhYzIwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY3RsIHxcbitcdFx0KHByaXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbitcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XG4rXHRcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LVx1MDAzZXBoeV9hZGRyKTtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsdWUpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWx1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcImZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcblwiLFxuK1x0XHRcdHJlZywgRVJSX1BUUihyZXQpKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0aW50IGVycjtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuK1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4rXHRcdFx0XHRcdCAgIGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XG4rXHRcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU0hVVERPV04pO1xuK1x0XHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdHJldCA9IGVycjtcbitcdFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXG4rXHRcdHByaXYtXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xuK1x0fVxuK1xuK1x0aWYgKHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbitcdFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2V2Y2MpO1xuK1x0XHRpZiAoIWVycilcbitcdFx0XHRwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XG4rXHRcdGVsc2UgaWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbit7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcbitcdHJldHVybiBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuK31cbitcbitzdGF0aWMgaW50XG4rYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4rXHRcdHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRVBIWV9DVExfUkVHLFxuK1x0XHRcdFx0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCxcbitcdFx0XHRcdFx0IGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4rXHRcdFx0XHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4rXHRpZiAoIXJldClcbitcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXG4re1xuK1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXHR1MTYgZXBoeV9jdGw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeV9hZGRyIFx1MDAzZSBGSUVMRF9NQVgoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXBoeV9hZGRyID09IHBoeV9hZGRyKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpIHtcbitcdFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cHJpdi1cdTAwM2VwaHlfYWRkciA9IHBoeV9hZGRyO1xuK1xuK1x0aWYgKCFwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4rXHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2V2Y2MpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0ZXBoeV9jdGwgPSBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdik7XG4rXG4rXHQvKlxuK1x0ICogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gQUMyMDBcbitcdCAqIHNwZWNpZmllcyBubyBhZGRpdGlvbmFsIGRlbGF5IGJldHdlZW4gdGhlc2UgY29udHJvbHMuIFRoZSBjb21wYW5pb25cbitcdCAqIE1GRCBwcm92aWRlciBoYXMgY29tcGxldGVkIGl0cyBpbnB1dC1jbG9jayBzdGFydHVwIGRlbGF5IGJlZm9yZVxuK1x0ICogcHVibGlzaGluZyB0aGUgcmVnbWFwLlxuK1x0ICovXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsXG4rXHRcdFx0XHQgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfZGlzYWJsZTtcbitcbitcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbitcdFx0XHRcdCAgIGVwaHlfY3RsIHwgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsXG4rXHRcdFx0XHQgICBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcbitcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbitcdHJldHVybiAwO1xuK1xuK2Vycl9kaXNhYmxlOlxuK1x0LyogQXR0ZW1wdCBldmVyeSBzdGVwIG9mIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSBhZnRlciBhIHBhcnRpYWwgc3RhcnQuICovXG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1x0YWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbitcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWMyMDBfbm9kZTtcbitcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdjtcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7XG4rXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuK1x0dTggYnBzX2VmZnVzZV9jb2RlO1xuK1x0c3RydWN0IGNsayAqY2xrO1xuK1x0aW50IHJldDtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRwcml2LVx1MDAzZWRldiA9IGRldjtcbitcdHByaXYtXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcInZjY1wiKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2V2Y2MpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XFxuXCIpKTtcbitcbitcdGFjMjAwX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBhY2thZ2Vfbm9kZSwgXCJ4LXBvd2VycyxhYzIwMFwiLCAwKTtcbitcdGlmICghYWMyMDBfbm9kZSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICAgXCJtaXNzaW5nIHgtcG93ZXJzLGFjMjAwIHJlZmVyZW5jZVxcblwiKSk7XG4rXHRjbGllbnQgPSBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShhYzIwMF9ub2RlKTtcbitcdG9mX25vZGVfcHV0KGFjMjAwX25vZGUpO1xuK1x0aWYgKCFjbGllbnQpIHtcbitcdFx0cmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWO1xuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgIFwiQUMyMDAgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkXFxuXCIpKTtcbitcdH1cbitcbitcdGlmICghZGV2aWNlX2xpbmtfYWRkKGRldiwgXHUwMDI2Y2xpZW50LVx1MDAzZWRldixcbitcdFx0XHQgICAgIERMX0ZMQUdfQVVUT1JFTU9WRV9DT05TVU1FUikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJmYWlsZWQgdG8gbGluayBBQzIwMCBkZXZpY2VcXG5cIik7XG4rXHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4rXHR9XG4rXG4rXHRkZXZpY2VfbG9jayhcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbitcdGlmIChkZXZpY2VfaXNfYm91bmQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldikpXG4rXHRcdHByaXYtXHUwMDNlcmVnbWFwID0gZGV2X2dldF9yZWdtYXAoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4rXHRkZXZpY2VfdW5sb2NrKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuK1x0aWYgKCFwcml2LVx1MDAzZXJlZ21hcCkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcbitcdFx0XHRcdCAgICBcIkFDMjAwIGRyaXZlciBpcyBub3QgcmVhZHlcXG5cIik7XG4rXHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4rXHR9XG4rXG4rXHRpZiAoIWhhc19jYWxpYnJhdGlvbikge1xuK1x0XHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsXG4rXHRcdFx0XHQgIFx1MDAyNmludGVybmFsX2NhbGlicmF0aW9uKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF9lcnJvcjtcbitcdFx0Y2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbitcdH1cbitcbitcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbitcdGJwc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuK1x0XHRcdCAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7XG4rXHRwcml2LVx1MDAzZWVwaHlfY3RsID1cbitcdFx0RklFTERfUFJFUChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSywgYnBzX2VmZnVzZV9jb2RlKTtcbitcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbitcbitcdGNsayA9IGNsa19nZXQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4rXHRpZiAoSVNfRVJSKGNsaykpIHtcbitcdFx0cmV0ID0gUFRSX0VSUihjbGspO1xuK1x0XHRnb3RvIG91dF9lcnJvcjtcbitcdH1cbitcbitcdC8qIFRoZSBib3VuZCBBQzIwMCBwcm92aWRlciBlbmFibGVzIGFuZCBleGNsdXNpdmVseSBwaW5zIHRoaXMgcmF0ZS4gKi9cbitcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XG4rXHRjbGtfcHV0KGNsayk7XG4rXG4rXHRzd2l0Y2ggKGNsa19yYXRlKSB7XG4rXHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxuK1x0XHRwcml2LVx1MDAzZWVwaHlfY3RsIHw9IEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcInVuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XFxuXCIsXG4rXHRcdFx0XHQgICAgY2xrX3JhdGUpO1xuK1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuK1x0fVxuK1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247XG4rXHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xuK1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuK1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuK1x0cHV0X2RldmljZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbitcbitcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4rXG4rb3V0X2Vycm9yOlxuK1x0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBBQzIwMCBjb250cm9sXFxuXCIpO1xuK291dF9wdXRfY2xpZW50OlxuK1x0cHV0X2RldmljZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbitcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWE1NjA0MzJhMTRjOVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuY1xuQEAgLTAsMCArMSwzODcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBYLVBvd2VycyBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiLi4vcGh5bGliLmhcIlxuKyNpbmNsdWRlIFwiYWN4MDAuaFwiXG4rXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUXHQzXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWlx0MjQwMDAwMDBcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaXHQyNTAwMDAwMFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcdDI3MDAwMDAwXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUdcdFx0XHQweDAwXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLXHRcdEdFTk1BU0soMTEsIDgpXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfTUFTS1x0XHRcdEdFTk1BU0soNywgNilcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMClcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSlcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMilcbisjZGVmaW5lIEFDMzAwX0VGVVNFX0NMS19FTkFCTEVcdFx0XHRCSVQoNSlcbisjZGVmaW5lIEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEVcdFx0QklUKDQpXG4rI2RlZmluZSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFXHRcdEJJVCgyKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMSlcbisjZGVmaW5lIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlRcdFx0QklUKDApXG4rXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPXHRcdEJJVCgzKVxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLXHRcdEdFTk1BU0soMiwgMClcbitcbisjZGVmaW5lIEFDMzAwX1NZU19CSUFTMV9SRUdcdFx0XHQweDAyXG4rI2RlZmluZSBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRVx0XHRCSVQoMTUpXG4rXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHXHRcdFx0MHgwNVxuKyNkZWZpbmUgQUMzMDBfTURJT19EUlZfTUFTS1x0XHRcdEdFTk1BU0soMTUsIDE0KVxuKyNkZWZpbmUgQUMzMDBfTUlJX0RSVl9NQVNLXHRcdFx0R0VOTUFTSygxMSwgMTApXG4rI2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMlx0XHRcdDJcbisjZGVmaW5lIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEVcdFx0XHRCSVQoNClcbisjZGVmaW5lIEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRVx0XHRcdEJJVCgwKVxuK1xuKyNkZWZpbmUgQUMzMDBfRVBIWV9DT05GSUdfUkVHXHRcdFx0MHgwNlxuKyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0tcdFx0R0VOTUFTSygxNSwgMTIpXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMXHRcdFx0QklUKDExKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuK1xuKyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXFxcbitcdChBQzMwMF9FRlVTRV9DTEtfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRSB8IFxcXG4rXHQgQUMzMDBfQ0xLSU5fR0FUSU5HX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfCBcXFxuK1x0IEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpXG4rXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fVkFMVUUgXFxcbitcdChGSUVMRF9QUkVQKEFDMzAwX01ESU9fRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4rXHQgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4rXHQgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRSB8IEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRSlcbitcbitzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwge1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbitcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcbitcdHN0cnVjdCBjbGsgKmNsaztcbitcdHUxNiBzeXNfY29udHJvbDtcbitcdHUxNiBlcGh5X2NvbmZpZztcbitcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4rXHRib29sIHBhY2thZ2Vfa25vd247XG4rXHRib29sIGludGVybmFsX2RsZG87XG4rXHRib29sIHN1cHBseV9lbmFibGVkO1xuK1x0Ym9vbCBwb3dlcmVkO1xuK307XG4rXG4rc3RhdGljIHVuc2lnbmVkIGludFxuK2FjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcjtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9yZWFkKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcbitcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXG4rXHRcdFx0XHR1MTYgdmFsKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdFx0ICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSwgdmFsKTtcbitcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9tb2RpZnkoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxuK1x0XHRcdFx0IHUxNiBtYXNrLCB1MTYgc2V0KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cdTAwM2VwaHlkZXYsXG4rXHRcdFx0XHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xuK1x0aWYgKHJldCBcdTAwM2U9IDApIHtcbitcdFx0dTE2IHZhbCA9IChyZXQgXHUwMDI2IH5tYXNrKSB8IChzZXQgXHUwMDI2IG1hc2spO1xuK1xuK1x0XHRyZXQgPSB2YWwgPT0gcmV0ID8gMCA6XG4rXHRcdFx0X19waHlfcGFja2FnZV93cml0ZShwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCxcbitcdFx0XHRcdFx0ICAgIHJlZ251bSwgdmFsKTtcbitcdH1cbitcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY29uZmlnIHxcbitcdFx0KHByaXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbitcdFx0IEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcbit9XG4rXG4rc3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0LypcbitcdCAqIEEgY2hpcCByZXNldCByZXN0b3JlcyBETERPRU4gdG8gb25lLiBVbnRpbCBQS0dfU1RBVFVTIGhhcyBpZGVudGlmaWVkXG4rXHQgKiB0aGUgc3VwcGx5IGFycmFuZ2VtZW50LCBwcmVzZXJ2ZSBhbnkgZXh0ZXJuYWwtVkREIHNldHVwIGxlZnQgYnkgdGhlXG4rXHQgKiBib290bG9hZGVyIGJ5IGFzc2VydGluZyBvbmx5IHRoZSBFUEhZIHJlc2V0LlxuK1x0ICovXG4rXHRyZXR1cm4gIXByaXYtXHUwMDNlcGFja2FnZV9rbm93biB8fCAhcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbitcdFx0QUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCA6IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0aW50IGVycjtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuK1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XG4rXHRcdFx0XHRcdCAgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xuK1x0XHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLCAwKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0XHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1xuK1x0XHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cdTAwM2VjbGspO1xuK1x0XHRwcml2LVx1MDAzZXBvd2VyZWQgPSBmYWxzZTtcbitcdH1cbitcbitcdGlmIChwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4rXHRcdGVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtXHUwMDNldmNjKTtcbitcdFx0aWYgKCFlcnIpXG4rXHRcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IGZhbHNlO1xuK1x0XHRlbHNlIGlmICghcmV0KVxuK1x0XHRcdHJldCA9IGVycjtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpXG4re1xuK1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXG4rXHRyZXR1cm4gYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbit9XG4rXG4rc3RhdGljIGludFxuK2FjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4re1xuK1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbitcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlID09IGludGVyZmFjZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKVxuK1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuK1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9STUlJX1NFTCxcbitcdFx0XHRcdFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4rXHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4rXHRpZiAoIXJldClcbitcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXG4re1xuK1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXHR1OCBwYWNrYWdlX3N0YXR1cztcbitcdHUxNiByZXNldF92YWx1ZTtcbitcdGludCBzeXNfY29udHJvbDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocGh5X2FkZHIgIT0gYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4rXHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2V2Y2MpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xuK1xuK1x0XHQvKiBXYWl0IGZvciB0aGUgcG93ZXItb24gcmVzZXQgaW50ZXJ2YWwgc3BlY2lmaWVkIGJ5IHRoZSBtYW51YWwuICovXG4rXHRcdGZzbGVlcCgxMDAwMCk7XG4rXHR9XG4rXG4rXHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cdTAwM2VjbGspO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbitcbitcdC8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi9cbitcdHJlc2V0X3ZhbHVlID0gYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdik7XG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsIHJlc2V0X3ZhbHVlKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdC8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgICBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcbitcdFx0XHRcdCAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHQvKiBSZXRhaW4gdGhlIHZlbmRvciBjbG9jay1lbmFibGUgZGVmYXVsdHMsIGluY2x1ZGluZyB0aGUgZUZ1c2UgY2xvY2suICovXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgICBwcml2LVx1MDAzZXN5c19jb250cm9sKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdHN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpO1xuK1x0aWYgKHN5c19jb250cm9sIFx1MDAzYyAwKSB7XG4rXHRcdHJldCA9IHN5c19jb250cm9sO1xuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXHR9XG4rXG4rXHRwYWNrYWdlX3N0YXR1cyA9IEZJRUxEX0dFVChBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLLCBzeXNfY29udHJvbCk7XG4rXHRpZiAoKH5wYWNrYWdlX3N0YXR1cyBcdTAwMjYgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSAhPVxuK1x0ICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXHR9XG4rXG4rXHRwcml2LVx1MDAzZWludGVybmFsX2RsZG8gPSBwYWNrYWdlX3N0YXR1cyBcdTAwMjYgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExETztcbitcdHByaXYtXHUwMDNlcGFja2FnZV9rbm93biA9IHRydWU7XG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfU1lTX0JJQVMxX1JFRyxcbitcdFx0XHRcdCAgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSxcbitcdFx0XHRcdCAgIHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA/XG4rXHRcdFx0XHQgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSA6IDApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0LyogS2VlcCB0aGUgZG9jdW1lbnRlZCBkZWZhdWx0IGRyaXZlIGxldmVsIGFuZCBsZWF2ZSB0aGUgSVJRIGRpc2FibGVkLiAqL1xuK1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRyxcbitcdFx0XHRcdCAgIEFDMzAwX1NZU19JT19WQUxVRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHRmc2xlZXAoMTAwMDApO1xuK1xuK1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuK1x0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbitcdFx0XHRcdCAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHRmc2xlZXAoMTAwMDApO1xuK1xuK1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuK1x0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9wb3dlcl9vZmY6XG4rXHRhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpXG4re1xuK1x0Y2xrX3B1dChkYXRhKTtcbit9XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4rYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7XG4rXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuK1x0dTggYmdzX2VmZnVzZV9jb2RlO1xuK1x0aW50IHJldDtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYWRkciBcdTAwM2UgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgIFwibGluayBhZGRyZXNzIGlzIG91dHNpZGUgdGhlIHBhY2thZ2UgcmFuZ2VcXG5cIikpO1xuK1x0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXY7XG4rXG4rXHRwcml2LVx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXCJ2Y2NcIik7XG4rXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNldmNjKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi1cdTAwM2V2Y2MpLFxuK1x0XHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCBwYWNrYWdlIHN1cHBseVxcblwiKSk7XG4rXG4rXHRwcml2LVx1MDAzZWNsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2VjbGspKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZWNsayksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXFxuXCIpKTtcbitcbitcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfY2xrX3B1dCwgcHJpdi1cdTAwM2VjbGspO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcbitcdHJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIHByaXYtXHUwMDNlY2xrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxuXCIpKTtcbitcbitcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlY2xrKTtcbitcdHN3aXRjaCAoY2xrX3JhdGUpIHtcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgIFwidW5zdXBwb3J0ZWQgaW5wdXQgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cIixcbitcdFx0XHRcdFx0ICAgICBjbGtfcmF0ZSkpO1xuK1x0fVxuK1x0cHJpdi1cdTAwM2VzeXNfY29udHJvbCB8PSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUztcbitcbitcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbitcdGJnc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuK1x0XHRcdCAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7XG4rXHRwcml2LVx1MDAzZWVwaHlfY29uZmlnID1cbitcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTtcbitcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbitcbitcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uO1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcbitcdHByaXYtXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcbitcdC8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi9cbitcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbitcbitcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWQyM2EzY2JmZTJhMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuY1xuQEAgLTAsMCArMSw2MjEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXHUwMDNjamVybmVqLnNrcmFiZWNAZ21haWwuY29tXHUwMDNlXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCIuLi9waHlsaWIuaFwiXG4rI2luY2x1ZGUgXCJhY3gwMC5oXCJcbitcbisjZGVmaW5lIEFDWDAwX0VQSFlfSURcdFx0XHRcdDB4MDA0NDE0MDBcbitcbisjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0tcdEdFTk1BU0soMywgMClcbisjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDBcdFx0QklUKDgpXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1dcdEJJVCg5KVxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHXHRcdFx0MHgxZlxuKyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfTUFTS1x0XHRcdEdFTk1BU0soMTIsIDgpXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzBcdFx0XHRcdDBcbisjZGVmaW5lIEFDWDAwX1BBR0VfMVx0XHRcdFx0MVxuKyNkZWZpbmUgQUNYMDBfUEFHRV8yXHRcdFx0XHQyXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzZcdFx0XHRcdDZcbisjZGVmaW5lIEFDWDAwX1BBR0VfOFx0XHRcdFx0OFxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUdcdFx0MHgxM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlRcdEJJVCgxMilcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0tcdFx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUT1x0XHQyXG4rXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUdcdFx0MHgxMlxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFXHQweDQ4MjRcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUdcdFx0MHgxM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEVcdFx0XHRCSVQoMTUpXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUdcdDB4MTdcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEVcdEJJVCgzKVxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFR1x0XHQweDE4XG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTS1x0XHRHRU5NQVNLKDE0LCAxMilcbisjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUXHQwXG4rXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUdcdFx0MHgxMFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRVx0MHg1NTIzXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUdcdFx0MHgxM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUVcdFx0MHhmMDAwXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHXHQweDE0XG4rI2RlZmluZSBBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGZcbisjZGVmaW5lIEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcdDB4NzA4YlxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFIDB4NzgwOVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHXHRcdFx0MHgxNVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xME1fTUFTS1x0XHRHRU5NQVNLKDcsIDApXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRShfMTAwbSwgXzEwbSkgXFxcbitcdChGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcXFxuK1x0IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0ssIChfMTBtKSkpXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFIFxcXG4rXHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRSBcXFxuK1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgzNSwgMHgzMylcbitcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFR1x0XHQweDE4XG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRVx0XHQweDAwYmNcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHXHRcdDB4MWRcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgQklUKDExKVxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUU1x0MHgwMDQ0XG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXFxcbitcdChBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIHwgXFxcbitcdCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTKVxuK1xuKy8qXG4rICogQW5vdGhlciBpbnRlZ3JhdGlvbiBvZiB0aGlzIGV4YWN0LUlEIFBIWSBkb2N1bWVudHMgaXRzIGRpZ2l0YWwgdmVuZG9yXG4rICogcmVnaXN0ZXIgbWFwLCB3aGljaCBhbHNvIG1hdGNoZXMgdGhlIG9ic2VydmVkIEFDeDAwIHJlc2V0IHZhbHVlcy4gVGhlIEFDeDAwXG4rICogYW5hbG9nLXBhZ2UgZmllbGQgZW5jb2RpbmdzIHJlbWFpbiB1bnB1Ymxpc2hlZCwgc28ga2VlcCB0aG9zZSBhcyBvcGFxdWVcbisgKiB2ZW5kb3IgaW5pdGlhbGl6YXRpb24gdmFsdWVzIGluc3RlYWQgb2YgaW52ZW50aW5nIGJpdCBkZWZpbml0aW9ucy5cbisgKi9cbitcbitzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2IHtcbitcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sO1xuK1x0LyogU2VyaWFsaXplcyBwYWNrYWdlIHN0YXRlIGFuZCBtdWx0aS1yZWdpc3RlciBwb3dlciBzZXF1ZW5jZXMuICovXG4rXHRzdHJ1Y3QgbXV0ZXggc3RhdGVfbG9jaztcbitcdGJvb2wgaXNfYWMzMDA7XG4rXHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xuK1x0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xuK307XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdHJldHVybiBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyxcbitcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29uKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdCAgICAgICBwcml2LVx1MDAzZXBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29mZihwcml2LVx1MDAzZWNvbnRyb2wpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2VzZXRfaW50ZXJmYWNlKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHBoeWRldl93YXJuKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdCAgICBcImZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXFxuXCIsXG4rXHRcdFx0ICAgIEVSUl9QVFIocmV0KSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFjeDAwX2VwaHlfY29udHJvbF9yZWxlYXNlKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IGRhdGE7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4ocHJpdik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcbitcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgdTE2ICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDtcbitcdHNpemVfdCBpO1xuK1x0c2l6ZV90IGxlbjtcbitcdHU4ICpidWY7XG4rXHR1MTYgdmFsID0gMDtcbitcbitcdGNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChub2RlLCBuYW1lKTtcbitcdGlmIChJU19FUlIoY2VsbCkpXG4rXHRcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xuK1xuK1x0YnVmID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFx1MDAyNmxlbik7XG4rXHRudm1lbV9jZWxsX3B1dChjZWxsKTtcbitcdGlmIChJU19FUlIoYnVmKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoYnVmKTtcbitcdGlmICghbGVuIHx8IGxlbiBcdTAwM2Ugc2l6ZW9mKCp2YWx1ZSkpIHtcbitcdFx0a2ZyZWUoYnVmKTtcbitcdFx0cmV0dXJuIGxlbiA/IC1FUkFOR0UgOiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpKyspXG4rXHRcdHZhbCB8PSAodTE2KWJ1ZltpXSBcdTAwM2NcdTAwM2MgKDggKiBpKTtcbitcdGtmcmVlKGJ1Zik7XG4rXHQqdmFsdWUgPSB2YWw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0ICAgc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbitcdGJvb2wgc2VsZWN0YWJsZTtcbitcdGJvb2wgZml4ZWRfYWMzMDA7XG4rXHRib29sIGhhc19jb25maWd1cmF0aW9uO1xuK1x0dTggY2FsaWJyYXRpb247XG4rXHR1MzIgYmFzZV9hZGRyO1xuK1x0dTE2IGNvbmZpZ3VyYXRpb24gPSAwO1xuK1x0aW50IHJldDtcbitcbitcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQoZGV2LVx1MDAzZW9mX25vZGUpO1xuK1x0aWYgKCFwYWNrYWdlX25vZGUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKCFvZl9ub2RlX25hbWVfZXEocGFja2FnZV9ub2RlLCBcImV0aGVybmV0LXBoeS1wYWNrYWdlXCIpKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwiUEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHR9XG4rXG4rXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYWNrYWdlX25vZGUsIFwicmVnXCIsIFx1MDAyNmJhc2VfYWRkcik7XG4rXHRpZiAocmV0IHx8IGJhc2VfYWRkciAhPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwicGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHR9XG4rXG4rXHRzZWxlY3RhYmxlID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHQgICAgIFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCIpO1xuK1x0Zml4ZWRfYWMzMDAgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdCAgICAgIFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXCIpO1xuK1x0aWYgKCFzZWxlY3RhYmxlIFx1MDAyNlx1MDAyNiAhZml4ZWRfYWMzMDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdCAgICAgXCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcIikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJ1bnN1cHBvcnRlZCBFdGhlcm5ldCBQSFkgcGFja2FnZVxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHR9XG4rXG4rXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXG4rXHRoYXNfY29uZmlndXJhdGlvbiA9XG4rXHRcdG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhwYWNrYWdlX25vZGUsIFwibnZtZW0tY2VsbC1uYW1lc1wiLFxuK1x0XHRcdFx0XHQgXCJjb25maWd1cmF0aW9uXCIpIFx1MDAzZT0gMDtcbitcdGlmIChoYXNfY29uZmlndXJhdGlvbikge1xuK1x0XHRyZXQgPSBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHBhY2thZ2Vfbm9kZSwgXCJjb25maWd1cmF0aW9uXCIsXG4rXHRcdFx0XHRcdFx0XHUwMDI2Y29uZmlndXJhdGlvbik7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgXCJmYWlsZWQgdG8gcmVhZCBwYWNrYWdlIGNvbmZpZ3VyYXRpb25cXG5cIik7XG4rXHRcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHRcdH1cbitcdH0gZWxzZSBpZiAoc2VsZWN0YWJsZSB8fCBmaXhlZF9hYzMwMCkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcInBhY2thZ2UgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZFxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHR9XG4rXG4rXHRpZiAoc2VsZWN0YWJsZSkge1xuK1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID1cbitcdFx0XHRjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwO1xuK1x0fSBlbHNlIHtcbitcdFx0cHJpdi1cdTAwM2Vpc19hYzMwMCA9IGZpeGVkX2FjMzAwO1xuK1x0XHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhIShjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwKSAhPVxuK1x0XHQgICAgcHJpdi1cdTAwM2Vpc19hYzMwMCkge1xuK1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgXCJjb25maWd1cmF0aW9uIGRvZXMgbm90IG1hdGNoIHBhY2thZ2VcXG5cIik7XG4rXHRcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHRcdH1cbitcdH1cbitcbitcdGNhbGlicmF0aW9uID0gRklFTERfR0VUKEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0ssXG4rXHRcdFx0XHRjb25maWd1cmF0aW9uKTtcbitcbitcdHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPVxuK1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNlxuK1x0XHQhIShjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cpO1xuK1x0cHJpdi1cdTAwM2V4bWlpX3J4X2Nsb2NrX2ludmVydGVkID1cbitcdFx0b2ZfcHJvcGVydHlfcmVhZF9ib29sKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdCAgICAgIFwieC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZFwiKTtcbitcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwKVxuK1x0XHRwcml2LVx1MDAzZWNvbnRyb2wgPVxuK1x0XHRcdGFjMzAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuK1x0ZWxzZVxuK1x0XHRwcml2LVx1MDAzZWNvbnRyb2wgPVxuK1x0XHRcdGFjMjAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0ICAgICAgaGFzX2NvbmZpZ3VyYXRpb24sXG4rXHRcdFx0XHRcdCAgICAgIGNhbGlicmF0aW9uKTtcbitcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyhwcml2LVx1MDAzZWNvbnRyb2wpO1xuK1xuK291dF9wdXRfbm9kZTpcbitcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8xLFxuK1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2O1xuK1x0aW50IHJldDtcbitcbitcdGlmICghZGV2LVx1MDAzZW9mX25vZGUpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1x0cmV0ID0gYWN4MDBfZXBoeV9pbml0X3BhY2thZ2UocGh5ZGV2LCBwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4rXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSwgcHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gcG93ZXIgb24gY29udHJvbCBibG9ja1xcblwiKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdC8qIEFDeDAwIGNhbiBhY2tub3dsZWRnZSByZXNldCBpbiBwb3dlci1kb3duIHdpdGhvdXQgcmVzdGFydGluZy4gKi9cbitcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdHJldCA9IGdlbnBoeV9zb2Z0X3Jlc2V0KHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4rXG4rXHRnb3RvIG91dF91bmxvY2s7XG4rXG4rb3V0X3Bvd2VyX29mZjpcbitcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTtcbitvdXRfdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdHUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi1cdTAwM2Vpc19hYzMwMCA/XG4rXHRcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxuK1x0XHRBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFO1xuK1x0dTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTtcbitcdHUxNiBnbG9iYWxfY29uZmlnO1xuK1x0aW50IG9sZHBhZ2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1xuK1x0Z2xvYmFsX2NvbmZpZyA9IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSyxcbitcdFx0XHRcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xuK1x0aWYgKHByaXYtXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcbitcdFx0Z2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDtcbitcbitcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHLFxuK1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4rXHRcdGFmZV9lcV9yeF9kZXRlY3QgPVxuK1x0XHRcdEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRTtcbitcdFx0dHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFO1xuK1x0fVxuK1xuK1x0b2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7XG4rXHRpZiAob2xkcGFnZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIG9sZHBhZ2U7XG4rXG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFRyxcbitcdFx0XHQgIEFDWDAwX1BBR0UxX0FQU19ESVNBQkxFRF80U19WQUxVRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFLCAwKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcbitcdFx0XHQgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLFxuK1x0XHRcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXG4rXHRcdFx0XHQgICAgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVCkpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV82KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFRyxcbitcdFx0XHQgIGFmZV9lcV9yeF9kZXRlY3QpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9WQUxVRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRpZiAocHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xuK1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0fVxuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9SRUcsIHR4X2xldmVsX3ZhbHVlKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfOCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRpZiAocHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xuK1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHLFxuK1x0XHRcdFx0ICBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUpO1xuK1xuK291dF9yZXN0b3JlX3BhZ2U6XG4rXHRyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBSZXN0b3JlIHRoZSBzdGFuZGFyZCBFRUUgcG9saWN5IHJldGFpbmVkIGJ5IHBoeWxpYiBhY3Jvc3MgcmVzZXRzLiAqL1xuK1x0cmV0ID0gZ2VucGh5X2M0NV9hbl9jb25maWdfZWVlX2FuZWcocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcdHJldCA9IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJldDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGh5ZGV2LVx1MDAzZWxvY2spO1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1xuK1x0cmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4rXG4rXHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4rXG4rXHQvKiBQb3dlcmluZyBvZmYgdGhlIGNvbnRyb2wgYmxvY2sgbG9zZXMgdGhlIHZlbmRvci1wYWdlIHN0YXRlLiAqL1xuK1x0cmV0ID0gX19hY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitvdXRfcG93ZXJfb2ZmOlxuK1x0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRyZXQgPSBfX2FjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXN1bWVfcmV0O1xuK1x0aW50IHJldDtcbitcbitcdC8qIFRoZSBzdXNwZW5kIGNhbGxiYWNrIGlzIGludm9rZWQgd2l0aG91dCB0aGUgcGh5bGliIGxvY2sgaGVsZC4gKi9cbitcdG11dGV4X2xvY2soXHUwMDI2cGh5ZGV2LVx1MDAzZWxvY2spO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1xuK1x0cmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHJlc3VtZV9yZXQgPSBfX2FjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpO1xuK1x0XHRpZiAocmVzdW1lX3JldClcbitcdFx0XHRwaHlkZXZfd2FybihwaHlkZXYsXG4rXHRcdFx0XHQgICAgXCJmYWlsZWQgdG8gcmVjb3ZlciBmcm9tIHN1c3BlbmQgZXJyb3I6ICVwZVxcblwiLFxuK1x0XHRcdFx0ICAgIEVSUl9QVFIocmVzdW1lX3JldCkpO1xuK1x0fVxuK1xuK291dF91bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4re1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbitcdGJvb2wgbWF0Y2g7XG4rXG4rXHRpZiAoIWdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHBoeWRldiwgcGh5ZHJ2KSB8fCAhbm9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBSSzYzMCByZXBvcnRzIHRoZSBzYW1lIFBIWSBJRCwgc28gYWxzbyBtYXRjaCB0aGUgcGFja2FnZSBpZGVudGl0eS4gKi9cbitcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4rXHRpZiAoIXBhY2thZ2Vfbm9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXHRtYXRjaCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0XCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcIikgfHxcbitcdFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHRcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwiKSB8fFxuK1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCIpO1xuK1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbitcbitcdHJldHVybiBtYXRjaDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7XG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSxcbitcdFx0Lm5hbWUgPSBcIlgtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFlcIixcbitcdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXG4rXHRcdC5wcm9iZSA9IGFjeDAwX2VwaHlfcHJvYmUsXG4rXHRcdC5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSxcbitcdFx0LndyaXRlX3BhZ2UgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UsXG4rXHRcdC5zb2Z0X3Jlc2V0ID0gYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0LFxuK1x0XHQuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LFxuK1x0XHQuZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSA9IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSxcbitcdFx0LnN1c3BlbmQgPSBhY3gwMF9lcGh5X3N1c3BlbmQsXG4rXHRcdC5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSxcbitcdH0sXG4rfTtcbittb2R1bGVfcGh5X2RyaXZlcihhY3gwMF9lcGh5X2RyaXZlcik7XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhY3gwMF9lcGh5X3RibFtdID0ge1xuK1x0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCkgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcbkBAIC0wLDAgKzEsMjggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rI2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbisjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbitcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVFx0MTZcbitcbitzdHJ1Y3QgZGV2aWNlX25vZGU7XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7XG4rXHRpbnQgKCpwb3dlcl9vbikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xuK1x0aW50ICgqcG93ZXJfb2ZmKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKTtcbitcdGludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbit9O1xuK1xuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbitcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbithYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTtcbitcbisjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA3OjExOjI3Ljg4MjE1MTUzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MDA5OTY2MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIERyaXZlcioqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBuZXcgZHJpdmVyIGZvciBFdGhlcm5ldCBQSFlzIHNwZWNpZmljYWxseSBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MsIHJlc2lkaW5nIGluIGBkcml2ZXJzL25ldC9waHkveHBvd2Vycy9gLiBJdCBkZWZpbmVzIGBDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFlgIGFuZCBpbXBsZW1lbnRzIHRoZSB1c3VhbCBQSFkgZHJpdmVyIGZ1bmN0aW9uczogcHJvYmUsIHJlc2V0LCBpbml0aWFsaXphdGlvbiwgYW5kIHBvd2VyIG1hbmFnZW1lbnQgKHN1c3BlbmQvcmVzdW1lKS4gQWxzbywgSSBzZWUgYGFjMjAwX2VwaHlfY3RsX2NyZWF0ZWAgYW5kIGBhYzMwMF9lcGh5X2N0bF9jcmVhdGVgLCB3aGljaCBwcm9iYWJseSBoYW5kbGUgc29tZSBkZXZpY2Utc3BlY2lmaWMgY29udHJvbCBhc3BlY3RzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBob3cgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGRyaXZlciwgYW5kIGhvdyB0byB0cmlnZ2VyIGl0cyBwcm9iZSBmdW5jdGlvbi4gSXQncyBhbiBFdGhlcm5ldCBQSFksIHNvIHRoZSBzdGFuZGFyZCBhY2Nlc3MgbWV0aG9kIGlzIHZpYSBNRElPLiBDYW4gSSByZWFjaCB0aGlzIGNvZGUgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IGxpa2UgUUVNVT8gUUVNVSBlbXVsYXRlcyBzb21lIG5ldHdvcmsgaW50ZXJmYWNlcywgYnV0IGRvZXMgaXQgYWN0dWFsbHkgZW11bGF0ZSB0aGUgWC1Qb3dlcnMgQUMyMDAvQUMzMDAgUEhZPyBObywgcHJvYmFibHkgbm90LlxuXG5TbywgaG93IGRvIEkgZ2V0IHRoZSBwcm9iZSBmdW5jdGlvbiBjYWxsZWQ/IFBIWSBkcml2ZXJzIGFyZSB1c3VhbGx5IHByb2JlZCBieSB0aGUgTURJTyBidXMgZHJpdmVyIGJhc2VkIG9uIGRldmljZSB0cmVlIGluZm9ybWF0aW9uIG9yIGhhcmR3YXJlIHByb2JpbmcuIEkgbmVlZCBhbiBNRElPIGJ1cyBhbmQgYSBkZXZpY2UgcmVnaXN0ZXJlZCBvbiBpdC4gQ2FuIEkgc2V0IHVwIGEgdmlydHVhbCBNRElPIGJ1cyBhbmQgaW5qZWN0IGEgZGV2aWNlIGZvciB0ZXN0aW5nPyBTeXprYWxsZXIgaXMgdGhlIGdvLXRvIGZ1enppbmcgdG9vbCwgYnV0IGRvZXMgaXQgaGF2ZSBhIHdheSB0byBpbmplY3QgTURJTyBkZXZpY2VzIGRpcmVjdGx5P1xuXG5JIGtub3cgc3l6a2FsbGVyIGNhbiBjcmVhdGUgdmlydHVhbCBkZXZpY2VzIGZvciB2YXJpb3VzIHN1YnN5c3RlbXMgLSBVU0IgKHZoY2kpLCBXaUZpIChtYWM4MDIxMV9od3NpbSksIGlucHV0ICh1aW5wdXQpLCBEUk0gKHZrbXMpLCBBTFNBIChzbmQtYWxvb3ApLiBEb2VzIGl0IGhhdmUgYW55dGhpbmcgZXF1aXZhbGVudCBmb3IgTURJTz8gSSBuZWVkIHRvIGNoZWNrIGl0cyBNRElPIGRlc2NyaXB0aW9ucy5cblxuSSByZW1lbWJlciB0aGlua2luZyBhYm91dCBgbWRpby1tb2NrdXBgIG9yIHNpbWlsYXIuIE5vLCB0aGVyZSdzIG5vdGhpbmcgc3BlY2lmaWMuIFRoZXJlJ3MgYHR1bmAgb3IgYHRhcGAgYnV0IHRoZXkgZG9uJ3QgaW52b2x2ZSBNRElPLlxuXG5DYW4gSSB0cmlnZ2VyIHRoaXMgZnJvbSB1c2VyIHNwYWNlPyBVc3VhbGx5LCBQSFkgZGV2aWNlcyBhcmUgaW5zdGFudGlhdGVkIGJ5IHRoZSBNRElPIGJ1cyBkcml2ZXIsIGJ1dCBtYXliZSB2aWEgc3lzZnMgb3IgbmV0bGluaz8gTm8sIHRoYXQncyBub3QgdGhlIG5vcm1hbCBzZXR1cC4gU3l6a2FsbGVyIGhhcyBgc3l6X2luaXRfbmV0X2RldmljZWAsIGJ1dCB0aGF0IGRvZXNuJ3QgaW5zdGFudGlhdGUgTURJTyBQSFlzLlxuXG5BaGEhIFRoZSBBQzIwMCBkcml2ZXIgdXNlcyBJMkMgdG8gY29tbXVuaWNhdGUuIEl0IGNhbGxzIGBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZWAuIElmIGl0J3MgYW4gSTJDIGRldmljZSwgY2FuIEkgbGV2ZXJhZ2Ugc3l6a2FsbGVyJ3MgSTJDIGluamVjdGlvbiB2aWEgYC9kZXYvaTJjLSpgPyBJMkMgZGV2aWNlIGluc3RhbnRpYXRpb24gZnJvbSB1c2Vyc3BhY2UgY291bGQgcG90ZW50aWFsbHkgYmUgZG9uZSB2aWEgc3lzZnMgdXNpbmcgYG5ld19kZXZpY2VgLiBCdXQgdGhlIHByb2JlIGZ1bmN0aW9uIChgYWN4MDBfZXBoeV9wcm9iZWApIGlzIGEgUEhZIGRyaXZlciBwcm9iZSBmdW5jdGlvbi5cblxuTG9va2luZyBhdCB0aGUgZHJpdmVyIGNvZGUsIGl0IGRlZmluZXMgYGFjeDAwX2VwaHlfZHJpdmVyYCwgd2l0aCBhIFBIWSBJRCBtYXRjaC5cbmBgYGNcbnN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhY3gwMF9lcGh5X2RyaXZlcltdID0ge1xuXHR7XG5cdFx0UEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLFxuXHRcdC5uYW1lID0gXCJYLVBvd2VycyBBQzIwMC9BQzMwMCBFUEhZXCIsXG5cdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXG4uLi5cbmBgYFxuU28sIHRvIGdldCBpdCBwcm9iZWQsIEkgbmVlZCB0byByZWdpc3RlciBhIFBIWSBkZXZpY2Ugd2l0aCB0aGUgbWF0Y2hpbmcgSUQgb24gYW4gTURJTyBidXMuIENhbiBzeXprYWxsZXIgY3JlYXRlIGFuIE1ESU8gYnVzIGFuZCByZWdpc3RlciB0aGlzIFBIWSBkZXZpY2U/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gYW5kIGNvZGUgdG8gc2VlIGlmIGl0IHN1cHBvcnRzIGNyZWF0aW5nIHZpcnR1YWwgTURJTyBidXNlcyBhbmQgcmVnaXN0ZXJpbmcgdmlydHVhbCBQSFkgZGV2aWNlcy4gVGhlcmUgYXJlIGEgZmV3IHZpcnR1YWwgTURJTyBkcml2ZXJzIGxpa2UgYG1kaW8tYmNtLXVuaW1hY2AuXG5UaGUga2V5IGlzIHRvIGRldGVybWluZSBpZiBJIGNhbiBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgUEhZIGRldmljZXMgd2l0aCBhcmJpdHJhcnkgSURzIHRocm91Z2ggYSB2aXJ0dWFsIGRyaXZlciBpbiBzeXprYWxsZXIuIElmIG5vdCwgSSdtIHN0dWNrLlxuTGV0J3Mgc2VlIGlmIHN5emthbGxlciBoYXMgTURJTyBkZXNjcmlwdGlvbnMgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZW0uIFRoYXQncyB0aGUga2V5IHRvIGdldHRpbmcgdGhpcyBkcml2ZXIgdGVzdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQyNCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA3OjExOjQxLjg5MjEyMjExNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg4NTY1MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kc2EvZHNhLmM9NjIyPXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTY1NC1cXHRpZiAoIWRzLVxcdTAwM2V1c2VyX21paV9idXMgXFx1MDAyNlxcdTAwMjYgZHMtXFx1MDAzZW9wcy1cXHUwMDNlcGh5X3JlYWQpIHtcXG5uZXQvZHNhL2RzYS5jOjY1NTpcXHRcXHRkcy1cXHUwMDNldXNlcl9taWlfYnVzID0gbWRpb2J1c19hbGxvYygpO1xcbm5ldC9kc2EvZHNhLmMtNjU2LVxcdFxcdGlmICghZHMtXFx1MDAzZXVzZXJfbWlpX2J1cykge1xcbi0tXFxubmV0L2RzYS9kc2EuYy02NjItXFxubmV0L2RzYS9kc2EuYzo2NjM6XFx0XFx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihkcy1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG5uZXQvZHNhL2RzYS5jLTY2NC1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9kc2EvZHNhLmMtNjc0LVxcdGlmIChkcy1cXHUwMDNldXNlcl9taWlfYnVzIFxcdTAwMjZcXHUwMDI2IGRzLVxcdTAwM2VvcHMtXFx1MDAzZXBoeV9yZWFkKVxcbm5ldC9kc2EvZHNhLmM6Njc1OlxcdFxcdG1kaW9idXNfZnJlZShkcy1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG5uZXQvZHNhL2RzYS5jLTY3Ni10ZWFyZG93bjpcXG4tLVxcbm5ldC9kc2EvZHNhLmM9Njg2PXN0YXRpYyB2b2lkIGRzYV9zd2l0Y2hfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxubmV0L2RzYS9kc2EuYy02OTMtXFx0aWYgKGRzLVxcdTAwM2V1c2VyX21paV9idXMgXFx1MDAyNlxcdTAwMjYgZHMtXFx1MDAzZW9wcy1cXHUwMDNlcGh5X3JlYWQpIHtcXG5uZXQvZHNhL2RzYS5jOjY5NDpcXHRcXHRtZGlvYnVzX3VucmVnaXN0ZXIoZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyk7XFxubmV0L2RzYS9kc2EuYzo2OTU6XFx0XFx0bWRpb2J1c19mcmVlKGRzLVxcdTAwM2V1c2VyX21paV9idXMpO1xcbm5ldC9kc2EvZHNhLmMtNjk2LVxcdFxcdGRzLVxcdTAwM2V1c2VyX21paV9idXMgPSBOVUxMO1xcbi0tXFxubmV0L2RzYS9wb3J0LmMtMTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxubmV0L2RzYS9wb3J0LmM6MTI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG5uZXQvZHNhL3BvcnQuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbmV0LmhcXHUwMDNlXFxuLS1cXG5uZXQvZHNhL3BvcnQuYz0xNzI2PXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZHNhX3N3aXRjaGVzX2FwcGx5X3dvcmthcm91bmRzW10gPSB7XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0xNzk2LSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKVxcbm5ldC9kc2EvcG9ydC5jOjE3OTc6XFx0XFxcInNtc2MsbGFuOTMwMy1tZGlvXFxcIixcXG5uZXQvZHNhL3BvcnQuYy0xNzk4LSNlbmRpZlxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTMtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX25ldC5oXFx1MDAzZVxcbm5ldC9kc2EvdXNlci5jOjE0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9tZGlvLmhcXHUwMDNlXFxubmV0L2RzYS91c2VyLmM6MTU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG5uZXQvZHNhL3VzZXIuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcXHUwMDNlXFxuLS1cXG5uZXQvZHNhL3VzZXIuYz0yNjM3PXN0YXRpYyBpbnQgZHNhX3VzZXJfcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKnVzZXJfZGV2LCBpbnQgYWRkcixcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTI2NDItXFxubmV0L2RzYS91c2VyLmM6MjY0MzpcXHR1c2VyX2Rldi1cXHUwMDNlcGh5ZGV2ID0gbWRpb2J1c19nZXRfcGh5KGRzLVxcdTAwM2V1c2VyX21paV9idXMsIGFkZHIpO1xcbm5ldC9kc2EvdXNlci5jLTI2NDQtXFx0aWYgKCF1c2VyX2Rldi1cXHUwMDNlcGh5ZGV2KSB7XFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uYz01ODc9Y29udmVydF9sZWdhY3lfc2V0dGluZ3NfdG9fbGlua19rc2V0dGluZ3MoXFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uYy02MjEtXFx0XFx0PSBsZWdhY3lfc2V0dGluZ3MtXFx1MDAzZWF1dG9uZWc7XFxubmV0L2V0aHRvb2wvY29tbW9uLmM6NjIyOlxcdGxpbmtfa3NldHRpbmdzLVxcdTAwM2ViYXNlLm1kaW9fc3VwcG9ydFxcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjYyMzpcXHRcXHQ9IGxlZ2FjeV9zZXR0aW5ncy1cXHUwMDNlbWRpb19zdXBwb3J0O1xcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTYyNC1cXHRsaW5rX2tzZXR0aW5ncy1cXHUwMDNlYmFzZS5ldGhfdHBfbWRpeFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0zODI9Y29udmVydF9saW5rX2tzZXR0aW5nc190b19sZWdhY3lfc2V0dGluZ3MoXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQxMi1cXHRcXHQ9IGxpbmtfa3NldHRpbmdzLVxcdTAwM2ViYXNlLmF1dG9uZWc7XFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0MTM6XFx0bGVnYWN5X3NldHRpbmdzLVxcdTAwM2VtZGlvX3N1cHBvcnRcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjQxNDpcXHRcXHQ9IGxpbmtfa3NldHRpbmdzLVxcdTAwM2ViYXNlLm1kaW9fc3VwcG9ydDtcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQxNS1cXHRsZWdhY3lfc2V0dGluZ3MtXFx1MDAzZWV0aF90cF9tZGl4XFxuLS1cXG5uZXQvZXRodG9vbC9waHkuYz03MD1zdGF0aWMgaW50IHBoeV9wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcXG4tLVxcbm5ldC9ldGh0b29sL3BoeS5jLTkxLVxcbm5ldC9ldGh0b29sL3BoeS5jOjkyOlxcdHJlcF9kYXRhLVxcdTAwM2VuYW1lID0ga3N0cmR1cChkZXZfbmFtZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiksIEdGUF9LRVJORUwpO1xcbm5ldC9ldGh0b29sL3BoeS5jLTkzLVxcdGlmICghcmVwX2RhdGEtXFx1MDAzZW5hbWUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA3OjExOjQyLjA1MDk4NDc5NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0OTMxMTEzMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBUYXJnZXQgQ29kZSBmb3IgRnV6emluZyBGZWFzaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGdyZXBwZXIgb3V0cHV0IHBvaW50ZWQgbWUgdG93YXJkcyBNRElPIHVzYWdlIHdpdGhpbiBEU0EgYW5kIGV0aHRvb2wsIGFuZCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbnkgd2F5IHRvIGdldCBhIFBIWSBkZXZpY2UgaW5zdGFudGlhdGVkIGZyb20gdXNlcnNwYWNlLiBJbml0aWFsbHksIEkgdGhvdWdodCBhYm91dCBgbWRpb2J1c19yZWdpc3RlcmAsIHdoaWNoIGlzIGNhbGxlZCBieSBNRElPIGJ1cyBkcml2ZXJzLCBhbmQgd2hldGhlciBTeXprYWxsZXIgY291bGQgdHJpZ2dlciB0aGUgY3JlYXRpb24gb2YgYW4gTURJTyBidXMuIFBvdGVudGlhbGx5LCBJIHRob3VnaHQgbWF5YmUgYSB2aXJ0dWFsIGRyaXZlciBjb3VsZCBkbyB0aGlzLlxuXG5Ib3dldmVyLCBhIGRlZXBlciBsb29rIHJldmVhbHMgc29tZSBzaWduaWZpY2FudCBodXJkbGVzLiBUaGUgdGFyZ2V0IGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgZXRoZXJuZXQtcGh5LXBhY2thZ2VgIGRyaXZlciwgcmVsaWVzIGhlYXZpbHkgb24gYSBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlIHN0cnVjdHVyZS4gSXQgbmVlZHMgYGRldi1cdTAwM2VvZl9ub2RlYCB0byBleGlzdCBhbmQgaXRzIHBhcmVudCB0byBiZSBuYW1lZCBgXCJldGhlcm5ldC1waHktcGFja2FnZVwiYC4gSXQncyBwcmV0dHkgc3RyaWN0IGFib3V0IHRoaXMsIGltbWVkaWF0ZWx5IHJldHVybmluZyBhbiBlcnJvciBpZiB0aGVzZSBjb25kaXRpb25zIGFyZW4ndCBtZXQuXG5cbkluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VICh3aGljaCBTeXprYWxsZXIgdXNlcyksIGBkZXYtXHUwMDNlb2Zfbm9kZWAgaXMgZ29pbmcgdG8gYmUgTlVMTCB1bmxlc3MgYSBzcGVjaWZpYyBkZXZpY2UgdHJlZSBpcyBwcm92aWRlZC4gU3l6a2FsbGVyIGRvZXNuJ3QgaW5qZWN0IGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlcyBkdXJpbmcgcnVudGltZTsgdGhlIGRldmljZSB0cmVlIGlzIGZpeGVkIGF0IGJvb3QgdGltZSwgcHJvdmlkZWQgYnkgUUVNVS4gVGhhdCBtZWFucyB1bmxlc3MgdGhlIFFFTVUgbWFjaGluZSB1c2VkIGJ5IHN5emthbGxlciAobGlrZSBgcTM1YCwgYHBjYCBmb3IgeDg2IG9yIGB2aXJ0YCBmb3IgYXJtNjQpIGhhcyB0aGlzICpleGFjdCogZGV2aWNlIHRyZWUgbm9kZSwgdGhlIGRyaXZlciB3aWxsIG5ldmVyIHByb2JlIHN1Y2Nlc3NmdWxseS4gQW5kIFN5emthbGxlciBkZWZpbml0ZWx5IGRvZXNuJ3QgdXNlIGEgY3VzdG9tIGRldmljZSB0cmVlIHdpdGggdGhpbmdzIGxpa2UgYFwieC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXCJgIG9yIGBcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwiYC4gVGhpcyBpcyBhIGhhcmQgc3RvcC5cblxuSSBicmllZmx5IGNvbnNpZGVyZWQgYG9mX292ZXJsYXlgIGFzIGEgcG90ZW50aWFsIHdvcmthcm91bmQsIGlmIGBDT05GSUdfT0ZfT1ZFUkxBWWAgd2FzIGVuYWJsZWQgYW5kIHRoZXJlIHdhcyBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgdG8gbG9hZCBvdmVybGF5cy4gQnV0IGl0J3MgaGlnaGx5IHVubGlrZWx5IFN5emthbGxlciBnZW5lcmF0ZXMgdmFsaWQgT0Ygb3ZlcmxheXMgZm9yIHRoaXMgc3BlY2lmaWMgUEhZIGRyaXZlciwgYW5kIEkgZG9uJ3QgdGhpbmsgT0Ygb3ZlcmxheXMgYXJlIHVzdWFsbHkgbG9hZGVkIGZyb20gdXNlcnNwYWNlLiBGdXJ0aGVybW9yZSwgdGhlIGRyaXZlciBhbHNvIHJlcXVpcmVzIEkyQyBkZXZpY2VzLCByZWd1bGF0b3JzLCBhbmQgY2xvY2tzLiBJdCB3aWxsIG5lZWQgYSBjb21wbGV4IGRldmljZSB0cmVlIHNldHVwLlxuXG5TbywgdGhpcyBsb29rcyBsaWtlIGEgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIGhpZ2hseSB1bmxpa2VseSBwYXRoIGluIGFueSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIGRyaXZlciBleHBlY3RzIHNwZWNpZmljIGhhcmR3YXJlIChYLVBvd2VycyBBQzIwMC9BQzMwMCkgYW5kIHJlbGF0ZWQgc2V0dGluZ3MsIGFuZCBpdCB3b24ndCB3b3JrIHdpdGhvdXQgYSBkZXZpY2UgdHJlZSB0aGF0IGhhcyB0aGUgcmlnaHQgc2V0dXAuXG5cbk5vdywgbGV0IG1lIGdvIGJhY2sgdG8gdGhlIHJ1bGUuLi4gXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAtIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBUaGlzIHBlcmZlY3RseSBtYXRjaGVzIHRoaXMgc2l0dWF0aW9uLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcGF0Y2ggaXMgbm90IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDM0LCJPdXRwdXRUb2tlbnMiOjEzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNzoxMTo1Ni45ODIxMDAwNDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiBzdHJpY3RseSByZXF1aXJlcyBhIHNwZWNpZmljIERldmljZSBUcmVlIGNvbmZpZ3VyYXRpb24gKGRldi1cXHUwMDNlb2Zfbm9kZSBtdXN0IGJlIHByZXNlbnQsIHBhcmVudCBtdXN0IGJlICdldGhlcm5ldC1waHktcGFja2FnZScsIHNwZWNpZmljIGNvbXBhdGlibGUgc3RyaW5ncywgcmVndWxhdG9ycywgY2xvY2tzLCBhbmQgSTJDIGRldmljZXMpLiBTaW5jZSBzeXprYWxsZXIgcnVucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSkgd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGFuZCBkZXZpY2UgdHJlZSBzZXR1cCwgdGhlIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiBzdHJpY3RseSByZXF1aXJlcyBhIHNwZWNpZmljIERldmljZSBUcmVlIGNvbmZpZ3VyYXRpb24gKGRldi1cXHUwMDNlb2Zfbm9kZSBtdXN0IGJlIHByZXNlbnQsIHBhcmVudCBtdXN0IGJlICdldGhlcm5ldC1waHktcGFja2FnZScsIHNwZWNpZmljIGNvbXBhdGlibGUgc3RyaW5ncywgcmVndWxhdG9ycywgY2xvY2tzLCBhbmQgSTJDIGRldmljZXMpLiBTaW5jZSBzeXprYWxsZXIgcnVucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSkgd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGFuZCBkZXZpY2UgdHJlZSBzZXR1cCwgdGhlIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA3OjExOjU2Ljk4MjEyMTc0MloiLCJTZXEiOjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6kxv[1] Phase: Running StartedAt: 2026-08-18 07:12:07 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6kxv[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-18 07:12:07 +0000 UTC FinishedAt: 2026-08-18 07:12:12 +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,}