ZGlmZiAtLWdpdCBhL0luYy9MZWdhY3kvc3RtMzJfaGFsX2xlZ2FjeS5oIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKaW5kZXggNzRkMjA1MS4uZTU3ZTgyMyAxMDA2NDQKLS0tIGEvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKKysrIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKQEAgLTI0MSw3ICsyNDEsNyBAQAogI2RlZmluZSBEQUNfQ0hJUENPTk5FQ1RfRU5BQkxFICAgICAgICBEQUNfQ0hJUENPTk5FQ1RfSU5URVJOQUwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJGNCkKKyNpZiBkZWZpbmVkKFNUTTMyTDEpIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRzQpCiAjZGVmaW5lIEhBTF9EQUNfTVNQX0lOSVRfQ0JfSUQgICAgICAgSEFMX0RBQ19NU1BJTklUX0NCX0lECiAjZGVmaW5lIEhBTF9EQUNfTVNQX0RFSU5JVF9DQl9JRCAgICAgSEFMX0RBQ19NU1BERUlOSVRfQ0JfSUQKICNlbmRpZgpAQCAtMzEzLDggKzMxMywxMyBAQAogI2VuZGlmIC8qIFNUTTMyTDQgKi8KIAogI2lmIGRlZmluZWQoU1RNMzJHMCkKLSNkZWZpbmUgRE1BX1JFUVVFU1RfREFDMV9DSEFOTkVMMQkJCQkJCQkJIERNQV9SRVFVRVNUX0RBQzFfQ0gxCi0jZGVmaW5lIERNQV9SRVFVRVNUX0RBQzFfQ0hBTk5FTDIJCQkJCQkJCSBETUFfUkVRVUVTVF9EQUMxX0NIMgorI2RlZmluZSBETUFfUkVRVUVTVF9EQUMxX0NIQU5ORUwxICAgICAgICAgICAgICAgIERNQV9SRVFVRVNUX0RBQzFfQ0gxCisjZGVmaW5lIERNQV9SRVFVRVNUX0RBQzFfQ0hBTk5FTDIgICAgICAgICAgICAgICAgRE1BX1JFUVVFU1RfREFDMV9DSDIKKyNkZWZpbmUgRE1BX1JFUVVFU1RfVElNMTZfVFJJR19DT00gICAgICAgICAgICAgICBETUFfUkVRVUVTVF9USU0xNl9DT00KKyNkZWZpbmUgRE1BX1JFUVVFU1RfVElNMTdfVFJJR19DT00gICAgICAgICAgICAgICBETUFfUkVRVUVTVF9USU0xN19DT00KKworI2RlZmluZSBMTF9ETUFNVVhfUkVRX1RJTTE2X1RSSUdfQ09NICAgICAgICAgICAgIExMX0RNQU1VWF9SRVFfVElNMTZfQ09NCisjZGVmaW5lIExMX0RNQU1VWF9SRVFfVElNMTdfVFJJR19DT00gICAgICAgICAgICAgTExfRE1BTVVYX1JFUV9USU0xN19DT00KICNlbmRpZgogCiAjaWYgZGVmaW5lZChTVE0zMkg3KQpAQCAtNjQzLDYgKzY0OCwxMCBAQAogI2RlZmluZSBIQUxfSFJUSU1fRXh0ZXJuYWxFdmVudENvdW50ZXJFbmFibGUgICAgSEFMX0hSVElNX0V4dEV2ZW50Q291bnRlckVuYWJsZQogI2RlZmluZSBIQUxfSFJUSU1fRXh0ZXJuYWxFdmVudENvdW50ZXJEaXNhYmxlICAgSEFMX0hSVElNX0V4dEV2ZW50Q291bnRlckRpc2FibGUKICNkZWZpbmUgSEFMX0hSVElNX0V4dGVybmFsRXZlbnRDb3VudGVyUmVzZXQgICAgIEhBTF9IUlRJTV9FeHRFdmVudENvdW50ZXJSZXNldAorI2RlZmluZSBIUlRJTV9USU1FRVZFTlRfQSAgICAgICAgICAgICAgICAgICAgICAgSFJUSU1fRVZFTlRDT1VOVEVSX0EKKyNkZWZpbmUgSFJUSU1fVElNRUVWRU5UX0IgICAgICAgICAgICAgICAgICAgICAgIEhSVElNX0VWRU5UQ09VTlRFUl9CCisjZGVmaW5lIEhSVElNX1RJTUVFVkVOVFJFU0VUTU9ERV9VTkNPTkRJVElPTkFMICBIUlRJTV9FVkVOVENPVU5URVJfUlNUTU9ERV9VTkNPTkRJVElPTkFMCisjZGVmaW5lIEhSVElNX1RJTUVFVkVOVFJFU0VUTU9ERV9DT05ESVRJT05BTCAgICBIUlRJTV9FVkVOVENPVU5URVJfUlNUTU9ERV9DT05ESVRJT05BTAogI2VuZGlmIC8qIFNUTTMyRzQgKi8KIAogI2lmIGRlZmluZWQoU1RNMzJINykKQEAgLTk1NSw3ICs5NjQsNyBAQAogI2RlZmluZSBPUEFNUF9QR0FDT05ORUNUX1ZNMCAgICAgICAgICAgICAgICAgIE9QQU1QX1BHQV9DT05ORUNUX0lOVkVSVElOR0lOUFVUX0lPMAogI2RlZmluZSBPUEFNUF9QR0FDT05ORUNUX1ZNMSAgICAgICAgICAgICAgICAgIE9QQU1QX1BHQV9DT05ORUNUX0lOVkVSVElOR0lOUFVUX0lPMQogCi0jaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkg3KQorI2lmIGRlZmluZWQoU1RNMzJMMSkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMkc0KQogI2RlZmluZSBIQUxfT1BBTVBfTVNQX0lOSVRfQ0JfSUQgICAgICAgSEFMX09QQU1QX01TUElOSVRfQ0JfSUQKICNkZWZpbmUgSEFMX09QQU1QX01TUF9ERUlOSVRfQ0JfSUQgICAgIEhBTF9PUEFNUF9NU1BERUlOSVRfQ0JfSUQKICNlbmRpZgpAQCAtMTAxNCw3ICsxMDIzLDcgQEAKIC8qKgogICAqIEB9CiAgICovCi0KKyAgCiAvKiogQGRlZmdyb3VwIEhBTF9SVENfQWxpYXNlZF9EZWZpbmVzIEhBTCBSVEMgQWxpYXNlZCBEZWZpbmVzIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCiAgICogQHsKICAgKi8KQEAgLTE0NTAsNyArMTQ1OSw3IEBACiAjZGVmaW5lIEhBU0hfSE1BQ0tleVR5cGVfU2hvcnRLZXkgIEhBU0hfSE1BQ19LRVlUWVBFX1NIT1JUS0VZCiAjZGVmaW5lIEhBU0hfSE1BQ0tleVR5cGVfTG9uZ0tleSAgIEhBU0hfSE1BQ19LRVlUWVBFX0xPTkdLRVkKIAotI2lmIGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkg3KQorI2lmIGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkg3KQogCiAjZGVmaW5lIEhBTF9IQVNIX01ENV9BY2N1bXVsYXRlICAgICAgICAgICAgICAgIEhBTF9IQVNIX01ENV9BY2NtbHQKICNkZWZpbmUgSEFMX0hBU0hfTUQ1X0FjY3VtdWxhdGVfRW5kICAgICAgICAgICAgSEFMX0hBU0hfTUQ1X0FjY21sdF9FbmQKQEAgLTE0NzIsNyArMTQ4MSw3IEBACiAjZGVmaW5lIEhBTF9IQVNIRXhfU0hBMjU2X0FjY3VtdWxhdGVfSVQgICAgICAgIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdF9JVAogI2RlZmluZSBIQUxfSEFTSEV4X1NIQTI1Nl9BY2N1bXVsYXRlX0VuZF9JVCAgICBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHRfRW5kX0lUCiAKLSNlbmRpZiAgLyogU1RNMzJMNCB8fCBTVE0zMkg3ICovCisjZW5kaWYgIC8qIFNUTTMyTDQgfHwgU1RNMzJMNSB8fCBTVE0zMkY0IHx8IFNUTTMyRjcgfHwgU1RNMzJINyAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTE1MzEsMTggKzE1NDAsMTggQEAKIAogI2RlZmluZSBIQUxfSTJDRmFzdE1vZGVQbHVzQ29uZmlnKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMsIGNtZCkgKCgoY21kKT09RU5BQkxFKT8gSEFMX0kyQ0V4X0VuYWJsZUZhc3RNb2RlUGx1cyhTWVNDRkdfSTJDRmFzdE1vZGVQbHVzKTogSEFMX0kyQ0V4X0Rpc2FibGVGYXN0TW9kZVBsdXMoU1lTQ0ZHX0kyQ0Zhc3RNb2RlUGx1cykpCiAKLSNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMSkgfHwgZGVmaW5lZChTVE0zMkYyKSB8fCBkZWZpbmVkKFNUTTMyRjMpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMyRzQpCisjaWYgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkYwKSB8fCBkZWZpbmVkKFNUTTMyRjEpIHx8IGRlZmluZWQoU1RNMzJGMikgfHwgZGVmaW5lZChTVE0zMkYzKSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkwwKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkc0KSB8fCBkZWZpbmVkKFNUTTMyTDEpCiAjZGVmaW5lIEhBTF9JMkNfTWFzdGVyX1NlcXVlbnRpYWxfVHJhbnNtaXRfSVQgIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9JVAogI2RlZmluZSBIQUxfSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1JlY2VpdmVfSVQgICBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9JVAogI2RlZmluZSBIQUxfSTJDX1NsYXZlX1NlcXVlbnRpYWxfVHJhbnNtaXRfSVQgICBIQUxfSTJDX1NsYXZlX1NlcV9UcmFuc21pdF9JVAogI2RlZmluZSBIQUxfSTJDX1NsYXZlX1NlcXVlbnRpYWxfUmVjZWl2ZV9JVCAgICBIQUxfSTJDX1NsYXZlX1NlcV9SZWNlaXZlX0lUCi0jZW5kaWYgLyogU1RNMzJINyB8fCBTVE0zMldCICB8fCBTVE0zMkcwIHx8IFNUTTMyRjAgfHwgU1RNMzJGMSB8fCBTVE0zMkYyIHx8IFNUTTMyRjMgfHwgU1RNMzJGNCB8fCBTVE0zMkY3IHx8IFNUTTMyTDAgfHwgU1RNMzJMNCB8fCBTVE0zMkw1IHx8IFNUTTMyRzQgKi8KLSNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkwwKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkc0KQorI2VuZGlmIC8qIFNUTTMySDcgfHwgU1RNMzJXQiAgfHwgU1RNMzJHMCB8fCBTVE0zMkYwIHx8IFNUTTMyRjEgfHwgU1RNMzJGMiB8fCBTVE0zMkYzIHx8IFNUTTMyRjQgfHwgU1RNMzJGNyB8fCBTVE0zMkwwIHx8IFNUTTMyTDQgfHwgU1RNMzJMNSB8fCBTVE0zMkc0IHx8IFNUTTMyTDEgKi8KKyNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkwwKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkc0KXx8IGRlZmluZWQoU1RNMzJMMSkKICNkZWZpbmUgSEFMX0kyQ19NYXN0ZXJfU2VxdWVudGlhbF9UcmFuc21pdF9ETUEgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0RNQQogI2RlZmluZSBIQUxfSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1JlY2VpdmVfRE1BICBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9ETUEKICNkZWZpbmUgSEFMX0kyQ19TbGF2ZV9TZXF1ZW50aWFsX1RyYW5zbWl0X0RNQSAgSEFMX0kyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfRE1BCiAjZGVmaW5lIEhBTF9JMkNfU2xhdmVfU2VxdWVudGlhbF9SZWNlaXZlX0RNQSAgIEhBTF9JMkNfU2xhdmVfU2VxX1JlY2VpdmVfRE1BCi0jZW5kaWYgLyogU1RNMzJINyB8fCBTVE0zMldCICB8fCBTVE0zMkcwIHx8IFNUTTMyRjQgfHwgU1RNMzJGNyB8fCBTVE0zMkwwIHx8IFNUTTMyTDQgfHwgU1RNMzJMNSB8fCBTVE0zMkc0ICovCisjZW5kaWYgLyogU1RNMzJINyB8fCBTVE0zMldCICB8fCBTVE0zMkcwIHx8IFNUTTMyRjQgfHwgU1RNMzJGNyB8fCBTVE0zMkwwIHx8IFNUTTMyTDQgfHwgU1RNMzJMNSB8fCBTVE0zMkc0IHx8IFNUTTMyTDEgKi8KIAogI2lmIGRlZmluZWQoU1RNMzJGNCkKICNkZWZpbmUgSEFMX0ZNUEkyQ19NYXN0ZXJfU2VxdWVudGlhbF9UcmFuc21pdF9JVCAgSEFMX0ZNUEkyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0lUCkBAIC0xNTYzLDEwICsxNTcyLDEwIEBACiAgICovCiAKICNpZiBkZWZpbmVkKFNUTTMyRzApCi0jZGVmaW5lIEhBTF9QV1JfQ29uZmlnUFZECQkJCQkJCQkJCQkJCQkJSEFMX1BXUkV4X0NvbmZpZ1BWRAotI2RlZmluZSBIQUxfUFdSX0VuYWJsZVBWRAkJCQkJCQkJCQkJCQkJCUhBTF9QV1JFeF9FbmFibGVQVkQKLSNkZWZpbmUgSEFMX1BXUl9EaXNhYmxlUFZECQkJCQkJCQkJCQkJCSAgSEFMX1BXUkV4X0Rpc2FibGVQVkQKLSNkZWZpbmUgSEFMX1BXUl9QVkRfSVJRSGFuZGxlcgkJCQkJCQkJCQkJICBIQUxfUFdSRXhfUFZEX0lSUUhhbmRsZXIKKyNkZWZpbmUgSEFMX1BXUl9Db25maWdQVkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9Db25maWdQVkQKKyNkZWZpbmUgSEFMX1BXUl9FbmFibGVQVkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9FbmFibGVQVkQKKyNkZWZpbmUgSEFMX1BXUl9EaXNhYmxlUFZEICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9EaXNhYmxlUFZECisjZGVmaW5lIEhBTF9QV1JfUFZEX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfUFZEX0lSUUhhbmRsZXIKICNlbmRpZgogI2RlZmluZSBIQUxfUFdSX1BWRENvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX1BXUl9Db25maWdQVkQKICNkZWZpbmUgSEFMX1BXUl9EaXNhYmxlQmtVcFJlZyAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9EaXNhYmxlQmtVcFJlZwpAQCAtMzI0Myw5ICszMjUyLDggQEAKICNkZWZpbmUgUkNDX01DT1NPVVJDRV9QTExDTEtfTk9ESVYgIFJDQ19NQ08xU09VUkNFX1BMTENMSwogI2RlZmluZSBSQ0NfTUNPU09VUkNFX1BMTENMS19ESVYyICAgUkNDX01DTzFTT1VSQ0VfUExMQ0xLX0RJVjIKIAotI2lmIGRlZmluZWQoU1RNMzJMNCkKKyNpZiBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRzQpIHx8IGRlZmluZWQoU1RNMzJMNSkKICNkZWZpbmUgUkNDX1JUQ0NMS1NPVVJDRV9OT19DTEsgICAgIFJDQ19SVENDTEtTT1VSQ0VfTk9ORQotI2VsaWYgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkw1KQogI2Vsc2UKICNkZWZpbmUgUkNDX1JUQ0NMS1NPVVJDRV9OT05FICAgICAgIFJDQ19SVENDTEtTT1VSQ0VfTk9fQ0xLCiAjZW5kaWYKQEAgLTM0ODEsOSArMzQ4OSw5IEBACiAjZGVmaW5lICBfX0hBTF9TRF9TRElPX0NMRUFSX0ZMQUcgICBfX0hBTF9TRF9TRE1NQ19DTEVBUl9GTEFHCiAjZGVmaW5lICBfX0hBTF9TRF9TRElPX0dFVF9JVCAgICAgICBfX0hBTF9TRF9TRE1NQ19HRVRfSVQKICNkZWZpbmUgIF9fSEFMX1NEX1NESU9fQ0xFQVJfSVQgICAgIF9fSEFMX1NEX1NETU1DX0NMRUFSX0lUCi0jZGVmaW5lICBTRElPX1NUQVRJQ19GTEFHUwkgICAgICAgIFNETU1DX1NUQVRJQ19GTEFHUwotI2RlZmluZSAgU0RJT19DTUQwVElNRU9VVAkgICAgICAgICAgU0RNTUNfQ01EMFRJTUVPVVQKLSNkZWZpbmUgIFNEX1NESU9fU0VORF9JRl9DT05ECSAgICAgIFNEX1NETU1DX1NFTkRfSUZfQ09ORAorI2RlZmluZSAgU0RJT19TVEFUSUNfRkxBR1MgICAgICAgICAgU0RNTUNfU1RBVElDX0ZMQUdTCisjZGVmaW5lICBTRElPX0NNRDBUSU1FT1VUICAgICAgICAgICBTRE1NQ19DTUQwVElNRU9VVAorI2RlZmluZSAgU0RfU0RJT19TRU5EX0lGX0NPTkQgICAgICAgU0RfU0RNTUNfU0VORF9JRl9DT05ECiAvKiBhbGlhcyBDTVNJUyBmb3IgY29tcGF0aWJpbGl0aWVzICovCiAjZGVmaW5lICBTRElPX0lSUW4gICAgICAgICAgICAgICAgICBTRE1NQzFfSVJRbgogI2RlZmluZSAgU0RJT19JUlFIYW5kbGVyICAgICAgICAgICAgU0RNTUMxX0lSUUhhbmRsZXIKQEAgLTM3NTEsOSArMzc1OSw5IEBACiAvKiogQGRlZmdyb3VwIEhBTF9RU1BJX0FsaWFzZWRfTWFjcm9zIEhBTCBRU1BJIEFsaWFzZWQgTWFjcm9zIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCiAgICogQHsKICAgKi8KLSNpZiBkZWZpbmVkIChTVE0zMkw0KQorI2lmIGRlZmluZWQgKFNUTTMyTDQpIHx8IGRlZmluZWQgKFNUTTMyRjQpIHx8IGRlZmluZWQgKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJINykKICNkZWZpbmUgSEFMX1FQU0lfVElNRU9VVF9ERUZBVUxUX1ZBTFVFIEhBTF9RU1BJX1RJTUVPVVRfREVGQVVMVF9WQUxVRQotI2VuZGlmCisjZW5kaWYgLyogU1RNMzJMNCB8fCBTVE0zMkY0IHx8IFNUTTMyRjcgKi8KIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2hhbC5oIGIvSW5jL3N0bTMybDR4eF9oYWwuaAppbmRleCA2NWEyYzE0Li5jMWJhOWNmIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2hhbC5oCisrKyBiL0luYy9zdG0zMmw0eHhfaGFsLmgKQEAgLTM4LDIwICszOCwyMCBAQAogICAqLwogCiAvKiBFeHBvcnRlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyoqIEBkZWZncm91cCBIQUxfRXhwb3J0ZWRfQ29uc3RhbnRzIEhBTCBFeHBvcnRlZCBDb25zdGFudHMKKy8qKiBAZGVmZ3JvdXAgSEFMX0V4cG9ydGVkX1R5cGVzIEhBTCBFeHBvcnRlZCBUeXBlcwogICAqIEB7CiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgSEFMX1RJQ0tfRlJFUSBUaWNrIEZyZXF1ZW5jeQogICAqIEB7CiAgICovCi0jZGVmaW5lICBIQUxfVElDS19GUkVRXzEwSFogICAgICAgICAxMDBVCi0jZGVmaW5lICBIQUxfVElDS19GUkVRXzEwMEhaICAgICAgICAxMFUKLSNkZWZpbmUgIEhBTF9USUNLX0ZSRVFfMUtIWiAgICAgICAgIDFVCi0jZGVmaW5lICBIQUxfVElDS19GUkVRX0RFRkFVTFQgICAgICBIQUxfVElDS19GUkVRXzFLSFoKLQordHlwZWRlZiBlbnVtCit7CisgIEhBTF9USUNLX0ZSRVFfMTBIWiAgICAgICAgID0gMTAwVSwKKyAgSEFMX1RJQ0tfRlJFUV8xMDBIWiAgICAgICAgPSAxMFUsCisgIEhBTF9USUNLX0ZSRVFfMUtIWiAgICAgICAgID0gMVUsCisgIEhBTF9USUNLX0ZSRVFfREVGQVVMVCAgICAgID0gSEFMX1RJQ0tfRlJFUV8xS0haCit9IEhBTF9UaWNrRnJlcVR5cGVEZWY7CiAvKioKICAgKiBAfQogICAqLwpAQCAtNjAsNiArNjAsMTIgQEAKICAgKiBAfQogICAqLwogCisvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiogQGRlZmdyb3VwIEhBTF9FeHBvcnRlZF9Db25zdGFudHMgSEFMIEV4cG9ydGVkIENvbnN0YW50cworICAqIEB7CisgICovCisKIC8qKiBAZGVmZ3JvdXAgU1lTQ0ZHX0V4cG9ydGVkX0NvbnN0YW50cyBTWVNDRkcgRXhwb3J0ZWQgQ29uc3RhbnRzCiAgICogQHsKICAgKi8KQEAgLTI0Nyw3ICsyNTMsMTQgQEAKICAgKiBAfQogICAqLwogCisvKioKKyAgKiBAfQorICAqLworCiAvKiBFeHBvcnRlZCBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBIQUxfRXhwb3J0ZWRfTWFjcm9zIEhBTCBFeHBvcnRlZCBNYWNyb3MKKyAgKiBAeworICAqLwogCiAvKiogQGRlZmdyb3VwIERCR01DVV9FeHBvcnRlZF9NYWNyb3MgREJHTUNVIEV4cG9ydGVkIE1hY3JvcwogICAqIEB7CkBAIC01MzYsMTkgKzU0OSwxNSBAQAogICAqIEB9CiAgICovCiAKKy8qKgorICAqIEB9CisgICovCisKIC8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGRlZmdyb3VwIEhBTF9Qcml2YXRlX01hY3JvcyBIQUwgUHJpdmF0ZSBNYWNyb3MKICAgKiBAewogICAqLwogCi0jZGVmaW5lIElTX1RJQ0tGUkVRKF9fRlJFUV9fKSAoKChfX0ZSRVFfXykgPT0gSEFMX1RJQ0tfRlJFUV8xMEhaKSAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19GUkVRX18pID09IEhBTF9USUNLX0ZSRVFfMTAwSFopIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRlJFUV9fKSA9PSBIQUxfVElDS19GUkVRXzFLSFopKQotCi0vKioKLSAgKiBAfQotICAqLwotCiAvKiogQGRlZmdyb3VwIFNZU0NGR19Qcml2YXRlX01hY3JvcyBTWVNDRkcgUHJpdmF0ZSBNYWNyb3MKICAgKiBAewogICAqLwpAQCAtNTk4LDYgKzYwNywxMCBAQAogICAqIEB9CiAgICovCiAKKy8qKgorICAqIEB9CisgICovCisKIC8qIEV4cG9ydGVkIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qKiBAYWRkdG9ncm91cCBIQUxfRXhwb3J0ZWRfVmFyaWFibGVzCkBAIC02MDUsNyArNjE4LDcgQEAKICAgKi8KIGV4dGVybiBfX0lPIHVpbnQzMl90IHV3VGljazsKIGV4dGVybiB1aW50MzJfdCB1d1RpY2tQcmlvOwotZXh0ZXJuIHVpbnQzMl90IHV3VGlja0ZyZXE7CitleHRlcm4gSEFMX1RpY2tGcmVxVHlwZURlZiB1d1RpY2tGcmVxOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTY0MCw4ICs2NTMsOCBAQAogdm9pZCAgICAgICAgICAgICAgIEhBTF9EZWxheSh1aW50MzJfdCBEZWxheSk7CiB1aW50MzJfdCAgICAgICAgICAgSEFMX0dldFRpY2sodm9pZCk7CiB1aW50MzJfdCAgICAgICAgICAgSEFMX0dldFRpY2tQcmlvKHZvaWQpOwotSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9TZXRUaWNrRnJlcSh1aW50MzJfdCBGcmVxKTsKLXVpbnQzMl90ICAgICAgICAgICBIQUxfR2V0VGlja0ZyZXEodm9pZCk7CitIQUxfU3RhdHVzVHlwZURlZiAgSEFMX1NldFRpY2tGcmVxKEhBTF9UaWNrRnJlcVR5cGVEZWYgRnJlcSk7CitIQUxfVGlja0ZyZXFUeXBlRGVmIEhBTF9HZXRUaWNrRnJlcSh2b2lkKTsKIHZvaWQgICAgICAgICAgICAgICBIQUxfU3VzcGVuZFRpY2sodm9pZCk7CiB2b2lkICAgICAgICAgICAgICAgSEFMX1Jlc3VtZVRpY2sodm9pZCk7CiB1aW50MzJfdCAgICAgICAgICAgSEFMX0dldEhhbFZlcnNpb24odm9pZCk7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2hhbF9hZGMuaCBiL0luYy9zdG0zMmw0eHhfaGFsX2FkYy5oCmluZGV4IDU3N2E0MmUuLjJhNWVlZDIgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfaGFsX2FkYy5oCisrKyBiL0luYy9zdG0zMmw0eHhfaGFsX2FkYy5oCkBAIC0xMjEsOCArMTIxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBhdXRvbWF0aWNhbGx5IGFkYXB0cyB0aGUgZnJlcXVlbmN5IG9mIEFEQyBjb252ZXJzaW9ucyB0cmlnZ2VycyB0byB0aGUgc3BlZWQgb2YgdGhlIHN5c3RlbSB0aGF0IHJlYWRzIHRoZSBkYXRhLiBNb3Jlb3ZlciwgdGhpcyBhdm9pZHMgcmlzayBvZiBvdmVycnVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbG93IGZyZXF1ZW5jeSBhcHBsaWNhdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgc2V0IHRvIEVOQUJMRSBvciBESVNBQkxFLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZTogRG8gbm90IHVzZSB3aXRoIGludGVycnVwdGlvbiBvciBETUEgKEhBTF9BRENfU3RhcnRfSVQoKSwgSEFMX0FEQ19TdGFydF9ETUEoKSkgc2luY2UgdGhleSBjbGVhciBpbW1lZGlhdGVseSB0aGUgRU9DIGZsYWcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGZyZWUgdGhlIElSUSB2ZWN0b3Igc2VxdWVuY2VyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZTogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHVzZSB3aXRoIGludGVycnVwdGlvbiBvciBETUEgKEhBTF9BRENfU3RhcnRfSVQoKSwgSEFMX0FEQ19TdGFydF9ETUEoKSkgc2luY2UgdGhlc2UgbW9kZXMgaGF2ZSB0byBjbGVhciBpbW1lZGlhdGVseSB0aGUgRU9DIGZsYWcgKGJ5IENQVSB0byBmcmVlIHRoZSBJUlEgcGVuZGluZyBldmVudCBvciBieSBETUEpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0byB3YWl0IHdpbGwgd29yayBidXQgZm9ydCBhIHZlcnkgc2hvcnQgdGltZSwgZGlzY2FyZGluZyBpdHMgaW50ZW5kZWQgYmVuZWZpdCAoZXhjZXB0IHNwZWNpZmljIGNhc2Ugb2YgaGlnaCBsb2FkIG9mIENQVSBvciBETUEgdHJhbnNmZXJzIHdoaWNoIGNhbiBqdXN0aWZ5IHVzYWdlIG9mIGF1dG8gd2FpdCkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEbyB1c2Ugd2l0aCBwb2xsaW5nOiAxLiBTdGFydCBjb252ZXJzaW9uIHdpdGggSEFMX0FEQ19TdGFydCgpLCAyLiBMYXRlciBvbiwgd2hlbiBBREMgY29udmVyc2lvbiBkYXRhIGlzIG5lZWRlZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBIQUxfQURDX1BvbGxGb3JDb252ZXJzaW9uKCkgdG8gZW5zdXJlIHRoYXQgY29udmVyc2lvbiBpcyBjb21wbGV0ZWQgYW5kIEhBTF9BRENfR2V0VmFsdWUoKSB0byByZXRyaWV2ZSBjb252ZXJzaW9uIHJlc3VsdCBhbmQgdHJpZyBhbm90aGVyIGNvbnZlcnNpb24gc3RhcnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW4gY2FzZSBvZiB1c2FnZSBvZiBBREMgZ3JvdXAgaW5qZWN0ZWQsIHVzZSB0aGUgZXF1aXZhbGVudCBmdW5jdGlvbnMgSEFMX0FEQ0V4SW5qZWN0ZWRfU3RhcnQoKSwgSEFMX0FEQ0V4X0luamVjdGVkR2V0VmFsdWUoKSwgLi4uKS4gKi8KQEAgLTE4NCw3ICsxODQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBBRENfSEFMX0VDX1JFR19ERlNETV9UUkFOU0ZFUi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGU6IFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBtb2RpZmllZCBvbmx5IGlmIHRoZXJlIGlzIG5vIGNvbnZlcnNpb24gaXMgb25nb2luZyAoYm90aCBBRFNUQVJUIGFuZCBKQURTVEFSVCBjbGVhcmVkKS4gKi8KIAotI2VuZGlmCisjZW5kaWYgLyogQURDX0NGR1JfREZTRE1DRkcgKi8KIH0gQURDX0luaXRUeXBlRGVmOwogCiAvKioKQEAgLTMzMyw3ICszMzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbCB0cmlnZ2VyLCBsb3cgcG93ZXIgYXV0byBwb3dlci1vbiAoaWYgZmVhdHVyZSBhdmFpbGFibGUpLCBtdWx0aW1vZGUgQURDIG1hc3RlciBjb250cm9sIChpZiBmZWF0dXJlIGF2YWlsYWJsZSkpICovCiAjZGVmaW5lIEhBTF9BRENfU1RBVEVfUkVHX0VPQyAgICAgICAgICAgKDB4MDAwMDAyMDBVTCkgICAvKiE8IENvbnZlcnNpb24gZGF0YSBhdmFpbGFibGUgb24gZ3JvdXAgcmVndWxhciAqLwogI2RlZmluZSBIQUxfQURDX1NUQVRFX1JFR19PVlIgICAgICAgICAgICgweDAwMDAwNDAwVUwpICAgLyohPCBPdmVycnVuIG9jY3VycmVuY2UgKi8KLSNkZWZpbmUgSEFMX0FEQ19TVEFURV9SRUdfRU9TTVAgICAgICAgICAoMHgwMDAwMDgwMFVMKSAgIC8qITwgTm90IGF2YWlsYWJsZSBvbiB0aGlzIFNUTTMyIHNlcmllOiBFbmQgT2YgU2FtcGxpbmcgZmxhZyByYWlzZWQgICovCisjZGVmaW5lIEhBTF9BRENfU1RBVEVfUkVHX0VPU01QICAgICAgICAgKDB4MDAwMDA4MDBVTCkgICAvKiE8IE5vdCBhdmFpbGFibGUgb24gdGhpcyBTVE0zMiBzZXJpZXM6IEVuZCBPZiBTYW1wbGluZyBmbGFnIHJhaXNlZCAgKi8KIAogLyogU3RhdGVzIG9mIEFEQyBncm91cCBpbmplY3RlZCAqLwogI2RlZmluZSBIQUxfQURDX1NUQVRFX0lOSl9CVVNZICAgICAgICAgICgweDAwMDAxMDAwVUwpICAgLyohPCBBIGNvbnZlcnNpb24gb24gQURDIGdyb3VwIGluamVjdGVkIGlzIG9uZ29pbmcgb3IgY2FuIG9jY3VyIChlaXRoZXIgYnkgYXV0by1pbmplY3Rpb24gbW9kZSwKQEAgLTM2MCw3ICszNjAsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX19BRENfSGFuZGxlVHlwZURlZgogI2Vsc2UKIHR5cGVkZWYgc3RydWN0Ci0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfSEFMX0FEQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIHsKICAgQURDX1R5cGVEZWYgICAgICAgICAgICAgICAgICAgKkluc3RhbmNlOyAgICAgICAgICAgICAgLyohPCBSZWdpc3RlciBiYXNlIGFkZHJlc3MgKi8KICAgQURDX0luaXRUeXBlRGVmICAgICAgICAgICAgICAgSW5pdDsgICAgICAgICAgICAgICAgICAgLyohPCBBREMgaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBhbmQgcmVndWxhciBjb252ZXJzaW9ucyBzZXR0aW5nICovCkBAIC00NzUsNyArNDc1LDcgQEAKICAgKiBAewogICAqLwogI2RlZmluZSBBRENfREFUQUFMSUdOX1JJR0hUICAgICAgICAgICAgICAgIChMTF9BRENfREFUQV9BTElHTl9SSUdIVCkvKiE8IEFEQyBjb252ZXJzaW9uIGRhdGEgYWxpZ25tZW50OiByaWdodCBhbGlnbmVkIChhbGlnbm1lbnQgb24gZGF0YSByZWdpc3RlciBMU0IgYml0IDApKi8KLSNkZWZpbmUgQURDX0RBVEFBTElHTl9MRUZUICAgICAgICAgICAgICAgICAoTExfQURDX0RBVEFfQUxJR05fTEVGVCkgICAgICAgLyohPCBBREMgY29udmVyc2lvbiBkYXRhIGFsaWdubWVudDogbGVmdCBhbGlnbmVkIChhbGlnbWVudCBvbiBkYXRhIHJlZ2lzdGVyIE1TQiBiaXQgMTUpKi8KKyNkZWZpbmUgQURDX0RBVEFBTElHTl9MRUZUICAgICAgICAgICAgICAgICAoTExfQURDX0RBVEFfQUxJR05fTEVGVCkgICAgICAgLyohPCBBREMgY29udmVyc2lvbiBkYXRhIGFsaWdubWVudDogbGVmdCBhbGlnbmVkIChhbGlnbm1lbnQgb24gZGF0YSByZWdpc3RlciBNU0IgYml0IDE1KSovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNTc5LDcgKzU3OSw3IEBACiAjZGVmaW5lIEFEQ19TQU1QTEVUSU1FXzY0MENZQ0xFU181ICAgICAgIChMTF9BRENfU0FNUExJTkdUSU1FXzY0MENZQ0xFU181KSAgLyohPCBTYW1wbGluZyB0aW1lIDY0MC41IEFEQyBjbG9jayBjeWNsZXMgKi8KICNpZiBkZWZpbmVkKEFEQ19TTVBSMV9TTVBQTFVTKQogI2RlZmluZSBBRENfU0FNUExFVElNRV8zQ1lDTEVTXzUgICAgICAgICAgIChBRENfU01QUjFfU01QUExVUyB8IExMX0FEQ19TQU1QTElOR1RJTUVfMkNZQ0xFU181KSAvKiE8IFNhbXBsaW5nIHRpbWUgMy41IEFEQyBjbG9jayBjeWNsZXMuIElmIHNlbGVjdGVkLCB0aGlzIHNhbXBsaW5nIHRpbWUgcmVwbGFjZXMgYWxsIHNhbXBsaW5nIHRpbWUgMi41IEFEQyBjbG9jayBjeWNsZXMuIFRoZXNlIDIgc2FtcGxpbmcgdGltZXMgY2Fubm90IGJlIHVzZWQgc2ltdWx0YW5lb3VzbHkuICovCi0jZW5kaWYKKyNlbmRpZiAvKiBBRENfU01QUjFfU01QUExVUyAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTYyMCw4ICs2MjAsOCBAQAogI2lmIGRlZmluZWQoQURDMykKICNkZWZpbmUgQURDX0NIQU5ORUxfREFDMUNIMV9BREMzICAgICAgICAgICAoTExfQURDX0NIQU5ORUxfREFDMUNIMV9BREMzKSAgICAvKiE8IEFEQyBpbnRlcm5hbCBjaGFubmVsIGNvbm5lY3RlZCB0byBEQUMxIGNoYW5uZWwgMSwgY2hhbm5lbCBzcGVjaWZpYyB0byBBREMzICovCiAjZGVmaW5lIEFEQ19DSEFOTkVMX0RBQzFDSDJfQURDMyAgICAgICAgICAgKExMX0FEQ19DSEFOTkVMX0RBQzFDSDJfQURDMykgICAgLyohPCBBREMgaW50ZXJuYWwgY2hhbm5lbCBjb25uZWN0ZWQgdG8gREFDMSBjaGFubmVsIDIsIGNoYW5uZWwgc3BlY2lmaWMgdG8gQURDMyAqLwotI2VuZGlmCi0jZW5kaWYKKyNlbmRpZiAvKiBBREMzICovCisjZW5kaWYgLyogQURDMSAmJiAhQURDMiAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTY5OSw3ICs2OTksNiBAQAogICAqIEB9CiAgICovCiAKLQogLyoqIEBkZWZncm91cCBBRENfRXZlbnRfdHlwZSBBREMgRXZlbnQgdHlwZQogICAqIEB7CiAgICovCkBAIC03OTcsMTAgKzc5NiwxMCBAQAogICAqIEBwYXJhbSBfX0hBTkRMRV9fIEFEQyBoYW5kbGUKICAgKiBAcmV0dmFsIFNFVCAoQURDIGVuYWJsZWQpIG9yIFJFU0VUIChBREMgZGlzYWJsZWQpCiAgICovCi0jZGVmaW5lIEFEQ19JU19FTkFCTEUoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICgoICgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSKSAmIChBRENfQ1JfQURFTiB8IEFEQ19DUl9BRERJUykpID09IEFEQ19DUl9BREVOKSAmJiBcCi0gICAgICAgICAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSKSAmIEFEQ19GTEFHX1JEWSkgPT0gQURDX0ZMQUdfUkRZKSAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKSA/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBBRENfSVNfRU5BQkxFKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IpICYgKEFEQ19DUl9BREVOIHwgQURDX0NSX0FERElTKSkgPT0gQURDX0NSX0FERU4pICYmIFwKKyAgICAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgQURDX0ZMQUdfUkRZKSA9PSBBRENfRkxBR19SRFkpICAgICAgICAgICAgICAgICAgXAorICAgKSA/IFNFVCA6IFJFU0VUKQogCiAvKioKICAgKiBAYnJpZWYgQ2hlY2sgaWYgY29udmVyc2lvbiBpcyBvbiBnb2luZyBvbiByZWd1bGFyIGdyb3VwLgpAQCAtOTczLDcgKzk3Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19USU1FX18pID09IEFEQ19TQU1QTEVUSU1FXzkyQ1lDTEVTXzUpICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19USU1FX18pID09IEFEQ19TQU1QTEVUSU1FXzI0N0NZQ0xFU181KSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19USU1FX18pID09IEFEQ19TQU1QTEVUSU1FXzY0MENZQ0xFU181KSAgICkKLSNlbmRpZgorI2VuZGlmIC8qIEFEQ19TTVBSMV9TTVBQTFVTICovCiAKIC8qKgogICAqIEBicmllZiBWZXJpZnkgdGhlIEFEQyByZWd1bGFyIGNoYW5uZWwgc2V0dGluZy4KQEAgLTEwNTIsNyArMTA1MSw3IEBACiAjZWxzZQogI2RlZmluZSBfX0hBTF9BRENfUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfQURDX1NUQVRFX1JFU0VUKQotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9BRENfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKIC8qKgogICAqIEBicmllZiBFbmFibGUgQURDIGludGVycnVwdC4KQEAgLTEyMDUsNyArMTIwNCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgQURDX0NIQU5ORUxfREFDMUNIMl9BREMyICgyKSg2KQogICAqICAgICAgICAgQGFyZyBAcmVmIEFEQ19DSEFOTkVMX0RBQzFDSDFfQURDMyAoMykoNikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBBRENfQ0hBTk5FTF9EQUMxQ0gyX0FEQzMgKDMpKDYpCi0gICogICAgICAgICAKKyAgKgogICAqICAgICAgICAgKDEpIE9uIFNUTTMyTDQsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzEuXG4KICAgKiAgICAgICAgICgyKSBPbiBTVE0zMkw0LCBwYXJhbWV0ZXIgYXZhaWxhYmxlIG9ubHkgb24gQURDIGluc3RhbmNlOiBBREMyLlxuCiAgICogICAgICAgICAoMykgT24gU1RNMzJMNCwgcGFyYW1ldGVyIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMy5cbgpAQCAtMTI1NSw3ICsxMjU0LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBBRENfQ0hBTk5FTF9EQUMxQ0gyX0FEQzIgKDIpKDYpCiAgICogICAgICAgICBAYXJnIEByZWYgQURDX0NIQU5ORUxfREFDMUNIMV9BREMzICgzKSg2KQogICAqICAgICAgICAgQGFyZyBAcmVmIEFEQ19DSEFOTkVMX0RBQzFDSDJfQURDMyAoMykoNikKLSAgKiAgICAgICAgIAorICAqCiAgICogICAgICAgICAoMSkgT24gU1RNMzJMNCwgcGFyYW1ldGVyIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMS5cbgogICAqICAgICAgICAgKDIpIE9uIFNUTTMyTDQsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzIuXG4KICAgKiAgICAgICAgICgzKSBPbiBTVE0zMkw0LCBwYXJhbWV0ZXIgYXZhaWxhYmxlIG9ubHkgb24gQURDIGluc3RhbmNlOiBBREMzLlxuCkBAIC0xMzE3LDcgKzEzMTYsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIEFEQ19DSEFOTkVMX0RBQzFDSDJfQURDMiAoMikoNikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBBRENfQ0hBTk5FTF9EQUMxQ0gxX0FEQzMgKDMpKDYpCiAgICogICAgICAgICBAYXJnIEByZWYgQURDX0NIQU5ORUxfREFDMUNIMl9BREMzICgzKSg2KQotICAqICAgICAgICAgCisgICoKICAgKiAgICAgICAgICgxKSBPbiBTVE0zMkw0LCBwYXJhbWV0ZXIgYXZhaWxhYmxlIG9ubHkgb24gQURDIGluc3RhbmNlOiBBREMxLlxuCiAgICogICAgICAgICAoMikgT24gU1RNMzJMNCwgcGFyYW1ldGVyIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMi5cbgogICAqICAgICAgICAgKDMpIE9uIFNUTTMyTDQsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzMuXG4KQEAgLTEzNzQsNyArMTM3Myw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgQURDX0NIQU5ORUxfREFDMUNIMl9BREMyICgyKSg2KQogICAqICAgICAgICAgQGFyZyBAcmVmIEFEQ19DSEFOTkVMX0RBQzFDSDFfQURDMyAoMykoNikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBBRENfQ0hBTk5FTF9EQUMxQ0gyX0FEQzMgKDMpKDYpCi0gICogICAgICAgICAKKyAgKgogICAqICAgICAgICAgKDEpIE9uIFNUTTMyTDQsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzEuXG4KICAgKiAgICAgICAgICgyKSBPbiBTVE0zMkw0LCBwYXJhbWV0ZXIgYXZhaWxhYmxlIG9ubHkgb24gQURDIGluc3RhbmNlOiBBREMyLlxuCiAgICogICAgICAgICAoMykgT24gU1RNMzJMNCwgcGFyYW1ldGVyIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMy5cbgpAQCAtMTQzMSw3ICsxNDMwLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBBRENfQ0hBTk5FTF9EQUMxQ0gyX0FEQzIgKDIpKDYpCiAgICogICAgICAgICBAYXJnIEByZWYgQURDX0NIQU5ORUxfREFDMUNIMV9BREMzICgzKSg2KQogICAqICAgICAgICAgQGFyZyBAcmVmIEFEQ19DSEFOTkVMX0RBQzFDSDJfQURDMyAoMykoNikKLSAgKiAgICAgICAgIAorICAqCiAgICogICAgICAgICAoMSkgT24gU1RNMzJMNCwgcGFyYW1ldGVyIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMS5cbgogICAqICAgICAgICAgKDIpIE9uIFNUTTMyTDQsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzIuXG4KICAgKiAgICAgICAgICgzKSBPbiBTVE0zMkw0LCBwYXJhbWV0ZXIgYXZhaWxhYmxlIG9ubHkgb24gQURDIGluc3RhbmNlOiBBREMzLlxuCkBAIC0xNDYwLDcgKzE0NTksNyBAQAogICAqLwogI2RlZmluZSBfX0hBTF9BRENfTVVMVElfQ09OVl9EQVRBX01BU1RFUl9TTEFWRShfX0FEQ19NVUxUSV9NQVNURVJfU0xBVkVfXywgX19BRENfTVVMVElfQ09OVl9EQVRBX18pICBcCiAgIF9fTExfQURDX01VTFRJX0NPTlZfREFUQV9NQVNURVJfU0xBVkUoKF9fQURDX01VTFRJX01BU1RFUl9TTEFWRV9fKSwgKF9fQURDX01VTFRJX0NPTlZfREFUQV9fKSkKLSNlbmRpZgorI2VuZGlmIC8qIEFEQ19NVUxUSU1PREVfU1VQUE9SVCAqLwogCiAvKioKICAgKiBAYnJpZWYgIEhlbHBlciBtYWNybyB0byBzZWxlY3QgdGhlIEFEQyBjb21tb24gaW5zdGFuY2UKQEAgLTE1MzEsMTAgKzE1MzAsMTAgQEAKICAgKi8KICNkZWZpbmUgX19IQUxfQURDX0NPTlZFUlRfREFUQV9SRVNPTFVUSU9OKF9fREFUQV9fLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQURDX1JFU09MVVRJT05fQ1VSUkVOVF9fLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQURDX1JFU09MVVRJT05fVEFSR0VUX18pICAgICAgICAgICAgXAotICBfX0xMX0FEQ19DT05WRVJUX0RBVEFfUkVTT0xVVElPTigoX19EQVRBX18pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FEQ19SRVNPTFVUSU9OX0NVUlJFTlRfXyksICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fVEFSR0VUX18pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BRENfUkVTT0xVVElPTl9UQVJHRVRfXykgXAorX19MTF9BRENfQ09OVkVSVF9EQVRBX1JFU09MVVRJT04oKF9fREFUQV9fKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BRENfUkVTT0xVVElPTl9DVVJSRU5UX18pLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FEQ19SRVNPTFVUSU9OX1RBUkdFVF9fKSkKIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gY2FsY3VsYXRlIHRoZSB2b2x0YWdlICh1bml0OiBtVm9sdCkKQEAgLTE1NTQsMTAgKzE1NTMsMTAgQEAKICAgKi8KICNkZWZpbmUgX19IQUxfQURDX0NBTENfREFUQV9UT19WT0xUQUdFKF9fVlJFRkFOQUxPR19WT0xUQUdFX18sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BRENfREFUQV9fLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQURDX1JFU09MVVRJT05fXykgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fTExfQURDX0NBTENfREFUQV9UT19WT0xUQUdFKChfX1ZSRUZBTkFMT0dfVk9MVEFHRV9fKSwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BRENfREFUQV9fKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fXykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19SRVNPTFVUSU9OX18pIFwKK19fTExfQURDX0NBTENfREFUQV9UT19WT0xUQUdFKChfX1ZSRUZBTkFMT0dfVk9MVEFHRV9fKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BRENfREFUQV9fKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BRENfUkVTT0xVVElPTl9fKSkKIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gY2FsY3VsYXRlIGFuYWxvZyByZWZlcmVuY2Ugdm9sdGFnZSAoVnJlZispCkBAIC0xNTY5LDcgKzE1NjgsNyBAQAogICAqICAgICAgICAgY29ubmVjdGVkIHRvIHBpbiBWcmVmKy4KICAgKiAgICAgICAgIE9uIGRldmljZXMgd2l0aCBzbWFsbCBwYWNrYWdlLCB0aGUgcGluIFZyZWYrIGlzIG5vdCBwcmVzZW50CiAgICogICAgICAgICBhbmQgaW50ZXJuYWxseSBib25kZWQgdG8gcGluIFZkZGEuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBjYWxpYnJhdGlvbiBkYXRhIG9mIGludGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgY2FsaWJyYXRpb24gZGF0YSBvZiBpbnRlcm5hbCB2b2x0YWdlIHJlZmVyZW5jZQogICAqICAgICAgICAgVnJlZkludCBjb3JyZXNwb25kcyB0byBhIHJlc29sdXRpb24gb2YgMTIgYml0cywKICAgKiAgICAgICAgIHRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIEFEQyByZXNvbHV0aW9uIHRvIGNvbnZlcnQgdm9sdGFnZSBvZgogICAqICAgICAgICAgaW50ZXJuYWwgdm9sdGFnZSByZWZlcmVuY2UgVnJlZkludC4KQEAgLTE1ODUsOSArMTU4NCw5IEBACiAgICogQHJldHZhbCBBbmFsb2cgcmVmZXJlbmNlIHZvbHRhZ2UgKHVuaXQ6IG1WKQogICAqLwogI2RlZmluZSBfX0hBTF9BRENfQ0FMQ19WUkVGQU5BTE9HX1ZPTFRBR0UoX19WUkVGSU5UX0FEQ19EQVRBX18sXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BRENfUkVTT0xVVElPTl9fKSAgICAgICAgICAgICAgICAgIFwKLSAgX19MTF9BRENfQ0FMQ19WUkVGQU5BTE9HX1ZPTFRBR0UoKF9fVlJFRklOVF9BRENfREFUQV9fKSwgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fXykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19SRVNPTFVUSU9OX18pIFwKK19fTExfQURDX0NBTENfVlJFRkFOQUxPR19WT0xUQUdFKChfX1ZSRUZJTlRfQURDX0RBVEFfXyksXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fXykpCiAKIC8qKgogICAqIEBicmllZiAgSGVscGVyIG1hY3JvIHRvIGNhbGN1bGF0ZSB0aGUgdGVtcGVyYXR1cmUgKHVuaXQ6IGRlZ3JlZSBDZWxzaXVzKQpAQCAtMTYxNiw3ICsxNjE1LDcgQEAKICAgKiBAbm90ZSAgIEFuYWxvZyByZWZlcmVuY2Ugdm9sdGFnZSAoVnJlZispIG11c3QgYmUgZWl0aGVyIGtub3duIGZyb20KICAgKiAgICAgICAgIHVzZXIgYm9hcmQgZW52aXJvbm1lbnQgb3IgY2FuIGJlIGNhbGN1bGF0ZWQgdXNpbmcgQURDIG1lYXN1cmVtZW50CiAgICogICAgICAgICBhbmQgQURDIGhlbHBlciBtYWNybyBAcmVmIF9fTExfQURDX0NBTENfVlJFRkFOQUxPR19WT0xUQUdFKCkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBjYWxpYnJhdGlvbiBkYXRhIG9mIHRlbXBlcmF0dXJlIHNlbnNvcgorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGNhbGlicmF0aW9uIGRhdGEgb2YgdGVtcGVyYXR1cmUgc2Vuc29yCiAgICogICAgICAgICBjb3JyZXNwb25kcyB0byBhIHJlc29sdXRpb24gb2YgMTIgYml0cywKICAgKiAgICAgICAgIHRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIEFEQyByZXNvbHV0aW9uIHRvIGNvbnZlcnQgdm9sdGFnZSBvZgogICAqICAgICAgICAgdGVtcGVyYXR1cmUgc2Vuc29yLgpAQCAtMTYzNiwxMCArMTYzNSwxMCBAQAogICAqLwogI2RlZmluZSBfX0hBTF9BRENfQ0FMQ19URU1QRVJBVFVSRShfX1ZSRUZBTkFMT0dfVk9MVEFHRV9fLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19URU1QU0VOU09SX0FEQ19EQVRBX18sXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19SRVNPTFVUSU9OX18pICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19MTF9BRENfQ0FMQ19URU1QRVJBVFVSRSgoX19WUkVGQU5BTE9HX1ZPTFRBR0VfXyksICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fVEVNUFNFTlNPUl9BRENfREFUQV9fKSwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FEQ19SRVNPTFVUSU9OX18pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19SRVNPTFVUSU9OX18pIFwKK19fTExfQURDX0NBTENfVEVNUEVSQVRVUkUoKF9fVlJFRkFOQUxPR19WT0xUQUdFX18pLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fVEVNUFNFTlNPUl9BRENfREFUQV9fKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FEQ19SRVNPTFVUSU9OX18pKQogCiAvKioKICAgKiBAYnJpZWYgIEhlbHBlciBtYWNybyB0byBjYWxjdWxhdGUgdGhlIHRlbXBlcmF0dXJlICh1bml0OiBkZWdyZWUgQ2Vsc2l1cykKQEAgLTE2OTAsMTMgKzE2ODksMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1RFTVBTRU5TT1JfQ0FMWF9URU1QX18sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVlJFRkFOQUxPR19WT0xUQUdFX18sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVEVNUFNFTlNPUl9BRENfREFUQV9fLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19SRVNPTFVUSU9OX18pICAgICAgICAgICAgICBcCi0gIF9fTExfQURDX0NBTENfVEVNUEVSQVRVUkVfVFlQX1BBUkFNUygoX19URU1QU0VOU09SX1RZUF9BVkdTTE9QRV9fKSwgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19URU1QU0VOU09SX1RZUF9DQUxYX1ZfXyksICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fVEVNUFNFTlNPUl9DQUxYX1RFTVBfXyksICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX1ZSRUZBTkFMT0dfVk9MVEFHRV9fKSwgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19URU1QU0VOU09SX0FEQ19EQVRBX18pLCAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fXykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BRENfUkVTT0xVVElPTl9fKSBcCitfX0xMX0FEQ19DQUxDX1RFTVBFUkFUVVJFX1RZUF9QQVJBTVMoKF9fVEVNUFNFTlNPUl9UWVBfQVZHU0xPUEVfXyksXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX1RFTVBTRU5TT1JfVFlQX0NBTFhfVl9fKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fVEVNUFNFTlNPUl9DQUxYX1RFTVBfXyksXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX1ZSRUZBTkFMT0dfVk9MVEFHRV9fKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fVEVNUFNFTlNPUl9BRENfREFUQV9fKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fXykpCiAKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2hhbF9hZGNfZXguaCBiL0luYy9zdG0zMmw0eHhfaGFsX2FkY19leC5oCmluZGV4IDFlMTRmNTQuLmM2Y2YzZTggMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfaGFsX2FkY19leC5oCisrKyBiL0luYy9zdG0zMmw0eHhfaGFsX2FkY19leC5oCkBAIC0zNDYsNyArMzQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfQ0ZHUl9BVVRETFkgIHwgQURDX0NGR1JfQ09OVCAgICB8IEFEQ19DRkdSX09WUk1PRCAgfFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfQ0ZHUl9FWFRFTiAgIHwgQURDX0NGR1JfRVhUU0VMICB8IEFEQ19DRkdSX0FMSUdOICAgfFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfQ0ZHUl9SRVMgICAgIHwgQURDX0NGR1JfRE1BQ0ZHICB8IEFEQ19DRkdSX0RNQUVOICAgKQotI2VuZGlmCisjZW5kaWYgLyogQURDX0NGR1JfREZTRE1DRkcgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0zNjQsNyArMzY0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX1NNUFIxX1NNUDYgfCBBRENfU01QUjFfU01QNSB8IEFEQ19TTVBSMV9TTVA0IHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19TTVBSMV9TTVAzIHwgQURDX1NNUFIxX1NNUDIgfCBBRENfU01QUjFfU01QMSB8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfU01QUjFfU01QMCkKLSNlbmRpZgorI2VuZGlmIC8qIEFEQ19TTVBSMV9TTVBQTFVTICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzc4LDcgKzM3OCw3IEBACiAjZGVmaW5lIEFEQ19DRkdSX0ZJRUxEU18yICAoKEFEQ19DRkdSX0RNQUNGRyB8IEFEQ19DRkdSX0FVVERMWSB8IEFEQ19DRkdSX0RGU0RNQ0ZHKSkKICNlbHNlCiAjZGVmaW5lIEFEQ19DRkdSX0ZJRUxEU18yICAoKEFEQ19DRkdSX0RNQUNGRyB8IEFEQ19DRkdSX0FVVERMWSkpCi0jZW5kaWYKKyNlbmRpZiAvKiBBRENfQ0ZHUl9ERlNETUNGRyAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTM4OCwxMSArMzg4LDExIEBACiAgICogQHsKICAgKi8KICNkZWZpbmUgQURDX0RGU0RNX01PREVfRElTQUJMRSAgICAgKDB4MDAwMDAwMDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyBjb252ZXJzaW9ucyBhcmUgbm90IHRyYW5zZmVycmVkIGJ5IERGU0RNLiAqLwotI2RlZmluZSBBRENfREZTRE1fTU9ERV9FTkFCTEUgICAgICAoTExfQURDX1JFR19ERlNETV9UUkFOU0ZFUl9FTkFCTEUpIC8qITwgQURDIGNvbnZlcnNpb24gZGF0YSBhcmUgdHJhbnNmZXJlZCB0byBERlNETSBmb3IgcG9zdCBwcm9jZXNzaW5nLiBUaGUgQURDIGNvbnZlcnNpb24gZGF0YSBmb3JtYXQgbXVzdCBiZSAxNi1iaXQgc2lnbmVkIGFuZCByaWdodCBhbGlnbmVkLCByZWZlciB0byByZWZlcmVuY2UgbWFudWFsLiBERlNETSB0cmFuc2ZlciBjYW5ub3QgYmUgdXNlZCBpZiBETUEgdHJhbnNmZXIgaXMgZW5hYmxlZC4gKi8KKyNkZWZpbmUgQURDX0RGU0RNX01PREVfRU5BQkxFICAgICAgKExMX0FEQ19SRUdfREZTRE1fVFJBTlNGRVJfRU5BQkxFKSAvKiE8IEFEQyBjb252ZXJzaW9uIGRhdGEgYXJlIHRyYW5zZmVycmVkIHRvIERGU0RNIGZvciBwb3N0IHByb2Nlc3NpbmcuIFRoZSBBREMgY29udmVyc2lvbiBkYXRhIGZvcm1hdCBtdXN0IGJlIDE2LWJpdCBzaWduZWQgYW5kIHJpZ2h0IGFsaWduZWQsIHJlZmVyIHRvIHJlZmVyZW5jZSBtYW51YWwuIERGU0RNIHRyYW5zZmVyIGNhbm5vdCBiZSB1c2VkIGlmIERNQSB0cmFuc2ZlciBpcyBlbmFibGVkLiAqLwogLyoqCiAgICogQH0KICAgKi8KLSNlbmRpZgorI2VuZGlmIC8qIEFEQ19DRkdSX0RGU0RNQ0ZHICovCiAKIC8qKgogICAqIEB9CkBAIC00MTUsNyArNDE1LDcgQEAKICAgKiAgICAgICAgIFVzYWdlIG9mIHRoaXMgbWFjcm8gaXMgbm90IHRoZSBTdGFuZGFyZCB3YXkgb2YgbXVsdGltb2RlCiAgICogICAgICAgICBjb25maWd1cmF0aW9uIGFuZCBjYW4gbGVhZCB0byBoYXZlIEhBTCBBREMgaGFuZGxlcyBzdGF0dXMKICAgKiAgICAgICAgIG1pc2FsaWduZWQuIFVzYWdlIG9mIHRoaXMgbWFjcm8gbXVzdCBiZSBsaW1pdGVkIHRvIGNhc2VzCi0gICogICAgICAgICBtZW50aW9ubmVkIGFib3ZlLgorICAqICAgICAgICAgbWVudGlvbmVkIGFib3ZlLgogICAqIEBwYXJhbSBfX0hBTkRMRV9fIEFEQyBoYW5kbGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCkBAIC00NTAsOCArNDUwLDggQEAKICAgKiBAcmV0dmFsIFNFVCAoY29udmVyc2lvbiBpcyBvbiBnb2luZykgb3IgUkVTRVQgKG5vIGNvbnZlcnNpb24gaXMgb24gZ29pbmcpLgogICAqLwogI2RlZmluZSBBRENfSVNfQ09OVkVSU0lPTl9PTkdPSU5HX1JFR1VMQVJfSU5KRUNURUQoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAoKCAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSKSAmIChBRENfQ1JfQURTVEFSVCB8IEFEQ19DUl9KQURTVEFSVCkpID09IDBVTCBcCi0gICAgICAgICkgPyBSRVNFVCA6IFNFVCkKKyAgKCggKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUikgJiAoQURDX0NSX0FEU1RBUlQgfCBBRENfQ1JfSkFEU1RBUlQpKSA9PSAwVUwgXAorICAgKSA/IFJFU0VUIDogU0VUKQogCiAvKioKICAgKiBAYnJpZWYgQ2hlY2sgaWYgY29udmVyc2lvbiBpcyBvbiBnb2luZyBvbiBpbmplY3RlZCBncm91cC4KQEAgLTQ3MSwxNSArNDcxLDE1IEBACiAjZGVmaW5lIEFEQ19JU19JTkRFUEVOREVOVChfX0hBTkRMRV9fKSAgICBcCiAgICggKCAoICgoX19IQU5ETEVfXyktPkluc3RhbmNlKSA9PSBBREMzKSBcCiAgICAgKT8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIFNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIFJFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICkKICNlbGlmIGRlZmluZWQgKFNUTTMyTDQzMXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0MzJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDMzeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ0Mnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0NDN4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDUxeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ1Mnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0NjJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFI1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRSN3h4KSB8fCBkZWZpbmVkIChTVE0zMkw0Ujl4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFM1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRTN3h4KSB8fCBkZWZpbmVkIChTVE0zMkw0Uzl4eCkKICNkZWZpbmUgQURDX0lTX0lOREVQRU5ERU5UKF9fSEFORExFX18pICAgKFNFVCkKICNlbGlmIGRlZmluZWQgKFNUTTMyTDQxMnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0MjJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFA1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRRNXh4KQogI2RlZmluZSBBRENfSVNfSU5ERVBFTkRFTlQoX19IQU5ETEVfXykgICAoUkVTRVQpCi0jZW5kaWYKKyNlbmRpZiAvKiAoU1RNMzJMNDcxeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ3NXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0NzZ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDg1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ4Nnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0OTZ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNEE2eHgpICovCiAKIC8qKgogICAqIEBicmllZiBTZXQgdGhlIHNlbGVjdGVkIGluamVjdGVkIENoYW5uZWwgcmFuay4KQEAgLTQ4Nyw3ICs0ODcsOCBAQAogICAqIEBwYXJhbSBfX1JBTktOQl9fIFJhbmsgbnVtYmVyLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBBRENfSlNRUl9SSyhfX0NIQU5ORUxOQl9fLCBfX1JBTktOQl9fKSAoKCgoX19DSEFOTkVMTkJfXykgJiBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfTUFTSykgPj4gQURDX0NIQU5ORUxfSURfTlVNQkVSX0JJVE9GRlNFVF9QT1MpIDw8ICgoX19SQU5LTkJfXykgJiBBRENfSU5KX1JBTktfSURfSlNRUl9NQVNLKSkKKyNkZWZpbmUgQURDX0pTUVJfUksoX19DSEFOTkVMTkJfXywgX19SQU5LTkJfXykgKCgoKF9fQ0hBTk5FTE5CX18pXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIEFEQ19DSEFOTkVMX0lEX05VTUJFUl9NQVNLKSA+PiBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfQklUT0ZGU0VUX1BPUykgPDwgKChfX1JBTktOQl9fKSAmIEFEQ19JTkpfUkFOS19JRF9KU1FSX01BU0spKQogCiAvKioKICAgKiBAYnJpZWYgQ29uZmlndXJlIEFEQyBpbmplY3RlZCBjb250ZXh0IHF1ZXVlCkBAIC01NTcsNyArNTU4LDggQEAKICAgKiBAcGFyYW0gX19DQUxJQlJBVElPTl9GQUNUT1JfXyBDYWxpYnJhdGlvbiBmYWN0b3IgdmFsdWUuCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIEFEQ19DQUxGQUNUX0RJRkZfU0VUKF9fQ0FMSUJSQVRJT05fRkFDVE9SX18pICgoKF9fQ0FMSUJSQVRJT05fRkFDVE9SX18pICYgKEFEQ19DQUxGQUNUX0NBTEZBQ1RfRF9Qb3MgPj4gQURDX0NBTEZBQ1RfQ0FMRkFDVF9EX1BvcykgKSA8PCBBRENfQ0FMRkFDVF9DQUxGQUNUX0RfUG9zKQorI2RlZmluZSBBRENfQ0FMRkFDVF9ESUZGX1NFVChfX0NBTElCUkFUSU9OX0ZBQ1RPUl9fKSAoKChfX0NBTElCUkFUSU9OX0ZBQ1RPUl9fKVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIChBRENfQ0FMRkFDVF9DQUxGQUNUX0RfUG9zID4+IEFEQ19DQUxGQUNUX0NBTEZBQ1RfRF9Qb3MpICkgPDwgQURDX0NBTEZBQ1RfQ0FMRkFDVF9EX1BvcykKIAogLyoqCiAgICogQGJyaWVmIENhbGlicmF0aW9uIGZhY3RvciBpbiBkaWZmZXJlbnRpYWwgbW9kZSB0byBiZSByZXRyaWV2ZWQgZnJvbSBjYWxpYnJhdGlvbiByZWdpc3Rlci4KQEAgLTY3OCw4ICs2ODAsOSBAQAogI2RlZmluZSBBRENfVEVNUEVSQVRVUkVfU0VOU09SX0lOU1RBTkNFKF9fSEFORExFX18pICAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpID09IEFEQzEpCiAjZWxpZiBkZWZpbmVkIChTVE0zMkw0NzF4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDc1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ3Nnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0ODV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDg2eHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ5Nnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0QTZ4eCkKIC8qICBUaGUgdGVtcGVyYXR1cmUgc2Vuc29yIG1lYXN1cmVtZW50IHBhdGggKGNoYW5uZWwgMTcpIGlzIGF2YWlsYWJsZSBvbiBBREMxIGFuZCBBREMzICovCi0jZGVmaW5lIEFEQ19URU1QRVJBVFVSRV9TRU5TT1JfSU5TVEFOQ0UoX19IQU5ETEVfXykgICgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpID09IEFEQzEpIHx8ICgoKF9fSEFORExFX18pLT5JbnN0YW5jZSkgPT0gQURDMykpCi0jZW5kaWYKKyNkZWZpbmUgQURDX1RFTVBFUkFUVVJFX1NFTlNPUl9JTlNUQU5DRShfX0hBTkRMRV9fKSAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZSkgPT0gQURDMSlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpID09IEFEQzMpKQorI2VuZGlmIC8qIChTVE0zMkw0MTJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDIyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQzMXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0MzJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDMzeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ0Mnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0NDN4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDUxeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ1Mnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0NjJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFA1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRRNXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UjV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFI3eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRSOXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UzV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFM3eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRTOXh4KSAqLwogCiAvKioKICAgKiBAYnJpZWYgVmVyaWZ5IHRoZSBBREMgaW5zdGFuY2UgY29ubmVjdGVkIHRvIHRoZSBiYXR0ZXJ5IHZvbHRhZ2UgVkJBVC4KQEAgLTY5MSw4ICs2OTQsOSBAQAogI2RlZmluZSBBRENfQkFUVEVSWV9WT0xUQUdFX0lOU1RBTkNFKF9fSEFORExFX18pICAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpID09IEFEQzEpCiAjZWxpZiBkZWZpbmVkIChTVE0zMkw0NzF4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDc1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ3Nnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0ODV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDg2eHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ5Nnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0QTZ4eCkKIC8qICBUaGUgYmF0dGVyeSB2b2x0YWdlIG1lYXN1cmVtZW50IHBhdGggKGNoYW5uZWwgMTgpIGlzIGF2YWlsYWJsZSBvbiBBREMxIGFuZCBBREMzICovCi0jZGVmaW5lIEFEQ19CQVRURVJZX1ZPTFRBR0VfSU5TVEFOQ0UoX19IQU5ETEVfXykgICgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpID09IEFEQzEpIHx8ICgoKF9fSEFORExFX18pLT5JbnN0YW5jZSkgPT0gQURDMykpCi0jZW5kaWYKKyNkZWZpbmUgQURDX0JBVFRFUllfVk9MVEFHRV9JTlNUQU5DRShfX0hBTkRMRV9fKSAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZSkgPT0gQURDMSlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpID09IEFEQzMpKQorI2VuZGlmIC8qIChTVE0zMkw0MTJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDIyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQzMXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0MzJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDMzeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ0Mnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0NDN4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDUxeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ1Mnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0NjJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFA1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRRNXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UjV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFI3eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRSOXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UzV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFM3eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRTOXh4KSAqLwogCiAvKioKICAgKiBAYnJpZWYgVmVyaWZ5IHRoZSBBREMgaW5zdGFuY2UgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5hbCB2b2x0YWdlIHJlZmVyZW5jZSBWUkVGSU5ULgpAQCAtNzI1LDE3MSArNzI5LDE3MSBAQAogICAqLwogI2lmIGRlZmluZWQgKFNUTTMyTDQzMXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0MzJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDMzeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ0Mnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0NDN4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDUxeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ1Mnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0NjJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFI1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRSN3h4KSB8fCBkZWZpbmVkIChTVE0zMkw0Ujl4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFM1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRTN3h4KSB8fCBkZWZpbmVkIChTVE0zMkw0Uzl4eCkKICNkZWZpbmUgSVNfQURDX0NIQU5ORUwoX19IQU5ETEVfXywgX19DSEFOTkVMX18pICgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpID09IEFEQzEpICAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMSkgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8yKSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzMpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNCkgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF81KSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzYpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNykgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF84KSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzkpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTApICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMSkgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEyKSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTMpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNCkgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE1KSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTYpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNykgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE4KSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfVlJFRklOVCkgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF9URU1QU0VOU09SKSAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX1ZCQVQpICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfREFDMUNIMSkgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF9EQUMxQ0gyKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzIpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzMpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzQpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzUpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzYpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzcpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzgpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzkpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEwKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzExKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEyKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEzKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE0KSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE1KSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE2KSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE3KSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE4KSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX1ZSRUZJTlQpICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX1RFTVBTRU5TT1IpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX1ZCQVQpICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX0RBQzFDSDEpICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX0RBQzFDSDIpKSkKICNlbGlmIGRlZmluZWQgKFNUTTMyTDQxMnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0MjJ4eCkKICNkZWZpbmUgSVNfQURDX0NIQU5ORUwoX19IQU5ETEVfXywgX19DSEFOTkVMX18pICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZSkgPT0gQURDMSkgICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xKSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzIpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMykgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF80KSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzUpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNikgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF83KSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzgpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfOSkgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMCkgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzExKSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTIpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMykgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE0KSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTUpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNikgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX1ZSRUZJTlQpICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfVEVNUFNFTlNPUikgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF9WQkFUKSkpICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlKSA9PSBBREMyKSAgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMikgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8zKSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzQpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNykgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF84KSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzkpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTApICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMSkgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEyKSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTMpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNCkgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE1KSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTYpICApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xKSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzIpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMykgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF80KSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzUpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNikgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF83KSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzgpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfOSkgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMCkgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzExKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTIpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMykgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE0KSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTUpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNikgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX1ZSRUZJTlQpICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfVEVNUFNFTlNPUikgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF9WQkFUKSkpICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlKSA9PSBBREMyKSAgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMikgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8zKSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzQpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNykgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF84KSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzkpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTApICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMSkgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEyKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTMpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNCkgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE1KSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTYpICApKSkKICNlbGlmIGRlZmluZWQgKFNUTTMyTDRQNXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UTV4eCkKICNkZWZpbmUgSVNfQURDX0NIQU5ORUwoX19IQU5ETEVfXywgX19DSEFOTkVMX18pICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZSkgPT0gQURDMSkgICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xKSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzIpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMykgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF80KSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzUpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNikgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF83KSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzgpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfOSkgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMCkgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzExKSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTIpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMykgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE0KSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTUpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNikgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE3KSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTgpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF9WUkVGSU5UKSAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX1RFTVBTRU5TT1IpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfVkJBVCkpKSAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZSkgPT0gQURDMikgICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xKSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzIpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMykgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF80KSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzUpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNikgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF83KSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzgpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfOSkgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMCkgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzExKSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTIpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMykgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE0KSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTUpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNikgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE3KSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTgpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF9EQUMxQ0gxX0FEQzIpfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX0RBQzFDSDJfQURDMikgICkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMikgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8zKSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzQpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNSkgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF82KSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzcpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfOCkgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF85KSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEwKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTEpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMikgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEzKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTQpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNSkgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE2KSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTcpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xOCkgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX1ZSRUZJTlQpICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfVEVNUFNFTlNPUikgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF9WQkFUKSkpICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlKSA9PSBBREMyKSAgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMikgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8zKSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzQpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNSkgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF82KSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzcpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfOCkgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF85KSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEwKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTEpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMikgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEzKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTQpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNSkgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE2KSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTcpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xOCkgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX0RBQzFDSDFfQURDMil8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfREFDMUNIMl9BREMyKSAgKSkpCiAjZWxpZiBkZWZpbmVkIChTVE0zMkw0NzF4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDc1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ3Nnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0ODV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDg2eHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ5Nnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0QTZ4eCkKICNkZWZpbmUgSVNfQURDX0NIQU5ORUwoX19IQU5ETEVfXywgX19DSEFOTkVMX18pICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZSkgPT0gQURDMSkgICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xKSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzIpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMykgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF80KSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzUpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNikgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF83KSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzgpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfOSkgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMCkgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzExKSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTIpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMykgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE0KSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTUpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNikgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX1ZSRUZJTlQpICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfVEVNUFNFTlNPUikgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF9WQkFUKSkpICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlKSA9PSBBREMyKSAgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMikgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8zKSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzQpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNSkgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF82KSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzcpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfOCkgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF85KSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEwKSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTEpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMikgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEzKSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTQpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNSkgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE2KSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTcpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xOCkgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX0RBQzFDSDFfQURDMikgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfREFDMUNIMl9BREMyKSkpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZSkgPT0gQURDMykgICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xKSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzIpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMykgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF80KSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzYpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNykgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF84KSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzkpICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTApICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMSkgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEyKSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTMpICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNCkgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE1KSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfVEVNUFNFTlNPUikgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF9WQkFUKSAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX0RBQzFDSDFfQURDMykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX0RBQzFDSDJfQURDMykgICkpKQotI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMSkgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8yKSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzMpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNCkgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF81KSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzYpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNykgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF84KSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzkpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTApICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMSkgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEyKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTMpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNCkgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE1KSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTYpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF9WUkVGSU5UKSAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX1RFTVBTRU5TT1IpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfVkJBVCkpKSAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZSkgPT0gQURDMikgICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xKSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzIpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMykgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF80KSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzUpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNikgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF83KSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzgpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfOSkgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMCkgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzExKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTIpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMykgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE0KSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTUpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNikgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE3KSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTgpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF9EQUMxQ0gxX0FEQzIpICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX0RBQzFDSDJfQURDMikpKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpID09IEFEQzMpICAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMSkgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8yKSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzMpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNCkgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF82KSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzcpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfOCkgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF85KSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEwKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTEpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMikgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEzKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTQpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNSkgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX1RFTVBTRU5TT1IpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfVkJBVCkgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF9EQUMxQ0gxX0FEQzMpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF9EQUMxQ0gyX0FEQzMpICApKSkKKyNlbmRpZiAvKiAoU1RNMzJMNDMxeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQzMnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0MzN4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDQyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ0M3h4KSB8fCBkZWZpbmVkIChTVE0zMkw0NTF4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDUyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ2Mnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UjV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFI3eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRSOXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UzV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFM3eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRTOXh4KSAqLwogCiAvKioKICAgKiBAYnJpZWYgVmVyaWZ5IHRoZSBBREMgY2hhbm5lbCBzZXR0aW5nIGluIGRpZmZlcmVudGlhbCBtb2RlLgpAQCAtOTE0LDM5ICs5MTgsMzkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE0KSAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTUpICAgICAgICkKICNlbGlmIGRlZmluZWQgKFNUTTMyTDQ3MXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0NzV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDc2eHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ4NXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0ODZ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDk2eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRBNnh4KQotICAgIC8qIEZvciBBREMxIGFuZCBBREMyLCBjaGFubmVscyAxIHRvIDE1IGFyZSBhdmFpbGFibGUgaW4gZGlmZmVyZW50aWFsIG1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxzIDAsIDE2IHRvIDE4IGNhbiBiZSBvbmx5IHVzZWQgaW4gc2luZ2xlLWVuZGVkIG1vZGUuCi0gICAgICAgRm9yIEFEQzMsIGNoYW5uZWxzIDEgdG8gMyBhbmQgNiB0byAxMiBhcmUgYXZhaWxhYmxlIGluIGRpZmZlcmVudGlhbCBtb2RlLAotICAgICAgICAgICAgICAgICBjaGFubmVscyA0LCA1IGFuZCAxMyB0byAxOCBjYW4gb25seSBiZSB1c2VkIGluIHNpbmdsZS1lbmRlZCBtb2RlLiAgKi8KKy8qIEZvciBBREMxIGFuZCBBREMyLCBjaGFubmVscyAxIHRvIDE1IGFyZSBhdmFpbGFibGUgaW4gZGlmZmVyZW50aWFsIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbHMgMCwgMTYgdG8gMTggY2FuIGJlIG9ubHkgdXNlZCBpbiBzaW5nbGUtZW5kZWQgbW9kZS4KKyAgIEZvciBBREMzLCBjaGFubmVscyAxIHRvIDMgYW5kIDYgdG8gMTIgYXJlIGF2YWlsYWJsZSBpbiBkaWZmZXJlbnRpYWwgbW9kZSwKKyAgICAgICAgICAgICBjaGFubmVscyA0LCA1IGFuZCAxMyB0byAxOCBjYW4gb25seSBiZSB1c2VkIGluIHNpbmdsZS1lbmRlZCBtb2RlLiAqLwogI2RlZmluZSBJU19BRENfRElGRl9DSEFOTkVMKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fKSAgKCgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlKSA9PSBBREMxKSAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fSEFORExFX18pLT5JbnN0YW5jZSkgPT0gQURDMikpICAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMSkgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzIpICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8zKSAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNCkgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzUpICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF82KSAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNykgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzgpICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF85KSAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTApICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzExKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMikgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTMpICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE0KSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNSkpKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpID09IEFEQzMpICAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMSkgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMikgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMykgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNikgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNykgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfOCkgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfOSkgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTApICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTEpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTIpICAgKSkpCi0jZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzIpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzMpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzQpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzUpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzYpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzcpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzgpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzkpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEwKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzExKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEyKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEzKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE0KSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE1KSkpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlKSA9PSBBREMzKSAgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMSkgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8yKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzMpICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNikgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF83KSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzgpICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfOSkgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMCkgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzExKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTIpICAgKSkpCisjZW5kaWYgLyogKFNUTTMyTDQxMnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0MjJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDMxeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQzMnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0MzN4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDQyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ0M3h4KSB8fCBkZWZpbmVkIChTVE0zMkw0NTF4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDUyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ2Mnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UDV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFE1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRSNXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0Ujd4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFI5eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRTNXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0Uzd4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFM5eHgpICovCiAKIC8qKgogICAqIEBicmllZiBWZXJpZnkgdGhlIEFEQyBzaW5nbGUtZW5kZWQgaW5wdXQgb3IgZGlmZmVyZW50aWFsIG1vZGUgc2V0dGluZy4KQEAgLTExNTUsNyArMTE1OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fSEFORExFX18pLT5Jbml0LkRGU0RNQ29uZmlnID09IEFEQ19ERlNETV9NT0RFX0VOQUJMRSkgKQogI2Vsc2UKICNkZWZpbmUgSVNfQURDX0RGU0RNQ0ZHX01PREUoX19IQU5ETEVfXykgKFNFVCkKLSNlbmRpZgorI2VuZGlmIC8qIEFEQ19DRkdSX0RGU0RNQ0ZHICovCiAKIC8qKgogICAqIEBicmllZiBSZXR1cm4gdGhlIERGU0RNIGNvbmZpZ3VyYXRpb24gbW9kZS4KQEAgLTExNjksNyArMTE3Myw3IEBACiAjZGVmaW5lIEFEQ19DRkdSX0RGU0RNKF9fSEFORExFX18pICgoX19IQU5ETEVfXyktPkluaXQuREZTRE1Db25maWcpCiAjZWxzZQogI2RlZmluZSBBRENfQ0ZHUl9ERlNETShfX0hBTkRMRV9fKSAoMHgwVUwpCi0jZW5kaWYKKyNlbmRpZiAvKiBBRENfQ0ZHUl9ERlNETUNGRyAqLwogCiAvKioKICAgKiBAfQpAQCAtMTIzNCw3ICsxMjM4LDggQEAKICAgKiBAewogICAqLwogLyogUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUhBTF9TdGF0dXNUeXBlRGVmICAgICAgIEhBTF9BRENFeF9JbmplY3RlZENvbmZpZ0NoYW5uZWwoQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMsQURDX0luamVjdGlvbkNvbmZUeXBlRGVmKiBzQ29uZmlnSW5qZWN0ZWQpOworSEFMX1N0YXR1c1R5cGVEZWYgICAgICAgSEFMX0FEQ0V4X0luamVjdGVkQ29uZmlnQ2hhbm5lbChBRENfSGFuZGxlVHlwZURlZiAqaGFkYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0luamVjdGlvbkNvbmZUeXBlRGVmICpzQ29uZmlnSW5qZWN0ZWQpOwogI2lmIGRlZmluZWQoQURDX01VTFRJTU9ERV9TVVBQT1JUKQogSEFMX1N0YXR1c1R5cGVEZWYgICAgICAgSEFMX0FEQ0V4X011bHRpTW9kZUNvbmZpZ0NoYW5uZWwoQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMsIEFEQ19NdWx0aU1vZGVUeXBlRGVmICptdWx0aW1vZGUpOwogI2VuZGlmIC8qIEFEQ19NVUxUSU1PREVfU1VQUE9SVCAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9oYWxfY2FuLmggYi9JbmMvc3RtMzJsNHh4X2hhbF9jYW4uaAppbmRleCA4Y2Q5MjA2Li44NTcyYjAxIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2hhbF9jYW4uaAorKysgYi9JbmMvc3RtMzJsNHh4X2hhbF9jYW4uaApAQCAtMjk1LDExICsyOTUsMTEgQEAKICNkZWZpbmUgSEFMX0NBTl9FUlJPUl9SWF9GT1YwICAgICAgICAgKDB4MDAwMDAyMDBVKSAgLyohPCBSeCBGSUZPMCBvdmVycnVuIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhBTF9DQU5fRVJST1JfUlhfRk9WMSAgICAgICAgICgweDAwMDAwNDAwVSkgIC8qITwgUnggRklGTzEgb3ZlcnJ1biBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfQ0FOX0VSUk9SX1RYX0FMU1QwICAgICAgICAoMHgwMDAwMDgwMFUpICAvKiE8IFR4TWFpbGJveCAwIHRyYW5zbWl0IGZhaWx1cmUgZHVlIHRvIGFyYml0cmF0aW9uIGxvc3QgKi8KLSNkZWZpbmUgSEFMX0NBTl9FUlJPUl9UWF9URVJSMCAgICAgICAgKDB4MDAwMDEwMDBVKSAgLyohPCBUeE1haWxib3ggMSB0cmFuc21pdCBmYWlsdXJlIGR1ZSB0byB0cmFubWl0IGVycm9yICAgICovCisjZGVmaW5lIEhBTF9DQU5fRVJST1JfVFhfVEVSUjAgICAgICAgICgweDAwMDAxMDAwVSkgIC8qITwgVHhNYWlsYm94IDEgdHJhbnNtaXQgZmFpbHVyZSBkdWUgdG8gdHJhbnNtaXQgZXJyb3IgICAgKi8KICNkZWZpbmUgSEFMX0NBTl9FUlJPUl9UWF9BTFNUMSAgICAgICAgKDB4MDAwMDIwMDBVKSAgLyohPCBUeE1haWxib3ggMCB0cmFuc21pdCBmYWlsdXJlIGR1ZSB0byBhcmJpdHJhdGlvbiBsb3N0ICovCi0jZGVmaW5lIEhBTF9DQU5fRVJST1JfVFhfVEVSUjEgICAgICAgICgweDAwMDA0MDAwVSkgIC8qITwgVHhNYWlsYm94IDEgdHJhbnNtaXQgZmFpbHVyZSBkdWUgdG8gdHJhbm1pdCBlcnJvciAgICAqLworI2RlZmluZSBIQUxfQ0FOX0VSUk9SX1RYX1RFUlIxICAgICAgICAoMHgwMDAwNDAwMFUpICAvKiE8IFR4TWFpbGJveCAxIHRyYW5zbWl0IGZhaWx1cmUgZHVlIHRvIHRyYW5zbWl0IGVycm9yICAgICovCiAjZGVmaW5lIEhBTF9DQU5fRVJST1JfVFhfQUxTVDIgICAgICAgICgweDAwMDA4MDAwVSkgIC8qITwgVHhNYWlsYm94IDAgdHJhbnNtaXQgZmFpbHVyZSBkdWUgdG8gYXJiaXRyYXRpb24gbG9zdCAqLwotI2RlZmluZSBIQUxfQ0FOX0VSUk9SX1RYX1RFUlIyICAgICAgICAoMHgwMDAxMDAwMFUpICAvKiE8IFR4TWFpbGJveCAxIHRyYW5zbWl0IGZhaWx1cmUgZHVlIHRvIHRyYW5taXQgZXJyb3IgICAgKi8KKyNkZWZpbmUgSEFMX0NBTl9FUlJPUl9UWF9URVJSMiAgICAgICAgKDB4MDAwMTAwMDBVKSAgLyohPCBUeE1haWxib3ggMSB0cmFuc21pdCBmYWlsdXJlIGR1ZSB0byB0cmFuc21pdCBlcnJvciAgICAqLwogI2RlZmluZSBIQUxfQ0FOX0VSUk9SX1RJTUVPVVQgICAgICAgICAoMHgwMDAyMDAwMFUpICAvKiE8IFRpbWVvdXQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSEFMX0NBTl9FUlJPUl9OT1RfSU5JVElBTElaRUQgKDB4MDAwNDAwMDBVKSAgLyohPCBQZXJpcGhlcmFsIG5vdCBpbml0aWFsaXplZCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhBTF9DQU5fRVJST1JfTk9UX1JFQURZICAgICAgICgweDAwMDgwMDAwVSkgIC8qITwgUGVyaXBoZXJhbCBub3QgcmVhZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9oYWxfY29tcC5oIGIvSW5jL3N0bTMybDR4eF9oYWxfY29tcC5oCmluZGV4IDI0YWZhOTcuLjAwZDE4MTcgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfaGFsX2NvbXAuaAorKysgYi9JbmMvc3RtMzJsNHh4X2hhbF9jb21wLmgKQEAgLTU4NSw3ICs1ODUsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgQ09NUF9JU19DT01QX0RlZmluaXRpb25zIENPTVAgcHJpdmF0ZSBtYWNyb3MgdG8gY2hlY2sgaW5wdXQgcGFyYW1ldGVycworLyoqIEBkZWZncm91cCBDT01QX0lTX0NPTVBfUHJpdmF0ZV9EZWZpbml0aW9ucyBDT01QIHByaXZhdGUgbWFjcm9zIHRvIGNoZWNrIGlucHV0IHBhcmFtZXRlcnMKICAgKiBAewogICAqLwogI2lmIGRlZmluZWQoQ09NUDIpCkBAIC02MDYsNyArNjA2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19JTlBVVF9QTFVTX18pID09IENPTVBfSU5QVVRfUExVU19JTzIpKQogI2VuZGlmCiAKLS8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWUsIGNvbXBhcmF0b3IgaW5wdXQgbWludXMgcGFyYW1ldGVycyBhcmUgICAgICAgICAgICovCisvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgY29tcGFyYXRvciBpbnB1dCBtaW51cyBwYXJhbWV0ZXJzIGFyZSAgICAgICAgICAqLwogLyogICAgICAgdGhlIHNhbWUgb24gYWxsIENPTVAgaW5zdGFuY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgIEhvd2V2ZXIsIGNvbXBhcmF0b3IgaW5zdGFuY2Uga2VwdCBhcyBtYWNybyBwYXJhbWV0ZXIgZm9yICAgICAgICAgICAgICovCiAvKiAgICAgICBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgU1RNMzIgZmFtaWxpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9oYWxfZGNtaS5oIGIvSW5jL3N0bTMybDR4eF9oYWxfZGNtaS5oCmluZGV4IDQ2ZWQwYmUuLmUwOGVhOTEgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfaGFsX2RjbWkuaAorKysgYi9JbmMvc3RtMzJsNHh4X2hhbF9kY21pLmgKQEAgLTE0Myw2ICsxNDMsMTIgQEAKIAogICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICBwQnVmZlB0cjsgICAgICAgICAgICAvKiE8IFBvaW50ZXIgdG8gRE1BIG91dHB1dCBidWZmZXIgKi8KIAorICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICBYZmVyQ291bnRfMDsgICAgICAgICAvKiE8IEluaXRpYWwgRE1BIHRyYW5zZmVycyBjb3VudGVyICovCisKKyAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgWGZlclNpemVfMDsgICAgICAgICAgLyohPCBJbml0aWFsIERNQSB0cmFuc2ZlcnMgc2l6ZSAgICovCisKKyAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgcEJ1ZmZQdHJfMDsgICAgICAgICAgLyohPCBTYXZlZ3VhcmQgb2YgcG9pbnRlciB0byBETUEgb3V0cHV0IGJ1ZmZlciAqLworCiAgIERNQV9IYW5kbGVUeXBlRGVmICAgICAgICAgICAgICpETUFfSGFuZGxlOyAgICAgICAgIC8qITwgUG9pbnRlciB0byBETUEgaGFuZGxlciAgICAgICAqLwogCiAgIERNQV9IYW5kbGVUeXBlRGVmICAgICAgICAgICAgICpETUFNMk1fSGFuZGxlOyAgICAgIC8qITwgUG9pbnRlciB0byBETUEgaGFuZGxlciBmb3IgbWVtb3J5IHRvIG1lbW9yeSBjb3B5CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2hhbF9mbGFzaC5oIGIvSW5jL3N0bTMybDR4eF9oYWxfZmxhc2guaAppbmRleCA5ODY1NTdlLi5iOTZiYThjIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2hhbF9mbGFzaC5oCisrKyBiL0luYy9zdG0zMmw0eHhfaGFsX2ZsYXNoLmgKQEAgLTczOCw4ICs3MzgsOCBAQAogICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBGTEFTSF9GTEFHIChTRVQgb3IgUkVTRVQpLgogICAqLwogI2RlZmluZSBfX0hBTF9GTEFTSF9HRVRfRkxBRyhfX0ZMQUdfXykgICAgICAgICAgKCgoKF9fRkxBR19fKSAmIEZMQVNIX0ZMQUdfRUNDUl9FUlJPUlMpICE9IDBVKSAgICAgPyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJFQURfQklUKEZMQVNILT5FQ0NSLCAoX19GTEFHX18pKSA9PSAoX19GTEFHX18pKSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUkVBRF9CSVQoRkxBU0gtPlNSLCAgIChfX0ZMQUdfXykpID09IChfX0ZMQUdfXykpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSRUFEX0JJVChGTEFTSC0+RUNDUiwgKF9fRkxBR19fKSkgIT0gMFUpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSRUFEX0JJVChGTEFTSC0+U1IsICAgKF9fRkxBR19fKSkgIT0gMFUpKQogCiAvKioKICAgKiBAYnJpZWYgIENsZWFyIHRoZSBGTEFTSCdzIHBlbmRpbmcgZmxhZ3MuCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2hhbF9ncGlvX2V4LmggYi9JbmMvc3RtMzJsNHh4X2hhbF9ncGlvX2V4LmgKaW5kZXggODdlODAzNS4uZTcwNWZhOCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfZ3Bpb19leC5oCisrKyBiL0luYy9zdG0zMmw0eHhfaGFsX2dwaW9fZXguaApAQCAtOTI2LDYgKzkyNiw3IEBACiAvKioKICAgKiBAYnJpZWYgICBBRiAxNCBzZWxlY3Rpb24KICAgKi8KKyNkZWZpbmUgR1BJT19BRjE0X1RJTTIgICAgICAgICAoKHVpbnQ4X3QpMHgwRSkgIC8qIFRJTTIgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAqLwogI2RlZmluZSBHUElPX0FGMTRfVElNMTUgICAgICAgICgodWludDhfdCkweDBFKSAgLyogVElNMTUgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICovCiAjZGVmaW5lIEdQSU9fQUYxNF9USU0xNiAgICAgICAgKCh1aW50OF90KTB4MEUpICAvKiBUSU0xNiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgKi8KICNkZWZpbmUgR1BJT19BRjE0X1RJTTE3ICAgICAgICAoKHVpbnQ4X3QpMHgwRSkgIC8qIFRJTTE3IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9oYWxfaGNkLmggYi9JbmMvc3RtMzJsNHh4X2hhbF9oY2QuaAppbmRleCBlYTAzZDc1Li4yMWU0NzkxIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2hhbF9oY2QuaAorKysgYi9JbmMvc3RtMzJsNHh4X2hhbF9oY2QuaApAQCAtMTA4LDggKzEwOCw4IEBACiAvKiogQGRlZmdyb3VwIEhDRF9TcGVlZCBIQ0QgU3BlZWQKICAgKiBAewogICAqLwotI2RlZmluZSBIQ0RfU1BFRURfRlVMTCAgICAgICAgICAgICAgIFVTQkhfRlNfU1BFRUQKLSNkZWZpbmUgSENEX1NQRUVEX0xPVyAgICAgICAgICAgICAgICBVU0JIX0xTX1NQRUVECisjZGVmaW5lIEhDRF9TUEVFRF9GVUxMICAgICAgICAgICAgICAgVVNCSF9GU0xTX1NQRUVECisjZGVmaW5lIEhDRF9TUEVFRF9MT1cgICAgICAgICAgICAgICAgVVNCSF9GU0xTX1NQRUVECiAKIC8qKgogICAqIEB9CkBAIC0xNDIsOSArMTQyLDkgQEAKIAogLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAZGVmZ3JvdXAgSENEX0V4cG9ydGVkX01hY3JvcyBIQ0QgRXhwb3J0ZWQgTWFjcm9zCi0gKiAgQGJyaWVmIG1hY3JvcyB0byBoYW5kbGUgaW50ZXJydXB0cyBhbmQgc3BlY2lmaWMgY2xvY2sgY29uZmlndXJhdGlvbnMKLSAqIEB7Ci0gKi8KKyAgKiAgQGJyaWVmIG1hY3JvcyB0byBoYW5kbGUgaW50ZXJydXB0cyBhbmQgc3BlY2lmaWMgY2xvY2sgY29uZmlndXJhdGlvbnMKKyAgKiBAeworICAqLwogI2RlZmluZSBfX0hBTF9IQ0RfRU5BQkxFKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICh2b2lkKVVTQl9FbmFibGVHbG9iYWxJbnQgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpCiAjZGVmaW5lIF9fSEFMX0hDRF9ESVNBQkxFKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgKHZvaWQpVVNCX0Rpc2FibGVHbG9iYWxJbnQgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpCiAKQEAgLTE2OSwxOSArMTY5LDE1IEBACiAvKiogQGRlZmdyb3VwIEhDRF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKICAgKiBAewogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgICAgICBIQUxfSENEX0luaXQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwotSEFMX1N0YXR1c1R5cGVEZWYgICAgICBIQUxfSENEX0RlSW5pdChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgICAgIEhBTF9IQ0RfSENfSW5pdChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY2hfbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBlcG51bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZGV2X2FkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHNwZWVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBlcF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbXBzKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQ0RfSW5pdChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSENEX0RlSW5pdChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSENEX0hDX0luaXQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsIHVpbnQ4X3QgY2hfbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZXBudW0sIHVpbnQ4X3QgZGV2X2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBzcGVlZCwgdWludDhfdCBlcF90eXBlLCB1aW50MTZfdCBtcHMpOwogCi1IQUxfU3RhdHVzVHlwZURlZiAgICAgSEFMX0hDRF9IQ19IYWx0KEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkLCB1aW50OF90IGNoX251bSk7Ci12b2lkICAgICAgICAgICAgICAgICAgSEFMX0hDRF9Nc3BJbml0KEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkKTsKLXZvaWQgICAgICAgICAgICAgICAgICBIQUxfSENEX01zcERlSW5pdChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSENEX0hDX0hhbHQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsIHVpbnQ4X3QgY2hfbnVtKTsKK3ZvaWQgICAgICAgICAgICAgIEhBTF9IQ0RfTXNwSW5pdChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7Cit2b2lkICAgICAgICAgICAgICBIQUxfSENEX01zcERlSW5pdChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7CiAKICNpZiAoVVNFX0hBTF9IQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogLyoqIEBkZWZncm91cCBIQUxfSENEX0NhbGxiYWNrX0lEX2VudW1lcmF0aW9uX2RlZmluaXRpb24gSEFMIFVTQiBPVEcgSENEIENhbGxiYWNrIElEIGVudW1lcmF0aW9uIGRlZmluaXRpb24KQEAgLTE5MCwxNCArMTg2LDE0IEBACiAgICovCiB0eXBlZGVmIGVudW0KIHsKLSAgSEFMX0hDRF9TT0ZfQ0JfSUQgICAgICAgICAgID0gMHgwMSwgICAgICAgLyohPCBVU0IgSENEIFNPRiBjYWxsYmFjayBJRCAgICAgICAgICAgKi8KLSAgSEFMX0hDRF9DT05ORUNUX0NCX0lEICAgICAgID0gMHgwMiwgICAgICAgLyohPCBVU0IgSENEIENvbm5lY3QgY2FsbGJhY2sgSUQgICAgICAgKi8KLSAgSEFMX0hDRF9ESVNDT05ORUNUX0NCX0lEICAgPSAweDAzLCAgICAgICAvKiE8IFVTQiBIQ0QgRGlzY29ubmVjdCBjYWxsYmFjayBJRCAgICAqLwotICBIQUxfSENEX1BPUlRfRU5BQkxFRF9DQl9JRCAgID0gMHgwNCwgICAgICAvKiE8IFVTQiBIQ0QgUG9ydCBFbmFibGUgY2FsbGJhY2sgSUQgICAqLwotICBIQUxfSENEX1BPUlRfRElTQUJMRURfQ0JfSUQgID0gMHgwNSwgICAgICAvKiE8IFVTQiBIQ0QgUG9ydCBEaXNhYmxlIGNhbGxiYWNrIElEICAqLworICBIQUxfSENEX1NPRl9DQl9JRCAgICAgICAgICAgID0gMHgwMSwgICAgICAgLyohPCBVU0IgSENEIFNPRiBjYWxsYmFjayBJRCAgICAgICAgICAgKi8KKyAgSEFMX0hDRF9DT05ORUNUX0NCX0lEICAgICAgICA9IDB4MDIsICAgICAgIC8qITwgVVNCIEhDRCBDb25uZWN0IGNhbGxiYWNrIElEICAgICAgICovCisgIEhBTF9IQ0RfRElTQ09OTkVDVF9DQl9JRCAgICAgPSAweDAzLCAgICAgICAvKiE8IFVTQiBIQ0QgRGlzY29ubmVjdCBjYWxsYmFjayBJRCAgICAqLworICBIQUxfSENEX1BPUlRfRU5BQkxFRF9DQl9JRCAgID0gMHgwNCwgICAgICAgLyohPCBVU0IgSENEIFBvcnQgRW5hYmxlIGNhbGxiYWNrIElEICAgKi8KKyAgSEFMX0hDRF9QT1JUX0RJU0FCTEVEX0NCX0lEICA9IDB4MDUsICAgICAgIC8qITwgVVNCIEhDRCBQb3J0IERpc2FibGUgY2FsbGJhY2sgSUQgICovCiAKLSAgSEFMX0hDRF9NU1BJTklUX0NCX0lEICAgICAgID0gMHgwNiwgICAgICAgLyohPCBVU0IgSENEIE1zcEluaXQgY2FsbGJhY2sgSUQgICAgICAgKi8KLSAgSEFMX0hDRF9NU1BERUlOSVRfQ0JfSUQgICAgID0gMHgwNyAgICAgICAgLyohPCBVU0IgSENEIE1zcERlSW5pdCBjYWxsYmFjayBJRCAgICAgKi8KKyAgSEFMX0hDRF9NU1BJTklUX0NCX0lEICAgICAgICA9IDB4MDYsICAgICAgIC8qITwgVVNCIEhDRCBNc3BJbml0IGNhbGxiYWNrIElEICAgICAgICovCisgIEhBTF9IQ0RfTVNQREVJTklUX0NCX0lEICAgICAgPSAweDA3ICAgICAgICAvKiE8IFVTQiBIQ0QgTXNwRGVJbml0IGNhbGxiYWNrIElEICAgICAqLwogCiB9IEhBTF9IQ0RfQ2FsbGJhY2tJRFR5cGVEZWY7CiAvKioKQEAgLTIzMSwyNSArMjI3LDIwIEBACiAvKiogQGFkZHRvZ3JvdXAgSENEX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIgSW5wdXQgYW5kIE91dHB1dCBvcGVyYXRpb24gZnVuY3Rpb25zCiAgICogQHsKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmICAgICAgIEhBTF9IQ0RfSENfU3VibWl0UmVxdWVzdChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGNoX251bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGRpcmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGVwX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB0b2tlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwYnVmZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBkb19waW5nKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQ0RfSENfU3VibWl0UmVxdWVzdChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwgdWludDhfdCBjaF9udW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBkaXJlY3Rpb24sIHVpbnQ4X3QgZXBfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHRva2VuLCB1aW50OF90ICpwYnVmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBsZW5ndGgsIHVpbnQ4X3QgZG9fcGluZyk7CiAKIC8qIE5vbi1CbG9ja2luZyBtb2RlOiBJbnRlcnJ1cHQgKi8KLXZvaWQgICAgICAgICAgICAgSEFMX0hDRF9JUlFIYW5kbGVyKEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkKTsKLXZvaWQgICAgICAgICAgICAgSEFMX0hDRF9TT0ZfQ2FsbGJhY2soSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwotdm9pZCAgICAgICAgICAgICBIQUxfSENEX0Nvbm5lY3RfQ2FsbGJhY2soSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwotdm9pZCAgICAgICAgICAgICBIQUxfSENEX0Rpc2Nvbm5lY3RfQ2FsbGJhY2soSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwotdm9pZCAgICAgICAgICAgICBIQUxfSENEX1BvcnRFbmFibGVkX0NhbGxiYWNrKEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkKTsKLXZvaWQgICAgICAgICAgICAgSEFMX0hDRF9Qb3J0RGlzYWJsZWRfQ2FsbGJhY2soSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwotdm9pZCAgICAgICAgICAgICBIQUxfSENEX0hDX05vdGlmeVVSQkNoYW5nZV9DYWxsYmFjayhIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBjaG51bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSENEX1VSQlN0YXRlVHlwZURlZiB1cmJfc3RhdGUpOwordm9pZCBIQUxfSENEX0lSUUhhbmRsZXIoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwordm9pZCBIQUxfSENEX1NPRl9DYWxsYmFjayhIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7Cit2b2lkIEhBTF9IQ0RfQ29ubmVjdF9DYWxsYmFjayhIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7Cit2b2lkIEhBTF9IQ0RfRGlzY29ubmVjdF9DYWxsYmFjayhIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7Cit2b2lkIEhBTF9IQ0RfUG9ydEVuYWJsZWRfQ2FsbGJhY2soSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwordm9pZCBIQUxfSENEX1BvcnREaXNhYmxlZF9DYWxsYmFjayhIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7Cit2b2lkIEhBTF9IQ0RfSENfTm90aWZ5VVJCQ2hhbmdlX0NhbGxiYWNrKEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkLCB1aW50OF90IGNobnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQ0RfVVJCU3RhdGVUeXBlRGVmIHVyYl9zdGF0ZSk7CiAvKioKICAgKiBAfQogICAqLwpAQCAtMjU4LDkgKzI0OSw5IEBACiAvKiogQGFkZHRvZ3JvdXAgSENEX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucwogICAqIEB7CiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiAgICAgICBIQUxfSENEX1Jlc2V0UG9ydChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgICAgICBIQUxfSENEX1N0YXJ0KEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkKTsKLUhBTF9TdGF0dXNUeXBlRGVmICAgICAgIEhBTF9IQ0RfU3RvcChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSENEX1Jlc2V0UG9ydChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSENEX1N0YXJ0KEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQ0RfU3RvcChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7CiAvKioKICAgKiBAfQogICAqLwpAQCAtMjcxLDggKzI2Miw4IEBACiAgICovCiBIQ0RfU3RhdGVUeXBlRGVmICAgICAgICBIQUxfSENEX0dldFN0YXRlKEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkKTsKIEhDRF9VUkJTdGF0ZVR5cGVEZWYgICAgIEhBTF9IQ0RfSENfR2V0VVJCU3RhdGUoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsIHVpbnQ4X3QgY2hudW0pOwotdWludDMyX3QgICAgICAgICAgICAgICAgSEFMX0hDRF9IQ19HZXRYZmVyQ291bnQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsIHVpbnQ4X3QgY2hudW0pOwogSENEX0hDU3RhdGVUeXBlRGVmICAgICAgSEFMX0hDRF9IQ19HZXRTdGF0ZShIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwgdWludDhfdCBjaG51bSk7Cit1aW50MzJfdCAgICAgICAgICAgICAgICBIQUxfSENEX0hDX0dldFhmZXJDb3VudChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwgdWludDhfdCBjaG51bSk7CiB1aW50MzJfdCAgICAgICAgICAgICAgICBIQUxfSENEX0dldEN1cnJlbnRGcmFtZShIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7CiB1aW50MzJfdCAgICAgICAgICAgICAgICBIQUxfSENEX0dldEN1cnJlbnRTcGVlZChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7CiAvKioKQEAgLTI4NSw4ICsyNzYsOCBAQAogCiAvKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCBIQ0RfUHJpdmF0ZV9NYWNyb3MgSENEIFByaXZhdGUgTWFjcm9zCi0gKiBAewotICovCisgICogQHsKKyAgKi8KIAogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfaGFsX2kyYy5oIGIvSW5jL3N0bTMybDR4eF9oYWxfaTJjLmgKaW5kZXggYjg2ZDgxMC4uMTI4YTExYiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfaTJjLmgKKysrIGIvSW5jL3N0bTMybDR4eF9oYWxfaTJjLmgKQEAgLTQ5NSw3ICs0OTUsOCBAQAogICAqCiAgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIF9fSU5URVJSVVBUX18gKFNFVCBvciBSRVNFVCkuCiAgICovCi0jZGVmaW5lIF9fSEFMX0kyQ19HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IxICYgKF9fSU5URVJSVVBUX18pKSA9PSAoX19JTlRFUlJVUFRfXykpID8gU0VUIDogUkVTRVQpCisjZGVmaW5lIF9fSEFMX0kyQ19HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IxICYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKSA/IFNFVCA6IFJFU0VUKQogCiAvKiogQGJyaWVmICBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgSTJDIGZsYWcgaXMgc2V0IG9yIG5vdC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBJMkMgSGFuZGxlLgpAQCAtNTIxLDcgKzUyMiw4IEBACiAgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIF9fRkxBR19fIChTRVQgb3IgUkVTRVQpLgogICAqLwogI2RlZmluZSBJMkNfRkxBR19NQVNLICAoMHgwMDAxRkZGRlUpCi0jZGVmaW5lIF9fSEFMX0kyQ19HRVRfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgJiAoX19GTEFHX18pKSA9PSAoX19GTEFHX18pKSA/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBfX0hBTF9JMkNfR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0ZMQUdfXykpID09IChfX0ZMQUdfXykpID8gU0VUIDogUkVTRVQpCiAKIC8qKiBAYnJpZWYgIENsZWFyIHRoZSBJMkMgcGVuZGluZyBmbGFncyB3aGljaCBhcmUgY2xlYXJlZCBieSB3cml0aW5nIDEgaW4gYSBzcGVjaWZpYyBiaXQuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgSTJDIEhhbmRsZS4KQEAgLTU0MSw3ICs1NDMsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9JMkNfQ0xFQVJfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgKCgoX19GTEFHX18pID09IEkyQ19GTEFHX1RYRSkgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSIHw9IChfX0ZMQUdfXykpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklDUiA9IChfX0ZMQUdfXykpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklDUiA9IChfX0ZMQUdfXykpKQogCiAvKiogQGJyaWVmICBFbmFibGUgdGhlIHNwZWNpZmllZCBJMkMgcGVyaXBoZXJhbC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBJMkMgSGFuZGxlLgpAQCAtNTgzLDcgKzU4NSw4IEBACiAKIC8qIENhbGxiYWNrcyBSZWdpc3Rlci9VblJlZ2lzdGVyIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWYgKFVTRV9IQUxfSTJDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19SZWdpc3RlckNhbGxiYWNrKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCBIQUxfSTJDX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsIHBJMkNfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX1JlZ2lzdGVyQ2FsbGJhY2soSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIEhBTF9JMkNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSTJDX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19VblJlZ2lzdGVyQ2FsbGJhY2soSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIEhBTF9JMkNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCk7CiAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfUmVnaXN0ZXJBZGRyQ2FsbGJhY2soSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHBJMkNfQWRkckNhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOwpAQCAtNTk4LDQ5ICs2MDEsNzAgQEAKICAgKi8KIC8qIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioqKioqKiBCbG9ja2luZyBtb2RlOiBQb2xsaW5nICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01hc3Rlcl9UcmFuc21pdChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfUmVjZWl2ZShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfVHJhbnNtaXQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01hc3Rlcl9SZWNlaXZlKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX1NsYXZlX1RyYW5zbWl0KEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgVGltZW91dCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX1NsYXZlX1JlY2VpdmUoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWVtX1dyaXRlKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgVGltZW91dCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01lbV9SZWFkKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgVGltZW91dCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX0lzRGV2aWNlUmVhZHkoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQzMl90IFRyaWFscywgdWludDMyX3QgVGltZW91dCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01lbV9Xcml0ZShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWVtX1JlYWQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfSXNEZXZpY2VSZWFkeShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDMyX3QgVHJpYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRpbWVvdXQpOwogCiAvKioqKioqKiBOb24tQmxvY2tpbmcgbW9kZTogSW50ZXJydXB0ICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01hc3Rlcl9UcmFuc21pdF9JVChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfUmVjZWl2ZV9JVChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfVHJhbnNtaXRfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01hc3Rlcl9SZWNlaXZlX0lUKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX1NsYXZlX1RyYW5zbWl0X0lUKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX1NsYXZlX1JlY2VpdmVfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWVtX1dyaXRlX0lUKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01lbV9SZWFkX0lUKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01lbV9Xcml0ZV9JVChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWVtX1JlYWRfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKTsKIAotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0lUKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfU2VxX1JlY2VpdmVfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucyk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX1NsYXZlX1NlcV9UcmFuc21pdF9JVChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfU2xhdmVfU2VxX1JlY2VpdmVfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0lUKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfU2xhdmVfU2VxX1RyYW5zbWl0X0lUKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfU2xhdmVfU2VxX1JlY2VpdmVfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBYZmVyT3B0aW9ucyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX0VuYWJsZUxpc3Rlbl9JVChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX0Rpc2FibGVMaXN0ZW5fSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfQWJvcnRfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MpOwogCiAvKioqKioqKiBOb24tQmxvY2tpbmcgbW9kZTogRE1BICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01hc3Rlcl9UcmFuc21pdF9ETUEoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWFzdGVyX1JlY2VpdmVfRE1BKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01hc3Rlcl9UcmFuc21pdF9ETUEoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfUmVjZWl2ZV9ETUEoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX1NsYXZlX1RyYW5zbWl0X0RNQShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19TbGF2ZV9SZWNlaXZlX0RNQShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NZW1fV3JpdGVfRE1BKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01lbV9SZWFkX0RNQShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NZW1fV3JpdGVfRE1BKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWVtX1JlYWRfRE1BKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpOwogCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfRE1BKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfU2VxX1JlY2VpdmVfRE1BKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfRE1BKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19TbGF2ZV9TZXFfUmVjZWl2ZV9ETUEoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfRE1BKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfU2VxX1JlY2VpdmVfRE1BKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX1NsYXZlX1NlcV9UcmFuc21pdF9ETUEoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfU2xhdmVfU2VxX1JlY2VpdmVfRE1BKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKIC8qKgogICAqIEB9CiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBJMkNfSVJRX0hhbmRsZXJfYW5kX0NhbGxiYWNrcyBJUlEgSGFuZGxlciBhbmQgQ2FsbGJhY2tzCi0gKiBAewotICovCisgICogQHsKKyAgKi8KIC8qKioqKioqIEkyQyBJUlFIYW5kbGVyIGFuZCBDYWxsYmFja3MgdXNlZCBpbiBub24gYmxvY2tpbmcgbW9kZXMgKEludGVycnVwdCBhbmQgRE1BKSAqLwogdm9pZCBIQUxfSTJDX0VWX0lSUUhhbmRsZXIoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMpOwogdm9pZCBIQUxfSTJDX0VSX0lSUUhhbmRsZXIoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMpOwpAQCAtNzMyLDcgKzc1Niw4IEBACiAjZGVmaW5lIElTX0kyQ19UUkFOU0ZFUl9PVEhFUl9PUFRJT05TX1JFUVVFU1QoUkVRVUVTVCkgKCgoUkVRVUVTVCkgPT0gSTJDX09USEVSX0ZSQU1FKSAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IEkyQ19PVEhFUl9BTkRfTEFTVF9GUkFNRSkpCiAKLSNkZWZpbmUgSTJDX1JFU0VUX0NSMihfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMiAmPSAodWludDMyX3QpfigodWludDMyX3QpKEkyQ19DUjJfU0FERCB8IEkyQ19DUjJfSEVBRDEwUiB8IEkyQ19DUjJfTkJZVEVTIHwgSTJDX0NSMl9SRUxPQUQgfCBJMkNfQ1IyX1JEX1dSTikpKQorI2RlZmluZSBJMkNfUkVTRVRfQ1IyKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IyICY9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCl+KCh1aW50MzJfdCkoSTJDX0NSMl9TQUREIHwgSTJDX0NSMl9IRUFEMTBSIHwgSTJDX0NSMl9OQllURVMgfCBJMkNfQ1IyX1JFTE9BRCB8IEkyQ19DUjJfUkRfV1JOKSkpCiAKICNkZWZpbmUgSTJDX0dFVF9BRERSX01BVENIKF9fSEFORExFX18pICAgICAgICAgICAgKCh1aW50MTZfdCkoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUiAmIEkyQ19JU1JfQUREQ09ERSkgPj4gMTZVKSkKICNkZWZpbmUgSTJDX0dFVF9ESVIoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KSgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSICYgSTJDX0lTUl9ESVIpID4+IDE2VSkpCkBAIC03NDMsMTMgKzc2OCwxNSBAQAogI2RlZmluZSBJU19JMkNfT1dOX0FERFJFU1MxKEFERFJFU1MxKSAgICAgICAgICAgICAoKEFERFJFU1MxKSA8PSAweDAwMDAwM0ZGVSkKICNkZWZpbmUgSVNfSTJDX09XTl9BRERSRVNTMihBRERSRVNTMikgICAgICAgICAgICAgKChBRERSRVNTMikgPD0gKHVpbnQxNl90KTB4MDBGRlUpCiAKLSNkZWZpbmUgSTJDX01FTV9BRERfTVNCKF9fQUREUkVTU19fKSAgICAgICAgICAgICAgKCh1aW50OF90KSgodWludDE2X3QpKCgodWludDE2X3QpKChfX0FERFJFU1NfXykgJiAodWludDE2X3QpKDB4RkYwMFUpKSkgPj4gOFUpKSkKKyNkZWZpbmUgSTJDX01FTV9BRERfTVNCKF9fQUREUkVTU19fKSAgICAgICAgICAgICAgKCh1aW50OF90KSgodWludDE2X3QpKCgodWludDE2X3QpKChfX0FERFJFU1NfXykgJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KSgweEZGMDBVKSkpID4+IDhVKSkpCiAjZGVmaW5lIEkyQ19NRU1fQUREX0xTQihfX0FERFJFU1NfXykgICAgICAgICAgICAgICgodWludDhfdCkoKHVpbnQxNl90KSgoX19BRERSRVNTX18pICYgKHVpbnQxNl90KSgweDAwRkZVKSkpKQogCiAjZGVmaW5lIEkyQ19HRU5FUkFURV9TVEFSVChfX0FERE1PREVfXyxfX0FERFJFU1NfXykgKCgoX19BRERNT0RFX18pID09IEkyQ19BRERSRVNTSU5HTU9ERV83QklUKSA/ICh1aW50MzJfdCkoKCgodWludDMyX3QpKF9fQUREUkVTU19fKSAmIChJMkNfQ1IyX1NBREQpKSB8IChJMkNfQ1IyX1NUQVJUKSB8IChJMkNfQ1IyX0FVVE9FTkQpKSAmICh+STJDX0NSMl9SRF9XUk4pKSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpKCgoKHVpbnQzMl90KShfX0FERFJFU1NfXykgJiAoSTJDX0NSMl9TQUREKSkgfCAoSTJDX0NSMl9BREQxMCkgfCAoSTJDX0NSMl9TVEFSVCkpICYgKH5JMkNfQ1IyX1JEX1dSTikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpKCgoKHVpbnQzMl90KShfX0FERFJFU1NfXykgJiAoSTJDX0NSMl9TQUREKSkgfCAoSTJDX0NSMl9BREQxMCkgfCAoSTJDX0NSMl9TVEFSVCkpICYgKH5JMkNfQ1IyX1JEX1dSTikpKQogCi0jZGVmaW5lIEkyQ19DSEVDS19GTEFHKF9fSVNSX18sIF9fRkxBR19fKSAgICAgICAgICgoKChfX0lTUl9fKSAmICgoX19GTEFHX18pICYgSTJDX0ZMQUdfTUFTSykpID09ICgoX19GTEFHX18pICYgSTJDX0ZMQUdfTUFTSykpID8gU0VUIDogUkVTRVQpCisjZGVmaW5lIEkyQ19DSEVDS19GTEFHKF9fSVNSX18sIF9fRkxBR19fKSAgICAgICAgICgoKChfX0lTUl9fKSAmICAoKF9fRkxBR19fKSAmIEkyQ19GTEFHX01BU0spKSA9PSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZMQUdfXykgJiBJMkNfRkxBR19NQVNLKSkgPyBTRVQgOiBSRVNFVCkKICNkZWZpbmUgSTJDX0NIRUNLX0lUX1NPVVJDRShfX0NSMV9fLCBfX0lUX18pICAgICAgKCgoKF9fQ1IxX18pICYgKF9fSVRfXykpID09IChfX0lUX18pKSA/IFNFVCA6IFJFU0VUKQogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfaGFsX2kyY19leC5oIGIvSW5jL3N0bTMybDR4eF9oYWxfaTJjX2V4LmgKaW5kZXggMWJhZTZiYS4uMTRiNDM4MSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfaTJjX2V4LmgKKysrIGIvSW5jL3N0bTMybDR4eF9oYWxfaTJjX2V4LmgKQEAgLTM4LDcgKzM4LDYgQEAKIAogLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KIC8qKiBAZGVmZ3JvdXAgSTJDRXhfRXhwb3J0ZWRfQ29uc3RhbnRzIEkyQyBFeHRlbmRlZCBFeHBvcnRlZCBDb25zdGFudHMKICAgKiBAewogICAqLwpAQCAtODYsMjQgKzg1LDUxIEBACiAgICovCiAKIC8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBJMkNFeF9FeHBvcnRlZF9NYWNyb3MgSTJDIEV4dGVuZGVkIEV4cG9ydGVkIE1hY3JvcworICAqIEB7CisgICovCiAKKy8qKgorICAqIEB9CisgICovCisKKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGFkZHRvZ3JvdXAgSTJDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zIEkyQyBFeHRlbmRlZCBFeHBvcnRlZCBGdW5jdGlvbnMKICAgKiBAewogICAqLwogCi0vKiogQGFkZHRvZ3JvdXAgSTJDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBFeHRlbmRlZCBmZWF0dXJlcyBmdW5jdGlvbnMKLSAgKiBAYnJpZWYgICAgRXh0ZW5kZWQgZmVhdHVyZXMgZnVuY3Rpb25zCisvKiogQGFkZHRvZ3JvdXAgSTJDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBJMkMgRXh0ZW5kZWQgRmlsdGVyIE1vZGUgRnVuY3Rpb25zCiAgICogQHsKICAgKi8KLQogLyogUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ0V4X0NvbmZpZ0FuYWxvZ0ZpbHRlcihJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDMyX3QgQW5hbG9nRmlsdGVyKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNFeF9Db25maWdEaWdpdGFsRmlsdGVyKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MzJfdCBEaWdpdGFsRmlsdGVyKTsKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAYWRkdG9ncm91cCBJMkNFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIEkyQyBFeHRlbmRlZCBXYWtlVXAgTW9kZSBGdW5jdGlvbnMKKyAgKiBAeworICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ0V4X0VuYWJsZVdha2VVcChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDRXhfRGlzYWJsZVdha2VVcChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYyk7CisvKioKKyAgKiBAfQorICAqLworCisvKiogQGFkZHRvZ3JvdXAgSTJDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBJMkMgRXh0ZW5kZWQgRmFzdE1vZGVQbHVzIEZ1bmN0aW9ucworICAqIEB7CisgICovCiB2b2lkIEhBTF9JMkNFeF9FbmFibGVGYXN0TW9kZVBsdXModWludDMyX3QgQ29uZmlnRmFzdE1vZGVQbHVzKTsKIHZvaWQgSEFMX0kyQ0V4X0Rpc2FibGVGYXN0TW9kZVBsdXModWludDMyX3QgQ29uZmlnRmFzdE1vZGVQbHVzKTsKKy8qKgorICAqIEB9CisgICovCisKKworLyoqCisgICogQH0KKyAgKi8KIAogLyogUHJpdmF0ZSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAZGVmZ3JvdXAgSTJDRXhfUHJpdmF0ZV9Db25zdGFudHMgSTJDIEV4dGVuZGVkIFByaXZhdGUgQ29uc3RhbnRzCkBAIC0xMTksNyArMTQ1LDcgQEAKICAgKiBAewogICAqLwogI2RlZmluZSBJU19JMkNfQU5BTE9HX0ZJTFRFUihGSUxURVIpICAgICgoKEZJTFRFUikgPT0gSTJDX0FOQUxPR0ZJTFRFUl9FTkFCTEUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRklMVEVSKSA9PSBJMkNfQU5BTE9HRklMVEVSX0RJU0FCTEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZJTFRFUikgPT0gSTJDX0FOQUxPR0ZJTFRFUl9ESVNBQkxFKSkKIAogI2RlZmluZSBJU19JMkNfRElHSVRBTF9GSUxURVIoRklMVEVSKSAgICgoRklMVEVSKSA8PSAweDAwMDAwMDBGVSkKIApAQCAtMTMyLDkgKzE1OCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0NPTkZJR19fKSAmIChJMkNfRkFTVE1PREVQTFVTX0kyQzIpKSA9PSBJMkNfRkFTVE1PREVQTFVTX0kyQzIpICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fQ09ORklHX18pICYgKEkyQ19GQVNUTU9ERVBMVVNfSTJDMykpID09IEkyQ19GQVNUTU9ERVBMVVNfSTJDMykgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19DT05GSUdfXykgJiAoSTJDX0ZBU1RNT0RFUExVU19JMkM0KSkgPT0gSTJDX0ZBU1RNT0RFUExVU19JMkM0KSkpCi0KLQotCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTU2LDE0ICsxNzksNiBAQAogICAqIEB9CiAgICovCiAKLS8qKgotICAqIEB9Ci0gICovCi0KLS8qKgotICAqIEB9Ci0gICovCi0KICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2hhbF9scHRpbS5oIGIvSW5jL3N0bTMybDR4eF9oYWxfbHB0aW0uaAppbmRleCAzZTdmMWUwLi4zNzFjY2E2IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2hhbF9scHRpbS5oCisrKyBiL0luYy9zdG0zMmw0eHhfaGFsX2xwdGltLmgKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWNoZXMgemVybywgYW4gdXBkYXRlIGV2ZW50IGlzIGdlbmVyYXRlZCBhbmQgY291bnRpbmcgcmVzdGFydHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBSQ1IgdmFsdWUgKE4pLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGU6IFdoZW4gdXNpbmcgcmVwZXRpdGlvbiBjb3VudGVyIHRoZSBVcGRhdGVNb2RlIGZpZWxkIG11c3QgYmUgc2V0IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBUSU1fVVBEQVRFX0VORE9GUEVSSU9EIG90aGVyd2lzZSB1bnByZWRpY3RhYmxlIGJhaGF2aW9yIG1heSBvY2N1ci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFRJTV9VUERBVEVfRU5ET0ZQRVJJT0Qgb3RoZXJ3aXNlIHVucHJlZGljdGFibGUgYmVoYXZpb3IgbWF5IG9jY3VyLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHhGRi4gKi8KICNlbmRpZgogfSBMUFRJTV9Jbml0VHlwZURlZjsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfaGFsX21tYy5oIGIvSW5jL3N0bTMybDR4eF9oYWxfbW1jLmgKaW5kZXggYzJiMzFlMy4uNGM1YWZlMSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfbW1jLmgKKysrIGIvSW5jL3N0bTMybDR4eF9oYWxfbW1jLmgKQEAgLTI3Myw2ICsyNzMsNyBAQAogICAqIEB9CiAgICovCiAjZW5kaWYKKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTM1MiwxMCArMzUzLDEyIEBACiAvKioKICAgKiBAYnJpZWYKICAgKi8KLSNkZWZpbmUgTU1DX0hJR0hfVk9MVEFHRV9SQU5HRSAgICAgICAgIDB4ODBGRjgwMDBVICAvKiE8IFZBTFVFIE9GIEFSR1VNRU5UICAgICAgICAgICAgKi8KLSNkZWZpbmUgTU1DX0RVQUxfVk9MVEFHRV9SQU5HRSAgICAgICAgIDB4ODBGRjgwODBVICAvKiE8IFZBTFVFIE9GIEFSR1VNRU5UICAgICAgICAgICAgKi8KLSNkZWZpbmUgZU1NQ19ISUdIX1ZPTFRBR0VfUkFOR0UgICAgICAgIDB4QzBGRjgwMDBVICAvKiE8IGZvciBlTU1DID4gMkdiIHNlY3RvciBtb2RlICAgKi8KLSNkZWZpbmUgZU1NQ19EVUFMX1ZPTFRBR0VfUkFOR0UgICAgICAgIDB4QzBGRjgwODBVICAvKiE8IGZvciBlTU1DID4gMkdiIHNlY3RvciBtb2RlICAgKi8KKyNkZWZpbmUgTU1DX0hJR0hfVk9MVEFHRV9SQU5HRSAgICAgICAgIDB4ODBGRjgwMDBVICAvKiE8IEhpZ2ggdm9sdGFnZSBpbiBieXRlIG1vZGUgICAgKi8KKyNkZWZpbmUgTU1DX0RVQUxfVk9MVEFHRV9SQU5HRSAgICAgICAgIDB4ODBGRjgwODBVICAvKiE8IER1YWwgdm9sdGFnZSBpbiBieXRlIG1vZGUgICAgKi8KKyNkZWZpbmUgTU1DX0xPV19WT0xUQUdFX1JBTkdFICAgICAgICAgIDB4ODAwMDAwODBVICAvKiE8IExvdyB2b2x0YWdlIGluIGJ5dGUgbW9kZSAgICAgKi8KKyNkZWZpbmUgZU1NQ19ISUdIX1ZPTFRBR0VfUkFOR0UgICAgICAgIDB4QzBGRjgwMDBVICAvKiE8IEhpZ2ggdm9sdGFnZSBpbiBzZWN0b3IgbW9kZSAgKi8KKyNkZWZpbmUgZU1NQ19EVUFMX1ZPTFRBR0VfUkFOR0UgICAgICAgIDB4QzBGRjgwODBVICAvKiE8IER1YWwgdm9sdGFnZSBpbiBzZWN0b3IgbW9kZSAgKi8KKyNkZWZpbmUgZU1NQ19MT1dfVk9MVEFHRV9SQU5HRSAgICAgICAgIDB4QzAwMDAwODBVICAvKiE8IExvdyB2b2x0YWdlIGluIHNlY3RvciBtb2RlICAgKi8KICNkZWZpbmUgTU1DX0lOVkFMSURfVk9MVEFHRV9SQU5HRSAgICAgIDB4MDAwMUZGMDFVCiAvKioKICAgKiBAfQpAQCAtMzcxLDYgKzM3NCw0NSBAQAogICAqIEB9CiAgICovCiAKKyNpZiBkZWZpbmVkKFNUTTMyTDRQNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRRNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRSNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRSN3h4KSB8fCBkZWZpbmVkKFNUTTMyTDRSOXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRTNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRTN3h4KSB8fCBkZWZpbmVkKFNUTTMyTDRTOXh4KQorLyoqIEBkZWZncm91cCBNTUNfRXhwb3J0ZWRfQ29uc3RhbnN0c19Hcm91cDUgTU1DIEVyYXNlIFR5cGUKKyAgKiBAeworICAqLworI2RlZmluZSBIQUxfTU1DX0VSQVNFICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAvKiE8IEVyYXNlIHRoZSBlcmFzZSBncm91cHMgaWRlbnRpZmllZCBieSBDTUQzNSAmIDM2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfTU1DX1RSSU0gICAgICAgICAgICAgIDB4MDAwMDAwMDFVICAvKiE8IEVyYXNlIHRoZSB3cml0ZSBibG9ja3MgaWRlbnRpZmllZCBieSBDTUQzNSAmIDM2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfTU1DX0RJU0NBUkQgICAgICAgICAgIDB4MDAwMDAwMDNVICAvKiE8IERpc2NhcmQgdGhlIHdyaXRlIGJsb2NrcyBpZGVudGlmaWVkIGJ5IENNRDM1ICYgMzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfTU1DX1NFQ1VSRV9FUkFTRSAgICAgIDB4ODAwMDAwMDBVICAvKiE8IFBlcmZvcm0gYSBzZWN1cmUgcHVyZ2UgYWNjb3JkaW5nIFNSVCBvbiB0aGUgZXJhc2UgZ3JvdXBzIGlkZW50aWZpZWQgYnkgQ01EMzUgJiAzNiAqLworI2RlZmluZSBIQUxfTU1DX1NFQ1VSRV9UUklNX1NURVAxIDB4ODAwMDAwMDFVICAvKiE8IE1hcmsgdGhlIHdyaXRlIGJsb2NrcyBpZGVudGlmaWVkIGJ5IENNRDM1ICYgMzYgZm9yIHNlY3VyZSBlcmFzZSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfTU1DX1NFQ1VSRV9UUklNX1NURVAyIDB4ODAwMDgwMDBVICAvKiE8IFBlcmZvcm0gYSBzZWN1cmUgcHVyZ2UgYWNjb3JkaW5nIFNSVCBvbiB0aGUgd3JpdGUgYmxvY2tzIHByZXZpb3VzbHkgaWRlbnRpZmllZCAgICAqLworCisjZGVmaW5lIElTX01NQ19FUkFTRV9UWVBFKFRZUEUpICgoKFRZUEUpID09IEhBTF9NTUNfRVJBU0UpICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFlQRSkgPT0gSEFMX01NQ19UUklNKSAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUWVBFKSA9PSBIQUxfTU1DX0RJU0NBUkQpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRZUEUpID09IEhBTF9NTUNfU0VDVVJFX0VSQVNFKSAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFlQRSkgPT0gSEFMX01NQ19TRUNVUkVfVFJJTV9TVEVQMSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUWVBFKSA9PSBIQUxfTU1DX1NFQ1VSRV9UUklNX1NURVAyKSkKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgTU1DX0V4cG9ydGVkX0NvbnN0YW5zdHNfR3JvdXA2IE1NQyBTZWN1cmUgUmVtb3ZhbCBUeXBlCisgICogQHsKKyAgKi8KKyNkZWZpbmUgSEFMX01NQ19TUlRfRVJBU0UgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVUgIC8qITwgSW5mb3JtYXRpb24gcmVtb3ZlZCBieSBhbiBlcmFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfTU1DX1NSVF9XUklURV9DSEFSX0VSQVNFICAgICAgICAweDAwMDAwMDAyVSAgLyohPCBJbmZvcm1hdGlvbiByZW1vdmVkIGJ5IGFuIG92ZXJ3cml0aW5nIHdpdGggYSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgYW4gZXJhc2UgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEhBTF9NTUNfU1JUX1dSSVRFX0NIQVJfQ09NUExfUkFORE9NIDB4MDAwMDAwMDRVICAvKiE8IEluZm9ybWF0aW9uIHJlbW92ZWQgYnkgYW4gb3ZlcndyaXRpbmcgd2l0aCBhIGNoYXJhY3RlciwgaXRzIGNvbXBsZW1lbnQgdGhlbiBhIHJhbmRvbSBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgSEFMX01NQ19TUlRfVkVORE9SX0RFRklORUQgICAgICAgICAgMHgwMDAwMDAwOFUgIC8qITwgSW5mb3JtYXRpb24gcmVtb3ZlZCB1c2luZyBhIHZlbmRvciBkZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisKKyNkZWZpbmUgSVNfTU1DX1NSVF9UWVBFKFRZUEUpICgoKFRZUEUpID09IEhBTF9NTUNfU1JUX0VSQVNFKSAgICAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUWVBFKSA9PSBIQUxfTU1DX1NSVF9XUklURV9DSEFSX0VSQVNFKSAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFlQRSkgPT0gSEFMX01NQ19TUlRfV1JJVEVfQ0hBUl9DT01QTF9SQU5ET00pIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRZUEUpID09IEhBTF9NTUNfU1JUX1ZFTkRPUl9ERUZJTkVEKSkKKy8qKgorICAqIEB9CisgICovCisjZW5kaWYgLyogZGVmaW5lZChTVE0zMkw0UDV4eCkgfHwgZGVmaW5lZChTVE0zMkw0UTV4eCkgfHwgZGVmaW5lZChTVE0zMkw0UjV4eCkgfHwgZGVmaW5lZChTVE0zMkw0Ujd4eCkgfHwgZGVmaW5lZChTVE0zMkw0Ujl4eCkgfHwgZGVmaW5lZChTVE0zMkw0UzV4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzd4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzl4eCkgKi8KKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTcxNyw2ICs3NTksNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19HZXRDYXJkQ0lEKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCBIQUxfTU1DX0NhcmRDSURUeXBlRGVmICpwQ0lEKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfR2V0Q2FyZENTRChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgSEFMX01NQ19DYXJkQ1NEVHlwZURlZiAqcENTRCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX0dldENhcmRJbmZvKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCBIQUxfTU1DX0NhcmRJbmZvVHlwZURlZiAqcENhcmRJbmZvKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfR2V0Q2FyZEV4dENTRChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgKnBFeHRDU0QsIHVpbnQzMl90IFRpbWVvdXQpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTczMCw3ICs3NzMsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgTU1DX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDYgUGVyaW9oZXJhbCBBYm9ydCBtYW5hZ2VtZW50CisvKiogQGRlZmdyb3VwIE1NQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA2IFBlcmlwaGVyYWwgQWJvcnQgbWFuYWdlbWVudAogICAqIEB7CiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX0Fib3J0KE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKQEAgLTczOCw2ICs3ODEsMTggQEAKIC8qKgogICAqIEB9CiAgICovCisjaWYgZGVmaW5lZChTVE0zMkw0UDV4eCkgfHwgZGVmaW5lZChTVE0zMkw0UTV4eCkgfHwgZGVmaW5lZChTVE0zMkw0UjV4eCkgfHwgZGVmaW5lZChTVE0zMkw0Ujd4eCkgfHwgZGVmaW5lZChTVE0zMkw0Ujl4eCkgfHwgZGVmaW5lZChTVE0zMkw0UzV4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzd4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzl4eCkKKy8qKiBAZGVmZ3JvdXAgTU1DX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDcgUGVyaXBoZXJhbCBFcmFzZSBtYW5hZ2VtZW50CisgICogQHsKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfRXJhc2VTZXF1ZW5jZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgRXJhc2VUeXBlLCB1aW50MzJfdCBCbG9ja1N0YXJ0QWRkLCB1aW50MzJfdCBCbG9ja0VuZEFkZCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX1Nhbml0aXplKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfQ29uZmlnU2VjUmVtb3ZhbFR5cGUoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQzMl90IFNSVE1vZGUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19HZXRTdXBwb3J0ZWRTZWNSZW1vdmFsVHlwZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgKlN1cHBvcnRlZFNSVCk7CisvKioKKyAgKiBAfQorICAqLworI2VuZGlmIC8qIGRlZmluZWQoU1RNMzJMNFA1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFE1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFI1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFI3eHgpIHx8IGRlZmluZWQoU1RNMzJMNFI5eHgpIHx8IGRlZmluZWQoU1RNMzJMNFM1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFM3eHgpIHx8IGRlZmluZWQoU1RNMzJMNFM5eHgpICovCiAKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2hhbF9uYW5kLmggYi9JbmMvc3RtMzJsNHh4X2hhbF9uYW5kLmgKaW5kZXggNTQxYzliZi4uNjM0OGE0YyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfbmFuZC5oCisrKyBiL0luYy9zdG0zMmw0eHhfaGFsX25hbmQuaApAQCAtOTAsMTAgKzkwLDEwIEBACiB0eXBlZGVmIHN0cnVjdAogewogICB1aW50MzJfdCAgICAgICAgUGFnZVNpemU7ICAgICAgICAgICAgICAvKiE8IE5BTkQgbWVtb3J5IHBhZ2UgKHdpdGhvdXQgc3BhcmUgYXJlYSkgc2l6ZSBtZWFzdXJlZCBpbiBieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciA4IGJpdHMgYWRyZXNzaW5nIG9yIHdvcmRzIGZvciAxNiBiaXRzIGFkZHJlc3NpbmcgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgOCBiaXRzIGFkZHJlc3Npbmcgb3Igd29yZHMgZm9yIDE2IGJpdHMgYWRkcmVzc2luZyAgICAgICAgICAgICAqLwogCiAgIHVpbnQzMl90ICAgICAgICBTcGFyZUFyZWFTaXplOyAgICAgICAgIC8qITwgTkFORCBtZW1vcnkgc3BhcmUgYXJlYSBzaXplIG1lYXN1cmVkIGluIGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIDggYml0cyBhZHJlc3Npbmcgb3Igd29yZHMgZm9yIDE2IGJpdHMgYWRkcmVzc2luZyAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciA4IGJpdHMgYWRkcmVzc2luZyBvciB3b3JkcyBmb3IgMTYgYml0cyBhZGRyZXNzaW5nICAgICAgICAgICAgICovCiAKICAgdWludDMyX3QgICAgICAgIEJsb2NrU2l6ZTsgICAgICAgICAgICAgLyohPCBOQU5EIG1lbW9yeSBibG9jayBzaXplIG1lYXN1cmVkIGluIG51bWJlciBvZiBwYWdlcyAgICAgICAgICAgICAgICovCiAKQEAgLTEzMSw5ICsxMzEsOSBAQAogICBOQU5EX0RldmljZUNvbmZpZ1R5cGVEZWYgICAgICAgQ29uZmlnOyAgICAgLyohPCBOQU5EIHBodXNpY2FsIGNoYXJhY3RlcmlzdGljIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAgICAqLwogCiAjaWYgKFVTRV9IQUxfTkFORF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgdm9pZCAgKCogTXNwSW5pdENhbGxiYWNrKSAgICAgICAgKCBzdHJ1Y3QgX19OQU5EX0hhbmRsZVR5cGVEZWYgKiBobmFuZCk7ICAgIC8qITwgTkFORCBNc3AgSW5pdCBjYWxsYmFjayAgICAgICAgICAgICAgKi8KLSAgdm9pZCAgKCogTXNwRGVJbml0Q2FsbGJhY2spICAgICAgKCBzdHJ1Y3QgX19OQU5EX0hhbmRsZVR5cGVEZWYgKiBobmFuZCk7ICAgIC8qITwgTkFORCBNc3AgRGVJbml0IGNhbGxiYWNrICAgICAgICAgICAgKi8KLSAgdm9pZCAgKCogSXRDYWxsYmFjaykgICAgICAgICAgICAgKCBzdHJ1Y3QgX19OQU5EX0hhbmRsZVR5cGVEZWYgKiBobmFuZCk7ICAgIC8qITwgTkFORCBJVCBjYWxsYmFjayAgICAgICAgICAgICAgICAgICAgKi8KKyAgdm9pZCAoKiBNc3BJbml0Q2FsbGJhY2spKHN0cnVjdCBfX05BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQpOyAgICAgICAgICAgICAgIC8qITwgTkFORCBNc3AgSW5pdCBjYWxsYmFjayAgICAgICAgICAgICAgKi8KKyAgdm9pZCAoKiBNc3BEZUluaXRDYWxsYmFjaykoc3RydWN0IF9fTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCk7ICAgICAgICAgICAgIC8qITwgTkFORCBNc3AgRGVJbml0IGNhbGxiYWNrICAgICAgICAgICAgKi8KKyAgdm9pZCAoKiBJdENhbGxiYWNrKShzdHJ1Y3QgX19OQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kKTsgICAgICAgICAgICAgICAgICAgIC8qITwgTkFORCBJVCBjYWxsYmFjayAgICAgICAgICAgICAgICAgICAgKi8KICNlbmRpZgogfSBOQU5EX0hhbmRsZVR5cGVEZWY7CiAKQEAgLTE0Niw3ICsxNDYsNyBAQAogICBIQUxfTkFORF9NU1BfSU5JVF9DQl9JRCAgICAgICA9IDB4MDBVLCAgLyohPCBOQU5EIE1zcEluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgKi8KICAgSEFMX05BTkRfTVNQX0RFSU5JVF9DQl9JRCAgICAgPSAweDAxVSwgIC8qITwgTkFORCBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICovCiAgIEhBTF9OQU5EX0lUX0NCX0lEICAgICAgICAgICAgID0gMHgwMlUgICAvKiE8IE5BTkQgSVQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAqLwotfUhBTF9OQU5EX0NhbGxiYWNrSURUeXBlRGVmOworfSBIQUxfTkFORF9DYWxsYmFja0lEVHlwZURlZjsKIAogLyoqCiAgICogQGJyaWVmICBIQUwgTkFORCBDYWxsYmFjayBwb2ludGVyIGRlZmluaXRpb24KQEAgLTE2MSw4ICsxNjEsOCBAQAogLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGRlZmdyb3VwIE5BTkRfRXhwb3J0ZWRfTWFjcm9zIE5BTkQgRXhwb3J0ZWQgTWFjcm9zCi0gKiBAewotICovCisgICogQHsKKyAgKi8KIAogLyoqIEBicmllZiBSZXNldCBOQU5EIGhhbmRsZSBzdGF0ZQogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIE5BTkQgaGFuZGxlLgpAQCAtMTkyLDcgKzE5Miw4IEBACiAgICovCiAKIC8qIEluaXRpYWxpemF0aW9uL2RlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfSW5pdChOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBGTUNfTkFORF9QQ0NfVGltaW5nVHlwZURlZiAqQ29tU3BhY2VfVGltaW5nLCBGTUNfTkFORF9QQ0NfVGltaW5nVHlwZURlZiAqQXR0U3BhY2VfVGltaW5nKTsKK0hBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9Jbml0KE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIEZNQ19OQU5EX1BDQ19UaW1pbmdUeXBlRGVmICpDb21TcGFjZV9UaW1pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTUNfTkFORF9QQ0NfVGltaW5nVHlwZURlZiAqQXR0U3BhY2VfVGltaW5nKTsKIEhBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9EZUluaXQoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCk7CiAKIEhBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9Db25maWdEZXZpY2UoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9EZXZpY2VDb25maWdUeXBlRGVmICpwRGV2aWNlQ29uZmlnKTsKQEAgLTIxNSwxNSArMjE2LDIzIEBACiAvKiBJTyBvcGVyYXRpb24gZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1Jlc2V0KE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQpOwogCi1IQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfUmVhZF9QYWdlXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50OF90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1QYWdlVG9SZWFkKTsKLUhBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9Xcml0ZV9QYWdlXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50OF90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1QYWdlVG9Xcml0ZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfUmVhZF9TcGFyZUFyZWFfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsIHVpbnQ4X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvUmVhZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfV3JpdGVfU3BhcmVBcmVhXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50OF90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1TcGFyZUFyZWFUb3dyaXRlKTsKK0hBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9SZWFkX1BhZ2VfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsIHVpbnQ4X3QgKnBCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bVBhZ2VUb1JlYWQpOworSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1dyaXRlX1BhZ2VfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsIHVpbnQ4X3QgKnBCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBOdW1QYWdlVG9Xcml0ZSk7CitIQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfUmVhZF9TcGFyZUFyZWFfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG9SZWFkKTsKK0hBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9Xcml0ZV9TcGFyZUFyZWFfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvd3JpdGUpOwogCi1IQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfUmVhZF9QYWdlXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVBhZ2VUb1JlYWQpOwotSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1dyaXRlX1BhZ2VfMTZiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50MTZfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtUGFnZVRvV3JpdGUpOwotSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1JlYWRfU3BhcmVBcmVhXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvUmVhZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfV3JpdGVfU3BhcmVBcmVhXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvd3JpdGUpOworSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1JlYWRfUGFnZV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsIHVpbnQxNl90ICpwQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtUGFnZVRvUmVhZCk7CitIQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfV3JpdGVfUGFnZV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsIHVpbnQxNl90ICpwQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bVBhZ2VUb1dyaXRlKTsKK0hBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9SZWFkX1NwYXJlQXJlYV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1TcGFyZUFyZWFUb1JlYWQpOworSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1dyaXRlX1NwYXJlQXJlYV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG93cml0ZSk7CiAKIEhBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9FcmFzZV9CbG9jayhOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcyk7CiAKQEAgLTIzMSw3ICsyNDAsOCBAQAogCiAjaWYgKFVTRV9IQUxfTkFORF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKIC8qIE5BTkQgY2FsbGJhY2sgcmVnaXN0ZXJpbmcvdW5yZWdpc3RlcmluZyAqLwotSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1JlZ2lzdGVyQ2FsbGJhY2soTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgSEFMX05BTkRfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJZCwgcE5BTkRfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CitIQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfUmVnaXN0ZXJDYWxsYmFjayhOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBIQUxfTkFORF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5BTkRfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CiBIQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfVW5SZWdpc3RlckNhbGxiYWNrKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIEhBTF9OQU5EX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSWQpOwogI2VuZGlmCiAKQEAgLTI3MiwzMyArMjgyLDMzIEBACiAvKiogQGRlZmdyb3VwIE5BTkRfUHJpdmF0ZV9Db25zdGFudHMgTkFORCBQcml2YXRlIENvbnN0YW50cwogICAqIEB7CiAgICovCi0jZGVmaW5lIE5BTkRfREVWSUNFICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMFUpCi0jZGVmaW5lIE5BTkRfV1JJVEVfVElNRU9VVCAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMFUpCisjZGVmaW5lIE5BTkRfREVWSUNFICAgICAgICAgICAgICAgIDB4ODAwMDAwMDBVTAorI2RlZmluZSBOQU5EX1dSSVRFX1RJTUVPVVQgICAgICAgICAweDAxMDAwMDAwVUwKIAotI2RlZmluZSBDTURfQVJFQSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KSgxVUw8PDE2VSkpICAvKiBBMTYgPSBDTEUgaGlnaCAqLwotI2RlZmluZSBBRERSX0FSRUEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KSgxVUw8PDE3VSkpICAvKiBBMTcgPSBBTEUgaGlnaCAqLworI2RlZmluZSBDTURfQVJFQSAgICAgICAgICAgICAgICAgICAoMVVMPDwxNlUpICAvKiBBMTYgPSBDTEUgaGlnaCAqLworI2RlZmluZSBBRERSX0FSRUEgICAgICAgICAgICAgICAgICAoMVVMPDwxN1UpICAvKiBBMTcgPSBBTEUgaGlnaCAqLwogCi0jZGVmaW5lIE5BTkRfQ01EX0FSRUFfQSAgICAgICAgICAgICgodWludDhfdCkweDAwVSkKLSNkZWZpbmUgTkFORF9DTURfQVJFQV9CICAgICAgICAgICAgKCh1aW50OF90KTB4MDFVKQotI2RlZmluZSBOQU5EX0NNRF9BUkVBX0MgICAgICAgICAgICAoKHVpbnQ4X3QpMHg1MFUpCi0jZGVmaW5lIE5BTkRfQ01EX0FSRUFfVFJVRTEgICAgICAgICgodWludDhfdCkweDMwVSkKKyNkZWZpbmUgTkFORF9DTURfQVJFQV9BICAgICAgICAgICAgMHgwMFUKKyNkZWZpbmUgTkFORF9DTURfQVJFQV9CICAgICAgICAgICAgMHgwMVUKKyNkZWZpbmUgTkFORF9DTURfQVJFQV9DICAgICAgICAgICAgMHg1MFUKKyNkZWZpbmUgTkFORF9DTURfQVJFQV9UUlVFMSAgICAgICAgMHgzMFUKIAotI2RlZmluZSBOQU5EX0NNRF9XUklURTAgICAgICAgICAgICAoKHVpbnQ4X3QpMHg4MFUpCi0jZGVmaW5lIE5BTkRfQ01EX1dSSVRFX1RSVUUxICAgICAgICgodWludDhfdCkweDEwVSkKLSNkZWZpbmUgTkFORF9DTURfRVJBU0UwICAgICAgICAgICAgKCh1aW50OF90KTB4NjBVKQotI2RlZmluZSBOQU5EX0NNRF9FUkFTRTEgICAgICAgICAgICAoKHVpbnQ4X3QpMHhEMFUpCi0jZGVmaW5lIE5BTkRfQ01EX1JFQURJRCAgICAgICAgICAgICgodWludDhfdCkweDkwVSkKLSNkZWZpbmUgTkFORF9DTURfU1RBVFVTICAgICAgICAgICAgKCh1aW50OF90KTB4NzBVKQotI2RlZmluZSBOQU5EX0NNRF9MT0NLX1NUQVRVUyAgICAgICAoKHVpbnQ4X3QpMHg3QVUpCi0jZGVmaW5lIE5BTkRfQ01EX1JFU0VUICAgICAgICAgICAgICgodWludDhfdCkweEZGVSkKKyNkZWZpbmUgTkFORF9DTURfV1JJVEUwICAgICAgICAgICAgMHg4MFUKKyNkZWZpbmUgTkFORF9DTURfV1JJVEVfVFJVRTEgICAgICAgMHgxMFUKKyNkZWZpbmUgTkFORF9DTURfRVJBU0UwICAgICAgICAgICAgMHg2MFUKKyNkZWZpbmUgTkFORF9DTURfRVJBU0UxICAgICAgICAgICAgMHhEMFUKKyNkZWZpbmUgTkFORF9DTURfUkVBRElEICAgICAgICAgICAgMHg5MFUKKyNkZWZpbmUgTkFORF9DTURfU1RBVFVTICAgICAgICAgICAgMHg3MFUKKyNkZWZpbmUgTkFORF9DTURfTE9DS19TVEFUVVMgICAgICAgMHg3QVUKKyNkZWZpbmUgTkFORF9DTURfUkVTRVQgICAgICAgICAgICAgMHhGRlUKIAogLyogTkFORCBtZW1vcnkgc3RhdHVzICovCi0jZGVmaW5lIE5BTkRfVkFMSURfQUREUkVTUyAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMFUpCi0jZGVmaW5lIE5BTkRfSU5WQUxJRF9BRERSRVNTICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMFUpCi0jZGVmaW5lIE5BTkRfVElNRU9VVF9FUlJPUiAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMFUpCi0jZGVmaW5lIE5BTkRfQlVTWSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpCi0jZGVmaW5lIE5BTkRfRVJST1IgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMVUpCi0jZGVmaW5lIE5BTkRfUkVBRFkgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MFUpCisjZGVmaW5lIE5BTkRfVkFMSURfQUREUkVTUyAgICAgICAgIDB4MDAwMDAxMDBVTAorI2RlZmluZSBOQU5EX0lOVkFMSURfQUREUkVTUyAgICAgICAweDAwMDAwMjAwVUwKKyNkZWZpbmUgTkFORF9USU1FT1VUX0VSUk9SICAgICAgICAgMHgwMDAwMDQwMFVMCisjZGVmaW5lIE5BTkRfQlVTWSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVTAorI2RlZmluZSBOQU5EX0VSUk9SICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKKyNkZWZpbmUgTkFORF9SRUFEWSAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzE1LDcgKzMyNSw3IEBACiAgICogQHJldHZhbCBOQU5EIFJhdyBhZGRyZXNzIHZhbHVlCiAgICovCiAjZGVmaW5lIEFSUkFZX0FERFJFU1MoX19BRERSRVNTX18gLCBfX0hBTkRMRV9fKSAoKF9fQUREUkVTU19fKS0+UGFnZSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0FERFJFU1NfXyktPkJsb2NrICsgKCgoX19BRERSRVNTX18pLT5QbGFuZSkgKiAoKF9fSEFORExFX18pLT5Db25maWcuUGxhbmVTaXplKSkpKiAoKF9fSEFORExFX18pLT5Db25maWcuQmxvY2tTaXplKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19BRERSRVNTX18pLT5CbG9jayArICgoKF9fQUREUkVTU19fKS0+UGxhbmUpICogKChfX0hBTkRMRV9fKS0+Q29uZmlnLlBsYW5lU2l6ZSkpKSogKChfX0hBTkRMRV9fKS0+Q29uZmlnLkJsb2NrU2l6ZSkpKQogCiAvKioKICAgKiBAYnJpZWYgIE5BTkQgbWVtb3J5IENvbHVtbiBhZGRyZXNzIGNvbXB1dGF0aW9uLgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9oYWxfbm9yLmggYi9JbmMvc3RtMzJsNHh4X2hhbF9ub3IuaAppbmRleCBiYTZkZmI1Li4xMzg5MTJmIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2hhbF9ub3IuaAorKysgYi9JbmMvc3RtMzJsNHh4X2hhbF9ub3IuaApAQCAtMTIxLDkgKzEyMSwxMSBAQAogCiAgIF9fSU8gSEFMX05PUl9TdGF0ZVR5cGVEZWYgICAgIFN0YXRlOyAgICAgICAgLyohPCBOT1IgZGV2aWNlIGFjY2VzcyBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAqLwogCisgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRTZXQ7ICAgLyohPCBOT1IgYWxnb3JpdGhtIGNvbW1hbmQgc2V0IGFuZCBjb250cm9sICAgICAgICAqLworCiAjaWYgKFVTRV9IQUxfTk9SX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotICB2b2lkICAoKiBNc3BJbml0Q2FsbGJhY2spICAgICAgICAoIHN0cnVjdCBfX05PUl9IYW5kbGVUeXBlRGVmICogaG5vcik7ICAgIC8qITwgTk9SIE1zcCBJbml0IGNhbGxiYWNrICAgICAgICAgICAgICAqLwotICB2b2lkICAoKiBNc3BEZUluaXRDYWxsYmFjaykgICAgICAoIHN0cnVjdCBfX05PUl9IYW5kbGVUeXBlRGVmICogaG5vcik7ICAgIC8qITwgTk9SIE1zcCBEZUluaXQgY2FsbGJhY2sgICAgICAgICAgICAqLworICB2b2lkICgqIE1zcEluaXRDYWxsYmFjaykoc3RydWN0IF9fTk9SX0hhbmRsZVR5cGVEZWYgKmhub3IpOyAgICAgICAgICAgICAgIC8qITwgTk9SIE1zcCBJbml0IGNhbGxiYWNrICAgICAgICAgICAgICAqLworICB2b2lkICgqIE1zcERlSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19OT1JfSGFuZGxlVHlwZURlZiAqaG5vcik7ICAgICAgICAgICAgIC8qITwgTk9SIE1zcCBEZUluaXQgY2FsbGJhY2sgICAgICAgICAgICAqLwogI2VuZGlmCiB9IE5PUl9IYW5kbGVUeXBlRGVmOwogCkBAIC0xMzUsNyArMTM3LDcgQEAKIHsKICAgSEFMX05PUl9NU1BfSU5JVF9DQl9JRCAgICAgICA9IDB4MDBVLCAgLyohPCBOT1IgTXNwSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAqLwogICBIQUxfTk9SX01TUF9ERUlOSVRfQ0JfSUQgICAgID0gMHgwMVUgICAvKiE8IE5PUiBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICovCi19SEFMX05PUl9DYWxsYmFja0lEVHlwZURlZjsKK30gSEFMX05PUl9DYWxsYmFja0lEVHlwZURlZjsKIAogLyoqCiAgICogQGJyaWVmICBIQUwgTk9SIENhbGxiYWNrIHBvaW50ZXIgZGVmaW5pdGlvbgpAQCAtMTc4LDcgKzE4MCw4IEBACiAgICovCiAKIC8qIEluaXRpYWxpemF0aW9uL2RlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTk9SX0luaXQoTk9SX0hhbmRsZVR5cGVEZWYgKmhub3IsIEZNQ19OT1JTUkFNX1RpbWluZ1R5cGVEZWYgKlRpbWluZywgRk1DX05PUlNSQU1fVGltaW5nVHlwZURlZiAqRXh0VGltaW5nKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfSW5pdChOT1JfSGFuZGxlVHlwZURlZiAqaG5vciwgRk1DX05PUlNSQU1fVGltaW5nVHlwZURlZiAqVGltaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OT1JTUkFNX1RpbWluZ1R5cGVEZWYgKkV4dFRpbWluZyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTk9SX0RlSW5pdChOT1JfSGFuZGxlVHlwZURlZiAqaG5vcik7CiB2b2lkIEhBTF9OT1JfTXNwSW5pdChOT1JfSGFuZGxlVHlwZURlZiAqaG5vcik7CiB2b2lkIEhBTF9OT1JfTXNwRGVJbml0KE5PUl9IYW5kbGVUeXBlRGVmICpobm9yKTsKQEAgLTE5Nyw4ICsyMDAsMTAgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfUmVhZChOT1JfSGFuZGxlVHlwZURlZiAqaG5vciwgdWludDMyX3QgKnBBZGRyZXNzLCB1aW50MTZfdCAqcERhdGEpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05PUl9Qcm9ncmFtKE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCB1aW50MzJfdCAqcEFkZHJlc3MsIHVpbnQxNl90ICpwRGF0YSk7CiAKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfUmVhZEJ1ZmZlcihOT1JfSGFuZGxlVHlwZURlZiAqaG5vciwgdWludDMyX3QgdXdBZGRyZXNzLCB1aW50MTZfdCAqcERhdGEsIHVpbnQzMl90IHV3QnVmZmVyU2l6ZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTk9SX1Byb2dyYW1CdWZmZXIoTk9SX0hhbmRsZVR5cGVEZWYgKmhub3IsIHVpbnQzMl90IHV3QWRkcmVzcywgdWludDE2X3QgKnBEYXRhLCB1aW50MzJfdCB1d0J1ZmZlclNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05PUl9SZWFkQnVmZmVyKE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCB1aW50MzJfdCB1d0FkZHJlc3MsIHVpbnQxNl90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1d0J1ZmZlclNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05PUl9Qcm9ncmFtQnVmZmVyKE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCB1aW50MzJfdCB1d0FkZHJlc3MsIHVpbnQxNl90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1d0J1ZmZlclNpemUpOwogCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTk9SX0VyYXNlX0Jsb2NrKE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCB1aW50MzJfdCBCbG9ja0FkZHJlc3MsIHVpbnQzMl90IEFkZHJlc3MpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05PUl9FcmFzZV9DaGlwKE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCB1aW50MzJfdCBBZGRyZXNzKTsKQEAgLTIwNiw3ICsyMTEsOCBAQAogCiAjaWYgKFVTRV9IQUxfTk9SX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogLyogTk9SIGNhbGxiYWNrIHJlZ2lzdGVyaW5nL3VucmVnaXN0ZXJpbmcgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfUmVnaXN0ZXJDYWxsYmFjayhOT1JfSGFuZGxlVHlwZURlZiAqaG5vciwgSEFMX05PUl9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkLCBwTk9SX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05PUl9SZWdpc3RlckNhbGxiYWNrKE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCBIQUxfTk9SX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5PUl9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfVW5SZWdpc3RlckNhbGxiYWNrKE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCBIQUxfTk9SX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSWQpOwogI2VuZGlmCiAvKioKQEAgLTI0NiwyOSArMjUyLDI5IEBACiAgICogQHsKICAgKi8KIC8qIE5PUiBkZXZpY2UgSURzIGFkZHJlc3NlcyAqLwotI2RlZmluZSBNQ19BRERSRVNTICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDBVKQotI2RlZmluZSBERVZJQ0VfQ09ERTFfQUREUiAgICAgICAgKCh1aW50MTZfdCkweDAwMDFVKQotI2RlZmluZSBERVZJQ0VfQ09ERTJfQUREUiAgICAgICAgKCh1aW50MTZfdCkweDAwMEVVKQotI2RlZmluZSBERVZJQ0VfQ09ERTNfQUREUiAgICAgICAgKCh1aW50MTZfdCkweDAwMEZVKQorI2RlZmluZSBNQ19BRERSRVNTICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApCisjZGVmaW5lIERFVklDRV9DT0RFMV9BRERSICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkKKyNkZWZpbmUgREVWSUNFX0NPREUyX0FERFIgICAgICAgICgodWludDE2X3QpMHgwMDBFKQorI2RlZmluZSBERVZJQ0VfQ09ERTNfQUREUiAgICAgICAgKCh1aW50MTZfdCkweDAwMEYpCiAKIC8qIE5PUiBDRkkgSURzIGFkZHJlc3NlcyAqLwotI2RlZmluZSBDRkkxX0FERFJFU1MgICAgICAgICAgICAgKCh1aW50MTZfdCkweDYxVSkKLSNkZWZpbmUgQ0ZJMl9BRERSRVNTICAgICAgICAgICAgICgodWludDE2X3QpMHg2MlUpCi0jZGVmaW5lIENGSTNfQUREUkVTUyAgICAgICAgICAgICAoKHVpbnQxNl90KTB4NjNVKQotI2RlZmluZSBDRkk0X0FERFJFU1MgICAgICAgICAgICAgKCh1aW50MTZfdCkweDY0VSkKKyNkZWZpbmUgQ0ZJMV9BRERSRVNTICAgICAgICAgICAgICgodWludDE2X3QpMHg2MSkKKyNkZWZpbmUgQ0ZJMl9BRERSRVNTICAgICAgICAgICAgICgodWludDE2X3QpMHg2MikKKyNkZWZpbmUgQ0ZJM19BRERSRVNTICAgICAgICAgICAgICgodWludDE2X3QpMHg2MykKKyNkZWZpbmUgQ0ZJNF9BRERSRVNTICAgICAgICAgICAgICgodWludDE2X3QpMHg2NCkKIAogLyogTk9SIG9wZXJhdGlvbiB3YWl0IHRpbWVvdXQgKi8KLSNkZWZpbmUgTk9SX1RNRU9VVCAgICAgICAgICAgICAgICgodWludDE2X3QpMHhGRkZGVSkKKyNkZWZpbmUgTk9SX1RNRU9VVCAgICAgICAgICAgICAgICgodWludDE2X3QpMHhGRkZGKQogCiAvKiBOT1IgbWVtb3J5IGRhdGEgd2lkdGggKi8KLSNkZWZpbmUgTk9SX01FTU9SWV84QiAgICAgICAgICAgICgodWludDhfdCkweDBVKQotI2RlZmluZSBOT1JfTUVNT1JZXzE2QiAgICAgICAgICAgKCh1aW50OF90KTB4MVUpCisjZGVmaW5lIE5PUl9NRU1PUllfOEIgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwKQorI2RlZmluZSBOT1JfTUVNT1JZXzE2QiAgICAgICAgICAgKCh1aW50OF90KTB4MSkKIAogLyogTk9SIG1lbW9yeSBkZXZpY2UgcmVhZC93cml0ZSBzdGFydCBhZGRyZXNzICovCi0jZGVmaW5lIE5PUl9NRU1PUllfQURSRVNTMSAgICAgICAoKHVpbnQzMl90KTB4NjAwMDAwMDBVKQotI2RlZmluZSBOT1JfTUVNT1JZX0FEUkVTUzIgICAgICAgKCh1aW50MzJfdCkweDY0MDAwMDAwVSkKLSNkZWZpbmUgTk9SX01FTU9SWV9BRFJFU1MzICAgICAgICgodWludDMyX3QpMHg2ODAwMDAwMFUpCi0jZGVmaW5lIE5PUl9NRU1PUllfQURSRVNTNCAgICAgICAoKHVpbnQzMl90KTB4NkMwMDAwMDBVKQorI2RlZmluZSBOT1JfTUVNT1JZX0FEUkVTUzEgICAgICAgKCh1aW50MzJfdCkweDYwMDAwMDAwKQorI2RlZmluZSBOT1JfTUVNT1JZX0FEUkVTUzIgICAgICAgKCh1aW50MzJfdCkweDY0MDAwMDAwKQorI2RlZmluZSBOT1JfTUVNT1JZX0FEUkVTUzMgICAgICAgKCh1aW50MzJfdCkweDY4MDAwMDAwKQorI2RlZmluZSBOT1JfTUVNT1JZX0FEUkVTUzQgICAgICAgKCh1aW50MzJfdCkweDZDMDAwMDAwKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTI4NSw3ICsyOTEsNyBAQAogICAqIEByZXR2YWwgTk9SIHNoaWZ0ZWQgYWRkcmVzcyB2YWx1ZQogICAqLwogI2RlZmluZSBOT1JfQUREUl9TSElGVChfX05PUl9BRERSRVNTLCBfX05PUl9NRU1PUllfV0lEVEhfLCBfX0FERFJFU1NfXykgICAgICAgICBcCi0gICAgICAgICAgICAgICgodWludDMyX3QpKCgoX19OT1JfTUVNT1JZX1dJRFRIXykgPT0gTk9SX01FTU9SWV8xNkIpPyAgICAgICAgICAgIFwKKyAgKCh1aW50MzJfdCkoKChfX05PUl9NRU1PUllfV0lEVEhfKSA9PSBOT1JfTUVNT1JZXzE2Qik/ICAgICAgICAgICAgXAogICAgICAgICAgICAgICAoKHVpbnQzMl90KSgoX19OT1JfQUREUkVTUykgKyAoMlUgKiAoX19BRERSRVNTX18pKSkpOiAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAoKHVpbnQzMl90KSgoX19OT1JfQUREUkVTUykgKyAoX19BRERSRVNTX18pKSkpKQogCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2hhbF9vc3BpLmggYi9JbmMvc3RtMzJsNHh4X2hhbF9vc3BpLmgKaW5kZXggZjEyZDQ2MS4uMzUyMTBlZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfb3NwaS5oCisrKyBiL0luYy9zdG0zMmw0eHhfaGFsX29zcGkuaApAQCAtNDgsNDMgKzQ4LDUwIEBACiAgICovCiB0eXBlZGVmIHN0cnVjdAogewotICB1aW50MzJfdCBGaWZvVGhyZXNob2xkOyAgICAgICAgICAgICAvKiBUaGlzIGlzIHRoZSB0aHJlc2hvbGQgdXNlZCBieSB0aGUgUGVyaXBoZXJhbCB0byBnZW5lcmF0ZSB0aGUgaW50ZXJydXB0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRpbmcgdGhhdCBkYXRhIGFyZSBhdmFpbGFibGUgaW4gcmVjZXB0aW9uIG9yIGZyZWUgcGxhY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYXZhaWxhYmxlIGluIHRyYW5zbWlzc2lvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAxIGFuZCAzMiAqLwotICB1aW50MzJfdCBEdWFsUXVhZDsgICAgICAgICAgICAgICAgICAvKiBJdCBlbmFibGVzIG9yIG5vdCB0aGUgZHVhbC1xdWFkIG1vZGUgd2hpY2ggYWxsb3cgdG8gYWNjZXNzIHVwIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWQgbW9kZSBvbiB0d28gZGlmZmVyZW50IGRldmljZXMgdG8gaW5jcmVhc2UgdGhlIHRocm91Z2hwdXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9EdWFsUXVhZCAqLwotICB1aW50MzJfdCBNZW1vcnlUeXBlOyAgICAgICAgICAgICAgICAvKiBJdCBpbmRpY2F0ZXMgdGhlIGV4dGVybmFsIGRldmljZSB0eXBlIGNvbm5lY3RlZCB0byB0aGUgT1NQSS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBPU1BJX01lbW9yeVR5cGUgKi8KLSAgdWludDMyX3QgRGV2aWNlU2l6ZTsgICAgICAgICAgICAgICAgLyogSXQgZGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgZXh0ZXJuYWwgZGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgT1NQSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgY29ycmVzcG9uZHMgdG8gdGhlIG51bWJlciBvZiBhZGRyZXNzIGJpdHMgcmVxdWlyZWQgdG8gYWNjZXNzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBleHRlcm5hbCBkZXZpY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgMzIgKi8KLSAgdWludDMyX3QgQ2hpcFNlbGVjdEhpZ2hUaW1lOyAgICAgICAgLyogSXQgZGVmaW5lcyB0aGUgbWluaW11biBudW1iZXIgb2YgY2xvY2tzIHdoaWNoIHRoZSBjaGlwIHNlbGVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IHJlbWFpbiBoaWdoIGJldHdlZW4gY29tbWFuZHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgOCAqLwotICB1aW50MzJfdCBGcmVlUnVubmluZ0Nsb2NrOyAgICAgICAgICAvKiBJdCBlbmFibGVzIG9yIG5vdCB0aGUgZnJlZSBydW5uaW5nIGNsb2NrLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfRnJlZVJ1bm5pbmdDbG9jayAqLwotICB1aW50MzJfdCBDbG9ja01vZGU7ICAgICAgICAgICAgICAgICAvKiBJdCBpbmRpY2F0ZXMgdGhlIGxldmVsIG9mIGNsb2NrIHdoZW4gdGhlIGNoaXAgc2VsZWN0IGlzIHJlbGVhc2VkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfQ2xvY2tNb2RlICovCi0gIHVpbnQzMl90IFdyYXBTaXplOyAgICAgICAgICAgICAgICAgIC8qIEl0IGluZGljYXRlcyB0aGUgd3JhcC1zaXplIGNvcnJlc3BvbmRpbmcgdGhlIGV4dGVybmFsIGRldmljZSBjb25maWd1cmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfV3JhcFNpemUgKi8KLSAgdWludDMyX3QgQ2xvY2tQcmVzY2FsZXI7ICAgICAgICAgICAgLyogSXQgc3BlY2lmaWVzIHRoZSBwcmVzY2FsZXIgZmFjdG9yIHVzZWQgZm9yIGdlbmVyYXRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGV4dGVybmFsIGNsb2NrIGJhc2VkIG9uIHRoZSBBSEIgY2xvY2suCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgMjU2ICovCi0gIHVpbnQzMl90IFNhbXBsZVNoaWZ0aW5nOyAgICAgICAgICAgIC8qIEl0IGFsbG93cyB0byBkZWxheSB0byAxLzIgY3ljbGUgdGhlIGRhdGEgc2FtcGxpbmcgaW4gb3JkZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGFrZSBpbiBhY2NvdW50IGV4dGVybmFsIHNpZ25hbCBkZWxheXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9TYW1wbGVTaGlmdGluZyAqLwotICB1aW50MzJfdCBEZWxheUhvbGRRdWFydGVyQ3ljbGU7ICAgICAvKiBJdCBhbGxvd3MgdG8gaG9sZCB0byAxLzQgY3ljbGUgdGhlIGRhdGEuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9EZWxheUhvbGRRdWFydGVyQ3ljbGUgKi8KLSAgdWludDMyX3QgQ2hpcFNlbGVjdEJvdW5kYXJ5OyAgICAgICAgLyogSXQgZW5hYmxlcyB0aGUgdHJhbnNhY3Rpb24gYm91bmRhcnkgZmVhdHVyZSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcyB0aGUgYm91bmRhcnkgb2YgYnl0ZXMgdG8gcmVsZWFzZSB0aGUgY2hpcCBzZWxlY3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMzEgKi8KKyAgdWludDMyX3QgRmlmb1RocmVzaG9sZDsgICAgICAgICAgICAgLyohPCBUaGlzIGlzIHRoZSB0aHJlc2hvbGQgdXNlZCBieSB0aGUgUGVyaXBoZXJhbCB0byBnZW5lcmF0ZSB0aGUgaW50ZXJydXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGluZyB0aGF0IGRhdGEgYXJlIGF2YWlsYWJsZSBpbiByZWNlcHRpb24gb3IgZnJlZSBwbGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGF2YWlsYWJsZSBpbiB0cmFuc21pc3Npb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAxIGFuZCAzMiAqLworICB1aW50MzJfdCBEdWFsUXVhZDsgICAgICAgICAgICAgICAgICAvKiE8IEl0IGVuYWJsZXMgb3Igbm90IHRoZSBkdWFsLXF1YWQgbW9kZSB3aGljaCBhbGxvdyB0byBhY2Nlc3MgdXAgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkIG1vZGUgb24gdHdvIGRpZmZlcmVudCBkZXZpY2VzIHRvIGluY3JlYXNlIHRoZSB0aHJvdWdocHV0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9EdWFsUXVhZCAqLworICB1aW50MzJfdCBNZW1vcnlUeXBlOyAgICAgICAgICAgICAgICAvKiE8IEl0IGluZGljYXRlcyB0aGUgZXh0ZXJuYWwgZGV2aWNlIHR5cGUgY29ubmVjdGVkIHRvIHRoZSBPU1BJLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9NZW1vcnlUeXBlICovCisgIHVpbnQzMl90IERldmljZVNpemU7ICAgICAgICAgICAgICAgIC8qITwgSXQgZGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgZXh0ZXJuYWwgZGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgT1NQSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mIGFkZHJlc3MgYml0cyByZXF1aXJlZCB0byBhY2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZXh0ZXJuYWwgZGV2aWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgMzIgKi8KKyAgdWludDMyX3QgQ2hpcFNlbGVjdEhpZ2hUaW1lOyAgICAgICAgLyohPCBJdCBkZWZpbmVzIHRoZSBtaW5pbXVuIG51bWJlciBvZiBjbG9ja3Mgd2hpY2ggdGhlIGNoaXAgc2VsZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCByZW1haW4gaGlnaCBiZXR3ZWVuIGNvbW1hbmRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgOCAqLworICB1aW50MzJfdCBGcmVlUnVubmluZ0Nsb2NrOyAgICAgICAgICAvKiE8IEl0IGVuYWJsZXMgb3Igbm90IHRoZSBmcmVlIHJ1bm5pbmcgY2xvY2suCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBPU1BJX0ZyZWVSdW5uaW5nQ2xvY2sgKi8KKyAgdWludDMyX3QgQ2xvY2tNb2RlOyAgICAgICAgICAgICAgICAgLyohPCBJdCBpbmRpY2F0ZXMgdGhlIGxldmVsIG9mIGNsb2NrIHdoZW4gdGhlIGNoaXAgc2VsZWN0IGlzIHJlbGVhc2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9DbG9ja01vZGUgKi8KKyAgdWludDMyX3QgQ2xvY2tQcmVzY2FsZXI7ICAgICAgICAgICAgLyohPCBJdCBzcGVjaWZpZXMgdGhlIHByZXNjYWxlciBmYWN0b3IgdXNlZCBmb3IgZ2VuZXJhdGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBleHRlcm5hbCBjbG9jayBiYXNlZCBvbiB0aGUgQUhCIGNsb2NrLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgMjU2ICovCisgIHVpbnQzMl90IFNhbXBsZVNoaWZ0aW5nOyAgICAgICAgICAgIC8qITwgSXQgYWxsb3dzIHRvIGRlbGF5IHRvIDEvMiBjeWNsZSB0aGUgZGF0YSBzYW1wbGluZyBpbiBvcmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRha2UgaW4gYWNjb3VudCBleHRlcm5hbCBzaWduYWwgZGVsYXlzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9TYW1wbGVTaGlmdGluZyAqLworICB1aW50MzJfdCBEZWxheUhvbGRRdWFydGVyQ3ljbGU7ICAgICAvKiE8IEl0IGFsbG93cyB0byBob2xkIHRvIDEvNCBjeWNsZSB0aGUgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfRGVsYXlIb2xkUXVhcnRlckN5Y2xlICovCisgIHVpbnQzMl90IENoaXBTZWxlY3RCb3VuZGFyeTsgICAgICAgIC8qITwgSXQgZW5hYmxlcyB0aGUgdHJhbnNhY3Rpb24gYm91bmRhcnkgZmVhdHVyZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzIHRoZSBib3VuZGFyeSBvZiBieXRlcyB0byByZWxlYXNlIHRoZSBjaGlwIHNlbGVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDMxICovCisgIHVpbnQzMl90IERlbGF5QmxvY2tCeXBhc3M7ICAgICAgICAgIC8qITwgSXQgZW5hYmxlcyB0aGUgZGVsYXkgYmxvY2sgYnlwYXNzLCBzbyB0aGUgc2FtcGxpbmcgaXMgbm90IGFmZmVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgdGhlIGRlbGF5IGJsb2NrLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9EZWxheUJsb2NrQnlwYXNzICovCisjaWYgICBkZWZpbmVkIChPQ1RPU1BJX0RDUjNfTUFYVFJBTikKKyAgdWludDMyX3QgTWF4VHJhbjsgICAgICAgICAgICAgICAgICAgLyohPCBJdCBlbmFibGVzIHRoZSBjb21tdW5pY2F0aW9uIHJlZ3VsYXRpb24gZmVhdHVyZS4gVGhlIGNoaXAgc2VsZWN0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZWQgZXZlcnkgTWF4VHJhbisxIGJ5dGVzIHdoZW4gdGhlIG90aGVyIE9jdG9TUEkgcmVxdWVzdCB0aGUgYWNjZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGJ1cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NSAqLworI2VuZGlmCiAjaWYgICBkZWZpbmVkIChPQ1RPU1BJX0RDUjRfUkVGUkVTSCkKLSAgdWludDMyX3QgUmVmcmVzaDsgICAgICAgICAgICAgICAgICAgLyogSXQgZW5hYmxlcyB0aGUgcmVmcmVzaCByYXRlIGZlYXR1cmUuIFRoZSBjaGlwIHNlbGVjdCBpcyByZWxlYXNlZCBldmVyeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZyZXNoKzEgY2xvY2sgY3ljbGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDB4RkZGRkZGRkYgKi8KKyAgdWludDMyX3QgUmVmcmVzaDsgICAgICAgICAgICAgICAgICAgLyohPCBJdCBlbmFibGVzIHRoZSByZWZyZXNoIHJhdGUgZmVhdHVyZS4gVGhlIGNoaXAgc2VsZWN0IGlzIHJlbGVhc2VkIGV2ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmcmVzaCsxIGNsb2NrIGN5Y2xlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDB4RkZGRkZGRkYgKi8KICNlbmRpZgogfU9TUElfSW5pdFR5cGVEZWY7CiAKQEAgLTk3LDE1ICsxMDQsMTUgQEAKIHR5cGVkZWYgc3RydWN0CiAjZW5kaWYKIHsKLSAgT0NUT1NQSV9UeXBlRGVmICAgICAgICAgICAgKkluc3RhbmNlOyAgICAgLyogT1NQSSByZWdpc3RlcnMgYmFzZSBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICovCi0gIE9TUElfSW5pdFR5cGVEZWYgICAgICAgICAgIEluaXQ7ICAgICAgICAgIC8qIE9TUEkgaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAqLwotICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAqcEJ1ZmZQdHI7ICAgICAvKiBBZGRyZXNzIG9mIHRoZSBPU1BJIGJ1ZmZlciBmb3IgdHJhbnNmZXIgICAgICAgICAgKi8KLSAgX19JTyB1aW50MzJfdCAgICAgICAgICAgICAgWGZlclNpemU7ICAgICAgLyogTnVtYmVyIG9mIGRhdGEgdG8gdHJhbnNmZXIgICAgICAgICAgICAgICAgICAgICAgICovCi0gIF9fSU8gdWludDMyX3QgICAgICAgICAgICAgIFhmZXJDb3VudDsgICAgIC8qIENvdW50ZXIgb2YgZGF0YSB0cmFuc2ZlcnJlZCAgICAgICAgICAgICAgICAgICAgICAqLwotICBETUFfSGFuZGxlVHlwZURlZiAgICAgKmhkbWE7ICAgIC8qIEhhbmRsZSBvZiB0aGUgRE1BIGNoYW5uZWwgdXNlZCBmb3IgdGhlIHRyYW5zZmVyICAqLwotICBfX0lPIHVpbnQzMl90ICAgICAgICAgICAgICBTdGF0ZTsgICAgICAgICAvKiBJbnRlcm5hbCBzdGF0ZSBvZiB0aGUgT1NQSSBIQUwgZHJpdmVyICAgICAgICAgICAgKi8KLSAgX19JTyB1aW50MzJfdCAgICAgICAgICAgICAgRXJyb3JDb2RlOyAgICAgLyogRXJyb3IgY29kZSBpbiBjYXNlIG9mIEhBTCBkcml2ZXIgaW50ZXJuYWwgZXJyb3IgICovCi0gIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgIFRpbWVvdXQ7ICAgICAgIC8qIFRpbWVvdXQgdXNlZCBmb3IgdGhlIE9TUEkgZXh0ZXJuYWwgZGV2aWNlIGFjY2VzcyAqLworICBPQ1RPU1BJX1R5cGVEZWYgICAgICAgICAgICAqSW5zdGFuY2U7ICAgICAvKiE8IE9TUEkgcmVnaXN0ZXJzIGJhc2UgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAqLworICBPU1BJX0luaXRUeXBlRGVmICAgICAgICAgICBJbml0OyAgICAgICAgICAvKiE8IE9TUEkgaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAqLworICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAqcEJ1ZmZQdHI7ICAgICAvKiE8IEFkZHJlc3Mgb2YgdGhlIE9TUEkgYnVmZmVyIGZvciB0cmFuc2ZlciAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICAgICAgICAgICAgICBYZmVyU2l6ZTsgICAgICAvKiE8IE51bWJlciBvZiBkYXRhIHRvIHRyYW5zZmVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICAgICAgICAgICAgICBYZmVyQ291bnQ7ICAgICAvKiE8IENvdW50ZXIgb2YgZGF0YSB0cmFuc2ZlcnJlZCAgICAgICAgICAgICAgICAgICAgICAqLworICBETUFfSGFuZGxlVHlwZURlZiAgICAgKmhkbWE7ICAgIC8qITwgSGFuZGxlIG9mIHRoZSBETUEgY2hhbm5lbCB1c2VkIGZvciB0aGUgdHJhbnNmZXIgICovCisgIF9fSU8gdWludDMyX3QgICAgICAgICAgICAgIFN0YXRlOyAgICAgICAgIC8qITwgSW50ZXJuYWwgc3RhdGUgb2YgdGhlIE9TUEkgSEFMIGRyaXZlciAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgICAgICAgICAgICAgIEVycm9yQ29kZTsgICAgIC8qITwgRXJyb3IgY29kZSBpbiBjYXNlIG9mIEhBTCBkcml2ZXIgaW50ZXJuYWwgZXJyb3IgICovCisgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgIFRpbWVvdXQ7ICAgICAgIC8qITwgVGltZW91dCB1c2VkIGZvciB0aGUgT1NQSSBleHRlcm5hbCBkZXZpY2UgYWNjZXNzICovCiAjaWYgZGVmaW5lZCAoVVNFX0hBTF9PU1BJX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfT1NQSV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAgIHZvaWQgKCogRXJyb3JDYWxsYmFjaykgICAgICAgIChzdHJ1Y3QgX19PU1BJX0hhbmRsZVR5cGVEZWYgKmhvc3BpKTsKICAgdm9pZCAoKiBBYm9ydENwbHRDYWxsYmFjaykgICAgKHN0cnVjdCBfX09TUElfSGFuZGxlVHlwZURlZiAqaG9zcGkpOwpAQCAtMTI4LDUwICsxMzUsNTAgQEAKICAgKi8KIHR5cGVkZWYgc3RydWN0CiB7Ci0gIHVpbnQzMl90IE9wZXJhdGlvblR5cGU7ICAgICAgICAgICAgIC8qIEl0IGluZGljYXRlcyBpZiB0aGUgY29uZmlndXJhdGlvbiBhcHBsaWVzIHRvIHRoZSBjb21tb24gcmVnc2l0ZXJzIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSByZWdpc3RlcnMgZm9yIHRoZSB3cml0ZSBvcGVyYXRpb24gKHRoZXNlIHJlZ2lzdGVycyBhcmUgb25seQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGZvciBtZW1vcnktbWFwcGVkIG1vZGUpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfT3BlcmF0aW9uVHlwZSAqLwotICB1aW50MzJfdCBGbGFzaElkOyAgICAgICAgICAgICAgICAgICAvKiBJdCBpbmRpY2F0ZXMgd2hpY2ggZXh0ZXJuYWwgZGV2aWNlIGlzIHNlbGVjdGVkIGZvciB0aGlzIGNvbW1hbmQgKGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZXMgb25seSBpZiBEdWFscXVhZCBpcyBkaXNhYmxlZCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gc3RydWN0dXJlKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBPU1BJX0ZsYXNoSWQgKi8KLSAgdWludDMyX3QgSW5zdHJ1Y3Rpb247ICAgICAgICAgICAgICAgLyogSXQgY29udGFpbnMgdGhlIGluc3RydWN0aW9uIHRvIGJlIHNlbnQgdG8gdGhlIGRldmljZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAweEZGRkZGRkZGICovCi0gIHVpbnQzMl90IEluc3RydWN0aW9uTW9kZTsgICAgICAgICAgIC8qIEl0IGluZGljYXRlcyB0aGUgbW9kZSBvZiB0aGUgaW5zdHJ1Y3Rpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9JbnN0cnVjdGlvbk1vZGUgKi8KLSAgdWludDMyX3QgSW5zdHJ1Y3Rpb25TaXplOyAgICAgICAgICAgLyogSXQgaW5kaWNhdGVzIHRoZSBzaXplIG9mIHRoZSBpbnN0cnVjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBPU1BJX0luc3RydWN0aW9uU2l6ZSAqLwotICB1aW50MzJfdCBJbnN0cnVjdGlvbkR0ck1vZGU7ICAgICAgICAvKiBJdCBlbmFibGVzIG9yIG5vdCB0aGUgRFRSIG1vZGUgZm9yIHRoZSBpbnN0cnVjdGlvbiBwaGFzZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBPU1BJX0luc3RydWN0aW9uRHRyTW9kZSAqLwotICB1aW50MzJfdCBBZGRyZXNzOyAgICAgICAgICAgICAgICAgICAvKiBJdCBjb250YWlucyB0aGUgYWRkcmVzcyB0byBiZSBzZW50IHRvIHRoZSBkZXZpY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMHhGRkZGRkZGRiAqLwotICB1aW50MzJfdCBBZGRyZXNzTW9kZTsgICAgICAgICAgICAgICAvKiBJdCBpbmRpY2F0ZXMgdGhlIG1vZGUgb2YgdGhlIGFkZHJlc3MuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9BZGRyZXNzTW9kZSAqLwotICB1aW50MzJfdCBBZGRyZXNzU2l6ZTsgICAgICAgICAgICAgICAvKiBJdCBpbmRpY2F0ZXMgdGhlIHNpemUgb2YgdGhlIGFkZHJlc3MuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9BZGRyZXNzU2l6ZSAqLwotICB1aW50MzJfdCBBZGRyZXNzRHRyTW9kZTsgICAgICAgICAgICAvKiBJdCBlbmFibGVzIG9yIG5vdCB0aGUgRFRSIG1vZGUgZm9yIHRoZSBhZGRyZXNzIHBoYXNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfQWRkcmVzc0R0ck1vZGUgKi8KLSAgdWludDMyX3QgQWx0ZXJuYXRlQnl0ZXM7ICAgICAgICAgICAgLyogSXQgY29udGFpbnMgdGhlIGFsdGVybmF0ZSBieXRlcyB0byBiZSBzZW50IHRvIHRoZSBkZXZpY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMHhGRkZGRkZGRiAqLwotICB1aW50MzJfdCBBbHRlcm5hdGVCeXRlc01vZGU7ICAgICAgICAvKiBJdCBpbmRpY2F0ZXMgdGhlIG1vZGUgb2YgdGhlIGFsdGVybmF0ZSBieXRlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBPU1BJX0FsdGVybmF0ZUJ5dGVzTW9kZSAqLwotICB1aW50MzJfdCBBbHRlcm5hdGVCeXRlc1NpemU7ICAgICAgICAvKiBJdCBpbmRpY2F0ZXMgdGhlIHNpemUgb2YgdGhlIGFsdGVybmF0ZSBieXRlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBPU1BJX0FsdGVybmF0ZUJ5dGVzU2l6ZSAqLwotICB1aW50MzJfdCBBbHRlcm5hdGVCeXRlc0R0ck1vZGU7ICAgICAvKiBJdCBlbmFibGVzIG9yIG5vdCB0aGUgRFRSIG1vZGUgZm9yIHRoZSBhbHRlcm5hdGUgYnl0ZXMgcGhhc2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9BbHRlcm5hdGVCeXRlc0R0ck1vZGUgKi8KLSAgdWludDMyX3QgRGF0YU1vZGU7ICAgICAgICAgICAgICAgICAgLyogSXQgaW5kaWNhdGVzIHRoZSBtb2RlIG9mIHRoZSBkYXRhLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfRGF0YU1vZGUgKi8KLSAgdWludDMyX3QgTmJEYXRhOyAgICAgICAgICAgICAgICAgICAgLyogSXQgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZGF0YSB0cmFuc2ZlcnJlZCB3aXRoIHRoaXMgY29tbWFuZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyBvbmx5IHVzZWQgZm9yIGluZGlyZWN0IG1vZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgMHhGRkZGRkZGRiAqLwotICB1aW50MzJfdCBEYXRhRHRyTW9kZTsgICAgICAgICAgICAgICAvKiBJdCBlbmFibGVzIG9yIG5vdCB0aGUgRFRSIG1vZGUgZm9yIHRoZSBkYXRhIHBoYXNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfRGF0YUR0ck1vZGUgKi8KLSAgdWludDMyX3QgRHVtbXlDeWNsZXM7ICAgICAgICAgICAgICAgLyogSXQgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZHVtbXkgY3ljbGVzIGluc2VydGVkIGJlZm9yZSBkYXRhIHBoYXNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDMxICovCi0gIHVpbnQzMl90IERRU01vZGU7ICAgICAgICAgICAgICAgICAgIC8qIEl0IGVuYWJsZXMgb3Igbm90IHRoZSBkYXRhIHN0cm9iZSBtYW5hZ2VtZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfRFFTTW9kZSAqLwotICB1aW50MzJfdCBTSU9PTW9kZTsgICAgICAgICAgICAgICAgICAvKiBJdCBlbmFibGVzIG9yIG5vdCB0aGUgU0lPTyBtb2RlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfU0lPT01vZGUgKi8KKyAgdWludDMyX3QgT3BlcmF0aW9uVHlwZTsgICAgICAgICAgICAgLyohPCBJdCBpbmRpY2F0ZXMgaWYgdGhlIGNvbmZpZ3VyYXRpb24gYXBwbGllcyB0byB0aGUgY29tbW9uIHJlZ3NpdGVycyBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSByZWdpc3RlcnMgZm9yIHRoZSB3cml0ZSBvcGVyYXRpb24gKHRoZXNlIHJlZ2lzdGVycyBhcmUgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgZm9yIG1lbW9yeS1tYXBwZWQgbW9kZSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBPU1BJX09wZXJhdGlvblR5cGUgKi8KKyAgdWludDMyX3QgRmxhc2hJZDsgICAgICAgICAgICAgICAgICAgLyohPCBJdCBpbmRpY2F0ZXMgd2hpY2ggZXh0ZXJuYWwgZGV2aWNlIGlzIHNlbGVjdGVkIGZvciB0aGlzIGNvbW1hbmQgKGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGllcyBvbmx5IGlmIER1YWxxdWFkIGlzIGRpc2FibGVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBzdHJ1Y3R1cmUpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9GbGFzaElEICovCisgIHVpbnQzMl90IEluc3RydWN0aW9uOyAgICAgICAgICAgICAgIC8qITwgSXQgY29udGFpbnMgdGhlIGluc3RydWN0aW9uIHRvIGJlIHNlbnQgdG8gdGhlIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDB4RkZGRkZGRkYgKi8KKyAgdWludDMyX3QgSW5zdHJ1Y3Rpb25Nb2RlOyAgICAgICAgICAgLyohPCBJdCBpbmRpY2F0ZXMgdGhlIG1vZGUgb2YgdGhlIGluc3RydWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9JbnN0cnVjdGlvbk1vZGUgKi8KKyAgdWludDMyX3QgSW5zdHJ1Y3Rpb25TaXplOyAgICAgICAgICAgLyohPCBJdCBpbmRpY2F0ZXMgdGhlIHNpemUgb2YgdGhlIGluc3RydWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9JbnN0cnVjdGlvblNpemUgKi8KKyAgdWludDMyX3QgSW5zdHJ1Y3Rpb25EdHJNb2RlOyAgICAgICAgLyohPCBJdCBlbmFibGVzIG9yIG5vdCB0aGUgRFRSIG1vZGUgZm9yIHRoZSBpbnN0cnVjdGlvbiBwaGFzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfSW5zdHJ1Y3Rpb25EdHJNb2RlICovCisgIHVpbnQzMl90IEFkZHJlc3M7ICAgICAgICAgICAgICAgICAgIC8qITwgSXQgY29udGFpbnMgdGhlIGFkZHJlc3MgdG8gYmUgc2VudCB0byB0aGUgZGV2aWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMHhGRkZGRkZGRiAqLworICB1aW50MzJfdCBBZGRyZXNzTW9kZTsgICAgICAgICAgICAgICAvKiE8IEl0IGluZGljYXRlcyB0aGUgbW9kZSBvZiB0aGUgYWRkcmVzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfQWRkcmVzc01vZGUgKi8KKyAgdWludDMyX3QgQWRkcmVzc1NpemU7ICAgICAgICAgICAgICAgLyohPCBJdCBpbmRpY2F0ZXMgdGhlIHNpemUgb2YgdGhlIGFkZHJlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBPU1BJX0FkZHJlc3NTaXplICovCisgIHVpbnQzMl90IEFkZHJlc3NEdHJNb2RlOyAgICAgICAgICAgIC8qITwgSXQgZW5hYmxlcyBvciBub3QgdGhlIERUUiBtb2RlIGZvciB0aGUgYWRkcmVzcyBwaGFzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfQWRkcmVzc0R0ck1vZGUgKi8KKyAgdWludDMyX3QgQWx0ZXJuYXRlQnl0ZXM7ICAgICAgICAgICAgLyohPCBJdCBjb250YWlucyB0aGUgYWx0ZXJuYXRlIGJ5dGVzIHRvIGJlIHNlbnQgdG8gdGhlIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDB4RkZGRkZGRkYgKi8KKyAgdWludDMyX3QgQWx0ZXJuYXRlQnl0ZXNNb2RlOyAgICAgICAgLyohPCBJdCBpbmRpY2F0ZXMgdGhlIG1vZGUgb2YgdGhlIGFsdGVybmF0ZSBieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfQWx0ZXJuYXRlQnl0ZXNNb2RlICovCisgIHVpbnQzMl90IEFsdGVybmF0ZUJ5dGVzU2l6ZTsgICAgICAgIC8qITwgSXQgaW5kaWNhdGVzIHRoZSBzaXplIG9mIHRoZSBhbHRlcm5hdGUgYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBPU1BJX0FsdGVybmF0ZUJ5dGVzU2l6ZSAqLworICB1aW50MzJfdCBBbHRlcm5hdGVCeXRlc0R0ck1vZGU7ICAgICAvKiE8IEl0IGVuYWJsZXMgb3Igbm90IHRoZSBEVFIgbW9kZSBmb3IgdGhlIGFsdGVybmF0ZSBieXRlcyBwaGFzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfQWx0ZXJuYXRlQnl0ZXNEdHJNb2RlICovCisgIHVpbnQzMl90IERhdGFNb2RlOyAgICAgICAgICAgICAgICAgIC8qITwgSXQgaW5kaWNhdGVzIHRoZSBtb2RlIG9mIHRoZSBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9EYXRhTW9kZSAqLworICB1aW50MzJfdCBOYkRhdGE7ICAgICAgICAgICAgICAgICAgICAvKiE8IEl0IGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGRhdGEgdHJhbnNmZXJyZWQgd2l0aCB0aGlzIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyBvbmx5IHVzZWQgZm9yIGluZGlyZWN0IG1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAxIGFuZCAweEZGRkZGRkZGICovCisgIHVpbnQzMl90IERhdGFEdHJNb2RlOyAgICAgICAgICAgICAgIC8qITwgSXQgZW5hYmxlcyBvciBub3QgdGhlIERUUiBtb2RlIGZvciB0aGUgZGF0YSBwaGFzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfRGF0YUR0ck1vZGUgKi8KKyAgdWludDMyX3QgRHVtbXlDeWNsZXM7ICAgICAgICAgICAgICAgLyohPCBJdCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBkdW1teSBjeWNsZXMgaW5zZXJ0ZWQgYmVmb3JlIGRhdGEgcGhhc2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAzMSAqLworICB1aW50MzJfdCBEUVNNb2RlOyAgICAgICAgICAgICAgICAgICAvKiE8IEl0IGVuYWJsZXMgb3Igbm90IHRoZSBkYXRhIHN0cm9iZSBtYW5hZ2VtZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9EUVNNb2RlICovCisgIHVpbnQzMl90IFNJT09Nb2RlOyAgICAgICAgICAgICAgICAgIC8qITwgSXQgZW5hYmxlcyBvciBub3QgdGhlIFNJT08gbW9kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfU0lPT01vZGUgKi8KIH1PU1BJX1JlZ3VsYXJDbWRUeXBlRGVmOwogCiAvKioKQEAgLTE3OSwxNCArMTg2LDE0IEBACiAgICovCiB0eXBlZGVmIHN0cnVjdAogewotICB1aW50MzJfdCBSV1JlY292ZXJ5VGltZTsgICAgICAgLyogSXQgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgY3ljbGVzIGZvciB0aGUgZGV2aWNlIHJlYWQgd3JpdGUgcmVjb3ZlcnkgdGltZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1ICovCi0gIHVpbnQzMl90IEFjY2Vzc1RpbWU7ICAgICAgICAgICAvKiBJdCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBjeWNsZXMgZm9yIHRoZSBkZXZpY2UgYWNjZXMgdGltZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1ICovCi0gIHVpbnQzMl90IFdyaXRlWmVyb0xhdGVuY3k7ICAgICAvKiBJdCBlbmFibGVzIG9yIG5vdCB0aGUgbGF0ZW5jeSBmb3IgdGhlIHdyaXRlIGFjY2Vzcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9Xcml0ZVplcm9MYXRlbmN5ICovCi0gIHVpbnQzMl90IExhdGVuY3lNb2RlOyAgICAgICAgICAvKiBJdCBjb25maWd1cmVzIHRoZSBsYXRlbmN5IG1vZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfTGF0ZW5jeU1vZGUgKi8KKyAgdWludDMyX3QgUldSZWNvdmVyeVRpbWU7ICAgICAgIC8qITwgSXQgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgY3ljbGVzIGZvciB0aGUgZGV2aWNlIHJlYWQgd3JpdGUgcmVjb3ZlcnkgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUgKi8KKyAgdWludDMyX3QgQWNjZXNzVGltZTsgICAgICAgICAgIC8qITwgSXQgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgY3ljbGVzIGZvciB0aGUgZGV2aWNlIGFjY2VzIHRpbWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1ICovCisgIHVpbnQzMl90IFdyaXRlWmVyb0xhdGVuY3k7ICAgICAvKiE8IEl0IGVuYWJsZXMgb3Igbm90IHRoZSBsYXRlbmN5IGZvciB0aGUgd3JpdGUgYWNjZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfV3JpdGVaZXJvTGF0ZW5jeSAqLworICB1aW50MzJfdCBMYXRlbmN5TW9kZTsgICAgICAgICAgLyohPCBJdCBjb25maWd1cmVzIHRoZSBsYXRlbmN5IG1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9MYXRlbmN5TW9kZSAqLwogfU9TUElfSHlwZXJidXNDZmdUeXBlRGVmOwogCiAvKioKQEAgLTE5NCwxOCArMjAxLDE4IEBACiAgICovCiB0eXBlZGVmIHN0cnVjdAogewotICB1aW50MzJfdCBBZGRyZXNzU3BhY2U7ICAgICAvKiBJdCBpbmRpY2F0ZXMgdGhlIGFkZHJlc3Mgc3BhY2UgYWNjZXNzZWQgYnkgdGhlIGNvbW1hbmQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9BZGRyZXNzU3BhY2UgKi8KLSAgdWludDMyX3QgQWRkcmVzczsgICAgICAgICAgLyogSXQgY29udGFpbnMgdGhlIGFkZHJlc3MgdG8gYmUgc2VudCB0b3QgaGUgZGV2aWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDB4RkZGRkZGRkYgKi8KLSAgdWludDMyX3QgQWRkcmVzc1NpemU7ICAgICAgLyogSXQgaW5kaWNhdGVzIHRoZSBzaXplIG9mIHRoZSBhZGRyZXNzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfQWRkcmVzc1NpemUgKi8KLSAgdWludDMyX3QgTmJEYXRhOyAgICAgICAgICAgLyogSXQgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZGF0YSB0cmFuc2ZlcnJlZCB3aXRoIHRoaXMgY29tbWFuZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyBvbmx5IHVzZWQgZm9yIGluZGlyZWN0IG1vZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgMHhGRkZGRkZGRgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBjYXNlIG9mIGF1dG9wb2xsaW5nIG1vZGUsIHRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgYmV0d2VlbiAxIGFuZCA0ICovCi0gIHVpbnQzMl90IERRU01vZGU7ICAgICAgICAgIC8qIEl0IGVuYWJsZXMgb3Igbm90IHRoZSBkYXRhIHN0cm9iZSBtYW5hZ2VtZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfRFFTTW9kZSAqLworICB1aW50MzJfdCBBZGRyZXNzU3BhY2U7ICAgICAvKiE8IEl0IGluZGljYXRlcyB0aGUgYWRkcmVzcyBzcGFjZSBhY2Nlc3NlZCBieSB0aGUgY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfQWRkcmVzc1NwYWNlICovCisgIHVpbnQzMl90IEFkZHJlc3M7ICAgICAgICAgIC8qITwgSXQgY29udGFpbnMgdGhlIGFkZHJlc3MgdG8gYmUgc2VudCB0b3QgaGUgZGV2aWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMHhGRkZGRkZGRiAqLworICB1aW50MzJfdCBBZGRyZXNzU2l6ZTsgICAgICAvKiE8IEl0IGluZGljYXRlcyB0aGUgc2l6ZSBvZiB0aGUgYWRkcmVzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfQWRkcmVzc1NpemUgKi8KKyAgdWludDMyX3QgTmJEYXRhOyAgICAgICAgICAgLyohPCBJdCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBkYXRhIHRyYW5zZmVycmVkIHdpdGggdGhpcyBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgb25seSB1c2VkIGZvciBpbmRpcmVjdCBtb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgMHhGRkZGRkZGRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2YgYXV0b3BvbGxpbmcgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDQgKi8KKyAgdWludDMyX3QgRFFTTW9kZTsgICAgICAgICAgLyohPCBJdCBlbmFibGVzIG9yIG5vdCB0aGUgZGF0YSBzdHJvYmUgbWFuYWdlbWVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfRFFTTW9kZSAqLwogfU9TUElfSHlwZXJidXNDbWRUeXBlRGVmOwogCiAvKioKQEAgLTIxMywxNiArMjIwLDE2IEBACiAgICovCiB0eXBlZGVmIHN0cnVjdAogewotICB1aW50MzJfdCBNYXRjaDsgICAgICAgICAgICAgIC8qIFNwZWNpZmllcyB0aGUgdmFsdWUgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgbWFza2VkIHN0YXR1cyByZWdpc3RlciB0byBnZXQgYSBtYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIGJldHdlZW4gMCBhbmQgMHhGRkZGRkZGRiAqLwotICB1aW50MzJfdCBNYXNrOyAgICAgICAgICAgICAgIC8qIFNwZWNpZmllcyB0aGUgbWFzayB0byBiZSBhcHBsaWVkIHRvIHRoZSBzdGF0dXMgYnl0ZXMgcmVjZWl2ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDB4RkZGRkZGRkYgKi8KLSAgdWludDMyX3QgTWF0Y2hNb2RlOyAgICAgICAgICAvKiBTcGVjaWZpZXMgdGhlIG1ldGhvZCB1c2VkIGZvciBkZXRlcm1pbmluZyBhIG1hdGNoLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9NYXRjaE1vZGUgKi8KLSAgdWludDMyX3QgQXV0b21hdGljU3RvcDsgICAgICAvKiBTcGVjaWZpZXMgaWYgYXV0b21hdGljIHBvbGxpbmcgaXMgc3RvcHBlZCBhZnRlciBhIG1hdGNoLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9BdXRvbWF0aWNTdG9wICovCi0gIHVpbnQzMl90IEludGVydmFsOyAgICAgICAgICAgLyogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgY2xvY2sgY3ljbGVzIGJldHdlZW4gdHdvIHJlYWQgZHVyaW5nIGF1dG9tYXRpYyBwb2xsaW5nIHBoYXNlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIGJldHdlZW4gMCBhbmQgMHhGRkZGICovCisgIHVpbnQzMl90IE1hdGNoOyAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIHZhbHVlIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIG1hc2tlZCBzdGF0dXMgcmVnaXN0ZXIgdG8gZ2V0IGEgbWF0Y2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIGJldHdlZW4gMCBhbmQgMHhGRkZGRkZGRiAqLworICB1aW50MzJfdCBNYXNrOyAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBtYXNrIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHN0YXR1cyBieXRlcyByZWNlaXZlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgYmV0d2VlbiAwIGFuZCAweEZGRkZGRkZGICovCisgIHVpbnQzMl90IE1hdGNoTW9kZTsgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG1ldGhvZCB1c2VkIGZvciBkZXRlcm1pbmluZyBhIG1hdGNoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBPU1BJX01hdGNoTW9kZSAqLworICB1aW50MzJfdCBBdXRvbWF0aWNTdG9wOyAgICAgIC8qITwgU3BlY2lmaWVzIGlmIGF1dG9tYXRpYyBwb2xsaW5nIGlzIHN0b3BwZWQgYWZ0ZXIgYSBtYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSV9BdXRvbWF0aWNTdG9wICovCisgIHVpbnQzMl90IEludGVydmFsOyAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjbG9jayBjeWNsZXMgYmV0d2VlbiB0d28gcmVhZCBkdXJpbmcgYXV0b21hdGljIHBvbGxpbmcgcGhhc2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDB4RkZGRiAqLwogfU9TUElfQXV0b1BvbGxpbmdUeXBlRGVmOwogCiAvKioKQEAgLTIzMCwxMCArMjM3LDEwIEBACiAgICovCiB0eXBlZGVmIHN0cnVjdAogewotICB1aW50MzJfdCBUaW1lT3V0QWN0aXZhdGlvbjsgIC8qIFNwZWNpZmllcyBpZiB0aGUgdGltZW91dCBjb3VudGVyIGlzIGVuYWJsZWQgdG8gcmVsZWFzZSB0aGUgY2hpcCBzZWxlY3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBPU1BJX1RpbWVPdXRBY3RpdmF0aW9uICovCi0gIHVpbnQzMl90IFRpbWVPdXRQZXJpb2Q7ICAgICAgLyogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgY2xvY2sgdG8gd2FpdCB3aGVuIHRoZSBGSUZPIGlzIGZ1bGwgYmVmb3JlIHRvIHJlbGVhc2UgdGhlIGNoaXAgc2VsZWN0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgYmV0d2VlbiAwIGFuZCAweEZGRkYgKi8KKyAgdWludDMyX3QgVGltZU91dEFjdGl2YXRpb247ICAvKiE8IFNwZWNpZmllcyBpZiB0aGUgdGltZW91dCBjb3VudGVyIGlzIGVuYWJsZWQgdG8gcmVsZWFzZSB0aGUgY2hpcCBzZWxlY3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIE9TUElfVGltZU91dEFjdGl2YXRpb24gKi8KKyAgdWludDMyX3QgVGltZU91dFBlcmlvZDsgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNsb2NrIHRvIHdhaXQgd2hlbiB0aGUgRklGTyBpcyBmdWxsIGJlZm9yZSB0byByZWxlYXNlIHRoZSBjaGlwIHNlbGVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgYmV0d2VlbiAwIGFuZCAweEZGRkYgKi8KIH1PU1BJX01lbW9yeU1hcHBlZFR5cGVEZWY7CiAKIC8qKgpAQCAtMjQxLDIwICsyNDgsMjAgQEAKICAgKi8KIHR5cGVkZWYgc3RydWN0CiB7Ci0gIHVpbnQzMl90IENsa1BvcnQ7ICAgICAgICAgICAgICAgIC8qIEl0IGluZGljYXRlcyB3aGljaCBwb3J0IG9mIHRoZSBPU1BJIElPIE1hbmFnZXIgaXMgdXNlZCBmb3IgdGhlIENMSyBwaW5zLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDggKi8KLSAgdWludDMyX3QgRFFTUG9ydDsgICAgICAgICAgICAgICAgLyogSXQgaW5kaWNhdGVzIHdoaWNoIHBvcnQgb2YgdGhlIE9TUEkgSU8gTWFuYWdlciBpcyB1c2VkIGZvciB0aGUgRFFTIHBpbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAxIGFuZCA4ICovCi0gIHVpbnQzMl90IE5DU1BvcnQ7ICAgICAgICAgICAgICAgIC8qIEl0IGluZGljYXRlcyB3aGljaCBwb3J0IG9mIHRoZSBPU1BJIElPIE1hbmFnZXIgaXMgdXNlZCBmb3IgdGhlIE5DUyBwaW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgOCAqLwotICB1aW50MzJfdCBJT0xvd1BvcnQ7ICAgICAgICAgICAgICAvKiBJdCBpbmRpY2F0ZXMgd2hpY2ggcG9ydCBvZiB0aGUgT1NQSSBJTyBNYW5hZ2VyIGlzIHVzZWQgZm9yIHRoZSBJT1szOjBdIHBpbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgT1NQSU1fSU9Qb3J0ICovCi0gIHVpbnQzMl90IElPSGlnaFBvcnQ7ICAgICAgICAgICAgIC8qIEl0IGluZGljYXRlcyB3aGljaCBwb3J0IG9mIHRoZSBPU1BJIElPIE1hbmFnZXIgaXMgdXNlZCBmb3IgdGhlIElPWzc6NF0gcGlucy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBPU1BJTV9JT1BvcnQgKi8KLSNpZiBkZWZpbmVkIChPQ1RPU1BJTV9DUl9NVVhFTikKLSAgdWludDMyX3QgUmVxMkFja1RpbWU7ICAgICAgICAgICAgLyogSXQgaW5kaWNhdGVzIHRoZSBtaW5pbXVtIHN3aXRjaGluZyBkdXJhdGlvbiAoaW4gbnVtYmVyIG9mIGNsb2NrIGN5Y2xlcykgZXhwZWN0ZWQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNvbWUgc2lnbmFscyBhcmUgbXVsdGlwbGV4ZWQgaW4gdGhlIE9TUEkgSU8gTWFuYWdlciB3aXRoIHRoZSBvdGhlciBPU1BJLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDI1NiAqLworICB1aW50MzJfdCBDbGtQb3J0OyAgICAgICAgICAgICAgICAvKiE8IEl0IGluZGljYXRlcyB3aGljaCBwb3J0IG9mIHRoZSBPU1BJIElPIE1hbmFnZXIgaXMgdXNlZCBmb3IgdGhlIENMSyBwaW5zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgOCAqLworICB1aW50MzJfdCBEUVNQb3J0OyAgICAgICAgICAgICAgICAvKiE8IEl0IGluZGljYXRlcyB3aGljaCBwb3J0IG9mIHRoZSBPU1BJIElPIE1hbmFnZXIgaXMgdXNlZCBmb3IgdGhlIERRUyBwaW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCA4LCAwIG1lYW5zIHRoYXQgc2lnbmFsIG5vdCB1c2VkICovCisgIHVpbnQzMl90IE5DU1BvcnQ7ICAgICAgICAgICAgICAgIC8qITwgSXQgaW5kaWNhdGVzIHdoaWNoIHBvcnQgb2YgdGhlIE9TUEkgSU8gTWFuYWdlciBpcyB1c2VkIGZvciB0aGUgTkNTIHBpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDggKi8KKyAgdWludDMyX3QgSU9Mb3dQb3J0OyAgICAgICAgICAgICAgLyohPCBJdCBpbmRpY2F0ZXMgd2hpY2ggcG9ydCBvZiB0aGUgT1NQSSBJTyBNYW5hZ2VyIGlzIHVzZWQgZm9yIHRoZSBJT1szOjBdIHBpbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBPU1BJTV9JT1BvcnQgKi8KKyAgdWludDMyX3QgSU9IaWdoUG9ydDsgICAgICAgICAgICAgLyohPCBJdCBpbmRpY2F0ZXMgd2hpY2ggcG9ydCBvZiB0aGUgT1NQSSBJTyBNYW5hZ2VyIGlzIHVzZWQgZm9yIHRoZSBJT1s3OjRdIHBpbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBPU1BJTV9JT1BvcnQgKi8KKyNpZiAgIGRlZmluZWQgKE9DVE9TUElNX0NSX01VWEVOKQorICB1aW50MzJfdCBSZXEyQWNrVGltZTsgICAgICAgICAgICAvKiE8IEl0IGluZGljYXRlcyB0aGUgbWluaW11bSBzd2l0Y2hpbmcgZHVyYXRpb24gKGluIG51bWJlciBvZiBjbG9jayBjeWNsZXMpIGV4cGVjdGVkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNvbWUgc2lnbmFscyBhcmUgbXVsdGlwbGV4ZWQgaW4gdGhlIE9TUEkgSU8gTWFuYWdlciB3aXRoIHRoZSBvdGhlciBPU1BJLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgMjU2ICovCiAjZW5kaWYKIH1PU1BJTV9DZmdUeXBlRGVmOwogCkBAIC0zNzAsMTggKzM3Nyw2IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBPU1BJX1dyYXBTaXplIE9TUEkgV3JhcC1TaXplCi0gICogQHsKLSAgKi8KLSNkZWZpbmUgSEFMX09TUElfV1JBUF9OT1RfU1VQUE9SVEVEICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHdyYXBwZWQgcmVhZHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG1lbW9yeSAgICovCi0jZGVmaW5lIEhBTF9PU1BJX1dSQVBfMTZfQllURVMgICAgICAgICAgICAgICAoKHVpbnQzMl90KU9DVE9TUElfRENSMl9XUkFQU0laRV8xKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBleHRlcm5hbCBtZW1vcnkgc3VwcG9ydHMgd3JhcCBzaXplIG9mIDE2IGJ5dGVzICAqLwotI2RlZmluZSBIQUxfT1NQSV9XUkFQXzMyX0JZVEVTICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoT0NUT1NQSV9EQ1IyX1dSQVBTSVpFXzAgfCBPQ1RPU1BJX0RDUjJfV1JBUFNJWkVfMSkpIC8qITwgZXh0ZXJuYWwgbWVtb3J5IHN1cHBvcnRzIHdyYXAgc2l6ZSBvZiAzMiBieXRlcyAgKi8KLSNkZWZpbmUgSEFMX09TUElfV1JBUF82NF9CWVRFUyAgICAgICAgICAgICAgICgodWludDMyX3QpT0NUT1NQSV9EQ1IyX1dSQVBTSVpFXzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGV4dGVybmFsIG1lbW9yeSBzdXBwb3J0cyB3cmFwIHNpemUgb2YgNjQgYnl0ZXMgICovCi0jZGVmaW5lIEhBTF9PU1BJX1dSQVBfMTI4X0JZVEVTICAgICAgICAgICAgICAoKHVpbnQzMl90KShPQ1RPU1BJX0RDUjJfV1JBUFNJWkVfMCB8IE9DVE9TUElfRENSMl9XUkFQU0laRV8yKSkgLyohPCBleHRlcm5hbCBtZW1vcnkgc3VwcG9ydHMgd3JhcCBzaXplIG9mIDEyOCBieXRlcyAqLwotLyoqCi0gICogQH0KLSAgKi8KLQogLyoqIEBkZWZncm91cCBPU1BJX1NhbXBsZVNoaWZ0aW5nIE9TUEkgU2FtcGxlIFNoaWZ0aW5nCiAgICogQHsKICAgKi8KQEAgLTQwMCw2ICszOTUsMTUgQEAKICAgKiBAfQogICAqLwogCisvKiogQGRlZmdyb3VwIE9TUElfRGVsYXlCbG9ja0J5cGFzcyBPU1BJIERlbGF5IEJsb2NrIEJ5cGFhcworICAqIEB7CisgICovCisjZGVmaW5lIEhBTF9PU1BJX0RFTEFZX0JMT0NLX1VTRUQgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTYW1wbGluZyBjbG9jayBpcyBkZWxheWVkIGJ5IHRoZSBkZWxheSBibG9jayAqLworI2RlZmluZSBIQUxfT1NQSV9ERUxBWV9CTE9DS19CWVBBU1NFRCAgICAgICAgKCh1aW50MzJfdClPQ1RPU1BJX0RDUjFfRExZQllQKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVsYXkgYmxvY2sgaXMgYnlwYXNzZWQgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKgorICAqIEB9CisgICovCisKIC8qKiBAZGVmZ3JvdXAgT1NQSV9PcGVyYXRpb25UeXBlIE9TUEkgT3BlcmF0aW9uIFR5cGUKICAgKiBAewogICAqLwpAQCAtNjQ0LDYgKzY0OCw3IEBACiAvKiogQGRlZmdyb3VwIE9TUElNX0lPUG9ydCBPU1BJIElPIE1hbmFnZXIgSU8gUG9ydAogICAqIEB7CiAgICovCisjZGVmaW5lIEhBTF9PU1BJTV9JT1BPUlRfTk9ORSAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElPcyBub3QgdXNlZCAqLwogI2RlZmluZSBIQUxfT1NQSU1fSU9QT1JUXzFfTE9XICAgICAgICAgICAgICgodWludDMyX3QpKE9DVE9TUElNX1BDUl9JT0xFTiB8IDB4MVUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQb3J0IDEgLSBJT1szOjBdICovCiAjZGVmaW5lIEhBTF9PU1BJTV9JT1BPUlRfMV9ISUdIICAgICAgICAgICAgKCh1aW50MzJfdCkoT0NUT1NQSU1fUENSX0lPSEVOIHwgMHgxVSkpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBvcnQgMSAtIElPWzc6NF0gKi8KICNkZWZpbmUgSEFMX09TUElNX0lPUE9SVF8yX0xPVyAgICAgICAgICAgICAoKHVpbnQzMl90KShPQ1RPU1BJTV9QQ1JfSU9MRU4gfCAweDJVKSkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUG9ydCAyIC0gSU9bMzowXSAqLwpAQCAtNjYwLDcgKzY2NSw3IEBACiAgICogQHsKICAgKi8KIC8qKiBAYnJpZWYgUmVzZXQgT1NQSSBoYW5kbGUgc3RhdGUuCi0gICogQHBhcmFtICBfX0hBTkRMRV9fIE9TUEkgaGFuZGxlLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIE9TUEkgSGFuZGxlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2lmIGRlZmluZWQgKFVTRV9IQUxfT1NQSV9SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX09TUElfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQpAQCAtODkyLDEyICs4OTcsNiBAQAogI2RlZmluZSBJU19PU1BJX0NMT0NLX01PREUoTU9ERSkgICAgICAgICAgICgoKE1PREUpID09IEhBTF9PU1BJX0NMT0NLX01PREVfMCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEhBTF9PU1BJX0NMT0NLX01PREVfMykpCiAKLSNkZWZpbmUgSVNfT1NQSV9XUkFQX1NJWkUoU0laRSkgICAgICAgICAgICAoKChTSVpFKSA9PSBIQUxfT1NQSV9XUkFQX05PVF9TVVBQT1JURUQpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBIQUxfT1NQSV9XUkFQXzE2X0JZVEVTKSAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBIQUxfT1NQSV9XUkFQXzMyX0JZVEVTKSAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBIQUxfT1NQSV9XUkFQXzY0X0JZVEVTKSAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBIQUxfT1NQSV9XUkFQXzEyOF9CWVRFUykpCi0KICNkZWZpbmUgSVNfT1NQSV9DTEtfUFJFU0NBTEVSKFBSRVNDQUxFUikgICAoKChQUkVTQ0FMRVIpID49IDFVKSAmJiAoKFBSRVNDQUxFUikgPD0gMjU2VSkpCiAKICNkZWZpbmUgSVNfT1NQSV9TQU1QTEVfU0hJRlRJTkcoQ1lDTEUpICAgICAoKChDWUNMRSkgPT0gSEFMX09TUElfU0FNUExFX1NISUZUSU5HX05PTkUpICAgICAgfHwgXApAQCAtMTAwNCwxNSArMTAwMywyNSBAQAogCiAjZGVmaW5lIElTX09TUElfQ1NfQk9VTkRBUlkoQk9VTkRBUlkpICAgICAgKChCT1VOREFSWSkgPD0gMzFVKQogCisjZGVmaW5lIElTX09TUElfRExZQllQKE1PREUpICAgICAgICAgICAgICAgKCgoTU9ERSkgPT0gSEFMX09TUElfREVMQVlfQkxPQ0tfVVNFRCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEhBTF9PU1BJX0RFTEFZX0JMT0NLX0JZUEFTU0VEKSkKKyNpZiAgIGRlZmluZWQgKE9DVE9TUElfRENSM19NQVhUUkFOKQorCisjZGVmaW5lIElTX09TUElfTUFYVFJBTihOQl9CWVRFUykgICAgICAgICAgKChOQl9CWVRFUykgPD0gMjU1VSkKKyNlbmRpZgorCiAjZGVmaW5lIElTX09TUElNX1BPUlQoTlVNQkVSKSAgICAgICAgICAgICAgKCgoTlVNQkVSKSA+PSAxVSkgJiYgKChOVU1CRVIpIDw9IDJVKSkKIAotI2RlZmluZSBJU19PU1BJTV9JT19QT1JUKFBPUlQpICAgICAgICAgICAgICgoKFBPUlQpID09IEhBTF9PU1BJTV9JT1BPUlRfMV9MT1cpICB8fCBcCisjZGVmaW5lIElTX09TUElNX0RRU19QT1JUKE5VTUJFUikgICAgICAgICAgKChOVU1CRVIpIDw9IDJVKQorCisjZGVmaW5lIElTX09TUElNX0lPX1BPUlQoUE9SVCkgICAgICAgICAgICAgKCgoUE9SVCkgPT0gSEFMX09TUElNX0lPUE9SVF9OT05FKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBPUlQpID09IEhBTF9PU1BJTV9JT1BPUlRfMV9MT1cpICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUE9SVCkgPT0gSEFMX09TUElNX0lPUE9SVF8xX0hJR0gpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQT1JUKSA9PSBIQUxfT1NQSU1fSU9QT1JUXzJfTE9XKSAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBPUlQpID09IEhBTF9PU1BJTV9JT1BPUlRfMl9ISUdIKSkKIAogI2lmIGRlZmluZWQgKE9DVE9TUElNX0NSX01VWEVOKQotI2RlZmluZSBJU19PU1BJTV9SRVEyQUNLVElNRShUSU1FKSAgICAgICAgICAoKFRJTUUgPj0gMSkgJiYgKFRJTUUgPD0gMjU2KSkKKyNkZWZpbmUgSVNfT1NQSU1fUkVRMkFDS1RJTUUoVElNRSkgICAgICAgICAgKCgoVElNRSkgPj0gMSkgJiYgKChUSU1FKSA8PSAyNTYpKQogI2VuZGlmCiAvKioKICAgQGVuZGNvbmQKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfaGFsX3BjZC5oIGIvSW5jL3N0bTMybDR4eF9oYWxfcGNkLmgKaW5kZXggYzUzMDMxZi4uMGM1Mzg3NyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfcGNkLmgKKysrIGIvSW5jL3N0bTMybDR4eF9oYWxfcGNkLmgKQEAgLTEwNCwyMiArMTA0LDIyIEBACiB0eXBlZGVmIHN0cnVjdAogI2VuZGlmIC8qIFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogewotICBQQ0RfVHlwZURlZiAgICAgICAgICAgICAqSW5zdGFuY2U7ICAgLyohPCBSZWdpc3RlciBiYXNlIGFkZHJlc3MgICAgICAgICAgICAgICovCi0gIFBDRF9Jbml0VHlwZURlZiAgICAgICAgIEluaXQ7ICAgICAgICAvKiE8IFBDRCByZXF1aXJlZCBwYXJhbWV0ZXJzICAgICAgICAgICAgKi8KLSAgX19JTyB1aW50OF90ICAgICAgICAgICAgVVNCX0FkZHJlc3M7IC8qITwgVVNCIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAqLworICBQQ0RfVHlwZURlZiAgICAgICAgICAgICAqSW5zdGFuY2U7ICAgLyohPCBSZWdpc3RlciBiYXNlIGFkZHJlc3MgICAgICAgICAgICAgKi8KKyAgUENEX0luaXRUeXBlRGVmICAgICAgICAgSW5pdDsgICAgICAgIC8qITwgUENEIHJlcXVpcmVkIHBhcmFtZXRlcnMgICAgICAgICAgICovCisgIF9fSU8gdWludDhfdCAgICAgICAgICAgIFVTQl9BZGRyZXNzOyAvKiE8IFVTQiBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAqLwogI2lmIGRlZmluZWQgKFVTQl9PVEdfRlMpCi0gIFBDRF9FUFR5cGVEZWYgICAgICAgICAgIElOX2VwWzE2XTsgICAvKiE8IElOIGVuZHBvaW50IHBhcmFtZXRlcnMgICAgICAgICAgICAgKi8KLSAgUENEX0VQVHlwZURlZiAgICAgICAgICAgT1VUX2VwWzE2XTsgIC8qITwgT1VUIGVuZHBvaW50IHBhcmFtZXRlcnMgICAgICAgICAgICAqLworICBQQ0RfRVBUeXBlRGVmICAgICAgICAgICBJTl9lcFsxNl07ICAgLyohPCBJTiBlbmRwb2ludCBwYXJhbWV0ZXJzICAgICAgICAgICAgKi8KKyAgUENEX0VQVHlwZURlZiAgICAgICAgICAgT1VUX2VwWzE2XTsgIC8qITwgT1VUIGVuZHBvaW50IHBhcmFtZXRlcnMgICAgICAgICAgICovCiAjZW5kaWYgLyogZGVmaW5lZCAoVVNCX09UR19GUykgKi8KICNpZiBkZWZpbmVkIChVU0IpCiAgIFBDRF9FUFR5cGVEZWYgICAgICAgICAgIElOX2VwWzhdOyAgIC8qITwgSU4gZW5kcG9pbnQgcGFyYW1ldGVycyAgICAgICAgICAgICAqLwogICBQQ0RfRVBUeXBlRGVmICAgICAgICAgICBPVVRfZXBbOF07ICAvKiE8IE9VVCBlbmRwb2ludCBwYXJhbWV0ZXJzICAgICAgICAgICAgKi8KICNlbmRpZiAvKiBkZWZpbmVkIChVU0IpICovCi0gIEhBTF9Mb2NrVHlwZURlZiAgICAgICAgIExvY2s7ICAgICAgICAvKiE8IFBDRCBwZXJpcGhlcmFsIHN0YXR1cyAgICAgICAgICAgICAgKi8KLSAgX19JTyBQQ0RfU3RhdGVUeXBlRGVmICAgU3RhdGU7ICAgICAgIC8qITwgUENEIGNvbW11bmljYXRpb24gc3RhdGUgICAgICAgICAgICAqLwotICBfX0lPICB1aW50MzJfdCAgICAgICAgICBFcnJvckNvZGU7ICAgLyohPCBQQ0QgRXJyb3IgY29kZSAgICAgICAgICAgICAgICAgICAgICovCi0gIHVpbnQzMl90ICAgICAgICAgICAgICAgIFNldHVwWzEyXTsgICAvKiE8IFNldHVwIHBhY2tldCBidWZmZXIgICAgICAgICAgICAgICAgKi8KLSAgUENEX0xQTV9TdGF0ZVR5cGVEZWYgICAgTFBNX1N0YXRlOyAgIC8qITwgTFBNIFN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBIQUxfTG9ja1R5cGVEZWYgICAgICAgICBMb2NrOyAgICAgICAgLyohPCBQQ0QgcGVyaXBoZXJhbCBzdGF0dXMgICAgICAgICAgICAgKi8KKyAgX19JTyBQQ0RfU3RhdGVUeXBlRGVmICAgU3RhdGU7ICAgICAgIC8qITwgUENEIGNvbW11bmljYXRpb24gc3RhdGUgICAgICAgICAgICovCisgIF9fSU8gIHVpbnQzMl90ICAgICAgICAgIEVycm9yQ29kZTsgICAvKiE8IFBDRCBFcnJvciBjb2RlICAgICAgICAgICAgICAgICAgICAqLworICB1aW50MzJfdCAgICAgICAgICAgICAgICBTZXR1cFsxMl07ICAgLyohPCBTZXR1cCBwYWNrZXQgYnVmZmVyICAgICAgICAgICAgICAgKi8KKyAgUENEX0xQTV9TdGF0ZVR5cGVEZWYgICAgTFBNX1N0YXRlOyAgIC8qITwgTFBNIFN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIEJFU0w7CiAKIApAQCAtMTk5LDkgKzE5OSw5IEBACiAKIC8qIEV4cG9ydGVkIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGRlZmdyb3VwIFBDRF9FeHBvcnRlZF9NYWNyb3MgUENEIEV4cG9ydGVkIE1hY3JvcwotICogIEBicmllZiBtYWNyb3MgdG8gaGFuZGxlIGludGVycnVwdHMgYW5kIHNwZWNpZmljIGNsb2NrIGNvbmZpZ3VyYXRpb25zCi0gKiBAewotICovCisgICogIEBicmllZiBtYWNyb3MgdG8gaGFuZGxlIGludGVycnVwdHMgYW5kIHNwZWNpZmljIGNsb2NrIGNvbmZpZ3VyYXRpb25zCisgICogQHsKKyAgKi8KICNpZiBkZWZpbmVkIChVU0JfT1RHX0ZTKQogI2RlZmluZSBfX0hBTF9QQ0RfRU5BQkxFKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICAgICAodm9pZClVU0JfRW5hYmxlR2xvYmFsSW50ICgoX19IQU5ETEVfXyktPkluc3RhbmNlKQogI2RlZmluZSBfX0hBTF9QQ0RfRElTQUJMRShfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgICAgICAodm9pZClVU0JfRGlzYWJsZUdsb2JhbEludCAoKF9fSEFORExFX18pLT5JbnN0YW5jZSkKQEAgLTI2Myw3ICsyNjMsNyBAQAogICBIQUxfUENEX1NVU1BFTkRfQ0JfSUQgICAgICA9IDB4MDQsICAgICAgLyohPCBVU0IgUENEIFN1c3BlbmQgY2FsbGJhY2sgSUQgICAgICAqLwogICBIQUxfUENEX1JFU1VNRV9DQl9JRCAgICAgICA9IDB4MDUsICAgICAgLyohPCBVU0IgUENEIFJlc3VtZSBjYWxsYmFjayBJRCAgICAgICAqLwogICBIQUxfUENEX0NPTk5FQ1RfQ0JfSUQgICAgICA9IDB4MDYsICAgICAgLyohPCBVU0IgUENEIENvbm5lY3QgY2FsbGJhY2sgSUQgICAgICAqLwotICBIQUxfUENEX0RJU0NPTk5FQ1RfQ0JfSUQgID0gMHgwNywgICAgICAvKiE8IFVTQiBQQ0QgRGlzY29ubmVjdCBjYWxsYmFjayBJRCAgICovCisgIEhBTF9QQ0RfRElTQ09OTkVDVF9DQl9JRCAgID0gMHgwNywgICAgICAvKiE8IFVTQiBQQ0QgRGlzY29ubmVjdCBjYWxsYmFjayBJRCAgICovCiAKICAgSEFMX1BDRF9NU1BJTklUX0NCX0lEICAgICAgPSAweDA4LCAgICAgIC8qITwgVVNCIFBDRCBNc3BJbml0IGNhbGxiYWNrIElEICAgICAgKi8KICAgSEFMX1BDRF9NU1BERUlOSVRfQ0JfSUQgICAgPSAweDA5ICAgICAgIC8qITwgVVNCIFBDRCBNc3BEZUluaXQgY2FsbGJhY2sgSUQgICAgKi8KQEAgLTM4MiwxNSArMzgyLDExIEBACiAgICogQHsKICAgKi8KICNpZiBkZWZpbmVkIChVU0JfT1RHX0ZTKQotI2RlZmluZSBVU0JfT1RHX0ZTX1dBS0VVUF9FWFRJX1JJU0lOR19FREdFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDhVCi0jZGVmaW5lIFVTQl9PVEdfRlNfV0FLRVVQX0VYVElfRkFMTElOR19FREdFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQ1UKLSNkZWZpbmUgVVNCX09UR19GU19XQUtFVVBfRVhUSV9SSVNJTkdfRkFMTElOR19FREdFICAgICAgICAgICAgICAgICAgICAweDEwVQotCiAjZGVmaW5lIFVTQl9PVEdfRlNfV0FLRVVQX0VYVElfTElORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUgPDwgMTcpICAvKiE8IFVTQiBGUyBFWFRJIExpbmUgV2FrZVVwIEludGVycnVwdCAqLwogI2VuZGlmIC8qIGRlZmluZWQgKFVTQl9PVEdfRlMpICovCiAKICNpZiBkZWZpbmVkIChVU0IpCi0jZGVmaW5lICBVU0JfV0FLRVVQX0VYVElfTElORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUgPDwgMTcpICAvKiE8IFVTQiBGUyBFWFRJIExpbmUgV2FrZVVwIEludGVycnVwdCAqLworI2RlZmluZSBVU0JfV0FLRVVQX0VYVElfTElORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFVIDw8IDE3KSAgLyohPCBVU0IgRlMgRVhUSSBMaW5lIFdha2VVcCBJbnRlcnJ1cHQgKi8KICNlbmRpZiAvKiBkZWZpbmVkIChVU0IpICovCiAKIC8qKgpAQCAtNDAwLDEwICszOTYsMTAgQEAKIC8qKiBAZGVmZ3JvdXAgUENEX0VQMF9NUFMgUENEIEVQMCBNUFMKICAgKiBAewogICAqLwotI2RlZmluZSBQQ0RfRVAwTVBTXzY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFUDBDVExfTVBTXzY0Ci0jZGVmaW5lIFBDRF9FUDBNUFNfMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVQMENUTF9NUFNfMzIKLSNkZWZpbmUgUENEX0VQME1QU18xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVAwQ1RMX01QU18xNgotI2RlZmluZSBQQ0RfRVAwTVBTXzA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFUDBDVExfTVBTXzgKKyNkZWZpbmUgUENEX0VQME1QU182NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUF9NUFNfNjQKKyNkZWZpbmUgUENEX0VQME1QU18zMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUF9NUFNfMzIKKyNkZWZpbmUgUENEX0VQME1QU18xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUF9NUFNfMTYKKyNkZWZpbmUgUENEX0VQME1QU18wOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUF9NUFNfOAogLyoqCiAgICogQH0KICAgKi8KQEAgLTQ2NCw4ICs0NjAsOCBAQAogCiAvKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCBQQ0RfUHJpdmF0ZV9NYWNyb3MgUENEIFByaXZhdGUgTWFjcm9zCi0gKiBAewotICovCisgICogQHsKKyAgKi8KICNpZiBkZWZpbmVkIChVU0IpCiAvKioqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBVU0JfQ09VTlRuX1JYIHJlZ2lzdGVyICAqKioqKioqKioqKioqLwogI2RlZmluZSBVU0JfQ05UUlhfTkJMS19NU0sgICAgICAgICAgICAgICAgICAgICgweDFGVSA8PCAxMCkKQEAgLTUyNiw3ICs1MjIsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBQQ0RfU0VUX0VQX1RYX1NUQVRVUyhVU0J4LCBiRXBOdW0sIHdTdGF0ZSkgZG8geyBcCi0gICByZWdpc3RlciB1aW50MTZfdCBfd1JlZ1ZhbDsgXAorICAgdWludDE2X3QgX3dSZWdWYWw7IFwKICAgIFwKICAgICBfd1JlZ1ZhbCA9IFBDRF9HRVRfRU5EUE9JTlQoKFVTQngpLCAoYkVwTnVtKSkgJiBVU0JfRVBUWF9EVE9HTUFTSzsgXAogICAgLyogdG9nZ2xlIGZpcnN0IGJpdCA/ICovIFwKQEAgLTU1MCw3ICs1NDYsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBQQ0RfU0VUX0VQX1JYX1NUQVRVUyhVU0J4LCBiRXBOdW0sd1N0YXRlKSBkbyB7IFwKLSAgICByZWdpc3RlciB1aW50MTZfdCBfd1JlZ1ZhbDsgXAorICAgIHVpbnQxNl90IF93UmVnVmFsOyBcCiAgICAgXAogICAgIF93UmVnVmFsID0gUENEX0dFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pKSAmIFVTQl9FUFJYX0RUT0dNQVNLOyBcCiAgICAgLyogdG9nZ2xlIGZpcnN0IGJpdCA/ICovIFwKQEAgLTU3NSw3ICs1NzEsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBQQ0RfU0VUX0VQX1RYUlhfU1RBVFVTKFVTQngsIGJFcE51bSwgd1N0YXRlcngsIHdTdGF0ZXR4KSBkbyB7IFwKLSAgICByZWdpc3RlciB1aW50MTZfdCBfd1JlZ1ZhbDsgXAorICAgIHVpbnQxNl90IF93UmVnVmFsOyBcCiAgICAgXAogICAgIF93UmVnVmFsID0gUENEX0dFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pKSAmIChVU0JfRVBSWF9EVE9HTUFTSyB8IFVTQl9FUFRYX1NUQVQpOyBcCiAgICAgLyogdG9nZ2xlIGZpcnN0IGJpdCA/ICovIFwKQEAgLTYyNywxMCArNjIzLDggQEAKICAgKiBAcGFyYW0gIGJFcE51bSBFbmRwb2ludCBOdW1iZXIuCiAgICogQHJldHZhbCBUUlVFID0gZW5kcG9pbnQgaW4gc3RhbGwgY29uZGl0aW9uLgogICAqLwotI2RlZmluZSBQQ0RfR0VUX0VQX1RYX1NUQUxMX1NUQVRVUyhVU0J4LCBiRXBOdW0pIChQQ0RfR0VUX0VQX1RYX1NUQVRVUygoVVNCeCksIChiRXBOdW0pKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IFVTQl9FUF9UWF9TVEFMTCkKLSNkZWZpbmUgUENEX0dFVF9FUF9SWF9TVEFMTF9TVEFUVVMoVVNCeCwgYkVwTnVtKSAoUENEX0dFVF9FUF9SWF9TVEFUVVMoKFVTQngpLCAoYkVwTnVtKSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBVU0JfRVBfUlhfU1RBTEwpCisjZGVmaW5lIFBDRF9HRVRfRVBfVFhfU1RBTExfU1RBVFVTKFVTQngsIGJFcE51bSkgKFBDRF9HRVRfRVBfVFhfU1RBVFVTKChVU0J4KSwgKGJFcE51bSkpID09IFVTQl9FUF9UWF9TVEFMTCkKKyNkZWZpbmUgUENEX0dFVF9FUF9SWF9TVEFMTF9TVEFUVVMoVVNCeCwgYkVwTnVtKSAoUENEX0dFVF9FUF9SWF9TVEFUVVMoKFVTQngpLCAoYkVwTnVtKSkgPT0gVVNCX0VQX1JYX1NUQUxMKQogCiAvKioKICAgKiBAYnJpZWYgIHNldCAmIGNsZWFyIEVQX0tJTkQgYml0LgpAQCAtNjM5LDcgKzYzMyw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIFBDRF9TRVRfRVBfS0lORChVU0J4LCBiRXBOdW0pIGRvIHsgXAotICAgIHJlZ2lzdGVyIHVpbnQxNl90IF93UmVnVmFsOyBcCisgICAgdWludDE2X3QgX3dSZWdWYWw7IFwKICAgICBcCiAgICAgX3dSZWdWYWwgPSBQQ0RfR0VUX0VORFBPSU5UKChVU0J4KSwgKGJFcE51bSkpICYgVVNCX0VQUkVHX01BU0s7IFwKICAgICBcCkBAIC02NDcsNyArNjQxLDcgQEAKICAgfSB3aGlsZSgwKSAvKiBQQ0RfU0VUX0VQX0tJTkQgKi8KIAogI2RlZmluZSBQQ0RfQ0xFQVJfRVBfS0lORChVU0J4LCBiRXBOdW0pIGRvIHsgXAotICAgIHJlZ2lzdGVyIHVpbnQxNl90IF93UmVnVmFsOyBcCisgICAgdWludDE2X3QgX3dSZWdWYWw7IFwKICAgICBcCiAgICAgX3dSZWdWYWwgPSBQQ0RfR0VUX0VORFBPSU5UKChVU0J4KSwgKGJFcE51bSkpICYgVVNCX0VQS0lORF9NQVNLOyBcCiAgICAgXApAQCAtNjc5LDcgKzY3Myw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIFBDRF9DTEVBUl9SWF9FUF9DVFIoVVNCeCwgYkVwTnVtKSBkbyB7IFwKLSAgICByZWdpc3RlciB1aW50MTZfdCBfd1JlZ1ZhbDsgXAorICAgIHVpbnQxNl90IF93UmVnVmFsOyBcCiAgICAgXAogICAgIF93UmVnVmFsID0gUENEX0dFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pKSAmICgweDdGRkZVICYgVVNCX0VQUkVHX01BU0spOyBcCiAgICAgXApAQCAtNjg3LDcgKzY4MSw3IEBACiAgIH0gd2hpbGUoMCkgLyogUENEX0NMRUFSX1JYX0VQX0NUUiAqLwogCiAjZGVmaW5lIFBDRF9DTEVBUl9UWF9FUF9DVFIoVVNCeCwgYkVwTnVtKSBkbyB7IFwKLSAgICByZWdpc3RlciB1aW50MTZfdCBfd1JlZ1ZhbDsgXAorICAgIHVpbnQxNl90IF93UmVnVmFsOyBcCiAgICAgXAogICAgIF93UmVnVmFsID0gUENEX0dFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pKSAmICgweEZGN0ZVICYgVVNCX0VQUkVHX01BU0spOyBcCiAgICAgXApAQCAtNzAxLDcgKzY5NSw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIFBDRF9SWF9EVE9HKFVTQngsIGJFcE51bSkgZG8geyBcCi0gICAgcmVnaXN0ZXIgdWludDE2X3QgX3dFUFZhbDsgXAorICAgIHVpbnQxNl90IF93RVBWYWw7IFwKICAgICBcCiAgICAgX3dFUFZhbCA9IFBDRF9HRVRfRU5EUE9JTlQoKFVTQngpLCAoYkVwTnVtKSkgJiBVU0JfRVBSRUdfTUFTSzsgXAogICAgIFwKQEAgLTcwOSw3ICs3MDMsNyBAQAogICB9IHdoaWxlKDApIC8qIFBDRF9SWF9EVE9HICovCiAKICNkZWZpbmUgUENEX1RYX0RUT0coVVNCeCwgYkVwTnVtKSBkbyB7IFwKLSAgICByZWdpc3RlciB1aW50MTZfdCBfd0VQVmFsOyBcCisgICAgdWludDE2X3QgX3dFUFZhbDsgXAogICAgIFwKICAgICBfd0VQVmFsID0gUENEX0dFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pKSAmIFVTQl9FUFJFR19NQVNLOyBcCiAgICAgXApAQCAtNzIyLDcgKzcxNiw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIFBDRF9DTEVBUl9SWF9EVE9HKFVTQngsIGJFcE51bSkgZG8geyBcCi0gICAgcmVnaXN0ZXIgdWludDE2X3QgX3dSZWdWYWw7IFwKKyAgICB1aW50MTZfdCBfd1JlZ1ZhbDsgXAogICAgIFwKICAgICBfd1JlZ1ZhbCA9IFBDRF9HRVRfRU5EUE9JTlQoKFVTQngpLCAoYkVwTnVtKSk7IFwKICAgICBcCkBAIC03MzMsNyArNzI3LDcgQEAKICAgfSB3aGlsZSgwKSAvKiBQQ0RfQ0xFQVJfUlhfRFRPRyAqLwogCiAjZGVmaW5lIFBDRF9DTEVBUl9UWF9EVE9HKFVTQngsIGJFcE51bSkgZG8geyBcCi0gICAgcmVnaXN0ZXIgdWludDE2X3QgX3dSZWdWYWw7IFwKKyAgICB1aW50MTZfdCBfd1JlZ1ZhbDsgXAogICAgIFwKICAgICBfd1JlZ1ZhbCA9IFBDRF9HRVRfRU5EUE9JTlQoKFVTQngpLCAoYkVwTnVtKSk7IFwKICAgICBcCkBAIC03NTEsNyArNzQ1LDcgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgUENEX1NFVF9FUF9BRERSRVNTKFVTQngsIGJFcE51bSwgYkFkZHIpIGRvIHsgXAotICAgIHJlZ2lzdGVyIHVpbnQxNl90IF93UmVnVmFsOyBcCisgICAgdWludDE2X3QgX3dSZWdWYWw7IFwKICAgICBcCiAgICAgX3dSZWdWYWwgPSAoUENEX0dFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pKSAmIFVTQl9FUFJFR19NQVNLKSB8IChiQWRkcik7IFwKICAgICBcCkBAIC03NzcsOCArNzcxLDggQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgUENEX1NFVF9FUF9UWF9BRERSRVNTKFVTQngsIGJFcE51bSwgd0FkZHIpIGRvIHsgXAotICByZWdpc3RlciBfX0lPIHVpbnQxNl90ICpfd1JlZ1ZhbDsgXAotICByZWdpc3RlciB1aW50MzJfdCBfd1JlZ0Jhc2UgPSAodWludDMyX3QpVVNCeDsgXAorICBfX0lPIHVpbnQxNl90ICpfd1JlZ1ZhbDsgXAorICB1aW50MzJfdCBfd1JlZ0Jhc2UgPSAodWludDMyX3QpVVNCeDsgXAogICBcCiAgIF93UmVnQmFzZSArPSAodWludDMyX3QpKFVTQngpLT5CVEFCTEU7IFwKICAgX3dSZWdWYWwgPSAoX19JTyB1aW50MTZfdCAqKShfd1JlZ0Jhc2UgKyAweDQwMFUgKyAoKCh1aW50MzJfdCkoYkVwTnVtKSAqIDhVKSAqIFBNQV9BQ0NFU1MpKTsgXApAQCAtNzg2LDggKzc4MCw4IEBACiB9IHdoaWxlKDApIC8qIFBDRF9TRVRfRVBfVFhfQUREUkVTUyAqLwogCiAjZGVmaW5lIFBDRF9TRVRfRVBfUlhfQUREUkVTUyhVU0J4LCBiRXBOdW0sIHdBZGRyKSBkbyB7IFwKLSAgcmVnaXN0ZXIgX19JTyB1aW50MTZfdCAqX3dSZWdWYWw7IFwKLSAgcmVnaXN0ZXIgdWludDMyX3QgX3dSZWdCYXNlID0gKHVpbnQzMl90KVVTQng7IFwKKyAgX19JTyB1aW50MTZfdCAqX3dSZWdWYWw7IFwKKyAgdWludDMyX3QgX3dSZWdCYXNlID0gKHVpbnQzMl90KVVTQng7IFwKICAgXAogICBfd1JlZ0Jhc2UgKz0gKHVpbnQzMl90KShVU0J4KS0+QlRBQkxFOyBcCiAgIF93UmVnVmFsID0gKF9fSU8gdWludDE2X3QgKikoX3dSZWdCYXNlICsgMHg0MDBVICsgKCgoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICsgNFUpICogUE1BX0FDQ0VTUykpOyBcCkBAIC04NDYsOCArODQwLDggQEAKICAgfSB3aGlsZSgwKSAvKiBQQ0RfU0VUX0VQX0NOVF9SWF9SRUcgKi8KIAogI2RlZmluZSBQQ0RfU0VUX0VQX1JYX0RCVUYwX0NOVChVU0J4LCBiRXBOdW0sIHdDb3VudCkgZG8geyBcCi0gICAgIHJlZ2lzdGVyIHVpbnQzMl90IF93UmVnQmFzZSA9ICh1aW50MzJfdCkoVVNCeCk7IFwKLSAgICAgcmVnaXN0ZXIgX19JTyB1aW50MTZfdCAqcGR3UmVnOyBcCisgICAgIHVpbnQzMl90IF93UmVnQmFzZSA9ICh1aW50MzJfdCkoVVNCeCk7IFwKKyAgICAgX19JTyB1aW50MTZfdCAqcGR3UmVnOyBcCiAgICAgIFwKICAgICBfd1JlZ0Jhc2UgKz0gKHVpbnQzMl90KShVU0J4KS0+QlRBQkxFOyBcCiAgICAgcGR3UmVnID0gKF9fSU8gdWludDE2X3QgKikoX3dSZWdCYXNlICsgMHg0MDBVICsgKCgoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICsgMlUpICogUE1BX0FDQ0VTUykpOyBcCkBAIC04NjIsOCArODU2LDggQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgUENEX1NFVF9FUF9UWF9DTlQoVVNCeCwgYkVwTnVtLCB3Q291bnQpIGRvIHsgXAotICAgIHJlZ2lzdGVyIHVpbnQzMl90IF93UmVnQmFzZSA9ICh1aW50MzJfdCkoVVNCeCk7IFwKLSAgICByZWdpc3RlciBfX0lPIHVpbnQxNl90ICpfd1JlZ1ZhbDsgXAorICAgIHVpbnQzMl90IF93UmVnQmFzZSA9ICh1aW50MzJfdCkoVVNCeCk7IFwKKyAgICBfX0lPIHVpbnQxNl90ICpfd1JlZ1ZhbDsgXAogICAgIFwKICAgICBfd1JlZ0Jhc2UgKz0gKHVpbnQzMl90KShVU0J4KS0+QlRBQkxFOyBcCiAgICAgX3dSZWdWYWwgPSAoX19JTyB1aW50MTZfdCAqKShfd1JlZ0Jhc2UgKyAweDQwMFUgKyAoKCgodWludDMyX3QpKGJFcE51bSkgKiA4VSkgKyAyVSkgKiBQTUFfQUNDRVNTKSk7IFwKQEAgLTg3MSw4ICs4NjUsOCBAQAogfSB3aGlsZSgwKQogCiAjZGVmaW5lIFBDRF9TRVRfRVBfUlhfQ05UKFVTQngsIGJFcE51bSwgd0NvdW50KSBkbyB7IFwKLSAgICByZWdpc3RlciB1aW50MzJfdCBfd1JlZ0Jhc2UgPSAodWludDMyX3QpKFVTQngpOyBcCi0gICAgcmVnaXN0ZXIgX19JTyB1aW50MTZfdCAqX3dSZWdWYWw7IFwKKyAgICB1aW50MzJfdCBfd1JlZ0Jhc2UgPSAodWludDMyX3QpKFVTQngpOyBcCisgICAgX19JTyB1aW50MTZfdCAqX3dSZWdWYWw7IFwKICAgICBcCiAgICAgX3dSZWdCYXNlICs9ICh1aW50MzJfdCkoVVNCeCktPkJUQUJMRTsgXAogICAgIF93UmVnVmFsID0gKF9fSU8gdWludDE2X3QgKikoX3dSZWdCYXNlICsgMHg0MDBVICsgKCgoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICsgNlUpICogUE1BX0FDQ0VTUykpOyBcCkBAIC05NTAsNyArOTQ0LDcgQEAKICAgfSB3aGlsZSgwKSAvKiBTZXRFUERibEJ1ZjBDb3VudCovCiAKICNkZWZpbmUgUENEX1NFVF9FUF9EQlVGMV9DTlQoVVNCeCwgYkVwTnVtLCBiRGlyLCB3Q291bnQpIGRvIHsgXAotICAgIHJlZ2lzdGVyIHVpbnQzMl90IF93QmFzZSA9ICh1aW50MzJfdCkoVVNCeCk7IFwKKyAgICB1aW50MzJfdCBfd0Jhc2UgPSAodWludDMyX3QpKFVTQngpOyBcCiAgICAgX19JTyB1aW50MTZfdCAqX3dFUFJlZ1ZhbDsgXAogICAgIFwKICAgICBpZiAoKGJEaXIpID09IDBVKSBcCkBAIC05NzMsNyArOTY3LDcgQEAKICNkZWZpbmUgUENEX1NFVF9FUF9EQlVGX0NOVChVU0J4LCBiRXBOdW0sIGJEaXIsIHdDb3VudCkgZG8geyBcCiAgICAgUENEX1NFVF9FUF9EQlVGMF9DTlQoKFVTQngpLCAoYkVwTnVtKSwgKGJEaXIpLCAod0NvdW50KSk7IFwKICAgICBQQ0RfU0VUX0VQX0RCVUYxX0NOVCgoVVNCeCksIChiRXBOdW0pLCAoYkRpciksICh3Q291bnQpKTsgXAotICB9IHdoaWxlKDApIC8qIFBDRF9TRVRfRVBfREJVRl9DTlQgICovCisgIH0gd2hpbGUoMCkgLyogUENEX1NFVF9FUF9EQlVGX0NOVCAqLwogCiAvKioKICAgKiBAYnJpZWYgIEdldHMgYnVmZmVyIDAvMSByeC90eCBjb3VudGVyIGZvciBkb3VibGUgYnVmZmVyaW5nLgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9oYWxfcmNjLmggYi9JbmMvc3RtMzJsNHh4X2hhbF9yY2MuaAppbmRleCA0NWU4MmQ1Li41ZjE4ZmYxIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2hhbF9yY2MuaAorKysgYi9JbmMvc3RtMzJsNHh4X2hhbF9yY2MuaApAQCAtOTIsOCArOTIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJDQ19IU0lfQ29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogICB1aW50MzJfdCBIU0lDYWxpYnJhdGlvblZhbHVlOyAgLyohPCBUaGUgY2FsaWJyYXRpb24gdHJpbW1pbmcgdmFsdWUgKGRlZmF1bHQgaXMgUkNDX0hTSUNBTElCUkFUSU9OX0RFRkFVTFQpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MUYgb24gU1RNMzJMNDN4L1NUTTMyTDQ0eC9TVE0zMkw0N3gvU1RNMzJMNDh4IGRldmljZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHg3RiBvbiB0aGUgb3RoZXIgZGV2aWNlcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDMxIG9uIFNUTTMyTDQ3eC9TVE0zMkw0OHggZGV2aWNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSAxMjcgb24gdGhlIG90aGVyIGRldmljZXMgKi8KIAogICB1aW50MzJfdCBMU0lTdGF0ZTsgICAgICAgICAgICAgLyohPCBUaGUgbmV3IHN0YXRlIG9mIHRoZSBMU0kuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgUkNDX0xTSV9Db25maWcgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjA1LDEzICsyMDUsMTEgQEAKICNkZWZpbmUgUkNDX0hTSV9PRkYgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAgLyohPCBIU0kgY2xvY2sgZGVhY3RpdmF0aW9uICovCiAjZGVmaW5lIFJDQ19IU0lfT04gICAgICAgICAgICAgICAgICAgICBSQ0NfQ1JfSFNJT04gIC8qITwgSFNJIGNsb2NrIGFjdGl2YXRpb24gKi8KIAotI2lmIGRlZmluZWQoU1RNMzJMNDMxeHgpIHx8IGRlZmluZWQoU1RNMzJMNDMyeHgpIHx8IGRlZmluZWQoU1RNMzJMNDMzeHgpIHx8IGRlZmluZWQoU1RNMzJMNDQyeHgpIHx8IGRlZmluZWQoU1RNMzJMNDQzeHgpIHx8IFwKLSAgICBkZWZpbmVkKFNUTTMyTDQ3MXh4KSB8fCBkZWZpbmVkKFNUTTMyTDQ3NXh4KSB8fCBkZWZpbmVkKFNUTTMyTDQ3Nnh4KSB8fCBkZWZpbmVkKFNUTTMyTDQ4NXh4KSB8fCBkZWZpbmVkKFNUTTMyTDQ4Nnh4KQotI2RlZmluZSBSQ0NfSFNJQ0FMSUJSQVRJT05fREVGQVVMVCAgICAgMHgxMFUgICAgICAgICAvKiBEZWZhdWx0IEhTSSBjYWxpYnJhdGlvbiB0cmltbWluZyB2YWx1ZSAqLworI2lmIGRlZmluZWQoUkNDX0lDU0NSX0hTSVRSSU1fNikKKyNkZWZpbmUgUkNDX0hTSUNBTElCUkFUSU9OX0RFRkFVTFQgICAgIDB4NDBVICAgICAgICAgLyohPCBEZWZhdWx0IEhTSSBjYWxpYnJhdGlvbiB0cmltbWluZyB2YWx1ZSA2NCBvbiBkZXZpY2VzIG90aGVyIHRoYW4gU1RNMzJMNDd4L1NUTTMyTDQ4eCAqLwogI2Vsc2UKLSNkZWZpbmUgUkNDX0hTSUNBTElCUkFUSU9OX0RFRkFVTFQgICAgIDB4NDBVICAgICAgICAgLyogRGVmYXVsdCBIU0kgY2FsaWJyYXRpb24gdHJpbW1pbmcgdmFsdWUgKi8KLSNlbmRpZiAvKiBTVE0zMkw0MzF4eCB8fCBTVE0zMkw0MzJ4eCB8fCBTVE0zMkw0MzN4eCB8fCBTVE0zMkw0NDJ4eCB8fCBTVE0zMkw0NDN4eCB8fCAqLwotICAgICAgIC8qIFNUTTMyTDQ3MXh4IHx8IFNUTTMyTDQ3NXh4IHx8IFNUTTMyTDQ3Nnh4IHx8IFNUTTMyTDQ4NXh4IHx8IFNUTTMyTDQ4Nnh4ICAgICovCisjZGVmaW5lIFJDQ19IU0lDQUxJQlJBVElPTl9ERUZBVUxUICAgICAweDEwVSAgICAgICAgIC8qITwgRGVmYXVsdCBIU0kgY2FsaWJyYXRpb24gdHJpbW1pbmcgdmFsdWUgMTYgb24gU1RNMzJMNDd4L1NUTTMyTDQ4eCBkZXZpY2VzICovCisjZW5kaWYgLyogUkNDX0lDU0NSX0hTSVRSSU1fNiAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTIxOTUsNyArMjE5Myw3IEBACiAgICogQGJyaWVmICBGb3JjZSBvciByZWxlYXNlIEFIQjEgcGVyaXBoZXJhbCByZXNldC4KICAgKiBAewogICAqLwotI2RlZmluZSBfX0hBTF9SQ0NfQUhCMV9GT1JDRV9SRVNFVCgpICAgICAgICAgICBXUklURV9SRUcoUkNDLT5BSEIxUlNUUiwgMHhGRkZGRkZGRlUpCisjZGVmaW5lIF9fSEFMX1JDQ19BSEIxX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgIFdSSVRFX1JFRyhSQ0MtPkFIQjFSU1RSLCAweEZGRkZGRkZGVUwpCiAKICNkZWZpbmUgX19IQUxfUkNDX0RNQTFfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjFSU1RSLCBSQ0NfQUhCMVJTVFJfRE1BMVJTVCkKIApAQCAtMjIyMCw3ICsyMjE4LDcgQEAKICNlbmRpZiAvKiBHRlhNTVUgKi8KIAogCi0jZGVmaW5lIF9fSEFMX1JDQ19BSEIxX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgIFdSSVRFX1JFRyhSQ0MtPkFIQjFSU1RSLCAweDAwMDAwMDAwVSkKKyNkZWZpbmUgX19IQUxfUkNDX0FIQjFfUkVMRUFTRV9SRVNFVCgpICAgICAgICAgV1JJVEVfUkVHKFJDQy0+QUhCMVJTVFIsIDB4MDAwMDAwMDBVTCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfRE1BMV9SRUxFQVNFX1JFU0VUKCkgICAgICAgICBDTEVBUl9CSVQoUkNDLT5BSEIxUlNUUiwgUkNDX0FIQjFSU1RSX0RNQTFSU1QpCiAKQEAgLTIyNTIsNyArMjI1MCw3IEBACiAgICogQGJyaWVmICBGb3JjZSBvciByZWxlYXNlIEFIQjIgcGVyaXBoZXJhbCByZXNldC4KICAgKiBAewogICAqLwotI2RlZmluZSBfX0hBTF9SQ0NfQUhCMl9GT1JDRV9SRVNFVCgpICAgICAgICAgICBXUklURV9SRUcoUkNDLT5BSEIyUlNUUiwgMHhGRkZGRkZGRlUpCisjZGVmaW5lIF9fSEFMX1JDQ19BSEIyX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgIFdSSVRFX1JFRyhSQ0MtPkFIQjJSU1RSLCAweEZGRkZGRkZGVUwpCiAKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9BX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjJSU1RSLCBSQ0NfQUhCMlJTVFJfR1BJT0FSU1QpCiAKQEAgLTIzMTksNyArMjMxNyw3IEBACiAjZW5kaWYgLyogU0RNTUMyICovCiAKIAotI2RlZmluZSBfX0hBTF9SQ0NfQUhCMl9SRUxFQVNFX1JFU0VUKCkgICAgICAgICBXUklURV9SRUcoUkNDLT5BSEIyUlNUUiwgMHgwMDAwMDAwMFUpCisjZGVmaW5lIF9fSEFMX1JDQ19BSEIyX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgIFdSSVRFX1JFRyhSQ0MtPkFIQjJSU1RSLCAweDAwMDAwMDAwVUwpCiAKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9BX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgQ0xFQVJfQklUKFJDQy0+QUhCMlJTVFIsIFJDQ19BSEIyUlNUUl9HUElPQVJTVCkKIApAQCAtMjM5Myw3ICsyMzkxLDcgQEAKICAgKiBAYnJpZWYgIEZvcmNlIG9yIHJlbGVhc2UgQUhCMyBwZXJpcGhlcmFsIHJlc2V0LgogICAqIEB7CiAgICovCi0jZGVmaW5lIF9fSEFMX1JDQ19BSEIzX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgIFdSSVRFX1JFRyhSQ0MtPkFIQjNSU1RSLCAweEZGRkZGRkZGVSkKKyNkZWZpbmUgX19IQUxfUkNDX0FIQjNfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgV1JJVEVfUkVHKFJDQy0+QUhCM1JTVFIsIDB4RkZGRkZGRkZVTCkKIAogI2lmIGRlZmluZWQoRk1DX0JBTksxKQogI2RlZmluZSBfX0hBTF9SQ0NfRk1DX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCM1JTVFIsIFJDQ19BSEIzUlNUUl9GTUNSU1QpCkBAIC0yNDExLDcgKzI0MDksNyBAQAogI2RlZmluZSBfX0hBTF9SQ0NfT1NQSTJfRk9SQ0VfUkVTRVQoKSAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCM1JTVFIsIFJDQ19BSEIzUlNUUl9PU1BJMlJTVCkKICNlbmRpZiAvKiBPQ1RPU1BJMiAqLwogCi0jZGVmaW5lIF9fSEFMX1JDQ19BSEIzX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgIFdSSVRFX1JFRyhSQ0MtPkFIQjNSU1RSLCAweDAwMDAwMDAwVSkKKyNkZWZpbmUgX19IQUxfUkNDX0FIQjNfUkVMRUFTRV9SRVNFVCgpICAgICAgICAgV1JJVEVfUkVHKFJDQy0+QUhCM1JTVFIsIDB4MDAwMDAwMDBVTCkKIAogI2lmIGRlZmluZWQoRk1DX0JBTksxKQogI2RlZmluZSBfX0hBTF9SQ0NfRk1DX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgICBDTEVBUl9CSVQoUkNDLT5BSEIzUlNUUiwgUkNDX0FIQjNSU1RSX0ZNQ1JTVCkKQEAgLTI0MzcsNyArMjQzNSwxMCBAQAogICAqIEBicmllZiAgRm9yY2Ugb3IgcmVsZWFzZSBBUEIxIHBlcmlwaGVyYWwgcmVzZXQuCiAgICogQHsKICAgKi8KLSNkZWZpbmUgX19IQUxfUkNDX0FQQjFfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgV1JJVEVfUkVHKFJDQy0+QVBCMVJTVFIxLCAweEZGRkZGRkZGVSkKKyNkZWZpbmUgX19IQUxfUkNDX0FQQjFfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgZG8geyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEVfUkVHKFJDQy0+QVBCMVJTVFIxLCAweEZGRkZGRkZGVUwpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEVfUkVHKFJDQy0+QVBCMVJTVFIyLCAweEZGRkZGRkZGVUwpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfVElNMl9GT1JDRV9SRVNFVCgpICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMVJTVFIxLCBSQ0NfQVBCMVJTVFIxX1RJTTJSU1QpCiAKQEAgLTI1MzIsNyArMjUzMywxMCBAQAogI2RlZmluZSBfX0hBTF9SQ0NfTFBUSU0yX0ZPUkNFX1JFU0VUKCkgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMVJTVFIyLCBSQ0NfQVBCMVJTVFIyX0xQVElNMlJTVCkKIAogCi0jZGVmaW5lIF9fSEFMX1JDQ19BUEIxX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgIFdSSVRFX1JFRyhSQ0MtPkFQQjFSU1RSMSwgMHgwMDAwMDAwMFUpCisjZGVmaW5lIF9fSEFMX1JDQ19BUEIxX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSSVRFX1JFRyhSQ0MtPkFQQjFSU1RSMSwgMHgwMDAwMDAwMFVMKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSSVRFX1JFRyhSQ0MtPkFQQjFSU1RSMiwgMHgwMDAwMDAwMFVMKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgX19IQUxfUkNDX1RJTTJfUkVMRUFTRV9SRVNFVCgpICAgICAgICAgQ0xFQVJfQklUKFJDQy0+QVBCMVJTVFIxLCBSQ0NfQVBCMVJTVFIxX1RJTTJSU1QpCiAKQEAgLTI2MzQsNyArMjYzOCw3IEBACiAgICogQGJyaWVmICBGb3JjZSBvciByZWxlYXNlIEFQQjIgcGVyaXBoZXJhbCByZXNldC4KICAgKiBAewogICAqLwotI2RlZmluZSBfX0hBTF9SQ0NfQVBCMl9GT1JDRV9SRVNFVCgpICAgICAgICAgICBXUklURV9SRUcoUkNDLT5BUEIyUlNUUiwgMHhGRkZGRkZGRlUpCisjZGVmaW5lIF9fSEFMX1JDQ19BUEIyX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgIFdSSVRFX1JFRyhSQ0MtPkFQQjJSU1RSLCAweEZGRkZGRkZGVUwpCiAKICNkZWZpbmUgX19IQUxfUkNDX1NZU0NGR19GT1JDRV9SRVNFVCgpICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjJSU1RSLCBSQ0NfQVBCMlJTVFJfU1lTQ0ZHUlNUKQogCkBAIC0yNjgxLDcgKzI2ODUsNyBAQAogI2VuZGlmIC8qIERTSSAqLwogCiAKLSNkZWZpbmUgX19IQUxfUkNDX0FQQjJfUkVMRUFTRV9SRVNFVCgpICAgICAgICAgV1JJVEVfUkVHKFJDQy0+QVBCMlJTVFIsIDB4MDAwMDAwMDBVKQorI2RlZmluZSBfX0hBTF9SQ0NfQVBCMl9SRUxFQVNFX1JFU0VUKCkgICAgICAgICBXUklURV9SRUcoUkNDLT5BUEIyUlNUUiwgMHgwMDAwMDAwMFVMKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19TWVNDRkdfUkVMRUFTRV9SRVNFVCgpICAgICAgIENMRUFSX0JJVChSQ0MtPkFQQjJSU1RSLCBSQ0NfQVBCMlJTVFJfU1lTQ0ZHUlNUKQogCkBAIC0zOTQxLDcgKzM5NDUsOCBAQAogICAqICAgICAgICAgYW5kIHRlbXBlcmF0dXJlIHRoYXQgaW5mbHVlbmNlIHRoZSBmcmVxdWVuY3kgb2YgdGhlIGludGVybmFsIEhTSSBSQy4KICAgKiBAcGFyYW0gIF9fSFNJQ0FMSUJSQVRJT05WQUxVRV9fIHNwZWNpZmllcyB0aGUgY2FsaWJyYXRpb24gdHJpbW1pbmcgdmFsdWUKICAgKiAgICAgICAgIChkZWZhdWx0IGlzIFJDQ19IU0lDQUxJQlJBVElPTl9ERUZBVUxUKS4KLSAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAweDFGIChTVE0zMkw0M3gvU1RNMzJMNDR4L1NUTTMyTDQ3eC9TVE0zMkw0OHgpIG9yIDB4N0YgKGZvciBvdGhlciBkZXZpY2VzKS4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAzMSBvbiBTVE0zMkw0N3gvU1RNMzJMNDh4IG9yCisgICogICAgICAgICBiZXR3ZWVuIDAgYW5kIDEyNyBvbiBvdGhlciBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfSFNJX0NBTElCUkFUSU9OVkFMVUVfQURKVVNUKF9fSFNJQ0FMSUJSQVRJT05WQUxVRV9fKSBcCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2hhbF9yY2NfZXguaCBiL0luYy9zdG0zMmw0eHhfaGFsX3JjY19leC5oCmluZGV4IDZlNGM0YTcuLjFiZWY4NWQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfaGFsX3JjY19leC5oCisrKyBiL0luYy9zdG0zMmw0eHhfaGFsX3JjY19leC5oCkBAIC04OTAsNyArODkwLDcgQEAKICAgKgogICBAZW5kaWYKICAgKiBAcGFyYW0gIF9fUExMU0FJMU5fXyBzcGVjaWZpZXMgdGhlIG11bHRpcGxpY2F0aW9uIGZhY3RvciBmb3IgUExMU0FJMSBWQ08gb3V0cHV0IGNsb2NrLgotICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDggYW5kIDg2LgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDggYW5kIDg2IG9yIDEyNyBkZXBlbmRpbmcgb24gZGV2aWNlcy4KICAgKiBAbm90ZSAgIFlvdSBoYXZlIHRvIHNldCB0aGUgUExMU0FJMU4gcGFyYW1ldGVyIGNvcnJlY3RseSB0byBlbnN1cmUgdGhhdCB0aGUgVkNPCiAgICogICAgICAgICBvdXRwdXQgZnJlcXVlbmN5IGlzIGJldHdlZW4gNjQgYW5kIDM0NCBNSHouCiAgICogICAgICAgICBQTExTQUkxIGNsb2NrIGZyZXF1ZW5jeSA9IGYoUExMU0FJMSkgbXVsdGlwbGllZCBieSBQTExTQUkxTgpAQCAtOTc0LDcgKzk3NCw3IEBACiAgICogICAgICAgICBfX0hBTF9SQ0NfUExMX0NPTkZJRygpIG1hY3JvKQogICAqCiAgICogQHBhcmFtICBfX1BMTFNBSTFOX18gc3BlY2lmaWVzIHRoZSBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgZm9yIFBMTFNBSTEgVkNPIG91dHB1dCBjbG9jay4KLSAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gOCBhbmQgODYuCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDggYW5kIDg2IG9yIDEyNyBkZXBlbmRpbmcgb24gZGV2aWNlcy4KICAgKiBAbm90ZSAgIFlvdSBoYXZlIHRvIHNldCB0aGUgUExMU0FJMU4gcGFyYW1ldGVyIGNvcnJlY3RseSB0byBlbnN1cmUgdGhhdCB0aGUgVkNPCiAgICogICAgICAgICBvdXRwdXQgZnJlcXVlbmN5IGlzIGJldHdlZW4gNjQgYW5kIDM0NCBNSHouCiAgICogICAgICAgICBVc2UgdG8gc2V0IFBMTFNBSTEgY2xvY2sgZnJlcXVlbmN5ID0gZihQTExTQUkxKSBtdWx0aXBsaWVkIGJ5IFBMTFNBSTFOCkBAIC0xOTk4LDcgKzE5OTgsNyBAQAogI2lmIGRlZmluZWQoTFREQykKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gY29uZmlndXJlIHRoZSBMVERDIGNsb2NrLgotICAqIEBwYXJhbSAgX19MVERDX0NMS1NPVVJDRV9fIHNwZWNpZmllcyB0aGUgRFNJIGNsb2NrIHNvdXJjZS4KKyAgKiBAcGFyYW0gIF9fTFREQ19DTEtTT1VSQ0VfXyBzcGVjaWZpZXMgdGhlIExUREMgY2xvY2sgc291cmNlLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfTFREQ0NMS1NPVVJDRV9QTExTQUkyX0RJVjIgICBQTExTQUkyIGRpdmlkZXIgUiBkaXZpZGVkIGJ5IDIgY2xvY2sgc2VsZWN0ZWQgYXMgTFREQyBjbG9jawogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19MVERDQ0xLU09VUkNFX1BMTFNBSTJfRElWNCAgIFBMTFNBSTIgZGl2aWRlciBSIGRpdmlkZWQgYnkgNCBjbG9jayBzZWxlY3RlZCBhcyBMVERDIGNsb2NrCkBAIC0zMDk3LDcgKzMwOTcsMTEgQEAKICNkZWZpbmUgSVNfUkNDX1BMTFNBSTFNX1ZBTFVFKF9fVkFMVUVfXykgICAoKDFVIDw9IChfX1ZBTFVFX18pKSAmJiAoKF9fVkFMVUVfXykgPD0gOFUpKQogI2VuZGlmIC8qIFJDQ19QTExTQUkxTV9ESVZfMV8xNl9TVVBQT1JUICovCiAKKyNpZiBkZWZpbmVkKFJDQ19QTExTQUkxTl9NVUxfOF8xMjdfU1VQUE9SVCkKKyNkZWZpbmUgSVNfUkNDX1BMTFNBSTFOX1ZBTFVFKF9fVkFMVUVfXykgICAoKDhVIDw9IChfX1ZBTFVFX18pKSAmJiAoKF9fVkFMVUVfXykgPD0gMTI3VSkpCisjZWxzZQogI2RlZmluZSBJU19SQ0NfUExMU0FJMU5fVkFMVUUoX19WQUxVRV9fKSAgICgoOFUgPD0gKF9fVkFMVUVfXykpICYmICgoX19WQUxVRV9fKSA8PSA4NlUpKQorI2VuZGlmIC8qIFJDQ19QTExTQUkxTl9NVUxfOF8xMjdfU1VQUE9SVCAqLwogCiAjaWYgZGVmaW5lZChSQ0NfUExMU0FJMVBfRElWXzJfMzFfU1VQUE9SVCkKICNkZWZpbmUgSVNfUkNDX1BMTFNBSTFQX1ZBTFVFKF9fVkFMVUVfXykgICAoKChfX1ZBTFVFX18pID49IDJVKSAmJiAoKF9fVkFMVUVfXykgPD0gMzFVKSkKQEAgLTMxMjMsNyArMzEyNywxMSBAQAogI2RlZmluZSBJU19SQ0NfUExMU0FJMk1fVkFMVUUoX19WQUxVRV9fKSAgICgoMVUgPD0gKF9fVkFMVUVfXykpICYmICgoX19WQUxVRV9fKSA8PSA4VSkpCiAjZW5kaWYgLyogUkNDX1BMTFNBSTJNX0RJVl8xXzE2X1NVUFBPUlQgKi8KIAorI2lmIGRlZmluZWQoUkNDX1BMTFNBSTJOX01VTF84XzEyN19TVVBQT1JUKQorI2RlZmluZSBJU19SQ0NfUExMU0FJMk5fVkFMVUUoX19WQUxVRV9fKSAgICgoOFUgPD0gKF9fVkFMVUVfXykpICYmICgoX19WQUxVRV9fKSA8PSAxMjdVKSkKKyNlbHNlCiAjZGVmaW5lIElTX1JDQ19QTExTQUkyTl9WQUxVRShfX1ZBTFVFX18pICAgKCg4VSA8PSAoX19WQUxVRV9fKSkgJiYgKChfX1ZBTFVFX18pIDw9IDg2VSkpCisjZW5kaWYgLyogUkNDX1BMTFNBSTJOX01VTF84XzEyN19TVVBQT1JUICovCiAKICNpZiBkZWZpbmVkKFJDQ19QTExTQUkyUF9ESVZfMl8zMV9TVVBQT1JUKQogI2RlZmluZSBJU19SQ0NfUExMU0FJMlBfVkFMVUUoX19WQUxVRV9fKSAgICgoKF9fVkFMVUVfXykgPj0gMlUpICYmICgoX19WQUxVRV9fKSA8PSAzMVUpKQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9oYWxfc21hcnRjYXJkLmggYi9JbmMvc3RtMzJsNHh4X2hhbF9zbWFydGNhcmQuaAppbmRleCA3ZTQ5MDQwLi5iMzdhYmM4IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2hhbF9zbWFydGNhcmQuaAorKysgYi9JbmMvc3RtMzJsNHh4X2hhbF9zbWFydGNhcmQuaApAQCAtMTEzLDcgKzExMyw3IEBACiB9IFNNQVJUQ0FSRF9Jbml0VHlwZURlZjsKIAogLyoqCi0gICogQGJyaWVmICBTTUFSVENBUkQgYWR2YW5jZWQgZmVhdHVyZXMgaW5pdGFsaXphdGlvbiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgorICAqIEBicmllZiAgU01BUlRDQVJEIGFkdmFuY2VkIGZlYXR1cmVzIGluaXRpYWxpemF0aW9uIHN0cnVjdHVyZSBkZWZpbml0aW9uCiAgICovCiB0eXBlZGVmIHN0cnVjdAogewpAQCAtNDQ5LDcgKzQ0OSw3IEBACiAgICovCiAKICNpZiBkZWZpbmVkKFVTQVJUX1BSRVNDX1BSRVNDQUxFUikKLS8qKiBAZGVmZ3JvdXAgU01BUlRDQVJEX0Nsb2NrUHJlc2NhbGVyICBDbG9jayBQcmVzY2FsZXIKKy8qKiBAZGVmZ3JvdXAgU01BUlRDQVJEX0Nsb2NrUHJlc2NhbGVyICBTTUFSVENBUkQgQ2xvY2sgUHJlc2NhbGVyCiAgICogQHsKICAgKi8KICNkZWZpbmUgU01BUlRDQVJEX1BSRVNDQUxFUl9ESVYxICAgIDB4MDAwMDAwMDBVICAvKiE8IGZjbGtfcHJlcyA9IGZjbGsgICAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2hhbF9zbWFydGNhcmRfZXguaCBiL0luYy9zdG0zMmw0eHhfaGFsX3NtYXJ0Y2FyZF9leC5oCmluZGV4IDFkMDkwMDAuLmJlMDI5ZjggMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfaGFsX3NtYXJ0Y2FyZF9leC5oCisrKyBiL0luYy9zdG0zMmw0eHhfaGFsX3NtYXJ0Y2FyZF9leC5oCkBAIC03Myw3ICs3Myw3IEBACiAgICovCiAKICNpZiBkZWZpbmVkKFVTQVJUX0NSMV9GSUZPRU4pCi0vKiogQGRlZmdyb3VwIFNNQVJUQ0FSREV4X0ZJRk9fbW9kZSBTTUFSVENBUkRFeCBGSUZPIG1vZGUKKy8qKiBAZGVmZ3JvdXAgU01BUlRDQVJERXhfRklGT19tb2RlIFNNQVJUQ0FSRCBGSUZPIG1vZGUKICAgKiBAYnJpZWYgICAgU01BUlRDQVJEIEZJRk8gbW9kZQogICAqIEB7CiAgICovCkBAIC04Myw3ICs4Myw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBTTUFSVENBUkRFeF9UWEZJRk9fdGhyZXNob2xkX2xldmVsIFNNQVJUQ0FSREV4IFRYRklGTyB0aHJlc2hvbGQgbGV2ZWwKKy8qKiBAZGVmZ3JvdXAgU01BUlRDQVJERXhfVFhGSUZPX3RocmVzaG9sZF9sZXZlbCBTTUFSVENBUkQgVFhGSUZPIHRocmVzaG9sZCBsZXZlbAogICAqIEBicmllZiAgICBTTUFSVENBUkQgVFhGSUZPIGxldmVsCiAgICogQHsKICAgKi8KQEAgLTk3LDcgKzk3LDcgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFNNQVJUQ0FSREV4X1JYRklGT190aHJlc2hvbGRfbGV2ZWwgU01BUlRDQVJERXggUlhGSUZPIHRocmVzaG9sZCBsZXZlbAorLyoqIEBkZWZncm91cCBTTUFSVENBUkRFeF9SWEZJRk9fdGhyZXNob2xkX2xldmVsIFNNQVJUQ0FSRCBSWEZJRk8gdGhyZXNob2xkIGxldmVsCiAgICogQGJyaWVmICAgIFNNQVJUQ0FSRCBSWEZJRk8gbGV2ZWwKICAgKiBAewogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9oYWxfc21idXMuaCBiL0luYy9zdG0zMmw0eHhfaGFsX3NtYnVzLmgKaW5kZXggNjZmYWQzYS4uM2FkMGMzNyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfc21idXMuaAorKysgYi9JbmMvc3RtMzJsNHh4X2hhbF9zbWJ1cy5oCkBAIC02NSw3ICs2NSw3IEBACiAgIHVpbnQzMl90IE93bkFkZHJlc3MyOyAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBzZWNvbmQgZGV2aWNlIG93biBhZGRyZXNzIGlmIGR1YWwgYWRkcmVzc2luZyBtb2RlIGlzIHNlbGVjdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgNy1iaXQgYWRkcmVzcy4gKi8KIAotICB1aW50MzJfdCBPd25BZGRyZXNzMk1hc2tzOyAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgYWNrbm9sZWRnZSBtYXNrIGFkZHJlc3Mgc2Vjb25kIGRldmljZSBvd24gYWRkcmVzcyBpZiBkdWFsIGFkZHJlc3NpbmcgbW9kZSBpcyBzZWxlY3RlZAorICB1aW50MzJfdCBPd25BZGRyZXNzMk1hc2tzOyAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgYWNrbm93bGVkZ2UgbWFzayBhZGRyZXNzIHNlY29uZCBkZXZpY2Ugb3duIGFkZHJlc3MgaWYgZHVhbCBhZGRyZXNzaW5nIG1vZGUgaXMgc2VsZWN0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNNQlVTX293bl9hZGRyZXNzMl9tYXNrcy4gKi8KIAogICB1aW50MzJfdCBHZW5lcmFsQ2FsbE1vZGU7ICAgICAgICAvKiE8IFNwZWNpZmllcyBpZiBnZW5lcmFsIGNhbGwgbW9kZSBpcyBzZWxlY3RlZC4KQEAgLTM1OCw3ICszNTgsOCBAQAogI2RlZmluZSBTTUJVU19JVF9BRERSSSAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NSMV9BRERSSUUKICNkZWZpbmUgU01CVVNfSVRfUlhJICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DUjFfUlhJRQogI2RlZmluZSBTTUJVU19JVF9UWEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NSMV9UWElFCi0jZGVmaW5lIFNNQlVTX0lUX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU01CVVNfSVRfRVJSSSB8IFNNQlVTX0lUX1RDSSB8IFNNQlVTX0lUX1NUT1BJIHwgU01CVVNfSVRfTkFDS0kgfCBTTUJVU19JVF9UWEkpCisjZGVmaW5lIFNNQlVTX0lUX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU01CVVNfSVRfRVJSSSB8IFNNQlVTX0lUX1RDSSB8IFNNQlVTX0lUX1NUT1BJIHwgU01CVVNfSVRfTkFDS0kgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU01CVVNfSVRfVFhJKQogI2RlZmluZSBTTUJVU19JVF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNNQlVTX0lUX0VSUkkgfCBTTUJVU19JVF9UQ0kgfCBTTUJVU19JVF9OQUNLSSB8IFNNQlVTX0lUX1JYSSkKICNkZWZpbmUgU01CVVNfSVRfQUxFUlQgICAgICAgICAgICAgICAgICAgICAgICAgIChTTUJVU19JVF9FUlJJKQogI2RlZmluZSBTTUJVU19JVF9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNNQlVTX0lUX0FERFJJIHwgU01CVVNfSVRfU1RPUEkgfCBTTUJVU19JVF9OQUNLSSkKQEAgLTQwOCwxMCArNDA5LDEwIEBACiAgICovCiAjaWYgKFVTRV9IQUxfU01CVVNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAjZGVmaW5lIF9fSEFMX1NNQlVTX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAgICAgICAgICAgZG97ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfU01CVVNfU1RBVEVfUkVTRVQ7ICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcEluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwRGVJbml0Q2FsbGJhY2sgPSBOVUxMOyAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlN0YXRlID0gSEFMX1NNQlVTX1NUQVRFX1JFU0VUOyAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwSW5pdENhbGxiYWNrID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwRGVJbml0Q2FsbGJhY2sgPSBOVUxMOyAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAjZWxzZQogI2RlZmluZSBfX0hBTF9TTUJVU19SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgICAgICAgICAoKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9TTUJVU19TVEFURV9SRVNFVCkKICNlbmRpZgpAQCAtNDYyLDcgKzQ2Myw4IEBACiAgICoKICAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgX19JVF9fIChTRVQgb3IgUkVTRVQpLgogICAqLwotI2RlZmluZSBfX0hBTF9TTUJVU19HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMSAmIChfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKSA/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBfX0hBTF9TTUJVU19HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pIFwKKyAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IxICYgKF9fSU5URVJSVVBUX18pKSA9PSAoX19JTlRFUlJVUFRfXykpID8gU0VUIDogUkVTRVQpCiAKIC8qKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBTTUJVUyBmbGFnIGlzIHNldCBvciBub3QuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgU01CVVMgSGFuZGxlLgpAQCAtNDg4LDcgKzQ5MCw4IEBACiAgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIF9fRkxBR19fIChTRVQgb3IgUkVTRVQpLgogICAqLwogI2RlZmluZSBTTUJVU19GTEFHX01BU0sgICgweDAwMDFGRkZGVSkKLSNkZWZpbmUgX19IQUxfU01CVVNfR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKChfX0ZMQUdfXykgJiBTTUJVU19GTEFHX01BU0spKSA9PSAoKF9fRkxBR19fKSAmIFNNQlVTX0ZMQUdfTUFTSykpID8gU0VUIDogUkVTRVQpCisjZGVmaW5lIF9fSEFMX1NNQlVTX0dFVF9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSBcCisgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKChfX0ZMQUdfXykgJiBTTUJVU19GTEFHX01BU0spKSA9PSAoKF9fRkxBR19fKSAmIFNNQlVTX0ZMQUdfTUFTSykpID8gU0VUIDogUkVTRVQpCiAKIC8qKiBAYnJpZWYgIENsZWFyIHRoZSBTTUJVUyBwZW5kaW5nIGZsYWdzIHdoaWNoIGFyZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSBpbiBhIHNwZWNpZmljIGJpdC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBTTUJVUyBIYW5kbGUuCkBAIC01MzksMTUgKzU0MiwxNSBAQAogICAqLwogCiAjZGVmaW5lIElTX1NNQlVTX0FOQUxPR19GSUxURVIoRklMVEVSKSAgICAgICAgICAgICAgICAgICgoKEZJTFRFUikgPT0gU01CVVNfQU5BTE9HRklMVEVSX0VOQUJMRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRklMVEVSKSA9PSBTTUJVU19BTkFMT0dGSUxURVJfRElTQUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZJTFRFUikgPT0gU01CVVNfQU5BTE9HRklMVEVSX0RJU0FCTEUpKQogCiAjZGVmaW5lIElTX1NNQlVTX0RJR0lUQUxfRklMVEVSKEZJTFRFUikgICAgICAgICAgICAgICAgICgoRklMVEVSKSA8PSAweDAwMDAwMDBGVSkKIAogI2RlZmluZSBJU19TTUJVU19BRERSRVNTSU5HX01PREUoTU9ERSkgICAgICAgICAgICAgICAgICAoKChNT0RFKSA9PSBTTUJVU19BRERSRVNTSU5HTU9ERV83QklUKSAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gU01CVVNfQUREUkVTU0lOR01PREVfMTBCSVQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBTTUJVU19BRERSRVNTSU5HTU9ERV8xMEJJVCkpCiAKICNkZWZpbmUgSVNfU01CVVNfRFVBTF9BRERSRVNTKEFERFJFU1MpICAgICAgICAgICAgICAgICAgKCgoQUREUkVTUykgPT0gU01CVVNfRFVBTEFERFJFU1NfRElTQUJMRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUREUkVTUykgPT0gU01CVVNfRFVBTEFERFJFU1NfRU5BQkxFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUREUkVTUykgPT0gU01CVVNfRFVBTEFERFJFU1NfRU5BQkxFKSkKIAogI2RlZmluZSBJU19TTUJVU19PV05fQUREUkVTUzJfTUFTSyhNQVNLKSAgICAgICAgICAgICAgICAoKChNQVNLKSA9PSBTTUJVU19PQTJfTk9NQVNLKSAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1BU0spID09IFNNQlVTX09BMl9NQVNLMDEpICAgIHx8IFwKQEAgLTU2NSw0NyArNTY4LDQ5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNUUkVUQ0gpID09IFNNQlVTX05PU1RSRVRDSF9FTkFCTEUpKQogCiAjZGVmaW5lIElTX1NNQlVTX1BFQyhQRUMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFBFQykgPT0gU01CVVNfUEVDX0RJU0FCTEUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFQykgPT0gU01CVVNfUEVDX0VOQUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFQykgPT0gU01CVVNfUEVDX0VOQUJMRSkpCiAKLSNkZWZpbmUgSVNfU01CVVNfUEVSSVBIRVJBTF9NT0RFKE1PREUpICAgICAgICAgICAgICAgICAgKCgoTU9ERSkgPT0gU01CVVNfUEVSSVBIRVJBTF9NT0RFX1NNQlVTX0hPU1QpICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IFNNQlVTX1BFUklQSEVSQUxfTU9ERV9TTUJVU19TTEFWRSkgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IFNNQlVTX1BFUklQSEVSQUxfTU9ERV9TTUJVU19TTEFWRV9BUlApKQorI2RlZmluZSBJU19TTUJVU19QRVJJUEhFUkFMX01PREUoTU9ERSkgICAgICAgICAgICAgICAgICAoKChNT0RFKSA9PSBTTUJVU19QRVJJUEhFUkFMX01PREVfU01CVVNfSE9TVCkgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IFNNQlVTX1BFUklQSEVSQUxfTU9ERV9TTUJVU19TTEFWRSkgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gU01CVVNfUEVSSVBIRVJBTF9NT0RFX1NNQlVTX1NMQVZFX0FSUCkpCiAKLSNkZWZpbmUgSVNfU01CVVNfVFJBTlNGRVJfTU9ERShNT0RFKSAgICAgICAgICAgICAgICAgICAgKCgoTU9ERSkgPT0gU01CVVNfUkVMT0FEX01PREUpICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gU01CVVNfQVVUT0VORF9NT0RFKSAgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBTTUJVU19TT0ZURU5EX01PREUpICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IFNNQlVTX1NFTkRQRUNfTU9ERSkgICAgICAgICAgICAgICAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gKFNNQlVTX1JFTE9BRF9NT0RFIHwgU01CVVNfU0VORFBFQ19NT0RFKSkgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSAoU01CVVNfQVVUT0VORF9NT0RFIHwgU01CVVNfU0VORFBFQ19NT0RFKSkgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IChTTUJVU19BVVRPRU5EX01PREUgfCBTTUJVU19SRUxPQURfTU9ERSkpICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gKFNNQlVTX0FVVE9FTkRfTU9ERSB8IFNNQlVTX1NFTkRQRUNfTU9ERSB8IFNNQlVTX1JFTE9BRF9NT0RFICkpKQorI2RlZmluZSBJU19TTUJVU19UUkFOU0ZFUl9NT0RFKE1PREUpICAgICAgICAgICAgICAgICAgICAoKChNT0RFKSA9PSBTTUJVU19SRUxPQURfTU9ERSkgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gU01CVVNfQVVUT0VORF9NT0RFKSAgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IFNNQlVTX1NPRlRFTkRfTU9ERSkgICAgICAgICAgICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBTTUJVU19TRU5EUEVDX01PREUpICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gKFNNQlVTX1JFTE9BRF9NT0RFIHwgU01CVVNfU0VORFBFQ19NT0RFKSkgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IChTTUJVU19BVVRPRU5EX01PREUgfCBTTUJVU19TRU5EUEVDX01PREUpKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSAoU01CVVNfQVVUT0VORF9NT0RFIHwgU01CVVNfUkVMT0FEX01PREUpKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gKFNNQlVTX0FVVE9FTkRfTU9ERSB8IFNNQlVTX1NFTkRQRUNfTU9ERSB8IFNNQlVTX1JFTE9BRF9NT0RFICkpKQogCiAKICNkZWZpbmUgSVNfU01CVVNfVFJBTlNGRVJfUkVRVUVTVChSRVFVRVNUKSAgICAgICAgICAgICAgKCgoUkVRVUVTVCkgPT0gU01CVVNfR0VORVJBVEVfU1RPUCkgICAgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IFNNQlVTX0dFTkVSQVRFX1NUQVJUX1JFQUQpICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IFNNQlVTX0dFTkVSQVRFX1NUQVJUX1dSSVRFKSAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IFNNQlVTX05PX1NUQVJUU1RPUCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IFNNQlVTX0dFTkVSQVRFX1NUQVJUX1JFQUQpICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gU01CVVNfR0VORVJBVEVfU1RBUlRfV1JJVEUpICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBTTUJVU19OT19TVEFSVFNUT1ApKQogCiAKLSNkZWZpbmUgSVNfU01CVVNfVFJBTlNGRVJfT1BUSU9OU19SRVFVRVNUKFJFUVVFU1QpICAgICAgKElTX1NNQlVTX1RSQU5TRkVSX09USEVSX09QVElPTlNfUkVRVUVTVChSRVFVRVNUKSAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gU01CVVNfRklSU1RfRlJBTUUpICAgICAgICAgICAgICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBTTUJVU19ORVhUX0ZSQU1FKSAgICAgICAgICAgICAgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IFNNQlVTX0ZJUlNUX0FORF9MQVNUX0ZSQU1FX05PX1BFQykgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gU01CVVNfTEFTVF9GUkFNRV9OT19QRUMpICAgICAgICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBTTUJVU19GSVJTVF9GUkFNRV9XSVRIX1BFQykgICAgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IFNNQlVTX0ZJUlNUX0FORF9MQVNUX0ZSQU1FX1dJVEhfUEVDKSAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gU01CVVNfTEFTVF9GUkFNRV9XSVRIX1BFQykpCisjZGVmaW5lIElTX1NNQlVTX1RSQU5TRkVSX09QVElPTlNfUkVRVUVTVChSRVFVRVNUKSAgICAgIChJU19TTUJVU19UUkFOU0ZFUl9PVEhFUl9PUFRJT05TX1JFUVVFU1QoUkVRVUVTVCkgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBTTUJVU19GSVJTVF9GUkFNRSkgICAgICAgICAgICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gU01CVVNfTkVYVF9GUkFNRSkgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IFNNQlVTX0ZJUlNUX0FORF9MQVNUX0ZSQU1FX05PX1BFQykgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBTTUJVU19MQVNUX0ZSQU1FX05PX1BFQykgICAgICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gU01CVVNfRklSU1RfRlJBTUVfV0lUSF9QRUMpICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IFNNQlVTX0ZJUlNUX0FORF9MQVNUX0ZSQU1FX1dJVEhfUEVDKSAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBTTUJVU19MQVNUX0ZSQU1FX1dJVEhfUEVDKSkKIAogI2RlZmluZSBJU19TTUJVU19UUkFOU0ZFUl9PVEhFUl9PUFRJT05TX1JFUVVFU1QoUkVRVUVTVCkgKCgoUkVRVUVTVCkgPT0gU01CVVNfT1RIRVJfRlJBTUVfTk9fUEVDKSAgICAgICAgICAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBTTUJVU19PVEhFUl9BTkRfTEFTVF9GUkFNRV9OT19QRUMpICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IFNNQlVTX09USEVSX0ZSQU1FX1dJVEhfUEVDKSAgICAgICAgICAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gU01CVVNfT1RIRVJfQU5EX0xBU1RfRlJBTUVfV0lUSF9QRUMpKQogCi0jZGVmaW5lIFNNQlVTX1JFU0VUX0NSMShfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMSAmPSAodWludDMyX3QpfigodWludDMyX3QpKEkyQ19DUjFfU01CSEVOIHwgSTJDX0NSMV9TTUJERU4gfCBJMkNfQ1IxX1BFQ0VOKSkpCi0jZGVmaW5lIFNNQlVTX1JFU0VUX0NSMihfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMiAmPSAodWludDMyX3QpfigodWludDMyX3QpKEkyQ19DUjJfU0FERCB8IEkyQ19DUjJfSEVBRDEwUiB8IEkyQ19DUjJfTkJZVEVTIHwgSTJDX0NSMl9SRUxPQUQgfCBJMkNfQ1IyX1JEX1dSTikpKQorI2RlZmluZSBTTUJVU19SRVNFVF9DUjEoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUjEgJj0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpfigodWludDMyX3QpKEkyQ19DUjFfU01CSEVOIHwgSTJDX0NSMV9TTUJERU4gfCBJMkNfQ1IxX1BFQ0VOKSkpCisjZGVmaW5lIFNNQlVTX1JFU0VUX0NSMihfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMiAmPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCl+KCh1aW50MzJfdCkoSTJDX0NSMl9TQUREIHwgSTJDX0NSMl9IRUFEMTBSIHwgSTJDX0NSMl9OQllURVMgfCBJMkNfQ1IyX1JFTE9BRCB8IEkyQ19DUjJfUkRfV1JOKSkpCiAKICNkZWZpbmUgU01CVVNfR0VORVJBVEVfU1RBUlQoX19BRERNT0RFX18sX19BRERSRVNTX18pICAgICAoKChfX0FERE1PREVfXykgPT0gU01CVVNfQUREUkVTU0lOR01PREVfN0JJVCkgPyAodWludDMyX3QpKCgoKHVpbnQzMl90KShfX0FERFJFU1NfXykgJiAoSTJDX0NSMl9TQUREKSkgfCAoSTJDX0NSMl9TVEFSVCkgfCAoSTJDX0NSMl9BVVRPRU5EKSkgJiAofkkyQ19DUjJfUkRfV1JOKSkgOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpKCgoKHVpbnQzMl90KShfX0FERFJFU1NfXykgJiAoSTJDX0NSMl9TQUREKSkgfCAoSTJDX0NSMl9BREQxMCkgfCAoSTJDX0NSMl9TVEFSVCkpICYgKH5JMkNfQ1IyX1JEX1dSTikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpKCgoKHVpbnQzMl90KShfX0FERFJFU1NfXykgJiAoSTJDX0NSMl9TQUREKSkgfCAoSTJDX0NSMl9BREQxMCkgfCAoSTJDX0NSMl9TVEFSVCkpICYgKH5JMkNfQ1IyX1JEX1dSTikpKQogCiAjZGVmaW5lIFNNQlVTX0dFVF9BRERSX01BVENIKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IgJiBJMkNfSVNSX0FERENPREUpID4+IDE3VSkKICNkZWZpbmUgU01CVVNfR0VUX0RJUihfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUiAmIEkyQ19JU1JfRElSKSA+PiAxNlUpCkBAIC02MTMsNyArNjE4LDggQEAKICNkZWZpbmUgU01CVVNfR0VUX1BFQ19NT0RFKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IyICYgSTJDX0NSMl9QRUNCWVRFKQogI2RlZmluZSBTTUJVU19HRVRfQUxFUlRfRU5BQkxFRChfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IxICYgSTJDX0NSMV9BTEVSVEVOKQogCi0jZGVmaW5lIFNNQlVTX0NIRUNLX0ZMQUcoX19JU1JfXywgX19GTEFHX18pICAgICAgICAgICAgICgoKChfX0lTUl9fKSAmICgoX19GTEFHX18pICYgU01CVVNfRkxBR19NQVNLKSkgPT0gKChfX0ZMQUdfXykgJiBTTUJVU19GTEFHX01BU0spKSA/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBTTUJVU19DSEVDS19GTEFHKF9fSVNSX18sIF9fRkxBR19fKSAgICAgICAgICAgICAoKCgoX19JU1JfXykgJiAoKF9fRkxBR19fKSAmIFNNQlVTX0ZMQUdfTUFTSykpID09IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRkxBR19fKSAmIFNNQlVTX0ZMQUdfTUFTSykpID8gU0VUIDogUkVTRVQpCiAjZGVmaW5lIFNNQlVTX0NIRUNLX0lUX1NPVVJDRShfX0NSMV9fLCBfX0lUX18pICAgICAgICAgICgoKChfX0NSMV9fKSAmIChfX0lUX18pKSA9PSAoX19JVF9fKSkgPyBTRVQgOiBSRVNFVCkKIAogI2RlZmluZSBJU19TTUJVU19PV05fQUREUkVTUzEoQUREUkVTUzEpICAgICAgICAgICAgICAgICAgICAgICAgICgoQUREUkVTUzEpIDw9IDB4MDAwMDAzRkZVKQpAQCAtNjI5LDggKzYzNSw4IEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBTTUJVU19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKLSAqIEB7Ci0gKi8KKyAgKiBAeworICAqLwogCiAvKiBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NNQlVTX0luaXQoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzKTsKQEAgLTY0Miw3ICs2NDgsOCBAQAogCiAvKiBDYWxsYmFja3MgUmVnaXN0ZXIvVW5SZWdpc3RlciBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmIChVU0VfSEFMX1NNQlVTX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NNQlVTX1JlZ2lzdGVyQ2FsbGJhY2soU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCBIQUxfU01CVVNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwgcFNNQlVTX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NNQlVTX1JlZ2lzdGVyQ2FsbGJhY2soU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCBIQUxfU01CVVNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBTTUJVU19DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TTUJVU19VblJlZ2lzdGVyQ2FsbGJhY2soU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCBIQUxfU01CVVNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCk7CiAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TTUJVU19SZWdpc3RlckFkZHJDYWxsYmFjayhTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHBTTUJVU19BZGRyQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CkBAIC02NTMsMjggKzY2MCwzMyBAQAogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgU01CVVNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMiBJbnB1dCBhbmQgT3V0cHV0IG9wZXJhdGlvbiBmdW5jdGlvbnMKLSAqIEB7Ci0gKi8KKyAgKiBAeworICAqLwogCiAvKiBJTyBvcGVyYXRpb24gZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKiBAYWRkdG9ncm91cCBCbG9ja2luZ19tb2RlX1BvbGxpbmcgQmxvY2tpbmcgbW9kZSBQb2xsaW5nCi0gKiBAewotICovCisgICogQHsKKyAgKi8KIC8qKioqKioqIEJsb2NraW5nIG1vZGU6IFBvbGxpbmcgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TTUJVU19Jc0RldmljZVJlYWR5KFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDMyX3QgVHJpYWxzLCB1aW50MzJfdCBUaW1lb3V0KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TTUJVU19Jc0RldmljZVJlYWR5KFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDMyX3QgVHJpYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCk7CiAvKioKICAgKiBAfQogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgTm9uLUJsb2NraW5nX21vZGVfSW50ZXJydXB0IE5vbi1CbG9ja2luZyBtb2RlIEludGVycnVwdAotICogQHsKLSAqLworICAqIEB7CisgICovCiAvKioqKioqKiBOb24tQmxvY2tpbmcgbW9kZTogSW50ZXJydXB0ICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU01CVVNfTWFzdGVyX1RyYW5zbWl0X0lUKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TTUJVU19NYXN0ZXJfUmVjZWl2ZV9JVChTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU01CVVNfTWFzdGVyX1RyYW5zbWl0X0lUKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TTUJVU19NYXN0ZXJfUmVjZWl2ZV9JVChTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TTUJVU19NYXN0ZXJfQWJvcnRfSVQoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50MTZfdCBEZXZBZGRyZXNzKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TTUJVU19TbGF2ZV9UcmFuc21pdF9JVChTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucyk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU01CVVNfU2xhdmVfUmVjZWl2ZV9JVChTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU01CVVNfU2xhdmVfVHJhbnNtaXRfSVQoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBYZmVyT3B0aW9ucyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU01CVVNfU2xhdmVfUmVjZWl2ZV9JVChTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgWGZlck9wdGlvbnMpOwogCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU01CVVNfRW5hYmxlQWxlcnRfSVQoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TTUJVU19EaXNhYmxlQWxlcnRfSVQoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzKTsKQEAgLTY4NSw4ICs2OTcsOCBAQAogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgU01CVVNfSVJRX0hhbmRsZXJfYW5kX0NhbGxiYWNrcyBJUlEgSGFuZGxlciBhbmQgQ2FsbGJhY2tzCi0gKiBAewotICovCisgICogQHsKKyAgKi8KIC8qKioqKioqIFNNQlVTIElSUUhhbmRsZXIgYW5kIENhbGxiYWNrcyB1c2VkIGluIG5vbiBibG9ja2luZyBtb2RlcyAoSW50ZXJydXB0KSAqLwogdm9pZCBIQUxfU01CVVNfRVZfSVJRSGFuZGxlcihTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMpOwogdm9pZCBIQUxfU01CVVNfRVJfSVJRSGFuZGxlcihTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMpOwpAQCAtNzAzLDggKzcxNSw4IEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBTTUJVU19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9ycyBmdW5jdGlvbnMKLSAqICBAewotICovCisgICogIEB7CisgICovCiAKIC8qIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9ycyBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdWludDMyX3QgSEFMX1NNQlVTX0dldFN0YXRlKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cyk7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2hhbF9zcGkuaCBiL0luYy9zdG0zMmw0eHhfaGFsX3NwaS5oCmluZGV4IDEwMGVjMDYuLjFlYjQzNmIgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfaGFsX3NwaS5oCisrKyBiL0luYy9zdG0zMmw0eHhfaGFsX3NwaS5oCkBAIC0zODMsNyArMzgzLDggQEAKICNkZWZpbmUgU1BJX0ZMQUdfRlJFICAgICAgICAgICAgICAgICAgICBTUElfU1JfRlJFICAgIC8qIFNQSSBFcnJvciBmbGFnOiBUSSBtb2RlIGZyYW1lIGZvcm1hdCBlcnJvciBmbGFnICovCiAjZGVmaW5lIFNQSV9GTEFHX0ZUTFZMICAgICAgICAgICAgICAgICAgU1BJX1NSX0ZUTFZMICAvKiBTUEkgZmlmbyB0cmFuc21pc3Npb24gbGV2ZWwgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTUElfRkxBR19GUkxWTCAgICAgICAgICAgICAgICAgIFNQSV9TUl9GUkxWTCAgLyogU1BJIGZpZm8gcmVjZXB0aW9uIGxldmVsICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU1BJX0ZMQUdfTUFTSyAgICAgICAgICAgICAgICAgICAoU1BJX1NSX1JYTkUgfCBTUElfU1JfVFhFIHwgU1BJX1NSX0JTWSB8IFNQSV9TUl9DUkNFUlIgfCBTUElfU1JfTU9ERiB8IFNQSV9TUl9PVlIgfCBTUElfU1JfRlJFIHwgU1BJX1NSX0ZUTFZMIHwgU1BJX1NSX0ZSTFZMKQorI2RlZmluZSBTUElfRkxBR19NQVNLICAgICAgICAgICAgICAgICAgIChTUElfU1JfUlhORSB8IFNQSV9TUl9UWEUgfCBTUElfU1JfQlNZIHwgU1BJX1NSX0NSQ0VSUlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTUElfU1JfTU9ERiB8IFNQSV9TUl9PVlIgfCBTUElfU1JfRlJFIHwgU1BJX1NSX0ZUTFZMIHwgU1BJX1NSX0ZSTFZMKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTQzMyw3ICs0MzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogI2Vsc2UKICNkZWZpbmUgX19IQUxfU1BJX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAoKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9TUElfU1RBVEVfUkVTRVQpCi0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfSEFMX1NQSV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogLyoqIEBicmllZiAgRW5hYmxlIHRoZSBzcGVjaWZpZWQgU1BJIGludGVycnVwdHMuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgU1BJIEhhbmRsZS4KQEAgLTQ2OSw3ICs0NzAsOCBAQAogICAqICAgICAgICAgICAgQGFyZyBTUElfSVRfRVJSOiBFcnJvciBpbnRlcnJ1cHQgZW5hYmxlCiAgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIF9fSVRfXyAoVFJVRSBvciBGQUxTRSkuCiAgICovCi0jZGVmaW5lIF9fSEFMX1NQSV9HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMiAmIChfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKSA/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBfX0hBTF9TUElfR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUjJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKF9fSU5URVJSVVBUX18pKSA9PSAoX19JTlRFUlJVUFRfXykpID8gU0VUIDogUkVTRVQpCiAKIC8qKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBTUEkgZmxhZyBpcyBzZXQgb3Igbm90LgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFNQSSBIYW5kbGUuCkBAIC01MjksOSArNTMxLDkgQEAKICAgKi8KICNkZWZpbmUgX19IQUxfU1BJX0NMRUFSX0ZSRUZMQUcoX19IQU5ETEVfXykgICAgICAgIFwKICAgZG97ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19JTyB1aW50MzJfdCB0bXByZWdfZnJlID0gMHgwMFU7ICAgICAgICAgICAgICAgIFwKLSAgdG1wcmVnX2ZyZSA9IChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPlNSOyAgICAgICAgIFwKLSAgVU5VU0VEKHRtcHJlZ19mcmUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX0lPIHVpbnQzMl90IHRtcHJlZ19mcmUgPSAweDAwVTsgICAgICAgICAgICAgIFwKKyAgICB0bXByZWdfZnJlID0gKF9fSEFORExFX18pLT5JbnN0YW5jZS0+U1I7ICAgICAgIFwKKyAgICBVTlVTRUQodG1wcmVnX2ZyZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfXdoaWxlKDBVKQogCiAvKiogQGJyaWVmICBFbmFibGUgdGhlIFNQSSBwZXJpcGhlcmFsLgpAQCAtNTgwLDcgKzU4Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMSwgU1BJX0NSMV9DUkNFTik7fXdoaWxlKDBVKQogCiAvKiogQGJyaWVmICBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgU1BJIGZsYWcgaXMgc2V0IG9yIG5vdC4KLSAgKiBAcGFyYW0gIF9fU1JfXyAgY29weSBvZiBTUEkgU1IgcmVnc2l0ZXIuCisgICogQHBhcmFtICBfX1NSX18gIGNvcHkgb2YgU1BJIFNSIHJlZ2lzdGVyLgogICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNoZWNrLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgU1BJX0ZMQUdfUlhORTogUmVjZWl2ZSBidWZmZXIgbm90IGVtcHR5IGZsYWcKQEAgLTU5NCwxMCArNTk2LDExIEBACiAgICogICAgICAgICAgICBAYXJnIFNQSV9GTEFHX0ZSTFZMOiBTUEkgZmlmbyByZWNlcHRpb24gbGV2ZWwKICAgKiBAcmV0dmFsIFNFVCBvciBSRVNFVC4KICAgKi8KLSNkZWZpbmUgU1BJX0NIRUNLX0ZMQUcoX19TUl9fLCBfX0ZMQUdfXykgICAgICAgICAoKCgoX19TUl9fKSAmICgoX19GTEFHX18pICYgU1BJX0ZMQUdfTUFTSykpID09ICgoX19GTEFHX18pICYgU1BJX0ZMQUdfTUFTSykpID8gU0VUIDogUkVTRVQpCisjZGVmaW5lIFNQSV9DSEVDS19GTEFHKF9fU1JfXywgX19GTEFHX18pICgoKChfX1NSX18pICYgKChfX0ZMQUdfXykgJiBTUElfRkxBR19NQVNLKSkgPT0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZMQUdfXykgJiBTUElfRkxBR19NQVNLKSkgPyBTRVQgOiBSRVNFVCkKIAogLyoqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIFNQSSBJbnRlcnJ1cHQgaXMgc2V0IG9yIG5vdC4KLSAgKiBAcGFyYW0gIF9fQ1IyX18gIGNvcHkgb2YgU1BJIENSMiByZWdzaXRlci4KKyAgKiBAcGFyYW0gIF9fQ1IyX18gIGNvcHkgb2YgU1BJIENSMiByZWdpc3Rlci4KICAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBTUEkgaW50ZXJydXB0IHNvdXJjZSB0byBjaGVjay4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIFNQSV9JVF9UWEU6IFR4IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQgZW5hYmxlCkBAIC02MDUsMTUgKzYwOCwxNiBAQAogICAqICAgICAgICAgICAgQGFyZyBTUElfSVRfRVJSOiBFcnJvciBpbnRlcnJ1cHQgZW5hYmxlCiAgICogQHJldHZhbCBTRVQgb3IgUkVTRVQuCiAgICovCi0jZGVmaW5lIFNQSV9DSEVDS19JVF9TT1VSQ0UoX19DUjJfXywgX19JTlRFUlJVUFRfXykgICAgICAoKCgoX19DUjJfXykgJiAoX19JTlRFUlJVUFRfXykpID09IChfX0lOVEVSUlVQVF9fKSkgPyBTRVQgOiBSRVNFVCkKKyNkZWZpbmUgU1BJX0NIRUNLX0lUX1NPVVJDRShfX0NSMl9fLCBfX0lOVEVSUlVQVF9fKSAoKCgoX19DUjJfXykgJiAoX19JTlRFUlJVUFRfXykpID09IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSU5URVJSVVBUX18pKSA/IFNFVCA6IFJFU0VUKQogCiAvKiogQGJyaWVmICBDaGVja3MgaWYgU1BJIE1vZGUgcGFyYW1ldGVyIGlzIGluIGFsbG93ZWQgcmFuZ2UuCiAgICogQHBhcmFtICBfX01PREVfXyBzcGVjaWZpZXMgdGhlIFNQSSBNb2RlLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBTUElfTW9kZQogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBJU19TUElfTU9ERShfX01PREVfXykgKCgoX19NT0RFX18pID09IFNQSV9NT0RFX1NMQVZFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gU1BJX01PREVfTUFTVEVSKSkKKyNkZWZpbmUgSVNfU1BJX01PREUoX19NT0RFX18pICAgICAgKCgoX19NT0RFX18pID09IFNQSV9NT0RFX1NMQVZFKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IFNQSV9NT0RFX01BU1RFUikpCiAKIC8qKiBAYnJpZWYgIENoZWNrcyBpZiBTUEkgRGlyZWN0aW9uIE1vZGUgcGFyYW1ldGVyIGlzIGluIGFsbG93ZWQgcmFuZ2UuCiAgICogQHBhcmFtICBfX01PREVfXyBzcGVjaWZpZXMgdGhlIFNQSSBEaXJlY3Rpb24gTW9kZS4KQEAgLTY2MSwzMyArNjY1LDMzIEBACiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNQSV9DbG9ja19Qb2xhcml0eQogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBJU19TUElfQ1BPTChfX0NQT0xfXykgKCgoX19DUE9MX18pID09IFNQSV9QT0xBUklUWV9MT1cpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ1BPTF9fKSA9PSBTUElfUE9MQVJJVFlfSElHSCkpCisjZGVmaW5lIElTX1NQSV9DUE9MKF9fQ1BPTF9fKSAgICAgICgoKF9fQ1BPTF9fKSA9PSBTUElfUE9MQVJJVFlfTE9XKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ1BPTF9fKSA9PSBTUElfUE9MQVJJVFlfSElHSCkpCiAKIC8qKiBAYnJpZWYgIENoZWNrcyBpZiBTUEkgQ2xvY2sgUGhhc2UgcGFyYW1ldGVyIGlzIGluIGFsbG93ZWQgcmFuZ2UuCiAgICogQHBhcmFtICBfX0NQSEFfXyBzcGVjaWZpZXMgdGhlIFNQSSBDbG9jayBQaGFzZS4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgU1BJX0Nsb2NrX1BoYXNlCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIElTX1NQSV9DUEhBKF9fQ1BIQV9fKSAoKChfX0NQSEFfXykgPT0gU1BJX1BIQVNFXzFFREdFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NQSEFfXykgPT0gU1BJX1BIQVNFXzJFREdFKSkKKyNkZWZpbmUgSVNfU1BJX0NQSEEoX19DUEhBX18pICAgICAgKCgoX19DUEhBX18pID09IFNQSV9QSEFTRV8xRURHRSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NQSEFfXykgPT0gU1BJX1BIQVNFXzJFREdFKSkKIAogLyoqIEBicmllZiAgQ2hlY2tzIGlmIFNQSSBTbGF2ZSBTZWxlY3QgcGFyYW1ldGVyIGlzIGluIGFsbG93ZWQgcmFuZ2UuCiAgICogQHBhcmFtICBfX05TU19fIHNwZWNpZmllcyB0aGUgU1BJIFNsYXZlIFNlbGVjdCBtYW5hZ2VtZW50IHBhcmFtZXRlci4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgU1BJX1NsYXZlX1NlbGVjdF9tYW5hZ2VtZW50CiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIElTX1NQSV9OU1MoX19OU1NfXykgKCgoX19OU1NfXykgPT0gU1BJX05TU19TT0ZUKSAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19OU1NfXykgPT0gU1BJX05TU19IQVJEX0lOUFVUKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19OU1NfXykgPT0gU1BJX05TU19IQVJEX09VVFBVVCkpCisjZGVmaW5lIElTX1NQSV9OU1MoX19OU1NfXykgICAgICAgICgoKF9fTlNTX18pID09IFNQSV9OU1NfU09GVCkgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX05TU19fKSA9PSBTUElfTlNTX0hBUkRfSU5QVVQpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19OU1NfXykgPT0gU1BJX05TU19IQVJEX09VVFBVVCkpCiAKIC8qKiBAYnJpZWYgIENoZWNrcyBpZiBTUEkgTlNTIFB1bHNlIHBhcmFtZXRlciBpcyBpbiBhbGxvd2VkIHJhbmdlLgogICAqIEBwYXJhbSAgX19OU1NQX18gc3BlY2lmaWVzIHRoZSBTUEkgTlNTIFB1bHNlIE1vZGUgcGFyYW1ldGVyLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBTUElfTlNTUF9Nb2RlCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIElTX1NQSV9OU1NQKF9fTlNTUF9fKSAoKChfX05TU1BfXykgPT0gU1BJX05TU19QVUxTRV9FTkFCTEUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTlNTUF9fKSA9PSBTUElfTlNTX1BVTFNFX0RJU0FCTEUpKQorI2RlZmluZSBJU19TUElfTlNTUChfX05TU1BfXykgICAgICAoKChfX05TU1BfXykgPT0gU1BJX05TU19QVUxTRV9FTkFCTEUpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19OU1NQX18pID09IFNQSV9OU1NfUFVMU0VfRElTQUJMRSkpCiAKIC8qKiBAYnJpZWYgIENoZWNrcyBpZiBTUEkgQmF1ZHJhdGUgcHJlc2NhbGVyIHBhcmFtZXRlciBpcyBpbiBhbGxvd2VkIHJhbmdlLgogICAqIEBwYXJhbSAgX19QUkVTQ0FMRVJfXyBzcGVjaWZpZXMgdGhlIFNQSSBCYXVkcmF0ZSBwcmVzY2FsZXIuCkBAIC03MDgsMTYgKzcxMiwxNiBAQAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBTUElfTVNCX0xTQl90cmFuc21pc3Npb24KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgSVNfU1BJX0ZJUlNUX0JJVChfX0JJVF9fKSAoKChfX0JJVF9fKSA9PSBTUElfRklSU1RCSVRfTVNCKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CSVRfXykgPT0gU1BJX0ZJUlNUQklUX0xTQikpCisjZGVmaW5lIElTX1NQSV9GSVJTVF9CSVQoX19CSVRfXykgICgoKF9fQklUX18pID09IFNQSV9GSVJTVEJJVF9NU0IpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CSVRfXykgPT0gU1BJX0ZJUlNUQklUX0xTQikpCiAKIC8qKiBAYnJpZWYgIENoZWNrcyBpZiBTUEkgVEkgbW9kZSBwYXJhbWV0ZXIgaXMgaW4gYWxsb3dlZCByYW5nZS4KICAgKiBAcGFyYW0gIF9fTU9ERV9fIHNwZWNpZmllcyB0aGUgU1BJIFRJIG1vZGUuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNQSV9USV9tb2RlCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIElTX1NQSV9USU1PREUoX19NT0RFX18pICgoKF9fTU9ERV9fKSA9PSBTUElfVElNT0RFX0RJU0FCTEUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IFNQSV9USU1PREVfRU5BQkxFKSkKKyNkZWZpbmUgSVNfU1BJX1RJTU9ERShfX01PREVfXykgICAgKCgoX19NT0RFX18pID09IFNQSV9USU1PREVfRElTQUJMRSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gU1BJX1RJTU9ERV9FTkFCTEUpKQogCiAvKiogQGJyaWVmICBDaGVja3MgaWYgU1BJIENSQyBjYWxjdWxhdGlvbiBlbmFibGVkIHN0YXRlIGlzIGluIGFsbG93ZWQgcmFuZ2UuCiAgICogQHBhcmFtICBfX0NBTENVTEFUSU9OX18gc3BlY2lmaWVzIHRoZSBTUEkgQ1JDIGNhbGN1bGF0aW9uIGVuYWJsZSBzdGF0ZS4KQEAgLTczMiw4ICs3MzYsOCBAQAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBTUElfQ1JDX2xlbmd0aAogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBJU19TUElfQ1JDX0xFTkdUSChfX0xFTkdUSF9fKSAoKChfX0xFTkdUSF9fKSA9PSBTUElfQ1JDX0xFTkdUSF9EQVRBU0laRSkgfHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTEVOR1RIX18pID09IFNQSV9DUkNfTEVOR1RIXzhCSVQpICB8fCAgIFwKKyNkZWZpbmUgSVNfU1BJX0NSQ19MRU5HVEgoX19MRU5HVEhfXykgKCgoX19MRU5HVEhfXykgPT0gU1BJX0NSQ19MRU5HVEhfREFUQVNJWkUpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gU1BJX0NSQ19MRU5HVEhfOEJJVCkgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gU1BJX0NSQ19MRU5HVEhfMTZCSVQpKQogCiAvKiogQGJyaWVmICBDaGVja3MgaWYgU1BJIHBvbHlub21pYWwgdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIENSQyBjYWxjdWxhdGlvbiwgaXMgaW4gYWxsb3dlZCByYW5nZS4KQEAgLTc0MSw3ICs3NDUsOSBAQAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSA2NTUzNQogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBJU19TUElfQ1JDX1BPTFlOT01JQUwoX19QT0xZTk9NSUFMX18pICgoKF9fUE9MWU5PTUlBTF9fKSA+PSAweDFVKSAmJiAoKF9fUE9MWU5PTUlBTF9fKSA8PSAweEZGRkZVKSAmJiAoKChfX1BPTFlOT01JQUxfXykmMHgxVSkgIT0gMFUpKQorI2RlZmluZSBJU19TUElfQ1JDX1BPTFlOT01JQUwoX19QT0xZTk9NSUFMX18pICgoKF9fUE9MWU5PTUlBTF9fKSA+PSAweDFVKSAgICAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT0xZTk9NSUFMX18pIDw9IDB4RkZGRlUpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX1BPTFlOT01JQUxfXykmMHgxVSkgIT0gMFUpKQogCiAvKiogQGJyaWVmICBDaGVja3MgaWYgRE1BIGhhbmRsZSBpcyB2YWxpZC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIGEgRE1BIEhhbmRsZS4KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfaGFsX3NyYW0uaCBiL0luYy9zdG0zMmw0eHhfaGFsX3NyYW0uaAppbmRleCA0OTAwMjYyLi40N2FjZDBlIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2hhbF9zcmFtLmgKKysrIGIvSW5jL3N0bTMybDR4eF9oYWxfc3JhbS5oCkBAIC02Miw3ICs2Miw3IEBACiB0eXBlZGVmIHN0cnVjdCBfX1NSQU1fSGFuZGxlVHlwZURlZgogI2Vsc2UKIHR5cGVkZWYgc3RydWN0Ci0jZW5kaWYgLyogVVNFX0hBTF9TUkFNX1JFR0lTVEVSX0NBTExCQUNLUyAgKi8JCisjZW5kaWYgLyogVVNFX0hBTF9TUkFNX1JFR0lTVEVSX0NBTExCQUNLUyAgKi8KIHsKICAgRk1DX05PUlNSQU1fVHlwZURlZiAgICAgICAgICAgKkluc3RhbmNlOyAgLyohPCBSZWdpc3RlciBiYXNlIGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAqLwogCkBAIC03NywxMCArNzcsMTAgQEAKICAgRE1BX0hhbmRsZVR5cGVEZWYgICAgICAgICAgICAgKmhkbWE7ICAgICAgLyohPCBQb2ludGVyIERNQSBoYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAjaWYgKFVTRV9IQUxfU1JBTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgdm9pZCAgKCogTXNwSW5pdENhbGxiYWNrKSAgICAgICAgKCBzdHJ1Y3QgX19TUkFNX0hhbmRsZVR5cGVEZWYgKiBoc3JhbSk7ICAgIC8qITwgU1JBTSBNc3AgSW5pdCBjYWxsYmFjayAgICAgICAgICAgICAgKi8KLSAgdm9pZCAgKCogTXNwRGVJbml0Q2FsbGJhY2spICAgICAgKCBzdHJ1Y3QgX19TUkFNX0hhbmRsZVR5cGVEZWYgKiBoc3JhbSk7ICAgIC8qITwgU1JBTSBNc3AgRGVJbml0IGNhbGxiYWNrICAgICAgICAgICAgKi8KLSAgdm9pZCAgKCogRG1hWGZlckNwbHRDYWxsYmFjaykgICAgKCBETUFfSGFuZGxlVHlwZURlZiAqIGhkbWEpOyAgICAgICAgICAgICAgIC8qITwgU1JBTSBETUEgWGZlciBDb21wbGV0ZSBjYWxsYmFjayAgICAgKi8KLSAgdm9pZCAgKCogRG1hWGZlckVycm9yQ2FsbGJhY2spICAgKCBETUFfSGFuZGxlVHlwZURlZiAqIGhkbWEpOyAgICAgICAgICAgICAgIC8qITwgU1JBTSBETUEgWGZlciBFcnJvciBjYWxsYmFjayAgICAgICAgKi8KKyAgdm9pZCAoKiBNc3BJbml0Q2FsbGJhY2spKHN0cnVjdCBfX1NSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0pOyAgICAgICAgICAgICAgIC8qITwgU1JBTSBNc3AgSW5pdCBjYWxsYmFjayAgICAgICAgICAgICAgKi8KKyAgdm9pZCAoKiBNc3BEZUluaXRDYWxsYmFjaykoc3RydWN0IF9fU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSk7ICAgICAgICAgICAgIC8qITwgU1JBTSBNc3AgRGVJbml0IGNhbGxiYWNrICAgICAgICAgICAgKi8KKyAgdm9pZCAoKiBEbWFYZmVyQ3BsdENhbGxiYWNrKShETUFfSGFuZGxlVHlwZURlZiAqIGhkbWEpOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU1JBTSBETUEgWGZlciBDb21wbGV0ZSBjYWxsYmFjayAgICAgKi8KKyAgdm9pZCAoKiBEbWFYZmVyRXJyb3JDYWxsYmFjaykoRE1BX0hhbmRsZVR5cGVEZWYgKiBoZG1hKTsgICAgICAgICAgICAgICAgICAgIC8qITwgU1JBTSBETUEgWGZlciBFcnJvciBjYWxsYmFjayAgICAgICAgKi8KICNlbmRpZgogfSBTUkFNX0hhbmRsZVR5cGVEZWY7CiAKQEAgLTk0LDcgKzk0LDcgQEAKICAgSEFMX1NSQU1fTVNQX0RFSU5JVF9DQl9JRCAgICAgPSAweDAxVSwgIC8qITwgU1JBTSBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAqLwogICBIQUxfU1JBTV9ETUFfWEZFUl9DUExUX0NCX0lEICA9IDB4MDJVLCAgLyohPCBTUkFNIERNQSBYZmVyIENvbXBsZXRlIENhbGxiYWNrIElEICovCiAgIEhBTF9TUkFNX0RNQV9YRkVSX0VSUl9DQl9JRCAgID0gMHgwM1UgICAvKiE8IFNSQU0gRE1BIFhmZXIgQ29tcGxldGUgQ2FsbGJhY2sgSUQgKi8KLX1IQUxfU1JBTV9DYWxsYmFja0lEVHlwZURlZjsKK30gSEFMX1NSQU1fQ2FsbGJhY2tJRFR5cGVEZWY7CiAKIC8qKgogICAqIEBicmllZiAgSEFMIFNSQU0gQ2FsbGJhY2sgcG9pbnRlciBkZWZpbml0aW9uCkBAIC0xMTAsOCArMTEwLDggQEAKIC8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qKiBAZGVmZ3JvdXAgU1JBTV9FeHBvcnRlZF9NYWNyb3MgU1JBTSBFeHBvcnRlZCBNYWNyb3MKLSAqIEB7Ci0gKi8KKyAgKiBAeworICAqLwogCiAvKiogQGJyaWVmIFJlc2V0IFNSQU0gaGFuZGxlIHN0YXRlCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIFNSQU0gaGFuZGxlCkBAIC0xMzcsMTEgKzEzNywxMiBAQAogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgU1JBTV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKLSAqIEB7Ci0gKi8KKyAgKiBAeworICAqLwogCiAvKiBJbml0aWFsaXphdGlvbi9kZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fSW5pdChTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCBGTUNfTk9SU1JBTV9UaW1pbmdUeXBlRGVmICpUaW1pbmcsIEZNQ19OT1JTUkFNX1RpbWluZ1R5cGVEZWYgKkV4dFRpbWluZyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9Jbml0KFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIEZNQ19OT1JTUkFNX1RpbWluZ1R5cGVEZWYgKlRpbWluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05PUlNSQU1fVGltaW5nVHlwZURlZiAqRXh0VGltaW5nKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX0RlSW5pdChTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtKTsKIHZvaWQgSEFMX1NSQU1fTXNwSW5pdChTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtKTsKIHZvaWQgSEFMX1NSQU1fTXNwRGVJbml0KFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0pOwpAQCAtMTUxLDI3ICsxNTIsMzcgQEAKICAgKi8KIAogLyoqIEBhZGR0b2dyb3VwIFNSQU1fRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMiBJbnB1dCBPdXRwdXQgYW5kIG1lbW9yeSBjb250cm9sIGZ1bmN0aW9ucwotICogQHsKLSAqLworICAqIEB7CisgICovCiAKIC8qIEkvTyBvcGVyYXRpb24gZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9SZWFkXzhiKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIHVpbnQzMl90ICpwQWRkcmVzcywgdWludDhfdCAqcERzdEJ1ZmZlciwgdWludDMyX3QgQnVmZmVyU2l6ZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9Xcml0ZV84YihTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCB1aW50MzJfdCAqcEFkZHJlc3MsIHVpbnQ4X3QgKnBTcmNCdWZmZXIsIHVpbnQzMl90IEJ1ZmZlclNpemUpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fUmVhZF8xNmIoU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSwgdWludDMyX3QgKnBBZGRyZXNzLCB1aW50MTZfdCAqcERzdEJ1ZmZlciwgdWludDMyX3QgQnVmZmVyU2l6ZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9Xcml0ZV8xNmIoU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSwgdWludDMyX3QgKnBBZGRyZXNzLCB1aW50MTZfdCAqcFNyY0J1ZmZlciwgdWludDMyX3QgQnVmZmVyU2l6ZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9SZWFkXzMyYihTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCB1aW50MzJfdCAqcEFkZHJlc3MsIHVpbnQzMl90ICpwRHN0QnVmZmVyLCB1aW50MzJfdCBCdWZmZXJTaXplKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1dyaXRlXzMyYihTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCB1aW50MzJfdCAqcEFkZHJlc3MsIHVpbnQzMl90ICpwU3JjQnVmZmVyLCB1aW50MzJfdCBCdWZmZXJTaXplKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1JlYWRfRE1BKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIHVpbnQzMl90ICpwQWRkcmVzcywgdWludDMyX3QgKnBEc3RCdWZmZXIsIHVpbnQzMl90IEJ1ZmZlclNpemUpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fV3JpdGVfRE1BKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIHVpbnQzMl90ICpwQWRkcmVzcywgdWludDMyX3QgKnBTcmNCdWZmZXIsIHVpbnQzMl90IEJ1ZmZlclNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fUmVhZF84YihTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCB1aW50MzJfdCAqcEFkZHJlc3MsIHVpbnQ4X3QgKnBEc3RCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1ZmZlclNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fV3JpdGVfOGIoU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSwgdWludDMyX3QgKnBBZGRyZXNzLCB1aW50OF90ICpwU3JjQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVmZmVyU2l6ZSk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9SZWFkXzE2YihTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCB1aW50MzJfdCAqcEFkZHJlc3MsIHVpbnQxNl90ICpwRHN0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVmZmVyU2l6ZSk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9Xcml0ZV8xNmIoU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSwgdWludDMyX3QgKnBBZGRyZXNzLCB1aW50MTZfdCAqcFNyY0J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCdWZmZXJTaXplKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1JlYWRfMzJiKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIHVpbnQzMl90ICpwQWRkcmVzcywgdWludDMyX3QgKnBEc3RCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCdWZmZXJTaXplKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1dyaXRlXzMyYihTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCB1aW50MzJfdCAqcEFkZHJlc3MsIHVpbnQzMl90ICpwU3JjQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1ZmZlclNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fUmVhZF9ETUEoU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSwgdWludDMyX3QgKnBBZGRyZXNzLCB1aW50MzJfdCAqcERzdEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1ZmZlclNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fV3JpdGVfRE1BKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIHVpbnQzMl90ICpwQWRkcmVzcywgdWludDMyX3QgKnBTcmNCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVmZmVyU2l6ZSk7CiAKIHZvaWQgSEFMX1NSQU1fRE1BX1hmZXJDcGx0Q2FsbGJhY2soRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogdm9pZCBIQUxfU1JBTV9ETUFfWGZlckVycm9yQ2FsbGJhY2soRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogCiAjaWYgKFVTRV9IQUxfU1JBTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKIC8qIFNSQU0gY2FsbGJhY2sgcmVnaXN0ZXJpbmcvdW5yZWdpc3RlcmluZyAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fUmVnaXN0ZXJDYWxsYmFjayhTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCBIQUxfU1JBTV9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkLCBwU1JBTV9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1JlZ2lzdGVyQ2FsbGJhY2soU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSwgSEFMX1NSQU1fQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNSQU1fQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9VblJlZ2lzdGVyQ2FsbGJhY2soU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSwgSEFMX1NSQU1fQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9SZWdpc3RlckRtYUNhbGxiYWNrKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIEhBTF9TUkFNX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSWQsIHBTUkFNX0RtYUNhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fUmVnaXN0ZXJEbWFDYWxsYmFjayhTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCBIQUxfU1JBTV9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU1JBTV9EbWFDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKICNlbmRpZgogCiAvKioKQEAgLTE3OSw4ICsxOTAsOCBAQAogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgU1JBTV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIENvbnRyb2wgZnVuY3Rpb25zCi0gKiBAewotICovCisgICogQHsKKyAgKi8KIAogLyogU1JBTSBDb250cm9sIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1dyaXRlT3BlcmF0aW9uX0VuYWJsZShTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtKTsKQEAgLTE5MSw4ICsyMDIsOCBAQAogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgU1JBTV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA0IFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCi0gKiBAewotICovCisgICogQHsKKyAgKi8KIAogLyogU1JBTSAgU3RhdGUgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9TUkFNX1N0YXRlVHlwZURlZiBIQUxfU1JBTV9HZXRTdGF0ZShTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtKTsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfaGFsX3RpbS5oIGIvSW5jL3N0bTMybDR4eF9oYWxfdGltLmgKaW5kZXggZTBmZmY4Yi4uOWQxNzRjMCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfdGltLmgKKysrIGIvSW5jL3N0bTMybDR4eF9oYWxfdGltLmgKQEAgLTMwNSw2ICszMDUsMjYgQEAKIH0gSEFMX1RJTV9TdGF0ZVR5cGVEZWY7CiAKIC8qKgorICAqIEBicmllZiAgVElNIENoYW5uZWwgU3RhdGVzIGRlZmluaXRpb24KKyAgKi8KK3R5cGVkZWYgZW51bQoreworICBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQgICAgICAgICAgICAgPSAweDAwVSwgICAgLyohPCBUSU0gQ2hhbm5lbCBpbml0aWFsIHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSAgICAgICAgICAgICA9IDB4MDFVLCAgICAvKiE8IFRJTSBDaGFubmVsIHJlYWR5IGZvciB1c2UgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kgICAgICAgICAgICAgID0gMHgwMlUsICAgIC8qITwgQW4gaW50ZXJuYWwgcHJvY2VzcyBpcyBvbmdvaW5nIG9uIHRoZSBUSU0gY2hhbm5lbCAqLworfSBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWY7CisKKy8qKgorICAqIEBicmllZiAgRE1BIEJ1cnN0IFN0YXRlcyBkZWZpbml0aW9uCisgICovCit0eXBlZGVmIGVudW0KK3sKKyAgSEFMX0RNQV9CVVJTVF9TVEFURV9SRVNFVCAgICAgICAgICAgICA9IDB4MDBVLCAgICAvKiE8IERNQSBCdXJzdCBpbml0aWFsIHN0YXRlICovCisgIEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFkgICAgICAgICAgICAgPSAweDAxVSwgICAgLyohPCBETUEgQnVyc3QgcmVhZHkgZm9yIHVzZSAqLworICBIQUxfRE1BX0JVUlNUX1NUQVRFX0JVU1kgICAgICAgICAgICAgID0gMHgwMlUsICAgIC8qITwgT25nb2luZyBETUEgQnVyc3QgICAgICAgKi8KK30gSEFMX1RJTV9ETUFCdXJzdFN0YXRlVHlwZURlZjsKKworLyoqCiAgICogQGJyaWVmICBIQUwgQWN0aXZlIGNoYW5uZWwgc3RydWN0dXJlcyBkZWZpbml0aW9uCiAgICovCiB0eXBlZGVmIGVudW0KQEAgLTMyNywxMyArMzQ3LDE2IEBACiB0eXBlZGVmIHN0cnVjdAogI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogewotICBUSU1fVHlwZURlZiAgICAgICAgICAgICAgICAgKkluc3RhbmNlOyAgICAgLyohPCBSZWdpc3RlciBiYXNlIGFkZHJlc3MgICAgICAgICAgICAgKi8KLSAgVElNX0Jhc2VfSW5pdFR5cGVEZWYgICAgICAgIEluaXQ7ICAgICAgICAgIC8qITwgVElNIFRpbWUgQmFzZSByZXF1aXJlZCBwYXJhbWV0ZXJzICovCi0gIEhBTF9USU1fQWN0aXZlQ2hhbm5lbCAgICAgICBDaGFubmVsOyAgICAgICAvKiE8IEFjdGl2ZSBjaGFubmVsICAgICAgICAgICAgICAgICAgICAqLwotICBETUFfSGFuZGxlVHlwZURlZiAgICAgICAgICAgKmhkbWFbN107ICAgICAgLyohPCBETUEgSGFuZGxlcnMgYXJyYXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhcnJheSBpcyBhY2Nlc3NlZCBieSBhIEByZWYgRE1BX0hhbmRsZV9pbmRleCAqLwotICBIQUxfTG9ja1R5cGVEZWYgICAgICAgICAgICAgTG9jazsgICAgICAgICAgLyohPCBMb2NraW5nIG9iamVjdCAgICAgICAgICAgICAgICAgICAgKi8KLSAgX19JTyBIQUxfVElNX1N0YXRlVHlwZURlZiAgIFN0YXRlOyAgICAgICAgIC8qITwgVElNIG9wZXJhdGlvbiBzdGF0ZSAgICAgICAgICAgICAgICovCisgIFRJTV9UeXBlRGVmICAgICAgICAgICAgICAgICAgICAgICAgKkluc3RhbmNlOyAgICAgICAgIC8qITwgUmVnaXN0ZXIgYmFzZSBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBUSU1fQmFzZV9Jbml0VHlwZURlZiAgICAgICAgICAgICAgIEluaXQ7ICAgICAgICAgICAgICAvKiE8IFRJTSBUaW1lIEJhc2UgcmVxdWlyZWQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgKi8KKyAgSEFMX1RJTV9BY3RpdmVDaGFubmVsICAgICAgICAgICAgICBDaGFubmVsOyAgICAgICAgICAgLyohPCBBY3RpdmUgY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIERNQV9IYW5kbGVUeXBlRGVmICAgICAgICAgICAgICAgICAgKmhkbWFbN107ICAgICAgICAgIC8qITwgRE1BIEhhbmRsZXJzIGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhcnJheSBpcyBhY2Nlc3NlZCBieSBhIEByZWYgRE1BX0hhbmRsZV9pbmRleCAqLworICBIQUxfTG9ja1R5cGVEZWYgICAgICAgICAgICAgICAgICAgIExvY2s7ICAgICAgICAgICAgICAvKiE8IExvY2tpbmcgb2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyBIQUxfVElNX1N0YXRlVHlwZURlZiAgICAgICAgICBTdGF0ZTsgICAgICAgICAgICAgLyohPCBUSU0gb3BlcmF0aW9uIHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmICAgQ2hhbm5lbFN0YXRlWzZdOyAgIC8qITwgVElNIGNoYW5uZWwgb3BlcmF0aW9uIHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiAgIENoYW5uZWxOU3RhdGVbNF07ICAvKiE8IFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgb3BlcmF0aW9uIHN0YXRlICAgICAgICAgKi8KKyAgX19JTyBIQUxfVElNX0RNQUJ1cnN0U3RhdGVUeXBlRGVmICBETUFCdXJzdFN0YXRlOyAgICAgLyohPCBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICNpZiAoVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIHZvaWQgKCogQmFzZV9Nc3BJbml0Q2FsbGJhY2spKHN0cnVjdCBfX1RJTV9IYW5kbGVUeXBlRGVmICpodGltKTsgICAgICAgICAgICAgIC8qITwgVElNIEJhc2UgTXNwIEluaXQgQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzczLDM1ICszOTYsMzUgQEAKICAgKi8KIHR5cGVkZWYgZW51bQogewotICAgSEFMX1RJTV9CQVNFX01TUElOSVRfQ0JfSUQgICAgICAgICAgICA9IDB4MDBVICAgIC8qITwgVElNIEJhc2UgTXNwSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICxIQUxfVElNX0JBU0VfTVNQREVJTklUX0NCX0lEICAgICAgICAgID0gMHgwMVUgICAgLyohPCBUSU0gQmFzZSBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fSUNfTVNQSU5JVF9DQl9JRCAgICAgICAgICAgICAgPSAweDAyVSAgICAvKiE8IFRJTSBJQyBNc3BJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAsSEFMX1RJTV9JQ19NU1BERUlOSVRfQ0JfSUQgICAgICAgICAgICA9IDB4MDNVICAgIC8qITwgVElNIElDIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICxIQUxfVElNX09DX01TUElOSVRfQ0JfSUQgICAgICAgICAgICAgID0gMHgwNFUgICAgLyohPCBUSU0gT0MgTXNwSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fT0NfTVNQREVJTklUX0NCX0lEICAgICAgICAgICAgPSAweDA1VSAgICAvKiE8IFRJTSBPQyBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAsSEFMX1RJTV9QV01fTVNQSU5JVF9DQl9JRCAgICAgICAgICAgICA9IDB4MDZVICAgIC8qITwgVElNIFBXTSBNc3BJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICxIQUxfVElNX1BXTV9NU1BERUlOSVRfQ0JfSUQgICAgICAgICAgID0gMHgwN1UgICAgLyohPCBUSU0gUFdNIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fT05FX1BVTFNFX01TUElOSVRfQ0JfSUQgICAgICAgPSAweDA4VSAgICAvKiE8IFRJTSBPbmUgUHVsc2UgTXNwSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAsSEFMX1RJTV9PTkVfUFVMU0VfTVNQREVJTklUX0NCX0lEICAgICA9IDB4MDlVICAgIC8qITwgVElNIE9uZSBQdWxzZSBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICovCi0gICxIQUxfVElNX0VOQ09ERVJfTVNQSU5JVF9DQl9JRCAgICAgICAgID0gMHgwQVUgICAgLyohPCBUSU0gRW5jb2RlciBNc3BJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fRU5DT0RFUl9NU1BERUlOSVRfQ0JfSUQgICAgICAgPSAweDBCVSAgICAvKiE8IFRJTSBFbmNvZGVyIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAsSEFMX1RJTV9IQUxMX1NFTlNPUl9NU1BJTklUX0NCX0lEICAgICA9IDB4MENVICAgIC8qITwgVElNIEhhbGwgU2Vuc29yIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICovCi0gICxIQUxfVElNX0hBTExfU0VOU09SX01TUERFSU5JVF9DQl9JRCAgID0gMHgwRFUgICAgLyohPCBUSU0gSGFsbCBTZW5zb3IgTXNwRGVJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fUEVSSU9EX0VMQVBTRURfQ0JfSUQgICAgICAgICAgPSAweDBFVSAgICAvKiE8IFRJTSBQZXJpb2QgRWxhcHNlZCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fUEVSSU9EX0VMQVBTRURfSEFMRl9DQl9JRCAgICAgPSAweDBGVSAgICAvKiE8IFRJTSBQZXJpb2QgRWxhcHNlZCBoYWxmIGNvbXBsZXRlIENhbGxiYWNrIElEICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fVFJJR0dFUl9DQl9JRCAgICAgICAgICAgICAgICAgPSAweDEwVSAgICAvKiE8IFRJTSBUcmlnZ2VyIENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fVFJJR0dFUl9IQUxGX0NCX0lEICAgICAgICAgICAgPSAweDExVSAgICAvKiE8IFRJTSBUcmlnZ2VyIGhhbGYgY29tcGxldGUgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgSEFMX1RJTV9CQVNFX01TUElOSVRfQ0JfSUQgICAgICAgICAgICAgID0gMHgwMFUgICAvKiE8IFRJTSBCYXNlIE1zcEluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAsIEhBTF9USU1fQkFTRV9NU1BERUlOSVRfQ0JfSUQgICAgICAgICAgPSAweDAxVSAgIC8qITwgVElNIEJhc2UgTXNwRGVJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9JQ19NU1BJTklUX0NCX0lEICAgICAgICAgICAgICA9IDB4MDJVICAgLyohPCBUSU0gSUMgTXNwSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLCBIQUxfVElNX0lDX01TUERFSU5JVF9DQl9JRCAgICAgICAgICAgID0gMHgwM1UgICAvKiE8IFRJTSBJQyBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAsIEhBTF9USU1fT0NfTVNQSU5JVF9DQl9JRCAgICAgICAgICAgICAgPSAweDA0VSAgIC8qITwgVElNIE9DIE1zcEluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9PQ19NU1BERUlOSVRfQ0JfSUQgICAgICAgICAgICA9IDB4MDVVICAgLyohPCBUSU0gT0MgTXNwRGVJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLCBIQUxfVElNX1BXTV9NU1BJTklUX0NCX0lEICAgICAgICAgICAgID0gMHgwNlUgICAvKiE8IFRJTSBQV00gTXNwSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAsIEhBTF9USU1fUFdNX01TUERFSU5JVF9DQl9JRCAgICAgICAgICAgPSAweDA3VSAgIC8qITwgVElNIFBXTSBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9PTkVfUFVMU0VfTVNQSU5JVF9DQl9JRCAgICAgICA9IDB4MDhVICAgLyohPCBUSU0gT25lIFB1bHNlIE1zcEluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLCBIQUxfVElNX09ORV9QVUxTRV9NU1BERUlOSVRfQ0JfSUQgICAgID0gMHgwOVUgICAvKiE8IFRJTSBPbmUgUHVsc2UgTXNwRGVJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAqLworICAsIEhBTF9USU1fRU5DT0RFUl9NU1BJTklUX0NCX0lEICAgICAgICAgPSAweDBBVSAgIC8qITwgVElNIEVuY29kZXIgTXNwSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9FTkNPREVSX01TUERFSU5JVF9DQl9JRCAgICAgICA9IDB4MEJVICAgLyohPCBUSU0gRW5jb2RlciBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLCBIQUxfVElNX0hBTExfU0VOU09SX01TUElOSVRfQ0JfSUQgICAgID0gMHgwQ1UgICAvKiE8IFRJTSBIYWxsIFNlbnNvciBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAqLworICAsIEhBTF9USU1fSEFMTF9TRU5TT1JfTVNQREVJTklUX0NCX0lEICAgPSAweDBEVSAgIC8qITwgVElNIEhhbGwgU2Vuc29yIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9QRVJJT0RfRUxBUFNFRF9DQl9JRCAgICAgICAgICA9IDB4MEVVICAgLyohPCBUSU0gUGVyaW9kIEVsYXBzZWQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9QRVJJT0RfRUxBUFNFRF9IQUxGX0NCX0lEICAgICA9IDB4MEZVICAgLyohPCBUSU0gUGVyaW9kIEVsYXBzZWQgaGFsZiBjb21wbGV0ZSBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9UUklHR0VSX0NCX0lEICAgICAgICAgICAgICAgICA9IDB4MTBVICAgLyohPCBUSU0gVHJpZ2dlciBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9UUklHR0VSX0hBTEZfQ0JfSUQgICAgICAgICAgICA9IDB4MTFVICAgLyohPCBUSU0gVHJpZ2dlciBoYWxmIGNvbXBsZXRlIENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgLEhBTF9USU1fSUNfQ0FQVFVSRV9DQl9JRCAgICAgICAgICAgICAgPSAweDEyVSAgICAvKiE8IFRJTSBJbnB1dCBDYXB0dXJlIENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fSUNfQ0FQVFVSRV9IQUxGX0NCX0lEICAgICAgICAgPSAweDEzVSAgICAvKiE8IFRJTSBJbnB1dCBDYXB0dXJlIGhhbGYgY29tcGxldGUgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fT0NfREVMQVlfRUxBUFNFRF9DQl9JRCAgICAgICAgPSAweDE0VSAgICAvKiE8IFRJTSBPdXRwdXQgQ29tcGFyZSBEZWxheSBFbGFwc2VkIENhbGxiYWNrIElEICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fUFdNX1BVTFNFX0ZJTklTSEVEX0NCX0lEICAgICAgPSAweDE1VSAgICAvKiE8IFRJTSBQV00gUHVsc2UgRmluaXNoZWQgQ2FsbGJhY2sgSUQgICAgICAgICAgICovCi0gICxIQUxfVElNX1BXTV9QVUxTRV9GSU5JU0hFRF9IQUxGX0NCX0lEID0gMHgxNlUgICAgLyohPCBUSU0gUFdNIFB1bHNlIEZpbmlzaGVkIGhhbGYgY29tcGxldGUgQ2FsbGJhY2sgSUQgICAgICAgICAgICovCi0gICxIQUxfVElNX0VSUk9SX0NCX0lEICAgICAgICAgICAgICAgICAgID0gMHgxN1UgICAgLyohPCBUSU0gRXJyb3IgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICxIQUxfVElNX0NPTU1VVEFUSU9OX0NCX0lEICAgICAgICAgICAgID0gMHgxOFUgICAgLyohPCBUSU0gQ29tbXV0YXRpb24gQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICxIQUxfVElNX0NPTU1VVEFUSU9OX0hBTEZfQ0JfSUQgICAgICAgID0gMHgxOVUgICAgLyohPCBUSU0gQ29tbXV0YXRpb24gaGFsZiBjb21wbGV0ZSBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICovCi0gICxIQUxfVElNX0JSRUFLX0NCX0lEICAgICAgICAgICAgICAgICAgID0gMHgxQVUgICAgLyohPCBUSU0gQnJlYWsgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICxIQUxfVElNX0JSRUFLMl9DQl9JRCAgICAgICAgICAgICAgICAgID0gMHgxQlUgICAgLyohPCBUSU0gQnJlYWsyIENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9JQ19DQVBUVVJFX0NCX0lEICAgICAgICAgICAgICA9IDB4MTJVICAgLyohPCBUSU0gSW5wdXQgQ2FwdHVyZSBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9JQ19DQVBUVVJFX0hBTEZfQ0JfSUQgICAgICAgICA9IDB4MTNVICAgLyohPCBUSU0gSW5wdXQgQ2FwdHVyZSBoYWxmIGNvbXBsZXRlIENhbGxiYWNrIElEICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9PQ19ERUxBWV9FTEFQU0VEX0NCX0lEICAgICAgICA9IDB4MTRVICAgLyohPCBUSU0gT3V0cHV0IENvbXBhcmUgRGVsYXkgRWxhcHNlZCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9QV01fUFVMU0VfRklOSVNIRURfQ0JfSUQgICAgICA9IDB4MTVVICAgLyohPCBUSU0gUFdNIFB1bHNlIEZpbmlzaGVkIENhbGxiYWNrIElEICAgICAgICAgICAqLworICAsIEhBTF9USU1fUFdNX1BVTFNFX0ZJTklTSEVEX0hBTEZfQ0JfSUQgPSAweDE2VSAgIC8qITwgVElNIFBXTSBQdWxzZSBGaW5pc2hlZCBoYWxmIGNvbXBsZXRlIENhbGxiYWNrIElEICAgICAgICAgICAqLworICAsIEhBTF9USU1fRVJST1JfQ0JfSUQgICAgICAgICAgICAgICAgICAgPSAweDE3VSAgIC8qITwgVElNIEVycm9yIENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAsIEhBTF9USU1fQ09NTVVUQVRJT05fQ0JfSUQgICAgICAgICAgICAgPSAweDE4VSAgIC8qITwgVElNIENvbW11dGF0aW9uIENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAsIEhBTF9USU1fQ09NTVVUQVRJT05fSEFMRl9DQl9JRCAgICAgICAgPSAweDE5VSAgIC8qITwgVElNIENvbW11dGF0aW9uIGhhbGYgY29tcGxldGUgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAqLworICAsIEhBTF9USU1fQlJFQUtfQ0JfSUQgICAgICAgICAgICAgICAgICAgPSAweDFBVSAgIC8qITwgVElNIEJyZWFrIENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAsIEhBTF9USU1fQlJFQUsyX0NCX0lEICAgICAgICAgICAgICAgICAgPSAweDFCVSAgIC8qITwgVElNIEJyZWFrMiBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogfSBIQUxfVElNX0NhbGxiYWNrSURUeXBlRGVmOwogCiAvKioKQEAgLTg3OCw3ICs5MDEsNyBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIFRJTV9BVVRPTUFUSUNPVVRQVVRfRElTQUJMRSAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTU9FIGNhbiBiZSBzZXQgb25seSBieSBzb2Z0d2FyZSAqLwotI2RlZmluZSBUSU1fQVVUT01BVElDT1VUUFVUX0VOQUJMRSAgICAgICAgIFRJTV9CRFRSX0FPRSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1PRSBjYW4gYmUgc2V0IGJ5IHNvZnR3YXJlIG9yIGF1dG9tYXRpY2FsbHkgYXQgdGhlIG5leHQgdXBkYXRlIGV2ZW50IAorI2RlZmluZSBUSU1fQVVUT01BVElDT1VUUFVUX0VOQUJMRSAgICAgICAgIFRJTV9CRFRSX0FPRSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1PRSBjYW4gYmUgc2V0IGJ5IHNvZnR3YXJlIG9yIGF1dG9tYXRpY2FsbHkgYXQgdGhlIG5leHQgdXBkYXRlIGV2ZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgbm9uZSBvZiB0aGUgYnJlYWsgaW5wdXRzIEJSSyBhbmQgQlJLMiBpcyBhY3RpdmUpICovCiAvKioKICAgKiBAfQpAQCAtMTEwMCwyNSArMTEyMyw0OSBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2lmIChVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSNkZWZpbmUgX19IQUxfVElNX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlN0YXRlICAgICAgICAgICAgID0gSEFMX1RJTV9TVEFURV9SRVNFVDsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5CYXNlX01zcEluaXRDYWxsYmFjayAgICAgICAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+QmFzZV9Nc3BEZUluaXRDYWxsYmFjayAgICAgICA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPklDX01zcEluaXRDYWxsYmFjayAgICAgICAgICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5JQ19Nc3BEZUluaXRDYWxsYmFjayAgICAgICAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+T0NfTXNwSW5pdENhbGxiYWNrICAgICAgICAgICA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk9DX01zcERlSW5pdENhbGxiYWNrICAgICAgICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5QV01fTXNwSW5pdENhbGxiYWNrICAgICAgICAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+UFdNX01zcERlSW5pdENhbGxiYWNrICAgICAgICA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk9uZVB1bHNlX01zcEluaXRDYWxsYmFjayAgICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5PbmVQdWxzZV9Nc3BEZUluaXRDYWxsYmFjayAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+RW5jb2Rlcl9Nc3BJbml0Q2FsbGJhY2sgICAgICA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkVuY29kZXJfTXNwRGVJbml0Q2FsbGJhY2sgICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5IYWxsU2Vuc29yX01zcEluaXRDYWxsYmFjayAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SGFsbFNlbnNvcl9Nc3BEZUluaXRDYWxsYmFjayA9IE5VTEw7ICAgICBcCisjZGVmaW5lIF9fSEFMX1RJTV9SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+U3RhdGUgICAgICAgICAgICA9IEhBTF9USU1fU1RBVEVfUkVTRVQ7ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMF0gID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVsxXSAgPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzJdICA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbM10gID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVs0XSAgPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzVdICA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzBdID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMV0gPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVsyXSA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzNdID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkRNQUJ1cnN0U3RhdGUgICAgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFU0VUOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+QmFzZV9Nc3BJbml0Q2FsbGJhY2sgICAgICAgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5CYXNlX01zcERlSW5pdENhbGxiYWNrICAgICAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPklDX01zcEluaXRDYWxsYmFjayAgICAgICAgICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SUNfTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5PQ19Nc3BJbml0Q2FsbGJhY2sgICAgICAgICAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk9DX01zcERlSW5pdENhbGxiYWNrICAgICAgICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+UFdNX01zcEluaXRDYWxsYmFjayAgICAgICAgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5QV01fTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk9uZVB1bHNlX01zcEluaXRDYWxsYmFjayAgICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+T25lUHVsc2VfTXNwRGVJbml0Q2FsbGJhY2sgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5FbmNvZGVyX01zcEluaXRDYWxsYmFjayAgICAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkVuY29kZXJfTXNwRGVJbml0Q2FsbGJhY2sgICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SGFsbFNlbnNvcl9Nc3BJbml0Q2FsbGJhY2sgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5IYWxsU2Vuc29yX01zcERlSW5pdENhbGxiYWNrID0gTlVMTDsgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKICNlbHNlCi0jZGVmaW5lIF9fSEFMX1RJTV9SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgKChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFU0VUKQorI2RlZmluZSBfX0hBTF9USU1fUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlN0YXRlICAgICAgICAgICAgPSBIQUxfVElNX1NUQVRFX1JFU0VUOyAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzBdICA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMV0gID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVsyXSAgPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzNdICA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbNF0gID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVs1XSAgPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVswXSA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzFdID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMl0gPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVszXSA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5ETUFCdXJzdFN0YXRlICAgID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRVNFVDsgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKICNlbmRpZiAvKiBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogLyoqCkBAIC0xOTIxLDE1ICsxOTY4LDE1IEBACiAjZGVmaW5lIElTX1RJTV9USTFTRUxFQ1RJT04oX19USTFTRUxFQ1RJT05fXykgICgoKF9fVEkxU0VMRUNUSU9OX18pID09IFRJTV9USTFTRUxFQ1RJT05fQ0gxKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVEkxU0VMRUNUSU9OX18pID09IFRJTV9USTFTRUxFQ1RJT05fWE9SQ09NQklOQVRJT04pKQogCi0jZGVmaW5lIElTX1RJTV9ETUFfTEVOR1RIKF9fTEVOR1RIX18pICAgICAgKCgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzFUUkFOU0ZFUikgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTEVOR1RIX18pID09IFRJTV9ETUFCVVJTVExFTkdUSF8yVFJBTlNGRVJTKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzNUUkFOU0ZFUlMpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfNFRSQU5TRkVSUykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTEVOR1RIX18pID09IFRJTV9ETUFCVVJTVExFTkdUSF81VFJBTlNGRVJTKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzZUUkFOU0ZFUlMpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfN1RSQU5TRkVSUykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTEVOR1RIX18pID09IFRJTV9ETUFCVVJTVExFTkdUSF84VFJBTlNGRVJTKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzlUUkFOU0ZFUlMpIHx8IFwKKyNkZWZpbmUgSVNfVElNX0RNQV9MRU5HVEgoX19MRU5HVEhfXykgICAgICAoKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfMVRSQU5TRkVSKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfMlRSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfM1RSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfNFRSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfNVRSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfNlRSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfN1RSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfOFRSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfOVRSQU5TRkVSUykgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfMTBUUkFOU0ZFUlMpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfMTFUUkFOU0ZFUlMpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfMTJUUkFOU0ZFUlMpIHx8IFwKQEAgLTE5NDAsNiArMTk4Nyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzE3VFJBTlNGRVJTKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzE4VFJBTlNGRVJTKSkKIAorI2RlZmluZSBJU19USU1fRE1BX0RBVEFfTEVOR1RIKExFTkdUSCkgKCgoTEVOR1RIKSA+PSAweDFVKSAmJiAoKExFTkdUSCkgPCAweDEwMDAwVSkpCisKICNkZWZpbmUgSVNfVElNX0lDX0ZJTFRFUihfX0lDRklMVEVSX18pICAgKChfX0lDRklMVEVSX18pIDw9IDB4RlUpCiAKICNkZWZpbmUgSVNfVElNX0RFQURUSU1FKF9fREVBRFRJTUVfXykgICAgKChfX0RFQURUSU1FX18pIDw9IDB4RkZVKQpAQCAtMTk3Niw2ICsyMDI1LDUwIEBACiAgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8zKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSICY9IH4oVElNX0NDRVJfQ0MzUCB8IFRJTV9DQ0VSX0NDM05QKSkgOlwKICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSICY9IH4oVElNX0NDRVJfQ0M0UCB8IFRJTV9DQ0VSX0NDNE5QKSkpCiAKKyNkZWZpbmUgVElNX0NIQU5ORUxfU1RBVEVfR0VUKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fKVwKKyAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMF0gOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMV0gOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMl0gOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzQpID8gKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbM10gOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzUpID8gKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbNF0gOlwKKyAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzVdKQorICAgIAorI2RlZmluZSBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoX19IQU5ETEVfXywgX19DSEFOTkVMX18sIF9fQ0hBTk5FTF9TVEFURV9fKSBcCisgICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/ICgoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVswXSA9IChfX0NIQU5ORUxfU1RBVEVfXykpIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSA/ICgoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVsxXSA9IChfX0NIQU5ORUxfU1RBVEVfXykpIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8zKSA/ICgoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVsyXSA9IChfX0NIQU5ORUxfU1RBVEVfXykpIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF80KSA/ICgoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVszXSA9IChfX0NIQU5ORUxfU1RBVEVfXykpIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF81KSA/ICgoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVs0XSA9IChfX0NIQU5ORUxfU1RBVEVfXykpIDpcCisgICAoKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbNV0gPSAoX19DSEFOTkVMX1NUQVRFX18pKSkKKworI2RlZmluZSBUSU1fQ0hBTk5FTF9TVEFURV9TRVRfQUxMKF9fSEFORExFX18sICBfX0NIQU5ORUxfU1RBVEVfXykgZG8geyBcCisgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzBdICA9IChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCisgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzFdICA9IChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCisgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzJdICA9IChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCisgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzNdICA9IChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCisgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzRdICA9IChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCisgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzVdICA9IChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCisgfSB3aGlsZSgwKQorCisjZGVmaW5lIFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fKVwKKyAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzBdIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSA/IChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVsxXSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMykgPyAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMl0gOlwKKyAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVszXSkKKyAgICAKKyNkZWZpbmUgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoX19IQU5ETEVfXywgX19DSEFOTkVMX18sIF9fQ0hBTk5FTF9TVEFURV9fKSBcCisgICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/ICgoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMF0gPSAoX19DSEFOTkVMX1NUQVRFX18pKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMikgPyAoKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzFdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVsyXSA9IChfX0NIQU5ORUxfU1RBVEVfXykpIDpcCisgICAoKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzNdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkpCisKKyNkZWZpbmUgVElNX0NIQU5ORUxfTl9TVEFURV9TRVRfQUxMKF9fSEFORExFX18sICBfX0NIQU5ORUxfU1RBVEVfXykgZG8geyBcCisgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVswXSA9IChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCisgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVsxXSA9IChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCisgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVsyXSA9IChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCisgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVszXSA9IChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCisgfSB3aGlsZSgwKQorCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjE0Nyw5ICsyMjQwLDE1IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX1NsYXZlQ29uZmlnU3luY2hyb19JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgVElNX1NsYXZlQ29uZmlnVHlwZURlZiAqc1NsYXZlQ29uZmlnKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RfV3JpdGVTdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RCYXNlQWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMsIHVpbnQzMl90ICAqQnVyc3RCdWZmZXIsIHVpbnQzMl90ICBCdXJzdExlbmd0aCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X011bHRpV3JpdGVTdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RCYXNlQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgdWludDMyX3QgKkJ1cnN0QnVmZmVyLCB1aW50MzJfdCBCdXJzdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IERhdGFMZW5ndGgpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9Xcml0ZVN0b3AoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X1JlYWRTdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RCYXNlQWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgdWludDMyX3QgICpCdXJzdEJ1ZmZlciwgdWludDMyX3QgIEJ1cnN0TGVuZ3RoKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RfTXVsdGlSZWFkU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IEJ1cnN0QmFzZUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgdWludDMyX3QgICpCdXJzdEJ1ZmZlciwgdWludDMyX3QgIEJ1cnN0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgRGF0YUxlbmd0aCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X1JlYWRTdG9wKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9HZW5lcmF0ZUV2ZW50KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBFdmVudFNvdXJjZSk7CiB1aW50MzJfdCBIQUxfVElNX1JlYWRDYXB0dXJlZFZhbHVlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKTsKQEAgLTIxOTUsNiArMjI5NCwxMSBAQAogSEFMX1RJTV9TdGF0ZVR5cGVEZWYgSEFMX1RJTV9JQ19HZXRTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CiBIQUxfVElNX1N0YXRlVHlwZURlZiBIQUxfVElNX09uZVB1bHNlX0dldFN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKIEhBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9HZXRTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CisKKy8qIFBlcmlwaGVyYWwgQ2hhbm5lbCBzdGF0ZSBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0hBTF9USU1fQWN0aXZlQ2hhbm5lbCBIQUxfVElNX0dldEFjdGl2ZUNoYW5uZWwoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pOworSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIEhBTF9USU1fR2V0Q2hhbm5lbFN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCAgdWludDMyX3QgQ2hhbm5lbCk7CitIQUxfVElNX0RNQUJ1cnN0U3RhdGVUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CiAvKioKICAgKiBAfQogICAqLwpAQCAtMjIxNCw3ICsyMzE4LDYgQEAKIHZvaWQgVElNX0VUUl9TZXRDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IFRJTV9FeHRUUkdQcmVzY2FsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRJTV9FeHRUUkdQb2xhcml0eSwgdWludDMyX3QgRXh0VFJHRmlsdGVyKTsKIAotdm9pZCBUSU1fRE1BRGVsYXlQdWxzZUNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogdm9pZCBUSU1fRE1BRGVsYXlQdWxzZUhhbGZDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHZvaWQgVElNX0RNQUVycm9yKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHZvaWQgVElNX0RNQUNhcHR1cmVDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfaGFsX3RpbV9leC5oIGIvSW5jL3N0bTMybDR4eF9oYWxfdGltX2V4LmgKaW5kZXggNzRjNDFiYy4uYjY5OWE1YSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfdGltX2V4LmgKKysrIGIvSW5jL3N0bTMybDR4eF9oYWxfdGltX2V4LmgKQEAgLTQwMiw2ICs0MDIsNyBAQAogICAqLwogLyogRXh0ZW5kZWQgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1FeF9IYWxsU2Vuc29yX0dldFN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKK0hBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBIQUxfVElNRXhfR2V0Q2hhbm5lbE5TdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgIHVpbnQzMl90IENoYW5uZWxOKTsKIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2hhbF90c2MuaCBiL0luYy9zdG0zMmw0eHhfaGFsX3RzYy5oCmluZGV4IDkyMTVkNzMuLjk3ZGIyODcgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfaGFsX3RzYy5oCisrKyBiL0luYy9zdG0zMmw0eHhfaGFsX3RzYy5oCkBAIC0yOCw2ICsyOCw3IEBACiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2luY2x1ZGUgInN0bTMybDR4eF9oYWxfZGVmLmgiCiAKKwogLyoqIEBhZGR0b2dyb3VwIFNUTTMyTDR4eF9IQUxfRHJpdmVyCiAgICogQHsKICAgKi8KQEAgLTEwNiwxMyArMTA3LDE3IEBACiAvKioKICAgKiBAYnJpZWYgIFRTQyBoYW5kbGUgU3RydWN0dXJlIGRlZmluaXRpb24KICAgKi8KKyNpZiAoVVNFX0hBTF9UU0NfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiB0eXBlZGVmIHN0cnVjdCBfX1RTQ19IYW5kbGVUeXBlRGVmCisjZWxzZQordHlwZWRlZiBzdHJ1Y3QKKyNlbmRpZiAgLyogVVNFX0hBTF9UU0NfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiB7CiAgIFRTQ19UeXBlRGVmICAgICAgICAgICAgICAgKkluc3RhbmNlOyAgLyohPCBSZWdpc3RlciBiYXNlIGFkZHJlc3MgICAgICAqLwogICBUU0NfSW5pdFR5cGVEZWYgICAgICAgICAgIEluaXQ7ICAgICAgIC8qITwgSW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyAgKi8KICAgX19JTyBIQUxfVFNDX1N0YXRlVHlwZURlZiBTdGF0ZTsgICAgICAvKiE8IFBlcmlwaGVyYWwgc3RhdGUgICAgICAgICAgICovCiAgIEhBTF9Mb2NrVHlwZURlZiAgICAgICAgICAgTG9jazsgICAgICAgLyohPCBMb2NrIGZlYXR1cmUgICAgICAgICAgICAgICAqLwotICBfX0lPIHVpbnQzMl90ICAgICAgICAgICAgIEVycm9yQ29kZTsgIC8qITwgSTJDIEVycm9yIGNvZGUgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgICAgICAgICAgICBFcnJvckNvZGU7ICAvKiE8IFRTQyBFcnJvciBjb2RlICAgICAgICAgICAgICovCiAKICNpZiAoVVNFX0hBTF9UU0NfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIHZvaWQgKCogQ29udkNwbHRDYWxsYmFjaykoc3RydWN0IF9fVFNDX0hhbmRsZVR5cGVEZWYgKmh0c2MpOyAgIC8qITwgVFNDIENvbnZlcnNpb24gY29tcGxldGUgY2FsbGJhY2sgICovCkBAIC02OTksNyArNzA0LDggQEAKIAogCiAjZGVmaW5lIElTX1RTQ19HUk9VUChfX1ZBTFVFX18pICAgICAgICAoKCgoX19WQUxVRV9fKSAmIFRTQ19HUk9VUFhfTk9UX1NVUFBPUlRFRCkgIT0gVFNDX0dST1VQWF9OT1RfU1VQUE9SVEVEKSAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKF9fVkFMVUVfXykgJiBUU0NfR1JPVVAxX0lPMSkgPT0gVFNDX0dST1VQMV9JTzEpIHx8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fVkFMVUVfXykgPT0gMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19WQUxVRV9fKSAmIFRTQ19HUk9VUDFfSU8xKSA9PSBUU0NfR1JPVVAxX0lPMSkgfHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fVkFMVUVfXykgJiBUU0NfR1JPVVAxX0lPMikgPT0gVFNDX0dST1VQMV9JTzIpIHx8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX1ZBTFVFX18pICYgVFNDX0dST1VQMV9JTzMpID09IFRTQ19HUk9VUDFfSU8zKSB8fFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19WQUxVRV9fKSAmIFRTQ19HUk9VUDFfSU80KSA9PSBUU0NfR1JPVVAxX0lPNCkgfHxcCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2hhbF91YXJ0LmggYi9JbmMvc3RtMzJsNHh4X2hhbF91YXJ0LmgKaW5kZXggYjI3OGZhOC4uZWVlZjBjNSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfdWFydC5oCisrKyBiL0luYy9zdG0zMmw0eHhfaGFsX3VhcnQuaApAQCAtMTIwNCw3ICsxMjA0LDcgQEAKICAgKiBAcGFyYW0gIF9fQ0xPQ0tQUkVTQ0FMRVJfXyBVQVJUIHByZXNjYWxlciB2YWx1ZS4KICAgKiBAcmV0dmFsIERpdmlzaW9uIHJlc3VsdAogICAqLwotI2RlZmluZSBVQVJUX0RJVl9MUFVBUlQoX19QQ0xLX18sIF9fQkFVRF9fLCBfX0NMT0NLUFJFU0NBTEVSX18pICAgICAgKCh1aW50MzJfdCkoKCgoKHVpbnQ2NF90KShfX1BDTEtfXykvVUFSVF9HRVRfRElWX0ZBQ1RPUigoX19DTE9DS1BSRVNDQUxFUl9fKSkpKjI1NlUpXAorI2RlZmluZSBVQVJUX0RJVl9MUFVBUlQoX19QQ0xLX18sIF9fQkFVRF9fLCBfX0NMT0NLUFJFU0NBTEVSX18pICAgICAgKCh1aW50MzJfdCkoKCgoKCh1aW50NjRfdCkoX19QQ0xLX18pKS8oVUFSVFByZXNjVGFibGVbKF9fQ0xPQ0tQUkVTQ0FMRVJfXyldKSkqMjU2VSlcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAodWludDMyX3QpKChfX0JBVURfXykvMlUpKSAvIChfX0JBVURfXykpKQogCiAvKiogQGJyaWVmICBCUlIgZGl2aXNpb24gb3BlcmF0aW9uIHRvIHNldCBCUlIgcmVnaXN0ZXIgaW4gOC1iaXQgb3ZlcnNhbXBsaW5nIG1vZGUuCkBAIC0xMjEzLDcgKzEyMTMsNyBAQAogICAqIEBwYXJhbSAgX19DTE9DS1BSRVNDQUxFUl9fIFVBUlQgcHJlc2NhbGVyIHZhbHVlLgogICAqIEByZXR2YWwgRGl2aXNpb24gcmVzdWx0CiAgICovCi0jZGVmaW5lIFVBUlRfRElWX1NBTVBMSU5HOChfX1BDTEtfXywgX19CQVVEX18sIF9fQ0xPQ0tQUkVTQ0FMRVJfXykgICAoKCgoKF9fUENMS19fKS9VQVJUX0dFVF9ESVZfRkFDVE9SKChfX0NMT0NLUFJFU0NBTEVSX18pKSkqMlUpXAorI2RlZmluZSBVQVJUX0RJVl9TQU1QTElORzgoX19QQ0xLX18sIF9fQkFVRF9fLCBfX0NMT0NLUFJFU0NBTEVSX18pICAgKCgoKChfX1BDTEtfXykvVUFSVFByZXNjVGFibGVbKF9fQ0xPQ0tQUkVTQ0FMRVJfXyldKSoyVSlcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKChfX0JBVURfXykvMlUpKSAvIChfX0JBVURfXykpCiAKIC8qKiBAYnJpZWYgIEJSUiBkaXZpc2lvbiBvcGVyYXRpb24gdG8gc2V0IEJSUiByZWdpc3RlciBpbiAxNi1iaXQgb3ZlcnNhbXBsaW5nIG1vZGUuCkBAIC0xMjIyLDcgKzEyMjIsNyBAQAogICAqIEBwYXJhbSAgX19DTE9DS1BSRVNDQUxFUl9fIFVBUlQgcHJlc2NhbGVyIHZhbHVlLgogICAqIEByZXR2YWwgRGl2aXNpb24gcmVzdWx0CiAgICovCi0jZGVmaW5lIFVBUlRfRElWX1NBTVBMSU5HMTYoX19QQ0xLX18sIF9fQkFVRF9fLCBfX0NMT0NLUFJFU0NBTEVSX18pICAoKCgoX19QQ0xLX18pL1VBUlRfR0VUX0RJVl9GQUNUT1IoKF9fQ0xPQ0tQUkVTQ0FMRVJfXykpKVwKKyNkZWZpbmUgVUFSVF9ESVZfU0FNUExJTkcxNihfX1BDTEtfXywgX19CQVVEX18sIF9fQ0xPQ0tQUkVTQ0FMRVJfXykgICgoKChfX1BDTEtfXykvVUFSVFByZXNjVGFibGVbKF9fQ0xPQ0tQUkVTQ0FMRVJfXyldKVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoKF9fQkFVRF9fKS8yVSkpIC8gKF9fQkFVRF9fKSkKICNlbHNlCiAKQEAgLTE1NzEsNiArMTU3MSwxMyBAQAogLyogSW5jbHVkZSBVQVJUIEhBTCBFeHRlbmRlZCBtb2R1bGUgKi8KICNpbmNsdWRlICJzdG0zMmw0eHhfaGFsX3VhcnRfZXguaCIKIAorI2lmIGRlZmluZWQoVVNBUlRfUFJFU0NfUFJFU0NBTEVSKQorCisvKiBQcmVzY2FsZXIgVGFibGUgdXNlZCBpbiBCUlIgY29tcHV0YXRpb24gbWFjcm9zLgorICAgRGVjbGFyZWQgYXMgZXh0ZXJuIGhlcmUgdG8gYWxsb3cgdXNlIG9mIHByaXZhdGUgVUFSVCBtYWNyb3MsIG91dHNpZGUgb2YgSEFMIFVBUlQgZm9uY3Rpb25zICovCitleHRlcm4gY29uc3QgdWludDE2X3QgVUFSVFByZXNjVGFibGVbMTJdOworCisjZW5kaWYgLyogVVNBUlRfUFJFU0NfUFJFU0NBTEVSICovCiAKIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGFkZHRvZ3JvdXAgVUFSVF9FeHBvcnRlZF9GdW5jdGlvbnMgVUFSVCBFeHBvcnRlZCBGdW5jdGlvbnMKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfaGFsX3VzYXJ0LmggYi9JbmMvc3RtMzJsNHh4X2hhbF91c2FydC5oCmluZGV4IGM1ZDgyMWQuLmEwOTk0NGYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfaGFsX3VzYXJ0LmgKKysrIGIvSW5jL3N0bTMybDR4eF9oYWxfdXNhcnQuaApAQCAtNzQ0LDcgKzc0NCw3IEBACiAvKiogQGJyaWVmICBCUlIgZGl2aXNpb24gb3BlcmF0aW9uIHRvIHNldCBCUlIgcmVnaXN0ZXIgaW4gOC1iaXQgb3ZlcnNhbXBsaW5nIG1vZGUuCiAgICogQHBhcmFtICBfX1BDTEtfXyBVU0FSVCBjbG9jay4KICAgKiBAcGFyYW0gIF9fQkFVRF9fIEJhdWQgcmF0ZSBzZXQgYnkgdGhlIHVzZXIuCi0gICogQHBhcmFtICBfX0NMT0NLUFJFU0NBTEVSX18gVUFSVCBwcmVzY2FsZXIgdmFsdWUuCisgICogQHBhcmFtICBfX0NMT0NLUFJFU0NBTEVSX18gVVNBUlQgcHJlc2NhbGVyIHZhbHVlLgogICAqIEByZXR2YWwgRGl2aXNpb24gcmVzdWx0CiAgICovCiAjZGVmaW5lIFVTQVJUX0RJVl9TQU1QTElORzgoX19QQ0xLX18sIF9fQkFVRF9fLCBfX0NMT0NLUFJFU0NBTEVSX18pICAgKCgoKChfX1BDTEtfXykvVVNBUlRfR0VUX0RJVl9GQUNUT1IoX19DTE9DS1BSRVNDQUxFUl9fKSkqMlUpXApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9sbF9hZGMuaCBiL0luYy9zdG0zMmw0eHhfbGxfYWRjLmgKaW5kZXggNDMwNjBjNy4uNjg5NTI1MCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9sbF9hZGMuaAorKysgYi9JbmMvc3RtMzJsNHh4X2xsX2FkYy5oCkBAIC01OCw3ICs1OCw4IEBACiAjZGVmaW5lIEFEQ19TUVIzX1JFR09GRlNFVCAgICAgICAgICAgICAgICAgKDB4MDAwMDAyMDBVTCkKICNkZWZpbmUgQURDX1NRUjRfUkVHT0ZGU0VUICAgICAgICAgICAgICAgICAoMHgwMDAwMDMwMFVMKQogCi0jZGVmaW5lIEFEQ19SRUdfU1FSWF9SRUdPRkZTRVRfTUFTSyAgICAgICAgKEFEQ19TUVIxX1JFR09GRlNFVCB8IEFEQ19TUVIyX1JFR09GRlNFVCB8IEFEQ19TUVIzX1JFR09GRlNFVCB8IEFEQ19TUVI0X1JFR09GRlNFVCkKKyNkZWZpbmUgQURDX1JFR19TUVJYX1JFR09GRlNFVF9NQVNLICAgICAgICAoQURDX1NRUjFfUkVHT0ZGU0VUIHwgQURDX1NRUjJfUkVHT0ZGU0VUIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBRENfU1FSM19SRUdPRkZTRVQgfCBBRENfU1FSNF9SRUdPRkZTRVQpCiAjZGVmaW5lIEFEQ19TUVJYX1JFR09GRlNFVF9QT1MgICAgICAgICAgICAgKDhVTCkgLyogUG9zaXRpb24gb2YgYml0cyBBRENfU1FSeF9SRUdPRkZTRVQgaW4gQURDX1JFR19TUVJYX1JFR09GRlNFVF9NQVNLICovCiAjZGVmaW5lIEFEQ19SRUdfUkFOS19JRF9TUVJYX01BU0sgICAgICAgICAgKEFEQ19DSEFOTkVMX0lEX05VTUJFUl9NQVNLX1BPU0JJVDApCiAKQEAgLTk1LDcgKzk2LDggQEAKICNkZWZpbmUgQURDX0pEUjNfUkVHT0ZGU0VUICAgICAgICAgICAgICAgICAoMHgwMDAwMDIwMFVMKQogI2RlZmluZSBBRENfSkRSNF9SRUdPRkZTRVQgICAgICAgICAgICAgICAgICgweDAwMDAwMzAwVUwpCiAKLSNkZWZpbmUgQURDX0lOSl9KRFJYX1JFR09GRlNFVF9NQVNLICAgICAgICAoQURDX0pEUjFfUkVHT0ZGU0VUIHwgQURDX0pEUjJfUkVHT0ZGU0VUIHwgQURDX0pEUjNfUkVHT0ZGU0VUIHwgQURDX0pEUjRfUkVHT0ZGU0VUKQorI2RlZmluZSBBRENfSU5KX0pEUlhfUkVHT0ZGU0VUX01BU0sgICAgICAgIChBRENfSkRSMV9SRUdPRkZTRVQgfCBBRENfSkRSMl9SRUdPRkZTRVQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFEQ19KRFIzX1JFR09GRlNFVCB8IEFEQ19KRFI0X1JFR09GRlNFVCkKICNkZWZpbmUgQURDX0lOSl9SQU5LX0lEX0pTUVJfTUFTSyAgICAgICAgICAoQURDX0NIQU5ORUxfSURfTlVNQkVSX01BU0tfUE9TQklUMCkKICNkZWZpbmUgQURDX0pEUlhfUkVHT0ZGU0VUX1BPUyAgICAgICAgICAgICAoOFVMKSAvKiBQb3NpdGlvbiBvZiBiaXRzIEFEQ19KRFJ4X1JFR09GRlNFVCBpbiBBRENfSU5KX0pEUlhfUkVHT0ZGU0VUX01BU0sgKi8KIApAQCAtMTc4LDcgKzE4MCw4IEBACiAjZGVmaW5lIEFEQ19DSEFOTkVMX0lEX05VTUJFUl9NQVNLICAgICAgICAgKEFEQ19DRkdSX0FXRDFDSCkKICNkZWZpbmUgQURDX0NIQU5ORUxfSURfQklURklFTERfTUFTSyAgICAgICAoQURDX0FXRDJDUl9BV0QyQ0gpCiAjZGVmaW5lIEFEQ19DSEFOTkVMX0lEX05VTUJFUl9CSVRPRkZTRVRfUE9TICgyNlVMKS8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gYml0ZmllbGQgIkFEQ19DSEFOTkVMX0lEX05VTUJFUl9NQVNLIiBwb3NpdGlvbiBpbiByZWdpc3RlciAqLwotI2RlZmluZSBBRENfQ0hBTk5FTF9JRF9NQVNLICAgICAgICAgICAgICAgIChBRENfQ0hBTk5FTF9JRF9OVU1CRVJfTUFTSyB8IEFEQ19DSEFOTkVMX0lEX0JJVEZJRUxEX01BU0sgfCBBRENfQ0hBTk5FTF9JRF9JTlRFUk5BTF9DSF9NQVNLKQorI2RlZmluZSBBRENfQ0hBTk5FTF9JRF9NQVNLICAgICAgICAgICAgICAgIChBRENfQ0hBTk5FTF9JRF9OVU1CRVJfTUFTSyB8IEFEQ19DSEFOTkVMX0lEX0JJVEZJRUxEX01BU0sgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFEQ19DSEFOTkVMX0lEX0lOVEVSTkFMX0NIX01BU0spCiAvKiBFcXVpdmFsZW50IG1hc2sgb2YgQURDX0NIQU5ORUxfTlVNQkVSX01BU0sgYWxpZ25lZCBvbiByZWdpc3RlciBMU0IgKGJpdCAwKSAqLwogI2RlZmluZSBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfTUFTS19QT1NCSVQwIChBRENfU1FSMl9TUTUpIC8qIEVxdWl2YWxlbnQgdG8gc2hpZnQ6IChBRENfQ0hBTk5FTF9OVU1CRVJfTUFTSyA+PiBbUG9zaXRpb24gb2YgYml0ZmllbGQgIkFEQ19DSEFOTkVMX05VTUJFUl9NQVNLIiBpbiByZWdpc3Rlcl0pICovCiAKQEAgLTIwMCwyNCArMjAzLDI1IEBACiAvKiBEZWZpbml0aW9uIG9mIGNoYW5uZWxzIElEIG51bWJlciBpbmZvcm1hdGlvbiB0byBiZSBpbnNlcnRlZCBpbnRvICAgICAgICAgICAqLwogLyogY2hhbm5lbHMgbGl0ZXJhbHMgZGVmaW5pdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgQURDX0NIQU5ORUxfMF9OVU1CRVIgICAgICAgICAgICAgICAoMHgwMDAwMDAwMFVMKQotI2RlZmluZSBBRENfQ0hBTk5FTF8xX05VTUJFUiAgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0FXRDFDSF8wKQotI2RlZmluZSBBRENfQ0hBTk5FTF8yX05VTUJFUiAgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfQ0ZHUl9BV0QxQ0hfMSAgICAgICAgICAgICAgICAgICAgKQotI2RlZmluZSBBRENfQ0hBTk5FTF8zX05VTUJFUiAgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfQ0ZHUl9BV0QxQ0hfMSB8IEFEQ19DRkdSX0FXRDFDSF8wKQotI2RlZmluZSBBRENfQ0hBTk5FTF80X05VTUJFUiAgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NGR1JfQVdEMUNIXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotI2RlZmluZSBBRENfQ0hBTk5FTF81X05VTUJFUiAgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NGR1JfQVdEMUNIXzIgICAgICAgICAgICAgICAgICAgICB8IEFEQ19DRkdSX0FXRDFDSF8wKQotI2RlZmluZSBBRENfQ0hBTk5FTF82X05VTUJFUiAgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NGR1JfQVdEMUNIXzIgfCBBRENfQ0ZHUl9BV0QxQ0hfMSAgICAgICAgICAgICAgICAgICAgKQotI2RlZmluZSBBRENfQ0hBTk5FTF83X05VTUJFUiAgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NGR1JfQVdEMUNIXzIgfCBBRENfQ0ZHUl9BV0QxQ0hfMSB8IEFEQ19DRkdSX0FXRDFDSF8wKQotI2RlZmluZSBBRENfQ0hBTk5FTF84X05VTUJFUiAgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0FXRDFDSF8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotI2RlZmluZSBBRENfQ0hBTk5FTF85X05VTUJFUiAgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0FXRDFDSF8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFEQ19DRkdSX0FXRDFDSF8wKQotI2RlZmluZSBBRENfQ0hBTk5FTF8xMF9OVU1CRVIgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0FXRDFDSF8zICAgICAgICAgICAgICAgICAgICAgfCBBRENfQ0ZHUl9BV0QxQ0hfMSAgICAgICAgICAgICAgICAgICAgKQotI2RlZmluZSBBRENfQ0hBTk5FTF8xMV9OVU1CRVIgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0FXRDFDSF8zICAgICAgICAgICAgICAgICAgICAgfCBBRENfQ0ZHUl9BV0QxQ0hfMSB8IEFEQ19DRkdSX0FXRDFDSF8wKQotI2RlZmluZSBBRENfQ0hBTk5FTF8xMl9OVU1CRVIgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0FXRDFDSF8zIHwgQURDX0NGR1JfQVdEMUNIXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotI2RlZmluZSBBRENfQ0hBTk5FTF8xM19OVU1CRVIgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0FXRDFDSF8zIHwgQURDX0NGR1JfQVdEMUNIXzIgICAgICAgICAgICAgICAgICAgICB8IEFEQ19DRkdSX0FXRDFDSF8wKQotI2RlZmluZSBBRENfQ0hBTk5FTF8xNF9OVU1CRVIgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0FXRDFDSF8zIHwgQURDX0NGR1JfQVdEMUNIXzIgfCBBRENfQ0ZHUl9BV0QxQ0hfMSAgICAgICAgICAgICAgICAgICAgKQotI2RlZmluZSBBRENfQ0hBTk5FTF8xNV9OVU1CRVIgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0FXRDFDSF8zIHwgQURDX0NGR1JfQVdEMUNIXzIgfCBBRENfQ0ZHUl9BV0QxQ0hfMSB8IEFEQ19DRkdSX0FXRDFDSF8wKQotI2RlZmluZSBBRENfQ0hBTk5FTF8xNl9OVU1CRVIgICAgICAgICAgICAgIChBRENfQ0ZHUl9BV0QxQ0hfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotI2RlZmluZSBBRENfQ0hBTk5FTF8xN19OVU1CRVIgICAgICAgICAgICAgIChBRENfQ0ZHUl9BV0QxQ0hfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFEQ19DRkdSX0FXRDFDSF8wKQotI2RlZmluZSBBRENfQ0hBTk5FTF8xOF9OVU1CRVIgICAgICAgICAgICAgIChBRENfQ0ZHUl9BV0QxQ0hfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBRENfQ0ZHUl9BV0QxQ0hfMSAgICAgICAgICAgICAgICAgICAgKQorI2RlZmluZSBBRENfQ0hBTk5FTF8xX05VTUJFUiAgICAgICAgICAgICAgIChBRENfQ0ZHUl9BV0QxQ0hfMCkKKyNkZWZpbmUgQURDX0NIQU5ORUxfMl9OVU1CRVIgICAgICAgICAgICAgICAoQURDX0NGR1JfQVdEMUNIXzEpCisjZGVmaW5lIEFEQ19DSEFOTkVMXzNfTlVNQkVSICAgICAgICAgICAgICAgKEFEQ19DRkdSX0FXRDFDSF8xIHwgQURDX0NGR1JfQVdEMUNIXzApCisjZGVmaW5lIEFEQ19DSEFOTkVMXzRfTlVNQkVSICAgICAgICAgICAgICAgKEFEQ19DRkdSX0FXRDFDSF8yKQorI2RlZmluZSBBRENfQ0hBTk5FTF81X05VTUJFUiAgICAgICAgICAgICAgIChBRENfQ0ZHUl9BV0QxQ0hfMiB8IEFEQ19DRkdSX0FXRDFDSF8wKQorI2RlZmluZSBBRENfQ0hBTk5FTF82X05VTUJFUiAgICAgICAgICAgICAgIChBRENfQ0ZHUl9BV0QxQ0hfMiB8IEFEQ19DRkdSX0FXRDFDSF8xKQorI2RlZmluZSBBRENfQ0hBTk5FTF83X05VTUJFUiAgICAgICAgICAgICAgIChBRENfQ0ZHUl9BV0QxQ0hfMiB8IEFEQ19DRkdSX0FXRDFDSF8xIHwgQURDX0NGR1JfQVdEMUNIXzApCisjZGVmaW5lIEFEQ19DSEFOTkVMXzhfTlVNQkVSICAgICAgICAgICAgICAgKEFEQ19DRkdSX0FXRDFDSF8zKQorI2RlZmluZSBBRENfQ0hBTk5FTF85X05VTUJFUiAgICAgICAgICAgICAgIChBRENfQ0ZHUl9BV0QxQ0hfMyB8IEFEQ19DRkdSX0FXRDFDSF8wKQorI2RlZmluZSBBRENfQ0hBTk5FTF8xMF9OVU1CRVIgICAgICAgICAgICAgIChBRENfQ0ZHUl9BV0QxQ0hfMyB8IEFEQ19DRkdSX0FXRDFDSF8xKQorI2RlZmluZSBBRENfQ0hBTk5FTF8xMV9OVU1CRVIgICAgICAgICAgICAgIChBRENfQ0ZHUl9BV0QxQ0hfMyB8IEFEQ19DRkdSX0FXRDFDSF8xIHwgQURDX0NGR1JfQVdEMUNIXzApCisjZGVmaW5lIEFEQ19DSEFOTkVMXzEyX05VTUJFUiAgICAgICAgICAgICAgKEFEQ19DRkdSX0FXRDFDSF8zIHwgQURDX0NGR1JfQVdEMUNIXzIpCisjZGVmaW5lIEFEQ19DSEFOTkVMXzEzX05VTUJFUiAgICAgICAgICAgICAgKEFEQ19DRkdSX0FXRDFDSF8zIHwgQURDX0NGR1JfQVdEMUNIXzIgfCBBRENfQ0ZHUl9BV0QxQ0hfMCkKKyNkZWZpbmUgQURDX0NIQU5ORUxfMTRfTlVNQkVSICAgICAgICAgICAgICAoQURDX0NGR1JfQVdEMUNIXzMgfCBBRENfQ0ZHUl9BV0QxQ0hfMiB8IEFEQ19DRkdSX0FXRDFDSF8xKQorI2RlZmluZSBBRENfQ0hBTk5FTF8xNV9OVU1CRVIgICAgICAgICAgICAgIChBRENfQ0ZHUl9BV0QxQ0hfMyB8IEFEQ19DRkdSX0FXRDFDSF8yIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfQ0ZHUl9BV0QxQ0hfMSB8IEFEQ19DRkdSX0FXRDFDSF8wKQorI2RlZmluZSBBRENfQ0hBTk5FTF8xNl9OVU1CRVIgICAgICAgICAgICAgIChBRENfQ0ZHUl9BV0QxQ0hfNCkKKyNkZWZpbmUgQURDX0NIQU5ORUxfMTdfTlVNQkVSICAgICAgICAgICAgICAoQURDX0NGR1JfQVdEMUNIXzQgfCBBRENfQ0ZHUl9BV0QxQ0hfMCkKKyNkZWZpbmUgQURDX0NIQU5ORUxfMThfTlVNQkVSICAgICAgICAgICAgICAoQURDX0NGR1JfQVdEMUNIXzQgfCBBRENfQ0ZHUl9BV0QxQ0hfMSkKIAogLyogRGVmaW5pdGlvbiBvZiBjaGFubmVscyBJRCBiaXRmaWVsZCBpbmZvcm1hdGlvbiB0byBiZSBpbnNlcnRlZCBpbnRvICAgICAgICAgKi8KIC8qIGNoYW5uZWxzIGxpdGVyYWxzIGRlZmluaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zMjEsNyArMzI1LDggQEAKICNkZWZpbmUgQURDX09GUjJfUkVHT0ZGU0VUICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMVVMKQogI2RlZmluZSBBRENfT0ZSM19SRUdPRkZTRVQgICAgICAgICAgICAgICAgICgweDAwMDAwMDAyVUwpCiAjZGVmaW5lIEFEQ19PRlI0X1JFR09GRlNFVCAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDNVTCkKLSNkZWZpbmUgQURDX09GUnhfUkVHT0ZGU0VUX01BU0sgICAgICAgICAgICAoQURDX09GUjFfUkVHT0ZGU0VUIHwgQURDX09GUjJfUkVHT0ZGU0VUIHwgQURDX09GUjNfUkVHT0ZGU0VUIHwgQURDX09GUjRfUkVHT0ZGU0VUKQorI2RlZmluZSBBRENfT0ZSeF9SRUdPRkZTRVRfTUFTSyAgICAgICAgICAgIChBRENfT0ZSMV9SRUdPRkZTRVQgfCBBRENfT0ZSMl9SRUdPRkZTRVQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFEQ19PRlIzX1JFR09GRlNFVCB8IEFEQ19PRlI0X1JFR09GRlNFVCkKIAogCiAvKiBBREMgcmVnaXN0ZXJzIGJpdHMgcG9zaXRpb25zICovCkBAIC0zNDgsMTAgKzM1Myw5IEBACiAjZGVmaW5lIFRFTVBTRU5TT1JfQ0FMMl9URU1QICAgICAgICAgICAgICAgKDExMEwpICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCB0ZW1wZXJhdHVyZSBzZW5zb3IsIHRlbXBlcmF0dXJlIGF0IHdoaWNoIHRlbXBlcmF0dXJlIHNlbnNvciBoYXMgYmVlbiBjYWxpYnJhdGVkIGluIHByb2R1Y3Rpb24gZm9yIGRhdGEgaW50byBURU1QU0VOU09SX0NBTDJfQUREUiAodG9sZXJhbmNlOiArLTUgRGVnQykgKHVuaXQ6IERlZ0MpLiAqLwogI2Vsc2UKICNkZWZpbmUgVEVNUFNFTlNPUl9DQUwyX1RFTVAgICAgICAgICAgICAgICAoMTMwTCkgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmFsIHRlbXBlcmF0dXJlIHNlbnNvciwgdGVtcGVyYXR1cmUgYXQgd2hpY2ggdGVtcGVyYXR1cmUgc2Vuc29yIGhhcyBiZWVuIGNhbGlicmF0ZWQgaW4gcHJvZHVjdGlvbiBmb3IgZGF0YSBpbnRvIFRFTVBTRU5TT1JfQ0FMMl9BRERSICh0b2xlcmFuY2U6ICstNSBEZWdDKSAodW5pdDogRGVnQykuICovCi0jZW5kaWYKKyNlbmRpZiAvKiBkZWZpbmVkIChTVE0zMkw0NzF4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDc1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ3Nnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0ODV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDg2eHgpICovCiAjZGVmaW5lIFRFTVBTRU5TT1JfQ0FMX1ZSRUZBTkFMT0cgICAgICAgICAgKDMwMDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiBBbmFsb2cgdm9sdGFnZSByZWZlcmVuY2UgKFZyZWYrKSB2b2x0YWdlIHdpdGggd2hpY2ggdGVtcGVyYXR1cmUgc2Vuc29yIGhhcyBiZWVuIGNhbGlicmF0ZWQgaW4gcHJvZHVjdGlvbiAoKy0xMCBtVikgKHVuaXQ6IG1WKS4gKi8KIAotCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzk4LDcgKzQwMiw3IEBACiB7CiAgIHVpbnQzMl90IENvbW1vbkNsb2NrOyAgICAgICAgICAgICAgICAgLyohPCBTZXQgcGFyYW1ldGVyIGNvbW1vbiB0byBzZXZlcmFsIEFEQzogQ2xvY2sgc291cmNlIGFuZCBwcmVzY2FsZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEFEQ19MTF9FQ19DT01NT05fQ0xPQ0tfU09VUkNFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBPbiB0aGlzIFNUTTMyIHNlcmllLCBpZiBBREMgZ3JvdXAgaW5qZWN0ZWQgaXMgdXNlZCwgc29tZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGlmIEFEQyBncm91cCBpbmplY3RlZCBpcyB1c2VkLCBzb21lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jayByYXRpbyBjb25zdHJhaW50cyBiZXR3ZWVuIEFEQyBjbG9jayBhbmQgQUhCIGNsb2NrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIHJlc3BlY3RlZC4gUmVmZXIgdG8gcmVmZXJlbmNlIG1hbnVhbC4KIApAQCAtNDg1LDcgKzQ4OSw3IEBACiB7CiAgIHVpbnQzMl90IFRyaWdnZXJTb3VyY2U7ICAgICAgICAgICAgICAgLyohPCBTZXQgQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbiB0cmlnZ2VyIHNvdXJjZTogaW50ZXJuYWwgKFNXIHN0YXJ0KSBvciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWwgKHRpbWVyIGV2ZW50LCBleHRlcm5hbCBpbnRlcnJ1cHQgbGluZSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEFEQ19MTF9FQ19SRUdfVFJJR0dFUl9TT1VSQ0UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgdHJpZ2dlciBzb3VyY2UgdG8gZXh0ZXJuYWwgdHJpZ2dlciBhbHNvIHNldCB0cmlnZ2VyIHBvbGFyaXR5IHRvIHJpc2luZyBlZGdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyB0cmlnZ2VyIHNvdXJjZSB0byBleHRlcm5hbCB0cmlnZ2VyIGFsc28gc2V0IHRyaWdnZXIgcG9sYXJpdHkgdG8gcmlzaW5nIGVkZ2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IHNldHRpbmcgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBzb21lIEFEQyBvbiBvdGhlciBTVE0zMiBmYW1pbGllcyBoYXZpbmcgdGhpcyBzZXR0aW5nIHNldCBieSBIVyBkZWZhdWx0IHZhbHVlKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2YgbmVlZCB0byBtb2RpZnkgdHJpZ2dlciBlZGdlLCB1c2UgZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1NldFRyaWdnZXJFZGdlKCkuCiAKQEAgLTU0NSw3ICs1NDksNyBAQAogewogICB1aW50MzJfdCBUcmlnZ2VyU291cmNlOyAgICAgICAgICAgICAgIC8qITwgU2V0IEFEQyBncm91cCBpbmplY3RlZCBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlOiBpbnRlcm5hbCAoU1cgc3RhcnQpIG9yIGZyb20gZXh0ZXJuYWwgcGVyaXBoZXJhbCAodGltZXIgZXZlbnQsIGV4dGVybmFsIGludGVycnVwdCBsaW5lKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQURDX0xMX0VDX0lOSl9UUklHR0VSX1NPVVJDRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyB0cmlnZ2VyIHNvdXJjZSB0byBleHRlcm5hbCB0cmlnZ2VyIGFsc28gc2V0IHRyaWdnZXIgcG9sYXJpdHkgdG8gcmlzaW5nIGVkZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIHRyaWdnZXIgc291cmNlIHRvIGV4dGVybmFsIHRyaWdnZXIgYWxzbyBzZXQgdHJpZ2dlciBwb2xhcml0eSB0byByaXNpbmcgZWRnZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgc2V0dGluZyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHNvbWUgQURDIG9uIG90aGVyIFNUTTMyIGZhbWlsaWVzIGhhdmluZyB0aGlzIHNldHRpbmcgc2V0IGJ5IEhXIGRlZmF1bHQgdmFsdWUpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gY2FzZSBvZiBuZWVkIHRvIG1vZGlmeSB0cmlnZ2VyIGVkZ2UsIHVzZSBmdW5jdGlvbiBAcmVmIExMX0FEQ19JTkpfU2V0VHJpZ2dlckVkZ2UoKS4KIApAQCAtNjE5LDcgKzYyMyw3IEBACiAjZGVmaW5lIExMX0FEQ19GTEFHX0FXRDJfU0xWICAgICAgICAgICAgICAgQURDX0NTUl9BV0QyX1NMViAgIC8qITwgQURDIGZsYWcgQURDIG11bHRpbW9kZSBzbGF2ZSBhbmFsb2cgd2F0Y2hkb2cgMiBvZiB0aGUgQURDIHNsYXZlICovCiAjZGVmaW5lIExMX0FEQ19GTEFHX0FXRDNfTVNUICAgICAgICAgICAgICAgQURDX0NTUl9BV0QzX01TVCAgIC8qITwgQURDIGZsYWcgQURDIG11bHRpbW9kZSBtYXN0ZXIgYW5hbG9nIHdhdGNoZG9nIDMgb2YgdGhlIEFEQyBtYXN0ZXIgKi8KICNkZWZpbmUgTExfQURDX0ZMQUdfQVdEM19TTFYgICAgICAgICAgICAgICBBRENfQ1NSX0FXRDNfU0xWICAgLyohPCBBREMgZmxhZyBBREMgbXVsdGltb2RlIHNsYXZlIGFuYWxvZyB3YXRjaGRvZyAzIG9mIHRoZSBBREMgc2xhdmUgKi8KLSNlbmRpZgorI2VuZGlmIC8qIEFEQ19NVUxUSU1PREVfU1VQUE9SVCAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTY1Miw3ICs2NTYsNyBAQAogI2RlZmluZSBMTF9BRENfRE1BX1JFR19SRUdVTEFSX0RBVEEgICAgICAgICAgKDB4MDAwMDAwMDBVTCkgLyogQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbiBkYXRhIHJlZ2lzdGVyIChjb3JyZXNwb25kaW5nIHRvIHJlZ2lzdGVyIERSKSB0byBiZSB1c2VkIHdpdGggQURDIGNvbmZpZ3VyZWQgaW4gaW5kZXBlbmRlbnQgbW9kZS4gV2l0aG91dCBETUEgdHJhbnNmZXIsIHJlZ2lzdGVyIGFjY2Vzc2VkIGJ5IExMIGZ1bmN0aW9uIEByZWYgTExfQURDX1JFR19SZWFkQ29udmVyc2lvbkRhdGEzMigpIGFuZCBvdGhlciBmdW5jdGlvbnMgQHJlZiBMTF9BRENfUkVHX1JlYWRDb252ZXJzaW9uRGF0YXgoKSAqLwogI2lmIGRlZmluZWQoQURDX01VTFRJTU9ERV9TVVBQT1JUKQogI2RlZmluZSBMTF9BRENfRE1BX1JFR19SRUdVTEFSX0RBVEFfTVVMVEkgICAgKDB4MDAwMDAwMDFVTCkgLyogQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbiBkYXRhIHJlZ2lzdGVyIChjb3JyZXNwb25kaW5nIHRvIHJlZ2lzdGVyIENEUikgdG8gYmUgdXNlZCB3aXRoIEFEQyBjb25maWd1cmVkIGluIG11bHRpbW9kZSAoYXZhaWxhYmxlIG9uIFNUTTMyIGRldmljZXMgd2l0aCBzZXZlcmFsIEFEQyBpbnN0YW5jZXMpLiBXaXRob3V0IERNQSB0cmFuc2ZlciwgcmVnaXN0ZXIgYWNjZXNzZWQgYnkgTEwgZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1JlYWRNdWx0aUNvbnZlcnNpb25EYXRhMzIoKSAqLwotI2VuZGlmCisjZW5kaWYgLyogQURDX01VTFRJTU9ERV9TVVBQT1JUICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNjg3LDcgKzY5MSw3IEBACiAvKiAgICAgICBJZiB0aGV5IGFyZSBub3QgbGlzdGVkIGJlbG93LCB0aGV5IGRvIG5vdCByZXF1aXJlIGFueSBzcGVjaWZpYyAgICAgICAqLwogLyogICAgICAgcGF0aCBlbmFibGUuIEluIHRoaXMgY2FzZSwgQWNjZXNzIHRvIG1lYXN1cmVtZW50IHBhdGggaXMgZG9uZSAgICAgICAgKi8KIC8qICAgICAgIG9ubHkgYnkgc2VsZWN0aW5nIHRoZSBjb3JyZXNwb25kaW5nIEFEQyBpbnRlcm5hbCBjaGFubmVsLiAgICAgICAgICAgICovCi0jZGVmaW5lIExMX0FEQ19QQVRIX0lOVEVSTkFMX05PTkUgICAgICAgICAgKDB4MDAwMDAwMDBVTCkgICAgICAgICAvKiE8IEFEQyBtZWFzdXJlbWVudCBwYXRoZXMgYWxsIGRpc2FibGVkICovCisjZGVmaW5lIExMX0FEQ19QQVRIX0lOVEVSTkFMX05PTkUgICAgICAgICAgKDB4MDAwMDAwMDBVTCkgICAgICAgICAvKiE8IEFEQyBtZWFzdXJlbWVudCBwYXRocyBhbGwgZGlzYWJsZWQgKi8KICNkZWZpbmUgTExfQURDX1BBVEhfSU5URVJOQUxfVlJFRklOVCAgICAgICAoQURDX0NDUl9WUkVGRU4pICAgICAgIC8qITwgQURDIG1lYXN1cmVtZW50IHBhdGggdG8gaW50ZXJuYWwgY2hhbm5lbCBWcmVmSW50ICovCiAjZGVmaW5lIExMX0FEQ19QQVRIX0lOVEVSTkFMX1RFTVBTRU5TT1IgICAgKEFEQ19DQ1JfVFNFTikgICAgICAgICAvKiE8IEFEQyBtZWFzdXJlbWVudCBwYXRoIHRvIGludGVybmFsIGNoYW5uZWwgdGVtcGVyYXR1cmUgc2Vuc29yICovCiAjZGVmaW5lIExMX0FEQ19QQVRIX0lOVEVSTkFMX1ZCQVQgICAgICAgICAgKEFEQ19DQ1JfVkJBVEVOKSAgICAgICAvKiE8IEFEQyBtZWFzdXJlbWVudCBwYXRoIHRvIGludGVybmFsIGNoYW5uZWwgVmJhdCAqLwpAQCAtNzEwLDcgKzcxNCw3IEBACiAgICogQHsKICAgKi8KICNkZWZpbmUgTExfQURDX0RBVEFfQUxJR05fUklHSFQgICAgICAgICAgICAoMHgwMDAwMDAwMFVMKSAgICAgICAgIC8qITwgQURDIGNvbnZlcnNpb24gZGF0YSBhbGlnbm1lbnQ6IHJpZ2h0IGFsaWduZWQgKGFsaWdubWVudCBvbiBkYXRhIHJlZ2lzdGVyIExTQiBiaXQgMCkqLwotI2RlZmluZSBMTF9BRENfREFUQV9BTElHTl9MRUZUICAgICAgICAgICAgIChBRENfQ0ZHUl9BTElHTikgICAgICAgLyohPCBBREMgY29udmVyc2lvbiBkYXRhIGFsaWdubWVudDogbGVmdCBhbGlnbmVkIChhbGlnbWVudCBvbiBkYXRhIHJlZ2lzdGVyIE1TQiBiaXQgMTUpKi8KKyNkZWZpbmUgTExfQURDX0RBVEFfQUxJR05fTEVGVCAgICAgICAgICAgICAoQURDX0NGR1JfQUxJR04pICAgICAgIC8qITwgQURDIGNvbnZlcnNpb24gZGF0YSBhbGlnbm1lbnQ6IGxlZnQgYWxpZ25lZCAoYWxpZ25tZW50IG9uIGRhdGEgcmVnaXN0ZXIgTVNCIGJpdCAxNSkqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTc4OCw4ICs3OTIsOCBAQAogI2lmIGRlZmluZWQoQURDMykKICNkZWZpbmUgTExfQURDX0NIQU5ORUxfREFDMUNIMV9BREMzICAgICAgICAoTExfQURDX0NIQU5ORUxfMTQgfCBBRENfQ0hBTk5FTF9JRF9JTlRFUk5BTF9DSCkgLyohPCBBREMgaW50ZXJuYWwgY2hhbm5lbCBjb25uZWN0ZWQgdG8gREFDMSBjaGFubmVsIDEsIGNoYW5uZWwgc3BlY2lmaWMgdG8gQURDMyAqLwogI2RlZmluZSBMTF9BRENfQ0hBTk5FTF9EQUMxQ0gyX0FEQzMgICAgICAgIChMTF9BRENfQ0hBTk5FTF8xNSB8IEFEQ19DSEFOTkVMX0lEX0lOVEVSTkFMX0NIKSAvKiE8IEFEQyBpbnRlcm5hbCBjaGFubmVsIGNvbm5lY3RlZCB0byBEQUMxIGNoYW5uZWwgMiwgY2hhbm5lbCBzcGVjaWZpYyB0byBBREMzICovCi0jZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8qIEFEQzMgKi8KKyNlbmRpZiAvKiBBREMxICYmICFBREMyICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtODUyLDExICs4NTYsMTEgQEAKICAgKiBAewogICAqLwogI2RlZmluZSBMTF9BRENfUkVHX0RGU0RNX1RSQU5TRkVSX05PTkUgICAgICgweDAwMDAwMDAwVUwpICAgICAgICAgIC8qITwgQURDIGNvbnZlcnNpb25zIGFyZSBub3QgdHJhbnNmZXJyZWQgYnkgREZTRE0uICovCi0jZGVmaW5lIExMX0FEQ19SRUdfREZTRE1fVFJBTlNGRVJfRU5BQkxFICAgKEFEQ19DRkdSX0RGU0RNQ0ZHKSAgICAgLyohPCBBREMgY29udmVyc2lvbiBkYXRhIGFyZSB0cmFuc2ZlcmVkIHRvIERGU0RNIGZvciBwb3N0IHByb2Nlc3NpbmcuIFRoZSBBREMgY29udmVyc2lvbiBkYXRhIGZvcm1hdCBtdXN0IGJlIDE2LWJpdCBzaWduZWQgYW5kIHJpZ2h0IGFsaWduZWQsIHJlZmVyIHRvIHJlZmVyZW5jZSBtYW51YWwuIERGU0RNIHRyYW5zZmVyIGNhbm5vdCBiZSB1c2VkIGlmIERNQSB0cmFuc2ZlciBpcyBlbmFibGVkLiAqLworI2RlZmluZSBMTF9BRENfUkVHX0RGU0RNX1RSQU5TRkVSX0VOQUJMRSAgIChBRENfQ0ZHUl9ERlNETUNGRykgICAgIC8qITwgQURDIGNvbnZlcnNpb24gZGF0YSBhcmUgdHJhbnNmZXJyZWQgdG8gREZTRE0gZm9yIHBvc3QgcHJvY2Vzc2luZy4gVGhlIEFEQyBjb252ZXJzaW9uIGRhdGEgZm9ybWF0IG11c3QgYmUgMTYtYml0IHNpZ25lZCBhbmQgcmlnaHQgYWxpZ25lZCwgcmVmZXIgdG8gcmVmZXJlbmNlIG1hbnVhbC4gREZTRE0gdHJhbnNmZXIgY2Fubm90IGJlIHVzZWQgaWYgRE1BIHRyYW5zZmVyIGlzIGVuYWJsZWQuICovCiAvKioKICAgKiBAfQogICAqLwotI2VuZGlmCisjZW5kaWYgLyogQURDX0NGR1JfREZTRE1DRkcgKi8KIAogI2lmIGRlZmluZWQoQURDX1NNUFIxX1NNUFBMVVMpCiAvKiogQGRlZmdyb3VwIEFEQ19MTF9FQ19TQU1QTElOR1RJTUVfQ09NTU9OX0NPTkZJRyBBREMgaW5zdGFuY2UgLSBBREMgc2FtcGxpbmcgdGltZSBjb21tb24gY29uZmlndXJhdGlvbgpAQCAtMTE1Myw4ICsxMTU3LDggQEAKICNkZWZpbmUgTExfQURDX0FXRF9DSF9EQUMxQ0gyX0FEQzNfUkVHICAgICAoKExMX0FEQ19DSEFOTkVMX0RBQzFDSDJfQURDMyAgJiBBRENfQ0hBTk5FTF9JRF9NQVNLKSAgICAgICAgICAgICAgICAgICAgfCBBRENfQ0ZHUl9BV0QxRU4gfCBBRENfQ0ZHUl9BV0QxU0dMKSAvKiE8IEFEQyBhbmFsb2cgd2F0Y2hkb2cgbW9uaXRvcmluZyBvZiBBREMgaW50ZXJuYWwgY2hhbm5lbCBjb25uZWN0ZWQgdG8gREFDMSBjaGFubmVsIDIsIGNoYW5uZWwgc3BlY2lmaWMgdG8gQURDMywgY29udmVydGVkIGJ5IGdyb3VwIHJlZ3VsYXIgb25seSAqLwogI2RlZmluZSBMTF9BRENfQVdEX0NIX0RBQzFDSDJfQURDM19JTkogICAgICgoTExfQURDX0NIQU5ORUxfREFDMUNIMl9BREMzICAmIEFEQ19DSEFOTkVMX0lEX01BU0spIHwgQURDX0NGR1JfSkFXRDFFTiAgICAgICAgICAgICAgICAgICB8IEFEQ19DRkdSX0FXRDFTR0wpIC8qITwgQURDIGFuYWxvZyB3YXRjaGRvZyBtb25pdG9yaW5nIG9mIEFEQyBpbnRlcm5hbCBjaGFubmVsIGNvbm5lY3RlZCB0byBEQUMxIGNoYW5uZWwgMiwgY2hhbm5lbCBzcGVjaWZpYyB0byBBREMzLCBjb252ZXJ0ZWQgYnkgZ3JvdXAgaW5qZWN0ZWQgb25seSAqLwogI2RlZmluZSBMTF9BRENfQVdEX0NIX0RBQzFDSDJfQURDM19SRUdfSU5KICgoTExfQURDX0NIQU5ORUxfREFDMUNIMl9BREMzICAmIEFEQ19DSEFOTkVMX0lEX01BU0spIHwgQURDX0NGR1JfSkFXRDFFTiB8IEFEQ19DRkdSX0FXRDFFTiB8IEFEQ19DRkdSX0FXRDFTR0wpIC8qITwgQURDIGFuYWxvZyB3YXRjaGRvZyBtb25pdG9yaW5nIG9mIEFEQyBpbnRlcm5hbCBjaGFubmVsIGNvbm5lY3RlZCB0byBEQUMxIGNoYW5uZWwgMiwgY2hhbm5lbCBzcGVjaWZpYyB0byBBREMzLCBjb252ZXJ0ZWQgYnkgZWl0aGVyIGdyb3VwIHJlZ3VsYXIgb3IgaW5qZWN0ZWQgKi8KLSNlbmRpZgotI2VuZGlmCisjZW5kaWYgLyogQURDMyAqLworI2VuZGlmIC8qIEFEQzEgJiYgIUFEQzIgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xMzI4LDcgKzEzMzIsNyBAQAogLyogICAgICAgY29uZmlndXJhdGlvbiAoc3lzdGVtIGNsb2NrIHZlcnN1cyBBREMgY2xvY2spLCAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgIGFuZCB0aGVyZWZvcmUgbXVzdCBiZSBkZWZpbmVkIGluIHVzZXIgYXBwbGljYXRpb24uICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICBJbmRpY2F0aW9ucyBmb3IgZXN0aW1hdGlvbiBvZiBBREMgdGltZW91dCBkZWxheXMsIGZvciB0aGlzICAgICAgICAgICAqLwotLyogICAgICAgU1RNMzIgc2VyaWU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgIFNUTTMyIHNlcmllczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAtIEFEQyBjYWxpYnJhdGlvbiB0aW1lOiBtYXhpbXVtIGRlbGF5IGlzIDExMi9mQURDLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAocmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCwgcGFyYW1ldGVyICJ0Q0FMIikgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgIC0gQURDIGVuYWJsZSB0aW1lOiBtYXhpbXVtIGRlbGF5IGlzIDEgY29udmVyc2lvbiBjeWNsZS4gICAgICAgICAgICAgICovCkBAIC0xMzUwLDIyICsxMzU0LDIyIEBACiAvKiBEZWxheSBzZXQgdG8gbWF4aW11bSB2YWx1ZSAocmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCwgICAgICAgICAgICAgICAgICAgICAqLwogLyogcGFyYW1ldGVyICJ0c3RhcnRfdnJlZmludCIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIFVuaXQ6IHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIExMX0FEQ19ERUxBWV9WUkVGSU5UX1NUQUJfVVMgICAgICAgKCAxMlVMKSAgLyohPCBEZWxheSBmb3IgaW50ZXJuYWwgdm9sdGFnZSByZWZlcmVuY2Ugc3RhYmlsaXphdGlvbiB0aW1lICovCisjZGVmaW5lIExMX0FEQ19ERUxBWV9WUkVGSU5UX1NUQUJfVVMgICAgICAgICAgICggMTJVTCkgIC8qITwgRGVsYXkgZm9yIGludGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlIHN0YWJpbGl6YXRpb24gdGltZSAqLwogCiAvKiBEZWxheSBmb3IgdGVtcGVyYXR1cmUgc2Vuc29yIHN0YWJpbGl6YXRpb24gdGltZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogTGl0ZXJhbCBzZXQgdG8gbWF4aW11bSB2YWx1ZSAocmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCwgICAgICAgICAgICAgICAgICAgKi8KIC8qIHBhcmFtZXRlciAidFNUQVJUIikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBVbml0OiB1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBMTF9BRENfREVMQVlfVEVNUFNFTlNPUl9TVEFCX1VTICAgICgxMjBVTCkgIC8qITwgRGVsYXkgZm9yIHRlbXBlcmF0dXJlIHNlbnNvciBzdGFiaWxpemF0aW9uIHRpbWUgKi8KKyNkZWZpbmUgTExfQURDX0RFTEFZX1RFTVBTRU5TT1JfU1RBQl9VUyAgICAgICAgKDEyMFVMKSAgLyohPCBEZWxheSBmb3IgdGVtcGVyYXR1cmUgc2Vuc29yIHN0YWJpbGl6YXRpb24gdGltZSAqLwogCiAvKiBEZWxheSByZXF1aXJlZCBiZXR3ZWVuIEFEQyBlbmQgb2YgY2FsaWJyYXRpb24gYW5kIEFEQyBlbmFibGUuICAgICAgICAgICAgICAqLwotLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgYSBtaW5pbXVtIG51bWJlciBvZiBBREMgY2xvY2sgY3ljbGVzICAgICAgICAgICAgKi8KKy8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBhIG1pbmltdW0gbnVtYmVyIG9mIEFEQyBjbG9jayBjeWNsZXMgICAgICAgICAgICovCiAvKiAgICAgICBhcmUgcmVxdWlyZWQgYmV0d2VlbiBBREMgZW5kIG9mIGNhbGlicmF0aW9uIGFuZCBBREMgZW5hYmxlLiAgICAgICAgICAqLwogLyogICAgICAgV2FpdCB0aW1lIGNhbiBiZSBjb21wdXRlZCBpbiB1c2VyIGFwcGxpY2F0aW9uIGJ5IHdhaXRpbmcgZm9yIHRoZSAgICAgKi8KIC8qICAgICAgIGVxdWl2YWxlbnQgbnVtYmVyIG9mIENQVSBjeWNsZXMsIGJ5IHRha2luZyBpbnRvIGFjY291bnQgICAgICAgICAgICAgICovCiAvKiAgICAgICByYXRpbyBvZiBDUFUgY2xvY2sgdmVyc3VzIEFEQyBjbG9jayBwcmVzY2FsZXJzLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogVW5pdDogQURDIGNsb2NrIGN5Y2xlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTExfQURDX0RFTEFZX0NBTElCX0VOQUJMRV9BRENfQ1lDTEVTICggIDRVTCkgIC8qITwgRGVsYXkgcmVxdWlyZWQgYmV0d2VlbiBBREMgZW5kIG9mIGNhbGlicmF0aW9uIGFuZCBBREMgZW5hYmxlICovCisjZGVmaW5lIExMX0FEQ19ERUxBWV9DQUxJQl9FTkFCTEVfQURDX0NZQ0xFUyAgICggIDRVTCkgIC8qITwgRGVsYXkgcmVxdWlyZWQgYmV0d2VlbiBBREMgZW5kIG9mIGNhbGlicmF0aW9uIGFuZCBBREMgZW5hYmxlICovCiAKIC8qKgogICAqIEB9CkBAIC0xNDU5LDEwICsxNDYzLDEwIEBACiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTAgYW5kIE1heF9EYXRhPTE4CiAgICovCiAjZGVmaW5lIF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihfX0NIQU5ORUxfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoKCgoX19DSEFOTkVMX18pICYgQURDX0NIQU5ORUxfSURfQklURklFTERfTUFTSykgPT0gMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgID8gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoKChfX0NIQU5ORUxfXykgJiBBRENfQ0hBTk5FTF9JRF9CSVRGSUVMRF9NQVNLKSA9PSAwVUwpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAoKF9fQ0hBTk5FTF9fKSAmIEFEQ19DSEFOTkVMX0lEX05VTUJFUl9NQVNLKSA+PiBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfQklUT0ZGU0VUX1BPUyBcCi0gICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICh1aW50MzJfdClQT1NJVElPTl9WQUwoKF9fQ0hBTk5FTF9fKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTE1MTksMTIgKzE1MjMsMTIgQEAKICAgKiAgICAgICAgICAgICAgICAgICAgICB1c2luZyBoZWxwZXIgbWFjcm8gQHJlZiBfX0xMX0FEQ19DSEFOTkVMX0lOVEVSTkFMX1RPX0VYVEVSTkFMKCkuCiAgICovCiAjZGVmaW5lIF9fTExfQURDX0RFQ0lNQUxfTkJfVE9fQ0hBTk5FTChfX0RFQ0lNQUxfTkJfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCgoX19ERUNJTUFMX05CX18pIDw9IDlVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgPyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoKF9fREVDSU1BTF9OQl9fKSA8PSA5VUwpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICgoX19ERUNJTUFMX05CX18pIDw8IEFEQ19DSEFOTkVMX0lEX05VTUJFUl9CSVRPRkZTRVRfUE9TKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICBcCiAgICAgICAgKEFEQ19BV0QyQ1JfQVdEMkNIXzAgPDwgKF9fREVDSU1BTF9OQl9fKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIFwKICAgICAgICAoQURDX1NNUFIxX1JFR09GRlNFVCB8ICgoKDNVTCAqIChfX0RFQ0lNQUxfTkJfXykpKSA8PCBBRENfQ0hBTk5FTF9TTVB4X0JJVE9GRlNFVF9QT1MpKSAgICAgICAgICAgXAotICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgKChfX0RFQ0lNQUxfTkJfXykgPDwgQURDX0NIQU5ORUxfSURfTlVNQkVSX0JJVE9GRlNFVF9QT1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFwKQEAgLTE3MDUsNDggKzE3MDksNDggQEAKICAgKi8KICNpZiBkZWZpbmVkIChBREMxKSAmJiBkZWZpbmVkIChBREMyKSAmJiBkZWZpbmVkIChBREMzKQogI2RlZmluZSBfX0xMX0FEQ19JU19DSEFOTkVMX0lOVEVSTkFMX0FWQUlMQUJMRShfX0FEQ19JTlNUQU5DRV9fLCBfX0NIQU5ORUxfXykgIFwKLSAgKCgoX19BRENfSU5TVEFOQ0VfXykgPT0gQURDMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgPyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX1ZSRUZJTlQpICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9BRENfQ0hBTk5FTF9URU1QU0VOU09SKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgKChfX0NIQU5ORUxfXykgPT0gTExfQURDX0NIQU5ORUxfVkJBVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoKF9fQURDX0lOU1RBTkNFX18pID09IEFEQzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgPyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX1ZSRUZJTlQpICAgICAgfHwgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9BRENfQ0hBTk5FTF9EQUMxQ0gxX0FEQzIpIHx8ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gTExfQURDX0NIQU5ORUxfREFDMUNIMl9BREMyKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoKF9fQURDX0lOU1RBTkNFX18pID09IEFEQzMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgPyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX1ZSRUZJTlQpICAgICAgfHwgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9BRENfQ0hBTk5FTF9URU1QU0VOU09SKSAgIHx8ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gTExfQURDX0NIQU5ORUxfVkJBVCkgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX0RBQzFDSDFfQURDMykgfHwgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9BRENfQ0hBTk5FTF9EQUMxQ0gyX0FEQzMpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoKF9fQURDX0lOU1RBTkNFX18pID09IEFEQzEpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9BRENfQ0hBTk5FTF9WUkVGSU5UKSAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChfX0NIQU5ORUxfXykgPT0gTExfQURDX0NIQU5ORUxfVEVNUFNFTlNPUikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX1ZCQVQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKChfX0FEQ19JTlNUQU5DRV9fKSA9PSBBREMyKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX1ZSRUZJTlQpICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9BRENfQ0hBTk5FTF9EQUMxQ0gxX0FEQzIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKChfX0NIQU5ORUxfXykgPT0gTExfQURDX0NIQU5ORUxfREFDMUNIMl9BREMyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKF9fQURDX0lOU1RBTkNFX18pID09IEFEQzMpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKChfX0NIQU5ORUxfXykgPT0gTExfQURDX0NIQU5ORUxfVlJFRklOVCkgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX1RFTVBTRU5TT1IpICAgfHwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9BRENfQ0hBTk5FTF9WQkFUKSAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKChfX0NIQU5ORUxfXykgPT0gTExfQURDX0NIQU5ORUxfREFDMUNIMV9BREMzKSB8fCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX0RBQzFDSDJfQURDMykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICkKICNlbGlmIGRlZmluZWQgKEFEQzEpICYmIGRlZmluZWQgKEFEQzIpCiAjZGVmaW5lIF9fTExfQURDX0lTX0NIQU5ORUxfSU5URVJOQUxfQVZBSUxBQkxFKF9fQURDX0lOU1RBTkNFX18sIF9fQ0hBTk5FTF9fKSAgXAotICAoKChfX0FEQ19JTlNUQU5DRV9fKSA9PSBBREMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICA/ICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgKChfX0NIQU5ORUxfXykgPT0gTExfQURDX0NIQU5ORUxfVlJFRklOVCkgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX1RFTVBTRU5TT1IpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9BRENfQ0hBTk5FTF9WQkFUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICgoX19BRENfSU5TVEFOQ0VfXykgPT0gQURDMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICA/ICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gTExfQURDX0NIQU5ORUxfVlJFRklOVCkgICAgICB8fCAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX0RBQzFDSDFfQURDMikgfHwgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9BRENfQ0hBTk5FTF9EQUMxQ0gyX0FEQzIpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCgoX19BRENfSU5TVEFOQ0VfXykgPT0gQURDMSkgPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX1ZSRUZJTlQpICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9BRENfQ0hBTk5FTF9URU1QU0VOU09SKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChfX0NIQU5ORUxfXykgPT0gTExfQURDX0NIQU5ORUxfVkJBVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAoKF9fQURDX0lOU1RBTkNFX18pID09IEFEQzIpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKChfX0NIQU5ORUxfXykgPT0gTExfQURDX0NIQU5ORUxfVlJFRklOVCkgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX0RBQzFDSDFfQURDMikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9BRENfQ0hBTk5FTF9EQUMxQ0gyX0FEQzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKQogI2VsaWYgZGVmaW5lZCAoQURDMSkKICNkZWZpbmUgX19MTF9BRENfSVNfQ0hBTk5FTF9JTlRFUk5BTF9BVkFJTEFCTEUoX19BRENfSU5TVEFOQ0VfXywgX19DSEFOTkVMX18pICBcCkBAIC0xNzU3LDcgKzE3NjEsNyBAQAogICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX0RBQzFDSDEpICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9BRENfQ0hBTk5FTF9EQUMxQ0gyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICkKLSNlbmRpZgorI2VuZGlmIC8qIGRlZmluZWQgKEFEQzEpICYmIGRlZmluZWQgKEFEQzIpICYmIGRlZmluZWQgKEFEQzMpICovCiAKIC8qKgogICAqIEBicmllZiAgSGVscGVyIG1hY3JvIHRvIGRlZmluZSBBREMgYW5hbG9nIHdhdGNoZG9nIHBhcmFtZXRlcjoKQEAgLTIwMTMsNyArMjAxNyw3IEBACiAgICovCiAjZGVmaW5lIF9fTExfQURDX01VTFRJX0NPTlZfREFUQV9NQVNURVJfU0xBVkUoX19BRENfTVVMVElfTUFTVEVSX1NMQVZFX18sIF9fQURDX01VTFRJX0NPTlZfREFUQV9fKSBcCiAgICgoKF9fQURDX01VTFRJX0NPTlZfREFUQV9fKSA+PiAoKEFEQ19DRFJfUkRBVEFfU0xWX1BvcykgJiB+KF9fQURDX01VTFRJX01BU1RFUl9TTEFWRV9fKSkpICYgQURDX0NEUl9SREFUQV9NU1QpCi0jZW5kaWYKKyNlbmRpZiAvKiBBRENfTVVMVElNT0RFX1NVUFBPUlQgKi8KIAogI2lmIGRlZmluZWQoQURDX01VTFRJTU9ERV9TVVBQT1JUKQogLyoqCkBAIC0yMDMwLDE3ICsyMDM0LDE2IEBACiAgICovCiAjaWYgZGVmaW5lZChBREMyKQogI2RlZmluZSBfX0xMX0FEQ19NVUxUSV9JTlNUQU5DRV9NQVNURVIoX19BREN4X18pIFwKLSAgKCAoICgoX19BREN4X18pID09IEFEQzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKT8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAoQURDMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIChfX0FEQ3hfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKCgoX19BREN4X18pID09IEFEQzIpKT8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAoQURDMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKF9fQURDeF9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICkKICNlbHNlCiAjZGVmaW5lIF9fTExfQURDX01VTFRJX0lOU1RBTkNFX01BU1RFUihfX0FEQ3hfXykgXAogICAoX19BREN4X18pCi0jZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8qIEFEQzIgKi8KKyNlbmRpZiAvKiBBRENfTVVMVElNT0RFX1NVUFBPUlQgKi8KIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gc2VsZWN0IHRoZSBBREMgY29tbW9uIGluc3RhbmNlCkBAIC0yMDYxLDcgKzIwNjQsNyBAQAogI2Vsc2UKICNkZWZpbmUgX19MTF9BRENfQ09NTU9OX0lOU1RBTkNFKF9fQURDeF9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIChBREMxX0NPTU1PTikKLSNlbmRpZgorI2VuZGlmIC8qIGRlZmluZWQoQURDMSkgJiYgZGVmaW5lZChBREMyKSAmJiBkZWZpbmVkKEFEQzMpICovCiAKIC8qKgogICAqIEBicmllZiAgSGVscGVyIG1hY3JvIHRvIGNoZWNrIGlmIGFsbCBBREMgaW5zdGFuY2VzIHNoYXJpbmcgdGhlIHNhbWUKQEAgLTIwOTIsNyArMjA5NSw3IEBACiAjZWxzZQogI2RlZmluZSBfX0xMX0FEQ19JU19FTkFCTEVEX0FMTF9DT01NT05fSU5TVEFOQ0UoX19BRENYWV9DT01NT05fXykgICAgICAgICAgICAgIFwKICAgKExMX0FEQ19Jc0VuYWJsZWQoQURDMSkpCi0jZW5kaWYKKyNlbmRpZiAvKiBkZWZpbmVkKEFEQzEpICYmIGRlZmluZWQoQURDMikgJiYgZGVmaW5lZChBREMzKSAqLwogCiAvKioKICAgKiBAYnJpZWYgIEhlbHBlciBtYWNybyB0byBkZWZpbmUgdGhlIEFEQyBjb252ZXJzaW9uIGRhdGEgZnVsbC1zY2FsZSBkaWdpdGFsCkBAIC0yMTMwLDExICsyMTMzLDExIEBACiAgICovCiAjZGVmaW5lIF9fTExfQURDX0NPTlZFUlRfREFUQV9SRVNPTFVUSU9OKF9fREFUQV9fLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BRENfUkVTT0xVVElPTl9DVVJSRU5UX18sXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19SRVNPTFVUSU9OX1RBUkdFVF9fKSAgICAgICAgICAgIFwKLSAgKCgoX19EQVRBX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgPDwgKChfX0FEQ19SRVNPTFVUSU9OX0NVUlJFTlRfXykgPj4gKEFEQ19DRkdSX1JFU19CSVRPRkZTRVRfUE9TIC0gMVVMKSkpICAgXAotICAgPj4gKChfX0FEQ19SRVNPTFVUSU9OX1RBUkdFVF9fKSA+PiAoQURDX0NGR1JfUkVTX0JJVE9GRlNFVF9QT1MgLSAxVUwpKSAgICAgIFwKLSAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19SRVNPTFVUSU9OX1RBUkdFVF9fKSAgICAgICAgICBcCisoKChfX0RBVEFfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgPDwgKChfX0FEQ19SRVNPTFVUSU9OX0NVUlJFTlRfXykgPj4gKEFEQ19DRkdSX1JFU19CSVRPRkZTRVRfUE9TIC0gMVVMKSkpICAgXAorID4+ICgoX19BRENfUkVTT0xVVElPTl9UQVJHRVRfXykgPj4gKEFEQ19DRkdSX1JFU19CSVRPRkZTRVRfUE9TIC0gMVVMKSkgICAgICBcCispCiAKIC8qKgogICAqIEBicmllZiAgSGVscGVyIG1hY3JvIHRvIGNhbGN1bGF0ZSB0aGUgdm9sdGFnZSAodW5pdDogbVZvbHQpCkBAIC0yMTU0LDEwICsyMTU3LDEwIEBACiAgICovCiAjZGVmaW5lIF9fTExfQURDX0NBTENfREFUQV9UT19WT0xUQUdFKF9fVlJFRkFOQUxPR19WT0xUQUdFX18sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19EQVRBX18sXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19SRVNPTFVUSU9OX18pICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKChfX0FEQ19EQVRBX18pICogKF9fVlJFRkFOQUxPR19WT0xUQUdFX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAvIF9fTExfQURDX0RJR0lUQUxfU0NBTEUoX19BRENfUkVTT0xVVElPTl9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQURDX1JFU09MVVRJT05fXykgICAgICAgICAgICAgICAgICAgIFwKKygoX19BRENfREFUQV9fKSAqIChfX1ZSRUZBTkFMT0dfVk9MVEFHRV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIC8gX19MTF9BRENfRElHSVRBTF9TQ0FMRShfX0FEQ19SRVNPTFVUSU9OX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCispCiAKIC8qIExlZ2FjeSBkZWZpbmUgKi8KICNkZWZpbmUgX19MTF9BRENfQ0FMQ19EQVRBX1ZPTFRBR0UoKSAgX19MTF9BRENfQ0FMQ19EQVRBX1RPX1ZPTFRBR0UoKQpAQCAtMjE3Miw3ICsyMTc1LDcgQEAKICAgKiAgICAgICAgIGNvbm5lY3RlZCB0byBwaW4gVnJlZisuCiAgICogICAgICAgICBPbiBkZXZpY2VzIHdpdGggc21hbGwgcGFja2FnZSwgdGhlIHBpbiBWcmVmKyBpcyBub3QgcHJlc2VudAogICAqICAgICAgICAgYW5kIGludGVybmFsbHkgYm9uZGVkIHRvIHBpbiBWZGRhLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgY2FsaWJyYXRpb24gZGF0YSBvZiBpbnRlcm5hbCB2b2x0YWdlIHJlZmVyZW5jZQorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGNhbGlicmF0aW9uIGRhdGEgb2YgaW50ZXJuYWwgdm9sdGFnZSByZWZlcmVuY2UKICAgKiAgICAgICAgIFZyZWZJbnQgY29ycmVzcG9uZHMgdG8gYSByZXNvbHV0aW9uIG9mIDEyIGJpdHMsCiAgICogICAgICAgICB0aGlzIGlzIHRoZSByZWNvbW1lbmRlZCBBREMgcmVzb2x1dGlvbiB0byBjb252ZXJ0IHZvbHRhZ2Ugb2YKICAgKiAgICAgICAgIGludGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlIFZyZWZJbnQuCkBAIC0yMTg4LDExICsyMTkxLDEyIEBACiAgICogQHJldHZhbCBBbmFsb2cgcmVmZXJlbmNlIHZvbHRhZ2UgKHVuaXQ6IG1WKQogICAqLwogI2RlZmluZSBfX0xMX0FEQ19DQUxDX1ZSRUZBTkFMT0dfVk9MVEFHRShfX1ZSRUZJTlRfQURDX0RBVEFfXyxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQURDX1JFU09MVVRJT05fXykgICAgICAgICAgICAgICAgICAgXAotICAoKCh1aW50MzJfdCkoKlZSRUZJTlRfQ0FMX0FERFIpICogVlJFRklOVF9DQUxfVlJFRikgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIC8gX19MTF9BRENfQ09OVkVSVF9EQVRBX1JFU09MVVRJT04oKF9fVlJFRklOVF9BRENfREFUQV9fKSwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FEQ19SRVNPTFVUSU9OX18pLCAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTF9BRENfUkVTT0xVVElPTl8xMkIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19SRVNPTFVUSU9OX18pICAgICAgICAgICAgICAgICBcCisoKCh1aW50MzJfdCkoKlZSRUZJTlRfQ0FMX0FERFIpICogVlJFRklOVF9DQUxfVlJFRikgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAvIF9fTExfQURDX0NPTlZFUlRfREFUQV9SRVNPTFVUSU9OKChfX1ZSRUZJTlRfQURDX0RBVEFfXyksICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fXyksICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTF9BRENfUkVTT0xVVElPTl8xMkIpICAgICAgICAgICAgICAgICAgIFwKKykKIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gY2FsY3VsYXRlIHRoZSB0ZW1wZXJhdHVyZSAodW5pdDogZGVncmVlIENlbHNpdXMpCkBAIC0yMjIxLDcgKzIyMjUsNyBAQAogICAqIEBub3RlICAgQW5hbG9nIHJlZmVyZW5jZSB2b2x0YWdlIChWcmVmKykgbXVzdCBiZSBlaXRoZXIga25vd24gZnJvbQogICAqICAgICAgICAgdXNlciBib2FyZCBlbnZpcm9ubWVudCBvciBjYW4gYmUgY2FsY3VsYXRlZCB1c2luZyBBREMgbWVhc3VyZW1lbnQKICAgKiAgICAgICAgIGFuZCBBREMgaGVscGVyIG1hY3JvIEByZWYgX19MTF9BRENfQ0FMQ19WUkVGQU5BTE9HX1ZPTFRBR0UoKS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIGNhbGlicmF0aW9uIGRhdGEgb2YgdGVtcGVyYXR1cmUgc2Vuc29yCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgY2FsaWJyYXRpb24gZGF0YSBvZiB0ZW1wZXJhdHVyZSBzZW5zb3IKICAgKiAgICAgICAgIGNvcnJlc3BvbmRzIHRvIGEgcmVzb2x1dGlvbiBvZiAxMiBiaXRzLAogICAqICAgICAgICAgdGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgQURDIHJlc29sdXRpb24gdG8gY29udmVydCB2b2x0YWdlIG9mCiAgICogICAgICAgICB0ZW1wZXJhdHVyZSBzZW5zb3IuCkBAIC0yMjQxLDE3ICsyMjQ1LDE3IEBACiAgICovCiAjZGVmaW5lIF9fTExfQURDX0NBTENfVEVNUEVSQVRVUkUoX19WUkVGQU5BTE9HX1ZPTFRBR0VfXyxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19URU1QU0VOU09SX0FEQ19EQVRBX18sXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQURDX1JFU09MVVRJT05fXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICgoKCggKChpbnQzMl90KSgoX19MTF9BRENfQ09OVkVSVF9EQVRBX1JFU09MVVRJT04oKF9fVEVNUFNFTlNPUl9BRENfREFUQV9fKSwgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BRENfUkVTT0xVVElPTl9fKSwgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExMX0FEQ19SRVNPTFVUSU9OXzEyQikgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgKiAoX19WUkVGQU5BTE9HX1ZPTFRBR0VfXykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIC8gVEVNUFNFTlNPUl9DQUxfVlJFRkFOQUxPRykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAtIChpbnQzMl90KSAqVEVNUFNFTlNPUl9DQUwxX0FERFIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICkgKiAoaW50MzJfdCkoVEVNUFNFTlNPUl9DQUwyX1RFTVAgLSBURU1QU0VOU09SX0NBTDFfVEVNUCkgICAgICAgICAgICAgICAgICAgIFwKLSAgICApIC8gKGludDMyX3QpKChpbnQzMl90KSpURU1QU0VOU09SX0NBTDJfQUREUiAtIChpbnQzMl90KSpURU1QU0VOU09SX0NBTDFfQUREUikgXAotICAgKSArIFRFTVBTRU5TT1JfQ0FMMV9URU1QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19SRVNPTFVUSU9OX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKygoKCggKChpbnQzMl90KSgoX19MTF9BRENfQ09OVkVSVF9EQVRBX1JFU09MVVRJT04oKF9fVEVNUFNFTlNPUl9BRENfREFUQV9fKSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fXyksICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTExfQURDX1JFU09MVVRJT05fMTJCKSAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgKiAoX19WUkVGQU5BTE9HX1ZPTFRBR0VfXykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAvIFRFTVBTRU5TT1JfQ0FMX1ZSRUZBTkFMT0cpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC0gKGludDMyX3QpICpURU1QU0VOU09SX0NBTDFfQUREUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICkgKiAoaW50MzJfdCkoVEVNUFNFTlNPUl9DQUwyX1RFTVAgLSBURU1QU0VOU09SX0NBTDFfVEVNUCkgICAgICAgICAgICAgICAgICAgIFwKKyAgKSAvIChpbnQzMl90KSgoaW50MzJfdCkqVEVNUFNFTlNPUl9DQUwyX0FERFIgLSAoaW50MzJfdCkqVEVNUFNFTlNPUl9DQUwxX0FERFIpIFwKKyApICsgVEVNUFNFTlNPUl9DQUwxX1RFTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKykKIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gY2FsY3VsYXRlIHRoZSB0ZW1wZXJhdHVyZSAodW5pdDogZGVncmVlIENlbHNpdXMpCkBAIC0yMzAyLDE4ICsyMzA2LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1RFTVBTRU5TT1JfQ0FMWF9URU1QX18sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19WUkVGQU5BTE9HX1ZPTFRBR0VfXyxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1RFTVBTRU5TT1JfQURDX0RBVEFfXyxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19SRVNPTFVUSU9OX18pICAgICAgICAgICAgICAgXAotICAoKCggKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAoaW50MzJfdCkoKCgoX19URU1QU0VOU09SX0FEQ19EQVRBX18pICogKF9fVlJFRkFOQUxPR19WT0xUQUdFX18pKSAgICAgICBcCi0gICAgICAgICAgICAgICAgICAvIF9fTExfQURDX0RJR0lUQUxfU0NBTEUoX19BRENfUkVTT0xVVElPTl9fKSkgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAqIDEwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgKGludDMyX3QpKCgoX19URU1QU0VOU09SX1RZUF9DQUxYX1ZfXykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAqIDEwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKSAvIChpbnQzMl90KShfX1RFTVBTRU5TT1JfVFlQX0FWR1NMT1BFX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgKSArIChpbnQzMl90KShfX1RFTVBTRU5TT1JfQ0FMWF9URU1QX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BRENfUkVTT0xVVElPTl9fKSAgICAgICAgICAgIFwKKygoKCgoaW50MzJfdCkoKCgoX19URU1QU0VOU09SX0FEQ19EQVRBX18pICogKF9fVlJFRkFOQUxPR19WT0xUQUdFX18pKSAgICAgICBcCisgICAgICAgICAgICAgICAvIF9fTExfQURDX0RJR0lUQUxfU0NBTEUoX19BRENfUkVTT0xVVElPTl9fKSkgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAqIDEwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGludDMyX3QpKCgoX19URU1QU0VOU09SX1RZUF9DQUxYX1ZfXykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAqIDEwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICkgLyAoaW50MzJfdCkoX19URU1QU0VOU09SX1RZUF9BVkdTTE9QRV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICkgKyAoaW50MzJfdCkoX19URU1QU0VOU09SX0NBTFhfVEVNUF9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKykKIAogLyoqCiAgICogQH0KQEAgLTIzNjksNyArMjM3Miw3IEBACiAjaWYgZGVmaW5lZChBRENfTVVMVElNT0RFX1NVUFBPUlQpCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQURDX0RNQV9HZXRSZWdBZGRyKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBSZWdpc3RlcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZGF0YV9yZWdfYWRkcjsKKyAgdWludDMyX3QgZGF0YV9yZWdfYWRkcjsKIAogICBpZiAoUmVnaXN0ZXIgPT0gTExfQURDX0RNQV9SRUdfUkVHVUxBUl9EQVRBKQogICB7CkBAIC0yMzkzLDcgKzIzOTYsNyBAQAogICAvKiBSZXRyaWV2ZSBhZGRyZXNzIG9mIHJlZ2lzdGVyIERSICovCiAgIHJldHVybiAodWludDMyX3QpICYoQURDeC0+RFIpOwogfQotI2VuZGlmCisjZW5kaWYgLyogQURDX01VTFRJTU9ERV9TVVBQT1JUICovCiAKIC8qKgogICAqIEB9CkBAIC0yNDA1LDExICsyNDA4LDExIEBACiAKIC8qKgogICAqIEBicmllZiAgU2V0IHBhcmFtZXRlciBjb21tb24gdG8gc2V2ZXJhbCBBREM6IENsb2NrIHNvdXJjZSBhbmQgcHJlc2NhbGVyLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgaWYgQURDIGdyb3VwIGluamVjdGVkIGlzIHVzZWQsIHNvbWUKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBpZiBBREMgZ3JvdXAgaW5qZWN0ZWQgaXMgdXNlZCwgc29tZQogICAqICAgICAgICAgY2xvY2sgcmF0aW8gY29uc3RyYWludHMgYmV0d2VlbiBBREMgY2xvY2sgYW5kIEFIQiBjbG9jawogICAqICAgICAgICAgbXVzdCBiZSByZXNwZWN0ZWQuCiAgICogICAgICAgICBSZWZlciB0byByZWZlcmVuY2UgbWFudWFsLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQWxsIEFEQyBpbnN0YW5jZXMgb2YgdGhlIEFEQyBjb21tb24gZ3JvdXAgbXVzdCBiZSBkaXNhYmxlZC4KICAgKiAgICAgICAgIFRoaXMgY2hlY2sgY2FuIGJlIGRvbmUgd2l0aCBmdW5jdGlvbiBAcmVmIExMX0FEQ19Jc0VuYWJsZWQoKSBmb3IgZWFjaApAQCAtMjYxMiw3ICsyNjE1LDcgQEAKICAgKiAgICAgICAgIGJvdGggY2FsaWJyYXRpb24gZmFjdG9ycyBtdXN0IGJlIGNvbmNhdGVuYXRlZC4KICAgKiAgICAgICAgIFRvIHBlcmZvcm0gdGhpcyBwcm9jZXNzaW5nLCB1c2UgaGVscGVyIG1hY3JvCiAgICogICAgICAgICBAcmVmIF9fTExfQURDX0NBTElCX0ZBQ1RPUl9TSU5HTEVfRElGRigpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgZW5hYmxlZCwgd2l0aG91dCBjYWxpYnJhdGlvbiBvbiBnb2luZywgd2l0aG91dCBjb252ZXJzaW9uCiAgICogICAgICAgICBvbiBnb2luZyBvbiBncm91cCByZWd1bGFyLgpAQCAtMjY1NSwxNCArMjY1OCwxNiBAQAogICAvKiAiU2luZ2xlRGlmZiIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogUGFyYW1ldGVyIHVzZWQgd2l0aCBtYXNrICJBRENfU0lOR0xFRElGRl9DQUxJQl9GQUNUT1JfTUFTSyIgYmVjYXVzZSAgICAgICovCiAgIC8qIGNvbnRhaW5pbmcgb3RoZXIgYml0cyByZXNlcnZlZCBmb3Igb3RoZXIgcHVycG9zZS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChBREN4LT5DQUxGQUNULCAoU2luZ2xlRGlmZiAmIEFEQ19TSU5HTEVESUZGX0NBTElCX0ZBQ1RPUl9NQVNLKSkgPj4gKChTaW5nbGVEaWZmICYgQURDX1NJTkdMRURJRkZfQ0FMSUJfRl9CSVRfRF9NQVNLKSA+PiBBRENfU0lOR0xFRElGRl9DQUxJQl9GX0JJVF9EX1NISUZUNCkpOworICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChBREN4LT5DQUxGQUNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU2luZ2xlRGlmZiAmIEFEQ19TSU5HTEVESUZGX0NBTElCX0ZBQ1RPUl9NQVNLKSkgPj4gKChTaW5nbGVEaWZmICYgQURDX1NJTkdMRURJRkZfQ0FMSUJfRl9CSVRfRF9NQVNLKSA+PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19TSU5HTEVESUZGX0NBTElCX0ZfQklUX0RfU0hJRlQ0KSk7CiB9CiAKIC8qKgogICAqIEBicmllZiAgU2V0IEFEQyByZXNvbHV0aW9uLgogICAqICAgICAgICAgUmVmZXIgdG8gcmVmZXJlbmNlIG1hbnVhbCBmb3IgYWxpZ25tZW50cyBmb3JtYXRzCiAgICogICAgICAgICBkZXBlbmRlbmNpZXMgdG8gQURDIHJlc29sdXRpb25zLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgZGlzYWJsZWQgb3IgZW5hYmxlZCB3aXRob3V0IGNvbnZlcnNpb24gb24gZ29pbmcKICAgKiAgICAgICAgIG9uIGVpdGhlciBncm91cHMgcmVndWxhciBvciBpbmplY3RlZC4KQEAgLTI3MDEsNyArMjcwNiw3IEBACiAgICogQGJyaWVmICBTZXQgQURDIGNvbnZlcnNpb24gZGF0YSBhbGlnbm1lbnQuCiAgICogQG5vdGUgICBSZWZlciB0byByZWZlcmVuY2UgbWFudWFsIGZvciBhbGlnbm1lbnRzIGZvcm1hdHMKICAgKiAgICAgICAgIGRlcGVuZGVuY2llcyB0byBBREMgcmVzb2x1dGlvbnMuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtMjc0OSw5ICsyNzU0LDEyIEBACiAgICogICAgICAgICAgIE1vcmVvdmVyLCB0aGlzIGF2b2lkcyByaXNrIG9mIG92ZXJydW4gZm9yIGxvdyBmcmVxdWVuY3kKICAgKiAgICAgICAgICAgYXBwbGljYXRpb25zLgogICAqICAgICAgICAgICBIb3cgdG8gdXNlIHRoaXMgbG93IHBvd2VyIG1vZGU6Ci0gICogICAgICAgICAgIC0gRG8gbm90IHVzZSB3aXRoIGludGVycnVwdGlvbiBvciBETUEgc2luY2UgdGhlc2UgbW9kZXMKLSAgKiAgICAgICAgICAgICBoYXZlIHRvIGNsZWFyIGltbWVkaWF0ZWx5IHRoZSBFT0MgZmxhZyB0byBmcmVlIHRoZQotICAqICAgICAgICAgICAgIElSUSB2ZWN0b3Igc2VxdWVuY2VyLgorICAqICAgICAgICAgICAtIEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byB1c2Ugd2l0aCBpbnRlcnJ1cHRpb24gb3IgRE1BCisgICogICAgICAgICAgICAgc2luY2UgdGhlc2UgbW9kZXMgaGF2ZSB0byBjbGVhciBpbW1lZGlhdGVseSB0aGUgRU9DIGZsYWcKKyAgKiAgICAgICAgICAgICAoYnkgQ1BVIHRvIGZyZWUgdGhlIElSUSBwZW5kaW5nIGV2ZW50IG9yIGJ5IERNQSkuCisgICogICAgICAgICAgICAgQXV0byB3YWl0IHdpbGwgd29yayBidXQgZm9ydCBhIHZlcnkgc2hvcnQgdGltZSwgZGlzY2FyZGluZworICAqICAgICAgICAgICAgIGl0cyBpbnRlbmRlZCBiZW5lZml0IChleGNlcHQgc3BlY2lmaWMgY2FzZSBvZiBoaWdoIGxvYWQgb2YgQ1BVCisgICogICAgICAgICAgICAgb3IgRE1BIHRyYW5zZmVycyB3aGljaCBjYW4ganVzdGlmeSB1c2FnZSBvZiBhdXRvIHdhaXQpLgogICAqICAgICAgICAgICAtIERvIHVzZSB3aXRoIHBvbGxpbmc6IDEuIFN0YXJ0IGNvbnZlcnNpb24sCiAgICogICAgICAgICAgICAgMi4gTGF0ZXIgb24sIHdoZW4gY29udmVyc2lvbiBkYXRhIGlzIG5lZWRlZDogcG9sbCBmb3IgZW5kIG9mCiAgICogICAgICAgICAgICAgY29udmVyc2lvbiAgdG8gZW5zdXJlIHRoYXQgY29udmVyc2lvbiBpcyBjb21wbGV0ZWQgYW5kCkBAIC0yNzY5LDcgKzI3NzcsNyBAQAogICAqICAgICAgICAgVGhlcmVmb3JlLCB0aGUgQURDIGNvbnZlcnNpb24gZGF0YSBtYXkgYmUgb3V0ZGF0ZWQ6IGRvZXMgbm90CiAgICogICAgICAgICBjb3JyZXNwb25kIHRvIHRoZSBjdXJyZW50IHZvbHRhZ2UgbGV2ZWwgb24gdGhlIHNlbGVjdGVkCiAgICogICAgICAgICBBREMgY2hhbm5lbC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGRpc2FibGVkIG9yIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nCiAgICogICAgICAgICBvbiBlaXRoZXIgZ3JvdXBzIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCkBAIC0yODAyLDkgKzI4MTAsMTIgQEAKICAgKiAgICAgICAgICAgTW9yZW92ZXIsIHRoaXMgYXZvaWRzIHJpc2sgb2Ygb3ZlcnJ1biBmb3IgbG93IGZyZXF1ZW5jeQogICAqICAgICAgICAgICBhcHBsaWNhdGlvbnMuCiAgICogICAgICAgICAgIEhvdyB0byB1c2UgdGhpcyBsb3cgcG93ZXIgbW9kZToKLSAgKiAgICAgICAgICAgLSBEbyBub3QgdXNlIHdpdGggaW50ZXJydXB0aW9uIG9yIERNQSBzaW5jZSB0aGVzZSBtb2RlcwotICAqICAgICAgICAgICAgIGhhdmUgdG8gY2xlYXIgaW1tZWRpYXRlbHkgdGhlIEVPQyBmbGFnIHRvIGZyZWUgdGhlCi0gICogICAgICAgICAgICAgSVJRIHZlY3RvciBzZXF1ZW5jZXIuCisgICogICAgICAgICAgIC0gSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHVzZSB3aXRoIGludGVycnVwdGlvbiBvciBETUEKKyAgKiAgICAgICAgICAgICBzaW5jZSB0aGVzZSBtb2RlcyBoYXZlIHRvIGNsZWFyIGltbWVkaWF0ZWx5IHRoZSBFT0MgZmxhZworICAqICAgICAgICAgICAgIChieSBDUFUgdG8gZnJlZSB0aGUgSVJRIHBlbmRpbmcgZXZlbnQgb3IgYnkgRE1BKS4KKyAgKiAgICAgICAgICAgICBBdXRvIHdhaXQgd2lsbCB3b3JrIGJ1dCBmb3J0IGEgdmVyeSBzaG9ydCB0aW1lLCBkaXNjYXJkaW5nCisgICogICAgICAgICAgICAgaXRzIGludGVuZGVkIGJlbmVmaXQgKGV4Y2VwdCBzcGVjaWZpYyBjYXNlIG9mIGhpZ2ggbG9hZCBvZiBDUFUKKyAgKiAgICAgICAgICAgICBvciBETUEgdHJhbnNmZXJzIHdoaWNoIGNhbiBqdXN0aWZ5IHVzYWdlIG9mIGF1dG8gd2FpdCkuCiAgICogICAgICAgICAgIC0gRG8gdXNlIHdpdGggcG9sbGluZzogMS4gU3RhcnQgY29udmVyc2lvbiwKICAgKiAgICAgICAgICAgICAyLiBMYXRlciBvbiwgd2hlbiBjb252ZXJzaW9uIGRhdGEgaXMgbmVlZGVkOiBwb2xsIGZvciBlbmQgb2YKICAgKiAgICAgICAgICAgICBjb252ZXJzaW9uICB0byBlbnN1cmUgdGhhdCBjb252ZXJzaW9uIGlzIGNvbXBsZXRlZCBhbmQKQEAgLTI4NDgsNyArMjg1OSw3IEBACiAgICogICAgICAgICB0byBkaXNhYmxlIHN0YXRlIHVzaW5nIGZ1bmN0aW9uIExMX0FEQ19TZXRPZmZzZXRTdGF0ZSgpLgogICAqIEBub3RlICAgSWYgYSBjaGFubmVsIGlzIG1hcHBlZCBvbiBzZXZlcmFsIG9mZnNldHMgbnVtYmVycywgb25seSB0aGUgb2Zmc2V0CiAgICogICAgICAgICB3aXRoIHRoZSBsb3dlc3QgdmFsdWUgaXMgY29uc2lkZXJlZCBmb3IgdGhlIHN1YnRyYWN0aW9uLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgZGlzYWJsZWQgb3IgZW5hYmxlZCB3aXRob3V0IGNvbnZlcnNpb24gb24gZ29pbmcKICAgKiAgICAgICAgIG9uIGVpdGhlciBncm91cHMgcmVndWxhciBvciBpbmplY3RlZC4KQEAgLTI5MTUsNyArMjkyNiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfU2V0T2Zmc2V0KEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBPZmZzZXR5LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBPZmZzZXRMZXZlbCkKIHsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPk9GUjEsIE9mZnNldHkpOworICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+T0ZSMSwgT2Zmc2V0eSk7CiAKICAgTU9ESUZZX1JFRygqcHJlZywKICAgICAgICAgICAgICBBRENfT0ZSMV9PRkZTRVQxX0VOIHwgQURDX09GUjFfT0ZGU0VUMV9DSCB8IEFEQ19PRlIxX09GRlNFVDEsCkBAIC0yOTk0LDcgKzMwMDUsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19HZXRPZmZzZXRDaGFubmVsKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBPZmZzZXR5KQogewotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+T0ZSMSwgT2Zmc2V0eSk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5PRlIxLCBPZmZzZXR5KTsKIAogICByZXR1cm4gKHVpbnQzMl90KSBSRUFEX0JJVCgqcHJlZywgQURDX09GUjFfT0ZGU0VUMV9DSCk7CiB9CkBAIC0zMDIwLDcgKzMwMzEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19HZXRPZmZzZXRMZXZlbChBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgT2Zmc2V0eSkKIHsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPk9GUjEsIE9mZnNldHkpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+T0ZSMSwgT2Zmc2V0eSk7CiAKICAgcmV0dXJuICh1aW50MzJfdCkgUkVBRF9CSVQoKnByZWcsIEFEQ19PRlIxX09GRlNFVDEpOwogfQpAQCAtMzAzMiw3ICszMDQzLDcgQEAKICAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIG5lZWRlZCBvbmx5IGluIGNhc2Ugb2Ygb2Zmc2V0IHRvIGJlCiAgICogICAgICAgICBlbmFibGVkLWRpc2FibGVkIGR5bmFtaWNhbGx5LCBhbmQgc2hvdWxkIG5vdCBiZSBuZWVkZWQgaW4gb3RoZXIgY2FzZXM6CiAgICogICAgICAgICBmdW5jdGlvbiBMTF9BRENfU2V0T2Zmc2V0KCkgYXV0b21hdGljYWxseSBlbmFibGVzIHRoZSBvZmZzZXQuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtMzA1Myw3ICszMDY0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FEQ19TZXRPZmZzZXRTdGF0ZShBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgT2Zmc2V0eSwgdWludDMyX3QgT2Zmc2V0U3RhdGUpCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5PRlIxLCBPZmZzZXR5KTsKKyAgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPk9GUjEsIE9mZnNldHkpOwogCiAgIE1PRElGWV9SRUcoKnByZWcsCiAgICAgICAgICAgICAgQURDX09GUjFfT0ZGU0VUMV9FTiwKQEAgLTMwNzksNyArMzA5MCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQURDX0dldE9mZnNldFN0YXRlKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBPZmZzZXR5KQogewotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+T0ZSMSwgT2Zmc2V0eSk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5PRlIxLCBPZmZzZXR5KTsKIAogICByZXR1cm4gKHVpbnQzMl90KSBSRUFEX0JJVCgqcHJlZywgQURDX09GUjFfT0ZGU0VUMV9FTik7CiB9CkBAIC0zMDg4LDcgKzMwOTksNyBAQAogLyoqCiAgICogQGJyaWVmICBTZXQgQURDIHNhbXBsaW5nIHRpbWUgY29tbW9uIGNvbmZpZ3VyYXRpb24gaW1wYWN0aW5nCiAgICogICAgICAgICBzZXR0aW5ncyBvZiBzYW1wbGluZyB0aW1lIGNoYW5uZWwgd2lzZS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGRpc2FibGVkIG9yIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nCiAgICogICAgICAgICBvbiBlaXRoZXIgZ3JvdXBzIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCkBAIC0zMTMxLDcgKzMxNDIsNyBAQAogICAqIEBicmllZiAgU2V0IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBzb3VyY2U6CiAgICogICAgICAgICBpbnRlcm5hbCAoU1cgc3RhcnQpIG9yIGZyb20gZXh0ZXJuYWwgcGVyaXBoZXJhbCAodGltZXIgZXZlbnQsCiAgICogICAgICAgICBleHRlcm5hbCBpbnRlcnJ1cHQgbGluZSkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIHRyaWdnZXIgc291cmNlIHRvIGV4dGVybmFsIHRyaWdnZXIKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIHRyaWdnZXIgc291cmNlIHRvIGV4dGVybmFsIHRyaWdnZXIKICAgKiAgICAgICAgIGFsc28gc2V0IHRyaWdnZXIgcG9sYXJpdHkgdG8gcmlzaW5nIGVkZ2UKICAgKiAgICAgICAgIChkZWZhdWx0IHNldHRpbmcgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBzb21lIEFEQyBvbiBvdGhlcgogICAqICAgICAgICAgU1RNMzIgZmFtaWxpZXMgaGF2aW5nIHRoaXMgc2V0dGluZyBzZXQgYnkgSFcgZGVmYXVsdCB2YWx1ZSkuCkBAIC0zMTM5LDcgKzMxNTAsNyBAQAogICAqICAgICAgICAgZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1NldFRyaWdnZXJFZGdlKCkuCiAgICogQG5vdGUgICBBdmFpbGFiaWxpdHkgb2YgcGFyYW1ldGVycyBvZiB0cmlnZ2VyIHNvdXJjZXMgZnJvbSB0aW1lcgogICAqICAgICAgICAgZGVwZW5kcyBvbiB0aW1lcnMgYXZhaWxhYmlsaXR5IG9uIHRoZSBzZWxlY3RlZCBkZXZpY2UuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZ3JvdXAgcmVndWxhci4KQEAgLTMyMDcsMTEgKzMyMTgsMTEgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfUkVHX0dldFRyaWdnZXJTb3VyY2UoQURDX1R5cGVEZWYgKkFEQ3gpCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgVHJpZ2dlclNvdXJjZSA9IFJFQURfQklUKEFEQ3gtPkNGR1IsIEFEQ19DRkdSX0VYVFNFTCB8IEFEQ19DRkdSX0VYVEVOKTsKKyAgX19JTyB1aW50MzJfdCBUcmlnZ2VyU291cmNlID0gUkVBRF9CSVQoQURDeC0+Q0ZHUiwgQURDX0NGR1JfRVhUU0VMIHwgQURDX0NGR1JfRVhURU4pOwogCiAgIC8qIFZhbHVlIGZvciBzaGlmdCBvZiB7MDsgNDsgODsgMTJ9IGRlcGVuZGluZyBvbiB2YWx1ZSBvZiBiaXRmaWVsZCAgICAgICAgICAqLwogICAvKiBjb3JyZXNwb25kaW5nIHRvIEFEQ19DRkdSX0VYVEVOIHswOyAxOyAyOyAzfS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgcmVnaXN0ZXIgdWludDMyX3QgU2hpZnRFeHRlbiA9ICgoVHJpZ2dlclNvdXJjZSAmIEFEQ19DRkdSX0VYVEVOKSA+PiAoQURDX1JFR19UUklHX0VYVEVOX0JJVE9GRlNFVF9QT1MgLSAyVUwpKTsKKyAgdWludDMyX3QgU2hpZnRFeHRlbiA9ICgoVHJpZ2dlclNvdXJjZSAmIEFEQ19DRkdSX0VYVEVOKSA+PiAoQURDX1JFR19UUklHX0VYVEVOX0JJVE9GRlNFVF9QT1MgLSAyVUwpKTsKIAogICAvKiBTZXQgYml0ZmllbGQgY29ycmVzcG9uZGluZyB0byBBRENfQ0ZHUl9FWFRFTiBhbmQgQURDX0NGR1JfRVhUU0VMICAgICAgICAgKi8KICAgLyogdG8gbWF0Y2ggd2l0aCB0cmlnZ2VycyBsaXRlcmFscyBkZWZpbml0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zMjQwLDcgKzMyNTEsNyBAQAogLyoqCiAgICogQGJyaWVmICBTZXQgQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbiB0cmlnZ2VyIHBvbGFyaXR5LgogICAqIEBub3RlICAgQXBwbGljYWJsZSBvbmx5IGZvciB0cmlnZ2VyIHNvdXJjZSBzZXQgdG8gZXh0ZXJuYWwgdHJpZ2dlci4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGRpc2FibGVkIG9yIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nCiAgICogICAgICAgICBvbiBncm91cCByZWd1bGFyLgpAQCAtMzMwMSw3ICszMzEyLDcgQEAKICAgKiAgICAgICAgICAgZnVuY3Rpb24gIkxMX0FEQ19SRUdfU2V0U2VxdWVuY2VyQ2hhbm5lbHMoKSIuCiAgICogQG5vdGUgICBTZXF1ZW5jZXIgZGlzYWJsZWQgaXMgZXF1aXZhbGVudCB0byBzZXF1ZW5jZXIgb2YgMSByYW5rOgogICAqICAgICAgICAgQURDIGNvbnZlcnNpb24gb24gb25seSAxIGNoYW5uZWwuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZ3JvdXAgcmVndWxhci4KQEAgLTMzOTMsNyArMzQwNCw3IEBACiAgICogICAgICAgICBjb250aW51b3VzIG1vZGUgYW5kIHNlcXVlbmNlciBkaXNjb250aW51b3VzIG1vZGUuCiAgICogQG5vdGUgICBJdCBpcyBub3QgcG9zc2libGUgdG8gZW5hYmxlIGJvdGggQURDIGF1dG8taW5qZWN0ZWQgbW9kZQogICAqICAgICAgICAgYW5kIEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBkaXNjb250aW51b3VzIG1vZGUuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZ3JvdXAgcmVndWxhci4KQEAgLTM0NDYsMTcgKzM0NTcsMTcgQEAKICAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgY29uZmlndXJhdGlvbiBvZjoKICAgKiAgICAgICAgIC0gQ2hhbm5lbHMgb3JkZXJpbmcgaW50byBlYWNoIHJhbmsgb2Ygc2NhbiBzZXF1ZW5jZToKICAgKiAgICAgICAgICAgd2hhdGV2ZXIgY2hhbm5lbCBjYW4gYmUgcGxhY2VkIGludG8gd2hhdGV2ZXIgcmFuay4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBpcworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBpcwogICAqICAgICAgICAgZnVsbHkgY29uZmlndXJhYmxlOiBzZXF1ZW5jZXIgbGVuZ3RoIGFuZCBlYWNoIHJhbmsKICAgKiAgICAgICAgIGFmZmVjdGF0aW9uIHRvIGEgY2hhbm5lbCBhcmUgY29uZmlndXJhYmxlLgogICAqICAgICAgICAgUmVmZXIgdG8gZGVzY3JpcHRpb24gb2YgZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1NldFNlcXVlbmNlckxlbmd0aCgpLgogICAqIEBub3RlICAgRGVwZW5kaW5nIG9uIGRldmljZXMgYW5kIHBhY2thZ2VzLCBzb21lIGNoYW5uZWxzIG1heSBub3QgYmUgYXZhaWxhYmxlLgogICAqICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdG8gbWVhc3VyZSBpbnRlcm5hbCBjaGFubmVscyAoVnJlZkludCwKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0byBtZWFzdXJlIGludGVybmFsIGNoYW5uZWxzIChWcmVmSW50LAogICAqICAgICAgICAgVGVtcFNlbnNvciwgLi4uKSwgbWVhc3VyZW1lbnQgcGF0aHMgdG8gaW50ZXJuYWwgY2hhbm5lbHMgbXVzdCBiZQogICAqICAgICAgICAgZW5hYmxlZCBzZXBhcmF0ZWx5LgogICAqICAgICAgICAgVGhpcyBjYW4gYmUgZG9uZSB1c2luZyBmdW5jdGlvbiBAcmVmIExMX0FEQ19TZXRDb21tb25QYXRoSW50ZXJuYWxDaCgpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgZGlzYWJsZWQgb3IgZW5hYmxlZCB3aXRob3V0IGNvbnZlcnNpb24gb24gZ29pbmcKICAgKiAgICAgICAgIG9uIGdyb3VwIHJlZ3VsYXIuCkBAIC0zNTQwLDcgKzM1NTEsNyBAQAogICAvKiBpbiByZWdpc3RlciBhbmQgcmVnaXN0ZXIgcG9zaXRpb24gZGVwZW5kaW5nIG9uIHBhcmFtZXRlciAiUmFuayIuICAgICAgICAgKi8KICAgLyogUGFyYW1ldGVycyAiUmFuayIgYW5kICJDaGFubmVsIiBhcmUgdXNlZCB3aXRoIG1hc2tzIGJlY2F1c2UgY29udGFpbmluZyAgICovCiAgIC8qIG90aGVyIGJpdHMgcmVzZXJ2ZWQgZm9yIG90aGVyIHB1cnBvc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+U1FSMSwgKChSYW5rICYgQURDX1JFR19TUVJYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfU1FSWF9SRUdPRkZTRVRfUE9TKSk7CisgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5TUVIxLCAoKFJhbmsgJiBBRENfUkVHX1NRUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19TUVJYX1JFR09GRlNFVF9QT1MpKTsKIAogICBNT0RJRllfUkVHKCpwcmVnLAogICAgICAgICAgICAgIEFEQ19DSEFOTkVMX0lEX05VTUJFUl9NQVNLX1BPU0JJVDAgPDwgKFJhbmsgJiBBRENfUkVHX1JBTktfSURfU1FSWF9NQVNLKSwKQEAgLTM1NTAsNyArMzU2MSw3IEBACiAvKioKICAgKiBAYnJpZWYgIEdldCBBREMgZ3JvdXAgcmVndWxhciBzZXF1ZW5jZTogY2hhbm5lbCBvbiB0aGUgc2VsZWN0ZWQKICAgKiAgICAgICAgIHNjYW4gc2VxdWVuY2UgcmFuay4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBpcworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBpcwogICAqICAgICAgICAgZnVsbHkgY29uZmlndXJhYmxlOiBzZXF1ZW5jZXIgbGVuZ3RoIGFuZCBlYWNoIHJhbmsKICAgKiAgICAgICAgIGFmZmVjdGF0aW9uIHRvIGEgY2hhbm5lbCBhcmUgY29uZmlndXJhYmxlLgogICAqICAgICAgICAgUmVmZXIgdG8gZGVzY3JpcHRpb24gb2YgZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1NldFNlcXVlbmNlckxlbmd0aCgpLgpAQCAtMzY0NSw3ICszNjU2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfUkVHX0dldFNlcXVlbmNlclJhbmtzKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBSYW5rKQogewotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+U1FSMSwgKChSYW5rICYgQURDX1JFR19TUVJYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfU1FSWF9SRUdPRkZTRVRfUE9TKSk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5TUVIxLCAoKFJhbmsgJiBBRENfUkVHX1NRUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19TUVJYX1JFR09GRlNFVF9QT1MpKTsKIAogICByZXR1cm4gKHVpbnQzMl90KSgoUkVBRF9CSVQoKnByZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfTUFTS19QT1NCSVQwIDw8IChSYW5rICYgQURDX1JFR19SQU5LX0lEX1NRUlhfTUFTSykpCkBAIC0zNjYxLDcgKzM2NzIsNyBAQAogICAqICAgICAgICAgICBjb252ZXJzaW9ucyBsYXVuY2hlZCBzdWNjZXNzaXZlbHkgYXV0b21hdGljYWxseS4KICAgKiBAbm90ZSAgIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBlbmFibGUgYm90aCBBREMgZ3JvdXAgcmVndWxhcgogICAqICAgICAgICAgY29udGludW91cyBtb2RlIGFuZCBzZXF1ZW5jZXIgZGlzY29udGludW91cyBtb2RlLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgZGlzYWJsZWQgb3IgZW5hYmxlZCB3aXRob3V0IGNvbnZlcnNpb24gb24gZ29pbmcKICAgKiAgICAgICAgIG9uIGdyb3VwIHJlZ3VsYXIuCkBAIC0zNzE2LDcgKzM3MjcsNyBAQAogICAqICAgICAgICAgc2V0dGluZ3MgYXJlIGF2YWlsYWJsZSB1c2luZyBmdW5jdGlvbiBAcmVmIExMX0FEQ19TZXRNdWx0aURNQVRyYW5zZmVyKCkuCiAgICogQG5vdGUgICBUbyBjb25maWd1cmUgRE1BIHNvdXJjZSBhZGRyZXNzIChwZXJpcGhlcmFsIGFkZHJlc3MpLAogICAqICAgICAgICAgdXNlIGZ1bmN0aW9uIEByZWYgTExfQURDX0RNQV9HZXRSZWdBZGRyKCkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtMzc3Niw3ICszNzg3LDcgQEAKICAgKiBAbm90ZSAgIFRvIGNvbmZpZ3VyZSBERlNETSBzb3VyY2UgYWRkcmVzcyAocGVyaXBoZXJhbCBhZGRyZXNzKSwKICAgKiAgICAgICAgIHVzZSB0aGUgc2FtZSBmdW5jdGlvbiBhcyBmb3IgRE1BIHRyYW5zZmVyOgogICAqICAgICAgICAgZnVuY3Rpb24gQHJlZiBMTF9BRENfRE1BX0dldFJlZ0FkZHIoKS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGRpc2FibGVkIG9yIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nCiAgICogICAgICAgICBvbiBlaXRoZXIgZ3JvdXBzIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCkBAIC0zODA0LDcgKzM4MTUsNyBAQAogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChBREN4LT5DRkdSLCBBRENfQ0ZHUl9ERlNETUNGRykpOwogfQotI2VuZGlmCisjZW5kaWYgLyogQURDX0NGR1JfREZTRE1DRkcgKi8KIAogLyoqCiAgICogQGJyaWVmICBTZXQgQURDIGdyb3VwIHJlZ3VsYXIgYmVoYXZpb3IgaW4gY2FzZSBvZiBvdmVycnVuOgpAQCAtMzgxNSw3ICszODI2LDcgQEAKICAgKiAgICAgICAgIFRoZSBkZWZhdWx0IHNldHRpbmcgb2Ygb3ZlcnJ1biBpcyBkYXRhIHByZXNlcnZlZC4KICAgKiAgICAgICAgIFRoZXJlZm9yZSwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhbGwgZGV2aWNlcywgcGFyYW1ldGVyCiAgICogICAgICAgICBvdmVycnVuIHNob3VsZCBiZSBzZXQgdG8gZGF0YSBvdmVyd3JpdHRlbi4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGRpc2FibGVkIG9yIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nCiAgICogICAgICAgICBvbiBncm91cCByZWd1bGFyLgpAQCAtMzg1Nyw3ICszODY4LDcgQEAKICAgKiBAYnJpZWYgIFNldCBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbiB0cmlnZ2VyIHNvdXJjZToKICAgKiAgICAgICAgIGludGVybmFsIChTVyBzdGFydCkgb3IgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsICh0aW1lciBldmVudCwKICAgKiAgICAgICAgIGV4dGVybmFsIGludGVycnVwdCBsaW5lKS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgdHJpZ2dlciBzb3VyY2UgdG8gZXh0ZXJuYWwgdHJpZ2dlcgorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgdHJpZ2dlciBzb3VyY2UgdG8gZXh0ZXJuYWwgdHJpZ2dlcgogICAqICAgICAgICAgYWxzbyBzZXQgdHJpZ2dlciBwb2xhcml0eSB0byByaXNpbmcgZWRnZQogICAqICAgICAgICAgKGRlZmF1bHQgc2V0dGluZyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHNvbWUgQURDIG9uIG90aGVyCiAgICogICAgICAgICBTVE0zMiBmYW1pbGllcyBoYXZpbmcgdGhpcyBzZXR0aW5nIHNldCBieSBIVyBkZWZhdWx0IHZhbHVlKS4KQEAgLTM4NjUsNyArMzg3Niw3IEBACiAgICogICAgICAgICBmdW5jdGlvbiBAcmVmIExMX0FEQ19JTkpfU2V0VHJpZ2dlckVkZ2UoKS4KICAgKiBAbm90ZSAgIEF2YWlsYWJpbGl0eSBvZiBwYXJhbWV0ZXJzIG9mIHRyaWdnZXIgc291cmNlcyBmcm9tIHRpbWVyCiAgICogICAgICAgICBkZXBlbmRzIG9uIHRpbWVycyBhdmFpbGFiaWxpdHkgb24gdGhlIHNlbGVjdGVkIGRldmljZS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IG5vdCBiZSBkaXNhYmxlZC4gQ2FuIGJlIGVuYWJsZWQgd2l0aCBvciB3aXRob3V0IGNvbnZlcnNpb24KICAgKiAgICAgICAgIG9uIGdvaW5nIG9uIGVpdGhlciBncm91cHMgcmVndWxhciBvciBpbmplY3RlZC4KQEAgLTM5MzMsMTEgKzM5NDQsMTEgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfSU5KX0dldFRyaWdnZXJTb3VyY2UoQURDX1R5cGVEZWYgKkFEQ3gpCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgVHJpZ2dlclNvdXJjZSA9IFJFQURfQklUKEFEQ3gtPkpTUVIsIEFEQ19KU1FSX0pFWFRTRUwgfCBBRENfSlNRUl9KRVhURU4pOworICBfX0lPIHVpbnQzMl90IFRyaWdnZXJTb3VyY2UgPSBSRUFEX0JJVChBREN4LT5KU1FSLCBBRENfSlNRUl9KRVhUU0VMIHwgQURDX0pTUVJfSkVYVEVOKTsKIAogICAvKiBWYWx1ZSBmb3Igc2hpZnQgb2YgezA7IDQ7IDg7IDEyfSBkZXBlbmRpbmcgb24gdmFsdWUgb2YgYml0ZmllbGQgICAgICAgICAgKi8KICAgLyogY29ycmVzcG9uZGluZyB0byBBRENfSlNRUl9KRVhURU4gezA7IDE7IDI7IDN9LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHJlZ2lzdGVyIHVpbnQzMl90IFNoaWZ0SmV4dGVuID0gKChUcmlnZ2VyU291cmNlICYgQURDX0pTUVJfSkVYVEVOKSA+PiAoQURDX0lOSl9UUklHX0VYVEVOX0JJVE9GRlNFVF9QT1MgLSAyVUwpKTsKKyAgdWludDMyX3QgU2hpZnRKZXh0ZW4gPSAoKFRyaWdnZXJTb3VyY2UgJiBBRENfSlNRUl9KRVhURU4pID4+IChBRENfSU5KX1RSSUdfRVhURU5fQklUT0ZGU0VUX1BPUyAtIDJVTCkpOwogCiAgIC8qIFNldCBiaXRmaWVsZCBjb3JyZXNwb25kaW5nIHRvIEFEQ19KU1FSX0pFWFRFTiBhbmQgQURDX0pTUVJfSkVYVFNFTCAgICAgICAqLwogICAvKiB0byBtYXRjaCB3aXRoIHRyaWdnZXJzIGxpdGVyYWxzIGRlZmluaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTM5NjYsNyArMzk3Nyw3IEBACiAvKioKICAgKiBAYnJpZWYgIFNldCBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbiB0cmlnZ2VyIHBvbGFyaXR5LgogICAqICAgICAgICAgQXBwbGljYWJsZSBvbmx5IGZvciB0cmlnZ2VyIHNvdXJjZSBzZXQgdG8gZXh0ZXJuYWwgdHJpZ2dlci4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IG5vdCBiZSBkaXNhYmxlZC4gQ2FuIGJlIGVuYWJsZWQgd2l0aCBvciB3aXRob3V0IGNvbnZlcnNpb24KICAgKiAgICAgICAgIG9uIGdvaW5nIG9uIGVpdGhlciBncm91cHMgcmVndWxhciBvciBpbmplY3RlZC4KQEAgLTQwMDYsNyArNDAxNyw3IEBACiAgICogICAgICAgICAgIHNjYW4gZGlyZWN0aW9uIGlzIGZvcndhcmQgKGZyb20gcmFuayAxIHRvIHJhbmsgbikuCiAgICogQG5vdGUgICBTZXF1ZW5jZXIgZGlzYWJsZWQgaXMgZXF1aXZhbGVudCB0byBzZXF1ZW5jZXIgb2YgMSByYW5rOgogICAqICAgICAgICAgQURDIGNvbnZlcnNpb24gb24gb25seSAxIGNoYW5uZWwuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBub3QgYmUgZGlzYWJsZWQuIENhbiBiZSBlbmFibGVkIHdpdGggb3Igd2l0aG91dCBjb252ZXJzaW9uCiAgICogICAgICAgICBvbiBnb2luZyBvbiBlaXRoZXIgZ3JvdXBzIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCkBAIC00MDgzLDEzICs0MDk0LDEzIEBACiAgICogICAgICAgICBzZXF1ZW5jZSByYW5rLgogICAqIEBub3RlICAgRGVwZW5kaW5nIG9uIGRldmljZXMgYW5kIHBhY2thZ2VzLCBzb21lIGNoYW5uZWxzIG1heSBub3QgYmUgYXZhaWxhYmxlLgogICAqICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdG8gbWVhc3VyZSBpbnRlcm5hbCBjaGFubmVscyAoVnJlZkludCwKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0byBtZWFzdXJlIGludGVybmFsIGNoYW5uZWxzIChWcmVmSW50LAogICAqICAgICAgICAgVGVtcFNlbnNvciwgLi4uKSwgbWVhc3VyZW1lbnQgcGF0aHMgdG8gaW50ZXJuYWwgY2hhbm5lbHMgbXVzdCBiZQogICAqICAgICAgICAgZW5hYmxlZCBzZXBhcmF0ZWx5LgogICAqICAgICAgICAgVGhpcyBjYW4gYmUgZG9uZSB1c2luZyBmdW5jdGlvbiBAcmVmIExMX0FEQ19TZXRDb21tb25QYXRoSW50ZXJuYWxDaCgpLgogICAqIEBub3RlICAgT24gU1RNMzJMNCwgc29tZSBmYXN0IGNoYW5uZWxzIGFyZSBhdmFpbGFibGU6IGZhc3QgYW5hbG9nIGlucHV0cwogICAqICAgICAgICAgY29taW5nIGZyb20gR1BJTyBwYWRzIChBRENfSU4xLi41KS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IG5vdCBiZSBkaXNhYmxlZC4gQ2FuIGJlIGVuYWJsZWQgd2l0aCBvciB3aXRob3V0IGNvbnZlcnNpb24KICAgKiAgICAgICAgIG9uIGdvaW5nIG9uIGVpdGhlciBncm91cHMgcmVndWxhciBvciBpbmplY3RlZC4KQEAgLTQyNDksNyArNDI2MCw3IEBACiAgICogICAgICAgICBmcm9tIEFEQyBncm91cCByZWd1bGFyLgogICAqIEBub3RlICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGVuYWJsZSBib3RoIEFEQyBncm91cCBpbmplY3RlZAogICAqICAgICAgICAgYXV0by1pbmplY3RlZCBtb2RlIGFuZCBzZXF1ZW5jZXIgZGlzY29udGludW91cyBtb2RlLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgZGlzYWJsZWQgb3IgZW5hYmxlZCB3aXRob3V0IGNvbnZlcnNpb24gb24gZ29pbmcKICAgKiAgICAgICAgIG9uIGVpdGhlciBncm91cHMgcmVndWxhciBvciBpbmplY3RlZC4KQEAgLTQzMDcsNyArNDMxOCw3IEBACiAgICogICAgICAgICBvbiBlaXRoZXIgZ3JvdXBzIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCiAgICogQG5vdGUgICBBIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udGV4dCBtb2RlIChiaXQgSlFESVMpIGNhdXNlcyB0aGUgY29udGV4dHMKICAgKiAgICAgICAgIHF1ZXVlIHRvIGJlIGZsdXNoZWQgYW5kIHRoZSByZWdpc3RlciBKU1FSIGlzIGNsZWFyZWQuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtNDM1NywxMyArNDM2OCwxMyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19JTkpfR2V0VHJpZ2dlclNvdXJjZSgpCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0lOSl9HZXRUcmlnZ2VyRWRnZSgpCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0lOSl9HZXRTZXF1ZW5jZXJSYW5rcygpCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0byBtZWFzdXJlIGludGVybmFsIGNoYW5uZWxzIChWcmVmSW50LAorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHRvIG1lYXN1cmUgaW50ZXJuYWwgY2hhbm5lbHMgKFZyZWZJbnQsCiAgICogICAgICAgICBUZW1wU2Vuc29yLCAuLi4pLCBtZWFzdXJlbWVudCBwYXRocyB0byBpbnRlcm5hbCBjaGFubmVscyBtdXN0IGJlCiAgICogICAgICAgICBlbmFibGVkIHNlcGFyYXRlbHkuCiAgICogICAgICAgICBUaGlzIGNhbiBiZSBkb25lIHVzaW5nIGZ1bmN0aW9uIEByZWYgTExfQURDX1NldENvbW1vblBhdGhJbnRlcm5hbENoKCkuCiAgICogQG5vdGUgICBPbiBTVE0zMkw0LCBzb21lIGZhc3QgY2hhbm5lbHMgYXJlIGF2YWlsYWJsZTogZmFzdCBhbmFsb2cgaW5wdXRzCiAgICogICAgICAgICBjb21pbmcgZnJvbSBHUElPIHBhZHMgKEFEQ19JTjEuLjUpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3Qgbm90IGJlIGRpc2FibGVkLiBDYW4gYmUgZW5hYmxlZCB3aXRoIG9yIHdpdGhvdXQgY29udmVyc2lvbgogICAqICAgICAgICAgb24gZ29pbmcgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtNDU3NCw3ICs0NTg1LDcgQEAKICAgLyogYmVjYXVzZSBjb250YWluaW5nIG90aGVyIGJpdHMgcmVzZXJ2ZWQgZm9yIG90aGVyIHB1cnBvc2UuICAgICAgICAgICAgICAgICovCiAgIC8qIElmIHBhcmFtZXRlciAiVHJpZ2dlclNvdXJjZSIgaXMgc2V0IHRvIFNXIHN0YXJ0LCB0aGVuIHBhcmFtZXRlciAgICAgICAgICAqLwogICAvKiAiRXh0ZXJuYWxUcmlnZ2VyRWRnZSIgaXMgZGlzY2FyZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgcmVnaXN0ZXIgdWludDMyX3QgaXNfdHJpZ2dlcl9ub3Rfc3cgPSAodWludDMyX3QpKChUcmlnZ2VyU291cmNlICE9IExMX0FEQ19JTkpfVFJJR19TT0ZUV0FSRSkgPyAxVUwgOiAwVUwpOworICB1aW50MzJfdCBpc190cmlnZ2VyX25vdF9zdyA9ICh1aW50MzJfdCkoKFRyaWdnZXJTb3VyY2UgIT0gTExfQURDX0lOSl9UUklHX1NPRlRXQVJFKSA/IDFVTCA6IDBVTCk7CiAgIE1PRElGWV9SRUcoQURDeC0+SlNRUiwKICAgICAgICAgICAgICBBRENfSlNRUl9KRVhUU0VMIHwKICAgICAgICAgICAgICBBRENfSlNRUl9KRVhURU4gIHwKQEAgLTQ2MTQsNyArNDYyNSw3IEBACiAgICogICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciB0aW1pbmdzIHZhbHVlcyAocGFyYW1ldGVycyBUU192cmVmaW50LAogICAqICAgICAgICAgVFNfdGVtcCwgLi4uKS4KICAgKiBAbm90ZSAgIENvbnZlcnNpb24gdGltZSBpcyB0aGUgYWRkaXRpb24gb2Ygc2FtcGxpbmcgdGltZSBhbmQgcHJvY2Vzc2luZyB0aW1lLgotICAqICAgICAgICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgQURDIHByb2Nlc3NpbmcgdGltZSBpczoKKyAgKiAgICAgICAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBBREMgcHJvY2Vzc2luZyB0aW1lIGlzOgogICAqICAgICAgICAgLSAxMi41IEFEQyBjbG9jayBjeWNsZXMgYXQgQURDIHJlc29sdXRpb24gMTIgYml0cwogICAqICAgICAgICAgLSAxMC41IEFEQyBjbG9jayBjeWNsZXMgYXQgQURDIHJlc29sdXRpb24gMTAgYml0cwogICAqICAgICAgICAgLSA4LjUgQURDIGNsb2NrIGN5Y2xlcyBhdCBBREMgcmVzb2x1dGlvbiA4IGJpdHMKQEAgLTQ2MjMsNyArNDYzNCw3IEBACiAgICogICAgICAgICB0ZW1wZXJhdHVyZSBzZW5zb3IsIC4uLiksIGEgc2FtcGxpbmcgdGltZSBtaW5pbXVtIHZhbHVlCiAgICogICAgICAgICBpcyByZXF1aXJlZC4KICAgKiAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtNDcwNiw3ICs0NzE3LDcgQEAKICAgLyogaW4gcmVnaXN0ZXIgYW5kIHJlZ2lzdGVyIHBvc2l0aW9uIGRlcGVuZGluZyBvbiBwYXJhbWV0ZXIgIkNoYW5uZWwiLiAgICAgICovCiAgIC8qIFBhcmFtZXRlciAiQ2hhbm5lbCIgaXMgdXNlZCB3aXRoIG1hc2tzIGJlY2F1c2UgY29udGFpbmluZyAgICAgICAgICAgICAgICAqLwogICAvKiBvdGhlciBiaXRzIHJlc2VydmVkIGZvciBvdGhlciBwdXJwb3NlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPlNNUFIxLCAoKENoYW5uZWwgJiBBRENfQ0hBTk5FTF9TTVBSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX1NNUFJYX1JFR09GRlNFVF9QT1MpKTsKKyAgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPlNNUFIxLCAoKENoYW5uZWwgJiBBRENfQ0hBTk5FTF9TTVBSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX1NNUFJYX1JFR09GRlNFVF9QT1MpKTsKIAogICBNT0RJRllfUkVHKCpwcmVnLAogICAgICAgICAgICAgIEFEQ19TTVBSMV9TTVAwIDw8ICgoQ2hhbm5lbCAmIEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX01BU0spID4+IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUyksCkBAIC00NzE5LDcgKzQ3MzAsNyBAQAogICAqIEBub3RlICAgT24gdGhpcyBkZXZpY2UsIHNhbXBsaW5nIHRpbWUgaXMgb24gY2hhbm5lbCBzY29wZTogaW5kZXBlbmRlbnRseQogICAqICAgICAgICAgb2YgY2hhbm5lbCBtYXBwZWQgb24gQURDIGdyb3VwIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCiAgICogQG5vdGUgICBDb252ZXJzaW9uIHRpbWUgaXMgdGhlIGFkZGl0aW9uIG9mIHNhbXBsaW5nIHRpbWUgYW5kIHByb2Nlc3NpbmcgdGltZS4KLSAgKiAgICAgICAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIEFEQyBwcm9jZXNzaW5nIHRpbWUgaXM6CisgICogICAgICAgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgQURDIHByb2Nlc3NpbmcgdGltZSBpczoKICAgKiAgICAgICAgIC0gMTIuNSBBREMgY2xvY2sgY3ljbGVzIGF0IEFEQyByZXNvbHV0aW9uIDEyIGJpdHMKICAgKiAgICAgICAgIC0gMTAuNSBBREMgY2xvY2sgY3ljbGVzIGF0IEFEQyByZXNvbHV0aW9uIDEwIGJpdHMKICAgKiAgICAgICAgIC0gOC41IEFEQyBjbG9jayBjeWNsZXMgYXQgQURDIHJlc29sdXRpb24gOCBiaXRzCkBAIC00Nzk4LDcgKzQ4MDksNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19HZXRDaGFubmVsU2FtcGxpbmdUaW1lKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+U01QUjEsICgoQ2hhbm5lbCAmIEFEQ19DSEFOTkVMX1NNUFJYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfU01QUlhfUkVHT0ZGU0VUX1BPUykpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+U01QUjEsICgoQ2hhbm5lbCAmIEFEQ19DSEFOTkVMX1NNUFJYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfU01QUlhfUkVHT0ZGU0VUX1BPUykpOwogCiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKCpwcmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfU01QUjFfU01QMCA8PCAoKENoYW5uZWwgJiBBRENfQ0hBTk5FTF9TTVB4X0JJVE9GRlNFVF9NQVNLKSA+PiBBRENfQ0hBTk5FTF9TTVB4X0JJVE9GRlNFVF9QT1MpKQpAQCAtNDgyNiw3ICs0ODM3LDcgQEAKICAgKiBAbm90ZSAgIEZvciBBREMgY2hhbm5lbHMgY29uZmlndXJlZCBpbiBkaWZmZXJlbnRpYWwgbW9kZSwgYm90aCBpbnB1dHMKICAgKiAgICAgICAgIHNob3VsZCBiZSBiaWFzZWQgYXQgKFZyZWYrKS8yICsvLTIwMG1WLgogICAqICAgICAgICAgKFZyZWYrIGlzIHRoZSBhbmFsb2cgdm9sdGFnZSByZWZlcmVuY2UpCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBBREMgZGlzYWJsZWQuCiAgICogQG5vdGUgICBPbmUgb3Igc2V2ZXJhbCB2YWx1ZXMgY2FuIGJlIHNlbGVjdGVkLgpAQCAtNDkyNiw3ICs0OTM3LDcgQEAKICAgKiBAbm90ZSAgIEluIGNhc2Ugb2YgbmVlZCB0byBkZWZpbmUgYSBzaW5nbGUgY2hhbm5lbCB0byBtb25pdG9yCiAgICogICAgICAgICB3aXRoIGFuYWxvZyB3YXRjaGRvZyBmcm9tIHNlcXVlbmNlciBjaGFubmVsIGRlZmluaXRpb24sCiAgICogICAgICAgICB1c2UgaGVscGVyIG1hY3JvIEByZWYgX19MTF9BRENfQU5BTE9HV0RfQ0hBTk5FTF9HUk9VUCgpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgYXJlIDIga2luZHMgb2YgYW5hbG9nIHdhdGNoZG9nCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgYXJlIDIga2luZHMgb2YgYW5hbG9nIHdhdGNoZG9nCiAgICogICAgICAgICBpbnN0YW5jZToKICAgKiAgICAgICAgIC0gQVdEIHN0YW5kYXJkIChpbnN0YW5jZSBBV0QxKToKICAgKiAgICAgICAgICAgLSBjaGFubmVscyBtb25pdG9yZWQ6IGNhbiBtb25pdG9yIDEgY2hhbm5lbCBvciBhbGwgY2hhbm5lbHMuCkBAIC00OTQ3LDcgKzQ5NTgsNyBAQAogICAqICAgICAgICAgICAtIHJlc29sdXRpb246IHJlc29sdXRpb24gaXMgbGltaXRlZCB0byA4IGJpdHM6IGlmIEFEQyByZXNvbHV0aW9uIGlzCiAgICogICAgICAgICAgICAgMTIgYml0cyB0aGUgNCBMU0IgYXJlIGlnbm9yZWQsIGlmIEFEQyByZXNvbHV0aW9uIGlzIDEwIGJpdHMKICAgKiAgICAgICAgICAgICB0aGUgMiBMU0IgYXJlIGlnbm9yZWQuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtNTA2Nyw4ICs1MDc4LDggQEAKICAgLyogaW4gcmVnaXN0ZXIgYW5kIHJlZ2lzdGVyIHBvc2l0aW9uIGRlcGVuZGluZyBvbiBwYXJhbWV0ZXIgIkFXRHkiLiAgICAgICAgICovCiAgIC8qIFBhcmFtZXRlcnMgIkFXRENoYW5uZWxHcm91cCIgYW5kICJBV0R5IiBhcmUgdXNlZCB3aXRoIG1hc2tzIGJlY2F1c2UgICAgICAqLwogICAvKiBjb250YWluaW5nIG90aGVyIGJpdHMgcmVzZXJ2ZWQgZm9yIG90aGVyIHB1cnBvc2UuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkNGR1IsICgoQVdEeSAmIEFEQ19BV0RfQ1JYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfQVdEX0NSWF9SRUdPRkZTRVRfUE9TKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoKEFXRHkgJiBBRENfQVdEX0NSMTJfUkVHT0ZGU0VUR0FQX01BU0spICogQURDX0FXRF9DUjEyX1JFR09GRlNFVEdBUF9WQUwpKTsKKyAgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkNGR1IsICgoQVdEeSAmIEFEQ19BV0RfQ1JYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfQVdEX0NSWF9SRUdPRkZTRVRfUE9TKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoKEFXRHkgJiBBRENfQVdEX0NSMTJfUkVHT0ZGU0VUR0FQX01BU0spICogQURDX0FXRF9DUjEyX1JFR09GRlNFVEdBUF9WQUwpKTsKIAogICBNT0RJRllfUkVHKCpwcmVnLAogICAgICAgICAgICAgIChBV0R5ICYgQURDX0FXRF9DUl9BTExfQ0hBTk5FTF9NQVNLKSwKQEAgLTUwOTAsNyArNTEwMSw3IEBACiAgICogICAgICAgICAgIEByZWYgX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKCkuCiAgICogICAgICAgICAgIEFwcGxpY2FibGUgb25seSB3aGVuIHRoZSBhbmFsb2cgd2F0Y2hkb2cgaXMgc2V0IHRvIG1vbml0b3IKICAgKiAgICAgICAgICAgb25lIGNoYW5uZWwuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBhcmUgMiBraW5kcyBvZiBhbmFsb2cgd2F0Y2hkb2cKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBhcmUgMiBraW5kcyBvZiBhbmFsb2cgd2F0Y2hkb2cKICAgKiAgICAgICAgIGluc3RhbmNlOgogICAqICAgICAgICAgLSBBV0Qgc3RhbmRhcmQgKGluc3RhbmNlIEFXRDEpOgogICAqICAgICAgICAgICAtIGNoYW5uZWxzIG1vbml0b3JlZDogY2FuIG1vbml0b3IgMSBjaGFubmVsIG9yIGFsbCBjaGFubmVscy4KQEAgLTUxMTEsNyArNTEyMiw3IEBACiAgICogICAgICAgICAgIC0gcmVzb2x1dGlvbjogcmVzb2x1dGlvbiBpcyBsaW1pdGVkIHRvIDggYml0czogaWYgQURDIHJlc29sdXRpb24gaXMKICAgKiAgICAgICAgICAgICAxMiBiaXRzIHRoZSA0IExTQiBhcmUgaWdub3JlZCwgaWYgQURDIHJlc29sdXRpb24gaXMgMTAgYml0cwogICAqICAgICAgICAgICAgIHRoZSAyIExTQiBhcmUgaWdub3JlZC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGRpc2FibGVkIG9yIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nCiAgICogICAgICAgICBvbiBlaXRoZXIgZ3JvdXBzIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCkBAIC01MTk5LDEwICs1MjEwLDEwIEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQURDX0dldEFuYWxvZ1dETW9uaXRDaGFubmVscyhBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgQVdEeSkKIHsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkNGR1IsICgoQVdEeSAmIEFEQ19BV0RfQ1JYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfQVdEX0NSWF9SRUdPRkZTRVRfUE9TKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoKEFXRHkgJiBBRENfQVdEX0NSMTJfUkVHT0ZGU0VUR0FQX01BU0spICogQURDX0FXRF9DUjEyX1JFR09GRlNFVEdBUF9WQUwpKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkNGR1IsICgoQVdEeSAmIEFEQ19BV0RfQ1JYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfQVdEX0NSWF9SRUdPRkZTRVRfUE9TKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoKEFXRHkgJiBBRENfQVdEX0NSMTJfUkVHT0ZGU0VUR0FQX01BU0spICogQURDX0FXRF9DUjEyX1JFR09GRlNFVEdBUF9WQUwpKTsKIAotICByZWdpc3RlciB1aW50MzJfdCBBbmFsb2dXRE1vbml0Q2hhbm5lbHMgPSAoUkVBRF9CSVQoKnByZWcsIEFXRHkpICYgQVdEeSAmIEFEQ19BV0RfQ1JfQUxMX0NIQU5ORUxfTUFTSyk7CisgIHVpbnQzMl90IEFuYWxvZ1dETW9uaXRDaGFubmVscyA9IChSRUFEX0JJVCgqcHJlZywgQVdEeSkgJiBBV0R5ICYgQURDX0FXRF9DUl9BTExfQ0hBTk5FTF9NQVNLKTsKIAogICAvKiBJZiAiQW5hbG9nV0RNb25pdENoYW5uZWxzIiA9PSAwLCB0aGVuIHRoZSBzZWxlY3RlZCBBV0QgaXMgZGlzYWJsZWQgICAgICAgKi8KICAgLyogKHBhcmFtZXRlciB2YWx1ZSBMTF9BRENfQVdEX0RJU0FCTEUpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC01MjYxLDcgKzUyNzIsNyBAQAogICAqIEBub3RlICAgSW4gY2FzZSBvZiBBREMgcmVzb2x1dGlvbiBkaWZmZXJlbnQgb2YgMTIgYml0cywKICAgKiAgICAgICAgIGFuYWxvZyB3YXRjaGRvZyB0aHJlc2hvbGRzIGRhdGEgcmVxdWlyZSBhIHNwZWNpZmljIHNoaWZ0LgogICAqICAgICAgICAgVXNlIGhlbHBlciBtYWNybyBAcmVmIF9fTExfQURDX0FOQUxPR1dEX1NFVF9USFJFU0hPTERfUkVTT0xVVElPTigpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgYXJlIDIga2luZHMgb2YgYW5hbG9nIHdhdGNoZG9nCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgYXJlIDIga2luZHMgb2YgYW5hbG9nIHdhdGNoZG9nCiAgICogICAgICAgICBpbnN0YW5jZToKICAgKiAgICAgICAgIC0gQVdEIHN0YW5kYXJkIChpbnN0YW5jZSBBV0QxKToKICAgKiAgICAgICAgICAgLSBjaGFubmVscyBtb25pdG9yZWQ6IGNhbiBtb25pdG9yIDEgY2hhbm5lbCBvciBhbGwgY2hhbm5lbHMuCkBAIC01Mjg2LDcgKzUyOTcsNyBAQAogICAqICAgICAgICAgaW1wYWN0ZWQ6IHRoZSBjb21wYXJpc29uIG9mIGFuYWxvZyB3YXRjaGRvZyB0aHJlc2hvbGRzIGlzIGRvbmUgb24KICAgKiAgICAgICAgIG92ZXJzYW1wbGluZyBmaW5hbCBjb21wdXRhdGlvbiAoYWZ0ZXIgcmF0aW8gYW5kIHNoaWZ0IGFwcGxpY2F0aW9uKToKICAgKiAgICAgICAgIEFEQyBkYXRhIHJlZ2lzdGVyIGJpdGZpZWxkIFsxNTo0XSAoMTIgbW9zdCBzaWduaWZpY2FudCBiaXRzKS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGRpc2FibGVkIG9yIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nCiAgICogICAgICAgICBvbiBlaXRoZXIgZ3JvdXBzIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCkBAIC01MzEzLDcgKzUzMjQsNyBAQAogICAvKiAiQVdEeSIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogUGFyYW1ldGVycyAiQVdEeSIgYW5kICJBV0RUaHJlc2hvbGR4eHhWYWx1ZSIgYXJlIHVzZWQgd2l0aCBtYXNrcyBiZWNhdXNlICovCiAgIC8qIGNvbnRhaW5pbmcgb3RoZXIgYml0cyByZXNlcnZlZCBmb3Igb3RoZXIgcHVycG9zZS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+VFIxLCAoKEFXRHkgJiBBRENfQVdEX1RSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0FXRF9UUlhfUkVHT0ZGU0VUX1BPUykpOworICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+VFIxLCAoKEFXRHkgJiBBRENfQVdEX1RSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0FXRF9UUlhfUkVHT0ZGU0VUX1BPUykpOwogCiAgIE1PRElGWV9SRUcoKnByZWcsCiAgICAgICAgICAgICAgQURDX1RSMV9IVDEgfCBBRENfVFIxX0xUMSwKQEAgLTUzMjgsNyArNTMzOSw3IEBACiAgICogQG5vdGUgICBJbiBjYXNlIG9mIEFEQyByZXNvbHV0aW9uIGRpZmZlcmVudCBvZiAxMiBiaXRzLAogICAqICAgICAgICAgYW5hbG9nIHdhdGNoZG9nIHRocmVzaG9sZHMgZGF0YSByZXF1aXJlIGEgc3BlY2lmaWMgc2hpZnQuCiAgICogICAgICAgICBVc2UgaGVscGVyIG1hY3JvIEByZWYgX19MTF9BRENfQU5BTE9HV0RfU0VUX1RIUkVTSE9MRF9SRVNPTFVUSU9OKCkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBhcmUgMiBraW5kcyBvZiBhbmFsb2cgd2F0Y2hkb2cKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBhcmUgMiBraW5kcyBvZiBhbmFsb2cgd2F0Y2hkb2cKICAgKiAgICAgICAgIGluc3RhbmNlOgogICAqICAgICAgICAgLSBBV0Qgc3RhbmRhcmQgKGluc3RhbmNlIEFXRDEpOgogICAqICAgICAgICAgICAtIGNoYW5uZWxzIG1vbml0b3JlZDogY2FuIG1vbml0b3IgMSBjaGFubmVsIG9yIGFsbCBjaGFubmVscy4KQEAgLTUzNTMsNyArNTM2NCw3IEBACiAgICogICAgICAgICBpbXBhY3RlZDogdGhlIGNvbXBhcmlzb24gb2YgYW5hbG9nIHdhdGNoZG9nIHRocmVzaG9sZHMgaXMgZG9uZSBvbgogICAqICAgICAgICAgb3ZlcnNhbXBsaW5nIGZpbmFsIGNvbXB1dGF0aW9uIChhZnRlciByYXRpbyBhbmQgc2hpZnQgYXBwbGljYXRpb24pOgogICAqICAgICAgICAgQURDIGRhdGEgcmVnaXN0ZXIgYml0ZmllbGQgWzE1OjRdICgxMiBtb3N0IHNpZ25pZmljYW50IGJpdHMpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgZGlzYWJsZWQgb3IgZW5hYmxlZCB3aXRob3V0IGNvbnZlcnNpb24gb24gZ29pbmcKICAgKiAgICAgICAgIG9uIGVpdGhlciBBREMgZ3JvdXBzIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCkBAIC01MzgyLDcgKzUzOTMsOCBAQAogICAvKiAiQVdEVGhyZXNob2xkc0hpZ2hMb3ciIGFuZCAiQVdEeSIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogUGFyYW1ldGVycyAiQVdEeSIgYW5kICJBV0RUaHJlc2hvbGRWYWx1ZSIgYXJlIHVzZWQgd2l0aCBtYXNrcyBiZWNhdXNlICAgICovCiAgIC8qIGNvbnRhaW5pbmcgb3RoZXIgYml0cyByZXNlcnZlZCBmb3Igb3RoZXIgcHVycG9zZS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+VFIxLCAoKEFXRHkgJiBBRENfQVdEX1RSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0FXRF9UUlhfUkVHT0ZGU0VUX1BPUykpOworICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+VFIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBV0R5ICYgQURDX0FXRF9UUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19BV0RfVFJYX1JFR09GRlNFVF9QT1MpKTsKIAogICBNT0RJRllfUkVHKCpwcmVnLAogICAgICAgICAgICAgIEFXRFRocmVzaG9sZHNIaWdoTG93LApAQCAtNTQxOSwxMiArNTQzMSwxMyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19HZXRBbmFsb2dXRFRocmVzaG9sZHMoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IEFXRHksIHVpbnQzMl90IEFXRFRocmVzaG9sZHNIaWdoTG93KQogewotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+VFIxLCAoKEFXRHkgJiBBRENfQVdEX1RSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0FXRF9UUlhfUkVHT0ZGU0VUX1BPUykpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+VFIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBV0R5ICYgQURDX0FXRF9UUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19BV0RfVFJYX1JFR09GRlNFVF9QT1MpKTsKIAogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVCgqcHJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFXRFRocmVzaG9sZHNIaWdoTG93IHwgQURDX1RSMV9MVDEpKQotICAgICAgICAgICAgICAgICAgICA+PiAoKChBV0RUaHJlc2hvbGRzSGlnaExvdyAmIEFEQ19BV0RfVFJYX0JJVF9ISUdIX01BU0spID4+IEFEQ19BV0RfVFJYX0JJVF9ISUdIX1NISUZUNCkgJiB+KEFXRFRocmVzaG9sZHNIaWdoTG93ICYgQURDX1RSMV9MVDEpKQotICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgID4+ICgoKEFXRFRocmVzaG9sZHNIaWdoTG93ICYgQURDX0FXRF9UUlhfQklUX0hJR0hfTUFTSykgPj4gQURDX0FXRF9UUlhfQklUX0hJR0hfU0hJRlQ0KQorICAgICAgICAgICAgICAgICAgICAgICAgJiB+KEFXRFRocmVzaG9sZHNIaWdoTG93ICYgQURDX1RSMV9MVDEpKSk7CiB9CiAKIC8qKgpAQCAtNTQ0NCw3ICs1NDU3LDcgQEAKICAgKiAgICAgICAgIHRoZSBvdmVyc2FtcGxpbmcgb24gQURDIGdyb3VwIHJlZ3VsYXIgaXMgZWl0aGVyCiAgICogICAgICAgICB0ZW1wb3Jhcnkgc3RvcHBlZCBhbmQgY29udGludWVkLCBvciByZXN1bWVkIGZyb20gc3RhcnQKICAgKiAgICAgICAgIChvdmVyc2FtcGxlciBidWZmZXIgcmVzZXQpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgZGlzYWJsZWQgb3IgZW5hYmxlZCB3aXRob3V0IGNvbnZlcnNpb24gb24gZ29pbmcKICAgKiAgICAgICAgIG9uIGVpdGhlciBncm91cHMgcmVndWxhciBvciBpbmplY3RlZC4KQEAgLTU0OTgsMTEgKzU1MTEsMTEgQEAKICAgKiAgICAgICAgICAgYXJlIGRvbmUgZnJvbSAxIHRyaWdnZXIpCiAgICogICAgICAgICAtIGRpc2NvbnRpbnVvdXMgbW9kZSAoZWFjaCBjb252ZXJzaW9uIG9mIG92ZXJzYW1wbGluZyByYXRpbwogICAqICAgICAgICAgICBuZWVkcyBhIHRyaWdnZXIpCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZ3JvdXAgcmVndWxhci4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIG92ZXJzYW1wbGluZyBkaXNjb250aW51b3VzIG1vZGUKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBvdmVyc2FtcGxpbmcgZGlzY29udGludW91cyBtb2RlCiAgICogICAgICAgICAodHJpZ2dlcmVkIG1vZGUpIGNhbiBiZSB1c2VkIG9ubHkgd2hlbiBvdmVyc2FtcGxpbmcgaXMKICAgKiAgICAgICAgIHNldCBvbiBncm91cCByZWd1bGFyIG9ubHkgYW5kIGluIHJlc3VtZWQgbW9kZS4KICAgKiBAcm10b2xsIENGR1IyICAgIFRST1ZTICAgICAgICAgIExMX0FEQ19TZXRPdmVyU2FtcGxpbmdEaXNjb250CkBAIC01NTQyLDcgKzU1NTUsNyBAQAogICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBzZXQgdGhlIDIgaXRlbXMgb2Ygb3ZlcnNhbXBsaW5nIGNvbmZpZ3VyYXRpb246CiAgICogICAgICAgICAtIHJhdGlvCiAgICogICAgICAgICAtIHNoaWZ0Ci0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtNTYzMSw3ICs1NjQ0LDcgQEAKICAgKiBAbm90ZSAgIElmIG11bHRpbW9kZSBjb25maWd1cmF0aW9uOiB0aGUgc2VsZWN0ZWQgQURDIGluc3RhbmNlIGlzCiAgICogICAgICAgICBlaXRoZXIgbWFzdGVyIG9yIHNsYXZlIGRlcGVuZGluZyBvbiBoYXJkd2FyZS4KICAgKiAgICAgICAgIFJlZmVyIHRvIHJlZmVyZW5jZSBtYW51YWwuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBbGwgQURDIGluc3RhbmNlcyBvZiB0aGUgQURDIGNvbW1vbiBncm91cCBtdXN0IGJlIGRpc2FibGVkLgogICAqICAgICAgICAgVGhpcyBjaGVjayBjYW4gYmUgZG9uZSB3aXRoIGZ1bmN0aW9uIEByZWYgTExfQURDX0lzRW5hYmxlZCgpIGZvciBlYWNoCkBAIC01NzEwLDcgKzU3MjMsNyBAQAogICAqICAgICAgICAgQSBtYWNybyBpcyBhdmFpbGFibGUgdG8gZ2V0IHRoZSBjb252ZXJzaW9uIGRhdGEgb2YKICAgKiAgICAgICAgIEFEQyBtYXN0ZXIgb3IgQURDIHNsYXZlOiBzZWUgaGVscGVyIG1hY3JvCiAgICogICAgICAgICBAcmVmIF9fTExfQURDX01VTFRJX0NPTlZfREFUQV9NQVNURVJfU0xBVkUoKS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFsbCBBREMgaW5zdGFuY2VzIG9mIHRoZSBBREMgY29tbW9uIGdyb3VwIG11c3QgYmUgZGlzYWJsZWQKICAgKiAgICAgICAgIG9yIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nIG9uIGdyb3VwIHJlZ3VsYXIuCkBAIC01Nzg0LDcgKzU3OTcsNyBAQAogICAqICAgICAgICAgLSBBREMgcmVzb2x1dGlvbiAxMCBiaXRzIGNhbiBoYXZlIG1heGltdW0gZGVsYXkgb2YgMTAgY3ljbGVzLgogICAqICAgICAgICAgLSBBREMgcmVzb2x1dGlvbiAgOCBiaXRzIGNhbiBoYXZlIG1heGltdW0gZGVsYXkgb2YgIDggY3ljbGVzLgogICAqICAgICAgICAgLSBBREMgcmVzb2x1dGlvbiAgNiBiaXRzIGNhbiBoYXZlIG1heGltdW0gZGVsYXkgb2YgIDYgY3ljbGVzLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQWxsIEFEQyBpbnN0YW5jZXMgb2YgdGhlIEFEQyBjb21tb24gZ3JvdXAgbXVzdCBiZSBkaXNhYmxlZC4KICAgKiAgICAgICAgIFRoaXMgY2hlY2sgY2FuIGJlIGRvbmUgd2l0aCBmdW5jdGlvbiBAcmVmIExMX0FEQ19Jc0VuYWJsZWQoKSBmb3IgZWFjaApAQCAtNTg3Nyw3ICs1ODkwLDcgQEAKICAgKiAgICAgICAgIHN0YXRlLCB0aGUgaW50ZXJuYWwgYW5hbG9nIGNhbGlicmF0aW9uIGlzIGxvc3QuIEFmdGVyIGV4aXRpbmcgZnJvbQogICAqICAgICAgICAgZGVlcCBwb3dlciBkb3duLCBjYWxpYnJhdGlvbiBtdXN0IGJlIHJlbGF1bmNoZWQgb3IgY2FsaWJyYXRpb24gZmFjdG9yCiAgICogICAgICAgICAocHJlbGltaW5hcmlseSBzYXZlZCkgbXVzdCBiZSBzZXQgYmFjayBpbnRvIGNhbGlicmF0aW9uIHJlZ2lzdGVyLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgQURDIGRpc2FibGVkLgogICAqIEBybXRvbGwgQ1IgICAgICAgREVFUFBXRCAgICAgICAgTExfQURDX0VuYWJsZURlZXBQb3dlckRvd24KQEAgLTU5MDAsNyArNTkxMyw3IEBACiAgICogICAgICAgICBzdGF0ZSwgdGhlIGludGVybmFsIGFuYWxvZyBjYWxpYnJhdGlvbiBpcyBsb3N0LiBBZnRlciBleGl0aW5nIGZyb20KICAgKiAgICAgICAgIGRlZXAgcG93ZXIgZG93biwgY2FsaWJyYXRpb24gbXVzdCBiZSByZWxhdW5jaGVkIG9yIGNhbGlicmF0aW9uIGZhY3RvcgogICAqICAgICAgICAgKHByZWxpbWluYXJpbHkgc2F2ZWQpIG11c3QgYmUgc2V0IGJhY2sgaW50byBjYWxpYnJhdGlvbiByZWdpc3Rlci4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIEFEQyBkaXNhYmxlZC4KICAgKiBAcm10b2xsIENSICAgICAgIERFRVBQV0QgICAgICAgIExMX0FEQ19EaXNhYmxlRGVlcFBvd2VyRG93bgpAQCAtNTkyOCwxMiArNTk0MSwxMiBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBBREMgaW5zdGFuY2UgaW50ZXJuYWwgdm9sdGFnZSByZWd1bGF0b3IuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBhZnRlciBBREMgaW50ZXJuYWwgdm9sdGFnZSByZWd1bGF0b3IgZW5hYmxlLAorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGFmdGVyIEFEQyBpbnRlcm5hbCB2b2x0YWdlIHJlZ3VsYXRvciBlbmFibGUsCiAgICogICAgICAgICBhIGRlbGF5IGZvciBBREMgaW50ZXJuYWwgdm9sdGFnZSByZWd1bGF0b3Igc3RhYmlsaXphdGlvbgogICAqICAgICAgICAgaXMgcmVxdWlyZWQgYmVmb3JlIHBlcmZvcm1pbmcgYSBBREMgY2FsaWJyYXRpb24gb3IgQURDIGVuYWJsZS4KICAgKiAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQsIHBhcmFtZXRlciB0QURDVlJFR19TVFVQLgogICAqICAgICAgICAgUmVmZXIgdG8gbGl0ZXJhbCBAcmVmIExMX0FEQ19ERUxBWV9JTlRFUk5BTF9SRUdVTF9TVEFCX1VTLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgQURDIGRpc2FibGVkLgogICAqIEBybXRvbGwgQ1IgICAgICAgQURWUkVHRU4gICAgICAgTExfQURDX0VuYWJsZUludGVybmFsUmVndWxhdG9yCkBAIC01OTUyLDcgKzU5NjUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgQURDIGludGVybmFsIHZvbHRhZ2UgcmVndWxhdG9yLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgQURDIGRpc2FibGVkLgogICAqIEBybXRvbGwgQ1IgICAgICAgQURWUkVHRU4gICAgICAgTExfQURDX0Rpc2FibGVJbnRlcm5hbFJlZ3VsYXRvcgpAQCAtNTk3NywxNCArNTk5MCwxNCBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgc2VsZWN0ZWQgQURDIGluc3RhbmNlLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgYWZ0ZXIgQURDIGVuYWJsZSwgYSBkZWxheSBmb3IKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBhZnRlciBBREMgZW5hYmxlLCBhIGRlbGF5IGZvcgogICAqICAgICAgICAgQURDIGludGVybmFsIGFuYWxvZyBzdGFiaWxpemF0aW9uIGlzIHJlcXVpcmVkIGJlZm9yZSBwZXJmb3JtaW5nIGEKICAgKiAgICAgICAgIEFEQyBjb252ZXJzaW9uIHN0YXJ0LgogICAqICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCwgcGFyYW1ldGVyIHRTVEFCLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgZmxhZyBMTF9BRENfRkxBR19BRFJEWSBpcyByYWlzZWQgd2hlbiB0aGUgQURDCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgZmxhZyBMTF9BRENfRkxBR19BRFJEWSBpcyByYWlzZWQgd2hlbiB0aGUgQURDCiAgICogICAgICAgICBpcyBlbmFibGVkIGFuZCB3aGVuIGNvbnZlcnNpb24gY2xvY2sgaXMgYWN0aXZlLgogICAqICAgICAgICAgKG5vdCBvbmx5IGNvcmUgY2xvY2s6IHRoaXMgQURDIGhhcyBhIGR1YWwgY2xvY2sgZG9tYWluKQotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgQURDIGRpc2FibGVkIGFuZCBBREMgaW50ZXJuYWwgdm9sdGFnZSByZWd1bGF0b3IgZW5hYmxlZC4KICAgKiBAcm10b2xsIENSICAgICAgIEFERU4gICAgICAgICAgIExMX0FEQ19FbmFibGUKQEAgLTYwMDMsNyArNjAxNiw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSB0aGUgc2VsZWN0ZWQgQURDIGluc3RhbmNlLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgbm90IGRpc2FibGVkLiBNdXN0IGJlIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nCiAgICogICAgICAgICBvbiBlaXRoZXIgZ3JvdXBzIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCkBAIC02MDIzLDcgKzYwMzYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEdldCB0aGUgc2VsZWN0ZWQgQURDIGluc3RhbmNlIGVuYWJsZSBzdGF0ZS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIGZsYWcgTExfQURDX0ZMQUdfQURSRFkgaXMgcmFpc2VkIHdoZW4gdGhlIEFEQworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGZsYWcgTExfQURDX0ZMQUdfQURSRFkgaXMgcmFpc2VkIHdoZW4gdGhlIEFEQwogICAqICAgICAgICAgaXMgZW5hYmxlZCBhbmQgd2hlbiBjb252ZXJzaW9uIGNsb2NrIGlzIGFjdGl2ZS4KICAgKiAgICAgICAgIChub3Qgb25seSBjb3JlIGNsb2NrOiB0aGlzIEFEQyBoYXMgYSBkdWFsIGNsb2NrIGRvbWFpbikKICAgKiBAcm10b2xsIENSICAgICAgIEFERU4gICAgICAgICAgIExMX0FEQ19Jc0VuYWJsZWQKQEAgLTYwNDksNyArNjA2Miw3IEBACiAvKioKICAgKiBAYnJpZWYgIFN0YXJ0IEFEQyBjYWxpYnJhdGlvbiBpbiB0aGUgbW9kZSBzaW5nbGUtZW5kZWQKICAgKiAgICAgICAgIG9yIGRpZmZlcmVudGlhbCAoZm9yIGRldmljZXMgd2l0aCBkaWZmZXJlbnRpYWwgbW9kZSBhdmFpbGFibGUpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgYSBtaW5pbXVtIG51bWJlciBvZiBBREMgY2xvY2sgY3ljbGVzCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgYSBtaW5pbXVtIG51bWJlciBvZiBBREMgY2xvY2sgY3ljbGVzCiAgICogICAgICAgICBhcmUgcmVxdWlyZWQgYmV0d2VlbiBBREMgZW5kIG9mIGNhbGlicmF0aW9uIGFuZCBBREMgZW5hYmxlLgogICAqICAgICAgICAgUmVmZXIgdG8gbGl0ZXJhbCBAcmVmIExMX0FEQ19ERUxBWV9DQUxJQl9FTkFCTEVfQURDX0NZQ0xFUy4KICAgKiBAbm90ZSAgIEZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50aWFsIG1vZGUgYXZhaWxhYmxlOgpAQCAtNjA1OCw3ICs2MDcxLDcgQEAKICAgKiAgICAgICAgIChjYWxpYnJhdGlvbiBydW4gbXVzdCBiZSBwZXJmb3JtZWQgZm9yIGVhY2ggb2YgdGhlc2UKICAgKiAgICAgICAgIGRpZmZlcmVudGlhbCBtb2RlcywgaWYgdXNlZCBhZnRlcndhcmRzIGFuZCBpZiB0aGUgYXBwbGljYXRpb24KICAgKiAgICAgICAgIHJlcXVpcmVzIHRoZWlyIGNhbGlicmF0aW9uKS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIEFEQyBkaXNhYmxlZC4KICAgKiBAcm10b2xsIENSICAgICAgIEFEQ0FMICAgICAgICAgIExMX0FEQ19TdGFydENhbGlicmF0aW9uXG4KQEAgLTYxMDAsMTQgKzYxMTMsMTQgQEAKIAogLyoqCiAgICogQGJyaWVmICBTdGFydCBBREMgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9uLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdGhpcyBmdW5jdGlvbiBpcyByZWxldmFudCBmb3IgYm90aAorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoaXMgZnVuY3Rpb24gaXMgcmVsZXZhbnQgZm9yIGJvdGgKICAgKiAgICAgICAgIGludGVybmFsIHRyaWdnZXIgKFNXIHN0YXJ0KSBhbmQgZXh0ZXJuYWwgdHJpZ2dlcjoKICAgKiAgICAgICAgIC0gSWYgQURDIHRyaWdnZXIgaGFzIGJlZW4gc2V0IHRvIHNvZnR3YXJlIHN0YXJ0LCBBREMgY29udmVyc2lvbgogICAqICAgICAgICAgICBzdGFydHMgaW1tZWRpYXRlbHkuCiAgICogICAgICAgICAtIElmIEFEQyB0cmlnZ2VyIGhhcyBiZWVuIHNldCB0byBleHRlcm5hbCB0cmlnZ2VyLCBBREMgY29udmVyc2lvbgogICAqICAgICAgICAgICB3aWxsIHN0YXJ0IGF0IG5leHQgdHJpZ2dlciBldmVudCAob24gdGhlIHNlbGVjdGVkIHRyaWdnZXIgZWRnZSkKICAgKiAgICAgICAgICAgZm9sbG93aW5nIHRoZSBBREMgc3RhcnQgY29udmVyc2lvbiBjb21tYW5kLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgZW5hYmxlZCB3aXRob3V0IGNvbnZlcnNpb24gb24gZ29pbmcgb24gZ3JvdXAgcmVndWxhciwKICAgKiAgICAgICAgIHdpdGhvdXQgY29udmVyc2lvbiBzdG9wIGNvbW1hbmQgb24gZ29pbmcgb24gZ3JvdXAgcmVndWxhciwKQEAgLTYxMjgsNyArNjE0MSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU3RvcCBBREMgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9uLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgZW5hYmxlZCB3aXRoIGNvbnZlcnNpb24gb24gZ29pbmcgb24gZ3JvdXAgcmVndWxhciwKICAgKiAgICAgICAgIHdpdGhvdXQgQURDIGRpc2FibGUgY29tbWFuZCBvbiBnb2luZy4KQEAgLTYyODMsMTQgKzYyOTYsMTQgQEAKIAogLyoqCiAgICogQGJyaWVmICBTdGFydCBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbi4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoaXMgZnVuY3Rpb24gaXMgcmVsZXZhbnQgZm9yIGJvdGgKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGlzIGZ1bmN0aW9uIGlzIHJlbGV2YW50IGZvciBib3RoCiAgICogICAgICAgICBpbnRlcm5hbCB0cmlnZ2VyIChTVyBzdGFydCkgYW5kIGV4dGVybmFsIHRyaWdnZXI6CiAgICogICAgICAgICAtIElmIEFEQyB0cmlnZ2VyIGhhcyBiZWVuIHNldCB0byBzb2Z0d2FyZSBzdGFydCwgQURDIGNvbnZlcnNpb24KICAgKiAgICAgICAgICAgc3RhcnRzIGltbWVkaWF0ZWx5LgogICAqICAgICAgICAgLSBJZiBBREMgdHJpZ2dlciBoYXMgYmVlbiBzZXQgdG8gZXh0ZXJuYWwgdHJpZ2dlciwgQURDIGNvbnZlcnNpb24KICAgKiAgICAgICAgICAgd2lsbCBzdGFydCBhdCBuZXh0IHRyaWdnZXIgZXZlbnQgKG9uIHRoZSBzZWxlY3RlZCB0cmlnZ2VyIGVkZ2UpCiAgICogICAgICAgICAgIGZvbGxvd2luZyB0aGUgQURDIHN0YXJ0IGNvbnZlcnNpb24gY29tbWFuZC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nIG9uIGdyb3VwIGluamVjdGVkLAogICAqICAgICAgICAgd2l0aG91dCBjb252ZXJzaW9uIHN0b3AgY29tbWFuZCBvbiBnb2luZyBvbiBncm91cCBpbmplY3RlZCwKQEAgLTYzMTEsNyArNjMyNCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU3RvcCBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbi4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGVuYWJsZWQgd2l0aCBjb252ZXJzaW9uIG9uIGdvaW5nIG9uIGdyb3VwIGluamVjdGVkLAogICAqICAgICAgICAgd2l0aG91dCBBREMgZGlzYWJsZSBjb21tYW5kIG9uIGdvaW5nLgpAQCAtNjM3MCw3ICs2MzgzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfSU5KX1JlYWRDb252ZXJzaW9uRGF0YTMyKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBSYW5rKQogewotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+SkRSMSwgKChSYW5rICYgQURDX0lOSl9KRFJYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfSkRSWF9SRUdPRkZTRVRfUE9TKSk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5KRFIxLCAoKFJhbmsgJiBBRENfSU5KX0pEUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19KRFJYX1JFR09GRlNFVF9QT1MpKTsKIAogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVCgqcHJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0pEUjFfSkRBVEEpCkBAIC02Mzk3LDcgKzY0MTAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQxNl90IExMX0FEQ19JTkpfUmVhZENvbnZlcnNpb25EYXRhMTIoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IFJhbmspCiB7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5KRFIxLCAoKFJhbmsgJiBBRENfSU5KX0pEUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19KRFJYX1JFR09GRlNFVF9QT1MpKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkpEUjEsICgoUmFuayAmIEFEQ19JTkpfSkRSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0pEUlhfUkVHT0ZGU0VUX1BPUykpOwogCiAgIHJldHVybiAodWludDE2X3QpKFJFQURfQklUKCpwcmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfSkRSMV9KREFUQSkKQEAgLTY0MjQsNyArNjQzNyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDE2X3QgTExfQURDX0lOSl9SZWFkQ29udmVyc2lvbkRhdGExMChBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgUmFuaykKIHsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkpEUjEsICgoUmFuayAmIEFEQ19JTkpfSkRSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0pEUlhfUkVHT0ZGU0VUX1BPUykpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+SkRSMSwgKChSYW5rICYgQURDX0lOSl9KRFJYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfSkRSWF9SRUdPRkZTRVRfUE9TKSk7CiAKICAgcmV0dXJuICh1aW50MTZfdCkoUkVBRF9CSVQoKnByZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19KRFIxX0pEQVRBKQpAQCAtNjQ1MSw3ICs2NDY0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50OF90IExMX0FEQ19JTkpfUmVhZENvbnZlcnNpb25EYXRhOChBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgUmFuaykKIHsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkpEUjEsICgoUmFuayAmIEFEQ19JTkpfSkRSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0pEUlhfUkVHT0ZGU0VUX1BPUykpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+SkRSMSwgKChSYW5rICYgQURDX0lOSl9KRFJYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfSkRSWF9SRUdPRkZTRVRfUE9TKSk7CiAKICAgcmV0dXJuICh1aW50OF90KShSRUFEX0JJVCgqcHJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfSkRSMV9KREFUQSkKQEAgLTY0NzgsNyArNjQ5MSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBMTF9BRENfSU5KX1JlYWRDb252ZXJzaW9uRGF0YTYoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IFJhbmspCiB7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5KRFIxLCAoKFJhbmsgJiBBRENfSU5KX0pEUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19KRFJYX1JFR09GRlNFVF9QT1MpKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkpEUjEsICgoUmFuayAmIEFEQ19JTkpfSkRSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0pEUlhfUkVHT0ZGU0VUX1BPUykpOwogCiAgIHJldHVybiAodWludDhfdCkoUkVBRF9CSVQoKnByZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0pEUjFfSkRBVEEpCkBAIC02NDk1LDcgKzY1MDgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEdldCBmbGFnIEFEQyByZWFkeS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIGZsYWcgTExfQURDX0ZMQUdfQURSRFkgaXMgcmFpc2VkIHdoZW4gdGhlIEFEQworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGZsYWcgTExfQURDX0ZMQUdfQURSRFkgaXMgcmFpc2VkIHdoZW4gdGhlIEFEQwogICAqICAgICAgICAgaXMgZW5hYmxlZCBhbmQgd2hlbiBjb252ZXJzaW9uIGNsb2NrIGlzIGFjdGl2ZS4KICAgKiAgICAgICAgIChub3Qgb25seSBjb3JlIGNsb2NrOiB0aGlzIEFEQyBoYXMgYSBkdWFsIGNsb2NrIGRvbWFpbikKICAgKiBAcm10b2xsIElTUiAgICAgIEFEUkRZICAgICAgICAgIExMX0FEQ19Jc0FjdGl2ZUZsYWdfQURSRFkKQEAgLTY2MTksNyArNjYzMiw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2xlYXIgZmxhZyBBREMgcmVhZHkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBmbGFnIExMX0FEQ19GTEFHX0FEUkRZIGlzIHJhaXNlZCB3aGVuIHRoZSBBREMKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBmbGFnIExMX0FEQ19GTEFHX0FEUkRZIGlzIHJhaXNlZCB3aGVuIHRoZSBBREMKICAgKiAgICAgICAgIGlzIGVuYWJsZWQgYW5kIHdoZW4gY29udmVyc2lvbiBjbG9jayBpcyBhY3RpdmUuCiAgICogICAgICAgICAobm90IG9ubHkgY29yZSBjbG9jazogdGhpcyBBREMgaGFzIGEgZHVhbCBjbG9jayBkb21haW4pCiAgICogQHJtdG9sbCBJU1IgICAgICBBRFJEWSAgICAgICAgICBMTF9BRENfQ2xlYXJGbGFnX0FEUkRZCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2xsX2NvbXAuaCBiL0luYy9zdG0zMmw0eHhfbGxfY29tcC5oCmluZGV4IDQwYjA2MzMuLjkwNjFkZmUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfbGxfY29tcC5oCisrKyBiL0luYy9zdG0zMmw0eHhfbGxfY29tcC5oCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZXQgd2luZG93IG1vZGUgb2YgYSBwYWlyIG9mIGNvbXBhcmF0b3JzIGluc3RhbmNlcwotICAqICAgICAgICAgKDIgY29uc2VjdXRpdmUgQ09NUCBpbnN0YW5jZXMgb2RkIGFuZCBldmVuIENPTVA8eD4gYW5kIENPTVA8eCsxPikuCisgICogICAgICAgICAoMiBjb25zZWN1dGl2ZSBDT01QIGluc3RhbmNlcyBDT01QPHg+IGFuZCBDT01QPHgrMT4pLgogICAqIEBybXRvbGwgQ1NSICAgICAgV0lOTU9ERSAgICAgICAgTExfQ09NUF9TZXRDb21tb25XaW5kb3dNb2RlCiAgICogQHBhcmFtICBDT01QeHlfQ09NTU9OIENvbXBhcmF0b3IgY29tbW9uIGluc3RhbmNlCiAgICogICAgICAgICAoY2FuIGJlIHNldCBkaXJlY3RseSBmcm9tIENNU0lTIGRlZmluaXRpb24gb3IgYnkgdXNpbmcgaGVscGVyIG1hY3JvIEByZWYgX19MTF9DT01QX0NPTU1PTl9JTlNUQU5DRSgpICkKQEAgLTM1OCwxNCArMzU4LDE0IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DT01QX1NldENvbW1vbldpbmRvd01vZGUoQ09NUF9Db21tb25fVHlwZURlZiAqQ09NUHh5X0NPTU1PTiwgdWludDMyX3QgV2luZG93TW9kZSkKIHsKLSAgLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgd2luZG93IG1vZGUgY2FuIGJlIHNldCBvbmx5ICAgICAgICAgICAgICAgICAgICovCisgIC8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB3aW5kb3cgbW9kZSBjYW4gYmUgc2V0IG9ubHkgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBmcm9tIENPTVAgaW5zdGFuY2U6IENPTVAyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgTU9ESUZZX1JFRyhDT01QeHlfQ09NTU9OLT5DU1IsIENPTVBfQ1NSX1dJTk1PREUsIFdpbmRvd01vZGUpOwogfQogCiAvKioKICAgKiBAYnJpZWYgIEdldCB3aW5kb3cgbW9kZSBvZiBhIHBhaXIgb2YgY29tcGFyYXRvcnMgaW5zdGFuY2VzCi0gICogICAgICAgICAoMiBjb25zZWN1dGl2ZSBDT01QIGluc3RhbmNlcyBvZGQgYW5kIGV2ZW4gQ09NUDx4PiBhbmQgQ09NUDx4KzE+KS4KKyAgKiAgICAgICAgICgyIGNvbnNlY3V0aXZlIENPTVAgaW5zdGFuY2VzIENPTVA8eD4gYW5kIENPTVA8eCsxPikuCiAgICogQHJtdG9sbCBDU1IgICAgICBXSU5NT0RFICAgICAgICBMTF9DT01QX0dldENvbW1vbldpbmRvd01vZGUKICAgKiBAcGFyYW0gIENPTVB4eV9DT01NT04gQ29tcGFyYXRvciBjb21tb24gaW5zdGFuY2UKICAgKiAgICAgICAgIChjYW4gYmUgc2V0IGRpcmVjdGx5IGZyb20gQ01TSVMgZGVmaW5pdGlvbiBvciBieSB1c2luZyBoZWxwZXIgbWFjcm8gQHJlZiBfX0xMX0NPTVBfQ09NTU9OX0lOU1RBTkNFKCkgKQpAQCAtNDI5LDcgKzQyOSw3IEBACiAgICogQG5vdGUgICBJbiBjYXNlIG9mIGNvbXBhcmF0b3IgaW5wdXQgc2VsZWN0ZWQgdG8gYmUgY29ubmVjdGVkIHRvIElPOgogICAqICAgICAgICAgR1BJTyBwaW5zIGFyZSBzcGVjaWZpYyB0byBlYWNoIGNvbXBhcmF0b3IgaW5zdGFuY2UuCiAgICogICAgICAgICBSZWZlciB0byBkZXNjcmlwdGlvbiBvZiBwYXJhbWV0ZXJzIG9yIHRvIHJlZmVyZW5jZSBtYW51YWwuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzY2FsZXIgYnJpZGdlIGlzIGNvbmZpZ3VyYWJsZToKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzY2FsZXIgYnJpZGdlIGlzIGNvbmZpZ3VyYWJsZToKICAgKiAgICAgICAgIHRvIG9wdGltaXplIHBvd2VyIGNvbnN1bXB0aW9uLCB0aGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlCiAgICogICAgICAgICB2b2x0YWdlIHNjYWxlciBicmlkZ2Ugb25seSB3aGVuIHJlcXVpcmVkCiAgICogICAgICAgICAod2hlbiBzZWxlY3RpbmcgY29tcGFyYXRvciBpbnB1dCBiYXNlZCBvbiBWcmVmSW50OiBWcmVmSW50IG9yCkBAIC01MjUsNyArNTI1LDcgQEAKICAgKiBAbm90ZSAgIEluIGNhc2Ugb2YgY29tcGFyYXRvciBpbnB1dCBzZWxlY3RlZCB0byBiZSBjb25uZWN0ZWQgdG8gSU86CiAgICogICAgICAgICBHUElPIHBpbnMgYXJlIHNwZWNpZmljIHRvIGVhY2ggY29tcGFyYXRvciBpbnN0YW5jZS4KICAgKiAgICAgICAgIFJlZmVyIHRvIGRlc2NyaXB0aW9uIG9mIHBhcmFtZXRlcnMgb3IgdG8gcmVmZXJlbmNlIG1hbnVhbC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNjYWxlciBicmlkZ2UgaXMgY29uZmlndXJhYmxlOgorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNjYWxlciBicmlkZ2UgaXMgY29uZmlndXJhYmxlOgogICAqICAgICAgICAgdG8gb3B0aW1pemUgcG93ZXIgY29uc3VtcHRpb24sIHRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUKICAgKiAgICAgICAgIHZvbHRhZ2Ugc2NhbGVyIGJyaWRnZSBvbmx5IHdoZW4gcmVxdWlyZWQKICAgKiAgICAgICAgICh3aGVuIHNlbGVjdGluZyBjb21wYXJhdG9yIGlucHV0IGJhc2VkIG9uIFZyZWZJbnQ6IFZyZWZJbnQgb3IKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfbGxfZm1jLmggYi9JbmMvc3RtMzJsNHh4X2xsX2ZtYy5oCmluZGV4IDBlN2VkZDMuLjc2NGZjMGQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfbGxfZm1jLmgKKysrIGIvSW5jL3N0bTMybDR4eF9sbF9mbWMuaApAQCAtNDIsNTUgKzQyLDU1IEBACiAjaWYgZGVmaW5lZCBGTUNfQkFOSzEKIAogI2RlZmluZSBJU19GTUNfTk9SU1JBTV9CQU5LKF9fQkFOS19fKSAoKChfX0JBTktfXykgPT0gRk1DX05PUlNSQU1fQkFOSzEpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQU5LX18pID09IEZNQ19OT1JTUkFNX0JBTksyKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQkFOS19fKSA9PSBGTUNfTk9SU1JBTV9CQU5LMykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JBTktfXykgPT0gRk1DX05PUlNSQU1fQkFOSzQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JBTktfXykgPT0gRk1DX05PUlNSQU1fQkFOSzIpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQU5LX18pID09IEZNQ19OT1JTUkFNX0JBTkszKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQkFOS19fKSA9PSBGTUNfTk9SU1JBTV9CQU5LNCkpCiAjZGVmaW5lIElTX0ZNQ19NVVgoX19NVVhfXykgKCgoX19NVVhfXykgPT0gRk1DX0RBVEFfQUREUkVTU19NVVhfRElTQUJMRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTVVYX18pID09IEZNQ19EQVRBX0FERFJFU1NfTVVYX0VOQUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NVVhfXykgPT0gRk1DX0RBVEFfQUREUkVTU19NVVhfRU5BQkxFKSkKICNkZWZpbmUgSVNfRk1DX01FTU9SWShfX01FTU9SWV9fKSAoKChfX01FTU9SWV9fKSA9PSBGTUNfTUVNT1JZX1RZUEVfU1JBTSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTUVNT1JZX18pID09IEZNQ19NRU1PUllfVFlQRV9QU1JBTSl8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NRU1PUllfXykgPT0gRk1DX01FTU9SWV9UWVBFX05PUikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NRU1PUllfXykgPT0gRk1DX01FTU9SWV9UWVBFX1BTUkFNKXx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01FTU9SWV9fKSA9PSBGTUNfTUVNT1JZX1RZUEVfTk9SKSkKICNkZWZpbmUgSVNfRk1DX05PUlNSQU1fTUVNT1JZX1dJRFRIKF9fV0lEVEhfXykgKCgoX19XSURUSF9fKSA9PSBGTUNfTk9SU1JBTV9NRU1fQlVTX1dJRFRIXzgpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fV0lEVEhfXykgPT0gRk1DX05PUlNSQU1fTUVNX0JVU19XSURUSF8xNikgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1dJRFRIX18pID09IEZNQ19OT1JTUkFNX01FTV9CVVNfV0lEVEhfMzIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1dJRFRIX18pID09IEZNQ19OT1JTUkFNX01FTV9CVVNfV0lEVEhfMTYpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19XSURUSF9fKSA9PSBGTUNfTk9SU1JBTV9NRU1fQlVTX1dJRFRIXzMyKSkKICNkZWZpbmUgSVNfRk1DX1BBR0VTSVpFKF9fU0laRV9fKSAoKChfX1NJWkVfXykgPT0gRk1DX1BBR0VfU0laRV9OT05FKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TSVpFX18pID09IEZNQ19QQUdFX1NJWkVfMTI4KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TSVpFX18pID09IEZNQ19QQUdFX1NJWkVfMjU2KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TSVpFX18pID09IEZNQ19QQUdFX1NJWkVfNTEyKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TSVpFX18pID09IEZNQ19QQUdFX1NJWkVfMTAyNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TSVpFX18pID09IEZNQ19QQUdFX1NJWkVfMTI4KSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TSVpFX18pID09IEZNQ19QQUdFX1NJWkVfMjU2KSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TSVpFX18pID09IEZNQ19QQUdFX1NJWkVfNTEyKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TSVpFX18pID09IEZNQ19QQUdFX1NJWkVfMTAyNCkpCiAjaWYgZGVmaW5lZChGTUNfQkNSMV9XRkRJUykKICNkZWZpbmUgSVNfRk1DX1dSSVRFX0ZJRk8oX19GSUZPX18pICgoKF9fRklGT19fKSA9PSBGTUNfV1JJVEVfRklGT19ESVNBQkxFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZJRk9fXykgPT0gRk1DX1dSSVRFX0ZJRk9fRU5BQkxFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRklGT19fKSA9PSBGTUNfV1JJVEVfRklGT19FTkFCTEUpKQogI2VuZGlmIC8qIEZNQ19CQ1IxX1dGRElTICovCiAjZGVmaW5lIElTX0ZNQ19BQ0NFU1NfTU9ERShfX01PREVfXykgKCgoX19NT0RFX18pID09IEZNQ19BQ0NFU1NfTU9ERV9BKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IEZNQ19BQ0NFU1NfTU9ERV9CKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IEZNQ19BQ0NFU1NfTU9ERV9DKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IEZNQ19BQ0NFU1NfTU9ERV9EKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gRk1DX0FDQ0VTU19NT0RFX0IpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gRk1DX0FDQ0VTU19NT0RFX0MpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gRk1DX0FDQ0VTU19NT0RFX0QpKQogI2lmIGRlZmluZWQoRk1DX0JDUnhfTkJMU0VUKQogI2RlZmluZSBJU19GTUNfTkJMX1NFVFVQVElNRShfX05CTF9fKSAoKChfX05CTF9fKSA9PSBGTUNfTkJMX1NFVFVQVElNRV8wKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTkJMX18pID09IEZNQ19OQkxfU0VUVVBUSU1FXzEpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19OQkxfXykgPT0gRk1DX05CTF9TRVRVUFRJTUVfMikgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX05CTF9fKSA9PSBGTUNfTkJMX1NFVFVQVElNRV8zKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19OQkxfXykgPT0gRk1DX05CTF9TRVRVUFRJTUVfMSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX05CTF9fKSA9PSBGTUNfTkJMX1NFVFVQVElNRV8yKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTkJMX18pID09IEZNQ19OQkxfU0VUVVBUSU1FXzMpKQogI2VuZGlmIC8qIEZNQ19CQ1J4X05CTFNFVCAqLwogI2RlZmluZSBJU19GTUNfQlVSU1RNT0RFKF9fU1RBVEVfXykgKCgoX19TVEFURV9fKSA9PSBGTUNfQlVSU1RfQUNDRVNTX01PREVfRElTQUJMRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TVEFURV9fKSA9PSBGTUNfQlVSU1RfQUNDRVNTX01PREVfRU5BQkxFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU1RBVEVfXykgPT0gRk1DX0JVUlNUX0FDQ0VTU19NT0RFX0VOQUJMRSkpCiAjZGVmaW5lIElTX0ZNQ19XQUlUX1BPTEFSSVRZKF9fUE9MQVJJVFlfXykgKCgoX19QT0xBUklUWV9fKSA9PSBGTUNfV0FJVF9TSUdOQUxfUE9MQVJJVFlfTE9XKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT0xBUklUWV9fKSA9PSBGTUNfV0FJVF9TSUdOQUxfUE9MQVJJVFlfSElHSCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT0xBUklUWV9fKSA9PSBGTUNfV0FJVF9TSUdOQUxfUE9MQVJJVFlfSElHSCkpCiAjZGVmaW5lIElTX0ZNQ19XQUlUX1NJR05BTF9BQ1RJVkUoX19BQ1RJVkVfXykgKCgoX19BQ1RJVkVfXykgPT0gRk1DX1dBSVRfVElNSU5HX0JFRk9SRV9XUykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQUNUSVZFX18pID09IEZNQ19XQUlUX1RJTUlOR19EVVJJTkdfV1MpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQUNUSVZFX18pID09IEZNQ19XQUlUX1RJTUlOR19EVVJJTkdfV1MpKQogI2RlZmluZSBJU19GTUNfV1JJVEVfT1BFUkFUSU9OKF9fT1BFUkFUSU9OX18pICgoKF9fT1BFUkFUSU9OX18pID09IEZNQ19XUklURV9PUEVSQVRJT05fRElTQUJMRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fT1BFUkFUSU9OX18pID09IEZNQ19XUklURV9PUEVSQVRJT05fRU5BQkxFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX09QRVJBVElPTl9fKSA9PSBGTUNfV1JJVEVfT1BFUkFUSU9OX0VOQUJMRSkpCiAjZGVmaW5lIElTX0ZNQ19XQUlURV9TSUdOQUwoX19TSUdOQUxfXykgKCgoX19TSUdOQUxfXykgPT0gRk1DX1dBSVRfU0lHTkFMX0RJU0FCTEUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NJR05BTF9fKSA9PSBGTUNfV0FJVF9TSUdOQUxfRU5BQkxFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NJR05BTF9fKSA9PSBGTUNfV0FJVF9TSUdOQUxfRU5BQkxFKSkKICNkZWZpbmUgSVNfRk1DX0VYVEVOREVEX01PREUoX19NT0RFX18pICgoKF9fTU9ERV9fKSA9PSBGTUNfRVhURU5ERURfTU9ERV9ESVNBQkxFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gRk1DX0VYVEVOREVEX01PREVfRU5BQkxFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBGTUNfRVhURU5ERURfTU9ERV9FTkFCTEUpKQogI2RlZmluZSBJU19GTUNfQVNZTldBSVQoX19TVEFURV9fKSAoKChfX1NUQVRFX18pID09IEZNQ19BU1lOQ0hST05PVVNfV0FJVF9ESVNBQkxFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU1RBVEVfXykgPT0gRk1DX0FTWU5DSFJPTk9VU19XQUlUX0VOQUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU1RBVEVfXykgPT0gRk1DX0FTWU5DSFJPTk9VU19XQUlUX0VOQUJMRSkpCiAjZGVmaW5lIElTX0ZNQ19EQVRBX0xBVEVOQ1koX19MQVRFTkNZX18pICgoKF9fTEFURU5DWV9fKSA+IDFVKSAmJiAoKF9fTEFURU5DWV9fKSA8PSAxN1UpKQogI2RlZmluZSBJU19GTUNfV1JJVEVfQlVSU1QoX19CVVJTVF9fKSAoKChfX0JVUlNUX18pID09IEZNQ19XUklURV9CVVJTVF9ESVNBQkxFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQlVSU1RfXykgPT0gRk1DX1dSSVRFX0JVUlNUX0VOQUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQlVSU1RfXykgPT0gRk1DX1dSSVRFX0JVUlNUX0VOQUJMRSkpCiAjZGVmaW5lIElTX0ZNQ19DT05USU5PVVNfQ0xPQ0soX19DQ0xPQ0tfXykgKCgoX19DQ0xPQ0tfXykgPT0gRk1DX0NPTlRJTlVPVVNfQ0xPQ0tfU1lOQ19PTkxZKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DQ0xPQ0tfXykgPT0gRk1DX0NPTlRJTlVPVVNfQ0xPQ0tfU1lOQ19BU1lOQykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DQ0xPQ0tfXykgPT0gRk1DX0NPTlRJTlVPVVNfQ0xPQ0tfU1lOQ19BU1lOQykpCiAjZGVmaW5lIElTX0ZNQ19BRERSRVNTX1NFVFVQX1RJTUUoX19USU1FX18pICgoX19USU1FX18pIDw9IDE1VSkKICNkZWZpbmUgSVNfRk1DX0FERFJFU1NfSE9MRF9USU1FKF9fVElNRV9fKSAoKChfX1RJTUVfXykgPiAwVSkgJiYgKChfX1RJTUVfXykgPD0gMTVVKSkKICNkZWZpbmUgSVNfRk1DX0RBVEFTRVRVUF9USU1FKF9fVElNRV9fKSAoKChfX1RJTUVfXykgPiAwVSkgJiYgKChfX1RJTUVfXykgPD0gMjU1VSkpCkBAIC0xMDgsMTggKzEwOCwxOCBAQAogCiAjZGVmaW5lIElTX0ZNQ19OQU5EX0JBTksoX19CQU5LX18pICgoX19CQU5LX18pID09IEZNQ19OQU5EX0JBTkszKQogI2RlZmluZSBJU19GTUNfV0FJVF9GRUFUVVJFKF9fRkVBVFVSRV9fKSAoKChfX0ZFQVRVUkVfXykgPT0gRk1DX05BTkRfV0FJVF9GRUFUVVJFX0RJU0FCTEUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19GRUFUVVJFX18pID09IEZNQ19OQU5EX1dBSVRfRkVBVFVSRV9FTkFCTEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZFQVRVUkVfXykgPT0gRk1DX05BTkRfV0FJVF9GRUFUVVJFX0VOQUJMRSkpCiAjZGVmaW5lIElTX0ZNQ19OQU5EX01FTU9SWV9XSURUSChfX1dJRFRIX18pICgoKF9fV0lEVEhfXykgPT0gRk1DX05BTkRfTUVNX0JVU19XSURUSF84KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fV0lEVEhfXykgPT0gRk1DX05BTkRfTUVNX0JVU19XSURUSF8xNikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fV0lEVEhfXykgPT0gRk1DX05BTkRfTUVNX0JVU19XSURUSF8xNikpCiAjZGVmaW5lIElTX0ZNQ19FQ0NfU1RBVEUoX19TVEFURV9fKSAoKChfX1NUQVRFX18pID09IEZNQ19OQU5EX0VDQ19ESVNBQkxFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NUQVRFX18pID09IEZNQ19OQU5EX0VDQ19FTkFCTEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TVEFURV9fKSA9PSBGTUNfTkFORF9FQ0NfRU5BQkxFKSkKIAogI2RlZmluZSBJU19GTUNfRUNDUEFHRV9TSVpFKF9fU0laRV9fKSAoKChfX1NJWkVfXykgPT0gRk1DX05BTkRfRUNDX1BBR0VfU0laRV8yNTZCWVRFKSAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NJWkVfXykgPT0gRk1DX05BTkRfRUNDX1BBR0VfU0laRV81MTJCWVRFKSAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NJWkVfXykgPT0gRk1DX05BTkRfRUNDX1BBR0VfU0laRV8xMDI0QllURSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NJWkVfXykgPT0gRk1DX05BTkRfRUNDX1BBR0VfU0laRV8yMDQ4QllURSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NJWkVfXykgPT0gRk1DX05BTkRfRUNDX1BBR0VfU0laRV80MDk2QllURSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NJWkVfXykgPT0gRk1DX05BTkRfRUNDX1BBR0VfU0laRV84MTkyQllURSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0laRV9fKSA9PSBGTUNfTkFORF9FQ0NfUEFHRV9TSVpFXzUxMkJZVEUpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0laRV9fKSA9PSBGTUNfTkFORF9FQ0NfUEFHRV9TSVpFXzEwMjRCWVRFKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0laRV9fKSA9PSBGTUNfTkFORF9FQ0NfUEFHRV9TSVpFXzIwNDhCWVRFKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0laRV9fKSA9PSBGTUNfTkFORF9FQ0NfUEFHRV9TSVpFXzQwOTZCWVRFKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0laRV9fKSA9PSBGTUNfTkFORF9FQ0NfUEFHRV9TSVpFXzgxOTJCWVRFKSkKICNkZWZpbmUgSVNfRk1DX1RDTFJfVElNRShfX1RJTUVfXykgKChfX1RJTUVfXykgPD0gMjU1VSkKICNkZWZpbmUgSVNfRk1DX1RBUl9USU1FKF9fVElNRV9fKSAoKF9fVElNRV9fKSA8PSAyNTVVKQogI2RlZmluZSBJU19GTUNfU0VUVVBfVElNRShfX1RJTUVfXykgKChfX1RJTUVfXykgPD0gMjU0VSkKQEAgLTM2NiwxMCArMzY2LDEwIEBACiAvKiogQGRlZmdyb3VwIEZNQ19OT1JTUkFNX0JhbmsgRk1DIE5PUi9TUkFNIEJhbmsKICAgKiBAewogICAqLwotI2RlZmluZSBGTUNfTk9SU1JBTV9CQU5LMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkKLSNkZWZpbmUgRk1DX05PUlNSQU1fQkFOSzIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMlUpCi0jZGVmaW5lIEZNQ19OT1JTUkFNX0JBTkszICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDRVKQotI2RlZmluZSBGTUNfTk9SU1JBTV9CQU5LNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA2VSkKKyNkZWZpbmUgRk1DX05PUlNSQU1fQkFOSzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkKKyNkZWZpbmUgRk1DX05PUlNSQU1fQkFOSzIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikKKyNkZWZpbmUgRk1DX05PUlNSQU1fQkFOSzMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkKKyNkZWZpbmUgRk1DX05PUlNSQU1fQkFOSzQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNikKIC8qKgogICAqIEB9CiAgICovCkBAIC0zNzcsOCArMzc3LDggQEAKIC8qKiBAZGVmZ3JvdXAgRk1DX0RhdGFfQWRkcmVzc19CdXNfTXVsdGlwbGV4aW5nIEZNQyBEYXRhIEFkZHJlc3MgQnVzIE11bHRpcGxleGluZwogICAqIEB7CiAgICovCi0jZGVmaW5lIEZNQ19EQVRBX0FERFJFU1NfTVVYX0RJU0FCTEUgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKQotI2RlZmluZSBGTUNfREFUQV9BRERSRVNTX01VWF9FTkFCTEUgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyVSkKKyNkZWZpbmUgRk1DX0RBVEFfQUREUkVTU19NVVhfRElTQUJMRSAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkKKyNkZWZpbmUgRk1DX0RBVEFfQUREUkVTU19NVVhfRU5BQkxFICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikKIC8qKgogICAqIEB9CiAgICovCkBAIC0zODYsOSArMzg2LDkgQEAKIC8qKiBAZGVmZ3JvdXAgRk1DX01lbW9yeV9UeXBlIEZNQyBNZW1vcnkgVHlwZQogICAqIEB7CiAgICovCi0jZGVmaW5lIEZNQ19NRU1PUllfVFlQRV9TUkFNICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKQotI2RlZmluZSBGTUNfTUVNT1JZX1RZUEVfUFNSQU0gICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0VSkKLSNkZWZpbmUgRk1DX01FTU9SWV9UWVBFX05PUiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOFUpCisjZGVmaW5lIEZNQ19NRU1PUllfVFlQRV9TUkFNICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCisjZGVmaW5lIEZNQ19NRU1PUllfVFlQRV9QU1JBTSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpCisjZGVmaW5lIEZNQ19NRU1PUllfVFlQRV9OT1IgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzk2LDkgKzM5Niw5IEBACiAvKiogQGRlZmdyb3VwIEZNQ19OT1JTUkFNX0RhdGFfV2lkdGggRk1DIE5PUlNSQU0gRGF0YSBXaWR0aAogICAqIEB7CiAgICovCi0jZGVmaW5lIEZNQ19OT1JTUkFNX01FTV9CVVNfV0lEVEhfOCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKQotI2RlZmluZSBGTUNfTk9SU1JBTV9NRU1fQlVTX1dJRFRIXzE2ICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwVSkKLSNkZWZpbmUgRk1DX05PUlNSQU1fTUVNX0JVU19XSURUSF8zMiAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMFUpCisjZGVmaW5lIEZNQ19OT1JTUkFNX01FTV9CVVNfV0lEVEhfOCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCisjZGVmaW5lIEZNQ19OT1JTUkFNX01FTV9CVVNfV0lEVEhfMTYgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApCisjZGVmaW5lIEZNQ19OT1JTUkFNX01FTV9CVVNfV0lEVEhfMzIgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDA2LDggKzQwNiw4IEBACiAvKiogQGRlZmdyb3VwIEZNQ19OT1JTUkFNX0ZsYXNoX0FjY2VzcyBGTUMgTk9SL1NSQU0gRmxhc2ggQWNjZXNzCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX05PUlNSQU1fRkxBU0hfQUNDRVNTX0VOQUJMRSAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MFUpCi0jZGVmaW5lIEZNQ19OT1JTUkFNX0ZMQVNIX0FDQ0VTU19ESVNBQkxFICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKQorI2RlZmluZSBGTUNfTk9SU1JBTV9GTEFTSF9BQ0NFU1NfRU5BQkxFICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQorI2RlZmluZSBGTUNfTk9SU1JBTV9GTEFTSF9BQ0NFU1NfRElTQUJMRSAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTQxNSw4ICs0MTUsOCBAQAogLyoqIEBkZWZncm91cCBGTUNfQnVyc3RfQWNjZXNzX01vZGUgRk1DIEJ1cnN0IEFjY2VzcyBNb2RlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX0JVUlNUX0FDQ0VTU19NT0RFX0RJU0FCTEUgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpCi0jZGVmaW5lIEZNQ19CVVJTVF9BQ0NFU1NfTU9ERV9FTkFCTEUgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDBVKQorI2RlZmluZSBGTUNfQlVSU1RfQUNDRVNTX01PREVfRElTQUJMRSAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQorI2RlZmluZSBGTUNfQlVSU1RfQUNDRVNTX01PREVfRU5BQkxFICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTQyNCw4ICs0MjQsOCBAQAogLyoqIEBkZWZncm91cCBGTUNfV2FpdF9TaWduYWxfUG9sYXJpdHkgRk1DIFdhaXQgU2lnbmFsIFBvbGFyaXR5CiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX1dBSVRfU0lHTkFMX1BPTEFSSVRZX0xPVyAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpCi0jZGVmaW5lIEZNQ19XQUlUX1NJR05BTF9QT0xBUklUWV9ISUdIICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDBVKQorI2RlZmluZSBGTUNfV0FJVF9TSUdOQUxfUE9MQVJJVFlfTE9XICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQorI2RlZmluZSBGTUNfV0FJVF9TSUdOQUxfUE9MQVJJVFlfSElHSCAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTQzMyw4ICs0MzMsOCBAQAogLyoqIEBkZWZncm91cCBGTUNfV2FpdF9UaW1pbmcgRk1DIFdhaXQgVGltaW5nCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX1dBSVRfVElNSU5HX0JFRk9SRV9XUyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpCi0jZGVmaW5lIEZNQ19XQUlUX1RJTUlOR19EVVJJTkdfV1MgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDBVKQorI2RlZmluZSBGTUNfV0FJVF9USU1JTkdfQkVGT1JFX1dTICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQorI2RlZmluZSBGTUNfV0FJVF9USU1JTkdfRFVSSU5HX1dTICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTQ0Miw4ICs0NDIsOCBAQAogLyoqIEBkZWZncm91cCBGTUNfV3JpdGVfT3BlcmF0aW9uIEZNQyBXcml0ZSBPcGVyYXRpb24KICAgKiBAewogICAqLwotI2RlZmluZSBGTUNfV1JJVEVfT1BFUkFUSU9OX0RJU0FCTEUgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkKLSNkZWZpbmUgRk1DX1dSSVRFX09QRVJBVElPTl9FTkFCTEUgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMFUpCisjZGVmaW5lIEZNQ19XUklURV9PUEVSQVRJT05fRElTQUJMRSAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCisjZGVmaW5lIEZNQ19XUklURV9PUEVSQVRJT05fRU5BQkxFICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDUxLDggKzQ1MSw4IEBACiAvKiogQGRlZmdyb3VwIEZNQ19XYWl0X1NpZ25hbCBGTUMgV2FpdCBTaWduYWwKICAgKiBAewogICAqLwotI2RlZmluZSBGTUNfV0FJVF9TSUdOQUxfRElTQUJMRSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkKLSNkZWZpbmUgRk1DX1dBSVRfU0lHTkFMX0VOQUJMRSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMFUpCisjZGVmaW5lIEZNQ19XQUlUX1NJR05BTF9ESVNBQkxFICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCisjZGVmaW5lIEZNQ19XQUlUX1NJR05BTF9FTkFCTEUgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDYwLDggKzQ2MCw4IEBACiAvKiogQGRlZmdyb3VwIEZNQ19FeHRlbmRlZF9Nb2RlIEZNQyBFeHRlbmRlZCBNb2RlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX0VYVEVOREVEX01PREVfRElTQUJMRSAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpCi0jZGVmaW5lIEZNQ19FWFRFTkRFRF9NT0RFX0VOQUJMRSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDBVKQorI2RlZmluZSBGTUNfRVhURU5ERURfTU9ERV9ESVNBQkxFICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQorI2RlZmluZSBGTUNfRVhURU5ERURfTU9ERV9FTkFCTEUgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTQ2OSw4ICs0NjksOCBAQAogLyoqIEBkZWZncm91cCBGTUNfQXN5bmNocm9ub3VzV2FpdCBGTUMgQXN5bmNocm9ub3VzIFdhaXQKICAgKiBAewogICAqLwotI2RlZmluZSBGTUNfQVNZTkNIUk9OT1VTX1dBSVRfRElTQUJMRSAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkKLSNkZWZpbmUgRk1DX0FTWU5DSFJPTk9VU19XQUlUX0VOQUJMRSAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMFUpCisjZGVmaW5lIEZNQ19BU1lOQ0hST05PVVNfV0FJVF9ESVNBQkxFICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCisjZGVmaW5lIEZNQ19BU1lOQ0hST05PVVNfV0FJVF9FTkFCTEUgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDc4LDEwICs0NzgsMTEgQEAKIC8qKiBAZGVmZ3JvdXAgRk1DX1BhZ2VfU2l6ZSBGTUMgUGFnZSBTaXplCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX1BBR0VfU0laRV9OT05FICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpCisjZGVmaW5lIEZNQ19QQUdFX1NJWkVfTk9ORSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCiAjZGVmaW5lIEZNQ19QQUdFX1NJWkVfMTI4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KUZNQ19CQ1J4X0NQU0laRV8wKQogI2RlZmluZSBGTUNfUEFHRV9TSVpFXzI1NiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClGTUNfQkNSeF9DUFNJWkVfMSkKLSNkZWZpbmUgRk1DX1BBR0VfU0laRV81MTIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpKEZNQ19CQ1J4X0NQU0laRV8wIHwgRk1DX0JDUnhfQ1BTSVpFXzEpKQorI2RlZmluZSBGTUNfUEFHRV9TSVpFXzUxMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoRk1DX0JDUnhfQ1BTSVpFXzBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEZNQ19CQ1J4X0NQU0laRV8xKSkKICNkZWZpbmUgRk1DX1BBR0VfU0laRV8xMDI0ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpRk1DX0JDUnhfQ1BTSVpFXzIpCiAvKioKICAgKiBAfQpAQCAtNDkwLDggKzQ5MSw4IEBACiAvKiogQGRlZmdyb3VwIEZNQ19Xcml0ZV9CdXJzdCBGTUMgV3JpdGUgQnVyc3QKICAgKiBAewogICAqLwotI2RlZmluZSBGTUNfV1JJVEVfQlVSU1RfRElTQUJMRSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkKLSNkZWZpbmUgRk1DX1dSSVRFX0JVUlNUX0VOQUJMRSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMFUpCisjZGVmaW5lIEZNQ19XUklURV9CVVJTVF9ESVNBQkxFICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCisjZGVmaW5lIEZNQ19XUklURV9CVVJTVF9FTkFCTEUgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDk5LDggKzUwMCw4IEBACiAvKiogQGRlZmdyb3VwIEZNQ19Db250aW5vdXNfQ2xvY2sgRk1DIENvbnRpbnVvdXMgQ2xvY2sKICAgKiBAewogICAqLwotI2RlZmluZSBGTUNfQ09OVElOVU9VU19DTE9DS19TWU5DX09OTFkgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkKLSNkZWZpbmUgRk1DX0NPTlRJTlVPVVNfQ0xPQ0tfU1lOQ19BU1lOQyAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMFUpCisjZGVmaW5lIEZNQ19DT05USU5VT1VTX0NMT0NLX1NZTkNfT05MWSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCisjZGVmaW5lIEZNQ19DT05USU5VT1VTX0NMT0NLX1NZTkNfQVNZTkMgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApCiAvKioKICAgKiBAfQogICAqLwpAQCAtNTA5LDE4ICs1MTAsMTggQEAKICAgKiBAewogICAqLwogI2RlZmluZSBGTUNfV1JJVEVfRklGT19ESVNBQkxFICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClGTUNfQkNSMV9XRkRJUykKLSNkZWZpbmUgRk1DX1dSSVRFX0ZJRk9fRU5BQkxFICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpCisjZGVmaW5lIEZNQ19XUklURV9GSUZPX0VOQUJMRSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCiAvKioKICAgKiBAfQogICAqLwogCi0gIC8qKiBAZGVmZ3JvdXAgRk1DX0FjY2Vzc19Nb2RlIEZNQyBBY2Nlc3MgTW9kZQorLyoqIEBkZWZncm91cCBGTUNfQWNjZXNzX01vZGUgRk1DIEFjY2VzcyBNb2RlCiAgICogQHsKLSAgKi8KLSNkZWZpbmUgRk1DX0FDQ0VTU19NT0RFX0EgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpCi0jZGVmaW5lIEZNQ19BQ0NFU1NfTU9ERV9CICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDBVKQotI2RlZmluZSBGTUNfQUNDRVNTX01PREVfQyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwVSkKLSNkZWZpbmUgRk1DX0FDQ0VTU19NT0RFX0QgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgzMDAwMDAwMFUpCisqLworI2RlZmluZSBGTUNfQUNDRVNTX01PREVfQSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQorI2RlZmluZSBGTUNfQUNDRVNTX01PREVfQiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKQorI2RlZmluZSBGTUNfQUNDRVNTX01PREVfQyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKQorI2RlZmluZSBGTUNfQUNDRVNTX01PREVfRCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDMwMDAwMDAwKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTUyOCwxMCArNTI5LDEwIEBACiAvKiogQGRlZmdyb3VwIEZNQ19CeXRlX0xhbmUgRk1DIEJ5dGUgTGFuZShOQkwpIFNldHVwCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX05CTF9TRVRVUFRJTUVfMCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpCi0jZGVmaW5lIEZNQ19OQkxfU0VUVVBUSU1FXzEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDBVKQotI2RlZmluZSBGTUNfTkJMX1NFVFVQVElNRV8yICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwVSkKLSNkZWZpbmUgRk1DX05CTF9TRVRVUFRJTUVfMyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMEMwMDAwMFUpCisjZGVmaW5lIEZNQ19OQkxfU0VUVVBUSU1FXzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCisjZGVmaW5lIEZNQ19OQkxfU0VUVVBUSU1FXzEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApCisjZGVmaW5lIEZNQ19OQkxfU0VUVVBUSU1FXzIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApCisjZGVmaW5lIEZNQ19OQkxfU0VUVVBUSU1FXzMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDBDMDAwMDApCiAvKioKICAgKiBAfQogICAqLwpAQCAtNTQ5LDcgKzU1MCw3IEBACiAvKiogQGRlZmdyb3VwIEZNQ19OQU5EX0JhbmsgRk1DIE5BTkQgQmFuawogICAqIEB7CiAgICovCi0jZGVmaW5lIEZNQ19OQU5EX0JBTkszICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDBVKQorI2RlZmluZSBGTUNfTkFORF9CQU5LMyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTU1Nyw4ICs1NTgsOCBAQAogLyoqIEBkZWZncm91cCBGTUNfV2FpdF9mZWF0dXJlIEZNQyBXYWl0IGZlYXR1cmUKICAgKiBAewogICAqLwotI2RlZmluZSBGTUNfTkFORF9XQUlUX0ZFQVRVUkVfRElTQUJMRSAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkKLSNkZWZpbmUgRk1DX05BTkRfV0FJVF9GRUFUVVJFX0VOQUJMRSAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMlUpCisjZGVmaW5lIEZNQ19OQU5EX1dBSVRfRkVBVFVSRV9ESVNBQkxFICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCisjZGVmaW5lIEZNQ19OQU5EX1dBSVRfRkVBVFVSRV9FTkFCTEUgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpCiAvKioKICAgKiBAfQogICAqLwpAQCAtNTY2LDcgKzU2Nyw3IEBACiAvKiogQGRlZmdyb3VwIEZNQ19QQ1JfTWVtb3J5X1R5cGUgRk1DIFBDUiBNZW1vcnkgVHlwZQogICAqIEB7CiAgICovCi0jZGVmaW5lIEZNQ19QQ1JfTUVNT1JZX1RZUEVfTkFORCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDhVKQorI2RlZmluZSBGTUNfUENSX01FTU9SWV9UWVBFX05BTkQgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQogLyoqCiAgICogQH0KICAgKi8KQEAgLTU3NCw4ICs1NzUsOCBAQAogLyoqIEBkZWZncm91cCBGTUNfTkFORF9EYXRhX1dpZHRoIEZNQyBOQU5EIERhdGEgV2lkdGgKICAgKiBAewogICAqLwotI2RlZmluZSBGTUNfTkFORF9NRU1fQlVTX1dJRFRIXzggICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkKLSNkZWZpbmUgRk1DX05BTkRfTUVNX0JVU19XSURUSF8xNiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMFUpCisjZGVmaW5lIEZNQ19OQU5EX01FTV9CVVNfV0lEVEhfOCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCisjZGVmaW5lIEZNQ19OQU5EX01FTV9CVVNfV0lEVEhfMTYgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApCiAvKioKICAgKiBAfQogICAqLwpAQCAtNTgzLDggKzU4NCw4IEBACiAvKiogQGRlZmdyb3VwIEZNQ19FQ0MgRk1DIEVDQwogICAqIEB7CiAgICovCi0jZGVmaW5lIEZNQ19OQU5EX0VDQ19ESVNBQkxFICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKQotI2RlZmluZSBGTUNfTkFORF9FQ0NfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwVSkKKyNkZWZpbmUgRk1DX05BTkRfRUNDX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkKKyNkZWZpbmUgRk1DX05BTkRfRUNDX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkKIC8qKgogICAqIEB9CiAgICovCkBAIC01OTIsMTIgKzU5MywxMiBAQAogLyoqIEBkZWZncm91cCBGTUNfRUNDX1BhZ2VfU2l6ZSBGTUMgRUNDIFBhZ2UgU2l6ZQogICAqIEB7CiAgICovCi0jZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfMjU2QllURSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKQotI2RlZmluZSBGTUNfTkFORF9FQ0NfUEFHRV9TSVpFXzUxMkJZVEUgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwVSkKLSNkZWZpbmUgRk1DX05BTkRfRUNDX1BBR0VfU0laRV8xMDI0QllURSAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMFUpCi0jZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfMjA0OEJZVEUgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNjAwMDBVKQotI2RlZmluZSBGTUNfTkFORF9FQ0NfUEFHRV9TSVpFXzQwOTZCWVRFICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwVSkKLSNkZWZpbmUgRk1DX05BTkRfRUNDX1BBR0VfU0laRV84MTkyQllURSAgICAgICAgICgodWludDMyX3QpMHgwMDBBMDAwMFUpCisjZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfMjU2QllURSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCisjZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfNTEyQllURSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApCisjZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfMTAyNEJZVEUgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApCisjZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfMjA0OEJZVEUgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNjAwMDApCisjZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfNDA5NkJZVEUgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApCisjZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfODE5MkJZVEUgICAgICAgICAoKHVpbnQzMl90KTB4MDAwQTAwMDApCiAvKioKICAgKiBAfQogICAqLwpAQCAtNjEyLDkgKzYxMyw5IEBACiAgICogQHsKICAgKi8KICNpZiBkZWZpbmVkKEZNQ19CQU5LMykKLSNkZWZpbmUgRk1DX0lUX1JJU0lOR19FREdFICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOFUpCi0jZGVmaW5lIEZNQ19JVF9MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTBVKQotI2RlZmluZSBGTUNfSVRfRkFMTElOR19FREdFICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwVSkKKyNkZWZpbmUgRk1DX0lUX1JJU0lOR19FREdFICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkKKyNkZWZpbmUgRk1DX0lUX0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkKKyNkZWZpbmUgRk1DX0lUX0ZBTExJTkdfRURHRSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkKICNlbmRpZiAvKiBGTUNfQkFOSzMgKi8KIC8qKgogICAqIEB9CkBAIC02MjQsMTAgKzYyNSwxMCBAQAogICAqIEB7CiAgICovCiAjaWYgZGVmaW5lZChGTUNfQkFOSzMpCi0jZGVmaW5lIEZNQ19GTEFHX1JJU0lOR19FREdFICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDFVKQotI2RlZmluZSBGTUNfRkxBR19MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyVSkKLSNkZWZpbmUgRk1DX0ZMQUdfRkFMTElOR19FREdFICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNFUpCi0jZGVmaW5lIEZNQ19GTEFHX0ZFTVBUICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDBVKQorI2RlZmluZSBGTUNfRkxBR19SSVNJTkdfRURHRSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQorI2RlZmluZSBGTUNfRkxBR19MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQorI2RlZmluZSBGTUNfRkxBR19GQUxMSU5HX0VER0UgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQorI2RlZmluZSBGTUNfRkxBR19GRU1QVCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQogI2VuZGlmIC8qIEZNQ19CQU5LMyAqLwogLyoqCiAgICogQH0KQEAgLTY0MCw3ICs2NDEsNyBAQAogLyoqCiAgICogQH0KICAgKi8KLSAgCisKIC8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGRlZmdyb3VwIEZNQ19MTF9Qcml2YXRlX01hY3JvcyBGTUNfTEwgIFByaXZhdGUgTWFjcm9zCiAgICogQHsKQEAgLTY1Nyw3ICs2NTgsOCBAQAogICAqIEBwYXJhbSAgX19CQU5LX18gRk1DX05PUlNSQU0gQmFuawogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0ZNQ19OT1JTUkFNX0VOQUJMRShfX0lOU1RBTkNFX18sIF9fQkFOS19fKSAgKChfX0lOU1RBTkNFX18pLT5CVENSWyhfX0JBTktfXyldIHw9IEZNQ19CQ1J4X01CS0VOKQorI2RlZmluZSBfX0ZNQ19OT1JTUkFNX0VOQUJMRShfX0lOU1RBTkNFX18sIF9fQkFOS19fKSAgKChfX0lOU1RBTkNFX18pLT5CVENSWyhfX0JBTktfXyldXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHw9IEZNQ19CQ1J4X01CS0VOKQogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgdGhlIE5PUlNSQU0gZGV2aWNlIGFjY2Vzcy4KQEAgLTY2NSw3ICs2NjcsOCBAQAogICAqIEBwYXJhbSAgX19CQU5LX18gRk1DX05PUlNSQU0gQmFuawogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0ZNQ19OT1JTUkFNX0RJU0FCTEUoX19JTlNUQU5DRV9fLCBfX0JBTktfXykgKChfX0lOU1RBTkNFX18pLT5CVENSWyhfX0JBTktfXyldICY9IH5GTUNfQkNSeF9NQktFTikKKyNkZWZpbmUgX19GTUNfTk9SU1JBTV9ESVNBQkxFKF9fSU5TVEFOQ0VfXywgX19CQU5LX18pICgoX19JTlNUQU5DRV9fKS0+QlRDUlsoX19CQU5LX18pXVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmPSB+Rk1DX0JDUnhfTUJLRU4pCiAKIC8qKgogICAqIEB9CkBAIC02NzQsOSArNjc3LDkgQEAKIAogI2lmIGRlZmluZWQoRk1DX0JBTkszKQogLyoqIEBkZWZncm91cCBGTUNfTExfTkFORF9NYWNyb3MgRk1DIE5BTkQgTWFjcm9zCi0gKiAgQGJyaWVmIG1hY3JvcyB0byBoYW5kbGUgTkFORCBkZXZpY2UgZW5hYmxlL2Rpc2FibGUKLSAqICBAewotICovCisgICogIEBicmllZiBtYWNyb3MgdG8gaGFuZGxlIE5BTkQgZGV2aWNlIGVuYWJsZS9kaXNhYmxlCisgICogIEB7CisgICovCiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSBOQU5EIGRldmljZSBhY2Nlc3MuCkBAIC03ODEsMTAgKzc4NCwxNCBAQAogLyoqIEBkZWZncm91cCBGTUNfTExfTk9SU1JBTV9Qcml2YXRlX0Z1bmN0aW9uc19Hcm91cDEgTk9SIFNSQU0gSW5pdGlhbGl6YXRpb24vZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCiAgICogIEB7CiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiAgRk1DX05PUlNSQU1fSW5pdChGTUNfTk9SU1JBTV9UeXBlRGVmICpEZXZpY2UsIEZNQ19OT1JTUkFNX0luaXRUeXBlRGVmICpJbml0KTsKLUhBTF9TdGF0dXNUeXBlRGVmICBGTUNfTk9SU1JBTV9UaW1pbmdfSW5pdChGTUNfTk9SU1JBTV9UeXBlRGVmICpEZXZpY2UsIEZNQ19OT1JTUkFNX1RpbWluZ1R5cGVEZWYgKlRpbWluZywgdWludDMyX3QgQmFuayk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgRk1DX05PUlNSQU1fRXh0ZW5kZWRfVGltaW5nX0luaXQoRk1DX05PUlNSQU1fRVhURU5ERURfVHlwZURlZiAqRGV2aWNlLCBGTUNfTk9SU1JBTV9UaW1pbmdUeXBlRGVmICpUaW1pbmcsIHVpbnQzMl90IEJhbmssIHVpbnQzMl90IEV4dGVuZGVkTW9kZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgRk1DX05PUlNSQU1fRGVJbml0KEZNQ19OT1JTUkFNX1R5cGVEZWYgKkRldmljZSwgRk1DX05PUlNSQU1fRVhURU5ERURfVHlwZURlZiAqRXhEZXZpY2UsIHVpbnQzMl90IEJhbmspOworSEFMX1N0YXR1c1R5cGVEZWYgIEZNQ19OT1JTUkFNX0luaXQoRk1DX05PUlNSQU1fVHlwZURlZiAqRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05PUlNSQU1fSW5pdFR5cGVEZWYgKkluaXQpOworSEFMX1N0YXR1c1R5cGVEZWYgIEZNQ19OT1JTUkFNX1RpbWluZ19Jbml0KEZNQ19OT1JTUkFNX1R5cGVEZWYgKkRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTUNfTk9SU1JBTV9UaW1pbmdUeXBlRGVmICpUaW1pbmcsIHVpbnQzMl90IEJhbmspOworSEFMX1N0YXR1c1R5cGVEZWYgIEZNQ19OT1JTUkFNX0V4dGVuZGVkX1RpbWluZ19Jbml0KEZNQ19OT1JTUkFNX0VYVEVOREVEX1R5cGVEZWYgKkRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTUNfTk9SU1JBTV9UaW1pbmdUeXBlRGVmICpUaW1pbmcsIHVpbnQzMl90IEJhbmssIHVpbnQzMl90IEV4dGVuZGVkTW9kZSk7CitIQUxfU3RhdHVzVHlwZURlZiAgRk1DX05PUlNSQU1fRGVJbml0KEZNQ19OT1JTUkFNX1R5cGVEZWYgKkRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05PUlNSQU1fRVhURU5ERURfVHlwZURlZiAqRXhEZXZpY2UsIHVpbnQzMl90IEJhbmspOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTgxMCw4ICs4MTcsMTAgQEAKICAgKiAgQHsKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmICBGTUNfTkFORF9Jbml0KEZNQ19OQU5EX1R5cGVEZWYgKkRldmljZSwgRk1DX05BTkRfSW5pdFR5cGVEZWYgKkluaXQpOwotSEFMX1N0YXR1c1R5cGVEZWYgIEZNQ19OQU5EX0NvbW1vblNwYWNlX1RpbWluZ19Jbml0KEZNQ19OQU5EX1R5cGVEZWYgKkRldmljZSwgRk1DX05BTkRfUENDX1RpbWluZ1R5cGVEZWYgKlRpbWluZywgdWludDMyX3QgQmFuayk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgRk1DX05BTkRfQXR0cmlidXRlU3BhY2VfVGltaW5nX0luaXQoRk1DX05BTkRfVHlwZURlZiAqRGV2aWNlLCBGTUNfTkFORF9QQ0NfVGltaW5nVHlwZURlZiAqVGltaW5nLCB1aW50MzJfdCBCYW5rKTsKK0hBTF9TdGF0dXNUeXBlRGVmICBGTUNfTkFORF9Db21tb25TcGFjZV9UaW1pbmdfSW5pdChGTUNfTkFORF9UeXBlRGVmICpEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05BTkRfUENDX1RpbWluZ1R5cGVEZWYgKlRpbWluZywgdWludDMyX3QgQmFuayk7CitIQUxfU3RhdHVzVHlwZURlZiAgRk1DX05BTkRfQXR0cmlidXRlU3BhY2VfVGltaW5nX0luaXQoRk1DX05BTkRfVHlwZURlZiAqRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OQU5EX1BDQ19UaW1pbmdUeXBlRGVmICpUaW1pbmcsIHVpbnQzMl90IEJhbmspOwogSEFMX1N0YXR1c1R5cGVEZWYgIEZNQ19OQU5EX0RlSW5pdChGTUNfTkFORF9UeXBlRGVmICpEZXZpY2UsIHVpbnQzMl90IEJhbmspOwogLyoqCiAgICogQH0KQEAgLTgyMiw3ICs4MzEsOCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgIEZNQ19OQU5EX0VDQ19FbmFibGUoRk1DX05BTkRfVHlwZURlZiAqRGV2aWNlLCB1aW50MzJfdCBCYW5rKTsKIEhBTF9TdGF0dXNUeXBlRGVmICBGTUNfTkFORF9FQ0NfRGlzYWJsZShGTUNfTkFORF9UeXBlRGVmICpEZXZpY2UsIHVpbnQzMl90IEJhbmspOwotSEFMX1N0YXR1c1R5cGVEZWYgIEZNQ19OQU5EX0dldEVDQyhGTUNfTkFORF9UeXBlRGVmICpEZXZpY2UsIHVpbnQzMl90ICpFQ0N2YWwsIHVpbnQzMl90IEJhbmssIHVpbnQzMl90IFRpbWVvdXQpOworSEFMX1N0YXR1c1R5cGVEZWYgIEZNQ19OQU5EX0dldEVDQyhGTUNfTkFORF9UeXBlRGVmICpEZXZpY2UsIHVpbnQzMl90ICpFQ0N2YWwsIHVpbnQzMl90IEJhbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRpbWVvdXQpOwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfbGxfZ3Bpby5oIGIvSW5jL3N0bTMybDR4eF9sbF9ncGlvLmgKaW5kZXggZWYxMjE3Yy4uMDI4NTgxMCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9sbF9ncGlvLmgKKysrIGIvSW5jL3N0bTMybDR4eF9sbF9ncGlvLmgKQEAgLTEwMTQsNyArMTAxNCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9HUElPX1RvZ2dsZVBpbihHUElPX1R5cGVEZWYgKkdQSU94LCB1aW50MzJfdCBQaW5NYXNrKQogewotICBXUklURV9SRUcoR1BJT3gtPk9EUiwgUkVBRF9SRUcoR1BJT3gtPk9EUikgXiBQaW5NYXNrKTsKKyAgdWludDMyX3Qgb2RyID0gUkVBRF9SRUcoR1BJT3gtPk9EUik7CisgIFdSSVRFX1JFRyhHUElPeC0+QlNSUiwgKChvZHIgJiBQaW5NYXNrKSA8PCAxNnUpIHwgKH5vZHIgJiBQaW5NYXNrKSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9sbF9pMmMuaCBiL0luYy9zdG0zMmw0eHhfbGxfaTJjLmgKaW5kZXggZjVmMjM1MC4uNDZmNWY3OCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9sbF9pMmMuaAorKysgYi9JbmMvc3RtMzJsNHh4X2xsX2kyYy5oCkBAIC02NywzOCArNjcsMzggQEAKIHR5cGVkZWYgc3RydWN0CiB7CiAgIHVpbnQzMl90IFBlcmlwaGVyYWxNb2RlOyAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBwZXJpcGhlcmFsIG1vZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBJMkNfTExfRUNfUEVSSVBIRVJBTF9NT0RFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBJMkNfTExfRUNfUEVSSVBIRVJBTF9NT0RFLgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9JMkNfU2V0TW9kZSgpLiAqLwogCiAgIHVpbnQzMl90IFRpbWluZzsgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBTREEgc2V0dXAsIGhvbGQgdGltZSBhbmQgdGhlIFNDTCBoaWdoLCBsb3cgcGVyaW9kIHZhbHVlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIHNldCBieSByZWZlcnJpbmcgdG8gdGhlIFNUTTMyQ3ViZU1YIFRvb2wgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGhlbHBlciBtYWNybyBAcmVmIF9fTExfSTJDX0NPTlZFUlRfVElNSU5HUygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGhlbHBlciBtYWNybyBAcmVmIF9fTExfSTJDX0NPTlZFUlRfVElNSU5HUygpLgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9JMkNfU2V0VGltaW5nKCkuICovCiAKICAgdWludDMyX3QgQW5hbG9nRmlsdGVyOyAgICAgICAgLyohPCBFbmFibGVzIG9yIGRpc2FibGVzIGFuYWxvZyBub2lzZSBmaWx0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBJMkNfTExfRUNfQU5BTE9HRklMVEVSX1NFTEVDVElPTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJDX0xMX0VDX0FOQUxPR0ZJTFRFUl9TRUxFQ1RJT04uCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbnMgQHJlZiBMTF9JMkNfRW5hYmxlQW5hbG9nRmlsdGVyKCkgb3IgTExfSTJDX0Rpc2FibGVBbmFsb2dGaWx0ZXIoKS4gKi8KIAogICB1aW50MzJfdCBEaWdpdGFsRmlsdGVyOyAgICAgICAvKiE8IENvbmZpZ3VyZXMgdGhlIGRpZ2l0YWwgbm9pc2UgZmlsdGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweDBGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MEYuCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0kyQ19TZXREaWdpdGFsRmlsdGVyKCkuICovCiAKICAgdWludDMyX3QgT3duQWRkcmVzczE7ICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGRldmljZSBvd24gYWRkcmVzcyAxLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweDNGRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweDNGRi4KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfSTJDX1NldE93bkFkZHJlc3MxKCkuICovCiAKICAgdWludDMyX3QgVHlwZUFja25vd2xlZGdlOyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIEFDS25vd2xlZGdlIG9yIE5vbiBBQ0tub3dsZWRnZSBjb25kaXRpb24gYWZ0ZXIgdGhlIGFkZHJlc3MgcmVjZWl2ZSBtYXRjaCBjb2RlIG9yIG5leHQgcmVjZWl2ZWQgYnl0ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEkyQ19MTF9FQ19JMkNfQUNLTk9XTEVER0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEkyQ19MTF9FQ19JMkNfQUNLTk9XTEVER0UuCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0kyQ19BY2tub3dsZWRnZU5leHREYXRhKCkuICovCiAKICAgdWludDMyX3QgT3duQWRkclNpemU7ICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGRldmljZSBvd24gYWRkcmVzcyAxIHNpemUgKDctYml0IG9yIDEwLWJpdCkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBJMkNfTExfRUNfT1dOQUREUkVTUzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEkyQ19MTF9FQ19PV05BRERSRVNTMS4KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfSTJDX1NldE93bkFkZHJlc3MxKCkuICovCiB9IExMX0kyQ19Jbml0VHlwZURlZjsKQEAgLTM2MCwxMSArMzYwLDExIEBACiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTAgYW5kIE1heF9EYXRhPTB4RkZGRkZGRkYKICAgKi8KICNkZWZpbmUgX19MTF9JMkNfQ09OVkVSVF9USU1JTkdTKF9fUFJFU0NBTEVSX18sIF9fREFUQV9TRVRVUF9USU1FX18sIF9fREFUQV9IT0xEX1RJTUVfXywgX19DTE9DS19ISUdIX1BFUklPRF9fLCBfX0NMT0NLX0xPV19QRVJJT0RfXykgICBcCi0gICAgICAgICgoKCh1aW50MzJfdCkoX19QUkVTQ0FMRVJfXykgICAgICAgICA8PCBJMkNfVElNSU5HUl9QUkVTQ19Qb3MpICAmIEkyQ19USU1JTkdSX1BSRVNDKSAgIHwgXAotICAgICAgICAgKCgodWludDMyX3QpKF9fREFUQV9TRVRVUF9USU1FX18pICAgPDwgSTJDX1RJTUlOR1JfU0NMREVMX1BvcykgJiBJMkNfVElNSU5HUl9TQ0xERUwpICB8IFwKLSAgICAgICAgICgoKHVpbnQzMl90KShfX0RBVEFfSE9MRF9USU1FX18pICAgIDw8IEkyQ19USU1JTkdSX1NEQURFTF9Qb3MpICYgSTJDX1RJTUlOR1JfU0RBREVMKSAgfCBcCi0gICAgICAgICAoKCh1aW50MzJfdCkoX19DTE9DS19ISUdIX1BFUklPRF9fKSA8PCBJMkNfVElNSU5HUl9TQ0xIX1BvcykgICAmIEkyQ19USU1JTkdSX1NDTEgpICAgIHwgXAotICAgICAgICAgKCgodWludDMyX3QpKF9fQ0xPQ0tfTE9XX1BFUklPRF9fKSAgPDwgSTJDX1RJTUlOR1JfU0NMTF9Qb3MpICAgJiBJMkNfVElNSU5HUl9TQ0xMKSkKKyAgKCgoKHVpbnQzMl90KShfX1BSRVNDQUxFUl9fKSAgICAgICAgIDw8IEkyQ19USU1JTkdSX1BSRVNDX1BvcykgICYgSTJDX1RJTUlOR1JfUFJFU0MpICAgfCBcCisgICAoKCh1aW50MzJfdCkoX19EQVRBX1NFVFVQX1RJTUVfXykgICA8PCBJMkNfVElNSU5HUl9TQ0xERUxfUG9zKSAmIEkyQ19USU1JTkdSX1NDTERFTCkgIHwgXAorICAgKCgodWludDMyX3QpKF9fREFUQV9IT0xEX1RJTUVfXykgICAgPDwgSTJDX1RJTUlOR1JfU0RBREVMX1BvcykgJiBJMkNfVElNSU5HUl9TREFERUwpICB8IFwKKyAgICgoKHVpbnQzMl90KShfX0NMT0NLX0hJR0hfUEVSSU9EX18pIDw8IEkyQ19USU1JTkdSX1NDTEhfUG9zKSAgICYgSTJDX1RJTUlOR1JfU0NMSCkgICAgfCBcCisgICAoKCh1aW50MzJfdCkoX19DTE9DS19MT1dfUEVSSU9EX18pICA8PCBJMkNfVElNSU5HUl9TQ0xMX1BvcykgICAmIEkyQ19USU1JTkdSX1NDTEwpKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTU3OCwxNyArNTc4LDE3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0RNQV9HZXRSZWdBZGRyKEkyQ19UeXBlRGVmICpJMkN4LCB1aW50MzJfdCBEaXJlY3Rpb24pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRhdGFfcmVnX2FkZHI7CisgIHVpbnQzMl90IGRhdGFfcmVnX2FkZHI7CiAKICAgaWYgKERpcmVjdGlvbiA9PSBMTF9JMkNfRE1BX1JFR19EQVRBX1RSQU5TTUlUKQogICB7CiAgICAgLyogcmV0dXJuIGFkZHJlc3Mgb2YgVFhEUiByZWdpc3RlciAqLwotICAgIGRhdGFfcmVnX2FkZHIgPSAodWludDMyX3QpICYgKEkyQ3gtPlRYRFIpOworICAgIGRhdGFfcmVnX2FkZHIgPSAodWludDMyX3QpICYoSTJDeC0+VFhEUik7CiAgIH0KICAgZWxzZQogICB7CiAgICAgLyogcmV0dXJuIGFkZHJlc3Mgb2YgUlhEUiByZWdpc3RlciAqLwotICAgIGRhdGFfcmVnX2FkZHIgPSAodWludDMyX3QpICYgKEkyQ3gtPlJYRFIpOworICAgIGRhdGFfcmVnX2FkZHIgPSAodWludDMyX3QpICYoSTJDeC0+UlhEUik7CiAgIH0KIAogICByZXR1cm4gZGF0YV9yZWdfYWRkcjsKQEAgLTY2NCw3ICs2NjQsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBXYWtldXAgZnJvbSBTVE9QLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19JMkNfV0FLRVVQX0ZST01TVE9QX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19JMkNfV0FLRVVQX0ZST01TVE9QX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBXYWtlVXBGcm9tU3RvcCBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAbm90ZSAgIFRoaXMgYml0IGNhbiBvbmx5IGJlIHByb2dyYW1tZWQgd2hlbiBEaWdpdGFsIEZpbHRlciBpcyBkaXNhYmxlZC4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBXVVBFTiAgICAgICAgIExMX0kyQ19FbmFibGVXYWtlVXBGcm9tU3RvcApAQCAtNjc4LDcgKzY3OCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBXYWtldXAgZnJvbSBTVE9QLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19JMkNfV0FLRVVQX0ZST01TVE9QX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19JMkNfV0FLRVVQX0ZST01TVE9QX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBXYWtlVXBGcm9tU3RvcCBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBXVVBFTiAgICAgICAgIExMX0kyQ19EaXNhYmxlV2FrZVVwRnJvbVN0b3AKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtNjkxLDcgKzY5MSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgaWYgV2FrZXVwIGZyb20gU1RPUCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19JMkNfV0FLRVVQX0ZST01TVE9QX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19JMkNfV0FLRVVQX0ZST01TVE9QX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBXYWtlVXBGcm9tU3RvcCBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBXVVBFTiAgICAgICAgIExMX0kyQ19Jc0VuYWJsZWRXYWtlVXBGcm9tU3RvcAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCkBAIC05NDEsNyArOTQxLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDb25maWd1cmUgcGVyaXBoZXJhbCBtb2RlLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgU01CSEVOICAgICAgICBMTF9JMkNfU2V0TW9kZVxuCiAgICogICAgICAgICBDUjEgICAgICAgICAgU01CREVOICAgICAgICBMTF9JMkNfU2V0TW9kZQpAQCAtOTYwLDcgKzk2MCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgR2V0IHBlcmlwaGVyYWwgbW9kZS4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgIFNNQkhFTiAgICAgICAgTExfSTJDX0dldE1vZGVcbgogICAqICAgICAgICAgQ1IxICAgICAgICAgIFNNQkRFTiAgICAgICAgTExfSTJDX0dldE1vZGUKQEAgLTk3OCw3ICs5NzgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBTTUJ1cyBhbGVydCAoSG9zdCBvciBEZXZpY2UgbW9kZSkKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBub3RlICAgU01CdXMgRGV2aWNlIG1vZGU6CiAgICogICAgICAgICAtIFNNQnVzIEFsZXJ0IHBpbiBpcyBkcml2ZWQgbG93IGFuZApAQCAtOTk2LDcgKzk5Niw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBTTUJ1cyBhbGVydCAoSG9zdCBvciBEZXZpY2UgbW9kZSkKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBub3RlICAgU01CdXMgRGV2aWNlIG1vZGU6CiAgICogICAgICAgICAtIFNNQnVzIEFsZXJ0IHBpbiBpcyBub3QgZHJpdmVkIChjYW4gYmUgdXNlZCBhcyBhIHN0YW5kYXJkIEdQSU8pIGFuZApAQCAtMTAxNCw3ICsxMDE0LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDaGVjayBpZiBTTUJ1cyBhbGVydCAoSG9zdCBvciBEZXZpY2UgbW9kZSkgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgIEFMRVJURU4gICAgICAgTExfSTJDX0lzRW5hYmxlZFNNQnVzQWxlcnQKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTAyNyw3ICsxMDI3LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgU01CdXMgUGFja2V0IEVycm9yIENhbGN1bGF0aW9uIChQRUMpLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgUEVDRU4gICAgICAgICBMTF9JMkNfRW5hYmxlU01CdXNQRUMKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTA0MCw3ICsxMDQwLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIFNNQnVzIFBhY2tldCBFcnJvciBDYWxjdWxhdGlvbiAoUEVDKS4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgIFBFQ0VOICAgICAgICAgTExfSTJDX0Rpc2FibGVTTUJ1c1BFQwogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCkBAIC0xMDUzLDcgKzEwNTMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIGlmIFNNQnVzIFBhY2tldCBFcnJvciBDYWxjdWxhdGlvbiAoUEVDKSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgUEVDRU4gICAgICAgICBMTF9JMkNfSXNFbmFibGVkU01CdXNQRUMKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTA2Niw3ICsxMDY2LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDb25maWd1cmUgdGhlIFNNQnVzIENsb2NrIFRpbWVvdXQuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAbm90ZSAgIFRoaXMgY29uZmlndXJhdGlvbiBjYW4gb25seSBiZSBwcm9ncmFtbWVkIHdoZW4gYXNzb2NpYXRlZCBUaW1lb3V0IGlzIGRpc2FibGVkIChUaW1lb3V0QSBhbmQvb3JUaW1lb3V0QikuCiAgICogQHJtdG9sbCBUSU1FT1VUUiAgICAgVElNRU9VVEEgICAgICBMTF9JMkNfQ29uZmlnU01CdXNUaW1lb3V0XG4KQEAgLTEwODksNyArMTA4OSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBTTUJ1cyBDbG9jayBUaW1lb3V0QSAoU0NMIGxvdyB0aW1lb3V0IG9yIFNDTCBhbmQgU0RBIGhpZ2ggdGltZW91dCBkZXBlbmRzIG9uIFRpbWVvdXRBIG1vZGUpLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQG5vdGUgICBUaGVzZSBiaXRzIGNhbiBvbmx5IGJlIHByb2dyYW1tZWQgd2hlbiBUaW1lb3V0QSBpcyBkaXNhYmxlZC4KICAgKiBAcm10b2xsIFRJTUVPVVRSICAgICBUSU1FT1VUQSAgICAgIExMX0kyQ19TZXRTTUJ1c1RpbWVvdXRBCkBAIC0xMTA0LDcgKzExMDQsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEdldCB0aGUgU01CdXMgQ2xvY2sgVGltZW91dEEgc2V0dGluZy4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgVElNRU9VVFIgICAgIFRJTUVPVVRBICAgICAgTExfSTJDX0dldFNNQnVzVGltZW91dEEKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTExNyw3ICsxMTE3LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZXQgdGhlIFNNQnVzIENsb2NrIFRpbWVvdXRBIG1vZGUuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAbm90ZSAgIFRoaXMgYml0IGNhbiBvbmx5IGJlIHByb2dyYW1tZWQgd2hlbiBUaW1lb3V0QSBpcyBkaXNhYmxlZC4KICAgKiBAcm10b2xsIFRJTUVPVVRSICAgICBUSURMRSAgICAgICAgIExMX0kyQ19TZXRTTUJ1c1RpbWVvdXRBTW9kZQpAQCAtMTEzNCw3ICsxMTM0LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBHZXQgdGhlIFNNQnVzIENsb2NrIFRpbWVvdXRBIG1vZGUuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIFRJTUVPVVRSICAgICBUSURMRSAgICAgICAgIExMX0kyQ19HZXRTTUJ1c1RpbWVvdXRBTW9kZQogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCkBAIC0xMTQ5LDcgKzExNDksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENvbmZpZ3VyZSB0aGUgU01CdXMgRXh0ZW5kZWQgQ3VtdWxhdGl2ZSBDbG9jayBUaW1lb3V0QiAoTWFzdGVyIG9yIFNsYXZlIG1vZGUpLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQG5vdGUgICBUaGVzZSBiaXRzIGNhbiBvbmx5IGJlIHByb2dyYW1tZWQgd2hlbiBUaW1lb3V0QiBpcyBkaXNhYmxlZC4KICAgKiBAcm10b2xsIFRJTUVPVVRSICAgICBUSU1FT1VUQiAgICAgIExMX0kyQ19TZXRTTUJ1c1RpbWVvdXRCCkBAIC0xMTYzLDggKzExNjMsOCBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIEdldCB0aGUgU01CdXMgRXh0ZW50ZWQgQ3VtdWxhdGl2ZSBDbG9jayBUaW1lb3V0QiBzZXR0aW5nLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAYnJpZWYgIEdldCB0aGUgU01CdXMgRXh0ZW5kZWQgQ3VtdWxhdGl2ZSBDbG9jayBUaW1lb3V0QiBzZXR0aW5nLgorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIFRJTUVPVVRSICAgICBUSU1FT1VUQiAgICAgIExMX0kyQ19HZXRTTUJ1c1RpbWVvdXRCCiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KQEAgLTExNzcsNyArMTE3Nyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSBTTUJ1cyBDbG9jayBUaW1lb3V0LgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBUSU1FT1VUUiAgICAgVElNT1VURU4gICAgICBMTF9JMkNfRW5hYmxlU01CdXNUaW1lb3V0XG4KICAgKiAgICAgICAgIFRJTUVPVVRSICAgICBURVhURU4gICAgICAgIExMX0kyQ19FbmFibGVTTUJ1c1RpbWVvdXQKQEAgLTExOTUsNyArMTE5NSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSB0aGUgU01CdXMgQ2xvY2sgVGltZW91dC4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgVElNRU9VVFIgICAgIFRJTU9VVEVOICAgICAgTExfSTJDX0Rpc2FibGVTTUJ1c1RpbWVvdXRcbgogICAqICAgICAgICAgVElNRU9VVFIgICAgIFRFWFRFTiAgICAgICAgTExfSTJDX0Rpc2FibGVTTUJ1c1RpbWVvdXQKQEAgLTEyMTMsNyArMTIxMyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgaWYgdGhlIFNNQnVzIENsb2NrIFRpbWVvdXQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgVElNRU9VVFIgICAgIFRJTU9VVEVOICAgICAgTExfSTJDX0lzRW5hYmxlZFNNQnVzVGltZW91dFxuCiAgICogICAgICAgICBUSU1FT1VUUiAgICAgVEVYVEVOICAgICAgICBMTF9JMkNfSXNFbmFibGVkU01CdXNUaW1lb3V0CkBAIC0xNDQzLDcgKzE0NDMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBFcnJvciBpbnRlcnJ1cHRzLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQG5vdGUgICBBbnkgb2YgdGhlc2UgZXJyb3JzIHdpbGwgZ2VuZXJhdGUgaW50ZXJydXB0IDoKICAgKiAgICAgICAgIEFyYml0cmF0aW9uIExvc3MgKEFSTE8pCkBAIC0xNDYzLDcgKzE0NjMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgRXJyb3IgaW50ZXJydXB0cy4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBub3RlICAgQW55IG9mIHRoZXNlIGVycm9ycyB3aWxsIGdlbmVyYXRlIGludGVycnVwdCA6CiAgICogICAgICAgICBBcmJpdHJhdGlvbiBMb3NzIChBUkxPKQpAQCAtMTY0NSw3ICsxNjQ1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSB0aGUgc3RhdHVzIG9mIFNNQnVzIFBFQyBlcnJvciBmbGFnIGluIHJlY2VwdGlvbi4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBub3RlICAgUkVTRVQ6IENsZWFyIGRlZmF1bHQgdmFsdWUuCiAgICogICAgICAgICBTRVQ6IFdoZW4gdGhlIHJlY2VpdmVkIFBFQyBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBQRUMgcmVnaXN0ZXIgY29udGVudC4KQEAgLTE2NjAsNyArMTY2MCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGUgdGhlIHN0YXR1cyBvZiBTTUJ1cyBUaW1lb3V0IGRldGVjdGlvbiBmbGFnLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQG5vdGUgICBSRVNFVDogQ2xlYXIgZGVmYXVsdCB2YWx1ZS4KICAgKiAgICAgICAgIFNFVDogV2hlbiBhIHRpbWVvdXQgb3IgZXh0ZW5kZWQgY2xvY2sgdGltZW91dCBvY2N1cnMuCkBAIC0xNjc1LDcgKzE2NzUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluZGljYXRlIHRoZSBzdGF0dXMgb2YgU01CdXMgYWxlcnQgZmxhZy4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBub3RlICAgUkVTRVQ6IENsZWFyIGRlZmF1bHQgdmFsdWUuCiAgICogICAgICAgICBTRVQ6IFdoZW4gU01CdXMgaG9zdCBjb25maWd1cmF0aW9uLCBTTUJ1cyBhbGVydCBlbmFibGVkIGFuZApAQCAtMTc4Miw3ICsxNzgyLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDbGVhciBTTUJ1cyBQRUMgZXJyb3IgZmxhZy4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgSUNSICAgICAgICAgIFBFQ0NGICAgICAgICAgTExfSTJDX0NsZWFyU01CdXNGbGFnX1BFQ0VSUgogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCkBAIC0xNzk1LDcgKzE3OTUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENsZWFyIFNNQnVzIFRpbWVvdXQgZGV0ZWN0aW9uIGZsYWcuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIElDUiAgICAgICAgICBUSU1PVVRDRiAgICAgIExMX0kyQ19DbGVhclNNQnVzRmxhZ19USU1FT1VUCiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KQEAgLTE4MDgsNyArMTgwOCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2xlYXIgU01CdXMgQWxlcnQgZmxhZy4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgSUNSICAgICAgICAgIEFMRVJUQ0YgICAgICAgTExfSTJDX0NsZWFyU01CdXNGbGFnX0FMRVJUCiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KQEAgLTIwOTAsNyArMjA5MCw5IEBACiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JMkNfSGFuZGxlVHJhbnNmZXIoSTJDX1R5cGVEZWYgKkkyQ3gsIHVpbnQzMl90IFNsYXZlQWRkciwgdWludDMyX3QgU2xhdmVBZGRyU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUcmFuc2ZlclNpemUsIHVpbnQzMl90IEVuZE1vZGUsIHVpbnQzMl90IFJlcXVlc3QpCiB7Ci0gIE1PRElGWV9SRUcoSTJDeC0+Q1IyLCBJMkNfQ1IyX1NBREQgfCBJMkNfQ1IyX0FERDEwIHwgKEkyQ19DUjJfUkRfV1JOICYgKHVpbnQzMl90KShSZXF1ZXN0ID4+ICgzMVUgLSBJMkNfQ1IyX1JEX1dSTl9Qb3MpKSkgfCBJMkNfQ1IyX1NUQVJUIHwgSTJDX0NSMl9TVE9QIHwgSTJDX0NSMl9SRUxPQUQgfAorICBNT0RJRllfUkVHKEkyQ3gtPkNSMiwgSTJDX0NSMl9TQUREIHwgSTJDX0NSMl9BREQxMCB8CisgICAgICAgICAgICAgKEkyQ19DUjJfUkRfV1JOICYgKHVpbnQzMl90KShSZXF1ZXN0ID4+ICgzMVUgLSBJMkNfQ1IyX1JEX1dSTl9Qb3MpKSkgfAorICAgICAgICAgICAgIEkyQ19DUjJfU1RBUlQgfCBJMkNfQ1IyX1NUT1AgfCBJMkNfQ1IyX1JFTE9BRCB8CiAgICAgICAgICAgICAgSTJDX0NSMl9OQllURVMgfCBJMkNfQ1IyX0FVVE9FTkQgfCBJMkNfQ1IyX0hFQUQxMFIsCiAgICAgICAgICAgICAgU2xhdmVBZGRyIHwgU2xhdmVBZGRyU2l6ZSB8IChUcmFuc2ZlclNpemUgPDwgSTJDX0NSMl9OQllURVNfUG9zKSB8IEVuZE1vZGUgfCBSZXF1ZXN0KTsKIH0KQEAgLTIxMjMsNyArMjEyNSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIGludGVybmFsIGNvbXBhcmlzb24gb2YgdGhlIFNNQnVzIFBhY2tldCBFcnJvciBieXRlICh0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uIG1vZGUpLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQG5vdGUgICBUaGlzIGZlYXR1cmUgaXMgY2xlYXJlZCBieSBoYXJkd2FyZSB3aGVuIHRoZSBQRUMgYnl0ZSBpcyB0cmFuc2ZlcnJlZCwgb3Igd2hlbiBhIFNUT1AgY29uZGl0aW9uIG9yIGFuIEFkZHJlc3MgTWF0Y2hlZCBpcyByZWNlaXZlZC4KICAgKiAgICAgICAgIFRoaXMgYml0IGhhcyBubyBlZmZlY3Qgd2hlbiBSRUxPQUQgYml0IGlzIHNldC4KQEAgLTIxMzksNyArMjE0MSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgaWYgdGhlIFNNQnVzIFBhY2tldCBFcnJvciBieXRlIGludGVybmFsIGNvbXBhcmlzb24gaXMgcmVxdWVzdGVkIG9yIG5vdC4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IyICAgICAgICAgIFBFQ0JZVEUgICAgICAgTExfSTJDX0lzRW5hYmxlZFNNQnVzUEVDQ29tcGFyZQogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCkBAIC0yMTUyLDEyICsyMTU0LDEyIEBACiAKIC8qKgogICAqIEBicmllZiAgR2V0IHRoZSBTTUJ1cyBQYWNrZXQgRXJyb3IgYnl0ZSBjYWxjdWxhdGVkLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBQRUNSICAgICAgICAgUEVDICAgICAgICAgICBMTF9JMkNfR2V0U01CdXNQRUMKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgogICAqIEByZXR2YWwgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19HZXRTTUJ1c1BFQyhJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoSTJDeC0+UEVDUiwgSTJDX1BFQ1JfUEVDKSk7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2xsX2xwdGltLmggYi9JbmMvc3RtMzJsNHh4X2xsX2xwdGltLmgKaW5kZXggODg4ZTU1YS4uYWQ3ODA0NyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9sbF9scHRpbS5oCisrKyBiL0luYy9zdG0zMmw0eHhfbGxfbHB0aW0uaApAQCAtMTYzLDcgKzE2Myw3IEBACiAvKiogQGRlZmdyb3VwIExQVElNX0xMX0VDX09VVFBVVF9XQVZFRk9STSBPdXRwdXQgV2F2ZWZvcm0gVHlwZQogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0xQVElNX09VVFBVVF9XQVZFRk9STV9QV00gICAgICAgICAgMHgwMDAwMDAwMFUgICAgIC8qITxMUFRJTSAgZ2VuZXJhdGVzIGVpdGhlciBhIFBXTSB3YXZlZm9ybSBvciBhIE9uZSBwdWxzZSB3YXZlZm9ybSBkZXBlbmRpbmcgb24gY2hvc2VuIG9wZXJhdGluZyBtb2RlIENPTlRJTk9VUyBvciBTSU5HTEUqLworI2RlZmluZSBMTF9MUFRJTV9PVVRQVVRfV0FWRUZPUk1fUFdNICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAvKiE8TFBUSU0gIGdlbmVyYXRlcyBlaXRoZXIgYSBQV00gd2F2ZWZvcm0gb3IgYSBPbmUgcHVsc2Ugd2F2ZWZvcm0gZGVwZW5kaW5nIG9uIGNob3NlbiBvcGVyYXRpbmcgbW9kZSBDT05USU5VT1VTIG9yIFNJTkdMRSovCiAjZGVmaW5lIExMX0xQVElNX09VVFBVVF9XQVZFRk9STV9TRVRPTkNFICAgICAgTFBUSU1fQ0ZHUl9XQVZFIC8qITxMUFRJTSAgZ2VuZXJhdGVzIGEgU2V0IE9uY2Ugd2F2ZWZvcm0qLwogLyoqCiAgICogQH0KQEAgLTM3MCw3ICszNzAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZChMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7Ci0gIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPkNSLCBMUFRJTV9DUl9FTkFCTEUpID09IExQVElNX0NSX0VOQUJMRSk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5DUiwgTFBUSU1fQ1JfRU5BQkxFKSA9PSBMUFRJTV9DUl9FTkFCTEUpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtNDI0LDcgKzQyNCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNFbmFibGVkUmVzZXRBZnRlclJlYWQoTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5DUiwgTFBUSU1fQ1JfUlNUQVJFKSA9PSBMUFRJTV9DUl9SU1RBUkUpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+Q1IsIExQVElNX0NSX1JTVEFSRSkgPT0gTFBUSU1fQ1JfUlNUQVJFKSA/IDFVTCA6IDBVTCkpOwogfQogI2VuZGlmCiAKQEAgLTc5NSw3ICs3OTUsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZFRpbWVvdXQoTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5DRkdSLCBMUFRJTV9DRkdSX1RJTU9VVCkgPT0gTFBUSU1fQ0ZHUl9USU1PVVQpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+Q0ZHUiwgTFBUSU1fQ0ZHUl9USU1PVVQpID09IExQVElNX0NGR1JfVElNT1VUKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTEwNTgsNyArMTA1OCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNFbmFibGVkRW5jb2Rlck1vZGUoTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5DRkdSLCBMUFRJTV9DRkdSX0VOQykgPT0gTFBUSU1fQ0ZHUl9FTkMpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+Q0ZHUiwgTFBUSU1fQ0ZHUl9FTkMpID09IExQVElNX0NGR1JfRU5DKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTEwODgsNyArMTA4OCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNBY3RpdmVGbGFnX0NNUE0oTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9DTVBNKSA9PSBMUFRJTV9JU1JfQ01QTSk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9DTVBNKSA9PSBMUFRJTV9JU1JfQ01QTSkgPyAxVUwgOiAwVUwpKTsKIH0KIAogLyoqCkBAIC0xMTEwLDcgKzExMTAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzQWN0aXZlRmxhZ19BUlJNKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfQVJSTSkgPT0gTFBUSU1fSVNSX0FSUk0pPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfQVJSTSkgPT0gTFBUSU1fSVNSX0FSUk0pID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTEzMiw3ICsxMTMyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfRVhUVFJJRyhMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7Ci0gIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0VYVFRSSUcpID09IExQVElNX0lTUl9FWFRUUklHKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0VYVFRSSUcpID09IExQVElNX0lTUl9FWFRUUklHKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTExNTQsNyArMTE1NCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNBY3RpdmVGbGFnX0NNUE9LKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfQ01QT0spID09IExQVElNX0lTUl9DTVBPSyk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9DTVBPSykgPT0gTFBUSU1fSVNSX0NNUE9LKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTExNzYsNyArMTE3Niw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNBY3RpdmVGbGFnX0FSUk9LKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfQVJST0spID09IExQVElNX0lTUl9BUlJPSyk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9BUlJPSykgPT0gTFBUSU1fSVNSX0FSUk9LKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTExOTgsNyArMTE5OCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNBY3RpdmVGbGFnX1VQKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfVVApID09IExQVElNX0lTUl9VUCk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9VUCkgPT0gTFBUSU1fSVNSX1VQKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTEyMjAsNyArMTIyMCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNBY3RpdmVGbGFnX0RPV04oTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9ET1dOKSA9PSBMUFRJTV9JU1JfRE9XTik/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9ET1dOKSA9PSBMUFRJTV9JU1JfRE9XTikgPyAxVUwgOiAwVUwpKTsKIH0KIAogI2lmIGRlZmluZWQoTFBUSU1fUkNSX1JFUCkKQEAgLTEzMDcsNyArMTMwNyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNFbmFibGVkSVRfQ01QTShMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7Ci0gIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklFUiwgTFBUSU1fSUVSX0NNUE1JRSkgPT0gTFBUSU1fSUVSX0NNUE1JRSk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9DTVBNSUUpID09IExQVElNX0lFUl9DTVBNSUUpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTM0MCw3ICsxMzQwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWRJVF9BUlJNKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfQVJSTUlFKSA9PSBMUFRJTV9JRVJfQVJSTUlFKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklFUiwgTFBUSU1fSUVSX0FSUk1JRSkgPT0gTFBUSU1fSUVSX0FSUk1JRSkgPyAxVUwgOiAwVUwpKTsKIH0KIAogLyoqCkBAIC0xMzczLDcgKzEzNzMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0VYVFRSSUcoTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9FWFRUUklHSUUpID09IExQVElNX0lFUl9FWFRUUklHSUUpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfRVhUVFJJR0lFKSA9PSBMUFRJTV9JRVJfRVhUVFJJR0lFKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTE0MDYsNyArMTQwNiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNFbmFibGVkSVRfQ01QT0soTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9DTVBPS0lFKSA9PSBMUFRJTV9JRVJfQ01QT0tJRSk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9DTVBPS0lFKSA9PSBMUFRJTV9JRVJfQ01QT0tJRSkgPyAxVUwgOiAwVUwpKTsKIH0KIAogLyoqCkBAIC0xNDM1LDExICsxNDM1LDExIEBACiAgICogQGJyaWVmICBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYXV0b3JlbG9hZCByZWdpc3RlciB3cml0ZSBjb21wbGV0ZWQgaW50ZXJydXB0IChBUlJPS0lFKSBpcyBlbmFibGVkLgogICAqIEBybXRvbGwgSUVSICAgICAgICAgIEFSUk9LSUUgICAgICAgTExfTFBUSU1fSXNFbmFibGVkSVRfQVJST0sKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0FSUk9LKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfQVJST0tJRSkgPT0gTFBUSU1fSUVSX0FSUk9LSUUpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfQVJST0tJRSkgPT0gTFBUSU1fSUVSX0FSUk9LSUUpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTQ2OCwxMSArMTQ2OCwxMSBAQAogICAqIEBicmllZiAgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRpcmVjdGlvbiBjaGFuZ2UgdG8gdXAgaW50ZXJydXB0IChVUElFKSBpcyBlbmFibGVkLgogICAqIEBybXRvbGwgSUVSICAgICAgICAgIFVQSUUgICAgICAgICAgTExfTFBUSU1fSXNFbmFibGVkSVRfVVAKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX1VQKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfVVBJRSkgPT0gTFBUSU1fSUVSX1VQSUUpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfVVBJRSkgPT0gTFBUSU1fSUVSX1VQSUUpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTUwMSwxMSArMTUwMSwxMSBAQAogICAqIEBicmllZiAgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRpcmVjdGlvbiBjaGFuZ2UgdG8gZG93biBpbnRlcnJ1cHQgKERPV05JRSkgaXMgZW5hYmxlZC4KICAgKiBAcm10b2xsIElFUiAgICAgICAgICBET1dOSUUgICAgICAgIExMX0xQVElNX0lzRW5hYmxlZElUX0RPV04KICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0RPV04oTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKChSRUFEX0JJVChMUFRJTXgtPklFUiwgTFBUSU1fSUVSX0RPV05JRSkgPT0gTFBUSU1fSUVSX0RPV05JRSk/IDFVTCA6IDBVTCk7CisgIHJldHVybiAoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfRE9XTklFKSA9PSBMUFRJTV9JRVJfRE9XTklFKSA/IDFVTCA6IDBVTCk7CiB9CiAKICNpZiBkZWZpbmVkKExQVElNX1JDUl9SRVApCkBAIC0xNTM1LDcgKzE1MzUsNyBAQAogICAqIEBicmllZiAgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlcGV0aXRpb24gcmVnaXN0ZXIgdXBkYXRlIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgaW50ZXJydXB0IChSRVBPS0lFKSBpcyBlbmFibGVkLgogICAqIEBybXRvbGwgSUVSICAgICAgICAgIFJFUE9LSUUgICAgICAgTExfTFBUSU1fSXNFbmFibGVkSVRfUkVQT0sKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX1JFUE9LKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKQEAgLTE1NjgsNyArMTU2OCw3IEBACiAgICogQGJyaWVmICBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdXBkYXRlIGV2ZW50IGludGVycnVwdCAoVUVJRSkgaXMgZW5hYmxlZC4KICAgKiBAcm10b2xsIElFUiAgICAgICAgICBVRUlFICAgICAgICAgIExMX0xQVElNX0lzRW5hYmxlZElUX1VFCiAgICogQHBhcmFtICBMUFRJTXggTG93LVBvd2VyIFRpbWVyIGluc3RhbmNlCi0gICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICpAIHJldHZhbCBTdGF0ZSBvZiBiaXQoMSBvciAwKS4KICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWRJVF9VRShMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2xsX2xwdWFydC5oIGIvSW5jL3N0bTMybDR4eF9sbF9scHVhcnQuaAppbmRleCAwNzI3MmU4Li4yZmQzNDM1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2xsX2xwdWFydC5oCisrKyBiL0luYy9zdG0zMmw0eHhfbGxfbHB1YXJ0LmgKQEAgLTE0NjgsMTAgKzE0NjgsMTAgQEAKIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0QmF1ZFJhdGUoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCwgdWludDMyX3QgUGVyaXBoQ2xrKQogI2VuZGlmIC8qIFVTQVJUX1BSRVNDX1BSRVNDQUxFUiAqLwogewotICByZWdpc3RlciB1aW50MzJfdCBscHVhcnRkaXY7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJycnJlc3VsdDsKKyAgdWludDMyX3QgbHB1YXJ0ZGl2OworICB1aW50MzJfdCBicnJyZXN1bHQ7CiAjaWYgZGVmaW5lZChVU0FSVF9QUkVTQ19QUkVTQ0FMRVIpCi0gIHJlZ2lzdGVyIHVpbnQzMl90IHBlcmlwaGNsa3ByZXNjID0gKHVpbnQzMl90KShQZXJpcGhDbGsgLyAoTFBVQVJUX1BSRVNDQUxFUl9UQUJbKHVpbnQxNl90KVByZXNjYWxlclZhbHVlXSkpOworICB1aW50MzJfdCBwZXJpcGhjbGtwcmVzYyA9ICh1aW50MzJfdCkoUGVyaXBoQ2xrIC8gKExQVUFSVF9QUkVTQ0FMRVJfVEFCWyh1aW50MTZfdClQcmVzY2FsZXJWYWx1ZV0pKTsKICNlbmRpZiAvKiBVU0FSVF9QUkVTQ19QUkVTQ0FMRVIgKi8KIAogICBscHVhcnRkaXYgPSBMUFVBUlR4LT5CUlIgJiBMUFVBUlRfQlJSX01BU0s7CkBAIC0yNzEwLDcgKzI3MTAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9ETUFfR2V0UmVnQWRkcihVU0FSVF9UeXBlRGVmICpMUFVBUlR4LCB1aW50MzJfdCBEaXJlY3Rpb24pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRhdGFfcmVnX2FkZHI7CisgIHVpbnQzMl90IGRhdGFfcmVnX2FkZHI7CiAKICAgaWYgKERpcmVjdGlvbiA9PSBMTF9MUFVBUlRfRE1BX1JFR19EQVRBX1RSQU5TTUlUKQogICB7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2xsX29wYW1wLmggYi9JbmMvc3RtMzJsNHh4X2xsX29wYW1wLmgKaW5kZXggYzQ5ZjIyNy4uOTMzZjJjMiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9sbF9vcGFtcC5oCisrKyBiL0luYy9zdG0zMmw0eHhfbGxfb3BhbXAuaApAQCAtNDMzLDcgKzQzMyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfT1BBTVBfR2V0UG93ZXJNb2RlKE9QQU1QX1R5cGVEZWYgKk9QQU1QeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgcG93ZXJfbW9kZSA9IChSRUFEX0JJVChPUEFNUHgtPkNTUiwgT1BBTVBfQ1NSX09QQUxQTSkpOworICB1aW50MzJfdCBwb3dlcl9tb2RlID0gKFJFQURfQklUKE9QQU1QeC0+Q1NSLCBPUEFNUF9DU1JfT1BBTFBNKSk7CiAKICAgcmV0dXJuICh1aW50MzJfdCkocG93ZXJfbW9kZSB8IChwb3dlcl9tb2RlID4+IChPUEFNUF9DU1JfT1BBTFBNX1BvcykpKTsKIH0KQEAgLTcwNyw3ICs3MDcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX09QQU1QX0dldENhbGlicmF0aW9uU2VsZWN0aW9uKE9QQU1QX1R5cGVEZWYgKk9QQU1QeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgQ2FsaWJyYXRpb25TZWxlY3Rpb24gPSAodWludDMyX3QpKFJFQURfQklUKE9QQU1QeC0+Q1NSLCBPUEFNUF9DU1JfQ0FMU0VMKSk7CisgIHVpbnQzMl90IENhbGlicmF0aW9uU2VsZWN0aW9uID0gKHVpbnQzMl90KShSRUFEX0JJVChPUEFNUHgtPkNTUiwgT1BBTVBfQ1NSX0NBTFNFTCkpOwogCiAgIHJldHVybiAoQ2FsaWJyYXRpb25TZWxlY3Rpb24gfAogICAgICAgICAgICgoKENhbGlicmF0aW9uU2VsZWN0aW9uICYgT1BBTVBfQ1NSX0NBTFNFTCkgPT0gMFVMKSA/IE9QQU1QX09UUl9UUklNT0ZGU0VUTiA6IE9QQU1QX09UUl9UUklNT0ZGU0VUUCkpOwpAQCAtNzQ3LDcgKzc0Nyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9PUEFNUF9TZXRUcmltbWluZ1ZhbHVlKE9QQU1QX1R5cGVEZWYqIE9QQU1QeCwgdWludDMyX3QgUG93ZXJNb2RlLCB1aW50MzJfdCBUcmFuc2lzdG9yc0RpZmZQYWlyLCB1aW50MzJfdCBUcmltbWluZ1ZhbHVlKQogewotICByZWdpc3RlciB1aW50MzJfdCAqcHJlZyA9IF9fT1BBTVBfUFRSX1JFR19PRkZTRVQoT1BBTVB4LT5PVFIsIChQb3dlck1vZGUgJiBPUEFNUF9QT1dFUk1PREVfT1RSX1JFR09GRlNFVF9NQVNLKSk7CisgIHVpbnQzMl90ICpwcmVnID0gX19PUEFNUF9QVFJfUkVHX09GRlNFVChPUEFNUHgtPk9UUiwgKFBvd2VyTW9kZSAmIE9QQU1QX1BPV0VSTU9ERV9PVFJfUkVHT0ZGU0VUX01BU0spKTsKIAogICAvKiBTZXQgYml0cyB3aXRoIHBvc2l0aW9uIGluIHJlZ2lzdGVyIGRlcGVuZGluZyBvbiBwYXJhbWV0ZXIgICAgICAgICAgICAgICAgKi8KICAgLyogIlRyYW5zaXN0b3JzRGlmZlBhaXIiLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC03NzcsNyArNzc3LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9PUEFNUF9HZXRUcmltbWluZ1ZhbHVlKE9QQU1QX1R5cGVEZWYqIE9QQU1QeCwgdWludDMyX3QgUG93ZXJNb2RlLCB1aW50MzJfdCBUcmFuc2lzdG9yc0RpZmZQYWlyKQogewotICByZWdpc3RlciBjb25zdCB1aW50MzJfdCAqcHJlZyA9IF9fT1BBTVBfUFRSX1JFR19PRkZTRVQoT1BBTVB4LT5PVFIsIChQb3dlck1vZGUgJiBPUEFNUF9QT1dFUk1PREVfT1RSX1JFR09GRlNFVF9NQVNLKSk7CisgIGNvbnN0IHVpbnQzMl90ICpwcmVnID0gX19PUEFNUF9QVFJfUkVHX09GRlNFVChPUEFNUHgtPk9UUiwgKFBvd2VyTW9kZSAmIE9QQU1QX1BPV0VSTU9ERV9PVFJfUkVHT0ZGU0VUX01BU0spKTsKIAogICAvKiBSZXRyaWV2ZSBiaXRzIHdpdGggcG9zaXRpb24gaW4gcmVnaXN0ZXIgZGVwZW5kaW5nIG9uIHBhcmFtZXRlciAgICAgICAgICAgKi8KICAgLyogIlRyYW5zaXN0b3JzRGlmZlBhaXIiLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2xsX3JjYy5oIGIvSW5jL3N0bTMybDR4eF9sbF9yY2MuaAppbmRleCA2NTVmYWJiLi41Zjk5OGJhIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2xsX3JjYy5oCisrKyBiL0luYy9zdG0zMmw0eHhfbGxfcmNjLmgKQEAgLTEyNjgsNyArMTI2OCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzE2ICgqKQogICAqCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCi0gICogQHBhcmFtICBfX1BMTE5fXyBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBfX1BMTE5fXyBCZXR3ZWVuIDggYW5kIDg2IG9yIDEyNyBkZXBlbmRpbmcgb24gZGV2aWNlcwogICAqIEBwYXJhbSAgX19QTExSX18gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMUl9ESVZfMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExSX0RJVl80CkBAIC0xMzA1LDcgKzEzMDUsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl8xNiAoKikKICAgKgogICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgotICAqIEBwYXJhbSAgX19QTExOX18gQmV0d2VlbiA4IGFuZCA4NgorICAqIEBwYXJhbSAgX19QTExOX18gQmV0d2VlbiA4IGFuZCA4NiBvciAxMjcgZGVwZW5kaW5nIG9uIGRldmljZXMKICAgKiBAcGFyYW0gIF9fUExMUF9fIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFBfRElWXzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMUF9ESVZfMwpAQCAtMTM5Myw3ICsxMzkzLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfMTYgKCopCiAgICoKICAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KLSAgKiBAcGFyYW0gIF9fUExMTl9fIEJldHdlZW4gOCBhbmQgODYKKyAgKiBAcGFyYW0gIF9fUExMTl9fIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICogQHBhcmFtICBfX1BMTFFfXyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExRX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFFfRElWXzQKQEAgLTE0MjgsNyArMTQyOCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFNX0RJVl8xNAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExTQUkxTV9ESVZfMTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMU1fRElWXzE2Ci0gICogQHBhcmFtICBfX1BMTFNBSTFOX18gQmV0d2VlbiA4IGFuZCA4NgorICAqIEBwYXJhbSAgX19QTExTQUkxTl9fIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICogQHBhcmFtICBfX1BMTFNBSTFQX18gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMVBfRElWXzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMVBfRElWXzMKQEAgLTE0ODEsNyArMTQ4MSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl84Ci0gICogQHBhcmFtICBfX1BMTFNBSTFOX18gQmV0d2VlbiA4IGFuZCA4NgorICAqIEBwYXJhbSAgX19QTExTQUkxTl9fIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICogQHBhcmFtICBfX1BMTFNBSTFQX18gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMVBfRElWXzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMVBfRElWXzMKQEAgLTE1NjksNyArMTU2OSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFNX0RJVl8xNAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExTQUkxTV9ESVZfMTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMU1fRElWXzE2Ci0gICogQHBhcmFtICBfX1BMTFNBSTFOX18gQmV0d2VlbiA4IGFuZCA4NgorICAqIEBwYXJhbSAgX19QTExTQUkxTl9fIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICogQHBhcmFtICBfX1BMTFNBSTFRX18gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMVFfRElWXzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMVFfRElWXzQKQEAgLTE2MzMsNyArMTYzMyw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFNX0RJVl8xNAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExTQUkxTV9ESVZfMTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMU1fRElWXzE2Ci0gICogQHBhcmFtICBfX1BMTFNBSTFOX18gQmV0d2VlbiA4IGFuZCA4NgorICAqIEBwYXJhbSAgX19QTExTQUkxTl9fIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICogQHBhcmFtICBfX1BMTFNBSTFSX18gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMVJfRElWXzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMVJfRElWXzQKQEAgLTE2OTgsNyArMTY5OCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTJNX0RJVl8xNAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExTQUkyTV9ESVZfMTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMk1fRElWXzE2Ci0gICogQHBhcmFtICBfX1BMTFNBSTJOX18gQmV0d2VlbiA4IGFuZCA4NgorICAqIEBwYXJhbSAgX19QTExTQUkyTl9fIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICogQHBhcmFtICBfX1BMTFNBSTJQX18gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMlBfRElWXzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMlBfRElWXzMKQEAgLTE3NTEsNyArMTc1MSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl84Ci0gICogQHBhcmFtICBfX1BMTFNBSTJOX18gQmV0d2VlbiA4IGFuZCA4NgorICAqIEBwYXJhbSAgX19QTExTQUkyTl9fIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICogQHBhcmFtICBfX1BMTFNBSTJQX18gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMlBfRElWXzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMlBfRElWXzMKQEAgLTE4MzksNyArMTgzOSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTJNX0RJVl8xNAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExTQUkyTV9ESVZfMTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMk1fRElWXzE2Ci0gICogQHBhcmFtICBfX1BMTFNBSTJOX18gQmV0d2VlbiA4IGFuZCA4NgorICAqIEBwYXJhbSAgX19QTExTQUkyTl9fIEJldHdlZW4gOCBhbmQgMTI3CiAgICogQHBhcmFtICBfX1BMTFNBSTJSX18gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMlJfRElWXzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMlJfRElWXzQKQEAgLTE5MDcsNyArMTkwNyw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTJNX0RJVl8xNAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExTQUkyTV9ESVZfMTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMk1fRElWXzE2Ci0gICogQHBhcmFtICBfX1BMTFNBSTJOX18gQmV0d2VlbiA4IGFuZCA4NgorICAqIEBwYXJhbSAgX19QTExTQUkyTl9fIEJldHdlZW4gOCBhbmQgMTI3CiAgICogQHBhcmFtICBfX1BMTFNBSTJRX18gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMlFfRElWXzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMlFfRElWXzQKQEAgLTIxODEsMTAgKzIxODEsMTEgQEAKIC8qKgogICAqIEBicmllZiAgU2V0IEhTSSBDYWxpYnJhdGlvbiB0cmltbWluZwogICAqIEBub3RlIHVzZXItcHJvZ3JhbW1hYmxlIHRyaW1taW5nIHZhbHVlIHRoYXQgaXMgYWRkZWQgdG8gdGhlIEhTSUNBTAotICAqIEBub3RlIERlZmF1bHQgdmFsdWUgaXMgMTYsIHdoaWNoLCB3aGVuIGFkZGVkIHRvIHRoZSBIU0lDQUwgdmFsdWUsCi0gICogICAgICAgc2hvdWxkIHRyaW0gdGhlIEhTSSB0byAxNiBNSHogKy8tIDEgJQorICAqIEBub3RlIERlZmF1bHQgdmFsdWUgaXMgMTYgb24gU1RNMzJMNDd4L1NUTTMyTDQ4eCBvciA2NCBvbiBvdGhlciBkZXZpY2VzLAorICAqICAgICAgIHdoaWNoLCB3aGVuIGFkZGVkIHRvIHRoZSBIU0lDQUwgdmFsdWUsIHNob3VsZCB0cmltIHRoZSBIU0kgdG8gMTYgTUh6ICsvLSAxICUKICAgKiBAcm10b2xsIElDU0NSICAgICAgICBIU0lUUklNICAgICAgIExMX1JDQ19IU0lfU2V0Q2FsaWJUcmltbWluZwotICAqIEBwYXJhbSAgVmFsdWUgQmV0d2VlbiBNaW5fRGF0YSA9IDAgYW5kIE1heF9EYXRhID0gMzEKKyAgKiBAcGFyYW0gIFZhbHVlIEJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDMxIG9uIFNUTTMyTDQ3eC9TVE0zMkw0OHggb3IKKyAgKiAgICAgICAgICAgICAgIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDEyNyBvbiBvdGhlciBkZXZpY2VzCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SQ0NfSFNJX1NldENhbGliVHJpbW1pbmcodWludDMyX3QgVmFsdWUpCkBAIC0yMTk1LDcgKzIxOTYsOCBAQAogLyoqCiAgICogQGJyaWVmICBHZXQgSFNJIENhbGlicmF0aW9uIHRyaW1taW5nCiAgICogQHJtdG9sbCBJQ1NDUiAgICAgICAgSFNJVFJJTSAgICAgICBMTF9SQ0NfSFNJX0dldENhbGliVHJpbW1pbmcKLSAgKiBAcmV0dmFsIEJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDMxCisgICogQHJldHZhbCBCZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSAzMSBvbiBTVE0zMkw0N3gvU1RNMzJMNDh4IG9yCisgICogICAgICAgICBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSAxMjcgb24gb3RoZXIgZGV2aWNlcwogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JDQ19IU0lfR2V0Q2FsaWJUcmltbWluZyh2b2lkKQogewpAQCAtMzc4Nyw3ICszNzg5LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfMTYgKCopCiAgICoKICAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KLSAgKiBAcGFyYW0gIFBMTE4gQmV0d2VlbiA4IGFuZCA4NgorICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2IG9yIDEyNyBkZXBlbmRpbmcgb24gZGV2aWNlcwogICAqIEBwYXJhbSAgUExMUiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExSX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFJfRElWXzQKQEAgLTM4MzcsNyArMzgzOSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzE2ICgqKQogICAqCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCi0gICogQHBhcmFtICBQTExOIEJldHdlZW4gOCBhbmQgODYKKyAgKiBAcGFyYW0gIFBMTE4gQmV0d2VlbiA4IGFuZCA4NiBvciAxMjcgZGVwZW5kaW5nIG9uIGRldmljZXMKICAgKiBAcGFyYW0gIFBMTFAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMUF9ESVZfMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8zCkBAIC0zOTQ5LDcgKzM5NTEsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl8xNiAoKikKICAgKgogICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgotICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBQTExOIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICogQHBhcmFtICBQTExRIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFFfRElWXzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMUV9ESVZfNApAQCAtMzk5NSw3ICszOTk3LDcgQEAKIC8qKgogICAqIEBicmllZiAgR2V0IE1haW4gUExMIG11bHRpcGxpY2F0aW9uIGZhY3RvciBmb3IgVkNPCiAgICogQHJtdG9sbCBQTExDRkdSICAgICAgUExMTiAgICAgICAgICBMTF9SQ0NfUExMX0dldE4KLSAgKiBAcmV0dmFsIEJldHdlZW4gOCBhbmQgODYKKyAgKiBAcmV0dmFsIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUkNDX1BMTF9HZXROKHZvaWQpCiB7CkBAIC00MjYzLDcgKzQyNjUsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExTQUkxTV9ESVZfMTQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMU1fRElWXzE1CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFNX0RJVl8xNgotICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBQTExOIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICogQHBhcmFtICBQTExRIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFRX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFRX0RJVl80CkBAIC00MzAyLDcgKzQzMDQsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl82CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfOAotICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBQTExOIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICogQHBhcmFtICBQTExRIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFRX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFRX0RJVl80CkBAIC00MzQ5LDcgKzQzNTEsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExTQUkxTV9ESVZfMTQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMU1fRElWXzE1CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFNX0RJVl8xNgotICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBQTExOIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICogQHBhcmFtICBQTExQIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFQX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFQX0RJVl8zCkBAIC00NDE0LDcgKzQ0MTYsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl82CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfOAotICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBQTExOIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICogQHBhcmFtICBQTExQIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFQX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFQX0RJVl8zCkBAIC00NTI0LDcgKzQ1MjYsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExTQUkxTV9ESVZfMTQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMU1fRElWXzE1CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFNX0RJVl8xNgotICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBQTExOIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICogQHBhcmFtICBQTExSIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFSX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFSX0RJVl80CkBAIC00NTYzLDcgKzQ1NjUsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl82CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfOAotICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBQTExOIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICogQHBhcmFtICBQTExSIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFSX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFSX0RJVl80CkBAIC00NTgxLDcgKzQ1ODMsNyBAQAogLyoqCiAgICogQGJyaWVmICBHZXQgU0FJMVBMTCBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgZm9yIFZDTwogICAqIEBybXRvbGwgUExMU0FJMUNGR1IgIFBMTFNBSTFOICAgICAgTExfUkNDX1BMTFNBSTFfR2V0TgotICAqIEByZXR2YWwgQmV0d2VlbiA4IGFuZCA4NgorICAqIEByZXR2YWwgQmV0d2VlbiA4IGFuZCA4NiBvciAxMjcgZGVwZW5kaW5nIG9uIGRldmljZXMKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SQ0NfUExMU0FJMV9HZXROKHZvaWQpCiB7CkBAIC00ODQwLDcgKzQ4NDIsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExTQUkyTV9ESVZfMTQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMk1fRElWXzE1CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTJNX0RJVl8xNgotICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBQTExOIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICogQHBhcmFtICBQTExQIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTJQX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTJQX0RJVl8zCkBAIC00OTA1LDcgKzQ5MDcsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl82CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfOAotICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBQTExOIEJldHdlZW4gOCBhbmQgODYgb3IgMTI3IGRlcGVuZGluZyBvbiBkZXZpY2VzCiAgICogQHBhcmFtICBQTExQIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTJQX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTJQX0RJVl8zCkBAIC01MDE0LDcgKzUwMTYsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExTQUkyTV9ESVZfMTQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMk1fRElWXzE1CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTJNX0RJVl8xNgotICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBQTExOIEJldHdlZW4gOCBhbmQgMTI3CiAgICogQHBhcmFtICBQTExRIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTJRX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTJRX0RJVl80CkBAIC01MDYzLDcgKzUwNjUsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExTQUkyTV9ESVZfMTQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMU0FJMk1fRElWXzE1CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTJNX0RJVl8xNgotICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBQTExOIEJldHdlZW4gOCBhbmQgMTI3CiAgICogQHBhcmFtICBQTExSIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTJSX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTJSX0RJVl80CkBAIC01MTI2LDcgKzUxMjgsNyBAQAogLyoqCiAgICogQGJyaWVmICBHZXQgU0FJMlBMTCBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgZm9yIFZDTwogICAqIEBybXRvbGwgUExMU0FJMkNGR1IgIFBMTFNBSTJOICAgICAgTExfUkNDX1BMTFNBSTJfR2V0TgotICAqIEByZXR2YWwgQmV0d2VlbiA4IGFuZCA4NgorICAqIEByZXR2YWwgQmV0d2VlbiA4IGFuZCA4NiBvciAxMjcgZGVwZW5kaW5nIG9uIGRldmljZXMKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SQ0NfUExMU0FJMl9HZXROKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2xsX3J0Yy5oIGIvSW5jL3N0bTMybDR4eF9sbF9ydGMuaAppbmRleCBiZWUyNWExLi40NzAwOWIyIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2xsX3J0Yy5oCisrKyBiL0luYy9zdG0zMmw0eHhfbGxfcnRjLmgKQEAgLTE2NjgsNyArMTY2OCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfVElNRV9Db25maWcoUlRDX1R5cGVEZWYgKlJUQ3gsIHVpbnQzMl90IEZvcm1hdDEyXzI0LCB1aW50MzJfdCBIb3VycywgdWludDMyX3QgTWludXRlcywgdWludDMyX3QgU2Vjb25kcykKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgdGVtcCA9IDBVOworICB1aW50MzJfdCB0ZW1wID0gMFU7CiAKICAgdGVtcCA9IEZvcm1hdDEyXzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcCiAgICAgICAgICAoKChIb3VycyAmIDB4RjBVKSA8PCAoUlRDX1RSX0hUX1BvcyAtIDRVKSkgfCAoKEhvdXJzICYgMHgwRlUpIDw8IFJUQ19UUl9IVV9Qb3MpKSAgICAgfCBcCkBAIC0xNjk2LDcgKzE2OTYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19USU1FX0dldChSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgdGVtcCA9IDBVOworICB1aW50MzJfdCB0ZW1wID0gMFU7CiAKICAgdGVtcCA9IFJFQURfQklUKFJUQ3gtPlRSLCAoUlRDX1RSX0hUIHwgUlRDX1RSX0hVIHwgUlRDX1RSX01OVCB8IFJUQ19UUl9NTlUgfCBSVENfVFJfU1QgfCBSVENfVFJfU1UpKTsKICAgcmV0dXJuICh1aW50MzJfdCkoKCgoKCh0ZW1wICYgUlRDX1RSX0hUKSA+PiBSVENfVFJfSFRfUG9zKSA8PCA0VSkgfCAoKHRlbXAgJiBSVENfVFJfSFUpID4+IFJUQ19UUl9IVV9Qb3MpKSA8PCBSVENfT0ZGU0VUX0hPVVIpIHwgIFwKQEAgLTE5OTksNyArMTk5OSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfREFURV9Db25maWcoUlRDX1R5cGVEZWYgKlJUQ3gsIHVpbnQzMl90IFdlZWtEYXksIHVpbnQzMl90IERheSwgdWludDMyX3QgTW9udGgsIHVpbnQzMl90IFllYXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRlbXAgPSAwVTsKKyAgdWludDMyX3QgdGVtcCA9IDBVOwogCiAgIHRlbXAgPSAoV2Vla0RheSA8PCBSVENfRFJfV0RVX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXAogICAgICAgICAgKCgoWWVhciAmIDB4RjBVKSA8PCAoUlRDX0RSX1lUX1BvcyAtIDRVKSkgfCAoKFllYXIgJiAweDBGVSkgPDwgUlRDX0RSX1lVX1BvcykpICAgfCBcCkBAIC0yMDI3LDcgKzIwMjcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19EQVRFX0dldChSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgdGVtcCA9IDBVOworICB1aW50MzJfdCB0ZW1wID0gMFU7CiAKICAgdGVtcCA9IFJFQURfQklUKFJUQ3gtPkRSLCAoUlRDX0RSX1dEVSB8IFJUQ19EUl9NVCB8IFJUQ19EUl9NVSB8IFJUQ19EUl9EVCB8IFJUQ19EUl9EVSB8IFJUQ19EUl9ZVCB8IFJUQ19EUl9ZVSkpOwogICByZXR1cm4gKHVpbnQzMl90KSgoKCh0ZW1wICYgUlRDX0RSX1dEVSkgPj4gUlRDX0RSX1dEVV9Qb3MpIDw8IFJUQ19PRkZTRVRfV0VFS0RBWSkgfCBcCkBAIC0yMzI3LDcgKzIzMjcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUlRDX0FMTUFfQ29uZmlnVGltZShSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgRm9ybWF0MTJfMjQsIHVpbnQzMl90IEhvdXJzLCB1aW50MzJfdCBNaW51dGVzLCB1aW50MzJfdCBTZWNvbmRzKQogewotICByZWdpc3RlciB1aW50MzJfdCB0ZW1wID0gMFU7CisgIHVpbnQzMl90IHRlbXAgPSAwVTsKIAogICB0ZW1wID0gRm9ybWF0MTJfMjQgfCAoKChIb3VycyAmIDB4RjBVKSA8PCAoUlRDX0FMUk1BUl9IVF9Qb3MgLSA0VSkpIHwgKChIb3VycyAmIDB4MEZVKSA8PCBSVENfQUxSTUFSX0hVX1BvcykpICAgIHwgXAogICAgICAgICAgKCgoTWludXRlcyAmIDB4RjBVKSA8PCAoUlRDX0FMUk1BUl9NTlRfUG9zIC0gNFUpKSB8ICgoTWludXRlcyAmIDB4MEZVKSA8PCBSVENfQUxSTUFSX01OVV9Qb3MpKSB8IFwKQEAgLTI3NTIsNyArMjc1Miw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfQUxNQl9Db25maWdUaW1lKFJUQ19UeXBlRGVmICpSVEN4LCB1aW50MzJfdCBGb3JtYXQxMl8yNCwgdWludDMyX3QgSG91cnMsIHVpbnQzMl90IE1pbnV0ZXMsIHVpbnQzMl90IFNlY29uZHMpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRlbXAgPSAwVTsKKyAgdWludDMyX3QgdGVtcCA9IDBVOwogCiAgIHRlbXAgPSBGb3JtYXQxMl8yNCB8ICgoKEhvdXJzICYgMHhGMFUpIDw8IChSVENfQUxSTUJSX0hUX1BvcyAtIDRVKSkgfCAoKEhvdXJzICYgMHgwRlUpIDw8IFJUQ19BTFJNQlJfSFVfUG9zKSkgICAgfCBcCiAgICAgICAgICAoKChNaW51dGVzICYgMHhGMFUpIDw8IChSVENfQUxSTUJSX01OVF9Qb3MgLSA0VSkpIHwgKChNaW51dGVzICYgMHgwRlUpIDw8IFJUQ19BTFJNQlJfTU5VX1BvcykpIHwgXApAQCAtMzczMCw3ICszNzMwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1JUQ19CS1BfU2V0UmVnaXN0ZXIoVEFNUF9UeXBlRGVmICpUQU1QeCwgdWludDMyX3QgQmFja3VwUmVnaXN0ZXIsIHVpbnQzMl90IERhdGEpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRtcCA9IDBVOworICB1aW50MzJfdCB0bXAgPSAwVTsKIAogICB0bXAgPSAodWludDMyX3QpKCYoVEFNUHgtPkJLUDBSKSk7CiAgIHRtcCArPSAoQmFja3VwUmVnaXN0ZXIgKiA0VSk7CkBAIC0zNzUzLDcgKzM3NTMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19CS1BfR2V0UmVnaXN0ZXIoVEFNUF9UeXBlRGVmICpUQU1QeCwgdWludDMyX3QgQmFja3VwUmVnaXN0ZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRtcCA9IDBVOworICB1aW50MzJfdCB0bXAgPSAwVTsKIAogICB0bXAgPSAodWludDMyX3QpKCYoVEFNUHgtPkJLUDBSKSk7CiAgIHRtcCArPSAoQmFja3VwUmVnaXN0ZXIgKiA0VSk7CkBAIC00ODM4LDcgKzQ4MzgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUlRDX0JBS19TZXRSZWdpc3RlcihSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgQmFja3VwUmVnaXN0ZXIsIHVpbnQzMl90IERhdGEpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRtcCA9IDBVOworICB1aW50MzJfdCB0bXAgPSAwVTsKIAogICB0bXAgPSAodWludDMyX3QpKCYoUlRDeC0+QktQMFIpKTsKICAgdG1wICs9IChCYWNrdXBSZWdpc3RlciAqIDRVKTsKQEAgLTQ4ODgsNyArNDg4OCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0JBS19HZXRSZWdpc3RlcihSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgQmFja3VwUmVnaXN0ZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRtcCA9IDBVOworICB1aW50MzJfdCB0bXAgPSAwVTsKIAogICB0bXAgPSAodWludDMyX3QpKCYoUlRDeC0+QktQMFIpKTsKICAgdG1wICs9IChCYWNrdXBSZWdpc3RlciAqIDRVKTsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfbGxfc2RtbWMuaCBiL0luYy9zdG0zMmw0eHhfbGxfc2RtbWMuaAppbmRleCBkZDgxZTU2Li45ZmU4MWZlIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2xsX3NkbW1jLmgKKysrIGIvSW5jL3N0bTMybDR4eF9sbF9zZG1tYy5oCkBAIC00MDEsMTAgKzQwMSwxMCBAQAogI2RlZmluZSBTRE1NQ19TUEVFRF9NT0RFX0REUiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDRVKQogCiAjZGVmaW5lIElTX1NETU1DX1NQRUVEX01PREUoTU9ERSkgKCgoTU9ERSkgPT0gU0RNTUNfU1BFRURfTU9ERV9BVVRPKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gU0RNTUNfU1BFRURfTU9ERV9ERUZBVUxUKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gU0RNTUNfU1BFRURfTU9ERV9ISUdIKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gU0RNTUNfU1BFRURfTU9ERV9VTFRSQSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IFNETU1DX1NQRUVEX01PREVfRERSKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBTRE1NQ19TUEVFRF9NT0RFX0RFRkFVTFQpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBTRE1NQ19TUEVFRF9NT0RFX0hJR0gpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBTRE1NQ19TUEVFRF9NT0RFX1VMVFJBKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gU0RNTUNfU1BFRURfTU9ERV9ERFIpKQogCiAvKioKICAgKiBAfQpAQCAtMTIzNiw3ICsxMjM2LDcgQEAKIHVpbnQzMl90IFNETU1DX0NtZFNERXJhc2VTdGFydEFkZChTRE1NQ19UeXBlRGVmICpTRE1NQ3gsIHVpbnQzMl90IFN0YXJ0QWRkKTsKIHVpbnQzMl90IFNETU1DX0NtZEVyYXNlRW5kQWRkKFNETU1DX1R5cGVEZWYgKlNETU1DeCwgdWludDMyX3QgRW5kQWRkKTsKIHVpbnQzMl90IFNETU1DX0NtZFNERXJhc2VFbmRBZGQoU0RNTUNfVHlwZURlZiAqU0RNTUN4LCB1aW50MzJfdCBFbmRBZGQpOwotdWludDMyX3QgU0RNTUNfQ21kRXJhc2UoU0RNTUNfVHlwZURlZiAqU0RNTUN4KTsKK3VpbnQzMl90IFNETU1DX0NtZEVyYXNlKFNETU1DX1R5cGVEZWYgKlNETU1DeCwgdWludDMyX3QgRXJhc2VUeXBlKTsKIHVpbnQzMl90IFNETU1DX0NtZFN0b3BUcmFuc2ZlcihTRE1NQ19UeXBlRGVmICpTRE1NQ3gpOwogdWludDMyX3QgU0RNTUNfQ21kU2VsRGVzZWwoU0RNTUNfVHlwZURlZiAqU0RNTUN4LCB1aW50NjRfdCBBZGRyKTsKIHVpbnQzMl90IFNETU1DX0NtZEdvSWRsZVN0YXRlKFNETU1DX1R5cGVEZWYgKlNETU1DeCk7CkBAIC0xMjQ4LDYgKzEyNDgsNyBAQAogdWludDMyX3QgU0RNTUNfQ21kU2VuZENJRChTRE1NQ19UeXBlRGVmICpTRE1NQ3gpOwogdWludDMyX3QgU0RNTUNfQ21kU2VuZENTRChTRE1NQ19UeXBlRGVmICpTRE1NQ3gsIHVpbnQzMl90IEFyZ3VtZW50KTsKIHVpbnQzMl90IFNETU1DX0NtZFNldFJlbEFkZChTRE1NQ19UeXBlRGVmICpTRE1NQ3gsIHVpbnQxNl90ICpwUkNBKTsKK3VpbnQzMl90IFNETU1DX0NtZFNldFJlbEFkZE1tYyhTRE1NQ19UeXBlRGVmICpTRE1NQ3gsIHVpbnQxNl90IFJDQSk7CiB1aW50MzJfdCBTRE1NQ19DbWRTZW5kU3RhdHVzKFNETU1DX1R5cGVEZWYgKlNETU1DeCwgdWludDMyX3QgQXJndW1lbnQpOwogdWludDMyX3QgU0RNTUNfQ21kU3RhdHVzUmVnaXN0ZXIoU0RNTUNfVHlwZURlZiAqU0RNTUN4KTsKICNpZiBkZWZpbmVkKFNUTTMyTDRQNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRRNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRSNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRSN3h4KSB8fCBkZWZpbmVkKFNUTTMyTDRSOXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRTNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRTN3h4KSB8fCBkZWZpbmVkKFNUTTMyTDRTOXh4KQpAQCAtMTI1Nyw2ICsxMjU4LDEzIEBACiB1aW50MzJfdCBTRE1NQ19DbWRTd2l0Y2goU0RNTUNfVHlwZURlZiAqU0RNTUN4LCB1aW50MzJfdCBBcmd1bWVudCk7CiB1aW50MzJfdCBTRE1NQ19DbWRTZW5kRVhUQ1NEKFNETU1DX1R5cGVEZWYgKlNETU1DeCwgdWludDMyX3QgQXJndW1lbnQpOwogCisvKiBTRE1NQyBSZXNwb25zZXMgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KK3VpbnQzMl90IFNETU1DX0dldENtZFJlc3AxKFNETU1DX1R5cGVEZWYgKlNETU1DeCwgdWludDhfdCBTRF9DTUQsIHVpbnQzMl90IFRpbWVvdXQpOwordWludDMyX3QgU0RNTUNfR2V0Q21kUmVzcDIoU0RNTUNfVHlwZURlZiAqU0RNTUN4KTsKK3VpbnQzMl90IFNETU1DX0dldENtZFJlc3AzKFNETU1DX1R5cGVEZWYgKlNETU1DeCk7Cit1aW50MzJfdCBTRE1NQ19HZXRDbWRSZXNwNyhTRE1NQ19UeXBlRGVmICpTRE1NQ3gpOwordWludDMyX3QgU0RNTUNfR2V0Q21kUmVzcDYoU0RNTUNfVHlwZURlZiAqU0RNTUN4LCB1aW50OF90IFNEX0NNRCwgdWludDE2X3QgKnBSQ0EpOworCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9sbF9zcGkuaCBiL0luYy9zdG0zMmw0eHhfbGxfc3BpLmgKaW5kZXggMmZhMDNiOC4uMWY5NDU3OCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9sbF9zcGkuaAorKysgYi9JbmMvc3RtMzJsNHh4X2xsX3NwaS5oCkBAIC0yNjYsOCArMjY2LDggQEAKIC8qKiBAZGVmZ3JvdXAgU1BJX0xMX0VDX1JYX0ZJRk9fVEggUlggRklGTyBUaHJlc2hvbGQKICAgKiBAewogICAqLwotI2RlZmluZSBMTF9TUElfUlhfRklGT19USF9IQUxGICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgLyohPCBSWE5FIGV2ZW50IGlzIGdlbmVyYXRlZCBpZiBGSUZPIGxldmVsIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVlbCB0byAxLzIgKDE2LWJpdCkgKi8KLSNkZWZpbmUgTExfU1BJX1JYX0ZJRk9fVEhfUVVBUlRFUiAgICAgICAgICAoU1BJX0NSMl9GUlhUSCkgICAgICAgICAgIC8qITwgUlhORSBldmVudCBpcyBnZW5lcmF0ZWQgaWYgRklGTyBsZXZlbCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1ZWwgdG8gMS80ICg4LWJpdCkgICovCisjZGVmaW5lIExMX1NQSV9SWF9GSUZPX1RIX0hBTEYgICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAvKiE8IFJYTkUgZXZlbnQgaXMgZ2VuZXJhdGVkIGlmIEZJRk8gbGV2ZWwgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEvMiAoMTYtYml0KSAqLworI2RlZmluZSBMTF9TUElfUlhfRklGT19USF9RVUFSVEVSICAgICAgICAgIChTUElfQ1IyX0ZSWFRIKSAgICAgICAgICAgLyohPCBSWE5FIGV2ZW50IGlzIGdlbmVyYXRlZCBpZiBGSUZPIGxldmVsIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLzQgKDgtYml0KSAgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC04NDgsOCArODQ4LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9TUElfR2V0TlNTTW9kZShTUElfVHlwZURlZiAqU1BJeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgU3NtICA9IChSRUFEX0JJVChTUEl4LT5DUjEsIFNQSV9DUjFfU1NNKSk7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IFNzb2UgPSAoUkVBRF9CSVQoU1BJeC0+Q1IyLCAgU1BJX0NSMl9TU09FKSA8PCAxNlUpOworICB1aW50MzJfdCBTc20gID0gKFJFQURfQklUKFNQSXgtPkNSMSwgU1BJX0NSMV9TU00pKTsKKyAgdWludDMyX3QgU3NvZSA9IChSRUFEX0JJVChTUEl4LT5DUjIsICBTUElfQ1IyX1NTT0UpIDw8IDE2VSk7CiAgIHJldHVybiAoU3NtIHwgU3NvZSk7CiB9CiAKQEAgLTEzMTQsNyArMTMxNCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfU1BJX0RNQV9HZXRSZWdBZGRyKFNQSV9UeXBlRGVmICpTUEl4KQogewotICByZXR1cm4gKHVpbnQzMl90KSAmIChTUEl4LT5EUik7CisgIHJldHVybiAodWludDMyX3QpICYoU1BJeC0+RFIpOwogfQogCiAvKioKQEAgLTEzNjEsNyArMTM2MSw3IEBACiAgICpzcGlkciA9IFR4RGF0YTsKICNlbHNlCiAgICooKF9fSU8gdWludDhfdCAqKSZTUEl4LT5EUikgPSBUeERhdGE7Ci0jZW5kaWYKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLwogfQogCiAvKioKQEAgLTEzNzgsNyArMTM3OCw3IEBACiAgICpzcGlkciA9IFR4RGF0YTsKICNlbHNlCiAgIFNQSXgtPkRSID0gVHhEYXRhOwotI2VuZGlmCisjZW5kaWYgLyogX19HTlVDX18gKi8KIH0KIAogLyoqCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2xsX3RpbS5oIGIvSW5jL3N0bTMybDR4eF9sbF90aW0uaAppbmRleCA5MDc4ODEyLi4wYjliY2UyIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2xsX3RpbS5oCisrKyBiL0luYy9zdG0zMmw0eHhfbGxfdGltLmgKQEAgLTI0NiwxMyArMjQ2LDE0IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9USU1fU2V0Q2xvY2tEaXZpc2lvbigpLiovCiAKLSAgdWludDhfdCBSZXBldGl0aW9uQ291bnRlcjsgIC8qITwgU3BlY2lmaWVzIHRoZSByZXBldGl0aW9uIGNvdW50ZXIgdmFsdWUuIEVhY2ggdGltZSB0aGUgUkNSIGRvd25jb3VudGVyCisgIHVpbnQzMl90IFJlcGV0aXRpb25Db3VudGVyOyAgLyohPCBTcGVjaWZpZXMgdGhlIHJlcGV0aXRpb24gY291bnRlciB2YWx1ZS4gRWFjaCB0aW1lIHRoZSBSQ1IgZG93bmNvdW50ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY2hlcyB6ZXJvLCBhbiB1cGRhdGUgZXZlbnQgaXMgZ2VuZXJhdGVkIGFuZCBjb3VudGluZyByZXN0YXJ0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBSQ1IgdmFsdWUgKE4pLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1lYW5zIGluIFBXTSBtb2RlIHRoYXQgKE4rMSkgY29ycmVzcG9uZHMgdG86CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gdGhlIG51bWJlciBvZiBQV00gcGVyaW9kcyBpbiBlZGdlLWFsaWduZWQgbW9kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHRoZSBudW1iZXIgb2YgaGFsZiBQV00gcGVyaW9kIGluIGNlbnRlci1hbGlnbmVkIG1vZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDB4MDAgYW5kIDB4RkYuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQIHRpbWVyczogdGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweEZGLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZHZhbmNlZCB0aW1lcnM6IHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAwMCBhbmQgTWF4X0RhdGEgPSAweEZGRkYuCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9USU1fU2V0UmVwZXRpdGlvbkNvdW50ZXIoKS4qLwogfSBMTF9USU1fSW5pdFR5cGVEZWY7CkBAIC02MDEsOCArNjAyLDggQEAKICAgKi8KICNkZWZpbmUgTExfVElNX0NPVU5URVJNT0RFX1VQICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgLyohPENvdW50ZXIgdXNlZCBhcyB1cGNvdW50ZXIgKi8KICNkZWZpbmUgTExfVElNX0NPVU5URVJNT0RFX0RPV04gICAgICAgICAgICAgICAgVElNX0NSMV9ESVIgICAgICAgICAgLyohPCBDb3VudGVyIHVzZWQgYXMgZG93bmNvdW50ZXIgKi8KLSNkZWZpbmUgTExfVElNX0NPVU5URVJNT0RFX0NFTlRFUl9VUCAgICAgICAgICAgVElNX0NSMV9DTVNfMCAgICAgICAgLyohPCBUaGUgY291bnRlciBjb3VudHMgdXAgYW5kIGRvd24gYWx0ZXJuYXRpdmVseS4gT3V0cHV0IGNvbXBhcmUgaW50ZXJydXB0IGZsYWdzIG9mIG91dHB1dCBjaGFubmVscyAgYXJlIHNldCBvbmx5IHdoZW4gdGhlIGNvdW50ZXIgaXMgY291bnRpbmcgZG93bi4gKi8KLSNkZWZpbmUgTExfVElNX0NPVU5URVJNT0RFX0NFTlRFUl9ET1dOICAgICAgICAgVElNX0NSMV9DTVNfMSAgICAgICAgLyohPFRoZSBjb3VudGVyIGNvdW50cyB1cCBhbmQgZG93biBhbHRlcm5hdGl2ZWx5LiBPdXRwdXQgY29tcGFyZSBpbnRlcnJ1cHQgZmxhZ3Mgb2Ygb3V0cHV0IGNoYW5uZWxzICBhcmUgc2V0IG9ubHkgd2hlbiB0aGUgY291bnRlciBpcyBjb3VudGluZyB1cCAqLworI2RlZmluZSBMTF9USU1fQ09VTlRFUk1PREVfQ0VOVEVSX0RPV04gICAgICAgICBUSU1fQ1IxX0NNU18wICAgICAgICAvKiE8IFRoZSBjb3VudGVyIGNvdW50cyB1cCBhbmQgZG93biBhbHRlcm5hdGl2ZWx5LiBPdXRwdXQgY29tcGFyZSBpbnRlcnJ1cHQgZmxhZ3Mgb2Ygb3V0cHV0IGNoYW5uZWxzICBhcmUgc2V0IG9ubHkgd2hlbiB0aGUgY291bnRlciBpcyBjb3VudGluZyBkb3duLiAqLworI2RlZmluZSBMTF9USU1fQ09VTlRFUk1PREVfQ0VOVEVSX1VQICAgICAgICAgICBUSU1fQ1IxX0NNU18xICAgICAgICAvKiE8VGhlIGNvdW50ZXIgY291bnRzIHVwIGFuZCBkb3duIGFsdGVybmF0aXZlbHkuIE91dHB1dCBjb21wYXJlIGludGVycnVwdCBmbGFncyBvZiBvdXRwdXQgY2hhbm5lbHMgIGFyZSBzZXQgb25seSB3aGVuIHRoZSBjb3VudGVyIGlzIGNvdW50aW5nIHVwICovCiAjZGVmaW5lIExMX1RJTV9DT1VOVEVSTU9ERV9DRU5URVJfVVBfRE9XTiAgICAgIFRJTV9DUjFfQ01TICAgICAgICAgIC8qITwgVGhlIGNvdW50ZXIgY291bnRzIHVwIGFuZCBkb3duIGFsdGVybmF0aXZlbHkuIE91dHB1dCBjb21wYXJlIGludGVycnVwdCBmbGFncyBvZiBvdXRwdXQgY2hhbm5lbHMgIGFyZSBzZXQgb25seSB3aGVuIHRoZSBjb3VudGVyIGlzIGNvdW50aW5nIHVwIG9yIGRvd24uICovCiAvKioKICAgKiBAfQpAQCAtMTEzNCwxMyArMTEzNSwxMyBAQAogI2RlZmluZSBMTF9USU1fVElNMl9JVFIxX1JNUF9USU04X1RSR08gIFRJTTJfT1IxX1JNUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNMl9JVFIxIGlzIGNvbm5lY3RlZCB0byBUSU04X1RSR08gKi8KICNkZWZpbmUgTExfVElNX1RJTTJfSVRSMV9STVBfT1RHX0ZTX1NPRiAoVElNMl9PUjFfSVRSMV9STVAgfCBUSU0yX09SMV9STVBfTUFTSykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTTJfSVRSMSBpcyBjb25uZWN0ZWQgdG8gT1RHX0ZTIFNPRiAqLwogI2VuZGlmIC8qIFNUTTMyTDQ3MXh4IHx8IFNUTTMyTDQ3NXh4IHx8IFNUTTMyTDQ3Nnh4IHx8IFNUTTMyTDQ4NXh4IHx8IFNUTTMyTDQ4Nnh4IHx8ICovCi0gICAgICAgLyogU1RNMzJMNDk2eHggfHwgU1RNMzJMNEE2eHggfHwgKi8KLSAgICAgICAvKiBTVE0zMkw0UjV4eCB8fCBTVE0zMkw0Ujd4eCB8fCBTVE0zMkw0Ujl4eCB8fCBTVE0zMkw0UzV4eCB8fCBTVE0zMkw0Uzd4eCB8fCBTVE0zMkw0Uzl4eCAqLworLyogU1RNMzJMNDk2eHggfHwgU1RNMzJMNEE2eHggfHwgKi8KKy8qIFNUTTMyTDRSNXh4IHx8IFNUTTMyTDRSN3h4IHx8IFNUTTMyTDRSOXh4IHx8IFNUTTMyTDRTNXh4IHx8IFNUTTMyTDRTN3h4IHx8IFNUTTMyTDRTOXh4ICovCiAjaWYgZGVmaW5lZCAoU1RNMzJMNDEyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQyMnh4KSB8fGRlZmluZWQgKFNUTTMyTDQzMXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0MzJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDMzeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ0Mnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0NDN4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDUxeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ1Mnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0NjJ4eCkKICNkZWZpbmUgTExfVElNX1RJTTJfSVRSMV9STVBfTk9ORSAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhPCBObyBpbnRlcm5hbCB0cmlnZ2VyIG9uIFRJTTJfSVRSMSAqLwogI2RlZmluZSBMTF9USU1fVElNMl9JVFIxX1JNUF9VU0JfU09GICAgICAgIFRJTTJfT1IxX0lUUjFfUk1QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICE8IFRJTTJfSVRSMSBpcyBjb25uZWN0ZWQgdG8gVVNCIFNPRiAqLwogI2VuZGlmIC8qIFNUTTMyTDQzMXh4IHx8IFNUTTMyTDQzMnh4IHx8IFNUTTMyTDQ0Mnh4IHx8IFNUTTMyTDQzM3h4IHx8IFNUTTMyTDQ0M3h4IHx8ICovCi0gICAgICAgLyogU1RNMzJMNDUxeHggfHwgU1RNMzJMNDUyeHggfHwgU1RNMzJMNDYyeHggKi8KKy8qIFNUTTMyTDQ1MXh4IHx8IFNUTTMyTDQ1Mnh4IHx8IFNUTTMyTDQ2Mnh4ICovCiAjZGVmaW5lIExMX1RJTV9USU0yX0VUUl9STVBfR1BJTyBUSU0yX09SMV9STVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU0yX0VUUiBpcyBjb25uZWN0ZWQgdG8gR1BJTyAqLwogI2RlZmluZSBMTF9USU1fVElNMl9FVFJfUk1QX0xTRSAgKFRJTTJfT1IxX0VUUjFfUk1QIHwgVElNMl9PUjFfUk1QX01BU0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNMl9FVFIgaXMgY29ubmVjdGVkIHRvIExTRSAgKi8KIC8qKgpAQCAtMTc1Niw3ICsxNzU3LDcgQEAKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGEgcmVwZXRpdGlvbiBjb3VudGVyLgogICAqIEBybXRvbGwgUkNSICAgICAgICAgIFJFUCAgICAgICAgICAgTExfVElNX1NldFJlcGV0aXRpb25Db3VudGVyCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCi0gICogQHBhcmFtICBSZXBldGl0aW9uQ291bnRlciBiZXR3ZWVuIE1pbl9EYXRhPTAgYW5kIE1heF9EYXRhPTI1NQorICAqIEBwYXJhbSAgUmVwZXRpdGlvbkNvdW50ZXIgYmV0d2VlbiBNaW5fRGF0YT0wIGFuZCBNYXhfRGF0YT0yNTUgb3IgNjU1MzUgZm9yIGFkdmFuY2VkIHRpbWVyLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX1NldFJlcGV0aXRpb25Db3VudGVyKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBSZXBldGl0aW9uQ291bnRlcikKQEAgLTIwMzcsOCArMjAzOCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fT0NfQ29uZmlnT3V0cHV0KFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBDb25maWd1cmF0aW9uKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgKFRJTV9DQ01SMV9DQzFTIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSkpOwogICBNT0RJRllfUkVHKFRJTXgtPkNDRVIsIChUSU1fQ0NFUl9DQzFQIDw8IFNISUZUX1RBQl9DQ3hQW2lDaGFubmVsXSksCiAgICAgICAgICAgICAgKENvbmZpZ3VyYXRpb24gJiBUSU1fQ0NFUl9DQzFQKSA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pOwpAQCAtMjA4Miw4ICsyMDgzLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9PQ19TZXRNb2RlKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBNb2RlKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsICgoVElNX0NDTVIxX09DMU0gIHwgVElNX0NDTVIxX0NDMVMpIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSksICBNb2RlIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSk7CiB9CiAKQEAgLTIxMjEsOCArMjEyMiw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldE1vZGUoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgKChUSU1fQ0NNUjFfT0MxTSAgfCBUSU1fQ0NNUjFfQ0MxUykgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdKSkgPj4gU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdKTsKIH0KIApAQCAtMjE1NSw3ICsyMTU2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9PQ19TZXRQb2xhcml0eShUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgUG9sYXJpdHkpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwogICBNT0RJRllfUkVHKFRJTXgtPkNDRVIsIChUSU1fQ0NFUl9DQzFQIDw8IFNISUZUX1RBQl9DQ3hQW2lDaGFubmVsXSksICBQb2xhcml0eSA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pOwogfQogCkBAIC0yMTg3LDcgKzIxODgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9PQ19HZXRQb2xhcml0eShUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CiAgIHJldHVybiAoUkVBRF9CSVQoVElNeC0+Q0NFUiwgKFRJTV9DQ0VSX0NDMVAgPDwgU0hJRlRfVEFCX0NDeFBbaUNoYW5uZWxdKSkgPj4gU0hJRlRfVEFCX0NDeFBbaUNoYW5uZWxdKTsKIH0KIApAQCAtMjIyNCw3ICsyMjI1LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9PQ19TZXRJZGxlU3RhdGUoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IElkbGVTdGF0ZSkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CiAgIE1PRElGWV9SRUcoVElNeC0+Q1IyLCAoVElNX0NSMl9PSVMxIDw8IFNISUZUX1RBQl9PSVN4W2lDaGFubmVsXSksICBJZGxlU3RhdGUgPDwgU0hJRlRfVEFCX09JU3hbaUNoYW5uZWxdKTsKIH0KIApAQCAtMjI1Niw3ICsyMjU3LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fT0NfR2V0SWRsZVN0YXRlKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKICAgcmV0dXJuIChSRUFEX0JJVChUSU14LT5DUjIsIChUSU1fQ1IyX09JUzEgPDwgU0hJRlRfVEFCX09JU3hbaUNoYW5uZWxdKSkgPj4gU0hJRlRfVEFCX09JU3hbaUNoYW5uZWxdKTsKIH0KIApAQCAtMjI4MSw4ICsyMjgyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9PQ19FbmFibGVGYXN0KFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIChUSU1fQ0NNUjFfT0MxRkUgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdKSk7CiAKIH0KQEAgLTIzMDcsOCArMjMwOCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fT0NfRGlzYWJsZUZhc3QoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgQ0xFQVJfQklUKCpwUmVnLCAoVElNX0NDTVIxX09DMUZFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSkpOwogCiB9CkBAIC0yMzMzLDkgKzIzMzQsOSBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9PQ19Jc0VuYWJsZWRGYXN0KFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwotICByZWdpc3RlciB1aW50MzJfdCBiaXRmaWVsZCA9IFRJTV9DQ01SMV9PQzFGRSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF07CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgIHVpbnQzMl90IGJpdGZpZWxkID0gVElNX0NDTVIxX09DMUZFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXTsKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIGJpdGZpZWxkKSA9PSBiaXRmaWVsZCkgPyAxVUwgOiAwVUwpOwogfQogCkBAIC0yMzU5LDggKzIzNjAsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX09DX0VuYWJsZVByZWxvYWQoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgU0VUX0JJVCgqcFJlZywgKFRJTV9DQ01SMV9PQzFQRSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF0pKTsKIH0KIApAQCAtMjM4NCw4ICsyMzg1LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9PQ19EaXNhYmxlUHJlbG9hZChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIChUSU1fQ0NNUjFfT0MxUEUgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdKSk7CiB9CiAKQEAgLTI0MDksOSArMjQxMCw5IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0lzRW5hYmxlZFByZWxvYWQoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJpdGZpZWxkID0gVElNX0NDTVIxX09DMVBFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXTsKKyAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICAgdWludDMyX3QgYml0ZmllbGQgPSBUSU1fQ0NNUjFfT0MxUEUgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdOwogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgYml0ZmllbGQpID09IGJpdGZpZWxkKSA/IDFVTCA6IDBVTCk7CiB9CiAKQEAgLTI0MzgsOCArMjQzOSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fT0NfRW5hYmxlQ2xlYXIoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgU0VUX0JJVCgqcFJlZywgKFRJTV9DQ01SMV9PQzFDRSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF0pKTsKIH0KIApAQCAtMjQ2NSw4ICsyNDY2LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9PQ19EaXNhYmxlQ2xlYXIoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgQ0xFQVJfQklUKCpwUmVnLCAoVElNX0NDTVIxX09DMUNFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSkpOwogfQogCkBAIC0yNDk0LDkgKzI0OTUsOSBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9PQ19Jc0VuYWJsZWRDbGVhcihUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYml0ZmllbGQgPSBUSU1fQ0NNUjFfT0MxQ0UgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdOworICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgICB1aW50MzJfdCBiaXRmaWVsZCA9IFRJTV9DQ01SMV9PQzFDRSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF07CiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBiaXRmaWVsZCkgPT0gYml0ZmllbGQpID8gMVVMIDogMFVMKTsKIH0KIApAQCAtMjc2NSw4ICsyNzY2LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9JQ19Db25maWcoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IENvbmZpZ3VyYXRpb24pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgTU9ESUZZX1JFRygqcFJlZywgKChUSU1fQ0NNUjFfSUMxRiB8IFRJTV9DQ01SMV9JQzFQU0MgfCBUSU1fQ0NNUjFfQ0MxUykgPDwgU0hJRlRfVEFCX0lDeHhbaUNoYW5uZWxdKSwKICAgICAgICAgICAgICAoKENvbmZpZ3VyYXRpb24gPj4gMTZVKSAmIChUSU1fQ0NNUjFfSUMxRiB8IFRJTV9DQ01SMV9JQzFQU0MgfCBUSU1fQ0NNUjFfQ0MxUykpICA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pOwogICBNT0RJRllfUkVHKFRJTXgtPkNDRVIsICgoVElNX0NDRVJfQ0MxTlAgfCBUSU1fQ0NFUl9DQzFQKSA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pLApAQCAtMjc5Myw4ICsyNzk0LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9JQ19TZXRBY3RpdmVJbnB1dChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgSUNBY3RpdmVJbnB1dCkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoKFRJTV9DQ01SMV9DQzFTKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pLCAoSUNBY3RpdmVJbnB1dCA+PiAxNlUpIDw8IFNISUZUX1RBQl9JQ3h4W2lDaGFubmVsXSk7CiB9CiAKQEAgLTI4MTcsOCArMjgxOCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lDX0dldEFjdGl2ZUlucHV0KFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCAoKFRJTV9DQ01SMV9DQzFTKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pKSA+PiBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pIDw8IDE2VSk7CiB9CiAKQEAgLTI4NDMsOCArMjg0NCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fSUNfU2V0UHJlc2NhbGVyKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBJQ1ByZXNjYWxlcikKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoKFRJTV9DQ01SMV9JQzFQU0MpIDw8IFNISUZUX1RBQl9JQ3h4W2lDaGFubmVsXSksIChJQ1ByZXNjYWxlciA+PiAxNlUpIDw8IFNISUZUX1RBQl9JQ3h4W2lDaGFubmVsXSk7CiB9CiAKQEAgLTI4NjgsOCArMjg2OSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lDX0dldFByZXNjYWxlcihUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgKChUSU1fQ0NNUjFfSUMxUFNDKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pKSA+PiBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pIDw8IDE2VSk7CiB9CiAKQEAgLTI5MDYsOCArMjkwNyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fSUNfU2V0RmlsdGVyKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBJQ0ZpbHRlcikKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoKFRJTV9DQ01SMV9JQzFGKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pLCAoSUNGaWx0ZXIgPj4gMTZVKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pOwogfQogCkBAIC0yOTQzLDggKzI5NDQsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9JQ19HZXRGaWx0ZXIoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsICgoVElNX0NDTVIxX0lDMUYpIDw8IFNISUZUX1RBQl9JQ3h4W2lDaGFubmVsXSkpID4+IFNISUZUX1RBQl9JQ3h4W2lDaGFubmVsXSkgPDwgMTZVKTsKIH0KIApAQCAtMjk3Miw3ICsyOTczLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9JQ19TZXRQb2xhcml0eShUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgSUNQb2xhcml0eSkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CiAgIE1PRElGWV9SRUcoVElNeC0+Q0NFUiwgKChUSU1fQ0NFUl9DQzFOUCB8IFRJTV9DQ0VSX0NDMVApIDw8IFNISUZUX1RBQl9DQ3hQW2lDaGFubmVsXSksCiAgICAgICAgICAgICAgSUNQb2xhcml0eSA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pOwogfQpAQCAtMzAwMCw3ICszMDAxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSUNfR2V0UG9sYXJpdHkoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwogICByZXR1cm4gKFJFQURfQklUKFRJTXgtPkNDRVIsICgoVElNX0NDRVJfQ0MxTlAgfCBUSU1fQ0NFUl9DQzFQKSA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pKSA+PgogICAgICAgICAgIFNISUZUX1RBQl9DQ3hQW2lDaGFubmVsXSk7CiB9CkBAIC0zNjQ5LDcgKzM2NTAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX0VuYWJsZUJyZWFrSW5wdXRTb3VyY2UoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IEJyZWFrSW5wdXQsIHVpbnQzMl90IFNvdXJjZSkKIHsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+T1IyKSArIEJyZWFrSW5wdXQpKTsKKyAgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPk9SMikgKyBCcmVha0lucHV0KSk7CiAgIFNFVF9CSVQoKnBSZWcsIFNvdXJjZSk7CiB9CiAKQEAgLTM2NzgsNyArMzY3OSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fRGlzYWJsZUJyZWFrSW5wdXRTb3VyY2UoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IEJyZWFrSW5wdXQsIHVpbnQzMl90IFNvdXJjZSkKIHsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+T1IyKSArIEJyZWFrSW5wdXQpKTsKKyAgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPk9SMikgKyBCcmVha0lucHV0KSk7CiAgIENMRUFSX0JJVCgqcFJlZywgU291cmNlKTsKIH0KIApAQCAtMzcwOCw3ICszNzA5LDcgQEAKIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9TZXRCcmVha0lucHV0U291cmNlUG9sYXJpdHkoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IEJyZWFrSW5wdXQsIHVpbnQzMl90IFNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgUG9sYXJpdHkpCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPk9SMikgKyBCcmVha0lucHV0KSk7CisgICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5PUjIpICsgQnJlYWtJbnB1dCkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoVElNeF9PUjJfQktJTlAgPDwgVElNX1BPU0lUSU9OX0JSS19TT1VSQ0UpLCAoUG9sYXJpdHkgPDwgVElNX1BPU0lUSU9OX0JSS19TT1VSQ0UpKTsKIH0KIC8qKgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9sbF91c2FydC5oIGIvSW5jL3N0bTMybDR4eF9sbF91c2FydC5oCmluZGV4IDJkOTE2M2YuLjU3NjgxZjUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfbGxfdXNhcnQuaAorKysgYi9JbmMvc3RtMzJsNHh4X2xsX3VzYXJ0LmgKQEAgLTE5NzEsNyArMTk3MSw3IEBACiAjZW5kaWYgLyogVVNBUlRfUFJFU0NfUFJFU0NBTEVSICovCiB7CiAgIHVpbnQzMl90IHVzYXJ0ZGl2OwotICByZWdpc3RlciB1aW50MzJfdCBicnJ0ZW1wOworICB1aW50MzJfdCBicnJ0ZW1wOwogCiAjaWYgZGVmaW5lZChVU0FSVF9QUkVTQ19QUkVTQ0FMRVIpCiAgIGlmIChQcmVzY2FsZXJWYWx1ZSA+IExMX1VTQVJUX1BSRVNDQUxFUl9ESVYyNTYpCkBAIC0yMDM3LDEwICsyMDM3LDEwIEBACiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0QmF1ZFJhdGUoVVNBUlRfVHlwZURlZiAqVVNBUlR4LCB1aW50MzJfdCBQZXJpcGhDbGssIHVpbnQzMl90IE92ZXJTYW1wbGluZykKICNlbmRpZiAvKiBVU0FSVF9QUkVTQ19QUkVTQ0FMRVIgKi8KIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgdXNhcnRkaXY7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJycnJlc3VsdCA9IDB4MFU7CisgIHVpbnQzMl90IHVzYXJ0ZGl2OworICB1aW50MzJfdCBicnJyZXN1bHQgPSAweDBVOwogI2lmIGRlZmluZWQoVVNBUlRfUFJFU0NfUFJFU0NBTEVSKQotICByZWdpc3RlciB1aW50MzJfdCBwZXJpcGhjbGtwcmVzYyA9ICh1aW50MzJfdCkoUGVyaXBoQ2xrIC8gKFVTQVJUX1BSRVNDQUxFUl9UQUJbKHVpbnQ4X3QpUHJlc2NhbGVyVmFsdWVdKSk7CisgIHVpbnQzMl90IHBlcmlwaGNsa3ByZXNjID0gKHVpbnQzMl90KShQZXJpcGhDbGsgLyAoVVNBUlRfUFJFU0NBTEVSX1RBQlsodWludDhfdClQcmVzY2FsZXJWYWx1ZV0pKTsKICNlbmRpZiAvKiBVU0FSVF9QUkVTQ19QUkVTQ0FMRVIgKi8KIAogICB1c2FydGRpdiA9IFVTQVJUeC0+QlJSOwpAQCAtNDQ4OCw3ICs0NDg4LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9ETUFfR2V0UmVnQWRkcihVU0FSVF9UeXBlRGVmICpVU0FSVHgsIHVpbnQzMl90IERpcmVjdGlvbikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZGF0YV9yZWdfYWRkcjsKKyAgdWludDMyX3QgZGF0YV9yZWdfYWRkcjsKIAogICBpZiAoRGlyZWN0aW9uID09IExMX1VTQVJUX0RNQV9SRUdfREFUQV9UUkFOU01JVCkKICAgewpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9sbF91c2IuaCBiL0luYy9zdG0zMmw0eHhfbGxfdXNiLmgKaW5kZXggNjEyMTU5Mi4uZDkwOTgwYiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9sbF91c2IuaAorKysgYi9JbmMvc3RtMzJsNHh4X2xsX3VzYi5oCkBAIC0xNTUsNyArMTU1LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKLSAgdWludDhfdCAgIGRldl9hZGRyIDsgICAgICAgICAgLyohPCBVU0IgZGV2aWNlIGFkZHJlc3MuCisgIHVpbnQ4X3QgICBkZXZfYWRkcjsgICAgICAgICAgIC8qITwgVVNCIGRldmljZSBhZGRyZXNzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDEgYW5kIE1heF9EYXRhID0gMjU1ICAgICovCiAKICAgdWludDhfdCAgIGNoX251bTsgICAgICAgICAgICAgLyohPCBIb3N0IGNoYW5uZWwgbnVtYmVyLgpAQCAtMTk5LDEwICsxOTksMTAgQEAKIAogICB1aW50MzJfdCAgRXJyQ250OyAgICAgICAgICAgICAvKiE8IEhvc3QgY2hhbm5lbCBlcnJvciBjb3VudC4qLwogCi0gIFVTQl9PVEdfVVJCU3RhdGVUeXBlRGVmICB1cmJfc3RhdGU7ICAvKiE8IFVSQiBzdGF0ZS4KKyAgVVNCX09UR19VUkJTdGF0ZVR5cGVEZWYgdXJiX3N0YXRlOyAgLyohPCBVUkIgc3RhdGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBVU0JfT1RHX1VSQlN0YXRlVHlwZURlZiAqLwogCi0gIFVTQl9PVEdfSENTdGF0ZVR5cGVEZWYgICBzdGF0ZTsgICAgIC8qITwgSG9zdCBDaGFubmVsIHN0YXRlLgorICBVU0JfT1RHX0hDU3RhdGVUeXBlRGVmIHN0YXRlOyAgICAgICAvKiE8IEhvc3QgQ2hhbm5lbCBzdGF0ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgVVNCX09UR19IQ1N0YXRlVHlwZURlZiAgICovCiB9IFVTQl9PVEdfSENUeXBlRGVmOwogI2VuZGlmIC8qIGRlZmluZWQgKFVTQl9PVEdfRlMpICovCkBAIC0yODIsNiArMjgyLDEwIEBACiAKICAgdWludDMyX3QgIHhmZXJfY291bnQ7ICAgICAgLyohPCBQYXJ0aWFsIHRyYW5zZmVyIGxlbmd0aCBpbiBjYXNlIG9mIG11bHRpIHBhY2tldCB0cmFuc2ZlciAgICAgICAgICAgICAgICAgICovCiAKKyAgdWludDMyX3QgIHhmZXJfbGVuX2RiOyAgICAgIC8qITwgZG91YmxlIGJ1ZmZlciB0cmFuc2ZlciBsZW5ndGggdXNlZCB3aXRoIGJ1bGsgZG91YmxlIGJ1ZmZlciBpbiAgICAgICAgICAgKi8KKworICB1aW50OF90ICAgeGZlcl9maWxsX2RiOyAgICAgLyohPCBkb3VibGUgYnVmZmVyIE5lZWQgdG8gRmlsbCBuZXcgYnVmZmVyICB1c2VkIHdpdGggYnVsa19pbiAgICAgICAgICAgICAgICAqLworCiB9IFVTQl9FUFR5cGVEZWY7CiAjZW5kaWYgLyogZGVmaW5lZCAoVVNCKSAqLwogCkBAIC0zMTQsOCArMzE4LDggQEAKIC8qKiBAZGVmZ3JvdXAgVVNCX0xMIERldmljZSBTcGVlZAogICAqIEB7CiAgICovCi0jZGVmaW5lIFVTQkRfRlNfU1BFRUQgICAgICAgICAgICAgICAyVQotI2RlZmluZSBVU0JIX0ZTX1NQRUVEICAgICAgICAgICAgICAgMVUKKyNkZWZpbmUgVVNCRF9GU19TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgMlUKKyNkZWZpbmUgVVNCSF9GU0xTX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgMVUKIC8qKgogICAqIEB9CiAgICovCkBAIC0zNDEsOCArMzQ1LDggQEAKICAgKiBAewogICAqLwogI2lmbmRlZiBVU0JEX0ZTX1RSRFRfVkFMVUUKLSNkZWZpbmUgVVNCRF9GU19UUkRUX1ZBTFVFICAgICAgICAgICA1VQotI2RlZmluZSBVU0JEX0RFRkFVTFRfVFJEVF9WQUxVRSAgICAgIDlVCisjZGVmaW5lIFVTQkRfRlNfVFJEVF9WQUxVRSAgICAgICAgICAgICAgICAgICAgIDVVCisjZGVmaW5lIFVTQkRfREVGQVVMVF9UUkRUX1ZBTFVFICAgICAgICAgICAgICAgIDlVCiAjZW5kaWYgLyogVVNCRF9IU19UUkRUX1ZBTFVFICovCiAvKioKICAgKiBAfQpAQCAtMzUxLDggKzM1NSw4IEBACiAvKiogQGRlZmdyb3VwIFVTQl9MTF9Db3JlX01QUyBVU0IgTG93IExheWVyIENvcmUgTVBTCiAgICogQHsKICAgKi8KLSNkZWZpbmUgVVNCX09UR19GU19NQVhfUEFDS0VUX1NJWkUgICAgICAgICAgICAgNjRVCi0jZGVmaW5lIFVTQl9PVEdfTUFYX0VQMF9TSVpFICAgICAgICAgICAgICAgICAgIDY0VQorI2RlZmluZSBVU0JfT1RHX0ZTX01BWF9QQUNLRVRfU0laRSAgICAgICAgICAgIDY0VQorI2RlZmluZSBVU0JfT1RHX01BWF9FUDBfU0laRSAgICAgICAgICAgICAgICAgIDY0VQogLyoqCiAgICogQH0KICAgKi8KQEAgLTM4MSwxMCArMzg1LDEwIEBACiAvKiogQGRlZmdyb3VwIFVTQl9MTF9FUDBfTVBTIFVTQiBMb3cgTGF5ZXIgRVAwIE1QUwogICAqIEB7CiAgICovCi0jZGVmaW5lIERFUDBDVExfTVBTXzY0ICAgICAgICAgICAgICAgICAgICAgICAgIDBVCi0jZGVmaW5lIERFUDBDVExfTVBTXzMyICAgICAgICAgICAgICAgICAgICAgICAgIDFVCi0jZGVmaW5lIERFUDBDVExfTVBTXzE2ICAgICAgICAgICAgICAgICAgICAgICAgIDJVCi0jZGVmaW5lIERFUDBDVExfTVBTXzggICAgICAgICAgICAgICAgICAgICAgICAgIDNVCisjZGVmaW5lIEVQX01QU182NCAgICAgICAgICAgICAgICAgICAgICAgIDBVCisjZGVmaW5lIEVQX01QU18zMiAgICAgICAgICAgICAgICAgICAgICAgIDFVCisjZGVmaW5lIEVQX01QU18xNiAgICAgICAgICAgICAgICAgICAgICAgIDJVCisjZGVmaW5lIEVQX01QU184ICAgICAgICAgICAgICAgICAgICAgICAzVQogLyoqCiAgICogQH0KICAgKi8KQEAgLTQ3NCwxMCArNDc4LDEwIEBACiAvKiogQGRlZmdyb3VwIFVTQl9MTF9FUDBfTVBTIFVTQiBMb3cgTGF5ZXIgRVAwIE1QUwogICAqIEB7CiAgICovCi0jZGVmaW5lIERFUDBDVExfTVBTXzY0ICAgICAgICAgICAgICAgICAgICAgICAgIDBVCi0jZGVmaW5lIERFUDBDVExfTVBTXzMyICAgICAgICAgICAgICAgICAgICAgICAgIDFVCi0jZGVmaW5lIERFUDBDVExfTVBTXzE2ICAgICAgICAgICAgICAgICAgICAgICAgIDJVCi0jZGVmaW5lIERFUDBDVExfTVBTXzggICAgICAgICAgICAgICAgICAgICAgICAgIDNVCisjZGVmaW5lIEVQX01QU182NCAgICAgICAgICAgICAgICAgICAgICAgICAwVQorI2RlZmluZSBFUF9NUFNfMzIgICAgICAgICAgICAgICAgICAgICAgICAgMVUKKyNkZWZpbmUgRVBfTVBTXzE2ICAgICAgICAgICAgICAgICAgICAgICAgIDJVCisjZGVmaW5lIEVQX01QU184ICAgICAgICAgICAgICAgICAgICAgICAgICAzVQogLyoqCiAgICogQH0KICAgKi8KQEAgLTUwMiwxNCArNTA2LDE0IEBACiAgICogQH0KICAgKi8KIAotI2RlZmluZSBCVEFCTEVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMFUKKyNkZWZpbmUgQlRBQkxFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAweDAwMFUKICNkZWZpbmUgUE1BX0FDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMVUKICNlbmRpZiAvKiBkZWZpbmVkIChVU0IpICovCiAjaWYgZGVmaW5lZCAoVVNCX09UR19GUykKLSNkZWZpbmUgRVBfQUREUl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGVQorI2RlZmluZSBFUF9BRERSX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGVQogI2VuZGlmIC8qIGRlZmluZWQgKFVTQl9PVEdfRlMpICovCiAjaWYgZGVmaW5lZCAoVVNCKQotI2RlZmluZSBFUF9BRERSX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdVCisjZGVmaW5lIEVQX0FERFJfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDdVCiAjZW5kaWYgLyogZGVmaW5lZCAoVVNCKSAqLwogLyoqCiAgICogQH0KQEAgLTU3NSwxMyArNTc5LDkgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9Ecml2ZVZidXMoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCB1aW50OF90IHN0YXRlKTsKIHVpbnQzMl90ICAgICAgICAgIFVTQl9HZXRIb3N0U3BlZWQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KTsKIHVpbnQzMl90ICAgICAgICAgIFVTQl9HZXRDdXJyZW50RnJhbWUoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KTsKLUhBTF9TdGF0dXNUeXBlRGVmIFVTQl9IQ19Jbml0KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY2hfbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBlcG51bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZGV2X2FkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHNwZWVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBlcF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbXBzKTsKK0hBTF9TdGF0dXNUeXBlRGVmIFVTQl9IQ19Jbml0KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgdWludDhfdCBjaF9udW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGVwbnVtLCB1aW50OF90IGRldl9hZGRyZXNzLCB1aW50OF90IHNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBlcF90eXBlLCB1aW50MTZfdCBtcHMpOwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0hDX1N0YXJ0WGZlcihVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngsIFVTQl9PVEdfSENUeXBlRGVmICpoYyk7CiB1aW50MzJfdCAgICAgICAgICBVU0JfSENfUmVhZEludGVycnVwdChVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngpOwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0hDX0hhbHQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCB1aW50OF90IGhjX251bSk7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2xsX3V0aWxzLmggYi9JbmMvc3RtMzJsNHh4X2xsX3V0aWxzLmgKaW5kZXggYmIwZjNiOC4uZWVkYWM3MiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9sbF91dGlscy5oCisrKyBiL0luYy9zdG0zMmw0eHhfbGxfdXRpbHMuaApAQCAtMTU5LDIzICsxNTksMjMgQEAKIC8qKiBAZGVmZ3JvdXAgVVRJTFNfRUNfUEFDS0FHRVRZUEUgUEFDS0FHRSBUWVBFCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfVVRJTFNfUEFDS0FHRVRZUEVfTFFGUDY0ICAgICAgICAgMHgwMDAwMDAwMFUgLyohPCBMUUZQNjQgcGFja2FnZSB0eXBlICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1dMQ1NQNjQgICAgICAgIDB4MDAwMDAwMDFVIC8qITwgV0xDU1A2NCBwYWNrYWdlIHR5cGUgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9MUUZQMTAwICAgICAgICAweDAwMDAwMDAyVSAvKiE8IExRRlAxMDAgcGFja2FnZSB0eXBlICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTExfVVRJTFNfUEFDS0FHRVRZUEVfQkdBMTMyICAgICAgICAgMHgwMDAwMDAwM1UgLyohPCBCR0ExMzIgcGFja2FnZSB0eXBlICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX0xRRlAxNDRfQ1NQNzIgIDB4MDAwMDAwMDRVIC8qITwgTFFGUDE0NCwgV0xDU1A4MSBvciBXTENTUDcyIHBhY2thZ2UgdHlwZSAqLwotI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9VRlFGUE4zMiAgICAgICAweDAwMDAwMDA4VSAvKiE8IFVGUUZQTjMyIHBhY2thZ2UgdHlwZSAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTExfVVRJTFNfUEFDS0FHRVRZUEVfVUZRRlBONDggICAgICAgMHgwMDAwMDAwQVUgLyohPCBVRlFGUE40OCBwYWNrYWdlIHR5cGUgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX0xRRlA0OCAgICAgICAgIDB4MDAwMDAwMEJVIC8qITwgTFFGUDQ4IHBhY2thZ2UgdHlwZSAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9XTENTUDQ5ICAgICAgICAweDAwMDAwMDBDVSAvKiE8IFdMQ1NQNDkgcGFja2FnZSB0eXBlICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTExfVVRJTFNfUEFDS0FHRVRZUEVfVUZCR0E2NCAgICAgICAgMHgwMDAwMDAwRFUgLyohPCBVRkJHQTY0IHBhY2thZ2UgdHlwZSAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1VGQkdBMTAwICAgICAgIDB4MDAwMDAwMEVVIC8qITwgVUZCR0ExMDAgcGFja2FnZSB0eXBlICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9VRkJHQTE2OSAgICAgICAweDAwMDAwMDEwVSAvKiE8IFVGQkdBMTY5IHBhY2thZ2UgdHlwZSAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTExfVVRJTFNfUEFDS0FHRVRZUEVfTFFGUDEwMF9EU0kgICAgMHgwMDAwMDAxMlUgLyohPCBMUUZQMTAwIHdpdGggRFNJIHBhY2thZ2UgdHlwZSAgICAgICAgICAgICovCi0jZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1dMQ1NQMTQ0X0RTSSAgIDB4MDAwMDAwMTNVIC8qITwgV0xDU1AxNDQgd2l0aCBEU0kgcGFja2FnZSB0eXBlICAgICAgICAgICAqLwotI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9VRkJHQTE0NF9EU0kgICAweDAwMDAwMDEzVSAvKiE8IFVGQkdBMTQ0IHdpdGggRFNJIHBhY2thZ2UgdHlwZSAgICAgICAgICAgKi8KLSNkZWZpbmUgTExfVVRJTFNfUEFDS0FHRVRZUEVfVUZCR0ExNjlfRFNJICAgMHgwMDAwMDAxNFUgLyohPCBVRkJHQTE2OSB3aXRoIERTSSBwYWNrYWdlIHR5cGUgICAgICAgICAgICovCi0jZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX0xRRlAxNDRfRFNJICAgIDB4MDAwMDAwMTVVIC8qITwgTFFGUDE0NCB3aXRoIERTSSBwYWNrYWdlIHR5cGUgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9MUUZQNjQgICAgICAgICAgMHgwMDAwMDAwMFUgLyohPCBMUUZQNjQgcGFja2FnZSB0eXBlICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1dMQ1NQNjQgICAgICAgICAweDAwMDAwMDAxVSAvKiE8IFdMQ1NQNjQgcGFja2FnZSB0eXBlICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVVRJTFNfUEFDS0FHRVRZUEVfTFFGUDEwMCAgICAgICAgIDB4MDAwMDAwMDJVIC8qITwgTFFGUDEwMCBwYWNrYWdlIHR5cGUgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9CR0ExMzIgICAgICAgICAgMHgwMDAwMDAwM1UgLyohPCBCR0ExMzIgcGFja2FnZSB0eXBlICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX0xRRlAxNDRfQ1NQNzIgICAweDAwMDAwMDA0VSAvKiE8IExRRlAxNDQsIFdMQ1NQODEgb3IgV0xDU1A3MiBwYWNrYWdlIHR5cGUgKi8KKyNkZWZpbmUgTExfVVRJTFNfUEFDS0FHRVRZUEVfVUZRRlBOMzIgICAgICAgIDB4MDAwMDAwMDhVIC8qITwgVUZRRlBOMzIgcGFja2FnZSB0eXBlICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9VRlFGUE40OCAgICAgICAgMHgwMDAwMDAwQVUgLyohPCBVRlFGUE40OCBwYWNrYWdlIHR5cGUgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX0xRRlA0OCAgICAgICAgICAweDAwMDAwMDBCVSAvKiE8IExRRlA0OCBwYWNrYWdlIHR5cGUgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVVRJTFNfUEFDS0FHRVRZUEVfV0xDU1A0OSAgICAgICAgIDB4MDAwMDAwMENVIC8qITwgV0xDU1A0OSBwYWNrYWdlIHR5cGUgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9VRkJHQTY0ICAgICAgICAgMHgwMDAwMDAwRFUgLyohPCBVRkJHQTY0IHBhY2thZ2UgdHlwZSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1VGQkdBMTAwICAgICAgICAweDAwMDAwMDBFVSAvKiE8IFVGQkdBMTAwIHBhY2thZ2UgdHlwZSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVVRJTFNfUEFDS0FHRVRZUEVfVUZCR0ExNjlfQ1NQMTE1IDB4MDAwMDAwMTBVIC8qITwgVUZCR0ExNjkgb3IgV0xDU1AxMTUgcGFja2FnZSB0eXBlICAgICAgICAqLworI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9MUUZQMTAwX0RTSSAgICAgMHgwMDAwMDAxMlUgLyohPCBMUUZQMTAwIHdpdGggRFNJIHBhY2thZ2UgdHlwZSAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1dMQ1NQMTQ0X0RTSSAgICAweDAwMDAwMDEzVSAvKiE8IFdMQ1NQMTQ0IHdpdGggRFNJIHBhY2thZ2UgdHlwZSAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVVRJTFNfUEFDS0FHRVRZUEVfVUZCR0ExNDRfRFNJICAgIDB4MDAwMDAwMTNVIC8qITwgVUZCR0ExNDQgd2l0aCBEU0kgcGFja2FnZSB0eXBlICAgICAgICAgICAqLworI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9VRkJHQTE2OV9EU0kgICAgMHgwMDAwMDAxNFUgLyohPCBVRkJHQTE2OSB3aXRoIERTSSBwYWNrYWdlIHR5cGUgICAgICAgICAgICovCisjZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX0xRRlAxNDRfRFNJICAgICAweDAwMDAwMDE1VSAvKiE8IExRRlAxNDQgd2l0aCBEU0kgcGFja2FnZSB0eXBlICAgICAgICAgICAgKi8KIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9MaWNlbnNlLm1kIGIvTGljZW5zZS5tZAppbmRleCBkOTVjMWRiLi5mOGE1Mzg1IDEwMDY0NAotLS0gYS9MaWNlbnNlLm1kCisrKyBiL0xpY2Vuc2UubWQKQEAgLTEsMyArMSwzIEBACiAjIENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MKIAotVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1RNaWNyb2VsZWN0cm9uaWNzIHVuZGVyIHRoZSAqKkJTRCAzLUNsYXVzZSoqIGxpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIGxpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgbGljZW5zZSBbaGVyZV0oaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UpLgorVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1RNaWNyb2VsZWN0cm9uaWNzIHVuZGVyIHRoZSAqKkJTRCAzLUNsYXVzZSoqIGxpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIGxpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgbGljZW5zZSBbaGVyZV0oaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UpLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1JFQURNRS5tZCBiL1JFQURNRS5tZAppbmRleCAzMjgxNWQ5Li41NDllZjJhIDEwMDY0NAotLS0gYS9SRUFETUUubWQKKysrIGIvUkVBRE1FLm1kCkBAIC0yNiw2ICsyNiwxMCBAQAogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1RNaWNyb2VsZWN0cm9uaWNzIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIFtoZXJlXShodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZSkuCiAKKyMjIFJlbGVhc2Ugbm90ZQorCitEZXRhaWxzIGFib3V0IHRoZSBjb250ZW50IG9mIHRoaXMgcmVsZWFzZSBhcmUgYXZhaWxhYmxlIGluIHRoZSByZWxlYXNlIG5vdGUgW2hlcmVdKGh0dHBzOi8vaHRtbHByZXZpZXcuZ2l0aHViLmlvLz9odHRwczovL2dpdGh1Yi5jb20vU1RNaWNyb2VsZWN0cm9uaWNzL3N0bTMybDR4eF9oYWxfZHJpdmVyL2Jsb2IvbWFzdGVyL1JlbGVhc2VfTm90ZXMuaHRtbCkuCisKICMjIENvbXBhdGliaWxpdHkgaW5mb3JtYXRpb24KIAogSW4gdGhpcyB0YWJsZSwgeW91IGNhbiBmaW5kIHRoZSBzdWNjZXNzaXZlIHZlcnNpb25zIG9mIHRoaXMgSEFMLUxMIERyaXZlciBjb21wb25lbnQsIGluIGxpbmUgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB2ZXJzaW9ucyBvZiB0aGUgZnVsbCBNQ1UgcGFja2FnZToKQEAgLTM3LDYgKzQxLDcgQEAKIFRhZyB2MS4xMC4wIHwgVGFnIHYxLjUuMSB8IFRhZyB2NS40LjBfY200IHwgVGFnIHYxLjE0LjAgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBuZXh0IG5ldyB0YWcpCiBUYWcgdjEuMTEuMCB8IFRhZyB2MS42LjAgfCBUYWcgdjUuNC4wX2NtNCB8IFRhZyB2MS4xNS4wIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCBuZXcgdGFnKQogVGFnIHYxLjExLjEgfCBUYWcgdjEuNi4xIHwgVGFnIHY1LjQuMF9jbTQgfCBUYWcgdjEuMTUuMSAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgbmV3IHRhZykKK1RhZyB2MS4xMi4wIHwgVGFnIHYxLjcuMCB8IFRhZyB2NS42LjBfY200IHwgVGFnIHYxLjE2LjAgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBuZXh0IG5ldyB0YWcpCiAKIERldGFpbHMgYWJvdXQgdGhlIGNvbnRlbnQgb2YgdGhpcyByZWxlYXNlIGFyZSBhdmFpbGFibGUgaW4gdGhlIHJlbGVhc2Ugbm90ZSBbaGVyZV0oaHR0cHM6Ly9odG1scHJldmlldy5naXRodWIuaW8vP2h0dHBzOi8vZ2l0aHViLmNvbS9TVE1pY3JvZWxlY3Ryb25pY3Mvc3RtMzJsNHh4X2hhbF9kcml2ZXIvYmxvYi9tYXN0ZXIvUmVsZWFzZV9Ob3Rlcy5odG1sKS4gCiAKQEAgLTQ2LDQgKzUxLDQgQEAKIAogSWYgeW91IGhhdmUgYW55IGlzc3VlIHdpdGggdGhlICoqU29mdHdhcmUgY29udGVudCoqIG9mIHRoaXMgcmVwbywgeW91IGNhbiBbZmlsZSBhbiBpc3N1ZSBvbiBHaXRodWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9TVE1pY3JvZWxlY3Ryb25pY3Mvc3RtMzJsNHh4X2hhbF9kcml2ZXIvaXNzdWVzL25ldykuCiAKLUZvciBhbnkgb3RoZXIgcXVlc3Rpb24gcmVsYXRlZCB0byB0aGUgcHJvZHVjdCwgdGhlIHRvb2xzLCB0aGUgZW52aXJvbm1lbnQsIHlvdSBjYW4gc3VibWl0IGEgdG9waWMgb24gdGhlIFtTVCBDb21tdW5pdHkvU1RNMzIgTUNVcyBmb3J1bV0oaHR0cHM6Ly9jb21tdW5pdHkuc3QuY29tL3MvZ3JvdXAvMEY5MFgwMDAwMDBBWHNBU0FXL3N0bTMyLW1jdXMpLgorRm9yIGFueSBvdGhlciBxdWVzdGlvbiByZWxhdGVkIHRvIHRoZSBwcm9kdWN0LCB0aGUgdG9vbHMsIHRoZSBlbnZpcm9ubWVudCwgeW91IGNhbiBzdWJtaXQgYSB0b3BpYyBvbiB0aGUgW1NUIENvbW11bml0eS9TVE0zMiBNQ1VzIGZvcnVtXShodHRwczovL2NvbW11bml0eS5zdC5jb20vcy9ncm91cC8wRjkwWDAwMDAwMEFYc0FTQVcvc3RtMzItbWN1cykuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUmVsZWFzZV9Ob3Rlcy5odG1sIGIvUmVsZWFzZV9Ob3Rlcy5odG1sCmluZGV4IGJjNTZmNTQuLjFlYTJmOTYgMTAwNjQ0Ci0tLSBhL1JlbGVhc2VfTm90ZXMuaHRtbAorKysgYi9SZWxlYXNlX05vdGVzLmh0bWwKQEAgLTQ2LDEzICs0NiwxODMgQEAKIDxkaXYgY2xhc3M9ImNvbC1zbS0xMiBjb2wtbGctOCI+CiA8aDEgaWQ9InVwZGF0ZS1oaXN0b3J5Ij5VcGRhdGUgSGlzdG9yeTwvaDE+CiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+Ci08aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMjciIGNoZWNrZWQgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMjciIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4xMS4xIC8gMDctRmVicnVhcnktMjAyMDwvbGFiZWw+Cis8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMjgiIGNoZWNrZWQgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMjgiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4xMi4wIC8gMjYtSnVuZS0yMDIwPC9sYWJlbD4KIDxkaXY+CiA8aDIgaWQ9Im1haW4tY2hhbmdlcyI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KLTxsaT5QYXRjaCByZWxlYXNlIG9mIDxzdHJvbmc+SEFMIGFuZCBMb3cgTGF5ZXI8L3N0cm9uZz4gZHJpdmVycyB0byBpbmNsdWRlIGxhdGVzdCBjb3JyZWN0aW9uczwvbGk+Cis8bGk+TWFpbnRlbmFuY2UgcmVsZWFzZSBvZiA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyPC9zdHJvbmc+IGRyaXZlcnMgdG8gaW5jbHVkZSBsYXRlc3QgY29ycmVjdGlvbnM8L2xpPgorPGxpPlVwZGF0ZSBvZiA8c3Ryb25nPkhBTCBPU1BJPC9zdHJvbmc+IGRyaXZlciBpbnRyb2R1Y2luZyA8c3Ryb25nPmNvbXBhdGliaWxpdHkgYnJlYWs8L3N0cm9uZz4gd2l0aCBwcmV2aW91cyB2ZXJzaW9uczwvbGk+CiA8L3VsPgogPGgyIGlkPSJjb250ZW50cyI+Q29udGVudHM8L2gyPgorPGgzIGlkPSJoYWxsbC1nZW5lcmljLXVwZGF0ZXMiPjxzdHJvbmc+SEFML0xMIGdlbmVyaWM8L3N0cm9uZz4gdXBkYXRlczwvaDM+Cis8dWw+Cis8bGk+UmVtb3ZlIHRoZSB1c2Ugb2Yga2V5d29yZCByZWdpc3RlciBpbiBIQUwvTEwgZHJpdmVyczwvbGk+Cis8L3VsPgorPGgzIGlkPSJoYWwtZHJpdmVycy11cGRhdGVzIj48c3Ryb25nPkhBTCBEcml2ZXJzPC9zdHJvbmc+IHVwZGF0ZXM8L2gzPgorPHVsPgorPGxpPjxzdHJvbmc+SEFMIENBTjwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5VcGRhdGUgPGVtPkhBTF9DQU5fR2V0UnhNZXNzYWdlKCk8L2VtPiB0byByZW1vdmUgc2hpZnQgb24gUlRSIGZpZWxkIG9mIHRoZSBzdHJ1Y3R1cmUgQ0FOX1J4SGVhZGVyVHlwZURlZjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgREFDPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPlVwZGF0ZSA8ZW0+SEFMX0RBQ19Db25maWdDaGFubmVsKCk8L2VtPiB0byBhZGQgY29ycmVjdGlvbiBvbiB0aW1vdXQgaGFuZGxpbmcgZm9yIHNhbXBsZSBhbmQgaG9sZCBjb25maWd1cmF0aW9uIG9uIENIQU5ORUxfMjwvbGk+Cis8bGk+VXBkYXRlIDxlbT5IQUxfREFDX1N0b3BfRE1BKCk8L2VtPiB0byByZXR1cm4gSEFMX09LIHZhbHVlIGFuZCBhdm9pZCBIQUxfREFDX1NUQVRFX0VSUk9SIHJldHVybiB2YWx1ZSBpbiBjYXNlIEhBTF9ETUFfQWJvcnQgcmV0dXJuIEhBTF9FUlJPUjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgRENNSTwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5VcGRhdGUgPGVtPkhBTF9EQ01JX1N0YXJ0X0RNQSgpPC9lbT4gdG8gbWFuYWdlIERNQSB0cmFuc2ZlcnMgbGFyZ2VyIHRoYW4gMHhGRkZGPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBETUE8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+VXBkYXRlIDxlbT5IQUxfRE1BX1BvbGxGb3JUcmFuc2ZlcigpPC9lbT4gdG8gbW92ZSB0aGUgVU5MT0NLIHByb2Nlc3Mgb25jZSB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGVkPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBGTEFTSDwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5Db3JyZWN0IE1JU1JBIEM6MjAxMi1SdWxlLTguNSB3YXJuaW5nIGluIEhBTCBGTEFTSCBkcml2ZXI8L2xpPgorPGxpPlVwZGF0ZSBfX0hBTF9GTEFTSF9HRVRfRkxBRyBtYWNybyB0byBjb3JyZWN0IHRoZSByZXR1cm4gdmFsdWUgKHdoZW4gdGhlIGZsYWcgRUNDRCBpcyBzZXQgdG8gMSk8L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIEdQSU88L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+QWRkIGRlZmluaXRpb24gb2YgR1BJT19BRjE0X1RJTTIgbWlzc2luZyBmb3IgU1RNMzJMNFI1eHggcHJvZHVjdHM8L2xpPgorPGxpPkZpeCA8ZW0+SEFMX0dQSU9fVG9nZ2xlUGluKCk8L2VtPiB0byBtYW5hZ2Ugc2V2ZXJhbCBwaW5zPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTDwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5BZGQgSEFMX1RpY2tGcmVxVHlwZURlZiB0eXBlIGRlZmluaXRpb24gZm9yIDxlbT5IQUxfU2V0VGlja0ZyZXEoKTwvZW0+IHBhcmFtZXRlciBhbmQgPGVtPkhBTF9HZXRUaWNrRnJlcSgpPC9lbT4gZnVuY3Rpb248L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIEkyQzwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5VcGRhdGUgb2YgSEFMIEkyQyBkcml2ZXIgdG8gY29ycmVjdCBzb21lIHR5cG8gaW4gY29tbWVudHM8L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIExQVElNPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPlVwZGF0ZSA8ZW0+SEFMX0xQVElNX0luaXQoKTwvZW0+IHRvIGFsbG93IGRpZ2l0YWwgZmlsdGVyIGNvbmZpZ3VyYXRpb24gZm9yIGV4dGVybmFsIGNsb2NrIHdoYXRldmVyIHRoZSBMUFRJTSBjbG9jayBzb3VyY2UgaXM8L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIE5BTkQvTk9SPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPkNvcnJlY3QgTUlTUkEgQzoyMDEyLVJ1bGUtNy4yIHdhcm5pbmcgaW4gSEFMIE5BTkQvTk9SIGRyaXZlcnM8L2xpPgorPGxpPkNvcnJlY3QgTUlTUkEgQzoyMDEyLVJ1bGUtMTAuNF9hIC8gMTQuNF9kIC8gMTguNCB3YXJuaW5ncyBpbiBIQUwgTk9SIGRyaXZlcnM8L2xpPgorPGxpPlVwZGF0ZSBhZGRyZXNzIGNhbGN1bGF0aW9uIGluIDxlbT5IQUxfTk9SX1Byb2dyYW1CdWZmZXIoKTwvZW0+PC9saT4KKzxsaT5VcGRhdGUgPGVtPkhBTF9OT1JfUHJvZ3JhbUJ1ZmZlcigpPC9lbT4gdG8gZml4IENvZGVTb25hciB3YXJuaW5nczwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgT1BBTVA8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+VXBkYXRlIDxlbT5IQUxfT1BBTVBfSW5pdCgpPC9lbT4gdG8gZml4IENvZGVTb25hciB3YXJuaW5nczwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgT1NQSTwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5VcGRhdGUgPGVtPkhBTF9PU1BJTV9Db25maWcoKTwvZW0+IHRvIGFkYXB0IHRoZSBhc3NlcnQgY2hlY2tzIHdpdGggT0NUT1NQSSBzZWxlY3RlZCBtb2RlPC9saT4KKzxsaT48c3Ryb25nPlRoZSBmb2xsb3dpbmcgdXBkYXRlcyBpbnRyb2R1Y2UgY29tcGF0aWJpbGl0eSBicmVhayB3aXRoIHByZXZpb3VzIHZlcnNpb24gb2YgSEFMIE9TUEkgZHJpdmVyPC9zdHJvbmc+Cis8dWw+Cis8bGk+VGhlIHdyYXAgZnVuY3Rpb25hbGl0eSBpcyBubyBtb3JlIHN1cHBvcnRlZCBieSB0aGUgU1RNMzJMNCsgcHJvZHVjdHMgOgorPHVsPgorPGxpPlJlbW92ZSBXcmFwU2l6ZSBmaWVsZCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gc3RydWN0dXJlIE9TUElfSW5pdFR5cGVEZWY8L2xpPgorPGxpPlJlbW92ZSBIQUxfT1NQSV9PUFRZUEVfV1JBUF9DRkcgdmFsdWUgZm9yIE9wZXJhdGlvblR5cGUgZmllbGQgd2l0aGluIHJlZ3VsYXIgY29tbWFuZCBzdHJ1Y3R1cmUgT1NQSV9SZWd1bGFyQ21kVHlwZURlZjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+VGhlIGRlbGF5IGJsb2NrIGNhbiBiZSBieXBhc3NlZCBpbiB0aGUgU1RNMzJMNCsgcHJvZHVjdHMgOgorPHVsPgorPGxpPkFkZCBEZWxheUJsb2NrQnlwYXNzIGZpZWxkIHdpdGhpbiB0aGUgaW5pdGlhbGl6YXRpb24gc3RydWN0dXJlIE9TUElfSW5pdFR5cGVEZWY8L2xpPgorPC91bD48L2xpPgorPGxpPlRoZSBtdWx0aXBsZXggbW9kZSBpcyBhbGxvd2VkIGluIHRoZSBPU1BJIElPIG1hbmFnZXIgZm9yIHRoZSBTVE0zMkw0KyAxTSBwcm9kdWN0cyA6Cis8dWw+Cis8bGk+QWRkIE1heFRyYW4gZmllbGQgd2l0aGluIHRoZSBpbml0aWFsaXphdGlvbiBzdHJ1Y3R1cmUgT1NQSV9Jbml0VHlwZURlZjwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgUkNDPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPlVwZGF0ZSBJU19SQ0NfUExMU0FJMU5fVkFMVUUoKSBhbmQgSVNfUkNDX1BMTFNBSTJOX1ZBTFVFKCkgbWFjcm9zIHdpdGggbmV3IFJDQ19QTExTQUkxTl9NVUxfOF8xMjdfU1VQUE9SVCBhbmQgUkNDX1BMTFNBSTJOX01VTF84XzEyN19TVVBQT1JUIGRlZmluaXRpb25zPC9saT4KKzxsaT5VcGRhdGUgUkNDX0hTSUNBTElCUkFUSU9OX0RFRkFVTFQgZGVmaW5pdGlvbjwvbGk+Cis8bGk+VXBkYXRlIF9fSEFMX1JDQ19BUEIxX0ZPUkNFX1JFU0VUKCkgYW5kIF9fSEFMX1JDQ19BUEIxX1JFTEVBU0VfUkVTRVQoKSBtYWNyb3MgdG8gaGFuZGxlIFJDQ19BUEIxUlNUUjEgYW5kIFJDQ19BUEIxUlNUUjIgdXBkYXRlczwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgU0RNTUM8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+QWRkIHN1cHBvcnQgb2YgU2FuaXRpemUgYW5kIEZUUklNL2Rpc2NhcmQgZnVuY3Rpb25zIGZvciBIQUwgZU1NQyBmdW5jdGlvbmFsaXR5PC9saT4KKzxsaT5BZGQgbmV3IEFQSSBmdW5jdGlvbiA8ZW0+SEFMX01NQ19HZXRDYXJkRXh0Q1NEKCk8L2VtPiB0byBhbGxvdyB0aGUgdXNlciBhcHBsaWNhdGlvbiB0byBnZXQgdGhlIEV4dGVuZGVkIENTRCByZWdpc3RlcjwvbGk+Cis8bGk+VXBkYXRlIDxlbT5IQUxfTU1DX0luaXRDYXJkKCk8L2VtPiBhbmQgPGVtPkhBTF9TRF9Jbml0Q2FyZCgpPC9lbT4gdG8gZml4IENvZGVTb25hciB3YXJuaW5nczwvbGk+Cis8bGk+VXBkYXRlIDxlbT5NTUNfUmVhZEV4dENTRCgpPC9lbT4gYW5kIDxlbT5NTUNfUHdyQ2xhc3NVcGRhdGUoKTwvZW0+IHRvIGZpeCBTVE0zMkN1YmVJREUgY29tcGlsYXRpb24gd2FybmluZ3M8L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIFNNQVJUQ0FSRDwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5VcGRhdGUgTkFDSyBtYW5hZ2VtZW50IGluIDxlbT5IQUxfU01BUlRDQVJEX1RyYW5zbWl0KCk8L2VtPiwgPGVtPkhBTF9TTUFSVENBUkRfVHJhbnNtaXRfSVQoKTwvZW0+IGFuZCA8ZW0+SEFMX1NNQVJUQ0FSRF9UcmFuc21pdF9ETUEoKTwvZW0+IGZ1bmN0aW9uczwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgU01CVVM8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+VXBkYXRlIG9mIEhBTCBTTUJVUyBkcml2ZXIgdG8gY29ycmVjdCBzb21lIHR5cG8gaW4gY29tbWVudHM8L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIFNQSTwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5Db3JyZWN0IE1JU1JBIEM6MjAxMi1SdWxlLTE3Ljggd2FybmluZyBpbiBIQUwgU1BJIGRyaXZlcjwvbGk+Cis8bGk+VXBkYXRlIDxlbT5IQUxfU1BJX1RyYW5zbWl0KCk8L2VtPiwgPGVtPkhBTF9TUElfUmVjZWl2ZSgpPC9lbT4gZnVuY3Rpb25zIHRvIGZpeCBpbiAzLXdpcmVzIGNvbW11bmljYXRpb24gKGRpc2FibGUgYW5kIGVuYWJsZSBTUEkpPC9saT4KKzxsaT5VcGRhdGUgPGVtPlNQSV9ETUFSZWNlaXZlQ3BsdCgpPC9lbT4gdG8gZGlzYWJsZSBSeC9UeCBETUEgUmVxdWVzdCAoZG9uZSBieSBkZWZhdWx0IHRvIGhhbmRsZSB0aGUgY2FzZSBtYXN0ZXIgcnggZGlyZWN0aW9uIDIgbGluZXMpPC9saT4KKzxsaT5VcGRhdGUgSEFMIFNQSSBkcml2ZXIgdG8gZml4IHRpbWVvdXQgbWFuYWdlbWVudCBpbnNpZGUgU1BJIERNQSB4ZmVyIGNvbXBsZXRlIGhhbmRsZXI8L2xpPgorPGxpPlVwZGF0ZSA8ZW0+SEFMX1NQSV9Jbml0KCk8L2VtPiB0byBoYW5kbGUgYXNzZXJ0IG9uIEJhdWRSYXRlUHJlc2NhbGVyIGluIFNsYXZlIE1vdG9yb2xhIG1vZGU8L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIFRJTTwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5Db3JyZWN0IE1JU1JBIEM6MjAxMi1SdWxlLTIuMiB3YXJuaW5nIGluIEhBTCBUSU0gZHJpdmVyPC9saT4KKzxsaT5VcGRhdGUgRE1BIG1hbmFnZW1lbnQgd2hlbiBETUEgcmVxdWVzdHMgYXJlIHVzZWQgZm9yIHNldmVyYWwgY2hhbm5lbHMgb2YgdGhlIHNhbWUgdGltZXI8L2xpPgorPGxpPlVwZGF0ZSA8ZW0+SEFMX1RJTV9JQ19TdG9wX0RNQSgpPC9lbT4gdG8gc3RvcCBETUEgcHJpb3IgdG8gZGlzYWJsaW5nIHRoZSBjaGFubmVsPC9saT4KKzxsaT5BZGQgbmV3IDxlbT5IQUxfVElNX0RNQUJ1cnN0X011bHRpV3JpdGVTdGFydCgpPC9lbT4gYW5kIDxlbT5IQUxfVElNX0RNQUJ1cnN0X011bHRpUmVhZFN0YXJ0KCk8L2VtPiBBUEkgaW4gSEFMIFRJTSBkcml2ZXI8L2xpPgorPGxpPlVwZGF0ZSBhbGwgPGVtPkhBTF9USU1feHh4X1N0YXJ0KCk8L2VtPiBmdW5jdGlvbnMgdG8gYWxsb3cgdGhlIGNoZWNrIG9mIHRoZSBUSU14X1NNQ1IuU01TIGJpdCBpZiB0aGUgdGltZXIgaW5zdGFuY2UgaXMgc2xhdmUgbW9kZSBjYXBhYmxlPC9saT4KKzxsaT5VcGRhdGUgcmVmZXJlbmNlcyB0byBUSU1fRE1BQkFTRV9BRjEgYW5kIFRJTV9ETUFCQVNFX0FGMjwvbGk+Cis8bGk+VXBkYXRlIDxlbT5IQUxfVElNX0RNQUJ1cnN0X1dyaXRlU3RvcCgpPC9lbT4gYW5kIDxlbT5IQUxfVElNX0RNQUJ1cnN0X1JlYWRTdG9wKCk8L2VtPiB0byBtb2RpZnkgY2FsbHMgdG8gSEFMX0RNQV9BYm9ydF9JVCgpLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgVFNDPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPkNvcnJlY3QgTUlTUkEgQzoyMDEyLVJ1bGUtMi40IHdhcm5pbmcgaW4gSEFMIFRTQyBkcml2ZXI8L2xpPgorPGxpPlVwZGF0ZSBJU19UU0NfR1JPVVAoKSBtYWNybyBkZWZpbml0aW9uIHRvIG1hbmFnZSB3aGVuIGZpZWxkIENoYW5uZWxJT3Mgb3IgU2hpZWxkSU9zIG9yIFNhbXBsaW5nSU9zIGFyZSBzZXQgdG8gMDwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgVUFSVDwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5SZXdvcmsgQlJSIHJlZ2lzdGVyIHZhbHVlIGNvbXB1dGF0aW9uIGluIDxlbT5IQUxfVUFSVF9Jbml0KCk8L2VtPiBmb3IgUk9NIHNpemUgZ2FpbjwvbGk+Cis8bGk+VXBkYXRlIDxlbT5IQUxfVUFSVF9JUlFIYW5kbGVyKCk8L2VtPiB0byBoYW5kbGUgVUFSVCBSZWNlaXZlIFRpbWVvdXQgaW50ZXJydXB0aW9uIGluIHRoZSBJU1IgZnVuY3Rpb248L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIFVTQVJUPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPlVwZGF0ZSA8ZW0+SEFMX1VTQVJURXhfRGlzYWJsZVNsYXZlTW9kZSgpPC9lbT4gdG8gY29ycmVjdCBTbGF2ZU1vZGUgZmllbGQgdmFsdWU8L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIFdXREc8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+VXBkYXRlIFdXREcgY2xvY2sgZnJlcXVlbmN5LCBtaW4sIGFuZCBtYXggdGltZW91dCB2YWx1ZXMgaW4gaGVhZGVyIGRlc2NyaXB0aW9uPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+Cis8aDMgaWQ9ImxsLWRyaXZlcnMtdXBkYXRlcyI+PHN0cm9uZz5MTCBEcml2ZXJzPC9zdHJvbmc+IHVwZGF0ZXM8L2gzPgorPHVsPgorPGxpPjxzdHJvbmc+TEwgRk1DPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPkNvcnJlY3QgTUlTUkEgQzoyMDEyLVJ1bGUtNy4yIHdhcm5pbmcgaW4gTEwgRk1DIGRyaXZlcjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5MTCBHUElPPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPkZpeCA8ZW0+TExfR1BJT19Ub2dnbGVQaW4oKTwvZW0+IHRvIG1hbmFnZSBzZXZlcmFsIHBpbnM8L2xpPgorPGxpPlVwZGF0ZSA8ZW0+TExfR1BJT19Ub2dnbGVQaW4oKTwvZW0+IHRvIHVzZSB0aGUgQlNSUiByZWdpc3RlciByYXRoZXIgdGhhbiByZWFkaW5nIC8gbW9kaWZ5aW5nIHRoZSBPRFIuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkxMIEkyQzwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5VcGRhdGUgb2YgTEwgSTJDIGRyaXZlciB0byBjb3JyZWN0IHNvbWUgdHlwbyBpbiBjb21tZW50czwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5MTCBSQ0M8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+VXBkYXRlIExMX1JDQ19IU0lfU2V0Q2FsaWJUcmltbWluZyBkZWZpbml0aW9uPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkxMIFRJTTwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5VcGRhdGUgUmVwZXRpdGlvbkNvdW50ZXIgcGFyYW1ldGVyIGluIDxlbT5MTF9USU1fU3RydWN0SW5pdCgpPC9lbT48L2xpPgorPGxpPkludmVydCBMTF9USU1fQ09VTlRFUk1PREVfQ0VOVEVSX0RPV04gYW5kIExMX1RJTV9DT1VOVEVSTU9ERV9DRU5URVJfVVAgZGVmaW5pdGlvbnM8L2xpPgorPC91bD48L2xpPgorPC91bD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+Cis8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMjciIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjI3IiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuMTEuMSAvIDA3LUZlYnJ1YXJ5LTIwMjA8L2xhYmVsPgorPGRpdj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEiPk1haW4gQ2hhbmdlczwvaDI+Cis8dWw+Cis8bGk+UGF0Y2ggcmVsZWFzZSBvZiA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyPC9zdHJvbmc+IGRyaXZlcnMgdG8gaW5jbHVkZSBsYXRlc3QgY29ycmVjdGlvbnM8L2xpPgorPC91bD4KKzxoMiBpZD0iY29udGVudHMtMSI+Q29udGVudHM8L2gyPgogPHA+PHN0cm9uZz48c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+SEFMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgogPHVsPgogPGxpPjxzdHJvbmc+SEFMIEdQSU88L3N0cm9uZz4gZHJpdmVyCkBAIC05NSw3ICsyNjUsNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjI2IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24yNiIgYXJpYS1oaWRkZW49InRydWUiPlYxLjExLjAgLyAyMi1Ob3ZlbWJlci0yMDE5PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0xIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMiI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5SZWxlYXNlIG9mIDxzdHJvbmc+SEFMIGFuZCBMb3cgTGF5ZXI8L3N0cm9uZz4gZHJpdmVycyB0byBhZGQgc3VwcG9ydCBvZiA8c3Ryb25nPlNUTTMyTDRQNXh4L1NUTTMyTDRRNXh4PC9zdHJvbmc+IGRldmljZXMKIDx1bD4KQEAgLTEwNSw3ICsyNzUsNyBAQAogPC9saT4KIDxsaT5Db3JyZWN0aW9uIG9mIHNldmVyYWwgaXNzdWVzIGFwcGxpY2FibGUgdG8gb3RoZXIgZGV2aWNlczwvbGk+CiA8L3VsPgotPGgyIGlkPSJjb250ZW50cy0xIj5Db250ZW50czwvaDI+Cis8aDIgaWQ9ImNvbnRlbnRzLTIiPkNvbnRlbnRzPC9oMj4KIDxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KIDx1bD4KIDxsaT48c3Ryb25nPkhBTDwvc3Ryb25nPiBkcml2ZXIKQEAgLTI2Nyw3ICs0MzcsNyBAQAogPGxpPjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5fX0hBTF9SQ0NfT1NQSTJfSVNfQ0xLX0RJU0FCTEVEKCk8L3NwYW4+PGJyIC8+CiA8L2xpPgogPC91bD48L2xpPgotPGxpPkNvcnJlY3QgTUlTUkFDMjAxMi1SdWxlLTIxLjEgd2FybmluZyBpbiB1cGRhdGluZyB0aGUgZGVmaW5lcyBjcmVhdGVkIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiBpbiBzdG0zMmw0eHhfaGFsX3JjYy5oIGFuZCBzdG0zMmw0eHhfaGFsX3JjY19leC5oPC9saT4KKzxsaT5Db3JyZWN0IE1JU1JBIEM6MjAxMi1SdWxlLTIxLjEgd2FybmluZyBpbiB1cGRhdGluZyB0aGUgZGVmaW5lcyBjcmVhdGVkIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiBpbiBzdG0zMmw0eHhfaGFsX3JjYy5oIGFuZCBzdG0zMmw0eHhfaGFsX3JjY19leC5oPC9saT4KIDwvdWw+PC9saT4KIDxsaT48c3Ryb25nPkhBTCBSTkc8L3N0cm9uZz4gZHJpdmVyCiA8dWw+CkBAIC0zMzQsMTUgKzUwNCwxNSBAQAogPGxpPlJlbW92ZSByZWR1bmRhbnQgY29uZGl0aW9uIG9uIDxlbT5VQVJUX0NMT0NLU09VUkNFX1VOREVGSU5FRDwvZW0+IGluIDxlbT5VQVJUX1NldENvbmZpZygpPC9lbT4gQVBJPC9saT4KIDxsaT5VcGRhdGUgSEFMX1VBUlRfVHJhbnNtaXQoKSBhbmQgSEFMX1VBUlRfUmVjZWl2ZSgpIGZ1bmN0aW9ucyB0byBhdm9pZCBkZWFkbG9jayBwcm9ibGVtIHdoaWxlIG1peGluZyBwb2xsaW5nIFRyYW5zbWl0IGFuZCBSZWNlaXZlIHJlcXVlc3RzPC9saT4KIDxsaT5VcGRhdGUgQVBJIGRlc2NyaXB0aW9uIG9mIEhBTF9VQVJUX1RyYW5zbWl0KCksIEhBTF9VQVJUX1JlY2VpdmUoKSwgSEFMX1VBUlRfVHJhbnNtaXRfSVQoKSwgSEFMX1VBUlRfUmVjZWl2ZV9JVCgpLCBIQUxfVUFSVF9UcmFuc21pdF9ETUEoKSwgSEFMX1VBUlRfUmVjZWl2ZV9ETUEoKTwvbGk+Ci08bGk+Q29ycmVjdCBNSVNSQUMyMDEyLVJ1bGUtMjEuMSB3YXJuaW5nIGluIHVwZGF0aW5nIHRoZSBkZWZpbmVzIGNyZWF0ZWQgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIGluIHN0bTMybDR4eF9oYWxfdWFydC5oIGFuZCBzdG0zMmw0eHhfaGFsX3VhcnRfZXguaDwvbGk+Ci08bGk+Q29ycmVjdCBNSVNSQUMyMDEyLVJ1bGUtMi4yX2Mgd2FybmluZyBpbiByZW1vdmluZyB1bm5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbnMgaW4gc3RtMzJsNHh4X2hhbF91YXJ0LmMgYW5kIHN0bTMybDR4eF9oYWxfdWFydF9leC5jPC9saT4KLTxsaT5Db3JyZWN0IE1JU1JBQzIwMTItUnVsZS0xOC40IGluIDxlbT5IQUxfVUFSVF9UcmFuc21pdCgpPC9lbT4gYW5kIDxlbT5IQUxfVUFSVF9SZWNlaXZlKCk8L2VtPiBBUElzIHNvIHRoYXQgYCs94oCZIG9wZXJhdG9yIGlzIG5vdCBhcHBsaWVkIHRvIGEgcG9pbnRlcjwvbGk+Ci08bGk+Q29ycmVjdCBNSVNSQUMyMDEyLVJ1bGUxNS43IHdhcm5pbmcgdG8gcmVtb3ZlIGFsbCBlbXB0eSBlbHNlIGNsYXVzZXMgaW4gc3RtMzJsNHh4X2hhbF91YXJ0LmMgYW5kIHN0bTMybDR4eF9oYWxfdWFydF9leC5oPC9saT4KLTxsaT5Db3JyZWN0IE1JU1JBQzIwMTItUnVsZS0xNy43IHdhcm5pbmcgaW4gYWxsIGNhbGxzIG9mIDxlbT5IQUxfRE1BX0Fib3J0KCk8L2VtPiBBUEkgc28gdGhhdCBpdHMgcmV0dXJuIHZhbHVlIGlzIG5vdCBkaXNjYXJkZWQ8L2xpPgotPGxpPkNvcnJlY3QgTUlTUkFDMjAxMi1SdWxlLTEzLjUgZm9yIGFsbCB0ZXN0cyB3aXRoIGxvZ2ljYWwgb3BlcmF0b3JzPC9saT4KLTxsaT5Db3JyZWN0IE1JU1JBQzIwMTItUnVsZS0xOC4xX3ggdG8gZW5zdXJlIG51bWVyYXRvcltdIGFuZCBkZW5vbWluYXRvcltdIGFycmF5cyBpbiBzdGF0aWMgZnVuY3Rpb24gPGVtPlVBUlRFeF9TZXROYkRhdGFUb1Byb2Nlc3MoKTwvZW0+IGFyZSBub3Qgb3V0IG9mIGJvdW5kczwvbGk+Ci08bGk+Q29ycmVjdCBNSVNSQUMyMDEyLVJ1bGUtMTAuNiB3YXJuaW5nIGluIHN1cHByZXNzaW5nIGltcGxpY2l0IHdpZGVuaW5nIGFuZCB1bnVzZWQgdmFsdWUgaW4gPGVtPlVBUlRfU2V0Q29uZmlnKCk8L2VtPiBBUEkgaW4gc3RtMzJsNHh4X2hhbF91YXJ0LmM8L2xpPgotPGxpPkNvcnJlY3QgTUlTUkFDMjAxMi1SdWxlLTEwLjRfYSB3YXJuaW5nIGluIHN1cHByZXNzaW5nIHN1cGVyZmx1b3VzIG1hc2sgaW4gPGVtPkhBTF9VQVJUX1JlY2VpdmUoKTwvZW0+IEFQSSBpbiBzdG0zMmw0eHhfaGFsX3VhcnQuYzwvbGk+Cis8bGk+Q29ycmVjdCBNSVNSQSBDOjIwMTItUnVsZS0yMS4xIHdhcm5pbmcgaW4gdXBkYXRpbmcgdGhlIGRlZmluZXMgY3JlYXRlZCB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gaW4gc3RtMzJsNHh4X2hhbF91YXJ0LmggYW5kIHN0bTMybDR4eF9oYWxfdWFydF9leC5oPC9saT4KKzxsaT5Db3JyZWN0IE1JU1JBIEM6MjAxMi1SdWxlLTIuMl9jIHdhcm5pbmcgaW4gcmVtb3ZpbmcgdW5uZWNlc3NhcnkgaW5pdGlhbGl6YXRpb25zIGluIHN0bTMybDR4eF9oYWxfdWFydC5jIGFuZCBzdG0zMmw0eHhfaGFsX3VhcnRfZXguYzwvbGk+Cis8bGk+Q29ycmVjdCBNSVNSQSBDOjIwMTItUnVsZS0xOC40IGluIDxlbT5IQUxfVUFSVF9UcmFuc21pdCgpPC9lbT4gYW5kIDxlbT5IQUxfVUFSVF9SZWNlaXZlKCk8L2VtPiBBUElzIHNvIHRoYXQgYCs94oCZIG9wZXJhdG9yIGlzIG5vdCBhcHBsaWVkIHRvIGEgcG9pbnRlcjwvbGk+Cis8bGk+Q29ycmVjdCBNSVNSQSBDOjIwMTItUnVsZTE1Ljcgd2FybmluZyB0byByZW1vdmUgYWxsIGVtcHR5IGVsc2UgY2xhdXNlcyBpbiBzdG0zMmw0eHhfaGFsX3VhcnQuYyBhbmQgc3RtMzJsNHh4X2hhbF91YXJ0X2V4Lmg8L2xpPgorPGxpPkNvcnJlY3QgTUlTUkEgQzoyMDEyLVJ1bGUtMTcuNyB3YXJuaW5nIGluIGFsbCBjYWxscyBvZiA8ZW0+SEFMX0RNQV9BYm9ydCgpPC9lbT4gQVBJIHNvIHRoYXQgaXRzIHJldHVybiB2YWx1ZSBpcyBub3QgZGlzY2FyZGVkPC9saT4KKzxsaT5Db3JyZWN0IE1JU1JBIEM6MjAxMi1SdWxlLTEzLjUgZm9yIGFsbCB0ZXN0cyB3aXRoIGxvZ2ljYWwgb3BlcmF0b3JzPC9saT4KKzxsaT5Db3JyZWN0IE1JU1JBIEM6MjAxMi1SdWxlLTE4LjFfeCB0byBlbnN1cmUgbnVtZXJhdG9yW10gYW5kIGRlbm9taW5hdG9yW10gYXJyYXlzIGluIHN0YXRpYyBmdW5jdGlvbiA8ZW0+VUFSVEV4X1NldE5iRGF0YVRvUHJvY2VzcygpPC9lbT4gYXJlIG5vdCBvdXQgb2YgYm91bmRzPC9saT4KKzxsaT5Db3JyZWN0IE1JU1JBIEM6MjAxMi1SdWxlLTEwLjYgd2FybmluZyBpbiBzdXBwcmVzc2luZyBpbXBsaWNpdCB3aWRlbmluZyBhbmQgdW51c2VkIHZhbHVlIGluIDxlbT5VQVJUX1NldENvbmZpZygpPC9lbT4gQVBJIGluIHN0bTMybDR4eF9oYWxfdWFydC5jPC9saT4KKzxsaT5Db3JyZWN0IE1JU1JBIEM6MjAxMi1SdWxlLTEwLjRfYSB3YXJuaW5nIGluIHN1cHByZXNzaW5nIHN1cGVyZmx1b3VzIG1hc2sgaW4gPGVtPkhBTF9VQVJUX1JlY2VpdmUoKTwvZW0+IEFQSSBpbiBzdG0zMmw0eHhfaGFsX3VhcnQuYzwvbGk+CiA8L3VsPjwvbGk+CiA8bGk+PHN0cm9uZz5IQUwgVVNBUlQ8L3N0cm9uZz4gZHJpdmVyCiA8dWw+CkBAIC00MjQsOCArNTk0LDggQEAKIDwvdWw+PC9saT4KIDxsaT48c3Ryb25nPkxMIFVBUlQ8L3N0cm9uZz4gZHJpdmVyCiA8dWw+Ci08bGk+Q29ycmVjdCBNSVNSQUMyMDEyLVJ1bGUtMjEuMSB3YXJuaW5nIGluIHVwZGF0aW5nIHRoZSBkZWZpbmVzIGNyZWF0ZWQgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIGluIHN0bTMybDR4eF9sbF91YXJ0Lmg8L2xpPgotPGxpPkNvcnJlY3QgTUlTUkFDMjAxMi1SdWxlLTEyLjEgd2FybmluZyBpbiBhZGRpbmcgcGFyZW50aGVzZXMgYXJvdW5kIFJYVGhyZXNob2xkIGFuZCBUWFRocmVzaG9sZCBpbiA8ZW0+TExfTFBVQVJUX0NvbmZpZ0ZJRk9zVGhyZXNob2xkKCk8L2VtPiBBUEk8L2xpPgorPGxpPkNvcnJlY3QgTUlTUkEgQzoyMDEyLVJ1bGUtMjEuMSB3YXJuaW5nIGluIHVwZGF0aW5nIHRoZSBkZWZpbmVzIGNyZWF0ZWQgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIGluIHN0bTMybDR4eF9sbF91YXJ0Lmg8L2xpPgorPGxpPkNvcnJlY3QgTUlTUkEgQzoyMDEyLVJ1bGUtMTIuMSB3YXJuaW5nIGluIGFkZGluZyBwYXJlbnRoZXNlcyBhcm91bmQgUlhUaHJlc2hvbGQgYW5kIFRYVGhyZXNob2xkIGluIDxlbT5MTF9MUFVBUlRfQ29uZmlnRklGT3NUaHJlc2hvbGQoKTwvZW0+IEFQSTwvbGk+CiA8bGk+Q29ycmVjdCBjb21tZW50IG9uIEJCUiBjaGVjayBpbiBzdG0zMmw0eHhfbGxfdWFydC5jPC9saT4KIDxsaT5BZGQgbWFzayBpbiA8ZW0+TExfTFBVQVJUX1JlY2VpdmVEYXRhOCgpPC9lbT4gQVBJIGluIHN0bTMybDR4eF9sbF91YXJ0LmggdG8gZW5zdXJlIHByb3BlciBjYXN0IG9wZXJhdGlvbjwvbGk+CiA8bGk+RW5zdXJlIHByb3BlciByZXR1cm4gdmFsdWUgaW4gPGVtPkxMX0xQVUFSVF9HZXRCYXVkUmF0ZSgpPC9lbT4gQVBJIGluIHN0bTMybDR4eF9sbF91YXJ0Lmg8L2xpPgpAQCAtNDQ1LDExICs2MTUsMTEgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24yMiIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMjIiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4xMC4wIC8gMDMtQXByaWwtMjAxOTwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMiI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTMiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+RGVsaXZlcnkgb2YgdGhlIG5ldyBIQUwgTU1DIGRyaXZlcjwvbGk+CiA8L3VsPgotPGgyIGlkPSJjb250ZW50cy0yIj5Db250ZW50czwvaDI+Cis8aDIgaWQ9ImNvbnRlbnRzLTMiPkNvbnRlbnRzPC9oMj4KIDxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KIDx1bD4KIDxsaT48c3Ryb25nPkhBTCBBREM8L3N0cm9uZz4gZHJpdmVyCkBAIC03MzcsMTMgKzkwNywxMyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjIxIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24yMSIgYXJpYS1oaWRkZW49InRydWUiPlYxLjkuMCAvIDI3LUp1bHktMjAxODwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMyI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTQiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+UmVsZWFzZSBvZsKgPHN0cm9uZz5IQUwgYW5kIExvdyBMYXllciBkcml2ZXJzPC9zdHJvbmc+IHRvIGFkZCBzdXBwb3J0IG9mIDxzdHJvbmc+U1RNMzJMNDEyeHgvU1RNMzJMNDIyeHg8L3N0cm9uZz48L2xpPgogPGxpPlN1cGVyc2V0IGZlYXR1cmVzIGRldmljZSBTVE0zMkw0MjJ4eCBBUEkgVXNlciBNYW51YWwgYXZhaWxhYmxlIChTVE0zMkw0MjJ4eF9Vc2VyX01hbnVhbC5jaG0pwqDCoDwvbGk+CiA8bGk+TUlTUkEgQzoyMDEyIGNvcnJlY3Rpb25zPC9saT4KIDwvdWw+Ci08aDIgaWQ9ImNvbnRlbnRzLTMiPkNvbnRlbnRzPC9oMj4KKzxoMiBpZD0iY29udGVudHMtNCI+Q29udGVudHM8L2gyPgogPHA+PHN0cm9uZz48c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+SEFMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgogPHA+TUlTUkEgQzoyMDEyIGNvcnJlY3Rpb25zIGxpc3RlZCBoZXJlYWZ0ZXIgYXJlIGFwcGxpY2FibGUgdG8gTEwgZHJpdmVyIGFzIHdlbGwuPC9wPgogPHVsPgpAQCAtNzcxLDcgKzk0MSw3IEBACiA8L3VsPjwvbGk+CiA8bGk+PHN0cm9uZz5IQUwgQ0FOPC9zdHJvbmc+IGRyaXZlcsKgCiA8dWw+Ci08bGk+Q29ycmVjdMKgTUlTUkFDOjIwMTIgd2FybmluZ3MgcmVwb3J0ZWQgYnkgcnVsZXMgMi4yX2MsIDEwLjMsIDEwLjRfYSwgMTAuNiwgMTIuMiwgMTMuMywgMTMuNSwgMTUuNywgMTcuNywgMTguMV9iPC9saT4KKzxsaT5Db3JyZWN0wqBNSVNSQSBDOjIwMTIgd2FybmluZ3MgcmVwb3J0ZWQgYnkgcnVsZXMgMi4yX2MsIDEwLjMsIDEwLjRfYSwgMTAuNiwgMTIuMiwgMTMuMywgMTMuNSwgMTUuNywgMTcuNywgMTguMV9iPC9saT4KIDxsaT5zdG0zMmw0eHhfaGFsX2Nhbi5jLMKgc3RtMzJsNHh4X2hhbF9jYW4uaAogPHVsPgogPGxpPlR4IGFib3J0IHByb2NlZHVyZSBjb3JyZWN0aW9uPC9saT4KQEAgLTc4NCw3ICs5NTQsNyBAQAogPC91bD48L2xpPgogPGxpPjxzdHJvbmc+SEFMIENPTVA8L3N0cm9uZz4gZHJpdmVyCiA8dWw+Ci08bGk+Q29ycmVjdMKgTUlTUkFDOjIwMTIgd2FybmluZ3MgcmVwb3J0ZWQgYnkgcnVsZXMgMTAuMSwgMTAuMywgMTAuNCwgMTMuNTwvbGk+Cis8bGk+Q29ycmVjdMKgTUlTUkEgQzoyMDEyIHdhcm5pbmdzIHJlcG9ydGVkIGJ5IHJ1bGVzIDEwLjEsIDEwLjMsIDEwLjQsIDEzLjU8L2xpPgogPGxpPnN0bTMybDR4eF9oYWxfY29tcC5jCiA8dWw+CiA8bGk+Q2hhbmdlIG9mwqB0aW1lLW91dCBkdXJhdGlvbiBjb21wdXRhdGlvbiB3aGVuIGV4cHJlc3NlZCBpbiBtaWNyb3NlY29uZHMgdG8gbWFuYWdlIGxvdyBzeXN0ZW0gY2xvY2sgZnJlcXVlbmNpZXM8L2xpPgpAQCAtODAxLDcgKzk3MSw3IEBACiA8L3VsPjwvbGk+CiA8bGk+PHN0cm9uZz5IQUwgREFDPC9zdHJvbmc+IGRyaXZlcgogPHVsPgotPGxpPkNvcnJlY3TCoE1JU1JBQzoyMDEyd2FybmluZ3M8L2xpPgorPGxpPkNvcnJlY3TCoE1JU1JBIEM6MjAxMndhcm5pbmdzPC9saT4KIDwvdWw+PC9saT4KIDxsaT48c3Ryb25nPkhBTCBEQ01JPC9zdHJvbmc+IGRyaXZlcgogPHVsPgpAQCAtOTI5LDcgKzEwOTksNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjE5IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xOSIgYXJpYS1oaWRkZW49InRydWUiPlYxLjguMyAvIDIyLU1heS0yMDE4PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy00Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtNSI+TWFpbiBDaGFuZ2VzPC9oMj4KIDxwPk1haW50ZW5hbmNlIFJlbGVhc2Ugb2YgPHN0cm9uZz5IQUwgYW5kIExvdyBMYXllciBkcml2ZXJzPC9zdHJvbmc+PC9wPgogPHA+PHN0cm9uZz5BZGQgc3VwcG9ydCBvZiBIQUwgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZlYXR1cmU8L3N0cm9uZz48L3A+CiA8dWw+CkBAIC05MzgsOCArMTEwOCw4IEBACiA8bGk+PHA+VGhlIGZlYXR1cmUgbWF5IGJlIGVuYWJsZWQgaW5kaXZpZHVhbGx5IHBlciBIQUwgPGVtPlBQUDwvZW0+IGRyaXZlciBieSBzZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGRlZmluaXRpb24gVVNFX0hBTF88c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+UFBQPC9zcGFuPl9SRUdJU1RFUl9DQUxMQkFDS1MgdG8gwqAxVSBpbiBzdG0zMmw0eHhfaGFsX2NvbmYuaCBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gZmlsZSAodGVtcGxhdGUgZmlsZSBzdG0zMmw0eHhfaGFsX2NvbmZfdGVtcGxhdGUuaCBhdmFpbGFibGUgZnJvbSDCoERyaXZlcnMvU1RNMzJMNHh4X0hBTF9Ecml2ZXIvSW5jKTwvcD48L2xpPgogPGxpPjxwPk9uY2UgZW5hYmxlZCwgdGhlIHVzZXIgYXBwbGljYXRpb24gbWF5IHJlc29ydCB0byBIQUxfUFBQX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBzcGVjaWZpYyBjYWxsYmFjayBmdW5jdGlvbihzKSBhbmQgdW5yZWdpc3RlciBpdCh0aGVtKSB3aXRoIEhBTF9QUFBfVW5SZWdpc3RlckNhbGxiYWNrKCkuPC9wPjwvbGk+CiA8L3VsPgotPHA+TUlTUkFDLTIwMTIgY29ycmVjdGlvbnM8L3A+Ci08aDIgaWQ9ImNvbnRlbnRzLTQiPkNvbnRlbnRzPC9oMj4KKzxwPk1JU1JBIEM6MjAxMiBjb3JyZWN0aW9uczwvcD4KKzxoMiBpZD0iY29udGVudHMtNSI+Q29udGVudHM8L2gyPgogPHA+PHN0cm9uZz48c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+SEFMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgogPHVsPgogPGxpPjxwPjxzdHJvbmc+SEFMIGdlbmVyaWM8L3N0cm9uZz4gZHJpdmVyPC9wPgpAQCAtMTI4NywxMSArMTQ1NywxMSBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjEiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjEiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS44LjIgLyAyMi1EZWNlbWJlci0yMDE3PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy01Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtNiI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5NYWludGVuYW5jZSBSZWxlYXNlIG9mIDxzdHJvbmc+SEFMIGFuZCBMb3cgTGF5ZXIgZHJpdmVyczwvc3Ryb25nPjwvbGk+CiA8L3VsPgotPGgyIGlkPSJjb250ZW50cy01Ij5Db250ZW50czwvaDI+Cis8aDIgaWQ9ImNvbnRlbnRzLTYiPkNvbnRlbnRzPC9oMj4KIDxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KIDx1bD4KIDxsaT48c3Ryb25nPkhBTCBDQU48L3N0cm9uZz4gZHJpdmVyPC9saT4KQEAgLTEzNjksMTEgKzE1MzksMTEgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb241IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb241IiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuOC4xIC8gMTMtT2N0b2Jlci0yMDE3PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy02Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtNyI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5NYWludGVuYW5jZSBSZWxlYXNlIG9mIDxzdHJvbmc+SEFMIGFuZCBMb3cgTGF5ZXIgZHJpdmVyczwvc3Ryb25nPjwvbGk+CiA8L3VsPgotPGgyIGlkPSJjb250ZW50cy02Ij5Db250ZW50czwvaDI+Cis8aDIgaWQ9ImNvbnRlbnRzLTciPkNvbnRlbnRzPC9oMj4KIDxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KIDx1bD4KIDxsaT48cD48c3Ryb25nPkhBTMKgZ2VuZXJpYzwvc3Ryb25nPiBkcml2ZXI8L3A+CkBAIC0xNDUxLDcgKzE2MjEsNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjYiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjYiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS44LjAgLyAyNS1BdWd1c3QtMjAxNzwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtNyI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTgiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+PHA+UmVsZWFzZSBvZiA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyIGRyaXZlcnM8L3N0cm9uZz4gdG8gYWRkIHN1cHBvcnQgb2YgPHN0cm9uZz5TVE0zMkw0UjV4eC9TVE0zMkw0Ujd4eC9TVE0zMkw0Ujl4eC9TVE0zMkw0UzV4eC9TVE0zMkw0Uzd4eC9TVE0zMkw0Uzl4eDwvc3Ryb25nPiBkZXZpY2VzPC9wPjwvbGk+CiA8bGk+PHA+TmV3IE9jdG9TUEksIERTSSwgTFREQywgR0ZYTU1VIHBlcmlwaGVyYWxzIHN1cHBvcnRlZCBpbiA8c3Ryb25nPm5ldyBIQUwgT1NQSSwgSEFMIERTSSwgSEFMIExUREM8L3N0cm9uZz4gYW5kIDxzdHJvbmc+SEFMIEdGWE1NVTwvc3Ryb25nPiBkcml2ZXJzPC9wPjwvbGk+CkBAIC0xNzA4LDExICsxODc4LDExIEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uNyIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uNyIgYXJpYS1oaWRkZW49InRydWUiPlYxLjcuMiAvIDE2LUp1bmUtMjAxNzwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtOCI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTkiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+TWFpbnRlbmFuY2UgUmVsZWFzZSBvZiA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyIGRyaXZlcnM8L3N0cm9uZz48L2xpPgogPC91bD4KLTxoMiBpZD0iY29udGVudHMtNyI+Q29udGVudHM8L2gyPgorPGgyIGlkPSJjb250ZW50cy04Ij5Db250ZW50czwvaDI+CiA8cD48c3Ryb25nPjxzcGFuIGNsYXNzPSJ1bmRlcmxpbmUiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5IQUwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvc3Bhbj48L3N0cm9uZz48L3A+CiA8dWw+CiA8bGk+PHA+PHN0cm9uZz5IQUwgQ0FOPC9zdHJvbmc+IGRyaXZlcjwvcD4KQEAgLTE3NjQsMTEgKzE5MzQsMTEgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb244IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb244IiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuNy4xIC8gMjEtQXByaWwtMjAxNzwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtOSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEwIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPk1haW50ZW5hbmNlIFJlbGVhc2Ugb2YgPHN0cm9uZz5IQUwgYW5kIExvdyBMYXllciBkcml2ZXJzPC9zdHJvbmc+PC9saT4KIDwvdWw+Ci08aDIgaWQ9ImNvbnRlbnRzLTgiPkNvbnRlbnRzPC9oMj4KKzxoMiBpZD0iY29udGVudHMtOSI+Q29udGVudHM8L2gyPgogPHA+PHN0cm9uZz48c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+SEFMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgogPHVsPgogPGxpPjxwPjxzdHJvbmc+SEFMwqBnZW5lcmljPC9zdHJvbmc+IGRyaXZlcjwvcD4KQEAgLTE4MDgsNyArMTk3OCw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uOSIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uOSIgYXJpYS1oaWRkZW49InRydWUiPlYxLjcuMCAvIDE3LUZlYnJ1YXJ5LTIwMTc8L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEwIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTEiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+UmVsZWFzZSBvZiA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyIGRyaXZlcnM8L3N0cm9uZz4gdG8gYWRkIHN1cHBvcnQgb2YgPHN0cm9uZz5TVE0zMkw0OTZ4eC9TVE0zMkw0QTZ4eDwvc3Ryb25nPiBkZXZpY2VzPC9saT4KIDxsaT5OZXcgRENNSSwgRE1BMkQsIEhBU0ggcGVyaXBoZXJhbHMgc3VwcG9ydGVkIGluIDxzdHJvbmc+bmV3IEhBTCBEQ01JLCBIQUwgJmFtcDsgTEwgRE1BMkQgYW5kIEhBTCBIQVNIPC9zdHJvbmc+IGRyaXZlcnM8L2xpPgpAQCAtMTgxNyw3ICsxOTg3LDcgQEAKIDxsaT5TdXBlcnNldCBmZWF0dXJlcyBkZXZpY2UgU1RNMzJMNEE2eHggQVBJIFVzZXIgTWFudWFsIGF2YWlsYWJsZSAoU1RNMzJMNEE2eHhfVXNlcl9NYW51YWwuY2htKcKgPGJyIC8+CiA8L2xpPgogPC91bD4KLTxoMiBpZD0iY29udGVudHMtOSI+Q29udGVudHM8L2gyPgorPGgyIGlkPSJjb250ZW50cy0xMCI+Q29udGVudHM8L2gyPgogPHA+PHN0cm9uZz48c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+SEFMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgogPHVsPgogPGxpPjxzdHJvbmc+SEFMIERDTUk8L3N0cm9uZz4gZHJpdmVyIDxzdHJvbmc+KE5FVyk8L3N0cm9uZz46wqBzdG0zMmw0eHhfaGFsX2RjbWkuaC8uYyBmaWxlczwvbGk+CkBAIC0xOTE3LDEyICsyMDg3LDEyIEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMTAiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjEwIiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuNi4wIC8gMjgtT2N0b2Jlci0yMDE2PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0xMSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEyIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPlJlbGVhc2Ugb2YgPHN0cm9uZz5IQUwgYW5kIExvdyBMYXllciBkcml2ZXJzPC9zdHJvbmc+IHRvIGFkZCBzdXBwb3J0IG9mIDxzdHJvbmc+U1RNMzJMNDUxeHgvU1RNMzJMNDUyeHgvU1RNMzJMNDYyeHg8L3N0cm9uZz4gZGV2aWNlczwvbGk+CiA8bGk+U3VwZXJzZXQgZmVhdHVyZXMgZGV2aWNlIFNUTTMyTDQ2Mnh4IEFQSSBVc2VyIE1hbnVhbCBhdmFpbGFibGUgKFNUTTMyTDQ2Mnh4X1VzZXJfTWFudWFsLmNobSk8L2xpPgogPC91bD4KLTxoMiBpZD0iY29udGVudHMtMTAiPkNvbnRlbnRzPC9oMj4KKzxoMiBpZD0iY29udGVudHMtMTEiPkNvbnRlbnRzPC9oMj4KIDxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KIDx1bD4KIDxsaT48cD48c3Ryb25nPkhBTCBDUllQPC9zdHJvbmc+wqBkcml2ZXI8L3A+CkBAIC0xOTgyLDcgKzIxNTIsNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjExIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xMSIgYXJpYS1oaWRkZW49InRydWUiPlYxLjUuMiAvIDEyLVNlcHRlbWJlci0yMDE2PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9ImNvbnRlbnRzLTExIj5Db250ZW50czwvaDI+Cis8aDIgaWQ9ImNvbnRlbnRzLTEyIj5Db250ZW50czwvaDI+CiA8cD48c3Ryb25nPjxzcGFuIGNsYXNzPSJ1bmRlcmxpbmUiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5IQUwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvc3Bhbj48L3N0cm9uZz48L3A+CiA8dWw+CiA8bGk+PHA+PHN0cm9uZz5IQUwgQURDPC9zdHJvbmc+IGRyaXZlcjwvcD4KQEAgLTIwNzQsNyArMjI0NCw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMTIiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjEyIiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuNS4xIC8gMzEtTWF5LTIwMTY8L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0iY29udGVudHMtMTIiPkNvbnRlbnRzPC9oMj4KKzxoMiBpZD0iY29udGVudHMtMTMiPkNvbnRlbnRzPC9oMj4KIDxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KIDx1bD4KIDxsaT48cD48c3Ryb25nPkhBTCBBREM8L3N0cm9uZz4gZHJpdmVyPC9wPgpAQCAtMjEwMiwxMSArMjI3MiwxMSBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjEzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xMyIgYXJpYS1oaWRkZW49InRydWUiPlYxLjUuMCAvIDI5LUFwcmlsLTIwMTY8L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEyIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTMiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+TWFpbnRlbmFuY2UgUmVsZWFzZSBvZiA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyIGRyaXZlcnM8L3N0cm9uZz48L2xpPgogPC91bD4KLTxoMiBpZD0iY29udGVudHMtMTMiPkNvbnRlbnRzPC9oMj4KKzxoMiBpZD0iY29udGVudHMtMTQiPkNvbnRlbnRzPC9oMj4KIDxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KIDxwPkVuaGFuY2UgSEFMIGRlbGF5IGFuZCB0aW1lYmFzZSBpbXBsZW1lbnRhdGlvbjwvcD4KIDx1bD4KQEAgLTIzNTIsNyArMjUyMiw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMTQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjE0IiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuNC4wIC8gMjYtRmVicnVhcnktMjAxNjwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMTMiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy0xNCI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5SZWxlYXNlIG9mIDxzdHJvbmc+SEFMIGFuZCBMb3cgTGF5ZXIgZHJpdmVyczwvc3Ryb25nPiB0byBhZGQgc3VwcG9ydCBvZiA8c3Ryb25nPlNUTTMyTDQzMXh4L1NUTTMyTDQzMnh4L1NUTTMyTDQzM3h4L1NUTTMyTDQ0Mnh4L1NUTTMyTDQ0M3h4PC9zdHJvbmc+IGRldmljZXM8L2xpPgogPGxpPjxzdHJvbmc+TG93IExheWVyIGRyaXZlciBpbml0aWFsaXphdGlvbi9kZS1pbml0aWFsaXphdGlvbiBBUElzPC9zdHJvbmc+wqBhcHBsaWNhYmxlIHRvIGFsbCBTVE0zMkw0eHggZGV2aWNlczwvbGk+CkBAIC0yMzYwLDcgKzI1MzAsNyBAQAogPGxpPlN1cGVyc2V0IGZlYXR1cmVzIGRldmljZSBTVE0zMkw0NDN4eCBBUEkgVXNlciBNYW51YWwgYXZhaWxhYmxlIChTVE0zMkw0NDN4eF9Vc2VyX01hbnVhbC5jaG0pwqA8YnIgLz4KIDwvbGk+CiA8L3VsPgotPGgyIGlkPSJjb250ZW50cy0xNCI+Q29udGVudHM8L2gyPgorPGgyIGlkPSJjb250ZW50cy0xNSI+Q29udGVudHM8L2gyPgogPHA+PHN0cm9uZz48c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+SEFMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgogPHVsPgogPGxpPjxwPjxzdHJvbmc+SEFMPC9zdHJvbmc+IGdlbmVyaWMgdXBkYXRlPC9wPgpAQCAtMjQyNCw3ICsyNTk0LDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xNSIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMTUiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4zLjAgLyAyOS1KYW51YXJ5LTIwMTY8L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTE0Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTUiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+PHN0cm9uZz5OZXcgTG93IExheWVyIGRyaXZlciBpbml0aWFsaXphdGlvbi9kZS1pbml0aWFsaXphdGlvbiBBUElzPC9zdHJvbmc+CiA8dWw+CkBAIC0yNDM3LDcgKzI2MDcsNyBAQAogPC91bD48L2xpPgogPGxpPkZpeCAicGFyYW1ldGVyIHVudXNlZCIgR0NDIGNvbXBpbGF0aW9uIHdhcm5pbmdzIG9uIF9fd2VhayBmdW5jdGlvbnM8L2xpPgogPC91bD4KLTxoMiBpZD0iY29udGVudHMtMTUiPkNvbnRlbnRzPC9oMj4KKzxoMiBpZD0iY29udGVudHMtMTYiPkNvbnRlbnRzPC9oMj4KIDxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KIDx1bD4KIDxsaT48cD48c3Ryb25nPkhBTCBnZW5lcmljPC9zdHJvbmc+IHVwZGF0ZTwvcD4KQEAgLTI1ODUsNyArMjc1NSw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMTYiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjE2IiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuMi4wIC8gMjUtTm92ZW1iZXItMjAxNTwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMTUiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy0xNiI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT48c3Ryb25nPkhBTCBnZW5lcmljPC9zdHJvbmc+IHVwZGF0ZQogPHVsPgpAQCAtMjY0Miw3ICsyODEyLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xNyIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMTciIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4xLjEgLyAxNi1PY3RvYmVyLTIwMTU8L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTE2Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTciPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+PHA+PHN0cm9uZz5IQUwgZ2VuZXJpYzwvc3Ryb25nPiB1cGRhdGU8L3A+CiA8dWw+CkBAIC0yNjcyLDcgKzI4NDIsNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjIwIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24yMCIgYXJpYS1oaWRkZW49InRydWUiPlYxLjEuMCAvIDI2LVNlcHRlbWJlci0yMDE1PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0xNyI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTE4Ij5NYWluIENoYW5nZXM8L2gyPgogPHA+PHN0cm9uZz5BZGQgTG93IExheWVyIGRyaXZlcnMgYWxsb3dpbmcgcGVyZm9ybWFuY2UgYW5kIGZvb3RwcmludCBvcHRpbWl6YXRpb248L3N0cm9uZz48L3A+CiA8dWw+CiA8bGk+TG93IExheWVyIGRyaXZlcnMgQVBJcyBwcm92aWRlIHJlZ2lzdGVyIGxldmVsIHByb2dyYW1taW5nOiB0aGV5IHJlcXVpcmUgZGVlcCBrbm93bGVkZ2Ugb2YgcGVyaXBoZXJhbHMgZGVzY3JpYmVkIGluIFNUTTMyTDR4NiBSZWZlcmVuY2UgTWFudWFsPC9saT4KQEAgLTI2ODAsNyArMjg1MCw3IEBACiA8L3A+PC9saT4KIDxsaT48cD5Mb3cgTGF5ZXIgZHJpdmVycyBBUElzIGFyZSBpbXBsZW1lbnRlZCBhcyBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGluIG5ldyBJbmMvc3RtMzJsNHh4X2xsX3BwcC5oIGZpbGVzIGZvciBQUFAgcGVyaXBoZXJhbHMsIHRoZXJlIGlzIG5vIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgZWFjaCBzdG0zMmw0eHhfbGxfcHBwLmggZmlsZSBtdXN0IGJlIGluY2x1ZGVkIGluIHVzZXIgY29kZS48L3A+PC9saT4KIDwvdWw+Ci08aDIgaWQ9ImNvbnRlbnRzLTE2Ij5Db250ZW50czwvaDI+Cis8aDIgaWQ9ImNvbnRlbnRzLTE3Ij5Db250ZW50czwvaDI+CiA8dWw+CiA8bGk+PHA+PHN0cm9uZz5IQUwgQURDPC9zdHJvbmc+IHVwZGF0ZTwvcD4KIDx1bD4KQEAgLTI3NDUsNyArMjkxNSw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMTgiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjE4IiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuMC4wIC8gMjYtSnVuZS0yMDE1PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0xOCI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTE5Ij5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPkZpcnN0IG9mZmljaWFsIHJlbGVhc2Ugb2YgPHN0cm9uZz5TVE0zMkw0eHggSEFMIERyaXZlcnM8L3N0cm9uZz4gZm9yIDxzdHJvbmc+U1RNMzJMNDcxeHgvU1RNMzJMNDc1eHgvU1RNMzJMNDc2eHgvU1RNMzJMNDg1eHg8L3N0cm9uZz4gYW5kIDxzdHJvbmc+U1RNMzJMNDg2eHg8L3N0cm9uZz4gZGV2aWNlczwvbGk+CiA8L3VsPgpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWwuYyBiL1NyYy9zdG0zMmw0eHhfaGFsLmMKaW5kZXggZTllMzBhZS4uY2U4YWIxYiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWwuYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbC5jCkBAIC01Miw4ICs1Miw4IEBACiAgKiBAYnJpZWYgU1RNMzJMNHh4IEhBTCBEcml2ZXIgdmVyc2lvbiBudW1iZXIKICAgICovCiAjZGVmaW5lIFNUTTMyTDRYWF9IQUxfVkVSU0lPTl9NQUlOICAgKDB4MDFVKSAvKiE8IFszMToyNF0gbWFpbiB2ZXJzaW9uICovCi0jZGVmaW5lIFNUTTMyTDRYWF9IQUxfVkVSU0lPTl9TVUIxICAgKDB4MEJVKSAvKiE8IFsyMzoxNl0gc3ViMSB2ZXJzaW9uICovCi0jZGVmaW5lIFNUTTMyTDRYWF9IQUxfVkVSU0lPTl9TVUIyICAgKDB4MDFVKSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovCisjZGVmaW5lIFNUTTMyTDRYWF9IQUxfVkVSU0lPTl9TVUIxICAgKDB4MENVKSAvKiE8IFsyMzoxNl0gc3ViMSB2ZXJzaW9uICovCisjZGVmaW5lIFNUTTMyTDRYWF9IQUxfVkVSU0lPTl9TVUIyICAgKDB4MDBVKSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovCiAjZGVmaW5lIFNUTTMyTDRYWF9IQUxfVkVSU0lPTl9SQyAgICAgKDB4MDBVKSAvKiE8IFs3OjBdICByZWxlYXNlIGNhbmRpZGF0ZSAqLwogI2RlZmluZSBTVE0zMkw0WFhfSEFMX1ZFUlNJT04gICAgICAgICgoU1RNMzJMNFhYX0hBTF9WRVJTSU9OX01BSU4gIDw8IDI0VSlcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoU1RNMzJMNFhYX0hBTF9WRVJTSU9OX1NVQjEgPDwgMTZVKVwKQEAgLTg5LDcgKzg5LDcgQEAKICAgKi8KIF9fSU8gdWludDMyX3QgdXdUaWNrOwogdWludDMyX3QgdXdUaWNrUHJpbyA9ICgxVUwgPDwgX19OVklDX1BSSU9fQklUUyk7IC8qIEludmFsaWQgcHJpb3JpdHkgKi8KLXVpbnQzMl90IHV3VGlja0ZyZXEgPSBIQUxfVElDS19GUkVRX0RFRkFVTFQ7ICAvKiAxS0h6ICovCitIQUxfVGlja0ZyZXFUeXBlRGVmIHV3VGlja0ZyZXEgPSBIQUxfVElDS19GUkVRX0RFRkFVTFQ7ICAvKiAxS0h6ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjYwLDEwICsyNjAsMTEgQEAKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgIHN0YXR1cyA9IEhBTF9PSzsKIAotICBpZiAodXdUaWNrRnJlcSAhPSAwVSkKKyAgLyogQ2hlY2sgdXdUaWNrRnJlcSBmb3IgTWlzcmFDIDIwMTIgKGV2ZW4gaWYgdXdUaWNrRnJlcSBpcyBhIGVudW0gdHlwZSB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgdmFsdWUgemVybykqLworICBpZiAoKHVpbnQzMl90KXV3VGlja0ZyZXEgIT0gMFUpCiAgIHsKICAgICAvKkNvbmZpZ3VyZSB0aGUgU3lzVGljayB0byBoYXZlIGludGVycnVwdCBpbiAxbXMgdGltZSBiYXNpcyovCi0gICAgaWYgKEhBTF9TWVNUSUNLX0NvbmZpZyhTeXN0ZW1Db3JlQ2xvY2sgLyAoMTAwMFUgLyB1d1RpY2tGcmVxKSkgPT0gMFUpCisgICAgaWYgKEhBTF9TWVNUSUNLX0NvbmZpZyhTeXN0ZW1Db3JlQ2xvY2sgLyAoMTAwMFUgLyAodWludDMyX3QpdXdUaWNrRnJlcSkpID09IDBVKQogICAgIHsKICAgICAgIC8qIENvbmZpZ3VyZSB0aGUgU3lzVGljayBJUlEgcHJpb3JpdHkgKi8KICAgICAgIGlmIChUaWNrUHJpb3JpdHkgPCAoMVVMIDw8IF9fTlZJQ19QUklPX0JJVFMpKQpAQCAtMzI1LDcgKzMyNiw3IEBACiAgICovCiBfX3dlYWsgdm9pZCBIQUxfSW5jVGljayh2b2lkKQogewotICB1d1RpY2sgKz0gdXdUaWNrRnJlcTsKKyAgdXdUaWNrICs9ICh1aW50MzJfdCl1d1RpY2tGcmVxOwogfQogCiAvKioKQEAgLTM1MywxOCArMzU0LDI1IEBACiAgICogQHBhcmFtIEZyZXEgdGljayBmcmVxdWVuY3kKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TZXRUaWNrRnJlcSh1aW50MzJfdCBGcmVxKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NldFRpY2tGcmVxKEhBTF9UaWNrRnJlcVR5cGVEZWYgRnJlcSkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzICA9IEhBTF9PSzsKLSAgYXNzZXJ0X3BhcmFtKElTX1RJQ0tGUkVRKEZyZXEpKTsKKyAgSEFMX1RpY2tGcmVxVHlwZURlZiBwcmV2VGlja0ZyZXE7CiAKICAgaWYgKHV3VGlja0ZyZXEgIT0gRnJlcSkKICAgeworICAgIC8qIEJhY2sgdXAgdXdUaWNrRnJlcSBmcmVxdWVuY3kgKi8KKyAgICBwcmV2VGlja0ZyZXEgPSB1d1RpY2tGcmVxOworCisgICAgLyogVXBkYXRlIHV3VGlja0ZyZXEgZ2xvYmFsIHZhcmlhYmxlIHVzZWQgYnkgSEFMX0luaXRUaWNrKCkgKi8KKyAgICB1d1RpY2tGcmVxID0gRnJlcTsKKwogICAgIC8qIEFwcGx5IHRoZSBuZXcgdGljayBGcmVxICAqLwogICAgIHN0YXR1cyA9IEhBTF9Jbml0VGljayh1d1RpY2tQcmlvKTsKLSAgICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgICBpZiAoc3RhdHVzICE9IEhBTF9PSykKICAgICB7Ci0gICAgICB1d1RpY2tGcmVxID0gRnJlcTsKKyAgICAgIC8qIFJlc3RvcmUgcHJldmlvdXMgdGljayBmcmVxdWVuY3kgKi8KKyAgICAgIHV3VGlja0ZyZXEgPSBwcmV2VGlja0ZyZXE7CiAgICAgfQogICB9CiAKQEAgLTM3NSw3ICszODMsNyBAQAogICAqIEBicmllZiBSZXR1cm4gdGljayBmcmVxdWVuY3kuCiAgICogQHJldHZhbCB0aWNrIHBlcmlvZCBpbiBIegogICAqLwotdWludDMyX3QgSEFMX0dldFRpY2tGcmVxKHZvaWQpCitIQUxfVGlja0ZyZXFUeXBlRGVmIEhBTF9HZXRUaWNrRnJlcSh2b2lkKQogewogICByZXR1cm4gdXdUaWNrRnJlcTsKIH0KQEAgLTM5OSwxMCArNDA3LDEwIEBACiAgIC8qIEFkZCBhIHBlcmlvZCB0byBndWFyYW50eSBtaW5pbXVtIHdhaXQgKi8KICAgaWYgKHdhaXQgPCBIQUxfTUFYX0RFTEFZKQogICB7Ci0gICAgd2FpdCArPSAodWludDMyX3QpKHV3VGlja0ZyZXEpOworICAgIHdhaXQgKz0gKHVpbnQzMl90KXV3VGlja0ZyZXE7CiAgIH0KIAotICB3aGlsZSgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPCB3YWl0KQorICB3aGlsZSAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpIDwgd2FpdCkKICAgewogICB9CiB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2hhbF9hZGMuYyBiL1NyYy9zdG0zMmw0eHhfaGFsX2FkYy5jCmluZGV4IDI1NDIzNzIuLjIyNzUxNWUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsX2FkYy5jCisrKyBiL1NyYy9zdG0zMmw0eHhfaGFsX2FkYy5jCkBAIC0zLDcgKzMsNyBAQAogICAqIEBmaWxlICAgIHN0bTMybDR4eF9oYWxfYWRjLmMKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQogICAqIEBicmllZiAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcKLSAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRvciAoQURDKQorICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydGVyIChBREMpCiAgICogICAgICAgICAgcGVyaXBoZXJhbDoKICAgKiAgICAgICAgICAgKyBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCiAgICogICAgICAgICAgICAgKysgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gb2YgQURDCkBAIC0zMjMsOCArMzIzLDcgQEAKICNkZWZpbmUgQURDX0NGR1JfRklFTERTXzEgICgoQURDX0NGR1JfUkVTICAgIHwgQURDX0NGR1JfQUxJR04gICB8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfQ0ZHUl9DT05UICAgfCBBRENfQ0ZHUl9PVlJNT0QgIHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0RJU0NFTiB8IEFEQ19DRkdSX0RJU0NOVU0gfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NGR1JfRVhURU4gIHwgQURDX0NGR1JfRVhUU0VMKSkgICAvKiE8IEFEQ19DRkdSIGZpZWxkcyBvZiBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHVwZGF0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gbm8gcmVndWxhciBjb252ZXJzaW9uIGlzIG9uLWdvaW5nICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0VYVEVOICB8IEFEQ19DRkdSX0VYVFNFTCkpICAgLyohPCBBRENfQ0ZHUiBmaWVsZHMgb2YgcGFyYW1ldGVycyB0aGF0IGNhbiBiZSB1cGRhdGVkIHdoZW4gbm8gcmVndWxhciBjb252ZXJzaW9uIGlzIG9uLWdvaW5nICovCiAKIC8qIFRpbWVvdXQgdmFsdWVzIGZvciBBREMgb3BlcmF0aW9ucyAoZW5hYmxlIHNldHRsaW5nIHRpbWUsICAgICAgICAgICAgICAgICAgICovCiAvKiAgIGRpc2FibGUgc2V0dGxpbmcgdGltZSwgLi4uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtODc3LDEwICs4NzYsMTAgQEAKICAgICBoYWRjLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9BRENfTXNwRGVJbml0OyAvKiBMZWdhY3kgd2VhayBNc3BEZUluaXQgICovCiAgIH0KIAotICAvKiBEZUluaXQgdGhlIGxvdyBsZXZlbCBoYXJkd2FyZTogUkNDIGNsb2NrLCBOVklDICovCisgIC8qIERlSW5pdCB0aGUgbG93IGxldmVsIGhhcmR3YXJlICovCiAgIGhhZGMtPk1zcERlSW5pdENhbGxiYWNrKGhhZGMpOwogI2Vsc2UKLSAgLyogRGVJbml0IHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmU6IFJDQyBjbG9jaywgTlZJQyAqLworICAvKiBEZUluaXQgdGhlIGxvdyBsZXZlbCBoYXJkd2FyZSAqLwogICBIQUxfQURDX01zcERlSW5pdChoYWRjKTsKICNlbmRpZiAvKiBVU0VfSEFMX0FEQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIApAQCAtOTU3LDcgKzk1Niw4IEBACiAgICogQHBhcmFtICBwQ2FsbGJhY2sgcG9pbnRlciB0byB0aGUgQ2FsbGJhY2sgZnVuY3Rpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9BRENfUmVnaXN0ZXJDYWxsYmFjayhBRENfSGFuZGxlVHlwZURlZiAqaGFkYywgSEFMX0FEQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwQURDX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfQURDX1JlZ2lzdGVyQ2FsbGJhY2soQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMsIEhBTF9BRENfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQURDX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIApAQCAtMjE0Miw3ICsyMTQyLDcgQEAKICAgLyogRGlzYWJsZSBBREMgcGVyaXBoZXJhbCBpZiBjb252ZXJzaW9ucyBhcmUgZWZmZWN0aXZlbHkgc3RvcHBlZCAqLwogICBpZiAodG1wX2hhbF9zdGF0dXMgPT0gSEFMX09LKQogICB7Ci0gICAgLyogRGlzYWJsZSBBREMgRE1BIChBREMgRE1BIGNvbmZpZ3VyYXRpb24gb2YgY29udGlub3VzIHJlcXVlc3RzIGlzIGtlcHQpICovCisgICAgLyogRGlzYWJsZSBBREMgRE1BIChBREMgRE1BIGNvbmZpZ3VyYXRpb24gb2YgY29udGludW91cyByZXF1ZXN0cyBpcyBrZXB0KSAqLwogICAgIENMRUFSX0JJVChoYWRjLT5JbnN0YW5jZS0+Q0ZHUiwgQURDX0NGR1JfRE1BRU4pOwogCiAgICAgLyogRGlzYWJsZSB0aGUgRE1BIGNoYW5uZWwgKGluIGNhc2Ugb2YgRE1BIGluIGNpcmN1bGFyIG1vZGUgb3Igc3RvcCAgICAgICAqLwpAQCAtMjM0NSw3ICsyMzQ1LDcgQEAKICAgICAvKiBOb3RlOiBJbnRvIGNhbGxiYWNrIGZ1bmN0aW9uICJIQUxfQURDX0NvbnZDcGx0Q2FsbGJhY2soKSIsICAgICAgICAgICAgICovCiAgICAgLyogICAgICAgdG8gZGV0ZXJtaW5lIGlmIGNvbnZlcnNpb24gaGFzIGJlZW4gdHJpZ2dlcmVkIGZyb20gRU9DIG9yIEVPUywgICAqLwogICAgIC8qICAgICAgIHBvc3NpYmlsaXR5IHRvIHVzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiAgICAgICAgIiBpZiggX19IQUxfQURDX0dFVF9GTEFHKCZoYWRjLCBBRENfRkxBR19FT1MpKSAiICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICIgaWYgKCBfX0hBTF9BRENfR0VUX0ZMQUcoJmhhZGMsIEFEQ19GTEFHX0VPUykpICIgICAgICAgICAgICAgICAqLwogI2lmIChVU0VfSEFMX0FEQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgICBoYWRjLT5Db252Q3BsdENhbGxiYWNrKGhhZGMpOwogI2Vsc2UKQEAgLTI0NDUsOCArMjQ0NSw4IEBACiAKICAgICAvKiBJbmplY3RlZCBDb252ZXJzaW9uIGNvbXBsZXRlIGNhbGxiYWNrICovCiAgICAgLyogTm90ZTogIEhBTF9BRENFeF9JbmplY3RlZENvbnZDcGx0Q2FsbGJhY2sgY2FuIHJlc29ydCB0bwotICAgICAgICAgICAgICBpZiggX19IQUxfQURDX0dFVF9GTEFHKCZoYWRjLCBBRENfRkxBR19KRU9TKSkgb3IKLSAgICAgICAgICAgICAgaWYoIF9fSEFMX0FEQ19HRVRfRkxBRygmaGFkYywgQURDX0ZMQUdfSkVPQykpIHRvIGRldGVybWluZSB3aGV0aGVyCisgICAgICAgICAgICAgIGlmIChfX0hBTF9BRENfR0VUX0ZMQUcoJmhhZGMsIEFEQ19GTEFHX0pFT1MpKSBvcgorICAgICAgICAgICAgICBpZiAoX19IQUxfQURDX0dFVF9GTEFHKCZoYWRjLCBBRENfRkxBR19KRU9DKSkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKICAgICAgICAgICAgICAgaW50ZXJydXB0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZCBieSBlbmQgb2YgY29udmVyc2lvbiBvciBlbmQgb2YKICAgICAgICAgICAgICAgc2VxdWVuY2UuICAgICovCiAjaWYgKFVTRV9IQUxfQURDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQpAQCAtMjcwMSw3ICsyNzAxLDcgQEAKICAgSEFMX1N0YXR1c1R5cGVEZWYgdG1wX2hhbF9zdGF0dXMgPSBIQUxfT0s7CiAgIHVpbnQzMl90IHRtcE9mZnNldFNoaWZ0ZWQ7CiAgIHVpbnQzMl90IHRtcF9jb25maWdfaW50ZXJuYWxfY2hhbm5lbDsKLSAgX19JTyB1aW50MzJfdCB3YWl0X2xvb3BfaW5kZXggPSAwOworICBfX0lPIHVpbnQzMl90IHdhaXRfbG9vcF9pbmRleCA9IDBVTDsKICAgdWludDMyX3QgdG1wX2FkY19pc19jb252ZXJzaW9uX29uX2dvaW5nX3JlZ3VsYXI7CiAgIHVpbnQzMl90IHRtcF9hZGNfaXNfY29udmVyc2lvbl9vbl9nb2luZ19pbmplY3RlZDsKIApAQCAtMjczNyw3ICsyNzM3LDcgQEAKICAgLyogIC0gQ2hhbm5lbCByYW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIGlmIChMTF9BRENfUkVHX0lzQ29udmVyc2lvbk9uZ29pbmcoaGFkYy0+SW5zdGFuY2UpID09IDBVTCkKICAgewotICAgICNpZiAhZGVmaW5lZCAoVVNFX0ZVTExfQVNTRVJUKQorI2lmICFkZWZpbmVkIChVU0VfRlVMTF9BU1NFUlQpCiAgICAgLyogQ29ycmVzcG9uZGVuY2UgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBsZWdhY3kgZGVmaW5pdGlvbiBvZiAgICAgICAgICAgICAqLwogICAgIC8qIHNlcXVlbmNlciByYW5rcyBpbiBkaXJlY3QgbnVtYmVyIGZvcm1hdC4gVGhpcyBjb3JyZXNwb25kZW5jZSBjYW4gICAgICAgKi8KICAgICAvKiBiZSBkb25lIG9ubHkgb24gcmFua3MgMSB0byA1IGR1ZSB0byBsaXRlcmFsIHZhbHVlcy4gICAgICAgICAgICAgICAgICAgICovCkBAIC0yNzQ3LDE1ICsyNzQ3LDI1IEBACiAgICAgewogICAgICAgc3dpdGNoIChzQ29uZmlnLT5SYW5rKQogICAgICAgewotICAgICAgICBjYXNlIDJVOiBzQ29uZmlnLT5SYW5rID0gQURDX1JFR1VMQVJfUkFOS18yOyBicmVhazsKLSAgICAgICAgY2FzZSAzVTogc0NvbmZpZy0+UmFuayA9IEFEQ19SRUdVTEFSX1JBTktfMzsgYnJlYWs7Ci0gICAgICAgIGNhc2UgNFU6IHNDb25maWctPlJhbmsgPSBBRENfUkVHVUxBUl9SQU5LXzQ7IGJyZWFrOwotICAgICAgICBjYXNlIDVVOiBzQ29uZmlnLT5SYW5rID0gQURDX1JFR1VMQVJfUkFOS181OyBicmVhazsKKyAgICAgICAgY2FzZSAyVToKKyAgICAgICAgICBzQ29uZmlnLT5SYW5rID0gQURDX1JFR1VMQVJfUkFOS18yOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDNVOgorICAgICAgICAgIHNDb25maWctPlJhbmsgPSBBRENfUkVHVUxBUl9SQU5LXzM7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNFU6CisgICAgICAgICAgc0NvbmZpZy0+UmFuayA9IEFEQ19SRUdVTEFSX1JBTktfNDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA1VToKKyAgICAgICAgICBzQ29uZmlnLT5SYW5rID0gQURDX1JFR1VMQVJfUkFOS181OworICAgICAgICAgIGJyZWFrOwogICAgICAgICAvKiBjYXNlIDFVICovCi0gICAgICAgIGRlZmF1bHQ6IHNDb25maWctPlJhbmsgPSBBRENfUkVHVUxBUl9SQU5LXzE7IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHNDb25maWctPlJhbmsgPSBBRENfUkVHVUxBUl9SQU5LXzE7CisgICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgfQotICAgICNlbmRpZgorI2VuZGlmCiAKICAgICAvKiBTZXQgQURDIGdyb3VwIHJlZ3VsYXIgc2VxdWVuY2U6IGNoYW5uZWwgb24gdGhlIHNlbGVjdGVkIHNjYW4gc2VxdWVuY2UgcmFuayAqLwogICAgIExMX0FEQ19SRUdfU2V0U2VxdWVuY2VyUmFua3MoaGFkYy0+SW5zdGFuY2UsIHNDb25maWctPlJhbmssIHNDb25maWctPkNoYW5uZWwpOwpAQCAtMjgxMCwxOSArMjgyMCwyMyBAQAogICAgICAgewogICAgICAgICAvKiBTY2FuIGVhY2ggb2Zmc2V0IHJlZ2lzdGVyIHRvIGNoZWNrIGlmIHRoZSBzZWxlY3RlZCBjaGFubmVsIGlzIHRhcmdldGVkLiAqLwogICAgICAgICAvKiBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGUgY29ycmVzcG9uZGluZyBvZmZzZXQgbnVtYmVyIGlzIGRpc2FibGVkLiAgICAgICAqLwotICAgICAgICBpZihfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoTExfQURDX0dldE9mZnNldENoYW5uZWwoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfMSkpID09IF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnLT5DaGFubmVsKSkKKyAgICAgICAgaWYgKF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihMTF9BRENfR2V0T2Zmc2V0Q2hhbm5lbChoYWRjLT5JbnN0YW5jZSwgTExfQURDX09GRlNFVF8xKSkKKyAgICAgICAgICAgID09IF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnLT5DaGFubmVsKSkKICAgICAgICAgewogICAgICAgICAgIExMX0FEQ19TZXRPZmZzZXRTdGF0ZShoYWRjLT5JbnN0YW5jZSwgTExfQURDX09GRlNFVF8xLCBMTF9BRENfT0ZGU0VUX0RJU0FCTEUpOwogICAgICAgICB9Ci0gICAgICAgIGlmKF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihMTF9BRENfR2V0T2Zmc2V0Q2hhbm5lbChoYWRjLT5JbnN0YW5jZSwgTExfQURDX09GRlNFVF8yKSkgPT0gX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKHNDb25maWctPkNoYW5uZWwpKQorICAgICAgICBpZiAoX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKExMX0FEQ19HZXRPZmZzZXRDaGFubmVsKGhhZGMtPkluc3RhbmNlLCBMTF9BRENfT0ZGU0VUXzIpKQorICAgICAgICAgICAgPT0gX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKHNDb25maWctPkNoYW5uZWwpKQogICAgICAgICB7CiAgICAgICAgICAgTExfQURDX1NldE9mZnNldFN0YXRlKGhhZGMtPkluc3RhbmNlLCBMTF9BRENfT0ZGU0VUXzIsIExMX0FEQ19PRkZTRVRfRElTQUJMRSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYoX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKExMX0FEQ19HZXRPZmZzZXRDaGFubmVsKGhhZGMtPkluc3RhbmNlLCBMTF9BRENfT0ZGU0VUXzMpKSA9PSBfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoc0NvbmZpZy0+Q2hhbm5lbCkpCisgICAgICAgIGlmIChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoTExfQURDX0dldE9mZnNldENoYW5uZWwoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfMykpCisgICAgICAgICAgICA9PSBfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoc0NvbmZpZy0+Q2hhbm5lbCkpCiAgICAgICAgIHsKICAgICAgICAgICBMTF9BRENfU2V0T2Zmc2V0U3RhdGUoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfMywgTExfQURDX09GRlNFVF9ESVNBQkxFKTsKICAgICAgICAgfQotICAgICAgICBpZihfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoTExfQURDX0dldE9mZnNldENoYW5uZWwoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfNCkpID09IF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnLT5DaGFubmVsKSkKKyAgICAgICAgaWYgKF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihMTF9BRENfR2V0T2Zmc2V0Q2hhbm5lbChoYWRjLT5JbnN0YW5jZSwgTExfQURDX09GRlNFVF80KSkKKyAgICAgICAgICAgID09IF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnLT5DaGFubmVsKSkKICAgICAgICAgewogICAgICAgICAgIExMX0FEQ19TZXRPZmZzZXRTdGF0ZShoYWRjLT5JbnN0YW5jZSwgTExfQURDX09GRlNFVF80LCBMTF9BRENfT0ZGU0VUX0RJU0FCTEUpOwogICAgICAgICB9CkBAIC0yODYxLDcgKzI4NzUsOCBAQAogCiAgICAgICAvKiBJZiB0aGUgcmVxdWVzdGVkIGludGVybmFsIG1lYXN1cmVtZW50IHBhdGggaGFzIGFscmVhZHkgYmVlbiBlbmFibGVkLCAqLwogICAgICAgLyogYnlwYXNzIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3NpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIGlmICgoc0NvbmZpZy0+Q2hhbm5lbCA9PSBBRENfQ0hBTk5FTF9URU1QU0VOU09SKSAmJiAoKHRtcF9jb25maWdfaW50ZXJuYWxfY2hhbm5lbCAmIExMX0FEQ19QQVRIX0lOVEVSTkFMX1RFTVBTRU5TT1IpID09IDBVTCkpCisgICAgICBpZiAoKHNDb25maWctPkNoYW5uZWwgPT0gQURDX0NIQU5ORUxfVEVNUFNFTlNPUikKKyAgICAgICAgICAmJiAoKHRtcF9jb25maWdfaW50ZXJuYWxfY2hhbm5lbCAmIExMX0FEQ19QQVRIX0lOVEVSTkFMX1RFTVBTRU5TT1IpID09IDBVTCkpCiAgICAgICB7CiAgICAgICAgIGlmIChBRENfVEVNUEVSQVRVUkVfU0VOU09SX0lOU1RBTkNFKGhhZGMpKQogICAgICAgICB7CkBAIC0yOTMyLDcgKzI5NDcsNyBAQAogICAqICAgICAgICAgVGhlIHNldHRpbmcgb2YgdGhlc2UgcGFyYW1ldGVycyBpcyBjb25kaXRpb25lZCB0byBBREMgc3RhdGUuCiAgICogICAgICAgICBGb3IgcGFyYW1ldGVycyBjb25zdHJhaW50cywgc2VlIGNvbW1lbnRzIG9mIHN0cnVjdHVyZQogICAqICAgICAgICAgIkFEQ19BbmFsb2dXREdDb25mVHlwZURlZiIuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBhbmFsb2cgd2F0Y2hkb2cgdGhyZXNob2xkcyBjYW5ub3QgYmUgbW9kaWZpZWQKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBhbmFsb2cgd2F0Y2hkb2cgdGhyZXNob2xkcyBjYW5ub3QgYmUgbW9kaWZpZWQKICAgKiAgICAgICAgIHdoaWxlIEFEQyBjb252ZXJzaW9uIGlzIG9uIGdvaW5nLgogICAqIEBwYXJhbSBoYWRjIEFEQyBoYW5kbGUKICAgKiBAcGFyYW0gQW5hbG9nV0RHQ29uZmlnIFN0cnVjdHVyZSBvZiBBREMgYW5hbG9nIHdhdGNoZG9nIGNvbmZpZ3VyYXRpb24KQEAgLTMwMzYsNyArMzA1MSw4IEBACiAgICAgICB0bXBBV0RMb3dUaHJlc2hvbGRTaGlmdGVkICA9IEFEQ19BV0QxVEhSRVNIT0xEX1NISUZUX1JFU09MVVRJT04oaGFkYywgQW5hbG9nV0RHQ29uZmlnLT5Mb3dUaHJlc2hvbGQpOwogCiAgICAgICAvKiBTZXQgQURDIGFuYWxvZyB3YXRjaGRvZyB0aHJlc2hvbGRzIHZhbHVlIG9mIGJvdGggdGhyZXNob2xkcyBoaWdoIGFuZCBsb3cgKi8KLSAgICAgIExMX0FEQ19Db25maWdBbmFsb2dXRFRocmVzaG9sZHMoaGFkYy0+SW5zdGFuY2UsIEFuYWxvZ1dER0NvbmZpZy0+V2F0Y2hkb2dOdW1iZXIsIHRtcEFXREhpZ2hUaHJlc2hvbGRTaGlmdGVkLCB0bXBBV0RMb3dUaHJlc2hvbGRTaGlmdGVkKTsKKyAgICAgIExMX0FEQ19Db25maWdBbmFsb2dXRFRocmVzaG9sZHMoaGFkYy0+SW5zdGFuY2UsIEFuYWxvZ1dER0NvbmZpZy0+V2F0Y2hkb2dOdW1iZXIsIHRtcEFXREhpZ2hUaHJlc2hvbGRTaGlmdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBBV0RMb3dUaHJlc2hvbGRTaGlmdGVkKTsKIAogICAgICAgLyogVXBkYXRlIHN0YXRlLCBjbGVhciBwcmV2aW91cyByZXN1bHQgcmVsYXRlZCB0byBBV0QxICovCiAgICAgICBDTEVBUl9CSVQoaGFkYy0+U3RhdGUsIEhBTF9BRENfU1RBVEVfQVdEMSk7CkBAIC0zMDk0LDcgKzMxMTAsOCBAQAogICAgICAgdG1wQVdETG93VGhyZXNob2xkU2hpZnRlZCAgPSBBRENfQVdEMjNUSFJFU0hPTERfU0hJRlRfUkVTT0xVVElPTihoYWRjLCBBbmFsb2dXREdDb25maWctPkxvd1RocmVzaG9sZCk7CiAKICAgICAgIC8qIFNldCBBREMgYW5hbG9nIHdhdGNoZG9nIHRocmVzaG9sZHMgdmFsdWUgb2YgYm90aCB0aHJlc2hvbGRzIGhpZ2ggYW5kIGxvdyAqLwotICAgICAgTExfQURDX0NvbmZpZ0FuYWxvZ1dEVGhyZXNob2xkcyhoYWRjLT5JbnN0YW5jZSwgQW5hbG9nV0RHQ29uZmlnLT5XYXRjaGRvZ051bWJlciwgdG1wQVdESGlnaFRocmVzaG9sZFNoaWZ0ZWQsIHRtcEFXRExvd1RocmVzaG9sZFNoaWZ0ZWQpOworICAgICAgTExfQURDX0NvbmZpZ0FuYWxvZ1dEVGhyZXNob2xkcyhoYWRjLT5JbnN0YW5jZSwgQW5hbG9nV0RHQ29uZmlnLT5XYXRjaGRvZ051bWJlciwgdG1wQVdESGlnaFRocmVzaG9sZFNoaWZ0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcEFXRExvd1RocmVzaG9sZFNoaWZ0ZWQpOwogCiAgICAgICBpZiAoQW5hbG9nV0RHQ29uZmlnLT5XYXRjaGRvZ051bWJlciA9PSBBRENfQU5BTE9HV0FUQ0hET0dfMikKICAgICAgIHsKQEAgLTMzNTUsOCArMzM3Miw2IEBACiAgIHJldHVybiBIQUxfT0s7CiB9CiAKLQotCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgc2VsZWN0ZWQgQURDLgogICAqIEBub3RlICAgUHJlcmVxdWlzaXRlIGNvbmRpdGlvbiB0byB1c2UgdGhpcyBmdW5jdGlvbjogQURDIG11c3QgYmUgZGlzYWJsZWQKQEAgLTMzNzUsNyArMzM5MCw4IEBACiAgIGlmIChMTF9BRENfSXNFbmFibGVkKGhhZGMtPkluc3RhbmNlKSA9PSAwVUwpCiAgIHsKICAgICAvKiBDaGVjayBpZiBjb25kaXRpb25zIHRvIGVuYWJsZSB0aGUgQURDIGFyZSBmdWxmaWxsZWQgKi8KLSAgICBpZiAoKGhhZGMtPkluc3RhbmNlLT5DUiAmIChBRENfQ1JfQURDQUwgfCBBRENfQ1JfSkFEU1RQIHwgQURDX0NSX0FEU1RQIHwgQURDX0NSX0pBRFNUQVJUIHwgQURDX0NSX0FEU1RBUlQgfCBBRENfQ1JfQURESVMgfCBBRENfQ1JfQURFTikpICE9IDBVTCkKKyAgICBpZiAoKGhhZGMtPkluc3RhbmNlLT5DUiAmIChBRENfQ1JfQURDQUwgfCBBRENfQ1JfSkFEU1RQIHwgQURDX0NSX0FEU1RQIHwgQURDX0NSX0pBRFNUQVJUIHwgQURDX0NSX0FEU1RBUlQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFEQ19DUl9BRERJUyB8IEFEQ19DUl9BREVOKSkgIT0gMFVMKQogICAgIHsKICAgICAgIC8qIFVwZGF0ZSBBREMgc3RhdGUgbWFjaGluZSB0byBlcnJvciAqLwogICAgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9FUlJPUl9JTlRFUk5BTCk7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2hhbF9hZGNfZXguYyBiL1NyYy9zdG0zMmw0eHhfaGFsX2FkY19leC5jCmluZGV4IDhiMzAzODkuLjk2NzZhNzEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsX2FkY19leC5jCisrKyBiL1NyYy9zdG0zMmw0eHhfaGFsX2FkY19leC5jCkBAIC0zLDcgKzMsNyBAQAogICAqIEBmaWxlICAgIHN0bTMybDR4eF9oYWxfYWRjX2V4LmMKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQogICAqIEBicmllZiAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcKLSAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRvciAoQURDKQorICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydGVyIChBREMpCiAgICogICAgICAgICAgcGVyaXBoZXJhbDoKICAgKiAgICAgICAgICAgKyBPcGVyYXRpb24gZnVuY3Rpb25zCiAgICogICAgICAgICAgICAgKysgU3RhcnQsIHN0b3AsIGdldCByZXN1bHQgb2YgY29udmVyc2lvbnMgb2YgQURDIGdyb3VwIGluamVjdGVkLApAQCAtNjIsOCArNjIsNyBAQAogCiAjZGVmaW5lIEFEQ19KU1FSX0ZJRUxEUyAgKChBRENfSlNRUl9KTCB8IEFEQ19KU1FSX0pFWFRTRUwgfCBBRENfSlNRUl9KRVhURU4gfFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19KU1FSX0pTUTEgIHwgQURDX0pTUVJfSlNRMiB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0pTUVJfSlNRMyB8IEFEQ19KU1FSX0pTUTQgKSkgIC8qITwgQURDX0pTUVIgZmllbGRzIG9mIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgdXBkYXRlZCBhbnl0aW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNlIHRoZSBBREMgaXMgZW5hYmxlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0pTUVJfSlNRMyB8IEFEQ19KU1FSX0pTUTQgKSkgIC8qITwgQURDX0pTUVIgZmllbGRzIG9mIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgdXBkYXRlZCBhbnl0aW1lIG9uY2UgdGhlIEFEQyBpcyBlbmFibGVkICovCiAKIC8qIEZpeGVkIHRpbWVvdXQgdmFsdWUgZm9yIEFEQyBjYWxpYnJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBWYWx1ZXMgZGVmaW5lZCB0byBiZSBoaWdoZXIgdGhhbiB3b3JzdCBjYXNlczogbWF4aW11bSByYXRpbyBiZXR3ZWVuIEFEQyAgICAqLwpAQCAtMjIwLDcgKzIxOSw4IEBACiAgICogQHBhcmFtIENhbGlicmF0aW9uRmFjdG9yIENhbGlicmF0aW9uIGZhY3RvciAoY29kZWQgb24gNyBiaXRzIG1heGltdW0pCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9BRENFeF9DYWxpYnJhdGlvbl9TZXRWYWx1ZShBRENfSGFuZGxlVHlwZURlZiAqaGFkYywgdWludDMyX3QgU2luZ2xlRGlmZiwgdWludDMyX3QgQ2FsaWJyYXRpb25GYWN0b3IpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfQURDRXhfQ2FsaWJyYXRpb25fU2V0VmFsdWUoQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMsIHVpbnQzMl90IFNpbmdsZURpZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQ2FsaWJyYXRpb25GYWN0b3IpCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHRtcF9oYWxfc3RhdHVzID0gSEFMX09LOwogICB1aW50MzJfdCB0bXBfYWRjX2lzX2NvbnZlcnNpb25fb25fZ29pbmdfcmVndWxhcjsKQEAgLTE5NDksMTkgKzE5NDksMjMgQEAKICAgICB7CiAgICAgICAvKiBTY2FuIGVhY2ggb2Zmc2V0IHJlZ2lzdGVyIHRvIGNoZWNrIGlmIHRoZSBzZWxlY3RlZCBjaGFubmVsIGlzIHRhcmdldGVkLiAqLwogICAgICAgLyogSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhlIGNvcnJlc3BvbmRpbmcgb2Zmc2V0IG51bWJlciBpcyBkaXNhYmxlZC4gICAgICAgKi8KLSAgICAgIGlmKF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihMTF9BRENfR2V0T2Zmc2V0Q2hhbm5lbChoYWRjLT5JbnN0YW5jZSwgTExfQURDX09GRlNFVF8xKSkgPT0gX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRDaGFubmVsKSkKKyAgICAgIGlmIChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoTExfQURDX0dldE9mZnNldENoYW5uZWwoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfMSkpCisgICAgICAgICAgPT0gX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRDaGFubmVsKSkKICAgICAgIHsKICAgICAgICAgTExfQURDX1NldE9mZnNldFN0YXRlKGhhZGMtPkluc3RhbmNlLCBMTF9BRENfT0ZGU0VUXzEsIExMX0FEQ19PRkZTRVRfRElTQUJMRSk7CiAgICAgICB9Ci0gICAgICBpZihfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoTExfQURDX0dldE9mZnNldENoYW5uZWwoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfMikpID09IF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkQ2hhbm5lbCkpCisgICAgICBpZiAoX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKExMX0FEQ19HZXRPZmZzZXRDaGFubmVsKGhhZGMtPkluc3RhbmNlLCBMTF9BRENfT0ZGU0VUXzIpKQorICAgICAgICAgID09IF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkQ2hhbm5lbCkpCiAgICAgICB7CiAgICAgICAgIExMX0FEQ19TZXRPZmZzZXRTdGF0ZShoYWRjLT5JbnN0YW5jZSwgTExfQURDX09GRlNFVF8yLCBMTF9BRENfT0ZGU0VUX0RJU0FCTEUpOwogICAgICAgfQotICAgICAgaWYoX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKExMX0FEQ19HZXRPZmZzZXRDaGFubmVsKGhhZGMtPkluc3RhbmNlLCBMTF9BRENfT0ZGU0VUXzMpKSA9PSBfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZENoYW5uZWwpKQorICAgICAgaWYgKF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihMTF9BRENfR2V0T2Zmc2V0Q2hhbm5lbChoYWRjLT5JbnN0YW5jZSwgTExfQURDX09GRlNFVF8zKSkKKyAgICAgICAgICA9PSBfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZENoYW5uZWwpKQogICAgICAgewogICAgICAgICBMTF9BRENfU2V0T2Zmc2V0U3RhdGUoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfMywgTExfQURDX09GRlNFVF9ESVNBQkxFKTsKICAgICAgIH0KLSAgICAgIGlmKF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihMTF9BRENfR2V0T2Zmc2V0Q2hhbm5lbChoYWRjLT5JbnN0YW5jZSwgTExfQURDX09GRlNFVF80KSkgPT0gX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRDaGFubmVsKSkKKyAgICAgIGlmIChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoTExfQURDX0dldE9mZnNldENoYW5uZWwoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfNCkpCisgICAgICAgICAgPT0gX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRDaGFubmVsKSkKICAgICAgIHsKICAgICAgICAgTExfQURDX1NldE9mZnNldFN0YXRlKGhhZGMtPkluc3RhbmNlLCBMTF9BRENfT0ZGU0VUXzQsIExMX0FEQ19PRkZTRVRfRElTQUJMRSk7CiAgICAgICB9CkBAIC0xOTgyLDcgKzE5ODYsOSBAQAogICAgIGlmIChzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkU2luZ2xlRGlmZiA9PSBBRENfRElGRkVSRU5USUFMX0VOREVEKQogICAgIHsKICAgICAgIC8qIFNldCBzYW1wbGluZyB0aW1lIG9mIHRoZSBzZWxlY3RlZCBBREMgY2hhbm5lbCAqLwotICAgICAgTExfQURDX1NldENoYW5uZWxTYW1wbGluZ1RpbWUoaGFkYy0+SW5zdGFuY2UsICh1aW50MzJfdCkoX19MTF9BRENfREVDSU1BTF9OQl9UT19DSEFOTkVMKChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoKHVpbnQzMl90KXNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRDaGFubmVsKSArIDFVTCkgJiAweDFGVUwpKSwgc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZFNhbXBsaW5nVGltZSk7CisgICAgICBMTF9BRENfU2V0Q2hhbm5lbFNhbXBsaW5nVGltZShoYWRjLT5JbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkoX19MTF9BRENfREVDSU1BTF9OQl9UT19DSEFOTkVMKChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoKHVpbnQzMl90KXNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRDaGFubmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMVVMKSAmIDB4MUZVTCkpLCBzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkU2FtcGxpbmdUaW1lKTsKICAgICB9CiAKICAgfQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfY2FuLmMgYi9TcmMvc3RtMzJsNHh4X2hhbF9jYW4uYwppbmRleCAxMzE4OGFkLi5lMTY3OWZjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9jYW4uYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF9jYW4uYwpAQCAtNTM3LDE5ICs1MzcsMTkgQEAKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBDQU4gbW9kdWxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSByZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9UWF9NQUlMQk9YMF9DT01QTEVURV9DQUxMQkFDS19DQl9JRCBUeCBNYWlsYm94IDAgQ29tcGxldGUgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fVFhfTUFJTEJPWDFfQ09NUExFVEVfQ0FMTEJBQ0tfQ0JfSUQgVHggTWFpbGJveCAxIENvbXBsZXRlIGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1RYX01BSUxCT1gyX0NPTVBMRVRFX0NBTExCQUNLX0NCX0lEIFR4IE1haWxib3ggMiBDb21wbGV0ZSBjYWxsYmFjayBJRAotICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9UWF9NQUlMQk9YMF9BQk9SVF9DQUxMQkFDS19DQl9JRCBUeCBNYWlsYm94IDAgQWJvcnQgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fVFhfTUFJTEJPWDFfQUJPUlRfQ0FMTEJBQ0tfQ0JfSUQgVHggTWFpbGJveCAxIEFib3J0IGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1RYX01BSUxCT1gyX0FCT1JUX0NBTExCQUNLX0NCX0lEIFR4IE1haWxib3ggMiBBYm9ydCBjYWxsYmFjayBJRAotICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9SWF9GSUZPMF9NU0dfUEVORElOR19DQUxMQkFDS19DQl9JRCBSeCBGaWZvIDAgbWVzc2FnZSBwZW5kaW5nIGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1JYX0ZJRk8wX0ZVTExfQ0FMTEJBQ0tfQ0JfSUQgUnggRmlmbyAwIGZ1bGwgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fUlhfRklGTzFfTVNHUEVORElOR19DQUxMQkFDS19DQl9JRCBSeCBGaWZvIDEgbWVzc2FnZSBwZW5kaW5nIGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1JYX0ZJRk8xX0ZVTExfQ0FMTEJBQ0tfQ0JfSUQgUnggRmlmbyAxIGZ1bGwgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fU0xFRVBfQ0FMTEJBQ0tfQ0JfSUQgU2xlZXAgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fV0FLRVVQX0ZST01fUlhfTVNHX0NBTExCQUNLX0NCX0lEIFdha2UgVXAgZnJvbSBSeCBtZXNzYWdlIGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX0VSUk9SX0NBTExCQUNLX0NCX0lEIEVycm9yIGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1RYX01BSUxCT1gwX0NPTVBMRVRFX0NCX0lEIFR4IE1haWxib3ggMCBDb21wbGV0ZSBjYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9UWF9NQUlMQk9YMV9DT01QTEVURV9DQl9JRCBUeCBNYWlsYm94IDEgQ29tcGxldGUgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fVFhfTUFJTEJPWDJfQ09NUExFVEVfQ0JfSUQgVHggTWFpbGJveCAyIENvbXBsZXRlIGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1RYX01BSUxCT1gwX0FCT1JUX0NCX0lEIFR4IE1haWxib3ggMCBBYm9ydCBjYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9UWF9NQUlMQk9YMV9BQk9SVF9DQl9JRCBUeCBNYWlsYm94IDEgQWJvcnQgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fVFhfTUFJTEJPWDJfQUJPUlRfQ0JfSUQgVHggTWFpbGJveCAyIEFib3J0IGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1JYX0ZJRk8wX01TR19QRU5ESU5HX0NCX0lEIFJ4IEZpZm8gMCBtZXNzYWdlIHBlbmRpbmcgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fUlhfRklGTzBfRlVMTF9DQl9JRCBSeCBGaWZvIDAgZnVsbCBjYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9SWF9GSUZPMV9NU0dfUEVORElOR19DQl9JRCBSeCBGaWZvIDEgbWVzc2FnZSBwZW5kaW5nIGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1JYX0ZJRk8xX0ZVTExfQ0JfSUQgUnggRmlmbyAxIGZ1bGwgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fU0xFRVBfQ0JfSUQgU2xlZXAgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fV0FLRVVQX0ZST01fUlhfTVNHX0NCX0lEIFdha2UgVXAgZnJvbSBSeCBtZXNzYWdlIGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX0VSUk9SX0NCX0lEIEVycm9yIGNhbGxiYWNrIElECiAgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX01TUElOSVRfQ0JfSUQgTXNwSW5pdCBjYWxsYmFjayBJRAogICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9NU1BERUlOSVRfQ0JfSUQgTXNwRGVJbml0IGNhbGxiYWNrIElECiAgICogQHBhcmFtICBwQ2FsbGJhY2sgcG9pbnRlciB0byB0aGUgQ2FsbGJhY2sgZnVuY3Rpb24KQEAgLTY4MCwxOSArNjgwLDE5IEBACiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgQ0FOIG1vZHVsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9UWF9NQUlMQk9YMF9DT01QTEVURV9DQUxMQkFDS19DQl9JRCBUeCBNYWlsYm94IDAgQ29tcGxldGUgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fVFhfTUFJTEJPWDFfQ09NUExFVEVfQ0FMTEJBQ0tfQ0JfSUQgVHggTWFpbGJveCAxIENvbXBsZXRlIGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1RYX01BSUxCT1gyX0NPTVBMRVRFX0NBTExCQUNLX0NCX0lEIFR4IE1haWxib3ggMiBDb21wbGV0ZSBjYWxsYmFjayBJRAotICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9UWF9NQUlMQk9YMF9BQk9SVF9DQUxMQkFDS19DQl9JRCBUeCBNYWlsYm94IDAgQWJvcnQgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fVFhfTUFJTEJPWDFfQUJPUlRfQ0FMTEJBQ0tfQ0JfSUQgVHggTWFpbGJveCAxIEFib3J0IGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1RYX01BSUxCT1gyX0FCT1JUX0NBTExCQUNLX0NCX0lEIFR4IE1haWxib3ggMiBBYm9ydCBjYWxsYmFjayBJRAotICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9SWF9GSUZPMF9NU0dfUEVORElOR19DQUxMQkFDS19DQl9JRCBSeCBGaWZvIDAgbWVzc2FnZSBwZW5kaW5nIGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1JYX0ZJRk8wX0ZVTExfQ0FMTEJBQ0tfQ0JfSUQgUnggRmlmbyAwIGZ1bGwgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fUlhfRklGTzFfTVNHUEVORElOR19DQUxMQkFDS19DQl9JRCBSeCBGaWZvIDEgbWVzc2FnZSBwZW5kaW5nIGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1JYX0ZJRk8xX0ZVTExfQ0FMTEJBQ0tfQ0JfSUQgUnggRmlmbyAxIGZ1bGwgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fU0xFRVBfQ0FMTEJBQ0tfQ0JfSUQgU2xlZXAgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fV0FLRVVQX0ZST01fUlhfTVNHX0NBTExCQUNLX0NCX0lEIFdha2UgVXAgZnJvbSBSeCBtZXNzYWdlIGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX0VSUk9SX0NBTExCQUNLX0NCX0lEIEVycm9yIGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1RYX01BSUxCT1gwX0NPTVBMRVRFX0NCX0lEIFR4IE1haWxib3ggMCBDb21wbGV0ZSBjYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9UWF9NQUlMQk9YMV9DT01QTEVURV9DQl9JRCBUeCBNYWlsYm94IDEgQ29tcGxldGUgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fVFhfTUFJTEJPWDJfQ09NUExFVEVfQ0JfSUQgVHggTWFpbGJveCAyIENvbXBsZXRlIGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1RYX01BSUxCT1gwX0FCT1JUX0NCX0lEIFR4IE1haWxib3ggMCBBYm9ydCBjYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9UWF9NQUlMQk9YMV9BQk9SVF9DQl9JRCBUeCBNYWlsYm94IDEgQWJvcnQgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fVFhfTUFJTEJPWDJfQUJPUlRfQ0JfSUQgVHggTWFpbGJveCAyIEFib3J0IGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1JYX0ZJRk8wX01TR19QRU5ESU5HX0NCX0lEIFJ4IEZpZm8gMCBtZXNzYWdlIHBlbmRpbmcgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fUlhfRklGTzBfRlVMTF9DQl9JRCBSeCBGaWZvIDAgZnVsbCBjYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9SWF9GSUZPMV9NU0dfUEVORElOR19DQl9JRCBSeCBGaWZvIDEgbWVzc2FnZSBwZW5kaW5nIGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1JYX0ZJRk8xX0ZVTExfQ0JfSUQgUnggRmlmbyAxIGZ1bGwgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fU0xFRVBfQ0JfSUQgU2xlZXAgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fV0FLRVVQX0ZST01fUlhfTVNHX0NCX0lEIFdha2UgVXAgZnJvbSBSeCBtZXNzYWdlIGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX0VSUk9SX0NCX0lEIEVycm9yIGNhbGxiYWNrIElECiAgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX01TUElOSVRfQ0JfSUQgTXNwSW5pdCBjYWxsYmFjayBJRAogICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9NU1BERUlOSVRfQ0JfSUQgTXNwRGVJbml0IGNhbGxiYWNrIElECiAgICogQHJldHZhbCBIQUwgc3RhdHVzCkBAIC0xNTI4LDcgKzE1MjgsNyBAQAogICAgIHsKICAgICAgIHBIZWFkZXItPkV4dElkID0gKChDQU5fUkkwUl9FWElEIHwgQ0FOX1JJMFJfU1RJRCkgJiBoY2FuLT5JbnN0YW5jZS0+c0ZJRk9NYWlsQm94W1J4Rmlmb10uUklSKSA+PiBDQU5fUkkwUl9FWElEX1BvczsKICAgICB9Ci0gICAgcEhlYWRlci0+UlRSID0gKENBTl9SSTBSX1JUUiAmIGhjYW4tPkluc3RhbmNlLT5zRklGT01haWxCb3hbUnhGaWZvXS5SSVIpID4+IENBTl9SSTBSX1JUUl9Qb3M7CisgICAgcEhlYWRlci0+UlRSID0gKENBTl9SSTBSX1JUUiAmIGhjYW4tPkluc3RhbmNlLT5zRklGT01haWxCb3hbUnhGaWZvXS5SSVIpOwogICAgIHBIZWFkZXItPkRMQyA9IChDQU5fUkRUMFJfRExDICYgaGNhbi0+SW5zdGFuY2UtPnNGSUZPTWFpbEJveFtSeEZpZm9dLlJEVFIpID4+IENBTl9SRFQwUl9ETENfUG9zOwogICAgIHBIZWFkZXItPkZpbHRlck1hdGNoSW5kZXggPSAoQ0FOX1JEVDBSX0ZNSSAmIGhjYW4tPkluc3RhbmNlLT5zRklGT01haWxCb3hbUnhGaWZvXS5SRFRSKSA+PiBDQU5fUkRUMFJfRk1JX1BvczsKICAgICBwSGVhZGVyLT5UaW1lc3RhbXAgPSAoQ0FOX1JEVDBSX1RJTUUgJiBoY2FuLT5JbnN0YW5jZS0+c0ZJRk9NYWlsQm94W1J4Rmlmb10uUkRUUikgPj4gQ0FOX1JEVDBSX1RJTUVfUG9zOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfY29tcC5jIGIvU3JjL3N0bTMybDR4eF9oYWxfY29tcC5jCmluZGV4IDc1MjhiMjEuLmExNzRhOTcgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsX2NvbXAuYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF9jb21wLmMKQEAgLTE4LDEwICsxOCwxMCBAQAogCiAgIFsuLl0KICAgICAgIFRoZSBTVE0zMkw0eHggZGV2aWNlIGZhbWlseSBpbnRlZ3JhdGVzIHR3byBhbmFsb2cgY29tcGFyYXRvcnMgaW5zdGFuY2VzOgotICAgICAgQ09NUDEsIENPTVAyIGV4Y2VwdCBmb3IgdGhlIFNUTTMyTDQxMnh4L1NUTTMyTDQyMnh4IHByb2R1Y3RzIHRoYXQgZW1iZWQgb25seQotICAgICAgb25lOiBDT01QMS4KKyAgICAgIENPTVAxLCBDT01QMiBleGNlcHQgZm9yIHRoZSBTVE0zMkw0MTJ4eC9TVE0zMkw0MjJ4eCBwcm9kdWN0cyBmZWF0dXJpbmcgb25seQorICAgICAgb25lIGluc3RhbmNlOiBDT01QMS4KICAgICAgIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCBhbGwgY29tbWVudHMgcmVsYXRlZCB0byBhIHBhaXIgb2YgY29tcGFyYXRvcnMgYXJlIG5vdAotICAgICAgYXBwbGljYWJsZSB0byBTVE0zMkw0MTJ4eCBvciBTVE0zMkw0MjJ4eC4KKyAgICAgIGFwcGxpY2FibGUgdG8gU1RNMzJMNDEyeHgvU1RNMzJMNDIyeHguCiAgICAgICAoIykgQ29tcGFyYXRvcnMgaW5wdXQgbWludXMgKGludmVydGluZyBpbnB1dCkgYW5kIGlucHV0IHBsdXMgKG5vbiBpbnZlcnRpbmcgaW5wdXQpCiAgICAgICAgICAgY2FuIGJlIHNldCB0byBpbnRlcm5hbCByZWZlcmVuY2VzIG9yIHRvIEdQSU8gcGlucwogICAgICAgICAgIChyZWZlciB0byBHUElPIGxpc3QgaW4gcmVmZXJlbmNlIG1hbnVhbCkuCkBAIC05NCwxMSArOTQsMTEgQEAKIAogICAgICBUaGUgY29tcGlsYXRpb24gZmxhZyBVU0VfSEFMX0NPTVBfUkVHSVNURVJfQ0FMTEJBQ0tTLCB3aGVuIHNldCB0byAxLAogICAgICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgotICAgICBVc2UgRnVuY3Rpb25zIEByZWYgSEFMX0NPTVBfUmVnaXN0ZXJDYWxsYmFjaygpCisgICAgIFVzZSBGdW5jdGlvbnMgSEFMX0NPTVBfUmVnaXN0ZXJDYWxsYmFjaygpCiAgICAgIHRvIHJlZ2lzdGVyIGFuIGludGVycnVwdCBjYWxsYmFjay4KICAgICBbLi5dCiAKLSAgICAgRnVuY3Rpb24gQHJlZiBIQUxfQ09NUF9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CisgICAgIEZ1bmN0aW9uIEhBTF9DT01QX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICAoKykgVHJpZ2dlckNhbGxiYWNrICAgICAgIDogY2FsbGJhY2sgZm9yIENPTVAgdHJpZ2dlci4KICAgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgIDogY2FsbGJhY2sgZm9yIE1zcCBJbml0LgogICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgOiBjYWxsYmFjayBmb3IgTXNwIERlSW5pdC4KQEAgLTEwNiwxMSArMTA2LDExIEBACiAgICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAgICAgWy4uXQogCi0gICAgIFVzZSBmdW5jdGlvbiBAcmVmIEhBTF9DT01QX1VuUmVnaXN0ZXJDYWxsYmFjayB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgICAgIFVzZSBmdW5jdGlvbiBIQUxfQ09NUF9VblJlZ2lzdGVyQ2FsbGJhY2sgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAogICAgICB3ZWFrIGZ1bmN0aW9uLgogICAgIFsuLl0KIAotICAgICBAcmVmIEhBTF9DT01QX1VuUmVnaXN0ZXJDYWxsYmFjayB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCisgICAgIEhBTF9DT01QX1VuUmVnaXN0ZXJDYWxsYmFjayB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgICAgIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAgICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAgKCspIFRyaWdnZXJDYWxsYmFjayAgICAgICA6IGNhbGxiYWNrIGZvciBDT01QIHRyaWdnZXIuCkBAIC0xMTgsMjcgKzExOCwyNyBAQAogICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgOiBjYWxsYmFjayBmb3IgTXNwIERlSW5pdC4KICAgICAgWy4uXQogCi0gICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9DT01QX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgQHJlZiBIQUxfQ09NUF9TVEFURV9SRVNFVAorICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX0NPTVBfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfQ09NUF9TVEFURV9SRVNFVAogICAgICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnM6Ci0gICAgIGV4YW1wbGUgQHJlZiBIQUxfQ09NUF9UcmlnZ2VyQ2FsbGJhY2soKS4KKyAgICAgZXhhbXBsZSBIQUxfQ09NUF9UcmlnZ2VyQ2FsbGJhY2soKS4KICAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUKLSAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIGZ1bmN0aW9ucyBpbiB0aGUgQHJlZiBIQUxfQ09NUF9Jbml0KCkvIEByZWYgSEFMX0NPTVBfRGVJbml0KCkgb25seSB3aGVuCisgICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayBmdW5jdGlvbnMgaW4gdGhlIEhBTF9DT01QX0luaXQoKS8gSEFMX0NPTVBfRGVJbml0KCkgb25seSB3aGVuCiAgICAgIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCiAgICAgWy4uXQogCi0gICAgIElmIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX0NPTVBfSW5pdCgpLyBAcmVmIEhBTF9DT01QX0RlSW5pdCgpCisgICAgIElmIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEhBTF9DT01QX0luaXQoKS8gSEFMX0NPTVBfRGVJbml0KCkKICAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKSB3aGF0ZXZlciB0aGUgc3RhdGUuCiAgICAgIFsuLl0KIAotICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIEByZWYgSEFMX0NPTVBfU1RBVEVfUkVBRFkgc3RhdGUgb25seS4KKyAgICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBIQUxfQ09NUF9TVEFURV9SRUFEWSBzdGF0ZSBvbmx5LgogICAgICBFeGNlcHRpb24gZG9uZSBNc3BJbml0L01zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQKLSAgICAgaW4gQHJlZiBIQUxfQ09NUF9TVEFURV9SRUFEWSBvciBAcmVmIEhBTF9DT01QX1NUQVRFX1JFU0VUIHN0YXRlLAorICAgICBpbiBIQUxfQ09NUF9TVEFURV9SRUFEWSBvciBIQUxfQ09NUF9TVEFURV9SRVNFVCBzdGF0ZSwKICAgICAgdGh1cyByZWdpc3RlcmVkICh1c2VyKSBNc3BJbml0L0RlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KICAgICBbLi5dCiAKICAgICAgVGhlbiwgdGhlIHVzZXIgZmlyc3QgcmVnaXN0ZXJzIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICAgICB1c2luZyBAcmVmIEhBTF9DT01QX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9DT01QX0RlSW5pdCgpCi0gICAgIG9yIEByZWYgSEFMX0NPTVBfSW5pdCgpIGZ1bmN0aW9uLgorICAgICB1c2luZyBIQUxfQ09NUF9SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgSEFMX0NPTVBfRGVJbml0KCkKKyAgICAgb3IgSEFMX0NPTVBfSW5pdCgpIGZ1bmN0aW9uLgogICAgICBbLi5dCiAKICAgICAgV2hlbiB0aGUgY29tcGlsYXRpb24gZmxhZyBVU0VfSEFMX0NPTVBfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCkBAIC04MzksNyArODM5LDcgQEAKICAgewogI2lmIGRlZmluZWQoQ09NUDIpCiAgICAgLyogQ2hlY2sgd2hldGhlciBjb21wYXJhdG9yIGlzIGluIGluZGVwZW5kZW50IG9yIHdpbmRvdyBtb2RlICovCi0gICAgaWYoUkVBRF9CSVQoQ09NUDEyX0NPTU1PTi0+Q1NSLCBDT01QX0NTUl9XSU5NT0RFKSAhPSBSRVNFVCkKKyAgICBpZihSRUFEX0JJVChDT01QMTJfQ09NTU9OLT5DU1IsIENPTVBfQ1NSX1dJTk1PREUpICE9IDBVTCkKICAgICB7CiAgICAgICAvKiBDbGVhciBDT01QIEVYVEkgbGluZSBwZW5kaW5nIGJpdCBvZiB0aGUgcGFpciBvZiBjb21wYXJhdG9ycyAgICAgICAgICAqLwogICAgICAgLyogaW4gd2luZG93IG1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX2RhYy5jIGIvU3JjL3N0bTMybDR4eF9oYWxfZGFjLmMKaW5kZXggMWFiNmI5YS4uODg5YWFhYiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfZGFjLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfZGFjLmMKQEAgLTg5NSw4ICs4OTUsNiBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19TdG9wX0RNQShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOwotCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19EQUNfQ0hBTk5FTChDaGFubmVsKSk7CiAKQEAgLTkxNSw3ICs5MTMsNyBAQAogICBpZiAoQ2hhbm5lbCA9PSBEQUNfQ0hBTk5FTF8xKQogICB7CiAgICAgLyogRGlzYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KLSAgICBzdGF0dXMgPSBIQUxfRE1BX0Fib3J0KGhkYWMtPkRNQV9IYW5kbGUxKTsKKyAgICAodm9pZClIQUxfRE1BX0Fib3J0KGhkYWMtPkRNQV9IYW5kbGUxKTsKIAogICAgIC8qIERpc2FibGUgdGhlIERBQyBETUEgdW5kZXJydW4gaW50ZXJydXB0ICovCiAgICAgX19IQUxfREFDX0RJU0FCTEVfSVQoaGRhYywgREFDX0lUX0RNQVVEUjEpOwpAQCAtOTIzLDcgKzkyMSw3IEBACiAgIGVsc2UgLyogQ2hhbm5lbDIgaXMgdXNlZCBmb3IgKi8KICAgewogICAgIC8qIERpc2FibGUgdGhlIERNQSBjaGFubmVsICovCi0gICAgc3RhdHVzID0gSEFMX0RNQV9BYm9ydChoZGFjLT5ETUFfSGFuZGxlMik7CisgICAgKHZvaWQpSEFMX0RNQV9BYm9ydChoZGFjLT5ETUFfSGFuZGxlMik7CiAKICAgICAvKiBEaXNhYmxlIHRoZSBEQUMgRE1BIHVuZGVycnVuIGludGVycnVwdCAqLwogICAgIF9fSEFMX0RBQ19ESVNBQkxFX0lUKGhkYWMsIERBQ19JVF9ETUFVRFIyKTsKQEAgLTkzNSwyNiArOTMzLDE0IEBACiAKICNpZiBkZWZpbmVkIChTVE0zMkw0NTF4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDUyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ2Mnh4KQogICAvKiBEaXNhYmxlIHRoZSBETUEgY2hhbm5lbCAqLwotICBzdGF0dXMgPSBIQUxfRE1BX0Fib3J0KGhkYWMtPkRNQV9IYW5kbGUxKTsKKyAgKHZvaWQpSEFMX0RNQV9BYm9ydChoZGFjLT5ETUFfSGFuZGxlMSk7CiAKICAgLyogRGlzYWJsZSB0aGUgREFDIERNQSB1bmRlcnJ1biBpbnRlcnJ1cHQgKi8KICAgX19IQUxfREFDX0RJU0FCTEVfSVQoaGRhYywgREFDX0lUX0RNQVVEUjEpOwogI2VuZGlmIC8qIFNUTTMyTDQ1MXh4IFNUTTMyTDQ1Mnh4IFNUTTMyTDQ2Mnh4ICovCiAKLSAgLyogQ2hlY2sgaWYgRE1BIENoYW5uZWwgZWZmZWN0aXZlbHkgZGlzYWJsZWQgKi8KLSAgaWYgKHN0YXR1cyAhPSBIQUxfT0spCi0gIHsKLSAgICAvKiBVcGRhdGUgREFDIHN0YXRlIG1hY2hpbmUgdG8gZXJyb3IgKi8KLSAgICBoZGFjLT5TdGF0ZSA9IEhBTF9EQUNfU1RBVEVfRVJST1I7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgLyogQ2hhbmdlIERBQyBzdGF0ZSAqLwotICAgIGhkYWMtPlN0YXRlID0gSEFMX0RBQ19TVEFURV9SRUFEWTsKLSAgfQotCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIHN0YXR1czsKKyAgcmV0dXJuIEhBTF9PSzsKIH0KIAogLyogREFDIGNoYW5uZWwgMiBpcyBhdmFpbGFibGUgb24gdG9wIG9mIERBQyBjaGFubmVsIDEgaW4gKi8KQEAgLTEyNTIsMTEgKzEyMzgsMTEgQEAKICAgaWYgKHNDb25maWctPkRBQ19TYW1wbGVBbmRIb2xkID09IERBQ19TQU1QTEVBTkRIT0xEX0VOQUJMRSkKICAgLyogU2FtcGxlIG9uIG9sZCBjb25maWd1cmF0aW9uICovCiAgIHsKLSAgICAvKiBTYW1wbGVUaW1lICovCisgICAgLyogR2V0IHRpbWVvdXQgKi8KKyAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCiAgICAgaWYgKENoYW5uZWwgPT0gREFDX0NIQU5ORUxfMSkKICAgICB7Ci0gICAgICAvKiBHZXQgdGltZW91dCAqLwotICAgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKIAogICAgICAgLyogU0hTUjEgY2FuIGJlIHdyaXR0ZW4gd2hlbiBCV1NUMSBpcyBjbGVhcmVkICovCiAgICAgICB3aGlsZSAoKChoZGFjLT5JbnN0YW5jZS0+U1IpICYgREFDX1NSX0JXU1QxKSAhPSAwVUwpCkBAIC0xMzA5LDE2ICsxMjk1LDE2IEBACiAgIGlmIChzQ29uZmlnLT5EQUNfVXNlclRyaW1taW5nID09IERBQ19UUklNTUlOR19VU0VSKQogICAvKiBVU0VSIFRSSU1NSU5HICovCiAgIHsKLSAgLyogR2V0IHRoZSBEQUMgQ0NSIHZhbHVlICovCi0gIHRtcHJlZzEgPSBoZGFjLT5JbnN0YW5jZS0+Q0NSOwotICAvKiBDbGVhciB0cmltbWluZyB2YWx1ZSAqLworICAgIC8qIEdldCB0aGUgREFDIENDUiB2YWx1ZSAqLworICAgIHRtcHJlZzEgPSBoZGFjLT5JbnN0YW5jZS0+Q0NSOworICAgIC8qIENsZWFyIHRyaW1taW5nIHZhbHVlICovCiAgICAgdG1wcmVnMSAmPSB+KCgodWludDMyX3QpKERBQ19DQ1JfT1RSSU0xKSkgPDwgKENoYW5uZWwgJiAweDEwVUwpKTsKLSAgLyogQ29uZmlndXJlIGZvciB0aGUgc2VsZWN0ZWQgdHJpbW1pbmcgb2Zmc2V0ICovCi0gIHRtcHJlZzIgPSBzQ29uZmlnLT5EQUNfVHJpbW1pbmdWYWx1ZTsKLSAgLyogQ2FsY3VsYXRlIENDUiByZWdpc3RlciB2YWx1ZSBkZXBlbmRpbmcgb24gREFDX0NoYW5uZWwgKi8KKyAgICAvKiBDb25maWd1cmUgZm9yIHRoZSBzZWxlY3RlZCB0cmltbWluZyBvZmZzZXQgKi8KKyAgICB0bXByZWcyID0gc0NvbmZpZy0+REFDX1RyaW1taW5nVmFsdWU7CisgICAgLyogQ2FsY3VsYXRlIENDUiByZWdpc3RlciB2YWx1ZSBkZXBlbmRpbmcgb24gREFDX0NoYW5uZWwgKi8KICAgICB0bXByZWcxIHw9IHRtcHJlZzIgPDwgKENoYW5uZWwgJiAweDEwVUwpOwotICAvKiBXcml0ZSB0byBEQUMgQ0NSICovCi0gIGhkYWMtPkluc3RhbmNlLT5DQ1IgPSB0bXByZWcxOworICAgIC8qIFdyaXRlIHRvIERBQyBDQ1IgKi8KKyAgICBoZGFjLT5JbnN0YW5jZS0+Q0NSID0gdG1wcmVnMTsKICAgfQogICAvKiBlbHNlIGZhY3RvcnkgdHJpbW1pbmcgaXMgdXNlZCAoZmFjdG9yeSBzZXR0aW5nIGFyZSBhdmFpbGFibGUgYXQgcmVzZXQpKi8KICAgLyogU1cgTm90aGluZyBoYXMgbm90aGluZyB0byBkbyAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfZGNtaS5jIGIvU3JjL3N0bTMybDR4eF9oYWxfZGNtaS5jCmluZGV4IDFhMjY2YjEuLjIwNjY0YjAgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsX2RjbWkuYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF9kY21pLmMKQEAgLTUzOSw2ICs1MzksMTEgQEAKICAgICAvKiBTdG9yZSB0aGUgaGFsZi1idWZmZXIgY29weSBsZW5ndGggKi8KICAgICBoZGNtaS0+SGFsZkNvcHlMZW5ndGggPSBjaXJjdWxhcl9jb3B5X2xlbmd0aCAvIDJVOwogCisgICAgLyogU2F2ZSBpbml0aWFsIHZhbHVlcyBmb3IgY29udGludW91cyBtb2RlIGNhc2UgKi8KKyAgICBoZGNtaS0+WGZlckNvdW50XzAgPSBoZGNtaS0+WGZlckNvdW50OworICAgIGhkY21pLT5YZmVyU2l6ZV8wICA9IGhkY21pLT5YZmVyU2l6ZTsKKyAgICBoZGNtaS0+cEJ1ZmZQdHJfMCAgPSBoZGNtaS0+cEJ1ZmZQdHI7CisKICAgICAvKiBEQ01JIERSIHNhbXBsZXMgaW4gY2lyY3VsYXIgbW9kZSB3aWxsIGJlIGNvcGllZAogICAgICAgIGF0IHRoZSBlbmQgb2YgdGhlIGZpbmFsIGJ1ZmZlci4KICAgICAgICBOb3cgY29tcHV0ZSB0aGUgY2lyY3VsYXIgYnVmZmVyIHN0YXJ0IGFkZHJlc3MuICovCkBAIC0xMjU3LDQ3ICsxMjYyLDYyIEBACiAKICAgaWYoaGRjbWktPlhmZXJDb3VudCAhPSAwVSkKICAgewotICAgIC8qIE1hbmFnZSBzZWNvbmQgaGFsZiBidWZmZXIgY29weSBpbiBjYXNlIG9mIGJpZyB0cmFuc2ZlciAqLwotCi0gICAgLyogRGVjcmVtZW50IGhhbGYtY29waWVzIGNvdW50ZXIgKi8KLSAgICBoZGNtaS0+WGZlckNvdW50LS07Ci0KLSAgICAvKiBQb2ludCBhdCBEQ01JIGZpbmFsIGRlc3RpbmF0aW9uICovCi0gICAgdG1wQnVmZmVyX0Rlc3QgPSAodWludDMyX3QgKiloZGNtaS0+cEJ1ZmZQdHI7Ci0KLSAgICAvKiBQb2ludCBhdCBEQ01JIGNpcmN1bGFyIGJ1ZmZlciBtaWQtbG9jYXRpb24gKi8KLSAgICB0bXBCdWZmZXJfT3JpZyA9ICh1aW50MzJfdCAqKWhkY21pLT5wQ2lyY3VsYXJCdWZmZXI7Ci0gICAgdGVtcCA9ICh1aW50MzJfdCkgKHRtcEJ1ZmZlcl9PcmlnKTsKLSAgICB0ZW1wICs9IGhkY21pLT5IYWxmQ29weUxlbmd0aDsKLSAgICB0bXBCdWZmZXJfT3JpZyA9ICh1aW50MzJfdCAqKSB0ZW1wOwotCi0gICAgLyogY29weSBoYWxmIHRoZSBidWZmZXIgc2l6ZSAqLwotICAgIGxvb3BfbGVuZ3RoID0gaGRjbWktPkhhbGZDb3B5TGVuZ3RoOwotCi0gICAgLyogU2F2ZSBuZXh0IGVudHJ5IHRvIHdyaXRlIGF0IG5leHQgaGFsZiBETUEgdHJhbnNmZXIgaW50ZXJydXB0aW9uICovCi0gICAgaGRjbWktPnBCdWZmUHRyICs9ICh1aW50MzJfdCkgbG9vcF9sZW5ndGgqNFU7Ci0gICAgaGRjbWktPlhmZXJTaXplIC09IGhkY21pLT5IYWxmQ29weUxlbmd0aDsKLQotICAgIC8qIERhdGEgY29weSBmcm9tIHdvcmsgYnVmZmVyIHRvIGZpbmFsIGRlc3RpbmF0aW9uIGJ1ZmZlciAqLwotICAgIC8qIEVuYWJsZSB0aGUgRE1BIENoYW5uZWwgKi8KLSAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChoZGNtaS0+RE1BTTJNX0hhbmRsZSwgKHVpbnQzMl90KSB0bXBCdWZmZXJfT3JpZywgKHVpbnQzMl90KSB0bXBCdWZmZXJfRGVzdCwgbG9vcF9sZW5ndGgpICE9IEhBTF9PSykKKyAgICBpZiAoaGRjbWktPlhmZXJDb3VudCA9PSAweEJFQkUpCiAgICAgewotICAgICAgLyogVXBkYXRlIGVycm9yIGNvZGUgKi8KLSAgICAgIGhkY21pLT5FcnJvckNvZGUgfD0gSEFMX0RDTUlfRVJST1JfRE1BOworICAgICAgaGRjbWktPlhmZXJDb3VudCA9IGhkY21pLT5YZmVyQ291bnRfMDsKKyAgICAgIGhkY21pLT5YZmVyU2l6ZSAgPSBoZGNtaS0+WGZlclNpemVfMDsKKyAgICAgIGhkY21pLT5wQnVmZlB0ciAgPSBoZGNtaS0+cEJ1ZmZQdHJfMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIE1hbmFnZSBzZWNvbmQgaGFsZiBidWZmZXIgY29weSBpbiBjYXNlIG9mIGJpZyB0cmFuc2ZlciAqLwogCi0gICAgICAvKiBDaGFuZ2UgRENNSSBzdGF0ZSAqLwotICAgICAgaGRjbWktPlN0YXRlID0gSEFMX0RDTUlfU1RBVEVfUkVBRFk7CisgICAgICAvKiBEZWNyZW1lbnQgaGFsZi1jb3BpZXMgY291bnRlciAqLworICAgICAgaGRjbWktPlhmZXJDb3VudC0tOwogCi0gICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgICBfX0hBTF9VTkxPQ0soaGRjbWkpOworICAgICAgLyogUG9pbnQgYXQgRENNSSBmaW5hbCBkZXN0aW5hdGlvbiAqLworICAgICAgdG1wQnVmZmVyX0Rlc3QgPSAodWludDMyX3QgKiloZGNtaS0+cEJ1ZmZQdHI7CiAKLSAgICAgIC8qIERDTUkgZXJyb3IgQ2FsbGJhY2sgKi8KKyAgICAgIC8qIFBvaW50IGF0IERDTUkgY2lyY3VsYXIgYnVmZmVyIG1pZC1sb2NhdGlvbiAqLworICAgICAgdG1wQnVmZmVyX09yaWcgPSAodWludDMyX3QgKiloZGNtaS0+cENpcmN1bGFyQnVmZmVyOworICAgICAgdGVtcCA9ICh1aW50MzJfdCkgKHRtcEJ1ZmZlcl9PcmlnKTsKKyAgICAgICAgdGVtcCArPSBoZGNtaS0+SGFsZkNvcHlMZW5ndGggKiA0VTsKKyAgICAgIHRtcEJ1ZmZlcl9PcmlnID0gKHVpbnQzMl90ICopIHRlbXA7CisKKyAgICAgIC8qIGNvcHkgaGFsZiB0aGUgYnVmZmVyIHNpemUgKi8KKyAgICAgIGxvb3BfbGVuZ3RoID0gaGRjbWktPkhhbGZDb3B5TGVuZ3RoOworCisgICAgICAvKiBTYXZlIG5leHQgZW50cnkgdG8gd3JpdGUgYXQgbmV4dCBoYWxmIERNQSB0cmFuc2ZlciBpbnRlcnJ1cHRpb24gKi8KKyAgICAgIGhkY21pLT5wQnVmZlB0ciArPSAodWludDMyX3QpIGxvb3BfbGVuZ3RoKjRVOworICAgICAgaGRjbWktPlhmZXJTaXplIC09IGhkY21pLT5IYWxmQ29weUxlbmd0aDsKKworICAgICAgICBpZiAoaGRjbWktPlhmZXJDb3VudCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgaGRjbWktPlhmZXJDb3VudCA9IDB4QkVCRTsKKyAgICAgICAgfQorCisKKyAgICAgIC8qIERhdGEgY29weSBmcm9tIHdvcmsgYnVmZmVyIHRvIGZpbmFsIGRlc3RpbmF0aW9uIGJ1ZmZlciAqLworICAgICAgLyogRW5hYmxlIHRoZSBETUEgQ2hhbm5lbCAqLworICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaGRjbWktPkRNQU0yTV9IYW5kbGUsICh1aW50MzJfdCkgdG1wQnVmZmVyX09yaWcsICh1aW50MzJfdCkgdG1wQnVmZmVyX0Rlc3QsIGxvb3BfbGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICB7CisgICAgICAgIC8qIFVwZGF0ZSBlcnJvciBjb2RlICovCisgICAgICAgIGhkY21pLT5FcnJvckNvZGUgfD0gSEFMX0RDTUlfRVJST1JfRE1BOworCisgICAgICAgIC8qIENoYW5nZSBEQ01JIHN0YXRlICovCisgICAgICAgIGhkY21pLT5TdGF0ZSA9IEhBTF9EQ01JX1NUQVRFX1JFQURZOworCisgICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICAgICAgX19IQUxfVU5MT0NLKGhkY21pKTsKKworICAgICAgICAvKiBEQ01JIGVycm9yIENhbGxiYWNrICovCiAjaWYgKFVTRV9IQUxfRENNSV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgICAgIC8qQ2FsbCByZWdpc3RlcmVkIERDTUkgZXJyb3IgY2FsbGJhY2sqLwotICAgICAgaGRjbWktPkVycm9yQ2FsbGJhY2soaGRjbWkpOworICAgICAgICAvKkNhbGwgcmVnaXN0ZXJlZCBEQ01JIGVycm9yIGNhbGxiYWNrKi8KKyAgICAgICAgaGRjbWktPkVycm9yQ2FsbGJhY2soaGRjbWkpOwogI2Vsc2UKLSAgICAgIEhBTF9EQ01JX0Vycm9yQ2FsbGJhY2soaGRjbWkpOworICAgICAgICBIQUxfRENNSV9FcnJvckNhbGxiYWNrKGhkY21pKTsKICNlbmRpZiAvKiBVU0VfSEFMX0RDTUlfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgICAgICB9CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTEzNTYsNDQgKzEzNzYsNDcgQEAKIAogICBpZihoZGNtaS0+WGZlckNvdW50ICE9IDBVKQogICB7Ci0gICAgLyogTWFuYWdlIGZpcnN0IGhhbGYgYnVmZmVyIGNvcHkgaW4gY2FzZSBvZiBiaWcgdHJhbnNmZXIgKi8KLQotICAgIC8qIERlY3JlbWVudCBoYWxmLWNvcGllcyBjb3VudGVyICovCi0gICAgaGRjbWktPlhmZXJDb3VudC0tOwotCi0gICAgLyogUG9pbnQgYXQgRENNSSBmaW5hbCBkZXN0aW5hdGlvbiAqLwotICAgIHRtcEJ1ZmZlcl9EZXN0ID0gKHVpbnQzMl90ICopaGRjbWktPnBCdWZmUHRyOwotCi0gICAgLyogUG9pbnQgYXQgRENNSSBjaXJjdWxhciBidWZmZXIgc3RhcnQgKi8KLSAgICB0bXBCdWZmZXJfT3JpZyA9ICh1aW50MzJfdCAqKWhkY21pLT5wQ2lyY3VsYXJCdWZmZXI7Ci0KLSAgICAvKiBjb3B5IGhhbGYgdGhlIGJ1ZmZlciBzaXplICovCi0gICAgbG9vcF9sZW5ndGggPSBoZGNtaS0+SGFsZkNvcHlMZW5ndGg7Ci0KLSAgICAvKiBTYXZlIG5leHQgZW50cnkgdG8gd3JpdGUgYXQgbmV4dCBETUEgdHJhbnNmZXIgaW50ZXJydXB0aW9uICovCi0gICAgaGRjbWktPnBCdWZmUHRyICs9ICh1aW50MzJfdCkgbG9vcF9sZW5ndGgqNFU7Ci0gICAgaGRjbWktPlhmZXJTaXplIC09IGhkY21pLT5IYWxmQ29weUxlbmd0aDsKLQotICAgIC8qIERhdGEgY29weSBmcm9tIHdvcmsgYnVmZmVyIHRvIGZpbmFsIGRlc3RpbmF0aW9uIGJ1ZmZlciAqLwotICAgIC8qIEVuYWJsZSB0aGUgRE1BIENoYW5uZWwgKi8KLSAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChoZGNtaS0+RE1BTTJNX0hhbmRsZSwgKHVpbnQzMl90KSB0bXBCdWZmZXJfT3JpZywgKHVpbnQzMl90KSB0bXBCdWZmZXJfRGVzdCwgbG9vcF9sZW5ndGgpICE9IEhBTF9PSykKKyAgICBpZiAoaGRjbWktPlhmZXJDb3VudCAhPSAweEJFQkUpCiAgICAgewotICAgICAgLyogVXBkYXRlIGVycm9yIGNvZGUgKi8KLSAgICAgIGhkY21pLT5FcnJvckNvZGUgfD0gSEFMX0RDTUlfRVJST1JfRE1BOworICAgICAgLyogTWFuYWdlIGZpcnN0IGhhbGYgYnVmZmVyIGNvcHkgaW4gY2FzZSBvZiBiaWcgdHJhbnNmZXIgKi8KIAotICAgICAgLyogQ2hhbmdlIERDTUkgc3RhdGUgKi8KLSAgICAgIGhkY21pLT5TdGF0ZSA9IEhBTF9EQ01JX1NUQVRFX1JFQURZOworICAgICAgLyogRGVjcmVtZW50IGhhbGYtY29waWVzIGNvdW50ZXIgKi8KKyAgICAgIGhkY21pLT5YZmVyQ291bnQtLTsKIAotICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgICAgX19IQUxfVU5MT0NLKGhkY21pKTsKKyAgICAgIC8qIFBvaW50IGF0IERDTUkgZmluYWwgZGVzdGluYXRpb24gKi8KKyAgICAgIHRtcEJ1ZmZlcl9EZXN0ID0gKHVpbnQzMl90ICopaGRjbWktPnBCdWZmUHRyOwogCi0gICAgICAvKiBEQ01JIGVycm9yIENhbGxiYWNrICovCisgICAgICAvKiBQb2ludCBhdCBEQ01JIGNpcmN1bGFyIGJ1ZmZlciBzdGFydCAqLworICAgICAgdG1wQnVmZmVyX09yaWcgPSAodWludDMyX3QgKiloZGNtaS0+cENpcmN1bGFyQnVmZmVyOworCisgICAgICAvKiBjb3B5IGhhbGYgdGhlIGJ1ZmZlciBzaXplICovCisgICAgICBsb29wX2xlbmd0aCA9IGhkY21pLT5IYWxmQ29weUxlbmd0aDsKKworICAgICAgLyogU2F2ZSBuZXh0IGVudHJ5IHRvIHdyaXRlIGF0IG5leHQgRE1BIHRyYW5zZmVyIGludGVycnVwdGlvbiAqLworICAgICAgaGRjbWktPnBCdWZmUHRyICs9ICh1aW50MzJfdCkgbG9vcF9sZW5ndGgqNFU7CisgICAgICBoZGNtaS0+WGZlclNpemUgLT0gaGRjbWktPkhhbGZDb3B5TGVuZ3RoOworCisgICAgICAvKiBEYXRhIGNvcHkgZnJvbSB3b3JrIGJ1ZmZlciB0byBmaW5hbCBkZXN0aW5hdGlvbiBidWZmZXIgKi8KKyAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIENoYW5uZWwgKi8KKyAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGhkY21pLT5ETUFNMk1fSGFuZGxlLCAodWludDMyX3QpIHRtcEJ1ZmZlcl9PcmlnLCAodWludDMyX3QpIHRtcEJ1ZmZlcl9EZXN0LCBsb29wX2xlbmd0aCkgIT0gSEFMX09LKQorICAgICAgeworICAgICAgICAvKiBVcGRhdGUgZXJyb3IgY29kZSAqLworICAgICAgICBoZGNtaS0+RXJyb3JDb2RlIHw9IEhBTF9EQ01JX0VSUk9SX0RNQTsKKworICAgICAgICAvKiBDaGFuZ2UgRENNSSBzdGF0ZSAqLworICAgICAgICBoZGNtaS0+U3RhdGUgPSBIQUxfRENNSV9TVEFURV9SRUFEWTsKKworICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICAgIF9fSEFMX1VOTE9DSyhoZGNtaSk7CisKKyAgICAgICAgLyogRENNSSBlcnJvciBDYWxsYmFjayAqLwogI2lmIChVU0VfSEFMX0RDTUlfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgICAvKkNhbGwgcmVnaXN0ZXJlZCBEQ01JIGVycm9yIGNhbGxiYWNrKi8KLSAgICAgIGhkY21pLT5FcnJvckNhbGxiYWNrKGhkY21pKTsKKyAgICAgICAgLypDYWxsIHJlZ2lzdGVyZWQgRENNSSBlcnJvciBjYWxsYmFjayovCisgICAgICAgIGhkY21pLT5FcnJvckNhbGxiYWNrKGhkY21pKTsKICNlbHNlCi0gICAgICBIQUxfRENNSV9FcnJvckNhbGxiYWNrKGhkY21pKTsKKyAgICAgICAgSEFMX0RDTUlfRXJyb3JDYWxsYmFjayhoZGNtaSk7CiAjZW5kaWYgLyogVVNFX0hBTF9EQ01JX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICAgICAgfQogICAgIH0KICAgfQogfQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfZG1hLmMgYi9TcmMvc3RtMzJsNHh4X2hhbF9kbWEuYwppbmRleCAzODk3NzRjLi4yNDg1NmI5IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9kbWEuYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF9kbWEuYwpAQCAtNzgwLDYgKzc4MCw5IEBACiAgICAgLyogQ2xlYXIgdGhlIHRyYW5zZmVyIGNvbXBsZXRlIGZsYWcgKi8KICAgICBoZG1hLT5EbWFCYXNlQWRkcmVzcy0+SUZDUiA9IChETUFfRkxBR19UQzEgPDwgKGhkbWEtPkNoYW5uZWxJbmRleCYgMHgxQ1UpKTsKIAorICAgIC8qIFByb2Nlc3MgdW5sb2NrZWQgKi8KKyAgICBfX0hBTF9VTkxPQ0soaGRtYSk7CisKICAgICAvKiBUaGUgc2VsZWN0ZWQgQ2hhbm5lbHggRU4gYml0IGlzIGNsZWFyZWQgKERNQSBpcyBkaXNhYmxlZCBhbmQKICAgICBhbGwgdHJhbnNmZXJzIGFyZSBjb21wbGV0ZSkgKi8KICAgICBoZG1hLT5TdGF0ZSA9IEhBTF9ETUFfU1RBVEVfUkVBRFk7CkBAIC03OTAsOSArNzkzLDYgQEAKICAgICBoZG1hLT5EbWFCYXNlQWRkcmVzcy0+SUZDUiA9IChETUFfRkxBR19IVDEgPDwgKGhkbWEtPkNoYW5uZWxJbmRleCAmIDB4MUNVKSk7CiAgIH0KIAotICAvKiBQcm9jZXNzIHVubG9ja2VkICovCi0gIF9fSEFMX1VOTE9DSyhoZG1hKTsKLQogICByZXR1cm4gSEFMX09LOwogfQogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2hhbF9mbGFzaF9yYW1mdW5jLmMgYi9TcmMvc3RtMzJsNHh4X2hhbF9mbGFzaF9yYW1mdW5jLmMKaW5kZXggMzEyNjYxMC4uM2FhN2JhYSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfZmxhc2hfcmFtZnVuYy5jCisrKyBiL1NyYy9zdG0zMmw0eHhfaGFsX2ZsYXNoX3JhbWZ1bmMuYwpAQCAtNjQsOCArNjQsNiBAQAogLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotZXh0ZXJuIEZMQVNIX1Byb2Nlc3NUeXBlRGVmIHBGbGFzaDsKLQogLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTMyLDcgKzEzMCw3IEBACiAgICovCiBfX1JBTV9GVU5DIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTEFTSEV4X09CX0RCYW5rQ29uZmlnKHVpbnQzMl90IERCYW5rQ29uZmlnKQogewotICByZWdpc3RlciB1aW50MzJfdCBjb3VudCwgcmVnOworICB1aW50MzJfdCBjb3VudCwgcmVnOwogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfRVJST1I7CiAKICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX2dwaW8uYyBiL1NyYy9zdG0zMmw0eHhfaGFsX2dwaW8uYwppbmRleCA3NDU0YmVjLi42NmYwMWUxIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9ncGlvLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfZ3Bpby5jCkBAIC00NTIsMTcgKzQ1MiwxNiBAQAogICAqLwogdm9pZCBIQUxfR1BJT19Ub2dnbGVQaW4oR1BJT19UeXBlRGVmKiBHUElPeCwgdWludDE2X3QgR1BJT19QaW4pCiB7CisgIHVpbnQzMl90IG9kcjsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfR1BJT19QSU4oR1BJT19QaW4pKTsKIAotICBpZiAoKEdQSU94LT5PRFIgJiBHUElPX1BpbikgIT0gMHgwMHUpCi0gIHsKLSAgICBHUElPeC0+QlJSID0gKHVpbnQzMl90KUdQSU9fUGluOwotICB9Ci0gIGVsc2UKLSAgewotICAgIEdQSU94LT5CU1JSID0gKHVpbnQzMl90KUdQSU9fUGluOwotICB9CisgIC8qIGdldCBjdXJyZW50IE91cHV0IERhdGEgUmVnaXN0ZXIgdmFsdWUgKi8KKyAgb2RyID0gR1BJT3gtPk9EUjsKKworICAvKiBTZXQgc2VsZWN0ZWQgcGlucyB0aGF0IHdlcmUgYXQgbG93IGxldmVsLCBhbmQgcmVzZXQgb25lcyB0aGF0IHdlcmUgaGlnaCAqLworICBHUElPeC0+QlNSUiA9ICgob2RyICYgR1BJT19QaW4pIDw8IEdQSU9fTlVNQkVSKSB8ICh+b2RyICYgR1BJT19QaW4pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX2hjZC5jIGIvU3JjL3N0bTMybDR4eF9oYWxfaGNkLmMKaW5kZXggMTg3M2Y2OC4uNWUwYTliOSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfaGNkLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfaGNkLmMKQEAgLTg4LDggKzg4LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBIQ0RfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgIyMjIyMgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAjIyMjIwpAQCAtNTk1LDYgKzU5NSw3IEBACiAgIH0KIH0KIAorCiAvKioKICAgKiBAYnJpZWYgIFNPRiBjYWxsYmFjay4KICAgKiBAcGFyYW0gIGhoY2QgSENEIGhhbmRsZQpAQCAtODAyLDcgKzgwMyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgVW5yZWdpc3RlciBhbiBVU0IgSENEIENhbGxiYWNrCi0gICogICAgICAgICBVU0IgSENEIGNhbGxhYmNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqICAgICAgICAgVVNCIEhDRCBjYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKICAgKiBAcGFyYW0gIGhoY2QgVVNCIEhDRCBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHVucmVnaXN0ZXJlZAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTk0MSw3ICs5NDIsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFVuUmVnaXN0ZXIgdGhlIFVTQiBIQ0QgSG9zdCBDaGFubmVsIE5vdGlmeSBVUkIgQ2hhbmdlIENhbGxiYWNrCisgICogQGJyaWVmICBVbnJlZ2lzdGVyIHRoZSBVU0IgSENEIEhvc3QgQ2hhbm5lbCBOb3RpZnkgVVJCIENoYW5nZSBDYWxsYmFjawogICAqICAgICAgICAgVVNCIEhDRCBIb3N0IENoYW5uZWwgTm90aWZ5IFVSQiBDaGFuZ2UgQ2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBIQUxfSENEX0hDX05vdGlmeVVSQkNoYW5nZV9DYWxsYmFjaygpIHByZWRlZmluZWQgY2FsbGJhY2sKICAgKiBAcGFyYW0gIGhoY2QgSENEIGhhbmRsZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwpAQCAtOTc4LDggKzk3OSw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgSENEX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucwotICogIEBicmllZiAgIE1hbmFnZW1lbnQgZnVuY3Rpb25zCi0gKgorICAqICBAYnJpZWYgICBNYW5hZ2VtZW50IGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMTAzNyw4ICsxMDM4LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBIQ0RfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNCBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucwotICogIEBicmllZiAgIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCi0gKgorICAqICBAYnJpZWYgICBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMgIyMjIyMKQEAgLTExNjYsNiArMTE2NywxMyBAQAogICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX0FIQkVSUik7CiAgICAgX19IQUxfSENEX1VOTUFTS19IQUxUX0hDX0lOVChjaF9udW0pOwogICB9CisgIGVsc2UgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9CQkVSUikgPT0gVVNCX09UR19IQ0lOVF9CQkVSUikKKyAgeworICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX0JCRVJSKTsKKyAgICBoaGNkLT5oY1tjaF9udW1dLnN0YXRlID0gSENfQkJMRVJSOworICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKKyAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKKyAgfQogICBlbHNlIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfQUNLKSA9PSBVU0JfT1RHX0hDSU5UX0FDSykKICAgewogICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX0FDSyk7CkBAIC0xMjI0LDYgKzEyMzIsNyBAQAogICAgIGVsc2UgaWYgKGhoY2QtPmhjW2NoX251bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0lTT0MpCiAgICAgewogICAgICAgaGhjZC0+aGNbY2hfbnVtXS51cmJfc3RhdGUgPSBVUkJfRE9ORTsKKyAgICAgIGhoY2QtPmhjW2NoX251bV0udG9nZ2xlX2luIF49IDFVOwogCiAjaWYgKFVTRV9IQUxfSENEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgICAgIGhoY2QtPkhDX05vdGlmeVVSQkNoYW5nZUNhbGxiYWNrKGhoY2QsICh1aW50OF90KWNoX251bSwgaGhjZC0+aGNbY2hfbnVtXS51cmJfc3RhdGUpOwpAQCAtMTI3OSw2ICsxMjg4LDExIEBACiAgICAgICB0bXByZWcgfD0gVVNCX09UR19IQ0NIQVJfQ0hFTkE7CiAgICAgICBVU0J4X0hDKGNoX251bSktPkhDQ0hBUiA9IHRtcHJlZzsKICAgICB9CisgICAgZWxzZSBpZiAoaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9PSBIQ19CQkxFUlIpCisgICAgeworICAgICAgaGhjZC0+aGNbY2hfbnVtXS5FcnJDbnQrKzsKKyAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlID0gVVJCX0VSUk9SOworICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgLyogLi4uICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2hhbF9pMmMuYyBiL1NyYy9zdG0zMmw0eHhfaGFsX2kyYy5jCmluZGV4IDVlYThmZDMuLmIwNTY5MmQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsX2kyYy5jCisrKyBiL1NyYy9zdG0zMmw0eHhfaGFsX2kyYy5jCkBAIC05Myw3ICs5Myw3IEBACiAgICAgWy4uXQogICAgICAgKCspIEEgc3BlY2lmaWMgb3B0aW9uIGZpZWxkIG1hbmFnZSB0aGUgZGlmZmVyZW50IHN0ZXBzIG9mIGEgc2VxdWVudGlhbCB0cmFuc2ZlcgogICAgICAgKCspIE9wdGlvbiBmaWVsZCB2YWx1ZXMgYXJlIGRlZmluZWQgdGhyb3VnaCBAcmVmIEkyQ19YRkVST1BUSU9OUyBhbmQgYXJlIGxpc3RlZCBiZWxvdzoKLSAgICAgICgrKykgSTJDX0ZJUlNUX0FORF9MQVNUX0ZSQU1FOiBObyBzZXF1ZW50aWFsIHVzYWdlLCBmdW5jdGlvbm5hbCBpcyBzYW1lIGFzIGFzc29jaWF0ZWQgaW50ZXJmYWNlcyBpbiBubyBzZXF1ZW50aWFsIG1vZGUKKyAgICAgICgrKykgSTJDX0ZJUlNUX0FORF9MQVNUX0ZSQU1FOiBObyBzZXF1ZW50aWFsIHVzYWdlLCBmdW5jdGlvbmFsIGlzIHNhbWUgYXMgYXNzb2NpYXRlZCBpbnRlcmZhY2VzIGluIG5vIHNlcXVlbnRpYWwgbW9kZQogICAgICAgKCsrKSBJMkNfRklSU1RfRlJBTUU6IFNlcXVlbnRpYWwgdXNhZ2UsIHRoaXMgb3B0aW9uIGFsbG93IHRvIG1hbmFnZSBhIHNlcXVlbmNlIHdpdGggc3RhcnQgY29uZGl0aW9uLCBhZGRyZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGRhdGEgdG8gdHJhbnNmZXIgd2l0aG91dCBhIGZpbmFsIHN0b3AgY29uZGl0aW9uCiAgICAgICAoKyspIEkyQ19GSVJTVF9BTkRfTkVYVF9GUkFNRTogU2VxdWVudGlhbCB1c2FnZSAoTWFzdGVyIG9ubHkpLCB0aGlzIG9wdGlvbiBhbGxvdyB0byBtYW5hZ2UgYSBzZXF1ZW5jZSB3aXRoIHN0YXJ0IGNvbmRpdGlvbiwgYWRkcmVzcwpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9JVChvcHRpb24gSTJDX0ZJUlNUX0FORF9ORVhUX0ZSQU1FIHRoZW4gSTJDX05FWFRfRlJBTUUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfRE1BKG9wdGlvbiBJMkNfRklSU1RfQU5EX05FWFRfRlJBTUUgdGhlbiBJMkNfTkVYVF9GUkFNRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIEhBTF9JMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0RNQShvcHRpb24gSTJDX0ZJUlNUX0FORF9ORVhUX0ZSQU1FIHRoZW4gSTJDX05FWFRfRlJBTUUpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZW4gdXNhZ2Ugb2YgdGhpcyBvcHRpb24gSTJDX0xBU1RfRlJBTUVfTk9fU1RPUCBhdCB0aGUgbGFzdCBUcmFuc21pdCBvciBSZWNlaXZlIHNlcXVlbmNlIHBlcm1pdCB0byBjYWxsIHRoZSBvcG9zaXRlIGludGVyZmFjZSBSZWNlaXZlIG9yIFRyYW5zbWl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlbiB1c2FnZSBvZiB0aGlzIG9wdGlvbiBJMkNfTEFTVF9GUkFNRV9OT19TVE9QIGF0IHRoZSBsYXN0IFRyYW5zbWl0IG9yIFJlY2VpdmUgc2VxdWVuY2UgcGVybWl0IHRvIGNhbGwgdGhlIG9wcG9zaXRlIGludGVyZmFjZSBSZWNlaXZlIG9yIFRyYW5zbWl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IHN0b3BwaW5nIHRoZSBjb21tdW5pY2F0aW9uIGFuZCBzbyBnZW5lcmF0ZSBhIHJlc3RhcnQgY29uZGl0aW9uLgogICAgICAgKCsrKSBJMkNfT1RIRVJfRlJBTUU6IFNlcXVlbnRpYWwgdXNhZ2UgKE1hc3RlciBvbmx5KSwgdGhpcyBvcHRpb24gYWxsb3cgdG8gbWFuYWdlIGEgcmVzdGFydCBjb25kaXRpb24gYWZ0ZXIgZWFjaCBjYWxsIG9mIHRoZSBzYW1lIG1hc3RlciBzZXF1ZW50aWFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLgpAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9ETUEob3B0aW9uIEkyQ19GSVJTVF9GUkFNRSB0aGVuIEkyQ19PVEhFUl9GUkFNRSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlbiB1c2FnZSBvZiB0aGlzIG9wdGlvbiBJMkNfT1RIRVJfQU5EX0xBU1RfRlJBTUUgYXQgdGhlIGxhc3QgZnJhbWUgdG8gaGVscCBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBTVE9QIGNvbmRpdGlvbi4KIAotICAgICAgKCspIERpZmZlcmVudHMgc2VxdWVudGlhbCBJMkMgaW50ZXJmYWNlcyBhcmUgbGlzdGVkIGJlbG93OgorICAgICAgKCspIERpZmZlcmVudCBzZXF1ZW50aWFsIEkyQyBpbnRlcmZhY2VzIGFyZSBsaXN0ZWQgYmVsb3c6CiAgICAgICAoKyspIFNlcXVlbnRpYWwgdHJhbnNtaXQgaW4gbWFzdGVyIEkyQyBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHVzaW5nIEByZWYgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0lUKCkKICAgICAgICAgICAgIG9yIHVzaW5nIEByZWYgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0RNQSgpCiAgICAgICAoKysrKSBBdCB0cmFuc21pc3Npb24gZW5kIG9mIGN1cnJlbnQgZnJhbWUgdHJhbnNmZXIsIEByZWYgSEFMX0kyQ19NYXN0ZXJUeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgpAQCAtMzkwLDggKzM5MCwxMCBAQAogc3RhdGljIHZvaWQgSTJDX0lURXJyb3IoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQzMl90IEVycm9yQ29kZSk7CiAKIC8qIFByaXZhdGUgZnVuY3Rpb25zIHRvIGhhbmRsZSBJVCB0cmFuc2ZlciAqLwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19SZXF1ZXN0TWVtb3J5V3JpdGUoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQzMl90IFRpbWVvdXQsIHVpbnQzMl90IFRpY2tzdGFydCk7Ci1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSTJDX1JlcXVlc3RNZW1vcnlSZWFkKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50MzJfdCBUaW1lb3V0LCB1aW50MzJfdCBUaWNrc3RhcnQpOworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19SZXF1ZXN0TWVtb3J5V3JpdGUoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50MzJfdCBUaW1lb3V0LCB1aW50MzJfdCBUaWNrc3RhcnQpOworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19SZXF1ZXN0TWVtb3J5UmVhZChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KTsKIAogLyogUHJpdmF0ZSBmdW5jdGlvbnMgZm9yIEkyQyB0cmFuc2ZlciBJUlEgaGFuZGxlciAqLwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19NYXN0ZXJfSVNSX0lUKHN0cnVjdCBfX0kyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MzJfdCBJVEZsYWdzLCB1aW50MzJfdCBJVFNvdXJjZXMpOwpAQCAtNDAwLDcgKzQwMiw4IEBACiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSTJDX1NsYXZlX0lTUl9ETUEoc3RydWN0IF9fSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQzMl90IElURmxhZ3MsIHVpbnQzMl90IElUU291cmNlcyk7CiAKIC8qIFByaXZhdGUgZnVuY3Rpb25zIHRvIGhhbmRsZSBmbGFncyBkdXJpbmcgcG9sbGluZyB0cmFuc2ZlciAqLwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19XYWl0T25GbGFnVW50aWxUaW1lb3V0KEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MzJfdCBGbGFnLCBGbGFnU3RhdHVzIFN0YXR1cywgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KTsKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBJMkNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDMyX3QgRmxhZywgRmxhZ1N0YXR1cyBTdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KTsKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBJMkNfV2FpdE9uVFhJU0ZsYWdVbnRpbFRpbWVvdXQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQzMl90IFRpbWVvdXQsIHVpbnQzMl90IFRpY2tzdGFydCk7CiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSTJDX1dhaXRPblJYTkVGbGFnVW50aWxUaW1lb3V0KEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MzJfdCBUaW1lb3V0LCB1aW50MzJfdCBUaWNrc3RhcnQpOwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19XYWl0T25TVE9QRmxhZ1VudGlsVGltZW91dChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KTsKQEAgLTQxNyw3ICs0MjAsOCBAQAogc3RhdGljIHZvaWQgSTJDX0ZsdXNoX1RYRFIoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMpOwogCiAvKiBQcml2YXRlIGZ1bmN0aW9uIHRvIGhhbmRsZSAgc3RhcnQsIHJlc3RhcnQgb3Igc3RvcCBhIHRyYW5zZmVyICovCi1zdGF0aWMgdm9pZCBJMkNfVHJhbnNmZXJDb25maWcoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgU2l6ZSwgdWludDMyX3QgTW9kZSwgdWludDMyX3QgUmVxdWVzdCk7CitzdGF0aWMgdm9pZCBJMkNfVHJhbnNmZXJDb25maWcoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgU2l6ZSwgdWludDMyX3QgTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBSZXF1ZXN0KTsKIAogLyogUHJpdmF0ZSBmdW5jdGlvbiB0byBDb252ZXJ0IFNwZWNpZmljIG9wdGlvbnMgKi8KIHN0YXRpYyB2b2lkIEkyQ19Db252ZXJ0T3RoZXJYZmVyT3B0aW9ucyhJMkNfSGFuZGxlVHlwZURlZiAqaGkyYyk7CkBAIC00MzIsOCArNDM2LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBJMkNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICMjIyMjIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgIyMjIyMKQEAgLTY3Miw3ICs2NzYsOCBAQAogICAqIEBwYXJhbSAgcENhbGxiYWNrIHBvaW50ZXIgdG8gdGhlIENhbGxiYWNrIGZ1bmN0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX1JlZ2lzdGVyQ2FsbGJhY2soSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIEhBTF9JMkNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwgcEkyQ19DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19SZWdpc3RlckNhbGxiYWNrKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCBIQUxfSTJDX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEkyQ19DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKQEAgLTk3Nyw4ICs5ODIsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIEkyQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIElucHV0IGFuZCBPdXRwdXQgb3BlcmF0aW9uIGZ1bmN0aW9ucwotICogIEBicmllZiAgIERhdGEgdHJhbnNmZXJzIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgRGF0YSB0cmFuc2ZlcnMgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBJTyBvcGVyYXRpb24gZnVuY3Rpb25zICMjIyMjCkBAIC0xMDYwLDcgKzEwNjUsOCBAQAogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01hc3Rlcl9UcmFuc21pdChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01hc3Rlcl9UcmFuc21pdChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KQogewogICB1aW50MzJfdCB0aWNrc3RhcnQ7CiAKQEAgLTExNzQsNyArMTE4MCw4IEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWFzdGVyX1JlY2VpdmUoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfUmVjZWl2ZShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRpbWVvdXQpCiB7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKIApAQCAtMTU1MCw3ICsxNTU3LDggQEAKICAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfVHJhbnNtaXRfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfVHJhbnNtaXRfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSkKIHsKICAgdWludDMyX3QgeGZlcm1vZGU7CiAKQEAgLTE3ODYsNyArMTc5NCw4IEBACiAgICogQHBhcmFtICBTaXplIEFtb3VudCBvZiBkYXRhIHRvIGJlIHNlbnQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWFzdGVyX1RyYW5zbWl0X0RNQShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01hc3Rlcl9UcmFuc21pdF9ETUEoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUpCiB7CiAgIHVpbnQzMl90IHhmZXJtb2RlOwogICBIQUxfU3RhdHVzVHlwZURlZiBkbWF4ZmVyc3RhdHVzOwpAQCAtMTkyOSw3ICsxOTM4LDggQEAKICAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfUmVjZWl2ZV9ETUEoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfUmVjZWl2ZV9ETUEoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSkKIHsKICAgdWludDMyX3QgeGZlcm1vZGU7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIGRtYXhmZXJzdGF0dXM7CkBAIC0yMjgwLDcgKzIyOTAsOCBAQAogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01lbV9Xcml0ZShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01lbV9Xcml0ZShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KQogewogICB1aW50MzJfdCB0aWNrc3RhcnQ7CiAKQEAgLTIzNzIsOCArMjM4Myw3IEBACiAgICAgICAgIH0KICAgICAgIH0KIAotICAgIH0KLSAgICB3aGlsZSAoaGkyYy0+WGZlckNvdW50ID4gMFUpOworICAgIH0gd2hpbGUgKGhpMmMtPlhmZXJDb3VudCA+IDBVKTsKIAogICAgIC8qIE5vIG5lZWQgdG8gQ2hlY2sgVEMgZmxhZywgd2l0aCBBVVRPRU5EIG1vZGUgdGhlIHN0b3AgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgKi8KICAgICAvKiBXYWl0IHVudGlsIFNUT1BGIGZsYWcgaXMgcmVzZXQgKi8KQEAgLTI0MTUsNyArMjQyNSw4IEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWVtX1JlYWQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NZW1fUmVhZChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpCiB7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKIApAQCAtMjUwNyw4ICsyNTE4LDcgQEAKICAgICAgICAgICBJMkNfVHJhbnNmZXJDb25maWcoaGkyYywgRGV2QWRkcmVzcywgKHVpbnQ4X3QpaGkyYy0+WGZlclNpemUsIEkyQ19BVVRPRU5EX01PREUsIEkyQ19OT19TVEFSVFNUT1ApOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgfQotICAgIHdoaWxlIChoaTJjLT5YZmVyQ291bnQgPiAwVSk7CisgICAgfSB3aGlsZSAoaGkyYy0+WGZlckNvdW50ID4gMFUpOwogCiAgICAgLyogTm8gbmVlZCB0byBDaGVjayBUQyBmbGFnLCB3aXRoIEFVVE9FTkQgbW9kZSB0aGUgc3RvcCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCAqLwogICAgIC8qIFdhaXQgdW50aWwgU1RPUEYgZmxhZyBpcyByZXNldCAqLwpAQCAtMjU0OCw3ICsyNTU4LDggQEAKICAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NZW1fV3JpdGVfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NZW1fV3JpdGVfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKIHsKICAgdWludDMyX3QgdGlja3N0YXJ0OwogICB1aW50MzJfdCB4ZmVybW9kZTsKQEAgLTI2MzksNyArMjY1MCw4IEBACiAgICogQHBhcmFtICBTaXplIEFtb3VudCBvZiBkYXRhIHRvIGJlIHNlbnQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWVtX1JlYWRfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NZW1fUmVhZF9JVChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCiB7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKICAgdWludDMyX3QgeGZlcm1vZGU7CkBAIC0yNzI5LDcgKzI3NDEsOCBAQAogICAqIEBwYXJhbSAgU2l6ZSBBbW91bnQgb2YgZGF0YSB0byBiZSBzZW50CiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01lbV9Xcml0ZV9ETUEoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NZW1fV3JpdGVfRE1BKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQogewogICB1aW50MzJfdCB0aWNrc3RhcnQ7CiAgIHVpbnQzMl90IHhmZXJtb2RlOwpAQCAtMjg3Myw3ICsyODg2LDggQEAKICAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgcmVhZAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NZW1fUmVhZF9ETUEoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NZW1fUmVhZF9ETUEoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKIHsKICAgdWludDMyX3QgdGlja3N0YXJ0OwogICB1aW50MzJfdCB4ZmVybW9kZTsKQEAgLTMxMjQsOCArMzEzOCw3IEBACiAKICAgICAgIC8qIEluY3JlbWVudCBUcmlhbHMgKi8KICAgICAgIEkyQ19UcmlhbHMrKzsKLSAgICB9Ci0gICAgd2hpbGUgKEkyQ19UcmlhbHMgPCBUcmlhbHMpOworICAgIH0gd2hpbGUgKEkyQ19UcmlhbHMgPCBUcmlhbHMpOwogCiAgICAgLyogVXBkYXRlIEkyQyBzdGF0ZSAqLwogICAgIGhpMmMtPlN0YXRlID0gSEFMX0kyQ19TVEFURV9SRUFEWTsKQEAgLTMxNTYsNyArMzE2OSw4IEBACiAgICogQHBhcmFtICBYZmVyT3B0aW9ucyBPcHRpb25zIG9mIFRyYW5zZmVyLCB2YWx1ZSBvZiBAcmVmIEkyQ19YRkVST1BUSU9OUwogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0lUKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKQogewogICB1aW50MzJfdCB4ZmVybW9kZTsKICAgdWludDMyX3QgeGZlcnJlcXVlc3QgPSBJMkNfR0VORVJBVEVfU1RBUlRfV1JJVEU7CkBAIC0zMjQwLDcgKzMyNTQsOCBAQAogICAqIEBwYXJhbSAgWGZlck9wdGlvbnMgT3B0aW9ucyBvZiBUcmFuc2ZlciwgdmFsdWUgb2YgQHJlZiBJMkNfWEZFUk9QVElPTlMKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9ETUEoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9ETUEoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucykKIHsKICAgdWludDMyX3QgeGZlcm1vZGU7CiAgIHVpbnQzMl90IHhmZXJyZXF1ZXN0ID0gSTJDX0dFTkVSQVRFX1NUQVJUX1dSSVRFOwpAQCAtMzQwMiw3ICszNDE3LDggQEAKICAgKiBAcGFyYW0gIFhmZXJPcHRpb25zIE9wdGlvbnMgb2YgVHJhbnNmZXIsIHZhbHVlIG9mIEByZWYgSTJDX1hGRVJPUFRJT05TCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9JVChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NYXN0ZXJfU2VxX1JlY2VpdmVfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpCiB7CiAgIHVpbnQzMl90IHhmZXJtb2RlOwogICB1aW50MzJfdCB4ZmVycmVxdWVzdCA9IEkyQ19HRU5FUkFURV9TVEFSVF9SRUFEOwpAQCAtMzQ4Niw3ICszNTAyLDggQEAKICAgKiBAcGFyYW0gIFhmZXJPcHRpb25zIE9wdGlvbnMgb2YgVHJhbnNmZXIsIHZhbHVlIG9mIEByZWYgSTJDX1hGRVJPUFRJT05TCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9ETUEoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0RNQShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpCiB7CiAgIHVpbnQzMl90IHhmZXJtb2RlOwogICB1aW50MzJfdCB4ZmVycmVxdWVzdCA9IEkyQ19HRU5FUkFURV9TVEFSVF9SRUFEOwpAQCAtMzY0Niw3ICszNjYzLDggQEAKICAgKiBAcGFyYW0gIFhmZXJPcHRpb25zIE9wdGlvbnMgb2YgVHJhbnNmZXIsIHZhbHVlIG9mIEByZWYgSTJDX1hGRVJPUFRJT05TCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX1NsYXZlX1NlcV9UcmFuc21pdF9JVChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgWGZlck9wdGlvbnMpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19JMkNfVFJBTlNGRVJfT1BUSU9OU19SRVFVRVNUKFhmZXJPcHRpb25zKSk7CkBAIC0zNzQxLDcgKzM3NTksOCBAQAogICAqIEBwYXJhbSAgWGZlck9wdGlvbnMgT3B0aW9ucyBvZiBUcmFuc2ZlciwgdmFsdWUgb2YgQHJlZiBJMkNfWEZFUk9QVElPTlMKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfU2xhdmVfU2VxX1RyYW5zbWl0X0RNQShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfRE1BKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBYZmVyT3B0aW9ucykKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgZG1heGZlcnN0YXR1czsKIApAQCAtMzkyMCw3ICszOTM5LDggQEAKICAgKiBAcGFyYW0gIFhmZXJPcHRpb25zIE9wdGlvbnMgb2YgVHJhbnNmZXIsIHZhbHVlIG9mIEByZWYgSTJDX1hGRVJPUFRJT05TCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX1NsYXZlX1NlcV9SZWNlaXZlX0lUKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX1NsYXZlX1NlcV9SZWNlaXZlX0lUKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgWGZlck9wdGlvbnMpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19JMkNfVFJBTlNGRVJfT1BUSU9OU19SRVFVRVNUKFhmZXJPcHRpb25zKSk7CkBAIC00MDE1LDcgKzQwMzUsOCBAQAogICAqIEBwYXJhbSAgWGZlck9wdGlvbnMgT3B0aW9ucyBvZiBUcmFuc2ZlciwgdmFsdWUgb2YgQHJlZiBJMkNfWEZFUk9QVElPTlMKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfU2xhdmVfU2VxX1JlY2VpdmVfRE1BKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX1NsYXZlX1NlcV9SZWNlaXZlX0RNQShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBYZmVyT3B0aW9ucykKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgZG1heGZlcnN0YXR1czsKIApAQCAtNDMwMCw4ICs0MzIxLDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBJMkNfSVJRX0hhbmRsZXJfYW5kX0NhbGxiYWNrcyBJUlEgSGFuZGxlciBhbmQgQ2FsbGJhY2tzCi0gKiBAewotICovCisgICogQHsKKyAgKi8KIAogLyoqCiAgICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgSTJDIGV2ZW50IGludGVycnVwdCByZXF1ZXN0LgpAQCAtNDUzOSw4ICs0NTYwLDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBJMkNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBQZXJpcGhlcmFsIFN0YXRlLCBNb2RlIGFuZCBFcnJvciBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICBQZXJpcGhlcmFsIFN0YXRlLCBNb2RlIGFuZCBFcnJvciBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgIFBlcmlwaGVyYWwgU3RhdGUsIE1vZGUgYW5kIEVycm9yIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAjIyMjIyBQZXJpcGhlcmFsIFN0YXRlLCBNb2RlIGFuZCBFcnJvciBmdW5jdGlvbnMgIyMjIyMKQEAgLTQ1NzcsMTEgKzQ1OTgsMTEgQEAKIH0KIAogLyoqCi0qIEBicmllZiAgUmV0dXJuIHRoZSBJMkMgZXJyb3IgY29kZS4KKyAgKiBAYnJpZWYgIFJldHVybiB0aGUgSTJDIGVycm9yIGNvZGUuCiAgICogQHBhcmFtICBoaTJjIFBvaW50ZXIgdG8gYSBJMkNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJMkMuCi0qIEByZXR2YWwgSTJDIEVycm9yIENvZGUKLSovCisgICogQHJldHZhbCBJMkMgRXJyb3IgQ29kZQorICAqLwogdWludDMyX3QgSEFMX0kyQ19HZXRFcnJvcihJMkNfSGFuZGxlVHlwZURlZiAqaGkyYykKIHsKICAgcmV0dXJuIGhpMmMtPkVycm9yQ29kZTsKQEAgLTQ3NjcsNyArNDc4OCw4IEBACiAgICAgLyogU28gY2xlYXIgRmxhZyBOQUNLRiBvbmx5ICovCiAgICAgaWYgKGhpMmMtPlhmZXJDb3VudCA9PSAwVSkKICAgICB7Ci0gICAgICBpZiAoKGhpMmMtPlN0YXRlID09IEhBTF9JMkNfU1RBVEVfTElTVEVOKSAmJiAodG1wb3B0aW9ucyA9PSBJMkNfRklSU1RfQU5EX0xBU1RfRlJBTUUpKSAvKiBTYW1lIGFjdGlvbiBtdXN0IGJlIGRvbmUgZm9yICh0bXBvcHRpb25zID09IEkyQ19MQVNUX0ZSQU1FKSB3aGljaCByZW1vdmVkIGZvciBXYXJuaW5nW1BhMTM0XTogbGVmdCBhbmQgcmlnaHQgb3BlcmFuZHMgYXJlIGlkZW50aWNhbCAqLworICAgICAgLyogU2FtZSBhY3Rpb24gbXVzdCBiZSBkb25lIGZvciAodG1wb3B0aW9ucyA9PSBJMkNfTEFTVF9GUkFNRSkgd2hpY2ggcmVtb3ZlZCBmb3IgV2FybmluZ1tQYTEzNF06IGxlZnQgYW5kIHJpZ2h0IG9wZXJhbmRzIGFyZSBpZGVudGljYWwgKi8KKyAgICAgIGlmICgoaGkyYy0+U3RhdGUgPT0gSEFMX0kyQ19TVEFURV9MSVNURU4pICYmICh0bXBvcHRpb25zID09IEkyQ19GSVJTVF9BTkRfTEFTVF9GUkFNRSkpCiAgICAgICB7CiAgICAgICAgIC8qIENhbGwgSTJDIExpc3RlbiBjb21wbGV0ZSBwcm9jZXNzICovCiAgICAgICAgIEkyQ19JVExpc3RlbkNwbHQoaGkyYywgdG1wSVRGbGFncyk7CkBAIC00ODI3LDcgKzQ4NDksOCBAQAogICAgICAgSTJDX0lUU2xhdmVTZXFDcGx0KGhpMmMpOwogICAgIH0KICAgfQotICBlbHNlIGlmICgoSTJDX0NIRUNLX0ZMQUcodG1wSVRGbGFncywgSTJDX0ZMQUdfQUREUikgIT0gUkVTRVQpICYmIChJMkNfQ0hFQ0tfSVRfU09VUkNFKElUU291cmNlcywgSTJDX0lUX0FERFJJKSAhPSBSRVNFVCkpCisgIGVsc2UgaWYgKChJMkNfQ0hFQ0tfRkxBRyh0bXBJVEZsYWdzLCBJMkNfRkxBR19BRERSKSAhPSBSRVNFVCkgJiYgXAorICAgICAgICAgICAoSTJDX0NIRUNLX0lUX1NPVVJDRShJVFNvdXJjZXMsIEkyQ19JVF9BRERSSSkgIT0gUkVTRVQpKQogICB7CiAgICAgSTJDX0lUQWRkckNwbHQoaGkyYywgdG1wSVRGbGFncyk7CiAgIH0KQEAgLTQ4MzUsNyArNDg1OCw3IEBACiAgIHsKICAgICAvKiBXcml0ZSBkYXRhIHRvIFRYRFIgb25seSBpZiBYZmVyQ291bnQgbm90IHJlYWNoICIwIiAqLwogICAgIC8qIEEgVFhJUyBmbGFnIGNhbiBiZSBzZXQsIGR1cmluZyBTVE9QIHRyZWF0bWVudCAgICAgICovCi0gICAgLyogQ2hlY2sgaWYgYWxsIERhdGFzIGhhdmUgYWxyZWFkeSBiZWVuIHNlbnQgKi8KKyAgICAvKiBDaGVjayBpZiBhbGwgZGF0YSBoYXZlIGFscmVhZHkgYmVlbiBzZW50ICovCiAgICAgLyogSWYgaXQgaXMgdGhlIGNhc2UsIHRoaXMgbGFzdCB3cml0ZSBpbiBUWERSIGlzIG5vdCBzZW50LCBjb3JyZXNwb25kIHRvIGEgZHVtbXkgVFhJUyBldmVudCAqLwogICAgIGlmIChoaTJjLT5YZmVyQ291bnQgPiAwVSkKICAgICB7CkBAIC01MDYzLDcgKzUwODYsOCBAQAogCiAgICAgICBpZiAodHJlYXRkbWFuYWNrID09IDFVKQogICAgICAgewotICAgICAgICBpZiAoKGhpMmMtPlN0YXRlID09IEhBTF9JMkNfU1RBVEVfTElTVEVOKSAmJiAodG1wb3B0aW9ucyA9PSBJMkNfRklSU1RfQU5EX0xBU1RfRlJBTUUpKSAvKiBTYW1lIGFjdGlvbiBtdXN0IGJlIGRvbmUgZm9yICh0bXBvcHRpb25zID09IEkyQ19MQVNUX0ZSQU1FKSB3aGljaCByZW1vdmVkIGZvciBXYXJuaW5nW1BhMTM0XTogbGVmdCBhbmQgcmlnaHQgb3BlcmFuZHMgYXJlIGlkZW50aWNhbCAqLworICAgICAgICAvKiBTYW1lIGFjdGlvbiBtdXN0IGJlIGRvbmUgZm9yICh0bXBvcHRpb25zID09IEkyQ19MQVNUX0ZSQU1FKSB3aGljaCByZW1vdmVkIGZvciBXYXJuaW5nW1BhMTM0XTogbGVmdCBhbmQgcmlnaHQgb3BlcmFuZHMgYXJlIGlkZW50aWNhbCAqLworICAgICAgICBpZiAoKGhpMmMtPlN0YXRlID09IEhBTF9JMkNfU1RBVEVfTElTVEVOKSAmJiAodG1wb3B0aW9ucyA9PSBJMkNfRklSU1RfQU5EX0xBU1RfRlJBTUUpKQogICAgICAgICB7CiAgICAgICAgICAgLyogQ2FsbCBJMkMgTGlzdGVuIGNvbXBsZXRlIHByb2Nlc3MgKi8KICAgICAgICAgICBJMkNfSVRMaXN0ZW5DcGx0KGhpMmMsIElURmxhZ3MpOwpAQCAtNTE1MSw3ICs1MTc1LDggQEAKICAgKiBAcGFyYW0gIFRpY2tzdGFydCBUaWNrIHN0YXJ0IHZhbHVlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSTJDX1JlcXVlc3RNZW1vcnlXcml0ZShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KQorc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19SZXF1ZXN0TWVtb3J5V3JpdGUoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50MzJfdCBUaW1lb3V0LCB1aW50MzJfdCBUaWNrc3RhcnQpCiB7CiAgIEkyQ19UcmFuc2ZlckNvbmZpZyhoaTJjLCBEZXZBZGRyZXNzLCAodWludDhfdClNZW1BZGRTaXplLCBJMkNfUkVMT0FEX01PREUsIEkyQ19HRU5FUkFURV9TVEFSVF9XUklURSk7CiAKQEAgLTUyMDQsNyArNTIyOSw4IEBACiAgICogQHBhcmFtICBUaWNrc3RhcnQgVGljayBzdGFydCB2YWx1ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19SZXF1ZXN0TWVtb3J5UmVhZChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KQorc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19SZXF1ZXN0TWVtb3J5UmVhZChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KQogewogICBJMkNfVHJhbnNmZXJDb25maWcoaGkyYywgRGV2QWRkcmVzcywgKHVpbnQ4X3QpTWVtQWRkU2l6ZSwgSTJDX1NPRlRFTkRfTU9ERSwgSTJDX0dFTkVSQVRFX1NUQVJUX1dSSVRFKTsKIApAQCAtNTcxOSw3ICs1NzQ1LDcgQEAKICAgfQogICBlbHNlIGlmIChoaTJjLT5YZmVyT3B0aW9ucyAhPSBJMkNfTk9fT1BUSU9OX0ZSQU1FKQogICB7Ci0gICAgLyogQ2FsbCB0aGUgU2VxdWVudGlhbCBDb21wbGV0ZSBjYWxsYmFjaywgdG8gaW5mb3JtIHVwcGVyIGxheWVyIG9mIHRoZSBlbmQgb2YgVHJhbmZlciAqLworICAgIC8qIENhbGwgdGhlIFNlcXVlbnRpYWwgQ29tcGxldGUgY2FsbGJhY2ssIHRvIGluZm9ybSB1cHBlciBsYXllciBvZiB0aGUgZW5kIG9mIFRyYW5zZmVyICovCiAgICAgSTJDX0lUU2xhdmVTZXFDcGx0KGhpMmMpOwogCiAgICAgaGkyYy0+WGZlck9wdGlvbnMgPSBJMkNfTk9fT1BUSU9OX0ZSQU1FOwpAQCAtNTg1Niw3ICs1ODgyLDcgQEAKICAgICAvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCiAgICAgSTJDX0Rpc2FibGVfSVJRKGhpMmMsIEkyQ19YRkVSX0xJU1RFTl9JVCB8IEkyQ19YRkVSX1JYX0lUIHwgSTJDX1hGRVJfVFhfSVQpOwogCi0gICAgLyogSWYgc3RhdGUgaXMgYW4gYWJvcnQgdHJlYXRtZW50IG9uIGdvaW5kLCBkb24ndCBjaGFuZ2Ugc3RhdGUgKi8KKyAgICAvKiBJZiBzdGF0ZSBpcyBhbiBhYm9ydCB0cmVhdG1lbnQgb24gZ29pbmcsIGRvbid0IGNoYW5nZSBzdGF0ZSAqLwogICAgIC8qIFRoaXMgY2hhbmdlIHdpbGwgYmUgZG8gbGF0ZXIgKi8KICAgICBpZiAoaGkyYy0+U3RhdGUgIT0gSEFMX0kyQ19TVEFURV9BQk9SVCkKICAgICB7CkBAIC01ODY4LDcgKzU4OTQsOCBAQAogCiAgIC8qIEFib3J0IERNQSBUWCB0cmFuc2ZlciBpZiBhbnkgKi8KICAgdG1wcHJldmlvdXNzdGF0ZSA9IGhpMmMtPlByZXZpb3VzU3RhdGU7Ci0gIGlmICgoaGkyYy0+aGRtYXR4ICE9IE5VTEwpICYmICgodG1wcHJldmlvdXNzdGF0ZSA9PSBJMkNfU1RBVEVfTUFTVEVSX0JVU1lfVFgpIHx8ICh0bXBwcmV2aW91c3N0YXRlID09IEkyQ19TVEFURV9TTEFWRV9CVVNZX1RYKSkpCisgIGlmICgoaGkyYy0+aGRtYXR4ICE9IE5VTEwpICYmICgodG1wcHJldmlvdXNzdGF0ZSA9PSBJMkNfU1RBVEVfTUFTVEVSX0JVU1lfVFgpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0bXBwcmV2aW91c3N0YXRlID09IEkyQ19TVEFURV9TTEFWRV9CVVNZX1RYKSkpCiAgIHsKICAgICBpZiAoKGhpMmMtPkluc3RhbmNlLT5DUjEgJiBJMkNfQ1IxX1RYRE1BRU4pID09IEkyQ19DUjFfVFhETUFFTikKICAgICB7CkBAIC01ODk3LDcgKzU5MjQsOCBAQAogICAgIH0KICAgfQogICAvKiBBYm9ydCBETUEgUlggdHJhbnNmZXIgaWYgYW55ICovCi0gIGVsc2UgaWYgKChoaTJjLT5oZG1hcnggIT0gTlVMTCkgJiYgKCh0bXBwcmV2aW91c3N0YXRlID09IEkyQ19TVEFURV9NQVNURVJfQlVTWV9SWCkgfHwgKHRtcHByZXZpb3Vzc3RhdGUgPT0gSTJDX1NUQVRFX1NMQVZFX0JVU1lfUlgpKSkKKyAgZWxzZSBpZiAoKGhpMmMtPmhkbWFyeCAhPSBOVUxMKSAmJiAoKHRtcHByZXZpb3Vzc3RhdGUgPT0gSTJDX1NUQVRFX01BU1RFUl9CVVNZX1JYKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0bXBwcmV2aW91c3N0YXRlID09IEkyQ19TVEFURV9TTEFWRV9CVVNZX1JYKSkpCiAgIHsKICAgICBpZiAoKGhpMmMtPkluc3RhbmNlLT5DUjEgJiBJMkNfQ1IxX1JYRE1BRU4pID09IEkyQ19DUjFfUlhETUFFTikKICAgICB7CkBAIC02MTg5LDcgKzYyMTcsOCBAQAogICAqIEBwYXJhbSAgVGlja3N0YXJ0IFRpY2sgc3RhcnQgdmFsdWUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLXN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBJMkNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDMyX3QgRmxhZywgRmxhZ1N0YXR1cyBTdGF0dXMsIHVpbnQzMl90IFRpbWVvdXQsIHVpbnQzMl90IFRpY2tzdGFydCkKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBJMkNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDMyX3QgRmxhZywgRmxhZ1N0YXR1cyBTdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KQogewogICB3aGlsZSAoX19IQUxfSTJDX0dFVF9GTEFHKGhpMmMsIEZsYWcpID09IFN0YXR1cykKICAgewpAQCAtNjQyMSw3ICs2NDUwLDggQEAKICAgKiAgICAgQGFyZyBAcmVmIEkyQ19HRU5FUkFURV9TVEFSVF9XUklURSBHZW5lcmF0ZSBSZXN0YXJ0IGZvciB3cml0ZSByZXF1ZXN0LgogICAqIEByZXR2YWwgTm9uZQogICAqLwotc3RhdGljIHZvaWQgSTJDX1RyYW5zZmVyQ29uZmlnKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90IFNpemUsIHVpbnQzMl90IE1vZGUsIHVpbnQzMl90IFJlcXVlc3QpCitzdGF0aWMgdm9pZCBJMkNfVHJhbnNmZXJDb25maWcoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgU2l6ZSwgdWludDMyX3QgTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBSZXF1ZXN0KQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfSTJDX0FMTF9JTlNUQU5DRShoaTJjLT5JbnN0YW5jZSkpOwpAQCAtNjQyOSw4ICs2NDU5LDExIEBACiAgIGFzc2VydF9wYXJhbShJU19UUkFOU0ZFUl9SRVFVRVNUKFJlcXVlc3QpKTsKIAogICAvKiB1cGRhdGUgQ1IyIHJlZ2lzdGVyICovCi0gIE1PRElGWV9SRUcoaGkyYy0+SW5zdGFuY2UtPkNSMiwgKChJMkNfQ1IyX1NBREQgfCBJMkNfQ1IyX05CWVRFUyB8IEkyQ19DUjJfUkVMT0FEIHwgSTJDX0NSMl9BVVRPRU5EIHwgKEkyQ19DUjJfUkRfV1JOICYgKHVpbnQzMl90KShSZXF1ZXN0ID4+ICgzMVUgLSBJMkNfQ1IyX1JEX1dSTl9Qb3MpKSkgfCBJMkNfQ1IyX1NUQVJUIHwgSTJDX0NSMl9TVE9QKSksIFwKLSAgICAgICAgICAgICAodWludDMyX3QpKCgodWludDMyX3QpRGV2QWRkcmVzcyAmIEkyQ19DUjJfU0FERCkgfCAoKCh1aW50MzJfdClTaXplIDw8IEkyQ19DUjJfTkJZVEVTX1BvcykgJiBJMkNfQ1IyX05CWVRFUykgfCAodWludDMyX3QpTW9kZSB8ICh1aW50MzJfdClSZXF1ZXN0KSk7CisgIE1PRElGWV9SRUcoaGkyYy0+SW5zdGFuY2UtPkNSMiwKKyAgICAgICAgICAgICAoKEkyQ19DUjJfU0FERCB8IEkyQ19DUjJfTkJZVEVTIHwgSTJDX0NSMl9SRUxPQUQgfCBJMkNfQ1IyX0FVVE9FTkQgfCBcCisgICAgICAgICAgICAgICAoSTJDX0NSMl9SRF9XUk4gJiAodWludDMyX3QpKFJlcXVlc3QgPj4gKDMxVSAtIEkyQ19DUjJfUkRfV1JOX1BvcykpKSB8IEkyQ19DUjJfU1RBUlQgfCBJMkNfQ1IyX1NUT1ApKSwgXAorICAgICAgICAgICAgICh1aW50MzJfdCkoKCh1aW50MzJfdClEZXZBZGRyZXNzICYgSTJDX0NSMl9TQUREKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdClTaXplIDw8IEkyQ19DUjJfTkJZVEVTX1BvcykgJiBJMkNfQ1IyX05CWVRFUykgfCAodWludDMyX3QpTW9kZSB8ICh1aW50MzJfdClSZXF1ZXN0KSk7CiB9CiAKIC8qKgpAQCAtNjU3MCw3ICs2NjAzLDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBDb252ZXJ0IEkyQ3ggT1RIRVJfeHh4IFhmZXJPcHRpb25zIHRvIGZ1bmN0aW9ubmFsIFhmZXJPcHRpb25zLgorICAqIEBicmllZiAgQ29udmVydCBJMkN4IE9USEVSX3h4eCBYZmVyT3B0aW9ucyB0byBmdW5jdGlvbmFsIFhmZXJPcHRpb25zLgogICAqIEBwYXJhbSAgaGkyYyBJMkMgaGFuZGxlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfaTJjX2V4LmMgYi9TcmMvc3RtMzJsNHh4X2hhbF9pMmNfZXguYwppbmRleCAzNTI5NmE3Li5jMzA0YmY2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9pMmNfZXguYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF9pMmNfZXguYwpAQCAtNzMsNyArNzMsNyBAQAogCiAvKiogQGRlZmdyb3VwIEkyQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgRXh0ZW5kZWQgZmVhdHVyZXMgZnVuY3Rpb25zCiAgICogQGJyaWVmICAgIEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucwotICoKKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucyAjIyMjIwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfbHB0aW0uYyBiL1NyYy9zdG0zMmw0eHhfaGFsX2xwdGltLmMKaW5kZXggZjY0MzM5OC4uY2FiMDM0NiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfbHB0aW0uYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF9scHRpbS5jCkBAIC0xOTIsNyArMTkyLDcgQEAKIAogI2RlZmluZSBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfSVQoX19JTlNUQU5DRV9fKSBcCiAgICAgICgoKF9fSU5TVEFOQ0VfXykgPT0gTFBUSU0xKSA/IF9fSEFMX0xQVElNX0xQVElNMV9FWFRJX0RJU0FCTEVfSVQoKSA6IF9fSEFMX0xQVElNX0xQVElNMl9FWFRJX0RJU0FCTEVfSVQoKSkKLSNlbHNlIAorI2Vsc2UKICNkZWZpbmUgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9FTkFCTEVfSVQoX19JTlNUQU5DRV9fKSBfX0hBTF9MUFRJTV9MUFRJTTFfRVhUSV9FTkFCTEVfSVQoKQogCiAjZGVmaW5lIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9JVChfX0lOU1RBTkNFX18pIF9fSEFMX0xQVElNX0xQVElNMV9FWFRJX0RJU0FCTEVfSVQoKQpAQCAtMjUzLDE2ICsyNTMsMTkgQEAKIAogICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fQ0xPQ0tfU09VUkNFKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UpKTsKICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0NMT0NLX1BSRVNDQUxFUihobHB0aW0tPkluaXQuQ2xvY2suUHJlc2NhbGVyKSk7Ci0gIGlmICgoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSkgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKQorICBpZiAoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSA9PSBMUFRJTV9DTE9DS1NPVVJDRV9VTFBUSU0pCiAgIHsKICAgICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fQ0xPQ0tfUE9MQVJJVFkoaGxwdGltLT5Jbml0LlVsdHJhTG93UG93ZXJDbG9jay5Qb2xhcml0eSkpOwotICAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9DTE9DS19TQU1QTEVfVElNRShobHB0aW0tPkluaXQuVWx0cmFMb3dQb3dlckNsb2NrLlNhbXBsZVRpbWUpKTsKICAgfQogICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fVFJHX1NPVVJDRShobHB0aW0tPkluaXQuVHJpZ2dlci5Tb3VyY2UpKTsKLSAgaWYgKChobHB0aW0tPkluaXQuVHJpZ2dlci5Tb3VyY2UpICE9IExQVElNX1RSSUdTT1VSQ0VfU09GVFdBUkUpCisgIGlmIChobHB0aW0tPkluaXQuVHJpZ2dlci5Tb3VyY2UgIT0gTFBUSU1fVFJJR1NPVVJDRV9TT0ZUV0FSRSkKKyAgeworICAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9FWFRfVFJHX1BPTEFSSVRZKGhscHRpbS0+SW5pdC5UcmlnZ2VyLkFjdGl2ZUVkZ2UpKTsKKyAgfQorICBpZiAoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSA9PSBMUFRJTV9DTE9DS1NPVVJDRV9BUEJDTE9DS19MUE9TQykKICAgewogICAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9UUklHX1NBTVBMRV9USU1FKGhscHRpbS0+SW5pdC5UcmlnZ2VyLlNhbXBsZVRpbWUpKTsKLSAgICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fRVhUX1RSR19QT0xBUklUWShobHB0aW0tPkluaXQuVHJpZ2dlci5BY3RpdmVFZGdlKSk7CisgICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0NMT0NLX1NBTVBMRV9USU1FKGhscHRpbS0+SW5pdC5VbHRyYUxvd1Bvd2VyQ2xvY2suU2FtcGxlVGltZSkpOwogICB9CiAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9PVVRQVVRfUE9MQVJJVFkoaGxwdGltLT5Jbml0Lk91dHB1dFBvbGFyaXR5KSk7CiAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9VUERBVEVfTU9ERShobHB0aW0tPkluaXQuVXBkYXRlTW9kZSkpOwpAQCAtMzI1LDEzICszMjgsMTcgQEAKICAgLyogR2V0IHRoZSBMUFRJTXggQ0ZHUiB2YWx1ZSAqLwogICB0bXBjZmdyID0gaGxwdGltLT5JbnN0YW5jZS0+Q0ZHUjsKIAotICBpZiAoKChobHB0aW0tPkluaXQuQ2xvY2suU291cmNlKSA9PSBMUFRJTV9DTE9DS1NPVVJDRV9VTFBUSU0pIHx8ICgoaGxwdGltLT5Jbml0LkNvdW50ZXJTb3VyY2UpID09IExQVElNX0NPVU5URVJTT1VSQ0VfRVhURVJOQUwpKQorICBpZiAoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSA9PSBMUFRJTV9DTE9DS1NPVVJDRV9VTFBUSU0pCiAgIHsKLSAgICB0bXBjZmdyICY9ICh1aW50MzJfdCkofihMUFRJTV9DRkdSX0NLUE9MIHwgTFBUSU1fQ0ZHUl9DS0ZMVCkpOworICAgIHRtcGNmZ3IgJj0gKHVpbnQzMl90KSh+KExQVElNX0NGR1JfQ0tQT0wpKTsKICAgfQotICBpZiAoKGhscHRpbS0+SW5pdC5UcmlnZ2VyLlNvdXJjZSkgIT0gTFBUSU1fVFJJR1NPVVJDRV9TT0ZUV0FSRSkKKyAgaWYgKGhscHRpbS0+SW5pdC5UcmlnZ2VyLlNvdXJjZSAhPSBMUFRJTV9UUklHU09VUkNFX1NPRlRXQVJFKQogICB7Ci0gICAgdG1wY2ZnciAmPSAodWludDMyX3QpKH4oTFBUSU1fQ0ZHUl9UUkdGTFQgfCBMUFRJTV9DRkdSX1RSSUdTRUwpKTsKKyAgICB0bXBjZmdyICY9ICh1aW50MzJfdCkofihMUFRJTV9DRkdSX1RSSUdTRUwpKTsKKyAgfQorICBpZiAoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSA9PSBMUFRJTV9DTE9DS1NPVVJDRV9BUEJDTE9DS19MUE9TQykKKyAgeworICAgIHRtcGNmZ3IgJj0gKHVpbnQzMl90KSh+KExQVElNX0NGR1JfVFJHRkxUIHwgTFBUSU1fQ0ZHUl9DS0ZMVCkpOwogICB9CiAKICAgLyogQ2xlYXIgQ0tTRUwsIENLUE9MLCBQUkVTQywgVFJJR0VOLCBUUkdGTFQsIFdBVlBPTCwgUFJFTE9BRCAmIENPVU5UTU9ERSBiaXRzICovCkBAIC0zNDUsMTggKzM1MiwyOCBAQAogICAgICAgICAgICAgICBobHB0aW0tPkluaXQuVXBkYXRlTW9kZSAgICAgIHwKICAgICAgICAgICAgICAgaGxwdGltLT5Jbml0LkNvdW50ZXJTb3VyY2UpOwogCi0gIGlmICgoKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UpID09IExQVElNX0NMT0NLU09VUkNFX1VMUFRJTSkgfHwgKChobHB0aW0tPkluaXQuQ291bnRlclNvdXJjZSkgPT0gTFBUSU1fQ09VTlRFUlNPVVJDRV9FWFRFUk5BTCkpCisgIC8qIEdsaXRjaCBmaWx0ZXJzIGZvciBpbnRlcm5hbCB0cmlnZ2VycyBhbmQgIGV4dGVybmFsIGlucHV0cyBhcmUgY29uZmlndXJlZAorICAgKiBvbmx5IGlmIGFuIGludGVybmFsIGNsb2NrIHNvdXJjZSBpcyBwcm92aWRlZCB0byB0aGUgTFBUSU0KKyAgICovCisgIGlmIChobHB0aW0tPkluaXQuQ2xvY2suU291cmNlID09IExQVElNX0NMT0NLU09VUkNFX0FQQkNMT0NLX0xQT1NDKQogICB7Ci0gICAgdG1wY2ZnciB8PSAoaGxwdGltLT5Jbml0LlVsdHJhTG93UG93ZXJDbG9jay5Qb2xhcml0eSB8CisgICAgdG1wY2ZnciB8PSAoaGxwdGltLT5Jbml0LlRyaWdnZXIuU2FtcGxlVGltZSB8CiAgICAgICAgICAgICAgICAgaGxwdGltLT5Jbml0LlVsdHJhTG93UG93ZXJDbG9jay5TYW1wbGVUaW1lKTsKICAgfQogCi0gIGlmICgoaGxwdGltLT5Jbml0LlRyaWdnZXIuU291cmNlKSAhPSBMUFRJTV9UUklHU09VUkNFX1NPRlRXQVJFKQorICAvKiBDb25maWd1cmUgdGhlIGFjdGl2ZSBlZGdlIG9yIGVkZ2VzIHVzZWQgYnkgdGhlIGNvdW50ZXIgb25seSBpZiBMUFRJTSBpcworICAgKiBjbG9ja2VkIGJ5IGFuIGV4dGVybmFsIGNsb2NrIHNvdXJjZQorICAgKi8KKyAgaWYgKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKQorICB7CisgICAgdG1wY2ZnciB8PSAoaGxwdGltLT5Jbml0LlVsdHJhTG93UG93ZXJDbG9jay5Qb2xhcml0eSk7CisgIH0KKworICBpZiAoaGxwdGltLT5Jbml0LlRyaWdnZXIuU291cmNlICE9IExQVElNX1RSSUdTT1VSQ0VfU09GVFdBUkUpCiAgIHsKICAgICAvKiBFbmFibGUgRXh0ZXJuYWwgdHJpZ2dlciBhbmQgc2V0IHRoZSB0cmlnZ2VyIHNvdXJjZSAqLwotICAgIHRtcGNmZ3IgfD0gKGhscHRpbS0+SW5pdC5UcmlnZ2VyLlNvdXJjZSAgICAgfAotICAgICAgICAgICAgICAgIGhscHRpbS0+SW5pdC5UcmlnZ2VyLkFjdGl2ZUVkZ2UgfAotICAgICAgICAgICAgICAgIGhscHRpbS0+SW5pdC5UcmlnZ2VyLlNhbXBsZVRpbWUpOworICAgIHRtcGNmZ3IgfD0gKGhscHRpbS0+SW5pdC5UcmlnZ2VyLlNvdXJjZSB8CisgICAgICAgICAgICAgICAgaGxwdGltLT5Jbml0LlRyaWdnZXIuQWN0aXZlRWRnZSk7CiAgIH0KIAogICAvKiBXcml0ZSB0byBMUFRJTXggQ0ZHUiAqLwpAQCAtNjY0LDcgKzY4MSw3IEBACiAKICAgLyogRW5hYmxlIFVwZGF0ZSBFdmVudCBpbnRlcnJ1cHQgKi8KICAgX19IQUxfTFBUSU1fRU5BQkxFX0lUKGhscHRpbSwgTFBUSU1fSVRfVVBEQVRFKTsKLSNlbmRpZiAgCisjZW5kaWYKIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRU5BQkxFKGhscHRpbSk7CkBAIC0yMDI0LDkgKzIwNDEsOSBAQAogCiAgIC8qIFJlcGV0aXRpb24gY291bnRlciB1bmRlcmZsb3dlZCAob3IgY29udGFpbnMgemVybykgYW5kIHRoZSBMUFRJTSBjb3VudGVyCiAgICAgIG92ZXJmbG93ZWQgKi8KLSAgaWYoX19IQUxfTFBUSU1fR0VUX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX1VQREFURSkgIT0gUkVTRVQpCisgIGlmIChfX0hBTF9MUFRJTV9HRVRfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfVVBEQVRFKSAhPSBSRVNFVCkKICAgewotICAgIGlmKF9fSEFMX0xQVElNX0dFVF9JVF9TT1VSQ0UoaGxwdGltLCBMUFRJTV9JVF9VUERBVEUpICE9IFJFU0VUKQorICAgIGlmIChfX0hBTF9MUFRJTV9HRVRfSVRfU09VUkNFKGhscHRpbSwgTFBUSU1fSVRfVVBEQVRFKSAhPSBSRVNFVCkKICAgICB7CiAgICAgICAvKiBDbGVhciB1cGRhdGUgZXZlbnQgZmxhZyAqLwogICAgICAgX19IQUxfTFBUSU1fQ0xFQVJfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfVVBEQVRFKTsKQEAgLTIwNDEsOSArMjA1OCw5IEBACiAgIH0KIAogICAvKiBTdWNjZXNzZnVsIEFQQiBidXMgd3JpdGUgdG8gcmVwZXRpdGlvbiBjb3VudGVyIHJlZ2lzdGVyICovCi0gIGlmKF9fSEFMX0xQVElNX0dFVF9GTEFHKGhscHRpbSwgTFBUSU1fRkxBR19SRVBPSykgIT0gUkVTRVQpCisgIGlmIChfX0hBTF9MUFRJTV9HRVRfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfUkVQT0spICE9IFJFU0VUKQogICB7Ci0gICAgaWYoX19IQUxfTFBUSU1fR0VUX0lUX1NPVVJDRShobHB0aW0sIExQVElNX0lUX1JFUE9LKSAhPSBSRVNFVCkKKyAgICBpZiAoX19IQUxfTFBUSU1fR0VUX0lUX1NPVVJDRShobHB0aW0sIExQVElNX0lUX1JFUE9LKSAhPSBSRVNFVCkKICAgICB7CiAgICAgICAvKiBDbGVhciBzdWNjZXNzZnVsIEFQQiBidXMgd3JpdGUgdG8gcmVwZXRpdGlvbiBjb3VudGVyIGZsYWcgKi8KICAgICAgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX1JFUE9LKTsKQEAgLTI1MDgsMTcgKzI1MjUsMTcgQEAKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgcmVzdWx0ID0gSEFMX09LOwogICB1aW50MzJfdCBjb3VudCA9IFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gMjBVTCAvIDEwMDBVTCk7Ci0gICAgZG8KKyAgZG8KKyAgeworICAgIGNvdW50LS07CisgICAgaWYgKGNvdW50ID09IDBVTCkKICAgICB7Ci0gICAgICBjb3VudC0tOwotICAgICAgaWYgKGNvdW50ID09IDBVTCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gSEFMX1RJTUVPVVQ7Ci0gICAgICB9CisgICAgICByZXN1bHQgPSBIQUxfVElNRU9VVDsKICAgICB9Ci0gICAgd2hpbGUoKCEoX19IQUxfTFBUSU1fR0VUX0ZMQUcoKGhscHRpbSksIChmbGFnKSkpKSAmJiAoY291bnQgIT0gMFVMKSk7CisgIH0KKyAgd2hpbGUgKCghKF9fSEFMX0xQVElNX0dFVF9GTEFHKChobHB0aW0pLCAoZmxhZykpKSkgJiYgKGNvdW50ICE9IDBVTCkpOwogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLyoqCkBAIC0yNTQ4LDE2ICsyNTY1LDE2IEBACiAgIC8qIFNhdmUgTFBUSU0gc291cmNlIGNsb2NrICovCiAgIHN3aXRjaCAoKHVpbnQzMl90KWhscHRpbS0+SW5zdGFuY2UpCiAgIHsKLSAgICAgY2FzZSBMUFRJTTFfQkFTRToKLSAgICAgICB0bXBjbGtzb3VyY2UgPSBfX0hBTF9SQ0NfR0VUX0xQVElNMV9TT1VSQ0UoKTsKLSAgICAgICBicmVhazsKKyAgICBjYXNlIExQVElNMV9CQVNFOgorICAgICAgdG1wY2xrc291cmNlID0gX19IQUxfUkNDX0dFVF9MUFRJTTFfU09VUkNFKCk7CisgICAgICBicmVhazsKICNpZiBkZWZpbmVkKExQVElNMikKLSAgICAgY2FzZSBMUFRJTTJfQkFTRToKLSAgICAgICB0bXBjbGtzb3VyY2UgPSBfX0hBTF9SQ0NfR0VUX0xQVElNMl9TT1VSQ0UoKTsKLSAgICAgICBicmVhazsKKyAgICBjYXNlIExQVElNMl9CQVNFOgorICAgICAgdG1wY2xrc291cmNlID0gX19IQUxfUkNDX0dFVF9MUFRJTTJfU09VUkNFKCk7CisgICAgICBicmVhazsKICNlbmRpZiAvKiBMUFRJTTIgKi8KLSAgICAgZGVmYXVsdDoKLSAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CiAgIH0KIAogICAvKiBTYXZlIExQVElNIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCkBAIC0yNTczLDE4ICsyNTkwLDE4IEBACiAgIC8qKioqKioqKioqKiBSZXNldCBMUFRJTSAqKioqKioqKioqKi8KICAgc3dpdGNoICgodWludDMyX3QpaGxwdGltLT5JbnN0YW5jZSkKICAgewotICAgICBjYXNlIExQVElNMV9CQVNFOgotICAgICAgIF9fSEFMX1JDQ19MUFRJTTFfRk9SQ0VfUkVTRVQoKTsKLSAgICAgICBfX0hBTF9SQ0NfTFBUSU0xX1JFTEVBU0VfUkVTRVQoKTsKLSAgICAgICBicmVhazsKKyAgICBjYXNlIExQVElNMV9CQVNFOgorICAgICAgX19IQUxfUkNDX0xQVElNMV9GT1JDRV9SRVNFVCgpOworICAgICAgX19IQUxfUkNDX0xQVElNMV9SRUxFQVNFX1JFU0VUKCk7CisgICAgICBicmVhazsKICNpZiBkZWZpbmVkKExQVElNMikKLSAgICAgY2FzZSBMUFRJTTJfQkFTRToKLSAgICAgICBfX0hBTF9SQ0NfTFBUSU0yX0ZPUkNFX1JFU0VUKCk7Ci0gICAgICAgX19IQUxfUkNDX0xQVElNMl9SRUxFQVNFX1JFU0VUKCk7Ci0gICAgICAgYnJlYWs7CisgICAgY2FzZSBMUFRJTTJfQkFTRToKKyAgICAgIF9fSEFMX1JDQ19MUFRJTTJfRk9SQ0VfUkVTRVQoKTsKKyAgICAgIF9fSEFMX1JDQ19MUFRJTTJfUkVMRUFTRV9SRVNFVCgpOworICAgICAgYnJlYWs7CiAjZW5kaWYgLyogTFBUSU0yICovCi0gICAgIGRlZmF1bHQ6Ci0gICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOwogICB9CiAKICAgLyoqKioqKioqKioqIFJlc3RvcmUgTFBUSU0gQ29uZmlnICoqKioqKioqKioqLwpAQCAtMjU5NywxNiArMjYxNCwxNiBAQAogICAgIC8qIEZvcmNlIExQVElNIHNvdXJjZSBrZXJuZWwgY2xvY2sgZnJvbSBBUEIgKi8KICAgICBzd2l0Y2ggKCh1aW50MzJfdClobHB0aW0tPkluc3RhbmNlKQogICAgIHsKLSAgICAgICBjYXNlIExQVElNMV9CQVNFOgotICAgICAgICAgX19IQUxfUkNDX0xQVElNMV9DT05GSUcoUkNDX0xQVElNMUNMS1NPVVJDRV9QQ0xLMSk7Ci0gICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTFBUSU0xX0JBU0U6CisgICAgICAgIF9fSEFMX1JDQ19MUFRJTTFfQ09ORklHKFJDQ19MUFRJTTFDTEtTT1VSQ0VfUENMSzEpOworICAgICAgICBicmVhazsKICNpZiBkZWZpbmVkKExQVElNMikKLSAgICAgICBjYXNlIExQVElNMl9CQVNFOgotICAgICAgICAgX19IQUxfUkNDX0xQVElNMl9DT05GSUcoUkNDX0xQVElNMkNMS1NPVVJDRV9QQ0xLMSk7Ci0gICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTFBUSU0yX0JBU0U6CisgICAgICAgIF9fSEFMX1JDQ19MUFRJTTJfQ09ORklHKFJDQ19MUFRJTTJDTEtTT1VSQ0VfUENMSzEpOworICAgICAgICBicmVhazsKICNlbmRpZiAvKiBMUFRJTTIgKi8KLSAgICAgICBkZWZhdWx0OgotICAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAodG1wQ01QICE9IDBVTCkKQEAgLTI2NTcsMTYgKzI2NzQsMTYgQEAKICAgICAvKiBSZXN0b3JlIExQVElNIHNvdXJjZSBrZXJuZWwgY2xvY2sgKi8KICAgICBzd2l0Y2ggKCh1aW50MzJfdClobHB0aW0tPkluc3RhbmNlKQogICAgIHsKLSAgICAgICBjYXNlIExQVElNMV9CQVNFOgotICAgICAgICAgX19IQUxfUkNDX0xQVElNMV9DT05GSUcodG1wY2xrc291cmNlKTsKLSAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBMUFRJTTFfQkFTRToKKyAgICAgICAgX19IQUxfUkNDX0xQVElNMV9DT05GSUcodG1wY2xrc291cmNlKTsKKyAgICAgICAgYnJlYWs7CiAjaWYgZGVmaW5lZChMUFRJTTIpCi0gICAgICAgY2FzZSBMUFRJTTJfQkFTRToKLSAgICAgICAgIF9fSEFMX1JDQ19MUFRJTTJfQ09ORklHKHRtcGNsa3NvdXJjZSk7Ci0gICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTFBUSU0yX0JBU0U6CisgICAgICAgIF9fSEFMX1JDQ19MUFRJTTJfQ09ORklHKHRtcGNsa3NvdXJjZSk7CisgICAgICAgIGJyZWFrOwogI2VuZGlmIC8qIExQVElNMiAqLwotICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2hhbF9tbWMuYyBiL1NyYy9zdG0zMmw0eHhfaGFsX21tYy5jCmluZGV4IDFkMGUwNTcuLmE4MjY5YjEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsX21tYy5jCisrKyBiL1NyYy9zdG0zMmw0eHhfaGFsX21tYy5jCkBAIC0yNzcsNyArMjc3LDI3IEBACiAvKiogQGFkZHRvZ3JvdXAgTU1DX1ByaXZhdGVfRGVmaW5lcwogICAqIEB7CiAgICovCisjaWYgZGVmaW5lZCAoVkREX1ZBTFVFKSAmJiAoVkREX1ZBTFVFIDw9IDE5NTBVKQorI2RlZmluZSBNTUNfVk9MVEFHRV9SQU5HRSAgICAgICAgICAgICAgIE1NQ19MT1dfVk9MVEFHRV9SQU5HRQogCisjZGVmaW5lIE1NQ19FWFRfQ1NEX1BXUl9DTF8yNl9JTkRFWCAgICAgMjAxCisjZGVmaW5lIE1NQ19FWFRfQ1NEX1BXUl9DTF81Ml9JTkRFWCAgICAgMjAwCisjZGVmaW5lIE1NQ19FWFRfQ1NEX1BXUl9DTF9ERFJfNTJfSU5ERVggMjM4CisKKyNkZWZpbmUgTU1DX0VYVF9DU0RfUFdSX0NMXzI2X1BPUyAgICAgICA4CisjZGVmaW5lIE1NQ19FWFRfQ1NEX1BXUl9DTF81Ml9QT1MgICAgICAgMAorI2RlZmluZSBNTUNfRVhUX0NTRF9QV1JfQ0xfRERSXzUyX1BPUyAgIDE2CisjZWxzZQorI2RlZmluZSBNTUNfVk9MVEFHRV9SQU5HRSAgICAgICAgICAgICAgIE1NQ19ISUdIX1ZPTFRBR0VfUkFOR0UKKworI2RlZmluZSBNTUNfRVhUX0NTRF9QV1JfQ0xfMjZfSU5ERVggICAgIDIwMworI2RlZmluZSBNTUNfRVhUX0NTRF9QV1JfQ0xfNTJfSU5ERVggICAgIDIwMgorI2RlZmluZSBNTUNfRVhUX0NTRF9QV1JfQ0xfRERSXzUyX0lOREVYIDIzOQorCisjZGVmaW5lIE1NQ19FWFRfQ1NEX1BXUl9DTF8yNl9QT1MgICAgICAgMjQKKyNkZWZpbmUgTU1DX0VYVF9DU0RfUFdSX0NMXzUyX1BPUyAgICAgICAxNgorI2RlZmluZSBNTUNfRVhUX0NTRF9QV1JfQ0xfRERSXzUyX1BPUyAgIDI0CisjZW5kaWYKIC8qKgogICAqIEB9CiAgICovCkBAIC0zMDYsNiArMzI2LDcgQEAKIHN0YXRpYyB1aW50MzJfdCBNTUNfRERSX01vZGUoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIEZ1bmN0aW9uYWxTdGF0ZSBzdGF0ZSk7CiAjZW5kaWYKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBNTUNfUmVhZEV4dENTRChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgKnBGaWVsZERhdGEsIHVpbnQxNl90IEZpZWxkSW5kZXgsIHVpbnQzMl90IFRpbWVvdXQpOworc3RhdGljIHVpbnQzMl90IE1NQ19Qd3JDbGFzc1VwZGF0ZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgV2lkZSwgdWludDMyX3QgU3BlZWQpOwogCiAvKioKICAgKiBAfQpAQCAtNDAyLDYgKzQyMywxNSBAQAogICAvKiBJbml0aWFsaXplIHRoZSBNTUMgc3RhdGUgKi8KICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogCisgIC8qIENvbmZpZ3VyZSBidXMgd2lkdGggKi8KKyAgaWYgKGhtbWMtPkluaXQuQnVzV2lkZSAhPSBTRE1NQ19CVVNfV0lERV8xQikKKyAgeworICAgIGlmIChIQUxfTU1DX0NvbmZpZ1dpZGVCdXNPcGVyYXRpb24oaG1tYywgaG1tYy0+SW5pdC5CdXNXaWRlKSAhPSBIQUxfT0spCisgICAgeworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisgIH0KKwogICByZXR1cm4gSEFMX09LOwogfQogCkBAIC00MTcsNiArNDQ3LDcgQEAKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgTU1DX0luaXRUeXBlRGVmIEluaXQ7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKKyAgdWludDMyX3Qgc2RtbWNfY2xrOwogCiAgIC8qIERlZmF1bHQgU0RNTUMgcGVyaXBoZXJhbCBjb25maWd1cmF0aW9uIGZvciBNTUMgY2FyZCBpbml0aWFsaXphdGlvbiAqLwogICBJbml0LkNsb2NrRWRnZSAgICAgICAgICAgPSBTRE1NQ19DTE9DS19FREdFX1JJU0lORzsKQEAgLTQyNiw3ICs0NTcsMjAgQEAKICAgSW5pdC5DbG9ja1Bvd2VyU2F2ZSAgICAgID0gU0RNTUNfQ0xPQ0tfUE9XRVJfU0FWRV9ESVNBQkxFOwogICBJbml0LkJ1c1dpZGUgICAgICAgICAgICAgPSBTRE1NQ19CVVNfV0lERV8xQjsKICAgSW5pdC5IYXJkd2FyZUZsb3dDb250cm9sID0gU0RNTUNfSEFSRFdBUkVfRkxPV19DT05UUk9MX0RJU0FCTEU7Ci0gIEluaXQuQ2xvY2tEaXYgICAgICAgICAgICA9IFNETU1DX0lOSVRfQ0xLX0RJVjsKKworICAvKiBJbml0IENsb2NrIHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIHRvIDQwMEtoeiovCisgIHNkbW1jX2NsayA9IEhBTF9SQ0NFeF9HZXRQZXJpcGhDTEtGcmVxKFJDQ19QRVJJUEhDTEtfU0RNTUMxKTsKKyAgaWYgKHNkbW1jX2NsayA9PSAwVSkKKyAgeworICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOworICAgICAgaG1tYy0+RXJyb3JDb2RlID0gU0RNTUNfRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisjaWYgIWRlZmluZWQoU1RNMzJMNFA1eHgpICYmICFkZWZpbmVkKFNUTTMyTDRRNXh4KSAmJiAhZGVmaW5lZChTVE0zMkw0UjV4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFI3eHgpICYmICFkZWZpbmVkKFNUTTMyTDRSOXh4KSAmJiAhZGVmaW5lZChTVE0zMkw0UzV4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFM3eHgpICYmICFkZWZpbmVkKFNUTTMyTDRTOXh4KQorICBJbml0LkNsb2NrRGl2ID0gKChzZG1tY19jbGsvNDAwMDAwVSkgLSAyVSk7CisjZWxzZQorICBJbml0LkNsb2NrRGl2ID0gc2RtbWNfY2xrLygyVSo0MDAwMDBVKTsKKyNlbmRpZgogCiAgIC8qIEluaXRpYWxpemUgU0RNTUMgcGVyaXBoZXJhbCBpbnRlcmZhY2Ugd2l0aCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KICAgc3RhdHVzID0gU0RNTUNfSW5pdChobW1jLT5JbnN0YW5jZSwgSW5pdCk7CkBAIC00MzcsOSArNDgxLDkgQEAKIAogI2lmICFkZWZpbmVkKFNUTTMyTDRQNXh4KSAmJiAhZGVmaW5lZChTVE0zMkw0UTV4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFI1eHgpICYmICFkZWZpbmVkKFNUTTMyTDRSN3h4KSAmJiAhZGVmaW5lZChTVE0zMkw0Ujl4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFM1eHgpICYmICFkZWZpbmVkKFNUTTMyTDRTN3h4KSAmJiAhZGVmaW5lZChTVE0zMkw0Uzl4eCkKICAgLyogRGlzYWJsZSBTRE1NQyBDbG9jayAqLwotICBfX0hBTF9NTUNfRElTQUJMRShobW1jKTsgCisgIF9fSEFMX01NQ19ESVNBQkxFKGhtbWMpOwogI2VuZGlmCi0gIAorCiAgIC8qIFNldCBQb3dlciBTdGF0ZSB0byBPTiAqLwogICBzdGF0dXMgPSBTRE1NQ19Qb3dlclN0YXRlX09OKGhtbWMtPkluc3RhbmNlKTsKICAgaWYoc3RhdHVzID09IEhBTF9FUlJPUikKQEAgLTQ1Miw2ICs0OTYsMTUgQEAKICAgX19IQUxfTU1DX0VOQUJMRShobW1jKTsKICNlbmRpZgogCisgIC8qIHdhaXQgNzQgQ3ljbGVzOiByZXF1aXJlZCBwb3dlciB1cCB3YWl0aW5nIHRpbWUgYmVmb3JlIHN0YXJ0aW5nCisgICAgIHRoZSBNTUMgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgKi8KKyNpZiAhZGVmaW5lZChTVE0zMkw0UDV4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFE1eHgpICYmICFkZWZpbmVkKFNUTTMyTDRSNXh4KSAmJiAhZGVmaW5lZChTVE0zMkw0Ujd4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFI5eHgpICYmICFkZWZpbmVkKFNUTTMyTDRTNXh4KSAmJiAhZGVmaW5lZChTVE0zMkw0Uzd4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFM5eHgpCisgIHNkbW1jX2NsayA9IHNkbW1jX2Nsay8oSW5pdC5DbG9ja0RpdiArIDJVKTsKKyNlbHNlCisgIHNkbW1jX2NsayA9IHNkbW1jX2Nsay8oMlUqSW5pdC5DbG9ja0Rpdik7CisjZW5kaWYKKyAgSEFMX0RlbGF5KDFVKyAoNzRVKjEwMDBVLyhzZG1tY19jbGspKSk7CisKICAgLyogSWRlbnRpZnkgY2FyZCBvcGVyYXRpbmcgdm9sdGFnZSAqLwogICBlcnJvcnN0YXRlID0gTU1DX1Bvd2VyT04oaG1tYyk7CiAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQpAQCAtMTU0NSw3ICsxNTk4LDcgQEAKICAgICB9CiAKICAgICAvKiBTZW5kIENNRDM4IEVSQVNFICovCi0gICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEVyYXNlKGhtbWMtPkluc3RhbmNlKTsKKyAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kRXJhc2UoaG1tYy0+SW5zdGFuY2UsIDBVTCk7CiAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KQEAgLTIzNTgsNiArMjQxMSwxMzMgQEAKIH0KIAogLyoqCisgICogQGJyaWVmICBSZXR1cm5zIGluZm9ybWF0aW9uIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgY2FyZCB3aGljaCBhcmUgc3RvcmVkIG9uCisgICogICAgICAgICB0aGUgRXh0ZW5kZWQgQ1NEIHJlZ2lzdGVyLgorICAqIEBwYXJhbSAgaG1tYyBQb2ludGVyIHRvIE1NQyBoYW5kbGUKKyAgKiBAcGFyYW0gIHBFeHRDU0QgUG9pbnRlciB0byBhIG1lbW9yeSBhcmVhICg1MTIgYnl0ZXMpIHRoYXQgY29udGFpbnMgYWxsIAorICAqICAgICAgICAgRXh0ZW5kZWQgQ1NEIHJlZ2lzdGVyIHBhcmFtZXRlcnMKKyAgKiBAcGFyYW0gIFRpbWVvdXQgU3BlY2lmeSB0aW1lb3V0IHZhbHVlCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX0dldENhcmRFeHRDU0QoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQzMl90ICpwRXh0Q1NELCB1aW50MzJfdCBUaW1lb3V0KQoreworICBTRE1NQ19EYXRhSW5pdFR5cGVEZWYgY29uZmlnOworICB1aW50MzJfdCBlcnJvcnN0YXRlOworICB1aW50MzJfdCB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworICB1aW50MzJfdCBjb3VudDsKKyAgdWludDMyX3QgKnRtcF9idWY7CisKKyAgaWYoTlVMTCA9PSBwRXh0Q1NEKQorICB7CisgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfUEFSQU07CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIGlmKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVBRFkpCisgIHsKKyAgICBobW1jLT5FcnJvckNvZGUgPSBIQUxfTU1DX0VSUk9SX05PTkU7CisKKyAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfQlVTWTsKKworICAgIC8qIEluaXRpYWxpemUgZGF0YSBjb250cm9sIHJlZ2lzdGVyICovCisgICAgaG1tYy0+SW5zdGFuY2UtPkRDVFJMID0gMDsKKworICAgIC8qIEluaXRpYWl6ZSB0aGUgZGVzdGluYXRpb24gcG9pbnRlciAqLworICAgIHRtcF9idWYgPSBwRXh0Q1NEOworCisgICAgLyogQ29uZmlndXJlIHRoZSBNTUMgRFBTTSAoRGF0YSBQYXRoIFN0YXRlIE1hY2hpbmUpICovCisgICAgY29uZmlnLkRhdGFUaW1lT3V0ICAgPSBTRE1NQ19EQVRBVElNRU9VVDsKKyAgICBjb25maWcuRGF0YUxlbmd0aCAgICA9IDUxMjsKKyAgICBjb25maWcuRGF0YUJsb2NrU2l6ZSA9IFNETU1DX0RBVEFCTE9DS19TSVpFXzUxMkI7CisgICAgY29uZmlnLlRyYW5zZmVyRGlyICAgPSBTRE1NQ19UUkFOU0ZFUl9ESVJfVE9fU0RNTUM7CisgICAgY29uZmlnLlRyYW5zZmVyTW9kZSAgPSBTRE1NQ19UUkFOU0ZFUl9NT0RFX0JMT0NLOworI2lmICFkZWZpbmVkKFNUTTMyTDRQNXh4KSAmJiAhZGVmaW5lZChTVE0zMkw0UTV4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFI1eHgpICYmICFkZWZpbmVkKFNUTTMyTDRSN3h4KSAmJiAhZGVmaW5lZChTVE0zMkw0Ujl4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFM1eHgpICYmICFkZWZpbmVkKFNUTTMyTDRTN3h4KSAmJiAhZGVmaW5lZChTVE0zMkw0Uzl4eCkKKyAgICBjb25maWcuRFBTTSAgICAgICAgICA9IFNETU1DX0RQU01fRU5BQkxFOworI2Vsc2UKKyAgICBjb25maWcuRFBTTSAgICAgICAgICA9IFNETU1DX0RQU01fRElTQUJMRTsKKyNlbmRpZgorICAgICh2b2lkKVNETU1DX0NvbmZpZ0RhdGEoaG1tYy0+SW5zdGFuY2UsICZjb25maWcpOworI2lmIGRlZmluZWQoU1RNMzJMNFA1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFE1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFI1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFI3eHgpIHx8IGRlZmluZWQoU1RNMzJMNFI5eHgpIHx8IGRlZmluZWQoU1RNMzJMNFM1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFM3eHgpIHx8IGRlZmluZWQoU1RNMzJMNFM5eHgpCisgICAgX19TRE1NQ19DTURUUkFOU19FTkFCTEUoIGhtbWMtPkluc3RhbmNlKTsKKyNlbmRpZgorCisgICAgLyogU2VuZCBFeHRDU0QgUmVhZCBjb21tYW5kIHRvIENhcmQgKi8KKyAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZEVYVENTRChobW1jLT5JbnN0YW5jZSwgMCk7CisgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgeworICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KKyAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19GTEFHUyk7CisgICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKKyAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorCisgICAgLyogUG9sbCBvbiBTRE1NQyBmbGFncyAqLworICAgIHdoaWxlKCFfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19SWE9WRVJSIHwgU0RNTUNfRkxBR19EQ1JDRkFJTCB8IFNETU1DX0ZMQUdfRFRJTUVPVVQgfCBTRE1NQ19GTEFHX0RBVEFFTkQpKQorICAgIHsKKyAgICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX1JYRklGT0hGKSkKKyAgICAgIHsKKyAgICAgICAgLyogUmVhZCBkYXRhIGZyb20gU0RNTUMgUnggRklGTyAqLworICAgICAgICBmb3IoY291bnQgPSAwVTsgY291bnQgPCA4VTsgY291bnQrKykKKyAgICAgICAgeworICAgICAgICAgICp0bXBfYnVmID0gU0RNTUNfUmVhZEZJRk8oaG1tYy0+SW5zdGFuY2UpOworICAgICAgICAgIHRtcF9idWYrKzsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZigoKEhBTF9HZXRUaWNrKCktdGlja3N0YXJ0KSA+PSAgVGltZW91dCkgfHwgKFRpbWVvdXQgPT0gMFUpKQorICAgICAgeworICAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLworICAgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOworICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9USU1FT1VUOworICAgICAgICBobW1jLT5TdGF0ZT0gSEFMX01NQ19TVEFURV9SRUFEWTsKKyAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgfQorICAgIH0KKworI2lmIGRlZmluZWQoU1RNMzJMNFA1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFE1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFI1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFI3eHgpIHx8IGRlZmluZWQoU1RNMzJMNFI5eHgpIHx8IGRlZmluZWQoU1RNMzJMNFM1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFM3eHgpIHx8IGRlZmluZWQoU1RNMzJMNFM5eHgpCisgICAgX19TRE1NQ19DTURUUkFOU19ESVNBQkxFKCBobW1jLT5JbnN0YW5jZSk7CisjZW5kaWYKKworICAgIC8qIEdldCBlcnJvciBzdGF0ZSAqLworICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0RUSU1FT1VUKSkKKyAgICB7CisgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLworICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKKyAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0RBVEFfVElNRU9VVDsKKyAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICAgIGVsc2UgaWYoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfRENSQ0ZBSUwpKQorICAgIHsKKyAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCisgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOworICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfREFUQV9DUkNfRkFJTDsKKyAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICAgIGVsc2UgaWYoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfUlhPVkVSUikpCisgICAgeworICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KKyAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19GTEFHUyk7CisgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9SWF9PVkVSUlVOOworICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICB9CisKKyAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLworICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19EQVRBX0ZMQUdTKTsKKyAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CisgIH0KKworICByZXR1cm4gSEFMX09LOworfQorCisvKioKICAgKiBAYnJpZWYgIEVuYWJsZXMgd2lkZSBidXMgb3BlcmF0aW9uIGZvciB0aGUgcmVxdWVzdGVkIGNhcmQgaWYgc3VwcG9ydGVkIGJ5CiAgICogICAgICAgICBjYXJkLgogICAqIEBwYXJhbSAgaG1tYyBQb2ludGVyIHRvIE1NQyBoYW5kbGUKQEAgLTIzNzAsMTMxICsyNTUwLDExNCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19Db25maWdXaWRlQnVzT3BlcmF0aW9uKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50MzJfdCBXaWRlTW9kZSkKIHsKLSAgX19JTyB1aW50MzJfdCBjb3VudCA9IDBVOworICB1aW50MzJfdCBjb3VudDsKICAgU0RNTUNfSW5pdFR5cGVEZWYgSW5pdDsKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKLSAgdWludDMyX3QgcmVzcG9uc2UgPSAwVSwgYnVzeSA9IDBVOworICB1aW50MzJfdCByZXNwb25zZSA9IDBVOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19TRE1NQ19CVVNfV0lERShXaWRlTW9kZSkpOwogCi0gIC8qIENobmFnZSBTYXR0ZSAqLworICAvKiBDaGFuZ2UgU3RhdGUgKi8KICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX0JVU1k7CiAKLSNpZiAhZGVmaW5lZChTVE0zMkw0UDV4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFE1eHgpICYmICFkZWZpbmVkKFNUTTMyTDRSNXh4KSAmJiAhZGVmaW5lZChTVE0zMkw0Ujd4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFI5eHgpICYmICFkZWZpbmVkKFNUTTMyTDRTNXh4KSAmJiAhZGVmaW5lZChTVE0zMkw0Uzd4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFM5eHgpCi0gIC8qIFVwZGF0ZSBDbG9jayBmb3IgQnVzIG1vZGUgdXBkYXRlICovCi0gIEluaXQuQ2xvY2tFZGdlICAgICAgICAgICA9IFNETU1DX0NMT0NLX0VER0VfUklTSU5HOwotICBJbml0LkNsb2NrQnlwYXNzICAgICAgICAgPSBTRE1NQ19DTE9DS19CWVBBU1NfRElTQUJMRTsKLSAgSW5pdC5DbG9ja1Bvd2VyU2F2ZSAgICAgID0gU0RNTUNfQ0xPQ0tfUE9XRVJfU0FWRV9ESVNBQkxFOwotICBJbml0LkJ1c1dpZGUgICAgICAgICAgICAgPSBXaWRlTW9kZTsKLSAgSW5pdC5IYXJkd2FyZUZsb3dDb250cm9sID0gU0RNTUNfSEFSRFdBUkVfRkxPV19DT05UUk9MX0RJU0FCTEU7Ci0gIEluaXQuQ2xvY2tEaXYgICAgICAgICAgICA9IFNETU1DX0lOSVRfQ0xLX0RJVjsKLSAgLyogSW5pdGlhbGl6ZSBTRE1NQyovCi0gICh2b2lkKVNETU1DX0luaXQoaG1tYy0+SW5zdGFuY2UsIEluaXQpOyAKLSNlbmRpZgotCi0gIGlmKFdpZGVNb2RlID09IFNETU1DX0JVU19XSURFXzhCKQorI2lmIGRlZmluZWQoU1RNMzJMNFA1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFE1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFI1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFI3eHgpIHx8IGRlZmluZWQoU1RNMzJMNFI5eHgpIHx8IGRlZmluZWQoU1RNMzJMNFM1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFM3eHgpIHx8IGRlZmluZWQoU1RNMzJMNFM5eHgpCisgIC8qIENoZWNrIGFuZCB1cGRhdGUgdGhlIHBvd2VyIGNsYXNzIGlmIG5lZWRlZCAqLworICBpZiAoKGhtbWMtPkluc3RhbmNlLT5DTEtDUiAmIFNETU1DX0NMS0NSX0JVU1NQRUVEKSAhPSAwVSkKICAgewotICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTd2l0Y2goaG1tYy0+SW5zdGFuY2UsIDB4MDNCNzAyMDBVKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICBpZiAoKGhtbWMtPkluc3RhbmNlLT5DTEtDUiAmIFNETU1DX0NMS0NSX0REUikgIT0gMFUpCiAgICAgewotICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CisgICAgICBlcnJvcnN0YXRlID0gTU1DX1B3ckNsYXNzVXBkYXRlKGhtbWMsIFdpZGVNb2RlLCBTRE1NQ19TUEVFRF9NT0RFX0REUik7CiAgICAgfQotICB9Ci0gIGVsc2UgaWYoV2lkZU1vZGUgPT0gU0RNTUNfQlVTX1dJREVfNEIpCi0gIHsKLSAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAweDAzQjcwMTAwVSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgZWxzZQogICAgIHsKLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwotICAgIH0KLSAgfQotICBlbHNlIGlmKFdpZGVNb2RlID09IFNETU1DX0JVU19XSURFXzFCKQotICB7Ci0gICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN3aXRjaChobW1jLT5JbnN0YW5jZSwgMHgwM0I3MDAwMFUpOwotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQotICAgIHsKLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOworICAgICAgZXJyb3JzdGF0ZSA9IE1NQ19Qd3JDbGFzc1VwZGF0ZShobW1jLCBXaWRlTW9kZSwgU0RNTUNfU1BFRURfTU9ERV9ISUdIKTsKICAgICB9CiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogV2lkZU1vZGUgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQqLwotICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1BBUkFNOworICAgIGVycm9yc3RhdGUgPSBNTUNfUHdyQ2xhc3NVcGRhdGUoaG1tYywgV2lkZU1vZGUsIFNETU1DX1NQRUVEX01PREVfREVGQVVMVCk7CiAgIH0KLQotICAvKiBDaGVjayBmb3Igc3dpdGNoIGVycm9yIGFuZCB2aW9sYXRpb24gb2YgdGhlIHRyaWFsIG51bWJlciBvZiBzZW5kaW5nIENNRCAxMyAqLwotICB3aGlsZShidXN5ID09IDBVKQotICB7Ci0gICAgaWYoY291bnQgPT0gU0RNTUNfTUFYX1RSSUFMKQotICAgIHsKLSAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1JFUVVFU1RfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgIH0KLSAgICBjb3VudCsrOwotCi0gICAgLyogV2hpbGUgY2FyZCBpcyBub3QgcmVhZHkgZm9yIGRhdGEgYW5kIHRyaWFsIG51bWJlciBmb3Igc2VuZGluZyBDTUQxMyBpcyBub3QgZXhjZWVkZWQgKi8KLSAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZFN0YXR1cyhobW1jLT5JbnN0YW5jZSwgKHVpbnQzMl90KSgoKHVpbnQzMl90KWhtbWMtPk1tY0NhcmQuUmVsQ2FyZEFkZCkgPDwgMTZVKSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCi0gICAgewotICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7Ci0gICAgfQotCi0gICAgLyogR2V0IGNvbW1hbmQgcmVzcG9uc2UgKi8KLSAgICByZXNwb25zZSA9IFNETU1DX0dldFJlc3BvbnNlKGhtbWMtPkluc3RhbmNlLCBTRE1NQ19SRVNQMSk7Ci0KLSAgICAvKiBHZXQgb3BlcmF0aW5nIHZvbHRhZ2UqLwotICAgIGJ1c3kgPSAoKChyZXNwb25zZSA+PiA3VSkgPT0gMVUpID8gMFUgOiAxVSk7Ci0gIH0KLQotICAvKiBXaGlsZSBjYXJkIGlzIG5vdCByZWFkeSBmb3IgZGF0YSBhbmQgdHJpYWwgbnVtYmVyIGZvciBzZW5kaW5nIENNRDEzIGlzIG5vdCBleGNlZWRlZCAqLwotICBjb3VudCA9IFNETU1DX0RBVEFUSU1FT1VUOwotICB3aGlsZSgocmVzcG9uc2UgJiAweDAwMDAwMTAwVSkgPT0gMFUpCi0gIHsKLSAgICBpZihjb3VudCA9PSAwVSkKLSAgICB7Ci0gICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7Ci0gICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9SRVFVRVNUX05PVF9BUFBMSUNBQkxFOwotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICB9Ci0gICAgY291bnQtLTsKLQotICAgIC8qIFdoaWxlIGNhcmQgaXMgbm90IHJlYWR5IGZvciBkYXRhIGFuZCB0cmlhbCBudW1iZXIgZm9yIHNlbmRpbmcgQ01EMTMgaXMgbm90IGV4Y2VlZGVkICovCi0gICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbmRTdGF0dXMoaG1tYy0+SW5zdGFuY2UsICh1aW50MzJfdCkoKCh1aW50MzJfdClobW1jLT5NbWNDYXJkLlJlbENhcmRBZGQpIDw8IDE2VSkpOwotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQotICAgIHsKLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwotICAgIH0KLQotICAgIC8qIEdldCBjb21tYW5kIHJlc3BvbnNlICovCi0gICAgcmVzcG9uc2UgPSBTRE1NQ19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RNTUNfUkVTUDEpOwotICB9Ci0KLSAgaWYoaG1tYy0+RXJyb3JDb2RlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKLSAgewotICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKLSAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7Ci0gICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgfQotICBlbHNlCi0gIHsKLSAgICAvKiBDb25maWd1cmUgdGhlIFNETU1DIHBlcmlwaGVyYWwgKi8KLSAgICBJbml0LkNsb2NrRWRnZSAgICAgICAgICAgPSBobW1jLT5Jbml0LkNsb2NrRWRnZTsKLSNpZiAhZGVmaW5lZChTVE0zMkw0UDV4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFE1eHgpICYmICFkZWZpbmVkKFNUTTMyTDRSNXh4KSAmJiAhZGVmaW5lZChTVE0zMkw0Ujd4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFI5eHgpICYmICFkZWZpbmVkKFNUTTMyTDRTNXh4KSAmJiAhZGVmaW5lZChTVE0zMkw0Uzd4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFM5eHgpCi0gICAgSW5pdC5DbG9ja0J5cGFzcyAgICAgICAgID0gaG1tYy0+SW5pdC5DbG9ja0J5cGFzczsKKyNlbHNlCisgIGVycm9yc3RhdGUgPSBNTUNfUHdyQ2xhc3NVcGRhdGUoaG1tYywgV2lkZU1vZGUsIDBVKTsKICNlbmRpZgotICAgIEluaXQuQ2xvY2tQb3dlclNhdmUgICAgICA9IGhtbWMtPkluaXQuQ2xvY2tQb3dlclNhdmU7Ci0gICAgSW5pdC5CdXNXaWRlICAgICAgICAgICAgID0gV2lkZU1vZGU7Ci0gICAgSW5pdC5IYXJkd2FyZUZsb3dDb250cm9sID0gaG1tYy0+SW5pdC5IYXJkd2FyZUZsb3dDb250cm9sOwotICAgIEluaXQuQ2xvY2tEaXYgICAgICAgICAgICA9IGhtbWMtPkluaXQuQ2xvY2tEaXY7Ci0gICAgKHZvaWQpU0RNTUNfSW5pdChobW1jLT5JbnN0YW5jZSwgSW5pdCk7CisgIAorICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgeworICAgIGlmKFdpZGVNb2RlID09IFNETU1DX0JVU19XSURFXzhCKQorICAgIHsKKyAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTd2l0Y2goaG1tYy0+SW5zdGFuY2UsIDB4MDNCNzAyMDBVKTsKKyAgICB9CisgICAgZWxzZSBpZihXaWRlTW9kZSA9PSBTRE1NQ19CVVNfV0lERV80QikKKyAgICB7CisgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAweDAzQjcwMTAwVSk7CisgICAgfQorICAgIGVsc2UgaWYoV2lkZU1vZGUgPT0gU0RNTUNfQlVTX1dJREVfMUIpCisgICAgeworICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN3aXRjaChobW1jLT5JbnN0YW5jZSwgMHgwM0I3MDAwMFUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogV2lkZU1vZGUgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQqLworICAgICAgZXJyb3JzdGF0ZSA9IEhBTF9NTUNfRVJST1JfUEFSQU07CisgICAgfQorICAgIAorICAgIC8qIENoZWNrIGZvciBzd2l0Y2ggZXJyb3IgYW5kIHZpb2xhdGlvbiBvZiB0aGUgdHJpYWwgbnVtYmVyIG9mIHNlbmRpbmcgQ01EIDEzICovCisgICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgeworICAgICAgLyogV2hpbGUgY2FyZCBpcyBub3QgcmVhZHkgZm9yIGRhdGEgYW5kIHRyaWFsIG51bWJlciBmb3Igc2VuZGluZyBDTUQxMyBpcyBub3QgZXhjZWVkZWQgKi8KKyAgICAgIGNvdW50ID0gU0RNTUNfTUFYX1RSSUFMOworICAgICAgZG8KKyAgICAgIHsKKyAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbmRTdGF0dXMoaG1tYy0+SW5zdGFuY2UsICh1aW50MzJfdCkoKCh1aW50MzJfdClobW1jLT5NbWNDYXJkLlJlbENhcmRBZGQpIDw8IDE2VSkpOworICAgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKiBHZXQgY29tbWFuZCByZXNwb25zZSAqLworICAgICAgICByZXNwb25zZSA9IFNETU1DX0dldFJlc3BvbnNlKGhtbWMtPkluc3RhbmNlLCBTRE1NQ19SRVNQMSk7CisgICAgICAgIGNvdW50LS07CisgICAgICB9d2hpbGUoKChyZXNwb25zZSAmIDB4MTAwVSkgPT0gMFUpICYmIChjb3VudCAhPSAwVSkpOworICAgICAgCisgICAgICAvKiBDaGVjayB0aGUgc3RhdHVzIGFmdGVyIHRoZSBzd2l0Y2ggY29tbWFuZCBleGVjdXRpb24gKi8KKyAgICAgIGlmICgoY291bnQgIT0gMFUpICYmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkpCisgICAgICB7CisgICAgICAgIC8qIENoZWNrIHRoZSBiaXQgU1dJVENIX0VSUk9SIG9mIHRoZSBkZXZpY2Ugc3RhdHVzICovCisgICAgICAgIGlmICgocmVzcG9uc2UgJiAweDgwVSkgIT0gMFUpCisgICAgICAgIHsKKyAgICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfRVJST1JfR0VORVJBTF9VTktOT1dOX0VSUjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBDb25maWd1cmUgdGhlIFNETU1DIHBlcmlwaGVyYWwgKi8KKyAgICAgICAgICBJbml0ID0gaG1tYy0+SW5pdDsKKyAgICAgICAgICBJbml0LkJ1c1dpZGUgPSBXaWRlTW9kZTsKKyAgICAgICAgICAodm9pZClTRE1NQ19Jbml0KGhtbWMtPkluc3RhbmNlLCBJbml0KTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZiAoY291bnQgPT0gMFUpCisgICAgICB7CisgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9USU1FT1VUOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgICB9CisgICAgfQogICB9CiAKICAgLyogQ2hhbmdlIFN0YXRlICovCiAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKIAorICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgeworICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCisgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKKyAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKICAgcmV0dXJuIEhBTF9PSzsKIH0KIApAQCAtMjUyMCwxNCArMjY4MywxMyBAQAogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19TRE1NQ19TUEVFRF9NT0RFKFNwZWVkTW9kZSkpOworCiAgIC8qIENoYW5nZSBTdGF0ZSAqLwogICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfQlVTWTsKIAotICBpZihNTUNfUmVhZEV4dENTRChobW1jLCAmZGV2aWNlX3R5cGUsIDE5NiwgMHgwRkZGRkZGRlUpICE9IEhBTF9PSykgLyogRmllbGQgREVWSUNFX1RZUEUgWzE5Nl0gKi8KLSAgewotICAgIHJldHVybiBIQUxfRVJST1I7Ci0gIH0KLSAgCisgIC8qIEZpZWxkIERFVklDRV9UWVBFIFsxOTYgPSA0OSo0XSBvZiBFeHRlbmRlZCBDU0QgcmVnaXN0ZXIgKi8KKyAgZGV2aWNlX3R5cGUgPSAoaG1tYy0+RXh0X0NTRFs0OV0gJiAweDAwMDAwMEZGVSk7CisKICAgc3dpdGNoIChTcGVlZE1vZGUpCiAgIHsKICAgICBjYXNlIFNETU1DX1NQRUVEX01PREVfQVVUTzoKQEAgLTI1ODcsNyArMjc0OSw3IEBACiAgICAgICB7CiAgICAgICAgIC8qIEhpZ2ggU3BlZWQgRERSIG1vZGUgbm90IGFsbG93ZWQgKi8KICAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfVU5TVVBQT1JURURfRkVBVFVSRTsKLSAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwkJCisgICAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTI2MDYsNyArMjc2OCw3IEBACiAgICAgICB7CiAgICAgICAgIC8qIEhpZ2ggU3BlZWQgbW9kZSBub3QgYWxsb3dlZCAqLwogICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9VTlNVUFBPUlRFRF9GRUFUVVJFOwotICAgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CQkKKyAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjgxOCw2ICsyOTgwLDM3NCBAQAogICByZXR1cm4gSEFMX09LOwogfQogCisjaWYgZGVmaW5lZChTVE0zMkw0UDV4eCkgfHwgZGVmaW5lZChTVE0zMkw0UTV4eCkgfHwgZGVmaW5lZChTVE0zMkw0UjV4eCkgfHwgZGVmaW5lZChTVE0zMkw0Ujd4eCkgfHwgZGVmaW5lZChTVE0zMkw0Ujl4eCkgfHwgZGVmaW5lZChTVE0zMkw0UzV4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzd4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzl4eCkKKy8qKgorICAqIEBicmllZiAgUGVyZm9ybSBzcGVjaWZpYyBjb21tYW5kcyBzZXF1ZW5jZSBmb3IgdGhlIGRpZmZlcmVudCB0eXBlIG9mIGVyYXNlLgorICAqIEBub3RlICAgVGhpcyBBUEkgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgY2hlY2sgb24gdGhlIGNhcmQgc3RhdGUgdGhyb3VnaAorICAqICAgICAgICAgSEFMX01NQ19HZXRDYXJkU3RhdGUoKS4KKyAgKiBAcGFyYW0gIGhtbWMgUG9pbnRlciB0byBNTUMgaGFuZGxlCisgICogQHBhcmFtICBFcmFzZVR5cGUgU3BlY2lmaWVzIHRoZSB0eXBlIG9mIGVyYXNlIHRvIGJlIHBlcmZvcm1lZAorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIEhBTF9NTUNfRVJBU0UgRXJhc2UgdGhlIGVyYXNlIGdyb3VwcyBpZGVudGlmaWVkIGJ5IENNRDM1ICYgMzYKKyAgKiAgICAgICAgICAgIEBhcmcgSEFMX01NQ19UUklNIEVyYXNlIHRoZSB3cml0ZSBibG9ja3MgaWRlbnRpZmllZCBieSBDTUQzNSAmIDM2CisgICogICAgICAgICAgICBAYXJnIEhBTF9NTUNfRElTQ0FSRCBEaXNjYXJkIHRoZSB3cml0ZSBibG9ja3MgaWRlbnRpZmllZCBieSBDTUQzNSAmIDM2CisgICogICAgICAgICAgICBAYXJnIEhBTF9NTUNfU0VDVVJFX0VSQVNFIFBlcmZvcm0gYSBzZWN1cmUgcHVyZ2UgYWNjb3JkaW5nIFNSVCBvbiB0aGUgZXJhc2UgZ3JvdXBzIGlkZW50aWZpZWQgYnkgQ01EMzUgJiAzNgorICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX1NFQ1VSRV9UUklNX1NURVAxIE1hcmsgdGhlIHdyaXRlIGJsb2NrcyBpZGVudGlmaWVkIGJ5IENNRDM1ICYgMzYgZm9yIHNlY3VyZSBlcmFzZQorICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX1NFQ1VSRV9UUklNX1NURVAyIFBlcmZvcm0gYSBzZWN1cmUgcHVyZ2UgYWNjb3JkaW5nIFNSVCBvbiB0aGUgd3JpdGUgYmxvY2tzIHByZXZpb3VzbHkgaWRlbnRpZmllZAorICAqIEBwYXJhbSAgQmxvY2tTdGFydEFkZCBTdGFydCBCbG9jayBhZGRyZXNzCisgICogQHBhcmFtICBCbG9ja0VuZEFkZCBFbmQgQmxvY2sgYWRkcmVzcworICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19FcmFzZVNlcXVlbmNlKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50MzJfdCBFcmFzZVR5cGUsIHVpbnQzMl90IEJsb2NrU3RhcnRBZGQsIHVpbnQzMl90IEJsb2NrRW5kQWRkKQoreworICB1aW50MzJfdCBlcnJvcnN0YXRlOworICB1aW50MzJfdCBzdGFydF9hZGQgPSBCbG9ja1N0YXJ0QWRkOworICB1aW50MzJfdCBlbmRfYWRkID0gQmxvY2tFbmRBZGQ7CisgIHVpbnQzMl90IHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CisKKyAgLyogQ2hlY2sgdGhlIGVyYXNlIHR5cGUgdmFsdWUgaXMgY29ycmVjdCAqLworICBhc3NlcnRfcGFyYW0oSVNfTU1DX0VSQVNFX1RZUEUoRXJhc2VUeXBlKSk7CisKKyAgLyogQ2hlY2sgdGhlIGNvaGVyZW5jZSBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgYWRkcmVzcyAqLworICBpZihlbmRfYWRkIDwgc3RhcnRfYWRkKQorICB7CisgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfUEFSQU07CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIENoZWNrIHRoYXQgdGhlIGVuZCBhZGRyZXNzIGlzIG5vdCBvdXQgb2YgcmFuZ2Ugb2YgZGV2aWNlIG1lbW9yeSAqLworICBpZihlbmRfYWRkID4gKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpKQorICB7CisgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfQUREUl9PVVRfT0ZfUkFOR0U7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIENoZWNrIGlmIHRoZSBjYXJkIGNvbW1hbmQgY2xhc3Mgc3VwcG9ydHMgZXJhc2UgY29tbWFuZCAqLworICBpZigoKGhtbWMtPk1tY0NhcmQuQ2xhc3MpICYgU0RNTUNfQ0NDQ19FUkFTRSkgPT0gMFUpCisgIHsKKyAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9SRVFVRVNUX05PVF9BUFBMSUNBQkxFOworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBDaGVjayB0aGUgc3RhdGUgb2YgdGhlIGRyaXZlciAqLworICBpZihobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQorICB7CisgICAgLyogQ2hhbmdlIFN0YXRlICovCisgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX0JVU1k7CisKKyAgICAvKiBDaGVjayB0aGF0IHRoZSBjYXJkIGlzIG5vdCBsb2NrZWQgKi8KKyAgICBpZigoU0RNTUNfR2V0UmVzcG9uc2UoaG1tYy0+SW5zdGFuY2UsIFNETU1DX1JFU1AxKSAmIFNETU1DX0NBUkRfTE9DS0VEKSA9PSBTRE1NQ19DQVJEX0xPQ0tFRCkKKyAgICB7CisgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9MT0NLX1VOTE9DS19GQUlMRUQ7CisgICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKworICAgIC8qIEluIGNhc2Ugb2YgbG93IGNhcGFjaXR5IGNhcmQsIHRoZSBhZGRyZXNzIGlzIG5vdCBibG9jayBudW1iZXIgYnV0IGJ5dGVzICovCisgICAgaWYgKChobW1jLT5NbWNDYXJkLkNhcmRUeXBlKSAhPSBNTUNfSElHSF9DQVBBQ0lUWV9DQVJEKQorICAgIHsKKyAgICAgIHN0YXJ0X2FkZCAqPSA1MTJVOworICAgICAgZW5kX2FkZCAgICo9IDUxMlU7CisgICAgfQorCisgICAgLyogU2VuZCBDTUQzNSBNTUNfRVJBU0VfR1JQX1NUQVJUIHdpdGggc3RhcnQgYWRkcmVzcyBhcyBhcmd1bWVudCAqLworICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRFcmFzZVN0YXJ0QWRkKGhtbWMtPkluc3RhbmNlLCBzdGFydF9hZGQpOworICAgIGlmKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIHsKKyAgICAgIC8qIFNlbmQgQ01EMzYgTU1DX0VSQVNFX0dSUF9FTkQgd2l0aCBlbmQgYWRkcmVzcyBhcyBhcmd1bWVudCAqLworICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEVyYXNlRW5kQWRkKGhtbWMtPkluc3RhbmNlLCBlbmRfYWRkKTsKKyAgICAgIGlmKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgICAgeworICAgICAgICAvKiBTZW5kIENNRDM4IEVSQVNFIHdpdGggZXJhc2UgdHlwZSBhcyBhcmd1bWVudCAqLworICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kRXJhc2UoaG1tYy0+SW5zdGFuY2UsIEVyYXNlVHlwZSk7CisgICAgICAgIGlmKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgaWYgKChFcmFzZVR5cGUgPT0gSEFMX01NQ19TRUNVUkVfRVJBU0UpIHx8IChFcmFzZVR5cGUgPT0gSEFMX01NQ19TRUNVUkVfVFJJTV9TVEVQMikpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogV2FpdCB0aGF0IHRoZSBkZXZpY2UgaXMgcmVhZHkgYnkgY2hlY2tpbmcgdGhlIEQwIGxpbmUgKi8KKyAgICAgICAgICAgIHdoaWxlKCghX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfQlVTWUQwRU5EKSkgJiYgKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYoKEhBTF9HZXRUaWNrKCktdGlja3N0YXJ0KSA+PSBTRE1NQ19NQVhFUkFTRVRJTUVPVVQpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlcnJvcnN0YXRlID0gSEFMX01NQ19FUlJPUl9USU1FT1VUOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENsZWFyIHRoZSBmbGFnIGNvcnJlc3BvbmRpbmcgdG8gZW5kIEQwIGJ1cyBsaW5lICovCisgICAgICAgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0JVU1lEMEVORCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgLyogQ2hhbmdlIFN0YXRlICovCisgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOworCisgICAgLyogTWFuYWdlIGVycm9ycyAqLworICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIHsKKyAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCisgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOworICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CisKKyAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9USU1FT1VUKQorICAgICAgeworICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByZXR1cm4gSEFMX09LOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gSEFMX0JVU1k7CisgIH0KK30KKworLyoqCisgICogQGJyaWVmICBQZXJmb3JtIHNhbml0aXplIG9wZXJhdGlvbiBvbiB0aGUgZGV2aWNlLgorICAqIEBub3RlICAgVGhpcyBBUEkgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgY2hlY2sgb24gdGhlIGNhcmQgc3RhdGUgdGhyb3VnaAorICAqICAgICAgICAgSEFMX01NQ19HZXRDYXJkU3RhdGUoKS4KKyAgKiBAcGFyYW0gIGhtbWMgUG9pbnRlciB0byBNTUMgaGFuZGxlCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX1Nhbml0aXplKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKQoreworICB1aW50MzJfdCBlcnJvcnN0YXRlLCByZXNwb25zZSA9IDBVLCBjb3VudDsKKyAgdWludDMyX3QgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKworICAvKiBDaGVjayB0aGUgc3RhdGUgb2YgdGhlIGRyaXZlciAqLworICBpZihobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQorICB7CisgICAgLyogQ2hhbmdlIFN0YXRlICovCisgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX0JVU1k7CisKKyAgICAvKiBJbmRleCA6IDE2NSAtIFZhbHVlIDogMHgwMSAqLworICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTd2l0Y2goaG1tYy0+SW5zdGFuY2UsIDB4MDNBNTAxMDBVKTsKKyAgICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAvKiBXYWl0IHRoYXQgdGhlIGRldmljZSBpcyByZWFkeSBieSBjaGVja2luZyB0aGUgRDAgbGluZSAqLworICAgICAgd2hpbGUoKCFfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19CVVNZRDBFTkQpKSAmJiAoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpKQorICAgICAgeworICAgICAgICBpZigoSEFMX0dldFRpY2soKS10aWNrc3RhcnQpID49IFNETU1DX01BWEVSQVNFVElNRU9VVCkKKyAgICAgICAgeworICAgICAgICAgIGVycm9yc3RhdGUgPSBIQUxfTU1DX0VSUk9SX1RJTUVPVVQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogQ2xlYXIgdGhlIGZsYWcgY29ycmVzcG9uZGluZyB0byBlbmQgRDAgYnVzIGxpbmUgKi8KKyAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfQlVTWUQwRU5EKTsKKworICAgICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICB7CisgICAgICAgIC8qIFdoaWxlIGNhcmQgaXMgbm90IHJlYWR5IGZvciBkYXRhIGFuZCB0cmlhbCBudW1iZXIgZm9yIHNlbmRpbmcgQ01EMTMgaXMgbm90IGV4Y2VlZGVkICovCisgICAgICAgIGNvdW50ID0gU0RNTUNfTUFYX1RSSUFMOworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbmRTdGF0dXMoaG1tYy0+SW5zdGFuY2UsICh1aW50MzJfdCkoKCh1aW50MzJfdClobW1jLT5NbWNDYXJkLlJlbENhcmRBZGQpIDw8IDE2VSkpOworICAgICAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIC8qIEdldCBjb21tYW5kIHJlc3BvbnNlICovCisgICAgICAgICAgcmVzcG9uc2UgPSBTRE1NQ19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RNTUNfUkVTUDEpOworICAgICAgICAgIGNvdW50LS07CisgICAgICAgIH13aGlsZSgoKHJlc3BvbnNlICYgMHgxMDBVKSA9PSAwVSkgJiYgKGNvdW50ICE9IDBVKSk7CisKKyAgICAgICAgLyogQ2hlY2sgdGhlIHN0YXR1cyBhZnRlciB0aGUgc3dpdGNoIGNvbW1hbmQgZXhlY3V0aW9uICovCisgICAgICAgIGlmICgoY291bnQgIT0gMFUpICYmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBDaGVjayB0aGUgYml0IFNXSVRDSF9FUlJPUiBvZiB0aGUgZGV2aWNlIHN0YXR1cyAqLworICAgICAgICAgIGlmICgocmVzcG9uc2UgJiAweDgwVSkgIT0gMFUpCisgICAgICAgICAgeworICAgICAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX0dFTkVSQUxfVU5LTk9XTl9FUlI7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvdW50ID09IDBVKQorICAgICAgICB7CisgICAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX1RJTUVPVVQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogTm90aGluZyB0byBkbyAqLworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgLyogQ2hhbmdlIFN0YXRlICovCisgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOworCisgICAgLyogTWFuYWdlIGVycm9ycyAqLworICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIHsKKyAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCisgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOworICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CisKKyAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9USU1FT1VUKQorICAgICAgeworICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByZXR1cm4gSEFMX09LOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gSEFMX0JVU1k7CisgIH0KK30KKworLyoqCisgICogQGJyaWVmICBDb25maWd1cmUgdGhlIFNlY3VyZSBSZW1vdmFsIFR5cGUgKFNSVCkgaW4gdGhlIEV4dGVuZGVkIENTRCByZWdpc3Rlci4KKyAgKiBAbm90ZSAgIFRoaXMgQVBJIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGNoZWNrIG9uIHRoZSBjYXJkIHN0YXRlIHRocm91Z2gKKyAgKiAgICAgICAgIEhBTF9NTUNfR2V0Q2FyZFN0YXRlKCkuCisgICogQHBhcmFtICBobW1jIFBvaW50ZXIgdG8gTU1DIGhhbmRsZQorICAqIEBwYXJhbSAgU1JUTW9kZSBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgZXJhc2UgdG8gYmUgcGVyZm9ybWVkCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgSEFMX01NQ19TUlRfRVJBU0UgSW5mb3JtYXRpb24gcmVtb3ZlZCBieSBhbiBlcmFzZQorICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX1NSVF9XUklURV9DSEFSX0VSQVNFIEluZm9ybWF0aW9uIHJlbW92ZWQgYnkgYW4gb3ZlcndyaXRpbmcgd2l0aCBhIGNoYXJhY3RlciBmb2xsb3dlZCBieSBhbiBlcmFzZQorICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX1NSVF9XUklURV9DSEFSX0NPTVBMX1JBTkRPTSBJbmZvcm1hdGlvbiByZW1vdmVkIGJ5IGFuIG92ZXJ3cml0aW5nIHdpdGggYSBjaGFyYWN0ZXIsIGl0cyBjb21wbGVtZW50IHRoZW4gYSByYW5kb20gY2hhcmFjdGVyCisgICogICAgICAgICAgICBAYXJnIEhBTF9NTUNfU1JUX1ZFTkRPUl9ERUZJTkVEIEluZm9ybWF0aW9uIHJlbW92ZWQgdXNpbmcgYSB2ZW5kb3IgZGVmaW5lZAorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19Db25maWdTZWNSZW1vdmFsVHlwZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgU1JUTW9kZSkKK3sKKyAgdWludDMyX3Qgc3J0LCBlcnJvcnN0YXRlLCByZXNwb25zZSA9IDBVLCBjb3VudDsKKworICAvKiBDaGVjayB0aGUgZXJhc2UgdHlwZSB2YWx1ZSBpcyBjb3JyZWN0ICovCisgIGFzc2VydF9wYXJhbShJU19NTUNfU1JUX1RZUEUoU1JUTW9kZSkpOworCisgIC8qIENoZWNrIHRoZSBzdGF0ZSBvZiB0aGUgZHJpdmVyICovCisgIGlmKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVBRFkpCisgIHsKKyAgICAvKiBHZXQgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgYnkgdGhlIGRldmljZSAqLworICAgIGlmKEhBTF9NTUNfR2V0U3VwcG9ydGVkU2VjUmVtb3ZhbFR5cGUoaG1tYywgJnNydCkgPT0gSEFMX09LKQorICAgIHsKKyAgICAgIC8qIENoYW5nZSBTdGF0ZSAqLworICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX0JVU1k7CisKKyAgICAgIC8qIENoZWNrIHRoZSB2YWx1ZSBwYXNzZWQgYXMgcGFyYW1ldGVyIGlzIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlICovCisgICAgICBpZigoU1JUTW9kZSAmIHNydCkgIT0gMFUpCisgICAgICB7CisgICAgICAgIC8qIEluZGV4IDogMTYgLSBWYWx1ZSA6IFNSVE1vZGUgKi8KKyAgICAgICAgc3J0IHw9ICgoUE9TSVRJT05fVkFMKFNSVE1vZGUpKSA8PCA0VSk7CisgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTd2l0Y2goaG1tYy0+SW5zdGFuY2UsICgweDAzMTAwMDAwVSB8IChzcnQgPDwgOFUpKSk7CisgICAgICAgIGlmKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgLyogV2hpbGUgY2FyZCBpcyBub3QgcmVhZHkgZm9yIGRhdGEgYW5kIHRyaWFsIG51bWJlciBmb3Igc2VuZGluZyBDTUQxMyBpcyBub3QgZXhjZWVkZWQgKi8KKyAgICAgICAgICBjb3VudCA9IFNETU1DX01BWF9UUklBTDsKKyAgICAgICAgICBkbworICAgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kU3RhdHVzKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKCgodWludDMyX3QpaG1tYy0+TW1jQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKKyAgICAgICAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogR2V0IGNvbW1hbmQgcmVzcG9uc2UgKi8KKyAgICAgICAgICAgIHJlc3BvbnNlID0gU0RNTUNfR2V0UmVzcG9uc2UoaG1tYy0+SW5zdGFuY2UsIFNETU1DX1JFU1AxKTsKKyAgICAgICAgICAgIGNvdW50LS07CisgICAgICAgICAgfXdoaWxlKCgocmVzcG9uc2UgJiAweDEwMFUpID09IDBVKSAmJiAoY291bnQgIT0gMFUpKTsKKworICAgICAgICAgIC8qIENoZWNrIHRoZSBzdGF0dXMgYWZ0ZXIgdGhlIHN3aXRjaCBjb21tYW5kIGV4ZWN1dGlvbiAqLworICAgICAgICAgIGlmICgoY291bnQgIT0gMFUpICYmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogQ2hlY2sgdGhlIGJpdCBTV0lUQ0hfRVJST1Igb2YgdGhlIGRldmljZSBzdGF0dXMgKi8KKyAgICAgICAgICAgIGlmICgocmVzcG9uc2UgJiAweDgwVSkgIT0gMFUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9HRU5FUkFMX1VOS05PV05fRVJSOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChjb3VudCA9PSAwVSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfRVJST1JfVElNRU9VVDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX1VOU1VQUE9SVEVEX0ZFQVRVUkU7CisgICAgICB9CisKKyAgICAgIC8qIENoYW5nZSBTdGF0ZSAqLworICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX0dFTkVSQUxfVU5LTk9XTl9FUlI7CisgICAgfQorCisgICAgLyogTWFuYWdlIGVycm9ycyAqLworICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIHsKKyAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCisgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOworICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIEhBTF9PSzsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuIEhBTF9CVVNZOworICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0cyB0aGUgc3VwcG9ydGVkIHZhbHVlcyBvZiB0aGUgdGhlIFNlY3VyZSBSZW1vdmFsIFR5cGUgKFNSVCkuCisgICogQHBhcmFtICBobW1jIHBvaW50ZXIgdG8gTU1DIGhhbmRsZQorICAqIEBwYXJhbSAgU3VwcG9ydGVkU1JUIHBvaW50ZXIgZm9yIHN1cHBvcnRlZCBTUlQgdmFsdWUKKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBhIGJpdCBmaWVsZCBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgSEFMX01NQ19TUlRfRVJBU0UgSW5mb3JtYXRpb24gcmVtb3ZlZCBieSBhbiBlcmFzZQorICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX1NSVF9XUklURV9DSEFSX0VSQVNFIEluZm9ybWF0aW9uIHJlbW92ZWQgYnkgYW4gb3ZlcndyaXRpbmcgd2l0aCBhIGNoYXJhY3RlciBmb2xsb3dlZCBieSBhbiBlcmFzZQorICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX1NSVF9XUklURV9DSEFSX0NPTVBMX1JBTkRPTSBJbmZvcm1hdGlvbiByZW1vdmVkIGJ5IGFuIG92ZXJ3cml0aW5nIHdpdGggYSBjaGFyYWN0ZXIsIGl0cyBjb21wbGVtZW50IHRoZW4gYSByYW5kb20gY2hhcmFjdGVyCisgICogICAgICAgICAgICBAYXJnIEhBTF9NTUNfU1JUX1ZFTkRPUl9ERUZJTkVEIEluZm9ybWF0aW9uIHJlbW92ZWQgdXNpbmcgYSB2ZW5kb3IgZGVmaW5lZAorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19HZXRTdXBwb3J0ZWRTZWNSZW1vdmFsVHlwZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgKlN1cHBvcnRlZFNSVCkKK3sKKyAgLyogQ2hlY2sgdGhlIHN0YXRlIG9mIHRoZSBkcml2ZXIgKi8KKyAgaWYoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKKyAgeworICAgIC8qIENoYW5nZSBTdGF0ZSAqLworICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9CVVNZOworCisgICAgLyogUmVhZCBmaWVsZCBTRUNVUkVfUkVNT1ZBTF9UWVBFIFsxNiA9IDQqNF0gb2YgdGhlIEV4dGVuZGVkIENTRCByZWdpc3RlciAqLworICAgICpTdXBwb3J0ZWRTUlQgPSAoaG1tYy0+RXh0X0NTRFs0XSAmIDB4MDAwMDAwMEZVKTsgLyogQml0cyBbMzowXSBvZiBmaWVsZCAxNiAqLworCisgICAgLyogQ2hhbmdlIFN0YXRlICovCisgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOworCisgICAgcmV0dXJuIEhBTF9PSzsKKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gSEFMX0JVU1k7CisgIH0KK30KKyNlbmRpZiAvKiBkZWZpbmVkKFNUTTMyTDRQNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRRNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRSNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRSN3h4KSB8fCBkZWZpbmVkKFNUTTMyTDRSOXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRTNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRTN3h4KSB8fCBkZWZpbmVkKFNUTTMyTDRTOXh4KSAqLworCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjgzMyw3ICszMzYzLDcgQEAKIAogI2lmICFkZWZpbmVkKFNUTTMyTDRQNXh4KSAmJiAhZGVmaW5lZChTVE0zMkw0UTV4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFI1eHgpICYmICFkZWZpbmVkKFNUTTMyTDRSN3h4KSAmJiAhZGVmaW5lZChTVE0zMkw0Ujl4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFM1eHgpICYmICFkZWZpbmVkKFNUTTMyTDRTN3h4KSAmJiAhZGVmaW5lZChTVE0zMkw0Uzl4eCkKIC8qKgotICAqIEBicmllZiAgRE1BIE1NQyB0cmFuc21pdCBwcm9jZXNzIGNvbXBsZXRlIGNhbGxiYWNrIAorICAqIEBicmllZiAgRE1BIE1NQyB0cmFuc21pdCBwcm9jZXNzIGNvbXBsZXRlIGNhbGxiYWNrCiAgICogQHBhcmFtICBoZG1hIERNQSBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KQEAgLTMwMjUsNyArMzU1NSw3IEBACiB7CiAgIEhBTF9NTUNfQ2FyZENTRFR5cGVEZWYgQ1NEOwogICB1aW50MzJfdCBlcnJvcnN0YXRlOwotICB1aW50MTZfdCBtbWNfcmNhID0gMVU7CisgIHVpbnQxNl90IG1tY19yY2EgPSAyVTsKICAgTU1DX0luaXRUeXBlRGVmIEluaXQ7CiAKICAgLyogQ2hlY2sgdGhlIHBvd2VyIFN0YXRlICovCkBAIC0zMDUwLDkgKzM1ODAsOSBAQAogICAgIGhtbWMtPkNJRFszVV0gPSBTRE1NQ19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RNTUNfUkVTUDQpOwogICB9CiAKLSAgLyogU2VuZCBDTUQzIFNFVF9SRUxfQUREUiB3aXRoIGFyZ3VtZW50IDAgKi8KKyAgLyogU2VuZCBDTUQzIFNFVF9SRUxfQUREUiB3aXRoIFJDQSA9IDIgKHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMSkgKi8KICAgLyogTU1DIENhcmQgcHVibGlzaGVzIGl0cyBSQ0EuICovCi0gIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZXRSZWxBZGQoaG1tYy0+SW5zdGFuY2UsICZtbWNfcmNhKTsKKyAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNldFJlbEFkZE1tYyhobW1jLT5JbnN0YW5jZSwgbW1jX3JjYSk7CiAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICB7CiAgICAgcmV0dXJuIGVycm9yc3RhdGU7CkBAIC0zMDk4LDE1ICszNjI4LDI1IEBACiAgIHsKICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgfQorICAKKyAgLyogR2V0IEV4dGVuZGVkIENTRCBwYXJhbWV0ZXJzICovCisgIGlmIChIQUxfTU1DX0dldENhcmRFeHRDU0QoaG1tYywgaG1tYy0+RXh0X0NTRCwgU0RNTUNfREFUQVRJTUVPVVQpICE9IEhBTF9PSykKKyAgeworICAgIHJldHVybiBobW1jLT5FcnJvckNvZGU7CisgIH0KIAorICAvKiBXaGlsZSBjYXJkIGlzIG5vdCByZWFkeSBmb3IgZGF0YSBhbmQgdHJpYWwgbnVtYmVyIGZvciBzZW5kaW5nIENNRDEzIGlzIG5vdCBleGNlZWRlZCAqLworICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZFN0YXR1cyhobW1jLT5JbnN0YW5jZSwgKHVpbnQzMl90KSgoKHVpbnQzMl90KWhtbWMtPk1tY0NhcmQuUmVsQ2FyZEFkZCkgPDwgMTZVKSk7CisgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICB7CisgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CisgIH0KKyAgCiAgIC8qIENvbmZpZ3VyZSB0aGUgU0RNTUMgcGVyaXBoZXJhbCAqLwotICBJbml0LkNsb2NrRWRnZSAgICAgICAgICAgPSBobW1jLT5Jbml0LkNsb2NrRWRnZTsKLSAgSW5pdC5DbG9ja1Bvd2VyU2F2ZSAgICAgID0gaG1tYy0+SW5pdC5DbG9ja1Bvd2VyU2F2ZTsKLSAgSW5pdC5CdXNXaWRlICAgICAgICAgICAgID0gU0RNTUNfQlVTX1dJREVfMUI7Ci0gIEluaXQuSGFyZHdhcmVGbG93Q29udHJvbCA9IGhtbWMtPkluaXQuSGFyZHdhcmVGbG93Q29udHJvbDsKLSAgSW5pdC5DbG9ja0RpdiAgICAgICAgICAgID0gaG1tYy0+SW5pdC5DbG9ja0RpdjsKKyAgSW5pdCA9IGhtbWMtPkluaXQ7CisgIEluaXQuQnVzV2lkZSA9IFNETU1DX0JVU19XSURFXzFCOwogICAodm9pZClTRE1NQ19Jbml0KGhtbWMtPkluc3RhbmNlLCBJbml0KTsKLQorICAKICAgLyogQWxsIGNhcmRzIGFyZSBpbml0aWFsaXplZCAqLwogICByZXR1cm4gSEFMX01NQ19FUlJPUl9OT05FOwogfQpAQCAtMzEzOCw4ICszNjc4LDggQEAKICAgICAgIHJldHVybiBIQUxfTU1DX0VSUk9SX0lOVkFMSURfVk9MVFJBTkdFOwogICAgIH0KIAotICAgIC8qIFNFTkQgQ01EMSBBUFBfQ01EIHdpdGggTU1DX0hJR0hfVk9MVEFHRV9SQU5HRSgweEMwRkY4MDAwKSBhcyBhcmd1bWVudCAqLwotICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRPcENvbmRpdGlvbihobW1jLT5JbnN0YW5jZSwgZU1NQ19ISUdIX1ZPTFRBR0VfUkFOR0UpOworICAgIC8qIFNFTkQgQ01EMSBBUFBfQ01EIHdpdGggdm9sdGFnZSByYW5nZSBhcyBhcmd1bWVudCAqLworICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRPcENvbmRpdGlvbihobW1jLT5JbnN0YW5jZSwgTU1DX1ZPTFRBR0VfUkFOR0UpOwogICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfTU1DX0VSUk9SX1VOU1VQUE9SVEVEX0ZFQVRVUkU7CkBAIC0zMTUxLDcgKzM2OTEsNyBAQAogICAgIC8qIEdldCBvcGVyYXRpbmcgdm9sdGFnZSovCiAgICAgdmFsaWR2b2x0YWdlID0gKCgocmVzcG9uc2UgPj4gMzFVKSA9PSAxVSkgPyAxVSA6IDBVKTsKICAgfQotCisgIAogICAvKiBXaGVuIHBvd2VyIHJvdXRpbmUgaXMgZmluaXNoZWQgYW5kIGNvbW1hbmQgcmV0dXJucyB2YWxpZCB2b2x0YWdlICovCiAgIGlmICgoKHJlc3BvbnNlICYgKDB4RkYwMDAwMDBVKSkgPj4gMjQpID09IDB4QzBVKQogICB7CkBAIC0zMjc2LDYgKzM4MTYsMzYgQEAKICAgICB9CiAgIH0KIAorICAvKiBHZXQgZXJyb3Igc3RhdGUgKi8KKyAgaWYoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfRFRJTUVPVVQpKQorICB7CisgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KKyAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOworICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0RBVEFfVElNRU9VVDsKKyAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorICBlbHNlIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0RDUkNGQUlMKSkKKyAgeworICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCisgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKKyAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9EQVRBX0NSQ19GQUlMOworICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisgIGVsc2UgaWYoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfUlhPVkVSUikpCisgIHsKKyAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLworICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19GTEFHUyk7CisgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfUlhfT1ZFUlJVTjsKKyAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgIH0KKwogICAvKiBXaGlsZSBjYXJkIGlzIG5vdCByZWFkeSBmb3IgZGF0YSBhbmQgdHJpYWwgbnVtYmVyIGZvciBzZW5kaW5nIENNRDEzIGlzIG5vdCBleGNlZWRlZCAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZFN0YXR1cyhobW1jLT5JbnN0YW5jZSwgKHVpbnQzMl90KSgoKHVpbnQzMl90KWhtbWMtPk1tY0NhcmQuUmVsQ2FyZEFkZCkgPDwgMTYpKTsKICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCkBAIC0zMzc5LDc2ICszOTQ5LDg2IEBACiBzdGF0aWMgdWludDMyX3QgTU1DX0hpZ2hTcGVlZChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgRnVuY3Rpb25hbFN0YXRlIHN0YXRlKQogewogICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX01NQ19FUlJPUl9OT05FOwotICB1aW50MzJfdCByZXNwb25zZSwgY291bnQ7CisgIHVpbnQzMl90IHJlc3BvbnNlID0gMFUsIGNvdW50OwogICBTRE1NQ19Jbml0VHlwZURlZiBJbml0OwogCiAgIGlmICgoKGhtbWMtPkluc3RhbmNlLT5DTEtDUiAmIFNETU1DX0NMS0NSX0JVU1NQRUVEKSAhPSAwVSkgJiYgKHN0YXRlID09IERJU0FCTEUpKQogICB7Ci0gICAgLyogSW5kZXggOiAxODUgLSBWYWx1ZSA6IDAgKi8KLSAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAweDAzQjkwMDAwVSk7CisgICAgZXJyb3JzdGF0ZSA9IE1NQ19Qd3JDbGFzc1VwZGF0ZShobW1jLCAoaG1tYy0+SW5zdGFuY2UtPkNMS0NSICYgU0RNTUNfQ0xLQ1JfV0lEQlVTKSwgU0RNTUNfU1BFRURfTU9ERV9ERUZBVUxUKTsKKyAgICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAvKiBJbmRleCA6IDE4NSAtIFZhbHVlIDogMCAqLworICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN3aXRjaChobW1jLT5JbnN0YW5jZSwgMHgwM0I5MDAwMFUpOworICAgIH0KICAgfQotICAKKwogICBpZiAoKChobW1jLT5JbnN0YW5jZS0+Q0xLQ1IgJiBTRE1NQ19DTEtDUl9CVVNTUEVFRCkgPT0gMFUpICYmIChzdGF0ZSAhPSBESVNBQkxFKSkKICAgewotICAgIC8qIEluZGV4IDogMTg1IC0gVmFsdWUgOiAxICovCi0gICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN3aXRjaChobW1jLT5JbnN0YW5jZSwgMHgwM0I5MDEwMFUpOworICAgIGVycm9yc3RhdGUgPSBNTUNfUHdyQ2xhc3NVcGRhdGUoaG1tYywgKGhtbWMtPkluc3RhbmNlLT5DTEtDUiAmIFNETU1DX0NMS0NSX1dJREJVUyksIFNETU1DX1NQRUVEX01PREVfSElHSCk7CisgICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgeworICAgICAgLyogSW5kZXggOiAxODUgLSBWYWx1ZSA6IDEgKi8KKyAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTd2l0Y2goaG1tYy0+SW5zdGFuY2UsIDB4MDNCOTAxMDBVKTsKKyAgICB9CiAgIH0KIAogICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgewotICAgIC8qIENoZWNrIGZvciBzd2l0Y2ggZXJyb3IgKi8KLSAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZFN0YXR1cyhobW1jLT5JbnN0YW5jZSwgKHVpbnQzMl90KSgoKHVpbnQzMl90KWhtbWMtPk1tY0NhcmQuUmVsQ2FyZEFkZCkgPDwgMTZVKSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgLyogV2hpbGUgY2FyZCBpcyBub3QgcmVhZHkgZm9yIGRhdGEgYW5kIHRyaWFsIG51bWJlciBmb3Igc2VuZGluZyBDTUQxMyBpcyBub3QgZXhjZWVkZWQgKi8KKyAgICBjb3VudCA9IFNETU1DX01BWF9UUklBTDsKKyAgICBkbwogICAgIHsKKyAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kU3RhdHVzKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKCgodWludDMyX3QpaG1tYy0+TW1jQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKKyAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgICAgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKwogICAgICAgLyogR2V0IGNvbW1hbmQgcmVzcG9uc2UgKi8KICAgICAgIHJlc3BvbnNlID0gU0RNTUNfR2V0UmVzcG9uc2UoaG1tYy0+SW5zdGFuY2UsIFNETU1DX1JFU1AxKTsKKyAgICAgIGNvdW50LS07CisgICAgfXdoaWxlKCgocmVzcG9uc2UgJiAweDEwMFUpID09IDBVKSAmJiAoY291bnQgIT0gMFUpKTsKKworICAgIC8qIENoZWNrIHRoZSBzdGF0dXMgYWZ0ZXIgdGhlIHN3aXRjaCBjb21tYW5kIGV4ZWN1dGlvbiAqLworICAgIGlmICgoY291bnQgIT0gMFUpICYmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkpCisgICAgeworICAgICAgLyogQ2hlY2sgdGhlIGJpdCBTV0lUQ0hfRVJST1Igb2YgdGhlIGRldmljZSBzdGF0dXMgKi8KICAgICAgIGlmICgocmVzcG9uc2UgJiAweDgwVSkgIT0gMFUpCiAgICAgICB7CiAgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9VTlNVUFBPUlRFRF9GRUFUVVJFOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICAvKiBXaGlsZSBjYXJkIGlzIG5vdCByZWFkeSBmb3IgZGF0YSBhbmQgdHJpYWwgbnVtYmVyIGZvciBzZW5kaW5nIENNRDEzIGlzIG5vdCBleGNlZWRlZCAqLwotICAgICAgICBjb3VudCA9IFNETU1DX01BWF9UUklBTDsKLSAgICAgICAgd2hpbGUoKChyZXNwb25zZSAmIDB4MTAwVSkgPT0gMFUpICYmIChjb3VudCAhPSAwVSkpCi0gICAgICAgIHsKLSAgICAgICAgICBjb3VudC0tOwotCi0gICAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbmRTdGF0dXMoaG1tYy0+SW5zdGFuY2UsICh1aW50MzJfdCkoKCh1aW50MzJfdClobW1jLT5NbWNDYXJkLlJlbENhcmRBZGQpIDw8IDE2VSkpOwotICAgICAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8qIEdldCBjb21tYW5kIHJlc3BvbnNlICovCi0gICAgICAgICAgcmVzcG9uc2UgPSBTRE1NQ19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RNTUNfUkVTUDEpOwotICAgICAgICB9Ci0KICAgICAgICAgLyogQ29uZmlndXJlIGhpZ2ggc3BlZWQgKi8KLSAgICAgICAgaWYgKChjb3VudCAhPSAwVSkgJiYgKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKSkKKyAgICAgICAgSW5pdC5DbG9ja0VkZ2UgICAgICAgICAgID0gaG1tYy0+SW5pdC5DbG9ja0VkZ2U7CisgICAgICAgIEluaXQuQ2xvY2tQb3dlclNhdmUgICAgICA9IGhtbWMtPkluaXQuQ2xvY2tQb3dlclNhdmU7CisgICAgICAgIEluaXQuQnVzV2lkZSAgICAgICAgICAgICA9IChobW1jLT5JbnN0YW5jZS0+Q0xLQ1IgJiBTRE1NQ19DTEtDUl9XSURCVVMpOworICAgICAgICBJbml0LkhhcmR3YXJlRmxvd0NvbnRyb2wgPSBobW1jLT5Jbml0LkhhcmR3YXJlRmxvd0NvbnRyb2w7CisKKyAgICAgICAgaWYgKHN0YXRlID09IERJU0FCTEUpCiAgICAgICAgIHsKLSAgICAgICAgICBJbml0LkNsb2NrRWRnZSAgICAgICAgICAgPSBobW1jLT5Jbml0LkNsb2NrRWRnZTsKLSAgICAgICAgICBJbml0LkNsb2NrUG93ZXJTYXZlICAgICAgPSBobW1jLT5Jbml0LkNsb2NrUG93ZXJTYXZlOwotICAgICAgICAgIEluaXQuQnVzV2lkZSAgICAgICAgICAgICA9IChobW1jLT5JbnN0YW5jZS0+Q0xLQ1IgJiBTRE1NQ19DTEtDUl9XSURCVVMpOwotICAgICAgICAgIEluaXQuSGFyZHdhcmVGbG93Q29udHJvbCA9IGhtbWMtPkluaXQuSGFyZHdhcmVGbG93Q29udHJvbDsKKyAgICAgICAgICBJbml0LkNsb2NrRGl2ID0gaG1tYy0+SW5pdC5DbG9ja0RpdjsKKyAgICAgICAgICAodm9pZClTRE1NQ19Jbml0KGhtbWMtPkluc3RhbmNlLCBJbml0KTsKICAgICAgICAgICAKLSAgICAgICAgICBpZiAoc3RhdGUgPT0gRElTQUJMRSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJbml0LkNsb2NrRGl2ID0gaG1tYy0+SW5pdC5DbG9ja0RpdjsKLSAgICAgICAgICAgICh2b2lkKVNETU1DX0luaXQoaG1tYy0+SW5zdGFuY2UsIEluaXQpOwotCi0gICAgICAgICAgICBDTEVBUl9CSVQoaG1tYy0+SW5zdGFuY2UtPkNMS0NSLCBTRE1NQ19DTEtDUl9CVVNTUEVFRCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJbml0LkNsb2NrRGl2ID0gU0RNTUNfSFNwZWVkX0NMS19ESVY7Ci0gICAgICAgICAgICAodm9pZClTRE1NQ19Jbml0KGhtbWMtPkluc3RhbmNlLCBJbml0KTsKLQotICAgICAgICAgICAgU0VUX0JJVChobW1jLT5JbnN0YW5jZS0+Q0xLQ1IsIFNETU1DX0NMS0NSX0JVU1NQRUVEKTsKLSAgICAgICAgICB9CisgICAgICAgICAgQ0xFQVJfQklUKGhtbWMtPkluc3RhbmNlLT5DTEtDUiwgU0RNTUNfQ0xLQ1JfQlVTU1BFRUQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIEluaXQuQ2xvY2tEaXYgPSBTRE1NQ19IU3BlZWRfQ0xLX0RJVjsKKyAgICAgICAgICAodm9pZClTRE1NQ19Jbml0KGhtbWMtPkluc3RhbmNlLCBJbml0KTsKKyAgICAgICAgICAKKyAgICAgICAgICBTRVRfQklUKGhtbWMtPkluc3RhbmNlLT5DTEtDUiwgU0RNTUNfQ0xLQ1JfQlVTU1BFRUQpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQorICAgIGVsc2UgaWYgKGNvdW50ID09IDBVKQorICAgIHsKKyAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9USU1FT1VUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogTm90aGluZyB0byBkbyAqLworICAgIH0KICAgfQogCiAgIHJldHVybiBlcnJvcnN0YXRlOwpAQCAtMzQ2Myw2NiArNDA0Myw3OSBAQAogc3RhdGljIHVpbnQzMl90IE1NQ19ERFJfTW9kZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgRnVuY3Rpb25hbFN0YXRlIHN0YXRlKQogewogICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX01NQ19FUlJPUl9OT05FOwotICB1aW50MzJfdCByZXNwb25zZSwgY291bnQ7CisgIHVpbnQzMl90IHJlc3BvbnNlID0gMFUsIGNvdW50OwogCiAgIGlmICgoKGhtbWMtPkluc3RhbmNlLT5DTEtDUiAmIFNETU1DX0NMS0NSX0REUikgIT0gMFUpICYmIChzdGF0ZSA9PSBESVNBQkxFKSkKICAgewogICAgIGlmICgoaG1tYy0+SW5zdGFuY2UtPkNMS0NSICYgU0RNTUNfQ0xLQ1JfV0lEQlVTXzApICE9IDBVKQogICAgIHsKLSAgICAgIC8qIEluZGV4IDogMTgzIC0gVmFsdWUgOiAxICovCi0gICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAweDAzQjcwMTAwVSk7CisgICAgICBlcnJvcnN0YXRlID0gTU1DX1B3ckNsYXNzVXBkYXRlKGhtbWMsIFNETU1DX0JVU19XSURFXzRCLCBTRE1NQ19TUEVFRF9NT0RFX0hJR0gpOworICAgICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICB7CisgICAgICAgIC8qIEluZGV4IDogMTgzIC0gVmFsdWUgOiAxICovCisgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTd2l0Y2goaG1tYy0+SW5zdGFuY2UsIDB4MDNCNzAxMDBVKTsKKyAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIC8qIEluZGV4IDogMTgzIC0gVmFsdWUgOiAyICovCi0gICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAweDAzQjcwMjAwVSk7CisgICAgICBlcnJvcnN0YXRlID0gTU1DX1B3ckNsYXNzVXBkYXRlKGhtbWMsIFNETU1DX0JVU19XSURFXzhCLCBTRE1NQ19TUEVFRF9NT0RFX0hJR0gpOworICAgICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICB7CisgICAgICAgIC8qIEluZGV4IDogMTgzIC0gVmFsdWUgOiAyICovCisgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTd2l0Y2goaG1tYy0+SW5zdGFuY2UsIDB4MDNCNzAyMDBVKTsKKyAgICAgIH0KICAgICB9CiAgIH0KLSAgCisKICAgaWYgKCgoaG1tYy0+SW5zdGFuY2UtPkNMS0NSICYgU0RNTUNfQ0xLQ1JfRERSKSA9PSAwVSkgJiYgKHN0YXRlICE9IERJU0FCTEUpKQogICB7CiAgICAgaWYgKChobW1jLT5JbnN0YW5jZS0+Q0xLQ1IgJiBTRE1NQ19DTEtDUl9XSURCVVNfMCkgIT0gMFUpCiAgICAgewotICAgICAgLyogSW5kZXggOiAxODMgLSBWYWx1ZSA6IDUgKi8KLSAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTd2l0Y2goaG1tYy0+SW5zdGFuY2UsIDB4MDNCNzA1MDBVKTsKKyAgICAgIGVycm9yc3RhdGUgPSBNTUNfUHdyQ2xhc3NVcGRhdGUoaG1tYywgU0RNTUNfQlVTX1dJREVfNEIsIFNETU1DX1NQRUVEX01PREVfRERSKTsKKyAgICAgIGlmKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgICAgeworICAgICAgICAvKiBJbmRleCA6IDE4MyAtIFZhbHVlIDogNSAqLworICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAweDAzQjcwNTAwVSk7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAvKiBJbmRleCA6IDE4MyAtIFZhbHVlIDogNiAqLwotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN3aXRjaChobW1jLT5JbnN0YW5jZSwgMHgwM0I3MDYwMFUpOworICAgICAgZXJyb3JzdGF0ZSA9IE1NQ19Qd3JDbGFzc1VwZGF0ZShobW1jLCBTRE1NQ19CVVNfV0lERV84QiwgU0RNTUNfU1BFRURfTU9ERV9ERFIpOworICAgICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICB7CisgICAgICAgIC8qIEluZGV4IDogMTgzIC0gVmFsdWUgOiA2ICovCisgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTd2l0Y2goaG1tYy0+SW5zdGFuY2UsIDB4MDNCNzA2MDBVKTsKKyAgICAgIH0KICAgICB9CiAgIH0KIAogICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgewotICAgIC8qIENoZWNrIGZvciBzd2l0Y2ggZXJyb3IgKi8KLSAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZFN0YXR1cyhobW1jLT5JbnN0YW5jZSwgKHVpbnQzMl90KSgoKHVpbnQzMl90KWhtbWMtPk1tY0NhcmQuUmVsQ2FyZEFkZCkgPDwgMTZVKSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgLyogV2hpbGUgY2FyZCBpcyBub3QgcmVhZHkgZm9yIGRhdGEgYW5kIHRyaWFsIG51bWJlciBmb3Igc2VuZGluZyBDTUQxMyBpcyBub3QgZXhjZWVkZWQgKi8KKyAgICBjb3VudCA9IFNETU1DX01BWF9UUklBTDsKKyAgICBkbwogICAgIHsKKyAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kU3RhdHVzKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKCgodWludDMyX3QpaG1tYy0+TW1jQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKKyAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgICAgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKwogICAgICAgLyogR2V0IGNvbW1hbmQgcmVzcG9uc2UgKi8KICAgICAgIHJlc3BvbnNlID0gU0RNTUNfR2V0UmVzcG9uc2UoaG1tYy0+SW5zdGFuY2UsIFNETU1DX1JFU1AxKTsKKyAgICAgIGNvdW50LS07CisgICAgfXdoaWxlKCgocmVzcG9uc2UgJiAweDEwMFUpID09IDBVKSAmJiAoY291bnQgIT0gMFUpKTsKKworICAgIC8qIENoZWNrIHRoZSBzdGF0dXMgYWZ0ZXIgdGhlIHN3aXRjaCBjb21tYW5kIGV4ZWN1dGlvbiAqLworICAgIGlmICgoY291bnQgIT0gMFUpICYmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkpCisgICAgeworICAgICAgLyogQ2hlY2sgdGhlIGJpdCBTV0lUQ0hfRVJST1Igb2YgdGhlIGRldmljZSBzdGF0dXMgKi8KICAgICAgIGlmICgocmVzcG9uc2UgJiAweDgwVSkgIT0gMFUpCiAgICAgICB7CiAgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9VTlNVUFBPUlRFRF9GRUFUVVJFOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICAvKiBXaGlsZSBjYXJkIGlzIG5vdCByZWFkeSBmb3IgZGF0YSBhbmQgdHJpYWwgbnVtYmVyIGZvciBzZW5kaW5nIENNRDEzIGlzIG5vdCBleGNlZWRlZCAqLwotICAgICAgICBjb3VudCA9IFNETU1DX01BWF9UUklBTDsKLSAgICAgICAgd2hpbGUoKChyZXNwb25zZSAmIDB4MTAwVSkgPT0gMFUpICYmIChjb3VudCAhPSAwVSkpCi0gICAgICAgIHsKLSAgICAgICAgICBjb3VudC0tOwotCi0gICAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbmRTdGF0dXMoaG1tYy0+SW5zdGFuY2UsICh1aW50MzJfdCkoKCh1aW50MzJfdClobW1jLT5NbWNDYXJkLlJlbENhcmRBZGQpIDw8IDE2VSkpOwotICAgICAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8qIEdldCBjb21tYW5kIHJlc3BvbnNlICovCi0gICAgICAgICAgcmVzcG9uc2UgPSBTRE1NQ19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RNTUNfUkVTUDEpOwotICAgICAgICB9Ci0KICAgICAgICAgLyogQ29uZmlndXJlIEREUiBtb2RlICovCiAgICAgICAgIGlmICgoY291bnQgIT0gMFUpICYmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkpCiAgICAgICAgIHsKQEAgLTM1MzcsNiArNDEzMCwxNCBAQAogICAgICAgICB9CiAgICAgICB9CiAgICAgfQorICAgIGVsc2UgaWYgKGNvdW50ID09IDBVKQorICAgIHsKKyAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9USU1FT1VUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogTm90aGluZyB0byBkbyAqLworICAgIH0KICAgfQogCiAgIHJldHVybiBlcnJvcnN0YXRlOwpAQCAtMzU0NCw2ICs0MTQ1LDEwNyBAQAogI2VuZGlmCiAKIC8qKgorICAqIEBicmllZiAgVXBkYXRlIHRoZSBwb3dlciBjbGFzcyBvZiB0aGUgZGV2aWNlLgorICAqIEBwYXJhbSAgaG1tYyBNTUMgaGFuZGxlCisgICogQHBhcmFtICBXaWRlIFdpZGUgb2YgTU1DIGJ1cworICAqIEBwYXJhbSAgU3BlZWQgU3BlZWQgb2YgdGhlIE1NQyBidXMKKyAgKiBAcmV0dmFsIE1NQyBDYXJkIGVycm9yIHN0YXRlCisgICovCitzdGF0aWMgdWludDMyX3QgTU1DX1B3ckNsYXNzVXBkYXRlKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50MzJfdCBXaWRlLCB1aW50MzJfdCBTcGVlZCkKK3sKKyAgdWludDMyX3QgY291bnQ7CisgIHVpbnQzMl90IHJlc3BvbnNlID0gMFU7CisgIHVpbnQzMl90IGVycm9yc3RhdGUgPSBIQUxfTU1DX0VSUk9SX05PTkU7CisgIHVpbnQzMl90IHBvd2VyX2NsYXNzLCBzdXBwb3J0ZWRfcHdyX2NsYXNzOworCisgIGlmKChXaWRlID09IFNETU1DX0JVU19XSURFXzhCKSB8fCAoV2lkZSA9PSBTRE1NQ19CVVNfV0lERV80QikpCisgIHsKKyAgICBwb3dlcl9jbGFzcyA9IDBVOyAvKiBEZWZhdWx0IHZhbHVlIGFmdGVyIHBvd2VyLW9uIG9yIHNvZnR3YXJlIHJlc2V0ICovCisKKyAgICAvKiBSZWFkIHRoZSBQb3dlckNsYXNzIGZpZWxkIG9mIHRoZSBFeHRlbmRlZCBDU0QgcmVnaXN0ZXIgKi8KKyAgICBpZihNTUNfUmVhZEV4dENTRChobW1jLCAmcG93ZXJfY2xhc3MsIDE4NywgU0RNTUNfREFUQVRJTUVPVVQpICE9IEhBTF9PSykgLyogRmllbGQgUE9XRVJfQ0xBU1MgWzE4N10gKi8KKyAgICB7CisgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfRVJST1JfR0VORVJBTF9VTktOT1dOX0VSUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHBvd2VyX2NsYXNzID0gKChwb3dlcl9jbGFzcyA+PiAyNFUpICYgMHgwMDAwMDBGRlUpOworICAgIH0KKworICAgIC8qIEdldCB0aGUgc3VwcG9ydGVkIFBvd2VyQ2xhc3MgZmllbGQgb2YgdGhlIEV4dGVuZGVkIENTRCByZWdpc3RlciAqLworI2lmIGRlZmluZWQoU1RNMzJMNFA1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFE1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFI1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFI3eHgpIHx8IGRlZmluZWQoU1RNMzJMNFI5eHgpIHx8IGRlZmluZWQoU1RNMzJMNFM1eHgpIHx8IGRlZmluZWQoU1RNMzJMNFM3eHgpIHx8IGRlZmluZWQoU1RNMzJMNFM5eHgpCisgICAgaWYgKFNwZWVkID09IFNETU1DX1NQRUVEX01PREVfRERSKQorICAgIHsKKyAgICAgIC8qIEZpZWxkIFBXUl9DTF9ERFJfNTJfeHh4IFsyMzggb3IgMjM5XSAqLworICAgICAgc3VwcG9ydGVkX3B3cl9jbGFzcyA9ICgoaG1tYy0+RXh0X0NTRFsoTU1DX0VYVF9DU0RfUFdSX0NMX0REUl81Ml9JTkRFWC80KV0gPj4gTU1DX0VYVF9DU0RfUFdSX0NMX0REUl81Ml9QT1MpICYgMHgwMDAwMDBGRlUpOworICAgIH0KKyAgICBlbHNlIGlmIChTcGVlZCA9PSBTRE1NQ19TUEVFRF9NT0RFX0hJR0gpCisgICAgeworICAgICAgLyogRmllbGQgUFdSX0NMXzUyX3h4eCBbMjAwIG9yIDIwMl0gKi8KKyAgICAgIHN1cHBvcnRlZF9wd3JfY2xhc3MgPSAoKGhtbWMtPkV4dF9DU0RbKE1NQ19FWFRfQ1NEX1BXUl9DTF81Ml9JTkRFWC80KV0gPj4gTU1DX0VYVF9DU0RfUFdSX0NMXzUyX1BPUykgJiAweDAwMDAwMEZGVSk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIC8qIEZpZWxkIFBXUl9DTF8yNl94eHggWzIwMSBvciAyMDNdICovCisgICAgICBzdXBwb3J0ZWRfcHdyX2NsYXNzID0gKChobW1jLT5FeHRfQ1NEWyhNTUNfRVhUX0NTRF9QV1JfQ0xfMjZfSU5ERVgvNCldID4+IE1NQ19FWFRfQ1NEX1BXUl9DTF8yNl9QT1MpICYgMHgwMDAwMDBGRlUpOworICAgIH0KKworICAgIGlmKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIHsKKyAgICAgIGlmKFdpZGUgPT0gU0RNTUNfQlVTX1dJREVfOEIpCisgICAgICB7CisgICAgICAgIC8qIEJpdCBbNzo0XSA6IHBvd2VyIGNsYXNzIGZvciA4LWJpdHMgYnVzIGNvbmZpZ3VyYXRpb24gLSBCaXQgWzM6MF0gOiBwb3dlciBjbGFzcyBmb3IgNC1iaXRzIGJ1cyBjb25maWd1cmF0aW9uICovCisgICAgICAgIHN1cHBvcnRlZF9wd3JfY2xhc3MgPSAoc3VwcG9ydGVkX3B3cl9jbGFzcyA+PiA0VSk7CisgICAgICB9CisKKyAgICAgIGlmICgocG93ZXJfY2xhc3MgJiAweDBGVSkgIT0gKHN1cHBvcnRlZF9wd3JfY2xhc3MgJiAweDBGVSkpCisgICAgICB7CisgICAgICAgIC8qIE5lZWQgdG8gY2hhbmdlIGN1cnJlbnQgcG93ZXIgY2xhc3MgKi8KKyAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN3aXRjaChobW1jLT5JbnN0YW5jZSwgKDB4MDNCQjAwMDBVIHwgKChzdXBwb3J0ZWRfcHdyX2NsYXNzICYgMHgwRlUpIDw8IDhVKSkpOworCisgICAgICAgIGlmKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgLyogV2hpbGUgY2FyZCBpcyBub3QgcmVhZHkgZm9yIGRhdGEgYW5kIHRyaWFsIG51bWJlciBmb3Igc2VuZGluZyBDTUQxMyBpcyBub3QgZXhjZWVkZWQgKi8KKyAgICAgICAgICBjb3VudCA9IFNETU1DX01BWF9UUklBTDsKKyAgICAgICAgICBkbworICAgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kU3RhdHVzKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKCgodWludDMyX3QpaG1tYy0+TW1jQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKKyAgICAgICAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogR2V0IGNvbW1hbmQgcmVzcG9uc2UgKi8KKyAgICAgICAgICAgIHJlc3BvbnNlID0gU0RNTUNfR2V0UmVzcG9uc2UoaG1tYy0+SW5zdGFuY2UsIFNETU1DX1JFU1AxKTsKKyAgICAgICAgICAgIGNvdW50LS07CisgICAgICAgICAgfXdoaWxlKCgocmVzcG9uc2UgJiAweDEwMFUpID09IDBVKSAmJiAoY291bnQgIT0gMFUpKTsKKworICAgICAgICAgIC8qIENoZWNrIHRoZSBzdGF0dXMgYWZ0ZXIgdGhlIHN3aXRjaCBjb21tYW5kIGV4ZWN1dGlvbiAqLworICAgICAgICAgIGlmICgoY291bnQgIT0gMFUpICYmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogQ2hlY2sgdGhlIGJpdCBTV0lUQ0hfRVJST1Igb2YgdGhlIGRldmljZSBzdGF0dXMgKi8KKyAgICAgICAgICAgIGlmICgocmVzcG9uc2UgJiAweDgwVSkgIT0gMFUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9VTlNVUFBPUlRFRF9GRUFUVVJFOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChjb3VudCA9PSAwVSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfRVJST1JfVElNRU9VVDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gZXJyb3JzdGF0ZTsKK30KKy8qKgogICAqIEB9CiAgICovCiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX25hbmQuYyBiL1NyYy9zdG0zMmw0eHhfaGFsX25hbmQuYwppbmRleCA2YWZkOWQ1Li40MmM3ZjNiIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9uYW5kLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfbmFuZC5jCkBAIC0xNTYsNyArMTU2LDggQEAKICAgKiBAcGFyYW0gIEF0dFNwYWNlX1RpbWluZyBwb2ludGVyIHRvIEF0dHJpYnV0ZSBzcGFjZSB0aW1pbmcgc3RydWN0dXJlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfSW5pdChOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBGTUNfTkFORF9QQ0NfVGltaW5nVHlwZURlZiAqQ29tU3BhY2VfVGltaW5nLCBGTUNfTkFORF9QQ0NfVGltaW5nVHlwZURlZiAqQXR0U3BhY2VfVGltaW5nKQorSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX0luaXQoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgRk1DX05BTkRfUENDX1RpbWluZ1R5cGVEZWYgKkNvbVNwYWNlX1RpbWluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OQU5EX1BDQ19UaW1pbmdUeXBlRGVmICpBdHRTcGFjZV9UaW1pbmcpCiB7CiAgIC8qIENoZWNrIHRoZSBOQU5EIGhhbmRsZSBzdGF0ZSAqLwogICBpZiAoaG5hbmQgPT0gTlVMTCkKQEAgLTE3MCw3ICsxNzEsNyBAQAogICAgIGhuYW5kLT5Mb2NrID0gSEFMX1VOTE9DS0VEOwogCiAjaWYgKFVTRV9IQUxfTkFORF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgICBpZihobmFuZC0+TXNwSW5pdENhbGxiYWNrID09IE5VTEwpCisgICAgaWYgKGhuYW5kLT5Nc3BJbml0Q2FsbGJhY2sgPT0gTlVMTCkKICAgICB7CiAgICAgICBobmFuZC0+TXNwSW5pdENhbGxiYWNrID0gSEFMX05BTkRfTXNwSW5pdDsKICAgICB9CkBAIC0xOTUsNyArMTk2LDcgQEAKIAogICAvKiBFbmFibGUgdGhlIE5BTkQgZGV2aWNlICovCiAgIF9fRk1DX05BTkRfRU5BQkxFKGhuYW5kLT5JbnN0YW5jZSk7Ci0gIAorCiAgIC8qIFVwZGF0ZSB0aGUgTkFORCBjb250cm9sbGVyIHN0YXRlICovCiAgIGhuYW5kLT5TdGF0ZSA9IEhBTF9OQU5EX1NUQVRFX1JFQURZOwogCkBAIC0yMTEsNyArMjEyLDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX0RlSW5pdChOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kKQogewogI2lmIChVU0VfSEFMX05BTkRfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gIGlmKGhuYW5kLT5Nc3BEZUluaXRDYWxsYmFjayA9PSBOVUxMKQorICBpZiAoaG5hbmQtPk1zcERlSW5pdENhbGxiYWNrID09IE5VTEwpCiAgIHsKICAgICBobmFuZC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfTkFORF9Nc3BEZUluaXQ7CiAgIH0KQEAgLTI3Myw3ICsyNzQsNyBAQAogICAqIEBwYXJhbSAgaG5hbmQgcG9pbnRlciB0byBhIE5BTkRfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBOQU5EIG1vZHVsZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKLSovCisgICovCiB2b2lkIEhBTF9OQU5EX0lSUUhhbmRsZXIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCkKIHsKICAgLyogQ2hlY2sgTkFORCBpbnRlcnJ1cHQgUmlzaW5nIGVkZ2UgZmxhZyAqLwpAQCAtNTE0LDEyICs1MTUsMTMgQEAKICAgKiBAcGFyYW0gIE51bVBhZ2VUb1JlYWQgIG51bWJlciBvZiBwYWdlcyB0byByZWFkIGZyb20gYmxvY2sKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1JlYWRfUGFnZV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDhfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtUGFnZVRvUmVhZCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1JlYWRfUGFnZV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDhfdCAqcEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBOdW1QYWdlVG9SZWFkKQogewogICB1aW50MzJfdCBpbmRleDsKICAgdWludDMyX3QgdGlja3N0YXJ0OwogICB1aW50MzJfdCBkZXZpY2VBZGRyZXNzLCBudW1QYWdlc1JlYWQgPSAwVSwgbmFuZEFkZHJlc3MsIG5icGFnZXMgPSBOdW1QYWdlVG9SZWFkOwotICB1aW50OF90ICogYnVmZiA9IHBCdWZmZXI7CisgIHVpbnQ4X3QgKmJ1ZmYgPSBwQnVmZmVyOwogCiAgIC8qIENoZWNrIHRoZSBOQU5EIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9CVVNZKQpAQCAtNjY4LDEyICs2NzAsMTMgQEAKICAgKiBAcGFyYW0gIE51bVBhZ2VUb1JlYWQgIG51bWJlciBvZiBwYWdlcyB0byByZWFkIGZyb20gYmxvY2sKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1JlYWRfUGFnZV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsIHVpbnQxNl90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1QYWdlVG9SZWFkKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfUmVhZF9QYWdlXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDE2X3QgKnBCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bVBhZ2VUb1JlYWQpCiB7CiAgIHVpbnQzMl90IGluZGV4OwogICB1aW50MzJfdCB0aWNrc3RhcnQ7CiAgIHVpbnQzMl90IGRldmljZUFkZHJlc3MsIG51bVBhZ2VzUmVhZCA9IDAsIG5hbmRBZGRyZXNzLCBuYnBhZ2VzID0gTnVtUGFnZVRvUmVhZDsKLSAgdWludDE2X3QgKiBidWZmID0gcEJ1ZmZlcjsKKyAgdWludDE2X3QgKmJ1ZmYgPSBwQnVmZmVyOwogCiAgIC8qIENoZWNrIHRoZSBOQU5EIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9CVVNZKQpAQCAtODIxLDEyICs4MjQsMTMgQEAKICAgKiBAcGFyYW0gIE51bVBhZ2VUb1dyaXRlICAgbnVtYmVyIG9mIHBhZ2VzIHRvIHdyaXRlIHRvIGJsb2NrCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9Xcml0ZV9QYWdlXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50OF90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1QYWdlVG9Xcml0ZSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1dyaXRlX1BhZ2VfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsIHVpbnQ4X3QgKnBCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bVBhZ2VUb1dyaXRlKQogewogICB1aW50MzJfdCBpbmRleDsKICAgdWludDMyX3QgdGlja3N0YXJ0OwogICB1aW50MzJfdCBkZXZpY2VBZGRyZXNzLCBudW1QYWdlc1dyaXR0ZW4gPSAwLCBuYW5kQWRkcmVzcywgbmJwYWdlcyA9IE51bVBhZ2VUb1dyaXRlOwotICB1aW50OF90ICogYnVmZiA9IHBCdWZmZXI7CisgIHVpbnQ4X3QgKmJ1ZmYgPSBwQnVmZmVyOwogCiAgIC8qIENoZWNrIHRoZSBOQU5EIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9CVVNZKQpAQCAtOTcwLDEyICs5NzQsMTMgQEAKICAgKiBAcGFyYW0gIE51bVBhZ2VUb1dyaXRlICAgbnVtYmVyIG9mIHBhZ2VzIHRvIHdyaXRlIHRvIGJsb2NrCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9Xcml0ZV9QYWdlXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVBhZ2VUb1dyaXRlKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfV3JpdGVfUGFnZV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsIHVpbnQxNl90ICpwQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtUGFnZVRvV3JpdGUpCiB7CiAgIHVpbnQzMl90IGluZGV4OwogICB1aW50MzJfdCB0aWNrc3RhcnQ7CiAgIHVpbnQzMl90IGRldmljZUFkZHJlc3MsIG51bVBhZ2VzV3JpdHRlbiA9IDAsIG5hbmRBZGRyZXNzLCBuYnBhZ2VzID0gTnVtUGFnZVRvV3JpdGU7Ci0gIHVpbnQxNl90ICogYnVmZiA9IHBCdWZmZXI7CisgIHVpbnQxNl90ICpidWZmID0gcEJ1ZmZlcjsKIAogICAvKiBDaGVjayB0aGUgTkFORCBjb250cm9sbGVyIHN0YXRlICovCiAgIGlmIChobmFuZC0+U3RhdGUgPT0gSEFMX05BTkRfU1RBVEVfQlVTWSkKQEAgLTExMTgsMTMgKzExMjMsMTQgQEAKICAgKiBAcGFyYW0gIHBCdWZmZXIgcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyIHRvIHdyaXRlCiAgICogQHBhcmFtICBOdW1TcGFyZUFyZWFUb1JlYWQgTnVtYmVyIG9mIHNwYXJlIGFyZWEgdG8gcmVhZAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwotKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1JlYWRfU3BhcmVBcmVhXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50OF90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1TcGFyZUFyZWFUb1JlYWQpCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9SZWFkX1NwYXJlQXJlYV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDhfdCAqcEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvUmVhZCkKIHsKICAgdWludDMyX3QgaW5kZXg7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKICAgdWludDMyX3QgZGV2aWNlQWRkcmVzcywgbnVtU3BhcmVBcmVhUmVhZCA9IDAsIG5hbmRBZGRyZXNzLCBjb2x1bW5BZGRyZXNzLCBuYnNwYXJlID0gTnVtU3BhcmVBcmVhVG9SZWFkOwotICB1aW50OF90ICogYnVmZiA9IHBCdWZmZXI7CisgIHVpbnQ4X3QgKmJ1ZmYgPSBwQnVmZmVyOwogCiAgIC8qIENoZWNrIHRoZSBOQU5EIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9CVVNZKQpAQCAtMTI3OCwxMyArMTI4NCwxNCBAQAogICAqIEBwYXJhbSAgcEJ1ZmZlciBwb2ludGVyIHRvIHNvdXJjZSBidWZmZXIgdG8gd3JpdGUuIHBCdWZmZXIgc2hvdWxkIGJlIDE2Yml0cyBhbGlnbmVkLgogICAqIEBwYXJhbSAgTnVtU3BhcmVBcmVhVG9SZWFkIE51bWJlciBvZiBzcGFyZSBhcmVhIHRvIHJlYWQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKLSovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9SZWFkX1NwYXJlQXJlYV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsIHVpbnQxNl90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1TcGFyZUFyZWFUb1JlYWQpCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9SZWFkX1NwYXJlQXJlYV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvUmVhZCkKIHsKICAgdWludDMyX3QgaW5kZXg7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKICAgdWludDMyX3QgZGV2aWNlQWRkcmVzcywgbnVtU3BhcmVBcmVhUmVhZCA9IDAsIG5hbmRBZGRyZXNzLCBjb2x1bW5BZGRyZXNzLCBuYnNwYXJlID0gTnVtU3BhcmVBcmVhVG9SZWFkOwotICB1aW50MTZfdCAqIGJ1ZmYgPSBwQnVmZmVyOworICB1aW50MTZfdCAqYnVmZiA9IHBCdWZmZXI7CiAKICAgLyogQ2hlY2sgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwogICBpZiAoaG5hbmQtPlN0YXRlID09IEhBTF9OQU5EX1NUQVRFX0JVU1kpCkBAIC0xNDM5LDEyICsxNDQ2LDEzIEBACiAgICogQHBhcmFtICBOdW1TcGFyZUFyZWFUb3dyaXRlICAgbnVtYmVyIG9mIHNwYXJlIGFyZWFzIHRvIHdyaXRlIHRvIGJsb2NrCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9Xcml0ZV9TcGFyZUFyZWFfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsIHVpbnQ4X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvd3JpdGUpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9Xcml0ZV9TcGFyZUFyZWFfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG93cml0ZSkKIHsKICAgdWludDMyX3QgaW5kZXg7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKICAgdWludDMyX3QgZGV2aWNlQWRkcmVzcywgbnVtU3BhcmVBcmVhV3JpdHRlbiA9IDAsIG5hbmRBZGRyZXNzLCBjb2x1bW5BZGRyZXNzLCBuYnNwYXJlID0gTnVtU3BhcmVBcmVhVG93cml0ZTsKLSAgdWludDhfdCAqIGJ1ZmYgPSBwQnVmZmVyOworICB1aW50OF90ICpidWZmID0gcEJ1ZmZlcjsKIAogICAvKiBDaGVjayB0aGUgTkFORCBjb250cm9sbGVyIHN0YXRlICovCiAgIGlmIChobmFuZC0+U3RhdGUgPT0gSEFMX05BTkRfU1RBVEVfQlVTWSkKQEAgLTE1OTcsMTIgKzE2MDUsMTMgQEAKICAgKiBAcGFyYW0gIE51bVNwYXJlQXJlYVRvd3JpdGUgICBudW1iZXIgb2Ygc3BhcmUgYXJlYXMgdG8gd3JpdGUgdG8gYmxvY2sKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1dyaXRlX1NwYXJlQXJlYV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsIHVpbnQxNl90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1TcGFyZUFyZWFUb3dyaXRlKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfV3JpdGVfU3BhcmVBcmVhXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvd3JpdGUpCiB7CiAgIHVpbnQzMl90IGluZGV4OwogICB1aW50MzJfdCB0aWNrc3RhcnQ7CiAgIHVpbnQzMl90IGRldmljZUFkZHJlc3MsIG51bVNwYXJlQXJlYVdyaXR0ZW4gPSAwLCBuYW5kQWRkcmVzcywgY29sdW1uQWRkcmVzcywgbmJzcGFyZSA9IE51bVNwYXJlQXJlYVRvd3JpdGU7Ci0gIHVpbnQxNl90ICogYnVmZiA9IHBCdWZmZXI7CisgIHVpbnQxNl90ICpidWZmID0gcEJ1ZmZlcjsKIAogICAvKiBDaGVjayB0aGUgTkFORCBjb250cm9sbGVyIHN0YXRlICovCiAgIGlmIChobmFuZC0+U3RhdGUgPT0gSEFMX05BTkRfU1RBVEVfQlVTWSkKQEAgLTE4NTAsMTEgKzE4NTksMTIgQEAKICAgKiBAcGFyYW0gcENhbGxiYWNrIDogcG9pbnRlciB0byB0aGUgQ2FsbGJhY2sgZnVuY3Rpb24KICAgKiBAcmV0dmFsIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfUmVnaXN0ZXJDYWxsYmFjayAoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgSEFMX05BTkRfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJZCwgcE5BTkRfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1JlZ2lzdGVyQ2FsbGJhY2soTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgSEFMX05BTkRfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5BTkRfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCi0gIGlmKHBDYWxsYmFjayA9PSBOVUxMKQorICBpZiAocENhbGxiYWNrID09IE5VTEwpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC0xODYyLDM5ICsxODcyLDM5IEBACiAgIC8qIFByb2Nlc3MgbG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaG5hbmQpOwogCi0gIGlmKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9SRUFEWSkKKyAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9SRUFEWSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJZCkKICAgICB7Ci0gICAgY2FzZSBIQUxfTkFORF9NU1BfSU5JVF9DQl9JRCA6Ci0gICAgICBobmFuZC0+TXNwSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfTkFORF9NU1BfREVJTklUX0NCX0lEIDoKLSAgICAgIGhuYW5kLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX05BTkRfSVRfQ0JfSUQgOgotICAgICAgaG5hbmQtPkl0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0IDoKLSAgICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCi0gICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9OQU5EX01TUF9JTklUX0NCX0lEIDoKKyAgICAgICAgaG5hbmQtPk1zcEluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9OQU5EX01TUF9ERUlOSVRfQ0JfSUQgOgorICAgICAgICBobmFuZC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfTkFORF9JVF9DQl9JRCA6CisgICAgICAgIGhuYW5kLT5JdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLworICAgICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOworICAgICAgICBicmVhazsKICAgICB9CiAgIH0KLSAgZWxzZSBpZihobmFuZC0+U3RhdGUgPT0gSEFMX05BTkRfU1RBVEVfUkVTRVQpCisgIGVsc2UgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9SRVNFVCkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJZCkKICAgICB7Ci0gICAgY2FzZSBIQUxfTkFORF9NU1BfSU5JVF9DQl9JRCA6Ci0gICAgICBobmFuZC0+TXNwSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfTkFORF9NU1BfREVJTklUX0NCX0lEIDoKLSAgICAgIGhuYW5kLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQgOgotICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX05BTkRfTVNQX0lOSVRfQ0JfSUQgOgorICAgICAgICBobmFuZC0+TXNwSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX05BTkRfTVNQX0RFSU5JVF9DQl9JRCA6CisgICAgICAgIGhuYW5kLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTE5MTksNDYgKzE5MjksNDYgQEAKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX05BTkRfSVRfQ0JfSUQgICAgICAgICAgICAgTkFORCBJVCBjYWxsYmFjayBJRAogICAqIEByZXR2YWwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9VblJlZ2lzdGVyQ2FsbGJhY2sgKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIEhBTF9OQU5EX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSWQpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9VblJlZ2lzdGVyQ2FsbGJhY2soTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgSEFMX05BTkRfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJZCkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCiAgIC8qIFByb2Nlc3MgbG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaG5hbmQpOwogCi0gIGlmKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9SRUFEWSkKKyAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9SRUFEWSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJZCkKICAgICB7Ci0gICAgY2FzZSBIQUxfTkFORF9NU1BfSU5JVF9DQl9JRCA6Ci0gICAgICBobmFuZC0+TXNwSW5pdENhbGxiYWNrID0gSEFMX05BTkRfTXNwSW5pdDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX05BTkRfTVNQX0RFSU5JVF9DQl9JRCA6Ci0gICAgICBobmFuZC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfTkFORF9Nc3BEZUluaXQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9OQU5EX0lUX0NCX0lEIDoKLSAgICAgIGhuYW5kLT5JdENhbGxiYWNrID0gSEFMX05BTkRfSVRDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQgOgotICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX05BTkRfTVNQX0lOSVRfQ0JfSUQgOgorICAgICAgICBobmFuZC0+TXNwSW5pdENhbGxiYWNrID0gSEFMX05BTkRfTXNwSW5pdDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9OQU5EX01TUF9ERUlOSVRfQ0JfSUQgOgorICAgICAgICBobmFuZC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfTkFORF9Nc3BEZUluaXQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfTkFORF9JVF9DQl9JRCA6CisgICAgICAgIGhuYW5kLT5JdENhbGxiYWNrID0gSEFMX05BTkRfSVRDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9Ci0gIGVsc2UgaWYoaG5hbmQtPlN0YXRlID09IEhBTF9OQU5EX1NUQVRFX1JFU0VUKQorICBlbHNlIGlmIChobmFuZC0+U3RhdGUgPT0gSEFMX05BTkRfU1RBVEVfUkVTRVQpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSWQpCiAgICAgewotICAgIGNhc2UgSEFMX05BTkRfTVNQX0lOSVRfQ0JfSUQgOgotICAgICAgaG5hbmQtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9OQU5EX01zcEluaXQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9OQU5EX01TUF9ERUlOSVRfQ0JfSUQgOgotICAgICAgaG5hbmQtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX05BTkRfTXNwRGVJbml0OwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdCA6Ci0gICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLwotICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfTkFORF9NU1BfSU5JVF9DQl9JRCA6CisgICAgICAgIGhuYW5kLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfTkFORF9Nc3BJbml0OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX05BTkRfTVNQX0RFSU5JVF9DQl9JRCA6CisgICAgICAgIGhuYW5kLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9OQU5EX01zcERlSW5pdDsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTE5NzgsOCArMTk4OCw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgTkFORF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICBtYW5hZ2VtZW50IGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgbWFuYWdlbWVudCBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIE5BTkQgQ29udHJvbCBmdW5jdGlvbnMgIyMjIyMKQEAgLTIwOTksOCArMjEwOSw4IEBACiAKIAogLyoqIEBkZWZncm91cCBOQU5EX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIE5BTkQgU3RhdGUgZnVuY3Rpb25zICMjIyMjCkBAIC0yMTM3LDcgKzIxNDcsNyBAQAogICBVTlVTRUQoaG5hbmQpOwogCiAgIC8qIElkZW50aWZ5IHRoZSBkZXZpY2UgYWRkcmVzcyAqLwotICAgIERldmljZUFkZHJlc3MgPSBOQU5EX0RFVklDRTsKKyAgRGV2aWNlQWRkcmVzcyA9IE5BTkRfREVWSUNFOwogCiAgIC8qIFNlbmQgUmVhZCBzdGF0dXMgb3BlcmF0aW9uIGNvbW1hbmQgKi8KICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShEZXZpY2VBZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX1NUQVRVUzsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX25vci5jIGIvU3JjL3N0bTMybDR4eF9oYWxfbm9yLmMKaW5kZXggNGYwYWMwMy4uZjc4MjI5NCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfbm9yLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfbm9yLmMKQEAgLTE1MSw5ICsxNTEsMzUgQEAKICNkZWZpbmUgTk9SX0NNRF9EQVRBX0JVRkZFUl9BTkRfUFJPR19DT05GSVJNICAodWludDhfdCkweDI5CiAjZGVmaW5lIE5PUl9DTURfREFUQV9CTE9DS19FUkFTRSAgICAgICAgICAgICAgKHVpbnQ4X3QpMHgzMAogCisjZGVmaW5lIE5PUl9DTURfUkVBRF9BUlJBWSAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KTB4MDBGRgorI2RlZmluZSBOT1JfQ01EX1dPUkRfUFJPR1JBTSAgICAgICAgICAgICAgICAgICh1aW50MTZfdCkweDAwNDAKKyNkZWZpbmUgTk9SX0NNRF9CVUZGRVJFRF9QUk9HUkFNICAgICAgICAgICAgICAodWludDE2X3QpMHgwMEU4CisjZGVmaW5lIE5PUl9DTURfQ09ORklSTSAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KTB4MDBEMAorI2RlZmluZSBOT1JfQ01EX0JMT0NLX0VSQVNFICAgICAgICAgICAgICAgICAgICh1aW50MTZfdCkweDAwMjAKKyNkZWZpbmUgTk9SX0NNRF9CTE9DS19VTkxPQ0sgICAgICAgICAgICAgICAgICAodWludDE2X3QpMHgwMDYwCisjZGVmaW5lIE5PUl9DTURfUkVBRF9TVEFUVVNfUkVHICAgICAgICAgICAgICAgKHVpbnQxNl90KTB4MDA3MAorI2RlZmluZSBOT1JfQ01EX0NMRUFSX1NUQVRVU19SRUcgICAgICAgICAgICAgICh1aW50MTZfdCkweDAwNTAKKwogLyogTWFzayBvbiBOT1IgU1RBVFVTIFJFR0lTVEVSICovCisjZGVmaW5lIE5PUl9NQVNLX1NUQVRVU19EUTQgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KTB4MDAxMAogI2RlZmluZSBOT1JfTUFTS19TVEFUVVNfRFE1ICAgICAgICAgICAgICAgICAgICh1aW50MTZfdCkweDAwMjAKICNkZWZpbmUgTk9SX01BU0tfU1RBVFVTX0RRNiAgICAgICAgICAgICAgICAgICAodWludDE2X3QpMHgwMDQwCisjZGVmaW5lIE5PUl9NQVNLX1NUQVRVU19EUTcgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KTB4MDA4MAorCisvKiBBZGRyZXNzIG9mIHRoZSBwcmltYXJ5IGNvbW1hbmQgc2V0ICovCisjZGVmaW5lIE5PUl9BRERSRVNTX0NPTU1BTkRfU0VUICAgICAgICAgICAgICAgKHVpbnQxNl90KTB4MDAxMworCisvKiBDb21tYW5kIHNldCBjb2RlIGFzc2lnbm1lbnQgKGRlZmluZWQgaW4gSkVERUMgSkVQMTM3QiB2ZXJzaW9uIG1heSAyMDA0KSAqLworI2RlZmluZSBOT1JfSU5URUxfU0hBUlBfRVhUX0NPTU1BTkRfU0VUICAgICAgICh1aW50MTZfdCkweDAwMDEgLyogU3VwcG9ydGVkIGluIHRoaXMgZHJpdmVyICovCisjZGVmaW5lIE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCAgICAgICAgICAgKHVpbnQxNl90KTB4MDAwMiAvKiBTdXBwb3J0ZWQgaW4gdGhpcyBkcml2ZXIgKi8KKyNkZWZpbmUgTk9SX0lOVEVMX1NUQU5EQVJEX0NPTU1BTkRfU0VUICAgICAgICAodWludDE2X3QpMHgwMDAzIC8qIE5vdCBTdXBwb3J0ZWQgaW4gdGhpcyBkcml2ZXIgKi8KKyNkZWZpbmUgTk9SX0FNRF9GVUpJVFNVX0VYVF9DT01NQU5EX1NFVCAgICAgICAodWludDE2X3QpMHgwMDA0IC8qIE5vdCBTdXBwb3J0ZWQgaW4gdGhpcyBkcml2ZXIgKi8KKyNkZWZpbmUgTk9SX1dJTkRCT05EX1NUQU5EQVJEX0NPTU1BTkRfU0VUICAgICAodWludDE2X3QpMHgwMDA2IC8qIE5vdCBTdXBwb3J0ZWQgaW4gdGhpcyBkcml2ZXIgKi8KKyNkZWZpbmUgTk9SX01JVFNVQklTSElfU1RBTkRBUkRfQ09NTUFORF9TRVQgICAodWludDE2X3QpMHgwMTAwIC8qIE5vdCBTdXBwb3J0ZWQgaW4gdGhpcyBkcml2ZXIgKi8KKyNkZWZpbmUgTk9SX01JVFNVQklTSElfRVhUX0NPTU1BTkRfU0VUICAgICAgICAodWludDE2X3QpMHgwMTAxIC8qIE5vdCBTdXBwb3J0ZWQgaW4gdGhpcyBkcml2ZXIgKi8KKyNkZWZpbmUgTk9SX1BBR0VfV1JJVEVfQ09NTUFORF9TRVQgICAgICAgICAgICAodWludDE2X3QpMHgwMTAyIC8qIE5vdCBTdXBwb3J0ZWQgaW4gdGhpcyBkcml2ZXIgKi8KKyNkZWZpbmUgTk9SX0lOVEVMX1BFUkZPUk1BTkNFX0NPTU1BTkRfU0VUICAgICAodWludDE2X3QpMHgwMjAwIC8qIE5vdCBTdXBwb3J0ZWQgaW4gdGhpcyBkcml2ZXIgKi8KKyNkZWZpbmUgTk9SX0lOVEVMX0RBVEFfQ09NTUFORF9TRVQgICAgICAgICAgICAodWludDE2X3QpMHgwMjEwIC8qIE5vdCBTdXBwb3J0ZWQgaW4gdGhpcyBkcml2ZXIgKi8KIAogLyoqCiAgICogQH0KQEAgLTIwMCw4ICsyMjYsMTEgQEAKICAgKiBAcGFyYW0gIEV4dFRpbWluZyBwb2ludGVyIHRvIE5PUiBleHRlbmRlZCBtb2RlIHRpbWluZyBzdHJ1Y3R1cmUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfSW5pdChOT1JfSGFuZGxlVHlwZURlZiAqaG5vciwgRk1DX05PUlNSQU1fVGltaW5nVHlwZURlZiAqVGltaW5nLCBGTUNfTk9SU1JBTV9UaW1pbmdUeXBlRGVmICpFeHRUaW1pbmcpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTk9SX0luaXQoTk9SX0hhbmRsZVR5cGVEZWYgKmhub3IsIEZNQ19OT1JTUkFNX1RpbWluZ1R5cGVEZWYgKlRpbWluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTUNfTk9SU1JBTV9UaW1pbmdUeXBlRGVmICpFeHRUaW1pbmcpCiB7CisgIHVpbnQzMl90IGRldmljZWFkZHJlc3M7CisKICAgLyogQ2hlY2sgdGhlIE5PUiBoYW5kbGUgcGFyYW1ldGVyICovCiAgIGlmIChobm9yID09IE5VTEwpCiAgIHsKQEAgLTIxNCw3ICsyNDMsNyBAQAogICAgIGhub3ItPkxvY2sgPSBIQUxfVU5MT0NLRUQ7CiAKICNpZiAoVVNFX0hBTF9OT1JfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgaWYoaG5vci0+TXNwSW5pdENhbGxiYWNrID09IE5VTEwpCisgICAgaWYgKGhub3ItPk1zcEluaXRDYWxsYmFjayA9PSBOVUxMKQogICAgIHsKICAgICAgIGhub3ItPk1zcEluaXRDYWxsYmFjayA9IEhBTF9OT1JfTXNwSW5pdDsKICAgICB9CkBAIC0yNTIsNyArMjgxLDI5IEBACiAgIC8qIEluaXRpYWxpemUgdGhlIE5PUiBjb250cm9sbGVyIHN0YXRlICovCiAgIGhub3ItPlN0YXRlID0gSEFMX05PUl9TVEFURV9SRUFEWTsKIAotICByZXR1cm4gSEFMX09LOworICAvKiBTZWxlY3QgdGhlIE5PUiBkZXZpY2UgYWRkcmVzcyAqLworICBpZiAoaG5vci0+SW5pdC5OU0JhbmsgPT0gRk1DX05PUlNSQU1fQkFOSzEpCisgIHsKKyAgICBkZXZpY2VhZGRyZXNzID0gTk9SX01FTU9SWV9BRFJFU1MxOworICB9CisgIGVsc2UgaWYgKGhub3ItPkluaXQuTlNCYW5rID09IEZNQ19OT1JTUkFNX0JBTksyKQorICB7CisgICAgZGV2aWNlYWRkcmVzcyA9IE5PUl9NRU1PUllfQURSRVNTMjsKKyAgfQorICBlbHNlIGlmIChobm9yLT5Jbml0Lk5TQmFuayA9PSBGTUNfTk9SU1JBTV9CQU5LMykKKyAgeworICAgIGRldmljZWFkZHJlc3MgPSBOT1JfTUVNT1JZX0FEUkVTUzM7CisgIH0KKyAgZWxzZSAvKiBGTUNfTk9SU1JBTV9CQU5LNCAqLworICB7CisgICAgZGV2aWNlYWRkcmVzcyA9IE5PUl9NRU1PUllfQURSRVNTNDsKKyAgfQorCisgIC8qIEdldCB0aGUgdmFsdWUgb2YgdGhlIGNvbW1hbmQgc2V0ICovCisgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0NGSSksIE5PUl9DTURfREFUQV9DRkkpOworICBobm9yLT5Db21tYW5kU2V0ID0gKihfX0lPIHVpbnQxNl90ICopIE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQUREUkVTU19DT01NQU5EX1NFVCk7CisKKyAgcmV0dXJuIEhBTF9OT1JfUmV0dXJuVG9SZWFkTW9kZShobm9yKTsKIH0KIAogLyoqCkBAIC0yNjQsNyArMzE1LDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfRGVJbml0KE5PUl9IYW5kbGVUeXBlRGVmICpobm9yKQogewogI2lmIChVU0VfSEFMX05PUl9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgaWYoaG5vci0+TXNwRGVJbml0Q2FsbGJhY2sgPT0gTlVMTCkKKyAgaWYgKGhub3ItPk1zcERlSW5pdENhbGxiYWNrID09IE5VTEwpCiAgIHsKICAgICBobm9yLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9OT1JfTXNwRGVJbml0OwogICB9CkBAIC0zNjcsNiArNDE4LDcgQEAKIHsKICAgdWludDMyX3QgZGV2aWNlYWRkcmVzczsKICAgSEFMX05PUl9TdGF0ZVR5cGVEZWYgc3RhdGU7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAogICAvKiBDaGVjayB0aGUgTk9SIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgc3RhdGUgPSBobm9yLT5TdGF0ZTsKQEAgLTQwMSwxNSArNDUzLDMwIEBACiAgICAgfQogCiAgICAgLyogU2VuZCByZWFkIElEIGNvbW1hbmQgKi8KLSAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7Ci0gICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkQpLCBOT1JfQ01EX0RBVEFfQVVUT19TRUxFQ1QpOworICAgIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCkKKyAgICB7CisgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7CisgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKKyAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwgTk9SX0NNRF9EQVRBX0FVVE9fU0VMRUNUKTsKKyAgICB9CisgICAgZWxzZSBpZiAoaG5vci0+Q29tbWFuZFNldCA9PSBOT1JfSU5URUxfU0hBUlBfRVhUX0NPTU1BTkRfU0VUKQorICAgIHsKKyAgICAgIE5PUl9XUklURShkZXZpY2VhZGRyZXNzLCBOT1JfQ01EX0RBVEFfQVVUT19TRUxFQ1QpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogUHJpbWFyeSBjb21tYW5kIHNldCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgICB9CiAKLSAgICAvKiBSZWFkIHRoZSBOT1IgSURzICovCi0gICAgcE5PUl9JRC0+TWFudWZhY3R1cmVyX0NvZGUgPSAqKF9fSU8gdWludDE2X3QgKikgTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE1DX0FERFJFU1MpOwotICAgIHBOT1JfSUQtPkRldmljZV9Db2RlMSAgICAgID0gKihfX0lPIHVpbnQxNl90ICopIE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBERVZJQ0VfQ09ERTFfQUREUik7Ci0gICAgcE5PUl9JRC0+RGV2aWNlX0NvZGUyICAgICAgPSAqKF9fSU8gdWludDE2X3QgKikgTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIERFVklDRV9DT0RFMl9BRERSKTsKLSAgICBwTk9SX0lELT5EZXZpY2VfQ29kZTMgICAgICA9ICooX19JTyB1aW50MTZfdCAqKSBOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgREVWSUNFX0NPREUzX0FERFIpOworICAgIGlmIChzdGF0dXMgIT0gSEFMX0VSUk9SKQorICAgIHsKKyAgICAgIC8qIFJlYWQgdGhlIE5PUiBJRHMgKi8KKyAgICAgIHBOT1JfSUQtPk1hbnVmYWN0dXJlcl9Db2RlID0gKihfX0lPIHVpbnQxNl90ICopIE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBNQ19BRERSRVNTKTsKKyAgICAgIHBOT1JfSUQtPkRldmljZV9Db2RlMSAgICAgID0gKihfX0lPIHVpbnQxNl90ICopIE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBERVZJQ0VfQ09ERTFfQUREUik7CisgICAgICBwTk9SX0lELT5EZXZpY2VfQ29kZTIgICAgICA9ICooX19JTyB1aW50MTZfdCAqKSBOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgREVWSUNFX0NPREUyX0FERFIpOworICAgICAgcE5PUl9JRC0+RGV2aWNlX0NvZGUzICAgICAgPSAqKF9fSU8gdWludDE2X3QgKikgTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIERFVklDRV9DT0RFM19BRERSKTsKKyAgICB9CiAKICAgICAvKiBDaGVjayB0aGUgTk9SIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgICBobm9yLT5TdGF0ZSA9IHN0YXRlOwpAQCAtNDIyLDcgKzQ4OSw3IEBACiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtNDM1LDYgKzUwMiw3IEBACiB7CiAgIHVpbnQzMl90IGRldmljZWFkZHJlc3M7CiAgIEhBTF9OT1JfU3RhdGVUeXBlRGVmIHN0YXRlOworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKICAgLyogQ2hlY2sgdGhlIE5PUiBjb250cm9sbGVyIHN0YXRlICovCiAgIHN0YXRlID0gaG5vci0+U3RhdGU7CkBAIC00NjgsNyArNTM2LDE5IEBACiAgICAgICBkZXZpY2VhZGRyZXNzID0gTk9SX01FTU9SWV9BRFJFU1M0OwogICAgIH0KIAotICAgIE5PUl9XUklURShkZXZpY2VhZGRyZXNzLCBOT1JfQ01EX0RBVEFfUkVBRF9SRVNFVCk7CisgICAgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0FNRF9GVUpJVFNVX0NPTU1BTkRfU0VUKQorICAgIHsKKyAgICAgIE5PUl9XUklURShkZXZpY2VhZGRyZXNzLCBOT1JfQ01EX0RBVEFfUkVBRF9SRVNFVCk7CisgICAgfQorICAgIGVsc2UgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0lOVEVMX1NIQVJQX0VYVF9DT01NQU5EX1NFVCkKKyAgICB7CisgICAgICBOT1JfV1JJVEUoZGV2aWNlYWRkcmVzcywgTk9SX0NNRF9SRUFEX0FSUkFZKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIFByaW1hcnkgY29tbWFuZCBzZXQgbm90IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CisgICAgfQogCiAgICAgLyogQ2hlY2sgdGhlIE5PUiBjb250cm9sbGVyIHN0YXRlICovCiAgICAgaG5vci0+U3RhdGUgPSBzdGF0ZTsKQEAgLTQ4MSw3ICs1NjEsNyBAQAogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTQ5Niw2ICs1NzYsNyBAQAogewogICB1aW50MzJfdCBkZXZpY2VhZGRyZXNzOwogICBIQUxfTk9SX1N0YXRlVHlwZURlZiBzdGF0ZTsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCiAgIC8qIENoZWNrIHRoZSBOT1IgY29udHJvbGxlciBzdGF0ZSAqLwogICBzdGF0ZSA9IGhub3ItPlN0YXRlOwpAQCAtNTMwLDEyICs2MTEsMjcgQEAKICAgICB9CiAKICAgICAvKiBTZW5kIHJlYWQgZGF0YSBjb21tYW5kICovCi0gICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1QpLCBOT1JfQ01EX0RBVEFfRklSU1QpOwotICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOwotICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwgTk9SX0NNRF9EQVRBX1JFQURfUkVTRVQpOworICAgIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCkKKyAgICB7CisgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7CisgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKKyAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwgTk9SX0NNRF9EQVRBX1JFQURfUkVTRVQpOworICAgIH0KKyAgICBlbHNlIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9JTlRFTF9TSEFSUF9FWFRfQ09NTUFORF9TRVQpCisgICAgeworICAgICAgTk9SX1dSSVRFKHBBZGRyZXNzLCBOT1JfQ01EX1JFQURfQVJSQVkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogUHJpbWFyeSBjb21tYW5kIHNldCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgICB9CiAKLSAgICAvKiBSZWFkIHRoZSBkYXRhICovCi0gICAgKnBEYXRhID0gKHVpbnQxNl90KSgqKF9fSU8gdWludDMyX3QgKilwQWRkcmVzcyk7CisgICAgaWYgKHN0YXR1cyAhPSBIQUxfRVJST1IpCisgICAgeworICAgICAgLyogUmVhZCB0aGUgZGF0YSAqLworICAgICAgKnBEYXRhID0gKHVpbnQxNl90KSgqKF9fSU8gdWludDMyX3QgKilwQWRkcmVzcyk7CisgICAgfQogCiAgICAgLyogQ2hlY2sgdGhlIE5PUiBjb250cm9sbGVyIHN0YXRlICovCiAgICAgaG5vci0+U3RhdGUgPSBzdGF0ZTsKQEAgLTU0OCw3ICs2NDQsNyBAQAogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTU2Miw2ICs2NTgsNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05PUl9Qcm9ncmFtKE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCB1aW50MzJfdCAqcEFkZHJlc3MsIHVpbnQxNl90ICpwRGF0YSkKIHsKICAgdWludDMyX3QgZGV2aWNlYWRkcmVzczsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCiAgIC8qIENoZWNrIHRoZSBOT1IgY29udHJvbGxlciBzdGF0ZSAqLwogICBpZiAoaG5vci0+U3RhdGUgPT0gSEFMX05PUl9TVEFURV9CVVNZKQpAQCAtNTk1LDEyICs2OTIsMjcgQEAKICAgICB9CiAKICAgICAvKiBTZW5kIHByb2dyYW0gZGF0YSBjb21tYW5kICovCi0gICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1QpLCBOT1JfQ01EX0RBVEFfRklSU1QpOwotICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOwotICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwgTk9SX0NNRF9EQVRBX1BST0dSQU0pOworICAgIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCkKKyAgICB7CisgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7CisgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKKyAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwgTk9SX0NNRF9EQVRBX1BST0dSQU0pOworICAgIH0KKyAgICBlbHNlIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9JTlRFTF9TSEFSUF9FWFRfQ09NTUFORF9TRVQpCisgICAgeworICAgICAgTk9SX1dSSVRFKHBBZGRyZXNzLCBOT1JfQ01EX1dPUkRfUFJPR1JBTSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBQcmltYXJ5IGNvbW1hbmQgc2V0IG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOworICAgIH0KIAotICAgIC8qIFdyaXRlIHRoZSBkYXRhICovCi0gICAgTk9SX1dSSVRFKHBBZGRyZXNzLCAqcERhdGEpOworICAgIGlmIChzdGF0dXMgIT0gSEFMX0VSUk9SKQorICAgIHsKKyAgICAgIC8qIFdyaXRlIHRoZSBkYXRhICovCisgICAgICBOT1JfV1JJVEUocEFkZHJlc3MsICpwRGF0YSk7CisgICAgfQogCiAgICAgLyogQ2hlY2sgdGhlIE5PUiBjb250cm9sbGVyIHN0YXRlICovCiAgICAgaG5vci0+U3RhdGUgPSBIQUxfTk9SX1NUQVRFX1JFQURZOwpAQCAtNjEzLDcgKzcyNSw3IEBACiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtNjI1LDExICs3MzcsMTMgQEAKICAgKiBAcGFyYW0gIHV3QnVmZmVyU2l6ZSAgbnVtYmVyIG9mIEhhbGYgd29yZCB0byByZWFkLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05PUl9SZWFkQnVmZmVyKE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCB1aW50MzJfdCB1d0FkZHJlc3MsIHVpbnQxNl90ICpwRGF0YSwgdWludDMyX3QgdXdCdWZmZXJTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05PUl9SZWFkQnVmZmVyKE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCB1aW50MzJfdCB1d0FkZHJlc3MsIHVpbnQxNl90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1d0J1ZmZlclNpemUpCiB7CiAgIHVpbnQzMl90IGRldmljZWFkZHJlc3MsIHNpemUgPSB1d0J1ZmZlclNpemUsIGFkZHJlc3MgPSB1d0FkZHJlc3M7CiAgIHVpbnQxNl90ICpkYXRhID0gcERhdGE7CiAgIEhBTF9OT1JfU3RhdGVUeXBlRGVmIHN0YXRlOworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKICAgLyogQ2hlY2sgdGhlIE5PUiBjb250cm9sbGVyIHN0YXRlICovCiAgIHN0YXRlID0gaG5vci0+U3RhdGU7CkBAIC02NjQsMTcgKzc3OCwzMiBAQAogICAgIH0KIAogICAgIC8qIFNlbmQgcmVhZCBkYXRhIGNvbW1hbmQgKi8KLSAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7Ci0gICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkQpLCBOT1JfQ01EX0RBVEFfUkVBRF9SRVNFVCk7Ci0KLSAgICAvKiBSZWFkIGJ1ZmZlciAqLwotICAgIHdoaWxlIChzaXplID4gMFUpCisgICAgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0FNRF9GVUpJVFNVX0NPTU1BTkRfU0VUKQogICAgIHsKLSAgICAgICpkYXRhID0gKihfX0lPIHVpbnQxNl90ICopYWRkcmVzczsKLSAgICAgIGRhdGErKzsKLSAgICAgIGFkZHJlc3MgKz0gMlU7Ci0gICAgICBzaXplLS07CisgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7CisgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKKyAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwgTk9SX0NNRF9EQVRBX1JFQURfUkVTRVQpOworICAgIH0KKyAgICBlbHNlIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9JTlRFTF9TSEFSUF9FWFRfQ09NTUFORF9TRVQpCisgICAgeworICAgICAgTk9SX1dSSVRFKGRldmljZWFkZHJlc3MsIE5PUl9DTURfUkVBRF9BUlJBWSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBQcmltYXJ5IGNvbW1hbmQgc2V0IG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOworICAgIH0KKworICAgIGlmIChzdGF0dXMgIT0gSEFMX0VSUk9SKQorICAgIHsKKyAgICAgIC8qIFJlYWQgYnVmZmVyICovCisgICAgICB3aGlsZSAoc2l6ZSA+IDBVKQorICAgICAgeworICAgICAgICAqZGF0YSA9ICooX19JTyB1aW50MTZfdCAqKWFkZHJlc3M7CisgICAgICAgIGRhdGErKzsKKyAgICAgICAgYWRkcmVzcyArPSAyVTsKKyAgICAgICAgc2l6ZS0tOworICAgICAgfQogICAgIH0KIAogICAgIC8qIENoZWNrIHRoZSBOT1IgY29udHJvbGxlciBzdGF0ZSAqLwpAQCAtNjg4LDcgKzgxNyw3IEBACiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtNzAwLDEyICs4MjksMTQgQEAKICAgKiBAcGFyYW0gIHV3QnVmZmVyU2l6ZSBTaXplIG9mIHRoZSBidWZmZXIgdG8gd3JpdGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfUHJvZ3JhbUJ1ZmZlcihOT1JfSGFuZGxlVHlwZURlZiAqaG5vciwgdWludDMyX3QgdXdBZGRyZXNzLCB1aW50MTZfdCAqcERhdGEsIHVpbnQzMl90IHV3QnVmZmVyU2l6ZSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfUHJvZ3JhbUJ1ZmZlcihOT1JfSGFuZGxlVHlwZURlZiAqaG5vciwgdWludDMyX3QgdXdBZGRyZXNzLCB1aW50MTZfdCAqcERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdXdCdWZmZXJTaXplKQogewogICB1aW50MTZfdCAqcF9jdXJyZW50YWRkcmVzczsKICAgY29uc3QgdWludDE2X3QgKnBfZW5kYWRkcmVzczsKICAgdWludDE2X3QgKmRhdGEgPSBwRGF0YTsKLSAgdWludDMyX3QgbGFzdGxvYWRlZGFkZHJlc3MsIGRldmljZWFkZHJlc3M7CisgIHVpbnQzMl90IGRldmljZWFkZHJlc3M7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAogICAvKiBDaGVjayB0aGUgTk9SIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhub3ItPlN0YXRlID09IEhBTF9OT1JfU1RBVEVfQlVTWSkKQEAgLTczOSwzMSArODcwLDUxIEBACiAgICAgfQogCiAgICAgLyogSW5pdGlhbGl6ZSB2YXJpYWJsZXMgKi8KLSAgICBwX2N1cnJlbnRhZGRyZXNzICA9ICh1aW50MTZfdCAqKSh1d0FkZHJlc3MpOwotICAgIHBfZW5kYWRkcmVzcyAgICAgID0gKGNvbnN0IHVpbnQxNl90ICopKHV3QWRkcmVzcyArICh1d0J1ZmZlclNpemUgLSAxVSkpOwotICAgIGxhc3Rsb2FkZWRhZGRyZXNzID0gdXdBZGRyZXNzOworICAgIHBfY3VycmVudGFkZHJlc3MgID0gKHVpbnQxNl90ICopKGRldmljZWFkZHJlc3MgKyB1d0FkZHJlc3MpOworICAgIHBfZW5kYWRkcmVzcyAgICAgID0gKHVpbnQxNl90ICopKGRldmljZWFkZHJlc3MgKyB1d0FkZHJlc3MgKyAoMlUqKHV3QnVmZmVyU2l6ZSAtIDFVKSkpOwogCi0gICAgLyogSXNzdWUgdW5sb2NrIGNvbW1hbmQgc2VxdWVuY2UgKi8KLSAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7Ci0KLSAgICAvKiBXcml0ZSBCdWZmZXIgTG9hZCBDb21tYW5kICovCi0gICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCB1d0FkZHJlc3MpLCBOT1JfQ01EX0RBVEFfQlVGRkVSX0FORF9QUk9HKTsKLSAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIHV3QWRkcmVzcyksICh1aW50MTZfdCkodXdCdWZmZXJTaXplIC0gMVUpKTsKLQotICAgIC8qIExvYWQgRGF0YSBpbnRvIE5PUiBCdWZmZXIgKi8KLSAgICB3aGlsZSAocF9jdXJyZW50YWRkcmVzcyA8PSBwX2VuZGFkZHJlc3MpCisgICAgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0FNRF9GVUpJVFNVX0NPTU1BTkRfU0VUKQogICAgIHsKLSAgICAgIC8qIFN0b3JlIGxhc3QgbG9hZGVkIGFkZHJlc3MgJiBkYXRhIHZhbHVlIChmb3IgcG9sbGluZykgKi8KLSAgICAgIGxhc3Rsb2FkZWRhZGRyZXNzID0gKHVpbnQzMl90KXBfY3VycmVudGFkZHJlc3M7CisgICAgICAvKiBJc3N1ZSB1bmxvY2sgY29tbWFuZCBzZXF1ZW5jZSAqLworICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1QpLCBOT1JfQ01EX0RBVEFfRklSU1QpOworICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CiAKLSAgICAgIE5PUl9XUklURShwX2N1cnJlbnRhZGRyZXNzLCAqZGF0YSk7Ci0KLSAgICAgIGRhdGErKzsKLSAgICAgIHBfY3VycmVudGFkZHJlc3MgKys7CisgICAgICAvKiBXcml0ZSBCdWZmZXIgTG9hZCBDb21tYW5kICovCisgICAgICBOT1JfV1JJVEUoKGRldmljZWFkZHJlc3MgKyB1d0FkZHJlc3MpLCBOT1JfQ01EX0RBVEFfQlVGRkVSX0FORF9QUk9HKTsKKyAgICAgIE5PUl9XUklURSgoZGV2aWNlYWRkcmVzcyArIHV3QWRkcmVzcyksICh1aW50MTZfdCkodXdCdWZmZXJTaXplIC0gMVUpKTsKKyAgICB9CisgICAgZWxzZSBpZiAoaG5vci0+Q29tbWFuZFNldCA9PSBOT1JfSU5URUxfU0hBUlBfRVhUX0NPTU1BTkRfU0VUKQorICAgIHsKKyAgICAgIC8qIFdyaXRlIEJ1ZmZlciBMb2FkIENvbW1hbmQgKi8KKyAgICAgIE5PUl9XUklURSgoZGV2aWNlYWRkcmVzcyArIHV3QWRkcmVzcyksIE5PUl9DTURfQlVGRkVSRURfUFJPR1JBTSk7CisgICAgICBOT1JfV1JJVEUoKGRldmljZWFkZHJlc3MgKyB1d0FkZHJlc3MpLCAodWludDE2X3QpKHV3QnVmZmVyU2l6ZSAtIDFVKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBQcmltYXJ5IGNvbW1hbmQgc2V0IG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgIH0KIAotICAgIE5PUl9XUklURSgodWludDMyX3QpKGxhc3Rsb2FkZWRhZGRyZXNzKSwgTk9SX0NNRF9EQVRBX0JVRkZFUl9BTkRfUFJPR19DT05GSVJNKTsKKyAgICBpZiAoc3RhdHVzICE9IEhBTF9FUlJPUikKKyAgICB7CisgICAgICAvKiBMb2FkIERhdGEgaW50byBOT1IgQnVmZmVyICovCisgICAgICB3aGlsZSAocF9jdXJyZW50YWRkcmVzcyA8PSBwX2VuZGFkZHJlc3MpCisgICAgICB7CisgICAgICAgIE5PUl9XUklURShwX2N1cnJlbnRhZGRyZXNzLCAqZGF0YSk7CisgICAgICAgIAorICAgICAgICBkYXRhKys7CisgICAgICAgIHBfY3VycmVudGFkZHJlc3MgKys7CisgICAgICB9CisKKyAgICAgIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCkKKyAgICAgIHsKKyAgICAgICAgTk9SX1dSSVRFKChkZXZpY2VhZGRyZXNzICsgdXdBZGRyZXNzKSwgTk9SX0NNRF9EQVRBX0JVRkZFUl9BTkRfUFJPR19DT05GSVJNKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgLyogPT4gaG5vci0+Q29tbWFuZFNldCA9PSBOT1JfSU5URUxfU0hBUlBfRVhUX0NPTU1BTkRfU0VUICovCisgICAgICB7CisgICAgICAgIE5PUl9XUklURSgoZGV2aWNlYWRkcmVzcyArIHV3QWRkcmVzcyksIE5PUl9DTURfQ09ORklSTSk7CisgICAgICB9CisgICAgfQogCiAgICAgLyogQ2hlY2sgdGhlIE5PUiBjb250cm9sbGVyIHN0YXRlICovCiAgICAgaG5vci0+U3RhdGUgPSBIQUxfTk9SX1NUQVRFX1JFQURZOwpAQCAtNzc2LDcgKzkyNyw3IEBACiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiAKIH0KIApAQCAtNzkxLDYgKzk0Miw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTk9SX0VyYXNlX0Jsb2NrKE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCB1aW50MzJfdCBCbG9ja0FkZHJlc3MsIHVpbnQzMl90IEFkZHJlc3MpCiB7CiAgIHVpbnQzMl90IGRldmljZWFkZHJlc3M7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAogICAvKiBDaGVjayB0aGUgTk9SIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhub3ItPlN0YXRlID09IEhBTF9OT1JfU1RBVEVfQlVTWSkKQEAgLTgyNCwxMiArOTc2LDMwIEBACiAgICAgfQogCiAgICAgLyogU2VuZCBibG9jayBlcmFzZSBjb21tYW5kIHNlcXVlbmNlICovCi0gICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1QpLCBOT1JfQ01EX0RBVEFfRklSU1QpOwotICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOwotICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwgTk9SX0NNRF9EQVRBX0NISVBfQkxPQ0tfRVJBU0VfVEhJUkQpOwotICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZPVVJUSCksIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX0ZPVVJUSCk7Ci0gICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklGVEgpLCBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9GSUZUSCk7Ci0gICAgTk9SX1dSSVRFKCh1aW50MzJfdCkoQmxvY2tBZGRyZXNzICsgQWRkcmVzcyksIE5PUl9DTURfREFUQV9CTE9DS19FUkFTRSk7CisgICAgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0FNRF9GVUpJVFNVX0NPTU1BTkRfU0VUKQorICAgIHsKKyAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUKSwgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOworICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkQpLAorICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX1RISVJEKTsKKyAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZPVVJUSCksCisgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NISVBfQkxPQ0tfRVJBU0VfRk9VUlRIKTsKKyAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJRlRIKSwKKyAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9GSUZUSCk7CisgICAgICBOT1JfV1JJVEUoKHVpbnQzMl90KShCbG9ja0FkZHJlc3MgKyBBZGRyZXNzKSwgTk9SX0NNRF9EQVRBX0JMT0NLX0VSQVNFKTsKKyAgICB9CisgICAgZWxzZSBpZiAoaG5vci0+Q29tbWFuZFNldCA9PSBOT1JfSU5URUxfU0hBUlBfRVhUX0NPTU1BTkRfU0VUKQorICAgIHsKKyAgICAgIE5PUl9XUklURSgoQmxvY2tBZGRyZXNzICsgQWRkcmVzcyksIE5PUl9DTURfQkxPQ0tfVU5MT0NLKTsKKyAgICAgIE5PUl9XUklURSgoQmxvY2tBZGRyZXNzICsgQWRkcmVzcyksIE5PUl9DTURfQ09ORklSTSk7CisgICAgICBOT1JfV1JJVEUoKEJsb2NrQWRkcmVzcyArIEFkZHJlc3MpLCBOT1JfQ01EX0JMT0NLX0VSQVNFKTsKKyAgICAgIE5PUl9XUklURSgoQmxvY2tBZGRyZXNzICsgQWRkcmVzcyksIE5PUl9DTURfQ09ORklSTSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBQcmltYXJ5IGNvbW1hbmQgc2V0IG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOworICAgIH0KIAogICAgIC8qIENoZWNrIHRoZSBOT1IgbWVtb3J5IHN0YXR1cyBhbmQgdXBkYXRlIHRoZSBjb250cm9sbGVyIHN0YXRlICovCiAgICAgaG5vci0+U3RhdGUgPSBIQUxfTk9SX1NUQVRFX1JFQURZOwpAQCAtODQyLDcgKzEwMTIsNyBAQAogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogCiB9CiAKQEAgLTg1Niw2ICsxMDI2LDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfRXJhc2VfQ2hpcChOT1JfSGFuZGxlVHlwZURlZiAqaG5vciwgdWludDMyX3QgQWRkcmVzcykKIHsKICAgdWludDMyX3QgZGV2aWNlYWRkcmVzczsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICBVTlVTRUQoQWRkcmVzcyk7CiAKICAgLyogQ2hlY2sgdGhlIE5PUiBjb250cm9sbGVyIHN0YXRlICovCkBAIC04OTAsMTIgKzEwNjEsMjMgQEAKICAgICB9CiAKICAgICAvKiBTZW5kIE5PUiBjaGlwIGVyYXNlIGNvbW1hbmQgc2VxdWVuY2UgKi8KLSAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7Ci0gICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkQpLCBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9USElSRCk7Ci0gICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRk9VUlRIKSwgTk9SX0NNRF9EQVRBX0NISVBfQkxPQ0tfRVJBU0VfRk9VUlRIKTsKLSAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSUZUSCksIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX0ZJRlRIKTsKLSAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TSVhUSCksIE5PUl9DTURfREFUQV9DSElQX0VSQVNFKTsKKyAgICBpZiAoaG5vci0+Q29tbWFuZFNldCA9PSBOT1JfQU1EX0ZVSklUU1VfQ09NTUFORF9TRVQpCisgICAgeworICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1QpLCBOT1JfQ01EX0RBVEFfRklSU1QpOworICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19USElSRCksCisgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NISVBfQkxPQ0tfRVJBU0VfVEhJUkQpOworICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRk9VUlRIKSwKKyAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9GT1VSVEgpOworICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklGVEgpLAorICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX0ZJRlRIKTsKKyAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NJWFRIKSwgTk9SX0NNRF9EQVRBX0NISVBfRVJBU0UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogUHJpbWFyeSBjb21tYW5kIHNldCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgICB9CiAKICAgICAvKiBDaGVjayB0aGUgTk9SIG1lbW9yeSBzdGF0dXMgYW5kIHVwZGF0ZSB0aGUgY29udHJvbGxlciBzdGF0ZSAqLwogICAgIGhub3ItPlN0YXRlID0gSEFMX05PUl9TVEFURV9SRUFEWTsKQEAgLTkwOCw3ICsxMDkwLDcgQEAKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC05OTAsMTIgKzExNzIsMTMgQEAKICAgKiBAcGFyYW0gcENhbGxiYWNrIDogcG9pbnRlciB0byB0aGUgQ2FsbGJhY2sgZnVuY3Rpb24KICAgKiBAcmV0dmFsIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05PUl9SZWdpc3RlckNhbGxiYWNrIChOT1JfSGFuZGxlVHlwZURlZiAqaG5vciwgSEFMX05PUl9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkLCBwTk9SX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTk9SX1JlZ2lzdGVyQ2FsbGJhY2soTk9SX0hhbmRsZVR5cGVEZWYgKmhub3IsIEhBTF9OT1JfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTk9SX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgSEFMX05PUl9TdGF0ZVR5cGVEZWYgc3RhdGU7CiAKLSAgaWYocENhbGxiYWNrID09IE5VTEwpCisgIGlmIChwQ2FsbGJhY2sgPT0gTlVMTCkKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KQEAgLTEwMDQsMjAgKzExODcsMjAgQEAKICAgX19IQUxfTE9DSyhobm9yKTsKIAogICBzdGF0ZSA9IGhub3ItPlN0YXRlOwotICBpZigoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVTRVQpIHx8IChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRCkpCisgIGlmICgoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVTRVQpIHx8IChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRCkpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSWQpCiAgICAgewotICAgIGNhc2UgSEFMX05PUl9NU1BfSU5JVF9DQl9JRCA6Ci0gICAgICBobm9yLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9OT1JfTVNQX0RFSU5JVF9DQl9JRCA6Ci0gICAgICBobm9yLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQgOgotICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX05PUl9NU1BfSU5JVF9DQl9JRCA6CisgICAgICAgIGhub3ItPk1zcEluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9OT1JfTVNQX0RFSU5JVF9DQl9JRCA6CisgICAgICAgIGhub3ItPk1zcERlSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLworICAgICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOworICAgICAgICBicmVhazsKICAgICB9CiAgIH0KICAgZWxzZQpAQCAtMTA0MSw3ICsxMjI0LDcgQEAKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX05PUl9NU1BfREVJTklUX0NCX0lEICAgICBOT1IgTXNwRGVJbml0IGNhbGxiYWNrIElECiAgICogQHJldHZhbCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfVW5SZWdpc3RlckNhbGxiYWNrIChOT1JfSGFuZGxlVHlwZURlZiAqaG5vciwgSEFMX05PUl9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05PUl9VblJlZ2lzdGVyQ2FsbGJhY2soTk9SX0hhbmRsZVR5cGVEZWYgKmhub3IsIEhBTF9OT1JfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJZCkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICBIQUxfTk9SX1N0YXRlVHlwZURlZiBzdGF0ZTsKQEAgLTEwNTAsMjAgKzEyMzMsMjAgQEAKICAgX19IQUxfTE9DSyhobm9yKTsKIAogICBzdGF0ZSA9IGhub3ItPlN0YXRlOwotICBpZigoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVTRVQpIHx8IChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRCkpCisgIGlmICgoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVTRVQpIHx8IChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRCkpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSWQpCiAgICAgewotICAgIGNhc2UgSEFMX05PUl9NU1BfSU5JVF9DQl9JRCA6Ci0gICAgICBobm9yLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfTk9SX01zcEluaXQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9OT1JfTVNQX0RFSU5JVF9DQl9JRCA6Ci0gICAgICBobm9yLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9OT1JfTXNwRGVJbml0OwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdCA6Ci0gICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLwotICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfTk9SX01TUF9JTklUX0NCX0lEIDoKKyAgICAgICAgaG5vci0+TXNwSW5pdENhbGxiYWNrID0gSEFMX05PUl9Nc3BJbml0OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX05PUl9NU1BfREVJTklUX0NCX0lEIDoKKyAgICAgICAgaG5vci0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfTk9SX01zcERlSW5pdDsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTEwODMsOCArMTI2Niw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgTk9SX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgTk9SIENvbnRyb2wgZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgbWFuYWdlbWVudCBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgIG1hbmFnZW1lbnQgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIE5PUiBDb250cm9sIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMTEwNiw3ICsxMjg5LDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfV3JpdGVPcGVyYXRpb25fRW5hYmxlKE5PUl9IYW5kbGVUeXBlRGVmICpobm9yKQogewogICAvKiBDaGVjayB0aGUgTk9SIGNvbnRyb2xsZXIgc3RhdGUgKi8KLSAgaWYoaG5vci0+U3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpCisgIGlmIChobm9yLT5TdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRCkKICAgewogICAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgICAgX19IQUxfTE9DSyhobm9yKTsKQEAgLTExNDAsNyArMTMyMyw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTk9SX1dyaXRlT3BlcmF0aW9uX0Rpc2FibGUoTk9SX0hhbmRsZVR5cGVEZWYgKmhub3IpCiB7CiAgIC8qIENoZWNrIHRoZSBOT1IgY29udHJvbGxlciBzdGF0ZSAqLwotICBpZihobm9yLT5TdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1JFQURZKQorICBpZiAoaG5vci0+U3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkKICAgewogICAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgICAgX19IQUxfTE9DSyhobm9yKTsKQEAgLTExNzAsOCArMTM1Myw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgTk9SX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQgTk9SIFN0YXRlIGZ1bmN0aW9ucwotICogIEBicmllZiAgIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCi0gKgorICAqICBAYnJpZWYgICBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgTk9SIFN0YXRlIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMTIxNyw0NSArMTQwMCw4NCBAQAogCiAgIC8qIEdldCB0aWNrICovCiAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7Ci0gIHdoaWxlICgoc3RhdHVzICE9IEhBTF9OT1JfU1RBVFVTX1NVQ0NFU1MpICYmIChzdGF0dXMgIT0gSEFMX05PUl9TVEFUVVNfVElNRU9VVCkpCisKKyAgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0FNRF9GVUpJVFNVX0NPTU1BTkRfU0VUKQogICB7Ci0gICAgLyogQ2hlY2sgZm9yIHRoZSBUaW1lb3V0ICovCi0gICAgaWYgKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkKKyAgICB3aGlsZSAoKHN0YXR1cyAhPSBIQUxfTk9SX1NUQVRVU19TVUNDRVNTKSAmJiAoc3RhdHVzICE9IEhBTF9OT1JfU1RBVFVTX1RJTUVPVVQpKQogICAgIHsKLSAgICAgIGlmICgoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gVGltZW91dCkgfHwgKFRpbWVvdXQgPT0gMFUpKQorICAgICAgLyogQ2hlY2sgZm9yIHRoZSBUaW1lb3V0ICovCisgICAgICBpZiAoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKQogICAgICAgewotICAgICAgICBzdGF0dXMgPSBIQUxfTk9SX1NUQVRVU19USU1FT1VUOworICAgICAgICBpZiAoKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFRpbWVvdXQpIHx8IChUaW1lb3V0ID09IDBVKSkKKyAgICAgICAgeworICAgICAgICAgIHN0YXR1cyA9IEhBTF9OT1JfU1RBVFVTX1RJTUVPVVQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogUmVhZCBOT1Igc3RhdHVzIHJlZ2lzdGVyIChEUTYgYW5kIERRNSkgKi8KKyAgICAgIHRtcFNSMSA9ICooX19JTyB1aW50MTZfdCAqKUFkZHJlc3M7CisgICAgICB0bXBTUjIgPSAqKF9fSU8gdWludDE2X3QgKilBZGRyZXNzOworCisgICAgICAvKiBJZiBEUTYgZGlkIG5vdCB0b2dnbGUgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIHRoZW4gcmV0dXJuIEhBTF9OT1JfU1RBVFVTX1NVQ0NFU1MgICovCisgICAgICBpZiAoKHRtcFNSMSAmIE5PUl9NQVNLX1NUQVRVU19EUTYpID09ICh0bXBTUjIgJiBOT1JfTUFTS19TVEFUVVNfRFE2KSkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIEhBTF9OT1JfU1RBVFVTX1NVQ0NFU1MgOworICAgICAgfQorCisgICAgICBpZiAoKHRtcFNSMSAmIE5PUl9NQVNLX1NUQVRVU19EUTUpID09IE5PUl9NQVNLX1NUQVRVU19EUTUpCisgICAgICB7CisgICAgICAgIHN0YXR1cyA9IEhBTF9OT1JfU1RBVFVTX09OR09JTkc7CisgICAgICB9CisKKyAgICAgIHRtcFNSMSA9ICooX19JTyB1aW50MTZfdCAqKUFkZHJlc3M7CisgICAgICB0bXBTUjIgPSAqKF9fSU8gdWludDE2X3QgKilBZGRyZXNzOworCisgICAgICAvKiBJZiBEUTYgZGlkIG5vdCB0b2dnbGUgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIHRoZW4gcmV0dXJuIEhBTF9OT1JfU1RBVFVTX1NVQ0NFU1MgICovCisgICAgICBpZiAoKHRtcFNSMSAmIE5PUl9NQVNLX1NUQVRVU19EUTYpID09ICh0bXBTUjIgJiBOT1JfTUFTS19TVEFUVVNfRFE2KSkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIEhBTF9OT1JfU1RBVFVTX1NVQ0NFU1M7CisgICAgICB9CisgICAgICBpZiAoKHRtcFNSMSAmIE5PUl9NQVNLX1NUQVRVU19EUTUpID09IE5PUl9NQVNLX1NUQVRVU19EUTUpCisgICAgICB7CisgICAgICAgIHJldHVybiBIQUxfTk9SX1NUQVRVU19FUlJPUjsKICAgICAgIH0KICAgICB9Ci0KLSAgICAvKiBSZWFkIE5PUiBzdGF0dXMgcmVnaXN0ZXIgKERRNiBhbmQgRFE1KSAqLwotICAgIHRtcFNSMSA9ICooX19JTyB1aW50MTZfdCAqKUFkZHJlc3M7Ci0gICAgdG1wU1IyID0gKihfX0lPIHVpbnQxNl90ICopQWRkcmVzczsKLQotICAgIC8qIElmIERRNiBkaWQgbm90IHRvZ2dsZSBiZXR3ZWVuIHRoZSB0d28gcmVhZHMgdGhlbiByZXR1cm4gSEFMX05PUl9TVEFUVVNfU1VDQ0VTUyAgKi8KLSAgICBpZiAoKHRtcFNSMSAmIE5PUl9NQVNLX1NUQVRVU19EUTYpID09ICh0bXBTUjIgJiBOT1JfTUFTS19TVEFUVVNfRFE2KSkKKyAgfQorICBlbHNlIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9JTlRFTF9TSEFSUF9FWFRfQ09NTUFORF9TRVQpCisgIHsKKyAgICBkbwogICAgIHsKLSAgICAgIHJldHVybiBIQUxfTk9SX1NUQVRVU19TVUNDRVNTIDsKLSAgICB9CisgICAgICBOT1JfV1JJVEUoQWRkcmVzcywgTk9SX0NNRF9SRUFEX1NUQVRVU19SRUcpOworICAgICAgdG1wU1IyID0gKihfX0lPIHVpbnQxNl90KikoQWRkcmVzcyk7CiAKLSAgICBpZiAoKHRtcFNSMSAmIE5PUl9NQVNLX1NUQVRVU19EUTUpID09IE5PUl9NQVNLX1NUQVRVU19EUTUpCi0gICAgewotICAgICAgc3RhdHVzID0gSEFMX05PUl9TVEFUVVNfT05HT0lORzsKLSAgICB9CisgICAgICAvKiBDaGVjayBmb3IgdGhlIFRpbWVvdXQgKi8KKyAgICAgIGlmKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkKKyAgICAgIHsKKyAgICAgICAgaWYgKCgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBUaW1lb3V0KSB8fCAoVGltZW91dCA9PSAwVSkpCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gSEFMX05PUl9TVEFUVVNfVElNRU9VVDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gd2hpbGUgKCh0bXBTUjIgJiBOT1JfTUFTS19TVEFUVVNfRFE3KSA9PSAwVSk7CiAKLSAgICB0bXBTUjEgPSAqKF9fSU8gdWludDE2X3QgKilBZGRyZXNzOwotICAgIHRtcFNSMiA9ICooX19JTyB1aW50MTZfdCAqKUFkZHJlc3M7Ci0KLSAgICAvKiBJZiBEUTYgZGlkIG5vdCB0b2dnbGUgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIHRoZW4gcmV0dXJuIEhBTF9OT1JfU1RBVFVTX1NVQ0NFU1MgICovCi0gICAgaWYgKCh0bXBTUjEgJiBOT1JfTUFTS19TVEFUVVNfRFE2KSA9PSAodG1wU1IyICYgTk9SX01BU0tfU1RBVFVTX0RRNikpCisgICAgTk9SX1dSSVRFKEFkZHJlc3MsIE5PUl9DTURfUkVBRF9TVEFUVVNfUkVHKTsKKyAgICB0bXBTUjEgPSAqKF9fSU8gdWludDE2X3QqKShBZGRyZXNzKTsKKyAgICBpZigodG1wU1IxICAmIChOT1JfTUFTS19TVEFUVVNfRFE1IHwgTk9SX01BU0tfU1RBVFVTX0RRNCkpICE9IDBVKQogICAgIHsKLSAgICAgIHJldHVybiBIQUxfTk9SX1NUQVRVU19TVUNDRVNTOworICAgICAgLyogQ2xlYXIgdGhlIFN0YXR1cyBSZWdpc3RlciAgKi8KKyAgICAgIE5PUl9XUklURShBZGRyZXNzLCBOT1JfQ01EX1JFQURfU1RBVFVTX1JFRyk7CisgICAgICBzdGF0dXMgPSBIQUxfTk9SX1NUQVRVU19FUlJPUjsKICAgICB9Ci0gICAgaWYgKCh0bXBTUjEgJiBOT1JfTUFTS19TVEFUVVNfRFE1KSA9PSBOT1JfTUFTS19TVEFUVVNfRFE1KQorICAgIGVsc2UKICAgICB7Ci0gICAgICByZXR1cm4gSEFMX05PUl9TVEFUVVNfRVJST1I7CisgICAgICBzdGF0dXMgPSBIQUxfTk9SX1NUQVRVU19TVUNDRVNTOwogICAgIH0KICAgfQorICBlbHNlCisgIHsKKyAgICAvKiBQcmltYXJ5IGNvbW1hbmQgc2V0IG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworICAgIHN0YXR1cyA9IEhBTF9OT1JfU1RBVFVTX0VSUk9SOworICB9CiAKICAgLyogUmV0dXJuIHRoZSBvcGVyYXRpb24gc3RhdHVzICovCiAgIHJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2hhbF9vcGFtcC5jIGIvU3JjL3N0bTMybDR4eF9oYWxfb3BhbXAuYwppbmRleCA5YmI5NGU0Li5jYTk0ODhkIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9vcGFtcC5jCisrKyBiL1NyYy9zdG0zMmw0eHhfaGFsX29wYW1wLmMKQEAgLTMwNywxNSArMzA3LDE1IEBACiAgICAgYXNzZXJ0X3BhcmFtKElTX09QQU1QX0ZVTkNUSU9OQUxfTk9STUFMTU9ERShob3BhbXAtPkluaXQuTW9kZSkpOwogICAgIGFzc2VydF9wYXJhbShJU19PUEFNUF9OT05JTlZFUlRJTkdfSU5QVVQoaG9wYW1wLT5Jbml0Lk5vbkludmVydGluZ0lucHV0KSk7CiAKKyNpZiAoVVNFX0hBTF9PUEFNUF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgICBpZihob3BhbXAtPlN0YXRlID09IEhBTF9PUEFNUF9TVEFURV9SRVNFVCkKICAgICB7Ci0jaWYgKFVTRV9IQUxfT1BBTVBfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgaWYoaG9wYW1wLT5Nc3BJbml0Q2FsbGJhY2sgPT0gTlVMTCkKLSAgICB7Ci0gICAgICBob3BhbXAtPk1zcEluaXRDYWxsYmFjayAgICAgICAgICAgICAgID0gSEFMX09QQU1QX01zcEluaXQ7CisgICAgICBpZihob3BhbXAtPk1zcEluaXRDYWxsYmFjayA9PSBOVUxMKQorICAgICAgeworICAgICAgICBob3BhbXAtPk1zcEluaXRDYWxsYmFjayAgICAgICAgICAgICAgID0gSEFMX09QQU1QX01zcEluaXQ7CisgICAgICB9CiAgICAgfQogI2VuZGlmIC8qIFVTRV9IQUxfT1BBTVBfUkVHSVNURVJfQ0FMTEJBQ0tTICovCi0gICAgfQogCiAgICAgaWYgKChob3BhbXAtPkluaXQuTW9kZSkgPT0gT1BBTVBfU1RBTkRBTE9ORV9NT0RFKQogICAgIHsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX29zcGkuYyBiL1NyYy9zdG0zMmw0eHhfaGFsX29zcGkuYwppbmRleCBkZTY3OTNkLi45OTc5MDUzIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9vc3BpLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfb3NwaS5jCkBAIC0yMywxNzkgKzIzLDIwMCBAQAogICAgICoqKiBJbml0aWFsaXphdGlvbiAqKioKICAgICA9PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQotICAgICAgKCMpIEFzIHByZXJlcXVpc2l0ZSwgZmlsbCBpbiB0aGUgSEFMX09TUElfTXNwSW5pdCgpIDoKLSAgICAgICAgKCsrKSBFbmFibGUgT2N0b1NQSSBhbmQgT2N0b1NQSU0gY2xvY2tzIGludGVyZmFjZSB3aXRoIF9fSEFMX1JDQ19PU1BJeF9DTEtfRU5BQkxFKCkuCi0gICAgICAgICgrKykgUmVzZXQgT2N0b1NQSSBQZXJpcGhlcmFsIHdpdGggX19IQUxfUkNDX09TUEl4X0ZPUkNFX1JFU0VUKCkgYW5kIF9fSEFMX1JDQ19PU1BJeF9SRUxFQVNFX1JFU0VUKCkuCi0gICAgICAgICgrKykgRW5hYmxlIHRoZSBjbG9ja3MgZm9yIHRoZSBPY3RvU1BJIEdQSU9TIHdpdGggX19IQUxfUkNDX0dQSU94X0NMS19FTkFCTEUoKS4KLSAgICAgICAgKCsrKSBDb25maWd1cmUgdGhlc2UgT2N0b1NQSSBwaW5zIGluIGFsdGVybmF0ZSBtb2RlIHVzaW5nIEhBTF9HUElPX0luaXQoKS4KLSAgICAgICAgKCsrKSBJZiBpbnRlcnJ1cHQgb3IgRE1BIG1vZGUgaXMgdXNlZCwgZW5hYmxlIGFuZCBjb25maWd1cmUgT2N0b1NQSSBnbG9iYWwKLSAgICAgICAgICAgIGludGVycnVwdCB3aXRoIEhBTF9OVklDX1NldFByaW9yaXR5KCkgYW5kIEhBTF9OVklDX0VuYWJsZUlSUSgpLgotICAgICAgICAoKyspIElmIERNQSBtb2RlIGlzIHVzZWQsIGVuYWJsZSB0aGUgY2xvY2tzIGZvciB0aGUgT2N0b1NQSSBETUEgY2hhbm5lbAotICAgICAgICAgICAgd2l0aCBfX0hBTF9SQ0NfRE1BeF9DTEtfRU5BQkxFKCksIGNvbmZpZ3VyZSBETUEgd2l0aCBIQUxfRE1BX0luaXQoKSwKLSAgICAgICAgICAgIGxpbmsgaXQgd2l0aCBPY3RvU1BJIGhhbmRsZSB1c2luZyBfX0hBTF9MSU5LRE1BKCksIGVuYWJsZSBhbmQgY29uZmlndXJlCi0gICAgICAgICAgICBETUEgY2hhbm5lbCBnbG9iYWwgaW50ZXJydXB0IHdpdGggSEFMX05WSUNfU2V0UHJpb3JpdHkoKSBhbmQgSEFMX05WSUNfRW5hYmxlSVJRKCkuCi0gICAgICAoIykgQ29uZmlndXJlIHRoZSBmaWZvIHRocmVzaG9sZCwgdGhlIGR1YWwtcXVhZCBtb2RlLCB0aGUgbWVtb3J5IHR5cGUsIHRoZQotICAgICAgICAgIGRldmljZSBzaXplLCB0aGUgQ1MgaGlnaCB0aW1lLCB0aGUgZnJlZSBydW5uaW5nIGNsb2NrLCB0aGUgY2xvY2sgbW9kZSwKLSAgICAgICAgICB0aGUgd3JhcCBzaXplLCB0aGUgY2xvY2sgcHJlc2NhbGVyLCB0aGUgc2FtcGxlIHNoaWZ0aW5nLCB0aGUgaG9sZCBkZWxheQotICAgICAgICAgIGFuZCB0aGUgQ1MgYm91bmRhcnkgdXNpbmcgdGhlIEhBTF9PU1BJX0luaXQoKSBmdW5jdGlvbi4KLSAgICAgICgjKSBXaGVuIHVzaW5nIEh5cGVyYnVzLCBjb25maWd1cmUgdGhlIFJXIHJlY292ZXJ5IHRpbWUsIHRoZSBhY2Nlc3MgdGltZSwKLSAgICAgICAgICB0aGUgd3JpdGUgbGF0ZW5jeSBhbmQgdGhlIGxhdGVuY3kgbW9kZSB1bnNpbmcgdGhlIEhBTF9PU1BJX0h5cGVyYnVzQ2ZnKCkKLSAgICAgICAgICBmdW5jdGlvbi4KKyAgICAgQXMgcHJlcmVxdWlzaXRlLCBmaWxsIGluIHRoZSBIQUxfT1NQSV9Nc3BJbml0KCkgOgorICAgICAoKykgRW5hYmxlIE9jdG9TUEkgYW5kIE9jdG9TUElNIGNsb2NrcyBpbnRlcmZhY2Ugd2l0aCBfX0hBTF9SQ0NfT1NQSXhfQ0xLX0VOQUJMRSgpLgorICAgICAoKykgUmVzZXQgT2N0b1NQSSBQZXJpcGhlcmFsIHdpdGggX19IQUxfUkNDX09TUEl4X0ZPUkNFX1JFU0VUKCkgYW5kIF9fSEFMX1JDQ19PU1BJeF9SRUxFQVNFX1JFU0VUKCkuCisgICAgICgrKSBFbmFibGUgdGhlIGNsb2NrcyBmb3IgdGhlIE9jdG9TUEkgR1BJT1Mgd2l0aCBfX0hBTF9SQ0NfR1BJT3hfQ0xLX0VOQUJMRSgpLgorICAgICAoKykgQ29uZmlndXJlIHRoZXNlIE9jdG9TUEkgcGlucyBpbiBhbHRlcm5hdGUgbW9kZSB1c2luZyBIQUxfR1BJT19Jbml0KCkuCisgICAgICgrKSBJZiBpbnRlcnJ1cHQgb3IgRE1BIG1vZGUgaXMgdXNlZCwgZW5hYmxlIGFuZCBjb25maWd1cmUgT2N0b1NQSSBnbG9iYWwKKyAgICAgICAgIGludGVycnVwdCB3aXRoIEhBTF9OVklDX1NldFByaW9yaXR5KCkgYW5kIEhBTF9OVklDX0VuYWJsZUlSUSgpLgorICAgICAoKykgSWYgRE1BIG1vZGUgaXMgdXNlZCwgZW5hYmxlIHRoZSBjbG9ja3MgZm9yIHRoZSBPY3RvU1BJIERNQSBjaGFubmVsCisgICAgICAgICB3aXRoIF9fSEFMX1JDQ19ETUF4X0NMS19FTkFCTEUoKSwgY29uZmlndXJlIERNQSB3aXRoIEhBTF9ETUFfSW5pdCgpLAorICAgICAgICAgbGluayBpdCB3aXRoIE9jdG9TUEkgaGFuZGxlIHVzaW5nIF9fSEFMX0xJTktETUEoKSwgZW5hYmxlIGFuZCBjb25maWd1cmUKKyAgICAgICAgIERNQSBjaGFubmVsIGdsb2JhbCBpbnRlcnJ1cHQgd2l0aCBIQUxfTlZJQ19TZXRQcmlvcml0eSgpIGFuZCBIQUxfTlZJQ19FbmFibGVJUlEoKS4KKyAgICBbLi5dCisgICAgIENvbmZpZ3VyZSB0aGUgZmlmbyB0aHJlc2hvbGQsIHRoZSBkdWFsLXF1YWQgbW9kZSwgdGhlIG1lbW9yeSB0eXBlLCB0aGUKKyAgICAgZGV2aWNlIHNpemUsIHRoZSBDUyBoaWdoIHRpbWUsIHRoZSBmcmVlIHJ1bm5pbmcgY2xvY2ssIHRoZSBjbG9jayBtb2RlLAorICAgICB0aGUgd3JhcCBzaXplLCB0aGUgY2xvY2sgcHJlc2NhbGVyLCB0aGUgc2FtcGxlIHNoaWZ0aW5nLCB0aGUgaG9sZCBkZWxheQorICAgICBhbmQgdGhlIENTIGJvdW5kYXJ5IHVzaW5nIHRoZSBIQUxfT1NQSV9Jbml0KCkgZnVuY3Rpb24uCisgICAgWy4uXQorICAgICBXaGVuIHVzaW5nIEh5cGVyYnVzLCBjb25maWd1cmUgdGhlIFJXIHJlY292ZXJ5IHRpbWUsIHRoZSBhY2Nlc3MgdGltZSwKKyAgICAgdGhlIHdyaXRlIGxhdGVuY3kgYW5kIHRoZSBsYXRlbmN5IG1vZGUgdW5zaW5nIHRoZSBIQUxfT1NQSV9IeXBlcmJ1c0NmZygpCisgICAgIGZ1bmN0aW9uLgogCiAgICAgKioqIEluZGlyZWN0IGZ1bmN0aW9uYWwgbW9kZSAqKioKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0KLSAgICAgICgjKSBJbiByZWd1bGFyIG1vZGUsIGNvbmZpZ3VyZSB0aGUgY29tbWFuZCBzZXF1ZW5jZSB1c2luZyB0aGUgSEFMX09TUElfQ29tbWFuZCgpCi0gICAgICAgICAgb3IgSEFMX09TUElfQ29tbWFuZF9JVCgpIGZ1bmN0aW9ucyA6Ci0gICAgICAgICAoKyspIEluc3RydWN0aW9uIHBoYXNlIDogdGhlIG1vZGUgdXNlZCBhbmQgaWYgcHJlc2VudCB0aGUgc2l6ZSwgdGhlIGluc3RydWN0aW9uCi0gICAgICAgICAgICAgIG9wY29kZSBhbmQgdGhlIERUUiBtb2RlLgotICAgICAgICAgKCsrKSBBZGRyZXNzIHBoYXNlIDogdGhlIG1vZGUgdXNlZCBhbmQgaWYgcHJlc2VudCB0aGUgc2l6ZSwgdGhlIGFkZHJlc3MKLSAgICAgICAgICAgICAgdmFsdWUgYW5kIHRoZSBEVFIgbW9kZS4KLSAgICAgICAgICgrKykgQWx0ZXJuYXRlLWJ5dGVzIHBoYXNlIDogdGhlIG1vZGUgdXNlZCBhbmQgaWYgcHJlc2VudCB0aGUgc2l6ZSwgdGhlCi0gICAgICAgICAgICAgIGFsdGVybmF0ZSBieXRlcyB2YWx1ZXMgYW5kIHRoZSBEVFIgbW9kZS4KLSAgICAgICAgICgrKykgRHVtbXktY3ljbGVzIHBoYXNlIDogdGhlIG51bWJlciBvZiBkdW1teSBjeWNsZXMgKG1vZGUgdXNlZCBpcyBzYW1lIGFzIGRhdGEgcGhhc2UpLgotICAgICAgICAgKCsrKSBEYXRhIHBoYXNlIDogdGhlIG1vZGUgdXNlZCBhbmQgaWYgcHJlc2VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFuZCB0aGUgRFRSIG1vZGUuCi0gICAgICAgICAoKyspIERhdGEgc3Ryb2JlIChEUVMpIG1vZGUgOiB0aGUgYWN0aXZhdGlvbiAob3Igbm90KSBvZiB0aGlzIG1vZGUKLSAgICAgICAgICgrKykgU2VuZGluZyBJbnN0cnVjdGlvbiBPbmx5IE9uY2UgKFNJT08pIG1vZGUgOiB0aGUgYWN0aXZhdGlvbiAob3Igbm90KSBvZiB0aGlzIG1vZGUuCi0gICAgICAgICAoKyspIEZsYXNoIGlkZW50aWZpZXIgOiBpbiBkdWFsLXF1YWQgbW9kZSwgaW5kaWNhdGVzIHdoaWNoIGZsYXNoIGlzIGNvbmNlcm5lZAotICAgICAgICAgKCsrKSBPcGVyYXRpb24gdHlwZSA6IGFsd2F5cyBjb21tb24gY29uZmlndXJhdGlvbgotICAgICAgKCMpIEluIEh5cGVyYnVzIG1vZGUsIGNvbmZpZ3VyZSB0aGUgY29tbWFuZCBzZXF1ZW5jZSB1c2luZyB0aGUgSEFMX09TUElfSHlwZXJidXNDbWQoKQotICAgICAgICAgIGZ1bmN0aW9uIDoKLSAgICAgICAgICgrKykgQWRkcmVzcyBzcGFjZSA6IGluZGljYXRlIGlmIHRoZSBhY2Nlc3Mgd2lsbCBiZSBkb25lIGluIHJlZ2lzdGVyIG9yIG1lbW9yeQotICAgICAgICAgKCsrKSBBZGRyZXNzIHNpemUKLSAgICAgICAgICgrKykgTnVtYmVyIG9mIGRhdGEKLSAgICAgICAgICgrKykgRGF0YSBzdHJvYmUgKERRUykgbW9kZSA6IHRoZSBhY3RpdmF0aW9uIChvciBub3QpIG9mIHRoaXMgbW9kZQotICAgICAgKCMpIElmIG5vIGRhdGEgaXMgcmVxdWlyZWQgZm9yIHRoZSBjb21tYW5kIChvbmx5IGZvciByZWd1bGFyIG1vZGUsIG5vdCBmb3IKLSAgICAgICAgICBIeXBlcmJ1cyBtb2RlKSwgaXQgaXMgc2VudCBkaXJlY3RseSB0byB0aGUgbWVtb3J5IDoKLSAgICAgICAgICgrKykgSW4gcG9sbGluZyBtb2RlLCB0aGUgb3V0cHV0IG9mIHRoZSBmdW5jdGlvbiBpcyBkb25lIHdoZW4gdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLgotICAgICAgICAgKCsrKSBJbiBpbnRlcnJ1cHQgbW9kZSwgSEFMX09TUElfQ21kQ3BsdENhbGxiYWNrKCkgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUuCi0gICAgICAoIykgRm9yIHRoZSBpbmRpcmVjdCB3cml0ZSBtb2RlLCB1c2UgSEFMX09TUElfVHJhbnNtaXQoKSwgSEFMX09TUElfVHJhbnNtaXRfRE1BKCkgb3IKLSAgICAgICAgICBIQUxfT1NQSV9UcmFuc21pdF9JVCgpIGFmdGVyIHRoZSBjb21tYW5kIGNvbmZpZ3VyYXRpb24gOgotICAgICAgICAgKCsrKSBJbiBwb2xsaW5nIG1vZGUsIHRoZSBvdXRwdXQgb2YgdGhlIGZ1bmN0aW9uIGlzIGRvbmUgd2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUuCi0gICAgICAgICAoKyspIEluIGludGVycnVwdCBtb2RlLCBIQUxfT1NQSV9GaWZvVGhyZXNob2xkQ2FsbGJhY2soKSB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBmaWZvIHRocmVzaG9sZAotICAgICAgICAgICAgIGlzIHJlYWNoZWQgYW5kIEhBTF9PU1BJX1R4Q3BsdENhbGxiYWNrKCkgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUuCi0gICAgICAgICAoKyspIEluIERNQSBtb2RlLCBIQUxfT1NQSV9UeEhhbGZDcGx0Q2FsbGJhY2soKSB3aWxsIGJlIGNhbGxlZCBhdCB0aGUgaGFsZiB0cmFuc2ZlciBhbmQKLSAgICAgICAgICAgICBIQUxfT1NQSV9UeENwbHRDYWxsYmFjaygpIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLgotICAgICAgKCMpIEZvciB0aGUgaW5kaXJlY3QgcmVhZCBtb2RlLCB1c2UgSEFMX09TUElfUmVjZWl2ZSgpLCBIQUxfT1NQSV9SZWNlaXZlX0RNQSgpIG9yCi0gICAgICAgICAgSEFMX09TUElfUmVjZWl2ZV9JVCgpIGFmdGVyIHRoZSBjb21tYW5kIGNvbmZpZ3VyYXRpb24gOgotICAgICAgICAgKCsrKSBJbiBwb2xsaW5nIG1vZGUsIHRoZSBvdXRwdXQgb2YgdGhlIGZ1bmN0aW9uIGlzIGRvbmUgd2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUuCi0gICAgICAgICAoKyspIEluIGludGVycnVwdCBtb2RlLCBIQUxfT1NQSV9GaWZvVGhyZXNob2xkQ2FsbGJhY2soKSB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBmaWZvIHRocmVzaG9sZAotICAgICAgICAgICAgIGlzIHJlYWNoZWQgYW5kIEhBTF9PU1BJX1J4Q3BsdENhbGxiYWNrKCkgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUuCi0gICAgICAgICAoKyspIEluIERNQSBtb2RlLCBIQUxfT1NQSV9SeEhhbGZDcGx0Q2FsbGJhY2soKSB3aWxsIGJlIGNhbGxlZCBhdCB0aGUgaGFsZiB0cmFuc2ZlciBhbmQKLSAgICAgICAgICAgICBIQUxfT1NQSV9SeENwbHRDYWxsYmFjaygpIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLgorICAgICBJbiByZWd1bGFyIG1vZGUsIGNvbmZpZ3VyZSB0aGUgY29tbWFuZCBzZXF1ZW5jZSB1c2luZyB0aGUgSEFMX09TUElfQ29tbWFuZCgpCisgICAgIG9yIEhBTF9PU1BJX0NvbW1hbmRfSVQoKSBmdW5jdGlvbnMgOgorICAgICAoKykgSW5zdHJ1Y3Rpb24gcGhhc2UgOiB0aGUgbW9kZSB1c2VkIGFuZCBpZiBwcmVzZW50IHRoZSBzaXplLCB0aGUgaW5zdHJ1Y3Rpb24KKyAgICAgICAgIG9wY29kZSBhbmQgdGhlIERUUiBtb2RlLgorICAgICAoKykgQWRkcmVzcyBwaGFzZSA6IHRoZSBtb2RlIHVzZWQgYW5kIGlmIHByZXNlbnQgdGhlIHNpemUsIHRoZSBhZGRyZXNzCisgICAgICAgICB2YWx1ZSBhbmQgdGhlIERUUiBtb2RlLgorICAgICAoKykgQWx0ZXJuYXRlLWJ5dGVzIHBoYXNlIDogdGhlIG1vZGUgdXNlZCBhbmQgaWYgcHJlc2VudCB0aGUgc2l6ZSwgdGhlCisgICAgICAgICBhbHRlcm5hdGUgYnl0ZXMgdmFsdWVzIGFuZCB0aGUgRFRSIG1vZGUuCisgICAgICgrKSBEdW1teS1jeWNsZXMgcGhhc2UgOiB0aGUgbnVtYmVyIG9mIGR1bW15IGN5Y2xlcyAobW9kZSB1c2VkIGlzIHNhbWUgYXMgZGF0YSBwaGFzZSkuCisgICAgICgrKSBEYXRhIHBoYXNlIDogdGhlIG1vZGUgdXNlZCBhbmQgaWYgcHJlc2VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFuZCB0aGUgRFRSIG1vZGUuCisgICAgICgrKSBEYXRhIHN0cm9iZSAoRFFTKSBtb2RlIDogdGhlIGFjdGl2YXRpb24gKG9yIG5vdCkgb2YgdGhpcyBtb2RlCisgICAgICgrKSBTZW5kaW5nIEluc3RydWN0aW9uIE9ubHkgT25jZSAoU0lPTykgbW9kZSA6IHRoZSBhY3RpdmF0aW9uIChvciBub3QpIG9mIHRoaXMgbW9kZS4KKyAgICAgKCspIEZsYXNoIGlkZW50aWZpZXIgOiBpbiBkdWFsLXF1YWQgbW9kZSwgaW5kaWNhdGVzIHdoaWNoIGZsYXNoIGlzIGNvbmNlcm5lZAorICAgICAoKykgT3BlcmF0aW9uIHR5cGUgOiBhbHdheXMgY29tbW9uIGNvbmZpZ3VyYXRpb24KKyAgICBbLi5dCisgICAgIEluIEh5cGVyYnVzIG1vZGUsIGNvbmZpZ3VyZSB0aGUgY29tbWFuZCBzZXF1ZW5jZSB1c2luZyB0aGUgSEFMX09TUElfSHlwZXJidXNDbWQoKQorICAgICBmdW5jdGlvbiA6CisgICAgICgrKSBBZGRyZXNzIHNwYWNlIDogaW5kaWNhdGUgaWYgdGhlIGFjY2VzcyB3aWxsIGJlIGRvbmUgaW4gcmVnaXN0ZXIgb3IgbWVtb3J5CisgICAgICgrKSBBZGRyZXNzIHNpemUKKyAgICAgKCspIE51bWJlciBvZiBkYXRhCisgICAgICgrKSBEYXRhIHN0cm9iZSAoRFFTKSBtb2RlIDogdGhlIGFjdGl2YXRpb24gKG9yIG5vdCkgb2YgdGhpcyBtb2RlCisgICAgWy4uXQorICAgICBJZiBubyBkYXRhIGlzIHJlcXVpcmVkIGZvciB0aGUgY29tbWFuZCAob25seSBmb3IgcmVndWxhciBtb2RlLCBub3QgZm9yCisgICAgIEh5cGVyYnVzIG1vZGUpLCBpdCBpcyBzZW50IGRpcmVjdGx5IHRvIHRoZSBtZW1vcnkgOgorICAgICAoKykgSW4gcG9sbGluZyBtb2RlLCB0aGUgb3V0cHV0IG9mIHRoZSBmdW5jdGlvbiBpcyBkb25lIHdoZW4gdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLgorICAgICAoKykgSW4gaW50ZXJydXB0IG1vZGUsIEhBTF9PU1BJX0NtZENwbHRDYWxsYmFjaygpIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLgorICAgIFsuLl0KKyAgICAgRm9yIHRoZSBpbmRpcmVjdCB3cml0ZSBtb2RlLCB1c2UgSEFMX09TUElfVHJhbnNtaXQoKSwgSEFMX09TUElfVHJhbnNtaXRfRE1BKCkgb3IKKyAgICAgSEFMX09TUElfVHJhbnNtaXRfSVQoKSBhZnRlciB0aGUgY29tbWFuZCBjb25maWd1cmF0aW9uIDoKKyAgICAgKCspIEluIHBvbGxpbmcgbW9kZSwgdGhlIG91dHB1dCBvZiB0aGUgZnVuY3Rpb24gaXMgZG9uZSB3aGVuIHRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZS4KKyAgICAgKCspIEluIGludGVycnVwdCBtb2RlLCBIQUxfT1NQSV9GaWZvVGhyZXNob2xkQ2FsbGJhY2soKSB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBmaWZvIHRocmVzaG9sZAorICAgICAgICAgaXMgcmVhY2hlZCBhbmQgSEFMX09TUElfVHhDcGx0Q2FsbGJhY2soKSB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZS4KKyAgICAgKCspIEluIERNQSBtb2RlLCBIQUxfT1NQSV9UeEhhbGZDcGx0Q2FsbGJhY2soKSB3aWxsIGJlIGNhbGxlZCBhdCB0aGUgaGFsZiB0cmFuc2ZlciBhbmQKKyAgICAgICAgIEhBTF9PU1BJX1R4Q3BsdENhbGxiYWNrKCkgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUuCisgICAgWy4uXQorICAgICBGb3IgdGhlIGluZGlyZWN0IHJlYWQgbW9kZSwgdXNlIEhBTF9PU1BJX1JlY2VpdmUoKSwgSEFMX09TUElfUmVjZWl2ZV9ETUEoKSBvcgorICAgICBIQUxfT1NQSV9SZWNlaXZlX0lUKCkgYWZ0ZXIgdGhlIGNvbW1hbmQgY29uZmlndXJhdGlvbiA6CisgICAgICgrKSBJbiBwb2xsaW5nIG1vZGUsIHRoZSBvdXRwdXQgb2YgdGhlIGZ1bmN0aW9uIGlzIGRvbmUgd2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUuCisgICAgICgrKSBJbiBpbnRlcnJ1cHQgbW9kZSwgSEFMX09TUElfRmlmb1RocmVzaG9sZENhbGxiYWNrKCkgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgZmlmbyB0aHJlc2hvbGQKKyAgICAgICAgIGlzIHJlYWNoZWQgYW5kIEhBTF9PU1BJX1J4Q3BsdENhbGxiYWNrKCkgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUuCisgICAgICgrKSBJbiBETUEgbW9kZSwgSEFMX09TUElfUnhIYWxmQ3BsdENhbGxiYWNrKCkgd2lsbCBiZSBjYWxsZWQgYXQgdGhlIGhhbGYgdHJhbnNmZXIgYW5kCisgICAgICAgICBIQUxfT1NQSV9SeENwbHRDYWxsYmFjaygpIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLgogCiAgICAgKioqIEF1dG8tcG9sbGluZyBmdW5jdGlvbmFsIG1vZGUgKioqCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQotICAgICAgKCMpIENvbmZpZ3VyZSB0aGUgY29tbWFuZCBzZXF1ZW5jZSBieSB0aGUgc2FtZSB3YXkgdGhhbiB0aGUgaW5kaXJlY3QgbW9kZQotICAgICAgKCMpIENvbmZpZ3VyZSB0aGUgYXV0by1wb2xsaW5nIGZ1bmN0aW9uYWwgbW9kZSB1c2luZyB0aGUgSEFMX09TUElfQXV0b1BvbGxpbmcoKQotICAgICAgICAgIG9yIEhBTF9PU1BJX0F1dG9Qb2xsaW5nX0lUKCkgZnVuY3Rpb25zIDoKLSAgICAgICAgICgrKykgVGhlIHNpemUgb2YgdGhlIHN0YXR1cyBieXRlcywgdGhlIG1hdGNoIHZhbHVlLCB0aGUgbWFzayB1c2VkLCB0aGUgbWF0Y2ggbW9kZSAoT1IvQU5EKSwKLSAgICAgICAgICAgICB0aGUgcG9sbGluZyBpbnRlcnZhbCBhbmQgdGhlIGF1dG9tYXRpYyBzdG9wIGFjdGl2YXRpb24uCi0gICAgICAoIykgQWZ0ZXIgdGhlIGNvbmZpZ3VyYXRpb24gOgotICAgICAgICAgKCsrKSBJbiBwb2xsaW5nIG1vZGUsIHRoZSBvdXRwdXQgb2YgdGhlIGZ1bmN0aW9uIGlzIGRvbmUgd2hlbiB0aGUgc3RhdHVzIG1hdGNoIGlzIHJlYWNoZWQuIFRoZQotICAgICAgICAgICAgIGF1dG9tYXRpYyBzdG9wIGlzIGFjdGl2YXRlZCB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wLgotICAgICAgICAgKCsrKSBJbiBpbnRlcnJ1cHQgbW9kZSwgSEFMX09TUElfU3RhdHVzTWF0Y2hDYWxsYmFjaygpIHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZSB0aGUgc3RhdHVzIG1hdGNoIGlzIHJlYWNoZWQuCisgICAgIENvbmZpZ3VyZSB0aGUgY29tbWFuZCBzZXF1ZW5jZSBieSB0aGUgc2FtZSB3YXkgdGhhbiB0aGUgaW5kaXJlY3QgbW9kZQorICAgIFsuLl0KKyAgICAgQ29uZmlndXJlIHRoZSBhdXRvLXBvbGxpbmcgZnVuY3Rpb25hbCBtb2RlIHVzaW5nIHRoZSBIQUxfT1NQSV9BdXRvUG9sbGluZygpCisgICAgIG9yIEhBTF9PU1BJX0F1dG9Qb2xsaW5nX0lUKCkgZnVuY3Rpb25zIDoKKyAgICAgKCspIFRoZSBzaXplIG9mIHRoZSBzdGF0dXMgYnl0ZXMsIHRoZSBtYXRjaCB2YWx1ZSwgdGhlIG1hc2sgdXNlZCwgdGhlIG1hdGNoIG1vZGUgKE9SL0FORCksCisgICAgICAgICB0aGUgcG9sbGluZyBpbnRlcnZhbCBhbmQgdGhlIGF1dG9tYXRpYyBzdG9wIGFjdGl2YXRpb24uCisgICAgWy4uXQorICAgICBBZnRlciB0aGUgY29uZmlndXJhdGlvbiA6CisgICAgICgrKSBJbiBwb2xsaW5nIG1vZGUsIHRoZSBvdXRwdXQgb2YgdGhlIGZ1bmN0aW9uIGlzIGRvbmUgd2hlbiB0aGUgc3RhdHVzIG1hdGNoIGlzIHJlYWNoZWQuIFRoZQorICAgICAgICAgYXV0b21hdGljIHN0b3AgaXMgYWN0aXZhdGVkIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3AuCisgICAgICgrKSBJbiBpbnRlcnJ1cHQgbW9kZSwgSEFMX09TUElfU3RhdHVzTWF0Y2hDYWxsYmFjaygpIHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZSB0aGUgc3RhdHVzIG1hdGNoIGlzIHJlYWNoZWQuCiAKICAgICAqKiogTWVtb3J5LW1hcHBlZCBmdW5jdGlvbmFsIG1vZGUgKioqCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0KLSAgICAgICgjKSBDb25maWd1cmUgdGhlIGNvbW1hbmQgc2VxdWVuY2UgYnkgdGhlIHNhbWUgd2F5IHRoYW4gdGhlIGluZGlyZWN0IG1vZGUgZXhjZXB0Ci0gICAgICAgICAgZm9yIHRoZSBvcGVyYXRpb24gdHlwZSBpbiByZWd1bGFyIG1vZGUgOgotICAgICAgICAgKCsrKSBPcGVyYXRpb24gdHlwZSBlcXVhbHMgdG8gcmVhZCBjb25maWd1cmF0aW9uIDogdGhlIGNvbW1hbmQgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICBhcHBsaWVzIHRvIHJlYWQgYWNjZXNzIGluIG1lbW9yeS1tYXBwZWQgbW9kZQotICAgICAgICAgKCsrKSBPcGVyYXRpb24gdHlwZSBlcXVhbHMgdG8gd3JpdGUgY29uZmlndXJhdGlvbiA6IHRoZSBjb21tYW5kIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgYXBwbGllcyB0byB3cml0ZSBhY2Nlc3MgaW4gbWVtb3J5LW1hcHBlZCBtb2RlCi0gICAgICAgICAoKyspIEJvdGggcmVhZCBhbmQgd3JpdGUgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkIGJlZm9yZSBhY3RpdmF0aW5nCi0gICAgICAgICAgICAgIG1lbW9yeS1tYXBwZWQgbW9kZQotICAgICAgKCMpIENvbmZpZ3VyZSB0aGUgbWVtb3J5LW1hcHBlZCBmdW5jdGlvbmFsIG1vZGUgdXNpbmcgdGhlIEhBTF9PU1BJX01lbW9yeU1hcHBlZCgpCi0gICAgICAgICAgZnVuY3Rpb25zIDoKLSAgICAgICAgICgrKykgVGhlIHRpbWVvdXQgYWN0aXZhdGlvbiBhbmQgdGhlIHRpbWVvdXQgcGVyaW9kLgotICAgICAgKCMpIEFmdGVyIHRoZSBjb25maWd1cmF0aW9uLCB0aGUgT2N0b1NQSSB3aWxsIGJlIHVzZWQgYXMgc29vbiBhcyBhbiBhY2Nlc3Mgb24gdGhlIEFIQiBpcyBkb25lIG9uCi0gICAgICAgICAgdGhlIGFkZHJlc3MgcmFuZ2UuIEhBTF9PU1BJX1RpbWVPdXRDYWxsYmFjaygpIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHRpbWVvdXQgZXhwaXJlcy4KKyAgICAgQ29uZmlndXJlIHRoZSBjb21tYW5kIHNlcXVlbmNlIGJ5IHRoZSBzYW1lIHdheSB0aGFuIHRoZSBpbmRpcmVjdCBtb2RlIGV4Y2VwdAorICAgICBmb3IgdGhlIG9wZXJhdGlvbiB0eXBlIGluIHJlZ3VsYXIgbW9kZSA6CisgICAgICgrKSBPcGVyYXRpb24gdHlwZSBlcXVhbHMgdG8gcmVhZCBjb25maWd1cmF0aW9uIDogdGhlIGNvbW1hbmQgY29uZmlndXJhdGlvbgorICAgICAgICAgYXBwbGllcyB0byByZWFkIGFjY2VzcyBpbiBtZW1vcnktbWFwcGVkIG1vZGUKKyAgICAgKCspIE9wZXJhdGlvbiB0eXBlIGVxdWFscyB0byB3cml0ZSBjb25maWd1cmF0aW9uIDogdGhlIGNvbW1hbmQgY29uZmlndXJhdGlvbgorICAgICAgICAgYXBwbGllcyB0byB3cml0ZSBhY2Nlc3MgaW4gbWVtb3J5LW1hcHBlZCBtb2RlCisgICAgICgrKSBCb3RoIHJlYWQgYW5kIHdyaXRlIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIHBlcmZvcm1lZCBiZWZvcmUgYWN0aXZhdGluZworICAgICAgICAgbWVtb3J5LW1hcHBlZCBtb2RlCisgICAgWy4uXQorICAgICBDb25maWd1cmUgdGhlIG1lbW9yeS1tYXBwZWQgZnVuY3Rpb25hbCBtb2RlIHVzaW5nIHRoZSBIQUxfT1NQSV9NZW1vcnlNYXBwZWQoKQorICAgICBmdW5jdGlvbnMgOgorICAgICAoKykgVGhlIHRpbWVvdXQgYWN0aXZhdGlvbiBhbmQgdGhlIHRpbWVvdXQgcGVyaW9kLgorICAgIFsuLl0KKyAgICAgQWZ0ZXIgdGhlIGNvbmZpZ3VyYXRpb24sIHRoZSBPY3RvU1BJIHdpbGwgYmUgdXNlZCBhcyBzb29uIGFzIGFuIGFjY2VzcyBvbiB0aGUgQUhCIGlzIGRvbmUgb24KKyAgICAgdGhlIGFkZHJlc3MgcmFuZ2UuIEhBTF9PU1BJX1RpbWVPdXRDYWxsYmFjaygpIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHRpbWVvdXQgZXhwaXJlcy4KIAogICAgICoqKiBFcnJvcnMgbWFuYWdlbWVudCBhbmQgYWJvcnQgZnVuY3Rpb25hbGl0eSAqKioKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQotICAgICAgKCMpIEhBTF9PU1BJX0dldEVycm9yKCkgZnVuY3Rpb24gZ2l2ZXMgdGhlIGVycm9yIHJhaXNlZCBkdXJpbmcgdGhlIGxhc3Qgb3BlcmF0aW9uLgotICAgICAgKCMpIEhBTF9PU1BJX0Fib3J0KCkgYW5kIEhBTF9PU1BJX0Fib3J0SVQoKSBmdW5jdGlvbnMgYWJvcnRzIGFueSBvbi1nb2luZyBvcGVyYXRpb24gYW5kCi0gICAgICAgICAgZmx1c2hlcyB0aGUgZmlmbyA6Ci0gICAgICAgICAoKyspIEluIHBvbGxpbmcgbW9kZSwgdGhlIG91dHB1dCBvZiB0aGUgZnVuY3Rpb24gaXMgZG9uZSB3aGVuIHRoZSB0cmFuc2ZlcgotICAgICAgICAgICAgICBjb21wbGV0ZSBiaXQgaXMgc2V0IGFuZCB0aGUgYnVzeSBiaXQgY2xlYXJlZC4KLSAgICAgICAgICgrKykgSW4gaW50ZXJydXB0IG1vZGUsIEhBTF9PU1BJX0Fib3J0Q3BsdENhbGxiYWNrKCkgd2lsbCBiZSBjYWxsZWQgd2hlbgotICAgICAgICAgICAgICB0aGUgdHJhbnNmZXIgY29tcGxldGUgYml0IGlzIHNldC4KKyAgICAgSEFMX09TUElfR2V0RXJyb3IoKSBmdW5jdGlvbiBnaXZlcyB0aGUgZXJyb3IgcmFpc2VkIGR1cmluZyB0aGUgbGFzdCBvcGVyYXRpb24uCisgICAgWy4uXQorICAgICBIQUxfT1NQSV9BYm9ydCgpIGFuZCBIQUxfT1NQSV9BYm9ydElUKCkgZnVuY3Rpb25zIGFib3J0cyBhbnkgb24tZ29pbmcgb3BlcmF0aW9uIGFuZAorICAgICBmbHVzaGVzIHRoZSBmaWZvIDoKKyAgICAgKCspIEluIHBvbGxpbmcgbW9kZSwgdGhlIG91dHB1dCBvZiB0aGUgZnVuY3Rpb24gaXMgZG9uZSB3aGVuIHRoZSB0cmFuc2ZlcgorICAgICAgICAgY29tcGxldGUgYml0IGlzIHNldCBhbmQgdGhlIGJ1c3kgYml0IGNsZWFyZWQuCisgICAgICgrKSBJbiBpbnRlcnJ1cHQgbW9kZSwgSEFMX09TUElfQWJvcnRDcGx0Q2FsbGJhY2soKSB3aWxsIGJlIGNhbGxlZCB3aGVuCisgICAgICAgICB0aGUgdHJhbnNmZXIgY29tcGxldGUgYml0IGlzIHNldC4KIAogICAgICoqKiBDb250cm9sIGZ1bmN0aW9ucyAqKioKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQotICAgICAgKCMpIEhBTF9PU1BJX0dldFN0YXRlKCkgZnVuY3Rpb24gZ2l2ZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIEhBTCBPY3RvU1BJIGRyaXZlci4KLSAgICAgICgjKSBIQUxfT1NQSV9TZXRUaW1lb3V0KCkgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgdGltZW91dCB2YWx1ZSB1c2VkIGluIHRoZSBkcml2ZXIuCi0gICAgICAoIykgSEFMX09TUElfU2V0Rmlmb1RocmVzaG9sZCgpIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIHRocmVzaG9sZCBvbiB0aGUgRmlmbyBvZiB0aGUgT1NQSSBQZXJpcGhlcmFsLgotICAgICAgKCMpIEhBTF9PU1BJX0dldEZpZm9UaHJlc2hvbGQoKSBmdW5jdGlvbiBnaXZlcyB0aGUgY3VycmVudCBvZiB0aGUgRmlmbydzIHRocmVzaG9sZAorICAgICBIQUxfT1NQSV9HZXRTdGF0ZSgpIGZ1bmN0aW9uIGdpdmVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBIQUwgT2N0b1NQSSBkcml2ZXIuCisgICAgWy4uXQorICAgICBIQUxfT1NQSV9TZXRUaW1lb3V0KCkgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgdGltZW91dCB2YWx1ZSB1c2VkIGluIHRoZSBkcml2ZXIuCisgICAgWy4uXQorICAgICBIQUxfT1NQSV9TZXRGaWZvVGhyZXNob2xkKCkgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgdGhyZXNob2xkIG9uIHRoZSBGaWZvIG9mIHRoZSBPU1BJIFBlcmlwaGVyYWwuCisgICAgWy4uXQorICAgICBIQUxfT1NQSV9HZXRGaWZvVGhyZXNob2xkKCkgZnVuY3Rpb24gZ2l2ZXMgdGhlIGN1cnJlbnQgb2YgdGhlIEZpZm8ncyB0aHJlc2hvbGQKIAogICAgICoqKiBJTyBtYW5hZ2VyIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zICoqKgogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0KLSAgICAgICgjKSBIQUxfT1NQSU1fQ29uZmlnKCkgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgSU8gbWFuYWdlciBmb3IgdGhlIE9jdG9TUEkgaW5zdGFuY2UuCisgICAgIEhBTF9PU1BJTV9Db25maWcoKSBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBJTyBtYW5hZ2VyIGZvciB0aGUgT2N0b1NQSSBpbnN0YW5jZS4KIAogICAgICoqKiBDYWxsYmFjayByZWdpc3RyYXRpb24gKioqCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQotICAgICAgVGhlIGNvbXBpbGF0aW9uIGRlZmluZSAgVVNFX0hBTF9PU1BJX1JFR0lTVEVSX0NBTExCQUNLUyB3aGVuIHNldCB0byAxCi0gICAgICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgorICAgICBUaGUgY29tcGlsYXRpb24gZGVmaW5lICBVU0VfSEFMX09TUElfUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEKKyAgICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KIAotICAgICAgVXNlIEZ1bmN0aW9ucyBAcmVmIEhBTF9PU1BJX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2ssCi0gICAgICBpdCBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKLSAgICAgICAgKCspIEVycm9yQ2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIGVycm9yIG9jY3Vycy4KLSAgICAgICAgKCspIEFib3J0Q3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBhYm9ydCBpcyBjb21wbGV0ZWQuCi0gICAgICAgICgrKSBGaWZvVGhyZXNob2xkQ2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIHRoZSBmaWZvIHRocmVzaG9sZCBpcyByZWFjaGVkLgotICAgICAgICAoKykgQ21kQ3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBhIGNvbW1hbmQgd2l0aG91dCBkYXRhIGlzIGNvbXBsZXRlZC4KLSAgICAgICAgKCspIFJ4Q3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBhIHJlY2VwdGlvbiB0cmFuc2ZlciBpcyBjb21wbGV0ZWQuCi0gICAgICAgICgrKSBUeENwbHRDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gYSB0cmFuc21pc3Npb24gdHJhbnNmZXIgaXMgY29tcGxldGVkLgotICAgICAgICAoKykgUnhIYWxmQ3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBoYWxmIG9mIHRoZSByZWNlcHRpb24gdHJhbnNmZXIgaXMgY29tcGxldGVkLgotICAgICAgICAoKykgVHhIYWxmQ3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBoYWxmIG9mIHRoZSB0cmFuc21pc3Npb24gdHJhbnNmZXIgaXMgY29tcGxldGVkLgotICAgICAgICAoKykgU3RhdHVzTWF0Y2hDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gYSBzdGF0dXMgbWF0Y2ggb2NjdXJzLgotICAgICAgICAoKykgVGltZU91dENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiB0aGUgdGltZW91dCBwZXJpb2VkIGV4cGlyZXMuCi0gICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgOiBPU1BJIE1zcEluaXQuCi0gICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgOiBPU1BJIE1zcERlSW5pdC4KLSAgICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLCB0aGUgQ2FsbGJhY2sgSUQKLSAgICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCisgICAgWy4uXQorICAgICBVc2UgZnVuY3Rpb24gSEFMX09TUElfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjaywKKyAgICAgaXQgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CisgICAgICgrKSBFcnJvckNhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBlcnJvciBvY2N1cnMuCisgICAgICgrKSBBYm9ydENwbHRDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gYWJvcnQgaXMgY29tcGxldGVkLgorICAgICAoKykgRmlmb1RocmVzaG9sZENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiB0aGUgZmlmbyB0aHJlc2hvbGQgaXMgcmVhY2hlZC4KKyAgICAgKCspIENtZENwbHRDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gYSBjb21tYW5kIHdpdGhvdXQgZGF0YSBpcyBjb21wbGV0ZWQuCisgICAgICgrKSBSeENwbHRDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gYSByZWNlcHRpb24gdHJhbnNmZXIgaXMgY29tcGxldGVkLgorICAgICAoKykgVHhDcGx0Q2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIGEgdHJhbnNtaXNzaW9uIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4KKyAgICAgKCspIFJ4SGFsZkNwbHRDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gaGFsZiBvZiB0aGUgcmVjZXB0aW9uIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4KKyAgICAgKCspIFR4SGFsZkNwbHRDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gaGFsZiBvZiB0aGUgdHJhbnNtaXNzaW9uIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4KKyAgICAgKCspIFN0YXR1c01hdGNoQ2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIGEgc3RhdHVzIG1hdGNoIG9jY3Vycy4KKyAgICAgKCspIFRpbWVPdXRDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gdGhlIHRpbWVvdXQgcGVyaW9lZCBleHBpcmVzLgorICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgIDogT1NQSSBNc3BJbml0LgorICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgIDogT1NQSSBNc3BEZUluaXQuCisgICAgWy4uXQorCSBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECisgICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKLSAgICAgIFVzZSBmdW5jdGlvbiBAcmVmIEhBTF9PU1BJX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKLSAgICAgIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uLiBJdCBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKLSAgICAgICAgKCspIEVycm9yQ2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIGVycm9yIG9jY3Vycy4KLSAgICAgICAgKCspIEFib3J0Q3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBhYm9ydCBpcyBjb21wbGV0ZWQuCi0gICAgICAgICgrKSBGaWZvVGhyZXNob2xkQ2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIHRoZSBmaWZvIHRocmVzaG9sZCBpcyByZWFjaGVkLgotICAgICAgICAoKykgQ21kQ3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBhIGNvbW1hbmQgd2l0aG91dCBkYXRhIGlzIGNvbXBsZXRlZC4KLSAgICAgICAgKCspIFJ4Q3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBhIHJlY2VwdGlvbiB0cmFuc2ZlciBpcyBjb21wbGV0ZWQuCi0gICAgICAgICgrKSBUeENwbHRDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gYSB0cmFuc21pc3Npb24gdHJhbnNmZXIgaXMgY29tcGxldGVkLgotICAgICAgICAoKykgUnhIYWxmQ3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBoYWxmIG9mIHRoZSByZWNlcHRpb24gdHJhbnNmZXIgaXMgY29tcGxldGVkLgotICAgICAgICAoKykgVHhIYWxmQ3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBoYWxmIG9mIHRoZSB0cmFuc21pc3Npb24gdHJhbnNmZXIgaXMgY29tcGxldGVkLgotICAgICAgICAoKykgU3RhdHVzTWF0Y2hDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gYSBzdGF0dXMgbWF0Y2ggb2NjdXJzLgotICAgICAgICAoKykgVGltZU91dENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiB0aGUgdGltZW91dCBwZXJpb2VkIGV4cGlyZXMuCi0gICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgOiBPU1BJIE1zcEluaXQuCi0gICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgOiBPU1BJIE1zcERlSW5pdC4KLSAgICAgIFRoaXMgZnVuY3Rpb24pIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSBhbmQgdGhlIENhbGxiYWNrIElELgorICAgIFsuLl0KKyAgICAgVXNlIGZ1bmN0aW9uIEhBTF9PU1BJX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICAgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb24uIEl0IGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgorICAgICAoKykgRXJyb3JDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gZXJyb3Igb2NjdXJzLgorICAgICAoKykgQWJvcnRDcGx0Q2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIGFib3J0IGlzIGNvbXBsZXRlZC4KKyAgICAgKCspIEZpZm9UaHJlc2hvbGRDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gdGhlIGZpZm8gdGhyZXNob2xkIGlzIHJlYWNoZWQuCisgICAgICgrKSBDbWRDcGx0Q2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIGEgY29tbWFuZCB3aXRob3V0IGRhdGEgaXMgY29tcGxldGVkLgorICAgICAoKykgUnhDcGx0Q2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIGEgcmVjZXB0aW9uIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4KKyAgICAgKCspIFR4Q3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBhIHRyYW5zbWlzc2lvbiB0cmFuc2ZlciBpcyBjb21wbGV0ZWQuCisgICAgICgrKSBSeEhhbGZDcGx0Q2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIGhhbGYgb2YgdGhlIHJlY2VwdGlvbiB0cmFuc2ZlciBpcyBjb21wbGV0ZWQuCisgICAgICgrKSBUeEhhbGZDcGx0Q2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIGhhbGYgb2YgdGhlIHRyYW5zbWlzc2lvbiB0cmFuc2ZlciBpcyBjb21wbGV0ZWQuCisgICAgICgrKSBTdGF0dXNNYXRjaENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBhIHN0YXR1cyBtYXRjaCBvY2N1cnMuCisgICAgICgrKSBUaW1lT3V0Q2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIHRoZSB0aW1lb3V0IHBlcmlvZWQgZXhwaXJlcy4KKyAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICA6IE9TUEkgTXNwSW5pdC4KKyAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICA6IE9TUEkgTXNwRGVJbml0LgorICAgIFsuLl0KKyAgICAgVGhpcyBmdW5jdGlvbikgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAKLSAgICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9PU1BJX0luaXQgYW5kIGlmIHRoZSBzdGF0ZSBpcyBIQUxfT1NQSV9TVEFURV9SRVNFVAotICAgICAgYWxsIGNhbGxiYWNrcyBhcmUgcmVzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucy4KLSAgICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgY2FsbGJhY2tzIHRoYXQgYXJlIHJlc3BlY3RpdmVseQotICAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEByZWYgSEFMX09TUElfSW5pdAotICAgICAgYW5kIEByZWYgIEhBTF9PU1BJX0RlSW5pdCBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KLSAgICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgQHJlZiBIQUxfT1NQSV9Jbml0IGFuZCBAcmVmIEhBTF9PU1BJX0RlSW5pdAotICAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKQorICAgIFsuLl0KKyAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9PU1BJX0luaXQoKSBhbmQgaWYgdGhlIHN0YXRlIGlzIEhBTF9PU1BJX1NUQVRFX1JFU0VUCisgICAgIGFsbCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMuCisgICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgY2FsbGJhY2tzIHRoYXQgYXJlIHJlc3BlY3RpdmVseQorICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgSEFMX09TUElfSW5pdCgpCisgICAgIGFuZCBIQUxfT1NQSV9EZUluaXQoKSBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KKyAgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfT1NQSV9Jbml0KCkgYW5kIEhBTF9PU1BJX0RlSW5pdCgpCisgICAgIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkKIAotICAgICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBSRUFEWSBzdGF0ZSBvbmx5LgotICAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyB0aGF0IGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZAotICAgICAgaW4gUkVBRFkgb3IgUkVTRVQgc3RhdGUsIHRodXMgcmVnaXN0ZXJlZCAodXNlcikgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkCi0gICAgICBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgotICAgICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICAgICAgdXNpbmcgQHJlZiBIQUxfT1NQSV9SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX09TUElfRGVJbml0Ci0gICAgICBvciBAcmVmIEhBTF9PU1BJX0luaXQgZnVuY3Rpb24uCisgICAgWy4uXQorICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIFJFQURZIHN0YXRlIG9ubHkuCisgICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQKKyAgICAgaW4gUkVBRFkgb3IgUkVTRVQgc3RhdGUsIHRodXMgcmVnaXN0ZXJlZCAodXNlcikgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkCisgICAgIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCisgICAgIEluIHRoYXQgY2FzZSBmaXJzdCByZWdpc3RlciB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKKyAgICAgdXNpbmcgSEFMX09TUElfUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEhBTF9PU1BJX0RlSW5pdCgpCisgICAgIG9yIEhBTF9PU1BJX0luaXQoKSBmdW5jdGlvbi4KIAotICAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfT1NQSV9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKLSAgICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlCi0gICAgICBhbmQgd2VhayAoc3VyY2hhcmdlZCkgY2FsbGJhY2tzIGFyZSB1c2VkLgorICAgIFsuLl0KKyAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfT1NQSV9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKKyAgICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RlcmluZyBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUKKyAgICAgYW5kIHdlYWsgKHN1cmNoYXJnZWQpIGNhbGxiYWNrcyBhcmUgdXNlZC4KIAogICBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMTUsMTEgKzMzNiwxNCBAQAogICAgIGFzc2VydF9wYXJhbShJU19PU1BJX0NTX0hJR0hfVElNRSAgIChob3NwaS0+SW5pdC5DaGlwU2VsZWN0SGlnaFRpbWUpKTsKICAgICBhc3NlcnRfcGFyYW0oSVNfT1NQSV9GUkVFX1JVTl9DTEsgICAoaG9zcGktPkluaXQuRnJlZVJ1bm5pbmdDbG9jaykpOwogICAgIGFzc2VydF9wYXJhbShJU19PU1BJX0NMT0NLX01PREUgICAgIChob3NwaS0+SW5pdC5DbG9ja01vZGUpKTsKLSAgICBhc3NlcnRfcGFyYW0oSVNfT1NQSV9XUkFQX1NJWkUgICAgICAoaG9zcGktPkluaXQuV3JhcFNpemUpKTsKICAgICBhc3NlcnRfcGFyYW0oSVNfT1NQSV9DTEtfUFJFU0NBTEVSICAoaG9zcGktPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKICAgICBhc3NlcnRfcGFyYW0oSVNfT1NQSV9TQU1QTEVfU0hJRlRJTkcoaG9zcGktPkluaXQuU2FtcGxlU2hpZnRpbmcpKTsKICAgICBhc3NlcnRfcGFyYW0oSVNfT1NQSV9ESFFDICAgICAgICAgICAoaG9zcGktPkluaXQuRGVsYXlIb2xkUXVhcnRlckN5Y2xlKSk7CiAgICAgYXNzZXJ0X3BhcmFtKElTX09TUElfQ1NfQk9VTkRBUlkgICAgKGhvc3BpLT5Jbml0LkNoaXBTZWxlY3RCb3VuZGFyeSkpOworICAgIGFzc2VydF9wYXJhbShJU19PU1BJX0RMWUJZUCAgICAgICAgIChob3NwaS0+SW5pdC5EZWxheUJsb2NrQnlwYXNzKSk7CisjaWYgICBkZWZpbmVkIChPQ1RPU1BJX0RDUjNfTUFYVFJBTikKKyAgICBhc3NlcnRfcGFyYW0oSVNfT1NQSV9NQVhUUkFOICAgICAgICAoaG9zcGktPkluaXQuTWF4VHJhbikpOworI2VuZGlmCiAKICAgICAvKiBJbml0aWFsaXplIGVycm9yIGNvZGUgKi8KICAgICBob3NwaS0+RXJyb3JDb2RlID0gSEFMX09TUElfRVJST1JfTk9ORTsKQEAgLTM1MywyMSArMzc3LDIzIEBACiAjZW5kaWYKIAogICAgICAgLyogQ29uZmlndXJlIHRoZSBkZWZhdWx0IHRpbWVvdXQgZm9yIHRoZSBPU1BJIG1lbW9yeSBhY2Nlc3MgKi8KLSAgICAgIHN0YXR1cyA9IEhBTF9PU1BJX1NldFRpbWVvdXQoaG9zcGksIEhBTF9PU1BJX1RJTUVPVVRfREVGQVVMVF9WQUxVRSk7Ci0gICAgfQorICAgICAgKHZvaWQpSEFMX09TUElfU2V0VGltZW91dChob3NwaSwgSEFMX09TUElfVElNRU9VVF9ERUZBVUxUX1ZBTFVFKTsKIAotICAgIGlmIChzdGF0dXMgPT0gSEFMX09LKQotICAgIHsKLSAgICAgLyogQ29uZmlndXJlIG1lbW9yeSB0eXBlLCBkZXZpY2Ugc2l6ZSwgY2hpcCBzZWxlY3QgaGlnaCB0aW1lLCBmcmVlIHJ1bm5pbmcgY2xvY2ssIGNsb2NrIG1vZGUgKi8KLSAgICAgIE1PRElGWV9SRUcoaG9zcGktPkluc3RhbmNlLT5EQ1IxLCAoT0NUT1NQSV9EQ1IxX01UWVAgfCBPQ1RPU1BJX0RDUjFfREVWU0laRSB8IE9DVE9TUElfRENSMV9DU0hUIHwgT0NUT1NQSV9EQ1IxX0ZSQ0sgfCBPQ1RPU1BJX0RDUjFfQ0tNT0RFKSwKKyAgICAgIC8qIENvbmZpZ3VyZSBtZW1vcnkgdHlwZSwgZGV2aWNlIHNpemUsIGNoaXAgc2VsZWN0IGhpZ2ggdGltZSwgZGVsYXkgYmxvY2sgYnlwYXNzLCBmcmVlIHJ1bm5pbmcgY2xvY2ssIGNsb2NrIG1vZGUgKi8KKyAgICAgIE1PRElGWV9SRUcoaG9zcGktPkluc3RhbmNlLT5EQ1IxLAorICAgICAgICAgICAgICAgICAoT0NUT1NQSV9EQ1IxX01UWVAgfCBPQ1RPU1BJX0RDUjFfREVWU0laRSB8IE9DVE9TUElfRENSMV9DU0hUIHwgT0NUT1NQSV9EQ1IxX0RMWUJZUCB8CisgICAgICAgICAgICAgICAgICBPQ1RPU1BJX0RDUjFfRlJDSyB8IE9DVE9TUElfRENSMV9DS01PREUpLAogICAgICAgICAgICAgICAgICAoaG9zcGktPkluaXQuTWVtb3J5VHlwZSB8ICgoaG9zcGktPkluaXQuRGV2aWNlU2l6ZSAtIDFVKSA8PCBPQ1RPU1BJX0RDUjFfREVWU0laRV9Qb3MpIHwKLSAgICAgICAgICAgICAgICAgICgoaG9zcGktPkluaXQuQ2hpcFNlbGVjdEhpZ2hUaW1lIC0gMVUpIDw8IE9DVE9TUElfRENSMV9DU0hUX1BvcykgfCBob3NwaS0+SW5pdC5DbG9ja01vZGUpKTsKKyAgICAgICAgICAgICAgICAgICgoaG9zcGktPkluaXQuQ2hpcFNlbGVjdEhpZ2hUaW1lIC0gMVUpIDw8IE9DVE9TUElfRENSMV9DU0hUX1BvcykgfAorICAgICAgICAgICAgICAgICAgaG9zcGktPkluaXQuRGVsYXlCbG9ja0J5cGFzcyB8IGhvc3BpLT5Jbml0LkNsb2NrTW9kZSkpOwogCi0gICAgICAvKiBDb25maWd1cmUgd3JhcCBzaXplICovCi0gICAgICBNT0RJRllfUkVHKGhvc3BpLT5JbnN0YW5jZS0+RENSMiwgT0NUT1NQSV9EQ1IyX1dSQVBTSVpFLCBob3NwaS0+SW5pdC5XcmFwU2l6ZSk7Ci0KKyNpZiAgIGRlZmluZWQgKE9DVE9TUElfRENSM19NQVhUUkFOKQorICAgICAgLyogQ29uZmlndXJlIGNoaXAgc2VsZWN0IGJvdW5kYXJ5IGFuZCBtYXhpbXVuIHRyYW5zZmVyICovCisgICAgICBob3NwaS0+SW5zdGFuY2UtPkRDUjMgPSAoKGhvc3BpLT5Jbml0LkNoaXBTZWxlY3RCb3VuZGFyeSA8PCBPQ1RPU1BJX0RDUjNfQ1NCT1VORF9Qb3MpIHwgKGhvc3BpLT5Jbml0Lk1heFRyYW4gPDwgT0NUT1NQSV9EQ1IzX01BWFRSQU5fUG9zKSk7CisjZWxzZQogICAgICAgLyogQ29uZmlndXJlIGNoaXAgc2VsZWN0IGJvdW5kYXJ5ICovCiAgICAgICBob3NwaS0+SW5zdGFuY2UtPkRDUjMgPSAoaG9zcGktPkluaXQuQ2hpcFNlbGVjdEJvdW5kYXJ5IDw8IE9DVE9TUElfRENSM19DU0JPVU5EX1Bvcyk7CisjZW5kaWYKIAogI2lmICAgZGVmaW5lZCAoT0NUT1NQSV9EQ1I0X1JFRlJFU0gpCiAgICAgICAvKiBDb25maWd1cmUgcmVmcmVzaCAqLwpAQCAtMzgyLDMzICs0MDgsMzMgQEAKIAogICAgICAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgICAgICB7Ci0gICAgICAgICAvKiBDb25maWd1cmUgY2xvY2sgcHJlc2NhbGVyICovCi0gICAgICAgICBNT0RJRllfUkVHKGhvc3BpLT5JbnN0YW5jZS0+RENSMiwgT0NUT1NQSV9EQ1IyX1BSRVNDQUxFUiwgKChob3NwaS0+SW5pdC5DbG9ja1ByZXNjYWxlciAtIDFVKSA8PCBPQ1RPU1BJX0RDUjJfUFJFU0NBTEVSX1BvcykpOworICAgICAgICAvKiBDb25maWd1cmUgY2xvY2sgcHJlc2NhbGVyICovCisgICAgICAgIE1PRElGWV9SRUcoaG9zcGktPkluc3RhbmNlLT5EQ1IyLCBPQ1RPU1BJX0RDUjJfUFJFU0NBTEVSLCAoKGhvc3BpLT5Jbml0LkNsb2NrUHJlc2NhbGVyIC0gMVUpIDw8IE9DVE9TUElfRENSMl9QUkVTQ0FMRVJfUG9zKSk7CiAKLSAgICAgICAgIC8qIENvbmZpZ3VyZSBEdWFsIFF1YWQgbW9kZSAqLwotICAgICAgICAgTU9ESUZZX1JFRyhob3NwaS0+SW5zdGFuY2UtPkNSLCBPQ1RPU1BJX0NSX0RRTSwgaG9zcGktPkluaXQuRHVhbFF1YWQpOworICAgICAgICAvKiBDb25maWd1cmUgRHVhbCBRdWFkIG1vZGUgKi8KKyAgICAgICAgTU9ESUZZX1JFRyhob3NwaS0+SW5zdGFuY2UtPkNSLCBPQ1RPU1BJX0NSX0RRTSwgaG9zcGktPkluaXQuRHVhbFF1YWQpOwogCi0gICAgICAgICAvKiBDb25maWd1cmUgc2FtcGxlIHNoaWZ0aW5nIGFuZCBkZWxheSBob2xkIHF1YXJ0ZXIgY3ljbGUgKi8KLSAgICAgICAgIE1PRElGWV9SRUcoaG9zcGktPkluc3RhbmNlLT5UQ1IsIChPQ1RPU1BJX1RDUl9TU0hJRlQgfCBPQ1RPU1BJX1RDUl9ESFFDKSwgKGhvc3BpLT5Jbml0LlNhbXBsZVNoaWZ0aW5nIHwgaG9zcGktPkluaXQuRGVsYXlIb2xkUXVhcnRlckN5Y2xlKSk7CisgICAgICAgIC8qIENvbmZpZ3VyZSBzYW1wbGUgc2hpZnRpbmcgYW5kIGRlbGF5IGhvbGQgcXVhcnRlciBjeWNsZSAqLworICAgICAgICBNT0RJRllfUkVHKGhvc3BpLT5JbnN0YW5jZS0+VENSLCAoT0NUT1NQSV9UQ1JfU1NISUZUIHwgT0NUT1NQSV9UQ1JfREhRQyksIChob3NwaS0+SW5pdC5TYW1wbGVTaGlmdGluZyB8IGhvc3BpLT5Jbml0LkRlbGF5SG9sZFF1YXJ0ZXJDeWNsZSkpOwogCi0gICAgICAgICAvKiBFbmFibGUgT2N0b1NQSSAqLwotICAgICAgICAgX19IQUxfT1NQSV9FTkFCTEUoaG9zcGkpOwotICAgICAgICAgCi0gICAgICAgICAvKiBFbmFibGUgZnJlZSBydW5uaW5nIGNsb2NrIGlmIG5lZWRlZCA6IG11c3QgYmUgZG9uZSBhZnRlciBPU1BJIGVuYWJsZSAqLwotICAgICAgICAgaWYgKGhvc3BpLT5Jbml0LkZyZWVSdW5uaW5nQ2xvY2sgPT0gSEFMX09TUElfRlJFRVJVTkNMS19FTkFCTEUpCi0gICAgICAgICB7Ci0gICAgICAgICAgIFNFVF9CSVQoaG9zcGktPkluc3RhbmNlLT5EQ1IxLCBPQ1RPU1BJX0RDUjFfRlJDSyk7Ci0gICAgICAgICB9CisgICAgICAgIC8qIEVuYWJsZSBPY3RvU1BJICovCisgICAgICAgIF9fSEFMX09TUElfRU5BQkxFKGhvc3BpKTsKIAotICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgT1NQSSBzdGF0ZSAqLwotICAgICAgICAgaWYgKGhvc3BpLT5Jbml0Lk1lbW9yeVR5cGUgPT0gSEFMX09TUElfTUVNVFlQRV9IWVBFUkJVUykKLSAgICAgICAgIHsKLSAgICAgICAgICAgIGhvc3BpLT5TdGF0ZSA9IEhBTF9PU1BJX1NUQVRFX0hZUEVSQlVTX0lOSVQ7Ci0gICAgICAgICB9Ci0gICAgICAgICBlbHNlCi0gICAgICAgICB7Ci0gICAgICAgICAgICBob3NwaS0+U3RhdGUgPSBIQUxfT1NQSV9TVEFURV9SRUFEWTsKLSAgICAgICAgIH0KKyAgICAgICAgLyogRW5hYmxlIGZyZWUgcnVubmluZyBjbG9jayBpZiBuZWVkZWQgOiBtdXN0IGJlIGRvbmUgYWZ0ZXIgT1NQSSBlbmFibGUgKi8KKyAgICAgICAgaWYgKGhvc3BpLT5Jbml0LkZyZWVSdW5uaW5nQ2xvY2sgPT0gSEFMX09TUElfRlJFRVJVTkNMS19FTkFCTEUpCisgICAgICAgIHsKKyAgICAgICAgICBTRVRfQklUKGhvc3BpLT5JbnN0YW5jZS0+RENSMSwgT0NUT1NQSV9EQ1IxX0ZSQ0spOworICAgICAgICB9CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgT1NQSSBzdGF0ZSAqLworICAgICAgICBpZiAoaG9zcGktPkluaXQuTWVtb3J5VHlwZSA9PSBIQUxfT1NQSV9NRU1UWVBFX0hZUEVSQlVTKQorICAgICAgICB7CisgICAgICAgICAgaG9zcGktPlN0YXRlID0gSEFMX09TUElfU1RBVEVfSFlQRVJCVVNfSU5JVDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBob3NwaS0+U3RhdGUgPSBIQUxfT1NQSV9TVEFURV9SRUFEWTsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KICAgfQpAQCAtMjQ2OSwxMSArMjQ5NSwxMSBAQAogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBPY3RvU1BJIElPIE1hbmFnZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KICAgYXNzZXJ0X3BhcmFtKElTX09TUElNX1BPUlQoY2ZnLT5DbGtQb3J0KSk7Ci0gIGFzc2VydF9wYXJhbShJU19PU1BJTV9QT1JUKGNmZy0+RFFTUG9ydCkpOworICBhc3NlcnRfcGFyYW0oSVNfT1NQSU1fRFFTX1BPUlQoY2ZnLT5EUVNQb3J0KSk7CiAgIGFzc2VydF9wYXJhbShJU19PU1BJTV9QT1JUKGNmZy0+TkNTUG9ydCkpOwogICBhc3NlcnRfcGFyYW0oSVNfT1NQSU1fSU9fUE9SVChjZmctPklPTG93UG9ydCkpOwogICBhc3NlcnRfcGFyYW0oSVNfT1NQSU1fSU9fUE9SVChjZmctPklPSGlnaFBvcnQpKTsKLSNpZiBkZWZpbmVkIChPQ1RPU1BJTV9DUl9NVVhFTikKKyNpZiAgIGRlZmluZWQgKE9DVE9TUElNX0NSX01VWEVOKQogICBhc3NlcnRfcGFyYW0oSVNfT1NQSU1fUkVRMkFDS1RJTUUoY2ZnLT5SZXEyQWNrVGltZSkpOwogI2VuZGlmCiAKQEAgLTI1MTQsNyArMjU0MCw3IEBACiAKICAgICAvKioqKioqKioqKioqKioqKiogRGVhY3RpdmF0aW9uIG9mIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gKioqKioqKioqKioqKioqKiovCiAgICAgQ0xFQVJfQklUKE9DVE9TUElNLT5QQ1JbKElPTV9jZmdbaW5zdGFuY2VdLk5DU1BvcnQtMVUpXSwgT0NUT1NQSU1fUENSX05DU0VOKTsKLSNpZiBkZWZpbmVkIChPQ1RPU1BJTV9DUl9NVVhFTikKKyNpZiAgIGRlZmluZWQgKE9DVE9TUElNX0NSX01VWEVOKQogICAgIGlmICgoT0NUT1NQSU0tPkNSICYgT0NUT1NQSU1fQ1JfTVVYRU4pICE9IDBVKQogICAgIHsKICAgICAgIC8qIERlLW11bHRpcGxleGluZyBzaG91bGQgYmUgcGVyZm9ybWVkICovCkBAIC0yNTIyLDEwICsyNTQ4LDE5IEBACiAKICAgICAgIGlmIChvdGhlcl9pbnN0YW5jZSA9PSAxVSkKICAgICAgIHsKLSAgICAgICAgU0VUX0JJVChPQ1RPU1BJTS0+UENSWyhJT01fY2ZnW290aGVyX2luc3RhbmNlXS5DbGtQb3J0LTFVKV0sICAgICAgICAgICAgICAgICAgICAgICAgICBPQ1RPU1BJTV9QQ1JfQ0xLU1JDKTsKLSAgICAgICAgU0VUX0JJVChPQ1RPU1BJTS0+UENSWyhJT01fY2ZnW290aGVyX2luc3RhbmNlXS5EUVNQb3J0LTFVKV0sICAgICAgICAgICAgICAgICAgICAgICAgICBPQ1RPU1BJTV9QQ1JfRFFTU1JDKTsKLSAgICAgICAgU0VUX0JJVChPQ1RPU1BJTS0+UENSWygoSU9NX2NmZ1tvdGhlcl9pbnN0YW5jZV0uSU9Mb3dQb3J0LTFVKSYgT1NQSV9JT01fUE9SVF9NQVNLKV0sICBPQ1RPU1BJTV9QQ1JfSU9MU1JDXzEpOwotICAgICAgICBTRVRfQklUKE9DVE9TUElNLT5QQ1JbKChJT01fY2ZnW290aGVyX2luc3RhbmNlXS5JT0hpZ2hQb3J0LTFVKSYgT1NQSV9JT01fUE9SVF9NQVNLKV0sIE9DVE9TUElNX1BDUl9JT0hTUkNfMSk7CisgICAgICAgIFNFVF9CSVQoT0NUT1NQSU0tPlBDUlsoSU9NX2NmZ1tvdGhlcl9pbnN0YW5jZV0uQ2xrUG9ydC0xVSldLCBPQ1RPU1BJTV9QQ1JfQ0xLU1JDKTsKKyAgICAgICAgaWYgKElPTV9jZmdbb3RoZXJfaW5zdGFuY2VdLkRRU1BvcnQgIT0gMFUpCisgICAgICAgIHsKKyAgICAgICAgICBTRVRfQklUKE9DVE9TUElNLT5QQ1JbKElPTV9jZmdbb3RoZXJfaW5zdGFuY2VdLkRRU1BvcnQtMVUpXSwgT0NUT1NQSU1fUENSX0RRU1NSQyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKElPTV9jZmdbb3RoZXJfaW5zdGFuY2VdLklPTG93UG9ydCAhPSBIQUxfT1NQSU1fSU9QT1JUX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICBTRVRfQklUKE9DVE9TUElNLT5QQ1JbKChJT01fY2ZnW290aGVyX2luc3RhbmNlXS5JT0xvd1BvcnQtMVUpJiBPU1BJX0lPTV9QT1JUX01BU0spXSwgT0NUT1NQSU1fUENSX0lPTFNSQ18xKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoSU9NX2NmZ1tvdGhlcl9pbnN0YW5jZV0uSU9IaWdoUG9ydCAhPSBIQUxfT1NQSU1fSU9QT1JUX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICBTRVRfQklUKE9DVE9TUElNLT5QQ1JbKChJT01fY2ZnW290aGVyX2luc3RhbmNlXS5JT0hpZ2hQb3J0LTFVKSYgT1NQSV9JT01fUE9SVF9NQVNLKV0sIE9DVE9TUElNX1BDUl9JT0hTUkNfMSk7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgICAgZWxzZQpAQCAtMjUzMywxMiArMjU2OCwyMSBAQAogI2VuZGlmCiAgICAgICBpZiAoSU9NX2NmZ1tpbnN0YW5jZV0uQ2xrUG9ydCAhPSAwVSkKICAgICAgIHsKLSAgICAgICAgQ0xFQVJfQklUKE9DVE9TUElNLT5QQ1JbKElPTV9jZmdbaW5zdGFuY2VdLkNsa1BvcnQtMVUpXSwgICAgICAgICAgICAgICAgICAgICAgICAgIE9DVE9TUElNX1BDUl9DTEtFTik7Ci0gICAgICAgIENMRUFSX0JJVChPQ1RPU1BJTS0+UENSWyhJT01fY2ZnW2luc3RhbmNlXS5EUVNQb3J0LTFVKV0sICAgICAgICAgICAgICAgICAgICAgICAgICBPQ1RPU1BJTV9QQ1JfRFFTRU4pOwotICAgICAgICBDTEVBUl9CSVQoT0NUT1NQSU0tPlBDUlsoKElPTV9jZmdbaW5zdGFuY2VdLklPTG93UG9ydC0xVSkmIE9TUElfSU9NX1BPUlRfTUFTSyldLCAgT0NUT1NQSU1fUENSX0lPTEVOKTsKLSAgICAgICAgQ0xFQVJfQklUKE9DVE9TUElNLT5QQ1JbKChJT01fY2ZnW2luc3RhbmNlXS5JT0hpZ2hQb3J0LTFVKSYgT1NQSV9JT01fUE9SVF9NQVNLKV0sIE9DVE9TUElNX1BDUl9JT0hFTik7CisgICAgICAgIENMRUFSX0JJVChPQ1RPU1BJTS0+UENSWyhJT01fY2ZnW2luc3RhbmNlXS5DbGtQb3J0LTFVKV0sIE9DVE9TUElNX1BDUl9DTEtFTik7CisgICAgICAgIGlmIChJT01fY2ZnW2luc3RhbmNlXS5EUVNQb3J0ICE9IDBVKQorICAgICAgICB7CisgICAgICAgICAgQ0xFQVJfQklUKE9DVE9TUElNLT5QQ1JbKElPTV9jZmdbaW5zdGFuY2VdLkRRU1BvcnQtMVUpXSwgT0NUT1NQSU1fUENSX0RRU0VOKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoSU9NX2NmZ1tpbnN0YW5jZV0uSU9Mb3dQb3J0ICE9IEhBTF9PU1BJTV9JT1BPUlRfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgIENMRUFSX0JJVChPQ1RPU1BJTS0+UENSWygoSU9NX2NmZ1tpbnN0YW5jZV0uSU9Mb3dQb3J0LTFVKSYgT1NQSV9JT01fUE9SVF9NQVNLKV0sIE9DVE9TUElNX1BDUl9JT0xFTik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKElPTV9jZmdbaW5zdGFuY2VdLklPSGlnaFBvcnQgIT0gSEFMX09TUElNX0lPUE9SVF9OT05FKQorICAgICAgICB7CisgICAgICAgICAgQ0xFQVJfQklUKE9DVE9TUElNLT5QQ1JbKChJT01fY2ZnW2luc3RhbmNlXS5JT0hpZ2hQb3J0LTFVKSYgT1NQSV9JT01fUE9SVF9NQVNLKV0sIE9DVE9TUElNX1BDUl9JT0hFTik7CisgICAgICAgIH0KICAgICAgIH0KLSNpZiBkZWZpbmVkIChPQ1RPU1BJTV9DUl9NVVhFTikKKyNpZiAgIGRlZmluZWQgKE9DVE9TUElNX0NSX01VWEVOKQogICAgIH0KICNlbmRpZgogCkBAIC0yNTQ3LDcgKzI1OTEsNyBAQAogICAgICAgICAoY2ZnLT5OQ1NQb3J0ID09IElPTV9jZmdbb3RoZXJfaW5zdGFuY2VdLk5DU1BvcnQpIHx8IChjZmctPklPTG93UG9ydCA9PSBJT01fY2ZnW290aGVyX2luc3RhbmNlXS5JT0xvd1BvcnQpIHx8CiAgICAgICAgIChjZmctPklPSGlnaFBvcnQgPT0gSU9NX2NmZ1tvdGhlcl9pbnN0YW5jZV0uSU9IaWdoUG9ydCkpCiAgICAgewotI2lmIGRlZmluZWQgKE9DVE9TUElNX0NSX01VWEVOKQorI2lmICAgZGVmaW5lZCAoT0NUT1NQSU1fQ1JfTVVYRU4pCiAgICAgICBpZiAoKGNmZy0+Q2xrUG9ydCAgID09IElPTV9jZmdbb3RoZXJfaW5zdGFuY2VdLkNsa1BvcnQpICAgJiYgKGNmZy0+RFFTUG9ydCAgICA9PSBJT01fY2ZnW290aGVyX2luc3RhbmNlXS5EUVNQb3J0KSAmJgogICAgICAgICAgIChjZmctPklPTG93UG9ydCA9PSBJT01fY2ZnW290aGVyX2luc3RhbmNlXS5JT0xvd1BvcnQpICYmIChjZmctPklPSGlnaFBvcnQgPT0gSU9NX2NmZ1tvdGhlcl9pbnN0YW5jZV0uSU9IaWdoUG9ydCkpCiAgICAgICB7CkBAIC0yNTU3LDEyICsyNjAxLDIxIEBACiAgICAgICBlbHNlCiAgICAgICB7CiAjZW5kaWYKLSAgICAgICAgQ0xFQVJfQklUKE9DVE9TUElNLT5QQ1JbKElPTV9jZmdbb3RoZXJfaW5zdGFuY2VdLkNsa1BvcnQtMVUpXSwgICAgICAgICAgICAgICAgICAgICAgICAgIE9DVE9TUElNX1BDUl9DTEtFTik7Ci0gICAgICAgIENMRUFSX0JJVChPQ1RPU1BJTS0+UENSWyhJT01fY2ZnW290aGVyX2luc3RhbmNlXS5EUVNQb3J0LTFVKV0sICAgICAgICAgICAgICAgICAgICAgICAgICBPQ1RPU1BJTV9QQ1JfRFFTRU4pOwotICAgICAgICBDTEVBUl9CSVQoT0NUT1NQSU0tPlBDUlsoSU9NX2NmZ1tvdGhlcl9pbnN0YW5jZV0uTkNTUG9ydC0xVSldLCAgICAgICAgICAgICAgICAgICAgICAgICAgT0NUT1NQSU1fUENSX05DU0VOKTsKLSAgICAgICAgQ0xFQVJfQklUKE9DVE9TUElNLT5QQ1JbKChJT01fY2ZnW290aGVyX2luc3RhbmNlXS5JT0xvd1BvcnQtMVUpJiBPU1BJX0lPTV9QT1JUX01BU0spXSwgIE9DVE9TUElNX1BDUl9JT0xFTik7Ci0gICAgICAgIENMRUFSX0JJVChPQ1RPU1BJTS0+UENSWygoSU9NX2NmZ1tvdGhlcl9pbnN0YW5jZV0uSU9IaWdoUG9ydC0xVSkmIE9TUElfSU9NX1BPUlRfTUFTSyldLCBPQ1RPU1BJTV9QQ1JfSU9IRU4pOwotI2lmIGRlZmluZWQgKE9DVE9TUElNX0NSX01VWEVOKQorICAgICAgICBDTEVBUl9CSVQoT0NUT1NQSU0tPlBDUlsoSU9NX2NmZ1tvdGhlcl9pbnN0YW5jZV0uQ2xrUG9ydC0xVSldLCBPQ1RPU1BJTV9QQ1JfQ0xLRU4pOworICAgICAgICBpZiAoSU9NX2NmZ1tvdGhlcl9pbnN0YW5jZV0uRFFTUG9ydCAhPSAwVSkKKyAgICAgICAgeworICAgICAgICAgIENMRUFSX0JJVChPQ1RPU1BJTS0+UENSWyhJT01fY2ZnW290aGVyX2luc3RhbmNlXS5EUVNQb3J0LTFVKV0sIE9DVE9TUElNX1BDUl9EUVNFTik7CisgICAgICAgIH0KKyAgICAgICAgQ0xFQVJfQklUKE9DVE9TUElNLT5QQ1JbKElPTV9jZmdbb3RoZXJfaW5zdGFuY2VdLk5DU1BvcnQtMVUpXSwgT0NUT1NQSU1fUENSX05DU0VOKTsKKyAgICAgICAgaWYgKElPTV9jZmdbb3RoZXJfaW5zdGFuY2VdLklPTG93UG9ydCAhPSBIQUxfT1NQSU1fSU9QT1JUX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICBDTEVBUl9CSVQoT0NUT1NQSU0tPlBDUlsoKElPTV9jZmdbb3RoZXJfaW5zdGFuY2VdLklPTG93UG9ydC0xVSkmIE9TUElfSU9NX1BPUlRfTUFTSyldLCBPQ1RPU1BJTV9QQ1JfSU9MRU4pOworICAgICAgICB9CisgICAgICAgIGlmIChJT01fY2ZnW290aGVyX2luc3RhbmNlXS5JT0hpZ2hQb3J0ICE9IEhBTF9PU1BJTV9JT1BPUlRfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgIENMRUFSX0JJVChPQ1RPU1BJTS0+UENSWygoSU9NX2NmZ1tvdGhlcl9pbnN0YW5jZV0uSU9IaWdoUG9ydC0xVSkmIE9TUElfSU9NX1BPUlRfTUFTSyldLCBPQ1RPU1BJTV9QQ1JfSU9IRU4pOworICAgICAgICB9CisjaWYgICBkZWZpbmVkIChPQ1RPU1BJTV9DUl9NVVhFTikKICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTI1NzAsNyArMjYyMyw3IEBACiAgICAgLyoqKioqKioqKioqKioqKioqKioqIEFjdGl2YXRpb24gb2YgbmV3IGNvbmZpZ3VyYXRpb24gKioqKioqKioqKioqKioqKioqKioqLwogICAgIE1PRElGWV9SRUcoT0NUT1NQSU0tPlBDUlsoY2ZnLT5OQ1NQb3J0LTFVKV0sIChPQ1RPU1BJTV9QQ1JfTkNTRU4gfCBPQ1RPU1BJTV9QQ1JfTkNTU1JDKSwgKE9DVE9TUElNX1BDUl9OQ1NFTiB8IChpbnN0YW5jZSA8PCBPQ1RPU1BJTV9QQ1JfTkNTU1JDX1BvcykpKTsKIAotI2lmIGRlZmluZWQgKE9DVE9TUElNX0NSX01VWEVOKQorI2lmICAgZGVmaW5lZCAoT0NUT1NQSU1fQ1JfTVVYRU4pCiAgICAgaWYgKChjZmctPlJlcTJBY2tUaW1lIC0gMVUpID4gKChPQ1RPU1BJTS0+Q1IgJiBPQ1RPU1BJTV9DUl9SRVEyQUNLX1RJTUUpID4+IE9DVE9TUElNX0NSX1JFUTJBQ0tfVElNRV9Qb3MpKQogICAgIHsKICAgICAgIE1PRElGWV9SRUcoT0NUT1NQSU0tPkNSLCBPQ1RPU1BJTV9DUl9SRVEyQUNLX1RJTUUsICgoY2ZnLT5SZXEyQWNrVGltZSAtIDFVKSA8PCBPQ1RPU1BJTV9DUl9SRVEyQUNLX1RJTUVfUG9zKSk7CkBAIC0yNTc5LDU0ICsyNjMyLDc2IEBACiAgICAgaWYgKChPQ1RPU1BJTS0+Q1IgJiBPQ1RPU1BJTV9DUl9NVVhFTikgIT0gMFUpCiAgICAgewogICAgICAgTU9ESUZZX1JFRyhPQ1RPU1BJTS0+UENSWyhjZmctPkNsa1BvcnQtMVUpXSwgKE9DVE9TUElNX1BDUl9DTEtFTiB8IE9DVE9TUElNX1BDUl9DTEtTUkMpLCBPQ1RPU1BJTV9QQ1JfQ0xLRU4pOwotICAgICAgTU9ESUZZX1JFRyhPQ1RPU1BJTS0+UENSWyhjZmctPkRRU1BvcnQtMVUpXSwgKE9DVE9TUElNX1BDUl9EUVNFTiB8IE9DVE9TUElNX1BDUl9EUVNTUkMpLCBPQ1RPU1BJTV9QQ1JfRFFTRU4pOworICAgICAgaWYgKGNmZy0+RFFTUG9ydCAhPSAwVSkKKyAgICAgIHsKKyAgICAgICAgTU9ESUZZX1JFRyhPQ1RPU1BJTS0+UENSWyhjZmctPkRRU1BvcnQtMVUpXSwgKE9DVE9TUElNX1BDUl9EUVNFTiB8IE9DVE9TUElNX1BDUl9EUVNTUkMpLCBPQ1RPU1BJTV9QQ1JfRFFTRU4pOworICAgICAgfQogCiAgICAgICBpZiAoKGNmZy0+SU9Mb3dQb3J0ICYgT0NUT1NQSU1fUENSX0lPTEVOKSAhPSAwVSkKICAgICAgIHsKICAgICAgICAgTU9ESUZZX1JFRyhPQ1RPU1BJTS0+UENSWygoY2ZnLT5JT0xvd1BvcnQtMVUpJiBPU1BJX0lPTV9QT1JUX01BU0spXSwgKE9DVE9TUElNX1BDUl9JT0xFTiB8IE9DVE9TUElNX1BDUl9JT0xTUkMpLCBPQ1RPU1BJTV9QQ1JfSU9MRU4pOwogICAgICAgfQotICAgICAgZWxzZQorICAgICAgZWxzZSBpZiAoY2ZnLT5JT0xvd1BvcnQgIT0gSEFMX09TUElNX0lPUE9SVF9OT05FKQogICAgICAgewogICAgICAgICBNT0RJRllfUkVHKE9DVE9TUElNLT5QQ1JbKChjZmctPklPTG93UG9ydC0xVSkmIE9TUElfSU9NX1BPUlRfTUFTSyldLCAoT0NUT1NQSU1fUENSX0lPSEVOIHwgT0NUT1NQSU1fUENSX0lPSFNSQyksIE9DVE9TUElNX1BDUl9JT0hFTik7CiAgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgICB9CiAKICAgICAgIGlmICgoY2ZnLT5JT0hpZ2hQb3J0ICYgT0NUT1NQSU1fUENSX0lPTEVOKSAhPSAwVSkKICAgICAgIHsKICAgICAgICAgTU9ESUZZX1JFRyhPQ1RPU1BJTS0+UENSWygoY2ZnLT5JT0hpZ2hQb3J0LTFVKSYgT1NQSV9JT01fUE9SVF9NQVNLKV0sIChPQ1RPU1BJTV9QQ1JfSU9MRU4gfCBPQ1RPU1BJTV9QQ1JfSU9MU1JDKSwgKE9DVE9TUElNX1BDUl9JT0xFTiB8IE9DVE9TUElNX1BDUl9JT0xTUkNfMCkpOwogICAgICAgfQotICAgICAgZWxzZQorICAgICAgZWxzZSBpZiAoY2ZnLT5JT0hpZ2hQb3J0ICE9IEhBTF9PU1BJTV9JT1BPUlRfTk9ORSkKICAgICAgIHsKICAgICAgICAgTU9ESUZZX1JFRyhPQ1RPU1BJTS0+UENSWygoY2ZnLT5JT0hpZ2hQb3J0LTFVKSYgT1NQSV9JT01fUE9SVF9NQVNLKV0sIChPQ1RPU1BJTV9QQ1JfSU9IRU4gfCBPQ1RPU1BJTV9QQ1JfSU9IU1JDKSwgKE9DVE9TUElNX1BDUl9JT0hFTiB8IE9DVE9TUElNX1BDUl9JT0hTUkNfMCkpOwogICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAgLyogTm90aGluZyB0byBkbyAqLworICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewogI2VuZGlmCiAgICAgICBNT0RJRllfUkVHKE9DVE9TUElNLT5QQ1JbKGNmZy0+Q2xrUG9ydC0xVSldLCAoT0NUT1NQSU1fUENSX0NMS0VOIHwgT0NUT1NQSU1fUENSX0NMS1NSQyksIChPQ1RPU1BJTV9QQ1JfQ0xLRU4gfCAoaW5zdGFuY2UgPDwgT0NUT1NQSU1fUENSX0NMS1NSQ19Qb3MpKSk7Ci0gICAgICBNT0RJRllfUkVHKE9DVE9TUElNLT5QQ1JbKGNmZy0+RFFTUG9ydC0xVSldLCAoT0NUT1NQSU1fUENSX0RRU0VOIHwgT0NUT1NQSU1fUENSX0RRU1NSQyksIChPQ1RPU1BJTV9QQ1JfRFFTRU4gfCAoaW5zdGFuY2UgPDwgT0NUT1NQSU1fUENSX0RRU1NSQ19Qb3MpKSk7CisgICAgICBpZiAoY2ZnLT5EUVNQb3J0ICE9IDBVKQorICAgICAgeworICAgICAgICBNT0RJRllfUkVHKE9DVE9TUElNLT5QQ1JbKGNmZy0+RFFTUG9ydC0xVSldLCAoT0NUT1NQSU1fUENSX0RRU0VOIHwgT0NUT1NQSU1fUENSX0RRU1NSQyksIChPQ1RPU1BJTV9QQ1JfRFFTRU4gfCAoaW5zdGFuY2UgPDwgT0NUT1NQSU1fUENSX0RRU1NSQ19Qb3MpKSk7CisgICAgICB9CiAKICAgICAgIGlmICgoY2ZnLT5JT0xvd1BvcnQgJiBPQ1RPU1BJTV9QQ1JfSU9MRU4pICE9IDBVKQogICAgICAgewogICAgICAgICBNT0RJRllfUkVHKE9DVE9TUElNLT5QQ1JbKChjZmctPklPTG93UG9ydC0xVSkmIE9TUElfSU9NX1BPUlRfTUFTSyldLCAoT0NUT1NQSU1fUENSX0lPTEVOIHwgT0NUT1NQSU1fUENSX0lPTFNSQyksCiAgICAgICAgICAgICAgICAgICAgKE9DVE9TUElNX1BDUl9JT0xFTiB8IChpbnN0YW5jZSA8PCAoT0NUT1NQSU1fUENSX0lPTFNSQ19Qb3MrMVUpKSkpOwogICAgICAgfQotICAgICAgZWxzZQorICAgICAgZWxzZSBpZiAoY2ZnLT5JT0xvd1BvcnQgIT0gSEFMX09TUElNX0lPUE9SVF9OT05FKQogICAgICAgewogICAgICAgICBNT0RJRllfUkVHKE9DVE9TUElNLT5QQ1JbKChjZmctPklPTG93UG9ydC0xVSkmIE9TUElfSU9NX1BPUlRfTUFTSyldLCAoT0NUT1NQSU1fUENSX0lPSEVOIHwgT0NUT1NQSU1fUENSX0lPSFNSQyksCiAgICAgICAgICAgICAgICAgICAgKE9DVE9TUElNX1BDUl9JT0hFTiB8IChpbnN0YW5jZSA8PCAoT0NUT1NQSU1fUENSX0lPSFNSQ19Qb3MrMVUpKSkpOwogICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAgLyogTm90aGluZyB0byBkbyAqLworICAgICAgfQogCiAgICAgICBpZiAoKGNmZy0+SU9IaWdoUG9ydCAmIE9DVE9TUElNX1BDUl9JT0xFTikgIT0gMFUpCiAgICAgICB7CiAgICAgICAgIE1PRElGWV9SRUcoT0NUT1NQSU0tPlBDUlsoKGNmZy0+SU9IaWdoUG9ydC0xVSkmIE9TUElfSU9NX1BPUlRfTUFTSyldLCAoT0NUT1NQSU1fUENSX0lPTEVOIHwgT0NUT1NQSU1fUENSX0lPTFNSQyksCiAgICAgICAgICAgICAgICAgICAgKE9DVE9TUElNX1BDUl9JT0xFTiB8IE9DVE9TUElNX1BDUl9JT0xTUkNfMCB8IChpbnN0YW5jZSA8PCAoT0NUT1NQSU1fUENSX0lPTFNSQ19Qb3MrMVUpKSkpOwogICAgICAgfQotICAgICAgZWxzZQorICAgICAgZWxzZSBpZiAoY2ZnLT5JT0hpZ2hQb3J0ICE9IEhBTF9PU1BJTV9JT1BPUlRfTk9ORSkKICAgICAgIHsKICAgICAgICAgTU9ESUZZX1JFRyhPQ1RPU1BJTS0+UENSWygoY2ZnLT5JT0hpZ2hQb3J0LTFVKSYgT1NQSV9JT01fUE9SVF9NQVNLKV0sIChPQ1RPU1BJTV9QQ1JfSU9IRU4gfCBPQ1RPU1BJTV9QQ1JfSU9IU1JDKSwKICAgICAgICAgICAgICAgICAgICAoT0NUT1NQSU1fUENSX0lPSEVOIHwgT0NUT1NQSU1fUENSX0lPSFNSQ18wIHwgKGluc3RhbmNlIDw8IChPQ1RPU1BJTV9QQ1JfSU9IU1JDX1BvcysxVSkpKSk7CiAgICAgICB9Ci0jaWYgZGVmaW5lZCAoT0NUT1NQSU1fQ1JfTVVYRU4pCisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgICB9CisjaWYgICBkZWZpbmVkIChPQ1RPU1BJTV9DUl9NVVhFTikKICAgICB9CiAjZW5kaWYKIApAQCAtMzAxNCwxMiArMzA4OSwxMiBAQAogCiAgICAgaWYgKGluc3RhbmNlX25iID09IDJVKQogICAgIHsKLSNpZiBkZWZpbmVkIChPQ1RPU1BJTV9DUl9NVVhFTikKKyNpZiAgIGRlZmluZWQgKE9DVE9TUElNX0NSX01VWEVOKQogICAgICAgaWYgKChPQ1RPU1BJTS0+Q1IgJiBPQ1RPU1BJTV9DUl9NVVhFTikgPT0gMFUpCiAgICAgICB7CiAjZW5kaWYKICAgICAgICAgdmFsdWUgPSAoT0NUT1NQSU1fUENSX0NMS1NSQyB8IE9DVE9TUElNX1BDUl9EUVNTUkMgfCBPQ1RPU1BJTV9QQ1JfTkNTU1JDIHwgT0NUT1NQSU1fUENSX0lPTFNSQ18xIHwgT0NUT1NQSU1fUENSX0lPSFNSQ18xKTsKLSNpZiBkZWZpbmVkIChPQ1RPU1BJTV9DUl9NVVhFTikKKyNpZiAgIGRlZmluZWQgKE9DVE9TUElNX0NSX01VWEVOKQogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfcGNkLmMgYi9TcmMvc3RtMzJsNHh4X2hhbF9wY2QuYwppbmRleCAyMGMzNzFiLi44MzU1NGFjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9wY2QuYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF9wY2QuYwpAQCAtOTQsNiArOTQsOCBAQAogCiAjaWYgZGVmaW5lZCAoVVNCKQogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFBDRF9FUF9JU1JfSGFuZGxlcihQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCk7CitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9EQl9UcmFuc21pdChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgUENEX0VQVHlwZURlZiAqZXAsIHVpbnQxNl90IHdFUFZhbCk7CitzdGF0aWMgdWludDE2X3QgSEFMX1BDRF9FUF9EQl9SZWNlaXZlKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCBQQ0RfRVBUeXBlRGVmICplcCwgdWludDE2X3Qgd0VQVmFsKTsKICNlbmRpZiAvKiBkZWZpbmVkIChVU0IpICovCiAvKioKICAgKiBAfQpAQCAtMTA1LDggKzEwNyw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgUENEX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwotICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgIyMjIyMgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMjYxLDcgKzI2MywxMCBAQAogICBocGNkLT5TdGF0ZSA9IEhBTF9QQ0RfU1RBVEVfQlVTWTsKIAogICAvKiBTdG9wIERldmljZSAqLwotICAodm9pZClIQUxfUENEX1N0b3AoaHBjZCk7CisgIGlmIChVU0JfU3RvcERldmljZShocGNkLT5JbnN0YW5jZSkgIT0gSEFMX09LKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQogCiAjaWYgKFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgaWYgKGhwY2QtPk1zcERlSW5pdENhbGxiYWNrID09IE5VTEwpCkBAIC01NzUsNyArNTgwLDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBVblJlZ2lzdGVyIHRoZSBVU0IgUENEIERhdGEgT1VUIFN0YWdlIENhbGxiYWNrCisgICogQGJyaWVmICBVbnJlZ2lzdGVyIHRoZSBVU0IgUENEIERhdGEgT1VUIFN0YWdlIENhbGxiYWNrCiAgICogICAgICAgICBVU0IgUENEIERhdGEgT1VUIFN0YWdlIENhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgSEFMX1BDRF9EYXRhT3V0U3RhZ2VDYWxsYmFjaygpIHByZWRlZmluZWQgY2FsbGJhY2sKICAgKiBAcGFyYW0gIGhwY2QgUENEIGhhbmRsZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwpAQCAtNjQ4LDcgKzY1Myw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgVW5SZWdpc3RlciB0aGUgVVNCIFBDRCBEYXRhIElOIFN0YWdlIENhbGxiYWNrCisgICogQGJyaWVmICBVbnJlZ2lzdGVyIHRoZSBVU0IgUENEIERhdGEgSU4gU3RhZ2UgQ2FsbGJhY2sKICAgKiAgICAgICAgIFVTQiBQQ0QgRGF0YSBPVVQgU3RhZ2UgQ2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBIQUxfUENEX0RhdGFJblN0YWdlQ2FsbGJhY2soKSBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtICBocGNkIFBDRCBoYW5kbGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTcyMSw3ICs3MjYsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFVuUmVnaXN0ZXIgdGhlIFVTQiBQQ0QgSXNvIE9VVCBpbmNvbXBsZXRlIENhbGxiYWNrCisgICogQGJyaWVmICBVbnJlZ2lzdGVyIHRoZSBVU0IgUENEIElzbyBPVVQgaW5jb21wbGV0ZSBDYWxsYmFjawogICAqICAgICAgICAgVVNCIFBDRCBJc28gT1VUIGluY29tcGxldGUgQ2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBIQUxfUENEX0lTT09VVEluY29tcGxldGVDYWxsYmFjaygpIHByZWRlZmluZWQgY2FsbGJhY2sKICAgKiBAcGFyYW0gIGhwY2QgUENEIGhhbmRsZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwpAQCAtNzk0LDcgKzc5OSw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgVW5SZWdpc3RlciB0aGUgVVNCIFBDRCBJc28gSU4gaW5jb21wbGV0ZSBDYWxsYmFjaworICAqIEBicmllZiAgVW5yZWdpc3RlciB0aGUgVVNCIFBDRCBJc28gSU4gaW5jb21wbGV0ZSBDYWxsYmFjawogICAqICAgICAgICAgVVNCIFBDRCBJc28gSU4gaW5jb21wbGV0ZSBDYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIEhBTF9QQ0RfSVNPSU5JbmNvbXBsZXRlQ2FsbGJhY2soKSBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtICBocGNkIFBDRCBoYW5kbGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTg2Nyw3ICs4NzIsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFVuUmVnaXN0ZXIgdGhlIFVTQiBQQ0QgQkNEIENhbGxiYWNrCisgICogQGJyaWVmICBVbnJlZ2lzdGVyIHRoZSBVU0IgUENEIEJDRCBDYWxsYmFjawogICAqICAgICAgICAgVVNCIEJDRCBDYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIEhBTF9QQ0RFeF9CQ0RfQ2FsbGJhY2soKSBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtICBocGNkIFBDRCBoYW5kbGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTk0MCw3ICs5NDUsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFVuUmVnaXN0ZXIgdGhlIFVTQiBQQ0QgTFBNIENhbGxiYWNrCisgICogQGJyaWVmICBVbnJlZ2lzdGVyIHRoZSBVU0IgUENEIExQTSBDYWxsYmFjawogICAqICAgICAgICAgVVNCIExQTSBDYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIEhBTF9QQ0RFeF9MUE1fQ2FsbGJhY2soKSBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtICBocGNkIFBDRCBoYW5kbGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTk3Nyw4ICs5ODIsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIFBDRF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIElucHV0IGFuZCBPdXRwdXQgb3BlcmF0aW9uIGZ1bmN0aW9ucwotICogIEBicmllZiAgIERhdGEgdHJhbnNmZXJzIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgRGF0YSB0cmFuc2ZlcnMgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBJTyBvcGVyYXRpb24gZnVuY3Rpb25zICMjIyMjCkBAIC0xMDEwLDkgKzEwMTUsMTAgQEAKICAgICBVU0J4LT5HQ0NGRyB8PSBVU0JfT1RHX0dDQ0ZHX1BXUkRXTjsKICAgfQogI2VuZGlmIC8qIGRlZmluZWQgKFVTQl9PVEdfRlMpICovCi0gICh2b2lkKVVTQl9EZXZDb25uZWN0KGhwY2QtPkluc3RhbmNlKTsKICAgX19IQUxfUENEX0VOQUJMRShocGNkKTsKKyAgKHZvaWQpVVNCX0RldkNvbm5lY3QoaHBjZC0+SW5zdGFuY2UpOwogICBfX0hBTF9VTkxPQ0soaHBjZCk7CisKICAgcmV0dXJuIEhBTF9PSzsKIH0KIApAQCAtMTAyMywyMCArMTAyOSwyOSBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9TdG9wKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKQogeworI2lmIGRlZmluZWQgKFVTQl9PVEdfRlMpCisgIFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCA9IGhwY2QtPkluc3RhbmNlOworI2VuZGlmIC8qIGRlZmluZWQgKFVTQl9PVEdfRlMpICovCisKICAgX19IQUxfTE9DSyhocGNkKTsKICAgX19IQUxfUENEX0RJU0FCTEUoaHBjZCk7Ci0KLSAgaWYgKFVTQl9TdG9wRGV2aWNlKGhwY2QtPkluc3RhbmNlKSAhPSBIQUxfT0spCi0gIHsKLSAgICBfX0hBTF9VTkxPQ0soaHBjZCk7Ci0gICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgfQotCiAgICh2b2lkKVVTQl9EZXZEaXNjb25uZWN0KGhwY2QtPkluc3RhbmNlKTsKKworI2lmIGRlZmluZWQgKFVTQl9PVEdfRlMpCisgICh2b2lkKVVTQl9GbHVzaFR4RmlmbyhocGNkLT5JbnN0YW5jZSwgMHgxMFUpOworCisgIGlmIChocGNkLT5Jbml0LmJhdHRlcnlfY2hhcmdpbmdfZW5hYmxlID09IDFVKQorICB7CisgICAgLyogRGlzYWJsZSBVU0IgVHJhbnNjZWl2ZXIgKi8KKyAgICBVU0J4LT5HQ0NGRyAmPSB+KFVTQl9PVEdfR0NDRkdfUFdSRFdOKTsKKyAgfQorI2VuZGlmIC8qIGRlZmluZWQgKFVTQl9PVEdfRlMpICovCisKICAgX19IQUxfVU5MT0NLKGhwY2QpOwogCiAgIHJldHVybiBIQUxfT0s7CiB9CisKICNpZiBkZWZpbmVkIChVU0JfT1RHX0ZTKQogLyoqCiAgICogQGJyaWVmICBIYW5kbGVzIFBDRCBpbnRlcnJ1cHQgcmVxdWVzdC4KQEAgLTEwNjYsNyArMTA4MSw3IEBACiAgICAgICBfX0hBTF9QQ0RfQ0xFQVJfRkxBRyhocGNkLCBVU0JfT1RHX0dJTlRTVFNfTU1JUyk7CiAgICAgfQogCi0gICAgIC8qIEhhbmRsZSBSeFFMZXZlbCBJbnRlcnJ1cHQgKi8KKyAgICAvKiBIYW5kbGUgUnhRTGV2ZWwgSW50ZXJydXB0ICovCiAgICAgaWYgKF9fSEFMX1BDRF9HRVRfRkxBRyhocGNkLCBVU0JfT1RHX0dJTlRTVFNfUlhGTFZMKSkKICAgICB7CiAgICAgICBVU0JfTUFTS19JTlRFUlJVUFQoaHBjZC0+SW5zdGFuY2UsIFVTQl9PVEdfR0lOVFNUU19SWEZMVkwpOwpAQCAtMTcxMyw4ICsxNzI4LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBQQ0RfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgbWFuYWdlbWVudCBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgIG1hbmFnZW1lbnQgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zICMjIyMjCkBAIC0xNzQ4LDYgKzE3NjMsNyBAQAogI2VuZGlmIC8qIGRlZmluZWQgKFVTQl9PVEdfRlMpICovCiAgICh2b2lkKVVTQl9EZXZDb25uZWN0KGhwY2QtPkluc3RhbmNlKTsKICAgX19IQUxfVU5MT0NLKGhwY2QpOworCiAgIHJldHVybiBIQUxfT0s7CiB9CiAKQEAgLTE3NjAsMTAgKzE3NzYsMTEgQEAKIHsKICNpZiBkZWZpbmVkIChVU0JfT1RHX0ZTKQogICBVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQnggPSBocGNkLT5JbnN0YW5jZTsKLQogI2VuZGlmIC8qIGRlZmluZWQgKFVTQl9PVEdfRlMpICovCisKICAgX19IQUxfTE9DSyhocGNkKTsKICAgKHZvaWQpVVNCX0RldkRpc2Nvbm5lY3QoaHBjZC0+SW5zdGFuY2UpOworCiAjaWYgZGVmaW5lZCAoVVNCX09UR19GUykKICAgaWYgKGhwY2QtPkluaXQuYmF0dGVyeV9jaGFyZ2luZ19lbmFibGUgPT0gMVUpCiAgIHsKQEAgLTE3NzEsNyArMTc4OCw5IEBACiAgICAgVVNCeC0+R0NDRkcgJj0gfihVU0JfT1RHX0dDQ0ZHX1BXUkRXTik7CiAgIH0KICNlbmRpZiAvKiBkZWZpbmVkIChVU0JfT1RHX0ZTKSAqLworCiAgIF9fSEFMX1VOTE9DSyhocGNkKTsKKwogICByZXR1cm4gSEFMX09LOwogfQogCkBAIC0xNzg3LDYgKzE4MDYsNyBAQAogICBocGNkLT5VU0JfQWRkcmVzcyA9IGFkZHJlc3M7CiAgICh2b2lkKVVTQl9TZXREZXZBZGRyZXNzKGhwY2QtPkluc3RhbmNlLCBhZGRyZXNzKTsKICAgX19IQUxfVU5MT0NLKGhwY2QpOworCiAgIHJldHVybiBIQUxfT0s7CiB9CiAvKioKQEAgLTE5MjQsNiArMTk0NCwxMCBAQAogICAvKnNldHVwIGFuZCBzdGFydCB0aGUgWGZlciAqLwogICBlcC0+eGZlcl9idWZmID0gcEJ1ZjsKICAgZXAtPnhmZXJfbGVuID0gbGVuOworI2lmIGRlZmluZWQgKFVTQikKKyAgZXAtPnhmZXJfZmlsbF9kYiA9IDFVOworICBlcC0+eGZlcl9sZW5fZGIgPSBsZW47CisjZW5kaWYgLyogZGVmaW5lZCAoVVNCKSAqLwogICBlcC0+eGZlcl9jb3VudCA9IDBVOwogICBlcC0+aXNfaW4gPSAxVTsKICAgZXAtPm51bSA9IGVwX2FkZHIgJiBFUF9BRERSX01TSzsKQEAgLTIwNjYsOCArMjA5MCw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgUENEX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICMjIyMjIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zICMjIyMjCkBAIC0yMjQ4LDkgKzIyNzIsNyBAQAogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFBDRF9FUF9JU1JfSGFuZGxlcihQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCkKIHsKICAgUENEX0VQVHlwZURlZiAqZXA7Ci0gIHVpbnQxNl90IGNvdW50OwotICB1aW50MTZfdCB3SXN0cjsKLSAgdWludDE2X3Qgd0VQVmFsOworICB1aW50MTZfdCBjb3VudCwgd0lzdHIsIHdFUFZhbCwgVHhCeXRlTmJyZTsKICAgdWludDhfdCBlcGluZGV4OwogCiAgIC8qIHN0YXkgaW4gbG9vcCB3aGlsZSBwZW5kaW5nIGludGVycnVwdHMgKi8KQEAgLTIzMTcsNyArMjMzOSw2IEBACiAgICAgICAgICAgSEFMX1BDRF9TZXR1cFN0YWdlQ2FsbGJhY2soaHBjZCk7CiAjZW5kaWYgLyogVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgICAgICAgIH0KLQogICAgICAgICBlbHNlIGlmICgod0VQVmFsICYgVVNCX0VQX0NUUl9SWCkgIT0gMFUpCiAgICAgICAgIHsKICAgICAgICAgICBQQ0RfQ0xFQVJfUlhfRVBfQ1RSKGhwY2QtPkluc3RhbmNlLCBQQ0RfRU5EUDApOwpAQCAtMjM0OCwxOSArMjM2OSwyMCBAQAogICAgIGVsc2UKICAgICB7CiAgICAgICAvKiBEZWNvZGUgYW5kIHNlcnZpY2Ugbm9uIGNvbnRyb2wgZW5kcG9pbnRzIGludGVycnVwdCAqLwotCiAgICAgICAvKiBwcm9jZXNzIHJlbGF0ZWQgZW5kcG9pbnQgcmVnaXN0ZXIgKi8KICAgICAgIHdFUFZhbCA9IFBDRF9HRVRfRU5EUE9JTlQoaHBjZC0+SW5zdGFuY2UsIGVwaW5kZXgpOworCiAgICAgICBpZiAoKHdFUFZhbCAmIFVTQl9FUF9DVFJfUlgpICE9IDBVKQogICAgICAgewogICAgICAgICAvKiBjbGVhciBpbnQgZmxhZyAqLwogICAgICAgICBQQ0RfQ0xFQVJfUlhfRVBfQ1RSKGhwY2QtPkluc3RhbmNlLCBlcGluZGV4KTsKICAgICAgICAgZXAgPSAmaHBjZC0+T1VUX2VwW2VwaW5kZXhdOwogCi0gICAgICAgIC8qIE9VVCBkb3VibGUgQnVmZmVyaW5nICovCisgICAgICAgIC8qIE9VVCBTaW5nbGUgQnVmZmVyaW5nICovCiAgICAgICAgIGlmIChlcC0+ZG91YmxlYnVmZmVyID09IDBVKQogICAgICAgICB7CiAgICAgICAgICAgY291bnQgPSAodWludDE2X3QpUENEX0dFVF9FUF9SWF9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0pOworCiAgICAgICAgICAgaWYgKGNvdW50ICE9IDBVKQogICAgICAgICAgIHsKICAgICAgICAgICAgIFVTQl9SZWFkUE1BKGhwY2QtPkluc3RhbmNlLCBlcC0+eGZlcl9idWZmLCBlcC0+cG1hYWRyZXNzLCBjb3VudCk7CkBAIC0yMzY4LDI1ICsyMzkwLDM1IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgLyogZnJlZSBFUCBPVVQgQnVmZmVyICovCi0gICAgICAgICAgUENEX0ZyZWVVc2VyQnVmZmVyKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCAwVSk7Ci0KLSAgICAgICAgICBpZiAoKFBDRF9HRVRfRU5EUE9JTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0pICYgVVNCX0VQX0RUT0dfUlgpICE9IDBVKQorICAgICAgICAgIC8qIG1hbmFnZSBkb3VibGUgYnVmZmVyIGJ1bGsgb3V0ICovCisgICAgICAgICAgaWYgKGVwLT50eXBlID09IEVQX1RZUEVfQlVMSykKICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiByZWFkIGZyb20gZW5kcG9pbnQgQlVGMEFkZHIgYnVmZmVyICovCi0gICAgICAgICAgICBjb3VudCA9ICh1aW50MTZfdClQQ0RfR0VUX0VQX0RCVUYwX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSk7Ci0gICAgICAgICAgICBpZiAoY291bnQgIT0gMFUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFVTQl9SZWFkUE1BKGhwY2QtPkluc3RhbmNlLCBlcC0+eGZlcl9idWZmLCBlcC0+cG1hYWRkcjAsIGNvdW50KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50ID0gSEFMX1BDRF9FUF9EQl9SZWNlaXZlKGhwY2QsIGVwLCB3RVBWYWwpOwogICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCisgICAgICAgICAgZWxzZSAvKiBtYW5hZ2UgZG91YmxlIGJ1ZmZlciBpc28gb3V0ICovCiAgICAgICAgICAgewotICAgICAgICAgICAgLyogcmVhZCBmcm9tIGVuZHBvaW50IEJVRjFBZGRyIGJ1ZmZlciAqLwotICAgICAgICAgICAgY291bnQgPSAodWludDE2X3QpUENEX0dFVF9FUF9EQlVGMV9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0pOwotICAgICAgICAgICAgaWYgKGNvdW50ICE9IDBVKQorICAgICAgICAgICAgLyogZnJlZSBFUCBPVVQgQnVmZmVyICovCisgICAgICAgICAgICBQQ0RfRnJlZVVzZXJCdWZmZXIoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0sIDBVKTsKKworICAgICAgICAgICAgaWYgKChQQ0RfR0VUX0VORFBPSU5UKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtKSAmIFVTQl9FUF9EVE9HX1JYKSAhPSAwVSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgVVNCX1JlYWRQTUEoaHBjZC0+SW5zdGFuY2UsIGVwLT54ZmVyX2J1ZmYsIGVwLT5wbWFhZGRyMSwgY291bnQpOworICAgICAgICAgICAgICAvKiByZWFkIGZyb20gZW5kcG9pbnQgQlVGMEFkZHIgYnVmZmVyICovCisgICAgICAgICAgICAgIGNvdW50ID0gKHVpbnQxNl90KVBDRF9HRVRfRVBfREJVRjBfQ05UKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtKTsKKworICAgICAgICAgICAgICBpZiAoY291bnQgIT0gMFUpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVU0JfUmVhZFBNQShocGNkLT5JbnN0YW5jZSwgZXAtPnhmZXJfYnVmZiwgZXAtPnBtYWFkZHIwLCBjb3VudCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogcmVhZCBmcm9tIGVuZHBvaW50IEJVRjFBZGRyIGJ1ZmZlciAqLworICAgICAgICAgICAgICBjb3VudCA9ICh1aW50MTZfdClQQ0RfR0VUX0VQX0RCVUYxX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSk7CisKKyAgICAgICAgICAgICAgaWYgKGNvdW50ICE9IDBVKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVVNCX1JlYWRQTUEoaHBjZC0+SW5zdGFuY2UsIGVwLT54ZmVyX2J1ZmYsIGVwLT5wbWFhZGRyMSwgY291bnQpOworICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNDA1LDEwICsyNDM3LDEwIEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgKHZvaWQpSEFMX1BDRF9FUF9SZWNlaXZlKGhwY2QsIGVwLT5udW0sIGVwLT54ZmVyX2J1ZmYsIGVwLT54ZmVyX2xlbik7CisgICAgICAgICAgKHZvaWQpIFVTQl9FUFN0YXJ0WGZlcihocGNkLT5JbnN0YW5jZSwgZXApOwogICAgICAgICB9CiAKLSAgICAgIH0gLyogaWYoKHdFUFZhbCAmIEVQX0NUUl9SWCkgKi8KKyAgICAgIH0KIAogICAgICAgaWYgKCh3RVBWYWwgJiBVU0JfRVBfQ1RSX1RYKSAhPSAwVSkKICAgICAgIHsKQEAgLTI0MTcsMjkgKzI0NDksMjk0IEBACiAgICAgICAgIC8qIGNsZWFyIGludCBmbGFnICovCiAgICAgICAgIFBDRF9DTEVBUl9UWF9FUF9DVFIoaHBjZC0+SW5zdGFuY2UsIGVwaW5kZXgpOwogCi0gICAgICAgIC8qIG11bHRpLXBhY2tldCBvbiB0aGUgTk9OIGNvbnRyb2wgSU4gZW5kcG9pbnQgKi8KLSAgICAgICAgZXAtPnhmZXJfY291bnQgPSBQQ0RfR0VUX0VQX1RYX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSk7Ci0gICAgICAgIGVwLT54ZmVyX2J1ZmYgKz0gZXAtPnhmZXJfY291bnQ7Ci0KLSAgICAgICAgLyogWmVybyBMZW5ndGggUGFja2V0PyAqLwotICAgICAgICBpZiAoZXAtPnhmZXJfbGVuID09IDBVKQorICAgICAgICAvKiBNYW5hZ2UgYWxsIG5vbiBidWxrIHRyYW5zYWN0aW9uIG9yIEJ1bGsgU2luZ2xlIEJ1ZmZlciBUcmFuc2FjdGlvbiAqLworICAgICAgICBpZiAoKGVwLT50eXBlICE9IEVQX1RZUEVfQlVMSykgfHwKKyAgICAgICAgICAgICgoZXAtPnR5cGUgPT0gRVBfVFlQRV9CVUxLKSAmJiAoKHdFUFZhbCAmIFVTQl9FUF9LSU5EKSA9PSAwVSkpKQogICAgICAgICB7Ci0gICAgICAgICAgLyogVFggQ09NUExFVEUgKi8KKyAgICAgICAgICAvKiBtdWx0aS1wYWNrZXQgb24gdGhlIE5PTiBjb250cm9sIElOIGVuZHBvaW50ICovCisgICAgICAgICAgVHhCeXRlTmJyZSA9ICh1aW50MTZfdClQQ0RfR0VUX0VQX1RYX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSk7CisKKyAgICAgICAgICBpZiAoZXAtPnhmZXJfbGVuID4gVHhCeXRlTmJyZSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBlcC0+eGZlcl9sZW4gLT0gVHhCeXRlTmJyZTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGVwLT54ZmVyX2xlbiA9IDBVOworICAgICAgICAgIH0KKworICAgICAgICAgIC8qIFplcm8gTGVuZ3RoIFBhY2tldD8gKi8KKyAgICAgICAgICBpZiAoZXAtPnhmZXJfbGVuID09IDBVKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRYIENPTVBMRVRFICovCiAjaWYgKFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKLSAgICAgICAgICBocGNkLT5EYXRhSW5TdGFnZUNhbGxiYWNrKGhwY2QsIGVwLT5udW0pOworICAgICAgICAgICAgaHBjZC0+RGF0YUluU3RhZ2VDYWxsYmFjayhocGNkLCBlcC0+bnVtKTsKICNlbHNlCi0gICAgICAgICAgSEFMX1BDRF9EYXRhSW5TdGFnZUNhbGxiYWNrKGhwY2QsIGVwLT5udW0pOworICAgICAgICAgICAgSEFMX1BDRF9EYXRhSW5TdGFnZUNhbGxiYWNrKGhwY2QsIGVwLT5udW0pOwogI2VuZGlmIC8qIFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgLyogVHJhbnNmZXIgaXMgbm90IHlldCBEb25lICovCisgICAgICAgICAgICBlcC0+eGZlcl9idWZmICs9IFR4Qnl0ZU5icmU7CisgICAgICAgICAgICBlcC0+eGZlcl9jb3VudCArPSBUeEJ5dGVOYnJlOworICAgICAgICAgICAgKHZvaWQpVVNCX0VQU3RhcnRYZmVyKGhwY2QtPkluc3RhbmNlLCBlcCk7CisgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIC8qIGJ1bGsgaW4gZG91YmxlIGJ1ZmZlciBlbmFibGUgaW4gY2FzZSBvZiB0cmFuc2Zlckxlbj4gRXBfTXBzICovCiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICh2b2lkKUhBTF9QQ0RfRVBfVHJhbnNtaXQoaHBjZCwgZXAtPm51bSwgZXAtPnhmZXJfYnVmZiwgZXAtPnhmZXJfbGVuKTsKKyAgICAgICAgICAodm9pZClIQUxfUENEX0VQX0RCX1RyYW5zbWl0KGhwY2QsIGVwLCB3RVBWYWwpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICB9CisKICAgcmV0dXJuIEhBTF9PSzsKIH0KKworCisvKioKKyAgKiBAYnJpZWYgIE1hbmFnZSBkb3VibGUgYnVmZmVyIGJ1bGsgb3V0IHRyYW5zYWN0aW9uIGZyb20gSVNSCisgICogQHBhcmFtICBocGNkIFBDRCBoYW5kbGUKKyAgKiBAcGFyYW0gIGVwIGN1cnJlbnQgZW5kcG9pbnQgaGFuZGxlCisgICogQHBhcmFtICB3RVBWYWwgTGFzdCBzbmFwc2hvdCBvZiBFUFJ4IHJlZ2lzdGVyIHZhbHVlIHRha2VuIGluIElTUgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworc3RhdGljIHVpbnQxNl90IEhBTF9QQ0RfRVBfREJfUmVjZWl2ZShQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENEX0VQVHlwZURlZiAqZXAsIHVpbnQxNl90IHdFUFZhbCkKK3sKKyAgdWludDE2X3QgY291bnQ7CisKKyAgLyogTWFuYWdlIEJ1ZmZlcjAgT1VUICovCisgIGlmICgod0VQVmFsICYgVVNCX0VQX0RUT0dfUlgpICE9IDBVKQorICB7CisgICAgLyogR2V0IGNvdW50IG9mIHJlY2VpdmVkIERhdGEgb24gYnVmZmVyMCAqLworICAgIGNvdW50ID0gKHVpbnQxNl90KVBDRF9HRVRfRVBfREJVRjBfQ05UKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtKTsKKworICAgIGlmIChlcC0+eGZlcl9sZW4gPj0gY291bnQpCisgICAgeworICAgICAgZXAtPnhmZXJfbGVuIC09IGNvdW50OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgZXAtPnhmZXJfbGVuID0gMFU7CisgICAgfQorCisgICAgaWYgKGVwLT54ZmVyX2xlbiA9PSAwVSkKKyAgICB7CisgICAgICAvKiBzZXQgTkFLIHRvIE9VVCBlbmRwb2ludCBzaW5jZSBkb3VibGUgYnVmZmVyIGlzIGVuYWJsZWQgKi8KKyAgICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCBVU0JfRVBfUlhfTkFLKTsKKyAgICB9CisKKyAgICAvKiBDaGVjayBpZiBCdWZmZXIxIGlzIGluIGJsb2NrZWQgc2F0ZSB3aGljaCByZXF1aXJlcyB0byB0b2dnbGUgKi8KKyAgICBpZiAoKHdFUFZhbCAmIFVTQl9FUF9EVE9HX1RYKSAhPSAwVSkKKyAgICB7CisgICAgICBQQ0RfRnJlZVVzZXJCdWZmZXIoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0sIDBVKTsKKyAgICB9CisKKyAgICBpZiAoY291bnQgIT0gMFUpCisgICAgeworICAgICAgVVNCX1JlYWRQTUEoaHBjZC0+SW5zdGFuY2UsIGVwLT54ZmVyX2J1ZmYsIGVwLT5wbWFhZGRyMCwgY291bnQpOworICAgIH0KKyAgfQorICAvKiBNYW5hZ2UgQnVmZmVyIDEgRFRPR19SWD0wICovCisgIGVsc2UKKyAgeworICAgIC8qIEdldCBjb3VudCBvZiByZWNlaXZlZCBkYXRhICovCisgICAgY291bnQgPSAodWludDE2X3QpUENEX0dFVF9FUF9EQlVGMV9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0pOworCisgICAgaWYgKGVwLT54ZmVyX2xlbiA+PSBjb3VudCkKKyAgICB7CisgICAgICBlcC0+eGZlcl9sZW4gLT0gY291bnQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBlcC0+eGZlcl9sZW4gPSAwVTsKKyAgICB9CisKKyAgICBpZiAoZXAtPnhmZXJfbGVuID09IDBVKQorICAgIHsKKyAgICAgIC8qIHNldCBOQUsgb24gdGhlIGN1cnJlbnQgZW5kcG9pbnQgKi8KKyAgICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCBVU0JfRVBfUlhfTkFLKTsKKyAgICB9CisKKyAgICAvKk5lZWQgdG8gRnJlZVVzZXIgQnVmZmVyKi8KKyAgICBpZiAoKHdFUFZhbCAmIFVTQl9FUF9EVE9HX1RYKSA9PSAwVSkKKyAgICB7CisgICAgICBQQ0RfRnJlZVVzZXJCdWZmZXIoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0sIDBVKTsKKyAgICB9CisKKyAgICBpZiAoY291bnQgIT0gMFUpCisgICAgeworICAgICAgVVNCX1JlYWRQTUEoaHBjZC0+SW5zdGFuY2UsIGVwLT54ZmVyX2J1ZmYsIGVwLT5wbWFhZGRyMSwgY291bnQpOworICAgIH0KKyAgfQorCisgIHJldHVybiBjb3VudDsKK30KKworCisvKioKKyAgKiBAYnJpZWYgIE1hbmFnZSBkb3VibGUgYnVmZmVyIGJ1bGsgSU4gdHJhbnNhY3Rpb24gZnJvbSBJU1IKKyAgKiBAcGFyYW0gIGhwY2QgUENEIGhhbmRsZQorICAqIEBwYXJhbSAgZXAgY3VycmVudCBlbmRwb2ludCBoYW5kbGUKKyAgKiBAcGFyYW0gIHdFUFZhbCBMYXN0IHNuYXBzaG90IG9mIEVQUnggcmVnaXN0ZXIgdmFsdWUgdGFrZW4gaW4gSVNSCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9EQl9UcmFuc21pdChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDRF9FUFR5cGVEZWYgKmVwLCB1aW50MTZfdCB3RVBWYWwpCit7CisgIHVpbnQzMl90IGxlbjsKKyAgdWludDE2X3QgVHhCeXRlTmJyZTsKKworICAvKiBEYXRhIEJ1ZmZlcjAgQUNLIHJlY2VpdmVkICovCisgIGlmICgod0VQVmFsICYgVVNCX0VQX0RUT0dfVFgpICE9IDBVKQorICB7CisgICAgLyogbXVsdGktcGFja2V0IG9uIHRoZSBOT04gY29udHJvbCBJTiBlbmRwb2ludCAqLworICAgIFR4Qnl0ZU5icmUgPSAodWludDE2X3QpUENEX0dFVF9FUF9EQlVGMF9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0pOworCisgICAgaWYgKGVwLT54ZmVyX2xlbiA+IFR4Qnl0ZU5icmUpCisgICAgeworICAgICAgZXAtPnhmZXJfbGVuIC09IFR4Qnl0ZU5icmU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBlcC0+eGZlcl9sZW4gPSAwVTsKKyAgICB9CisgICAgLyogVHJhbnNmZXIgaXMgY29tcGxldGVkICovCisgICAgaWYgKGVwLT54ZmVyX2xlbiA9PSAwVSkKKyAgICB7CisgICAgICAvKiBUWCBDT01QTEVURSAqLworI2lmIChVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgICAgICBocGNkLT5EYXRhSW5TdGFnZUNhbGxiYWNrKGhwY2QsIGVwLT5udW0pOworI2Vsc2UKKyAgICAgIEhBTF9QQ0RfRGF0YUluU3RhZ2VDYWxsYmFjayhocGNkLCBlcC0+bnVtKTsKKyNlbmRpZiAvKiBVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKworICAgICAgaWYgKCh3RVBWYWwgJiBVU0JfRVBfRFRPR19SWCkgIT0gMFUpCisgICAgICB7CisgICAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMVUpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIC8qIFRyYW5zZmVyIGlzIG5vdCB5ZXQgRG9uZSAqLworICAgIHsKKyAgICAgIC8qIG5lZWQgdG8gRnJlZSBVU0IgQnVmZiAqLworICAgICAgaWYgKCh3RVBWYWwgJiBVU0JfRVBfRFRPR19SWCkgIT0gMFUpCisgICAgICB7CisgICAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMVUpOworICAgICAgfQorCisgICAgICAvKiBTdGlsbCB0aGVyZSBpcyBkYXRhIHRvIEZpbGwgaW4gdGhlIG5leHQgQnVmZmVyICovCisgICAgICBpZiAoZXAtPnhmZXJfZmlsbF9kYiA9PSAxVSkKKyAgICAgIHsKKyAgICAgICAgZXAtPnhmZXJfYnVmZiArPSBUeEJ5dGVOYnJlOworICAgICAgICBlcC0+eGZlcl9jb3VudCArPSBUeEJ5dGVOYnJlOworCisgICAgICAgIC8qIENhbGN1bGF0ZSB0aGUgbGVuIG9mIHRoZSBuZXcgYnVmZmVyIHRvIGZpbGwgKi8KKyAgICAgICAgaWYgKGVwLT54ZmVyX2xlbl9kYiA+PSBlcC0+bWF4cGFja2V0KQorICAgICAgICB7CisgICAgICAgICAgbGVuID0gZXAtPm1heHBhY2tldDsKKyAgICAgICAgICBlcC0+eGZlcl9sZW5fZGIgLT0gbGVuOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVwLT54ZmVyX2xlbl9kYiA9PSAwVSkKKyAgICAgICAgeworICAgICAgICAgIGxlbiA9IFR4Qnl0ZU5icmU7CisgICAgICAgICAgZXAtPnhmZXJfZmlsbF9kYiA9IDBVOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGVwLT54ZmVyX2ZpbGxfZGIgPSAwVTsKKyAgICAgICAgICBsZW4gPSBlcC0+eGZlcl9sZW5fZGI7CisgICAgICAgICAgZXAtPnhmZXJfbGVuX2RiID0gMFU7CisgICAgICAgIH0KKworICAgICAgICAvKiBXcml0ZSByZW1haW5pbmcgRGF0YSB0byBCdWZmZXIgKi8KKyAgICAgICAgLyogU2V0IHRoZSBEb3VibGUgYnVmZmVyIGNvdW50ZXIgZm9yIHBtYSBidWZmZXIxICovCisgICAgICAgIFBDRF9TRVRfRVBfREJVRjBfQ05UKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCBlcC0+aXNfaW4sIGxlbik7CisKKyAgICAgICAgLyogQ29weSB1c2VyIGJ1ZmZlciB0byBVU0IgUE1BICovCisgICAgICAgIFVTQl9Xcml0ZVBNQShocGNkLT5JbnN0YW5jZSwgZXAtPnhmZXJfYnVmZiwgIGVwLT5wbWFhZGRyMCwgKHVpbnQxNl90KWxlbik7CisgICAgICB9CisgICAgfQorICB9CisgIGVsc2UgLyogRGF0YSBCdWZmZXIxIEFDSyByZWNlaXZlZCAqLworICB7CisgICAgLyogbXVsdGktcGFja2V0IG9uIHRoZSBOT04gY29udHJvbCBJTiBlbmRwb2ludCAqLworICAgIFR4Qnl0ZU5icmUgPSAodWludDE2X3QpUENEX0dFVF9FUF9EQlVGMV9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0pOworCisgICAgaWYgKGVwLT54ZmVyX2xlbiA+PSBUeEJ5dGVOYnJlKQorICAgIHsKKyAgICAgIGVwLT54ZmVyX2xlbiAtPSBUeEJ5dGVOYnJlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgZXAtPnhmZXJfbGVuID0gMFU7CisgICAgfQorCisgICAgLyogVHJhbnNmZXIgaXMgY29tcGxldGVkICovCisgICAgaWYgKGVwLT54ZmVyX2xlbiA9PSAwVSkKKyAgICB7CisgICAgICAvKiBUWCBDT01QTEVURSAqLworI2lmIChVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgICAgICBocGNkLT5EYXRhSW5TdGFnZUNhbGxiYWNrKGhwY2QsIGVwLT5udW0pOworI2Vsc2UKKyAgICAgIEhBTF9QQ0RfRGF0YUluU3RhZ2VDYWxsYmFjayhocGNkLCBlcC0+bnVtKTsKKyNlbmRpZiAvKiBVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKworICAgICAgLypuZWVkIHRvIEZyZWUgVVNCIEJ1ZmYqLworICAgICAgaWYgKCh3RVBWYWwgJiBVU0JfRVBfRFRPR19SWCkgPT0gMFUpCisgICAgICB7CisgICAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMVUpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIC8qIFRyYW5zZmVyIGlzIG5vdCB5ZXQgRG9uZSAqLworICAgIHsKKyAgICAgIC8qIG5lZWQgdG8gRnJlZSBVU0IgQnVmZiAqLworICAgICAgaWYgKCh3RVBWYWwgJiBVU0JfRVBfRFRPR19SWCkgPT0gMFUpCisgICAgICB7CisgICAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMVUpOworICAgICAgfQorCisgICAgICAvKiBTdGlsbCB0aGVyZSBpcyBkYXRhIHRvIEZpbGwgaW4gdGhlIG5leHQgQnVmZmVyICovCisgICAgICBpZiAoZXAtPnhmZXJfZmlsbF9kYiA9PSAxVSkKKyAgICAgIHsKKyAgICAgICAgZXAtPnhmZXJfYnVmZiArPSBUeEJ5dGVOYnJlOworICAgICAgICBlcC0+eGZlcl9jb3VudCArPSBUeEJ5dGVOYnJlOworCisgICAgICAgIC8qIENhbGN1bGF0ZSB0aGUgbGVuIG9mIHRoZSBuZXcgYnVmZmVyIHRvIGZpbGwgKi8KKyAgICAgICAgaWYgKGVwLT54ZmVyX2xlbl9kYiA+PSBlcC0+bWF4cGFja2V0KQorICAgICAgICB7CisgICAgICAgICAgbGVuID0gZXAtPm1heHBhY2tldDsKKyAgICAgICAgICBlcC0+eGZlcl9sZW5fZGIgLT0gbGVuOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVwLT54ZmVyX2xlbl9kYiA9PSAwVSkKKyAgICAgICAgeworICAgICAgICAgIGxlbiA9IFR4Qnl0ZU5icmU7CisgICAgICAgICAgZXAtPnhmZXJfZmlsbF9kYiA9IDBVOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGxlbiA9IGVwLT54ZmVyX2xlbl9kYjsKKyAgICAgICAgICBlcC0+eGZlcl9sZW5fZGIgPSAwVTsKKyAgICAgICAgICBlcC0+eGZlcl9maWxsX2RiID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNldCB0aGUgRG91YmxlIGJ1ZmZlciBjb3VudGVyIGZvciBwbWFidWZmZXIxICovCisgICAgICAgIFBDRF9TRVRfRVBfREJVRjFfQ05UKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCBlcC0+aXNfaW4sIGxlbik7CisKKyAgICAgICAgLyogQ29weSB0aGUgdXNlciBidWZmZXIgdG8gVVNCIFBNQSAqLworICAgICAgICBVU0JfV3JpdGVQTUEoaHBjZC0+SW5zdGFuY2UsIGVwLT54ZmVyX2J1ZmYsICBlcC0+cG1hYWRkcjEsICh1aW50MTZfdClsZW4pOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8qZW5hYmxlIGVuZHBvaW50IElOKi8KKyAgUENEX1NFVF9FUF9UWF9TVEFUVVMoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0sIFVTQl9FUF9UWF9WQUxJRCk7CisKKyAgcmV0dXJuIEhBTF9PSzsKK30KKwogI2VuZGlmIC8qIGRlZmluZWQgKFVTQikgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2hhbF9wY2RfZXguYyBiL1NyYy9zdG0zMmw0eHhfaGFsX3BjZF9leC5jCmluZGV4IDVkMTMxNjUuLjBjNzU0MjUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsX3BjZF9leC5jCisrKyBiL1NyYy9zdG0zMmw0eHhfaGFsX3BjZF9leC5jCkBAIC00OSw3ICs0OSw3IEBACiAKIC8qKiBAZGVmZ3JvdXAgUENERXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCiAgICogQGJyaWVmICAgIFBDREV4IGNvbnRyb2wgZnVuY3Rpb25zCi0gKgorICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICMjIyMjIEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMjYwLDcgKzI2MCw3IEBACiAgIFVTQngtPkdDQ0ZHICY9IH4oVVNCX09UR19HQ0NGR19QREVOKTsKICAgVVNCeC0+R0NDRkcgJj0gfihVU0JfT1RHX0dDQ0ZHX1NERU4pOwogCi0gIC8qIFBvd2VyIERvd24gVVNCIHRyYW5jZWl2ZXIgICovCisgIC8qIFBvd2VyIERvd24gVVNCIHRyYW5zY2VpdmVyICAqLwogICBVU0J4LT5HQ0NGRyAmPSB+KFVTQl9PVEdfR0NDRkdfUFdSRFdOKTsKIAogICAvKiBFbmFibGUgQmF0dGVyeSBjaGFyZ2luZyAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfcXNwaS5jIGIvU3JjL3N0bTMybDR4eF9oYWxfcXNwaS5jCmluZGV4IGEzZmMwNzMuLjZkOWM3MTUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsX3FzcGkuYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF9xc3BpLmMKQEAgLTMxNiw5ICszMTYsNiBAQAogICB9CiAjZW5kaWYKIAotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhxc3BpKTsKLQogICBpZihocXNwaS0+U3RhdGUgPT0gSEFMX1FTUElfU1RBVEVfUkVTRVQpCiAgIHsKICAgICAvKiBBbGxvY2F0ZSBsb2NrIHJlc291cmNlIGFuZCBpbml0aWFsaXplIGl0ICovCkBAIC00MDgsOSArNDA1LDYgQEAKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhocXNwaSk7Ci0KICAgLyogRGlzYWJsZSB0aGUgUVNQSSBQZXJpcGhlcmFsIENsb2NrICovCiAgIF9fSEFMX1FTUElfRElTQUJMRShocXNwaSk7CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX3NhaS5jIGIvU3JjL3N0bTMybDR4eF9oYWxfc2FpLmMKaW5kZXggNThhZmEzYS4uZjBlODMyNSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfc2FpLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfc2FpLmMKQEAgLTI0NDMsNyArMjQ0Myw3IEBACiAgICovCiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU0FJX0Rpc2FibGUoU0FJX0hhbmRsZVR5cGVEZWYgKmhzYWkpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGNvdW50ID0gU0FJX0RFRkFVTFRfVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA3VSAvIDEwMDBVKTsKKyAgdWludDMyX3QgY291bnQgPSBTQUlfREVGQVVMVF9USU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvIDdVIC8gMTAwMFUpOwogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKICAgLyogRGlzYWJsZSB0aGUgU0FJIGluc3RhbmNlICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2hhbF9zZC5jIGIvU3JjL3N0bTMybDR4eF9oYWxfc2QuYwppbmRleCA4MGU0MTZlLi4zZjk5M2QzIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9zZC5jCisrKyBiL1NyYy9zdG0zMmw0eHhfaGFsX3NkLmMKQEAgLTQ4Miw2ICs0ODIsNyBAQAogICB1aW50MzJfdCBlcnJvcnN0YXRlOwogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CiAgIFNEX0luaXRUeXBlRGVmIEluaXQ7CisgIHVpbnQzMl90IHNkbW1jX2NsazsKIAogICAvKiBEZWZhdWx0IFNETU1DIHBlcmlwaGVyYWwgY29uZmlndXJhdGlvbiBmb3IgU0QgY2FyZCBpbml0aWFsaXphdGlvbiAqLwogICBJbml0LkNsb2NrRWRnZSAgICAgICAgICAgPSBTRE1NQ19DTE9DS19FREdFX1JJU0lORzsKQEAgLTQ5MSw3ICs0OTIsMjAgQEAKICAgSW5pdC5DbG9ja1Bvd2VyU2F2ZSAgICAgID0gU0RNTUNfQ0xPQ0tfUE9XRVJfU0FWRV9ESVNBQkxFOwogICBJbml0LkJ1c1dpZGUgICAgICAgICAgICAgPSBTRE1NQ19CVVNfV0lERV8xQjsKICAgSW5pdC5IYXJkd2FyZUZsb3dDb250cm9sID0gU0RNTUNfSEFSRFdBUkVfRkxPV19DT05UUk9MX0RJU0FCTEU7Ci0gIEluaXQuQ2xvY2tEaXYgICAgICAgICAgICA9IFNETU1DX0lOSVRfQ0xLX0RJVjsKKworICAvKiBJbml0IENsb2NrIHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIHRvIDQwMEtoeiovCisgIHNkbW1jX2NsayA9IEhBTF9SQ0NFeF9HZXRQZXJpcGhDTEtGcmVxKFJDQ19QRVJJUEhDTEtfU0RNTUMxKTsKKyAgaWYgKHNkbW1jX2NsayA9PSAwVSkKKyAgeworICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKKyAgICAgIGhzZC0+RXJyb3JDb2RlID0gU0RNTUNfRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisjaWYgIWRlZmluZWQoU1RNMzJMNFA1eHgpICYmICFkZWZpbmVkKFNUTTMyTDRRNXh4KSAmJiAhZGVmaW5lZChTVE0zMkw0UjV4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFI3eHgpICYmICFkZWZpbmVkKFNUTTMyTDRSOXh4KSAmJiAhZGVmaW5lZChTVE0zMkw0UzV4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFM3eHgpICYmICFkZWZpbmVkKFNUTTMyTDRTOXh4KQorICBJbml0LkNsb2NrRGl2ID0gKChzZG1tY19jbGsvNDAwMDAwVSkgLSAyVSk7CisjZWxzZQorICBJbml0LkNsb2NrRGl2ID0gc2RtbWNfY2xrLygyVSo0MDAwMDBVKTsKKyNlbmRpZgogCiAjaWYgZGVmaW5lZChTVE0zMkw0UDV4eCkgfHwgZGVmaW5lZChTVE0zMkw0UTV4eCkgfHwgZGVmaW5lZChTVE0zMkw0UjV4eCkgfHwgZGVmaW5lZChTVE0zMkw0Ujd4eCkgfHwgZGVmaW5lZChTVE0zMkw0Ujl4eCkgfHwgZGVmaW5lZChTVE0zMkw0UzV4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzd4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzl4eCkKICAgaWYoaHNkLT5Jbml0LlRyYW5zY2VpdmVyID09IFNETU1DX1RSQU5TQ0VJVkVSX0VOQUJMRSkKQEAgLTUyNSw2ICs1MzksMTUgQEAKICAgX19IQUxfU0RfRU5BQkxFKGhzZCk7CiAjZW5kaWYgLyogIVNUTTMyTDRQNXh4ICYmICFTVE0zMkw0UTV4eCAmJiAhU1RNMzJMNFI1eHggJiYgIVNUTTMyTDRSN3h4ICYmICFTVE0zMkw0Ujl4eCAmJiAhU1RNMzJMNFM1eHggJiYgIVNUTTMyTDRTN3h4ICYmICFTVE0zMkw0Uzl4eCAqLwogCisgIC8qIHdhaXQgNzQgQ3ljbGVzOiByZXF1aXJlZCBwb3dlciB1cCB3YWl0aW5nIHRpbWUgYmVmb3JlIHN0YXJ0aW5nCisgICAgIHRoZSBTRCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSAqLworI2lmICFkZWZpbmVkKFNUTTMyTDRQNXh4KSAmJiAhZGVmaW5lZChTVE0zMkw0UTV4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFI1eHgpICYmICFkZWZpbmVkKFNUTTMyTDRSN3h4KSAmJiAhZGVmaW5lZChTVE0zMkw0Ujl4eCkgJiYgIWRlZmluZWQoU1RNMzJMNFM1eHgpICYmICFkZWZpbmVkKFNUTTMyTDRTN3h4KSAmJiAhZGVmaW5lZChTVE0zMkw0Uzl4eCkKKyAgc2RtbWNfY2xrID0gc2RtbWNfY2xrLyhJbml0LkNsb2NrRGl2ICsgMlUpOworI2Vsc2UKKyAgc2RtbWNfY2xrID0gc2RtbWNfY2xrLygyVSpJbml0LkNsb2NrRGl2KTsKKyNlbmRpZgorICBIQUxfRGVsYXkoMVUrICg3NFUqMTAwMFUvKHNkbW1jX2NsaykpKTsKKwogICAvKiBJZGVudGlmeSBjYXJkIG9wZXJhdGluZyB2b2x0YWdlICovCiAgIGVycm9yc3RhdGUgPSBTRF9Qb3dlck9OKGhzZCk7CiAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCkBAIC0xNjQ1LDcgKzE2NjgsNyBAQAogICAgIH0KIAogICAgIC8qIFNlbmQgQ01EMzggRVJBU0UgKi8KLSAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kRXJhc2UoaHNkLT5JbnN0YW5jZSk7CisgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEVyYXNlKGhzZC0+SW5zdGFuY2UsIDBVTCk7CiAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfc21hcnRjYXJkLmMgYi9TcmMvc3RtMzJsNHh4X2hhbF9zbWFydGNhcmQuYwppbmRleCA0MzZlNzgyLi4xNTk3MTkwIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9zbWFydGNhcmQuYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF9zbWFydGNhcmQuYwpAQCAtMTA3LDggKzEwNyw4IEBACiAgICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KIAogICAgIFsuLl0KLSAgICBVc2UgRnVuY3Rpb24gQHJlZiBIQUxfU01BUlRDQVJEX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2suCi0gICAgRnVuY3Rpb24gQHJlZiBIQUxfU01BUlRDQVJEX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKKyAgICBVc2UgRnVuY3Rpb24gSEFMX1NNQVJUQ0FSRF9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLgorICAgIEZ1bmN0aW9uIEhBTF9TTUFSVENBUkRfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBUeENwbHRDYWxsYmFjayAgICAgICAgICAgIDogVHggQ29tcGxldGUgQ2FsbGJhY2suCiAgICAgKCspIFJ4Q3BsdENhbGxiYWNrICAgICAgICAgICAgOiBSeCBDb21wbGV0ZSBDYWxsYmFjay4KICAgICAoKykgRXJyb3JDYWxsYmFjayAgICAgICAgICAgICA6IEVycm9yIENhbGxiYWNrLgpAQCAtMTIzLDkgKzEyMyw5IEBACiAgICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KIAogICAgIFsuLl0KLSAgICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfU01BUlRDQVJEX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICBVc2UgZnVuY3Rpb24gSEFMX1NNQVJUQ0FSRF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgICAgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb24uCi0gICAgQHJlZiBIQUxfU01BUlRDQVJEX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKKyAgICBIQUxfU01BUlRDQVJEX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKICAgICBhbmQgdGhlIENhbGxiYWNrIElELgogICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgKCspIFR4Q3BsdENhbGxiYWNrICAgICAgICAgICAgOiBUeCBDb21wbGV0ZSBDYWxsYmFjay4KQEAgLTE0MCwxMyArMTQwLDEzIEBACiAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICAgICAgOiBTTUFSVENBUkQgTXNwRGVJbml0LgogCiAgICAgWy4uXQotICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9TTUFSVENBUkRfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfU01BUlRDQVJEX1NUQVRFX1JFU0VUCisgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9TTUFSVENBUkRfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfU01BUlRDQVJEX1NUQVRFX1JFU0VUCiAgICAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uczoKLSAgICBleGFtcGxlcyBAcmVmIEhBTF9TTUFSVENBUkRfVHhDcGx0Q2FsbGJhY2soKSwgQHJlZiBIQUxfU01BUlRDQVJEX1J4Q3BsdENhbGxiYWNrKCkuCisgICAgZXhhbXBsZXMgSEFMX1NNQVJUQ0FSRF9UeENwbHRDYWxsYmFjaygpLCBIQUxfU01BUlRDQVJEX1J4Q3BsdENhbGxiYWNrKCkuCiAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUgcmVzcGVjdGl2ZWx5Ci0gICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEByZWYgSEFMX1NNQVJUQ0FSRF9Jbml0KCkKLSAgICBhbmQgQHJlZiBIQUxfU01BUlRDQVJEX0RlSW5pdCgpIG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgotICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgQHJlZiBIQUxfU01BUlRDQVJEX0luaXQoKSBhbmQgQHJlZiBIQUxfU01BUlRDQVJEX0RlSW5pdCgpCisgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEhBTF9TTUFSVENBUkRfSW5pdCgpCisgICAgYW5kIEhBTF9TTUFSVENBUkRfRGVJbml0KCkgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCisgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfU01BUlRDQVJEX0luaXQoKSBhbmQgSEFMX1NNQVJUQ0FSRF9EZUluaXQoKQogICAgIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCiAKICAgICBbLi5dCkBAIC0xNTUsOCArMTU1LDggQEAKICAgICBpbiBIQUxfU01BUlRDQVJEX1NUQVRFX1JFQURZIG9yIEhBTF9TTUFSVENBUkRfU1RBVEVfUkVTRVQgc3RhdGUsIHRodXMgcmVnaXN0ZXJlZCAodXNlcikKICAgICBNc3BJbml0L0RlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KICAgICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCi0gICAgdXNpbmcgQHJlZiBIQUxfU01BUlRDQVJEX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9TTUFSVENBUkRfRGVJbml0KCkKLSAgICBvciBAcmVmIEhBTF9TTUFSVENBUkRfSW5pdCgpIGZ1bmN0aW9uLgorICAgIHVzaW5nIEhBTF9TTUFSVENBUkRfUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEhBTF9TTUFSVENBUkRfRGVJbml0KCkKKyAgICBvciBIQUxfU01BUlRDQVJEX0luaXQoKSBmdW5jdGlvbi4KIAogICAgIFsuLl0KICAgICBXaGVuIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9TTUFSVENBUkRfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCkBAIC03NDIsNjAgKzc0Miw2MSBAQAogICAgICgrKSAxLjUgc3RvcCBiaXRzIHdoZW4gdHJhbnNtaXR0aW5nIGFuZCByZWNlaXZpbmc6IHdoZXJlIFNUT1A9MTEgaW4gdGhlIFVTQVJUX0NSMiByZWdpc3Rlci4KIAogICBbLi5dCi0gICAgKCspIFRoZXJlIGFyZSB0d28gbW9kZXMgb2YgdHJhbnNmZXI6Ci0gICAgICAgICgrKykgQmxvY2tpbmcgbW9kZTogVGhlIGNvbW11bmljYXRpb24gaXMgcGVyZm9ybWVkIGluIHBvbGxpbmcgbW9kZS4KKyAgICAoIykgVGhlcmUgYXJlIHR3byBtb2RlcyBvZiB0cmFuc2ZlcjoKKyAgICAgICAgKCMjKSBCbG9ja2luZyBtb2RlOiBUaGUgY29tbXVuaWNhdGlvbiBpcyBwZXJmb3JtZWQgaW4gcG9sbGluZyBtb2RlLgogICAgICAgICAgICAgIFRoZSBIQUwgc3RhdHVzIG9mIGFsbCBkYXRhIHByb2Nlc3NpbmcgaXMgcmV0dXJuZWQgYnkgdGhlIHNhbWUgZnVuY3Rpb24KICAgICAgICAgICAgICBhZnRlciBmaW5pc2hpbmcgdHJhbnNmZXIuCi0gICAgICAgICgrKykgTm9uLUJsb2NraW5nIG1vZGU6IFRoZSBjb21tdW5pY2F0aW9uIGlzIHBlcmZvcm1lZCB1c2luZyBJbnRlcnJ1cHRzCisgICAgICAgICgjIykgTm9uLUJsb2NraW5nIG1vZGU6IFRoZSBjb21tdW5pY2F0aW9uIGlzIHBlcmZvcm1lZCB1c2luZyBJbnRlcnJ1cHRzCiAgICAgICAgICAgICAgb3IgRE1BLCB0aGUgcmVsZXZhbnQgQVBJJ3MgcmV0dXJuIHRoZSBIQUwgc3RhdHVzLgogICAgICAgICAgICAgIFRoZSBlbmQgb2YgdGhlIGRhdGEgcHJvY2Vzc2luZyB3aWxsIGJlIGluZGljYXRlZCB0aHJvdWdoIHRoZQogICAgICAgICAgICAgIGRlZGljYXRlZCBTTUFSVENBUkQgSVJRIHdoZW4gdXNpbmcgSW50ZXJydXB0IG1vZGUgb3IgdGhlIERNQSBJUlEgd2hlbgogICAgICAgICAgICAgIHVzaW5nIERNQSBtb2RlLgotICAgICAgICAoKyspIFRoZSBIQUxfU01BUlRDQVJEX1R4Q3BsdENhbGxiYWNrKCksIEhBTF9TTUFSVENBUkRfUnhDcGx0Q2FsbGJhY2soKSB1c2VyIGNhbGxiYWNrcworICAgICAgICAoIyMpIFRoZSBIQUxfU01BUlRDQVJEX1R4Q3BsdENhbGxiYWNrKCksIEhBTF9TTUFSVENBUkRfUnhDcGx0Q2FsbGJhY2soKSB1c2VyIGNhbGxiYWNrcwogICAgICAgICAgICAgIHdpbGwgYmUgZXhlY3V0ZWQgcmVzcGVjdGl2ZWx5IGF0IHRoZSBlbmQgb2YgdGhlIFRyYW5zbWl0IG9yIFJlY2VpdmUgcHJvY2VzcwogICAgICAgICAgICAgIFRoZSBIQUxfU01BUlRDQVJEX0Vycm9yQ2FsbGJhY2soKSB1c2VyIGNhbGxiYWNrIHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBhIGNvbW11bmljYXRpb24KICAgICAgICAgICAgICBlcnJvciBpcyBkZXRlY3RlZC4KIAotICAgICgrKSBCbG9ja2luZyBtb2RlIEFQSXMgYXJlIDoKLSAgICAgICAgKCsrKSBIQUxfU01BUlRDQVJEX1RyYW5zbWl0KCkKLSAgICAgICAgKCsrKSBIQUxfU01BUlRDQVJEX1JlY2VpdmUoKQorICAgICgjKSBCbG9ja2luZyBtb2RlIEFQSXMgYXJlIDoKKyAgICAgICAgKCMjKSBIQUxfU01BUlRDQVJEX1RyYW5zbWl0KCkKKyAgICAgICAgKCMjKSBIQUxfU01BUlRDQVJEX1JlY2VpdmUoKQogCi0gICAgKCspIE5vbiBCbG9ja2luZyBtb2RlIEFQSXMgd2l0aCBJbnRlcnJ1cHQgYXJlIDoKLSAgICAgICAgKCsrKSBIQUxfU01BUlRDQVJEX1RyYW5zbWl0X0lUKCkKLSAgICAgICAgKCsrKSBIQUxfU01BUlRDQVJEX1JlY2VpdmVfSVQoKQotICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfSVJRSGFuZGxlcigpCisgICAgKCMpIE5vbiBCbG9ja2luZyBtb2RlIEFQSXMgd2l0aCBJbnRlcnJ1cHQgYXJlIDoKKyAgICAgICAgKCMjKSBIQUxfU01BUlRDQVJEX1RyYW5zbWl0X0lUKCkKKyAgICAgICAgKCMjKSBIQUxfU01BUlRDQVJEX1JlY2VpdmVfSVQoKQorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfSVJRSGFuZGxlcigpCiAKLSAgICAoKykgTm9uIEJsb2NraW5nIG1vZGUgZnVuY3Rpb25zIHdpdGggRE1BIGFyZSA6Ci0gICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9UcmFuc21pdF9ETUEoKQotICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfUmVjZWl2ZV9ETUEoKQorICAgICgjKSBOb24gQmxvY2tpbmcgbW9kZSBmdW5jdGlvbnMgd2l0aCBETUEgYXJlIDoKKyAgICAgICAgKCMjKSBIQUxfU01BUlRDQVJEX1RyYW5zbWl0X0RNQSgpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9SZWNlaXZlX0RNQSgpCiAKLSAgICAoKykgQSBzZXQgb2YgVHJhbnNmZXIgQ29tcGxldGUgQ2FsbGJhY2tzIGFyZSBwcm92aWRlZCBpbiBub24gQmxvY2tpbmcgbW9kZToKLSAgICAgICAgKCsrKSBIQUxfU01BUlRDQVJEX1R4Q3BsdENhbGxiYWNrKCkKLSAgICAgICAgKCsrKSBIQUxfU01BUlRDQVJEX1J4Q3BsdENhbGxiYWNrKCkKLSAgICAgICAgKCsrKSBIQUxfU01BUlRDQVJEX0Vycm9yQ2FsbGJhY2soKQorICAgICgjKSBBIHNldCBvZiBUcmFuc2ZlciBDb21wbGV0ZSBDYWxsYmFja3MgYXJlIHByb3ZpZGVkIGluIG5vbiBCbG9ja2luZyBtb2RlOgorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfVHhDcGx0Q2FsbGJhY2soKQorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfUnhDcGx0Q2FsbGJhY2soKQorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfRXJyb3JDYWxsYmFjaygpCiAKKyAgWy4uXQogICAgICgjKSBOb24tQmxvY2tpbmcgbW9kZSB0cmFuc2ZlcnMgY291bGQgYmUgYWJvcnRlZCB1c2luZyBBYm9ydCBBUEkncyA6Ci0gICAgICAgICgrKSBIQUxfU01BUlRDQVJEX0Fib3J0KCkKLSAgICAgICAgKCspIEhBTF9TTUFSVENBUkRfQWJvcnRUcmFuc21pdCgpCi0gICAgICAgICgrKSBIQUxfU01BUlRDQVJEX0Fib3J0UmVjZWl2ZSgpCi0gICAgICAgICgrKSBIQUxfU01BUlRDQVJEX0Fib3J0X0lUKCkKLSAgICAgICAgKCspIEhBTF9TTUFSVENBUkRfQWJvcnRUcmFuc21pdF9JVCgpCi0gICAgICAgICgrKSBIQUxfU01BUlRDQVJEX0Fib3J0UmVjZWl2ZV9JVCgpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9BYm9ydCgpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9BYm9ydFRyYW5zbWl0KCkKKyAgICAgICAgKCMjKSBIQUxfU01BUlRDQVJEX0Fib3J0UmVjZWl2ZSgpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9BYm9ydF9JVCgpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9BYm9ydFRyYW5zbWl0X0lUKCkKKyAgICAgICAgKCMjKSBIQUxfU01BUlRDQVJEX0Fib3J0UmVjZWl2ZV9JVCgpCiAKICAgICAoIykgRm9yIEFib3J0IHNlcnZpY2VzIGJhc2VkIG9uIGludGVycnVwdHMgKEhBTF9TTUFSVENBUkRfQWJvcnR4eHhfSVQpLCBhIHNldCBvZiBBYm9ydCBDb21wbGV0ZSBDYWxsYmFja3MgYXJlIHByb3ZpZGVkOgotICAgICAgICAoKykgSEFMX1NNQVJUQ0FSRF9BYm9ydENwbHRDYWxsYmFjaygpCi0gICAgICAgICgrKSBIQUxfU01BUlRDQVJEX0Fib3J0VHJhbnNtaXRDcGx0Q2FsbGJhY2soKQotICAgICAgICAoKykgSEFMX1NNQVJUQ0FSRF9BYm9ydFJlY2VpdmVDcGx0Q2FsbGJhY2soKQorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfQWJvcnRDcGx0Q2FsbGJhY2soKQorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfQWJvcnRUcmFuc21pdENwbHRDYWxsYmFjaygpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9BYm9ydFJlY2VpdmVDcGx0Q2FsbGJhY2soKQogCiAgICAgKCMpIEluIE5vbi1CbG9ja2luZyBtb2RlIHRyYW5zZmVycywgcG9zc2libGUgZXJyb3JzIGFyZSBzcGxpdCBpbnRvIDIgY2F0ZWdvcmllcy4KICAgICAgICAgRXJyb3JzIGFyZSBoYW5kbGVkIGFzIGZvbGxvd3MgOgotICAgICAgICgrKSBFcnJvciBpcyBjb25zaWRlcmVkIGFzIFJlY292ZXJhYmxlIGFuZCBub24gYmxvY2tpbmcgOiBUcmFuc2ZlciBjb3VsZCBnbyB0aWxsIGVuZCwgYnV0IGVycm9yIHNldmVyaXR5IGlzCisgICAgICAgKCMjKSBFcnJvciBpcyBjb25zaWRlcmVkIGFzIFJlY292ZXJhYmxlIGFuZCBub24gYmxvY2tpbmcgOiBUcmFuc2ZlciBjb3VsZCBnbyB0aWxsIGVuZCwgYnV0IGVycm9yIHNldmVyaXR5IGlzCiAgICAgICAgICAgIHRvIGJlIGV2YWx1YXRlZCBieSB1c2VyIDogdGhpcyBjb25jZXJucyBGcmFtZSBFcnJvciwgUGFyaXR5IEVycm9yIG9yIE5vaXNlIEVycm9yIGluIEludGVycnVwdCBtb2RlIHJlY2VwdGlvbiAuCiAgICAgICAgICAgIFJlY2VpdmVkIGNoYXJhY3RlciBpcyB0aGVuIHJldHJpZXZlZCBhbmQgc3RvcmVkIGluIFJ4IGJ1ZmZlciwgRXJyb3IgY29kZSBpcyBzZXQgdG8gYWxsb3cgdXNlciB0byBpZGVudGlmeSBlcnJvciB0eXBlLAogICAgICAgICAgICBhbmQgSEFMX1NNQVJUQ0FSRF9FcnJvckNhbGxiYWNrKCkgdXNlciBjYWxsYmFjayBpcyBleGVjdXRlZC4gVHJhbnNmZXIgaXMga2VwdCBvbmdvaW5nIG9uIFNNQVJUQ0FSRCBzaWRlLgogICAgICAgICAgICBJZiB1c2VyIHdhbnRzIHRvIGFib3J0IGl0LCBBYm9ydCBzZXJ2aWNlcyBzaG91bGQgYmUgY2FsbGVkIGJ5IHVzZXIuCi0gICAgICAgKCspIEVycm9yIGlzIGNvbnNpZGVyZWQgYXMgQmxvY2tpbmcgOiBUcmFuc2ZlciBjb3VsZCBub3QgYmUgY29tcGxldGVkIHByb3Blcmx5IGFuZCBpcyBhYm9ydGVkLgotICAgICAgICAgICBUaGlzIGNvbmNlcm5zIEZyYW1lIEVycm9yIGluIEludGVycnVwdCBtb2RlIHRyYW5taXNzaW9uLCBPdmVycnVuIEVycm9yIGluIEludGVycnVwdCBtb2RlIHJlY2VwdGlvbiBhbmQgYWxsIGVycm9ycyBpbiBETUEgbW9kZS4KKyAgICAgICAoIyMpIEVycm9yIGlzIGNvbnNpZGVyZWQgYXMgQmxvY2tpbmcgOiBUcmFuc2ZlciBjb3VsZCBub3QgYmUgY29tcGxldGVkIHByb3Blcmx5IGFuZCBpcyBhYm9ydGVkLgorICAgICAgICAgICBUaGlzIGNvbmNlcm5zIEZyYW1lIEVycm9yIGluIEludGVycnVwdCBtb2RlIHRyYW5zbWlzc2lvbiwgT3ZlcnJ1biBFcnJvciBpbiBJbnRlcnJ1cHQgbW9kZSByZWNlcHRpb24gYW5kIGFsbCBlcnJvcnMgaW4gRE1BIG1vZGUuCiAgICAgICAgICAgIEVycm9yIGNvZGUgaXMgc2V0IHRvIGFsbG93IHVzZXIgdG8gaWRlbnRpZnkgZXJyb3IgdHlwZSwgYW5kIEhBTF9TTUFSVENBUkRfRXJyb3JDYWxsYmFjaygpIHVzZXIgY2FsbGJhY2sgaXMgZXhlY3V0ZWQuCiAKIEBlbmR2ZXJiYXRpbQpAQCAtODQwLDE0ICs4NDEsMjMgQEAKICAgICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsIGZpcnN0IHRvIHVwZGF0ZSBtb2RlIGZvciBUWCBtYXN0ZXIgKi8KICAgICBDTEVBUl9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1VFKTsKIAotICAgIC8qIERpc2FibGUgUngsIGVuYWJsZSBUeCAqLwotICAgIENMRUFSX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfUkUpOwotICAgIFNFVF9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPlJRUiwgKHVpbnQxNl90KVNNQVJUQ0FSRF9SWERBVEFfRkxVU0hfUkVRVUVTVCk7CisgICAgLyogSW4gY2FzZSBvZiBUWCBvbmx5IG1vZGUsIGlmIE5BQ0sgaXMgZW5hYmxlZCwgdGhlIFVTQVJUIG11c3QgYmUgYWJsZSB0byBtb25pdG9yCisgICAgICAgdGhlIGJpZGlyZWN0aW9uYWwgbGluZSB0byBkZXRlY3QgYSBOQUNLIHNpZ25hbCBpbiBjYXNlIG9mIHBhcml0eSBlcnJvci4KKyAgICAgICBUaGVyZWZvcmUsIHRoZSByZWNlaXZlciBibG9jayBtdXN0IGJlIGVuYWJsZWQgYXMgd2VsbCAoUkUgYml0IG11c3QgYmUgc2V0KS4gKi8KKyAgICBpZiAoKGhzbWFydGNhcmQtPkluaXQuTW9kZSA9PSBTTUFSVENBUkRfTU9ERV9UWCkKKyAgICAgJiYgKGhzbWFydGNhcmQtPkluaXQuTkFDS0VuYWJsZSA9PSBTTUFSVENBUkRfTkFDS19FTkFCTEUpKQorICAgIHsKKyAgICAgIFNFVF9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1JFKTsKKyAgICB9CisgICAgLyogRW5hYmxlIFR4ICovCiAgICAgU0VUX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfVEUpOwogCiAgICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgICAgU0VUX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfVUUpOwogCisgICAgLyogUGVyZm9ybSBhIFRYL1JYIEZJRk8gRmx1c2ggKi8KKyAgICBfX0hBTF9TTUFSVENBUkRfRkxVU0hfRFJSRUdJU1RFUihoc21hcnRjYXJkKTsKKwogICAgIGhzbWFydGNhcmQtPkVycm9yQ29kZSA9IEhBTF9TTUFSVENBUkRfRVJST1JfTk9ORTsKICAgICBoc21hcnRjYXJkLT5UeFhmZXJTaXplID0gU2l6ZTsKICAgICBoc21hcnRjYXJkLT5UeFhmZXJDb3VudCA9IFNpemU7CkBAIC04NjcsMTUgKzg3NywyMyBAQAogICAgIHsKICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICB9Ci0gICAgLyogUmUtZW5hYmxlIFJ4IGF0IGVuZCBvZiB0cmFuc21pc3Npb24gaWYgaW5pdGlhbCBtb2RlIGlzIFJ4L1R4ICovCi0gICAgaWYgKGhzbWFydGNhcmQtPkluaXQuTW9kZSA9PSBTTUFSVENBUkRfTU9ERV9UWF9SWCkKKworICAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgZmlyc3QgdG8gdXBkYXRlIG1vZGUgKi8KKyAgICBDTEVBUl9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1VFKTsKKyAgICBpZiAoKGhzbWFydGNhcmQtPkluaXQuTW9kZSA9PSBTTUFSVENBUkRfTU9ERV9UWCkKKyAgICAgJiYgKGhzbWFydGNhcmQtPkluaXQuTkFDS0VuYWJsZSA9PSBTTUFSVENBUkRfTkFDS19FTkFCTEUpKQogICAgIHsKLSAgICAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgZmlyc3QgdG8gdXBkYXRlIG1vZGVzICovCi0gICAgICBDTEVBUl9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1VFKTsKLSAgICAgIFNFVF9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1JFKTsKLSAgICAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwotICAgICAgU0VUX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfVUUpOworICAgICAgLyogSW4gY2FzZSBvZiBUWCBvbmx5IG1vZGUsIGlmIE5BQ0sgaXMgZW5hYmxlZCwgcmVjZWl2ZXIgYmxvY2sgaGFzIGJlZW4gZW5hYmxlZAorICAgICAgICAgZm9yIFRyYW5zbWl0IHBoYXNlLiBEaXNhYmxlIHRoaXMgcmVjZWl2ZXIgYmxvY2suICovCisgICAgICBDTEVBUl9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1JFKTsKICAgICB9CisgICAgaWYgKChoc21hcnRjYXJkLT5Jbml0Lk1vZGUgPT0gU01BUlRDQVJEX01PREVfVFhfUlgpCisgICAgIHx8IChoc21hcnRjYXJkLT5Jbml0Lk5BQ0tFbmFibGUgPT0gU01BUlRDQVJEX05BQ0tfRU5BQkxFKSkKKyAgICB7CisgICAgICAvKiBQZXJmb3JtIGEgVFggRklGTyBGbHVzaCBhdCBlbmQgb2YgVHggcGhhc2UsIGFzIGFsbCBzZW50IGJ5dGVzIGFyZSBhcHBlYXJpbmcgaW4gUnggRGF0YSByZWdpc3RlciAqLworICAgICAgX19IQUxfU01BUlRDQVJEX0ZMVVNIX0RSUkVHSVNURVIoaHNtYXJ0Y2FyZCk7CisgICAgfQorICAgIFNFVF9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1VFKTsKIAogICAgIC8qIEF0IGVuZCBvZiBUeCBwcm9jZXNzLCByZXN0b3JlIGhzbWFydGNhcmQtPmdTdGF0ZSB0byBSZWFkeSAqLwogICAgIGhzbWFydGNhcmQtPmdTdGF0ZSA9IEhBTF9TTUFSVENBUkRfU1RBVEVfUkVBRFk7CkBAIC05OTYsMTQgKzEwMTQsMjMgQEAKICAgICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsIGZpcnN0IHRvIHVwZGF0ZSBtb2RlIGZvciBUWCBtYXN0ZXIgKi8KICAgICBDTEVBUl9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1VFKTsKIAotICAgIC8qIERpc2FibGUgUngsIGVuYWJsZSBUeCAqLwotICAgIENMRUFSX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfUkUpOwotICAgIFNFVF9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPlJRUiwgKHVpbnQxNl90KVNNQVJUQ0FSRF9SWERBVEFfRkxVU0hfUkVRVUVTVCk7CisgICAgLyogSW4gY2FzZSBvZiBUWCBvbmx5IG1vZGUsIGlmIE5BQ0sgaXMgZW5hYmxlZCwgdGhlIFVTQVJUIG11c3QgYmUgYWJsZSB0byBtb25pdG9yCisgICAgICAgdGhlIGJpZGlyZWN0aW9uYWwgbGluZSB0byBkZXRlY3QgYSBOQUNLIHNpZ25hbCBpbiBjYXNlIG9mIHBhcml0eSBlcnJvci4KKyAgICAgICBUaGVyZWZvcmUsIHRoZSByZWNlaXZlciBibG9jayBtdXN0IGJlIGVuYWJsZWQgYXMgd2VsbCAoUkUgYml0IG11c3QgYmUgc2V0KS4gKi8KKyAgICBpZiAoKGhzbWFydGNhcmQtPkluaXQuTW9kZSA9PSBTTUFSVENBUkRfTU9ERV9UWCkKKyAgICAgJiYgKGhzbWFydGNhcmQtPkluaXQuTkFDS0VuYWJsZSA9PSBTTUFSVENBUkRfTkFDS19FTkFCTEUpKQorICAgIHsKKyAgICAgIFNFVF9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1JFKTsKKyAgICB9CisgICAgLyogRW5hYmxlIFR4ICovCiAgICAgU0VUX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfVEUpOwogCiAgICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgICAgU0VUX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfVUUpOwogCisgICAgLyogUGVyZm9ybSBhIFRYL1JYIEZJRk8gRmx1c2ggKi8KKyAgICBfX0hBTF9TTUFSVENBUkRfRkxVU0hfRFJSRUdJU1RFUihoc21hcnRjYXJkKTsKKwogICAgIC8qIENvbmZpZ3VyZSBUeCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyAqLwogI2lmIGRlZmluZWQoVVNBUlRfQ1IxX0ZJRk9FTikKICAgICBpZiAoaHNtYXJ0Y2FyZC0+Rmlmb01vZGUgPT0gU01BUlRDQVJEX0ZJRk9NT0RFX0VOQUJMRSkKQEAgLTExNjksMTQgKzExOTYsMjMgQEAKICAgICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsIGZpcnN0IHRvIHVwZGF0ZSBtb2RlIGZvciBUWCBtYXN0ZXIgKi8KICAgICBDTEVBUl9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1VFKTsKIAotICAgIC8qIERpc2FibGUgUngsIGVuYWJsZSBUeCAqLwotICAgIENMRUFSX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfUkUpOwotICAgIFNFVF9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPlJRUiwgKHVpbnQxNl90KVNNQVJUQ0FSRF9SWERBVEFfRkxVU0hfUkVRVUVTVCk7CisgICAgLyogSW4gY2FzZSBvZiBUWCBvbmx5IG1vZGUsIGlmIE5BQ0sgaXMgZW5hYmxlZCwgdGhlIFVTQVJUIG11c3QgYmUgYWJsZSB0byBtb25pdG9yCisgICAgICAgdGhlIGJpZGlyZWN0aW9uYWwgbGluZSB0byBkZXRlY3QgYSBOQUNLIHNpZ25hbCBpbiBjYXNlIG9mIHBhcml0eSBlcnJvci4KKyAgICAgICBUaGVyZWZvcmUsIHRoZSByZWNlaXZlciBibG9jayBtdXN0IGJlIGVuYWJsZWQgYXMgd2VsbCAoUkUgYml0IG11c3QgYmUgc2V0KS4gKi8KKyAgICBpZiAoKGhzbWFydGNhcmQtPkluaXQuTW9kZSA9PSBTTUFSVENBUkRfTU9ERV9UWCkKKyAgICAgJiYgKGhzbWFydGNhcmQtPkluaXQuTkFDS0VuYWJsZSA9PSBTTUFSVENBUkRfTkFDS19FTkFCTEUpKQorICAgIHsKKyAgICAgIFNFVF9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1JFKTsKKyAgICB9CisgICAgLyogRW5hYmxlIFR4ICovCiAgICAgU0VUX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfVEUpOwogCiAgICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgICAgU0VUX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfVUUpOwogCisgICAgLyogUGVyZm9ybSBhIFRYL1JYIEZJRk8gRmx1c2ggKi8KKyAgICBfX0hBTF9TTUFSVENBUkRfRkxVU0hfRFJSRUdJU1RFUihoc21hcnRjYXJkKTsKKwogICAgIC8qIFNldCB0aGUgU01BUlRDQVJEIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLwogICAgIGhzbWFydGNhcmQtPmhkbWF0eC0+WGZlckNwbHRDYWxsYmFjayA9IFNNQVJUQ0FSRF9ETUFUcmFuc21pdENwbHQ7CiAKQEAgLTI0MDMsNiArMjQzOSw3IEBACiAjaWYgZGVmaW5lZChVU0FSVF9QUkVTQ19QUkVTQ0FMRVIpCiAgIGNvbnN0IHVpbnQxNl90IFNNQVJUQ0FSRFByZXNjVGFibGVbMTJdID0gezFVLCAyVSwgNFUsIDZVLCA4VSwgMTBVLCAxMlUsIDE2VSwgMzJVLCA2NFUsIDEyOFUsIDI1NlV9OwogI2VuZGlmIC8qIFVTQVJUX1BSRVNDX1BSRVNDQUxFUiAqLworICB1aW50MzJfdCBwY2xrOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19TTUFSVENBUkRfSU5TVEFOQ0UoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UpKTsKQEAgLTI0ODIsMTcgKzI1MTksMTkgQEAKICAgc3dpdGNoIChjbG9ja3NvdXJjZSkKICAgewogICAgIGNhc2UgU01BUlRDQVJEX0NMT0NLU09VUkNFX1BDTEsxOgorICAgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzFGcmVxKCk7CiAjaWYgZGVmaW5lZChVU0FSVF9QUkVTQ19QUkVTQ0FMRVIpCi0gICAgICB0bXByZWcgPSAodWludDE2X3QpKCgoSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKSAvIFNNQVJUQ0FSRFByZXNjVGFibGVbaHNtYXJ0Y2FyZC0+SW5pdC5DbG9ja1ByZXNjYWxlcl0pICsgKGhzbWFydGNhcmQtPkluaXQuQmF1ZFJhdGUgLyAyVSkpIC8gaHNtYXJ0Y2FyZC0+SW5pdC5CYXVkUmF0ZSk7CisgICAgICB0bXByZWcgPSAodWludDE2X3QpKCgocGNsayAvIFNNQVJUQ0FSRFByZXNjVGFibGVbaHNtYXJ0Y2FyZC0+SW5pdC5DbG9ja1ByZXNjYWxlcl0pICsgKGhzbWFydGNhcmQtPkluaXQuQmF1ZFJhdGUgLyAyVSkpIC8gaHNtYXJ0Y2FyZC0+SW5pdC5CYXVkUmF0ZSk7CiAjZWxzZQotICAgICAgdG1wcmVnID0gKHVpbnQxNl90KSgoSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKSArIChoc21hcnRjYXJkLT5Jbml0LkJhdWRSYXRlIC8gMlUpKSAvIGhzbWFydGNhcmQtPkluaXQuQmF1ZFJhdGUpOworICAgICAgdG1wcmVnID0gKHVpbnQxNl90KSgocGNsayArIChoc21hcnRjYXJkLT5Jbml0LkJhdWRSYXRlIC8gMlUpKSAvIGhzbWFydGNhcmQtPkluaXQuQmF1ZFJhdGUpOwogI2VuZGlmIC8qIFVTQVJUX1BSRVNDX1BSRVNDQUxFUiAqLwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfUENMSzI6CisgICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMkZyZXEoKTsKICNpZiBkZWZpbmVkKFVTQVJUX1BSRVNDX1BSRVNDQUxFUikKLSAgICAgIHRtcHJlZyA9ICh1aW50MTZfdCkoKChIQUxfUkNDX0dldFBDTEsyRnJlcSgpIC8gU01BUlRDQVJEUHJlc2NUYWJsZVtoc21hcnRjYXJkLT5Jbml0LkNsb2NrUHJlc2NhbGVyXSkgKyAoaHNtYXJ0Y2FyZC0+SW5pdC5CYXVkUmF0ZSAvIDJVKSkgLyBoc21hcnRjYXJkLT5Jbml0LkJhdWRSYXRlKTsKKyAgICAgIHRtcHJlZyA9ICh1aW50MTZfdCkoKChwY2xrIC8gU01BUlRDQVJEUHJlc2NUYWJsZVtoc21hcnRjYXJkLT5Jbml0LkNsb2NrUHJlc2NhbGVyXSkgKyAoaHNtYXJ0Y2FyZC0+SW5pdC5CYXVkUmF0ZSAvIDJVKSkgLyBoc21hcnRjYXJkLT5Jbml0LkJhdWRSYXRlKTsKICNlbHNlCi0gICAgICB0bXByZWcgPSAodWludDE2X3QpKChIQUxfUkNDX0dldFBDTEsyRnJlcSgpICsgKGhzbWFydGNhcmQtPkluaXQuQmF1ZFJhdGUgLyAyVSkpIC8gaHNtYXJ0Y2FyZC0+SW5pdC5CYXVkUmF0ZSk7CisgICAgICB0bXByZWcgPSAodWludDE2X3QpKChwY2xrICsgKGhzbWFydGNhcmQtPkluaXQuQmF1ZFJhdGUgLyAyVSkpIC8gaHNtYXJ0Y2FyZC0+SW5pdC5CYXVkUmF0ZSk7CiAjZW5kaWYgLyogVVNBUlRfUFJFU0NfUFJFU0NBTEVSICovCiAgICAgICBicmVhazsKICAgICBjYXNlIFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9IU0k6CkBAIC0yNTAzLDEwICsyNTQyLDExIEBACiAjZW5kaWYgLyogVVNBUlRfUFJFU0NfUFJFU0NBTEVSICovCiAgICAgICBicmVhazsKICAgICBjYXNlIFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9TWVNDTEs6CisgICAgICBwY2xrID0gSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKTsKICNpZiBkZWZpbmVkKFVTQVJUX1BSRVNDX1BSRVNDQUxFUikKLSAgICAgIHRtcHJlZyA9ICh1aW50MTZfdCkoKChIQUxfUkNDX0dldFN5c0Nsb2NrRnJlcSgpIC8gU01BUlRDQVJEUHJlc2NUYWJsZVtoc21hcnRjYXJkLT5Jbml0LkNsb2NrUHJlc2NhbGVyXSkgKyAoaHNtYXJ0Y2FyZC0+SW5pdC5CYXVkUmF0ZSAvIDJVKSkgLyBoc21hcnRjYXJkLT5Jbml0LkJhdWRSYXRlKTsKKyAgICAgIHRtcHJlZyA9ICh1aW50MTZfdCkoKChwY2xrIC8gU01BUlRDQVJEUHJlc2NUYWJsZVtoc21hcnRjYXJkLT5Jbml0LkNsb2NrUHJlc2NhbGVyXSkgKyAoaHNtYXJ0Y2FyZC0+SW5pdC5CYXVkUmF0ZSAvIDJVKSkgLyBoc21hcnRjYXJkLT5Jbml0LkJhdWRSYXRlKTsKICNlbHNlCi0gICAgICB0bXByZWcgPSAodWludDE2X3QpKChIQUxfUkNDX0dldFN5c0Nsb2NrRnJlcSgpICsgKGhzbWFydGNhcmQtPkluaXQuQmF1ZFJhdGUgLyAyVSkpIC8gaHNtYXJ0Y2FyZC0+SW5pdC5CYXVkUmF0ZSk7CisgICAgICB0bXByZWcgPSAodWludDE2X3QpKChwY2xrICsgKGhzbWFydGNhcmQtPkluaXQuQmF1ZFJhdGUgLyAyVSkpIC8gaHNtYXJ0Y2FyZC0+SW5pdC5CYXVkUmF0ZSk7CiAjZW5kaWYgLyogVVNBUlRfUFJFU0NfUFJFU0NBTEVSICovCiAgICAgICBicmVhazsKICAgICBjYXNlIFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9MU0U6CkBAIC0zMTA0LDE1ICszMTQ0LDIyIEBACiAgICAgQ0xFQVJfQklUKGhzbWFydGNhcmQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19FSUUpOwogICB9CiAKLSAgLyogUmUtZW5hYmxlIFJ4IGF0IGVuZCBvZiB0cmFuc21pc3Npb24gaWYgaW5pdGlhbCBtb2RlIGlzIFJ4L1R4ICovCi0gIGlmIChoc21hcnRjYXJkLT5Jbml0Lk1vZGUgPT0gU01BUlRDQVJEX01PREVfVFhfUlgpCisgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgZmlyc3QgdG8gdXBkYXRlIG1vZGUgKi8KKyAgQ0xFQVJfQklUKGhzbWFydGNhcmQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9VRSk7CisgIGlmICgoaHNtYXJ0Y2FyZC0+SW5pdC5Nb2RlID09IFNNQVJUQ0FSRF9NT0RFX1RYKQorICAgJiYgKGhzbWFydGNhcmQtPkluaXQuTkFDS0VuYWJsZSA9PSBTTUFSVENBUkRfTkFDS19FTkFCTEUpKQogICB7Ci0gICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCBmaXJzdCB0byB1cGRhdGUgbW9kZXMgKi8KLSAgICBDTEVBUl9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1VFKTsKLSAgICBTRVRfQklUKGhzbWFydGNhcmQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9SRSk7Ci0gICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCi0gICAgU0VUX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfVUUpOworICAgIC8qIEluIGNhc2Ugb2YgVFggb25seSBtb2RlLCBpZiBOQUNLIGlzIGVuYWJsZWQsIHJlY2VpdmVyIGJsb2NrIGhhcyBiZWVuIGVuYWJsZWQKKyAgICAgICBmb3IgVHJhbnNtaXQgcGhhc2UuIERpc2FibGUgdGhpcyByZWNlaXZlciBibG9jay4gKi8KKyAgICBDTEVBUl9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1JFKTsKICAgfQorICBpZiAoKGhzbWFydGNhcmQtPkluaXQuTW9kZSA9PSBTTUFSVENBUkRfTU9ERV9UWF9SWCkKKyAgIHx8IChoc21hcnRjYXJkLT5Jbml0Lk5BQ0tFbmFibGUgPT0gU01BUlRDQVJEX05BQ0tfRU5BQkxFKSkKKyAgeworICAgIC8qIFBlcmZvcm0gYSBUWCBGSUZPIEZsdXNoIGF0IGVuZCBvZiBUeCBwaGFzZSwgYXMgYWxsIHNlbnQgYnl0ZXMgYXJlIGFwcGVhcmluZyBpbiBSeCBEYXRhIHJlZ2lzdGVyICovCisgICAgX19IQUxfU01BUlRDQVJEX0ZMVVNIX0RSUkVHSVNURVIoaHNtYXJ0Y2FyZCk7CisgIH0KKyAgU0VUX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfVUUpOwogCiAgIC8qIFR4IHByb2Nlc3MgaXMgZW5kZWQsIHJlc3RvcmUgaHNtYXJ0Y2FyZC0+Z1N0YXRlIHRvIFJlYWR5ICovCiAgIGhzbWFydGNhcmQtPmdTdGF0ZSA9IEhBTF9TTUFSVENBUkRfU1RBVEVfUkVBRFk7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2hhbF9zbWFydGNhcmRfZXguYyBiL1NyYy9zdG0zMmw0eHhfaGFsX3NtYXJ0Y2FyZF9leC5jCmluZGV4IDhmNmNhMzEuLmI1MmRmZmMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsX3NtYXJ0Y2FyZF9leC5jCisrKyBiL1NyYy9zdG0zMmw0eHhfaGFsX3NtYXJ0Y2FyZF9leC5jCkBAIC01NSwxMSArNTUsMTcgQEAKIAogLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGRlZmdyb3VwIFNNQVJUQ0FSREV4X1ByaXZhdGVfQ29uc3RhbnRzIFNNQVJUQ0FSRCBFeHRlbmRlZCBQcml2YXRlIENvbnN0YW50cworICAqIEB7CisgICovCiAvKiBVQVJUIFJYIEZJRk8gZGVwdGggKi8KICNkZWZpbmUgUlhfRklGT19ERVBUSCA4VQogCiAvKiBVQVJUIFRYIEZJRk8gZGVwdGggKi8KICNkZWZpbmUgVFhfRklGT19ERVBUSCA4VQorLyoqCisgICogQH0KKyAgKi8KIAogLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xOTAsOCArMTk2LDggQEAKICAgICBUaGlzIHN1YnNlY3Rpb24gcHJvdmlkZXMgYSBzZXQgb2YgRklGTyBtb2RlIHJlbGF0ZWQgY2FsbGJhY2sgZnVuY3Rpb25zLgogCiAgICAgKCMpIFRYL1JYIEZpZm9zIENhbGxiYWNrczoKLSAgICAgICAgKCspIEhBTF9TTUFSVENBUkRFeF9SeEZpZm9GdWxsQ2FsbGJhY2soKQotICAgICAgICAoKykgSEFMX1NNQVJUQ0FSREV4X1R4Rmlmb0VtcHR5Q2FsbGJhY2soKQorICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRFeF9SeEZpZm9GdWxsQ2FsbGJhY2soKQorICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRFeF9UeEZpZm9FbXB0eUNhbGxiYWNrKCkKIAogQGVuZHZlcmJhdGltCiAgICogQHsKQEAgLTIzNSwxNSArMjQxLDE2IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBTTUFSVENBUkRfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBFeHRlbmRlZCBQZXJpcGhlcmFsIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKKy8qKiBAZGVmZ3JvdXAgU01BUlRDQVJERXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBFeHRlbmRlZCBQZXJpcGhlcmFsIEZJRk8gQ29udHJvbCBmdW5jdGlvbnMKICAgKiAgQGJyaWVmICAgU01BUlRDQVJEIGNvbnRyb2wgZnVuY3Rpb25zCiAgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zICMjIyMjCisgICAgICAgICAgICAgICAgICAjIyMjIyBQZXJpcGhlcmFsIEZJRk8gQ29udHJvbCBmdW5jdGlvbnMgIyMjIyMKICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQotICAgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29udHJvbCB0aGUgU01BUlRDQVJELgorICAgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29udHJvbCB0aGUgU01BUlRDQVJECisgICAgRklGTyBmZWF0dXJlLgogICAgICAoKykgSEFMX1NNQVJUQ0FSREV4X0VuYWJsZUZpZm9Nb2RlKCkgQVBJIGVuYWJsZXMgdGhlIEZJRk8gbW9kZQogICAgICAoKykgSEFMX1NNQVJUQ0FSREV4X0Rpc2FibGVGaWZvTW9kZSgpIEFQSSBkaXNhYmxlcyB0aGUgRklGTyBtb2RlCiAgICAgICgrKSBIQUxfU01BUlRDQVJERXhfU2V0VHhGaWZvVGhyZXNob2xkKCkgQVBJIHNldHMgdGhlIFRYIEZJRk8gdGhyZXNob2xkCkBAIC00MzksNyArNDQ2LDcgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFNNQVJUQ0FSREV4X1ByaXZhdGVfRnVuY3Rpb25zICBTTUFSVENBUkQgRXh0ZW5kZWQgcHJpdmF0ZSBGdW5jdGlvbnMKKy8qKiBAZGVmZ3JvdXAgU01BUlRDQVJERXhfUHJpdmF0ZV9GdW5jdGlvbnMgIFNNQVJUQ0FSRCBFeHRlbmRlZCBQcml2YXRlIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX3NtYnVzLmMgYi9TcmMvc3RtMzJsNHh4X2hhbF9zbWJ1cy5jCmluZGV4IGZhMjY5ZTkuLmMwNWY3NjUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsX3NtYnVzLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfc21idXMuYwpAQCAtMjAzLDcgKzIwMyw4IEBACiAvKiogQGFkZHRvZ3JvdXAgU01CVVNfUHJpdmF0ZV9GdW5jdGlvbnMgU01CVVMgUHJpdmF0ZSBGdW5jdGlvbnMKICAgKiBAewogICAqLwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFNNQlVTX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50MzJfdCBGbGFnLCBGbGFnU3RhdHVzIFN0YXR1cywgdWludDMyX3QgVGltZW91dCk7CitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU01CVVNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQzMl90IEZsYWcsIEZsYWdTdGF0dXMgU3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCk7CiAKIHN0YXRpYyB2b2lkIFNNQlVTX0VuYWJsZV9JUlEoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50MzJfdCBJbnRlcnJ1cHRSZXF1ZXN0KTsKIHN0YXRpYyB2b2lkIFNNQlVTX0Rpc2FibGVfSVJRKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgSW50ZXJydXB0UmVxdWVzdCk7CkBAIC0yMTQsNyArMjE1LDggQEAKIAogc3RhdGljIHZvaWQgU01CVVNfSVRFcnJvckhhbmRsZXIoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzKTsKIAotc3RhdGljIHZvaWQgU01CVVNfVHJhbnNmZXJDb25maWcoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCAgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCBTaXplLCB1aW50MzJfdCBNb2RlLCB1aW50MzJfdCBSZXF1ZXN0KTsKK3N0YXRpYyB2b2lkIFNNQlVTX1RyYW5zZmVyQ29uZmlnKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgU2l6ZSwgdWludDMyX3QgTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFJlcXVlc3QpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTIyNiw4ICsyMjgsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIFNNQlVTX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwotICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAjIyMjIyBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICMjIyMjCkBAIC01NzksNyArNTgxLDggQEAKICAgKiBAcGFyYW0gIHBDYWxsYmFjayBwb2ludGVyIHRvIHRoZSBDYWxsYmFjayBmdW5jdGlvbgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NNQlVTX1JlZ2lzdGVyQ2FsbGJhY2soU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCBIQUxfU01CVVNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwgcFNNQlVTX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU01CVVNfUmVnaXN0ZXJDYWxsYmFjayhTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIEhBTF9TTUJVU19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNNQlVTX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIApAQCAtODU4LDggKzg2MSw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgU01CVVNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMiBJbnB1dCBhbmQgT3V0cHV0IG9wZXJhdGlvbiBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICBEYXRhIHRyYW5zZmVycyBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgIERhdGEgdHJhbnNmZXJzIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucyAjIyMjIwpAQCAtOTExLDcgKzkxNCw4IEBACiAgICogQHBhcmFtICBYZmVyT3B0aW9ucyBPcHRpb25zIG9mIFRyYW5zZmVyLCB2YWx1ZSBvZiBAcmVmIFNNQlVTX1hmZXJPcHRpb25zX2RlZmluaXRpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TTUJVU19NYXN0ZXJfVHJhbnNtaXRfSVQoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU01CVVNfTWFzdGVyX1RyYW5zbWl0X0lUKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKQogewogICB1aW50MzJfdCB0bXA7CiAKQEAgLTk1MCw3ICs5NTQsOCBAQAogICAgIC8qIFNldCBOQllURVMgdG8gd3JpdGUgYW5kIHJlbG9hZCBpZiBzaXplID4gTUFYX05CWVRFX1NJWkUgYW5kIGdlbmVyYXRlIFJFU1RBUlQgKi8KICAgICBpZiAoKGhzbWJ1cy0+WGZlclNpemUgPCBoc21idXMtPlhmZXJDb3VudCkgJiYgKGhzbWJ1cy0+WGZlclNpemUgPT0gTUFYX05CWVRFX1NJWkUpKQogICAgIHsKLSAgICAgIFNNQlVTX1RyYW5zZmVyQ29uZmlnKGhzbWJ1cywgRGV2QWRkcmVzcywgKHVpbnQ4X3QpaHNtYnVzLT5YZmVyU2l6ZSwgU01CVVNfUkVMT0FEX01PREUgfCAoaHNtYnVzLT5YZmVyT3B0aW9ucyAmIFNNQlVTX1NFTkRQRUNfTU9ERSksIFNNQlVTX0dFTkVSQVRFX1NUQVJUX1dSSVRFKTsKKyAgICAgIFNNQlVTX1RyYW5zZmVyQ29uZmlnKGhzbWJ1cywgRGV2QWRkcmVzcywgKHVpbnQ4X3QpaHNtYnVzLT5YZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNNQlVTX1JFTE9BRF9NT0RFIHwgKGhzbWJ1cy0+WGZlck9wdGlvbnMgJiBTTUJVU19TRU5EUEVDX01PREUpLCBTTUJVU19HRU5FUkFURV9TVEFSVF9XUklURSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0xMDEwLDcgKzEwMTUsOCBAQAogICAqIEBwYXJhbSAgWGZlck9wdGlvbnMgT3B0aW9ucyBvZiBUcmFuc2ZlciwgdmFsdWUgb2YgQHJlZiBTTUJVU19YZmVyT3B0aW9uc19kZWZpbml0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU01CVVNfTWFzdGVyX1JlY2VpdmVfSVQoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU01CVVNfTWFzdGVyX1JlY2VpdmVfSVQoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucykKIHsKICAgdWludDMyX3QgdG1wOwogCkBAIC0xMDUwLDcgKzEwNTYsOCBAQAogICAgIC8qIFNldCBOQllURVMgdG8gd3JpdGUgYW5kIHJlbG9hZCBpZiBzaXplID4gTUFYX05CWVRFX1NJWkUgYW5kIGdlbmVyYXRlIFJFU1RBUlQgKi8KICAgICBpZiAoKGhzbWJ1cy0+WGZlclNpemUgPCBoc21idXMtPlhmZXJDb3VudCkgJiYgKGhzbWJ1cy0+WGZlclNpemUgPT0gTUFYX05CWVRFX1NJWkUpKQogICAgIHsKLSAgICAgIFNNQlVTX1RyYW5zZmVyQ29uZmlnKGhzbWJ1cywgRGV2QWRkcmVzcywgKHVpbnQ4X3QpaHNtYnVzLT5YZmVyU2l6ZSwgU01CVVNfUkVMT0FEX01PREUgIHwgKGhzbWJ1cy0+WGZlck9wdGlvbnMgJiBTTUJVU19TRU5EUEVDX01PREUpLCBTTUJVU19HRU5FUkFURV9TVEFSVF9SRUFEKTsKKyAgICAgIFNNQlVTX1RyYW5zZmVyQ29uZmlnKGhzbWJ1cywgRGV2QWRkcmVzcywgKHVpbnQ4X3QpaHNtYnVzLT5YZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNNQlVTX1JFTE9BRF9NT0RFICB8IChoc21idXMtPlhmZXJPcHRpb25zICYgU01CVVNfU0VORFBFQ19NT0RFKSwgU01CVVNfR0VORVJBVEVfU1RBUlRfUkVBRCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0xMTY1LDcgKzExNzIsOCBAQAogICAqIEBwYXJhbSAgWGZlck9wdGlvbnMgT3B0aW9ucyBvZiBUcmFuc2ZlciwgdmFsdWUgb2YgQHJlZiBTTUJVU19YZmVyT3B0aW9uc19kZWZpbml0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU01CVVNfU2xhdmVfVHJhbnNtaXRfSVQoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU01CVVNfU2xhdmVfVHJhbnNtaXRfSVQoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBYZmVyT3B0aW9ucykKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1NNQlVTX1RSQU5TRkVSX09QVElPTlNfUkVRVUVTVChYZmVyT3B0aW9ucykpOwpAQCAtMTIxMyw3ICsxMjIxLDggQEAKICAgICAvKiBTZXQgTkJZVEVTIHRvIHdyaXRlIGFuZCByZWxvYWQgaWYgc2l6ZSA+IE1BWF9OQllURV9TSVpFIGFuZCBnZW5lcmF0ZSBSRVNUQVJUICovCiAgICAgaWYgKChoc21idXMtPlhmZXJTaXplIDwgaHNtYnVzLT5YZmVyQ291bnQpICYmIChoc21idXMtPlhmZXJTaXplID09IE1BWF9OQllURV9TSVpFKSkKICAgICB7Ci0gICAgICBTTUJVU19UcmFuc2ZlckNvbmZpZyhoc21idXMsIDAsICh1aW50OF90KWhzbWJ1cy0+WGZlclNpemUsIFNNQlVTX1JFTE9BRF9NT0RFIHwgKGhzbWJ1cy0+WGZlck9wdGlvbnMgJiBTTUJVU19TRU5EUEVDX01PREUpLCBTTUJVU19OT19TVEFSVFNUT1ApOworICAgICAgU01CVVNfVHJhbnNmZXJDb25maWcoaHNtYnVzLCAwLCAodWludDhfdCloc21idXMtPlhmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU01CVVNfUkVMT0FEX01PREUgfCAoaHNtYnVzLT5YZmVyT3B0aW9ucyAmIFNNQlVTX1NFTkRQRUNfTU9ERSksIFNNQlVTX05PX1NUQVJUU1RPUCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0xMjU5LDcgKzEyNjgsOCBAQAogICAqIEBwYXJhbSAgWGZlck9wdGlvbnMgT3B0aW9ucyBvZiBUcmFuc2ZlciwgdmFsdWUgb2YgQHJlZiBTTUJVU19YZmVyT3B0aW9uc19kZWZpbml0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU01CVVNfU2xhdmVfUmVjZWl2ZV9JVChTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TTUJVU19TbGF2ZV9SZWNlaXZlX0lUKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBYZmVyT3B0aW9ucykKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1NNQlVTX1RSQU5TRkVSX09QVElPTlNfUkVRVUVTVChYZmVyT3B0aW9ucykpOwpAQCAtMTQxNyw3ICsxNDI3LDggQEAKICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCBkdXJhdGlvbgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NNQlVTX0lzRGV2aWNlUmVhZHkoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MzJfdCBUcmlhbHMsIHVpbnQzMl90IFRpbWVvdXQpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU01CVVNfSXNEZXZpY2VSZWFkeShTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQzMl90IFRyaWFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRpbWVvdXQpCiB7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKIApAQCAtMTUyNiw4ICsxNTM3LDcgQEAKIAogICAgICAgLyogSW5jcmVtZW50IFRyaWFscyAqLwogICAgICAgU01CVVNfVHJpYWxzKys7Ci0gICAgfQotICAgIHdoaWxlIChTTUJVU19UcmlhbHMgPCBUcmlhbHMpOworICAgIH0gd2hpbGUgKFNNQlVTX1RyaWFscyA8IFRyaWFscyk7CiAKICAgICBoc21idXMtPlN0YXRlID0gSEFMX1NNQlVTX1NUQVRFX1JFQURZOwogCkBAIC0xNTQ5LDggKzE1NTksOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIFNNQlVTX0lSUV9IYW5kbGVyX2FuZF9DYWxsYmFja3MgSVJRIEhhbmRsZXIgYW5kIENhbGxiYWNrcwotICogQHsKLSAqLworICAqIEB7CisgICovCiAKIC8qKgogICAqIEBicmllZiAgSGFuZGxlIFNNQlVTIGV2ZW50IGludGVycnVwdCByZXF1ZXN0LgpAQCAtMTU2Niw3ICsxNTc2LDEyIEBACiAgIHVpbnQzMl90IHRtcGNyMXZhbHVlID0gUkVBRF9SRUcoaHNtYnVzLT5JbnN0YW5jZS0+Q1IxKTsKIAogICAvKiBTTUJVUyBpbiBtb2RlIFRyYW5zbWl0dGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0gIGlmICgoU01CVVNfQ0hFQ0tfSVRfU09VUkNFKHRtcGNyMXZhbHVlLCAoU01CVVNfSVRfVENJIHwgU01CVVNfSVRfU1RPUEkgfCBTTUJVU19JVF9OQUNLSSB8IFNNQlVTX0lUX1RYSSkpICE9IFJFU0VUKSAmJiAoKFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIFNNQlVTX0ZMQUdfVFhJUykgIT0gUkVTRVQpIHx8IChTTUJVU19DSEVDS19GTEFHKHRtcGlzcnZhbHVlLCBTTUJVU19GTEFHX1RDUikgIT0gUkVTRVQpIHx8IChTTUJVU19DSEVDS19GTEFHKHRtcGlzcnZhbHVlLCBTTUJVU19GTEFHX1RDKSAhPSBSRVNFVCkgfHwgKFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIFNNQlVTX0ZMQUdfU1RPUEYpICE9IFJFU0VUKSB8fCAoU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgU01CVVNfRkxBR19BRikgIT0gUkVTRVQpKSkKKyAgaWYgKChTTUJVU19DSEVDS19JVF9TT1VSQ0UodG1wY3IxdmFsdWUsIChTTUJVU19JVF9UQ0kgfCBTTUJVU19JVF9TVE9QSSB8IFNNQlVTX0lUX05BQ0tJIHwgU01CVVNfSVRfVFhJKSkgIT0gUkVTRVQpICYmCisgICAgICAoKFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIFNNQlVTX0ZMQUdfVFhJUykgIT0gUkVTRVQpIHx8CisgICAgICAgKFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIFNNQlVTX0ZMQUdfVENSKSAhPSBSRVNFVCkgfHwKKyAgICAgICAoU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgU01CVVNfRkxBR19UQykgIT0gUkVTRVQpIHx8CisgICAgICAgKFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIFNNQlVTX0ZMQUdfU1RPUEYpICE9IFJFU0VUKSB8fAorICAgICAgIChTTUJVU19DSEVDS19GTEFHKHRtcGlzcnZhbHVlLCBTTUJVU19GTEFHX0FGKSAhPSBSRVNFVCkpKQogICB7CiAgICAgLyogU2xhdmUgbW9kZSBzZWxlY3RlZCAqLwogICAgIGlmICgoaHNtYnVzLT5TdGF0ZSAmIEhBTF9TTUJVU19TVEFURV9TTEFWRV9CVVNZX1RYKSA9PSBIQUxfU01CVVNfU1RBVEVfU0xBVkVfQlVTWV9UWCkKQEAgLTE1ODUsNyArMTYwMCwxMiBAQAogICB9CiAKICAgLyogU01CVVMgaW4gbW9kZSBSZWNlaXZlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSAgaWYgKChTTUJVU19DSEVDS19JVF9TT1VSQ0UodG1wY3IxdmFsdWUsIChTTUJVU19JVF9UQ0kgfCBTTUJVU19JVF9TVE9QSSB8IFNNQlVTX0lUX05BQ0tJIHwgU01CVVNfSVRfUlhJKSkgIT0gUkVTRVQpICYmICgoU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgU01CVVNfRkxBR19SWE5FKSAhPSBSRVNFVCkgfHwgKFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIFNNQlVTX0ZMQUdfVENSKSAhPSBSRVNFVCkgfHwgKFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIFNNQlVTX0ZMQUdfVEMpICE9IFJFU0VUKSB8fCAoU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgU01CVVNfRkxBR19TVE9QRikgIT0gUkVTRVQpIHx8IChTTUJVU19DSEVDS19GTEFHKHRtcGlzcnZhbHVlLCBTTUJVU19GTEFHX0FGKSAhPSBSRVNFVCkpKQorICBpZiAoKFNNQlVTX0NIRUNLX0lUX1NPVVJDRSh0bXBjcjF2YWx1ZSwgKFNNQlVTX0lUX1RDSSB8IFNNQlVTX0lUX1NUT1BJIHwgU01CVVNfSVRfTkFDS0kgfCBTTUJVU19JVF9SWEkpKSAhPSBSRVNFVCkgJiYKKyAgICAgICgoU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgU01CVVNfRkxBR19SWE5FKSAhPSBSRVNFVCkgfHwKKyAgICAgICAoU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgU01CVVNfRkxBR19UQ1IpICE9IFJFU0VUKSB8fAorICAgICAgIChTTUJVU19DSEVDS19GTEFHKHRtcGlzcnZhbHVlLCBTTUJVU19GTEFHX1RDKSAhPSBSRVNFVCkgfHwKKyAgICAgICAoU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgU01CVVNfRkxBR19TVE9QRikgIT0gUkVTRVQpIHx8CisgICAgICAgKFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIFNNQlVTX0ZMQUdfQUYpICE9IFJFU0VUKSkpCiAgIHsKICAgICAvKiBTbGF2ZSBtb2RlIHNlbGVjdGVkICovCiAgICAgaWYgKChoc21idXMtPlN0YXRlICYgSEFMX1NNQlVTX1NUQVRFX1NMQVZFX0JVU1lfUlgpID09IEhBTF9TTUJVU19TVEFURV9TTEFWRV9CVVNZX1JYKQpAQCAtMTYwNCw3ICsxNjI0LDEyIEBACiAgIH0KIAogICAvKiBTTUJVUyBpbiBtb2RlIExpc3RlbmVyIE9ubHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotICBpZiAoKChTTUJVU19DSEVDS19JVF9TT1VSQ0UodG1wY3IxdmFsdWUsIFNNQlVTX0lUX0FERFJJKSAhPSBSRVNFVCkgfHwgKFNNQlVTX0NIRUNLX0lUX1NPVVJDRSh0bXBjcjF2YWx1ZSwgU01CVVNfSVRfU1RPUEkpICE9IFJFU0VUKSB8fCAoU01CVVNfQ0hFQ0tfSVRfU09VUkNFKHRtcGNyMXZhbHVlLCBTTUJVU19JVF9OQUNLSSkgIT0gUkVTRVQpKSAmJiAoKFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIFNNQlVTX0ZMQUdfQUREUikgIT0gUkVTRVQpIHx8IChTTUJVU19DSEVDS19GTEFHKHRtcGlzcnZhbHVlLCBTTUJVU19GTEFHX1NUT1BGKSAhPSBSRVNFVCkgfHwgKFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIFNNQlVTX0ZMQUdfQUYpICE9IFJFU0VUKSkpCisgIGlmICgoKFNNQlVTX0NIRUNLX0lUX1NPVVJDRSh0bXBjcjF2YWx1ZSwgU01CVVNfSVRfQUREUkkpICE9IFJFU0VUKSB8fAorICAgICAgIChTTUJVU19DSEVDS19JVF9TT1VSQ0UodG1wY3IxdmFsdWUsIFNNQlVTX0lUX1NUT1BJKSAhPSBSRVNFVCkgfHwKKyAgICAgICAoU01CVVNfQ0hFQ0tfSVRfU09VUkNFKHRtcGNyMXZhbHVlLCBTTUJVU19JVF9OQUNLSSkgIT0gUkVTRVQpKSAmJgorICAgICAgKChTTUJVU19DSEVDS19GTEFHKHRtcGlzcnZhbHVlLCBTTUJVU19GTEFHX0FERFIpICE9IFJFU0VUKSB8fAorICAgICAgIChTTUJVU19DSEVDS19GTEFHKHRtcGlzcnZhbHVlLCBTTUJVU19GTEFHX1NUT1BGKSAhPSBSRVNFVCkgfHwKKyAgICAgICAoU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgU01CVVNfRkxBR19BRikgIT0gUkVTRVQpKSkKICAgewogICAgIGlmICgoaHNtYnVzLT5TdGF0ZSAmIEhBTF9TTUJVU19TVEFURV9MSVNURU4pID09IEhBTF9TTUJVU19TVEFURV9MSVNURU4pCiAgICAgewpAQCAtMTc0NCw4ICsxNzY5LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBTTUJVU19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9ycyBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICBQZXJpcGhlcmFsIFN0YXRlIGFuZCBFcnJvcnMgZnVuY3Rpb25zCi0gKgorICAqICBAYnJpZWYgICBQZXJpcGhlcmFsIFN0YXRlIGFuZCBFcnJvcnMgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICMjIyMjIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9ycyBmdW5jdGlvbnMgIyMjIyMKQEAgLTE3NzEsMTEgKzE3OTYsMTEgQEAKIH0KIAogLyoqCi0qIEBicmllZiAgUmV0dXJuIHRoZSBTTUJVUyBlcnJvciBjb2RlLgorICAqIEBicmllZiAgUmV0dXJuIHRoZSBTTUJVUyBlcnJvciBjb2RlLgogICAqIEBwYXJhbSAgaHNtYnVzIFBvaW50ZXIgdG8gYSBTTUJVU19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIFNNQlVTLgotKiBAcmV0dmFsIFNNQlVTIEVycm9yIENvZGUKLSovCisgICogQHJldHZhbCBTTUJVUyBFcnJvciBDb2RlCisgICovCiB1aW50MzJfdCBIQUxfU01CVVNfR2V0RXJyb3IoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzKQogewogICByZXR1cm4gaHNtYnVzLT5FcnJvckNvZGU7CkBAIC0xNzkwLDcgKzE4MTUsNyBAQAogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgU01CVVNfUHJpdmF0ZV9GdW5jdGlvbnMgU01CVVMgUHJpdmF0ZSBGdW5jdGlvbnMKLSAqICBAYnJpZWYgICBEYXRhIHRyYW5zZmVycyBQcml2YXRlIGZ1bmN0aW9ucworICAqICBAYnJpZWYgICBEYXRhIHRyYW5zZmVycyBQcml2YXRlIGZ1bmN0aW9ucwogICAqIEB7CiAgICovCiAKQEAgLTE4NTQsNyArMTg3OSw3IEBACiAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgICBfX0hBTF9VTkxPQ0soaHNtYnVzKTsKIAotICAgICAgLyogUkVlbmFibGUgdGhlIHNlbGVjdGVkIFNNQlVTIHBlcmlwaGVyYWwgKi8KKyAgICAgIC8qIFJlLWVuYWJsZSB0aGUgc2VsZWN0ZWQgU01CVVMgcGVyaXBoZXJhbCAqLwogICAgICAgX19IQUxfU01CVVNfRU5BQkxFKGhzbWJ1cyk7CiAKICAgICAgIC8qIENhbGwgdGhlIGNvcnJlc3BvbmRpbmcgY2FsbGJhY2sgdG8gaW5mb3JtIHVwcGVyIGxheWVyIG9mIEVuZCBvZiBUcmFuc2ZlciAqLwpAQCAtMTk0MSw3ICsxOTY2LDggQEAKIAogICAgICAgaWYgKGhzbWJ1cy0+WGZlckNvdW50ID4gTUFYX05CWVRFX1NJWkUpCiAgICAgICB7Ci0gICAgICAgIFNNQlVTX1RyYW5zZmVyQ29uZmlnKGhzbWJ1cywgRGV2QWRkcmVzcywgTUFYX05CWVRFX1NJWkUsIChTTUJVU19SRUxPQURfTU9ERSB8IChoc21idXMtPlhmZXJPcHRpb25zICYgU01CVVNfU0VORFBFQ19NT0RFKSksIFNNQlVTX05PX1NUQVJUU1RPUCk7CisgICAgICAgIFNNQlVTX1RyYW5zZmVyQ29uZmlnKGhzbWJ1cywgRGV2QWRkcmVzcywgTUFYX05CWVRFX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTTUJVU19SRUxPQURfTU9ERSB8IChoc21idXMtPlhmZXJPcHRpb25zICYgU01CVVNfU0VORFBFQ19NT0RFKSksIFNNQlVTX05PX1NUQVJUU1RPUCk7CiAgICAgICAgIGhzbWJ1cy0+WGZlclNpemUgPSBNQVhfTkJZVEVfU0laRTsKICAgICAgIH0KICAgICAgIGVsc2UKQEAgLTIxNTUsNyArMjE4MSw4IEBACiAgICAgSEFMX1NNQlVTX0FkZHJDYWxsYmFjayhoc21idXMsIFRyYW5zZmVyRGlyZWN0aW9uLCBTbGF2ZUFkZHJDb2RlKTsKICNlbmRpZiAvKiBVU0VfSEFMX1NNQlVTX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogICB9Ci0gIGVsc2UgaWYgKChTTUJVU19DSEVDS19GTEFHKFN0YXR1c0ZsYWdzLCBTTUJVU19GTEFHX1JYTkUpICE9IFJFU0VUKSB8fCAoU01CVVNfQ0hFQ0tfRkxBRyhTdGF0dXNGbGFncywgU01CVVNfRkxBR19UQ1IpICE9IFJFU0VUKSkKKyAgZWxzZSBpZiAoKFNNQlVTX0NIRUNLX0ZMQUcoU3RhdHVzRmxhZ3MsIFNNQlVTX0ZMQUdfUlhORSkgIT0gUkVTRVQpIHx8CisgICAgICAgICAgIChTTUJVU19DSEVDS19GTEFHKFN0YXR1c0ZsYWdzLCBTTUJVU19GTEFHX1RDUikgIT0gUkVTRVQpKQogICB7CiAgICAgaWYgKChoc21idXMtPlN0YXRlICYgSEFMX1NNQlVTX1NUQVRFX1NMQVZFX0JVU1lfUlgpID09IEhBTF9TTUJVU19TVEFURV9TTEFWRV9CVVNZX1JYKQogICAgIHsKQEAgLTIyMTAsNyArMjIzNyw4IEBACiAgICAgICB7CiAgICAgICAgIGlmIChoc21idXMtPlhmZXJDb3VudCA+IE1BWF9OQllURV9TSVpFKQogICAgICAgICB7Ci0gICAgICAgICAgU01CVVNfVHJhbnNmZXJDb25maWcoaHNtYnVzLCAwLCBNQVhfTkJZVEVfU0laRSwgKFNNQlVTX1JFTE9BRF9NT0RFIHwgKGhzbWJ1cy0+WGZlck9wdGlvbnMgJiBTTUJVU19TRU5EUEVDX01PREUpKSwgU01CVVNfTk9fU1RBUlRTVE9QKTsKKyAgICAgICAgICBTTUJVU19UcmFuc2ZlckNvbmZpZyhoc21idXMsIDAsIE1BWF9OQllURV9TSVpFLCAoU01CVVNfUkVMT0FEX01PREUgfCAoaHNtYnVzLT5YZmVyT3B0aW9ucyAmIFNNQlVTX1NFTkRQRUNfTU9ERSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNNQlVTX05PX1NUQVJUU1RPUCk7CiAgICAgICAgICAgaHNtYnVzLT5YZmVyU2l6ZSA9IE1BWF9OQllURV9TSVpFOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTI1NTQsNyArMjU4Miw4IEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLXN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBTTUJVU19XYWl0T25GbGFnVW50aWxUaW1lb3V0KFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgRmxhZywgRmxhZ1N0YXR1cyBTdGF0dXMsIHVpbnQzMl90IFRpbWVvdXQpCitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU01CVVNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQzMl90IEZsYWcsIEZsYWdTdGF0dXMgU3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCkKIHsKICAgdWludDMyX3QgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKIApAQCAtMjYwMyw3ICsyNjMyLDggQEAKICAgKiAgICAgQGFyZyBAcmVmIFNNQlVTX0dFTkVSQVRFX1NUQVJUX1dSSVRFIEdlbmVyYXRlIFJlc3RhcnQgZm9yIHdyaXRlIHJlcXVlc3QuCiAgICogQHJldHZhbCBOb25lCiAgICovCi1zdGF0aWMgdm9pZCBTTUJVU19UcmFuc2ZlckNvbmZpZyhTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsICB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90IFNpemUsIHVpbnQzMl90IE1vZGUsIHVpbnQzMl90IFJlcXVlc3QpCitzdGF0aWMgdm9pZCBTTUJVU19UcmFuc2ZlckNvbmZpZyhTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsICB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90IFNpemUsIHVpbnQzMl90IE1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBSZXF1ZXN0KQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfU01CVVNfQUxMX0lOU1RBTkNFKGhzbWJ1cy0+SW5zdGFuY2UpKTsKQEAgLTI2MTEsMTIgKzI2NDEsMTYgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1NNQlVTX1RSQU5TRkVSX1JFUVVFU1QoUmVxdWVzdCkpOwogCiAgIC8qIHVwZGF0ZSBDUjIgcmVnaXN0ZXIgKi8KLSAgTU9ESUZZX1JFRyhoc21idXMtPkluc3RhbmNlLT5DUjIsICgoSTJDX0NSMl9TQUREIHwgSTJDX0NSMl9OQllURVMgfCBJMkNfQ1IyX1JFTE9BRCB8IEkyQ19DUjJfQVVUT0VORCB8IChJMkNfQ1IyX1JEX1dSTiAmICh1aW50MzJfdCkoUmVxdWVzdCA+PiAoMzFVTCAtIEkyQ19DUjJfUkRfV1JOX1BvcykpKSB8IEkyQ19DUjJfU1RBUlQgfCBJMkNfQ1IyX1NUT1AgIHwgSTJDX0NSMl9QRUNCWVRFKSksIFwKLSAgICAgICAgICAgICAodWludDMyX3QpKCgodWludDMyX3QpRGV2QWRkcmVzcyAmIEkyQ19DUjJfU0FERCkgfCAoKCh1aW50MzJfdClTaXplIDw8IEkyQ19DUjJfTkJZVEVTX1BvcykgJiBJMkNfQ1IyX05CWVRFUykgfCAodWludDMyX3QpTW9kZSB8ICh1aW50MzJfdClSZXF1ZXN0KSk7CisgIE1PRElGWV9SRUcoaHNtYnVzLT5JbnN0YW5jZS0+Q1IyLAorICAgICAgICAgICAgICgoSTJDX0NSMl9TQUREIHwgSTJDX0NSMl9OQllURVMgfCBJMkNfQ1IyX1JFTE9BRCB8IEkyQ19DUjJfQVVUT0VORCB8IFwKKyAgICAgICAgICAgICAgIChJMkNfQ1IyX1JEX1dSTiAmICh1aW50MzJfdCkoUmVxdWVzdCA+PiAoMzFVTCAtIEkyQ19DUjJfUkRfV1JOX1BvcykpKSB8IFwKKyAgICAgICAgICAgICAgIEkyQ19DUjJfU1RBUlQgfCBJMkNfQ1IyX1NUT1AgIHwgSTJDX0NSMl9QRUNCWVRFKSksIFwKKyAgICAgICAgICAgICAodWludDMyX3QpKCgodWludDMyX3QpRGV2QWRkcmVzcyAmIEkyQ19DUjJfU0FERCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdClTaXplIDw8IEkyQ19DUjJfTkJZVEVTX1BvcykgJiBJMkNfQ1IyX05CWVRFUykgfCAodWludDMyX3QpTW9kZSB8ICh1aW50MzJfdClSZXF1ZXN0KSk7CiB9CiAKIC8qKgotICAqIEBicmllZiAgQ29udmVydCBTTUJVU3ggT1RIRVJfeHh4IFhmZXJPcHRpb25zIHRvIGZ1bmN0aW9ubmFsIFhmZXJPcHRpb25zLgorICAqIEBicmllZiAgQ29udmVydCBTTUJVU3ggT1RIRVJfeHh4IFhmZXJPcHRpb25zIHRvIGZ1bmN0aW9uYWwgWGZlck9wdGlvbnMuCiAgICogQHBhcmFtICBoc21idXMgU01CVVMgaGFuZGxlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfc3BpLmMgYi9TcmMvc3RtMzJsNHh4X2hhbF9zcGkuYwppbmRleCBhZDE3ZWQ5Li4zMmI5MDgzIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9zcGkuYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF9zcGkuYwpAQCAtNjUsMTYgKzY1LDE2IEBACiAgICAgICAgICAgVXNlIEZ1bmN0aW9ucyBIQUxfU1BJX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhbiBpbnRlcnJ1cHQgY2FsbGJhY2suCiAKICAgICAgICAgICBGdW5jdGlvbiBIQUxfU1BJX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKLSAgICAgICAgICAgICgrKSBUeENwbHRDYWxsYmFjayAgICAgICAgOiBTUEkgVHggQ29tcGxldGVkIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgUnhDcGx0Q2FsbGJhY2sgICAgICAgIDogU1BJIFJ4IENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFR4UnhDcGx0Q2FsbGJhY2sgICAgICA6IFNQSSBUeFJ4IENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFR4SGFsZkNwbHRDYWxsYmFjayAgICA6IFNQSSBUeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFJ4SGFsZkNwbHRDYWxsYmFjayAgICA6IFNQSSBSeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFR4UnhIYWxmQ3BsdENhbGxiYWNrICA6IFNQSSBUeFJ4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgRXJyb3JDYWxsYmFjayAgICAgICAgIDogU1BJIEVycm9yIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgQWJvcnRDcGx0Q2FsbGJhY2sgICAgIDogU1BJIEFib3J0IGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgIDogU1BJIE1zcCBJbml0IGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgIDogU1BJIE1zcCBEZUluaXQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgVHhDcGx0Q2FsbGJhY2sgICAgICAgIDogU1BJIFR4IENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBSeENwbHRDYWxsYmFjayAgICAgICAgOiBTUEkgUnggQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFR4UnhDcGx0Q2FsbGJhY2sgICAgICA6IFNQSSBUeFJ4IENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBUeEhhbGZDcGx0Q2FsbGJhY2sgICAgOiBTUEkgVHggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgUnhIYWxmQ3BsdENhbGxiYWNrICAgIDogU1BJIFJ4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFR4UnhIYWxmQ3BsdENhbGxiYWNrICA6IFNQSSBUeFJ4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIEVycm9yQ2FsbGJhY2sgICAgICAgICA6IFNQSSBFcnJvciBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBBYm9ydENwbHRDYWxsYmFjayAgICAgOiBTUEkgQWJvcnQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgTXNwSW5pdENhbGxiYWNrICAgICAgIDogU1BJIE1zcCBJbml0IGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIE1zcERlSW5pdENhbGxiYWNrICAgICA6IFNQSSBNc3AgRGVJbml0IGNhbGxiYWNrCiAgICAgICAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBDYWxsYmFjayBJRAogICAgICAgICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKQEAgLTg0LDE3ICs4NCwxOCBAQAogICAgICAgICAgIEhBTF9TUElfVW5SZWdpc3RlckNhbGxiYWNrIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKICAgICAgICAgICBhbmQgdGhlIENhbGxiYWNrIElELgogICAgICAgICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6Ci0gICAgICAgICAgICAoKykgVHhDcGx0Q2FsbGJhY2sgICAgICAgIDogU1BJIFR4IENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFJ4Q3BsdENhbGxiYWNrICAgICAgICA6IFNQSSBSeCBDb21wbGV0ZWQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBUeFJ4Q3BsdENhbGxiYWNrICAgICAgOiBTUEkgVHhSeCBDb21wbGV0ZWQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBUeEhhbGZDcGx0Q2FsbGJhY2sgICAgOiBTUEkgVHggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBSeEhhbGZDcGx0Q2FsbGJhY2sgICAgOiBTUEkgUnggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBUeFJ4SGFsZkNwbHRDYWxsYmFjayAgOiBTUEkgVHhSeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIEVycm9yQ2FsbGJhY2sgICAgICAgICA6IFNQSSBFcnJvciBjYWxsYmFjawotICAgICAgICAgICAgKCspIEFib3J0Q3BsdENhbGxiYWNrICAgICA6IFNQSSBBYm9ydCBjYWxsYmFjawotICAgICAgICAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICAgICA6IFNQSSBNc3AgSW5pdCBjYWxsYmFjawotICAgICAgICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICA6IFNQSSBNc3AgRGVJbml0IGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFR4Q3BsdENhbGxiYWNrICAgICAgICA6IFNQSSBUeCBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgUnhDcGx0Q2FsbGJhY2sgICAgICAgIDogU1BJIFJ4IENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBUeFJ4Q3BsdENhbGxiYWNrICAgICAgOiBTUEkgVHhSeCBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgVHhIYWxmQ3BsdENhbGxiYWNrICAgIDogU1BJIFR4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFJ4SGFsZkNwbHRDYWxsYmFjayAgICA6IFNQSSBSeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBUeFJ4SGFsZkNwbHRDYWxsYmFjayAgOiBTUEkgVHhSeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBFcnJvckNhbGxiYWNrICAgICAgICAgOiBTUEkgRXJyb3IgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgQWJvcnRDcGx0Q2FsbGJhY2sgICAgIDogU1BJIEFib3J0IGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIE1zcEluaXRDYWxsYmFjayAgICAgICA6IFNQSSBNc3AgSW5pdCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgOiBTUEkgTXNwIERlSW5pdCBjYWxsYmFjawogCisgICAgICAgWy4uXQogICAgICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBIQUxfU1BJX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX1NQSV9TVEFURV9SRVNFVAogICAgICAgIGFsbCBjYWxsYmFja3MgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIGZ1bmN0aW9uczoKICAgICAgICBleGFtcGxlcyBIQUxfU1BJX01hc3RlclR4Q3BsdENhbGxiYWNrKCksIEhBTF9TUElfTWFzdGVyUnhDcGx0Q2FsbGJhY2soKS4KQEAgLTEwNCw2ICsxMDUsNyBAQAogICAgICAgIElmIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEhBTF9TUElfSW5pdCgpLyBIQUxfU1BJX0RlSW5pdCgpCiAgICAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKSB3aGF0ZXZlciB0aGUgc3RhdGUuCiAKKyAgICAgICBbLi5dCiAgICAgICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBIQUxfU1BJX1NUQVRFX1JFQURZIHN0YXRlIG9ubHkuCiAgICAgICAgRXhjZXB0aW9uIGRvbmUgTXNwSW5pdC9Nc3BEZUluaXQgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkCiAgICAgICAgaW4gSEFMX1NQSV9TVEFURV9SRUFEWSBvciBIQUxfU1BJX1NUQVRFX1JFU0VUIHN0YXRlLApAQCAtMTEyLDcgKzExNCw4IEBACiAgICAgICAgdXNpbmcgSEFMX1NQSV9SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgSEFMX1NQSV9EZUluaXQoKQogICAgICAgIG9yIEhBTF9TUElfSW5pdCgpIGZ1bmN0aW9uLgogCi0gICAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfUFBQX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgorICAgICAgIFsuLl0KKyAgICAgICBXaGVuIHRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9QUFBfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCiAgICAgICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RlcmluZyBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUKICAgICAgICBhbmQgd2VhayAoc3VyY2hhcmdlZCkgY2FsbGJhY2tzIGFyZSB1c2VkLgogCkBAIC0xMjgsNyArMTMxLDcgQEAKICAgICAgICBEYXRhU2l6ZSA9IFNQSV9EQVRBU0laRV84QklUOgogICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgIHwgMkxpbmVzIEZ1bGxkdXBsZXggICB8ICAgICAyTGluZXMgUnhPbmx5ICAgIHwgICAgICAgICAxTGluZSAgICAgICAgfAotICAgICAgIHwgUHJvY2VzcyB8IFRyYW5mZXJ0IG1vZGUgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgICAgIHwgUHJvY2VzcyB8IFRyYW5zZmVyIG1vZGUgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgIHwgIE1hc3RlciAgfCAgU2xhdmUgICB8ICBNYXN0ZXIgICB8ICBTbGF2ZSAgIHwgIE1hc3RlciAgIHwgIFNsYXZlICAgfAogICAgICAgIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fAogICAgICAgIHwgICAgVCAgICB8ICAgICBQb2xsaW5nICAgIHwgRnBjbGsvNCAgfCBGcGNsay84ICB8ICAgIE5BICAgICB8ICAgIE5BICAgIHwgICAgTkEgICAgIHwgICBOQSAgICAgfApAQCAtMTUzLDcgKzE1Niw3IEBACiAgICAgICAgRGF0YVNpemUgPSBTUElfREFUQVNJWkVfMTZCSVQ6CiAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAyTGluZXMgRnVsbGR1cGxleCAgIHwgICAgIDJMaW5lcyBSeE9ubHkgICAgfCAgICAgICAgIDFMaW5lICAgICAgICB8Ci0gICAgICAgfCBQcm9jZXNzIHwgVHJhbmZlcnQgbW9kZSAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgICAgICAgfCBQcm9jZXNzIHwgVHJhbnNmZXIgbW9kZSAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgTWFzdGVyICB8ICBTbGF2ZSAgIHwgIE1hc3RlciAgIHwgIFNsYXZlICAgfCAgTWFzdGVyICAgfCAgU2xhdmUgICB8CiAgICAgICAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18CiAgICAgICAgfCAgICBUICAgIHwgICAgIFBvbGxpbmcgICAgfCBGcGNsay80ICB8IEZwY2xrLzggIHwgICAgTkEgICAgIHwgICAgTkEgICAgfCAgICBOQSAgICAgfCAgIE5BICAgICB8CkBAIC0yNjksOCArMjcyLDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBTUElfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICMjIyMjIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgIyMjIyMKQEAgLTMzNCw2ICszMzcsMjQgQEAKICAgewogICAgIGFzc2VydF9wYXJhbShJU19TUElfQ1BPTChoc3BpLT5Jbml0LkNMS1BvbGFyaXR5KSk7CiAgICAgYXNzZXJ0X3BhcmFtKElTX1NQSV9DUEhBKGhzcGktPkluaXQuQ0xLUGhhc2UpKTsKKworICAgIGlmIChoc3BpLT5Jbml0Lk1vZGUgPT0gU1BJX01PREVfTUFTVEVSKQorICAgIHsKKyAgICAgIGFzc2VydF9wYXJhbShJU19TUElfQkFVRFJBVEVfUFJFU0NBTEVSKGhzcGktPkluaXQuQmF1ZFJhdGVQcmVzY2FsZXIpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIEJhdWRyYXRlIHByZXNjYWxlciBub3QgdXNlIGluIE1vdG9yYW9sYSBTbGF2ZSBtb2RlLiBmb3JjZSB0byBkZWZhdWx0IHZhbHVlICovCisgICAgICBoc3BpLT5Jbml0LkJhdWRSYXRlUHJlc2NhbGVyID0gU1BJX0JBVURSQVRFUFJFU0NBTEVSXzI7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIGFzc2VydF9wYXJhbShJU19TUElfQkFVRFJBVEVfUFJFU0NBTEVSKGhzcGktPkluaXQuQmF1ZFJhdGVQcmVzY2FsZXIpKTsKKworICAgIC8qIEZvcmNlIHBvbGFyaXR5IGFuZCBwaGFzZSB0byBUSSBwcm90b2Nhb2wgcmVxdWlyZW1lbnRzICovCisgICAgaHNwaS0+SW5pdC5DTEtQb2xhcml0eSA9IFNQSV9QT0xBUklUWV9MT1c7CisgICAgaHNwaS0+SW5pdC5DTEtQaGFzZSAgICA9IFNQSV9QSEFTRV8xRURHRTsKICAgfQogI2lmIChVU0VfU1BJX0NSQyAhPSAwVSkKICAgYXNzZXJ0X3BhcmFtKElTX1NQSV9DUkNfQ0FMQ1VMQVRJT04oaHNwaS0+SW5pdC5DUkNDYWxjdWxhdGlvbikpOwpAQCAtMzk3LDQ0ICs0MTgsNTYgQEAKICAgICBoc3BpLT5Jbml0LkNSQ0NhbGN1bGF0aW9uID0gU1BJX0NSQ0NBTENVTEFUSU9OX0RJU0FCTEU7CiAgIH0KIAotICAvKiBBbGlnbiB0aGUgQ1JDIExlbmd0aCBvbiB0aGUgZGF0YSBzaXplICovCi0gIGlmIChoc3BpLT5Jbml0LkNSQ0xlbmd0aCA9PSBTUElfQ1JDX0xFTkdUSF9EQVRBU0laRSkKLSAgewotICAgIC8qIENSQyBMZW5ndGggYWxpZ25lZCBvbiB0aGUgZGF0YSBzaXplIDogdmFsdWUgc2V0IGJ5IGRlZmF1bHQgKi8KLSAgICBpZiAoaHNwaS0+SW5pdC5EYXRhU2l6ZSA+IFNQSV9EQVRBU0laRV84QklUKQotICAgIHsKLSAgICAgIGhzcGktPkluaXQuQ1JDTGVuZ3RoID0gU1BJX0NSQ19MRU5HVEhfMTZCSVQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBoc3BpLT5Jbml0LkNSQ0xlbmd0aCA9IFNQSV9DUkNfTEVOR1RIXzhCSVQ7Ci0gICAgfQotICB9Ci0KICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTUEl4IENSMSAmIENSMiBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgIC8qIENvbmZpZ3VyZSA6IFNQSSBNb2RlLCBDb21tdW5pY2F0aW9uIE1vZGUsIENsb2NrIHBvbGFyaXR5IGFuZCBwaGFzZSwgTlNTIG1hbmFnZW1lbnQsCiAgIENvbW11bmljYXRpb24gc3BlZWQsIEZpcnN0IGJpdCBhbmQgQ1JDIGNhbGN1bGF0aW9uIHN0YXRlICovCi0gIFdSSVRFX1JFRyhoc3BpLT5JbnN0YW5jZS0+Q1IxLCAoaHNwaS0+SW5pdC5Nb2RlIHwgaHNwaS0+SW5pdC5EaXJlY3Rpb24gfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhzcGktPkluaXQuQ0xLUG9sYXJpdHkgfCBoc3BpLT5Jbml0LkNMS1BoYXNlIHwgKGhzcGktPkluaXQuTlNTICYgU1BJX0NSMV9TU00pIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3BpLT5Jbml0LkJhdWRSYXRlUHJlc2NhbGVyIHwgaHNwaS0+SW5pdC5GaXJzdEJpdCAgfCBoc3BpLT5Jbml0LkNSQ0NhbGN1bGF0aW9uKSk7CisgIFdSSVRFX1JFRyhoc3BpLT5JbnN0YW5jZS0+Q1IxLCAoKGhzcGktPkluaXQuTW9kZSAmIChTUElfQ1IxX01TVFIgfCBTUElfQ1IxX1NTSSkpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaHNwaS0+SW5pdC5EaXJlY3Rpb24gJiAoU1BJX0NSMV9SWE9OTFkgfCBTUElfQ1IxX0JJRElNT0RFKSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoc3BpLT5Jbml0LkNMS1BvbGFyaXR5ICYgU1BJX0NSMV9DUE9MKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhzcGktPkluaXQuQ0xLUGhhc2UgJiBTUElfQ1IxX0NQSEEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaHNwaS0+SW5pdC5OU1MgJiBTUElfQ1IxX1NTTSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoc3BpLT5Jbml0LkJhdWRSYXRlUHJlc2NhbGVyICYgU1BJX0NSMV9CUl9Nc2spIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaHNwaS0+SW5pdC5GaXJzdEJpdCAgJiBTUElfQ1IxX0xTQkZJUlNUKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhzcGktPkluaXQuQ1JDQ2FsY3VsYXRpb24gJiBTUElfQ1IxX0NSQ0VOKSkpOwogI2lmIChVU0VfU1BJX0NSQyAhPSAwVSkKLSAgLyogQ29uZmlndXJlIDogQ1JDIExlbmd0aCAqLwotICBpZiAoaHNwaS0+SW5pdC5DUkNMZW5ndGggPT0gU1BJX0NSQ19MRU5HVEhfMTZCSVQpCisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTUEl4IENSQ0wgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgaWYgKGhzcGktPkluaXQuQ1JDQ2FsY3VsYXRpb24gPT0gU1BJX0NSQ0NBTENVTEFUSU9OX0VOQUJMRSkKICAgewotICAgIGhzcGktPkluc3RhbmNlLT5DUjEgfD0gU1BJX0NSMV9DUkNMOworICAgIC8qIEFsaWduIHRoZSBDUkMgTGVuZ3RoIG9uIHRoZSBkYXRhIHNpemUgKi8KKyAgICBpZiAoaHNwaS0+SW5pdC5DUkNMZW5ndGggPT0gU1BJX0NSQ19MRU5HVEhfREFUQVNJWkUpCisgICAgeworICAgICAgLyogQ1JDIExlbmd0aCBhbGlnbmVkIG9uIHRoZSBkYXRhIHNpemUgOiB2YWx1ZSBzZXQgYnkgZGVmYXVsdCAqLworICAgICAgaWYgKGhzcGktPkluaXQuRGF0YVNpemUgPiBTUElfREFUQVNJWkVfOEJJVCkKKyAgICAgIHsKKyAgICAgICAgaHNwaS0+SW5pdC5DUkNMZW5ndGggPSBTUElfQ1JDX0xFTkdUSF8xNkJJVDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaHNwaS0+SW5pdC5DUkNMZW5ndGggPSBTUElfQ1JDX0xFTkdUSF84QklUOworICAgICAgfQorICAgIH0KKworICAgIC8qIENvbmZpZ3VyZSA6IENSQyBMZW5ndGggKi8KKyAgICBpZiAoaHNwaS0+SW5pdC5DUkNMZW5ndGggPT0gU1BJX0NSQ19MRU5HVEhfMTZCSVQpCisgICAgeworICAgICAgU0VUX0JJVChoc3BpLT5JbnN0YW5jZS0+Q1IxLCBTUElfQ1IxX0NSQ0wpOworICAgIH0KICAgfQogI2VuZGlmIC8qIFVTRV9TUElfQ1JDICovCiAKICAgLyogQ29uZmlndXJlIDogTlNTIG1hbmFnZW1lbnQsIFRJIE1vZGUsIE5TUyBQdWxzZSwgRGF0YSBzaXplIGFuZCBSeCBGaWZvIHRocmVzaG9sZCAqLwotICBXUklURV9SRUcoaHNwaS0+SW5zdGFuY2UtPkNSMiwgKCgoaHNwaS0+SW5pdC5OU1MgPj4gMTZVKSAmIFNQSV9DUjJfU1NPRSkgfCBoc3BpLT5Jbml0LlRJTW9kZSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHNwaS0+SW5pdC5OU1NQTW9kZSB8IGhzcGktPkluaXQuRGF0YVNpemUpIHwgZnJ4dGgpOworICBXUklURV9SRUcoaHNwaS0+SW5zdGFuY2UtPkNSMiwgKCgoaHNwaS0+SW5pdC5OU1MgPj4gMTZVKSAmIFNQSV9DUjJfU1NPRSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoc3BpLT5Jbml0LlRJTW9kZSAmIFNQSV9DUjJfRlJGKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhzcGktPkluaXQuTlNTUE1vZGUgJiBTUElfQ1IyX05TU1ApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaHNwaS0+SW5pdC5EYXRhU2l6ZSAmIFNQSV9DUjJfRFNfTXNrKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyeHRoICYgU1BJX0NSMl9GUlhUSCkpKTsKIAogI2lmIChVU0VfU1BJX0NSQyAhPSAwVSkKICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNQSXggQ1JDUE9MWSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLSovCiAgIC8qIENvbmZpZ3VyZSA6IENSQyBQb2x5bm9taWFsICovCiAgIGlmIChoc3BpLT5Jbml0LkNSQ0NhbGN1bGF0aW9uID09IFNQSV9DUkNDQUxDVUxBVElPTl9FTkFCTEUpCiAgIHsKLSAgICBXUklURV9SRUcoaHNwaS0+SW5zdGFuY2UtPkNSQ1BSLCBoc3BpLT5Jbml0LkNSQ1BvbHlub21pYWwpOworICAgIFdSSVRFX1JFRyhoc3BpLT5JbnN0YW5jZS0+Q1JDUFIsIChoc3BpLT5Jbml0LkNSQ1BvbHlub21pYWwgJiBTUElfQ1JDUFJfQ1JDUE9MWV9Nc2spKTsKICAgfQogI2VuZGlmIC8qIFVTRV9TUElfQ1JDICovCiAKQEAgLTUzNSw3ICs1NjgsOCBAQAogICAqIEBwYXJhbSAgcENhbGxiYWNrIHBvaW50ZXIgdG8gdGhlIENhbGxiYWNrIGZ1bmN0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU1BJX1JlZ2lzdGVyQ2FsbGJhY2soU1BJX0hhbmRsZVR5cGVEZWYgKmhzcGksIEhBTF9TUElfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwgcFNQSV9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NQSV9SZWdpc3RlckNhbGxiYWNrKFNQSV9IYW5kbGVUeXBlRGVmICpoc3BpLCBIQUxfU1BJX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNQSV9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKQEAgLTc0NSw4ICs3NzksOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIFNQSV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICBEYXRhIHRyYW5zZmVycyBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgIERhdGEgdHJhbnNmZXJzIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucyAjIyMjIwpAQCAtODMxLDYgKzg2NSw4IEBACiAgIC8qIENvbmZpZ3VyZSBjb21tdW5pY2F0aW9uIGRpcmVjdGlvbiA6IDFMaW5lICovCiAgIGlmIChoc3BpLT5Jbml0LkRpcmVjdGlvbiA9PSBTUElfRElSRUNUSU9OXzFMSU5FKQogICB7CisgICAgLyogRGlzYWJsZSBTUEkgUGVyaXBoZXJhbCBiZWZvcmUgc2V0IDFMaW5lIGRpcmVjdGlvbiAoQklESU9FIGJpdCkgKi8KKyAgICBfX0hBTF9TUElfRElTQUJMRShoc3BpKTsKICAgICBTUElfMUxJTkVfVFgoaHNwaSk7CiAgIH0KIApAQCAtMTAzOCw2ICsxMDc0LDggQEAKICAgLyogQ29uZmlndXJlIGNvbW11bmljYXRpb24gZGlyZWN0aW9uOiAxTGluZSAqLwogICBpZiAoaHNwaS0+SW5pdC5EaXJlY3Rpb24gPT0gU1BJX0RJUkVDVElPTl8xTElORSkKICAgeworICAgIC8qIERpc2FibGUgU1BJIFBlcmlwaGVyYWwgYmVmb3JlIHNldCAxTGluZSBkaXJlY3Rpb24gKEJJRElPRSBiaXQpICovCisgICAgX19IQUxfU1BJX0RJU0FCTEUoaHNwaSk7CiAgICAgU1BJXzFMSU5FX1JYKGhzcGkpOwogICB9CiAKQEAgLTE1NDAsNiArMTU3OCw4IEBACiAgIC8qIENvbmZpZ3VyZSBjb21tdW5pY2F0aW9uIGRpcmVjdGlvbiA6IDFMaW5lICovCiAgIGlmIChoc3BpLT5Jbml0LkRpcmVjdGlvbiA9PSBTUElfRElSRUNUSU9OXzFMSU5FKQogICB7CisgICAgLyogRGlzYWJsZSBTUEkgUGVyaXBoZXJhbCBiZWZvcmUgc2V0IDFMaW5lIGRpcmVjdGlvbiAoQklESU9FIGJpdCkgKi8KKyAgICBfX0hBTF9TUElfRElTQUJMRShoc3BpKTsKICAgICBTUElfMUxJTkVfVFgoaHNwaSk7CiAgIH0KIApAQCAtMTYzMSw2ICsxNjcxLDggQEAKICAgLyogQ29uZmlndXJlIGNvbW11bmljYXRpb24gZGlyZWN0aW9uIDogMUxpbmUgKi8KICAgaWYgKGhzcGktPkluaXQuRGlyZWN0aW9uID09IFNQSV9ESVJFQ1RJT05fMUxJTkUpCiAgIHsKKyAgICAvKiBEaXNhYmxlIFNQSSBQZXJpcGhlcmFsIGJlZm9yZSBzZXQgMUxpbmUgZGlyZWN0aW9uIChCSURJT0UgYml0KSAqLworICAgIF9fSEFMX1NQSV9ESVNBQkxFKGhzcGkpOwogICAgIFNQSV8xTElORV9SWChoc3BpKTsKICAgfQogCkBAIC0xODMxLDYgKzE4NzMsOCBAQAogICAvKiBDb25maWd1cmUgY29tbXVuaWNhdGlvbiBkaXJlY3Rpb24gOiAxTGluZSAqLwogICBpZiAoaHNwaS0+SW5pdC5EaXJlY3Rpb24gPT0gU1BJX0RJUkVDVElPTl8xTElORSkKICAgeworICAgIC8qIERpc2FibGUgU1BJIFBlcmlwaGVyYWwgYmVmb3JlIHNldCAxTGluZSBkaXJlY3Rpb24gKEJJRElPRSBiaXQpICovCisgICAgX19IQUxfU1BJX0RJU0FCTEUoaHNwaSk7CiAgICAgU1BJXzFMSU5FX1RYKGhzcGkpOwogICB9CiAKQEAgLTE4NzIsNyArMTkxNiw4IEBACiAgIH0KIAogICAvKiBFbmFibGUgdGhlIFR4IERNQSBTdHJlYW0vQ2hhbm5lbCAqLwotICBpZiAoSEFMX09LICE9IEhBTF9ETUFfU3RhcnRfSVQoaHNwaS0+aGRtYXR4LCAodWludDMyX3QpaHNwaS0+cFR4QnVmZlB0ciwgKHVpbnQzMl90KSZoc3BpLT5JbnN0YW5jZS0+RFIsIGhzcGktPlR4WGZlckNvdW50KSkKKyAgaWYgKEhBTF9PSyAhPSBIQUxfRE1BX1N0YXJ0X0lUKGhzcGktPmhkbWF0eCwgKHVpbnQzMl90KWhzcGktPnBUeEJ1ZmZQdHIsICh1aW50MzJfdCkmaHNwaS0+SW5zdGFuY2UtPkRSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHNwaS0+VHhYZmVyQ291bnQpKQogICB7CiAgICAgLyogVXBkYXRlIFNQSSBlcnJvciBjb2RlICovCiAgICAgU0VUX0JJVChoc3BpLT5FcnJvckNvZGUsIEhBTF9TUElfRVJST1JfRE1BKTsKQEAgLTE5NjAsNiArMjAwNSw4IEBACiAgIC8qIENvbmZpZ3VyZSBjb21tdW5pY2F0aW9uIGRpcmVjdGlvbiA6IDFMaW5lICovCiAgIGlmIChoc3BpLT5Jbml0LkRpcmVjdGlvbiA9PSBTUElfRElSRUNUSU9OXzFMSU5FKQogICB7CisgICAgLyogRGlzYWJsZSBTUEkgUGVyaXBoZXJhbCBiZWZvcmUgc2V0IDFMaW5lIGRpcmVjdGlvbiAoQklESU9FIGJpdCkgKi8KKyAgICBfX0hBTF9TUElfRElTQUJMRShoc3BpKTsKICAgICBTUElfMUxJTkVfUlgoaHNwaSk7CiAgIH0KIApAQCAtMjAxNCw3ICsyMDYxLDggQEAKICAgaHNwaS0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7CiAKICAgLyogRW5hYmxlIHRoZSBSeCBETUEgU3RyZWFtL0NoYW5uZWwgICovCi0gIGlmIChIQUxfT0sgIT0gSEFMX0RNQV9TdGFydF9JVChoc3BpLT5oZG1hcngsICh1aW50MzJfdCkmaHNwaS0+SW5zdGFuY2UtPkRSLCAodWludDMyX3QpaHNwaS0+cFJ4QnVmZlB0ciwgaHNwaS0+UnhYZmVyQ291bnQpKQorICBpZiAoSEFMX09LICE9IEhBTF9ETUFfU3RhcnRfSVQoaHNwaS0+aGRtYXJ4LCAodWludDMyX3QpJmhzcGktPkluc3RhbmNlLT5EUiwgKHVpbnQzMl90KWhzcGktPnBSeEJ1ZmZQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3BpLT5SeFhmZXJDb3VudCkpCiAgIHsKICAgICAvKiBVcGRhdGUgU1BJIGVycm9yIGNvZGUgKi8KICAgICBTRVRfQklUKGhzcGktPkVycm9yQ29kZSwgSEFMX1NQSV9FUlJPUl9ETUEpOwpAQCAtMjE4MSw3ICsyMjI5LDggQEAKICAgaHNwaS0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7CiAKICAgLyogRW5hYmxlIHRoZSBSeCBETUEgU3RyZWFtL0NoYW5uZWwgICovCi0gIGlmIChIQUxfT0sgIT0gSEFMX0RNQV9TdGFydF9JVChoc3BpLT5oZG1hcngsICh1aW50MzJfdCkmaHNwaS0+SW5zdGFuY2UtPkRSLCAodWludDMyX3QpaHNwaS0+cFJ4QnVmZlB0ciwgaHNwaS0+UnhYZmVyQ291bnQpKQorICBpZiAoSEFMX09LICE9IEhBTF9ETUFfU3RhcnRfSVQoaHNwaS0+aGRtYXJ4LCAodWludDMyX3QpJmhzcGktPkluc3RhbmNlLT5EUiwgKHVpbnQzMl90KWhzcGktPnBSeEJ1ZmZQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3BpLT5SeFhmZXJDb3VudCkpCiAgIHsKICAgICAvKiBVcGRhdGUgU1BJIGVycm9yIGNvZGUgKi8KICAgICBTRVRfQklUKGhzcGktPkVycm9yQ29kZSwgSEFMX1NQSV9FUlJPUl9ETUEpOwpAQCAtMjIwMiw3ICsyMjUxLDggQEAKICAgaHNwaS0+aGRtYXR4LT5YZmVyQWJvcnRDYWxsYmFjayAgICA9IE5VTEw7CiAKICAgLyogRW5hYmxlIHRoZSBUeCBETUEgU3RyZWFtL0NoYW5uZWwgICovCi0gIGlmIChIQUxfT0sgIT0gSEFMX0RNQV9TdGFydF9JVChoc3BpLT5oZG1hdHgsICh1aW50MzJfdCloc3BpLT5wVHhCdWZmUHRyLCAodWludDMyX3QpJmhzcGktPkluc3RhbmNlLT5EUiwgaHNwaS0+VHhYZmVyQ291bnQpKQorICBpZiAoSEFMX09LICE9IEhBTF9ETUFfU3RhcnRfSVQoaHNwaS0+aGRtYXR4LCAodWludDMyX3QpaHNwaS0+cFR4QnVmZlB0ciwgKHVpbnQzMl90KSZoc3BpLT5JbnN0YW5jZS0+RFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3BpLT5UeFhmZXJDb3VudCkpCiAgIHsKICAgICAvKiBVcGRhdGUgU1BJIGVycm9yIGNvZGUgKi8KICAgICBTRVRfQklUKGhzcGktPkVycm9yQ29kZSwgSEFMX1NQSV9FUlJPUl9ETUEpOwpAQCAtMjI0MiwxMSArMjI5MiwxMiBAQAogICAqICAgICAgICAgICAtIFNldCBoYW5kbGUgU3RhdGUgdG8gUkVBRFkKICAgKiBAbm90ZSAgIFRoaXMgcHJvY2VkdXJlIGlzIGV4ZWN1dGVkIGluIGJsb2NraW5nIG1vZGUgOiB3aGVuIGV4aXRpbmcgZnVuY3Rpb24sIEFib3J0IGlzIGNvbnNpZGVyZWQgYXMgY29tcGxldGVkLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwotKi8KKyAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUElfQWJvcnQoU1BJX0hhbmRsZVR5cGVEZWYgKmhzcGkpCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIGVycm9yY29kZTsKLSAgX19JTyB1aW50MzJfdCBjb3VudCwgcmVzZXRjb3VudDsKKyAgX19JTyB1aW50MzJfdCBjb3VudDsKKyAgX19JTyB1aW50MzJfdCByZXNldGNvdW50OwogCiAgIC8qIEluaXRpYWxpemVkIGxvY2FsIHZhcmlhYmxlICAqLwogICBlcnJvcmNvZGUgPSBIQUxfT0s7CkBAIC0yMjY5LDggKzIzMjAsNyBAQAogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIGNvdW50LS07Ci0gICAgfQotICAgIHdoaWxlIChoc3BpLT5TdGF0ZSAhPSBIQUxfU1BJX1NUQVRFX0FCT1JUKTsKKyAgICB9IHdoaWxlIChoc3BpLT5TdGF0ZSAhPSBIQUxfU1BJX1NUQVRFX0FCT1JUKTsKICAgICAvKiBSZXNldCBUaW1lb3V0IENvdW50ZXIgKi8KICAgICBjb3VudCA9IHJlc2V0Y291bnQ7CiAgIH0KQEAgLTIyODcsOCArMjMzNyw3IEBACiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICAgY291bnQtLTsKLSAgICB9Ci0gICAgd2hpbGUgKGhzcGktPlN0YXRlICE9IEhBTF9TUElfU1RBVEVfQUJPUlQpOworICAgIH0gd2hpbGUgKGhzcGktPlN0YXRlICE9IEhBTF9TUElfU1RBVEVfQUJPUlQpOwogICAgIC8qIFJlc2V0IFRpbWVvdXQgQ291bnRlciAqLwogICAgIGNvdW50ID0gcmVzZXRjb3VudDsKICAgfQpAQCAtMjQwMywxMiArMjQ1MiwxMyBAQAogICAqIEBub3RlICAgVGhpcyBwcm9jZWR1cmUgaXMgZXhlY3V0ZWQgaW4gSW50ZXJydXB0IG1vZGUsIG1lYW5pbmcgdGhhdCBhYm9ydCBwcm9jZWR1cmUgY291bGQgYmUKICAgKiAgICAgICAgIGNvbnNpZGVyZWQgYXMgY29tcGxldGVkIG9ubHkgd2hlbiB1c2VyIGFib3J0IGNvbXBsZXRlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIChub3Qgd2hlbiBleGl0aW5nIGZ1bmN0aW9uKS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKLSovCisgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1BJX0Fib3J0X0lUKFNQSV9IYW5kbGVUeXBlRGVmICpoc3BpKQogewogICBIQUxfU3RhdHVzVHlwZURlZiBlcnJvcmNvZGU7CiAgIHVpbnQzMl90IGFib3J0Y3BsdCA7Ci0gIF9fSU8gdWludDMyX3QgY291bnQsIHJlc2V0Y291bnQ7CisgIF9fSU8gdWludDMyX3QgY291bnQ7CisgIF9fSU8gdWludDMyX3QgcmVzZXRjb3VudDsKIAogICAvKiBJbml0aWFsaXplZCBsb2NhbCB2YXJpYWJsZSAgKi8KICAgZXJyb3Jjb2RlID0gSEFMX09LOwpAQCAtMjQzMiw4ICsyNDgyLDcgQEAKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgICBjb3VudC0tOwotICAgIH0KLSAgICB3aGlsZSAoaHNwaS0+U3RhdGUgIT0gSEFMX1NQSV9TVEFURV9BQk9SVCk7CisgICAgfSB3aGlsZSAoaHNwaS0+U3RhdGUgIT0gSEFMX1NQSV9TVEFURV9BQk9SVCk7CiAgICAgLyogUmVzZXQgVGltZW91dCBDb3VudGVyICovCiAgICAgY291bnQgPSByZXNldGNvdW50OwogICB9CkBAIC0yNDUwLDggKzI0OTksNyBAQAogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIGNvdW50LS07Ci0gICAgfQotICAgIHdoaWxlIChoc3BpLT5TdGF0ZSAhPSBIQUxfU1BJX1NUQVRFX0FCT1JUKTsKKyAgICB9IHdoaWxlIChoc3BpLT5TdGF0ZSAhPSBIQUxfU1BJX1NUQVRFX0FCT1JUKTsKICAgICAvKiBSZXNldCBUaW1lb3V0IENvdW50ZXIgKi8KICAgICBjb3VudCA9IHJlc2V0Y291bnQ7CiAgIH0KQEAgLTI2NjcsNyArMjcxNSw4IEBACiAgIH0KIAogICAvKiBTUEkgaW4gRXJyb3IgVHJlYXRtZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSAgaWYgKCgoU1BJX0NIRUNLX0ZMQUcoaXRmbGFnLCBTUElfRkxBR19NT0RGKSAhPSBSRVNFVCkgfHwgKFNQSV9DSEVDS19GTEFHKGl0ZmxhZywgU1BJX0ZMQUdfT1ZSKSAhPSBSRVNFVCkgfHwgKFNQSV9DSEVDS19GTEFHKGl0ZmxhZywgU1BJX0ZMQUdfRlJFKSAhPSBSRVNFVCkpICYmIChTUElfQ0hFQ0tfSVRfU09VUkNFKGl0c291cmNlLCBTUElfSVRfRVJSKSAhPSBSRVNFVCkpCisgIGlmICgoKFNQSV9DSEVDS19GTEFHKGl0ZmxhZywgU1BJX0ZMQUdfTU9ERikgIT0gUkVTRVQpIHx8IChTUElfQ0hFQ0tfRkxBRyhpdGZsYWcsIFNQSV9GTEFHX09WUikgIT0gUkVTRVQpCisgICAgICAgfHwgKFNQSV9DSEVDS19GTEFHKGl0ZmxhZywgU1BJX0ZMQUdfRlJFKSAhPSBSRVNFVCkpICYmIChTUElfQ0hFQ0tfSVRfU09VUkNFKGl0c291cmNlLCBTUElfSVRfRVJSKSAhPSBSRVNFVCkpCiAgIHsKICAgICAvKiBTUEkgT3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQgb2NjdXJyZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgaWYgKFNQSV9DSEVDS19GTEFHKGl0ZmxhZywgU1BJX0ZMQUdfT1ZSKSAhPSBSRVNFVCkKQEAgLTMwNDQsOCArMzA5MywxNyBAQAogICAgIH0KICNlbmRpZiAvKiBVU0VfU1BJX0NSQyAqLwogCi0gICAgLyogRGlzYWJsZSBSeC9UeCBETUEgUmVxdWVzdCAoZG9uZSBieSBkZWZhdWx0IHRvIGhhbmRsZSB0aGUgY2FzZSBtYXN0ZXIgcnggZGlyZWN0aW9uIDIgbGluZXMpICovCi0gICAgQ0xFQVJfQklUKGhzcGktPkluc3RhbmNlLT5DUjIsIFNQSV9DUjJfVFhETUFFTiB8IFNQSV9DUjJfUlhETUFFTik7CisgICAgLyogQ2hlY2sgaWYgd2UgYXJlIGluIE1hc3RlciBSWCAyIGxpbmUgbW9kZSAqLworICAgIGlmICgoaHNwaS0+SW5pdC5EaXJlY3Rpb24gPT0gU1BJX0RJUkVDVElPTl8yTElORVMpICYmIChoc3BpLT5Jbml0Lk1vZGUgPT0gU1BJX01PREVfTUFTVEVSKSkKKyAgICB7CisgICAgICAvKiBEaXNhYmxlIFJ4L1R4IERNQSBSZXF1ZXN0IChkb25lIGJ5IGRlZmF1bHQgdG8gaGFuZGxlIHRoZSBjYXNlIG1hc3RlciByeCBkaXJlY3Rpb24gMiBsaW5lcykgKi8KKyAgICAgIENMRUFSX0JJVChoc3BpLT5JbnN0YW5jZS0+Q1IyLCBTUElfQ1IyX1RYRE1BRU4gfCBTUElfQ1IyX1JYRE1BRU4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogTm9ybWFsIGNhc2UgKi8KKyAgICAgIENMRUFSX0JJVChoc3BpLT5JbnN0YW5jZS0+Q1IyLCBTUElfQ1IyX1JYRE1BRU4pOworICAgIH0KIAogICAgIC8qIENoZWNrIHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uICovCiAgICAgaWYgKFNQSV9FbmRSeFRyYW5zYWN0aW9uKGhzcGksIFNQSV9ERUZBVUxUX1RJTUVPVVQsIHRpY2tzdGFydCkgIT0gSEFMX09LKQpAQCAtMzQ2Miw3ICszNTIwLDcgQEAKICAgKi8KIHN0YXRpYyB2b2lkIFNQSV8ybGluZXNSeElTUl84QklUQ1JDKHN0cnVjdCBfX1NQSV9IYW5kbGVUeXBlRGVmICpoc3BpKQogewotICAvKiBSZWFkIDhiaXQgQ1JDIHRvIGZsdXNoIERhdGEgUmVnc2l0ZXIgKi8KKyAgLyogUmVhZCA4Yml0IENSQyB0byBmbHVzaCBEYXRhIFJlZ2lzdGVyICovCiAgIFJFQURfUkVHKCooX19JTyB1aW50OF90ICopJmhzcGktPkluc3RhbmNlLT5EUik7CiAKICAgaHNwaS0+Q1JDU2l6ZS0tOwpAQCAtMzU3MCw3ICszNjI4LDcgQEAKICAgKi8KIHN0YXRpYyB2b2lkIFNQSV8ybGluZXNSeElTUl8xNkJJVENSQyhzdHJ1Y3QgX19TUElfSGFuZGxlVHlwZURlZiAqaHNwaSkKIHsKLSAgLyogUmVhZCAxNmJpdCBDUkMgdG8gZmx1c2ggRGF0YSBSZWdzaXRlciAqLworICAvKiBSZWFkIDE2Yml0IENSQyB0byBmbHVzaCBEYXRhIFJlZ2lzdGVyICovCiAgIFJFQURfUkVHKGhzcGktPkluc3RhbmNlLT5EUik7CiAKICAgLyogRGlzYWJsZSBSWE5FIGludGVycnVwdCAqLwpAQCAtMzc4Nyw2OSArMzg0NSwyMiBAQAogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFNQSV9XYWl0RmxhZ1N0YXRlVW50aWxUaW1lb3V0KFNQSV9IYW5kbGVUeXBlRGVmICpoc3BpLCB1aW50MzJfdCBGbGFnLCBGbGFnU3RhdHVzIFN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRpbWVvdXQsIHVpbnQzMl90IFRpY2tzdGFydCkKIHsKKyAgX19JTyB1aW50MzJfdCBjb3VudDsKKyAgdWludDMyX3QgdG1wX3RpbWVvdXQ7CisgIHVpbnQzMl90IHRtcF90aWNrc3RhcnQ7CisKKyAgLyogQWRqdXN0IFRpbWVvdXQgdmFsdWUgIGluIGNhc2Ugb2YgZW5kIG9mIHRyYW5zZmVyICovCisgIHRtcF90aW1lb3V0ICAgPSBUaW1lb3V0IC0gKEhBTF9HZXRUaWNrKCkgLSBUaWNrc3RhcnQpOworICB0bXBfdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKworICAvKiBDYWxjdWxhdGUgVGltZW91dCBiYXNlZCBvbiBhIHNvZnR3YXJlIGxvb3AgdG8gYXZvaWQgYmxvY2tpbmcgaXNzdWUgaWYgU3lzdGljayBpcyBkaXNhYmxlZCAqLworICBjb3VudCA9IHRtcF90aW1lb3V0ICogKChTeXN0ZW1Db3JlQ2xvY2sgKiAzMlUpID4+IDIwVSk7CisKICAgd2hpbGUgKChfX0hBTF9TUElfR0VUX0ZMQUcoaHNwaSwgRmxhZykgPyBTRVQgOiBSRVNFVCkgIT0gU3RhdGUpCiAgIHsKICAgICBpZiAoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKQogICAgIHsKLSAgICAgIGlmICgoKEhBTF9HZXRUaWNrKCkgLSBUaWNrc3RhcnQpID49IFRpbWVvdXQpIHx8IChUaW1lb3V0ID09IDBVKSkKLSAgICAgIHsKLSAgICAgICAgLyogRGlzYWJsZSB0aGUgU1BJIGFuZCByZXNldCB0aGUgQ1JDOiB0aGUgQ1JDIHZhbHVlIHNob3VsZCBiZSBjbGVhcmVkCi0gICAgICAgIG9uIGJvdGggbWFzdGVyIGFuZCBzbGF2ZSBzaWRlcyBpbiBvcmRlciB0byByZXN5bmNocm9uaXplIHRoZSBtYXN0ZXIKLSAgICAgICAgYW5kIHNsYXZlIGZvciB0aGVpciByZXNwZWN0aXZlIENSQyBjYWxjdWxhdGlvbiAqLwotCi0gICAgICAgIC8qIERpc2FibGUgVFhFLCBSWE5FIGFuZCBFUlIgaW50ZXJydXB0cyBmb3IgdGhlIGludGVycnVwdCBwcm9jZXNzICovCi0gICAgICAgIF9fSEFMX1NQSV9ESVNBQkxFX0lUKGhzcGksIChTUElfSVRfVFhFIHwgU1BJX0lUX1JYTkUgfCBTUElfSVRfRVJSKSk7Ci0KLSAgICAgICAgaWYgKChoc3BpLT5Jbml0Lk1vZGUgPT0gU1BJX01PREVfTUFTVEVSKSAmJiAoKGhzcGktPkluaXQuRGlyZWN0aW9uID09IFNQSV9ESVJFQ1RJT05fMUxJTkUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChoc3BpLT5Jbml0LkRpcmVjdGlvbiA9PSBTUElfRElSRUNUSU9OXzJMSU5FU19SWE9OTFkpKSkKLSAgICAgICAgewotICAgICAgICAgIC8qIERpc2FibGUgU1BJIHBlcmlwaGVyYWwgKi8KLSAgICAgICAgICBfX0hBTF9TUElfRElTQUJMRShoc3BpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIFJlc2V0IENSQyBDYWxjdWxhdGlvbiAqLwotICAgICAgICBpZiAoaHNwaS0+SW5pdC5DUkNDYWxjdWxhdGlvbiA9PSBTUElfQ1JDQ0FMQ1VMQVRJT05fRU5BQkxFKQotICAgICAgICB7Ci0gICAgICAgICAgU1BJX1JFU0VUX0NSQyhoc3BpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGhzcGktPlN0YXRlID0gSEFMX1NQSV9TVEFURV9SRUFEWTsKLQotICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgICAgIF9fSEFMX1VOTE9DSyhoc3BpKTsKLQotICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIEhBTF9PSzsKLX0KLQotLyoqCi0gICogQGJyaWVmICBIYW5kbGUgU1BJIEZJRk8gQ29tbXVuaWNhdGlvbiBUaW1lb3V0LgotICAqIEBwYXJhbSAgaHNwaSBwb2ludGVyIHRvIGEgU1BJX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKLSAgKiAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFNQSSBtb2R1bGUuCi0gICogQHBhcmFtICBGaWZvIEZpZm8gdG8gY2hlY2sKLSAgKiBAcGFyYW0gIFN0YXRlIEZpZm8gc3RhdGUgdG8gY2hlY2sKLSAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCBkdXJhdGlvbgotICAqIEBwYXJhbSAgVGlja3N0YXJ0IHRpY2sgc3RhcnQgdmFsdWUKLSAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKLSAgKi8KLXN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBTUElfV2FpdEZpZm9TdGF0ZVVudGlsVGltZW91dChTUElfSGFuZGxlVHlwZURlZiAqaHNwaSwgdWludDMyX3QgRmlmbywgdWludDMyX3QgU3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KQotewotICB3aGlsZSAoKGhzcGktPkluc3RhbmNlLT5TUiAmIEZpZm8pICE9IFN0YXRlKQotICB7Ci0gICAgaWYgKChGaWZvID09IFNQSV9TUl9GUkxWTCkgJiYgKFN0YXRlID09IFNQSV9GUkxWTF9FTVBUWSkpCi0gICAgewotICAgICAgLyogUmVhZCA4Yml0IENSQyB0byBmbHVzaCBEYXRhIFJlZ2lzdGVyICovCi0gICAgICBSRUFEX1JFRygqKChfX0lPIHVpbnQ4X3QgKikmaHNwaS0+SW5zdGFuY2UtPkRSKSk7Ci0gICAgfQotCi0gICAgaWYgKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkKLSAgICB7Ci0gICAgICBpZiAoKChIQUxfR2V0VGljaygpIC0gVGlja3N0YXJ0KSA+PSBUaW1lb3V0KSB8fCAoVGltZW91dCA9PSAwVSkpCisgICAgICBpZiAoKChIQUxfR2V0VGljaygpIC0gdG1wX3RpY2tzdGFydCkgPj0gdG1wX3RpbWVvdXQpIHx8ICh0bXBfdGltZW91dCA9PSAwVSkpCiAgICAgICB7CiAgICAgICAgIC8qIERpc2FibGUgdGhlIFNQSSBhbmQgcmVzZXQgdGhlIENSQzogdGhlIENSQyB2YWx1ZSBzaG91bGQgYmUgY2xlYXJlZAogICAgICAgICAgICBvbiBib3RoIG1hc3RlciBhbmQgc2xhdmUgc2lkZXMgaW4gb3JkZXIgdG8gcmVzeW5jaHJvbml6ZSB0aGUgbWFzdGVyCkBAIC0zODc4LDYgKzM4ODksODcgQEAKIAogICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgICB9CisgICAgICAvKiBJZiBTeXN0aWNrIGlzIGRpc2FibGVkIG9yIG5vdCBpbmNyZW1lbnRlZCwgZGVhY3RpdmF0ZSB0aW1lb3V0IHRvIGdvIGluIGRpc2FibGUgbG9vcCBwcm9jZWR1cmUgKi8KKyAgICAgIGlmKGNvdW50ID09IDBVKQorICAgICAgeworICAgICAgICB0bXBfdGltZW91dCA9IDBVOworICAgICAgfQorICAgICAgY291bnQtLTsKKyAgICB9CisgIH0KKworICByZXR1cm4gSEFMX09LOworfQorCisvKioKKyAgKiBAYnJpZWYgIEhhbmRsZSBTUEkgRklGTyBDb21tdW5pY2F0aW9uIFRpbWVvdXQuCisgICogQHBhcmFtICBoc3BpIHBvaW50ZXIgdG8gYSBTUElfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW0gIEZpZm8gRmlmbyB0byBjaGVjaworICAqIEBwYXJhbSAgU3RhdGUgRmlmbyBzdGF0ZSB0byBjaGVjaworICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCisgICogQHBhcmFtICBUaWNrc3RhcnQgdGljayBzdGFydCB2YWx1ZQorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFNQSV9XYWl0Rmlmb1N0YXRlVW50aWxUaW1lb3V0KFNQSV9IYW5kbGVUeXBlRGVmICpoc3BpLCB1aW50MzJfdCBGaWZvLCB1aW50MzJfdCBTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0LCB1aW50MzJfdCBUaWNrc3RhcnQpCit7CisgIF9fSU8gdWludDMyX3QgY291bnQ7CisgIHVpbnQzMl90IHRtcF90aW1lb3V0OworICB1aW50MzJfdCB0bXBfdGlja3N0YXJ0OworCisgIC8qIEFkanVzdCBUaW1lb3V0IHZhbHVlICBpbiBjYXNlIG9mIGVuZCBvZiB0cmFuc2ZlciAqLworICB0bXBfdGltZW91dCA9IFRpbWVvdXQgLSAoSEFMX0dldFRpY2soKSAtIFRpY2tzdGFydCk7CisgIHRtcF90aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCisgIC8qIENhbGN1bGF0ZSBUaW1lb3V0IGJhc2VkIG9uIGEgc29mdHdhcmUgbG9vcCB0byBhdm9pZCBibG9ja2luZyBpc3N1ZSBpZiBTeXN0aWNrIGlzIGRpc2FibGVkICovCisgIGNvdW50ID0gdG1wX3RpbWVvdXQgKiAoKFN5c3RlbUNvcmVDbG9jayAqIDM1VSkgPj4gMjBVKTsKKworICB3aGlsZSAoKGhzcGktPkluc3RhbmNlLT5TUiAmIEZpZm8pICE9IFN0YXRlKQorICB7CisgICAgaWYgKChGaWZvID09IFNQSV9TUl9GUkxWTCkgJiYgKFN0YXRlID09IFNQSV9GUkxWTF9FTVBUWSkpCisgICAgeworICAgICAgLyogUmVhZCA4Yml0IENSQyB0byBmbHVzaCBEYXRhIFJlZ2lzdGVyICovCisgICAgICBSRUFEX1JFRygqKChfX0lPIHVpbnQ4X3QgKikmaHNwaS0+SW5zdGFuY2UtPkRSKSk7CisgICAgfQorCisgICAgaWYgKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkKKyAgICB7CisgICAgICBpZiAoKChIQUxfR2V0VGljaygpIC0gdG1wX3RpY2tzdGFydCkgPj0gdG1wX3RpbWVvdXQpIHx8ICh0bXBfdGltZW91dCA9PSAwVSkpCisgICAgICB7CisgICAgICAgIC8qIERpc2FibGUgdGhlIFNQSSBhbmQgcmVzZXQgdGhlIENSQzogdGhlIENSQyB2YWx1ZSBzaG91bGQgYmUgY2xlYXJlZAorICAgICAgICAgICBvbiBib3RoIG1hc3RlciBhbmQgc2xhdmUgc2lkZXMgaW4gb3JkZXIgdG8gcmVzeW5jaHJvbml6ZSB0aGUgbWFzdGVyCisgICAgICAgICAgIGFuZCBzbGF2ZSBmb3IgdGhlaXIgcmVzcGVjdGl2ZSBDUkMgY2FsY3VsYXRpb24gKi8KKworICAgICAgICAvKiBEaXNhYmxlIFRYRSwgUlhORSBhbmQgRVJSIGludGVycnVwdHMgZm9yIHRoZSBpbnRlcnJ1cHQgcHJvY2VzcyAqLworICAgICAgICBfX0hBTF9TUElfRElTQUJMRV9JVChoc3BpLCAoU1BJX0lUX1RYRSB8IFNQSV9JVF9SWE5FIHwgU1BJX0lUX0VSUikpOworCisgICAgICAgIGlmICgoaHNwaS0+SW5pdC5Nb2RlID09IFNQSV9NT0RFX01BU1RFUikgJiYgKChoc3BpLT5Jbml0LkRpcmVjdGlvbiA9PSBTUElfRElSRUNUSU9OXzFMSU5FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaHNwaS0+SW5pdC5EaXJlY3Rpb24gPT0gU1BJX0RJUkVDVElPTl8yTElORVNfUlhPTkxZKSkpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBEaXNhYmxlIFNQSSBwZXJpcGhlcmFsICovCisgICAgICAgICAgX19IQUxfU1BJX0RJU0FCTEUoaHNwaSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBSZXNldCBDUkMgQ2FsY3VsYXRpb24gKi8KKyAgICAgICAgaWYgKGhzcGktPkluaXQuQ1JDQ2FsY3VsYXRpb24gPT0gU1BJX0NSQ0NBTENVTEFUSU9OX0VOQUJMRSkKKyAgICAgICAgeworICAgICAgICAgIFNQSV9SRVNFVF9DUkMoaHNwaSk7CisgICAgICAgIH0KKworICAgICAgICBoc3BpLT5TdGF0ZSA9IEhBTF9TUElfU1RBVEVfUkVBRFk7CisKKyAgICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgICBfX0hBTF9VTkxPQ0soaHNwaSk7CisKKyAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgfQorICAgICAgLyogSWYgU3lzdGljayBpcyBkaXNhYmxlZCBvciBub3QgaW5jcmVtZW50ZWQsIGRlYWN0aXZhdGUgdGltZW91dCB0byBnbyBpbiBkaXNhYmxlIGxvb3AgcHJvY2VkdXJlICovCisgICAgICBpZihjb3VudCA9PSAwVSkKKyAgICAgIHsKKyAgICAgICAgdG1wX3RpbWVvdXQgPSAwVTsKKyAgICAgIH0gICAgICAKKyAgICAgIGNvdW50LS07CiAgICAgfQogICB9CiAKQEAgLTM5NjQsNyArNDA1Niw3IEBACiB7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKIAotICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ21lbnQqLworICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ2VtZW50ICovCiAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKICAgLyogRGlzYWJsZSBFUlIgaW50ZXJydXB0ICovCkBAIC00MTY0LDggKzQyNTYsNyBAQAogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNvdW50LS07Ci0gIH0KLSAgd2hpbGUgKEhBTF9JU19CSVRfU0VUKGhzcGktPkluc3RhbmNlLT5DUjIsIFNQSV9DUjJfUlhORUlFKSk7CisgIH0gd2hpbGUgKEhBTF9JU19CSVRfU0VUKGhzcGktPkluc3RhbmNlLT5DUjIsIFNQSV9DUjJfUlhORUlFKSk7CiAKICAgLyogQ29udHJvbCB0aGUgQlNZIGZsYWcgKi8KICAgaWYgKFNQSV9XYWl0RmxhZ1N0YXRlVW50aWxUaW1lb3V0KGhzcGksIFNQSV9GTEFHX0JTWSwgUkVTRVQsIFNQSV9ERUZBVUxUX1RJTUVPVVQsIEhBTF9HZXRUaWNrKCkpICE9IEhBTF9PSykKQEAgLTQyMDYsOCArNDI5Nyw3IEBACiAgICAgICBicmVhazsKICAgICB9CiAgICAgY291bnQtLTsKLSAgfQotICB3aGlsZSAoSEFMX0lTX0JJVF9TRVQoaHNwaS0+SW5zdGFuY2UtPkNSMiwgU1BJX0NSMl9UWEVJRSkpOworICB9IHdoaWxlIChIQUxfSVNfQklUX1NFVChoc3BpLT5JbnN0YW5jZS0+Q1IyLCBTUElfQ1IyX1RYRUlFKSk7CiAKICAgaWYgKFNQSV9FbmRSeFR4VHJhbnNhY3Rpb24oaHNwaSwgU1BJX0RFRkFVTFRfVElNRU9VVCwgSEFMX0dldFRpY2soKSkgIT0gSEFMX09LKQogICB7CkBAIC00MjM4LDggKzQzMjgsNyBAQAogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIGNvdW50LS07Ci0gICAgfQotICAgIHdoaWxlIChIQUxfSVNfQklUX1NFVChoc3BpLT5JbnN0YW5jZS0+Q1IyLCBTUElfQ1IyX1JYTkVJRSkpOworICAgIH0gd2hpbGUgKEhBTF9JU19CSVRfU0VUKGhzcGktPkluc3RhbmNlLT5DUjIsIFNQSV9DUjJfUlhORUlFKSk7CiAKICAgICAvKiBDb250cm9sIHRoZSBCU1kgZmxhZyAqLwogICAgIGlmIChTUElfV2FpdEZsYWdTdGF0ZVVudGlsVGltZW91dChoc3BpLCBTUElfRkxBR19CU1ksIFJFU0VULCBTUElfREVGQVVMVF9USU1FT1VULCBIQUxfR2V0VGljaygpKSAhPSBIQUxfT0spCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2hhbF9zcmFtLmMgYi9TcmMvc3RtMzJsNHh4X2hhbF9zcmFtLmMKaW5kZXggMjgyYjI2Zi4uYzlhNDlkMiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfc3JhbS5jCisrKyBiL1NyYy9zdG0zMmw0eHhfaGFsX3NyYW0uYwpAQCAtMTM2LDkgKzEzNiw5IEBACiAvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZCBTUkFNX0RNQUNwbHQgICAgKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKK3N0YXRpYyB2b2lkIFNSQU1fRE1BQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgdm9pZCBTUkFNX0RNQUNwbHRQcm90KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKLXN0YXRpYyB2b2lkIFNSQU1fRE1BRXJyb3IgICAoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOworc3RhdGljIHZvaWQgU1JBTV9ETUFFcnJvcihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiAvKioKICAgQGVuZGNvbmQKICAgKi8KQEAgLTE3MSw3ICsxNzEsOCBAQAogICAqIEBwYXJhbSAgRXh0VGltaW5nIFBvaW50ZXIgdG8gU1JBTSBleHRlbmRlZCBtb2RlIHRpbWluZyBzdHJ1Y3R1cmUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX0luaXQoU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSwgRk1DX05PUlNSQU1fVGltaW5nVHlwZURlZiAqVGltaW5nLCBGTUNfTk9SU1JBTV9UaW1pbmdUeXBlRGVmICpFeHRUaW1pbmcpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9Jbml0KFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIEZNQ19OT1JTUkFNX1RpbWluZ1R5cGVEZWYgKlRpbWluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05PUlNSQU1fVGltaW5nVHlwZURlZiAqRXh0VGltaW5nKQogewogICAvKiBDaGVjayB0aGUgU1JBTSBoYW5kbGUgcGFyYW1ldGVyICovCiAgIGlmIChoc3JhbSA9PSBOVUxMKQpAQCAtMTg1LDcgKzE4Niw3IEBACiAgICAgaHNyYW0tPkxvY2sgPSBIQUxfVU5MT0NLRUQ7CiAKICNpZiAoVVNFX0hBTF9TUkFNX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotICAgIGlmKGhzcmFtLT5Nc3BJbml0Q2FsbGJhY2sgPT0gTlVMTCkKKyAgICBpZiAoaHNyYW0tPk1zcEluaXRDYWxsYmFjayA9PSBOVUxMKQogICAgIHsKICAgICAgIGhzcmFtLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfU1JBTV9Nc3BJbml0OwogICAgIH0KQEAgLTIwNyw3ICsyMDgsOCBAQAogICAodm9pZClGTUNfTk9SU1JBTV9UaW1pbmdfSW5pdChoc3JhbS0+SW5zdGFuY2UsIFRpbWluZywgaHNyYW0tPkluaXQuTlNCYW5rKTsKIAogICAvKiBJbml0aWFsaXplIFNSQU0gZXh0ZW5kZWQgbW9kZSB0aW1pbmcgSW50ZXJmYWNlICovCi0gICh2b2lkKUZNQ19OT1JTUkFNX0V4dGVuZGVkX1RpbWluZ19Jbml0KGhzcmFtLT5FeHRlbmRlZCwgRXh0VGltaW5nLCBoc3JhbS0+SW5pdC5OU0JhbmssICBoc3JhbS0+SW5pdC5FeHRlbmRlZE1vZGUpOworICAodm9pZClGTUNfTk9SU1JBTV9FeHRlbmRlZF9UaW1pbmdfSW5pdChoc3JhbS0+RXh0ZW5kZWQsIEV4dFRpbWluZywgaHNyYW0tPkluaXQuTlNCYW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3JhbS0+SW5pdC5FeHRlbmRlZE1vZGUpOwogCiAgIC8qIEVuYWJsZSB0aGUgTk9SU1JBTSBkZXZpY2UgKi8KICAgX19GTUNfTk9SU1JBTV9FTkFCTEUoaHNyYW0tPkluc3RhbmNlLCBoc3JhbS0+SW5pdC5OU0JhbmspOwpAQCAtMjI3LDcgKzIyOSw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9EZUluaXQoU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSkKIHsKICNpZiAoVVNFX0hBTF9TUkFNX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotICBpZihoc3JhbS0+TXNwRGVJbml0Q2FsbGJhY2sgPT0gTlVMTCkKKyAgaWYgKGhzcmFtLT5Nc3BEZUluaXRDYWxsYmFjayA9PSBOVUxMKQogICB7CiAgICAgaHNyYW0tPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX1NSQU1fTXNwRGVJbml0OwogICB9CkBAIC0zNDIsMTEgKzM0NCwxMiBAQAogICAqIEBwYXJhbSAgQnVmZmVyU2l6ZSBTaXplIG9mIHRoZSBidWZmZXIgdG8gcmVhZCBmcm9tIG1lbW9yeQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fUmVhZF84YihTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCB1aW50MzJfdCAqcEFkZHJlc3MsIHVpbnQ4X3QgKnBEc3RCdWZmZXIsIHVpbnQzMl90IEJ1ZmZlclNpemUpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9SZWFkXzhiKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIHVpbnQzMl90ICpwQWRkcmVzcywgdWludDhfdCAqcERzdEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVmZmVyU2l6ZSkKIHsKICAgdWludDMyX3Qgc2l6ZTsKICAgX19JTyB1aW50OF90ICpwc3JhbWFkZHJlc3MgPSAodWludDhfdCAqKXBBZGRyZXNzOwotICB1aW50OF90ICogcGRlc3RidWZmID0gcERzdEJ1ZmZlcjsKKyAgdWludDhfdCAqcGRlc3RidWZmID0gcERzdEJ1ZmZlcjsKICAgSEFMX1NSQU1fU3RhdGVUeXBlRGVmIHN0YXRlID0gaHNyYW0tPlN0YXRlOwogCiAgIC8qIENoZWNrIHRoZSBTUkFNIGNvbnRyb2xsZXIgc3RhdGUgKi8KQEAgLTM4OSwxMSArMzkyLDEyIEBACiAgICogQHBhcmFtICBCdWZmZXJTaXplIFNpemUgb2YgdGhlIGJ1ZmZlciB0byB3cml0ZSB0byBtZW1vcnkKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1dyaXRlXzhiKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIHVpbnQzMl90ICpwQWRkcmVzcywgdWludDhfdCAqcFNyY0J1ZmZlciwgdWludDMyX3QgQnVmZmVyU2l6ZSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1dyaXRlXzhiKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIHVpbnQzMl90ICpwQWRkcmVzcywgdWludDhfdCAqcFNyY0J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1ZmZlclNpemUpCiB7CiAgIHVpbnQzMl90IHNpemU7CiAgIF9fSU8gdWludDhfdCAqcHNyYW1hZGRyZXNzID0gKHVpbnQ4X3QgKilwQWRkcmVzczsKLSAgdWludDhfdCAqIHBzcmNidWZmID0gcFNyY0J1ZmZlcjsKKyAgdWludDhfdCAqcHNyY2J1ZmYgPSBwU3JjQnVmZmVyOwogCiAgIC8qIENoZWNrIHRoZSBTUkFNIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhzcmFtLT5TdGF0ZSA9PSBIQUxfU1JBTV9TVEFURV9SRUFEWSkKQEAgLTQzNSw3ICs0MzksOCBAQAogICAqIEBwYXJhbSAgQnVmZmVyU2l6ZSBTaXplIG9mIHRoZSBidWZmZXIgdG8gcmVhZCBmcm9tIG1lbW9yeQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fUmVhZF8xNmIoU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSwgdWludDMyX3QgKnBBZGRyZXNzLCB1aW50MTZfdCAqcERzdEJ1ZmZlciwgdWludDMyX3QgQnVmZmVyU2l6ZSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1JlYWRfMTZiKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIHVpbnQzMl90ICpwQWRkcmVzcywgdWludDE2X3QgKnBEc3RCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCdWZmZXJTaXplKQogewogICB1aW50MzJfdCBzaXplOwogICBfX0lPIHVpbnQzMl90ICpwc3JhbWFkZHJlc3MgPSBwQWRkcmVzczsKQEAgLTQ1MiwxMSArNDU3LDExIEBACiAgICAgLyogVXBkYXRlIHRoZSBTUkFNIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgICBoc3JhbS0+U3RhdGUgPSBIQUxfU1JBTV9TVEFURV9CVVNZOwogCi0gICAgLyogQ2hlY2sgaWYgdGhlIHNpemUgaXMgYSAzMi1iaXRzIG11bGl0cGxlICovCisgICAgLyogQ2hlY2sgaWYgdGhlIHNpemUgaXMgYSAzMi1iaXRzIG11bHRpcGxlICovCiAgICAgbGltaXQgPSAoKChCdWZmZXJTaXplICUgMlUpICE9IDBVKSA/IDFVIDogMFUpOwogCiAgICAgLyogUmVhZCBkYXRhIGZyb20gbWVtb3J5ICovCi0gICAgZm9yIChzaXplID0gQnVmZmVyU2l6ZTsgc2l6ZSAhPSBsaW1pdDsgc2l6ZS09MlUpCisgICAgZm9yIChzaXplID0gQnVmZmVyU2l6ZTsgc2l6ZSAhPSBsaW1pdDsgc2l6ZSAtPSAyVSkKICAgICB7CiAgICAgICAqcGRlc3RidWZmID0gKHVpbnQxNl90KSgoKnBzcmFtYWRkcmVzcykgJiAweDAwMDBGRkZGVSk7CiAgICAgICBwZGVzdGJ1ZmYrKzsKQEAgLTQ5NCwxMSArNDk5LDEyIEBACiAgICogQHBhcmFtICBCdWZmZXJTaXplIFNpemUgb2YgdGhlIGJ1ZmZlciB0byB3cml0ZSB0byBtZW1vcnkKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1dyaXRlXzE2YihTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCB1aW50MzJfdCAqcEFkZHJlc3MsIHVpbnQxNl90ICpwU3JjQnVmZmVyLCB1aW50MzJfdCBCdWZmZXJTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fV3JpdGVfMTZiKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIHVpbnQzMl90ICpwQWRkcmVzcywgdWludDE2X3QgKnBTcmNCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVmZmVyU2l6ZSkKIHsKICAgdWludDMyX3Qgc2l6ZTsKICAgX19JTyB1aW50MzJfdCAqcHNyYW1hZGRyZXNzID0gcEFkZHJlc3M7Ci0gIHVpbnQxNl90ICogcHNyY2J1ZmYgPSBwU3JjQnVmZmVyOworICB1aW50MTZfdCAqcHNyY2J1ZmYgPSBwU3JjQnVmZmVyOwogICB1aW50OF90IGxpbWl0OwogCiAgIC8qIENoZWNrIHRoZSBTUkFNIGNvbnRyb2xsZXIgc3RhdGUgKi8KQEAgLTUxMCwxMSArNTE2LDExIEBACiAgICAgLyogVXBkYXRlIHRoZSBTUkFNIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgICBoc3JhbS0+U3RhdGUgPSBIQUxfU1JBTV9TVEFURV9CVVNZOwogCi0gICAgLyogQ2hlY2sgaWYgdGhlIHNpemUgaXMgYSAzMi1iaXRzIG11bGl0cGxlICovCisgICAgLyogQ2hlY2sgaWYgdGhlIHNpemUgaXMgYSAzMi1iaXRzIG11bHRpcGxlICovCiAgICAgbGltaXQgPSAoKChCdWZmZXJTaXplICUgMlUpICE9IDBVKSA/IDFVIDogMFUpOwogCiAgICAgLyogV3JpdGUgZGF0YSB0byBtZW1vcnkgKi8KLSAgICBmb3IgKHNpemUgPSBCdWZmZXJTaXplOyBzaXplICE9IGxpbWl0OyBzaXplLT0yVSkKKyAgICBmb3IgKHNpemUgPSBCdWZmZXJTaXplOyBzaXplICE9IGxpbWl0OyBzaXplIC09IDJVKQogICAgIHsKICAgICAgICpwc3JhbWFkZHJlc3MgPSAodWludDMyX3QpKCpwc3JjYnVmZik7CiAgICAgICBwc3JjYnVmZisrOwpAQCAtNTUyLDExICs1NTgsMTIgQEAKICAgKiBAcGFyYW0gIEJ1ZmZlclNpemUgU2l6ZSBvZiB0aGUgYnVmZmVyIHRvIHJlYWQgZnJvbSBtZW1vcnkKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1JlYWRfMzJiKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIHVpbnQzMl90ICpwQWRkcmVzcywgdWludDMyX3QgKnBEc3RCdWZmZXIsIHVpbnQzMl90IEJ1ZmZlclNpemUpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9SZWFkXzMyYihTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCB1aW50MzJfdCAqcEFkZHJlc3MsIHVpbnQzMl90ICpwRHN0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVmZmVyU2l6ZSkKIHsKICAgdWludDMyX3Qgc2l6ZTsKLSAgX19JTyB1aW50MzJfdCAqIHBzcmFtYWRkcmVzcyA9IHBBZGRyZXNzOwotICB1aW50MzJfdCAqIHBkZXN0YnVmZiA9IHBEc3RCdWZmZXI7CisgIF9fSU8gdWludDMyX3QgKnBzcmFtYWRkcmVzcyA9IHBBZGRyZXNzOworICB1aW50MzJfdCAqcGRlc3RidWZmID0gcERzdEJ1ZmZlcjsKICAgSEFMX1NSQU1fU3RhdGVUeXBlRGVmIHN0YXRlID0gaHNyYW0tPlN0YXRlOwogCiAgIC8qIENoZWNrIHRoZSBTUkFNIGNvbnRyb2xsZXIgc3RhdGUgKi8KQEAgLTU5OSwxMSArNjA2LDEyIEBACiAgICogQHBhcmFtICBCdWZmZXJTaXplIFNpemUgb2YgdGhlIGJ1ZmZlciB0byB3cml0ZSB0byBtZW1vcnkKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1dyaXRlXzMyYihTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCB1aW50MzJfdCAqcEFkZHJlc3MsIHVpbnQzMl90ICpwU3JjQnVmZmVyLCB1aW50MzJfdCBCdWZmZXJTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fV3JpdGVfMzJiKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIHVpbnQzMl90ICpwQWRkcmVzcywgdWludDMyX3QgKnBTcmNCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVmZmVyU2l6ZSkKIHsKICAgdWludDMyX3Qgc2l6ZTsKLSAgX19JTyB1aW50MzJfdCAqIHBzcmFtYWRkcmVzcyA9IHBBZGRyZXNzOwotICB1aW50MzJfdCAqIHBzcmNidWZmID0gcFNyY0J1ZmZlcjsKKyAgX19JTyB1aW50MzJfdCAqcHNyYW1hZGRyZXNzID0gcEFkZHJlc3M7CisgIHVpbnQzMl90ICpwc3JjYnVmZiA9IHBTcmNCdWZmZXI7CiAKICAgLyogQ2hlY2sgdGhlIFNSQU0gY29udHJvbGxlciBzdGF0ZSAqLwogICBpZiAoaHNyYW0tPlN0YXRlID09IEhBTF9TUkFNX1NUQVRFX1JFQURZKQpAQCAtNjQ1LDcgKzY1Myw4IEBACiAgICogQHBhcmFtICBCdWZmZXJTaXplIFNpemUgb2YgdGhlIGJ1ZmZlciB0byByZWFkIGZyb20gbWVtb3J5CiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9SZWFkX0RNQShTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCB1aW50MzJfdCAqcEFkZHJlc3MsIHVpbnQzMl90ICpwRHN0QnVmZmVyLCB1aW50MzJfdCBCdWZmZXJTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fUmVhZF9ETUEoU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSwgdWludDMyX3QgKnBBZGRyZXNzLCB1aW50MzJfdCAqcERzdEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1ZmZlclNpemUpCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKICAgSEFMX1NSQU1fU3RhdGVUeXBlRGVmIHN0YXRlID0gaHNyYW0tPlN0YXRlOwpAQCAtNjkzLDcgKzcwMiw4IEBACiAgICogQHBhcmFtICBCdWZmZXJTaXplIFNpemUgb2YgdGhlIGJ1ZmZlciB0byB3cml0ZSB0byBtZW1vcnkKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1dyaXRlX0RNQShTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCB1aW50MzJfdCAqcEFkZHJlc3MsIHVpbnQzMl90ICpwU3JjQnVmZmVyLCB1aW50MzJfdCBCdWZmZXJTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fV3JpdGVfRE1BKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIHVpbnQzMl90ICpwQWRkcmVzcywgdWludDMyX3QgKnBTcmNCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVmZmVyU2l6ZSkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOwogCkBAIC03MzYsMTIgKzc0NiwxMyBAQAogICAqIEBwYXJhbSBwQ2FsbGJhY2sgOiBwb2ludGVyIHRvIHRoZSBDYWxsYmFjayBmdW5jdGlvbgogICAqIEByZXR2YWwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9SZWdpc3RlckNhbGxiYWNrIChTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCBIQUxfU1JBTV9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkLCBwU1JBTV9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fUmVnaXN0ZXJDYWxsYmFjayhTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCBIQUxfU1JBTV9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU1JBTV9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIEhBTF9TUkFNX1N0YXRlVHlwZURlZiBzdGF0ZTsKIAotICBpZihwQ2FsbGJhY2sgPT0gTlVMTCkKKyAgaWYgKHBDYWxsYmFjayA9PSBOVUxMKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQpAQCAtNzUwLDIwICs3NjEsMjAgQEAKICAgX19IQUxfTE9DSyhoc3JhbSk7CiAKICAgc3RhdGUgPSBoc3JhbS0+U3RhdGU7Ci0gIGlmKChzdGF0ZSA9PSBIQUxfU1JBTV9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9TUkFNX1NUQVRFX1JFU0VUKSB8fCAoc3RhdGUgPT0gSEFMX1NSQU1fU1RBVEVfUFJPVEVDVEVEKSkKKyAgaWYgKChzdGF0ZSA9PSBIQUxfU1JBTV9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9TUkFNX1NUQVRFX1JFU0VUKSB8fCAoc3RhdGUgPT0gSEFMX1NSQU1fU1RBVEVfUFJPVEVDVEVEKSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJZCkKICAgICB7Ci0gICAgY2FzZSBIQUxfU1JBTV9NU1BfSU5JVF9DQl9JRCA6Ci0gICAgICBoc3JhbS0+TXNwSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfU1JBTV9NU1BfREVJTklUX0NCX0lEIDoKLSAgICAgIGhzcmFtLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQgOgotICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1NSQU1fTVNQX0lOSVRfQ0JfSUQgOgorICAgICAgICBoc3JhbS0+TXNwSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1NSQU1fTVNQX0RFSU5JVF9DQl9JRCA6CisgICAgICAgIGhzcmFtLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTc4OSw3ICs4MDAsNyBAQAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfU1JBTV9ETUFfWEZFUl9FUlJfQ0JfSUQgICBTUkFNIERNQSBYZmVyIEVycm9yIGNhbGxiYWNrIElECiAgICogQHJldHZhbCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1VuUmVnaXN0ZXJDYWxsYmFjayAoU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSwgSEFMX1NSQU1fQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJZCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1VuUmVnaXN0ZXJDYWxsYmFjayhTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCBIQUxfU1JBTV9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkKQogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIEhBTF9TUkFNX1N0YXRlVHlwZURlZiBzdGF0ZTsKQEAgLTc5OCw0MiArODA5LDQyIEBACiAgIF9fSEFMX0xPQ0soaHNyYW0pOwogCiAgIHN0YXRlID0gaHNyYW0tPlN0YXRlOwotICBpZigoc3RhdGUgPT0gSEFMX1NSQU1fU1RBVEVfUkVBRFkpIHx8IChzdGF0ZSA9PSBIQUxfU1JBTV9TVEFURV9QUk9URUNURUQpKQorICBpZiAoKHN0YXRlID09IEhBTF9TUkFNX1NUQVRFX1JFQURZKSB8fCAoc3RhdGUgPT0gSEFMX1NSQU1fU1RBVEVfUFJPVEVDVEVEKSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJZCkKICAgICB7Ci0gICAgY2FzZSBIQUxfU1JBTV9NU1BfSU5JVF9DQl9JRCA6Ci0gICAgICBoc3JhbS0+TXNwSW5pdENhbGxiYWNrID0gSEFMX1NSQU1fTXNwSW5pdDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX1NSQU1fTVNQX0RFSU5JVF9DQl9JRCA6Ci0gICAgICBoc3JhbS0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfU1JBTV9Nc3BEZUluaXQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9TUkFNX0RNQV9YRkVSX0NQTFRfQ0JfSUQgOgotICAgICAgaHNyYW0tPkRtYVhmZXJDcGx0Q2FsbGJhY2sgPSBIQUxfU1JBTV9ETUFfWGZlckNwbHRDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX1NSQU1fRE1BX1hGRVJfRVJSX0NCX0lEIDoKLSAgICAgIGhzcmFtLT5EbWFYZmVyRXJyb3JDYWxsYmFjayA9IEhBTF9TUkFNX0RNQV9YZmVyRXJyb3JDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQgOgotICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1NSQU1fTVNQX0lOSVRfQ0JfSUQgOgorICAgICAgICBoc3JhbS0+TXNwSW5pdENhbGxiYWNrID0gSEFMX1NSQU1fTXNwSW5pdDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9TUkFNX01TUF9ERUlOSVRfQ0JfSUQgOgorICAgICAgICBoc3JhbS0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfU1JBTV9Nc3BEZUluaXQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfU1JBTV9ETUFfWEZFUl9DUExUX0NCX0lEIDoKKyAgICAgICAgaHNyYW0tPkRtYVhmZXJDcGx0Q2FsbGJhY2sgPSBIQUxfU1JBTV9ETUFfWGZlckNwbHRDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9TUkFNX0RNQV9YRkVSX0VSUl9DQl9JRCA6CisgICAgICAgIGhzcmFtLT5EbWFYZmVyRXJyb3JDYWxsYmFjayA9IEhBTF9TUkFNX0RNQV9YZmVyRXJyb3JDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9Ci0gIGVsc2UgaWYoc3RhdGUgPT0gSEFMX1NSQU1fU1RBVEVfUkVTRVQpCisgIGVsc2UgaWYgKHN0YXRlID09IEhBTF9TUkFNX1NUQVRFX1JFU0VUKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lkKQogICAgIHsKLSAgICBjYXNlIEhBTF9TUkFNX01TUF9JTklUX0NCX0lEIDoKLSAgICAgIGhzcmFtLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfU1JBTV9Nc3BJbml0OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfU1JBTV9NU1BfREVJTklUX0NCX0lEIDoKLSAgICAgIGhzcmFtLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9TUkFNX01zcERlSW5pdDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQgOgotICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1NSQU1fTVNQX0lOSVRfQ0JfSUQgOgorICAgICAgICBoc3JhbS0+TXNwSW5pdENhbGxiYWNrID0gSEFMX1NSQU1fTXNwSW5pdDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9TUkFNX01TUF9ERUlOSVRfQ0JfSUQgOgorICAgICAgICBoc3JhbS0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfU1JBTV9Nc3BEZUluaXQ7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdCA6CisgICAgICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCisgICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQogICBlbHNlCkBAIC04NTgsMTIgKzg2OSwxMyBAQAogICAqIEBwYXJhbSBwQ2FsbGJhY2sgOiBwb2ludGVyIHRvIHRoZSBDYWxsYmFjayBmdW5jdGlvbgogICAqIEByZXR2YWwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9SZWdpc3RlckRtYUNhbGxiYWNrKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIEhBTF9TUkFNX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSWQsIHBTUkFNX0RtYUNhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9SZWdpc3RlckRtYUNhbGxiYWNrKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0sIEhBTF9TUkFNX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBTUkFNX0RtYUNhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgSEFMX1NSQU1fU3RhdGVUeXBlRGVmIHN0YXRlOwogCi0gIGlmKHBDYWxsYmFjayA9PSBOVUxMKQorICBpZiAocENhbGxiYWNrID09IE5VTEwpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC04NzIsMjAgKzg4NCwyMCBAQAogICBfX0hBTF9MT0NLKGhzcmFtKTsKIAogICBzdGF0ZSA9IGhzcmFtLT5TdGF0ZTsKLSAgaWYoKHN0YXRlID09IEhBTF9TUkFNX1NUQVRFX1JFQURZKSB8fCAoc3RhdGUgPT0gSEFMX1NSQU1fU1RBVEVfUFJPVEVDVEVEKSkKKyAgaWYgKChzdGF0ZSA9PSBIQUxfU1JBTV9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9TUkFNX1NUQVRFX1BST1RFQ1RFRCkpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSWQpCiAgICAgewotICAgIGNhc2UgSEFMX1NSQU1fRE1BX1hGRVJfQ1BMVF9DQl9JRCA6Ci0gICAgICBoc3JhbS0+RG1hWGZlckNwbHRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX1NSQU1fRE1BX1hGRVJfRVJSX0NCX0lEIDoKLSAgICAgIGhzcmFtLT5EbWFYZmVyRXJyb3JDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQgOgotICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1NSQU1fRE1BX1hGRVJfQ1BMVF9DQl9JRCA6CisgICAgICAgIGhzcmFtLT5EbWFYZmVyQ3BsdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1NSQU1fRE1BX1hGRVJfRVJSX0NCX0lEIDoKKyAgICAgICAgaHNyYW0tPkRtYVhmZXJFcnJvckNhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLworICAgICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOworICAgICAgICBicmVhazsKICAgICB9CiAgIH0KICAgZWxzZQpAQCAtOTA1LDggKzkxNyw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgU1JBTV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIENvbnRyb2wgZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgQ29udHJvbCBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgIENvbnRyb2wgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIFNSQU0gQ29udHJvbCBmdW5jdGlvbnMgIyMjIyMKQEAgLTkyOCw3ICs5NDAsNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NSQU1fV3JpdGVPcGVyYXRpb25fRW5hYmxlKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0pCiB7CiAgIC8qIENoZWNrIHRoZSBTUkFNIGNvbnRyb2xsZXIgc3RhdGUgKi8KLSAgaWYoaHNyYW0tPlN0YXRlID09IEhBTF9TUkFNX1NUQVRFX1BST1RFQ1RFRCkKKyAgaWYgKGhzcmFtLT5TdGF0ZSA9PSBIQUxfU1JBTV9TVEFURV9QUk9URUNURUQpCiAgIHsKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaHNyYW0pOwpAQCAtOTYyLDcgKzk3NCw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1JBTV9Xcml0ZU9wZXJhdGlvbl9EaXNhYmxlKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0pCiB7CiAgIC8qIENoZWNrIHRoZSBTUkFNIGNvbnRyb2xsZXIgc3RhdGUgKi8KLSAgaWYoaHNyYW0tPlN0YXRlID09IEhBTF9TUkFNX1NUQVRFX1JFQURZKQorICBpZiAoaHNyYW0tPlN0YXRlID09IEhBTF9TUkFNX1NUQVRFX1JFQURZKQogICB7CiAgICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgICBfX0hBTF9MT0NLKGhzcmFtKTsKQEAgLTk5Miw4ICsxMDA0LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBTUkFNX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICMjIyMjIFNSQU0gU3RhdGUgZnVuY3Rpb25zICMjIyMjCkBAIC0xMDM1LDcgKzEwNDcsNyBAQAogICAqLwogc3RhdGljIHZvaWQgU1JBTV9ETUFDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQogewotICBTUkFNX0hhbmRsZVR5cGVEZWYqIGhzcmFtID0gKCBTUkFNX0hhbmRsZVR5cGVEZWYqICkoaGRtYS0+UGFyZW50KTsKKyAgU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSA9IChTUkFNX0hhbmRsZVR5cGVEZWYgKikoaGRtYS0+UGFyZW50KTsKIAogICAvKiBEaXNhYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICBfX0hBTF9ETUFfRElTQUJMRShoZG1hKTsKQEAgLTEwNTcsNyArMTA2OSw3IEBACiAgICovCiBzdGF0aWMgdm9pZCBTUkFNX0RNQUNwbHRQcm90KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQogewotICBTUkFNX0hhbmRsZVR5cGVEZWYqIGhzcmFtID0gKCBTUkFNX0hhbmRsZVR5cGVEZWYqICkoaGRtYS0+UGFyZW50KTsKKyAgU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSA9IChTUkFNX0hhbmRsZVR5cGVEZWYgKikoaGRtYS0+UGFyZW50KTsKIAogICAvKiBEaXNhYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICBfX0hBTF9ETUFfRElTQUJMRShoZG1hKTsKQEAgLTEwNzksNyArMTA5MSw3IEBACiAgICovCiBzdGF0aWMgdm9pZCBTUkFNX0RNQUVycm9yKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQogewotICBTUkFNX0hhbmRsZVR5cGVEZWYqIGhzcmFtID0gKCBTUkFNX0hhbmRsZVR5cGVEZWYqICkoaGRtYS0+UGFyZW50KTsKKyAgU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSA9IChTUkFNX0hhbmRsZVR5cGVEZWYgKikoaGRtYS0+UGFyZW50KTsKIAogICAvKiBEaXNhYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICBfX0hBTF9ETUFfRElTQUJMRShoZG1hKTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX3RpbS5jIGIvU3JjL3N0bTMybDR4eF9oYWxfdGltLmMKaW5kZXggMGU3Yzk0OS4uODllYjNkZiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfdGltLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfdGltLmMKQEAgLTE5OSw3ICsxOTksNyBAQAogCiAvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGFkZHRvZ3JvdXAgVElNX1ByaXZhdGVfRnVuY3Rpb25zCkBAIC0yMjEsNiArMjIxLDcgQEAKIHN0YXRpYyB2b2lkIFRJTV9JVFJ4X1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgSW5wdXRUcmlnZ2VyU291cmNlKTsKIHN0YXRpYyB2b2lkIFRJTV9ETUFQZXJpb2RFbGFwc2VkQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgdm9pZCBUSU1fRE1BUGVyaW9kRWxhcHNlZEhhbGZDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKK3N0YXRpYyB2b2lkIFRJTV9ETUFEZWxheVB1bHNlQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgdm9pZCBUSU1fRE1BVHJpZ2dlckNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogc3RhdGljIHZvaWQgVElNX0RNQVRyaWdnZXJIYWxmQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgVElNX1NsYXZlVGltZXJfU2V0Q29uZmlnKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLApAQCAtMzA2LDYgKzMwNywxMyBAQAogICAvKiBTZXQgdGhlIFRpbWUgQmFzZSBjb25maWd1cmF0aW9uICovCiAgIFRJTV9CYXNlX1NldENvbmZpZyhodGltLT5JbnN0YW5jZSwgJmh0aW0tPkluaXQpOwogCisgIC8qIEluaXRpYWxpemUgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIHN0YXRlKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogCkBAIC0zMzksNiArMzQ3LDEzIEBACiAgIEhBTF9USU1fQmFzZV9Nc3BEZUluaXQoaHRpbSk7CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKKyAgLyogQ2hhbmdlIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFU0VUOworCisgIC8qIENoYW5nZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisKICAgLyogQ2hhbmdlIFRJTSBzdGF0ZSAqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVTRVQ7CiAKQEAgLTM5MSwxOSArNDA2LDI5IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIHN0YXRlICovCisgIGlmIChodGltLT5TdGF0ZSAhPSBIQUxfVElNX1NUQVRFX1JFQURZKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIC8qIFNldCB0aGUgVElNIHN0YXRlICovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOwogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICB7CisgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgeworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICB9CisgIH0KKyAgZWxzZQogICB7CiAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgfQogCi0gIC8qIENoYW5nZSB0aGUgVElNIHN0YXRlKi8KLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTQxOCwxMyArNDQzLDEwIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAotICAvKiBTZXQgdGhlIFRJTSBzdGF0ZSAqLwotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKLQogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgVElNIHN0YXRlKi8KKyAgLyogU2V0IHRoZSBUSU0gc3RhdGUgKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KQEAgLTQ0MywxMiArNDY1LDI4IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIHN0YXRlICovCisgIGlmIChodGltLT5TdGF0ZSAhPSBIQUxfVElNX1NUQVRFX1JFQURZKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIHN0YXRlICovCisgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOworCiAgIC8qIEVuYWJsZSB0aGUgVElNIFVwZGF0ZSBpbnRlcnJ1cHQgKi8KICAgX19IQUxfVElNX0VOQUJMRV9JVChodGltLCBUSU1fSVRfVVBEQVRFKTsKIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgeworICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIHsKKyAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgfQorICB9CisgIGVsc2UKICAgewogICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgIH0KQEAgLTQ2NiwxMiArNTA0LDE2IEBACiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKyAgCiAgIC8qIERpc2FibGUgdGhlIFRJTSBVcGRhdGUgaW50ZXJydXB0ICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFX0lUKGh0aW0sIFRJTV9JVF9VUERBVEUpOwogCiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gc3RhdGUgKi8KKyAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTQ5MCw2ICs1MzIsNyBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCisgIC8qIFNldCB0aGUgVElNIHN0YXRlICovCiAgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CkBAIC01MDcsNyArNTUwLDcgQEAKICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCiAgIC8qIFNldCB0aGUgRE1BIFBlcmlvZCBlbGFwc2VkIGNhbGxiYWNrcyAqLwpAQCAtNTI3LDggKzU3MCwxNSBAQAogICBfX0hBTF9USU1fRU5BQkxFX0RNQShodGltLCBUSU1fRE1BX1VQREFURSk7CiAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICB7CisgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgIH0KKyAgfQorICBlbHNlCiAgIHsKICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICB9CkBAIC01NTUsNyArNjA1LDcgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAotICAvKiBDaGFuZ2UgdGhlIGh0aW0gc3RhdGUgKi8KKyAgLyogU2V0IHRoZSBUSU0gc3RhdGUgKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KQEAgLTYzOCw2ICs2ODgsMTMgQEAKICAgLyogSW5pdCB0aGUgYmFzZSB0aW1lIGZvciB0aGUgT3V0cHV0IENvbXBhcmUgKi8KICAgVElNX0Jhc2VfU2V0Q29uZmlnKGh0aW0tPkluc3RhbmNlLCAgJmh0aW0tPkluaXQpOwogCisgIC8qIEluaXRpYWxpemUgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIHN0YXRlKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogCkBAIC02NzEsNiArNzI4LDEzIEBACiAgIEhBTF9USU1fT0NfTXNwRGVJbml0KGh0aW0pOwogI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCisgIC8qIENoYW5nZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRVNFVDsKKworICAvKiBDaGFuZ2UgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworCiAgIC8qIENoYW5nZSBUSU0gc3RhdGUgKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFU0VUOwogCkBAIC03MzAsNiArNzk0LDE1IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIGlmIChUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICAvKiBFbmFibGUgdGhlIE91dHB1dCBjb21wYXJlIGNoYW5uZWwgKi8KICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKIApAQCAtNzQwLDggKzgxMywxNSBAQAogICB9CiAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICB7CisgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgIH0KKyAgfQorICBlbHNlCiAgIHsKICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICB9CkBAIC03ODAsNiArODYwLDkgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTgwMiw2ICs4ODUsMTUgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIHN3aXRjaCAoQ2hhbm5lbCkKICAgewogICAgIGNhc2UgVElNX0NIQU5ORUxfMToKQEAgLTg0Niw4ICs5MzgsMTUgQEAKICAgfQogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICB7CisgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgeworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICB9CisgIH0KKyAgZWxzZQogICB7CiAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgfQpAQCAtOTE4LDYgKzEwMTcsOSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtOTQyLDExICsxMDQ0LDEyIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKLSAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCisgIGVsc2UgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBpZiAoKHBEYXRhID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCiAgICAgewpAQCAtOTU0LDEyICsxMDU3LDEyIEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CiAgICAgfQogICB9CiAgIGVsc2UKICAgewotICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKICAgc3dpdGNoIChDaGFubmVsKQpAQCAtMTA1Niw4ICsxMTU5LDE1IEBACiAgIH0KIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgeworICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIHsKKyAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgfQorICB9CisgIGVsc2UKICAgewogICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgIH0KQEAgLTExMzIsOCArMTI0Miw4IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBodGltIHN0YXRlICovCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CkBAIC0xMjE1LDYgKzEzMjUsMTMgQEAKICAgLyogSW5pdCB0aGUgYmFzZSB0aW1lIGZvciB0aGUgUFdNICovCiAgIFRJTV9CYXNlX1NldENvbmZpZyhodGltLT5JbnN0YW5jZSwgJmh0aW0tPkluaXQpOwogCisgIC8qIEluaXRpYWxpemUgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIHN0YXRlKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogCkBAIC0xMjQ4LDYgKzEzNjUsMTMgQEAKICAgSEFMX1RJTV9QV01fTXNwRGVJbml0KGh0aW0pOwogI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCisgIC8qIENoYW5nZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRVNFVDsKKworICAvKiBDaGFuZ2UgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworCiAgIC8qIENoYW5nZSBUSU0gc3RhdGUgKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFU0VUOwogCkBAIC0xMzA3LDYgKzE0MzEsMTUgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIC8qIEVuYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgKi8KICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKIApAQCAtMTMxNyw4ICsxNDUwLDE1IEBACiAgIH0KIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgeworICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIHsKKyAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgfQorICB9CisgIGVsc2UKICAgewogICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgIH0KQEAgLTEzNTcsOCArMTQ5Nyw4IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBodGltIHN0YXRlICovCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CkBAIC0xMzgxLDYgKzE1MjEsMTUgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIHN3aXRjaCAoQ2hhbm5lbCkKICAgewogICAgIGNhc2UgVElNX0NIQU5ORUxfMToKQEAgLTE0MjUsOCArMTU3NCwxNSBAQAogICB9CiAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICB7CisgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgIH0KKyAgfQorICBlbHNlCiAgIHsKICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICB9CkBAIC0xNDk3LDYgKzE2NTMsOSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMTUyMSwxMSArMTY4MCwxMiBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCi0gIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQorICBlbHNlIGlmIChUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICB7CiAgICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTE1MzMsMTIgKzE2OTMsMTIgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKICAgICB9CiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogbm90aGluZyB0byBkbyAqLworICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAogICBzd2l0Y2ggKENoYW5uZWwpCkBAIC0xNjM0LDggKzE3OTQsMTUgQEAKICAgfQogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICB7CisgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgeworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICB9CisgIH0KKyAgZWxzZQogICB7CiAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgfQpAQCAtMTcxMCw4ICsxODc3LDggQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAotICAvKiBDaGFuZ2UgdGhlIGh0aW0gc3RhdGUgKi8KLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKQEAgLTE3OTMsNiArMTk2MCwxMyBAQAogICAvKiBJbml0IHRoZSBiYXNlIHRpbWUgZm9yIHRoZSBpbnB1dCBjYXB0dXJlICovCiAgIFRJTV9CYXNlX1NldENvbmZpZyhodGltLT5JbnN0YW5jZSwgJmh0aW0tPkluaXQpOwogCisgIC8qIEluaXRpYWxpemUgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIHN0YXRlKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogCkBAIC0xODI2LDYgKzIwMDAsMTMgQEAKICAgSEFMX1RJTV9JQ19Nc3BEZUluaXQoaHRpbSk7CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKKyAgLyogQ2hhbmdlIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFU0VUOworCisgIC8qIENoYW5nZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisKICAgLyogQ2hhbmdlIFRJTSBzdGF0ZSAqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVTRVQ7CiAKQEAgLTE4NzksMTYgKzIwNjAsMzYgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fSUNfU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CiAgIHVpbnQzMl90IHRtcHNtY3I7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCk7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKChjaGFubmVsX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICAvKiBFbmFibGUgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLwogICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9FTkFCTEUpOwogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICB7CisgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgeworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICB9CisgIH0KKyAgZWxzZQogICB7CiAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgfQpAQCAtMTkxOSw2ICsyMTIwLDEwIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0xOTM3LDEwICsyMTQyLDIzIEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0lDX1N0YXJ0X0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogewogICB1aW50MzJfdCB0bXBzbWNyOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIGlmICgoY2hhbm5lbF9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgc3dpdGNoIChDaGFubmVsKQogICB7CiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgpAQCAtMTk3OCw4ICsyMTk2LDE1IEBACiAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0VOQUJMRSk7CiAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICB7CisgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgIH0KKyAgfQorICBlbHNlCiAgIHsKICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICB9CkBAIC0yMDQ0LDYgKzIyNjksMTAgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTIwNjQsMTYgKzIyOTMsMjEgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fSUNfU3RhcnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCAqcERhdGEsIHVpbnQxNl90IExlbmd0aCkKIHsKICAgdWludDMyX3QgdG1wc21jcjsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBDaGFubmVsKTsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9DQ19JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCi0gIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKChjaGFubmVsX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQorICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKKyAgZWxzZSBpZiAoKGNoYW5uZWxfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCiAgIHsKICAgICBpZiAoKHBEYXRhID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCiAgICAgewpAQCAtMjA4MSwxMiArMjMxNSwxMyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOwogICAgIH0KICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCiAgIHN3aXRjaCAoQ2hhbm5lbCkKQEAgLTIxNzUsOCArMjQxMCwxNSBAQAogICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9FTkFCTEUpOwogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICB7CisgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgeworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICB9CisgIH0KKyAgZWxzZQogICB7CiAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgfQpAQCAtMjIwMiw2ICsyNDQ0LDkgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfQ0NfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAorICAvKiBEaXNhYmxlIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWwgKi8KKyAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRElTQUJMRSk7CisKICAgc3dpdGNoIChDaGFubmVsKQogICB7CiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgpAQCAtMjI0MCwxNCArMjQ4NSwxMiBAQAogICAgICAgYnJlYWs7CiAgIH0KIAotICAvKiBEaXNhYmxlIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWwgKi8KLSAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRElTQUJMRSk7Ci0KICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAotICAvKiBDaGFuZ2UgdGhlIGh0aW0gc3RhdGUgKi8KLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKQEAgLTIyODQsNiArMjUyNyw5IEBACiAgICogICAgICAgICByZXF1aXJlcyBhIHRpbWVyIHJlc2V0IHRvIGF2b2lkIHVuZXhwZWN0ZWQgZGlyZWN0aW9uCiAgICogICAgICAgICBkdWUgdG8gRElSIGJpdCByZWFkb25seSBpbiBjZW50ZXIgYWxpZ25lZCBtb2RlLgogICAqICAgICAgICAgRXg6IGNhbGwgQHJlZiBIQUxfVElNX09uZVB1bHNlX0RlSW5pdCgpIGJlZm9yZSBIQUxfVElNX09uZVB1bHNlX0luaXQoKQorICAqIEBub3RlICAgV2hlbiB0aGUgdGltZXIgaW5zdGFuY2UgaXMgaW5pdGlhbGl6ZWQgaW4gT25lIFB1bHNlIG1vZGUsIHRpbWVyCisgICogICAgICAgICBjaGFubmVscyAxIGFuZCBjaGFubmVsIDIgYXJlIHJlc2VydmVkIGFuZCBjYW5ub3QgYmUgdXNlZCBmb3Igb3RoZXIKKyAgKiAgICAgICAgIHB1cnBvc2UuCiAgICogQHBhcmFtICBodGltIFRJTSBPbmUgUHVsc2UgaGFuZGxlCiAgICogQHBhcmFtICBPbmVQdWxzZU1vZGUgU2VsZWN0IHRoZSBPbmUgcHVsc2UgbW9kZS4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0yMzM5LDYgKzI1ODUsMTUgQEAKICAgLyogQ29uZmlndXJlIHRoZSBPUE0gTW9kZSAqLwogICBodGltLT5JbnN0YW5jZS0+Q1IxIHw9IE9uZVB1bHNlTW9kZTsKIAorICAvKiBJbml0aWFsaXplIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFQURZOworCisgIC8qIEluaXRpYWxpemUgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIHN0YXRlKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogCkBAIC0yMzcyLDYgKzI2MjcsMTUgQEAKICAgSEFMX1RJTV9PbmVQdWxzZV9Nc3BEZUluaXQoaHRpbSk7CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKKyAgLyogQ2hhbmdlIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFU0VUOworCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworCiAgIC8qIENoYW5nZSBUSU0gc3RhdGUgKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFU0VUOwogCkBAIC0yNDIyLDkgKzI2ODYsMjkgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fT25lUHVsc2VfU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IE91dHB1dENoYW5uZWwpCiB7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKwogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChPdXRwdXRDaGFubmVsKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIGlmICgoY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIC8qIEVuYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGFuZCB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVscwogICAgIChpbiB0aGUgT1BNIE1vZGUgdGhlIHR3byBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yKQogICAgIGlmIFRJTV9DSEFOTkVMXzEgaXMgdXNlZCBhcyBvdXRwdXQsIHRoZSBUSU1fQ0hBTk5FTF8yIHdpbGwgYmUgdXNlZCBhcyBpbnB1dCBhbmQKQEAgLTI0NzksNiArMjc2MywxMiBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0yNDk0LDkgKzI3ODQsMjkgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fT25lUHVsc2VfU3RhcnRfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IE91dHB1dENoYW5uZWwpCiB7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKwogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChPdXRwdXRDaGFubmVsKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIGlmICgoY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIC8qIEVuYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGFuZCB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVscwogICAgIChpbiB0aGUgT1BNIE1vZGUgdGhlIHR3byBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yKQogICAgIGlmIFRJTV9DSEFOTkVMXzEgaXMgdXNlZCBhcyBvdXRwdXQsIHRoZSBUSU1fQ0hBTk5FTF8yIHdpbGwgYmUgdXNlZCBhcyBpbnB1dCBhbmQKQEAgLTI1NjIsNiArMjg3MiwxMiBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0yNjAwLDYgKzI5MTYsOSBAQAogICAqIEBub3RlICAgRW5jb2RlciBtb2RlIGFuZCBFeHRlcm5hbCBjbG9jayBtb2RlIDIgYXJlIG5vdCBjb21wYXRpYmxlIGFuZCBtdXN0IG5vdCBiZSBzZWxlY3RlZCB0b2dldGhlcgogICAqICAgICAgICAgRXg6IEEgY2FsbCBmb3IgQHJlZiBIQUxfVElNX0VuY29kZXJfSW5pdCB3aWxsIGVyYXNlIHRoZSBzZXR0aW5ncyBvZiBAcmVmIEhBTF9USU1fQ29uZmlnQ2xvY2tTb3VyY2UKICAgKiAgICAgICAgIHVzaW5nIFRJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMiBhbmQgdmljZSB2ZXJzYQorICAqIEBub3RlICAgV2hlbiB0aGUgdGltZXIgaW5zdGFuY2UgaXMgaW5pdGlhbGl6ZWQgaW4gRW5jb2RlciBtb2RlLCB0aW1lcgorICAqICAgICAgICAgY2hhbm5lbHMgMSBhbmQgY2hhbm5lbCAyIGFyZSByZXNlcnZlZCBhbmQgY2Fubm90IGJlIHVzZWQgZm9yIG90aGVyCisgICogICAgICAgICBwdXJwb3NlLgogICAqIEBwYXJhbSAgaHRpbSBUSU0gRW5jb2RlciBJbnRlcmZhY2UgaGFuZGxlCiAgICogQHBhcmFtICBzQ29uZmlnIFRJTSBFbmNvZGVyIEludGVyZmFjZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwpAQCAtMjYxNywxMCArMjkzNiwxMCBAQAogICB9CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FTkNPREVSX0lOVEVSRkFDRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NPVU5URVJfTU9ERShodGltLT5Jbml0LkNvdW50ZXJNb2RlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0xPQ0tESVZJU0lPTl9ESVYoaHRpbS0+SW5pdC5DbG9ja0RpdmlzaW9uKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQVVUT1JFTE9BRF9QUkVMT0FEKGh0aW0tPkluaXQuQXV0b1JlbG9hZFByZWxvYWQpKTsKLSAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQzJfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FTkNPREVSX01PREUoc0NvbmZpZy0+RW5jb2Rlck1vZGUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19TRUxFQ1RJT04oc0NvbmZpZy0+SUMxU2VsZWN0aW9uKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fSUNfU0VMRUNUSU9OKHNDb25maWctPklDMlNlbGVjdGlvbikpOwpAQCAtMjY5Nyw2ICszMDE2LDE1IEBACiAgIC8qIFdyaXRlIHRvIFRJTXggQ0NFUiAqLwogICBodGltLT5JbnN0YW5jZS0+Q0NFUiA9IHRtcGNjZXI7CiAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRUFEWTsKKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIHN0YXRlKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogCkBAIC0yNzMxLDYgKzMwNTksMTUgQEAKICAgSEFMX1RJTV9FbmNvZGVyX01zcERlSW5pdChodGltKTsKICNlbmRpZiAvKiBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAorICAvKiBDaGFuZ2UgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVTRVQ7CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworCiAgIC8qIENoYW5nZSBUSU0gc3RhdGUgKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFU0VUOwogCkBAIC0yNzgyLDggKzMxMTksNTggQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9TdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIpOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCi0gIGFzc2VydF9wYXJhbShJU19USU1fQ0MyX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fRU5DT0RFUl9JTlRFUkZBQ0VfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsKHMpIHN0YXRlICovCisgIGlmIChDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpCisgIHsKKyAgICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgIH0KKyAgfQorICBlbHNlIGlmIChDaGFubmVsID09IFRJTV9DSEFOTkVMXzIpCisgIHsKKyAgICBpZiAoKGNoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgfQorICB9CiAKICAgLyogRW5hYmxlIHRoZSBlbmNvZGVyIGludGVyZmFjZSBjaGFubmVscyAqLwogICBzd2l0Y2ggKENoYW5uZWwpCkBAIC0yODI3LDcgKzMyMTQsNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX1N0b3AoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCi0gIGFzc2VydF9wYXJhbShJU19USU1fQ0MyX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fRU5DT0RFUl9JTlRFUkZBQ0VfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAogICAvKiBEaXNhYmxlIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWxzIDEgYW5kIDIKICAgICAoaW4gdGhlIEVuY29kZXJJbnRlcmZhY2UgdGhlIHR3byBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yKSAqLwpAQCAtMjg1Niw2ICszMjQzLDIwIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbChzKSBzdGF0ZSAqLworICBpZiAoKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMSkgfHwgKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMikpCisgIHsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CisgIGVsc2UgCisgIHsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0yODcyLDggKzMyNzMsNTggQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9TdGFydF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIpOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCi0gIGFzc2VydF9wYXJhbShJU19USU1fQ0MyX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fRU5DT0RFUl9JTlRFUkZBQ0VfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsKHMpIHN0YXRlICovCisgIGlmIChDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpCisgIHsKKyAgICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgIH0KKyAgfQorICBlbHNlIGlmIChDaGFubmVsID09IFRJTV9DSEFOTkVMXzIpCisgIHsKKyAgICBpZiAoKGNoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgfQorICB9CiAKICAgLyogRW5hYmxlIHRoZSBlbmNvZGVyIGludGVyZmFjZSBjaGFubmVscyAqLwogICAvKiBFbmFibGUgdGhlIGNhcHR1cmUgY29tcGFyZSBJbnRlcnJ1cHRzIDEgYW5kL29yIDIgKi8KQEAgLTI5MjMsNyArMzM3NCw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0VuY29kZXJfU3RvcF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KLSAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQzJfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FTkNPREVSX0lOVEVSRkFDRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCiAgIC8qIERpc2FibGUgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbHMgMSBhbmQgMgogICAgIChpbiB0aGUgRW5jb2RlckludGVyZmFjZSB0aGUgdHdvIHBvc3NpYmxlIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHVzZWQgYXJlIFRJTV9DSEFOTkVMXzEgYW5kIFRJTV9DSEFOTkVMXzIpICovCkBAIC0yOTU0LDggKzM0MDUsMTkgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAotICAvKiBDaGFuZ2UgdGhlIGh0aW0gc3RhdGUgKi8KLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsKHMpIHN0YXRlICovCisgIGlmICgoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKSB8fCAoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8yKSkKKyAgeworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZSAKKyAgeworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgfQogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKQEAgLTI5NzcsMjcgKzM0MzksOTUgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9TdGFydF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90ICpwRGF0YTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwRGF0YTIsIHVpbnQxNl90IExlbmd0aCkKIHsKLSAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KLSAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfQ0NfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIpOwogCi0gIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19USU1fRU5DT0RFUl9JTlRFUkZBQ0VfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsKHMpIHN0YXRlICovCisgIGlmIChDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpCiAgIHsKLSAgICByZXR1cm4gSEFMX0JVU1k7Ci0gIH0KLSAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKLSAgewotICAgIGlmICgoKChwRGF0YTEgPT0gTlVMTCkgfHwgKHBEYXRhMiA9PSBOVUxMKSkpICYmIChMZW5ndGggPiAwVSkpCisgICAgaWYgKChjaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCisgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkpCiAgICAgewotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIHJldHVybiBIQUxfQlVTWTsKKyAgICB9CisgICAgZWxzZSBpZiAoKGNoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgICAgeworICAgICAgaWYgKChwRGF0YTEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgfQorICBlbHNlIGlmIChDaGFubmVsID09IFRJTV9DSEFOTkVMXzIpCisgIHsKKyAgICBpZiAoKGNoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKKyAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0JVU1k7CisgICAgfQorICAgIGVsc2UgaWYgKChjaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgIHsKKyAgICAgIGlmICgocERhdGEyID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCisgICAgICB7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogICB9CiAgIGVsc2UKICAgewotICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKKyAgICAgfHwgKGNoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKKyAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQorICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfQlVTWTsKKyAgICB9CisgICAgZWxzZSBpZiAoKGNoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICAgICAgJiYgKGNoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgICB7CisgICAgICBpZiAoKCgocERhdGExID09IE5VTEwpIHx8IChwRGF0YTIgPT0gTlVMTCkpKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgICAgeworICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQogICB9CiAKICAgc3dpdGNoIChDaGFubmVsKQpAQCAtMzA5NSw2ICszNjI1LDcgQEAKICAgICBkZWZhdWx0OgogICAgICAgYnJlYWs7CiAgIH0KKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0zMTEyLDcgKzM2NDMsNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX1N0b3BfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwotICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9DQ19JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKICAgLyogRGlzYWJsZSB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVscyAxIGFuZCAyCiAgICAgKGluIHRoZSBFbmNvZGVySW50ZXJmYWNlIHRoZSB0d28gcG9zc2libGUgY2hhbm5lbHMgdGhhdCBjYW4gYmUgdXNlZCBhcmUgVElNX0NIQU5ORUxfMSBhbmQgVElNX0NIQU5ORUxfMikgKi8KQEAgLTMxNDcsOCArMzY3OCwxOSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgaHRpbSBzdGF0ZSAqLwotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwocykgc3RhdGUgKi8KKyAgaWYgKChDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpIHx8IChDaGFubmVsID09IFRJTV9DSEFOTkVMXzIpKQorICB7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgfQorICBlbHNlIAorICB7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwpAQCAtMzQxNyw4ICszOTU5LDYgQEAKICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgX19IQUxfTE9DSyhodGltKTsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKLQogICBzd2l0Y2ggKENoYW5uZWwpCiAgIHsKICAgICBjYXNlIFRJTV9DSEFOTkVMXzE6CkBAIC0zNDg1LDggKzQwMjUsNiBAQAogICAgICAgYnJlYWs7CiAgIH0KIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7Ci0KICAgX19IQUxfVU5MT0NLKGh0aW0pOwogCiAgIHJldHVybiBIQUxfT0s7CkBAIC0zNTE3LDggKzQwNTUsNiBAQAogICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICBfX0hBTF9MT0NLKGh0aW0pOwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOwotCiAgIGlmIChDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpCiAgIHsKICAgICAvKiBUSTEgQ29uZmlndXJhdGlvbiAqLwpAQCAtMzU4Miw4ICs0MTE4LDYgQEAKICAgICBodGltLT5JbnN0YW5jZS0+Q0NNUjIgfD0gKHNDb25maWctPklDUHJlc2NhbGVyIDw8IDhVKTsKICAgfQogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKLQogICBfX0hBTF9VTkxPQ0soaHRpbSk7CiAKICAgcmV0dXJuIEhBTF9PSzsKQEAgLTM2MTcsOCArNDE1MSw2IEBACiAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaHRpbSk7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7Ci0KICAgc3dpdGNoIChDaGFubmVsKQogICB7CiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgpAQCAtMzcyNyw4ICs0MjU5LDYgQEAKICAgICAgIGJyZWFrOwogICB9CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIF9fSEFMX1VOTE9DSyhodGltKTsKIAogICByZXR1cm4gSEFMX09LOwpAQCAtMzg4MSw4ICs0NDExLDggQEAKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQ0NNUjMgCiAgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjUgCiAgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjYgCi0gICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0FGMSAgCi0gICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0FGMiAgCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX09SMgorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9PUjMKICAgKiBAcGFyYW0gIEJ1cnN0UmVxdWVzdFNyYyBUSU0gRE1BIFJlcXVlc3Qgc291cmNlcwogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQV9VUERBVEU6IFRJTSB1cGRhdGUgSW50ZXJydXB0IHNvdXJjZQpAQCAtMzg5OCwyMCArNDQyOCw3NCBAQAogICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCBvbmx5IHdoZW4gQnVyc3RMZW5ndGggaXMgZXF1YWwgdG8gRE1BIGRhdGEgdHJhbnNmZXIgbGVuZ3RoLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9Xcml0ZVN0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdEJhc2VBZGRyZXNzLCB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKkJ1cnN0QnVmZmVyLCB1aW50MzJfdCAgQnVyc3RMZW5ndGgpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X1dyaXRlU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IEJ1cnN0QmFzZUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVyc3RSZXF1ZXN0U3JjLCB1aW50MzJfdCAqQnVyc3RCdWZmZXIsIHVpbnQzMl90ICBCdXJzdExlbmd0aCkKK3sKKyAgcmV0dXJuIEhBTF9USU1fRE1BQnVyc3RfTXVsdGlXcml0ZVN0YXJ0KGh0aW0sIEJ1cnN0QmFzZUFkZHJlc3MsIEJ1cnN0UmVxdWVzdFNyYywgQnVyc3RCdWZmZXIsIEJ1cnN0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSB0aGUgRE1BIEJ1cnN0IHRvIHRyYW5zZmVyIG11bHRpcGxlIERhdGEgZnJvbSB0aGUgbWVtb3J5IHRvIHRoZSBUSU0gcGVyaXBoZXJhbAorICAqIEBwYXJhbSAgaHRpbSBUSU0gaGFuZGxlCisgICogQHBhcmFtICBCdXJzdEJhc2VBZGRyZXNzIFRJTSBCYXNlIGFkZHJlc3MgZnJvbSB3aGVyZSB0aGUgRE1BIHdpbGwgc3RhcnQgdGhlIERhdGEgd3JpdGUKKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NSMQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DUjIKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfU01DUgorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9ESUVSCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX1NSCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0VHUgorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ01SMQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ01SMgorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ0VSCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NOVAorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9QU0MKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQVJSCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX1JDUgorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ1IxCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjIKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQ0NSMworICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ1I0CisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0JEVFIKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfT1IxCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDTVIzIAorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ1I1IAorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ1I2IAorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9PUjIKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfT1IzCisgICogQHBhcmFtICBCdXJzdFJlcXVlc3RTcmMgVElNIERNQSBSZXF1ZXN0IHNvdXJjZXMKKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFfVVBEQVRFOiBUSU0gdXBkYXRlIEludGVycnVwdCBzb3VyY2UKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQV9DQzE6IFRJTSBDYXB0dXJlIENvbXBhcmUgMSBETUEgc291cmNlCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFfQ0MyOiBUSU0gQ2FwdHVyZSBDb21wYXJlIDIgRE1BIHNvdXJjZQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BX0NDMzogVElNIENhcHR1cmUgQ29tcGFyZSAzIERNQSBzb3VyY2UKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQV9DQzQ6IFRJTSBDYXB0dXJlIENvbXBhcmUgNCBETUEgc291cmNlCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFfQ09NOiBUSU0gQ29tbXV0YXRpb24gRE1BIHNvdXJjZQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BX1RSSUdHRVI6IFRJTSBUcmlnZ2VyIERNQSBzb3VyY2UKKyAgKiBAcGFyYW0gIEJ1cnN0QnVmZmVyIFRoZSBCdWZmZXIgYWRkcmVzcy4KKyAgKiBAcGFyYW0gIEJ1cnN0TGVuZ3RoIERNQSBCdXJzdCBsZW5ndGguIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgdmFsdWUKKyAgKiAgICAgICAgIGJldHdlZW46IFRJTV9ETUFCVVJTVExFTkdUSF8xVFJBTlNGRVIgYW5kIFRJTV9ETUFCVVJTVExFTkdUSF8xOFRSQU5TRkVSUy4KKyAgKiBAcGFyYW0gIERhdGFMZW5ndGggRGF0YSBsZW5ndGguIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgdmFsdWUKKyAgKiAgICAgICAgIGJldHdlZW4gMSBhbmQgMHhGRkZGLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9NdWx0aVdyaXRlU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IEJ1cnN0QmFzZUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMsIHVpbnQzMl90ICpCdXJzdEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICBCdXJzdExlbmd0aCwgIHVpbnQzMl90ICBEYXRhTGVuZ3RoKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQUJVUlNUX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX0JBU0UoQnVyc3RCYXNlQWRkcmVzcykpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9TT1VSQ0UoQnVyc3RSZXF1ZXN0U3JjKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX0xFTkdUSChCdXJzdExlbmd0aCkpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9EQVRBX0xFTkdUSChEYXRhTGVuZ3RoKSk7CiAKLSAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkKKyAgaWYgKGh0aW0tPkRNQUJ1cnN0U3RhdGUgPT0gSEFMX0RNQV9CVVJTVF9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCisgIGVsc2UgaWYgKGh0aW0tPkRNQUJ1cnN0U3RhdGUgPT0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRUFEWSkKICAgewogICAgIGlmICgoQnVyc3RCdWZmZXIgPT0gTlVMTCkgJiYgKEJ1cnN0TGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTM5MTksNyArNDUwMyw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKKyAgICAgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX0JVU1k7CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTM5MzgsNyArNDUyMiw4IEBACiAgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfVVBEQVRFXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3IgOwogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCi0gICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfVVBEQVRFXSwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSkgIT0gSEFMX09LKQorICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1VQREFURV0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KQEAgLTM5NTUsNyArNDU0MCw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtMzk3Miw3ICs0NTU3LDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICgoQnVyc3RMZW5ndGgpID4+IDhVKSArIDFVKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CkBAIC0zOTg5LDcgKzQ1NzQsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KQEAgLTQwMDYsNyArNDU5MSw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtNDAyMyw3ICs0NjA4LDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NPTU1VVEFUSU9OXSwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KQEAgLTQwNDAsNyArNDYyNSw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9UUklHR0VSXSwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KQEAgLTQwNDksMTQgKzQ2MzQsMTIgQEAKICAgICBkZWZhdWx0OgogICAgICAgYnJlYWs7CiAgIH0KLSAgLyogY29uZmlndXJlIHRoZSBETUEgQnVyc3QgTW9kZSAqLwotICBodGltLT5JbnN0YW5jZS0+RENSID0gKEJ1cnN0QmFzZUFkZHJlc3MgfCBCdXJzdExlbmd0aCk7CiAKKyAgLyogQ29uZmlndXJlIHRoZSBETUEgQnVyc3QgTW9kZSAqLworICBodGltLT5JbnN0YW5jZS0+RENSID0gKEJ1cnN0QmFzZUFkZHJlc3MgfCBCdXJzdExlbmd0aCk7CiAgIC8qIEVuYWJsZSB0aGUgVElNIERNQSBSZXF1ZXN0ICovCiAgIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTQwNzgsMTcgKzQ2NjEsMTcgQEAKICAgewogICAgIGNhc2UgVElNX0RNQV9VUERBVEU6CiAgICAgewotICAgICAgc3RhdHVzID0gSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfVVBEQVRFXSk7CisgICAgICAodm9pZClIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9VUERBVEVdKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRJTV9ETUFfQ0MxOgogICAgIHsKLSAgICAgIHN0YXR1cyA9IEhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0pOworICAgICAgKHZvaWQpSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSk7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUSU1fRE1BX0NDMjoKICAgICB7Ci0gICAgICBzdGF0dXMgPSBIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdKTsKKyAgICAgICh2b2lkKUhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0pOwogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgVElNX0RNQV9DQzM6CkBAIC00MDk4LDE3ICs0NjgxLDE3IEBACiAgICAgfQogICAgIGNhc2UgVElNX0RNQV9DQzQ6CiAgICAgewotICAgICAgc3RhdHVzID0gSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSk7CisgICAgICAodm9pZClIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRJTV9ETUFfQ09NOgogICAgIHsKLSAgICAgIHN0YXR1cyA9IEhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NPTU1VVEFUSU9OXSk7CisgICAgICAodm9pZClIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DT01NVVRBVElPTl0pOwogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgVElNX0RNQV9UUklHR0VSOgogICAgIHsKLSAgICAgIHN0YXR1cyA9IEhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1RSSUdHRVJdKTsKKyAgICAgICh2b2lkKUhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1RSSUdHRVJdKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpAQCAtNDEyMSw2ICs0NzA0LDkgQEAKICAgICBfX0hBTF9USU1fRElTQUJMRV9ETUEoaHRpbSwgQnVyc3RSZXF1ZXN0U3JjKTsKICAgfQogCisgIC8qIENoYW5nZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRUFEWTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBzdGF0dXM7CiB9CkBAIC00MTUyLDggKzQ3MzgsOCBAQAogICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ01SMyAKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQ0NSNSAKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQ0NSNiAKLSAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQUYxICAKLSAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQUYyICAKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfT1IyCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX09SMwogICAqIEBwYXJhbSAgQnVyc3RSZXF1ZXN0U3JjIFRJTSBETUEgUmVxdWVzdCBzb3VyY2VzCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BX1VQREFURTogVElNIHVwZGF0ZSBJbnRlcnJ1cHQgc291cmNlCkBAIC00MTcyLDE3ICs0NzU4LDcxIEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X1JlYWRTdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RCYXNlQWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgdWludDMyX3QgICpCdXJzdEJ1ZmZlciwgdWludDMyX3QgIEJ1cnN0TGVuZ3RoKQogeworICByZXR1cm4gSEFMX1RJTV9ETUFCdXJzdF9NdWx0aVJlYWRTdGFydChodGltLCBCdXJzdEJhc2VBZGRyZXNzLCBCdXJzdFJlcXVlc3RTcmMsIEJ1cnN0QnVmZmVyLCBCdXJzdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSB0aGUgRE1BIEJ1cnN0IHRvIHRyYW5zZmVyIERhdGEgZnJvbSB0aGUgVElNIHBlcmlwaGVyYWwgdG8gdGhlIG1lbW9yeQorICAqIEBwYXJhbSAgaHRpbSBUSU0gaGFuZGxlCisgICogQHBhcmFtICBCdXJzdEJhc2VBZGRyZXNzIFRJTSBCYXNlIGFkZHJlc3MgZnJvbSB3aGVyZSB0aGUgRE1BICB3aWxsIHN0YXJ0IHRoZSBEYXRhIHJlYWQKKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NSMQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DUjIKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfU01DUgorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9ESUVSCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX1NSCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0VHUgorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ01SMQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ01SMgorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ0VSCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NOVAorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9QU0MKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQVJSCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX1JDUgorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ1IxCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjIKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQ0NSMworICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ1I0CisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0JEVFIKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfT1IxCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDTVIzIAorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ1I1IAorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ1I2IAorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9PUjIKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfT1IzCisgICogQHBhcmFtICBCdXJzdFJlcXVlc3RTcmMgVElNIERNQSBSZXF1ZXN0IHNvdXJjZXMKKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFfVVBEQVRFOiBUSU0gdXBkYXRlIEludGVycnVwdCBzb3VyY2UKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQV9DQzE6IFRJTSBDYXB0dXJlIENvbXBhcmUgMSBETUEgc291cmNlCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFfQ0MyOiBUSU0gQ2FwdHVyZSBDb21wYXJlIDIgRE1BIHNvdXJjZQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BX0NDMzogVElNIENhcHR1cmUgQ29tcGFyZSAzIERNQSBzb3VyY2UKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQV9DQzQ6IFRJTSBDYXB0dXJlIENvbXBhcmUgNCBETUEgc291cmNlCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFfQ09NOiBUSU0gQ29tbXV0YXRpb24gRE1BIHNvdXJjZQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BX1RSSUdHRVI6IFRJTSBUcmlnZ2VyIERNQSBzb3VyY2UKKyAgKiBAcGFyYW0gIEJ1cnN0QnVmZmVyIFRoZSBCdWZmZXIgYWRkcmVzcy4KKyAgKiBAcGFyYW0gIEJ1cnN0TGVuZ3RoIERNQSBCdXJzdCBsZW5ndGguIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgdmFsdWUKKyAgKiAgICAgICAgIGJldHdlZW46IFRJTV9ETUFCVVJTVExFTkdUSF8xVFJBTlNGRVIgYW5kIFRJTV9ETUFCVVJTVExFTkdUSF8xOFRSQU5TRkVSUy4KKyAgKiBAcGFyYW0gIERhdGFMZW5ndGggRGF0YSBsZW5ndGguIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgdmFsdWUKKyAgKiAgICAgICAgIGJldHdlZW4gMSBhbmQgMHhGRkZGLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9NdWx0aVJlYWRTdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RCYXNlQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVyc3RSZXF1ZXN0U3JjLCB1aW50MzJfdCAgKkJ1cnN0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgQnVyc3RMZW5ndGgsIHVpbnQzMl90ICBEYXRhTGVuZ3RoKQorewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQUJVUlNUX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX0JBU0UoQnVyc3RCYXNlQWRkcmVzcykpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9TT1VSQ0UoQnVyc3RSZXF1ZXN0U3JjKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX0xFTkdUSChCdXJzdExlbmd0aCkpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9EQVRBX0xFTkdUSChEYXRhTGVuZ3RoKSk7CiAKLSAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkKKyAgaWYgKGh0aW0tPkRNQUJ1cnN0U3RhdGUgPT0gSEFMX0RNQV9CVVJTVF9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCisgIGVsc2UgaWYgKGh0aW0tPkRNQUJ1cnN0U3RhdGUgPT0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRUFEWSkKICAgewogICAgIGlmICgoQnVyc3RCdWZmZXIgPT0gTlVMTCkgJiYgKEJ1cnN0TGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTQxOTAsNyArNDgzMCw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKKyAgICAgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX0JVU1k7CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTQyMDksNyArNDg0OSw4IEBACiAgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfVVBEQVRFXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3IgOwogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCi0gICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfVVBEQVRFXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLCAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSkgIT0gSEFMX09LKQorICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1VQREFURV0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KQEAgLTQyMjUsNyArNDg2Niw4IEBACiAgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3IgOwogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCi0gICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLCAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSkgIT0gSEFMX09LKQorICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KQEAgLTQyMzMsNyArNDg3NSw3IEBACiAgICAgfQogICAgIGNhc2UgVElNX0RNQV9DQzI6CiAgICAgewotICAgICAgLyogU2V0IHRoZSBETUEgY2FwdHVyZS9jb21wYXJlIGNhbGxiYWNrcyAqLworICAgICAgLyogU2V0IHRoZSBETUEgY2FwdHVyZSBjYWxsYmFja3MgKi8KICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQUNhcHR1cmVDcGx0OwogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gVElNX0RNQUNhcHR1cmVIYWxmQ3BsdDsKIApAQCAtNDI0MSw3ICs0ODgzLDggQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KLSAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsICgoQnVyc3RMZW5ndGgpID4+IDhVKSArIDFVKSAhPSBIQUxfT0spCisgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtNDI1Nyw3ICs0OTAwLDggQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KLSAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsICgoQnVyc3RMZW5ndGgpID4+IDhVKSArIDFVKSAhPSBIQUxfT0spCisgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtNDI3Myw3ICs0OTE3LDggQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KLSAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsICgoQnVyc3RMZW5ndGgpID4+IDhVKSArIDFVKSAhPSBIQUxfT0spCisgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtNDI4OSw3ICs0OTM0LDggQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DT01NVVRBVElPTl0tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yIDsKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwotICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NPTU1VVEFUSU9OXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLCAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSkgIT0gSEFMX09LKQorICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NPTU1VVEFUSU9OXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtNDMwNSw3ICs0OTUxLDggQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9UUklHR0VSXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3IgOwogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCi0gICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfVFJJR0dFUl0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpICE9IEhBTF9PSykKKyAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9UUklHR0VSXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtNDMxNSwxNCArNDk2MiwxMiBAQAogICAgICAgYnJlYWs7CiAgIH0KIAotICAvKiBjb25maWd1cmUgdGhlIERNQSBCdXJzdCBNb2RlICovCisgIC8qIENvbmZpZ3VyZSB0aGUgRE1BIEJ1cnN0IE1vZGUgKi8KICAgaHRpbS0+SW5zdGFuY2UtPkRDUiA9IChCdXJzdEJhc2VBZGRyZXNzIHwgQnVyc3RMZW5ndGgpOwogCiAgIC8qIEVuYWJsZSB0aGUgVElNIERNQSBSZXF1ZXN0ICovCiAgIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTQzNDQsMzcgKzQ5ODksMzcgQEAKICAgewogICAgIGNhc2UgVElNX0RNQV9VUERBVEU6CiAgICAgewotICAgICAgc3RhdHVzID0gSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfVVBEQVRFXSk7CisgICAgICAodm9pZClIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9VUERBVEVdKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRJTV9ETUFfQ0MxOgogICAgIHsKLSAgICAgIHN0YXR1cyA9IEhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0pOworICAgICAgKHZvaWQpSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSk7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUSU1fRE1BX0NDMjoKICAgICB7Ci0gICAgICBzdGF0dXMgPSBIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdKTsKKyAgICAgICh2b2lkKUhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0pOwogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgVElNX0RNQV9DQzM6CiAgICAgewotICAgICAgc3RhdHVzID0gSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSk7CisgICAgICAodm9pZClIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRJTV9ETUFfQ0M0OgogICAgIHsKLSAgICAgIHN0YXR1cyA9IEhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0pOworICAgICAgKHZvaWQpSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSk7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUSU1fRE1BX0NPTToKICAgICB7Ci0gICAgICBzdGF0dXMgPSBIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DT01NVVRBVElPTl0pOworICAgICAgKHZvaWQpSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ09NTVVUQVRJT05dKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRJTV9ETUFfVFJJR0dFUjoKICAgICB7Ci0gICAgICBzdGF0dXMgPSBIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9UUklHR0VSXSk7CisgICAgICAodm9pZClIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9UUklHR0VSXSk7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTQzODcsNiArNTAzMiw5IEBACiAgICAgX19IQUxfVElNX0RJU0FCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CiAgIH0KIAorICAvKiBDaGFuZ2UgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gc3RhdHVzOwogfQpAQCAtNDczNCwxMyArNTM4MiwxMyBAQAogICAgIGNhc2UgVElNX0NMT0NLU09VUkNFX0lUUjE6CiAgICAgY2FzZSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMjoKICAgICBjYXNlIFRJTV9DTE9DS1NPVVJDRV9JVFIzOgotICAgIHsKLSAgICAgIC8qIENoZWNrIHdoZXRoZXIgb3Igbm90IHRoZSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyBpbnRlcm5hbCB0cmlnZ2VyIGlucHV0ICovCi0gICAgICBhc3NlcnRfcGFyYW0oSVNfVElNX0NMT0NLU09VUkNFX0lUUlhfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKyAgICAgIHsKKyAgICAgICAgLyogQ2hlY2sgd2hldGhlciBvciBub3QgdGhlIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGludGVybmFsIHRyaWdnZXIgaW5wdXQgKi8KKyAgICAgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DTE9DS1NPVVJDRV9JVFJYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKLSAgICAgIFRJTV9JVFJ4X1NldENvbmZpZyhodGltLT5JbnN0YW5jZSwgc0Nsb2NrU291cmNlQ29uZmlnLT5DbG9ja1NvdXJjZSk7Ci0gICAgICBicmVhazsKLSAgICB9CisgICAgICAgIFRJTV9JVFJ4X1NldENvbmZpZyhodGltLT5JbnN0YW5jZSwgc0Nsb2NrU291cmNlQ29uZmlnLT5DbG9ja1NvdXJjZSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQogCiAgICAgZGVmYXVsdDoKICAgICAgIGJyZWFrOwpAQCAtNTY4MSw2ICs2MzI5LDU0IEBACiB9CiAKIC8qKgorICAqIEBicmllZiAgUmV0dXJuIHRoZSBUSU0gRW5jb2RlciBNb2RlIGhhbmRsZSBzdGF0ZS4KKyAgKiBAcGFyYW0gIGh0aW0gVElNIGhhbmRsZQorICAqIEByZXR2YWwgQWN0aXZlIGNoYW5uZWwKKyAgKi8KK0hBTF9USU1fQWN0aXZlQ2hhbm5lbCBIQUxfVElNX0dldEFjdGl2ZUNoYW5uZWwoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pCit7CisgIHJldHVybiBodGltLT5DaGFubmVsOworfQorCisvKioKKyAgKiBAYnJpZWYgIFJldHVybiBhY3R1YWwgc3RhdGUgb2YgdGhlIFRJTSBjaGFubmVsLgorICAqIEBwYXJhbSAgaHRpbSBUSU0gaGFuZGxlCisgICogQHBhcmFtICBDaGFubmVsIFRJTSBDaGFubmVsCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMTogVElNIENoYW5uZWwgMQorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8yOiBUSU0gQ2hhbm5lbCAyCisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzM6IFRJTSBDaGFubmVsIDMKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfNDogVElNIENoYW5uZWwgNAorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF81OiBUSU0gQ2hhbm5lbCA1CisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzY6IFRJTSBDaGFubmVsIDYKKyAgKiBAcmV0dmFsIFRJTSBDaGFubmVsIHN0YXRlCisgICovCitIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgSEFMX1RJTV9HZXRDaGFubmVsU3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sICB1aW50MzJfdCBDaGFubmVsKQoreworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF9zdGF0ZTsKKyAgCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CisKKyAgY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKTsKKyAgICAKKyAgcmV0dXJuIGNoYW5uZWxfc3RhdGU7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmV0dXJuIGFjdHVhbCBzdGF0ZSBvZiBhIERNQSBidXJzdCBvcGVyYXRpb24uCisgICogQHBhcmFtICBodGltIFRJTSBoYW5kbGUKKyAgKiBAcmV0dmFsIERNQSBidXJzdCBzdGF0ZQorICAqLworSEFMX1RJTV9ETUFCdXJzdFN0YXRlVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0U3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pCit7CisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19USU1fRE1BQlVSU1RfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKyAgCisgIHJldHVybiBodGltLT5ETUFCdXJzdFN0YXRlOworfQorCisvKioKICAgKiBAfQogICAqLwogCkBAIC01NzAxLDEzICs2Mzk3LDM4IEBACiB7CiAgIFRJTV9IYW5kbGVUeXBlRGVmICpodGltID0gKFRJTV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzE7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzI7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzM7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzMsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzQ7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzQsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICB9CiAKICNpZiAoVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIGh0aW0tPkVycm9yQ2FsbGJhY2soaHRpbSk7CiAjZWxzZQogICBIQUxfVElNX0Vycm9yQ2FsbGJhY2soaHRpbSk7CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCisKKyAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfQ0xFQVJFRDsKIH0KIAogLyoqCkBAIC01NzE5LDIzICs2NDQwLDQxIEBACiB7CiAgIFRJTV9IYW5kbGVUeXBlRGVmICpodGltID0gKFRJTV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdKQogICB7CiAgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMTsKKyAgICAKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgfQogICB9CiAgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8yOworICAgIAorICAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CiAgIH0KICAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzM7CisgICAgCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8zLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIH0KICAgfQogICBlbHNlIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdKQogICB7CiAgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfNDsKKyAgICAKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzQsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgfQogICB9CiAgIGVsc2UKICAgewpAQCAtNTc2MCw4ICs2NDk5LDYgQEAKIHsKICAgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0gPSAoVElNX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7Ci0KICAgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8xOwpAQCAtNTgwMSwyMyArNjUzOCw0NSBAQAogewogICBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSA9IChUSU1fSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKLQogICBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzE7CisgICAgCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CiAgIH0KICAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzI7CisgICAgCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CiAgIH0KICAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzM7CisgICAgCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8zLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMywgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CiAgIH0KICAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzQ7CisgICAgCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF80LCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfNCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CiAgIH0KICAgZWxzZQogICB7CkBAIC01ODQyLDggKzY2MDEsNiBAQAogewogICBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSA9IChUSU1fSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKLQogICBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzE7CkBAIC01ODgzLDcgKzY2NDAsMTAgQEAKIHsKICAgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0gPSAoVElNX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIGlmIChodGltLT5oZG1hW1RJTV9ETUFfSURfVVBEQVRFXS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgIHsKKyAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIH0KIAogI2lmIChVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgaHRpbS0+UGVyaW9kRWxhcHNlZENhbGxiYWNrKGh0aW0pOwpAQCAtNTkwMSw4ICs2NjYxLDYgQEAKIHsKICAgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0gPSAoVElNX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7Ci0KICNpZiAoVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIGh0aW0tPlBlcmlvZEVsYXBzZWRIYWxmQ3BsdENhbGxiYWNrKGh0aW0pOwogI2Vsc2UKQEAgLTU5MTksNyArNjY3NywxMCBAQAogewogICBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSA9IChUSU1fSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgaWYgKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9UUklHR0VSXS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgIHsKKyAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIH0KIAogI2lmIChVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgaHRpbS0+VHJpZ2dlckNhbGxiYWNrKGh0aW0pOwpAQCAtNTkzNyw4ICs2Njk4LDYgQEAKIHsKICAgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0gPSAoVElNX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7Ci0KICNpZiAoVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIGh0aW0tPlRyaWdnZXJIYWxmQ3BsdENhbGxiYWNrKGh0aW0pOwogI2Vsc2UKQEAgLTU5OTcsNyArNjc1Niw3IEBACiAvKioKICAgKiBAYnJpZWYgIFRpbWVyIE91dHB1dCBDb21wYXJlIDEgY29uZmlndXJhdGlvbgogICAqIEBwYXJhbSAgVElNeCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsCi0gICogQHBhcmFtICBPQ19Db25maWcgVGhlIG91cHV0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisgICogQHBhcmFtICBPQ19Db25maWcgVGhlIG91dHB1dCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQogICAqIEByZXR2YWwgTm9uZQogICAqLwogc3RhdGljIHZvaWQgVElNX09DMV9TZXRDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIFRJTV9PQ19Jbml0VHlwZURlZiAqT0NfQ29uZmlnKQpAQCAtNjA3Miw3ICs2ODMxLDcgQEAKIC8qKgogICAqIEBicmllZiAgVGltZXIgT3V0cHV0IENvbXBhcmUgMiBjb25maWd1cmF0aW9uCiAgICogQHBhcmFtICBUSU14IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwKLSAgKiBAcGFyYW0gIE9DX0NvbmZpZyBUaGUgb3VwdXQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKKyAgKiBAcGFyYW0gIE9DX0NvbmZpZyBUaGUgb3V0cHV0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCiAgICogQHJldHZhbCBOb25lCiAgICovCiB2b2lkIFRJTV9PQzJfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBUSU1fT0NfSW5pdFR5cGVEZWYgKk9DX0NvbmZpZykKQEAgLTYxNDgsNyArNjkwNyw3IEBACiAvKioKICAgKiBAYnJpZWYgIFRpbWVyIE91dHB1dCBDb21wYXJlIDMgY29uZmlndXJhdGlvbgogICAqIEBwYXJhbSAgVElNeCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsCi0gICogQHBhcmFtICBPQ19Db25maWcgVGhlIG91cHV0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisgICogQHBhcmFtICBPQ19Db25maWcgVGhlIG91dHB1dCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQogICAqIEByZXR2YWwgTm9uZQogICAqLwogc3RhdGljIHZvaWQgVElNX09DM19TZXRDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIFRJTV9PQ19Jbml0VHlwZURlZiAqT0NfQ29uZmlnKQpAQCAtNjIyMiw3ICs2OTgxLDcgQEAKIC8qKgogICAqIEBicmllZiAgVGltZXIgT3V0cHV0IENvbXBhcmUgNCBjb25maWd1cmF0aW9uCiAgICogQHBhcmFtICBUSU14IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwKLSAgKiBAcGFyYW0gIE9DX0NvbmZpZyBUaGUgb3VwdXQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKKyAgKiBAcGFyYW0gIE9DX0NvbmZpZyBUaGUgb3V0cHV0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCiAgICogQHJldHZhbCBOb25lCiAgICovCiBzdGF0aWMgdm9pZCBUSU1fT0M0X1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgVElNX09DX0luaXRUeXBlRGVmICpPQ19Db25maWcpCkBAIC02MjgyLDcgKzcwNDEsNyBAQAogLyoqCiAgICogQGJyaWVmICBUaW1lciBPdXRwdXQgQ29tcGFyZSA1IGNvbmZpZ3VyYXRpb24KICAgKiBAcGFyYW0gIFRJTXggdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbAotICAqIEBwYXJhbSAgT0NfQ29uZmlnIFRoZSBvdXB1dCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQorICAqIEBwYXJhbSAgT0NfQ29uZmlnIFRoZSBvdXRwdXQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIHN0YXRpYyB2b2lkIFRJTV9PQzVfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LApAQCAtNjMzNSw3ICs3MDk0LDcgQEAKIC8qKgogICAqIEBicmllZiAgVGltZXIgT3V0cHV0IENvbXBhcmUgNiBjb25maWd1cmF0aW9uCiAgICogQHBhcmFtICBUSU14IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwKLSAgKiBAcGFyYW0gIE9DX0NvbmZpZyBUaGUgb3VwdXQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKKyAgKiBAcGFyYW0gIE9DX0NvbmZpZyBUaGUgb3V0cHV0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCiAgICogQHJldHZhbCBOb25lCiAgICovCiBzdGF0aWMgdm9pZCBUSU1fT0M2X1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwKQEAgLTY0MzksNyArNzE5OCw3IEBACiAgICAgICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogICAgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9UUklHR0VSRklMVEVSKHNTbGF2ZUNvbmZpZy0+VHJpZ2dlckZpbHRlcikpOwogCi0gICAgICBpZihzU2xhdmVDb25maWctPlNsYXZlTW9kZSA9PSBUSU1fU0xBVkVNT0RFX0dBVEVEKQorICAgICAgaWYgKHNTbGF2ZUNvbmZpZy0+U2xhdmVNb2RlID09IFRJTV9TTEFWRU1PREVfR0FURUQpCiAgICAgICB7CiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CkBAIC02NDkxLDExICs3MjUwLDExIEBACiAgICAgY2FzZSBUSU1fVFNfSVRSMToKICAgICBjYXNlIFRJTV9UU19JVFIyOgogICAgIGNhc2UgVElNX1RTX0lUUjM6Ci0gICAgewotICAgICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlciAqLwotICAgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQzJfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgIHsKKyAgICAgICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlciAqLworICAgICAgICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworICAgICAgICBicmVhazsKKyAgICAgIH0KIAogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX3RpbV9leC5jIGIvU3JjL3N0bTMybDR4eF9oYWxfdGltX2V4LmMKaW5kZXggZWFiMTgyZS4uM2MwMjI2NiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfdGltX2V4LmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfdGltX2V4LmMKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgICAgIHRoZSBjb21tdXRhdGlvbiBldmVudCkuCiAKICAgICAgKCMpIEFjdGl2YXRlIHRoZSBUSU0gcGVyaXBoZXJhbCB1c2luZyBvbmUgb2YgdGhlIHN0YXJ0IGZ1bmN0aW9uczoKLSAgICAgICAgICAgKCsrKSBDb21wbGVtZW50YXJ5IE91dHB1dCBDb21wYXJlIDogSEFMX1RJTUV4X09DTl9TdGFydCgpLCBIQUxfVElNRXhfT0NOX1N0YXJ0X0RNQSgpLCBIQUxfVElNRXhfT0NfU3RhcnRfSVQoKQorICAgICAgICAgICAoKyspIENvbXBsZW1lbnRhcnkgT3V0cHV0IENvbXBhcmUgOiBIQUxfVElNRXhfT0NOX1N0YXJ0KCksIEhBTF9USU1FeF9PQ05fU3RhcnRfRE1BKCksIEhBTF9USU1FeF9PQ05fU3RhcnRfSVQoKQogICAgICAgICAgICAoKyspIENvbXBsZW1lbnRhcnkgUFdNIGdlbmVyYXRpb24gOiBIQUxfVElNRXhfUFdNTl9TdGFydCgpLCBIQUxfVElNRXhfUFdNTl9TdGFydF9ETUEoKSwgSEFMX1RJTUV4X1BXTU5fU3RhcnRfSVQoKQogICAgICAgICAgICAoKyspIENvbXBsZW1lbnRhcnkgT25lLXB1bHNlIG1vZGUgb3V0cHV0IDogSEFMX1RJTUV4X09uZVB1bHNlTl9TdGFydCgpLCBIQUxfVElNRXhfT25lUHVsc2VOX1N0YXJ0X0lUKCkKICAgICAgICAgICAgKCsrKSBIYWxsIFNlbnNvciBvdXRwdXQgOiBIQUxfVElNRXhfSGFsbFNlbnNvcl9TdGFydCgpLCBIQUxfVElNRXhfSGFsbFNlbnNvcl9TdGFydF9ETUEoKSwgSEFMX1RJTUV4X0hhbGxTZW5zb3JfU3RhcnRfSVQoKS4KQEAgLTkyLDkgKzkyLDExIEBACiAKIC8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIFRJTV9ETUFEZWxheVB1bHNlTkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOworc3RhdGljIHZvaWQgVElNX0RNQUVycm9yQ0N4TihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgdm9pZCBUSU1fQ0N4TkNoYW5uZWxDbWQoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IENoYW5uZWxOU3RhdGUpOwogCiAvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTI1LDYgKzEyNyw5IEBACiAgICovCiAvKioKICAgKiBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBUSU0gSGFsbCBTZW5zb3IgSW50ZXJmYWNlIGFuZCBpbml0aWFsaXplIHRoZSBhc3NvY2lhdGVkIGhhbmRsZS4KKyAgKiBAbm90ZSAgIFdoZW4gdGhlIHRpbWVyIGluc3RhbmNlIGlzIGluaXRpYWxpemVkIGluIEhhbGwgU2Vuc29yIEludGVyZmFjZSBtb2RlLAorICAqICAgICAgICAgdGltZXIgY2hhbm5lbHMgMSBhbmQgY2hhbm5lbCAyIGFyZSByZXNlcnZlZCBhbmQgY2Fubm90IGJlIHVzZWQgZm9yCisgICogICAgICAgICBvdGhlciBwdXJwb3NlLgogICAqIEBwYXJhbSAgaHRpbSBUSU0gSGFsbCBTZW5zb3IgSW50ZXJmYWNlIGhhbmRsZQogICAqIEBwYXJhbSAgc0NvbmZpZyBUSU0gSGFsbCBTZW5zb3IgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTIxMCw2ICsyMTUsMTUgQEAKICAgaHRpbS0+SW5zdGFuY2UtPkNSMiAmPSB+VElNX0NSMl9NTVM7CiAgIGh0aW0tPkluc3RhbmNlLT5DUjIgfD0gVElNX1RSR09fT0MyUkVGOwogCisgIC8qIEluaXRpYWxpemUgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBJbml0aWFsaXplIHRoZSBUSU0gc3RhdGUqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CiAKQEAgLTI0Myw2ICsyNTcsMTUgQEAKICAgSEFMX1RJTUV4X0hhbGxTZW5zb3JfTXNwRGVJbml0KGh0aW0pOwogI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCisgIC8qIENoYW5nZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRVNFVDsKKworICAvKiBDaGFuZ2UgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisKICAgLyogQ2hhbmdlIFRJTSBzdGF0ZSAqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVTRVQ7CiAKQEAgLTI5MCwxNyArMzEzLDQzIEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfSGFsbFNlbnNvcl9TdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSkKIHsKICAgdWludDMyX3QgdG1wc21jcjsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIpOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSEFMTF9TRU5TT1JfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICB8fCAoY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgCiAgIC8qIEVuYWJsZSB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsIDEKLSAgICAoaW4gdGhlIEhhbGwgU2Vuc29yIEludGVyZmFjZSB0aGUgdGhyZWUgcG9zc2libGUgY2hhbm5lbHMgdGhhdCBjYW4gYmUgdXNlZCBhcmUgVElNX0NIQU5ORUxfMSwgVElNX0NIQU5ORUxfMiBhbmQgVElNX0NIQU5ORUxfMykgKi8KKyAgKGluIHRoZSBIYWxsIFNlbnNvciBJbnRlcmZhY2UgdGhlIHRocmVlIHBvc3NpYmxlIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHVzZWQgYXJlIFRJTV9DSEFOTkVMXzEsIFRJTV9DSEFOTkVMXzIgYW5kIFRJTV9DSEFOTkVMXzMpICovCiAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBUSU1fQ0hBTk5FTF8xLCBUSU1fQ0N4X0VOQUJMRSk7CiAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICB7CisgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgIH0KKyAgfQorICBlbHNlCiAgIHsKICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICB9CkBAIC0zMjYsNiArMzc1LDEyIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTMzOCwxMCArMzkzLDI5IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfSGFsbFNlbnNvcl9TdGFydF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSkKIHsKICAgdWludDMyX3QgdG1wc21jcjsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIpOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSEFMTF9TRU5TT1JfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICB8fCAoY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICAvKiBFbmFibGUgdGhlIGNhcHR1cmUgY29tcGFyZSBJbnRlcnJ1cHRzIDEgZXZlbnQgKi8KICAgX19IQUxfVElNX0VOQUJMRV9JVChodGltLCBUSU1fSVRfQ0MxKTsKIApAQCAtMzUwLDggKzQyNCwxNSBAQAogICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgVElNX0NIQU5ORUxfMSwgVElNX0NDeF9FTkFCTEUpOwogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICB7CisgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgeworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICB9CisgIH0KKyAgZWxzZQogICB7CiAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgfQpAQCAtMzgwLDYgKzQ2MSwxMiBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0zOTQsMjkgKzQ4MSwzNiBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0hhbGxTZW5zb3JfU3RhcnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCAqcERhdGEsIHVpbnQxNl90IExlbmd0aCkKIHsKICAgdWludDMyX3QgdG1wc21jcjsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9IQUxMX1NFTlNPUl9JTlRFUkZBQ0VfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAotICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQorICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIGlmICgoY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQorICAgIHx8KGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKSkKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQorICBlbHNlIGlmICgoY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCiAgIHsKLSAgICBpZiAoKCh1aW50MzJfdClwRGF0YSA9PSAwVSkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICBpZiAoKHBEYXRhID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKICAgICB9CiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogbm90aGluZyB0byBkbyAqLworICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KKwogICAvKiBFbmFibGUgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAxCiAgICAgKGluIHRoZSBIYWxsIFNlbnNvciBJbnRlcmZhY2UgdGhlIHRocmVlIHBvc3NpYmxlIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHVzZWQgYXJlIFRJTV9DSEFOTkVMXzEsIFRJTV9DSEFOTkVMXzIgYW5kIFRJTV9DSEFOTkVMXzMpICovCiAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBUSU1fQ0hBTk5FTF8xLCBUSU1fQ0N4X0VOQUJMRSk7CkBAIC00MzYsOCArNTMwLDE1IEBACiAgIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIFRJTV9ETUFfQ0MxKTsKIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgeworICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIHsKKyAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgfQorICB9CisgIGVsc2UKICAgewogICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgIH0KQEAgLTQ2NSw5ICs1NjYsMTQgQEAKICAgX19IQUxfVElNX0RJU0FCTEVfRE1BKGh0aW0sIFRJTV9ETUFfQ0MxKTsKIAogICAodm9pZClIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdKTsKKwogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtNTE0LDYgKzYyMCwxNSBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorICAKKyAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICAvKiBFbmFibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsIE4gKi8KICAgVElNX0NDeE5DaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4Tl9FTkFCTEUpOwogCkBAIC01MjEsOCArNjM2LDE1IEBACiAgIF9fSEFMX1RJTV9NT0VfRU5BQkxFKGh0aW0pOwogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICB7CisgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgeworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICB9CisgIH0KKyAgZWxzZQogICB7CiAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgfQpAQCAtNTU2LDYgKzY3OCw5IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtNTc4LDYgKzcwMywxNSBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgc3dpdGNoIChDaGFubmVsKQogICB7CiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgpAQCAtNjE2LDggKzc1MCwxNSBAQAogICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgeworICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIHsKKyAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgfQorICB9CisgIGVsc2UKICAgewogICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgIH0KQEAgLTY4Niw2ICs4MjcsOSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTcxMCwyNCArODU0LDI1IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCi0gIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKKyAgZWxzZSBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaWYgKCgodWludDMyX3QpcERhdGEgPT0gMFUpICYmIChMZW5ndGggPiAwVSkpCisgICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKICAgICB9CiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogbm90aGluZyB0byBkbyAgKi8KKyAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKICAgc3dpdGNoIChDaGFubmVsKQpAQCAtNzM1LDExICs4ODAsMTEgQEAKICAgICBjYXNlIFRJTV9DSEFOTkVMXzE6CiAgICAgewogICAgICAgLyogU2V0IHRoZSBETUEgY29tcGFyZSBjYWxsYmFja3MgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VDcGx0OworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZU5DcGx0OwogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0tPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VIYWxmQ3BsdDsKIAogICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3JDQ3hOIDsKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMSwgTGVuZ3RoKSAhPSBIQUxfT0spCkBAIC03NTQsMTEgKzg5OSwxMSBAQAogICAgIGNhc2UgVElNX0NIQU5ORUxfMjoKICAgICB7CiAgICAgICAvKiBTZXQgdGhlIERNQSBjb21wYXJlIGNhbGxiYWNrcyAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUNwbHQ7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXS0+WGZlckNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlTkNwbHQ7CiAgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXS0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUhhbGZDcGx0OwogCiAgICAgICAvKiBTZXQgdGhlIERNQSBlcnJvciBjYWxsYmFjayAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yIDsKKyAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvckNDeE4gOwogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IyLCBMZW5ndGgpICE9IEhBTF9PSykKQEAgLTc3MywxMSArOTE4LDExIEBACiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8zOgogICAgIHsKICAgICAgIC8qIFNldCB0aGUgRE1BIGNvbXBhcmUgY2FsbGJhY2tzICovCi0gICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXS0+WGZlckNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlQ3BsdDsKKyAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VOQ3BsdDsKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlSGFsZkNwbHQ7CiAKICAgICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCi0gICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3IgOworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yQ0N4TiA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjMsIExlbmd0aCkgIT0gSEFMX09LKQpAQCAtODAwLDggKzk0NSwxNSBAQAogICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgeworICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIHsKKyAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgfQorICB9CisgIGVsc2UKICAgewogICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgIH0KQEAgLTg2NSw4ICsxMDE3LDggQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAotICAvKiBDaGFuZ2UgdGhlIGh0aW0gc3RhdGUgKi8KLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CkBAIC05MjMsNiArMTA3NSwxNSBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgLyogRW5hYmxlIHRoZSBjb21wbGVtZW50YXJ5IFBXTSBvdXRwdXQgICovCiAgIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeE5fRU5BQkxFKTsKIApAQCAtOTMwLDggKzEwOTEsMTUgQEAKICAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7CiAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICB7CisgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgIH0KKyAgfQorICBlbHNlCiAgIHsKICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICB9CkBAIC05NjQsNiArMTEzMiw5IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtOTg2LDYgKzExNTcsMTUgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIHN3aXRjaCAoQ2hhbm5lbCkKICAgewogICAgIGNhc2UgVElNX0NIQU5ORUxfMToKQEAgLTEwMjMsOCArMTIwMywxNSBAQAogICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgeworICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIHsKKyAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgfQorICB9CisgIGVsc2UKICAgewogICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgIH0KQEAgLTEwOTQsNiArMTI4MSw5IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMTExOCwzNSArMTMwOCwzNyBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAotICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQorICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCisgIGVsc2UgaWYgKFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKICAgewotICAgIGlmICgoKHVpbnQzMl90KXBEYXRhID09IDBVKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CiAgICAgfQogICB9CiAgIGVsc2UKICAgewotICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CisKICAgc3dpdGNoIChDaGFubmVsKQogICB7CiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgogICAgIHsKICAgICAgIC8qIFNldCB0aGUgRE1BIGNvbXBhcmUgY2FsbGJhY2tzICovCi0gICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXS0+WGZlckNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlQ3BsdDsKKyAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VOQ3BsdDsKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlSGFsZkNwbHQ7CiAKICAgICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCi0gICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3IgOworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yQ0N4TiA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjEsIExlbmd0aCkgIT0gSEFMX09LKQpAQCAtMTE2MSwxMSArMTM1MywxMSBAQAogICAgIGNhc2UgVElNX0NIQU5ORUxfMjoKICAgICB7CiAgICAgICAvKiBTZXQgdGhlIERNQSBjb21wYXJlIGNhbGxiYWNrcyAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUNwbHQ7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXS0+WGZlckNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlTkNwbHQ7CiAgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXS0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUhhbGZDcGx0OwogCiAgICAgICAvKiBTZXQgdGhlIERNQSBlcnJvciBjYWxsYmFjayAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yIDsKKyAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvckNDeE4gOwogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IyLCBMZW5ndGgpICE9IEhBTF9PSykKQEAgLTExODAsMTEgKzEzNzIsMTEgQEAKICAgICBjYXNlIFRJTV9DSEFOTkVMXzM6CiAgICAgewogICAgICAgLyogU2V0IHRoZSBETUEgY29tcGFyZSBjYWxsYmFja3MgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VDcGx0OworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZU5DcGx0OwogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10tPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VIYWxmQ3BsdDsKIAogICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3JDQ3hOIDsKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMywgTGVuZ3RoKSAhPSBIQUxfT0spCkBAIC0xMjA3LDggKzEzOTksMTUgQEAKICAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7CiAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICB7CisgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgIH0KKyAgfQorICBlbHNlCiAgIHsKICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICB9CkBAIC0xMjcyLDggKzE0NzEsOCBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgaHRpbSBzdGF0ZSAqLwotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKQEAgLTEzMTMsMTEgKzE1MTIsMjcgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9PbmVQdWxzZU5fU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IE91dHB1dENoYW5uZWwpCiB7CisgIHVpbnQzMl90IGlucHV0X2NoYW5uZWwgPSAoT3V0cHV0Q2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKSA/IFRJTV9DSEFOTkVMXzIgOiBUSU1fQ0hBTk5FTF8xOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgaW5wdXRfY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBpbnB1dF9jaGFubmVsKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIG91dHB1dF9jaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgT3V0cHV0Q2hhbm5lbCk7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBPdXRwdXRDaGFubmVsKSk7CiAKLSAgLyogRW5hYmxlIHRoZSBjb21wbGVtZW50YXJ5IE9uZSBQdWxzZSBvdXRwdXQgKi8KKyAgLyogQ2hlY2sgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBpZiAoKG91dHB1dF9jaGFubmVsX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChpbnB1dF9jaGFubmVsX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgT3V0cHV0Q2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgaW5wdXRfY2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCisgIC8qIEVuYWJsZSB0aGUgY29tcGxlbWVudGFyeSBPbmUgUHVsc2Ugb3V0cHV0IGNoYW5uZWwgYW5kIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWwgKi8KICAgVElNX0NDeE5DaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBPdXRwdXRDaGFubmVsLCBUSU1fQ0N4Tl9FTkFCTEUpOworICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgaW5wdXRfY2hhbm5lbCwgVElNX0NDeF9FTkFCTEUpOwogCiAgIC8qIEVuYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KICAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7CkBAIC0xMzM4LDEyICsxNTUzLDE0IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfT25lUHVsc2VOX1N0b3AoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IE91dHB1dENoYW5uZWwpCiB7CisgIHVpbnQzMl90IGlucHV0X2NoYW5uZWwgPSAoT3V0cHV0Q2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKSA/IFRJTV9DSEFOTkVMXzIgOiBUSU1fQ0hBTk5FTF8xOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgT3V0cHV0Q2hhbm5lbCkpOwogCi0gIC8qIERpc2FibGUgdGhlIGNvbXBsZW1lbnRhcnkgT25lIFB1bHNlIG91dHB1dCAqLworICAvKiBEaXNhYmxlIHRoZSBjb21wbGVtZW50YXJ5IE9uZSBQdWxzZSBvdXRwdXQgY2hhbm5lbCBhbmQgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLwogICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIE91dHB1dENoYW5uZWwsIFRJTV9DQ3hOX0RJU0FCTEUpOworICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgaW5wdXRfY2hhbm5lbCwgVElNX0NDeF9ESVNBQkxFKTsKIAogICAvKiBEaXNhYmxlIHRoZSBNYWluIE91dHB1dCAqLwogICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CkBAIC0xMzUxLDYgKzE1NjgsMTAgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSAgY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgT3V0cHV0Q2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIGlucHV0X2NoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMTM2NywxNyArMTU4OCwzMyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X09uZVB1bHNlTl9TdGFydF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgT3V0cHV0Q2hhbm5lbCkKIHsKKyAgdWludDMyX3QgaW5wdXRfY2hhbm5lbCA9IChPdXRwdXRDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpID8gVElNX0NIQU5ORUxfMiA6IFRJTV9DSEFOTkVMXzE7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBpbnB1dF9jaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIGlucHV0X2NoYW5uZWwpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgb3V0cHV0X2NoYW5uZWxfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBPdXRwdXRDaGFubmVsKTsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIE91dHB1dENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIGlmICgob3V0cHV0X2NoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGlucHV0X2NoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBPdXRwdXRDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBpbnB1dF9jaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgLyogRW5hYmxlIHRoZSBUSU0gQ2FwdHVyZS9Db21wYXJlIDEgaW50ZXJydXB0ICovCiAgIF9fSEFMX1RJTV9FTkFCTEVfSVQoaHRpbSwgVElNX0lUX0NDMSk7CiAKICAgLyogRW5hYmxlIHRoZSBUSU0gQ2FwdHVyZS9Db21wYXJlIDIgaW50ZXJydXB0ICovCiAgIF9fSEFMX1RJTV9FTkFCTEVfSVQoaHRpbSwgVElNX0lUX0NDMik7CiAKLSAgLyogRW5hYmxlIHRoZSBjb21wbGVtZW50YXJ5IE9uZSBQdWxzZSBvdXRwdXQgKi8KKyAgLyogRW5hYmxlIHRoZSBjb21wbGVtZW50YXJ5IE9uZSBQdWxzZSBvdXRwdXQgY2hhbm5lbCBhbmQgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLwogICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIE91dHB1dENoYW5uZWwsIFRJTV9DQ3hOX0VOQUJMRSk7CisgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBpbnB1dF9jaGFubmVsLCBUSU1fQ0N4X0VOQUJMRSk7CiAKICAgLyogRW5hYmxlIHRoZSBNYWluIE91dHB1dCAqLwogICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKQEAgLTEzOTgsNiArMTYzNSw4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfT25lUHVsc2VOX1N0b3BfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IE91dHB1dENoYW5uZWwpCiB7CisgIHVpbnQzMl90IGlucHV0X2NoYW5uZWwgPSAoT3V0cHV0Q2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKSA/IFRJTV9DSEFOTkVMXzIgOiBUSU1fQ0hBTk5FTF8xOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgT3V0cHV0Q2hhbm5lbCkpOwogCkBAIC0xNDA3LDggKzE2NDYsOSBAQAogICAvKiBEaXNhYmxlIHRoZSBUSU0gQ2FwdHVyZS9Db21wYXJlIDIgaW50ZXJydXB0ICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFX0lUKGh0aW0sIFRJTV9JVF9DQzIpOwogCi0gIC8qIERpc2FibGUgdGhlIGNvbXBsZW1lbnRhcnkgT25lIFB1bHNlIG91dHB1dCAqLworICAvKiBEaXNhYmxlIHRoZSBjb21wbGVtZW50YXJ5IE9uZSBQdWxzZSBvdXRwdXQgY2hhbm5lbCBhbmQgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLwogICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIE91dHB1dENoYW5uZWwsIFRJTV9DQ3hOX0RJU0FCTEUpOworICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgaW5wdXRfY2hhbm5lbCwgVElNX0NDeF9ESVNBQkxFKTsKIAogICAvKiBEaXNhYmxlIHRoZSBNYWluIE91dHB1dCAqLwogICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CkBAIC0xNDE2LDYgKzE2NTYsMTAgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSAgY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgT3V0cHV0Q2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIGlucHV0X2NoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMTg1NiwxMCArMjEwMCwxMCBAQAogI2lmIGRlZmluZWQoREZTRE0xX0NoYW5uZWwwKQogICAgICAgaWYgKHNCcmVha0lucHV0Q29uZmlnLT5Tb3VyY2UgIT0gVElNX0JSRUFLSU5QVVRTT1VSQ0VfREZTRE0xKQogI2VuZGlmIC8qIERGU0RNMV9DaGFubmVsMCAqLwotICAgICAgewotICAgICAgICB0bXBvcnggJj0gfmJraW5fcG9sYXJpdHlfbWFzazsKLSAgICAgICAgdG1wb3J4IHw9IChzQnJlYWtJbnB1dENvbmZpZy0+UG9sYXJpdHkgPDwgYmtpbl9wb2xhcml0eV9iaXRwb3MpICYgYmtpbl9wb2xhcml0eV9tYXNrOwotICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgdG1wb3J4ICY9IH5ia2luX3BvbGFyaXR5X21hc2s7CisgICAgICAgICAgdG1wb3J4IHw9IChzQnJlYWtJbnB1dENvbmZpZy0+UG9sYXJpdHkgPDwgYmtpbl9wb2xhcml0eV9iaXRwb3MpICYgYmtpbl9wb2xhcml0eV9tYXNrOworICAgICAgICB9CiAKICAgICAgIC8qIFNldCBUSU14X09SMiAqLwogICAgICAgaHRpbS0+SW5zdGFuY2UtPk9SMiA9IHRtcG9yeDsKQEAgLTE4NzgsMTAgKzIxMjIsMTAgQEAKICNpZiBkZWZpbmVkKERGU0RNMV9DaGFubmVsMCkKICAgICAgIGlmIChzQnJlYWtJbnB1dENvbmZpZy0+U291cmNlICE9IFRJTV9CUkVBS0lOUFVUU09VUkNFX0RGU0RNMSkKICNlbmRpZiAvKiBERlNETTFfQ2hhbm5lbDAgKi8KLSAgICAgIHsKLSAgICAgICAgdG1wb3J4ICY9IH5ia2luX3BvbGFyaXR5X21hc2s7Ci0gICAgICAgIHRtcG9yeCB8PSAoc0JyZWFrSW5wdXRDb25maWctPlBvbGFyaXR5IDw8IGJraW5fcG9sYXJpdHlfYml0cG9zKSAmIGJraW5fcG9sYXJpdHlfbWFzazsKLSAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgIHRtcG9yeCAmPSB+Ymtpbl9wb2xhcml0eV9tYXNrOworICAgICAgICAgIHRtcG9yeCB8PSAoc0JyZWFrSW5wdXRDb25maWctPlBvbGFyaXR5IDw8IGJraW5fcG9sYXJpdHlfYml0cG9zKSAmIGJraW5fcG9sYXJpdHlfbWFzazsKKyAgICAgICAgfQogCiAgICAgICAvKiBTZXQgVElNeF9PUjMgKi8KICAgICAgIGh0aW0tPkluc3RhbmNlLT5PUjMgPSB0bXBvcng7CkBAIC0yMDkyLDcgKzIzMzYsNyBAQAogICAqICAgICAgICAgICAgQGFyZyBUSU1fVElNMTZfVEkxX0xTSTogICAgICAgICAgICAgICBUSU0xNiBUSTEgaXMgY29ubmVjdGVkIHRvIExTSQogICAqICAgICAgICAgICAgQGFyZyBUSU1fVElNMTZfVEkxX0xTRTogICAgICAgICAgICAgICBUSU0xNiBUSTEgaXMgY29ubmVjdGVkIHRvIExTRQogICAqICAgICAgICAgICAgQGFyZyBUSU1fVElNMTZfVEkxX1JUQzogICAgICAgICAgICAgICBUSU0xNiBUSTEgaXMgY29ubmVjdGVkIHRvIFJUQyB3YWtldXAgaW50ZXJydXB0Ci0gICogICAgICAgICAgICBAYXJnIFRJTV9USU0xNl9USTFfTVNJOiAgICAgICAgICAgICAgIFRJTTE2IFRJMSBpcyBjb25uZWN0ZWQgdG8gTVNJICAoY29udHJhaW50czogTVNJIGNsb2NrIDwgMS80IFRJTSBBUEIgY2xvY2spCisgICogICAgICAgICAgICBAYXJnIFRJTV9USU0xNl9USTFfTVNJOiAgICAgICAgICAgICAgIFRJTTE2IFRJMSBpcyBjb25uZWN0ZWQgdG8gTVNJICAoY29uc3RyYWludHM6IE1TSSBjbG9jayA8IDEvNCBUSU0gQVBCIGNsb2NrKQogICAqICAgICAgICAgICAgQGFyZyBUSU1fVElNMTZfVEkxX0hTRV8zMjogICAgICAgICAgICBUSU0xNiBUSTEgaXMgY29ubmVjdGVkIHRvIEhTRSBkaXYgMzIgIChub3RlIHRoYXQgSFNFIGRpdiAzMiBtdXN0IGJlIHNlbGVjdGVkIGFzIFJUQyBjbG9jayBzb3VyY2UpCiAgICogICAgICAgICAgICBAYXJnIFRJTV9USU0xNl9USTFfTUNPOiAgICAgICAgICAgICAgIFRJTTE2IFRJMSBpcyBjb25uZWN0ZWQgdG8gTUNPCiAgICoKQEAgLTIxMDMsNyArMjM0Nyw3IEBACiAgICogICAgICAgICAgICBAYXJnIFRJTV9USU0xNl9USTFfTFNJOiAgICAgICAgICAgICAgIFRJTTE2IFRJMSBpcyBjb25uZWN0ZWQgdG8gTFNJCiAgICogICAgICAgICAgICBAYXJnIFRJTV9USU0xNl9USTFfTFNFOiAgICAgICAgICAgICAgIFRJTTE2IFRJMSBpcyBjb25uZWN0ZWQgdG8gTFNFCiAgICogICAgICAgICAgICBAYXJnIFRJTV9USU0xNl9USTFfUlRDOiAgICAgICAgICAgICAgIFRJTTE2IFRJMSBpcyBjb25uZWN0ZWQgdG8gUlRDIHdha2V1cCBpbnRlcnJ1cHQKLSAgKiAgICAgICAgICAgIEBhcmcgVElNX1RJTTE2X1RJMV9NU0k6ICAgICAgICAgICAgICAgVElNMTYgVEkxIGlzIGNvbm5lY3RlZCB0byBNU0kgIChjb250cmFpbnRzOiBNU0kgY2xvY2sgPCAxLzQgVElNIEFQQiBjbG9jaykKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX1RJTTE2X1RJMV9NU0k6ICAgICAgICAgICAgICAgVElNMTYgVEkxIGlzIGNvbm5lY3RlZCB0byBNU0kgIChjb25zdHJhaW50czogTVNJIGNsb2NrIDwgMS80IFRJTSBBUEIgY2xvY2spCiAgICogICAgICAgICAgICBAYXJnIFRJTV9USU0xNl9USTFfSFNFXzMyOiAgICAgICAgICAgIFRJTTE2IFRJMSBpcyBjb25uZWN0ZWQgdG8gSFNFIGRpdiAzMiAgKG5vdGUgdGhhdCBIU0UgZGl2IDMyIG11c3QgYmUgc2VsZWN0ZWQgYXMgUlRDIGNsb2NrIHNvdXJjZSkKICAgKiAgICAgICAgICAgIEBhcmcgVElNX1RJTTE2X1RJMV9NQ086ICAgICAgICAgICAgICAgVElNMTYgVEkxIGlzIGNvbm5lY3RlZCB0byBNQ08KICAgKgpAQCAtMjExMSw3ICsyMzU1LDcgQEAKICAgQGlmIFNUTTMyTDQ4Nnh4CiAgICogICAgICAgICBGb3IgVElNMTcsIHRoZSBwYXJhbWV0ZXIgY2FuIGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIFRJTV9USU0xN19USTFfR1BJTzogICAgICAgICAgICAgIFRJTTE3IFRJMSBpcyBjb25uZWN0ZWQgdG8gR1BJTwotICAqICAgICAgICAgICAgQGFyZyBUSU1fVElNMTdfVEkxX01TSTogICAgICAgICAgICAgICBUSU0xNyBUSTEgaXMgY29ubmVjdGVkIHRvIE1TSSAgKGNvbnRyYWludHM6IE1TSSBjbG9jayA8IDEvNCBUSU0gQVBCIGNsb2NrKQorICAqICAgICAgICAgICAgQGFyZyBUSU1fVElNMTdfVEkxX01TSTogICAgICAgICAgICAgICBUSU0xNyBUSTEgaXMgY29ubmVjdGVkIHRvIE1TSSAgKGNvbnN0cmFpbnRzOiBNU0kgY2xvY2sgPCAxLzQgVElNIEFQQiBjbG9jaykKICAgKiAgICAgICAgICAgIEBhcmcgVElNX1RJTTE3X1RJMV9IU0VfMzI6ICAgICAgICAgICAgVElNMTcgVEkxIGlzIGNvbm5lY3RlZCB0byBIU0UgZGl2IDMyCiAgICogICAgICAgICAgICBAYXJnIFRJTV9USU0xN19USTFfTUNPOiAgICAgICAgICAgICAgIFRJTTE3IFRJMSBpcyBjb25uZWN0ZWQgdG8gTUNPCiAgIEBlbmRpZgpAQCAtMjEyMCw4ICsyMzY0LDggQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9SZW1hcENvbmZpZyhUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgUmVtYXApCiB7Ci0gIHVpbnQzMl90IHRtcG9yMSA9IDBVOwotICB1aW50MzJfdCB0bXBvcjIgPSAwVTsKKyAgdWludDMyX3QgdG1wb3IxOworICB1aW50MzJfdCB0bXBvcjI7CiAKICAgX19IQUxfTE9DSyhodGltKTsKIApAQCAtMjI5Niw2ICsyNTQwLDI3IEBACiB9CiAKIC8qKgorICAqIEBicmllZiAgUmV0dXJuIGFjdHVhbCBzdGF0ZSBvZiB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbC4KKyAgKiBAcGFyYW0gIGh0aW0gVElNIGhhbmRsZQorICAqIEBwYXJhbSAgQ2hhbm5lbE4gVElNIENvbXBsZW1lbnRhcnkgY2hhbm5lbAorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzE6IFRJTSBDaGFubmVsIDEKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMjogVElNIENoYW5uZWwgMgorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8zOiBUSU0gQ2hhbm5lbCAzCisgICogQHJldHZhbCBUSU0gQ29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlCisgICovCitIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgSEFMX1RJTUV4X0dldENoYW5uZWxOU3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sICB1aW50MzJfdCBDaGFubmVsTikKK3sKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfc3RhdGU7CisgIAorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLworICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWxOKSk7CisKKyAgY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWxOKTsKKyAgICAKKyAgcmV0dXJuIGNoYW5uZWxfc3RhdGU7Cit9CisvKioKICAgKiBAfQogICAqLwogCkBAIC0yMzQ4LDYgKzI2MTMsMTAzIEBACiAKIAogLyoqCisgICogQGJyaWVmICBUSU0gRE1BIERlbGF5IFB1bHNlIGNvbXBsZXRlIGNhbGxiYWNrIChjb21wbGVtZW50YXJ5IGNoYW5uZWwpLgorICAqIEBwYXJhbSAgaGRtYSBwb2ludGVyIHRvIERNQSBoYW5kbGUuCisgICogQHJldHZhbCBOb25lCisgICovCitzdGF0aWMgdm9pZCBUSU1fRE1BRGVsYXlQdWxzZU5DcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQoreworICBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSA9IChUSU1fSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OworCisgIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdKQorICB7CisgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMTsKKyAgICAKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzI7CisgICAgCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgfQorICB9CisgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10pCisgIHsKKyAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8zOworICAgIAorICAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8zLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIH0KKyAgfQorICBlbHNlIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdKQorICB7CisgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfNDsKKyAgICAKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfNCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogbm90aGluZyB0byBkbyAqLworICB9CisKKyNpZiAoVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgIGh0aW0tPlBXTV9QdWxzZUZpbmlzaGVkQ2FsbGJhY2soaHRpbSk7CisjZWxzZQorICBIQUxfVElNX1BXTV9QdWxzZUZpbmlzaGVkQ2FsbGJhY2soaHRpbSk7CisjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCisKKyAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfQ0xFQVJFRDsKK30KKworLyoqCisgICogQGJyaWVmICBUSU0gRE1BIGVycm9yIGNhbGxiYWNrIChjb21wbGVtZW50YXJ5IGNoYW5uZWwpCisgICogQHBhcmFtICBoZG1hIHBvaW50ZXIgdG8gRE1BIGhhbmRsZS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3ZvaWQgVElNX0RNQUVycm9yQ0N4TihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKK3sKKyAgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0gPSAoVElNX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKKworICBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzE7CisgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgfQorICBlbHNlIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdKQorICB7CisgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMjsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CisgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10pCisgIHsKKyAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8zOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzMsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogbm90aGluZyB0byBkbyAqLworICB9CisgIAorI2lmIChVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyAgaHRpbS0+RXJyb3JDYWxsYmFjayhodGltKTsKKyNlbHNlCisgIEhBTF9USU1fRXJyb3JDYWxsYmFjayhodGltKTsKKyNlbmRpZiAvKiBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgCisgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMX0NMRUFSRUQ7Cit9CisKKy8qKgogICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgVElNIENhcHR1cmUgQ29tcGFyZSBDaGFubmVsIHhOLgogICAqIEBwYXJhbSAgVElNeCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsCiAgICogQHBhcmFtICBDaGFubmVsIHNwZWNpZmllcyB0aGUgVElNIENoYW5uZWwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX3VhcnQuYyBiL1NyYy9zdG0zMmw0eHhfaGFsX3VhcnQuYwppbmRleCA1NDEyMjcyLi5mZTNiNDQwIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF91YXJ0LmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfdWFydC5jCkBAIC0yMDAsNiArMjAwLDEwIEBACiAKIC8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoVVNBUlRfUFJFU0NfUFJFU0NBTEVSKQorY29uc3QgdWludDE2X3QgVUFSVFByZXNjVGFibGVbMTJdID0gezFVLCAyVSwgNFUsIDZVLCA4VSwgMTBVLCAxMlUsIDE2VSwgMzJVLCA2NFUsIDEyOFUsIDI1NlV9OworCisjZW5kaWYgLyogVVNBUlRfUFJFU0NfUFJFU0NBTEVSICovCiAvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBhZGR0b2dyb3VwIFVBUlRfUHJpdmF0ZV9GdW5jdGlvbnMKICAgKiBAewpAQCAtMjMwMyw3ICsyMzA3LDcgQEAKICNlbHNlCiAgIGlmICgoZXJyb3JmbGFncyAhPSAwVSkKICAgICAgICYmICgoKGNyM2l0cyAmIFVTQVJUX0NSM19FSUUpICE9IDBVKQotICAgICAgICAgIHx8ICgoY3IxaXRzICYgKFVTQVJUX0NSMV9SWE5FSUUgfCBVU0FSVF9DUjFfUEVJRSkpICE9IDBVKSkpCisgICAgICAgICAgfHwgKChjcjFpdHMgJiAoVVNBUlRfQ1IxX1JYTkVJRSB8IFVTQVJUX0NSMV9QRUlFIHwgVVNBUlRfQ1IxX1JUT0lFKSkgIT0gMFUpKSkKICNlbmRpZiAvKiBVU0FSVF9DUjFfRklGT0VOICovCiAgIHsKICAgICAvKiBVQVJUIHBhcml0eSBlcnJvciBpbnRlcnJ1cHQgb2NjdXJyZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yOTc4LDkgKzI5ODIsMTEgQEAKICAgdWludDMyX3QgdG1wcmVnOwogICB1aW50MTZfdCBicnJ0ZW1wOwogICBVQVJUX0Nsb2NrU291cmNlVHlwZURlZiBjbG9ja3NvdXJjZTsKLSAgdWludDMyX3QgdXNhcnRkaXYgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAwVTsKKyAgdWludDMyX3QgdXNhcnRkaXY7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHJldCAgICAgICAgICAgICAgID0gSEFMX09LOwotICB1aW50MzJfdCBscHVhcnRfa2VyX2NrX3ByZXMgICAgICAgICA9IDB4MDAwMDAwMDBVOworI2lmIGRlZmluZWQoVVNBUlRfUFJFU0NfUFJFU0NBTEVSKQorICB1aW50MzJfdCBscHVhcnRfa2VyX2NrX3ByZXM7CisjZW5kaWYgLyogVVNBUlRfUFJFU0NfUFJFU0NBTEVSICovCiAgIHVpbnQzMl90IHBjbGs7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KQEAgLTMwNTMsNDIgKzMwNTksMzEgQEAKICAgICBzd2l0Y2ggKGNsb2Nrc291cmNlKQogICAgIHsKICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9QQ0xLMToKLSNpZiBkZWZpbmVkKFVTQVJUX1BSRVNDX1BSRVNDQUxFUikKLSAgICAgICAgbHB1YXJ0X2tlcl9ja19wcmVzID0gKEhBTF9SQ0NfR2V0UENMSzFGcmVxKCkgLyBVQVJUX0dFVF9ESVZfRkFDVE9SKGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7Ci0jZWxzZQotICAgICAgICBscHVhcnRfa2VyX2NrX3ByZXMgPSBIQUxfUkNDX0dldFBDTEsxRnJlcSgpOwotI2VuZGlmIC8qIFVTQVJUX1BSRVNDX1BSRVNDQUxFUiAqLworICAgICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfSFNJOgotI2lmIGRlZmluZWQoVVNBUlRfUFJFU0NfUFJFU0NBTEVSKQotICAgICAgICBscHVhcnRfa2VyX2NrX3ByZXMgPSAoKHVpbnQzMl90KUhTSV9WQUxVRSAvIFVBUlRfR0VUX0RJVl9GQUNUT1IoaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKLSNlbHNlCi0gICAgICAgIGxwdWFydF9rZXJfY2tfcHJlcyA9ICh1aW50MzJfdClIU0lfVkFMVUU7Ci0jZW5kaWYgLyogVVNBUlRfUFJFU0NfUFJFU0NBTEVSICovCisgICAgICAgIHBjbGsgPSAodWludDMyX3QpIEhTSV9WQUxVRTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfU1lTQ0xLOgotI2lmIGRlZmluZWQoVVNBUlRfUFJFU0NfUFJFU0NBTEVSKQotICAgICAgICBscHVhcnRfa2VyX2NrX3ByZXMgPSAoSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKSAvIFVBUlRfR0VUX0RJVl9GQUNUT1IoaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKLSNlbHNlCi0gICAgICAgIGxwdWFydF9rZXJfY2tfcHJlcyA9IEhBTF9SQ0NfR2V0U3lzQ2xvY2tGcmVxKCk7Ci0jZW5kaWYgLyogVVNBUlRfUFJFU0NfUFJFU0NBTEVSICovCisgICAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFN5c0Nsb2NrRnJlcSgpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9MU0U6Ci0jaWYgZGVmaW5lZChVU0FSVF9QUkVTQ19QUkVTQ0FMRVIpCi0gICAgICAgIGxwdWFydF9rZXJfY2tfcHJlcyA9ICgodWludDMyX3QpTFNFX1ZBTFVFIC8gVUFSVF9HRVRfRElWX0ZBQ1RPUihodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOwotI2Vsc2UKLSAgICAgICAgbHB1YXJ0X2tlcl9ja19wcmVzID0gKHVpbnQzMl90KUxTRV9WQUxVRTsKLSNlbmRpZiAvKiBVU0FSVF9QUkVTQ19QUkVTQ0FMRVIgKi8KKyAgICAgICAgcGNsayA9ICh1aW50MzJfdCkgTFNFX1ZBTFVFOwogICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6CisgICAgICAgIHBjbGsgPSAwVTsKICAgICAgICAgcmV0ID0gSEFMX0VSUk9SOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICAvKiBpZiBwcm9wZXIgY2xvY2sgc291cmNlIHJlcG9ydGVkICovCi0gICAgaWYgKGxwdWFydF9rZXJfY2tfcHJlcyAhPSAwVSkKKyAgICAvKiBJZiBwcm9wZXIgY2xvY2sgc291cmNlIHJlcG9ydGVkICovCisgICAgaWYgKHBjbGsgIT0gMFUpCiAgICAgewotICAgICAgLyogZW5zdXJlIHRoYXQgRnJlcXVlbmN5IGNsb2NrIGlzIGluIHRoZSByYW5nZSBbMyAqIGJhdWRyYXRlLCA0MDk2ICogYmF1ZHJhdGVdICovCisjaWYgZGVmaW5lZChVU0FSVF9QUkVTQ19QUkVTQ0FMRVIpCisgICAgICAvKiBDb21wdXRlIGNsb2NrIGFmdGVyIFByZXNjYWxlciAqLworICAgICAgbHB1YXJ0X2tlcl9ja19wcmVzID0gKHBjbGsgLyBVQVJUUHJlc2NUYWJsZVtodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcl0pOworCisgICAgICAvKiBFbnN1cmUgdGhhdCBGcmVxdWVuY3kgY2xvY2sgaXMgaW4gdGhlIHJhbmdlIFszICogYmF1ZHJhdGUsIDQwOTYgKiBiYXVkcmF0ZV0gKi8KICAgICAgIGlmICgobHB1YXJ0X2tlcl9ja19wcmVzIDwgKDNVICogaHVhcnQtPkluaXQuQmF1ZFJhdGUpKSB8fAogICAgICAgICAgIChscHVhcnRfa2VyX2NrX3ByZXMgPiAoNDA5NlUgKiBodWFydC0+SW5pdC5CYXVkUmF0ZSkpKQogICAgICAgewpAQCAtMzA5Niw0NCArMzA5MSw5IEBACiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIHN3aXRjaCAoY2xvY2tzb3VyY2UpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfUENMSzE6Ci0gICAgICAgICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKTsKLSNpZiBkZWZpbmVkKFVTQVJUX1BSRVNDX1BSRVNDQUxFUikKLSAgICAgICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQzMl90KShVQVJUX0RJVl9MUFVBUlQocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7Ci0jZWxzZQotICAgICAgICAgICAgdXNhcnRkaXYgPSAodWludDMyX3QpKFVBUlRfRElWX0xQVUFSVChwY2xrLCBodWFydC0+SW5pdC5CYXVkUmF0ZSkpOwotI2VuZGlmIC8qIFVTQVJUX1BSRVNDX1BSRVNDQUxFUiAqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX0hTSToKLSNpZiBkZWZpbmVkKFVTQVJUX1BSRVNDX1BSRVNDQUxFUikKLSAgICAgICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQzMl90KShVQVJUX0RJVl9MUFVBUlQoSFNJX1ZBTFVFLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKLSNlbHNlCi0gICAgICAgICAgICB1c2FydGRpdiA9ICh1aW50MzJfdCkoVUFSVF9ESVZfTFBVQVJUKEhTSV9WQUxVRSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUpKTsKLSNlbmRpZiAvKiBVU0FSVF9QUkVTQ19QUkVTQ0FMRVIgKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9TWVNDTEs6Ci0gICAgICAgICAgICBwY2xrID0gSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKTsKLSNpZiBkZWZpbmVkKFVTQVJUX1BSRVNDX1BSRVNDQUxFUikKLSAgICAgICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQzMl90KShVQVJUX0RJVl9MUFVBUlQocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7Ci0jZWxzZQotICAgICAgICAgICAgdXNhcnRkaXYgPSAodWludDMyX3QpKFVBUlRfRElWX0xQVUFSVChwY2xrLCBodWFydC0+SW5pdC5CYXVkUmF0ZSkpOwotI2VuZGlmIC8qIFVTQVJUX1BSRVNDX1BSRVNDQUxFUiAqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX0xTRToKLSNpZiBkZWZpbmVkKFVTQVJUX1BSRVNDX1BSRVNDQUxFUikKLSAgICAgICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQzMl90KShVQVJUX0RJVl9MUFVBUlQoTFNFX1ZBTFVFLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKLSNlbHNlCi0gICAgICAgICAgICB1c2FydGRpdiA9ICh1aW50MzJfdCkoVUFSVF9ESVZfTFBVQVJUKExTRV9WQUxVRSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUpKTsKLSNlbmRpZiAvKiBVU0FSVF9QUkVTQ19QUkVTQ0FMRVIgKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXQgPSBIQUxfRVJST1I7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIEl0IGlzIGZvcmJpZGRlbiB0byB3cml0ZSB2YWx1ZXMgbG93ZXIgdGhhbiAweDMwMCBpbiB0aGUgTFBVQVJUX0JSUiByZWdpc3RlciAqLworICAgICAgICAvKiBDaGVjayBjb21wdXRlZCBVc2FydERpdiB2YWx1ZSBpcyBpbiBhbGxvY2F0ZWQgcmFuZ2UKKyAgICAgICAgICAgKGl0IGlzIGZvcmJpZGRlbiB0byB3cml0ZSB2YWx1ZXMgbG93ZXIgdGhhbiAweDMwMCBpbiB0aGUgTFBVQVJUX0JSUiByZWdpc3RlcikgKi8KKyAgICAgICAgdXNhcnRkaXYgPSAodWludDMyX3QpKFVBUlRfRElWX0xQVUFSVChwY2xrLCAodWludDY0X3QpaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CiAgICAgICAgIGlmICgodXNhcnRkaXYgPj0gTFBVQVJUX0JSUl9NSU4pICYmICh1c2FydGRpdiA8PSBMUFVBUlRfQlJSX01BWCkpCiAgICAgICAgIHsKICAgICAgICAgICBodWFydC0+SW5zdGFuY2UtPkJSUiA9IHVzYXJ0ZGl2OwpAQCAtMzE0Miw4ICszMTAyLDI5IEBACiAgICAgICAgIHsKICAgICAgICAgICByZXQgPSBIQUxfRVJST1I7CiAgICAgICAgIH0KLSAgICAgIH0gLyogICBpZiAoIChscHVhcnRfa2VyX2NrX3ByZXMgPCAoMyAqIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKSApIHx8IChscHVhcnRfa2VyX2NrX3ByZXMgPiAoNDA5NiAqIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKSApKSAqLwotICAgIH0gLyogaWYgKGxwdWFydF9rZXJfY2tfcHJlcyAhPSAwKSAqLworICAgICAgfSAvKiBpZiAoIChscHVhcnRfa2VyX2NrX3ByZXMgPCAoMyAqIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKSApIHx8IChscHVhcnRfa2VyX2NrX3ByZXMgPiAoNDA5NiAqIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKSApKSAqLworI2Vsc2UKKyAgICAgIC8qIE5vIFByZXNjYWxlciBhcHBsaWNhYmxlICovCisgICAgICAvKiBFbnN1cmUgdGhhdCBGcmVxdWVuY3kgY2xvY2sgaXMgaW4gdGhlIHJhbmdlIFszICogYmF1ZHJhdGUsIDQwOTYgKiBiYXVkcmF0ZV0gKi8KKyAgICAgIGlmICgocGNsayA8ICgzVSAqIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKSkgfHwKKyAgICAgICAgICAocGNsayA+ICg0MDk2VSAqIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKSkpCisgICAgICB7CisgICAgICAgIHJldCA9IEhBTF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdXNhcnRkaXYgPSAodWludDMyX3QpKFVBUlRfRElWX0xQVUFSVChwY2xrLCAodWludDY0X3QpaHVhcnQtPkluaXQuQmF1ZFJhdGUpKTsKKyAgICAgICAgaWYgKCh1c2FydGRpdiA+PSBMUFVBUlRfQlJSX01JTikgJiYgKHVzYXJ0ZGl2IDw9IExQVUFSVF9CUlJfTUFYKSkKKyAgICAgICAgeworICAgICAgICAgIGh1YXJ0LT5JbnN0YW5jZS0+QlJSID0gdXNhcnRkaXY7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgcmV0ID0gSEFMX0VSUk9SOworICAgICAgICB9CisgICAgICB9IC8qIGlmICggKHBjbGsgPCAoMyAqIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKSApIHx8IChwY2xrID4gKDQwOTYgKiBodWFydC0+SW5pdC5CYXVkUmF0ZSkgKSkgKi8KKyNlbmRpZiAvKiBVU0FSVF9QUkVTQ19QUkVTQ0FMRVIgKi8KKyAgICB9IC8qIGlmIChwY2xrICE9IDApICovCiAgIH0KICAgLyogQ2hlY2sgVUFSVCBPdmVyIFNhbXBsaW5nIHRvIHNldCBCYXVkIFJhdGUgUmVnaXN0ZXIgKi8KICAgZWxzZSBpZiAoaHVhcnQtPkluaXQuT3ZlclNhbXBsaW5nID09IFVBUlRfT1ZFUlNBTVBMSU5HXzgpCkBAIC0zMTUyLDU3ICszMTMzLDQzIEBACiAgICAgewogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX1BDTEsxOgogICAgICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKTsKLSNpZiBkZWZpbmVkKFVTQVJUX1BSRVNDX1BSRVNDQUxFUikKLSAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HOChwY2xrLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKLSNlbHNlCi0gICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzgocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUpKTsKLSNlbmRpZiAvKiBVU0FSVF9QUkVTQ19QUkVTQ0FMRVIgKi8KICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfUENMSzI6CiAgICAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFBDTEsyRnJlcSgpOwotI2lmIGRlZmluZWQoVVNBUlRfUFJFU0NfUFJFU0NBTEVSKQotICAgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkc4KHBjbGssIGh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOwotI2Vsc2UKLSAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HOChwY2xrLCBodWFydC0+SW5pdC5CYXVkUmF0ZSkpOwotI2VuZGlmIC8qIFVTQVJUX1BSRVNDX1BSRVNDQUxFUiAqLwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9IU0k6Ci0jaWYgZGVmaW5lZChVU0FSVF9QUkVTQ19QUkVTQ0FMRVIpCi0gICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzgoSFNJX1ZBTFVFLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKLSNlbHNlCi0gICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzgoSFNJX1ZBTFVFLCBodWFydC0+SW5pdC5CYXVkUmF0ZSkpOwotI2VuZGlmIC8qIFVTQVJUX1BSRVNDX1BSRVNDQUxFUiAqLworICAgICAgICBwY2xrID0gKHVpbnQzMl90KSBIU0lfVkFMVUU7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX1NZU0NMSzoKICAgICAgICAgcGNsayA9IEhBTF9SQ0NfR2V0U3lzQ2xvY2tGcmVxKCk7Ci0jaWYgZGVmaW5lZChVU0FSVF9QUkVTQ19QUkVTQ0FMRVIpCi0gICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzgocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7Ci0jZWxzZQotICAgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkc4KHBjbGssIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKSk7Ci0jZW5kaWYgLyogVVNBUlRfUFJFU0NfUFJFU0NBTEVSICovCiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX0xTRToKLSNpZiBkZWZpbmVkKFVTQVJUX1BSRVNDX1BSRVNDQUxFUikKLSAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HOCgodWludDMyX3QpTFNFX1ZBTFVFLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKLSNlbHNlCi0gICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzgoTFNFX1ZBTFVFLCBodWFydC0+SW5pdC5CYXVkUmF0ZSkpOwotI2VuZGlmIC8qIFVTQVJUX1BSRVNDX1BSRVNDQUxFUiAqLworICAgICAgICBwY2xrID0gKHVpbnQzMl90KSBMU0VfVkFMVUU7CiAgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKKyAgICAgICAgcGNsayA9IDBVOwogICAgICAgICByZXQgPSBIQUxfRVJST1I7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIC8qIFVTQVJURElWIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDBkMTYgKi8KLSAgICBpZiAoKHVzYXJ0ZGl2ID49IFVBUlRfQlJSX01JTikgJiYgKHVzYXJ0ZGl2IDw9IFVBUlRfQlJSX01BWCkpCisgICAgaWYgKHBjbGsgIT0gMFUpCiAgICAgewotICAgICAgYnJydGVtcCA9ICh1aW50MTZfdCkodXNhcnRkaXYgJiAweEZGRjBVKTsKLSAgICAgIGJycnRlbXAgfD0gKHVpbnQxNl90KSgodXNhcnRkaXYgJiAodWludDE2X3QpMHgwMDBGVSkgPj4gMVUpOwotICAgICAgaHVhcnQtPkluc3RhbmNlLT5CUlIgPSBicnJ0ZW1wOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0ID0gSEFMX0VSUk9SOworI2lmIGRlZmluZWQoVVNBUlRfUFJFU0NfUFJFU0NBTEVSKQorICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HOChwY2xrLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKKyNlbHNlCisgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkc4KHBjbGssIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKSk7CisjZW5kaWYgLyogVVNBUlRfUFJFU0NfUFJFU0NBTEVSICovCisgICAgICBpZiAoKHVzYXJ0ZGl2ID49IFVBUlRfQlJSX01JTikgJiYgKHVzYXJ0ZGl2IDw9IFVBUlRfQlJSX01BWCkpCisgICAgICB7CisgICAgICAgIGJycnRlbXAgPSAodWludDE2X3QpKHVzYXJ0ZGl2ICYgMHhGRkYwVSk7CisgICAgICAgIGJycnRlbXAgfD0gKHVpbnQxNl90KSgodXNhcnRkaXYgJiAodWludDE2X3QpMHgwMDBGVSkgPj4gMVUpOworICAgICAgICBodWFydC0+SW5zdGFuY2UtPkJSUiA9IGJycnRlbXA7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHJldCA9IEhBTF9FUlJPUjsKKyAgICAgIH0KICAgICB9CiAgIH0KICAgZWxzZQpAQCAtMzIxMSw1NSArMzE3OCw0MSBAQAogICAgIHsKICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9QQ0xLMToKICAgICAgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzFGcmVxKCk7Ci0jaWYgZGVmaW5lZChVU0FSVF9QUkVTQ19QUkVTQ0FMRVIpCi0gICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzE2KHBjbGssIGh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOwotI2Vsc2UKLSAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HMTYocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUpKTsKLSNlbmRpZiAvKiBVU0FSVF9QUkVTQ19QUkVTQ0FMRVIgKi8KICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfUENMSzI6CiAgICAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFBDTEsyRnJlcSgpOwotI2lmIGRlZmluZWQoVVNBUlRfUFJFU0NfUFJFU0NBTEVSKQotICAgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkcxNihwY2xrLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKLSNlbHNlCi0gICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzE2KHBjbGssIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKSk7Ci0jZW5kaWYgLyogVVNBUlRfUFJFU0NfUFJFU0NBTEVSICovCiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX0hTSToKLSNpZiBkZWZpbmVkKFVTQVJUX1BSRVNDX1BSRVNDQUxFUikKLSAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HMTYoSFNJX1ZBTFVFLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKLSNlbHNlCi0gICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzE2KEhTSV9WQUxVRSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUpKTsKLSNlbmRpZiAvKiBVU0FSVF9QUkVTQ19QUkVTQ0FMRVIgKi8KKyAgICAgICAgcGNsayA9ICh1aW50MzJfdCkgSFNJX1ZBTFVFOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9TWVNDTEs6CiAgICAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFN5c0Nsb2NrRnJlcSgpOwotI2lmIGRlZmluZWQoVVNBUlRfUFJFU0NfUFJFU0NBTEVSKQotICAgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkcxNihwY2xrLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKLSNlbHNlCi0gICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzE2KHBjbGssIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKSk7Ci0jZW5kaWYgLyogVVNBUlRfUFJFU0NfUFJFU0NBTEVSICovCiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX0xTRToKLSNpZiBkZWZpbmVkKFVTQVJUX1BSRVNDX1BSRVNDQUxFUikKLSAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HMTYoKHVpbnQzMl90KUxTRV9WQUxVRSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7Ci0jZWxzZQotICAgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkcxNihMU0VfVkFMVUUsIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKSk7Ci0jZW5kaWYgLyogVVNBUlRfUFJFU0NfUFJFU0NBTEVSICovCisgICAgICAgIHBjbGsgPSAodWludDMyX3QpIExTRV9WQUxVRTsKICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgorICAgICAgICBwY2xrID0gMFU7CiAgICAgICAgIHJldCA9IEhBTF9FUlJPUjsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgLyogVVNBUlRESVYgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMGQxNiAqLwotICAgIGlmICgodXNhcnRkaXYgPj0gVUFSVF9CUlJfTUlOKSAmJiAodXNhcnRkaXYgPD0gVUFSVF9CUlJfTUFYKSkKKyAgICBpZiAocGNsayAhPSAwVSkKICAgICB7Ci0gICAgICBodWFydC0+SW5zdGFuY2UtPkJSUiA9IHVzYXJ0ZGl2OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0ID0gSEFMX0VSUk9SOworICAgICAgLyogVVNBUlRESVYgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMGQxNiAqLworI2lmIGRlZmluZWQoVVNBUlRfUFJFU0NfUFJFU0NBTEVSKQorICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HMTYocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisjZWxzZQorICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HMTYocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUpKTsKKyNlbmRpZiAvKiBVU0FSVF9QUkVTQ19QUkVTQ0FMRVIgKi8KKyAgICAgIGlmICgodXNhcnRkaXYgPj0gVUFSVF9CUlJfTUlOKSAmJiAodXNhcnRkaXYgPD0gVUFSVF9CUlJfTUFYKSkKKyAgICAgIHsKKyAgICAgICAgaHVhcnQtPkluc3RhbmNlLT5CUlIgPSB1c2FydGRpdjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgcmV0ID0gSEFMX0VSUk9SOworICAgICAgfQogICAgIH0KICAgfQogCkBAIC0zNDM4LDcgKzMzOTEsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgLyogQ2xlYXIgUmVjZWl2ZXIgVGltZW91dCBmbGFnKi8KICAgICAgICAgICBfX0hBTF9VQVJUX0NMRUFSX0ZMQUcoaHVhcnQsIFVBUlRfQ0xFQVJfUlRPRik7Ci0gICAgICAgICAgCisKICAgICAgICAgICAvKiBEaXNhYmxlIFRYRSwgUlhORSwgUEUgYW5kIEVSUiAoRnJhbWUgZXJyb3IsIG5vaXNlIGVycm9yLCBvdmVycnVuIGVycm9yKSBpbnRlcnJ1cHRzIGZvciB0aGUgaW50ZXJydXB0IHByb2Nlc3MgKi8KICNpZiBkZWZpbmVkKFVTQVJUX0NSMV9GSUZPRU4pCiAgICAgICAgICAgQ0xFQVJfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IxLCAoVVNBUlRfQ1IxX1JYTkVJRV9SWEZORUlFIHwgVVNBUlRfQ1IxX1BFSUUgfCBVU0FSVF9DUjFfVFhFSUVfVFhGTkZJRSkpOwpAQCAtMzQ1MCwxMCArMzQwMywxMCBAQAogICAgICAgICAgIGh1YXJ0LT5nU3RhdGUgPSBIQUxfVUFSVF9TVEFURV9SRUFEWTsKICAgICAgICAgICBodWFydC0+UnhTdGF0ZSA9IEhBTF9VQVJUX1NUQVRFX1JFQURZOwogICAgICAgICAgIGh1YXJ0LT5FcnJvckNvZGUgPSBIQUxfVUFSVF9FUlJPUl9SVE87Ci0gICAgICAgICAgCisKICAgICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgICAgICAgX19IQUxfVU5MT0NLKGh1YXJ0KTsKLSAgICAgICAgICAKKwogICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICAgICAgfQogICAgICAgfQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfdXNhcnQuYyBiL1NyYy9zdG0zMmw0eHhfaGFsX3VzYXJ0LmMKaW5kZXggNzc5YjY3Mi4uMDYwMGUzYiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfdXNhcnQuYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF91c2FydC5jCkBAIC0zOSw3ICszOSw4IEBACiAgICAgICAgICAgICAoKysrKSBDb25maWd1cmUgdGhlIGRlY2xhcmVkIERNQSBoYW5kbGUgc3RydWN0dXJlIHdpdGggdGhlIHJlcXVpcmVkIFR4L1J4IHBhcmFtZXRlcnMuCiAgICAgICAgICAgICAoKysrKSBDb25maWd1cmUgdGhlIERNQSBUeC9SeCBjaGFubmVsLgogICAgICAgICAgICAgKCsrKykgQXNzb2NpYXRlIHRoZSBpbml0aWFsaXplZCBETUEgaGFuZGxlIHRvIHRoZSBVU0FSVCBETUEgVHgvUnggaGFuZGxlLgotICAgICAgICAgICAgKCsrKykgQ29uZmlndXJlIHRoZSBwcmlvcml0eSBhbmQgZW5hYmxlIHRoZSBOVklDIGZvciB0aGUgdHJhbnNmZXIgY29tcGxldGUgaW50ZXJydXB0IG9uIHRoZSBETUEgVHgvUnggY2hhbm5lbC4KKyAgICAgICAgICAgICgrKyspIENvbmZpZ3VyZSB0aGUgcHJpb3JpdHkgYW5kIGVuYWJsZSB0aGUgTlZJQyBmb3IgdGhlIHRyYW5zZmVyCisgICAgICAgICAgICAgICAgICBjb21wbGV0ZSBpbnRlcnJ1cHQgb24gdGhlIERNQSBUeC9SeCBjaGFubmVsLgogCiAgICAgICAoIykgUHJvZ3JhbSB0aGUgQmF1ZCBSYXRlLCBXb3JkIExlbmd0aCwgU3RvcCBCaXQsIFBhcml0eSwgYW5kIE1vZGUKICAgICAgICAgICAoUmVjZWl2ZXIvVHJhbnNtaXR0ZXIpIGluIHRoZSBodXNhcnQgaGFuZGxlIEluaXQgc3RydWN0dXJlLgpAQCAtNTQ0LDkgKzU0NSw5IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgVW5yZWdpc3RlciBhbiBVQVJUIENhbGxiYWNrCi0gICogICAgICAgICBVQVJUIGNhbGxhYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKLSAgKiBAcGFyYW0gIGh1c2FydCB1YXJ0IGhhbmRsZQorICAqIEBicmllZiAgVW5yZWdpc3RlciBhbiBVU0FSVCBDYWxsYmFjaworICAqICAgICAgICAgVVNBUlQgY2FsbGFiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqIEBwYXJhbSAgaHVzYXJ0IHVzYXJ0IGhhbmRsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX1VTQVJUX1RYX0hBTEZDT01QTEVURV9DQl9JRCBUeCBIYWxmIENvbXBsZXRlIENhbGxiYWNrIElECkBAIC01NzQsNDkgKzU3NSw0OSBAQAogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKICAgICB7CiAgICAgICBjYXNlIEhBTF9VU0FSVF9UWF9IQUxGQ09NUExFVEVfQ0JfSUQgOgotICAgICAgICBodXNhcnQtPlR4SGFsZkNwbHRDYWxsYmFjayA9IEhBTF9VU0FSVF9UeEhhbGZDcGx0Q2FsbGJhY2s7ICAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgIFR4SGFsZkNwbHRDYWxsYmFjayAgICAgICAqLworICAgICAgICBodXNhcnQtPlR4SGFsZkNwbHRDYWxsYmFjayA9IEhBTF9VU0FSVF9UeEhhbGZDcGx0Q2FsbGJhY2s7ICAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgIFR4SGFsZkNwbHRDYWxsYmFjayAgKi8KICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgSEFMX1VTQVJUX1RYX0NPTVBMRVRFX0NCX0lEIDoKLSAgICAgICAgaHVzYXJ0LT5UeENwbHRDYWxsYmFjayA9IEhBTF9VU0FSVF9UeENwbHRDYWxsYmFjazsgICAgICAgICAgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIFR4Q3BsdENhbGxiYWNrICAgICAgICAgICAgKi8KKyAgICAgICAgaHVzYXJ0LT5UeENwbHRDYWxsYmFjayA9IEhBTF9VU0FSVF9UeENwbHRDYWxsYmFjazsgICAgICAgICAgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIFR4Q3BsdENhbGxiYWNrICAgICAgICovCiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIEhBTF9VU0FSVF9SWF9IQUxGQ09NUExFVEVfQ0JfSUQgOgotICAgICAgICBodXNhcnQtPlJ4SGFsZkNwbHRDYWxsYmFjayA9IEhBTF9VU0FSVF9SeEhhbGZDcGx0Q2FsbGJhY2s7ICAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgUnhIYWxmQ3BsdENhbGxiYWNrICAgICAgICAqLworICAgICAgICBodXNhcnQtPlJ4SGFsZkNwbHRDYWxsYmFjayA9IEhBTF9VU0FSVF9SeEhhbGZDcGx0Q2FsbGJhY2s7ICAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgUnhIYWxmQ3BsdENhbGxiYWNrICAgKi8KICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgSEFMX1VTQVJUX1JYX0NPTVBMRVRFX0NCX0lEIDoKLSAgICAgICAgaHVzYXJ0LT5SeENwbHRDYWxsYmFjayA9IEhBTF9VU0FSVF9SeENwbHRDYWxsYmFjazsgICAgICAgICAgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIFJ4Q3BsdENhbGxiYWNrICAgICAgICAgICAgKi8KKyAgICAgICAgaHVzYXJ0LT5SeENwbHRDYWxsYmFjayA9IEhBTF9VU0FSVF9SeENwbHRDYWxsYmFjazsgICAgICAgICAgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIFJ4Q3BsdENhbGxiYWNrICAgICAgICovCiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIEhBTF9VU0FSVF9UWF9SWF9DT01QTEVURV9DQl9JRCA6Ci0gICAgICAgIGh1c2FydC0+VHhSeENwbHRDYWxsYmFjayA9IEhBTF9VU0FSVF9UeFJ4Q3BsdENhbGxiYWNrOyAgICAgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBUeFJ4Q3BsdENhbGxiYWNrICAgICAgICAgICAgKi8KKyAgICAgICAgaHVzYXJ0LT5UeFJ4Q3BsdENhbGxiYWNrID0gSEFMX1VTQVJUX1R4UnhDcGx0Q2FsbGJhY2s7ICAgICAgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIFR4UnhDcGx0Q2FsbGJhY2sgICAgICovCiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIEhBTF9VU0FSVF9FUlJPUl9DQl9JRCA6Ci0gICAgICAgIGh1c2FydC0+RXJyb3JDYWxsYmFjayA9IEhBTF9VU0FSVF9FcnJvckNhbGxiYWNrOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBFcnJvckNhbGxiYWNrICAgICAgICAgICAgICovCisgICAgICAgIGh1c2FydC0+RXJyb3JDYWxsYmFjayA9IEhBTF9VU0FSVF9FcnJvckNhbGxiYWNrOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBFcnJvckNhbGxiYWNrICAgICAgICAqLwogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBIQUxfVVNBUlRfQUJPUlRfQ09NUExFVEVfQ0JfSUQgOgotICAgICAgICBodXNhcnQtPkFib3J0Q3BsdENhbGxiYWNrID0gSEFMX1VTQVJUX0Fib3J0Q3BsdENhbGxiYWNrOyAgICAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgQWJvcnRDcGx0Q2FsbGJhY2sgICAgICAgICAqLworICAgICAgICBodXNhcnQtPkFib3J0Q3BsdENhbGxiYWNrID0gSEFMX1VTQVJUX0Fib3J0Q3BsdENhbGxiYWNrOyAgICAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgQWJvcnRDcGx0Q2FsbGJhY2sgICAgKi8KICAgICAgICAgYnJlYWs7CiAKICNpZiBkZWZpbmVkKFVTQVJUX0NSMV9GSUZPRU4pCiAgICAgICBjYXNlIEhBTF9VU0FSVF9SWF9GSUZPX0ZVTExfQ0JfSUQgOgotICAgICAgICBodXNhcnQtPlJ4Rmlmb0Z1bGxDYWxsYmFjayA9IEhBTF9VU0FSVEV4X1J4Rmlmb0Z1bGxDYWxsYmFjazsgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgUnhGaWZvRnVsbENhbGxiYWNrICAgICAgICAqLworICAgICAgICBodXNhcnQtPlJ4Rmlmb0Z1bGxDYWxsYmFjayA9IEhBTF9VU0FSVEV4X1J4Rmlmb0Z1bGxDYWxsYmFjazsgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgUnhGaWZvRnVsbENhbGxiYWNrICAgKi8KICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgSEFMX1VTQVJUX1RYX0ZJRk9fRU1QVFlfQ0JfSUQgOgotICAgICAgICBodXNhcnQtPlR4Rmlmb0VtcHR5Q2FsbGJhY2sgPSBIQUxfVVNBUlRFeF9UeEZpZm9FbXB0eUNhbGxiYWNrOyAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgVHhGaWZvRW1wdHlDYWxsYmFjayAgICAgICAqLworICAgICAgICBodXNhcnQtPlR4Rmlmb0VtcHR5Q2FsbGJhY2sgPSBIQUxfVVNBUlRFeF9UeEZpZm9FbXB0eUNhbGxiYWNrOyAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgVHhGaWZvRW1wdHlDYWxsYmFjayAgKi8KICAgICAgICAgYnJlYWs7CiAjZW5kaWYgLyogVVNBUlRfQ1IxX0ZJRk9FTiAqLwogCiAgICAgICBjYXNlIEhBTF9VU0FSVF9NU1BJTklUX0NCX0lEIDoKLSAgICAgICAgaHVzYXJ0LT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfVVNBUlRfTXNwSW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIE1zcEluaXRDYWxsYmFjayAgICAgICAgICAgKi8KKyAgICAgICAgaHVzYXJ0LT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfVVNBUlRfTXNwSW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIE1zcEluaXRDYWxsYmFjayAgICAgICovCiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIEhBTF9VU0FSVF9NU1BERUlOSVRfQ0JfSUQgOgotICAgICAgICBodXNhcnQtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX1VTQVJUX01zcERlSW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgICAqLworICAgICAgICBodXNhcnQtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX1VTQVJUX01zcERlSW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgTXNwRGVJbml0Q2FsbGJhY2sgICAgKi8KICAgICAgICAgYnJlYWs7CiAKICAgICAgIGRlZmF1bHQgOgpAQCAtNzM1LDEzICs3MzYsMTYgQEAKICAgICAoIykgSW4gTm9uLUJsb2NraW5nIG1vZGUgdHJhbnNmZXJzLCBwb3NzaWJsZSBlcnJvcnMgYXJlIHNwbGl0IGludG8gMiBjYXRlZ29yaWVzLgogICAgICAgICBFcnJvcnMgYXJlIGhhbmRsZWQgYXMgZm9sbG93cyA6CiAgICAgICAgICgrKykgRXJyb3IgaXMgY29uc2lkZXJlZCBhcyBSZWNvdmVyYWJsZSBhbmQgbm9uIGJsb2NraW5nIDogVHJhbnNmZXIgY291bGQgZ28gdGlsbCBlbmQsIGJ1dCBlcnJvciBzZXZlcml0eSBpcwotICAgICAgICAgICAgIHRvIGJlIGV2YWx1YXRlZCBieSB1c2VyIDogdGhpcyBjb25jZXJucyBGcmFtZSBFcnJvciwgUGFyaXR5IEVycm9yIG9yIE5vaXNlIEVycm9yIGluIEludGVycnVwdCBtb2RlIHJlY2VwdGlvbiAuCi0gICAgICAgICAgICAgUmVjZWl2ZWQgY2hhcmFjdGVyIGlzIHRoZW4gcmV0cmlldmVkIGFuZCBzdG9yZWQgaW4gUnggYnVmZmVyLCBFcnJvciBjb2RlIGlzIHNldCB0byBhbGxvdyB1c2VyIHRvIGlkZW50aWZ5IGVycm9yIHR5cGUsCi0gICAgICAgICAgICAgYW5kIEhBTF9VU0FSVF9FcnJvckNhbGxiYWNrKCkgdXNlciBjYWxsYmFjayBpcyBleGVjdXRlZC4gVHJhbnNmZXIgaXMga2VwdCBvbmdvaW5nIG9uIFVTQVJUIHNpZGUuCisgICAgICAgICAgICAgdG8gYmUgZXZhbHVhdGVkIGJ5IHVzZXIgOiB0aGlzIGNvbmNlcm5zIEZyYW1lIEVycm9yLAorICAgICAgICAgICAgIFBhcml0eSBFcnJvciBvciBOb2lzZSBFcnJvciBpbiBJbnRlcnJ1cHQgbW9kZSByZWNlcHRpb24gLgorICAgICAgICAgICAgIFJlY2VpdmVkIGNoYXJhY3RlciBpcyB0aGVuIHJldHJpZXZlZCBhbmQgc3RvcmVkIGluIFJ4IGJ1ZmZlciwgRXJyb3IgY29kZSBpcyBzZXQgdG8gYWxsb3cgdXNlciB0byBpZGVudGlmeQorICAgICAgICAgICAgIGVycm9yIHR5cGUsIGFuZCBIQUxfVVNBUlRfRXJyb3JDYWxsYmFjaygpIHVzZXIgY2FsbGJhY2sgaXMgZXhlY3V0ZWQuCisgICAgICAgICAgICAgVHJhbnNmZXIgaXMga2VwdCBvbmdvaW5nIG9uIFVTQVJUIHNpZGUuCiAgICAgICAgICAgICAgSWYgdXNlciB3YW50cyB0byBhYm9ydCBpdCwgQWJvcnQgc2VydmljZXMgc2hvdWxkIGJlIGNhbGxlZCBieSB1c2VyLgogICAgICAgICAoKyspIEVycm9yIGlzIGNvbnNpZGVyZWQgYXMgQmxvY2tpbmcgOiBUcmFuc2ZlciBjb3VsZCBub3QgYmUgY29tcGxldGVkIHByb3Blcmx5IGFuZCBpcyBhYm9ydGVkLgogICAgICAgICAgICAgIFRoaXMgY29uY2VybnMgT3ZlcnJ1biBFcnJvciBJbiBJbnRlcnJ1cHQgbW9kZSByZWNlcHRpb24gYW5kIGFsbCBlcnJvcnMgaW4gRE1BIG1vZGUuCi0gICAgICAgICAgICAgRXJyb3IgY29kZSBpcyBzZXQgdG8gYWxsb3cgdXNlciB0byBpZGVudGlmeSBlcnJvciB0eXBlLCBhbmQgSEFMX1VTQVJUX0Vycm9yQ2FsbGJhY2soKSB1c2VyIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLgorICAgICAgICAgICAgIEVycm9yIGNvZGUgaXMgc2V0IHRvIGFsbG93IHVzZXIgdG8gaWRlbnRpZnkgZXJyb3IgdHlwZSwKKyAgICAgICAgICAgICBhbmQgSEFMX1VTQVJUX0Vycm9yQ2FsbGJhY2soKSB1c2VyIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLgogCiBAZW5kdmVyYmF0aW0KICAgKiBAewpAQCAtNzQ5LDcgKzc1Myw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2ltcGxleCBzZW5kIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUuCi0gICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiBAbm90ZSAgIFdoZW4gVVNBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKICAgKiAgICAgICAgIHRoZSBzZW50IGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKICAgKiAgICAgICAgIG9mIHUxNiBwcm92aWRlZCB0aHJvdWdoIHBUeERhdGEuCiAgICogQHBhcmFtICBodXNhcnQgVVNBUlQgaGFuZGxlLgpAQCAtNzc3LDcgKzc4MSw3IEBACiAgICAgaHVzYXJ0LT5FcnJvckNvZGUgPSBIQUxfVVNBUlRfRVJST1JfTk9ORTsKICAgICBodXNhcnQtPlN0YXRlID0gSEFMX1VTQVJUX1NUQVRFX0JVU1lfVFg7CiAKLSAgICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ21lbnQqLworICAgIC8qIEluaXQgdGlja3N0YXJ0IGZvciB0aW1lb3V0IG1hbmFnZW1lbnQgKi8KICAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCiAgICAgaHVzYXJ0LT5UeFhmZXJTaXplID0gU2l6ZTsKQEAgLTg0Niw3ICs4NTAsNyBAQAogLyoqCiAgICogQGJyaWVmIFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gYmxvY2tpbmcgbW9kZS4KICAgKiBAbm90ZSAgIFRvIHJlY2VpdmUgc3luY2hyb25vdXMgZGF0YSwgZHVtbXkgZGF0YSBhcmUgc2ltdWx0YW5lb3VzbHkgdHJhbnNtaXR0ZWQuCi0gICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiBAbm90ZSAgIFdoZW4gVVNBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKICAgKiAgICAgICAgIHRoZSByZWNlaXZlZCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCiAgICogICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcFJ4RGF0YS4KICAgKiBAcGFyYW0gaHVzYXJ0IFVTQVJUIGhhbmRsZS4KQEAgLTg3NSw3ICs4NzksNyBAQAogICAgIGh1c2FydC0+RXJyb3JDb2RlID0gSEFMX1VTQVJUX0VSUk9SX05PTkU7CiAgICAgaHVzYXJ0LT5TdGF0ZSA9IEhBTF9VU0FSVF9TVEFURV9CVVNZX1JYOwogCi0gICAgLyogSW5pdCB0aWNrc3RhcnQgZm9yIHRpbWVvdXQgbWFuYWdtZW50Ki8KKyAgICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ2VtZW50ICovCiAgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKIAogICAgIGh1c2FydC0+UnhYZmVyU2l6ZSA9IFNpemU7CkBAIC05NjEsNyArOTY1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmIEZ1bGwtRHVwbGV4IFNlbmQgYW5kIFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gYmxvY2tpbmcgbW9kZS4KLSAgKiBAbm90ZSAgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqIEBub3RlICAgV2hlbiBVU0FSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAogICAqICAgICAgICAgdGhlIHNlbnQgZGF0YSBhbmQgdGhlIHJlY2VpdmVkIGRhdGEgYXJlIGhhbmRsZWQgYXMgc2V0cyBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKICAgKiAgICAgICAgIG9mIHUxNiBhdmFpbGFibGUgdGhyb3VnaCBwVHhEYXRhIGFuZCB0aHJvdWdoIHBSeERhdGEuCiAgICogQHBhcmFtICBodXNhcnQgVVNBUlQgaGFuZGxlLgpAQCAtOTk1LDcgKzk5OSw3IEBACiAgICAgaHVzYXJ0LT5FcnJvckNvZGUgPSBIQUxfVVNBUlRfRVJST1JfTk9ORTsKICAgICBodXNhcnQtPlN0YXRlID0gSEFMX1VTQVJUX1NUQVRFX0JVU1lfUlg7CiAKLSAgICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ21lbnQqLworICAgIC8qIEluaXQgdGlja3N0YXJ0IGZvciB0aW1lb3V0IG1hbmFnZW1lbnQgKi8KICAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCiAgICAgaHVzYXJ0LT5SeFhmZXJTaXplID0gU2l6ZTsKQEAgLTExMTQsNyArMTExOCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2VuZCBhbiBhbW91bnQgb2YgZGF0YSBpbiBpbnRlcnJ1cHQgbW9kZS4KLSAgKiBAbm90ZSAgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqIEBub3RlICAgV2hlbiBVU0FSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAogICAqICAgICAgICAgdGhlIHNlbnQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgogICAqICAgICAgICAgb2YgdTE2IHByb3ZpZGVkIHRocm91Z2ggcFR4RGF0YS4KICAgKiBAcGFyYW0gIGh1c2FydCBVU0FSVCBoYW5kbGUuCkBAIC0xMTk5LDcgKzEyMDMsNyBAQAogLyoqCiAgICogQGJyaWVmIFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gaW50ZXJydXB0IG1vZGUuCiAgICogQG5vdGUgICBUbyByZWNlaXZlIHN5bmNocm9ub3VzIGRhdGEsIGR1bW15IGRhdGEgYXJlIHNpbXVsdGFuZW91c2x5IHRyYW5zbWl0dGVkLgotICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogQG5vdGUgICBXaGVuIFVTQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCiAgICogICAgICAgICB0aGUgcmVjZWl2ZWQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgogICAqICAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBSeERhdGEuCiAgICogQHBhcmFtICBodXNhcnQgVVNBUlQgaGFuZGxlLgpAQCAtMTMxNCw3ICsxMzE4LDcgQEAKIAogLyoqCiAgICogQGJyaWVmIEZ1bGwtRHVwbGV4IFNlbmQgYW5kIFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gaW50ZXJydXB0IG1vZGUuCi0gICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiBAbm90ZSAgIFdoZW4gVVNBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKICAgKiAgICAgICAgIHRoZSBzZW50IGRhdGEgYW5kIHRoZSByZWNlaXZlZCBkYXRhIGFyZSBoYW5kbGVkIGFzIHNldHMgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCiAgICogICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcFR4RGF0YSBhbmQgdGhyb3VnaCBwUnhEYXRhLgogICAqIEBwYXJhbSAgaHVzYXJ0IFVTQVJUIGhhbmRsZS4KQEAgLTE0MjMsNyArMTQyNyw3IEBACiAKIC8qKgogICAqIEBicmllZiBTZW5kIGFuIGFtb3VudCBvZiBkYXRhIGluIERNQSBtb2RlLgotICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogQG5vdGUgICBXaGVuIFVTQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCiAgICogICAgICAgICB0aGUgc2VudCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCiAgICogICAgICAgICBvZiB1MTYgcHJvdmlkZWQgdGhyb3VnaCBwVHhEYXRhLgogICAqIEBwYXJhbSAgaHVzYXJ0IFVTQVJUIGhhbmRsZS4KQEAgLTE1MDgsNyArMTUxMiw3IEBACiAgICogQG5vdGUgICBXaGVuIHRoZSBVU0FSVCBwYXJpdHkgaXMgZW5hYmxlZCAoUENFID0gMSksIHRoZSByZWNlaXZlZCBkYXRhIGNvbnRhaW4KICAgKiAgICAgICAgIHRoZSBwYXJpdHkgYml0IChNU0IgcG9zaXRpb24pLgogICAqIEBub3RlICAgVGhlIFVTQVJUIERNQSB0cmFuc21pdCBjaGFubmVsIG11c3QgYmUgY29uZmlndXJlZCBpbiBvcmRlciB0byBnZW5lcmF0ZSB0aGUgY2xvY2sgZm9yIHRoZSBzbGF2ZS4KLSAgKiBAbm90ZSAgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqIEBub3RlICAgV2hlbiBVU0FSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAogICAqICAgICAgICAgdGhlIHJlY2VpdmVkIGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKICAgKiAgICAgICAgIG9mIHUxNiBhdmFpbGFibGUgdGhyb3VnaCBwUnhEYXRhLgogICAqIEBwYXJhbSAgaHVzYXJ0IFVTQVJUIGhhbmRsZS4KQEAgLTE2MjYsNyArMTYzMCw3IEBACiAvKioKICAgKiBAYnJpZWYgRnVsbC1EdXBsZXggVHJhbnNtaXQgUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZS4KICAgKiBAbm90ZSAgIFdoZW4gdGhlIFVTQVJUIHBhcml0eSBpcyBlbmFibGVkIChQQ0UgPSAxKSB0aGUgZGF0YSByZWNlaXZlZCBjb250YWluIHRoZSBwYXJpdHkgYml0LgotICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogQG5vdGUgICBXaGVuIFVTQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCiAgICogICAgICAgICB0aGUgc2VudCBkYXRhIGFuZCB0aGUgcmVjZWl2ZWQgZGF0YSBhcmUgaGFuZGxlZCBhcyBzZXRzIG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgogICAqICAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBUeERhdGEgYW5kIHRocm91Z2ggcFJ4RGF0YS4KICAgKiBAcGFyYW0gIGh1c2FydCBVU0FSVCBoYW5kbGUuCkBAIC0xODE3LDcgKzE4MjEsNyBAQAogICAgIC8qIENsZWFyIHRoZSBPdmVycnVuIGZsYWcgYmVmb3JlIHJlc3VtaW5nIHRoZSBSeCB0cmFuc2ZlciovCiAgICAgX19IQUxfVVNBUlRfQ0xFQVJfRkxBRyhodXNhcnQsIFVTQVJUX0NMRUFSX09SRUYpOwogCi0gICAgLyogUmVlbmFibGUgUEUgYW5kIEVSUiAoRnJhbWUgZXJyb3IsIG5vaXNlIGVycm9yLCBvdmVycnVuIGVycm9yKSBpbnRlcnJ1cHRzICovCisgICAgLyogUmUtZW5hYmxlIFBFIGFuZCBFUlIgKEZyYW1lIGVycm9yLCBub2lzZSBlcnJvciwgb3ZlcnJ1biBlcnJvcikgaW50ZXJydXB0cyAqLwogICAgIFNFVF9CSVQoaHVzYXJ0LT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfUEVJRSk7CiAgICAgU0VUX0JJVChodXNhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19FSUUpOwogCkBAIC0zMDc1LDcgKzMwNzksNyBAQAogICAvKiBJbml0aWFsaXplIHRoZSBVU0FSVCBFcnJvckNvZGUgKi8KICAgaHVzYXJ0LT5FcnJvckNvZGUgPSBIQUxfVVNBUlRfRVJST1JfTk9ORTsKIAotICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ21lbnQqLworICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ2VtZW50ICovCiAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKICAgLyogQ2hlY2sgaWYgdGhlIFRyYW5zbWl0dGVyIGlzIGVuYWJsZWQgKi8KQEAgLTM1ODksNyArMzU5Myw4IEBACiAgICAgICAgICAgLyogRGlzYWJsZSB0aGUgVVNBUlQgUGFyaXR5IEVycm9yIEludGVycnVwdCAqLwogICAgICAgICAgIENMRUFSX0JJVChodXNhcnQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9QRUlFKTsKIAotICAgICAgICAgIC8qIERpc2FibGUgdGhlIFVTQVJUIEVycm9yIEludGVycnVwdDogKEZyYW1lIGVycm9yLCBub2lzZSBlcnJvciwgb3ZlcnJ1biBlcnJvcikgYW5kIFJYIEZJRk8gVGhyZXNob2xkIGludGVycnVwdCAqLworICAgICAgICAgIC8qIERpc2FibGUgdGhlIFVTQVJUIEVycm9yIEludGVycnVwdDogKEZyYW1lIGVycm9yLCBub2lzZSBlcnJvciwgb3ZlcnJ1biBlcnJvcikKKyAgICAgICAgICAgICBhbmQgUlggRklGTyBUaHJlc2hvbGQgaW50ZXJydXB0ICovCiAgICAgICAgICAgQ0xFQVJfQklUKGh1c2FydC0+SW5zdGFuY2UtPkNSMywgKFVTQVJUX0NSM19FSUUgfCBVU0FSVF9DUjNfUlhGVElFKSk7CiAKICAgICAgICAgICAvKiBDbGVhciBSeElTUiBmdW5jdGlvbiBwb2ludGVyICovCkBAIC0zNzM0LDcgKzM3MzksOCBAQAogICAgICAgICAgIC8qIERpc2FibGUgdGhlIFVTQVJUIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQgKi8KICAgICAgICAgICBDTEVBUl9CSVQoaHVzYXJ0LT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfUEVJRSk7CiAKLSAgICAgICAgICAvKiBEaXNhYmxlIHRoZSBVU0FSVCBFcnJvciBJbnRlcnJ1cHQ6IChGcmFtZSBlcnJvciwgbm9pc2UgZXJyb3IsIG92ZXJydW4gZXJyb3IpIGFuZCBSWCBGSUZPIFRocmVzaG9sZCBpbnRlcnJ1cHQgKi8KKyAgICAgICAgICAvKiBEaXNhYmxlIHRoZSBVU0FSVCBFcnJvciBJbnRlcnJ1cHQ6IChGcmFtZSBlcnJvciwgbm9pc2UgZXJyb3IsIG92ZXJydW4gZXJyb3IpCisgICAgICAgICAgICAgYW5kIFJYIEZJRk8gVGhyZXNob2xkIGludGVycnVwdCAqLwogICAgICAgICAgIENMRUFSX0JJVChodXNhcnQtPkluc3RhbmNlLT5DUjMsIChVU0FSVF9DUjNfRUlFIHwgVVNBUlRfQ1IzX1JYRlRJRSkpOwogCiAgICAgICAgICAgLyogQ2xlYXIgUnhJU1IgZnVuY3Rpb24gcG9pbnRlciAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfdXNhcnRfZXguYyBiL1NyYy9zdG0zMmw0eHhfaGFsX3VzYXJ0X2V4LmMKaW5kZXggYzhhYjllMC4uYzc5ZWJmMyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfdXNhcnRfZXguYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF91c2FydF9leC5jCkBAIC0yNTAsNyArMjUwLDcgQEAKICAgLyogUmVzdG9yZSBVU0FSVCBjb25maWd1cmF0aW9uICovCiAgIFdSSVRFX1JFRyhodXNhcnQtPkluc3RhbmNlLT5DUjEsIHRtcGNyMSk7CiAKLSAgaHVzYXJ0LT5TbGF2ZU1vZGUgPSBVU0FSVF9TTEFWRU1PREVfRU5BQkxFOworICBodXNhcnQtPlNsYXZlTW9kZSA9IFVTQVJUX1NMQVZFTU9ERV9ESVNBQkxFOwogCiAgIGh1c2FydC0+U3RhdGUgPSBIQUxfVVNBUlRfU1RBVEVfUkVBRFk7CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX3d3ZGcuYyBiL1NyYy9zdG0zMmw0eHhfaGFsX3d3ZGcuYwppbmRleCBlMDdlYzAxLi45Y2JhMzZiIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF93d2RnLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfd3dkZy5jCkBAIC0zMiwxMCArMzIsMTAgQEAKICAgICAgICAgKCsrKSBtaW4gdGltZSAobVMpID0gMTAwMCAqIChDb3VudGVyIC0gV2luZG93KSAvIFdXREcgY2xvY2sKICAgICAgICAgKCsrKSBtYXggdGltZSAobVMpID0gMTAwMCAqIChDb3VudGVyIC0gMHg0MCkgLyBXV0RHIGNsb2NrCiAgICAgKCspIFR5cGljYWwgdmFsdWVzOgotICAgICAgICAoKyspIENvdW50ZXIgbWluIChUWzU7MF0gPSAweDAwKSBANTZNSHogKFBDTEsxKSB3aXRoIHplcm8gcHJlc2NhbGVyOgotICAgICAgICAgICAgIG1heCB0aW1lb3V0IGJlZm9yZSByZXNldDogYXBwcm94aW1hdGVseSA3My4xNLVzCi0gICAgICAgICgrKykgQ291bnRlciBtYXggKFRbNTswXSA9IDB4M0YpIEA1Nk1IeiAoUENMSzEpIHdpdGggcHJlc2NhbGVyIGRpdmlkaW5nIGJ5IDg6Ci0gICAgICAgICAgICAgbWF4IHRpbWVvdXQgYmVmb3JlIHJlc2V0OiBhcHByb3hpbWF0ZWx5IDU5OS4xOG1zCisgICAgICAgICgrKykgQ291bnRlciBtaW4gKFRbNTswXSA9IDB4MDApIEA4ME1IeiAoUENMSzEpIHdpdGggemVybyBwcmVzY2FsZXI6CisgICAgICAgICAgICAgbWF4IHRpbWVvdXQgYmVmb3JlIHJlc2V0OiBhcHByb3hpbWF0ZWx5IDUxLjK1cworICAgICAgICAoKyspIENvdW50ZXIgbWF4IChUWzU7MF0gPSAweDNGKSBAODBNSHogKFBDTEsxKSB3aXRoIHByZXNjYWxlciBkaXZpZGluZyBieSA4OgorICAgICAgICAgICAgIG1heCB0aW1lb3V0IGJlZm9yZSByZXNldDogYXBwcm94aW1hdGVseSAyNi4yMW1zCiAKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2xsX2FkYy5jIGIvU3JjL3N0bTMybDR4eF9sbF9hZGMuYwppbmRleCBiMjI1ZTBlLi41YzFiY2YwIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2xsX2FkYy5jCisrKyBiL1NyYy9zdG0zMmw0eHhfbGxfYWRjLmMKQEAgLTgxLDcgKzgxLDcgQEAKIC8qIENoZWNrIG9mIHBhcmFtZXRlcnMgZm9yIGNvbmZpZ3VyYXRpb24gb2YgQURDIGhpZXJhcmNoaWNhbCBzY29wZTogICAgICAgICAgICovCiAvKiBjb21tb24gdG8gc2V2ZXJhbCBBREMgaW5zdGFuY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBJU19MTF9BRENfQ09NTU9OX0NMT0NLKF9fQ0xPQ0tfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCAgICgoX19DTE9DS19fKSA9PSBMTF9BRENfQ0xPQ0tfU1lOQ19QQ0xLX0RJVjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoKF9fQ0xPQ0tfXykgPT0gTExfQURDX0NMT0NLX1NZTkNfUENMS19ESVYxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgfHwgKChfX0NMT0NLX18pID09IExMX0FEQ19DTE9DS19TWU5DX1BDTEtfRElWMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19DTE9DS19fKSA9PSBMTF9BRENfQ0xPQ0tfU1lOQ19QQ0xLX0RJVjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICB8fCAoKF9fQ0xPQ0tfXykgPT0gTExfQURDX0NMT0NLX0FTWU5DX0RJVjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTAxLDI2ICsxMDEsMjYgQEAKIC8qIENoZWNrIG9mIHBhcmFtZXRlcnMgZm9yIGNvbmZpZ3VyYXRpb24gb2YgQURDIGhpZXJhcmNoaWNhbCBzY29wZTogICAgICAgICAgICovCiAvKiBBREMgaW5zdGFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBJU19MTF9BRENfUkVTT0xVVElPTihfX1JFU09MVVRJT05fXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCAgICgoX19SRVNPTFVUSU9OX18pID09IExMX0FEQ19SRVNPTFVUSU9OXzEyQikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoKF9fUkVTT0xVVElPTl9fKSA9PSBMTF9BRENfUkVTT0xVVElPTl8xMkIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgfHwgKChfX1JFU09MVVRJT05fXykgPT0gTExfQURDX1JFU09MVVRJT05fMTBCKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19SRVNPTFVUSU9OX18pID09IExMX0FEQ19SRVNPTFVUSU9OXzhCKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICB8fCAoKF9fUkVTT0xVVElPTl9fKSA9PSBMTF9BRENfUkVTT0xVVElPTl82QikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICApCiAKICNkZWZpbmUgSVNfTExfQURDX0RBVEFfQUxJR04oX19EQVRBX0FMSUdOX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICggICAoKF9fREFUQV9BTElHTl9fKSA9PSBMTF9BRENfREFUQV9BTElHTl9SSUdIVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKChfX0RBVEFfQUxJR05fXykgPT0gTExfQURDX0RBVEFfQUxJR05fUklHSFQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19EQVRBX0FMSUdOX18pID09IExMX0FEQ19EQVRBX0FMSUdOX0xFRlQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICkKIAogI2RlZmluZSBJU19MTF9BRENfTE9XX1BPV0VSKF9fTE9XX1BPV0VSX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCAgICgoX19MT1dfUE9XRVJfXykgPT0gTExfQURDX0xQX01PREVfTk9ORSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoKF9fTE9XX1BPV0VSX18pID09IExMX0FEQ19MUF9NT0RFX05PTkUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgfHwgKChfX0xPV19QT1dFUl9fKSA9PSBMTF9BRENfTFBfQVVUT1dBSVQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKQogCiAvKiBDaGVjayBvZiBwYXJhbWV0ZXJzIGZvciBjb25maWd1cmF0aW9uIG9mIEFEQyBoaWVyYXJjaGljYWwgc2NvcGU6ICAgICAgICAgICAqLwogLyogQURDIGdyb3VwIHJlZ3VsYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSVNfTExfQURDX1JFR19UUklHX1NPVVJDRShfX1JFR19UUklHX1NPVVJDRV9fKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICggICAoKF9fUkVHX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19SRUdfVFJJR19TT0ZUV0FSRSkgICAgICAgICAgICAgICAgICAgICAgXAorICAoKChfX1JFR19UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfUkVHX1RSSUdfU09GVFdBUkUpICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19SRUdfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX1JFR19UUklHX0VYVF9USU0xX1RSR08pICAgICAgICAgICAgICAgICBcCiAgICB8fCAoKF9fUkVHX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19SRUdfVFJJR19FWFRfVElNMV9UUkdPMikgICAgICAgICAgICAgICAgXAogICAgfHwgKChfX1JFR19UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfUkVHX1RSSUdfRVhUX1RJTTFfQ0gxKSAgICAgICAgICAgICAgICAgIFwKQEAgLTE0MCwyMyArMTQwLDIzIEBACiAgICkKIAogI2RlZmluZSBJU19MTF9BRENfUkVHX0NPTlRJTlVPVVNfTU9ERShfX1JFR19DT05USU5VT1VTX01PREVfXykgICAgICAgICAgICAgICAgIFwKLSAgKCAgICgoX19SRUdfQ09OVElOVU9VU19NT0RFX18pID09IExMX0FEQ19SRUdfQ09OVl9TSU5HTEUpICAgICAgICAgICAgICAgICAgICBcCisgICgoKF9fUkVHX0NPTlRJTlVPVVNfTU9ERV9fKSA9PSBMTF9BRENfUkVHX0NPTlZfU0lOR0xFKSAgICAgICAgICAgICAgICAgICAgICAgXAogICAgfHwgKChfX1JFR19DT05USU5VT1VTX01PREVfXykgPT0gTExfQURDX1JFR19DT05WX0NPTlRJTlVPVVMpICAgICAgICAgICAgICAgIFwKICAgKQogCiAjZGVmaW5lIElTX0xMX0FEQ19SRUdfRE1BX1RSQU5TRkVSKF9fUkVHX0RNQV9UUkFOU0ZFUl9fKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAoICAgKChfX1JFR19ETUFfVFJBTlNGRVJfXykgPT0gTExfQURDX1JFR19ETUFfVFJBTlNGRVJfTk9ORSkgICAgICAgICAgICAgICAgIFwKKyAgKCgoX19SRUdfRE1BX1RSQU5TRkVSX18pID09IExMX0FEQ19SRUdfRE1BX1RSQU5TRkVSX05PTkUpICAgICAgICAgICAgICAgICAgICBcCiAgICB8fCAoKF9fUkVHX0RNQV9UUkFOU0ZFUl9fKSA9PSBMTF9BRENfUkVHX0RNQV9UUkFOU0ZFUl9MSU1JVEVEKSAgICAgICAgICAgICAgXAogICAgfHwgKChfX1JFR19ETUFfVFJBTlNGRVJfXykgPT0gTExfQURDX1JFR19ETUFfVFJBTlNGRVJfVU5MSU1JVEVEKSAgICAgICAgICAgIFwKICAgKQogCiAjZGVmaW5lIElTX0xMX0FEQ19SRUdfT1ZSX0RBVEFfQkVIQVZJT1IoX19SRUdfT1ZSX0RBVEFfQkVIQVZJT1JfXykgICAgICAgICAgICAgXAotICAoICAgKChfX1JFR19PVlJfREFUQV9CRUhBVklPUl9fKSA9PSBMTF9BRENfUkVHX09WUl9EQVRBX1BSRVNFUlZFRCkgICAgICAgICAgIFwKKyAgKCgoX19SRUdfT1ZSX0RBVEFfQkVIQVZJT1JfXykgPT0gTExfQURDX1JFR19PVlJfREFUQV9QUkVTRVJWRUQpICAgICAgICAgICAgICBcCiAgICB8fCAoKF9fUkVHX09WUl9EQVRBX0JFSEFWSU9SX18pID09IExMX0FEQ19SRUdfT1ZSX0RBVEFfT1ZFUldSSVRURU4pICAgICAgICAgXAogICApCiAKICNkZWZpbmUgSVNfTExfQURDX1JFR19TRVFfU0NBTl9MRU5HVEgoX19SRUdfU0VRX1NDQU5fTEVOR1RIX18pICAgICAgICAgICAgICAgICBcCi0gICggICAoKF9fUkVHX1NFUV9TQ0FOX0xFTkdUSF9fKSA9PSBMTF9BRENfUkVHX1NFUV9TQ0FOX0RJU0FCTEUpICAgICAgICAgICAgICAgXAorICAoKChfX1JFR19TRVFfU0NBTl9MRU5HVEhfXykgPT0gTExfQURDX1JFR19TRVFfU0NBTl9ESVNBQkxFKSAgICAgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19SRUdfU0VRX1NDQU5fTEVOR1RIX18pID09IExMX0FEQ19SRUdfU0VRX1NDQU5fRU5BQkxFXzJSQU5LUykgICAgICAgICBcCiAgICB8fCAoKF9fUkVHX1NFUV9TQ0FOX0xFTkdUSF9fKSA9PSBMTF9BRENfUkVHX1NFUV9TQ0FOX0VOQUJMRV8zUkFOS1MpICAgICAgICAgXAogICAgfHwgKChfX1JFR19TRVFfU0NBTl9MRU5HVEhfXykgPT0gTExfQURDX1JFR19TRVFfU0NBTl9FTkFCTEVfNFJBTktTKSAgICAgICAgIFwKQEAgLTE3NSw3ICsxNzUsNyBAQAogICApCiAKICNkZWZpbmUgSVNfTExfQURDX1JFR19TRVFfU0NBTl9ESVNDT05UX01PREUoX19SRUdfU0VRX0RJU0NPTlRfTU9ERV9fKSAgICAgICAgICBcCi0gICggICAoKF9fUkVHX1NFUV9ESVNDT05UX01PREVfXykgPT0gTExfQURDX1JFR19TRVFfRElTQ09OVF9ESVNBQkxFKSAgICAgICAgICAgXAorICAoKChfX1JFR19TRVFfRElTQ09OVF9NT0RFX18pID09IExMX0FEQ19SRUdfU0VRX0RJU0NPTlRfRElTQUJMRSkgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19SRUdfU0VRX0RJU0NPTlRfTU9ERV9fKSA9PSBMTF9BRENfUkVHX1NFUV9ESVNDT05UXzFSQU5LKSAgICAgICAgICAgICBcCiAgICB8fCAoKF9fUkVHX1NFUV9ESVNDT05UX01PREVfXykgPT0gTExfQURDX1JFR19TRVFfRElTQ09OVF8yUkFOS1MpICAgICAgICAgICAgXAogICAgfHwgKChfX1JFR19TRVFfRElTQ09OVF9NT0RFX18pID09IExMX0FEQ19SRUdfU0VRX0RJU0NPTlRfM1JBTktTKSAgICAgICAgICAgIFwKQEAgLTE4OSw3ICsxODksNyBAQAogLyogQ2hlY2sgb2YgcGFyYW1ldGVycyBmb3IgY29uZmlndXJhdGlvbiBvZiBBREMgaGllcmFyY2hpY2FsIHNjb3BlOiAgICAgICAgICAgKi8KIC8qIEFEQyBncm91cCBpbmplY3RlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIElTX0xMX0FEQ19JTkpfVFJJR19TT1VSQ0UoX19JTkpfVFJJR19TT1VSQ0VfXykgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoICAgKChfX0lOSl9UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfSU5KX1RSSUdfU09GVFdBUkUpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCgoX19JTkpfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX0lOSl9UUklHX1NPRlRXQVJFKSAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICB8fCAoKF9fSU5KX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19JTkpfVFJJR19FWFRfVElNMV9UUkdPKSAgICAgICAgICAgICAgICAgXAogICAgfHwgKChfX0lOSl9UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfSU5KX1RSSUdfRVhUX1RJTTFfVFJHTzIpICAgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19JTkpfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX0lOSl9UUklHX0VYVF9USU0xX0NINCkgICAgICAgICAgICAgICAgICBcCkBAIC0yMDksMjUgKzIwOSwyNSBAQAogICApCiAKICNkZWZpbmUgSVNfTExfQURDX0lOSl9UUklHX0VYVF9FREdFKF9fSU5KX1RSSUdfRVhUX0VER0VfXykgICAgICAgICAgICAgICAgICAgICBcCi0gICggICAoKF9fSU5KX1RSSUdfRVhUX0VER0VfXykgPT0gTExfQURDX0lOSl9UUklHX0VYVF9SSVNJTkcpICAgICAgICAgICAgICAgICAgXAorICAoKChfX0lOSl9UUklHX0VYVF9FREdFX18pID09IExMX0FEQ19JTkpfVFJJR19FWFRfUklTSU5HKSAgICAgICAgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19JTkpfVFJJR19FWFRfRURHRV9fKSA9PSBMTF9BRENfSU5KX1RSSUdfRVhUX0ZBTExJTkcpICAgICAgICAgICAgICAgICBcCiAgICB8fCAoKF9fSU5KX1RSSUdfRVhUX0VER0VfXykgPT0gTExfQURDX0lOSl9UUklHX0VYVF9SSVNJTkdGQUxMSU5HKSAgICAgICAgICAgXAogICApCiAKICNkZWZpbmUgSVNfTExfQURDX0lOSl9UUklHX0FVVE8oX19JTkpfVFJJR19BVVRPX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICggICAoKF9fSU5KX1RSSUdfQVVUT19fKSA9PSBMTF9BRENfSU5KX1RSSUdfSU5ERVBFTkRFTlQpICAgICAgICAgICAgICAgICAgICAgXAorICAoKChfX0lOSl9UUklHX0FVVE9fXykgPT0gTExfQURDX0lOSl9UUklHX0lOREVQRU5ERU5UKSAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19JTkpfVFJJR19BVVRPX18pID09IExMX0FEQ19JTkpfVFJJR19GUk9NX0dSUF9SRUdVTEFSKSAgICAgICAgICAgICAgICBcCiAgICkKIAogI2RlZmluZSBJU19MTF9BRENfSU5KX1NFUV9TQ0FOX0xFTkdUSChfX0lOSl9TRVFfU0NBTl9MRU5HVEhfXykgICAgICAgICAgICAgICAgIFwKLSAgKCAgICgoX19JTkpfU0VRX1NDQU5fTEVOR1RIX18pID09IExMX0FEQ19JTkpfU0VRX1NDQU5fRElTQUJMRSkgICAgICAgICAgICAgICBcCisgICgoKF9fSU5KX1NFUV9TQ0FOX0xFTkdUSF9fKSA9PSBMTF9BRENfSU5KX1NFUV9TQ0FOX0RJU0FCTEUpICAgICAgICAgICAgICAgICAgXAogICAgfHwgKChfX0lOSl9TRVFfU0NBTl9MRU5HVEhfXykgPT0gTExfQURDX0lOSl9TRVFfU0NBTl9FTkFCTEVfMlJBTktTKSAgICAgICAgIFwKICAgIHx8ICgoX19JTkpfU0VRX1NDQU5fTEVOR1RIX18pID09IExMX0FEQ19JTkpfU0VRX1NDQU5fRU5BQkxFXzNSQU5LUykgICAgICAgICBcCiAgICB8fCAoKF9fSU5KX1NFUV9TQ0FOX0xFTkdUSF9fKSA9PSBMTF9BRENfSU5KX1NFUV9TQ0FOX0VOQUJMRV80UkFOS1MpICAgICAgICAgXAogICApCiAKICNkZWZpbmUgSVNfTExfQURDX0lOSl9TRVFfU0NBTl9ESVNDT05UX01PREUoX19JTkpfU0VRX0RJU0NPTlRfTU9ERV9fKSAgICAgICAgICBcCi0gICggICAoKF9fSU5KX1NFUV9ESVNDT05UX01PREVfXykgPT0gTExfQURDX0lOSl9TRVFfRElTQ09OVF9ESVNBQkxFKSAgICAgICAgICAgXAorICAoKChfX0lOSl9TRVFfRElTQ09OVF9NT0RFX18pID09IExMX0FEQ19JTkpfU0VRX0RJU0NPTlRfRElTQUJMRSkgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19JTkpfU0VRX0RJU0NPTlRfTU9ERV9fKSA9PSBMTF9BRENfSU5KX1NFUV9ESVNDT05UXzFSQU5LKSAgICAgICAgICAgICBcCiAgICkKIApAQCAtMjM1LDcgKzIzNSw3IEBACiAvKiBDaGVjayBvZiBwYXJhbWV0ZXJzIGZvciBjb25maWd1cmF0aW9uIG9mIEFEQyBoaWVyYXJjaGljYWwgc2NvcGU6ICAgICAgICAgICAqLwogLyogbXVsdGltb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSVNfTExfQURDX01VTFRJX01PREUoX19NVUxUSV9NT0RFX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICggICAoKF9fTVVMVElfTU9ERV9fKSA9PSBMTF9BRENfTVVMVElfSU5ERVBFTkRFTlQpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKChfX01VTFRJX01PREVfXykgPT0gTExfQURDX01VTFRJX0lOREVQRU5ERU5UKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19NVUxUSV9NT0RFX18pID09IExMX0FEQ19NVUxUSV9EVUFMX1JFR19TSU1VTFQpICAgICAgICAgICAgICAgICAgICAgICBcCiAgICB8fCAoKF9fTVVMVElfTU9ERV9fKSA9PSBMTF9BRENfTVVMVElfRFVBTF9SRUdfSU5URVJMKSAgICAgICAgICAgICAgICAgICAgICAgXAogICAgfHwgKChfX01VTFRJX01PREVfXykgPT0gTExfQURDX01VTFRJX0RVQUxfSU5KX1NJTVVMVCkgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTI0Niw3ICsyNDYsNyBAQAogICApCiAKICNkZWZpbmUgSVNfTExfQURDX01VTFRJX0RNQV9UUkFOU0ZFUihfX01VTFRJX0RNQV9UUkFOU0ZFUl9fKSAgICAgICAgICAgICAgICAgICBcCi0gICggICAoKF9fTVVMVElfRE1BX1RSQU5TRkVSX18pID09IExMX0FEQ19NVUxUSV9SRUdfRE1BX0VBQ0hfQURDKSAgICAgICAgICAgICAgXAorICAoKChfX01VTFRJX0RNQV9UUkFOU0ZFUl9fKSA9PSBMTF9BRENfTVVMVElfUkVHX0RNQV9FQUNIX0FEQykgICAgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19NVUxUSV9ETUFfVFJBTlNGRVJfXykgPT0gTExfQURDX01VTFRJX1JFR19ETUFfTElNSVRfUkVTMTJfMTBCKSAgICAgICBcCiAgICB8fCAoKF9fTVVMVElfRE1BX1RSQU5TRkVSX18pID09IExMX0FEQ19NVUxUSV9SRUdfRE1BX0xJTUlUX1JFUzhfNkIpICAgICAgICAgXAogICAgfHwgKChfX01VTFRJX0RNQV9UUkFOU0ZFUl9fKSA9PSBMTF9BRENfTVVMVElfUkVHX0RNQV9VTkxNVF9SRVMxMl8xMEIpICAgICAgIFwKQEAgLTI1NCw3ICsyNTQsNyBAQAogICApCiAKICNkZWZpbmUgSVNfTExfQURDX01VTFRJX1RXT1NNUF9ERUxBWShfX01VTFRJX1RXT1NNUF9ERUxBWV9fKSAgICAgICAgICAgICAgICAgICBcCi0gICggICAoKF9fTVVMVElfVFdPU01QX0RFTEFZX18pID09IExMX0FEQ19NVUxUSV9UV09TTVBfREVMQVlfMUNZQ0xFKSAgICAgICAgICAgXAorICAoKChfX01VTFRJX1RXT1NNUF9ERUxBWV9fKSA9PSBMTF9BRENfTVVMVElfVFdPU01QX0RFTEFZXzFDWUNMRSkgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19NVUxUSV9UV09TTVBfREVMQVlfXykgPT0gTExfQURDX01VTFRJX1RXT1NNUF9ERUxBWV8yQ1lDTEVTKSAgICAgICAgICBcCiAgICB8fCAoKF9fTVVMVElfVFdPU01QX0RFTEFZX18pID09IExMX0FEQ19NVUxUSV9UV09TTVBfREVMQVlfM0NZQ0xFUykgICAgICAgICAgXAogICAgfHwgKChfX01VTFRJX1RXT1NNUF9ERUxBWV9fKSA9PSBMTF9BRENfTVVMVElfVFdPU01QX0RFTEFZXzRDWUNMRVMpICAgICAgICAgIFwKQEAgLTI2OSw3ICsyNjksNyBAQAogICApCiAKICNkZWZpbmUgSVNfTExfQURDX01VTFRJX01BU1RFUl9TTEFWRShfX01VTFRJX01BU1RFUl9TTEFWRV9fKSAgICAgICAgICAgICAgICAgICBcCi0gICggICAoKF9fTVVMVElfTUFTVEVSX1NMQVZFX18pID09IExMX0FEQ19NVUxUSV9NQVNURVIpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKChfX01VTFRJX01BU1RFUl9TTEFWRV9fKSA9PSBMTF9BRENfTVVMVElfTUFTVEVSKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19NVUxUSV9NQVNURVJfU0xBVkVfXykgPT0gTExfQURDX01VTFRJX1NMQVZFKSAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICB8fCAoKF9fTVVMVElfTUFTVEVSX1NMQVZFX18pID09IExMX0FEQ19NVUxUSV9NQVNURVJfU0xBVkUpICAgICAgICAgICAgICAgICAgXAogICApCkBAIC0yOTYsNyArMjk2LDcgQEAKICAgKiAgICAgICAgIHRoZSBzYW1lIEFEQyBjb21tb24gaW5zdGFuY2UgdG8gdGhlaXIgZGVmYXVsdCByZXNldCB2YWx1ZXMuCiAgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGlzIHBlcmZvcm1pbmcgYSBoYXJkIHJlc2V0LCB1c2luZyBoaWdoIGxldmVsCiAgICogICAgICAgICBjbG9jayBzb3VyY2UgUkNDIEFEQyByZXNldC4KLSAgKiAgICAgICAgIENhdXRpb246IE9uIHRoaXMgU1RNMzIgc2VyaWUsIGlmIHNldmVyYWwgQURDIGluc3RhbmNlcyBhcmUgYXZhaWxhYmxlCisgICogICAgICAgICBDYXV0aW9uOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgaWYgc2V2ZXJhbCBBREMgaW5zdGFuY2VzIGFyZSBhdmFpbGFibGUKICAgKiAgICAgICAgIG9uIHRoZSBzZWxlY3RlZCBkZXZpY2UsIFJDQyBBREMgcmVzZXQgd2lsbCByZXNldAogICAqICAgICAgICAgYWxsIEFEQyBpbnN0YW5jZXMgYmVsb25naW5nIHRvIHRoZSBjb21tb24gQURDIGluc3RhbmNlLgogICAqICAgICAgICAgVG8gZGUtaW5pdGlhbGl6ZSBvbmx5IDEgQURDIGluc3RhbmNlLCB1c2UKQEAgLTM1NSw3ICszNTUsNyBAQAogCiAgIC8qIE5vdGU6IEhhcmR3YXJlIGNvbnN0cmFpbnQgKHJlZmVyIHRvIGRlc2NyaXB0aW9uIG9mIGZ1bmN0aW9ucyAgICAgICAgICAgICAqLwogICAvKiAgICAgICAiTExfQURDX1NldENvbW1vblhYWCgpIiBhbmQgIkxMX0FEQ19TZXRNdWx0aVhYWCgpIik6ICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGVzZSBmZWF0dXJlcyBpcyBjb25kaXRpb25lZCB0byAgICovCisgIC8qICAgICAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoZXNlIGZlYXR1cmVzIGlzIGNvbmRpdGlvbmVkIHRvICAqLwogICAvKiAgICAgICBBREMgc3RhdGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgQWxsIEFEQyBpbnN0YW5jZXMgb2YgdGhlIEFEQyBjb21tb24gZ3JvdXAgbXVzdCBiZSBkaXNhYmxlZC4gICAgICAgICovCiAgIGlmIChfX0xMX0FEQ19JU19FTkFCTEVEX0FMTF9DT01NT05fSU5TVEFOQ0UoQURDeHlfQ09NTU9OKSA9PSAwVUwpCkBAIC00NDIsNyArNDQyLDcgQEAKICAgKiAgICAgICAgIGlzIGluIGFuIHVua25vd24gc3RhdGUuCiAgICogICAgICAgICBJbiB0aGlzIGNhc2UsIHBlcmZvcm0gYSBoYXJkIHJlc2V0IHVzaW5nIGhpZ2ggbGV2ZWwKICAgKiAgICAgICAgIGNsb2NrIHNvdXJjZSBSQ0MgQURDIHJlc2V0LgotICAqICAgICAgICAgQ2F1dGlvbjogT24gdGhpcyBTVE0zMiBzZXJpZSwgaWYgc2V2ZXJhbCBBREMgaW5zdGFuY2VzIGFyZSBhdmFpbGFibGUKKyAgKiAgICAgICAgIENhdXRpb246IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBpZiBzZXZlcmFsIEFEQyBpbnN0YW5jZXMgYXJlIGF2YWlsYWJsZQogICAqICAgICAgICAgb24gdGhlIHNlbGVjdGVkIGRldmljZSwgUkNDIEFEQyByZXNldCB3aWxsIHJlc2V0CiAgICogICAgICAgICBhbGwgQURDIGluc3RhbmNlcyBiZWxvbmdpbmcgdG8gdGhlIGNvbW1vbiBBREMgaW5zdGFuY2UuCiAgICogICAgICAgICBSZWZlciB0byBmdW5jdGlvbiBAcmVmIExMX0FEQ19Db21tb25EZUluaXQoKS4KQEAgLTY4MSwxMCArNjgxLDEwIEBACiAgICAgLyogQURDIGluc3RhbmNlIGlzIGluIGFuIHVua25vd24gc3RhdGUgKi8KICAgICAvKiBOZWVkIHRvIHBlcmZvcm1pbmcgYSBoYXJkIHJlc2V0IG9mIEFEQyBpbnN0YW5jZSwgdXNpbmcgaGlnaCBsZXZlbCAgICAgICovCiAgICAgLyogY2xvY2sgc291cmNlIFJDQyBBREMgcmVzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qIENhdXRpb246IE9uIHRoaXMgU1RNMzIgc2VyaWUsIGlmIHNldmVyYWwgQURDIGluc3RhbmNlcyBhcmUgYXZhaWxhYmxlICAgKi8KKyAgICAvKiBDYXV0aW9uOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgaWYgc2V2ZXJhbCBBREMgaW5zdGFuY2VzIGFyZSBhdmFpbGFibGUgICovCiAgICAgLyogICAgICAgICAgb24gdGhlIHNlbGVjdGVkIGRldmljZSwgUkNDIEFEQyByZXNldCB3aWxsIHJlc2V0ICAgICAgICAgICAgICAqLwogICAgIC8qICAgICAgICAgIGFsbCBBREMgaW5zdGFuY2VzIGJlbG9uZ2luZyB0byB0aGUgY29tbW9uIEFEQyBpbnN0YW5jZS4gICAgICAgKi8KLSAgICAvKiBDYXV0aW9uOiBPbiB0aGlzIFNUTTMyIHNlcmllLCBpZiBzZXZlcmFsIEFEQyBpbnN0YW5jZXMgYXJlIGF2YWlsYWJsZSAgICovCisgICAgLyogQ2F1dGlvbjogT24gdGhpcyBTVE0zMiBzZXJpZXMsIGlmIHNldmVyYWwgQURDIGluc3RhbmNlcyBhcmUgYXZhaWxhYmxlICAqLwogICAgIC8qICAgICAgICAgIG9uIHRoZSBzZWxlY3RlZCBkZXZpY2UsIFJDQyBBREMgcmVzZXQgd2lsbCByZXNldCAgICAgICAgICAgICAgKi8KICAgICAvKiAgICAgICAgICBhbGwgQURDIGluc3RhbmNlcyBiZWxvbmdpbmcgdG8gdGhlIGNvbW1vbiBBREMgaW5zdGFuY2UuICAgICAgICovCiAgICAgc3RhdHVzID0gRVJST1I7CkBAIC03NjIsNiArNzYyLDcgQEAKICAgICAvKiBJbml0aWFsaXphdGlvbiBlcnJvcjogQURDIGluc3RhbmNlIGlzIG5vdCBkaXNhYmxlZC4gKi8KICAgICBzdGF0dXMgPSBFUlJPUjsKICAgfQorCiAgIHJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTgyNCw2ICs4MjUsMTEgQEAKICAgaWYgKEFEQ19SRUdfSW5pdFN0cnVjdC0+U2VxdWVuY2VyTGVuZ3RoICE9IExMX0FEQ19SRUdfU0VRX1NDQU5fRElTQUJMRSkKICAgewogICAgIGFzc2VydF9wYXJhbShJU19MTF9BRENfUkVHX1NFUV9TQ0FOX0RJU0NPTlRfTU9ERShBRENfUkVHX0luaXRTdHJ1Y3QtPlNlcXVlbmNlckRpc2NvbnQpKTsKKworICAgIC8qIEFEQyBncm91cCByZWd1bGFyIGNvbnRpbnVvdXMgbW9kZSBhbmQgZGlzY29udGludW91cyBtb2RlICAgICAgICAgICAgICAgICAqLworICAgIC8qIGNhbiBub3QgYmUgZW5hYmxlZCBzaW11bHRlbmFlb3VzbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGFzc2VydF9wYXJhbSgoQURDX1JFR19Jbml0U3RydWN0LT5Db250aW51b3VzTW9kZSA9PSBMTF9BRENfUkVHX0NPTlZfU0lOR0xFKQorICAgICAgICAgICAgICAgICB8fCAoQURDX1JFR19Jbml0U3RydWN0LT5TZXF1ZW5jZXJEaXNjb250ID09IExMX0FEQ19SRUdfU0VRX0RJU0NPTlRfRElTQUJMRSkpOwogICB9CiAgIGFzc2VydF9wYXJhbShJU19MTF9BRENfUkVHX0NPTlRJTlVPVVNfTU9ERShBRENfUkVHX0luaXRTdHJ1Y3QtPkNvbnRpbnVvdXNNb2RlKSk7CiAgIGFzc2VydF9wYXJhbShJU19MTF9BRENfUkVHX0RNQV9UUkFOU0ZFUihBRENfUkVHX0luaXRTdHJ1Y3QtPkRNQVRyYW5zZmVyKSk7CkBAIC04NDIsNyArODQ4LDcgQEAKICAgICAvKiAgICAtIFNldCBBREMgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9uIGRhdGEgdHJhbnNmZXI6IG5vIHRyYW5zZmVyIG9yICAgICovCiAgICAgLyogICAgICB0cmFuc2ZlciBieSBETUEsIGFuZCBETUEgcmVxdWVzdHMgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIC8qICAgIC0gU2V0IEFEQyBncm91cCByZWd1bGFyIG92ZXJydW4gYmVoYXZpb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllLCBBREMgdHJpZ2dlciBlZGdlIGlzIHNldCB0byB2YWx1ZSAweDAgYnkgICAgICovCisgICAgLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyB0cmlnZ2VyIGVkZ2UgaXMgc2V0IHRvIHZhbHVlIDB4MCBieSAgICAqLwogICAgIC8qICAgICAgIHNldHRpbmcgb2YgdHJpZ2dlciBzb3VyY2UgdG8gU1cgc3RhcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBpZiAoQURDX1JFR19Jbml0U3RydWN0LT5TZXF1ZW5jZXJMZW5ndGggIT0gTExfQURDX1JFR19TRVFfU0NBTl9ESVNBQkxFKQogICAgIHsKQEAgLTkwNCw3ICs5MTAsNyBAQAogewogICAvKiBTZXQgQURDX1JFR19Jbml0U3RydWN0IGZpZWxkcyB0byBkZWZhdWx0IHZhbHVlcyAqLwogICAvKiBTZXQgZmllbGRzIG9mIEFEQyBncm91cCByZWd1bGFyICovCi0gIC8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWUsIEFEQyB0cmlnZ2VyIGVkZ2UgaXMgc2V0IHRvIHZhbHVlIDB4MCBieSAgICAgICAqLworICAvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgQURDIHRyaWdnZXIgZWRnZSBpcyBzZXQgdG8gdmFsdWUgMHgwIGJ5ICAgICAgKi8KICAgLyogICAgICAgc2V0dGluZyBvZiB0cmlnZ2VyIHNvdXJjZSB0byBTVyBzdGFydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEFEQ19SRUdfSW5pdFN0cnVjdC0+VHJpZ2dlclNvdXJjZSAgICA9IExMX0FEQ19SRUdfVFJJR19TT0ZUV0FSRTsKICAgQURDX1JFR19Jbml0U3RydWN0LT5TZXF1ZW5jZXJMZW5ndGggID0gTExfQURDX1JFR19TRVFfU0NBTl9ESVNBQkxFOwpAQCAtOTcxLDcgKzk3Nyw3IEBACiAgICAgLyogICAgLSBTZXQgQURDIGdyb3VwIGluamVjdGVkIHNlcXVlbmNlciBkaXNjb250aW51b3VzIG1vZGUgICAgICAgICAgICAgICAqLwogICAgIC8qICAgIC0gU2V0IEFEQyBncm91cCBpbmplY3RlZCBjb252ZXJzaW9uIHRyaWdnZXI6IGluZGVwZW5kZW50IG9yICAgICAgICAgKi8KICAgICAvKiAgICAgIGZyb20gQURDIGdyb3VwIHJlZ3VsYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgQURDIHRyaWdnZXIgZWRnZSBpcyBzZXQgdG8gdmFsdWUgMHgwIGJ5ICAgICAqLworICAgIC8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBBREMgdHJpZ2dlciBlZGdlIGlzIHNldCB0byB2YWx1ZSAweDAgYnkgICAgKi8KICAgICAvKiAgICAgICBzZXR0aW5nIG9mIHRyaWdnZXIgc291cmNlIHRvIFNXIHN0YXJ0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgaWYgKEFEQ19JTkpfSW5pdFN0cnVjdC0+U2VxdWVuY2VyTGVuZ3RoICE9IExMX0FEQ19SRUdfU0VRX1NDQU5fRElTQUJMRSkKICAgICB7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2xsX2NvbXAuYyBiL1NyYy9zdG0zMmw0eHhfbGxfY29tcC5jCmluZGV4IGJjZDIzYjQuLmJhZGExMTAgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfbGxfY29tcC5jCisrKyBiL1NyYy9zdG0zMmw0eHhfbGxfY29tcC5jCkBAIC01NSw3ICs1NSw3IEBACiAgICB8fCAoKF9fUE9XRVJfTU9ERV9fKSA9PSBMTF9DT01QX1BPV0VSTU9ERV9VTFRSQUxPV1BPV0VSKSAgICAgICAgICAgICAgICAgICAgXAogICApCiAKLS8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWUsIGNvbXBhcmF0b3IgaW5wdXQgcGx1cyBwYXJhbWV0ZXJzIGFyZSAgICAgICAgICAgICovCisvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgY29tcGFyYXRvciBpbnB1dCBwbHVzIHBhcmFtZXRlcnMgYXJlICAgICAgICAgICAqLwogLyogICAgICAgdGhlIHNhbWUgb24gYWxsIENPTVAgaW5zdGFuY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgIEhvd2V2ZXIsIGNvbXBhcmF0b3IgaW5zdGFuY2Uga2VwdCBhcyBtYWNybyBwYXJhbWV0ZXIgZm9yICAgICAgICAgICAgICovCiAvKiAgICAgICBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgU1RNMzIgZmFtaWxpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNzIsNyArNzIsNyBAQAogICApCiAjZW5kaWYKIAotLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgY29tcGFyYXRvciBpbnB1dCBtaW51cyBwYXJhbWV0ZXJzIGFyZSAgICAgICAgICAgKi8KKy8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBjb21wYXJhdG9yIGlucHV0IG1pbnVzIHBhcmFtZXRlcnMgYXJlICAgICAgICAgICovCiAvKiAgICAgICB0aGUgc2FtZSBvbiBhbGwgQ09NUCBpbnN0YW5jZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgSG93ZXZlciwgY29tcGFyYXRvciBpbnN0YW5jZSBrZXB0IGFzIG1hY3JvIHBhcmFtZXRlciBmb3IgICAgICAgICAgICAgKi8KIC8qICAgICAgIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBTVE0zMiBmYW1pbGllcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2xsX2ZtYy5jIGIvU3JjL3N0bTMybDR4eF9sbF9mbWMuYwppbmRleCBkNjk5MjQ4Li5kNGRhZTI3IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2xsX2ZtYy5jCisrKyBiL1NyYy9zdG0zMmw0eHhfbGxfZm1jLmMKQEAgLTE2LDcgKzE2LDcgQEAKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFsuLl0gVGhlIEZsZXhpYmxlIG1lbW9yeSBjb250cm9sbGVyIChGTUMpIGluY2x1ZGVzIGZvbGxvd2luZyBtZW1vcnkgY29udHJvbGxlcnM6CiAgICAgICAgKCspIFRoZSBOT1IvUFNSQU0gbWVtb3J5IGNvbnRyb2xsZXIKLQkgICAoKykgVGhlIE5BTkQgbWVtb3J5IGNvbnRyb2xsZXIKKyAgICAgKCspIFRoZSBOQU5EIG1lbW9yeSBjb250cm9sbGVyCiAKICAgWy4uXSBUaGUgRk1DIGZ1bmN0aW9uYWwgYmxvY2sgbWFrZXMgdGhlIGludGVyZmFjZSB3aXRoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgc3RhdGljCiAgICAgICAgbWVtb3JpZXMuIEl0cyBtYWluIHB1cnBvc2VzIGFyZToKQEAgLTY0LDcgKzY0LDcgQEAKICAgKiBAYnJpZWYgRk1DIGRyaXZlciBtb2R1bGVzCiAgICogQHsKICAgKi8KLQkKKwogLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTE5OCw3ICsxOTgsOCBAQAogICAqIEBwYXJhbSAgSW5pdCBQb2ludGVyIHRvIE5PUlNSQU0gSW5pdGlhbGl6YXRpb24gc3RydWN0dXJlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiAgRk1DX05PUlNSQU1fSW5pdChGTUNfTk9SU1JBTV9UeXBlRGVmICpEZXZpY2UsIEZNQ19OT1JTUkFNX0luaXRUeXBlRGVmICpJbml0KQorSEFMX1N0YXR1c1R5cGVEZWYgIEZNQ19OT1JTUkFNX0luaXQoRk1DX05PUlNSQU1fVHlwZURlZiAqRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05PUlNSQU1fSW5pdFR5cGVEZWYgKkluaXQpCiB7CiAgIHVpbnQzMl90IGZsYXNoYWNjZXNzOwogICB1aW50MzJfdCBidGNyX3JlZzsKQEAgLTMwNiw3ICszMDcsNyBAQAogI2lmIGRlZmluZWQoRk1DX1BDU0NOVFJfQ1NDT1VOVCkKIAogICAvKiBDaGVjayBQU1JBTSBjaGlwIHNlbGVjdCBjb3VudGVyIHN0YXRlICovCi0gIGlmKEluaXQtPk1heENoaXBTZWxlY3RQdWxzZSA9PSBFTkFCTEUpCisgIGlmIChJbml0LT5NYXhDaGlwU2VsZWN0UHVsc2UgPT0gRU5BQkxFKQogICB7CiAgICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgICBhc3NlcnRfcGFyYW0oSVNfRk1DX01BWF9DSElQX1NFTEVDVF9QVUxTRV9USU1FKEluaXQtPk1heENoaXBTZWxlY3RQdWxzZVRpbWUpKTsKQEAgLTM0OSw3ICszNTAsOCBAQAogICAqIEBwYXJhbSAgQmFuayBOT1JTUkFNIGJhbmsgbnVtYmVyCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBGTUNfTk9SU1JBTV9EZUluaXQoRk1DX05PUlNSQU1fVHlwZURlZiAqRGV2aWNlLCBGTUNfTk9SU1JBTV9FWFRFTkRFRF9UeXBlRGVmICpFeERldmljZSwgdWludDMyX3QgQmFuaykKK0hBTF9TdGF0dXNUeXBlRGVmIEZNQ19OT1JTUkFNX0RlSW5pdChGTUNfTk9SU1JBTV9UeXBlRGVmICpEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05PUlNSQU1fRVhURU5ERURfVHlwZURlZiAqRXhEZXZpY2UsIHVpbnQzMl90IEJhbmspCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19GTUNfTk9SU1JBTV9ERVZJQ0UoRGV2aWNlKSk7CkBAIC0zNzYsMjcgKzM3OCwyNyBAQAogI2lmIGRlZmluZWQoRk1DX1BDU0NOVFJfQ1NDT1VOVCkKIAogICAvKiBEZS1pbml0aWFsaXplIFBTUkFNIGNoaXAgc2VsZWN0IGNvdW50ZXIgKi8KLSAgICBzd2l0Y2ggKEJhbmspCi0gICAgewotICAgICAgY2FzZSBGTUNfTk9SU1JBTV9CQU5LMSA6Ci0gICAgICAgIENMRUFSX0JJVChEZXZpY2UtPlBDU0NOVFIsIEZNQ19QQ1NDTlRSX0NOVEIxRU4pOwotICAgICAgICBicmVhazsKKyAgc3dpdGNoIChCYW5rKQorICB7CisgICAgY2FzZSBGTUNfTk9SU1JBTV9CQU5LMSA6CisgICAgICBDTEVBUl9CSVQoRGV2aWNlLT5QQ1NDTlRSLCBGTUNfUENTQ05UUl9DTlRCMUVOKTsKKyAgICAgIGJyZWFrOwogCi0gICAgICBjYXNlIEZNQ19OT1JTUkFNX0JBTksyIDoKLSAgICAgICAgQ0xFQVJfQklUKERldmljZS0+UENTQ05UUiwgRk1DX1BDU0NOVFJfQ05UQjJFTik7Ci0gICAgICAgIGJyZWFrOworICAgIGNhc2UgRk1DX05PUlNSQU1fQkFOSzIgOgorICAgICAgQ0xFQVJfQklUKERldmljZS0+UENTQ05UUiwgRk1DX1BDU0NOVFJfQ05UQjJFTik7CisgICAgICBicmVhazsKIAotICAgICAgY2FzZSBGTUNfTk9SU1JBTV9CQU5LMyA6Ci0gICAgICAgIENMRUFSX0JJVChEZXZpY2UtPlBDU0NOVFIsIEZNQ19QQ1NDTlRSX0NOVEIzRU4pOwotICAgICAgICBicmVhazsKKyAgICBjYXNlIEZNQ19OT1JTUkFNX0JBTkszIDoKKyAgICAgIENMRUFSX0JJVChEZXZpY2UtPlBDU0NOVFIsIEZNQ19QQ1NDTlRSX0NOVEIzRU4pOworICAgICAgYnJlYWs7CiAKLSAgICAgIGNhc2UgRk1DX05PUlNSQU1fQkFOSzQgOgotICAgICAgICBDTEVBUl9CSVQoRGV2aWNlLT5QQ1NDTlRSLCBGTUNfUENTQ05UUl9DTlRCNEVOKTsKLSAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGTUNfTk9SU1JBTV9CQU5LNCA6CisgICAgICBDTEVBUl9CSVQoRGV2aWNlLT5QQ1NDTlRSLCBGTUNfUENTQ05UUl9DTlRCNEVOKTsKKyAgICAgIGJyZWFrOwogCi0gICAgICBkZWZhdWx0IDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGRlZmF1bHQgOgorICAgICAgYnJlYWs7CisgIH0KICNlbmRpZiAvKiBGTUNfUENTQ05UUl9DU0NPVU5UICovCiAKICAgcmV0dXJuIEhBTF9PSzsKQEAgLTQxMCw3ICs0MTIsOCBAQAogICAqIEBwYXJhbSAgQmFuayBOT1JTUkFNIGJhbmsgbnVtYmVyCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBGTUNfTk9SU1JBTV9UaW1pbmdfSW5pdChGTUNfTk9SU1JBTV9UeXBlRGVmICpEZXZpY2UsIEZNQ19OT1JTUkFNX1RpbWluZ1R5cGVEZWYgKlRpbWluZywgdWludDMyX3QgQmFuaykKK0hBTF9TdGF0dXNUeXBlRGVmIEZNQ19OT1JTUkFNX1RpbWluZ19Jbml0KEZNQ19OT1JTUkFNX1R5cGVEZWYgKkRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OT1JTUkFNX1RpbWluZ1R5cGVEZWYgKlRpbWluZywgdWludDMyX3QgQmFuaykKIHsKICAgdWludDMyX3QgdG1wcjsKIApAQCAtNDMwLDE1ICs0MzMsMTUgQEAKIAogICAvKiBTZXQgRk1DX05PUlNSQU0gZGV2aWNlIHRpbWluZyBwYXJhbWV0ZXJzICovCiAgIE1PRElGWV9SRUcoRGV2aWNlLT5CVENSW0JhbmsgKyAxVV0sIEJUUl9DTEVBUl9NQVNLLCAoVGltaW5nLT5BZGRyZXNzU2V0dXBUaW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVGltaW5nLT5BZGRyZXNzSG9sZFRpbWUpICAgICAgICA8PCBGTUNfQlRSeF9BRERITERfUG9zKSAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUaW1pbmctPkRhdGFTZXR1cFRpbWUpICAgICAgICAgIDw8IEZNQ19CVFJ4X0RBVEFTVF9Qb3MpICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUaW1pbmctPkFkZHJlc3NIb2xkVGltZSkgICAgICAgIDw8IEZNQ19CVFJ4X0FEREhMRF9Qb3MpICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUaW1pbmctPkRhdGFTZXR1cFRpbWUpICAgICAgICAgIDw8IEZNQ19CVFJ4X0RBVEFTVF9Qb3MpICB8CiAjaWYgZGVmaW5lZChGTUNfQlRSeF9EQVRBSExEKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUaW1pbmctPkRhdGFIb2xkVGltZSkgICAgICAgICAgIDw8IEZNQ19CVFJ4X0RBVEFITERfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUaW1pbmctPkRhdGFIb2xkVGltZSkgICAgICAgICAgIDw8IEZNQ19CVFJ4X0RBVEFITERfUG9zKSB8CiAjZW5kaWYgLyogRk1DX0JUUnhfREFUQUhMRCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUaW1pbmctPkJ1c1R1cm5Bcm91bmREdXJhdGlvbikgIDw8IEZNQ19CVFJ4X0JVU1RVUk5fUG9zKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChUaW1pbmctPkNMS0RpdmlzaW9uKSAtIDFVKSAgICAgPDwgRk1DX0JUUnhfQ0xLRElWX1BvcykgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFRpbWluZy0+RGF0YUxhdGVuY3kpIC0gMlUpICAgICA8PCBGTUNfQlRSeF9EQVRMQVRfUG9zKSAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRpbWluZy0+QWNjZXNzTW9kZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRpbWluZy0+QnVzVHVybkFyb3VuZER1cmF0aW9uKSAgPDwgRk1DX0JUUnhfQlVTVFVSTl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChUaW1pbmctPkNMS0RpdmlzaW9uKSAtIDFVKSAgICAgPDwgRk1DX0JUUnhfQ0xLRElWX1BvcykgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChUaW1pbmctPkRhdGFMYXRlbmN5KSAtIDJVKSAgICAgPDwgRk1DX0JUUnhfREFUTEFUX1BvcykgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVGltaW5nLT5BY2Nlc3NNb2RlKSkpOwogCiAgIC8qIENvbmZpZ3VyZSBDbG9jayBkaXZpc2lvbiB2YWx1ZSAoaW4gTk9SU1JBTSBiYW5rIDEpIHdoZW4gY29udGludW91cyBjbG9jayBpcyBlbmFibGVkICovCiAgIGlmIChIQUxfSVNfQklUX1NFVChEZXZpY2UtPkJUQ1JbRk1DX05PUlNSQU1fQkFOSzFdLCBGTUNfQkNSMV9DQ0xLRU4pKQpAQCAtNDYzLDcgKzQ2Niw4IEBACiAgICogICAgICAgICAgICBAYXJnIEZNQ19FWFRFTkRFRF9NT0RFX0VOQUJMRQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgRk1DX05PUlNSQU1fRXh0ZW5kZWRfVGltaW5nX0luaXQoRk1DX05PUlNSQU1fRVhURU5ERURfVHlwZURlZiAqRGV2aWNlLCBGTUNfTk9SU1JBTV9UaW1pbmdUeXBlRGVmICpUaW1pbmcsIHVpbnQzMl90IEJhbmssIHVpbnQzMl90IEV4dGVuZGVkTW9kZSkKK0hBTF9TdGF0dXNUeXBlRGVmIEZNQ19OT1JTUkFNX0V4dGVuZGVkX1RpbWluZ19Jbml0KEZNQ19OT1JTUkFNX0VYVEVOREVEX1R5cGVEZWYgKkRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OT1JTUkFNX1RpbWluZ1R5cGVEZWYgKlRpbWluZywgdWludDMyX3QgQmFuaywgdWludDMyX3QgRXh0ZW5kZWRNb2RlKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfRk1DX0VYVEVOREVEX01PREUoRXh0ZW5kZWRNb2RlKSk7CkBAIC01MTEsOCArNTE1LDggQEAKICAgKi8KIAogLyoqIEBhZGR0b2dyb3VwIEZNQ19MTF9OT1JTUkFNX1ByaXZhdGVfRnVuY3Rpb25zX0dyb3VwMgotICogIEBicmllZiAgIG1hbmFnZW1lbnQgZnVuY3Rpb25zCi0gKgorICAqICBAYnJpZWYgICBtYW5hZ2VtZW50IGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgRk1DX05PUlNSQU0gQ29udHJvbCBmdW5jdGlvbnMgIyMjIyMKQEAgLTU5OCw4ICs2MDIsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIEZNQ19MTF9OQU5EX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwotICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAjIyMjIyBJbml0aWFsaXphdGlvbiBhbmQgZGVfaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICMjIyMjCkBAIC02NTMsNyArNjU3LDggQEAKICAgKiBAcGFyYW0gIEJhbmsgTkFORCBiYW5rIG51bWJlcgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgRk1DX05BTkRfQ29tbW9uU3BhY2VfVGltaW5nX0luaXQoRk1DX05BTkRfVHlwZURlZiAqRGV2aWNlLCBGTUNfTkFORF9QQ0NfVGltaW5nVHlwZURlZiAqVGltaW5nLCB1aW50MzJfdCBCYW5rKQorSEFMX1N0YXR1c1R5cGVEZWYgRk1DX05BTkRfQ29tbW9uU3BhY2VfVGltaW5nX0luaXQoRk1DX05BTkRfVHlwZURlZiAqRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05BTkRfUENDX1RpbWluZ1R5cGVEZWYgKlRpbWluZywgdWludDMyX3QgQmFuaykKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0ZNQ19OQU5EX0RFVklDRShEZXZpY2UpKTsKQEAgLTY4Myw3ICs2ODgsOCBAQAogICAqIEBwYXJhbSAgQmFuayBOQU5EIGJhbmsgbnVtYmVyCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBGTUNfTkFORF9BdHRyaWJ1dGVTcGFjZV9UaW1pbmdfSW5pdChGTUNfTkFORF9UeXBlRGVmICpEZXZpY2UsIEZNQ19OQU5EX1BDQ19UaW1pbmdUeXBlRGVmICpUaW1pbmcsIHVpbnQzMl90IEJhbmspCitIQUxfU3RhdHVzVHlwZURlZiBGTUNfTkFORF9BdHRyaWJ1dGVTcGFjZV9UaW1pbmdfSW5pdChGTUNfTkFORF9UeXBlRGVmICpEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTUNfTkFORF9QQ0NfVGltaW5nVHlwZURlZiAqVGltaW5nLCB1aW50MzJfdCBCYW5rKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfRk1DX05BTkRfREVWSUNFKERldmljZSkpOwpAQCAtODA0LDcgKzgxMCw4IEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgd2FpdCB2YWx1ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgRk1DX05BTkRfR2V0RUNDKEZNQ19OQU5EX1R5cGVEZWYgKkRldmljZSwgdWludDMyX3QgKkVDQ3ZhbCwgdWludDMyX3QgQmFuaywgdWludDMyX3QgVGltZW91dCkKK0hBTF9TdGF0dXNUeXBlRGVmIEZNQ19OQU5EX0dldEVDQyhGTUNfTkFORF9UeXBlRGVmICpEZXZpY2UsIHVpbnQzMl90ICpFQ0N2YWwsIHVpbnQzMl90IEJhbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCkKIHsKICAgdWludDMyX3QgdGlja3N0YXJ0OwogCkBAIC04NTYsNSArODYzLDggQEAKIC8qKgogICAqIEB9CiAgICovCisvKioKKyAgKiBAfQorICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9sbF9scHRpbS5jIGIvU3JjL3N0bTMybDR4eF9sbF9scHRpbS5jCmluZGV4IGQ5Yjk0YjkuLmU4ZGUzYTMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfbGxfbHB0aW0uYworKysgYi9TcmMvc3RtMzJsNHh4X2xsX2xwdGltLmMKQEAgLTIxMCwxNiArMjEwLDE2IEBACiAgIC8qIFNhdmUgTFBUSU0gc291cmNlIGNsb2NrICovCiAgIHN3aXRjaCAoKHVpbnQzMl90KUxQVElNeCkKICAgewotICAgICBjYXNlIExQVElNMV9CQVNFOgotICAgICAgIHRtcGNsa3NvdXJjZSA9IExMX1JDQ19HZXRMUFRJTUNsb2NrU291cmNlKExMX1JDQ19MUFRJTTFfQ0xLU09VUkNFKTsKLSAgICAgICBicmVhazsKKyAgICBjYXNlIExQVElNMV9CQVNFOgorICAgICAgdG1wY2xrc291cmNlID0gTExfUkNDX0dldExQVElNQ2xvY2tTb3VyY2UoTExfUkNDX0xQVElNMV9DTEtTT1VSQ0UpOworICAgICAgYnJlYWs7CiAjaWYgZGVmaW5lZChMUFRJTTIpCi0gICAgIGNhc2UgTFBUSU0yX0JBU0U6Ci0gICAgICAgdG1wY2xrc291cmNlID0gTExfUkNDX0dldExQVElNQ2xvY2tTb3VyY2UoTExfUkNDX0xQVElNMl9DTEtTT1VSQ0UpOwotICAgICAgIGJyZWFrOworICAgIGNhc2UgTFBUSU0yX0JBU0U6CisgICAgICB0bXBjbGtzb3VyY2UgPSBMTF9SQ0NfR2V0TFBUSU1DbG9ja1NvdXJjZShMTF9SQ0NfTFBUSU0yX0NMS1NPVVJDRSk7CisgICAgICBicmVhazsKICNlbmRpZiAvKiBMUFRJTTIgKi8KLSAgICAgZGVmYXVsdDoKLSAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CiAgIH0KIAogICAvKiBTYXZlIExQVElNIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCkBAIC0yNDcsMTYgKzI0NywxNiBAQAogICAgIC8qIEZvcmNlIExQVElNIHNvdXJjZSBrZXJuZWwgY2xvY2sgZnJvbSBBUEIgKi8KICAgICBzd2l0Y2ggKCh1aW50MzJfdClMUFRJTXgpCiAgICAgewotICAgICAgIGNhc2UgTFBUSU0xX0JBU0U6Ci0gICAgICAgICBMTF9SQ0NfU2V0TFBUSU1DbG9ja1NvdXJjZShMTF9SQ0NfTFBUSU0xX0NMS1NPVVJDRV9QQ0xLMSk7Ci0gICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTFBUSU0xX0JBU0U6CisgICAgICAgIExMX1JDQ19TZXRMUFRJTUNsb2NrU291cmNlKExMX1JDQ19MUFRJTTFfQ0xLU09VUkNFX1BDTEsxKTsKKyAgICAgICAgYnJlYWs7CiAjaWYgZGVmaW5lZChMUFRJTTIpCi0gICAgICAgY2FzZSBMUFRJTTJfQkFTRToKLSAgICAgICAgIExMX1JDQ19TZXRMUFRJTUNsb2NrU291cmNlKExMX1JDQ19MUFRJTTJfQ0xLU09VUkNFX1BDTEsxKTsKLSAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBMUFRJTTJfQkFTRToKKyAgICAgICAgTExfUkNDX1NldExQVElNQ2xvY2tTb3VyY2UoTExfUkNDX0xQVElNMl9DTEtTT1VSQ0VfUENMSzEpOworICAgICAgICBicmVhazsKICNlbmRpZiAvKiBMUFRJTTIgKi8KLSAgICAgICBkZWZhdWx0OgotICAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAodG1wQ01QICE9IDBVTCkKQEAgLTI2OSw3ICsyNjksOCBAQAogICAgICAgZG8KICAgICAgIHsKICAgICAgICAgcmNjX2Nsb2NrLlNZU0NMS19GcmVxdWVuY3ktLTsgLyogVXNlZCBmb3IgdGltZW91dCAqLwotICAgICAgfSB3aGlsZSAoKChMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQ01QT0soTFBUSU14KSAhPSAxVUwpKSAmJiAoKHJjY19jbG9jay5TWVNDTEtfRnJlcXVlbmN5KSA+IDBVTCkpOworICAgICAgfQorICAgICAgd2hpbGUgKCgoTExfTFBUSU1fSXNBY3RpdmVGbGFnX0NNUE9LKExQVElNeCkgIT0gMVVMKSkgJiYgKChyY2NfY2xvY2suU1lTQ0xLX0ZyZXF1ZW5jeSkgPiAwVUwpKTsKIAogICAgICAgTExfTFBUSU1fQ2xlYXJGbGFnX0NNUE9LKExQVElNeCk7CiAgICAgfQpAQCAtMjg0LDcgKzI4NSw4IEBACiAgICAgICBkbwogICAgICAgewogICAgICAgICByY2NfY2xvY2suU1lTQ0xLX0ZyZXF1ZW5jeS0tOyAvKiBVc2VkIGZvciB0aW1lb3V0ICovCi0gICAgICB9IHdoaWxlICgoKExMX0xQVElNX0lzQWN0aXZlRmxhZ19BUlJPSyhMUFRJTXgpICE9IDFVTCkpICYmICgocmNjX2Nsb2NrLlNZU0NMS19GcmVxdWVuY3kpID4gMFVMKSk7CisgICAgICB9CisgICAgICB3aGlsZSAoKChMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQVJST0soTFBUSU14KSAhPSAxVUwpKSAmJiAoKHJjY19jbG9jay5TWVNDTEtfRnJlcXVlbmN5KSA+IDBVTCkpOwogCiAgICAgICBMTF9MUFRJTV9DbGVhckZsYWdfQVJST0soTFBUSU14KTsKICAgICB9CkBAIC0zMDAsNyArMzAyLDggQEAKICAgICAgIGRvCiAgICAgICB7CiAgICAgICAgIHJjY19jbG9jay5TWVNDTEtfRnJlcXVlbmN5LS07IC8qIFVzZWQgZm9yIHRpbWVvdXQgKi8KLSAgICAgIH0gd2hpbGUgKCgoTExfTFBUSU1fSXNBY3RpdmVGbGFnX1JFUE9LKExQVElNeCkgIT0gMVVMKSkgJiYgKChyY2NfY2xvY2suU1lTQ0xLX0ZyZXF1ZW5jeSkgPiAwVUwpKTsKKyAgICAgIH0KKyAgICAgIHdoaWxlICgoKExMX0xQVElNX0lzQWN0aXZlRmxhZ19SRVBPSyhMUFRJTXgpICE9IDFVTCkpICYmICgocmNjX2Nsb2NrLlNZU0NMS19GcmVxdWVuY3kpID4gMFVMKSk7CiAKICAgICAgIExMX0xQVElNX0NsZWFyRmxhZ19SRVBPSyhMUFRJTXgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfbGxfcmNjLmMgYi9TcmMvc3RtMzJsNHh4X2xsX3JjYy5jCmluZGV4IDFhMTQwNmEuLmU4MjY0YTkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfbGxfcmNjLmMKKysrIGIvU3JjL3N0bTMybDR4eF9sbF9yY2MuYwpAQCAtMjA4LDcgKzIwOCwxMSBAQAogICBMTF9SQ0NfTVNJX1NldENhbGliVHJpbW1pbmcoMCk7CiAKICAgLyogU2V0IEhTSVRSSU0gYml0cyB0byB0aGUgcmVzZXQgdmFsdWUqLworI2lmIGRlZmluZWQoUkNDX0lDU0NSX0hTSVRSSU1fNikKKyAgTExfUkNDX0hTSV9TZXRDYWxpYlRyaW1taW5nKDB4NDBVKTsKKyNlbHNlCiAgIExMX1JDQ19IU0lfU2V0Q2FsaWJUcmltbWluZygweDEwVSk7CisjZW5kaWYgLyogUkNDX0lDU0NSX0hTSVRSSU1fNiAqLwogCiAgIC8qIFJlc2V0IENGR1IgcmVnaXN0ZXIgKi8KICAgTExfUkNDX1dyaXRlUmVnKENGR1IsIDB4MDAwMDAwMDBVKTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfbGxfc2RtbWMuYyBiL1NyYy9zdG0zMmw0eHhfbGxfc2RtbWMuYwppbmRleCA3YzliMThjLi4wZTFjYWQyIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2xsX3NkbW1jLmMKKysrIGIvU3JjL3N0bTMybDR4eF9sbF9zZG1tYy5jCkBAIC0xODUsMTEgKzE4NSw2IEBACiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB1aW50MzJfdCBTRE1NQ19HZXRDbWRFcnJvcihTRE1NQ19UeXBlRGVmICpTRE1NQ3gpOwotc3RhdGljIHVpbnQzMl90IFNETU1DX0dldENtZFJlc3AxKFNETU1DX1R5cGVEZWYgKlNETU1DeCwgdWludDhfdCBTRF9DTUQsIHVpbnQzMl90IFRpbWVvdXQpOwotc3RhdGljIHVpbnQzMl90IFNETU1DX0dldENtZFJlc3AyKFNETU1DX1R5cGVEZWYgKlNETU1DeCk7Ci1zdGF0aWMgdWludDMyX3QgU0RNTUNfR2V0Q21kUmVzcDMoU0RNTUNfVHlwZURlZiAqU0RNTUN4KTsKLXN0YXRpYyB1aW50MzJfdCBTRE1NQ19HZXRDbWRSZXNwNyhTRE1NQ19UeXBlRGVmICpTRE1NQ3gpOwotc3RhdGljIHVpbnQzMl90IFNETU1DX0dldENtZFJlc3A2KFNETU1DX1R5cGVEZWYgKlNETU1DeCwgdWludDhfdCBTRF9DTUQsIHVpbnQxNl90ICpwUkNBKTsKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNzY0LDE1ICs3NTksMTYgQEAKIC8qKgogICAqIEBicmllZiAgU2VuZCB0aGUgRXJhc2UgY29tbWFuZCBhbmQgY2hlY2sgdGhlIHJlc3BvbnNlCiAgICogQHBhcmFtICBTRE1NQ3ggUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlCisgICogQHBhcmFtICBFcmFzZVR5cGUgVHlwZSBvZiBlcmFzZSB0byBiZSBwZXJmb3JtZWQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLXVpbnQzMl90IFNETU1DX0NtZEVyYXNlKFNETU1DX1R5cGVEZWYgKlNETU1DeCkKK3VpbnQzMl90IFNETU1DX0NtZEVyYXNlKFNETU1DX1R5cGVEZWYgKlNETU1DeCwgdWludDMyX3QgRXJhc2VUeXBlKQogewogICBTRE1NQ19DbWRJbml0VHlwZURlZiAgc2RtbWNfY21kaW5pdDsKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKIAogICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLwotICBzZG1tY19jbWRpbml0LkFyZ3VtZW50ICAgICAgICAgPSAwVTsKKyAgc2RtbWNfY21kaW5pdC5Bcmd1bWVudCAgICAgICAgID0gRXJhc2VUeXBlOwogICBzZG1tY19jbWRpbml0LkNtZEluZGV4ICAgICAgICAgPSBTRE1NQ19DTURfRVJBU0U7CiAgIHNkbW1jX2NtZGluaXQuUmVzcG9uc2UgICAgICAgICA9IFNETU1DX1JFU1BPTlNFX1NIT1JUOwogICBzZG1tY19jbWRpbml0LldhaXRGb3JJbnRlcnJ1cHQgPSBTRE1NQ19XQUlUX05POwpAQCAtMTA3Niw2ICsxMDcyLDMxIEBACiB9CiAKIC8qKgorICAqIEBicmllZiAgU2VuZCB0aGUgU2V0IFJlbGF0aXZlIEFkZHJlc3MgY29tbWFuZCB0byBNTUMgY2FyZCAobm90IFNEIGNhcmQpLgorICAqIEBwYXJhbSAgU0RNTUN4IFBvaW50ZXIgdG8gU0RNTUMgcmVnaXN0ZXIgYmFzZQorICAqIEBwYXJhbSAgUkNBIENhcmQgUkNBCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCit1aW50MzJfdCBTRE1NQ19DbWRTZXRSZWxBZGRNbWMoU0RNTUNfVHlwZURlZiAqU0RNTUN4LCB1aW50MTZfdCBSQ0EpCit7CisgIFNETU1DX0NtZEluaXRUeXBlRGVmICBzZG1tY19jbWRpbml0OworICB1aW50MzJfdCBlcnJvcnN0YXRlOworCisgIC8qIFNlbmQgQ01EMyBTRF9DTURfU0VUX1JFTF9BRERSICovCisgIHNkbW1jX2NtZGluaXQuQXJndW1lbnQgICAgICAgICA9ICgodWludDMyX3QpUkNBIDw8IDE2VSk7CisgIHNkbW1jX2NtZGluaXQuQ21kSW5kZXggICAgICAgICA9IFNETU1DX0NNRF9TRVRfUkVMX0FERFI7CisgIHNkbW1jX2NtZGluaXQuUmVzcG9uc2UgICAgICAgICA9IFNETU1DX1JFU1BPTlNFX1NIT1JUOworICBzZG1tY19jbWRpbml0LldhaXRGb3JJbnRlcnJ1cHQgPSBTRE1NQ19XQUlUX05POworICBzZG1tY19jbWRpbml0LkNQU00gICAgICAgICAgICAgPSBTRE1NQ19DUFNNX0VOQUJMRTsKKyAgKHZvaWQpU0RNTUNfU2VuZENvbW1hbmQoU0RNTUN4LCAmc2RtbWNfY21kaW5pdCk7CisKKyAgLyogQ2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbnMgKi8KKyAgZXJyb3JzdGF0ZSA9IFNETU1DX0dldENtZFJlc3AxKFNETU1DeCwgU0RNTUNfQ01EX1NFVF9SRUxfQUREUiwgU0RNTUNfQ01EVElNRU9VVCk7CisKKyAgcmV0dXJuIGVycm9yc3RhdGU7Cit9CisKKy8qKgogICAqIEBicmllZiAgU2VuZCB0aGUgU3RhdHVzIGNvbW1hbmQgYW5kIGNoZWNrIHRoZSByZXNwb25zZS4KICAgKiBAcGFyYW0gIFNETU1DeCBQb2ludGVyIHRvIFNETU1DIHJlZ2lzdGVyIGJhc2UKICAgKiBAcGFyYW0gIEFyZ3VtZW50IENvbW1hbmQgQXJndW1lbnQKQEAgLTEyMjgsNTEgKzEyNDksMzMgQEAKICAgKiBAfQogICAqLwogCi0vKiBQcml2YXRlIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBhZGR0b2dyb3VwIFNEX1ByaXZhdGVfRnVuY3Rpb25zCisvKiogQGRlZmdyb3VwIEhBTF9TRE1NQ19MTF9Hcm91cDUgUmVzcG9uc2VzIG1hbmFnZW1lbnQgZnVuY3Rpb25zCisgKiAgQGJyaWVmICAgUmVzcG9uc2VzIGZ1bmN0aW9ucworICoKK0B2ZXJiYXRpbQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgICAgICAgICAgICAjIyMjIyBSZXNwb25zZXMgbWFuYWdlbWVudCBmdW5jdGlvbnMgIyMjIyMKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgWy4uXQorICAgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gbWFuYWdlIHRoZSBuZWVkZWQgcmVzcG9uc2VzLgorCitAZW5kdmVyYmF0aW0KICAgKiBAewogICAqLwotCi0vKioKLSAgKiBAYnJpZWYgIENoZWNrcyBmb3IgZXJyb3IgY29uZGl0aW9ucyBmb3IgQ01EMC4KLSAgKiBAcGFyYW0gIGhzZCBTRCBoYW5kbGUKLSAgKiBAcmV0dmFsIFNEIENhcmQgZXJyb3Igc3RhdGUKLSAgKi8KLXN0YXRpYyB1aW50MzJfdCBTRE1NQ19HZXRDbWRFcnJvcihTRE1NQ19UeXBlRGVmICpTRE1NQ3gpCi17Ci0gIC8qIDggaXMgdGhlIG51bWJlciBvZiByZXF1aXJlZCBpbnN0cnVjdGlvbnMgY3ljbGVzIGZvciB0aGUgYmVsb3cgbG9vcCBzdGF0ZW1lbnQuCi0gIFRoZSBTRE1NQ19DTURUSU1FT1VUIGlzIGV4cHJlc3NlZCBpbiBtcyAqLwotICByZWdpc3RlciB1aW50MzJfdCBjb3VudCA9IFNETU1DX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKLQotICBkbwotICB7Ci0gICAgaWYgKGNvdW50LS0gPT0gMFUpCi0gICAgewotICAgICAgcmV0dXJuIFNETU1DX0VSUk9SX1RJTUVPVVQ7Ci0gICAgfQotCi0gIH13aGlsZSghX19TRE1NQ19HRVRfRkxBRyhTRE1NQ3gsIFNETU1DX0ZMQUdfQ01EU0VOVCkpOwotCi0gIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gIF9fU0RNTUNfQ0xFQVJfRkxBRyhTRE1NQ3gsIFNETU1DX1NUQVRJQ19DTURfRkxBR1MpOwotCi0gIHJldHVybiBTRE1NQ19FUlJPUl9OT05FOwotfQotCiAvKioKICAgKiBAYnJpZWYgIENoZWNrcyBmb3IgZXJyb3IgY29uZGl0aW9ucyBmb3IgUjEgcmVzcG9uc2UuCiAgICogQHBhcmFtICBoc2QgU0QgaGFuZGxlCiAgICogQHBhcmFtICBTRF9DTUQgVGhlIHNlbnQgY29tbWFuZCBpbmRleAogICAqIEByZXR2YWwgU0QgQ2FyZCBlcnJvciBzdGF0ZQogICAqLwotc3RhdGljIHVpbnQzMl90IFNETU1DX0dldENtZFJlc3AxKFNETU1DX1R5cGVEZWYgKlNETU1DeCwgdWludDhfdCBTRF9DTUQsIHVpbnQzMl90IFRpbWVvdXQpCit1aW50MzJfdCBTRE1NQ19HZXRDbWRSZXNwMShTRE1NQ19UeXBlRGVmICpTRE1NQ3gsIHVpbnQ4X3QgU0RfQ01ELCB1aW50MzJfdCBUaW1lb3V0KQogewogICB1aW50MzJfdCByZXNwb25zZV9yMTsKICAgdWludDMyX3Qgc3RhX3JlZzsKIAogICAvKiA4IGlzIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgaW5zdHJ1Y3Rpb25zIGN5Y2xlcyBmb3IgdGhlIGJlbG93IGxvb3Agc3RhdGVtZW50LgogICBUaGUgVGltZW91dCBpcyBleHByZXNzZWQgaW4gbXMgKi8KLSAgcmVnaXN0ZXIgdWludDMyX3QgY291bnQgPSBUaW1lb3V0ICogKFN5c3RlbUNvcmVDbG9jayAvIDhVIC8xMDAwVSk7CisgIHVpbnQzMl90IGNvdW50ID0gVGltZW91dCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOwogCiAgIGRvCiAgIHsKQEAgLTE0MDUsMTIgKzE0MDgsMTIgQEAKICAgKiBAcGFyYW0gIGhzZCBTRCBoYW5kbGUKICAgKiBAcmV0dmFsIFNEIENhcmQgZXJyb3Igc3RhdGUKICAgKi8KLXN0YXRpYyB1aW50MzJfdCBTRE1NQ19HZXRDbWRSZXNwMihTRE1NQ19UeXBlRGVmICpTRE1NQ3gpCit1aW50MzJfdCBTRE1NQ19HZXRDbWRSZXNwMihTRE1NQ19UeXBlRGVmICpTRE1NQ3gpCiB7CiAgIHVpbnQzMl90IHN0YV9yZWc7CiAgIC8qIDggaXMgdGhlIG51bWJlciBvZiByZXF1aXJlZCBpbnN0cnVjdGlvbnMgY3ljbGVzIGZvciB0aGUgYmVsb3cgbG9vcCBzdGF0ZW1lbnQuCiAgIFRoZSBTRE1NQ19DTURUSU1FT1VUIGlzIGV4cHJlc3NlZCBpbiBtcyAqLwotICByZWdpc3RlciB1aW50MzJfdCBjb3VudCA9IFNETU1DX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKKyAgdWludDMyX3QgY291bnQgPSBTRE1NQ19DTURUSU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvIDhVIC8xMDAwVSk7CiAKICAgZG8KICAgewpAQCAtMTQ0OSwxMiArMTQ1MiwxMiBAQAogICAqIEBwYXJhbSAgaHNkIFNEIGhhbmRsZQogICAqIEByZXR2YWwgU0QgQ2FyZCBlcnJvciBzdGF0ZQogICAqLwotc3RhdGljIHVpbnQzMl90IFNETU1DX0dldENtZFJlc3AzKFNETU1DX1R5cGVEZWYgKlNETU1DeCkKK3VpbnQzMl90IFNETU1DX0dldENtZFJlc3AzKFNETU1DX1R5cGVEZWYgKlNETU1DeCkKIHsKICAgdWludDMyX3Qgc3RhX3JlZzsKICAgLyogOCBpcyB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGluc3RydWN0aW9ucyBjeWNsZXMgZm9yIHRoZSBiZWxvdyBsb29wIHN0YXRlbWVudC4KICAgVGhlIFNETU1DX0NNRFRJTUVPVVQgaXMgZXhwcmVzc2VkIGluIG1zICovCi0gIHJlZ2lzdGVyIHVpbnQzMl90IGNvdW50ID0gU0RNTUNfQ01EVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IFNETU1DX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKIAogICBkbwogICB7CkBAIC0xNDg5LDE0ICsxNDkyLDE0IEBACiAgICogICAgICAgICBhZGRyZXNzIFJDQQogICAqIEByZXR2YWwgU0QgQ2FyZCBlcnJvciBzdGF0ZQogICAqLwotc3RhdGljIHVpbnQzMl90IFNETU1DX0dldENtZFJlc3A2KFNETU1DX1R5cGVEZWYgKlNETU1DeCwgdWludDhfdCBTRF9DTUQsIHVpbnQxNl90ICpwUkNBKQordWludDMyX3QgU0RNTUNfR2V0Q21kUmVzcDYoU0RNTUNfVHlwZURlZiAqU0RNTUN4LCB1aW50OF90IFNEX0NNRCwgdWludDE2X3QgKnBSQ0EpCiB7CiAgIHVpbnQzMl90IHJlc3BvbnNlX3IxOwogICB1aW50MzJfdCBzdGFfcmVnOwogCiAgIC8qIDggaXMgdGhlIG51bWJlciBvZiByZXF1aXJlZCBpbnN0cnVjdGlvbnMgY3ljbGVzIGZvciB0aGUgYmVsb3cgbG9vcCBzdGF0ZW1lbnQuCiAgIFRoZSBTRE1NQ19DTURUSU1FT1VUIGlzIGV4cHJlc3NlZCBpbiBtcyAqLwotICByZWdpc3RlciB1aW50MzJfdCBjb3VudCA9IFNETU1DX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKKyAgdWludDMyX3QgY291bnQgPSBTRE1NQ19DTURUSU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvIDhVIC8xMDAwVSk7CiAKICAgZG8KICAgewpAQCAtMTU2MiwxMiArMTU2NSwxMiBAQAogICAqIEBwYXJhbSAgaHNkIFNEIGhhbmRsZQogICAqIEByZXR2YWwgU0QgQ2FyZCBlcnJvciBzdGF0ZQogICAqLwotc3RhdGljIHVpbnQzMl90IFNETU1DX0dldENtZFJlc3A3KFNETU1DX1R5cGVEZWYgKlNETU1DeCkKK3VpbnQzMl90IFNETU1DX0dldENtZFJlc3A3KFNETU1DX1R5cGVEZWYgKlNETU1DeCkKIHsKICAgdWludDMyX3Qgc3RhX3JlZzsKICAgLyogOCBpcyB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGluc3RydWN0aW9ucyBjeWNsZXMgZm9yIHRoZSBiZWxvdyBsb29wIHN0YXRlbWVudC4KICAgVGhlIFNETU1DX0NNRFRJTUVPVVQgaXMgZXhwcmVzc2VkIGluIG1zICovCi0gIHJlZ2lzdGVyIHVpbnQzMl90IGNvdW50ID0gU0RNTUNfQ01EVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IFNETU1DX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKIAogICBkbwogICB7CkBAIC0xNjA4LDYgKzE2MTEsNDEgQEAKICAgcmV0dXJuIFNETU1DX0VSUk9SX05PTkU7CiAKIH0KKy8qKgorICAqIEB9CisgICovCisKKworLyogUHJpdmF0ZSBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAYWRkdG9ncm91cCBTRF9Qcml2YXRlX0Z1bmN0aW9ucworICAqIEB7CisgICovCisKKy8qKgorICAqIEBicmllZiAgQ2hlY2tzIGZvciBlcnJvciBjb25kaXRpb25zIGZvciBDTUQwLgorICAqIEBwYXJhbSAgaHNkIFNEIGhhbmRsZQorICAqIEByZXR2YWwgU0QgQ2FyZCBlcnJvciBzdGF0ZQorICAqLworc3RhdGljIHVpbnQzMl90IFNETU1DX0dldENtZEVycm9yKFNETU1DX1R5cGVEZWYgKlNETU1DeCkKK3sKKyAgLyogOCBpcyB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGluc3RydWN0aW9ucyBjeWNsZXMgZm9yIHRoZSBiZWxvdyBsb29wIHN0YXRlbWVudC4KKyAgVGhlIFNETU1DX0NNRFRJTUVPVVQgaXMgZXhwcmVzc2VkIGluIG1zICovCisgIHVpbnQzMl90IGNvdW50ID0gU0RNTUNfQ01EVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOworCisgIGRvCisgIHsKKyAgICBpZiAoY291bnQtLSA9PSAwVSkKKyAgICB7CisgICAgICByZXR1cm4gU0RNTUNfRVJST1JfVElNRU9VVDsKKyAgICB9CisKKyAgfXdoaWxlKCFfX1NETU1DX0dFVF9GTEFHKFNETU1DeCwgU0RNTUNfRkxBR19DTURTRU5UKSk7CisKKyAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KKyAgX19TRE1NQ19DTEVBUl9GTEFHKFNETU1DeCwgU0RNTUNfU1RBVElDX0NNRF9GTEFHUyk7CisKKyAgcmV0dXJuIFNETU1DX0VSUk9SX05PTkU7Cit9CiAKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2xsX3NwaS5jIGIvU3JjL3N0bTMybDR4eF9sbF9zcGkuYwppbmRleCA3ZGE0YjcwLi4wMjNkYzRjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2xsX3NwaS5jCisrKyBiL1NyYy9zdG0zMmw0eHhfbGxfc3BpLmMKQEAgLTU5LDUyICs1OSw1MiBAQAogLyoqIEBkZWZncm91cCBTUElfTExfUHJpdmF0ZV9NYWNyb3MgU1BJIFByaXZhdGUgTWFjcm9zCiAgICogQHsKICAgKi8KLSNkZWZpbmUgSVNfTExfU1BJX1RSQU5TRkVSX0RJUkVDVElPTihfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfU1BJX0ZVTExfRFVQTEVYKSAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9TSU1QTEVYX1JYKSAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfSEFMRl9EVVBMRVhfUlgpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0hBTEZfRFVQTEVYX1RYKSkKKyNkZWZpbmUgSVNfTExfU1BJX1RSQU5TRkVSX0RJUkVDVElPTihfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfU1BJX0ZVTExfRFVQTEVYKSAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9TSU1QTEVYX1JYKSAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfSEFMRl9EVVBMRVhfUlgpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0hBTEZfRFVQTEVYX1RYKSkKIAogI2RlZmluZSBJU19MTF9TUElfTU9ERShfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfU1BJX01PREVfTUFTVEVSKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfTU9ERV9TTEFWRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfTU9ERV9TTEFWRSkpCiAKLSNkZWZpbmUgSVNfTExfU1BJX0RBVEFXSURUSChfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfU1BJX0RBVEFXSURUSF80QklUKSAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfREFUQVdJRFRIXzVCSVQpICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9EQVRBV0lEVEhfNkJJVCkgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0RBVEFXSURUSF83QklUKSAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfREFUQVdJRFRIXzhCSVQpICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9EQVRBV0lEVEhfOUJJVCkgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0RBVEFXSURUSF8xMEJJVCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfREFUQVdJRFRIXzExQklUKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9EQVRBV0lEVEhfMTJCSVQpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0RBVEFXSURUSF8xM0JJVCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfREFUQVdJRFRIXzE0QklUKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9EQVRBV0lEVEhfMTVCSVQpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0RBVEFXSURUSF8xNkJJVCkpCisjZGVmaW5lIElTX0xMX1NQSV9EQVRBV0lEVEgoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX1NQSV9EQVRBV0lEVEhfNEJJVCkgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0RBVEFXSURUSF81QklUKSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfREFUQVdJRFRIXzZCSVQpICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9EQVRBV0lEVEhfN0JJVCkgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0RBVEFXSURUSF84QklUKSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfREFUQVdJRFRIXzlCSVQpICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9EQVRBV0lEVEhfMTBCSVQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0RBVEFXSURUSF8xMUJJVCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfREFUQVdJRFRIXzEyQklUKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9EQVRBV0lEVEhfMTNCSVQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0RBVEFXSURUSF8xNEJJVCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfREFUQVdJRFRIXzE1QklUKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9EQVRBV0lEVEhfMTZCSVQpKQogCiAjZGVmaW5lIElTX0xMX1NQSV9QT0xBUklUWShfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfU1BJX1BPTEFSSVRZX0xPVykgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9QT0xBUklUWV9ISUdIKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfUE9MQVJJVFlfSElHSCkpCiAKICNkZWZpbmUgSVNfTExfU1BJX1BIQVNFKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9TUElfUEhBU0VfMUVER0UpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfUEhBU0VfMkVER0UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9QSEFTRV8yRURHRSkpCiAKLSNkZWZpbmUgSVNfTExfU1BJX05TUyhfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfU1BJX05TU19TT0ZUKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9OU1NfSEFSRF9JTlBVVCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfTlNTX0hBUkRfT1VUUFVUKSkKKyNkZWZpbmUgSVNfTExfU1BJX05TUyhfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfU1BJX05TU19TT0ZUKSAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9OU1NfSEFSRF9JTlBVVCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfTlNTX0hBUkRfT1VUUFVUKSkKIAotI2RlZmluZSBJU19MTF9TUElfQkFVRFJBVEUoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX1NQSV9CQVVEUkFURVBSRVNDQUxFUl9ESVYyKSAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfQkFVRFJBVEVQUkVTQ0FMRVJfRElWNCkgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0JBVURSQVRFUFJFU0NBTEVSX0RJVjgpICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9CQVVEUkFURVBSRVNDQUxFUl9ESVYxNikgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfQkFVRFJBVEVQUkVTQ0FMRVJfRElWMzIpICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0JBVURSQVRFUFJFU0NBTEVSX0RJVjY0KSAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9CQVVEUkFURVBSRVNDQUxFUl9ESVYxMjgpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfQkFVRFJBVEVQUkVTQ0FMRVJfRElWMjU2KSkKKyNkZWZpbmUgSVNfTExfU1BJX0JBVURSQVRFKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9TUElfQkFVRFJBVEVQUkVTQ0FMRVJfRElWMikgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0JBVURSQVRFUFJFU0NBTEVSX0RJVjQpICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9CQVVEUkFURVBSRVNDQUxFUl9ESVY4KSAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfQkFVRFJBVEVQUkVTQ0FMRVJfRElWMTYpICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0JBVURSQVRFUFJFU0NBTEVSX0RJVjMyKSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9CQVVEUkFURVBSRVNDQUxFUl9ESVY2NCkgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfQkFVRFJBVEVQUkVTQ0FMRVJfRElWMTI4KSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0JBVURSQVRFUFJFU0NBTEVSX0RJVjI1NikpCiAKICNkZWZpbmUgSVNfTExfU1BJX0JJVE9SREVSKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9TUElfTFNCX0ZJUlNUKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX01TQl9GSVJTVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX01TQl9GSVJTVCkpCiAKICNkZWZpbmUgSVNfTExfU1BJX0NSQ0NBTENVTEFUSU9OKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9TUElfQ1JDQ0FMQ1VMQVRJT05fRU5BQkxFKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0NSQ0NBTENVTEFUSU9OX0RJU0FCTEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9DUkNDQUxDVUxBVElPTl9ESVNBQkxFKSkKIAogI2RlZmluZSBJU19MTF9TUElfQ1JDX1BPTFlOT01JQUwoX19WQUxVRV9fKSAoKF9fVkFMVUVfXykgPj0gMHgxVSkKIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9sbF90aW0uYyBiL1NyYy9zdG0zMmw0eHhfbGxfdGltLmMKaW5kZXggOWRkOWUxNy4uODBjZWViZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9sbF90aW0uYworKysgYi9TcmMvc3RtMzJsNHh4X2xsX3RpbS5jCkBAIC0zMDksNyArMzA5LDcgQEAKICAgVElNX0luaXRTdHJ1Y3QtPkNvdW50ZXJNb2RlICAgICAgID0gTExfVElNX0NPVU5URVJNT0RFX1VQOwogICBUSU1fSW5pdFN0cnVjdC0+QXV0b3JlbG9hZCAgICAgICAgPSAweEZGRkZGRkZGVTsKICAgVElNX0luaXRTdHJ1Y3QtPkNsb2NrRGl2aXNpb24gICAgID0gTExfVElNX0NMT0NLRElWSVNJT05fRElWMTsKLSAgVElNX0luaXRTdHJ1Y3QtPlJlcGV0aXRpb25Db3VudGVyID0gKHVpbnQ4X3QpMHgwMDsKKyAgVElNX0luaXRTdHJ1Y3QtPlJlcGV0aXRpb25Db3VudGVyID0gMHgwMDAwMDAwMFU7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9sbF91c2IuYyBiL1NyYy9zdG0zMmw0eHhfbGxfdXNiLmMKaW5kZXggYmNkNDEyYS4uOTdlNWZmMCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9sbF91c2IuYworKysgYi9TcmMvc3RtMzJsNHh4X2xsX3VzYi5jCkBAIC02MSw4ICs2MSw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgVVNCX0xMX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgSW5pdGlhbGl6YXRpb24vZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSW5pdGlhbGl6YXRpb24vZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICMjIyMjCkBAIC0yMTksNyArMjE5LDcgQEAKICAgKiAgICAgICAgIERpc2FibGUgdGhlIGNvbnRyb2xsZXIncyBHbG9iYWwgSW50IGluIHRoZSBBSEIgQ29uZmlnIHJlZwogICAqIEBwYXJhbSAgVVNCeCAgU2VsZWN0ZWQgZGV2aWNlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCi0qLworICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0Rpc2FibGVHbG9iYWxJbnQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KQogewogICBVU0J4LT5HQUhCQ0ZHICY9IH5VU0JfT1RHX0dBSEJDRkdfR0lOVDsKQEAgLTQxMyw4ICs0MTMsNyBAQAogICAgIHsKICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICB9Ci0gIH0KLSAgd2hpbGUgKChVU0J4LT5HUlNUQ1RMICYgVVNCX09UR19HUlNUQ1RMX1RYRkZMU0gpID09IFVTQl9PVEdfR1JTVENUTF9UWEZGTFNIKTsKKyAgfSB3aGlsZSAoKFVTQngtPkdSU1RDVEwgJiBVU0JfT1RHX0dSU1RDVExfVFhGRkxTSCkgPT0gVVNCX09UR19HUlNUQ1RMX1RYRkZMU0gpOwogCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC00MzYsOCArNDM1LDcgQEAKICAgICB7CiAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQotICB9Ci0gIHdoaWxlICgoVVNCeC0+R1JTVENUTCAmIFVTQl9PVEdfR1JTVENUTF9SWEZGTFNIKSA9PSBVU0JfT1RHX0dSU1RDVExfUlhGRkxTSCk7CisgIH0gd2hpbGUgKChVU0J4LT5HUlNUQ1RMICYgVVNCX09UR19HUlNUQ1RMX1JYRkZMU0gpID09IFVTQl9PVEdfR1JTVENUTF9SWEZGTFNIKTsKIAogICByZXR1cm4gSEFMX09LOwogfQpAQCAtOTg5LDcgKzk4Nyw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgVVNCX0RldkNvbm5lY3QgOiBDb25uZWN0IHRoZSBVU0IgZGV2aWNlIGJ5IGVuYWJsaW5nIHRoZSBwdWxsLXVwL3B1bGwtZG93bgorICAqIEBicmllZiAgVVNCX0RldkNvbm5lY3QgOiBDb25uZWN0IHRoZSBVU0IgZGV2aWNlIGJ5IGVuYWJsaW5nIFJwdQogICAqIEBwYXJhbSAgVVNCeCAgU2VsZWN0ZWQgZGV2aWNlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCkBAIC05OTcsMTQgKzk5NSwxNiBAQAogewogICB1aW50MzJfdCBVU0J4X0JBU0UgPSAodWludDMyX3QpVVNCeDsKIAorICAvKiBJbiBjYXNlIHBoeSBpcyBzdG9wcGVkLCBlbnN1cmUgdG8gdW5nYXRlIGFuZCByZXN0b3JlIHRoZSBwaHkgQ0xLICovCisgIFVTQnhfUENHQ0NUTCAmPSB+KFVTQl9PVEdfUENHQ0NUTF9TVE9QQ0xLIHwgVVNCX09UR19QQ0dDQ1RMX0dBVEVDTEspOworCiAgIFVTQnhfREVWSUNFLT5EQ1RMICY9IH5VU0JfT1RHX0RDVExfU0RJUzsKLSAgSEFMX0RlbGF5KDNVKTsKIAogICByZXR1cm4gSEFMX09LOwogfQogCiAvKioKLSAgKiBAYnJpZWYgIFVTQl9EZXZEaXNjb25uZWN0IDogRGlzY29ubmVjdCB0aGUgVVNCIGRldmljZSBieSBkaXNhYmxpbmcgdGhlIHB1bGwtdXAvcHVsbC1kb3duCisgICogQGJyaWVmICBVU0JfRGV2RGlzY29ubmVjdCA6IERpc2Nvbm5lY3QgdGhlIFVTQiBkZXZpY2UgYnkgZGlzYWJsaW5nIFJwdQogICAqIEBwYXJhbSAgVVNCeCAgU2VsZWN0ZWQgZGV2aWNlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCkBAIC0xMDEyLDggKzEwMTIsMTAgQEAKIHsKICAgdWludDMyX3QgVVNCeF9CQVNFID0gKHVpbnQzMl90KVVTQng7CiAKKyAgLyogSW4gY2FzZSBwaHkgaXMgc3RvcHBlZCwgZW5zdXJlIHRvIHVuZ2F0ZSBhbmQgcmVzdG9yZSB0aGUgcGh5IENMSyAqLworICBVU0J4X1BDR0NDVEwgJj0gfihVU0JfT1RHX1BDR0NDVExfU1RPUENMSyB8IFVTQl9PVEdfUENHQ0NUTF9HQVRFQ0xLKTsKKwogICBVU0J4X0RFVklDRS0+RENUTCB8PSBVU0JfT1RHX0RDVExfU0RJUzsKLSAgSEFMX0RlbGF5KDNVKTsKIAogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMTEwNiw3ICsxMTA4LDcgQEAKIC8qKgogICAqIEBicmllZiAgVVNCX0NsZWFySW50ZXJydXB0czogY2xlYXIgYSBVU0IgaW50ZXJydXB0CiAgICogQHBhcmFtICBVU0J4ICBTZWxlY3RlZCBkZXZpY2UKLSAgKiBAcGFyYW0gIGludGVycnVwdCAgaW50ZXJydXB0IGZsYWcKKyAgKiBAcGFyYW0gIGludGVycnVwdCAgZmxhZwogICAqIEByZXR2YWwgTm9uZQogICAqLwogdm9pZCAgVVNCX0NsZWFySW50ZXJydXB0cyhVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngsIHVpbnQzMl90IGludGVycnVwdCkKQEAgLTExODgsOCArMTE5MCw3IEBACiAgICAgewogICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgIH0KLSAgfQotICB3aGlsZSAoKFVTQngtPkdSU1RDVEwgJiBVU0JfT1RHX0dSU1RDVExfQUhCSURMKSA9PSAwVSk7CisgIH0gd2hpbGUgKChVU0J4LT5HUlNUQ1RMICYgVVNCX09UR19HUlNUQ1RMX0FIQklETCkgPT0gMFUpOwogCiAgIC8qIENvcmUgU29mdCBSZXNldCAqLwogICBjb3VudCA9IDBVOwpAQCAtMTIwMSw4ICsxMjAyLDcgQEAKICAgICB7CiAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQotICB9Ci0gIHdoaWxlICgoVVNCeC0+R1JTVENUTCAmIFVTQl9PVEdfR1JTVENUTF9DU1JTVCkgPT0gVVNCX09UR19HUlNUQ1RMX0NTUlNUKTsKKyAgfSB3aGlsZSAoKFVTQngtPkdSU1RDVEwgJiBVU0JfT1RHX0dSU1RDVExfQ1NSU1QpID09IFVTQl9PVEdfR1JTVENUTF9DU1JTVCk7CiAKICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTEzMDMsNyArMTMwMyw3IEBACiB9CiAKIC8qKgotKiBAYnJpZWYgIFVTQl9PVEdfUmVzZXRQb3J0IDogUmVzZXQgSG9zdCBQb3J0CisgICogQGJyaWVmICBVU0JfT1RHX1Jlc2V0UG9ydCA6IFJlc2V0IEhvc3QgUG9ydAogICAqIEBwYXJhbSAgVVNCeCAgU2VsZWN0ZWQgZGV2aWNlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICogQG5vdGUgKDEpVGhlIGFwcGxpY2F0aW9uIG11c3Qgd2FpdCBhdCBsZWFzdCAxMCBtcwpAQCAtMTMzMiwxMCArMTMzMiwxMCBAQAogICAqIEBicmllZiAgVVNCX0RyaXZlVmJ1cyA6IGFjdGl2YXRlIG9yIGRlLWFjdGl2YXRlIHZidXMKICAgKiBAcGFyYW0gIHN0YXRlICBWQlVTIHN0YXRlCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGVzZSB2YWx1ZXM6Ci0gICogICAgICAgICAgIDAgOiBWQlVTIEFjdGl2ZQotICAqICAgICAgICAgICAxIDogVkJVUyBJbmFjdGl2ZQorICAqICAgICAgICAgICAwIDogRGVhY3RpdmF0ZSBWQlVTCisgICogICAgICAgICAgIDEgOiBBY3RpdmF0ZSBWQlVTCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCi0qLworICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0RyaXZlVmJ1cyhVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngsIHVpbnQ4X3Qgc3RhdGUpCiB7CiAgIHVpbnQzMl90IFVTQnhfQkFTRSA9ICh1aW50MzJfdClVU0J4OwpAQCAtMTM3OCw3ICsxMzc4LDcgQEAKICAgKiBAYnJpZWYgIFJldHVybiBIb3N0IEN1cnJlbnQgRnJhbWUgbnVtYmVyCiAgICogQHBhcmFtICBVU0J4ICBTZWxlY3RlZCBkZXZpY2UKICAgKiBAcmV0dmFsIGN1cnJlbnQgZnJhbWUgbnVtYmVyCi0qLworICAqLwogdWludDMyX3QgVVNCX0dldEN1cnJlbnRGcmFtZShVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngpCiB7CiAgIHVpbnQzMl90IFVTQnhfQkFTRSA9ICh1aW50MzJfdClVU0J4OwpAQCAtMTY1Nyw4ICsxNjU3LDcgQEAKICAgICAgICAgewogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB3aGlsZSAoKFVTQnhfSEMoaGNudW0pLT5IQ0NIQVIgJiBVU0JfT1RHX0hDQ0hBUl9DSEVOQSkgPT0gVVNCX09UR19IQ0NIQVJfQ0hFTkEpOworICAgICAgfSB3aGlsZSAoKFVTQnhfSEMoaGNudW0pLT5IQ0NIQVIgJiBVU0JfT1RHX0hDQ0hBUl9DSEVOQSkgPT0gVVNCX09UR19IQ0NIQVJfQ0hFTkEpOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtMTY4MCw4ICsxNjc5LDcgQEAKICAgICAgICAgewogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB3aGlsZSAoKFVTQnhfSEMoaGNudW0pLT5IQ0NIQVIgJiBVU0JfT1RHX0hDQ0hBUl9DSEVOQSkgPT0gVVNCX09UR19IQ0NIQVJfQ0hFTkEpOworICAgICAgfSB3aGlsZSAoKFVTQnhfSEMoaGNudW0pLT5IQ0NIQVIgJiBVU0JfT1RHX0hDQ0hBUl9DSEVOQSkgPT0gVVNCX09UR19IQ0NIQVJfQ0hFTkEpOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtMTc2MSw4ICsxNzU5LDcgQEAKICAgICAgIHsKICAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgfQotICAgIHdoaWxlICgoVVNCeF9IQyhpKS0+SENDSEFSICYgVVNCX09UR19IQ0NIQVJfQ0hFTkEpID09IFVTQl9PVEdfSENDSEFSX0NIRU5BKTsKKyAgICB9IHdoaWxlICgoVVNCeF9IQyhpKS0+SENDSEFSICYgVVNCX09UR19IQ0NIQVJfQ0hFTkEpID09IFVTQl9PVEdfSENDSEFSX0NIRU5BKTsKICAgfQogCiAgIC8qIENsZWFyIGFueSBwZW5kaW5nIEhvc3QgaW50ZXJydXB0cyAqLwpAQCAtMTg0MCw2ICsxODM3LDkgQEAKIHsKICAgdWludDMyX3Qgd2ludGVycnVwdG1hc2s7CiAKKyAgLyogQ2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovCisgIFVTQngtPklTVFIgPSAwVTsKKwogICAvKiBTZXQgd2ludGVycnVwdG1hc2sgdmFyaWFibGUgKi8KICAgd2ludGVycnVwdG1hc2sgPSBVU0JfQ05UUl9DVFJNICB8IFVTQl9DTlRSX1dLVVBNIHwKICAgICAgICAgICAgICAgICAgICBVU0JfQ05UUl9TVVNQTSB8IFVTQl9DTlRSX0VSUk0gfApAQCAtMTg0Nyw3ICsxODQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICBVU0JfQ05UUl9SRVNFVE0gfCBVU0JfQ05UUl9MMVJFUU07CiAKICAgLyogU2V0IGludGVycnVwdCBtYXNrICovCi0gIFVTQngtPkNOVFIgfD0gKHVpbnQxNl90KXdpbnRlcnJ1cHRtYXNrOworICBVU0J4LT5DTlRSID0gKHVpbnQxNl90KXdpbnRlcnJ1cHRtYXNrOwogCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0xODU3LDcgKzE4NTcsNyBAQAogICAqICAgICAgICAgRGlzYWJsZSB0aGUgY29udHJvbGxlcidzIEdsb2JhbCBJbnQgaW4gdGhlIEFIQiBDb25maWcgcmVnCiAgICogQHBhcmFtICBVU0J4IDogU2VsZWN0ZWQgZGV2aWNlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCi0qLworICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0Rpc2FibGVHbG9iYWxJbnQoVVNCX1R5cGVEZWYgKlVTQngpCiB7CiAgIHVpbnQzMl90IHdpbnRlcnJ1cHRtYXNrOwpAQCAtMTg3OSw3ICsxODc5LDcgQEAKICAgKiBAcGFyYW0gIFVTQnggOiBTZWxlY3RlZCBkZXZpY2UKICAgKiBAcGFyYW0gIG1vZGUgOiAgY3VycmVudCBjb3JlIG1vZGUKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSB0aGVzZSB2YWx1ZXM6Ci0gICogICAgICAgICAgICBAYXJnIFVTQl9ERVZJQ0VfTU9ERTogUGVyaXBoZXJhbCBtb2RlIG1vZGUKKyAgKiAgICAgICAgICAgIEBhcmcgVVNCX0RFVklDRV9NT0RFOiBQZXJpcGhlcmFsIG1vZGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9TZXRDdXJyZW50TW9kZShVU0JfVHlwZURlZiAqVVNCeCwgVVNCX01vZGVUeXBlRGVmIG1vZGUpCkBAIC0xOTIxLDkgKzE5MjEsNiBAQAogICAvKlNldCBCdGFibGUgQWRkcmVzcyovCiAgIFVTQngtPkJUQUJMRSA9IEJUQUJMRV9BRERSRVNTOwogCi0gIC8qIEVuYWJsZSBVU0IgRGV2aWNlIEludGVycnVwdCBtYXNrICovCi0gICh2b2lkKVVTQl9FbmFibGVHbG9iYWxJbnQoVVNCeCk7Ci0KICAgcmV0dXJuIEhBTF9PSzsKIH0KIApAQCAtMjA3Myw5ICsyMDcwLDYgQEAKICAgICAgIFBDRF9DTEVBUl9SWF9EVE9HKFVTQngsIGVwLT5udW0pOwogICAgICAgUENEX0NMRUFSX1RYX0RUT0coVVNCeCwgZXAtPm51bSk7CiAKLSAgICAgIC8qIFJlc2V0IHZhbHVlIG9mIHRoZSBkYXRhIHRvZ2dsZSBiaXRzIGZvciB0aGUgZW5kcG9pbnQgb3V0ICovCi0gICAgICBQQ0RfVFhfRFRPRyhVU0J4LCBlcC0+bnVtKTsKLQogICAgICAgUENEX1NFVF9FUF9SWF9TVEFUVVMoVVNCeCwgZXAtPm51bSwgVVNCX0VQX1JYX1ZBTElEKTsKICAgICAgIFBDRF9TRVRfRVBfVFhfU1RBVFVTKFVTQngsIGVwLT5udW0sIFVTQl9FUF9UWF9ESVMpOwogICAgIH0KQEAgLTIwODQsNyArMjA3OCw3IEBACiAgICAgICAvKiBDbGVhciB0aGUgZGF0YSB0b2dnbGUgYml0cyBmb3IgdGhlIGVuZHBvaW50IElOL09VVCAqLwogICAgICAgUENEX0NMRUFSX1JYX0RUT0coVVNCeCwgZXAtPm51bSk7CiAgICAgICBQQ0RfQ0xFQVJfVFhfRFRPRyhVU0J4LCBlcC0+bnVtKTsKLSAgICAgIFBDRF9SWF9EVE9HKFVTQngsIGVwLT5udW0pOworCiAKICAgICAgIGlmIChlcC0+dHlwZSAhPSBFUF9UWVBFX0lTT0MpCiAgICAgICB7CkBAIC0yMTY3LDYgKzIxNjEsNyBAQAogewogICB1aW50MTZfdCBwbWFidWZmZXI7CiAgIHVpbnQzMl90IGxlbjsKKyAgdWludDE2X3Qgd0VQVmFsOwogCiAgIC8qIElOIGVuZHBvaW50ICovCiAgIGlmIChlcC0+aXNfaW4gPT0gMVUpCkBAIC0yMTc1LDEyICsyMTcwLDEwIEBACiAgICAgaWYgKGVwLT54ZmVyX2xlbiA+IGVwLT5tYXhwYWNrZXQpCiAgICAgewogICAgICAgbGVuID0gZXAtPm1heHBhY2tldDsKLSAgICAgIGVwLT54ZmVyX2xlbiAtPSBsZW47CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICBsZW4gPSBlcC0+eGZlcl9sZW47Ci0gICAgICBlcC0+eGZlcl9sZW4gPSAwVTsKICAgICB9CiAKICAgICAvKiBjb25maWd1cmUgYW5kIHZhbGlkYXRlIFR4IGVuZHBvaW50ICovCkBAIC0yMTkxLDQ5ICsyMTg0LDE2OCBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgLyogV3JpdGUgdGhlIGRhdGEgdG8gdGhlIFVTQiBlbmRwb2ludCAqLwotICAgICAgaWYgKChQQ0RfR0VUX0VORFBPSU5UKFVTQngsIGVwLT5udW0pICYgVVNCX0VQX0RUT0dfVFgpICE9IDBVKQorICAgICAgLypkb3VibGUgYnVmZmVyIGJ1bGsgbWFuYWdlbWVudCAqLworICAgICAgaWYgKGVwLT50eXBlID09IEVQX1RZUEVfQlVMSykKICAgICAgIHsKLSAgICAgICAgLyogU2V0IHRoZSBEb3VibGUgYnVmZmVyIGNvdW50ZXIgZm9yIHBtYWJ1ZmZlcjEgKi8KLSAgICAgICAgUENEX1NFVF9FUF9EQlVGMV9DTlQoVVNCeCwgZXAtPm51bSwgZXAtPmlzX2luLCBsZW4pOwotICAgICAgICBwbWFidWZmZXIgPSBlcC0+cG1hYWRkcjE7Ci0gICAgICB9CisgICAgICAgIGlmIChlcC0+eGZlcl9sZW5fZGIgPiBlcC0+bWF4cGFja2V0KQorICAgICAgICB7CisgICAgICAgICAgLyplbmFibGUgZG91YmxlIGJ1ZmZlciAqLworICAgICAgICAgIFBDRF9TRVRfRVBfREJVRihVU0J4LCBlcC0+bnVtKTsKKyAgICAgICAgICBsZW4gPSBlcC0+bWF4cGFja2V0OworICAgICAgICAgIC8qZWFjaCBUaW1lIHRvIHdyaXRlIGluIFBNQSB4ZmVyX2xlbl9kYiB3aWxsICovCisgICAgICAgICAgZXAtPnhmZXJfbGVuX2RiIC09IGxlbjsKKworICAgICAgICAgIC8qIEZpbGwgdGhlIHR3byBmaXJzdCBidWZmZXIgaW4gdGhlIEJ1ZmZlcjAgJiBCdWZmZXIxKi8KKyAgICAgICAgICBpZiAoKFBDRF9HRVRfRU5EUE9JTlQoVVNCeCwgZXAtPm51bSkgJiBVU0JfRVBfRFRPR19UWCkgIT0gMFUpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogU2V0IHRoZSBEb3VibGUgYnVmZmVyIGNvdW50ZXIgZm9yIHBtYWJ1ZmZlcjEgKi8KKyAgICAgICAgICAgIFBDRF9TRVRfRVBfREJVRjFfQ05UKFVTQngsIGVwLT5udW0sIGVwLT5pc19pbiwgbGVuKTsKKyAgICAgICAgICAgIHBtYWJ1ZmZlciA9IGVwLT5wbWFhZGRyMTsKKworICAgICAgICAgICAgLypXcml0ZSB0aGUgdXNlciBidWZmZXIgdG8gVVNCIFBNQSAqLworICAgICAgICAgICAgVVNCX1dyaXRlUE1BKFVTQngsIGVwLT54ZmVyX2J1ZmYsIHBtYWJ1ZmZlciwgKHVpbnQxNl90KWxlbik7CisgICAgICAgICAgICBlcC0+eGZlcl9idWZmICs9IGxlbjsKKworICAgICAgICAgICAgaWYgKGVwLT54ZmVyX2xlbl9kYiA+IGVwLT5tYXhwYWNrZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGxlbiA9IGVwLT5tYXhwYWNrZXQ7CisgICAgICAgICAgICAgIGVwLT54ZmVyX2xlbl9kYiAtPSBsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGxlbiA9IGVwLT54ZmVyX2xlbl9kYjsKKyAgICAgICAgICAgICAgZXAtPnhmZXJfbGVuX2RiID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogU2V0IHRoZSBEb3VibGUgYnVmZmVyIGNvdW50ZXIgZm9yIHBtYWJ1ZmZlcjAgKi8KKyAgICAgICAgICAgIFBDRF9TRVRfRVBfREJVRjBfQ05UKFVTQngsIGVwLT5udW0sIGVwLT5pc19pbiwgbGVuKTsKKyAgICAgICAgICAgIHBtYWJ1ZmZlciA9IGVwLT5wbWFhZGRyMDsKKyAgICAgICAgICAgIC8qV3JpdGUgdGhlIHVzZXIgYnVmZmVyIHRvIFVTQiBQTUEgKi8KKyAgICAgICAgICAgIFVTQl9Xcml0ZVBNQShVU0J4LCBlcC0+eGZlcl9idWZmLCBwbWFidWZmZXIsICh1aW50MTZfdClsZW4pOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgLyogU2V0IHRoZSBEb3VibGUgYnVmZmVyIGNvdW50ZXIgZm9yIHBtYWJ1ZmZlcjAgKi8KKyAgICAgICAgICAgIFBDRF9TRVRfRVBfREJVRjBfQ05UKFVTQngsIGVwLT5udW0sIGVwLT5pc19pbiwgbGVuKTsKKyAgICAgICAgICAgIHBtYWJ1ZmZlciA9IGVwLT5wbWFhZGRyMDsKKyAgICAgICAgICAgIC8qV3JpdGUgdGhlIHVzZXIgYnVmZmVyIHRvIFVTQiBQTUEgKi8KKyAgICAgICAgICAgIFVTQl9Xcml0ZVBNQShVU0J4LCBlcC0+eGZlcl9idWZmLCBwbWFidWZmZXIsICh1aW50MTZfdClsZW4pOworICAgICAgICAgICAgZXAtPnhmZXJfYnVmZiArPSBsZW47CisKKyAgICAgICAgICAgIGlmIChlcC0+eGZlcl9sZW5fZGIgPiBlcC0+bWF4cGFja2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsZW4gPSBlcC0+bWF4cGFja2V0OworICAgICAgICAgICAgICBlcC0+eGZlcl9sZW5fZGIgLT0gbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsZW4gPSBlcC0+eGZlcl9sZW5fZGI7CisgICAgICAgICAgICAgIGVwLT54ZmVyX2xlbl9kYiA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFNldCB0aGUgRG91YmxlIGJ1ZmZlciBjb3VudGVyIGZvciBwbWFidWZmZXIxICovCisgICAgICAgICAgICBQQ0RfU0VUX0VQX0RCVUYxX0NOVChVU0J4LCBlcC0+bnVtLCBlcC0+aXNfaW4sIGxlbik7CisgICAgICAgICAgICBwbWFidWZmZXIgPSBlcC0+cG1hYWRkcjE7CisgICAgICAgICAgICAvKldyaXRlIHRoZSB1c2VyIGJ1ZmZlciB0byBVU0IgUE1BICovCisgICAgICAgICAgICBVU0JfV3JpdGVQTUEoVVNCeCwgZXAtPnhmZXJfYnVmZiwgcG1hYnVmZmVyLCAodWludDE2X3QpbGVuKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyphdXRvIFN3aXRjaCB0byBzaW5nbGUgYnVmZmVyIG1vZGUgd2hlbiB0cmFuc2ZlciA8TXBzIG5vIG5lZWQgdG8gbWFuYWdlIGluIGRvdWJsZSBidWZmZXIqLworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBsZW4gPSBlcC0+eGZlcl9sZW5fZGI7CisgICAgICAgICAgLypkaXNhYmxlIGRvdWJsZSBidWZmZXIgbW9kZSAqLworICAgICAgICAgIFBDRF9DTEVBUl9FUF9EQlVGKFVTQngsIGVwLT5udW0pOworICAgICAgICAgIC8qU2V0IFR4IGNvdW50IHdpdGggbmJyZSBvZiBieXRlIHRvIGJlIHRyYW5zbWl0dGVkICovCisgICAgICAgICAgUENEX1NFVF9FUF9UWF9DTlQoVVNCeCwgZXAtPm51bSwgbGVuKTsKKyAgICAgICAgICBwbWFidWZmZXIgPSBlcC0+cG1hYWRkcjA7CisgICAgICAgICAgLypXcml0ZSB0aGUgdXNlciBidWZmZXIgdG8gVVNCIFBNQSAqLworICAgICAgICAgIFVTQl9Xcml0ZVBNQShVU0J4LCBlcC0+eGZlcl9idWZmLCBwbWFidWZmZXIsICh1aW50MTZfdClsZW4pOworICAgICAgICB9CisgICAgICB9LyplbmQgaWYgYnVsayBkb3VibGUgYnVmZmVyICovCisKKyAgICAgIC8qbWFuZ2UgaXNvY2hyb25vdXMgZG91YmxlIGJ1ZmZlciBJTiBtb2RlICovCiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIC8qIFNldCB0aGUgRG91YmxlIGJ1ZmZlciBjb3VudGVyIGZvciBwbWFidWZmZXIwICovCi0gICAgICAgIFBDRF9TRVRfRVBfREJVRjBfQ05UKFVTQngsIGVwLT5udW0sIGVwLT5pc19pbiwgbGVuKTsKLSAgICAgICAgcG1hYnVmZmVyID0gZXAtPnBtYWFkZHIwOworICAgICAgICAvKiBXcml0ZSB0aGUgZGF0YSB0byB0aGUgVVNCIGVuZHBvaW50ICovCisgICAgICAgIGlmICgoUENEX0dFVF9FTkRQT0lOVChVU0J4LCBlcC0+bnVtKSAmIFVTQl9FUF9EVE9HX1RYKSAhPSAwVSkKKyAgICAgICAgeworICAgICAgICAgIC8qIFNldCB0aGUgRG91YmxlIGJ1ZmZlciBjb3VudGVyIGZvciBwbWFidWZmZXIxICovCisgICAgICAgICAgUENEX1NFVF9FUF9EQlVGMV9DTlQoVVNCeCwgZXAtPm51bSwgZXAtPmlzX2luLCBsZW4pOworICAgICAgICAgIHBtYWJ1ZmZlciA9IGVwLT5wbWFhZGRyMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBTZXQgdGhlIERvdWJsZSBidWZmZXIgY291bnRlciBmb3IgcG1hYnVmZmVyMCAqLworICAgICAgICAgIFBDRF9TRVRfRVBfREJVRjBfQ05UKFVTQngsIGVwLT5udW0sIGVwLT5pc19pbiwgbGVuKTsKKyAgICAgICAgICBwbWFidWZmZXIgPSBlcC0+cG1hYWRkcjA7CisgICAgICAgIH0KKyAgICAgICAgVVNCX1dyaXRlUE1BKFVTQngsIGVwLT54ZmVyX2J1ZmYsIHBtYWJ1ZmZlciwgKHVpbnQxNl90KWxlbik7CisgICAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihVU0J4LCBlcC0+bnVtLCBlcC0+aXNfaW4pOwogICAgICAgfQotICAgICAgVVNCX1dyaXRlUE1BKFVTQngsIGVwLT54ZmVyX2J1ZmYsIHBtYWJ1ZmZlciwgKHVpbnQxNl90KWxlbik7Ci0gICAgICBQQ0RfRnJlZVVzZXJCdWZmZXIoVVNCeCwgZXAtPm51bSwgZXAtPmlzX2luKTsKICAgICB9CiAKICAgICBQQ0RfU0VUX0VQX1RYX1NUQVRVUyhVU0J4LCBlcC0+bnVtLCBVU0JfRVBfVFhfVkFMSUQpOwogICB9CiAgIGVsc2UgLyogT1VUIGVuZHBvaW50ICovCiAgIHsKLSAgICAvKiBNdWx0aSBwYWNrZXQgdHJhbnNmZXIqLwotICAgIGlmIChlcC0+eGZlcl9sZW4gPiBlcC0+bWF4cGFja2V0KQotICAgIHsKLSAgICAgIGxlbiA9IGVwLT5tYXhwYWNrZXQ7Ci0gICAgICBlcC0+eGZlcl9sZW4gLT0gbGVuOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgbGVuID0gZXAtPnhmZXJfbGVuOwotICAgICAgZXAtPnhmZXJfbGVuID0gMFU7Ci0gICAgfQotCi0gICAgLyogY29uZmlndXJlIGFuZCB2YWxpZGF0ZSBSeCBlbmRwb2ludCAqLwogICAgIGlmIChlcC0+ZG91YmxlYnVmZmVyID09IDBVKQogICAgIHsKKyAgICAgIC8qIE11bHRpIHBhY2tldCB0cmFuc2ZlciovCisgICAgICBpZiAoZXAtPnhmZXJfbGVuID4gZXAtPm1heHBhY2tldCkKKyAgICAgIHsKKyAgICAgICAgbGVuID0gZXAtPm1heHBhY2tldDsKKyAgICAgICAgZXAtPnhmZXJfbGVuIC09IGxlbjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgbGVuID0gZXAtPnhmZXJfbGVuOworICAgICAgICBlcC0+eGZlcl9sZW4gPSAwVTsKKyAgICAgIH0KKyAgICAgIC8qIGNvbmZpZ3VyZSBhbmQgdmFsaWRhdGUgUnggZW5kcG9pbnQgKi8KICAgICAgIC8qU2V0IFJYIGJ1ZmZlciBjb3VudCovCiAgICAgICBQQ0RfU0VUX0VQX1JYX0NOVChVU0J4LCBlcC0+bnVtLCBsZW4pOwogICAgIH0KICAgICBlbHNlCiAgICAgeworICAgICAgLypGaXJzdCBUcmFuc2ZlciBDb21pbmcgRnJvbSBIQUxfUENEX0VQX1JlY2VpdmUgJiBGcm9tIElTUiovCiAgICAgICAvKlNldCB0aGUgRG91YmxlIGJ1ZmZlciBjb3VudGVyKi8KLSAgICAgIFBDRF9TRVRfRVBfREJVRl9DTlQoVVNCeCwgZXAtPm51bSwgZXAtPmlzX2luLCBsZW4pOworICAgICAgaWYgKGVwLT50eXBlID09IEVQX1RZUEVfQlVMSykKKyAgICAgIHsKKyAgICAgICAgUENEX1NFVF9FUF9EQlVGX0NOVChVU0J4LCBlcC0+bnVtLCBlcC0+aXNfaW4sIGVwLT5tYXhwYWNrZXQpOworICAgICAgICAvKkNvbWluZyBmcm9tIElTUiovCisgICAgICAgIGlmIChlcC0+eGZlcl9jb3VudCAhPSAwVSkKKyAgICAgICAgeworICAgICAgICAgIC8qIHVwZGF0ZSBsYXN0IHZhbHVlIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGJsb2NraW5nIHN0YXRlKi8KKyAgICAgICAgICB3RVBWYWwgPSBQQ0RfR0VUX0VORFBPSU5UKFVTQngsIGVwLT5udW0pOworICAgICAgICAgIC8qQmxvY2tpbmcgU3RhdGUgKi8KKyAgICAgICAgICBpZiAoKCgod0VQVmFsICYgVVNCX0VQX0RUT0dfUlgpICE9IDBVKSAmJiAoKHdFUFZhbCAmIFVTQl9FUF9EVE9HX1RYKSAhPSAwVSkpIHx8CisgICAgICAgICAgICAgICgoKHdFUFZhbCAmIFVTQl9FUF9EVE9HX1JYKSA9PSAwVSkgJiYgKCh3RVBWYWwgJiBVU0JfRVBfRFRPR19UWCkgPT0gMFUpKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBQQ0RfRnJlZVVzZXJCdWZmZXIoVVNCeCwgZXAtPm51bSwgMFUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgLyppc28gb3V0IGRvdWJsZSAqLworICAgICAgZWxzZSBpZiAoZXAtPnR5cGUgPT0gRVBfVFlQRV9JU09DKQorICAgICAgeworICAgICAgICAvKiBNdWx0aSBwYWNrZXQgdHJhbnNmZXIqLworICAgICAgICBpZiAoZXAtPnhmZXJfbGVuID4gZXAtPm1heHBhY2tldCkKKyAgICAgICAgeworICAgICAgICAgIGxlbiA9IGVwLT5tYXhwYWNrZXQ7CisgICAgICAgICAgZXAtPnhmZXJfbGVuIC09IGxlbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBsZW4gPSBlcC0+eGZlcl9sZW47CisgICAgICAgICAgZXAtPnhmZXJfbGVuID0gMFU7CisgICAgICAgIH0KKyAgICAgICAgUENEX1NFVF9FUF9EQlVGX0NOVChVU0J4LCBlcC0+bnVtLCBlcC0+aXNfaW4sIGxlbik7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CiAgICAgfQogCiAgICAgUENEX1NFVF9FUF9SWF9TVEFUVVMoVVNCeCwgZXAtPm51bSwgVVNCX0VQX1JYX1ZBTElEKTsKQEAgLTI0ODcsNyArMjU5OSw3IEBACiAvKioKICAgKiBAYnJpZWYgIFVTQl9DbGVhckludGVycnVwdHM6IGNsZWFyIGEgVVNCIGludGVycnVwdAogICAqIEBwYXJhbSAgVVNCeCAgU2VsZWN0ZWQgZGV2aWNlCi0gICogQHBhcmFtICBpbnRlcnJ1cHQgIGludGVycnVwdCBmbGFnCisgICogQHBhcmFtICBpbnRlcnJ1cHQgIGZsYWcKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIHZvaWQgIFVTQl9DbGVhckludGVycnVwdHMoVVNCX1R5cGVEZWYgKlVTQngsIHVpbnQzMl90IGludGVycnVwdCkKQEAgLTI1NzcsNyArMjY4OSw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiBDb3B5IGEgYnVmZmVyIGZyb20gdXNlciBtZW1vcnkgYXJlYSB0byBwYWNrZXQgbWVtb3J5IGFyZWEgKFBNQSkKKyAgKiBAYnJpZWYgQ29weSBkYXRhIGZyb20gcGFja2V0IG1lbW9yeSBhcmVhIChQTUEpIHRvIHVzZXIgbWVtb3J5IGJ1ZmZlcgogICAqIEBwYXJhbSAgIFVTQng6IFVTQiBwZXJpcGhlcmFsIGluc3RhbmNlIHJlZ2lzdGVyIGFkZHJlc3MuCiAgICogQHBhcmFtICAgcGJVc3JCdWYgcG9pbnRlciB0byB1c2VyIG1lbW9yeSBhcmVhLgogICAqIEBwYXJhbSAgIHdQTUFCdWZBZGRyIGFkZHJlc3MgaW50byBQTUEuCg==