ZGlmZiAtLWdpdCBhL0luYy9MZWdhY3kvc3RtMzJfaGFsX2xlZ2FjeS5oIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKaW5kZXggZWQyMjQ0OC4uZjMyMWIzMyAxMDA2NDQKLS0tIGEvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKKysrIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKQEAgLTcsNyArNyw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQ29weXJpZ2h0IChjKSAyMDIzIFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCkBAIC0zNywxNCArMzcsMTYgQEAKICNkZWZpbmUgQUVTX0NMRUFSRkxBR19DQ0YgICAgICAgICAgICAgICBDUllQX0NMRUFSRkxBR19DQ0YKICNkZWZpbmUgQUVTX0NMRUFSRkxBR19SREVSUiAgICAgICAgICAgICBDUllQX0NMRUFSRkxBR19SREVSUgogI2RlZmluZSBBRVNfQ0xFQVJGTEFHX1dSRVJSICAgICAgICAgICAgIENSWVBfQ0xFQVJGTEFHX1dSRVJSCi0jaWYgZGVmaW5lZChTVE0zMlU1KQorI2lmIGRlZmluZWQoU1RNMzJVNSkgfHwgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyTVAxKQogI2RlZmluZSBDUllQX0RBVEFUWVBFXzMyQiAgICAgICAgICAgICAgIENSWVBfTk9fU1dBUAogI2RlZmluZSBDUllQX0RBVEFUWVBFXzE2QiAgICAgICAgICAgICAgIENSWVBfSEFMRldPUkRfU1dBUAogI2RlZmluZSBDUllQX0RBVEFUWVBFXzhCICAgICAgICAgICAgICAgIENSWVBfQllURV9TV0FQCiAjZGVmaW5lIENSWVBfREFUQVRZUEVfMUIgICAgICAgICAgICAgICAgQ1JZUF9CSVRfU1dBUAorI2lmIGRlZmluZWQoU1RNMzJVNSkKICNkZWZpbmUgQ1JZUF9DQ0ZfQ0xFQVIgICAgICAgICAgICAgICAgICBDUllQX0NMRUFSX0NDRgogI2RlZmluZSBDUllQX0VSUl9DTEVBUiAgICAgICAgICAgICAgICAgIENSWVBfQ0xFQVJfUldFSUYKICNlbmRpZiAvKiBTVE0zMlU1ICovCisjZW5kaWYgLyogU1RNMzJVNSB8fCBTVE0zMkg3IHx8IFNUTTMyTVAxICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTA0LDYgKzEwNiwxNiBAQAogI2lmIGRlZmluZWQoU1RNMzJINykKICNkZWZpbmUgQURDX0NIQU5ORUxfVkJBVF9ESVY0ICAgICAgICAgICBBRENfQ0hBTk5FTF9WQkFUCiAjZW5kaWYgLyogU1RNMzJINyAqLworCisjaWYgZGVmaW5lZChTVE0zMlU1KQorI2RlZmluZSBBRENfU0FNUExFVElNRV81Q1lDTEUgICAgICAgICAgIEFEQ19TQU1QTEVUSU1FXzVDWUNMRVMKKyNkZWZpbmUgQURDX1NBTVBMRVRJTUVfMzkxQ1lDTEVTXzUgICAgICBBRENfU0FNUExFVElNRV8zOTFDWUNMRVMKKyNkZWZpbmUgQURDNF9TQU1QTEVUSU1FXzE2MENZQ0xFU181ICAgICBBREM0X1NBTVBMRVRJTUVfODE0Q1lDTEVTXzUKKyNlbmRpZiAvKiBTVE0zMlU1ICovCisKKyNpZiBkZWZpbmVkKFNUTTMySDUpCisjZGVmaW5lIEFEQ19DSEFOTkVMX1ZDT1JFICAgICAgICAgICAgICAgQURDX0NIQU5ORUxfVkREQ09SRQorI2VuZGlmIC8qIFNUTTMySDUgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xMzEsNyArMTQzLDggQEAKICNkZWZpbmUgQ09NUF9FWFRJX0xJTkVfQ09NUDZfRVZFTlQgICAgIENPTVBfRVhUSV9MSU5FX0NPTVA2CiAjZGVmaW5lIENPTVBfRVhUSV9MSU5FX0NPTVA3X0VWRU5UICAgICBDT01QX0VYVElfTElORV9DT01QNwogI2lmIGRlZmluZWQoU1RNMzJMMCkKLSNkZWZpbmUgQ09NUF9MUFRJTUNPTk5FQ1RJT05fRU5BQkxFRCAgICgodWludDMyX3QpMHgwMDAwMDAwM1UpICAgIC8qITwgQ09NUFggb3V0cHV0IGdlbmVyaWMgbmFtaW5nOiBjb25uZWN0ZWQgdG8gTFBUSU0gaW5wdXQgMSBmb3IgQ09NUDEsIExQVElNIGlucHV0IDIgZm9yIENPTVAyICovCisjZGVmaW5lIENPTVBfTFBUSU1DT05ORUNUSU9OX0VOQUJMRUQgICAoKHVpbnQzMl90KTB4MDAwMDAwMDNVKSAgICAvKiE8IENPTVBYIG91dHB1dCBnZW5lcmljIG5hbWluZzogY29ubmVjdGVkIHRvIExQVElNIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCAxIGZvciBDT01QMSwgTFBUSU0gaW5wdXQgMiBmb3IgQ09NUDIgKi8KICNlbmRpZgogI2RlZmluZSBDT01QX09VVFBVVF9DT01QNlRJTTJPQ1JFRkNMUiAgQ09NUF9PVVRQVVRfQ09NUDZfVElNMk9DUkVGQ0xSCiAjaWYgZGVmaW5lZChTVE0zMkYzNzN4QykgfHwgZGVmaW5lZChTVE0zMkYzNzh4eCkKQEAgLTIwNSw2ICsyMTgsMTEgQEAKICNlbmRpZgogCiAjZW5kaWYKKworI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgX19IQUxfQ09NUF9DT01QMV9FWFRJX0NMRUFSX1JBU0lOR19GTEFHIF9fSEFMX0NPTVBfQ09NUDFfRVhUSV9DTEVBUl9SSVNJTkdfRkxBRworI2VuZGlmCisKIC8qKgogICAqIEB9CiAgICovCkBAIC0yMTMsMTAgKzIzMSwyNSBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIF9fSEFMX0NPUlRFWF9TWVNUSUNLQ0xLX0NPTkZJRyBIQUxfU1lTVElDS19DTEtTb3VyY2VDb25maWcKKyNpZiBkZWZpbmVkKFNUTTMyVTUpCisjZGVmaW5lICBNUFVfREVWSUNFX25HblJuRSAgICAgICAgICBNUFVfREVWSUNFX05HTlJORQorI2RlZmluZSAgTVBVX0RFVklDRV9uR25SRSAgICAgICAgICAgTVBVX0RFVklDRV9OR05SRQorI2RlZmluZSAgTVBVX0RFVklDRV9uR1JFICAgICAgICAgICAgTVBVX0RFVklDRV9OR1JFCisjZW5kaWYgLyogU1RNMzJVNSAqLwogLyoqCiAgICogQH0KICAgKi8KIAorLyoqIEBkZWZncm91cCBDUkNfQWxpYXNlcyBDUkMgQVBJIGFsaWFzZXMKKyAgKiBAeworICAqLworI2lmIGRlZmluZWQoU1RNMzJINSkgfHwgZGVmaW5lZChTVE0zMkMwKQorI2Vsc2UKKyNkZWZpbmUgSEFMX0NSQ19JbnB1dF9EYXRhX1JldmVyc2UgICBIQUxfQ1JDRXhfSW5wdXRfRGF0YV9SZXZlcnNlICAgIC8qITwgQWxpYXNlZCB0byBIQUxfQ1JDRXhfSW5wdXRfRGF0YV9SZXZlcnNlIGZvciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXIgU1RNMzIgc2VyaWVzIGNvbXBhdGliaWxpdHkgICovCisjZGVmaW5lIEhBTF9DUkNfT3V0cHV0X0RhdGFfUmV2ZXJzZSAgSEFMX0NSQ0V4X091dHB1dF9EYXRhX1JldmVyc2UgICAvKiE8IEFsaWFzZWQgdG8gSEFMX0NSQ0V4X091dHB1dF9EYXRhX1JldmVyc2UgZm9yIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlciBTVE0zMiBzZXJpZXMgY29tcGF0aWJpbGl0eSAqLworI2VuZGlmCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjQ2LDEyICsyNzksMjUgQEAKICNkZWZpbmUgREFDX1dBVkVHRU5FUkFUSU9OX05PSVNFICAgICAgICAgICAgICAgICAgICAgICAgREFDX1dBVkVfTk9JU0UKICNkZWZpbmUgREFDX1dBVkVHRU5FUkFUSU9OX1RSSUFOR0xFICAgICAgICAgICAgICAgICAgICAgREFDX1dBVkVfVFJJQU5HTEUKIAotI2lmIGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkIChTVE0zMlU1KQorI2lmIGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQgKFNUTTMyVTUpCiAjZGVmaW5lIERBQ19DSElQQ09OTkVDVF9ESVNBQkxFICAgICAgIERBQ19DSElQQ09OTkVDVF9FWFRFUk5BTAogI2RlZmluZSBEQUNfQ0hJUENPTk5FQ1RfRU5BQkxFICAgICAgICBEQUNfQ0hJUENPTk5FQ1RfSU5URVJOQUwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkc0KQorI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgREFDX1RSSUdHRVJfU1RPUF9MUFRJTTFfT1VUICBEQUNfVFJJR0dFUl9TVE9QX0xQVElNMV9DSDEKKyNkZWZpbmUgREFDX1RSSUdHRVJfU1RPUF9MUFRJTTNfT1VUICBEQUNfVFJJR0dFUl9TVE9QX0xQVElNM19DSDEKKyNkZWZpbmUgREFDX1RSSUdHRVJfTFBUSU0xX09VVCAgICAgICBEQUNfVFJJR0dFUl9MUFRJTTFfQ0gxCisjZGVmaW5lIERBQ19UUklHR0VSX0xQVElNM19PVVQgICAgICAgREFDX1RSSUdHRVJfTFBUSU0zX0NIMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNUTTMySDUpCisjZGVmaW5lIERBQ19UUklHR0VSX0xQVElNMV9PVVQgICAgICAgREFDX1RSSUdHRVJfTFBUSU0xX0NIMQorI2RlZmluZSBEQUNfVFJJR0dFUl9MUFRJTTJfT1VUICAgICAgIERBQ19UUklHR0VSX0xQVElNMl9DSDEKKyNlbmRpZgorCisjaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMySDcpIHx8IFwKKyAgICBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJHNCkKICNkZWZpbmUgSEFMX0RBQ19NU1BfSU5JVF9DQl9JRCAgICAgICBIQUxfREFDX01TUElOSVRfQ0JfSUQKICNkZWZpbmUgSEFMX0RBQ19NU1BfREVJTklUX0NCX0lEICAgICBIQUxfREFDX01TUERFSU5JVF9DQl9JRAogI2VuZGlmCkBAIC0zMTYsNyArMzYyLDggQEAKICNkZWZpbmUgSEFMX0RNQU1VWF9SRVFVRVNUX0dFTl9GQUxMSU5HICAgICAgICAgICBIQUxfRE1BTVVYX1JFUV9HRU5fRkFMTElORwogI2RlZmluZSBIQUxfRE1BTVVYX1JFUVVFU1RfR0VOX1JJU0lOR19GQUxMSU5HICAgIEhBTF9ETUFNVVhfUkVRX0dFTl9SSVNJTkdfRkFMTElORwogCi0jaWYgZGVmaW5lZChTVE0zMkw0UjV4eCkgfHwgZGVmaW5lZChTVE0zMkw0Ujl4eCkgfHwgZGVmaW5lZChTVE0zMkw0Ujl4eCkgfHwgZGVmaW5lZChTVE0zMkw0UzV4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzd4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzl4eCkKKyNpZiBkZWZpbmVkKFNUTTMyTDRSNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRSOXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRSOXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRTNXh4KSB8fCBcCisgICAgZGVmaW5lZChTVE0zMkw0Uzd4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzl4eCkKICNkZWZpbmUgRE1BX1JFUVVFU1RfRENNSV9QU1NJICAgICAgICAgICAgICAgICAgICBETUFfUkVRVUVTVF9EQ01JCiAjZW5kaWYKIApAQCAtMzkzLDYgKzQ0MCwxMCBAQAogI2RlZmluZSBEQUNfVFJJR0dFUl9MUDJfT1VUICAgICAgICAgICAgICAgICAgICAgICAgREFDX1RSSUdHRVJfTFBUSU0yX09VVAogCiAjZW5kaWYgLyogU1RNMzJINyAqLworCisjaWYgZGVmaW5lZChTVE0zMlU1KQorI2RlZmluZSBHUERNQTFfUkVRVUVTVF9EQ01JICAgICAgICAgICAgICAgICAgICAgICAgR1BETUExX1JFUVVFU1RfRENNSV9QU1NJCisjZW5kaWYgLyogU1RNMzJVNSAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTQ3Miw3ICs1MjMsNyBAQAogI2RlZmluZSBPQl9SRFBfTEVWRUwwICAgICAgICAgICAgICAgICBPQl9SRFBfTEVWRUxfMAogI2RlZmluZSBPQl9SRFBfTEVWRUwxICAgICAgICAgICAgICAgICBPQl9SRFBfTEVWRUxfMQogI2RlZmluZSBPQl9SRFBfTEVWRUwyICAgICAgICAgICAgICAgICBPQl9SRFBfTEVWRUxfMgotI2lmIGRlZmluZWQoU1RNMzJHMCkKKyNpZiBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJDMCkKICNkZWZpbmUgT0JfQk9PVF9MT0NLX0RJU0FCTEUgICAgICAgICAgT0JfQk9PVF9FTlRSWV9GT1JDRURfTk9ORQogI2RlZmluZSBPQl9CT09UX0xPQ0tfRU5BQkxFICAgICAgICAgICBPQl9CT09UX0VOVFJZX0ZPUkNFRF9GTEFTSAogI2Vsc2UKQEAgLTQ5Nyw2ICs1NDgsOSBAQAogI2RlZmluZSBPQl9VU0VSX25CT09UMCAgICAgICAgICAgICAgICBPQl9VU0VSX05CT09UMAogI2RlZmluZSBPQl9uQk9PVDBfUkVTRVQgICAgICAgICAgICAgICBPQl9OQk9PVDBfUkVTRVQKICNkZWZpbmUgT0JfbkJPT1QwX1NFVCAgICAgICAgICAgICAgICAgT0JfTkJPT1QwX1NFVAorI2RlZmluZSBPQl9VU0VSX1NSQU0xMzRfUlNUICAgICAgICAgICBPQl9VU0VSX1NSQU1fUlNUCisjZGVmaW5lIE9CX1NSQU0xMzRfUlNUX0VSQVNFICAgICAgICAgIE9CX1NSQU1fUlNUX0VSQVNFCisjZGVmaW5lIE9CX1NSQU0xMzRfUlNUX05PVF9FUkFTRSAgICAgIE9CX1NSQU1fUlNUX05PVF9FUkFTRQogI2VuZGlmIC8qIFNUTTMyVTUgKi8KIAogLyoqCkBAIC01NDEsNiArNTk1LDEwNiBAQAogI2RlZmluZSBIQUxfU1lTQ0ZHX0Rpc2FibGVJT0FuYWxvZ1N3aXRjaFZERCAgICAgICBIQUxfU1lTQ0ZHX0Rpc2FibGVJT1N3aXRjaFZERAogI2VuZGlmIC8qIFNUTTMyRzQgKi8KIAorI2lmIGRlZmluZWQoU1RNMzJINSkKKyNkZWZpbmUgU1lTQ0ZHX0lUX0ZQVV9JT0MgICAgICAgICBTQlNfSVRfRlBVX0lPQworI2RlZmluZSBTWVNDRkdfSVRfRlBVX0RaQyAgICAgICAgIFNCU19JVF9GUFVfRFpDCisjZGVmaW5lIFNZU0NGR19JVF9GUFVfVUZDICAgICAgICAgU0JTX0lUX0ZQVV9VRkMKKyNkZWZpbmUgU1lTQ0ZHX0lUX0ZQVV9PRkMgICAgICAgICBTQlNfSVRfRlBVX09GQworI2RlZmluZSBTWVNDRkdfSVRfRlBVX0lEQyAgICAgICAgIFNCU19JVF9GUFVfSURDCisjZGVmaW5lIFNZU0NGR19JVF9GUFVfSVhDICAgICAgICAgU0JTX0lUX0ZQVV9JWEMKKworI2RlZmluZSBTWVNDRkdfQlJFQUtfRkxBU0hfRUNDICAgIFNCU19CUkVBS19GTEFTSF9FQ0MKKyNkZWZpbmUgU1lTQ0ZHX0JSRUFLX1BWRCAgICAgICAgICBTQlNfQlJFQUtfUFZECisjZGVmaW5lIFNZU0NGR19CUkVBS19TUkFNX0VDQyAgICAgU0JTX0JSRUFLX1NSQU1fRUNDCisjZGVmaW5lIFNZU0NGR19CUkVBS19MT0NLVVAgICAgICAgU0JTX0JSRUFLX0xPQ0tVUAorCisjZGVmaW5lIFNZU0NGR19WUkVGQlVGX1ZPTFRBR0VfU0NBTEUwICAgVlJFRkJVRl9WT0xUQUdFX1NDQUxFMAorI2RlZmluZSBTWVNDRkdfVlJFRkJVRl9WT0xUQUdFX1NDQUxFMSAgIFZSRUZCVUZfVk9MVEFHRV9TQ0FMRTEKKyNkZWZpbmUgU1lTQ0ZHX1ZSRUZCVUZfVk9MVEFHRV9TQ0FMRTIgICBWUkVGQlVGX1ZPTFRBR0VfU0NBTEUyCisjZGVmaW5lIFNZU0NGR19WUkVGQlVGX1ZPTFRBR0VfU0NBTEUzICAgVlJFRkJVRl9WT0xUQUdFX1NDQUxFMworCisjZGVmaW5lIFNZU0NGR19WUkVGQlVGX0hJR0hfSU1QRURBTkNFX0RJU0FCTEUgICBWUkVGQlVGX0hJR0hfSU1QRURBTkNFX0RJU0FCTEUKKyNkZWZpbmUgU1lTQ0ZHX1ZSRUZCVUZfSElHSF9JTVBFREFOQ0VfRU5BQkxFICAgIFZSRUZCVUZfSElHSF9JTVBFREFOQ0VfRU5BQkxFCisKKyNkZWZpbmUgU1lTQ0ZHX0ZBU1RNT0RFUExVU19QQjYgICBTQlNfRkFTVE1PREVQTFVTX1BCNgorI2RlZmluZSBTWVNDRkdfRkFTVE1PREVQTFVTX1BCNyAgIFNCU19GQVNUTU9ERVBMVVNfUEI3CisjZGVmaW5lIFNZU0NGR19GQVNUTU9ERVBMVVNfUEI4ICAgU0JTX0ZBU1RNT0RFUExVU19QQjgKKyNkZWZpbmUgU1lTQ0ZHX0ZBU1RNT0RFUExVU19QQjkgICBTQlNfRkFTVE1PREVQTFVTX1BCOQorCisjZGVmaW5lIFNZU0NGR19FVEhfTUlJICAgU0JTX0VUSF9NSUkKKyNkZWZpbmUgU1lTQ0ZHX0VUSF9STUlJICBTQlNfRVRIX1JNSUkKKyNkZWZpbmUgSVNfU1lTQ0ZHX0VUSEVSTkVUX0NPTkZJRyAgSVNfU0JTX0VUSEVSTkVUX0NPTkZJRworCisjZGVmaW5lIFNZU0NGR19NRU1PUklFU19FUkFTRV9GTEFHX0lQTUVFICAgU0JTX01FTU9SSUVTX0VSQVNFX0ZMQUdfSVBNRUUKKyNkZWZpbmUgU1lTQ0ZHX01FTU9SSUVTX0VSQVNFX0ZMQUdfTUNMUiAgICBTQlNfTUVNT1JJRVNfRVJBU0VfRkxBR19NQ0xSCisjZGVmaW5lIElTX1NZU0NGR19NRU1PUklFU19FUkFTRV9GTEFHICAgICAgSVNfU0JTX01FTU9SSUVTX0VSQVNFX0ZMQUcKKworI2RlZmluZSBJU19TWVNDRkdfQ09ERV9DT05GSUcgSVNfU0JTX0NPREVfQ09ORklHCisKKyNkZWZpbmUgU1lTQ0ZHX01QVV9OU0VDICAgU0JTX01QVV9OU0VDCisjZGVmaW5lIFNZU0NGR19WVE9SX05TRUMgIFNCU19WVE9SX05TRUMKKyNpZiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisjZGVmaW5lIFNZU0NGR19TQVUgICAgICAgICAgICAgIFNCU19TQVUKKyNkZWZpbmUgU1lTQ0ZHX01QVV9TRUMgICAgICAgICAgU0JTX01QVV9TRUMKKyNkZWZpbmUgU1lTQ0ZHX1ZUT1JfQUlSQ1JfU0VDICAgU0JTX1ZUT1JfQUlSQ1JfU0VDCisjZGVmaW5lIFNZU0NGR19MT0NLX0FMTCAgICAgICAgIFNCU19MT0NLX0FMTAorI2Vsc2UKKyNkZWZpbmUgU1lTQ0ZHX0xPQ0tfQUxMICAgICAgICAgU0JTX0xPQ0tfQUxMCisjZW5kaWYgLyogX19BUk1fRkVBVFVSRV9DTVNFICovCisKKyNkZWZpbmUgU1lTQ0ZHX0NMSyAgICAgIFNCU19DTEsKKyNkZWZpbmUgU1lTQ0ZHX0NMQVNTQiAgIFNCU19DTEFTU0IKKyNkZWZpbmUgU1lTQ0ZHX0ZQVSAgICAgIFNCU19GUFUKKyNkZWZpbmUgU1lTQ0ZHX0FMTCAgICAgIFNCU19BTEwKKworI2RlZmluZSBTWVNDRkdfU0VDICAgICAgU0JTX1NFQworI2RlZmluZSBTWVNDRkdfTlNFQyAgICAgU0JTX05TRUMKKworI2RlZmluZSBfX0hBTF9TWVNDRkdfRlBVX0lOVEVSUlVQVF9FTkFCTEUgICBfX0hBTF9TQlNfRlBVX0lOVEVSUlVQVF9FTkFCTEUKKyNkZWZpbmUgX19IQUxfU1lTQ0ZHX0ZQVV9JTlRFUlJVUFRfRElTQUJMRSAgX19IQUxfU0JTX0ZQVV9JTlRFUlJVUFRfRElTQUJMRQorCisjZGVmaW5lIF9fSEFMX1NZU0NGR19CUkVBS19FQ0NfTE9DSyAgICAgICAgX19IQUxfU0JTX0JSRUFLX0VDQ19MT0NLCisjZGVmaW5lIF9fSEFMX1NZU0NGR19CUkVBS19MT0NLVVBfTE9DSyAgICAgX19IQUxfU0JTX0JSRUFLX0xPQ0tVUF9MT0NLCisjZGVmaW5lIF9fSEFMX1NZU0NGR19CUkVBS19QVkRfTE9DSyAgICAgICAgX19IQUxfU0JTX0JSRUFLX1BWRF9MT0NLCisjZGVmaW5lIF9fSEFMX1NZU0NGR19CUkVBS19TUkFNX0VDQ19MT0NLICAgX19IQUxfU0JTX0JSRUFLX1NSQU1fRUNDX0xPQ0sKKworI2RlZmluZSBfX0hBTF9TWVNDRkdfRkFTVE1PREVQTFVTX0VOQUJMRSAgIF9fSEFMX1NCU19GQVNUTU9ERVBMVVNfRU5BQkxFCisjZGVmaW5lIF9fSEFMX1NZU0NGR19GQVNUTU9ERVBMVVNfRElTQUJMRSAgX19IQUxfU0JTX0ZBU1RNT0RFUExVU19ESVNBQkxFCisKKyNkZWZpbmUgX19IQUxfU1lTQ0ZHX0dFVF9NRU1PUklFU19FUkFTRV9TVEFUVVMgICAgX19IQUxfU0JTX0dFVF9NRU1PUklFU19FUkFTRV9TVEFUVVMKKyNkZWZpbmUgX19IQUxfU1lTQ0ZHX0NMRUFSX01FTU9SSUVTX0VSQVNFX1NUQVRVUyAgX19IQUxfU0JTX0NMRUFSX01FTU9SSUVTX0VSQVNFX1NUQVRVUworCisjZGVmaW5lIElTX1NZU0NGR19GUFVfSU5URVJSVVBUICAgIElTX1NCU19GUFVfSU5URVJSVVBUCisjZGVmaW5lIElTX1NZU0NGR19CUkVBS19DT05GSUcgICAgIElTX1NCU19CUkVBS19DT05GSUcKKyNkZWZpbmUgSVNfU1lTQ0ZHX1ZSRUZCVUZfVk9MVEFHRV9TQ0FMRSAgICAgSVNfVlJFRkJVRl9WT0xUQUdFX1NDQUxFCisjZGVmaW5lIElTX1NZU0NGR19WUkVGQlVGX0hJR0hfSU1QRURBTkNFICAgIElTX1ZSRUZCVUZfSElHSF9JTVBFREFOQ0UKKyNkZWZpbmUgSVNfU1lTQ0ZHX1ZSRUZCVUZfVFJJTU1JTkcgIElTX1ZSRUZCVUZfVFJJTU1JTkcKKyNkZWZpbmUgSVNfU1lTQ0ZHX0ZBU1RNT0RFUExVUyAgICAgIElTX1NCU19GQVNUTU9ERVBMVVMKKyNkZWZpbmUgSVNfU1lTQ0ZHX0lURU1TX0FUVFJJQlVURVMgIElTX1NCU19JVEVNU19BVFRSSUJVVEVTCisjZGVmaW5lIElTX1NZU0NGR19BVFRSSUJVVEVTICAgICAgICBJU19TQlNfQVRUUklCVVRFUworI2RlZmluZSBJU19TWVNDRkdfTE9DS19JVEVNUyAgICAgICAgSVNfU0JTX0xPQ0tfSVRFTVMKKworI2RlZmluZSBIQUxfU1lTQ0ZHX1ZSRUZCVUZfVm9sdGFnZVNjYWxpbmdDb25maWcgICBIQUxfVlJFRkJVRl9Wb2x0YWdlU2NhbGluZ0NvbmZpZworI2RlZmluZSBIQUxfU1lTQ0ZHX1ZSRUZCVUZfSGlnaEltcGVkYW5jZUNvbmZpZyAgICBIQUxfVlJFRkJVRl9IaWdoSW1wZWRhbmNlQ29uZmlnCisjZGVmaW5lIEhBTF9TWVNDRkdfVlJFRkJVRl9UcmltbWluZ0NvbmZpZyAgICAgICAgIEhBTF9WUkVGQlVGX1RyaW1taW5nQ29uZmlnCisjZGVmaW5lIEhBTF9TWVNDRkdfRW5hYmxlVlJFRkJVRiAgICAgICAgICAgICAgICAgIEhBTF9FbmFibGVWUkVGQlVGCisjZGVmaW5lIEhBTF9TWVNDRkdfRGlzYWJsZVZSRUZCVUYgICAgICAgICAgICAgICAgIEhBTF9EaXNhYmxlVlJFRkJVRgorCisjZGVmaW5lIEhBTF9TWVNDRkdfRW5hYmxlSU9BbmFsb2dTd2l0Y2hCb29zdGVyICAgIEhBTF9TQlNfRW5hYmxlSU9BbmFsb2dTd2l0Y2hCb29zdGVyCisjZGVmaW5lIEhBTF9TWVNDRkdfRGlzYWJsZUlPQW5hbG9nU3dpdGNoQm9vc3RlciAgIEhBTF9TQlNfRGlzYWJsZUlPQW5hbG9nU3dpdGNoQm9vc3RlcgorI2RlZmluZSBIQUxfU1lTQ0ZHX0VUSEludGVyZmFjZVNlbGVjdCAgICAgICAgICAgICBIQUxfU0JTX0VUSEludGVyZmFjZVNlbGVjdAorCisjZGVmaW5lIEhBTF9TWVNDRkdfTG9jayAgICAgSEFMX1NCU19Mb2NrCisjZGVmaW5lIEhBTF9TWVNDRkdfR2V0TG9jayAgSEFMX1NCU19HZXRMb2NrCisKKyNpZiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisjZGVmaW5lIEhBTF9TWVNDRkdfQ29uZmlnQXR0cmlidXRlcyAgICAgSEFMX1NCU19Db25maWdBdHRyaWJ1dGVzCisjZGVmaW5lIEhBTF9TWVNDRkdfR2V0Q29uZmlnQXR0cmlidXRlcyAgSEFMX1NCU19HZXRDb25maWdBdHRyaWJ1dGVzCisjZW5kaWYgLyogX19BUk1fRkVBVFVSRV9DTVNFICovCisKKyNlbmRpZiAvKiBTVE0zMkg1ICovCisKKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTYwOCwxNCArNzYyLDE2IEBACiAjZGVmaW5lIEdQSU9fQUYxMF9PVEcyX0hTICBHUElPX0FGMTBfT1RHMl9GUwogI2RlZmluZSBHUElPX0FGMTBfT1RHMV9GUyAgR1BJT19BRjEwX09URzFfSFMKICNkZWZpbmUgR1BJT19BRjEyX09URzJfRlMgIEdQSU9fQUYxMl9PVEcxX0ZTCi0jZW5kaWYgLypTVE0zMkg3NDN4eCB8fCBTVE0zMkg3NTN4eCB8fCBTVE0zMkg3NTB4eCB8fCBTVE0zMkg3NDJ4eCB8fCBTVE0zMkg3NDV4eCB8fCBTVE0zMkg3NTV4eCB8fCBTVE0zMkg3NDd4eCB8fCBTVE0zMkg3NTd4eCAqLworI2VuZGlmIC8qU1RNMzJINzQzeHggfHwgU1RNMzJINzUzeHggfHwgU1RNMzJINzUweHggfHwgU1RNMzJINzQyeHggfHwgU1RNMzJINzQ1eHggfHwgU1RNMzJINzU1eHggfHwgU1RNMzJINzQ3eHggfHwgXAorICAgICAgICAgU1RNMzJINzU3eHggKi8KICNlbmRpZiAvKiBTVE0zMkg3ICovCiAKICNkZWZpbmUgR1BJT19BRjBfTFBUSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjBfTFBUSU0xCiAjZGVmaW5lIEdQSU9fQUYxX0xQVElNICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fQUYxX0xQVElNMQogI2RlZmluZSBHUElPX0FGMl9MUFRJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0FGMl9MUFRJTTEKIAotI2lmIGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGMikgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyRzQpIHx8IGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyVTUpCisjaWYgZGVmaW5lZChTVE0zMkwwKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkYyKSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IFwKKyAgICBkZWZpbmVkKFNUTTMyRzQpIHx8IGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyVTUpCiAjZGVmaW5lICBHUElPX1NQRUVEX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fU1BFRURfRlJFUV9MT1cKICNkZWZpbmUgIEdQSU9fU1BFRURfTUVESVVNICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19TUEVFRF9GUkVRX01FRElVTQogI2RlZmluZSAgR1BJT19TUEVFRF9GQVNUICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX1NQRUVEX0ZSRVFfSElHSApAQCAtNjM2LDYgKzc5Miw0MiBAQAogI2VuZGlmIC8qIFNUTTMyRjAgfHwgU1RNMzJGMyB8fCBTVE0zMkYxICovCiAKICNkZWZpbmUgR1BJT19BRjZfREZTRE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjZfREZTRE0xCisKKyNpZiBkZWZpbmVkKFNUTTMyVTUpIHx8IGRlZmluZWQoU1RNMzJINSkKKyNkZWZpbmUgR1BJT19BRjBfUlRDXzUwSHogICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjBfUlRDXzUwSFoKKyNlbmRpZiAvKiBTVE0zMlU1IHx8IFNUTTMySDUgKi8KKyNpZiBkZWZpbmVkKFNUTTMyVTUpCisjZGVmaW5lIEdQSU9fQUYwX1MyRFNUT1AgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fQUYwX1NSRFNUT1AKKyNkZWZpbmUgR1BJT19BRjExX0xQR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjExX0xQR1BJTzEKKyNlbmRpZiAvKiBTVE0zMlU1ICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEhBTF9HVFpDX0FsaWFzZWRfRGVmaW5lcyBIQUwgR1RaQyBBbGlhc2VkIERlZmluZXMgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKKyAgKiBAeworICAqLworI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgR1RaQ19QRVJJUEhfRENNSSAgICAgICAgICAgICAgICAgICAgICBHVFpDX1BFUklQSF9EQ01JX1BTU0kKKyNkZWZpbmUgR1RaQ19QRVJJUEhfTFREQyAgICAgICAgICAgICAgICAgICAgICBHVFpDX1BFUklQSF9MVERDVVNCCisjZW5kaWYgLyogU1RNMzJVNSAqLworI2lmIGRlZmluZWQoU1RNMzJINSkKKyNkZWZpbmUgR1RaQ19QRVJJUEhfREFDMTIgICAgICAgICAgICAgICAgICAgICBHVFpDX1BFUklQSF9EQUMxCisjZGVmaW5lIEdUWkNfUEVSSVBIX0FEQzEyICAgICAgICAgICAgICAgICAgICAgR1RaQ19QRVJJUEhfQURDCisjZGVmaW5lIEdUWkNfUEVSSVBIX1VTQkZTICAgICAgICAgICAgICAgICAgICAgR1RaQ19QRVJJUEhfVVNCCisjZW5kaWYgLyogU1RNMzJINSAqLworI2lmIGRlZmluZWQoU1RNMzJINSkgfHwgZGVmaW5lZChTVE0zMlU1KQorI2RlZmluZSBHVFpDX01DUEJCX05CX1ZDVFJfUkVHX01BWCAgICAgICAgICAgIEdUWkNfTVBDQkJfTkJfVkNUUl9SRUdfTUFYCisjZGVmaW5lIEdUWkNfTUNQQkJfTkJfTENLX1ZDVFJfUkVHX01BWCAgICAgICAgR1RaQ19NUENCQl9OQl9MQ0tfVkNUUl9SRUdfTUFYCisjZGVmaW5lIEdUWkNfTUNQQkJfU1VQRVJCTE9DS19VTkxPQ0tFRCAgICAgICAgR1RaQ19NUENCQl9TVVBFUkJMT0NLX1VOTE9DS0VECisjZGVmaW5lIEdUWkNfTUNQQkJfU1VQRVJCTE9DS19MT0NLRUQgICAgICAgICAgR1RaQ19NUENCQl9TVVBFUkJMT0NLX0xPQ0tFRAorI2RlZmluZSBHVFpDX01DUEJCX0JMT0NLX05TRUMgICAgICAgICAgICAgICAgIEdUWkNfTVBDQkJfQkxPQ0tfTlNFQworI2RlZmluZSBHVFpDX01DUEJCX0JMT0NLX1NFQyAgICAgICAgICAgICAgICAgIEdUWkNfTVBDQkJfQkxPQ0tfU0VDCisjZGVmaW5lIEdUWkNfTUNQQkJfQkxPQ0tfTlBSSVYgICAgICAgICAgICAgICAgR1RaQ19NUENCQl9CTE9DS19OUFJJVgorI2RlZmluZSBHVFpDX01DUEJCX0JMT0NLX1BSSVYgICAgICAgICAgICAgICAgIEdUWkNfTVBDQkJfQkxPQ0tfUFJJVgorI2RlZmluZSBHVFpDX01DUEJCX0xPQ0tfT0ZGICAgICAgICAgICAgICAgICAgIEdUWkNfTVBDQkJfTE9DS19PRkYKKyNkZWZpbmUgR1RaQ19NQ1BCQl9MT0NLX09OICAgICAgICAgICAgICAgICAgICBHVFpDX01QQ0JCX0xPQ0tfT04KKyNlbmRpZiAvKiBTVE0zMkg1IHx8IFNUTTMyVTUgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC04MTYsNyArMTAwOCw4IEBACiAjZGVmaW5lIEkyQ19OT1NUUkVUQ0hfRU5BQkxFRCAgICAgICAgICAgICAgICAgICBJMkNfTk9TVFJFVENIX0VOQUJMRQogI2RlZmluZSBJMkNfQU5BTE9HRklMVEVSX0VOQUJMRUQgICAgICAgICAgICAgICAgSTJDX0FOQUxPR0ZJTFRFUl9FTkFCTEUKICNkZWZpbmUgSTJDX0FOQUxPR0ZJTFRFUl9ESVNBQkxFRCAgICAgICAgICAgICAgIEkyQ19BTkFMT0dGSUxURVJfRElTQUJMRQotI2lmIGRlZmluZWQoU1RNMzJGMCkgfHwgZGVmaW5lZChTVE0zMkYxKSB8fCBkZWZpbmVkKFNUTTMyRjMpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDEpIHx8IGRlZmluZWQoU1RNMzJGNykKKyNpZiBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMSkgfHwgZGVmaW5lZChTVE0zMkYzKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgXAorICAgIGRlZmluZWQoU1RNMzJMMSkgfHwgZGVmaW5lZChTVE0zMkY3KQogI2RlZmluZSBIQUxfSTJDX1NUQVRFX01FTV9CVVNZX1RYICAgICAgICAgICAgICAgSEFMX0kyQ19TVEFURV9CVVNZX1RYCiAjZGVmaW5lIEhBTF9JMkNfU1RBVEVfTUVNX0JVU1lfUlggICAgICAgICAgICAgICBIQUxfSTJDX1NUQVRFX0JVU1lfUlgKICNkZWZpbmUgSEFMX0kyQ19TVEFURV9NQVNURVJfQlVTWV9UWCAgICAgICAgICAgIEhBTF9JMkNfU1RBVEVfQlVTWV9UWApAQCAtODczLDkgKzEwNjYsMTkgQEAKICNkZWZpbmUgTFBUSU1fVFJJR1NBTVBMRVRJTUVfNFRSQU5TSVRJT04gICAgICAgIExQVElNX1RSSUdTQU1QTEVUSU1FXzRUUkFOU0lUSU9OUwogI2RlZmluZSBMUFRJTV9UUklHU0FNUExFVElNRV84VFJBTlNJVElPTiAgICAgICAgTFBUSU1fVFJJR1NBTVBMRVRJTUVfOFRSQU5TSVRJT05TCiAKKworLyoqIEBkZWZncm91cCBIQUxfTFBUSU1fQWxpYXNlZF9EZWZpbmVzIEhBTCBMUFRJTSBBbGlhc2VkIERlZmluZXMgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKKyAgKiBAeworICAqLworI2RlZmluZSBIQUxfTFBUSU1fUmVhZENvbXBhcmUgICAgICBIQUxfTFBUSU1fUmVhZENhcHR1cmVkVmFsdWUKKy8qKgorICAqIEB9CisgICovCisKICNpZiBkZWZpbmVkKFNUTTMyVTUpCiAjZGVmaW5lIExQVElNX0lTUl9DQzEgICAgICAgIExQVElNX0lTUl9DQzFJRgogI2RlZmluZSBMUFRJTV9JU1JfQ0MyICAgICAgICBMUFRJTV9JU1JfQ0MySUYKKyNkZWZpbmUgTFBUSU1fQ0hBTk5FTF9BTEwgICAgMHgwMDAwMDAwMFUKICNlbmRpZiAvKiBTVE0zMlU1ICovCiAvKioKICAgKiBAfQpAQCAtOTQ0LDcgKzExNDcsNyBAQAogI2RlZmluZSBPUEFNUF9QR0FDT05ORUNUX1ZNMCAgICAgICAgICAgICAgICAgIE9QQU1QX1BHQV9DT05ORUNUX0lOVkVSVElOR0lOUFVUX0lPMAogI2RlZmluZSBPUEFNUF9QR0FDT05ORUNUX1ZNMSAgICAgICAgICAgICAgICAgIE9QQU1QX1BHQV9DT05ORUNUX0lOVkVSVElOR0lOUFVUX0lPMQogCi0jaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyRzQpCisjaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyRzQpIHx8IGRlZmluZWQoU1RNMzJVNSkKICNkZWZpbmUgSEFMX09QQU1QX01TUF9JTklUX0NCX0lEICAgICAgIEhBTF9PUEFNUF9NU1BJTklUX0NCX0lECiAjZGVmaW5lIEhBTF9PUEFNUF9NU1BfREVJTklUX0NCX0lEICAgICBIQUxfT1BBTVBfTVNQREVJTklUX0NCX0lECiAjZW5kaWYKQEAgLTEwMjgsOCArMTIzMSw4IEBACiAjZGVmaW5lIFJUQ19UQU1QRVIxXzJfM19JTlRFUlJVUFQgICAgICAgUlRDX0FMTF9UQU1QRVJfSU5URVJSVVBUCiAKICNkZWZpbmUgUlRDX1RJTUVTVEFNUFBJTl9QQzEzICBSVENfVElNRVNUQU1QUElOX0RFRkFVTFQKLSNkZWZpbmUgUlRDX1RJTUVTVEFNUFBJTl9QQTAgUlRDX1RJTUVTVEFNUFBJTl9QT1MxCi0jZGVmaW5lIFJUQ19USU1FU1RBTVBQSU5fUEk4IFJUQ19USU1FU1RBTVBQSU5fUE9TMQorI2RlZmluZSBSVENfVElNRVNUQU1QUElOX1BBMCAgIFJUQ19USU1FU1RBTVBQSU5fUE9TMQorI2RlZmluZSBSVENfVElNRVNUQU1QUElOX1BJOCAgIFJUQ19USU1FU1RBTVBQSU5fUE9TMQogI2RlZmluZSBSVENfVElNRVNUQU1QUElOX1BDMSAgIFJUQ19USU1FU1RBTVBQSU5fUE9TMgogCiAjZGVmaW5lIFJUQ19PVVRQVVRfUkVNQVBfUEMxMyAgUlRDX09VVFBVVF9SRU1BUF9OT05FCkBAIC0xMDQwLDE1ICsxMjQzLDQyIEBACiAjZGVmaW5lIFJUQ19UQU1QRVJQSU5fUEEwICBSVENfVEFNUEVSUElOX1BPUzEKICNkZWZpbmUgUlRDX1RBTVBFUlBJTl9QSTggIFJUQ19UQU1QRVJQSU5fUE9TMQogCisjaWYgZGVmaW5lZChTVE0zMkg1KQorI2RlZmluZSBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9OT05FICAgICAgICBUQU1QX0RFVklDRVNFQ1JFVFNfRVJBU0VfTk9ORQorI2RlZmluZSBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9CS1BfU1JBTSAgICBUQU1QX0RFVklDRVNFQ1JFVFNfRVJBU0VfQktQU1JBTQorI2VuZGlmIC8qIFNUTTMySDUgKi8KKworI2lmIGRlZmluZWQoU1RNMzJXQkEpCisjZGVmaW5lIFRBTVBfU0VDUkVUREVWSUNFX0VSQVNFX05PTkUgICAgICAgICAgICBUQU1QX0RFVklDRVNFQ1JFVFNfRVJBU0VfTk9ORQorI2RlZmluZSBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9TUkFNMiAgICAgICAgICAgVEFNUF9ERVZJQ0VTRUNSRVRTX0VSQVNFX1NSQU0yCisjZGVmaW5lIFRBTVBfU0VDUkVUREVWSUNFX0VSQVNFX1JIVUsgICAgICAgICAgICBUQU1QX0RFVklDRVNFQ1JFVFNfRVJBU0VfUkhVSworI2RlZmluZSBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9JQ0FDSEUgICAgICAgICAgVEFNUF9ERVZJQ0VTRUNSRVRTX0VSQVNFX0lDQUNIRQorI2RlZmluZSBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9TQUVTX0FFU19IQVNIICAgVEFNUF9ERVZJQ0VTRUNSRVRTX0VSQVNFX1NBRVNfQUVTX0hBU0gKKyNkZWZpbmUgVEFNUF9TRUNSRVRERVZJQ0VfRVJBU0VfUEtBX1NSQU0gICAgICAgIFRBTVBfREVWSUNFU0VDUkVUU19FUkFTRV9QS0FfU1JBTQorI2RlZmluZSBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9BTEwgICAgICAgICAgICAgVEFNUF9ERVZJQ0VTRUNSRVRTX0VSQVNFX0FMTAorI2VuZGlmIC8qIFNUTTMyV0JBICovCisKKyNpZiBkZWZpbmVkKFNUTTMySDUpIHx8IGRlZmluZWQoU1RNMzJXQkEpCisjZGVmaW5lIFRBTVBfU0VDUkVUREVWSUNFX0VSQVNFX0RJU0FCTEUgICAgIFRBTVBfREVWSUNFU0VDUkVUU19FUkFTRV9OT05FCisjZGVmaW5lIFRBTVBfU0VDUkVUREVWSUNFX0VSQVNFX0VOQUJMRSAgICAgIFRBTVBfU0VDUkVUREVWSUNFX0VSQVNFX0FMTAorI2VuZGlmIC8qIFNUTTMySDUgfHwgU1RNMzJXQkEgKi8KKworI2lmIGRlZmluZWQoU1RNMzJGNykKKyNkZWZpbmUgUlRDX1RBTVBDUl9UQU1QWEUgICAgICAgICAgUlRDX1RBTVBFUl9FTkFCTEVfQklUU19NQVNLCisjZGVmaW5lIFJUQ19UQU1QQ1JfVEFNUFhJRSAgICAgICAgIFJUQ19UQU1QRVJfSVRfRU5BQkxFX0JJVFNfTUFTSworI2VuZGlmIC8qIFNUTTMyRjcgKi8KKwogI2lmIGRlZmluZWQoU1RNMzJINykKICNkZWZpbmUgUlRDX1RBTVBDUl9UQU1QWEUgICAgICAgICAgUlRDX1RBTVBFUl9YCiAjZGVmaW5lIFJUQ19UQU1QQ1JfVEFNUFhJRSAgICAgICAgIFJUQ19UQU1QRVJfWF9JTlRFUlJVUFQKKyNlbmRpZiAvKiBTVE0zMkg3ICovCiAKKyNpZiBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMkwwKQogI2RlZmluZSBSVENfVEFNUEVSMV9JTlRFUlJVUFQgICAgICBSVENfSVRfVEFNUDEKICNkZWZpbmUgUlRDX1RBTVBFUjJfSU5URVJSVVBUICAgICAgUlRDX0lUX1RBTVAyCiAjZGVmaW5lIFJUQ19UQU1QRVIzX0lOVEVSUlVQVCAgICAgIFJUQ19JVF9UQU1QMwotI2RlZmluZSBSVENfQUxMX1RBTVBFUl9JTlRFUlJVUFQgICBSVENfSVRfVEFNUEFMTAotI2VuZGlmIC8qIFNUTTMySDcgKi8KKyNkZWZpbmUgUlRDX0FMTF9UQU1QRVJfSU5URVJSVVBUICAgUlRDX0lUX1RBTVAKKyNlbmRpZiAvKiBTVE0zMkY3IHx8IFNUTTMySDcgfHwgU1RNMzJMMCAqLwogCiAvKioKICAgKiBAfQpAQCAtMTIxNSw2ICsxNDQ1LDEwIEBACiAjZGVmaW5lIFRJTV9USU0zX1RJMV9DT01QMUNPTVAyX09VVCAgIFRJTV9USU0zX1RJMV9DT01QMV9DT01QMgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFNUTTMyVTUpCisjZGVmaW5lIE9DUkVGX0NMRUFSX1NFTEVDVF9Qb3MgICAgICAgT0NSRUZfQ0xFQVJfU0VMRUNUX1BPUworI2RlZmluZSBPQ1JFRl9DTEVBUl9TRUxFQ1RfTXNrICAgICAgIE9DUkVGX0NMRUFSX1NFTEVDVF9NU0sKKyNlbmRpZgogLyoqCiAgICogQH0KICAgKi8KQEAgLTEzMjQsMzAgKzE1NTgsNDAgQEAKICNkZWZpbmUgRVRIX01NQ1JGQUVDUiAgICAgICAgICAweDAwMDAwMTk4VQogI2RlZmluZSBFVEhfTU1DUkdVRkNSICAgICAgICAgIDB4MDAwMDAxQzRVCiAKLSNkZWZpbmUgRVRIX01BQ19UWEZJRk9fRlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMFUgIC8qIFR4IEZJRk8gZnVsbCAqLwotI2RlZmluZSBFVEhfTUFDX1RYRklGT05PVF9FTVBUWSAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwVSAgLyogVHggRklGTyBub3QgZW1wdHkgKi8KLSNkZWZpbmUgRVRIX01BQ19UWEZJRk9fV1JJVEVfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMFUgIC8qIFR4IEZJRk8gd3JpdGUgYWN0aXZlICovCi0jZGVmaW5lIEVUSF9NQUNfVFhGSUZPX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAvKiBUeCBGSUZPIHJlYWQgc3RhdHVzOiBJZGxlICovCi0jZGVmaW5lIEVUSF9NQUNfVFhGSUZPX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBVICAvKiBUeCBGSUZPIHJlYWQgc3RhdHVzOiBSZWFkICh0cmFuc2ZlcnJpbmcgZGF0YSB0byB0aGUgTUFDIHRyYW5zbWl0dGVyKSAqLwotI2RlZmluZSBFVEhfTUFDX1RYRklGT19XQUlUSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwVSAgLyogVHggRklGTyByZWFkIHN0YXR1czogV2FpdGluZyBmb3IgVHhTdGF0dXMgZnJvbSBNQUMgdHJhbnNtaXR0ZXIgKi8KLSNkZWZpbmUgRVRIX01BQ19UWEZJRk9fV1JJVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMwMDAwMFUgIC8qIFR4IEZJRk8gcmVhZCBzdGF0dXM6IFdyaXRpbmcgdGhlIHJlY2VpdmVkIFR4U3RhdHVzIG9yIGZsdXNoaW5nIHRoZSBUeEZJRk8gKi8KLSNkZWZpbmUgRVRIX01BQ19UUkFOU01JU1NJT05fUEFVU0UgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMFUgIC8qIE1BQyB0cmFuc21pdHRlciBpbiBwYXVzZSAqLwotI2RlZmluZSBFVEhfTUFDX1RSQU5TTUlURlJBTUVDT05UUk9MTEVSX0lETEUgICAgICAgICAgICAweDAwMDAwMDAwVSAgLyogTUFDIHRyYW5zbWl0IGZyYW1lIGNvbnRyb2xsZXI6IElkbGUgKi8KLSNkZWZpbmUgRVRIX01BQ19UUkFOU01JVEZSQU1FQ09OVFJPTExFUl9XQUlUSU5HICAgICAgICAgMHgwMDAyMDAwMFUgIC8qIE1BQyB0cmFuc21pdCBmcmFtZSBjb250cm9sbGVyOiBXYWl0aW5nIGZvciBTdGF0dXMgb2YgcHJldmlvdXMgZnJhbWUgb3IgSUZHL2JhY2tvZmYgcGVyaW9kIHRvIGJlIG92ZXIgKi8KLSNkZWZpbmUgRVRIX01BQ19UUkFOU01JVEZSQU1FQ09OVFJPTExFUl9HRU5SQVRJTkdfUENGICAgMHgwMDA0MDAwMFUgIC8qIE1BQyB0cmFuc21pdCBmcmFtZSBjb250cm9sbGVyOiBHZW5lcmF0aW5nIGFuZCB0cmFuc21pdHRpbmcgYSBQYXVzZSBjb250cm9sIGZyYW1lIChpbiBmdWxsIGR1cGxleCBtb2RlKSAqLwotI2RlZmluZSBFVEhfTUFDX1RSQU5TTUlURlJBTUVDT05UUk9MTEVSX1RSQU5TRkVSUklORyAgICAweDAwMDYwMDAwVSAgLyogTUFDIHRyYW5zbWl0IGZyYW1lIGNvbnRyb2xsZXI6IFRyYW5zZmVycmluZyBpbnB1dCBmcmFtZSBmb3IgdHJhbnNtaXNzaW9uICovCisjZGVmaW5lIEVUSF9NQUNfVFhGSUZPX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwVSAgLyogVHggRklGTyBmdWxsICovCisjZGVmaW5lIEVUSF9NQUNfVFhGSUZPTk9UX0VNUFRZICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwVSAgLyogVHggRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgRVRIX01BQ19UWEZJRk9fV1JJVEVfQUNUSVZFICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDBVICAvKiBUeCBGSUZPIHdyaXRlIGFjdGl2ZSAqLworI2RlZmluZSBFVEhfTUFDX1RYRklGT19JRExFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgIC8qIFR4IEZJRk8gcmVhZCBzdGF0dXM6IElkbGUgKi8KKyNkZWZpbmUgRVRIX01BQ19UWEZJRk9fUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBVICAvKiBUeCBGSUZPIHJlYWQgc3RhdHVzOiBSZWFkICh0cmFuc2ZlcnJpbmcgZGF0YSB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgTUFDIHRyYW5zbWl0dGVyKSAqLworI2RlZmluZSBFVEhfTUFDX1RYRklGT19XQUlUSU5HICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMFUgIC8qIFR4IEZJRk8gcmVhZCBzdGF0dXM6IFdhaXRpbmcgZm9yIFR4U3RhdHVzIGZyb20gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFDIHRyYW5zbWl0dGVyICovCisjZGVmaW5lIEVUSF9NQUNfVFhGSUZPX1dSSVRJTkcgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzAwMDAwVSAgLyogVHggRklGTyByZWFkIHN0YXR1czogV3JpdGluZyB0aGUgcmVjZWl2ZWQgVHhTdGF0dXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBmbHVzaGluZyB0aGUgVHhGSUZPICovCisjZGVmaW5lIEVUSF9NQUNfVFJBTlNNSVNTSU9OX1BBVVNFICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwVSAgLyogTUFDIHRyYW5zbWl0dGVyIGluIHBhdXNlICovCisjZGVmaW5lIEVUSF9NQUNfVFJBTlNNSVRGUkFNRUNPTlRST0xMRVJfSURMRSAgICAgICAgICAweDAwMDAwMDAwVSAgLyogTUFDIHRyYW5zbWl0IGZyYW1lIGNvbnRyb2xsZXI6IElkbGUgKi8KKyNkZWZpbmUgRVRIX01BQ19UUkFOU01JVEZSQU1FQ09OVFJPTExFUl9XQUlUSU5HICAgICAgIDB4MDAwMjAwMDBVICAvKiBNQUMgdHJhbnNtaXQgZnJhbWUgY29udHJvbGxlcjogV2FpdGluZyBmb3IgU3RhdHVzIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHByZXZpb3VzIGZyYW1lIG9yIElGRy9iYWNrb2ZmIHBlcmlvZCB0byBiZSBvdmVyICovCisjZGVmaW5lIEVUSF9NQUNfVFJBTlNNSVRGUkFNRUNPTlRST0xMRVJfR0VOUkFUSU5HX1BDRiAweDAwMDQwMDAwVSAgLyogTUFDIHRyYW5zbWl0IGZyYW1lIGNvbnRyb2xsZXI6IEdlbmVyYXRpbmcgYW5kIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWl0dGluZyBhIFBhdXNlIGNvbnRyb2wgZnJhbWUgKGluIGZ1bGwgZHVwbGV4IG1vZGUpICovCisjZGVmaW5lIEVUSF9NQUNfVFJBTlNNSVRGUkFNRUNPTlRST0xMRVJfVFJBTlNGRVJSSU5HICAweDAwMDYwMDAwVSAgLyogTUFDIHRyYW5zbWl0IGZyYW1lIGNvbnRyb2xsZXI6IFRyYW5zZmVycmluZyBpbnB1dCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSBmb3IgdHJhbnNtaXNzaW9uICovCiAjZGVmaW5lIEVUSF9NQUNfTUlJX1RSQU5TTUlUX0FDVElWRSAgICAgICAgICAgMHgwMDAxMDAwMFUgIC8qIE1BQyBNSUkgdHJhbnNtaXQgZW5naW5lIGFjdGl2ZSAqLwogI2RlZmluZSBFVEhfTUFDX1JYRklGT19FTVBUWSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAvKiBSeCBGSUZPIGZpbGwgbGV2ZWw6IGVtcHR5ICovCi0jZGVmaW5lIEVUSF9NQUNfUlhGSUZPX0JFTE9XX1RIUkVTSE9MRCAgICAgICAgMHgwMDAwMDEwMFUgIC8qIFJ4IEZJRk8gZmlsbCBsZXZlbDogZmlsbC1sZXZlbCBiZWxvdyBmbG93LWNvbnRyb2wgZGUtYWN0aXZhdGUgdGhyZXNob2xkICovCi0jZGVmaW5lIEVUSF9NQUNfUlhGSUZPX0FCT1ZFX1RIUkVTSE9MRCAgICAgICAgMHgwMDAwMDIwMFUgIC8qIFJ4IEZJRk8gZmlsbCBsZXZlbDogZmlsbC1sZXZlbCBhYm92ZSBmbG93LWNvbnRyb2wgYWN0aXZhdGUgdGhyZXNob2xkICovCisjZGVmaW5lIEVUSF9NQUNfUlhGSUZPX0JFTE9XX1RIUkVTSE9MRCAgICAgICAgMHgwMDAwMDEwMFUgIC8qIFJ4IEZJRk8gZmlsbCBsZXZlbDogZmlsbC1sZXZlbCBiZWxvdyBmbG93LWNvbnRyb2wgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlLWFjdGl2YXRlIHRocmVzaG9sZCAqLworI2RlZmluZSBFVEhfTUFDX1JYRklGT19BQk9WRV9USFJFU0hPTEQgICAgICAgIDB4MDAwMDAyMDBVICAvKiBSeCBGSUZPIGZpbGwgbGV2ZWw6IGZpbGwtbGV2ZWwgYWJvdmUgZmxvdy1jb250cm9sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZSB0aHJlc2hvbGQgKi8KICNkZWZpbmUgRVRIX01BQ19SWEZJRk9fRlVMTCAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwVSAgLyogUnggRklGTyBmaWxsIGxldmVsOiBmdWxsICovCiAjaWYgZGVmaW5lZChTVE0zMkYxKQogI2Vsc2UKICNkZWZpbmUgRVRIX01BQ19SRUFEQ09OVFJPTExFUl9JRExFICAgICAgICAgICAweDAwMDAwMDAwVSAgLyogUnggRklGTyByZWFkIGNvbnRyb2xsZXIgSURMRSBzdGF0ZSAqLwogI2RlZmluZSBFVEhfTUFDX1JFQURDT05UUk9MTEVSX1JFQURJTkdfREFUQSAgIDB4MDAwMDAwMjBVICAvKiBSeCBGSUZPIHJlYWQgY29udHJvbGxlciBSZWFkaW5nIGZyYW1lIGRhdGEgKi8KLSNkZWZpbmUgRVRIX01BQ19SRUFEQ09OVFJPTExFUl9SRUFESU5HX1NUQVRVUyAweDAwMDAwMDQwVSAgLyogUnggRklGTyByZWFkIGNvbnRyb2xsZXIgUmVhZGluZyBmcmFtZSBzdGF0dXMgKG9yIHRpbWUtc3RhbXApICovCisjZGVmaW5lIEVUSF9NQUNfUkVBRENPTlRST0xMRVJfUkVBRElOR19TVEFUVVMgMHgwMDAwMDA0MFUgIC8qIFJ4IEZJRk8gcmVhZCBjb250cm9sbGVyIFJlYWRpbmcgZnJhbWUgc3RhdHVzIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aW1lLXN0YW1wKSAqLwogI2VuZGlmCi0jZGVmaW5lIEVUSF9NQUNfUkVBRENPTlRST0xMRVJfRkxVU0hJTkcgICAgICAgMHgwMDAwMDA2MFUgIC8qIFJ4IEZJRk8gcmVhZCBjb250cm9sbGVyIEZsdXNoaW5nIHRoZSBmcmFtZSBkYXRhIGFuZCBzdGF0dXMgKi8KKyNkZWZpbmUgRVRIX01BQ19SRUFEQ09OVFJPTExFUl9GTFVTSElORyAgICAgICAweDAwMDAwMDYwVSAgLyogUnggRklGTyByZWFkIGNvbnRyb2xsZXIgRmx1c2hpbmcgdGhlIGZyYW1lIGRhdGEgYW5kIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgKi8KICNkZWZpbmUgRVRIX01BQ19SWEZJRk9fV1JJVEVfQUNUSVZFICAgICAgICAgICAweDAwMDAwMDEwVSAgLyogUnggRklGTyB3cml0ZSBjb250cm9sbGVyIGFjdGl2ZSAqLwogI2RlZmluZSBFVEhfTUFDX1NNQUxMX0ZJRk9fTk9UQUNUSVZFICAgICAgICAgIDB4MDAwMDAwMDBVICAvKiBNQUMgc21hbGwgRklGTyByZWFkIC8gd3JpdGUgY29udHJvbGxlcnMgbm90IGFjdGl2ZSAqLwogI2RlZmluZSBFVEhfTUFDX1NNQUxMX0ZJRk9fUkVBRF9BQ1RJVkUgICAgICAgIDB4MDAwMDAwMDJVICAvKiBNQUMgc21hbGwgRklGTyByZWFkIGNvbnRyb2xsZXIgYWN0aXZlICovCkBAIC0xNTE4LDcgKzE3NjIsOCBAQAogI2RlZmluZSBIQUxfRW5hYmxlREJHU3RhbmRieU1vZGUgSEFMX0RCR01DVV9FbmFibGVEQkdTdGFuZGJ5TW9kZQogI2RlZmluZSBIQUxfRGlzYWJsZURCR1N0YW5kYnlNb2RlIEhBTF9EQkdNQ1VfRGlzYWJsZURCR1N0YW5kYnlNb2RlCiAjZGVmaW5lIEhBTF9EQkdfTG93UG93ZXJDb25maWcoUGVyaXBoLCBjbWQpICgoKGNtZFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPT1FTkFCTEUpPyBIQUxfREJHTUNVX0RCR19FbmFibGVMb3dQb3dlckNvbmZpZyhQZXJpcGgpIDogSEFMX0RCR01DVV9EQkdfRGlzYWJsZUxvd1Bvd2VyQ29uZmlnKFBlcmlwaCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT09RU5BQkxFKT8gSEFMX0RCR01DVV9EQkdfRW5hYmxlTG93UG93ZXJDb25maWcoUGVyaXBoKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9EQkdNQ1VfREJHX0Rpc2FibGVMb3dQb3dlckNvbmZpZyhQZXJpcGgpKQogI2RlZmluZSBIQUxfVlJFRklOVF9PdXRwdXRTZWxlY3QgIEhBTF9TWVNDRkdfVlJFRklOVF9PdXRwdXRTZWxlY3QKICNkZWZpbmUgSEFMX0xvY2tfQ21kKGNtZCkgKCgoY21kKT09RU5BQkxFKSA/IEhBTF9TWVNDRkdfRW5hYmxlX0xvY2tfVlJFRklOVCgpIDogSEFMX1NZU0NGR19EaXNhYmxlX0xvY2tfVlJFRklOVCgpKQogI2lmIGRlZmluZWQoU1RNMzJMMCkKQEAgLTE1MjcsOCArMTc3MiwxMCBAQAogI2VuZGlmCiAjZGVmaW5lIEhBTF9BRENfRW5hYmxlQnVmZmVyX0NtZChjbWQpICAoKChjbWQpPT1FTkFCTEUpID8gSEFMX0FEQ0V4X0VuYWJsZVZSRUZJTlQoKSA6IEhBTF9BRENFeF9EaXNhYmxlVlJFRklOVCgpKQogI2RlZmluZSBIQUxfQURDX0VuYWJsZUJ1ZmZlclNlbnNvcl9DbWQoY21kKSAoKChjbWRcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT09RU5BQkxFKSA/ICBIQUxfQURDRXhfRW5hYmxlVlJFRklOVFRlbXBTZW5zb3IoKSA6IEhBTF9BRENFeF9EaXNhYmxlVlJFRklOVFRlbXBTZW5zb3IoKSkKLSNpZiBkZWZpbmVkKFNUTTMySDdBM3h4KSB8fCBkZWZpbmVkKFNUTTMySDdCM3h4KSB8fCBkZWZpbmVkKFNUTTMySDdCMHh4KSB8fCBkZWZpbmVkKFNUTTMySDdBM3h4USkgfHwgZGVmaW5lZChTVE0zMkg3QjN4eFEpIHx8IGRlZmluZWQoU1RNMzJIN0IweHhRKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk9PUVOQUJMRSkgPyAgSEFMX0FEQ0V4X0VuYWJsZVZSRUZJTlRUZW1wU2Vuc29yKCkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfQURDRXhfRGlzYWJsZVZSRUZJTlRUZW1wU2Vuc29yKCkpCisjaWYgZGVmaW5lZChTVE0zMkg3QTN4eCkgfHwgZGVmaW5lZChTVE0zMkg3QjN4eCkgfHwgZGVmaW5lZChTVE0zMkg3QjB4eCkgfHwgZGVmaW5lZChTVE0zMkg3QTN4eFEpIHx8IFwKKyAgICBkZWZpbmVkKFNUTTMySDdCM3h4USkgfHwgZGVmaW5lZChTVE0zMkg3QjB4eFEpCiAjZGVmaW5lIEhBTF9FbmFibGVTUkRvbWFpbkRCR1N0b3BNb2RlICAgICAgSEFMX0VuYWJsZURvbWFpbjNEQkdTdG9wTW9kZQogI2RlZmluZSBIQUxfRGlzYWJsZVNSRG9tYWluREJHU3RvcE1vZGUgICAgIEhBTF9EaXNhYmxlRG9tYWluM0RCR1N0b3BNb2RlCiAjZGVmaW5lIEhBTF9FbmFibGVTUkRvbWFpbkRCR1N0YW5kYnlNb2RlICAgSEFMX0VuYWJsZURvbWFpbjNEQkdTdGFuZGJ5TW9kZQpAQCAtMTU2MiwxNiArMTgwOSwyMSBAQAogI2RlZmluZSBIQUxfRk1QSTJDRXhfQW5hbG9nRmlsdGVyX0NvbmZpZyAgICAgIEhBTF9GTVBJMkNFeF9Db25maWdBbmFsb2dGaWx0ZXIKICNkZWZpbmUgSEFMX0ZNUEkyQ0V4X0RpZ2l0YWxGaWx0ZXJfQ29uZmlnICAgICBIQUxfRk1QSTJDRXhfQ29uZmlnRGlnaXRhbEZpbHRlcgogCi0jZGVmaW5lIEhBTF9JMkNGYXN0TW9kZVBsdXNDb25maWcoU1lTQ0ZHX0kyQ0Zhc3RNb2RlUGx1cywgY21kKSAoKChjbWRcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk9PUVOQUJMRSk/IEhBTF9JMkNFeF9FbmFibGVGYXN0TW9kZVBsdXMoU1lTQ0ZHX0kyQ0Zhc3RNb2RlUGx1cyk6IEhBTF9JMkNFeF9EaXNhYmxlRmFzdE1vZGVQbHVzKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMpKQorI2RlZmluZSBIQUxfSTJDRmFzdE1vZGVQbHVzQ29uZmlnKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMsIGNtZCkgKChjbWQgPT0gRU5BQkxFKT8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9JMkNFeF9FbmFibGVGYXN0TW9kZVBsdXMoU1lTQ0ZHX0kyQ0Zhc3RNb2RlUGx1cyk6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfSTJDRXhfRGlzYWJsZUZhc3RNb2RlUGx1cyhTWVNDRkdfSTJDRmFzdE1vZGVQbHVzKSkKIAotI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJGMCkgfHwgZGVmaW5lZChTVE0zMkYxKSB8fCBkZWZpbmVkKFNUTTMyRjIpIHx8IGRlZmluZWQoU1RNMzJGMykgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkwxKQorI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJGMCkgfHwgZGVmaW5lZChTVE0zMkYxKSB8fCBcCisgICAgZGVmaW5lZChTVE0zMkYyKSB8fCBkZWZpbmVkKFNUTTMyRjMpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyTDApIHx8IFwKKyAgICBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkc0KSB8fCBkZWZpbmVkKFNUTTMyTDEpCiAjZGVmaW5lIEhBTF9JMkNfTWFzdGVyX1NlcXVlbnRpYWxfVHJhbnNtaXRfSVQgIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9JVAogI2RlZmluZSBIQUxfSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1JlY2VpdmVfSVQgICBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9JVAogI2RlZmluZSBIQUxfSTJDX1NsYXZlX1NlcXVlbnRpYWxfVHJhbnNtaXRfSVQgICBIQUxfSTJDX1NsYXZlX1NlcV9UcmFuc21pdF9JVAogI2RlZmluZSBIQUxfSTJDX1NsYXZlX1NlcXVlbnRpYWxfUmVjZWl2ZV9JVCAgICBIQUxfSTJDX1NsYXZlX1NlcV9SZWNlaXZlX0lUCi0jZW5kaWYgLyogU1RNMzJINyB8fCBTVE0zMldCICB8fCBTVE0zMkcwIHx8IFNUTTMyRjAgfHwgU1RNMzJGMSB8fCBTVE0zMkYyIHx8IFNUTTMyRjMgfHwgU1RNMzJGNCB8fCBTVE0zMkY3IHx8IFNUTTMyTDAgfHwgU1RNMzJMNCB8fCBTVE0zMkw1IHx8IFNUTTMyRzQgfHwgU1RNMzJMMSAqLwotI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMyRzQpfHwgZGVmaW5lZChTVE0zMkwxKQorI2VuZGlmIC8qIFNUTTMySDcgfHwgU1RNMzJXQiAgfHwgU1RNMzJHMCB8fCBTVE0zMkYwIHx8IFNUTTMyRjEgfHwgU1RNMzJGMiB8fCBTVE0zMkYzIHx8IFNUTTMyRjQgfHwgU1RNMzJGNyB8fCBTVE0zMkwwIHx8CisgICAgICAgICAgU1RNMzJMNCB8fCBTVE0zMkw1IHx8IFNUTTMyRzQgfHwgU1RNMzJMMSAqLworI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBcCisgICAgZGVmaW5lZChTVE0zMkwwKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkc0KXx8IGRlZmluZWQoU1RNMzJMMSkKICNkZWZpbmUgSEFMX0kyQ19NYXN0ZXJfU2VxdWVudGlhbF9UcmFuc21pdF9ETUEgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0RNQQogI2RlZmluZSBIQUxfSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1JlY2VpdmVfRE1BICBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9ETUEKICNkZWZpbmUgSEFMX0kyQ19TbGF2ZV9TZXF1ZW50aWFsX1RyYW5zbWl0X0RNQSAgSEFMX0kyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfRE1BCkBAIC0xNjQ1LDEwICsxODk3LDExMSBAQAogCiAjZGVmaW5lIFBXUl9NT0RFX0VWVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQV1JfUFZEX01PREVfTk9STUFMCiAKKyNpZiBkZWZpbmVkIChTVE0zMlU1KQorI2RlZmluZSBQV1JfU1JBTTFfUEFHRTFfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0xX1BBR0UxX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0xX1BBR0UyX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNMV9QQUdFMl9TVE9QCisjZGVmaW5lIFBXUl9TUkFNMV9QQUdFM19TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTFfUEFHRTNfU1RPUAorI2RlZmluZSBQV1JfU1JBTTFfUEFHRTRfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0xX1BBR0U0X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0xX1BBR0U1X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNMV9QQUdFNV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNMV9QQUdFNl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTFfUEFHRTZfU1RPUAorI2RlZmluZSBQV1JfU1JBTTFfUEFHRTdfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0xX1BBR0U3X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0xX1BBR0U4X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNMV9QQUdFOF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNMV9QQUdFOV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTFfUEFHRTlfU1RPUAorI2RlZmluZSBQV1JfU1JBTTFfUEFHRTEwX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX1NSQU0xX1BBR0UxMF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNMV9QQUdFMTFfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfU1JBTTFfUEFHRTExX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0xX1BBR0UxMl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9TUkFNMV9QQUdFMTJfU1RPUAorI2RlZmluZSBQV1JfU1JBTTFfRlVMTF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICAgUFdSX1NSQU0xX0ZVTExfU1RPUAorCisjZGVmaW5lIFBXUl9TUkFNMl9QQUdFMV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTJfUEFHRTFfU1RPUAorI2RlZmluZSBQV1JfU1JBTTJfUEFHRTJfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0yX1BBR0UyX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0yX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgIFBXUl9TUkFNMl9GVUxMX1NUT1AKKworI2RlZmluZSBQV1JfU1JBTTNfUEFHRTFfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0UxX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0UyX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFMl9TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19QQUdFM19TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTNfUEFHRTNfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfUEFHRTRfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0U0X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0U1X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFNV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19QQUdFNl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTNfUEFHRTZfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfUEFHRTdfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0U3X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0U4X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFOF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19QQUdFOV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTNfUEFHRTlfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfUEFHRTEwX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0UxMF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19QQUdFMTFfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfU1JBTTNfUEFHRTExX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0UxMl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFMTJfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfUEFHRTEzX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0UxM19TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgICBQV1JfU1JBTTNfRlVMTF9TVE9QCisKKyNkZWZpbmUgUFdSX1NSQU00X0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgIFBXUl9TUkFNNF9GVUxMX1NUT1AKKworI2RlZmluZSBQV1JfU1JBTTVfUEFHRTFfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0UxX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0UyX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFMl9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9QQUdFM19TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTVfUEFHRTNfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfUEFHRTRfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0U0X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0U1X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFNV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9QQUdFNl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTVfUEFHRTZfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfUEFHRTdfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0U3X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0U4X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFOF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9QQUdFOV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTVfUEFHRTlfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfUEFHRTEwX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0UxMF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9QQUdFMTFfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfU1JBTTVfUEFHRTExX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0UxMl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFMTJfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfUEFHRTEzX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0UxM19TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgICBQV1JfU1JBTTVfRlVMTF9TVE9QCisKKyNkZWZpbmUgUFdSX1NSQU02X1BBR0UxX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNl9QQUdFMV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNl9QQUdFMl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTZfUEFHRTJfU1RPUAorI2RlZmluZSBQV1JfU1JBTTZfUEFHRTNfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU02X1BBR0UzX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU02X1BBR0U0X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNl9QQUdFNF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNl9QQUdFNV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTZfUEFHRTVfU1RPUAorI2RlZmluZSBQV1JfU1JBTTZfUEFHRTZfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU02X1BBR0U2X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU02X1BBR0U3X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNl9QQUdFN19TVE9QCisjZGVmaW5lIFBXUl9TUkFNNl9QQUdFOF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTZfUEFHRThfU1RPUAorI2RlZmluZSBQV1JfU1JBTTZfRlVMTF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICAgUFdSX1NSQU02X0ZVTExfU1RPUAorCisKKyNkZWZpbmUgUFdSX0lDQUNIRV9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9JQ0FDSEVfRlVMTF9TVE9QCisjZGVmaW5lIFBXUl9EQ0FDSEUxX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfRENBQ0hFMV9GVUxMX1NUT1AKKyNkZWZpbmUgUFdSX0RDQUNIRTJfRlVMTF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9EQ0FDSEUyX0ZVTExfU1RPUAorI2RlZmluZSBQV1JfRE1BMkRSQU1fRlVMTF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgUFdSX0RNQTJEUkFNX0ZVTExfU1RPUAorI2RlZmluZSBQV1JfUEVSSVBIUkFNX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgUFdSX1BFUklQSFJBTV9GVUxMX1NUT1AKKyNkZWZpbmUgUFdSX1BLQTMyUkFNX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgIFBXUl9QS0EzMlJBTV9GVUxMX1NUT1AKKyNkZWZpbmUgUFdSX0dSQVBISUNQUkFNX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgIFBXUl9HUkFQSElDUFJBTV9GVUxMX1NUT1AKKyNkZWZpbmUgUFdSX0RTSVJBTV9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9EU0lSQU1fRlVMTF9TVE9QCisjZGVmaW5lIFBXUl9KUEVHUkFNX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfSlBFR1JBTV9GVUxMX1NUT1AKKworCisjZGVmaW5lIFBXUl9TUkFNMl9QQUdFMV9TVEFOREJZX1JFVEVOVElPTiAgICAgICAgICAgICBQV1JfU1JBTTJfUEFHRTFfU1RBTkRCWQorI2RlZmluZSBQV1JfU1JBTTJfUEFHRTJfU1RBTkRCWV9SRVRFTlRJT04gICAgICAgICAgICAgUFdSX1NSQU0yX1BBR0UyX1NUQU5EQlkKKyNkZWZpbmUgUFdSX1NSQU0yX0ZVTExfU1RBTkRCWV9SRVRFTlRJT04gICAgICAgICAgICAgIFBXUl9TUkFNMl9GVUxMX1NUQU5EQlkKKworI2RlZmluZSBQV1JfU1JBTTFfRlVMTF9SVU5fUkVURU5USU9OICAgICAgICAgICAgICAgICAgUFdSX1NSQU0xX0ZVTExfUlVOCisjZGVmaW5lIFBXUl9TUkFNMl9GVUxMX1JVTl9SRVRFTlRJT04gICAgICAgICAgICAgICAgICBQV1JfU1JBTTJfRlVMTF9SVU4KKyNkZWZpbmUgUFdSX1NSQU0zX0ZVTExfUlVOX1JFVEVOVElPTiAgICAgICAgICAgICAgICAgIFBXUl9TUkFNM19GVUxMX1JVTgorI2RlZmluZSBQV1JfU1JBTTRfRlVMTF9SVU5fUkVURU5USU9OICAgICAgICAgICAgICAgICAgUFdSX1NSQU00X0ZVTExfUlVOCisjZGVmaW5lIFBXUl9TUkFNNV9GVUxMX1JVTl9SRVRFTlRJT04gICAgICAgICAgICAgICAgICBQV1JfU1JBTTVfRlVMTF9SVU4KKyNkZWZpbmUgUFdSX1NSQU02X0ZVTExfUlVOX1JFVEVOVElPTiAgICAgICAgICAgICAgICAgIFBXUl9TUkFNNl9GVUxMX1JVTgorCisjZGVmaW5lIFBXUl9BTExfUkFNX1JVTl9SRVRFTlRJT05fTUFTSyAgICAgICAgICAgICAgICBQV1JfQUxMX1JBTV9SVU5fTUFTSworI2VuZGlmCisKIC8qKgogICAqIEB9CiAgKi8KIAorLyoqIEBkZWZncm91cCBIQUxfUlRDX0FsaWFzZWRfRnVuY3Rpb25zIEhBTCBSVEMgQWxpYXNlZCBGdW5jdGlvbnMgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKKyAgKiBAeworICAqLworI2lmIGRlZmluZWQoU1RNMzJINSkgfHwgZGVmaW5lZChTVE0zMldCQSkKKyNkZWZpbmUgSEFMX1JUQ0V4X1NldEJvb3RoYXJkd2FyZUtleSAgICAgICAgICAgIEhBTF9SVENFeF9Mb2NrQm9vdEhhcmR3YXJlS2V5CisjZGVmaW5lIEhBTF9SVENFeF9CS1VQQmxvY2tfRW5hYmxlICAgICAgICAgICAgICBIQUxfUlRDRXhfQktVUEJsb2NrCisjZGVmaW5lIEhBTF9SVENFeF9CS1VQQmxvY2tfRGlzYWJsZSAgICAgICAgICAgICBIQUxfUlRDRXhfQktVUFVuYmxvY2sKKyNkZWZpbmUgSEFMX1JUQ0V4X0VyYXNlX1NlY3JldERldl9Db25mICAgICAgICAgIEhBTF9SVENFeF9Db25maWdFcmFzZURldmljZVNlY3JldHMKKyNlbmRpZiAvKiBTVE0zMkg1IHx8IFNUTTMyV0JBICovCisKKy8qKgorICAqIEB9CisgICovCisKIC8qKiBAZGVmZ3JvdXAgSEFMX1NNQlVTX0FsaWFzZWRfRnVuY3Rpb25zIEhBTCBTTUJVUyBBbGlhc2VkIEZ1bmN0aW9ucyBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQogICAqIEB7CiAgICovCkBAIC0xNjc0LDcgKzIwMjcsOCBAQAogI2RlZmluZSBIQUxfVElNX0RNQUVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1fRE1BRXJyb3IKICNkZWZpbmUgSEFMX1RJTV9ETUFDYXB0dXJlQ3BsdCAgICAgICAgICAgICAgICAgICAgICAgICAgVElNX0RNQUNhcHR1cmVDcGx0CiAjZGVmaW5lIEhBTF9USU1FeF9ETUFDb21tdXRhdGlvbkNwbHQgICAgICAgICAgICAgICAgICAgIFRJTUV4X0RNQUNvbW11dGF0aW9uQ3BsdAotI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMSkgfHwgZGVmaW5lZChTVE0zMkYyKSB8fCBkZWZpbmVkKFNUTTMyRjMpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkKKyNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkYwKSB8fCBkZWZpbmVkKFNUTTMyRjEpIHx8IGRlZmluZWQoU1RNMzJGMikgfHwgXAorICAgIGRlZmluZWQoU1RNMzJGMykgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KQogI2RlZmluZSBIQUxfVElNX1NsYXZlQ29uZmlnU3luY2hyb25pemF0aW9uICAgICAgICAgICAgICBIQUxfVElNX1NsYXZlQ29uZmlnU3luY2hybwogI2RlZmluZSBIQUxfVElNX1NsYXZlQ29uZmlnU3luY2hyb25pemF0aW9uX0lUICAgICAgICAgICBIQUxfVElNX1NsYXZlQ29uZmlnU3luY2hyb19JVAogI2RlZmluZSBIQUxfVElNRXhfQ29tbXV0YXRpb25DYWxsYmFjayAgICAgICAgICAgICAgICAgICBIQUxfVElNRXhfQ29tbXV0Q2FsbGJhY2sKQEAgLTE5MzEsNyArMjI4NSw4IEBACiAjZGVmaW5lIENPTVBfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9DT01QX0RJU0FCTEUKICNkZWZpbmUgQ09NUF9MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX0NPTVBfTE9DSwogCi0jaWYgZGVmaW5lZChTVE0zMkYzMDF4OCkgfHwgZGVmaW5lZChTVE0zMkYzMDJ4OCkgfHwgZGVmaW5lZChTVE0zMkYzMTh4eCkgfHwgZGVmaW5lZChTVE0zMkYzMDN4OCkgfHwgZGVmaW5lZChTVE0zMkYzMzR4OCkgfHwgZGVmaW5lZChTVE0zMkYzMjh4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRjMwMXg4KSB8fCBkZWZpbmVkKFNUTTMyRjMwMng4KSB8fCBkZWZpbmVkKFNUTTMyRjMxOHh4KSB8fCBkZWZpbmVkKFNUTTMyRjMwM3g4KSB8fCBcCisgICAgZGVmaW5lZChTVE0zMkYzMzR4OCkgfHwgZGVmaW5lZChTVE0zMkYzMjh4eCkKICNkZWZpbmUgX19IQUxfQ09NUF9FWFRJX1JJU0lOR19JVF9FTkFCTEUoX19FWFRJTElORV9fKSAgICgoKF9fRVhUSUxJTkVfXykgID09IENPTVBfRVhUSV9MSU5FX0NPTVAyKSA/IF9fSEFMX0NPTVBfQ09NUDJfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKSA6IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRVhUSUxJTkVfXykgID09IENPTVBfRVhUSV9MSU5FX0NPTVA0KSA/IF9fSEFMX0NPTVBfQ09NUDRfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKSA6IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9DT01QX0NPTVA2X0VYVElfRU5BQkxFX1JJU0lOR19FREdFKCkpCkBAIC0yMTAzLDggKzI0NTgsMTAgQEAKIC8qKiBAZGVmZ3JvdXAgSEFMX0NPTVBfQWxpYXNlZF9GdW5jdGlvbnMgSEFMIENPTVAgQWxpYXNlZCBGdW5jdGlvbnMgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKICAgKiBAewogICAqLwotI2RlZmluZSBIQUxfQ09NUF9TdGFydF9JVCAgICAgICBIQUxfQ09NUF9TdGFydCAvKiBGdW5jdGlvbiBjb25zaWRlcmVkIGFzIGxlZ2FjeSBhcyBFWFRJIGV2ZW50IG9yIElUIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSBpbnRvIEhBTF9DT01QX0luaXQoKSAqLwotI2RlZmluZSBIQUxfQ09NUF9TdG9wX0lUICAgICAgICBIQUxfQ09NUF9TdG9wICAvKiBGdW5jdGlvbiBjb25zaWRlcmVkIGFzIGxlZ2FjeSBhcyBFWFRJIGV2ZW50IG9yIElUIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSBpbnRvIEhBTF9DT01QX0luaXQoKSAqLworI2RlZmluZSBIQUxfQ09NUF9TdGFydF9JVCAgICAgICBIQUxfQ09NUF9TdGFydCAvKiBGdW5jdGlvbiBjb25zaWRlcmVkIGFzIGxlZ2FjeSBhcyBFWFRJIGV2ZW50IG9yIElUIGNvbmZpZ3VyYXRpb24gaXMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgaW50byBIQUxfQ09NUF9Jbml0KCkgKi8KKyNkZWZpbmUgSEFMX0NPTVBfU3RvcF9JVCAgICAgICAgSEFMX0NPTVBfU3RvcCAgLyogRnVuY3Rpb24gY29uc2lkZXJlZCBhcyBsZWdhY3kgYXMgRVhUSSBldmVudCBvciBJVCBjb25maWd1cmF0aW9uIGlzIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lIGludG8gSEFMX0NPTVBfSW5pdCgpICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjI2Myw3ICsyNjIwLDkgQEAKICNkZWZpbmUgX19IQUxfUFdSX0lOVEVSTkFMV0FLRVVQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX1BXUkV4X0VuYWJsZUludGVybmFsV2FrZVVwTGluZQogI2RlZmluZSBfX0hBTF9QV1JfUFVMTF9VUF9ET1dOX0NPTkZJR19ESVNBQkxFICAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfRGlzYWJsZVB1bGxVcFB1bGxEb3duQ29uZmlnCiAjZGVmaW5lIF9fSEFMX1BXUl9QVUxMX1VQX0RPV05fQ09ORklHX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9FbmFibGVQdWxsVXBQdWxsRG93bkNvbmZpZwotI2RlZmluZSBfX0hBTF9QV1JfUFZEX0VYVElfQ0xFQVJfRUdERV9UUklHR0VSKCkgICAgICAgICAgICAgICAgICBkbyB7IF9fSEFMX1BXUl9QVkRfRVhUSV9ESVNBQkxFX1JJU0lOR19FREdFKCk7X19IQUxfUFdSX1BWRF9FWFRJX0RJU0FCTEVfRkFMTElOR19FREdFKCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgX19IQUxfUFdSX1BWRF9FWFRJX0NMRUFSX0VHREVfVFJJR0dFUigpICAgICAgICAgICAgICAgICAgZG8geyBfX0hBTF9QV1JfUFZEX0VYVElfRElTQUJMRV9SSVNJTkdfRURHRSgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUFdSX1BWRF9FWFRJX0RJU0FCTEVfRkFMTElOR19FREdFKCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogI2RlZmluZSBfX0hBTF9QV1JfUFZEX0VYVElfRVZFTlRfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9QV1JfUFZEX0VYVElfRElTQUJMRV9FVkVOVAogI2RlZmluZSBfX0hBTF9QV1JfUFZEX0VYVElfRVZFTlRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9QV1JfUFZEX0VYVElfRU5BQkxFX0VWRU5UCiAjZGVmaW5lIF9fSEFMX1BXUl9QVkRfRVhUSV9GQUxMSU5HVFJJR0dFUl9ESVNBQkxFICAgICAgICAgICAgICAgIF9fSEFMX1BXUl9QVkRfRVhUSV9ESVNBQkxFX0ZBTExJTkdfRURHRQpAQCAtMjI3Miw4ICsyNjMxLDEyIEBACiAjZGVmaW5lIF9fSEFMX1BXUl9QVkRfRVhUSV9SSVNJTkdUUklHR0VSX0VOQUJMRSAgICAgICAgICAgICAgICAgIF9fSEFMX1BXUl9QVkRfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UKICNkZWZpbmUgX19IQUxfUFdSX1BWRF9FWFRJX1NFVF9GQUxMSU5HX0VHREVfVFJJR0dFUiAgICAgICAgICAgICAgX19IQUxfUFdSX1BWRF9FWFRJX0VOQUJMRV9GQUxMSU5HX0VER0UKICNkZWZpbmUgX19IQUxfUFdSX1BWRF9FWFRJX1NFVF9SSVNJTkdfRURHRV9UUklHR0VSICAgICAgICAgICAgICAgX19IQUxfUFdSX1BWRF9FWFRJX0VOQUJMRV9SSVNJTkdfRURHRQotI2RlZmluZSBfX0hBTF9QV1JfUFZNX0RJU0FCTEUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7IEhBTF9QV1JFeF9EaXNhYmxlUFZNMSgpO0hBTF9QV1JFeF9EaXNhYmxlUFZNMigpO0hBTF9QV1JFeF9EaXNhYmxlUFZNMygpO0hBTF9QV1JFeF9EaXNhYmxlUFZNNCgpOyB9IHdoaWxlKDApCi0jZGVmaW5lIF9fSEFMX1BXUl9QVk1fRU5BQkxFKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsgSEFMX1BXUkV4X0VuYWJsZVBWTTEoKTtIQUxfUFdSRXhfRW5hYmxlUFZNMigpO0hBTF9QV1JFeF9FbmFibGVQVk0zKCk7SEFMX1BXUkV4X0VuYWJsZVBWTTQoKTsgfSB3aGlsZSgwKQorI2RlZmluZSBfX0hBTF9QV1JfUFZNX0RJU0FCTEUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7IEhBTF9QV1JFeF9EaXNhYmxlUFZNMSgpO0hBTF9QV1JFeF9EaXNhYmxlUFZNMigpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX1BXUkV4X0Rpc2FibGVQVk0zKCk7SEFMX1BXUkV4X0Rpc2FibGVQVk00KCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorI2RlZmluZSBfX0hBTF9QV1JfUFZNX0VOQUJMRSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7IEhBTF9QV1JFeF9FbmFibGVQVk0xKCk7SEFMX1BXUkV4X0VuYWJsZVBWTTIoKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9FbmFibGVQVk0zKCk7SEFMX1BXUkV4X0VuYWJsZVBWTTQoKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAjZGVmaW5lIF9fSEFMX1BXUl9TUkFNMkNPTlRFTlRfUFJFU0VSVkVfRElTQUJMRSAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9EaXNhYmxlU1JBTTJDb250ZW50UmV0ZW50aW9uCiAjZGVmaW5lIF9fSEFMX1BXUl9TUkFNMkNPTlRFTlRfUFJFU0VSVkVfRU5BQkxFICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9FbmFibGVTUkFNMkNvbnRlbnRSZXRlbnRpb24KICNkZWZpbmUgX19IQUxfUFdSX1ZERElPMl9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX1BXUkV4X0Rpc2FibGVWZGRJTzIKQEAgLTIzMDksOCArMjY3Miw4IEBACiAjZGVmaW5lIFJDQ19TdG9wV2FrZVVwQ2xvY2tfSFNJICAgICBSQ0NfU1RPUF9XQUtFVVBDTE9DS19IU0kKIAogI2RlZmluZSBIQUxfUkNDX0NDU0NhbGxiYWNrIEhBTF9SQ0NfQ1NTQ2FsbGJhY2sKLSNkZWZpbmUgSEFMX1JDNDhfRW5hYmxlQnVmZmVyX0NtZChjbWQpICgoKGNtZFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT09RU5BQkxFKSA/IEhBTF9SQ0NFeF9FbmFibGVIU0k0OF9WUkVGSU5UKCkgOiBIQUxfUkNDRXhfRGlzYWJsZUhTSTQ4X1ZSRUZJTlQoKSkKKyNkZWZpbmUgSEFMX1JDNDhfRW5hYmxlQnVmZmVyX0NtZChjbWQpICgoKGNtZCk9PUVOQUJMRSkgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX1JDQ0V4X0VuYWJsZUhTSTQ4X1ZSRUZJTlQoKSA6IEhBTF9SQ0NFeF9EaXNhYmxlSFNJNDhfVlJFRklOVCgpKQogCiAjZGVmaW5lIF9fQURDX0NMS19ESVNBQkxFICAgICAgICAgIF9fSEFMX1JDQ19BRENfQ0xLX0RJU0FCTEUKICNkZWZpbmUgX19BRENfQ0xLX0VOQUJMRSAgICAgICAgICAgX19IQUxfUkNDX0FEQ19DTEtfRU5BQkxFCkBAIC0yODE0LDYgKzMxNzcsMTEgQEAKIAogI2RlZmluZSAgX19IQUxfUkNDX1dXREdfSVNfQ0xLX0VOQUJMRUQgICAgX19IQUxfUkNDX1dXREcxX0lTX0NMS19FTkFCTEVECiAjZGVmaW5lICBfX0hBTF9SQ0NfV1dER19JU19DTEtfRElTQUJMRUQgIF9fSEFMX1JDQ19XV0RHMV9JU19DTEtfRElTQUJMRUQKKyNkZWZpbmUgIFJDQ19TUEk0Q0xLU09VUkNFX0QyUENMSzEgICAgICAgUkNDX1NQSTRDTEtTT1VSQ0VfRDJQQ0xLMgorI2RlZmluZSAgUkNDX1NQSTVDTEtTT1VSQ0VfRDJQQ0xLMSAgICAgICBSQ0NfU1BJNUNMS1NPVVJDRV9EMlBDTEsyCisjZGVmaW5lICBSQ0NfU1BJNDVDTEtTT1VSQ0VfRDJQQ0xLMSAgICAgIFJDQ19TUEk0NUNMS1NPVVJDRV9EMlBDTEsyCisjZGVmaW5lICBSQ0NfU1BJNDVDTEtTT1VSQ0VfQ0RQQ0xLMSAgICAgIFJDQ19TUEk0NUNMS1NPVVJDRV9DRFBDTEsyCisjZGVmaW5lICBSQ0NfU1BJNDVDTEtTT1VSQ0VfUENMSzEgICAgICAgIFJDQ19TUEk0NUNMS1NPVVJDRV9QQ0xLMgogI2VuZGlmCiAKICNkZWZpbmUgX19XV0RHX0NMS19ESVNBQkxFIF9fSEFMX1JDQ19XV0RHX0NMS19ESVNBQkxFCkBAIC0zMjc4LDcgKzM2NDYsOCBAQAogI2RlZmluZSBSQ0NfTUNPU09VUkNFX1BMTENMS19OT0RJViAgUkNDX01DTzFTT1VSQ0VfUExMQ0xLCiAjZGVmaW5lIFJDQ19NQ09TT1VSQ0VfUExMQ0xLX0RJVjIgICBSQ0NfTUNPMVNPVVJDRV9QTExDTEtfRElWMgogCi0jaWYgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkc0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJXTCkKKyNpZiBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRzQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgXAorICAgIGRlZmluZWQoU1RNMzJXTCkgfHwgZGVmaW5lZChTVE0zMkMwKQogI2RlZmluZSBSQ0NfUlRDQ0xLU09VUkNFX05PX0NMSyAgICAgUkNDX1JUQ0NMS1NPVVJDRV9OT05FCiAjZWxzZQogI2RlZmluZSBSQ0NfUlRDQ0xLU09VUkNFX05PTkUgICAgICAgUkNDX1JUQ0NMS1NPVVJDRV9OT19DTEsKQEAgLTMzOTEsOCArMzc2MCw4IEBACiAjZGVmaW5lIFJDQ19ERlNETTJDTEtTT1VSQ0VfQVBCMiAgICAgICAgICAgIFJDQ19ERlNETTJDTEtTT1VSQ0VfUENMSzIKICNkZWZpbmUgUkNDX0ZNUEkyQzFDTEtTT1VSQ0VfQVBCICAgICAgICAgICAgUkNDX0ZNUEkyQzFDTEtTT1VSQ0VfUENMSzEKICNpZiBkZWZpbmVkKFNUTTMyVTUpCi0jZGVmaW5lIE1TSUtQTExNb2RlU0VMICBSQ0NfTVNJS1BMTF9NT0RFX1NFTAotI2RlZmluZSBNU0lTUExMTW9kZVNFTCAgUkNDX01TSVNQTExfTU9ERV9TRUwKKyNkZWZpbmUgTVNJS1BMTE1vZGVTRUwgICAgICAgICAgICAgICAgICAgICAgICBSQ0NfTVNJS1BMTF9NT0RFX1NFTAorI2RlZmluZSBNU0lTUExMTW9kZVNFTCAgICAgICAgICAgICAgICAgICAgICAgIFJDQ19NU0lTUExMX01PREVfU0VMCiAjZGVmaW5lIF9fSEFMX1JDQ19BSEIyMV9DTEtfRElTQUJMRSAgICAgICAgICAgX19IQUxfUkNDX0FIQjJfMV9DTEtfRElTQUJMRQogI2RlZmluZSBfX0hBTF9SQ0NfQUhCMjJfQ0xLX0RJU0FCTEUgICAgICAgICAgIF9fSEFMX1JDQ19BSEIyXzJfQ0xLX0RJU0FCTEUKICNkZWZpbmUgX19IQUxfUkNDX0FIQjFfQ0xLX0Rpc2FibGVfQ2xlYXIgICAgICBfX0hBTF9SQ0NfQUhCMV9DTEtfRU5BQkxFCkBAIC0zNDAzLDcgKzM3NzIsMTEyIEBACiAjZGVmaW5lIF9fSEFMX1JDQ19BUEIyX0NMS19EaXNhYmxlX0NsZWFyICAgICAgX19IQUxfUkNDX0FQQjJfQ0xLX0VOQUJMRQogI2RlZmluZSBfX0hBTF9SQ0NfQVBCM19DTEtfRGlzYWJsZV9DbGVhciAgICAgIF9fSEFMX1JDQ19BUEIzX0NMS19FTkFCTEUKICNkZWZpbmUgSVNfUkNDX01TSVBMTE1vZGVTZWxlY3Rpb24gICAgICAgICAgICBJU19SQ0NfTVNJUExMTU9ERV9TRUxFQ1QKLSNlbmRpZgorI2RlZmluZSBSQ0NfUEVSSVBIQ0xLX0NMSzQ4ICAgICAgICAgICAgICAgICAgIFJDQ19QRVJJUEhDTEtfSUNMSworI2RlZmluZSBSQ0NfQ0xLNDhDTEtTT1VSQ0VfSFNJNDggICAgICAgICAgICAgIFJDQ19JQ0xLX0NMS1NPVVJDRV9IU0k0OAorI2RlZmluZSBSQ0NfQ0xLNDhDTEtTT1VSQ0VfUExMMiAgICAgICAgICAgICAgIFJDQ19JQ0xLX0NMS1NPVVJDRV9QTEwyCisjZGVmaW5lIFJDQ19DTEs0OENMS1NPVVJDRV9QTEwxICAgICAgICAgICAgICAgUkNDX0lDTEtfQ0xLU09VUkNFX1BMTDEKKyNkZWZpbmUgUkNDX0NMSzQ4Q0xLU09VUkNFX01TSUsgICAgICAgICAgICAgICBSQ0NfSUNMS19DTEtTT1VSQ0VfTVNJSworI2RlZmluZSBfX0hBTF9SQ0NfQURDMV9DTEtfRU5BQkxFICAgICAgICAgICAgIF9fSEFMX1JDQ19BREMxMl9DTEtfRU5BQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19BREMxX0NMS19ESVNBQkxFICAgICAgICAgICAgX19IQUxfUkNDX0FEQzEyX0NMS19ESVNBQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19BREMxX0lTX0NMS19FTkFCTEVEICAgICAgICAgX19IQUxfUkNDX0FEQzEyX0lTX0NMS19FTkFCTEVECisjZGVmaW5lIF9fSEFMX1JDQ19BREMxX0lTX0NMS19ESVNBQkxFRCAgICAgICAgX19IQUxfUkNDX0FEQzEyX0lTX0NMS19ESVNBQkxFRAorI2RlZmluZSBfX0hBTF9SQ0NfQURDMV9GT1JDRV9SRVNFVCAgICAgICAgICAgIF9fSEFMX1JDQ19BREMxMl9GT1JDRV9SRVNFVAorI2RlZmluZSBfX0hBTF9SQ0NfQURDMV9SRUxFQVNFX1JFU0VUICAgICAgICAgIF9fSEFMX1JDQ19BREMxMl9SRUxFQVNFX1JFU0VUCisjZGVmaW5lIF9fSEFMX1JDQ19BREMxX0NMS19TTEVFUF9FTkFCTEUgICAgICAgX19IQUxfUkNDX0FEQzEyX0NMS19TTEVFUF9FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX0FEQzFfQ0xLX1NMRUVQX0RJU0FCTEUgICAgICBfX0hBTF9SQ0NfQURDMTJfQ0xLX1NMRUVQX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX0dFVF9DTEs0OF9TT1VSQ0UgICAgICAgICAgICBfX0hBTF9SQ0NfR0VUX0lDTEtfU09VUkNFCisjZGVmaW5lIF9fSEFMX1JDQ19QTExGUkFDTl9FTkFCTEUgICAgICAgICAgICAgX19IQUxfUkNDX1BMTF9GUkFDTl9FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTEZSQUNOX0RJU0FCTEUgICAgICAgICAgICBfX0hBTF9SQ0NfUExMX0ZSQUNOX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTEZSQUNOX0NPTkZJRyAgICAgICAgICAgICBfX0hBTF9SQ0NfUExMX0ZSQUNOX0NPTkZJRworI2RlZmluZSBJU19SQ0NfUExMRlJBQ05fVkFMVUUgICAgICAgICAgICAgICAgIElTX1JDQ19QTExfRlJBQ05fVkFMVUUKKyNlbmRpZiAvKiBTVE0zMlU1ICovCisKKyNpZiBkZWZpbmVkKFNUTTMySDUpCisjZGVmaW5lIF9fSEFMX1JDQ19QTExGUkFDTl9FTkFCTEUgICAgICAgX19IQUxfUkNDX1BMTF9GUkFDTl9FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTEZSQUNOX0RJU0FCTEUgICAgICBfX0hBTF9SQ0NfUExMX0ZSQUNOX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTEZSQUNOX0NPTkZJRyAgICAgICBfX0hBTF9SQ0NfUExMX0ZSQUNOX0NPTkZJRworI2RlZmluZSBJU19SQ0NfUExMRlJBQ05fVkFMVUUgICAgICAgICAgIElTX1JDQ19QTExfRlJBQ05fVkFMVUUKKworI2RlZmluZSBSQ0NfUExMU09VUkNFX05PTkUgICAgICAgICAgICAgIFJDQ19QTEwxX1NPVVJDRV9OT05FCisjZGVmaW5lIFJDQ19QTExTT1VSQ0VfSFNJICAgICAgICAgICAgICAgUkNDX1BMTDFfU09VUkNFX0hTSQorI2RlZmluZSBSQ0NfUExMU09VUkNFX0NTSSAgICAgICAgICAgICAgIFJDQ19QTEwxX1NPVVJDRV9DU0kKKyNkZWZpbmUgUkNDX1BMTFNPVVJDRV9IU0UgICAgICAgICAgICAgICBSQ0NfUExMMV9TT1VSQ0VfSFNFCisjZGVmaW5lIFJDQ19QTExWQ0lSQU5HRV8wICAgICAgICAgICAgICAgUkNDX1BMTDFfVkNJUkFOR0VfMAorI2RlZmluZSBSQ0NfUExMVkNJUkFOR0VfMSAgICAgICAgICAgICAgIFJDQ19QTEwxX1ZDSVJBTkdFXzEKKyNkZWZpbmUgUkNDX1BMTFZDSVJBTkdFXzIgICAgICAgICAgICAgICBSQ0NfUExMMV9WQ0lSQU5HRV8yCisjZGVmaW5lIFJDQ19QTExWQ0lSQU5HRV8zICAgICAgICAgICAgICAgUkNDX1BMTDFfVkNJUkFOR0VfMworI2RlZmluZSBSQ0NfUExMMVZDT1dJREUgICAgICAgICAgICAgICAgIFJDQ19QTEwxX1ZDT1JBTkdFX1dJREUKKyNkZWZpbmUgUkNDX1BMTDFWQ09NRURJVU0gICAgICAgICAgICAgICBSQ0NfUExMMV9WQ09SQU5HRV9NRURJVU0KKworI2RlZmluZSBJU19SQ0NfUExMU09VUkNFICAgICAgICAgICAgICAgIElTX1JDQ19QTEwxX1NPVVJDRQorI2RlZmluZSBJU19SQ0NfUExMUkdFX1ZBTFVFICAgICAgICAgICAgIElTX1JDQ19QTEwxX1ZDSVJHRV9WQUxVRQorI2RlZmluZSBJU19SQ0NfUExMVkNPUkdFX1ZBTFVFICAgICAgICAgIElTX1JDQ19QTEwxX1ZDT1JHRV9WQUxVRQorI2RlZmluZSBJU19SQ0NfUExMQ0xPQ0tPVVRfVkFMVUUgICAgICAgIElTX1JDQ19QTEwxX0NMT0NLT1VUX1ZBTFVFCisjZGVmaW5lIElTX1JDQ19QTExfRlJBQ05fVkFMVUUgICAgICAgICAgSVNfUkNDX1BMTDFfRlJBQ05fVkFMVUUKKyNkZWZpbmUgSVNfUkNDX1BMTE1fVkFMVUUgICAgICAgICAgICAgICBJU19SQ0NfUExMMV9ESVZNX1ZBTFVFCisjZGVmaW5lIElTX1JDQ19QTExOX1ZBTFVFICAgICAgICAgICAgICAgSVNfUkNDX1BMTDFfTVVMTl9WQUxVRQorI2RlZmluZSBJU19SQ0NfUExMUF9WQUxVRSAgICAgICAgICAgICAgIElTX1JDQ19QTEwxX0RJVlBfVkFMVUUKKyNkZWZpbmUgSVNfUkNDX1BMTFFfVkFMVUUgICAgICAgICAgICAgICBJU19SQ0NfUExMMV9ESVZRX1ZBTFVFCisjZGVmaW5lIElTX1JDQ19QTExSX1ZBTFVFICAgICAgICAgICAgICAgSVNfUkNDX1BMTDFfRElWUl9WQUxVRQorCisjZGVmaW5lIF9fSEFMX1JDQ19QTExfRU5BQkxFICAgICAgICAgICAgX19IQUxfUkNDX1BMTDFfRU5BQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19QTExfRElTQUJMRSAgICAgICAgICAgX19IQUxfUkNDX1BMTDFfRElTQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMX0ZSQUNOX0VOQUJMRSAgICAgIF9fSEFMX1JDQ19QTEwxX0ZSQUNOX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMX0ZSQUNOX0RJU0FCTEUgICAgIF9fSEFMX1JDQ19QTEwxX0ZSQUNOX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTF9DT05GSUcgICAgICAgICAgICBfX0hBTF9SQ0NfUExMMV9DT05GSUcKKyNkZWZpbmUgX19IQUxfUkNDX1BMTF9QTExTT1VSQ0VfQ09ORklHICBfX0hBTF9SQ0NfUExMMV9QTExTT1VSQ0VfQ09ORklHCisjZGVmaW5lIF9fSEFMX1JDQ19QTExfRElWTV9DT05GSUcgICAgICAgX19IQUxfUkNDX1BMTDFfRElWTV9DT05GSUcKKyNkZWZpbmUgX19IQUxfUkNDX1BMTF9GUkFDTl9DT05GSUcgICAgICBfX0hBTF9SQ0NfUExMMV9GUkFDTl9DT05GSUcKKyNkZWZpbmUgX19IQUxfUkNDX1BMTF9WQ0lSQU5HRSAgICAgICAgICBfX0hBTF9SQ0NfUExMMV9WQ0lSQU5HRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMX1ZDT1JBTkdFICAgICAgICAgIF9fSEFMX1JDQ19QTEwxX1ZDT1JBTkdFCisjZGVmaW5lIF9fSEFMX1JDQ19HRVRfUExMX09TQ1NPVVJDRSAgICAgX19IQUxfUkNDX0dFVF9QTEwxX09TQ1NPVVJDRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMQ0xLT1VUX0VOQUJMRSAgICAgIF9fSEFMX1JDQ19QTEwxX0NMS09VVF9FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTENMS09VVF9ESVNBQkxFICAgICBfX0hBTF9SQ0NfUExMMV9DTEtPVVRfRElTQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfR0VUX1BMTENMS09VVF9DT05GSUcgIF9fSEFMX1JDQ19HRVRfUExMMV9DTEtPVVRfQ09ORklHCisKKyNkZWZpbmUgX19IQUxfUkNDX1BMTDJGUkFDTl9FTkFCTEUgICAgICBfX0hBTF9SQ0NfUExMMl9GUkFDTl9FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTDJGUkFDTl9ESVNBQkxFICAgICBfX0hBTF9SQ0NfUExMMl9GUkFDTl9ESVNBQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19QTEwyQ0xLT1VUX0VOQUJMRSAgICAgX19IQUxfUkNDX1BMTDJfQ0xLT1VUX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMMkNMS09VVF9ESVNBQkxFICAgIF9fSEFMX1JDQ19QTEwyX0NMS09VVF9ESVNBQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19QTEwyRlJBQ05fQ09ORklHICAgICAgX19IQUxfUkNDX1BMTDJfRlJBQ05fQ09ORklHCisjZGVmaW5lIF9fSEFMX1JDQ19HRVRfUExMMkNMS09VVF9DT05GSUcgX19IQUxfUkNDX0dFVF9QTEwyX0NMS09VVF9DT05GSUcKKworI2RlZmluZSBfX0hBTF9SQ0NfUExMM0ZSQUNOX0VOQUJMRSAgICAgIF9fSEFMX1JDQ19QTEwzX0ZSQUNOX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMM0ZSQUNOX0RJU0FCTEUgICAgIF9fSEFMX1JDQ19QTEwzX0ZSQUNOX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTDNDTEtPVVRfRU5BQkxFICAgICBfX0hBTF9SQ0NfUExMM19DTEtPVVRfRU5BQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19QTEwzQ0xLT1VUX0RJU0FCTEUgICAgX19IQUxfUkNDX1BMTDNfQ0xLT1VUX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTDNGUkFDTl9DT05GSUcgICAgICBfX0hBTF9SQ0NfUExMM19GUkFDTl9DT05GSUcKKyNkZWZpbmUgX19IQUxfUkNDX0dFVF9QTEwzQ0xLT1VUX0NPTkZJRyBfX0hBTF9SQ0NfR0VUX1BMTDNfQ0xLT1VUX0NPTkZJRworCisjZGVmaW5lIFJDQ19QTEwyVkNJUkFOR0VfMCAgICAgICAgICAgICAgUkNDX1BMTDJfVkNJUkFOR0VfMAorI2RlZmluZSBSQ0NfUExMMlZDSVJBTkdFXzEgICAgICAgICAgICAgIFJDQ19QTEwyX1ZDSVJBTkdFXzEKKyNkZWZpbmUgUkNDX1BMTDJWQ0lSQU5HRV8yICAgICAgICAgICAgICBSQ0NfUExMMl9WQ0lSQU5HRV8yCisjZGVmaW5lIFJDQ19QTEwyVkNJUkFOR0VfMyAgICAgICAgICAgICAgUkNDX1BMTDJfVkNJUkFOR0VfMworCisjZGVmaW5lIFJDQ19QTEwyVkNPV0lERSAgICAgICAgICAgICAgICAgUkNDX1BMTDJfVkNPUkFOR0VfV0lERQorI2RlZmluZSBSQ0NfUExMMlZDT01FRElVTSAgICAgICAgICAgICAgIFJDQ19QTEwyX1ZDT1JBTkdFX01FRElVTQorCisjZGVmaW5lIFJDQ19QTEwyU09VUkNFX05PTkUgICAgICAgICAgICAgUkNDX1BMTDJfU09VUkNFX05PTkUKKyNkZWZpbmUgUkNDX1BMTDJTT1VSQ0VfSFNJICAgICAgICAgICAgICBSQ0NfUExMMl9TT1VSQ0VfSFNJCisjZGVmaW5lIFJDQ19QTEwyU09VUkNFX0NTSSAgICAgICAgICAgICAgUkNDX1BMTDJfU09VUkNFX0NTSQorI2RlZmluZSBSQ0NfUExMMlNPVVJDRV9IU0UgICAgICAgICAgICAgIFJDQ19QTEwyX1NPVVJDRV9IU0UKKworI2RlZmluZSBSQ0NfUExMM1ZDSVJBTkdFXzAgICAgICAgICAgICAgIFJDQ19QTEwzX1ZDSVJBTkdFXzAKKyNkZWZpbmUgUkNDX1BMTDNWQ0lSQU5HRV8xICAgICAgICAgICAgICBSQ0NfUExMM19WQ0lSQU5HRV8xCisjZGVmaW5lIFJDQ19QTEwzVkNJUkFOR0VfMiAgICAgICAgICAgICAgUkNDX1BMTDNfVkNJUkFOR0VfMgorI2RlZmluZSBSQ0NfUExMM1ZDSVJBTkdFXzMgICAgICAgICAgICAgIFJDQ19QTEwzX1ZDSVJBTkdFXzMKKworI2RlZmluZSBSQ0NfUExMM1ZDT1dJREUgICAgICAgICAgICAgICAgIFJDQ19QTEwzX1ZDT1JBTkdFX1dJREUKKyNkZWZpbmUgUkNDX1BMTDNWQ09NRURJVU0gICAgICAgICAgICAgICBSQ0NfUExMM19WQ09SQU5HRV9NRURJVU0KKworI2RlZmluZSBSQ0NfUExMM1NPVVJDRV9OT05FICAgICAgICAgICAgIFJDQ19QTEwzX1NPVVJDRV9OT05FCisjZGVmaW5lIFJDQ19QTEwzU09VUkNFX0hTSSAgICAgICAgICAgICAgUkNDX1BMTDNfU09VUkNFX0hTSQorI2RlZmluZSBSQ0NfUExMM1NPVVJDRV9DU0kgICAgICAgICAgICAgIFJDQ19QTEwzX1NPVVJDRV9DU0kKKyNkZWZpbmUgUkNDX1BMTDNTT1VSQ0VfSFNFICAgICAgICAgICAgICBSQ0NfUExMM19TT1VSQ0VfSFNFCisKKworI2VuZGlmIC8qIFNUTTMySDUgKi8KKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTM0MjAsNyArMzg5NCw5IEBACiAvKiogQGRlZmdyb3VwIEhBTF9SVENfQWxpYXNlZF9NYWNyb3MgSEFMIFJUQyBBbGlhc2VkIE1hY3JvcyBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQogICAqIEB7CiAgICovCi0jaWYgZGVmaW5lZCAoU1RNMzJHMCkgfHwgZGVmaW5lZCAoU1RNMzJMNSkgfHwgZGVmaW5lZCAoU1RNMzJMNDEyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQyMnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UDV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFE1eHgpIHx8IGRlZmluZWQgKFNUTTMyRzQpIHx8IGRlZmluZWQgKFNUTTMyV0wpIHx8IGRlZmluZWQgKFNUTTMyVTUpCisjaWYgZGVmaW5lZCAoU1RNMzJHMCkgfHwgZGVmaW5lZCAoU1RNMzJMNSkgfHwgZGVmaW5lZCAoU1RNMzJMNDEyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQyMnh4KSB8fCBcCisgICAgZGVmaW5lZCAoU1RNMzJMNFA1eHgpfHwgZGVmaW5lZCAoU1RNMzJMNFE1eHgpIHx8IGRlZmluZWQgKFNUTTMyRzQpIHx8IGRlZmluZWQgKFNUTTMyV0wpIHx8IGRlZmluZWQgKFNUTTMyVTUpIHx8IFwKKyAgICBkZWZpbmVkIChTVE0zMldCQSkgfHwgZGVmaW5lZCAoU1RNMzJINSkgfHwgZGVmaW5lZCAoU1RNMzJDMCkKICNlbHNlCiAjZGVmaW5lIF9fSEFMX1JUQ19DTEVBUl9GTEFHICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19FWFRJX0NMRUFSX0ZMQUcKICNlbmRpZgpAQCAtMzQ3Myw2ICszOTQ5LDExIEBACiAjZGVmaW5lIF9fUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFCiAjZGVmaW5lIF9fUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUKIAorI2lmIGRlZmluZWQgKFNUTTMySDUpCisjZGVmaW5lIF9fSEFMX1JDQ19SVENBUEJfQ0xLX0VOQUJMRSAgIF9fSEFMX1JDQ19SVENfQ0xLX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUlRDQVBCX0NMS19ESVNBQkxFICBfX0hBTF9SQ0NfUlRDX0NMS19ESVNBQkxFCisjZW5kaWYgICAvKiBTVE0zMkg1ICovCisKIC8qKgogICAqIEB9CiAgICovCkBAIC0zNDg0LDcgKzM5NjUsNyBAQAogI2RlZmluZSBTRF9PQ1JfQ0lEX0NTRF9PVkVSV1JJRVRFICAgU0RfT0NSX0NJRF9DU0RfT1ZFUldSSVRFCiAjZGVmaW5lIFNEX0NNRF9TRF9BUFBfU1RBVVMgICAgICAgICBTRF9DTURfU0RfQVBQX1NUQVRVUwogCi0jaWYgIWRlZmluZWQoU1RNMzJGMSkgJiYgIWRlZmluZWQoU1RNMzJGMikgJiYgIWRlZmluZWQoU1RNMzJGNCkgJiYgIWRlZmluZWQoU1RNMzJGNykgJiYgIWRlZmluZWQoU1RNMzJMMSkKKyNpZiAhZGVmaW5lZChTVE0zMkYxKSAmJiAhZGVmaW5lZChTVE0zMkYyKSAmJiAhZGVmaW5lZChTVE0zMkY0KSAmJiAhZGVmaW5lZChTVE0zMkwxKQogI2RlZmluZSBlTU1DX0hJR0hfVk9MVEFHRV9SQU5HRSAgICAgRU1NQ19ISUdIX1ZPTFRBR0VfUkFOR0UKICNkZWZpbmUgZU1NQ19EVUFMX1ZPTFRBR0VfUkFOR0UgICAgIEVNTUNfRFVBTF9WT0xUQUdFX1JBTkdFCiAjZGVmaW5lIGVNTUNfTE9XX1ZPTFRBR0VfUkFOR0UgICAgICBFTU1DX0xPV19WT0xUQUdFX1JBTkdFCkBAIC0zODQ0LDMgKzQzMjUsNSBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBTVE0zMl9IQUxfTEVHQUNZICovCisKKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyX2Fzc2VydF90ZW1wbGF0ZS5oIGIvSW5jL3N0bTMyX2Fzc2VydF90ZW1wbGF0ZS5oCmluZGV4IGQwYzNiNzIuLmZmNjliZDcgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMl9hc3NlcnRfdGVtcGxhdGUuaAorKysgYi9JbmMvc3RtMzJfYXNzZXJ0X3RlbXBsYXRlLmgKQEAgLTUxLDMgKzUxLDYgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMl9BU1NFUlRfSCAqLworCisKKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWwuaCBiL0luYy9zdG0zMmYzeHhfaGFsLmgKaW5kZXggYzY2OTJlMi4uZWFhMmMzYyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9oYWwuaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbC5oCkBAIC0xNSw3ICsxNSw3IEBACiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICovCisgICovIAogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2lmbmRlZiBfX1NUTTMyRjN4eF9IQUxfSApAQCAtOTQwLDMgKzk0MCw1IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1RNMzJGM3h4X0hBTF9IICovCisKKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfYWRjLmggYi9JbmMvc3RtMzJmM3h4X2hhbF9hZGMuaAppbmRleCAxOTU3ODIwLi5lMTUxZTNiIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9hZGMuaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF9hZGMuaApAQCAtMjY3LDMgKzI2Nyw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qX19TVE0zMkYzeHhfQURDX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfYWRjX2V4LmggYi9JbmMvc3RtMzJmM3h4X2hhbF9hZGNfZXguaAppbmRleCAwNTI1Yzc0Li4zYTBlNjJkIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9hZGNfZXguaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF9hZGNfZXguaApAQCAtNTcsNyArNTcsNyBAQAogICAqICAgICAgICAgIC0gRm9yIGFsbCBwYXJhbWV0ZXJzIGV4Y2VwdCAnTG93UG93ZXJBdXRvV2FpdCcgYW5kICdETUFDb250aW51b3VzUmVxdWVzdHMnOiBBREMgZW5hYmxlZCB3aXRob3V0IGNvbnZlcnNpb24gb24gZ29pbmcgb24gcmVndWxhciBncm91cC4KICAgKiAgICAgICAgICAtIEZvciBwYXJhbWV0ZXJzICdMb3dQb3dlckF1dG9XYWl0JyBhbmQgJ0RNQUNvbnRpbnVvdXNSZXF1ZXN0cyc6IEFEQyBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZyBvbiByZWd1bGFyIGFuZCBpbmplY3RlZCBncm91cHMuCiAgICogICAgICAgICBJZiBBREMgaXMgbm90IGluIHRoZSBhcHByb3ByaWF0ZSBzdGF0ZSB0byBtb2RpZnkgc29tZSBwYXJhbWV0ZXJzLCB0aGVzZSBwYXJhbWV0ZXJzIHNldHRpbmcgaXMgYnlwYXNzZWQKLSAgKiAgICAgICAgIHdpdGhvdXQgZXJyb3IgcmVwb3J0aW5nIChhcyBpdCBjYW4gYmUgdGhlIGV4cGVjdGVkIGJlaGF2aW91ciBpbiBjYXNlIG9mIGludGVuZGVkIGFjdGlvbiB0byB1cGRhdGUgYW5vdGhlciBwYXJhbWV0ZXIgKHdoaWNoIGZ1bGxmaWxscyB0aGUgQURDIHN0YXRlIGNvbmRpdGlvbikgb24gdGhlIGZseSkuCisgICogICAgICAgICB3aXRob3V0IGVycm9yIHJlcG9ydGluZyAoYXMgaXQgY2FuIGJlIHRoZSBleHBlY3RlZCBiZWhhdmlvdXIgaW4gY2FzZSBvZiBpbnRlbmRlZCBhY3Rpb24gdG8gdXBkYXRlIGFub3RoZXIgcGFyYW1ldGVyICh3aGljaCBmdWxmaWxscyB0aGUgQURDIHN0YXRlIGNvbmRpdGlvbikgb24gdGhlIGZseSkuCiAgICovCiB0eXBlZGVmIHN0cnVjdAogewpAQCAtNjkwLDcgKzY5MCw3IEBACiAjaWYgZGVmaW5lZChTVE0zMkYzMDJ4RSkKIC8qIEFEQyBleHRlcm5hbCB0cmlnZ2VycyBzcGVjaWZpYyB0byBkZXZpY2UgU1RNMzAyeEU6IG1hc2sgdG8gZGlmZmVyZW50aWF0ZSAgICovCiAvKiBzdGFuZGFyZCB0cmlnZ2VycyBmcm9tIHNwZWNpZmljIHRpbWVyIDIwVSwgbmVlZGVkIGZvciByZWFsbG9jYXRpb24gb2YgICAgICAgKi8KLS8qIHRyaWdnZXJzIGNvbW1vbiB0byBBREMxJjIgYW5kIHRvIGF2b2luZCBtaXhpbmcgd2l0aCBzdGFuZGFyZCAgICAgICAgICAgICAgICovCisvKiB0cmlnZ2VycyBjb21tb24gdG8gQURDMSYyIGFuZCB0byBhdm9pZCBtaXhpbmcgd2l0aCBzdGFuZGFyZCAgICAgICAgICAgICAgICovCiAvKiB0cmlnZ2VycyB3aXRob3V0IHJlbWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBBRENfRVhURVJOQUxUUklHQ09OVl9UMjBfTUFTSyAgICAgICAweDEwMDAKIApAQCAtMzk2MSwzICszOTYxLDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLypfX1NUTTMyRjN4eF9BRENfSCAqLworCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX2NlYy5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfY2VjLmgKaW5kZXggNGFlZTY4NS4uMTVlYTcyZCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9oYWxfY2VjLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfY2VjLmgKQEAgLTQ4LDcwICs0OCw4MCBAQAogdHlwZWRlZiBzdHJ1Y3QKIHsKICAgdWludDMyX3QgU2lnbmFsRnJlZVRpbWU7ICAgICAgICAgICAgICAgLyohPCBTZXQgU0ZUIGZpZWxkLCBzcGVjaWZpZXMgdGhlIFNpZ25hbCBGcmVlIFRpbWUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY2FuIGJlIG9uZSBvZiBAcmVmIENFQ19TaWduYWxfRnJlZV9UaW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY2FuIGJlIG9uZSBvZiBDRUNfU2lnbmFsX0ZyZWVfVGltZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBiZWxvbmdzIHRvIHRoZSBzZXQgezAsLi4uLDd9IHdoZXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwIGlzIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIG1lYW5zIDAuNSArIChTaWduYWxGcmVlVGltZSAtIDEpIG5vbWluYWwgZGF0YSBiaXQgcGVyaW9kcyAqLwogCiAgIHVpbnQzMl90IFRvbGVyYW5jZTsgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IFJYVE9MIGJpdCwgc3BlY2lmaWVzIHRoZSB0b2xlcmFuY2UgYWNjZXB0ZWQgb24gdGhlIHJlY2VpdmVkIHdhdmVmb3JtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENFQ19Ub2xlcmFuY2UgOiBpdCBpcyBlaXRoZXIgQ0VDX1NUQU5EQVJEX1RPTEVSQU5DRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIENFQ19FWFRFTkRFRF9UT0xFUkFOQ0UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBjYW4gYmUgYSB2YWx1ZSBvZiBDRUNfVG9sZXJhbmNlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBpcyBlaXRoZXIgQ0VDX1NUQU5EQVJEX1RPTEVSQU5DRSBvciBDRUNfRVhURU5ERURfVE9MRVJBTkNFICovCiAKLSAgdWludDMyX3QgQlJFUnhTdG9wOyAgICAgICAgICAgICAgICAgICAgLyohPCBTZXQgQlJFU1RQIGJpdCBAcmVmIENFQ19CUkVSeFN0b3AgOiBzcGVjaWZpZXMgd2hldGhlciBvciBub3QgYSBCaXQgUmlzaW5nIEVycm9yIHN0b3BzIHRoZSByZWNlcHRpb24uCisgIHVpbnQzMl90IEJSRVJ4U3RvcDsgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IEJSRVNUUCBiaXQgQ0VDX0JSRVJ4U3RvcCA6IHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBhIEJpdCBSaXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvciBzdG9wcyB0aGUgcmVjZXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFQ19OT19SWF9TVE9QX09OX0JSRTogcmVjZXB0aW9uIGlzIG5vdCBzdG9wcGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFQ19SWF9TVE9QX09OX0JSRTogICAgcmVjZXB0aW9uIGlzIHN0b3BwZWQuICovCiAKLSAgdWludDMyX3QgQlJFRXJyb3JCaXRHZW47ICAgICAgICAgICAgICAgLyohPCBTZXQgQlJFR0VOIGJpdCBAcmVmIENFQ19CUkVFcnJvckJpdEdlbiA6IHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBhbiBFcnJvci1CaXQgaXMgZ2VuZXJhdGVkIG9uIHRoZQorICB1aW50MzJfdCBCUkVFcnJvckJpdEdlbjsgICAgICAgICAgICAgICAvKiE8IFNldCBCUkVHRU4gYml0IENFQ19CUkVFcnJvckJpdEdlbiA6IHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yLUJpdCBpcyBnZW5lcmF0ZWQgb24gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VDIGxpbmUgdXBvbiBCaXQgUmlzaW5nIEVycm9yIGRldGVjdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRUNfQlJFX0VSUk9SQklUX05PX0dFTkVSQVRJT046IG5vIGVycm9yLWJpdCBnZW5lcmF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFQ19CUkVfRVJST1JCSVRfR0VORVJBVElPTjogICAgZXJyb3ItYml0IGdlbmVyYXRpb24gaWYgQlJFU1RQIGlzIHNldC4gKi8KIAotICB1aW50MzJfdCBMQlBFRXJyb3JCaXRHZW47ICAgICAgICAgICAgICAvKiE8IFNldCBMQlBFR0VOIGJpdCBAcmVmIENFQ19MQlBFRXJyb3JCaXRHZW4gOiBzcGVjaWZpZXMgd2hldGhlciBvciBub3QgYW4gRXJyb3ItQml0IGlzIGdlbmVyYXRlZCBvbiB0aGUKKyAgdWludDMyX3QgTEJQRUVycm9yQml0R2VuOyAgICAgICAgICAgICAgLyohPCBTZXQgTEJQRUdFTiBiaXQgQ0VDX0xCUEVFcnJvckJpdEdlbiA6IHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yLUJpdCBpcyBnZW5lcmF0ZWQgb24gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VDIGxpbmUgdXBvbiBMb25nIEJpdCBQZXJpb2QgRXJyb3IgZGV0ZWN0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFQ19MQlBFX0VSUk9SQklUX05PX0dFTkVSQVRJT046ICBubyBlcnJvci1iaXQgZ2VuZXJhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRUNfTEJQRV9FUlJPUkJJVF9HRU5FUkFUSU9OOiAgICAgZXJyb3ItYml0IGdlbmVyYXRpb24uICovCiAKLSAgdWludDMyX3QgQnJvYWRjYXN0TXNnTm9FcnJvckJpdEdlbjsgICAgLyohPCBTZXQgQlJETk9HRU4gYml0IEByZWYgQ0VDX0Jyb2FkQ2FzdE1zZ0Vycm9yQml0R2VuIDogYWxsb3dzIHRvIGF2b2lkIGFuIEVycm9yLUJpdCBnZW5lcmF0aW9uIG9uIHRoZSBDRUMgbGluZQorICB1aW50MzJfdCBCcm9hZGNhc3RNc2dOb0Vycm9yQml0R2VuOyAgICAvKiE8IFNldCBCUkROT0dFTiBiaXQgQ0VDX0Jyb2FkQ2FzdE1zZ0Vycm9yQml0R2VuIDogYWxsb3dzIHRvIGF2b2lkIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3ItQml0IGdlbmVyYXRpb24gb24gdGhlIENFQyBsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBvbiBhbiBlcnJvciBkZXRlY3RlZCBvbiBhIGJyb2FkY2FzdCBtZXNzYWdlLgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgc3VwZXJzZWRlcyBCUkVHRU4gYW5kIExCUEVHRU4gYml0cyBmb3IgYSBicm9hZGNhc3QgbWVzc2FnZSBlcnJvciBoYW5kbGluZy4gSXQgY2FuIHRha2UgdHdvIHZhbHVlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBzdXBlcnNlZGVzIEJSRUdFTiBhbmQgTEJQRUdFTiBiaXRzIGZvciBhIGJyb2FkY2FzdCBtZXNzYWdlIGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxpbmcuIEl0IGNhbiB0YWtlIHR3byB2YWx1ZXM6CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSBDRUNfQlJPQURDQVNURVJST1JfRVJST1JCSVRfR0VORVJBVElPTi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKSBCUkUgZGV0ZWN0aW9uOiBlcnJvci1iaXQgZ2VuZXJhdGlvbiBvbiB0aGUgQ0VDIGxpbmUgaWYgQlJFU1RQPUNFQ19SWF9TVE9QX09OX0JSRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBCUkVHRU49Q0VDX0JSRV9FUlJPUkJJVF9OT19HRU5FUkFUSU9OLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEpIEJSRSBkZXRlY3Rpb246IGVycm9yLWJpdCBnZW5lcmF0aW9uIG9uIHRoZSBDRUMgbGluZSBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJSRVNUUD1DRUNfUlhfU1RPUF9PTl9CUkUgYW5kIEJSRUdFTj1DRUNfQlJFX0VSUk9SQklUX05PX0dFTkVSQVRJT04uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYikgTEJQRSBkZXRlY3Rpb246IGVycm9yLWJpdCBnZW5lcmF0aW9uIG9uIHRoZSBDRUMgbGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIExCUEdFTj1DRUNfTEJQRV9FUlJPUkJJVF9OT19HRU5FUkFUSU9OLgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikgQ0VDX0JST0FEQ0FTVEVSUk9SX05PX0VSUk9SQklUX0dFTkVSQVRJT04uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gZXJyb3ItYml0IGdlbmVyYXRpb24gaW4gY2FzZSBuZWl0aGVyIGEpIG5vciBiKSBhcmUgc2F0aXNmaWVkLiBBZGRpdGlvbmFsbHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlcmUgaXMgbm8gZXJyb3ItYml0IGdlbmVyYXRpb24gaW4gY2FzZSBvZiBTaG9ydCBCaXQgUGVyaW9kIEVycm9yIGRldGVjdGlvbiBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgYnJvYWRjYXN0IG1lc3NhZ2Ugd2hpbGUgTFNUTiBiaXQgaXMgc2V0LiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vIGVycm9yLWJpdCBnZW5lcmF0aW9uIGluIGNhc2UgbmVpdGhlciBhKSBub3IgYikgYXJlIHNhdGlzZmllZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZXJlIGlzIG5vIGVycm9yLWJpdCBnZW5lcmF0aW9uIGluIGNhc2Ugb2YgU2hvcnQgQml0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVyaW9kIEVycm9yIGRldGVjdGlvbiBpbiBhIGJyb2FkY2FzdCBtZXNzYWdlIHdoaWxlIExTVE4gYml0IGlzIHNldC4gKi8KIAotICB1aW50MzJfdCBTaWduYWxGcmVlVGltZU9wdGlvbjsgICAgICAgICAvKiE8IFNldCBTRlRPUCBiaXQgQHJlZiBDRUNfU0ZUX09wdGlvbiA6IHNwZWNpZmllcyB3aGVuIFNGVCB0aW1lciBzdGFydHMuCisgIHVpbnQzMl90IFNpZ25hbEZyZWVUaW1lT3B0aW9uOyAgICAgICAgIC8qITwgU2V0IFNGVE9QIGJpdCBDRUNfU0ZUX09wdGlvbiA6IHNwZWNpZmllcyB3aGVuIFNGVCB0aW1lciBzdGFydHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VDX1NGVF9TVEFSVF9PTl9UWFNPTSBTRlQ6ICAgIHRpbWVyIHN0YXJ0cyB3aGVuIFRYU09NIGlzIHNldCBieSBzb2Z0d2FyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRUNfU0ZUX1NUQVJUX09OX1RYX1JYX0VORDogIFNGVCB0aW1lciBzdGFydHMgYXV0b21hdGljYWxseSBhdCB0aGUgZW5kIG9mIG1lc3NhZ2UgdHJhbnNtaXNzaW9uL3JlY2VwdGlvbi4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRUNfU0ZUX1NUQVJUX09OX1RYX1JYX0VORDogIFNGVCB0aW1lciBzdGFydHMgYXV0b21hdGljYWxseSBhdCB0aGUgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgbWVzc2FnZSB0cmFuc21pc3Npb24vcmVjZXB0aW9uLiAqLwogCi0gIHVpbnQzMl90IExpc3Rlbk1vZGU7ICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IExTVE4gYml0IEByZWYgQ0VDX0xpc3RlbmluZ19Nb2RlIDogc3BlY2lmaWVzIGRldmljZSBsaXN0ZW5pbmcgbW9kZS4gSXQgY2FuIHRha2UgdHdvIHZhbHVlczoKKyAgdWludDMyX3QgTGlzdGVuTW9kZTsgICAgICAgICAgICAgICAgICAgLyohPCBTZXQgTFNUTiBiaXQgQ0VDX0xpc3RlbmluZ19Nb2RlIDogc3BlY2lmaWVzIGRldmljZSBsaXN0ZW5pbmcgbW9kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjYW4gdGFrZSB0d28gdmFsdWVzOgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VDX1JFRFVDRURfTElTVEVOSU5HX01PREU6IENFQyBwZXJpcGhlcmFsIHJlY2VpdmVzIG9ubHkgbWVzc2FnZSBhZGRyZXNzZWQgdG8gaXRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd24gYWRkcmVzcyAoT0FSKS4gTWVzc2FnZXMgYWRkcmVzc2VkIHRvIGRpZmZlcmVudCBkZXN0aW5hdGlvbiBhcmUgaWdub3JlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRUNfUkVEVUNFRF9MSVNURU5JTkdfTU9ERTogQ0VDIHBlcmlwaGVyYWwgcmVjZWl2ZXMgb25seSBtZXNzYWdlIGFkZHJlc3NlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gaXRzIG93biBhZGRyZXNzIChPQVIpLiBNZXNzYWdlcyBhZGRyZXNzZWQgdG8gZGlmZmVyZW50IGRlc3RpbmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgaWdub3JlZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyb2FkY2FzdCBtZXNzYWdlcyBhcmUgYWx3YXlzIHJlY2VpdmVkLgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VDX0ZVTExfTElTVEVOSU5HX01PREU6IENFQyBwZXJpcGhlcmFsIHJlY2VpdmVzIG1lc3NhZ2VzIGFkZHJlc3NlZCB0byBpdHMgb3duCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIChPQVIpIHdpdGggcG9zaXRpdmUgYWNrbm93bGVkZ2UuIE1lc3NhZ2VzIGFkZHJlc3NlZCB0byBkaWZmZXJlbnQgZGVzdGluYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSByZWNlaXZlZCwgYnV0IHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgQ0VDIGJ1czogbm8gYWNrbm93bGVkZ2Ugc2VudC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VDX0ZVTExfTElTVEVOSU5HX01PREU6IENFQyBwZXJpcGhlcmFsIHJlY2VpdmVzIG1lc3NhZ2VzIGFkZHJlc3NlZCB0byBpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93biBhZGRyZXNzIChPQVIpIHdpdGggcG9zaXRpdmUgYWNrbm93bGVkZ2UuIE1lc3NhZ2VzIGFkZHJlc3NlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IGRlc3RpbmF0aW9uIGFyZSByZWNlaXZlZCwgYnV0IHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFQyBidXM6IG5vIGFja25vd2xlZGdlIHNlbnQuICAqLwogCi0gIHVpbnQxNl90ICBPd25BZGRyZXNzOyAgICAgICAgICAgICAgICAgLyohPCBPd24gYWRkcmVzc2VzIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQ0VDX09XTl9BRERSRVNTICovCisgIHVpbnQxNl90ICBPd25BZGRyZXNzOyAgICAgICAgICAgICAgICAgIC8qITwgT3duIGFkZHJlc3NlcyBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQ0VDX09XTl9BRERSRVNTICovCiAKLSAgdWludDhfdCAgKlJ4QnVmZmVyOyAgICAgICAgICAgICAgICAgICAgLyohPCBDRUMgUnggYnVmZmVyIHBvaW50ZXVyICovCisgIHVpbnQ4X3QgICpSeEJ1ZmZlcjsgICAgICAgICAgICAgICAgICAgIC8qITwgQ0VDIFJ4IGJ1ZmZlciBwb2ludGVyICovCiAKIAogfSBDRUNfSW5pdFR5cGVEZWY7CiAKIC8qKgogICAqIEBicmllZiBIQUwgQ0VDIFN0YXRlIGRlZmluaXRpb24KLSAgKiBAbm90ZSAgSEFMIENFQyBTdGF0ZSB2YWx1ZSBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgZGlmZmVyZW50IHN1YnN0YXRlczogZ1N0YXRlIGFuZCBSeFN0YXRlIChzZWUgQHJlZiBDRUNfU3RhdGVfRGVmaW5pdGlvbikuCisgICogQG5vdGUgIEhBTCBDRUMgU3RhdGUgdmFsdWUgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGRpZmZlcmVudCBzdWJzdGF0ZXM6IGdTdGF0ZSBhbmQgUnhTdGF0ZQorICAgICAgICAgICAoc2VlIENFQ19TdGF0ZV9EZWZpbml0aW9uKS4KICAgKiAgICAgICAgLSBnU3RhdGUgY29udGFpbnMgQ0VDIHN0YXRlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gZ2xvYmFsIEhhbmRsZSBtYW5hZ2VtZW50CiAgICogICAgICAgICAgYW5kIGFsc28gaW5mb3JtYXRpb24gcmVsYXRlZCB0byBUeCBvcGVyYXRpb25zLgogICAqICAgICAgICAgIGdTdGF0ZSB2YWx1ZSBjb2RpbmcgZm9sbG93IGJlbG93IGRlc2NyaWJlZCBiaXRtYXAgOgpAQCAtMTU5LDM3ICsxNjksMzcgQEAKIHR5cGVkZWYgc3RydWN0CiAjZW5kaWYgLyogVVNFX0hBTF9DRUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiB7Ci0gIENFQ19UeXBlRGVmICAgICAgICAgICAgICpJbnN0YW5jZTsgICAgICAvKiE8IENFQyByZWdpc3RlcnMgYmFzZSBhZGRyZXNzICovCisgIENFQ19UeXBlRGVmICAgICAgICAgICAgICpJbnN0YW5jZTsgICAgICAvKiE8IENFQyByZWdpc3RlcnMgYmFzZSBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICBDRUNfSW5pdFR5cGVEZWYgICAgICAgICBJbml0OyAgICAgICAgICAgLyohPCBDRUMgY29tbXVuaWNhdGlvbiBwYXJhbWV0ZXJzICovCisgIENFQ19Jbml0VHlwZURlZiAgICAgICAgIEluaXQ7ICAgICAgICAgICAvKiE8IENFQyBjb21tdW5pY2F0aW9uIHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICBjb25zdCB1aW50OF90ICAgICAgICAgICAqcFR4QnVmZlB0cjsgICAgLyohPCBQb2ludGVyIHRvIENFQyBUeCB0cmFuc2ZlciBCdWZmZXIgKi8KKyAgY29uc3QgdWludDhfdCAgICAgICAgICAgKnBUeEJ1ZmZQdHI7ICAgIC8qITwgUG9pbnRlciB0byBDRUMgVHggdHJhbnNmZXIgQnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gIHVpbnQxNl90ICAgICAgICAgICAgICAgIFR4WGZlckNvdW50OyAgICAvKiE8IENFQyBUeCBUcmFuc2ZlciBDb3VudGVyICovCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgIFR4WGZlckNvdW50OyAgICAvKiE8IENFQyBUeCBUcmFuc2ZlciBDb3VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICB1aW50MTZfdCAgICAgICAgICAgICAgICBSeFhmZXJTaXplOyAgICAgLyohPCBDRUMgUnggVHJhbnNmZXIgc2l6ZSwgMDogaGVhZGVyIHJlY2VpdmVkIG9ubHkgKi8KKyAgdWludDE2X3QgICAgICAgICAgICAgICAgUnhYZmVyU2l6ZTsgICAgIC8qITwgQ0VDIFJ4IFRyYW5zZmVyIHNpemUsIDA6IGhlYWRlciByZWNlaXZlZCBvbmx5ICAgICAgICAgICAgICAqLwogCi0gIEhBTF9Mb2NrVHlwZURlZiAgICAgICAgIExvY2s7ICAgICAgICAgICAvKiE8IExvY2tpbmcgb2JqZWN0ICovCisgIEhBTF9Mb2NrVHlwZURlZiAgICAgICAgIExvY2s7ICAgICAgICAgICAvKiE8IExvY2tpbmcgb2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogICBIQUxfQ0VDX1N0YXRlVHlwZURlZiAgICBnU3RhdGU7ICAgICAgICAgLyohPCBDRUMgc3RhdGUgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBnbG9iYWwgSGFuZGxlIG1hbmFnZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFsc28gcmVsYXRlZCB0byBUeCBvcGVyYXRpb25zLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEhBTF9DRUNfU3RhdGVUeXBlRGVmICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEhBTF9DRUNfU3RhdGVUeXBlRGVmICAgICAgKi8KIAogICBIQUxfQ0VDX1N0YXRlVHlwZURlZiAgICBSeFN0YXRlOyAgICAgICAgLyohPCBDRUMgc3RhdGUgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBSeCBvcGVyYXRpb25zLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEhBTF9DRUNfU3RhdGVUeXBlRGVmICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEhBTF9DRUNfU3RhdGVUeXBlRGVmICAgICAgKi8KIAogICB1aW50MzJfdCAgICAgICAgICAgICAgICBFcnJvckNvZGU7ICAgICAgLyohPCBGb3IgZXJyb3JzIGhhbmRsaW5nIHB1cnBvc2VzLCBjb3B5IG9mIElTUiByZWdpc3RlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBjYXNlIGVycm9yIGlzIHJlcG9ydGVkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGNhc2UgZXJyb3IgaXMgcmVwb3J0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogI2lmIChVU0VfSEFMX0NFQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgdm9pZCAoKiBUeENwbHRDYWxsYmFjaykoc3RydWN0IF9fQ0VDX0hhbmRsZVR5cGVEZWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKmhjZWMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDRUMgVHggVHJhbnNmZXIgY29tcGxldGVkIGNhbGxiYWNrICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICpoY2VjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0VDIFR4IFRyYW5zZmVyIGNvbXBsZXRlZCBjYWxsYmFjayAgKi8KICAgdm9pZCAoKiBSeENwbHRDYWxsYmFjaykoc3RydWN0IF9fQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFJ4RnJhbWVTaXplKTsgICAgICAgICAgLyohPCBDRUMgUnggVHJhbnNmZXIgY29tcGxldGVkIGNhbGxiYWNrICovCi0gIHZvaWQgKCogRXJyb3JDYWxsYmFjaykoc3RydWN0IF9fQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0VDIGVycm9yIGNhbGxiYWNrICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFJ4RnJhbWVTaXplKTsgICAgICAgICAgICAgICAgIC8qITwgQ0VDIFJ4IFRyYW5zZmVyIGNvbXBsZXRlZCBjYWxsYmFjayAgKi8KKyAgdm9pZCAoKiBFcnJvckNhbGxiYWNrKShzdHJ1Y3QgX19DRUNfSGFuZGxlVHlwZURlZiAqaGNlYyk7ICAgICAgLyohPCBDRUMgZXJyb3IgY2FsbGJhY2sgICAgICAgICAgICAgICAgICAqLwogCi0gIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19DRUNfSGFuZGxlVHlwZURlZiAqaGNlYyk7ICAgICAgICAgICAgICAgLyohPCBDRUMgTXNwIEluaXQgY2FsbGJhY2sgICAgICAgICAgICAgICovCi0gIHZvaWQgKCogTXNwRGVJbml0Q2FsbGJhY2spKHN0cnVjdCBfX0NFQ19IYW5kbGVUeXBlRGVmICpoY2VjKTsgICAgICAgICAgICAgLyohPCBDRUMgTXNwIERlSW5pdCBjYWxsYmFjayAgICAgICAgICAgICovCisgIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19DRUNfSGFuZGxlVHlwZURlZiAqaGNlYyk7ICAgIC8qITwgQ0VDIE1zcCBJbml0IGNhbGxiYWNrICAgICAgICAgICAgICAgKi8KKyAgdm9pZCAoKiBNc3BEZUluaXRDYWxsYmFjaykoc3RydWN0IF9fQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpOyAgLyohPCBDRUMgTXNwIERlSW5pdCBjYWxsYmFjayAgICAgICAgICAgICAqLwogCiAjZW5kaWYgLyogKFVTRV9IQUxfQ0VDX1JFR0lTVEVSX0NBTExCQUNLUykgKi8KIH0gQ0VDX0hhbmRsZVR5cGVEZWY7CkBAIC0yMDIsNyArMjEyLDcgQEAKIHsKICAgSEFMX0NFQ19UWF9DUExUX0NCX0lEICAgICAgPSAweDAwVSwgICAgLyohPCBDRUMgVHggVHJhbnNmZXIgY29tcGxldGVkIGNhbGxiYWNrIElEICAqLwogICBIQUxfQ0VDX1JYX0NQTFRfQ0JfSUQgICAgICA9IDB4MDFVLCAgICAvKiE8IENFQyBSeCBUcmFuc2ZlciBjb21wbGV0ZWQgY2FsbGJhY2sgSUQgICovCi0gIEhBTF9DRUNfRVJST1JfQ0JfSUQgICAgICAgID0gMHgwMlUsICAgIC8qITwgQ0VDIGVycm9yIGNhbGxiYWNrIElEICAgICAgICAgICAgICAgICAqLworICBIQUxfQ0VDX0VSUk9SX0NCX0lEICAgICAgICA9IDB4MDJVLCAgICAvKiE8IENFQyBlcnJvciBjYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICovCiAgIEhBTF9DRUNfTVNQSU5JVF9DQl9JRCAgICAgID0gMHgwM1UsICAgIC8qITwgQ0VDIE1zcCBJbml0IGNhbGxiYWNrIElEICAgICAgICAgICAgICAgKi8KICAgSEFMX0NFQ19NU1BERUlOSVRfQ0JfSUQgICAgPSAweDA0VSAgICAgLyohPCBDRUMgTXNwIERlSW5pdCBjYWxsYmFjayBJRCAgICAgICAgICAgICAqLwogfSBIQUxfQ0VDX0NhbGxiYWNrSURUeXBlRGVmOwpAQCAtMjEyLDcgKzIyMiw4IEBACiAgICovCiB0eXBlZGVmICB2b2lkICgqcENFQ19DYWxsYmFja1R5cGVEZWYpKENFQ19IYW5kbGVUeXBlRGVmICpoY2VjKTsgIC8qITwgcG9pbnRlciB0byBhbiBDRUMgY2FsbGJhY2sgZnVuY3Rpb24gKi8KIHR5cGVkZWYgIHZvaWQgKCpwQ0VDX1J4Q2FsbGJhY2tUeXBlRGVmKShDRUNfSGFuZGxlVHlwZURlZiAqaGNlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBSeEZyYW1lU2l6ZSk7ICAvKiE8IHBvaW50ZXIgdG8gYW4gUnggVHJhbnNmZXIgY29tcGxldGVkIGNhbGxiYWNrIGZ1bmN0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgUnhGcmFtZVNpemUpOyAgLyohPCBwb2ludGVyIHRvIGFuIFJ4IFRyYW5zZmVyIGNvbXBsZXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgZnVuY3Rpb24gKi8KICNlbmRpZiAvKiBVU0VfSEFMX0NFQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIC8qKgogICAqIEB9CkBAIC0zNTgsMTYgKzM2OSwxNiBAQAogLyoqIEBkZWZncm91cCBDRUNfT1dOX0FERFJFU1MgICBDRUMgT3duIEFkZHJlc3MKICAgKiBAewogICAqLwotI2RlZmluZSBDRUNfT1dOX0FERFJFU1NfTk9ORSAgICAgICAgICAgKCh1aW50MTZfdCkgMHgwMDAwVSkgICAvKiBSZXNldCB2YWx1ZSAqLwotI2RlZmluZSBDRUNfT1dOX0FERFJFU1NfMCAgICAgICAgICAgICAgKCh1aW50MTZfdCkgMHgwMDAxVSkgICAvKiBMb2dpY2FsIEFkZHJlc3MgMCAqLwotI2RlZmluZSBDRUNfT1dOX0FERFJFU1NfMSAgICAgICAgICAgICAgKCh1aW50MTZfdCkgMHgwMDAyVSkgICAvKiBMb2dpY2FsIEFkZHJlc3MgMSAqLwotI2RlZmluZSBDRUNfT1dOX0FERFJFU1NfMiAgICAgICAgICAgICAgKCh1aW50MTZfdCkgMHgwMDA0VSkgICAvKiBMb2dpY2FsIEFkZHJlc3MgMiAqLwotI2RlZmluZSBDRUNfT1dOX0FERFJFU1NfMyAgICAgICAgICAgICAgKCh1aW50MTZfdCkgMHgwMDA4VSkgICAvKiBMb2dpY2FsIEFkZHJlc3MgMyAqLwotI2RlZmluZSBDRUNfT1dOX0FERFJFU1NfNCAgICAgICAgICAgICAgKCh1aW50MTZfdCkgMHgwMDEwVSkgICAvKiBMb2dpY2FsIEFkZHJlc3MgNCAqLwotI2RlZmluZSBDRUNfT1dOX0FERFJFU1NfNSAgICAgICAgICAgICAgKCh1aW50MTZfdCkgMHgwMDIwVSkgICAvKiBMb2dpY2FsIEFkZHJlc3MgNSAqLwotI2RlZmluZSBDRUNfT1dOX0FERFJFU1NfNiAgICAgICAgICAgICAgKCh1aW50MTZfdCkgMHgwMDQwVSkgICAvKiBMb2dpY2FsIEFkZHJlc3MgNiAqLwotI2RlZmluZSBDRUNfT1dOX0FERFJFU1NfNyAgICAgICAgICAgICAgKCh1aW50MTZfdCkgMHgwMDgwVSkgICAvKiBMb2dpY2FsIEFkZHJlc3MgNyAqLwotI2RlZmluZSBDRUNfT1dOX0FERFJFU1NfOCAgICAgICAgICAgICAgKCh1aW50MTZfdCkgMHgwMTAwVSkgICAvKiBMb2dpY2FsIEFkZHJlc3MgOSAqLworI2RlZmluZSBDRUNfT1dOX0FERFJFU1NfTk9ORSAgICAgICAgICAgKCh1aW50MTZfdCkgMHgwMDAwVSkgICAvKiBSZXNldCB2YWx1ZSAgICAgICAgKi8KKyNkZWZpbmUgQ0VDX09XTl9BRERSRVNTXzAgICAgICAgICAgICAgICgodWludDE2X3QpIDB4MDAwMVUpICAgLyogTG9naWNhbCBBZGRyZXNzIDAgICovCisjZGVmaW5lIENFQ19PV05fQUREUkVTU18xICAgICAgICAgICAgICAoKHVpbnQxNl90KSAweDAwMDJVKSAgIC8qIExvZ2ljYWwgQWRkcmVzcyAxICAqLworI2RlZmluZSBDRUNfT1dOX0FERFJFU1NfMiAgICAgICAgICAgICAgKCh1aW50MTZfdCkgMHgwMDA0VSkgICAvKiBMb2dpY2FsIEFkZHJlc3MgMiAgKi8KKyNkZWZpbmUgQ0VDX09XTl9BRERSRVNTXzMgICAgICAgICAgICAgICgodWludDE2X3QpIDB4MDAwOFUpICAgLyogTG9naWNhbCBBZGRyZXNzIDMgICovCisjZGVmaW5lIENFQ19PV05fQUREUkVTU180ICAgICAgICAgICAgICAoKHVpbnQxNl90KSAweDAwMTBVKSAgIC8qIExvZ2ljYWwgQWRkcmVzcyA0ICAqLworI2RlZmluZSBDRUNfT1dOX0FERFJFU1NfNSAgICAgICAgICAgICAgKCh1aW50MTZfdCkgMHgwMDIwVSkgICAvKiBMb2dpY2FsIEFkZHJlc3MgNSAgKi8KKyNkZWZpbmUgQ0VDX09XTl9BRERSRVNTXzYgICAgICAgICAgICAgICgodWludDE2X3QpIDB4MDA0MFUpICAgLyogTG9naWNhbCBBZGRyZXNzIDYgICovCisjZGVmaW5lIENFQ19PV05fQUREUkVTU183ICAgICAgICAgICAgICAoKHVpbnQxNl90KSAweDAwODBVKSAgIC8qIExvZ2ljYWwgQWRkcmVzcyA3ICAqLworI2RlZmluZSBDRUNfT1dOX0FERFJFU1NfOCAgICAgICAgICAgICAgKCh1aW50MTZfdCkgMHgwMTAwVSkgICAvKiBMb2dpY2FsIEFkZHJlc3MgOSAgKi8KICNkZWZpbmUgQ0VDX09XTl9BRERSRVNTXzkgICAgICAgICAgICAgICgodWludDE2X3QpIDB4MDIwMFUpICAgLyogTG9naWNhbCBBZGRyZXNzIDEwICovCiAjZGVmaW5lIENFQ19PV05fQUREUkVTU18xMCAgICAgICAgICAgICAoKHVpbnQxNl90KSAweDA0MDBVKSAgIC8qIExvZ2ljYWwgQWRkcmVzcyAxMSAqLwogI2RlZmluZSBDRUNfT1dOX0FERFJFU1NfMTEgICAgICAgICAgICAgKCh1aW50MTZfdCkgMHgwODAwVSkgICAvKiBMb2dpY2FsIEFkZHJlc3MgMTIgKi8KQEAgLTQyMSw4ICs0MzIsOCBAQAogLyoqIEBkZWZncm91cCBDRUNfQUxMX0VSUk9SIENFQyBhbGwgUlggb3IgVFggZXJyb3JzIGZsYWdzCiAgICogQHsKICAgKi8KLSNkZWZpbmUgQ0VDX0lTUl9BTExfRVJST1IgICAgICAgICAgICAgICgodWludDMyX3QpQ0VDX0lTUl9SWE9WUnxDRUNfSVNSX0JSRXxDRUNfSVNSX1NCUEV8Q0VDX0lTUl9MQlBFfENFQ19JU1JfUlhBQ0tFfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRUNfSVNSX0FSQkxTVHxDRUNfSVNSX1RYVURSfENFQ19JU1JfVFhFUlJ8Q0VDX0lTUl9UWEFDS0UpCisjZGVmaW5lIENFQ19JU1JfQUxMX0VSUk9SICAgICAgICgodWludDMyX3QpQ0VDX0lTUl9SWE9WUnxDRUNfSVNSX0JSRXxDRUNfSVNSX1NCUEV8Q0VDX0lTUl9MQlBFfENFQ19JU1JfUlhBQ0tFfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFQ19JU1JfQVJCTFNUfENFQ19JU1JfVFhVRFJ8Q0VDX0lTUl9UWEVSUnxDRUNfSVNSX1RYQUNLRSkKIC8qKgogICAqIEB9CiAgICovCkBAIC00MzAsNyArNDQxLDcgQEAKIC8qKiBAZGVmZ3JvdXAgQ0VDX0lFUl9BTExfUlggQ0VDIGFsbCBSWCBlcnJvcnMgaW50ZXJydXB0cyBlbmFibGluZyBmbGFnCiAgICogQHsKICAgKi8KLSNkZWZpbmUgQ0VDX0lFUl9SWF9BTExfRVJSICAgICAgICAgICAgICAoKHVpbnQzMl90KUNFQ19JRVJfUlhBQ0tFSUV8Q0VDX0lFUl9MQlBFSUV8Q0VDX0lFUl9TQlBFSUV8Q0VDX0lFUl9CUkVJRXxDRUNfSUVSX1JYT1ZSSUUpCisjZGVmaW5lIENFQ19JRVJfUlhfQUxMX0VSUiAgICAgICgodWludDMyX3QpQ0VDX0lFUl9SWEFDS0VJRXxDRUNfSUVSX0xCUEVJRXxDRUNfSUVSX1NCUEVJRXxDRUNfSUVSX0JSRUlFfENFQ19JRVJfUlhPVlJJRSkKIC8qKgogICAqIEB9CiAgICovCkBAIC00MzgsNyArNDQ5LDcgQEAKIC8qKiBAZGVmZ3JvdXAgQ0VDX0lFUl9BTExfVFggQ0VDIGFsbCBUWCBlcnJvcnMgaW50ZXJydXB0cyBlbmFibGluZyBmbGFnCiAgICogQHsKICAgKi8KLSNkZWZpbmUgQ0VDX0lFUl9UWF9BTExfRVJSICAgICAgICAgICAgICAoKHVpbnQzMl90KUNFQ19JRVJfVFhBQ0tFSUV8Q0VDX0lFUl9UWEVSUklFfENFQ19JRVJfVFhVRFJJRXxDRUNfSUVSX0FSQkxTVElFKQorI2RlZmluZSBDRUNfSUVSX1RYX0FMTF9FUlIgICAgICAoKHVpbnQzMl90KUNFQ19JRVJfVFhBQ0tFSUV8Q0VDX0lFUl9UWEVSUklFfENFQ19JRVJfVFhVRFJJRXxDRUNfSUVSX0FSQkxTVElFKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTYyMiw3ICs2MzMsOCBAQAogICAqIEBwYXJhbSAgX19BRERSRVNTX18gT3duIEFkZHJlc3MgdmFsdWUgKENFQyBsb2dpY2FsIGFkZHJlc3MgaXMgaWRlbnRpZmllZCBieSBiaXQgcG9zaXRpb24pCiAgICogQHJldHZhbCBub25lCiAgICovCi0jZGVmaW5lIF9fSEFMX0NFQ19TRVRfT0FSKF9fSEFORExFX18sX19BRERSRVNTX18pICAgU0VUX0JJVCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DRkdSLCAoX19BRERSRVNTX18pPDwgQ0VDX0NGR1JfT0FSX0xTQl9QT1MpCisjZGVmaW5lIF9fSEFMX0NFQ19TRVRfT0FSKF9fSEFORExFX18sX19BRERSRVNTX18pICAgU0VUX0JJVCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DRkdSLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BRERSRVNTX18pPDwgQ0VDX0NGR1JfT0FSX0xTQl9QT1MpCiAKIC8qKgogICAqIEB9CkBAIC03MzEsOCArNzQzLDkgQEAKICNkZWZpbmUgSVNfQ0VDX0xCUEVFUlJPUkJJVEdFTihfX0VSUk9SQklUR0VOX18pICgoKF9fRVJST1JCSVRHRU5fXykgPT0gQ0VDX0xCUEVfRVJST1JCSVRfTk9fR0VORVJBVElPTikgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19FUlJPUkJJVEdFTl9fKSA9PSBDRUNfTEJQRV9FUlJPUkJJVF9HRU5FUkFUSU9OKSkKIAotI2RlZmluZSBJU19DRUNfQlJPQURDQVNURVJST1JfTk9fRVJST1JCSVRfR0VORVJBVElPTihfX0VSUk9SQklUR0VOX18pICgoKF9fRVJST1JCSVRHRU5fXykgPT0gQ0VDX0JST0FEQ0FTVEVSUk9SX0VSUk9SQklUX0dFTkVSQVRJT04pIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0VSUk9SQklUR0VOX18pID09IENFQ19CUk9BRENBU1RFUlJPUl9OT19FUlJPUkJJVF9HRU5FUkFUSU9OKSkKKyNkZWZpbmUgSVNfQ0VDX0JST0FEQ0FTVEVSUk9SX05PX0VSUk9SQklUX0dFTkVSQVRJT04oX19FUlJPUkJJVEdFTl9fKSBcCisgICgoKF9fRVJST1JCSVRHRU5fXykgPT0gQ0VDX0JST0FEQ0FTVEVSUk9SX0VSUk9SQklUX0dFTkVSQVRJT04pIHx8IFwKKyAgICgoX19FUlJPUkJJVEdFTl9fKSA9PSBDRUNfQlJPQURDQVNURVJST1JfTk9fRVJST1JCSVRfR0VORVJBVElPTikpCiAKICNkZWZpbmUgSVNfQ0VDX1NGVE9QKF9fU0ZUT1BfXykgICAgICAgICAgKCgoX19TRlRPUF9fKSA9PSBDRUNfU0ZUX1NUQVJUX09OX1RYU09NKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0ZUT1BfXykgPT0gQ0VDX1NGVF9TVEFSVF9PTl9UWF9SWF9FTkQpKQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfY29tcC5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfY29tcC5oCmluZGV4IGQ3MDkxODEuLmEzYTRhODcgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfaGFsX2NvbXAuaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF9jb21wLmgKQEAgLTMzMSwzICszMzEsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBTVE0zMkYzeHhfSEFMX0NPTVBfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmM3h4X2hhbF9jb21wX2V4LmggYi9JbmMvc3RtMzJmM3h4X2hhbF9jb21wX2V4LmgKaW5kZXggMDVlY2VhZC4uZGJiZDliOCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9oYWxfY29tcF9leC5oCisrKyBiL0luYy9zdG0zMmYzeHhfaGFsX2NvbXBfZXguaApAQCAtMTM4LDcgKzEzOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBMCBmb3IgQ09NUDcpIGNvbm5lY3RlZCB0byBjb21wYXJhdG9yIG5vbiBpbnZlcnRpbmcgaW5wdXQgKi8KICNkZWZpbmUgQ09NUF9OT05JTlZFUlRJTkdJTlBVVF9JTzIgICAgICAgICAgICAgICBDT01QX0NTUl9DT01QeE5PTklOU0VMIC8qITwgSU8yIChQQTMgZm9yIENPTVAyLCBQRDE0IGZvciBDT01QMywgUEU3IGZvciBDT01QNCwgUEIxMyBmb3IgQ09NUDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCMTEgZm9yIENPTVA2LCBQQzEgZm9yIENPTVA3KSBjb25uZWN0ZWQgdG8gY29tcGFyYXRvciBub24gaW52ZXJ0aW5nIGlucHV0ICovCi0jZGVmaW5lIENPTVBfTk9OSU5WRVJUSU5HSU5QVVRfREFDMVNXSVRDSENMT1NFRCAgQ09NUDFfQ1NSX0NPTVAxU1cxICAgICAvKiE8IERBQyBvdXB1dCBjb25uZWN0ZWQgdG8gY29tcGFyYXRvciBDT01QMSBub24gaW52ZXJ0aW5nIGlucHV0ICovCisjZGVmaW5lIENPTVBfTk9OSU5WRVJUSU5HSU5QVVRfREFDMVNXSVRDSENMT1NFRCAgQ09NUDFfQ1NSX0NPTVAxU1cxICAgICAvKiE8IERBQyBvdXRwdXQgY29ubmVjdGVkIHRvIGNvbXBhcmF0b3IgQ09NUDEgbm9uIGludmVydGluZyBpbnB1dCAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTE0OCw3ICsxNDgsNyBAQAogICAqLwogI2RlZmluZSBDT01QX05PTklOVkVSVElOR0lOUFVUX0lPMSAgICAgICAgICAgICAgICgweDAwMDAwMDAwVSkgLyohPCBJTzEgKFBBNyBmb3IgQ09NUDIsIFBCMCBmb3IgQ09NUDQsIFBCMTEgZm9yIENPTVA2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWQgdG8gY29tcGFyYXRvciBub24gaW52ZXJ0aW5nIGlucHV0ICovCi0jZGVmaW5lIENPTVBfTk9OSU5WRVJUSU5HSU5QVVRfREFDMVNXSVRDSENMT1NFRCAgQ09NUDJfQ1NSX0NPTVAySU5QREFDICAvKiE8IERBQyBvdXB1dCBjb25uZWN0ZWQgdG8gY29tcGFyYXRvciBDT01QMiBub24gaW52ZXJ0aW5nIGlucHV0ICovCisjZGVmaW5lIENPTVBfTk9OSU5WRVJUSU5HSU5QVVRfREFDMVNXSVRDSENMT1NFRCAgQ09NUDJfQ1NSX0NPTVAySU5QREFDICAvKiE8IERBQyBvdXRwdXQgY29ubmVjdGVkIHRvIGNvbXBhcmF0b3IgQ09NUDIgbm9uIGludmVydGluZyBpbnB1dCAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTE1OCw3ICsxNTgsNyBAQAogICAqLwogI2RlZmluZSBDT01QX05PTklOVkVSVElOR0lOUFVUX0lPMSAgICAgICAgICAgICAgICgweDAwMDAwMDAwVSkgLyohPCBJTzEgKFBBMSBmb3IgQ09NUDEsIFBBMyBmb3IgQ09NUDIpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWQgdG8gY29tcGFyYXRvciBub24gaW52ZXJ0aW5nIGlucHV0ICovCi0jZGVmaW5lIENPTVBfTk9OSU5WRVJUSU5HSU5QVVRfREFDMVNXSVRDSENMT1NFRCAgQ09NUF9DU1JfQ09NUDFTVzEgIC8qITwgREFDIG91cHV0IGNvbm5lY3RlZCB0byBjb21wYXJhdG9yIENPTVAxIG5vbiBpbnZlcnRpbmcgaW5wdXQgKi8KKyNkZWZpbmUgQ09NUF9OT05JTlZFUlRJTkdJTlBVVF9EQUMxU1dJVENIQ0xPU0VEICBDT01QX0NTUl9DT01QMVNXMSAgLyohPCBEQUMgb3V0cHV0IGNvbm5lY3RlZCB0byBjb21wYXJhdG9yIENPTVAxIG5vbiBpbnZlcnRpbmcgaW5wdXQgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xNjksNyArMTY5LDcgQEAKICNkZWZpbmUgQ09NUF9OT05JTlZFUlRJTkdJTlBVVF9JTzEgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKSAgIC8qITwgSU8xIChQQTEgZm9yIENPTVAxLCBQQTcgZm9yIENPTVAyLCBQQjE0IGZvciBDT01QMywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEIwIGZvciBDT01QNCwgUEQxMiBmb3IgQ09NUDUsIFBEMTEgZm9yIENPTVA2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBMCBmb3IgQ09NUDcpIGNvbm5lY3RlZCB0byBjb21wYXJhdG9yIG5vbiBpbnZlcnRpbmcgaW5wdXQgKi8KLSNkZWZpbmUgQ09NUF9OT05JTlZFUlRJTkdJTlBVVF9EQUMxU1dJVENIQ0xPU0VEIENPTVAxX0NTUl9DT01QMVNXMSAgICAgIC8qITwgREFDIG91cHV0IGNvbm5lY3RlZCB0byBjb21wYXJhdG9yIENPTVAxIG5vbiBpbnZlcnRpbmcgaW5wdXQgKi8KKyNkZWZpbmUgQ09NUF9OT05JTlZFUlRJTkdJTlBVVF9EQUMxU1dJVENIQ0xPU0VEIENPTVAxX0NTUl9DT01QMVNXMSAgICAgIC8qITwgREFDIG91dHB1dCBjb25uZWN0ZWQgdG8gY29tcGFyYXRvciBDT01QMSBub24gaW52ZXJ0aW5nIGlucHV0ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjc4NCwzICsyNzg0LDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYzeHhfSEFMX0NPTVBfRVhfSCAqLworCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX2NvbmZfdGVtcGxhdGUuaCBiL0luYy9zdG0zMmYzeHhfaGFsX2NvbmZfdGVtcGxhdGUuaAppbmRleCA2OWM0NDIxLi4yMzU4OTMyIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9jb25mX3RlbXBsYXRlLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfY29uZl90ZW1wbGF0ZS5oCkBAIC0xNCw3ICsxNCw3IEBACiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICovCisgICovIAogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2lmbmRlZiBfX1NUTTMyRjN4eF9IQUxfQ09ORl9ICkBAIC0zNTEsMyArMzUxLDYgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYzeHhfSEFMX0NPTkZfSCAqLworCisKKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfY29ydGV4LmggYi9JbmMvc3RtMzJmM3h4X2hhbF9jb3J0ZXguaAppbmRleCBkN2RlODlmLi4xMzUwNjIwIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9jb3J0ZXguaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF9jb3J0ZXguaApAQCAtOSwxMiArOSwxMiBAQAogICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICovCisgICovIAogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2lmbmRlZiBfX1NUTTMyRjN4eF9IQUxfQ09SVEVYX0gKQEAgLTQyMCwzICs0MjAsNSBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjN4eF9IQUxfQ09SVEVYX0ggKi8KKyAKKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfZGFjLmggYi9JbmMvc3RtMzJmM3h4X2hhbF9kYWMuaAppbmRleCA4N2RkMTIyLi41NjZkMjQwIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9kYWMuaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF9kYWMuaApAQCAtNjQsMTIgKzY0LDEyIEBACiAgIAogICB1aW50MzJfdCBEQUNfT3V0cHV0QnVmZmVyOyAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIERBQyBjaGFubmVsIG91dHB1dCBidWZmZXIgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIERBQ19vdXRwdXRfYnVmZmVyIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhIGdpdmVuIERBQyBjaGFubmVsLCBpcyB0aGlzIHBhcmFtYXRlciBhcHBsaWVzIHRoZW4gREFDX091dHB1dFN3aXRjaCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSBnaXZlbiBEQUMgY2hhbm5lbCwgaXMgdGhpcyBwYXJhbWV0ZXIgYXBwbGllcyB0aGVuIERBQ19PdXRwdXRTd2l0Y2ggCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgYXBwbHkgKi8KICAgCiAgIHVpbnQzMl90IERBQ19PdXRwdXRTd2l0Y2g7ICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgREFDIGNoYW5uZWwgb3V0cHV0IHN3aXRjaCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgREFDX091dHB1dFN3aXRjaCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSBnaXZlbiBEQUMgY2hhbm5lbCwgaXMgdGhpcyBwYXJhbWF0ZXIgYXBwbGllcyB0aGVuIERBQ19PdXRwdXRCdWZmZXIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGEgZ2l2ZW4gREFDIGNoYW5uZWwsIGlzIHRoaXMgcGFyYW1ldGVyIGFwcGxpZXMgdGhlbiBEQUNfT3V0cHV0QnVmZmVyIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGFwcGx5ICovCiAgIAogfURBQ19DaGFubmVsQ29uZlR5cGVEZWY7CkBAIC0yMDksNyArMjA5LDcgQEAKICAgKi8KIAogI2VuZGlmIC8qIERBQ19DUl9PVVRFTjEgKi8KLS8qKiBAZGVmZ3JvdXAgREFDX2RhdGFfYWxpZ25lbWVudCBEQUMgZGF0YSBhbGlnbmVtZW50CisvKiogQGRlZmdyb3VwIERBQ19kYXRhX2FsaWdubWVudCBEQUMgZGF0YSBhbGlnbm1lbnQKICAgKiBAewogICAqLwogI2RlZmluZSBEQUNfQUxJR05fMTJCX1IgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKQEAgLTQ5MCwzICs0OTAsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBTVE0zMkYzeHhfSEFMX0RBQ19IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX2RhY19leC5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfZGFjX2V4LmgKaW5kZXggZDM1ZWY3NS4uYjJmYzcyMyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9oYWxfZGFjX2V4LmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfZGFjX2V4LmgKQEAgLTMzOCwzICszMzgsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBTVE0zMkYzeHhfSEFMX0hBTF9FWF9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX2RlZi5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfZGVmLmgKaW5kZXggZDNkNmRmNS4uZGY4NDE4YiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9oYWxfZGVmLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfZGVmLmgKQEAgLTU0LDcgKzU0LDkgQEAKIAogLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorI2lmICFkZWZpbmVkKFVOVVNFRCkKICNkZWZpbmUgVU5VU0VEKFgpICh2b2lkKVggICAgICAvKiBUbyBhdm9pZCBnY2MvZysrIHdhcm5pbmdzICovCisjZW5kaWYgLyogVU5VU0VEICovCiAKICNkZWZpbmUgSEFMX01BWF9ERUxBWSAgICAgIDB4RkZGRkZGRkZVCiAKQEAgLTE3MiwzICsxNzQsNSBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX19TVE0zMkYzeHhfSEFMX0RFRiAqLworCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX2RtYS5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfZG1hLmgKaW5kZXggZmIwOWFkZC4uYWZkMTBlYiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9oYWxfZG1hLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfZG1hLmgKQEAgLTksMTIgKzksMTIgQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqLworICAqLyAKIAogLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpZm5kZWYgX19TVE0zMkYzeHhfSEFMX0RNQV9ICkBAIC00NDksMyArNDQ5LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYzeHhfSEFMX0RNQV9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX2RtYV9leC5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfZG1hX2V4LmgKaW5kZXggNWI3NzQ2NS4uNjkxZDEyYiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9oYWxfZG1hX2V4LmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfZG1hX2V4LmgKQEAgLTksMTIgKzksMTIgQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqLworICAqLyAKIAogLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpZm5kZWYgX19TVE0zMkYzeHhfSEFMX0RNQV9FWF9ICkBAIC0yNjksMyArMjY5LDQgQEAKICAgICAgICAvKiBTVE0zMkYzNzN4QyB8fCBTVE0zMkYzNzh4eCAgICAgICAgICAgICAgICAgICAqLwogCiAjZW5kaWYgLyogX19TVE0zMkYzeHhfSEFMX0RNQV9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX2V4dGkuaCBiL0luYy9zdG0zMmYzeHhfaGFsX2V4dGkuaAppbmRleCAzNmZhY2VhLi4yZTI1Y2EzIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9leHRpLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfZXh0aS5oCkBAIC0zOTksMyArMzk5LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogU1RNMzJGM3h4X0hBTF9FWFRJX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfZmxhc2guaCBiL0luYy9zdG0zMmYzeHhfaGFsX2ZsYXNoLmgKaW5kZXggNmExNzE4NS4uMDhiZTk2MiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9oYWxfZmxhc2guaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF9mbGFzaC5oCkBAIC05LDEwICs5LDkgQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCkBAIC0zNzUsMyArMzc0LDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYzeHhfSEFMX0ZMQVNIX0ggKi8KKworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmM3h4X2hhbF9mbGFzaF9leC5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfZmxhc2hfZXguaAppbmRleCA5MDFhOGEwLi43ZTZiMzAyIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9mbGFzaF9leC5oCisrKyBiL0luYy9zdG0zMmYzeHhfaGFsX2ZsYXNoX2V4LmgKQEAgLTksMTAgKzksOSBAQAogICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCi0gICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKQEAgLTQ2OSwzICs0NjgsNSBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjN4eF9IQUxfRkxBU0hfRVhfSCAqLworCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX2dwaW8uaCBiL0luYy9zdG0zMmYzeHhfaGFsX2dwaW8uaAppbmRleCBiMWZjZDAyLi4yOWI1NTA0IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9ncGlvLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfZ3Bpby5oCkBAIC0zMTksMyArMzE5LDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYzeHhfSEFMX0dQSU9fSCAqLworCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX2dwaW9fZXguaCBiL0luYy9zdG0zMmYzeHhfaGFsX2dwaW9fZXguaAppbmRleCAxNDIxZTFlLi44ZGQ1N2FhIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9ncGlvX2V4LmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfZ3Bpb19leC5oCkBAIC0xNTE3LDMgKzE1MTcsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjN4eF9IQUxfR1BJT19FWF9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX2hydGltLmggYi9JbmMvc3RtMzJmM3h4X2hhbF9ocnRpbS5oCmluZGV4IDI2NThlNzEuLmNmYmM5MDMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfaGFsX2hydGltLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfaHJ0aW0uaApAQCAtMTM1MiwxMCArMTM1MiwxMCBAQAogICAqIEBicmllZiBDb25zdGFudHMgZGVmaW5pbmcgdGhlIHNvdXJjZSBhbmQgZXZlbnQgdG8gYmUgc2VudCBvbiB0aGUKICAgKiAgICAgICAgc3luY2hyb25pemF0aW9uIG91dHB1dHMKICAgKi8KLSNkZWZpbmUgSFJUSU1fU1lOQ09VVFBVVFNPVVJDRV9NQVNURVJfU1RBUlQgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEEgcHVsc2UgaXMgc2VudCBvbiB0aGUgU1lOQ09VVCBvdXRwdXQgdXBvbiBtYXN0ZXIgdGltZXIgc3RhcnQgZXZlbnQgKi8KLSNkZWZpbmUgSFJUSU1fU1lOQ09VVFBVVFNPVVJDRV9NQVNURVJfQ01QMSAgKEhSVElNX01DUl9TWU5DX1NSQ18wKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEEgcHVsc2UgaXMgc2VudCBvbiB0aGUgU1lOQ09VVCBvdXRwdXQgdXBvbiBtYXN0ZXIgdGltZXIgY29tcGFyZSAxIGV2ZW50Ki8KLSNkZWZpbmUgSFJUSU1fU1lOQ09VVFBVVFNPVVJDRV9USU1BX1NUQVJUICAgKEhSVElNX01DUl9TWU5DX1NSQ18xKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEEgcHVsc2UgaXMgc2VudCBvbiB0aGUgU1lOQ09VVCBvdXRwdXQgdXBvbiB0aW1lciBBIHN0YXJ0IG9yIHJlc2V0IGV2ZW50cyAqLwotI2RlZmluZSBIUlRJTV9TWU5DT1VUUFVUU09VUkNFX1RJTUFfQ01QMSAgICAoSFJUSU1fTUNSX1NZTkNfU1JDXzEgfCBIUlRJTV9NQ1JfU1lOQ19TUkNfMCkgIC8qITwgQSBwdWxzZSBpcyBzZW50IG9uIHRoZSBTWU5DT1VUIG91dHB1dCB1cG9uIHRpbWVyIEEgY29tcGFyZSAxIGV2ZW50ICovCisjZGVmaW5lIEhSVElNX1NZTkNPVVRQVVRTT1VSQ0VfTUFTVEVSX1NUQVJUIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBIHB1bHNlIGlzIHNlbnQgb24gSFJUSU1fU0NPVVQgb3V0cHV0IGFuZCBocnRpbV9vdXRfc3luYzIgdXBvbiBtYXN0ZXIgdGltZXIgc3RhcnQgZXZlbnQgICAgICAqLworI2RlZmluZSBIUlRJTV9TWU5DT1VUUFVUU09VUkNFX01BU1RFUl9DTVAxICAoSFJUSU1fTUNSX1NZTkNfU1JDXzApICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQSBwdWxzZSBpcyBzZW50IG9uIEhSVElNX1NDT1VUIG91dHB1dCBhbmQgaHJ0aW1fb3V0X3N5bmMyIHVwb24gbWFzdGVyIHRpbWVyIGNvbXBhcmUgMSBldmVudCAgKi8KKyNkZWZpbmUgSFJUSU1fU1lOQ09VVFBVVFNPVVJDRV9USU1BX1NUQVJUICAgKEhSVElNX01DUl9TWU5DX1NSQ18xKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEEgcHVsc2UgaXMgc2VudCBvbiBIUlRJTV9TQ09VVCBvdXRwdXQgYW5kIGhydGltX291dF9zeW5jMiB1cG9uIHRpbWVyIEEgc3RhcnQgb3IgcmVzZXQgZXZlbnRzICovCisjZGVmaW5lIEhSVElNX1NZTkNPVVRQVVRTT1VSQ0VfVElNQV9DTVAxICAgIChIUlRJTV9NQ1JfU1lOQ19TUkNfMSB8IEhSVElNX01DUl9TWU5DX1NSQ18wKSAgLyohPCBBIHB1bHNlIGlzIHNlbnQgb24gSFJUSU1fU0NPVVQgb3V0cHV0IGFuZCBocnRpbV9vdXRfc3luYzIgdXBvbiB0aW1lciBBIGNvbXBhcmUgMSBldmVudCAgICAgICAqLwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX2kyYy5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfaTJjLmgKaW5kZXggZTRlMmE5NS4uODE0Y2IzNyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9oYWxfaTJjLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfaTJjLmgKQEAgLTIwNyw2ICsyMDcsNyBAQAogCiAgIERNQV9IYW5kbGVUeXBlRGVmICAgICAgICAgICpoZG1hcng7ICAgICAgICAvKiE8IEkyQyBSeCBETUEgaGFuZGxlIHBhcmFtZXRlcnMgICAgICAgICAgICAgICovCiAKKwogICBIQUxfTG9ja1R5cGVEZWYgICAgICAgICAgICBMb2NrOyAgICAgICAgICAgLyohPCBJMkMgbG9ja2luZyBvYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAgIF9fSU8gSEFMX0kyQ19TdGF0ZVR5cGVEZWYgIFN0YXRlOyAgICAgICAgICAvKiE8IEkyQyBjb21tdW5pY2F0aW9uIHN0YXRlICAgICAgICAgICAgICAgICAgICovCkBAIC0yMTcsNiArMjE4LDEwIEBACiAKICAgX19JTyB1aW50MzJfdCAgICAgICAgICAgICAgQWRkckV2ZW50Q291bnQ7IC8qITwgSTJDIEFkZHJlc3MgRXZlbnQgY291bnRlciAgICAgICAgICAgICAgICAgKi8KIAorICBfX0lPIHVpbnQzMl90ICAgICAgICAgICAgICBEZXZhZGRyZXNzOyAgICAgLyohPCBJMkMgVGFyZ2V0IGRldmljZSBhZGRyZXNzICAgICAgICAgICAgICAgICAqLworCisgIF9fSU8gdWludDMyX3QgICAgICAgICAgICAgIE1lbWFkZHJlc3M7ICAgICAvKiE8IEkyQyBUYXJnZXQgbWVtb3J5IGFkZHJlc3MgICAgICAgICAgICAgICAgICovCisKICNpZiAoVVNFX0hBTF9JMkNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIHZvaWQgKCogTWFzdGVyVHhDcGx0Q2FsbGJhY2spKHN0cnVjdCBfX0kyQ19IYW5kbGVUeXBlRGVmICpoaTJjKTsKICAgLyohPCBJMkMgTWFzdGVyIFR4IFRyYW5zZmVyIGNvbXBsZXRlZCBjYWxsYmFjayAqLwpAQCAtNzA1LDkgKzcxMCw5IEBACiAgICogQHsKICAgKi8KIC8qIFBlcmlwaGVyYWwgU3RhdGUsIE1vZGUgYW5kIEVycm9yIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSEFMX0kyQ19TdGF0ZVR5cGVEZWYgSEFMX0kyQ19HZXRTdGF0ZShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYyk7Ci1IQUxfSTJDX01vZGVUeXBlRGVmICBIQUxfSTJDX0dldE1vZGUoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMpOwotdWludDMyX3QgICAgICAgICAgICAgSEFMX0kyQ19HZXRFcnJvcihJMkNfSGFuZGxlVHlwZURlZiAqaGkyYyk7CitIQUxfSTJDX1N0YXRlVHlwZURlZiBIQUxfSTJDX0dldFN0YXRlKGNvbnN0IEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjKTsKK0hBTF9JMkNfTW9kZVR5cGVEZWYgIEhBTF9JMkNfR2V0TW9kZShjb25zdCBJMkNfSGFuZGxlVHlwZURlZiAqaGkyYyk7Cit1aW50MzJfdCAgICAgICAgICAgICBIQUxfSTJDX0dldEVycm9yKGNvbnN0IEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjKTsKIAogLyoqCiAgICogQH0KQEAgLTgwMCw4ICs4MDUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSTJDX0NSMl9TVEFSVCkgfCAoSTJDX0NSMl9BVVRPRU5EKSkgJiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5JMkNfQ1IyX1JEX1dSTikpIDogXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpKCgoKHVpbnQzMl90KShfX0FERFJFU1NfXykgJiAoSTJDX0NSMl9TQUREKSkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJMkNfQ1IyX0FERDEwKSB8IChJMkNfQ1IyX1NUQVJUKSkgJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5JMkNfQ1IyX1JEX1dSTikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSTJDX0NSMl9BREQxMCkgfCAoSTJDX0NSMl9TVEFSVCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJMkNfQ1IyX0FVVE9FTkQpKSAmICh+STJDX0NSMl9SRF9XUk4pKSkKIAogI2RlZmluZSBJMkNfQ0hFQ0tfRkxBRyhfX0lTUl9fLCBfX0ZMQUdfXykgICAgICAgICAoKCgoX19JU1JfXykgJiAoKF9fRkxBR19fKSAmIEkyQ19GTEFHX01BU0spKSA9PSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZMQUdfXykgJiBJMkNfRkxBR19NQVNLKSkgPyBTRVQgOiBSRVNFVCkKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX2kycy5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfaTJzLmgKaW5kZXggYWNlNGFhOS4uYTA1NzUzNSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9oYWxfaTJzLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfaTJzLmgKQEAgLTU4NCwzICs1ODQsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBTVE0zMkYzeHhfSEFMX0kyU19IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX2kyc19leC5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfaTJzX2V4LmgKaW5kZXggY2QxNDA3MC4uZjQzNTcyYSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9oYWxfaTJzX2V4LmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfaTJzX2V4LmgKQEAgLTE4MCwzICsxODAsNCBAQAogCiAKICNlbmRpZiAvKiBTVE0zMkYzeHhfSEFMX0kyU19FWF9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX2lyZGEuaCBiL0luYy9zdG0zMmYzeHhfaGFsX2lyZGEuaAppbmRleCBjYTc2YTM4Li42ZDVjMzc1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9pcmRhLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfaXJkYS5oCkBAIC04NTAsMyArODUwLDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogU1RNMzJGM3h4X0hBTF9JUkRBX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfaXJkYV9leC5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfaXJkYV9leC5oCmluZGV4IDNkNDgyMWYuLmRlY2Y2YTUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfaGFsX2lyZGFfZXguaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF9pcmRhX2V4LmgKQEAgLTQ5LDEwICs0OSwxMiBAQAogI2RlZmluZSBJUkRBX1dPUkRMRU5HVEhfN0IgICAgICAgICAgICAgICAgICBVU0FSVF9DUjFfTTEgICAvKiE8IDctYml0IGxvbmcgZnJhbWUgKi8KICNkZWZpbmUgSVJEQV9XT1JETEVOR1RIXzhCICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgLyohPCA4LWJpdCBsb25nIGZyYW1lICovCiAjZGVmaW5lIElSREFfV09SRExFTkdUSF85QiAgICAgICAgICAgICAgICAgIFVTQVJUX0NSMV9NMCAgIC8qITwgOS1iaXQgbG9uZyBmcmFtZSAqLwotI2VsaWYgZGVmaW5lZChVU0FSVF9DUjFfTSkKKyNlbHNlCisjaWYgZGVmaW5lZChVU0FSVF9DUjFfTSkKICNkZWZpbmUgSVJEQV9XT1JETEVOR1RIXzhCICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKSAgICAgICAgICAgICAgLyohPCA4LWJpdCBsb25nIGZyYW1lICovCiAjZGVmaW5lIElSREFfV09SRExFTkdUSF85QiAgICAgICAgICAgICAgICAgIFVTQVJUX0NSMV9NICAgIC8qITwgOS1iaXQgbG9uZyBmcmFtZSAqLwotI2VuZGlmCisjZW5kaWYgIC8qIFVTQVJUX0NSMV9NMSAqLworI2VuZGlmICAvKiBVU0FSVF9DUjFfTTEgJiYgVVNBUlRfQ1IxX00wICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNzQsMTMgKzc2LDE0IEBACiAgICogQHBhcmFtICBfX0NMT0NLU09VUkNFX18gb3V0cHV0IHZhcmlhYmxlLgogICAqIEByZXR2YWwgSVJEQSBjbG9ja2luZyBzb3VyY2UsIHdyaXR0ZW4gaW4gX19DTE9DS1NPVVJDRV9fLgogICAqLwotI2lmIGRlZmluZWQoU1RNMzJGMzAyeEUpIHx8IGRlZmluZWQoU1RNMzJGMzAzeEUpIHx8IGRlZmluZWQoU1RNMzJGMzk4eHgpIHx8IGRlZmluZWQoU1RNMzJGMzAyeEMpIHx8IGRlZmluZWQoU1RNMzJGMzAzeEMpIHx8IGRlZmluZWQoU1RNMzJGMzU4eHgpCisjaWYgZGVmaW5lZChTVE0zMkYzMDJ4RSkgfHwgZGVmaW5lZChTVE0zMkYzMDN4RSkgfHwgZGVmaW5lZChTVE0zMkYzOTh4eCkgfHwgZGVmaW5lZChTVE0zMkYzMDJ4QykgXAorIHx8IGRlZmluZWQoU1RNMzJGMzAzeEMpIHx8IGRlZmluZWQoU1RNMzJGMzU4eHgpCiAjZGVmaW5lIElSREFfR0VUQ0xPQ0tTT1VSQ0UoX19IQU5ETEVfXyxfX0NMT0NLU09VUkNFX18pICAgICAgIFwKICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gVVNBUlQxKSAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDFfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgXAotICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDFfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDFDTEtTT1VSQ0VfUENMSzI6ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBJUkRBX0NMT0NLU09VUkNFX1BDTEsyOyAgICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtOTYsMTIgKzk5LDEyIEBACiAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IElSREFfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZWxzZSBpZigoX19IQU5ETEVfXyktPkluc3RhbmNlID09IFVTQVJUMikgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUMl9TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICBcCi0gICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUMl9TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUMkNMS1NPVVJDRV9QQ0xLMTogICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IElSREFfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgICAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMTcsMTIgKzEyMCwxMiBAQAogICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBJUkRBX0NMT0NLU09VUkNFX1VOREVGSU5FRDsgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGVsc2UgaWYoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBVU0FSVDMpICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDNfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgXAotICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDNfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDNDTEtTT1VSQ0VfUENMSzE6ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBJUkRBX0NMT0NLU09VUkNFX1BDTEsxOyAgICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTM4LDEyICsxNDEsMTIgQEAKICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gSVJEQV9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlIGlmKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gVUFSVDQpICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVUFSVDRfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVUFSVDRfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVUFSVDRDTEtTT1VSQ0VfUENMSzE6ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gSVJEQV9DTE9DS1NPVVJDRV9QQ0xLMTsgICAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTE1OSwxMiArMTYyLDEyIEBACiAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IElSREFfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZWxzZSBpZigoX19IQU5ETEVfXyktPkluc3RhbmNlID09IFVBUlQ1KSAgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VBUlQ1X1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VBUlQ1X1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VBUlQ1Q0xLU09VUkNFX1BDTEsxOiAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IElSREFfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgICAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xODAsMjAgKzE4MywyMSBAQAogICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBJUkRBX0NMT0NLU09VUkNFX1VOREVGSU5FRDsgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gSVJEQV9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH0gd2hpbGUoMFUpCi0jZWxpZiBkZWZpbmVkKFNUTTMyRjMwM3g4KSB8fCBkZWZpbmVkKFNUTTMyRjMzNHg4KSB8fCBkZWZpbmVkKFNUTTMyRjMyOHh4KSB8fCBkZWZpbmVkKFNUTTMyRjMwMXg4KSB8fCBkZWZpbmVkKFNUTTMyRjMwMng4KSB8fCBkZWZpbmVkKFNUTTMyRjMxOHh4KQorI2VsaWYgZGVmaW5lZChTVE0zMkYzMDN4OCkgfHwgZGVmaW5lZChTVE0zMkYzMzR4OCkgfHwgZGVmaW5lZChTVE0zMkYzMjh4eCkgfHwgZGVmaW5lZChTVE0zMkYzMDF4OCkgXAorICAgfHwgZGVmaW5lZChTVE0zMkYzMDJ4OCkgfHwgZGVmaW5lZChTVE0zMkYzMTh4eCkKICNkZWZpbmUgSVJEQV9HRVRDTE9DS1NPVVJDRShfX0hBTkRMRV9fLF9fQ0xPQ0tTT1VSQ0VfXykgICAgICAgXAogICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBVU0FSVDEpICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUMV9TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICBcCi0gICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUMV9TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUMUNMS1NPVVJDRV9QQ0xLMTogICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IElSREFfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgICAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yMDksNyArMjEzLDcgQEAKICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gSVJEQV9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlIGlmKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gVVNBUlQyKSAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yMjksOCArMjMzLDggQEAKICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gVVNBUlQxKSAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDFfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgXAotICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDFfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDFDTEtTT1VSQ0VfUENMSzI6ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBJUkRBX0NMT0NLU09VUkNFX1BDTEsyOyAgICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjQ2LDEyICsyNTAsMTIgQEAKICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gSVJEQV9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlIGlmKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gVVNBUlQyKSAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVVNBUlQyX1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVVNBUlQyX1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQyQ0xLU09VUkNFX1BDTEsxOiAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gSVJEQV9DTE9DS1NPVVJDRV9QQ0xLMTsgICAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTI2NywxMiArMjcxLDEyIEBACiAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IElSREFfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZWxzZSBpZigoX19IQU5ETEVfXyktPkluc3RhbmNlID09IFVTQVJUMykgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUM19TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICBcCi0gICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUM19TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUM0NMS1NPVVJDRV9QQ0xLMTogICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IElSREFfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgICAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yODgsNyArMjkyLDcgQEAKICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gSVJEQV9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0zNDMsMzMgKzM0NywzNSBAQAogICAgICAgKF9fSEFORExFX18pLT5NYXNrID0gMHgwMDAwVTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH0gd2hpbGUoMFUpCi0jZWxpZiBkZWZpbmVkKFVTQVJUX0NSMV9NKQorI2Vsc2UKKyNpZiBkZWZpbmVkKFVTQVJUX0NSMV9NKQogI2RlZmluZSBJUkRBX01BU0tfQ09NUFVUQVRJT04oX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICgoX19IQU5ETEVfXyktPkluaXQuV29yZExlbmd0aCA9PSBJUkRBX1dPUkRMRU5HVEhfOUIpICAgICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgaWYgKChfX0hBTkRMRV9fKS0+SW5pdC5QYXJpdHkgPT0gSVJEQV9QQVJJVFlfTk9ORSkgICAgICAgICAgICAgICBcCi0gICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoX19IQU5ETEVfXyktPkluaXQuV29yZExlbmd0aCA9PSBJUkRBX1dPUkRMRU5HVEhfOUIpICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBpZiAoKF9fSEFORExFX18pLT5Jbml0LlBhcml0eSA9PSBJUkRBX1BBUklUWV9OT05FKSAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgKF9fSEFORExFX18pLT5NYXNrID0gMHgwMUZGVSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIChfX0hBTkRMRV9fKS0+TWFzayA9IDB4MDBGRlUgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGVsc2UgaWYgKChfX0hBTkRMRV9fKS0+SW5pdC5Xb3JkTGVuZ3RoID09IElSREFfV09SRExFTkdUSF84QikgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgaWYgKChfX0hBTkRMRV9fKS0+SW5pdC5QYXJpdHkgPT0gSVJEQV9QQVJJVFlfTk9ORSkgICAgICAgICAgICAgICBcCi0gICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKF9fSEFORExFX18pLT5Jbml0LldvcmRMZW5ndGggPT0gSVJEQV9XT1JETEVOR1RIXzhCKSAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmICgoX19IQU5ETEVfXyktPkluaXQuUGFyaXR5ID09IElSREFfUEFSSVRZX05PTkUpICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAoX19IQU5ETEVfXyktPk1hc2sgPSAweDAwRkZVIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgKF9fSEFORExFX18pLT5NYXNrID0gMHgwMDdGVSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUoMFUpCi0jZW5kaWYKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlKDBVKQorI2VuZGlmICAvKiBVU0FSVF9DUjFfTSAqLworI2VuZGlmICAvKiBVU0FSVF9DUjFfTSAmJiBVU0FSVF9DUjFfTTAgKi8KIAogLyoqIEBicmllZiBFbnN1cmUgdGhhdCBJUkRBIGZyYW1lIGxlbmd0aCBpcyB2YWxpZC4KICAgKiBAcGFyYW0gX19MRU5HVEhfXyBJUkRBIGZyYW1lIGxlbmd0aC4KQEAgLTM3OSwxMCArMzg1LDEyIEBACiAjZGVmaW5lIElTX0lSREFfV09SRF9MRU5HVEgoX19MRU5HVEhfXykgKCgoX19MRU5HVEhfXykgPT0gSVJEQV9XT1JETEVOR1RIXzdCKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gSVJEQV9XT1JETEVOR1RIXzhCKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gSVJEQV9XT1JETEVOR1RIXzlCKSkKLSNlbGlmIGRlZmluZWQoVVNBUlRfQ1IxX00pCisjZWxzZQorI2lmIGRlZmluZWQoVVNBUlRfQ1IxX00pCiAjZGVmaW5lIElTX0lSREFfV09SRF9MRU5HVEgoX19MRU5HVEhfXykgKCgoX19MRU5HVEhfXykgPT0gSVJEQV9XT1JETEVOR1RIXzhCKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gSVJEQV9XT1JETEVOR1RIXzlCKSkKLSNlbmRpZgorI2VuZGlmICAvKiBVU0FSVF9DUjFfTSAqLworI2VuZGlmICAvKiBVU0FSVF9DUjFfTSAmJiBVU0FSVF9DUjFfTTAgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC00MDIsMyArNDEwLDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogU1RNMzJGM3h4X0hBTF9JUkRBX0VYX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfbmFuZC5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfbmFuZC5oCmluZGV4IDQxNjBlMmEuLjE5ZDgwOWIgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfaGFsX25hbmQuaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF9uYW5kLmgKQEAgLTI0LDEwICsyNCwxMCBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoRk1DX0JBTkszKQogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2luY2x1ZGUgInN0bTMyZjN4eF9sbF9mbWMuaCIKKyNpZiBkZWZpbmVkKEZNQ19CQU5LMykKIAogLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjN4eF9IQUxfRHJpdmVyCiAgICogQHsKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgKE5BTkRfQ01EX0FSRUFfVFJVRTEpIGFuZCBiZWZvcmUgREFUQSByZWFkaW5nIHNlcXVlbmNlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4YW1wbGU6IFRvc2hpYmEgVEhUSDU4QllHM1MwSEJBSTYuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY291bGQgYmUgRU5BQkxFIG9yIERJU0FCTEUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2UgY2hlY2sgdGhlIFJlYWQgTW9kZSBzZXF1bmVjZSBpbiB0aGUgTkFORCBkZXZpY2UgZGF0YXNoZWV0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBSZWFkIE1vZGUgc2VxdWVuY2UgaW4gdGhlIE5BTkQgZGV2aWNlIGRhdGFzaGVldCAqLwogfSBOQU5EX0RldmljZUNvbmZpZ1R5cGVEZWY7CiAKIC8qKgpAQCAtMTI3LDcgKzEyNyw3IEBACiAKICAgX19JTyBIQUxfTkFORF9TdGF0ZVR5cGVEZWYgICAgIFN0YXRlOyAgICAgIC8qITwgTkFORCBkZXZpY2UgYWNjZXNzIHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICBOQU5EX0RldmljZUNvbmZpZ1R5cGVEZWYgICAgICAgQ29uZmlnOyAgICAgLyohPCBOQU5EIHBodXNpY2FsIGNoYXJhY3RlcmlzdGljIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAgICAqLworICBOQU5EX0RldmljZUNvbmZpZ1R5cGVEZWYgICAgICAgQ29uZmlnOyAgICAgLyohPCBOQU5EIHBoeXNpY2FsIGNoYXJhY3RlcmlzdGljIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAgICAqLwogCiAjaWYgKFVTRV9IQUxfTkFORF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgdm9pZCAoKiBNc3BJbml0Q2FsbGJhY2spKHN0cnVjdCBfX05BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQpOyAgICAgICAgICAgICAgIC8qITwgTkFORCBNc3AgSW5pdCBjYWxsYmFjayAgICAgICAgICAgICAgKi8KQEAgLTIxNSwyNyArMjE1LDI3IEBACiAvKiBJTyBvcGVyYXRpb24gZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1Jlc2V0KE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQpOwogCi1IQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfUmVhZF9QYWdlXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50OF90ICpwQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBOdW1QYWdlVG9SZWFkKTsKLUhBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9Xcml0ZV9QYWdlXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50OF90ICpwQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtUGFnZVRvV3JpdGUpOwotSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1JlYWRfU3BhcmVBcmVhXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLAorSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1JlYWRfUGFnZV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtUGFnZVRvUmVhZCk7CitIQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfV3JpdGVfUGFnZV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVBhZ2VUb1dyaXRlKTsKK0hBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9SZWFkX1NwYXJlQXJlYV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1TcGFyZUFyZWFUb1JlYWQpOwotSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1dyaXRlX1NwYXJlQXJlYV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG93cml0ZSk7CitIQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfV3JpdGVfU3BhcmVBcmVhXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIGNvbnN0IE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1TcGFyZUFyZWFUb3dyaXRlKTsKIAotSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1JlYWRfUGFnZV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsIHVpbnQxNl90ICpwQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtUGFnZVRvUmVhZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfV3JpdGVfUGFnZV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsIHVpbnQxNl90ICpwQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bVBhZ2VUb1dyaXRlKTsKLUhBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9SZWFkX1NwYXJlQXJlYV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCitIQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfUmVhZF9QYWdlXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1QYWdlVG9SZWFkKTsKK0hBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9Xcml0ZV9QYWdlXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MTZfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtUGFnZVRvV3JpdGUpOworSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1JlYWRfU3BhcmVBcmVhXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvUmVhZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfV3JpdGVfU3BhcmVBcmVhXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1TcGFyZUFyZWFUb3dyaXRlKTsKK0hBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9Xcml0ZV9TcGFyZUFyZWFfMTZiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIGNvbnN0IE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvd3JpdGUpOwogCi1IQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfRXJhc2VfQmxvY2soTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MpOworSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX0VyYXNlX0Jsb2NrKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIGNvbnN0IE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzKTsKIAotdWludDMyX3QgICAgICAgICAgIEhBTF9OQU5EX0FkZHJlc3NfSW5jKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzKTsKK3VpbnQzMl90ICAgICAgICAgICBIQUxfTkFORF9BZGRyZXNzX0luYyhjb25zdCBOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcyk7CiAKICNpZiAoVVNFX0hBTF9OQU5EX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogLyogTkFORCBjYWxsYmFjayByZWdpc3RlcmluZy91bnJlZ2lzdGVyaW5nICovCkBAIC0yNjUsOCArMjY1LDggQEAKICAgKiBAewogICAqLwogLyogTkFORCBTdGF0ZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUhBTF9OQU5EX1N0YXRlVHlwZURlZiBIQUxfTkFORF9HZXRTdGF0ZShOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kKTsKLXVpbnQzMl90ICAgICAgICAgICAgICBIQUxfTkFORF9SZWFkX1N0YXR1cyhOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kKTsKK0hBTF9OQU5EX1N0YXRlVHlwZURlZiBIQUxfTkFORF9HZXRTdGF0ZShjb25zdCBOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kKTsKK3VpbnQzMl90ICAgICAgICAgICAgICBIQUxfTkFORF9SZWFkX1N0YXR1cyhjb25zdCBOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kKTsKIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmM3h4X2hhbF9ub3IuaCBiL0luYy9zdG0zMmYzeHhfaGFsX25vci5oCmluZGV4IDU3MjI4MDcuLjdhZTlkNTYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfaGFsX25vci5oCisrKyBiL0luYy9zdG0zMmYzeHhfaGFsX25vci5oCkBAIC0yNCwxMCArMjQsMTAgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEZNQ19CQU5LMSkKIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpbmNsdWRlICJzdG0zMmYzeHhfbGxfZm1jLmgiCisjaWYgZGVmaW5lZChGTUNfQkFOSzEpCiAKIC8qKiBAYWRkdG9ncm91cCBTVE0zMkYzeHhfSEFMX0RyaXZlcgogICAqIEB7CkBAIC0xODQsNyArMTg0LDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfRGVJbml0KE5PUl9IYW5kbGVUeXBlRGVmICpobm9yKTsKIHZvaWQgSEFMX05PUl9Nc3BJbml0KE5PUl9IYW5kbGVUeXBlRGVmICpobm9yKTsKIHZvaWQgSEFMX05PUl9Nc3BEZUluaXQoTk9SX0hhbmRsZVR5cGVEZWYgKmhub3IpOwotdm9pZCBIQUxfTk9SX01zcFdhaXQoTk9SX0hhbmRsZVR5cGVEZWYgKmhub3IsIHVpbnQzMl90IFRpbWVvdXQpOwordm9pZCBIQUxfTk9SX01zcFdhaXQoY29uc3QgTk9SX0hhbmRsZVR5cGVEZWYgKmhub3IsIHVpbnQzMl90IFRpbWVvdXQpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTIzNCw4ICsyMzQsOCBAQAogICAqLwogCiAvKiBOT1IgU3RhdGUgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSEFMX05PUl9TdGF0ZVR5cGVEZWYgIEhBTF9OT1JfR2V0U3RhdGUoTk9SX0hhbmRsZVR5cGVEZWYgKmhub3IpOwotSEFMX05PUl9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfR2V0U3RhdHVzKE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCB1aW50MzJfdCBBZGRyZXNzLCB1aW50MzJfdCBUaW1lb3V0KTsKK0hBTF9OT1JfU3RhdGVUeXBlRGVmICBIQUxfTk9SX0dldFN0YXRlKGNvbnN0IE5PUl9IYW5kbGVUeXBlRGVmICpobm9yKTsKK0hBTF9OT1JfU3RhdHVzVHlwZURlZiBIQUxfTk9SX0dldFN0YXR1cyhjb25zdCBOT1JfSGFuZGxlVHlwZURlZiAqaG5vciwgdWludDMyX3QgQWRkcmVzcywgdWludDMyX3QgVGltZW91dCk7CiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfb3BhbXAuaCBiL0luYy9zdG0zMmYzeHhfaGFsX29wYW1wLmgKaW5kZXggMDJmNjYxOS4uMWMwZGVkMCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9oYWxfb3BhbXAuaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF9vcGFtcC5oCkBAIC01MjEsMyArNTIxLDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogU1RNMzJGM3h4X0hBTF9PUEFNUF9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX29wYW1wX2V4LmggYi9JbmMvc3RtMzJmM3h4X2hhbF9vcGFtcF9leC5oCmluZGV4IDczODRhNzguLmYzYjU1YjQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfaGFsX29wYW1wX2V4LmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfb3BhbXBfZXguaApAQCAtODcsMyArODcsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBTVE0zMkYzeHhfSEFMX09QQU1QX0VYX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfcGNkLmggYi9JbmMvc3RtMzJmM3h4X2hhbF9wY2QuaAppbmRleCBmMDM3ZmM3Li4zYTdhMTA1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9wY2QuaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF9wY2QuaApAQCAtMTAxLDggKzEwMSw4IEBACiAgIFBDRF9UeXBlRGVmICAgICAgICAgICAgICpJbnN0YW5jZTsgICAvKiE8IFJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAgICAgICAgICAgICAqLwogICBQQ0RfSW5pdFR5cGVEZWYgICAgICAgICBJbml0OyAgICAgICAgLyohPCBQQ0QgcmVxdWlyZWQgcGFyYW1ldGVycyAgICAgICAgICAgKi8KICAgX19JTyB1aW50OF90ICAgICAgICAgICAgVVNCX0FkZHJlc3M7IC8qITwgVVNCIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICovCi0gIFBDRF9FUFR5cGVEZWYgICAgICAgICAgIElOX2VwWzhdOyAgIC8qITwgSU4gZW5kcG9pbnQgcGFyYW1ldGVycyAgICAgICAgICAgICAqLwotICBQQ0RfRVBUeXBlRGVmICAgICAgICAgICBPVVRfZXBbOF07ICAvKiE8IE9VVCBlbmRwb2ludCBwYXJhbWV0ZXJzICAgICAgICAgICAgKi8KKyAgUENEX0VQVHlwZURlZiAgICAgICAgICAgSU5fZXBbOF07ICAgIC8qITwgSU4gZW5kcG9pbnQgcGFyYW1ldGVycyAgICAgICAgICAgICovCisgIFBDRF9FUFR5cGVEZWYgICAgICAgICAgIE9VVF9lcFs4XTsgICAvKiE8IE9VVCBlbmRwb2ludCBwYXJhbWV0ZXJzICAgICAgICAgICAqLwogICBIQUxfTG9ja1R5cGVEZWYgICAgICAgICBMb2NrOyAgICAgICAgLyohPCBQQ0QgcGVyaXBoZXJhbCBzdGF0dXMgICAgICAgICAgICAgKi8KICAgX19JTyBQQ0RfU3RhdGVUeXBlRGVmICAgU3RhdGU7ICAgICAgIC8qITwgUENEIGNvbW11bmljYXRpb24gc3RhdGUgICAgICAgICAgICovCiAgIF9fSU8gIHVpbnQzMl90ICAgICAgICAgIEVycm9yQ29kZTsgICAvKiE8IFBDRCBFcnJvciBjb2RlICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTgyLDIwICsxODIsMjAgQEAKICAgKiAgQGJyaWVmIG1hY3JvcyB0byBoYW5kbGUgaW50ZXJydXB0cyBhbmQgc3BlY2lmaWMgY2xvY2sgY29uZmlndXJhdGlvbnMKICAgKiBAewogICAqLworI2RlZmluZSBfX0hBTF9QQ0RfRU5BQkxFKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICAgICAodm9pZClVU0JfRW5hYmxlR2xvYmFsSW50ICgoX19IQU5ETEVfXyktPkluc3RhbmNlKQorI2RlZmluZSBfX0hBTF9QQ0RfRElTQUJMRShfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgICAgICAodm9pZClVU0JfRGlzYWJsZUdsb2JhbEludCAoKF9fSEFORExFX18pLT5JbnN0YW5jZSkKKworI2RlZmluZSBfX0hBTF9QQ0RfR0VUX0ZMQUcoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgXAorICAoKFVTQl9SZWFkSW50ZXJydXB0cygoX19IQU5ETEVfXyktPkluc3RhbmNlKSAmIChfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKQogCiAKLSNkZWZpbmUgX19IQUxfUENEX0VOQUJMRShfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZClVU0JfRW5hYmxlR2xvYmFsSW50ICgoX19IQU5ETEVfXyktPkluc3RhbmNlKQotI2RlZmluZSBfX0hBTF9QQ0RfRElTQUJMRShfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKVVTQl9EaXNhYmxlR2xvYmFsSW50ICgoX19IQU5ETEVfXyktPkluc3RhbmNlKQotI2RlZmluZSBfX0hBTF9QQ0RfR0VUX0ZMQUcoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgICAgICAgICAgICAgICgoVVNCX1JlYWRJbnRlcnJ1cHRzKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoX19JTlRFUlJVUFRfXykpID09IChfX0lOVEVSUlVQVF9fKSkKKyNkZWZpbmUgX19IQUxfUENEX0NMRUFSX0ZMQUcoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgICAgICAgICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNUUilcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJj0gKHVpbnQxNl90KSh+KF9fSU5URVJSVVBUX18pKSkKIAotI2RlZmluZSBfX0hBTF9QQ0RfQ0xFQVJfRkxBRyhfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICAgICAgICAgICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNUUilcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICY9ICh1aW50MTZfdCkofihfX0lOVEVSUlVQVF9fKSkpCi0KLSNkZWZpbmUgX19IQUxfVVNCX1dBS0VVUF9FWFRJX0VOQUJMRV9JVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRJLT5JTVIgfD0gVVNCX1dBS0VVUF9FWFRJX0xJTkUKLSNkZWZpbmUgX19IQUxfVVNCX1dBS0VVUF9FWFRJX0RJU0FCTEVfSVQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRJLT5JTVIgJj0gfihVU0JfV0FLRVVQX0VYVElfTElORSkKLSNkZWZpbmUgX19IQUxfVVNCX1dBS0VVUF9FWFRJX0dFVF9GTEFHKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRJLT5QUiAmIChVU0JfV0FLRVVQX0VYVElfTElORSkKLSNkZWZpbmUgX19IQUxfVVNCX1dBS0VVUF9FWFRJX0NMRUFSX0ZMQUcoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRJLT5QUiA9IFVTQl9XQUtFVVBfRVhUSV9MSU5FCisjZGVmaW5lIF9fSEFMX1VTQl9XQUtFVVBfRVhUSV9FTkFCTEVfSVQoKSAgICAgICAgICAgICAgICAgICAgICAgICBFWFRJLT5JTVIgfD0gVVNCX1dBS0VVUF9FWFRJX0xJTkUKKyNkZWZpbmUgX19IQUxfVVNCX1dBS0VVUF9FWFRJX0RJU0FCTEVfSVQoKSAgICAgICAgICAgICAgICAgICAgICAgIEVYVEktPklNUiAmPSB+KFVTQl9XQUtFVVBfRVhUSV9MSU5FKQorI2RlZmluZSBfX0hBTF9VU0JfV0FLRVVQX0VYVElfR0VUX0ZMQUcoKSAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUSS0+UFIgJiAoVVNCX1dBS0VVUF9FWFRJX0xJTkUpCisjZGVmaW5lIF9fSEFMX1VTQl9XQUtFVVBfRVhUSV9DTEVBUl9GTEFHKCkgICAgICAgICAgICAgICAgICAgICAgICBFWFRJLT5QUiA9IFVTQl9XQUtFVVBfRVhUSV9MSU5FCiAKICNkZWZpbmUgX19IQUxfVVNCX1dBS0VVUF9FWFRJX0VOQUJMRV9SSVNJTkdfRURHRSgpIFwKICAgZG8geyBcCkBAIC0yNjEsMTIgKzI2MSwxMCBAQAogICAqIEB9CiAgICovCiAKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfUmVnaXN0ZXJDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUENEX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1JlZ2lzdGVyQ2FsbGJhY2soUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIEhBTF9QQ0RfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUENEX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOwogCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1VuUmVnaXN0ZXJDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QQ0RfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1VuUmVnaXN0ZXJDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgSEFMX1BDRF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKIAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3RlckRhdGFPdXRTdGFnZUNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQQ0RfRGF0YU91dFN0YWdlQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CkBAIC0zMjYsMjQgKzMyNCwxNiBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9EZXZDb25uZWN0KFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRGV2RGlzY29ubmVjdChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1NldEFkZHJlc3MoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQ4X3QgYWRkcmVzcyk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0VQX09wZW4oUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQ4X3QgZXBfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBlcF9tcHMsIHVpbnQ4X3QgZXBfdHlwZSk7Ci0KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfT3BlbihQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyLCB1aW50MTZfdCBlcF9tcHMsIHVpbnQ4X3QgZXBfdHlwZSk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0VQX0Nsb3NlKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9SZWNlaXZlKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcEJ1ZiwgdWludDMyX3QgbGVuKTsKLQotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9UcmFuc21pdChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwQnVmLCB1aW50MzJfdCBsZW4pOwotCi0KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfUmVjZWl2ZShQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyLCB1aW50OF90ICpwQnVmLCB1aW50MzJfdCBsZW4pOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9UcmFuc21pdChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyLCB1aW50OF90ICpwQnVmLCB1aW50MzJfdCBsZW4pOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9TZXRTdGFsbChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfQ2xyU3RhbGwoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQ4X3QgZXBfYWRkcik7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0VQX0ZsdXNoKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9BYm9ydChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfQWN0aXZhdGVSZW1vdGVXYWtldXAoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9EZUFjdGl2YXRlUmVtb3RlV2FrZXVwKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKLQogdWludDMyX3QgICAgICAgICAgSEFMX1BDRF9FUF9HZXRSeENvdW50KFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIpOwogLyoqCiAgICogQH0KQEAgLTQyNywxNCArNDE3LDEyIEBACiAjZGVmaW5lIFVTQl9DTlRSWF9CTFNJWkUgICAgICAgICAgICAgICAgICAgICAgKDB4MVUgPDwgMTUpCiAKIC8qIFNldEVORFBPSU5UICovCi0jZGVmaW5lIFBDRF9TRVRfRU5EUE9JTlQoVVNCeCwgYkVwTnVtLCB3UmVnVmFsdWUpICAoKihfX0lPIHVpbnQxNl90ICopXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgmKFVTQngpLT5FUDBSICsgKChiRXBOdW0pICogMlUpKSA9ICh1aW50MTZfdCkod1JlZ1ZhbHVlKSkKKyNkZWZpbmUgUENEX1NFVF9FTkRQT0lOVChVU0J4LCBiRXBOdW0sIHdSZWdWYWx1ZSkgXAorICAoKihfX0lPIHVpbnQxNl90ICopKCYoVVNCeCktPkVQMFIgKyAoKGJFcE51bSkgKiAyVSkpID0gKHVpbnQxNl90KSh3UmVnVmFsdWUpKQogCiAvKiBHZXRFTkRQT0lOVCAqLwogI2RlZmluZSBQQ0RfR0VUX0VORFBPSU5UKFVTQngsIGJFcE51bSkgICAgICAgICAgICAgKCooX19JTyB1aW50MTZfdCAqKSgmKFVTQngpLT5FUDBSICsgKChiRXBOdW0pICogMlUpKSkKIAotLyogRU5EUE9JTlQgdHJhbnNmZXIgKi8KLSNkZWZpbmUgVVNCX0VQMFN0YXJ0WGZlciAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9FUFN0YXJ0WGZlcgogCiAvKioKICAgKiBAYnJpZWYgIHNldHMgdGhlIHR5cGUgaW4gdGhlIGVuZHBvaW50IHJlZ2lzdGVyKGJpdHMgRVBfVFlQRVsxOjBdKQpAQCAtNDQzLDggKzQzMSw5IEBACiAgICogQHBhcmFtICB3VHlwZSBFbmRwb2ludCBUeXBlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBQQ0RfU0VUX0VQVFlQRShVU0J4LCBiRXBOdW0sIHdUeXBlKSAoUENEX1NFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pLCAoKFBDRF9HRVRfRU5EUE9JTlQoKFVTQngpLCAoYkVwTnVtKSlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgVVNCX0VQX1RfTUFTSykgfCAod1R5cGUpIHwgVVNCX0VQX0NUUl9UWCB8IFVTQl9FUF9DVFJfUlgpKSkKKyNkZWZpbmUgUENEX1NFVF9FUFRZUEUoVVNCeCwgYkVwTnVtLCB3VHlwZSkgXAorICAoUENEX1NFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pLCBcCisgICAgICAgICAgICAgICAgICAgICgoUENEX0dFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pKSAmIFVTQl9FUF9UX01BU0spIHwgKHdUeXBlKSB8IFVTQl9FUF9DVFJfVFggfCBVU0JfRVBfQ1RSX1JYKSkpCiAKIAogLyoqCkBAIC00NjIsNyArNDUxLDcgQEAKICAgKiBAcGFyYW0gICBiRXBOdW0sIGJEaXIKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgUENEX0ZyZWVVc2VyQnVmZmVyKFVTQngsIGJFcE51bSwgYkRpcikgXAorI2RlZmluZSBQQ0RfRlJFRV9VU0VSX0JVRkZFUihVU0J4LCBiRXBOdW0sIGJEaXIpIFwKICAgZG8geyBcCiAgICAgaWYgKChiRGlyKSA9PSAwVSkgXAogICAgIHsgXApAQCAtNzM0LDExICs3MjMsMTMgQEAKICAgKi8KICNkZWZpbmUgUENEX0dFVF9FUF9BRERSRVNTKFVTQngsIGJFcE51bSkgKCh1aW50OF90KShQQ0RfR0VUX0VORFBPSU5UKChVU0J4KSwgKGJFcE51bSkpICYgVVNCX0VQQUREUl9GSUVMRCkpCiAKLSNkZWZpbmUgUENEX0VQX1RYX0NOVChVU0J4LCBiRXBOdW0pICgodWludDE2X3QgKikoKCgodWludDMyX3QpKFVTQngpLT5CVEFCTEVcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICsgMlUpICogUE1BX0FDQ0VTUykgKyAoKHVpbnQzMl90KShVU0J4KSArIDB4NDAwVSkpKQorI2RlZmluZSBQQ0RfRVBfVFhfQ05UKFVTQngsIGJFcE51bSkgXAorICAoKHVpbnQxNl90ICopKCgoKHVpbnQzMl90KShVU0J4KS0+QlRBQkxFICsgXAorICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoYkVwTnVtKSAqIDhVKSArIDJVKSAqIFBNQV9BQ0NFU1MpICsgKCh1aW50MzJfdCkoVVNCeCkgKyAweDQwMFUpKSkKIAotI2RlZmluZSBQQ0RfRVBfUlhfQ05UKFVTQngsIGJFcE51bSkgKCh1aW50MTZfdCAqKSgoKCh1aW50MzJfdCkoVVNCeCktPkJUQUJMRVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICgodWludDMyX3QpKGJFcE51bSkgKiA4VSkgKyA2VSkgKiBQTUFfQUNDRVNTKSArICgodWludDMyX3QpKFVTQngpICsgMHg0MDBVKSkpCisjZGVmaW5lIFBDRF9FUF9SWF9DTlQoVVNCeCwgYkVwTnVtKSBcCisgICgodWludDE2X3QgKikoKCgodWludDMyX3QpKFVTQngpLT5CVEFCTEUgKyBcCisgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICsgNlUpICogUE1BX0FDQ0VTUykgKyAoKHVpbnQzMl90KShVU0J4KSArIDB4NDAwVSkpKQogCiAKIC8qKgpAQCAtNzkxLDcgKzc4Miw3IEBACiAgICAgeyBcCiAgICAgICAod05CbG9ja3MpLS07IFwKICAgICB9IFwKLSAgICAqKHBkd1JlZykgPSAodWludDE2X3QpKCgod05CbG9ja3MpIDw8IDEwKSB8IFVTQl9DTlRSWF9CTFNJWkUpOyBcCisgICAgKihwZHdSZWcpIHw9ICh1aW50MTZfdCkoKCh3TkJsb2NrcykgPDwgMTApIHwgVVNCX0NOVFJYX0JMU0laRSk7IFwKICAgfSB3aGlsZSgwKSAvKiBQQ0RfQ0FMQ19CTEszMiAqLwogCiAjZGVmaW5lIFBDRF9DQUxDX0JMSzIocGR3UmVnLCB3Q291bnQsIHdOQmxvY2tzKSBcCkBAIC04MDEsMjQgKzc5MiwyOSBAQAogICAgIHsgXAogICAgICAgKHdOQmxvY2tzKSsrOyBcCiAgICAgfSBcCi0gICAgKihwZHdSZWcpID0gKHVpbnQxNl90KSgod05CbG9ja3MpIDw8IDEwKTsgXAorICAgICoocGR3UmVnKSB8PSAodWludDE2X3QpKCh3TkJsb2NrcykgPDwgMTApOyBcCiAgIH0gd2hpbGUoMCkgLyogUENEX0NBTENfQkxLMiAqLwogCiAjZGVmaW5lIFBDRF9TRVRfRVBfQ05UX1JYX1JFRyhwZHdSZWcsIHdDb3VudCkgXAogICBkbyB7IFwKICAgICB1aW50MzJfdCB3TkJsb2NrczsgXAotICAgIGlmICgod0NvdW50KSA9PSAwVSkgXAorICAgIFwKKyAgICAqKHBkd1JlZykgJj0gMHgzRkZVOyBcCisgICAgXAorICAgIGlmICgod0NvdW50KSA+IDYyVSkgXAogICAgIHsgXAotICAgICAgKihwZHdSZWcpICY9ICh1aW50MTZfdCl+VVNCX0NOVFJYX05CTEtfTVNLOyBcCi0gICAgICAqKHBkd1JlZykgfD0gVVNCX0NOVFJYX0JMU0laRTsgXAotICAgIH0gXAotICAgIGVsc2UgaWYoKHdDb3VudCkgPD0gNjJVKSBcCi0gICAgeyBcCi0gICAgICBQQ0RfQ0FMQ19CTEsyKChwZHdSZWcpLCAod0NvdW50KSwgd05CbG9ja3MpOyBcCisgICAgICBQQ0RfQ0FMQ19CTEszMigocGR3UmVnKSwgKHdDb3VudCksIHdOQmxvY2tzKTsgXAogICAgIH0gXAogICAgIGVsc2UgXAogICAgIHsgXAotICAgICAgUENEX0NBTENfQkxLMzIoKHBkd1JlZyksICh3Q291bnQpLCB3TkJsb2Nrcyk7IFwKKyAgICAgIGlmICgod0NvdW50KSA9PSAwVSkgXAorICAgICAgeyBcCisgICAgICAgICoocGR3UmVnKSB8PSBVU0JfQ05UUlhfQkxTSVpFOyBcCisgICAgICB9IFwKKyAgICAgIGVsc2UgXAorICAgICAgeyBcCisgICAgICAgIFBDRF9DQUxDX0JMSzIoKHBkd1JlZyksICh3Q291bnQpLCB3TkJsb2Nrcyk7IFwKKyAgICAgIH0gXAogICAgIH0gXAogICB9IHdoaWxlKDApIC8qIFBDRF9TRVRfRVBfQ05UX1JYX1JFRyAqLwogCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmM3h4X2hhbF9wY2RfZXguaCBiL0luYy9zdG0zMmYzeHhfaGFsX3BjZF9leC5oCmluZGV4IDFiNDQ5ZmQuLjRhMTQ5NzcgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfaGFsX3BjZF9leC5oCisrKyBiL0luYy9zdG0zMmYzeHhfaGFsX3BjZF9leC5oCkBAIC0yMiw3ICsyMiw3IEBACiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7Ci0jZW5kaWYKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2luY2x1ZGUgInN0bTMyZjN4eF9oYWxfZGVmLmgiCkBAIC03NSw3ICs3NSw3IEBACiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQotI2VuZGlmCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KIAogCiAjZW5kaWYgLyogU1RNMzJGM3h4X0hBTF9QQ0RfRVhfSCAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfcmNjLmggYi9JbmMvc3RtMzJmM3h4X2hhbF9yY2MuaAppbmRleCA0MjIxMzdkLi5mMDgzNTg3IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9yY2MuaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF9yY2MuaApAQCAtOSwxMCArOSw5IEBACiAgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbgorICAqIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KICAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KLSAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIApAQCAtMTczNCwzICsxNzMzLDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYzeHhfSEFMX1JDQ19IICovCisKKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfcmNjX2V4LmggYi9JbmMvc3RtMzJmM3h4X2hhbF9yY2NfZXguaAppbmRleCAyMWJhZTBiLi5jYTU2NTI3IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9yY2NfZXguaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF9yY2NfZXguaApAQCAtOSwxMCArOSw5IEBACiAgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbgorICAqIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KICAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KLSAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIApAQCAtMzgyMSwzICszODIwLDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYzeHhfSEFMX1JDQ19FWF9IICovCisKKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfcnRjLmggYi9JbmMvc3RtMzJmM3h4X2hhbF9ydGMuaAppbmRleCA3ZDI1MzA0Li43NTkxODk0IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9ydGMuaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF9ydGMuaApAQCAtMTcsMjUgKzE3LDI3IEBACiAgICovCiAKIC8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jaWZuZGVmIF9fU1RNMzJGM3h4X0hBTF9SVENfSAotI2RlZmluZSBfX1NUTTMyRjN4eF9IQUxfUlRDX0gKKyNpZm5kZWYgU1RNMzJGM3h4X0hBTF9SVENfSAorI2RlZmluZSBTVE0zMkYzeHhfSEFMX1JUQ19ICiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogI2luY2x1ZGUgInN0bTMyZjN4eF9oYWxfZGVmLmgiCiAKIC8qKiBAYWRkdG9ncm91cCBTVE0zMkYzeHhfSEFMX0RyaXZlcgogICAqIEB7CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUlRDIFJUQworLyoqIEBhZGR0b2dyb3VwIFJUQwogICAqIEB7CiAgICovCiAKIC8qIEV4cG9ydGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIC8qKiBAZGVmZ3JvdXAgUlRDX0V4cG9ydGVkX1R5cGVzIFJUQyBFeHBvcnRlZCBUeXBlcwogICAqIEB7CiAgICovCkBAIC01MCw3ICs1Miw2IEBACiAgIEhBTF9SVENfU1RBVEVfQlVTWSAgICAgICAgICAgICAgPSAweDAyVSwgIC8qITwgUlRDIHByb2Nlc3MgaXMgb25nb2luZyAgICAgICAgICAgICAgKi8KICAgSEFMX1JUQ19TVEFURV9USU1FT1VUICAgICAgICAgICA9IDB4MDNVLCAgLyohPCBSVEMgdGltZW91dCBzdGF0ZSAgICAgICAgICAgICAgICAgICAqLwogICBIQUxfUlRDX1NUQVRFX0VSUk9SICAgICAgICAgICAgID0gMHgwNFUgICAvKiE8IFJUQyBlcnJvciBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICovCi0KIH0gSEFMX1JUQ1N0YXRlVHlwZURlZjsKIAogLyoqCkBAIC02NSwxMCArNjYsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHg3RiAqLwogCiAgIHVpbnQzMl90IFN5bmNoUHJlZGl2OyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFJUQyBTeW5jaHJvbm91cyBQcmVkaXZpZGVyIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweDdGRkYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAwMCBhbmQgTWF4X0RhdGEgPSAweDdGRkYgKi8KIAogICB1aW50MzJfdCBPdXRQdXQ7ICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHdoaWNoIHNpZ25hbCB3aWxsIGJlIHJvdXRlZCB0byB0aGUgUlRDIG91dHB1dC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgUlRDRXhfT3V0cHV0X3NlbGVjdGlvbl9EZWZpbml0aW9ucyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBSVENfT3V0cHV0X3NlbGVjdGlvbl9EZWZpbml0aW9ucyAqLwogCiAgIHVpbnQzMl90IE91dFB1dFBvbGFyaXR5OyAgLyohPCBTcGVjaWZpZXMgdGhlIHBvbGFyaXR5IG9mIHRoZSBvdXRwdXQgc2lnbmFsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBSVENfT3V0cHV0X1BvbGFyaXR5X0RlZmluaXRpb25zICovCkBAIC04Myw3ICs4NCw3IEBACiB0eXBlZGVmIHN0cnVjdAogewogICB1aW50OF90IEhvdXJzOyAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBSVEMgVGltZSBIb3VyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSAxMiBpZiB0aGUgUlRDX0hvdXJGb3JtYXRfMTIgaXMgc2VsZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDEyIGlmIHRoZSBSVENfSG91ckZvcm1hdF8xMiBpcyBzZWxlY3RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSAyMyBpZiB0aGUgUlRDX0hvdXJGb3JtYXRfMjQgaXMgc2VsZWN0ZWQgKi8KIAogICB1aW50OF90IE1pbnV0ZXM7ICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBSVEMgVGltZSBNaW51dGVzLgpAQCAtOTUsMTIgKzk2LDEyIEBACiAgIHVpbnQ4X3QgVGltZUZvcm1hdDsgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFJUQyBBTS9QTSBUaW1lLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBSVENfQU1fUE1fRGVmaW5pdGlvbnMgKi8KIAotICB1aW50MzJfdCBTdWJTZWNvbmRzOyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFJUQ19TU1IgUlRDIFN1YiBTZWNvbmQgcmVnaXN0ZXIgY29udGVudC4KKyAgdWludDMyX3QgU3ViU2Vjb25kczsgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgUlRDX1NTUiBSVEMgU3ViIFNlY29uZCByZWdpc3RlciBjb250ZW50LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY29ycmVzcG9uZHMgdG8gYSB0aW1lIHVuaXQgcmFuZ2UgYmV0d2VlbiBbMC0xXSBTZWNvbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggWzEgU2VjIC8gU2Vjb25kRnJhY3Rpb24gKzFdIGdyYW51bGFyaXR5ICovCiAKICAgdWludDMyX3QgU2Vjb25kRnJhY3Rpb247ICAvKiE8IFNwZWNpZmllcyB0aGUgcmFuZ2Ugb3IgZ3JhbnVsYXJpdHkgb2YgU3ViIFNlY29uZCByZWdpc3RlciBjb250ZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIFN5bmNocm9ub3VzIHByZS1zY2FsZXIgZmFjdG9yIHZhbHVlIChQUkVESVZfUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdG8gU3luY2hyb25vdXMgcHJlc2NhbGVyIGZhY3RvciB2YWx1ZSAoUFJFRElWX1MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjb3JyZXNwb25kcyB0byBhIHRpbWUgdW5pdCByYW5nZSBiZXR3ZWVuIFswLTFdIFNlY29uZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBbMSBTZWMgLyBTZWNvbmRGcmFjdGlvbiArMV0gZ3JhbnVsYXJpdHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIHdpbGwgYmUgdXNlZCBvbmx5IGJ5IEhBTF9SVENfR2V0VGltZSBmdW5jdGlvbiAqLwpAQCAtMTYyLDM4ICsxNjMsMzggQEAKIHR5cGVkZWYgc3RydWN0IF9fUlRDX0hhbmRsZVR5cGVEZWYKICNlbHNlCiB0eXBlZGVmIHN0cnVjdAotI2VuZGlmIC8qIChVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MpICovCisjZW5kaWYgLyogVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiB7Ci0gIFJUQ19UeXBlRGVmICAgICAgICAgICAgICAgKkluc3RhbmNlOyAgLyohPCBSZWdpc3RlciBiYXNlIGFkZHJlc3MgICAgKi8KKyAgUlRDX1R5cGVEZWYgICAgICAgICAgICAgICAgICpJbnN0YW5jZTsgIC8qITwgUmVnaXN0ZXIgYmFzZSBhZGRyZXNzICAgICovCiAKLSAgUlRDX0luaXRUeXBlRGVmICAgICAgICAgICBJbml0OyAgICAgICAvKiE8IFJUQyByZXF1aXJlZCBwYXJhbWV0ZXJzICAqLworICBSVENfSW5pdFR5cGVEZWYgICAgICAgICAgICAgSW5pdDsgICAgICAgLyohPCBSVEMgcmVxdWlyZWQgcGFyYW1ldGVycyAgKi8KIAotICBIQUxfTG9ja1R5cGVEZWYgICAgICAgICAgIExvY2s7ICAgICAgIC8qITwgUlRDIGxvY2tpbmcgb2JqZWN0ICAgICAgICovCisgIEhBTF9Mb2NrVHlwZURlZiAgICAgICAgICAgICBMb2NrOyAgICAgICAvKiE8IFJUQyBsb2NraW5nIG9iamVjdCAgICAgICAqLwogCi0gIF9fSU8gSEFMX1JUQ1N0YXRlVHlwZURlZiAgU3RhdGU7ICAgICAgLyohPCBUaW1lIGNvbW11bmljYXRpb24gc3RhdGUgKi8KKyAgX19JTyBIQUxfUlRDU3RhdGVUeXBlRGVmICAgIFN0YXRlOyAgICAgIC8qITwgVGltZSBjb21tdW5pY2F0aW9uIHN0YXRlICovCiAKICNpZiAoVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gIHZvaWQgICgqIEFsYXJtQUV2ZW50Q2FsbGJhY2spICAgICAgKCBzdHJ1Y3QgX19SVENfSGFuZGxlVHlwZURlZiAqIGhydGMpOyAgLyohPCBSVEMgQWxhcm0gQSBFdmVudCBjYWxsYmFjayAgICAgICAgICovCisgIHZvaWQgKCogQWxhcm1BRXZlbnRDYWxsYmFjaykgICAgICAoc3RydWN0IF9fUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOyAgLyohPCBSVEMgQWxhcm0gQSBFdmVudCBjYWxsYmFjayAgICAgICAgICovCiAKLSAgdm9pZCAgKCogQWxhcm1CRXZlbnRDYWxsYmFjaykgICAgICAoIHN0cnVjdCBfX1JUQ19IYW5kbGVUeXBlRGVmICogaHJ0Yyk7ICAvKiE8IFJUQyBBbGFybSBCIEV2ZW50IGNhbGxiYWNrICAgICAgICAgKi8KKyAgdm9pZCAoKiBBbGFybUJFdmVudENhbGxiYWNrKSAgICAgIChzdHJ1Y3QgX19SVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7ICAvKiE8IFJUQyBBbGFybSBCIEV2ZW50IGNhbGxiYWNrICAgICAgICAgKi8KIAotICB2b2lkICAoKiBUaW1lU3RhbXBFdmVudENhbGxiYWNrKSAgICggc3RydWN0IF9fUlRDX0hhbmRsZVR5cGVEZWYgKiBocnRjKTsgIC8qITwgUlRDIFRpbWVTdGFtcCBFdmVudCBjYWxsYmFjayAgICAgICAqLworICB2b2lkICgqIFRpbWVTdGFtcEV2ZW50Q2FsbGJhY2spICAgKHN0cnVjdCBfX1JUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsgIC8qITwgUlRDIFRpbWVzdGFtcCBFdmVudCBjYWxsYmFjayAgICAgICAqLwogCi0gIHZvaWQgICgqIFdha2VVcFRpbWVyRXZlbnRDYWxsYmFjaykgKCBzdHJ1Y3QgX19SVENfSGFuZGxlVHlwZURlZiAqIGhydGMpOyAgLyohPCBSVEMgV2FrZVVwVGltZXIgRXZlbnQgY2FsbGJhY2sgICAgICovCisgIHZvaWQgKCogV2FrZVVwVGltZXJFdmVudENhbGxiYWNrKSAoc3RydWN0IF9fUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOyAgLyohPCBSVEMgV2FrZVVwVGltZXIgRXZlbnQgY2FsbGJhY2sgICAgICovCiAKLSAgdm9pZCAgKCogVGFtcGVyMUV2ZW50Q2FsbGJhY2spICAgICAoIHN0cnVjdCBfX1JUQ19IYW5kbGVUeXBlRGVmICogaHJ0Yyk7ICAvKiE8IFJUQyBUYW1wZXIgMSBFdmVudCBjYWxsYmFjayAgICAgICAgKi8KKyAgdm9pZCAoKiBUYW1wZXIxRXZlbnRDYWxsYmFjaykgICAgIChzdHJ1Y3QgX19SVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7ICAvKiE8IFJUQyBUYW1wZXIgMSBFdmVudCBjYWxsYmFjayAgICAgICAgKi8KIAotICB2b2lkICAoKiBUYW1wZXIyRXZlbnRDYWxsYmFjaykgICAgICggc3RydWN0IF9fUlRDX0hhbmRsZVR5cGVEZWYgKiBocnRjKTsgIC8qITwgUlRDIFRhbXBlciAyIEV2ZW50IGNhbGxiYWNrICAgICAgICAqLworICB2b2lkICgqIFRhbXBlcjJFdmVudENhbGxiYWNrKSAgICAgKHN0cnVjdCBfX1JUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsgIC8qITwgUlRDIFRhbXBlciAyIEV2ZW50IGNhbGxiYWNrICAgICAgICAqLwogCiAjaWYgZGVmaW5lZChSVENfVEFNUEVSM19TVVBQT1JUKQotICB2b2lkICAoKiBUYW1wZXIzRXZlbnRDYWxsYmFjaykgICAgICggc3RydWN0IF9fUlRDX0hhbmRsZVR5cGVEZWYgKiBocnRjKTsgIC8qITwgUlRDIFRhbXBlciAzIEV2ZW50IGNhbGxiYWNrICAgICAgICAqLworICB2b2lkICgqIFRhbXBlcjNFdmVudENhbGxiYWNrKSAgICAgKHN0cnVjdCBfX1JUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsgIC8qITwgUlRDIFRhbXBlciAzIEV2ZW50IGNhbGxiYWNrICAgICAgICAqLwogI2VuZGlmIC8qIFJUQ19UQU1QRVIzX1NVUFBPUlQgKi8KIAotICB2b2lkICAoKiBNc3BJbml0Q2FsbGJhY2spICAgICAgICAgICggc3RydWN0IF9fUlRDX0hhbmRsZVR5cGVEZWYgKiBocnRjKTsgIC8qITwgUlRDIE1zcCBJbml0IGNhbGxiYWNrICAgICAgICAgICAgICAqLworICB2b2lkICgqIE1zcEluaXRDYWxsYmFjaykgICAgICAgICAgKHN0cnVjdCBfX1JUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsgIC8qITwgUlRDIE1zcCBJbml0IGNhbGxiYWNrICAgICAgICAgICAgICAqLwogCi0gIHZvaWQgICgqIE1zcERlSW5pdENhbGxiYWNrKSAgICAgICAgKCBzdHJ1Y3QgX19SVENfSGFuZGxlVHlwZURlZiAqIGhydGMpOyAgLyohPCBSVEMgTXNwIERlSW5pdCBjYWxsYmFjayAgICAgICAgICAgICovCisgIHZvaWQgKCogTXNwRGVJbml0Q2FsbGJhY2spICAgICAgICAoc3RydWN0IF9fUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOyAgLyohPCBSVEMgTXNwIERlSW5pdCBjYWxsYmFjayAgICAgICAgICAgICovCiAKLSNlbmRpZiAvKiAoVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTKSAqLworI2VuZGlmIC8qIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCiB9IFJUQ19IYW5kbGVUeXBlRGVmOwogCkBAIC0yMDMsMjMgKzIwNCwyMyBAQAogICAqLwogdHlwZWRlZiBlbnVtCiB7Ci0gIEhBTF9SVENfQUxBUk1fQV9FVkVOVF9DQl9JRCAgICAgICAgICAgPSAweDAwdSwgICAgLyohPCBSVEMgQWxhcm0gQSBFdmVudCBDYWxsYmFjayBJRCAgICAgICAqLwotICBIQUxfUlRDX0FMQVJNX0JfRVZFTlRfQ0JfSUQgICAgICAgICAgID0gMHgwMXUsICAgIC8qITwgUlRDIEFsYXJtIEIgRXZlbnQgQ2FsbGJhY2sgSUQgICAgICAgKi8KLSAgSEFMX1JUQ19USU1FU1RBTVBfRVZFTlRfQ0JfSUQgICAgICAgICA9IDB4MDJ1LCAgICAvKiE8IFJUQyBUaW1lU3RhbXAgRXZlbnQgQ2FsbGJhY2sgSUQgICAgICovCi0gIEhBTF9SVENfV0FLRVVQVElNRVJfRVZFTlRfQ0JfSUQgICAgICAgPSAweDAzdSwgICAgLyohPCBSVEMgV2FrZS1VcCBUaW1lciBFdmVudCBDYWxsYmFjayBJRCAqLwotICBIQUxfUlRDX1RBTVBFUjFfRVZFTlRfQ0JfSUQgICAgICAgICAgID0gMHgwNHUsICAgIC8qITwgUlRDIFRhbXBlciAxIENhbGxiYWNrIElEICAgICAgICAgICAgKi8KLSAgSEFMX1JUQ19UQU1QRVIyX0VWRU5UX0NCX0lEICAgICAgICAgICA9IDB4MDV1LCAgICAvKiE8IFJUQyBUYW1wZXIgMiBDYWxsYmFjayBJRCAgICAgICAgICAgICovCisgIEhBTF9SVENfQUxBUk1fQV9FVkVOVF9DQl9JRCAgICAgICAgICAgPSAweDAwVSwgICAgLyohPCBSVEMgQWxhcm0gQSBFdmVudCBDYWxsYmFjayBJRCAgICAgICAqLworICBIQUxfUlRDX0FMQVJNX0JfRVZFTlRfQ0JfSUQgICAgICAgICAgID0gMHgwMVUsICAgIC8qITwgUlRDIEFsYXJtIEIgRXZlbnQgQ2FsbGJhY2sgSUQgICAgICAgKi8KKyAgSEFMX1JUQ19USU1FU1RBTVBfRVZFTlRfQ0JfSUQgICAgICAgICA9IDB4MDJVLCAgICAvKiE8IFJUQyBUaW1lc3RhbXAgRXZlbnQgQ2FsbGJhY2sgSUQgICAgICovCisgIEhBTF9SVENfV0FLRVVQVElNRVJfRVZFTlRfQ0JfSUQgICAgICAgPSAweDAzVSwgICAgLyohPCBSVEMgV2FrZXVwIFRpbWVyIEV2ZW50IENhbGxiYWNrIElEICAqLworICBIQUxfUlRDX1RBTVBFUjFfRVZFTlRfQ0JfSUQgICAgICAgICAgID0gMHgwNFUsICAgIC8qITwgUlRDIFRhbXBlciAxIENhbGxiYWNrIElEICAgICAgICAgICAgKi8KKyAgSEFMX1JUQ19UQU1QRVIyX0VWRU5UX0NCX0lEICAgICAgICAgICA9IDB4MDVVLCAgICAvKiE8IFJUQyBUYW1wZXIgMiBDYWxsYmFjayBJRCAgICAgICAgICAgICovCiAjaWYgZGVmaW5lZChSVENfVEFNUEVSM19TVVBQT1JUKQotICBIQUxfUlRDX1RBTVBFUjNfRVZFTlRfQ0JfSUQgICAgICAgICAgID0gMHgwNnUsICAgIC8qITwgUlRDIFRhbXBlciAzIENhbGxiYWNrIElEICAgICAgICAgICAgKi8KKyAgSEFMX1JUQ19UQU1QRVIzX0VWRU5UX0NCX0lEICAgICAgICAgICA9IDB4MDZVLCAgICAvKiE8IFJUQyBUYW1wZXIgMyBDYWxsYmFjayBJRCAgICAgICAgICAgICovCiAjZW5kaWYgLyogUlRDX1RBTVBFUjNfU1VQUE9SVCAqLwotICBIQUxfUlRDX01TUElOSVRfQ0JfSUQgICAgICAgICAgICAgICAgID0gMHgwRXUsICAgIC8qITwgUlRDIE1zcCBJbml0IGNhbGxiYWNrIElEICAgICAgICAgICAgKi8KLSAgSEFMX1JUQ19NU1BERUlOSVRfQ0JfSUQgICAgICAgICAgICAgICA9IDB4MEZ1ICAgICAvKiE8IFJUQyBNc3AgRGVJbml0IGNhbGxiYWNrIElEICAgICAgICAgICovCi19SEFMX1JUQ19DYWxsYmFja0lEVHlwZURlZjsKKyAgSEFMX1JUQ19NU1BJTklUX0NCX0lEICAgICAgICAgICAgICAgICA9IDB4MEVVLCAgICAvKiE8IFJUQyBNc3AgSW5pdCBjYWxsYmFjayBJRCAgICAgICAgICAgICovCisgIEhBTF9SVENfTVNQREVJTklUX0NCX0lEICAgICAgICAgICAgICAgPSAweDBGVSAgICAgLyohPCBSVEMgTXNwIERlSW5pdCBjYWxsYmFjayBJRCAgICAgICAgICAqLworfSBIQUxfUlRDX0NhbGxiYWNrSURUeXBlRGVmOwogCiAvKioKICAgKiBAYnJpZWYgIEhBTCBSVEMgQ2FsbGJhY2sgcG9pbnRlciBkZWZpbml0aW9uCiAgICovCi10eXBlZGVmICB2b2lkICgqcFJUQ19DYWxsYmFja1R5cGVEZWYpKFJUQ19IYW5kbGVUeXBlRGVmICogaHJ0Yyk7IC8qITwgcG9pbnRlciB0byBhbiBSVEMgY2FsbGJhY2sgZnVuY3Rpb24gKi8KK3R5cGVkZWYgIHZvaWQgKCpwUlRDX0NhbGxiYWNrVHlwZURlZikoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOyAgLyohPCBwb2ludGVyIHRvIGFuIFJUQyBjYWxsYmFjayBmdW5jdGlvbiAqLwogI2VuZGlmIC8qIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCiAvKioKQEAgLTIyNyw2ICsyMjgsNyBAQAogICAqLwogCiAvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKiogQGRlZmdyb3VwIFJUQ19FeHBvcnRlZF9Db25zdGFudHMgUlRDIEV4cG9ydGVkIENvbnN0YW50cwogICAqIEB7CiAgICovCkBAIC0yNDAsNiArMjQyLDE3IEBACiAgICogQH0KICAgKi8KIAorLyoqIEBkZWZncm91cCBSVENfT3V0cHV0X3NlbGVjdGlvbl9EZWZpbml0aW9ucyBSVEMgT3V0cHV0IFNlbGVjdGlvbiBEZWZpbml0aW9ucworICAqIEB7CisgICovCisjZGVmaW5lIFJUQ19PVVRQVVRfRElTQUJMRSAgICAgICAgICAgICAweDAwMDAwMDAwVQorI2RlZmluZSBSVENfT1VUUFVUX0FMQVJNQSAgICAgICAgICAgICAgUlRDX0NSX09TRUxfMAorI2RlZmluZSBSVENfT1VUUFVUX0FMQVJNQiAgICAgICAgICAgICAgUlRDX0NSX09TRUxfMQorI2RlZmluZSBSVENfT1VUUFVUX1dBS0VVUCAgICAgICAgICAgICAgUlRDX0NSX09TRUwKKy8qKgorICAqIEB9CisgICovCisKIC8qKiBAZGVmZ3JvdXAgUlRDX091dHB1dF9Qb2xhcml0eV9EZWZpbml0aW9ucyBSVEMgT3V0cHV0IFBvbGFyaXR5IERlZmluaXRpb25zCiAgICogQHsKICAgKi8KQEAgLTI2Miw0MyArMjc1LDQyIEBACiAgICogQHsKICAgKi8KICNkZWZpbmUgUlRDX0hPVVJGT1JNQVQxMl9BTSAgICAgICAgICAgICgodWludDhfdCkweDAwKQotI2RlZmluZSBSVENfSE9VUkZPUk1BVDEyX1BNICAgICAgICAgICAgKCh1aW50OF90KTB4NDApCisjZGVmaW5lIFJUQ19IT1VSRk9STUFUMTJfUE0gICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkKIC8qKgogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUlRDX0RheUxpZ2h0U2F2aW5nX0RlZmluaXRpb25zIFJUQyBEYXlMaWdodFNhdmluZyBEZWZpbml0aW9ucworLyoqIEBkZWZncm91cCBSVENfRGF5TGlnaHRTYXZpbmdfRGVmaW5pdGlvbnMgUlRDIERheUxpZ2h0IFNhdmluZyBEZWZpbml0aW9ucwogICAqIEB7CiAgICovCi0jZGVmaW5lIFJUQ19EQVlMSUdIVFNBVklOR19OT05FICAgICAgICAweDAwMDAwMDAwVQogI2RlZmluZSBSVENfREFZTElHSFRTQVZJTkdfU1VCMUggICAgICAgUlRDX0NSX1NVQjFICiAjZGVmaW5lIFJUQ19EQVlMSUdIVFNBVklOR19BREQxSCAgICAgICBSVENfQ1JfQUREMUgKKyNkZWZpbmUgUlRDX0RBWUxJR0hUU0FWSU5HX05PTkUgICAgICAgIDB4MDAwMDAwMDBVCiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJUQ19TdG9yZU9wZXJhdGlvbl9EZWZpbml0aW9ucyBSVEMgU3RvcmVPcGVyYXRpb24gRGVmaW5pdGlvbnMKKy8qKiBAZGVmZ3JvdXAgUlRDX1N0b3JlT3BlcmF0aW9uX0RlZmluaXRpb25zIFJUQyBTdG9yZSBPcGVyYXRpb24gRGVmaW5pdGlvbnMKICAgKiBAewogICAqLwogI2RlZmluZSBSVENfU1RPUkVPUEVSQVRJT05fUkVTRVQgICAgICAgIDB4MDAwMDAwMDBVCi0jZGVmaW5lIFJUQ19TVE9SRU9QRVJBVElPTl9TRVQgICAgICAgICAgUlRDX0NSX0JDSworI2RlZmluZSBSVENfU1RPUkVPUEVSQVRJT05fU0VUICAgICAgICAgIFJUQ19DUl9CS1AKIC8qKgogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUlRDX0lucHV0X3BhcmFtZXRlcl9mb3JtYXRfZGVmaW5pdGlvbnMgUlRDIElucHV0IHBhcmFtZXRlciBmb3JtYXQgZGVmaW5pdGlvbnMKKy8qKiBAZGVmZ3JvdXAgUlRDX0lucHV0X3BhcmFtZXRlcl9mb3JtYXRfZGVmaW5pdGlvbnMgUlRDIElucHV0IFBhcmFtZXRlciBGb3JtYXQgRGVmaW5pdGlvbnMKICAgKiBAewogICAqLwotI2RlZmluZSBSVENfRk9STUFUX0JJTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMFUKLSNkZWZpbmUgUlRDX0ZPUk1BVF9CQ0QgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDFVCisjZGVmaW5lIFJUQ19GT1JNQVRfQklOICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUKKyNkZWZpbmUgUlRDX0ZPUk1BVF9CQ0QgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVQogLyoqCiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBSVENfTW9udGhfRGF0ZV9EZWZpbml0aW9ucyBSVEMgTW9udGggRGF0ZSBEZWZpbml0aW9ucworLyoqIEBkZWZncm91cCBSVENfTW9udGhfRGF0ZV9EZWZpbml0aW9ucyBSVEMgTW9udGggRGF0ZSBEZWZpbml0aW9ucyAoaW4gQkNEIGZvcm1hdCkKICAgKiBAewogICAqLwotLyogQ29kZWQgaW4gQkNEIGZvcm1hdCAqLwogI2RlZmluZSBSVENfTU9OVEhfSkFOVUFSWSAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpCiAjZGVmaW5lIFJUQ19NT05USF9GRUJSVUFSWSAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMikKICNkZWZpbmUgUlRDX01PTlRIX01BUkNIICAgICAgICAgICAgICAgICgodWludDhfdCkweDAzKQpAQCAtMzI5LDcgKzM0MSw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBSVENfQWxhcm1EYXRlV2Vla0RheV9EZWZpbml0aW9ucyBSVEMgQWxhcm1EYXRlV2Vla0RheSBEZWZpbml0aW9ucworLyoqIEBkZWZncm91cCBSVENfQWxhcm1EYXRlV2Vla0RheV9EZWZpbml0aW9ucyBSVEMgQWxhcm0gRGF0ZSBXZWVrRGF5IERlZmluaXRpb25zCiAgICogQHsKICAgKi8KICNkZWZpbmUgUlRDX0FMQVJNREFURVdFRUtEQVlTRUxfREFURSAgICAgIDB4MDAwMDAwMDBVCkBAIC0zMzgsNyArMzUwLDcgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJUQ19BbGFybU1hc2tfRGVmaW5pdGlvbnMgUlRDIEFsYXJtTWFzayBEZWZpbml0aW9ucworLyoqIEBkZWZncm91cCBSVENfQWxhcm1NYXNrX0RlZmluaXRpb25zIFJUQyBBbGFybSBNYXNrIERlZmluaXRpb25zCiAgICogQHsKICAgKi8KICNkZWZpbmUgUlRDX0FMQVJNTUFTS19OT05FICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVCkBAIC0zNDYsOCArMzU4LDcgQEAKICNkZWZpbmUgUlRDX0FMQVJNTUFTS19IT1VSUyAgICAgICAgICAgICAgIFJUQ19BTFJNQVJfTVNLMwogI2RlZmluZSBSVENfQUxBUk1NQVNLX01JTlVURVMgICAgICAgICAgICAgUlRDX0FMUk1BUl9NU0syCiAjZGVmaW5lIFJUQ19BTEFSTU1BU0tfU0VDT05EUyAgICAgICAgICAgICBSVENfQUxSTUFSX01TSzEKLSNkZWZpbmUgUlRDX0FMQVJNTUFTS19BTEwgICAgICAgICAgICAgICAgIChSVENfQUxBUk1NQVNLX05PTkUgICAgICAgIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19BTEFSTU1BU0tfREFURVdFRUtEQVkgfCBcCisjZGVmaW5lIFJUQ19BTEFSTU1BU0tfQUxMICAgICAgICAgICAgICAgICAoUlRDX0FMQVJNTUFTS19EQVRFV0VFS0RBWSB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfQUxBUk1NQVNLX0hPVVJTICAgICAgIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19BTEFSTU1BU0tfTUlOVVRFUyAgICAgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX0FMQVJNTUFTS19TRUNPTkRTKQpAQCAtMzY1LDQxICszNzYsNDAgQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBSVENfQWxhcm1fU3ViX1NlY29uZHNfTWFza3NfRGVmaW5pdGlvbnMgUlRDIEFsYXJtIFN1YiBTZWNvbmRzIE1hc2tzIERlZmluaXRpb25zCi0qIEB7Ci0qLwotI2RlZmluZSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX0FMTCAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgLyohPCBBbGwgQWxhcm0gU1MgZmllbGRzIGFyZSBtYXNrZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVyZSBpcyBubyBjb21wYXJpc29uIG9uIHN1YiBzZWNvbmRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgQWxhcm0gKi8KLSNkZWZpbmUgUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0XzEgICAgICBSVENfQUxSTUFTU1JfTUFTS1NTXzAgIC8qITwgU1NbMTQ6MV0gYXJlIGlnbm9yZWQgaW4gQWxhcm0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmlzb24uIE9ubHkgU1NbMF0gaXMgY29tcGFyZWQuICAgICovCi0jZGVmaW5lIFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF8yICAgICAgUlRDX0FMUk1BU1NSX01BU0tTU18xICAvKiE8IFNTWzE0OjJdIGFyZSBpZ25vcmVkIGluIEFsYXJtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJpc29uLiBPbmx5IFNTWzE6MF0gYXJlIGNvbXBhcmVkICAqLwotI2RlZmluZSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTRfMyAgICAgIChSVENfQUxSTUFTU1JfTUFTS1NTXzAgfCBSVENfQUxSTUFTU1JfTUFTS1NTXzEpICAvKiE8IFNTWzE0OjNdIGFyZSBpZ25vcmVkIGluIEFsYXJtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJpc29uLiBPbmx5IFNTWzI6MF0gYXJlIGNvbXBhcmVkICAqLwotI2RlZmluZSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTRfNCAgICAgIFJUQ19BTFJNQVNTUl9NQVNLU1NfMiAgLyohPCBTU1sxNDo0XSBhcmUgaWdub3JlZCBpbiBBbGFybQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbi4gT25seSBTU1szOjBdIGFyZSBjb21wYXJlZCAgKi8KLSNkZWZpbmUgUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0XzUgICAgICAoUlRDX0FMUk1BU1NSX01BU0tTU18wIHwgUlRDX0FMUk1BU1NSX01BU0tTU18yKSAgLyohPCBTU1sxNDo1XSBhcmUgaWdub3JlZCBpbiBBbGFybQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbi4gT25seSBTU1s0OjBdIGFyZSBjb21wYXJlZCAgKi8KLSNkZWZpbmUgUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0XzYgICAgICAoUlRDX0FMUk1BU1NSX01BU0tTU18xIHwgUlRDX0FMUk1BU1NSX01BU0tTU18yKSAgLyohPCBTU1sxNDo2XSBhcmUgaWdub3JlZCBpbiBBbGFybQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbi4gT25seSBTU1s1OjBdIGFyZSBjb21wYXJlZCAgKi8KLSNkZWZpbmUgUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0XzcgICAgICAoUlRDX0FMUk1BU1NSX01BU0tTU18wIHwgUlRDX0FMUk1BU1NSX01BU0tTU18xIHwgUlRDX0FMUk1BU1NSX01BU0tTU18yKSAgLyohPCBTU1sxNDo3XSBhcmUgaWdub3JlZCBpbiBBbGFybQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbi4gT25seSBTU1s2OjBdIGFyZSBjb21wYXJlZCAgKi8KLSNkZWZpbmUgUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0XzggICAgICBSVENfQUxSTUFTU1JfTUFTS1NTXzMgIC8qITwgU1NbMTQ6OF0gYXJlIGlnbm9yZWQgaW4gQWxhcm0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmlzb24uIE9ubHkgU1NbNzowXSBhcmUgY29tcGFyZWQgICovCi0jZGVmaW5lIFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF85ICAgICAgKFJUQ19BTFJNQVNTUl9NQVNLU1NfMCB8IFJUQ19BTFJNQVNTUl9NQVNLU1NfMykgIC8qITwgU1NbMTQ6OV0gYXJlIGlnbm9yZWQgaW4gQWxhcm0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmlzb24uIE9ubHkgU1NbODowXSBhcmUgY29tcGFyZWQgICovCi0jZGVmaW5lIFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF8xMCAgICAgKFJUQ19BTFJNQVNTUl9NQVNLU1NfMSB8IFJUQ19BTFJNQVNTUl9NQVNLU1NfMykgIC8qITwgU1NbMTQ6MTBdIGFyZSBpZ25vcmVkIGluIEFsYXJtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJpc29uLiBPbmx5IFNTWzk6MF0gYXJlIGNvbXBhcmVkICAqLwotI2RlZmluZSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTRfMTEgICAgIChSVENfQUxSTUFTU1JfTUFTS1NTXzAgfCBSVENfQUxSTUFTU1JfTUFTS1NTXzEgfCBSVENfQUxSTUFTU1JfTUFTS1NTXzMpICAvKiE8IFNTWzE0OjExXSBhcmUgaWdub3JlZCBpbiBBbGFybQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbi4gT25seSBTU1sxMDowXSBhcmUgY29tcGFyZWQgKi8KLSNkZWZpbmUgUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0XzEyICAgICAoUlRDX0FMUk1BU1NSX01BU0tTU18yIHwgUlRDX0FMUk1BU1NSX01BU0tTU18zKSAgLyohPCBTU1sxNDoxMl0gYXJlIGlnbm9yZWQgaW4gQWxhcm0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmlzb24uT25seSBTU1sxMTowXSBhcmUgY29tcGFyZWQgICovCi0jZGVmaW5lIFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF8xMyAgICAgKFJUQ19BTFJNQVNTUl9NQVNLU1NfMCB8IFJUQ19BTFJNQVNTUl9NQVNLU1NfMiB8IFJUQ19BTFJNQVNTUl9NQVNLU1NfMykgIC8qITwgU1NbMTQ6MTNdIGFyZSBpZ25vcmVkIGluIEFsYXJtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJpc29uLiBPbmx5IFNTWzEyOjBdIGFyZSBjb21wYXJlZCAqLwotI2RlZmluZSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTQgICAgICAgIChSVENfQUxSTUFTU1JfTUFTS1NTXzEgfCBSVENfQUxSTUFTU1JfTUFTS1NTXzIgfCBSVENfQUxSTUFTU1JfTUFTS1NTXzMpICAvKiE8IFNTWzE0XSBpcyBkb24ndCBjYXJlIGluIEFsYXJtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJpc29uLk9ubHkgU1NbMTM6MF0gYXJlIGNvbXBhcmVkICAqLwotI2RlZmluZSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX05PTkUgICAgICAgIFJUQ19BTFJNQVNTUl9NQVNLU1MgICAgLyohPCBTU1sxNDowXSBhcmUgY29tcGFyZWQgYW5kIG11c3QgbWF0Y2ggCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhY3RpdmF0ZSBhbGFybS4gKi8KKyAgKiBAeworICAqLworLyohPCBBbGwgQWxhcm0gU1MgZmllbGRzIGFyZSBtYXNrZWQuIFRoZXJlIGlzIG5vIGNvbXBhcmlzb24gb24gc3ViIHNlY29uZHMgZm9yIEFsYXJtICovCisjZGVmaW5lIFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfQUxMICAgICAgICAgMHgwMDAwMDAwMFUKKy8qITwgU1NbMTQ6MV0gYXJlIGRvbid0IGNhcmUgaW4gQWxhcm0gY29tcGFyaXNvbi4gT25seSBTU1swXSBpcyBjb21wYXJlZC4gICAgICovCisjZGVmaW5lIFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF8xICAgICAgUlRDX0FMUk1BU1NSX01BU0tTU18wCisvKiE8IFNTWzE0OjJdIGFyZSBkb24ndCBjYXJlIGluIEFsYXJtIGNvbXBhcmlzb24uIE9ubHkgU1NbMTowXSBhcmUgY29tcGFyZWQuICAqLworI2RlZmluZSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTRfMiAgICAgIFJUQ19BTFJNQVNTUl9NQVNLU1NfMQorLyohPCBTU1sxNDozXSBhcmUgZG9uJ3QgY2FyZSBpbiBBbGFybSBjb21wYXJpc29uLiBPbmx5IFNTWzI6MF0gYXJlIGNvbXBhcmVkLiAgKi8KKyNkZWZpbmUgUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0XzMgICAgICAoUlRDX0FMUk1BU1NSX01BU0tTU18wIHwgUlRDX0FMUk1BU1NSX01BU0tTU18xKQorLyohPCBTU1sxNDo0XSBhcmUgZG9uJ3QgY2FyZSBpbiBBbGFybSBjb21wYXJpc29uLiBPbmx5IFNTWzM6MF0gYXJlIGNvbXBhcmVkLiAgKi8KKyNkZWZpbmUgUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0XzQgICAgICBSVENfQUxSTUFTU1JfTUFTS1NTXzIKKy8qITwgU1NbMTQ6NV0gYXJlIGRvbid0IGNhcmUgaW4gQWxhcm0gY29tcGFyaXNvbi4gT25seSBTU1s0OjBdIGFyZSBjb21wYXJlZC4gICovCisjZGVmaW5lIFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF81ICAgICAgKFJUQ19BTFJNQVNTUl9NQVNLU1NfMCB8IFJUQ19BTFJNQVNTUl9NQVNLU1NfMikKKy8qITwgU1NbMTQ6Nl0gYXJlIGRvbid0IGNhcmUgaW4gQWxhcm0gY29tcGFyaXNvbi4gT25seSBTU1s1OjBdIGFyZSBjb21wYXJlZC4gICovCisjZGVmaW5lIFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF82ICAgICAgKFJUQ19BTFJNQVNTUl9NQVNLU1NfMSB8IFJUQ19BTFJNQVNTUl9NQVNLU1NfMikKKy8qITwgU1NbMTQ6N10gYXJlIGRvbid0IGNhcmUgaW4gQWxhcm0gY29tcGFyaXNvbi4gT25seSBTU1s2OjBdIGFyZSBjb21wYXJlZC4gICovCisjZGVmaW5lIFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF83ICAgICAgKFJUQ19BTFJNQVNTUl9NQVNLU1NfMCB8IFJUQ19BTFJNQVNTUl9NQVNLU1NfMSB8IFJUQ19BTFJNQVNTUl9NQVNLU1NfMikKKy8qITwgU1NbMTQ6OF0gYXJlIGRvbid0IGNhcmUgaW4gQWxhcm0gY29tcGFyaXNvbi4gT25seSBTU1s3OjBdIGFyZSBjb21wYXJlZC4gICovCisjZGVmaW5lIFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF84ICAgICAgUlRDX0FMUk1BU1NSX01BU0tTU18zCisvKiE8IFNTWzE0OjldIGFyZSBkb24ndCBjYXJlIGluIEFsYXJtIGNvbXBhcmlzb24uIE9ubHkgU1NbODowXSBhcmUgY29tcGFyZWQuICAqLworI2RlZmluZSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTRfOSAgICAgIChSVENfQUxSTUFTU1JfTUFTS1NTXzAgfCBSVENfQUxSTUFTU1JfTUFTS1NTXzMpCisvKiE8IFNTWzE0OjEwXSBhcmUgZG9uJ3QgY2FyZSBpbiBBbGFybSBjb21wYXJpc29uLiBPbmx5IFNTWzk6MF0gYXJlIGNvbXBhcmVkLiAqLworI2RlZmluZSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTRfMTAgICAgIChSVENfQUxSTUFTU1JfTUFTS1NTXzEgfCBSVENfQUxSTUFTU1JfTUFTS1NTXzMpCisvKiE8IFNTWzE0OjExXSBhcmUgZG9uJ3QgY2FyZSBpbiBBbGFybSBjb21wYXJpc29uLiBPbmx5IFNTWzEwOjBdIGFyZSBjb21wYXJlZC4gKi8KKyNkZWZpbmUgUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0XzExICAgICAoUlRDX0FMUk1BU1NSX01BU0tTU18wIHwgUlRDX0FMUk1BU1NSX01BU0tTU18xIHwgUlRDX0FMUk1BU1NSX01BU0tTU18zKQorLyohPCBTU1sxNDoxMl0gYXJlIGRvbid0IGNhcmUgaW4gQWxhcm0gY29tcGFyaXNvbi4gT25seSBTU1sxMTowXSBhcmUgY29tcGFyZWQuICovCisjZGVmaW5lIFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF8xMiAgICAgKFJUQ19BTFJNQVNTUl9NQVNLU1NfMiB8IFJUQ19BTFJNQVNTUl9NQVNLU1NfMykKKy8qITwgU1NbMTQ6MTNdIGFyZSBkb24ndCBjYXJlIGluIEFsYXJtIGNvbXBhcmlzb24uIE9ubHkgU1NbMTI6MF0gYXJlIGNvbXBhcmVkLiAqLworI2RlZmluZSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTRfMTMgICAgIChSVENfQUxSTUFTU1JfTUFTS1NTXzAgfCBSVENfQUxSTUFTU1JfTUFTS1NTXzIgfCBSVENfQUxSTUFTU1JfTUFTS1NTXzMpCisvKiE8IFNTWzE0XSBpcyBkb24ndCBjYXJlIGluIEFsYXJtIGNvbXBhcmlzb24uIE9ubHkgU1NbMTM6MF0gYXJlIGNvbXBhcmVkLiAqLworI2RlZmluZSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTQgICAgICAgIChSVENfQUxSTUFTU1JfTUFTS1NTXzEgfCBSVENfQUxSTUFTU1JfTUFTS1NTXzIgfCBSVENfQUxSTUFTU1JfTUFTS1NTXzMpCisvKiE8IFNTWzE0OjBdIGFyZSBjb21wYXJlZCBhbmQgbXVzdCBtYXRjaCB0byBhY3RpdmF0ZSBhbGFybS4gKi8KKyNkZWZpbmUgUlRDX0FMQVJNU1VCU0VDT05ETUFTS19OT05FICAgICAgICBSVENfQUxSTUFTU1JfTUFTS1NTCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDA3LDE2ICs0MTcsMTAgQEAKIC8qKiBAZGVmZ3JvdXAgUlRDX0ludGVycnVwdHNfRGVmaW5pdGlvbnMgUlRDIEludGVycnVwdHMgRGVmaW5pdGlvbnMKICAgKiBAewogICAqLwotI2RlZmluZSBSVENfSVRfVFMgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX0NSX1RTSUUKLSNkZWZpbmUgUlRDX0lUX1dVVCAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19DUl9XVVRJRQotI2RlZmluZSBSVENfSVRfQUxSQiAgICAgICAgICAgICAgICAgICAgICAgUlRDX0NSX0FMUkJJRQotI2RlZmluZSBSVENfSVRfQUxSQSAgICAgICAgICAgICAgICAgICAgICAgUlRDX0NSX0FMUkFJRQotI2RlZmluZSBSVENfSVRfVEFNUCAgICAgICAgICAgICAgICAgICAgICAgUlRDX1RBRkNSX1RBTVBJRSAgICAgICAvKiBVc2VkIG9ubHkgdG8gRW5hYmxlIHRoZSBUYW1wZXIgSW50ZXJydXB0ICovCi0jZGVmaW5lIFJUQ19JVF9UQU1QMSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwVSAgICAgICAgICAgIC8qb25seSBmb3IgUlRDX0lTUiBmbGFnIGNoZWNrKi8KLSNkZWZpbmUgUlRDX0lUX1RBTVAyICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDBVICAgICAgICAgICAgLypvbmx5IGZvciBSVENfSVNSIGZsYWcgY2hlY2sqLwotI2lmIGRlZmluZWQoUlRDX1RBTVBFUjNfU1VQUE9SVCkKLSNkZWZpbmUgUlRDX0lUX1RBTVAzICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDBVICAgICAgICAgICAgLypvbmx5IGZvciBSVENfSVNSIGZsYWcgY2hlY2sqLwotI2VuZGlmIC8qIFJUQ19UQU1QRVIzX1NVUFBPUlQgKi8KKyNkZWZpbmUgUlRDX0lUX1RTICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19DUl9UU0lFICAgICAgICAgLyohPCBFbmFibGUgVGltZXN0YW1wIEludGVycnVwdCAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19JVF9XVVQgICAgICAgICAgICAgICAgICAgICAgICBSVENfQ1JfV1VUSUUgICAgICAgIC8qITwgRW5hYmxlIFdha2V1cCB0aW1lciBJbnRlcnJ1cHQgICAgICAgICAgICAqLworI2RlZmluZSBSVENfSVRfQUxSQiAgICAgICAgICAgICAgICAgICAgICAgUlRDX0NSX0FMUkJJRSAgICAgICAvKiE8IEVuYWJsZSBBbGFybSBCIEludGVycnVwdCAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lUX0FMUkEgICAgICAgICAgICAgICAgICAgICAgIFJUQ19DUl9BTFJBSUUgICAgICAgLyohPCBFbmFibGUgQWxhcm0gQSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDI0LDI0ICs0MjgsMjQgQEAKIC8qKiBAZGVmZ3JvdXAgUlRDX0ZsYWdzX0RlZmluaXRpb25zIFJUQyBGbGFncyBEZWZpbml0aW9ucwogICAqIEB7CiAgICovCi0jZGVmaW5lIFJUQ19GTEFHX1JFQ0FMUEYgICAgICAgICAgICAgICAgICBSVENfSVNSX1JFQ0FMUEYKKyNkZWZpbmUgUlRDX0ZMQUdfUkVDQUxQRiAgICAgICAgICAgICAgICAgIFJUQ19JU1JfUkVDQUxQRiAgICAgLyohPCBSZWNhbGlicmF0aW9uIHBlbmRpbmcgZmxhZyAgICAgICAgICAgICAgICovCiAjaWYgZGVmaW5lZChSVENfVEFNUEVSM19TVVBQT1JUKQotI2RlZmluZSBSVENfRkxBR19UQU1QM0YgICAgICAgICAgICAgICAgICAgUlRDX0lTUl9UQU1QM0YKKyNkZWZpbmUgUlRDX0ZMQUdfVEFNUDNGICAgICAgICAgICAgICAgICAgIFJUQ19JU1JfVEFNUDNGICAgICAgLyohPCBUYW1wZXIgMyBldmVudCBmbGFnICAgICAgICAgICAgICAgICAgICAgICovCiAjZW5kaWYgLyogUlRDX1RBTVBFUjNfU1VQUE9SVCAqLwotI2RlZmluZSBSVENfRkxBR19UQU1QMkYgICAgICAgICAgICAgICAgICAgUlRDX0lTUl9UQU1QMkYKLSNkZWZpbmUgUlRDX0ZMQUdfVEFNUDFGICAgICAgICAgICAgICAgICAgIFJUQ19JU1JfVEFNUDFGCi0jZGVmaW5lIFJUQ19GTEFHX1RTT1ZGICAgICAgICAgICAgICAgICAgICBSVENfSVNSX1RTT1ZGCi0jZGVmaW5lIFJUQ19GTEFHX1RTRiAgICAgICAgICAgICAgICAgICAgICBSVENfSVNSX1RTRgotI2RlZmluZSBSVENfRkxBR19XVVRGICAgICAgICAgICAgICAgICAgICAgUlRDX0lTUl9XVVRGCi0jZGVmaW5lIFJUQ19GTEFHX0FMUkJGICAgICAgICAgICAgICAgICAgICBSVENfSVNSX0FMUkJGCi0jZGVmaW5lIFJUQ19GTEFHX0FMUkFGICAgICAgICAgICAgICAgICAgICBSVENfSVNSX0FMUkFGCi0jZGVmaW5lIFJUQ19GTEFHX0lOSVRGICAgICAgICAgICAgICAgICAgICBSVENfSVNSX0lOSVRGCi0jZGVmaW5lIFJUQ19GTEFHX1JTRiAgICAgICAgICAgICAgICAgICAgICBSVENfSVNSX1JTRgotI2RlZmluZSBSVENfRkxBR19JTklUUyAgICAgICAgICAgICAgICAgICAgUlRDX0lTUl9JTklUUwotI2RlZmluZSBSVENfRkxBR19TSFBGICAgICAgICAgICAgICAgICAgICAgUlRDX0lTUl9TSFBGCi0jZGVmaW5lIFJUQ19GTEFHX1dVVFdGICAgICAgICAgICAgICAgICAgICBSVENfSVNSX1dVVFdGCi0jZGVmaW5lIFJUQ19GTEFHX0FMUkJXRiAgICAgICAgICAgICAgICAgICBSVENfSVNSX0FMUkJXRgotI2RlZmluZSBSVENfRkxBR19BTFJBV0YgICAgICAgICAgICAgICAgICAgUlRDX0lTUl9BTFJBV0YKKyNkZWZpbmUgUlRDX0ZMQUdfVEFNUDJGICAgICAgICAgICAgICAgICAgIFJUQ19JU1JfVEFNUDJGICAgICAgLyohPCBUYW1wZXIgMiBldmVudCBmbGFnICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19GTEFHX1RBTVAxRiAgICAgICAgICAgICAgICAgICBSVENfSVNSX1RBTVAxRiAgICAgIC8qITwgVGFtcGVyIDEgZXZlbnQgZmxhZyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSVENfRkxBR19UU09WRiAgICAgICAgICAgICAgICAgICAgUlRDX0lTUl9UU09WRiAgICAgICAvKiE8IFRpbWVzdGFtcCBvdmVyZmxvdyBmbGFnICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0ZMQUdfVFNGICAgICAgICAgICAgICAgICAgICAgIFJUQ19JU1JfVFNGICAgICAgICAgLyohPCBUaW1lc3RhbXAgZXZlbnQgZmxhZyAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19GTEFHX1dVVEYgICAgICAgICAgICAgICAgICAgICBSVENfSVNSX1dVVEYgICAgICAgIC8qITwgV2FrZXVwIHRpbWVyIGV2ZW50IGZsYWcgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSVENfRkxBR19BTFJCRiAgICAgICAgICAgICAgICAgICAgUlRDX0lTUl9BTFJCRiAgICAgICAvKiE8IEFsYXJtIEIgZXZlbnQgZmxhZyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0ZMQUdfQUxSQUYgICAgICAgICAgICAgICAgICAgIFJUQ19JU1JfQUxSQUYgICAgICAgLyohPCBBbGFybSBBIGV2ZW50IGZsYWcgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19GTEFHX0lOSVRGICAgICAgICAgICAgICAgICAgICBSVENfSVNSX0lOSVRGICAgICAgIC8qITwgUlRDIGluIGluaXRpYWxpemF0aW9uIG1vZGUgZmxhZyAgICAgICAgICAqLworI2RlZmluZSBSVENfRkxBR19SU0YgICAgICAgICAgICAgICAgICAgICAgUlRDX0lTUl9SU0YgICAgICAgICAvKiE8IFJlZ2lzdGVyIHN5bmNocm9uaXphdGlvbiBmbGFnICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0ZMQUdfSU5JVFMgICAgICAgICAgICAgICAgICAgIFJUQ19JU1JfSU5JVFMgICAgICAgLyohPCBSVEMgaW5pdGlhbGl6YXRpb24gc3RhdHVzIGZsYWcgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19GTEFHX1NIUEYgICAgICAgICAgICAgICAgICAgICBSVENfSVNSX1NIUEYgICAgICAgIC8qITwgU2hpZnQgb3BlcmF0aW9uIHBlbmRpbmcgZmxhZyAgICAgICAgICAgICAqLworI2RlZmluZSBSVENfRkxBR19XVVRXRiAgICAgICAgICAgICAgICAgICAgUlRDX0lTUl9XVVRXRiAgICAgICAvKiE8IFdVVFIgcmVnaXN0ZXIgd3JpdGUgYWxsb3dhbmNlIGZsYWcgICAgICAgKi8KKyNkZWZpbmUgUlRDX0ZMQUdfQUxSQldGICAgICAgICAgICAgICAgICAgIFJUQ19JU1JfQUxSQldGICAgICAgLyohPCBBTFJNQlIgcmVnaXN0ZXIgd3JpdGUgYWxsb3dhbmNlIGZsYWcgICAgICovCisjZGVmaW5lIFJUQ19GTEFHX0FMUkFXRiAgICAgICAgICAgICAgICAgICBSVENfSVNSX0FMUkFXRiAgICAgIC8qITwgQUxSTUFSIHJlZ2lzdGVyIHdyaXRlIGFsbG93YW5jZSBmbGFnICAgICAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTQ1MSwyMCArNDU1LDIxIEBACiAgICovCiAKIC8qIEV4cG9ydGVkIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIC8qKiBAZGVmZ3JvdXAgUlRDX0V4cG9ydGVkX01hY3JvcyBSVEMgRXhwb3J0ZWQgTWFjcm9zCiAgICogQHsKICAgKi8KIAotLyoqIEBicmllZiAgUmVzZXQgUlRDIGhhbmRsZSBzdGF0ZQotICAqIEBwYXJhbSAgX19IQU5ETEVfXyBSVEMgaGFuZGxlLgorLyoqIEBicmllZiBSZXNldCBSVEMgaGFuZGxlIHN0YXRlCisgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNpZiAoVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0jZGVmaW5lIF9fSEFMX1JUQ19SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgZG97XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVTRVQ7XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BJbml0Q2FsbGJhY2sgPSBOVUxMO1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwRGVJbml0Q2FsbGJhY2sgPSBOVUxMO1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfXdoaWxlKDB1KQorI2RlZmluZSBfX0hBTF9SVENfUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcEluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BEZUluaXRDYWxsYmFjayA9IE5VTEw7ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDBVKQogI2Vsc2UKICNkZWZpbmUgX19IQUxfUlRDX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAoKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVTRVQpCiAjZW5kaWYgLyogVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTICovCkBAIC00NzQsMjEgKzQ3OSwyNiBAQAogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShfX0hBTkRMRV9fKSAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBkb3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5JbnN0YW5jZS0+V1BSID0gMHhDQVU7ICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPldQUiA9IDB4NTNVOyAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwVSkKKyNkZWZpbmUgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKF9fSEFORExFX18pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPldQUiA9IDB4Q0FVOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkluc3RhbmNlLT5XUFIgPSAweDUzVTsgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMFUpCiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzLgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKF9fSEFORExFX18pICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBkb3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5JbnN0YW5jZS0+V1BSID0gMHhGRlU7ICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDBVKQorI2RlZmluZSBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShfX0hBTkRMRV9fKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPldQUiA9IDB4RkZVOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDBVKQorCisvKioKKyAgKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIFJUQyBDYWxlbmRhciBpcyBpbml0aWFsaXplZC4KKyAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworI2RlZmluZSBfX0hBTF9SVENfSVNfQ0FMRU5EQVJfSU5JVElBTElaRUQoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKFJUQ19GTEFHX0lOSVRTKSkgPT0gUlRDX0ZMQUdfSU5JVFMpID8gMVUgOiAwVSkKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdGhlIFJUQyBBTEFSTUEgcGVyaXBoZXJhbC4KQEAgLTUzMyw5ICs1NDMsOSBAQAogICAqIEBicmllZiAgRGlzYWJsZSB0aGUgUlRDIEFsYXJtIGludGVycnVwdC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgogICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIFJUQyBBbGFybSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkLgotICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgIEBhcmcgUlRDX0lUX0FMUkE6IEFsYXJtIEEgaW50ZXJydXB0Ci0gICogICAgICAgICAgICBAYXJnIFJUQ19JVF9BTFJCOiBBbGFybSBCIGludGVycnVwdAorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICAgQGFyZyBSVENfSVRfQUxSQTogQWxhcm0gQSBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICBAYXJnIFJUQ19JVF9BTFJCOiBBbGFybSBCIGludGVycnVwdAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fRElTQUJMRV9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUiAmPSB+KF9fSU5URVJSVVBUX18pKQpAQCAtNTQ5LDcgKzU1OSwzMSBAQAogICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfQUxSQjogQWxhcm0gQiBpbnRlcnJ1cHQKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX0FMQVJNX0dFVF9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikmICgoX19JTlRFUlJVUFRfXyk+PiA0VSkpICE9IFJFU0VUKT8gU0VUIDogUkVTRVQpCisjZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9HRVRfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgICAgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKChfX0lOVEVSUlVQVF9fKSA+PiA0VSkpICE9IDBVKSA/IDFVIDogMFUpCisKKy8qKgorICAqIEBicmllZiAgR2V0IHRoZSBzZWxlY3RlZCBSVEMgQWxhcm0ncyBmbGFnIHN0YXR1cy4KKyAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgorICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBSVEMgQWxhcm0gRmxhZyB0byBjaGVjay4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfQUxSQUY6IEFsYXJtIEEgaW50ZXJydXB0IGZsYWcKKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfQUxSQVdGOiBBbGFybSBBICd3cml0ZSBhbGxvd2VkJyBmbGFnCisgICogICAgICAgICAgICBAYXJnIFJUQ19GTEFHX0FMUkJGOiBBbGFybSBCIGludGVycnVwdCBmbGFnCisgICogICAgICAgICAgICBAYXJnIFJUQ19GTEFHX0FMUkJXRjogQWxhcm0gQiAnd3JpdGUgYWxsb3dlZCcgZmxhZworICAqIEByZXR2YWwgTm9uZQorICAqLworI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICAgICAgICAgICAgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKF9fRkxBR19fKSkgIT0gMFUpID8gMVUgOiAwVSkKKworLyoqCisgICogQGJyaWVmICBDbGVhciB0aGUgUlRDIEFsYXJtJ3MgcGVuZGluZyBmbGFncy4KKyAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgorICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBSVEMgQWxhcm0gZmxhZyB0byBiZSBjbGVhcmVkLgorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKKyAgKiAgICAgICAgICAgICBAYXJnIFJUQ19GTEFHX0FMUkFGCisgICogICAgICAgICAgICAgQGFyZyBSVENfRkxBR19BTFJCRgorICAqIEByZXR2YWwgTm9uZQorICAqLworI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fQ0xFQVJfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgICAgICAgICAgICAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSKSA9ICh+KChfX0ZMQUdfXykgfCBSVENfSVNSX0lOSVQpfCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IgJiBSVENfSVNSX0lOSVQpKQogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBSVEMgQWxhcm0gaW50ZXJydXB0IGhhcyBiZWVuIGVuYWJsZWQgb3Igbm90LgpAQCAtNTYwLDEwNiArNTk0LDg4IEBACiAgICogICAgICAgICAgICBAYXJnIFJUQ19JVF9BTFJCOiBBbGFybSBCIGludGVycnVwdAogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSKSAmIChfX0lOVEVSUlVQVF9fKSkgIT0gUkVTRVQpID8gU0VUIDogUkVTRVQpCisjZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IpICYgKF9fSU5URVJSVVBUX18pKSAhPSAwVSkgPyAxVSA6IDBVKQogCiAvKioKLSAgKiBAYnJpZWYgIEdldCB0aGUgc2VsZWN0ZWQgUlRDIEFsYXJtJ3MgZmxhZyBzdGF0dXMuCi0gICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KLSAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgUlRDIEFsYXJtIEZsYWcgc291cmNlcyB0byBjaGVjay4KLSAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKLSAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfQUxSQUYKLSAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfQUxSQkYKLSAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfQUxSQVdGCi0gICogICAgICAgICAgICBAYXJnIFJUQ19GTEFHX0FMUkJXRgotICAqIEByZXR2YWwgTm9uZQotICAqLwotI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICAgICAgICAgICAgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKF9fRkxBR19fKSkgIT0gUkVTRVQpPyBTRVQgOiBSRVNFVCkKLQotLyoqCi0gICogQGJyaWVmICBDbGVhciB0aGUgUlRDIEFsYXJtJ3MgcGVuZGluZyBmbGFncy4KLSAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgotICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBSVEMgQWxhcm0gRmxhZyBzb3VyY2VzIHRvIGNsZWFyLgotICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgotICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19BTFJBRgotICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19BTFJCRgotICAqIEByZXR2YWwgTm9uZQotICAqLwotI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fQ0xFQVJfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSKSA9ICh+KChfX0ZMQUdfXykgfCBSVENfSVNSX0lOSVQpIHwgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUiAmIFJUQ19JU1JfSU5JVCkpCi0KLS8qKgotICAqIEBicmllZiAgRW5hYmxlIGludGVycnVwdCBvbiB0aGUgUlRDIEFsYXJtIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgorICAqIEBicmllZiAgRW5hYmxlIGludGVycnVwdCBvbiB0aGUgUlRDIEFsYXJtIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fRVhUSV9FTkFCTEVfSVQoKSAgICAgICAgICAgIChFWFRJLT5JTVIgfD0gUlRDX0VYVElfTElORV9BTEFSTV9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmICBEaXNhYmxlIGludGVycnVwdCBvbiB0aGUgUlRDIEFsYXJtIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgorICAqIEBicmllZiAgRGlzYWJsZSBpbnRlcnJ1cHQgb24gdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX0FMQVJNX0VYVElfRElTQUJMRV9JVCgpICAgICAgICAgICAoRVhUSS0+SU1SICY9IH4oUlRDX0VYVElfTElORV9BTEFSTV9FVkVOVCkpCisjZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0RJU0FCTEVfSVQoKSAgICAgICAgICAgKEVYVEktPklNUiAmPSB+UlRDX0VYVElfTElORV9BTEFSTV9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmICBFbmFibGUgZXZlbnQgb24gdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIEVuYWJsZSBldmVudCBvbiB0aGUgUlRDIEFsYXJtIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX0FMQVJNX0VYVElfRU5BQkxFX0VWRU5UKCkgICAgICAgICAoRVhUSS0+RU1SIHw9IFJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpCisjZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0VOQUJMRV9FVkVOVCgpICAgICAgICAgIChFWFRJLT5FTVIgfD0gUlRDX0VYVElfTElORV9BTEFSTV9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmICBEaXNhYmxlIGV2ZW50IG9uIHRoZSBSVEMgQWxhcm0gYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBEaXNhYmxlIGV2ZW50IG9uIHRoZSBSVEMgQWxhcm0gYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwotI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fRVhUSV9ESVNBQkxFX0VWRU5UKCkgICAgICAgICAoRVhUSS0+RU1SICY9IH4oUlRDX0VYVElfTElORV9BTEFSTV9FVkVOVCkpCisjZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0RJU0FCTEVfRVZFTlQoKSAgICAgICAgIChFWFRJLT5FTVIgJj0gflJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRW5hYmxlIGZhbGxpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgQWxhcm0gYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBFbmFibGUgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0VOQUJMRV9GQUxMSU5HX0VER0UoKSAgIChFWFRJLT5GVFNSIHw9IFJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRGlzYWJsZSBmYWxsaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIEFsYXJtIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgorICAqIEBicmllZiAgRGlzYWJsZSBmYWxsaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIEFsYXJtIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX0FMQVJNX0VYVElfRElTQUJMRV9GQUxMSU5HX0VER0UoKSAgKEVYVEktPkZUU1IgJj0gfihSVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UKSkKKyNkZWZpbmUgX19IQUxfUlRDX0FMQVJNX0VYVElfRElTQUJMRV9GQUxMSU5HX0VER0UoKSAgKEVYVEktPkZUU1IgJj0gflJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRW5hYmxlIHJpc2luZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIEVuYWJsZSByaXNpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgQWxhcm0gYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwogI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKSAgICAoRVhUSS0+UlRTUiB8PSBSVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgIERpc2FibGUgcmlzaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIEFsYXJtIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgorICAqIEBicmllZiAgRGlzYWJsZSByaXNpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgQWxhcm0gYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwotI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fRVhUSV9ESVNBQkxFX1JJU0lOR19FREdFKCkgICAoRVhUSS0+UlRTUiAmPSB+KFJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpKQorI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fRVhUSV9ESVNBQkxFX1JJU0lOR19FREdFKCkgICAoRVhUSS0+UlRTUiAmPSB+UlRDX0VYVElfTElORV9BTEFSTV9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmICBFbmFibGUgcmlzaW5nICYgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIEVuYWJsZSByaXNpbmcgJiBmYWxsaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIEFsYXJtIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX0FMQVJNX0VYVElfRU5BQkxFX1JJU0lOR19GQUxMSU5HX0VER0UoKSBfX0hBTF9SVENfQUxBUk1fRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKTtfX0hBTF9SVENfQUxBUk1fRVhUSV9FTkFCTEVfRkFMTElOR19FREdFKCk7CisjZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0VOQUJMRV9SSVNJTkdfRkFMTElOR19FREdFKCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0VOQUJMRV9SSVNJTkdfRURHRSgpOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX0FMQVJNX0VYVElfRU5BQkxFX0ZBTExJTkdfRURHRSgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwVSkKIAogLyoqCi0gICogQGJyaWVmICBEaXNhYmxlIHJpc2luZyAmIGZhbGxpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgQWxhcm0gYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBEaXNhYmxlIHJpc2luZyAmIGZhbGxpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgQWxhcm0gYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwotI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fRVhUSV9ESVNBQkxFX1JJU0lOR19GQUxMSU5HX0VER0UoKSBfX0hBTF9SVENfQUxBUk1fRVhUSV9ESVNBQkxFX1JJU0lOR19FREdFKCk7X19IQUxfUlRDX0FMQVJNX0VYVElfRElTQUJMRV9GQUxMSU5HX0VER0UoKTsKKyNkZWZpbmUgX19IQUxfUlRDX0FMQVJNX0VYVElfRElTQUJMRV9SSVNJTkdfRkFMTElOR19FREdFKCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX0FMQVJNX0VYVElfRElTQUJMRV9SSVNJTkdfRURHRSgpOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0RJU0FCTEVfRkFMTElOR19FREdFKCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwVSkKIAogLyoqCi0gICogQGJyaWVmIENoZWNrIHdoZXRoZXIgdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEV4dGkgbGluZSBpbnRlcnJ1cHQgZmxhZyBpcyBzZXQgb3Igbm90LgorICAqIEBicmllZiBDaGVjayB3aGV0aGVyIHRoZSBSVEMgQWxhcm0gYXNzb2NpYXRlZCBFWFRJIGxpbmUgaW50ZXJydXB0IGZsYWcgaXMgc2V0IG9yIG5vdC4KICAgKiBAcmV0dmFsIExpbmUgU3RhdHVzLgogICAqLwogI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fRVhUSV9HRVRfRkxBRygpICAgICAgICAgICAgICAoRVhUSS0+UFIgJiBSVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgQ2xlYXIgdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEV4dGkgbGluZSBmbGFnLgorICAqIEBicmllZiBDbGVhciB0aGUgUlRDIEFsYXJtIGFzc29jaWF0ZWQgRVhUSSBsaW5lIGZsYWcuCiAgICogQHJldHZhbCBOb25lLgogICAqLwogI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fRVhUSV9DTEVBUl9GTEFHKCkgICAgICAgICAgICAoRVhUSS0+UFIgPSBSVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgR2VuZXJhdGUgYSBTb2Z0d2FyZSBpbnRlcnJ1cHQgb24gUlRDIEFsYXJtIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgorICAqIEBicmllZiBHZW5lcmF0ZSBhIFNvZnR3YXJlIGludGVycnVwdCBvbiBSVEMgQWxhcm0gYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwogI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fRVhUSV9HRU5FUkFURV9TV0lUKCkgICAgICAgICAoRVhUSS0+U1dJRVIgfD0gUlRDX0VYVElfTElORV9BTEFSTV9FVkVOVCkKQEAgLTY3MSwxNCArNjg3LDE0IEBACiAjaW5jbHVkZSAic3RtMzJmM3h4X2hhbF9ydGNfZXguaCIKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAZGVmZ3JvdXAgUlRDX0V4cG9ydGVkX0Z1bmN0aW9ucyBSVEMgRXhwb3J0ZWQgRnVuY3Rpb25zCisKKy8qKiBAYWRkdG9ncm91cCBSVENfRXhwb3J0ZWRfRnVuY3Rpb25zCiAgICogQHsKICAgKi8KIAotLyoqIEBkZWZncm91cCBSVENfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCisvKiogQGFkZHRvZ3JvdXAgUlRDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEKICAgKiBAewogICAqLwotCiAvKiBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ19Jbml0KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfRGVJbml0KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKQEAgLTY5NCwyNyArNzEwLDE5IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBSVENfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMiBSVEMgVGltZSBhbmQgRGF0ZSBmdW5jdGlvbnMKKy8qKiBAYWRkdG9ncm91cCBSVENfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMgogICAqIEB7CiAgICovCi0KIC8qIFJUQyBUaW1lIGFuZCBEYXRlIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX1NldFRpbWUoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19UaW1lVHlwZURlZiAqc1RpbWUsIHVpbnQzMl90IEZvcm1hdCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX0dldFRpbWUoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19UaW1lVHlwZURlZiAqc1RpbWUsIHVpbnQzMl90IEZvcm1hdCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX1NldERhdGUoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19EYXRlVHlwZURlZiAqc0RhdGUsIHVpbnQzMl90IEZvcm1hdCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX0dldERhdGUoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19EYXRlVHlwZURlZiAqc0RhdGUsIHVpbnQzMl90IEZvcm1hdCk7Ci0KLS8qIFJUQyBEYXlsaWdodCBTYXZpbmcgVGltZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkICAgICAgICAgICAgICBIQUxfUlRDX0RTVF9BZGQxSG91cihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Ci12b2lkICAgICAgICAgICAgICBIQUxfUlRDX0RTVF9TdWIxSG91cihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Ci12b2lkICAgICAgICAgICAgICBIQUxfUlRDX0RTVF9TZXRTdG9yZU9wZXJhdGlvbihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Ci12b2lkICAgICAgICAgICAgICBIQUxfUlRDX0RTVF9DbGVhclN0b3JlT3BlcmF0aW9uKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKLXVpbnQzMl90ICAgICAgICAgIEhBTF9SVENfRFNUX1JlYWRTdG9yZU9wZXJhdGlvbihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJUQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIFJUQyBBbGFybSBmdW5jdGlvbnMKKy8qKiBAYWRkdG9ncm91cCBSVENfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMwogICAqIEB7CiAgICovCiAvKiBSVEMgQWxhcm0gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNzI5LDE2ICs3MzcsMjMgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwICBSVENfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNCBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCisvKiogQGFkZHRvZ3JvdXAgUlRDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQKICAgKiBAewogICAqLwogLyogUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9TdGF0dXNUeXBlRGVmICAgSEFMX1JUQ19XYWl0Rm9yU3luY2hybyhSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CisKKy8qIFJUQyBEYXlsaWdodCBTYXZpbmcgVGltZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkICAgICAgICAgICAgICBIQUxfUlRDX0RTVF9BZGQxSG91cihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Cit2b2lkICAgICAgICAgICAgICBIQUxfUlRDX0RTVF9TdWIxSG91cihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Cit2b2lkICAgICAgICAgICAgICBIQUxfUlRDX0RTVF9TZXRTdG9yZU9wZXJhdGlvbihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Cit2b2lkICAgICAgICAgICAgICBIQUxfUlRDX0RTVF9DbGVhclN0b3JlT3BlcmF0aW9uKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKK3VpbnQzMl90ICAgICAgICAgIEhBTF9SVENfRFNUX1JlYWRTdG9yZU9wZXJhdGlvbihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJUQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA1IFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCisvKiogQGFkZHRvZ3JvdXAgUlRDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDUKICAgKiBAewogICAqLwogLyogUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTc1NCwzMCArNzY5LDM5IEBACiAvKiBQcml2YXRlIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIC8qKiBAZGVmZ3JvdXAgUlRDX1ByaXZhdGVfQ29uc3RhbnRzIFJUQyBQcml2YXRlIENvbnN0YW50cwogICAqIEB7CiAgICovCiAvKiBNYXNrcyBEZWZpbml0aW9uICovCi0jZGVmaW5lIFJUQ19UUl9SRVNFUlZFRF9NQVNLICAgIDB4MDA3RjdGN0ZVCi0jZGVmaW5lIFJUQ19EUl9SRVNFUlZFRF9NQVNLICAgIDB4MDBGRkZGM0ZVCisjZGVmaW5lIFJUQ19UUl9SRVNFUlZFRF9NQVNLICAgICgodWludDMyX3QpKFJUQ19UUl9IVCAgfCBSVENfVFJfSFUgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfVFJfTU5UIHwgUlRDX1RSX01OVSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX1RSX1NUICB8IFJUQ19UUl9TVSAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19UUl9QTSkpCisjZGVmaW5lIFJUQ19EUl9SRVNFUlZFRF9NQVNLICAgICgodWludDMyX3QpKFJUQ19EUl9ZVCB8IFJUQ19EUl9ZVSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX0RSX01UIHwgUlRDX0RSX01VIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfRFJfRFQgfCBSVENfRFJfRFUgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19EUl9XRFUpKQorI2RlZmluZSBSVENfSVNSX1JFU0VSVkVEX01BU0sgICAoKHVpbnQzMl90KShSVENfRkxBR1NfTUFTSyB8IFJUQ19JU1JfSU5JVCkpCiAjZGVmaW5lIFJUQ19JTklUX01BU0sgICAgICAgICAgIDB4RkZGRkZGRkZVCi0jZGVmaW5lIFJUQ19SU0ZfTUFTSyAgICAgICAgICAgIDB4RkZGRkZGNUZVCi0jZGVmaW5lIFJUQ19GTEFHU19NQVNLICAgICAgICAgICgodWludDMyX3QpIChSVENfRkxBR19SRUNBTFBGIHwgUlRDX0ZMQUdfVEFNUDNGIHwgUlRDX0ZMQUdfVEFNUDJGIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX0ZMQUdfVEFNUDFGfCBSVENfRkxBR19UU09WRiB8IFJUQ19GTEFHX1RTRiAgICAgICB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19GTEFHX1dVVEYgfCBSVENfRkxBR19BTFJCRiB8IFJUQ19GTEFHX0FMUkFGICAgICAgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfRkxBR19JTklURiB8IFJUQ19GTEFHX1JTRiAgICAgICAgICAgICAgICAgICAgICAgIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX0ZMQUdfSU5JVFMgfCBSVENfRkxBR19TSFBGIHwgUlRDX0ZMQUdfV1VUV0YgICAgICB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19GTEFHX0FMUkJXRiB8IFJUQ19GTEFHX0FMUkFXRikpCisjZGVmaW5lIFJUQ19SU0ZfTUFTSyAgICAgICAgICAgICgodWludDMyX3QpfihSVENfSVNSX0lOSVQgfCBSVENfSVNSX1JTRikpCisjZGVmaW5lIFJUQ19GTEFHU19NQVNLICAgICAgICAgICgodWludDMyX3QpKFJUQ19GTEFHX0lOSVRGICAgfCBSVENfRkxBR19JTklUUyAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19GTEFHX0FMUkFGICAgfCBSVENfRkxBR19BTFJBV0YgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19GTEFHX0FMUkJGICAgfCBSVENfRkxBR19BTFJCV0YgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19GTEFHX1dVVEYgICAgfCBSVENfRkxBR19XVVRXRiAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19GTEFHX1JFQ0FMUEYgfCBSVENfRkxBR19TSFBGICAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19GTEFHX1RTRiAgICAgfCBSVENfRkxBR19UU09WRiAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19GTEFHX1JTRiAgICAgfCBSVENfVEFNUEVSX0ZMQUdTX01BU0spKQogCi0jZGVmaW5lIFJUQ19USU1FT1VUX1ZBTFVFICAxMDAwCisjZGVmaW5lIFJUQ19USU1FT1VUX1ZBTFVFICAgICAgIDEwMDBVCiAKLSNkZWZpbmUgUlRDX0VYVElfTElORV9BTEFSTV9FVkVOVCAgICAgICAgICAgICBFWFRJX0lNUl9NUjE3ICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDE3IENvbm5lY3RlZCB0byB0aGUgUlRDIEFsYXJtIGV2ZW50ICovCi0jZGVmaW5lIFJUQ19FWFRJX0xJTkVfVEFNUEVSX1RJTUVTVEFNUF9FVkVOVCAgRVhUSV9JTVJfTVIxOSAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxOSBDb25uZWN0ZWQgdG8gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWUgU3RhbXAgZXZlbnRzICovCi0jZGVmaW5lIFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQgICAgICAgRVhUSV9JTVJfTVIyMCAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAyMCBDb25uZWN0ZWQgdG8gdGhlIFJUQyBXYWtldXAgZXZlbnQgKi8KKyNkZWZpbmUgUlRDX0VYVElfTElORV9BTEFSTV9FVkVOVCAgRVhUSV9JTVJfTVIxNyAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxNyBDb25uZWN0ZWQgdG8gdGhlIFJUQyBBbGFybSBldmVudCAqLwogLyoqCiAgICogQH0KICAgKi8KLS8qIFByaXZhdGUgbWFjcm9zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIC8qKiBAZGVmZ3JvdXAgUlRDX1ByaXZhdGVfTWFjcm9zIFJUQyBQcml2YXRlIE1hY3JvcwogICAqIEB7CiAgICovCkBAIC03ODUsMTkgKzgwOSwyNSBAQAogLyoqIEBkZWZncm91cCBSVENfSVNfUlRDX0RlZmluaXRpb25zIFJUQyBQcml2YXRlIG1hY3JvcyB0byBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzCiAgICogQHsKICAgKi8KLQogI2RlZmluZSBJU19SVENfSE9VUl9GT1JNQVQoRk9STUFUKSAgICAgKCgoRk9STUFUKSA9PSBSVENfSE9VUkZPUk1BVF8xMikgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRk9STUFUKSA9PSBSVENfSE9VUkZPUk1BVF8yNCkpCiAKKyNkZWZpbmUgSVNfUlRDX09VVFBVVChPVVRQVVQpICgoKE9VVFBVVCkgPT0gUlRDX09VVFBVVF9ESVNBQkxFKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChPVVRQVVQpID09IFJUQ19PVVRQVVRfQUxBUk1BKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoT1VUUFVUKSA9PSBSVENfT1VUUFVUX0FMQVJNQikgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE9VVFBVVCkgPT0gUlRDX09VVFBVVF9XQUtFVVApKQorCiAjZGVmaW5lIElTX1JUQ19PVVRQVVRfUE9MKFBPTCkgKCgoUE9MKSA9PSBSVENfT1VUUFVUX1BPTEFSSVRZX0hJR0gpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQT0wpID09IFJUQ19PVVRQVVRfUE9MQVJJVFlfTE9XKSkKIAogI2RlZmluZSBJU19SVENfT1VUUFVUX1RZUEUoVFlQRSkgKCgoVFlQRSkgPT0gUlRDX09VVFBVVF9UWVBFX09QRU5EUkFJTikgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFlQRSkgPT0gUlRDX09VVFBVVF9UWVBFX1BVU0hQVUxMKSkKLSNkZWZpbmUgSVNfUlRDX0hPVVIxMihIT1VSKSAgICAgICAgICAgICgoKEhPVVIpID4gMFUpICYmICgoSE9VUikgPD0gMTJVKSkKLSNkZWZpbmUgSVNfUlRDX0hPVVIyNChIT1VSKSAgICAgICAgICAgICgoSE9VUikgPD0gMjNVKQorCiAjZGVmaW5lIElTX1JUQ19BU1lOQ0hfUFJFRElWKFBSRURJVikgICAoKFBSRURJVikgPD0gMHg3RlUpCiAjZGVmaW5lIElTX1JUQ19TWU5DSF9QUkVESVYoUFJFRElWKSAgICAoKFBSRURJVikgPD0gMHg3RkZGVSkKKworI2RlZmluZSBJU19SVENfSE9VUjEyKEhPVVIpICAgICAgICAgICAgKCgoSE9VUikgPiAwVSkgJiYgKChIT1VSKSA8PSAxMlUpKQorI2RlZmluZSBJU19SVENfSE9VUjI0KEhPVVIpICAgICAgICAgICAgKChIT1VSKSA8PSAyM1UpCiAjZGVmaW5lIElTX1JUQ19NSU5VVEVTKE1JTlVURVMpICAgICAgICAoKE1JTlVURVMpIDw9IDU5VSkKICNkZWZpbmUgSVNfUlRDX1NFQ09ORFMoU0VDT05EUykgICAgICAgICgoU0VDT05EUykgPD0gNTlVKQogCkBAIC04MTQsOSArODQ0LDcgQEAKICNkZWZpbmUgSVNfUlRDX0ZPUk1BVChGT1JNQVQpICgoKEZPUk1BVCkgPT0gUlRDX0ZPUk1BVF9CSU4pIHx8ICgoRk9STUFUKSA9PSBSVENfRk9STUFUX0JDRCkpCiAKICNkZWZpbmUgSVNfUlRDX1lFQVIoWUVBUikgICAgICAgICAgICAgICgoWUVBUikgPD0gOTlVKQotCiAjZGVmaW5lIElTX1JUQ19NT05USChNT05USCkgICAgICAgICAgICAoKChNT05USCkgPj0gMVUpICYmICgoTU9OVEgpIDw9IDEyVSkpCi0KICNkZWZpbmUgSVNfUlRDX0RBVEUoREFURSkgICAgICAgICAgICAgICgoKERBVEUpID49IDFVKSAmJiAoKERBVEUpIDw9IDMxVSkpCiAKICNkZWZpbmUgSVNfUlRDX1dFRUtEQVkoV0VFS0RBWSkgKCgoV0VFS0RBWSkgPT0gUlRDX1dFRUtEQVlfTU9OREFZKSAgICB8fCBcCkBAIC04NDAsMjcgKzg2OCwyNyBAQAogI2RlZmluZSBJU19SVENfQUxBUk1fREFURV9XRUVLREFZX1NFTChTRUwpICgoKFNFTCkgPT0gUlRDX0FMQVJNREFURVdFRUtEQVlTRUxfREFURSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNFTCkgPT0gUlRDX0FMQVJNREFURVdFRUtEQVlTRUxfV0VFS0RBWSkpCiAKLSNkZWZpbmUgSVNfUlRDX0FMQVJNX01BU0soTUFTSykgICgoKE1BU0spICYgMHg3RjdGN0Y3RlUpID09ICh1aW50MzJfdClSRVNFVCkKKyNkZWZpbmUgSVNfUlRDX0FMQVJNX01BU0soTUFTSykgICgoKE1BU0spICYgKCh1aW50MzJfdCl+UlRDX0FMQVJNTUFTS19BTEwpKSA9PSAwVSkKIAogI2RlZmluZSBJU19SVENfQUxBUk0oQUxBUk0pICAgICAgKCgoQUxBUk0pID09IFJUQ19BTEFSTV9BKSB8fCAoKEFMQVJNKSA9PSBSVENfQUxBUk1fQikpCiAKLSNkZWZpbmUgSVNfUlRDX0FMQVJNX1NVQl9TRUNPTkRfVkFMVUUoVkFMVUUpICgoVkFMVUUpIDw9IDB4MDAwMDdGRkZVKQorI2RlZmluZSBJU19SVENfQUxBUk1fU1VCX1NFQ09ORF9WQUxVRShWQUxVRSkgKChWQUxVRSkgPD0gUlRDX0FMUk1BU1NSX1NTKQogCi0jZGVmaW5lIElTX1JUQ19BTEFSTV9TVUJfU0VDT05EX01BU0soTUFTSykgICAoKChNQVNLKSA9PSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX0FMTCkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTUFTSykgPT0gUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0XzEpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1BU0spID09IFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF8yKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNQVNLKSA9PSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTRfMykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTUFTSykgPT0gUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0XzQpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1BU0spID09IFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF81KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNQVNLKSA9PSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTRfNikgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTUFTSykgPT0gUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0XzcpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1BU0spID09IFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF84KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNQVNLKSA9PSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTRfOSkgfHwgXAorI2RlZmluZSBJU19SVENfQUxBUk1fU1VCX1NFQ09ORF9NQVNLKE1BU0spICAgKCgoTUFTSykgPT0gUlRDX0FMQVJNU1VCU0VDT05ETUFTS19BTEwpICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNQVNLKSA9PSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTRfMSkgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1BU0spID09IFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF8yKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTUFTSykgPT0gUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0XzMpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNQVNLKSA9PSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTRfNCkgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1BU0spID09IFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF81KSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTUFTSykgPT0gUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0XzYpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNQVNLKSA9PSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTRfNykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1BU0spID09IFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF84KSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTUFTSykgPT0gUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0XzkpICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNQVNLKSA9PSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTRfMTApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1BU0spID09IFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNF8xMSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTUFTSykgPT0gUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0XzEyKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNQVNLKSA9PSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX1NTMTRfMTMpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1BU0spID09IFJUQ19BTEFSTVNVQlNFQ09ORE1BU0tfU1MxNCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTUFTSykgPT0gUlRDX0FMQVJNU1VCU0VDT05ETUFTS19TUzE0KSAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNQVNLKSA9PSBSVENfQUxBUk1TVUJTRUNPTkRNQVNLX05PTkUpKQogLyoqCiAgICogQH0KQEAgLTg3MCwxMyArODk4LDE1IEBACiAgICogQH0KICAgKi8KIAotLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKiogQGRlZmdyb3VwIFJUQ19Qcml2YXRlX0Z1bmN0aW9ucyBSVEMgUHJpdmF0ZSBGdW5jdGlvbnMKICAgKiBAewogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgIFJUQ19FbnRlckluaXRNb2RlKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKLXVpbnQ4X3QgICAgICAgICAgICBSVENfQnl0ZVRvQmNkMih1aW50OF90IFZhbHVlKTsKLXVpbnQ4X3QgICAgICAgICAgICBSVENfQmNkMlRvQnl0ZSh1aW50OF90IFZhbHVlKTsKK0hBTF9TdGF0dXNUeXBlRGVmICBSVENfRXhpdEluaXRNb2RlKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKK3VpbnQ4X3QgICAgICAgICAgICBSVENfQnl0ZVRvQmNkMih1aW50OF90IG51bWJlcik7Cit1aW50OF90ICAgICAgICAgICAgUlRDX0JjZDJUb0J5dGUodWludDhfdCBudW1iZXIpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTg5Myw0ICs5MjMsNCBAQAogfQogI2VuZGlmCiAKLSNlbmRpZiAvKiBfX1NUTTMyRjN4eF9IQUxfUlRDX0ggKi8KKyNlbmRpZiAvKiBTVE0zMkYzeHhfSEFMX1JUQ19IICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmM3h4X2hhbF9ydGNfZXguaCBiL0luYy9zdG0zMmYzeHhfaGFsX3J0Y19leC5oCmluZGV4IGY5NTZjODYuLmY3YTE4MzQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfaGFsX3J0Y19leC5oCisrKyBiL0luYy9zdG0zMmYzeHhfaGFsX3J0Y19leC5oCkBAIC0xNywyNyArMTcsMjggQEAKICAgKi8KIAogLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNpZm5kZWYgX19TVE0zMkYzeHhfSEFMX1JUQ19FWF9ICi0jZGVmaW5lIF9fU1RNMzJGM3h4X0hBTF9SVENfRVhfSAorI2lmbmRlZiBTVE0zMkYzeHhfSEFMX1JUQ19FWF9ICisjZGVmaW5lIFNUTTMyRjN4eF9IQUxfUlRDX0VYX0gKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAjaW5jbHVkZSAic3RtMzJmM3h4X2hhbF9kZWYuaCIKIAogLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjN4eF9IQUxfRHJpdmVyCiAgICogQHsKICAgKi8KIAotLyoqIEBkZWZncm91cCBSVENFeCBSVENFeAorLyoqIEBhZGR0b2dyb3VwIFJUQ0V4CiAgICogQHsKICAgKi8KIAogLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyoqIEBkZWZncm91cCBSVENFeF9FeHBvcnRlZF9UeXBlcyBSVEMgRXh0ZW5kZWQgRXhwb3J0ZWQgVHlwZXMKKy8qKiBAZGVmZ3JvdXAgUlRDRXhfRXhwb3J0ZWRfVHlwZXMgUlRDRXggRXhwb3J0ZWQgVHlwZXMKICAgKiBAewogICAqLwogCkBAIC00NywxMCArNDgsMTAgQEAKIHR5cGVkZWYgc3RydWN0CiB7CiAgIHVpbnQzMl90IFRhbXBlcjsgICAgICAgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFRhbXBlciBQaW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmICBSVENFeF9UYW1wZXJfUGluc19EZWZpbml0aW9ucyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBSVENFeF9UYW1wZXJfUGluX0RlZmluaXRpb25zICovCiAKICAgdWludDMyX3QgVHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgVGFtcGVyIFRyaWdnZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmICBSVENFeF9UYW1wZXJfVHJpZ2dlcl9EZWZpbml0aW9ucyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBSVENFeF9UYW1wZXJfVHJpZ2dlcl9EZWZpbml0aW9ucyAqLwogCiAgIHVpbnQzMl90IEZpbHRlcjsgICAgICAgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFJUQyBGaWx0ZXIgVGFtcGVyLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBSVENFeF9UYW1wZXJfRmlsdGVyX0RlZmluaXRpb25zICovCkBAIC02Miw3ICs2Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJUQ0V4X1RhbXBlcl9QaW5fUHJlY2hhcmdlX0R1cmF0aW9uX0RlZmluaXRpb25zICovCiAKICAgdWludDMyX3QgVGFtcGVyUHVsbFVwOyAgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgVGFtcGVyIFB1bGxVcCAuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJUQ0V4X1RhbXBlcl9QdWxsX1VQX0RlZmluaXRpb25zICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJUQ0V4X1RhbXBlcl9QdWxsX1VwX0RlZmluaXRpb25zICovCiAKICAgdWludDMyX3QgVGltZVN0YW1wT25UYW1wZXJEZXRlY3Rpb247ICAvKiE8IFNwZWNpZmllcyB0aGUgVGltZVN0YW1wT25UYW1wZXJEZXRlY3Rpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJUQ0V4X1RhbXBlcl9UaW1lU3RhbXBPblRhbXBlckRldGVjdGlvbl9EZWZpbml0aW9ucyAqLwpAQCAtNzIsNzIgKzczLDU3IEBACiAgICovCiAKIC8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGRlZmdyb3VwIFJUQ0V4X0V4cG9ydGVkX0NvbnN0YW50cyBSVEMgRXh0ZW5kZWQgRXhwb3J0ZWQgQ29uc3RhbnRzCisKKy8qKiBAZGVmZ3JvdXAgUlRDRXhfRXhwb3J0ZWRfQ29uc3RhbnRzIFJUQ0V4IEV4cG9ydGVkIENvbnN0YW50cwogICAqIEB7CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUlRDRXhfT3V0cHV0X3NlbGVjdGlvbl9EZWZpbml0aW9ucyBSVEMgRXh0ZW5kZWQgT3V0cHV0IFNlbGVjdGlvbiBEZWZpbml0aW9uCisvKiogQGRlZmdyb3VwIFJUQ0V4X0JhY2t1cF9SZWdpc3RlcnNfRGVmaW5pdGlvbnMgUlRDRXggQmFja3VwIFJlZ2lzdGVycyBEZWZpbml0aW9ucwogICAqIEB7CiAgICovCi0jZGVmaW5lIFJUQ19PVVRQVVRfRElTQUJMRSAgICAgICAgICAgICAweDAwMDAwMDAwVQotI2RlZmluZSBSVENfT1VUUFVUX0FMQVJNQSAgICAgICAgICAgICAgUlRDX0NSX09TRUxfMAotI2RlZmluZSBSVENfT1VUUFVUX0FMQVJNQiAgICAgICAgICAgICAgUlRDX0NSX09TRUxfMQotI2RlZmluZSBSVENfT1VUUFVUX1dBS0VVUCAgICAgICAgICAgICAgUlRDX0NSX09TRUwKLS8qKgotICAqIEB9Ci0gICovCi0KLS8qKiBAZGVmZ3JvdXAgUlRDRXhfQmFja3VwX1JlZ2lzdGVyc19EZWZpbml0aW9ucyBSVEMgRXh0ZW5kZWQgQmFja3VwIFJlZ2lzdGVycyBEZWZpbml0aW9uCi0gICogQHsKLSAgKi8KLSNpZiBSVENfQktQX05VTUJFUiA+IDBVCi0jZGVmaW5lIFJUQ19CS1BfRFIwICAweDAwMDAwMDAwVQotI2RlZmluZSBSVENfQktQX0RSMSAgMHgwMDAwMDAwMVUKLSNkZWZpbmUgUlRDX0JLUF9EUjIgIDB4MDAwMDAwMDJVCi0jZGVmaW5lIFJUQ19CS1BfRFIzICAweDAwMDAwMDAzVQotI2RlZmluZSBSVENfQktQX0RSNCAgMHgwMDAwMDAwNFUKLSNlbmRpZiAvKiBSVENfQktQX05VTUJFUiA+IDBVICovCi0KKyNkZWZpbmUgUlRDX0JLUF9EUjAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVCisjZGVmaW5lIFJUQ19CS1BfRFIxICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVQorI2RlZmluZSBSVENfQktQX0RSMiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlUKKyNkZWZpbmUgUlRDX0JLUF9EUjMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDNVCisjZGVmaW5lIFJUQ19CS1BfRFI0ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VQogI2lmIFJUQ19CS1BfTlVNQkVSID4gNVUKLSNkZWZpbmUgUlRDX0JLUF9EUjUgIDB4MDAwMDAwMDVVCi0jZGVmaW5lIFJUQ19CS1BfRFI2ICAweDAwMDAwMDA2VQotI2RlZmluZSBSVENfQktQX0RSNyAgMHgwMDAwMDAwN1UKLSNkZWZpbmUgUlRDX0JLUF9EUjggIDB4MDAwMDAwMDhVCi0jZGVmaW5lIFJUQ19CS1BfRFI5ICAweDAwMDAwMDA5VQotI2RlZmluZSBSVENfQktQX0RSMTAgMHgwMDAwMDAwQVUKLSNkZWZpbmUgUlRDX0JLUF9EUjExIDB4MDAwMDAwMEJVCi0jZGVmaW5lIFJUQ19CS1BfRFIxMiAweDAwMDAwMDBDVQotI2RlZmluZSBSVENfQktQX0RSMTMgMHgwMDAwMDAwRFUKLSNkZWZpbmUgUlRDX0JLUF9EUjE0IDB4MDAwMDAwMEVVCi0jZGVmaW5lIFJUQ19CS1BfRFIxNSAweDAwMDAwMDBGVQotI2VuZGlmIC8qIFJUQ19CS1BfTlVNQkVSID4gNVUgKi8KLQorI2RlZmluZSBSVENfQktQX0RSNSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNVUKKyNkZWZpbmUgUlRDX0JLUF9EUjYgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDZVCisjZGVmaW5lIFJUQ19CS1BfRFI3ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3VQorI2RlZmluZSBSVENfQktQX0RSOCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFUKKyNkZWZpbmUgUlRDX0JLUF9EUjkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDlVCisjZGVmaW5lIFJUQ19CS1BfRFIxMCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBVQorI2RlZmluZSBSVENfQktQX0RSMTEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQlUKKyNkZWZpbmUgUlRDX0JLUF9EUjEyICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMENVCisjZGVmaW5lIFJUQ19CS1BfRFIxMyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBEVQorI2RlZmluZSBSVENfQktQX0RSMTQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRVUKKyNkZWZpbmUgUlRDX0JLUF9EUjE1ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEZVCiAjaWYgUlRDX0JLUF9OVU1CRVIgPiAxNlUKLSNkZWZpbmUgUlRDX0JLUF9EUjE2IDB4MDAwMDAwMTBVCi0jZGVmaW5lIFJUQ19CS1BfRFIxNyAweDAwMDAwMDExVQotI2RlZmluZSBSVENfQktQX0RSMTggMHgwMDAwMDAxMlUKLSNkZWZpbmUgUlRDX0JLUF9EUjE5IDB4MDAwMDAwMTNVCi0jZW5kaWYgLyogUlRDX0JLUF9OVU1CRVIgPiAxNlUgKi8KLQorI2RlZmluZSBSVENfQktQX0RSMTYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFUKKyNkZWZpbmUgUlRDX0JLUF9EUjE3ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTFVCisjZGVmaW5lIFJUQ19CS1BfRFIxOCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyVQorI2RlZmluZSBSVENfQktQX0RSMTkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxM1UKICNpZiBSVENfQktQX05VTUJFUiA+IDIwVQotI2RlZmluZSBSVENfQktQX0RSMjAgMHgwMDAwMDAxNFUKLSNkZWZpbmUgUlRDX0JLUF9EUjIxIDB4MDAwMDAwMTVVCi0jZGVmaW5lIFJUQ19CS1BfRFIyMiAweDAwMDAwMDE2VQotI2RlZmluZSBSVENfQktQX0RSMjMgMHgwMDAwMDAxN1UKLSNkZWZpbmUgUlRDX0JLUF9EUjI0IDB4MDAwMDAwMThVCi0jZGVmaW5lIFJUQ19CS1BfRFIyNSAweDAwMDAwMDE5VQotI2RlZmluZSBSVENfQktQX0RSMjYgMHgwMDAwMDAxQVUKLSNkZWZpbmUgUlRDX0JLUF9EUjI3IDB4MDAwMDAwMUJVCi0jZGVmaW5lIFJUQ19CS1BfRFIyOCAweDAwMDAwMDFDVQotI2RlZmluZSBSVENfQktQX0RSMjkgMHgwMDAwMDAxRFUKLSNkZWZpbmUgUlRDX0JLUF9EUjMwIDB4MDAwMDAwMUVVCi0jZGVmaW5lIFJUQ19CS1BfRFIzMSAweDAwMDAwMDFGVQorI2RlZmluZSBSVENfQktQX0RSMjAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNFUKKyNkZWZpbmUgUlRDX0JLUF9EUjIxICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTVVCisjZGVmaW5lIFJUQ19CS1BfRFIyMiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE2VQorI2RlZmluZSBSVENfQktQX0RSMjMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxN1UKKyNkZWZpbmUgUlRDX0JLUF9EUjI0ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMThVCisjZGVmaW5lIFJUQ19CS1BfRFIyNSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5VQorI2RlZmluZSBSVENfQktQX0RSMjYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQVUKKyNkZWZpbmUgUlRDX0JLUF9EUjI3ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUJVCisjZGVmaW5lIFJUQ19CS1BfRFIyOCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDVQorI2RlZmluZSBSVENfQktQX0RSMjkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRFUKKyNkZWZpbmUgUlRDX0JLUF9EUjMwICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUVVCisjZGVmaW5lIFJUQ19CS1BfRFIzMSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGVQogI2VuZGlmIC8qIFJUQ19CS1BfTlVNQkVSID4gMjBVICovCisjZW5kaWYgLyogUlRDX0JLUF9OVU1CRVIgPiAxNlUgKi8KKyNlbmRpZiAvKiBSVENfQktQX05VTUJFUiA+ICA1VSAqLwogLyoqCiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBSVENFeF9UaW1lX1N0YW1wX0VkZ2VzX2RlZmluaXRpb25zIFJUQyBFeHRlbmRlZCBUaW1lIFN0YW1wIEVkZ2VzIGRlZmluaXRpb24KKy8qKiBAZGVmZ3JvdXAgUlRDRXhfVGltZXN0YW1wX0VkZ2VzX0RlZmluaXRpb25zIFJUQ0V4IFRpbWVzdGFtcCBFZGdlcyBEZWZpbml0aW9ucwogICAqIEB7CiAgICovCiAjZGVmaW5lIFJUQ19USU1FU1RBTVBFREdFX1JJU0lORyAgICAgICAgICAweDAwMDAwMDAwVQpAQCAtMTQ2LDE1ICsxMzIsMTUgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJUQ0V4X1RpbWVTdGFtcF9QaW5fU2VsZWN0aW9ucyBSVEMgRXh0ZW5kZWQgVGltZVN0YW1wIFBpbiBTZWxlY3Rpb24KKy8qKiBAZGVmZ3JvdXAgUlRDRXhfVGltZXN0YW1wX1Bpbl9TZWxlY3Rpb24gUlRDIFRpbWVzdGFtcCBQaW4gU2VsZWN0aW9uCiAgICogQHsKICAgKi8KLSNkZWZpbmUgUlRDX1RJTUVTVEFNUFBJTl9ERUZBVUxUICAgICAgICAgICAgICAweDAwMDAwMDAwVQorI2RlZmluZSBSVENfVElNRVNUQU1QUElOX0RFRkFVTFQgICAgICAgICAgICAweDAwMDAwMDAwVQogLyoqCiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBSVENFeF9UYW1wZXJfUGluc19EZWZpbml0aW9ucyBSVEMgRXh0ZW5kZWQgVGFtcGVyIFBpbnMgRGVmaW5pdGlvbgorLyoqIEBkZWZncm91cCBSVENFeF9UYW1wZXJfUGluX0RlZmluaXRpb25zIFJUQ0V4IFRhbXBlciBQaW5zIERlZmluaXRpb25zCiAgICogQHsKICAgKi8KICNkZWZpbmUgUlRDX1RBTVBFUl8xICAgICAgICAgICAgICAgICAgICBSVENfVEFGQ1JfVEFNUDFFCkBAIC0xNjYsMTM3ICsxNTIsMTUxIEBACiAgICogQH0KICAgKi8KIAorLyoqIEBkZWZncm91cCBSVENFeF9UYW1wZXJfUGluX1NlbGVjdGlvbiBSVEMgdGFtcGVyIFBpbnMgU2VsZWN0aW9uCisgICogQHsKKyAgKi8KKyNkZWZpbmUgUlRDX1RBTVBFUlBJTl9ERUZBVUxUICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUKKy8qKgorICAqIEB9CisgICovCiAKLS8qKiBAZGVmZ3JvdXAgUlRDRXhfVGFtcGVyX1RyaWdnZXJfRGVmaW5pdGlvbnMgUlRDIEV4dGVuZGVkIFRhbXBlciBUcmlnZ2VyIERlZmluaXRpb24KKy8qKiBAZGVmZ3JvdXAgUlRDRXhfVGFtcGVyX0ludGVycnVwdF9EZWZpbml0aW9ucyBSVENFeCBUYW1wZXIgSW50ZXJydXB0IERlZmluaXRpb25zCisgICogQHsKKyAgKi8KKyNkZWZpbmUgUlRDX0lUX1RBTVAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19UQUZDUl9UQU1QSUUgICAvKiE8IEVuYWJsZSBnbG9iYWwgVGFtcGVyIEludGVycnVwdCAgICAgICAgICAgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgUlRDRXhfVGFtcGVyX1RyaWdnZXJfRGVmaW5pdGlvbnMgUlRDRXggVGFtcGVyIFRyaWdnZXJzIERlZmluaXRpb25zCiAgICogQHsKICAgKi8KICNkZWZpbmUgUlRDX1RBTVBFUlRSSUdHRVJfUklTSU5HRURHRSAgICAgICAweDAwMDAwMDAwVQotI2RlZmluZSBSVENfVEFNUEVSVFJJR0dFUl9GQUxMSU5HRURHRSAgICAgIFJUQ19UQUZDUl9UQU1QMVRSRworI2RlZmluZSBSVENfVEFNUEVSVFJJR0dFUl9GQUxMSU5HRURHRSAgICAgIDB4MDAwMDAwMDJVCiAjZGVmaW5lIFJUQ19UQU1QRVJUUklHR0VSX0xPV0xFVkVMICAgICAgICAgUlRDX1RBTVBFUlRSSUdHRVJfUklTSU5HRURHRQogI2RlZmluZSBSVENfVEFNUEVSVFJJR0dFUl9ISUdITEVWRUwgICAgICAgIFJUQ19UQU1QRVJUUklHR0VSX0ZBTExJTkdFREdFCiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJUQ0V4X1RhbXBlcl9GaWx0ZXJfRGVmaW5pdGlvbnMgUlRDIEV4dGVuZGVkIFRhbXBlciBGaWx0ZXIgRGVmaW5pdGlvbgorLyoqIEBkZWZncm91cCBSVENFeF9UYW1wZXJfRmlsdGVyX0RlZmluaXRpb25zIFJUQ0V4IFRhbXBlciBGaWx0ZXIgRGVmaW5pdGlvbnMKICAgKiBAewogICAqLwogI2RlZmluZSBSVENfVEFNUEVSRklMVEVSX0RJU0FCTEUgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAvKiE8IFRhbXBlciBmaWx0ZXIgaXMgZGlzYWJsZWQgKi8KIAotI2RlZmluZSBSVENfVEFNUEVSRklMVEVSXzJTQU1QTEUgICBSVENfVEFGQ1JfVEFNUEZMVF8wICAgICAvKiE8IFRhbXBlciBpcyBhY3RpdmF0ZWQgYWZ0ZXIgMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlY3V0aXZlIHNhbXBsZXMgYXQgdGhlIGFjdGl2ZSBsZXZlbCAqLwotI2RlZmluZSBSVENfVEFNUEVSRklMVEVSXzRTQU1QTEUgICBSVENfVEFGQ1JfVEFNUEZMVF8xICAgICAvKiE8IFRhbXBlciBpcyBhY3RpdmF0ZWQgYWZ0ZXIgNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlY3V0aXZlIHNhbXBsZXMgYXQgdGhlIGFjdGl2ZSBsZXZlbCAqLwotI2RlZmluZSBSVENfVEFNUEVSRklMVEVSXzhTQU1QTEUgICBSVENfVEFGQ1JfVEFNUEZMVCAgICAgICAvKiE8IFRhbXBlciBpcyBhY3RpdmF0ZWQgYWZ0ZXIgOAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlY3V0aXZlIHNhbXBsZXMgYXQgdGhlIGFjdGl2ZSBsZXZlbC4gKi8KKyNkZWZpbmUgUlRDX1RBTVBFUkZJTFRFUl8yU0FNUExFICAgUlRDX1RBRkNSX1RBTVBGTFRfMCAgICAvKiE8IFRhbXBlciBpcyBhY3RpdmF0ZWQgYWZ0ZXIgMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZWN1dGl2ZSBzYW1wbGVzIGF0IHRoZSBhY3RpdmUgbGV2ZWwgKi8KKyNkZWZpbmUgUlRDX1RBTVBFUkZJTFRFUl80U0FNUExFICAgUlRDX1RBRkNSX1RBTVBGTFRfMSAgICAvKiE8IFRhbXBlciBpcyBhY3RpdmF0ZWQgYWZ0ZXIgNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZWN1dGl2ZSBzYW1wbGVzIGF0IHRoZSBhY3RpdmUgbGV2ZWwgKi8KKyNkZWZpbmUgUlRDX1RBTVBFUkZJTFRFUl84U0FNUExFICAgUlRDX1RBRkNSX1RBTVBGTFQgICAgICAvKiE8IFRhbXBlciBpcyBhY3RpdmF0ZWQgYWZ0ZXIgOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZWN1dGl2ZSBzYW1wbGVzIGF0IHRoZSBhY3RpdmUgbGV2ZWwgKi8KKyNkZWZpbmUgUlRDX1RBTVBFUkZJTFRFUl9NQVNLICAgICAgUlRDX1RBRkNSX1RBTVBGTFQgICAgICAvKiE8IE1hc2tpbmcgYWxsIGJpdHMgZXhjZXB0IHRob3NlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIFRBTVBGTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqCiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBSVENFeF9UYW1wZXJfU2FtcGxpbmdfRnJlcXVlbmNpZXNfRGVmaW5pdGlvbnMgUlRDIEV4dGVuZGVkIFRhbXBlciBTYW1wbGluZyBGcmVxdWVuY2llcyBEZWZpbml0aW9uCisvKiogQGRlZmdyb3VwIFJUQ0V4X1RhbXBlcl9TYW1wbGluZ19GcmVxdWVuY2llc19EZWZpbml0aW9ucyBSVENFeCBUYW1wZXIgU2FtcGxpbmcgRnJlcXVlbmNpZXMgRGVmaW5pdGlvbnMKICAgKiBAewogICAqLwotI2RlZmluZSBSVENfVEFNUEVSU0FNUExJTkdGUkVRX1JUQ0NMS19ESVYzMjc2OCAgMHgwMDAwMDAwMFUgICAgICAgICAgIC8qITwgRWFjaCBvZiB0aGUgdGFtcGVyIGlucHV0cyBhcmUgc2FtcGxlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgZnJlcXVlbmN5ID0gIFJUQ0NMSyAvIDMyNzY4VSAqLwotI2RlZmluZSBSVENfVEFNUEVSU0FNUExJTkdGUkVRX1JUQ0NMS19ESVYxNjM4NCAgUlRDX1RBRkNSX1RBTVBGUkVRXzAgIC8qITwgRWFjaCBvZiB0aGUgdGFtcGVyIGlucHV0cyBhcmUgc2FtcGxlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgZnJlcXVlbmN5ID0gIFJUQ0NMSyAvIDE2Mzg0VSAqLwotI2RlZmluZSBSVENfVEFNUEVSU0FNUExJTkdGUkVRX1JUQ0NMS19ESVY4MTkyICAgUlRDX1RBRkNSX1RBTVBGUkVRXzEgIC8qITwgRWFjaCBvZiB0aGUgdGFtcGVyIGlucHV0cyBhcmUgc2FtcGxlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgZnJlcXVlbmN5ID0gIFJUQ0NMSyAvIDgxOTIgICovCi0jZGVmaW5lIFJUQ19UQU1QRVJTQU1QTElOR0ZSRVFfUlRDQ0xLX0RJVjQwOTYgICAoUlRDX1RBRkNSX1RBTVBGUkVRXzAgfCBSVENfVEFGQ1JfVEFNUEZSRVFfMSkgIC8qITwgRWFjaCBvZiB0aGUgdGFtcGVyIGlucHV0cyBhcmUgc2FtcGxlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgZnJlcXVlbmN5ID0gIFJUQ0NMSyAvIDQwOTYgICovCi0jZGVmaW5lIFJUQ19UQU1QRVJTQU1QTElOR0ZSRVFfUlRDQ0xLX0RJVjIwNDggICBSVENfVEFGQ1JfVEFNUEZSRVFfMiAgLyohPCBFYWNoIG9mIHRoZSB0YW1wZXIgaW5wdXRzIGFyZSBzYW1wbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSBmcmVxdWVuY3kgPSAgUlRDQ0xLIC8gMjA0OCAgKi8KLSNkZWZpbmUgUlRDX1RBTVBFUlNBTVBMSU5HRlJFUV9SVENDTEtfRElWMTAyNCAgIChSVENfVEFGQ1JfVEFNUEZSRVFfMCB8IFJUQ19UQUZDUl9UQU1QRlJFUV8yKSAgLyohPCBFYWNoIG9mIHRoZSB0YW1wZXIgaW5wdXRzIGFyZSBzYW1wbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSBmcmVxdWVuY3kgPSAgUlRDQ0xLIC8gMTAyNCAgKi8KLSNkZWZpbmUgUlRDX1RBTVBFUlNBTVBMSU5HRlJFUV9SVENDTEtfRElWNTEyICAgIChSVENfVEFGQ1JfVEFNUEZSRVFfMSB8IFJUQ19UQUZDUl9UQU1QRlJFUV8yKSAgLyohPCBFYWNoIG9mIHRoZSB0YW1wZXIgaW5wdXRzIGFyZSBzYW1wbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSBmcmVxdWVuY3kgPSAgUlRDQ0xLIC8gNTEyICAgKi8KLSNkZWZpbmUgUlRDX1RBTVBFUlNBTVBMSU5HRlJFUV9SVENDTEtfRElWMjU2ICAgIChSVENfVEFGQ1JfVEFNUEZSRVFfMCB8IFJUQ19UQUZDUl9UQU1QRlJFUV8xIHwgUlRDX1RBRkNSX1RBTVBGUkVRXzIpICAvKiE8IEVhY2ggb2YgdGhlIHRhbXBlciBpbnB1dHMgYXJlIHNhbXBsZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhIGZyZXF1ZW5jeSA9ICBSVENDTEsgLyAyNTYgICAqLworI2RlZmluZSBSVENfVEFNUEVSU0FNUExJTkdGUkVRX1JUQ0NMS19ESVYzMjc2OCAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFYWNoIG9mIHRoZSB0YW1wZXIgaW5wdXRzIGFyZSBzYW1wbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgZnJlcXVlbmN5ID0gIFJUQ0NMSyAvIDMyNzY4ICovCisjZGVmaW5lIFJUQ19UQU1QRVJTQU1QTElOR0ZSRVFfUlRDQ0xLX0RJVjE2Mzg0ICBSVENfVEFGQ1JfVEFNUEZSRVFfMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRWFjaCBvZiB0aGUgdGFtcGVyIGlucHV0cyBhcmUgc2FtcGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhIGZyZXF1ZW5jeSA9ICBSVENDTEsgLyAxNjM4NCAqLworI2RlZmluZSBSVENfVEFNUEVSU0FNUExJTkdGUkVRX1JUQ0NMS19ESVY4MTkyICAgUlRDX1RBRkNSX1RBTVBGUkVRXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVhY2ggb2YgdGhlIHRhbXBlciBpbnB1dHMgYXJlIHNhbXBsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSBmcmVxdWVuY3kgPSAgUlRDQ0xLIC8gODE5MiAgKi8KKyNkZWZpbmUgUlRDX1RBTVBFUlNBTVBMSU5HRlJFUV9SVENDTEtfRElWNDA5NiAgIChSVENfVEFGQ1JfVEFNUEZSRVFfMCB8IFJUQ19UQUZDUl9UQU1QRlJFUV8xKSAvKiE8IEVhY2ggb2YgdGhlIHRhbXBlciBpbnB1dHMgYXJlIHNhbXBsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSBmcmVxdWVuY3kgPSAgUlRDQ0xLIC8gNDA5NiAgKi8KKyNkZWZpbmUgUlRDX1RBTVBFUlNBTVBMSU5HRlJFUV9SVENDTEtfRElWMjA0OCAgIFJUQ19UQUZDUl9UQU1QRlJFUV8yICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFYWNoIG9mIHRoZSB0YW1wZXIgaW5wdXRzIGFyZSBzYW1wbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgZnJlcXVlbmN5ID0gIFJUQ0NMSyAvIDIwNDggICovCisjZGVmaW5lIFJUQ19UQU1QRVJTQU1QTElOR0ZSRVFfUlRDQ0xLX0RJVjEwMjQgICAoUlRDX1RBRkNSX1RBTVBGUkVRXzAgfCBSVENfVEFGQ1JfVEFNUEZSRVFfMikgLyohPCBFYWNoIG9mIHRoZSB0YW1wZXIgaW5wdXRzIGFyZSBzYW1wbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgZnJlcXVlbmN5ID0gIFJUQ0NMSyAvIDEwMjQgICovCisjZGVmaW5lIFJUQ19UQU1QRVJTQU1QTElOR0ZSRVFfUlRDQ0xLX0RJVjUxMiAgICAoUlRDX1RBRkNSX1RBTVBGUkVRXzEgfCBSVENfVEFGQ1JfVEFNUEZSRVFfMikgLyohPCBFYWNoIG9mIHRoZSB0YW1wZXIgaW5wdXRzIGFyZSBzYW1wbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgZnJlcXVlbmN5ID0gIFJUQ0NMSyAvIDUxMiAgICovCisjZGVmaW5lIFJUQ19UQU1QRVJTQU1QTElOR0ZSRVFfUlRDQ0xLX0RJVjI1NiAgICBSVENfVEFGQ1JfVEFNUEZSRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRWFjaCBvZiB0aGUgdGFtcGVyIGlucHV0cyBhcmUgc2FtcGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhIGZyZXF1ZW5jeSA9ICBSVENDTEsgLyAyNTYgICAqLworI2RlZmluZSBSVENfVEFNUEVSU0FNUExJTkdGUkVRX1JUQ0NMS19NQVNLICAgICAgUlRDX1RBRkNSX1RBTVBGUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1hc2tpbmcgYWxsIGJpdHMgZXhjZXB0IHRob3NlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCBUQU1QRlJFUSAgICAgICAgICAgICAgICAgICAgICovCiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJUQ0V4X1RhbXBlcl9QaW5fUHJlY2hhcmdlX0R1cmF0aW9uX0RlZmluaXRpb25zIFJUQyBFeHRlbmRlZCBUYW1wZXIgUGluIFByZWNoYXJnZSBEdXJhdGlvbiBEZWZpbml0aW9uCisvKiogQGRlZmdyb3VwIFJUQ0V4X1RhbXBlcl9QaW5fUHJlY2hhcmdlX0R1cmF0aW9uX0RlZmluaXRpb25zIFJUQ0V4IFRhbXBlciBQaW4gUHJlY2hhcmdlIER1cmF0aW9uIERlZmluaXRpb25zCiAgICogQHsKICAgKi8KLSNkZWZpbmUgUlRDX1RBTVBFUlBSRUNIQVJHRURVUkFUSU9OXzFSVENDTEsgMHgwMDAwMDAwMFUgICAgICAgICAgIC8qITwgVGFtcGVyIHBpbnMgYXJlIHByZS1jaGFyZ2VkIGJlZm9yZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nIGR1cmluZyAxIFJUQ0NMSyBjeWNsZSAqLwotI2RlZmluZSBSVENfVEFNUEVSUFJFQ0hBUkdFRFVSQVRJT05fMlJUQ0NMSyBSVENfVEFGQ1JfVEFNUFBSQ0hfMCAgLyohPCBUYW1wZXIgcGlucyBhcmUgcHJlLWNoYXJnZWQgYmVmb3JlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmcgZHVyaW5nIDIgUlRDQ0xLIGN5Y2xlcyAqLwotI2RlZmluZSBSVENfVEFNUEVSUFJFQ0hBUkdFRFVSQVRJT05fNFJUQ0NMSyBSVENfVEFGQ1JfVEFNUFBSQ0hfMSAgLyohPCBUYW1wZXIgcGlucyBhcmUgcHJlLWNoYXJnZWQgYmVmb3JlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmcgZHVyaW5nIDQgUlRDQ0xLIGN5Y2xlcyAqLwotI2RlZmluZSBSVENfVEFNUEVSUFJFQ0hBUkdFRFVSQVRJT05fOFJUQ0NMSyAoUlRDX1RBRkNSX1RBTVBQUkNIXzAgfCBSVENfVEFGQ1JfVEFNUFBSQ0hfMSkgIC8qITwgVGFtcGVyIHBpbnMgYXJlIHByZS1jaGFyZ2VkIGJlZm9yZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nIGR1cmluZyA4IFJUQ0NMSyBjeWNsZXMgKi8KKyNkZWZpbmUgUlRDX1RBTVBFUlBSRUNIQVJHRURVUkFUSU9OXzFSVENDTEsgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgIC8qITwgVGFtcGVyIHBpbnMgYXJlIHByZS1jaGFyZ2VkIGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmcgZHVyaW5nIDEgUlRDQ0xLIGN5Y2xlICAqLworI2RlZmluZSBSVENfVEFNUEVSUFJFQ0hBUkdFRFVSQVRJT05fMlJUQ0NMSyAgICAgUlRDX1RBRkNSX1RBTVBQUkNIXzAgICAvKiE8IFRhbXBlciBwaW5zIGFyZSBwcmUtY2hhcmdlZCBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nIGR1cmluZyAyIFJUQ0NMSyBjeWNsZXMgKi8KKyNkZWZpbmUgUlRDX1RBTVBFUlBSRUNIQVJHRURVUkFUSU9OXzRSVENDTEsgICAgIFJUQ19UQUZDUl9UQU1QUFJDSF8xICAgLyohPCBUYW1wZXIgcGlucyBhcmUgcHJlLWNoYXJnZWQgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGluZyBkdXJpbmcgNCBSVENDTEsgY3ljbGVzICovCisjZGVmaW5lIFJUQ19UQU1QRVJQUkVDSEFSR0VEVVJBVElPTl84UlRDQ0xLICAgICBSVENfVEFGQ1JfVEFNUFBSQ0ggICAgIC8qITwgVGFtcGVyIHBpbnMgYXJlIHByZS1jaGFyZ2VkIGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmcgZHVyaW5nIDggUlRDQ0xLIGN5Y2xlcyAqLworI2RlZmluZSBSVENfVEFNUEVSUFJFQ0hBUkdFRFVSQVRJT05fTUFTSyAgICAgICAgUlRDX1RBRkNSX1RBTVBQUkNIICAgICAvKiE8IE1hc2tpbmcgYWxsIGJpdHMgZXhjZXB0IHRob3NlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCBUQU1QUFJDSCAgICAgICAgICAgICAgICAgICovCiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJUQ0V4X1RhbXBlcl9UaW1lU3RhbXBPblRhbXBlckRldGVjdGlvbl9EZWZpbml0aW9ucyBSVEMgRXh0ZW5kZWQgVGFtcGVyIFRpbWVTdGFtcE9uVGFtcGVyRGV0ZWN0aW9uIERlZmluaXRpb24KKy8qKiBAZGVmZ3JvdXAgIFJUQ0V4X1RhbXBlcl9QdWxsX1VwX0RlZmluaXRpb25zIFJUQ0V4IFRhbXBlciBQdWxsIFVwIERlZmluaXRpb25zCiAgICogQHsKICAgKi8KLSNkZWZpbmUgUlRDX1RJTUVTVEFNUE9OVEFNUEVSREVURUNUSU9OX0VOQUJMRSAgKCh1aW50MzJfdClSVENfVEFGQ1JfVEFNUFRTKSAgLyohPCBUaW1lU3RhbXAgb24gVGFtcGVyIERldGVjdGlvbiBldmVudCBzYXZlZCAqLworI2RlZmluZSBSVENfVEFNUEVSX1BVTExVUF9FTkFCTEUgIDB4MDAwMDAwMDBVICAgICAgICAgICAvKiE8IFRhbXBlciBwaW5zIGFyZSBwcmUtY2hhcmdlZCBiZWZvcmUgc2FtcGxpbmcgICAgICovCisjZGVmaW5lIFJUQ19UQU1QRVJfUFVMTFVQX0RJU0FCTEUgUlRDX1RBRkNSX1RBTVBQVURJUyAgIC8qITwgVGFtcGVyIHBpbnMgYXJlIG5vdCBwcmUtY2hhcmdlZCBiZWZvcmUgc2FtcGxpbmcgKi8KKyNkZWZpbmUgUlRDX1RBTVBFUl9QVUxMVVBfTUFTSyAgICBSVENfVEFGQ1JfVEFNUFBVRElTICAgLyohPCBNYXNraW5nIGFsbCBiaXRzIGV4Y2VwdCBiaXQgVEFNUFBVRElTICAgICAgICAgICAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBSVENFeF9UYW1wZXJfVGltZVN0YW1wT25UYW1wZXJEZXRlY3Rpb25fRGVmaW5pdGlvbnMgUlRDRXggVGFtcGVyIFRpbWVTdGFtcCBPbiBUYW1wZXIgRGV0ZWN0aW9uIERlZmluaXRpb25zCisgICogQHsKKyAgKi8KKyNkZWZpbmUgUlRDX1RJTUVTVEFNUE9OVEFNUEVSREVURUNUSU9OX0VOQUJMRSAgUlRDX1RBRkNSX1RBTVBUUyAgLyohPCBUaW1lU3RhbXAgb24gVGFtcGVyIERldGVjdGlvbiBldmVudCBzYXZlZCAgICAgICAgKi8KICNkZWZpbmUgUlRDX1RJTUVTVEFNUE9OVEFNUEVSREVURUNUSU9OX0RJU0FCTEUgMHgwMDAwMDAwMFUgICAgICAgLyohPCBUaW1lU3RhbXAgb24gVGFtcGVyIERldGVjdGlvbiBldmVudCBpcyBub3Qgc2F2ZWQgKi8KKyNkZWZpbmUgUlRDX1RJTUVTVEFNUE9OVEFNUEVSREVURUNUSU9OX01BU0sgICAgUlRDX1RBRkNSX1RBTVBUUyAgLyohPCBNYXNraW5nIGFsbCBiaXRzIGV4Y2VwdCBiaXQgVEFNUFRTICAgICAgICAgICAgICAgKi8KIC8qKgogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUlRDRXhfVGFtcGVyX1B1bGxfVVBfRGVmaW5pdGlvbnMgUlRDIEV4dGVuZGVkIFRhbXBlciBQdWxsIFVQIERlZmluaXRpb24KLSAgKiBAewotICAqLwotI2RlZmluZSBSVENfVEFNUEVSX1BVTExVUF9FTkFCTEUgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRhbXBlciBwaW5zIGFyZSBwcmUtY2hhcmdlZCBiZWZvcmUgc2FtcGxpbmcgICovCi0jZGVmaW5lIFJUQ19UQU1QRVJfUFVMTFVQX0RJU0FCTEUgKCh1aW50MzJfdClSVENfVEFGQ1JfVEFNUFBVRElTKSAgIC8qITwgVGFtcGVyIHBpbnMgYXJlIG5vdCBwcmUtY2hhcmdlZCBiZWZvcmUgc2FtcGxpbmcgKi8KLS8qKgotICAqIEB9Ci0gICovCi0KLS8qKiBAZGVmZ3JvdXAgUlRDRXhfV2FrZXVwX1RpbWVyX0RlZmluaXRpb25zIFJUQyBFeHRlbmRlZCBXYWtldXAgVGltZXIgRGVmaW5pdGlvbgorLyoqIEBkZWZncm91cCBSVENFeF9XYWtldXBfVGltZXJfRGVmaW5pdGlvbnMgUlRDRXggV2FrZXVwIFRpbWVyIERlZmluaXRpb25zCiAgICogQHsKICAgKi8KICNkZWZpbmUgUlRDX1dBS0VVUENMT0NLX1JUQ0NMS19ESVYxNiAgICAgICAgMHgwMDAwMDAwMFUKICNkZWZpbmUgUlRDX1dBS0VVUENMT0NLX1JUQ0NMS19ESVY4ICAgICAgICAgUlRDX0NSX1dVQ0tTRUxfMAogI2RlZmluZSBSVENfV0FLRVVQQ0xPQ0tfUlRDQ0xLX0RJVjQgICAgICAgICBSVENfQ1JfV1VDS1NFTF8xCiAjZGVmaW5lIFJUQ19XQUtFVVBDTE9DS19SVENDTEtfRElWMiAgICAgICAgIChSVENfQ1JfV1VDS1NFTF8wIHwgUlRDX0NSX1dVQ0tTRUxfMSkKLSNkZWZpbmUgUlRDX1dBS0VVUENMT0NLX0NLX1NQUkVfMTZCSVRTICAgICAgKFJUQ19DUl9XVUNLU0VMXzIpCisjZGVmaW5lIFJUQ19XQUtFVVBDTE9DS19DS19TUFJFXzE2QklUUyAgICAgIFJUQ19DUl9XVUNLU0VMXzIKICNkZWZpbmUgUlRDX1dBS0VVUENMT0NLX0NLX1NQUkVfMTdCSVRTICAgICAgKFJUQ19DUl9XVUNLU0VMXzEgfCBSVENfQ1JfV1VDS1NFTF8yKQogLyoqCiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBSVENFeF9TbW9vdGhfY2FsaWJfcGVyaW9kX0RlZmluaXRpb25zIFJUQyBFeHRlbmRlZCBTbW9vdGggY2FsaWIgcGVyaW9kIERlZmluaXRpb24KKy8qKiBAZGVmZ3JvdXAgUlRDRXhfU21vb3RoX2NhbGliX3BlcmlvZF9EZWZpbml0aW9ucyBSVENFeCBTbW9vdGggQ2FsaWIgUGVyaW9kIERlZmluaXRpb25zCiAgICogQHsKICAgKi8KLSNkZWZpbmUgUlRDX1NNT09USENBTElCX1BFUklPRF8zMlNFQyAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgLyohPCAgSWYgUlRDQ0xLID0gMzI3NjggSHosIFNtb290aCBjYWxpYmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZCBpcyAzMnMsICBlbHNlIDJleHAyMCBSVENDTEsgc2Vjb25kcyAqLwotI2RlZmluZSBSVENfU01PT1RIQ0FMSUJfUEVSSU9EXzE2U0VDICAgUlRDX0NBTFJfQ0FMVzE2ICAgICAgICAvKiE8ICBJZiBSVENDTEsgPSAzMjc2OCBIeiwgU21vb3RoIGNhbGliYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyaW9kIGlzIDE2cywgZWxzZSAyZXhwMTkgUlRDQ0xLIHNlY29uZHMgKi8KLSNkZWZpbmUgUlRDX1NNT09USENBTElCX1BFUklPRF84U0VDICAgIFJUQ19DQUxSX0NBTFc4ICAgICAgICAgLyohPCAgSWYgUlRDQ0xLID0gMzI3NjggSHosIFNtb290aCBjYWxpYmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZCBpcyA4cywgZWxzZSAyZXhwMTggUlRDQ0xLIHNlY29uZHMgKi8KKyNkZWZpbmUgUlRDX1NNT09USENBTElCX1BFUklPRF8zMlNFQyAgIDB4MDAwMDAwMDBVICAgICAgLyohPCBJZiBSVENDTEsgPSAzMjc2OCBIeiwgc21vb3RoIGNhbGlicmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZCBpcyAzMnMsIG90aGVyd2lzZSAyXjIwIFJUQ0NMSyBwdWxzZXMgKi8KKyNkZWZpbmUgUlRDX1NNT09USENBTElCX1BFUklPRF8xNlNFQyAgIFJUQ19DQUxSX0NBTFcxNiAgLyohPCBJZiBSVENDTEsgPSAzMjc2OCBIeiwgc21vb3RoIGNhbGlicmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZCBpcyAxNnMsIG90aGVyd2lzZSAyXjE5IFJUQ0NMSyBwdWxzZXMgKi8KKyNkZWZpbmUgUlRDX1NNT09USENBTElCX1BFUklPRF84U0VDICAgIFJUQ19DQUxSX0NBTFc4ICAgLyohPCBJZiBSVENDTEsgPSAzMjc2OCBIeiwgc21vb3RoIGNhbGlicmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZCBpcyA4cywgb3RoZXJ3aXNlIDJeMTggUlRDQ0xLIHB1bHNlcyAgKi8KIC8qKgogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUlRDRXhfU21vb3RoX2NhbGliX1BsdXNfcHVsc2VzX0RlZmluaXRpb25zIFJUQyBFeHRlbmRlZCBTbW9vdGggY2FsaWIgUGx1cyBwdWxzZXMgRGVmaW5pdGlvbgorLyoqIEBkZWZncm91cCBSVENFeF9TbW9vdGhfY2FsaWJfUGx1c19wdWxzZXNfRGVmaW5pdGlvbnMgUlRDRXggU21vb3RoIENhbGliIFBsdXMgUHVsc2VzIERlZmluaXRpb25zCiAgICogQHsKICAgKi8KLSNkZWZpbmUgUlRDX1NNT09USENBTElCX1BMVVNQVUxTRVNfUkVTRVQgIDB4MDAwMDAwMDBVICAgICAgICAgLyohPCAgVGhlIG51bWJlciBvZiBSVENDTEsgcHVsc2VzIHN1YmJzdGl0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGEgMzItc2Vjb25kIHdpbmRvdyA9ICAgQ0FMTVs4OjBdICovCi0jZGVmaW5lIFJUQ19TTU9PVEhDQUxJQl9QTFVTUFVMU0VTX1NFVCAgICBSVENfQ0FMUl9DQUxQICAgICAgIC8qITwgIFRoZSBudW1iZXIgb2YgUlRDQ0xLIHB1bHNlcyBhZGRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSBYIC1zZWNvbmQgd2luZG93ID0gWSAtIENBTE1bODowXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIFkgPSA1MTJVLCAyNTZVLCAxMjggd2hlbiBYID0gMzJVLCAxNlUsIDhVICovCisjZGVmaW5lIFJUQ19TTU9PVEhDQUxJQl9QTFVTUFVMU0VTX1NFVCAgICBSVENfQ0FMUl9DQUxQICAgICAgICAgICAvKiE8IFRoZSBudW1iZXIgb2YgUlRDQ0xLIHB1bHNlcyBhZGRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGEgWCAtc2Vjb25kIHdpbmRvdyA9IFkgLSBDQUxNWzg6MF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggWSA9IDUxMiwgMjU2LCAxMjggd2hlbiBYID0gMzIsIDE2LCA4ICovCisjZGVmaW5lIFJUQ19TTU9PVEhDQUxJQl9QTFVTUFVMU0VTX1JFU0VUICAweDAwMDAwMDAwVSAgICAgICAgICAgICAvKiE8IFRoZSBudW1iZXIgb2YgUlRDQ0xLIHB1bHNlcyBzdWJic3RpdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSAzMi1zZWNvbmQgd2luZG93ID0gQ0FMTVs4OjBdICovCiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJUQ0V4X0NhbGliX091dHB1dF9zZWxlY3Rpb25fRGVmaW5pdGlvbnMgUlRDIEV4dGVuZGVkIENhbGliIE91dHB1dCBzZWxlY3Rpb24gRGVmaW5pdGlvbgotICogQHsKLSAqLwotI2RlZmluZSBSVENfQ0FMSUJPVVRQVVRfNTEySFogICAgICAgICAgICAweDAwMDAwMDAwVQotI2RlZmluZSBSVENfQ0FMSUJPVVRQVVRfMUhaICAgICAgICAgICAgICBSVENfQ1JfQ09TRUwKLS8qKgotICAqIEB9Ci0gICovCi0KLS8qKiBAZGVmZ3JvdXAgUlRDRXhfQWRkXzFfU2Vjb25kX1BhcmFtZXRlcl9EZWZpbml0aW9uIFJUQyBFeHRlbmRlZCBBZGQgMSBTZWNvbmQgUGFyYW1ldGVyIERlZmluaXRpb24KKy8qKiBAZGVmZ3JvdXAgUlRDRXhfQWRkXzFfU2Vjb25kX1BhcmFtZXRlcl9EZWZpbml0aW9ucyBSVENFeCBBZGQgMSBTZWNvbmQgUGFyYW1ldGVyIERlZmluaXRpb25zCiAgICogQHsKICAgKi8KICNkZWZpbmUgUlRDX1NISUZUQUREMVNfUkVTRVQgICAgICAweDAwMDAwMDAwVQpAQCAtMzA1LDE5ICszMDUsMzEgQEAKICAgKiBAfQogICAqLwogCisvKiogQGRlZmdyb3VwIFJUQ0V4X0NhbGliX091dHB1dF9zZWxlY3Rpb25fRGVmaW5pdGlvbnMgUlRDRXggQ2FsaWIgT3V0cHV0IFNlbGVjdGlvbiBEZWZpbml0aW9ucworICAqIEB7CisgICovCisjZGVmaW5lIFJUQ19DQUxJQk9VVFBVVF81MTJIWiAgICAgICAgICAgIDB4MDAwMDAwMDBVCisjZGVmaW5lIFJUQ19DQUxJQk9VVFBVVF8xSFogICAgICAgICAgICAgIFJUQ19DUl9DT1NFTAogLyoqCiAgICogQH0KICAgKi8KIAotLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAZGVmZ3JvdXAgUlRDRXhfRXhwb3J0ZWRfTWFjcm9zIFJUQyBFeHRlbmRlZCBFeHBvcnRlZCBNYWNyb3MKKy8qKgorICAqIEB9CisgICovCisKKy8qIEV4cG9ydGVkIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKiBAZGVmZ3JvdXAgUlRDRXhfRXhwb3J0ZWRfTWFjcm9zIFJUQ0V4IEV4cG9ydGVkIE1hY3JvcwogICAqIEB7CiAgICovCiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVdBS0VVUFRJTUVSLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAZGVmZ3JvdXAgUlRDRXhfV2FrZVVwX1RpbWVyIFJUQyBFeHRlbmRlZCBXYWtlVXAgVGltZXIKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVdBS0VVUFRJTUVSLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKiBAZGVmZ3JvdXAgUlRDRXhfV2FrZVVwX1RpbWVyIFJUQ0V4IFdha2VVcCBUaW1lcgogICAqIEB7CiAgICovCisKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSBSVEMgV2FrZVVwIFRpbWVyIHBlcmlwaGVyYWwuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KQEAgLTMyNiwxNzkgKzMzOCwxODYgQEAKICNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VOQUJMRShfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IgfD0gKFJUQ19DUl9XVVRFKSkKIAogLyoqCi0gICogQGJyaWVmICBEaXNhYmxlIHRoZSBSVEMgV2FrZVVwIFRpbWVyIHBlcmlwaGVyYWwuCisgICogQGJyaWVmICBEaXNhYmxlIHRoZSBSVEMgV2FrZXVwIFRpbWVyIHBlcmlwaGVyYWwuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0RJU0FCTEUoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IgJj0gfihSVENfQ1JfV1VURSkpCiAKIC8qKgotICAqIEBicmllZiAgRW5hYmxlIHRoZSBSVEMgV2FrZVVwVGltZXIgaW50ZXJydXB0LgorICAqIEBicmllZiAgRW5hYmxlIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGludGVycnVwdC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgotICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIFJUQyBXYWtlVXBUaW1lciBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkLgorICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIFJUQyBXYWtldXAgVGltZXIgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKLSAgKiAgICAgICAgICAgIEBhcmcgUlRDX0lUX1dVVDogV2FrZVVwVGltZXIgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIFJUQ19JVF9XVVQ6IFdha2V1cCBUaW1lciBpbnRlcnJ1cHQKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VOQUJMRV9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IgfD0gKF9fSU5URVJSVVBUX18pKQogCiAvKioKLSAgKiBAYnJpZWYgIERpc2FibGUgdGhlIFJUQyBXYWtlVXBUaW1lciBpbnRlcnJ1cHQuCisgICogQGJyaWVmICBEaXNhYmxlIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGludGVycnVwdC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgotICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIFJUQyBXYWtlVXBUaW1lciBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBkaXNhYmxlZC4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6Ci0gICogICAgICAgICAgICBAYXJnIFJUQ19JVF9XVVQ6IFdha2VVcFRpbWVyIGludGVycnVwdAorICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfV1VUOiBXYWtldXAgVGltZXIgaW50ZXJydXB0CiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9ESVNBQkxFX0lUKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSICY9IH4oX19JTlRFUlJVUFRfXykpCiAKIC8qKgotICAqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIFJUQyBXYWtlVXBUaW1lciBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkIG9yIG5vdC4KKyAgKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBSVEMgV2FrZXVwIFRpbWVyIGludGVycnVwdCBoYXMgb2NjdXJyZWQgb3Igbm90LgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCi0gICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgUlRDIFdha2VVcFRpbWVyIGludGVycnVwdCB0byBjaGVjay4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGludGVycnVwdCB0byBjaGVjay4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKLSAgKiAgICAgICAgICAgIEBhcmcgUlRDX0lUX1dVVDogIFdha2VVcFRpbWVyIGludGVycnVwdAorICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfV1VUOiBXYWtldXAgVGltZXIgaW50ZXJydXB0CiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgICAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgJiAoKF9fSU5URVJSVVBUX18pPj4gNFUpKSAhPSBSRVNFVCkgPyBTRVQgOiBSRVNFVCkKKyNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICAgICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSKSAmICgoX19JTlRFUlJVUFRfXykgPj4gNFUpKSAhPSAwVSkgPyAxVSA6IDBVKQogCiAvKioKLSAgKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBSVEMgV2FrZSBVcCB0aW1lciBpbnRlcnJ1cHQgaGFzIGJlZW4gZW5hYmxlZCBvciBub3QuCisgICogQGJyaWVmICBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgUlRDIFdha2V1cCB0aW1lciBpbnRlcnJ1cHQgaGFzIGJlZW4gZW5hYmxlZCBvciBub3QuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KLSAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgV2FrZSBVcCB0aW1lciBpbnRlcnJ1cHQgc291cmNlcyB0byBjaGVjay4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgV2FrZXVwIHRpbWVyIGludGVycnVwdCBzb3VyY2VzIHRvIGNoZWNrLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgotICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfV1VUOiAgV2FrZVVwVGltZXIgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIFJUQ19JVF9XVVQ6IFdha2VVcFRpbWVyIGludGVycnVwdAogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUikgJiAoX19JTlRFUlJVUFRfXykpICE9IFJFU0VUKSA/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUikgJiAoX19JTlRFUlJVUFRfXykpICE9IDBVKSA/IDFVIDogMFUpCiAKIC8qKgotICAqIEBicmllZiAgR2V0IHRoZSBzZWxlY3RlZCBSVEMgV2FrZVVwVGltZXIncyBmbGFnIHN0YXR1cy4KKyAgKiBAYnJpZWYgIEdldCB0aGUgc2VsZWN0ZWQgUlRDIFdha2V1cCBUaW1lcidzIGZsYWcgc3RhdHVzLgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCi0gICogQHBhcmFtICBfX0ZMQUdfXyBzcGVjaWZpZXMgdGhlIFJUQyBXYWtlVXBUaW1lciBGbGFnIGlzIHBlbmRpbmcgb3Igbm90LgorICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGZsYWcgdG8gY2hlY2suCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgotICAqICAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfV1VURgotICAqICAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfV1VUV0YKKyAgKiAgICAgICAgICAgICBAYXJnIFJUQ19GTEFHX1dVVEY6IFdha2V1cCBUaW1lciBpbnRlcnJ1cHQgZmxhZworICAqICAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfV1VUV0Y6IFdha2V1cCBUaW1lciAnd3JpdGUgYWxsb3dlZCcgZmxhZwogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgJiAoX19GTEFHX18pKSAhPSBSRVNFVCkgPyBTRVQgOiBSRVNFVCkKKyNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSAgICAgICAgICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSKSAmIChfX0ZMQUdfXykpICE9IDBVKT8gMVUgOiAwVSkKIAogLyoqCi0gICogQGJyaWVmICBDbGVhciB0aGUgUlRDIFdha2UgVXAgdGltZXIncyBwZW5kaW5nIGZsYWdzLgorICAqIEBicmllZiAgQ2xlYXIgdGhlIFJUQyBXYWtldXAgdGltZXIncyBwZW5kaW5nIGZsYWdzLgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCi0gICogQHBhcmFtICBfX0ZMQUdfXyBzcGVjaWZpZXMgdGhlIFJUQyBXYWtlVXBUaW1lciBGbGFnIHRvIGNsZWFyLgorICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBSVEMgV2FrZXVwIFRpbWVyIEZsYWcgdG8gY2xlYXIuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6Ci0gICogICAgICAgICAgICBAYXJnIFJUQ19GTEFHX1dVVEYKKyAgKiAgICAgICAgICAgICBAYXJnIFJUQ19GTEFHX1dVVEY6IFdha2V1cCBUaW1lciBpbnRlcnJ1cHQgRmxhZwogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfQ0xFQVJfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgPSAofigoX19GTEFHX18pIHwgUlRDX0lTUl9JTklUKXwoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSICYgUlRDX0lTUl9JTklUKSkKKyNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0NMRUFSX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICAgICAgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgPSAofigoX19GTEFHX18pIHwgUlRDX0lTUl9JTklUKXwoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSICYgUlRDX0lTUl9JTklUKSkKIAotLyogV0FLRS1VUCBUSU1FUiBFWFRJICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qKgotICAqIEBicmllZiAgRW5hYmxlIGludGVycnVwdCBvbiB0aGUgUlRDIFdha2VVcCBUaW1lciBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIEVuYWJsZSBpbnRlcnJ1cHQgb24gdGhlIFJUQyBXYWtldXAgVGltZXIgYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9JVCgpICAgICAgIChFWFRJLT5JTVIgfD0gUlRDX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmICBEaXNhYmxlIGludGVycnVwdCBvbiB0aGUgUlRDIFdha2VVcCBUaW1lciBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIERpc2FibGUgaW50ZXJydXB0IG9uIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX0lUKCkgICAgICAoRVhUSS0+SU1SICY9IH4oUlRDX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkpCisjZGVmaW5lIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfSVQoKSAgICAgIChFWFRJLT5JTVIgJj0gflJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRW5hYmxlIGV2ZW50IG9uIHRoZSBSVEMgV2FrZVVwIFRpbWVyIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgorICAqIEBicmllZiAgRW5hYmxlIGV2ZW50IG9uIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX0VWRU5UKCkgICAgKEVYVEktPkVNUiB8PSBSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgIERpc2FibGUgZXZlbnQgb24gdGhlIFJUQyBXYWtlVXAgVGltZXIgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBEaXNhYmxlIGV2ZW50IG9uIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9FVkVOVCgpICAgKEVYVEktPkVNUiAmPSB+KFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpKQorI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX0VWRU5UKCkgICAoRVhUSS0+RU1SICY9IH5SVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgIEVuYWJsZSBmYWxsaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIFdha2VVcCBUaW1lciBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIEVuYWJsZSBmYWxsaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIFdha2V1cCBUaW1lciBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9GQUxMSU5HX0VER0UoKSAgIChFWFRJLT5GVFNSIHw9IFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRGlzYWJsZSBmYWxsaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIFdha2VVcCBUaW1lciBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIERpc2FibGUgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBXYWtldXAgVGltZXIgYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwotI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX0ZBTExJTkdfRURHRSgpICAoRVhUSS0+RlRTUiAmPSB+KFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpKQorI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX0ZBTExJTkdfRURHRSgpICAoRVhUSS0+RlRTUiAmPSB+UlRDX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmICBFbmFibGUgcmlzaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIFdha2VVcCBUaW1lciBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIEVuYWJsZSByaXNpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX1JJU0lOR19FREdFKCkgICAgKEVYVEktPlJUU1IgfD0gUlRDX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmICBEaXNhYmxlIHJpc2luZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBXYWtlVXAgVGltZXIgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBEaXNhYmxlIHJpc2luZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBXYWtldXAgVGltZXIgYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwotI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX1JJU0lOR19FREdFKCkgICAoRVhUSS0+UlRTUiAmPSB+KFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpKQorI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX1JJU0lOR19FREdFKCkgICAoRVhUSS0+UlRTUiAmPSB+UlRDX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmICBFbmFibGUgcmlzaW5nICYgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBXYWtlVXAgVGltZXIgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBFbmFibGUgcmlzaW5nICYgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBXYWtldXAgVGltZXIgYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwotI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9FTkFCTEVfUklTSU5HX0ZBTExJTkdfRURHRSgpIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9SSVNJTkdfRURHRSgpO19fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9GQUxMSU5HX0VER0UoKTsKKyNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX1JJU0lOR19GQUxMSU5HX0VER0UoKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX1JJU0lOR19FREdFKCk7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9FTkFCTEVfRkFMTElOR19FREdFKCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDBVKQogCiAvKioKLSAgKiBAYnJpZWYgIERpc2FibGUgcmlzaW5nICYgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBXYWtlVXAgVGltZXIgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBEaXNhYmxlIHJpc2luZyAmIGZhbGxpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfUklTSU5HX0ZBTExJTkdfRURHRSgpIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfUklTSU5HX0VER0UoKTtfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX0ZBTExJTkdfRURHRSgpOworI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX1JJU0lOR19GQUxMSU5HX0VER0UoKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX1JJU0lOR19FREdFKCk7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9GQUxMSU5HX0VER0UoKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDBVKQogCiAvKioKLSAgKiBAYnJpZWYgQ2hlY2sgd2hldGhlciB0aGUgUlRDIFdha2VVcCBUaW1lciBhc3NvY2lhdGVkIEV4dGkgbGluZSBpbnRlcnJ1cHQgZmxhZyBpcyBzZXQgb3Igbm90LgorICAqIEBicmllZiBDaGVjayB3aGV0aGVyIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGFzc29jaWF0ZWQgRVhUSSBsaW5lIGludGVycnVwdCBmbGFnIGlzIHNldCBvciBub3QuCiAgICogQHJldHZhbCBMaW5lIFN0YXR1cy4KICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfR0VUX0ZMQUcoKSAgICAgICAgICAgICAgKEVYVEktPlBSICYgUlRDX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmIENsZWFyIHRoZSBSVEMgV2FrZVVwIFRpbWVyIGFzc29jaWF0ZWQgRXh0aSBsaW5lIGZsYWcuCisgICogQGJyaWVmIENsZWFyIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGFzc29jaWF0ZWQgRVhUSSBsaW5lIGZsYWcuCiAgICogQHJldHZhbCBOb25lLgogICAqLwogI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9DTEVBUl9GTEFHKCkgICAgICAgICAgICAoRVhUSS0+UFIgPSBSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgR2VuZXJhdGUgYSBTb2Z0d2FyZSBpbnRlcnJ1cHQgb24gdGhlIFJUQyBXYWtlVXAgVGltZXIgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmIEdlbmVyYXRlIGEgU29mdHdhcmUgaW50ZXJydXB0IG9uIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfR0VORVJBVEVfU1dJVCgpICAgICAgICAgKEVYVEktPlNXSUVSIHw9IFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpCisKIC8qKgogICAqIEB9CiAgICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVRJTUVTVEFNUC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGRlZmdyb3VwIFJUQ0V4X1RpbWVzdGFtcCBSVEMgRXh0ZW5kZWQgVGltZXN0YW1wCisKKy8qKiBAZGVmZ3JvdXAgUlRDRXhfVGltZXN0YW1wIFJUQ0V4IFRpbWVzdGFtcAogICAqIEB7CiAgICovCisKIC8qKgotICAqIEBicmllZiAgRW5hYmxlIHRoZSBSVEMgVGltZVN0YW1wIHBlcmlwaGVyYWwuCisgICogQGJyaWVmICBFbmFibGUgdGhlIFJUQyBUaW1lc3RhbXAgcGVyaXBoZXJhbC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SVENfVElNRVNUQU1QX0VOQUJMRShfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgICAgICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUiB8PSAoUlRDX0NSX1RTRSkpCiAKIC8qKgotICAqIEBicmllZiAgRGlzYWJsZSB0aGUgUlRDIFRpbWVTdGFtcCBwZXJpcGhlcmFsLgorICAqIEBicmllZiAgRGlzYWJsZSB0aGUgUlRDIFRpbWVzdGFtcCBwZXJpcGhlcmFsLgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19USU1FU1RBTVBfRElTQUJMRShfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSICY9IH4oUlRDX0NSX1RTRSkpCiAKIC8qKgotICAqIEBicmllZiAgRW5hYmxlIHRoZSBSVEMgVGltZVN0YW1wIGludGVycnVwdC4KKyAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgUlRDIFRpbWVzdGFtcCBpbnRlcnJ1cHQuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KLSAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgVGltZVN0YW1wIGludGVycnVwdCBzb3VyY2UgdG8gYmUgZW5hYmxlZC4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgVGltZXN0YW1wIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6CiAgICogICAgICAgICAgICBAYXJnIFJUQ19JVF9UUzogVGltZVN0YW1wIGludGVycnVwdAogICAqIEByZXR2YWwgTm9uZQpAQCAtNTA2LDkgKzUyNSw5IEBACiAjZGVmaW5lIF9fSEFMX1JUQ19USU1FU1RBTVBfRU5BQkxFX0lUKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSIHw9IChfX0lOVEVSUlVQVF9fKSkKIAogLyoqCi0gICogQGJyaWVmICBEaXNhYmxlIHRoZSBSVEMgVGltZVN0YW1wIGludGVycnVwdC4KKyAgKiBAYnJpZWYgIERpc2FibGUgdGhlIFJUQyBUaW1lc3RhbXAgaW50ZXJydXB0LgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCi0gICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgUlRDIFRpbWVTdGFtcCBpbnRlcnJ1cHQgc291cmNlIHRvIGJlIGRpc2FibGVkLgorICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIFJUQyBUaW1lc3RhbXAgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKICAgKiAgICAgICAgICAgIEBhcmcgUlRDX0lUX1RTOiBUaW1lU3RhbXAgaW50ZXJydXB0CiAgICogQHJldHZhbCBOb25lCkBAIC01MTYsNDIgKzUzNSw0MyBAQAogI2RlZmluZSBfX0hBTF9SVENfVElNRVNUQU1QX0RJU0FCTEVfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUiAmPSB+KF9fSU5URVJSVVBUX18pKQogCiAvKioKLSAgKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBSVEMgVGltZVN0YW1wIGludGVycnVwdCBoYXMgb2NjdXJyZWQgb3Igbm90LgorICAqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIFJUQyBUaW1lc3RhbXAgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCBvciBub3QuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KLSAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgVGltZVN0YW1wIGludGVycnVwdCB0byBjaGVjay4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgVGltZXN0YW1wIGludGVycnVwdCB0byBjaGVjay4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKICAgKiAgICAgICAgICAgIEBhcmcgUlRDX0lUX1RTOiBUaW1lU3RhbXAgaW50ZXJydXB0CiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19USU1FU1RBTVBfR0VUX0lUKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAgICAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgJiAoKF9fSU5URVJSVVBUX18pPj4gNFUpKSAhPSBSRVNFVCk/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBfX0hBTF9SVENfVElNRVNUQU1QX0dFVF9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKChfX0lOVEVSUlVQVF9fKSA+PiA0VSkpICE9IDBVKSA/IDFVIDogMFUpCiAKIC8qKgotICAqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIFJUQyBUaW1lIFN0YW1wIGludGVycnVwdCBoYXMgYmVlbiBlbmFibGVkIG9yIG5vdC4KKyAgKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBSVEMgVGltZXN0YW1wIGludGVycnVwdCBoYXMgYmVlbiBlbmFibGVkIG9yIG5vdC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgotICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIFJUQyBUaW1lIFN0YW1wIGludGVycnVwdCBzb3VyY2UgdG8gY2hlY2suCisgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgUlRDIFRpbWVzdGFtcCBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgogICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfVFM6IFRpbWVTdGFtcCBpbnRlcnJ1cHQKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX1RJTUVTVEFNUF9HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IpICYgKF9fSU5URVJSVVBUX18pKSAhPSBSRVNFVCkgPyBTRVQgOiBSRVNFVCkKKyNkZWZpbmUgX19IQUxfUlRDX1RJTUVTVEFNUF9HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IpICYgKF9fSU5URVJSVVBUX18pKSAhPSAwVSkgPyAxVSA6IDBVKQogCiAvKioKLSAgKiBAYnJpZWYgIEdldCB0aGUgc2VsZWN0ZWQgUlRDIFRpbWVTdGFtcCdzIGZsYWcgc3RhdHVzLgorICAqIEBicmllZiAgR2V0IHRoZSBzZWxlY3RlZCBSVEMgVGltZXN0YW1wJ3MgZmxhZyBzdGF0dXMuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KLSAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgUlRDIFRpbWVTdGFtcCBGbGFnIGlzIHBlbmRpbmcgb3Igbm90LgorICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBSVEMgVGltZXN0YW1wIGZsYWcgdG8gY2hlY2suCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6Ci0gICogICAgICAgICAgICBAYXJnIFJUQ19GTEFHX1RTRgotICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UU09WRgorICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UU0Y6IFRpbWVzdGFtcCBpbnRlcnJ1cHQgZmxhZworICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UU09WRjogVGltZXN0YW1wIG92ZXJmbG93IGZsYWcKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX1RJTUVTVEFNUF9HRVRfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgICAgICAgICAgICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSKSAmIChfX0ZMQUdfXykpICE9IFJFU0VUKT8gU0VUIDogUkVTRVQpCisjZGVmaW5lIF9fSEFMX1JUQ19USU1FU1RBTVBfR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICAgICAgICAgICAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgJiAoX19GTEFHX18pKSAhPSAwVSk/IDFVIDogMFUpCiAKIC8qKgotICAqIEBicmllZiAgQ2xlYXIgdGhlIFJUQyBUaW1lIFN0YW1wJ3MgcGVuZGluZyBmbGFncy4KKyAgKiBAYnJpZWYgIENsZWFyIHRoZSBSVEMgVGltZXN0YW1wJ3MgcGVuZGluZyBmbGFncy4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgotICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBSVEMgQWxhcm0gRmxhZyB0byBjbGVhci4KLSAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6Ci0gICogICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UU0YKKyAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgUlRDIFRpbWVzdGFtcCBmbGFnIHRvIGNsZWFyLgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgorICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UU0Y6IFRpbWVzdGFtcCBpbnRlcnJ1cHQgZmxhZworICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UU09WRjogVGltZXN0YW1wIG92ZXJmbG93IGZsYWcKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX1RJTUVTVEFNUF9DTEVBUl9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSAgICAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSKSA9ICh+KChfX0ZMQUdfXykgfCBSVENfSVNSX0lOSVQpfCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IgJiBSVENfSVNSX0lOSVQpKQpAQCAtNTYxLDcgKzU4MSw4IEBACiAgICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVRBTVBFUi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGRlZmdyb3VwIFJUQ0V4X1RhbXBlciBSVEMgRXh0ZW5kZWQgVGFtcGVyCisKKy8qKiBAZGVmZ3JvdXAgUlRDRXhfVGFtcGVyIFJUQ0V4IFRhbXBlcgogICAqIEB7CiAgICovCiAKQEAgLTYxNCw3ICs2MzUsNyBAQAogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCiAgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgUlRDIFRhbXBlciBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkLgogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgICBAYXJnIFJUQ19JVF9UQU1QOiBUYW1wZXIgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIFJUQ19JVF9UQU1QOiBUYW1wZXIgZ2xvYmFsIGludGVycnVwdAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX0VOQUJMRV9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPlRBRkNSIHw9IChfX0lOVEVSUlVQVF9fKSkKQEAgLTYyNCw3ICs2NDUsNyBAQAogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCiAgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgUlRDIFRhbXBlciBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBkaXNhYmxlZC4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgICBAYXJnIFJUQ19JVF9UQU1QOiBUYW1wZXIgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIFJUQ19JVF9UQU1QOiBUYW1wZXIgZ2xvYmFsIGludGVycnVwdAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX0RJU0FCTEVfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPlRBRkNSICY9IH4oX19JTlRFUlJVUFRfXykpCkBAIC02MzQsMTM4ICs2NTUsMTM5IEBACiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KICAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgVGFtcGVyIGludGVycnVwdCB0byBjaGVjay4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKLSAgKiAgICAgICAgICAgIEBhcmcgIFJUQ19JVF9UQU1QMTogVGFtcGVyMSBpbnRlcnJ1cHQKLSAgKiAgICAgICAgICAgIEBhcmcgIFJUQ19JVF9UQU1QMjogVGFtcGVyMiBpbnRlcnJ1cHQKLSAgKiAgICAgICAgICAgIEBhcmcgIFJUQ19JVF9UQU1QMzogVGFtcGVyMyBpbnRlcnJ1cHQgKCopCi0gICogQG5vdGUgICAoKikgUlRDX0lUX1RBTVAzIG5vdCBwcmVzZW50IG9uIGFsbCB0aGUgZGV2aWNlcworICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfVEFNUDE6IFRhbXBlciAxIGludGVycnVwdAorICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfVEFNUDI6IFRhbXBlciAyIGludGVycnVwdAorICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfVEFNUDM6IFRhbXBlciAzIGludGVycnVwdAorICAqIEBub3RlICAgUlRDX0lUX1RBTVAzIGlzIG5vdCBhcHBsaWNhYmxlIHRvIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX0dFVF9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSKSAmICgoX19JTlRFUlJVUFRfXyk+PiA0VSkpICE9IFJFU0VUKT8gU0VUIDogUkVTRVQpCisjZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfR0VUX0lUKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKChfX0lOVEVSUlVQVF9fKSA+PiA0VSkpICE9IDBVKSA/IDFVIDogMFUpCiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIFJUQyBUYW1wZXIgaW50ZXJydXB0IGhhcyBiZWVuIGVuYWJsZWQgb3Igbm90LgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCiAgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgUlRDIFRhbXBlciBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgotICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfVEFNUDogVGFtcGVyIGludGVycnVwdAorICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfVEFNUDogVGFtcGVyIGdsb2JhbCBpbnRlcnJ1cHQKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX1RBTVBFUl9HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+VEFGQ1IpICYgKF9fSU5URVJSVVBUX18pKSAhPSBSRVNFVCkgPyBTRVQgOiBSRVNFVCkKKyNkZWZpbmUgX19IQUxfUlRDX1RBTVBFUl9HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+VEFGQ1IpICYgKF9fSU5URVJSVVBUX18pKSAhPSAwVSkgPyAxVSA6IDBVKQogCiAvKioKLSAqIEBicmllZiAgR2V0IHRoZSBzZWxlY3RlZCBSVEMgVGFtcGVyJ3MgZmxhZyBzdGF0dXMuCi0gKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgotICogQHBhcmFtICBfX0ZMQUdfXyBzcGVjaWZpZXMgdGhlIFJUQyBUYW1wZXIgRmxhZyBpcyBwZW5kaW5nIG9yIG5vdC4KLSAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKLSAqICAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfVEFNUDFGCi0gKiAgICAgICAgICAgICBAYXJnIFJUQ19GTEFHX1RBTVAyRgotICogICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UQU1QM0YgKCopCi0gKiBAbm90ZSAgICgqKSBSVENfRkxBR19UQU1QM0Ygbm90IHByZXNlbnQgb24gYWxsIHRoZSBkZXZpY2VzCi0gKiBAcmV0dmFsIE5vbmUKLSAqLwotI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX0dFVF9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSAgICAgICAgICAgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKF9fRkxBR19fKSkgIT0gUkVTRVQpPyBTRVQgOiBSRVNFVCkKLQorICAqIEBicmllZiAgR2V0IHRoZSBzZWxlY3RlZCBSVEMgVGFtcGVyJ3MgZmxhZyBzdGF0dXMuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KKyAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgUlRDIFRhbXBlciBmbGFnIHRvIGJlIGNoZWNrZWQuCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgorICAqICAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfVEFNUDFGOiBUYW1wZXIgMSBpbnRlcnJ1cHQgZmxhZworICAqICAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfVEFNUDJGOiBUYW1wZXIgMiBpbnRlcnJ1cHQgZmxhZworICAqICAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfVEFNUDNGOiBUYW1wZXIgMyBpbnRlcnJ1cHQgZmxhZworICAqIEBub3RlICAgUlRDX0ZMQUdfVEFNUDNGIGlzIG5vdCBhcHBsaWNhYmxlIHRvIGFsbCBkZXZpY2VzLgorICAqIEByZXR2YWwgTm9uZQorICAqLworI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX0dFVF9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSAgICAgICAgICAgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKF9fRkxBR19fKSkgIT0gMFUpPyAxVSA6IDBVKQogCiAvKioKICAgKiBAYnJpZWYgIENsZWFyIHRoZSBSVEMgVGFtcGVyJ3MgcGVuZGluZyBmbGFncy4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgogICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBSVEMgVGFtcGVyIEZsYWcgdG8gY2xlYXIuCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgotICAqICAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfVEFNUDFGCi0gICogICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UQU1QMkYKLSAgKiAgICAgICAgICAgICBAYXJnIFJUQ19GTEFHX1RBTVAzRiAoKikKLSAgKiBAbm90ZSAgICgqKSBSVENfRkxBR19UQU1QM0Ygbm90IHByZXNlbnQgb24gYWxsIHRoZSBkZXZpY2VzCisgICogICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UQU1QMUY6IFRhbXBlciAxIGludGVycnVwdCBmbGFnCisgICogICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UQU1QMkY6IFRhbXBlciAyIGludGVycnVwdCBmbGFnCisgICogICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UQU1QM0Y6IFRhbXBlciAzIGludGVycnVwdCBmbGFnCisgICogQG5vdGUgICBSVENfRkxBR19UQU1QM0YgaXMgbm90IGFwcGxpY2FibGUgdG8gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfQ0xFQVJfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSKSA9ICh+KChfX0ZMQUdfXykgfCBSVENfSVNSX0lOSVQpfCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IgJiBSVENfSVNSX0lOSVQpKQotCi0KKyNkZWZpbmUgX19IQUxfUlRDX1RBTVBFUl9DTEVBUl9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSAgICAgICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpID0gKH4oKF9fRkxBR19fKSB8IFJUQ19JU1JfSU5JVCl8KChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUiAmIFJUQ19JU1JfSU5JVCkpCiAvKioKICAgKiBAfQogICAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVRBTVBFUi9USU1FU1RBTVAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBkZWZncm91cCBSVENFeF9UYW1wZXJfVGltZXN0YW1wIEVYVEkgUlRDIEV4dGVuZGVkIFRhbXBlciBUaW1lc3RhbXAgRVhUSQorLyoqIEBkZWZncm91cCBSVENFeF9UYW1wZXJfVGltZXN0YW1wIEVYVEkgUlRDIFRhbXBlciBUaW1lc3RhbXAgRVhUSQogICAqIEB7CiAgICovCiAKLS8qIFRBTVBFUiBUSU1FU1RBTVAgRVhUSSAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKioKLSAgKiBAYnJpZWYgIEVuYWJsZSBpbnRlcnJ1cHQgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIEVuYWJsZSBpbnRlcnJ1cHQgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9FTkFCTEVfSVQoKSAgICAgICAgKEVYVEktPklNUiB8PSBSVENfRVhUSV9MSU5FX1RBTVBFUl9USU1FU1RBTVBfRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRGlzYWJsZSBpbnRlcnJ1cHQgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIERpc2FibGUgaW50ZXJydXB0IG9uIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRElTQUJMRV9JVCgpICAgICAgIChFWFRJLT5JTVIgJj0gfihSVENfRVhUSV9MSU5FX1RBTVBFUl9USU1FU1RBTVBfRVZFTlQpKQorI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0RJU0FCTEVfSVQoKSAgICAgICAoRVhUSS0+SU1SICY9IH5SVENfRVhUSV9MSU5FX1RBTVBFUl9USU1FU1RBTVBfRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRW5hYmxlIGV2ZW50IG9uIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBFbmFibGUgZXZlbnQgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRU5BQkxFX0VWRU5UKCkgICAgKEVYVEktPkVNUiB8PSBSVENfRVhUSV9MSU5FX1RBTVBFUl9USU1FU1RBTVBfRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRGlzYWJsZSBldmVudCBvbiB0aGUgUlRDIFRhbXBlciBhbmQgVGltZXN0YW1wIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgorICAqIEBicmllZiAgRGlzYWJsZSBldmVudCBvbiB0aGUgUlRDIFRhbXBlciBhbmQgVGltZXN0YW1wIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9ESVNBQkxFX0VWRU5UKCkgICAoRVhUSS0+RU1SICY9IH4oUlRDX0VYVElfTElORV9UQU1QRVJfVElNRVNUQU1QX0VWRU5UKSkKKyNkZWZpbmUgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9ESVNBQkxFX0VWRU5UKCkgICAoRVhUSS0+RU1SICY9IH5SVENfRVhUSV9MSU5FX1RBTVBFUl9USU1FU1RBTVBfRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRW5hYmxlIGZhbGxpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBFbmFibGUgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRU5BQkxFX0ZBTExJTkdfRURHRSgpICAgKEVYVEktPkZUU1IgfD0gUlRDX0VYVElfTElORV9UQU1QRVJfVElNRVNUQU1QX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgIERpc2FibGUgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIERpc2FibGUgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRElTQUJMRV9GQUxMSU5HX0VER0UoKSAgKEVYVEktPkZUU1IgJj0gfihSVENfRVhUSV9MSU5FX1RBTVBFUl9USU1FU1RBTVBfRVZFTlQpKQorI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0RJU0FCTEVfRkFMTElOR19FREdFKCkgIChFWFRJLT5GVFNSICY9IH5SVENfRVhUSV9MSU5FX1RBTVBFUl9USU1FU1RBTVBfRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRW5hYmxlIHJpc2luZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIEVuYWJsZSByaXNpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwogI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0VOQUJMRV9SSVNJTkdfRURHRSgpICAgIChFWFRJLT5SVFNSIHw9IFJUQ19FWFRJX0xJTkVfVEFNUEVSX1RJTUVTVEFNUF9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmICBEaXNhYmxlIHJpc2luZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIERpc2FibGUgcmlzaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIFRhbXBlciBhbmQgVGltZXN0YW1wIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9ESVNBQkxFX1JJU0lOR19FREdFKCkgICAoRVhUSS0+UlRTUiAmPSB+KFJUQ19FWFRJX0xJTkVfVEFNUEVSX1RJTUVTVEFNUF9FVkVOVCkpCisjZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRElTQUJMRV9SSVNJTkdfRURHRSgpICAgKEVYVEktPlJUU1IgJj0gflJUQ19FWFRJX0xJTkVfVEFNUEVSX1RJTUVTVEFNUF9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmICBFbmFibGUgcmlzaW5nICYgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIEVuYWJsZSByaXNpbmcgJiBmYWxsaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIFRhbXBlciBhbmQgVGltZXN0YW1wIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9FTkFCTEVfUklTSU5HX0ZBTExJTkdfRURHRSgpIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRU5BQkxFX1JJU0lOR19FREdFKCk7X19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9FTkFCTEVfRkFMTElOR19FREdFKCk7CisjZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRU5BQkxFX1JJU0lOR19GQUxMSU5HX0VER0UoKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRU5BQkxFX1JJU0lOR19FREdFKCk7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRU5BQkxFX0ZBTExJTkdfRURHRSgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDBVKQogCiAvKioKLSAgKiBAYnJpZWYgIERpc2FibGUgcmlzaW5nICYgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIERpc2FibGUgcmlzaW5nICYgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBUaGlzIHBhcmFtZXRlciBjYW4gYmU6CiAgICogQHJldHZhbCBOb25lLgogICAqLwotI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0RJU0FCTEVfUklTSU5HX0ZBTExJTkdfRURHRSgpIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRElTQUJMRV9SSVNJTkdfRURHRSgpO19fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRElTQUJMRV9GQUxMSU5HX0VER0UoKTsKKyNkZWZpbmUgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9ESVNBQkxFX1JJU0lOR19GQUxMSU5HX0VER0UoKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9ESVNBQkxFX1JJU0lOR19FREdFKCk7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0RJU0FCTEVfRkFMTElOR19FREdFKCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDBVKQogCiAvKioKLSAgKiBAYnJpZWYgQ2hlY2sgd2hldGhlciB0aGUgUlRDIFRhbXBlciBhbmQgVGltZXN0YW1wIGFzc29jaWF0ZWQgRXh0aSBsaW5lIGludGVycnVwdCBmbGFnIGlzIHNldCBvciBub3QuCisgICogQGJyaWVmIENoZWNrIHdoZXRoZXIgdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEVYVEkgbGluZSBpbnRlcnJ1cHQgZmxhZyBpcyBzZXQgb3Igbm90LgogICAqIEByZXR2YWwgTGluZSBTdGF0dXMuCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfR0VUX0ZMQUcoKSAgICAgICAgIChFWFRJLT5QUiAmIFJUQ19FWFRJX0xJTkVfVEFNUEVSX1RJTUVTVEFNUF9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmIENsZWFyIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFeHRpIGxpbmUgZmxhZy4KKyAgKiBAYnJpZWYgQ2xlYXIgdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEVYVEkgbGluZSBmbGFnLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9DTEVBUl9GTEFHKCkgICAgICAgKEVYVEktPlBSID0gUlRDX0VYVElfTElORV9UQU1QRVJfVElNRVNUQU1QX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgR2VuZXJhdGUgYSBTb2Z0d2FyZSBpbnRlcnJ1cHQgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEV4dGkgbGluZQorICAqIEBicmllZiBHZW5lcmF0ZSBhIFNvZnR3YXJlIGludGVycnVwdCBvbiB0aGUgUlRDIFRhbXBlciBhbmQgVGltZXN0YW1wIGFzc29jaWF0ZWQgRVhUSSBsaW5lCiAgICogQHJldHZhbCBOb25lLgogICAqLwogI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0dFTkVSQVRFX1NXSVQoKSAgICAoRVhUSS0+U1dJRVIgfD0gUlRDX0VYVElfTElORV9UQU1QRVJfVElNRVNUQU1QX0VWRU5UKQpAQCAtNzczLDggKzc5NSw5IEBACiAgICogQH0KICAgKi8KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQ2FsaWJyYXRpb24tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAZGVmZ3JvdXAgUlRDRXhfQ2FsaWJyYXRpb24gUlRDIEV4dGVuZGVkIENhbGlicmF0aW9uCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1DQUxJQlJBVElPTi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiogQGRlZmdyb3VwIFJUQ0V4X0NhbGlicmF0aW9uIFJUQ0V4IENhbGlicmF0aW9uCiAgICogQHsKICAgKi8KIApAQCAtODExLDEwICs4MzQsMTAgQEAKICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgogICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBSVEMgc2hpZnQgb3BlcmF0aW9uIEZsYWcgaXMgcGVuZGluZyBvciBub3QuCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgotICAqICAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfU0hQRgorICAqICAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfU0hQRjogU2hpZnQgcGVuZGluZyBmbGFnCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19TSElGVF9HRVRfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgICAgICAgICAgICAgICAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgJiAoX19GTEFHX18pKSAhPSBSRVNFVCk/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBfX0hBTF9SVENfU0hJRlRfR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICAgICAgICAgICAgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKF9fRkxBR19fKSkgIT0gMFUpPyAxVSA6IDBVKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTgyNCwxNyArODQ3LDE3IEBACiAgICovCiAKIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIC8qKiBAZGVmZ3JvdXAgUlRDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zIFJUQ0V4IEV4cG9ydGVkIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCiAKLS8qIFJUQyBUaW1lU3RhbXAgYW5kIFRhbXBlciBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiogQGRlZmdyb3VwIFJUQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgRXh0ZW5kZWQgUlRDIFRpbWVTdGFtcCBhbmQgVGFtcGVyIGZ1bmN0aW9ucwotICogQHsKLSAqLwotCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfU2V0VGltZVN0YW1wKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBUaW1lU3RhbXBFZGdlLCB1aW50MzJfdCBSVENfVGltZVN0YW1wUGluKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9TZXRUaW1lU3RhbXBfSVQoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIHVpbnQzMl90IFRpbWVTdGFtcEVkZ2UsIHVpbnQzMl90IFJUQ19UaW1lU3RhbXBQaW4pOworLyoqIEBhZGR0b2dyb3VwIFJUQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEKKyAgKiBAeworICAqLworLyogUlRDIFRpbWVzdGFtcCBhbmQgVGFtcGVyIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9TZXRUaW1lU3RhbXAoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIHVpbnQzMl90IFJUQ19UaW1lU3RhbXBFZGdlLCB1aW50MzJfdCBSVENfVGltZVN0YW1wUGluKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9TZXRUaW1lU3RhbXBfSVQoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIHVpbnQzMl90IFJUQ19UaW1lU3RhbXBFZGdlLCB1aW50MzJfdCBSVENfVGltZVN0YW1wUGluKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9EZWFjdGl2YXRlVGltZVN0YW1wKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9HZXRUaW1lU3RhbXAoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19UaW1lVHlwZURlZiAqc1RpbWVTdGFtcCwgUlRDX0RhdGVUeXBlRGVmICpzVGltZVN0YW1wRGF0ZSwgdWludDMyX3QgRm9ybWF0KTsKIApAQCAtODQ1LDI0ICs4NjgsMjcgQEAKIAogdm9pZCAgICAgICAgICAgICAgSEFMX1JUQ0V4X1RhbXBlcjFFdmVudENhbGxiYWNrKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKIHZvaWQgICAgICAgICAgICAgIEhBTF9SVENFeF9UYW1wZXIyRXZlbnRDYWxsYmFjayhSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CisjaWYgZGVmaW5lZChSVENfVEFNUEVSM19TVVBQT1JUKQogdm9pZCAgICAgICAgICAgICAgSEFMX1JUQ0V4X1RhbXBlcjNFdmVudENhbGxiYWNrKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKKyNlbmRpZiAvKiBSVENfVEFNUEVSM19TVVBQT1JUICovCiB2b2lkICAgICAgICAgICAgICBIQUxfUlRDRXhfVGltZVN0YW1wRXZlbnRDYWxsYmFjayhSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfUG9sbEZvclRpbWVTdGFtcEV2ZW50KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBUaW1lb3V0KTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9Qb2xsRm9yVGFtcGVyMUV2ZW50KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBUaW1lb3V0KTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9Qb2xsRm9yVGFtcGVyMkV2ZW50KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBUaW1lb3V0KTsKKyNpZiBkZWZpbmVkKFJUQ19UQU1QRVIzX1NVUFBPUlQpCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfUG9sbEZvclRhbXBlcjNFdmVudChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgVGltZW91dCk7CisjZW5kaWYgLyogUlRDX1RBTVBFUjNfU1VQUE9SVCAqLwogLyoqCiAgICogQH0KICAgKi8KIAotLyogUlRDIFdha2UtdXAgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKiBAZGVmZ3JvdXAgUlRDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMiBFeHRlbmRlZCBSVEMgV2FrZS11cCBmdW5jdGlvbnMKLSAqIEB7Ci0gKi8KLQorLyoqIEBhZGR0b2dyb3VwIFJUQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIKKyAgKiBAeworICAqLworLyogUlRDIFdha2V1cCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X1NldFdha2VVcFRpbWVyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBXYWtlVXBDb3VudGVyLCB1aW50MzJfdCBXYWtlVXBDbG9jayk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfU2V0V2FrZVVwVGltZXJfSVQoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIHVpbnQzMl90IFdha2VVcENvdW50ZXIsIHVpbnQzMl90IFdha2VVcENsb2NrKTsKLXVpbnQzMl90ICAgICAgICAgIEhBTF9SVENFeF9EZWFjdGl2YXRlV2FrZVVwVGltZXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X0RlYWN0aXZhdGVXYWtlVXBUaW1lcihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CiB1aW50MzJfdCAgICAgICAgICBIQUxfUlRDRXhfR2V0V2FrZVVwVGltZXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwogdm9pZCAgICAgICAgICAgICAgSEFMX1JUQ0V4X1dha2VVcFRpbWVySVJRSGFuZGxlcihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CiB2b2lkICAgICAgICAgICAgICBIQUxfUlRDRXhfV2FrZVVwVGltZXJFdmVudENhbGxiYWNrKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKQEAgLTg3MSwxMSArODk3LDEwIEBACiAgICogQH0KICAgKi8KIAorLyoqIEBhZGR0b2dyb3VwIFJUQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMKKyAgKiBAeworICAqLwogLyogRXh0ZW5kZWQgQ29udHJvbCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqIEBkZWZncm91cCBSVENFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIEV4dGVuZGVkIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKLSAqIEB7Ci0gKi8KLQogdm9pZCAgICAgICAgICAgICAgSEFMX1JUQ0V4X0JLVVBXcml0ZShSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgQmFja3VwUmVnaXN0ZXIsIHVpbnQzMl90IERhdGEpOwogdWludDMyX3QgICAgICAgICAgSEFMX1JUQ0V4X0JLVVBSZWFkKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBCYWNrdXBSZWdpc3Rlcik7CiAKQEAgLTg5MSwxMyArOTE2LDEyIEBACiAgICogQH0KICAgKi8KIAorLyoqIEBhZGR0b2dyb3VwIFJUQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQKKyAgKiBAeworICAqLwogLyogRXh0ZW5kZWQgUlRDIGZlYXR1cmVzIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqIEBkZWZncm91cCBSVENFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA0IEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucwotICogQHsKLSAqLwotdm9pZCAgICAgICAgICAgICAgSEFMX1JUQ0V4X0FsYXJtQkV2ZW50Q2FsbGJhY2soUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwordm9pZCBIQUxfUlRDRXhfQWxhcm1CRXZlbnRDYWxsYmFjayhSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfUG9sbEZvckFsYXJtQkV2ZW50KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBUaW1lb3V0KTsKLQogLyoqCiAgICogQH0KICAgKi8KQEAgLTkwOSw3ICs5MzMsNDEgQEAKIC8qIFByaXZhdGUgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqIEBkZWZncm91cCBSVENFeF9Qcml2YXRlX0NvbnN0YW50cyBSVENFeCBQcml2YXRlIENvbnN0YW50cworICAqIEB7CisgICovCisjZGVmaW5lIFJUQ19FWFRJX0xJTkVfVEFNUEVSX1RJTUVTVEFNUF9FVkVOVCAgRVhUSV9JTVJfTVIxOSAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxOSBDb25uZWN0ZWQgdG8gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBldmVudCAqLworI2RlZmluZSBSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UICAgICAgIEVYVElfSU1SX01SMjAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMjAgQ29ubmVjdGVkIHRvIHRoZSBSVEMgV2FrZXVwIGV2ZW50ICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIFJUQ0V4X1ByaXZhdGVfQ29uc3RhbnRzIFJUQ0V4IFByaXZhdGUgQ29uc3RhbnRzCisgICogQHsKKyAgKi8KKy8qIE1hc2tzIERlZmluaXRpb24gKi8KKyNpZiBkZWZpbmVkKFJUQ19UQU1QRVIzX1NVUFBPUlQpCisjZGVmaW5lIFJUQ19UQU1QRVJfRU5BQkxFX0JJVFNfTUFTSyAgICAgICAgICgodWludDMyX3QpIChSVENfVEFNUEVSXzEgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfVEFNUEVSXzIgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfVEFNUEVSXzMpKQorCisjZGVmaW5lIFJUQ19UQU1QRVJfRkxBR1NfTUFTSyAgICAgICAgICAgICAgICgodWludDMyX3QpIChSVENfRkxBR19UQU1QMUYgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfRkxBR19UQU1QMkYgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfRkxBR19UQU1QM0YpKQorI2Vsc2UgLyogUlRDX1RBTVBFUjNfU1VQUE9SVCAqLworI2RlZmluZSBSVENfVEFNUEVSX0VOQUJMRV9CSVRTX01BU0sgICAgICAgICAoKHVpbnQzMl90KSAoUlRDX1RBTVBFUl8xIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX1RBTVBFUl8yKSkKKworI2RlZmluZSBSVENfVEFNUEVSX0ZMQUdTX01BU0sgICAgICAgICAgICAgICAoKHVpbnQzMl90KSAoUlRDX0ZMQUdfVEFNUDFGIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX0ZMQUdfVEFNUDJGKSkKKyNlbmRpZiAvKiBSVENfVEFNUEVSM19TVVBQT1JUICovCisvKioKKyAgKiBAfQorICAqLworCiAvKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKiogQGRlZmdyb3VwIFJUQ0V4X1ByaXZhdGVfTWFjcm9zIFJUQ0V4IFByaXZhdGUgTWFjcm9zCiAgICogQHsKICAgKi8KQEAgLTkxNywzMCArOTc1LDM1IEBACiAvKiogQGRlZmdyb3VwIFJUQ0V4X0lTX1JUQ19EZWZpbml0aW9ucyBQcml2YXRlIG1hY3JvcyB0byBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzCiAgICogQHsKICAgKi8KLSNkZWZpbmUgSVNfUlRDX09VVFBVVChPVVRQVVQpICgoKE9VVFBVVCkgPT0gUlRDX09VVFBVVF9ESVNBQkxFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChPVVRQVVQpID09IFJUQ19PVVRQVVRfQUxBUk1BKSAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoT1VUUFVUKSA9PSBSVENfT1VUUFVUX0FMQVJNQikgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE9VVFBVVCkgPT0gUlRDX09VVFBVVF9XQUtFVVApKQotCi0jZGVmaW5lIElTX1JUQ19CS1AoQktQKSAgICAgICAgICAgICAgICAgICAoKEJLUCkgPCAodWludDMyX3QpIFJUQ19CS1BfTlVNQkVSKQorI2RlZmluZSBJU19SVENfQktQKEJLUCkgICAgICgoQktQKSA8ICh1aW50MzJfdCkgUlRDX0JLUF9OVU1CRVIpCiAKICNkZWZpbmUgSVNfVElNRVNUQU1QX0VER0UoRURHRSkgKCgoRURHRSkgPT0gUlRDX1RJTUVTVEFNUEVER0VfUklTSU5HKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEVER0UpID09IFJUQ19USU1FU1RBTVBFREdFX0ZBTExJTkcpKQogCi0jZGVmaW5lIElTX1JUQ19UQU1QRVIoVEFNUEVSKSAoKCgoVEFNUEVSKSAmIDB4RkZGRkZGRDZVKSA9PSAweDAwVSkgJiYgKChUQU1QRVIpICE9ICh1aW50MzJfdClSRVNFVCkpCisjZGVmaW5lIElTX1JUQ19UQU1QRVIoVEFNUEVSKSAoKCgoVEFNUEVSKSAmICgodWludDMyX3QpflJUQ19UQU1QRVJfRU5BQkxFX0JJVFNfTUFTSykpID09IDB4MDBVKSAmJiAoKFRBTVBFUikgIT0gMFUpKQogCisjZGVmaW5lIElTX1JUQ19UQU1QRVJfUElOKFBJTikgKChQSU4pID09IFJUQ19UQU1QRVJQSU5fREVGQVVMVCkKIAotI2RlZmluZSBJU19SVENfVElNRVNUQU1QX1BJTihQSU4pICgoKFBJTikgPT0gUlRDX1RJTUVTVEFNUFBJTl9ERUZBVUxUKSkKKyNkZWZpbmUgSVNfUlRDX1RJTUVTVEFNUF9QSU4oUElOKSAoKFBJTikgPT0gUlRDX1RJTUVTVEFNUFBJTl9ERUZBVUxUKQogCi0KLSNkZWZpbmUgSVNfUlRDX1RBTVBFUl9UUklHR0VSKFRSSUdHRVIpICgoKFRSSUdHRVIpID09IFJUQ19UQU1QRVJUUklHR0VSX1JJU0lOR0VER0UpIHx8IFwKKyNkZWZpbmUgSVNfUlRDX1RBTVBFUl9UUklHR0VSKFRSSUdHRVIpICgoKFRSSUdHRVIpID09IFJUQ19UQU1QRVJUUklHR0VSX1JJU0lOR0VER0UpICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHR0VSKSA9PSBSVENfVEFNUEVSVFJJR0dFUl9GQUxMSU5HRURHRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJR0dFUikgPT0gUlRDX1RBTVBFUlRSSUdHRVJfTE9XTEVWRUwpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IFJUQ19UQU1QRVJUUklHR0VSX0xPV0xFVkVMKSAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHR0VSKSA9PSBSVENfVEFNUEVSVFJJR0dFUl9ISUdITEVWRUwpKQorCiAjZGVmaW5lIElTX1JUQ19UQU1QRVJfRklMVEVSKEZJTFRFUikgICgoKEZJTFRFUikgPT0gUlRDX1RBTVBFUkZJTFRFUl9ESVNBQkxFKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZJTFRFUikgPT0gUlRDX1RBTVBFUkZJTFRFUl8yU0FNUExFKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZJTFRFUikgPT0gUlRDX1RBTVBFUkZJTFRFUl80U0FNUExFKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZJTFRFUikgPT0gUlRDX1RBTVBFUkZJTFRFUl84U0FNUExFKSkKKworI2RlZmluZSBJU19SVENfVEFNUEVSX0ZJTFRFUl9DT05GSUdfQ09SUkVDVChGSUxURVIsIFRSSUdHRVIpICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKCAgKCAgKChGSUxURVIpICE9IFJUQ19UQU1QRVJGSUxURVJfRElTQUJMRSkgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCAgKChUUklHR0VSKSA9PSBSVENfVEFNUEVSVFJJR0dFUl9MT1dMRVZFTCkgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChUUklHR0VSKSA9PSBSVENfVEFNUEVSVFJJR0dFUl9ISUdITEVWRUwpKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCAgKChGSUxURVIpID09IFJUQ19UQU1QRVJGSUxURVJfRElTQUJMRSkgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCAgKChUUklHR0VSKSA9PSBSVENfVEFNUEVSVFJJR0dFUl9SSVNJTkdFREdFKSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChUUklHR0VSKSA9PSBSVENfVEFNUEVSVFJJR0dFUl9GQUxMSU5HRURHRSkpKSkKKwogI2RlZmluZSBJU19SVENfVEFNUEVSX1NBTVBMSU5HX0ZSRVEoRlJFUSkgKCgoRlJFUSkgPT0gUlRDX1RBTVBFUlNBTVBMSU5HRlJFUV9SVENDTEtfRElWMzI3NjgpfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRlJFUSkgPT0gUlRDX1RBTVBFUlNBTVBMSU5HRlJFUV9SVENDTEtfRElWMTYzODQpfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRlJFUSkgPT0gUlRDX1RBTVBFUlNBTVBMSU5HRlJFUV9SVENDTEtfRElWODE5MikgfHwgXApAQCAtOTQ5LDE0ICsxMDEyLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGUkVRKSA9PSBSVENfVEFNUEVSU0FNUExJTkdGUkVRX1JUQ0NMS19ESVYxMDI0KSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGUkVRKSA9PSBSVENfVEFNUEVSU0FNUExJTkdGUkVRX1JUQ0NMS19ESVY1MTIpICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGUkVRKSA9PSBSVENfVEFNUEVSU0FNUExJTkdGUkVRX1JUQ0NMS19ESVYyNTYpKQorCiAjZGVmaW5lIElTX1JUQ19UQU1QRVJfUFJFQ0hBUkdFX0RVUkFUSU9OKERVUkFUSU9OKSAoKChEVVJBVElPTikgPT0gUlRDX1RBTVBFUlBSRUNIQVJHRURVUkFUSU9OXzFSVENDTEspIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERVUkFUSU9OKSA9PSBSVENfVEFNUEVSUFJFQ0hBUkdFRFVSQVRJT05fMlJUQ0NMSykgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRFVSQVRJT04pID09IFJUQ19UQU1QRVJQUkVDSEFSR0VEVVJBVElPTl80UlRDQ0xLKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChEVVJBVElPTikgPT0gUlRDX1RBTVBFUlBSRUNIQVJHRURVUkFUSU9OXzhSVENDTEspKQotI2RlZmluZSBJU19SVENfVEFNUEVSX1RJTUVTVEFNUE9OVEFNUEVSX0RFVEVDVElPTihERVRFQ1RJT04pICgoKERFVEVDVElPTikgPT0gUlRDX1RJTUVTVEFNUE9OVEFNUEVSREVURUNUSU9OX0VOQUJMRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERFVEVDVElPTikgPT0gUlRDX1RJTUVTVEFNUE9OVEFNUEVSREVURUNUSU9OX0RJU0FCTEUpKQorCiAjZGVmaW5lIElTX1JUQ19UQU1QRVJfUFVMTFVQX1NUQVRFKFNUQVRFKSAoKChTVEFURSkgPT0gUlRDX1RBTVBFUl9QVUxMVVBfRU5BQkxFKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTVEFURSkgPT0gUlRDX1RBTVBFUl9QVUxMVVBfRElTQUJMRSkpCisKKyNkZWZpbmUgSVNfUlRDX1RBTVBFUl9USU1FU1RBTVBPTlRBTVBFUl9ERVRFQ1RJT04oREVURUNUSU9OKSAoKChERVRFQ1RJT04pID09IFJUQ19USU1FU1RBTVBPTlRBTVBFUkRFVEVDVElPTl9FTkFCTEUpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChERVRFQ1RJT04pID09IFJUQ19USU1FU1RBTVBPTlRBTVBFUkRFVEVDVElPTl9ESVNBQkxFKSkKKwogI2RlZmluZSBJU19SVENfV0FLRVVQX0NMT0NLKENMT0NLKSAoKChDTE9DSykgPT0gUlRDX1dBS0VVUENMT0NLX1JUQ0NMS19ESVYxNikgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENMT0NLKSA9PSBSVENfV0FLRVVQQ0xPQ0tfUlRDQ0xLX0RJVjgpICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0xPQ0spID09IFJUQ19XQUtFVVBDTE9DS19SVENDTEtfRElWNCkgICAgfHwgXApAQCAtOTY0LDIwICsxMDMxLDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENMT0NLKSA9PSBSVENfV0FLRVVQQ0xPQ0tfQ0tfU1BSRV8xNkJJVFMpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0xPQ0spID09IFJUQ19XQUtFVVBDTE9DS19DS19TUFJFXzE3QklUUykpCiAKLSNkZWZpbmUgSVNfUlRDX1dBS0VVUF9DT1VOVEVSKENPVU5URVIpICAoKENPVU5URVIpIDw9IDB4RkZGRlUpCi0KKyNkZWZpbmUgSVNfUlRDX1dBS0VVUF9DT1VOVEVSKENPVU5URVIpICAoKENPVU5URVIpIDw9IFJUQ19XVVRSX1dVVCkKIAogI2RlZmluZSBJU19SVENfU01PT1RIX0NBTElCX1BFUklPRChQRVJJT0QpICgoKFBFUklPRCkgPT0gUlRDX1NNT09USENBTElCX1BFUklPRF8zMlNFQykgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklPRCkgPT0gUlRDX1NNT09USENBTElCX1BFUklPRF8xNlNFQykgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklPRCkgPT0gUlRDX1NNT09USENBTElCX1BFUklPRF84U0VDKSkKKwogI2RlZmluZSBJU19SVENfU01PT1RIX0NBTElCX1BMVVMoUExVUykgKCgoUExVUykgPT0gUlRDX1NNT09USENBTElCX1BMVVNQVUxTRVNfU0VUKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQTFVTKSA9PSBSVENfU01PT1RIQ0FMSUJfUExVU1BVTFNFU19SRVNFVCkpCiAKKyNkZWZpbmUgIElTX1JUQ19TTU9PVEhfQ0FMSUJfTUlOVVMoVkFMVUUpICgoVkFMVUUpIDw9IFJUQ19DQUxSX0NBTE0pCiAKLSNkZWZpbmUgIElTX1JUQ19TTU9PVEhfQ0FMSUJfTUlOVVMoVkFMVUUpICgoVkFMVUUpIDw9IDB4MDAwMDAxRkZVKQogI2RlZmluZSBJU19SVENfU0hJRlRfQUREMVMoU0VMKSAoKChTRUwpID09IFJUQ19TSElGVEFERDFTX1JFU0VUKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNFTCkgPT0gUlRDX1NISUZUQUREMVNfU0VUKSkKLSNkZWZpbmUgSVNfUlRDX1NISUZUX1NVQkZTKEZTKSAoKEZTKSA8PSAweDAwMDA3RkZGVSkKKworI2RlZmluZSBJU19SVENfU0hJRlRfU1VCRlMoRlMpICgoRlMpIDw9IFJUQ19TSElGVFJfU1VCRlMpCisKICNkZWZpbmUgSVNfUlRDX0NBTElCX09VVFBVVChPVVRQVVQpICAoKChPVVRQVVQpID09IFJUQ19DQUxJQk9VVFBVVF81MTJIWikgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE9VVFBVVCkgPT0gUlRDX0NBTElCT1VUUFVUXzFIWikpCiAvKioKQEAgLTEwMDAsNCArMTA2OSw0IEBACiB9CiAjZW5kaWYKIAotI2VuZGlmIC8qIF9fU1RNMzJGM3h4X0hBTF9SVENfRVhfSCAqLworI2VuZGlmIC8qIFNUTTMyRjN4eF9IQUxfUlRDX0VYX0ggKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX3NtYXJ0Y2FyZC5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfc21hcnRjYXJkLmgKaW5kZXggNGFiOWEyMC4uMWMwNDI3NyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9oYWxfc21hcnRjYXJkLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfc21hcnRjYXJkLmgKQEAgLTEwNDMsMyArMTA0Myw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIFNUTTMyRjN4eF9IQUxfU01BUlRDQVJEX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfc21hcnRjYXJkX2V4LmggYi9JbmMvc3RtMzJmM3h4X2hhbF9zbWFydGNhcmRfZXguaAppbmRleCBjZTRiY2VhLi43MTY3YmY1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9zbWFydGNhcmRfZXguaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF9zbWFydGNhcmRfZXguaApAQCAtMTQ0LDE4NiArMTQ0LDE4OSBAQAogICAqIEBwYXJhbSAgX19DTE9DS1NPVVJDRV9fIG91dHB1dCB2YXJpYWJsZS4KICAgKiBAcmV0dmFsIHRoZSBTTUFSVENBUkQgY2xvY2tpbmcgc291cmNlLCB3cml0dGVuIGluIF9fQ0xPQ0tTT1VSQ0VfXy4KICAgKi8KLSNpZiBkZWZpbmVkKFNUTTMyRjMwMnhFKXx8IGRlZmluZWQoU1RNMzJGMzAzeEUpIHx8IGRlZmluZWQoU1RNMzJGMzk4eHgpIHx8IGRlZmluZWQoU1RNMzJGMzAyeEMpIHx8IGRlZmluZWQoU1RNMzJGMzAzeEMpIHx8IGRlZmluZWQoU1RNMzJGMzU4eHgpCi0jZGVmaW5lIFNNQVJUQ0FSRF9HRVRDTE9DS1NPVVJDRShfX0hBTkRMRV9fLF9fQ0xPQ0tTT1VSQ0VfXykgICAgICAgXAorI2lmIGRlZmluZWQoU1RNMzJGMzAyeEUpIHx8IGRlZmluZWQoU1RNMzJGMzAzeEUpIHx8IGRlZmluZWQoU1RNMzJGMzk4eHgpIHx8IGRlZmluZWQoU1RNMzJGMzAyeEMpIFwKKyB8fCBkZWZpbmVkKFNUTTMyRjMwM3hDKSB8fCBkZWZpbmVkKFNUTTMyRjM1OHh4KQorI2RlZmluZSBTTUFSVENBUkRfR0VUQ0xPQ0tTT1VSQ0UoX19IQU5ETEVfXyxfX0NMT0NLU09VUkNFX18pICBcCiAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZigoX19IQU5ETEVfXyktPkluc3RhbmNlID09IFVTQVJUMSkgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVVNBUlQxX1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVVNBUlQxX1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQxQ0xLU09VUkNFX1BDTEsyOiAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX1BDTEsyOyAgICAgICAgIFwKKyAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9QQ0xLMjsgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUMUNMS1NPVVJDRV9IU0k6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9IU0k7ICAgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfSFNJOyAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDFDTEtTT1VSQ0VfU1lTQ0xLOiAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfU1lTQ0xLOyAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX1NZU0NMSzsgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQxQ0xLU09VUkNFX0xTRTogICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX0xTRTsgICAgICAgICAgIFwKKyAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9MU0U7ICAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEO1wKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGVsc2UgaWYoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBVU0FSVDIpICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDJfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgXAotICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDJfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDJDTEtTT1VSQ0VfUENMSzE6ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX1BDTEsxOyAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQyQ0xLU09VUkNFX0hTSTogICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX0hTSTsgICAgICAgICAgIFwKKyAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9IU0k7ICAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUMkNMS1NPVVJDRV9TWVNDTEs6ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9TWVNDTEs7ICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfU1lTQ0xLOyAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDJDTEtTT1VSQ0VfTFNFOiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfTFNFOyAgICAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX0xTRTsgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX1VOREVGSU5FRDsgICAgIFwKKyAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9VTkRFRklORUQ7XAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZWxzZSBpZigoX19IQU5ETEVfXyktPkluc3RhbmNlID09IFVTQVJUMykgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUM19TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICBcCi0gICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUM19TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUM0NMS1NPVVJDRV9QQ0xLMTogICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9QQ0xLMTsgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDNDTEtTT1VSQ0VfSFNJOiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfSFNJOyAgICAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX0hTSTsgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQzQ0xLU09VUkNFX1NZU0NMSzogICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX1NZU0NMSzsgICAgICAgIFwKKyAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9TWVNDTEs7ICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUM0NMS1NPVVJDRV9MU0U6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9MU0U7ICAgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfTFNFOyAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX1VOREVGSU5FRDtcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgICAgICAgXAorICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfSB3aGlsZSgwVSkKLSNlbGlmIGRlZmluZWQoU1RNMzJGMzAzeDgpIHx8IGRlZmluZWQoU1RNMzJGMzM0eDgpIHx8IGRlZmluZWQoU1RNMzJGMzI4eHgpIHx8IGRlZmluZWQoU1RNMzJGMzAxeDgpIHx8IGRlZmluZWQoU1RNMzJGMzAyeDgpIHx8IGRlZmluZWQoU1RNMzJGMzE4eHgpCi0jZGVmaW5lIFNNQVJUQ0FSRF9HRVRDTE9DS1NPVVJDRShfX0hBTkRMRV9fLF9fQ0xPQ0tTT1VSQ0VfXykgICAgICAgXAorI2VsaWYgZGVmaW5lZChTVE0zMkYzMDN4OCkgfHwgZGVmaW5lZChTVE0zMkYzMzR4OCkgfHwgZGVmaW5lZChTVE0zMkYzMjh4eCkgfHwgZGVmaW5lZChTVE0zMkYzMDF4OCkgXAorICAgfHwgZGVmaW5lZChTVE0zMkYzMDJ4OCkgfHwgZGVmaW5lZChTVE0zMkYzMTh4eCkKKyNkZWZpbmUgU01BUlRDQVJEX0dFVENMT0NLU09VUkNFKF9fSEFORExFX18sX19DTE9DS1NPVVJDRV9fKSAgXAogICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBVU0FSVDEpICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUMV9TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICBcCi0gICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUMV9TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUMUNMS1NPVVJDRV9QQ0xLMTogICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9QQ0xLMTsgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDFDTEtTT1VSQ0VfSFNJOiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfSFNJOyAgICAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX0hTSTsgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQxQ0xLU09VUkNFX1NZU0NMSzogICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX1NZU0NMSzsgICAgICAgIFwKKyAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9TWVNDTEs7ICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUMUNMS1NPVVJDRV9MU0U6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9MU0U7ICAgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfTFNFOyAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX1VOREVGSU5FRDtcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlIGlmKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gVVNBUlQyKSAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9QQ0xLMTsgICAgICAgICAgICAgXAorICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlIGlmKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gVVNBUlQzKSAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9QQ0xLMTsgICAgICAgICAgICAgXAorICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgICAgICAgXAorICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfSB3aGlsZSgwVSkKICNlbHNlCi0jZGVmaW5lIFNNQVJUQ0FSRF9HRVRDTE9DS1NPVVJDRShfX0hBTkRMRV9fLF9fQ0xPQ0tTT1VSQ0VfXykgICAgICAgXAorI2RlZmluZSBTTUFSVENBUkRfR0VUQ0xPQ0tTT1VSQ0UoX19IQU5ETEVfXyxfX0NMT0NLU09VUkNFX18pICBcCiAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZigoX19IQU5ETEVfXyktPkluc3RhbmNlID09IFVTQVJUMSkgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVVNBUlQxX1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVVNBUlQxX1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQxQ0xLU09VUkNFX1BDTEsyOiAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX1BDTEsyOyAgICAgICAgIFwKKyAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9QQ0xLMjsgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUMUNMS1NPVVJDRV9IU0k6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9IU0k7ICAgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfSFNJOyAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDFDTEtTT1VSQ0VfU1lTQ0xLOiAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfU1lTQ0xLOyAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX1NZU0NMSzsgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQxQ0xLU09VUkNFX0xTRTogICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX0xTRTsgICAgICAgICAgIFwKKyAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9MU0U7ICAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEO1wKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGVsc2UgaWYoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBVU0FSVDIpICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDJfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgXAotICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDJfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDJDTEtTT1VSQ0VfUENMSzE6ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX1BDTEsxOyAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQyQ0xLU09VUkNFX0hTSTogICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX0hTSTsgICAgICAgICAgIFwKKyAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9IU0k7ICAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUMkNMS1NPVVJDRV9TWVNDTEs6ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9TWVNDTEs7ICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfU1lTQ0xLOyAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDJDTEtTT1VSQ0VfTFNFOiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfTFNFOyAgICAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX0xTRTsgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX1VOREVGSU5FRDsgICAgIFwKKyAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9VTkRFRklORUQ7XAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZWxzZSBpZigoX19IQU5ETEVfXyktPkluc3RhbmNlID09IFVTQVJUMykgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUM19TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICBcCi0gICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUM19TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUM0NMS1NPVVJDRV9QQ0xLMTogICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9QQ0xLMTsgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDNDTEtTT1VSQ0VfSFNJOiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfSFNJOyAgICAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX0hTSTsgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQzQ0xLU09VUkNFX1NZU0NMSzogICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX1NZU0NMSzsgICAgICAgIFwKKyAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9TWVNDTEs7ICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUM0NMS1NPVVJDRV9MU0U6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9MU0U7ICAgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfTFNFOyAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gU01BUlRDQVJEX0NMT0NLU09VUkNFX1VOREVGSU5FRDtcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgICAgICAgXAorICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfSB3aGlsZSgwVSkKLSNlbmRpZgorI2VuZGlmIC8qIFNUTTMyRjMwMnhFIHx8IFNUTTMyRjMwM3hFIHx8IFNUTTMyRjM5OHh4IHx8IFNUTTMyRjMwMnhDIHx8IFNUTTMyRjMwM3hDIHx8IFNUTTMyRjM1OHh4ICovCisKIC8qKiBAYnJpZWYgIFNldCB0aGUgVHJhbnNtaXNzaW9uIENvbXBsZXRpb24gZmxhZwogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFNNQVJUQ0FSRCBIYW5kbGUuCiAgICogQG5vdGUgIElmIFRDQkdUIChUcmFuc21pc3Npb24gQ29tcGxldGUgQmVmb3JlIEd1YXJkIFRpbWUpIGZsYWcgaXMgbm90IGF2YWlsYWJsZSBvciBpZgpAQCAtNDA5LDMgKzQxMiw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIFNUTTMyRjN4eF9IQUxfU01BUlRDQVJEX0VYX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfc21idXMuaCBiL0luYy9zdG0zMmYzeHhfaGFsX3NtYnVzLmgKaW5kZXggNGQxOWQ3Ni4uMTljZWYwNCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9oYWxfc21idXMuaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF9zbWJ1cy5oCkBAIC03NDksOCArNzQ5LDggQEAKICAgKi8KIAogLyogUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3JzIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11aW50MzJfdCBIQUxfU01CVVNfR2V0U3RhdGUoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzKTsKLXVpbnQzMl90IEhBTF9TTUJVU19HZXRFcnJvcihTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMpOwordWludDMyX3QgSEFMX1NNQlVTX0dldFN0YXRlKGNvbnN0IFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cyk7Cit1aW50MzJfdCBIQUxfU01CVVNfR2V0RXJyb3IoY29uc3QgU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzKTsKIAogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX3NwaS5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfc3BpLmgKaW5kZXggYmFjNTY2ZS4uMGIwZTc5ZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9oYWxfc3BpLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfc3BpLmgKQEAgLTc3Nyw3ICs3NzcsOCBAQAogCiAvKiBDYWxsYmFja3MgUmVnaXN0ZXIvVW5SZWdpc3RlciBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmIChVU0VfSEFMX1NQSV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU1BJX1JlZ2lzdGVyQ2FsbGJhY2soU1BJX0hhbmRsZVR5cGVEZWYgKmhzcGksIEhBTF9TUElfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwgcFNQSV9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUElfUmVnaXN0ZXJDYWxsYmFjayhTUElfSGFuZGxlVHlwZURlZiAqaHNwaSwgSEFMX1NQSV9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBTUElfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1BJX1VuUmVnaXN0ZXJDYWxsYmFjayhTUElfSGFuZGxlVHlwZURlZiAqaHNwaSwgSEFMX1NQSV9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKICNlbmRpZiAvKiBVU0VfSEFMX1NQSV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIC8qKgpAQCAtODQ3LDMgKzg0OCw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIFNUTTMyRjN4eF9IQUxfU1BJX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfc3BpX2V4LmggYi9JbmMvc3RtMzJmM3h4X2hhbF9zcGlfZXguaAppbmRleCA0YmU1NTFhLi5jZDBmNTM3IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9zcGlfZXguaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF9zcGlfZXguaApAQCAtNzAsMyArNzAsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBTVE0zMkYzeHhfSEFMX1NQSV9FWF9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX3NyYW0uaCBiL0luYy9zdG0zMmYzeHhfaGFsX3NyYW0uaAppbmRleCA1MmVmNGYxLi5hMTMwMjMxIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF9zcmFtLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfc3JhbS5oCkBAIC0yNCwxMCArMjQsMTAgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEZNQ19CQU5LMSkKIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpbmNsdWRlICJzdG0zMmYzeHhfbGxfZm1jLmgiCisjaWYgZGVmaW5lZChGTUNfQkFOSzEpCiAKIC8qKiBAYWRkdG9ncm91cCBTVE0zMkYzeHhfSEFMX0RyaXZlcgogICAqIEB7CkBAIC0yMDUsNyArMjA1LDcgQEAKICAgKi8KIAogLyogU1JBTSAgU3RhdGUgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUhBTF9TUkFNX1N0YXRlVHlwZURlZiBIQUxfU1JBTV9HZXRTdGF0ZShTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtKTsKK0hBTF9TUkFNX1N0YXRlVHlwZURlZiBIQUxfU1JBTV9HZXRTdGF0ZShjb25zdCBTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtKTsKIAogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX3RpbS5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfdGltLmgKaW5kZXggYTFjOGQ4OC4uMmE3ODJjNSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9oYWxfdGltLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfdGltLmgKQEAgLTc1NCw2ICs3NTQsMTUgQEAKICAgKiBAfQogICAqLwogCisvKiogQGRlZmdyb3VwIFRJTV9DQ19ETUFfUmVxdWVzdCBDQ3ggRE1BIHJlcXVlc3Qgc2VsZWN0aW9uCisgICogQHsKKyAgKi8KKyNkZWZpbmUgVElNX0NDRE1BUkVRVUVTVF9DQyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQ3ggRE1BIHJlcXVlc3Qgc2VudCB3aGVuIGNhcHR1cmUgb3IgY29tcGFyZSBtYXRjaCBldmVudCBvY2N1cnMgKi8KKyNkZWZpbmUgVElNX0NDRE1BUkVRVUVTVF9VUERBVEUgICAgICAgICAgICAgVElNX0NSMl9DQ0RTICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQ3ggRE1BIHJlcXVlc3RzIHNlbnQgd2hlbiB1cGRhdGUgZXZlbnQgb2NjdXJzICovCisvKioKKyAgKiBAfQorICAqLworCiAvKiogQGRlZmdyb3VwIFRJTV9GbGFnX2RlZmluaXRpb24gVElNIEZsYWcgRGVmaW5pdGlvbgogICAqIEB7CiAgICovCkBAIC04MDMsMTYgKzgxMiwxNiBAQAogLyoqIEBkZWZncm91cCBUSU1fQ2xvY2tfU291cmNlIFRJTSBDbG9jayBTb3VyY2UKICAgKiBAewogICAqLwotI2RlZmluZSBUSU1fQ0xPQ0tTT1VSQ0VfRVRSTU9ERTIgICAgVElNX1NNQ1JfRVRQU18xICAgICAgLyohPCBFeHRlcm5hbCBjbG9jayBzb3VyY2UgbW9kZSAyICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUSU1fQ0xPQ0tTT1VSQ0VfSU5URVJOQUwgICAgVElNX1NNQ1JfRVRQU18wICAgICAgLyohPCBJbnRlcm5hbCBjbG9jayBzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUSU1fQ0xPQ0tTT1VSQ0VfRVRSTU9ERTEgICAgVElNX1RTX0VUUkYgICAgICAgICAgLyohPCBFeHRlcm5hbCBjbG9jayBzb3VyY2UgbW9kZSAxIChFVFJGKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUSU1fQ0xPQ0tTT1VSQ0VfRVRSTU9ERTIgICAgVElNX1NNQ1JfRVRQU18xICAgICAgLyohPCBFeHRlcm5hbCBjbG9jayBzb3VyY2UgbW9kZSAyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUSU1fQ0xPQ0tTT1VSQ0VfVEkxRUQgICAgICAgVElNX1RTX1RJMUZfRUQgICAgICAgLyohPCBFeHRlcm5hbCBjbG9jayBzb3VyY2UgbW9kZSAxIChUVEkxRlAxICsgZWRnZSBkZXRlY3QuKSAqLworI2RlZmluZSBUSU1fQ0xPQ0tTT1VSQ0VfVEkxICAgICAgICAgVElNX1RTX1RJMUZQMSAgICAgICAgLyohPCBFeHRlcm5hbCBjbG9jayBzb3VyY2UgbW9kZSAxIChUVEkxRlAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUSU1fQ0xPQ0tTT1VSQ0VfVEkyICAgICAgICAgVElNX1RTX1RJMkZQMiAgICAgICAgLyohPCBFeHRlcm5hbCBjbG9jayBzb3VyY2UgbW9kZSAxIChUVEkyRlAyKSAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMCAgICAgICAgVElNX1RTX0lUUjAgICAgICAgICAgLyohPCBFeHRlcm5hbCBjbG9jayBzb3VyY2UgbW9kZSAxIChJVFIwKSAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMSAgICAgICAgVElNX1RTX0lUUjEgICAgICAgICAgLyohPCBFeHRlcm5hbCBjbG9jayBzb3VyY2UgbW9kZSAxIChJVFIxKSAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMiAgICAgICAgVElNX1RTX0lUUjIgICAgICAgICAgLyohPCBFeHRlcm5hbCBjbG9jayBzb3VyY2UgbW9kZSAxIChJVFIyKSAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMyAgICAgICAgVElNX1RTX0lUUjMgICAgICAgICAgLyohPCBFeHRlcm5hbCBjbG9jayBzb3VyY2UgbW9kZSAxIChJVFIzKSAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBUSU1fQ0xPQ0tTT1VSQ0VfVEkxRUQgICAgICAgVElNX1RTX1RJMUZfRUQgICAgICAgLyohPCBFeHRlcm5hbCBjbG9jayBzb3VyY2UgbW9kZSAxIChUVEkxRlAxICsgZWRnZSBkZXRlY3QuKSAqLwotI2RlZmluZSBUSU1fQ0xPQ0tTT1VSQ0VfVEkxICAgICAgICAgVElNX1RTX1RJMUZQMSAgICAgICAgLyohPCBFeHRlcm5hbCBjbG9jayBzb3VyY2UgbW9kZSAxIChUVEkxRlAxKSAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBUSU1fQ0xPQ0tTT1VSQ0VfVEkyICAgICAgICAgVElNX1RTX1RJMkZQMiAgICAgICAgLyohPCBFeHRlcm5hbCBjbG9jayBzb3VyY2UgbW9kZSAxIChUVEkyRlAyKSAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBUSU1fQ0xPQ0tTT1VSQ0VfRVRSTU9ERTEgICAgVElNX1RTX0VUUkYgICAgICAgICAgLyohPCBFeHRlcm5hbCBjbG9jayBzb3VyY2UgbW9kZSAxIChFVFJGKSAgICAgICAgICAgICAgICAgICAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTE3ODAsNiArMTc4OSwxNyBAQAogICAgIFRJTV9TRVRfQ0FQVFVSRVBPTEFSSVRZKChfX0hBTkRMRV9fKSwgKF9fQ0hBTk5FTF9fKSwgKF9fUE9MQVJJVFlfXykpOyBcCiAgIH13aGlsZSgwKQogCisvKiogQGJyaWVmICBTZWxlY3QgdGhlIENhcHR1cmUvY29tcGFyZSBETUEgcmVxdWVzdCBzb3VyY2UuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgVElNIEhhbmRsZS4KKyAgKiBAcGFyYW0gIF9fQ0NETUFfXyBzcGVjaWZpZXMgQ2FwdHVyZS9jb21wYXJlIERNQSByZXF1ZXN0IHNvdXJjZQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIFRJTV9DQ0RNQVJFUVVFU1RfQ0M6IENDeCBETUEgcmVxdWVzdCBnZW5lcmF0ZWQgb24gQ2FwdHVyZS9Db21wYXJlIGV2ZW50CisgICogICAgICAgICAgICBAYXJnIFRJTV9DQ0RNQVJFUVVFU1RfVVBEQVRFOiBDQ3ggRE1BIHJlcXVlc3QgZ2VuZXJhdGVkIG9uIFVwZGF0ZSBldmVudAorICAqIEByZXR2YWwgTm9uZQorICAqLworI2RlZmluZSBfX0hBTF9USU1fU0VMRUNUX0NDRE1BUkVRVUVTVChfX0hBTkRMRV9fLCBfX0NDRE1BX18pICAgIFwKKyAgTU9ESUZZX1JFRygoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUjIsIFRJTV9DUjJfQ0NEUywgKF9fQ0NETUFfXykpCisKIC8qKgogICAqIEB9CiAgICovCkBAIC0xODcwLDcgKzE4OTAsNyBAQAogCiAjaWYgZGVmaW5lZChUSU1fQ1IxX1VJRlJFTUFQKQogI2RlZmluZSBJU19USU1fVUlGUkVNQVBfTU9ERShfX01PREVfXykgICAgICgoKF9fTU9ERV9fKSA9PSBUSU1fVUlGUkVNQVBfRElTQUJMRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBUSU1fVUlGUkVNQVBfRU5BTEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBUSU1fVUlGUkVNQVBfRU5BQkxFKSkKIAogI2VuZGlmIC8qIFRJTV9DUjFfVUlGUkVNQVAgKi8KICNkZWZpbmUgSVNfVElNX0NMT0NLRElWSVNJT05fRElWKF9fRElWX18pICAoKChfX0RJVl9fKSA9PSBUSU1fQ0xPQ0tESVZJU0lPTl9ESVYxKSB8fCBcCkBAIC0xOTM5LDIwICsxOTU5LDIzIEBACiAjZGVmaW5lIElTX1RJTV9PUE1fQ0hBTk5FTFMoX19DSEFOTkVMX18pICAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMikpCiAKKyNkZWZpbmUgSVNfVElNX1BFUklPRChfX0hBTkRMRV9fLCBfX1BFUklPRF9fKSBcCisgICgoSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKCgoX19IQU5ETEVfXyktPkluc3RhbmNlKSkgPT0gMFUpID8gKCgoX19QRVJJT0RfXykgPiAwVSkgJiYgKChfX1BFUklPRF9fKSA8PSAweDAwMDBGRkZGVSkpIDogKChfX1BFUklPRF9fKSA+IDBVKSkKKwogI2RlZmluZSBJU19USU1fQ09NUExFTUVOVEFSWV9DSEFOTkVMUyhfX0NIQU5ORUxfXykgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMykpCiAKICNkZWZpbmUgSVNfVElNX0NMT0NLU09VUkNFKF9fQ0xPQ0tfXykgKCgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfSU5URVJOQUwpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfRVRSTU9ERTEpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfRVRSTU9ERTIpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMCkgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMSkgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMikgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMykgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfVEkxRUQpICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfVEkxKSAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfVEkyKSAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfRVRSTU9ERTEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NMT0NLX18pID09IFRJTV9DTE9DS1NPVVJDRV9JVFIwKSAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NMT0NLX18pID09IFRJTV9DTE9DS1NPVVJDRV9JVFIxKSAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NMT0NLX18pID09IFRJTV9DTE9DS1NPVVJDRV9JVFIyKSAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NMT0NLX18pID09IFRJTV9DTE9DS1NPVVJDRV9JVFIzKSkKIAogI2RlZmluZSBJU19USU1fQ0xPQ0tQT0xBUklUWShfX1BPTEFSSVRZX18pICgoKF9fUE9MQVJJVFlfXykgPT0gVElNX0NMT0NLUE9MQVJJVFlfSU5WRVJURUQpICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPTEFSSVRZX18pID09IFRJTV9DTE9DS1BPTEFSSVRZX05PTklOVkVSVEVEKSB8fCBcCkBAIC0yMDg5LDEzICsyMTEyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IFRJTV9PQ01PREVfRk9SQ0VEX0lOQUNUSVZFKSkKICNlbmRpZiAvKiBUSU1fQ0NNUjFfT0MxTV8zICovCiAKLSNkZWZpbmUgSVNfVElNX1RSSUdHRVJfU0VMRUNUSU9OKF9fU0VMRUNUSU9OX18pICgoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIwKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjIpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIzKSB8fCBcCisjZGVmaW5lIElTX1RJTV9UUklHR0VSX1NFTEVDVElPTihfX1NFTEVDVElPTl9fKSAoKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMCkgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjEpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIyKSAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMykgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX1RJMUZfRUQpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19USTFGUDEpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19USTJGUDIpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19USTFGUDEpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfVEkyRlAyKSAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0VUUkYpKQogCiAjZGVmaW5lIElTX1RJTV9JTlRFUk5BTF9UUklHR0VSRVZFTlRfU0VMRUNUSU9OKF9fU0VMRUNUSU9OX18pICgoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIwKSB8fCBcCkBAIC0yMzc4LDcgKzI0MDEsNyBAQAogICAqIEB7CiAgICovCiAvKiBUaW1lciBFbmNvZGVyIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX0luaXQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sICBUSU1fRW5jb2Rlcl9Jbml0VHlwZURlZiAqc0NvbmZpZyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0VuY29kZXJfSW5pdChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgY29uc3QgVElNX0VuY29kZXJfSW5pdFR5cGVEZWYgKnNDb25maWcpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX0RlSW5pdChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CiB2b2lkIEhBTF9USU1fRW5jb2Rlcl9Nc3BJbml0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKIHZvaWQgSEFMX1RJTV9FbmNvZGVyX01zcERlSW5pdChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmM3h4X2hhbF90aW1fZXguaCBiL0luYy9zdG0zMmYzeHhfaGFsX3RpbV9leC5oCmluZGV4IDE4ZjA0ZjAuLmI5NWM1MDMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfaGFsX3RpbV9leC5oCisrKyBiL0luYy9zdG0zMmYzeHhfaGFsX3RpbV9leC5oCkBAIC0zMTYsNyArMzE2LDcgQEAKIC8qIEVuZCBvZiBleHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIFByaXZhdGUgZnVuY3Rpb25zLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGFkZHRvZ3JvdXAgVElNRXhfUHJpdmF0ZV9GdW5jdGlvbnMgVElNRXggUHJpdmF0ZSBGdW5jdGlvbnMKKy8qKiBAYWRkdG9ncm91cCBUSU1FeF9Qcml2YXRlX0Z1bmN0aW9ucyBUSU0gRXh0ZW5kZWQgUHJpdmF0ZSBGdW5jdGlvbnMKICAgKiBAewogICAqLwogdm9pZCBUSU1FeF9ETUFDb21tdXRhdGlvbkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfdHNjLmggYi9JbmMvc3RtMzJmM3h4X2hhbF90c2MuaAppbmRleCA4MTFlYmE1Li4zNjViYWZhIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF90c2MuaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF90c2MuaApAQCAtMTg2LDIyICsxODYsMzggQEAKIC8qKiBAZGVmZ3JvdXAgVFNDX0NUUHVsc2VITF9Db25maWcgQ1RQdWxzZSBIaWdoIExlbmd0aAogICAqIEB7CiAgICovCi0jZGVmaW5lIFRTQ19DVFBIXzFDWUNMRSAgICAgICAgIDB4MDAwMDAwMDBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBoaWdoIGR1cmluZyAxIGN5Y2xlIChQR0NMSykgICAqLwotI2RlZmluZSBUU0NfQ1RQSF8yQ1lDTEVTICAgICAgICBUU0NfQ1JfQ1RQSF8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgaGlnaCBkdXJpbmcgMiBjeWNsZXMgKFBHQ0xLKSAgKi8KLSNkZWZpbmUgVFNDX0NUUEhfM0NZQ0xFUyAgICAgICAgVFNDX0NSX0NUUEhfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGhpZ2ggZHVyaW5nIDMgY3ljbGVzIChQR0NMSykgICovCi0jZGVmaW5lIFRTQ19DVFBIXzRDWUNMRVMgICAgICAgIChUU0NfQ1JfQ1RQSF8xIHwgVFNDX0NSX0NUUEhfMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBoaWdoIGR1cmluZyA0IGN5Y2xlcyAoUEdDTEspICAqLwotI2RlZmluZSBUU0NfQ1RQSF81Q1lDTEVTICAgICAgICBUU0NfQ1JfQ1RQSF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgaGlnaCBkdXJpbmcgNSBjeWNsZXMgKFBHQ0xLKSAgKi8KLSNkZWZpbmUgVFNDX0NUUEhfNkNZQ0xFUyAgICAgICAgKFRTQ19DUl9DVFBIXzIgfCBUU0NfQ1JfQ1RQSF8wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGhpZ2ggZHVyaW5nIDYgY3ljbGVzIChQR0NMSykgICovCi0jZGVmaW5lIFRTQ19DVFBIXzdDWUNMRVMgICAgICAgIChUU0NfQ1JfQ1RQSF8yIHwgVFNDX0NSX0NUUEhfMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBoaWdoIGR1cmluZyA3IGN5Y2xlcyAoUEdDTEspICAqLwotI2RlZmluZSBUU0NfQ1RQSF84Q1lDTEVTICAgICAgICAoVFNDX0NSX0NUUEhfMiB8IFRTQ19DUl9DVFBIXzEgfCBUU0NfQ1JfQ1RQSF8wKSAgICAgICAgICAgICAgICAgLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgaGlnaCBkdXJpbmcgOCBjeWNsZXMgKFBHQ0xLKSAgKi8KLSNkZWZpbmUgVFNDX0NUUEhfOUNZQ0xFUyAgICAgICAgVFNDX0NSX0NUUEhfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGhpZ2ggZHVyaW5nIDkgY3ljbGVzIChQR0NMSykgICovCi0jZGVmaW5lIFRTQ19DVFBIXzEwQ1lDTEVTICAgICAgIChUU0NfQ1JfQ1RQSF8zIHwgVFNDX0NSX0NUUEhfMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBoaWdoIGR1cmluZyAxMCBjeWNsZXMgKFBHQ0xLKSAqLwotI2RlZmluZSBUU0NfQ1RQSF8xMUNZQ0xFUyAgICAgICAoVFNDX0NSX0NUUEhfMyB8IFRTQ19DUl9DVFBIXzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgaGlnaCBkdXJpbmcgMTEgY3ljbGVzIChQR0NMSykgKi8KLSNkZWZpbmUgVFNDX0NUUEhfMTJDWUNMRVMgICAgICAgKFRTQ19DUl9DVFBIXzMgfCBUU0NfQ1JfQ1RQSF8xIHwgVFNDX0NSX0NUUEhfMCkgICAgICAgICAgICAgICAgIC8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGhpZ2ggZHVyaW5nIDEyIGN5Y2xlcyAoUEdDTEspICovCi0jZGVmaW5lIFRTQ19DVFBIXzEzQ1lDTEVTICAgICAgIChUU0NfQ1JfQ1RQSF8zIHwgVFNDX0NSX0NUUEhfMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBoaWdoIGR1cmluZyAxMyBjeWNsZXMgKFBHQ0xLKSAqLwotI2RlZmluZSBUU0NfQ1RQSF8xNENZQ0xFUyAgICAgICAoVFNDX0NSX0NUUEhfMyB8IFRTQ19DUl9DVFBIXzIgfCBUU0NfQ1JfQ1RQSF8wKSAgICAgICAgICAgICAgICAgLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgaGlnaCBkdXJpbmcgMTQgY3ljbGVzIChQR0NMSykgKi8KLSNkZWZpbmUgVFNDX0NUUEhfMTVDWUNMRVMgICAgICAgKFRTQ19DUl9DVFBIXzMgfCBUU0NfQ1JfQ1RQSF8yIHwgVFNDX0NSX0NUUEhfMSkgICAgICAgICAgICAgICAgIC8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGhpZ2ggZHVyaW5nIDE1IGN5Y2xlcyAoUEdDTEspICovCi0jZGVmaW5lIFRTQ19DVFBIXzE2Q1lDTEVTICAgICAgIChUU0NfQ1JfQ1RQSF8zIHwgVFNDX0NSX0NUUEhfMiB8IFRTQ19DUl9DVFBIXzEgfCBUU0NfQ1JfQ1RQSF8wKSAvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBoaWdoIGR1cmluZyAxNiBjeWNsZXMgKFBHQ0xLKSAqLworI2RlZmluZSBUU0NfQ1RQSF8xQ1lDTEUgICAgICAgICAweDAwMDAwMDAwVUwKKy8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGhpZ2ggZHVyaW5nIDEgY3ljbGUgKFBHQ0xLKSAgICovCisjZGVmaW5lIFRTQ19DVFBIXzJDWUNMRVMgICAgICAgIFRTQ19DUl9DVFBIXzAKKy8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGhpZ2ggZHVyaW5nIDIgY3ljbGVzIChQR0NMSykgICovCisjZGVmaW5lIFRTQ19DVFBIXzNDWUNMRVMgICAgICAgIFRTQ19DUl9DVFBIXzEKKy8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGhpZ2ggZHVyaW5nIDMgY3ljbGVzIChQR0NMSykgICovCisjZGVmaW5lIFRTQ19DVFBIXzRDWUNMRVMgICAgICAgIChUU0NfQ1JfQ1RQSF8xIHwgVFNDX0NSX0NUUEhfMCkKKy8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGhpZ2ggZHVyaW5nIDQgY3ljbGVzIChQR0NMSykgICovCisjZGVmaW5lIFRTQ19DVFBIXzVDWUNMRVMgICAgICAgIFRTQ19DUl9DVFBIXzIKKy8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGhpZ2ggZHVyaW5nIDUgY3ljbGVzIChQR0NMSykgICovCisjZGVmaW5lIFRTQ19DVFBIXzZDWUNMRVMgICAgICAgIChUU0NfQ1JfQ1RQSF8yIHwgVFNDX0NSX0NUUEhfMCkKKy8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGhpZ2ggZHVyaW5nIDYgY3ljbGVzIChQR0NMSykgICovCisjZGVmaW5lIFRTQ19DVFBIXzdDWUNMRVMgICAgICAgIChUU0NfQ1JfQ1RQSF8yIHwgVFNDX0NSX0NUUEhfMSkKKy8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGhpZ2ggZHVyaW5nIDcgY3ljbGVzIChQR0NMSykgICovCisjZGVmaW5lIFRTQ19DVFBIXzhDWUNMRVMgICAgICAgIChUU0NfQ1JfQ1RQSF8yIHwgVFNDX0NSX0NUUEhfMSB8IFRTQ19DUl9DVFBIXzApCisvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBoaWdoIGR1cmluZyA4IGN5Y2xlcyAoUEdDTEspICAqLworI2RlZmluZSBUU0NfQ1RQSF85Q1lDTEVTICAgICAgICBUU0NfQ1JfQ1RQSF8zCisvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBoaWdoIGR1cmluZyA5IGN5Y2xlcyAoUEdDTEspICAqLworI2RlZmluZSBUU0NfQ1RQSF8xMENZQ0xFUyAgICAgICAoVFNDX0NSX0NUUEhfMyB8IFRTQ19DUl9DVFBIXzApCisvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBoaWdoIGR1cmluZyAxMCBjeWNsZXMgKFBHQ0xLKSAqLworI2RlZmluZSBUU0NfQ1RQSF8xMUNZQ0xFUyAgICAgICAoVFNDX0NSX0NUUEhfMyB8IFRTQ19DUl9DVFBIXzEpCisvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBoaWdoIGR1cmluZyAxMSBjeWNsZXMgKFBHQ0xLKSAqLworI2RlZmluZSBUU0NfQ1RQSF8xMkNZQ0xFUyAgICAgICAoVFNDX0NSX0NUUEhfMyB8IFRTQ19DUl9DVFBIXzEgfCBUU0NfQ1JfQ1RQSF8wKQorLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgaGlnaCBkdXJpbmcgMTIgY3ljbGVzIChQR0NMSykgKi8KKyNkZWZpbmUgVFNDX0NUUEhfMTNDWUNMRVMgICAgICAgKFRTQ19DUl9DVFBIXzMgfCBUU0NfQ1JfQ1RQSF8yKQorLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgaGlnaCBkdXJpbmcgMTMgY3ljbGVzIChQR0NMSykgKi8KKyNkZWZpbmUgVFNDX0NUUEhfMTRDWUNMRVMgICAgICAgKFRTQ19DUl9DVFBIXzMgfCBUU0NfQ1JfQ1RQSF8yIHwgVFNDX0NSX0NUUEhfMCkKKy8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGhpZ2ggZHVyaW5nIDE0IGN5Y2xlcyAoUEdDTEspICovCisjZGVmaW5lIFRTQ19DVFBIXzE1Q1lDTEVTICAgICAgIChUU0NfQ1JfQ1RQSF8zIHwgVFNDX0NSX0NUUEhfMiB8IFRTQ19DUl9DVFBIXzEpCisvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBoaWdoIGR1cmluZyAxNSBjeWNsZXMgKFBHQ0xLKSAqLworI2RlZmluZSBUU0NfQ1RQSF8xNkNZQ0xFUyAgICAgICAoVFNDX0NSX0NUUEhfMyB8IFRTQ19DUl9DVFBIXzIgfCBUU0NfQ1JfQ1RQSF8xIHwgVFNDX0NSX0NUUEhfMCkKKy8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGhpZ2ggZHVyaW5nIDE2IGN5Y2xlcyAoUEdDTEspICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjA5LDIyICsyMjUsMzggQEAKIC8qKiBAZGVmZ3JvdXAgVFNDX0NUUHVsc2VMTF9Db25maWcgQ1RQdWxzZSBMb3cgTGVuZ3RoCiAgICogQHsKICAgKi8KLSNkZWZpbmUgVFNDX0NUUExfMUNZQ0xFICAgICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBsb3cgZHVyaW5nIDEgY3ljbGUgKFBHQ0xLKSAgICovCi0jZGVmaW5lIFRTQ19DVFBMXzJDWUNMRVMgICAgICAgIFRTQ19DUl9DVFBMXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgbG93IGR1cmluZyAyIGN5Y2xlcyAoUEdDTEspICAqLwotI2RlZmluZSBUU0NfQ1RQTF8zQ1lDTEVTICAgICAgICBUU0NfQ1JfQ1RQTF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGxvdyBkdXJpbmcgMyBjeWNsZXMgKFBHQ0xLKSAgKi8KLSNkZWZpbmUgVFNDX0NUUExfNENZQ0xFUyAgICAgICAgKFRTQ19DUl9DVFBMXzEgfCBUU0NfQ1JfQ1RQTF8wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBsb3cgZHVyaW5nIDQgY3ljbGVzIChQR0NMSykgICovCi0jZGVmaW5lIFRTQ19DVFBMXzVDWUNMRVMgICAgICAgIFRTQ19DUl9DVFBMXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgbG93IGR1cmluZyA1IGN5Y2xlcyAoUEdDTEspICAqLwotI2RlZmluZSBUU0NfQ1RQTF82Q1lDTEVTICAgICAgICAoVFNDX0NSX0NUUExfMiB8IFRTQ19DUl9DVFBMXzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGxvdyBkdXJpbmcgNiBjeWNsZXMgKFBHQ0xLKSAgKi8KLSNkZWZpbmUgVFNDX0NUUExfN0NZQ0xFUyAgICAgICAgKFRTQ19DUl9DVFBMXzIgfCBUU0NfQ1JfQ1RQTF8xKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBsb3cgZHVyaW5nIDcgY3ljbGVzIChQR0NMSykgICovCi0jZGVmaW5lIFRTQ19DVFBMXzhDWUNMRVMgICAgICAgIChUU0NfQ1JfQ1RQTF8yIHwgVFNDX0NSX0NUUExfMSB8IFRTQ19DUl9DVFBMXzApICAgICAgICAgICAgICAgICAgLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgbG93IGR1cmluZyA4IGN5Y2xlcyAoUEdDTEspICAqLwotI2RlZmluZSBUU0NfQ1RQTF85Q1lDTEVTICAgICAgICBUU0NfQ1JfQ1RQTF8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGxvdyBkdXJpbmcgOSBjeWNsZXMgKFBHQ0xLKSAgKi8KLSNkZWZpbmUgVFNDX0NUUExfMTBDWUNMRVMgICAgICAgKFRTQ19DUl9DVFBMXzMgfCBUU0NfQ1JfQ1RQTF8wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBsb3cgZHVyaW5nIDEwIGN5Y2xlcyAoUEdDTEspICovCi0jZGVmaW5lIFRTQ19DVFBMXzExQ1lDTEVTICAgICAgIChUU0NfQ1JfQ1RQTF8zIHwgVFNDX0NSX0NUUExfMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgbG93IGR1cmluZyAxMSBjeWNsZXMgKFBHQ0xLKSAqLwotI2RlZmluZSBUU0NfQ1RQTF8xMkNZQ0xFUyAgICAgICAoVFNDX0NSX0NUUExfMyB8IFRTQ19DUl9DVFBMXzEgfCBUU0NfQ1JfQ1RQTF8wKSAgICAgICAgICAgICAgICAgIC8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGxvdyBkdXJpbmcgMTIgY3ljbGVzIChQR0NMSykgKi8KLSNkZWZpbmUgVFNDX0NUUExfMTNDWUNMRVMgICAgICAgKFRTQ19DUl9DVFBMXzMgfCBUU0NfQ1JfQ1RQTF8yKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBsb3cgZHVyaW5nIDEzIGN5Y2xlcyAoUEdDTEspICovCi0jZGVmaW5lIFRTQ19DVFBMXzE0Q1lDTEVTICAgICAgIChUU0NfQ1JfQ1RQTF8zIHwgVFNDX0NSX0NUUExfMiB8IFRTQ19DUl9DVFBMXzApICAgICAgICAgICAgICAgICAgLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgbG93IGR1cmluZyAxNCBjeWNsZXMgKFBHQ0xLKSAqLwotI2RlZmluZSBUU0NfQ1RQTF8xNUNZQ0xFUyAgICAgICAoVFNDX0NSX0NUUExfMyB8IFRTQ19DUl9DVFBMXzIgfCBUU0NfQ1JfQ1RQTF8xKSAgICAgICAgICAgICAgICAgIC8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGxvdyBkdXJpbmcgMTUgY3ljbGVzIChQR0NMSykgKi8KLSNkZWZpbmUgVFNDX0NUUExfMTZDWUNMRVMgICAgICAgKFRTQ19DUl9DVFBMXzMgfCBUU0NfQ1JfQ1RQTF8yIHwgVFNDX0NSX0NUUExfMSB8IFRTQ19DUl9DVFBMXzApICAvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBsb3cgZHVyaW5nIDE2IGN5Y2xlcyAoUEdDTEspICovCisjZGVmaW5lIFRTQ19DVFBMXzFDWUNMRSAgICAgICAgIDB4MDAwMDAwMDBVTAorLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgbG93IGR1cmluZyAxIGN5Y2xlIChQR0NMSykgICAqLworI2RlZmluZSBUU0NfQ1RQTF8yQ1lDTEVTICAgICAgICBUU0NfQ1JfQ1RQTF8wCisvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBsb3cgZHVyaW5nIDIgY3ljbGVzIChQR0NMSykgICovCisjZGVmaW5lIFRTQ19DVFBMXzNDWUNMRVMgICAgICAgIFRTQ19DUl9DVFBMXzEKKy8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGxvdyBkdXJpbmcgMyBjeWNsZXMgKFBHQ0xLKSAgKi8KKyNkZWZpbmUgVFNDX0NUUExfNENZQ0xFUyAgICAgICAgKFRTQ19DUl9DVFBMXzEgfCBUU0NfQ1JfQ1RQTF8wKQorLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgbG93IGR1cmluZyA0IGN5Y2xlcyAoUEdDTEspICAqLworI2RlZmluZSBUU0NfQ1RQTF81Q1lDTEVTICAgICAgICBUU0NfQ1JfQ1RQTF8yCisvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBsb3cgZHVyaW5nIDUgY3ljbGVzIChQR0NMSykgICovCisjZGVmaW5lIFRTQ19DVFBMXzZDWUNMRVMgICAgICAgIChUU0NfQ1JfQ1RQTF8yIHwgVFNDX0NSX0NUUExfMCkKKy8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGxvdyBkdXJpbmcgNiBjeWNsZXMgKFBHQ0xLKSAgKi8KKyNkZWZpbmUgVFNDX0NUUExfN0NZQ0xFUyAgICAgICAgKFRTQ19DUl9DVFBMXzIgfCBUU0NfQ1JfQ1RQTF8xKQorLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgbG93IGR1cmluZyA3IGN5Y2xlcyAoUEdDTEspICAqLworI2RlZmluZSBUU0NfQ1RQTF84Q1lDTEVTICAgICAgICAoVFNDX0NSX0NUUExfMiB8IFRTQ19DUl9DVFBMXzEgfCBUU0NfQ1JfQ1RQTF8wKQorLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgbG93IGR1cmluZyA4IGN5Y2xlcyAoUEdDTEspICAqLworI2RlZmluZSBUU0NfQ1RQTF85Q1lDTEVTICAgICAgICBUU0NfQ1JfQ1RQTF8zCisvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBsb3cgZHVyaW5nIDkgY3ljbGVzIChQR0NMSykgICovCisjZGVmaW5lIFRTQ19DVFBMXzEwQ1lDTEVTICAgICAgIChUU0NfQ1JfQ1RQTF8zIHwgVFNDX0NSX0NUUExfMCkKKy8qITwgQ2hhcmdlIHRyYW5zZmVyIHB1bHNlIGxvdyBkdXJpbmcgMTAgY3ljbGVzIChQR0NMSykgKi8KKyNkZWZpbmUgVFNDX0NUUExfMTFDWUNMRVMgICAgICAgKFRTQ19DUl9DVFBMXzMgfCBUU0NfQ1JfQ1RQTF8xKQorLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgbG93IGR1cmluZyAxMSBjeWNsZXMgKFBHQ0xLKSAqLworI2RlZmluZSBUU0NfQ1RQTF8xMkNZQ0xFUyAgICAgICAoVFNDX0NSX0NUUExfMyB8IFRTQ19DUl9DVFBMXzEgfCBUU0NfQ1JfQ1RQTF8wKQorLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgbG93IGR1cmluZyAxMiBjeWNsZXMgKFBHQ0xLKSAqLworI2RlZmluZSBUU0NfQ1RQTF8xM0NZQ0xFUyAgICAgICAoVFNDX0NSX0NUUExfMyB8IFRTQ19DUl9DVFBMXzIpCisvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBsb3cgZHVyaW5nIDEzIGN5Y2xlcyAoUEdDTEspICovCisjZGVmaW5lIFRTQ19DVFBMXzE0Q1lDTEVTICAgICAgIChUU0NfQ1JfQ1RQTF8zIHwgVFNDX0NSX0NUUExfMiB8IFRTQ19DUl9DVFBMXzApCisvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBsb3cgZHVyaW5nIDE0IGN5Y2xlcyAoUEdDTEspICovCisjZGVmaW5lIFRTQ19DVFBMXzE1Q1lDTEVTICAgICAgIChUU0NfQ1JfQ1RQTF8zIHwgVFNDX0NSX0NUUExfMiB8IFRTQ19DUl9DVFBMXzEpCisvKiE8IENoYXJnZSB0cmFuc2ZlciBwdWxzZSBsb3cgZHVyaW5nIDE1IGN5Y2xlcyAoUEdDTEspICovCisjZGVmaW5lIFRTQ19DVFBMXzE2Q1lDTEVTICAgICAgIChUU0NfQ1JfQ1RQTF8zIHwgVFNDX0NSX0NUUExfMiB8IFRTQ19DUl9DVFBMXzEgfCBUU0NfQ1JfQ1RQTF8wKQorLyohPCBDaGFyZ2UgdHJhbnNmZXIgcHVsc2UgbG93IGR1cmluZyAxNiBjeWNsZXMgKFBHQ0xLKSAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTI4OCw4ICszMjAsMTEgQEAKIC8qKiBAZGVmZ3JvdXAgVFNDX0FjcXVpc2l0aW9uX01vZGUgQWNxdWlzaXRpb24gTW9kZQogICAqIEB7CiAgICovCi0jZGVmaW5lIFRTQ19BQ1FfTU9ERV9OT1JNQUwgICAgIDB4MDAwMDAwMDBVTCAgLyohPCBOb3JtYWwgYWNxdWlzaXRpb24gbW9kZSAoYWNxdWlzaXRpb24gc3RhcnRzIGFzIHNvb24gYXMgU1RBUlQgYml0IGlzIHNldCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRTQ19BQ1FfTU9ERV9TWU5DSFJPICAgIFRTQ19DUl9BTSAgICAgLyohPCBTeW5jaHJvbml6ZWQgYWNxdWlzaXRpb24gbW9kZSAoYWNxdWlzaXRpb24gc3RhcnRzIGlmIFNUQVJUIGJpdCBpcyBzZXQgYW5kIHdoZW4gdGhlIHNlbGVjdGVkIHNpZ25hbCBpcyBkZXRlY3RlZCBvbiB0aGUgU1lOQyBpbnB1dCBwaW4pICovCisjZGVmaW5lIFRTQ19BQ1FfTU9ERV9OT1JNQUwgICAgIDB4MDAwMDAwMDBVTAorLyohPCBOb3JtYWwgYWNxdWlzaXRpb24gbW9kZSAoYWNxdWlzaXRpb24gc3RhcnRzIGFzIHNvb24gYXMgU1RBUlQgYml0IGlzIHNldCkgKi8KKyNkZWZpbmUgVFNDX0FDUV9NT0RFX1NZTkNIUk8gICAgVFNDX0NSX0FNCisvKiE8IFN5bmNocm9uaXplZCBhY3F1aXNpdGlvbiBtb2RlIChhY3F1aXNpdGlvbiBzdGFydHMgaWYgU1RBUlQgYml0IGlzIHNldCBhbmQKK3doZW4gdGhlIHNlbGVjdGVkIHNpZ25hbCBpcyBkZXRlY3RlZCBvbiB0aGUgU1lOQyBpbnB1dCBwaW4pICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzgyLDEwICs0MTcsMTAgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNpZiAoVVNFX0hBTF9UU0NfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0jZGVmaW5lIF9fSEFMX1RTQ19SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgZG97ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlN0YXRlID0gSEFMX1RTQ19TVEFURV9SRVNFVDsgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcEluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcERlSW5pdENhbGxiYWNrID0gTlVMTDsgICAgICAgICAgXAorI2RlZmluZSBfX0hBTF9UU0NfUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgIGRveyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9UU0NfU1RBVEVfUkVTRVQ7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwSW5pdENhbGxiYWNrID0gTlVMTDsgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcERlSW5pdENhbGxiYWNrID0gTlVMTDsgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKICNlbHNlCiAjZGVmaW5lIF9fSEFMX1RTQ19SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgKChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfVFNDX1NUQVRFX1JFU0VUKQpAQCAtNjU1LDcgKzY5MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBUU0NfTUNWXzIwNDcpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IFRTQ19NQ1ZfNDA5NSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gVFNDX01DVl84MTkxKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gVFNDX01DVl8xNjM4MykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBUU0NfTUNWXzE2MzgzKSkKIAogI2RlZmluZSBJU19UU0NfSU9ERUYoX19WQUxVRV9fKSAgICAgICAgICgoKF9fVkFMVUVfXykgPT0gVFNDX0lPREVGX09VVF9QUF9MT1cpIHx8ICgoX19WQUxVRV9fKSA9PSBUU0NfSU9ERUZfSU5fRkxPQVQpKQogCkBAIC03NDAsOCArNzc1LDggQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9UU0NfU3RvcChUU0NfSGFuZGxlVHlwZURlZiAqaHRzYyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVFNDX1N0b3BfSVQoVFNDX0hhbmRsZVR5cGVEZWYgKmh0c2MpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RTQ19Qb2xsRm9yQWNxdWlzaXRpb24oVFNDX0hhbmRsZVR5cGVEZWYgKmh0c2MpOwotVFNDX0dyb3VwU3RhdHVzVHlwZURlZiBIQUxfVFNDX0dyb3VwR2V0U3RhdHVzKFRTQ19IYW5kbGVUeXBlRGVmICpodHNjLCB1aW50MzJfdCBneF9pbmRleCk7Ci11aW50MzJfdCBIQUxfVFNDX0dyb3VwR2V0VmFsdWUoVFNDX0hhbmRsZVR5cGVEZWYgKmh0c2MsIHVpbnQzMl90IGd4X2luZGV4KTsKK1RTQ19Hcm91cFN0YXR1c1R5cGVEZWYgSEFMX1RTQ19Hcm91cEdldFN0YXR1cyhjb25zdCBUU0NfSGFuZGxlVHlwZURlZiAqaHRzYywgdWludDMyX3QgZ3hfaW5kZXgpOwordWludDMyX3QgSEFMX1RTQ19Hcm91cEdldFZhbHVlKGNvbnN0IFRTQ19IYW5kbGVUeXBlRGVmICpodHNjLCB1aW50MzJfdCBneF9pbmRleCk7CiAvKioKICAgKiBAfQogICAqLwpAQCAtNzUwLDcgKzc4NSw3IEBACiAgICogQHsKICAgKi8KIC8qIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVFNDX0lPQ29uZmlnKFRTQ19IYW5kbGVUeXBlRGVmICpodHNjLCBUU0NfSU9Db25maWdUeXBlRGVmICpjb25maWcpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RTQ19JT0NvbmZpZyhUU0NfSGFuZGxlVHlwZURlZiAqaHRzYywgY29uc3QgVFNDX0lPQ29uZmlnVHlwZURlZiAqY29uZmlnKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9UU0NfSU9EaXNjaGFyZ2UoVFNDX0hhbmRsZVR5cGVEZWYgKmh0c2MsIEZ1bmN0aW9uYWxTdGF0ZSBjaG9pY2UpOwogLyoqCiAgICogQH0KQEAgLTc2Niw4ICs4MDEsOCBAQAogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgVFNDX0lSUV9IYW5kbGVyX2FuZF9DYWxsYmFja3MgSVJRIEhhbmRsZXIgYW5kIENhbGxiYWNrcwotICogQHsKLSAqLworICAqIEB7CisgICovCiAvKioqKioqKiBUU0MgSVJRSGFuZGxlciBhbmQgQ2FsbGJhY2tzIHVzZWQgaW4gSW50ZXJydXB0IG1vZGUgKi8KIHZvaWQgSEFMX1RTQ19JUlFIYW5kbGVyKFRTQ19IYW5kbGVUeXBlRGVmICpodHNjKTsKIHZvaWQgSEFMX1RTQ19Db252Q3BsdENhbGxiYWNrKFRTQ19IYW5kbGVUeXBlRGVmICpodHNjKTsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX3VhcnQuaCBiL0luYy9zdG0zMmYzeHhfaGFsX3VhcnQuaAppbmRleCBiNDIyYTYwLi5kNTdhZTU1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF91YXJ0LmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfdWFydC5oCkBAIC0yMTYsNyArMjE2LDcgQEAKIAogICBVQVJUX0FkdkZlYXR1cmVJbml0VHlwZURlZiBBZHZhbmNlZEluaXQ7ICAgICAgICAgICAvKiE8IFVBUlQgQWR2YW5jZWQgRmVhdHVyZXMgaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyAqLwogCi0gIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAqcFR4QnVmZlB0cjsgICAgICAgICAgICAgIC8qITwgUG9pbnRlciB0byBVQVJUIFR4IHRyYW5zZmVyIEJ1ZmZlciAqLworICBjb25zdCB1aW50OF90ICAgICAgICAgICAgKnBUeEJ1ZmZQdHI7ICAgICAgICAgICAgICAvKiE8IFBvaW50ZXIgdG8gVUFSVCBUeCB0cmFuc2ZlciBCdWZmZXIgKi8KIAogICB1aW50MTZfdCAgICAgICAgICAgICAgICAgVHhYZmVyU2l6ZTsgICAgICAgICAgICAgICAvKiE8IFVBUlQgVHggVHJhbnNmZXIgc2l6ZSAgICAgICAgICAgICAgKi8KIApAQCAtMTU4NSwzICsxNTg1LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogU1RNMzJGM3h4X0hBTF9VQVJUX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfdWFydF9leC5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfdWFydF9leC5oCmluZGV4IGZjYTFjNDMuLjA1OGM0OWUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfaGFsX3VhcnRfZXguaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF91YXJ0X2V4LmgKQEAgLTE2MCwxMyArMTYwLDE0IEBACiAgICogQHBhcmFtICBfX0NMT0NLU09VUkNFX18gb3V0cHV0IHZhcmlhYmxlLgogICAqIEByZXR2YWwgVUFSVCBjbG9ja2luZyBzb3VyY2UsIHdyaXR0ZW4gaW4gX19DTE9DS1NPVVJDRV9fLgogICAqLwotI2lmIGRlZmluZWQoU1RNMzJGMzAyeEUpIHx8IGRlZmluZWQoU1RNMzJGMzAzeEUpIHx8IGRlZmluZWQoU1RNMzJGMzk4eHgpIHx8IGRlZmluZWQoU1RNMzJGMzAyeEMpIHx8IGRlZmluZWQoU1RNMzJGMzAzeEMpIHx8IGRlZmluZWQoU1RNMzJGMzU4eHgpCisjaWYgZGVmaW5lZChTVE0zMkYzMDJ4RSkgfHwgZGVmaW5lZChTVE0zMkYzMDN4RSkgfHwgZGVmaW5lZChTVE0zMkYzOTh4eCkgfHwgZGVmaW5lZChTVE0zMkYzMDJ4QykgXAorIHx8IGRlZmluZWQoU1RNMzJGMzAzeEMpIHx8IGRlZmluZWQoU1RNMzJGMzU4eHgpCiAjZGVmaW5lIFVBUlRfR0VUQ0xPQ0tTT1VSQ0UoX19IQU5ETEVfXyxfX0NMT0NLU09VUkNFX18pICAgICAgIFwKICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gVVNBUlQxKSAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDFfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgXAotICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDFfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDFDTEtTT1VSQ0VfUENMSzI6ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVQVJUX0NMT0NLU09VUkNFX1BDTEsyOyAgICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTgyLDEyICsxODMsMTIgQEAKICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVUFSVF9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlIGlmKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gVVNBUlQyKSAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVVNBUlQyX1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVVNBUlQyX1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQyQ0xLU09VUkNFX1BDTEsxOiAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVUFSVF9DTE9DS1NPVVJDRV9QQ0xLMTsgICAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTIwMywxMiArMjA0LDEyIEBACiAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZWxzZSBpZigoX19IQU5ETEVfXyktPkluc3RhbmNlID09IFVTQVJUMykgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUM19TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICBcCi0gICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUM19TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUM0NMS1NPVVJDRV9QQ0xLMTogICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVBUlRfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgICAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yMjQsMTIgKzIyNSwxMiBAQAogICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVQVJUX0NMT0NLU09VUkNFX1VOREVGSU5FRDsgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGVsc2UgaWYoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBVQVJUNCkgICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VQVJUNF9TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICAgXAotICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VQVJUNF9TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VQVJUNENMS1NPVVJDRV9QQ0xLMTogICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVQVJUX0NMT0NLU09VUkNFX1BDTEsxOyAgICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjQ1LDEyICsyNDYsMTIgQEAKICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVUFSVF9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlIGlmICgoX19IQU5ETEVfXyktPkluc3RhbmNlID09IFVBUlQ1KSAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVUFSVDVfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVUFSVDVfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVUFSVDVDTEtTT1VSQ0VfUENMSzE6ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVUFSVF9DTE9DS1NPVVJDRV9QQ0xLMTsgICAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTI2NiwyMCArMjY3LDIxIEBACiAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVQVJUX0NMT0NLU09VUkNFX1VOREVGSU5FRDsgICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfSB3aGlsZSgwVSkKLSNlbGlmIGRlZmluZWQoU1RNMzJGMzAzeDgpIHx8IGRlZmluZWQoU1RNMzJGMzM0eDgpIHx8IGRlZmluZWQoU1RNMzJGMzI4eHgpIHx8IGRlZmluZWQoU1RNMzJGMzAxeDgpIHx8IGRlZmluZWQoU1RNMzJGMzAyeDgpIHx8IGRlZmluZWQoU1RNMzJGMzE4eHgpCisjZWxpZiBkZWZpbmVkKFNUTTMyRjMwM3g4KSB8fCBkZWZpbmVkKFNUTTMyRjMzNHg4KSB8fCBkZWZpbmVkKFNUTTMyRjMyOHh4KSB8fCBkZWZpbmVkKFNUTTMyRjMwMXg4KSBcCisgIHx8IGRlZmluZWQoU1RNMzJGMzAyeDgpIHx8IGRlZmluZWQoU1RNMzJGMzE4eHgpCiAjZGVmaW5lIFVBUlRfR0VUQ0xPQ0tTT1VSQ0UoX19IQU5ETEVfXyxfX0NMT0NLU09VUkNFX18pICAgICAgIFwKICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gVVNBUlQxKSAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDFfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgXAotICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDFfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDFDTEtTT1VSQ0VfUENMSzE6ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVQVJUX0NMT0NLU09VUkNFX1BDTEsxOyAgICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjk1LDcgKzI5Nyw3IEBACiAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZWxzZSBpZigoX19IQU5ETEVfXyktPkluc3RhbmNlID09IFVTQVJUMikgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzE1LDggKzMxNyw4IEBACiAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZigoX19IQU5ETEVfXyktPkluc3RhbmNlID09IFVTQVJUMSkgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVVNBUlQxX1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVVNBUlQxX1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQxQ0xLU09VUkNFX1BDTEsyOiAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVUFSVF9DTE9DS1NPVVJDRV9QQ0xLMjsgICAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTMzMiwxMiArMzM0LDEyIEBACiAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZWxzZSBpZigoX19IQU5ETEVfXyktPkluc3RhbmNlID09IFVTQVJUMikgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUMl9TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICBcCi0gICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUMl9TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUMkNMS1NPVVJDRV9QQ0xLMTogICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVBUlRfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgICAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0zNTMsMTIgKzM1NSwxMiBAQAogICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVQVJUX0NMT0NLU09VUkNFX1VOREVGSU5FRDsgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGVsc2UgaWYoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBVU0FSVDMpICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDNfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgXAotICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDNfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDNDTEtTT1VSQ0VfUENMSzE6ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVQVJUX0NMT0NLU09VUkNFX1BDTEsxOyAgICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzc0LDcgKzM3Niw3IEBACiAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNTA4LDMgKzUxMCw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIFNUTTMyRjN4eF9IQUxfVUFSVF9FWF9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfaGFsX3VzYXJ0LmggYi9JbmMvc3RtMzJmM3h4X2hhbF91c2FydC5oCmluZGV4IGM2OTRjMTEuLmU0ZjYwNDYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfaGFsX3VzYXJ0LmgKKysrIGIvSW5jL3N0bTMyZjN4eF9oYWxfdXNhcnQuaApAQCAtNzI1LDcgKzcyNSw4IEBACiAgICovCiAKIC8qIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVVNBUlRfVHJhbnNtaXQoVVNBUlRfSGFuZGxlVHlwZURlZiAqaHVzYXJ0LCBjb25zdCB1aW50OF90ICpwVHhEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9VU0FSVF9UcmFuc21pdChVU0FSVF9IYW5kbGVUeXBlRGVmICpodXNhcnQsIGNvbnN0IHVpbnQ4X3QgKnBUeERhdGEsIHVpbnQxNl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVVNBUlRfUmVjZWl2ZShVU0FSVF9IYW5kbGVUeXBlRGVmICpodXNhcnQsIHVpbnQ4X3QgKnBSeERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VTQVJUX1RyYW5zbWl0UmVjZWl2ZShVU0FSVF9IYW5kbGVUeXBlRGVmICpodXNhcnQsIGNvbnN0IHVpbnQ4X3QgKnBUeERhdGEsIHVpbnQ4X3QgKnBSeERhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpOwpAQCAtNzg2LDMgKzc4Nyw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIFNUTTMyRjN4eF9IQUxfVVNBUlRfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmM3h4X2hhbF91c2FydF9leC5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfdXNhcnRfZXguaAppbmRleCA3OTk0ZjRiLi5hZWMzNjg4IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2hhbF91c2FydF9leC5oCisrKyBiL0luYy9zdG0zMmYzeHhfaGFsX3VzYXJ0X2V4LmgKQEAgLTUxLDcgKzUxLDcgQEAKICNlbGlmICBkZWZpbmVkKFVTQVJUX0NSMV9NKQogI2RlZmluZSBVU0FSVF9XT1JETEVOR1RIXzhCICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKSAgICAgICAgICAgICAgLyohPCA4LWJpdCBsb25nIFVTQVJUIGZyYW1lICovCiAjZGVmaW5lIFVTQVJUX1dPUkRMRU5HVEhfOUIgICAgICAgICAgICAgICAgICAoVVNBUlRfQ1IxX00pICAgIC8qITwgOS1iaXQgbG9uZyBVU0FSVCBmcmFtZSAqLwotI2VuZGlmCisjZW5kaWYgLyogVVNBUlRfQ1IxX00wICYmIFVTQVJUX0NSMV9NICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNzYsMTgzICs3NiwxODUgQEAKICAgKiBAcGFyYW0gIF9fQ0xPQ0tTT1VSQ0VfXyBvdXRwdXQgdmFyaWFibGUuCiAgICogQHJldHZhbCBVU0FSVCBjbG9ja2luZyBzb3VyY2UsIHdyaXR0ZW4gaW4gX19DTE9DS1NPVVJDRV9fLgogICAqLwotI2lmIGRlZmluZWQoU1RNMzJGMzAyeEUpIHx8IGRlZmluZWQoU1RNMzJGMzAzeEUpIHx8IGRlZmluZWQoU1RNMzJGMzk4eHgpIHx8IGRlZmluZWQoU1RNMzJGMzAyeEMpIHx8IGRlZmluZWQoU1RNMzJGMzAzeEMpIHx8IGRlZmluZWQoU1RNMzJGMzU4eHgpCi0jZGVmaW5lIFVTQVJUX0dFVENMT0NLU09VUkNFKF9fSEFORExFX18sX19DTE9DS1NPVVJDRV9fKSAgICAgICBcCisjaWYgZGVmaW5lZChTVE0zMkYzMDJ4RSkgfHwgZGVmaW5lZChTVE0zMkYzMDN4RSkgfHwgZGVmaW5lZChTVE0zMkYzOTh4eCkgfHwgZGVmaW5lZChTVE0zMkYzMDJ4QykgXAorIHx8IGRlZmluZWQoU1RNMzJGMzAzeEMpIHx8IGRlZmluZWQoU1RNMzJGMzU4eHgpCisjZGVmaW5lIFVTQVJUX0dFVENMT0NLU09VUkNFKF9fSEFORExFX18sX19DTE9DS1NPVVJDRV9fKSAgICAgIFwKICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gVVNBUlQxKSAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDFfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgXAotICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDFfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDFDTEtTT1VSQ0VfUENMSzI6ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9QQ0xLMjsgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9QQ0xLMjsgICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDFDTEtTT1VSQ0VfSFNJOiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9IU0k7ICAgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9IU0k7ICAgICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDFDTEtTT1VSQ0VfU1lTQ0xLOiAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9TWVNDTEs7ICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9TWVNDTEs7ICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDFDTEtTT1VSQ0VfTFNFOiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9MU0U7ICAgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9MU0U7ICAgICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGVsc2UgaWYoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBVU0FSVDIpICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDJfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgXAotICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDJfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDJDTEtTT1VSQ0VfUENMSzE6ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9QQ0xLMTsgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9QQ0xLMTsgICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDJDTEtTT1VSQ0VfSFNJOiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9IU0k7ICAgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9IU0k7ICAgICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDJDTEtTT1VSQ0VfU1lTQ0xLOiAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9TWVNDTEs7ICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9TWVNDTEs7ICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDJDTEtTT1VSQ0VfTFNFOiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9MU0U7ICAgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9MU0U7ICAgICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGVsc2UgaWYoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBVU0FSVDMpICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDNfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgXAotICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzd2l0Y2goX19IQUxfUkNDX0dFVF9VU0FSVDNfU09VUkNFKCkpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDNDTEtTT1VSQ0VfUENMSzE6ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9QQ0xLMTsgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9QQ0xLMTsgICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDNDTEtTT1VSQ0VfSFNJOiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9IU0k7ICAgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9IU0k7ICAgICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDNDTEtTT1VSQ0VfU1lTQ0xLOiAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9TWVNDTEs7ICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9TWVNDTEs7ICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFJDQ19VU0FSVDNDTEtTT1VSQ0VfTFNFOiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9MU0U7ICAgICAgICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9MU0U7ICAgICAgICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgICBcCisgICAgICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9VTkRFRklORUQ7ICAgIFwKICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgICAgIFwKKyAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH0gd2hpbGUoMFUpCi0jZWxpZiBkZWZpbmVkKFNUTTMyRjMwM3g4KSB8fCBkZWZpbmVkKFNUTTMyRjMzNHg4KSB8fCBkZWZpbmVkKFNUTTMyRjMyOHh4KSB8fCBkZWZpbmVkKFNUTTMyRjMwMXg4KSB8fCBkZWZpbmVkKFNUTTMyRjMwMng4KSB8fCBkZWZpbmVkKFNUTTMyRjMxOHh4KQotI2RlZmluZSBVU0FSVF9HRVRDTE9DS1NPVVJDRShfX0hBTkRMRV9fLF9fQ0xPQ0tTT1VSQ0VfXykgICAgICAgXAorI2VsaWYgZGVmaW5lZChTVE0zMkYzMDN4OCkgfHwgZGVmaW5lZChTVE0zMkYzMzR4OCkgfHwgZGVmaW5lZChTVE0zMkYzMjh4eCkgfHwgZGVmaW5lZChTVE0zMkYzMDF4OCkgXAorICAgfHwgZGVmaW5lZChTVE0zMkYzMDJ4OCkgfHwgZGVmaW5lZChTVE0zMkYzMTh4eCkKKyNkZWZpbmUgVVNBUlRfR0VUQ0xPQ0tTT1VSQ0UoX19IQU5ETEVfXyxfX0NMT0NLU09VUkNFX18pICAgICAgXAogICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBVU0FSVDEpICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUMV9TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICBcCi0gICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN3aXRjaChfX0hBTF9SQ0NfR0VUX1VTQVJUMV9TT1VSQ0UoKSkgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUMUNMS1NPVVJDRV9QQ0xLMTogICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVTQVJUX0NMT0NLU09VUkNFX1BDTEsxOyAgICAgICAgIFwKKyAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVTQVJUX0NMT0NLU09VUkNFX1BDTEsxOyAgICAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUMUNMS1NPVVJDRV9IU0k6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVTQVJUX0NMT0NLU09VUkNFX0hTSTsgICAgICAgICAgIFwKKyAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVTQVJUX0NMT0NLU09VUkNFX0hTSTsgICAgICAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUMUNMS1NPVVJDRV9TWVNDTEs6ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVTQVJUX0NMT0NLU09VUkNFX1NZU0NMSzsgICAgICAgIFwKKyAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVTQVJUX0NMT0NLU09VUkNFX1NZU0NMSzsgICAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgUkNDX1VTQVJUMUNMS1NPVVJDRV9MU0U6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVTQVJUX0NMT0NLU09VUkNFX0xTRTsgICAgICAgICAgIFwKKyAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVTQVJUX0NMT0NLU09VUkNFX0xTRTsgICAgICAgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVTQVJUX0NMT0NLU09VUkNFX1VOREVGSU5FRDsgICAgIFwKKyAgICAgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVTQVJUX0NMT0NLU09VUkNFX1VOREVGSU5FRDsgICAgXAogICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZWxzZSBpZigoX19IQU5ETEVfXyktPkluc3RhbmNlID09IFVTQVJUMikgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9QQ0xLMTsgICAgICAgICAgICAgXAorICAgICAgKF9fQ0xPQ0tTT1VSQ0VfXykgPSBVU0FSVF9DTE9DS1NPVVJDRV9QQ0xLMTsgICAgICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlIGlmKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gVVNBUlQzKSAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVTQVJUX0NMT0NLU09VUkNFX1BDTEsxOyAgICAgICAgICAgICBcCisgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVTQVJUX0NMT0NLU09VUkNFX1BDTEsxOyAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgICAgIFwKKyAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH0gd2hpbGUoMFUpCiAjZWxzZQotI2RlZmluZSBVU0FSVF9HRVRDTE9DS1NPVVJDRShfX0hBTkRMRV9fLF9fQ0xPQ0tTT1VSQ0VfXykgICAgICAgXAorI2RlZmluZSBVU0FSVF9HRVRDTE9DS1NPVVJDRShfX0hBTkRMRV9fLF9fQ0xPQ0tTT1VSQ0VfXykgICAgICBcCiAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZigoX19IQU5ETEVfXyktPkluc3RhbmNlID09IFVTQVJUMSkgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVVNBUlQxX1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVVNBUlQxX1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQxQ0xLU09VUkNFX1BDTEsyOiAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfUENMSzI7ICAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfUENMSzI7ICAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQxQ0xLU09VUkNFX0hTSTogICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfSFNJOyAgICAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfSFNJOyAgICAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQxQ0xLU09VUkNFX1NZU0NMSzogICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfU1lTQ0xLOyAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfU1lTQ0xLOyAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQxQ0xLU09VUkNFX0xTRTogICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfTFNFOyAgICAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfTFNFOyAgICAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlIGlmKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gVVNBUlQyKSAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVVNBUlQyX1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVVNBUlQyX1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQyQ0xLU09VUkNFX1BDTEsxOiAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQyQ0xLU09VUkNFX0hTSTogICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfSFNJOyAgICAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfSFNJOyAgICAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQyQ0xLU09VUkNFX1NZU0NMSzogICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfU1lTQ0xLOyAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfU1lTQ0xLOyAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQyQ0xLU09VUkNFX0xTRTogICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfTFNFOyAgICAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfTFNFOyAgICAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlIGlmKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gVVNBUlQzKSAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVVNBUlQzX1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3dpdGNoKF9fSEFMX1JDQ19HRVRfVVNBUlQzX1NPVVJDRSgpKSAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQzQ0xLU09VUkNFX1BDTEsxOiAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfUENMSzE7ICAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQzQ0xLU09VUkNFX0hTSTogICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfSFNJOyAgICAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfSFNJOyAgICAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQzQ0xLU09VUkNFX1NZU0NMSzogICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfU1lTQ0xLOyAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfU1lTQ0xLOyAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBSQ0NfVVNBUlQzQ0xLU09VUkNFX0xTRTogICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfTFNFOyAgICAgICAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfTFNFOyAgICAgICAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICAgXAorICAgICAgICAgIChfX0NMT0NLU09VUkNFX18pID0gVVNBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOyAgICBcCiAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVTQVJUX0NMT0NLU09VUkNFX1VOREVGSU5FRDsgICAgICAgICBcCisgICAgICAoX19DTE9DS1NPVVJDRV9fKSA9IFVTQVJUX0NMT0NLU09VUkNFX1VOREVGSU5FRDsgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB9IHdoaWxlKDBVKQogI2VuZGlmIC8qIFNUTTMyRjMwMnhFIHx8IFNUTTMyRjMwM3hFIHx8IFNUTTMyRjM5OHh4IHx8IFNUTTMyRjMwMnhDIHx8IFNUTTMyRjMwM3hDIHx8IFNUTTMyRjM1OHh4ICAqLwpAQCAtMzM2LDcgKzMzOCw3IEBACiAgICAgICAoX19IQU5ETEVfXyktPk1hc2sgPSAweDAwMDBVOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfSB3aGlsZSgwVSkKLSNlbmRpZgorI2VuZGlmICAvKiBVU0FSVF9DUjFfTTAgJiYgVVNBUlRfQ1IxX00gKi8KIAogLyoqCiAgICogQGJyaWVmIEVuc3VyZSB0aGF0IFVTQVJUIGZyYW1lIGxlbmd0aCBpcyB2YWxpZC4KQEAgLTM1MCw3ICszNTIsNyBAQAogI2VsaWYgIGRlZmluZWQoVVNBUlRfQ1IxX00pCiAjZGVmaW5lIElTX1VTQVJUX1dPUkRfTEVOR1RIKF9fTEVOR1RIX18pICgoKF9fTEVOR1RIX18pID09IFVTQVJUX1dPUkRMRU5HVEhfOEIpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVVNBUlRfV09SRExFTkdUSF85QikpCi0jZW5kaWYKKyNlbmRpZiAvKiBVU0FSVF9DUjFfTTAgJiYgVVNBUlRfQ1IxX00gKi8KIAogCiAvKioKQEAgLTM5OSwzICs0MDEsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBTVE0zMkYzeHhfSEFMX1VTQVJUX0VYX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9oYWxfd3dkZy5oIGIvSW5jL3N0bTMyZjN4eF9oYWxfd3dkZy5oCmluZGV4IDE1MTNkYjYuLjE5NjBmMzkgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfaGFsX3d3ZGcuaAorKysgYi9JbmMvc3RtMzJmM3h4X2hhbF93d2RnLmgKQEAgLTE4Myw3ICsxODMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgV1dERyBlYXJseSB3YWtldXAgaW50ZXJydXB0LgotICAqIEBwYXJhbSAgX19IQU5ETEVfXzogV1dERyBoYW5kbGUKKyAgKiBAcGFyYW0gIF9fSEFORExFX18gICAgIFdXREcgaGFuZGxlCiAgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fICBzcGVjaWZpZXMgdGhlIGludGVycnVwdCB0byBlbmFibGUuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBXV0RHX0lUX0VXSTogRWFybHkgd2FrZXVwIGludGVycnVwdApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9sbF9hZGMuaCBiL0luYy9zdG0zMmYzeHhfbGxfYWRjLmgKaW5kZXggNGQ5OTJiNC4uZmExZDQzZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9sbF9hZGMuaAorKysgYi9JbmMvc3RtMzJmM3h4X2xsX2FkYy5oCkBAIC0zMSw3ICszMSw3IEBACiAgICogQHsKICAgKi8KIAotLyogTm90ZTogRGV2aWNlcyBvZiBTVE0zMkYzIHNlcmllIGVtYmVkIDEgb3V0IG9mIDIgZGlmZmVyZW50IEFEQyBJUC4gICAgICAgICAgKi8KKy8qIE5vdGU6IERldmljZXMgb2YgU1RNMzJGMyBzZXJpZXMgZW1iZWQgMSBvdXQgb2YgMiBkaWZmZXJlbnQgQURDIElQLiAgICAgICAgICAqLwogLyogICAgICAgLSBTVE0zMkYzMHgsIFNUTTMyRjMxeCwgU1RNMzJGMzJ4LCBTVE0zMkYzM3gsIFNUTTMyRjM1eCwgU1RNMzJGMzl4OiAgKi8KIC8qICAgICAgICAgQURDIElQIDVNc2FtcGxlcy9zZWMsIGZyb20gMSB0byA0IEFEQyBpbnN0YW5jZXMgYW5kIG90aGVyIHNwZWNpZmljICovCiAvKiAgICAgICAgIGZlYXR1cmVzIChyZWZlciB0byByZWZlcmVuY2UgbWFudWFsKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDMxLDcgKzQzMSw3IEBACiB7CiAgIHVpbnQzMl90IENvbW1vbkNsb2NrOyAgICAgICAgICAgICAgICAgLyohPCBTZXQgcGFyYW1ldGVyIGNvbW1vbiB0byBzZXZlcmFsIEFEQzogQ2xvY2sgc291cmNlIGFuZCBwcmVzY2FsZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEFEQ19MTF9FQ19DT01NT05fQ0xPQ0tfU09VUkNFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBPbiB0aGlzIFNUTTMyIHNlcmllLCBpZiBBREMgZ3JvdXAgaW5qZWN0ZWQgaXMgdXNlZCwgc29tZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGlmIEFEQyBncm91cCBpbmplY3RlZCBpcyB1c2VkLCBzb21lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jayByYXRpbyBjb25zdHJhaW50cyBiZXR3ZWVuIEFEQyBjbG9jayBhbmQgQUhCIGNsb2NrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIHJlc3BlY3RlZC4gUmVmZXIgdG8gcmVmZXJlbmNlIG1hbnVhbC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtNTE4LDcgKzUxOCw3IEBACiB7CiAgIHVpbnQzMl90IFRyaWdnZXJTb3VyY2U7ICAgICAgICAgICAgICAgLyohPCBTZXQgQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbiB0cmlnZ2VyIHNvdXJjZTogaW50ZXJuYWwgKFNXIHN0YXJ0KSBvciBmcm9tIGV4dGVybmFsIElQICh0aW1lciBldmVudCwgZXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBBRENfTExfRUNfUkVHX1RSSUdHRVJfU09VUkNFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIHRyaWdnZXIgc291cmNlIHRvIGV4dGVybmFsIHRyaWdnZXIgYWxzbyBzZXQgdHJpZ2dlciBwb2xhcml0eSB0byByaXNpbmcgZWRnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgdHJpZ2dlciBzb3VyY2UgdG8gZXh0ZXJuYWwgdHJpZ2dlciBhbHNvIHNldCB0cmlnZ2VyIHBvbGFyaXR5IHRvIHJpc2luZyBlZGdlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCBzZXR0aW5nIGZvciBjb21wYXRpYmlsaXR5IHdpdGggc29tZSBBREMgb24gb3RoZXIgU1RNMzIgZmFtaWxpZXMgaGF2aW5nIHRoaXMgc2V0dGluZyBzZXQgYnkgSFcgZGVmYXVsdCB2YWx1ZSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBjYXNlIG9mIG5lZWQgdG8gbW9kaWZ5IHRyaWdnZXIgZWRnZSwgdXNlIGZ1bmN0aW9uIEByZWYgTExfQURDX1JFR19TZXRUcmlnZ2VyRWRnZSgpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC01NzgsNyArNTc4LDcgQEAKIHsKICAgdWludDMyX3QgVHJpZ2dlclNvdXJjZTsgICAgICAgICAgICAgICAvKiE8IFNldCBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbiB0cmlnZ2VyIHNvdXJjZTogaW50ZXJuYWwgKFNXIHN0YXJ0KSBvciBmcm9tIGV4dGVybmFsIElQICh0aW1lciBldmVudCwgZXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBBRENfTExfRUNfSU5KX1RSSUdHRVJfU09VUkNFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIHRyaWdnZXIgc291cmNlIHRvIGV4dGVybmFsIHRyaWdnZXIgYWxzbyBzZXQgdHJpZ2dlciBwb2xhcml0eSB0byByaXNpbmcgZWRnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgdHJpZ2dlciBzb3VyY2UgdG8gZXh0ZXJuYWwgdHJpZ2dlciBhbHNvIHNldCB0cmlnZ2VyIHBvbGFyaXR5IHRvIHJpc2luZyBlZGdlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCBzZXR0aW5nIGZvciBjb21wYXRpYmlsaXR5IHdpdGggc29tZSBBREMgb24gb3RoZXIgU1RNMzIgZmFtaWxpZXMgaGF2aW5nIHRoaXMgc2V0dGluZyBzZXQgYnkgSFcgZGVmYXVsdCB2YWx1ZSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBjYXNlIG9mIG5lZWQgdG8gbW9kaWZ5IHRyaWdnZXIgZWRnZSwgdXNlIGZ1bmN0aW9uIEByZWYgTExfQURDX0lOSl9TZXRUcmlnZ2VyRWRnZSgpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC03MDksNyArNzA5LDcgQEAKIC8qICAgICAgIElmIHRoZXkgYXJlIG5vdCBsaXN0ZWQgYmVsb3csIHRoZXkgZG8gbm90IHJlcXVpcmUgYW55IHNwZWNpZmljICAgICAgICovCiAvKiAgICAgICBwYXRoIGVuYWJsZS4gSW4gdGhpcyBjYXNlLCBBY2Nlc3MgdG8gbWVhc3VyZW1lbnQgcGF0aCBpcyBkb25lICAgICAgICAqLwogLyogICAgICAgb25seSBieSBzZWxlY3RpbmcgdGhlIGNvcnJlc3BvbmRpbmcgQURDIGludGVybmFsIGNoYW5uZWwuICAgICAgICAgICAgKi8KLSNkZWZpbmUgTExfQURDX1BBVEhfSU5URVJOQUxfTk9ORSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKS8qITwgQURDIG1lYXN1cmVtZW50IHBhdGhlcyBhbGwgZGlzYWJsZWQgKi8KKyNkZWZpbmUgTExfQURDX1BBVEhfSU5URVJOQUxfTk9ORSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKS8qITwgQURDIG1lYXN1cmVtZW50IHBhdGhzIGFsbCBkaXNhYmxlZCAqLwogI2RlZmluZSBMTF9BRENfUEFUSF9JTlRFUk5BTF9WUkVGSU5UICAgICAgIChBRENfQ0NSX1ZSRUZFTikgICAgICAgLyohPCBBREMgbWVhc3VyZW1lbnQgcGF0aCB0byBpbnRlcm5hbCBjaGFubmVsIFZyZWZJbnQgKi8KICNkZWZpbmUgTExfQURDX1BBVEhfSU5URVJOQUxfVEVNUFNFTlNPUiAgICAoQURDX0NDUl9UU0VOKSAgICAgICAgIC8qITwgQURDIG1lYXN1cmVtZW50IHBhdGggdG8gaW50ZXJuYWwgY2hhbm5lbCB0ZW1wZXJhdHVyZSBzZW5zb3IgKi8KICNkZWZpbmUgTExfQURDX1BBVEhfSU5URVJOQUxfVkJBVCAgICAgICAgICAoQURDX0NDUl9WQkFURU4pICAgICAgIC8qITwgQURDIG1lYXN1cmVtZW50IHBhdGggdG8gaW50ZXJuYWwgY2hhbm5lbCBWYmF0ICovCkBAIC03MzIsNyArNzMyLDcgQEAKICAgKiBAewogICAqLwogI2RlZmluZSBMTF9BRENfREFUQV9BTElHTl9SSUdIVCAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpLyohPCBBREMgY29udmVyc2lvbiBkYXRhIGFsaWdubWVudDogcmlnaHQgYWxpZ25lZCAoYWxpZ25tZW50IG9uIGRhdGEgcmVnaXN0ZXIgTFNCIGJpdCAwKSovCi0jZGVmaW5lIExMX0FEQ19EQVRBX0FMSUdOX0xFRlQgICAgICAgICAgICAgKEFEQ19DRkdSX0FMSUdOKSAgICAgICAvKiE8IEFEQyBjb252ZXJzaW9uIGRhdGEgYWxpZ25tZW50OiBsZWZ0IGFsaWduZWQgKGFsaWdtZW50IG9uIGRhdGEgcmVnaXN0ZXIgTVNCIGJpdCAxNSkqLworI2RlZmluZSBMTF9BRENfREFUQV9BTElHTl9MRUZUICAgICAgICAgICAgIChBRENfQ0ZHUl9BTElHTikgICAgICAgLyohPCBBREMgY29udmVyc2lvbiBkYXRhIGFsaWdubWVudDogbGVmdCBhbGlnbmVkIChhbGlnbm1lbnQgb24gZGF0YSByZWdpc3RlciBNU0IgYml0IDE1KSovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAKIC8qICAgICAgIGNvbmZpZ3VyYXRpb24gKHN5c3RlbSBjbG9jayB2ZXJzdXMgQURDIGNsb2NrKSwgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICBhbmQgdGhlcmVmb3JlIG11c3QgYmUgZGVmaW5lZCBpbiB1c2VyIGFwcGxpY2F0aW9uLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgSW5kaWNhdGlvbnMgZm9yIGVzdGltYXRpb24gb2YgQURDIHRpbWVvdXQgZGVsYXlzLCBmb3IgdGhpcyAgICAgICAgICAgKi8KLS8qICAgICAgIFNUTTMyIHNlcmllOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICBTVE0zMiBzZXJpZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgIC0gQURDIGNhbGlicmF0aW9uIHRpbWU6IG1heGltdW0gZGVsYXkgaXMgMTEyL2ZBREMuICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgIChyZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0LCBwYXJhbWV0ZXIgInRDQUwiKSAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgLSBBREMgZW5hYmxlIHRpbWU6IG1heGltdW0gZGVsYXkgaXMgMSBjb252ZXJzaW9uIGN5Y2xlLiAgICAgICAgICAgICAgKi8KQEAgLTE0NzUsNyArMTQ3NSw3IEBACiAjZGVmaW5lIExMX0FEQ19ERUxBWV9URU1QU0VOU09SX1NUQUJfVVMgICAgKCh1aW50MzJfdCkgMTIwVSkgIC8qITwgRGVsYXkgZm9yIHRlbXBlcmF0dXJlIHNlbnNvciBzdGFiaWxpemF0aW9uIHRpbWUgKi8KIAogLyogRGVsYXkgcmVxdWlyZWQgYmV0d2VlbiBBREMgZW5kIG9mIGNhbGlicmF0aW9uIGFuZCBBREMgZW5hYmxlLiAgICAgICAgICAgICAgKi8KLS8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWUsIGEgbWluaW11bSBudW1iZXIgb2YgQURDIGNsb2NrIGN5Y2xlcyAgICAgICAgICAgICovCisvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgYSBtaW5pbXVtIG51bWJlciBvZiBBREMgY2xvY2sgY3ljbGVzICAgICAgICAgICAgKi8KIC8qICAgICAgIGFyZSByZXF1aXJlZCBiZXR3ZWVuIEFEQyBlbmQgb2YgY2FsaWJyYXRpb24gYW5kIEFEQyBlbmFibGUuICAgICAgICAgICovCiAvKiAgICAgICBXYWl0IHRpbWUgY2FuIGJlIGNvbXB1dGVkIGluIHVzZXIgYXBwbGljYXRpb24gYnkgd2FpdGluZyBmb3IgdGhlICAgICAqLwogLyogICAgICAgZXF1aXZhbGVudCBudW1iZXIgb2YgQ1BVIGN5Y2xlcywgYnkgdGFraW5nIGludG8gYWNjb3VudCAgICAgICAgICAgICAgKi8KQEAgLTIyOTMsNyArMjI5Myw3IEBACiAgICogICAgICAgICBjb25uZWN0ZWQgdG8gcGluIFZyZWYrLgogICAqICAgICAgICAgT24gZGV2aWNlcyB3aXRoIHNtYWxsIHBhY2thZ2UsIHRoZSBwaW4gVnJlZisgaXMgbm90IHByZXNlbnQKICAgKiAgICAgICAgIGFuZCBpbnRlcm5hbGx5IGJvbmRlZCB0byBwaW4gVmRkYS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIGNhbGlicmF0aW9uIGRhdGEgb2YgaW50ZXJuYWwgdm9sdGFnZSByZWZlcmVuY2UKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBjYWxpYnJhdGlvbiBkYXRhIG9mIGludGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlCiAgICogICAgICAgICBWcmVmSW50IGNvcnJlc3BvbmRzIHRvIGEgcmVzb2x1dGlvbiBvZiAxMiBiaXRzLAogICAqICAgICAgICAgdGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgQURDIHJlc29sdXRpb24gdG8gY29udmVydCB2b2x0YWdlIG9mCiAgICogICAgICAgICBpbnRlcm5hbCB2b2x0YWdlIHJlZmVyZW5jZSBWcmVmSW50LgpAQCAtMjM0Myw3ICsyMzQzLDcgQEAKICAgKiBAbm90ZSAgIEFuYWxvZyByZWZlcmVuY2Ugdm9sdGFnZSAoVnJlZispIG11c3QgYmUgZWl0aGVyIGtub3duIGZyb20KICAgKiAgICAgICAgIHVzZXIgYm9hcmQgZW52aXJvbm1lbnQgb3IgY2FuIGJlIGNhbGN1bGF0ZWQgdXNpbmcgQURDIG1lYXN1cmVtZW50CiAgICogICAgICAgICBhbmQgQURDIGhlbHBlciBtYWNybyBAcmVmIF9fTExfQURDX0NBTENfVlJFRkFOQUxPR19WT0xUQUdFKCkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBjYWxpYnJhdGlvbiBkYXRhIG9mIHRlbXBlcmF0dXJlIHNlbnNvcgorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGNhbGlicmF0aW9uIGRhdGEgb2YgdGVtcGVyYXR1cmUgc2Vuc29yCiAgICogICAgICAgICBjb3JyZXNwb25kcyB0byBhIHJlc29sdXRpb24gb2YgMTIgYml0cywKICAgKiAgICAgICAgIHRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIEFEQyByZXNvbHV0aW9uIHRvIGNvbnZlcnQgdm9sdGFnZSBvZgogICAqICAgICAgICAgdGVtcGVyYXR1cmUgc2Vuc29yLgpAQCAtMjUyNywxMSArMjUyNywxMSBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCBwYXJhbWV0ZXIgY29tbW9uIHRvIHNldmVyYWwgQURDOiBDbG9jayBzb3VyY2UgYW5kIHByZXNjYWxlci4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIGlmIEFEQyBncm91cCBpbmplY3RlZCBpcyB1c2VkLCBzb21lCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgaWYgQURDIGdyb3VwIGluamVjdGVkIGlzIHVzZWQsIHNvbWUKICAgKiAgICAgICAgIGNsb2NrIHJhdGlvIGNvbnN0cmFpbnRzIGJldHdlZW4gQURDIGNsb2NrIGFuZCBBSEIgY2xvY2sKICAgKiAgICAgICAgIG11c3QgYmUgcmVzcGVjdGVkLgogICAqICAgICAgICAgUmVmZXIgdG8gcmVmZXJlbmNlIG1hbnVhbC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFsbCBBREMgaW5zdGFuY2VzIG9mIHRoZSBBREMgY29tbW9uIGdyb3VwIG11c3QgYmUgZGlzYWJsZWQuCiAgICogICAgICAgICBUaGlzIGNoZWNrIGNhbiBiZSBkb25lIHdpdGggZnVuY3Rpb24gQHJlZiBMTF9BRENfSXNFbmFibGVkKCkgZm9yIGVhY2gKQEAgLTI1ODcsNyArMjU4Nyw3IEBACiAgICogICAgICAgICBGb3IgQURDIGNvbnZlcnNpb24gb2YgaW50ZXJuYWwgY2hhbm5lbHMsCiAgICogICAgICAgICBhIHNhbXBsaW5nIHRpbWUgbWluaW11bSB2YWx1ZSBpcyByZXF1aXJlZC4KICAgKiAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBbGwgQURDIGluc3RhbmNlcyBvZiB0aGUgQURDIGNvbW1vbiBncm91cCBtdXN0IGJlIGRpc2FibGVkLgogICAqICAgICAgICAgVGhpcyBjaGVjayBjYW4gYmUgZG9uZSB3aXRoIGZ1bmN0aW9uIEByZWYgTExfQURDX0lzRW5hYmxlZCgpIGZvciBlYWNoCkBAIC0yNjU3LDcgKzI2NTcsNyBAQAogICAqICAgICAgICAgYm90aCBjYWxpYnJhdGlvbiBmYWN0b3JzIG11c3QgYmUgY29uY2F0ZW5hdGVkLgogICAqICAgICAgICAgVG8gcGVyZm9ybSB0aGlzIHByb2Nlc3NpbmcsIHVzZSBoZWxwZXIgbWFjcm8KICAgKiAgICAgICAgIEByZWYgX19MTF9BRENfQ0FMSUJfRkFDVE9SX1NJTkdMRV9ESUZGKCkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBlbmFibGVkLCB3aXRob3V0IGNhbGlicmF0aW9uIG9uIGdvaW5nLCB3aXRob3V0IGNvbnZlcnNpb24KICAgKiAgICAgICAgIG9uIGdvaW5nIG9uIGdyb3VwIHJlZ3VsYXIuCkBAIC0yNzA3LDcgKzI3MDcsNyBAQAogICAqIEBicmllZiAgU2V0IEFEQyByZXNvbHV0aW9uLgogICAqICAgICAgICAgUmVmZXIgdG8gcmVmZXJlbmNlIG1hbnVhbCBmb3IgYWxpZ25tZW50cyBmb3JtYXRzCiAgICogICAgICAgICBkZXBlbmRlbmNpZXMgdG8gQURDIHJlc29sdXRpb25zLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgZGlzYWJsZWQgb3IgZW5hYmxlZCB3aXRob3V0IGNvbnZlcnNpb24gb24gZ29pbmcKICAgKiAgICAgICAgIG9uIGVpdGhlciBncm91cHMgcmVndWxhciBvciBpbmplY3RlZC4KQEAgLTI3NDYsNyArMjc0Niw3IEBACiAgICogQGJyaWVmICBTZXQgQURDIGNvbnZlcnNpb24gZGF0YSBhbGlnbm1lbnQuCiAgICogQG5vdGUgICBSZWZlciB0byByZWZlcmVuY2UgbWFudWFsIGZvciBhbGlnbm1lbnRzIGZvcm1hdHMKICAgKiAgICAgICAgIGRlcGVuZGVuY2llcyB0byBBREMgcmVzb2x1dGlvbnMuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtMjgxNyw3ICsyODE3LDcgQEAKICAgKiAgICAgICAgIFRoZXJlZm9yZSwgdGhlIEFEQyBjb252ZXJzaW9uIGRhdGEgbWF5IGJlIG91dGRhdGVkOiBkb2VzIG5vdAogICAqICAgICAgICAgY29ycmVzcG9uZCB0byB0aGUgY3VycmVudCB2b2x0YWdlIGxldmVsIG9uIHRoZSBzZWxlY3RlZAogICAqICAgICAgICAgQURDIGNoYW5uZWwuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtMjg5OSw3ICsyODk5LDcgQEAKICAgKiAgICAgICAgIHRvIGRpc2FibGUgc3RhdGUgdXNpbmcgZnVuY3Rpb24gTExfQURDX1NldE9mZnNldFN0YXRlKCkuCiAgICogQG5vdGUgICBJZiBhIGNoYW5uZWwgaXMgbWFwcGVkIG9uIHNldmVyYWwgb2Zmc2V0cyBudW1iZXJzLCBvbmx5IHRoZSBvZmZzZXQKICAgKiAgICAgICAgIHdpdGggdGhlIGxvd2VzdCB2YWx1ZSBpcyBjb25zaWRlcmVkIGZvciB0aGUgc3VidHJhY3Rpb24uCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtMzA3MSw3ICszMDcxLDcgQEAKICAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIG5lZWRlZCBvbmx5IGluIGNhc2Ugb2Ygb2Zmc2V0IHRvIGJlCiAgICogICAgICAgICBlbmFibGVkLWRpc2FibGVkIGR5bmFtaWNhbGx5LCBhbmQgc2hvdWxkIG5vdCBiZSBuZWVkZWQgaW4gb3RoZXIgY2FzZXM6CiAgICogICAgICAgICBmdW5jdGlvbiBMTF9BRENfU2V0T2Zmc2V0KCkgYXV0b21hdGljYWxseSBlbmFibGVzIHRoZSBvZmZzZXQuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtMzEzNiw3ICszMTM2LDcgQEAKICAgKiBAYnJpZWYgIFNldCBBREMgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlOgogICAqICAgICAgICAgaW50ZXJuYWwgKFNXIHN0YXJ0KSBvciBmcm9tIGV4dGVybmFsIElQICh0aW1lciBldmVudCwKICAgKiAgICAgICAgIGV4dGVybmFsIGludGVycnVwdCBsaW5lKS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgdHJpZ2dlciBzb3VyY2UgdG8gZXh0ZXJuYWwgdHJpZ2dlcgorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgdHJpZ2dlciBzb3VyY2UgdG8gZXh0ZXJuYWwgdHJpZ2dlcgogICAqICAgICAgICAgYWxzbyBzZXQgdHJpZ2dlciBwb2xhcml0eSB0byByaXNpbmcgZWRnZSAKICAgKiAgICAgICAgIChkZWZhdWx0IHNldHRpbmcgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBzb21lIEFEQyBvbiBvdGhlcgogICAqICAgICAgICAgU1RNMzIgZmFtaWxpZXMgaGF2aW5nIHRoaXMgc2V0dGluZyBzZXQgYnkgSFcgZGVmYXVsdCB2YWx1ZSkuCkBAIC0zMTQ0LDcgKzMxNDQsNyBAQAogICAqICAgICAgICAgZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1NldFRyaWdnZXJFZGdlKCkuCiAgICogQG5vdGUgICBBdmFpbGFiaWxpdHkgb2YgcGFyYW1ldGVycyBvZiB0cmlnZ2VyIHNvdXJjZXMgZnJvbSB0aW1lciAKICAgKiAgICAgICAgIGRlcGVuZHMgb24gdGltZXJzIGF2YWlsYWJpbGl0eSBvbiB0aGUgc2VsZWN0ZWQgZGV2aWNlLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgZGlzYWJsZWQgb3IgZW5hYmxlZCB3aXRob3V0IGNvbnZlcnNpb24gb24gZ29pbmcKICAgKiAgICAgICAgIG9uIGdyb3VwIHJlZ3VsYXIuCkBAIC0zMzI1LDcgKzMzMjUsNyBAQAogLyoqCiAgICogQGJyaWVmICBTZXQgQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbiB0cmlnZ2VyIHBvbGFyaXR5LgogICAqIEBub3RlICAgQXBwbGljYWJsZSBvbmx5IGZvciB0cmlnZ2VyIHNvdXJjZSBzZXQgdG8gZXh0ZXJuYWwgdHJpZ2dlci4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGRpc2FibGVkIG9yIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nCiAgICogICAgICAgICBvbiBncm91cCByZWd1bGFyLgpAQCAtMzM4Nyw3ICszMzg3LDcgQEAKICAgKiAgICAgICAgICAgZnVuY3Rpb24gIkxMX0FEQ19SRUdfU2V0U2VxdWVuY2VyQ2hhbm5lbHMoKSIuCiAgICogQG5vdGUgICBTZXF1ZW5jZXIgZGlzYWJsZWQgaXMgZXF1aXZhbGVudCB0byBzZXF1ZW5jZXIgb2YgMSByYW5rOgogICAqICAgICAgICAgQURDIGNvbnZlcnNpb24gb24gb25seSAxIGNoYW5uZWwuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZ3JvdXAgcmVndWxhci4KQEAgLTM0NzksNyArMzQ3OSw3IEBACiAgICogICAgICAgICBjb250aW51b3VzIG1vZGUgYW5kIHNlcXVlbmNlciBkaXNjb250aW51b3VzIG1vZGUuCiAgICogQG5vdGUgICBJdCBpcyBub3QgcG9zc2libGUgdG8gZW5hYmxlIGJvdGggQURDIGF1dG8taW5qZWN0ZWQgbW9kZQogICAqICAgICAgICAgYW5kIEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBkaXNjb250aW51b3VzIG1vZGUuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZ3JvdXAgcmVndWxhci4KQEAgLTM1MzIsMTcgKzM1MzIsMTcgQEAKICAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgY29uZmlndXJhdGlvbiBvZjoKICAgKiAgICAgICAgIC0gQ2hhbm5lbHMgb3JkZXJpbmcgaW50byBlYWNoIHJhbmsgb2Ygc2NhbiBzZXF1ZW5jZToKICAgKiAgICAgICAgICAgd2hhdGV2ZXIgY2hhbm5lbCBjYW4gYmUgcGxhY2VkIGludG8gd2hhdGV2ZXIgcmFuay4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBpcworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBpcwogICAqICAgICAgICAgZnVsbHkgY29uZmlndXJhYmxlOiBzZXF1ZW5jZXIgbGVuZ3RoIGFuZCBlYWNoIHJhbmsKICAgKiAgICAgICAgIGFmZmVjdGF0aW9uIHRvIGEgY2hhbm5lbCBhcmUgY29uZmlndXJhYmxlLgogICAqICAgICAgICAgUmVmZXIgdG8gZGVzY3JpcHRpb24gb2YgZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1NldFNlcXVlbmNlckxlbmd0aCgpLgogICAqIEBub3RlICAgRGVwZW5kaW5nIG9uIGRldmljZXMgYW5kIHBhY2thZ2VzLCBzb21lIGNoYW5uZWxzIG1heSBub3QgYmUgYXZhaWxhYmxlLgogICAqICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdG8gbWVhc3VyZSBpbnRlcm5hbCBjaGFubmVscyAoVnJlZkludCwKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0byBtZWFzdXJlIGludGVybmFsIGNoYW5uZWxzIChWcmVmSW50LAogICAqICAgICAgICAgVGVtcFNlbnNvciwgLi4uKSwgbWVhc3VyZW1lbnQgcGF0aHMgdG8gaW50ZXJuYWwgY2hhbm5lbHMgbXVzdCBiZQogICAqICAgICAgICAgZW5hYmxlZCBzZXBhcmF0ZWx5LgogICAqICAgICAgICAgVGhpcyBjYW4gYmUgZG9uZSB1c2luZyBmdW5jdGlvbiBAcmVmIExMX0FEQ19TZXRDb21tb25QYXRoSW50ZXJuYWxDaCgpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgZGlzYWJsZWQgb3IgZW5hYmxlZCB3aXRob3V0IGNvbnZlcnNpb24gb24gZ29pbmcKICAgKiAgICAgICAgIG9uIGdyb3VwIHJlZ3VsYXIuCkBAIC0zNjMyLDcgKzM2MzIsNyBAQAogLyoqCiAgICogQGJyaWVmICBHZXQgQURDIGdyb3VwIHJlZ3VsYXIgc2VxdWVuY2U6IGNoYW5uZWwgb24gdGhlIHNlbGVjdGVkCiAgICogICAgICAgICBzY2FuIHNlcXVlbmNlIHJhbmsuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBBREMgZ3JvdXAgcmVndWxhciBzZXF1ZW5jZXIgaXMKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBBREMgZ3JvdXAgcmVndWxhciBzZXF1ZW5jZXIgaXMKICAgKiAgICAgICAgIGZ1bGx5IGNvbmZpZ3VyYWJsZTogc2VxdWVuY2VyIGxlbmd0aCBhbmQgZWFjaCByYW5rCiAgICogICAgICAgICBhZmZlY3RhdGlvbiB0byBhIGNoYW5uZWwgYXJlIGNvbmZpZ3VyYWJsZS4KICAgKiAgICAgICAgIFJlZmVyIHRvIGRlc2NyaXB0aW9uIG9mIGZ1bmN0aW9uIEByZWYgTExfQURDX1JFR19TZXRTZXF1ZW5jZXJMZW5ndGgoKS4KQEAgLTM3MzksNyArMzczOSw3IEBACiAgICogICAgICAgICAgIGNvbnZlcnNpb25zIGxhdW5jaGVkIHN1Y2Nlc3NpdmVseSBhdXRvbWF0aWNhbGx5LgogICAqIEBub3RlICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGVuYWJsZSBib3RoIEFEQyBncm91cCByZWd1bGFyIAogICAqICAgICAgICAgY29udGludW91cyBtb2RlIGFuZCBzZXF1ZW5jZXIgZGlzY29udGludW91cyBtb2RlLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgZGlzYWJsZWQgb3IgZW5hYmxlZCB3aXRob3V0IGNvbnZlcnNpb24gb24gZ29pbmcKICAgKiAgICAgICAgIG9uIGdyb3VwIHJlZ3VsYXIuCkBAIC0zNzk0LDcgKzM3OTQsNyBAQAogICAqICAgICAgICAgc2V0dGluZ3MgYXJlIGF2YWlsYWJsZSB1c2luZyBmdW5jdGlvbiBAcmVmIExMX0FEQ19TZXRNdWx0aURNQVRyYW5zZmVyKCkuCiAgICogQG5vdGUgICBUbyBjb25maWd1cmUgRE1BIHNvdXJjZSBhZGRyZXNzIChwZXJpcGhlcmFsIGFkZHJlc3MpLAogICAqICAgICAgICAgdXNlIGZ1bmN0aW9uIEByZWYgTExfQURDX0RNQV9HZXRSZWdBZGRyKCkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtMzg1Niw3ICszODU2LDcgQEAKICAgKiAgICAgICAgIFRoZSBkZWZhdWx0IHNldHRpbmcgb2Ygb3ZlcnJ1biBpcyBkYXRhIHByZXNlcnZlZC4KICAgKiAgICAgICAgIFRoZXJlZm9yZSwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhbGwgZGV2aWNlcywgcGFyYW1ldGVyCiAgICogICAgICAgICBvdmVycnVuIHNob3VsZCBiZSBzZXQgdG8gZGF0YSBvdmVyd3JpdHRlbi4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGRpc2FibGVkIG9yIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nCiAgICogICAgICAgICBvbiBncm91cCByZWd1bGFyLgpAQCAtMzg5OCwyMiArMzg5OCwyMiBAQAogICAqIEBicmllZiAgU2V0IEFEQyBncm91cCBpbmplY3RlZCBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlOgogICAqICAgICAgICAgaW50ZXJuYWwgKFNXIHN0YXJ0KSBvciBmcm9tIGV4dGVybmFsIElQICh0aW1lciBldmVudCwKICAgKiAgICAgICAgIGV4dGVybmFsIGludGVycnVwdCBsaW5lKS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgdHJpZ2dlciBzb3VyY2UgdG8gZXh0ZXJuYWwgdHJpZ2dlcgorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgdHJpZ2dlciBzb3VyY2UgdG8gZXh0ZXJuYWwgdHJpZ2dlcgogICAqICAgICAgICAgYWxzbyBzZXQgdHJpZ2dlciBwb2xhcml0eSB0byByaXNpbmcgZWRnZSAKICAgKiAgICAgICAgIChkZWZhdWx0IHNldHRpbmcgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBzb21lIEFEQyBvbiBvdGhlcgogICAqICAgICAgICAgU1RNMzIgZmFtaWxpZXMgaGF2aW5nIHRoaXMgc2V0dGluZyBzZXQgYnkgSFcgZGVmYXVsdCB2YWx1ZSkuCiAgICogICAgICAgICBJbiBjYXNlIG9mIG5lZWQgdG8gbW9kaWZ5IHRyaWdnZXIgZWRnZSwgdXNlCiAgICogICAgICAgICBmdW5jdGlvbiBAcmVmIExMX0FEQ19JTkpfU2V0VHJpZ2dlckVkZ2UoKS4KLSAgKiBAbm90ZSAgIENhdXRpb24gdG8gQURDIGdyb3VwIGluamVjdGVkIGNvbnRleHRzIHF1ZXVlOiBPbiB0aGlzIFNUTTMyIHNlcmllLCAKKyAgKiBAbm90ZSAgIENhdXRpb24gdG8gQURDIGdyb3VwIGluamVjdGVkIGNvbnRleHRzIHF1ZXVlOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgCiAgICogICAgICAgICB1c2luZyBzdWNjZXNzaXZlbHkgc2V2ZXJhbCB0aW1lcyB0aGlzIGZ1bmN0aW9uIHdpbGwgYXBwZWFyIGhhcwogICAqICAgICAgICAgaGF2aW5nIG5vIGVmZmVjdC4KICAgKiAgICAgICAgIFRoaXMgaXMgZHVlIHRvIEFEQyBncm91cCBpbmplY3RlZCBjb250ZXh0cyBxdWV1ZSAodGhpcyBmZWF0dXJlCi0gICogICAgICAgICBjYW5ub3QgYmUgZGlzYWJsZWQgb24gdGhpcyBTVE0zMiBzZXJpZSkuCisgICogICAgICAgICBjYW5ub3QgYmUgZGlzYWJsZWQgb24gdGhpcyBTVE0zMiBzZXJpZXMpLgogICAqICAgICAgICAgVG8gc2V0IHNldmVyYWwgZmVhdHVyZXMgb2YgQURDIGdyb3VwIGluamVjdGVkLCB1c2UKICAgKiAgICAgICAgIGZ1bmN0aW9uIEByZWYgTExfQURDX0lOSl9Db25maWdRdWV1ZUNvbnRleHQoKS4KICAgKiBAbm90ZSAgIEF2YWlsYWJpbGl0eSBvZiBwYXJhbWV0ZXJzIG9mIHRyaWdnZXIgc291cmNlcyBmcm9tIHRpbWVyIAogICAqICAgICAgICAgZGVwZW5kcyBvbiB0aW1lcnMgYXZhaWxhYmlsaXR5IG9uIHRoZSBzZWxlY3RlZCBkZXZpY2UuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBub3QgYmUgZGlzYWJsZWQuIENhbiBiZSBlbmFibGVkIHdpdGggb3Igd2l0aG91dCBjb252ZXJzaW9uCiAgICogICAgICAgICBvbiBnb2luZyBvbiBlaXRoZXIgZ3JvdXBzIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCkBAIC00MDgwLDcgKzQwODAsNyBAQAogLyoqCiAgICogQGJyaWVmICBTZXQgQURDIGdyb3VwIGluamVjdGVkIGNvbnZlcnNpb24gdHJpZ2dlciBwb2xhcml0eS4KICAgKiAgICAgICAgIEFwcGxpY2FibGUgb25seSBmb3IgdHJpZ2dlciBzb3VyY2Ugc2V0IHRvIGV4dGVybmFsIHRyaWdnZXIuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBub3QgYmUgZGlzYWJsZWQuIENhbiBiZSBlbmFibGVkIHdpdGggb3Igd2l0aG91dCBjb252ZXJzaW9uCiAgICogICAgICAgICBvbiBnb2luZyBvbiBlaXRoZXIgZ3JvdXBzIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCkBAIC00MTIwLDE0ICs0MTIwLDE0IEBACiAgICogICAgICAgICAgIHNjYW4gZGlyZWN0aW9uIGlzIGZvcndhcmQgKGZyb20gcmFuayAxIHRvIHJhbmsgbikuCiAgICogQG5vdGUgICBTZXF1ZW5jZXIgZGlzYWJsZWQgaXMgZXF1aXZhbGVudCB0byBzZXF1ZW5jZXIgb2YgMSByYW5rOgogICAqICAgICAgICAgQURDIGNvbnZlcnNpb24gb24gb25seSAxIGNoYW5uZWwuCi0gICogQG5vdGUgICBDYXV0aW9uIHRvIEFEQyBncm91cCBpbmplY3RlZCBjb250ZXh0cyBxdWV1ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgCisgICogQG5vdGUgICBDYXV0aW9uIHRvIEFEQyBncm91cCBpbmplY3RlZCBjb250ZXh0cyBxdWV1ZTogT24gdGhpcyBTVE0zMiBzZXJpZXMsIAogICAqICAgICAgICAgdXNpbmcgc3VjY2Vzc2l2ZWx5IHNldmVyYWwgdGltZXMgdGhpcyBmdW5jdGlvbiB3aWxsIGFwcGVhciBoYXMKICAgKiAgICAgICAgIGhhdmluZyBubyBlZmZlY3QuCiAgICogICAgICAgICBUaGlzIGlzIGR1ZSB0byBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udGV4dHMgcXVldWUgKHRoaXMgZmVhdHVyZQotICAqICAgICAgICAgY2Fubm90IGJlIGRpc2FibGVkIG9uIHRoaXMgU1RNMzIgc2VyaWUpLgorICAqICAgICAgICAgY2Fubm90IGJlIGRpc2FibGVkIG9uIHRoaXMgU1RNMzIgc2VyaWVzKS4KICAgKiAgICAgICAgIFRvIHNldCBzZXZlcmFsIGZlYXR1cmVzIG9mIEFEQyBncm91cCBpbmplY3RlZCwgdXNlCiAgICogICAgICAgICBmdW5jdGlvbiBAcmVmIExMX0FEQ19JTkpfQ29uZmlnUXVldWVDb250ZXh0KCkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBub3QgYmUgZGlzYWJsZWQuIENhbiBiZSBlbmFibGVkIHdpdGggb3Igd2l0aG91dCBjb252ZXJzaW9uCiAgICogICAgICAgICBvbiBnb2luZyBvbiBlaXRoZXIgZ3JvdXBzIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCkBAIC00MjA0LDE4ICs0MjA0LDE4IEBACiAgICogICAgICAgICBzZXF1ZW5jZSByYW5rLgogICAqIEBub3RlICAgRGVwZW5kaW5nIG9uIGRldmljZXMgYW5kIHBhY2thZ2VzLCBzb21lIGNoYW5uZWxzIG1heSBub3QgYmUgYXZhaWxhYmxlLgogICAqICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdG8gbWVhc3VyZSBpbnRlcm5hbCBjaGFubmVscyAoVnJlZkludCwKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0byBtZWFzdXJlIGludGVybmFsIGNoYW5uZWxzIChWcmVmSW50LAogICAqICAgICAgICAgVGVtcFNlbnNvciwgLi4uKSwgbWVhc3VyZW1lbnQgcGF0aHMgdG8gaW50ZXJuYWwgY2hhbm5lbHMgbXVzdCBiZQogICAqICAgICAgICAgZW5hYmxlZCBzZXBhcmF0ZWx5LgogICAqICAgICAgICAgVGhpcyBjYW4gYmUgZG9uZSB1c2luZyBmdW5jdGlvbiBAcmVmIExMX0FEQ19TZXRDb21tb25QYXRoSW50ZXJuYWxDaCgpLgotICAqIEBub3RlICAgQ2F1dGlvbiB0byBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udGV4dHMgcXVldWU6IE9uIHRoaXMgU1RNMzIgc2VyaWUsIAorICAqIEBub3RlICAgQ2F1dGlvbiB0byBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udGV4dHMgcXVldWU6IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCAKICAgKiAgICAgICAgIHVzaW5nIHN1Y2Nlc3NpdmVseSBzZXZlcmFsIHRpbWVzIHRoaXMgZnVuY3Rpb24gd2lsbCBhcHBlYXIgaGFzCiAgICogICAgICAgICBoYXZpbmcgbm8gZWZmZWN0LgogICAqICAgICAgICAgVGhpcyBpcyBkdWUgdG8gQURDIGdyb3VwIGluamVjdGVkIGNvbnRleHRzIHF1ZXVlICh0aGlzIGZlYXR1cmUKLSAgKiAgICAgICAgIGNhbm5vdCBiZSBkaXNhYmxlZCBvbiB0aGlzIFNUTTMyIHNlcmllKS4KKyAgKiAgICAgICAgIGNhbm5vdCBiZSBkaXNhYmxlZCBvbiB0aGlzIFNUTTMyIHNlcmllcykuCiAgICogICAgICAgICBUbyBzZXQgc2V2ZXJhbCBmZWF0dXJlcyBvZiBBREMgZ3JvdXAgaW5qZWN0ZWQsIHVzZQogICAqICAgICAgICAgZnVuY3Rpb24gQHJlZiBMTF9BRENfSU5KX0NvbmZpZ1F1ZXVlQ29udGV4dCgpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3Qgbm90IGJlIGRpc2FibGVkLiBDYW4gYmUgZW5hYmxlZCB3aXRoIG9yIHdpdGhvdXQgY29udmVyc2lvbgogICAqICAgICAgICAgb24gZ29pbmcgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtNDM2Nyw3ICs0MzY3LDcgQEAKICAgKiAgICAgICAgIGZyb20gQURDIGdyb3VwIHJlZ3VsYXIuCiAgICogQG5vdGUgICBJdCBpcyBub3QgcG9zc2libGUgdG8gZW5hYmxlIGJvdGggQURDIGdyb3VwIGluamVjdGVkCiAgICogICAgICAgICBhdXRvLWluamVjdGVkIG1vZGUgYW5kIHNlcXVlbmNlciBkaXNjb250aW51b3VzIG1vZGUuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtNDQyNSw3ICs0NDI1LDcgQEAKICAgKiAgICAgICAgIG9uIGVpdGhlciBncm91cHMgcmVndWxhciBvciBpbmplY3RlZC4KICAgKiBAbm90ZSAgIEEgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250ZXh0IG1vZGUgKGJpdCBKUURJUykgY2F1c2VzIHRoZSBjb250ZXh0cwogICAqICAgICAgICAgcXVldWUgdG8gYmUgZmx1c2hlZCBhbmQgdGhlIHJlZ2lzdGVyIEpTUVIgaXMgY2xlYXJlZC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGRpc2FibGVkIG9yIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nCiAgICogICAgICAgICBvbiBlaXRoZXIgZ3JvdXBzIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCkBAIC00NDcxLDExICs0NDcxLDExIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0lOSl9HZXRUcmlnZ2VyU291cmNlKCkKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfSU5KX0dldFRyaWdnZXJFZGdlKCkKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfSU5KX0dldFNlcXVlbmNlclJhbmtzKCkKLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHRvIG1lYXN1cmUgaW50ZXJuYWwgY2hhbm5lbHMgKFZyZWZJbnQsCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgdG8gbWVhc3VyZSBpbnRlcm5hbCBjaGFubmVscyAoVnJlZkludCwKICAgKiAgICAgICAgIFRlbXBTZW5zb3IsIC4uLiksIG1lYXN1cmVtZW50IHBhdGhzIHRvIGludGVybmFsIGNoYW5uZWxzIG11c3QgYmUKICAgKiAgICAgICAgIGVuYWJsZWQgc2VwYXJhdGVseS4KICAgKiAgICAgICAgIFRoaXMgY2FuIGJlIGRvbmUgdXNpbmcgZnVuY3Rpb24gQHJlZiBMTF9BRENfU2V0Q29tbW9uUGF0aEludGVybmFsQ2goKS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IG5vdCBiZSBkaXNhYmxlZC4gQ2FuIGJlIGVuYWJsZWQgd2l0aCBvciB3aXRob3V0IGNvbnZlcnNpb24KICAgKiAgICAgICAgIG9uIGdvaW5nIG9uIGVpdGhlciBncm91cHMgcmVndWxhciBvciBpbmplY3RlZC4KQEAgLTQ3NDIsNyArNDc0Miw3IEBACiAgICogICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciB0aW1pbmdzIHZhbHVlcyAocGFyYW1ldGVycyBUU192cmVmaW50LAogICAqICAgICAgICAgVFNfdGVtcCwgLi4uKS4KICAgKiBAbm90ZSAgIENvbnZlcnNpb24gdGltZSBpcyB0aGUgYWRkaXRpb24gb2Ygc2FtcGxpbmcgdGltZSBhbmQgcHJvY2Vzc2luZyB0aW1lLgotICAqICAgICAgICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgQURDIHByb2Nlc3NpbmcgdGltZSBpczoKKyAgKiAgICAgICAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBBREMgcHJvY2Vzc2luZyB0aW1lIGlzOgogICAqICAgICAgICAgLSAxMi41IEFEQyBjbG9jayBjeWNsZXMgYXQgQURDIHJlc29sdXRpb24gMTIgYml0cwogICAqICAgICAgICAgLSAxMC41IEFEQyBjbG9jayBjeWNsZXMgYXQgQURDIHJlc29sdXRpb24gMTAgYml0cwogICAqICAgICAgICAgLSA4LjUgQURDIGNsb2NrIGN5Y2xlcyBhdCBBREMgcmVzb2x1dGlvbiA4IGJpdHMKQEAgLTQ3NTEsNyArNDc1MSw3IEBACiAgICogICAgICAgICB0ZW1wZXJhdHVyZSBzZW5zb3IsIC4uLiksIGEgc2FtcGxpbmcgdGltZSBtaW5pbXVtIHZhbHVlCiAgICogICAgICAgICBpcyByZXF1aXJlZC4KICAgKiAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtNDgzOSw3ICs0ODM5LDcgQEAKICAgKiBAbm90ZSAgIE9uIHRoaXMgZGV2aWNlLCBzYW1wbGluZyB0aW1lIGlzIG9uIGNoYW5uZWwgc2NvcGU6IGluZGVwZW5kZW50bHkKICAgKiAgICAgICAgIG9mIGNoYW5uZWwgbWFwcGVkIG9uIEFEQyBncm91cCByZWd1bGFyIG9yIGluamVjdGVkLgogICAqIEBub3RlICAgQ29udmVyc2lvbiB0aW1lIGlzIHRoZSBhZGRpdGlvbiBvZiBzYW1wbGluZyB0aW1lIGFuZCBwcm9jZXNzaW5nIHRpbWUuCi0gICogICAgICAgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBBREMgcHJvY2Vzc2luZyB0aW1lIGlzOgorICAqICAgICAgICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyBwcm9jZXNzaW5nIHRpbWUgaXM6CiAgICogICAgICAgICAtIDEyLjUgQURDIGNsb2NrIGN5Y2xlcyBhdCBBREMgcmVzb2x1dGlvbiAxMiBiaXRzCiAgICogICAgICAgICAtIDEwLjUgQURDIGNsb2NrIGN5Y2xlcyBhdCBBREMgcmVzb2x1dGlvbiAxMCBiaXRzCiAgICogICAgICAgICAtIDguNSBBREMgY2xvY2sgY3ljbGVzIGF0IEFEQyByZXNvbHV0aW9uIDggYml0cwpAQCAtNDkzOSw3ICs0OTM5LDcgQEAKICAgKiBAbm90ZSAgIEZvciBBREMgY2hhbm5lbHMgY29uZmlndXJlZCBpbiBkaWZmZXJlbnRpYWwgbW9kZSwgYm90aCBpbnB1dHMKICAgKiAgICAgICAgIHNob3VsZCBiZSBiaWFzZWQgYXQgKFZyZWYrKS8yICsvLTIwMG1WLgogICAqICAgICAgICAgKFZyZWYrIGlzIHRoZSBhbmFsb2cgdm9sdGFnZSByZWZlcmVuY2UpCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBBREMgZGlzYWJsZWQuCiAgICogQG5vdGUgICBPbmUgb3Igc2V2ZXJhbCB2YWx1ZXMgY2FuIGJlIHNlbGVjdGVkLgpAQCAtNTA0Nyw3ICs1MDQ3LDcgQEAKICAgKiBAbm90ZSAgIEluIGNhc2Ugb2YgbmVlZCB0byBkZWZpbmUgYSBzaW5nbGUgY2hhbm5lbCB0byBtb25pdG9yCiAgICogICAgICAgICB3aXRoIGFuYWxvZyB3YXRjaGRvZyBmcm9tIHNlcXVlbmNlciBjaGFubmVsIGRlZmluaXRpb24sCiAgICogICAgICAgICB1c2UgaGVscGVyIG1hY3JvIEByZWYgX19MTF9BRENfQU5BTE9HV0RfQ0hBTk5FTF9HUk9VUCgpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgYXJlIDIga2luZHMgb2YgYW5hbG9nIHdhdGNoZG9nCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgYXJlIDIga2luZHMgb2YgYW5hbG9nIHdhdGNoZG9nCiAgICogICAgICAgICBpbnN0YW5jZToKICAgKiAgICAgICAgIC0gQVdEIHN0YW5kYXJkIChpbnN0YW5jZSBBV0QxKToKICAgKiAgICAgICAgICAgLSBjaGFubmVscyBtb25pdG9yZWQ6IGNhbiBtb25pdG9yIDEgY2hhbm5lbCBvciBhbGwgY2hhbm5lbHMuCkBAIC01MDY4LDcgKzUwNjgsNyBAQAogICAqICAgICAgICAgICAtIHJlc29sdXRpb246IHJlc29sdXRpb24gaXMgbGltaXRlZCB0byA4IGJpdHM6IGlmIEFEQyByZXNvbHV0aW9uIGlzCiAgICogICAgICAgICAgICAgMTIgYml0cyB0aGUgNCBMU0IgYXJlIGlnbm9yZWQsIGlmIEFEQyByZXNvbHV0aW9uIGlzIDEwIGJpdHMKICAgKiAgICAgICAgICAgICB0aGUgMiBMU0IgYXJlIGlnbm9yZWQuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtNTIwNSw3ICs1MjA1LDcgQEAKICAgKiAgICAgICAgICAgQHJlZiBfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoKS4KICAgKiAgICAgICAgICAgQXBwbGljYWJsZSBvbmx5IHdoZW4gdGhlIGFuYWxvZyB3YXRjaGRvZyBpcyBzZXQgdG8gbW9uaXRvcgogICAqICAgICAgICAgICBvbmUgY2hhbm5lbC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGFyZSAyIGtpbmRzIG9mIGFuYWxvZyB3YXRjaGRvZworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGFyZSAyIGtpbmRzIG9mIGFuYWxvZyB3YXRjaGRvZwogICAqICAgICAgICAgaW5zdGFuY2U6CiAgICogICAgICAgICAtIEFXRCBzdGFuZGFyZCAoaW5zdGFuY2UgQVdEMSk6CiAgICogICAgICAgICAgIC0gY2hhbm5lbHMgbW9uaXRvcmVkOiBjYW4gbW9uaXRvciAxIGNoYW5uZWwgb3IgYWxsIGNoYW5uZWxzLgpAQCAtNTIyNiw3ICs1MjI2LDcgQEAKICAgKiAgICAgICAgICAgLSByZXNvbHV0aW9uOiByZXNvbHV0aW9uIGlzIGxpbWl0ZWQgdG8gOCBiaXRzOiBpZiBBREMgcmVzb2x1dGlvbiBpcwogICAqICAgICAgICAgICAgIDEyIGJpdHMgdGhlIDQgTFNCIGFyZSBpZ25vcmVkLCBpZiBBREMgcmVzb2x1dGlvbiBpcyAxMCBiaXRzCiAgICogICAgICAgICAgICAgdGhlIDIgTFNCIGFyZSBpZ25vcmVkLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgZGlzYWJsZWQgb3IgZW5hYmxlZCB3aXRob3V0IGNvbnZlcnNpb24gb24gZ29pbmcKICAgKiAgICAgICAgIG9uIGVpdGhlciBncm91cHMgcmVndWxhciBvciBpbmplY3RlZC4KQEAgLTUzNjksNyArNTM2OSw3IEBACiAgICogQG5vdGUgICBJbiBjYXNlIG9mIEFEQyByZXNvbHV0aW9uIGRpZmZlcmVudCBvZiAxMiBiaXRzLAogICAqICAgICAgICAgYW5hbG9nIHdhdGNoZG9nIHRocmVzaG9sZHMgZGF0YSByZXF1aXJlIGEgc3BlY2lmaWMgc2hpZnQuCiAgICogICAgICAgICBVc2UgaGVscGVyIG1hY3JvIEByZWYgX19MTF9BRENfQU5BTE9HV0RfU0VUX1RIUkVTSE9MRF9SRVNPTFVUSU9OKCkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBhcmUgMiBraW5kcyBvZiBhbmFsb2cgd2F0Y2hkb2cKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBhcmUgMiBraW5kcyBvZiBhbmFsb2cgd2F0Y2hkb2cKICAgKiAgICAgICAgIGluc3RhbmNlOgogICAqICAgICAgICAgLSBBV0Qgc3RhbmRhcmQgKGluc3RhbmNlIEFXRDEpOgogICAqICAgICAgICAgICAtIGNoYW5uZWxzIG1vbml0b3JlZDogY2FuIG1vbml0b3IgMSBjaGFubmVsIG9yIGFsbCBjaGFubmVscy4KQEAgLTUzOTAsNyArNTM5MCw3IEBACiAgICogICAgICAgICAgIC0gcmVzb2x1dGlvbjogcmVzb2x1dGlvbiBpcyBsaW1pdGVkIHRvIDggYml0czogaWYgQURDIHJlc29sdXRpb24gaXMKICAgKiAgICAgICAgICAgICAxMiBiaXRzIHRoZSA0IExTQiBhcmUgaWdub3JlZCwgaWYgQURDIHJlc29sdXRpb24gaXMgMTAgYml0cwogICAqICAgICAgICAgICAgIHRoZSAyIExTQiBhcmUgaWdub3JlZC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGRpc2FibGVkIG9yIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nCiAgICogICAgICAgICBvbiBlaXRoZXIgZ3JvdXBzIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCkBAIC01NDMxLDcgKzU0MzEsNyBAQAogICAqIEBub3RlICAgSW4gY2FzZSBvZiBBREMgcmVzb2x1dGlvbiBkaWZmZXJlbnQgb2YgMTIgYml0cywKICAgKiAgICAgICAgIGFuYWxvZyB3YXRjaGRvZyB0aHJlc2hvbGRzIGRhdGEgcmVxdWlyZSBhIHNwZWNpZmljIHNoaWZ0LgogICAqICAgICAgICAgVXNlIGhlbHBlciBtYWNybyBAcmVmIF9fTExfQURDX0FOQUxPR1dEX1NFVF9USFJFU0hPTERfUkVTT0xVVElPTigpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgYXJlIDIga2luZHMgb2YgYW5hbG9nIHdhdGNoZG9nCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgYXJlIDIga2luZHMgb2YgYW5hbG9nIHdhdGNoZG9nCiAgICogICAgICAgICBpbnN0YW5jZToKICAgKiAgICAgICAgIC0gQVdEIHN0YW5kYXJkIChpbnN0YW5jZSBBV0QxKToKICAgKiAgICAgICAgICAgLSBjaGFubmVscyBtb25pdG9yZWQ6IGNhbiBtb25pdG9yIDEgY2hhbm5lbCBvciBhbGwgY2hhbm5lbHMuCkBAIC01NDUyLDcgKzU0NTIsNyBAQAogICAqICAgICAgICAgICAtIHJlc29sdXRpb246IHJlc29sdXRpb24gaXMgbGltaXRlZCB0byA4IGJpdHM6IGlmIEFEQyByZXNvbHV0aW9uIGlzCiAgICogICAgICAgICAgICAgMTIgYml0cyB0aGUgNCBMU0IgYXJlIGlnbm9yZWQsIGlmIEFEQyByZXNvbHV0aW9uIGlzIDEwIGJpdHMKICAgKiAgICAgICAgICAgICB0aGUgMiBMU0IgYXJlIGlnbm9yZWQuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZwogICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgpAQCAtNTU0MCw3ICs1NTQwLDcgQEAKICAgKiBAbm90ZSAgIElmIG11bHRpbW9kZSBjb25maWd1cmF0aW9uOiB0aGUgc2VsZWN0ZWQgQURDIGluc3RhbmNlIGlzCiAgICogICAgICAgICBlaXRoZXIgbWFzdGVyIG9yIHNsYXZlIGRlcGVuZGluZyBvbiBoYXJkd2FyZS4KICAgKiAgICAgICAgIFJlZmVyIHRvIHJlZmVyZW5jZSBtYW51YWwuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBbGwgQURDIGluc3RhbmNlcyBvZiB0aGUgQURDIGNvbW1vbiBncm91cCBtdXN0IGJlIGRpc2FibGVkLgogICAqICAgICAgICAgVGhpcyBjaGVjayBjYW4gYmUgZG9uZSB3aXRoIGZ1bmN0aW9uIEByZWYgTExfQURDX0lzRW5hYmxlZCgpIGZvciBlYWNoCkBAIC01NjE5LDcgKzU2MTksNyBAQAogICAqICAgICAgICAgQSBtYWNybyBpcyBhdmFpbGFibGUgdG8gZ2V0IHRoZSBjb252ZXJzaW9uIGRhdGEgb2YKICAgKiAgICAgICAgIEFEQyBtYXN0ZXIgb3IgQURDIHNsYXZlOiBzZWUgaGVscGVyIG1hY3JvCiAgICogICAgICAgICBAcmVmIF9fTExfQURDX01VTFRJX0NPTlZfREFUQV9NQVNURVJfU0xBVkUoKS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFsbCBBREMgaW5zdGFuY2VzIG9mIHRoZSBBREMgY29tbW9uIGdyb3VwIG11c3QgYmUgZGlzYWJsZWQKICAgKiAgICAgICAgIG9yIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nIG9uIGdyb3VwIHJlZ3VsYXIuCkBAIC01NjkzLDcgKzU2OTMsNyBAQAogICAqICAgICAgICAgLSBBREMgcmVzb2x1dGlvbiAxMCBiaXRzIGNhbiBoYXZlIG1heGltdW0gZGVsYXkgb2YgMTAgY3ljbGVzLgogICAqICAgICAgICAgLSBBREMgcmVzb2x1dGlvbiAgOCBiaXRzIGNhbiBoYXZlIG1heGltdW0gZGVsYXkgb2YgIDggY3ljbGVzLgogICAqICAgICAgICAgLSBBREMgcmVzb2x1dGlvbiAgNiBiaXRzIGNhbiBoYXZlIG1heGltdW0gZGVsYXkgb2YgIDYgY3ljbGVzLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQWxsIEFEQyBpbnN0YW5jZXMgb2YgdGhlIEFEQyBjb21tb24gZ3JvdXAgbXVzdCBiZSBkaXNhYmxlZC4KICAgKiAgICAgICAgIFRoaXMgY2hlY2sgY2FuIGJlIGRvbmUgd2l0aCBmdW5jdGlvbiBAcmVmIExMX0FEQ19Jc0VuYWJsZWQoKSBmb3IgZWFjaApAQCAtNTc2NCwxMiArNTc2NCwxMiBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBBREMgaW5zdGFuY2UgaW50ZXJuYWwgdm9sdGFnZSByZWd1bGF0b3IuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBhZnRlciBBREMgaW50ZXJuYWwgdm9sdGFnZSByZWd1bGF0b3IgZW5hYmxlLAorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGFmdGVyIEFEQyBpbnRlcm5hbCB2b2x0YWdlIHJlZ3VsYXRvciBlbmFibGUsCiAgICogICAgICAgICBhIGRlbGF5IGZvciBBREMgaW50ZXJuYWwgdm9sdGFnZSByZWd1bGF0b3Igc3RhYmlsaXphdGlvbgogICAqICAgICAgICAgaXMgcmVxdWlyZWQgYmVmb3JlIHBlcmZvcm1pbmcgYSBBREMgY2FsaWJyYXRpb24gb3IgQURDIGVuYWJsZS4KICAgKiAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQsIHBhcmFtZXRlciB0QURDVlJFR19TVFVQLgogICAqICAgICAgICAgUmVmZXIgdG8gbGl0ZXJhbCBAcmVmIExMX0FEQ19ERUxBWV9JTlRFUk5BTF9SRUdVTF9TVEFCX1VTLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgQURDIGRpc2FibGVkLgogICAqIEBybXRvbGwgQ1IgICAgICAgQURWUkVHRU4gICAgICAgTExfQURDX0VuYWJsZUludGVybmFsUmVndWxhdG9yCkBAIC01NzkzLDcgKzU3OTMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgQURDIGludGVybmFsIHZvbHRhZ2UgcmVndWxhdG9yLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgQURDIGRpc2FibGVkLgogICAqIEBybXRvbGwgQ1IgICAgICAgQURWUkVHRU4gICAgICAgTExfQURDX0Rpc2FibGVJbnRlcm5hbFJlZ3VsYXRvcgpAQCAtNTgxOCwxNCArNTgxOCwxNCBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgc2VsZWN0ZWQgQURDIGluc3RhbmNlLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgYWZ0ZXIgQURDIGVuYWJsZSwgYSBkZWxheSBmb3IgCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgYWZ0ZXIgQURDIGVuYWJsZSwgYSBkZWxheSBmb3IgCiAgICogICAgICAgICBBREMgaW50ZXJuYWwgYW5hbG9nIHN0YWJpbGl6YXRpb24gaXMgcmVxdWlyZWQgYmVmb3JlIHBlcmZvcm1pbmcgYQogICAqICAgICAgICAgQURDIGNvbnZlcnNpb24gc3RhcnQuCiAgICogICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0LCBwYXJhbWV0ZXIgdFNUQUIuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBmbGFnIExMX0FEQ19GTEFHX0FEUkRZIGlzIHJhaXNlZCB3aGVuIHRoZSBBREMKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBmbGFnIExMX0FEQ19GTEFHX0FEUkRZIGlzIHJhaXNlZCB3aGVuIHRoZSBBREMKICAgKiAgICAgICAgIGlzIGVuYWJsZWQgYW5kIHdoZW4gY29udmVyc2lvbiBjbG9jayBpcyBhY3RpdmUuCiAgICogICAgICAgICAobm90IG9ubHkgY29yZSBjbG9jazogdGhpcyBBREMgaGFzIGEgZHVhbCBjbG9jayBkb21haW4pCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBBREMgZGlzYWJsZWQgYW5kIEFEQyBpbnRlcm5hbCB2b2x0YWdlIHJlZ3VsYXRvciBlbmFibGVkLgogICAqIEBybXRvbGwgQ1IgICAgICAgQURFTiAgICAgICAgICAgTExfQURDX0VuYWJsZQpAQCAtNTg0NCw3ICs1ODQ0LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIHRoZSBzZWxlY3RlZCBBREMgaW5zdGFuY2UuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCiAgICogICAgICAgICBBREMgc3RhdGU6CiAgICogICAgICAgICBBREMgbXVzdCBiZSBub3QgZGlzYWJsZWQuIE11c3QgYmUgZW5hYmxlZCB3aXRob3V0IGNvbnZlcnNpb24gb24gZ29pbmcKICAgKiAgICAgICAgIG9uIGVpdGhlciBncm91cHMgcmVndWxhciBvciBpbmplY3RlZC4KQEAgLTU4NjQsNyArNTg2NCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgR2V0IHRoZSBzZWxlY3RlZCBBREMgaW5zdGFuY2UgZW5hYmxlIHN0YXRlLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgZmxhZyBMTF9BRENfRkxBR19BRFJEWSBpcyByYWlzZWQgd2hlbiB0aGUgQURDCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgZmxhZyBMTF9BRENfRkxBR19BRFJEWSBpcyByYWlzZWQgd2hlbiB0aGUgQURDCiAgICogICAgICAgICBpcyBlbmFibGVkIGFuZCB3aGVuIGNvbnZlcnNpb24gY2xvY2sgaXMgYWN0aXZlLgogICAqICAgICAgICAgKG5vdCBvbmx5IGNvcmUgY2xvY2s6IHRoaXMgQURDIGhhcyBhIGR1YWwgY2xvY2sgZG9tYWluKQogICAqIEBybXRvbGwgQ1IgICAgICAgQURFTiAgICAgICAgICAgTExfQURDX0lzRW5hYmxlZApAQCAtNTg5MCw3ICs1ODkwLDcgQEAKIC8qKgogICAqIEBicmllZiAgU3RhcnQgQURDIGNhbGlicmF0aW9uIGluIHRoZSBtb2RlIHNpbmdsZS1lbmRlZAogICAqICAgICAgICAgb3IgZGlmZmVyZW50aWFsIChmb3IgZGV2aWNlcyB3aXRoIGRpZmZlcmVudGlhbCBtb2RlIGF2YWlsYWJsZSkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBhIG1pbmltdW0gbnVtYmVyIG9mIEFEQyBjbG9jayBjeWNsZXMKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBhIG1pbmltdW0gbnVtYmVyIG9mIEFEQyBjbG9jayBjeWNsZXMKICAgKiAgICAgICAgIGFyZSByZXF1aXJlZCBiZXR3ZWVuIEFEQyBlbmQgb2YgY2FsaWJyYXRpb24gYW5kIEFEQyBlbmFibGUuCiAgICogICAgICAgICBSZWZlciB0byBsaXRlcmFsIEByZWYgTExfQURDX0RFTEFZX0NBTElCX0VOQUJMRV9BRENfQ1lDTEVTLgogICAqIEBub3RlICAgRm9yIGRldmljZXMgd2l0aCBkaWZmZXJlbnRpYWwgbW9kZSBhdmFpbGFibGU6CkBAIC01ODk5LDcgKzU4OTksNyBAQAogICAqICAgICAgICAgKGNhbGlicmF0aW9uIHJ1biBtdXN0IGJlIHBlcmZvcm1lZCBmb3IgZWFjaCBvZiB0aGVzZQogICAqICAgICAgICAgZGlmZmVyZW50aWFsIG1vZGVzLCBpZiB1c2VkIGFmdGVyd2FyZHMgYW5kIGlmIHRoZSBhcHBsaWNhdGlvbgogICAqICAgICAgICAgcmVxdWlyZXMgdGhlaXIgY2FsaWJyYXRpb24pLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBzZXR0aW5nIG9mIHRoaXMgZmVhdHVyZSBpcyBjb25kaXRpb25lZCB0bwogICAqICAgICAgICAgQURDIHN0YXRlOgogICAqICAgICAgICAgQURDIG11c3QgYmUgQURDIGRpc2FibGVkLgogICAqIEBybXRvbGwgQ1IgICAgICAgQURDQUwgICAgICAgICAgTExfQURDX1N0YXJ0Q2FsaWJyYXRpb25cbgpAQCAtNTk0MSwxNCArNTk0MSwxNCBAQAogCiAvKioKICAgKiBAYnJpZWYgIFN0YXJ0IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24uCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGlzIGZ1bmN0aW9uIGlzIHJlbGV2YW50IGZvciBib3RoIAorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoaXMgZnVuY3Rpb24gaXMgcmVsZXZhbnQgZm9yIGJvdGggCiAgICogICAgICAgICBpbnRlcm5hbCB0cmlnZ2VyIChTVyBzdGFydCkgYW5kIGV4dGVybmFsIHRyaWdnZXI6CiAgICogICAgICAgICAtIElmIEFEQyB0cmlnZ2VyIGhhcyBiZWVuIHNldCB0byBzb2Z0d2FyZSBzdGFydCwgQURDIGNvbnZlcnNpb24KICAgKiAgICAgICAgICAgc3RhcnRzIGltbWVkaWF0ZWx5LgogICAqICAgICAgICAgLSBJZiBBREMgdHJpZ2dlciBoYXMgYmVlbiBzZXQgdG8gZXh0ZXJuYWwgdHJpZ2dlciwgQURDIGNvbnZlcnNpb24KICAgKiAgICAgICAgICAgd2lsbCBzdGFydCBhdCBuZXh0IHRyaWdnZXIgZXZlbnQgKG9uIHRoZSBzZWxlY3RlZCB0cmlnZ2VyIGVkZ2UpCiAgICogICAgICAgICAgIGZvbGxvd2luZyB0aGUgQURDIHN0YXJ0IGNvbnZlcnNpb24gY29tbWFuZC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nIG9uIGdyb3VwIHJlZ3VsYXIsCiAgICogICAgICAgICB3aXRob3V0IGNvbnZlcnNpb24gc3RvcCBjb21tYW5kIG9uIGdvaW5nIG9uIGdyb3VwIHJlZ3VsYXIsCkBAIC01OTY5LDcgKzU5NjksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFN0b3AgQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbi4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGVuYWJsZWQgd2l0aCBjb252ZXJzaW9uIG9uIGdvaW5nIG9uIGdyb3VwIHJlZ3VsYXIsCiAgICogICAgICAgICB3aXRob3V0IEFEQyBkaXNhYmxlIGNvbW1hbmQgb24gZ29pbmcuCkBAIC02MTI0LDE0ICs2MTI0LDE0IEBACiAKIC8qKgogICAqIEBicmllZiAgU3RhcnQgQURDIGdyb3VwIGluamVjdGVkIGNvbnZlcnNpb24uCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGlzIGZ1bmN0aW9uIGlzIHJlbGV2YW50IGZvciBib3RoIAorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoaXMgZnVuY3Rpb24gaXMgcmVsZXZhbnQgZm9yIGJvdGggCiAgICogICAgICAgICBpbnRlcm5hbCB0cmlnZ2VyIChTVyBzdGFydCkgYW5kIGV4dGVybmFsIHRyaWdnZXI6CiAgICogICAgICAgICAtIElmIEFEQyB0cmlnZ2VyIGhhcyBiZWVuIHNldCB0byBzb2Z0d2FyZSBzdGFydCwgQURDIGNvbnZlcnNpb24KICAgKiAgICAgICAgICAgc3RhcnRzIGltbWVkaWF0ZWx5LgogICAqICAgICAgICAgLSBJZiBBREMgdHJpZ2dlciBoYXMgYmVlbiBzZXQgdG8gZXh0ZXJuYWwgdHJpZ2dlciwgQURDIGNvbnZlcnNpb24KICAgKiAgICAgICAgICAgd2lsbCBzdGFydCBhdCBuZXh0IHRyaWdnZXIgZXZlbnQgKG9uIHRoZSBzZWxlY3RlZCB0cmlnZ2VyIGVkZ2UpCiAgICogICAgICAgICAgIGZvbGxvd2luZyB0aGUgQURDIHN0YXJ0IGNvbnZlcnNpb24gY29tbWFuZC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nIG9uIGdyb3VwIGluamVjdGVkLAogICAqICAgICAgICAgd2l0aG91dCBjb252ZXJzaW9uIHN0b3AgY29tbWFuZCBvbiBnb2luZyBvbiBncm91cCBpbmplY3RlZCwKQEAgLTYxNTIsNyArNjE1Miw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU3RvcCBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbi4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KICAgKiAgICAgICAgIEFEQyBzdGF0ZToKICAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGVuYWJsZWQgd2l0aCBjb252ZXJzaW9uIG9uIGdvaW5nIG9uIGdyb3VwIGluamVjdGVkLAogICAqICAgICAgICAgd2l0aG91dCBBREMgZGlzYWJsZSBjb21tYW5kIG9uIGdvaW5nLgpAQCAtNjMzNiw3ICs2MzM2LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBHZXQgZmxhZyBBREMgcmVhZHkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBmbGFnIExMX0FEQ19GTEFHX0FEUkRZIGlzIHJhaXNlZCB3aGVuIHRoZSBBREMKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBmbGFnIExMX0FEQ19GTEFHX0FEUkRZIGlzIHJhaXNlZCB3aGVuIHRoZSBBREMKICAgKiAgICAgICAgIGlzIGVuYWJsZWQgYW5kIHdoZW4gY29udmVyc2lvbiBjbG9jayBpcyBhY3RpdmUuCiAgICogICAgICAgICAobm90IG9ubHkgY29yZSBjbG9jazogdGhpcyBBREMgaGFzIGEgZHVhbCBjbG9jayBkb21haW4pCiAgICogQHJtdG9sbCBJU1IgICAgICBBRFJEWSAgICAgICAgICBMTF9BRENfSXNBY3RpdmVGbGFnX0FEUkRZCkBAIC02NDYwLDcgKzY0NjAsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENsZWFyIGZsYWcgQURDIHJlYWR5LgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgZmxhZyBMTF9BRENfRkxBR19BRFJEWSBpcyByYWlzZWQgd2hlbiB0aGUgQURDCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgZmxhZyBMTF9BRENfRkxBR19BRFJEWSBpcyByYWlzZWQgd2hlbiB0aGUgQURDCiAgICogICAgICAgICBpcyBlbmFibGVkIGFuZCB3aGVuIGNvbnZlcnNpb24gY2xvY2sgaXMgYWN0aXZlLgogICAqICAgICAgICAgKG5vdCBvbmx5IGNvcmUgY2xvY2s6IHRoaXMgQURDIGhhcyBhIGR1YWwgY2xvY2sgZG9tYWluKQogICAqIEBybXRvbGwgSVNSICAgICAgQURSRFkgICAgICAgICAgTExfQURDX0NsZWFyRmxhZ19BRFJEWQpAQCAtNzU3MCw4ICs3NTcwLDggQEAKIHsKICAgdWludDMyX3QgVHJpZ2dlclNvdXJjZTsgICAgICAgICAgICAgICAvKiE8IFNldCBBREMgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlOiBpbnRlcm5hbCAoU1cgc3RhcnQpIG9yIGV4dGVybmFsIGZyb20gdGltZXIgb3IgZXh0ZXJuYWwgaW50ZXJydXB0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBBRENfTExfRUNfUkVHX1RSSUdHRVJfU09VUkNFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBPbiB0aGlzIFNUTTMyIHNlcmllLCBleHRlcm5hbCB0cmlnZ2VyIGlzIHNldCB3aXRoIHRyaWdnZXIgcG9sYXJpdHk6IHJpc2luZyBlZGdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25seSB0cmlnZ2VyIHBvbGFyaXR5IGF2YWlsYWJsZSBvbiB0aGlzIFNUTTMyIHNlcmllKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBleHRlcm5hbCB0cmlnZ2VyIGlzIHNldCB3aXRoIHRyaWdnZXIgcG9sYXJpdHk6IHJpc2luZyBlZGdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25seSB0cmlnZ2VyIHBvbGFyaXR5IGF2YWlsYWJsZSBvbiB0aGlzIFNUTTMyIHNlcmllcykuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfQURDX1JFR19TZXRUcmlnZ2VyU291cmNlKCkuICovCiAKQEAgLTc2MjQsOCArNzYyNCw4IEBACiB7CiAgIHVpbnQzMl90IFRyaWdnZXJTb3VyY2U7ICAgICAgICAgICAgICAgLyohPCBTZXQgQURDIGdyb3VwIGluamVjdGVkIGNvbnZlcnNpb24gdHJpZ2dlciBzb3VyY2U6IGludGVybmFsIChTVyBzdGFydCkgb3IgZXh0ZXJuYWwgZnJvbSB0aW1lciBvciBleHRlcm5hbCBpbnRlcnJ1cHQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEFEQ19MTF9FQ19JTkpfVFJJR0dFUl9TT1VSQ0UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIE9uIHRoaXMgU1RNMzIgc2VyaWUsIGV4dGVybmFsIHRyaWdnZXIgaXMgc2V0IHdpdGggdHJpZ2dlciBwb2xhcml0eTogcmlzaW5nIGVkZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbmx5IHRyaWdnZXIgcG9sYXJpdHkgYXZhaWxhYmxlIG9uIHRoaXMgU1RNMzIgc2VyaWUpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGV4dGVybmFsIHRyaWdnZXIgaXMgc2V0IHdpdGggdHJpZ2dlciBwb2xhcml0eTogcmlzaW5nIGVkZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbmx5IHRyaWdnZXIgcG9sYXJpdHkgYXZhaWxhYmxlIG9uIHRoaXMgU1RNMzIgc2VyaWVzKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9BRENfSU5KX1NldFRyaWdnZXJTb3VyY2UoKS4gKi8KIApAQCAtNzY2NSw5ICs3NjY1LDkgQEAKICAgKiBAewogICAqLwogI2RlZmluZSBMTF9BRENfRkxBR19TVFJUICAgICAgICAgICAgICAgICAgIEFEQ19TUl9TVFJUICAgICAgICAvKiE8IEFEQyBmbGFnIEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gc3RhcnQgKi8KLSNkZWZpbmUgTExfQURDX0ZMQUdfRU9TICAgICAgICAgICAgICAgICAgICBBRENfU1JfRU9DICAgICAgICAgLyohPCBBREMgZmxhZyBBREMgZ3JvdXAgcmVndWxhciBlbmQgb2Ygc2VxdWVuY2UgY29udmVyc2lvbnMgKE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIHJlZ3VsYXIgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gRmxhZyBub3RlZCBhcyAiRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkVPUyIgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpICovCisjZGVmaW5lIExMX0FEQ19GTEFHX0VPUyAgICAgICAgICAgICAgICAgICAgQURDX1NSX0VPQyAgICAgICAgIC8qITwgQURDIGZsYWcgQURDIGdyb3VwIHJlZ3VsYXIgZW5kIG9mIHNlcXVlbmNlIGNvbnZlcnNpb25zIChOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgcmVndWxhciBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiBGbGFnIG5vdGVkIGFzICJFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiRU9TIiBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykgKi8KICNkZWZpbmUgTExfQURDX0ZMQUdfSlNUUlQgICAgICAgICAgICAgICAgICBBRENfU1JfSlNUUlQgICAgICAgLyohPCBBREMgZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbiBzdGFydCAqLwotI2RlZmluZSBMTF9BRENfRkxBR19KRU9TICAgICAgICAgICAgICAgICAgIEFEQ19TUl9KRU9DICAgICAgICAvKiE8IEFEQyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCBlbmQgb2Ygc2VxdWVuY2UgY29udmVyc2lvbnMgKE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uIEZsYWcgbm90ZWQgYXMgIkpFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiSkVPUyIgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpICovCisjZGVmaW5lIExMX0FEQ19GTEFHX0pFT1MgICAgICAgICAgICAgICAgICAgQURDX1NSX0pFT0MgICAgICAgIC8qITwgQURDIGZsYWcgQURDIGdyb3VwIGluamVjdGVkIGVuZCBvZiBzZXF1ZW5jZSBjb252ZXJzaW9ucyAoTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uIEZsYWcgbm90ZWQgYXMgIkpFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiSkVPUyIgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpICovCiAjZGVmaW5lIExMX0FEQ19GTEFHX0FXRDEgICAgICAgICAgICAgICAgICAgQURDX1NSX0FXRCAgICAgICAgIC8qITwgQURDIGZsYWcgQURDIGFuYWxvZyB3YXRjaGRvZyAxICovCiAvKioKICAgKiBAfQpAQCAtNzY3Nyw4ICs3Njc3LDggQEAKICAgKiBAYnJpZWYgICAgSVQgZGVmaW5lcyB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIExMX0FEQ19SZWFkUmVnIGFuZCAgTExfQURDX1dyaXRlUmVnIGZ1bmN0aW9ucwogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0FEQ19JVF9FT1MgICAgICAgICAgICAgICAgICAgICAgQURDX0NSMV9FT0NJRSAgICAgIC8qITwgQURDIGludGVycnVwdGlvbiBBREMgZ3JvdXAgcmVndWxhciBlbmQgb2Ygc2VxdWVuY2UgY29udmVyc2lvbnMgKE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIHJlZ3VsYXIgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gRmxhZyBub3RlZCBhcyAiRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkVPUyIgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpICovCi0jZGVmaW5lIExMX0FEQ19JVF9KRU9TICAgICAgICAgICAgICAgICAgICAgQURDX0NSMV9KRU9DSUUgICAgIC8qITwgQURDIGludGVycnVwdGlvbiBBREMgZ3JvdXAgaW5qZWN0ZWQgZW5kIG9mIHNlcXVlbmNlIGNvbnZlcnNpb25zIChOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKSAqLworI2RlZmluZSBMTF9BRENfSVRfRU9TICAgICAgICAgICAgICAgICAgICAgIEFEQ19DUjFfRU9DSUUgICAgICAvKiE8IEFEQyBpbnRlcnJ1cHRpb24gQURDIGdyb3VwIHJlZ3VsYXIgZW5kIG9mIHNlcXVlbmNlIGNvbnZlcnNpb25zIChOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgcmVndWxhciBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiBGbGFnIG5vdGVkIGFzICJFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiRU9TIiBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykgKi8KKyNkZWZpbmUgTExfQURDX0lUX0pFT1MgICAgICAgICAgICAgICAgICAgICBBRENfQ1IxX0pFT0NJRSAgICAgLyohPCBBREMgaW50ZXJydXB0aW9uIEFEQyBncm91cCBpbmplY3RlZCBlbmQgb2Ygc2VxdWVuY2UgY29udmVyc2lvbnMgKE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKSAqLwogI2RlZmluZSBMTF9BRENfSVRfQVdEMSAgICAgICAgICAgICAgICAgICAgIEFEQ19DUjFfQVdESUUgICAgICAvKiE8IEFEQyBpbnRlcnJ1cHRpb24gQURDIGFuYWxvZyB3YXRjaGRvZyAxICovCiAvKioKICAgKiBAfQpAQCAtNzcwMyw3ICs3NzAzLDcgQEAKIC8qICAgICAgIElmIHRoZXkgYXJlIG5vdCBsaXN0ZWQgYmVsb3csIHRoZXkgZG8gbm90IHJlcXVpcmUgYW55IHNwZWNpZmljICAgICAgICovCiAvKiAgICAgICBwYXRoIGVuYWJsZS4gSW4gdGhpcyBjYXNlLCBBY2Nlc3MgdG8gbWVhc3VyZW1lbnQgcGF0aCBpcyBkb25lICAgICAgICAqLwogLyogICAgICAgb25seSBieSBzZWxlY3RpbmcgdGhlIGNvcnJlc3BvbmRpbmcgQURDIGludGVybmFsIGNoYW5uZWwuICAgICAgICAgICAgKi8KLSNkZWZpbmUgTExfQURDX1BBVEhfSU5URVJOQUxfTk9ORSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKS8qITwgQURDIG1lYXN1cmVtZW50IHBhdGhlcyBhbGwgZGlzYWJsZWQgKi8KKyNkZWZpbmUgTExfQURDX1BBVEhfSU5URVJOQUxfTk9ORSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKS8qITwgQURDIG1lYXN1cmVtZW50IHBhdGhzIGFsbCBkaXNhYmxlZCAqLwogI2RlZmluZSBMTF9BRENfUEFUSF9JTlRFUk5BTF9WUkVGSU5UICAgICAgIChBRENfQ1IyX1RTVlJFRkUpICAgICAgLyohPCBBREMgbWVhc3VyZW1lbnQgcGF0aCB0byBpbnRlcm5hbCBjaGFubmVsIFZyZWZJbnQgKi8KICNkZWZpbmUgTExfQURDX1BBVEhfSU5URVJOQUxfVEVNUFNFTlNPUiAgICAoQURDX0NSMl9UU1ZSRUZFKSAgICAgIC8qITwgQURDIG1lYXN1cmVtZW50IHBhdGggdG8gaW50ZXJuYWwgY2hhbm5lbCB0ZW1wZXJhdHVyZSBzZW5zb3IgKi8KIC8qKgpAQCAtNzcyMiw3ICs3NzIyLDcgQEAKICAgKiBAewogICAqLwogI2RlZmluZSBMTF9BRENfREFUQV9BTElHTl9SSUdIVCAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpLyohPCBBREMgY29udmVyc2lvbiBkYXRhIGFsaWdubWVudDogcmlnaHQgYWxpZ25lZCAoYWxpZ25tZW50IG9uIGRhdGEgcmVnaXN0ZXIgTFNCIGJpdCAwKSovCi0jZGVmaW5lIExMX0FEQ19EQVRBX0FMSUdOX0xFRlQgICAgICAgICAgICAgKEFEQ19DUjJfQUxJR04pICAgICAgICAvKiE8IEFEQyBjb252ZXJzaW9uIGRhdGEgYWxpZ25tZW50OiBsZWZ0IGFsaWduZWQgKGFsaWdtZW50IG9uIGRhdGEgcmVnaXN0ZXIgTVNCIGJpdCAxNSkqLworI2RlZmluZSBMTF9BRENfREFUQV9BTElHTl9MRUZUICAgICAgICAgICAgIChBRENfQ1IyX0FMSUdOKSAgICAgICAgLyohPCBBREMgY29udmVyc2lvbiBkYXRhIGFsaWdubWVudDogbGVmdCBhbGlnbmVkIChhbGlnbm1lbnQgb24gZGF0YSByZWdpc3RlciBNU0IgYml0IDE1KSovCiAvKioKICAgKiBAfQogICAqLwpAQCAtODA1OCw3ICs4MDU4LDcgQEAKIC8qICAgICAgIGNvbmZpZ3VyYXRpb24gKHN5c3RlbSBjbG9jayB2ZXJzdXMgQURDIGNsb2NrKSwgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICBhbmQgdGhlcmVmb3JlIG11c3QgYmUgZGVmaW5lZCBpbiB1c2VyIGFwcGxpY2F0aW9uLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgSW5kaWNhdGlvbnMgZm9yIGVzdGltYXRpb24gb2YgQURDIHRpbWVvdXQgZGVsYXlzLCBmb3IgdGhpcyAgICAgICAgICAgKi8KLS8qICAgICAgIFNUTTMyIHNlcmllOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICBTVE0zMiBzZXJpZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgIC0gQURDIGVuYWJsZSB0aW1lOiBtYXhpbXVtIGRlbGF5IGlzIDF1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgIChyZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0LCBwYXJhbWV0ZXIgInRTVEFCIikgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgLSBBREMgY29udmVyc2lvbiB0aW1lOiBkdXJhdGlvbiBkZXBlbmRpbmcgb24gQURDIGNsb2NrIGFuZCBBREMgICAgICAgKi8KQEAgLTgwNzIsNyArODA3Miw3IEBACiAjZGVmaW5lIExMX0FEQ19ERUxBWV9URU1QU0VOU09SX1NUQUJfVVMgICAgKCh1aW50MzJfdCkgIDEwVSkgIC8qITwgRGVsYXkgZm9yIGludGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlIHN0YWJpbGl6YXRpb24gdGltZSAqLwogCiAvKiBEZWxheSByZXF1aXJlZCBiZXR3ZWVuIEFEQyBkaXNhYmxlIGFuZCBBREMgY2FsaWJyYXRpb24gc3RhcnQuICAgICAgICAgICAgICAqLwotLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgYmVmb3JlIHN0YXJ0aW5nIGEgY2FsaWJyYXRpb24sICAgICAgICAgICAgICAgICAgKi8KKy8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBiZWZvcmUgc3RhcnRpbmcgYSBjYWxpYnJhdGlvbiwgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgQURDIG11c3QgYmUgZGlzYWJsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgIEEgbWluaW11bSBudW1iZXIgb2YgQURDIGNsb2NrIGN5Y2xlcyBhcmUgcmVxdWlyZWQgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICBiZXR3ZWVuIEFEQyBkaXNhYmxlIHN0YXRlIGFuZCBjYWxpYnJhdGlvbiBzdGFydC4gICAgICAgICAgICAgICAgICAgICAqLwpAQCAtODQ3OSw3ICs4NDc5LDcgQEAKICAgKiBAcGFyYW0gIF9fQVdEX1RIUkVTSE9MRF9fIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwMDAgYW5kIE1heF9EYXRhPTB4RkZGCiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAwIGFuZCBNYXhfRGF0YT0weEZGRgogICAqLwotLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgQURDIGlzIGZpeGVkIHRvIHJlc29sdXRpb24gMTIgYml0cy4gICAgICAgICAgICAgKi8KKy8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBBREMgaXMgZml4ZWQgdG8gcmVzb2x1dGlvbiAxMiBiaXRzLiAgICAgICAgICAgICAqLwogLyogICAgICAgVGhpcyBtYWNybyBoYXMgYmVlbiBrZXB0IGFueXdheSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyICAgICAgICAgKi8KIC8qICAgICAgIFNUTTMyIGZhbWlsaWVzIGZlYXR1cmluZyBkaWZmZXJlbnQgQURDIHJlc29sdXRpb25zLiAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTExfQURDX0FOQUxPR1dEX1NFVF9USFJFU0hPTERfUkVTT0xVVElPTihfX0FEQ19SRVNPTFVUSU9OX18sIF9fQVdEX1RIUkVTSE9MRF9fKSBcCkBAIC04NTAxLDcgKzg1MDEsNyBAQAogICAqIEBwYXJhbSAgX19BV0RfVEhSRVNIT0xEXzEyX0JJVFNfXyBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAwIGFuZCBNYXhfRGF0YT0weEZGRgogICAqIEByZXR2YWwgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwMCBhbmQgTWF4X0RhdGE9MHhGRkYKICAgKi8KLS8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWUsIEFEQyBpcyBmaXhlZCB0byByZXNvbHV0aW9uIDEyIGJpdHMuICAgICAgICAgICAgICovCisvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgQURDIGlzIGZpeGVkIHRvIHJlc29sdXRpb24gMTIgYml0cy4gICAgICAgICAgICAgKi8KIC8qICAgICAgIFRoaXMgbWFjcm8gaGFzIGJlZW4ga2VwdCBhbnl3YXkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciAgICAgICAgICovCiAvKiAgICAgICBTVE0zMiBmYW1pbGllcyBmZWF0dXJpbmcgZGlmZmVyZW50IEFEQyByZXNvbHV0aW9ucy4gICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfX0xMX0FEQ19BTkFMT0dXRF9HRVRfVEhSRVNIT0xEX1JFU09MVVRJT04oX19BRENfUkVTT0xVVElPTl9fLCBfX0FXRF9USFJFU0hPTERfMTJfQklUU19fKSBcCkBAIC04NjE1LDcgKzg2MTUsNyBAQAogICAqICAgICAgICAgY29ubmVjdGVkIHRvIHBpbiBWcmVmKy4KICAgKiAgICAgICAgIE9uIGRldmljZXMgd2l0aCBzbWFsbCBwYWNrYWdlLCB0aGUgcGluIFZyZWYrIGlzIG5vdCBwcmVzZW50CiAgICogICAgICAgICBhbmQgaW50ZXJuYWxseSBib25kZWQgdG8gcGluIFZkZGEuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBjYWxpYnJhdGlvbiBkYXRhIG9mIGludGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgY2FsaWJyYXRpb24gZGF0YSBvZiBpbnRlcm5hbCB2b2x0YWdlIHJlZmVyZW5jZQogICAqICAgICAgICAgVnJlZkludCBjb3JyZXNwb25kcyB0byBhIHJlc29sdXRpb24gb2YgMTIgYml0cywKICAgKiAgICAgICAgIHRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIEFEQyByZXNvbHV0aW9uIHRvIGNvbnZlcnQgdm9sdGFnZSBvZgogICAqICAgICAgICAgaW50ZXJuYWwgdm9sdGFnZSByZWZlcmVuY2UgVnJlZkludC4KQEAgLTg2NjMsNyArODY2Myw3IEBACiAgICogQG5vdGUgICBBbmFsb2cgcmVmZXJlbmNlIHZvbHRhZ2UgKFZyZWYrKSBtdXN0IGJlIGVpdGhlciBrbm93biBmcm9tCiAgICogICAgICAgICB1c2VyIGJvYXJkIGVudmlyb25tZW50IG9yIGNhbiBiZSBjYWxjdWxhdGVkIHVzaW5nIEFEQyBtZWFzdXJlbWVudAogICAqICAgICAgICAgYW5kIEFEQyBoZWxwZXIgbWFjcm8gQHJlZiBfX0xMX0FEQ19DQUxDX1ZSRUZBTkFMT0dfVk9MVEFHRSgpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgY2FsaWJyYXRpb24gZGF0YSBvZiB0ZW1wZXJhdHVyZSBzZW5zb3IKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBjYWxpYnJhdGlvbiBkYXRhIG9mIHRlbXBlcmF0dXJlIHNlbnNvcgogICAqICAgICAgICAgY29ycmVzcG9uZHMgdG8gYSByZXNvbHV0aW9uIG9mIDEyIGJpdHMsCiAgICogICAgICAgICB0aGlzIGlzIHRoZSByZWNvbW1lbmRlZCBBREMgcmVzb2x1dGlvbiB0byBjb252ZXJ0IHZvbHRhZ2Ugb2YKICAgKiAgICAgICAgIHRlbXBlcmF0dXJlIHNlbnNvci4KQEAgLTg5NjUsOCArODk2NSw4IEBACiAvKioKICAgKiBAYnJpZWYgIFNldCBBREMgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlOgogICAqICAgICAgICAgaW50ZXJuYWwgKFNXIHN0YXJ0KSBvciBleHRlcm5hbCBmcm9tIHRpbWVyIG9yIGV4dGVybmFsIGludGVycnVwdC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIGV4dGVybmFsIHRyaWdnZXIgaXMgc2V0IHdpdGggdHJpZ2dlciBwb2xhcml0eToKLSAgKiAgICAgICAgIHJpc2luZyBlZGdlIChvbmx5IHRyaWdnZXIgcG9sYXJpdHkgYXZhaWxhYmxlIG9uIHRoaXMgU1RNMzIgc2VyaWUpLgorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGV4dGVybmFsIHRyaWdnZXIgaXMgc2V0IHdpdGggdHJpZ2dlciBwb2xhcml0eToKKyAgKiAgICAgICAgIHJpc2luZyBlZGdlIChvbmx5IHRyaWdnZXIgcG9sYXJpdHkgYXZhaWxhYmxlIG9uIHRoaXMgU1RNMzIgc2VyaWVzKS4KICAgKiBAbm90ZSAgIEF2YWlsYWJpbGl0eSBvZiBwYXJhbWV0ZXJzIG9mIHRyaWdnZXIgc291cmNlcyBmcm9tIHRpbWVyIAogICAqICAgICAgICAgZGVwZW5kcyBvbiB0aW1lcnMgYXZhaWxhYmlsaXR5IG9uIHRoZSBzZWxlY3RlZCBkZXZpY2UuCiAgICogQHJtdG9sbCBDUjIgICAgICBFWFRTRUwgICAgICAgICBMTF9BRENfUkVHX1NldFRyaWdnZXJTb3VyY2UKQEAgLTg5ODQsNyArODk4NCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfUkVHX1NldFRyaWdnZXJTb3VyY2UoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IFRyaWdnZXJTb3VyY2UpCiB7Ci0vKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllLCBBREMgZ3JvdXAgcmVndWxhciBleHRlcm5hbCB0cmlnZ2VyIGVkZ2UgICAgICAgICAqLworLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyBncm91cCByZWd1bGFyIGV4dGVybmFsIHRyaWdnZXIgZWRnZSAgICAgICAgICovCiAvKiAgICAgICBpcyB1c2VkIHRvIHBlcmZvcm0gYSBBREMgY29udmVyc2lvbiBzdGFydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzZXQgZXh0ZXJuYWwgdHJpZ2dlciBlZGdlLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgIFRoaXMgZmVhdHVyZSBpcyBzZXQgdXNpbmcgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC05MDY0LDcgKzkwNjQsNyBAQAogICAqICAgICAgICAgICAgIGhpZ2hlc3QgY2hhbm5lbCBudW1iZXIpLgogICAqICAgICAgICAgICBTZXF1ZW5jZXIgcmFua3MgYXJlIHNlbGVjdGVkIHVzaW5nCiAgICogICAgICAgICAgIGZ1bmN0aW9uICJMTF9BRENfUkVHX1NldFNlcXVlbmNlckNoYW5uZWxzKCkiLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgZ3JvdXAgcmVndWxhciBzZXF1ZW5jZXIgY29uZmlndXJhdGlvbgorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGdyb3VwIHJlZ3VsYXIgc2VxdWVuY2VyIGNvbmZpZ3VyYXRpb24KICAgKiAgICAgICAgIGlzIGNvbmRpdGlvbmVkIHRvIEFEQyBpbnN0YW5jZSBzZXF1ZW5jZXIgbW9kZS4KICAgKiAgICAgICAgIElmIEFEQyBpbnN0YW5jZSBzZXF1ZW5jZXIgbW9kZSBpcyBkaXNhYmxlZCwgc2VxdWVuY2VycyBvZgogICAqICAgICAgICAgYWxsIGdyb3VwcyAoZ3JvdXAgcmVndWxhciwgZ3JvdXAgaW5qZWN0ZWQpIGNhbiBiZSBjb25maWd1cmVkCkBAIC05MTI1LDcgKzkxMjUsNyBAQAogICAqICAgICAgICAgICAgIGhpZ2hlc3QgY2hhbm5lbCBudW1iZXIpLgogICAqICAgICAgICAgICBTZXF1ZW5jZXIgcmFua3MgYXJlIHNlbGVjdGVkIHVzaW5nCiAgICogICAgICAgICAgIGZ1bmN0aW9uICJMTF9BRENfUkVHX1NldFNlcXVlbmNlckNoYW5uZWxzKCkiLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgZ3JvdXAgcmVndWxhciBzZXF1ZW5jZXIgY29uZmlndXJhdGlvbgorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGdyb3VwIHJlZ3VsYXIgc2VxdWVuY2VyIGNvbmZpZ3VyYXRpb24KICAgKiAgICAgICAgIGlzIGNvbmRpdGlvbmVkIHRvIEFEQyBpbnN0YW5jZSBzZXF1ZW5jZXIgbW9kZS4KICAgKiAgICAgICAgIElmIEFEQyBpbnN0YW5jZSBzZXF1ZW5jZXIgbW9kZSBpcyBkaXNhYmxlZCwgc2VxdWVuY2VycyBvZgogICAqICAgICAgICAgYWxsIGdyb3VwcyAoZ3JvdXAgcmVndWxhciwgZ3JvdXAgaW5qZWN0ZWQpIGNhbiBiZSBjb25maWd1cmVkCkBAIC05MjE1LDEzICs5MjE1LDEzIEBACiAgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGNvbmZpZ3VyYXRpb24gb2Y6CiAgICogICAgICAgICAtIENoYW5uZWxzIG9yZGVyaW5nIGludG8gZWFjaCByYW5rIG9mIHNjYW4gc2VxdWVuY2U6CiAgICogICAgICAgICAgIHdoYXRldmVyIGNoYW5uZWwgY2FuIGJlIHBsYWNlZCBpbnRvIHdoYXRldmVyIHJhbmsuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBBREMgZ3JvdXAgcmVndWxhciBzZXF1ZW5jZXIgaXMKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBBREMgZ3JvdXAgcmVndWxhciBzZXF1ZW5jZXIgaXMKICAgKiAgICAgICAgIGZ1bGx5IGNvbmZpZ3VyYWJsZTogc2VxdWVuY2VyIGxlbmd0aCBhbmQgZWFjaCByYW5rCiAgICogICAgICAgICBhZmZlY3RhdGlvbiB0byBhIGNoYW5uZWwgYXJlIGNvbmZpZ3VyYWJsZS4KICAgKiAgICAgICAgIFJlZmVyIHRvIGRlc2NyaXB0aW9uIG9mIGZ1bmN0aW9uIEByZWYgTExfQURDX1JFR19TZXRTZXF1ZW5jZXJMZW5ndGgoKS4KICAgKiBAbm90ZSAgIERlcGVuZGluZyBvbiBkZXZpY2VzIGFuZCBwYWNrYWdlcywgc29tZSBjaGFubmVscyBtYXkgbm90IGJlIGF2YWlsYWJsZS4KICAgKiAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHRvIG1lYXN1cmUgaW50ZXJuYWwgY2hhbm5lbHMgKFZyZWZJbnQsCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgdG8gbWVhc3VyZSBpbnRlcm5hbCBjaGFubmVscyAoVnJlZkludCwKICAgKiAgICAgICAgIFRlbXBTZW5zb3IsIC4uLiksIG1lYXN1cmVtZW50IHBhdGhzIHRvIGludGVybmFsIGNoYW5uZWxzIG11c3QgYmUKICAgKiAgICAgICAgIGVuYWJsZWQgc2VwYXJhdGVseS4KICAgKiAgICAgICAgIFRoaXMgY2FuIGJlIGRvbmUgdXNpbmcgZnVuY3Rpb24gQHJlZiBMTF9BRENfU2V0Q29tbW9uUGF0aEludGVybmFsQ2goKS4KQEAgLTkzMDAsNyArOTMwMCw3IEBACiAvKioKICAgKiBAYnJpZWYgIEdldCBBREMgZ3JvdXAgcmVndWxhciBzZXF1ZW5jZTogY2hhbm5lbCBvbiB0aGUgc2VsZWN0ZWQKICAgKiAgICAgICAgIHNjYW4gc2VxdWVuY2UgcmFuay4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBpcworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBpcwogICAqICAgICAgICAgZnVsbHkgY29uZmlndXJhYmxlOiBzZXF1ZW5jZXIgbGVuZ3RoIGFuZCBlYWNoIHJhbmsKICAgKiAgICAgICAgIGFmZmVjdGF0aW9uIHRvIGEgY2hhbm5lbCBhcmUgY29uZmlndXJhYmxlLgogICAqICAgICAgICAgUmVmZXIgdG8gZGVzY3JpcHRpb24gb2YgZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1NldFNlcXVlbmNlckxlbmd0aCgpLgpAQCAtOTQ5OSw4ICs5NDk5LDggQEAKIC8qKgogICAqIEBicmllZiAgU2V0IEFEQyBncm91cCBpbmplY3RlZCBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlOgogICAqICAgICAgICAgaW50ZXJuYWwgKFNXIHN0YXJ0KSBvciBleHRlcm5hbCBmcm9tIHRpbWVyIG9yIGV4dGVybmFsIGludGVycnVwdC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIGV4dGVybmFsIHRyaWdnZXIgaXMgc2V0IHdpdGggdHJpZ2dlciBwb2xhcml0eToKLSAgKiAgICAgICAgIHJpc2luZyBlZGdlIChvbmx5IHRyaWdnZXIgcG9sYXJpdHkgYXZhaWxhYmxlIG9uIHRoaXMgU1RNMzIgc2VyaWUpLgorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGV4dGVybmFsIHRyaWdnZXIgaXMgc2V0IHdpdGggdHJpZ2dlciBwb2xhcml0eToKKyAgKiAgICAgICAgIHJpc2luZyBlZGdlIChvbmx5IHRyaWdnZXIgcG9sYXJpdHkgYXZhaWxhYmxlIG9uIHRoaXMgU1RNMzIgc2VyaWVzKS4KICAgKiBAbm90ZSAgIEF2YWlsYWJpbGl0eSBvZiBwYXJhbWV0ZXJzIG9mIHRyaWdnZXIgc291cmNlcyBmcm9tIHRpbWVyIAogICAqICAgICAgICAgZGVwZW5kcyBvbiB0aW1lcnMgYXZhaWxhYmlsaXR5IG9uIHRoZSBzZWxlY3RlZCBkZXZpY2UuCiAgICogQHJtdG9sbCBDUjIgICAgICBKRVhUU0VMICAgICAgICBMTF9BRENfSU5KX1NldFRyaWdnZXJTb3VyY2UKQEAgLTk1MTgsNyArOTUxOCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfSU5KX1NldFRyaWdnZXJTb3VyY2UoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IFRyaWdnZXJTb3VyY2UpCiB7Ci0vKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllLCBBREMgZ3JvdXAgaW5qZWN0ZWQgZXh0ZXJuYWwgdHJpZ2dlciBlZGdlICAgICAgICAqLworLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyBncm91cCBpbmplY3RlZCBleHRlcm5hbCB0cmlnZ2VyIGVkZ2UgICAgICAgICovCiAvKiAgICAgICBpcyB1c2VkIHRvIHBlcmZvcm0gYSBBREMgY29udmVyc2lvbiBzdGFydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzZXQgZXh0ZXJuYWwgdHJpZ2dlciBlZGdlLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgIFRoaXMgZmVhdHVyZSBpcyBzZXQgdXNpbmcgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC05NTc2LDcgKzk1NzYsNyBAQAogICAqICAgICAgICAgLSBTZXF1ZW5jZSBsZW5ndGg6IE51bWJlciBvZiByYW5rcyBpbiB0aGUgc2NhbiBzZXF1ZW5jZS4KICAgKiAgICAgICAgIC0gU2VxdWVuY2UgZGlyZWN0aW9uOiBVbmxlc3Mgc3BlY2lmaWVkIGluIHBhcmFtZXRlcnMsIHNlcXVlbmNlcgogICAqICAgICAgICAgICBzY2FuIGRpcmVjdGlvbiBpcyBmb3J3YXJkIChmcm9tIHJhbmsgMSB0byByYW5rIG4pLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgZ3JvdXAgaW5qZWN0ZWQgc2VxdWVuY2VyIGNvbmZpZ3VyYXRpb24KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBncm91cCBpbmplY3RlZCBzZXF1ZW5jZXIgY29uZmlndXJhdGlvbgogICAqICAgICAgICAgaXMgY29uZGl0aW9uZWQgdG8gQURDIGluc3RhbmNlIHNlcXVlbmNlciBtb2RlLgogICAqICAgICAgICAgSWYgQURDIGluc3RhbmNlIHNlcXVlbmNlciBtb2RlIGlzIGRpc2FibGVkLCBzZXF1ZW5jZXJzIG9mCiAgICogICAgICAgICBhbGwgZ3JvdXBzIChncm91cCByZWd1bGFyLCBncm91cCBpbmplY3RlZCkgY2FuIGJlIGNvbmZpZ3VyZWQKQEAgLTk2MDQsNyArOTYwNCw3IEBACiAgICogICAgICAgICAtIFNlcXVlbmNlIGxlbmd0aDogTnVtYmVyIG9mIHJhbmtzIGluIHRoZSBzY2FuIHNlcXVlbmNlLgogICAqICAgICAgICAgLSBTZXF1ZW5jZSBkaXJlY3Rpb246IFVubGVzcyBzcGVjaWZpZWQgaW4gcGFyYW1ldGVycywgc2VxdWVuY2VyCiAgICogICAgICAgICAgIHNjYW4gZGlyZWN0aW9uIGlzIGZvcndhcmQgKGZyb20gcmFuayAxIHRvIHJhbmsgbikuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBncm91cCBpbmplY3RlZCBzZXF1ZW5jZXIgY29uZmlndXJhdGlvbgorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGdyb3VwIGluamVjdGVkIHNlcXVlbmNlciBjb25maWd1cmF0aW9uCiAgICogICAgICAgICBpcyBjb25kaXRpb25lZCB0byBBREMgaW5zdGFuY2Ugc2VxdWVuY2VyIG1vZGUuCiAgICogICAgICAgICBJZiBBREMgaW5zdGFuY2Ugc2VxdWVuY2VyIG1vZGUgaXMgZGlzYWJsZWQsIHNlcXVlbmNlcnMgb2YKICAgKiAgICAgICAgIGFsbCBncm91cHMgKGdyb3VwIHJlZ3VsYXIsIGdyb3VwIGluamVjdGVkKSBjYW4gYmUgY29uZmlndXJlZApAQCAtOTY2Myw3ICs5NjYzLDcgQEAKICAgKiAgICAgICAgIHNlcXVlbmNlIHJhbmsuCiAgICogQG5vdGUgICBEZXBlbmRpbmcgb24gZGV2aWNlcyBhbmQgcGFja2FnZXMsIHNvbWUgY2hhbm5lbHMgbWF5IG5vdCBiZSBhdmFpbGFibGUuCiAgICogICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0byBtZWFzdXJlIGludGVybmFsIGNoYW5uZWxzIChWcmVmSW50LAorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHRvIG1lYXN1cmUgaW50ZXJuYWwgY2hhbm5lbHMgKFZyZWZJbnQsCiAgICogICAgICAgICBUZW1wU2Vuc29yLCAuLi4pLCBtZWFzdXJlbWVudCBwYXRocyB0byBpbnRlcm5hbCBjaGFubmVscyBtdXN0IGJlCiAgICogICAgICAgICBlbmFibGVkIHNlcGFyYXRlbHkuCiAgICogICAgICAgICBUaGlzIGNhbiBiZSBkb25lIHVzaW5nIGZ1bmN0aW9uIEByZWYgTExfQURDX1NldENvbW1vblBhdGhJbnRlcm5hbENoKCkuCkBAIC05OTAyLDcgKzk5MDIsNyBAQAogICAqICAgICAgICAgVFNfdGVtcCwgLi4uKS4KICAgKiBAbm90ZSAgIENvbnZlcnNpb24gdGltZSBpcyB0aGUgYWRkaXRpb24gb2Ygc2FtcGxpbmcgdGltZSBhbmQgcHJvY2Vzc2luZyB0aW1lLgogICAqICAgICAgICAgUmVmZXIgdG8gcmVmZXJlbmNlIG1hbnVhbCBmb3IgQURDIHByb2Nlc3NpbmcgdGltZSBvZgotICAqICAgICAgICAgdGhpcyBTVE0zMiBzZXJpZS4KKyAgKiAgICAgICAgIHRoaXMgU1RNMzIgc2VyaWVzLgogICAqIEBub3RlICAgSW4gY2FzZSBvZiBBREMgY29udmVyc2lvbiBvZiBpbnRlcm5hbCBjaGFubmVsIChWcmVmSW50LAogICAqICAgICAgICAgdGVtcGVyYXR1cmUgc2Vuc29yLCAuLi4pLCBhIHNhbXBsaW5nIHRpbWUgbWluaW11bSB2YWx1ZQogICAqICAgICAgICAgaXMgcmVxdWlyZWQuCkBAIC05OTgwLDcgKzk5ODAsNyBAQAogICAqICAgICAgICAgb2YgY2hhbm5lbCBtYXBwZWQgb24gQURDIGdyb3VwIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCiAgICogQG5vdGUgICBDb252ZXJzaW9uIHRpbWUgaXMgdGhlIGFkZGl0aW9uIG9mIHNhbXBsaW5nIHRpbWUgYW5kIHByb2Nlc3NpbmcgdGltZS4KICAgKiAgICAgICAgIFJlZmVyIHRvIHJlZmVyZW5jZSBtYW51YWwgZm9yIEFEQyBwcm9jZXNzaW5nIHRpbWUgb2YKLSAgKiAgICAgICAgIHRoaXMgU1RNMzIgc2VyaWUuCisgICogICAgICAgICB0aGlzIFNUTTMyIHNlcmllcy4KICAgKiBAcm10b2xsIFNNUFIxICAgIFNNUDE3ICAgICAgICAgIExMX0FEQ19HZXRDaGFubmVsU2FtcGxpbmdUaW1lXG4KICAgKiAgICAgICAgIFNNUFIxICAgIFNNUDE2ICAgICAgICAgIExMX0FEQ19HZXRDaGFubmVsU2FtcGxpbmdUaW1lXG4KICAgKiAgICAgICAgIFNNUFIxICAgIFNNUDE1ICAgICAgICAgIExMX0FEQ19HZXRDaGFubmVsU2FtcGxpbmdUaW1lXG4KQEAgLTEwMDYwLDcgKzEwMDYwLDcgQEAKICAgKiBAbm90ZSAgIEluIGNhc2Ugb2YgbmVlZCB0byBkZWZpbmUgYSBzaW5nbGUgY2hhbm5lbCB0byBtb25pdG9yCiAgICogICAgICAgICB3aXRoIGFuYWxvZyB3YXRjaGRvZyBmcm9tIHNlcXVlbmNlciBjaGFubmVsIGRlZmluaXRpb24sCiAgICogICAgICAgICB1c2UgaGVscGVyIG1hY3JvIEByZWYgX19MTF9BRENfQU5BTE9HV0RfQ0hBTk5FTF9HUk9VUCgpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgb25seSAxIGtpbmQgb2YgYW5hbG9nIHdhdGNoZG9nCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgb25seSAxIGtpbmQgb2YgYW5hbG9nIHdhdGNoZG9nCiAgICogICAgICAgICBpbnN0YW5jZToKICAgKiAgICAgICAgIC0gQVdEIHN0YW5kYXJkIChpbnN0YW5jZSBBV0QxKToKICAgKiAgICAgICAgICAgLSBjaGFubmVscyBtb25pdG9yZWQ6IGNhbiBtb25pdG9yIDEgY2hhbm5lbCBvciBhbGwgY2hhbm5lbHMuCkBAIC0xMDE2Miw3ICsxMDE2Miw3IEBACiAgICogICAgICAgICAgIEByZWYgX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKCkuCiAgICogICAgICAgICAgIEFwcGxpY2FibGUgb25seSB3aGVuIHRoZSBhbmFsb2cgd2F0Y2hkb2cgaXMgc2V0IHRvIG1vbml0b3IKICAgKiAgICAgICAgICAgb25lIGNoYW5uZWwuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBvbmx5IDEga2luZCBvZiBhbmFsb2cgd2F0Y2hkb2cKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBvbmx5IDEga2luZCBvZiBhbmFsb2cgd2F0Y2hkb2cKICAgKiAgICAgICAgIGluc3RhbmNlOgogICAqICAgICAgICAgLSBBV0Qgc3RhbmRhcmQgKGluc3RhbmNlIEFXRDEpOgogICAqICAgICAgICAgICAtIGNoYW5uZWxzIG1vbml0b3JlZDogY2FuIG1vbml0b3IgMSBjaGFubmVsIG9yIGFsbCBjaGFubmVscy4KQEAgLTEwMjQxLDcgKzEwMjQxLDcgQEAKIC8qKgogICAqIEBicmllZiAgU2V0IEFEQyBhbmFsb2cgd2F0Y2hkb2cgdGhyZXNob2xkIHZhbHVlIG9mIHRocmVzaG9sZAogICAqICAgICAgICAgaGlnaCBvciBsb3cuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBvbmx5IDEga2luZCBvZiBhbmFsb2cgd2F0Y2hkb2cKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBvbmx5IDEga2luZCBvZiBhbmFsb2cgd2F0Y2hkb2cKICAgKiAgICAgICAgIGluc3RhbmNlOgogICAqICAgICAgICAgLSBBV0Qgc3RhbmRhcmQgKGluc3RhbmNlIEFXRDEpOgogICAqICAgICAgICAgICAtIGNoYW5uZWxzIG1vbml0b3JlZDogY2FuIG1vbml0b3IgMSBjaGFubmVsIG9yIGFsbCBjaGFubmVscy4KQEAgLTEwMjk3LDcgKzEwMjk3LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdGhlIHNlbGVjdGVkIEFEQyBpbnN0YW5jZS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIGFmdGVyIEFEQyBlbmFibGUsIGEgZGVsYXkgZm9yIAorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGFmdGVyIEFEQyBlbmFibGUsIGEgZGVsYXkgZm9yIAogICAqICAgICAgICAgQURDIGludGVybmFsIGFuYWxvZyBzdGFiaWxpemF0aW9uIGlzIHJlcXVpcmVkIGJlZm9yZSBwZXJmb3JtaW5nIGEKICAgKiAgICAgICAgIEFEQyBjb252ZXJzaW9uIHN0YXJ0LgogICAqICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCwgcGFyYW1ldGVyIHRTVEFCLgpAQCAtMTAzMzUsMTIgKzEwMzM1LDEyIEBACiAvKioKICAgKiBAYnJpZWYgIFN0YXJ0IEFEQyBjYWxpYnJhdGlvbiBpbiB0aGUgbW9kZSBzaW5nbGUtZW5kZWQKICAgKiAgICAgICAgIG9yIGRpZmZlcmVudGlhbCAoZm9yIGRldmljZXMgd2l0aCBkaWZmZXJlbnRpYWwgbW9kZSBhdmFpbGFibGUpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgYmVmb3JlIHN0YXJ0aW5nIGEgY2FsaWJyYXRpb24sCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgYmVmb3JlIHN0YXJ0aW5nIGEgY2FsaWJyYXRpb24sCiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZC4KICAgKiAgICAgICAgIEEgbWluaW11bSBudW1iZXIgb2YgQURDIGNsb2NrIGN5Y2xlcyBhcmUgcmVxdWlyZWQKICAgKiAgICAgICAgIGJldHdlZW4gQURDIGRpc2FibGUgc3RhdGUgYW5kIGNhbGlicmF0aW9uIHN0YXJ0LgogICAqICAgICAgICAgUmVmZXIgdG8gbGl0ZXJhbCBAcmVmIExMX0FEQ19ERUxBWV9ESVNBQkxFX0NBTElCX0FEQ19DWUNMRVMuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBoYXJkd2FyZSBwcmVyZXF1aXNpdGUgYmVmb3JlIHN0YXJ0aW5nIGEgY2FsaWJyYXRpb246CisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgaGFyZHdhcmUgcHJlcmVxdWlzaXRlIGJlZm9yZSBzdGFydGluZyBhIGNhbGlicmF0aW9uOgogICAgICAgICAgICAgdGhlIEFEQyBtdXN0IGhhdmUgYmVlbiBpbiBwb3dlci1vbiBzdGF0ZSBmb3IgYXQgbGVhc3QKICAgICAgICAgICAgIHR3byBBREMgY2xvY2sgY3ljbGVzLgogICAqIEBybXRvbGwgQ1IyICAgICAgQ0FMICAgICAgICAgICAgTExfQURDX1N0YXJ0Q2FsaWJyYXRpb24KQEAgLTEwMzczLDcgKzEwMzczLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBTdGFydCBBREMgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9uLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdGhpcyBmdW5jdGlvbiBpcyByZWxldmFudCBmb3IgYm90aCAKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGlzIGZ1bmN0aW9uIGlzIHJlbGV2YW50IGZvciBib3RoIAogICAqICAgICAgICAgaW50ZXJuYWwgdHJpZ2dlciAoU1cgc3RhcnQpIGFuZCBleHRlcm5hbCB0cmlnZ2VyOgogICAqICAgICAgICAgLSBJZiBBREMgdHJpZ2dlciBoYXMgYmVlbiBzZXQgdG8gc29mdHdhcmUgc3RhcnQsIEFEQyBjb252ZXJzaW9uCiAgICogICAgICAgICAgIHN0YXJ0cyBpbW1lZGlhdGVseS4KQEAgLTEwMzk3LDcgKzEwMzk3LDcgQEAKICAgKiBAbm90ZSAgIE5vIG1vcmUgQURDIGNvbnZlcnNpb24gd2lsbCBzdGFydCBhdCBuZXh0IHRyaWdnZXIgZXZlbnQKICAgKiAgICAgICAgIGZvbGxvd2luZyB0aGUgQURDIHN0b3AgY29udmVyc2lvbiBjb21tYW5kLgogICAqICAgICAgICAgSWYgYSBjb252ZXJzaW9uIGlzIG9uLWdvaW5nLCBpdCB3aWxsIGJlIGNvbXBsZXRlZC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIHNwZWNpZmljIGNvbW1hbmQKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBzcGVjaWZpYyBjb21tYW5kCiAgICogICAgICAgICB0byBzdG9wIGEgY29udmVyc2lvbiBvbi1nb2luZyBvciB0byBzdG9wIEFEQyBjb252ZXJ0aW5nCiAgICogICAgICAgICBpbiBjb250aW51b3VzIG1vZGUuIFRoZXNlIGFjdGlvbnMgY2FuIGJlIHBlcmZvcm1lZAogICAqICAgICAgICAgdXNpbmcgZnVuY3Rpb24gQHJlZiBMTF9BRENfRGlzYWJsZSgpLgpAQCAtMTA0NDksNyArMTA0NDksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFN0YXJ0IEFEQyBncm91cCBpbmplY3RlZCBjb252ZXJzaW9uLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdGhpcyBmdW5jdGlvbiBpcyByZWxldmFudCBmb3IgYm90aCAKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGlzIGZ1bmN0aW9uIGlzIHJlbGV2YW50IGZvciBib3RoIAogICAqICAgICAgICAgaW50ZXJuYWwgdHJpZ2dlciAoU1cgc3RhcnQpIGFuZCBleHRlcm5hbCB0cmlnZ2VyOgogICAqICAgICAgICAgLSBJZiBBREMgdHJpZ2dlciBoYXMgYmVlbiBzZXQgdG8gc29mdHdhcmUgc3RhcnQsIEFEQyBjb252ZXJzaW9uCiAgICogICAgICAgICAgIHN0YXJ0cyBpbW1lZGlhdGVseS4KQEAgLTEwNDczLDcgKzEwNDczLDcgQEAKICAgKiBAbm90ZSAgIE5vIG1vcmUgQURDIGNvbnZlcnNpb24gd2lsbCBzdGFydCBhdCBuZXh0IHRyaWdnZXIgZXZlbnQKICAgKiAgICAgICAgIGZvbGxvd2luZyB0aGUgQURDIHN0b3AgY29udmVyc2lvbiBjb21tYW5kLgogICAqICAgICAgICAgSWYgYSBjb252ZXJzaW9uIGlzIG9uLWdvaW5nLCBpdCB3aWxsIGJlIGNvbXBsZXRlZC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIHNwZWNpZmljIGNvbW1hbmQKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBzcGVjaWZpYyBjb21tYW5kCiAgICogICAgICAgICB0byBzdG9wIGEgY29udmVyc2lvbiBvbi1nb2luZyBvciB0byBzdG9wIEFEQyBjb252ZXJ0aW5nCiAgICogICAgICAgICBpbiBjb250aW51b3VzIG1vZGUuIFRoZXNlIGFjdGlvbnMgY2FuIGJlIHBlcmZvcm1lZAogICAqICAgICAgICAgdXNpbmcgZnVuY3Rpb24gQHJlZiBMTF9BRENfRGlzYWJsZSgpLgpAQCAtMTA1NTUsNyArMTA1NTUsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19Jc0FjdGl2ZUZsYWdfRU9TKEFEQ19UeXBlRGVmICpBREN4KQogewotICAvKiBOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCByZWd1bGFyICAgICAgICAgICAgKi8KKyAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIHJlZ3VsYXIgICAgICAgICAgICAqLwogICAvKiAgICAgICBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgRmxhZyBub3RlZCBhcyAiRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkVPUyIgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTA1NzEsNyArMTA1NzEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19Jc0FjdGl2ZUZsYWdfSkVPUyhBRENfVHlwZURlZiAqQURDeCkKIHsKLSAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgICAgICAgICAgICovCisgIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCAgICAgICAgICAgKi8KICAgLyogICAgICAgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIEZsYWcgbm90ZWQgYXMgIkpFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiSkVPUyIgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEwNTk3LDcgKzEwNTk3LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FEQ19DbGVhckZsYWdfRU9TKEFEQ19UeXBlRGVmICpBREN4KQogewotICAvKiBOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCByZWd1bGFyICAgICAgICAgICAgKi8KKyAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIHJlZ3VsYXIgICAgICAgICAgICAqLwogICAvKiAgICAgICBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgRmxhZyBub3RlZCBhcyAiRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkVPUyIgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTA2MTMsNyArMTA2MTMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX0NsZWFyRmxhZ19KRU9TKEFEQ19UeXBlRGVmICpBREN4KQogewotICAvKiBOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCAgICAgICAgICAgKi8KKyAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkICAgICAgICAgICAqLwogICAvKiAgICAgICBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgRmxhZyBub3RlZCBhcyAiSkVPQyIgaXMgY29ycmVzcG9uZGluZyB0byBmbGFnICJKRU9TIiAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTA2NDcsNyArMTA2NDcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX0VuYWJsZUlUX0VPUyhBRENfVHlwZURlZiAqQURDeCkKIHsKLSAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgcmVndWxhciAgICAgICAgICAgICovCisgIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCByZWd1bGFyICAgICAgICAgICAgKi8KICAgLyogICAgICAgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIEZsYWcgbm90ZWQgYXMgIkVPQyIgaXMgY29ycmVzcG9uZGluZyB0byBmbGFnICJFT1MiICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEwNjYzLDcgKzEwNjYzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FEQ19FbmFibGVJVF9KRU9TKEFEQ19UeXBlRGVmICpBREN4KQogewotICAvKiBOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCAgICAgICAgICAgKi8KKyAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkICAgICAgICAgICAqLwogICAvKiAgICAgICBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgRmxhZyBub3RlZCBhcyAiSkVPQyIgaXMgY29ycmVzcG9uZGluZyB0byBmbGFnICJKRU9TIiAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTA2ODksNyArMTA2ODksNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX0Rpc2FibGVJVF9FT1MoQURDX1R5cGVEZWYgKkFEQ3gpCiB7Ci0gIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIHJlZ3VsYXIgICAgICAgICAgICAqLworICAvKiBOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgcmVndWxhciAgICAgICAgICAgICovCiAgIC8qICAgICAgIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBGbGFnIG5vdGVkIGFzICJFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiRU9TIiAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMDcwNSw3ICsxMDcwNSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfRGlzYWJsZUlUX0pFT1MoQURDX1R5cGVEZWYgKkFEQ3gpCiB7Ci0gIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkICAgICAgICAgICAqLworICAvKiBOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgICAgICAgICAgICovCiAgIC8qICAgICAgIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMDczMiw3ICsxMDczMiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQURDX0lzRW5hYmxlZElUX0VPUyhBRENfVHlwZURlZiAqQURDeCkKIHsKLSAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgcmVndWxhciAgICAgICAgICAgICovCisgIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCByZWd1bGFyICAgICAgICAgICAgKi8KICAgLyogICAgICAgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIEZsYWcgbm90ZWQgYXMgIkVPQyIgaXMgY29ycmVzcG9uZGluZyB0byBmbGFnICJFT1MiICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEwNzQ5LDcgKzEwNzQ5LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfSXNFbmFibGVkSVRfSkVPUyhBRENfVHlwZURlZiAqQURDeCkKIHsKLSAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgICAgICAgICAgICovCisgIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCAgICAgICAgICAgKi8KICAgLyogICAgICAgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIEZsYWcgbm90ZWQgYXMgIkpFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiSkVPUyIgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEwODI1LDMgKzEwODI1LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYzeHhfTExfQURDX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9sbF9idXMuaCBiL0luYy9zdG0zMmYzeHhfbGxfYnVzLmgKaW5kZXggMjhhOWY2NC4uOTJlMTQwNyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9sbF9idXMuaAorKysgYi9JbmMvc3RtMzJmM3h4X2xsX2J1cy5oCkBAIC0yNiwxMCArMjYsOSBAQAogICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCi0gICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKQEAgLTEwNTgsMyArMTA1Nyw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1RNMzJGM3h4X0xMX0JVU19IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfbGxfY29tcC5oIGIvSW5jL3N0bTMyZjN4eF9sbF9jb21wLmgKaW5kZXggMjE2NmFiMy4uNjU1ZTU3ZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9sbF9jb21wLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9sbF9jb21wLmgKQEAgLTMxLDcgKzMxLDcgQEAKICAgKiBAewogICAqLwogCi0vKiBOb3RlOiBEZXZpY2VzIG9mIFNUTTMyRjMgc2VyaWUgZW1iZWQgMSBvdXQgb2YgMiBkaWZmZXJlbnQgY29tcGFyYXRvciBJUC4gICAqLworLyogTm90ZTogRGV2aWNlcyBvZiBTVE0zMkYzIHNlcmllcyBlbWJlZCAxIG91dCBvZiAyIGRpZmZlcmVudCBjb21wYXJhdG9yIElQLiAgICovCiAvKiAgICAgICAtIFNUTTMyRjMweCwgU1RNMzJGMzF4LCBTVE0zMkYzMngsIFNUTTMyRjMzeCwgU1RNMzJGMzV4LCBTVE0zMkYzOXg6ICAqLwogLyogICAgICAgICBDT01QIElQIGZyb20gMyB0byA3IGluc3RhbmNlcyBhbmQgb3RoZXIgc3BlY2lmaWMgZmVhdHVyZXMgICAgICAgICAgKi8KIC8qICAgICAgICAgKGNvbXBhcmF0b3Igb3V0cHV0IGJsYW5raW5nLCAuLi4pIChyZWZlciB0byByZWZlcmVuY2UgbWFudWFsKS4gICAgICovCkBAIC0yMzQsNyArMjM0LDcgQEAKICAgKi8KICNkZWZpbmUgTExfQ09NUF9PVVRQVVRfTk9ORSAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT01QIG91dHB1dCBpcyBub3QgY29ubmVjdGVkIHRvIG90aGVyIHBlcmlwaGVyYWxzIChleGNlcHQgR1BJTyBhbmQgRVhUSSB0aGF0IGFyZSBhbHdheXMgY29ubmVjdGVkIHRvIENPTVAgb3V0cHV0KSAoc3BlY2lmaWMgdG8gQ09NUCBpbnN0YW5jZTogQ09NUDIpICovCiAjaWYgZGVmaW5lZChDT01QX0NTUl9DT01QeE9VVCkKLS8qIE5vdGU6IE91dHB1dCByZWRpcmVjdGlvbiBjb21tb24gdG8gYWxsIENPTVAgaW5zdGFuY2VzLCBhbGwgU1RNMzJGMyBzZXJpZSAgICovCisvKiBOb3RlOiBPdXRwdXQgcmVkaXJlY3Rpb24gY29tbW9uIHRvIGFsbCBDT01QIGluc3RhbmNlcywgYWxsIFNUTTMyRjMgc2VyaWVzICAgKi8KIC8qICAgICAgIGRldmljZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIExMX0NPTVBfT1VUUFVUX1RJTTFfQktJTiAgICAgICAgKENPTVBfQ1NSX0NPTVB4T1VUU0VMXzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09NUCBvdXRwdXQgY29ubmVjdGVkIHRvIFRJTTEgYnJlYWsgaW5wdXQgKEJLSU4pICovCiAjZGVmaW5lIExMX0NPTVBfT1VUUFVUX1RJTTFfQktJTjIgICAgICAgKENPTVBfQ1NSX0NPTVB4T1VUU0VMXzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09NUCBvdXRwdXQgY29ubmVjdGVkIHRvIFRJTTEgYnJlYWsgaW5wdXQgMiAoQktJTjIpICovCkBAIC0yNTksNyArMjU5LDcgQEAKIC8qICAgICAgIFJlZmVyIHRvIGxpdGVyYWwgZGVmaW5pdGlvbnMgYWJvdmUgZm9yIENPTVAgaW5zdGFuY2UgY29uc3RyYWludHMuICAgICovCiAvKiBOb3RlOiBTb21lIG91dHB1dCByZWRpcmVjdGlvbnMgY2Fubm90IGhhdmUgYSBnZW5lcmljIG5hbWluZywgICAgICAgICAgICAgICAqLwogLyogICAgICAgZHVlIHRvIGxpdGVyYWwgdmFsdWUgZGlmZmVyZW50IGRlcGVuZGluZyBvbiBDT01QIGluc3RhbmNlLiAgICAgICAgICAgKi8KLS8qICAgICAgIChGb3IgZXhlbXBsZTogTExfQ09NUF9PVVRQVVRfVElNMl9PQ0NMUl9DT01QMiBhbmQgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAoRm9yIGV4YW1wbGU6IExMX0NPTVBfT1VUUFVUX1RJTTJfT0NDTFJfQ09NUDIgYW5kICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgTExfQ09NUF9PVVRQVVRfVElNMl9PQ0NMUl9DT01QNikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTExfQ09NUF9PVVRQVVRfVElNMV9JQzEgICAgICAgICAgTExfQ09NUF9PVVRQVVRfVElNMV9JQzFfQ09NUDIgICAgICAgICAvKiE8IENPTVAgb3V0cHV0IGNvbm5lY3RlZCB0byBUSU0xIGlucHV0IGNhcHR1cmUgMS4gICAgIENhdXRpb246IFBhcmFtZXRlciBzcGVjaWZpYyB0byBDT01QIGluc3RhbmNlcywgZGVmaW5lZCB3aXRoIGdlbmVyaWMgbmFtaW5nLCBub3QgdGFraW5nIGludG8gYWNjb3VudCBDT01QIGluc3RhbmNlIGNvbnN0cmFpbnRzLiBSZWZlciB0byBsaXRlcmFsIGRlZmluaXRpb25zIGFib3ZlIGZvciBDT01QIGluc3RhbmNlIGNvbnN0cmFpbnRzLiAqLwogI2RlZmluZSBMTF9DT01QX09VVFBVVF9USU0xX09DQ0xSICAgICAgICBMTF9DT01QX09VVFBVVF9USU0xX09DQ0xSX0NPTVAyICAgICAgIC8qITwgQ09NUCBvdXRwdXQgY29ubmVjdGVkIHRvIFRJTTEgT0NSRUYgY2xlYXIuICAgICAgICAgQ2F1dGlvbjogUGFyYW1ldGVyIHNwZWNpZmljIHRvIENPTVAgaW5zdGFuY2VzLCBkZWZpbmVkIHdpdGggZ2VuZXJpYyBuYW1pbmcsIG5vdCB0YWtpbmcgaW50byBhY2NvdW50IENPTVAgaW5zdGFuY2UgY29uc3RyYWludHMuIFJlZmVyIHRvIGxpdGVyYWwgZGVmaW5pdGlvbnMgYWJvdmUgZm9yIENPTVAgaW5zdGFuY2UgY29uc3RyYWludHMuICovCkBAIC0yOTgsNyArMjk4LDcgQEAKIC8qICAgICAgIFJlZmVyIHRvIGxpdGVyYWwgZGVmaW5pdGlvbnMgYWJvdmUgZm9yIENPTVAgaW5zdGFuY2UgY29uc3RyYWludHMuICAgICovCiAvKiBOb3RlOiBTb21lIG91dHB1dCByZWRpcmVjdGlvbnMgY2Fubm90IGhhdmUgYSBnZW5lcmljIG5hbWluZywgICAgICAgICAgICAgICAqLwogLyogICAgICAgZHVlIHRvIGxpdGVyYWwgdmFsdWUgZGlmZmVyZW50IGRlcGVuZGluZyBvbiBDT01QIGluc3RhbmNlLiAgICAgICAgICAgKi8KLS8qICAgICAgIChGb3IgZXhlbXBsZTogTExfQ09NUF9PVVRQVVRfVElNMl9PQ0NMUl9DT01QMiBhbmQgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAoRm9yIGV4YW1wbGU6IExMX0NPTVBfT1VUUFVUX1RJTTJfT0NDTFJfQ09NUDIgYW5kICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgTExfQ09NUF9PVVRQVVRfVElNMl9PQ0NMUl9DT01QNikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTExfQ09NUF9PVVRQVVRfVElNMV9JQzEgICAgICAgICAgTExfQ09NUF9PVVRQVVRfVElNMV9JQzFfQ09NUDIgICAgICAgICAvKiE8IENPTVAgb3V0cHV0IGNvbm5lY3RlZCB0byBUSU0xIGlucHV0IGNhcHR1cmUgMS4gICAgIENhdXRpb246IFBhcmFtZXRlciBzcGVjaWZpYyB0byBDT01QIGluc3RhbmNlcywgZGVmaW5lZCB3aXRoIGdlbmVyaWMgbmFtaW5nLCBub3QgdGFraW5nIGludG8gYWNjb3VudCBDT01QIGluc3RhbmNlIGNvbnN0cmFpbnRzLiBSZWZlciB0byBsaXRlcmFsIGRlZmluaXRpb25zIGFib3ZlIGZvciBDT01QIGluc3RhbmNlIGNvbnN0cmFpbnRzLiAqLwogI2RlZmluZSBMTF9DT01QX09VVFBVVF9USU0xX09DQ0xSICAgICAgICBMTF9DT01QX09VVFBVVF9USU0xX09DQ0xSX0NPTVAyICAgICAgIC8qITwgQ09NUCBvdXRwdXQgY29ubmVjdGVkIHRvIFRJTTEgT0NSRUYgY2xlYXIuICAgICAgICAgQ2F1dGlvbjogUGFyYW1ldGVyIHNwZWNpZmljIHRvIENPTVAgaW5zdGFuY2VzLCBkZWZpbmVkIHdpdGggZ2VuZXJpYyBuYW1pbmcsIG5vdCB0YWtpbmcgaW50byBhY2NvdW50IENPTVAgaW5zdGFuY2UgY29uc3RyYWludHMuIFJlZmVyIHRvIGxpdGVyYWwgZGVmaW5pdGlvbnMgYWJvdmUgZm9yIENPTVAgaW5zdGFuY2UgY29uc3RyYWludHMuICovCkBAIC0zNDIsNyArMzQyLDcgQEAKIC8qICAgICAgIFJlZmVyIHRvIGxpdGVyYWwgZGVmaW5pdGlvbnMgYWJvdmUgZm9yIENPTVAgaW5zdGFuY2UgY29uc3RyYWludHMuICAgICovCiAvKiBOb3RlOiBTb21lIG91dHB1dCByZWRpcmVjdGlvbnMgY2Fubm90IGhhdmUgYSBnZW5lcmljIG5hbWluZywgICAgICAgICAgICAgICAqLwogLyogICAgICAgZHVlIHRvIGxpdGVyYWwgdmFsdWUgZGlmZmVyZW50IGRlcGVuZGluZyBvbiBDT01QIGluc3RhbmNlLiAgICAgICAgICAgKi8KLS8qICAgICAgIChGb3IgZXhlbXBsZTogTExfQ09NUF9PVVRQVVRfVElNMl9PQ0NMUl9DT01QMV8yIGFuZCAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAoRm9yIGV4YW1wbGU6IExMX0NPTVBfT1VUUFVUX1RJTTJfT0NDTFJfQ09NUDFfMiBhbmQgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgTExfQ09NUF9PVVRQVVRfVElNMl9PQ0NMUl9DT01QNikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTExfQ09NUF9PVVRQVVRfVElNMV9JQzEgICAgICAgICAgTExfQ09NUF9PVVRQVVRfVElNMV9JQzFfQ09NUDFfMiAgICAgICAvKiE8IENPTVAgb3V0cHV0IGNvbm5lY3RlZCB0byBUSU0xIGlucHV0IGNhcHR1cmUgMS4gICAgIENhdXRpb246IFBhcmFtZXRlciBzcGVjaWZpYyB0byBDT01QIGluc3RhbmNlcywgZGVmaW5lZCB3aXRoIGdlbmVyaWMgbmFtaW5nLCBub3QgdGFraW5nIGludG8gYWNjb3VudCBDT01QIGluc3RhbmNlIGNvbnN0cmFpbnRzLiBSZWZlciB0byBsaXRlcmFsIGRlZmluaXRpb25zIGFib3ZlIGZvciBDT01QIGluc3RhbmNlIGNvbnN0cmFpbnRzLiAqLwogI2RlZmluZSBMTF9DT01QX09VVFBVVF9USU0xX09DQ0xSICAgICAgICBMTF9DT01QX09VVFBVVF9USU0xX09DQ0xSX0NPTVAxXzIgICAgIC8qITwgQ09NUCBvdXRwdXQgY29ubmVjdGVkIHRvIFRJTTEgT0NSRUYgY2xlYXIuICAgICAgICAgQ2F1dGlvbjogUGFyYW1ldGVyIHNwZWNpZmljIHRvIENPTVAgaW5zdGFuY2VzLCBkZWZpbmVkIHdpdGggZ2VuZXJpYyBuYW1pbmcsIG5vdCB0YWtpbmcgaW50byBhY2NvdW50IENPTVAgaW5zdGFuY2UgY29uc3RyYWludHMuIFJlZmVyIHRvIGxpdGVyYWwgZGVmaW5pdGlvbnMgYWJvdmUgZm9yIENPTVAgaW5zdGFuY2UgY29uc3RyYWludHMuICovCkBAIC00MTksNyArNDE5LDcgQEAKIC8qICAgICAgIFJlZmVyIHRvIGxpdGVyYWwgZGVmaW5pdGlvbnMgYWJvdmUgZm9yIENPTVAgaW5zdGFuY2UgY29uc3RyYWludHMuICAgICovCiAvKiBOb3RlOiBTb21lIG91dHB1dCByZWRpcmVjdGlvbnMgY2Fubm90IGhhdmUgYSBnZW5lcmljIG5hbWluZywgICAgICAgICAgICAgICAqLwogLyogICAgICAgZHVlIHRvIGxpdGVyYWwgdmFsdWUgZGlmZmVyZW50IGRlcGVuZGluZyBvbiBDT01QIGluc3RhbmNlLiAgICAgICAgICAgKi8KLS8qICAgICAgIChGb3IgZXhlbXBsZTogTExfQ09NUF9PVVRQVVRfVElNMl9PQ0NMUl9DT01QMV8yXzMgYW5kICAgICAgICAgICAgICAgICovCisvKiAgICAgICAoRm9yIGV4YW1wbGU6IExMX0NPTVBfT1VUUFVUX1RJTTJfT0NDTFJfQ09NUDFfMl8zIGFuZCAgICAgICAgICAgICAgICAqLwogLyogICAgICAgTExfQ09NUF9PVVRQVVRfVElNMl9PQ0NMUl9DT01QNikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTExfQ09NUF9PVVRQVVRfVElNMV9JQzEgICAgICAgICAgTExfQ09NUF9PVVRQVVRfVElNMV9JQzFfQ09NUDFfMiAgICAgICAvKiE8IENPTVAgb3V0cHV0IGNvbm5lY3RlZCB0byBUSU0xIGlucHV0IGNhcHR1cmUgMS4gICAgIENhdXRpb246IFBhcmFtZXRlciBzcGVjaWZpYyB0byBDT01QIGluc3RhbmNlcywgZGVmaW5lZCB3aXRoIGdlbmVyaWMgbmFtaW5nLCBub3QgdGFraW5nIGludG8gYWNjb3VudCBDT01QIGluc3RhbmNlIGNvbnN0cmFpbnRzLiBSZWZlciB0byBsaXRlcmFsIGRlZmluaXRpb25zIGFib3ZlIGZvciBDT01QIGluc3RhbmNlIGNvbnN0cmFpbnRzLiAqLwogI2RlZmluZSBMTF9DT01QX09VVFBVVF9USU0xX0lDMiAgICAgICAgICBMTF9DT01QX09VVFBVVF9USU0xX0lDMl9DT01QNyAgICAgICAgIC8qITwgQ09NUCBvdXRwdXQgY29ubmVjdGVkIHRvIFRJTTIgaW5wdXQgY2FwdHVyZSAxLiAgICAgQ2F1dGlvbjogUGFyYW1ldGVyIHNwZWNpZmljIHRvIENPTVAgaW5zdGFuY2VzLCBkZWZpbmVkIHdpdGggZ2VuZXJpYyBuYW1pbmcsIG5vdCB0YWtpbmcgaW50byBhY2NvdW50IENPTVAgaW5zdGFuY2UgY29uc3RyYWludHMuIFJlZmVyIHRvIGxpdGVyYWwgZGVmaW5pdGlvbnMgYWJvdmUgZm9yIENPTVAgaW5zdGFuY2UgY29uc3RyYWludHMuICovCkBAIC02MzcsNyArNjM3LDcgQEAKICAgKiBAcmV0dmFsIENPTVAgY29tbW9uIGluc3RhbmNlIG9yIHZhbHVlICIwIiBpZiB0aGVyZSBpcyBubyBDT01QIGNvbW1vbiBpbnN0YW5jZS4KICAgKi8KICNpZiBkZWZpbmVkKENPTVAxKSAmJiBkZWZpbmVkKENPTVAyKSAmJiBkZWZpbmVkKENPTVAzKSAmJiBkZWZpbmVkKENPTVA0KSAmJiBkZWZpbmVkKENPTVA1KSAmJiBkZWZpbmVkKENPTVA2KSAmJiBkZWZpbmVkKENPTVA3KQotLyogTm90ZTogT24gU1RNMzJGMyBzZXJpZSBkZXZpY2VzIHdpdGggNyBjb21wYXJhdG9yIGluc3RhbmNlcywgICAgICAgICAgICAgICAgKi8KKy8qIE5vdGU6IE9uIFNUTTMyRjMgc2VyaWVzIGRldmljZXMgd2l0aCA3IGNvbXBhcmF0b3IgaW5zdGFuY2VzLCAgICAgICAgICAgICAgICAqLwogLyogICAgICAgQ09NUCBpbnN0YW5jZSBDT01QNyBoYXMgbm8gb3RoZXIgY29tcGFyYXRvciBpbnN0YW5jZSB0byB3b3JrICAgICAgICAgKi8KIC8qICAgICAgIGluIHBhaXIgd2l0aDogd2luZG93IG1vZGUgaXMgbm90IGF2YWlsYWJsZSBmb3IgQ09NUDcuICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTExfQ09NUF9DT01NT05fSU5TVEFOQ0UoX19DT01QeF9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNjc0LDcgKzY3NCw3IEBACiAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICApCiAjZWxpZiBkZWZpbmVkKENPTVAyKSAmJiBkZWZpbmVkKENPTVA0KSAmJiBkZWZpbmVkKENPTVA2KQotLyogTm90ZTogT24gU1RNMzJGMyBzZXJpZSBkZXZpY2VzIHdpdGggMyBjb21wYXJhdG9yIGluc3RhbmNlcyAoQ09NUDIsIDQsIDYpICAgKi8KKy8qIE5vdGU6IE9uIFNUTTMyRjMgc2VyaWVzIGRldmljZXMgd2l0aCAzIGNvbXBhcmF0b3IgaW5zdGFuY2VzIChDT01QMiwgNCwgNikgICAqLwogLyogICAgICAgQ09NUCBpbnN0YW5jZXMgaGF2ZSBubyBvdGhlciBjb21wYXJhdG9yIGluc3RhbmNlIHRvIHdvcmsgICAgICAgICAgICAgKi8KIC8qICAgICAgIGluIHBhaXIgd2l0aDogd2luZG93IG1vZGUgaXMgbm90IGF2YWlsYWJsZSBmb3IgYWxsIENPTVAgaW5zdGFuY2VzLiAgICovCiAjZGVmaW5lIF9fTExfQ09NUF9DT01NT05fSU5TVEFOQ0UoX19DT01QeF9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtODE3LDcgKzgxNyw3IEBACiAgICogQG5vdGUgICBJbiBjYXNlIG9mIGNvbXBhcmF0b3IgaW5wdXQgc2VsZWN0ZWQgdG8gYmUgY29ubmVjdGVkIHRvIElPOgogICAqICAgICAgICAgR1BJTyBwaW5zIGFyZSBzcGVjaWZpYyB0byBlYWNoIGNvbXBhcmF0b3IgaW5zdGFuY2UuCiAgICogICAgICAgICBSZWZlciB0byBkZXNjcmlwdGlvbiBvZiBwYXJhbWV0ZXJzIG9yIHRvIHJlZmVyZW5jZSBtYW51YWwuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBhIHZvbHRhZ2Ugc2NhbGVyIGlzIHVzZWQKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBhIHZvbHRhZ2Ugc2NhbGVyIGlzIHVzZWQKICAgKiAgICAgICAgIHdoZW4gQ09NUCBpbnB1dCBpcyBiYXNlZCBvbiBWcmVmSW50IChWcmVmSW50IG9yIHN1YmRpdmlzaW9uCiAgICogICAgICAgICBvZiBWcmVmSW50KToKICAgKiAgICAgICAgIFZvbHRhZ2Ugc2NhbGVyIHJlcXVpcmVzIGEgZGVsYXkgZm9yIHZvbHRhZ2Ugc3RhYmlsaXphdGlvbi4KQEAgLTk1Miw3ICs5NTIsNyBAQAogICAqIEBub3RlICAgSW4gY2FzZSBvZiBjb21wYXJhdG9yIGlucHV0IHNlbGVjdGVkIHRvIGJlIGNvbm5lY3RlZCB0byBJTzoKICAgKiAgICAgICAgIEdQSU8gcGlucyBhcmUgc3BlY2lmaWMgdG8gZWFjaCBjb21wYXJhdG9yIGluc3RhbmNlLgogICAqICAgICAgICAgUmVmZXIgdG8gZGVzY3JpcHRpb24gb2YgcGFyYW1ldGVycyBvciB0byByZWZlcmVuY2UgbWFudWFsLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgYSB2b2x0YWdlIHNjYWxlciBpcyB1c2VkCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgYSB2b2x0YWdlIHNjYWxlciBpcyB1c2VkCiAgICogICAgICAgICB3aGVuIENPTVAgaW5wdXQgaXMgYmFzZWQgb24gVnJlZkludCAoVnJlZkludCBvciBzdWJkaXZpc2lvbgogICAqICAgICAgICAgb2YgVnJlZkludCk6CiAgICogICAgICAgICBWb2x0YWdlIHNjYWxlciByZXF1aXJlcyBhIGRlbGF5IGZvciB2b2x0YWdlIHN0YWJpbGl6YXRpb24uCkBAIC0xNjIxLDcgKzE2MjEsNyBAQAogLyogICAgICAgUmVmZXIgdG8gbGl0ZXJhbCBkZWZpbml0aW9ucyBhYm92ZSBmb3IgQ09NUCBpbnN0YW5jZSBjb25zdHJhaW50cy4gICAgKi8KIC8qIE5vdGU6IFNvbWUgb3V0cHV0IHJlZGlyZWN0aW9ucyBjYW5ub3QgaGF2ZSBhIGdlbmVyaWMgbmFtaW5nLCAgICAgICAgICAgICAgICovCiAvKiAgICAgICBkdWUgdG8gbGl0ZXJhbCB2YWx1ZSBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIENPTVAgaW5zdGFuY2UuICAgICAgICAgICAqLwotLyogICAgICAgKEZvciBleGVtcGxlOiBMTF9DT01QX09VVFBVVF9USU0zX0lDMV9DT01QMSBhbmQgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgIChGb3IgZXhhbXBsZTogTExfQ09NUF9PVVRQVVRfVElNM19JQzFfQ09NUDEgYW5kICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICBMTF9DT01QX09VVFBVVF9USU0zX0lDMV9DT01QMikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBMTF9DT01QX09VVFBVVF9USU0xNV9CS0lOICAgICAgIExMX0NPTVBfT1VUUFVUX1RJTTE1X0JLSU5fQ09NUDEgICAgICAgLyohPCBDT01QIG91dHB1dCBjb25uZWN0ZWQgdG8gVElNMTUgYnJlYWsgaW5wdXQgKEJLSU4pLiBDYXV0aW9uOiBQYXJhbWV0ZXIgc3BlY2lmaWMgdG8gQ09NUCBpbnN0YW5jZXMsIGRlZmluZWQgd2l0aCBnZW5lcmljIG5hbWluZywgbm90IHRha2luZyBpbnRvIGFjY291bnQgQ09NUCBpbnN0YW5jZSBjb25zdHJhaW50cy4gUmVmZXIgdG8gbGl0ZXJhbCBkZWZpbml0aW9ucyBhYm92ZSBmb3IgQ09NUCBpbnN0YW5jZSBjb25zdHJhaW50cy4gKi8KICNkZWZpbmUgTExfQ09NUF9PVVRQVVRfVElNMTZfQktJTiAgICAgICBMTF9DT01QX09VVFBVVF9USU0xNl9CS0lOX0NPTVAyICAgICAgIC8qITwgQ09NUCBvdXRwdXQgY29ubmVjdGVkIHRvIFRJTTE2IGJyZWFrIGlucHV0IChCS0lOKS4gQ2F1dGlvbjogUGFyYW1ldGVyIHNwZWNpZmljIHRvIENPTVAgaW5zdGFuY2VzLCBkZWZpbmVkIHdpdGggZ2VuZXJpYyBuYW1pbmcsIG5vdCB0YWtpbmcgaW50byBhY2NvdW50IENPTVAgaW5zdGFuY2UgY29uc3RyYWludHMuIFJlZmVyIHRvIGxpdGVyYWwgZGVmaW5pdGlvbnMgYWJvdmUgZm9yIENPTVAgaW5zdGFuY2UgY29uc3RyYWludHMuICovCkBAIC0yMjU2LDMgKzIyNTYsNSBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjN4eF9MTF9DT01QX0ggKi8KKworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmM3h4X2xsX2NvcnRleC5oIGIvSW5jL3N0bTMyZjN4eF9sbF9jb3J0ZXguaAppbmRleCA4YTRlOTY3Li5hMTZkYzYyIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2xsX2NvcnRleC5oCisrKyBiL0luYy9zdG0zMmYzeHhfbGxfY29ydGV4LmgKQEAgLTI1LDggKzI1LDggQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjM1LDMgKzYzNSw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1RNMzJGM3h4X0xMX0NPUlRFWF9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfbGxfY3JjLmggYi9JbmMvc3RtMzJmM3h4X2xsX2NyYy5oCmluZGV4IDRhYzU0YzEuLmY3ZTE5NWEgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfbGxfY3JjLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9sbF9jcmMuaApAQCAtMjM1LDcgKzIzNSw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSByZXZlcnNhbCBvZiB0aGUgYml0IG9yZGVyIG9mIHRoZSBPdXRwdXQgZGF0YQorICAqIEBicmllZiAgUmV0dXJuIHR5cGUgb2YgcmV2ZXJzYWwgb2YgdGhlIGJpdCBvcmRlciBvZiB0aGUgT3V0cHV0IGRhdGEKICAgKiBAcm10b2xsIENSICAgICAgICAgICBSRVZfT1VUICAgICAgIExMX0NSQ19HZXRPdXRwdXREYXRhUmV2ZXJzZU1vZGUKICAgKiBAcGFyYW0gIENSQ3ggQ1JDIEluc3RhbmNlCiAgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9sbF9kYWMuaCBiL0luYy9zdG0zMmYzeHhfbGxfZGFjLmgKaW5kZXggOTQ4NjZhMi4uZGFlMjJmYiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9sbF9kYWMuaAorKysgYi9JbmMvc3RtMzJmM3h4X2xsX2RhYy5oCkBAIC00NDksNyArNDQ5LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKICAgKiAgICAgICAgIAotICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgorICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHJldHZhbCAxLi4uMiAodmFsdWUgIjIiIGRlcGVuZGluZyBvbiBEQUMgY2hhbm5lbCAyIGF2YWlsYWJpbGl0eSkKICAgKi8KQEAgLTQ2OSw3ICs0NjksNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQogICAqICAgICAgICAgCi0gICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCisgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKi8KICNpZiBkZWZpbmVkKERBQ19DSEFOTkVMMl9TVVBQT1JUKQpAQCAtNTczLDcgKzU3Myw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCiAgICogICAgICAgICAKLSAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KKyAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllcywgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCiAgICogICAgICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgogICAqIEBwYXJhbSAgVHJpZ2dlclNvdXJjZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19UUklHX1NPRlRXQVJFCkBAIC02MTYsNyArNjE2LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKICAgKiAgICAgICAgIAotICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgorICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19UUklHX1NPRlRXQVJFCkBAIC02NTUsNyArNjU1LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKICAgKiAgICAgICAgIAotICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgorICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHBhcmFtICBXYXZlQXV0b0dlbmVyYXRpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfV0FWRV9BVVRPX0dFTkVSQVRJT05fTk9ORQpAQCAtNjgwLDcgKzY4MCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCiAgICogICAgICAgICAKLSAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KKyAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllcywgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCiAgICogICAgICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgogICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfV0FWRV9BVVRPX0dFTkVSQVRJT05fTk9ORQpAQCAtNzA5LDcgKzcwOSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCiAgICogICAgICAgICAKLSAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KKyAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllcywgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCiAgICogICAgICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgogICAqIEBwYXJhbSAgTm9pc2VMRlNSTWFzayBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVQwCkBAIC03NDMsNyArNzQzLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKICAgKiAgICAgICAgIAotICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgorICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVQwCkBAIC03ODEsNyArNzgxLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKICAgKiAgICAgICAgIAotICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgorICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHBhcmFtICBUcmlhbmdsZUFtcGxpdHVkZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMQpAQCAtODE1LDcgKzgxNSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCiAgICogICAgICAgICAKLSAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KKyAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllcywgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCiAgICogICAgICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgogICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzEKQEAgLTg0Nyw3ICs4NDcsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQogICAqICAgICAgICAgCi0gICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCisgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcGFyYW0gIE91dHB1dEJ1ZmZlciBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19PVVRQVVRfQlVGRkVSX0VOQUJMRQpAQCAtODc4LDcgKzg3OCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCiAgICogICAgICAgICAKLSAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KKyAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllcywgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCiAgICogICAgICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgogICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfT1VUUFVUX0JVRkZFUl9FTkFCTEUKQEAgLTkxOCw3ICs5MTgsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQogICAqICAgICAgICAgCi0gICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCisgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KQEAgLTkzOSw3ICs5MzksNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQogICAqICAgICAgICAgCi0gICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCisgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KQEAgLTk1OSw3ICs5NTksNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQogICAqICAgICAgICAgCi0gICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCisgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KQEAgLTk5Niw3ICs5OTYsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQogICAqICAgICAgICAgCi0gICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCisgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcGFyYW0gIFJlZ2lzdGVyIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0RNQV9SRUdfREFUQV8xMkJJVFNfUklHSFRfQUxJR05FRApAQCAtMTAzMCw3ICsxMDMwLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKICAgKiAgICAgICAgIAotICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgorICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHJldHZhbCBOb25lCiAgICovCkBAIC0xMDQ5LDcgKzEwNDksNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQogICAqICAgICAgICAgCi0gICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCisgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KQEAgLTEwNjksNyArMTA2OSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCiAgICogICAgICAgICAKLSAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KKyAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllcywgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCiAgICogICAgICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKICAgKiAgICAgICAgIAotICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgorICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHJldHZhbCBOb25lCiAgICovCkBAIC0xMTE2LDcgKzExMTYsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQogICAqICAgICAgICAgCi0gICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCisgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KQEAgLTExMzYsNyArMTEzNiw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCiAgICogICAgICAgICAKLSAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KKyAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllcywgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCiAgICogICAgICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwpAQCAtMTE2NSw3ICsxMTY1LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKICAgKiAgICAgICAgIAotICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgorICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHJldHZhbCBOb25lCiAgICovCkBAIC0xMTg2LDcgKzExODYsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQogICAqICAgICAgICAgCi0gICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCisgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcGFyYW0gIERhdGEgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwMCBhbmQgTWF4X0RhdGE9MHhGRkYKICAgKiBAcmV0dmFsIE5vbmUKQEAgLTEyMTEsNyArMTIxMSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCiAgICogICAgICAgICAKLSAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KKyAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllcywgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCiAgICogICAgICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgogICAqIEBwYXJhbSAgRGF0YSBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAwIGFuZCBNYXhfRGF0YT0weEZGRgogICAqIEByZXR2YWwgTm9uZQpAQCAtMTIzNiw3ICsxMjM2LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKICAgKiAgICAgICAgIAotICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgorICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHBhcmFtICBEYXRhIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwMCBhbmQgTWF4X0RhdGE9MHhGRgogICAqIEByZXR2YWwgTm9uZQpAQCAtMTMyMiw3ICsxMzIyLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKICAgKiAgICAgICAgIAotICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgorICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAwIGFuZCBNYXhfRGF0YT0weEZGRgogICAqLwpAQCAtMTUwNSwzICsxNTA1LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYzeHhfTExfREFDX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9sbF9kbWEuaCBiL0luYy9zdG0zMmYzeHhfbGxfZG1hLmgKaW5kZXggNzg1YzU1My4uYjc3MGMyYiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9sbF9kbWEuaAorKysgYi9JbmMvc3RtMzJmM3h4X2xsX2RtYS5oCkBAIC05LDggKzksOCBAQAogICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC05NDMsNyArOTQzLDcgQEAKIC8qKgogICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBTb3VyY2UgYW5kIERlc3RpbmF0aW9uIGFkZHJlc3Nlcy4KICAgKiBAbm90ZSAgIFRoaXMgQVBJIG11c3Qgbm90IGJlIGNhbGxlZCB3aGVuIHRoZSBETUEgY2hhbm5lbCBpcyBlbmFibGVkLgotICAqIEBub3RlICAgRWFjaCBJUCB1c2luZyBETUEgcHJvdmlkZXMgYW4gQVBJIHRvIGdldCBkaXJlY3RseSB0aGUgcmVnaXN0ZXIgYWRyZXNzIChMTF9QUFBfRE1BX0dldFJlZ0FkZHIpLgorICAqIEBub3RlICAgRWFjaCBJUCB1c2luZyBETUEgcHJvdmlkZXMgYW4gQVBJIHRvIGdldCBkaXJlY3RseSB0aGUgcmVnaXN0ZXIgYWRkcmVzcyAoTExfUFBQX0RNQV9HZXRSZWdBZGRyKS4KICAgKiBAcm10b2xsIENQQVIgICAgICAgICBQQSAgICAgICAgICAgIExMX0RNQV9Db25maWdBZGRyZXNzZXNcbgogICAqICAgICAgICAgQ01BUiAgICAgICAgIE1BICAgICAgICAgICAgTExfRE1BX0NvbmZpZ0FkZHJlc3NlcwogICAqIEBwYXJhbSAgRE1BeCBETUF4IEluc3RhbmNlCkBAIC0xOTkxLDMgKzE5OTEsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjN4eF9MTF9ETUFfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmM3h4X2xsX2V4dGkuaCBiL0luYy9zdG0zMmYzeHhfbGxfZXh0aS5oCmluZGV4IGY0Y2JkNGMuLjU5ZWQ3MGYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfbGxfZXh0aS5oCisrKyBiL0luYy9zdG0zMmYzeHhfbGxfZXh0aS5oCkBAIC0xMzc4LDMgKzEzNzgsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjN4eF9MTF9FWFRJX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9sbF9mbWMuaCBiL0luYy9zdG0zMmYzeHhfbGxfZm1jLmgKaW5kZXggZjJmMGU0Zi4uNmIxMzI4ZCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9sbF9mbWMuaAorKysgYi9JbmMvc3RtMzJmM3h4X2xsX2ZtYy5oCkBAIC04Nyw3ICs4Nyw3IEBACiAjZGVmaW5lIElTX0ZNQ19OT1JTUkFNX0VYVEVOREVEX0RFVklDRShfX0lOU1RBTkNFX18pICgoX19JTlNUQU5DRV9fKSA9PSBGTUNfTk9SU1JBTV9FWFRFTkRFRF9ERVZJQ0UpCiAKICNlbmRpZiAvKiBGTUNfQkFOSzEgKi8KLSNpZiBkZWZpbmVkKEZNQ19CQU5LMykKKyNpZiAgZGVmaW5lZChGTUNfQkFOSzMpCiAKICNkZWZpbmUgSVNfRk1DX05BTkRfQkFOSyhfX0JBTktfXykgKChfX0JBTktfXykgPT0gRk1DX05BTkRfQkFOSzMpCiAjZGVmaW5lIElTX0ZNQ19XQUlUX0ZFQVRVUkUoX19GRUFUVVJFX18pICgoKF9fRkVBVFVSRV9fKSA9PSBGTUNfTkFORF9QQ0NfV0FJVF9GRUFUVVJFX0RJU0FCTEUpIHx8IFwKQEAgLTI4Myw3ICsyODMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5IGJldHdlZW4gQUxFIGxvdyBhbmQgUkUgbG93LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSAyNTUgKi8KIH0gRk1DX05BTkRfSW5pdFR5cGVEZWY7Ci0jZW5kaWYKKyNlbmRpZiAvKiBGTUNfQkFOSzMgKi8KIAogI2lmIGRlZmluZWQoRk1DX0JBTkszKSB8fCBkZWZpbmVkKEZNQ19CQU5LNCkKIC8qKgpAQCAtMzM1LDcgKzMzNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXkgYmV0d2VlbiBBTEUgbG93IGFuZCBSRSBsb3cuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDI1NSAqLwogfUZNQ19QQ0NBUkRfSW5pdFR5cGVEZWY7Ci0jZW5kaWYKKyNlbmRpZiAvKiBGTUNfQkFOSzQgKi8KIAogLyoqCiAgICogQH0KQEAgLTUzNCw3ICs1MzQsNyBAQAogICAqLwogI2lmIGRlZmluZWQoRk1DX0JBTks0KQogI2RlZmluZSBGTUNfUENSX01FTU9SWV9UWVBFX1BDQ0FSRCAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKQotI2VuZGlmCisjZW5kaWYgLyogRk1DX0JBTks0ICovCiAjZGVmaW5lIEZNQ19QQ1JfTUVNT1JZX1RZUEVfTkFORCAgICAgICAgICAgICAgICAoMHgwMDAwMDAwOFUpCiAvKioKICAgKiBAfQpAQCAtNTc0LDcgKzU3NCw3IEBACiAvKioKICAgKiBAfQogICAqLwotI2VuZGlmIC8qIEZNQ19CQU5LMyAqLworI2VuZGlmIC8qIEZNQ19CQU5LMyB8fCBGTUNfQkFOSzQgKi8KIAogCiAvKiogQGRlZmdyb3VwIEZNQ19MTF9JbnRlcnJ1cHRfZGVmaW5pdGlvbiBGTUMgTG93IExheWVyIEludGVycnVwdCBkZWZpbml0aW9uCkBAIC01ODQsNyArNTg0LDcgQEAKICNkZWZpbmUgRk1DX0lUX1JJU0lOR19FREdFICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDA4VSkKICNkZWZpbmUgRk1DX0lUX0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDEwVSkKICNkZWZpbmUgRk1DX0lUX0ZBTExJTkdfRURHRSAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDIwVSkKLSNlbmRpZiAvKiBGTUNfQkFOSzMgKi8KKyNlbmRpZiAvKiBGTUNfQkFOSzMgfHwgRk1DX0JBTks0ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNTk3LDcgKzU5Nyw3IEBACiAjZGVmaW5lIEZNQ19GTEFHX0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMlUpCiAjZGVmaW5lIEZNQ19GTEFHX0ZBTExJTkdfRURHRSAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwNFUpCiAjZGVmaW5lIEZNQ19GTEFHX0ZFTVBUICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDA0MFUpCi0jZW5kaWYgLyogRk1DX0JBTkszICovCisjZW5kaWYgLyogRk1DX0JBTkszIHx8IEZNQ19CQU5LNCAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTY3MCw3ICs2NzAsNyBAQAogLyoqCiAgICogQH0KICAgKi8KLSNlbmRpZgorI2VuZGlmIC8qIEZNQ19CQU5LMyAqLwogCiAjaWYgZGVmaW5lZChGTUNfQkFOSzQpCiAvKiogQGRlZmdyb3VwIEZNQ19MTF9QQ0NBUkRfTWFjcm9zIEZNQyBQQ0NBUkQgTWFjcm9zCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmM3h4X2xsX2dwaW8uaCBiL0luYy9zdG0zMmYzeHhfbGxfZ3Bpby5oCmluZGV4IDBlMjNlN2UuLjNkZTU5NzAgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfbGxfZ3Bpby5oCisrKyBiL0luYy9zdG0zMmYzeHhfbGxfZ3Bpby5oCkBAIC05NzUsMyArOTc1LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYzeHhfTExfR1BJT19IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfbGxfaHJ0aW0uaCBiL0luYy9zdG0zMmYzeHhfbGxfaHJ0aW0uaAppbmRleCBjZGM2NWEyLi4yMThmOGU0IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2xsX2hydGltLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9sbF9ocnRpbS5oCkBAIC0zNzgsMTAgKzM3OCwxMCBAQAogICAqIEB7CiAgICogQGJyaWVmIENvbnN0YW50cyBkZWZpbmluZyB0aGUgc291cmNlIGFuZCBldmVudCB0byBiZSBzZW50IG9uIHRoZSBzeW5jaHJvbml6YXRpb24gb3V0cHV0LgogICAqLwotI2RlZmluZSBMTF9IUlRJTV9TWU5DT1VUX1NSQ19NQVNURVJfU1RBUlQgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBIHB1bHNlIGlzIHNlbnQgb24gdGhlIFNZTkNPVVQgb3V0cHV0IHVwb24gbWFzdGVyIHRpbWVyIHN0YXJ0IGV2ZW50ICovCi0jZGVmaW5lIExMX0hSVElNX1NZTkNPVVRfU1JDX01BU1RFUl9DTVAxICAgKEhSVElNX01DUl9TWU5DX1NSQ18wKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEEgcHVsc2UgaXMgc2VudCBvbiB0aGUgU1lOQ09VVCBvdXRwdXQgdXBvbiBtYXN0ZXIgdGltZXIgY29tcGFyZSAxIGV2ZW50Ki8KLSNkZWZpbmUgTExfSFJUSU1fU1lOQ09VVF9TUkNfVElNQV9TVEFSVCAgICAoSFJUSU1fTUNSX1NZTkNfU1JDXzEpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQSBwdWxzZSBpcyBzZW50IG9uIHRoZSBTWU5DT1VUIG91dHB1dCB1cG9uIHRpbWVyIEEgc3RhcnQgb3IgcmVzZXQgZXZlbnRzICovCi0jZGVmaW5lIExMX0hSVElNX1NZTkNPVVRfU1JDX1RJTUFfQ01QMSAgICAgKEhSVElNX01DUl9TWU5DX1NSQ18xIHwgSFJUSU1fTUNSX1NZTkNfU1JDXzApICAvKiE8IEEgcHVsc2UgaXMgc2VudCBvbiB0aGUgU1lOQ09VVCBvdXRwdXQgdXBvbiB0aW1lciBBIGNvbXBhcmUgMSBldmVudCAqLworI2RlZmluZSBMTF9IUlRJTV9TWU5DT1VUX1NSQ19NQVNURVJfU1RBUlQgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBIHB1bHNlIGlzIHNlbnQgb24gSFJUSU1fU0NPVVQgb3V0cHV0IGFuZCBocnRpbV9vdXRfc3luYzIgdXBvbiBtYXN0ZXIgdGltZXIgc3RhcnQgZXZlbnQgICAgICAqLworI2RlZmluZSBMTF9IUlRJTV9TWU5DT1VUX1NSQ19NQVNURVJfQ01QMSAgIChIUlRJTV9NQ1JfU1lOQ19TUkNfMCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBIHB1bHNlIGlzIHNlbnQgb24gSFJUSU1fU0NPVVQgb3V0cHV0IGFuZCBocnRpbV9vdXRfc3luYzIgdXBvbiBtYXN0ZXIgdGltZXIgY29tcGFyZSAxIGV2ZW50ICAqLworI2RlZmluZSBMTF9IUlRJTV9TWU5DT1VUX1NSQ19USU1BX1NUQVJUICAgIChIUlRJTV9NQ1JfU1lOQ19TUkNfMSkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBIHB1bHNlIGlzIHNlbnQgb24gSFJUSU1fU0NPVVQgb3V0cHV0IGFuZCBocnRpbV9vdXRfc3luYzIgdXBvbiB0aW1lciBBIHN0YXJ0IG9yIHJlc2V0IGV2ZW50cyAqLworI2RlZmluZSBMTF9IUlRJTV9TWU5DT1VUX1NSQ19USU1BX0NNUDEgICAgIChIUlRJTV9NQ1JfU1lOQ19TUkNfMSB8IEhSVElNX01DUl9TWU5DX1NSQ18wKSAgLyohPCBBIHB1bHNlIGlzIHNlbnQgb24gSFJUSU1fU0NPVVQgb3V0cHV0IGFuZCBocnRpbV9vdXRfc3luYzIgdXBvbiB0aW1lciBBIGNvbXBhcmUgMSBldmVudCAgICAgICAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTEwNTk3LDMgKzEwNTk3LDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogU1RNMzJGM3h4X0xMX0hSVElNX0ggKi8KKworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmM3h4X2xsX2kyYy5oIGIvSW5jL3N0bTMyZjN4eF9sbF9pMmMuaAppbmRleCAyNmJhN2JhLi4wMWRjYzIyIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2xsX2kyYy5oCisrKyBiL0luYy9zdG0zMmYzeHhfbGxfaTJjLmgKQEAgLTQ1MSw3ICs0NTEsNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZChJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChJMkN4LT5DUjEsIEkyQ19DUjFfUEUpID09IChJMkNfQ1IxX1BFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNTAwLDcgKzUwMCw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwIGFuZCBNYXhfRGF0YT0weEYKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfR2V0RGlnaXRhbEZpbHRlcihJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfR2V0RGlnaXRhbEZpbHRlcihjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoSTJDeC0+Q1IxLCBJMkNfQ1IxX0RORikgPj4gSTJDX0NSMV9ETkZfUG9zKTsKIH0KQEAgLTUzNSw3ICs1MzUsNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZEFuYWxvZ0ZpbHRlcihJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkQW5hbG9nRmlsdGVyKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChJMkN4LT5DUjEsIEkyQ19DUjFfQU5GT0ZGKSAhPSAoSTJDX0NSMV9BTkZPRkYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC01NjgsNyArNTY4LDcgQEAKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0VuYWJsZWRETUFSZXFfVFgoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZERNQVJlcV9UWChjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoSTJDeC0+Q1IxLCBJMkNfQ1IxX1RYRE1BRU4pID09IChJMkNfQ1IxX1RYRE1BRU4pKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC02MDEsNyArNjAxLDcgQEAKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0VuYWJsZWRETUFSZXFfUlgoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZERNQVJlcV9SWChjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoSTJDeC0+Q1IxLCBJMkNfQ1IxX1JYRE1BRU4pID09IChJMkNfQ1IxX1JYRE1BRU4pKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC02MTYsNyArNjE2LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JMkNfRE1BX1JFR19EQVRBX1JFQ0VJVkUKICAgKiBAcmV0dmFsIEFkZHJlc3Mgb2YgZGF0YSByZWdpc3RlcgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19ETUFfR2V0UmVnQWRkcihJMkNfVHlwZURlZiAqSTJDeCwgdWludDMyX3QgRGlyZWN0aW9uKQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19ETUFfR2V0UmVnQWRkcihjb25zdCBJMkNfVHlwZURlZiAqSTJDeCwgdWludDMyX3QgRGlyZWN0aW9uKQogewogICB1aW50MzJfdCBkYXRhX3JlZ19hZGRyOwogCkBAIC02NjQsNyArNjY0LDcgQEAKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0VuYWJsZWRDbG9ja1N0cmV0Y2hpbmcoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZENsb2NrU3RyZXRjaGluZyhjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoSTJDeC0+Q1IxLCBJMkNfQ1IxX05PU1RSRVRDSCkgIT0gKEkyQ19DUjFfTk9TVFJFVENIKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNjk3LDcgKzY5Nyw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkU2xhdmVCeXRlQ29udHJvbChJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkU2xhdmVCeXRlQ29udHJvbChjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoSTJDeC0+Q1IxLCBJMkNfQ1IxX1NCQykgPT0gKEkyQ19DUjFfU0JDKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNzM3LDcgKzczNyw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkV2FrZVVwRnJvbVN0b3AoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZFdha2VVcEZyb21TdG9wKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChJMkN4LT5DUjEsIEkyQ19DUjFfV1VQRU4pID09IChJMkNfQ1IxX1dVUEVOKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNzcyLDcgKzc3Miw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkR2VuZXJhbENhbGwoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZEdlbmVyYWxDYWxsKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChJMkN4LT5DUjEsIEkyQ19DUjFfR0NFTikgPT0gKEkyQ19DUjFfR0NFTikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTgwMCw3ICs4MDAsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0kyQ19BRERSRVNTSU5HX01PREVfN0JJVAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0kyQ19BRERSRVNTSU5HX01PREVfMTBCSVQKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfR2V0TWFzdGVyQWRkcmVzc2luZ01vZGUoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0dldE1hc3RlckFkZHJlc3NpbmdNb2RlKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChJMkN4LT5DUjIsIEkyQ19DUjJfQUREMTApKTsKIH0KQEAgLTg0OSw3ICs4NDksNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZE93bkFkZHJlc3MxKEkyQ19UeXBlRGVmICpJMkN4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0VuYWJsZWRPd25BZGRyZXNzMShjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoSTJDeC0+T0FSMSwgSTJDX09BUjFfT0ExRU4pID09IChJMkNfT0FSMV9PQTFFTikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTkwNSw3ICs5MDUsNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZE93bkFkZHJlc3MyKEkyQ19UeXBlRGVmICpJMkN4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0VuYWJsZWRPd25BZGRyZXNzMihjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoSTJDeC0+T0FSMiwgSTJDX09BUjJfT0EyRU4pID09IChJMkNfT0FSMl9PQTJFTikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTkzMCw3ICs5MzAsNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MCBhbmQgTWF4X0RhdGE9MHhGCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0dldFRpbWluZ1ByZXNjYWxlcihJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfR2V0VGltaW5nUHJlc2NhbGVyKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChJMkN4LT5USU1JTkdSLCBJMkNfVElNSU5HUl9QUkVTQykgPj4gSTJDX1RJTUlOR1JfUFJFU0NfUG9zKTsKIH0KQEAgLTk0MSw3ICs5NDEsNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RkYKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfR2V0Q2xvY2tMb3dQZXJpb2QoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0dldENsb2NrTG93UGVyaW9kKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChJMkN4LT5USU1JTkdSLCBJMkNfVElNSU5HUl9TQ0xMKSA+PiBJMkNfVElNSU5HUl9TQ0xMX1Bvcyk7CiB9CkBAIC05NTIsNyArOTUyLDcgQEAKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgogICAqIEByZXR2YWwgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0dldENsb2NrSGlnaFBlcmlvZChJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfR2V0Q2xvY2tIaWdoUGVyaW9kKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChJMkN4LT5USU1JTkdSLCBJMkNfVElNSU5HUl9TQ0xIKSA+PiBJMkNfVElNSU5HUl9TQ0xIX1Bvcyk7CiB9CkBAIC05NjMsNyArOTYzLDcgQEAKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgogICAqIEByZXR2YWwgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAgYW5kIE1heF9EYXRhPTB4RgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19HZXREYXRhSG9sZFRpbWUoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0dldERhdGFIb2xkVGltZShjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoSTJDeC0+VElNSU5HUiwgSTJDX1RJTUlOR1JfU0RBREVMKSA+PiBJMkNfVElNSU5HUl9TREFERUxfUG9zKTsKIH0KQEAgLTk3NCw3ICs5NzQsNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MCBhbmQgTWF4X0RhdGE9MHhGCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0dldERhdGFTZXR1cFRpbWUoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0dldERhdGFTZXR1cFRpbWUoY29uc3QgSTJDX1R5cGVEZWYgKkkyQ3gpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKEkyQ3gtPlRJTUlOR1IsIEkyQ19USU1JTkdSX1NDTERFTCkgPj4gSTJDX1RJTUlOR1JfU0NMREVMX1Bvcyk7CiB9CkBAIC0xMDExLDcgKzEwMTEsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0kyQ19NT0RFX1NNQlVTX0RFVklDRQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0kyQ19NT0RFX1NNQlVTX0RFVklDRV9BUlAKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfR2V0TW9kZShJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfR2V0TW9kZShjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoSTJDeC0+Q1IxLCBJMkNfQ1IxX1NNQkhFTiB8IEkyQ19DUjFfU01CREVOKSk7CiB9CkBAIC0xMDYwLDcgKzEwNjAsNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZFNNQnVzQWxlcnQoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZFNNQnVzQWxlcnQoY29uc3QgSTJDX1R5cGVEZWYgKkkyQ3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKEkyQ3gtPkNSMSwgSTJDX0NSMV9BTEVSVEVOKSA9PSAoSTJDX0NSMV9BTEVSVEVOKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTA5OSw3ICsxMDk5LDcgQEAKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0VuYWJsZWRTTUJ1c1BFQyhJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkU01CdXNQRUMoY29uc3QgSTJDX1R5cGVEZWYgKkkyQ3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKEkyQ3gtPkNSMSwgSTJDX0NSMV9QRUNFTikgPT0gKEkyQ19DUjFfUEVDRU4pKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xMTUwLDcgKzExNTAsNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTAgYW5kIE1heF9EYXRhPTB4RkZGCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0dldFNNQnVzVGltZW91dEEoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0dldFNNQnVzVGltZW91dEEoY29uc3QgSTJDX1R5cGVEZWYgKkkyQ3gpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKEkyQ3gtPlRJTUVPVVRSLCBJMkNfVElNRU9VVFJfVElNRU9VVEEpKTsKIH0KQEAgLTExODIsNyArMTE4Miw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfSTJDX1NNQlVTX1RJTUVPVVRBX01PREVfU0NMX0xPVwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0kyQ19TTUJVU19USU1FT1VUQV9NT0RFX1NEQV9TQ0xfSElHSAogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19HZXRTTUJ1c1RpbWVvdXRBTW9kZShJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfR2V0U01CdXNUaW1lb3V0QU1vZGUoY29uc3QgSTJDX1R5cGVEZWYgKkkyQ3gpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKEkyQ3gtPlRJTUVPVVRSLCBJMkNfVElNRU9VVFJfVElETEUpKTsKIH0KQEAgLTEyMTAsNyArMTIxMCw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9MHhGRkYKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfR2V0U01CdXNUaW1lb3V0QihJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfR2V0U01CdXNUaW1lb3V0Qihjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoSTJDeC0+VElNRU9VVFIsIEkyQ19USU1FT1VUUl9USU1FT1VUQikgPj4gSTJDX1RJTUVPVVRSX1RJTUVPVVRCX1Bvcyk7CiB9CkBAIC0xMjY0LDcgKzEyNjQsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0kyQ19TTUJVU19BTExfVElNRU9VVAogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0VuYWJsZWRTTUJ1c1RpbWVvdXQoSTJDX1R5cGVEZWYgKkkyQ3gsIHVpbnQzMl90IENsb2NrVGltZW91dCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkU01CdXNUaW1lb3V0KGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4LCB1aW50MzJfdCBDbG9ja1RpbWVvdXQpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKEkyQ3gtPlRJTUVPVVRSLCAoSTJDX1RJTUVPVVRSX1RJTU9VVEVOIHwgSTJDX1RJTUVPVVRSX1RFWFRFTikpID09IFwKICAgICAgICAgICAgKENsb2NrVGltZW91dCkpID8gMVVMIDogMFVMKTsKQEAgLTEzMDYsNyArMTMwNiw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkSVRfVFgoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZElUX1RYKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChJMkN4LT5DUjEsIEkyQ19DUjFfVFhJRSkgPT0gKEkyQ19DUjFfVFhJRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTEzMzksNyArMTMzOSw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkSVRfUlgoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZElUX1JYKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChJMkN4LT5DUjEsIEkyQ19DUjFfUlhJRSkgPT0gKEkyQ19DUjFfUlhJRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTEzNzIsNyArMTM3Miw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkSVRfQUREUihJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkSVRfQUREUihjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoSTJDeC0+Q1IxLCBJMkNfQ1IxX0FERFJJRSkgPT0gKEkyQ19DUjFfQUREUklFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTQwNSw3ICsxNDA1LDcgQEAKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0VuYWJsZWRJVF9OQUNLKEkyQ19UeXBlRGVmICpJMkN4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0VuYWJsZWRJVF9OQUNLKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChJMkN4LT5DUjEsIEkyQ19DUjFfTkFDS0lFKSA9PSAoSTJDX0NSMV9OQUNLSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNDM4LDcgKzE0MzgsNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZElUX1NUT1AoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZElUX1NUT1AoY29uc3QgSTJDX1R5cGVEZWYgKkkyQ3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKEkyQ3gtPkNSMSwgSTJDX0NSMV9TVE9QSUUpID09IChJMkNfQ1IxX1NUT1BJRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE0NzcsNyArMTQ3Nyw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkSVRfVEMoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZElUX1RDKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChJMkN4LT5DUjEsIEkyQ19DUjFfVENJRSkgPT0gKEkyQ19DUjFfVENJRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE1MjgsNyArMTUyOCw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkSVRfRVJSKEkyQ19UeXBlRGVmICpJMkN4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0VuYWJsZWRJVF9FUlIoY29uc3QgSTJDX1R5cGVEZWYgKkkyQ3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKEkyQ3gtPkNSMSwgSTJDX0NSMV9FUlJJRSkgPT0gKEkyQ19DUjFfRVJSSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNTQ5LDcgKzE1NDksNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzQWN0aXZlRmxhZ19UWEUoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzQWN0aXZlRmxhZ19UWEUoY29uc3QgSTJDX1R5cGVEZWYgKkkyQ3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKEkyQ3gtPklTUiwgSTJDX0lTUl9UWEUpID09IChJMkNfSVNSX1RYRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE1NjIsNyArMTU2Miw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNBY3RpdmVGbGFnX1RYSVMoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzQWN0aXZlRmxhZ19UWElTKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChJMkN4LT5JU1IsIEkyQ19JU1JfVFhJUykgPT0gKEkyQ19JU1JfVFhJUykpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE1NzUsNyArMTU3NSw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNBY3RpdmVGbGFnX1JYTkUoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzQWN0aXZlRmxhZ19SWE5FKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChJMkN4LT5JU1IsIEkyQ19JU1JfUlhORSkgPT0gKEkyQ19JU1JfUlhORSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE1ODgsNyArMTU4OCw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNBY3RpdmVGbGFnX0FERFIoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzQWN0aXZlRmxhZ19BRERSKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChJMkN4LT5JU1IsIEkyQ19JU1JfQUREUikgPT0gKEkyQ19JU1JfQUREUikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE2MDEsNyArMTYwMSw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNBY3RpdmVGbGFnX05BQ0soSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzQWN0aXZlRmxhZ19OQUNLKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChJMkN4LT5JU1IsIEkyQ19JU1JfTkFDS0YpID09IChJMkNfSVNSX05BQ0tGKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTYxNCw3ICsxNjE0LDcgQEAKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0FjdGl2ZUZsYWdfU1RPUChJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNBY3RpdmVGbGFnX1NUT1AoY29uc3QgSTJDX1R5cGVEZWYgKkkyQ3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKEkyQ3gtPklTUiwgSTJDX0lTUl9TVE9QRikgPT0gKEkyQ19JU1JfU1RPUEYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNjI3LDcgKzE2MjcsNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzQWN0aXZlRmxhZ19UQyhJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNBY3RpdmVGbGFnX1RDKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChJMkN4LT5JU1IsIEkyQ19JU1JfVEMpID09IChJMkNfSVNSX1RDKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTY0MCw3ICsxNjQwLDcgQEAKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0FjdGl2ZUZsYWdfVENSKEkyQ19UeXBlRGVmICpJMkN4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0FjdGl2ZUZsYWdfVENSKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChJMkN4LT5JU1IsIEkyQ19JU1JfVENSKSA9PSAoSTJDX0lTUl9UQ1IpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNjUzLDcgKzE2NTMsNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzQWN0aXZlRmxhZ19CRVJSKEkyQ19UeXBlRGVmICpJMkN4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0FjdGl2ZUZsYWdfQkVSUihjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoSTJDeC0+SVNSLCBJMkNfSVNSX0JFUlIpID09IChJMkNfSVNSX0JFUlIpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNjY2LDcgKzE2NjYsNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzQWN0aXZlRmxhZ19BUkxPKEkyQ19UeXBlRGVmICpJMkN4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0FjdGl2ZUZsYWdfQVJMTyhjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoSTJDeC0+SVNSLCBJMkNfSVNSX0FSTE8pID09IChJMkNfSVNSX0FSTE8pKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNjc5LDcgKzE2NzksNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzQWN0aXZlRmxhZ19PVlIoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzQWN0aXZlRmxhZ19PVlIoY29uc3QgSTJDX1R5cGVEZWYgKkkyQ3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKEkyQ3gtPklTUiwgSTJDX0lTUl9PVlIpID09IChJMkNfSVNSX09WUikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE2OTQsNyArMTY5NCw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNBY3RpdmVTTUJ1c0ZsYWdfUEVDRVJSKEkyQ19UeXBlRGVmICpJMkN4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0FjdGl2ZVNNQnVzRmxhZ19QRUNFUlIoY29uc3QgSTJDX1R5cGVEZWYgKkkyQ3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKEkyQ3gtPklTUiwgSTJDX0lTUl9QRUNFUlIpID09IChJMkNfSVNSX1BFQ0VSUikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE3MDksNyArMTcwOSw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNBY3RpdmVTTUJ1c0ZsYWdfVElNRU9VVChJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNBY3RpdmVTTUJ1c0ZsYWdfVElNRU9VVChjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoSTJDeC0+SVNSLCBJMkNfSVNSX1RJTUVPVVQpID09IChJMkNfSVNSX1RJTUVPVVQpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNzI1LDcgKzE3MjUsNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzQWN0aXZlU01CdXNGbGFnX0FMRVJUKEkyQ19UeXBlRGVmICpJMkN4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0FjdGl2ZVNNQnVzRmxhZ19BTEVSVChjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoSTJDeC0+SVNSLCBJMkNfSVNSX0FMRVJUKSA9PSAoSTJDX0lTUl9BTEVSVCkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE3MzgsNyArMTczOCw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNBY3RpdmVGbGFnX0JVU1koSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzQWN0aXZlRmxhZ19CVVNZKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChJMkN4LT5JU1IsIEkyQ19JU1JfQlVTWSkgPT0gKEkyQ19JU1JfQlVTWSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE4OTksNyArMTg5OSw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkQXV0b0VuZE1vZGUoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZEF1dG9FbmRNb2RlKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChJMkN4LT5DUjIsIEkyQ19DUjJfQVVUT0VORCkgPT0gKEkyQ19DUjJfQVVUT0VORCkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE5MzQsNyArMTkzNCw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkUmVsb2FkTW9kZShJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfSXNFbmFibGVkUmVsb2FkTW9kZShjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoSTJDeC0+Q1IyLCBJMkNfQ1IyX1JFTE9BRCkgPT0gKEkyQ19DUjJfUkVMT0FEKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTk1OCw3ICsxOTU4LDcgQEAKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgogICAqIEByZXR2YWwgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAgYW5kIE1heF9EYXRhPTB4RkYKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfR2V0VHJhbnNmZXJTaXplKEkyQ19UeXBlRGVmICpJMkN4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19HZXRUcmFuc2ZlclNpemUoY29uc3QgSTJDX1R5cGVEZWYgKkkyQ3gpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKEkyQ3gtPkNSMiwgSTJDX0NSMl9OQllURVMpID4+IEkyQ19DUjJfTkJZVEVTX1Bvcyk7CiB9CkBAIC0yMDM1LDcgKzIwMzUsNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZEF1dG8xMEJpdFJlYWQoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZEF1dG8xMEJpdFJlYWQoY29uc3QgSTJDX1R5cGVEZWYgKkkyQ3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKEkyQ3gtPkNSMiwgSTJDX0NSMl9IRUFEMTBSKSAhPSAoSTJDX0NSMl9IRUFEMTBSKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjA2Myw3ICsyMDYzLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JMkNfUkVRVUVTVF9XUklURQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0kyQ19SRVFVRVNUX1JFQUQKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfR2V0VHJhbnNmZXJSZXF1ZXN0KEkyQ19UeXBlRGVmICpJMkN4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19HZXRUcmFuc2ZlclJlcXVlc3QoY29uc3QgSTJDX1R5cGVEZWYgKkkyQ3gpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKEkyQ3gtPkNSMiwgSTJDX0NSMl9SRF9XUk4pKTsKIH0KQEAgLTIwODcsNyArMjA4Nyw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwIGFuZCBNYXhfRGF0YT0weDNGCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0dldFNsYXZlQWRkcihJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfR2V0U2xhdmVBZGRyKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChJMkN4LT5DUjIsIEkyQ19DUjJfU0FERCkpOwogfQpAQCAtMjE1MCw3ICsyMTUwLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JMkNfRElSRUNUSU9OX1dSSVRFCiAgICogICAgICAgICBAYXJnIEByZWYgTExfSTJDX0RJUkVDVElPTl9SRUFECiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0dldFRyYW5zZmVyRGlyZWN0aW9uKEkyQ19UeXBlRGVmICpJMkN4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19HZXRUcmFuc2ZlckRpcmVjdGlvbihjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoSTJDeC0+SVNSLCBJMkNfSVNSX0RJUikpOwogfQpAQCAtMjE2MSw3ICsyMTYxLDcgQEAKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgogICAqIEByZXR2YWwgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weDNGCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0dldEFkZHJlc3NNYXRjaENvZGUoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0dldEFkZHJlc3NNYXRjaENvZGUoY29uc3QgSTJDX1R5cGVEZWYgKkkyQ3gpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKEkyQ3gtPklTUiwgSTJDX0lTUl9BRERDT0RFKSA+PiBJMkNfSVNSX0FERENPREVfUG9zIDw8IDEpOwogfQpAQCAtMjE5MSw3ICsyMTkxLDcgQEAKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyQ19Jc0VuYWJsZWRTTUJ1c1BFQ0NvbXBhcmUoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0lzRW5hYmxlZFNNQnVzUEVDQ29tcGFyZShjb25zdCBJMkNfVHlwZURlZiAqSTJDeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoSTJDeC0+Q1IyLCBJMkNfQ1IyX1BFQ0JZVEUpID09IChJMkNfQ1IyX1BFQ0JZVEUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0yMjA0LDcgKzIyMDQsNyBAQAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RkYKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMkNfR2V0U01CdXNQRUMoSTJDX1R5cGVEZWYgKkkyQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0dldFNNQnVzUEVDKGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChJMkN4LT5QRUNSLCBJMkNfUEVDUl9QRUMpKTsKIH0KQEAgLTIyMTUsNyArMjIxNSw3IEBACiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KICAgKiBAcmV0dmFsIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwMCBhbmQgTWF4X0RhdGE9MHhGRgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQ4X3QgTExfSTJDX1JlY2VpdmVEYXRhOChJMkNfVHlwZURlZiAqSTJDeCkKK19fU1RBVElDX0lOTElORSB1aW50OF90IExMX0kyQ19SZWNlaXZlRGF0YTgoY29uc3QgSTJDX1R5cGVEZWYgKkkyQ3gpCiB7CiAgIHJldHVybiAodWludDhfdCkoUkVBRF9CSVQoSTJDeC0+UlhEUiwgSTJDX1JYRFJfUlhEQVRBKSk7CiB9CkBAIC0yMjQxLDggKzIyNDEsOCBAQAogICAqIEB7CiAgICovCiAKLUVycm9yU3RhdHVzIExMX0kyQ19Jbml0KEkyQ19UeXBlRGVmICpJMkN4LCBMTF9JMkNfSW5pdFR5cGVEZWYgKkkyQ19Jbml0U3RydWN0KTsKLUVycm9yU3RhdHVzIExMX0kyQ19EZUluaXQoSTJDX1R5cGVEZWYgKkkyQ3gpOworRXJyb3JTdGF0dXMgTExfSTJDX0luaXQoSTJDX1R5cGVEZWYgKkkyQ3gsIGNvbnN0IExMX0kyQ19Jbml0VHlwZURlZiAqSTJDX0luaXRTdHJ1Y3QpOworRXJyb3JTdGF0dXMgTExfSTJDX0RlSW5pdChjb25zdCBJMkNfVHlwZURlZiAqSTJDeCk7CiB2b2lkIExMX0kyQ19TdHJ1Y3RJbml0KExMX0kyQ19Jbml0VHlwZURlZiAqSTJDX0luaXRTdHJ1Y3QpOwogCiAKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfbGxfb3BhbXAuaCBiL0luYy9zdG0zMmYzeHhfbGxfb3BhbXAuaAppbmRleCA4OWQ4MTk4Li5kODJlNWEzIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2xsX29wYW1wLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9sbF9vcGFtcC5oCkBAIC0xNzIsNyArMTcyLDcgQEAKICAgKi8KICNkZWZpbmUgTExfT1BBTVBfSU5QVVRfSU5WRVJUX0lPMCAgICAgICAgKDB4MDAwMDAwMDBVKSAgICAgICAgICAgLyohPCBPUEFNUCBpbnZlcnRpbmcgaW5wdXQgY29ubmVjdGVkIHRvIEdQSU8gcGluIChwaW4gUEM1IGZvciBPUEFNUDEsIHBpbiBQQzUgZm9yIE9QQU1QMiwgcGluIFBCMTAgIGZvciBPUEFNUDMsIHBpbiBQQjEwIGZvciBPUEFNUDQpLiBOb3RlOiBPUEFNUCBpbnZlcnRpbmcgaW5wdXQgaXMgdXNlZCB3aXRoIE9QQU1QIGluIG1vZGUgc3RhbmRhbG9uZSBvciBQR0Egd2l0aCBleHRlcm5hbCBjYXBhY2l0b3JzIGZvciBmaWx0ZXJpbmcgY2lyY3VpdC4gT3RoZXJ3aXNlIChPUEFNUCBpbiBtb2RlIGZvbGxvd2VyKSwgT1BBTVAgaW52ZXJ0aW5nIGlucHV0IGlzIG5vdCB1c2VkIChub3QgY29ubmVjdGVkIHRvIEdQSU8gcGluKS4gKi8KICNkZWZpbmUgTExfT1BBTVBfSU5QVVRfSU5WRVJUX0lPMSAgICAgICAgKE9QQU1QX0NTUl9WTVNFTF8wKSAgICAgLyohPCBPUEFNUCBpbnZlcnRpbmcgaW5wdXQgY29ubmVjdGVkIHRvIEdQSU8gcGluIChwaW4gUEEzIGZvciBPUEFNUDEsIHBpbiBQQTUgZm9yIE9QQU1QMiwgcGluIFBCMiAgIGZvciBPUEFNUDMsIHBpbiBQRDggIGZvciBPUEFNUDQpLiBOb3RlOiBPUEFNUCBpbnZlcnRpbmcgaW5wdXQgaXMgdXNlZCB3aXRoIE9QQU1QIGluIG1vZGUgc3RhbmRhbG9uZSBvciBQR0Egd2l0aCBleHRlcm5hbCBjYXBhY2l0b3JzIGZvciBmaWx0ZXJpbmcgY2lyY3VpdC4gT3RoZXJ3aXNlIChPUEFNUCBpbiBtb2RlIGZvbGxvd2VyKSwgT1BBTVAgaW52ZXJ0aW5nIGlucHV0IGlzIG5vdCB1c2VkIChub3QgY29ubmVjdGVkIHRvIEdQSU8gcGluKS4gKi8KLSNkZWZpbmUgTExfT1BBTVBfSU5QVVRfSU5WRVJUX0NPTk5FQ1RfTk8gKE9QQU1QX0NTUl9WTVNFTF8xKSAgICAgLyohPCBPUEFNUCBpbnZlcnRpbmcgaW5wdXQgbm90IGV4dGVybmFsbHkgY29ubmVjdGVkIChpbnRlbmRlZCBmb3IgT1BBTVAgaW4gbW9kZSBmb2xsb3dlciBvciBQR0Egd2l0aG91dCBleHRlcm5hbCBjYXBhY2l0b3JzIGZvciBmaWx0ZXJpbmcpLiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGlzIGxpdGVyYWwgaW5jbHVkZSBjYXNlcyBvZiB2YWx1ZSAweDExIGZvciBtb2RlIGZvbGxvd2VyIGFuZCB2YWx1ZSAweDEwIGZvciBtb2RlIFBHQS4gKi8KKyNkZWZpbmUgTExfT1BBTVBfSU5QVVRfSU5WRVJUX0NPTk5FQ1RfTk8gKE9QQU1QX0NTUl9WTVNFTF8xKSAgICAgLyohPCBPUEFNUCBpbnZlcnRpbmcgaW5wdXQgbm90IGV4dGVybmFsbHkgY29ubmVjdGVkIChpbnRlbmRlZCBmb3IgT1BBTVAgaW4gbW9kZSBmb2xsb3dlciBvciBQR0Egd2l0aG91dCBleHRlcm5hbCBjYXBhY2l0b3JzIGZvciBmaWx0ZXJpbmcpLiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgdGhpcyBsaXRlcmFsIGluY2x1ZGUgY2FzZXMgb2YgdmFsdWUgMHgxMSBmb3IgbW9kZSBmb2xsb3dlciBhbmQgdmFsdWUgMHgxMCBmb3IgbW9kZSBQR0EuICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjQxLDcgKzI0MSw3IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgT1BBTVBfTExfRUNfSFdfREVMQVlTICBEZWZpbml0aW9ucyBvZiBPUEFNUCBoYXJkd2FyZSBjb25zdHJhaW50cyBkZWxheXMKLSAgKiBAbm90ZSAgIE9ubHkgT1BBTVAgSVAgSFcgZGVsYXlzIGFyZSBkZWZpbmVkIGluIE9QQU1QIExMIGRyaXZlciBkcml2ZXIsCisgICogQG5vdGUgICBPbmx5IE9QQU1QIHBlcmlwaGVyYWwgSFcgZGVsYXlzIGFyZSBkZWZpbmVkIGluIE9QQU1QIExMIGRyaXZlciBkcml2ZXIsCiAgICogICAgICAgICBub3QgdGltZW91dCB2YWx1ZXMuCiAgICogICAgICAgICBGb3IgZGV0YWlscyBvbiBkZWxheXMgdmFsdWVzLCByZWZlciB0byBkZXNjcmlwdGlvbnMgaW4gc291cmNlIGNvZGUKICAgKiAgICAgICAgIGFib3ZlIGVhY2ggbGl0ZXJhbCBkZWZpbml0aW9uLgpAQCAtNzgzLDcgKzc4Myw3IEBACiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBPUEFNUCBpbnN0YW5jZS4KICAgKiBAbm90ZSAgIEFmdGVyIGVuYWJsZSBmcm9tIG9mZiBzdGF0ZSwgT1BBTVAgcmVxdWlyZXMgYSBkZWxheQotICAqICAgICAgICAgdG8gZnVsbGZpbGwgd2FrZSB1cCB0aW1lIHNwZWNpZmljYXRpb24uCisgICogICAgICAgICB0byBmdWxmaWxsIHdha2UgdXAgdGltZSBzcGVjaWZpY2F0aW9uLgogICAqICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCwgcGFyYW1ldGVyICJ0V0FLRVVQIi4KICAgKiBAcm10b2xsIENTUiAgICAgIE9QQU1QWEVOICAgICAgIExMX09QQU1QX0VuYWJsZQogICAqIEBwYXJhbSAgT1BBTVB4IE9QQU1QIGluc3RhbmNlCkBAIC04ODEsMyArODgxLDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogU1RNMzJGM3h4X0xMX09QQU1QX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9sbF9yY2MuaCBiL0luYy9zdG0zMmYzeHhfbGxfcmNjLmgKaW5kZXggNGFiNzZhZS4uNGZiZmYxNSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjN4eF9sbF9yY2MuaAorKysgYi9JbmMvc3RtMzJmM3h4X2xsX3JjYy5oCkBAIC05LDEwICs5LDkgQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCkBAIC0yODM3LDMgKzI4MzYsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjN4eF9MTF9SQ0NfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmM3h4X2xsX3J0Yy5oIGIvSW5jL3N0bTMyZjN4eF9sbF9ydGMuaAppbmRleCBmZWRhYzNiLi42NDQ5YmM4IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2xsX3J0Yy5oCisrKyBiL0luYy9zdG0zMmYzeHhfbGxfcnRjLmgKQEAgLTE3LDggKzE3LDggQEAKICAgKi8KIAogLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNpZm5kZWYgX19TVE0zMkYzeHhfTExfUlRDX0gKLSNkZWZpbmUgX19TVE0zMkYzeHhfTExfUlRDX0gKKyNpZm5kZWYgU1RNMzJGM3h4X0xMX1JUQ19ICisjZGVmaW5lIFNUTTMyRjN4eF9MTF9SVENfSAogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpAQCAtNDUsNyArNDUsNyBAQAogICAqLwogLyogTWFza3MgRGVmaW5pdGlvbiAqLwogI2RlZmluZSBSVENfSU5JVF9NQVNLICAgICAgICAgICAgICAgICAweEZGRkZGRkZGVQotI2RlZmluZSBSVENfUlNGX01BU0sgICAgICAgICAgICAgICAgICAweEZGRkZGRjVGVQorI2RlZmluZSBSVENfUlNGX01BU0sgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KX4oUlRDX0lTUl9JTklUIHwgUlRDX0lTUl9SU0YpKQogCiAvKiBXcml0ZSBwcm90ZWN0aW9uIGRlZmluZXMgKi8KICNkZWZpbmUgUlRDX1dSSVRFX1BST1RFQ1RJT05fRElTQUJMRSAgKCh1aW50OF90KTB4RkZVKQpAQCAtMTY3LDcgKzE2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgUlRDX0xMX0VDX0FMTUFfTUFTSyBmb3IgQUxBUk0gQSBvciBAcmVmIFJUQ19MTF9FQ19BTE1CX01BU0sgZm9yIEFMQVJNIEIuCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9SVENfQUxNQV9TZXRNYXNrKCkgZm9yIEFMQVJNIEEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgQHJlZiBMTF9SVENfQUxNQl9TZXRNYXNrKCkgZm9yIEFMQVJNIEIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgQHJlZiBMTF9SVENfQUxNQl9TZXRNYXNrKCkgZm9yIEFMQVJNIEIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAgIHVpbnQzMl90IEFsYXJtRGF0ZVdlZWtEYXlTZWw7ICAvKiE8IFNwZWNpZmllcyB0aGUgUlRDIEFsYXJtIGlzIG9uIGRheSBvciBXZWVrRGF5LgpAQCAtMjA0LDggKzIwNCw4IEBACiAvKiogQGRlZmdyb3VwIFJUQ19MTF9FQ19GT1JNQVQgRk9STUFUCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfUlRDX0ZPUk1BVF9CSU4gICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMFUgLyohPCBCaW5hcnkgZGF0YSBmb3JtYXQgKi8KLSNkZWZpbmUgTExfUlRDX0ZPUk1BVF9CQ0QgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMVUgLyohPCBCQ0QgZGF0YSBmb3JtYXQgKi8KKyNkZWZpbmUgTExfUlRDX0ZPUk1BVF9CSU4gICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVSAvKiE8IEJpbmFyeSBkYXRhIGZvcm1hdCAqLworI2RlZmluZSBMTF9SVENfRk9STUFUX0JDRCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVIC8qITwgQkNEIGRhdGEgZm9ybWF0ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjM1LDcgKzIzNSw5IEBACiAgICogQHsKICAgKi8KICNkZWZpbmUgTExfUlRDX0lTUl9SRUNBTFBGICAgICAgICAgICAgICAgICBSVENfSVNSX1JFQ0FMUEYKKyNpZiBkZWZpbmVkKFJUQ19UQU1QRVIzX1NVUFBPUlQpCiAjZGVmaW5lIExMX1JUQ19JU1JfVEFNUDNGICAgICAgICAgICAgICAgICAgUlRDX0lTUl9UQU1QM0YKKyNlbmRpZiAvKiBSVENfVEFNUEVSM19TVVBQT1JUICovCiAjZGVmaW5lIExMX1JUQ19JU1JfVEFNUDJGICAgICAgICAgICAgICAgICAgUlRDX0lTUl9UQU1QMkYKICNkZWZpbmUgTExfUlRDX0lTUl9UQU1QMUYgICAgICAgICAgICAgICAgICBSVENfSVNSX1RBTVAxRgogI2RlZmluZSBMTF9SVENfSVNSX1RTT1ZGICAgICAgICAgICAgICAgICAgIFJUQ19JU1JfVFNPVkYKQEAgLTM5MSwxMSArMzkzLDExIEBACiAvKiogQGRlZmdyb3VwIFJUQ19MTF9FQ19BTE1CX01BU0sgIEFMQVJNQiBNQVNLCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfUlRDX0FMTUJfTUFTS19OT05FICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAvKiE8IE5vIG1hc2tzIGFwcGxpZWQgb24gQWxhcm0gQiovCisjZGVmaW5lIExMX1JUQ19BTE1CX01BU0tfTk9ORSAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgLyohPCBObyBtYXNrcyBhcHBsaWVkIG9uIEFsYXJtIEIgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTExfUlRDX0FMTUJfTUFTS19EQVRFV0VFS0RBWSAgICAgICBSVENfQUxSTUJSX01TSzQgICAgICAgICAvKiE8IERhdGUvZGF5IGRvIG5vdCBjYXJlIGluIEFsYXJtIEIgY29tcGFyaXNvbiAqLwotI2RlZmluZSBMTF9SVENfQUxNQl9NQVNLX0hPVVJTICAgICAgICAgICAgIFJUQ19BTFJNQlJfTVNLMyAgICAgICAgIC8qITwgSG91cnMgZG8gbm90IGNhcmUgaW4gQWxhcm0gQiBjb21wYXJpc29uICovCi0jZGVmaW5lIExMX1JUQ19BTE1CX01BU0tfTUlOVVRFUyAgICAgICAgICAgUlRDX0FMUk1CUl9NU0syICAgICAgICAgLyohPCBNaW51dGVzIGRvIG5vdCBjYXJlIGluIEFsYXJtIEIgY29tcGFyaXNvbiAqLwotI2RlZmluZSBMTF9SVENfQUxNQl9NQVNLX1NFQ09ORFMgICAgICAgICAgIFJUQ19BTFJNQlJfTVNLMSAgICAgICAgIC8qITwgU2Vjb25kcyBkbyBub3QgY2FyZSBpbiBBbGFybSBCIGNvbXBhcmlzb24gKi8KKyNkZWZpbmUgTExfUlRDX0FMTUJfTUFTS19IT1VSUyAgICAgICAgICAgICBSVENfQUxSTUJSX01TSzMgICAgICAgICAvKiE8IEhvdXJzIGRvIG5vdCBjYXJlIGluIEFsYXJtIEIgY29tcGFyaXNvbiAgICAqLworI2RlZmluZSBMTF9SVENfQUxNQl9NQVNLX01JTlVURVMgICAgICAgICAgIFJUQ19BTFJNQlJfTVNLMiAgICAgICAgIC8qITwgTWludXRlcyBkbyBub3QgY2FyZSBpbiBBbGFybSBCIGNvbXBhcmlzb24gICovCisjZGVmaW5lIExMX1JUQ19BTE1CX01BU0tfU0VDT05EUyAgICAgICAgICAgUlRDX0FMUk1CUl9NU0sxICAgICAgICAgLyohPCBTZWNvbmRzIGRvIG5vdCBjYXJlIGluIEFsYXJtIEIgY29tcGFyaXNvbiAgKi8KICNkZWZpbmUgTExfUlRDX0FMTUJfTUFTS19BTEwgICAgICAgICAgICAgICAoUlRDX0FMUk1CUl9NU0s0IHwgUlRDX0FMUk1CUl9NU0szIHwgUlRDX0FMUk1CUl9NU0syIHwgUlRDX0FMUk1CUl9NU0sxKSAvKiE8IE1hc2tzIGFsbCAqLwogLyoqCiAgICogQH0KQEAgLTQzMSwxMiArNDMzLDggQEAKIC8qKiBAZGVmZ3JvdXAgUlRDX0xMX0VDX1RBTVBFUiAgVEFNUEVSCiAgICogQHsKICAgKi8KLSNpZiBkZWZpbmVkKFJUQ19UQU1QRVIxX1NVUFBPUlQpCiAjZGVmaW5lIExMX1JUQ19UQU1QRVJfMSAgICAgICAgICAgICAgICAgICAgUlRDX1RBRkNSX1RBTVAxRSAvKiE8IFJUQ19UQU1QMSBpbnB1dCBkZXRlY3Rpb24gKi8KLSNlbmRpZiAvKiBSVENfVEFNUEVSMV9TVVBQT1JUICovCi0jaWYgZGVmaW5lZChSVENfVEFNUEVSMl9TVVBQT1JUKQogI2RlZmluZSBMTF9SVENfVEFNUEVSXzIgICAgICAgICAgICAgICAgICAgIFJUQ19UQUZDUl9UQU1QMkUgLyohPCBSVENfVEFNUDIgaW5wdXQgZGV0ZWN0aW9uICovCi0jZW5kaWYgLyogUlRDX1RBTVBFUjJfU1VQUE9SVCAqLwogI2lmIGRlZmluZWQoUlRDX1RBTVBFUjNfU1VQUE9SVCkKICNkZWZpbmUgTExfUlRDX1RBTVBFUl8zICAgICAgICAgICAgICAgICAgICBSVENfVEFGQ1JfVEFNUDNFIC8qITwgUlRDX1RBTVAzIGlucHV0IGRldGVjdGlvbiAqLwogI2VuZGlmIC8qIFJUQ19UQU1QRVIzX1NVUFBPUlQgKi8KQEAgLTQ0NCwzOSArNDQyLDYgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJUQ19MTF9FQ19UQU1QRVJfTUFTSyAgVEFNUEVSIE1BU0sKLSAgKiBAewotICAqLwotI2lmIGRlZmluZWQoUlRDX1RBTVBFUjFfU1VQUE9SVCkKLSNkZWZpbmUgTExfUlRDX1RBTVBFUl9NQVNLX1RBTVBFUjEgICAgICAgICBSVENfVEFGQ1JfVEFNUDFNRiAvKiE8IFRhbXBlciAxIGV2ZW50IGdlbmVyYXRlcyBhIHRyaWdnZXIgZXZlbnQuIFRBTVAxRiBpcyBtYXNrZWQgYW5kIGludGVybmFsbHkgY2xlYXJlZCBieSBoYXJkd2FyZS5UaGUgYmFja3VwIHJlZ2lzdGVycyBhcmUgbm90IGVyYXNlZCAqLwotI2VuZGlmIC8qIFJUQ19UQU1QRVIxX1NVUFBPUlQgKi8KLSNpZiBkZWZpbmVkKFJUQ19UQU1QRVIyX1NVUFBPUlQpCi0jZGVmaW5lIExMX1JUQ19UQU1QRVJfTUFTS19UQU1QRVIyICAgICAgICAgUlRDX1RBRkNSX1RBTVAyTUYgLyohPCBUYW1wZXIgMiBldmVudCBnZW5lcmF0ZXMgYSB0cmlnZ2VyIGV2ZW50LiBUQU1QMkYgaXMgbWFza2VkIGFuZCBpbnRlcm5hbGx5IGNsZWFyZWQgYnkgaGFyZHdhcmUuIFRoZSBiYWNrdXAgcmVnaXN0ZXJzIGFyZSBub3QgZXJhc2VkLiAqLwotI2VuZGlmIC8qIFJUQ19UQU1QRVIyX1NVUFBPUlQgKi8KLSNpZiBkZWZpbmVkKFJUQ19UQU1QRVIzX1NVUFBPUlQpCi0jZGVmaW5lIExMX1JUQ19UQU1QRVJfTUFTS19UQU1QRVIzICAgICAgICAgUlRDX1RBRkNSX1RBTVAzTUYgLyohPCBUYW1wZXIgMyBldmVudCBnZW5lcmF0ZXMgYSB0cmlnZ2VyIGV2ZW50LiBUQU1QM0YgaXMgbWFza2VkIGFuZCBpbnRlcm5hbGx5IGNsZWFyZWQgYnkgaGFyZHdhcmUuIFRoZSBiYWNrdXAgcmVnaXN0ZXJzIGFyZSBub3QgZXJhc2VkICovCi0jZW5kaWYgLyogUlRDX1RBTVBFUjNfU1VQUE9SVCAqLwotLyoqCi0gICogQH0KLSAgKi8KLQotLyoqIEBkZWZncm91cCBSVENfTExfRUNfVEFNUEVSX05PRVJBU0UgIFRBTVBFUiBOTyBFUkFTRQotICAqIEB7Ci0gICovCi0jaWYgZGVmaW5lZChSVENfVEFNUEVSMV9TVVBQT1JUKQotI2RlZmluZSBMTF9SVENfVEFNUEVSX05PRVJBU0VfVEFNUEVSMSAgICAgIFJUQ19UQUZDUl9UQU1QMU5PRVJBU0UgLyohPCBUYW1wZXIgMSBldmVudCBkb2VzIG5vdCBlcmFzZSB0aGUgYmFja3VwIHJlZ2lzdGVycy4gKi8KLSNlbmRpZiAvKiBSVENfVEFNUEVSMV9TVVBQT1JUICovCi0jaWYgZGVmaW5lZChSVENfVEFNUEVSMl9TVVBQT1JUKQotI2RlZmluZSBMTF9SVENfVEFNUEVSX05PRVJBU0VfVEFNUEVSMiAgICAgIFJUQ19UQUZDUl9UQU1QMk5PRVJBU0UgLyohPCBUYW1wZXIgMiBldmVudCBkb2VzIG5vdCBlcmFzZSB0aGUgYmFja3VwIHJlZ2lzdGVycy4gKi8KLSNlbmRpZiAvKiBSVENfVEFNUEVSMl9TVVBQT1JUICovCi0jaWYgZGVmaW5lZChSVENfVEFNUEVSM19TVVBQT1JUKQotI2RlZmluZSBMTF9SVENfVEFNUEVSX05PRVJBU0VfVEFNUEVSMyAgICAgIFJUQ19UQUZDUl9UQU1QM05PRVJBU0UgLyohPCBUYW1wZXIgMyBldmVudCBkb2VzIG5vdCBlcmFzZSB0aGUgYmFja3VwIHJlZ2lzdGVycy4gKi8KLSNlbmRpZiAvKiBSVENfVEFNUEVSM19TVVBQT1JUICovCi0vKioKLSAgKiBAfQotICAqLwotCi0jaWYgZGVmaW5lZChSVENfVEFGQ1JfVEFNUFBSQ0gpCiAvKiogQGRlZmdyb3VwIFJUQ19MTF9FQ19UQU1QRVJfRFVSQVRJT04gIFRBTVBFUiBEVVJBVElPTgogICAqIEB7CiAgICovCkBAIC00ODcsOSArNDUyLDcgQEAKIC8qKgogICAqIEB9CiAgICovCi0jZW5kaWYgLyogUlRDX1RBRkNSX1RBTVBQUkNIICovCiAKLSNpZiBkZWZpbmVkKFJUQ19UQUZDUl9UQU1QRkxUKQogLyoqIEBkZWZncm91cCBSVENfTExfRUNfVEFNUEVSX0ZJTFRFUiAgVEFNUEVSIEZJTFRFUgogICAqIEB7CiAgICovCkBAIC01MDAsOSArNDYzLDcgQEAKIC8qKgogICAqIEB9CiAgICovCi0jZW5kaWYgLyogUlRDX1RBRkNSX1RBTVBGTFQgKi8KIAotI2lmIGRlZmluZWQoUlRDX1RBRkNSX1RBTVBGUkVRKQogLyoqIEBkZWZncm91cCBSVENfTExfRUNfVEFNUEVSX1NBTVBMRlJFUURJViAgVEFNUEVSIFNBTVBMSU5HIEZSRVFVRU5DWSBESVZJREVSCiAgICogQHsKICAgKi8KQEAgLTUxNywxOSArNDc4LDE0IEBACiAvKioKICAgKiBAfQogICAqLwotI2VuZGlmIC8qIFJUQ19UQUZDUl9UQU1QRlJFUSAqLwogCiAvKiogQGRlZmdyb3VwIFJUQ19MTF9FQ19UQU1QRVJfQUNUSVZFTEVWRUwgIFRBTVBFUiBBQ1RJVkUgTEVWRUwKICAgKiBAewogICAqLwotI2lmIGRlZmluZWQoUlRDX1RBTVBFUjFfU1VQUE9SVCkKLSNkZWZpbmUgTExfUlRDX1RBTVBFUl9BQ1RJVkVMRVZFTF9UQU1QMSAgICBSVENfVEFGQ1JfVEFNUDFUUkcgLyohPCBSVENfVEFNUDEgaW5wdXQgZmFsbGluZyBlZGdlIChpZiBUQU1QRkxUID0gMDApIG9yIHN0YXlpbmcgaGlnaCAoaWYgVEFNUEZMVCAhPSAwMCkgdHJpZ2dlcnMgYSB0YW1wZXIgZGV0ZWN0aW9uIGV2ZW50Ki8KLSNlbmRpZiAvKiBSVENfVEFNUEVSMV9TVVBQT1JUICovCi0jaWYgZGVmaW5lZChSVENfVEFNUEVSMl9TVVBQT1JUKQotI2RlZmluZSBMTF9SVENfVEFNUEVSX0FDVElWRUxFVkVMX1RBTVAyICAgIFJUQ19UQUZDUl9UQU1QMlRSRyAvKiE8IFJUQ19UQU1QMiBpbnB1dCBmYWxsaW5nIGVkZ2UgKGlmIFRBTVBGTFQgPSAwMCkgb3Igc3RheWluZyBoaWdoIChpZiBUQU1QRkxUICE9IDAwKSB0cmlnZ2VycyBhIHRhbXBlciBkZXRlY3Rpb24gZXZlbnQqLwotI2VuZGlmIC8qIFJUQ19UQU1QRVIyX1NVUFBPUlQgKi8KKyNkZWZpbmUgTExfUlRDX1RBTVBFUl9BQ1RJVkVMRVZFTF9UQU1QMSAgICBSVENfVEFGQ1JfVEFNUDFUUkcgLyohPCBSVENfVEFNUDEgaW5wdXQgZmFsbGluZyBlZGdlIChpZiBUQU1QRkxUID0gMDApIG9yIHN0YXlpbmcgaGlnaCAoaWYgVEFNUEZMVCAhPSAwMCkgdHJpZ2dlcnMgYSB0YW1wZXIgZGV0ZWN0aW9uIGV2ZW50ICovCisjZGVmaW5lIExMX1JUQ19UQU1QRVJfQUNUSVZFTEVWRUxfVEFNUDIgICAgUlRDX1RBRkNSX1RBTVAyVFJHIC8qITwgUlRDX1RBTVAyIGlucHV0IGZhbGxpbmcgZWRnZSAoaWYgVEFNUEZMVCA9IDAwKSBvciBzdGF5aW5nIGhpZ2ggKGlmIFRBTVBGTFQgIT0gMDApIHRyaWdnZXJzIGEgdGFtcGVyIGRldGVjdGlvbiBldmVudCAqLwogI2lmIGRlZmluZWQoUlRDX1RBTVBFUjNfU1VQUE9SVCkKLSNkZWZpbmUgTExfUlRDX1RBTVBFUl9BQ1RJVkVMRVZFTF9UQU1QMyAgICBSVENfVEFGQ1JfVEFNUDNUUkcgLyohPCBSVENfVEFNUDMgaW5wdXQgZmFsbGluZyBlZGdlIChpZiBUQU1QRkxUID0gMDApIG9yIHN0YXlpbmcgaGlnaCAoaWYgVEFNUEZMVCAhPSAwMCkgdHJpZ2dlcnMgYSB0YW1wZXIgZGV0ZWN0aW9uIGV2ZW50Ki8KKyNkZWZpbmUgTExfUlRDX1RBTVBFUl9BQ1RJVkVMRVZFTF9UQU1QMyAgICBSVENfVEFGQ1JfVEFNUDNUUkcgLyohPCBSVENfVEFNUDMgaW5wdXQgZmFsbGluZyBlZGdlIChpZiBUQU1QRkxUID0gMDApIG9yIHN0YXlpbmcgaGlnaCAoaWYgVEFNUEZMVCAhPSAwMCkgdHJpZ2dlcnMgYSB0YW1wZXIgZGV0ZWN0aW9uIGV2ZW50ICovCiAjZW5kaWYgLyogUlRDX1RBTVBFUjNfU1VQUE9SVCAqLwogLyoqCiAgICogQH0KQEAgLTU0OCw3ICs1MDQsNiBAQAogICAqIEB9CiAgICovCiAKLSNpZiBkZWZpbmVkKFJUQ19CQUNLVVBfU1VQUE9SVCkKIC8qKiBAZGVmZ3JvdXAgUlRDX0xMX0VDX0JLUCAgQkFDS1VQCiAgICogQHsKICAgKi8KQEAgLTU1Nyw3ICs1MTIsNyBAQAogI2RlZmluZSBMTF9SVENfQktQX0RSMiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVCiAjZGVmaW5lIExMX1JUQ19CS1BfRFIzICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwM1UKICNkZWZpbmUgTExfUlRDX0JLUF9EUjQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VQotI2lmIFJUQ19CS1BfTlVNQkVSID4gNQorI2lmIFJUQ19CS1BfTlVNQkVSID4gNVUKICNkZWZpbmUgTExfUlRDX0JLUF9EUjUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1VQogI2RlZmluZSBMTF9SVENfQktQX0RSNiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDZVCiAjZGVmaW5lIExMX1JUQ19CS1BfRFI3ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwN1UKQEAgLTU2OSwxNiArNTI0LDEyIEBACiAjZGVmaW5lIExMX1JUQ19CS1BfRFIxMyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRFUKICNkZWZpbmUgTExfUlRDX0JLUF9EUjE0ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFVQogI2RlZmluZSBMTF9SVENfQktQX0RSMTUgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEZVCi0jZW5kaWYgLyogUlRDX0JLUF9OVU1CRVIgPiA1ICovCi0KLSNpZiBSVENfQktQX05VTUJFUiA+IDE2CisjaWYgUlRDX0JLUF9OVU1CRVIgPiAxNlUKICNkZWZpbmUgTExfUlRDX0JLUF9EUjE2ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwVQogI2RlZmluZSBMTF9SVENfQktQX0RSMTcgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTFVCiAjZGVmaW5lIExMX1JUQ19CS1BfRFIxOCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMlUKICNkZWZpbmUgTExfUlRDX0JLUF9EUjE5ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEzVQotI2VuZGlmIC8qIFJUQ19CS1BfTlVNQkVSID4gMTYgKi8KLQotI2lmIFJUQ19CS1BfTlVNQkVSID4gMjAKKyNpZiBSVENfQktQX05VTUJFUiA+IDIwVQogI2RlZmluZSBMTF9SVENfQktQX0RSMjAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTRVCiAjZGVmaW5lIExMX1JUQ19CS1BfRFIyMSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNVUKICNkZWZpbmUgTExfUlRDX0JLUF9EUjIyICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE2VQpAQCAtNTkxLDExICs1NDIsMTIgQEAKICNkZWZpbmUgTExfUlRDX0JLUF9EUjI5ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFEVQogI2RlZmluZSBMTF9SVENfQktQX0RSMzAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUVVCiAjZGVmaW5lIExMX1JUQ19CS1BfRFIzMSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRlUKLSNlbmRpZiAvKiBSVENfQktQX05VTUJFUiA+IDIwICovCisjZW5kaWYgLyogUlRDX0JLUF9OVU1CRVIgPiAyMFUgKi8KKyNlbmRpZiAvKiBSVENfQktQX05VTUJFUiA+IDE2VSAqLworI2VuZGlmIC8qIFJUQ19CS1BfTlVNQkVSID4gIDVVICovCiAvKioKICAgKiBAfQogICAqLwotI2VuZGlmIC8qIFJUQ19CQUNLVVBfU1VQUE9SVCAqLwogCiAvKiogQGRlZmdyb3VwIFJUQ19MTF9FQ19DQUxJQl9PVVRQVVQgIENhbGlicmF0aW9uIG91dHB1dAogICAqIEB7CkBAIC04NzcsOCArODI5LDggQEAKICAgKiBAbm90ZSAgIFBDMTMgZm9yY2VkIHRvIHB1c2gtcHVsbCBvdXRwdXQgaWYgYWxsIFJUQyBhbHRlcm5hdGUgZnVuY3Rpb25zIGFyZSBkaXNhYmxlZAogICAqIEBub3RlICAgUEMxNCBhbmQgUEMxNSBmb3JjZWQgdG8gcHVzaC1wdWxsIG91dHB1dCBpZiBMU0UgaXMgZGlzYWJsZWQKICAgKiBAcm10b2xsIFRBRkNSICAgICAgICBQQzEzTU9ERSAgTExfUlRDX0VuYWJsZVB1c2hQdWxsTW9kZVxuCi0gICogQHJtdG9sbCBUQUZDUiAgICAgICAgUEMxNE1PREUgIExMX1JUQ19FbmFibGVQdXNoUHVsbE1vZGVcbgotICAqIEBybXRvbGwgVEFGQ1IgICAgICAgIFBDMTVNT0RFICBMTF9SVENfRW5hYmxlUHVzaFB1bGxNb2RlCisgICogICAgICAgICBUQUZDUiAgICAgICAgUEMxNE1PREUgIExMX1JUQ19FbmFibGVQdXNoUHVsbE1vZGVcbgorICAqICAgICAgICAgVEFGQ1IgICAgICAgIFBDMTVNT0RFICBMTF9SVENfRW5hYmxlUHVzaFB1bGxNb2RlCiAgICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQogICAqIEBwYXJhbSAgUGluTWFzayBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfUElOX1BDMTMKQEAgLTEwMjgsNyArOTgwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfSXNTaGFkb3dSZWdCeXBhc3NFbmFibGVkKFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZXR1cm4gKFJFQURfQklUKFJUQ3gtPkNSLCBSVENfQ1JfQllQU0hBRCkgPT0gKFJUQ19DUl9CWVBTSEFEKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPkNSLCBSVENfQ1JfQllQU0hBRCkgPT0gKFJUQ19DUl9CWVBTSEFEKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKQEAgLTEyOTUsMTIgKzEyNDcsMTIgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1JUQ19USU1FX0NvbmZpZyhSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgRm9ybWF0MTJfMjQsIHVpbnQzMl90IEhvdXJzLCB1aW50MzJfdCBNaW51dGVzLCB1aW50MzJfdCBTZWNvbmRzKQogewotICB1aW50MzJfdCB0ZW1wID0gMFU7CisgIHVpbnQzMl90IHRlbXA7CiAKLSAgdGVtcCA9IEZvcm1hdDEyXzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcCi0gICAgICAgICAoKChIb3VycyAmIDB4RjBVKSA8PCAoUlRDX1RSX0hUX1BvcyAtIDRVKSkgfCAoKEhvdXJzICYgMHgwRlUpIDw8IFJUQ19UUl9IVV9Qb3MpKSAgICAgfCBcCisgIHRlbXAgPSBGb3JtYXQxMl8yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFwKKyAgICAgICAgICgoKEhvdXJzICAgJiAweEYwVSkgPDwgKFJUQ19UUl9IVF9Qb3MgIC0gNFUpKSB8ICgoSG91cnMgJiAweDBGVSkgPDwgUlRDX1RSX0hVX1BvcykpICAgIHwgXAogICAgICAgICAgKCgoTWludXRlcyAmIDB4RjBVKSA8PCAoUlRDX1RSX01OVF9Qb3MgLSA0VSkpIHwgKChNaW51dGVzICYgMHgwRlUpIDw8IFJUQ19UUl9NTlVfUG9zKSkgfCBcCi0gICAgICAgICAoKChTZWNvbmRzICYgMHhGMFUpIDw8IChSVENfVFJfU1RfUG9zIC0gNFUpKSB8ICgoU2Vjb25kcyAmIDB4MEZVKSA8PCBSVENfVFJfU1VfUG9zKSk7CisgICAgICAgICAoKChTZWNvbmRzICYgMHhGMFUpIDw8IChSVENfVFJfU1RfUG9zICAtIDRVKSkgfCAoKFNlY29uZHMgJiAweDBGVSkgPDwgUlRDX1RSX1NVX1BvcykpOwogICBNT0RJRllfUkVHKFJUQ3gtPlRSLCAoUlRDX1RSX1BNIHwgUlRDX1RSX0hUIHwgUlRDX1RSX0hVIHwgUlRDX1RSX01OVCB8IFJUQ19UUl9NTlUgfCBSVENfVFJfU1QgfCBSVENfVFJfU1UpLCB0ZW1wKTsKIH0KIApAQCAtMTMyMywxMiArMTI3NSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX1RJTUVfR2V0KFJUQ19UeXBlRGVmICpSVEN4KQogewotICB1aW50MzJfdCB0ZW1wID0gMFU7Ci0KLSAgdGVtcCA9IFJFQURfQklUKFJUQ3gtPlRSLCAoUlRDX1RSX0hUIHwgUlRDX1RSX0hVIHwgUlRDX1RSX01OVCB8IFJUQ19UUl9NTlUgfCBSVENfVFJfU1QgfCBSVENfVFJfU1UpKTsKLSAgcmV0dXJuICh1aW50MzJfdCkoKCgoKCh0ZW1wICYgUlRDX1RSX0hUKSA+PiBSVENfVFJfSFRfUG9zKSA8PCA0VSkgfCAoKHRlbXAgJiBSVENfVFJfSFUpID4+IFJUQ19UUl9IVV9Qb3MpKSA8PCBSVENfT0ZGU0VUX0hPVVIpIHwgIFwKLSAgICAgICAgICAgICAgICAgICAgKCgoKCh0ZW1wICYgUlRDX1RSX01OVCkgPj4gUlRDX1RSX01OVF9Qb3MpIDw8IDRVKSB8ICgodGVtcCAmIFJUQ19UUl9NTlUpID4+IFJUQ19UUl9NTlVfUG9zKSkgPDwgUlRDX09GRlNFVF9NSU5VVEUpIHwgXAotICAgICAgICAgICAgICAgICAgICAoKCgodGVtcCAmIFJUQ19UUl9TVCkgPj4gUlRDX1RSX1NUX1BvcykgPDwgNFUpIHwgKCh0ZW1wICYgUlRDX1RSX1NVKSA+PiBSVENfVFJfU1VfUG9zKSkpOworICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChSVEN4LT5UUiwgKFJUQ19UUl9IVCB8IFJUQ19UUl9IVSB8IFJUQ19UUl9NTlQgfCBSVENfVFJfTU5VIHwgUlRDX1RSX1NUIHwgUlRDX1RSX1NVKSkpOwogfQogCiAvKioKQEAgLTEzNjMsNyArMTMxMCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX1RJTUVfSXNEYXlMaWdodFN0b3JlRW5hYmxlZChSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5DUiwgUlRDX0NSX0JLUCkgPT0gKFJUQ19DUl9CS1ApKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoUlRDeC0+Q1IsIFJUQ19DUl9CS1ApID09IChSVENfQ1JfQktQKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKQEAgLTEzOTEsMTcgKzEzMzgsMTggQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBHZXQgU3ViIHNlY29uZCB2YWx1ZSBpbiB0aGUgc3luY2hyb25vdXMgcHJlc2NhbGVyIGNvdW50ZXIuCisgICogQGJyaWVmICBHZXQgc3Vic2Vjb25kcyB2YWx1ZSBpbiB0aGUgc3luY2hyb25vdXMgcHJlc2NhbGVyIGNvdW50ZXIuCiAgICogQG5vdGUgIFlvdSBjYW4gdXNlIGJvdGggU3ViU2Vjb25kcyB2YWx1ZSBhbmQgU2Vjb25kRnJhY3Rpb24gKFBSRURJVl9TIHRocm91Z2gKICAgKiAgICAgICAgTExfUlRDX0dldFN5bmNoUHJlc2NhbGVyIGZ1bmN0aW9uKSB0ZXJtcyByZXR1cm5lZCB0byBjb252ZXJ0IENhbGVuZGFyCiAgICogICAgICAgIFN1YlNlY29uZHMgdmFsdWUgaW4gc2Vjb25kIGZyYWN0aW9uIHJhdGlvIHdpdGggdGltZSB1bml0IGZvbGxvd2luZwogICAqICAgICAgICBnZW5lcmljIGZvcm11bGE6Ci0gICogICAgICAgICAgPT0+IFNlY29uZHMgZnJhY3Rpb24gcmF0aW8gKiB0aW1lX3VuaXQ9IFsoU2Vjb25kRnJhY3Rpb24tU3ViU2Vjb25kcykvKFNlY29uZEZyYWN0aW9uKzEpXSAqIHRpbWVfdW5pdAorICAqICAgICAgICAgID09PiBTZWNvbmRzIGZyYWN0aW9uIHJhdGlvICogdGltZV91bml0ID0KKyAgKiAgICAgICAgICAgICAgICAgWyhTZWNvbmRGcmFjdGlvbi1TdWJTZWNvbmRzKS8oU2Vjb25kRnJhY3Rpb24rMSldICogdGltZV91bml0CiAgICogICAgICAgIFRoaXMgY29udmVyc2lvbiBjYW4gYmUgcGVyZm9ybWVkIG9ubHkgaWYgbm8gc2hpZnQgb3BlcmF0aW9uIGlzIHBlbmRpbmcKICAgKiAgICAgICAgKGllLiBTSEZQPTApIHdoZW4gUFJFRElWX1MgPj0gU1MuCiAgICogQHJtdG9sbCBTU1IgICAgICAgICAgU1MgICAgICAgICAgICBMTF9SVENfVElNRV9HZXRTdWJTZWNvbmQKICAgKiBAcGFyYW0gIFJUQ3ggUlRDIEluc3RhbmNlCi0gICogQHJldHZhbCBTdWIgc2Vjb25kIHZhbHVlIChudW1iZXIgYmV0d2VlbiAwIGFuZCA2NTUzNSkKKyAgKiBAcmV0dmFsIFN1YnNlY29uZHMgdmFsdWUgKG51bWJlciBiZXR3ZWVuIDAgYW5kIDY1NTM1KQogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19USU1FX0dldFN1YlNlY29uZChSVENfVHlwZURlZiAqUlRDeCkKIHsKQEAgLTE2MjUsMTIgKzE1NzMsMTIgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1JUQ19EQVRFX0NvbmZpZyhSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgV2Vla0RheSwgdWludDMyX3QgRGF5LCB1aW50MzJfdCBNb250aCwgdWludDMyX3QgWWVhcikKIHsKLSAgdWludDMyX3QgdGVtcCA9IDBVOworICB1aW50MzJfdCB0ZW1wOwogCi0gIHRlbXAgPSAoV2Vla0RheSA8PCBSVENfRFJfV0RVX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXAotICAgICAgICAgKCgoWWVhciAmIDB4RjBVKSA8PCAoUlRDX0RSX1lUX1BvcyAtIDRVKSkgfCAoKFllYXIgJiAweDBGVSkgPDwgUlRDX0RSX1lVX1BvcykpICAgfCBcCisgIHRlbXAgPSAoICBXZWVrRGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IFJUQ19EUl9XRFVfUG9zKSB8IFwKKyAgICAgICAgICgoKFllYXIgICYgMHhGMFUpIDw8IChSVENfRFJfWVRfUG9zIC0gNFUpKSB8ICgoWWVhciAgJiAweDBGVSkgPDwgUlRDX0RSX1lVX1BvcykpIHwgXAogICAgICAgICAgKCgoTW9udGggJiAweEYwVSkgPDwgKFJUQ19EUl9NVF9Qb3MgLSA0VSkpIHwgKChNb250aCAmIDB4MEZVKSA8PCBSVENfRFJfTVVfUG9zKSkgfCBcCi0gICAgICAgICAoKChEYXkgJiAweEYwVSkgPDwgKFJUQ19EUl9EVF9Qb3MgLSA0VSkpIHwgKChEYXkgJiAweDBGVSkgPDwgUlRDX0RSX0RVX1BvcykpOworICAgICAgICAgKCgoRGF5ICAgJiAweEYwVSkgPDwgKFJUQ19EUl9EVF9Qb3MgLSA0VSkpIHwgKChEYXkgICAmIDB4MEZVKSA8PCBSVENfRFJfRFVfUG9zKSk7CiAKICAgTU9ESUZZX1JFRyhSVEN4LT5EUiwgKFJUQ19EUl9XRFUgfCBSVENfRFJfTVQgfCBSVENfRFJfTVUgfCBSVENfRFJfRFQgfCBSVENfRFJfRFUgfCBSVENfRFJfWVQgfCBSVENfRFJfWVUpLCB0ZW1wKTsKIH0KQEAgLTE2NTMsMTMgKzE2MDEsMTQgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfREFURV9HZXQoUlRDX1R5cGVEZWYgKlJUQ3gpCiB7Ci0gdWludDMyX3QgdGVtcCA9IDBVOworICB1aW50MzJfdCB0ZW1wOwogCiAgIHRlbXAgPSBSRUFEX0JJVChSVEN4LT5EUiwgKFJUQ19EUl9XRFUgfCBSVENfRFJfTVQgfCBSVENfRFJfTVUgfCBSVENfRFJfRFQgfCBSVENfRFJfRFUgfCBSVENfRFJfWVQgfCBSVENfRFJfWVUpKTsKLSAgcmV0dXJuICh1aW50MzJfdCkoKCgodGVtcCAmIFJUQ19EUl9XRFUpID4+IFJUQ19EUl9XRFVfUG9zKSA8PCBSVENfT0ZGU0VUX1dFRUtEQVkpIHwgXAotICAgICAgICAgICAgICAgICAgICAoKCgoKHRlbXAgJiBSVENfRFJfRFQpID4+IFJUQ19EUl9EVF9Qb3MpIDw8IDRVKSB8ICgodGVtcCAmIFJUQ19EUl9EVSkgPj4gUlRDX0RSX0RVX1BvcykpIDw8IFJUQ19PRkZTRVRfREFZKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgKCgoKCh0ZW1wICYgUlRDX0RSX01UKSA+PiBSVENfRFJfTVRfUG9zKSA8PCA0VSkgfCAoKHRlbXAgJiBSVENfRFJfTVUpID4+IFJUQ19EUl9NVV9Qb3MpKSA8PCBSVENfT0ZGU0VUX01PTlRIKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgKCgoKHRlbXAgJiBSVENfRFJfWVQpID4+IFJUQ19EUl9ZVF9Qb3MpIDw8IDRVKSB8ICgodGVtcCAmIFJUQ19EUl9ZVSkgPj4gUlRDX0RSX1lVX1BvcykpKTsKKworICByZXR1cm4gKHVpbnQzMl90KSgoKCh0ZW1wICYgICAgICAgICAgICAgIFJUQ19EUl9XRFUpID4+IFJUQ19EUl9XRFVfUG9zKSA8PCBSVENfT0ZGU0VUX1dFRUtEQVkpIHwgXAorICAgICAgICAgICAgICAgICAgICAoKCh0ZW1wICYgKFJUQ19EUl9EVCB8IFJUQ19EUl9EVSkpID4+IFJUQ19EUl9EVV9Qb3MpICA8PCBSVENfT0ZGU0VUX0RBWSkgICAgIHwgXAorICAgICAgICAgICAgICAgICAgICAoKCh0ZW1wICYgKFJUQ19EUl9NVCB8IFJUQ19EUl9NVSkpID4+IFJUQ19EUl9NVV9Qb3MpICA8PCBSVENfT0ZGU0VUX01PTlRIKSAgIHwgXAorICAgICAgICAgICAgICAgICAgICAgKCh0ZW1wICYgKFJUQ19EUl9ZVCB8IFJUQ19EUl9ZVSkpID4+IFJUQ19EUl9ZVV9Qb3MpKTsKIH0KIAogLyoqCkBAIC0xOTUzLDExICsxOTAyLDEyIEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfQUxNQV9Db25maWdUaW1lKFJUQ19UeXBlRGVmICpSVEN4LCB1aW50MzJfdCBGb3JtYXQxMl8yNCwgdWludDMyX3QgSG91cnMsIHVpbnQzMl90IE1pbnV0ZXMsIHVpbnQzMl90IFNlY29uZHMpCiB7Ci0gIHVpbnQzMl90IHRlbXAgPSAwVTsKKyAgdWludDMyX3QgdGVtcDsKIAotICB0ZW1wID0gRm9ybWF0MTJfMjQgfCAoKChIb3VycyAmIDB4RjBVKSA8PCAoUlRDX0FMUk1BUl9IVF9Qb3MgLSA0VSkpIHwgKChIb3VycyAmIDB4MEZVKSA8PCBSVENfQUxSTUFSX0hVX1BvcykpICAgIHwgXAorICB0ZW1wID0gRm9ybWF0MTJfMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFwKKyAgICAgICAgICgoKEhvdXJzICAgJiAweEYwVSkgPDwgKFJUQ19BTFJNQVJfSFRfUG9zICAtIDRVKSkgfCAoKEhvdXJzICAgJiAweDBGVSkgPDwgUlRDX0FMUk1BUl9IVV9Qb3MpKSAgfCBcCiAgICAgICAgICAoKChNaW51dGVzICYgMHhGMFUpIDw8IChSVENfQUxSTUFSX01OVF9Qb3MgLSA0VSkpIHwgKChNaW51dGVzICYgMHgwRlUpIDw8IFJUQ19BTFJNQVJfTU5VX1BvcykpIHwgXAotICAgICAgICAgKCgoU2Vjb25kcyAmIDB4RjBVKSA8PCAoUlRDX0FMUk1BUl9TVF9Qb3MgLSA0VSkpIHwgKChTZWNvbmRzICYgMHgwRlUpIDw8IFJUQ19BTFJNQVJfU1VfUG9zKSk7CisgICAgICAgICAoKChTZWNvbmRzICYgMHhGMFUpIDw8IChSVENfQUxSTUFSX1NUX1BvcyAgLSA0VSkpIHwgKChTZWNvbmRzICYgMHgwRlUpIDw8IFJUQ19BTFJNQVJfU1VfUG9zKSk7CiAKICAgTU9ESUZZX1JFRyhSVEN4LT5BTFJNQVIsIFJUQ19BTFJNQVJfUE0gfCBSVENfQUxSTUFSX0hUIHwgUlRDX0FMUk1BUl9IVSB8IFJUQ19BTFJNQVJfTU5UIHwgUlRDX0FMUk1BUl9NTlUgfCBSVENfQUxSTUFSX1NUIHwgUlRDX0FMUk1BUl9TVSwgdGVtcCk7CiB9CkBAIC0xOTgxLDcgKzE5MzEsOCBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFNldCBBbGFybSBBIE1hc2sgdGhlIG1vc3Qtc2lnbmlmaWNhbnQgYml0cyBzdGFydGluZyBhdCB0aGlzIGJpdAorICAqIEBicmllZiAgTWFzayB0aGUgbW9zdC1zaWduaWZpY2FudCBiaXRzIG9mIHRoZSBzdWJzZWNvbmRzIGZpZWxkIHN0YXJ0aW5nIGZyb20KKyAgKiAgICAgICAgIHRoZSBiaXQgc3BlY2lmaWVkIGluIHBhcmFtZXRlciBNYXNrCiAgICogQG5vdGUgVGhpcyByZWdpc3RlciBjYW4gYmUgd3JpdHRlbiBvbmx5IHdoZW4gQUxSQUUgaXMgcmVzZXQgaW4gUlRDX0NSIHJlZ2lzdGVyLAogICAqICAgICAgIG9yIGluIGluaXRpYWxpemF0aW9uIG1vZGUuCiAgICogQHJtdG9sbCBBTFJNQVNTUiAgICAgTUFTS1NTICAgICAgICBMTF9SVENfQUxNQV9TZXRTdWJTZWNvbmRNYXNrCkBAIC0xOTk1LDcgKzE5NDYsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIEdldCBBbGFybSBBIE1hc2sgdGhlIG1vc3Qtc2lnbmlmaWNhbnQgYml0cyBzdGFydGluZyBhdCB0aGlzIGJpdAorICAqIEBicmllZiAgR2V0IEFsYXJtIEEgc3Vic2Vjb25kcyBtYXNrCiAgICogQHJtdG9sbCBBTFJNQVNTUiAgICAgTUFTS1NTICAgICAgICBMTF9SVENfQUxNQV9HZXRTdWJTZWNvbmRNYXNrCiAgICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQogICAqIEByZXR2YWwgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEYKQEAgLTIwMDYsNyArMTk1Nyw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgU2V0IEFsYXJtIEEgU3ViIHNlY29uZHMgdmFsdWUKKyAgKiBAYnJpZWYgIFNldCBBbGFybSBBIHN1YnNlY29uZHMgdmFsdWUKICAgKiBAcm10b2xsIEFMUk1BU1NSICAgICBTUyAgICAgICAgICAgIExMX1JUQ19BTE1BX1NldFN1YlNlY29uZAogICAqIEBwYXJhbSAgUlRDeCBSVEMgSW5zdGFuY2UKICAgKiBAcGFyYW0gIFN1YnNlY29uZCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4N0ZGRgpAQCAtMjAxOCw3ICsxOTY5LDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBHZXQgQWxhcm0gQSBTdWIgc2Vjb25kcyB2YWx1ZQorICAqIEBicmllZiAgR2V0IEFsYXJtIEEgc3Vic2Vjb25kcyB2YWx1ZQogICAqIEBybXRvbGwgQUxSTUFTU1IgICAgIFNTICAgICAgICAgICAgTExfUlRDX0FMTUFfR2V0U3ViU2Vjb25kCiAgICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQogICAqIEByZXR2YWwgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weDdGRkYKQEAgLTIzMTksMTEgKzIyNzAsMTIgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1JUQ19BTE1CX0NvbmZpZ1RpbWUoUlRDX1R5cGVEZWYgKlJUQ3gsIHVpbnQzMl90IEZvcm1hdDEyXzI0LCB1aW50MzJfdCBIb3VycywgdWludDMyX3QgTWludXRlcywgdWludDMyX3QgU2Vjb25kcykKIHsKLSAgdWludDMyX3QgdGVtcCA9IDBVOworICB1aW50MzJfdCB0ZW1wOwogCi0gIHRlbXAgPSBGb3JtYXQxMl8yNCB8ICgoKEhvdXJzICYgMHhGMFUpIDw8IChSVENfQUxSTUJSX0hUX1BvcyAtIDRVKSkgfCAoKEhvdXJzICYgMHgwRlUpIDw8IFJUQ19BTFJNQlJfSFVfUG9zKSkgICAgfCBcCisgIHRlbXAgPSBGb3JtYXQxMl8yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXAorICAgICAgICAgKCgoSG91cnMgICAmIDB4RjBVKSA8PCAoUlRDX0FMUk1CUl9IVF9Qb3MgIC0gNFUpKSB8ICgoSG91cnMgICAmIDB4MEZVKSA8PCBSVENfQUxSTUJSX0hVX1BvcykpICB8IFwKICAgICAgICAgICgoKE1pbnV0ZXMgJiAweEYwVSkgPDwgKFJUQ19BTFJNQlJfTU5UX1BvcyAtIDRVKSkgfCAoKE1pbnV0ZXMgJiAweDBGVSkgPDwgUlRDX0FMUk1CUl9NTlVfUG9zKSkgfCBcCi0gICAgICAgICAoKChTZWNvbmRzICYgMHhGMFUpIDw8IChSVENfQUxSTUJSX1NUX1BvcyAtIDRVKSkgfCAoKFNlY29uZHMgJiAweDBGVSkgPDwgUlRDX0FMUk1CUl9TVV9Qb3MpKTsKKyAgICAgICAgICgoKFNlY29uZHMgJiAweEYwVSkgPDwgKFJUQ19BTFJNQlJfU1RfUG9zICAtIDRVKSkgfCAoKFNlY29uZHMgJiAweDBGVSkgPDwgUlRDX0FMUk1CUl9TVV9Qb3MpKTsKIAogICBNT0RJRllfUkVHKFJUQ3gtPkFMUk1CUiwgUlRDX0FMUk1CUl9QTSB8IFJUQ19BTFJNQlJfSFQgfCBSVENfQUxSTUJSX0hVIHwgUlRDX0FMUk1CUl9NTlQgfCBSVENfQUxSTUJSX01OVSB8IFJUQ19BTFJNQlJfU1QgfCBSVENfQUxSTUJSX1NVLCB0ZW1wKTsKIH0KQEAgLTIzNDcsNyArMjI5OSw4IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgU2V0IEFsYXJtIEIgTWFzayB0aGUgbW9zdC1zaWduaWZpY2FudCBiaXRzIHN0YXJ0aW5nIGF0IHRoaXMgYml0CisgICogQGJyaWVmICBNYXNrIHRoZSBtb3N0LXNpZ25pZmljYW50IGJpdHMgb2YgdGhlIHN1YnNlY29uZHMgZmllbGQgc3RhcnRpbmcgZnJvbQorICAqICAgICAgICAgdGhlIGJpdCBzcGVjaWZpZWQgaW4gcGFyYW1ldGVyIE1hc2sKICAgKiBAbm90ZSBUaGlzIHJlZ2lzdGVyIGNhbiBiZSB3cml0dGVuIG9ubHkgd2hlbiBBTFJCRSBpcyByZXNldCBpbiBSVENfQ1IgcmVnaXN0ZXIsCiAgICogICAgICAgb3IgaW4gaW5pdGlhbGl6YXRpb24gbW9kZS4KICAgKiBAcm10b2xsIEFMUk1CU1NSICAgICBNQVNLU1MgICAgICAgIExMX1JUQ19BTE1CX1NldFN1YlNlY29uZE1hc2sKQEAgLTIzNjEsNyArMjMxNCw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgR2V0IEFsYXJtIEIgTWFzayB0aGUgbW9zdC1zaWduaWZpY2FudCBiaXRzIHN0YXJ0aW5nIGF0IHRoaXMgYml0CisgICogQGJyaWVmICBHZXQgQWxhcm0gQiBzdWJzZWNvbmRzIG1hc2sKICAgKiBAcm10b2xsIEFMUk1CU1NSICAgICBNQVNLU1MgICAgICAgIExMX1JUQ19BTE1CX0dldFN1YlNlY29uZE1hc2sKICAgKiBAcGFyYW0gIFJUQ3ggUlRDIEluc3RhbmNlCiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RgpAQCAtMjM3Miw3ICsyMzI1LDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBTZXQgQWxhcm0gQiBTdWIgc2Vjb25kcyB2YWx1ZQorICAqIEBicmllZiAgU2V0IEFsYXJtIEIgc3Vic2Vjb25kcyB2YWx1ZQogICAqIEBybXRvbGwgQUxSTUJTU1IgICAgIFNTICAgICAgICAgICAgTExfUlRDX0FMTUJfU2V0U3ViU2Vjb25kCiAgICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQogICAqIEBwYXJhbSAgU3Vic2Vjb25kIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwMCBhbmQgTWF4X0RhdGE9MHg3RkZGCkBAIC0yMzg0LDcgKzIzMzcsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIEdldCBBbGFybSBCIFN1YiBzZWNvbmRzIHZhbHVlCisgICogQGJyaWVmICBHZXQgQWxhcm0gQiBzdWJzZWNvbmRzIHZhbHVlCiAgICogQHJtdG9sbCBBTFJNQlNTUiAgICAgU1MgICAgICAgICAgICBMTF9SVENfQUxNQl9HZXRTdWJTZWNvbmQKICAgKiBAcGFyYW0gIFJUQ3ggUlRDIEluc3RhbmNlCiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4N0ZGRgpAQCAtMjYwMSw3ICsyNTU0LDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBHZXQgdGltZS1zdGFtcCBzdWIgc2Vjb25kIHZhbHVlCisgICogQGJyaWVmICBHZXQgdGltZS1zdGFtcCBzdWJzZWNvbmRzIHZhbHVlCiAgICogQHJtdG9sbCBUU1NTUiAgICAgICAgU1MgICAgICAgICAgICBMTF9SVENfVFNfR2V0U3ViU2Vjb25kCiAgICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQogICAqIEByZXR2YWwgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGRkYKQEAgLTI2NTQsNyArMjYwNyw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUlRDX1RBTVBFUl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUlRDX1RBTVBFUl8zICgqKQogICAqCi0gICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGFwcGxpY2FibGUgdG8gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfVEFNUEVSX0VuYWJsZShSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgVGFtcGVyKQpAQCAtMjY3Myw3ICsyNjI2LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfVEFNUEVSXzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfVEFNUEVSXzMgKCopCiAgICoKLSAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgYXBwbGljYWJsZSB0byBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1JUQ19UQU1QRVJfRGlzYWJsZShSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgVGFtcGVyKQpAQCAtMjY4MSw3ICsyNjM0LDYgQEAKICAgQ0xFQVJfQklUKFJUQ3gtPlRBRkNSLCBUYW1wZXIpOwogfQogCi0jaWYgZGVmaW5lZChSVENfVEFGQ1JfVEFNUFBVRElTKQogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIFJUQ19UQU1QeCBwdWxsLXVwIGRpc2FibGUgKERpc2FibGUgcHJlY2hhcmdlIG9mIFJUQ19UQU1QeCBwaW5zKQogICAqIEBybXRvbGwgVEFGQ1IgICAgICAgVEFNUFBVRElTICAgICBMTF9SVENfVEFNUEVSX0Rpc2FibGVQdWxsVXAKQEAgLTI3MDMsOSArMjY1NSw3IEBACiB7CiAgIENMRUFSX0JJVChSVEN4LT5UQUZDUiwgUlRDX1RBRkNSX1RBTVBQVURJUyk7CiB9Ci0jZW5kaWYgLyogUlRDX1RBRkNSX1RBTVBQVURJUyAqLwogCi0jaWYgZGVmaW5lZChSVENfVEFGQ1JfVEFNUFBSQ0gpCiAvKioKICAgKiBAYnJpZWYgIFNldCBSVENfVEFNUHggcHJlY2hhcmdlIGR1cmF0aW9uCiAgICogQHJtdG9sbCBUQUZDUiAgICAgICBUQU1QUFJDSCAgICAgIExMX1JUQ19UQU1QRVJfU2V0UHJlY2hhcmdlCkBAIC0yNzM2LDkgKzI2ODYsNyBAQAogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChSVEN4LT5UQUZDUiwgUlRDX1RBRkNSX1RBTVBQUkNIKSk7CiB9Ci0jZW5kaWYgLyogUlRDX1RBRkNSX1RBTVBQUkNIICovCiAKLSNpZiBkZWZpbmVkKFJUQ19UQUZDUl9UQU1QRkxUKQogLyoqCiAgICogQGJyaWVmICBTZXQgUlRDX1RBTVB4IGZpbHRlciBjb3VudAogICAqIEBybXRvbGwgVEFGQ1IgICAgICAgVEFNUEZMVCAgICAgICBMTF9SVENfVEFNUEVSX1NldEZpbHRlckNvdW50CkBAIC0yNzY5LDkgKzI3MTcsNyBAQAogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChSVEN4LT5UQUZDUiwgUlRDX1RBRkNSX1RBTVBGTFQpKTsKIH0KLSNlbmRpZiAvKiBSVENfVEFGQ1JfVEFNUEZMVCAqLwogCi0jaWYgZGVmaW5lZChSVENfVEFGQ1JfVEFNUEZSRVEpCiAvKioKICAgKiBAYnJpZWYgIFNldCBUYW1wZXIgc2FtcGxpbmcgZnJlcXVlbmN5CiAgICogQHJtdG9sbCBUQUZDUiAgICAgICBUQU1QRlJFUSAgICAgIExMX1JUQ19UQU1QRVJfU2V0U2FtcGxpbmdGcmVxCkBAIC0yODEwLDcgKzI3NTYsNiBAQAogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChSVEN4LT5UQUZDUiwgUlRDX1RBRkNSX1RBTVBGUkVRKSk7CiB9Ci0jZW5kaWYgLyogUlRDX1RBRkNSX1RBTVBGUkVRICovCiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIEFjdGl2ZSBsZXZlbCBmb3IgVGFtcGVyIGlucHV0CkBAIC0yODIzLDcgKzI3NjgsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JUQ19UQU1QRVJfQUNUSVZFTEVWRUxfVEFNUDIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfVEFNUEVSX0FDVElWRUxFVkVMX1RBTVAzICgqKQogICAqCi0gICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGFwcGxpY2FibGUgdG8gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfVEFNUEVSX0VuYWJsZUFjdGl2ZUxldmVsKFJUQ19UeXBlRGVmICpSVEN4LCB1aW50MzJfdCBUYW1wZXIpCkBAIC0yODQyLDcgKzI3ODcsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JUQ19UQU1QRVJfQUNUSVZFTEVWRUxfVEFNUDIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfVEFNUEVSX0FDVElWRUxFVkVMX1RBTVAzICgqKQogICAqCi0gICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGFwcGxpY2FibGUgdG8gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfVEFNUEVSX0Rpc2FibGVBY3RpdmVMZXZlbChSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgVGFtcGVyKQpAQCAtMjg1NCw3ICsyNzk5LDYgQEAKICAgKiBAfQogICAqLwogCi0jaWYgZGVmaW5lZChSVENfV0FLRVVQX1NVUFBPUlQpCiAvKiogQGRlZmdyb3VwIFJUQ19MTF9FRl9XYWtldXAgV2FrZXVwCiAgICogQHsKICAgKi8KQEAgLTI4OTEsMTMgKzI4MzUsMTMgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfV0FLRVVQX0lzRW5hYmxlZChSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5DUiwgUlRDX0NSX1dVVEUpID09IChSVENfQ1JfV1VURSkpOworICByZXR1cm4gKChSRUFEX0JJVChSVEN4LT5DUiwgUlRDX0NSX1dVVEUpID09IChSVENfQ1JfV1VURSkpID8gMVVMIDogMFVMKTsKIH0KIAogLyoqCiAgICogQGJyaWVmICBTZWxlY3QgV2FrZXVwIGNsb2NrCiAgICogQG5vdGUgICBCaXQgaXMgd3JpdGUtcHJvdGVjdGVkLiBAcmVmIExMX1JUQ19EaXNhYmxlV3JpdGVQcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlLgotICAqIEBub3RlIEJpdCBjYW4gYmUgd3JpdHRlbiBvbmx5IHdoZW4gUlRDX0NSIFdVVEUgYml0ID0gMCBhbmQgUlRDX0lTUiBXVVRXRiBiaXQgPSAxCisgICogQG5vdGUgICBCaXQgY2FuIGJlIHdyaXR0ZW4gb25seSB3aGVuIFJUQ19DUiBXVVRFIGJpdCA9IDAgYW5kIFJUQ19JU1IgV1VUV0YgYml0ID0gMQogICAqIEBybXRvbGwgQ1IgICAgICAgICAgIFdVQ0tTRUwgICAgICAgTExfUlRDX1dBS0VVUF9TZXRDbG9jawogICAqIEBwYXJhbSAgUlRDeCBSVEMgSW5zdGFuY2UKICAgKiBAcGFyYW0gIFdha2V1cENsb2NrIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0yOTMzLDcgKzI4NzcsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCBXYWtldXAgYXV0by1yZWxvYWQgdmFsdWUKLSAgKiBAbm90ZSBCaXQgY2FuIGJlIHdyaXR0ZW4gb25seSB3aGVuIFdVVFdGIGlzIHNldCB0byAxIGluIFJUQ19JU1IKKyAgKiBAbm90ZSAgIEJpdCBjYW4gYmUgd3JpdHRlbiBvbmx5IHdoZW4gV1VUV0YgaXMgc2V0IHRvIDEgaW4gUlRDX0lTUgogICAqIEBybXRvbGwgV1VUUiAgICAgICAgIFdVVCAgICAgICAgICAgTExfUlRDX1dBS0VVUF9TZXRBdXRvUmVsb2FkCiAgICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQogICAqIEBwYXJhbSAgVmFsdWUgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGRkYKQEAgLTI5NTgsOSArMjkwMiw3IEBACiAvKioKICAgKiBAfQogICAqLwotI2VuZGlmIC8qIFJUQ19XQUtFVVBfU1VQUE9SVCAqLwogCi0jaWYgZGVmaW5lZChSVENfQkFDS1VQX1NVUFBPUlQpCiAvKiogQGRlZmdyb3VwIFJUQ19MTF9FRl9CYWNrdXBfUmVnaXN0ZXJzIEJhY2t1cF9SZWdpc3RlcnMKICAgKiBAewogICAqLwpAQCAtMzAwMywxOSArMjk0NSwxOSBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JUQ19CS1BfRFIzMCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfQktQX0RSMzEgKCopCiAgICoKLSAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgYXBwbGljYWJsZSB0byBhbGwgZGV2aWNlcy4KICAgKiBAcGFyYW0gIERhdGEgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGRkZGRkZGCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfQkFLX1NldFJlZ2lzdGVyKFJUQ19UeXBlRGVmICpSVEN4LCB1aW50MzJfdCBCYWNrdXBSZWdpc3RlciwgdWludDMyX3QgRGF0YSkKIHsKLSAgdWludDMyX3QgdG1wID0gMFU7CisgIHVpbnQzMl90IHRlbXA7CiAKLSAgdG1wID0gKHVpbnQzMl90KSgmKFJUQ3gtPkJLUDBSKSk7Ci0gIHRtcCArPSAoQmFja3VwUmVnaXN0ZXIgKiA0VSk7CisgIHRlbXAgPSAodWludDMyX3QpKCYoUlRDeC0+QktQMFIpKTsKKyAgdGVtcCArPSAoQmFja3VwUmVnaXN0ZXIgKiA0VSk7CiAKICAgLyogV3JpdGUgdGhlIHNwZWNpZmllZCByZWdpc3RlciAqLwotICAqKF9fSU8gdWludDMyX3QgKil0bXAgPSAodWludDMyX3QpRGF0YTsKKyAgKihfX0lPIHVpbnQzMl90ICopdGVtcCA9ICh1aW50MzJfdClEYXRhOwogfQogCiAvKioKQEAgLTMwNTYsMjQgKzI5OTgsMjMgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfQktQX0RSMzAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUlRDX0JLUF9EUjMxICgqKQogICAqCi0gICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGFwcGxpY2FibGUgdG8gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RkZGRkZGRkYKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfQkFLX0dldFJlZ2lzdGVyKFJUQ19UeXBlRGVmICpSVEN4LCB1aW50MzJfdCBCYWNrdXBSZWdpc3RlcikKIHsKLSAgdWludDMyX3QgdG1wID0gMFU7CisgIHVpbnQzMl90IHRlbXA7CiAKLSAgdG1wID0gKHVpbnQzMl90KSgmKFJUQ3gtPkJLUDBSKSk7Ci0gIHRtcCArPSAoQmFja3VwUmVnaXN0ZXIgKiA0VSk7CisgIHRlbXAgPSAodWludDMyX3QpKCYoUlRDeC0+QktQMFIpKTsKKyAgdGVtcCArPSAoQmFja3VwUmVnaXN0ZXIgKiA0VSk7CiAKICAgLyogUmVhZCB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVyICovCi0gIHJldHVybiAoKihfX0lPIHVpbnQzMl90ICopdG1wKTsKKyAgcmV0dXJuICgqKF9fSU8gdWludDMyX3QgKil0ZW1wKTsKIH0KIAogLyoqCiAgICogQH0KICAgKi8KLSNlbmRpZiAvKiBSVENfQkFDS1VQX1NVUFBPUlQgKi8KIAogLyoqIEBkZWZncm91cCBSVENfTExfRUZfQ2FsaWJyYXRpb24gQ2FsaWJyYXRpb24KICAgKiBAewpAQCAtMzA4OSw2ICszMDMwLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfQ0FMSUJfT1VUUFVUX05PTkUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfQ0FMSUJfT1VUUFVUXzFIWgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JUQ19DQUxJQl9PVVRQVVRfNTEySFoKKyAgKgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUlRDX0NBTF9TZXRPdXRwdXRGcmVxKFJUQ19UeXBlRGVmICpSVEN4LCB1aW50MzJfdCBGcmVxdWVuY3kpCkBAIC0zMTA1LDYgKzMwNDcsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JUQ19DQUxJQl9PVVRQVVRfTk9ORQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JUQ19DQUxJQl9PVVRQVVRfMUhaCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUlRDX0NBTElCX09VVFBVVF81MTJIWgorICAqCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0NBTF9HZXRPdXRwdXRGcmVxKFJUQ19UeXBlRGVmICpSVEN4KQogewpAQCAtMzExNCw3ICszMDU3LDcgQEAKIC8qKgogICAqIEBicmllZiAgSW5zZXJ0IG9yIG5vdCBPbmUgUlRDQ0xLIHB1bHNlIGV2ZXJ5IDJleHAxMSBwdWxzZXMgKGZyZXF1ZW5jeSBpbmNyZWFzZWQgYnkgNDg4LjUgcHBtKQogICAqIEBub3RlICAgQml0IGlzIHdyaXRlLXByb3RlY3RlZC4gQHJlZiBMTF9SVENfRGlzYWJsZVdyaXRlUHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZS4KLSAgKiBAbm90ZSBCaXQgY2FuIGJlIHdyaXR0ZW4gb25seSB3aGVuIFJFQ0FMUEYgaXMgc2V0IHRvIDAgaW4gUlRDX0lTUgorICAqIEBub3RlICAgQml0IGNhbiBiZSB3cml0dGVuIG9ubHkgd2hlbiBSRUNBTFBGIGlzIHNldCB0byAwIGluIFJUQ19JU1IKICAgKiBAcm10b2xsIENBTFIgICAgICAgICBDQUxQICAgICAgICAgIExMX1JUQ19DQUxfU2V0UHVsc2UKICAgKiBAcGFyYW0gIFJUQ3ggUlRDIEluc3RhbmNlCiAgICogQHBhcmFtICBQdWxzZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtMzEzNSwxMSArMzA3OCwxMSBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19DQUxfSXNQdWxzZUluc2VydGVkKFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZXR1cm4gKFJFQURfQklUKFJUQ3gtPkNBTFIsIFJUQ19DQUxSX0NBTFApID09IChSVENfQ0FMUl9DQUxQKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPkNBTFIsIFJUQ19DQUxSX0NBTFApID09IChSVENfQ0FMUl9DQUxQKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKLSAgKiBAYnJpZWYgIFNldCB0aGUgY2FsaWJyYXRpb24gY3ljbGUgcGVyaW9kCisgICogQGJyaWVmICBTZXQgc21vb3RoIGNhbGlicmF0aW9uIGN5Y2xlIHBlcmlvZAogICAqIEBub3RlICAgQml0IGlzIHdyaXRlLXByb3RlY3RlZC4gQHJlZiBMTF9SVENfRGlzYWJsZVdyaXRlUHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZS4KICAgKiBAbm90ZSAgIEJpdCBjYW4gYmUgd3JpdHRlbiBvbmx5IHdoZW4gUkVDQUxQRiBpcyBzZXQgdG8gMCBpbiBSVENfSVNSCiAgICogQHJtdG9sbCBDQUxSICAgICAgICAgQ0FMVzggICAgICAgICBMTF9SVENfQ0FMX1NldFBlcmlvZFxuCkBAIC0zMTU3LDcgKzMxMDAsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIEdldCB0aGUgY2FsaWJyYXRpb24gY3ljbGUgcGVyaW9kCisgICogQGJyaWVmICBHZXQgc21vb3RoIGNhbGlicmF0aW9uIGN5Y2xlIHBlcmlvZAogICAqIEBybXRvbGwgQ0FMUiAgICAgICAgIENBTFc4ICAgICAgICAgTExfUlRDX0NBTF9HZXRQZXJpb2RcbgogICAqICAgICAgICAgQ0FMUiAgICAgICAgIENBTFcxNiAgICAgICAgTExfUlRDX0NBTF9HZXRQZXJpb2QKICAgKiBAcGFyYW0gIFJUQ3ggUlRDIEluc3RhbmNlCkBAIC0zMTcyLDcgKzMxMTUsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFNldCBDYWxpYnJhdGlvbiBtaW51cworICAqIEBicmllZiAgU2V0IHNtb290aCBDYWxpYnJhdGlvbiBtaW51cwogICAqIEBub3RlICAgQml0IGlzIHdyaXRlLXByb3RlY3RlZC4gQHJlZiBMTF9SVENfRGlzYWJsZVdyaXRlUHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZS4KICAgKiBAbm90ZSAgIEJpdCBjYW4gYmUgd3JpdHRlbiBvbmx5IHdoZW4gUkVDQUxQRiBpcyBzZXQgdG8gMCBpbiBSVENfSVNSCiAgICogQHJtdG9sbCBDQUxSICAgICAgICAgQ0FMTSAgICAgICAgICBMTF9SVENfQ0FMX1NldE1pbnVzCkBAIC0zMTg2LDcgKzMxMjksNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIEdldCBDYWxpYnJhdGlvbiBtaW51cworICAqIEBicmllZiAgR2V0IHNtb290aCBDYWxpYnJhdGlvbiBtaW51cwogICAqIEBybXRvbGwgQ0FMUiAgICAgICAgIENBTE0gICAgICAgICAgTExfUlRDX0NBTF9HZXRNaW51cwogICAqIEBwYXJhbSAgUlRDeCBSVEMgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwMCBhbmQgTWF4X0RhdGE9IDB4MUZGCkBAIC0zMjEyLDcgKzMxNTUsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19Jc0FjdGl2ZUZsYWdfUkVDQUxQKFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZXR1cm4gKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9SRUNBTFBGKSA9PSAoUlRDX0lTUl9SRUNBTFBGKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9SRUNBTFBGKSA9PSAoUlRDX0lTUl9SRUNBTFBGKSkgPyAxVUwgOiAwVUwpOwogfQogCiAjaWYgZGVmaW5lZChSVENfVEFNUEVSM19TVVBQT1JUKQpAQCAtMzIyNCwxMSArMzE2NywxMCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19Jc0FjdGl2ZUZsYWdfVEFNUDMoUlRDX1R5cGVEZWYgKlJUQ3gpCiB7Ci0gIHJldHVybiAoUkVBRF9CSVQoUlRDeC0+SVNSLCBSVENfSVNSX1RBTVAzRikgPT0gKFJUQ19JU1JfVEFNUDNGKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9UQU1QM0YpID09IChSVENfSVNSX1RBTVAzRikpID8gMVVMIDogMFVMKTsKIH0KICNlbmRpZiAvKiBSVENfVEFNUEVSM19TVVBQT1JUICovCiAKLSNpZiBkZWZpbmVkKFJUQ19UQU1QRVIyX1NVUFBPUlQpCiAvKioKICAgKiBAYnJpZWYgIEdldCBSVENfVEFNUDIgZGV0ZWN0aW9uIGZsYWcKICAgKiBAcm10b2xsIElTUiAgICAgICAgICBUQU1QMkYgICAgICAgIExMX1JUQ19Jc0FjdGl2ZUZsYWdfVEFNUDIKQEAgLTMyMzcsMTEgKzMxNzksOSBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19Jc0FjdGl2ZUZsYWdfVEFNUDIoUlRDX1R5cGVEZWYgKlJUQ3gpCiB7Ci0gIHJldHVybiAoUkVBRF9CSVQoUlRDeC0+SVNSLCBSVENfSVNSX1RBTVAyRikgPT0gKFJUQ19JU1JfVEFNUDJGKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9UQU1QMkYpID09IChSVENfSVNSX1RBTVAyRikpID8gMVVMIDogMFVMKTsKIH0KLSNlbmRpZiAvKiBSVENfVEFNUEVSMl9TVVBQT1JUICovCiAKLSNpZiBkZWZpbmVkKFJUQ19UQU1QRVIxX1NVUFBPUlQpCiAvKioKICAgKiBAYnJpZWYgIEdldCBSVENfVEFNUDEgZGV0ZWN0aW9uIGZsYWcKICAgKiBAcm10b2xsIElTUiAgICAgICAgICBUQU1QMUYgICAgICAgIExMX1JUQ19Jc0FjdGl2ZUZsYWdfVEFNUDEKQEAgLTMyNTAsOSArMzE5MCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0lzQWN0aXZlRmxhZ19UQU1QMShSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfVEFNUDFGKSA9PSAoUlRDX0lTUl9UQU1QMUYpKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoUlRDeC0+SVNSLCBSVENfSVNSX1RBTVAxRikgPT0gKFJUQ19JU1JfVEFNUDFGKSkgPyAxVUwgOiAwVUwpOwogfQotI2VuZGlmIC8qIFJUQ19UQU1QRVIxX1NVUFBPUlQgKi8KIAogLyoqCiAgICogQGJyaWVmICBHZXQgVGltZS1zdGFtcCBvdmVyZmxvdyBmbGFnCkBAIC0zMjYyLDcgKzMyMDEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19Jc0FjdGl2ZUZsYWdfVFNPVihSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfVFNPVkYpID09IChSVENfSVNSX1RTT1ZGKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9UU09WRikgPT0gKFJUQ19JU1JfVFNPVkYpKSA/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpAQCAtMzI3MywxMCArMzIxMiw5IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0lzQWN0aXZlRmxhZ19UUyhSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfVFNGKSA9PSAoUlRDX0lTUl9UU0YpKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoUlRDeC0+SVNSLCBSVENfSVNSX1RTRikgPT0gKFJUQ19JU1JfVFNGKSkgPyAxVUwgOiAwVUwpOwogfQogCi0jaWYgZGVmaW5lZChSVENfV0FLRVVQX1NVUFBPUlQpCiAvKioKICAgKiBAYnJpZWYgIEdldCBXYWtldXAgdGltZXIgZmxhZwogICAqIEBybXRvbGwgSVNSICAgICAgICAgIFdVVEYgICAgICAgICAgTExfUlRDX0lzQWN0aXZlRmxhZ19XVVQKQEAgLTMyODUsOSArMzIyMyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0lzQWN0aXZlRmxhZ19XVVQoUlRDX1R5cGVEZWYgKlJUQ3gpCiB7Ci0gIHJldHVybiAoUkVBRF9CSVQoUlRDeC0+SVNSLCBSVENfSVNSX1dVVEYpID09IChSVENfSVNSX1dVVEYpKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoUlRDeC0+SVNSLCBSVENfSVNSX1dVVEYpID09IChSVENfSVNSX1dVVEYpKSA/IDFVTCA6IDBVTCk7CiB9Ci0jZW5kaWYgLyogUlRDX1dBS0VVUF9TVVBQT1JUICovCiAKIC8qKgogICAqIEBicmllZiAgR2V0IEFsYXJtIEIgZmxhZwpAQCAtMzI5Nyw3ICszMjM0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfSXNBY3RpdmVGbGFnX0FMUkIoUlRDX1R5cGVEZWYgKlJUQ3gpCiB7Ci0gIHJldHVybiAoUkVBRF9CSVQoUlRDeC0+SVNSLCBSVENfSVNSX0FMUkJGKSA9PSAoUlRDX0lTUl9BTFJCRikpOworICByZXR1cm4gKChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfQUxSQkYpID09IChSVENfSVNSX0FMUkJGKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKQEAgLTMzMDgsNyArMzI0NSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0lzQWN0aXZlRmxhZ19BTFJBKFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZXR1cm4gKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9BTFJBRikgPT0gKFJUQ19JU1JfQUxSQUYpKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoUlRDeC0+SVNSLCBSVENfSVNSX0FMUkFGKSA9PSAoUlRDX0lTUl9BTFJBRikpID8gMVVMIDogMFVMKTsKIH0KIAogI2lmIGRlZmluZWQoUlRDX1RBTVBFUjNfU1VQUE9SVCkKQEAgLTMzMjQsNyArMzI2MSw2IEBACiB9CiAjZW5kaWYgLyogUlRDX1RBTVBFUjNfU1VQUE9SVCAqLwogCi0jaWYgZGVmaW5lZChSVENfVEFNUEVSMl9TVVBQT1JUKQogLyoqCiAgICogQGJyaWVmICBDbGVhciBSVENfVEFNUDIgZGV0ZWN0aW9uIGZsYWcKICAgKiBAcm10b2xsIElTUiAgICAgICAgICBUQU1QMkYgICAgICAgIExMX1JUQ19DbGVhckZsYWdfVEFNUDIKQEAgLTMzMzUsOSArMzI3MSw3IEBACiB7CiAgIFdSSVRFX1JFRyhSVEN4LT5JU1IsICh+KChSVENfSVNSX1RBTVAyRiB8IFJUQ19JU1JfSU5JVCkgJiAweDAwMDBGRkZGVSkgfCAoUlRDeC0+SVNSICYgUlRDX0lTUl9JTklUKSkpOwogfQotI2VuZGlmIC8qIFJUQ19UQU1QRVIyX1NVUFBPUlQgKi8KIAotI2lmIGRlZmluZWQoUlRDX1RBTVBFUjFfU1VQUE9SVCkKIC8qKgogICAqIEBicmllZiAgQ2xlYXIgUlRDX1RBTVAxIGRldGVjdGlvbiBmbGFnCiAgICogQHJtdG9sbCBJU1IgICAgICAgICAgVEFNUDFGICAgICAgICBMTF9SVENfQ2xlYXJGbGFnX1RBTVAxCkBAIC0zMzQ4LDcgKzMyODIsNiBAQAogewogICBXUklURV9SRUcoUlRDeC0+SVNSLCAofigoUlRDX0lTUl9UQU1QMUYgfCBSVENfSVNSX0lOSVQpICYgMHgwMDAwRkZGRlUpIHwgKFJUQ3gtPklTUiAmIFJUQ19JU1JfSU5JVCkpKTsKIH0KLSNlbmRpZiAvKiBSVENfVEFNUEVSMV9TVVBQT1JUICovCiAKIC8qKgogICAqIEBicmllZiAgQ2xlYXIgVGltZS1zdGFtcCBvdmVyZmxvdyBmbGFnCkBAIC0zMzcyLDcgKzMzMDUsNiBAQAogICBXUklURV9SRUcoUlRDeC0+SVNSLCAofigoUlRDX0lTUl9UU0YgfCBSVENfSVNSX0lOSVQpICYgMHgwMDAwRkZGRlUpIHwgKFJUQ3gtPklTUiAmIFJUQ19JU1JfSU5JVCkpKTsKIH0KIAotI2lmIGRlZmluZWQoUlRDX1dBS0VVUF9TVVBQT1JUKQogLyoqCiAgICogQGJyaWVmICBDbGVhciBXYWtldXAgdGltZXIgZmxhZwogICAqIEBybXRvbGwgSVNSICAgICAgICAgIFdVVEYgICAgICAgICAgTExfUlRDX0NsZWFyRmxhZ19XVVQKQEAgLTMzODMsNyArMzMxNSw2IEBACiB7CiAgIFdSSVRFX1JFRyhSVEN4LT5JU1IsICh+KChSVENfSVNSX1dVVEYgfCBSVENfSVNSX0lOSVQpICYgMHgwMDAwRkZGRlUpIHwgKFJUQ3gtPklTUiAmIFJUQ19JU1JfSU5JVCkpKTsKIH0KLSNlbmRpZiAvKiBSVENfV0FLRVVQX1NVUFBPUlQgKi8KIAogLyoqCiAgICogQGJyaWVmICBDbGVhciBBbGFybSBCIGZsYWcKQEAgLTM0MTUsNyArMzM0Niw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0lzQWN0aXZlRmxhZ19JTklUKFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZXR1cm4gKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9JTklURikgPT0gKFJUQ19JU1JfSU5JVEYpKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoUlRDeC0+SVNSLCBSVENfSVNSX0lOSVRGKSA9PSAoUlRDX0lTUl9JTklURikpID8gMVVMIDogMFVMKTsKIH0KIAogLyoqCkBAIC0zNDI2LDcgKzMzNTcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19Jc0FjdGl2ZUZsYWdfUlMoUlRDX1R5cGVEZWYgKlJUQ3gpCiB7Ci0gIHJldHVybiAoUkVBRF9CSVQoUlRDeC0+SVNSLCBSVENfSVNSX1JTRikgPT0gKFJUQ19JU1JfUlNGKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9SU0YpID09IChSVENfSVNSX1JTRikpID8gMVVMIDogMFVMKTsKIH0KIAogLyoqCkBAIC0zNDQ4LDcgKzMzNzksNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19Jc0FjdGl2ZUZsYWdfSU5JVFMoUlRDX1R5cGVEZWYgKlJUQ3gpCiB7Ci0gIHJldHVybiAoUkVBRF9CSVQoUlRDeC0+SVNSLCBSVENfSVNSX0lOSVRTKSA9PSAoUlRDX0lTUl9JTklUUykpOworICByZXR1cm4gKChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfSU5JVFMpID09IChSVENfSVNSX0lOSVRTKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKQEAgLTM0NTksMTAgKzMzOTAsOSBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19Jc0FjdGl2ZUZsYWdfU0hQKFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZXR1cm4gKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9TSFBGKSA9PSAoUlRDX0lTUl9TSFBGKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9TSFBGKSA9PSAoUlRDX0lTUl9TSFBGKSkgPyAxVUwgOiAwVUwpOwogfQogCi0jaWYgZGVmaW5lZChSVENfV0FLRVVQX1NVUFBPUlQpCiAvKioKICAgKiBAYnJpZWYgIEdldCBXYWtldXAgdGltZXIgd3JpdGUgZmxhZwogICAqIEBybXRvbGwgSVNSICAgICAgICAgIFdVVFdGICAgICAgICAgTExfUlRDX0lzQWN0aXZlRmxhZ19XVVRXCkBAIC0zNDcxLDkgKzM0MDEsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19Jc0FjdGl2ZUZsYWdfV1VUVyhSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfV1VUV0YpID09IChSVENfSVNSX1dVVFdGKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9XVVRXRikgPT0gKFJUQ19JU1JfV1VUV0YpKSA/IDFVTCA6IDBVTCk7CiB9Ci0jZW5kaWYgLyogUlRDX1dBS0VVUF9TVVBQT1JUICovCiAKIC8qKgogICAqIEBicmllZiAgR2V0IEFsYXJtIEIgd3JpdGUgZmxhZwpAQCAtMzQ4Myw3ICszNDEyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfSXNBY3RpdmVGbGFnX0FMUkJXKFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZXR1cm4gKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9BTFJCV0YpID09IChSVENfSVNSX0FMUkJXRikpOworICByZXR1cm4gKChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfQUxSQldGKSA9PSAoUlRDX0lTUl9BTFJCV0YpKSA/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpAQCAtMzQ5NCw3ICszNDIzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfSXNBY3RpdmVGbGFnX0FMUkFXKFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZXR1cm4gKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9BTFJBV0YpID09IChSVENfSVNSX0FMUkFXRikpOworICByZXR1cm4gKChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfQUxSQVdGKSA9PSAoUlRDX0lTUl9BTFJBV0YpKSA/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpAQCAtMzUyOSw3ICszNDU4LDYgQEAKICAgQ0xFQVJfQklUKFJUQ3gtPkNSLCBSVENfQ1JfVFNJRSk7CiB9CiAKLSNpZiBkZWZpbmVkKFJUQ19XQUtFVVBfU1VQUE9SVCkKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIFdha2V1cCB0aW1lciBpbnRlcnJ1cHQKICAgKiBAbm90ZSAgIEJpdCBpcyB3cml0ZS1wcm90ZWN0ZWQuIEByZWYgTExfUlRDX0Rpc2FibGVXcml0ZVByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUuCkBAIC0zNTUzLDcgKzM0ODEsNiBAQAogewogICBDTEVBUl9CSVQoUlRDeC0+Q1IsIFJUQ19DUl9XVVRJRSk7CiB9Ci0jZW5kaWYgLyogUlRDX1dBS0VVUF9TVVBQT1JUICovCiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIEFsYXJtIEIgaW50ZXJydXB0CkBAIC0zNjMzLDEwICszNTYwLDkgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfSXNFbmFibGVkSVRfVFMoUlRDX1R5cGVEZWYgKlJUQ3gpCiB7Ci0gIHJldHVybiAoUkVBRF9CSVQoUlRDeC0+Q1IsIFJUQ19DUl9UU0lFKSA9PSAoUlRDX0NSX1RTSUUpKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoUlRDeC0+Q1IsIFJUQ19DUl9UU0lFKSA9PSAoUlRDX0NSX1RTSUUpKSA/IDFVTCA6IDBVTCk7CiB9CiAKLSNpZiBkZWZpbmVkKFJUQ19XQUtFVVBfU1VQUE9SVCkKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgaWYgIFdha2V1cCB0aW1lciBpbnRlcnJ1cHQgaXMgZW5hYmxlZCBvciBub3QKICAgKiBAcm10b2xsIENSICAgICAgICAgICBXVVRJRSAgICAgICAgIExMX1JUQ19Jc0VuYWJsZWRJVF9XVVQKQEAgLTM2NDUsOSArMzU3MSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0lzRW5hYmxlZElUX1dVVChSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5DUiwgUlRDX0NSX1dVVElFKSA9PSAoUlRDX0NSX1dVVElFKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPkNSLCBSVENfQ1JfV1VUSUUpID09IChSVENfQ1JfV1VUSUUpKSA/IDFVTCA6IDBVTCk7CiB9Ci0jZW5kaWYgLyogUlRDX1dBS0VVUF9TVVBQT1JUICovCiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgaWYgIEFsYXJtIEIgaW50ZXJydXB0IGlzIGVuYWJsZWQgb3Igbm90CkBAIC0zNjU3LDcgKzM1ODIsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19Jc0VuYWJsZWRJVF9BTFJCKFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZXR1cm4gKFJFQURfQklUKFJUQ3gtPkNSLCBSVENfQ1JfQUxSQklFKSA9PSAoUlRDX0NSX0FMUkJJRSkpOworICByZXR1cm4gKChSRUFEX0JJVChSVEN4LT5DUiwgUlRDX0NSX0FMUkJJRSkgPT0gKFJUQ19DUl9BTFJCSUUpKSA/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpAQCAtMzY2OCw3ICszNTkzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfSXNFbmFibGVkSVRfQUxSQShSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5DUiwgUlRDX0NSX0FMUkFJRSkgPT0gKFJUQ19DUl9BTFJBSUUpKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoUlRDeC0+Q1IsIFJUQ19DUl9BTFJBSUUpID09IChSVENfQ1JfQUxSQUlFKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKQEAgLTM2NzksOCArMzYwNCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0lzRW5hYmxlZElUX1RBTVAoUlRDX1R5cGVEZWYgKlJUQ3gpCiB7Ci0gIHJldHVybiAoUkVBRF9CSVQoUlRDeC0+VEFGQ1IsCi0gICAgICAgICAgICAgICAgICAgUlRDX1RBRkNSX1RBTVBJRSkgPT0gKFJUQ19UQUZDUl9UQU1QSUUpKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoUlRDeC0+VEFGQ1IsCisgICAgICAgICAgICAgICAgICAgIFJUQ19UQUZDUl9UQU1QSUUpID09IChSVENfVEFGQ1JfVEFNUElFKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKQEAgLTM3MzAsNCArMzY1NSw0IEBACiB9CiAjZW5kaWYKIAotI2VuZGlmIC8qIF9fU1RNMzJGM3h4X0xMX1JUQ19IICovCisjZW5kaWYgLyogU1RNMzJGM3h4X0xMX1JUQ19IICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmM3h4X2xsX3NwaS5oIGIvSW5jL3N0bTMyZjN4eF9sbF9zcGkuaAppbmRleCA0Y2UwMTBjLi5mMzVmYjFkIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2xsX3NwaS5oCisrKyBiL0luYy9zdG0zMmYzeHhfbGxfc3BpLmgKQEAgLTIyNDksMyArMjI0OSw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIFNUTTMyRjN4eF9MTF9TUElfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmM3h4X2xsX3N5c3RlbS5oIGIvSW5jL3N0bTMyZjN4eF9sbF9zeXN0ZW0uaAppbmRleCA3OTcyMWJiLi41MmRhZjhjIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2xsX3N5c3RlbS5oCisrKyBiL0luYy9zdG0zMmYzeHhfbGxfc3lzdGVtLmgKQEAgLTMsNiArMywxOCBAQAogICAqIEBmaWxlICAgIHN0bTMyZjN4eF9sbF9zeXN0ZW0uaAogICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtCiAgICogQGJyaWVmICAgSGVhZGVyIGZpbGUgb2YgU1lTVEVNIExMIG1vZHVsZS4KKyAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKKyAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEhvdyB0byB1c2UgdGhpcyBkcml2ZXIgIyMjIyMKQEAgLTE2LDE2ICsyOCw2IEBACiAKICAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqIEBhdHRlbnRpb24KLSAgKgotICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCi0gICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KLSAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KLSAgKgotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIAogLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTExMDMsNyArMTEwNSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9TWVNDRkdfU2V0RVhUSVNvdXJjZSh1aW50MzJfdCBQb3J0LCB1aW50MzJfdCBMaW5lKQogewotICBNT0RJRllfUkVHKFNZU0NGRy0+RVhUSUNSW0xpbmUgJiAweEZGXSwgKExpbmUgPj4gMTZVKSwgUG9ydCA8PCBQT1NJVElPTl9WQUwoKExpbmUgPj4gMTZVKSkpOworICBNT0RJRllfUkVHKFNZU0NGRy0+RVhUSUNSW0xpbmUgJiAweDNVXSwgKExpbmUgPj4gMTZVKSwgUG9ydCA8PCBQT1NJVElPTl9WQUwoKExpbmUgPj4gMTZVKSkpOwogfQogCiAvKioKQEAgLTEyMDMsNyArMTIwNSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfU1lTQ0ZHX0dldEVYVElTb3VyY2UodWludDMyX3QgTGluZSkKIHsKLSAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoU1lTQ0ZHLT5FWFRJQ1JbTGluZSAmIDB4RkZdLCAoTGluZSA+PiAxNlUpKSA+PiBQT1NJVElPTl9WQUwoTGluZSA+PiAxNlUpKTsKKyAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoU1lTQ0ZHLT5FWFRJQ1JbTGluZSAmIDB4M1VdLCAoTGluZSA+PiAxNlUpKSA+PiBQT1NJVElPTl9WQUwoTGluZSA+PiAxNlUpKTsKIH0KIAogLyoqCkBAIC0xNzE5LDMgKzE3MjEsNSBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjN4eF9MTF9TWVNURU1fSCAqLworCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfbGxfdGltLmggYi9JbmMvc3RtMzJmM3h4X2xsX3RpbS5oCmluZGV4IDdjOWNmZmUuLjlmZmVhNjQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfbGxfdGltLmgKKysrIGIvSW5jL3N0bTMyZjN4eF9sbF90aW0uaApAQCAtMTI1NSw2ICsxMjU1LDcgQEAKICAgKi8KIAogI2VuZGlmIC8qIFRJTV9TTUNSX09DQ1MqLworCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTI4NywxMCArMTI4OCw2IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBUSU1fTExfRU1fRXhwb3J0ZWRfTWFjcm9zIEV4cG9ydGVkX01hY3JvcwotICAqIEB7Ci0gICovCi0KIC8qKgogICAqIEBicmllZiAgSEVMUEVSIG1hY3JvIHJldHJpZXZpbmcgdGhlIFVJRkNQWSBmbGFnIGZyb20gdGhlIGNvdW50ZXIgdmFsdWUuCiAgICogQG5vdGUgZXg6IEByZWYgX19MTF9USU1fR0VURkxBR19VSUZDUFkgKEByZWYgTExfVElNX0dldENvdW50ZXIgKCkpOwpAQCAtMTM5MywxMSArMTM5MCw2IEBACiAgICogQH0KICAgKi8KIAotCi0vKioKLSAgKiBAfQotICAqLwotCiAvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCBUSU1fTExfRXhwb3J0ZWRfRnVuY3Rpb25zIFRJTSBFeHBvcnRlZCBGdW5jdGlvbnMKICAgKiBAewpAQCAtMTk5OSw3ICsxOTkxLDcgQEAKICAgKiBAbm90ZSAgIENINSBhbmQgQ0g2IGNoYW5uZWxzIGFyZSBub3QgYXZhaWxhYmxlIGZvciBhbGwgRjMgZGV2aWNlcwogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9DQ19Jc0VuYWJsZWRDaGFubmVsKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVscykKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fQ0NfSXNFbmFibGVkQ2hhbm5lbChjb25zdCBUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbHMpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFRJTXgtPkNDRVIsIENoYW5uZWxzKSA9PSAoQ2hhbm5lbHMpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0yNDE1LDcgKzI0MDcsNyBAQAogICAqIEBub3RlICAgQ0g1IGFuZCBDSDYgY2hhbm5lbHMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIGFsbCBGMyBkZXZpY2VzCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0lzRW5hYmxlZEZhc3QoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0lzRW5hYmxlZEZhc3QoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7CiAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CiAgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CkBAIC0yNTIxLDcgKzI1MTMsNyBAQAogICAqIEBub3RlICAgQ0g1IGFuZCBDSDYgY2hhbm5lbHMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIGFsbCBGMyBkZXZpY2VzCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0lzRW5hYmxlZFByZWxvYWQoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0lzRW5hYmxlZFByZWxvYWQoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7CiAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CiAgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CkBAIC0yNjM2LDcgKzI2MjgsNyBAQAogICAqIEBub3RlICAgQ0g1IGFuZCBDSDYgY2hhbm5lbHMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIGFsbCBGMyBkZXZpY2VzCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0lzRW5hYmxlZENsZWFyKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9PQ19Jc0VuYWJsZWRDbGVhcihjb25zdCBUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKICAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKQEAgLTMyMzQsNyArMzIyNiw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lDX0lzRW5hYmxlZFhPUkNvbWJpbmF0aW9uKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9JQ19Jc0VuYWJsZWRYT1JDb21iaW5hdGlvbihjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVElNeC0+Q1IyLCBUSU1fQ1IyX1RJMVMpID09IChUSU1fQ1IyX1RJMVMpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC01MDMwLDcgKzUwMjIsNyBAQAogICAqIEB7CiAgICovCiAKLUVycm9yU3RhdHVzIExMX1RJTV9EZUluaXQoVElNX1R5cGVEZWYgKlRJTXgpOworRXJyb3JTdGF0dXMgTExfVElNX0RlSW5pdChjb25zdCBUSU1fVHlwZURlZiAqVElNeCk7CiB2b2lkIExMX1RJTV9TdHJ1Y3RJbml0KExMX1RJTV9Jbml0VHlwZURlZiAqVElNX0luaXRTdHJ1Y3QpOwogRXJyb3JTdGF0dXMgTExfVElNX0luaXQoVElNX1R5cGVEZWYgKlRJTXgsIGNvbnN0IExMX1RJTV9Jbml0VHlwZURlZiAqVElNX0luaXRTdHJ1Y3QpOwogdm9pZCBMTF9USU1fT0NfU3RydWN0SW5pdChMTF9USU1fT0NfSW5pdFR5cGVEZWYgKlRJTV9PQ19Jbml0U3RydWN0KTsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYzeHhfbGxfdXNhcnQuaCBiL0luYy9zdG0zMmYzeHhfbGxfdXNhcnQuaAppbmRleCA4NjZiZTI0Li4wZTQ3MjVmIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2xsX3VzYXJ0LmgKKysrIGIvSW5jL3N0bTMyZjN4eF9sbF91c2FydC5oCkBAIC0zMSw3ICszMSw3IEBACiAgICogQHsKICAgKi8KIAotI2lmIGRlZmluZWQgKFVTQVJUMSkgfHwgZGVmaW5lZCAoVVNBUlQyKSB8fCBkZWZpbmVkIChVU0FSVDMpIHx8IGRlZmluZWQgKFVBUlQ0KSB8fCBkZWZpbmVkIChVQVJUNSkKKyNpZiBkZWZpbmVkKFVTQVJUMSkgfHwgZGVmaW5lZChVU0FSVDIpIHx8IGRlZmluZWQoVVNBUlQzKSB8fCBkZWZpbmVkKFVBUlQ0KSB8fCBkZWZpbmVkKFVBUlQ1KQogCiAvKiogQGRlZmdyb3VwIFVTQVJUX0xMIFVTQVJUCiAgICogQHsKQEAgLTQxLDYgKzQxLDEyIEBACiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiBQcml2YXRlIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBVU0FSVF9MTF9Qcml2YXRlX0NvbnN0YW50cyBVU0FSVCBQcml2YXRlIENvbnN0YW50cworICAqIEB7CisgICovCisvKioKKyAgKiBAfQorICAqLwogLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpZiBkZWZpbmVkKFVTRV9GVUxMX0xMX0RSSVZFUikKIC8qKiBAZGVmZ3JvdXAgVVNBUlRfTExfUHJpdmF0ZV9NYWNyb3MgVVNBUlQgUHJpdmF0ZSBNYWNyb3MKQEAgLTI2Miw3ICsyNjgsNyBAQAogI2Vsc2UKICNkZWZpbmUgTExfVVNBUlRfREFUQVdJRFRIXzhCICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgIC8qITwgOCBiaXRzIHdvcmQgbGVuZ3RoIDogU3RhcnQgYml0LCA4IGRhdGEgYml0cywgbiBzdG9wIGJpdHMgKi8KICNkZWZpbmUgTExfVVNBUlRfREFUQVdJRFRIXzlCICAgICAgICAgICAgICAgICAgIFVTQVJUX0NSMV9NICAgICAgICAgICAgIC8qITwgOSBiaXRzIHdvcmQgbGVuZ3RoIDogU3RhcnQgYml0LCA5IGRhdGEgYml0cywgbiBzdG9wIGJpdHMgKi8KLSNlbmRpZi8qIFVTQVJUXzdCSVRTX1NVUFBPUlQgKi8KKyNlbmRpZiAvKiBVU0FSVF83QklUU19TVVBQT1JUICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTI3Miw3ICsxMjc4LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VU0FSVF9BVVRPQkFVRF9ERVRFQ1RfT05fN0ZfRlJBTUUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VU0FSVF9BVVRPQkFVRF9ERVRFQ1RfT05fNTVfRlJBTUUKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRBdXRvQmF1ZFJhdGVNb2RlKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRBdXRvQmF1ZFJhdGVNb2RlKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoVVNBUlR4LT5DUjIsIFVTQVJUX0NSMl9BQlJNT0RFKSk7CiB9CkBAIC0zNjQxLDMgKzM2NDcsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBTVE0zMkYzeHhfTExfVVNBUlRfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmM3h4X2xsX3VzYi5oIGIvSW5jL3N0bTMyZjN4eF9sbF91c2IuaAppbmRleCA2ZmMwYWU3Li5jZDczZTcyIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmM3h4X2xsX3VzYi5oCisrKyBiL0luYy9zdG0zMmYzeHhfbGxfdXNiLmgKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKLSNlbmRpZgorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJmM3h4X2hhbF9kZWYuaCIKQEAgLTQyLDE1ICs0MiwxNCBAQAogICAqIEBicmllZiAgVVNCIE1vZGUgZGVmaW5pdGlvbgogICAqLwogCi0KLQogdHlwZWRlZiBlbnVtCiB7Ci0gIFVTQl9ERVZJQ0VfTU9ERSAgPSAwCisgIFVTQl9ERVZJQ0VfTU9ERSA9IDAKIH0gVVNCX01vZGVUeXBlRGVmOwogCisKIC8qKgotICAqIEBicmllZiAgVVNCIEluaXRpYWxpemF0aW9uIFN0cnVjdHVyZSBkZWZpbml0aW9uCisgICogQGJyaWVmICBVU0IgSW5zdGFuY2UgSW5pdGlhbGl6YXRpb24gU3RydWN0dXJlIGRlZmluaXRpb24KICAgKi8KIHR5cGVkZWYgc3RydWN0CiB7CkBAIC02OSw3MSArNjgsNjMgQEAKIAogICB1aW50MzJfdCBTb2ZfZW5hYmxlOyAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSB0aGUgb3V0cHV0IG9mIHRoZSBTT0Ygc2lnbmFsLiAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgdWludDMyX3QgbG93X3Bvd2VyX2VuYWJsZTsgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgTG93IFBvd2VyIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB1aW50MzJfdCBsb3dfcG93ZXJfZW5hYmxlOyAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSB0aGUgbG93IFBvd2VyIE1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgdWludDMyX3QgbHBtX2VuYWJsZTsgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgQmF0dGVyeSBjaGFyZ2luZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB1aW50MzJfdCBscG1fZW5hYmxlOyAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBMaW5rIFBvd2VyIE1hbmFnZW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgdWludDMyX3QgYmF0dGVyeV9jaGFyZ2luZ19lbmFibGU7IC8qITwgRW5hYmxlIG9yIGRpc2FibGUgQmF0dGVyeSBjaGFyZ2luZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIHVpbnQzMl90IGRtYV9lbmFibGU7ICAgICAgICAgICAgICAvKiE8IGRtYV9lbmFibGUgc3RhdGUgdW51c2VkLCBETUEgbm90IHN1cHBvcnRlZCBieSBGUyBpbnN0YW5jZSAgICAgICAgICAgICAgKi8KIH0gVVNCX0NmZ1R5cGVEZWY7CiAKIHR5cGVkZWYgc3RydWN0CiB7Ci0gIHVpbnQ4X3QgICBudW07ICAgICAgICAgICAgIC8qITwgRW5kcG9pbnQgbnVtYmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMSBhbmQgTWF4X0RhdGEgPSAxNSAgICAqLworICB1aW50OF90ICAgbnVtOyAgICAgICAgICAgICAgICAgIC8qITwgRW5kcG9pbnQgbnVtYmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAxIGFuZCBNYXhfRGF0YSA9IDE1ICAgKi8KIAotICB1aW50OF90ICAgaXNfaW47ICAgICAgICAgICAvKiE8IEVuZHBvaW50IGRpcmVjdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDAgYW5kIE1heF9EYXRhID0gMSAgICAgKi8KKyAgdWludDhfdCAgIGlzX2luOyAgICAgICAgICAgICAgICAvKiE8IEVuZHBvaW50IGRpcmVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSAxICAgICovCiAKLSAgdWludDhfdCAgIGlzX3N0YWxsOyAgICAgICAgLyohPCBFbmRwb2ludCBzdGFsbCBjb25kaXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDEgICAgICovCisgIHVpbnQ4X3QgICBpc19zdGFsbDsgICAgICAgICAgICAgLyohPCBFbmRwb2ludCBzdGFsbCBjb25kaXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDAgYW5kIE1heF9EYXRhID0gMSAgICAqLwogCi0gIHVpbnQ4X3QgICB0eXBlOyAgICAgICAgICAgIC8qITwgRW5kcG9pbnQgdHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBVU0JfRVBfVHlwZSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdWludDhfdCAgIHR5cGU7ICAgICAgICAgICAgICAgICAvKiE8IEVuZHBvaW50IHR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBVU0JfTExfRVBfVHlwZSAgICAgICAgICAgICAgICAgICAqLwogCi0gIHVpbnQ4X3QgICBkYXRhX3BpZF9zdGFydDsgIC8qITwgSW5pdGlhbCBkYXRhIFBJRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDAgYW5kIE1heF9EYXRhID0gMSAgICAgKi8KKyAgdWludDhfdCAgIGRhdGFfcGlkX3N0YXJ0OyAgICAgICAvKiE8IEluaXRpYWwgZGF0YSBQSUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDAgYW5kIE1heF9EYXRhID0gMSAgICAqLwogCi0gIHVpbnQxNl90ICBwbWFhZHJlc3M7ICAgICAgIC8qITwgUE1BIEFkZHJlc3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIGJldHdlZW4gTWluX2FkZHIgPSAwIGFuZCBNYXhfYWRkciA9IDFLICAgICovCiAKLSAgdWludDE2X3QgIHBtYWFkZHIwOyAgICAgICAgLyohPCBQTUEgQWRkcmVzczAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIGJldHdlZW4gTWluX2FkZHIgPSAwIGFuZCBNYXhfYWRkciA9IDFLICAgICovCisgIHVpbnQxNl90ICBwbWFhZHJlc3M7ICAgICAgICAgICAgLyohPCBQTUEgQWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBiZXR3ZWVuIE1pbl9hZGRyID0gMCBhbmQgTWF4X2FkZHIgPSAxSyAgICovCiAKLSAgdWludDE2X3QgIHBtYWFkZHIxOyAgICAgICAgLyohPCBQTUEgQWRkcmVzczEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIGJldHdlZW4gTWluX2FkZHIgPSAwIGFuZCBNYXhfYWRkciA9IDFLICAgICovCisgIHVpbnQxNl90ICBwbWFhZGRyMDsgICAgICAgICAgICAgLyohPCBQTUEgQWRkcmVzczAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgYmV0d2VlbiBNaW5fYWRkciA9IDAgYW5kIE1heF9hZGRyID0gMUsgICAqLwogCi0gIHVpbnQ4X3QgICBkb3VibGVidWZmZXI7ICAgIC8qITwgRG91YmxlIGJ1ZmZlciBlbmFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgMCBvciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHVpbnQxNl90ICBwbWFhZGRyMTsgICAgICAgICAgICAgLyohPCBQTUEgQWRkcmVzczEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgYmV0d2VlbiBNaW5fYWRkciA9IDAgYW5kIE1heF9hZGRyID0gMUsgICAqLwogCi0gIHVpbnQxNl90ICB0eF9maWZvX251bTsgICAgIC8qITwgVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHJlcXVpcmVkIGJ5IFVTQiBEZXZpY2UgRlMgcGVyaXBoZXJhbCwgaXQgaXMgdXNlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgYnkgVVNCIE9URyBGUyBwZXJpcGhlcmFsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgYWRkZWQgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgYWNyb3NzIFVTQiBwZXJpcGhlcmFscyAgICAqLworICB1aW50OF90ICAgZG91YmxlYnVmZmVyOyAgICAgICAgIC8qITwgRG91YmxlIGJ1ZmZlciBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSAwIG9yIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gIHVpbnQzMl90ICBtYXhwYWNrZXQ7ICAgICAgIC8qITwgRW5kcG9pbnQgTWF4IHBhY2tldCBzaXplCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSA2NEtCICAqLwogCi0gIHVpbnQ4X3QgICAqeGZlcl9idWZmOyAgICAgIC8qITwgUG9pbnRlciB0byB0cmFuc2ZlciBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB1aW50MzJfdCAgbWF4cGFja2V0OyAgICAgICAgICAgIC8qITwgRW5kcG9pbnQgTWF4IHBhY2tldCBzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDY0S0IgKi8KIAotICB1aW50MzJfdCAgeGZlcl9sZW47ICAgICAgICAvKiE8IEN1cnJlbnQgdHJhbnNmZXIgbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdWludDhfdCAgICp4ZmVyX2J1ZmY7ICAgICAgICAgICAvKiE8IFBvaW50ZXIgdG8gdHJhbnNmZXIgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gIHVpbnQzMl90ICB4ZmVyX2NvdW50OyAgICAgIC8qITwgUGFydGlhbCB0cmFuc2ZlciBsZW5ndGggaW4gY2FzZSBvZiBtdWx0aSBwYWNrZXQgdHJhbnNmZXIgICAgICAgICAgICAgICAgICAqLworICB1aW50MzJfdCAgeGZlcl9sZW47ICAgICAgICAgICAgIC8qITwgQ3VycmVudCB0cmFuc2ZlciBsZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgdWludDMyX3QgIHhmZXJfbGVuX2RiOyAgICAgIC8qITwgZG91YmxlIGJ1ZmZlciB0cmFuc2ZlciBsZW5ndGggdXNlZCB3aXRoIGJ1bGsgZG91YmxlIGJ1ZmZlciBpbiAgICAgICAgICAgKi8KKyAgdWludDMyX3QgIHhmZXJfY291bnQ7ICAgICAgICAgICAvKiE8IFBhcnRpYWwgdHJhbnNmZXIgbGVuZ3RoIGluIGNhc2Ugb2YgbXVsdGkgcGFja2V0IHRyYW5zZmVyICAgICAgICAgICAgICAgICAqLwogCi0gIHVpbnQ4X3QgICB4ZmVyX2ZpbGxfZGI7ICAgICAvKiE8IGRvdWJsZSBidWZmZXIgTmVlZCB0byBGaWxsIG5ldyBidWZmZXIgIHVzZWQgd2l0aCBidWxrX2luICAgICAgICAgICAgICAgICovCisgIHVpbnQzMl90ICB4ZmVyX2xlbl9kYjsgICAgICAgICAgLyohPCBkb3VibGUgYnVmZmVyIHRyYW5zZmVyIGxlbmd0aCB1c2VkIHdpdGggYnVsayBkb3VibGUgYnVmZmVyIGluICAgICAgICAgICAgKi8KIAorICB1aW50OF90ICAgeGZlcl9maWxsX2RiOyAgICAgICAgIC8qITwgZG91YmxlIGJ1ZmZlciBOZWVkIHRvIEZpbGwgbmV3IGJ1ZmZlciAgdXNlZCB3aXRoIGJ1bGtfaW4gICAgICAgICAgICAgICAgICovCiB9IFVTQl9FUFR5cGVEZWY7CiAKLQogLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoqIEBkZWZncm91cCBQQ0RfRXhwb3J0ZWRfQ29uc3RhbnRzIFBDRCBFeHBvcnRlZCBDb25zdGFudHMKICAgKiBAewogICAqLwotCi0KIC8qKiBAZGVmZ3JvdXAgVVNCX0xMX0VQMF9NUFMgVVNCIExvdyBMYXllciBFUDAgTVBTCiAgICogQHsKICAgKi8KQEAgLTE2NSw2ICsxNTYsNyBAQAogICAqIEB9CiAgICovCiAKKwogI2RlZmluZSBCVEFCTEVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMFUKICNpZiBkZWZpbmVkKFNUTTMyRjMwM3hDKSB8fCBkZWZpbmVkKFNUTTMyRjMwM3g4KSB8fCBkZWZpbmVkKFNUTTMyRjMzNHg4KSB8fCBkZWZpbmVkKFNUTTMyRjMwMXg4KSB8fCBkZWZpbmVkKFNUTTMyRjM3M3hDKSB8fCBkZWZpbmVkKFNUTTMyRjM3OHh4KSB8fCBkZWZpbmVkKFNUTTMyRjMwMnhDKQogI2RlZmluZSBQTUFfQUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyVQpAQCAtMTc5LDcgKzE3MSwxNyBAQAogLyogU1RNMzJGMzAyeEMgICAgICAgICAgICAgICAgfHwgKi8KIC8qIFNUTTMyRjMwMng4ICAgICAgICAgICAgICAgICAgICovCiAKKyNpZm5kZWYgVVNCX0VQX1JYX1NUUlgKKyNkZWZpbmUgVVNCX0VQX1JYX1NUUlggICAgICAgICAgICAgICAgICAgICAgICAgKDB4M1UgPDwgMTIpCisjZW5kaWYgLyogVVNCX0VQX1JYX1NUUlggKi8KKwogI2RlZmluZSBFUF9BRERSX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdVCisKKyNpZm5kZWYgVVNFX1VTQl9ET1VCTEVfQlVGRkVSCisjZGVmaW5lIFVTRV9VU0JfRE9VQkxFX0JVRkZFUiAgICAgICAgICAgICAgICAgIDFVCisjZW5kaWYgLyogVVNFX1VTQl9ET1VCTEVfQlVGRkVSICovCisKKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTI0Myw3ICsyNDUsNyBAQAogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KLSNlbmRpZgorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCiAKIAogI2VuZGlmIC8qIFNUTTMyRjN4eF9MTF9VU0JfSCAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjN4eF9sbF91dGlscy5oIGIvSW5jL3N0bTMyZjN4eF9sbF91dGlscy5oCmluZGV4IGU2ODQ5ZWUuLjkzNjEzYmIgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYzeHhfbGxfdXRpbHMuaAorKysgYi9JbmMvc3RtMzJmM3h4X2xsX3V0aWxzLmgKQEAgLTMsNiArMywxNyBAQAogICAqIEBmaWxlICAgIHN0bTMyZjN4eF9sbF91dGlscy5oCiAgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KICAgKiBAYnJpZWYgICBIZWFkZXIgZmlsZSBvZiBVVElMUyBMTCBtb2R1bGUuCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBhdHRlbnRpb24KKyAgKgorICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgKgorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQorICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KKyAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSG93IHRvIHVzZSB0aGlzIGRyaXZlciAjIyMjIwpAQCAtMTYsMTYgKzI3LDYgQEAKIAogICBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICogQGF0dGVudGlvbgotICAqCi0gICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KLSAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgotICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCmluZGV4IDQ2MTY3ODkuLjg4OTA3MzUgMTAwNjQ0Ci0tLSBhL1JFQURNRS5tZAorKysgYi9SRUFETUUubWQKQEAgLTI3LDIwICsyNywxMiBAQAogCiAjIyBDb21wYXRpYmlsaXR5IGluZm9ybWF0aW9uCiAKLUluIHRoaXMgdGFibGUsIHlvdSBjYW4gZmluZCB0aGUgc3VjY2Vzc2l2ZSB2ZXJzaW9ucyBvZiB0aGlzIEhBTC1MTCBEcml2ZXIgY29tcG9uZW50LCBpbiBsaW5lIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgdmVyc2lvbnMgb2YgdGhlIGZ1bGwgTUNVIHBhY2thZ2U6Ci0KLUl0IGlzICoqY3J1Y2lhbCoqIHRoYXQgeW91IHVzZSBhIGNvbnNpc3RlbnQgc2V0IG9mIHZlcnNpb25zIGZvciB0aGUgQ01TSVMgQ29yZSAtIENNU0lTIERldmljZSAtIEhBTCwgYXMgbWVudGlvbmVkIGluIHRoaXMgdGFibGUuCi0KLUhBTCBEcml2ZXIgRjMgfCBDTVNJUyBEZXZpY2UgRjMgfCBDTVNJUyBDb3JlIHwgV2FzIGRlbGl2ZXJlZCBpbiB0aGUgZnVsbCBNQ1UgcGFja2FnZQotLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UYWcgdjEuNS4yIHwgVGFnIHYyLjMuMyB8IFRhZyB2NC41X2NtNCB8IFRhZyB2MS4xMC4wIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCBIQUwgdGFnKQotVGFnIHYxLjUuMyB8IFRhZyB2Mi4zLjQgfCBUYWcgdjUuNC4wX2NtNCB8IFRhZyB2MS4xMS4wIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCBIQUwgdGFnKQotVGFnIHYxLjUuNCB8IFRhZyB2Mi4zLjQgfCBUYWcgdjUuNC4wX2NtNCB8IFRhZyB2MS4xMS4xIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCBIQUwgdGFnKQotVGFnIHYxLjUuNSB8IFRhZyB2Mi4zLjUgfCBUYWcgdjUuNC4wX2NtNCB8IFRhZyB2MS4xMS4yIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCBIQUwgdGFnKQotVGFnIHYxLjUuNiB8IFRhZyB2Mi4zLjYgfCBUYWcgdjUuNC4wX2NtNCB8IFRhZyB2MS4xMS4zIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCBIQUwgdGFnKQorSXQgaXMgKipjcnVjaWFsKiogdGhhdCB5b3UgdXNlIGEgY29uc2lzdGVudCBzZXQgb2YgdmVyc2lvbnMgZm9yIHRoZSBDTVNJUyBDb3JlIC0gQ01TSVMgRGV2aWNlIC0gSEFMLCBhcyBtZW50aW9uZWQgaW4gW3RoaXNdKGh0dHBzOi8vaHRtbHByZXZpZXcuZ2l0aHViLmlvLz9odHRwczovL2dpdGh1Yi5jb20vU1RNaWNyb2VsZWN0cm9uaWNzL1NUTTMyQ3ViZUYzL2Jsb2IvbWFzdGVyL1JlbGVhc2VfTm90ZXMuaHRtbCkgcmVsZWFzZSBub3RlLgogCiBUaGUgZnVsbCAqKlNUTTMyQ3ViZUYzKiogTUNVIHBhY2thZ2UgaXMgYXZhaWxhYmxlIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vU1RNaWNyb2VsZWN0cm9uaWNzL1NUTTMyQ3ViZUYzKS4KIAogIyMgVHJvdWJsZXNob290aW5nCiAKLVBsZWFzZSByZWZlciB0byB0aGUgW0NPTlRSSUJVVElORy5tZF0oQ09OVFJJQlVUSU5HLm1kKSBndWlkZS4KK0lmIHlvdSBoYXZlIGFueSBpc3N1ZSB3aXRoIHRoZSAqKnNvZnR3YXJlIGNvbnRlbnQqKiBvZiB0aGlzIHJlcG9zaXRvcnksIHlvdSBjYW4gZmlsZSBhbiBpc3N1ZSBbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1NUTWljcm9lbGVjdHJvbmljcy9zdG0zMmYzeHhfaGFsX2RyaXZlci9pc3N1ZXMvbmV3L2Nob29zZSkuCisKK0ZvciBhbnkgb3RoZXIgcXVlc3Rpb24gcmVsYXRlZCB0byB0aGUgcHJvZHVjdCwgdGhlIHRvb2xzLCB0aGUgZW52aXJvbm1lbnQsIHlvdSBjYW4gc3VibWl0IGEgdG9waWMgb24gdGhlIFtTVCBDb21tdW5pdHkvU1RNMzIgTUNVcyBmb3J1bV0oaHR0cHM6Ly9jb21tdW5pdHkuc3QuY29tL3MvZ3JvdXAvMEY5MFgwMDAwMDBBWHNBU0FXL3N0bTMyLW1jdXMpLgpkaWZmIC0tZ2l0IGEvUmVsZWFzZV9Ob3Rlcy5odG1sIGIvUmVsZWFzZV9Ob3Rlcy5odG1sCmluZGV4IDA4ZWVlNjkuLmRjMWU0NjEgMTAwNjQ0Ci0tLSBhL1JlbGVhc2VfTm90ZXMuaHRtbAorKysgYi9SZWxlYXNlX05vdGVzLmh0bWwKQEAgLTExLDQxICsxMSwxNzIgQEAKICAgICAgIHNwYW4udW5kZXJsaW5le3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO30KICAgICAgIGRpdi5jb2x1bW57ZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aWR0aDogNTAlO30KICAgPC9zdHlsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJfaHRtcmVzYy9taW5pLXN0LmNzcyIgLz4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJfaHRtcmVzYy9taW5pLXN0XzIwMjAuY3NzIiAvPgogICA8IS0tW2lmIGx0IElFIDldPgogICAgIDxzY3JpcHQgc3JjPSIvL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9odG1sNXNoaXYvMy43LjMvaHRtbDVzaGl2LXByaW50c2hpdi5taW4uanMiPjwvc2NyaXB0PgogICA8IVtlbmRpZl0tLT4KKyAgPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9Il9odG1yZXNjL2Zhdmljb24ucG5nIiAvPgogPC9oZWFkPgogPGJvZHk+CiA8ZGl2IGNsYXNzPSJyb3ciPgogPGRpdiBjbGFzcz0iY29sLXNtLTEyIGNvbC1sZy00Ij4KLTxkaXYgY2xhc3M9ImNhcmQgZmx1aWQiPgotPGRpdiBjbGFzcz0ic2VjdGlvbmUgZGFyayI+CiA8Y2VudGVyPgotPGgxIGlkPSJyZWxlYXNlLW5vdGVzLWZvci1zdG0zMmYzeHgtaGFsLWRyaXZlcnMiPjxzdHJvbmc+UmVsZWFzZSBOb3RlcyBmb3IgU1RNMzJGM3h4IEhBTCBEcml2ZXJzPC9zdHJvbmc+PC9oMT4KLTxwPkNvcHlyaWdodCDCqSAyMDE2IFNUTWljcm9lbGVjdHJvbmljczxiciAvPgotPC9wPgotPGEgaHJlZj0iaHR0cHM6Ly93d3cuc3QuY29tIiBjbGFzcz0ibG9nbyI+PGltZyBzcmM9Ii4uLy4uL19odG1yZXNjL3N0X2xvZ28ucG5nIiBhbHQ9IlNUIGxvZ28iIC8+PC9hPgorPGgxIGlkPSJyZWxlYXNlLW5vdGVzLWZvcnN0bTMyZjN4eC1oYWwtZHJpdmVycyI+PHNtYWxsPlJlbGVhc2UgTm90ZXMgZm9yPC9zbWFsbD48bWFyaz5TVE0zMkYzeHggSEFMIERyaXZlcnM8L21hcms+PC9oMT4KKzxwPkNvcHlyaWdodCDCqSAyMDE2IFNUTWljcm9lbGVjdHJvbmljczwvcD4KKzxhIGhyZWY9Imh0dHBzOi8vd3d3LnN0LmNvbSIgY2xhc3M9ImxvZ28iPjxpbWcgc3JjPSJfaHRtcmVzYy9zdF9sb2dvXzIwMjAucG5nIiBhbHQ9IlNUIGxvZ28iIC8+PC9hPgogPC9jZW50ZXI+Ci08L2Rpdj4KLTwvZGl2PgotPGgxIGlkPSJsaWNlbnNlIj48c3Ryb25nPkxpY2Vuc2U8L3N0cm9uZz48L2gxPgotVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsIHRoZSDigJxMaWNlbnNl4oCdOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBjb21wb25lbnQgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgotPGNlbnRlcj4KLTxhIGhyZWY9Imh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlIj5odHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZTwvYT4KLTwvY2VudGVyPgorPGgxIGlkPSJwdXJwb3NlIj5QdXJwb3NlPC9oMT4KKzxwPlRoZSBTVE0zMkN1YmUgSEFMIGFuZCBMTCwgYW4gU1RNMzIgYWJzdHJhY3Rpb24gbGF5ZXIgZW1iZWRkZWQgc29mdHdhcmUsIGVuc3VyZSBtYXhpbWl6ZWQgcG9ydGFiaWxpdHkgYWNyb3NzIFNUTTMyIHBvcnRmb2xpby48L3A+Cis8cD5UaGUgUG9ydGFibGUgQVBJcyBsYXllciBwcm92aWRlcyBhIGdlbmVyaWMsIG11bHRpIGluc3RhbmNlZCBhbmQgc2ltcGxlIHNldCBvZiBBUElzIHRvIGludGVyYWN0IHdpdGggdGhlIHVwcGVyIGxheWVyIChhcHBsaWNhdGlvbiwgbGlicmFyaWVzIGFuZCBzdGFja3MpLiBJdCBpcyBjb21wb3NlZCBvZiBuYXRpdmUgYW5kIGV4dGVuZGVkIEFQSXMgc2V0LiBJdCBpcyBkaXJlY3RseSBidWlsdCBhcm91bmQgYSBnZW5lcmljIGFyY2hpdGVjdHVyZSBhbmQgYWxsb3dzIHRoZSBidWlsZC11cG9uIGxheWVycywgbGlrZSB0aGUgbWlkZGxld2FyZSBsYXllciwgdG8gaW1wbGVtZW50IGl0cyBmdW5jdGlvbnMgd2l0aG91dCBrbm93aW5nIGluLWRlcHRoIHRoZSB1c2VkIFNUTTMyIGRldmljZS4gVGhpcyBpbXByb3ZlcyB0aGUgbGlicmFyeSBjb2RlIHJlLXVzYWJpbGl0eSBhbmQgZ3VhcmFudGVlcyBhbiBlYXN5IHBvcnRhYmlsaXR5IG9uIG90aGVyIGRldmljZXMgYW5kIFNUTTMyIGZhbWlsaWVzLjwvcD4KKzxwPlRoZSBMb3cgTGF5ZXIgKExMKSBkcml2ZXJzIGFyZSBwYXJ0IG9mIHRoZSBTVE0zMkN1YmUgZmlybXdhcmUgSEFMIHRoYXQgcHJvdmlkZSBiYXNpYyBzZXQgb2Ygb3B0aW1pemVkIGFuZCBvbmUgc2hvdCBzZXJ2aWNlcy4gVGhlIExvdyBsYXllciBkcml2ZXJzLCBjb250cmFyeSB0byB0aGUgSEFMIG9uZXMgYXJlIG5vdCBGdWxseSBQb3J0YWJsZSBhY3Jvc3MgdGhlIFNUTTMyIGZhbWlsaWVzOyB0aGUgYXZhaWxhYmlsaXR5IG9mIHNvbWUgZnVuY3Rpb25zIGRlcGVuZCBvbiB0aGUgcGh5c2ljYWwgYXZhaWxhYmlsaXR5IG9mIHRoZSByZWxhdGl2ZSBmZWF0dXJlcyBvbiB0aGUgcHJvZHVjdC4gVGhlIExvdyBMYXllciAoTEwpIGRyaXZlcnMgYXJlIGRlc2lnbmVkIHRvIG9mZmVyIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6PC9wPgorPHVsPgorPGxpPk5ldyBzZXQgb2YgaW5saW5lIGZ1bmN0aW9uIGZvciBkaXJlY3QgYW5kIGF0b21pYyByZWdpc3RlciBhY2Nlc3M8L2xpPgorPGxpPk9uZS1zaG90IG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgSEFMIGRyaXZlcnMgb3IgZnJvbSBhcHBsaWNhdGlvbiBsZXZlbC48L2xpPgorPGxpPkZ1bGx5IEluZGVwZW5kZW50IGZyb20gSEFMIGFuZCBjYW4gYmUgdXNlZCBpbiBzdGFuZGFsb25lIHVzYWdlICh3aXRob3V0IEhBTCBkcml2ZXJzKTwvbGk+Cis8bGk+RnVsbCBmZWF0dXJlcyBjb3ZlcmFnZSBvZiB0aGUgYWxsIHRoZSBzdXBwb3J0ZWQgcGVyaXBoZXJhbHMuPC9saT4KKzwvdWw+CiA8L2Rpdj4KIDxkaXYgY2xhc3M9ImNvbC1zbS0xMiBjb2wtbGctOCI+CiA8aDEgaWQ9InVwZGF0ZS1oaXN0b3J5Ij48c3Ryb25nPlVwZGF0ZSBIaXN0b3J5PC9zdHJvbmc+PC9oMT4KIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KLTxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xXzVfNiIgY2hlY2tlZCBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xXzVfNiIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuNS42IC8gMjMtSnVseS0yMDIxPC9zdHJvbmc+PC9sYWJlbD4KKzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xXzVfNyIgY2hlY2tlZCBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xXzVfNyIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuNS43IC8gMjctSmFudWFyeS0yMDIzPC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+CiA8aDIgaWQ9Im1haW4tY2hhbmdlcyI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KLTxsaT5HZW5lcmFsIHVwZGF0ZXMgdG8gZml4IGtub3duIGRlZmVjdHMgYW5kIGVuaGFuY2VtZW50cyBpbXBsZW1lbnRhdGlvbi48L2xpPgorPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgaW1wbGVtZW50YXRpb24gZW5oYW5jZW1lbnRzLjwvbGk+Cis8bGk+SEFMIGNvZGUgcXVhbGl0eSBlbmhhbmNlbWVudCBmb3IgTUlTUkEtQyBSdWxlLTguMTMgYnkgYWRkaW5nIGNvbnN0IHF1YWxpZmllcnM8L2xpPgogPC91bD4KIDxoMiBpZD0iY29udGVudHMiPkNvbnRlbnRzPC9oMj4KIDx1bD4KKzxsaT48c3Ryb25nPkhBTCBHZW5lcmljPC9zdHJvbmc+IHVwZGF0ZQorPHVsPgorPGxpPkFsbG93IHJlZGVmaW5pdGlvbiBvZiBtYWNybyBVTlVTRUQoeCkuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBSQ0M8L3N0cm9uZz4gdXBkYXRlCis8dWw+Cis8bGk+QWRkIOKAmHN0YXRpY+KAmSBzdG9yYWdlLWNsYXNzIHNwZWNpZmllciB0byDigJhjb25zdOKAmSBhcnJheXMuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBFWFRJPC9zdHJvbmc+IHVwZGF0ZQorPHVsPgorPGxpPkZpeCBjb21wdXRhdGlvbiBvZiBwRXh0aUNvbmZpZy0mZ3Q7R1BJT1NlbCBpbiBIQUxfRVhUSV9HZXRDb25maWdMaW5lKCk8L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIENSQzwvc3Ryb25nPiB1cGRhdGUKKzx1bD4KKzxsaT5BZGQgZmlsdGVyIGluIEhBTF9DUkNFeF9Qb2x5bm9taWFsX1NldCgpIHRvIGV4Y2x1ZGUgZXZlbiBwb2x5bm9taWFscy48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIEFEQzwvc3Ryb25nPiB1cGRhdGUKKzx1bD4KKzxsaT5SZW1vdmUgbXVsdGlwbGUgdm9sYXRpbGUgcmVhZHMgb3Igd3JpdGVzIGluIGludGVycnVwdCBoYW5kbGVyIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBDRUM8L3N0cm9uZz4gdXBkYXRlCis8dWw+Cis8bGk+QmV0dGVyIHBlcmZvcm1hbmNlIGJ5IHJlbW92aW5nIG11bHRpcGxlIHZvbGF0aWxlIHJlYWRzIG9yIHdyaXRlcyBpbiBpbnRlcnJ1cHQgaGFuZGxlci48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIFNEQURDPC9zdHJvbmc+Cis8dWw+Cis8bGk+QmV0dGVyIHBlcmZvcm1hbmNlIGJ5IHJlbW92aW5nIG11bHRpcGxlIHZvbGF0aWxlIHJlYWRzIG9yIHdyaXRlcyBpbiBpbnRlcnJ1cHQgaGFuZGxlci48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+TEwvSEFMIFRJTTwvc3Ryb25nPiB1cGRhdGUKKzx1bD4KKzxsaT5GaXggSEFMX1RJTUV4X1JlbWFwQ29uZmlnKCkgbG9jayBpc3N1ZTogX19IQUxfTE9DSyBpcyBjYWxsZWQgYmVmb3JlIGNhbGxzIHRvIGFzc2VydF9wYXJhbSgpLjwvbGk+Cis8bGk+X19MTF9USU1fQ0FMQ19QU0MoKSBtYWNybyB1cGRhdGUgdG8gcm91bmQgdXAgdGhlIGV2YWx1YXRlIHZhbHVlIHdoZW4gdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgZGl2aXNpb24gaXMgZ3JlYXRlciB0aGFuIDAuNS48L2xpPgorPGxpPlJlbW92ZSB1c2VsZXNzIGNoZWNrIG9uIElTX1RJTV9BRFZBTkNFRF9JTlNUQU5DRSgpIHdpdGhpbiBMTF9USU1fQkRUUl9Jbml0KCkgdG8gZml4IEJyZWFrIEZpbHRlciBjb25maWd1cmF0aW9uIHByb2JsZW0gd2l0aCBzcGVjaWZpYyBUSU0gaW5zdGFuY2VzPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBDQU48L3N0cm9uZz4gdXBkYXRlCis8dWw+Cis8bGk+UmVtb3ZhbCBvZiBuZXZlciByZWFjaGVkIGNvZGU8L2xpPgorPGxpPkltcHJvdmUgcHJvdGVjdGlvbiBhZ2FpbnN0IGJhZCBpbnB1dHM8L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIFJUQ19CS1A8L3N0cm9uZz4gdXBkYXRlCis8dWw+Cis8bGk+VXNlIGJpdHMgZGVmaW5pdGlvbnMgZnJvbSBDTVNJUyBEZXZpY2UgaGVhZGVyIGZpbGUgaW5zdGVhZCBvZiBoYXJkLWNvZGVkIHZhbHVlcy48L2xpPgorPGxpPldyYXAgY29tbWVudHMgdG8gYmUgODAtY2hhcmFjdGVyIGxvbmcgYW5kIGNvcnJlY3QgdHlwb3MuPC9saT4KKzxsaT5Nb3ZlIGNvbnN0YW50cyBSVENfSVRfVEFNUC4gZnJvbSBoYWxfcnRjLmggdG8gaGFsX3J0Y19leC5oLjwvbGk+Cis8bGk+R2F0aGVyIGFsbCBpbnN0cnVjdGlvbnMgcmVsYXRlZCB0byBleGl0aW5nIHRoZSBpbml0IG1vZGUgaW50byBuZXcgZnVuY3Rpb24gUlRDX0V4aXRJbml0TW9kZSgpLjwvbGk+Cis8bGk+QWRkIG5ldyBtYWNybyBhc3NlcnRfcGFyYW0oSVNfUlRDX1RBTVBFUl9GSUxURVJfQ09ORklHX0NPUlJFQ1Qoc1RhbXBlci0mZ3Q7RmlsdGVyLCBzVGFtcGVyLSZndDtUcmlnZ2VyKSkgdG8gY2hlY2sgdGFtcGVyIGZpbHRlcmluZyBpcyBkaXNhYmxlZCBpbiBjYXNlIHRhbXBlciBldmVudHMgYXJlIHRyaWdnZXJlZCBvbiBzaWduYWwgZWRnZXMuPC9saT4KKzxsaT5SZXdvcmsgZnVuY3Rpb25zIEhBTF9SVENFeF9TZXRUYW1wZXIoKSBhbmQgSEFMX1JUQ0V4X1NldFRhbXBlcl9JVCgpIHRvOgorPHVsPgorPGxpPldyaXRlIGluIFRBRkNSIHJlZ2lzdGVyIGluIG9uZSBzaW5nbGUgYWNjZXNzIGluc3RlYWQgb2YgdHdvLjwvbGk+Cis8bGk+QXZvaWQgbW9kaWZ5aW5nIHVzZXIgc3RydWN0dXJlIHNUYW1wZXIuPC9saT4KKzwvdWw+PC9saT4KKzxsaT5DaGVjayBpZiB0aGUgUlRDIGNhbGVuZGFyIGhhcyBiZWVuIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGVudGVyaW5nIGluaXRpYWxpemF0aW9uIG1vZGUuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBOT1I8L3N0cm9uZz4gdXBkYXRlCis8dWw+Cis8bGk+QWxpZ24gSEFMX05PUl9Jbml0KCkgQVBJIHdpdGggY29yZSBvZiB0aGUgZnVuY3Rpb24gd2hlbiB3cml0ZSBvcGVyYXRpb24gaXMgZGlzYWJsZWQgdG8gYXZvaWQgSGFyZEZhdWx0LjwvbGk+Cis8bGk+Rk1DX1dSSVRFX09QRVJBVElPTl9ESVNBQkxFIGZvciBOT1IgY2F1c2UgSGFyZGZhdWx0IGZvciBSZWFkIG9wZXJhdGlvbnM8L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIFVBUlQ8L3N0cm9uZz4gdXBkYXRlCis8dWw+Cis8bGk+SW1wcm92ZSBoZWFkZXIgZGVzY3JpcHRpb24gb2YgVUFSVF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KCkgZnVuY3Rpb248L2xpPgorPGxpPkFkZCBhIGNoZWNrIG9uIHRoZSBVQVJUIHBhcml0eSBiZWZvcmUgZW5hYmxpbmcgdGhlIHBhcml0eSBlcnJvciBpbnRlcnJ1cHRpb24uPC9saT4KKzxsaT5BZGQgY29uc3QgcXVhbGlmaWVyIGZvciByZWFkIG9ubHkgcG9pbnRlcnMuPC9saT4KKzxsaT5GaXggd3JvbmcgY2FzdCB3aGVuIGNvbXB1dGluZyB0aGUgVVNBUlRESVYgdmFsdWUgaW4gVUFSVF9TZXRDb25maWcoKS48L2xpPgorPGxpPkFkZCBhIG5ldyBBUEkgSEFMX1VBUlRFeF9HZXRSeEV2ZW50VHlwZSgpIHRoYXQgY291bGQgYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgdHlwZSBvZiBldmVudCB0aGF0IGhhcyBsZWQgdGhlIFJ4RXZlbnRDYWxsYmFjaygpIGV4ZWN1dGlvbjwvbGk+Cis8bGk+UmVtb3ZhbCBvZiBIQUxfTE9DSy9IQUxfVU5MT0NLIGNhbGxzIGluIEhBTCBVQVJUIFR4IGFuZCBSeCBBUElzPC9saT4KKzxsaT5EaXNhYmxlIHRoZSBSZWNlaXZlciBUaW1lb3V0IEludGVycnVwdCB3aGVuIGRhdGEgcmVjZXB0aW9uIGlzIGNvbXBsZXRlZC48L2xpPgorPGxpPlJld29yayBvZiBVQVJUX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoKSBBUEkgdG8gYXZvaWQgYmVpbmcgc3R1Y2sgZm9yZXZlciB3aGVuIFVBUlQgb3ZlcnJ1biBlcnJvciBvY2N1cnMgYW5kIHRvIGVuaGFuY2UgYmVoYXZpb3IuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBTTUFSVENBUkQ8L3N0cm9uZz4gdXBkYXRlCis8dWw+Cis8bGk+SW1wcm92ZSBoZWFkZXIgZGVzY3JpcHRpb24gb2YgU01BUlRDQVJEX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoKSBmdW5jdGlvbjwvbGk+Cis8bGk+QWRkIGNvbnN0IHF1YWxpZmllciBmb3IgcmVhZCBvbmx5IHBvaW50ZXJzLjwvbGk+Cis8bGk+Rml4IHdyb25nIGNhc3Qgd2hlbiBjb21wdXRpbmcgdGhlIFVTQVJURElWIHZhbHVlIGluIFNNQVJUQ0FSRF9TZXRDb25maWcoKS48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIElSREE8L3N0cm9uZz4gdXBkYXRlCis8dWw+Cis8bGk+SW1wcm92ZSBoZWFkZXIgZGVzY3JpcHRpb24gb2YgSVJEQV9XYWl0T25GbGFnVW50aWxUaW1lb3V0KCkgZnVuY3Rpb248L2xpPgorPGxpPkFkZCBhIGNoZWNrIG9uIHRoZSBJUkRBIHBhcml0eSBiZWZvcmUgZW5hYmxpbmcgdGhlIHBhcml0eSBlcnJvciBpbnRlcnJ1cHQuPC9saT4KKzxsaT5BZGQgY29uc3QgcXVhbGlmaWVyIGZvciByZWFkIG9ubHkgcG9pbnRlcnMuPC9saT4KKzxsaT5GaXggd3JvbmcgY2FzdCB3aGVuIGNvbXB1dGluZyB0aGUgVVNBUlRESVYgdmFsdWUgaW4gSVJEQV9TZXRDb25maWcoKS48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+TEwvSEFMIFVTQVJUPC9zdHJvbmc+IHVwZGF0ZQorPHVsPgorPGxpPkltcHJvdmUgaGVhZGVyIGRlc2NyaXB0aW9uIG9mIFVTQVJUX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoKSBmdW5jdGlvbjwvbGk+Cis8bGk+QWRkIGEgY2hlY2sgb24gdGhlIFVTQVJUIHBhcml0eSBiZWZvcmUgZW5hYmxpbmcgdGhlIHBhcml0eSBlcnJvciBpbnRlcnJ1cHQuPC9saT4KKzxsaT5BZGQgY29uc3QgcXVhbGlmaWVyIGZvciByZWFkIG9ubHkgcG9pbnRlcnMuPC9saT4KKzxsaT5GaXggY29tcGlsYXRpb24gd2FybmluZ3MgZ2VuZXJhdGVkIHdpdGggQVJNVjYgY29tcGlsZXIuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBTUEk8L3N0cm9uZz4gdXBkYXRlCis8dWw+Cis8bGk+Rml4IGRyaXZlciB0byBkb27igJl0IHVwZGF0ZSBzdGF0ZSBpbiBjYXNlIG9mIGVycm9yLiAoSEFMX1NQSV9TVEFURV9SRUFEWSB3aWxsIGJlIHNldCBvbmx5IGluIGNhc2Ugb2YgSEFMX1RJTUVPVVQpLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgSTJDPC9zdHJvbmc+IHVwZGF0ZQorPHVsPgorPGxpPkltcHJvdmUgaGVhZGVyIGRlc2NyaXB0aW9uIG9mIEkyQ19XYWl0T25GbGFnVW50aWxUaW1lb3V0KCkgZnVuY3Rpb248L2xpPgorPGxpPlVwZGF0ZSBJMkNfVHJhbnNmZXJDb25maWcoKSBBUEkgdG8gRml4IHdyaXR0ZW4gcmVzZXJ2ZWQgYml0IDI4IGluIEkyQ19DUjIgcmVnaXN0ZXIuPC9saT4KKzxsaT5VcGRhdGUgdG8gaGFuZGxlIGVycm9ycyBpbiBwb2xsaW5nIG1vZGUuCis8dWw+Cis8bGk+UmVuYW1lIEkyQ19Jc0Fja25vd2xlZGdlRmFpbGVkKCkgdG8gSTJDX0lzRXJyb3JPY2N1cnJlZCgpIGFuZCBjb3JyZWN0bHkgbWFuYWdlIHdoZW4gZXJyb3Igb2NjdXJzLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+VXBkYXRlIHRvIGZpeCBpc3N1ZSBkZXRlY3RlZCBkdWUgdG8gbG93IHN5c3RlbSBmcmVxdWVuY3kgZXhlY3V0aW9uIChIU0kpLjwvbGk+Cis8bGk+RGVjbGFyZSBhbiBpbnRlcm5hbCBtYWNybyBsaW5rIHRvIERNQSBtYWNybyB0byBjaGVjayByZW1haW5pbmcgZGF0YTogSTJDX0dFVF9ETUFfUkVNQUlOX0RBVEE8L2xpPgorPGxpPlRpbWVvdXQgaXNzdWUgdXNpbmcgSEFMIE1FTSBpbnRlcmZhY2UgdGhyb3VnaCBGcmVlUlRPUzwvbGk+Cis8bGk+STJDX0lzRXJyb3JPY2N1cnJlZCBkb2VzIG5vdCByZXR1cm4gZXJyb3IgaWYgdGltZW91dCBpcyBkZXRlY3RlZC48L2xpPgorPGxpPkNsZWFyIHRoZSBBRERSRiBmbGFnIG9ubHkgd2hlbiBkaXJlY3Rpb24gaXMgY29uZmlybWVkIGFzIGNoYW5nZWQsIHRvIHByZXZlbnQgdGhhdCB0aGUgQUREUkYgZmxhZyBpcyBjbGVhcmVkIHRvbyBlYXJseSB3aGVuIHRoZSByZXN0YXJ0IGlzIHJlY2VpdmVkPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBTTUJVUzwvc3Ryb25nPiB1cGRhdGUKKzx1bD4KKzxsaT5BZGQgZmx1c2hpbmcgb2YgVFggcmVnaXN0ZXIgdG8gZml4IGlzc3VlIG9mIG1pc21hdGNoaW5nIGRhdGEgcmVjZWl2ZWQgYnkgbWFzdGVyIGluIGNhc2UgZGF0YSBzaXplIHRvIGJlIHRyYW5zbWl0dGVkIGJ5IHRoZSBzbGF2ZSBpcyBncmVhdGVyIHRoYW4gdGhlIGRhdGEgc2l6ZSB0byBiZSByZWNlaXZlZCBieSB0aGUgbWFzdGVyLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgVVNCX0ZTPC9zdHJvbmc+IHVwZGF0ZQorPHVsPgorPGxpPlBDRDogYWRkIHN1cHBvcnRpbmcgbXVsdGkgcGFja2V0cyB0cmFuc2ZlciBvbiBJbnRlcnJ1cHQgZW5kcG9pbnQ8L2xpPgorPGxpPkhBTDogUENEOiBzb2Z0d2FyZSBjb3JyZWN0aW9uIGFkZGVkIHRvIGF2b2lkIHVuZXhwZWN0ZWQgU1RBTEwgY29uZGl0aW9uIGR1cmluZyBFUDAgbXVsdGkgcGFja2V0IE9VVCB0cmFuc2Zlci48L2xpPgorPGxpPmhhbF9wY2QuaDogYWRkIGEgbWFzayBmb3IgVVNCIFJYIGJ5dGVzIGNvdW50PC9saT4KKzwvdWw+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iY29sbGFwc2UiPgorPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjFfNV82IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xXzVfNiIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuNS42IC8gMjMtSnVseS0yMDIxPC9zdHJvbmc+PC9sYWJlbD4KKzxkaXY+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy0xIj5NYWluIENoYW5nZXM8L2gyPgorPHVsPgorPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uLjwvbGk+Cis8L3VsPgorPGgyIGlkPSJjb250ZW50cy0xIj5Db250ZW50czwvaDI+Cis8dWw+CiA8bGk+PHN0cm9uZz5IQUwgR1BJTzwvc3Ryb25nPiBkcml2ZXIKIDx1bD4KIDxsaT5VcGRhdGUgSEFMX0dQSU9fSW5pdCgpIEFQSSB0byBhdm9pZCB0aGUgY29uZmlndXJhdGlvbiBvZiBQVVBEUiByZWdpc3RlciB3aGVuIEFuYWxvZyBtb2RlIGlzIHNlbGVjdGVkLjwvbGk+CkBAIC0xMzcsMTEgKzI2OCwxMSBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjFfNV81IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xXzVfNSIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuNS41IC8gMTAtTm92ZW1iZXItMjAyMDwvc3Ryb25nPjwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTIiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+R2VuZXJhbCB1cGRhdGVzIHRvIGZpeCBrbm93biBkZWZlY3RzIGFuZCBlbmhhbmNlbWVudHMgaW1wbGVtZW50YXRpb24uPC9saT4KIDwvdWw+Ci08aDIgaWQ9ImNvbnRlbnRzLTEiPkNvbnRlbnRzPC9oMj4KKzxoMiBpZD0iY29udGVudHMtMiI+Q29udGVudHM8L2gyPgogPHVsPgogPGxpPjxzdHJvbmc+SEFMPC9zdHJvbmc+IGRyaXZlciB1cGRhdGUKIDx1bD4KQEAgLTM2NSwxMSArNDk2LDExIEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMV81XzQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjFfNV80IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS41LjQgLyAyMy1KdWx5LTIwMjA8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTIiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy0zIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uPC9saT4KIDwvdWw+Ci08aDIgaWQ9ImNvbnRlbnRzLTIiPkNvbnRlbnRzPC9oMj4KKzxoMiBpZD0iY29udGVudHMtMyI+Q29udGVudHM8L2gyPgogPHVsPgogPGxpPjxzdHJvbmc+SEFML0xMIEdQSU88L3N0cm9uZz4gdXBkYXRlCiA8dWw+CkBAIC00MDcsNyArNTM4LDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xXzVfMyIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMV81XzMiIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3Ryb25nPlYxLjUuMyAvIDEyLVNlcHRlbWJlci0yMDE5PC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0zIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtNCI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5HZW5lcmFsIHVwZGF0ZXMgdG8gZml4IGtub3duIGRlZmVjdHMgYW5kIGVuaGFuY2VtZW50cyBpbXBsZW1lbnRhdGlvbjwvbGk+CiA8bGk+QWRkIHN1cHBvcnQgb2YgSEFMIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBmZWF0dXJlPC9saT4KQEAgLTQzNyw3ICs1NjgsNyBAQAogPC91bD48L2xpPgogPGxpPjxzdHJvbmc+SEFMIENSQzwvc3Ryb25nPiB1cGRhdGUKIDx1bD4KLTxsaT5SZW1vdmUgZXh0cmEgY2FsbCB0byBIQUxfTE9DSy9IQUxfVU5MT0NLIGZyb20gdGhlIGZvbGxvd2luZ3MgQVBJ4oCZczoKKzxsaT5SZW1vdmUgZXh0cmEgY2FsbCB0byBIQUxfTE9DSy9IQUxfVU5MT0NLIGZyb20gdGhlIGZvbGxvd2luZyBBUEnigJlzOgogPHVsPgogPGxpPkhBTF9DUkNfQWNjdW11bGF0ZSgpPC9saT4KIDxsaT5IQUxfQ1JDX0NhbGN1bGF0ZSgpPC9saT4KQEAgLTY3Myw3ICs4MDQsNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjFfNV8yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xXzVfMiIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuNS4yIC8gMTItSnVuZS0yMDE4PC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy00Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtNSI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT48c3Ryb25nPk1haW50ZW5hbmNlIHJlbGVhc2UgdG8gZml4IGtub3duIGRlZmVjdHMgYW5kIGVuaGFuY2VtZW50cyBpbXBsZW1lbnRhdGlvbjwvc3Ryb25nPjwvbGk+CiA8bGk+PHN0cm9uZz5HZW5lcmljIGRyaXZlcnMgY2hhbmdlczwvc3Ryb25nPjwvbGk+CkBAIC03NjksNyArOTAwLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xXzVfMSIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMV81XzEiIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3Ryb25nPlYxLjUuMSAvIDExLU1heS0yMDE4PC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy01Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtNiI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5HZW5lcmFsIHVwZGF0ZXMgdG8gZml4IGtub3duIGRlZmVjdHMgYW5kIGVuaGFuY2VtZW50cyBpbXBsZW1lbnRhdGlvbjwvbGk+CiA8bGk+PHN0cm9uZz5IQUwgRHJpdmVycyBjaGFuZ2VzPC9zdHJvbmc+PC9saT4KQEAgLTg3MCw3ICsxMDAxLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xXzVfMCIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMV81XzAiIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3Ryb25nPlYxLjUuMCAvIDIzLUp1bmUtMjAxNzwvc3Ryb25nPjwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtNiI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTciPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+PHN0cm9uZz5NYWludGVuYW5jZSByZWxlYXNlIHRvIGZpeCBrbm93biBkZWZlY3RzIGFuZCBlbmhhbmNlbWVudHMgaW1wbGVtZW50YXRpb248L3N0cm9uZz48L2xpPgogPGxpPjxzdHJvbmc+R2VuZXJpYyBkcml2ZXJzIGNoYW5nZXM8L3N0cm9uZz48L2xpPgpAQCAtMTAwOSw3ICsxMTQwLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xXzRfMCIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMV80XzAiIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3Ryb25nPlYxLjQuMCAvIDE2LURlY2VtYmVyLTIwMTY8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTciPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy04Ij5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPjxzdHJvbmc+TWFpbnRlbmFuY2UgcmVsZWFzZSB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uPC9zdHJvbmc+PC9saT4KIDxsaT48c3Ryb25nPkhBTCBEcml2ZXJzIGNoYW5nZXM8L3N0cm9uZz48L2xpPgpAQCAtMTIyMSw3ICsxMzUyLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xXzNfMCIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMV8zXzAiIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3Ryb25nPlYxLjMuMCAvIDAxLUp1bHktMjAxNjwvc3Ryb25nPjwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtOCI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTkiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+PHN0cm9uZz5GaXJzdCBvZmZpY2lhbCByZWxlYXNlIHN1cHBvcnRpbmcgdGhlIExvdyBMZXZlbCBkcml2ZXJzIGZvciB0aGUgU1RNMzJGM3h4IHNlcmllczo8L3N0cm9uZz4KIDx1bD4KQEAgLTEzMDcsNyArMTQzOCw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMV8yXzEiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjFfMl8xIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4yLjEgLyAyOS1BcHJpbC0yMDE2PC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy05Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTAiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+PHN0cm9uZz5NYWludGVuYW5jZSByZWxlYXNlIHRvIGZpeCBrbm93biBkZWZlY3RzIGFuZCBlbmhhbmNlbWVudHMgaW1wbGVtZW50YXRpb24uPC9zdHJvbmc+PC9saT4KIDxsaT48c3Ryb25nPkhBTCBnZW5lcmljPC9zdHJvbmc+CkBAIC0xMzkzLDcgKzE1MjQsNyBAQAogPGxpPk1vZGlmaWVkIHJlc2V0IG9mIEJhY2t1cCBkb21haW4gb25seSBpZiB0aGUgUlRDIENsb2NrIHNvdXJjZSBzZWxlY3Rpb24gaXMgbW9kaWZpZWQgZnJvbSByZXNldCB2YWx1ZS48L2xpPgogPGxpPlVwZGF0ZWQgSEFMX1JDQ19Pc2NDb25maWcoKSBmdW5jdGlvbiAoUmVzZXQgSFNFT04vTFNFT04gYW5kIEhTRUJZUC9MU0VCWVAgYml0cyBiZWZvcmUgY29uZmlndXJpbmcgdGhlIEhTRS9MU0UpLjwvbGk+CiA8bGk+Q29ycmVjdGVkIHVwZGF0ZXMgb2YgU3lzdGVtQ29yZUNsb2NrIHZhcmlhYmxlIHdpdGhpbiB0aGUgSEFMIGRyaXZlcnMuPC9saT4KLTxsaT5Db3JyZWN0ZWQgaW52ZXJ0aW9uIGluIExTRSBkcml2ZSBjYXBhYmlsaXR5IEJpdCBkZWZpbml0aW9uLjwvbGk+Cis8bGk+Q29ycmVjdGVkIGludmVyc2lvbiBpbiBMU0UgZHJpdmUgY2FwYWJpbGl0eSBCaXQgZGVmaW5pdGlvbi48L2xpPgogPGxpPk1vZGlmaWVkIEFIQlByZXNjVGFibGUgYW5kIEFQQlByZXNjVGFibGUgaW4gSEFMLjwvbGk+CiA8bGk+UmVtb3ZlZCBSQ0NfQ0ZHUl9QTExOT0RJViBiaXQgZGVmaW5pdGlvbiBmcm9tIFNUTTMyRjM1OHh4LCBTVE0zMkYzMDN4QyBhbmQgU1RNMzJGMzAyeEMgZGV2aWNlcy48L2xpPgogPGxpPlJlbW92ZWQgUkNDX0NTUl9WUkVHUlNURiBiaXQgZGVmaW5pdGlvbiBpbiBSQ0NfQ1NSIHJlZ2lzdGVyIGZvciBTVE0zMkYzMDN4QyBhbmQgU1RNMzJGMzAzeEUgZGV2aWNlcy48L2xpPgpAQCAtMTQ1NCw3ICsxNTg1LDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xXzJfMCIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMV8yXzAiIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3Ryb25nPlYxLjIuMCAvIDEzLU5vdmVtYmVyLTIwMTU8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEwIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTEiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+PHN0cm9uZz5QZXJmb3JtZWQgSEFMIEFQSSBhbGlnbm1lbnQgKG1hY3Jvcy9mdW5jdGlvbnMvY29uc3RhbnRzIHJlbmFtaW5nKS48L3N0cm9uZz48L2xpPgogPGxpPjxzdHJvbmc+SEFMIGdlbmVyaWM8L3N0cm9uZz4KQEAgLTE2MzYsNyArMTc2Nyw3IEBACiA8L3VsPjwvbGk+CiA8bGk+PHN0cm9uZz5IQUwgU0RBREM8L3N0cm9uZz4KIDx1bD4KLTxsaT5BcHBsaWVkIFJlZmVyZW5jZVZvbHRhZ2UgcGFyYW1ldGVyIGluIEhBTF9TREFEQ19Jbml0KCkgd2F0aGV2ZXIgaW5zdGFuY2UuPC9saT4KKzxsaT5BcHBsaWVkIFJlZmVyZW5jZVZvbHRhZ2UgcGFyYW1ldGVyIGluIEhBTF9TREFEQ19Jbml0KCkgd2hhdGV2ZXIgaW5zdGFuY2UuPC9saT4KIDxsaT5BZGRlZCBuZXcgbWFjcm9zIF9fSEFMX1NEQURDX0VOQUJMRV9JVCgpLCBfX0hBTF9TREFEQ19HRVRfSVRfU09VUkNFKCksIF9fSEFMX1NEQURDX0dFVF9GTEFHKCkuPC9saT4KIDwvdWw+PC9saT4KIDxsaT48c3Ryb25nPkhBTCBTTUFSVENBUkQ8L3N0cm9uZz4KQEAgLTE3MTcsNyArMTg0OCw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMV8xXzEiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjFfMV8xIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4xLjEgLyAxOS1KdW5lLTIwMTU8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTExIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTIiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+Rml4ZWQgY29tcGlsYXRpb24gd2FybmluZ3MgcmVwb3J0ZWQgYnkgVHJ1ZVNUVURJTyBhbmQgU1c0U1RNMzIgdG9vbGNoYWlucy48L2xpPgogPC91bD4KQEAgLTE3MjYsNyArMTg1Nyw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMV8xXzAiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjFfMV8wIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4xLjAgLyAxMi1TZXB0ZW1iZXItMjAxNDwvc3Ryb25nPjwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMTIiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy0xMyI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT48c3Ryb25nPkZpcnN0IG9mZmljaWFsIHJlbGVhc2Ugb2YgU1RNMzJGM3h4IEhBTCBkcml2ZXJzIGZvciBTVE0zMkYzMDN4RSwgU1RNMzJGMzAyeEUgYW5kIFNUTTMyRjM5OHh4IGRldmljZXMuPC9zdHJvbmc+PC9saT4KIDxsaT48c3Ryb25nPkhBTCBnZW5lcmljPC9zdHJvbmc+IHVwZGF0ZQpAQCAtMTc3OSw3ICsxOTEwLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xXzFfMF9yYzIiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjFfMV8wX3JjMiIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuNS4yUkMyIC8gMjUtQXVndXN0LTIwMTQ8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEzIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTQiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+PHN0cm9uZz5IQUwgZ2VuZXJpYzwvc3Ryb25nPiB1cGRhdGUKIDx1bD4KQEAgLTE5MTgsNyArMjA0OSw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMV8wXzEiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjFfMF8xIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4wLjEgLyAxOC1KdW5lLTIwMTQ8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTE0Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTUiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+PHN0cm9uZz5IQUwgZ2VuZXJpYzwvc3Ryb25nPiB1cGRhdGUKIDx1bD4KQEAgLTIwMzIsNyArMjE2Myw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMV8wXzAiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjFfMF8wIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4wLjAgLyAwNi1NYXktMjAxNDwvc3Ryb25nPjwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMTUiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy0xNiI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5GaXJzdCBvZmZpY2lhbCByZWxlYXNlIG9mIFNUTTMyRjN4eCBIQUwgZHJpdmVycyBmb3IgPHN0cm9uZz5TVE0zMkYzMDF4Ni94OCwgU1RNMzJGMzAyeDYveDgsIFNUTTMyRjMwMnhCL3hDLCBTVE0zMkYzMDN4Ni94OCwgU1RNMzJGMzczeEIveEMsIFNUTTMyRjMzNHg0L3g2L3g4LCBTVE0zMkYzMTh4eCwgU1RNMzJGMzI4eHgsIFNUTTMyRjM1OHh4IGFuZCBTVE0zMkYzNzh4eCBkZXZpY2VzLjwvc3Ryb25nPjwvbGk+CiA8L3VsPgpkaWZmIC0tZ2l0IGEvU3JjL0xlZ2FjeS9zdG0zMmYzeHhfaGFsX2Nhbi5jIGIvU3JjL0xlZ2FjeS9zdG0zMmYzeHhfaGFsX2Nhbi5jCmluZGV4IGRmNzhhMTYuLmU2NmQwYTQgMTAwNjQ0Ci0tLSBhL1NyYy9MZWdhY3kvc3RtMzJmM3h4X2hhbF9jYW4uYworKysgYi9TcmMvTGVnYWN5L3N0bTMyZjN4eF9oYWxfY2FuLmMKQEAgLTg2LDYgKzg2LDcgQEAKICAgICAgIChAKSBZb3UgY2FuIHJlZmVyIHRvIHRoZSBDQU4gTGVnYWN5IEhBTCBkcml2ZXIgaGVhZGVyIGZpbGUgZm9yIG1vcmUgdXNlZnVsIG1hY3JvcwogICAgICAgICAgICAgICAgIAogICBAZW5kdmVyYmF0aW0KKyAgICAgICAgICAgCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbC5jIGIvU3JjL3N0bTMyZjN4eF9oYWwuYwppbmRleCA2ZjNiYTk3Li42OGQ4MzM4IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbC5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsLmMKQEAgLTUyLDExICs1MiwxMSBAQAogICAqIEB7CiAgICovCiAvKioKLSAqIEBicmllZiBTVE0zMkYzeHggSEFMIERyaXZlciB2ZXJzaW9uIG51bWJlciBWMS41LjYKKyAqIEBicmllZiBTVE0zMkYzeHggSEFMIERyaXZlciB2ZXJzaW9uIG51bWJlciBWMS41LjcKICAgICovCiAjZGVmaW5lIF9fU1RNMzJGM3h4X0hBTF9WRVJTSU9OX01BSU4gICAoMHgwMVUpIC8qITwgWzMxOjI0XSBtYWluIHZlcnNpb24gKi8KICNkZWZpbmUgX19TVE0zMkYzeHhfSEFMX1ZFUlNJT05fU1VCMSAgICgweDA1VSkgLyohPCBbMjM6MTZdIHN1YjEgdmVyc2lvbiAqLwotI2RlZmluZSBfX1NUTTMyRjN4eF9IQUxfVkVSU0lPTl9TVUIyICAgKDB4MDZVKSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovCisjZGVmaW5lIF9fU1RNMzJGM3h4X0hBTF9WRVJTSU9OX1NVQjIgICAoMHgwN1UpIC8qITwgWzE1OjhdICBzdWIyIHZlcnNpb24gKi8KICNkZWZpbmUgX19TVE0zMkYzeHhfSEFMX1ZFUlNJT05fUkMgICAgICgweDAwVSkgLyohPCBbNzowXSAgcmVsZWFzZSBjYW5kaWRhdGUgKi8KICNkZWZpbmUgX19TVE0zMkYzeHhfSEFMX1ZFUlNJT04gICAgICAgICAoKF9fU1RNMzJGM3h4X0hBTF9WRVJTSU9OX01BSU4gPDwgMjRVKVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KF9fU1RNMzJGM3h4X0hBTF9WRVJTSU9OX1NVQjEgPDwgMTZVKVwKQEAgLTEyOSw3ICsxMjksNyBAQAogICAqIEBub3RlICAgVGhlIFN5c3RpY2sgY29uZmlndXJhdGlvbiBpcyBiYXNlZCBvbiBIU0kgY2xvY2ssIGFzIEhTSSBpcyB0aGUgY2xvY2sKICAgKiAgICAgICAgIHVzZWQgYWZ0ZXIgYSBzeXN0ZW0gUmVzZXQgYW5kIHRoZSBOVklDIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHRvIFByaW9yaXR5IGdyb3VwIDQgCiAgICogICAgICAgICAgICAKLSAgKiBAbm90ZSAgIFRoZSB0aW1lIGJhc2UgY29uZmlndXJhdGlvbiBpcyBiYXNlZCBvbiBNU0kgY2xvY2sgd2hlbiBleHRpbmcgZnJvbSBSZXNldC4KKyAgKiBAbm90ZSAgIFRoZSB0aW1lIGJhc2UgY29uZmlndXJhdGlvbiBpcyBiYXNlZCBvbiBNU0kgY2xvY2sgd2hlbiBleGl0aW5nIGZyb20gUmVzZXQuCiAgICogICAgICAgICBPbmNlIGRvbmUsIHRpbWUgYmFzZSB0aWNrIHN0YXJ0IGluY3JlbWVudGluZy4KICAgKiAgICAgICAgIEluIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLFN5c3RpY2sgaXMgdXNlZCBhcyBzb3VyY2Ugb2YgdGltZSBiYXNlLgogICAqICAgICAgIFRoZSB0aWNrIHZhcmlhYmxlIGlzIGluY3JlbWVudGVkIGVhY2ggMW1zIGluIGl0cyBJU1IuCkBAIC0zMzQsNyArMzM0LDggQEAKIAogLyoqCiAgICogQGJyaWVmIFJldHVybiB0aWNrIGZyZXF1ZW5jeS4KLSAgKiBAcmV0dmFsIHRpY2sgcGVyaW9kIGluIEh6CisgICogQHJldHZhbCBUaWNrIGZyZXF1ZW5jeS4KKyAgKiAgICAgICAgIFZhbHVlIG9mIEByZWYgSEFMX1RpY2tGcmVxVHlwZURlZi4KICAgKi8KIEhBTF9UaWNrRnJlcVR5cGVEZWYgSEFMX0dldFRpY2tGcmVxKHZvaWQpCiB7CkBAIC0zNDIsNyArMzQzLDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGFjY3VyYXRlIGRlbGF5IChpbiBtaWxsaXNlY29uZHMpIGJhc2VkIAorICAqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhY2N1cmF0ZSBkZWxheSAoaW4gbWlsbGlzZWNvbmRzKSBiYXNlZAogICAqICAgICAgICAgb24gdmFyaWFibGUgaW5jcmVtZW50ZWQuCiAgICogQG5vdGUgICBJbiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiAsIFN5c1RpY2sgdGltZXIgaXMgdGhlIHNvdXJjZSBvZiB0aW1lIGJhc2UuIAogICAqICAgICAgICAgSXQgaXMgdXNlZCB0byBnZW5lcmF0ZSBpbnRlcnJ1cHRzIGF0IHJlZ3VsYXIgdGltZSBpbnRlcnZhbHMgd2hlcmUgdXdUaWNrCkBAIC01MjcsMyArNTI4LDUgQEAKIC8qKgogICAqIEB9CiAgICovCisKKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfYWRjLmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9hZGMuYwppbmRleCA4MGUxNDkyLi43ZjMyMmQ2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9hZGMuYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF9hZGMuYwpAQCAtNiwxNyArNiw4IEBACiAgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0b3IgKEFEQykKICAgKiAgICAgICAgICBwZXJpcGhlcmFsOgogICAqICAgICAgICAgICArIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKLSAgKiAgICAgICAgICAgICArKyBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBvZiBBREMKLSAgKiAgICAgICAgICAgKyBPcGVyYXRpb24gZnVuY3Rpb25zCi0gICogICAgICAgICAgICAgKysgU3RhcnQsIHN0b3AsIGdldCByZXN1bHQgb2YgY29udmVyc2lvbnMgb2YgcmVndWxhcgotICAqICAgICAgICAgICAgICAgIGdyb3VwLCB1c2luZyAzIHBvc3NpYmxlIG1vZGVzOiBwb2xsaW5nLCBpbnRlcnJ1cHRpb24gb3IgRE1BLgotICAqICAgICAgICAgICArIENvbnRyb2wgZnVuY3Rpb25zCi0gICogICAgICAgICAgICAgKysgQ2hhbm5lbHMgY29uZmlndXJhdGlvbiBvbiByZWd1bGFyIGdyb3VwCi0gICogICAgICAgICAgICAgKysgQ2hhbm5lbHMgY29uZmlndXJhdGlvbiBvbiBpbmplY3RlZCBncm91cAotICAqICAgICAgICAgICAgICsrIEFuYWxvZyBXYXRjaGRvZyBjb25maWd1cmF0aW9uCi0gICogICAgICAgICAgICsgU3RhdGUgZnVuY3Rpb25zCi0gICogICAgICAgICAgICAgKysgQURDIHN0YXRlIG1hY2hpbmUgbWFuYWdlbWVudAotICAqICAgICAgICAgICAgICsrIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQKKyAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCisgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKICAgKiAgICAgICAgICBPdGhlciBmdW5jdGlvbnMgKGV4dGVuZGVkIGZ1bmN0aW9ucykgYXJlIGF2YWlsYWJsZSBpbiBmaWxlIAogICAqICAgICAgICAgICJzdG0zMmYzeHhfaGFsX2FkY19leC5jIi4KICAgKgpAQCAtMzkyLDggKzM4Myw3IEBACiAgICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBhbmQgYWxsIGNhbGxiYWNrcwogICAgICBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zLgogICAKLSAgQGVuZHZlcmJhdGltCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEBlbmR2ZXJiYXRpbQogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNzk2LDcgKzc4Niw3IEBACiAgICogICAgICAgICBzaG91bGQgYmUgcHJlbGltaW5hcmlseSBzdG9wcGVkIHVzaW5nIEhBTF9BRENFeF9JbmplY3RlZFN0b3AgZnVuY3Rpb24uCiAgICogQG5vdGU6ICBDYXNlIG9mIG11bHRpbW9kZSBlbmFibGVkIChmb3IgZGV2aWNlcyB3aXRoIHNldmVyYWwgQURDcyk6IFRoaXMgCiAgICogICAgICAgICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmb3IgQURDIG1hc3RlciBmaXJzdCwgdGhlbiBBREMgc2xhdmUuCi0gICogICAgICAgICBGb3IgQURDIG1hc3RlciwgY29udmVyc29uIGlzIHN0b3BwZWQgYW5kIEFEQyBpcyBkaXNhYmxlZC4gCisgICogICAgICAgICBGb3IgQURDIG1hc3RlciwgY29udmVyc2lvbiBpcyBzdG9wcGVkIGFuZCBBREMgaXMgZGlzYWJsZWQuIAogICAqICAgICAgICAgRm9yIEFEQyBzbGF2ZSwgQURDIGlzIGRpc2FibGVkIG9ubHkgKGNvbnZlcnNpb24gc3RvcCBvZiBBREMgbWFzdGVyCiAgICogICAgICAgICBoYXMgYWxyZWFkeSBzdG9wcGVkIGNvbnZlcnNpb24gb2YgQURDIHNsYXZlKS4KICAgKiBAcGFyYW0gIGhhZGMgQURDIGhhbmRsZQpAQCAtMTA5NSw3ICsxMDg1LDcgQEAKICAgKiBAbm90ZSAgIFBvc3NpYmlsaXR5IHRvIHVwZGF0ZSBwYXJhbWV0ZXJzIG9uIHRoZSBmbHk6CiAgICogICAgICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGNoYW5uZWwgaW50byByZWd1bGFyIGdyb3VwLCBmb2xsb3dpbmcgIAogICAqICAgICAgICAgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byByZWNvbmZpZ3VyZSBzb21lIHBhcmFtZXRlcnMgCi0gICogICAgICAgICBvZiBzdHJ1Y3R1cmUgIkFEQ19DaGFubmVsQ29uZlR5cGVEZWYiIG9uIHRoZSBmbHksIHdpdGhvdXQgcmVzZXRpbmcgCisgICogICAgICAgICBvZiBzdHJ1Y3R1cmUgIkFEQ19DaGFubmVsQ29uZlR5cGVEZWYiIG9uIHRoZSBmbHksIHdpdGhvdXQgcmVzZXR0aW5nIAogICAqICAgICAgICAgdGhlIEFEQy4KICAgKiAgICAgICAgIFRoZSBzZXR0aW5nIG9mIHRoZXNlIHBhcmFtZXRlcnMgaXMgY29uZGl0aW9uZWQgdG8gQURDIHN0YXRlLgogICAqICAgICAgICAgRm9yIHBhcmFtZXRlcnMgY29uc3RyYWludHMsIHNlZSBjb21tZW50cyBvZiBzdHJ1Y3R1cmUgCkBAIC0xMTIyLDcgKzExMTIsNyBAQAogICAqIEBub3RlICAgUG9zc2liaWxpdHkgdG8gdXBkYXRlIHBhcmFtZXRlcnMgb24gdGhlIGZseToKICAgKiAgICAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHNlbGVjdGVkIGFuYWxvZyB3YXRjaGRvZywgZm9sbG93aW5nICAKICAgKiAgICAgICAgIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmVjb25maWd1cmUgc29tZSBwYXJhbWV0ZXJzIAotICAqICAgICAgICAgb2Ygc3RydWN0dXJlICJBRENfQW5hbG9nV0RHQ29uZlR5cGVEZWYiIG9uIHRoZSBmbHksIHdpdGhvdXQgcmVzZXRpbmcgCisgICogICAgICAgICBvZiBzdHJ1Y3R1cmUgIkFEQ19BbmFsb2dXREdDb25mVHlwZURlZiIgb24gdGhlIGZseSwgd2l0aG91dCByZXNldHRpbmcgCiAgICogICAgICAgICB0aGUgQURDLgogICAqICAgICAgICAgVGhlIHNldHRpbmcgb2YgdGhlc2UgcGFyYW1ldGVycyBpcyBjb25kaXRpb25lZCB0byBBREMgc3RhdGUuCiAgICogICAgICAgICBGb3IgcGFyYW1ldGVycyBjb25zdHJhaW50cywgc2VlIGNvbW1lbnRzIG9mIHN0cnVjdHVyZSAKQEAgLTEyMTAsMyArMTIwMCw0IEBACiAvKioKICAgKiBAfQogICAqLyAKKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfYWRjX2V4LmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9hZGNfZXguYwppbmRleCBjMzk4MWNiLi5mZjFmNTRlIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9hZGNfZXguYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF9hZGNfZXguYwpAQCAtNSwxNiArNSwxMCBAQAogICAqIEBicmllZiAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcgCiAgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0b3IgKEFEQykKICAgKiAgICAgICAgICBwZXJpcGhlcmFsOgotICAqICAgICAgICAgICArIE9wZXJhdGlvbiBmdW5jdGlvbnMKLSAgKiAgICAgICAgICAgICArKyBTdGFydCwgc3RvcCwgZ2V0IHJlc3VsdCBvZiBjb252ZXJzaW9ucyBvZiBpbmplY3RlZAotICAqICAgICAgICAgICAgICAgIGdyb3VwLCB1c2luZyAyIHBvc3NpYmxlIG1vZGVzOiBwb2xsaW5nLCBpbnRlcnJ1cHRpb24uCi0gICogICAgICAgICAgICAgKysgTXVsdGltb2RlIGZlYXR1cmUgKGF2YWlsYWJsZSBvbiBkZXZpY2VzIHdpdGggMiBBRENzIG9yIG1vcmUpCi0gICogICAgICAgICAgICAgKysgQ2FsaWJyYXRpb24gKEFEQyBhdXRvbWF0aWMgc2VsZi1jYWxpYnJhdGlvbikKLSAgKiAgICAgICAgICAgKyBDb250cm9sIGZ1bmN0aW9ucwotICAqICAgICAgICAgICAgICsrIENoYW5uZWxzIGNvbmZpZ3VyYXRpb24gb24gaW5qZWN0ZWQgZ3JvdXAKKyAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCiAgICogICAgICAgICAgT3RoZXIgZnVuY3Rpb25zIChnZW5lcmljIGZ1bmN0aW9ucykgYXJlIGF2YWlsYWJsZSBpbiBmaWxlIAogICAqICAgICAgICAgICJzdG0zMmYzeHhfaGFsX2FkYy5jIi4KLSAgKiAgICAgICAgIAorICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgpAQCAtMzIsNyArMjYsNiBAQAogICAgICAgYXZhaWxhYmxlIGluIGZpbGUgb2YgZ2VuZXJpYyBmdW5jdGlvbnMgInN0bTMyZjN4eF9oYWxfYWRjLmMiLgogICBbLi5dCiAgIEBlbmR2ZXJiYXRpbQotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTU1NDMsNyArNTUzNiw3IEBACiAgICogQG5vdGUgICBQb3NzaWJpbGl0eSB0byB1cGRhdGUgcGFyYW1ldGVycyBvbiB0aGUgZmx5OgogICAqICAgICAgICAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBjaGFubmVsIGludG8gcmVndWxhciBncm91cCwgZm9sbG93aW5nICAKICAgKiAgICAgICAgIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmVjb25maWd1cmUgc29tZSBwYXJhbWV0ZXJzIAotICAqICAgICAgICAgb2Ygc3RydWN0dXJlICJBRENfQ2hhbm5lbENvbmZUeXBlRGVmIiBvbiB0aGUgZmx5LCB3aXRob3V0IHJlc2V0aW5nIAorICAqICAgICAgICAgb2Ygc3RydWN0dXJlICJBRENfQ2hhbm5lbENvbmZUeXBlRGVmIiBvbiB0aGUgZmx5LCB3aXRob3V0IHJlc2V0dGluZyAKICAgKiAgICAgICAgIHRoZSBBREMuCiAgICogICAgICAgICBUaGUgc2V0dGluZyBvZiB0aGVzZSBwYXJhbWV0ZXJzIGlzIGNvbmRpdGlvbmVkIHRvIEFEQyBzdGF0ZS4KICAgKiAgICAgICAgIEZvciBwYXJhbWV0ZXJzIGNvbnN0cmFpbnRzLCBzZWUgY29tbWVudHMgb2Ygc3RydWN0dXJlIApAQCAtNTg3Nyw3ICs1ODcwLDcgQEAKICAgKiBAbm90ZSAgIFBvc3NpYmlsaXR5IHRvIHVwZGF0ZSBwYXJhbWV0ZXJzIG9uIHRoZSBmbHk6CiAgICogICAgICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGNoYW5uZWwgaW50byByZWd1bGFyIGdyb3VwLCBmb2xsb3dpbmcgIAogICAqICAgICAgICAgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byByZWNvbmZpZ3VyZSBzb21lIHBhcmFtZXRlcnMgCi0gICogICAgICAgICBvZiBzdHJ1Y3R1cmUgIkFEQ19DaGFubmVsQ29uZlR5cGVEZWYiIG9uIHRoZSBmbHksIHdpdGhvdXQgcmVzZXRpbmcgCisgICogICAgICAgICBvZiBzdHJ1Y3R1cmUgIkFEQ19DaGFubmVsQ29uZlR5cGVEZWYiIG9uIHRoZSBmbHksIHdpdGhvdXQgcmVzZXR0aW5nIAogICAqICAgICAgICAgdGhlIEFEQy4KICAgKiAgICAgICAgIFRoZSBzZXR0aW5nIG9mIHRoZXNlIHBhcmFtZXRlcnMgaXMgY29uZGl0aW9uZWQgdG8gQURDIHN0YXRlLgogICAqICAgICAgICAgRm9yIHBhcmFtZXRlcnMgY29uc3RyYWludHMsIHNlZSBjb21tZW50cyBvZiBzdHJ1Y3R1cmUgCkBAIC01OTgzLDcgKzU5NzYsNyBAQAogICAqIEBub3RlICAgUG9zc2liaWxpdHkgdG8gdXBkYXRlIHBhcmFtZXRlcnMgb24gdGhlIGZseToKICAgKiAgICAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgaW5qZWN0ZWQgZ3JvdXAsIGZvbGxvd2luZyBjYWxscyB0byB0aGlzIAogICAqICAgICAgICAgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmVjb25maWd1cmUgc29tZSBwYXJhbWV0ZXJzIG9mIHN0cnVjdHVyZQotICAqICAgICAgICAgIkFEQ19JbmplY3Rpb25Db25mVHlwZURlZiIgb24gdGhlIGZseSwgd2l0aG91dCByZXNldGluZyB0aGUgQURDLgorICAqICAgICAgICAgIkFEQ19JbmplY3Rpb25Db25mVHlwZURlZiIgb24gdGhlIGZseSwgd2l0aG91dCByZXNldHRpbmcgdGhlIEFEQy4KICAgKiAgICAgICAgIFRoZSBzZXR0aW5nIG9mIHRoZXNlIHBhcmFtZXRlcnMgaXMgY29uZGl0aW9uZWQgdG8gQURDIHN0YXRlLgogICAqICAgICAgICAgRm9yIHBhcmFtZXRlcnMgY29uc3RyYWludHMsIHNlZSBjb21tZW50cyBvZiBzdHJ1Y3R1cmUgCiAgICogICAgICAgICAiQURDX0luamVjdGlvbkNvbmZUeXBlRGVmIi4KQEAgLTY1MDgsNyArNjUwMSw3IEBACiAgICogQG5vdGUgICBQb3NzaWJpbGl0eSB0byB1cGRhdGUgcGFyYW1ldGVycyBvbiB0aGUgZmx5OgogICAqICAgICAgICAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBpbmplY3RlZCBncm91cCwgZm9sbG93aW5nIGNhbGxzIHRvIHRoaXMgCiAgICogICAgICAgICBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byByZWNvbmZpZ3VyZSBzb21lIHBhcmFtZXRlcnMgb2Ygc3RydWN0dXJlCi0gICogICAgICAgICAiQURDX0luamVjdGlvbkNvbmZUeXBlRGVmIiBvbiB0aGUgZmx5LCB3aXRob3V0IHJlc2V0aW5nIHRoZSBBREMuCisgICogICAgICAgICAiQURDX0luamVjdGlvbkNvbmZUeXBlRGVmIiBvbiB0aGUgZmx5LCB3aXRob3V0IHJlc2V0dGluZyB0aGUgQURDLgogICAqICAgICAgICAgVGhlIHNldHRpbmcgb2YgdGhlc2UgcGFyYW1ldGVycyBpcyBjb25kaXRpb25lZCB0byBBREMgc3RhdGU6IAogICAqICAgICAgICAgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aGVuIEFEQyBpcyBub3QgdW5kZXIgY29udmVyc2lvbi4KICAgKiBAbm90ZSAgIEluIGNhc2Ugb2YgdXNhZ2Ugb2YgaW50ZXJuYWwgbWVhc3VyZW1lbnQgY2hhbm5lbHM6CkBAIC02NzYxLDcgKzY3NTQsNyBAQAogICAqIEBub3RlICAgUG9zc2liaWxpdHkgdG8gdXBkYXRlIHBhcmFtZXRlcnMgb24gdGhlIGZseToKICAgKiAgICAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHNlbGVjdGVkIGFuYWxvZyB3YXRjaGRvZywgZm9sbG93aW5nICAKICAgKiAgICAgICAgIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmVjb25maWd1cmUgc29tZSBwYXJhbWV0ZXJzIAotICAqICAgICAgICAgb2Ygc3RydWN0dXJlICJBRENfQW5hbG9nV0RHQ29uZlR5cGVEZWYiIG9uIHRoZSBmbHksIHdpdGhvdXQgcmVzZXRpbmcgCisgICogICAgICAgICBvZiBzdHJ1Y3R1cmUgIkFEQ19BbmFsb2dXREdDb25mVHlwZURlZiIgb24gdGhlIGZseSwgd2l0aG91dCByZXNldHRpbmcgCiAgICogICAgICAgICB0aGUgQURDLgogICAqICAgICAgICAgVGhlIHNldHRpbmcgb2YgdGhlc2UgcGFyYW1ldGVycyBpcyBjb25kaXRpb25lZCB0byBBREMgc3RhdGUuCiAgICogICAgICAgICBGb3IgcGFyYW1ldGVycyBjb25zdHJhaW50cywgc2VlIGNvbW1lbnRzIG9mIHN0cnVjdHVyZSAKQEAgLTY4OTYsNyArNjg4OSw3IEBACiAgICAgICB7CiAgICAgICAgIC8qIFNldCB0aGUgQW5hbG9nIHdhdGNoZG9nIGNoYW5uZWwgb3IgZ3JvdXAgb2YgY2hhbm5lbHMuIFRoaXMgYWxzbyAgICAqLwogICAgICAgICAvKiBlbmFibGVzIHRoZSB3YXRjaGRvZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogTm90ZTogQ29uZGl0aW9ubmFsIHJlZ2lzdGVyIHJlc2V0LCBiZWNhdXNlIHNldmVyYWwgY2hhbm5lbHMgY2FuIGJlICovCisgICAgICAgIC8qIE5vdGU6IENvbmRpdGlvbmFsIHJlZ2lzdGVyIHJlc2V0LCBiZWNhdXNlIHNldmVyYWwgY2hhbm5lbHMgY2FuIGJlICovCiAgICAgICAgIC8qICAgICAgIHNldCBieSBzdWNjZXNzaXZlIGNhbGxzIG9mIHRoaXMgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICBpZiAoQW5hbG9nV0RHQ29uZmlnLT5XYXRjaGRvZ01vZGUgIT0gQURDX0FOQUxPR1dBVENIRE9HX05PTkUpIAogICAgICAgICB7CkBAIC03MDQ0LDcgKzcwMzcsNyBAQAogICAqIEBub3RlICAgUG9zc2liaWxpdHkgdG8gdXBkYXRlIHBhcmFtZXRlcnMgb24gdGhlIGZseToKICAgKiAgICAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgbXVsdGltb2RlIHBhcmFtZXRlcnMsIGZvbGxvd2luZyAgCiAgICogICAgICAgICBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHJlY29uZmlndXJlIHNvbWUgcGFyYW1ldGVycyAKLSAgKiAgICAgICAgIG9mIHN0cnVjdHVyZSAiQURDX011bHRpTW9kZVR5cGVEZWYiIG9uIHRoZSBmbHksIHdpdGhvdXQgcmVzZXRpbmcgCisgICogICAgICAgICBvZiBzdHJ1Y3R1cmUgIkFEQ19NdWx0aU1vZGVUeXBlRGVmIiBvbiB0aGUgZmx5LCB3aXRob3V0IHJlc2V0dGluZyAKICAgKiAgICAgICAgIHRoZSBBRENzIChib3RoIEFEQ3Mgb2YgdGhlIGNvbW1vbiBncm91cCkuCiAgICogICAgICAgICBUaGUgc2V0dGluZyBvZiB0aGVzZSBwYXJhbWV0ZXJzIGlzIGNvbmRpdGlvbmVkIHRvIEFEQyBzdGF0ZS4KICAgKiAgICAgICAgIEZvciBwYXJhbWV0ZXJzIGNvbnN0cmFpbnRzLCBzZWUgY29tbWVudHMgb2Ygc3RydWN0dXJlIApAQCAtNzA5NCw3ICs3MDg3LDcgQEAKICAgICAvKiBjb250cm9sIHJlZ2lzdGVycykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgdG1wQURDX0NvbW1vbiA9IEFEQ19DT01NT05fUkVHSVNURVIoaGFkYyk7CiAgICAgCi0gICAgLyogSWYgbXVsdGltb2RlIGlzIHNlbGVjdGVkLCBjb25maWd1cmUgYWxsIG11bHRpbW9kZSBwYXJhbWF0ZXJzLiAgICAgICAgICAqLworICAgIC8qIElmIG11bHRpbW9kZSBpcyBzZWxlY3RlZCwgY29uZmlndXJlIGFsbCBtdWx0aW1vZGUgcGFyYW1ldGVycy4gICAgICAgICAgKi8KICAgICAvKiBPdGhlcndpc2UsIHJlc2V0IG11bHRpbW9kZSBwYXJhbWV0ZXJzIChjYW4gYmUgdXNlZCBpbiBjYXNlIG9mICAgICAgICAgICovCiAgICAgLyogdHJhbnNpdGlvbiBmcm9tIG11bHRpbW9kZSB0byBpbmRlcGVuZGVudCBtb2RlKS4gICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmKG11bHRpbW9kZS0+TW9kZSAhPSBBRENfTU9ERV9JTkRFUEVOREVOVCkKQEAgLTc2MzEsMyArNzYyNCw0IEBACiAvKioKICAgKiBAfQogICAqLyAKKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfY2FuLmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9jYW4uYwppbmRleCBjZWNiNzNjLi4xZDU3MmYzIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9jYW4uYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF9jYW4uYwpAQCAtNjc2LDcgKzY3Niw3IEBACiAKIC8qKgogICAqIEBicmllZiAgVW5yZWdpc3RlciBhIENBTiBDYWxsQmFjay4KLSAgKiAgICAgICAgIENBTiBjYWxsYWJjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiAgICAgICAgIENBTiBjYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKICAgKiBAcGFyYW0gIGhjYW4gcG9pbnRlciB0byBhIENBTl9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgQ0FOIG1vZHVsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCkBAIC0xMjM2LDE1ICsxMjM2LDYgQEAKICAgICAgIC8qIFNlbGVjdCBhbiBlbXB0eSB0cmFuc21pdCBtYWlsYm94ICovCiAgICAgICB0cmFuc21pdG1haWxib3ggPSAodHNyICYgQ0FOX1RTUl9DT0RFKSA+PiBDQU5fVFNSX0NPREVfUG9zOwogCi0gICAgICAvKiBDaGVjayB0cmFuc21pdCBtYWlsYm94IHZhbHVlICovCi0gICAgICBpZiAodHJhbnNtaXRtYWlsYm94ID4gMlUpCi0gICAgICB7Ci0gICAgICAgIC8qIFVwZGF0ZSBlcnJvciBjb2RlICovCi0gICAgICAgIGhjYW4tPkVycm9yQ29kZSB8PSBIQUxfQ0FOX0VSUk9SX0lOVEVSTkFMOwotCi0gICAgICAgIHJldHVybiBIQUxfRVJST1I7Ci0gICAgICB9Ci0KICAgICAgIC8qIFN0b3JlIHRoZSBUeCBtYWlsYm94ICovCiAgICAgICAqcFR4TWFpbGJveCA9ICh1aW50MzJfdCkxIDw8IHRyYW5zbWl0bWFpbGJveDsKIApAQCAtMTUxNyw3ICsxNTA4LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBoY2FuLT5JbnN0YW5jZS0+c0ZJRk9NYWlsQm94W1J4Rmlmb10uUklSKSA+PiBDQU5fUkkwUl9FWElEX1BvczsKICAgICB9CiAgICAgcEhlYWRlci0+UlRSID0gKENBTl9SSTBSX1JUUiAmIGhjYW4tPkluc3RhbmNlLT5zRklGT01haWxCb3hbUnhGaWZvXS5SSVIpOwotICAgIHBIZWFkZXItPkRMQyA9IChDQU5fUkRUMFJfRExDICYgaGNhbi0+SW5zdGFuY2UtPnNGSUZPTWFpbEJveFtSeEZpZm9dLlJEVFIpID4+IENBTl9SRFQwUl9ETENfUG9zOworICAgIGlmICgoKENBTl9SRFQwUl9ETEMgJiBoY2FuLT5JbnN0YW5jZS0+c0ZJRk9NYWlsQm94W1J4Rmlmb10uUkRUUikgPj4gQ0FOX1JEVDBSX0RMQ19Qb3MpID49IDhVKQorICAgIHsKKyAgICAgIC8qIFRydW5jYXRlIERMQyB0byA4IGlmIHJlY2VpdmVkIGZpZWxkIGlzIG92ZXIgcmFuZ2UgKi8KKyAgICAgIHBIZWFkZXItPkRMQyA9IDhVOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcEhlYWRlci0+RExDID0gKENBTl9SRFQwUl9ETEMgJiBoY2FuLT5JbnN0YW5jZS0+c0ZJRk9NYWlsQm94W1J4Rmlmb10uUkRUUikgPj4gQ0FOX1JEVDBSX0RMQ19Qb3M7CisgICAgfQogICAgIHBIZWFkZXItPkZpbHRlck1hdGNoSW5kZXggPSAoQ0FOX1JEVDBSX0ZNSSAmIGhjYW4tPkluc3RhbmNlLT5zRklGT01haWxCb3hbUnhGaWZvXS5SRFRSKSA+PiBDQU5fUkRUMFJfRk1JX1BvczsKICAgICBwSGVhZGVyLT5UaW1lc3RhbXAgPSAoQ0FOX1JEVDBSX1RJTUUgJiBoY2FuLT5JbnN0YW5jZS0+c0ZJRk9NYWlsQm94W1J4Rmlmb10uUkRUUikgPj4gQ0FOX1JEVDBSX1RJTUVfUG9zOwogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF9jZWMuYyBiL1NyYy9zdG0zMmYzeHhfaGFsX2NlYy5jCmluZGV4IDMxNDU5NTEuLjc4MzhiZjYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfaGFsX2NlYy5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX2NlYy5jCkBAIC0xMCw2ICsxMCw3IEBACiAgICogICAgICAgICAgICsgSU8gb3BlcmF0aW9uIGZ1bmN0aW9uCiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9uCiAgICoKKyAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTEwNCw3ICsxMDUsNiBAQAogICBXaGVuIHRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9DRUNfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCiAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBhbmQgYWxsIGNhbGxiYWNrcwogICBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zLgotCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KQEAgLTIzMyw3ICsyMzMsOCBAQAogCiAgIC8qIFdyaXRlIHRvIENFQyBDb250cm9sIFJlZ2lzdGVyICovCiAgIGhjZWMtPkluc3RhbmNlLT5DRkdSID0gaGNlYy0+SW5pdC5TaWduYWxGcmVlVGltZSB8IGhjZWMtPkluaXQuVG9sZXJhbmNlIHwgaGNlYy0+SW5pdC5CUkVSeFN0b3AgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgaGNlYy0+SW5pdC5CUkVFcnJvckJpdEdlbiB8IGhjZWMtPkluaXQuTEJQRUVycm9yQml0R2VuIHwgaGNlYy0+SW5pdC5Ccm9hZGNhc3RNc2dOb0Vycm9yQml0R2VuIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGhjZWMtPkluaXQuQlJFRXJyb3JCaXRHZW4gfCBoY2VjLT5Jbml0LkxCUEVFcnJvckJpdEdlbiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBoY2VjLT5Jbml0LkJyb2FkY2FzdE1zZ05vRXJyb3JCaXRHZW4gfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgaGNlYy0+SW5pdC5TaWduYWxGcmVlVGltZU9wdGlvbiB8ICgodWludDMyX3QpKGhjZWMtPkluaXQuT3duQWRkcmVzcykgPDwgMTZVKSB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICBoY2VjLT5Jbml0Lkxpc3Rlbk1vZGU7CiAKQEAgLTQxMiwxMCArNDEzLDEwIEBACiAgICogQHBhcmFtICBoY2VjIENFQyBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9DRUNfVFhfQ1BMVF9DQl9JRCBUeCBDb21wbGV0ZSBjYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0VDX0VSUk9SX0NCX0lEIEVycm9yIGNhbGxiYWNrIElECi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9DRUNfTVNQSU5JVF9DQl9JRCBNc3BJbml0IGNhbGxiYWNrIElECi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9DRUNfTVNQREVJTklUX0NCX0lEIE1zcERlSW5pdCBjYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgSEFMX0NFQ19UWF9DUExUX0NCX0lEIFR4IENvbXBsZXRlIGNhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBIQUxfQ0VDX0VSUk9SX0NCX0lEIEVycm9yIGNhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBIQUxfQ0VDX01TUElOSVRfQ0JfSUQgTXNwSW5pdCBjYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgSEFMX0NFQ19NU1BERUlOSVRfQ0JfSUQgTXNwRGVJbml0IGNhbGxiYWNrIElECiAgICogQHBhcmFtICBwQ2FsbGJhY2sgcG9pbnRlciB0byB0aGUgQ2FsbGJhY2sgZnVuY3Rpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KQEAgLTQ5NywxNCArNDk4LDE0IEBACiAKIC8qKgogICAqIEBicmllZiAgVW5yZWdpc3RlciBhbiBDRUMgQ2FsbGJhY2sKLSAgKiAgICAgICAgIENFQyBjYWxsYWJjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiAgICAgICAgIENFQyBjYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKICAgKiBAcGFyYW0gaGNlYyB1YXJ0IGhhbmRsZQogICAqIEBwYXJhbSBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9DRUNfVFhfQ1BMVF9DQl9JRCBUeCBDb21wbGV0ZSBjYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0VDX0VSUk9SX0NCX0lEIEVycm9yIGNhbGxiYWNrIElECi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9DRUNfTVNQSU5JVF9DQl9JRCBNc3BJbml0IGNhbGxiYWNrIElECi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9DRUNfTVNQREVJTklUX0NCX0lEIE1zcERlSW5pdCBjYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgSEFMX0NFQ19UWF9DUExUX0NCX0lEIFR4IENvbXBsZXRlIGNhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBIQUxfQ0VDX0VSUk9SX0NCX0lEIEVycm9yIGNhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBIQUxfQ0VDX01TUElOSVRfQ0JfSUQgTXNwSW5pdCBjYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgSEFMX0NFQ19NU1BERUlOSVRfQ0JfSUQgTXNwRGVJbml0IGNhbGxiYWNrIElECiAgICogQHJldHZhbCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9DRUNfVW5SZWdpc3RlckNhbGxiYWNrKENFQ19IYW5kbGVUeXBlRGVmICpoY2VjLCBIQUxfQ0VDX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQpCkBAIC04MjksNyArODMwLDcgQEAKICAgICAgIF9fSEFMX0NFQ19MQVNUX0JZVEVfVFhfU0VUKGhjZWMpOwogICAgIH0KICAgICAvKiBJbiBhbGwgY2FzZXMgdHJhbnNtaXQgdGhlIGJ5dGUgKi8KLSAgICBoY2VjLT5JbnN0YW5jZS0+VFhEUiA9ICh1aW50OF90KSpoY2VjLT5wVHhCdWZmUHRyOworICAgIGhjZWMtPkluc3RhbmNlLT5UWERSID0gKHVpbnQ4X3QpICogaGNlYy0+cFR4QnVmZlB0cjsKICAgICBoY2VjLT5wVHhCdWZmUHRyKys7CiAgICAgLyogY2xlYXIgVHgtQnl0ZSByZXF1ZXN0IGZsYWcgKi8KICAgICBfX0hBTF9DRUNfQ0xFQVJfRkxBRyhoY2VjLCBDRUNfRkxBR19UWEJSKTsKQEAgLTg1NSw3ICs4NTYsNyBAQAogCiAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1SeC9UeCBFcnJvciBNYW5hZ2VtZW50LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgIGlmICgoaXRmbGFnICYgKENFQ19JU1JfUlhPVlIgfCBDRUNfSVNSX0JSRSB8IENFQ19JU1JfU0JQRSB8IENFQ19JU1JfTEJQRSB8IENFQ19JU1JfUlhBQ0tFIHwgQ0VDX0lTUl9UWFVEUiB8Ci0gICAgICAgICAgICAgIENFQ19JU1JfVFhFUlIgfCBDRUNfSVNSX1RYQUNLRSkpICE9IDBVKQorICAgICAgICAgICAgICAgICBDRUNfSVNSX1RYRVJSIHwgQ0VDX0lTUl9UWEFDS0UpKSAhPSAwVSkKICAgewogICAgIGhjZWMtPkVycm9yQ29kZSA9IGl0ZmxhZzsKICAgICBfX0hBTF9DRUNfQ0xFQVJfRkxBRyhoY2VjLCBIQUxfQ0VDX0VSUk9SX1JYT1ZSIHwgSEFMX0NFQ19FUlJPUl9CUkUgfCBDRUNfRkxBR19MQlBFIHwgQ0VDX0ZMQUdfU0JQRSB8CkBAIC05NTksNyArOTYwLDggQEAKICAgKi8KIEhBTF9DRUNfU3RhdGVUeXBlRGVmIEhBTF9DRUNfR2V0U3RhdGUoY29uc3QgQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpCiB7Ci0gIHVpbnQzMl90IHRlbXAxLCB0ZW1wMjsKKyAgdWludDMyX3QgdGVtcDE7CisgIHVpbnQzMl90IHRlbXAyOwogICB0ZW1wMSA9IGhjZWMtPmdTdGF0ZTsKICAgdGVtcDIgPSBoY2VjLT5SeFN0YXRlOwogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF9jb21wLmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9jb21wLmMKaW5kZXggOGY5N2I2My4uMDMwMDE4NiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9oYWxfY29tcC5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX2NvbXAuYwpAQCAtNiw4ICs2LDYgQEAKICAgKiAgICAgICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nCiAgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBDT01QIHBlcmlwaGVyYWw6CiAgICogICAgICAgICAgICsgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwotICAqICAgICAgICAgICArIFN0YXJ0L1N0b3Agb3BlcmF0aW9uIGZ1bmN0aW9ucyBpbiBwb2xsaW5nIG1vZGUuCi0gICogICAgICAgICAgICsgU3RhcnQvU3RvcCBvcGVyYXRpb24gZnVuY3Rpb25zIGluIGludGVycnVwdCBtb2RlLgogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucwogICAqCkBAIC0xNjIsNyArMTYwLDYgQEAKICAgICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIGFuZCBhbGwgY2FsbGJhY2tzCiAgICAgIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnMuCiAKLSAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCkBAIC0xMDczLDMgKzEwNzAsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfY29ydGV4LmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9jb3J0ZXguYwppbmRleCBhN2VhZDMyLi4wOTk4MDM2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9jb3J0ZXguYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF9jb3J0ZXguYwpAQCAtOCwxOCArOCw3IEBACiAgICogICAgICAgICAgICsgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKICAgKgotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKiBAYXR0ZW50aW9uCi0gICoKLSAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgotICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCi0gICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCi0gICoKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gIEB2ZXJiYXRpbQorICAqICBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNzgsNiArNjcsMTYgQEAKIAogICBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGF0dGVudGlvbgorICAqCisgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAqCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKgpAQCAtNTA5LDMgKzUwOCw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF9jcmMuYyBiL1NyYy9zdG0zMmYzeHhfaGFsX2NyYy5jCmluZGV4IDEyM2JmYWUuLmI0MWRlMjIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfaGFsX2NyYy5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX2NyYy5jCkBAIC0yMDAsNyArMjAwLDcgQEAKICAgX19IQUxfQ1JDX0RSX1JFU0VUKGhjcmMpOwogCiAgIC8qIFJlc2V0IElEUiByZWdpc3RlciBjb250ZW50ICovCi0gIENMRUFSX0JJVChoY3JjLT5JbnN0YW5jZS0+SURSLCBDUkNfSURSX0lEUik7CisgIF9fSEFMX0NSQ19TRVRfSURSKGhjcmMsIDApOwogCiAgIC8qIERlSW5pdCB0aGUgbG93IGxldmVsIGhhcmR3YXJlICovCiAgIEhBTF9DUkNfTXNwRGVJbml0KGhjcmMpOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfY3JjX2V4LmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9jcmNfZXguYwppbmRleCA4OGU1MDg2Li4wYTgyZDkzIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9jcmNfZXguYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF9jcmNfZXguYwpAQCAtOTQsNDQgKzk0LDUzIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19DUkNfUE9MX0xFTkdUSChQb2x5TGVuZ3RoKSk7CiAKLSAgLyogY2hlY2sgcG9seW5vbWlhbCBkZWZpbml0aW9uIHZzIHBvbHlub21pYWwgc2l6ZToKLSAgICogcG9seW5vbWlhbCBsZW5ndGggbXVzdCBiZSBhbGlnbmVkIHdpdGggcG9seW5vbWlhbAotICAgKiBkZWZpbml0aW9uLiBIQUxfRVJST1IgaXMgcmVwb3J0ZWQgaWYgUG9sIGRlZ3JlZSBpcwotICAgKiBsYXJnZXIgdGhhbiB0aGF0IGluZGljYXRlZCBieSBQb2x5TGVuZ3RoLgotICAgKiBMb29rIGZvciBNU0IgcG9zaXRpb246IG1zYiB3aWxsIGNvbnRhaW4gdGhlIGRlZ3JlZSBvZgotICAgKiAgdGhlIHNlY29uZCB0byB0aGUgbGFyZ2VzdCBwb2x5bm9taWFsIG1lbWJlci4gRS5nLiwgZm9yCi0gICAqICBYXjcgKyBYXjYgKyBYXjUgKyBYXjIgKyAxLCBtc2IgPSA2LiAqLwotICB3aGlsZSAoKG1zYi0tID4gMFUpICYmICgoUG9sICYgKCh1aW50MzJfdCkoMHgxVSkgPDwgKG1zYiAmIDB4MUZVKSkpID09IDBVKSkKKyAgLyogRW5zdXJlIHRoYXQgdGhlIGdlbmVyYXRpbmcgcG9seW5vbWlhbCBpcyBvZGQgKi8KKyAgaWYgKChQb2wgJiAodWludDMyX3QpKDB4MVUpKSA9PSAgMFUpCiAgIHsKKyAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9Ci0KLSAgc3dpdGNoIChQb2x5TGVuZ3RoKQorICBlbHNlCiAgIHsKLSAgICBjYXNlIENSQ19QT0xZTEVOR1RIXzdCOgotICAgICAgaWYgKG1zYiA+PSBIQUxfQ1JDX0xFTkdUSF83QikKLSAgICAgIHsKLSAgICAgICAgc3RhdHVzID0gICBIQUxfRVJST1I7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENSQ19QT0xZTEVOR1RIXzhCOgotICAgICAgaWYgKG1zYiA+PSBIQUxfQ1JDX0xFTkdUSF84QikKLSAgICAgIHsKLSAgICAgICAgc3RhdHVzID0gICBIQUxfRVJST1I7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENSQ19QT0xZTEVOR1RIXzE2QjoKLSAgICAgIGlmIChtc2IgPj0gSEFMX0NSQ19MRU5HVEhfMTZCKQotICAgICAgewotICAgICAgICBzdGF0dXMgPSAgIEhBTF9FUlJPUjsKLSAgICAgIH0KLSAgICAgIGJyZWFrOworICAgIC8qIGNoZWNrIHBvbHlub21pYWwgZGVmaW5pdGlvbiB2cyBwb2x5bm9taWFsIHNpemU6CisgICAgICogcG9seW5vbWlhbCBsZW5ndGggbXVzdCBiZSBhbGlnbmVkIHdpdGggcG9seW5vbWlhbAorICAgICAqIGRlZmluaXRpb24uIEhBTF9FUlJPUiBpcyByZXBvcnRlZCBpZiBQb2wgZGVncmVlIGlzCisgICAgICogbGFyZ2VyIHRoYW4gdGhhdCBpbmRpY2F0ZWQgYnkgUG9seUxlbmd0aC4KKyAgICAgKiBMb29rIGZvciBNU0IgcG9zaXRpb246IG1zYiB3aWxsIGNvbnRhaW4gdGhlIGRlZ3JlZSBvZgorICAgICAqICB0aGUgc2Vjb25kIHRvIHRoZSBsYXJnZXN0IHBvbHlub21pYWwgbWVtYmVyLiBFLmcuLCBmb3IKKyAgICAgKiAgWF43ICsgWF42ICsgWF41ICsgWF4yICsgMSwgbXNiID0gNi4gKi8KKyAgICB3aGlsZSAoKG1zYi0tID4gMFUpICYmICgoUG9sICYgKCh1aW50MzJfdCkoMHgxVSkgPDwgKG1zYiAmIDB4MUZVKSkpID09IDBVKSkKKyAgICB7CisgICAgfQogCi0gICAgY2FzZSBDUkNfUE9MWUxFTkdUSF8zMkI6Ci0gICAgICAvKiBubyBwb2x5bm9taWFsIGRlZmluaXRpb24gdnMuIHBvbHlub21pYWwgbGVuZ3RoIGlzc3VlIHBvc3NpYmxlICovCi0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKLSAgICAgIGJyZWFrOworICAgIHN3aXRjaCAoUG9seUxlbmd0aCkKKyAgICB7CisKKyAgICAgIGNhc2UgQ1JDX1BPTFlMRU5HVEhfN0I6CisgICAgICAgIGlmIChtc2IgPj0gSEFMX0NSQ19MRU5HVEhfN0IpCisgICAgICAgIHsKKyAgICAgICAgICBzdGF0dXMgPSAgIEhBTF9FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQ1JDX1BPTFlMRU5HVEhfOEI6CisgICAgICAgIGlmIChtc2IgPj0gSEFMX0NSQ19MRU5HVEhfOEIpCisgICAgICAgIHsKKyAgICAgICAgICBzdGF0dXMgPSAgIEhBTF9FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQ1JDX1BPTFlMRU5HVEhfMTZCOgorICAgICAgICBpZiAobXNiID49IEhBTF9DUkNfTEVOR1RIXzE2QikKKyAgICAgICAgeworICAgICAgICAgIHN0YXR1cyA9ICAgSEFMX0VSUk9SOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIENSQ19QT0xZTEVOR1RIXzMyQjoKKyAgICAgICAgLyogbm8gcG9seW5vbWlhbCBkZWZpbml0aW9uIHZzLiBwb2x5bm9taWFsIGxlbmd0aCBpc3N1ZSBwb3NzaWJsZSAqLworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgfQogICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfZGFjLmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9kYWMuYwppbmRleCBhY2I1OTYzLi5lYmNmYTg5IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9kYWMuYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF9kYWMuYwpAQCAtMywxMiArMywxMiBAQAogICAqIEBmaWxlICAgIHN0bTMyZjN4eF9oYWxfZGFjLmMKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQogICAqIEBicmllZiAgIERBQyBIQUwgbW9kdWxlIGRyaXZlci4KLSAgKiAgICAgICAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcgCisgICogICAgICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nCiAgICogICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIERpZ2l0YWwgdG8gQW5hbG9nIENvbnZlcnRlciAoREFDKSBwZXJpcGhlcmFsOgogICAqICAgICAgICAgICArIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKLSAgKiAgICAgICAgICAgKyBJTyBvcGVyYXRpb24gZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucwotICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9ycyBmdW5jdGlvbnMgICAgICAKKyAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIFN0YXRlIGFuZCBFcnJvcnMgZnVuY3Rpb25zCisgICoKICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCkBAIC0yMSwxMzIgKzIxLDEzMiBAQAogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBAdmVyYmF0aW0gICAgICAKKyBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgREFDIFBlcmlwaGVyYWwgZmVhdHVyZXMgIyMjIyMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgWy4uXSAgICAgICAgCisgICAgWy4uXQogICAgICAgKioqIERBQyBDaGFubmVscyAqKioKLSAgICAgID09PT09PT09PT09PT09PT09PT09ICAKLSAgICBbLi5dICAKLSAgICBUaGUgZGV2aWNlIGludGVncmF0ZXMgdXAgdG8gMyAxMi1iaXQgRGlnaXRhbCBBbmFsb2cgQ29udmVydGVycyB0aGF0IGNhbiAKKyAgICAgID09PT09PT09PT09PT09PT09PT09CisgICAgWy4uXQorICAgIFRoZSBkZXZpY2UgaW50ZWdyYXRlcyB1cCB0byAzIDEyLWJpdCBEaWdpdGFsIEFuYWxvZyBDb252ZXJ0ZXJzIHRoYXQgY2FuCiAgICAgYmUgdXNlZCBpbmRlcGVuZGVudGx5IG9yIHNpbXVsdGFuZW91c2x5IChkdWFsIG1vZGUpOgogICAgICAgKCMpIERBQzEgY2hhbm5lbDEgd2l0aCBEQUMxX09VVDEgKFBBNCkgYXMgb3V0cHV0Ci0gICAgICAoIykgREFDMSBjaGFubmVsMiB3aXRoIERBQzFfT1VUMiAoUEE1KSBhcyBvdXRwdXQgCisgICAgICAoIykgREFDMSBjaGFubmVsMiB3aXRoIERBQzFfT1VUMiAoUEE1KSBhcyBvdXRwdXQKICAgICAgICAgICAoZm9yIFNUTTMyRjMgZGV2aWNlcyBoYXZpbmcgMiBjaGFubmVscyBvbiBEQUMxKQotICAgICAgKCMpIERBQzIgY2hhbm5lbDEgd2l0aCBEQUMyX09VVDEgKFBBNikgYXMgb3V0cHV0IAorICAgICAgKCMpIERBQzIgY2hhbm5lbDEgd2l0aCBEQUMyX09VVDEgKFBBNikgYXMgb3V0cHV0CiAgICAgICAgICAgKGZvciBTVE0zMkYzIGRldmljZXMgaGF2aW5nIDIgREFDKQogCiAgICAgICAqKiogREFDIFRyaWdnZXJzICoqKgogICAgICAgPT09PT09PT09PT09PT09PT09PT0KICAgICBbLi5dCiAgICAgRGlnaXRhbCB0byBBbmFsb2cgY29udmVyc2lvbiBjYW4gYmUgbm9uLXRyaWdnZXJlZCB1c2luZyBEQUNfVFJJR0dFUl9OT05FCi0gICAgYW5kIERBQzFfT1VUMS9EQUMxX09VVDIvREFDMl9PVVQxIGlzIGF2YWlsYWJsZSBvbmNlIHdyaXRpbmcgdG8gREhSeCByZWdpc3Rlci4gCi0gICAgWy4uXSAKKyAgICBhbmQgREFDMV9PVVQxL0RBQzFfT1VUMi9EQUMyX09VVDEgaXMgYXZhaWxhYmxlIG9uY2Ugd3JpdGluZyB0byBESFJ4IHJlZ2lzdGVyLgorICAgIFsuLl0KICAgICBEaWdpdGFsIHRvIEFuYWxvZyBjb252ZXJzaW9uIGNhbiBiZSB0cmlnZ2VyZWQgYnk6CiAgICAgICAoIykgRXh0ZXJuYWwgZXZlbnQ6IEVYVEkgTGluZSA5IChhbnkgR1BJT3hfUElOXzkpIHVzaW5nIERBQ19UUklHR0VSX0VYVF9JVDkuCiAgICAgICAgICAgVGhlIHVzZWQgcGluIChHUElPeF9QSU5fOSkgbXVzdCBiZSBjb25maWd1cmVkIGluIGlucHV0IG1vZGUuCi0gIAotICAgICAgKCMpIFRpbWVycyBUUkdPOiBUSU0yLCBUSU00LCBUSU01LCBUSU02LCBUSU03IGFuZCBUSU04IAorCisgICAgICAoIykgVGltZXJzIFRSR086IFRJTTIsIFRJTTQsIFRJTTUsIFRJTTYsIFRJTTcgYW5kIFRJTTgKICAgICAgICAgICAoREFDX1RSSUdHRVJfVDJfVFJHTywgREFDX1RSSUdHRVJfVDRfVFJHTy4uLikKLSAgCisKICAgICAgICgjKSBTb2Z0d2FyZSB1c2luZyBEQUNfVFJJR0dFUl9TT0ZUV0FSRQotICAKKwogICAgICAgKioqIERBQyBCdWZmZXIgbW9kZSBmZWF0dXJlICoqKgotICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAgICAgIFsuLl0gCi0gICAgICBFYWNoIERBQyBjaGFubmVsIGludGVncmF0ZXMgYW4gb3V0cHV0IGJ1ZmZlciB0aGF0IGNhbiBiZSB1c2VkIHRvIAorICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgWy4uXQorICAgICAgRWFjaCBEQUMgY2hhbm5lbCBpbnRlZ3JhdGVzIGFuIG91dHB1dCBidWZmZXIgdGhhdCBjYW4gYmUgdXNlZCB0bwogICAgICAgcmVkdWNlIHRoZSBvdXRwdXQgaW1wZWRhbmNlLCBhbmQgdG8gZHJpdmUgZXh0ZXJuYWwgbG9hZHMgZGlyZWN0bHkKICAgICAgIHdpdGhvdXQgaGF2aW5nIHRvIGFkZCBhbiBleHRlcm5hbCBvcGVyYXRpb25hbCBhbXBsaWZpZXIuCi0gICAgICBUbyBlbmFibGUsIHRoZSBvdXRwdXQgYnVmZmVyIHVzZSAgCisgICAgICBUbyBlbmFibGUsIHRoZSBvdXRwdXQgYnVmZmVyIHVzZQogICAgICAgc0NvbmZpZy5EQUNfT3V0cHV0QnVmZmVyID0gREFDX09VVFBVVEJVRkZFUl9FTkFCTEU7CiAgICAgICBPcgotICAgICAgQW4gb3V0cHV0IHN3aXRjaCAKKyAgICAgIEFuIG91dHB1dCBzd2l0Y2gKICAgICAgICAgIChpbiBTVE0zMkYzMDN4NCwgU1RNMzJGMzAzeDYsIFNUTTMyRjMwM3g4CiAgICAgICAgICAgICAgYywgU1RNMzJGMzM0eDYsIFNUTTMyRjMzNHg4CiAgICAgICAgICAgICYgU1RNMzJGMzM0eHgpLgogICAgICAgVG8gZW5hYmxlLCB0aGUgb3V0cHV0IHN3aXRjaAogICAgICAgc0NvbmZpZy5EQUNfT3V0cHV0U3dpdGNoID0gREFDX09VVFBVVFNXSVRDSF9FTkFCTEU7Ci0gICAgICBbLi5dICAgICAgICAgCi0gICAgICAoQCkgUmVmZXIgdG8gdGhlIGRldmljZSBkYXRhc2hlZXQgZm9yIG1vcmUgZGV0YWlscyBhYm91dCBvdXRwdXQgCisgICAgICBbLi5dCisgICAgICAoQCkgUmVmZXIgdG8gdGhlIGRldmljZSBkYXRhc2hlZXQgZm9yIG1vcmUgZGV0YWlscyBhYm91dCBvdXRwdXQKICAgICAgICAgICBpbXBlZGFuY2UgdmFsdWUgd2l0aCBhbmQgd2l0aG91dCBvdXRwdXQgYnVmZmVyLgogCiAgICAgICAqKiogR1BJTyBjb25maWd1cmF0aW9ucyBndWlkZWxpbmVzICoqKgogICAgICAgPT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBbLi5dIAotICAgICAgV2hlbiBhIERBQyBjaGFubmVsIGlzIHVzZWQgKGV4IGNoYW5uZWwxIG9uIFBBNCkgYW5kIHRoZSBvdGhlciBpcyBub3QgCisgICAgICBbLi5dCisgICAgICBXaGVuIGEgREFDIGNoYW5uZWwgaXMgdXNlZCAoZXggY2hhbm5lbDEgb24gUEE0KSBhbmQgdGhlIG90aGVyIGlzIG5vdAogICAgICAgKGV4IGNoYW5uZWwyIG9uIFBBNSBpcyBjb25maWd1cmVkIGluIEFuYWxvZyBhbmQgZGlzYWJsZWQpLgogICAgICAgQ2hhbm5lbDEgbWF5IGRpc3R1cmIgY2hhbm5lbDIgYXMgY291cGxpbmcgZWZmZWN0LgogICAgICAgTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGNvdXBsaW5nIG9uIGNoYW5uZWwyIGFzIHNvb24gYXMgY2hhbm5lbDIgaXMgdHVybmVkIG9uLgogICAgICAgQ291cGxpbmcgb24gYWRqYWNlbnQgY2hhbm5lbCBjb3VsZCBiZSBhdm9pZGVkIGFzIGZvbGxvd3M6Ci0gICAgICB3aGVuIHVudXNlZCBQQTUgaXMgY29uZmlndXJlZCBhcyBJTlBVVCBQVUxMLVVQIG9yIERPV04uIAotICAgICAgUEE1IGlzIGNvbmZpZ3VyZWQgaW4gQU5BTE9HIGp1c3QgYmVmb3JlIGl0IGlzIHR1cm5lZCBvbi4gICAgIAorICAgICAgd2hlbiB1bnVzZWQgUEE1IGlzIGNvbmZpZ3VyZWQgYXMgSU5QVVQgUFVMTC1VUCBvciBET1dOLgorICAgICAgUEE1IGlzIGNvbmZpZ3VyZWQgaW4gQU5BTE9HIGp1c3QgYmVmb3JlIGl0IGlzIHR1cm5lZCBvbi4KIAotICAgICAgICAgICAgCisKICAgICAgICAqKiogREFDIHdhdmUgZ2VuZXJhdGlvbiBmZWF0dXJlICoqKgotICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICAgICAgIFsuLl0gICAgIAorICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgWy4uXQogICAgICAgIEJvdGggREFDIGNoYW5uZWxzIG9mIERBQzEgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUKICAgICAgICBub3RlIHRoYXQgd2F2ZSBnZW5lcmF0aW9uIGlzIG5vdCBhdmFpbGFibGUgaW4gREFDMi4KICAgICAgICAgICgjKSBOb2lzZSB3YXZlCiAgICAgICAgICAoIykgVHJpYW5nbGUgd2F2ZQotICAgICAgCisKICAgICAgICBXYXZlIGdlbmVyYXRpb24gaXMgTk9UIGF2YWlsYWJsZSBpbiBEQUMyLgogCiAgICAgICAgKioqIERBQyBkYXRhIGZvcm1hdCAqKioKICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgIFsuLl0gICAKKyAgICAgICBbLi5dCiAgICAgICAgVGhlIERBQyBkYXRhIGZvcm1hdCBjYW4gYmU6CiAgICAgICAgICAoIykgOC1iaXQgcmlnaHQgYWxpZ25tZW50IHVzaW5nIERBQ19BTElHTl84Ql9SCiAgICAgICAgICAoIykgMTItYml0IGxlZnQgYWxpZ25tZW50IHVzaW5nIERBQ19BTElHTl8xMkJfTAogICAgICAgICAgKCMpIDEyLWJpdCByaWdodCBhbGlnbm1lbnQgdXNpbmcgREFDX0FMSUdOXzEyQl9SCi0gIAotICAgICAgICoqKiBEQUMgZGF0YSB2YWx1ZSB0byB2b2x0YWdlIGNvcnJlc3BvbmRhbmNlICoqKiAgCi0gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICAgICAgIFsuLl0gCisKKyAgICAgICAqKiogREFDIGRhdGEgdmFsdWUgdG8gdm9sdGFnZSBjb3JyZXNwb25kZW5jZSAqKioKKyAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICBbLi5dCiAgICAgICAgVGhlIGFuYWxvZyBvdXRwdXQgdm9sdGFnZSBvbiBlYWNoIERBQyBjaGFubmVsIHBpbiBpcyBkZXRlcm1pbmVkCi0gICAgICAgYnkgdGhlIGZvbGxvd2luZyBlcXVhdGlvbjogCi0gICAgICAgWy4uXSAKLSAgICAgICBEQUNfT1VUeCA9IFZSRUYrICogRE9SIC8gNDA5NSAgICAgCisgICAgICAgYnkgdGhlIGZvbGxvd2luZyBlcXVhdGlvbjoKKyAgICAgICBbLi5dCisgICAgICAgREFDX09VVHggPSBWUkVGKyAqIERPUiAvIDQwOTUKICAgICAgICAoKykgd2l0aCAgRE9SIGlzIHRoZSBEYXRhIE91dHB1dCBSZWdpc3RlcgotICAgICAgIFsuLl0gIAorICAgICAgIFsuLl0KICAgICAgICAgICBWRUYrIGlzIHRoZSBpbnB1dCB2b2x0YWdlIHJlZmVyZW5jZSAocmVmZXIgdG8gdGhlIGRldmljZSBkYXRhc2hlZXQpCi0gICAgICAgWy4uXSAgICAgICAgCisgICAgICAgWy4uXQogICAgICAgICBlLmcuIFRvIHNldCBEQUNfT1VUMSB0byAwLjdWLCB1c2UKICAgICAgICAoKykgIEFzc3VtaW5nIHRoYXQgVlJFRisgPSAzLjNWLCBEQUNfT1VUMSA9ICgzLjNVICogODY4VSkgLyA0MDk1VSA9IDAuN1YKLSAgCisKICAgICAgICAqKiogRE1BIHJlcXVlc3RzICAqKioKICAgICAgICA9PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICBbLi5dICAgIAotICAgICAgIEEgRE1BMSBvciBETUEyIHJlcXVlc3QgY2FuIGJlIGdlbmVyYXRlZCB3aGVuIGFuIGV4dGVybmFsIHRyaWdnZXIgCi0gICAgICAgKGJ1dCBub3QgYSBzb2Z0d2FyZSB0cmlnZ2VyKSBvY2N1cnMgaWYgRE1BMSBvciBETUEyIHJlcXVlc3RzIGFyZSAKKyAgICAgICBbLi5dCisgICAgICAgQSBETUExIG9yIERNQTIgcmVxdWVzdCBjYW4gYmUgZ2VuZXJhdGVkIHdoZW4gYW4gZXh0ZXJuYWwgdHJpZ2dlcgorICAgICAgIChidXQgbm90IGEgc29mdHdhcmUgdHJpZ2dlcikgb2NjdXJzIGlmIERNQTEgb3IgRE1BMiByZXF1ZXN0cyBhcmUKICAgICAgICBlbmFibGVkIHVzaW5nIEhBTF9EQUNfU3RhcnRfRE1BKCkuCiAgICAgICAgWy4uXQogICAgICAgIERNQTEgcmVxdWVzdHMgYXJlIG1hcHBlZCBhcyBmb2xsb3dpbmc6CiAgICAgICAgICAoIykgREFDMSBjaGFubmVsMTogbWFwcGVkIGVpdGhlciBvbgotICAgICAgICAgKCsrKSBETUExIGNoYW5uZWwzIAorICAgICAgICAgKCsrKSBETUExIGNoYW5uZWwzCiAgICAgICAgICAoKyspIG9yIERNQTIgY2hhbm5lbDMgKGZvciBTVE0zMkYzIGRldmljZXMgaGF2aW5nIDIgRE1BKQogICAgICAgICAgICAgIHdoaWNoIG11c3QgYmUgYWxyZWFkeSBjb25maWd1cmVkCi0gICAgICAgICAoIykgREFDMSBjaGFubmVsMjogCisgICAgICAgICAoIykgREFDMSBjaGFubmVsMjoKICAgICAgICAgICAgICAoZm9yIFNUTTMyRjMgZGV2aWNlcyBoYXZpbmcgMiBjaGFubmVscyBvbiBEQUMxKQogICAgICAgICAgICAgIG1hcHBlZCBlaXRoZXIgb24KLSAgICAgICAgICgrKykgRE1BMSBjaGFubmVsNCAKKyAgICAgICAgICgrKykgRE1BMSBjaGFubmVsNAogICAgICAgICAgKCsrKSBvciBETUEyIGNoYW5uZWw0IChmb3IgU1RNMzJGMyBkZXZpY2VzIGhhdmluZyAyIERNQSkKICAgICAgICAgICAgICB3aGljaCBtdXN0IGJlIGFscmVhZHkgY29uZmlndXJlZAotICAgICAgCi0gICAgICAgICAoIykgREFDMiBjaGFubmVsMTogbWFwcGVkIGVpdGhlciBvbiAKLSAgICAgICAgICAgICAoZm9yIFNUTTMyRjMgZGV2aWNlcyBoYXZpbmcgMiBEQUMpCi0gICAgICAgICAoKyspIERNQTEgY2hhbm5lbDQgCi0gICAgICAgICAoKyspIG9yIERNQTIgY2hhbm5lbDQgKGZvciBTVE0zMkYzIGRldmljZXMgaGF2aW5nIDIgRE1BKQotICAgICAgICAgICAgIHdoaWNoIG11c3QgYmUgYWxyZWFkeSBjb25maWd1cmVkCi0gICAgCiAKLSAgICAgICAoQCkgRm9yIER1YWwgbW9kZSBhbmQgc3BlY2lmaWMgc2lnbmFsIChUcmlhbmdsZSBhbmQgbm9pc2UpIGdlbmVyYXRpb24gcGxlYXNlIAotICAgICAgIHJlZmVyIHRvIEV4dGVuZGVkIEZlYXR1cmVzIERyaXZlciBkZXNjcmlwdGlvbiAgICAgICAgCisgICAgICAgICAoIykgREFDMiBjaGFubmVsMTogbWFwcGVkIGVpdGhlciBvbgorICAgICAgICAgICAgIChmb3IgU1RNMzJGMyBkZXZpY2VzIGhhdmluZyAyIERBQykKKyAgICAgICAgICgrKykgRE1BMSBjaGFubmVsNAorICAgICAgICAgKCsrKSBvciBETUEyIGNoYW5uZWw0IChmb3IgU1RNMzJGMyBkZXZpY2VzIGhhdmluZyAyIERNQSkKKyAgICAgICAgICAgICB3aGljaCBtdXN0IGJlIGFscmVhZHkgY29uZmlndXJlZAorCisKKyAgICAgICAoQCkgRm9yIER1YWwgbW9kZSBhbmQgc3BlY2lmaWMgc2lnbmFsIChUcmlhbmdsZSBhbmQgbm9pc2UpIGdlbmVyYXRpb24gcGxlYXNlCisgICAgICAgcmVmZXIgdG8gRXh0ZW5kZWQgRmVhdHVyZXMgRHJpdmVyIGRlc2NyaXB0aW9uCiAKICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIFsuLl0gICAgICAgICAgCisgICAgWy4uXQogICAgICAgKCspIERBQyBBUEIgY2xvY2sgbXVzdCBiZSBlbmFibGVkIHRvIGdldCB3cml0ZSBhY2Nlc3MgdG8gREFDCiAgICAgICAgICAgcmVnaXN0ZXJzIHVzaW5nIEhBTF9EQUNfSW5pdCgpCiAgICAgICAoKykgQ29uZmlndXJlIERBQ19PVVR4IChEQUNfT1VUMTogUEE0LCBEQUNfT1VUMjogUEE1KSBpbiBhbmFsb2cgbW9kZS4KQEAgLTE1NSwyNyArMTU1LDI3IEBACiAKICAgICAgKioqIFBvbGxpbmcgbW9kZSBJTyBvcGVyYXRpb24gKioqCiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBbLi5dICAgIAotICAgICAgICgrKSBTdGFydCB0aGUgREFDIHBlcmlwaGVyYWwgdXNpbmcgSEFMX0RBQ19TdGFydCgpIAorICAgICBbLi5dCisgICAgICAgKCspIFN0YXJ0IHRoZSBEQUMgcGVyaXBoZXJhbCB1c2luZyBIQUxfREFDX1N0YXJ0KCkKICAgICAgICAoKykgVG8gcmVhZCB0aGUgREFDIGxhc3QgZGF0YSBvdXRwdXQgdmFsdWUsIHVzZSB0aGUgSEFMX0RBQ19HZXRWYWx1ZSgpIGZ1bmN0aW9uLgogICAgICAgICgrKSBTdG9wIHRoZSBEQUMgcGVyaXBoZXJhbCB1c2luZyBIQUxfREFDX1N0b3AoKQotICAgICAgIAotICAgICAqKiogRE1BIG1vZGUgSU8gb3BlcmF0aW9uICoqKiAgICAKKworICAgICAqKiogRE1BIG1vZGUgSU8gb3BlcmF0aW9uICoqKgogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgWy4uXSAgICAKLSAgICAgICAoKykgU3RhcnQgdGhlIERBQyBwZXJpcGhlcmFsIHVzaW5nIEhBTF9EQUNfU3RhcnRfRE1BKCksIGF0IHRoaXMgc3RhZ2UgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGVuZ3RoIAorICAgICBbLi5dCisgICAgICAgKCspIFN0YXJ0IHRoZSBEQUMgcGVyaXBoZXJhbCB1c2luZyBIQUxfREFDX1N0YXJ0X0RNQSgpLCBhdCB0aGlzIHN0YWdlIHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxlbmd0aAogICAgICAgICAgICBvZiBkYXRhIHRvIGJlIHRyYW5zZmVycmVkIGF0IGVhY2ggZW5kIG9mIGNvbnZlcnNpb24KLSAgICAgICAoKykgQXQgdGhlIG1pZGRsZSBvZiBkYXRhIHRyYW5zZmVyIEhBTF9EQUNfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDEoKSBvciBIQUxfREFDRXhfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDIoKSAgCi0gICAgICAgICAgIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbiBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciAKKyAgICAgICAoKykgQXQgdGhlIG1pZGRsZSBvZiBkYXRhIHRyYW5zZmVyIEhBTF9EQUNfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDEoKSBvciBIQUxfREFDRXhfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDIoKQorICAgICAgICAgICBmdW5jdGlvbiBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4gYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIKICAgICAgICAgICAgSEFMX0RBQ19Db252SGFsZkNwbHRDYWxsYmFja0NoMSgpIG9yIEhBTF9EQUNFeF9Db252SGFsZkNwbHRDYWxsYmFja0NoMigpCi0gICAgICAgKCspIEF0IFRoZSBlbmQgb2YgZGF0YSB0cmFuc2ZlciBIQUxfREFDX0NvbnZDcGx0Q2FsbGJhY2tDaDEoKSBvciBIQUxfREFDRXhfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDIoKSAgCi0gICAgICAgICAgIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbiBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciAKKyAgICAgICAoKykgQXQgVGhlIGVuZCBvZiBkYXRhIHRyYW5zZmVyIEhBTF9EQUNfQ29udkNwbHRDYWxsYmFja0NoMSgpIG9yIEhBTF9EQUNFeF9Db252SGFsZkNwbHRDYWxsYmFja0NoMigpCisgICAgICAgICAgIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbiBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlcgogICAgICAgICAgICBIQUxfREFDX0NvbnZDcGx0Q2FsbGJhY2tDaDEoKSBvciBIQUxfREFDRXhfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDIoKQotICAgICAgICgrKSBJbiBjYXNlIG9mIHRyYW5zZmVyIEVycm9yLCBIQUxfREFDX0Vycm9yQ2FsbGJhY2tDaDEoKSBmdW5jdGlvbiBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4gCisgICAgICAgKCspIEluIGNhc2Ugb2YgdHJhbnNmZXIgRXJyb3IsIEhBTF9EQUNfRXJyb3JDYWxsYmFja0NoMSgpIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgogICAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0RBQ19FcnJvckNhbGxiYWNrQ2gxCiAgICAgICAgKCspIEluIGNhc2Ugb2YgRE1BIHVuZGVycnVuLCBEQUMgaW50ZXJydXB0aW9uIHRyaWdnZXJzIGFuZCBleGVjdXRlIGludGVybmFsIGZ1bmN0aW9uIEhBTF9EQUNfSVJRSGFuZGxlci4KLSAgICAgICAgICAgSEFMX0RBQ19ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gxKCkgb3IgSEFMX0RBQ0V4X0RNQVVuZGVycnVuQ2FsbGJhY2tDaDIoKSAgCi0gICAgICAgICAgIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbiBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciAKKyAgICAgICAgICAgSEFMX0RBQ19ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gxKCkgb3IgSEFMX0RBQ0V4X0RNQVVuZGVycnVuQ2FsbGJhY2tDaDIoKQorICAgICAgICAgICBmdW5jdGlvbiBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4gYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIKICAgICAgICAgICAgSEFMX0RBQ19ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gxKCkgb3IgSEFMX0RBQ0V4X0RNQVVuZGVycnVuQ2FsbGJhY2tDaDIoKSBhbmQKICAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0RBQ19FcnJvckNhbGxiYWNrQ2gxKCkKICAgICAgICAoKykgU3RvcCB0aGUgREFDIHBlcmlwaGVyYWwgdXNpbmcgSEFMX0RBQ19TdG9wX0RNQSgpCkBAIC0xODgsMzggKzE4OCwzOCBAQAogCiAgICAgVXNlIEZ1bmN0aW9ucyBIQUxfREFDX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2ssCiAgICAgICBpdCBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKLSAgICAgICgrKSBDb252Q3BsdENhbGxiYWNrQ2gxICAgICA6IGNhbGxiYWNrIHdoZW4gYSBoYWxmIHRyYW5zZmVyIGlzIGNvbXBsZXRlZCBvbiBDaDEuICAgICAgICAgICAgICAgICAKKyAgICAgICgrKSBDb252Q3BsdENhbGxiYWNrQ2gxICAgICA6IGNhbGxiYWNrIHdoZW4gYSBoYWxmIHRyYW5zZmVyIGlzIGNvbXBsZXRlZCBvbiBDaDEuCiAgICAgICAoKykgQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDEgOiBjYWxsYmFjayB3aGVuIGEgdHJhbnNmZXIgaXMgY29tcGxldGVkIG9uIENoMS4KICAgICAgICgrKSBFcnJvckNhbGxiYWNrQ2gxICAgICAgICA6IGNhbGxiYWNrIHdoZW4gYW4gZXJyb3Igb2NjdXJzIG9uIENoMS4KICAgICAgICgrKSBETUFVbmRlcnJ1bkNhbGxiYWNrQ2gxICA6IGNhbGxiYWNrIHdoZW4gYW4gdW5kZXJydW4gZXJyb3Igb2NjdXJzIG9uIENoMS4KLSAgICAgICgrKSBDb252Q3BsdENhbGxiYWNrQ2gyICAgICA6IGNhbGxiYWNrIHdoZW4gYSBoYWxmIHRyYW5zZmVyIGlzIGNvbXBsZXRlZCBvbiBDaDIuICAgCi0gICAgICAoKykgQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDIgOiBjYWxsYmFjayB3aGVuIGEgdHJhbnNmZXIgaXMgY29tcGxldGVkIG9uIENoMi4gICAgICAgIAotICAgICAgKCspIEVycm9yQ2FsbGJhY2tDaDIgICAgICAgIDogY2FsbGJhY2sgd2hlbiBhbiBlcnJvciBvY2N1cnMgb24gQ2gyLiAgICAgICAgICAgICAgICAKKyAgICAgICgrKSBDb252Q3BsdENhbGxiYWNrQ2gyICAgICA6IGNhbGxiYWNrIHdoZW4gYSBoYWxmIHRyYW5zZmVyIGlzIGNvbXBsZXRlZCBvbiBDaDIuCisgICAgICAoKykgQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDIgOiBjYWxsYmFjayB3aGVuIGEgdHJhbnNmZXIgaXMgY29tcGxldGVkIG9uIENoMi4KKyAgICAgICgrKSBFcnJvckNhbGxiYWNrQ2gyICAgICAgICA6IGNhbGxiYWNrIHdoZW4gYW4gZXJyb3Igb2NjdXJzIG9uIENoMi4KICAgICAgICgrKSBETUFVbmRlcnJ1bkNhbGxiYWNrQ2gyICA6IGNhbGxiYWNrIHdoZW4gYW4gdW5kZXJydW4gZXJyb3Igb2NjdXJzIG9uIENoMi4KLSAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgICA6IERBQyBNc3BJbml0LiAgCisgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgICAgOiBEQUMgTXNwSW5pdC4KICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgICA6IERBQyBNc3BkZUluaXQuCiAgICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECiAgICAgICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogCiAgICAgVXNlIGZ1bmN0aW9uIEhBTF9EQUNfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAotICAgICAgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb24uIEl0IGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgotICAgICAgKCspIENvbnZDcGx0Q2FsbGJhY2tDaDEgICAgIDogY2FsbGJhY2sgd2hlbiBhIGhhbGYgdHJhbnNmZXIgaXMgY29tcGxldGVkIG9uIENoMS4gICAgICAgICAgICAgICAgIAorICAgICAgd2VhayAob3ZlcnJpZGRlbikgZnVuY3Rpb24uIEl0IGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgorICAgICAgKCspIENvbnZDcGx0Q2FsbGJhY2tDaDEgICAgIDogY2FsbGJhY2sgd2hlbiBhIGhhbGYgdHJhbnNmZXIgaXMgY29tcGxldGVkIG9uIENoMS4KICAgICAgICgrKSBDb252SGFsZkNwbHRDYWxsYmFja0NoMSA6IGNhbGxiYWNrIHdoZW4gYSB0cmFuc2ZlciBpcyBjb21wbGV0ZWQgb24gQ2gxLgogICAgICAgKCspIEVycm9yQ2FsbGJhY2tDaDEgICAgICAgIDogY2FsbGJhY2sgd2hlbiBhbiBlcnJvciBvY2N1cnMgb24gQ2gxLgogICAgICAgKCspIERNQVVuZGVycnVuQ2FsbGJhY2tDaDEgIDogY2FsbGJhY2sgd2hlbiBhbiB1bmRlcnJ1biBlcnJvciBvY2N1cnMgb24gQ2gxLgotICAgICAgKCspIENvbnZDcGx0Q2FsbGJhY2tDaDIgICAgIDogY2FsbGJhY2sgd2hlbiBhIGhhbGYgdHJhbnNmZXIgaXMgY29tcGxldGVkIG9uIENoMi4gICAKLSAgICAgICgrKSBDb252SGFsZkNwbHRDYWxsYmFja0NoMiA6IGNhbGxiYWNrIHdoZW4gYSB0cmFuc2ZlciBpcyBjb21wbGV0ZWQgb24gQ2gyLiAgICAgICAgCi0gICAgICAoKykgRXJyb3JDYWxsYmFja0NoMiAgICAgICAgOiBjYWxsYmFjayB3aGVuIGFuIGVycm9yIG9jY3VycyBvbiBDaDIuICAgICAgICAgICAgICAgIAorICAgICAgKCspIENvbnZDcGx0Q2FsbGJhY2tDaDIgICAgIDogY2FsbGJhY2sgd2hlbiBhIGhhbGYgdHJhbnNmZXIgaXMgY29tcGxldGVkIG9uIENoMi4KKyAgICAgICgrKSBDb252SGFsZkNwbHRDYWxsYmFja0NoMiA6IGNhbGxiYWNrIHdoZW4gYSB0cmFuc2ZlciBpcyBjb21wbGV0ZWQgb24gQ2gyLgorICAgICAgKCspIEVycm9yQ2FsbGJhY2tDaDIgICAgICAgIDogY2FsbGJhY2sgd2hlbiBhbiBlcnJvciBvY2N1cnMgb24gQ2gyLgogICAgICAgKCspIERNQVVuZGVycnVuQ2FsbGJhY2tDaDIgIDogY2FsbGJhY2sgd2hlbiBhbiB1bmRlcnJ1biBlcnJvciBvY2N1cnMgb24gQ2gyLgotICAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICAgICAgIDogREFDIE1zcEluaXQuICAKKyAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgICA6IERBQyBNc3BJbml0LgogICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICAgIDogREFDIE1zcGRlSW5pdC4KICAgICAgICgrKSBBbGwgQ2FsbGJhY2tzCiAgICAgICBUaGlzIGZ1bmN0aW9uKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUgYW5kIHRoZSBDYWxsYmFjayBJRC4KIAogICAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9EQUNfSW5pdCBhbmQgaWYgdGhlIHN0YXRlIGlzIEhBTF9EQUNfU1RBVEVfUkVTRVQKLSAgICAgIGFsbCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMuCisgICAgICBhbGwgY2FsbGJhY2tzIGFyZSByZXNldCB0byB0aGUgY29ycmVzcG9uZGluZyBsZWdhY3kgd2VhayAob3ZlcnJpZGRlbikgZnVuY3Rpb25zLgogICAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBjYWxsYmFja3MgdGhhdCBhcmUgcmVzcGVjdGl2ZWx5Ci0gICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgSEFMX0RBQ19Jbml0IAorICAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChvdmVycmlkZGVuKSBmdW5jdGlvbnMgaW4gdGhlIEhBTF9EQUNfSW5pdAogICAgICAgYW5kICBIQUxfREFDX0RlSW5pdCBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KICAgICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgSEFMX0RBQ19Jbml0IGFuZCBIQUxfREFDX0RlSW5pdAogICAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKQpAQCAtMjI5LDI4ICsyMjksMjggQEAKICAgICAgIGluIFJFQURZIG9yIFJFU0VUIHN0YXRlLCB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZAogICAgICAgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KICAgICAgIEluIHRoYXQgY2FzZSBmaXJzdCByZWdpc3RlciB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKLSAgICAgIHVzaW5nIEhBTF9EQUNfUmVnaXN0ZXJDYWxsYmFjayBiZWZvcmUgY2FsbGluZyBIQUxfREFDX0RlSW5pdCAKKyAgICAgIHVzaW5nIEhBTF9EQUNfUmVnaXN0ZXJDYWxsYmFjayBiZWZvcmUgY2FsbGluZyBIQUxfREFDX0RlSW5pdAogICAgICAgb3IgSEFMX0RBQ19Jbml0IGZ1bmN0aW9uLgogCiAgICAgICBXaGVuIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCi0gICAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdGVyaW5nIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSAKLSAgICAgIGFuZCB3ZWFrIChzdXJjaGFyZ2VkKSBjYWxsYmFja3MgYXJlIHVzZWQuCisgICAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdGVyaW5nIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZQorICAgICAgYW5kIHdlYWsgKG92ZXJyaWRkZW4pIGNhbGxiYWNrcyBhcmUgdXNlZC4KIAogCiAgICAgICoqKiBEQUMgSEFMIGRyaXZlciBtYWNyb3MgbGlzdCAqKioKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAorICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgWy4uXQogICAgICAgIEJlbG93IHRoZSBsaXN0IG9mIG1vc3QgdXNlZCBtYWNyb3MgaW4gREFDIEhBTCBkcml2ZXIuCi0gICAgICAgCisKICAgICAgICgrKSBfX0hBTF9EQUNfRU5BQkxFIDogRW5hYmxlIHRoZSBEQUMgcGVyaXBoZXJhbAogICAgICAgKCspIF9fSEFMX0RBQ19ESVNBQkxFIDogRGlzYWJsZSB0aGUgREFDIHBlcmlwaGVyYWwKICAgICAgICgrKSBfX0hBTF9EQUNfQ0xFQVJfRkxBRzogQ2xlYXIgdGhlIERBQydzIHBlbmRpbmcgZmxhZ3MKLSAgICAgICgrKSBfX0hBTF9EQUNfR0VUX0ZMQUc6IEdldCB0aGUgc2VsZWN0ZWQgREFDJ3MgZmxhZyBzdGF0dXMgCi0gICAgICAKKyAgICAgICgrKSBfX0hBTF9EQUNfR0VUX0ZMQUc6IEdldCB0aGUgc2VsZWN0ZWQgREFDJ3MgZmxhZyBzdGF0dXMKKwogICAgICBbLi5dCi0gICAgICAoQCkgWW91IGNhbiByZWZlciB0byB0aGUgREFDIEhBTCBkcml2ZXIgaGVhZGVyIGZpbGUgZm9yIG1vcmUgdXNlZnVsIG1hY3JvcyAgCi0gICAKLSAgQGVuZHZlcmJhdGltICAgIAorICAgICAgKEApIFlvdSBjYW4gcmVmZXIgdG8gdGhlIERBQyBIQUwgZHJpdmVyIGhlYWRlciBmaWxlIGZvciBtb3JlIHVzZWZ1bCBtYWNyb3MKKworIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIApAQCAtMjY1LDggKzI2NSw4IEBACiAvKiogQGRlZmdyb3VwIERBQyBEQUMKICAgKiBAYnJpZWYgREFDIEhBTCBtb2R1bGUgZHJpdmVyCiAgICogQHsKLSAgKi8gCi0gCisgICovCisKICNpZmRlZiBIQUxfREFDX01PRFVMRV9FTkFCTEVECiAKIC8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yODksMjIgKzI4OSwyMiBAQAogICAqLwogCiAvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0gICAgCisKIC8qKiBAZGVmZ3JvdXAgREFDX0V4cG9ydGVkX0Z1bmN0aW9ucyBEQUMgRXhwb3J0ZWQgRnVuY3Rpb25zCiAgICogQHsKICAgKi8KIAotLyoqIEBkZWZncm91cCBEQUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIAotICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgCisvKiogQGRlZmdyb3VwIERBQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKKyAqICBAYnJpZWYgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zCiAgKgotQHZlcmJhdGltICAgIAorQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAjIyMjIyBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0gIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG86Ci0gICAgICAoKykgSW5pdGlhbGl6ZSBhbmQgY29uZmlndXJlIHRoZSBEQUMuIAotICAgICAgKCspIERlLWluaXRpYWxpemUgdGhlIERBQy4gCi0gICAgICAgICAKKyAgICAgICgrKSBJbml0aWFsaXplIGFuZCBjb25maWd1cmUgdGhlIERBQy4KKyAgICAgICgrKSBEZS1pbml0aWFsaXplIHRoZSBEQUMuCisKIEBlbmR2ZXJiYXRpbQogICAqIEB7CiAgICovCkBAIC0zMTcsNyArMzE3LDcgQEAKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfSW5pdChEQUNfSGFuZGxlVHlwZURlZiogaGRhYykKLXsgCit7CiAgIC8qIENoZWNrIERBQyBoYW5kbGUgKi8KICAgaWYoaGRhYyA9PSBOVUxMKQogICB7CkBAIC0zMjUsMjAgKzMyNSwyMCBAQAogICB9CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19EQUNfQUxMX0lOU1RBTkNFKGhkYWMtPkluc3RhbmNlKSk7Ci0gIAorCiAgIGlmKGhkYWMtPlN0YXRlID09IEhBTF9EQUNfU1RBVEVfUkVTRVQpCi0gIHsgIAorICB7CiAjaWYgKFVTRV9IQUxfREFDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICAvKiBJbml0IHRoZSBEQUMgQ2FsbGJhY2sgc2V0dGluZ3MgKi8KLSAgaGRhYy0+Q29udkNwbHRDYWxsYmFja0NoMSAgICAgICAgICAgPSBIQUxfREFDX0NvbnZDcGx0Q2FsbGJhY2tDaDE7ICAgIAorICBoZGFjLT5Db252Q3BsdENhbGxiYWNrQ2gxICAgICAgICAgICA9IEhBTF9EQUNfQ29udkNwbHRDYWxsYmFja0NoMTsKICAgaGRhYy0+Q29udkhhbGZDcGx0Q2FsbGJhY2tDaDEgICAgICAgPSBIQUxfREFDX0NvbnZIYWxmQ3BsdENhbGxiYWNrQ2gxOwogICBoZGFjLT5FcnJvckNhbGxiYWNrQ2gxICAgICAgICAgICAgICA9IEhBTF9EQUNfRXJyb3JDYWxsYmFja0NoMTsKICAgaGRhYy0+RE1BVW5kZXJydW5DYWxsYmFja0NoMSAgICAgICAgPSBIQUxfREFDX0RNQVVuZGVycnVuQ2FsbGJhY2tDaDE7CiAjaWYgZGVmaW5lZChEQUNfQ0hBTk5FTDJfU1VQUE9SVCkKLSAgaGRhYy0+Q29udkNwbHRDYWxsYmFja0NoMiAgICAgICAgICAgPSBIQUxfREFDRXhfQ29udkNwbHRDYWxsYmFja0NoMjsgICAgCisgIGhkYWMtPkNvbnZDcGx0Q2FsbGJhY2tDaDIgICAgICAgICAgID0gSEFMX0RBQ0V4X0NvbnZDcGx0Q2FsbGJhY2tDaDI7CiAgIGhkYWMtPkNvbnZIYWxmQ3BsdENhbGxiYWNrQ2gyICAgICAgID0gSEFMX0RBQ0V4X0NvbnZIYWxmQ3BsdENhbGxiYWNrQ2gyOwotICBoZGFjLT5FcnJvckNhbGxiYWNrQ2gyICAgICAgICAgICAgICA9IEhBTF9EQUNFeF9FcnJvckNhbGxiYWNrQ2gyOyAgICAgICAKLSAgaGRhYy0+RE1BVW5kZXJydW5DYWxsYmFja0NoMiAgICAgICAgPSBIQUxfREFDRXhfRE1BVW5kZXJydW5DYWxsYmFja0NoMjsgCisgIGhkYWMtPkVycm9yQ2FsbGJhY2tDaDIgICAgICAgICAgICAgID0gSEFMX0RBQ0V4X0Vycm9yQ2FsbGJhY2tDaDI7CisgIGhkYWMtPkRNQVVuZGVycnVuQ2FsbGJhY2tDaDIgICAgICAgID0gSEFMX0RBQ0V4X0RNQVVuZGVycnVuQ2FsbGJhY2tDaDI7CiAjZW5kaWYgLyogREFDX0NIQU5ORUwyX1NVUFBPUlQgKi8KICAgaWYoaGRhYy0+TXNwSW5pdENhbGxiYWNrID09IE5VTEwpCiAgIHsKQEAgLTM0OSw3ICszNDksNyBAQAogICAgIGhkYWMtPk1zcERlSW5pdENhbGxiYWNrICAgICAgICAgICAgID0gSEFMX0RBQ19Nc3BEZUluaXQ7CiAgIH0KICNlbmRpZiAvKiBVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KLSAgCisKICAgICAvKiBBbGxvY2F0ZSBsb2NrIHJlc291cmNlIGFuZCBpbml0aWFsaXplIGl0ICovCiAgICAgaGRhYy0+TG9jayA9IEhBTF9VTkxPQ0tFRDsKIApAQCAtMzYxLDE2ICszNjEsMTYgQEAKICAgICBIQUxfREFDX01zcEluaXQoaGRhYyk7CiAjZW5kaWYgLyogVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgIH0KLSAgCisKICAgLyogSW5pdGlhbGl6ZSB0aGUgREFDIHN0YXRlKi8KICAgaGRhYy0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX0JVU1k7Ci0gICAgICAgCisKICAgLyogU2V0IERBQyBlcnJvciBjb2RlIHRvIG5vbmUgKi8KICAgaGRhYy0+RXJyb3JDb2RlID0gSEFMX0RBQ19FUlJPUl9OT05FOwotICAKKwogICAvKiBJbml0aWFsaXplIHRoZSBEQUMgc3RhdGUqLwogICBoZGFjLT5TdGF0ZSA9IEhBTF9EQUNfU1RBVEVfUkVBRFk7Ci0gIAorCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTM5NCw3ICszOTQsNyBAQAogCiAgIC8qIENoYW5nZSBEQUMgc3RhdGUgKi8KICAgaGRhYy0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX0JVU1k7Ci0gIAorCiAjaWYgKFVTRV9IQUxfREFDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICBpZihoZGFjLT5Nc3BEZUluaXRDYWxsYmFjayA9PSBOVUxMKQogICB7CkBAIC00MDIsMTUgKzQwMiwxNSBAQAogICB9CiAgIC8qIERlSW5pdCB0aGUgbG93IGxldmVsIGhhcmR3YXJlICovCiAgIGhkYWMtPk1zcERlSW5pdENhbGxiYWNrKGhkYWMpOwotICAKLSNlbHNlIAorCisjZWxzZQogICAvKiBEZUluaXQgdGhlIGxvdyBsZXZlbCBoYXJkd2FyZSAqLwogICBIQUxfREFDX01zcERlSW5pdChoZGFjKTsKICNlbmRpZiAvKiBVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KLSAgCisKICAgLyogU2V0IERBQyBlcnJvciBjb2RlIHRvIG5vbmUgKi8KICAgaGRhYy0+RXJyb3JDb2RlID0gSEFMX0RBQ19FUlJPUl9OT05FOwotICAKKwogICAvKiBDaGFuZ2UgREFDIHN0YXRlICovCiAgIGhkYWMtPlN0YXRlID0gSEFMX0RBQ19TVEFURV9SRVNFVDsKIApAQCAtNDM0LDEzICs0MzQsMTMgQEAKIAogICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCiAgICAgICAgICAgICB0aGUgSEFMX0RBQ19Nc3BJbml0IGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKLSAgICovIAorICAgKi8KIH0KIAogLyoqCiAgICogQGJyaWVmICBEZUluaXRpYWxpemUgdGhlIERBQyBNU1AuCiAgICogQHBhcmFtICBoZGFjIHBvaW50ZXIgdG8gYSBEQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwotICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgREFDLiAgCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBEQUMuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX3dlYWsgdm9pZCBIQUxfREFDX01zcERlSW5pdChEQUNfSGFuZGxlVHlwZURlZiogaGRhYykKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCiAgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKICAgICAgICAgICAgIHRoZSBIQUxfREFDX01zcERlSW5pdCBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCi0gICAqLyAKKyAgICovCiB9CiAKIC8qKgpAQCAtNDU4LDEyICs0NTgsMTIgQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBEQUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMiBJbnB1dCBhbmQgT3V0cHV0IG9wZXJhdGlvbiBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICAgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucyAKKyAqICBAYnJpZWYgICAgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucwogICoKLUB2ZXJiYXRpbSAgIAorQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICMjIyMjIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMgIyMjIyMKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXSAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0bzoKICAgICAgICgrKSBTdGFydCBjb252ZXJzaW9uLgogICAgICAgKCspIFN0b3AgY29udmVyc2lvbi4KQEAgLTQ3MSw3ICs0NzEsNyBAQAogICAgICAgKCspIFN0b3AgY29udmVyc2lvbiBhbmQgZGlzYWJsZSBETUEgdHJhbnNmZXIuCiAgICAgICAoKykgR2V0IHJlc3VsdCBvZiBjb252ZXJzaW9uLgogICAgICAgKCspIEdldCByZXN1bHQgb2YgZHVhbCBtb2RlIGNvbnZlcnNpb24uCi0gICAgICAgICAgICAgICAgICAgICAKKwogQGVuZHZlcmJhdGltCiAgICogQHsKICAgKi8KQEAgLTQ4MCwxMSArNDgwLDExIEBACiAgICogQGJyaWVmICBFbmFibGVzIERBQyBhbmQgc3RhcnRzIGNvbnZlcnNpb24gb2YgY2hhbm5lbC4KICAgKiBAcGFyYW0gIGhkYWMgcG9pbnRlciB0byBhIERBQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBEQUMuCi0gICogQHBhcmFtICBDaGFubmVsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4gCisgICogQHBhcmFtICBDaGFubmVsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8xOiBEQUMxIENoYW5uZWwxIHNlbGVjdGVkCi0gICogICAgICAgICAgICBAYXJnIERBQ19DSEFOTkVMXzI6IERBQzEgQ2hhbm5lbDIgc2VsZWN0ZWQgIAotICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8xOiBEQUMyIENoYW5uZWwxIHNlbGVjdGVkICAKKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0NIQU5ORUxfMjogREFDMSBDaGFubmVsMiBzZWxlY3RlZAorICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8xOiBEQUMyIENoYW5uZWwxIHNlbGVjdGVkCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBfX3dlYWsgSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19TdGFydChEQUNfSGFuZGxlVHlwZURlZiogaGRhYywgdWludDMyX3QgQ2hhbm5lbCkKQEAgLTQ5NSw3ICs0OTUsNyBAQAogCiAgIC8qIE5vdGUgOiBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW50byB0aGlzIGZpbGUgZm9yIGxpYnJhcnkgcmVmZXJlbmNlICovCiAgIC8qICAgICAgICBGdW5jdGlvbiBjb250ZW50IGlzIGxvY2F0ZWQgaW50byBmaWxlIHN0bTMyZjN4eF9oYWxfZGFjX2V4LmMgICovCi0gIAorCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9FUlJPUjsKIH0KQEAgLTUwNCwyNCArNTA0LDI0IEBACiAgICogQGJyaWVmICBEaXNhYmxlcyBEQUMgYW5kIHN0b3AgY29udmVyc2lvbiBvZiBjaGFubmVsLgogICAqIEBwYXJhbSAgaGRhYyBwb2ludGVyIHRvIGEgREFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERBQy4KLSAgKiBAcGFyYW0gIENoYW5uZWwgVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLiAKKyAgKiBAcGFyYW0gIENoYW5uZWwgVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLgogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIERBQ19DSEFOTkVMXzE6IERBQzEgQ2hhbm5lbDEgc2VsZWN0ZWQKLSAgKiAgICAgICAgICAgIEBhcmcgREFDX0NIQU5ORUxfMjogREFDMSBDaGFubmVsMiBzZWxlY3RlZCAgCi0gICogICAgICAgICAgICBAYXJnIERBQ19DSEFOTkVMXzE6IERBQzIgQ2hhbm5lbDEgc2VsZWN0ZWQgIAorICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8yOiBEQUMxIENoYW5uZWwyIHNlbGVjdGVkCisgICogICAgICAgICAgICBAYXJnIERBQ19DSEFOTkVMXzE6IERBQzIgQ2hhbm5lbDEgc2VsZWN0ZWQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfU3RvcChEQUNfSGFuZGxlVHlwZURlZiogaGRhYywgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0RBQ19DSEFOTkVMX0lOU1RBTkNFKGhkYWMtPkluc3RhbmNlLCBDaGFubmVsKSk7Ci0gIAorCiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfREFDX0RJU0FCTEUoaGRhYywgQ2hhbm5lbCk7Ci0gIAorCiAgIC8qIENoYW5nZSBEQUMgc3RhdGUgKi8KICAgaGRhYy0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX1JFQURZOwotICAKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC01MzAsMzMgKzUzMCwzMyBAQAogICAqIEBicmllZiAgRGlzYWJsZXMgREFDIGFuZCBzdG9wIGNvbnZlcnNpb24gb2YgY2hhbm5lbC4KICAgKiBAcGFyYW0gIGhkYWMgcG9pbnRlciB0byBhIERBQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBEQUMuCi0gICogQHBhcmFtICBDaGFubmVsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4gCisgICogQHBhcmFtICBDaGFubmVsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8xOiBEQUMxIENoYW5uZWwxIHNlbGVjdGVkCi0gICogICAgICAgICAgICBAYXJnIERBQ19DSEFOTkVMXzI6IERBQzEgQ2hhbm5lbDIgc2VsZWN0ZWQgIAotICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8xOiBEQUMyIENoYW5uZWwxIHNlbGVjdGVkICAgIAorICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8yOiBEQUMxIENoYW5uZWwyIHNlbGVjdGVkCisgICogICAgICAgICAgICBAYXJnIERBQ19DSEFOTkVMXzE6IERBQzIgQ2hhbm5lbDEgc2VsZWN0ZWQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfU3RvcF9ETUEoREFDX0hhbmRsZVR5cGVEZWYqIGhkYWMsIHVpbnQzMl90IENoYW5uZWwpCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKLSAgICAKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfREFDX0NIQU5ORUxfSU5TVEFOQ0UoaGRhYy0+SW5zdGFuY2UsIENoYW5uZWwpKTsKLSAgCisKICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgRE1BIHJlcXVlc3QgKi8KICAgICBoZGFjLT5JbnN0YW5jZS0+Q1IgJj0gfihEQUNfQ1JfRE1BRU4xIDw8IENoYW5uZWwpOwotICAgIAorCiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfREFDX0RJU0FCTEUoaGRhYywgQ2hhbm5lbCk7Ci0gIAorCiAgIC8qIERpc2FibGUgdGhlIERNQSBjaGFubmVsICovCiAgIC8qIENoYW5uZWwxIGlzIHVzZWQgKi8KICAgaWYgKENoYW5uZWwgPT0gREFDX0NIQU5ORUxfMSkKICAgewogICAgIC8qIERpc2FibGUgdGhlIERNQSBjaGFubmVsICovCi0gICAgc3RhdHVzID0gSEFMX0RNQV9BYm9ydChoZGFjLT5ETUFfSGFuZGxlMSk7ICAgCi0gICAgCisgICAgc3RhdHVzID0gSEFMX0RNQV9BYm9ydChoZGFjLT5ETUFfSGFuZGxlMSk7CisKICAgICAvKiBEaXNhYmxlIHRoZSBEQUMgRE1BIHVuZGVycnVuIGludGVycnVwdCAqLwogICAgIF9fSEFMX0RBQ19ESVNBQkxFX0lUKGhkYWMsIERBQ19JVF9ETUFVRFIxKTsKICAgfQpAQCAtNTY2LDI1ICs1NjYsMjUgQEAKICAgZWxzZSAvKiBDaGFubmVsMiBpcyB1c2VkICovCiAgIHsKICAgICAvKiBEaXNhYmxlIHRoZSBETUEgY2hhbm5lbCAqLwotICAgIHN0YXR1cyA9IEhBTF9ETUFfQWJvcnQoaGRhYy0+RE1BX0hhbmRsZTIpOyAgIAotICAgIAorICAgIHN0YXR1cyA9IEhBTF9ETUFfQWJvcnQoaGRhYy0+RE1BX0hhbmRsZTIpOworCiAgICAgLyogRGlzYWJsZSB0aGUgREFDIERNQSB1bmRlcnJ1biBpbnRlcnJ1cHQgKi8KICAgICBfX0hBTF9EQUNfRElTQUJMRV9JVChoZGFjLCBEQUNfSVRfRE1BVURSMik7CiAgIH0KICNlbmRpZiAvKiBEQUNfQ0hBTk5FTDJfU1VQUE9SVCAqLwotICAgIAorCiAgIC8qIENoZWNrIGlmIERNQSBDaGFubmVsIGVmZmVjdGl2ZWx5IGRpc2FibGVkICovCiAgIGlmIChzdGF0dXMgIT0gSEFMX09LKQogICB7CiAgICAgLyogVXBkYXRlIERBQyBzdGF0ZSBtYWNoaW5lIHRvIGVycm9yICovCi0gICAgaGRhYy0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX0VSUk9SOyAgICAgIAorICAgIGhkYWMtPlN0YXRlID0gSEFMX0RBQ19TVEFURV9FUlJPUjsKICAgfQogICBlbHNlCiAgIHsKICAgICAvKiBDaGFuZ2UgREFDIHN0YXRlICovCiAgICAgaGRhYy0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX1JFQURZOwogICB9Ci0gIAorCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIHN0YXR1czsKIH0KQEAgLTU5MywxMSArNTkzLDExIEBACiAgICogQGJyaWVmICBSZXR1cm5zIHRoZSBsYXN0IGRhdGEgb3V0cHV0IHZhbHVlIG9mIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4KICAgKiBAcGFyYW0gIGhkYWMgcG9pbnRlciB0byBhIERBQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBEQUMuCi0gICogQHBhcmFtICBDaGFubmVsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4gCisgICogQHBhcmFtICBDaGFubmVsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8xOiBEQUMxIENoYW5uZWwxIHNlbGVjdGVkCi0gICogICAgICAgICAgICBAYXJnIERBQ19DSEFOTkVMXzI6IERBQzEgQ2hhbm5lbDIgc2VsZWN0ZWQgIAotICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8xOiBEQUMyIENoYW5uZWwxIHNlbGVjdGVkIAorICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8yOiBEQUMxIENoYW5uZWwyIHNlbGVjdGVkCisgICogICAgICAgICAgICBAYXJnIERBQ19DSEFOTkVMXzE6IERBQzIgQ2hhbm5lbDEgc2VsZWN0ZWQKICAgKiBAcmV0dmFsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbCBkYXRhIG91dHB1dCB2YWx1ZS4KICAgKi8KIF9fd2VhayB1aW50MzJfdCBIQUxfREFDX0dldFZhbHVlKERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjLCB1aW50MzJfdCBDaGFubmVsKQpAQCAtNjM0LDIxICs2MzQsMjEgQEAKIC8qKgogICAqIEB9CiAgICovCi0gIAorCiAvKiogQGRlZmdyb3VwIERBQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICAgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAKKyAqICBAYnJpZWYgICAgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucwogICoKLUB2ZXJiYXRpbSAgIAorQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICMjIyMjIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMgIyMjIyMKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXSAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0bzoKLSAgICAgICgrKSBDb25maWd1cmUgY2hhbm5lbHMuIAorICAgICAgKCspIENvbmZpZ3VyZSBjaGFubmVscy4KICAgICAgICgrKSBDb25maWd1cmUgVHJpYW5nbGUgd2F2ZSBnZW5lcmF0aW9uLgogICAgICAgKCspIENvbmZpZ3VyZSBOb2lzZSB3YXZlIGdlbmVyYXRpb24uCiAgICAgICAoKykgU2V0IHRoZSBzcGVjaWZpZWQgZGF0YSBob2xkaW5nIHJlZ2lzdGVyIHZhbHVlIGZvciBEQUMgY2hhbm5lbC4KICAgICAgICgrKSBTZXQgdGhlIHNwZWNpZmllZCBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIgdmFsdWUgZm9yIER1YWwgREFDIGNoYW5uZWxzLgotICAgICAgCisKIEBlbmR2ZXJiYXRpbQogICAqIEB7CiAgICovCkBAIC02NTgsMTEgKzY1OCwxMSBAQAogICAqIEBwYXJhbSAgaGRhYyBwb2ludGVyIHRvIGEgREFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERBQy4KICAgKiBAcGFyYW0gIHNDb25maWcgREFDIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgotICAqIEBwYXJhbSAgQ2hhbm5lbCBUaGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwuIAorICAqIEBwYXJhbSAgQ2hhbm5lbCBUaGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwuCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgREFDX0NIQU5ORUxfMTogREFDMSBDaGFubmVsMSBzZWxlY3RlZAotICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8yOiBEQUMxIENoYW5uZWwyIHNlbGVjdGVkICAKLSAgKiAgICAgICAgICAgIEBhcmcgREFDX0NIQU5ORUxfMTogREFDMiBDaGFubmVsMSBzZWxlY3RlZCAKKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0NIQU5ORUxfMjogREFDMSBDaGFubmVsMiBzZWxlY3RlZAorICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8xOiBEQUMyIENoYW5uZWwxIHNlbGVjdGVkCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiAKQEAgLTY3OCw3ICs2NzgsNyBAQAogfQogCiBfX3dlYWsgSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19TZXRWYWx1ZShEQUNfSGFuZGxlVHlwZURlZiogaGRhYywgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgQWxpZ25tZW50LCB1aW50MzJfdCBEYXRhKQoteyAKK3sKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaGRhYyk7CiAgIFVOVVNFRChDaGFubmVsKTsKQEAgLTY5Myw3ICs2OTMsNyBAQAogfQogCiBfX3dlYWsgSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ0V4X0R1YWxTZXRWYWx1ZShEQUNfSGFuZGxlVHlwZURlZiogaGRhYywgdWludDMyX3QgQWxpZ25tZW50LCB1aW50MzJfdCBEYXRhMSwgdWludDMyX3QgRGF0YTIpCi17IAorewogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChoZGFjKTsKICAgVU5VU0VEKEFsaWdubWVudCk7CkBAIC03MTIsMTggKzcxMiwxOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIERBQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA0IFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9yIGZ1bmN0aW9ucwotICogIEBicmllZiAgIERBQyBQZXJpcGhlcmFsIFN0YXRlIGFuZCBFcnJvciBmdW5jdGlvbnMgCisgKiAgQGJyaWVmICAgREFDIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9yIGZ1bmN0aW9ucwogICoKLUB2ZXJiYXRpbSAgIAorQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgIyMjIyMgREFDIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9yIGZ1bmN0aW9ucyAjIyMjIwotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIAorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBbLi5dCiAgICAgVGhpcyBzdWJzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0bwogICAgICAgKCspIENoZWNrIHRoZSBEQUMgc3RhdGUuCiAgICAgICAoKykgQ2hlY2sgdGhlIERBQyBFcnJvcnMuCiAKLSAgICAgICAgCisKIEBlbmR2ZXJiYXRpbQogICAqIEB7CiAgICovCkBAIC03NjAsNyArNzYwLDcgQEAKICAgKi8KIAogLyoqCi0gICogQGJyaWVmICBDb252ZXJzaW9uIGNvbXBsZXRlIGNhbGxiYWNrIGluIG5vbiBibG9ja2luZyBtb2RlIGZvciBDaGFubmVsMSAKKyAgKiBAYnJpZWYgIENvbnZlcnNpb24gY29tcGxldGUgY2FsbGJhY2sgaW4gbm9uIGJsb2NraW5nIG1vZGUgZm9yIENoYW5uZWwxCiAgICogQHBhcmFtICBoZGFjIHBvaW50ZXIgdG8gYSBEQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgREFDLgogICAqIEByZXR2YWwgTm9uZQpAQCAtNzc2LDcgKzc3Niw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgQ29udmVyc2lvbiBoYWxmIERNQSB0cmFuc2ZlciBjYWxsYmFjayBpbiBub24gYmxvY2tpbmcgbW9kZSBmb3IgQ2hhbm5lbDEgCisgICogQGJyaWVmICBDb252ZXJzaW9uIGhhbGYgRE1BIHRyYW5zZmVyIGNhbGxiYWNrIGluIG5vbiBibG9ja2luZyBtb2RlIGZvciBDaGFubmVsMQogICAqIEBwYXJhbSAgaGRhYyBwb2ludGVyIHRvIGEgREFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERBQy4KICAgKiBAcmV0dmFsIE5vbmUKQEAgLTgzNSw3ICs4MzUsNyBAQAogI2lmIChVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKIC8qKgogICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIERBQyBDYWxsYmFjawotICAqICAgICAgICAgVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB3ZWFrIChzdXJjaGFyZ2VkKSBwcmVkZWZpbmVkIGNhbGxiYWNrIAorICAqICAgICAgICAgVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB3ZWFrIChvdmVycmlkZGVuKSBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtIGhkYWMgOiBEQUMgaGFuZGxlCiAgICogQHBhcmFtIENhbGxiYWNrSWQgOiBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgcmVnaXN0ZXJlZAogICAqICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtODQ0LDEyICs4NDQsMTIgQEAKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDFfSEFMRl9DT01QTEVURV9DQl9JRCAgREFDIENIMSBIYWxmIENvbXBsZXRlIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQ0gxX0VSUk9SX0lEICAgICAgICAgICAgIERBQyBDSDEgRXJyb3IgQ2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDFfVU5ERVJSVU5fQ0JfSUQgICAgICAgREFDIENIMSBVbmRlclJ1biBDYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfREFDX0NIMl9DT01QTEVURV9DQl9JRCAgICAgICBEQUMgQ0gyIENvbXBsZXRlIENhbGxiYWNrIElEICAgICAgCi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQ0gyX0hBTEZfQ09NUExFVEVfQ0JfSUQgIERBQyBDSDIgSGFsZiBDb21wbGV0ZSBDYWxsYmFjayBJRCAKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDJfRVJST1JfSUQgICAgICAgICAgICAgREFDIENIMiBFcnJvciBDYWxsYmFjayBJRCAgICAgICAgIAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfREFDX0NIMl9VTkRFUlJVTl9DQl9JRCAgICAgICBEQUMgQ0gyIFVuZGVyUnVuIENhbGxiYWNrIElEICAgICAgICAgCi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfTVNQX0lOSVRfQ0JfSUQgICAgICAgICAgIERBQyBNU1AgSW5pdCBDYWxsYmFjayBJRCAgICAgICAgCi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfTVNQX0RFSU5JVF9DQl9JRCAgICAgICAgIERBQyBNU1AgRGVJbml0IENhbGxiYWNrIElEICAgCisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQ0gyX0NPTVBMRVRFX0NCX0lEICAgICAgIERBQyBDSDIgQ29tcGxldGUgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDJfSEFMRl9DT01QTEVURV9DQl9JRCAgREFDIENIMiBIYWxmIENvbXBsZXRlIENhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQ0gyX0VSUk9SX0lEICAgICAgICAgICAgIERBQyBDSDIgRXJyb3IgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDJfVU5ERVJSVU5fQ0JfSUQgICAgICAgREFDIENIMiBVbmRlclJ1biBDYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfREFDX01TUF9JTklUX0NCX0lEICAgICAgICAgICBEQUMgTVNQIEluaXQgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19NU1BfREVJTklUX0NCX0lEICAgICAgICAgREFDIE1TUCBEZUluaXQgQ2FsbGJhY2sgSUQKICAgKgogICAgICogQHBhcmFtIHBDYWxsYmFjayA6IHBvaW50ZXIgdG8gdGhlIENhbGxiYWNrIGZ1bmN0aW9uCiAgICogQHJldHZhbCBzdGF0dXMKQEAgLTg2Nyw3ICs4NjcsNyBAQAogCiAgIC8qIFByb2Nlc3MgbG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaGRhYyk7Ci0gIAorCiAgIGlmKGhkYWMtPlN0YXRlID09IEhBTF9EQUNfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSWQpCkBAIC05MDQsNyArOTA0LDcgQEAKICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQgOgogICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgICBoZGFjLT5FcnJvckNvZGUgfD0gSEFMX0RBQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOyAKKyAgICAgIGhkYWMtPkVycm9yQ29kZSB8PSBIQUxfREFDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CiAgICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLwogICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwpAQCAtOTIyLDcgKzkyMiw3IEBACiAgICAgICBicmVhazsKICAgICBkZWZhdWx0IDoKICAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgICAgaGRhYy0+RXJyb3JDb2RlIHw9IEhBTF9EQUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsgCisgICAgICBoZGFjLT5FcnJvckNvZGUgfD0gSEFMX0RBQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOwogICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgICAgICBicmVhazsKQEAgLTkzMSw3ICs5MzEsNyBAQAogICBlbHNlCiAgIHsKICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICBoZGFjLT5FcnJvckNvZGUgfD0gSEFMX0RBQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOyAKKyAgICBoZGFjLT5FcnJvckNvZGUgfD0gSEFMX0RBQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOwogICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQpAQCAtOTQzLDIwICs5NDMsMjAgQEAKIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGEgVXNlciBEQUMgQ2FsbGJhY2sKLSAgKiAgICAgICAgIERBQyBDYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIChzdXJjaGFyZ2VkKSBwcmVkZWZpbmVkIGNhbGxiYWNrIAorICAqICAgICAgICAgREFDIENhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgKG92ZXJyaWRkZW4pIHByZWRlZmluZWQgY2FsbGJhY2sKICAgKiBAcGFyYW0gaGRhYyA6IERBQyBoYW5kbGUKICAgKiBAcGFyYW0gQ2FsbGJhY2tJZCA6IElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKICAgKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDFfQ09NUExFVEVfQ0JfSUQgICAgICAgICAgREFDIENIMSB0cmFuZmVyIENvbXBsZXRlIENhbGxiYWNrIElEICAgICAKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDFfSEFMRl9DT01QTEVURV9DQl9JRCAgICAgREFDIENIMSBIYWxmIENvbXBsZXRlIENhbGxiYWNrIElEICAgICAgICAKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDFfRVJST1JfSUQgICAgICAgICAgICAgICAgREFDIENIMSBFcnJvciBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RNQV9DSDFfVU5ERVJSVU5fQ0JfSUQgICAgICAgICAgREFDIENIMSBVbmRlclJ1biBDYWxsYmFjayBJRCAgICAgICAgICAgICAKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDJfQ09NUExFVEVfQ0JfSUQgICAgICAgICAgREFDIENIMiBDb21wbGV0ZSBDYWxsYmFjayBJRCAgICAgICAgICAgICAKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDJfSEFMRl9DT01QTEVURV9DQl9JRCAgICAgREFDIENIMiBIYWxmIENvbXBsZXRlIENhbGxiYWNrIElEICAgICAgICAKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDJfRVJST1JfSUQgICAgICAgICAgICAgICAgREFDIENIMiBFcnJvciBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RNQV9DSDJfVU5ERVJSVU5fQ0JfSUQgICAgICAgICAgREFDIENIMiBVbmRlclJ1biBDYWxsYmFjayBJRCAgICAgICAgICAgICAKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19NU1BfSU5JVF9DQl9JRCAgICAgICAgICAgICAgREFDIE1TUCBJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19NU1BfREVJTklUX0NCX0lEICAgICAgICAgICAgREFDIE1TUCBEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDFfQ09NUExFVEVfQ0JfSUQgICAgICAgICAgREFDIENIMSB0cmFuc2ZlciBDb21wbGV0ZSBDYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfREFDX0NIMV9IQUxGX0NPTVBMRVRFX0NCX0lEICAgICBEQUMgQ0gxIEhhbGYgQ29tcGxldGUgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDFfRVJST1JfSUQgICAgICAgICAgICAgICAgREFDIENIMSBFcnJvciBDYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRE1BX0NIMV9VTkRFUlJVTl9DQl9JRCAgICAgICAgICBEQUMgQ0gxIFVuZGVyUnVuIENhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQ0gyX0NPTVBMRVRFX0NCX0lEICAgICAgICAgIERBQyBDSDIgQ29tcGxldGUgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDJfSEFMRl9DT01QTEVURV9DQl9JRCAgICAgREFDIENIMiBIYWxmIENvbXBsZXRlIENhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQ0gyX0VSUk9SX0lEICAgICAgICAgICAgICAgIERBQyBDSDIgRXJyb3IgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RNQV9DSDJfVU5ERVJSVU5fQ0JfSUQgICAgICAgICAgREFDIENIMiBVbmRlclJ1biBDYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfREFDX01TUF9JTklUX0NCX0lEICAgICAgICAgICAgICBEQUMgTVNQIEluaXQgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19NU1BfREVJTklUX0NCX0lEICAgICAgICAgICAgREFDIE1TUCBEZUluaXQgQ2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19BTExfQ0JfSUQgICAgICAgICAgICAgICAgICAgREFDIEFsbCBjYWxsYmFja3MKICAgKiBAcmV0dmFsIHN0YXR1cwogICAqLwpAQCAtOTY2LDcgKzk2Niw3IEBACiAKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhoZGFjKTsKLSAgCisKICAgaWYoaGRhYy0+U3RhdGUgPT0gSEFMX0RBQ19TVEFURV9SRUFEWSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJZCkKQEAgLTEwMTksNyArMTAxOSw3IEBACiAgICAgICBicmVhazsKICAgICBkZWZhdWx0IDoKICAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgICAgaGRhYy0+RXJyb3JDb2RlIHw9IEhBTF9EQUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsgCisgICAgICBoZGFjLT5FcnJvckNvZGUgfD0gSEFMX0RBQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOwogICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgICAgICBicmVhazsKQEAgLTEwMzcsNyArMTAzNyw3IEBACiAgICAgICBicmVhazsKICAgICBkZWZhdWx0IDoKICAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgICAgaGRhYy0+RXJyb3JDb2RlIHw9IEhBTF9EQUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsgCisgICAgICBoZGFjLT5FcnJvckNvZGUgfD0gSEFMX0RBQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOwogICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgICAgICBicmVhazsKQEAgLTEwNDYsNyArMTA0Niw3IEBACiAgIGVsc2UKICAgewogICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgIGhkYWMtPkVycm9yQ29kZSB8PSBIQUxfREFDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7IAorICAgIGhkYWMtPkVycm9yQ29kZSB8PSBIQUxfREFDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CiAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CkBAIC0xMDY2LDMgKzEwNjYsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfZGFjX2V4LmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9kYWNfZXguYwppbmRleCA2MWVjOWFkLi4xMWIxMDBlIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9kYWNfZXguYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF9kYWNfZXguYwpAQCAtNiw2ICs2LDcgQEAKICAgKiAgICAgICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZXh0ZW5kZWQgCiAgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBEQUMgcGVyaXBoZXJhbC4gIAogICAqICAgICAKKyAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTI4LDcgKzI5LDcgQEAKICAgICAgICgrKSBVc2UgSEFMX0RBQ0V4X1RyaWFuZ2xlV2F2ZUdlbmVyYXRlKCkgdG8gZ2VuZXJhdGUgVHJpYW5nbGUgc2lnbmFsLgogICAgICAgKCspIFVzZSBIQUxfREFDRXhfTm9pc2VXYXZlR2VuZXJhdGUoKSB0byBnZW5lcmF0ZSBOb2lzZSBzaWduYWwuCiAKLSAgQGVuZHZlcmJhdGltICAgIAorIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIApAQCAtMTE1NywzICsxMTU4LDQgQEAKIC8qKgogICAqIEB9CiAgICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYzeHhfaGFsX2RtYS5jIGIvU3JjL3N0bTMyZjN4eF9oYWxfZG1hLmMKaW5kZXggZGNkN2ZiNi4uMjUyZDFkZiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9oYWxfZG1hLmMKKysrIGIvU3JjL3N0bTMyZjN4eF9oYWxfZG1hLmMKQEAgLTksMTggKzksNiBAQAogICAqICAgICAgICAgICArIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBJTyBvcGVyYXRpb24gZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBTdGF0ZSBhbmQgZXJyb3JzIGZ1bmN0aW9ucwotICAqCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqIEBhdHRlbnRpb24KLSAgKgotICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCi0gICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KLSAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KLSAgKgotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgQHZlcmJhdGltICAgICAKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCkBAIC03Myw3ICs2MSwxNyBAQAogCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKi8KKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICovIAogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2luY2x1ZGUgInN0bTMyZjN4eF9oYWwuaCIKQEAgLTY1Myw3ICs2NTEsNyBAQAogICAqIEBicmllZiAgUmVnaXN0ZXIgY2FsbGJhY2tzCiAgICogQHBhcmFtICBoZG1hICAgICAgICAgICAgICAgICBwb2ludGVyIHRvIGEgRE1BX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBETUEgU3RyZWFtLgotICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCAgICAgICAgICAgVXNlciBDYWxsYmFjayBpZGVudGlmZXIKKyAgKiBAcGFyYW0gIENhbGxiYWNrSUQgICAgICAgICAgIFVzZXIgQ2FsbGJhY2sgaWRlbnRpZmllcgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgSEFMX0RNQV9DYWxsYmFja0lEVHlwZURlZiBFTlVNIGFzIHBhcmFtZXRlci4KICAgKiBAcGFyYW0gIHBDYWxsYmFjayAgICAgICAgICAgIHBvaW50ZXIgdG8gcHJpdmF0ZSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBoYXMgcG9pbnRlciB0byAKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIERNQV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSBhcyBwYXJhbWV0ZXIuCkBAIC03MDYsNyArNzA0LDcgQEAKICAgKiBAYnJpZWYgIFVuUmVnaXN0ZXIgY2FsbGJhY2tzCiAgICogQHBhcmFtICBoZG1hICAgICAgICAgICAgICAgICBwb2ludGVyIHRvIGEgRE1BX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBETUEgU3RyZWFtLgotICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCAgICAgICAgICAgVXNlciBDYWxsYmFjayBpZGVudGlmZXIKKyAgKiBAcGFyYW0gIENhbGxiYWNrSUQgICAgICAgICAgIFVzZXIgQ2FsbGJhY2sgaWRlbnRpZmllcgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgSEFMX0RNQV9DYWxsYmFja0lEVHlwZURlZiBFTlVNIGFzIHBhcmFtZXRlci4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8gICAgICAgICAgICAgIApAQCAtODk3LDMgKzg5NSw0IEBACiAgIC8qKgogICAqIEB9CiAgICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYzeHhfaGFsX2V4dGkuYyBiL1NyYy9zdG0zMmYzeHhfaGFsX2V4dGkuYwppbmRleCAwOTM0NDdkLi5iZjc5MmE1IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9leHRpLmMKKysrIGIvU3JjL3N0bTMyZjN4eF9oYWxfZXh0aS5jCkBAIC04MCw3ICs4MCw2IEBACiAgICAgKCMpIEdlbmVyYXRlIHNvZnR3YXJlIGludGVycnVwdCB1c2luZyBIQUxfRVhUSV9HZW5lcmF0ZVNXSSgpLgogCiAgIEBlbmR2ZXJiYXRpbQotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTM0Myw3ICszNDIsNyBAQAogICAgICAgYXNzZXJ0X3BhcmFtKElTX0VYVElfR1BJT19QSU4obGluZXBvcykpOwogCiAgICAgICByZWd2YWwgPSBTWVNDRkctPkVYVElDUltsaW5lcG9zID4+IDJ1XTsKLSAgICAgIHBFeHRpQ29uZmlnLT5HUElPU2VsID0gKChyZWd2YWwgPDwgKFNZU0NGR19FWFRJQ1IxX0VYVEkxX1BvcyAqICgzdUwgLSAobGluZXBvcyAmIDB4MDN1KSkpKSA+PiAyNCk7CisgICAgICBwRXh0aUNvbmZpZy0+R1BJT1NlbCA9IChyZWd2YWwgPj4gKFNZU0NGR19FWFRJQ1IxX0VYVEkxX1BvcyAqIChsaW5lcG9zICYgMHgwM3UpKSkgJiBTWVNDRkdfRVhUSUNSMV9FWFRJMDsKICAgICB9CiAgIH0KIApAQCAtNjE3LDMgKzYxNiw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF9mbGFzaC5jIGIvU3JjL3N0bTMyZjN4eF9oYWxfZmxhc2guYwppbmRleCA1Zjg5NDIxLi45ZmMyMWVlIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9mbGFzaC5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX2ZsYXNoLmMKQEAgLTksMTcgKzksNiBAQAogICAqICAgICAgICAgICArIE1lbW9yeSBDb250cm9sIGZ1bmN0aW9ucyAKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucwogICAqICAgICAgICAgCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqIEBhdHRlbnRpb24KLSAgKgotICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCi0gICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KLSAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KLSAgKgotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgRkxBU0ggcGVyaXBoZXJhbCBmZWF0dXJlcyAjIyMjIwpAQCAtNzksNiArNjgsMTUgQEAKICAgICAgICAgICAKICAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBhdHRlbnRpb24KKyAgKgorICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgKgorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbgorICAqIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC02OTEsMyArNjg5LDQgQEAKIC8qKgogICAqIEB9CiAgICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYzeHhfaGFsX2ZsYXNoX2V4LmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9mbGFzaF9leC5jCmluZGV4IGQzMjcxYzMuLjkyMjJjZWEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfaGFsX2ZsYXNoX2V4LmMKKysrIGIvU3JjL3N0bTMyZjN4eF9oYWxfZmxhc2hfZXguYwpAQCAtMTAsMTcgKzEwLDYgQEAKICAgKiAgICAgICAgICAgKyBFeHRlbmRlZCBJL08gb3BlcmF0aW9uIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIEV4dGVuZGVkIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMgCiAgICogICAgICAgICAKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICogQGF0dGVudGlvbgotICAqCi0gICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KLSAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgotICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAjIyMjIyBGbGFzaCBwZXJpcGhlcmFsIGV4dGVuZGVkIGZlYXR1cmVzICAjIyMjIwpAQCAtMzcsNiArMjYsMTUgQEAKICAgCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtOTc5LDMgKzk3Nyw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF9ncGlvLmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9ncGlvLmMKaW5kZXggNjNhMGQwNi4uYzU2Y2VlNyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9oYWxfZ3Bpby5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX2dwaW8uYwpAQCAtMjUxLDIzICsyNTEsNiBAQAogICAgICAgICB0ZW1wIHw9IChHUElPX0dFVF9JTkRFWChHUElPeCkgPDwgKDR1ICogKHBvc2l0aW9uICYgMHgwM3UpKSk7CiAgICAgICAgIFNZU0NGRy0+RVhUSUNSW3Bvc2l0aW9uID4+IDJ1XSA9IHRlbXA7CiAKLSAgICAgICAgLyogQ2xlYXIgRVhUSSBsaW5lIGNvbmZpZ3VyYXRpb24gKi8KLSAgICAgICAgdGVtcCA9IEVYVEktPklNUjsKLSAgICAgICAgdGVtcCAmPSB+KGlvY3VycmVudCk7Ci0gICAgICAgIGlmKChHUElPX0luaXQtPk1vZGUgJiBFWFRJX0lUKSAhPSAweDAwdSkKLSAgICAgICAgewotICAgICAgICAgIHRlbXAgfD0gaW9jdXJyZW50OwotICAgICAgICB9Ci0gICAgICAgIEVYVEktPklNUiA9IHRlbXA7Ci0KLSAgICAgICAgdGVtcCA9IEVYVEktPkVNUjsKLSAgICAgICAgdGVtcCAmPSB+KGlvY3VycmVudCk7Ci0gICAgICAgIGlmKChHUElPX0luaXQtPk1vZGUgJiBFWFRJX0VWVCkgIT0gMHgwMHUpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZW1wIHw9IGlvY3VycmVudDsKLSAgICAgICAgfQotICAgICAgICBFWFRJLT5FTVIgPSB0ZW1wOwotCiAgICAgICAgIC8qIENsZWFyIFJpc2luZyBGYWxsaW5nIGVkZ2UgY29uZmlndXJhdGlvbiAqLwogICAgICAgICB0ZW1wID0gRVhUSS0+UlRTUjsKICAgICAgICAgdGVtcCAmPSB+KGlvY3VycmVudCk7CkBAIC0yODQsNiArMjY3LDIzIEBACiAgICAgICAgICAgdGVtcCB8PSBpb2N1cnJlbnQ7CiAgICAgICAgIH0KICAgICAgICAgRVhUSS0+RlRTUiA9IHRlbXA7CisKKyAgICAgICAgdGVtcCA9IEVYVEktPkVNUjsKKyAgICAgICAgdGVtcCAmPSB+KGlvY3VycmVudCk7CisgICAgICAgIGlmKChHUElPX0luaXQtPk1vZGUgJiBFWFRJX0VWVCkgIT0gMHgwMHUpCisgICAgICAgIHsKKyAgICAgICAgICB0ZW1wIHw9IGlvY3VycmVudDsKKyAgICAgICAgfQorICAgICAgICBFWFRJLT5FTVIgPSB0ZW1wOworCisgICAgICAgIC8qIENsZWFyIEVYVEkgbGluZSBjb25maWd1cmF0aW9uICovCisgICAgICAgIHRlbXAgPSBFWFRJLT5JTVI7CisgICAgICAgIHRlbXAgJj0gfihpb2N1cnJlbnQpOworICAgICAgICBpZigoR1BJT19Jbml0LT5Nb2RlICYgRVhUSV9JVCkgIT0gMHgwMHUpCisgICAgICAgIHsKKyAgICAgICAgICB0ZW1wIHw9IGlvY3VycmVudDsKKyAgICAgICAgfQorICAgICAgICBFWFRJLT5JTVIgPSB0ZW1wOwogICAgICAgfQogICAgIH0KIApAQCAtMzI4LDggKzMyOCw4IEBACiAgICAgICAgIEVYVEktPkVNUiAmPSB+KCh1aW50MzJfdClpb2N1cnJlbnQpOwogICAgICAgICAKICAgICAgICAgLyogQ2xlYXIgUmlzaW5nIEZhbGxpbmcgZWRnZSBjb25maWd1cmF0aW9uICovCi0gICAgICAgIEVYVEktPlJUU1IgJj0gfigodWludDMyX3QpaW9jdXJyZW50KTsKICAgICAgICAgRVhUSS0+RlRTUiAmPSB+KCh1aW50MzJfdClpb2N1cnJlbnQpOworICAgICAgICBFWFRJLT5SVFNSICY9IH4oKHVpbnQzMl90KWlvY3VycmVudCk7CiAKICAgICAgICAgLyogQ29uZmlndXJlIHRoZSBFeHRlcm5hbCBJbnRlcnJ1cHQgb3IgZXZlbnQgZm9yIHRoZSBjdXJyZW50IElPICovCiAgICAgICAgIHRtcCA9IDB4MEZ1TCA8PCAoNHUgKiAocG9zaXRpb24gJiAweDAzdSkpOwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19HUElPX1BJTihHUElPX1BpbikpOwogCi0gIC8qIGdldCBjdXJyZW50IE91cHV0IERhdGEgUmVnaXN0ZXIgdmFsdWUgKi8KKyAgLyogZ2V0IGN1cnJlbnQgT3V0cHV0IERhdGEgUmVnaXN0ZXIgdmFsdWUgKi8KICAgb2RyID0gR1BJT3gtPk9EUjsKIAogICAvKiBTZXQgc2VsZWN0ZWQgcGlucyB0aGF0IHdlcmUgYXQgbG93IGxldmVsLCBhbmQgcmVzZXQgb25lcyB0aGF0IHdlcmUgaGlnaCAqLwpAQCAtNTM4LDMgKzUzOCw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF9ocnRpbS5jIGIvU3JjL3N0bTMyZjN4eF9oYWxfaHJ0aW0uYwppbmRleCA0N2E3ODFiLi4wM2I2MTNkIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9ocnRpbS5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX2hydGltLmMKQEAgLTgzLDYgKzgzLDggQEAKICAgICAgICBvcGVyYXRlcyBpbiB3YXZlZm9ybSBtb2RlLCBhbGwgdGhlIEhSVElNIGZlYXR1cmVzIGFyZSBhY2Nlc3NpYmxlIHdpdGhvdXQKICAgICAgICBhbnkgcmVzdHJpY3Rpb24uIEhSVElNIHdhdmVmb3JtIG1vZGVzIGFyZSBtYW5hZ2VkIHRocm91Z2ggdGhlIHNldCBvZgogICAgICAgIGZ1bmN0aW9ucyBuYW1lZCBIQUxfSFJUSU1fV2F2ZWZvcm08RnVuY3Rpb24+CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEhvdyB0byB1c2UgdGhpcyBkcml2ZXIgIyMjIyMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0KQEAgLTE3NzMsMTEgKzE3NzUsMTEgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0hSVElNX1RJTUVSX09VVFBVVChUaW1lcklkeCwgT0NDaGFubmVsKSk7CiAKLSAgaWYoKGhocnRpbS0+U3RhdGUgPT0gSEFMX0hSVElNX1NUQVRFX0JVU1kpKQorICBpZihoaHJ0aW0tPlN0YXRlID09IEhBTF9IUlRJTV9TVEFURV9CVVNZKQogICB7CiAgICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBpZigoaGhydGltLT5TdGF0ZSA9PSBIQUxfSFJUSU1fU1RBVEVfUkVBRFkpKQorICBpZihoaHJ0aW0tPlN0YXRlID09IEhBTF9IUlRJTV9TVEFURV9SRUFEWSkKICAgewogICAgIGlmKChTcmNBZGRyID09IDBVICkgfHwgKERlc3RBZGRyID09IDBVICkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgewpAQCAtMjM5MCwxMSArMjM5MiwxMSBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfSFJUSU1fVElNRVJfT1VUUFVUKFRpbWVySWR4LCBQV01DaGFubmVsKSk7CiAKLSAgaWYoKGhocnRpbS0+U3RhdGUgPT0gSEFMX0hSVElNX1NUQVRFX0JVU1kpKQorICBpZihoaHJ0aW0tPlN0YXRlID09IEhBTF9IUlRJTV9TVEFURV9CVVNZKQogICB7CiAgICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBpZigoaGhydGltLT5TdGF0ZSA9PSBIQUxfSFJUSU1fU1RBVEVfUkVBRFkpKQorICBpZihoaHJ0aW0tPlN0YXRlID09IEhBTF9IUlRJTV9TVEFURV9SRUFEWSkKICAgewogICAgIGlmKChTcmNBZGRyID09IDBVICkgfHwgKERlc3RBZGRyID09IDBVICkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgewpAQCAtNTQ4NCw3ICs1NDg2LDcgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0hSVElNX1RJTUVSSUQoVGltZXJzKSk7CiAKLSAgaWYoKGhocnRpbS0+U3RhdGUgPT0gSEFMX0hSVElNX1NUQVRFX0JVU1kpKQorICBpZihoaHJ0aW0tPlN0YXRlID09IEhBTF9IUlRJTV9TVEFURV9CVVNZKQogICB7CiAgICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQpAQCAtNTkxOSwxMSArNTkyMSwxMSBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfSFJUSU1fVElNRVJJTkRFWChUaW1lcklkeCkpOwogCi0gIGlmKChoaHJ0aW0tPlN0YXRlID09IEhBTF9IUlRJTV9TVEFURV9CVVNZKSkKKyAgaWYoaGhydGltLT5TdGF0ZSA9PSBIQUxfSFJUSU1fU1RBVEVfQlVTWSkKICAgewogICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgaWYoKGhocnRpbS0+U3RhdGUgPT0gSEFMX0hSVElNX1NUQVRFX1JFQURZKSkKKyAgaWYoaGhydGltLT5TdGF0ZSA9PSBIQUxfSFJUSU1fU1RBVEVfUkVBRFkpCiAgIHsKICAgICBpZigoQnVyc3RCdWZmZXJBZGRyZXNzID09IDBVICkgfHwgKEJ1cnN0QnVmZmVyTGVuZ3RoID09IDBVKSkKICAgICB7CkBAIC02MjU2LDYgKzYyNTgsOSBAQAogICAvKiBDaGVjayBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19IUlRJTV9USU1FUl9PVVRQVVQoVGltZXJJZHgsIE91dHB1dCkpOwogCisgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KKyAgVU5VU0VEKFRpbWVySWR4KTsKKwogICAvKiBTZXQgb3V0cHV0IHN0YXRlIGFjY29yZGluZyB0byBvdXRwdXQgY29udHJvbCBzdGF0dXMgYW5kIG91dHB1dCBkaXNhYmxlIHN0YXR1cyAqLwogICBzd2l0Y2ggKE91dHB1dCkKICAgewpAQCAtODM3OSw3ICs4Mzg0LDcgQEAKICAgY2FzZSBIUlRJTV9PVVRQVVRfVEQxOgogICBjYXNlIEhSVElNX09VVFBVVF9URTE6CiAgICAgewotICAgICAgLyogUmV0cmVpdmVzIGFjdHVhbCBPQyBtb2RlIGFuZCBzZXQgaW50ZXJydXB0IGFjY29yZGluZ2x5ICovCisgICAgICAvKiBSZXRyaWV2ZXMgYWN0dWFsIE9DIG1vZGUgYW5kIHNldCBpbnRlcnJ1cHQgYWNjb3JkaW5nbHkgKi8KICAgICAgIGhydGltX3NldCA9IGhocnRpbS0+SW5zdGFuY2UtPnNUaW1lcnhSZWdzW1RpbWVySWR4XS5TRVR4MVI7CiAgICAgICBocnRpbV9yZXNldCA9IGhocnRpbS0+SW5zdGFuY2UtPnNUaW1lcnhSZWdzW1RpbWVySWR4XS5SU1R4MVI7CiAKQEAgLTg0MTQsNyArODQxOSw3IEBACiAgIGNhc2UgSFJUSU1fT1VUUFVUX1REMjoKICAgY2FzZSBIUlRJTV9PVVRQVVRfVEUyOgogICAgIHsKLSAgICAgIC8qIFJldHJlaXZlcyBhY3R1YWwgT0MgbW9kZSBhbmQgc2V0IGludGVycnVwdCBhY2NvcmRpbmdseSAqLworICAgICAgLyogUmV0cmlldmVzIGFjdHVhbCBPQyBtb2RlIGFuZCBzZXQgaW50ZXJydXB0IGFjY29yZGluZ2x5ICovCiAgICAgICBocnRpbV9zZXQgPSBoaHJ0aW0tPkluc3RhbmNlLT5zVGltZXJ4UmVnc1tUaW1lcklkeF0uU0VUeDJSOwogICAgICAgaHJ0aW1fcmVzZXQgPSBoaHJ0aW0tPkluc3RhbmNlLT5zVGltZXJ4UmVnc1tUaW1lcklkeF0uUlNUeDJSOwogCkBAIC04NDg1LDcgKzg0OTAsNyBAQAogICBjYXNlIEhSVElNX09VVFBVVF9URDE6CiAgIGNhc2UgSFJUSU1fT1VUUFVUX1RFMToKICAgICB7Ci0gICAgICAvKiBSZXRyZWl2ZXMgYWN0dWFsIE9DIG1vZGUgYW5kIHNldCBkbWFfcmVxdWVzdCBhY2NvcmRpbmdseSAqLworICAgICAgLyogUmV0cmlldmVzIGFjdHVhbCBPQyBtb2RlIGFuZCBzZXQgZG1hX3JlcXVlc3QgYWNjb3JkaW5nbHkgKi8KICAgICAgIGhydGltX3NldCA9IGhocnRpbS0+SW5zdGFuY2UtPnNUaW1lcnhSZWdzW1RpbWVySWR4XS5TRVR4MVI7CiAgICAgICBocnRpbV9yZXNldCA9IGhocnRpbS0+SW5zdGFuY2UtPnNUaW1lcnhSZWdzW1RpbWVySWR4XS5SU1R4MVI7CiAKQEAgLTg1MjAsNyArODUyNSw3IEBACiAgIGNhc2UgSFJUSU1fT1VUUFVUX1REMjoKICAgY2FzZSBIUlRJTV9PVVRQVVRfVEUyOgogICAgIHsKLSAgICAgIC8qIFJldHJlaXZlcyBhY3R1YWwgT0MgbW9kZSBhbmQgc2V0IGRtYV9yZXF1ZXN0IGFjY29yZGluZ2x5ICovCisgICAgICAvKiBSZXRyaWV2ZXMgYWN0dWFsIE9DIG1vZGUgYW5kIHNldCBkbWFfcmVxdWVzdCBhY2NvcmRpbmdseSAqLwogICAgICAgaHJ0aW1fc2V0ID0gaGhydGltLT5JbnN0YW5jZS0+c1RpbWVyeFJlZ3NbVGltZXJJZHhdLlNFVHgyUjsKICAgICAgIGhydGltX3Jlc2V0ID0gaGhydGltLT5JbnN0YW5jZS0+c1RpbWVyeFJlZ3NbVGltZXJJZHhdLlJTVHgyUjsKIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfaTJjLmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9pMmMuYwppbmRleCBjYTliNzFlLi4yYjU4MzZjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9pMmMuYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF9pMmMuYwpAQCAtMzE3LDcgKzMxNyw2IEBACiAgICAgICAgKEApIFlvdSBjYW4gcmVmZXIgdG8gdGhlIEkyQyBIQUwgZHJpdmVyIGhlYWRlciBmaWxlIGZvciBtb3JlIHVzZWZ1bCBtYWNyb3MKIAogICBAZW5kdmVyYmF0aW0KLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC00MDEsNyArNDAwLDE2IEBACiAgICogQH0KICAgKi8KIAotLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGFkZHRvZ3JvdXAgSTJDX1ByaXZhdGVfTWFjcm8KKyAgKiBAeworICAqLworLyogTWFjcm8gdG8gZ2V0IHJlbWFpbmluZyBkYXRhIHRvIHRyYW5zZmVyIG9uIERNQSBzaWRlICovCisjZGVmaW5lIEkyQ19HRVRfRE1BX1JFTUFJTl9EQVRBKF9fSEFORExFX18pICAgICBfX0hBTF9ETUFfR0VUX0NPVU5URVIoX19IQU5ETEVfXykKKy8qKgorICAqIEB9CisgICovCisKIC8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC00MTYsNiArNDI0LDcgQEAKIHN0YXRpYyB2b2lkIEkyQ19ETUFFcnJvcihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgdm9pZCBJMkNfRE1BQWJvcnQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogCisKIC8qIFByaXZhdGUgZnVuY3Rpb25zIHRvIGhhbmRsZSBJVCB0cmFuc2ZlciAqLwogc3RhdGljIHZvaWQgSTJDX0lUQWRkckNwbHQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQzMl90IElURmxhZ3MpOwogc3RhdGljIHZvaWQgSTJDX0lUTWFzdGVyU2VxQ3BsdChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYyk7CkBAIC00MzYsMTAgKzQ0NSwxNCBAQAogLyogUHJpdmF0ZSBmdW5jdGlvbnMgZm9yIEkyQyB0cmFuc2ZlciBJUlEgaGFuZGxlciAqLwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19NYXN0ZXJfSVNSX0lUKHN0cnVjdCBfX0kyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MzJfdCBJVEZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IElUU291cmNlcyk7CitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSTJDX01lbV9JU1JfSVQoc3RydWN0IF9fSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQzMl90IElURmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgSVRTb3VyY2VzKTsKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBJMkNfU2xhdmVfSVNSX0lUKHN0cnVjdCBfX0kyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MzJfdCBJVEZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgSVRTb3VyY2VzKTsKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBJMkNfTWFzdGVyX0lTUl9ETUEoc3RydWN0IF9fSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQzMl90IElURmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IElUU291cmNlcyk7CitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSTJDX01lbV9JU1JfRE1BKHN0cnVjdCBfX0kyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MzJfdCBJVEZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBJVFNvdXJjZXMpOwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19TbGF2ZV9JU1JfRE1BKHN0cnVjdCBfX0kyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MzJfdCBJVEZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IElUU291cmNlcyk7CiAKQEAgLTQ1Miw3ICs0NjUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaWNrc3RhcnQpOwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19XYWl0T25TVE9QRmxhZ1VudGlsVGltZW91dChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDMyX3QgVGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGlja3N0YXJ0KTsKLXN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBJMkNfSXNFcnJvck9jY3VycmVkKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MzJfdCBUaW1lb3V0LCB1aW50MzJfdCBUaWNrc3RhcnQpOworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19Jc0Vycm9yT2NjdXJyZWQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQzMl90IFRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaWNrc3RhcnQpOwogCiAvKiBQcml2YXRlIGZ1bmN0aW9ucyB0byBjZW50cmFsaXplIHRoZSBlbmFibGUvZGlzYWJsZSBvZiBJbnRlcnJ1cHRzICovCiBzdGF0aWMgdm9pZCBJMkNfRW5hYmxlX0lSUShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgSW50ZXJydXB0UmVxdWVzdCk7CkBAIC03MDQsNiArNzE4LDggQEAKIC8qKgogICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIEkyQyBDYWxsYmFjawogICAqICAgICAgICAgVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAbm90ZSAgIFRoZSBIQUxfSTJDX1JlZ2lzdGVyQ2FsbGJhY2soKSBtYXkgYmUgY2FsbGVkIGJlZm9yZSBIQUxfSTJDX0luaXQoKSBpbiBIQUxfSTJDX1NUQVRFX1JFU0VUCisgICogICAgICAgICB0byByZWdpc3RlciBjYWxsYmFja3MgZm9yIEhBTF9JMkNfTVNQSU5JVF9DQl9JRCBhbmQgSEFMX0kyQ19NU1BERUlOSVRfQ0JfSUQuCiAgICogQHBhcmFtICBoaTJjIFBvaW50ZXIgdG8gYSBJMkNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIEkyQy4KICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQKQEAgLTczNCw4ICs3NTAsNiBAQAogCiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhpMmMpOwogCiAgIGlmIChIQUxfSTJDX1NUQVRFX1JFQURZID09IGhpMmMtPlN0YXRlKQogICB7CkBAIC04MjQsMTQgKzgzOCwxNCBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGhpMmMpOwogICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFVucmVnaXN0ZXIgYW4gSTJDIENhbGxiYWNrCiAgICogICAgICAgICBJMkMgY2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogQG5vdGUgICBUaGUgSEFMX0kyQ19VblJlZ2lzdGVyQ2FsbGJhY2soKSBtYXkgYmUgY2FsbGVkIGJlZm9yZSBIQUxfSTJDX0luaXQoKSBpbiBIQUxfSTJDX1NUQVRFX1JFU0VUCisgICogICAgICAgICB0byB1bi1yZWdpc3RlciBjYWxsYmFja3MgZm9yIEhBTF9JMkNfTVNQSU5JVF9DQl9JRCBhbmQgSEFMX0kyQ19NU1BERUlOSVRfQ0JfSUQuCiAgICogQHBhcmFtICBoaTJjIFBvaW50ZXIgdG8gYSBJMkNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIEkyQy4KICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHVucmVnaXN0ZXJlZApAQCAtODU0LDkgKzg2OCw2IEBACiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhpMmMpOwotCiAgIGlmIChIQUxfSTJDX1NUQVRFX1JFQURZID09IGhpMmMtPlN0YXRlKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQpAQCAtOTQ0LDggKzk1NSw2IEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaGkyYyk7CiAgIHJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTk2OCw4ICs5NzcsNiBAQAogCiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhpMmMpOwogCiAgIGlmIChIQUxfSTJDX1NUQVRFX1JFQURZID09IGhpMmMtPlN0YXRlKQogICB7CkBAIC05ODQsOCArOTkxLDYgQEAKICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhoaTJjKTsKICAgcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTAwMCw5ICsxMDA1LDYgQEAKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCi0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaGkyYyk7Ci0KICAgaWYgKEhBTF9JMkNfU1RBVEVfUkVBRFkgPT0gaGkyYy0+U3RhdGUpCiAgIHsKICAgICBoaTJjLT5BZGRyQ2FsbGJhY2sgPSBIQUxfSTJDX0FkZHJDYWxsYmFjazsgLyogTGVnYWN5IHdlYWsgQWRkckNhbGxiYWNrICAqLwpAQCAtMTAxNiw4ICsxMDE4LDYgQEAKICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhoaTJjKTsKICAgcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTM4Niw2ICsxMzg2LDE5IEBACiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KIAorICAgIC8qIFByZWxvYWQgVFggZGF0YSBpZiBubyBzdHJldGNoIGVuYWJsZSAqLworICAgIGlmIChoaTJjLT5Jbml0Lk5vU3RyZXRjaE1vZGUgPT0gSTJDX05PU1RSRVRDSF9FTkFCTEUpCisgICAgeworICAgICAgLyogUHJlbG9hZCBUWCByZWdpc3RlciAqLworICAgICAgLyogV3JpdGUgZGF0YSB0byBUWERSICovCisgICAgICBoaTJjLT5JbnN0YW5jZS0+VFhEUiA9ICpoaTJjLT5wQnVmZlB0cjsKKworICAgICAgLyogSW5jcmVtZW50IEJ1ZmZlciBwb2ludGVyICovCisgICAgICBoaTJjLT5wQnVmZlB0cisrOworCisgICAgICBoaTJjLT5YZmVyQ291bnQtLTsKKyAgICB9CisKICAgICAvKiBDbGVhciBBRERSIGZsYWcgKi8KICAgICBfX0hBTF9JMkNfQ0xFQVJfRkxBRyhoaTJjLCBJMkNfRkxBR19BRERSKTsKIApAQCAtMTQzMSwyMiArMTQ0NCwyNyBAQAogICAgICAgaGkyYy0+WGZlckNvdW50LS07CiAgICAgfQogCisgICAgLyogV2FpdCB1bnRpbCBBRiBmbGFnIGlzIHNldCAqLworICAgIGlmIChJMkNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChoaTJjLCBJMkNfRkxBR19BRiwgUkVTRVQsIFRpbWVvdXQsIHRpY2tzdGFydCkgIT0gSEFMX09LKQorICAgIHsKKyAgICAgIC8qIERpc2FibGUgQWRkcmVzcyBBY2tub3dsZWRnZSAqLworICAgICAgaGkyYy0+SW5zdGFuY2UtPkNSMiB8PSBJMkNfQ1IyX05BQ0s7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKworICAgIC8qIEZsdXNoIFRYIHJlZ2lzdGVyICovCisgICAgSTJDX0ZsdXNoX1RYRFIoaGkyYyk7CisKKyAgICAvKiBDbGVhciBBRiBmbGFnICovCisgICAgX19IQUxfSTJDX0NMRUFSX0ZMQUcoaGkyYywgSTJDX0ZMQUdfQUYpOworCiAgICAgLyogV2FpdCB1bnRpbCBTVE9QIGZsYWcgaXMgc2V0ICovCiAgICAgaWYgKEkyQ19XYWl0T25TVE9QRmxhZ1VudGlsVGltZW91dChoaTJjLCBUaW1lb3V0LCB0aWNrc3RhcnQpICE9IEhBTF9PSykKICAgICB7CiAgICAgICAvKiBEaXNhYmxlIEFkZHJlc3MgQWNrbm93bGVkZ2UgKi8KICAgICAgIGhpMmMtPkluc3RhbmNlLT5DUjIgfD0gSTJDX0NSMl9OQUNLOwogCi0gICAgICBpZiAoaGkyYy0+RXJyb3JDb2RlID09IEhBTF9JMkNfRVJST1JfQUYpCi0gICAgICB7Ci0gICAgICAgIC8qIE5vcm1hbCB1c2UgY2FzZSBmb3IgVHJhbnNtaXR0ZXIgbW9kZSAqLwotICAgICAgICAvKiBBIE5BQ0sgaXMgZ2VuZXJhdGVkIHRvIGNvbmZpcm0gdGhlIGVuZCBvZiB0cmFuc2ZlciAqLwotICAgICAgICBoaTJjLT5FcnJvckNvZGUgPSBIQUxfSTJDX0VSUk9SX05PTkU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBIQUxfRVJST1I7Ci0gICAgICB9CisgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KIAogICAgIC8qIENsZWFyIFNUT1AgZmxhZyAqLwpAQCAtMTUxMSw2ICsxNTI5LDcgQEAKICAgICAvKiBQcmVwYXJlIHRyYW5zZmVyIHBhcmFtZXRlcnMgKi8KICAgICBoaTJjLT5wQnVmZlB0ciAgPSBwRGF0YTsKICAgICBoaTJjLT5YZmVyQ291bnQgPSBTaXplOworICAgIGhpMmMtPlhmZXJTaXplID0gaGkyYy0+WGZlckNvdW50OwogICAgIGhpMmMtPlhmZXJJU1IgICA9IE5VTEw7CiAKICAgICAvKiBFbmFibGUgQWRkcmVzcyBBY2tub3dsZWRnZSAqLwpAQCAtMTU1Myw2ICsxNTcyLDcgQEAKICAgICAgICAgICBoaTJjLT5wQnVmZlB0cisrOwogCiAgICAgICAgICAgaGkyYy0+WGZlckNvdW50LS07CisgICAgICAgICAgaGkyYy0+WGZlclNpemUtLTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0xNTY1LDYgKzE1ODUsNyBAQAogICAgICAgaGkyYy0+cEJ1ZmZQdHIrKzsKIAogICAgICAgaGkyYy0+WGZlckNvdW50LS07CisgICAgICBoaTJjLT5YZmVyU2l6ZS0tOwogICAgIH0KIAogICAgIC8qIFdhaXQgdW50aWwgU1RPUCBmbGFnIGlzIHNldCAqLwpAQCAtMTc3NCw2ICsxNzk1LDIwIEBACiAgICAgaGkyYy0+WGZlck9wdGlvbnMgPSBJMkNfTk9fT1BUSU9OX0ZSQU1FOwogICAgIGhpMmMtPlhmZXJJU1IgICAgID0gSTJDX1NsYXZlX0lTUl9JVDsKIAorICAgIC8qIFByZWxvYWQgVFggZGF0YSBpZiBubyBzdHJldGNoIGVuYWJsZSAqLworICAgIGlmIChoaTJjLT5Jbml0Lk5vU3RyZXRjaE1vZGUgPT0gSTJDX05PU1RSRVRDSF9FTkFCTEUpCisgICAgeworICAgICAgLyogUHJlbG9hZCBUWCByZWdpc3RlciAqLworICAgICAgLyogV3JpdGUgZGF0YSB0byBUWERSICovCisgICAgICBoaTJjLT5JbnN0YW5jZS0+VFhEUiA9ICpoaTJjLT5wQnVmZlB0cjsKKworICAgICAgLyogSW5jcmVtZW50IEJ1ZmZlciBwb2ludGVyICovCisgICAgICBoaTJjLT5wQnVmZlB0cisrOworCisgICAgICBoaTJjLT5YZmVyQ291bnQtLTsKKyAgICAgIGhpMmMtPlhmZXJTaXplLS07CisgICAgfQorCiAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgIF9fSEFMX1VOTE9DSyhoaTJjKTsKIApAQCAtMjE3MiwzOSArMjIwNyw4OCBAQAogICAgIGhpMmMtPlhmZXJPcHRpb25zID0gSTJDX05PX09QVElPTl9GUkFNRTsKICAgICBoaTJjLT5YZmVySVNSICAgICA9IEkyQ19TbGF2ZV9JU1JfRE1BOwogCi0gICAgaWYgKGhpMmMtPmhkbWF0eCAhPSBOVUxMKQorICAgIC8qIFByZWxvYWQgVFggZGF0YSBpZiBubyBzdHJldGNoIGVuYWJsZSAqLworICAgIGlmIChoaTJjLT5Jbml0Lk5vU3RyZXRjaE1vZGUgPT0gSTJDX05PU1RSRVRDSF9FTkFCTEUpCiAgICAgewotICAgICAgLyogU2V0IHRoZSBJMkMgRE1BIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCi0gICAgICBoaTJjLT5oZG1hdHgtPlhmZXJDcGx0Q2FsbGJhY2sgPSBJMkNfRE1BU2xhdmVUcmFuc21pdENwbHQ7CisgICAgICAvKiBQcmVsb2FkIFRYIHJlZ2lzdGVyICovCisgICAgICAvKiBXcml0ZSBkYXRhIHRvIFRYRFIgKi8KKyAgICAgIGhpMmMtPkluc3RhbmNlLT5UWERSID0gKmhpMmMtPnBCdWZmUHRyOwogCi0gICAgICAvKiBTZXQgdGhlIERNQSBlcnJvciBjYWxsYmFjayAqLwotICAgICAgaGkyYy0+aGRtYXR4LT5YZmVyRXJyb3JDYWxsYmFjayA9IEkyQ19ETUFFcnJvcjsKKyAgICAgIC8qIEluY3JlbWVudCBCdWZmZXIgcG9pbnRlciAqLworICAgICAgaGkyYy0+cEJ1ZmZQdHIrKzsKIAotICAgICAgLyogU2V0IHRoZSB1bnVzZWQgRE1BIGNhbGxiYWNrcyB0byBOVUxMICovCi0gICAgICBoaTJjLT5oZG1hdHgtPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gTlVMTDsKLSAgICAgIGhpMmMtPmhkbWF0eC0+WGZlckFib3J0Q2FsbGJhY2sgPSBOVUxMOworICAgICAgaGkyYy0+WGZlckNvdW50LS07CisgICAgICBoaTJjLT5YZmVyU2l6ZS0tOworICAgIH0KIAotICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwotICAgICAgZG1heGZlcnN0YXR1cyA9IEhBTF9ETUFfU3RhcnRfSVQoaGkyYy0+aGRtYXR4LCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaGkyYy0+SW5zdGFuY2UtPlRYRFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaTJjLT5YZmVyU2l6ZSk7CisgICAgaWYgKGhpMmMtPlhmZXJDb3VudCAhPSAwVSkKKyAgICB7CisgICAgICBpZiAoaGkyYy0+aGRtYXR4ICE9IE5VTEwpCisgICAgICB7CisgICAgICAgIC8qIFNldCB0aGUgSTJDIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworICAgICAgICBoaTJjLT5oZG1hdHgtPlhmZXJDcGx0Q2FsbGJhY2sgPSBJMkNfRE1BU2xhdmVUcmFuc21pdENwbHQ7CisKKyAgICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KKyAgICAgICAgaGkyYy0+aGRtYXR4LT5YZmVyRXJyb3JDYWxsYmFjayA9IEkyQ19ETUFFcnJvcjsKKworICAgICAgICAvKiBTZXQgdGhlIHVudXNlZCBETUEgY2FsbGJhY2tzIHRvIE5VTEwgKi8KKyAgICAgICAgaGkyYy0+aGRtYXR4LT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IE5VTEw7CisgICAgICAgIGhpMmMtPmhkbWF0eC0+WGZlckFib3J0Q2FsbGJhY2sgPSBOVUxMOworCisgICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KKyAgICAgICAgZG1heGZlcnN0YXR1cyA9IEhBTF9ETUFfU3RhcnRfSVQoaGkyYy0+aGRtYXR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpaGkyYy0+cEJ1ZmZQdHIsICh1aW50MzJfdCkmaGkyYy0+SW5zdGFuY2UtPlRYRFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpMmMtPlhmZXJTaXplKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogVXBkYXRlIEkyQyBzdGF0ZSAqLworICAgICAgICBoaTJjLT5TdGF0ZSAgICAgPSBIQUxfSTJDX1NUQVRFX0xJU1RFTjsKKyAgICAgICAgaGkyYy0+TW9kZSAgICAgID0gSEFMX0kyQ19NT0RFX05PTkU7CisKKyAgICAgICAgLyogVXBkYXRlIEkyQyBlcnJvciBjb2RlICovCisgICAgICAgIGhpMmMtPkVycm9yQ29kZSB8PSBIQUxfSTJDX0VSUk9SX0RNQV9QQVJBTTsKKworICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICAgIF9fSEFMX1VOTE9DSyhoaTJjKTsKKworICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgfQorCisgICAgICBpZiAoZG1heGZlcnN0YXR1cyA9PSBIQUxfT0spCisgICAgICB7CisgICAgICAgIC8qIEVuYWJsZSBBZGRyZXNzIEFja25vd2xlZGdlICovCisgICAgICAgIGhpMmMtPkluc3RhbmNlLT5DUjIgJj0gfkkyQ19DUjJfTkFDSzsKKworICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICAgIF9fSEFMX1VOTE9DSyhoaTJjKTsKKworICAgICAgICAvKiBOb3RlIDogVGhlIEkyQyBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCBhZnRlciB1bmxvY2tpbmcgY3VycmVudCBwcm9jZXNzCisgICAgICAgICAgICAgICAgICB0byBhdm9pZCB0aGUgcmlzayBvZiBJMkMgaW50ZXJydXB0IGhhbmRsZSBleGVjdXRpb24gYmVmb3JlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgIHByb2Nlc3MgdW5sb2NrICovCisgICAgICAgIC8qIEVuYWJsZSBFUlIsIFNUT1AsIE5BQ0ssIEFERFIgaW50ZXJydXB0cyAqLworICAgICAgICBJMkNfRW5hYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9MSVNURU5fSVQpOworCisgICAgICAgIC8qIEVuYWJsZSBETUEgUmVxdWVzdCAqLworICAgICAgICBoaTJjLT5JbnN0YW5jZS0+Q1IxIHw9IEkyQ19DUjFfVFhETUFFTjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogVXBkYXRlIEkyQyBzdGF0ZSAqLworICAgICAgICBoaTJjLT5TdGF0ZSAgICAgPSBIQUxfSTJDX1NUQVRFX0xJU1RFTjsKKyAgICAgICAgaGkyYy0+TW9kZSAgICAgID0gSEFMX0kyQ19NT0RFX05PTkU7CisKKyAgICAgICAgLyogVXBkYXRlIEkyQyBlcnJvciBjb2RlICovCisgICAgICAgIGhpMmMtPkVycm9yQ29kZSB8PSBIQUxfSTJDX0VSUk9SX0RNQTsKKworICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICAgIF9fSEFMX1VOTE9DSyhoaTJjKTsKKworICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgLyogVXBkYXRlIEkyQyBzdGF0ZSAqLwotICAgICAgaGkyYy0+U3RhdGUgICAgID0gSEFMX0kyQ19TVEFURV9MSVNURU47Ci0gICAgICBoaTJjLT5Nb2RlICAgICAgPSBIQUxfSTJDX01PREVfTk9ORTsKLQotICAgICAgLyogVXBkYXRlIEkyQyBlcnJvciBjb2RlICovCi0gICAgICBoaTJjLT5FcnJvckNvZGUgfD0gSEFMX0kyQ19FUlJPUl9ETUFfUEFSQU07Ci0KLSAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICAgIF9fSEFMX1VOTE9DSyhoaTJjKTsKLQotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICB9Ci0KLSAgICBpZiAoZG1heGZlcnN0YXR1cyA9PSBIQUxfT0spCi0gICAgewogICAgICAgLyogRW5hYmxlIEFkZHJlc3MgQWNrbm93bGVkZ2UgKi8KICAgICAgIGhpMmMtPkluc3RhbmNlLT5DUjIgJj0gfkkyQ19DUjJfTkFDSzsKIApAQCAtMjIxMiwyNyArMjI5NiwxMCBAQAogICAgICAgX19IQUxfVU5MT0NLKGhpMmMpOwogCiAgICAgICAvKiBOb3RlIDogVGhlIEkyQyBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCBhZnRlciB1bmxvY2tpbmcgY3VycmVudCBwcm9jZXNzCi0gICAgICAgICAgICAgICAgdG8gYXZvaWQgdGhlIHJpc2sgb2YgSTJDIGludGVycnVwdCBoYW5kbGUgZXhlY3V0aW9uIGJlZm9yZSBjdXJyZW50Ci0gICAgICAgICAgICAgICAgcHJvY2VzcyB1bmxvY2sgKi8KKyAgICAgIHRvIGF2b2lkIHRoZSByaXNrIG9mIEkyQyBpbnRlcnJ1cHQgaGFuZGxlIGV4ZWN1dGlvbiBiZWZvcmUgY3VycmVudAorICAgICAgcHJvY2VzcyB1bmxvY2sgKi8KICAgICAgIC8qIEVuYWJsZSBFUlIsIFNUT1AsIE5BQ0ssIEFERFIgaW50ZXJydXB0cyAqLwogICAgICAgSTJDX0VuYWJsZV9JUlEoaGkyYywgSTJDX1hGRVJfTElTVEVOX0lUKTsKLQotICAgICAgLyogRW5hYmxlIERNQSBSZXF1ZXN0ICovCi0gICAgICBoaTJjLT5JbnN0YW5jZS0+Q1IxIHw9IEkyQ19DUjFfVFhETUFFTjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8qIFVwZGF0ZSBJMkMgc3RhdGUgKi8KLSAgICAgIGhpMmMtPlN0YXRlICAgICA9IEhBTF9JMkNfU1RBVEVfTElTVEVOOwotICAgICAgaGkyYy0+TW9kZSAgICAgID0gSEFMX0kyQ19NT0RFX05PTkU7Ci0KLSAgICAgIC8qIFVwZGF0ZSBJMkMgZXJyb3IgY29kZSAqLwotICAgICAgaGkyYy0+RXJyb3JDb2RlIHw9IEhBTF9JMkNfRVJST1JfRE1BOwotCi0gICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgICBfX0hBTF9VTkxPQ0soaGkyYyk7Ci0KLSAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogCiAgICAgcmV0dXJuIEhBTF9PSzsKQEAgLTIzNDYsNiArMjQxMyw3IEBACiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9CiB9CisKIC8qKgogICAqIEBicmllZiAgV3JpdGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gYmxvY2tpbmcgbW9kZSB0byBhIHNwZWNpZmljIG1lbW9yeSBhZGRyZXNzCiAgICogQHBhcmFtICBoaTJjIFBvaW50ZXIgdG8gYSBJMkNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwpAQCAtMjYzNiw5ICsyNzA0LDYgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWVtX1dyaXRlX0lUKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCiB7Ci0gIHVpbnQzMl90IHRpY2tzdGFydDsKLSAgdWludDMyX3QgeGZlcm1vZGU7Ci0KICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0kyQ19NRU1BRERfU0laRShNZW1BZGRTaXplKSk7CiAKQEAgLTI2NTgsOSArMjcyMyw2IEBACiAgICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgICBfX0hBTF9MT0NLKGhpMmMpOwogCi0gICAgLyogSW5pdCB0aWNrc3RhcnQgZm9yIHRpbWVvdXQgbWFuYWdlbWVudCovCi0gICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKLQogICAgIGhpMmMtPlN0YXRlICAgICAgID0gSEFMX0kyQ19TVEFURV9CVVNZX1RYOwogICAgIGhpMmMtPk1vZGUgICAgICAgID0gSEFMX0kyQ19NT0RFX01FTTsKICAgICBoaTJjLT5FcnJvckNvZGUgICA9IEhBTF9JMkNfRVJST1JfTk9ORTsKQEAgLTI2NjksMzAgKzI3MzEsMjkgQEAKICAgICBoaTJjLT5wQnVmZlB0ciAgICA9IHBEYXRhOwogICAgIGhpMmMtPlhmZXJDb3VudCAgID0gU2l6ZTsKICAgICBoaTJjLT5YZmVyT3B0aW9ucyA9IEkyQ19OT19PUFRJT05fRlJBTUU7Ci0gICAgaGkyYy0+WGZlcklTUiAgICAgPSBJMkNfTWFzdGVyX0lTUl9JVDsKKyAgICBoaTJjLT5YZmVySVNSICAgICA9IEkyQ19NZW1fSVNSX0lUOworICAgIGhpMmMtPkRldmFkZHJlc3MgID0gRGV2QWRkcmVzczsKIAotICAgIGlmIChoaTJjLT5YZmVyQ291bnQgPiBNQVhfTkJZVEVfU0laRSkKKyAgICAvKiBJZiBNZW1vcnkgYWRkcmVzcyBzaXplIGlzIDhCaXQgKi8KKyAgICBpZiAoTWVtQWRkU2l6ZSA9PSBJMkNfTUVNQUREX1NJWkVfOEJJVCkKICAgICB7Ci0gICAgICBoaTJjLT5YZmVyU2l6ZSA9IE1BWF9OQllURV9TSVpFOwotICAgICAgeGZlcm1vZGUgPSBJMkNfUkVMT0FEX01PREU7CisgICAgICAvKiBQcmVmZXRjaCBNZW1vcnkgQWRkcmVzcyAqLworICAgICAgaGkyYy0+SW5zdGFuY2UtPlRYRFIgPSBJMkNfTUVNX0FERF9MU0IoTWVtQWRkcmVzcyk7CisKKyAgICAgIC8qIFJlc2V0IE1lbWFkZHJlc3MgY29udGVudCAqLworICAgICAgaGkyYy0+TWVtYWRkcmVzcyA9IDB4RkZGRkZGRkZVOwogICAgIH0KKyAgICAvKiBJZiBNZW1vcnkgYWRkcmVzcyBzaXplIGlzIDE2Qml0ICovCiAgICAgZWxzZQogICAgIHsKLSAgICAgIGhpMmMtPlhmZXJTaXplID0gaGkyYy0+WGZlckNvdW50OwotICAgICAgeGZlcm1vZGUgPSBJMkNfQVVUT0VORF9NT0RFOwotICAgIH0KKyAgICAgIC8qIFByZWZldGNoIE1lbW9yeSBBZGRyZXNzIChNU0IgcGFydCwgTFNCIHdpbGwgYmUgbWFuYWdlIHRocm91Z2ggaW50ZXJydXB0KSAqLworICAgICAgaGkyYy0+SW5zdGFuY2UtPlRYRFIgPSBJMkNfTUVNX0FERF9NU0IoTWVtQWRkcmVzcyk7CiAKKyAgICAgIC8qIFByZXBhcmUgTWVtYWRkcmVzcyBidWZmZXIgZm9yIExTQiBwYXJ0ICovCisgICAgICBoaTJjLT5NZW1hZGRyZXNzID0gSTJDX01FTV9BRERfTFNCKE1lbUFkZHJlc3MpOworICAgIH0KICAgICAvKiBTZW5kIFNsYXZlIEFkZHJlc3MgYW5kIE1lbW9yeSBBZGRyZXNzICovCi0gICAgaWYgKEkyQ19SZXF1ZXN0TWVtb3J5V3JpdGUoaGkyYywgRGV2QWRkcmVzcywgTWVtQWRkcmVzcywgTWVtQWRkU2l6ZSwgSTJDX1RJTUVPVVRfRkxBRywgdGlja3N0YXJ0KQotICAgICAgICAhPSBIQUxfT0spCi0gICAgewotICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgICAgX19IQUxfVU5MT0NLKGhpMmMpOwotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICB9Ci0KLSAgICAvKiBTZXQgTkJZVEVTIHRvIHdyaXRlIGFuZCByZWxvYWQgaWYgaGkyYy0+WGZlckNvdW50ID4gTUFYX05CWVRFX1NJWkUgYW5kIGdlbmVyYXRlIFJFU1RBUlQgKi8KLSAgICBJMkNfVHJhbnNmZXJDb25maWcoaGkyYywgRGV2QWRkcmVzcywgKHVpbnQ4X3QpaGkyYy0+WGZlclNpemUsIHhmZXJtb2RlLCBJMkNfTk9fU1RBUlRTVE9QKTsKKyAgICBJMkNfVHJhbnNmZXJDb25maWcoaGkyYywgRGV2QWRkcmVzcywgKHVpbnQ4X3QpTWVtQWRkU2l6ZSwgSTJDX1JFTE9BRF9NT0RFLCBJMkNfR0VORVJBVEVfU1RBUlRfV1JJVEUpOwogCiAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgIF9fSEFMX1VOTE9DSyhoaTJjKTsKQEAgLTI3MzAsOSArMjc5MSw2IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01lbV9SZWFkX0lUKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKIHsKLSAgdWludDMyX3QgdGlja3N0YXJ0OwotICB1aW50MzJfdCB4ZmVybW9kZTsKLQogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfSTJDX01FTUFERF9TSVpFKE1lbUFkZFNpemUpKTsKIApAQCAtMjc1Miw5ICsyODEwLDYgQEAKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaGkyYyk7CiAKLSAgICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ2VtZW50Ki8KLSAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwotCiAgICAgaGkyYy0+U3RhdGUgICAgICAgPSBIQUxfSTJDX1NUQVRFX0JVU1lfUlg7CiAgICAgaGkyYy0+TW9kZSAgICAgICAgPSBIQUxfSTJDX01PREVfTUVNOwogICAgIGhpMmMtPkVycm9yQ29kZSAgID0gSEFMX0kyQ19FUlJPUl9OT05FOwpAQCAtMjc2MywyOSArMjgxOCwyOSBAQAogICAgIGhpMmMtPnBCdWZmUHRyICAgID0gcERhdGE7CiAgICAgaGkyYy0+WGZlckNvdW50ICAgPSBTaXplOwogICAgIGhpMmMtPlhmZXJPcHRpb25zID0gSTJDX05PX09QVElPTl9GUkFNRTsKLSAgICBoaTJjLT5YZmVySVNSICAgICA9IEkyQ19NYXN0ZXJfSVNSX0lUOworICAgIGhpMmMtPlhmZXJJU1IgICAgID0gSTJDX01lbV9JU1JfSVQ7CisgICAgaGkyYy0+RGV2YWRkcmVzcyAgPSBEZXZBZGRyZXNzOwogCi0gICAgaWYgKGhpMmMtPlhmZXJDb3VudCA+IE1BWF9OQllURV9TSVpFKQorICAgIC8qIElmIE1lbW9yeSBhZGRyZXNzIHNpemUgaXMgOEJpdCAqLworICAgIGlmIChNZW1BZGRTaXplID09IEkyQ19NRU1BRERfU0laRV84QklUKQogICAgIHsKLSAgICAgIGhpMmMtPlhmZXJTaXplID0gTUFYX05CWVRFX1NJWkU7Ci0gICAgICB4ZmVybW9kZSA9IEkyQ19SRUxPQURfTU9ERTsKKyAgICAgIC8qIFByZWZldGNoIE1lbW9yeSBBZGRyZXNzICovCisgICAgICBoaTJjLT5JbnN0YW5jZS0+VFhEUiA9IEkyQ19NRU1fQUREX0xTQihNZW1BZGRyZXNzKTsKKworICAgICAgLyogUmVzZXQgTWVtYWRkcmVzcyBjb250ZW50ICovCisgICAgICBoaTJjLT5NZW1hZGRyZXNzID0gMHhGRkZGRkZGRlU7CiAgICAgfQorICAgIC8qIElmIE1lbW9yeSBhZGRyZXNzIHNpemUgaXMgMTZCaXQgKi8KICAgICBlbHNlCiAgICAgewotICAgICAgaGkyYy0+WGZlclNpemUgPSBoaTJjLT5YZmVyQ291bnQ7Ci0gICAgICB4ZmVybW9kZSA9IEkyQ19BVVRPRU5EX01PREU7Ci0gICAgfQorICAgICAgLyogUHJlZmV0Y2ggTWVtb3J5IEFkZHJlc3MgKE1TQiBwYXJ0LCBMU0Igd2lsbCBiZSBtYW5hZ2UgdGhyb3VnaCBpbnRlcnJ1cHQpICovCisgICAgICBoaTJjLT5JbnN0YW5jZS0+VFhEUiA9IEkyQ19NRU1fQUREX01TQihNZW1BZGRyZXNzKTsKIAorICAgICAgLyogUHJlcGFyZSBNZW1hZGRyZXNzIGJ1ZmZlciBmb3IgTFNCIHBhcnQgKi8KKyAgICAgIGhpMmMtPk1lbWFkZHJlc3MgPSBJMkNfTUVNX0FERF9MU0IoTWVtQWRkcmVzcyk7CisgICAgfQogICAgIC8qIFNlbmQgU2xhdmUgQWRkcmVzcyBhbmQgTWVtb3J5IEFkZHJlc3MgKi8KLSAgICBpZiAoSTJDX1JlcXVlc3RNZW1vcnlSZWFkKGhpMmMsIERldkFkZHJlc3MsIE1lbUFkZHJlc3MsIE1lbUFkZFNpemUsIEkyQ19USU1FT1VUX0ZMQUcsIHRpY2tzdGFydCkgIT0gSEFMX09LKQotICAgIHsKLSAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICAgIF9fSEFMX1VOTE9DSyhoaTJjKTsKLSAgICAgIHJldHVybiBIQUxfRVJST1I7Ci0gICAgfQotCi0gICAgLyogU2V0IE5CWVRFUyB0byB3cml0ZSBhbmQgcmVsb2FkIGlmIGhpMmMtPlhmZXJDb3VudCA+IE1BWF9OQllURV9TSVpFIGFuZCBnZW5lcmF0ZSBSRVNUQVJUICovCi0gICAgSTJDX1RyYW5zZmVyQ29uZmlnKGhpMmMsIERldkFkZHJlc3MsICh1aW50OF90KWhpMmMtPlhmZXJTaXplLCB4ZmVybW9kZSwgSTJDX0dFTkVSQVRFX1NUQVJUX1JFQUQpOworICAgIEkyQ19UcmFuc2ZlckNvbmZpZyhoaTJjLCBEZXZBZGRyZXNzLCAodWludDhfdClNZW1BZGRTaXplLCBJMkNfU09GVEVORF9NT0RFLCBJMkNfR0VORVJBVEVfU1RBUlRfV1JJVEUpOwogCiAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgIF9fSEFMX1VOTE9DSyhoaTJjKTsKQEAgLTI3OTgsNyArMjg1Myw3IEBACiAgICAgLyogcG9zc2libGUgdG8gZW5hYmxlIGFsbCBvZiB0aGVzZSAqLwogICAgIC8qIEkyQ19JVF9FUlJJIHwgSTJDX0lUX1RDSSB8IEkyQ19JVF9TVE9QSSB8IEkyQ19JVF9OQUNLSSB8CiAgICAgICBJMkNfSVRfQUREUkkgfCBJMkNfSVRfUlhJIHwgSTJDX0lUX1RYSSAqLwotICAgIEkyQ19FbmFibGVfSVJRKGhpMmMsIEkyQ19YRkVSX1JYX0lUKTsKKyAgICBJMkNfRW5hYmxlX0lSUShoaTJjLCAoSTJDX1hGRVJfVFhfSVQgfCBJMkNfWEZFUl9SWF9JVCkpOwogCiAgICAgcmV0dXJuIEhBTF9PSzsKICAgfQpAQCAtMjgwNyw2ICsyODYyLDcgQEAKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KIH0KKwogLyoqCiAgICogQGJyaWVmICBXcml0ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB3aXRoIERNQSB0byBhIHNwZWNpZmljIG1lbW9yeSBhZGRyZXNzCiAgICogQHBhcmFtICBoaTJjIFBvaW50ZXIgdG8gYSBJMkNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwpAQCAtMjgyMiw4ICsyODc4LDYgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWVtX1dyaXRlX0RNQShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKIHsKLSAgdWludDMyX3QgdGlja3N0YXJ0OwotICB1aW50MzJfdCB4ZmVybW9kZTsKICAgSEFMX1N0YXR1c1R5cGVEZWYgZG1heGZlcnN0YXR1czsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwpAQCAtMjg0NSw5ICsyODk5LDYgQEAKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaGkyYyk7CiAKLSAgICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ2VtZW50Ki8KLSAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwotCiAgICAgaGkyYy0+U3RhdGUgICAgICAgPSBIQUxfSTJDX1NUQVRFX0JVU1lfVFg7CiAgICAgaGkyYy0+TW9kZSAgICAgICAgPSBIQUxfSTJDX01PREVfTUVNOwogICAgIGhpMmMtPkVycm9yQ29kZSAgID0gSEFMX0kyQ19FUlJPUl9OT05FOwpAQCAtMjg1NiwyOCArMjkwNywzNiBAQAogICAgIGhpMmMtPnBCdWZmUHRyICAgID0gcERhdGE7CiAgICAgaGkyYy0+WGZlckNvdW50ICAgPSBTaXplOwogICAgIGhpMmMtPlhmZXJPcHRpb25zID0gSTJDX05PX09QVElPTl9GUkFNRTsKLSAgICBoaTJjLT5YZmVySVNSICAgICA9IEkyQ19NYXN0ZXJfSVNSX0RNQTsKKyAgICBoaTJjLT5YZmVySVNSICAgICA9IEkyQ19NZW1fSVNSX0RNQTsKKyAgICBoaTJjLT5EZXZhZGRyZXNzICA9IERldkFkZHJlc3M7CiAKICAgICBpZiAoaGkyYy0+WGZlckNvdW50ID4gTUFYX05CWVRFX1NJWkUpCiAgICAgewogICAgICAgaGkyYy0+WGZlclNpemUgPSBNQVhfTkJZVEVfU0laRTsKLSAgICAgIHhmZXJtb2RlID0gSTJDX1JFTE9BRF9NT0RFOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgaGkyYy0+WGZlclNpemUgPSBoaTJjLT5YZmVyQ291bnQ7Ci0gICAgICB4ZmVybW9kZSA9IEkyQ19BVVRPRU5EX01PREU7CiAgICAgfQogCi0gICAgLyogU2VuZCBTbGF2ZSBBZGRyZXNzIGFuZCBNZW1vcnkgQWRkcmVzcyAqLwotICAgIGlmIChJMkNfUmVxdWVzdE1lbW9yeVdyaXRlKGhpMmMsIERldkFkZHJlc3MsIE1lbUFkZHJlc3MsIE1lbUFkZFNpemUsIEkyQ19USU1FT1VUX0ZMQUcsIHRpY2tzdGFydCkKLSAgICAgICAgIT0gSEFMX09LKQorICAgIC8qIElmIE1lbW9yeSBhZGRyZXNzIHNpemUgaXMgOEJpdCAqLworICAgIGlmIChNZW1BZGRTaXplID09IEkyQ19NRU1BRERfU0laRV84QklUKQogICAgIHsKLSAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICAgIF9fSEFMX1VOTE9DSyhoaTJjKTsKLSAgICAgIHJldHVybiBIQUxfRVJST1I7Ci0gICAgfQorICAgICAgLyogUHJlZmV0Y2ggTWVtb3J5IEFkZHJlc3MgKi8KKyAgICAgIGhpMmMtPkluc3RhbmNlLT5UWERSID0gSTJDX01FTV9BRERfTFNCKE1lbUFkZHJlc3MpOwogCisgICAgICAvKiBSZXNldCBNZW1hZGRyZXNzIGNvbnRlbnQgKi8KKyAgICAgIGhpMmMtPk1lbWFkZHJlc3MgPSAweEZGRkZGRkZGVTsKKyAgICB9CisgICAgLyogSWYgTWVtb3J5IGFkZHJlc3Mgc2l6ZSBpcyAxNkJpdCAqLworICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBQcmVmZXRjaCBNZW1vcnkgQWRkcmVzcyAoTVNCIHBhcnQsIExTQiB3aWxsIGJlIG1hbmFnZSB0aHJvdWdoIGludGVycnVwdCkgKi8KKyAgICAgIGhpMmMtPkluc3RhbmNlLT5UWERSID0gSTJDX01FTV9BRERfTVNCKE1lbUFkZHJlc3MpOworCisgICAgICAvKiBQcmVwYXJlIE1lbWFkZHJlc3MgYnVmZmVyIGZvciBMU0IgcGFydCAqLworICAgICAgaGkyYy0+TWVtYWRkcmVzcyA9IEkyQ19NRU1fQUREX0xTQihNZW1BZGRyZXNzKTsKKyAgICB9CiAKICAgICBpZiAoaGkyYy0+aGRtYXR4ICE9IE5VTEwpCiAgICAgewpAQCAtMjkxMiwxMiArMjk3MSw4IEBACiAKICAgICBpZiAoZG1heGZlcnN0YXR1cyA9PSBIQUxfT0spCiAgICAgewotICAgICAgLyogU2VuZCBTbGF2ZSBBZGRyZXNzICovCi0gICAgICAvKiBTZXQgTkJZVEVTIHRvIHdyaXRlIGFuZCByZWxvYWQgaWYgaGkyYy0+WGZlckNvdW50ID4gTUFYX05CWVRFX1NJWkUgYW5kIGdlbmVyYXRlIFJFU1RBUlQgKi8KLSAgICAgIEkyQ19UcmFuc2ZlckNvbmZpZyhoaTJjLCBEZXZBZGRyZXNzLCAodWludDhfdCloaTJjLT5YZmVyU2l6ZSwgeGZlcm1vZGUsIEkyQ19OT19TVEFSVFNUT1ApOwotCi0gICAgICAvKiBVcGRhdGUgWGZlckNvdW50IHZhbHVlICovCi0gICAgICBoaTJjLT5YZmVyQ291bnQgLT0gaGkyYy0+WGZlclNpemU7CisgICAgICAvKiBTZW5kIFNsYXZlIEFkZHJlc3MgYW5kIE1lbW9yeSBBZGRyZXNzICovCisgICAgICBJMkNfVHJhbnNmZXJDb25maWcoaGkyYywgRGV2QWRkcmVzcywgKHVpbnQ4X3QpTWVtQWRkU2l6ZSwgSTJDX1JFTE9BRF9NT0RFLCBJMkNfR0VORVJBVEVfU1RBUlRfV1JJVEUpOwogCiAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgICBfX0hBTF9VTkxPQ0soaGkyYyk7CkBAIC0yOTI1LDExICsyOTgwLDExIEBACiAgICAgICAvKiBOb3RlIDogVGhlIEkyQyBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCBhZnRlciB1bmxvY2tpbmcgY3VycmVudCBwcm9jZXNzCiAgICAgICAgICAgICAgICAgdG8gYXZvaWQgdGhlIHJpc2sgb2YgSTJDIGludGVycnVwdCBoYW5kbGUgZXhlY3V0aW9uIGJlZm9yZSBjdXJyZW50CiAgICAgICAgICAgICAgICAgcHJvY2VzcyB1bmxvY2sgKi8KLSAgICAgIC8qIEVuYWJsZSBFUlIgYW5kIE5BQ0sgaW50ZXJydXB0cyAqLwotICAgICAgSTJDX0VuYWJsZV9JUlEoaGkyYywgSTJDX1hGRVJfRVJST1JfSVQpOwotCi0gICAgICAvKiBFbmFibGUgRE1BIFJlcXVlc3QgKi8KLSAgICAgIGhpMmMtPkluc3RhbmNlLT5DUjEgfD0gSTJDX0NSMV9UWERNQUVOOworICAgICAgLyogRW5hYmxlIEVSUiwgVEMsIFNUT1AsIE5BQ0ssIFRYSSBpbnRlcnJ1cHQgKi8KKyAgICAgIC8qIHBvc3NpYmxlIHRvIGVuYWJsZSBhbGwgb2YgdGhlc2UgKi8KKyAgICAgIC8qIEkyQ19JVF9FUlJJIHwgSTJDX0lUX1RDSSB8IEkyQ19JVF9TVE9QSSB8IEkyQ19JVF9OQUNLSSB8CisgICAgICAgIEkyQ19JVF9BRERSSSB8IEkyQ19JVF9SWEkgfCBJMkNfSVRfVFhJICovCisgICAgICBJMkNfRW5hYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9UWF9JVCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0yOTY5LDggKzMwMjQsNiBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NZW1fUmVhZF9ETUEoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKIHsKLSAgdWludDMyX3QgdGlja3N0YXJ0OwotICB1aW50MzJfdCB4ZmVybW9kZTsKICAgSEFMX1N0YXR1c1R5cGVEZWYgZG1heGZlcnN0YXR1czsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwpAQCAtMjk5Miw5ICszMDQ1LDYgQEAKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaGkyYyk7CiAKLSAgICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ2VtZW50Ki8KLSAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwotCiAgICAgaGkyYy0+U3RhdGUgICAgICAgPSBIQUxfSTJDX1NUQVRFX0JVU1lfUlg7CiAgICAgaGkyYy0+TW9kZSAgICAgICAgPSBIQUxfSTJDX01PREVfTUVNOwogICAgIGhpMmMtPkVycm9yQ29kZSAgID0gSEFMX0kyQ19FUlJPUl9OT05FOwpAQCAtMzAwMywyNSArMzA1MywzNSBAQAogICAgIGhpMmMtPnBCdWZmUHRyICAgID0gcERhdGE7CiAgICAgaGkyYy0+WGZlckNvdW50ICAgPSBTaXplOwogICAgIGhpMmMtPlhmZXJPcHRpb25zID0gSTJDX05PX09QVElPTl9GUkFNRTsKLSAgICBoaTJjLT5YZmVySVNSICAgICA9IEkyQ19NYXN0ZXJfSVNSX0RNQTsKKyAgICBoaTJjLT5YZmVySVNSICAgICA9IEkyQ19NZW1fSVNSX0RNQTsKKyAgICBoaTJjLT5EZXZhZGRyZXNzICA9IERldkFkZHJlc3M7CiAKICAgICBpZiAoaGkyYy0+WGZlckNvdW50ID4gTUFYX05CWVRFX1NJWkUpCiAgICAgewogICAgICAgaGkyYy0+WGZlclNpemUgPSBNQVhfTkJZVEVfU0laRTsKLSAgICAgIHhmZXJtb2RlID0gSTJDX1JFTE9BRF9NT0RFOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgaGkyYy0+WGZlclNpemUgPSBoaTJjLT5YZmVyQ291bnQ7Ci0gICAgICB4ZmVybW9kZSA9IEkyQ19BVVRPRU5EX01PREU7CiAgICAgfQogCi0gICAgLyogU2VuZCBTbGF2ZSBBZGRyZXNzIGFuZCBNZW1vcnkgQWRkcmVzcyAqLwotICAgIGlmIChJMkNfUmVxdWVzdE1lbW9yeVJlYWQoaGkyYywgRGV2QWRkcmVzcywgTWVtQWRkcmVzcywgTWVtQWRkU2l6ZSwgSTJDX1RJTUVPVVRfRkxBRywgdGlja3N0YXJ0KSAhPSBIQUxfT0spCisgICAgLyogSWYgTWVtb3J5IGFkZHJlc3Mgc2l6ZSBpcyA4Qml0ICovCisgICAgaWYgKE1lbUFkZFNpemUgPT0gSTJDX01FTUFERF9TSVpFXzhCSVQpCiAgICAgewotICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgICAgX19IQUxfVU5MT0NLKGhpMmMpOwotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIC8qIFByZWZldGNoIE1lbW9yeSBBZGRyZXNzICovCisgICAgICBoaTJjLT5JbnN0YW5jZS0+VFhEUiA9IEkyQ19NRU1fQUREX0xTQihNZW1BZGRyZXNzKTsKKworICAgICAgLyogUmVzZXQgTWVtYWRkcmVzcyBjb250ZW50ICovCisgICAgICBoaTJjLT5NZW1hZGRyZXNzID0gMHhGRkZGRkZGRlU7CisgICAgfQorICAgIC8qIElmIE1lbW9yeSBhZGRyZXNzIHNpemUgaXMgMTZCaXQgKi8KKyAgICBlbHNlCisgICAgeworICAgICAgLyogUHJlZmV0Y2ggTWVtb3J5IEFkZHJlc3MgKE1TQiBwYXJ0LCBMU0Igd2lsbCBiZSBtYW5hZ2UgdGhyb3VnaCBpbnRlcnJ1cHQpICovCisgICAgICBoaTJjLT5JbnN0YW5jZS0+VFhEUiA9IEkyQ19NRU1fQUREX01TQihNZW1BZGRyZXNzKTsKKworICAgICAgLyogUHJlcGFyZSBNZW1hZGRyZXNzIGJ1ZmZlciBmb3IgTFNCIHBhcnQgKi8KKyAgICAgIGhpMmMtPk1lbWFkZHJlc3MgPSBJMkNfTUVNX0FERF9MU0IoTWVtQWRkcmVzcyk7CiAgICAgfQogCiAgICAgaWYgKGhpMmMtPmhkbWFyeCAhPSBOVUxMKQpAQCAtMzA1NywxMSArMzExNyw4IEBACiAKICAgICBpZiAoZG1heGZlcnN0YXR1cyA9PSBIQUxfT0spCiAgICAgewotICAgICAgLyogU2V0IE5CWVRFUyB0byB3cml0ZSBhbmQgcmVsb2FkIGlmIGhpMmMtPlhmZXJDb3VudCA+IE1BWF9OQllURV9TSVpFIGFuZCBnZW5lcmF0ZSBSRVNUQVJUICovCi0gICAgICBJMkNfVHJhbnNmZXJDb25maWcoaGkyYywgRGV2QWRkcmVzcywgKHVpbnQ4X3QpaGkyYy0+WGZlclNpemUsIHhmZXJtb2RlLCBJMkNfR0VORVJBVEVfU1RBUlRfUkVBRCk7Ci0KLSAgICAgIC8qIFVwZGF0ZSBYZmVyQ291bnQgdmFsdWUgKi8KLSAgICAgIGhpMmMtPlhmZXJDb3VudCAtPSBoaTJjLT5YZmVyU2l6ZTsKKyAgICAgIC8qIFNlbmQgU2xhdmUgQWRkcmVzcyBhbmQgTWVtb3J5IEFkZHJlc3MgKi8KKyAgICAgIEkyQ19UcmFuc2ZlckNvbmZpZyhoaTJjLCBEZXZBZGRyZXNzLCAodWludDhfdClNZW1BZGRTaXplLCBJMkNfU09GVEVORF9NT0RFLCBJMkNfR0VORVJBVEVfU1RBUlRfV1JJVEUpOwogCiAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgICBfX0hBTF9VTkxPQ0soaGkyYyk7CkBAIC0zMDY5LDExICszMTI2LDExIEBACiAgICAgICAvKiBOb3RlIDogVGhlIEkyQyBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCBhZnRlciB1bmxvY2tpbmcgY3VycmVudCBwcm9jZXNzCiAgICAgICAgICAgICAgICAgdG8gYXZvaWQgdGhlIHJpc2sgb2YgSTJDIGludGVycnVwdCBoYW5kbGUgZXhlY3V0aW9uIGJlZm9yZSBjdXJyZW50CiAgICAgICAgICAgICAgICAgcHJvY2VzcyB1bmxvY2sgKi8KLSAgICAgIC8qIEVuYWJsZSBFUlIgYW5kIE5BQ0sgaW50ZXJydXB0cyAqLwotICAgICAgSTJDX0VuYWJsZV9JUlEoaGkyYywgSTJDX1hGRVJfRVJST1JfSVQpOwotCi0gICAgICAvKiBFbmFibGUgRE1BIFJlcXVlc3QgKi8KLSAgICAgIGhpMmMtPkluc3RhbmNlLT5DUjEgfD0gSTJDX0NSMV9SWERNQUVOOworICAgICAgLyogRW5hYmxlIEVSUiwgVEMsIFNUT1AsIE5BQ0ssIFRYSSBpbnRlcnJ1cHQgKi8KKyAgICAgIC8qIHBvc3NpYmxlIHRvIGVuYWJsZSBhbGwgb2YgdGhlc2UgKi8KKyAgICAgIC8qIEkyQ19JVF9FUlJJIHwgSTJDX0lUX1RDSSB8IEkyQ19JVF9TVE9QSSB8IEkyQ19JVF9OQUNLSSB8CisgICAgICAgIEkyQ19JVF9BRERSSSB8IEkyQ19JVF9SWEkgfCBJMkNfSVRfVFhJICovCisgICAgICBJMkNfRW5hYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9UWF9JVCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0zMzE2LDYgKzMzNzMsMTAgQEAKICAgICAvKiBOb3RlIDogVGhlIEkyQyBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCBhZnRlciB1bmxvY2tpbmcgY3VycmVudCBwcm9jZXNzCiAgICAgICAgICAgICAgIHRvIGF2b2lkIHRoZSByaXNrIG9mIEkyQyBpbnRlcnJ1cHQgaGFuZGxlIGV4ZWN1dGlvbiBiZWZvcmUgY3VycmVudAogICAgICAgICAgICAgICBwcm9jZXNzIHVubG9jayAqLworICAgIC8qIEVuYWJsZSBFUlIsIFRDLCBTVE9QLCBOQUNLLCBUWEkgaW50ZXJydXB0ICovCisgICAgLyogcG9zc2libGUgdG8gZW5hYmxlIGFsbCBvZiB0aGVzZSAqLworICAgIC8qIEkyQ19JVF9FUlJJIHwgSTJDX0lUX1RDSSB8IEkyQ19JVF9TVE9QSSB8IEkyQ19JVF9OQUNLSSB8CisgICAgICAgSTJDX0lUX0FERFJJIHwgSTJDX0lUX1JYSSB8IEkyQ19JVF9UWEkgKi8KICAgICBJMkNfRW5hYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9UWF9JVCk7CiAKICAgICByZXR1cm4gSEFMX09LOwpAQCAtMzc2Myw3ICszODI0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFhmZXJPcHRpb25zKQogewogICAvKiBEZWNsYXJhdGlvbiBvZiB0bXAgdG8gcHJldmVudCB1bmRlZmluZWQgYmVoYXZpb3Igb2Ygdm9sYXRpbGUgdXNhZ2UgKi8KLSAgdWludDMyX3QgdG1wOworICBGbGFnU3RhdHVzIHRtcDsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfSTJDX1RSQU5TRkVSX09QVElPTlNfUkVRVUVTVChYZmVyT3B0aW9ucykpOwpAQCAtMzgyNSw3ICszODg2LDcgQEAKICAgICBoaTJjLT5YZmVySVNSICAgICA9IEkyQ19TbGF2ZV9JU1JfSVQ7CiAKICAgICB0bXAgPSBfX0hBTF9JMkNfR0VUX0ZMQUcoaGkyYywgSTJDX0ZMQUdfQUREUik7Ci0gICAgaWYgKCh0bXAgIT0gUkVTRVQpICYmIChJMkNfR0VUX0RJUihoaTJjKSA9PSBJMkNfRElSRUNUSU9OX1JFQ0VJVkUpKQorICAgIGlmICgoSTJDX0dFVF9ESVIoaGkyYykgPT0gSTJDX0RJUkVDVElPTl9SRUNFSVZFKSAmJiAodG1wICE9IFJFU0VUKSkKICAgICB7CiAgICAgICAvKiBDbGVhciBBRERSIGZsYWcgYWZ0ZXIgcHJlcGFyZSB0aGUgdHJhbnNmZXIgcGFyYW1ldGVycyAqLwogICAgICAgLyogVGhpcyBhY3Rpb24gd2lsbCBnZW5lcmF0ZSBhbiBhY2tub3dsZWRnZSB0byB0aGUgTWFzdGVyICovCkBAIC0zODYzLDggKzM5MjQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFhmZXJPcHRpb25zKQogewogICAvKiBEZWNsYXJhdGlvbiBvZiB0bXAgdG8gcHJldmVudCB1bmRlZmluZWQgYmVoYXZpb3Igb2Ygdm9sYXRpbGUgdXNhZ2UgKi8KLSAgdWludDMyX3QgdG1wOwotCisgIEZsYWdTdGF0dXMgdG1wOwogICBIQUxfU3RhdHVzVHlwZURlZiBkbWF4ZmVyc3RhdHVzOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCkBAIC0zODk5LDcgKzM5NTksNyBAQAogICAgICAgICAgIGhpMmMtPkluc3RhbmNlLT5DUjEgJj0gfkkyQ19DUjFfUlhETUFFTjsKIAogICAgICAgICAgIC8qIFNldCB0aGUgSTJDIERNQSBBYm9ydCBjYWxsYmFjayA6Ci0gICAgICAgICAgIHdpbGwgbGVhZCB0byBjYWxsIEhBTF9JMkNfRXJyb3JDYWxsYmFjaygpIGF0IGVuZCBvZiBETUEgYWJvcnQgcHJvY2VkdXJlICovCisgICAgICAgICAgd2lsbCBsZWFkIHRvIGNhbGwgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkgYXQgZW5kIG9mIERNQSBhYm9ydCBwcm9jZWR1cmUgKi8KICAgICAgICAgICBoaTJjLT5oZG1hcngtPlhmZXJBYm9ydENhbGxiYWNrID0gSTJDX0RNQUFib3J0OwogCiAgICAgICAgICAgLyogQWJvcnQgRE1BIFJYICovCkBAIC0zOTIxLDcgKzM5ODEsNyBAQAogICAgICAgICBpZiAoaGkyYy0+aGRtYXR4ICE9IE5VTEwpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBTZXQgdGhlIEkyQyBETUEgQWJvcnQgY2FsbGJhY2sgOgotICAgICAgICAgICB3aWxsIGxlYWQgdG8gY2FsbCBIQUxfSTJDX0Vycm9yQ2FsbGJhY2soKSBhdCBlbmQgb2YgRE1BIGFib3J0IHByb2NlZHVyZSAqLworICAgICAgICAgIHdpbGwgbGVhZCB0byBjYWxsIEhBTF9JMkNfRXJyb3JDYWxsYmFjaygpIGF0IGVuZCBvZiBETUEgYWJvcnQgcHJvY2VkdXJlICovCiAgICAgICAgICAgaGkyYy0+aGRtYXR4LT5YZmVyQWJvcnRDYWxsYmFjayA9IEkyQ19ETUFBYm9ydDsKIAogICAgICAgICAgIC8qIEFib3J0IERNQSBUWCAqLwpAQCAtNDAwNyw3ICs0MDY3LDcgQEAKICAgICB9CiAKICAgICB0bXAgPSBfX0hBTF9JMkNfR0VUX0ZMQUcoaGkyYywgSTJDX0ZMQUdfQUREUik7Ci0gICAgaWYgKCh0bXAgIT0gUkVTRVQpICYmIChJMkNfR0VUX0RJUihoaTJjKSA9PSBJMkNfRElSRUNUSU9OX1JFQ0VJVkUpKQorICAgIGlmICgoSTJDX0dFVF9ESVIoaGkyYykgPT0gSTJDX0RJUkVDVElPTl9SRUNFSVZFKSAmJiAodG1wICE9IFJFU0VUKSkKICAgICB7CiAgICAgICAvKiBDbGVhciBBRERSIGZsYWcgYWZ0ZXIgcHJlcGFyZSB0aGUgdHJhbnNmZXIgcGFyYW1ldGVycyAqLwogICAgICAgLyogVGhpcyBhY3Rpb24gd2lsbCBnZW5lcmF0ZSBhbiBhY2tub3dsZWRnZSB0byB0aGUgTWFzdGVyICovCkBAIC00MDE3LDE1ICs0MDc3LDE1IEBACiAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgIF9fSEFMX1VOTE9DSyhoaTJjKTsKIAorICAgIC8qIEVuYWJsZSBETUEgUmVxdWVzdCAqLworICAgIGhpMmMtPkluc3RhbmNlLT5DUjEgfD0gSTJDX0NSMV9UWERNQUVOOworCiAgICAgLyogTm90ZSA6IFRoZSBJMkMgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgYWZ0ZXIgdW5sb2NraW5nIGN1cnJlbnQgcHJvY2VzcwogICAgIHRvIGF2b2lkIHRoZSByaXNrIG9mIEkyQyBpbnRlcnJ1cHQgaGFuZGxlIGV4ZWN1dGlvbiBiZWZvcmUgY3VycmVudAogICAgIHByb2Nlc3MgdW5sb2NrICovCiAgICAgLyogRW5hYmxlIEVSUiwgU1RPUCwgTkFDSywgQUREUiBpbnRlcnJ1cHRzICovCiAgICAgSTJDX0VuYWJsZV9JUlEoaGkyYywgSTJDX1hGRVJfTElTVEVOX0lUKTsKIAotICAgIC8qIEVuYWJsZSBETUEgUmVxdWVzdCAqLwotICAgIGhpMmMtPkluc3RhbmNlLT5DUjEgfD0gSTJDX0NSMV9UWERNQUVOOwotCiAgICAgcmV0dXJuIEhBTF9PSzsKICAgfQogICBlbHNlCkBAIC00MDQ4LDcgKzQxMDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBYZmVyT3B0aW9ucykKIHsKICAgLyogRGVjbGFyYXRpb24gb2YgdG1wIHRvIHByZXZlbnQgdW5kZWZpbmVkIGJlaGF2aW9yIG9mIHZvbGF0aWxlIHVzYWdlICovCi0gIHVpbnQzMl90IHRtcDsKKyAgRmxhZ1N0YXR1cyB0bXA7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0kyQ19UUkFOU0ZFUl9PUFRJT05TX1JFUVVFU1QoWGZlck9wdGlvbnMpKTsKQEAgLTQxMTAsNyArNDE3MCw3IEBACiAgICAgaGkyYy0+WGZlcklTUiAgICAgPSBJMkNfU2xhdmVfSVNSX0lUOwogCiAgICAgdG1wID0gX19IQUxfSTJDX0dFVF9GTEFHKGhpMmMsIEkyQ19GTEFHX0FERFIpOwotICAgIGlmICgodG1wICE9IFJFU0VUKSAmJiAoSTJDX0dFVF9ESVIoaGkyYykgPT0gSTJDX0RJUkVDVElPTl9UUkFOU01JVCkpCisgICAgaWYgKChJMkNfR0VUX0RJUihoaTJjKSA9PSBJMkNfRElSRUNUSU9OX1RSQU5TTUlUKSAmJiAodG1wICE9IFJFU0VUKSkKICAgICB7CiAgICAgICAvKiBDbGVhciBBRERSIGZsYWcgYWZ0ZXIgcHJlcGFyZSB0aGUgdHJhbnNmZXIgcGFyYW1ldGVycyAqLwogICAgICAgLyogVGhpcyBhY3Rpb24gd2lsbCBnZW5lcmF0ZSBhbiBhY2tub3dsZWRnZSB0byB0aGUgTWFzdGVyICovCkBAIC00MTQ4LDcgKzQyMDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgWGZlck9wdGlvbnMpCiB7CiAgIC8qIERlY2xhcmF0aW9uIG9mIHRtcCB0byBwcmV2ZW50IHVuZGVmaW5lZCBiZWhhdmlvciBvZiB2b2xhdGlsZSB1c2FnZSAqLwotICB1aW50MzJfdCB0bXA7CisgIEZsYWdTdGF0dXMgdG1wOwogICBIQUxfU3RhdHVzVHlwZURlZiBkbWF4ZmVyc3RhdHVzOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCkBAIC00MjkxLDcgKzQzNTEsNyBAQAogICAgIH0KIAogICAgIHRtcCA9IF9fSEFMX0kyQ19HRVRfRkxBRyhoaTJjLCBJMkNfRkxBR19BRERSKTsKLSAgICBpZiAoKHRtcCAhPSBSRVNFVCkgJiYgKEkyQ19HRVRfRElSKGhpMmMpID09IEkyQ19ESVJFQ1RJT05fVFJBTlNNSVQpKQorICAgIGlmICgoSTJDX0dFVF9ESVIoaGkyYykgPT0gSTJDX0RJUkVDVElPTl9UUkFOU01JVCkgJiYgKHRtcCAhPSBSRVNFVCkpCiAgICAgewogICAgICAgLyogQ2xlYXIgQUREUiBmbGFnIGFmdGVyIHByZXBhcmUgdGhlIHRyYW5zZmVyIHBhcmFtZXRlcnMgKi8KICAgICAgIC8qIFRoaXMgYWN0aW9uIHdpbGwgZ2VuZXJhdGUgYW4gYWNrbm93bGVkZ2UgdG8gdGhlIE1hc3RlciAqLwpAQCAtNDMwMSwxNSArNDM2MSwxNSBAQAogICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KICAgICBfX0hBTF9VTkxPQ0soaGkyYyk7CiAKKyAgICAvKiBFbmFibGUgRE1BIFJlcXVlc3QgKi8KKyAgICBoaTJjLT5JbnN0YW5jZS0+Q1IxIHw9IEkyQ19DUjFfUlhETUFFTjsKKwogICAgIC8qIE5vdGUgOiBUaGUgSTJDIGludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkIGFmdGVyIHVubG9ja2luZyBjdXJyZW50IHByb2Nlc3MKICAgICB0byBhdm9pZCB0aGUgcmlzayBvZiBJMkMgaW50ZXJydXB0IGhhbmRsZSBleGVjdXRpb24gYmVmb3JlIGN1cnJlbnQKICAgICBwcm9jZXNzIHVubG9jayAqLwogICAgIC8qIFJFbmFibGUgQUREUiBpbnRlcnJ1cHQgKi8KICAgICBJMkNfRW5hYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9SWF9JVCB8IEkyQ19YRkVSX0xJU1RFTl9JVCk7CiAKLSAgICAvKiBFbmFibGUgRE1BIFJlcXVlc3QgKi8KLSAgICBoaTJjLT5JbnN0YW5jZS0+Q1IxIHw9IEkyQ19DUjFfUlhETUFFTjsKLQogICAgIHJldHVybiBIQUxfT0s7CiAgIH0KICAgZWxzZQpAQCAtNDQ0Myw3ICs0NTAzLDcgQEAKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJMkMuCiAgICogQHJldHZhbCBOb25lCiAgICovCi12b2lkIEhBTF9JMkNfRVZfSVJRSGFuZGxlcihJMkNfSGFuZGxlVHlwZURlZiAqaGkyYykKK3ZvaWQgSEFMX0kyQ19FVl9JUlFIYW5kbGVyKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjKSAvKiBEZXJvZ2F0aW9uIE1JU1JBQzIwMTItUnVsZS04LjEzICovCiB7CiAgIC8qIEdldCBjdXJyZW50IElUIEZsYWdzIGFuZCBJVCBzb3VyY2VzIHZhbHVlICovCiAgIHVpbnQzMl90IGl0ZmxhZ3MgICA9IFJFQURfUkVHKGhpMmMtPkluc3RhbmNlLT5JU1IpOwpAQCAtNDY5Niw3ICs0NzU2LDcgQEAKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJMkMuCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KLUhBTF9JMkNfU3RhdGVUeXBlRGVmIEhBTF9JMkNfR2V0U3RhdGUoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMpCitIQUxfSTJDX1N0YXRlVHlwZURlZiBIQUxfSTJDX0dldFN0YXRlKGNvbnN0IEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjKQogewogICAvKiBSZXR1cm4gSTJDIGhhbmRsZSBzdGF0ZSAqLwogICByZXR1cm4gaGkyYy0+U3RhdGU7CkBAIC00NzA4LDcgKzQ3NjgsNyBAQAogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEkyQyBtb2R1bGUKICAgKiBAcmV0dmFsIEhBTCBtb2RlCiAgICovCi1IQUxfSTJDX01vZGVUeXBlRGVmIEhBTF9JMkNfR2V0TW9kZShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYykKK0hBTF9JMkNfTW9kZVR5cGVEZWYgSEFMX0kyQ19HZXRNb2RlKGNvbnN0IEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjKQogewogICByZXR1cm4gaGkyYy0+TW9kZTsKIH0KQEAgLTQ3MTksNyArNDc3OSw3IEBACiAgICogICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIEkyQy4KICAgKiBAcmV0dmFsIEkyQyBFcnJvciBDb2RlCiAgICovCi11aW50MzJfdCBIQUxfSTJDX0dldEVycm9yKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjKQordWludDMyX3QgSEFMX0kyQ19HZXRFcnJvcihjb25zdCBJMkNfSGFuZGxlVHlwZURlZiAqaGkyYykKIHsKICAgcmV0dXJuIGhpMmMtPkVycm9yQ29kZTsKIH0KQEAgLTQ4ODMsNiArNDk0MywxNDMgQEAKIH0KIAogLyoqCisgICogQGJyaWVmICBJbnRlcnJ1cHQgU3ViLVJvdXRpbmUgd2hpY2ggaGFuZGxlIHRoZSBJbnRlcnJ1cHQgRmxhZ3MgTWVtb3J5IE1vZGUgd2l0aCBJbnRlcnJ1cHQuCisgICogQHBhcmFtICBoaTJjIFBvaW50ZXIgdG8gYSBJMkNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIEkyQy4KKyAgKiBAcGFyYW0gIElURmxhZ3MgSW50ZXJydXB0IGZsYWdzIHRvIGhhbmRsZS4KKyAgKiBAcGFyYW0gIElUU291cmNlcyBJbnRlcnJ1cHQgc291cmNlcyBlbmFibGVkLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19NZW1fSVNSX0lUKHN0cnVjdCBfX0kyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MzJfdCBJVEZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IElUU291cmNlcykKK3sKKyAgdWludDMyX3QgZGlyZWN0aW9uID0gSTJDX0dFTkVSQVRFX1NUQVJUX1dSSVRFOworICB1aW50MzJfdCB0bXBJVEZsYWdzID0gSVRGbGFnczsKKworICAvKiBQcm9jZXNzIExvY2tlZCAqLworICBfX0hBTF9MT0NLKGhpMmMpOworCisgIGlmICgoSTJDX0NIRUNLX0ZMQUcodG1wSVRGbGFncywgSTJDX0ZMQUdfQUYpICE9IFJFU0VUKSAmJiBcCisgICAgICAoSTJDX0NIRUNLX0lUX1NPVVJDRShJVFNvdXJjZXMsIEkyQ19JVF9OQUNLSSkgIT0gUkVTRVQpKQorICB7CisgICAgLyogQ2xlYXIgTkFDSyBGbGFnICovCisgICAgX19IQUxfSTJDX0NMRUFSX0ZMQUcoaGkyYywgSTJDX0ZMQUdfQUYpOworCisgICAgLyogU2V0IGNvcnJlc3BvbmRpbmcgRXJyb3IgQ29kZSAqLworICAgIC8qIE5vIG5lZWQgdG8gZ2VuZXJhdGUgU1RPUCwgaXQgaXMgYXV0b21hdGljYWxseSBkb25lICovCisgICAgLyogRXJyb3IgY2FsbGJhY2sgd2lsbCBiZSBzZW5kIGR1cmluZyBzdG9wIGZsYWcgdHJlYXRtZW50ICovCisgICAgaGkyYy0+RXJyb3JDb2RlIHw9IEhBTF9JMkNfRVJST1JfQUY7CisKKyAgICAvKiBGbHVzaCBUWCByZWdpc3RlciAqLworICAgIEkyQ19GbHVzaF9UWERSKGhpMmMpOworICB9CisgIGVsc2UgaWYgKChJMkNfQ0hFQ0tfRkxBRyh0bXBJVEZsYWdzLCBJMkNfRkxBR19SWE5FKSAhPSBSRVNFVCkgJiYgXAorICAgICAgICAgICAoSTJDX0NIRUNLX0lUX1NPVVJDRShJVFNvdXJjZXMsIEkyQ19JVF9SWEkpICE9IFJFU0VUKSkKKyAgeworICAgIC8qIFJlbW92ZSBSWE5FIGZsYWcgb24gdGVtcG9yYXJ5IHZhcmlhYmxlIGFzIHJlYWQgZG9uZSAqLworICAgIHRtcElURmxhZ3MgJj0gfkkyQ19GTEFHX1JYTkU7CisKKyAgICAvKiBSZWFkIGRhdGEgZnJvbSBSWERSICovCisgICAgKmhpMmMtPnBCdWZmUHRyID0gKHVpbnQ4X3QpaGkyYy0+SW5zdGFuY2UtPlJYRFI7CisKKyAgICAvKiBJbmNyZW1lbnQgQnVmZmVyIHBvaW50ZXIgKi8KKyAgICBoaTJjLT5wQnVmZlB0cisrOworCisgICAgaGkyYy0+WGZlclNpemUtLTsKKyAgICBoaTJjLT5YZmVyQ291bnQtLTsKKyAgfQorICBlbHNlIGlmICgoSTJDX0NIRUNLX0ZMQUcodG1wSVRGbGFncywgSTJDX0ZMQUdfVFhJUykgIT0gUkVTRVQpICYmIFwKKyAgICAgICAgICAgKEkyQ19DSEVDS19JVF9TT1VSQ0UoSVRTb3VyY2VzLCBJMkNfSVRfVFhJKSAhPSBSRVNFVCkpCisgIHsKKyAgICBpZiAoaGkyYy0+TWVtYWRkcmVzcyA9PSAweEZGRkZGRkZGVSkKKyAgICB7CisgICAgICAvKiBXcml0ZSBkYXRhIHRvIFRYRFIgKi8KKyAgICAgIGhpMmMtPkluc3RhbmNlLT5UWERSID0gKmhpMmMtPnBCdWZmUHRyOworCisgICAgICAvKiBJbmNyZW1lbnQgQnVmZmVyIHBvaW50ZXIgKi8KKyAgICAgIGhpMmMtPnBCdWZmUHRyKys7CisKKyAgICAgIGhpMmMtPlhmZXJTaXplLS07CisgICAgICBoaTJjLT5YZmVyQ291bnQtLTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIFdyaXRlIExTQiBwYXJ0IG9mIE1lbW9yeSBBZGRyZXNzICovCisgICAgICBoaTJjLT5JbnN0YW5jZS0+VFhEUiA9IGhpMmMtPk1lbWFkZHJlc3M7CisKKyAgICAgIC8qIFJlc2V0IE1lbWFkZHJlc3MgY29udGVudCAqLworICAgICAgaGkyYy0+TWVtYWRkcmVzcyA9IDB4RkZGRkZGRkZVOworICAgIH0KKyAgfQorICBlbHNlIGlmICgoSTJDX0NIRUNLX0ZMQUcodG1wSVRGbGFncywgSTJDX0ZMQUdfVENSKSAhPSBSRVNFVCkgJiYgXAorICAgICAgICAgICAoSTJDX0NIRUNLX0lUX1NPVVJDRShJVFNvdXJjZXMsIEkyQ19JVF9UQ0kpICE9IFJFU0VUKSkKKyAgeworICAgIGlmICgoaGkyYy0+WGZlckNvdW50ICE9IDBVKSAmJiAoaGkyYy0+WGZlclNpemUgPT0gMFUpKQorICAgIHsKKyAgICAgIGlmIChoaTJjLT5YZmVyQ291bnQgPiBNQVhfTkJZVEVfU0laRSkKKyAgICAgIHsKKyAgICAgICAgaGkyYy0+WGZlclNpemUgPSBNQVhfTkJZVEVfU0laRTsKKyAgICAgICAgSTJDX1RyYW5zZmVyQ29uZmlnKGhpMmMsICh1aW50MTZfdCloaTJjLT5EZXZhZGRyZXNzLCAodWludDhfdCloaTJjLT5YZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19SRUxPQURfTU9ERSwgSTJDX05PX1NUQVJUU1RPUCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGhpMmMtPlhmZXJTaXplID0gaGkyYy0+WGZlckNvdW50OworICAgICAgICBJMkNfVHJhbnNmZXJDb25maWcoaGkyYywgKHVpbnQxNl90KWhpMmMtPkRldmFkZHJlc3MsICh1aW50OF90KWhpMmMtPlhmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0FVVE9FTkRfTU9ERSwgSTJDX05PX1NUQVJUU1RPUCk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBXcm9uZyBzaXplIFN0YXR1cyByZWdhcmRpbmcgVENSIGZsYWcgZXZlbnQgKi8KKyAgICAgIC8qIENhbGwgdGhlIGNvcnJlc3BvbmRpbmcgY2FsbGJhY2sgdG8gaW5mb3JtIHVwcGVyIGxheWVyIG9mIEVuZCBvZiBUcmFuc2ZlciAqLworICAgICAgSTJDX0lURXJyb3IoaGkyYywgSEFMX0kyQ19FUlJPUl9TSVpFKTsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoKEkyQ19DSEVDS19GTEFHKHRtcElURmxhZ3MsIEkyQ19GTEFHX1RDKSAhPSBSRVNFVCkgJiYgXAorICAgICAgICAgICAoSTJDX0NIRUNLX0lUX1NPVVJDRShJVFNvdXJjZXMsIEkyQ19JVF9UQ0kpICE9IFJFU0VUKSkKKyAgeworICAgIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlgpCisgICAgeworICAgICAgZGlyZWN0aW9uID0gSTJDX0dFTkVSQVRFX1NUQVJUX1JFQUQ7CisgICAgfQorCisgICAgaWYgKGhpMmMtPlhmZXJDb3VudCA+IE1BWF9OQllURV9TSVpFKQorICAgIHsKKyAgICAgIGhpMmMtPlhmZXJTaXplID0gTUFYX05CWVRFX1NJWkU7CisKKyAgICAgIC8qIFNldCBOQllURVMgdG8gd3JpdGUgYW5kIHJlbG9hZCBpZiBoaTJjLT5YZmVyQ291bnQgPiBNQVhfTkJZVEVfU0laRSBhbmQgZ2VuZXJhdGUgUkVTVEFSVCAqLworICAgICAgSTJDX1RyYW5zZmVyQ29uZmlnKGhpMmMsICh1aW50MTZfdCloaTJjLT5EZXZhZGRyZXNzLCAodWludDhfdCloaTJjLT5YZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfUkVMT0FEX01PREUsIGRpcmVjdGlvbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBoaTJjLT5YZmVyU2l6ZSA9IGhpMmMtPlhmZXJDb3VudDsKKworICAgICAgLyogU2V0IE5CWVRFUyB0byB3cml0ZSBhbmQgZ2VuZXJhdGUgUkVTVEFSVCAqLworICAgICAgSTJDX1RyYW5zZmVyQ29uZmlnKGhpMmMsICh1aW50MTZfdCloaTJjLT5EZXZhZGRyZXNzLCAodWludDhfdCloaTJjLT5YZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQVVUT0VORF9NT0RFLCBkaXJlY3Rpb24pOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgIH0KKworICBpZiAoKEkyQ19DSEVDS19GTEFHKHRtcElURmxhZ3MsIEkyQ19GTEFHX1NUT1BGKSAhPSBSRVNFVCkgJiYgXAorICAgICAgKEkyQ19DSEVDS19JVF9TT1VSQ0UoSVRTb3VyY2VzLCBJMkNfSVRfU1RPUEkpICE9IFJFU0VUKSkKKyAgeworICAgIC8qIENhbGwgSTJDIE1hc3RlciBjb21wbGV0ZSBwcm9jZXNzICovCisgICAgSTJDX0lUTWFzdGVyQ3BsdChoaTJjLCB0bXBJVEZsYWdzKTsKKyAgfQorCisgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgX19IQUxfVU5MT0NLKGhpMmMpOworCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgogICAqIEBicmllZiAgSW50ZXJydXB0IFN1Yi1Sb3V0aW5lIHdoaWNoIGhhbmRsZSB0aGUgSW50ZXJydXB0IEZsYWdzIFNsYXZlIE1vZGUgd2l0aCBJbnRlcnJ1cHQuCiAgICogQHBhcmFtICBoaTJjIFBvaW50ZXIgdG8gYSBJMkNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIEkyQy4KQEAgLTUxNjQsNiArNTM2MSwxNDUgQEAKIH0KIAogLyoqCisgICogQGJyaWVmICBJbnRlcnJ1cHQgU3ViLVJvdXRpbmUgd2hpY2ggaGFuZGxlIHRoZSBJbnRlcnJ1cHQgRmxhZ3MgTWVtb3J5IE1vZGUgd2l0aCBETUEuCisgICogQHBhcmFtICBoaTJjIFBvaW50ZXIgdG8gYSBJMkNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIEkyQy4KKyAgKiBAcGFyYW0gIElURmxhZ3MgSW50ZXJydXB0IGZsYWdzIHRvIGhhbmRsZS4KKyAgKiBAcGFyYW0gIElUU291cmNlcyBJbnRlcnJ1cHQgc291cmNlcyBlbmFibGVkLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19NZW1fSVNSX0RNQShzdHJ1Y3QgX19JMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDMyX3QgSVRGbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgSVRTb3VyY2VzKQoreworICB1aW50MzJfdCBkaXJlY3Rpb24gPSBJMkNfR0VORVJBVEVfU1RBUlRfV1JJVEU7CisKKyAgLyogUHJvY2VzcyBMb2NrZWQgKi8KKyAgX19IQUxfTE9DSyhoaTJjKTsKKworICBpZiAoKEkyQ19DSEVDS19GTEFHKElURmxhZ3MsIEkyQ19GTEFHX0FGKSAhPSBSRVNFVCkgJiYgXAorICAgICAgKEkyQ19DSEVDS19JVF9TT1VSQ0UoSVRTb3VyY2VzLCBJMkNfSVRfTkFDS0kpICE9IFJFU0VUKSkKKyAgeworICAgIC8qIENsZWFyIE5BQ0sgRmxhZyAqLworICAgIF9fSEFMX0kyQ19DTEVBUl9GTEFHKGhpMmMsIEkyQ19GTEFHX0FGKTsKKworICAgIC8qIFNldCBjb3JyZXNwb25kaW5nIEVycm9yIENvZGUgKi8KKyAgICBoaTJjLT5FcnJvckNvZGUgfD0gSEFMX0kyQ19FUlJPUl9BRjsKKworICAgIC8qIE5vIG5lZWQgdG8gZ2VuZXJhdGUgU1RPUCwgaXQgaXMgYXV0b21hdGljYWxseSBkb25lICovCisgICAgLyogQnV0IGVuYWJsZSBTVE9QIGludGVycnVwdCwgdG8gdHJlYXQgaXQgKi8KKyAgICAvKiBFcnJvciBjYWxsYmFjayB3aWxsIGJlIHNlbmQgZHVyaW5nIHN0b3AgZmxhZyB0cmVhdG1lbnQgKi8KKyAgICBJMkNfRW5hYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9DUExUX0lUKTsKKworICAgIC8qIEZsdXNoIFRYIHJlZ2lzdGVyICovCisgICAgSTJDX0ZsdXNoX1RYRFIoaGkyYyk7CisgIH0KKyAgZWxzZSBpZiAoKEkyQ19DSEVDS19GTEFHKElURmxhZ3MsIEkyQ19GTEFHX1RYSVMpICE9IFJFU0VUKSAmJiBcCisgICAgICAgICAgIChJMkNfQ0hFQ0tfSVRfU09VUkNFKElUU291cmNlcywgSTJDX0lUX1RYSSkgIT0gUkVTRVQpKQorICB7CisgICAgLyogV3JpdGUgTFNCIHBhcnQgb2YgTWVtb3J5IEFkZHJlc3MgKi8KKyAgICBoaTJjLT5JbnN0YW5jZS0+VFhEUiA9IGhpMmMtPk1lbWFkZHJlc3M7CisKKyAgICAvKiBSZXNldCBNZW1hZGRyZXNzIGNvbnRlbnQgKi8KKyAgICBoaTJjLT5NZW1hZGRyZXNzID0gMHhGRkZGRkZGRlU7CisgIH0KKyAgZWxzZSBpZiAoKEkyQ19DSEVDS19GTEFHKElURmxhZ3MsIEkyQ19GTEFHX1RDUikgIT0gUkVTRVQpICYmIFwKKyAgICAgICAgICAgKEkyQ19DSEVDS19JVF9TT1VSQ0UoSVRTb3VyY2VzLCBJMkNfSVRfVENJKSAhPSBSRVNFVCkpCisgIHsKKyAgICAvKiBFbmFibGUgb25seSBFcnJvciBpbnRlcnJ1cHQgKi8KKyAgICBJMkNfRW5hYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9FUlJPUl9JVCk7CisKKyAgICBpZiAoaGkyYy0+WGZlckNvdW50ICE9IDBVKQorICAgIHsKKyAgICAgIC8qIFByZXBhcmUgdGhlIG5ldyBYZmVyU2l6ZSB0byB0cmFuc2ZlciAqLworICAgICAgaWYgKGhpMmMtPlhmZXJDb3VudCA+IE1BWF9OQllURV9TSVpFKQorICAgICAgeworICAgICAgICBoaTJjLT5YZmVyU2l6ZSA9IE1BWF9OQllURV9TSVpFOworICAgICAgICBJMkNfVHJhbnNmZXJDb25maWcoaGkyYywgKHVpbnQxNl90KWhpMmMtPkRldmFkZHJlc3MsICh1aW50OF90KWhpMmMtPlhmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX1JFTE9BRF9NT0RFLCBJMkNfTk9fU1RBUlRTVE9QKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaGkyYy0+WGZlclNpemUgPSBoaTJjLT5YZmVyQ291bnQ7CisgICAgICAgIEkyQ19UcmFuc2ZlckNvbmZpZyhoaTJjLCAodWludDE2X3QpaGkyYy0+RGV2YWRkcmVzcywgKHVpbnQ4X3QpaGkyYy0+WGZlclNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQVVUT0VORF9NT0RFLCBJMkNfTk9fU1RBUlRTVE9QKTsKKyAgICAgIH0KKworICAgICAgLyogVXBkYXRlIFhmZXJDb3VudCB2YWx1ZSAqLworICAgICAgaGkyYy0+WGZlckNvdW50IC09IGhpMmMtPlhmZXJTaXplOworCisgICAgICAvKiBFbmFibGUgRE1BIFJlcXVlc3QgKi8KKyAgICAgIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlgpCisgICAgICB7CisgICAgICAgIGhpMmMtPkluc3RhbmNlLT5DUjEgfD0gSTJDX0NSMV9SWERNQUVOOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBoaTJjLT5JbnN0YW5jZS0+Q1IxIHw9IEkyQ19DUjFfVFhETUFFTjsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIFdyb25nIHNpemUgU3RhdHVzIHJlZ2FyZGluZyBUQ1IgZmxhZyBldmVudCAqLworICAgICAgLyogQ2FsbCB0aGUgY29ycmVzcG9uZGluZyBjYWxsYmFjayB0byBpbmZvcm0gdXBwZXIgbGF5ZXIgb2YgRW5kIG9mIFRyYW5zZmVyICovCisgICAgICBJMkNfSVRFcnJvcihoaTJjLCBIQUxfSTJDX0VSUk9SX1NJWkUpOworICAgIH0KKyAgfQorICBlbHNlIGlmICgoSTJDX0NIRUNLX0ZMQUcoSVRGbGFncywgSTJDX0ZMQUdfVEMpICE9IFJFU0VUKSAmJiBcCisgICAgICAgICAgIChJMkNfQ0hFQ0tfSVRfU09VUkNFKElUU291cmNlcywgSTJDX0lUX1RDSSkgIT0gUkVTRVQpKQorICB7CisgICAgaWYgKGhpMmMtPlN0YXRlID09IEhBTF9JMkNfU1RBVEVfQlVTWV9SWCkKKyAgICB7CisgICAgICBkaXJlY3Rpb24gPSBJMkNfR0VORVJBVEVfU1RBUlRfUkVBRDsKKyAgICB9CisKKyAgICBpZiAoaGkyYy0+WGZlckNvdW50ID4gTUFYX05CWVRFX1NJWkUpCisgICAgeworICAgICAgaGkyYy0+WGZlclNpemUgPSBNQVhfTkJZVEVfU0laRTsKKworICAgICAgLyogU2V0IE5CWVRFUyB0byB3cml0ZSBhbmQgcmVsb2FkIGlmIGhpMmMtPlhmZXJDb3VudCA+IE1BWF9OQllURV9TSVpFIGFuZCBnZW5lcmF0ZSBSRVNUQVJUICovCisgICAgICBJMkNfVHJhbnNmZXJDb25maWcoaGkyYywgKHVpbnQxNl90KWhpMmMtPkRldmFkZHJlc3MsICh1aW50OF90KWhpMmMtPlhmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19SRUxPQURfTU9ERSwgZGlyZWN0aW9uKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGhpMmMtPlhmZXJTaXplID0gaGkyYy0+WGZlckNvdW50OworCisgICAgICAvKiBTZXQgTkJZVEVTIHRvIHdyaXRlIGFuZCBnZW5lcmF0ZSBSRVNUQVJUICovCisgICAgICBJMkNfVHJhbnNmZXJDb25maWcoaGkyYywgKHVpbnQxNl90KWhpMmMtPkRldmFkZHJlc3MsICh1aW50OF90KWhpMmMtPlhmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19BVVRPRU5EX01PREUsIGRpcmVjdGlvbik7CisgICAgfQorCisgICAgLyogVXBkYXRlIFhmZXJDb3VudCB2YWx1ZSAqLworICAgIGhpMmMtPlhmZXJDb3VudCAtPSBoaTJjLT5YZmVyU2l6ZTsKKworICAgIC8qIEVuYWJsZSBETUEgUmVxdWVzdCAqLworICAgIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlgpCisgICAgeworICAgICAgaGkyYy0+SW5zdGFuY2UtPkNSMSB8PSBJMkNfQ1IxX1JYRE1BRU47CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBoaTJjLT5JbnN0YW5jZS0+Q1IxIHw9IEkyQ19DUjFfVFhETUFFTjsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoKEkyQ19DSEVDS19GTEFHKElURmxhZ3MsIEkyQ19GTEFHX1NUT1BGKSAhPSBSRVNFVCkgJiYgXAorICAgICAgICAgICAoSTJDX0NIRUNLX0lUX1NPVVJDRShJVFNvdXJjZXMsIEkyQ19JVF9TVE9QSSkgIT0gUkVTRVQpKQorICB7CisgICAgLyogQ2FsbCBJMkMgTWFzdGVyIGNvbXBsZXRlIHByb2Nlc3MgKi8KKyAgICBJMkNfSVRNYXN0ZXJDcGx0KGhpMmMsIElURmxhZ3MpOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgfQorCisgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgX19IQUxfVU5MT0NLKGhpMmMpOworCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgogICAqIEBicmllZiAgSW50ZXJydXB0IFN1Yi1Sb3V0aW5lIHdoaWNoIGhhbmRsZSB0aGUgSW50ZXJydXB0IEZsYWdzIFNsYXZlIE1vZGUgd2l0aCBETUEuCiAgICogQHBhcmFtICBoaTJjIFBvaW50ZXIgdG8gYSBJMkNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIEkyQy4KQEAgLTUyMDQsNyArNTU0MCw3IEBACiAgICAgICB7CiAgICAgICAgIGlmIChJMkNfQ0hFQ0tfSVRfU09VUkNFKElUU291cmNlcywgSTJDX0NSMV9SWERNQUVOKSAhPSBSRVNFVCkKICAgICAgICAgewotICAgICAgICAgIGlmIChfX0hBTF9ETUFfR0VUX0NPVU5URVIoaGkyYy0+aGRtYXJ4KSA9PSAwVSkKKyAgICAgICAgICBpZiAoSTJDX0dFVF9ETUFfUkVNQUlOX0RBVEEoaGkyYy0+aGRtYXJ4KSA9PSAwVSkKICAgICAgICAgICB7CiAgICAgICAgICAgICB0cmVhdGRtYW5hY2sgPSAxVTsKICAgICAgICAgICB9CkBAIC01MjE2LDcgKzU1NTIsNyBAQAogICAgICAgewogICAgICAgICBpZiAoSTJDX0NIRUNLX0lUX1NPVVJDRShJVFNvdXJjZXMsIEkyQ19DUjFfVFhETUFFTikgIT0gUkVTRVQpCiAgICAgICAgIHsKLSAgICAgICAgICBpZiAoX19IQUxfRE1BX0dFVF9DT1VOVEVSKGhpMmMtPmhkbWF0eCkgPT0gMFUpCisgICAgICAgICAgaWYgKEkyQ19HRVRfRE1BX1JFTUFJTl9EQVRBKGhpMmMtPmhkbWF0eCkgPT0gMFUpCiAgICAgICAgICAgewogICAgICAgICAgICAgdHJlYXRkbWFuYWNrID0gMVU7CiAgICAgICAgICAgfQpAQCAtNTgyNyw3ICs2MTYzLDcgQEAKIAogICAgIGlmIChoaTJjLT5oZG1hdHggIT0gTlVMTCkKICAgICB7Ci0gICAgICBoaTJjLT5YZmVyQ291bnQgPSAodWludDE2X3QpX19IQUxfRE1BX0dFVF9DT1VOVEVSKGhpMmMtPmhkbWF0eCk7CisgICAgICBoaTJjLT5YZmVyQ291bnQgPSAodWludDE2X3QpSTJDX0dFVF9ETUFfUkVNQUlOX0RBVEEoaGkyYy0+aGRtYXR4KTsKICAgICB9CiAgIH0KICAgZWxzZSBpZiAoSTJDX0NIRUNLX0lUX1NPVVJDRSh0bXBjcjF2YWx1ZSwgSTJDX0NSMV9SWERNQUVOKSAhPSBSRVNFVCkKQEAgLTU4MzcsNyArNjE3Myw3IEBACiAKICAgICBpZiAoaGkyYy0+aGRtYXJ4ICE9IE5VTEwpCiAgICAgewotICAgICAgaGkyYy0+WGZlckNvdW50ID0gKHVpbnQxNl90KV9fSEFMX0RNQV9HRVRfQ09VTlRFUihoaTJjLT5oZG1hcngpOworICAgICAgaGkyYy0+WGZlckNvdW50ID0gKHVpbnQxNl90KUkyQ19HRVRfRE1BX1JFTUFJTl9EQVRBKGhpMmMtPmhkbWFyeCk7CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTU5OTgsNiArNjMzNCw3IEBACiBzdGF0aWMgdm9pZCBJMkNfSVRFcnJvcihJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDMyX3QgRXJyb3JDb2RlKQogewogICBIQUxfSTJDX1N0YXRlVHlwZURlZiB0bXBzdGF0ZSA9IGhpMmMtPlN0YXRlOworCiAgIHVpbnQzMl90IHRtcHByZXZpb3Vzc3RhdGU7CiAKICAgLyogUmVzZXQgaGFuZGxlIHBhcmFtZXRlcnMgKi8KQEAgLTYwMjUsMTggKzYzNjIsMzYgQEAKICAgICAvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCiAgICAgSTJDX0Rpc2FibGVfSVJRKGhpMmMsIEkyQ19YRkVSX0xJU1RFTl9JVCB8IEkyQ19YRkVSX1JYX0lUIHwgSTJDX1hGRVJfVFhfSVQpOwogCisgICAgLyogRmx1c2ggVFggcmVnaXN0ZXIgKi8KKyAgICBJMkNfRmx1c2hfVFhEUihoaTJjKTsKKwogICAgIC8qIElmIHN0YXRlIGlzIGFuIGFib3J0IHRyZWF0bWVudCBvbiBnb2luZywgZG9uJ3QgY2hhbmdlIHN0YXRlICovCiAgICAgLyogVGhpcyBjaGFuZ2Ugd2lsbCBiZSBkbyBsYXRlciAqLwogICAgIGlmIChoaTJjLT5TdGF0ZSAhPSBIQUxfSTJDX1NUQVRFX0FCT1JUKQogICAgIHsKICAgICAgIC8qIFNldCBIQUxfSTJDX1NUQVRFX1JFQURZICovCiAgICAgICBoaTJjLT5TdGF0ZSAgICAgICAgID0gSEFMX0kyQ19TVEFURV9SRUFEWTsKKworICAgICAgLyogQ2hlY2sgaWYgYSBTVE9QRiBpcyBkZXRlY3RlZCAqLworICAgICAgaWYgKF9fSEFMX0kyQ19HRVRfRkxBRyhoaTJjLCBJMkNfRkxBR19TVE9QRikgPT0gU0VUKQorICAgICAgeworICAgICAgICBpZiAoX19IQUxfSTJDX0dFVF9GTEFHKGhpMmMsIEkyQ19GTEFHX0FGKSA9PSBTRVQpCisgICAgICAgIHsKKyAgICAgICAgICBfX0hBTF9JMkNfQ0xFQVJfRkxBRyhoaTJjLCBJMkNfRkxBR19BRik7CisgICAgICAgICAgaGkyYy0+RXJyb3JDb2RlIHw9IEhBTF9JMkNfRVJST1JfQUY7CisgICAgICAgIH0KKworICAgICAgICAvKiBDbGVhciBTVE9QIEZsYWcgKi8KKyAgICAgICAgX19IQUxfSTJDX0NMRUFSX0ZMQUcoaGkyYywgSTJDX0ZMQUdfU1RPUEYpOworICAgICAgfQorCiAgICAgfQogICAgIGhpMmMtPlhmZXJJU1IgICAgICAgPSBOVUxMOwogICB9CiAKICAgLyogQWJvcnQgRE1BIFRYIHRyYW5zZmVyIGlmIGFueSAqLwogICB0bXBwcmV2aW91c3N0YXRlID0gaGkyYy0+UHJldmlvdXNTdGF0ZTsKKwogICBpZiAoKGhpMmMtPmhkbWF0eCAhPSBOVUxMKSAmJiAoKHRtcHByZXZpb3Vzc3RhdGUgPT0gSTJDX1NUQVRFX01BU1RFUl9CVVNZX1RYKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG1wcHJldmlvdXNzdGF0ZSA9PSBJMkNfU1RBVEVfU0xBVkVfQlVTWV9UWCkpKQogICB7CkBAIC02MjExLDYgKzY1NjYsNyBAQAogICB9CiB9CiAKKwogLyoqCiAgICogQGJyaWVmICBETUEgSTJDIHNsYXZlIHRyYW5zbWl0IHByb2Nlc3MgY29tcGxldGUgY2FsbGJhY2suCiAgICogQHBhcmFtICBoZG1hIERNQSBoYW5kbGUKQEAgLTYyMzksNiArNjU5NSw3IEBACiAgIH0KIH0KIAorCiAvKioKICAgKiBAYnJpZWYgRE1BIEkyQyBtYXN0ZXIgcmVjZWl2ZSBwcm9jZXNzIGNvbXBsZXRlIGNhbGxiYWNrLgogICAqIEBwYXJhbSAgaGRtYSBETUEgaGFuZGxlCkBAIC02Mjg5LDYgKzY2NDYsNyBAQAogICB9CiB9CiAKKwogLyoqCiAgICogQGJyaWVmICBETUEgSTJDIHNsYXZlIHJlY2VpdmUgcHJvY2VzcyBjb21wbGV0ZSBjYWxsYmFjay4KICAgKiBAcGFyYW0gIGhkbWEgRE1BIGhhbmRsZQpAQCAtNjMwMCw3ICs2NjU4LDcgQEAKICAgSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMgPSAoSTJDX0hhbmRsZVR5cGVEZWYgKikoKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQpOwogICB1aW50MzJfdCB0bXBvcHRpb25zID0gaGkyYy0+WGZlck9wdGlvbnM7CiAKLSAgaWYgKChfX0hBTF9ETUFfR0VUX0NPVU5URVIoaGkyYy0+aGRtYXJ4KSA9PSAwVSkgJiYgXAorICBpZiAoKEkyQ19HRVRfRE1BX1JFTUFJTl9EQVRBKGhpMmMtPmhkbWFyeCkgPT0gMFUpICYmIFwKICAgICAgICh0bXBvcHRpb25zICE9IEkyQ19OT19PUFRJT05fRlJBTUUpKQogICB7CiAgICAgLyogRGlzYWJsZSBETUEgUmVxdWVzdCAqLwpAQCAtNjMxNyw2ICs2Njc1LDcgQEAKICAgfQogfQogCisKIC8qKgogICAqIEBicmllZiAgRE1BIEkyQyBjb21tdW5pY2F0aW9uIGVycm9yIGNhbGxiYWNrLgogICAqIEBwYXJhbSBoZG1hIERNQSBoYW5kbGUKQEAgLTYzMzQsNiArNjY5Myw3IEBACiAgIEkyQ19JVEVycm9yKGhpMmMsIEhBTF9JMkNfRVJST1JfRE1BKTsKIH0KIAorCiAvKioKICAgKiBAYnJpZWYgRE1BIEkyQyBjb21tdW5pY2F0aW9uIGFib3J0IGNhbGxiYWNrCiAgICogICAgICAgIChUbyBiZSBjYWxsZWQgYXQgZW5kIG9mIERNQSBBYm9ydCBwcm9jZWR1cmUpLgpAQCAtNjM1OCw2ICs2NzE4LDcgQEAKICAgSTJDX1RyZWF0RXJyb3JDYWxsYmFjayhoaTJjKTsKIH0KIAorCiAvKioKICAgKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBJMkMgQ29tbXVuaWNhdGlvbiBUaW1lb3V0LiBJdCB3YWl0cwogICAqICAgICAgICAgICAgICAgIHVudGlsIGEgZmxhZyBpcyBubyBsb25nZXIgaW4gdGhlIHNwZWNpZmllZCBzdGF0dXMuCkBAIC02NTA2LDEzICs2ODY3LDIyIEBACiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7CisgICAgICAgIGlmIChfX0hBTF9JMkNfR0VUX0ZMQUcoaGkyYywgSTJDX0ZMQUdfQUYpID09IFNFVCkKKyAgICAgICAgeworICAgICAgICAgIF9fSEFMX0kyQ19DTEVBUl9GTEFHKGhpMmMsIEkyQ19GTEFHX0FGKTsKKyAgICAgICAgICBoaTJjLT5FcnJvckNvZGUgPSBIQUxfSTJDX0VSUk9SX0FGOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGhpMmMtPkVycm9yQ29kZSA9IEhBTF9JMkNfRVJST1JfTk9ORTsKKyAgICAgICAgfQorCiAgICAgICAgIC8qIENsZWFyIFNUT1AgRmxhZyAqLwogICAgICAgICBfX0hBTF9JMkNfQ0xFQVJfRkxBRyhoaTJjLCBJMkNfRkxBR19TVE9QRik7CiAKICAgICAgICAgLyogQ2xlYXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCiAgICAgICAgIEkyQ19SRVNFVF9DUjIoaGkyYyk7CiAKLSAgICAgICAgaGkyYy0+RXJyb3JDb2RlID0gSEFMX0kyQ19FUlJPUl9OT05FOwogICAgICAgICBoaTJjLT5TdGF0ZSA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7CiAgICAgICAgIGhpMmMtPk1vZGUgPSBIQUxfSTJDX01PREVfTk9ORTsKIApAQCAtNjU1NCwxNSArNjkyNCwxNSBAQAogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIHVpbnQzMl90IGl0ZmxhZyAgID0gaGkyYy0+SW5zdGFuY2UtPklTUjsKICAgdWludDMyX3QgZXJyb3JfY29kZSA9IDA7CisgIHVpbnQzMl90IHRpY2tzdGFydCA9IFRpY2tzdGFydDsKKyAgdWludDMyX3QgdG1wMTsKKyAgSEFMX0kyQ19Nb2RlVHlwZURlZiB0bXAyOwogCiAgIGlmIChIQUxfSVNfQklUX1NFVChpdGZsYWcsIEkyQ19GTEFHX0FGKSkKICAgewotICAgIC8qIEluIGNhc2Ugb2YgU29mdCBFbmQgY29uZGl0aW9uLCBnZW5lcmF0ZSB0aGUgU1RPUCBjb25kaXRpb24gKi8KLSAgICBpZiAoSTJDX0dFVF9TVE9QX01PREUoaGkyYykgIT0gSTJDX0FVVE9FTkRfTU9ERSkKLSAgICB7Ci0gICAgICAvKiBHZW5lcmF0ZSBTdG9wICovCi0gICAgICBoaTJjLT5JbnN0YW5jZS0+Q1IyIHw9IEkyQ19DUjJfU1RPUDsKLSAgICB9CisgICAgLyogQ2xlYXIgTkFDS0YgRmxhZyAqLworICAgIF9fSEFMX0kyQ19DTEVBUl9GTEFHKGhpMmMsIEkyQ19GTEFHX0FGKTsKKwogICAgIC8qIFdhaXQgdW50aWwgU1RPUCBGbGFnIGlzIHNldCBvciB0aW1lb3V0IG9jY3VycmVkICovCiAgICAgLyogQXV0b0VuZCBzaG91bGQgYmUgaW5pdGlhdGUgYWZ0ZXIgQUYgKi8KICAgICB3aGlsZSAoKF9fSEFMX0kyQ19HRVRfRkxBRyhoaTJjLCBJMkNfRkxBR19TVE9QRikgPT0gUkVTRVQpICYmIChzdGF0dXMgPT0gSEFMX09LKSkKQEAgLTY1NzAsMTEgKzY5NDAsMzUgQEAKICAgICAgIC8qIENoZWNrIGZvciB0aGUgVGltZW91dCAqLwogICAgICAgaWYgKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkKICAgICAgIHsKLSAgICAgICAgaWYgKCgoSEFMX0dldFRpY2soKSAtIFRpY2tzdGFydCkgPiBUaW1lb3V0KSB8fCAoVGltZW91dCA9PSAwVSkpCisgICAgICAgIGlmICgoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gVGltZW91dCkgfHwgKFRpbWVvdXQgPT0gMFUpKQogICAgICAgICB7Ci0gICAgICAgICAgZXJyb3JfY29kZSB8PSBIQUxfSTJDX0VSUk9SX1RJTUVPVVQ7CisgICAgICAgICAgdG1wMSA9ICh1aW50MzJfdCkoaGkyYy0+SW5zdGFuY2UtPkNSMiAmIEkyQ19DUjJfU1RPUCk7CisgICAgICAgICAgdG1wMiA9IGhpMmMtPk1vZGU7CiAKLSAgICAgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CisgICAgICAgICAgLyogSW4gY2FzZSBvZiBJMkMgc3RpbGwgYnVzeSwgdHJ5IHRvIHJlZ2VuZXJhdGUgYSBTVE9QIG1hbnVhbGx5ICovCisgICAgICAgICAgaWYgKChfX0hBTF9JMkNfR0VUX0ZMQUcoaGkyYywgSTJDX0ZMQUdfQlVTWSkgIT0gUkVTRVQpICYmIFwKKyAgICAgICAgICAgICAgKHRtcDEgIT0gSTJDX0NSMl9TVE9QKSAmJiBcCisgICAgICAgICAgICAgICh0bXAyICE9IEhBTF9JMkNfTU9ERV9TTEFWRSkpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogR2VuZXJhdGUgU3RvcCAqLworICAgICAgICAgICAgaGkyYy0+SW5zdGFuY2UtPkNSMiB8PSBJMkNfQ1IyX1NUT1A7CisKKyAgICAgICAgICAgIC8qIFVwZGF0ZSBUaWNrIHdpdGggbmV3IHJlZmVyZW5jZSAqLworICAgICAgICAgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB3aGlsZSAoX19IQUxfSTJDX0dFVF9GTEFHKGhpMmMsIEkyQ19GTEFHX1NUT1BGKSA9PSBSRVNFVCkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBDaGVjayBmb3IgdGhlIFRpbWVvdXQgKi8KKyAgICAgICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBJMkNfVElNRU9VVF9TVE9QRikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJyb3JfY29kZSB8PSBIQUxfSTJDX0VSUk9SX1RJTUVPVVQ7CisKKyAgICAgICAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOworCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQogICAgIH0KQEAgLTY1ODYsOSArNjk4MCw2IEBACiAgICAgICBfX0hBTF9JMkNfQ0xFQVJfRkxBRyhoaTJjLCBJMkNfRkxBR19TVE9QRik7CiAgICAgfQogCi0gICAgLyogQ2xlYXIgTkFDS0YgRmxhZyAqLwotICAgIF9fSEFMX0kyQ19DTEVBUl9GTEFHKGhpMmMsIEkyQ19GTEFHX0FGKTsKLQogICAgIGVycm9yX2NvZGUgfD0gSEFMX0kyQ19FUlJPUl9BRjsKIAogICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKQEAgLTY1OTcsNyArNjk4OCw3IEBACiAgIC8qIFJlZnJlc2ggQ29udGVudCBvZiBTdGF0dXMgcmVnaXN0ZXIgKi8KICAgaXRmbGFnID0gaGkyYy0+SW5zdGFuY2UtPklTUjsKIAotICAvKiBUaGVuIHZlcmlmeSBpZiBhbiBhZGRpdGlvbm5hbCBlcnJvcnMgb2NjdXJzICovCisgIC8qIFRoZW4gdmVyaWZ5IGlmIGFuIGFkZGl0aW9uYWwgZXJyb3JzIG9jY3VycyAqLwogICAvKiBDaGVjayBpZiBhIEJ1cyBlcnJvciBvY2N1cnJlZCAqLwogICBpZiAoSEFMX0lTX0JJVF9TRVQoaXRmbGFnLCBJMkNfRkxBR19CRVJSKSkKICAgewpAQCAtNjY0OCw3ICs3MDM5LDcgQEAKICAgfQogCiAgIHJldHVybiBzdGF0dXM7Ci0gIH0KK30KIAogLyoqCiAgICogQGJyaWVmICBIYW5kbGVzIEkyQ3ggY29tbXVuaWNhdGlvbiB3aGVuIHN0YXJ0aW5nIHRyYW5zZmVyIG9yIGR1cmluZyB0cmFuc2ZlciAoVEMgb3IgVENSIGZsYWcgYXJlIHNldCkuCkBAIC02Njc3LDE0ICs3MDY4LDE2IEBACiAgIGFzc2VydF9wYXJhbShJU19UUkFOU0ZFUl9NT0RFKE1vZGUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RSQU5TRkVSX1JFUVVFU1QoUmVxdWVzdCkpOwogCisgIC8qIERlY2xhcmF0aW9uIG9mIHRtcCB0byBwcmV2ZW50IHVuZGVmaW5lZCBiZWhhdmlvciBvZiB2b2xhdGlsZSB1c2FnZSAqLworICB1aW50MzJfdCB0bXAgPSAoKHVpbnQzMl90KSgoKHVpbnQzMl90KURldkFkZHJlc3MgJiBJMkNfQ1IyX1NBREQpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdClTaXplIDw8IEkyQ19DUjJfTkJZVEVTX1BvcykgJiBJMkNfQ1IyX05CWVRFUykgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdClNb2RlIHwgKHVpbnQzMl90KVJlcXVlc3QpICYgKH4weDgwMDAwMDAwVSkpOworCiAgIC8qIHVwZGF0ZSBDUjIgcmVnaXN0ZXIgKi8KLSAgTU9ESUZZX1JFRyhoaTJjLT5JbnN0YW5jZS0+Q1IyLAorICBNT0RJRllfUkVHKGhpMmMtPkluc3RhbmNlLT5DUjIsIFwKICAgICAgICAgICAgICAoKEkyQ19DUjJfU0FERCB8IEkyQ19DUjJfTkJZVEVTIHwgSTJDX0NSMl9SRUxPQUQgfCBJMkNfQ1IyX0FVVE9FTkQgfCBcCiAgICAgICAgICAgICAgICAoSTJDX0NSMl9SRF9XUk4gJiAodWludDMyX3QpKFJlcXVlc3QgPj4gKDMxVSAtIEkyQ19DUjJfUkRfV1JOX1BvcykpKSB8IFwKLSAgICAgICAgICAgICAgIEkyQ19DUjJfU1RBUlQgfCBJMkNfQ1IyX1NUT1ApKSwgXAotICAgICAgICAgICAgICh1aW50MzJfdCkoKCh1aW50MzJfdClEZXZBZGRyZXNzICYgSTJDX0NSMl9TQUREKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KVNpemUgPDwgSTJDX0NSMl9OQllURVNfUG9zKSAmIEkyQ19DUjJfTkJZVEVTKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdClNb2RlIHwgKHVpbnQzMl90KVJlcXVlc3QpKTsKKyAgICAgICAgICAgICAgIEkyQ19DUjJfU1RBUlQgfCBJMkNfQ1IyX1NUT1ApKSwgdG1wKTsKIH0KIAogLyoqCkBAIC02Njk4LDggKzcwOTEsOSBAQAogewogICB1aW50MzJfdCB0bXBpc3IgPSAwVTsKIAotICBpZiAoKGhpMmMtPlhmZXJJU1IgPT0gSTJDX01hc3Rlcl9JU1JfRE1BKSB8fCBcCi0gICAgICAoaGkyYy0+WGZlcklTUiA9PSBJMkNfU2xhdmVfSVNSX0RNQSkpCisgIGlmICgoaGkyYy0+WGZlcklTUiAhPSBJMkNfTWFzdGVyX0lTUl9ETUEpICYmIFwKKyAgICAgIChoaTJjLT5YZmVySVNSICE9IEkyQ19TbGF2ZV9JU1JfRE1BKSAmJiBcCisgICAgICAoaGkyYy0+WGZlcklTUiAhPSBJMkNfTWVtX0lTUl9ETUEpKQogICB7CiAgICAgaWYgKChJbnRlcnJ1cHRSZXF1ZXN0ICYgSTJDX1hGRVJfTElTVEVOX0lUKSA9PSBJMkNfWEZFUl9MSVNURU5fSVQpCiAgICAgewpAQCAtNjcwNywzMiArNzEwMSw2IEBACiAgICAgICB0bXBpc3IgfD0gSTJDX0lUX0FERFJJIHwgSTJDX0lUX1NUT1BJIHwgSTJDX0lUX05BQ0tJIHwgSTJDX0lUX0VSUkk7CiAgICAgfQogCi0gICAgaWYgKEludGVycnVwdFJlcXVlc3QgPT0gSTJDX1hGRVJfRVJST1JfSVQpCi0gICAgewotICAgICAgLyogRW5hYmxlIEVSUiBhbmQgTkFDSyBpbnRlcnJ1cHRzICovCi0gICAgICB0bXBpc3IgfD0gSTJDX0lUX0VSUkkgfCBJMkNfSVRfTkFDS0k7Ci0gICAgfQotCi0gICAgaWYgKEludGVycnVwdFJlcXVlc3QgPT0gSTJDX1hGRVJfQ1BMVF9JVCkKLSAgICB7Ci0gICAgICAvKiBFbmFibGUgU1RPUCBpbnRlcnJ1cHRzICovCi0gICAgICB0bXBpc3IgfD0gKEkyQ19JVF9TVE9QSSB8IEkyQ19JVF9UQ0kpOwotICAgIH0KLQotICAgIGlmIChJbnRlcnJ1cHRSZXF1ZXN0ID09IEkyQ19YRkVSX1JFTE9BRF9JVCkKLSAgICB7Ci0gICAgICAvKiBFbmFibGUgVEMgaW50ZXJydXB0cyAqLwotICAgICAgdG1waXNyIHw9IEkyQ19JVF9UQ0k7Ci0gICAgfQotICB9Ci0gIGVsc2UKLSAgewotICAgIGlmICgoSW50ZXJydXB0UmVxdWVzdCAmIEkyQ19YRkVSX0xJU1RFTl9JVCkgPT0gSTJDX1hGRVJfTElTVEVOX0lUKQotICAgIHsKLSAgICAgIC8qIEVuYWJsZSBFUlIsIFNUT1AsIE5BQ0ssIGFuZCBBRERSIGludGVycnVwdHMgKi8KLSAgICAgIHRtcGlzciB8PSBJMkNfSVRfQUREUkkgfCBJMkNfSVRfU1RPUEkgfCBJMkNfSVRfTkFDS0kgfCBJMkNfSVRfRVJSSTsKLSAgICB9Ci0KICAgICBpZiAoKEludGVycnVwdFJlcXVlc3QgJiBJMkNfWEZFUl9UWF9JVCkgPT0gSTJDX1hGRVJfVFhfSVQpCiAgICAgewogICAgICAgLyogRW5hYmxlIEVSUiwgVEMsIFNUT1AsIE5BQ0sgYW5kIFJYSSBpbnRlcnJ1cHRzICovCkBAIC02NzQ1LDYgKzcxMTMsMTIgQEAKICAgICAgIHRtcGlzciB8PSBJMkNfSVRfRVJSSSB8IEkyQ19JVF9UQ0kgfCBJMkNfSVRfU1RPUEkgfCBJMkNfSVRfTkFDS0kgfCBJMkNfSVRfUlhJOwogICAgIH0KIAorICAgIGlmIChJbnRlcnJ1cHRSZXF1ZXN0ID09IEkyQ19YRkVSX0VSUk9SX0lUKQorICAgIHsKKyAgICAgIC8qIEVuYWJsZSBFUlIgYW5kIE5BQ0sgaW50ZXJydXB0cyAqLworICAgICAgdG1waXNyIHw9IEkyQ19JVF9FUlJJIHwgSTJDX0lUX05BQ0tJOworICAgIH0KKwogICAgIGlmIChJbnRlcnJ1cHRSZXF1ZXN0ID09IEkyQ19YRkVSX0NQTFRfSVQpCiAgICAgewogICAgICAgLyogRW5hYmxlIFNUT1AgaW50ZXJydXB0cyAqLwpAQCAtNjc1Miw2ICs3MTI2LDQ1IEBACiAgICAgfQogICB9CiAKKyAgZWxzZQorICB7CisgICAgaWYgKChJbnRlcnJ1cHRSZXF1ZXN0ICYgSTJDX1hGRVJfTElTVEVOX0lUKSA9PSBJMkNfWEZFUl9MSVNURU5fSVQpCisgICAgeworICAgICAgLyogRW5hYmxlIEVSUiwgU1RPUCwgTkFDSyBhbmQgQUREUiBpbnRlcnJ1cHRzICovCisgICAgICB0bXBpc3IgfD0gSTJDX0lUX0FERFJJIHwgSTJDX0lUX1NUT1BJIHwgSTJDX0lUX05BQ0tJIHwgSTJDX0lUX0VSUkk7CisgICAgfQorCisgICAgaWYgKChJbnRlcnJ1cHRSZXF1ZXN0ICYgSTJDX1hGRVJfVFhfSVQpID09IEkyQ19YRkVSX1RYX0lUKQorICAgIHsKKyAgICAgIC8qIEVuYWJsZSBFUlIsIFRDLCBTVE9QLCBOQUNLIGFuZCBSWEkgaW50ZXJydXB0cyAqLworICAgICAgdG1waXNyIHw9IEkyQ19JVF9FUlJJIHwgSTJDX0lUX1RDSSB8IEkyQ19JVF9TVE9QSSB8IEkyQ19JVF9OQUNLSSB8IEkyQ19JVF9UWEk7CisgICAgfQorCisgICAgaWYgKChJbnRlcnJ1cHRSZXF1ZXN0ICYgSTJDX1hGRVJfUlhfSVQpID09IEkyQ19YRkVSX1JYX0lUKQorICAgIHsKKyAgICAgIC8qIEVuYWJsZSBFUlIsIFRDLCBTVE9QLCBOQUNLIGFuZCBUWEkgaW50ZXJydXB0cyAqLworICAgICAgdG1waXNyIHw9IEkyQ19JVF9FUlJJIHwgSTJDX0lUX1RDSSB8IEkyQ19JVF9TVE9QSSB8IEkyQ19JVF9OQUNLSSB8IEkyQ19JVF9SWEk7CisgICAgfQorCisgICAgaWYgKEludGVycnVwdFJlcXVlc3QgPT0gSTJDX1hGRVJfRVJST1JfSVQpCisgICAgeworICAgICAgLyogRW5hYmxlIEVSUiBhbmQgTkFDSyBpbnRlcnJ1cHRzICovCisgICAgICB0bXBpc3IgfD0gSTJDX0lUX0VSUkkgfCBJMkNfSVRfTkFDS0k7CisgICAgfQorCisgICAgaWYgKEludGVycnVwdFJlcXVlc3QgPT0gSTJDX1hGRVJfQ1BMVF9JVCkKKyAgICB7CisgICAgICAvKiBFbmFibGUgU1RPUCBpbnRlcnJ1cHRzICovCisgICAgICB0bXBpc3IgfD0gKEkyQ19JVF9TVE9QSSB8IEkyQ19JVF9UQ0kpOworICAgIH0KKworICAgIGlmICgoaGkyYy0+WGZlcklTUiAhPSBJMkNfTWVtX0lTUl9ETUEpICYmIChJbnRlcnJ1cHRSZXF1ZXN0ID09IEkyQ19YRkVSX1JFTE9BRF9JVCkpCisgICAgeworICAgICAgLyogRW5hYmxlIFRDIGludGVycnVwdHMgKi8KKyAgICAgIHRtcGlzciB8PSBJMkNfSVRfVENJOworICAgIH0KKyAgfQorCiAgIC8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9ubHkgYXQgdGhlIGVuZCAqLwogICAvKiB0byBhdm9pZCB0aGUgcmlzayBvZiBJMkMgaW50ZXJydXB0IGhhbmRsZSBleGVjdXRpb24gYmVmb3JlICovCiAgIC8qIGFsbCBpbnRlcnJ1cHRzIHJlcXVlc3RlZCBkb25lICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF9pMmNfZXguYyBiL1NyYy9zdG0zMmYzeHhfaGFsX2kyY19leC5jCmluZGV4IGIzZmExNTcuLjNmYzY1MmIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfaGFsX2kyY19leC5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX2kyY19leC5jCkBAIC00NSw3ICs0NSw2IEBACiAgICAgICAgICAgKCsrKSBIQUxfSTJDRXhfRW5hYmxlRmFzdE1vZGVQbHVzKCkKICAgICAgICAgICAoKyspIEhBTF9JMkNFeF9EaXNhYmxlRmFzdE1vZGVQbHVzKCkKICAgQGVuZHZlcmJhdGltCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfaTJzLmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9pMnMuYwppbmRleCBkZGYxZjFmLi45NDU2NzhmIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9pMnMuYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF9pMnMuYwpAQCAtOCw3ICs4LDYgQEAKICAgKiAgICAgICAgICAgKyBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9ycyBmdW5jdGlvbnMKLSAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTE4MSw3ICsxODAsNyBAQAogICAgICAgIGFuZCB3ZWFrIChzdXJjaGFyZ2VkKSBjYWxsYmFja3MgYXJlIHVzZWQuCiAKICAgQGVuZHZlcmJhdGltCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCiAgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yMTE5LDMgKzIxMTgsNCBAQAogI2VuZGlmIC8qIFNQSV9JMlNfU1VQUE9SVCAqLwogCiAjZW5kaWYgLyogSEFMX0kyU19NT0RVTEVfRU5BQkxFRCAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF9pMnNfZXguYyBiL1NyYy9zdG0zMmYzeHhfaGFsX2kyc19leC5jCmluZGV4IGU4MzliZmEuLjc5ODljNzkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfaGFsX2kyc19leC5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX2kyc19leC5jCkBAIC02LDcgKzYsNiBAQAogICAqICAgICAgICAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcKICAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgSTJTIGV4dGVuc2lvbiBwZXJpcGhlcmFsOgogICAqICAgICAgICAgICArIEV4dGVuc2lvbiBmZWF0dXJlcyBGdW5jdGlvbnMKLSAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTg0LDggKzgzLDYgQEAKICAgICAgICAgfCAgICAgICB8ICAgICAgIEkyU3hfZXh0ICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLT5JMlN4X2V4dFNEKGluL291dCkKICAgICAgICAgICstLS0tLT58ICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTEzNSwzICsxMTMyLDQgQEAKIC8qKgogICAqIEB9CiAgICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYzeHhfaGFsX2lyZGEuYyBiL1NyYy9zdG0zMmYzeHhfaGFsX2lyZGEuYwppbmRleCA1OWExNWVhLi5lOGU4NzE0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9pcmRhLmMKKysrIGIvU3JjL3N0bTMyZjN4eF9oYWxfaXJkYS5jCkBAIC00NzEsNiArNDcxLDggQEAKIC8qKgogICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIElSREEgQ2FsbGJhY2sKICAgKiAgICAgICAgIFRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogQG5vdGUgICBUaGUgSEFMX0lSREFfUmVnaXN0ZXJDYWxsYmFjaygpIG1heSBiZSBjYWxsZWQgYmVmb3JlIEhBTF9JUkRBX0luaXQoKSBpbiBIQUxfSVJEQV9TVEFURV9SRVNFVAorICAqICAgICAgICAgdG8gcmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBIQUxfSVJEQV9NU1BJTklUX0NCX0lEIGFuZCBIQUxfSVJEQV9NU1BERUlOSVRfQ0JfSUQKICAgKiBAcGFyYW0gIGhpcmRhIGlyZGEgaGFuZGxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSByZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNDk5LDggKzUwMSw2IEBACiAKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9Ci0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaGlyZGEpOwogCiAgIGlmIChoaXJkYS0+Z1N0YXRlID09IEhBTF9JUkRBX1NUQVRFX1JFQURZKQogICB7CkBAIC01ODUsMTUgKzU4NSwxNCBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGhpcmRhKTsKLQogICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFVucmVnaXN0ZXIgYW4gSVJEQSBjYWxsYmFjawogICAqICAgICAgICAgSVJEQSBjYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAbm90ZSAgIFRoZSBIQUxfSVJEQV9VblJlZ2lzdGVyQ2FsbGJhY2soKSBtYXkgYmUgY2FsbGVkIGJlZm9yZSBIQUxfSVJEQV9Jbml0KCkgaW4gSEFMX0lSREFfU1RBVEVfUkVTRVQKKyAgKiAgICAgICAgIHRvIHVuLXJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgSEFMX0lSREFfTVNQSU5JVF9DQl9JRCBhbmQgSEFMX0lSREFfTVNQREVJTklUX0NCX0lECiAgICogQHBhcmFtICBoaXJkYSBpcmRhIGhhbmRsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNjEzLDkgKzYxMiw2IEBACiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhpcmRhKTsKLQogICBpZiAoSEFMX0lSREFfU1RBVEVfUkVBRFkgPT0gaGlyZGEtPmdTdGF0ZSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKQEAgLTcwMSw5ICs2OTcsNiBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGhpcmRhKTsKLQogICByZXR1cm4gc3RhdHVzOwogfQogI2VuZGlmIC8qIFVTRV9IQUxfSVJEQV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KQEAgLTEwNjAsOCArMTA1MywxNiBAQAogICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KICAgICBfX0hBTF9VTkxPQ0soaGlyZGEpOwogCi0gICAgLyogRW5hYmxlIHRoZSBJUkRBIFBhcml0eSBFcnJvciBhbmQgRGF0YSBSZWdpc3RlciBub3QgZW1wdHkgSW50ZXJydXB0cyAqLwotICAgIFNFVF9CSVQoaGlyZGEtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9QRUlFIHwgVVNBUlRfQ1IxX1JYTkVJRSk7CisgICAgaWYgKGhpcmRhLT5Jbml0LlBhcml0eSAhPSBJUkRBX1BBUklUWV9OT05FKQorICAgIHsKKyAgICAgIC8qIEVuYWJsZSB0aGUgSVJEQSBQYXJpdHkgRXJyb3IgYW5kIERhdGEgUmVnaXN0ZXIgbm90IGVtcHR5IEludGVycnVwdHMgKi8KKyAgICAgIFNFVF9CSVQoaGlyZGEtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9QRUlFIHwgVVNBUlRfQ1IxX1JYTkVJRSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBFbmFibGUgdGhlIElSREEgRGF0YSBSZWdpc3RlciBub3QgZW1wdHkgSW50ZXJydXB0cyAqLworICAgICAgU0VUX0JJVChoaXJkYS0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1JYTkVJRSk7CisgICAgfQogCiAgICAgLyogRW5hYmxlIHRoZSBJUkRBIEVycm9yIEludGVycnVwdDogKEZyYW1lIGVycm9yLCBub2lzZSBlcnJvciwgb3ZlcnJ1biBlcnJvcikgKi8KICAgICBTRVRfQklUKGhpcmRhLT5JbnN0YW5jZS0+Q1IzLCBVU0FSVF9DUjNfRUlFKTsKQEAgLTEyMDIsOCArMTIwMywxMSBAQAogICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgICAgX19IQUxfVU5MT0NLKGhpcmRhKTsKIAotICAgICAgLyogRW5hYmxlIHRoZSBVQVJUIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQgKi8KLSAgICAgIFNFVF9CSVQoaGlyZGEtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9QRUlFKTsKKyAgICAgIGlmIChoaXJkYS0+SW5pdC5QYXJpdHkgIT0gSVJEQV9QQVJJVFlfTk9ORSkKKyAgICAgIHsKKyAgICAgICAgLyogRW5hYmxlIHRoZSBVQVJUIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQgKi8KKyAgICAgICAgU0VUX0JJVChoaXJkYS0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1BFSUUpOworICAgICAgfQogCiAgICAgICAvKiBFbmFibGUgdGhlIFVBUlQgRXJyb3IgSW50ZXJydXB0OiAoRnJhbWUgZXJyb3IsIG5vaXNlIGVycm9yLCBvdmVycnVuIGVycm9yKSAqLwogICAgICAgU0VUX0JJVChoaXJkYS0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0VJRSk7CkBAIC0xMjk1LDcgKzEyOTksMTAgQEAKICAgICBfX0hBTF9JUkRBX0NMRUFSX09SRUZMQUcoaGlyZGEpOwogCiAgICAgLyogUmUtZW5hYmxlIFBFIGFuZCBFUlIgKEZyYW1lIGVycm9yLCBub2lzZSBlcnJvciwgb3ZlcnJ1biBlcnJvcikgaW50ZXJydXB0cyAqLwotICAgIFNFVF9CSVQoaGlyZGEtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9QRUlFKTsKKyAgICBpZiAoaGlyZGEtPkluaXQuUGFyaXR5ICE9IElSREFfUEFSSVRZX05PTkUpCisgICAgeworICAgICAgU0VUX0JJVChoaXJkYS0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1BFSUUpOworICAgIH0KICAgICBTRVRfQklUKGhpcmRhLT5JbnN0YW5jZS0+Q1IzLCBVU0FSVF9DUjNfRUlFKTsKIAogICAgIC8qIEVuYWJsZSB0aGUgSVJEQSBETUEgUnggcmVxdWVzdCAqLwpAQCAtMjQxOSw3ICsyNDI2LDYgQEAKICAgaGlyZGEtPmdTdGF0ZSA9IEhBTF9JUkRBX1NUQVRFX1JFQURZOwogfQogCi0KIC8qKgogICAqIEBicmllZiAgRW5kIG9uZ29pbmcgUnggdHJhbnNmZXIgb24gVUFSVCBwZXJpcGhlcmFsIChmb2xsb3dpbmcgZXJyb3IgZGV0ZWN0aW9uIG9yIFJlY2VwdGlvbiBjb21wbGV0aW9uKS4KICAgKiBAcGFyYW0gIGhpcmRhIFBvaW50ZXIgdG8gYSBJUkRBX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKQEAgLTI4OTUsMyArMjkwMSw1IEBACiAvKioKICAgKiBAfQogICAqLworCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYzeHhfaGFsX2l3ZGcuYyBiL1NyYy9zdG0zMmYzeHhfaGFsX2l3ZGcuYwppbmRleCAyYmI2ZmZkLi5kMGU5OTcxIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9pd2RnLmMKKysrIGIvU3JjL3N0bTMyZjN4eF9oYWxfaXdkZy5jCkBAIC05Nyw3ICs5Nyw2IEBACiAgICAgICAgICAgdGhlIHJlbG9hZCByZWdpc3RlcgogCiAgIEBlbmR2ZXJiYXRpbQotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEyNSw3ICsxMjQsNyBAQAogICAgdGhlIExTSV9WQUxVRSBjb25zdGFudC4gVGhlIHZhbHVlIG9mIHRoaXMgY29uc3RhbnQgY2FuIGJlIGNoYW5nZWQgYnkgdGhlIHVzZXIKICAgIHRvIHRha2UgaW50byBhY2NvdW50IHBvc3NpYmxlIExTSSBjbG9jayBwZXJpb2QgdmFyaWF0aW9ucy4KICAgIFRoZSB0aW1lb3V0IHZhbHVlIGlzIG11bHRpcGxpZWQgYnkgMTAwMCB0byBiZSBjb252ZXJ0ZWQgaW4gbWlsbGlzZWNvbmRzLgotICAgTFNJIHN0YXJ0dXAgdGltZSBpcyBhbHNvIGNvbnNpZGVyZWQgaGVyZSBieSBhZGRpbmcgTFNJX1NUQVJUVVBfVElNRU9VVAorICAgTFNJIHN0YXJ0dXAgdGltZSBpcyBhbHNvIGNvbnNpZGVyZWQgaGVyZSBieSBhZGRpbmcgTFNJX1NUQVJUVVBfVElNRQogICAgY29udmVydGVkIGluIG1pbGxpc2Vjb25kcy4gKi8KICNkZWZpbmUgSEFMX0lXREdfREVGQVVMVF9USU1FT1VUICAgICAgICAoKCg2VUwgKiAyNTZVTCAqIDEwMDBVTCkgLyBMU0lfVkFMVUUpICsgKChMU0lfU1RBUlRVUF9USU1FIC8gMTAwMFVMKSArIDFVTCkpCiAjZGVmaW5lIElXREdfS0VSTkVMX1VQREFURV9GTEFHUyAgICAgICAgKElXREdfU1JfV1ZVIHwgSVdER19TUl9SVlUgfCBJV0RHX1NSX1BWVSkKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYzeHhfaGFsX21zcF90ZW1wbGF0ZS5jIGIvU3JjL3N0bTMyZjN4eF9oYWxfbXNwX3RlbXBsYXRlLmMKaW5kZXggNjcxM2E1NC4uOTgxOTQ5ZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9oYWxfbXNwX3RlbXBsYXRlLmMKKysrIGIvU3JjL3N0bTMyZjN4eF9oYWxfbXNwX3RlbXBsYXRlLmMKQEAgLTUsNyArNSw3IEBACiAgICogQGJyaWVmICAgSEFMIE1TUCBtb2R1bGUuCiAgICogICAgICAgICAgVGhpcyBmaWxlIHRlbXBsYXRlIGlzIGxvY2F0ZWQgaW4gdGhlIEhBTCBmb2xkZXIgYW5kIHNob3VsZCBiZSBjb3BpZWQgCiAgICogICAgICAgICAgdG8gdGhlIHVzZXIgZm9sZGVyLgotICAqICAgICAgICAgCisgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC0xOCwxNCArMTgsMTQgQEAKICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgQHZlcmJhdGltCi0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCi0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQogCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKi8KKyAgKi8gCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJmM3h4X2hhbC5oIgpAQCAtOTcsMyArOTcsNSBAQAogLyoqCiAgICogQH0KICAgKi8KKworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF9uYW5kLmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9uYW5kLmMKaW5kZXggOWZhNDgzNy4uNDQyNjA5ZiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9oYWxfbmFuZC5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX25hbmQuYwpAQCAtNTI5LDggKzUyOSw4IEBACiAgICogQHBhcmFtICBOdW1QYWdlVG9SZWFkICBudW1iZXIgb2YgcGFnZXMgdG8gcmVhZCBmcm9tIGJsb2NrCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9SZWFkX1BhZ2VfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsIHVpbnQ4X3QgKnBCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtUGFnZVRvUmVhZCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1JlYWRfUGFnZV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1QYWdlVG9SZWFkKQogewogICB1aW50MzJfdCBpbmRleDsKICAgdWludDMyX3QgdGlja3N0YXJ0OwpAQCAtNjk0LDggKzY5NCw4IEBACiAgICogQHBhcmFtICBOdW1QYWdlVG9SZWFkICBudW1iZXIgb2YgcGFnZXMgdG8gcmVhZCBmcm9tIGJsb2NrCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9SZWFkX1BhZ2VfMTZiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50MTZfdCAqcEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtUGFnZVRvUmVhZCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1JlYWRfUGFnZV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1QYWdlVG9SZWFkKQogewogICB1aW50MzJfdCBpbmRleDsKICAgdWludDMyX3QgdGlja3N0YXJ0OwpAQCAtODY5LDggKzg2OSw4IEBACiAgICogQHBhcmFtICBOdW1QYWdlVG9Xcml0ZSAgIG51bWJlciBvZiBwYWdlcyB0byB3cml0ZSB0byBibG9jawogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfV3JpdGVfUGFnZV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDhfdCAqcEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtUGFnZVRvV3JpdGUpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9Xcml0ZV9QYWdlXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIGNvbnN0IE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1QYWdlVG9Xcml0ZSkKIHsKICAgdWludDMyX3QgaW5kZXg7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKQEAgLTg3OCw3ICs4NzgsNyBAQAogICB1aW50MzJfdCBudW1wYWdlc3dyaXR0ZW4gPSAwVTsKICAgdWludDMyX3QgbmFuZGFkZHJlc3M7CiAgIHVpbnQzMl90IG5icGFnZXMgPSBOdW1QYWdlVG9Xcml0ZTsKLSAgdWludDhfdCAqYnVmZiA9IHBCdWZmZXI7CisgIGNvbnN0IHVpbnQ4X3QgKmJ1ZmYgPSBwQnVmZmVyOwogCiAgIC8qIENoZWNrIHRoZSBOQU5EIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9CVVNZKQpAQCAtMTAyOSw4ICsxMDI5LDggQEAKICAgKiBAcGFyYW0gIE51bVBhZ2VUb1dyaXRlICAgbnVtYmVyIG9mIHBhZ2VzIHRvIHdyaXRlIHRvIGJsb2NrCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9Xcml0ZV9QYWdlXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDE2X3QgKnBCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBOdW1QYWdlVG9Xcml0ZSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1dyaXRlX1BhZ2VfMTZiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIGNvbnN0IE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVBhZ2VUb1dyaXRlKQogewogICB1aW50MzJfdCBpbmRleDsKICAgdWludDMyX3QgdGlja3N0YXJ0OwpAQCAtMTAzOCw3ICsxMDM4LDcgQEAKICAgdWludDMyX3QgbnVtcGFnZXN3cml0dGVuID0gMFU7CiAgIHVpbnQzMl90IG5hbmRhZGRyZXNzOwogICB1aW50MzJfdCBuYnBhZ2VzID0gTnVtUGFnZVRvV3JpdGU7Ci0gIHVpbnQxNl90ICpidWZmID0gcEJ1ZmZlcjsKKyAgY29uc3QgdWludDE2X3QgKmJ1ZmYgPSBwQnVmZmVyOwogCiAgIC8qIENoZWNrIHRoZSBOQU5EIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9CVVNZKQpAQCAtMTIwMCw4ICsxMjAwLDggQEAKICAgKiBAcGFyYW0gIE51bVNwYXJlQXJlYVRvUmVhZCBOdW1iZXIgb2Ygc3BhcmUgYXJlYSB0byByZWFkCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9SZWFkX1NwYXJlQXJlYV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDhfdCAqcEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvUmVhZCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1JlYWRfU3BhcmVBcmVhXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIGNvbnN0IE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG9SZWFkKQogewogICB1aW50MzJfdCBpbmRleDsKICAgdWludDMyX3QgdGlja3N0YXJ0OwpAQCAtMTM3Miw3ICsxMzcyLDcgQEAKICAgKiBAcGFyYW0gIE51bVNwYXJlQXJlYVRvUmVhZCBOdW1iZXIgb2Ygc3BhcmUgYXJlYSB0byByZWFkCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9SZWFkX1NwYXJlQXJlYV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9SZWFkX1NwYXJlQXJlYV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvUmVhZCkKIHsKICAgdWludDMyX3QgaW5kZXg7CkBAIC0xNTQ0LDggKzE1NDQsOCBAQAogICAqIEBwYXJhbSAgTnVtU3BhcmVBcmVhVG93cml0ZSAgIG51bWJlciBvZiBzcGFyZSBhcmVhcyB0byB3cml0ZSB0byBibG9jawogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfV3JpdGVfU3BhcmVBcmVhXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvd3JpdGUpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9Xcml0ZV9TcGFyZUFyZWFfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG93cml0ZSkKIHsKICAgdWludDMyX3QgaW5kZXg7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKQEAgLTE1NTQsNyArMTU1NCw3IEBACiAgIHVpbnQzMl90IG5hbmRhZGRyZXNzOwogICB1aW50MzJfdCBjb2x1bW5hZGRyZXNzOwogICB1aW50MzJfdCBuYnNwYXJlID0gTnVtU3BhcmVBcmVhVG93cml0ZTsKLSAgdWludDhfdCAqYnVmZiA9IHBCdWZmZXI7CisgIGNvbnN0IHVpbnQ4X3QgKmJ1ZmYgPSBwQnVmZmVyOwogCiAgIC8qIENoZWNrIHRoZSBOQU5EIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9CVVNZKQpAQCAtMTcxNCw4ICsxNzE0LDggQEAKICAgKiBAcGFyYW0gIE51bVNwYXJlQXJlYVRvd3JpdGUgICBudW1iZXIgb2Ygc3BhcmUgYXJlYXMgdG8gd3JpdGUgdG8gYmxvY2sKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1dyaXRlX1NwYXJlQXJlYV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1TcGFyZUFyZWFUb3dyaXRlKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfV3JpdGVfU3BhcmVBcmVhXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvd3JpdGUpCiB7CiAgIHVpbnQzMl90IGluZGV4OwogICB1aW50MzJfdCB0aWNrc3RhcnQ7CkBAIC0xNzI0LDcgKzE3MjQsNyBAQAogICB1aW50MzJfdCBuYW5kYWRkcmVzczsKICAgdWludDMyX3QgY29sdW1uYWRkcmVzczsKICAgdWludDMyX3QgbmJzcGFyZSA9IE51bVNwYXJlQXJlYVRvd3JpdGU7Ci0gIHVpbnQxNl90ICpidWZmID0gcEJ1ZmZlcjsKKyAgY29uc3QgdWludDE2X3QgKmJ1ZmYgPSBwQnVmZmVyOwogCiAgIC8qIENoZWNrIHRoZSBOQU5EIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9CVVNZKQpAQCAtMTg4Miw3ICsxODgyLDcgQEAKICAgKiBAcGFyYW0gIHBBZGRyZXNzICBwb2ludGVyIHRvIE5BTkQgYWRkcmVzcyBzdHJ1Y3R1cmUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX0VyYXNlX0Jsb2NrKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfRXJhc2VfQmxvY2soTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MpCiB7CiAgIHVpbnQzMl90IGRldmljZWFkZHJlc3M7CiAKQEAgLTE5NDUsNyArMTk0NSw3IEBACiAgICogICAgICAgICAgIC0gTkFORF9WQUxJRF9BRERSRVNTOiBXaGVuIHRoZSBuZXcgYWRkcmVzcyBpcyB2YWxpZCBhZGRyZXNzCiAgICogICAgICAgICAgIC0gTkFORF9JTlZBTElEX0FERFJFU1M6IFdoZW4gdGhlIG5ldyBhZGRyZXNzIGlzIGludmFsaWQgYWRkcmVzcwogICAqLwotdWludDMyX3QgSEFMX05BTkRfQWRkcmVzc19JbmMoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MpCit1aW50MzJfdCBIQUxfTkFORF9BZGRyZXNzX0luYyhjb25zdCBOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcykKIHsKICAgdWludDMyX3Qgc3RhdHVzID0gTkFORF9WQUxJRF9BRERSRVNTOwogCkBAIC0yMjU2LDcgKzIyNTYsNyBAQAogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBOQU5EIG1vZHVsZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0ZQogICAqLwotSEFMX05BTkRfU3RhdGVUeXBlRGVmIEhBTF9OQU5EX0dldFN0YXRlKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQpCitIQUxfTkFORF9TdGF0ZVR5cGVEZWYgSEFMX05BTkRfR2V0U3RhdGUoY29uc3QgTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCkKIHsKICAgcmV0dXJuIGhuYW5kLT5TdGF0ZTsKIH0KQEAgLTIyNjcsNyArMjI2Nyw3IEBACiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIE5BTkQgbW9kdWxlLgogICAqIEByZXR2YWwgTkFORCBzdGF0dXMKICAgKi8KLXVpbnQzMl90IEhBTF9OQU5EX1JlYWRfU3RhdHVzKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQpCit1aW50MzJfdCBIQUxfTkFORF9SZWFkX1N0YXR1cyhjb25zdCBOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kKQogewogICB1aW50MzJfdCBkYXRhOwogICB1aW50MzJfdCBkZXZpY2VhZGRyZXNzOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfbm9yLmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9ub3IuYwppbmRleCAxMGVjNGU3Li40ZmZjMzI0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9ub3IuYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF9ub3IuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2luY2x1ZGUgInN0bTMyZjN4eF9oYWwuaCIKIAotI2lmIGRlZmluZWQoRk1DX0JBTksxKQorI2lmICBkZWZpbmVkKEZNQ19CQU5LMSkKIAogLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjN4eF9IQUxfRHJpdmVyCiAgICogQHsKQEAgLTEyNyw2ICsxMjcsMTEgQEAKICAgKi8KIAogLyogQ29uc3RhbnRzIHRvIGRlZmluZSBhZGRyZXNzIHRvIHNldCB0byB3cml0ZSBhIGNvbW1hbmQgKi8KKyNkZWZpbmUgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0JZVEUgICAgICAgICAgICAodWludDE2X3QpMHgwQUFBCisjZGVmaW5lIE5PUl9DTURfQUREUkVTU19GSVJTVF9DRklfQllURSAgICAgICAgKHVpbnQxNl90KTB4MDBBQQorI2RlZmluZSBOT1JfQ01EX0FERFJFU1NfU0VDT05EX0JZVEUgICAgICAgICAgICh1aW50MTZfdCkweDA1NTUKKyNkZWZpbmUgTk9SX0NNRF9BRERSRVNTX1RISVJEX0JZVEUgICAgICAgICAgICAodWludDE2X3QpMHgwQUFBCisKICNkZWZpbmUgTk9SX0NNRF9BRERSRVNTX0ZJUlNUICAgICAgICAgICAgICAgICAodWludDE2X3QpMHgwNTU1CiAjZGVmaW5lIE5PUl9DTURfQUREUkVTU19GSVJTVF9DRkkgICAgICAgICAgICAgKHVpbnQxNl90KTB4MDA1NQogI2RlZmluZSBOT1JfQ01EX0FERFJFU1NfU0VDT05EICAgICAgICAgICAgICAgICh1aW50MTZfdCkweDAyQUEKQEAgLTIzMCw2ICsyMzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OT1JTUkFNX1RpbWluZ1R5cGVEZWYgKkV4dFRpbWluZykKIHsKICAgdWludDMyX3QgZGV2aWNlYWRkcmVzczsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCiAgIC8qIENoZWNrIHRoZSBOT1IgaGFuZGxlIHBhcmFtZXRlciAqLwogICBpZiAoaG5vciA9PSBOVUxMKQpAQCAtMjYzLDcgKzI2OSw4IEBACiAgICh2b2lkKUZNQ19OT1JTUkFNX1RpbWluZ19Jbml0KGhub3ItPkluc3RhbmNlLCBUaW1pbmcsIGhub3ItPkluaXQuTlNCYW5rKTsKIAogICAvKiBJbml0aWFsaXplIE5PUiBleHRlbmRlZCBtb2RlIHRpbWluZyBJbnRlcmZhY2UgKi8KLSAgKHZvaWQpRk1DX05PUlNSQU1fRXh0ZW5kZWRfVGltaW5nX0luaXQoaG5vci0+RXh0ZW5kZWQsIEV4dFRpbWluZywgaG5vci0+SW5pdC5OU0JhbmssIGhub3ItPkluaXQuRXh0ZW5kZWRNb2RlKTsKKyAgKHZvaWQpRk1DX05PUlNSQU1fRXh0ZW5kZWRfVGltaW5nX0luaXQoaG5vci0+RXh0ZW5kZWQsIEV4dFRpbWluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG5vci0+SW5pdC5OU0JhbmssIGhub3ItPkluaXQuRXh0ZW5kZWRNb2RlKTsKIAogICAvKiBFbmFibGUgdGhlIE5PUlNSQU0gZGV2aWNlICovCiAgIF9fRk1DX05PUlNSQU1fRU5BQkxFKGhub3ItPkluc3RhbmNlLCBobm9yLT5Jbml0Lk5TQmFuayk7CkBAIC0yOTksMTEgKzMwNiwzMiBAQAogICAgIGRldmljZWFkZHJlc3MgPSBOT1JfTUVNT1JZX0FEUkVTUzQ7CiAgIH0KIAotICAvKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBjb21tYW5kIHNldCAqLwotICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVF9DRkkpLCBOT1JfQ01EX0RBVEFfQ0ZJKTsKLSAgaG5vci0+Q29tbWFuZFNldCA9ICooX19JTyB1aW50MTZfdCAqKSBOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0FERFJFU1NfQ09NTUFORF9TRVQpOworICBpZiAoaG5vci0+SW5pdC5Xcml0ZU9wZXJhdGlvbiA9PSBGTUNfV1JJVEVfT1BFUkFUSU9OX0RJU0FCTEUpCisgIHsKKyAgICAodm9pZClGTUNfTk9SU1JBTV9Xcml0ZU9wZXJhdGlvbl9EaXNhYmxlKGhub3ItPkluc3RhbmNlLCBobm9yLT5Jbml0Lk5TQmFuayk7CiAKLSAgcmV0dXJuIEhBTF9OT1JfUmV0dXJuVG9SZWFkTW9kZShobm9yKTsKKyAgICAvKiBVcGRhdGUgdGhlIE5PUiBjb250cm9sbGVyIHN0YXRlICovCisgICAgaG5vci0+U3RhdGUgPSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRDsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBjb21tYW5kIHNldCAqLworICAgIGlmICh1d05PUk1lbW9yeURhdGFXaWR0aCA9PSBOT1JfTUVNT1JZXzhCKQorICAgIHsKKyAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0NGSV9CWVRFKSwKKyAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0ZJKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0NGSSksIE5PUl9DTURfREFUQV9DRkkpOworICAgIH0KKworICAgIGhub3ItPkNvbW1hbmRTZXQgPSAqKF9fSU8gdWludDE2X3QgKikgTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9BRERSRVNTX0NPTU1BTkRfU0VUKTsKKworICAgIHN0YXR1cyA9IEhBTF9OT1JfUmV0dXJuVG9SZWFkTW9kZShobm9yKTsKKyAgfQorCisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtMzc4LDcgKzQwNiw3IEBACiAgICogQHBhcmFtICBUaW1lb3V0IE1heGltdW0gdGltZW91dCB2YWx1ZQogICAqIEByZXR2YWwgTm9uZQogICAqLwotX193ZWFrIHZvaWQgSEFMX05PUl9Nc3BXYWl0KE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCB1aW50MzJfdCBUaW1lb3V0KQorX193ZWFrIHZvaWQgSEFMX05PUl9Nc3BXYWl0KGNvbnN0IE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCB1aW50MzJfdCBUaW1lb3V0KQogewogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChobm9yKTsKQEAgLTQyNiw3ICs0NTQsMTEgQEAKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmICgoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEKSkKKyAgZWxzZSBpZiAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisgIGVsc2UgaWYgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVBRFkpCiAgIHsKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaG5vcik7CkBAIC00NTUsOSArNDg3LDIyIEBACiAgICAgLyogU2VuZCByZWFkIElEIGNvbW1hbmQgKi8KICAgICBpZiAoaG5vci0+Q29tbWFuZFNldCA9PSBOT1JfQU1EX0ZVSklUU1VfQ09NTUFORF9TRVQpCiAgICAgewotICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1QpLCBOT1JfQ01EX0RBVEFfRklSU1QpOwotICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19USElSRCksIE5PUl9DTURfREFUQV9BVVRPX1NFTEVDVCk7CisgICAgICBpZiAodXdOT1JNZW1vcnlEYXRhV2lkdGggPT0gTk9SX01FTU9SWV84QikKKyAgICAgIHsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1RfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfRklSU1QpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfU0VDT05EKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQVVUT19TRUxFQ1QpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19USElSRCksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQVVUT19TRUxFQ1QpOworICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9JTlRFTF9TSEFSUF9FWFRfQ09NTUFORF9TRVQpCiAgICAgewpAQCAtNTEzLDcgKzU1OCwxMSBAQAogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1JFQURZKSB8fCAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpKQorICBlbHNlIGlmIChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKyAgZWxzZSBpZiAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkKICAgewogICAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgICAgX19IQUxfTE9DSyhobm9yKTsKQEAgLTU4Nyw3ICs2MzYsMTEgQEAKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmICgoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEKSkKKyAgZWxzZSBpZiAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisgIGVsc2UgaWYgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVBRFkpCiAgIHsKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaG5vcik7CkBAIC02MTYsOSArNjY5LDIyIEBACiAgICAgLyogU2VuZCByZWFkIGRhdGEgY29tbWFuZCAqLwogICAgIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCkKICAgICB7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwgTk9SX0NNRF9EQVRBX1JFQURfUkVTRVQpOworICAgICAgaWYgKHV3Tk9STWVtb3J5RGF0YVdpZHRoID09IE5PUl9NRU1PUllfOEIpCisgICAgICB7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX1JFQURfUkVTRVQpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19USElSRCksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfUkVBRF9SRVNFVCk7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0lOVEVMX1NIQVJQX0VYVF9DT01NQU5EX1NFVCkKICAgICB7CkBAIC02OTcsOSArNzYzLDIxIEBACiAgICAgLyogU2VuZCBwcm9ncmFtIGRhdGEgY29tbWFuZCAqLwogICAgIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCkKICAgICB7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwgTk9SX0NNRF9EQVRBX1BST0dSQU0pOworICAgICAgaWYgKHV3Tk9STWVtb3J5RGF0YVdpZHRoID09IE5PUl9NRU1PUllfOEIpCisgICAgICB7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX1BST0dSQU0pOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19USElSRCksIE5PUl9DTURfREFUQV9QUk9HUkFNKTsKKyAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoaG5vci0+Q29tbWFuZFNldCA9PSBOT1JfSU5URUxfU0hBUlBfRVhUX0NPTU1BTkRfU0VUKQogICAgIHsKQEAgLTc1Niw3ICs4MzQsMTEgQEAKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmICgoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEKSkKKyAgZWxzZSBpZiAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisgIGVsc2UgaWYgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVBRFkpCiAgIHsKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaG5vcik7CkBAIC03ODUsOSArODY3LDIyIEBACiAgICAgLyogU2VuZCByZWFkIGRhdGEgY29tbWFuZCAqLwogICAgIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCkKICAgICB7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwgTk9SX0NNRF9EQVRBX1JFQURfUkVTRVQpOworICAgICAgaWYgKHV3Tk9STWVtb3J5RGF0YVdpZHRoID09IE5PUl9NRU1PUllfOEIpCisgICAgICB7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX1JFQURfUkVTRVQpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19USElSRCksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfUkVBRF9SRVNFVCk7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0lOVEVMX1NIQVJQX0VYVF9DT01NQU5EX1NFVCkKICAgICB7CkBAIC04ODAsMTAgKzk3NSwyMCBAQAogCiAgICAgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0FNRF9GVUpJVFNVX0NPTU1BTkRfU0VUKQogICAgIHsKLSAgICAgIC8qIElzc3VlIHVubG9jayBjb21tYW5kIHNlcXVlbmNlICovCi0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKLQorICAgICAgaWYgKHV3Tk9STWVtb3J5RGF0YVdpZHRoID09IE5PUl9NRU1PUllfOEIpCisgICAgICB7CisgICAgICAgIC8qIElzc3VlIHVubG9jayBjb21tYW5kIHNlcXVlbmNlICovCisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIElzc3VlIHVubG9jayBjb21tYW5kIHNlcXVlbmNlICovCisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUKSwgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICB9CiAgICAgICAvKiBXcml0ZSBCdWZmZXIgTG9hZCBDb21tYW5kICovCiAgICAgICBOT1JfV1JJVEUoKGRldmljZWFkZHJlc3MgKyB1d0FkZHJlc3MpLCBOT1JfQ01EX0RBVEFfQlVGRkVSX0FORF9QUk9HKTsKICAgICAgIE5PUl9XUklURSgoZGV2aWNlYWRkcmVzcyArIHV3QWRkcmVzcyksICh1aW50MTZfdCkodXdCdWZmZXJTaXplIC0gMVUpKTsKQEAgLTk4MywxNCArMTA4OCwyNiBAQAogICAgIC8qIFNlbmQgYmxvY2sgZXJhc2UgY29tbWFuZCBzZXF1ZW5jZSAqLwogICAgIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCkKICAgICB7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwKLSAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9USElSRCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GT1VSVEgpLAotICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX0ZPVVJUSCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSUZUSCksCi0gICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NISVBfQkxPQ0tfRVJBU0VfRklGVEgpOworICAgICAgaWYgKHV3Tk9STWVtb3J5RGF0YVdpZHRoID09IE5PUl9NRU1PUllfOEIpCisgICAgICB7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NISVBfQkxPQ0tfRVJBU0VfVEhJUkQpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19USElSRCksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9USElSRCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZPVVJUSCksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9GT1VSVEgpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSUZUSCksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9GSUZUSCk7CisgICAgICB9CiAgICAgICBOT1JfV1JJVEUoKHVpbnQzMl90KShCbG9ja0FkZHJlc3MgKyBBZGRyZXNzKSwgTk9SX0NNRF9EQVRBX0JMT0NLX0VSQVNFKTsKICAgICB9CiAgICAgZWxzZSBpZiAoaG5vci0+Q29tbWFuZFNldCA9PSBOT1JfSU5URUxfU0hBUlBfRVhUX0NPTU1BTkRfU0VUKQpAQCAtMTA2OCwxNSArMTE4NSwyOCBAQAogICAgIC8qIFNlbmQgTk9SIGNoaXAgZXJhc2UgY29tbWFuZCBzZXF1ZW5jZSAqLwogICAgIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCkKICAgICB7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwKLSAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9USElSRCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GT1VSVEgpLAotICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX0ZPVVJUSCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSUZUSCksCi0gICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NISVBfQkxPQ0tfRVJBU0VfRklGVEgpOwotICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0lYVEgpLCBOT1JfQ01EX0RBVEFfQ0hJUF9FUkFTRSk7CisgICAgICBpZiAodXdOT1JNZW1vcnlEYXRhV2lkdGggPT0gTk9SX01FTU9SWV84QikKKyAgICAgIHsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1RfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfRklSU1QpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfU0VDT05EKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9USElSRCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUKSwgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX1RISVJEKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRk9VUlRIKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX0ZPVVJUSCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJRlRIKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX0ZJRlRIKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0lYVEgpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NISVBfRVJBU0UpOworICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtMTExNiw3ICsxMjQ2LDExIEBACiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVBRFkpIHx8IChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRCkpCisgIGVsc2UgaWYgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorICBlbHNlIGlmIChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1JFQURZKQogICB7CiAgICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgICBfX0hBTF9MT0NLKGhub3IpOwpAQCAtMTE0Myw4ICsxMjc3LDE1IEBACiAgICAgfQogCiAgICAgLyogU2VuZCByZWFkIENGSSBxdWVyeSBjb21tYW5kICovCi0gICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1RfQ0ZJKSwgTk9SX0NNRF9EQVRBX0NGSSk7Ci0KKyAgICBpZiAodXdOT1JNZW1vcnlEYXRhV2lkdGggPT0gTk9SX01FTU9SWV84QikKKyAgICB7CisgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVF9DRklfQllURSksCisgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NGSSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVF9DRkkpLCBOT1JfQ01EX0RBVEFfQ0ZJKTsKKyAgICB9CiAgICAgLyogcmVhZCB0aGUgTk9SIENGSSBpbmZvcm1hdGlvbiAqLwogICAgIHBOT1JfQ0ZJLT5DRklfMSA9ICooX19JTyB1aW50MTZfdCAqKSBOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgQ0ZJMV9BRERSRVNTKTsKICAgICBwTk9SX0NGSS0+Q0ZJXzIgPSAqKF9fSU8gdWludDE2X3QgKikgTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIENGSTJfQUREUkVTUyk7CkBAIC0xMzc4LDcgKzE1MTksNyBAQAogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBOT1IgbW9kdWxlLgogICAqIEByZXR2YWwgTk9SIGNvbnRyb2xsZXIgc3RhdGUKICAgKi8KLUhBTF9OT1JfU3RhdGVUeXBlRGVmIEhBTF9OT1JfR2V0U3RhdGUoTk9SX0hhbmRsZVR5cGVEZWYgKmhub3IpCitIQUxfTk9SX1N0YXRlVHlwZURlZiBIQUxfTk9SX0dldFN0YXRlKGNvbnN0IE5PUl9IYW5kbGVUeXBlRGVmICpobm9yKQogewogICByZXR1cm4gaG5vci0+U3RhdGU7CiB9CkBAIC0xMzkyLDcgKzE1MzMsNyBAQAogICAqIEByZXR2YWwgTk9SX1N0YXR1cyBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlOiBIQUxfTk9SX1NUQVRVU19TVUNDRVNTLCBIQUxfTk9SX1NUQVRVU19FUlJPUgogICAqICAgICAgICAgb3IgSEFMX05PUl9TVEFUVVNfVElNRU9VVAogICAqLwotSEFMX05PUl9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfR2V0U3RhdHVzKE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCB1aW50MzJfdCBBZGRyZXNzLCB1aW50MzJfdCBUaW1lb3V0KQorSEFMX05PUl9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfR2V0U3RhdHVzKGNvbnN0IE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCB1aW50MzJfdCBBZGRyZXNzLCB1aW50MzJfdCBUaW1lb3V0KQogewogICBIQUxfTk9SX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX05PUl9TVEFUVVNfT05HT0lORzsKICAgdWludDE2X3QgdG1wc3IxOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfb3BhbXAuYyBiL1NyYy9zdG0zMmYzeHhfaGFsX29wYW1wLmMKaW5kZXggOTFlMzUzZi4uMzk5OTVjZCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9oYWxfb3BhbXAuYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF9vcGFtcC5jCkBAIC00LDExICs0LDcgQEAKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQogICAqIEBicmllZiAgIE9QQU1QIEhBTCBtb2R1bGUgZHJpdmVyLgogICAqICAgICAgICAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcKLSAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIG9wZXJhdGlvbmFsIGFtcGxpZmllcnMgKE9QQU1QMSwuLi5PUEFNUDQpCi0gICogICAgICAgICAgcGVyaXBoZXJhbDoKLSAgKiAgICAgICAgICAgKyBPUEFNUCBDb25maWd1cmF0aW9uCi0gICogICAgICAgICAgICsgT1BBTVAgY2FsaWJyYXRpb24KLSAgKiAgICAgICAgICBUaGFua3MgdG8KKyAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIG9wZXJhdGlvbmFsIGFtcGxpZmllcnMgcGVyaXBoZXJhbDoKICAgKiAgICAgICAgICAgKyBJbml0aWFsaXphdGlvbi9kZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBJL08gb3BlcmF0aW9uIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKQEAgLTY4MSw3ICs2NzcsNyBAQAogICAgICAgICBkZWx0YSA+Pj0gMVU7CiAgICAgICB9CiAKLSAgICAgIC8qIFN0aWxsIG5lZWQgdG8gY2hlY2sgaWYgcmlnaCBjYWxpYnJhdGlvbiBpcyBjdXJyZW50IHZhbHVlIG9yIHVuIHN0ZXAgYmVsb3cgKi8KKyAgICAgIC8qIFN0aWxsIG5lZWQgdG8gY2hlY2sgaWYgcmlnaHQgY2FsaWJyYXRpb24gaXMgY3VycmVudCB2YWx1ZSBvciB1biBzdGVwIGJlbG93ICovCiAgICAgICAvKiBJbmRlZWQgdGhlIGZpcnN0IHZhbHVlIHRoYXQgY2F1c2VzIHRoZSBPVVRDQUwgYml0IHRvIGNoYW5nZSBmcm9tIDEgdG8gMCAgKi8KICAgICAgIE1PRElGWV9SRUcoaG9wYW1wLT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVFJJTU9GRlNFVE4sIHRyaW1taW5ndmFsdWVuIDw8IE9QQU1QX0lOUFVUX0lOVkVSVElORyk7CiAKQEAgLTczMCw3ICs3MjYsNyBAQAogICAgICAgICBkZWx0YSA+Pj0gMVU7CiAgICAgICB9CiAKLSAgICAgIC8qIFN0aWxsIG5lZWQgdG8gY2hlY2sgaWYgcmlnaCBjYWxpYnJhdGlvbiBpcyBjdXJyZW50IHZhbHVlIG9yIHVuIHN0ZXAgYmVsb3cgKi8KKyAgICAgIC8qIFN0aWxsIG5lZWQgdG8gY2hlY2sgaWYgcmlnaHQgY2FsaWJyYXRpb24gaXMgY3VycmVudCB2YWx1ZSBvciB1biBzdGVwIGJlbG93ICovCiAgICAgICAvKiBJbmRlZWQgdGhlIGZpcnN0IHZhbHVlIHRoYXQgY2F1c2VzIHRoZSBPVVRDQUwgYml0IHRvIGNoYW5nZSBmcm9tIDEgdG8gMFUgKi8KICAgICAgIC8qIFNldCBjYW5kaWRhdGUgdHJpbW1pbmcgKi8KICAgICAgIE1PRElGWV9SRUcoaG9wYW1wLT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVFJJTU9GRlNFVFAsIHRyaW1taW5ndmFsdWVwIDw8IE9QQU1QX0lOUFVUX05PTklOVkVSVElORyk7CkBAIC03NTksNyArNzU1LDcgQEAKICAgICAgIENMRUFSX0JJVChob3BhbXAtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9GT1JDRVZQKTsKIAogICAgICAgLyogU2VsZiBjYWxpYnJhdGlvbiBpcyBzdWNjZXNzZnVsICAqLwotICAgICAgLyogU3RvcmUgY2FsaWJyYXRpb24odXNlciB0aW1taW5nKSByZXN1bHRzIGluIGluaXQgc3RydWN0dXJlLiAqLworICAgICAgLyogU3RvcmUgY2FsaWJyYXRpb24odXNlciB0cmltbWluZykgcmVzdWx0cyBpbiBpbml0IHN0cnVjdHVyZS4gKi8KIAogICAgICAgLyogV3JpdGUgY2FsaWJyYXRpb24gcmVzdWx0IE4gKi8KICAgICAgIGhvcGFtcC0+SW5pdC5UcmltbWluZ1ZhbHVlTiA9IHRyaW1taW5ndmFsdWVuOwpAQCAtNzY3LDcgKzc2Myw3IEBACiAgICAgICAvKiBXcml0ZSBjYWxpYnJhdGlvbiByZXN1bHQgUCAqLwogICAgICAgaG9wYW1wLT5Jbml0LlRyaW1taW5nVmFsdWVQID0gdHJpbW1pbmd2YWx1ZXA7CiAKLSAgICAgIC8qIFNlbGVjdCB1c2VyIHRpbW1pbmcgbW9kZSAqLworICAgICAgLyogU2VsZWN0IHVzZXIgdHJpbW1pbmcgbW9kZSAqLwogICAgICAgLyogQW5kIHVwZGF0ZWQgd2l0aCBjYWxpYnJhdGVkIHNldHRpbmdzICovCiAgICAgICBob3BhbXAtPkluaXQuVXNlclRyaW1taW5nID0gT1BBTVBfVFJJTU1JTkdfVVNFUjsKICAgICAgIE1PRElGWV9SRUcoaG9wYW1wLT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVFJJTU9GRlNFVFAsIHRyaW1taW5ndmFsdWVwIDw8IE9QQU1QX0lOUFVUX05PTklOVkVSVElORyk7CkBAIC05MTUsNyArOTExLDcgQEAKICAgICAgIG9sZHRyaW1taW5ndmFsdWVuID0gKGhvcGFtcC0+SW5zdGFuY2UtPkNTUiAmIE9QQU1QX0NTUl9UUklNT0ZGU0VUTikgPj4gT1BBTVBfSU5QVVRfSU5WRVJUSU5HOwogICAgIH0KIAotICAgIC8qIFNldCBmYWN0b3J5IHRpbW1pbmcgbW9kZSAqLworICAgIC8qIFNldCBmYWN0b3J5IHRyaW1taW5nIG1vZGUgKi8KICAgICBDTEVBUl9CSVQoaG9wYW1wLT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVVNFUlRSSU0pOwogCiAgICAgLyogR2V0IGZhY3RvcnkgdHJpbW1pbmcgICovCkBAIC0xMDk5LDMgKzEwOTUsNSBAQAogLyoqCiAgICogQH0KICAgKi8KKworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF9vcGFtcF9leC5jIGIvU3JjL3N0bTMyZjN4eF9oYWxfb3BhbXBfZXguYwppbmRleCBkMjNlMWRlLi42NDc2YmM1IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9vcGFtcF9leC5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX29wYW1wX2V4LmMKQEAgLTUsMTAgKzUsMTEgQEAKICAgKiBAYnJpZWYgICBFeHRlbmRlZCBPUEFNUCBIQUwgbW9kdWxlIGRyaXZlci4KICAgKgogICAqICAgICAgICAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcKLSAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIFBvd2VyIENvbnRyb2xsZXIgKE9QQU1QKSBwZXJpcGhlcmFsOgorICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgb3BlcmF0aW9uYWwgYW1wbGlmaWVyKHMpIHBlcmlwaGVyYWw6CiAgICogICAgICAgICAgICsgRXh0ZW5kZWQgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uICBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBFeHRlbmRlZCBQZXJpcGhlcmFsIENvbnRyb2wgIGZ1bmN0aW9ucwogICAqCisgIEB2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTIwLDggKzIxLDYgQEAKICAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgQHZlcmJhdGltCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTc0LDcgKzE3Myw3IEBACiAgICAgICBkZWx0YSA+Pj0gMVU7CiAgICAgfQogCi0gICAgLy8gU3RpbGwgbmVlZCB0byBjaGVjayBpZiByaWdoIGNhbGlicmF0aW9uIGlzIGN1cnJlbnQgdmFsdWUgb3IgdW4gc3RlcCBiZWxvdworICAgIC8vIFN0aWxsIG5lZWQgdG8gY2hlY2sgaWYgcmlnaHQgY2FsaWJyYXRpb24gaXMgY3VycmVudCB2YWx1ZSBvciB1biBzdGVwIGJlbG93CiAgICAgLy8gSW5kZWVkIHRoZSBmaXJzdCB2YWx1ZSB0aGF0IGNhdXNlcyB0aGUgT1VUQ0FMIGJpdCB0byBjaGFuZ2UgZnJvbSAxIHRvIDAKICAgICBNT0RJRllfUkVHKGhvcGFtcDEtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUTiwgdHJpbW1pbmd2YWx1ZW4xIDw8IE9QQU1QX0lOUFVUX0lOVkVSVElORyk7CiAgICAgTU9ESUZZX1JFRyhob3BhbXAyLT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVFJJTU9GRlNFVE4sIHRyaW1taW5ndmFsdWVuMiA8PCBPUEFNUF9JTlBVVF9JTlZFUlRJTkcpOwpAQCAtMjQ1LDcgKzI0NCw3IEBACiAgICAgICBkZWx0YSA+Pj0gMVU7CiAgICAgfQogCi0gICAgLy8gU3RpbGwgbmVlZCB0byBjaGVjayBpZiByaWdoIGNhbGlicmF0aW9uIGlzIGN1cnJlbnQgdmFsdWUgb3IgdW4gc3RlcCBiZWxvdworICAgIC8vIFN0aWxsIG5lZWQgdG8gY2hlY2sgaWYgcmlnaHQgY2FsaWJyYXRpb24gaXMgY3VycmVudCB2YWx1ZSBvciB1biBzdGVwIGJlbG93CiAgICAgLy8gSW5kZWVkIHRoZSBmaXJzdCB2YWx1ZSB0aGF0IGNhdXNlcyB0aGUgT1VUQ0FMIGJpdCB0byBjaGFuZ2UgZnJvbSAxIHRvIDAKICAgICAvKiBTZXQgY2FuZGlkYXRlIHRyaW1taW5nICovCiAgICAgTU9ESUZZX1JFRyhob3BhbXAxLT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVFJJTU9GRlNFVFAsIHRyaW1taW5ndmFsdWVwMSA8PCBPUEFNUF9JTlBVVF9OT05JTlZFUlRJTkcpOwpAQCAtMjg1LDggKzI4NCw4IEBACiAgICAgQ0xFQVJfQklUKGhvcGFtcDItPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9GT1JDRVZQKTsKIAogICAgIC8qIFNlbGYgY2FsaWJyYXRpb24gaXMgc3VjY2Vzc2Z1bCAgKi8KLSAgICAvKiBTdG9yZSBjYWxpYnJhdGlvbih1c2VyIHRpbW1pbmcpIHJlc3VsdHMgaW4gaW5pdCBzdHJ1Y3R1cmUuICovCi0gICAgLyogU2VsZWN0IHVzZXIgdGltbWluZyBtb2RlICovCisgICAgLyogU3RvcmUgY2FsaWJyYXRpb24odXNlciB0cmltbWluZykgcmVzdWx0cyBpbiBpbml0IHN0cnVjdHVyZS4gKi8KKyAgICAvKiBTZWxlY3QgdXNlciB0cmltbWluZyBtb2RlICovCiAKICAgICAvKiBXcml0ZSBjYWxpYnJhdGlvbiByZXN1bHQgTiAqLwogICAgIGhvcGFtcDEtPkluaXQuVHJpbW1pbmdWYWx1ZU4gPSB0cmltbWluZ3ZhbHVlbjE7CkBAIC0zMDAsNyArMjk5LDcgQEAKICAgICBob3BhbXAxLT5Jbml0LlVzZXJUcmltbWluZyA9IE9QQU1QX1RSSU1NSU5HX1VTRVI7CiAgICAgaG9wYW1wMi0+SW5pdC5Vc2VyVHJpbW1pbmcgPSBPUEFNUF9UUklNTUlOR19VU0VSOwogCi0gICAgLyogU2VsZWN0IHVzZXIgdGltbWluZyBtb2RlICovCisgICAgLyogU2VsZWN0IHVzZXIgdHJpbW1pbmcgbW9kZSAqLwogICAgIC8qIEFuZCB1cGRhdGVkIHdpdGggY2FsaWJyYXRlZCBzZXR0aW5ncyAqLwogICAgIGhvcGFtcDEtPkluaXQuVXNlclRyaW1taW5nID0gT1BBTVBfVFJJTU1JTkdfVVNFUjsKICAgICBob3BhbXAyLT5Jbml0LlVzZXJUcmltbWluZyA9IE9QQU1QX1RSSU1NSU5HX1VTRVI7CkBAIC00NzcsNyArNDc2LDcgQEAKICAgICAgIGRlbHRhID4+PSAxVTsKICAgICB9CiAKLSAgICAvKiBTdGlsbCBuZWVkIHRvIGNoZWNrIGlmIHJpZ2ggY2FsaWJyYXRpb24gaXMgY3VycmVudCB2YWx1ZSBvciB1biBzdGVwIGJlbG93ICovCisgICAgLyogU3RpbGwgbmVlZCB0byBjaGVjayBpZiByaWdodCBjYWxpYnJhdGlvbiBpcyBjdXJyZW50IHZhbHVlIG9yIHVuIHN0ZXAgYmVsb3cgKi8KICAgICAvKiBJbmRlZWQgdGhlIGZpcnN0IHZhbHVlIHRoYXQgY2F1c2VzIHRoZSBPVVRDQUwgYml0IHRvIGNoYW5nZSBmcm9tIDEgdG8gMFUgKi8KICAgICBNT0RJRllfUkVHKGhvcGFtcDEtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUTiwgdHJpbW1pbmd2YWx1ZW4xIDw8IE9QQU1QX0lOUFVUX0lOVkVSVElORyk7CiAgICAgTU9ESUZZX1JFRyhob3BhbXAyLT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVFJJTU9GRlNFVE4sIHRyaW1taW5ndmFsdWVuMiA8PCBPUEFNUF9JTlBVVF9JTlZFUlRJTkcpOwpAQCAtNTkzLDcgKzU5Miw3IEBACiAgICAgICBkZWx0YSA+Pj0gMVU7CiAgICAgfQogCi0gICAgLyogU3RpbGwgbmVlZCB0byBjaGVjayBpZiByaWdoIGNhbGlicmF0aW9uIGlzIGN1cnJlbnQgdmFsdWUgb3IgdW4gc3RlcCBiZWxvdyAqLworICAgIC8qIFN0aWxsIG5lZWQgdG8gY2hlY2sgaWYgcmlnaHQgY2FsaWJyYXRpb24gaXMgY3VycmVudCB2YWx1ZSBvciB1biBzdGVwIGJlbG93ICovCiAgICAgLyogSW5kZWVkIHRoZSBmaXJzdCB2YWx1ZSB0aGF0IGNhdXNlcyB0aGUgT1VUQ0FMIGJpdCB0byBjaGFuZ2UgZnJvbSAxIHRvIDBVICovCiAgICAgLyogU2V0IGNhbmRpZGF0ZSB0cmltbWluZyAqLwogICAgIE1PRElGWV9SRUcoaG9wYW1wMS0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1RSSU1PRkZTRVRQLCB0cmltbWluZ3ZhbHVlcDEgPDwgT1BBTVBfSU5QVVRfTk9OSU5WRVJUSU5HKTsKQEAgLTY1Nyw4ICs2NTYsOCBAQAogICAgIENMRUFSX0JJVChob3BhbXA0LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfRk9SQ0VWUCk7CiAKICAgICAvKiBTZWxmIGNhbGlicmF0aW9uIGlzIHN1Y2Nlc3NmdWwgICovCi0gICAgLyogU3RvcmUgY2FsaWJyYXRpb24odXNlciB0aW1taW5nKSByZXN1bHRzIGluIGluaXQgc3RydWN0dXJlLiAqLwotICAgIC8qIFNlbGVjdCB1c2VyIHRpbW1pbmcgbW9kZSAqLworICAgIC8qIFN0b3JlIGNhbGlicmF0aW9uKHVzZXIgdHJpbW1pbmcpIHJlc3VsdHMgaW4gaW5pdCBzdHJ1Y3R1cmUuICovCisgICAgLyogU2VsZWN0IHVzZXIgdHJpbW1pbmcgbW9kZSAqLwogCiAgICAgLyogV3JpdGUgY2FsaWJyYXRpb24gcmVzdWx0IE4gKi8KICAgICBob3BhbXAxLT5Jbml0LlRyaW1taW5nVmFsdWVOID0gdHJpbW1pbmd2YWx1ZW4xOwpAQCAtNjcyLDcgKzY3MSw3IEBACiAgICAgaG9wYW1wMy0+SW5pdC5UcmltbWluZ1ZhbHVlUCA9IHRyaW1taW5ndmFsdWVwMzsKICAgICBob3BhbXA0LT5Jbml0LlRyaW1taW5nVmFsdWVQID0gdHJpbW1pbmd2YWx1ZXA0OwogCi0gICAgLyogU2VsZWN0IHVzZXIgdGltbWluZyBtb2RlICovCisgICAgLyogU2VsZWN0IHVzZXIgdHJpbW1pbmcgbW9kZSAqLwogICAgIC8qIEFuZCB1cGRhdGVkIHdpdGggY2FsaWJyYXRlZCBzZXR0aW5ncyAqLwogICAgIGhvcGFtcDEtPkluaXQuVXNlclRyaW1taW5nID0gT1BBTVBfVFJJTU1JTkdfVVNFUjsKICAgICBob3BhbXAyLT5Jbml0LlVzZXJUcmltbWluZyA9IE9QQU1QX1RSSU1NSU5HX1VTRVI7CkBAIC03MTMsMyArNzEyLDQgQEAKIC8qKgogICAqIEB9CiAgICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYzeHhfaGFsX3BjZC5jIGIvU3JjL3N0bTMyZjN4eF9oYWxfcGNkLmMKaW5kZXggNDVkZGQ0Yy4uMDgyNGQ5NiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9oYWxfcGNkLmMKKysrIGIvU3JjL3N0bTMyZjN4eF9oYWxfcGNkLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAogICAgICAoIykgSW5pdGlhbGl6ZSB0aGUgUENEIGxvdyBsZXZlbCByZXNvdXJjZXMgdGhyb3VnaCB0aGUgSEFMX1BDRF9Nc3BJbml0KCkgQVBJOgogICAgICAgICAgKCMjKSBFbmFibGUgdGhlIFBDRC9VU0IgTG93IExldmVsIGludGVyZmFjZSBjbG9jayB1c2luZwotICAgICAgICAgICAgICAoKysrKSBfX0hBTF9SQ0NfVVNCX0NMS19FTkFCTEUoKTsgRm9yIFVTQiBEZXZpY2Ugb25seSBGUyBwZXJpcGhlcmFsCisgICAgICAgICAgICAgICgrKyspIF9fSEFMX1JDQ19VU0JfQ0xLX0VOQUJMRSgpOyBGb3IgVVNCIERldmljZSBGUyBwZXJpcGhlcmFsCiAKICAgICAgICAgICgjIykgSW5pdGlhbGl6ZSB0aGUgcmVsYXRlZCBHUElPIGNsb2NrcwogICAgICAgICAgKCMjKSBDb25maWd1cmUgUENEIHBpbi1vdXQKQEAgLTg4LDggKzg4LDEwIEBACiAgICovCiAKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBQQ0RfRVBfSVNSX0hhbmRsZXIoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QpOworI2lmIChVU0VfVVNCX0RPVUJMRV9CVUZGRVIgPT0gMVUpCiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9EQl9UcmFuc21pdChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgUENEX0VQVHlwZURlZiAqZXAsIHVpbnQxNl90IHdFUFZhbCk7CiBzdGF0aWMgdWludDE2X3QgSEFMX1BDRF9FUF9EQl9SZWNlaXZlKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCBQQ0RfRVBUeXBlRGVmICplcCwgdWludDE2X3Qgd0VQVmFsKTsKKyNlbmRpZiAvKiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKSAqLwogCiAvKioKICAgKiBAfQpAQCAtMTY1LDkgKzE2Nyw2IEBACiAKICAgaHBjZC0+U3RhdGUgPSBIQUxfUENEX1NUQVRFX0JVU1k7CiAKLSAgLyogRE1BIE5vdCBzdXBwb3J0ZWQgZm9yIEZTIGluc3RhbmNlLCBGb3JjZSB0byBaZXJvICovCi0gIGhwY2QtPkluaXQuZG1hX2VuYWJsZSA9IDBVOwotCiAgIC8qIERpc2FibGUgdGhlIEludGVycnVwdHMgKi8KICAgX19IQUxfUENEX0RJU0FCTEUoaHBjZCk7CiAKQEAgLTE3Nyw3ICsxNzYsNiBAQAogICAgIC8qIEluaXQgZXAgc3RydWN0dXJlICovCiAgICAgaHBjZC0+SU5fZXBbaV0uaXNfaW4gPSAxVTsKICAgICBocGNkLT5JTl9lcFtpXS5udW0gPSBpOwotICAgIGhwY2QtPklOX2VwW2ldLnR4X2ZpZm9fbnVtID0gaTsKICAgICAvKiBDb250cm9sIHVudGlsIGVwIGlzIGFjdGl2YXRlZCAqLwogICAgIGhwY2QtPklOX2VwW2ldLnR5cGUgPSBFUF9UWVBFX0NUUkw7CiAgICAgaHBjZC0+SU5fZXBbaV0ubWF4cGFja2V0ID0gMFU7CkBAIC0yODYsNyArMjg0LDcgQEAKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1BDRF9TVVNQRU5EX0NCX0lEIFVTQiBQQ0QgU3VzcGVuZCBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUENEX1JFU1VNRV9DQl9JRCBVU0IgUENEIFJlc3VtZSBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUENEX0NPTk5FQ1RfQ0JfSUQgVVNCIFBDRCBDb25uZWN0IGNhbGxiYWNrIElECi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9QQ0RfRElTQ09OTkVDVF9DQl9JRCBPVEcgUENEIERpc2Nvbm5lY3QgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1BDRF9ESVNDT05ORUNUX0NCX0lEIFVTQiBQQ0QgRGlzY29ubmVjdCBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUENEX01TUElOSVRfQ0JfSUQgTXNwRGVJbml0IGNhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9QQ0RfTVNQREVJTklUX0NCX0lEIE1zcERlSW5pdCBjYWxsYmFjayBJRAogICAqIEBwYXJhbSAgcENhbGxiYWNrIHBvaW50ZXIgdG8gdGhlIENhbGxiYWNrIGZ1bmN0aW9uCkBAIC0zOTAsNyArMzg4LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGFuIFVTQiBQQ0QgQ2FsbGJhY2sKLSAgKiAgICAgICAgIFVTQiBQQ0QgY2FsbGFiY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogICAgICAgICBVU0IgUENEIGNhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjawogICAqIEBwYXJhbSAgaHBjZCBVU0IgUENEIGhhbmRsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNDAwLDcgKzM5OCw3IEBACiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9QQ0RfU1VTUEVORF9DQl9JRCBVU0IgUENEIFN1c3BlbmQgY2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1BDRF9SRVNVTUVfQ0JfSUQgVVNCIFBDRCBSZXN1bWUgY2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1BDRF9DT05ORUNUX0NCX0lEIFVTQiBQQ0QgQ29ubmVjdCBjYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUENEX0RJU0NPTk5FQ1RfQ0JfSUQgT1RHIFBDRCBEaXNjb25uZWN0IGNhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9QQ0RfRElTQ09OTkVDVF9DQl9JRCBVU0IgUENEIERpc2Nvbm5lY3QgY2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1BDRF9NU1BJTklUX0NCX0lEIE1zcERlSW5pdCBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUENEX01TUERFSU5JVF9DQl9JRCBNc3BEZUluaXQgY2FsbGJhY2sgSUQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTg2MCwxNCArODU4LDE4IEBACiAgICovCiB2b2lkIEhBTF9QQ0RfSVJRSGFuZGxlcihQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCkKIHsKLSAgaWYgKF9fSEFMX1BDRF9HRVRfRkxBRyhocGNkLCBVU0JfSVNUUl9DVFIpKQorICB1aW50MzJfdCB3SXN0ciA9IFVTQl9SZWFkSW50ZXJydXB0cyhocGNkLT5JbnN0YW5jZSk7CisKKyAgaWYgKCh3SXN0ciAmIFVTQl9JU1RSX0NUUikgPT0gVVNCX0lTVFJfQ1RSKQogICB7CiAgICAgLyogc2VydmljaW5nIG9mIHRoZSBlbmRwb2ludCBjb3JyZWN0IHRyYW5zZmVyIGludGVycnVwdCAqLwogICAgIC8qIGNsZWFyIG9mIHRoZSBDVFIgZmxhZyBpbnRvIHRoZSBzdWIgKi8KICAgICAodm9pZClQQ0RfRVBfSVNSX0hhbmRsZXIoaHBjZCk7CisKKyAgICByZXR1cm47CiAgIH0KIAotICBpZiAoX19IQUxfUENEX0dFVF9GTEFHKGhwY2QsIFVTQl9JU1RSX1JFU0VUKSkKKyAgaWYgKCh3SXN0ciAmIFVTQl9JU1RSX1JFU0VUKSA9PSBVU0JfSVNUUl9SRVNFVCkKICAgewogICAgIF9fSEFMX1BDRF9DTEVBUl9GTEFHKGhwY2QsIFVTQl9JU1RSX1JFU0VUKTsKIApAQCAtODc4LDE5ICs4ODAsMjUgQEAKICNlbmRpZiAvKiBVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogICAgICh2b2lkKUhBTF9QQ0RfU2V0QWRkcmVzcyhocGNkLCAwVSk7CisKKyAgICByZXR1cm47CiAgIH0KIAotICBpZiAoX19IQUxfUENEX0dFVF9GTEFHKGhwY2QsIFVTQl9JU1RSX1BNQU9WUikpCisgIGlmICgod0lzdHIgJiBVU0JfSVNUUl9QTUFPVlIpID09IFVTQl9JU1RSX1BNQU9WUikKICAgewogICAgIF9fSEFMX1BDRF9DTEVBUl9GTEFHKGhwY2QsIFVTQl9JU1RSX1BNQU9WUik7CisKKyAgICByZXR1cm47CiAgIH0KIAotICBpZiAoX19IQUxfUENEX0dFVF9GTEFHKGhwY2QsIFVTQl9JU1RSX0VSUikpCisgIGlmICgod0lzdHIgJiBVU0JfSVNUUl9FUlIpID09IFVTQl9JU1RSX0VSUikKICAgewogICAgIF9fSEFMX1BDRF9DTEVBUl9GTEFHKGhwY2QsIFVTQl9JU1RSX0VSUik7CisKKyAgICByZXR1cm47CiAgIH0KIAotICBpZiAoX19IQUxfUENEX0dFVF9GTEFHKGhwY2QsIFVTQl9JU1RSX1dLVVApKQorICBpZiAoKHdJc3RyICYgVVNCX0lTVFJfV0tVUCkgPT0gVVNCX0lTVFJfV0tVUCkKICAgewogICAgIGhwY2QtPkluc3RhbmNlLT5DTlRSICY9ICh1aW50MTZfdCkgfihVU0JfQ05UUl9MUE1PREUpOwogICAgIGhwY2QtPkluc3RhbmNlLT5DTlRSICY9ICh1aW50MTZfdCkgfihVU0JfQ05UUl9GU1VTUCk7CkBAIC05MDIsOSArOTEwLDExIEBACiAjZW5kaWYgLyogVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKICAgICBfX0hBTF9QQ0RfQ0xFQVJfRkxBRyhocGNkLCBVU0JfSVNUUl9XS1VQKTsKKworICAgIHJldHVybjsKICAgfQogCi0gIGlmIChfX0hBTF9QQ0RfR0VUX0ZMQUcoaHBjZCwgVVNCX0lTVFJfU1VTUCkpCisgIGlmICgod0lzdHIgJiBVU0JfSVNUUl9TVVNQKSA9PSBVU0JfSVNUUl9TVVNQKQogICB7CiAgICAgLyogRm9yY2UgbG93LXBvd2VyIG1vZGUgaW4gdGhlIG1hY3JvY2VsbCAqLwogICAgIGhwY2QtPkluc3RhbmNlLT5DTlRSIHw9ICh1aW50MTZfdClVU0JfQ05UUl9GU1VTUDsKQEAgLTkxOSw5ICs5MjksMTEgQEAKICNlbHNlCiAgICAgSEFMX1BDRF9TdXNwZW5kQ2FsbGJhY2soaHBjZCk7CiAjZW5kaWYgLyogVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisKKyAgICByZXR1cm47CiAgIH0KIAotICBpZiAoX19IQUxfUENEX0dFVF9GTEFHKGhwY2QsIFVTQl9JU1RSX1NPRikpCisgIGlmICgod0lzdHIgJiBVU0JfSVNUUl9TT0YpID09IFVTQl9JU1RSX1NPRikKICAgewogICAgIF9fSEFMX1BDRF9DTEVBUl9GTEFHKGhwY2QsIFVTQl9JU1RSX1NPRik7CiAKQEAgLTkzMCwxMiArOTQyLDE2IEBACiAjZWxzZQogICAgIEhBTF9QQ0RfU09GQ2FsbGJhY2soaHBjZCk7CiAjZW5kaWYgLyogVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisKKyAgICByZXR1cm47CiAgIH0KIAotICBpZiAoX19IQUxfUENEX0dFVF9GTEFHKGhwY2QsIFVTQl9JU1RSX0VTT0YpKQorICBpZiAoKHdJc3RyICYgVVNCX0lTVFJfRVNPRikgPT0gVVNCX0lTVFJfRVNPRikKICAgewogICAgIC8qIGNsZWFyIEVTT0YgZmxhZyBpbiBJU1RSICovCiAgICAgX19IQUxfUENEX0NMRUFSX0ZMQUcoaHBjZCwgVVNCX0lTVFJfRVNPRik7CisKKyAgICByZXR1cm47CiAgIH0KIH0KIApAQCAtMTIyMSwxMSArMTIzNyw2IEBACiAgIGVwLT5tYXhwYWNrZXQgPSBlcF9tcHM7CiAgIGVwLT50eXBlID0gZXBfdHlwZTsKIAotICBpZiAoZXAtPmlzX2luICE9IDBVKQotICB7Ci0gICAgLyogQXNzaWduIGEgVHggRklGTyAqLwotICAgIGVwLT50eF9maWZvX251bSA9IGVwLT5udW07Ci0gIH0KICAgLyogU2V0IGluaXRpYWwgZGF0YSBQSUQuICovCiAgIGlmIChlcF90eXBlID09IEVQX1RZUEVfQlVMSykKICAgewpAQCAtMTI1OSw3ICsxMjcwLDcgQEAKICAgICBlcCA9ICZocGNkLT5PVVRfZXBbZXBfYWRkciAmIEVQX0FERFJfTVNLXTsKICAgICBlcC0+aXNfaW4gPSAwVTsKICAgfQotICBlcC0+bnVtICAgPSBlcF9hZGRyICYgRVBfQUREUl9NU0s7CisgIGVwLT5udW0gPSBlcF9hZGRyICYgRVBfQUREUl9NU0s7CiAKICAgX19IQUxfTE9DSyhocGNkKTsKICAgKHZvaWQpVVNCX0RlYWN0aXZhdGVFbmRwb2ludChocGNkLT5JbnN0YW5jZSwgZXApOwpAQCAtMTI4OSwxNCArMTMwMCw3IEBACiAgIGVwLT5pc19pbiA9IDBVOwogICBlcC0+bnVtID0gZXBfYWRkciAmIEVQX0FERFJfTVNLOwogCi0gIGlmICgoZXBfYWRkciAmIEVQX0FERFJfTVNLKSA9PSAwVSkKLSAgewotICAgICh2b2lkKVVTQl9FUDBTdGFydFhmZXIoaHBjZC0+SW5zdGFuY2UsIGVwKTsKLSAgfQotICBlbHNlCi0gIHsKLSAgICAodm9pZClVU0JfRVBTdGFydFhmZXIoaHBjZC0+SW5zdGFuY2UsIGVwKTsKLSAgfQorICAodm9pZClVU0JfRVBTdGFydFhmZXIoaHBjZC0+SW5zdGFuY2UsIGVwKTsKIAogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMTMzNCwxNCArMTMzOCw3IEBACiAgIGVwLT5pc19pbiA9IDFVOwogICBlcC0+bnVtID0gZXBfYWRkciAmIEVQX0FERFJfTVNLOwogCi0gIGlmICgoZXBfYWRkciAmIEVQX0FERFJfTVNLKSA9PSAwVSkKLSAgewotICAgICh2b2lkKVVTQl9FUDBTdGFydFhmZXIoaHBjZC0+SW5zdGFuY2UsIGVwKTsKLSAgfQotICBlbHNlCi0gIHsKLSAgICAodm9pZClVU0JfRVBTdGFydFhmZXIoaHBjZC0+SW5zdGFuY2UsIGVwKTsKLSAgfQorICAodm9pZClVU0JfRVBTdGFydFhmZXIoaHBjZC0+SW5zdGFuY2UsIGVwKTsKIAogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMTUzMiw5ICsxNTI5LDE2IEBACiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgUENEX0VQX0lTUl9IYW5kbGVyKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKQogewogICBQQ0RfRVBUeXBlRGVmICplcDsKLSAgdWludDE2X3QgY291bnQsIHdJc3RyLCB3RVBWYWwsIFR4Qnl0ZU5icmU7CisgIHVpbnQxNl90IGNvdW50OworICB1aW50MTZfdCB3SXN0cjsKKyAgdWludDE2X3Qgd0VQVmFsOworICB1aW50MTZfdCBUeFBjdFNpemU7CiAgIHVpbnQ4X3QgZXBpbmRleDsKIAorI2lmIChVU0VfVVNCX0RPVUJMRV9CVUZGRVIgIT0gMVUpCisgIGNvdW50ID0gMFU7CisjZW5kaWYgLyogVVNFX1VTQl9ET1VCTEVfQlVGRkVSICovCisKICAgLyogc3RheSBpbiBsb29wIHdoaWxlIHBlbmRpbmcgaW50ZXJydXB0cyAqLwogICB3aGlsZSAoKGhwY2QtPkluc3RhbmNlLT5JU1RSICYgVVNCX0lTVFJfQ1RSKSAhPSAwVSkKICAgewpAQCAtMTYyMiw3ICsxNjI2LDkgQEAKICNlbmRpZiAvKiBVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgICAgICAgICB9CiAKLSAgICAgICAgICBpZiAoKFBDRF9HRVRfRU5EUE9JTlQoaHBjZC0+SW5zdGFuY2UsIFBDRF9FTkRQMCkgJiBVU0JfRVBfU0VUVVApID09IDBVKQorICAgICAgICAgIHdFUFZhbCA9ICh1aW50MTZfdClQQ0RfR0VUX0VORFBPSU5UKGhwY2QtPkluc3RhbmNlLCBQQ0RfRU5EUDApOworCisgICAgICAgICAgaWYgKCgod0VQVmFsICYgVVNCX0VQX1NFVFVQKSA9PSAwVSkgJiYgKCh3RVBWYWwgJiBVU0JfRVBfUlhfU1RSWCkgIT0gVVNCX0VQX1JYX1ZBTElEKSkKICAgICAgICAgICB7CiAgICAgICAgICAgICBQQ0RfU0VUX0VQX1JYX0NOVChocGNkLT5JbnN0YW5jZSwgUENEX0VORFAwLCBlcC0+bWF4cGFja2V0KTsKICAgICAgICAgICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKGhwY2QtPkluc3RhbmNlLCBQQ0RfRU5EUDAsIFVTQl9FUF9SWF9WQUxJRCk7CkBAIC0xNjUyLDYgKzE2NTgsNyBAQAogICAgICAgICAgICAgVVNCX1JlYWRQTUEoaHBjZC0+SW5zdGFuY2UsIGVwLT54ZmVyX2J1ZmYsIGVwLT5wbWFhZHJlc3MsIGNvdW50KTsKICAgICAgICAgICB9CiAgICAgICAgIH0KKyNpZiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAvKiBtYW5hZ2UgZG91YmxlIGJ1ZmZlciBidWxrIG91dCAqLwpAQCAtMTY2Miw3ICsxNjY5LDcgQEAKICAgICAgICAgICBlbHNlIC8qIG1hbmFnZSBkb3VibGUgYnVmZmVyIGlzbyBvdXQgKi8KICAgICAgICAgICB7CiAgICAgICAgICAgICAvKiBmcmVlIEVQIE9VVCBCdWZmZXIgKi8KLSAgICAgICAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMFUpOworICAgICAgICAgICAgUENEX0ZSRUVfVVNFUl9CVUZGRVIoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0sIDBVKTsKIAogICAgICAgICAgICAgaWYgKChQQ0RfR0VUX0VORFBPSU5UKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtKSAmIFVTQl9FUF9EVE9HX1JYKSAhPSAwVSkKICAgICAgICAgICAgIHsKQEAgLTE2ODYsNiArMTY5Myw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CisjZW5kaWYgLyogKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkgKi8KKwogICAgICAgICAvKiBtdWx0aS1wYWNrZXQgb24gdGhlIE5PTiBjb250cm9sIE9VVCBlbmRwb2ludCAqLwogICAgICAgICBlcC0+eGZlcl9jb3VudCArPSBjb3VudDsKICAgICAgICAgZXAtPnhmZXJfYnVmZiArPSBjb3VudDsKQEAgLTE3MDEsNyArMTcxMCw3IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgKHZvaWQpIFVTQl9FUFN0YXJ0WGZlcihocGNkLT5JbnN0YW5jZSwgZXApOworICAgICAgICAgICh2b2lkKVVTQl9FUFN0YXJ0WGZlcihocGNkLT5JbnN0YW5jZSwgZXApOwogICAgICAgICB9CiAgICAgICB9CiAKQEAgLTE3MTIsMTggKzE3MjEsMjMgQEAKICAgICAgICAgLyogY2xlYXIgaW50IGZsYWcgKi8KICAgICAgICAgUENEX0NMRUFSX1RYX0VQX0NUUihocGNkLT5JbnN0YW5jZSwgZXBpbmRleCk7CiAKLSAgICAgICAgaWYgKGVwLT50eXBlICE9IEVQX1RZUEVfQlVMSykKKyAgICAgICAgaWYgKGVwLT50eXBlID09IEVQX1RZUEVfSVNPQykKICAgICAgICAgewogICAgICAgICAgIGVwLT54ZmVyX2xlbiA9IDBVOwogCi0gICAgICAgICAgaWYgKCh3RVBWYWwgJiBVU0JfRVBfRFRPR19UWCkgIT0gMFUpCisjaWYgKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkKKyAgICAgICAgICBpZiAoZXAtPmRvdWJsZWJ1ZmZlciAhPSAwVSkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBQQ0RfU0VUX0VQX0RCVUYwX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgZXAtPmlzX2luLCAwVSk7CisgICAgICAgICAgICBpZiAoKHdFUFZhbCAmIFVTQl9FUF9EVE9HX1RYKSAhPSAwVSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgUENEX1NFVF9FUF9EQlVGMF9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0sIGVwLT5pc19pbiwgMFUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBQQ0RfU0VUX0VQX0RCVUYxX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgZXAtPmlzX2luLCAwVSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBQQ0RfU0VUX0VQX0RCVUYxX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgZXAtPmlzX2luLCAwVSk7Ci0gICAgICAgICAgfQorI2VuZGlmIC8qIChVU0VfVVNCX0RPVUJMRV9CVUZGRVIgPT0gMVUpICovCiAKICAgICAgICAgICAvKiBUWCBDT01QTEVURSAqLwogI2lmIChVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCkBAIC0xNzMzLDQzICsxNzQ3LDQ3IEBACiAjZW5kaWYgLyogVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgICAgICAgIH0KICAgICAgICAgZWxzZQotICAgICAgICAvKiBNYW5hZ2UgQnVsayBTaW5nbGUgQnVmZmVyIFRyYW5zYWN0aW9uICovCi0gICAgICAgIGlmICgoZXAtPnR5cGUgPT0gRVBfVFlQRV9CVUxLKSAmJiAoKHdFUFZhbCAmIFVTQl9FUF9LSU5EKSA9PSAwVSkpCiAgICAgICAgIHsKLSAgICAgICAgICAvKiBtdWx0aS1wYWNrZXQgb24gdGhlIE5PTiBjb250cm9sIElOIGVuZHBvaW50ICovCi0gICAgICAgICAgVHhCeXRlTmJyZSA9ICh1aW50MTZfdClQQ0RfR0VUX0VQX1RYX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSk7CisgICAgICAgICAgLyogTWFuYWdlIFNpbmdsZSBCdWZmZXIgVHJhbnNhY3Rpb24gKi8KKyAgICAgICAgICBpZiAoKHdFUFZhbCAmIFVTQl9FUF9LSU5EKSA9PSAwVSkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBtdWx0aS1wYWNrZXQgb24gdGhlIE5PTiBjb250cm9sIElOIGVuZHBvaW50ICovCisgICAgICAgICAgICBUeFBjdFNpemUgPSAodWludDE2X3QpUENEX0dFVF9FUF9UWF9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0pOwogCi0gICAgICAgICAgaWYgKGVwLT54ZmVyX2xlbiA+IFR4Qnl0ZU5icmUpCi0gICAgICAgICAgewotICAgICAgICAgICAgZXAtPnhmZXJfbGVuIC09IFR4Qnl0ZU5icmU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlcC0+eGZlcl9sZW4gPSAwVTsKLSAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXAtPnhmZXJfbGVuID4gVHhQY3RTaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcC0+eGZlcl9sZW4gLT0gVHhQY3RTaXplOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcC0+eGZlcl9sZW4gPSAwVTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgIC8qIFplcm8gTGVuZ3RoIFBhY2tldD8gKi8KLSAgICAgICAgICBpZiAoZXAtPnhmZXJfbGVuID09IDBVKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFRYIENPTVBMRVRFICovCisgICAgICAgICAgICAvKiBaZXJvIExlbmd0aCBQYWNrZXQ/ICovCisgICAgICAgICAgICBpZiAoZXAtPnhmZXJfbGVuID09IDBVKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBUWCBDT01QTEVURSAqLwogI2lmIChVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi0gICAgICAgICAgICBocGNkLT5EYXRhSW5TdGFnZUNhbGxiYWNrKGhwY2QsIGVwLT5udW0pOworICAgICAgICAgICAgICBocGNkLT5EYXRhSW5TdGFnZUNhbGxiYWNrKGhwY2QsIGVwLT5udW0pOwogI2Vsc2UKLSAgICAgICAgICAgIEhBTF9QQ0RfRGF0YUluU3RhZ2VDYWxsYmFjayhocGNkLCBlcC0+bnVtKTsKKyAgICAgICAgICAgICAgSEFMX1BDRF9EYXRhSW5TdGFnZUNhbGxiYWNrKGhwY2QsIGVwLT5udW0pOwogI2VuZGlmIC8qIFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBpcyBub3QgeWV0IERvbmUgKi8KKyAgICAgICAgICAgICAgZXAtPnhmZXJfYnVmZiArPSBUeFBjdFNpemU7CisgICAgICAgICAgICAgIGVwLT54ZmVyX2NvdW50ICs9IFR4UGN0U2l6ZTsKKyAgICAgICAgICAgICAgKHZvaWQpVVNCX0VQU3RhcnRYZmVyKGhwY2QtPkluc3RhbmNlLCBlcCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgfQorI2lmIChVU0VfVVNCX0RPVUJMRV9CVUZGRVIgPT0gMVUpCisgICAgICAgICAgLyogRG91YmxlIEJ1ZmZlciBidWxrIElOIChidWxrIHRyYW5zZmVyIExlbiA+IEVwX01wcykgKi8KICAgICAgICAgICBlbHNlCiAgICAgICAgICAgewotICAgICAgICAgICAgLyogVHJhbnNmZXIgaXMgbm90IHlldCBEb25lICovCi0gICAgICAgICAgICBlcC0+eGZlcl9idWZmICs9IFR4Qnl0ZU5icmU7Ci0gICAgICAgICAgICBlcC0+eGZlcl9jb3VudCArPSBUeEJ5dGVOYnJlOwotICAgICAgICAgICAgKHZvaWQpVVNCX0VQU3RhcnRYZmVyKGhwY2QtPkluc3RhbmNlLCBlcCk7CisgICAgICAgICAgICAodm9pZClIQUxfUENEX0VQX0RCX1RyYW5zbWl0KGhwY2QsIGVwLCB3RVBWYWwpOwogICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvKiBEb3VibGUgQnVmZmVyIGJ1bGsgSU4gKGJ1bGsgdHJhbnNmZXIgTGVuID4gRXBfTXBzKSAqLwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAodm9pZClIQUxfUENEX0VQX0RCX1RyYW5zbWl0KGhwY2QsIGVwLCB3RVBWYWwpOworI2VuZGlmIC8qIChVU0VfVVNCX0RPVUJMRV9CVUZGRVIgPT0gMVUpICovCiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC0xNzc5LDYgKzE3OTcsNyBAQAogfQogCiAKKyNpZiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKQogLyoqCiAgICogQGJyaWVmICBNYW5hZ2UgZG91YmxlIGJ1ZmZlciBidWxrIG91dCB0cmFuc2FjdGlvbiBmcm9tIElTUgogICAqIEBwYXJhbSAgaHBjZCBQQ0QgaGFuZGxlCkBAIC0xODEyLDEwICsxODMxLDEwIEBACiAgICAgICBQQ0RfU0VUX0VQX1JYX1NUQVRVUyhocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgVVNCX0VQX1JYX05BSyk7CiAgICAgfQogCi0gICAgLyogQ2hlY2sgaWYgQnVmZmVyMSBpcyBpbiBibG9ja2VkIHNhdGUgd2hpY2ggcmVxdWlyZXMgdG8gdG9nZ2xlICovCisgICAgLyogQ2hlY2sgaWYgQnVmZmVyMSBpcyBpbiBibG9ja2VkIHN0YXRlIHdoaWNoIHJlcXVpcmVzIHRvIHRvZ2dsZSAqLwogICAgIGlmICgod0VQVmFsICYgVVNCX0VQX0RUT0dfVFgpICE9IDBVKQogICAgIHsKLSAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMFUpOworICAgICAgUENEX0ZSRUVfVVNFUl9CVUZGRVIoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0sIDBVKTsKICAgICB9CiAKICAgICBpZiAoY291bnQgIT0gMFUpCkBAIC0xODQ3LDcgKzE4NjYsNyBAQAogICAgIC8qTmVlZCB0byBGcmVlVXNlciBCdWZmZXIqLwogICAgIGlmICgod0VQVmFsICYgVVNCX0VQX0RUT0dfVFgpID09IDBVKQogICAgIHsKLSAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMFUpOworICAgICAgUENEX0ZSRUVfVVNFUl9CVUZGRVIoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0sIDBVKTsKICAgICB9CiAKICAgICBpZiAoY291bnQgIT0gMFUpCkBAIC0xODcxLDIyICsxODkwLDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0RfRVBUeXBlRGVmICplcCwgdWludDE2X3Qgd0VQVmFsKQogewogICB1aW50MzJfdCBsZW47Ci0gIHVpbnQxNl90IFR4Qnl0ZU5icmU7CisgIHVpbnQxNl90IFR4UGN0U2l6ZTsKIAogICAvKiBEYXRhIEJ1ZmZlcjAgQUNLIHJlY2VpdmVkICovCiAgIGlmICgod0VQVmFsICYgVVNCX0VQX0RUT0dfVFgpICE9IDBVKQogICB7CiAgICAgLyogbXVsdGktcGFja2V0IG9uIHRoZSBOT04gY29udHJvbCBJTiBlbmRwb2ludCAqLwotICAgIFR4Qnl0ZU5icmUgPSAodWludDE2X3QpUENEX0dFVF9FUF9EQlVGMF9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0pOworICAgIFR4UGN0U2l6ZSA9ICh1aW50MTZfdClQQ0RfR0VUX0VQX0RCVUYwX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSk7CiAKLSAgICBpZiAoZXAtPnhmZXJfbGVuID4gVHhCeXRlTmJyZSkKKyAgICBpZiAoZXAtPnhmZXJfbGVuID4gVHhQY3RTaXplKQogICAgIHsKLSAgICAgIGVwLT54ZmVyX2xlbiAtPSBUeEJ5dGVOYnJlOworICAgICAgZXAtPnhmZXJfbGVuIC09IFR4UGN0U2l6ZTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgIGVwLT54ZmVyX2xlbiA9IDBVOwogICAgIH0KKwogICAgIC8qIFRyYW5zZmVyIGlzIGNvbXBsZXRlZCAqLwogICAgIGlmIChlcC0+eGZlcl9sZW4gPT0gMFUpCiAgICAgewpAQCAtMTkwMiw3ICsxOTIyLDcgQEAKIAogICAgICAgaWYgKCh3RVBWYWwgJiBVU0JfRVBfRFRPR19SWCkgIT0gMFUpCiAgICAgICB7Ci0gICAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMVUpOworICAgICAgICBQQ0RfRlJFRV9VU0VSX0JVRkZFUihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMVUpOwogICAgICAgfQogICAgIH0KICAgICBlbHNlIC8qIFRyYW5zZmVyIGlzIG5vdCB5ZXQgRG9uZSAqLwpAQCAtMTkxMCwxNCArMTkzMCwxNCBAQAogICAgICAgLyogbmVlZCB0byBGcmVlIFVTQiBCdWZmICovCiAgICAgICBpZiAoKHdFUFZhbCAmIFVTQl9FUF9EVE9HX1JYKSAhPSAwVSkKICAgICAgIHsKLSAgICAgICAgUENEX0ZyZWVVc2VyQnVmZmVyKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCAxVSk7CisgICAgICAgIFBDRF9GUkVFX1VTRVJfQlVGRkVSKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCAxVSk7CiAgICAgICB9CiAKICAgICAgIC8qIFN0aWxsIHRoZXJlIGlzIGRhdGEgdG8gRmlsbCBpbiB0aGUgbmV4dCBCdWZmZXIgKi8KICAgICAgIGlmIChlcC0+eGZlcl9maWxsX2RiID09IDFVKQogICAgICAgewotICAgICAgICBlcC0+eGZlcl9idWZmICs9IFR4Qnl0ZU5icmU7Ci0gICAgICAgIGVwLT54ZmVyX2NvdW50ICs9IFR4Qnl0ZU5icmU7CisgICAgICAgIGVwLT54ZmVyX2J1ZmYgKz0gVHhQY3RTaXplOworICAgICAgICBlcC0+eGZlcl9jb3VudCArPSBUeFBjdFNpemU7CiAKICAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSBsZW4gb2YgdGhlIG5ldyBidWZmZXIgdG8gZmlsbCAqLwogICAgICAgICBpZiAoZXAtPnhmZXJfbGVuX2RiID49IGVwLT5tYXhwYWNrZXQpCkBAIC0xOTI3LDcgKzE5NDcsNyBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGVwLT54ZmVyX2xlbl9kYiA9PSAwVSkKICAgICAgICAgewotICAgICAgICAgIGxlbiA9IFR4Qnl0ZU5icmU7CisgICAgICAgICAgbGVuID0gVHhQY3RTaXplOwogICAgICAgICAgIGVwLT54ZmVyX2ZpbGxfZGIgPSAwVTsKICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0xOTQ5LDExICsxOTY5LDExIEBACiAgIGVsc2UgLyogRGF0YSBCdWZmZXIxIEFDSyByZWNlaXZlZCAqLwogICB7CiAgICAgLyogbXVsdGktcGFja2V0IG9uIHRoZSBOT04gY29udHJvbCBJTiBlbmRwb2ludCAqLwotICAgIFR4Qnl0ZU5icmUgPSAodWludDE2X3QpUENEX0dFVF9FUF9EQlVGMV9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0pOworICAgIFR4UGN0U2l6ZSA9ICh1aW50MTZfdClQQ0RfR0VUX0VQX0RCVUYxX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSk7CiAKLSAgICBpZiAoZXAtPnhmZXJfbGVuID49IFR4Qnl0ZU5icmUpCisgICAgaWYgKGVwLT54ZmVyX2xlbiA+PSBUeFBjdFNpemUpCiAgICAgewotICAgICAgZXAtPnhmZXJfbGVuIC09IFR4Qnl0ZU5icmU7CisgICAgICBlcC0+eGZlcl9sZW4gLT0gVHhQY3RTaXplOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtMTk3Niw3ICsxOTk2LDcgQEAKICAgICAgIC8qIG5lZWQgdG8gRnJlZSBVU0IgQnVmZiAqLwogICAgICAgaWYgKCh3RVBWYWwgJiBVU0JfRVBfRFRPR19SWCkgPT0gMFUpCiAgICAgICB7Ci0gICAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMVUpOworICAgICAgICBQQ0RfRlJFRV9VU0VSX0JVRkZFUihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMVUpOwogICAgICAgfQogICAgIH0KICAgICBlbHNlIC8qIFRyYW5zZmVyIGlzIG5vdCB5ZXQgRG9uZSAqLwpAQCAtMTk4NCwxNCArMjAwNCwxNCBAQAogICAgICAgLyogbmVlZCB0byBGcmVlIFVTQiBCdWZmICovCiAgICAgICBpZiAoKHdFUFZhbCAmIFVTQl9FUF9EVE9HX1JYKSA9PSAwVSkKICAgICAgIHsKLSAgICAgICAgUENEX0ZyZWVVc2VyQnVmZmVyKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCAxVSk7CisgICAgICAgIFBDRF9GUkVFX1VTRVJfQlVGRkVSKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCAxVSk7CiAgICAgICB9CiAKICAgICAgIC8qIFN0aWxsIHRoZXJlIGlzIGRhdGEgdG8gRmlsbCBpbiB0aGUgbmV4dCBCdWZmZXIgKi8KICAgICAgIGlmIChlcC0+eGZlcl9maWxsX2RiID09IDFVKQogICAgICAgewotICAgICAgICBlcC0+eGZlcl9idWZmICs9IFR4Qnl0ZU5icmU7Ci0gICAgICAgIGVwLT54ZmVyX2NvdW50ICs9IFR4Qnl0ZU5icmU7CisgICAgICAgIGVwLT54ZmVyX2J1ZmYgKz0gVHhQY3RTaXplOworICAgICAgICBlcC0+eGZlcl9jb3VudCArPSBUeFBjdFNpemU7CiAKICAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSBsZW4gb2YgdGhlIG5ldyBidWZmZXIgdG8gZmlsbCAqLwogICAgICAgICBpZiAoZXAtPnhmZXJfbGVuX2RiID49IGVwLT5tYXhwYWNrZXQpCkBAIC0yMDAxLDcgKzIwMjEsNyBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGVwLT54ZmVyX2xlbl9kYiA9PSAwVSkKICAgICAgICAgewotICAgICAgICAgIGxlbiA9IFR4Qnl0ZU5icmU7CisgICAgICAgICAgbGVuID0gVHhQY3RTaXplOwogICAgICAgICAgIGVwLT54ZmVyX2ZpbGxfZGIgPSAwVTsKICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0yMDI1LDYgKzIwNDUsNyBAQAogCiAgIHJldHVybiBIQUxfT0s7CiB9CisjZW5kaWYgLyogKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkgKi8KIAogCiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYzeHhfaGFsX3BjZF9leC5jIGIvU3JjL3N0bTMyZjN4eF9oYWxfcGNkX2V4LmMKaW5kZXggMThlMTkwMy4uOTQ0Y2MzNCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9oYWxfcGNkX2V4LmMKKysrIGIvU3JjL3N0bTMyZjN4eF9oYWxfcGNkX2V4LmMKQEAgLTEwMCw2ICsxMDAsNyBAQAogICAgIC8qIENvbmZpZ3VyZSB0aGUgUE1BICovCiAgICAgZXAtPnBtYWFkcmVzcyA9ICh1aW50MTZfdClwbWFhZHJlc3M7CiAgIH0KKyNpZiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKQogICBlbHNlIC8qIFVTQl9EQkxfQlVGICovCiAgIHsKICAgICAvKiBEb3VibGUgQnVmZmVyIEVuZHBvaW50ICovCkBAIC0xMDgsNiArMTA5LDcgQEAKICAgICBlcC0+cG1hYWRkcjAgPSAodWludDE2X3QpKHBtYWFkcmVzcyAmIDB4RkZGRlUpOwogICAgIGVwLT5wbWFhZGRyMSA9ICh1aW50MTZfdCkoKHBtYWFkcmVzcyAmIDB4RkZGRjAwMDBVKSA+PiAxNik7CiAgIH0KKyNlbmRpZiAvKiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKSAqLwogCiAgIHJldHVybiBIQUxfT0s7CiB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF9wd3IuYyBiL1NyYy9zdG0zMmYzeHhfaGFsX3B3ci5jCmluZGV4IGMwNjM5NDQuLjc3ZDVjMmUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfaGFsX3B3ci5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX3B3ci5jCkBAIC0xOSw4ICsxOSw2IEBACiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gIEB2ZXJiYXRpbQotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTI3MSw3ICsyNjksNyBAQAogICAqICAgICAgICAgICAgQGFyZyBQV1JfTUFJTlJFR1VMQVRPUl9PTjogU0xFRVAgbW9kZSB3aXRoIHJlZ3VsYXRvciBPTgogICAqICAgICAgICAgICAgQGFyZyBQV1JfTE9XUE9XRVJSRUdVTEFUT1JfT046IFNMRUVQIG1vZGUgd2l0aCBsb3cgcG93ZXIgcmVndWxhdG9yIE9OCiAgICogQG5vdGUgVGhpcyBwYXJhbWV0ZXIgaGFzIG5vIGVmZmVjdCBpbiBGMyBmYW1pbHkgYW5kIGlzIGp1c3QgbWFpbnRhaW5lZCB0byAKLSAgKiAgICAgICBvZmZlciBmdWxsIHBvcnRhYmlsaXR5IG9mIG90aGVyIFNUTTMyIGZhbWlsaWVzIHNvZnR3YXJlcy4KKyAgKiAgICAgICBvZmZlciBmdWxsIHBvcnRhYmlsaXR5IG9mIG90aGVyIFNUTTMyIGZhbWlsaWVzIHNvZnR3YXJlLgogICAqIEBwYXJhbSBTTEVFUEVudHJ5IFNwZWNpZmllcyBpZiBTTEVFUCBtb2RlIGlzIGVudGVyZWQgd2l0aCBXRkkgb3IgV0ZFIGluc3RydWN0aW9uLgogICAqICAgICAgICAgICBXaGVuIFdGSSBlbnRyeSBpcyB1c2VkLCB0aWNrIGludGVycnVwdCBoYXZlIHRvIGJlIGRpc2FibGVkIGlmIG5vdCBkZXNpcmVkIGFzIAogICAqICAgICAgICAgICB0aGUgaW50ZXJydXB0IHdha2UgdXAgc291cmNlLgpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfcmNjLmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9yY2MuYwppbmRleCAyNjBiYTZiLi5hY2EwZTE4IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9yY2MuYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF9yY2MuYwpAQCAtOCwxNyArOCw2IEBACiAgICogICAgICAgICAgICsgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKICAgKiAgICAgICAKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICogQGF0dGVudGlvbgotICAqCi0gICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KLSAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgotICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICBAdmVyYmF0aW0gICAgICAgICAgICAgICAgCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICMjIyMjIFJDQyBzcGVjaWZpYyBmZWF0dXJlcyAjIyMjIwpAQCAtNTcsNiArNDYsMTUgQEAKIAogICBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGF0dGVudGlvbgorICAqCisgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAqCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEyMjAsMyArMTIxOCw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF9yY2NfZXguYyBiL1NyYy9zdG0zMmYzeHhfaGFsX3JjY19leC5jCmluZGV4IDhmZGNhN2UuLjg5NjZhZGIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfaGFsX3JjY19leC5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX3JjY19leC5jCkBAIC0xMywxMiArMTMsMTEgQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqLworICAqLyAKIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpbmNsdWRlICJzdG0zMmYzeHhfaGFsLmgiCkBAIC0xNTc5LDMgKzE1NzgsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfcnRjLmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9ydGMuYwppbmRleCBjOTNmYmJlLi4zYTJhNDFjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9ydGMuYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF9ydGMuYwpAQCAtNSwxNSArNSwxMSBAQAogICAqIEBicmllZiAgIFJUQyBIQUwgbW9kdWxlIGRyaXZlci4KICAgKiAgICAgICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nCiAgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBSZWFsLVRpbWUgQ2xvY2sgKFJUQykgcGVyaXBoZXJhbDoKLSAgKiAgICAgICAgICAgKyBJbml0aWFsaXphdGlvbgotICAqICAgICAgICAgICArIENhbGVuZGFyIChUaW1lIGFuZCBEYXRlKSBjb25maWd1cmF0aW9uCi0gICogICAgICAgICAgICsgQWxhcm1zIChBbGFybSBBIGFuZCBBbGFybSBCKSBjb25maWd1cmF0aW9uCi0gICogICAgICAgICAgICsgV2FrZVVwIFRpbWVyIGNvbmZpZ3VyYXRpb24KLSAgKiAgICAgICAgICAgKyBUaW1lU3RhbXAgY29uZmlndXJhdGlvbgotICAqICAgICAgICAgICArIFRhbXBlcnMgY29uZmlndXJhdGlvbgotICAqICAgICAgICAgICArIEJhY2t1cCBEYXRhIFJlZ2lzdGVycyBjb25maWd1cmF0aW9uCi0gICogICAgICAgICAgICsgUlRDIFRhbXBlciBhbmQgVGltZVN0YW1wIFBpbnMgU2VsZWN0aW9uCi0gICogICAgICAgICAgICsgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudAorICAqICAgICAgICAgICArIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKKyAgKiAgICAgICAgICAgKyBSVEMgQ2FsZW5kYXIgKFRpbWUgYW5kIERhdGUpIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zCisgICogICAgICAgICAgICsgUlRDIEFsYXJtcyAoQWxhcm0gQSBhbmQgQWxhcm0gQikgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMKKyAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCisgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCkBAIC0yNywxNTEgKzIzLDEyMiBAQAogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICBAdmVyYmF0aW0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgICAgICAjIyMjIyBSVEMgYW5kIEJhY2t1cCBEb21haW4gT3BlcmF0aW5nIENvbmRpdGlvbiAjIyMjIworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgWy4uXSBUaGUgcmVhbC10aW1lIGNsb2NrIChSVEMpIGFuZCB0aGUgUlRDIGJhY2t1cCByZWdpc3RlcnMgY2FuIGJlIHBvd2VyZWQKKyAgICAgICBmcm9tIHRoZSBWQkFUIHZvbHRhZ2Ugd2hlbiB0aGUgbWFpbiBWREQgc3VwcGx5IGlzIHBvd2VyZWQgb2ZmLgorICAgICAgIFRvIHJldGFpbiB0aGUgY29udGVudCBvZiB0aGUgUlRDIGJhY2t1cCByZWdpc3RlcnMgYW5kIHN1cHBseSB0aGUgUlRDIHdoZW4KKyAgICAgICBWREQgaXMgdHVybmVkIG9mZiwgVkJBVCBwaW4gY2FuIGJlIGNvbm5lY3RlZCB0byBhbiBvcHRpb25hbCBzdGFuZGJ5CisgICAgICAgdm9sdGFnZSBzdXBwbGllZCBieSBhIGJhdHRlcnkgb3IgYnkgYW5vdGhlciBzb3VyY2UuCiAKLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIFJUQyBPcGVyYXRpbmcgQ29uZGl0aW9uICMjIyMjCi0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIFsuLl0gVGhlIHJlYWwtdGltZSBjbG9jayAoUlRDKSBhbmQgdGhlIFJUQyBiYWNrdXAgcmVnaXN0ZXJzIGNhbiBiZSBwb3dlcmVkCi0gICAgICAgICBmcm9tIHRoZSBWQkFUIHZvbHRhZ2Ugd2hlbiB0aGUgbWFpbiBWREQgc3VwcGx5IGlzIHBvd2VyZWQgb2ZmLgotICAgICAgICAgVG8gcmV0YWluIHRoZSBjb250ZW50IG9mIHRoZSBSVEMgYmFja3VwIHJlZ2lzdGVycyBhbmQgc3VwcGx5IHRoZSBSVEMKLSAgICAgICAgIHdoZW4gVkREIGlzIHR1cm5lZCBvZmYsIFZCQVQgcGluIGNhbiBiZSBjb25uZWN0ZWQgdG8gYW4gb3B0aW9uYWwKLSAgICAgICAgIHN0YW5kYnkgdm9sdGFnZSBzdXBwbGllZCBieSBhIGJhdHRlcnkgb3IgYnkgYW5vdGhlciBzb3VyY2UuCisgIFsuLl0gVG8gYWxsb3cgdGhlIFJUQyBvcGVyYXRpbmcgZXZlbiB3aGVuIHRoZSBtYWluIGRpZ2l0YWwgc3VwcGx5IChWREQpIGlzIHR1cm5lZAorICAgICAgIG9mZiwgdGhlIFZCQVQgcGluIHBvd2VycyB0aGUgZm9sbG93aW5nIGJsb2NrczoKKyAgICAoIykgVGhlIFJUQworICAgICgjKSBUaGUgTFNFIG9zY2lsbGF0b3IKKyAgICAoIykgUEMxMyB0byBQQzE1IEkvT3MsIHBsdXMgUEEwIGFuZCBQRTYgSS9PcyAod2hlbiBhdmFpbGFibGUpCiAKLSAgICBbLi5dIFRvIGFsbG93IHRoZSBSVEMgdG8gb3BlcmF0ZSBldmVuIHdoZW4gdGhlIG1haW4gZGlnaXRhbCBzdXBwbHkgKFZERCkKLSAgICAgICAgIGlzIHR1cm5lZCBvZmYsIHRoZSBWQkFUIHBpbiBwb3dlcnMgdGhlIGZvbGxvd2luZyBibG9ja3M6Ci0gICAgICAgICAgICgjKSBUaGUgUlRDCi0gICAgICAgICAgICgjKSBUaGUgTFNFIG9zY2lsbGF0b3IKLSAgICAgICAgICAgKCMpIFBDMTMgdG8gUEMxNSBJL09zICh3aGVuIGF2YWlsYWJsZSkKKyAgWy4uXSBXaGVuIHRoZSBiYWNrdXAgZG9tYWluIGlzIHN1cHBsaWVkIGJ5IFZERCAoYW5hbG9nIHN3aXRjaCBjb25uZWN0ZWQgdG8gVkREKSwKKyAgICAgICB0aGUgZm9sbG93aW5nIHBpbnMgYXJlIGF2YWlsYWJsZToKKyAgICAoIykgUEMxNCBhbmQgUEMxNSBjYW4gYmUgdXNlZCBhcyBlaXRoZXIgR1BJTyBvciBMU0UgcGlucworICAgICgjKSBQQzEzIGNhbiBiZSB1c2VkIGFzIGEgR1BJTyBvciBhcyB0aGUgUlRDX0FGMSBwaW4KKyAgICAoIykgUEEwIGNhbiBiZSB1c2VkIGFzIGEgR1BJTyBvciBhcyB0aGUgUlRDX0FGMiBwaW4KKyAgICAoIykgUEU2IGNhbiBiZSB1c2VkIGFzIGEgR1BJTyBvciBhcyB0aGUgUlRDX0FGMyBwaW4KIAotICAgIFsuLl0gV2hlbiB0aGUgYmFja3VwIGRvbWFpbiBpcyBzdXBwbGllZCBieSBWREQgKGFuYWxvZyBzd2l0Y2ggY29ubmVjdGVkCi0gICAgICAgICB0byBWREQpLCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlOgotICAgICAgICAgICAoIykgUEMxNCBhbmQgUEMxNSBjYW4gYmUgdXNlZCBhcyBlaXRoZXIgR1BJTyBvciBMU0UgcGlucwotICAgICAgICAgICAoIykgUEMxMyBjYW4gYmUgdXNlZCBhcyBhIEdQSU8gb3IgYXMgdGhlIFJUQ19PVVQgcGluCisgIFsuLl0gV2hlbiB0aGUgYmFja3VwIGRvbWFpbiBpcyBzdXBwbGllZCBieSBWQkFUIChhbmFsb2cgc3dpdGNoIGNvbm5lY3RlZCB0byBWQkFUCisgICAgICAgYmVjYXVzZSBWREQgaXMgbm90IHByZXNlbnQpLCB0aGUgZm9sbG93aW5nIHBpbnMgYXJlIGF2YWlsYWJsZToKKyAgICAoIykgUEMxNCBhbmQgUEMxNSBjYW4gYmUgdXNlZCBhcyBMU0UgcGlucyBvbmx5CisgICAgKCMpIFBDMTMgY2FuIGJlIHVzZWQgYXMgdGhlIFJUQ19BRjEgcGluCisgICAgKCMpIFBBMCBjYW4gYmUgdXNlZCBhcyB0aGUgUlRDX0FGMiBwaW4KKyAgICAoIykgUEU2IGNhbiBiZSB1c2VkIGFzIHRoZSBSVENfQUYzIHBpbgogCi0gICAgWy4uXSBXaGVuIHRoZSBiYWNrdXAgZG9tYWluIGlzIHN1cHBsaWVkIGJ5IFZCQVQgKGFuYWxvZyBzd2l0Y2ggY29ubmVjdGVkCi0gICAgICAgICB0byBWQkFUIGJlY2F1c2UgVkREIGlzIG5vdCBwcmVzZW50KSwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZToKLSAgICAgICAgICAgKCMpIFBDMTQgYW5kIFBDMTUgY2FuIGJlIHVzZWQgYXMgTFNFIHBpbnMgb25seQotICAgICAgICAgICAoIykgUEMxMyBjYW4gYmUgdXNlZCBhcyB0aGUgUlRDX09VVCBwaW4KLQotICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgQmFja3VwIERvbWFpbiBSZXNldCAjIyMjIwotID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBbLi5dIFRoZSBiYWNrdXAgZG9tYWluIHJlc2V0IHNldHMgYWxsIFJUQyByZWdpc3RlcnMgYW5kIHRoZSBSQ0NfQkRDUgotICAgICAgICAgcmVnaXN0ZXIgdG8gdGhlaXIgcmVzZXQgdmFsdWVzLgotICAgICAgICAgQSBiYWNrdXAgZG9tYWluIHJlc2V0IGlzIGdlbmVyYXRlZCB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV2ZW50cwotICAgICAgICAgb2NjdXJzOgotICAgICAgICAgICAoIykgU29mdHdhcmUgcmVzZXQsIHRyaWdnZXJlZCBieSBzZXR0aW5nIHRoZSBCRFJTVCBiaXQgaW4gdGhlCi0gICAgICAgICAgICAgICBSQ0MgQmFja3VwIGRvbWFpbiBjb250cm9sIHJlZ2lzdGVyIChSQ0NfQkRDUikuCi0gICAgICAgICAgICgjKSBWREQgb3IgVkJBVCBwb3dlciBvbiwgaWYgYm90aCBzdXBwbGllcyBoYXZlIHByZXZpb3VzbHkgYmVlbgotICAgICAgICAgICAgICAgcG93ZXJlZCBvZmYuCisgICAgICAgICAgICAgICAgICAgIyMjIyMgQmFja3VwIERvbWFpbiBSZXNldCAjIyMjIworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgWy4uXSBUaGUgYmFja3VwIGRvbWFpbiByZXNldCBzZXRzIGFsbCBSVEMgcmVnaXN0ZXJzIGFuZCB0aGUgUkNDX0JEQ1IgcmVnaXN0ZXIKKyAgICAgICB0byB0aGVpciByZXNldCB2YWx1ZXMuCisgIFsuLl0gQSBiYWNrdXAgZG9tYWluIHJlc2V0IGlzIGdlbmVyYXRlZCB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV2ZW50cyBvY2N1cnM6CisgICAgKCMpIFNvZnR3YXJlIHJlc2V0LCB0cmlnZ2VyZWQgYnkgc2V0dGluZyB0aGUgQkRSU1QgYml0IGluIHRoZQorICAgICAgICBSQ0MgQmFja3VwIGRvbWFpbiBjb250cm9sIHJlZ2lzdGVyIChSQ0NfQkRDUikuCisgICAgKCMpIFZERCBvciBWQkFUIHBvd2VyIG9uLCBpZiBib3RoIHN1cHBsaWVzIGhhdmUgcHJldmlvdXNseSBiZWVuIHBvd2VyZWQgb2ZmLgogCiAgICAgICAgICAgICAgICAgICAgIyMjIyMgQmFja3VwIERvbWFpbiBBY2Nlc3MgIyMjIyMKLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgWy4uXSBBZnRlciByZXNldCwgdGhlIGJhY2t1cCBkb21haW4gKFJUQyByZWdpc3RlcnMsIFJUQyBiYWNrdXAgZGF0YQotICAgICAgICAgcmVnaXN0ZXJzIGFuZCBiYWNrdXAgU1JBTSkgaXMgcHJvdGVjdGVkIGFnYWluc3QgcG9zc2libGUgdW53YW50ZWQgd3JpdGUKLSAgICAgICAgIGFjY2Vzc2VzLgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgWy4uXSBBZnRlciByZXNldCwgdGhlIGJhY2t1cCBkb21haW4gKFJUQyByZWdpc3RlcnMsIFJUQyBiYWNrdXAgZGF0YSByZWdpc3RlcnMKKyAgICAgICBpcyBwcm90ZWN0ZWQgYWdhaW5zdCBwb3NzaWJsZSB1bndhbnRlZCB3cml0ZSBhY2Nlc3Nlcy4KKyAgWy4uXSBUbyBlbmFibGUgYWNjZXNzIHRvIHRoZSBSVEMgRG9tYWluIGFuZCBSVEMgcmVnaXN0ZXJzLCBwcm9jZWVkIGFzIGZvbGxvd3M6CisgICAgKCspIEVuYWJsZSB0aGUgUG93ZXIgQ29udHJvbGxlciAoUFdSKSBBUEIxIGludGVyZmFjZSBjbG9jayB1c2luZyB0aGUKKyAgICAgICAgX19IQUxfUkNDX1BXUl9DTEtfRU5BQkxFKCkgbWFjcm8uCisgICAgKCspIEVuYWJsZSBhY2Nlc3MgdG8gUlRDIGRvbWFpbiB1c2luZyB0aGUgSEFMX1BXUl9FbmFibGVCa1VwQWNjZXNzKCkgZnVuY3Rpb24uCisgICAgKCspIFNlbGVjdCB0aGUgUlRDIGNsb2NrIHNvdXJjZSB1c2luZyB0aGUgX19IQUxfUkNDX1JUQ19DT05GSUcoKSBtYWNyby4KKyAgICAoKykgRW5hYmxlIFJUQyBDbG9jayB1c2luZyB0aGUgX19IQUxfUkNDX1JUQ19FTkFCTEUoKSBtYWNyby4KIAotICAgIFsuLl0gVG8gZW5hYmxlIGFjY2VzcyB0byB0aGUgUlRDIERvbWFpbiBhbmQgUlRDIHJlZ2lzdGVycywgcHJvY2VlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAoIykgRW5hYmxlIHRoZSBQb3dlciBDb250cm9sbGVyIChQV1IpIEFQQjEgaW50ZXJmYWNlIGNsb2NrIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgX19IQUxfUkNDX1BXUl9DTEtfRU5BQkxFKCkgZnVuY3Rpb24uCi0gICAgICAgICAgICgjKSBFbmFibGUgYWNjZXNzIHRvIFJUQyBkb21haW4gdXNpbmcgdGhlIEhBTF9QV1JfRW5hYmxlQmtVcEFjY2VzcygpIGZ1bmN0aW9uLgotICAgICAgICAgICAoIykgU2VsZWN0IHRoZSBSVEMgY2xvY2sgc291cmNlIHVzaW5nIHRoZSBfX0hBTF9SQ0NfUlRDX0NPTkZJRygpIGZ1bmN0aW9uLgotICAgICAgICAgICAoIykgRW5hYmxlIFJUQyBDbG9jayB1c2luZyB0aGUgX19IQUxfUkNDX1JUQ19FTkFCTEUoKSBmdW5jdGlvbi4KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBbLi5dCisgICAgKCspIEVuYWJsZSB0aGUgUlRDIGRvbWFpbiBhY2Nlc3MgKHNlZSBkZXNjcmlwdGlvbiBpbiB0aGUgc2VjdGlvbiBhYm92ZSkuCisgICAgKCspIENvbmZpZ3VyZSB0aGUgUlRDIFByZXNjYWxlciAoQXN5bmNocm9ub3VzIGFuZCBTeW5jaHJvbm91cykgYW5kIFJUQyBob3VyCisgICAgICAgIGZvcm1hdCB1c2luZyB0aGUgSEFMX1JUQ19Jbml0KCkgZnVuY3Rpb24uCiAKKyAgKioqIFRpbWUgYW5kIERhdGUgY29uZmlndXJhdGlvbiAqKioKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgWy4uXQorICAgICgrKSBUbyBjb25maWd1cmUgdGhlIFJUQyBDYWxlbmRhciAoVGltZSBhbmQgRGF0ZSkgdXNlIHRoZSBIQUxfUlRDX1NldFRpbWUoKQorICAgICAgICBhbmQgSEFMX1JUQ19TZXREYXRlKCkgZnVuY3Rpb25zLgorICAgICgrKSBUbyByZWFkIHRoZSBSVEMgQ2FsZW5kYXIsIHVzZSB0aGUgSEFMX1JUQ19HZXRUaW1lKCkgYW5kIEhBTF9SVENfR2V0RGF0ZSgpCisgICAgICAgIGZ1bmN0aW9ucy4KKyAgICAoKykgVG8gbWFuYWdlIHRoZSBSVEMgc3VtbWVyIG9yIHdpbnRlciB0aW1lIGNoYW5nZSwgdXNlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgZnVuY3Rpb25zOgorICAgICAgICAoKyspIEhBTF9SVENfRFNUX0FkZDFIb3VyKCkgb3IgSEFMX1JUQ19EU1RfU3ViMUhvdXIgdG8gYWRkIG9yIHN1YnRyYWN0CisgICAgICAgICAgICAgMSBob3VyIGZyb20gdGhlIGNhbGVuZGFyIHRpbWUuCisgICAgICAgICgrKykgSEFMX1JUQ19EU1RfU2V0U3RvcmVPcGVyYXRpb24oKSBvciBIQUxfUlRDX0RTVF9DbGVhclN0b3JlT3BlcmF0aW9uCisgICAgICAgICAgICAgdG8gbWVtb3JpemUgd2hldGhlciB0aGUgdGltZSBjaGFuZ2UgaGFzIGJlZW4gcGVyZm9ybWVkIG9yIG5vdC4KIAotICAgICAgICAgICAgICAgICAgIyMjIyMgSG93IHRvIHVzZSBSVEMgRHJpdmVyICMjIyMjCi0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIFsuLl0KLSAgICAgICAgKCspIEVuYWJsZSB0aGUgUlRDIGRvbWFpbiBhY2Nlc3MgKHNlZSBkZXNjcmlwdGlvbiBpbiB0aGUgc2VjdGlvbiBhYm92ZSkuCi0gICAgICAgICgrKSBDb25maWd1cmUgdGhlIFJUQyBQcmVzY2FsZXIgKEFzeW5jaHJvbm91cyBhbmQgU3luY2hyb25vdXMpIGFuZCBSVEMgaG91cgotICAgICAgICAgICAgZm9ybWF0IHVzaW5nIHRoZSBIQUxfUlRDX0luaXQoKSBmdW5jdGlvbi4KLQotICAgICoqKiBUaW1lIGFuZCBEYXRlIGNvbmZpZ3VyYXRpb24gKioqCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBbLi5dCi0gICAgICAgICgrKSBUbyBjb25maWd1cmUgdGhlIFJUQyBDYWxlbmRhciAoVGltZSBhbmQgRGF0ZSkgdXNlIHRoZSBIQUxfUlRDX1NldFRpbWUoKQotICAgICAgICAgICAgYW5kIEhBTF9SVENfU2V0RGF0ZSgpIGZ1bmN0aW9ucy4KLSAgICAgICAgKCspIFRvIHJlYWQgdGhlIFJUQyBDYWxlbmRhciwgdXNlIHRoZSBIQUxfUlRDX0dldFRpbWUoKSBhbmQgSEFMX1JUQ19HZXREYXRlKCkgZnVuY3Rpb25zLgotCi0gICAgKioqIEFsYXJtIGNvbmZpZ3VyYXRpb24gKioqCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgWy4uXQotICAgICAgICAoKykgVG8gY29uZmlndXJlIHRoZSBSVEMgQWxhcm0gdXNlIHRoZSBIQUxfUlRDX1NldEFsYXJtKCkgZnVuY3Rpb24uCi0gICAgICAgICAgICBZb3UgY2FuIGFsc28gY29uZmlndXJlIHRoZSBSVEMgQWxhcm0gd2l0aCBpbnRlcnJ1cHQgbW9kZSB1c2luZyB0aGUKLSAgICAgICAgICAgIEhBTF9SVENfU2V0QWxhcm1fSVQoKSBmdW5jdGlvbi4KLSAgICAgICAgKCspIFRvIHJlYWQgdGhlIFJUQyBBbGFybSwgdXNlIHRoZSBIQUxfUlRDX0dldEFsYXJtKCkgZnVuY3Rpb24uCi0KLSAgICAqKiogUlRDIFdha2V1cCBjb25maWd1cmF0aW9uICoqKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgWy4uXQotICAgICAgICAoKykgVG8gY29uZmlndXJlIHRoZSBSVEMgV2FrZXVwIENsb2NrIHNvdXJjZSBhbmQgQ291bnRlciB1c2UgdGhlIEhBTF9SVENfU2V0V2FrZVVwVGltZXIoKQotICAgICAgICAgICAgZnVuY3Rpb24uIFlvdSBjYW4gYWxzbyBjb25maWd1cmUgdGhlIFJUQyBXYWtldXAgdGltZXIgd2l0aCBpbnRlcnJ1cHQgbW9kZQotICAgICAgICAgICAgdXNpbmcgdGhlIEhBTF9SVENfU2V0V2FrZVVwVGltZXJfSVQoKSBmdW5jdGlvbi4KLSAgICAgICAgKCspIFRvIHJlYWQgdGhlIFJUQyBXYWtlVXAgQ291bnRlciByZWdpc3RlciwgdXNlIHRoZSBIQUxfUlRDX0dldFdha2VVcFRpbWVyKCkKLSAgICAgICAgICAgIGZ1bmN0aW9uLgotCi0gICAgKioqIFRpbWVTdGFtcCBjb25maWd1cmF0aW9uICoqKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBbLi5dCi0gICAgICAgICgrKSBDb25maWd1cmUgdGhlIFJUQ19BRiB0cmlnZ2VyIGFuZCBlbmFibGVzIHRoZSBSVEMgVGltZVN0YW1wIHVzaW5nIHRoZQotICAgICAgICAgICAgSEFMX1JUQ19TZXRUaW1lU3RhbXAoKSBmdW5jdGlvbi4gWW91IGNhbiBhbHNvIGNvbmZpZ3VyZSB0aGUgUlRDIFRpbWVTdGFtcCB3aXRoCi0gICAgICAgICAgICBpbnRlcnJ1cHQgbW9kZSB1c2luZyB0aGUgSEFMX1JUQ19TZXRUaW1lU3RhbXBfSVQoKSBmdW5jdGlvbi4KLSAgICAgICAgKCspIFRvIHJlYWQgdGhlIFJUQyBUaW1lU3RhbXAgVGltZSBhbmQgRGF0ZSByZWdpc3RlciwgdXNlIHRoZSBIQUxfUlRDX0dldFRpbWVTdGFtcCgpCi0gICAgICAgICAgICBmdW5jdGlvbi4KLQotICAgICoqKiBUYW1wZXIgY29uZmlndXJhdGlvbiAqKioKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgWy4uXQotICAgICAgICAoKykgRW5hYmxlIHRoZSBSVEMgVGFtcGVyIGFuZCBDb25maWd1cmUgdGhlIFRhbXBlciBmaWx0ZXIgY291bnQsIHRyaWdnZXIgRWRnZQotICAgICAgICAgICAgb3IgTGV2ZWwgYWNjb3JkaW5nIHRvIHRoZSBUYW1wZXIgZmlsdGVyIChpZiBlcXVhbCB0byAwIEVkZ2UgZWxzZSBMZXZlbCkKLSAgICAgICAgICAgIHZhbHVlLCBzYW1wbGluZyBmcmVxdWVuY3ksIHByZWNoYXJnZSBvciBkaXNjaGFyZ2UgYW5kIFB1bGwtVVAgdXNpbmcgdGhlCi0gICAgICAgICAgICBIQUxfUlRDX1NldFRhbXBlcigpIGZ1bmN0aW9uLiBZb3UgY2FuIGNvbmZpZ3VyZSBSVEMgVGFtcGVyIHdpdGggaW50ZXJydXB0Ci0gICAgICAgICAgICBtb2RlIHVzaW5nIEhBTF9SVENfU2V0VGFtcGVyX0lUKCkgZnVuY3Rpb24uCi0KLSAgICAqKiogQmFja3VwIERhdGEgUmVnaXN0ZXJzIGNvbmZpZ3VyYXRpb24gKioqCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIFsuLl0KLSAgICAgICAgKCspIFRvIHdyaXRlIHRvIHRoZSBSVEMgQmFja3VwIERhdGEgcmVnaXN0ZXJzLCB1c2UgdGhlIEhBTF9SVENfQktVUFdyaXRlKCkKLSAgICAgICAgICAgIGZ1bmN0aW9uLgotICAgICAgICAoKykgVG8gcmVhZCB0aGUgUlRDIEJhY2t1cCBEYXRhIHJlZ2lzdGVycywgdXNlIHRoZSBIQUxfUlRDX0JLVVBSZWFkKCkKLSAgICAgICAgICAgIGZ1bmN0aW9uLgotCisgICoqKiBBbGFybSBjb25maWd1cmF0aW9uICoqKgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgWy4uXQorICAgICgrKSBUbyBjb25maWd1cmUgdGhlIFJUQyBBbGFybSB1c2UgdGhlIEhBTF9SVENfU2V0QWxhcm0oKSBmdW5jdGlvbi4KKyAgICAgICAgWW91IGNhbiBhbHNvIGNvbmZpZ3VyZSB0aGUgUlRDIEFsYXJtIHdpdGggaW50ZXJydXB0IG1vZGUgdXNpbmcgdGhlCisgICAgICAgIEhBTF9SVENfU2V0QWxhcm1fSVQoKSBmdW5jdGlvbi4KKyAgICAoKykgVG8gcmVhZCB0aGUgUlRDIEFsYXJtLCB1c2UgdGhlIEhBTF9SVENfR2V0QWxhcm0oKSBmdW5jdGlvbi4KIAogICAgICAgICAgICAgICAgICAgIyMjIyMgUlRDIGFuZCBsb3cgcG93ZXIgbW9kZXMgIyMjIyMKLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgWy4uXSBUaGUgTUNVIGNhbiBiZSB3b2tlbiB1cCBmcm9tIGEgbG93IHBvd2VyIG1vZGUgYnkgYW4gUlRDIGFsdGVybmF0ZQotICAgICAgICAgZnVuY3Rpb24uCi0gICAgWy4uXSBUaGUgUlRDIGFsdGVybmF0ZSBmdW5jdGlvbnMgYXJlIHRoZSBSVEMgYWxhcm1zIChBbGFybSBBIGFuZCBBbGFybSBCKSwKLSAgICAgICAgIFJUQyB3YWtldXAsIFJUQyB0YW1wZXIgZXZlbnQgZGV0ZWN0aW9uIGFuZCBSVEMgdGltZSBzdGFtcCBldmVudCBkZXRlY3Rpb24uCi0gICAgICAgICBUaGVzZSBSVEMgYWx0ZXJuYXRlIGZ1bmN0aW9ucyBjYW4gd2FrZSB1cCB0aGUgc3lzdGVtIGZyb20gdGhlIFN0b3AgYW5kCi0gICAgICAgICBTdGFuZGJ5IGxvdyBwb3dlciBtb2Rlcy4KLSAgICBbLi5dIFRoZSBzeXN0ZW0gY2FuIGFsc28gd2FrZSB1cCBmcm9tIGxvdyBwb3dlciBtb2RlcyB3aXRob3V0IGRlcGVuZGluZwotICAgICAgICAgb24gYW4gZXh0ZXJuYWwgaW50ZXJydXB0IChBdXRvLXdha2V1cCBtb2RlKSwgYnkgdXNpbmcgdGhlIFJUQyBhbGFybQotICAgICAgICAgb3IgdGhlIFJUQyB3YWtldXAgZXZlbnRzLgotICAgIFsuLl0gVGhlIFJUQyBwcm92aWRlcyBhIHByb2dyYW1tYWJsZSB0aW1lIGJhc2UgZm9yIHdha2luZyB1cCBmcm9tIHRoZQotICAgICAgICAgU3RvcCBvciBTdGFuZGJ5IG1vZGUgYXQgcmVndWxhciBpbnRlcnZhbHMuCi0gICAgICAgICBXYWtldXAgZnJvbSBTVE9QIGFuZCBTdGFuZGJ5IG1vZGVzIGlzIHBvc3NpYmxlIG9ubHkgd2hlbiB0aGUgUlRDIGNsb2NrIHNvdXJjZQotICAgICAgICAgaXMgTFNFIG9yIExTSS4KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFsuLl0gVGhlIE1DVSBjYW4gYmUgd29rZW4gdXAgZnJvbSBhIGxvdyBwb3dlciBtb2RlIGJ5IGFuIFJUQyBhbHRlcm5hdGUKKyAgICAgICBmdW5jdGlvbi4KKyAgWy4uXSBUaGUgUlRDIGFsdGVybmF0ZSBmdW5jdGlvbnMgYXJlIHRoZSBSVEMgYWxhcm1zIChBbGFybSBBIGFuZCBBbGFybSBCKSwKKyAgICAgICBSVEMgd2FrZXVwLCBSVEMgdGFtcGVyIGV2ZW50IGRldGVjdGlvbiBhbmQgUlRDIHRpbWVzdGFtcCBldmVudCBkZXRlY3Rpb24uCisgICAgICAgVGhlc2UgUlRDIGFsdGVybmF0ZSBmdW5jdGlvbnMgY2FuIHdha2UgdXAgdGhlIHN5c3RlbSBmcm9tIHRoZSBTdG9wIGFuZAorICAgICAgIFN0YW5kYnkgbG93IHBvd2VyIG1vZGVzLgorICBbLi5dIFRoZSBzeXN0ZW0gY2FuIGFsc28gd2FrZSB1cCBmcm9tIGxvdyBwb3dlciBtb2RlcyB3aXRob3V0IGRlcGVuZGluZworICAgICAgIG9uIGFuIGV4dGVybmFsIGludGVycnVwdCAoQXV0by13YWtldXAgbW9kZSksIGJ5IHVzaW5nIHRoZSBSVEMgYWxhcm0KKyAgICAgICBvciB0aGUgUlRDIHdha2V1cCBldmVudHMuCisgIFsuLl0gVGhlIFJUQyBwcm92aWRlcyBhIHByb2dyYW1tYWJsZSB0aW1lIGJhc2UgZm9yIHdha2luZyB1cCBmcm9tIHRoZQorICAgICAgIFN0b3Agb3IgU3RhbmRieSBtb2RlIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzLgorICAgICAgIFdha2V1cCBmcm9tIFNUT1AgYW5kIFNUQU5EQlkgbW9kZXMgaXMgcG9zc2libGUgb25seSB3aGVuIHRoZSBSVEMgY2xvY2sKKyAgICAgICBzb3VyY2UgaXMgTFNFIG9yIExTSS4KIAogICAqKiogQ2FsbGJhY2sgcmVnaXN0cmF0aW9uICoqKgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQorICBbLi5dCiAgIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyB3aGVuIHNldCB0byAxCiAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCiAgIFVzZSBGdW5jdGlvbiBIQUxfUlRDX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhbiBpbnRlcnJ1cHQgY2FsbGJhY2suCi0KKyAgWy4uXQogICBGdW5jdGlvbiBIQUxfUlRDX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAoKykgQWxhcm1BRXZlbnRDYWxsYmFjayAgICAgICAgICA6IFJUQyBBbGFybSBBIEV2ZW50IGNhbGxiYWNrLgogICAgICgrKSBBbGFybUJFdmVudENhbGxiYWNrICAgICAgICAgIDogUlRDIEFsYXJtIEIgRXZlbnQgY2FsbGJhY2suCi0gICAgKCspIFRpbWVTdGFtcEV2ZW50Q2FsbGJhY2sgICAgICAgOiBSVEMgVGltZVN0YW1wIEV2ZW50IGNhbGxiYWNrLgorICAgICgrKSBUaW1lU3RhbXBFdmVudENhbGxiYWNrICAgICAgIDogUlRDIFRpbWVzdGFtcCBFdmVudCBjYWxsYmFjay4KICAgICAoKykgV2FrZVVwVGltZXJFdmVudENhbGxiYWNrICAgICA6IFJUQyBXYWtlVXBUaW1lciBFdmVudCBjYWxsYmFjay4KICAgICAoKykgVGFtcGVyMUV2ZW50Q2FsbGJhY2sgICAgICAgICA6IFJUQyBUYW1wZXIgMSBFdmVudCBjYWxsYmFjay4KICAgICAoKykgVGFtcGVyMkV2ZW50Q2FsbGJhY2sgICAgICAgICA6IFJUQyBUYW1wZXIgMiBFdmVudCBjYWxsYmFjay4KICAgICAoKykgVGFtcGVyM0V2ZW50Q2FsbGJhY2sgICAgICAgICA6IFJUQyBUYW1wZXIgMyBFdmVudCBjYWxsYmFjay4KICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgICAgICAgICA6IFJUQyBNc3BJbml0IGNhbGxiYWNrLgogICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgICAgICAgIDogUlRDIE1zcERlSW5pdCBjYWxsYmFjay4KKyAgWy4uXQogICBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECiAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCi0KKyAgWy4uXQogICBVc2UgZnVuY3Rpb24gSEFMX1JUQ19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgIHdlYWsgZnVuY3Rpb24uCiAgIEhBTF9SVENfVW5SZWdpc3RlckNhbGxiYWNrKCkgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLApAQCAtMTc5LDM0ICsxNDYsMzUgQEAKICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAoKykgQWxhcm1BRXZlbnRDYWxsYmFjayAgICAgICAgICA6IFJUQyBBbGFybSBBIEV2ZW50IGNhbGxiYWNrLgogICAgICgrKSBBbGFybUJFdmVudENhbGxiYWNrICAgICAgICAgIDogUlRDIEFsYXJtIEIgRXZlbnQgY2FsbGJhY2suCi0gICAgKCspIFRpbWVTdGFtcEV2ZW50Q2FsbGJhY2sgICAgICAgOiBSVEMgVGltZVN0YW1wIEV2ZW50IGNhbGxiYWNrLgorICAgICgrKSBUaW1lU3RhbXBFdmVudENhbGxiYWNrICAgICAgIDogUlRDIFRpbWVzdGFtcCBFdmVudCBjYWxsYmFjay4KICAgICAoKykgV2FrZVVwVGltZXJFdmVudENhbGxiYWNrICAgICA6IFJUQyBXYWtlVXBUaW1lciBFdmVudCBjYWxsYmFjay4KICAgICAoKykgVGFtcGVyMUV2ZW50Q2FsbGJhY2sgICAgICAgICA6IFJUQyBUYW1wZXIgMSBFdmVudCBjYWxsYmFjay4KICAgICAoKykgVGFtcGVyMkV2ZW50Q2FsbGJhY2sgICAgICAgICA6IFJUQyBUYW1wZXIgMiBFdmVudCBjYWxsYmFjay4KICAgICAoKykgVGFtcGVyM0V2ZW50Q2FsbGJhY2sgICAgICAgICA6IFJUQyBUYW1wZXIgMyBFdmVudCBjYWxsYmFjay4KICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgICAgICAgICA6IFJUQyBNc3BJbml0IGNhbGxiYWNrLgogICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgICAgICAgIDogUlRDIE1zcERlSW5pdCBjYWxsYmFjay4KLQorICBbLi5dCiAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBIQUxfUlRDX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX1JUQ19TVEFURV9SRVNFVCwKLSAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zIDoKKyAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zOgogICBleGFtcGxlcyBBbGFybUFFdmVudENhbGxiYWNrKCksIFdha2VVcFRpbWVyRXZlbnRDYWxsYmFjaygpLgotICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCBhbmQgTXNwRGVJbml0IGNhbGxiYWNrcyB0aGF0IGFyZSByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgZnVuY3Rpb24KLSAgaW4gdGhlIEhBTF9SVENfSW5pdCgpL0hBTF9SVENfRGVJbml0KCkgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbAotICAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCi0gIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCBIQUxfUlRDX0luaXQoKS9IQUxfUlRDX0RlSW5pdCgpCi0gIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkKLQorICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCgpIGFuZCBNc3BEZUluaXQoKSBjYWxsYmFja3MgdGhhdCBhcmUgcmVzZXQgdG8gdGhlCisgIGxlZ2FjeSB3ZWFrIGZ1bmN0aW9uIGluIHRoZSBIQUxfUlRDX0luaXQoKS9IQUxfUlRDX0RlSW5pdCgpIG9ubHkKKyAgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgorICBJZiBub3QsIE1zcEluaXQoKSBvciBNc3BEZUluaXQoKSBhcmUgbm90IG51bGwsIEhBTF9SVENfSW5pdCgpL0hBTF9SVENfRGVJbml0KCkKKyAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQoKS9Nc3BEZUluaXQoKSBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCisgIFsuLl0KICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBIQUxfUlRDX1NUQVRFX1JFQURZIHN0YXRlIG9ubHkuCi0gIEV4Y2VwdGlvbiBkb25lIE1zcEluaXQvTXNwRGVJbml0IHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkCi0gIGluIEhBTF9SVENfU1RBVEVfUkVBRFkgb3IgSEFMX1JUQ19TVEFURV9SRVNFVCBzdGF0ZSwKLSAgdGh1cyByZWdpc3RlcmVkICh1c2VyKSBNc3BJbml0L0RlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KLSAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcworICBFeGNlcHRpb24gZG9uZSBNc3BJbml0KCkvTXNwRGVJbml0KCkgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQKKyAgaW4gSEFMX1JUQ19TVEFURV9SRUFEWSBvciBIQUxfUlRDX1NUQVRFX1JFU0VUIHN0YXRlLgorICBUaHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQoKS9Nc3BEZUluaXQoKSBjYWxsYmFja3MgY2FuIGJlIHVzZWQgZHVyaW5nIHRoZQorICBJbml0L0RlSW5pdC4KKyAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0KCkvTXNwRGVJbml0KCkgdXNlciBjYWxsYmFja3MKICAgdXNpbmcgSEFMX1JUQ19SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgSEFMX1JUQ19EZUluaXQoKQotICBvciBIQUxfUlRDX0luaXQoKSBmdW5jdGlvbi4KLQorICBvciBIQUxfUlRDX0luaXQoKSBmdW5jdGlvbnMuCisgIFsuLl0KICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgotICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgYW5kIGFsbCBjYWxsYmFja3MKLSAgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIGZ1bmN0aW9ucy4KKyAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIGFuZCBhbGwKKyAgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnMuCiAKICAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjE5LDggKzE4Nyw4IEBACiAgICogQHsKICAgKi8KIAotLyoqIEBhZGR0b2dyb3VwIFJUQwotICAqIEBicmllZiBSVEMgSEFMIG1vZHVsZSBkcml2ZXIKKy8qKiBAZGVmZ3JvdXAgUlRDIFJUQworICAqIEBicmllZiAgICBSVEMgSEFMIG1vZHVsZSBkcml2ZXIKICAgKiBAewogICAqLwogCkBAIC0yMzEsMTUgKzE5OSwxNSBAQAogLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiogQGFkZHRvZ3JvdXAgUlRDX0V4cG9ydGVkX0Z1bmN0aW9ucworLyoqIEBkZWZncm91cCBSVENfRXhwb3J0ZWRfRnVuY3Rpb25zIFJUQyBFeHBvcnRlZCBGdW5jdGlvbnMKICAgKiBAewogICAqLwogCi0vKiogQGFkZHRvZ3JvdXAgUlRDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEKLSAqICBAYnJpZWYgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zCi0gKgorLyoqIEBkZWZncm91cCBSVENfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCisgICogQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICMjIyMjIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgIyMjIyMKQEAgLTI2NCw3ICsyMzIsNyBAQAogICAgICAgICAgICAgIHRoZSBzb2Z0d2FyZSBtdXN0IGZpcnN0IGNsZWFyIHRoZSBSU0YgZmxhZy4gVGhlIHNvZnR3YXJlIG11c3QgdGhlbgogICAgICAgICAgICAgIHdhaXQgdW50aWwgaXQgaXMgc2V0IGFnYWluIGJlZm9yZSByZWFkaW5nIHRoZSBjYWxlbmRhciwgd2hpY2ggbWVhbnMKICAgICAgICAgICAgICB0aGF0IHRoZSBjYWxlbmRhciByZWdpc3RlcnMgaGF2ZSBiZWVuIGNvcnJlY3RseSBjb3BpZWQgaW50byB0aGUKLSAgICAgICAgICAgICBSVENfVFIgYW5kIFJUQ19EUiBzaGFkb3cgcmVnaXN0ZXJzLlRoZSBIQUxfUlRDX1dhaXRGb3JTeW5jaHJvKCkgZnVuY3Rpb24KKyAgICAgICAgICAgICBSVENfVFIgYW5kIFJUQ19EUiBzaGFkb3cgcmVnaXN0ZXJzLiBUaGUgSEFMX1JUQ19XYWl0Rm9yU3luY2hybygpIGZ1bmN0aW9uCiAgICAgICAgICAgICAgaW1wbGVtZW50cyB0aGUgYWJvdmUgc29mdHdhcmUgc2VxdWVuY2UgKFJTRiBjbGVhciBhbmQgUlNGIGNoZWNrKS4KIAogQGVuZHZlcmJhdGltCkBAIC0yNzIsMTQgKzI0MCwxNiBAQAogICAqLwogCiAvKioKLSAgKiBAYnJpZWYgIEluaXRpYWxpemUgdGhlIFJUQyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzCi0gICogICAgICAgICBpbiB0aGUgUlRDX0luaXRUeXBlRGVmIHN0cnVjdHVyZSBhbmQgaW5pdGlhbGl6ZSB0aGUgYXNzb2NpYXRlZCBoYW5kbGUuCi0gICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBSVEMgcGVyaXBoZXJhbAorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ19Jbml0KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQogewotICAvKiBDaGVjayB0aGUgUlRDIHBlcmlwaGVyYWwgc3RhdGUgKi8KKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX0VSUk9SOworCisgIC8qIENoZWNrIFJUQyBoYW5kbGVyIHZhbGlkaXR5ICovCiAgIGlmIChocnRjID09IE5VTEwpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMjk1LDcgKzI2NSw3IEBACiAgIGFzc2VydF9wYXJhbShJU19SVENfT1VUUFVUX1RZUEUoaHJ0Yy0+SW5pdC5PdXRQdXRUeXBlKSk7CiAKICNpZiAoVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gIGlmKGhydGMtPlN0YXRlID09IEhBTF9SVENfU1RBVEVfUkVTRVQpCisgIGlmIChocnRjLT5TdGF0ZSA9PSBIQUxfUlRDX1NUQVRFX1JFU0VUKQogICB7CiAgICAgLyogQWxsb2NhdGUgbG9jayByZXNvdXJjZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLwogICAgIGhydGMtPkxvY2sgPSBIQUxfVU5MT0NLRUQ7CkBAIC0zMTAsMTkgKzI4MCwxOSBAQAogICAgIGhydGMtPlRhbXBlcjNFdmVudENhbGxiYWNrICAgICAgICAgPSAgSEFMX1JUQ0V4X1RhbXBlcjNFdmVudENhbGxiYWNrOyAgICAgLyogTGVnYWN5IHdlYWsgVGFtcGVyM0V2ZW50Q2FsbGJhY2sgICAgICovCiAjZW5kaWYgLyogUlRDX1RBTVBFUjNfU1VQUE9SVCAqLwogCi0gICAgaWYoaHJ0Yy0+TXNwSW5pdENhbGxiYWNrID09IE5VTEwpCisgICAgaWYgKGhydGMtPk1zcEluaXRDYWxsYmFjayA9PSBOVUxMKQogICAgIHsKICAgICAgIGhydGMtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9SVENfTXNwSW5pdDsKICAgICB9CiAgICAgLyogSW5pdCB0aGUgbG93IGxldmVsIGhhcmR3YXJlICovCiAgICAgaHJ0Yy0+TXNwSW5pdENhbGxiYWNrKGhydGMpOwogCi0gICAgaWYoaHJ0Yy0+TXNwRGVJbml0Q2FsbGJhY2sgPT0gTlVMTCkKKyAgICBpZiAoaHJ0Yy0+TXNwRGVJbml0Q2FsbGJhY2sgPT0gTlVMTCkKICAgICB7CiAgICAgICBocnRjLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9SVENfTXNwRGVJbml0OwogICAgIH0KICAgfQotI2Vsc2UKKyNlbHNlIC8qIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogICBpZiAoaHJ0Yy0+U3RhdGUgPT0gSEFMX1JUQ19TVEFURV9SRVNFVCkKICAgewogICAgIC8qIEFsbG9jYXRlIGxvY2sgcmVzb3VyY2UgYW5kIGluaXRpYWxpemUgaXQgKi8KQEAgLTMzMSw3NSArMzAxLDY4IEBACiAgICAgLyogSW5pdGlhbGl6ZSBSVEMgTVNQICovCiAgICAgSEFMX1JUQ19Nc3BJbml0KGhydGMpOwogICB9Ci0jZW5kaWYgLyogKFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUykgKi8KKyNlbmRpZiAvKiBVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogICAvKiBTZXQgUlRDIHN0YXRlICovCiAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9CVVNZOwogCi0gIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwotCi0gIC8qIFNldCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gIGlmIChSVENfRW50ZXJJbml0TW9kZShocnRjKSAhPSBIQUxfT0spCisgIC8qIENoZWNrIHdoZXRoZXIgdGhlIGNhbGVuZGFyIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkICovCisgIGlmIChfX0hBTF9SVENfSVNfQ0FMRU5EQVJfSU5JVElBTElaRUQoaHJ0YykgPT0gMFUpCiAgIHsKKyAgICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCisgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOworCisgICAgLyogRW50ZXIgSW5pdGlhbGl6YXRpb24gbW9kZSAqLworICAgIHN0YXR1cyA9IFJUQ19FbnRlckluaXRNb2RlKGhydGMpOworCisgICAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgICAgeworICAgICAgLyogQ2xlYXIgUlRDX0NSIEZNVCwgT1NFTCBhbmQgUE9MIEJpdHMgKi8KKyAgICAgIGhydGMtPkluc3RhbmNlLT5DUiAmPSAoKHVpbnQzMl90KX4oUlRDX0NSX0ZNVCB8IFJUQ19DUl9PU0VMIHwgUlRDX0NSX1BPTCkpOworICAgICAgLyogU2V0IFJUQ19DUiByZWdpc3RlciAqLworICAgICAgaHJ0Yy0+SW5zdGFuY2UtPkNSIHw9ICh1aW50MzJfdCkoaHJ0Yy0+SW5pdC5Ib3VyRm9ybWF0IHwgaHJ0Yy0+SW5pdC5PdXRQdXQgfCBocnRjLT5Jbml0Lk91dFB1dFBvbGFyaXR5KTsKKworICAgICAgLyogQ29uZmlndXJlIHRoZSBSVEMgUFJFUiAqLworICAgICAgaHJ0Yy0+SW5zdGFuY2UtPlBSRVIgPSAodWludDMyX3QpKGhydGMtPkluaXQuU3luY2hQcmVkaXYpOworICAgICAgaHJ0Yy0+SW5zdGFuY2UtPlBSRVIgfD0gKHVpbnQzMl90KShocnRjLT5Jbml0LkFzeW5jaFByZWRpdiA8PCBSVENfUFJFUl9QUkVESVZfQV9Qb3MpOworCisgICAgICAvKiBFeGl0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KKyAgICAgIHN0YXR1cyA9IFJUQ19FeGl0SW5pdE1vZGUoaHJ0Yyk7CisgICAgfQorCisgICAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgICAgeworICAgICAgaHJ0Yy0+SW5zdGFuY2UtPlRBRkNSICY9ICh1aW50MzJfdCl+UlRDX09VVFBVVF9UWVBFX1BVU0hQVUxMOworICAgICAgaHJ0Yy0+SW5zdGFuY2UtPlRBRkNSIHw9ICh1aW50MzJfdCkoaHJ0Yy0+SW5pdC5PdXRQdXRUeXBlKTsKKyAgICB9CisKICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgIC8qIFNldCBSVEMgc3RhdGUgKi8KLSAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0KLSAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAgIGVsc2UKICAgewotICAgIC8qIENsZWFyIFJUQ19DUiBGTVQsIE9TRUwgYW5kIFBPTCBCaXRzICovCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPkNSICY9ICgodWludDMyX3QpfihSVENfQ1JfRk1UIHwgUlRDX0NSX09TRUwgfCBSVENfQ1JfUE9MKSk7Ci0gICAgLyogU2V0IFJUQ19DUiByZWdpc3RlciAqLwotICAgIGhydGMtPkluc3RhbmNlLT5DUiB8PSAodWludDMyX3QpKGhydGMtPkluaXQuSG91ckZvcm1hdCB8IGhydGMtPkluaXQuT3V0UHV0IHwgaHJ0Yy0+SW5pdC5PdXRQdXRQb2xhcml0eSk7Ci0KLSAgICAvKiBDb25maWd1cmUgdGhlIFJUQyBQUkVSICovCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPlBSRVIgPSAodWludDMyX3QpKGhydGMtPkluaXQuU3luY2hQcmVkaXYpOwotICAgIGhydGMtPkluc3RhbmNlLT5QUkVSIHw9ICh1aW50MzJfdCkoaHJ0Yy0+SW5pdC5Bc3luY2hQcmVkaXYgPDwgMTZVKTsKLQotICAgIC8qIEV4aXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLwotICAgIGhydGMtPkluc3RhbmNlLT5JU1IgJj0gKHVpbnQzMl90KX5SVENfSVNSX0lOSVQ7Ci0KLSAgICAvKiBJZiAgQ1JfQllQU0hBRCBiaXQgPSAwLCB3YWl0IGZvciBzeW5jaHJvIGVsc2UgdGhpcyBjaGVjayBpcyBub3QgbmVlZGVkICovCi0gICAgaWYgKChocnRjLT5JbnN0YW5jZS0+Q1IgJiBSVENfQ1JfQllQU0hBRCkgPT0gUkVTRVQpCi0gICAgewotICAgICAgaWYgKEhBTF9SVENfV2FpdEZvclN5bmNocm8oaHJ0YykgIT0gSEFMX09LKQotICAgICAgewotICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgICAgIHJldHVybiBIQUxfRVJST1I7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPlRBRkNSICY9ICh1aW50MzJfdCl+UlRDX1RBRkNSX0FMQVJNT1VUVFlQRTsKLSAgICBocnRjLT5JbnN0YW5jZS0+VEFGQ1IgfD0gKHVpbnQzMl90KShocnRjLT5Jbml0Lk91dFB1dFR5cGUpOwotCi0gICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAvKiBTZXQgUlRDIHN0YXRlICovCi0gICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwotCi0gICAgcmV0dXJuIEhBTF9PSzsKKyAgICAvKiBUaGUgY2FsZW5kYXIgaXMgYWxyZWFkeSBpbml0aWFsaXplZCAqLworICAgIHN0YXR1cyA9IEhBTF9PSzsKICAgfQorCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQorICB7CisgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOworICB9CisKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCi0gICogQGJyaWVmICBEZUluaXRpYWxpemUgdGhlIFJUQyBwZXJpcGhlcmFsLgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCi0gICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcmVzZXQgdGhlIFJUQyBCYWNrdXAgRGF0YSByZWdpc3RlcnMuCisgICogQGJyaWVmICBEZUluaXRpYWxpemVzIHRoZSBSVEMgcGVyaXBoZXJhbAorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgorICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgUlRDIEJhY2t1cCBEYXRhIHJlZ2lzdGVycy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfRGVJbml0KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQogewotICB1aW50MzJfdCB0aWNrc3RhcnQgPSAwVTsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX0VSUk9SOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19SVENfQUxMX0lOU1RBTkNFKGhydGMtPkluc3RhbmNlKSk7CkBAIC00MTAsMTE1ICszNzMsNzYgQEAKICAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoaHJ0Yyk7CiAKLSAgLyogU2V0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSAgaWYgKFJUQ19FbnRlckluaXRNb2RlKGhydGMpICE9IEhBTF9PSykKLSAgewotICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwotICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOworICAvKiBFbnRlciBJbml0aWFsaXphdGlvbiBtb2RlICovCisgIHN0YXR1cyA9IFJUQ19FbnRlckluaXRNb2RlKGhydGMpOwogCi0gICAgLyogU2V0IFJUQyBzdGF0ZSAqLwotICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9FUlJPUjsKLQotICAgIHJldHVybiBIQUxfRVJST1I7Ci0gIH0KLSAgZWxzZQorICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIC8qIFJlc2V0IFRSLCBEUiBhbmQgQ1IgcmVnaXN0ZXJzICovCisgICAgLyogUmVzZXQgUlRDIHJlZ2lzdGVycyAqLwogICAgIGhydGMtPkluc3RhbmNlLT5UUiA9IDB4MDAwMDAwMDBVOwogICAgIGhydGMtPkluc3RhbmNlLT5EUiA9IChSVENfRFJfV0RVXzAgfCBSVENfRFJfTVVfMCB8IFJUQ19EUl9EVV8wKTsKLSAgICAvKiBSZXNldCBBbGwgQ1IgYml0cyBleGNlcHQgQ1JbMjowXSAqLwotICAgIGhydGMtPkluc3RhbmNlLT5DUiAmPSBSVENfQ1JfV1VDS1NFTDsKLQotICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7Ci0KLSAgICAvKiBXYWl0IHRpbGwgV1VUV0YgZmxhZyBpcyBzZXQgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLwotICAgIHdoaWxlICgoKGhydGMtPkluc3RhbmNlLT5JU1IpICYgUlRDX0lTUl9XVVRXRikgPT0gKHVpbnQzMl90KVJFU0VUKQotICAgIHsKLSAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBSVENfVElNRU9VVF9WQUxVRSkKLSAgICAgIHsKLSAgICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwotCi0gICAgICAgIC8qIFNldCBSVEMgc3RhdGUgKi8KLSAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1RJTUVPVVQ7Ci0KLSAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwotICAgICAgfQotICAgIH0KLQotICAgIC8qIFJlc2V0IGFsbCBSVEMgQ1IgcmVnaXN0ZXIgYml0cyAqLwotICAgIGhydGMtPkluc3RhbmNlLT5DUiAmPSAweDAwMDAwMDAwVTsKKyAgICBocnRjLT5JbnN0YW5jZS0+Q1IgICY9IDB4MDAwMDAwMDBVOwogICAgIGhydGMtPkluc3RhbmNlLT5XVVRSID0gUlRDX1dVVFJfV1VUOwotICAgIGhydGMtPkluc3RhbmNlLT5QUkVSID0gKCh1aW50MzJfdCkoUlRDX1BSRVJfUFJFRElWX0EgfCAweDAwMDAwMEZGVSkpOwotICAgIGhydGMtPkluc3RhbmNlLT5BTFJNQVIgPSAweDAwMDAwMDAwVTsKLSAgICBocnRjLT5JbnN0YW5jZS0+QUxSTUJSID0gMHgwMDAwMDAwMFU7Ci0gICAgaHJ0Yy0+SW5zdGFuY2UtPlNISUZUUiA9IDB4MDAwMDAwMDBVOwotICAgIGhydGMtPkluc3RhbmNlLT5DQUxSID0gMHgwMDAwMDAwMFU7CisgICAgaHJ0Yy0+SW5zdGFuY2UtPlBSRVIgPSAodWludDMyX3QpKFJUQ19QUkVSX1BSRURJVl9BIHwgMHgwMDAwMDBGRlUpOworICAgIGhydGMtPkluc3RhbmNlLT5BTFJNQVIgICA9IDB4MDAwMDAwMDBVOworICAgIGhydGMtPkluc3RhbmNlLT5BTFJNQlIgICA9IDB4MDAwMDAwMDBVOworICAgIGhydGMtPkluc3RhbmNlLT5DQUxSICAgICA9IDB4MDAwMDAwMDBVOworICAgIGhydGMtPkluc3RhbmNlLT5TSElGVFIgICA9IDB4MDAwMDAwMDBVOwogICAgIGhydGMtPkluc3RhbmNlLT5BTFJNQVNTUiA9IDB4MDAwMDAwMDBVOwogICAgIGhydGMtPkluc3RhbmNlLT5BTFJNQlNTUiA9IDB4MDAwMDAwMDBVOwogCi0gICAgLyogUmVzZXQgSVNSIHJlZ2lzdGVyIGFuZCBleGl0IGluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSAgICBocnRjLT5JbnN0YW5jZS0+SVNSID0gMHgwMDAwMDAwMFU7Ci0KLSAgICAvKiBSZXNldCBUYW1wZXIgYW5kIGFsdGVybmF0ZSBmdW5jdGlvbnMgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLwotICAgIGhydGMtPkluc3RhbmNlLT5UQUZDUiA9IDB4MDAwMDAwMDBVOwotCi0gICAgLyogSWYgIFJUQ19DUl9CWVBTSEFEIGJpdCA9IDBVLCB3YWl0IGZvciBzeW5jaHJvIGVsc2UgdGhpcyBjaGVjayBpcyBub3QgbmVlZGVkICovCi0gICAgaWYgKChocnRjLT5JbnN0YW5jZS0+Q1IgJiBSVENfQ1JfQllQU0hBRCkgPT0gUkVTRVQpCi0gICAgewotICAgICAgaWYgKEhBTF9SVENfV2FpdEZvclN5bmNocm8oaHJ0YykgIT0gSEFMX09LKQotICAgICAgewotICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgICAgIHJldHVybiBIQUxfRVJST1I7Ci0gICAgICB9Ci0gICAgfQorICAgIC8qIEV4aXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLworICAgIHN0YXR1cyA9IFJUQ19FeGl0SW5pdE1vZGUoaHJ0Yyk7CiAgIH0KIAogICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CiAKLSNpZiAoVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gIGlmKGhydGMtPk1zcERlSW5pdENhbGxiYWNrID09IE5VTEwpCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7Ci0gICAgaHJ0Yy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfUlRDX01zcERlSW5pdDsKKyAgICAvKiBSZXNldCBUYW1wZXIgYW5kIGFsdGVybmF0ZSBmdW5jdGlvbnMgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworICAgIGhydGMtPkluc3RhbmNlLT5UQUZDUiA9IDB4MDAwMDAwMDBVOworCisjaWYgKFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorICAgIGlmIChocnRjLT5Nc3BEZUluaXRDYWxsYmFjayA9PSBOVUxMKQorICAgIHsKKyAgICAgIGhydGMtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX1JUQ19Nc3BEZUluaXQ7CisgICAgfQorCisgICAgLyogRGVJbml0IHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmU6IENMT0NLLCBOVklDLiovCisgICAgaHJ0Yy0+TXNwRGVJbml0Q2FsbGJhY2soaHJ0Yyk7CisjZWxzZSAvKiBVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgICAvKiBEZS1Jbml0aWFsaXplIFJUQyBNU1AgKi8KKyAgICBIQUxfUlRDX01zcERlSW5pdChocnRjKTsKKyNlbmRpZiAvKiBVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKworICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRVNFVDsKICAgfQogCi0gIC8qIERlSW5pdCB0aGUgbG93IGxldmVsIGhhcmR3YXJlOiBDTE9DSywgTlZJQy4qLwotICBocnRjLT5Nc3BEZUluaXRDYWxsYmFjayhocnRjKTsKLQotI2Vsc2UKLSAgLyogRGUtSW5pdGlhbGl6ZSBSVEMgTVNQICovCi0gIEhBTF9SVENfTXNwRGVJbml0KGhydGMpOwotI2VuZGlmIC8qIChVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MpICovCi0KLSAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFU0VUOwotCiAgIC8qIFJlbGVhc2UgTG9jayAqLwogICBfX0hBTF9VTkxPQ0soaHJ0Yyk7CiAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogI2lmIChVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKIC8qKgotICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIFJUQyBDYWxsYmFjaworICAqIEBicmllZiAgUmVnaXN0ZXJzIGEgVXNlciBSVEMgQ2FsbGJhY2sKICAgKiAgICAgICAgIFRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCi0gICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9SVENfQUxBUk1fQV9FVkVOVF9DQl9JRCAgICAgICAgICBBbGFybSBBIEV2ZW50IENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9SVENfQUxBUk1fQl9FVkVOVF9DQl9JRCAgICAgICAgICBBbGFybSBCIEV2ZW50IENhbGxiYWNrIElECi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9SVENfVElNRVNUQU1QX0VWRU5UX0NCX0lEICAgICAgICBUaW1lU3RhbXAgRXZlbnQgQ2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1JUQ19XQUtFVVBUSU1FUl9FVkVOVF9DQl9JRCAgICAgIFdha2UtVXAgVGltZXIgRXZlbnQgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1JUQ19USU1FU1RBTVBfRVZFTlRfQ0JfSUQgICAgICAgIFRpbWVzdGFtcCBFdmVudCBDYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUlRDX1dBS0VVUFRJTUVSX0VWRU5UX0NCX0lEICAgICAgV2FrZXVwIFRpbWVyIEV2ZW50IENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9SVENfVEFNUEVSMV9FVkVOVF9DQl9JRCAgICAgICAgICBUYW1wZXIgMSBDYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUlRDX1RBTVBFUjJfRVZFTlRfQ0JfSUQgICAgICAgICAgVGFtcGVyIDIgQ2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1JUQ19UQU1QRVIzX0VWRU5UX0NCX0lEICAgICAgICAgIFRhbXBlciAzIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9SVENfTVNQSU5JVF9DQl9JRCAgICAgICAgICAgICAgICBNc3AgSW5pdCBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUlRDX01TUERFSU5JVF9DQl9JRCAgICAgICAgICAgICAgTXNwIERlSW5pdCBjYWxsYmFjayBJRAorICAqIEBub3RlICAgSEFMX1JUQ19UQU1QRVIzX0VWRU5UX0NCX0lEIGlzIG5vdCBhcHBsaWNhYmxlIHRvIGFsbCBkZXZpY2VzLgogICAqIEBwYXJhbSAgcENhbGxiYWNrIHBvaW50ZXIgdG8gdGhlIENhbGxiYWNrIGZ1bmN0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCkBAIC01MjYsNyArNDUwLDcgQEAKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCi0gIGlmKHBDYWxsYmFjayA9PSBOVUxMKQorICBpZiAocENhbGxiYWNrID09IE5VTEwpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC01MzQsNzAgKzQ1OCw3MCBAQAogICAvKiBQcm9jZXNzIGxvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhydGMpOwogCi0gIGlmKEhBTF9SVENfU1RBVEVfUkVBRFkgPT0gaHJ0Yy0+U3RhdGUpCisgIGlmIChIQUxfUlRDX1NUQVRFX1JFQURZID09IGhydGMtPlN0YXRlKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKLSAgICBjYXNlIEhBTF9SVENfQUxBUk1fQV9FVkVOVF9DQl9JRCA6Ci0gICAgICBocnRjLT5BbGFybUFFdmVudENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9SVENfQUxBUk1fQV9FVkVOVF9DQl9JRCA6CisgICAgICAgIGhydGMtPkFsYXJtQUV2ZW50Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBIQUxfUlRDX0FMQVJNX0JfRVZFTlRfQ0JfSUQgOgotICAgICAgaHJ0Yy0+QWxhcm1CRXZlbnRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfUlRDX0FMQVJNX0JfRVZFTlRfQ0JfSUQgOgorICAgICAgICBocnRjLT5BbGFybUJFdmVudENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX1JUQ19USU1FU1RBTVBfRVZFTlRfQ0JfSUQgOgotICAgICAgaHJ0Yy0+VGltZVN0YW1wRXZlbnRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfUlRDX1RJTUVTVEFNUF9FVkVOVF9DQl9JRCA6CisgICAgICAgIGhydGMtPlRpbWVTdGFtcEV2ZW50Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBIQUxfUlRDX1dBS0VVUFRJTUVSX0VWRU5UX0NCX0lEIDoKLSAgICAgIGhydGMtPldha2VVcFRpbWVyRXZlbnRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfUlRDX1dBS0VVUFRJTUVSX0VWRU5UX0NCX0lEIDoKKyAgICAgICAgaHJ0Yy0+V2FrZVVwVGltZXJFdmVudENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX1JUQ19UQU1QRVIxX0VWRU5UX0NCX0lEIDoKLSAgICAgIGhydGMtPlRhbXBlcjFFdmVudENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9SVENfVEFNUEVSMV9FVkVOVF9DQl9JRCA6CisgICAgICAgIGhydGMtPlRhbXBlcjFFdmVudENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX1JUQ19UQU1QRVIyX0VWRU5UX0NCX0lEIDoKLSAgICAgIGhydGMtPlRhbXBlcjJFdmVudENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9SVENfVEFNUEVSMl9FVkVOVF9DQl9JRCA6CisgICAgICAgIGhydGMtPlRhbXBlcjJFdmVudENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKIAogI2lmIGRlZmluZWQoUlRDX1RBTVBFUjNfU1VQUE9SVCkKLSAgICBjYXNlIEhBTF9SVENfVEFNUEVSM19FVkVOVF9DQl9JRCA6Ci0gICAgICBocnRjLT5UYW1wZXIzRXZlbnRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotCisgICAgICBjYXNlIEhBTF9SVENfVEFNUEVSM19FVkVOVF9DQl9JRCA6CisgICAgICAgIGhydGMtPlRhbXBlcjNFdmVudENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKICNlbmRpZiAvKiBSVENfVEFNUEVSM19TVVBQT1JUICovCi0gICBjYXNlIEhBTF9SVENfTVNQSU5JVF9DQl9JRCA6Ci0gICAgICBocnRjLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKIAotICAgY2FzZSBIQUxfUlRDX01TUERFSU5JVF9DQl9JRCA6Ci0gICAgICBocnRjLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfUlRDX01TUElOSVRfQ0JfSUQgOgorICAgICAgICBocnRjLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOwogCi0gICAgZGVmYXVsdCA6Ci0gICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1JUQ19NU1BERUlOSVRfQ0JfSUQgOgorICAgICAgICBocnRjLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCisgICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQotICBlbHNlIGlmKEhBTF9SVENfU1RBVEVfUkVTRVQgPT0gaHJ0Yy0+U3RhdGUpCisgIGVsc2UgaWYgKEhBTF9SVENfU1RBVEVfUkVTRVQgPT0gaHJ0Yy0+U3RhdGUpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCiAgICAgewotICAgIGNhc2UgSEFMX1JUQ19NU1BJTklUX0NCX0lEIDoKLSAgICAgIGhydGMtPk1zcEluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfUlRDX01TUElOSVRfQ0JfSUQgOgorICAgICAgICBocnRjLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOwogCi0gICBjYXNlIEhBTF9SVENfTVNQREVJTklUX0NCX0lEIDoKLSAgICAgIGhydGMtPk1zcERlSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9SVENfTVNQREVJTklUX0NCX0lEIDoKKyAgICAgICAgaHJ0Yy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOwogCi0gICAgZGVmYXVsdCA6Ci0gICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCisgICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQogICBlbHNlCkBAIC02MTMsMjAgKzUzNywyMiBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFVucmVnaXN0ZXIgYW4gUlRDIENhbGxiYWNrCi0gICogICAgICAgICBSVEMgY2FsbGFiY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCi0gICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAYnJpZWYgIFVucmVnaXN0ZXJzIGFuIFJUQyBDYWxsYmFjaworICAqICAgICAgICAgUlRDIGNhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUlRDX0FMQVJNX0FfRVZFTlRfQ0JfSUQgICAgICAgICAgQWxhcm0gQSBFdmVudCBDYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUlRDX0FMQVJNX0JfRVZFTlRfQ0JfSUQgICAgICAgICAgQWxhcm0gQiBFdmVudCBDYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUlRDX1RJTUVTVEFNUF9FVkVOVF9DQl9JRCAgICAgICAgVGltZVN0YW1wIEV2ZW50IENhbGxiYWNrIElECi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9SVENfV0FLRVVQVElNRVJfRVZFTlRfQ0JfSUQgICAgICBXYWtlLVVwIFRpbWVyIEV2ZW50IENhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9SVENfVElNRVNUQU1QX0VWRU5UX0NCX0lEICAgICAgICBUaW1lc3RhbXAgRXZlbnQgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1JUQ19XQUtFVVBUSU1FUl9FVkVOVF9DQl9JRCAgICAgIFdha2V1cCBUaW1lciBFdmVudCBDYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUlRDX1RBTVBFUjFfRVZFTlRfQ0JfSUQgICAgICAgICAgVGFtcGVyIDEgQ2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1JUQ19UQU1QRVIyX0VWRU5UX0NCX0lEICAgICAgICAgIFRhbXBlciAyIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9SVENfVEFNUEVSM19FVkVOVF9DQl9JRCAgICAgICAgICBUYW1wZXIgMyBDYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUlRDX01TUElOSVRfQ0JfSUQgTXNwIEluaXQgY2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1JUQ19NU1BERUlOSVRfQ0JfSUQgTXNwIERlSW5pdCBjYWxsYmFjayBJRAorICAqIEBub3RlICAgSEFMX1JUQ19UQU1QRVIzX0VWRU5UX0NCX0lEIGlzIG5vdCBhcHBsaWNhYmxlIHRvIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ19VblJlZ2lzdGVyQ2FsbGJhY2soUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIEhBTF9SVENfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCkKQEAgLTYzNiw3MCArNTYyLDcwIEBACiAgIC8qIFByb2Nlc3MgbG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaHJ0Yyk7CiAKLSAgaWYoSEFMX1JUQ19TVEFURV9SRUFEWSA9PSBocnRjLT5TdGF0ZSkKKyAgaWYgKEhBTF9SVENfU1RBVEVfUkVBRFkgPT0gaHJ0Yy0+U3RhdGUpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCiAgICAgewotICAgIGNhc2UgSEFMX1JUQ19BTEFSTV9BX0VWRU5UX0NCX0lEIDoKLSAgICAgIGhydGMtPkFsYXJtQUV2ZW50Q2FsbGJhY2sgPSBIQUxfUlRDX0FsYXJtQUV2ZW50Q2FsbGJhY2s7ICAgICAgICAgLyogTGVnYWN5IHdlYWsgQWxhcm1BRXZlbnRDYWxsYmFjayAgICAqLwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9SVENfQUxBUk1fQV9FVkVOVF9DQl9JRCA6CisgICAgICAgIGhydGMtPkFsYXJtQUV2ZW50Q2FsbGJhY2sgPSBIQUxfUlRDX0FsYXJtQUV2ZW50Q2FsbGJhY2s7ICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIEFsYXJtQUV2ZW50Q2FsbGJhY2sgICAgKi8KKyAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEhBTF9SVENfQUxBUk1fQl9FVkVOVF9DQl9JRCA6Ci0gICAgICBocnRjLT5BbGFybUJFdmVudENhbGxiYWNrID0gSEFMX1JUQ0V4X0FsYXJtQkV2ZW50Q2FsbGJhY2s7ICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIEFsYXJtQkV2ZW50Q2FsbGJhY2sgKi8KLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfUlRDX0FMQVJNX0JfRVZFTlRfQ0JfSUQgOgorICAgICAgICBocnRjLT5BbGFybUJFdmVudENhbGxiYWNrID0gSEFMX1JUQ0V4X0FsYXJtQkV2ZW50Q2FsbGJhY2s7ICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBBbGFybUJFdmVudENhbGxiYWNrICovCisgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBIQUxfUlRDX1RJTUVTVEFNUF9FVkVOVF9DQl9JRCA6Ci0gICAgICBocnRjLT5UaW1lU3RhbXBFdmVudENhbGxiYWNrID0gSEFMX1JUQ0V4X1RpbWVTdGFtcEV2ZW50Q2FsbGJhY2s7ICAgIC8qIExlZ2FjeSB3ZWFrIFRpbWVTdGFtcEV2ZW50Q2FsbGJhY2sgICAgKi8KLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfUlRDX1RJTUVTVEFNUF9FVkVOVF9DQl9JRCA6CisgICAgICAgIGhydGMtPlRpbWVTdGFtcEV2ZW50Q2FsbGJhY2sgPSBIQUxfUlRDRXhfVGltZVN0YW1wRXZlbnRDYWxsYmFjazsgICAgIC8qIExlZ2FjeSB3ZWFrIFRpbWVTdGFtcEV2ZW50Q2FsbGJhY2sgICAgKi8KKyAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEhBTF9SVENfV0FLRVVQVElNRVJfRVZFTlRfQ0JfSUQgOgotICAgICAgaHJ0Yy0+V2FrZVVwVGltZXJFdmVudENhbGxiYWNrID0gSEFMX1JUQ0V4X1dha2VVcFRpbWVyRXZlbnRDYWxsYmFjazsgLyogTGVnYWN5IHdlYWsgV2FrZVVwVGltZXJFdmVudENhbGxiYWNrICovCi0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1JUQ19XQUtFVVBUSU1FUl9FVkVOVF9DQl9JRCA6CisgICAgICAgIGhydGMtPldha2VVcFRpbWVyRXZlbnRDYWxsYmFjayA9IEhBTF9SVENFeF9XYWtlVXBUaW1lckV2ZW50Q2FsbGJhY2s7IC8qIExlZ2FjeSB3ZWFrIFdha2VVcFRpbWVyRXZlbnRDYWxsYmFjayAqLworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX1JUQ19UQU1QRVIxX0VWRU5UX0NCX0lEIDoKLSAgICAgIGhydGMtPlRhbXBlcjFFdmVudENhbGxiYWNrID0gSEFMX1JUQ0V4X1RhbXBlcjFFdmVudENhbGxiYWNrOyAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIFRhbXBlcjFFdmVudENhbGxiYWNrICAgKi8KLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfUlRDX1RBTVBFUjFfRVZFTlRfQ0JfSUQgOgorICAgICAgICBocnRjLT5UYW1wZXIxRXZlbnRDYWxsYmFjayA9IEhBTF9SVENFeF9UYW1wZXIxRXZlbnRDYWxsYmFjazsgICAgICAgICAvKiBMZWdhY3kgd2VhayBUYW1wZXIxRXZlbnRDYWxsYmFjayAgICovCisgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBIQUxfUlRDX1RBTVBFUjJfRVZFTlRfQ0JfSUQgOgotICAgICAgaHJ0Yy0+VGFtcGVyMkV2ZW50Q2FsbGJhY2sgPSBIQUxfUlRDRXhfVGFtcGVyMkV2ZW50Q2FsbGJhY2s7ICAgICAgICAgLyogTGVnYWN5IHdlYWsgVGFtcGVyMkV2ZW50Q2FsbGJhY2sgICAgICAgICAqLwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9SVENfVEFNUEVSMl9FVkVOVF9DQl9JRCA6CisgICAgICAgIGhydGMtPlRhbXBlcjJFdmVudENhbGxiYWNrID0gSEFMX1JUQ0V4X1RhbXBlcjJFdmVudENhbGxiYWNrOyAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIFRhbXBlcjJFdmVudENhbGxiYWNrICAgICAgICAgKi8KKyAgICAgICAgYnJlYWs7CiAKICNpZiBkZWZpbmVkKFJUQ19UQU1QRVIzX1NVUFBPUlQpCi0gICAgY2FzZSBIQUxfUlRDX1RBTVBFUjNfRVZFTlRfQ0JfSUQgOgotICAgICAgaHJ0Yy0+VGFtcGVyM0V2ZW50Q2FsbGJhY2sgPSBIQUxfUlRDRXhfVGFtcGVyM0V2ZW50Q2FsbGJhY2s7ICAgICAgICAgLyogTGVnYWN5IHdlYWsgVGFtcGVyM0V2ZW50Q2FsbGJhY2sgICAgICAgICAqLwotICAgICAgYnJlYWs7Ci0KKyAgICAgIGNhc2UgSEFMX1JUQ19UQU1QRVIzX0VWRU5UX0NCX0lEIDoKKyAgICAgICAgaHJ0Yy0+VGFtcGVyM0V2ZW50Q2FsbGJhY2sgPSBIQUxfUlRDRXhfVGFtcGVyM0V2ZW50Q2FsbGJhY2s7ICAgICAgICAgLyogTGVnYWN5IHdlYWsgVGFtcGVyM0V2ZW50Q2FsbGJhY2sgICAgICAgICAqLworICAgICAgICBicmVhazsKICNlbmRpZiAvKiBSVENfVEFNUEVSM19TVVBQT1JUICovCi0gICAgY2FzZSBIQUxfUlRDX01TUElOSVRfQ0JfSUQgOgotICAgICAgaHJ0Yy0+TXNwSW5pdENhbGxiYWNrID0gSEFMX1JUQ19Nc3BJbml0OwotICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEhBTF9SVENfTVNQREVJTklUX0NCX0lEIDoKLSAgICAgIGhydGMtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX1JUQ19Nc3BEZUluaXQ7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1JUQ19NU1BJTklUX0NCX0lEIDoKKyAgICAgICAgaHJ0Yy0+TXNwSW5pdENhbGxiYWNrID0gSEFMX1JUQ19Nc3BJbml0OworICAgICAgICBicmVhazsKIAotICAgIGRlZmF1bHQgOgotICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCi0gICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9SVENfTVNQREVJTklUX0NCX0lEIDoKKyAgICAgICAgaHJ0Yy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfUlRDX01zcERlSW5pdDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCisgICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQotICBlbHNlIGlmKEhBTF9SVENfU1RBVEVfUkVTRVQgPT0gaHJ0Yy0+U3RhdGUpCisgIGVsc2UgaWYgKEhBTF9SVENfU1RBVEVfUkVTRVQgPT0gaHJ0Yy0+U3RhdGUpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCiAgICAgewotICAgIGNhc2UgSEFMX1JUQ19NU1BJTklUX0NCX0lEIDoKLSAgICAgIGhydGMtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9SVENfTXNwSW5pdDsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfUlRDX01TUElOSVRfQ0JfSUQgOgorICAgICAgICBocnRjLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfUlRDX01zcEluaXQ7CisgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBIQUxfUlRDX01TUERFSU5JVF9DQl9JRCA6Ci0gICAgICBocnRjLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9SVENfTXNwRGVJbml0OwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9SVENfTVNQREVJTklUX0NCX0lEIDoKKyAgICAgICAgaHJ0Yy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfUlRDX01zcERlSW5pdDsKKyAgICAgICAgYnJlYWs7CiAKLSAgICBkZWZhdWx0IDoKLSAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwotICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKLSAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdCA6CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTcxNiw4ICs2NDIsOSBAQAogI2VuZGlmIC8qIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCiAvKioKLSAgKiBAYnJpZWYgIEluaXRpYWxpemUgdGhlIFJUQyBNU1AuCi0gICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBSVEMgTVNQLgorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX193ZWFrIHZvaWQgSEFMX1JUQ19Nc3BJbml0KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQpAQCAtNzI1LDE0ICs2NTIsMTUgQEAKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaHJ0Yyk7CiAKLSAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAotICAgICAgICAgICAgdGhlIEhBTF9SVENfTXNwSW5pdCBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisgIC8qIE5PVEU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICB0aGUgSEFMX1JUQ19Nc3BJbml0IGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKICAgICovCiB9CiAKIC8qKgotICAqIEBicmllZiAgRGVJbml0aWFsaXplIHRoZSBSVEMgTVNQLgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQGJyaWVmICBEZUluaXRpYWxpemVzIHRoZSBSVEMgTVNQLgorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX193ZWFrIHZvaWQgSEFMX1JUQ19Nc3BEZUluaXQoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCkBAIC03NDAsOCArNjY4LDggQEAKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaHJ0Yyk7CiAKLSAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAotICAgICAgICAgICAgdGhlIEhBTF9SVENfTXNwRGVJbml0IGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKKyAgLyogTk9URTogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCisgICAgICAgICAgIHRoZSBIQUxfUlRDX01zcERlSW5pdCBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCiAgICAqLwogfQogCkBAIC03NDksOSArNjc3LDkgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGFkZHRvZ3JvdXAgUlRDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIKLSAqICBAYnJpZWYgICBSVEMgVGltZSBhbmQgRGF0ZSBmdW5jdGlvbnMKLSAqCisvKiogQGRlZmdyb3VwIFJUQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIFJUQyBUaW1lIGFuZCBEYXRlIGZ1bmN0aW9ucworICAqIEBicmllZiAgICBSVEMgVGltZSBhbmQgRGF0ZSBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAjIyMjIyBSVEMgVGltZSBhbmQgRGF0ZSBmdW5jdGlvbnMgIyMjIyMKQEAgLTc2NCwxMSArNjkyLDEyIEBACiAgICovCiAKIC8qKgotICAqIEBicmllZiAgU2V0IFJUQyBjdXJyZW50IHRpbWUuCi0gICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAYnJpZWYgIFNldHMgUlRDIGN1cnJlbnQgdGltZS4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KKyAgKiBAcGFyYW0gIHNUaW1lIFBvaW50ZXIgdG8gVGltZSBzdHJ1Y3R1cmUKICAgKiBAbm90ZSAgIERheUxpZ2h0U2F2aW5nIGFuZCBTdG9yZU9wZXJhdGlvbiBpbnRlcmZhY2VzIGFyZSBkZXByZWNhdGVkLgogICAqICAgICAgICAgVG8gbWFuYWdlIERheWxpZ2h0IFNhdmluZyBUaW1lLCBwbGVhc2UgdXNlIEhBTF9SVENfRFNUX3h4eCBmdW5jdGlvbnMuCi0gICogQHBhcmFtICBzVGltZSBQb2ludGVyIHRvIFRpbWUgc3RydWN0dXJlCiAgICogQHBhcmFtICBGb3JtYXQgU3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIGVudGVyZWQgcGFyYW1ldGVycy4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBSVENfRk9STUFUX0JJTjogQmluYXJ5IGRhdGEgZm9ybWF0CkBAIC03NzgsNiArNzA3LDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfU2V0VGltZShSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgUlRDX1RpbWVUeXBlRGVmICpzVGltZSwgdWludDMyX3QgRm9ybWF0KQogewogICB1aW50MzJfdCB0bXByZWcgPSAwVTsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19SVENfRk9STUFUKEZvcm1hdCkpOwpAQCAtNzkxLDcgKzcyMSw3IEBACiAKICAgaWYgKEZvcm1hdCA9PSBSVENfRk9STUFUX0JJTikKICAgewotICAgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0ZNVCkgIT0gKHVpbnQzMl90KVJFU0VUKQorICAgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0ZNVCkgIT0gMFUpCiAgICAgewogICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSMTIoc1RpbWUtPkhvdXJzKSk7CiAgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0hPVVJGT1JNQVQxMihzVGltZS0+VGltZUZvcm1hdCkpOwpAQCAtODA0LDE0ICs3MzQsMTQgQEAKICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX01JTlVURVMoc1RpbWUtPk1pbnV0ZXMpKTsKICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX1NFQ09ORFMoc1RpbWUtPlNlY29uZHMpKTsKIAotICAgIHRtcHJlZyA9ICh1aW50MzJfdCkoKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzVGltZS0+SG91cnMpIDw8IDE2VSkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNUaW1lLT5NaW51dGVzKSA8PCA4VSkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNUaW1lLT5TZWNvbmRzKSkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdClzVGltZS0+VGltZUZvcm1hdCkgPDwgMTZVKSk7CisgICAgdG1wcmVnID0gKHVpbnQzMl90KSgoICh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzVGltZS0+SG91cnMpICAgPDwgUlRDX1RSX0hVX1BvcykgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgKCAodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc1RpbWUtPk1pbnV0ZXMpIDw8IFJUQ19UUl9NTlVfUG9zKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICggKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNUaW1lLT5TZWNvbmRzKSkgICAgICAgICAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdClzVGltZS0+VGltZUZvcm1hdCkgICAgICAgICAgICAgPDwgUlRDX1RSX1BNX1BvcykpOwogICB9CiAgIGVsc2UKICAgewotICAgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0ZNVCkgIT0gKHVpbnQzMl90KVJFU0VUKQorICAgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0ZNVCkgIT0gMFUpCiAgICAgewogICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSMTIoUlRDX0JjZDJUb0J5dGUoc1RpbWUtPkhvdXJzKSkpOwogICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSRk9STUFUMTIoc1RpbWUtPlRpbWVGb3JtYXQpKTsKQEAgLTgyMyw4NSArNzUzLDY5IEBACiAgICAgfQogICAgIGFzc2VydF9wYXJhbShJU19SVENfTUlOVVRFUyhSVENfQmNkMlRvQnl0ZShzVGltZS0+TWludXRlcykpKTsKICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX1NFQ09ORFMoUlRDX0JjZDJUb0J5dGUoc1RpbWUtPlNlY29uZHMpKSk7Ci0gICAgdG1wcmVnID0gKCgodWludDMyX3QpKHNUaW1lLT5Ib3VycykgPDwgMTZVKSB8IFwKLSAgICAgICAgICAgICAgKCh1aW50MzJfdCkoc1RpbWUtPk1pbnV0ZXMpIDw8IDhVKSB8IFwKLSAgICAgICAgICAgICAgKCh1aW50MzJfdClzVGltZS0+U2Vjb25kcykgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3QpKHNUaW1lLT5UaW1lRm9ybWF0KSA8PCAxNlUpKTsKKyAgICB0bXByZWcgPSAoKCh1aW50MzJfdCkoc1RpbWUtPkhvdXJzKSAgICAgIDw8IFJUQ19UUl9IVV9Qb3MpICB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdCkoc1RpbWUtPk1pbnV0ZXMpICAgIDw8IFJUQ19UUl9NTlVfUG9zKSB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdCkgc1RpbWUtPlNlY29uZHMpICAgICAgICAgICAgICAgICAgICAgICB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdCkoc1RpbWUtPlRpbWVGb3JtYXQpIDw8IFJUQ19UUl9QTV9Qb3MpKTsKICAgfQogCiAgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwogCi0gIC8qIFNldCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gIGlmIChSVENfRW50ZXJJbml0TW9kZShocnRjKSAhPSBIQUxfT0spCi0gIHsKLSAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKKyAgLyogRW50ZXIgSW5pdGlhbGl6YXRpb24gbW9kZSAqLworICBzdGF0dXMgPSBSVENfRW50ZXJJbml0TW9kZShocnRjKTsKIAotICAgIC8qIFNldCBSVEMgc3RhdGUgKi8KLSAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0KLSAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgfQotICBlbHNlCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7CiAgICAgLyogU2V0IHRoZSBSVENfVFIgcmVnaXN0ZXIgKi8KICAgICBocnRjLT5JbnN0YW5jZS0+VFIgPSAodWludDMyX3QpKHRtcHJlZyAmIFJUQ19UUl9SRVNFUlZFRF9NQVNLKTsKIAogICAgIC8qIENsZWFyIHRoZSBiaXRzIHRvIGJlIGNvbmZpZ3VyZWQgKERlcHJlY2F0ZWQuIFVzZSBIQUxfUlRDX0RTVF94eHggZnVuY3Rpb25zIGluc3RlYWQpICovCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPkNSICY9ICgodWludDMyX3QpflJUQ19DUl9CQ0spOworICAgIGhydGMtPkluc3RhbmNlLT5DUiAmPSAodWludDMyX3QpflJUQ19DUl9CS1A7CiAKICAgICAvKiBDb25maWd1cmUgdGhlIFJUQ19DUiByZWdpc3RlciAoRGVwcmVjYXRlZC4gVXNlIEhBTF9SVENfRFNUX3h4eCBmdW5jdGlvbnMgaW5zdGVhZCkgKi8KICAgICBocnRjLT5JbnN0YW5jZS0+Q1IgfD0gKHVpbnQzMl90KShzVGltZS0+RGF5TGlnaHRTYXZpbmcgfCBzVGltZS0+U3RvcmVPcGVyYXRpb24pOwogCiAgICAgLyogRXhpdCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPklTUiAmPSAoKHVpbnQzMl90KX5SVENfSVNSX0lOSVQpOwotCi0gICAgLyogSWYgIENSX0JZUFNIQUQgYml0ID0gMFUsIHdhaXQgZm9yIHN5bmNocm8gZWxzZSB0aGlzIGNoZWNrIGlzIG5vdCBuZWVkZWQgKi8KLSAgICBpZiAoKGhydGMtPkluc3RhbmNlLT5DUiAmIFJUQ19DUl9CWVBTSEFEKSA9PSBSRVNFVCkKLSAgICB7Ci0gICAgICBpZiAoSEFMX1JUQ19XYWl0Rm9yU3luY2hybyhocnRjKSAhPSBIQUxfT0spCi0gICAgICB7Ci0gICAgICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwotICAgICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0KLSAgICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgICAgICBfX0hBTF9VTkxPQ0soaHJ0Yyk7Ci0KLSAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKLQotICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICAgIHJldHVybiBIQUxfT0s7CisgICAgc3RhdHVzID0gUlRDX0V4aXRJbml0TW9kZShocnRjKTsKICAgfQorCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQorICB7CisgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOworICB9CisKKyAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCisgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOworCisgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgX19IQUxfVU5MT0NLKGhydGMpOworCisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgotICAqIEBicmllZiAgR2V0IFJUQyBjdXJyZW50IHRpbWUuCi0gICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAYnJpZWYgIEdldHMgUlRDIGN1cnJlbnQgdGltZS4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcGFyYW0gIHNUaW1lIFBvaW50ZXIgdG8gVGltZSBzdHJ1Y3R1cmUKICAgKiBAcGFyYW0gIEZvcm1hdCBTcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiB0aGUgZW50ZXJlZCBwYXJhbWV0ZXJzLgogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIFJUQ19GT1JNQVRfQklOOiBCaW5hcnkgZGF0YSBmb3JtYXQKICAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZPUk1BVF9CQ0Q6IEJDRCBkYXRhIGZvcm1hdAotICAqIEBub3RlICBZb3UgY2FuIHVzZSBTdWJTZWNvbmRzIGFuZCBTZWNvbmRGcmFjdGlvbiAoc1RpbWUgc3RydWN0dXJlIGZpZWxkcyByZXR1cm5lZCkgdG8gY29udmVydCBTdWJTZWNvbmRzCi0gICogICAgICAgIHZhbHVlIGluIHNlY29uZCBmcmFjdGlvbiByYXRpbyB3aXRoIHRpbWUgdW5pdCBmb2xsb3dpbmcgZ2VuZXJpYyBmb3JtdWxhOgotICAqICAgICAgICBTZWNvbmQgZnJhY3Rpb24gcmF0aW8gKiB0aW1lX3VuaXQ9IFsoU2Vjb25kRnJhY3Rpb24tU3ViU2Vjb25kcykvKFNlY29uZEZyYWN0aW9uKzEpXSAqIHRpbWVfdW5pdAotICAqICAgICAgICBUaGlzIGNvbnZlcnNpb24gY2FuIGJlIHBlcmZvcm1lZCBvbmx5IGlmIG5vIHNoaWZ0IG9wZXJhdGlvbiBpcyBwZW5kaW5nIChpZS4gU0hGUD0wKSB3aGVuIFBSRURJVl9TID49IFNTCi0gICogQG5vdGUgICBDYWxsIEhBTF9SVENfR2V0RGF0ZSgpIGFmdGVyIEhBTF9SVENfR2V0VGltZSgpIHRvIHVubG9jayB0aGUgdmFsdWVzCi0gICogICAgICAgICBpbiB0aGUgaGlnaGVyLW9yZGVyIGNhbGVuZGFyIHNoYWRvdyByZWdpc3RlcnMuCisgICogQG5vdGUgIFlvdSBjYW4gdXNlIFN1YlNlY29uZHMgYW5kIFNlY29uZEZyYWN0aW9uIChzVGltZSBzdHJ1Y3R1cmUgZmllbGRzCisgICogICAgICAgIHJldHVybmVkKSB0byBjb252ZXJ0IFN1YlNlY29uZHMgdmFsdWUgaW4gc2Vjb25kIGZyYWN0aW9uIHJhdGlvIHdpdGgKKyAgKiAgICAgICAgdGltZSB1bml0IGZvbGxvd2luZyBnZW5lcmljIGZvcm11bGE6CisgICogICAgICAgIFNlY29uZCBmcmFjdGlvbiByYXRpbyAqIHRpbWVfdW5pdCA9CisgICogICAgICAgICAgIFsoU2Vjb25kRnJhY3Rpb24gLSBTdWJTZWNvbmRzKSAvIChTZWNvbmRGcmFjdGlvbiArIDEpXSAqIHRpbWVfdW5pdAorICAqICAgICAgICBUaGlzIGNvbnZlcnNpb24gY2FuIGJlIHBlcmZvcm1lZCBvbmx5IGlmIG5vIHNoaWZ0IG9wZXJhdGlvbiBpcyBwZW5kaW5nCisgICogICAgICAgIChpZS4gU0hGUD0wKSB3aGVuIFBSRURJVl9TID49IFNTCisgICogQG5vdGUgIFlvdSBtdXN0IGNhbGwgSEFMX1JUQ19HZXREYXRlKCkgYWZ0ZXIgSEFMX1JUQ19HZXRUaW1lKCkgdG8gdW5sb2NrIHRoZQorICAqICAgICAgICB2YWx1ZXMgaW4gdGhlIGhpZ2hlci1vcmRlciBjYWxlbmRhciBzaGFkb3cgcmVnaXN0ZXJzIHRvIGVuc3VyZQorICAqICAgICAgICBjb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSB0aW1lIGFuZCBkYXRlIHZhbHVlcy4KKyAgKiAgICAgICAgUmVhZGluZyBSVEMgY3VycmVudCB0aW1lIGxvY2tzIHRoZSB2YWx1ZXMgaW4gY2FsZW5kYXIgc2hhZG93IHJlZ2lzdGVycworICAqICAgICAgICB1bnRpbCBjdXJyZW50IGRhdGUgaXMgcmVhZCB0byBlbnN1cmUgY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgdGltZSBhbmQKKyAgKiAgICAgICAgZGF0ZSB2YWx1ZXMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX0dldFRpbWUoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19UaW1lVHlwZURlZiAqc1RpbWUsIHVpbnQzMl90IEZvcm1hdCkKQEAgLTkxMSw3ICs4MjUsNyBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfUlRDX0ZPUk1BVChGb3JtYXQpKTsKIAotICAvKiBHZXQgc3Vic2Vjb25kcyBzdHJ1Y3R1cmUgZmllbGQgZnJvbSB0aGUgY29ycmVzcG9uZGluZyByZWdpc3RlciovCisgIC8qIEdldCBzdWJzZWNvbmRzIHZhbHVlIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgKi8KICAgc1RpbWUtPlN1YlNlY29uZHMgPSAodWludDMyX3QpKGhydGMtPkluc3RhbmNlLT5TU1IpOwogCiAgIC8qIEdldCBTZWNvbmRGcmFjdGlvbiBzdHJ1Y3R1cmUgZmllbGQgZnJvbSB0aGUgY29ycmVzcG9uZGluZyByZWdpc3RlciBmaWVsZCovCkBAIC05MjEsMTAgKzgzNSwxMCBAQAogICB0bXByZWcgPSAodWludDMyX3QpKGhydGMtPkluc3RhbmNlLT5UUiAmIFJUQ19UUl9SRVNFUlZFRF9NQVNLKTsKIAogICAvKiBGaWxsIHRoZSBzdHJ1Y3R1cmUgZmllbGRzIHdpdGggdGhlIHJlYWQgcGFyYW1ldGVycyAqLwotICBzVGltZS0+SG91cnMgPSAodWludDhfdCkoKHRtcHJlZyAmIChSVENfVFJfSFQgfCBSVENfVFJfSFUpKSA+PiAxNlUpOwotICBzVGltZS0+TWludXRlcyA9ICh1aW50OF90KSgodG1wcmVnICYgKFJUQ19UUl9NTlQgfCBSVENfVFJfTU5VKSkgPj4gOFUpOwotICBzVGltZS0+U2Vjb25kcyA9ICh1aW50OF90KSh0bXByZWcgJiAoUlRDX1RSX1NUIHwgUlRDX1RSX1NVKSk7Ci0gIHNUaW1lLT5UaW1lRm9ybWF0ID0gKHVpbnQ4X3QpKCh0bXByZWcgJiAoUlRDX1RSX1BNKSkgPj4gMTZVKTsKKyAgc1RpbWUtPkhvdXJzICAgICAgPSAodWludDhfdCkoKHRtcHJlZyAmIChSVENfVFJfSFQgIHwgUlRDX1RSX0hVKSkgID4+IFJUQ19UUl9IVV9Qb3MpOworICBzVGltZS0+TWludXRlcyAgICA9ICh1aW50OF90KSgodG1wcmVnICYgKFJUQ19UUl9NTlQgfCBSVENfVFJfTU5VKSkgPj4gUlRDX1RSX01OVV9Qb3MpOworICBzVGltZS0+U2Vjb25kcyAgICA9ICh1aW50OF90KSggdG1wcmVnICYgKFJUQ19UUl9TVCAgfCBSVENfVFJfU1UpKTsKKyAgc1RpbWUtPlRpbWVGb3JtYXQgPSAodWludDhfdCkoKHRtcHJlZyAmIChSVENfVFJfUE0pKSAgICAgICAgICAgICAgID4+IFJUQ19UUl9QTV9Qb3MpOwogCiAgIC8qIENoZWNrIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGZvcm1hdCAqLwogICBpZiAoRm9ybWF0ID09IFJUQ19GT1JNQVRfQklOKQpAQCAtOTM5LDggKzg1Myw5IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgU2V0IFJUQyBjdXJyZW50IGRhdGUuCi0gICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAYnJpZWYgIFNldHMgUlRDIGN1cnJlbnQgZGF0ZS4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcGFyYW0gIHNEYXRlIFBvaW50ZXIgdG8gZGF0ZSBzdHJ1Y3R1cmUKICAgKiBAcGFyYW0gIEZvcm1hdCBzcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiB0aGUgZW50ZXJlZCBwYXJhbWV0ZXJzLgogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC05NTEsNiArODY2LDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfU2V0RGF0ZShSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgUlRDX0RhdGVUeXBlRGVmICpzRGF0ZSwgdWludDMyX3QgRm9ybWF0KQogewogICB1aW50MzJfdCBkYXRldG1wcmVnID0gMFU7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfUlRDX0ZPUk1BVChGb3JtYXQpKTsKQEAgLTk3MywxMCArODg5LDEwIEBACiAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19NT05USChzRGF0ZS0+TW9udGgpKTsKICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0RBVEUoc0RhdGUtPkRhdGUpKTsKIAotICAgIGRhdGV0bXByZWcgPSAoKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzRGF0ZS0+WWVhcikgPDwgMTZVKSB8IFwKLSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0RhdGUtPk1vbnRoKSA8PCA4VSkgfCBcCi0gICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNEYXRlLT5EYXRlKSkgfCBcCi0gICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KXNEYXRlLT5XZWVrRGF5IDw8IDEzVSkpOworICAgIGRhdGV0bXByZWcgPSAoKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzRGF0ZS0+WWVhcikgIDw8IFJUQ19EUl9ZVV9Qb3MpIHwgXAorICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzRGF0ZS0+TW9udGgpIDw8IFJUQ19EUl9NVV9Qb3MpIHwgXAorICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzRGF0ZS0+RGF0ZSkpICAgICAgICAgICAgICAgICAgIHwgXAorICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClzRGF0ZS0+V2Vla0RheSAgICAgICAgICAgICAgIDw8IFJUQ19EUl9XRFVfUG9zKSk7CiAgIH0KICAgZWxzZQogICB7CkBAIC05ODQsNzQgKzkwMCw1NiBAQAogICAgIGFzc2VydF9wYXJhbShJU19SVENfTU9OVEgoUlRDX0JjZDJUb0J5dGUoc0RhdGUtPk1vbnRoKSkpOwogICAgIGFzc2VydF9wYXJhbShJU19SVENfREFURShSVENfQmNkMlRvQnl0ZShzRGF0ZS0+RGF0ZSkpKTsKIAotICAgIGRhdGV0bXByZWcgPSAoKCgodWludDMyX3Qpc0RhdGUtPlllYXIpIDw8IDE2VSkgfCBcCi0gICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdClzRGF0ZS0+TW9udGgpIDw8IDhVKSB8IFwKLSAgICAgICAgICAgICAgICAgICgodWludDMyX3Qpc0RhdGUtPkRhdGUpIHwgXAotICAgICAgICAgICAgICAgICAgKCgodWludDMyX3Qpc0RhdGUtPldlZWtEYXkpIDw8IDEzVSkpOworICAgIGRhdGV0bXByZWcgPSAoKCgodWludDMyX3Qpc0RhdGUtPlllYXIpICAgIDw8IFJUQ19EUl9ZVV9Qb3MpIHwgXAorICAgICAgICAgICAgICAgICAgKCgodWludDMyX3Qpc0RhdGUtPk1vbnRoKSAgIDw8IFJUQ19EUl9NVV9Qb3MpIHwgXAorICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkgc0RhdGUtPkRhdGUpICAgICAgICAgICAgICAgICAgICAgIHwgXAorICAgICAgICAgICAgICAgICAgKCgodWludDMyX3Qpc0RhdGUtPldlZWtEYXkpIDw8IFJUQ19EUl9XRFVfUG9zKSk7CiAgIH0KIAogICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKIAotICAvKiBTZXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLwotICBpZiAoUlRDX0VudGVySW5pdE1vZGUoaHJ0YykgIT0gSEFMX09LKQotICB7Ci0gICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CisgIC8qIEVudGVyIEluaXRpYWxpemF0aW9uIG1vZGUgKi8KKyAgc3RhdHVzID0gUlRDX0VudGVySW5pdE1vZGUoaHJ0Yyk7CiAKLSAgICAvKiBTZXQgUlRDIHN0YXRlKi8KLSAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0KLSAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgfQotICBlbHNlCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7CiAgICAgLyogU2V0IHRoZSBSVENfRFIgcmVnaXN0ZXIgKi8KICAgICBocnRjLT5JbnN0YW5jZS0+RFIgPSAodWludDMyX3QpKGRhdGV0bXByZWcgJiBSVENfRFJfUkVTRVJWRURfTUFTSyk7CiAKICAgICAvKiBFeGl0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSAgICBocnRjLT5JbnN0YW5jZS0+SVNSICY9ICgodWludDMyX3QpflJUQ19JU1JfSU5JVCk7Ci0KLSAgICAvKiBJZiAgQ1JfQllQU0hBRCBiaXQgPSAwVSwgd2FpdCBmb3Igc3luY2hybyBlbHNlIHRoaXMgY2hlY2sgaXMgbm90IG5lZWRlZCAqLwotICAgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0JZUFNIQUQpID09IFJFU0VUKQotICAgIHsKLSAgICAgIGlmIChIQUxfUlRDX1dhaXRGb3JTeW5jaHJvKGhydGMpICE9IEhBTF9PSykKLSAgICAgIHsKLSAgICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwotCi0gICAgICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9FUlJPUjsKLQotICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgICAgfQotICAgIH0KLQotICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwotICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwotCi0gICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZIDsKLQotICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICBfX0hBTF9VTkxPQ0soaHJ0Yyk7Ci0KLSAgICByZXR1cm4gSEFMX09LOworICAgIHN0YXR1cyA9IFJUQ19FeGl0SW5pdE1vZGUoaHJ0Yyk7CiAgIH0KKworICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgeworICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKKyAgfQorCisgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLworICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKKworICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgIF9fSEFMX1VOTE9DSyhocnRjKTsKKworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKLSAgKiBAYnJpZWYgIEdldCBSVEMgY3VycmVudCBkYXRlLgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQGJyaWVmICBHZXRzIFJUQyBjdXJyZW50IGRhdGUuCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCiAgICogQHBhcmFtICBzRGF0ZSBQb2ludGVyIHRvIERhdGUgc3RydWN0dXJlCiAgICogQHBhcmFtICBGb3JtYXQgU3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIGVudGVyZWQgcGFyYW1ldGVycy4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICAgQGFyZyBSVENfRk9STUFUX0JJTiA6ICBCaW5hcnkgZGF0YSBmb3JtYXQKLSAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZPUk1BVF9CQ0QgOiAgQkNEIGRhdGEgZm9ybWF0CisgICogICAgICAgICAgICBAYXJnIFJUQ19GT1JNQVRfQklOOiAgQmluYXJ5IGRhdGEgZm9ybWF0CisgICogICAgICAgICAgICBAYXJnIFJUQ19GT1JNQVRfQkNEOiAgQkNEIGRhdGEgZm9ybWF0CisgICogQG5vdGUgIFlvdSBtdXN0IGNhbGwgSEFMX1JUQ19HZXREYXRlKCkgYWZ0ZXIgSEFMX1JUQ19HZXRUaW1lKCkgdG8gdW5sb2NrIHRoZQorICAqICAgICAgICB2YWx1ZXMgaW4gdGhlIGhpZ2hlci1vcmRlciBjYWxlbmRhciBzaGFkb3cgcmVnaXN0ZXJzIHRvIGVuc3VyZQorICAqICAgICAgICBjb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSB0aW1lIGFuZCBkYXRlIHZhbHVlcy4KKyAgKiAgICAgICAgUmVhZGluZyBSVEMgY3VycmVudCB0aW1lIGxvY2tzIHRoZSB2YWx1ZXMgaW4gY2FsZW5kYXIgc2hhZG93IHJlZ2lzdGVycworICAqICAgICAgICB1bnRpbCBjdXJyZW50IGRhdGUgaXMgcmVhZCB0byBlbnN1cmUgY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgdGltZSBhbmQKKyAgKiAgICAgICAgZGF0ZSB2YWx1ZXMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX0dldERhdGUoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19EYXRlVHlwZURlZiAqc0RhdGUsIHVpbnQzMl90IEZvcm1hdCkKQEAgLTEwNjUsMjQgKzk2Myw3NDkgQEAKICAgZGF0ZXRtcHJlZyA9ICh1aW50MzJfdCkoaHJ0Yy0+SW5zdGFuY2UtPkRSICYgUlRDX0RSX1JFU0VSVkVEX01BU0spOwogCiAgIC8qIEZpbGwgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd2l0aCB0aGUgcmVhZCBwYXJhbWV0ZXJzICovCi0gIHNEYXRlLT5ZZWFyID0gKHVpbnQ4X3QpKChkYXRldG1wcmVnICYgKFJUQ19EUl9ZVCB8IFJUQ19EUl9ZVSkpID4+IDE2VSk7Ci0gIHNEYXRlLT5Nb250aCA9ICh1aW50OF90KSgoZGF0ZXRtcHJlZyAmIChSVENfRFJfTVQgfCBSVENfRFJfTVUpKSA+PiA4VSk7Ci0gIHNEYXRlLT5EYXRlID0gKHVpbnQ4X3QpKGRhdGV0bXByZWcgJiAoUlRDX0RSX0RUIHwgUlRDX0RSX0RVKSk7Ci0gIHNEYXRlLT5XZWVrRGF5ID0gKHVpbnQ4X3QpKChkYXRldG1wcmVnICYgKFJUQ19EUl9XRFUpKSA+PiAxM1UpOworICBzRGF0ZS0+WWVhciAgICA9ICh1aW50OF90KSgoZGF0ZXRtcHJlZyAmIChSVENfRFJfWVQgfCBSVENfRFJfWVUpKSA+PiBSVENfRFJfWVVfUG9zKTsKKyAgc0RhdGUtPk1vbnRoICAgPSAodWludDhfdCkoKGRhdGV0bXByZWcgJiAoUlRDX0RSX01UIHwgUlRDX0RSX01VKSkgPj4gUlRDX0RSX01VX1Bvcyk7CisgIHNEYXRlLT5EYXRlICAgID0gKHVpbnQ4X3QpIChkYXRldG1wcmVnICYgKFJUQ19EUl9EVCB8IFJUQ19EUl9EVSkpOworICBzRGF0ZS0+V2Vla0RheSA9ICh1aW50OF90KSgoZGF0ZXRtcHJlZyAmIChSVENfRFJfV0RVKSkgICAgICAgICAgICA+PiBSVENfRFJfV0RVX1Bvcyk7CiAKICAgLyogQ2hlY2sgdGhlIGlucHV0IHBhcmFtZXRlcnMgZm9ybWF0ICovCiAgIGlmIChGb3JtYXQgPT0gUlRDX0ZPUk1BVF9CSU4pCiAgIHsKICAgICAvKiBDb252ZXJ0IHRoZSBkYXRlIHN0cnVjdHVyZSBwYXJhbWV0ZXJzIHRvIEJpbmFyeSBmb3JtYXQgKi8KLSAgICBzRGF0ZS0+WWVhciA9ICh1aW50OF90KVJUQ19CY2QyVG9CeXRlKHNEYXRlLT5ZZWFyKTsKKyAgICBzRGF0ZS0+WWVhciAgPSAodWludDhfdClSVENfQmNkMlRvQnl0ZShzRGF0ZS0+WWVhcik7CiAgICAgc0RhdGUtPk1vbnRoID0gKHVpbnQ4X3QpUlRDX0JjZDJUb0J5dGUoc0RhdGUtPk1vbnRoKTsKLSAgICBzRGF0ZS0+RGF0ZSA9ICh1aW50OF90KVJUQ19CY2QyVG9CeXRlKHNEYXRlLT5EYXRlKTsKKyAgICBzRGF0ZS0+RGF0ZSAgPSAodWludDhfdClSVENfQmNkMlRvQnl0ZShzRGF0ZS0+RGF0ZSk7CiAgIH0KICAgcmV0dXJuIEhBTF9PSzsKIH0KIAogLyoqCi0gICogQGJyaWVmICBEYXlsaWdodCBTYXZpbmcgVGltZSwgYWRkYSBvbmUgaG91ciB0byB0aGUgY2FsZW5kYXIgaW4gb25lCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBSVENfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBSVEMgQWxhcm0gZnVuY3Rpb25zCisgICogQGJyaWVmICAgIFJUQyBBbGFybSBmdW5jdGlvbnMKKyAgKgorQHZlcmJhdGltCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAgICAgICAgICAjIyMjIyBSVEMgQWxhcm0gZnVuY3Rpb25zICMjIyMjCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgWy4uXSBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvIGNvbmZpZ3VyZSBBbGFybSBmZWF0dXJlCisKK0BlbmR2ZXJiYXRpbQorICAqIEB7CisgICovCisvKioKKyAgKiBAYnJpZWYgIFNldHMgdGhlIHNwZWNpZmllZCBSVEMgQWxhcm0uCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCisgICogQHBhcmFtICBzQWxhcm0gUG9pbnRlciB0byBBbGFybSBzdHJ1Y3R1cmUKKyAgKiBAcGFyYW0gIEZvcm1hdCBTcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiB0aGUgZW50ZXJlZCBwYXJhbWV0ZXJzLgorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICAgQGFyZyBSVENfRk9STUFUX0JJTjogQmluYXJ5IGRhdGEgZm9ybWF0CisgICogICAgICAgICAgICAgQGFyZyBSVENfRk9STUFUX0JDRDogQkNEIGRhdGEgZm9ybWF0CisgICogQG5vdGUgICBUaGUgQWxhcm0gcmVnaXN0ZXIgY2FuIG9ubHkgYmUgd3JpdHRlbiB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIEFsYXJtCisgICogICAgICAgICBpcyBkaXNhYmxlZCAoVXNlIHRoZSBIQUxfUlRDX0RlYWN0aXZhdGVBbGFybSgpKS4KKyAgKiBAbm90ZSAgIFRoZSBIQUxfUlRDX1NldFRpbWUoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgZW5hYmxpbmcgdGhlIEFsYXJtIGZlYXR1cmUuCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX1NldEFsYXJtKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCBSVENfQWxhcm1UeXBlRGVmICpzQWxhcm0sIHVpbnQzMl90IEZvcm1hdCkKK3sKKyAgdWludDMyX3QgdGlja3N0YXJ0ID0gMFU7CisgIHVpbnQzMl90IHRtcHJlZyA9IDBVOworICB1aW50MzJfdCBzdWJzZWNvbmR0bXByZWcgPSAwVTsKKworICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLworICBhc3NlcnRfcGFyYW0oSVNfUlRDX0ZPUk1BVChGb3JtYXQpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1JUQ19BTEFSTShzQWxhcm0tPkFsYXJtKSk7CisgIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fTUFTSyhzQWxhcm0tPkFsYXJtTWFzaykpOworICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMQVJNX0RBVEVfV0VFS0RBWV9TRUwoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5U2VsKSk7CisgIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fU1VCX1NFQ09ORF9WQUxVRShzQWxhcm0tPkFsYXJtVGltZS5TdWJTZWNvbmRzKSk7CisgIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fU1VCX1NFQ09ORF9NQVNLKHNBbGFybS0+QWxhcm1TdWJTZWNvbmRNYXNrKSk7CisKKyAgLyogUHJvY2VzcyBMb2NrZWQgKi8KKyAgX19IQUxfTE9DSyhocnRjKTsKKworICAvKiBDaGFuZ2UgUlRDIHN0YXRlIHRvIEJVU1kgKi8KKyAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0JVU1k7CisKKyAgLyogQ2hlY2sgdGhlIGRhdGEgZm9ybWF0IChiaW5hcnkgb3IgQkNEKSBhbmQgc3RvcmUgdGhlIEFsYXJtIHRpbWUgYW5kIGRhdGUKKyAgICAgY29uZmlndXJhdGlvbiBhY2NvcmRpbmdseSAqLworICBpZiAoRm9ybWF0ID09IFJUQ19GT1JNQVRfQklOKQorICB7CisgICAgaWYgKChocnRjLT5JbnN0YW5jZS0+Q1IgJiBSVENfQ1JfRk1UKSAhPSAwVSkKKyAgICB7CisgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0hPVVIxMihzQWxhcm0tPkFsYXJtVGltZS5Ib3VycykpOworICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSRk9STUFUMTIoc0FsYXJtLT5BbGFybVRpbWUuVGltZUZvcm1hdCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgc0FsYXJtLT5BbGFybVRpbWUuVGltZUZvcm1hdCA9IDB4MDBVOworICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSMjQoc0FsYXJtLT5BbGFybVRpbWUuSG91cnMpKTsKKyAgICB9CisgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19NSU5VVEVTKHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMpKTsKKyAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX1NFQ09ORFMoc0FsYXJtLT5BbGFybVRpbWUuU2Vjb25kcykpOworCisgICAgaWYgKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheVNlbCA9PSBSVENfQUxBUk1EQVRFV0VFS0RBWVNFTF9EQVRFKQorICAgIHsKKyAgICAgIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fREFURV9XRUVLREFZX0RBVEUoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMQVJNX0RBVEVfV0VFS0RBWV9XRUVLREFZKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheSkpOworICAgIH0KKworICAgIHRtcHJlZyA9ICgoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzKSAgIDw8IFJUQ19BTFJNQVJfSFVfUG9zKSAgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0FsYXJtLT5BbGFybVRpbWUuTWludXRlcykgPDwgUlRDX0FMUk1BUl9NTlVfUG9zKSB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzQWxhcm0tPkFsYXJtVGltZS5TZWNvbmRzKSkgICAgICAgICAgICAgICAgICAgICAgIHwgXAorICAgICAgICAgICAgICAoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5UaW1lRm9ybWF0KSAgICAgICAgICAgIDw8IFJUQ19UUl9QTV9Qb3MpICAgICAgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5KSAgPDwgUlRDX0FMUk1BUl9EVV9Qb3MpICB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdClzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXlTZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXAorICAgICAgICAgICAgICAoKHVpbnQzMl90KXNBbGFybS0+QWxhcm1NYXNrKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgaWYgKChocnRjLT5JbnN0YW5jZS0+Q1IgJiBSVENfQ1JfRk1UKSAhPSAwVSkKKyAgICB7CisgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0hPVVIxMihSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtVGltZS5Ib3VycykpKTsKKyAgICAgIGFzc2VydF9wYXJhbShJU19SVENfSE9VUkZPUk1BVDEyKHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQgPSAweDAwVTsKKyAgICAgIGFzc2VydF9wYXJhbShJU19SVENfSE9VUjI0KFJUQ19CY2QyVG9CeXRlKHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzKSkpOworICAgIH0KKworICAgIGFzc2VydF9wYXJhbShJU19SVENfTUlOVVRFUyhSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtVGltZS5NaW51dGVzKSkpOworICAgIGFzc2VydF9wYXJhbShJU19SVENfU0VDT05EUyhSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtVGltZS5TZWNvbmRzKSkpOworCisgICAgaWYgKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheVNlbCA9PSBSVENfQUxBUk1EQVRFV0VFS0RBWVNFTF9EQVRFKQorICAgIHsKKyAgICAgIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fREFURV9XRUVLREFZX0RBVEUoUlRDX0JjZDJUb0J5dGUoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5KSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19BTEFSTV9EQVRFX1dFRUtEQVlfV0VFS0RBWShSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXkpKSk7CisgICAgfQorCisgICAgdG1wcmVnID0gKCgodWludDMyX3QpKHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzKSAgICAgIDw8IFJUQ19BTFJNQVJfSFVfUG9zKSAgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpKHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMpICAgIDw8IFJUQ19BTFJNQVJfTU5VX1BvcykgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpIHNBbGFybS0+QWxhcm1UaW1lLlNlY29uZHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpKHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQpIDw8IFJUQ19UUl9QTV9Qb3MpICAgICAgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheSkgICAgIDw8IFJUQ19BTFJNQVJfRFVfUG9zKSAgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpIHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheVNlbCkgICAgICAgICAgICAgICAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpIHNBbGFybS0+QWxhcm1NYXNrKSk7CisgIH0KKworICAvKiBTdG9yZSB0aGUgQWxhcm0gc3Vic2Vjb25kcyBjb25maWd1cmF0aW9uICovCisgIHN1YnNlY29uZHRtcHJlZyA9ICh1aW50MzJfdCkoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5TdWJTZWNvbmRzKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpKHNBbGFybS0+QWxhcm1TdWJTZWNvbmRNYXNrKSk7CisKKyAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLworICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoaHJ0Yyk7CisKKyAgLyogQ29uZmlndXJlIHRoZSBBbGFybSByZWdpc3RlciAqLworICBpZiAoc0FsYXJtLT5BbGFybSA9PSBSVENfQUxBUk1fQSkKKyAgeworICAgIC8qIERpc2FibGUgdGhlIEFsYXJtIEEgKi8KKyAgICBfX0hBTF9SVENfQUxBUk1BX0RJU0FCTEUoaHJ0Yyk7CisKKyAgICAvKiBJbiBjYXNlIGludGVycnVwdCBtb2RlIGlzIHVzZWQsIHRoZSBpbnRlcnJ1cHQgc291cmNlIG11c3QgYmUgZGlzYWJsZWQgKi8KKyAgICBfX0hBTF9SVENfQUxBUk1fRElTQUJMRV9JVChocnRjLCBSVENfSVRfQUxSQSk7CisKKyAgICAvKiBDbGVhciB0aGUgQWxhcm0gZmxhZyAqLworICAgIF9fSEFMX1JUQ19BTEFSTV9DTEVBUl9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkFGKTsKKworICAgIC8qIEdldCB0aWNrICovCisgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKworICAgIC8qIFdhaXQgdGlsbCBSVEMgQUxSQVdGIGZsYWcgaXMgc2V0IGFuZCBpZiB0aW1lb3V0IGlzIHJlYWNoZWQgZXhpdCAqLworICAgIHdoaWxlIChfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQVdGKSA9PSAwVSkKKyAgICB7CisgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCisgICAgICB7CisgICAgICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLworICAgICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKKworICAgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfVElNRU9VVDsKKworICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKKworICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICB9CisgICAgfQorCisgICAgaHJ0Yy0+SW5zdGFuY2UtPkFMUk1BUiA9ICh1aW50MzJfdCl0bXByZWc7CisgICAgLyogQ29uZmlndXJlIHRoZSBBbGFybSBBIFN1YnNlY29uZHMgcmVnaXN0ZXIgKi8KKyAgICBocnRjLT5JbnN0YW5jZS0+QUxSTUFTU1IgPSBzdWJzZWNvbmR0bXByZWc7CisgICAgLyogQ29uZmlndXJlIHRoZSBBbGFybSBzdGF0ZTogRW5hYmxlIEFsYXJtICovCisgICAgX19IQUxfUlRDX0FMQVJNQV9FTkFCTEUoaHJ0Yyk7CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogRGlzYWJsZSB0aGUgQWxhcm0gQiAqLworICAgIF9fSEFMX1JUQ19BTEFSTUJfRElTQUJMRShocnRjKTsKKworICAgIC8qIEluIGNhc2UgaW50ZXJydXB0IG1vZGUgaXMgdXNlZCwgdGhlIGludGVycnVwdCBzb3VyY2UgbXVzdCBiZSBkaXNhYmxlZCAqLworICAgIF9fSEFMX1JUQ19BTEFSTV9ESVNBQkxFX0lUKGhydGMsIFJUQ19JVF9BTFJCKTsKKworICAgIC8qIENsZWFyIHRoZSBBbGFybSBmbGFnICovCisgICAgX19IQUxfUlRDX0FMQVJNX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQkYpOworCisgICAgLyogR2V0IHRpY2sgKi8KKyAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCisgICAgLyogV2FpdCB0aWxsIFJUQyBBTFJCV0YgZmxhZyBpcyBzZXQgYW5kIGlmIHRpbWVvdXQgaXMgcmVhY2hlZCBleGl0ICovCisgICAgd2hpbGUgKF9fSEFMX1JUQ19BTEFSTV9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19BTFJCV0YpID09IDBVKQorICAgIHsKKyAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBSVENfVElNRU9VVF9WQUxVRSkKKyAgICAgIHsKKyAgICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCisgICAgICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOworCisgICAgICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9USU1FT1VUOworCisgICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICAgICAgX19IQUxfVU5MT0NLKGhydGMpOworCisgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBocnRjLT5JbnN0YW5jZS0+QUxSTUJSID0gKHVpbnQzMl90KXRtcHJlZzsKKyAgICAvKiBDb25maWd1cmUgdGhlIEFsYXJtIEIgU3Vic2Vjb25kcyByZWdpc3RlciAqLworICAgIGhydGMtPkluc3RhbmNlLT5BTFJNQlNTUiA9IHN1YnNlY29uZHRtcHJlZzsKKyAgICAvKiBDb25maWd1cmUgdGhlIEFsYXJtIHN0YXRlOiBFbmFibGUgQWxhcm0gKi8KKyAgICBfX0hBTF9SVENfQUxBUk1CX0VOQUJMRShocnRjKTsKKyAgfQorCisgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLworICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKKworICAvKiBDaGFuZ2UgUlRDIHN0YXRlIGJhY2sgdG8gUkVBRFkgKi8KKyAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOworCisgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgX19IQUxfVU5MT0NLKGhydGMpOworCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEBicmllZiAgU2V0cyB0aGUgc3BlY2lmaWVkIFJUQyBBbGFybSB3aXRoIEludGVycnVwdC4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KKyAgKiBAcGFyYW0gIHNBbGFybSBQb2ludGVyIHRvIEFsYXJtIHN0cnVjdHVyZQorICAqIEBwYXJhbSAgRm9ybWF0IFNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIHRoZSBlbnRlcmVkIHBhcmFtZXRlcnMuCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgICBAYXJnIFJUQ19GT1JNQVRfQklOOiBCaW5hcnkgZGF0YSBmb3JtYXQKKyAgKiAgICAgICAgICAgICBAYXJnIFJUQ19GT1JNQVRfQkNEOiBCQ0QgZGF0YSBmb3JtYXQKKyAgKiBAbm90ZSAgIFRoZSBBbGFybSByZWdpc3RlciBjYW4gb25seSBiZSB3cml0dGVuIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQWxhcm0KKyAgKiAgICAgICAgIGlzIGRpc2FibGVkIChVc2UgdGhlIEhBTF9SVENfRGVhY3RpdmF0ZUFsYXJtKCkpLgorICAqIEBub3RlICAgVGhlIEhBTF9SVENfU2V0VGltZSgpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBlbmFibGluZyB0aGUgQWxhcm0gZmVhdHVyZS4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfU2V0QWxhcm1fSVQoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19BbGFybVR5cGVEZWYgKnNBbGFybSwgdWludDMyX3QgRm9ybWF0KQoreworICBfX0lPIHVpbnQzMl90IGNvdW50ICA9IFJUQ19USU1FT1VUX1ZBTFVFICogKFN5c3RlbUNvcmVDbG9jayAvIDMyVSAvIDEwMDBVKTsKKyAgICAgICB1aW50MzJfdCB0bXByZWcgPSAwVTsKKyAgICAgICB1aW50MzJfdCBzdWJzZWNvbmR0bXByZWcgPSAwVTsKKworICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLworICBhc3NlcnRfcGFyYW0oSVNfUlRDX0ZPUk1BVChGb3JtYXQpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1JUQ19BTEFSTShzQWxhcm0tPkFsYXJtKSk7CisgIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fTUFTSyhzQWxhcm0tPkFsYXJtTWFzaykpOworICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMQVJNX0RBVEVfV0VFS0RBWV9TRUwoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5U2VsKSk7CisgIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fU1VCX1NFQ09ORF9WQUxVRShzQWxhcm0tPkFsYXJtVGltZS5TdWJTZWNvbmRzKSk7CisgIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fU1VCX1NFQ09ORF9NQVNLKHNBbGFybS0+QWxhcm1TdWJTZWNvbmRNYXNrKSk7CisKKyAgLyogUHJvY2VzcyBMb2NrZWQgKi8KKyAgX19IQUxfTE9DSyhocnRjKTsKKworICAvKiBDaGFuZ2UgUlRDIHN0YXRlIHRvIEJVU1kgKi8KKyAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0JVU1k7CisKKyAgLyogQ2hlY2sgdGhlIGRhdGEgZm9ybWF0IChiaW5hcnkgb3IgQkNEKSBhbmQgc3RvcmUgdGhlIEFsYXJtIHRpbWUgYW5kIGRhdGUKKyAgICAgY29uZmlndXJhdGlvbiBhY2NvcmRpbmdseSAqLworICBpZiAoRm9ybWF0ID09IFJUQ19GT1JNQVRfQklOKQorICB7CisgICAgaWYgKChocnRjLT5JbnN0YW5jZS0+Q1IgJiBSVENfQ1JfRk1UKSAhPSAwVSkKKyAgICB7CisgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0hPVVIxMihzQWxhcm0tPkFsYXJtVGltZS5Ib3VycykpOworICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSRk9STUFUMTIoc0FsYXJtLT5BbGFybVRpbWUuVGltZUZvcm1hdCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgc0FsYXJtLT5BbGFybVRpbWUuVGltZUZvcm1hdCA9IDB4MDBVOworICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSMjQoc0FsYXJtLT5BbGFybVRpbWUuSG91cnMpKTsKKyAgICB9CisgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19NSU5VVEVTKHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMpKTsKKyAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX1NFQ09ORFMoc0FsYXJtLT5BbGFybVRpbWUuU2Vjb25kcykpOworCisgICAgaWYgKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheVNlbCA9PSBSVENfQUxBUk1EQVRFV0VFS0RBWVNFTF9EQVRFKQorICAgIHsKKyAgICAgIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fREFURV9XRUVLREFZX0RBVEUoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMQVJNX0RBVEVfV0VFS0RBWV9XRUVLREFZKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheSkpOworICAgIH0KKworICAgIHRtcHJlZyA9ICgoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzKSAgIDw8IFJUQ19BTFJNQVJfSFVfUG9zKSAgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0FsYXJtLT5BbGFybVRpbWUuTWludXRlcykgPDwgUlRDX0FMUk1BUl9NTlVfUG9zKSB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzQWxhcm0tPkFsYXJtVGltZS5TZWNvbmRzKSkgICAgICAgICAgICAgICAgICAgICAgIHwgXAorICAgICAgICAgICAgICAoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5UaW1lRm9ybWF0KSAgICAgICAgICAgIDw8IFJUQ19UUl9QTV9Qb3MpICAgICAgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5KSAgPDwgUlRDX0FMUk1BUl9EVV9Qb3MpICB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdClzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXlTZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXAorICAgICAgICAgICAgICAoKHVpbnQzMl90KXNBbGFybS0+QWxhcm1NYXNrKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgaWYgKChocnRjLT5JbnN0YW5jZS0+Q1IgJiBSVENfQ1JfRk1UKSAhPSAwVSkKKyAgICB7CisgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0hPVVIxMihSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtVGltZS5Ib3VycykpKTsKKyAgICAgIGFzc2VydF9wYXJhbShJU19SVENfSE9VUkZPUk1BVDEyKHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQgPSAweDAwVTsKKyAgICAgIGFzc2VydF9wYXJhbShJU19SVENfSE9VUjI0KFJUQ19CY2QyVG9CeXRlKHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzKSkpOworICAgIH0KKworICAgIGFzc2VydF9wYXJhbShJU19SVENfTUlOVVRFUyhSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtVGltZS5NaW51dGVzKSkpOworICAgIGFzc2VydF9wYXJhbShJU19SVENfU0VDT05EUyhSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtVGltZS5TZWNvbmRzKSkpOworCisgICAgaWYgKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheVNlbCA9PSBSVENfQUxBUk1EQVRFV0VFS0RBWVNFTF9EQVRFKQorICAgIHsKKyAgICAgIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fREFURV9XRUVLREFZX0RBVEUoUlRDX0JjZDJUb0J5dGUoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5KSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19BTEFSTV9EQVRFX1dFRUtEQVlfV0VFS0RBWShSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXkpKSk7CisgICAgfQorCisgICAgdG1wcmVnID0gKCgodWludDMyX3QpKHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzKSAgICAgIDw8IFJUQ19BTFJNQVJfSFVfUG9zKSAgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpKHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMpICAgIDw8IFJUQ19BTFJNQVJfTU5VX1BvcykgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpIHNBbGFybS0+QWxhcm1UaW1lLlNlY29uZHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpKHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQpIDw8IFJUQ19UUl9QTV9Qb3MpICAgICAgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheSkgICAgIDw8IFJUQ19BTFJNQVJfRFVfUG9zKSAgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpIHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheVNlbCkgICAgICAgICAgICAgICAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpIHNBbGFybS0+QWxhcm1NYXNrKSk7CisgIH0KKworICAvKiBTdG9yZSB0aGUgQWxhcm0gc3Vic2Vjb25kcyBjb25maWd1cmF0aW9uICovCisgIHN1YnNlY29uZHRtcHJlZyA9ICh1aW50MzJfdCkoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5TdWJTZWNvbmRzKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpKHNBbGFybS0+QWxhcm1TdWJTZWNvbmRNYXNrKSk7CisKKyAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLworICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoaHJ0Yyk7CisKKyAgLyogQ29uZmlndXJlIHRoZSBBbGFybSByZWdpc3RlciAqLworICBpZiAoc0FsYXJtLT5BbGFybSA9PSBSVENfQUxBUk1fQSkKKyAgeworICAgIC8qIERpc2FibGUgdGhlIEFsYXJtIEEgKi8KKyAgICBfX0hBTF9SVENfQUxBUk1BX0RJU0FCTEUoaHJ0Yyk7CisKKyAgICAvKiBDbGVhciB0aGUgQWxhcm0gZmxhZyAqLworICAgIF9fSEFMX1JUQ19BTEFSTV9DTEVBUl9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkFGKTsKKworICAgIC8qIFdhaXQgdGlsbCBSVEMgQUxSQVdGIGZsYWcgaXMgc2V0IGFuZCBpZiB0aW1lb3V0IGlzIHJlYWNoZWQgZXhpdCAqLworICAgIGRvCisgICAgeworICAgICAgY291bnQgPSBjb3VudCAtIDFVOworICAgICAgaWYgKGNvdW50ID09IDBVKQorICAgICAgeworICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KKyAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CisKKyAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1RJTUVPVVQ7CisKKyAgICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgICBfX0hBTF9VTkxPQ0soaHJ0Yyk7CisKKyAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgfQorICAgIH0gd2hpbGUgKF9fSEFMX1JUQ19BTEFSTV9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19BTFJBV0YpID09IDBVKTsKKworICAgIGhydGMtPkluc3RhbmNlLT5BTFJNQVIgPSAodWludDMyX3QpdG1wcmVnOworICAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gQSBTdWJzZWNvbmRzIHJlZ2lzdGVyICovCisgICAgaHJ0Yy0+SW5zdGFuY2UtPkFMUk1BU1NSID0gc3Vic2Vjb25kdG1wcmVnOworICAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gc3RhdGU6IEVuYWJsZSBBbGFybSAqLworICAgIF9fSEFMX1JUQ19BTEFSTUFfRU5BQkxFKGhydGMpOworICAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gaW50ZXJydXB0ICovCisgICAgX19IQUxfUlRDX0FMQVJNX0VOQUJMRV9JVChocnRjLCBSVENfSVRfQUxSQSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogRGlzYWJsZSB0aGUgQWxhcm0gQiAqLworICAgIF9fSEFMX1JUQ19BTEFSTUJfRElTQUJMRShocnRjKTsKKworICAgIC8qIENsZWFyIHRoZSBBbGFybSBmbGFnICovCisgICAgX19IQUxfUlRDX0FMQVJNX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQkYpOworCisgICAgLyogUmVsb2FkIHRoZSBjb3VudGVyICovCisgICAgY291bnQgPSBSVENfVElNRU9VVF9WQUxVRSAqIChTeXN0ZW1Db3JlQ2xvY2sgLyAzMlUgLyAxMDAwVSk7CisKKyAgICAvKiBXYWl0IHRpbGwgUlRDIEFMUkJXRiBmbGFnIGlzIHNldCBhbmQgaWYgdGltZW91dCBpcyByZWFjaGVkIGV4aXQgKi8KKyAgICBkbworICAgIHsKKyAgICAgIGNvdW50ID0gY291bnQgLSAxVTsKKyAgICAgIGlmIChjb3VudCA9PSAwVSkKKyAgICAgIHsKKyAgICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCisgICAgICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOworCisgICAgICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9USU1FT1VUOworCisgICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICAgICAgX19IQUxfVU5MT0NLKGhydGMpOworCisgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgIH0KKyAgICB9IHdoaWxlIChfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQldGKSA9PSAwVSk7CisKKyAgICBocnRjLT5JbnN0YW5jZS0+QUxSTUJSID0gKHVpbnQzMl90KXRtcHJlZzsKKyAgICAvKiBDb25maWd1cmUgdGhlIEFsYXJtIEIgU3Vic2Vjb25kcyByZWdpc3RlciAqLworICAgIGhydGMtPkluc3RhbmNlLT5BTFJNQlNTUiA9IHN1YnNlY29uZHRtcHJlZzsKKyAgICAvKiBDb25maWd1cmUgdGhlIEFsYXJtIHN0YXRlOiBFbmFibGUgQWxhcm0gKi8KKyAgICBfX0hBTF9SVENfQUxBUk1CX0VOQUJMRShocnRjKTsKKyAgICAvKiBDb25maWd1cmUgdGhlIEFsYXJtIGludGVycnVwdCAqLworICAgIF9fSEFMX1JUQ19BTEFSTV9FTkFCTEVfSVQoaHJ0YywgUlRDX0lUX0FMUkIpOworICB9CisKKyAgLyogUlRDIEFsYXJtIEludGVycnVwdCBDb25maWd1cmF0aW9uOiBFWFRJIGNvbmZpZ3VyYXRpb24gKi8KKyAgX19IQUxfUlRDX0FMQVJNX0VYVElfRU5BQkxFX0lUKCk7CisgIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0VOQUJMRV9SSVNJTkdfRURHRSgpOworCisgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLworICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKKworICAvKiBDaGFuZ2UgUlRDIHN0YXRlIGJhY2sgdG8gUkVBRFkgKi8KKyAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOworCisgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgX19IQUxfVU5MT0NLKGhydGMpOworCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGVhY3RpdmF0ZXMgdGhlIHNwZWNpZmllZCBSVEMgQWxhcm0uCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCisgICogQHBhcmFtICBBbGFybSBTcGVjaWZpZXMgdGhlIEFsYXJtLgorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIFJUQ19BTEFSTV9BOiBBbGFybSBBCisgICogICAgICAgICAgICBAYXJnIFJUQ19BTEFSTV9COiBBbGFybSBCCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX0RlYWN0aXZhdGVBbGFybShSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgQWxhcm0pCit7CisgIHVpbnQzMl90IHRpY2tzdGFydCA9IDBVOworCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk0oQWxhcm0pKTsKKworICAvKiBQcm9jZXNzIExvY2tlZCAqLworICBfX0hBTF9MT0NLKGhydGMpOworCisgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9CVVNZOworCisgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KKyAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOworCisgIGlmIChBbGFybSA9PSBSVENfQUxBUk1fQSkKKyAgeworICAgIC8qIERpc2FibGUgQWxhcm0gQSAqLworICAgIF9fSEFMX1JUQ19BTEFSTUFfRElTQUJMRShocnRjKTsKKworICAgIC8qIEluIGNhc2UgaW50ZXJydXB0IG1vZGUgaXMgdXNlZCwgdGhlIGludGVycnVwdCBzb3VyY2UgbXVzdCBiZSBkaXNhYmxlZCAqLworICAgIF9fSEFMX1JUQ19BTEFSTV9ESVNBQkxFX0lUKGhydGMsIFJUQ19JVF9BTFJBKTsKKworICAgIC8qIEdldCB0aWNrICovCisgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKworICAgIC8qIFdhaXQgdGlsbCBSVEMgQUxSeFdGIGZsYWcgaXMgc2V0IGFuZCBpZiB0aW1lb3V0IGlzIHJlYWNoZWQgZXhpdCAqLworICAgIHdoaWxlIChfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQVdGKSA9PSAwVSkKKyAgICB7CisgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCisgICAgICB7CisgICAgICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLworICAgICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKKworICAgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfVElNRU9VVDsKKworICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKKworICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICB9CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIC8qIERpc2FibGUgQWxhcm0gQiAqLworICAgIF9fSEFMX1JUQ19BTEFSTUJfRElTQUJMRShocnRjKTsKKworICAgIC8qIEluIGNhc2UgaW50ZXJydXB0IG1vZGUgaXMgdXNlZCwgdGhlIGludGVycnVwdCBzb3VyY2UgbXVzdCBiZSBkaXNhYmxlZCAqLworICAgIF9fSEFMX1JUQ19BTEFSTV9ESVNBQkxFX0lUKGhydGMsIFJUQ19JVF9BTFJCKTsKKworICAgIC8qIEdldCB0aWNrICovCisgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKworICAgIC8qIFdhaXQgdGlsbCBSVEMgQUxSeFdGIGZsYWcgaXMgc2V0IGFuZCBpZiB0aW1lb3V0IGlzIHJlYWNoZWQgZXhpdCAqLworICAgIHdoaWxlIChfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQldGKSA9PSAwVSkKKyAgICB7CisgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCisgICAgICB7CisgICAgICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLworICAgICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKKworICAgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfVElNRU9VVDsKKworICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKKworICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCisgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOworCisgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKKworICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgIF9fSEFMX1VOTE9DSyhocnRjKTsKKworICByZXR1cm4gSEFMX09LOworfQorCisvKioKKyAgKiBAYnJpZWYgIEdldHMgdGhlIFJUQyBBbGFybSB2YWx1ZSBhbmQgbWFza3MuCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCisgICogQHBhcmFtICBzQWxhcm0gUG9pbnRlciB0byBEYXRlIHN0cnVjdHVyZQorICAqIEBwYXJhbSAgQWxhcm0gU3BlY2lmaWVzIHRoZSBBbGFybS4KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBSVENfQUxBUk1fQTogQWxhcm0gQQorICAqICAgICAgICAgICAgQGFyZyBSVENfQUxBUk1fQjogQWxhcm0gQgorICAqIEBwYXJhbSAgRm9ybWF0IFNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIHRoZSBlbnRlcmVkIHBhcmFtZXRlcnMuCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgICBAYXJnIFJUQ19GT1JNQVRfQklOOiBCaW5hcnkgZGF0YSBmb3JtYXQKKyAgKiAgICAgICAgICAgICBAYXJnIFJUQ19GT1JNQVRfQkNEOiBCQ0QgZGF0YSBmb3JtYXQKKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfR2V0QWxhcm0oUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19BbGFybVR5cGVEZWYgKnNBbGFybSwgdWludDMyX3QgQWxhcm0sIHVpbnQzMl90IEZvcm1hdCkKK3sKKyAgdWludDMyX3QgdG1wcmVnID0gMFU7CisgIHVpbnQzMl90IHN1YnNlY29uZHRtcHJlZyA9IDBVOworCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19SVENfRk9STUFUKEZvcm1hdCkpOworICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMQVJNKEFsYXJtKSk7CisKKyAgaWYgKEFsYXJtID09IFJUQ19BTEFSTV9BKQorICB7CisgICAgc0FsYXJtLT5BbGFybSA9IFJUQ19BTEFSTV9BOworCisgICAgdG1wcmVnID0gKHVpbnQzMl90KShocnRjLT5JbnN0YW5jZS0+QUxSTUFSKTsKKyAgICBzdWJzZWNvbmR0bXByZWcgPSAodWludDMyX3QpKChocnRjLT5JbnN0YW5jZS0+QUxSTUFTU1IpICYgUlRDX0FMUk1BU1NSX1NTKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBzQWxhcm0tPkFsYXJtID0gUlRDX0FMQVJNX0I7CisKKyAgICB0bXByZWcgPSAodWludDMyX3QpKGhydGMtPkluc3RhbmNlLT5BTFJNQlIpOworICAgIHN1YnNlY29uZHRtcHJlZyA9ICh1aW50MzJfdCkoKGhydGMtPkluc3RhbmNlLT5BTFJNQlNTUikgJiBSVENfQUxSTUJTU1JfU1MpOworICB9CisKKyAgLyogRmlsbCB0aGUgc3RydWN0dXJlIHdpdGggdGhlIHJlYWQgcGFyYW1ldGVycyAqLworICBzQWxhcm0tPkFsYXJtVGltZS5Ib3VycyAgICAgID0gKHVpbnQ4X3QpICgodG1wcmVnICYgKFJUQ19BTFJNQVJfSFQgIHwgUlRDX0FMUk1BUl9IVSkpICA+PiBSVENfQUxSTUFSX0hVX1Bvcyk7CisgIHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMgICAgPSAodWludDhfdCkgKCh0bXByZWcgJiAoUlRDX0FMUk1BUl9NTlQgfCBSVENfQUxSTUFSX01OVSkpID4+IFJUQ19BTFJNQVJfTU5VX1Bvcyk7CisgIHNBbGFybS0+QWxhcm1UaW1lLlNlY29uZHMgICAgPSAodWludDhfdCkgKCB0bXByZWcgJiAoUlRDX0FMUk1BUl9TVCAgfCBSVENfQUxSTUFSX1NVKSk7CisgIHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQgPSAodWludDhfdCkgKCh0bXByZWcgJiBSVENfQUxSTUFSX1BNKSAgICAgICAgICAgICAgICAgICAgID4+IFJUQ19UUl9QTV9Qb3MpOworICBzQWxhcm0tPkFsYXJtVGltZS5TdWJTZWNvbmRzID0gKHVpbnQzMl90KSBzdWJzZWNvbmR0bXByZWc7CisgIHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheSAgICAgPSAodWludDhfdCkgKCh0bXByZWcgJiAoUlRDX0FMUk1BUl9EVCAgfCBSVENfQUxSTUFSX0RVKSkgID4+IFJUQ19BTFJNQVJfRFVfUG9zKTsKKyAgc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5U2VsICA9ICh1aW50MzJfdCkgKHRtcHJlZyAmIFJUQ19BTFJNQVJfV0RTRUwpOworICBzQWxhcm0tPkFsYXJtTWFzayAgICAgICAgICAgID0gKHVpbnQzMl90KSAodG1wcmVnICYgUlRDX0FMQVJNTUFTS19BTEwpOworCisgIGlmIChGb3JtYXQgPT0gUlRDX0ZPUk1BVF9CSU4pCisgIHsKKyAgICBzQWxhcm0tPkFsYXJtVGltZS5Ib3VycyAgID0gUlRDX0JjZDJUb0J5dGUoc0FsYXJtLT5BbGFybVRpbWUuSG91cnMpOworICAgIHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMgPSBSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtVGltZS5NaW51dGVzKTsKKyAgICBzQWxhcm0tPkFsYXJtVGltZS5TZWNvbmRzID0gUlRDX0JjZDJUb0J5dGUoc0FsYXJtLT5BbGFybVRpbWUuU2Vjb25kcyk7CisgICAgc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5ICA9IFJUQ19CY2QyVG9CeXRlKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheSk7CisgIH0KKworICByZXR1cm4gSEFMX09LOworfQorCisvKioKKyAgKiBAYnJpZWYgIEhhbmRsZXMgQWxhcm0gaW50ZXJydXB0IHJlcXVlc3QuCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCisgICogQHJldHZhbCBOb25lCisgICovCit2b2lkIEhBTF9SVENfQWxhcm1JUlFIYW5kbGVyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQoreworICAvKiBDbGVhciB0aGUgRVhUSSdzIGxpbmUgRmxhZyBmb3IgUlRDIEFsYXJtICovCisgIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0NMRUFSX0ZMQUcoKTsKKworICAvKiBHZXQgdGhlIEFsYXJtIEEgaW50ZXJydXB0IHNvdXJjZSBlbmFibGUgc3RhdHVzICovCisgIGlmIChfX0hBTF9SVENfQUxBUk1fR0VUX0lUX1NPVVJDRShocnRjLCBSVENfSVRfQUxSQSkgIT0gMFUpCisgIHsKKyAgICAvKiBHZXQgdGhlIHBlbmRpbmcgc3RhdHVzIG9mIHRoZSBBbGFybSBBIEludGVycnVwdCAqLworICAgIGlmIChfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQUYpICE9IDBVKQorICAgIHsKKyAgICAgIC8qIENsZWFyIHRoZSBBbGFybSBBIGludGVycnVwdCBwZW5kaW5nIGJpdCAqLworICAgICAgX19IQUxfUlRDX0FMQVJNX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQUYpOworCisgICAgICAvKiBBbGFybSBBIGNhbGxiYWNrICovCisjaWYgKFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorICAgICAgaHJ0Yy0+QWxhcm1BRXZlbnRDYWxsYmFjayhocnRjKTsKKyNlbHNlCisgICAgICBIQUxfUlRDX0FsYXJtQUV2ZW50Q2FsbGJhY2soaHJ0Yyk7CisjZW5kaWYgLyogVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgICAgfQorICB9CisKKyAgLyogR2V0IHRoZSBBbGFybSBCIGludGVycnVwdCBzb3VyY2UgZW5hYmxlIHN0YXR1cyAqLworICBpZiAoX19IQUxfUlRDX0FMQVJNX0dFVF9JVF9TT1VSQ0UoaHJ0YywgUlRDX0lUX0FMUkIpICE9IDBVKQorICB7CisgICAgLyogR2V0IHRoZSBwZW5kaW5nIHN0YXR1cyBvZiB0aGUgQWxhcm0gQiBJbnRlcnJ1cHQgKi8KKyAgICBpZiAoX19IQUxfUlRDX0FMQVJNX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkJGKSAhPSAwVSkKKyAgICB7CisgICAgICAvKiBDbGVhciB0aGUgQWxhcm0gQiBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgKi8KKyAgICAgIF9fSEFMX1JUQ19BTEFSTV9DTEVBUl9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkJGKTsKKworICAgICAgLyogQWxhcm0gQiBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyAgICAgIGhydGMtPkFsYXJtQkV2ZW50Q2FsbGJhY2soaHJ0Yyk7CisjZWxzZQorICAgICAgSEFMX1JUQ0V4X0FsYXJtQkV2ZW50Q2FsbGJhY2soaHJ0Yyk7CisjZW5kaWYgLyogVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgICAgfQorICB9CisKKyAgLyogQ2hhbmdlIFJUQyBzdGF0ZSAqLworICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQWxhcm0gQSBjYWxsYmFjay4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fd2VhayB2b2lkIEhBTF9SVENfQWxhcm1BRXZlbnRDYWxsYmFjayhSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKK3sKKyAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLworICBVTlVTRUQoaHJ0Yyk7CisKKyAgLyogTk9URTogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCisgICAgICAgICAgIHRoZSBIQUxfUlRDX0FsYXJtQUV2ZW50Q2FsbGJhY2sgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQorICAgKi8KK30KKworLyoqCisgICogQGJyaWVmICBIYW5kbGVzIEFsYXJtIEEgUG9sbGluZyByZXF1ZXN0LgorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgorICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX1BvbGxGb3JBbGFybUFFdmVudChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgVGltZW91dCkKK3sKKyAgdWludDMyX3QgdGlja3N0YXJ0ID0gMFU7CisKKyAgLyogR2V0IHRpY2sgKi8KKyAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKworICAvKiBXYWl0IHRpbGwgUlRDIEFMUkFGIGZsYWcgaXMgc2V0IGFuZCBpZiB0aW1lb3V0IGlzIHJlYWNoZWQgZXhpdCAqLworICB3aGlsZSAoX19IQUxfUlRDX0FMQVJNX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkFGKSA9PSAwVSkKKyAgeworICAgIGlmIChUaW1lb3V0ICE9IEhBTF9NQVhfREVMQVkpCisgICAgeworICAgICAgaWYgKChUaW1lb3V0ID09IDBVKSB8fCAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gVGltZW91dCkpCisgICAgICB7CisgICAgICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9USU1FT1VUOworICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyogQ2xlYXIgdGhlIEFsYXJtIGZsYWcgKi8KKyAgX19IQUxfUlRDX0FMQVJNX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQUYpOworCisgIC8qIENoYW5nZSBSVEMgc3RhdGUgKi8KKyAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOworCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgUlRDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucworICAqIEBicmllZiAgICBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCisgICoKK0B2ZXJiYXRpbQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgICAgICAgICAgICAgICMjIyMjIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMgIyMjIyMKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgWy4uXQorICAgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8KKyAgICAgICgrKSBXYWl0IGZvciBSVEMgVGltZSBhbmQgRGF0ZSBTeW5jaHJvbml6YXRpb24KKyAgICAgICgrKSBNYW5hZ2UgUlRDIFN1bW1lciBvciBXaW50ZXIgdGltZSBjaGFuZ2UKKworQGVuZHZlcmJhdGltCisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmICBXYWl0cyB1bnRpbCB0aGUgUlRDIFRpbWUgYW5kIERhdGUgcmVnaXN0ZXJzIChSVENfVFIgYW5kIFJUQ19EUikgYXJlCisgICogICAgICAgICBzeW5jaHJvbml6ZWQgd2l0aCBSVEMgQVBCIGNsb2NrLgorICAqIEBub3RlICAgVGhlIFJUQyBSZXN5bmNocm9uaXphdGlvbiBtb2RlIGlzIHdyaXRlIHByb3RlY3RlZCwgdXNlIHRoZQorICAqICAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKiBAbm90ZSAgIFRvIHJlYWQgdGhlIGNhbGVuZGFyIHRocm91Z2ggdGhlIHNoYWRvdyByZWdpc3RlcnMgYWZ0ZXIgQ2FsZW5kYXIKKyAgKiAgICAgICAgIGluaXRpYWxpemF0aW9uLCBjYWxlbmRhciB1cGRhdGUgb3IgYWZ0ZXIgd2FrZXVwIGZyb20gbG93IHBvd2VyIG1vZGVzCisgICogICAgICAgICB0aGUgc29mdHdhcmUgbXVzdCBmaXJzdCBjbGVhciB0aGUgUlNGIGZsYWcuCisgICogICAgICAgICBUaGUgc29mdHdhcmUgbXVzdCB0aGVuIHdhaXQgdW50aWwgaXQgaXMgc2V0IGFnYWluIGJlZm9yZSByZWFkaW5nCisgICogICAgICAgICB0aGUgY2FsZW5kYXIsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGNhbGVuZGFyIHJlZ2lzdGVycyBoYXZlIGJlZW4KKyAgKiAgICAgICAgIGNvcnJlY3RseSBjb3BpZWQgaW50byB0aGUgUlRDX1RSIGFuZCBSVENfRFIgc2hhZG93IHJlZ2lzdGVycy4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfV2FpdEZvclN5bmNocm8oUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCit7CisgIHVpbnQzMl90IHRpY2tzdGFydCA9IDBVOworCisgIC8qIENsZWFyIFJTRiBmbGFnLCBrZWVwIHJlc2VydmVkIGJpdHMgYXQgcmVzZXQgdmFsdWVzIChzZXR0aW5nIG90aGVyIGZsYWdzIGhhcyBubyBlZmZlY3QpICovCisgIGhydGMtPkluc3RhbmNlLT5JU1IgPSAoKHVpbnQzMl90KShSVENfUlNGX01BU0sgJiBSVENfSVNSX1JFU0VSVkVEX01BU0spKTsKKworICAvKiBHZXQgdGljayAqLworICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCisgIC8qIFdhaXQgdGhlIHJlZ2lzdGVycyB0byBiZSBzeW5jaHJvbmlzZWQgKi8KKyAgd2hpbGUgKChocnRjLT5JbnN0YW5jZS0+SVNSICYgUlRDX0lTUl9SU0YpID09IDBVKQorICB7CisgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJUQ19USU1FT1VUX1ZBTFVFKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICB9CisgIH0KKworICByZXR1cm4gSEFMX09LOworfQorCisvKioKKyAgKiBAYnJpZWYgIERheWxpZ2h0IFNhdmluZyBUaW1lLCBhZGRzIG9uZSBob3VyIHRvIHRoZSBjYWxlbmRhciBpbiBvbmUKICAgKiAgICAgICAgIHNpbmdsZSBvcGVyYXRpb24gd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmUuCiAgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCkBAIC0xMTUwLDY4OSArMTc3Myw5IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBhZGR0b2dyb3VwIFJUQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzCi0gKiAgQGJyaWVmICAgUlRDIEFsYXJtIGZ1bmN0aW9ucwotICoKLUB2ZXJiYXRpbQotID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgIyMjIyMgUlRDIEFsYXJtIGZ1bmN0aW9ucyAjIyMjIwotID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotIFsuLl0gVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBjb25maWd1cmUgQWxhcm0gZmVhdHVyZQotCi1AZW5kdmVyYmF0aW0KLSAgKiBAewotICAqLwotLyoqCi0gICogQGJyaWVmICBTZXQgdGhlIHNwZWNpZmllZCBSVEMgQWxhcm0uCi0gICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKLSAgKiBAcGFyYW0gIHNBbGFybSBQb2ludGVyIHRvIEFsYXJtIHN0cnVjdHVyZQotICAqIEBwYXJhbSAgRm9ybWF0IFNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIHRoZSBlbnRlcmVkIHBhcmFtZXRlcnMuCi0gICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgICBAYXJnIFJUQ19GT1JNQVRfQklOOiBCaW5hcnkgZGF0YSBmb3JtYXQKLSAgKiAgICAgICAgICAgICBAYXJnIFJUQ19GT1JNQVRfQkNEOiBCQ0QgZGF0YSBmb3JtYXQKLSAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKLSAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfU2V0QWxhcm0oUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19BbGFybVR5cGVEZWYgKnNBbGFybSwgdWludDMyX3QgRm9ybWF0KQotewotICB1aW50MzJfdCB0aWNrc3RhcnQgPSAwVTsKLSAgdWludDMyX3QgdG1wcmVnID0gMFUsIHN1YnNlY29uZHRtcHJlZyA9IDBVOwotCi0gIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCi0gIGFzc2VydF9wYXJhbShJU19SVENfRk9STUFUKEZvcm1hdCkpOwotICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMQVJNKHNBbGFybS0+QWxhcm0pKTsKLSAgYXNzZXJ0X3BhcmFtKElTX1JUQ19BTEFSTV9NQVNLKHNBbGFybS0+QWxhcm1NYXNrKSk7Ci0gIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fREFURV9XRUVLREFZX1NFTChzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXlTZWwpKTsKLSAgYXNzZXJ0X3BhcmFtKElTX1JUQ19BTEFSTV9TVUJfU0VDT05EX1ZBTFVFKHNBbGFybS0+QWxhcm1UaW1lLlN1YlNlY29uZHMpKTsKLSAgYXNzZXJ0X3BhcmFtKElTX1JUQ19BTEFSTV9TVUJfU0VDT05EX01BU0soc0FsYXJtLT5BbGFybVN1YlNlY29uZE1hc2spKTsKLQotICAvKiBQcm9jZXNzIExvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhydGMpOwotCi0gIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9CVVNZOwotCi0gIGlmIChGb3JtYXQgPT0gUlRDX0ZPUk1BVF9CSU4pCi0gIHsKLSAgICBpZiAoKGhydGMtPkluc3RhbmNlLT5DUiAmIFJUQ19DUl9GTVQpICE9ICh1aW50MzJfdClSRVNFVCkKLSAgICB7Ci0gICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0hPVVIxMihzQWxhcm0tPkFsYXJtVGltZS5Ib3VycykpOwotICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSRk9STUFUMTIoc0FsYXJtLT5BbGFybVRpbWUuVGltZUZvcm1hdCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc0FsYXJtLT5BbGFybVRpbWUuVGltZUZvcm1hdCA9IDB4MDBVOwotICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSMjQoc0FsYXJtLT5BbGFybVRpbWUuSG91cnMpKTsKLSAgICB9Ci0gICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19NSU5VVEVTKHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMpKTsKLSAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX1NFQ09ORFMoc0FsYXJtLT5BbGFybVRpbWUuU2Vjb25kcykpOwotCi0gICAgaWYgKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheVNlbCA9PSBSVENfQUxBUk1EQVRFV0VFS0RBWVNFTF9EQVRFKQotICAgIHsKLSAgICAgIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fREFURV9XRUVLREFZX0RBVEUoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5KSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMQVJNX0RBVEVfV0VFS0RBWV9XRUVLREFZKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheSkpOwotICAgIH0KLQotICAgIHRtcHJlZyA9ICgoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzKSA8PCAxNlUpIHwgXAotICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMpIDw8IDhVKSB8IFwKLSAgICAgICAgICAgICAgKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzQWxhcm0tPkFsYXJtVGltZS5TZWNvbmRzKSkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3QpKHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQpIDw8IDE2VSkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5KSA8PCAyNFUpIHwgXAotICAgICAgICAgICAgICAoKHVpbnQzMl90KXNBbGFybS0+QWxhcm1EYXRlV2Vla0RheVNlbCkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3Qpc0FsYXJtLT5BbGFybU1hc2spKTsKLSAgfQotICBlbHNlCi0gIHsKLSAgICBpZiAoKGhydGMtPkluc3RhbmNlLT5DUiAmIFJUQ19DUl9GTVQpICE9ICh1aW50MzJfdClSRVNFVCkKLSAgICB7Ci0gICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0hPVVIxMihSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtVGltZS5Ib3VycykpKTsKLSAgICAgIGFzc2VydF9wYXJhbShJU19SVENfSE9VUkZPUk1BVDEyKHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQgPSAweDAwVTsKLSAgICAgIGFzc2VydF9wYXJhbShJU19SVENfSE9VUjI0KFJUQ19CY2QyVG9CeXRlKHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzKSkpOwotICAgIH0KLQotICAgIGFzc2VydF9wYXJhbShJU19SVENfTUlOVVRFUyhSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtVGltZS5NaW51dGVzKSkpOwotICAgIGFzc2VydF9wYXJhbShJU19SVENfU0VDT05EUyhSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtVGltZS5TZWNvbmRzKSkpOwotCi0gICAgaWYgKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheVNlbCA9PSBSVENfQUxBUk1EQVRFV0VFS0RBWVNFTF9EQVRFKQotICAgIHsKLSAgICAgIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fREFURV9XRUVLREFZX0RBVEUoUlRDX0JjZDJUb0J5dGUoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5KSkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19BTEFSTV9EQVRFX1dFRUtEQVlfV0VFS0RBWShSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXkpKSk7Ci0gICAgfQotCi0gICAgdG1wcmVnID0gKCgodWludDMyX3QpKHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzKSA8PCAxNlUpIHwgXAotICAgICAgICAgICAgICAoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5NaW51dGVzKSA8PCA4VSkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3QpIHNBbGFybS0+QWxhcm1UaW1lLlNlY29uZHMpIHwgXAotICAgICAgICAgICAgICAoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5UaW1lRm9ybWF0KSA8PCAxNlUpIHwgXAotICAgICAgICAgICAgICAoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXkpIDw8IDI0VSkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3Qpc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5U2VsKSB8IFwKLSAgICAgICAgICAgICAgKCh1aW50MzJfdClzQWxhcm0tPkFsYXJtTWFzaykpOwotICB9Ci0KLSAgLyogQ29uZmlndXJlIHRoZSBBbGFybSBBIG9yIEFsYXJtIEIgU3ViIFNlY29uZCByZWdpc3RlcnMgKi8KLSAgc3Vic2Vjb25kdG1wcmVnID0gKHVpbnQzMl90KSgodWludDMyX3QpKHNBbGFybS0+QWxhcm1UaW1lLlN1YlNlY29uZHMpIHwgKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtU3ViU2Vjb25kTWFzaykpOwotCi0gIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwotCi0gIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gcmVnaXN0ZXIgKi8KLSAgaWYgKHNBbGFybS0+QWxhcm0gPT0gUlRDX0FMQVJNX0EpCi0gIHsKLSAgICAvKiBEaXNhYmxlIHRoZSBBbGFybSBBIGludGVycnVwdCAqLwotICAgIF9fSEFMX1JUQ19BTEFSTUFfRElTQUJMRShocnRjKTsKLQotICAgIC8qIEluIGNhc2Ugb2YgaW50ZXJydXB0IG1vZGUgaXMgdXNlZCwgdGhlIGludGVycnVwdCBzb3VyY2UgbXVzdCBkaXNhYmxlZCAqLwotICAgIF9fSEFMX1JUQ19BTEFSTV9ESVNBQkxFX0lUKGhydGMsIFJUQ19JVF9BTFJBKTsKLQotICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7Ci0gICAgLyogV2FpdCB0aWxsIFJUQyBBTFJBV0YgZmxhZyBpcyBzZXQgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLwotICAgIHdoaWxlIChfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQVdGKSA9PSBSRVNFVCkKLSAgICB7Ci0gICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCi0gICAgICB7Ci0gICAgICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwotICAgICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfVElNRU9VVDsKLQotICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPkFMUk1BUiA9ICh1aW50MzJfdCl0bXByZWc7Ci0gICAgLyogQ29uZmlndXJlIHRoZSBBbGFybSBBIFN1YiBTZWNvbmQgcmVnaXN0ZXIgKi8KLSAgICBocnRjLT5JbnN0YW5jZS0+QUxSTUFTU1IgPSBzdWJzZWNvbmR0bXByZWc7Ci0gICAgLyogQ29uZmlndXJlIHRoZSBBbGFybSBzdGF0ZTogRW5hYmxlIEFsYXJtICovCi0gICAgX19IQUxfUlRDX0FMQVJNQV9FTkFCTEUoaHJ0Yyk7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgLyogRGlzYWJsZSB0aGUgQWxhcm0gQiBpbnRlcnJ1cHQgKi8KLSAgICBfX0hBTF9SVENfQUxBUk1CX0RJU0FCTEUoaHJ0Yyk7Ci0KLSAgICAvKiBJbiBjYXNlIG9mIGludGVycnVwdCBtb2RlIGlzIHVzZWQsIHRoZSBpbnRlcnJ1cHQgc291cmNlIG11c3QgZGlzYWJsZWQgKi8KLSAgICBfX0hBTF9SVENfQUxBUk1fRElTQUJMRV9JVChocnRjLCBSVENfSVRfQUxSQik7Ci0KLSAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwotICAgIC8qIFdhaXQgdGlsbCBSVEMgQUxSQldGIGZsYWcgaXMgc2V0IGFuZCBpZiBUaW1lIG91dCBpcyByZWFjaGVkIGV4aXQgKi8KLSAgICB3aGlsZSAoX19IQUxfUlRDX0FMQVJNX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkJXRikgPT0gUkVTRVQpCi0gICAgewotICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJUQ19USU1FT1VUX1ZBTFVFKQotICAgICAgewotICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1RJTUVPVVQ7Ci0KLSAgICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgICAgICBfX0hBTF9VTkxPQ0soaHJ0Yyk7Ci0KLSAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwotICAgICAgfQotICAgIH0KLQotICAgIGhydGMtPkluc3RhbmNlLT5BTFJNQlIgPSAodWludDMyX3QpdG1wcmVnOwotICAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gQiBTdWIgU2Vjb25kIHJlZ2lzdGVyICovCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPkFMUk1CU1NSID0gc3Vic2Vjb25kdG1wcmVnOwotICAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gc3RhdGU6IEVuYWJsZSBBbGFybSAqLwotICAgIF9fSEFMX1JUQ19BTEFSTUJfRU5BQkxFKGhydGMpOwotICB9Ci0KLSAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwotCi0gIC8qIENoYW5nZSBSVEMgc3RhdGUgKi8KLSAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwotCi0gIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gIHJldHVybiBIQUxfT0s7Ci19Ci0KLS8qKgotICAqIEBicmllZiAgU2V0IHRoZSBzcGVjaWZpZWQgUlRDIEFsYXJtIHdpdGggSW50ZXJydXB0LgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCi0gICogQHBhcmFtICBzQWxhcm0gUG9pbnRlciB0byBBbGFybSBzdHJ1Y3R1cmUKLSAgKiBAcGFyYW0gIEZvcm1hdCBTcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiB0aGUgZW50ZXJlZCBwYXJhbWV0ZXJzLgotICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgICAgQGFyZyBSVENfRk9STUFUX0JJTjogQmluYXJ5IGRhdGEgZm9ybWF0Ci0gICogICAgICAgICAgICAgQGFyZyBSVENfRk9STUFUX0JDRDogQkNEIGRhdGEgZm9ybWF0Ci0gICogQG5vdGUgICBUaGUgQWxhcm0gcmVnaXN0ZXIgY2FuIG9ubHkgYmUgd3JpdHRlbiB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIEFsYXJtCi0gICogICAgICAgICBpcyBkaXNhYmxlZCAoVXNlIHRoZSBIQUxfUlRDX0RlYWN0aXZhdGVBbGFybSgpKS4KLSAgKiBAbm90ZSAgIFRoZSBIQUxfUlRDX1NldFRpbWUoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgZW5hYmxpbmcgdGhlIEFsYXJtIGZlYXR1cmUuCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCi0gICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX1NldEFsYXJtX0lUKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCBSVENfQWxhcm1UeXBlRGVmICpzQWxhcm0sIHVpbnQzMl90IEZvcm1hdCkKLXsKLSAgdWludDMyX3QgdGlja3N0YXJ0ID0gMFU7Ci0gIHVpbnQzMl90IHRtcHJlZyA9IDBVLCBzdWJzZWNvbmR0bXByZWcgPSAwVTsKLQotICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwotICBhc3NlcnRfcGFyYW0oSVNfUlRDX0ZPUk1BVChGb3JtYXQpKTsKLSAgYXNzZXJ0X3BhcmFtKElTX1JUQ19BTEFSTShzQWxhcm0tPkFsYXJtKSk7Ci0gIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fTUFTSyhzQWxhcm0tPkFsYXJtTWFzaykpOwotICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMQVJNX0RBVEVfV0VFS0RBWV9TRUwoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5U2VsKSk7Ci0gIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fU1VCX1NFQ09ORF9WQUxVRShzQWxhcm0tPkFsYXJtVGltZS5TdWJTZWNvbmRzKSk7Ci0gIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fU1VCX1NFQ09ORF9NQVNLKHNBbGFybS0+QWxhcm1TdWJTZWNvbmRNYXNrKSk7Ci0KLSAgLyogUHJvY2VzcyBMb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhocnRjKTsKLQotICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfQlVTWTsKLQotICBpZiAoRm9ybWF0ID09IFJUQ19GT1JNQVRfQklOKQotICB7Ci0gICAgaWYgKChocnRjLT5JbnN0YW5jZS0+Q1IgJiBSVENfQ1JfRk1UKSAhPSAodWludDMyX3QpUkVTRVQpCi0gICAgewotICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSMTIoc0FsYXJtLT5BbGFybVRpbWUuSG91cnMpKTsKLSAgICAgIGFzc2VydF9wYXJhbShJU19SVENfSE9VUkZPUk1BVDEyKHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQgPSAweDAwVTsKLSAgICAgIGFzc2VydF9wYXJhbShJU19SVENfSE9VUjI0KHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzKSk7Ci0gICAgfQotICAgIGFzc2VydF9wYXJhbShJU19SVENfTUlOVVRFUyhzQWxhcm0tPkFsYXJtVGltZS5NaW51dGVzKSk7Ci0gICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19TRUNPTkRTKHNBbGFybS0+QWxhcm1UaW1lLlNlY29uZHMpKTsKLQotICAgIGlmIChzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXlTZWwgPT0gUlRDX0FMQVJNREFURVdFRUtEQVlTRUxfREFURSkKLSAgICB7Ci0gICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMQVJNX0RBVEVfV0VFS0RBWV9EQVRFKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheSkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19BTEFSTV9EQVRFX1dFRUtEQVlfV0VFS0RBWShzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXkpKTsKLSAgICB9Ci0gICAgdG1wcmVnID0gKCgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0FsYXJtLT5BbGFybVRpbWUuSG91cnMpIDw8IDE2VSkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0FsYXJtLT5BbGFybVRpbWUuTWludXRlcykgPDwgOFUpIHwgXAotICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNBbGFybS0+QWxhcm1UaW1lLlNlY29uZHMpKSB8IFwKLSAgICAgICAgICAgICAgKCh1aW50MzJfdCkoc0FsYXJtLT5BbGFybVRpbWUuVGltZUZvcm1hdCkgPDwgMTZVKSB8IFwKLSAgICAgICAgICAgICAgKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXkpIDw8IDI0VSkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3Qpc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5U2VsKSB8IFwKLSAgICAgICAgICAgICAgKCh1aW50MzJfdClzQWxhcm0tPkFsYXJtTWFzaykpOwotICB9Ci0gIGVsc2UKLSAgewotICAgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0ZNVCkgIT0gKHVpbnQzMl90KVJFU0VUKQotICAgIHsKLSAgICAgIGFzc2VydF9wYXJhbShJU19SVENfSE9VUjEyKFJUQ19CY2QyVG9CeXRlKHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzKSkpOwotICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSRk9STUFUMTIoc0FsYXJtLT5BbGFybVRpbWUuVGltZUZvcm1hdCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc0FsYXJtLT5BbGFybVRpbWUuVGltZUZvcm1hdCA9IDB4MDBVOwotICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSMjQoUlRDX0JjZDJUb0J5dGUoc0FsYXJtLT5BbGFybVRpbWUuSG91cnMpKSk7Ci0gICAgfQotCi0gICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19NSU5VVEVTKFJUQ19CY2QyVG9CeXRlKHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMpKSk7Ci0gICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19TRUNPTkRTKFJUQ19CY2QyVG9CeXRlKHNBbGFybS0+QWxhcm1UaW1lLlNlY29uZHMpKSk7Ci0KLSAgICBpZiAoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5U2VsID09IFJUQ19BTEFSTURBVEVXRUVLREFZU0VMX0RBVEUpCi0gICAgewotICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19BTEFSTV9EQVRFX1dFRUtEQVlfREFURShSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXkpKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMQVJNX0RBVEVfV0VFS0RBWV9XRUVLREFZKFJUQ19CY2QyVG9CeXRlKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheSkpKTsKLSAgICB9Ci0gICAgdG1wcmVnID0gKCgodWludDMyX3QpKHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzKSA8PCAxNlUpIHwgXAotICAgICAgICAgICAgICAoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5NaW51dGVzKSA8PCA4VSkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3QpIHNBbGFybS0+QWxhcm1UaW1lLlNlY29uZHMpIHwgXAotICAgICAgICAgICAgICAoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5UaW1lRm9ybWF0KSA8PCAxNlUpIHwgXAotICAgICAgICAgICAgICAoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXkpIDw8IDI0VSkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3Qpc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5U2VsKSB8IFwKLSAgICAgICAgICAgICAgKCh1aW50MzJfdClzQWxhcm0tPkFsYXJtTWFzaykpOwotICB9Ci0gIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gQSBvciBBbGFybSBCIFN1YiBTZWNvbmQgcmVnaXN0ZXJzICovCi0gIHN1YnNlY29uZHRtcHJlZyA9ICh1aW50MzJfdCkoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5TdWJTZWNvbmRzKSB8ICh1aW50MzJfdCkoc0FsYXJtLT5BbGFybVN1YlNlY29uZE1hc2spKTsKLQotICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKLQotICAvKiBDb25maWd1cmUgdGhlIEFsYXJtIHJlZ2lzdGVyICovCi0gIGlmIChzQWxhcm0tPkFsYXJtID09IFJUQ19BTEFSTV9BKQotICB7Ci0gICAgLyogRGlzYWJsZSB0aGUgQWxhcm0gQSBpbnRlcnJ1cHQgKi8KLSAgICBfX0hBTF9SVENfQUxBUk1BX0RJU0FCTEUoaHJ0Yyk7Ci0KLSAgICAvKiBDbGVhciBmbGFnIGFsYXJtIEEgKi8KLSAgICBfX0hBTF9SVENfQUxBUk1fQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19BTFJBRik7Ci0KLSAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwotICAgIC8qIFdhaXQgdGlsbCBSVEMgQUxSQVdGIGZsYWcgaXMgc2V0IGFuZCBpZiBUaW1lIG91dCBpcyByZWFjaGVkIGV4aXQgKi8KLSAgICB3aGlsZSAoX19IQUxfUlRDX0FMQVJNX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkFXRikgPT0gUkVTRVQpCi0gICAgewotICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJUQ19USU1FT1VUX1ZBTFVFKQotICAgICAgewotICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1RJTUVPVVQ7Ci0KLSAgICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgICAgICBfX0hBTF9VTkxPQ0soaHJ0Yyk7Ci0KLSAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwotICAgICAgfQotICAgIH0KLQotICAgIGhydGMtPkluc3RhbmNlLT5BTFJNQVIgPSAodWludDMyX3QpdG1wcmVnOwotICAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gQSBTdWIgU2Vjb25kIHJlZ2lzdGVyICovCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPkFMUk1BU1NSID0gc3Vic2Vjb25kdG1wcmVnOwotICAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gc3RhdGU6IEVuYWJsZSBBbGFybSAqLwotICAgIF9fSEFMX1JUQ19BTEFSTUFfRU5BQkxFKGhydGMpOwotICAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gaW50ZXJydXB0ICovCi0gICAgX19IQUxfUlRDX0FMQVJNX0VOQUJMRV9JVChocnRjLCBSVENfSVRfQUxSQSk7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgLyogRGlzYWJsZSB0aGUgQWxhcm0gQiBpbnRlcnJ1cHQgKi8KLSAgICBfX0hBTF9SVENfQUxBUk1CX0RJU0FCTEUoaHJ0Yyk7Ci0KLSAgICAvKiBDbGVhciBmbGFnIGFsYXJtIEIgKi8KLSAgICBfX0hBTF9SVENfQUxBUk1fQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19BTFJCRik7Ci0KLSAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwotICAgIC8qIFdhaXQgdGlsbCBSVEMgQUxSQldGIGZsYWcgaXMgc2V0IGFuZCBpZiBUaW1lIG91dCBpcyByZWFjaGVkIGV4aXQgKi8KLSAgICB3aGlsZSAoX19IQUxfUlRDX0FMQVJNX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkJXRikgPT0gUkVTRVQpCi0gICAgewotICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJUQ19USU1FT1VUX1ZBTFVFKQotICAgICAgewotICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1RJTUVPVVQ7Ci0KLSAgICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgICAgICBfX0hBTF9VTkxPQ0soaHJ0Yyk7Ci0KLSAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwotICAgICAgfQotICAgIH0KLQotICAgIGhydGMtPkluc3RhbmNlLT5BTFJNQlIgPSAodWludDMyX3QpdG1wcmVnOwotICAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gQiBTdWIgU2Vjb25kIHJlZ2lzdGVyICovCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPkFMUk1CU1NSID0gc3Vic2Vjb25kdG1wcmVnOwotICAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gc3RhdGU6IEVuYWJsZSBBbGFybSAqLwotICAgIF9fSEFMX1JUQ19BTEFSTUJfRU5BQkxFKGhydGMpOwotICAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gaW50ZXJydXB0ICovCi0gICAgX19IQUxfUlRDX0FMQVJNX0VOQUJMRV9JVChocnRjLCBSVENfSVRfQUxSQik7Ci0gIH0KLQotICAvKiBSVEMgQWxhcm0gSW50ZXJydXB0IENvbmZpZ3VyYXRpb246IEVYVEkgY29uZmlndXJhdGlvbiAqLwotICBfX0hBTF9SVENfQUxBUk1fRVhUSV9FTkFCTEVfSVQoKTsKLQotICBfX0hBTF9SVENfQUxBUk1fRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKTsKLQotICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwotCi0gIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gIHJldHVybiBIQUxfT0s7Ci19Ci0KLS8qKgotICAqIEBicmllZiAgRGVhY3RpdmF0ZSB0aGUgc3BlY2lmaWVkIFJUQyBBbGFybS4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQotICAqIEBwYXJhbSAgQWxhcm0gU3BlY2lmaWVzIHRoZSBBbGFybS4KLSAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICAgQGFyZyBSVENfQUxBUk1fQSA6ICBBbGFybUEKLSAgKiAgICAgICAgICAgIEBhcmcgUlRDX0FMQVJNX0IgOiAgQWxhcm1CCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCi0gICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX0RlYWN0aXZhdGVBbGFybShSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgQWxhcm0pCi17Ci0gIHVpbnQzMl90IHRpY2tzdGFydCA9IDBVOwotCi0gIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCi0gIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk0oQWxhcm0pKTsKLQotICAvKiBQcm9jZXNzIExvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhydGMpOwotCi0gIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9CVVNZOwotCi0gIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwotCi0gIGlmIChBbGFybSA9PSBSVENfQUxBUk1fQSkKLSAgewotICAgIC8qIEFsYXJtQSAqLwotICAgIF9fSEFMX1JUQ19BTEFSTUFfRElTQUJMRShocnRjKTsKLQotICAgIC8qIEluIGNhc2Ugb2YgaW50ZXJydXB0IG1vZGUgaXMgdXNlZCwgdGhlIGludGVycnVwdCBzb3VyY2UgbXVzdCBkaXNhYmxlZCAqLwotICAgIF9fSEFMX1JUQ19BTEFSTV9ESVNBQkxFX0lUKGhydGMsIFJUQ19JVF9BTFJBKTsKLQotICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7Ci0KLSAgICAvKiBXYWl0IHRpbGwgUlRDIEFMUnhXRiBmbGFnIGlzIHNldCBhbmQgaWYgVGltZSBvdXQgaXMgcmVhY2hlZCBleGl0ICovCi0gICAgd2hpbGUgKF9fSEFMX1JUQ19BTEFSTV9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19BTFJBV0YpID09IFJFU0VUKQotICAgIHsKLSAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBSVENfVElNRU9VVF9WQUxVRSkKLSAgICAgIHsKLSAgICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwotCi0gICAgICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9USU1FT1VUOwotCi0gICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICAgICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgLyogQWxhcm1CICovCi0gICAgX19IQUxfUlRDX0FMQVJNQl9ESVNBQkxFKGhydGMpOwotCi0gICAgLyogSW4gY2FzZSBvZiBpbnRlcnJ1cHQgbW9kZSBpcyB1c2VkLCB0aGUgaW50ZXJydXB0IHNvdXJjZSBtdXN0IGRpc2FibGVkICovCi0gICAgX19IQUxfUlRDX0FMQVJNX0RJU0FCTEVfSVQoaHJ0YywgUlRDX0lUX0FMUkIpOwotCi0gICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKLQotICAgIC8qIFdhaXQgdGlsbCBSVEMgQUxSeFdGIGZsYWcgaXMgc2V0IGFuZCBpZiBUaW1lIG91dCBpcyByZWFjaGVkIGV4aXQgKi8KLSAgICB3aGlsZSAoX19IQUxfUlRDX0FMQVJNX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkJXRikgPT0gUkVTRVQpCi0gICAgewotICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJUQ19USU1FT1VUX1ZBTFVFKQotICAgICAgewotICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1RJTUVPVVQ7Ci0KLSAgICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgICAgICBfX0hBTF9VTkxPQ0soaHJ0Yyk7Ci0KLSAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwotICAgICAgfQotICAgIH0KLSAgfQotICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwotCi0gIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gIHJldHVybiBIQUxfT0s7Ci19Ci0KLS8qKgotICAqIEBicmllZiAgR2V0IHRoZSBSVEMgQWxhcm0gdmFsdWUgYW5kIG1hc2tzLgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCi0gICogQHBhcmFtICBzQWxhcm0gUG9pbnRlciB0byBEYXRlIHN0cnVjdHVyZQotICAqIEBwYXJhbSAgQWxhcm0gU3BlY2lmaWVzIHRoZSBBbGFybS4KLSAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICAgIEBhcmcgUlRDX0FMQVJNX0E6IEFsYXJtQQotICAqICAgICAgICAgICAgIEBhcmcgUlRDX0FMQVJNX0I6IEFsYXJtQgotICAqIEBwYXJhbSAgRm9ybWF0IFNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIHRoZSBlbnRlcmVkIHBhcmFtZXRlcnMuCi0gICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgICBAYXJnIFJUQ19GT1JNQVRfQklOOiBCaW5hcnkgZGF0YSBmb3JtYXQKLSAgKiAgICAgICAgICAgICBAYXJnIFJUQ19GT1JNQVRfQkNEOiBCQ0QgZGF0YSBmb3JtYXQKLSAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKLSAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfR2V0QWxhcm0oUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19BbGFybVR5cGVEZWYgKnNBbGFybSwgdWludDMyX3QgQWxhcm0sIHVpbnQzMl90IEZvcm1hdCkKLXsKLSAgdWludDMyX3QgdG1wcmVnID0gMFUsIHN1YnNlY29uZHRtcHJlZyA9IDBVOwotCi0gIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCi0gIGFzc2VydF9wYXJhbShJU19SVENfRk9STUFUKEZvcm1hdCkpOwotICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMQVJNKEFsYXJtKSk7Ci0KLSAgaWYgKEFsYXJtID09IFJUQ19BTEFSTV9BKQotICB7Ci0gICAgLyogQWxhcm1BICovCi0gICAgc0FsYXJtLT5BbGFybSA9IFJUQ19BTEFSTV9BOwotCi0gICAgdG1wcmVnID0gKHVpbnQzMl90KShocnRjLT5JbnN0YW5jZS0+QUxSTUFSKTsKLSAgICBzdWJzZWNvbmR0bXByZWcgPSAodWludDMyX3QpKChocnRjLT5JbnN0YW5jZS0+QUxSTUFTU1IpICYgUlRDX0FMUk1BU1NSX1NTKTsKLSAgfQotICBlbHNlCi0gIHsKLSAgICBzQWxhcm0tPkFsYXJtID0gUlRDX0FMQVJNX0I7Ci0KLSAgICB0bXByZWcgPSAodWludDMyX3QpKGhydGMtPkluc3RhbmNlLT5BTFJNQlIpOwotICAgIHN1YnNlY29uZHRtcHJlZyA9ICh1aW50MzJfdCkoKGhydGMtPkluc3RhbmNlLT5BTFJNQlNTUikgJiBSVENfQUxSTUJTU1JfU1MpOwotICB9Ci0KLSAgLyogRmlsbCB0aGUgc3RydWN0dXJlIHdpdGggdGhlIHJlYWQgcGFyYW1ldGVycyAqLwotICBzQWxhcm0tPkFsYXJtVGltZS5Ib3VycyA9ICh1aW50MzJfdCkoKHRtcHJlZyAmIChSVENfQUxSTUFSX0hUIHwgUlRDX0FMUk1BUl9IVSkpID4+IDE2VSk7Ci0gIHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMgPSAodWludDMyX3QpKCh0bXByZWcgJiAoUlRDX0FMUk1BUl9NTlQgfCBSVENfQUxSTUFSX01OVSkpID4+IDhVKTsKLSAgc0FsYXJtLT5BbGFybVRpbWUuU2Vjb25kcyA9ICh1aW50MzJfdCkodG1wcmVnICYgKFJUQ19BTFJNQVJfU1QgfCBSVENfQUxSTUFSX1NVKSk7Ci0gIHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQgPSAodWludDMyX3QpKCh0bXByZWcgJiBSVENfQUxSTUFSX1BNKSA+PiAxNlUpOwotICBzQWxhcm0tPkFsYXJtVGltZS5TdWJTZWNvbmRzID0gKHVpbnQzMl90KSBzdWJzZWNvbmR0bXByZWc7Ci0gIHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheSA9ICh1aW50MzJfdCkoKHRtcHJlZyAmIChSVENfQUxSTUFSX0RUIHwgUlRDX0FMUk1BUl9EVSkpID4+IDI0VSk7Ci0gIHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheVNlbCA9ICh1aW50MzJfdCkodG1wcmVnICYgUlRDX0FMUk1BUl9XRFNFTCk7Ci0gIHNBbGFybS0+QWxhcm1NYXNrID0gKHVpbnQzMl90KSh0bXByZWcgJiBSVENfQUxBUk1NQVNLX0FMTCk7Ci0KLSAgaWYgKEZvcm1hdCA9PSBSVENfRk9STUFUX0JJTikKLSAgewotICAgIHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzID0gUlRDX0JjZDJUb0J5dGUoc0FsYXJtLT5BbGFybVRpbWUuSG91cnMpOwotICAgIHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMgPSBSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtVGltZS5NaW51dGVzKTsKLSAgICBzQWxhcm0tPkFsYXJtVGltZS5TZWNvbmRzID0gUlRDX0JjZDJUb0J5dGUoc0FsYXJtLT5BbGFybVRpbWUuU2Vjb25kcyk7Ci0gICAgc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5ID0gUlRDX0JjZDJUb0J5dGUoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5KTsKLSAgfQotCi0gIHJldHVybiBIQUxfT0s7Ci19Ci0KLS8qKgotICAqIEBicmllZiAgSGFuZGxlIEFsYXJtIGludGVycnVwdCByZXF1ZXN0LgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCi0gICogQHJldHZhbCBOb25lCi0gICovCi12b2lkIEhBTF9SVENfQWxhcm1JUlFIYW5kbGVyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQotewotICAvKiBHZXQgdGhlIEFsYXJtQSBpbnRlcnJ1cHQgc291cmNlIGVuYWJsZSBzdGF0dXMgKi8KLSAgaWYgKF9fSEFMX1JUQ19BTEFSTV9HRVRfSVRfU09VUkNFKGhydGMsIFJUQ19JVF9BTFJBKSAhPSBSRVNFVCkKLSAgewotICAgIC8qIEdldCB0aGUgcGVuZGluZyBzdGF0dXMgb2YgdGhlIEFsYXJtQSBJbnRlcnJ1cHQgKi8KLSAgICBpZiAoX19IQUxfUlRDX0FMQVJNX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkFGKSAhPSBSRVNFVCkKLSAgICB7Ci0gICAgICAvKiBBbGFybUEgY2FsbGJhY2sgKi8KLSAgICAjaWYgKFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotICAgICAgaHJ0Yy0+QWxhcm1BRXZlbnRDYWxsYmFjayhocnRjKTsKLSAgICAjZWxzZQotICAgICAgSEFMX1JUQ19BbGFybUFFdmVudENhbGxiYWNrKGhydGMpOwotICAgICNlbmRpZiAvKiBVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KLQotICAgICAgLyogQ2xlYXIgdGhlIEFsYXJtQSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgKi8KLSAgICAgIF9fSEFMX1JUQ19BTEFSTV9DTEVBUl9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkFGKTsKLSAgICB9Ci0gIH0KLQotICAvKiBHZXQgdGhlIEFsYXJtQiBpbnRlcnJ1cHQgc291cmNlIGVuYWJsZSBzdGF0dXMgKi8KLSAgaWYgKF9fSEFMX1JUQ19BTEFSTV9HRVRfSVRfU09VUkNFKGhydGMsIFJUQ19JVF9BTFJCKSAhPSBSRVNFVCkKLSAgewotICAgIC8qIEdldCB0aGUgcGVuZGluZyBzdGF0dXMgb2YgdGhlIEFsYXJtQiBJbnRlcnJ1cHQgKi8KLSAgICBpZiAoX19IQUxfUlRDX0FMQVJNX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkJGKSAhPSBSRVNFVCkKLSAgICB7Ci0gICAgICAvKiBBbGFybUIgY2FsbGJhY2sgKi8KLSAgICAjaWYgKFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotICAgICAgaHJ0Yy0+QWxhcm1CRXZlbnRDYWxsYmFjayhocnRjKTsKLSAgICAjZWxzZQotICAgICAgSEFMX1JUQ0V4X0FsYXJtQkV2ZW50Q2FsbGJhY2soaHJ0Yyk7Ci0gICAgI2VuZGlmIC8qIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyAqLwotCi0gICAgICAvKiBDbGVhciB0aGUgQWxhcm1CIGludGVycnVwdCBwZW5kaW5nIGJpdCAqLwotICAgICAgX19IQUxfUlRDX0FMQVJNX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQkYpOwotICAgIH0KLSAgfQotCi0gIC8qIENsZWFyIHRoZSBFWFRJJ3MgbGluZSBGbGFnIGZvciBSVEMgQWxhcm0gKi8KLSAgX19IQUxfUlRDX0FMQVJNX0VYVElfQ0xFQVJfRkxBRygpOwotCi0gIC8qIENoYW5nZSBSVEMgc3RhdGUgKi8KLSAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwotfQotCi0vKioKLSAgKiBAYnJpZWYgIEFsYXJtIEEgY2FsbGJhY2suCi0gICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKLSAgKiBAcmV0dmFsIE5vbmUKLSAgKi8KLV9fd2VhayB2b2lkIEhBTF9SVENfQWxhcm1BRXZlbnRDYWxsYmFjayhSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKLXsKLSAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwotICBVTlVTRUQoaHJ0Yyk7Ci0KLSAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAotICAgICAgICAgICAgdGhlIEhBTF9SVENfQWxhcm1BRXZlbnRDYWxsYmFjayBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCi0gICAqLwotfQotCi0vKioKLSAgKiBAYnJpZWYgIEhhbmRsZSBBbGFybUEgUG9sbGluZyByZXF1ZXN0LgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCi0gICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24KLSAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKLSAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfUG9sbEZvckFsYXJtQUV2ZW50KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBUaW1lb3V0KQotewotCi0gIHVpbnQzMl90IHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7Ci0KLSAgd2hpbGUgKF9fSEFMX1JUQ19BTEFSTV9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19BTFJBRikgPT0gUkVTRVQpCi0gIHsKLSAgICBpZiAoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKQotICAgIHsKLSAgICAgIGlmICgoVGltZW91dCA9PSAwVSkgfHwgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFRpbWVvdXQpKQotICAgICAgewotICAgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfVElNRU9VVDsKLSAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIENsZWFyIHRoZSBBbGFybSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgKi8KLSAgX19IQUxfUlRDX0FMQVJNX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQUYpOwotCi0gIC8qIENoYW5nZSBSVEMgc3RhdGUgKi8KLSAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwotCi0gIHJldHVybiBIQUxfT0s7Ci19Ci0KLS8qKgotICAqIEB9Ci0gICovCi0KLS8qKiBAQGFkZHRvZ3JvdXAgUlRDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucwotICogIEBicmllZiAgIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKLSAqCi1AdmVyYmF0aW0KLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAjIyMjIyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zICMjIyMjCi0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIFsuLl0KLSAgICBUaGlzIHN1YnNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvCi0gICAgICAoKykgV2FpdCBmb3IgUlRDIFRpbWUgYW5kIERhdGUgU3luY2hyb25pemF0aW9uCi0KLUBlbmR2ZXJiYXRpbQotICAqIEB7Ci0gICovCi0KLS8qKgotICAqIEBicmllZiAgV2FpdCB1bnRpbCB0aGUgUlRDIFRpbWUgYW5kIERhdGUgcmVnaXN0ZXJzIChSVENfVFIgYW5kIFJUQ19EUikgYXJlCi0gICogICAgICAgICBzeW5jaHJvbml6ZWQgd2l0aCBSVEMgQVBCIGNsb2NrLgotICAqIEBub3RlICAgVGhlIFJUQyBSZXN5bmNocm9uaXphdGlvbiBtb2RlIGlzIHdyaXRlIHByb3RlY3RlZCwgdXNlIHRoZQotICAqICAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAgKiBAbm90ZSAgIFRvIHJlYWQgdGhlIGNhbGVuZGFyIHRocm91Z2ggdGhlIHNoYWRvdyByZWdpc3RlcnMgYWZ0ZXIgQ2FsZW5kYXIKLSAgKiAgICAgICAgIGluaXRpYWxpemF0aW9uLCBjYWxlbmRhciB1cGRhdGUgb3IgYWZ0ZXIgd2FrZXVwIGZyb20gbG93IHBvd2VyIG1vZGVzCi0gICogICAgICAgICB0aGUgc29mdHdhcmUgbXVzdCBmaXJzdCBjbGVhciB0aGUgUlNGIGZsYWcuCi0gICogICAgICAgICBUaGUgc29mdHdhcmUgbXVzdCB0aGVuIHdhaXQgdW50aWwgaXQgaXMgc2V0IGFnYWluIGJlZm9yZSByZWFkaW5nCi0gICogICAgICAgICB0aGUgY2FsZW5kYXIsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGNhbGVuZGFyIHJlZ2lzdGVycyBoYXZlIGJlZW4KLSAgKiAgICAgICAgIGNvcnJlY3RseSBjb3BpZWQgaW50byB0aGUgUlRDX1RSIGFuZCBSVENfRFIgc2hhZG93IHJlZ2lzdGVycy4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQotICAqIEByZXR2YWwgSEFMIHN0YXR1cwotICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ19XYWl0Rm9yU3luY2hybyhSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKLXsKLSAgdWludDMyX3QgdGlja3N0YXJ0ID0gMFU7Ci0KLSAgLyogQ2xlYXIgUlNGIGZsYWcgKi8KLSAgaHJ0Yy0+SW5zdGFuY2UtPklTUiAmPSAodWludDMyX3QpUlRDX1JTRl9NQVNLOwotCi0gIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7Ci0KLSAgLyogV2FpdCB0aGUgcmVnaXN0ZXJzIHRvIGJlIHN5bmNocm9uaXNlZCAqLwotICB3aGlsZSAoKGhydGMtPkluc3RhbmNlLT5JU1IgJiBSVENfSVNSX1JTRikgPT0gKHVpbnQzMl90KVJFU0VUKQotICB7Ci0gICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJUQ19USU1FT1VUX1ZBTFVFKQotICAgIHsKLSAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gSEFMX09LOwotfQotCi0vKioKLSAgKiBAfQotICAqLwotCi0vKiogQEBhZGR0b2dyb3VwIFJUQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA1IFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKLSAqCisvKiogQGRlZmdyb3VwIFJUQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA1IFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCisgICogQGJyaWVmICAgIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICMjIyMjIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zICMjIyMjCkBAIC0xODQ1LDEzICsxNzg4LDEzIEBACiAgICogQHsKICAgKi8KIC8qKgotICAqIEBicmllZiAgUmV0dXJuIHRoZSBSVEMgaGFuZGxlIHN0YXRlLgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQGJyaWVmICBSZXR1cm5zIHRoZSBSVEMgc3RhdGUuCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KIEhBTF9SVENTdGF0ZVR5cGVEZWYgSEFMX1JUQ19HZXRTdGF0ZShSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKIHsKLSAgLyogUmV0dXJuIFJUQyBoYW5kbGUgc3RhdGUgKi8KICAgcmV0dXJuIGhydGMtPlN0YXRlOwogfQogCkBAIC0xODU5LDg4ICsxODAyLDExOCBAQAogICAqIEB9CiAgICovCiAKKwogLyoqCiAgICogQH0KICAgKi8KIAotLyoqIEBAYWRkdG9ncm91cCBSVENfUHJpdmF0ZV9GdW5jdGlvbnMgUlRDIFByaXZhdGUgRnVuY3Rpb25zCisvKiogQGFkZHRvZ3JvdXAgUlRDX1ByaXZhdGVfRnVuY3Rpb25zCiAgICogQHsKICAgKi8KIAogLyoqCi0gICogQGJyaWVmICBFbnRlciB0aGUgUlRDIEluaXRpYWxpemF0aW9uIG1vZGUuCisgICogQGJyaWVmICBFbnRlcnMgdGhlIFJUQyBJbml0aWFsaXphdGlvbiBtb2RlLgogICAqIEBub3RlICAgVGhlIFJUQyBJbml0aWFsaXphdGlvbiBtb2RlIGlzIHdyaXRlIHByb3RlY3RlZCwgdXNlIHRoZQogICAqICAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQotICAqIEByZXR2YWwgQW4gRXJyb3JTdGF0dXMgZW51bWVyYXRpb24gdmFsdWU6Ci0gICogICAgICAgICAgLSBIQUxfT0sgOiBSVEMgaXMgaW4gSW5pdCBtb2RlCi0gICogICAgICAgICAgLSBIQUxfVElNRU9VVCA6IFJUQyBpcyBub3QgaW4gSW5pdCBtb2RlIGFuZCBpbiBUaW1lb3V0CisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCisgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBSVENfRW50ZXJJbml0TW9kZShSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKIHsKICAgdWludDMyX3QgdGlja3N0YXJ0ID0gMFU7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAotICAvKiBDaGVjayBpZiB0aGUgSW5pdGlhbGl6YXRpb24gbW9kZSBpcyBzZXQgKi8KLSAgaWYgKChocnRjLT5JbnN0YW5jZS0+SVNSICYgUlRDX0lTUl9JTklURikgPT0gKHVpbnQzMl90KVJFU0VUKQorICAvKiBDaGVjayB0aGF0IEluaXRpYWxpemF0aW9uIG1vZGUgaXMgbm90IGFscmVhZHkgc2V0ICovCisgIGlmIChSRUFEX0JJVChocnRjLT5JbnN0YW5jZS0+SVNSLCBSVENfSVNSX0lOSVRGKSA9PSAwVSkKICAgewotICAgIC8qIFNldCB0aGUgSW5pdGlhbGl6YXRpb24gbW9kZSAqLwotICAgIGhydGMtPkluc3RhbmNlLT5JU1IgPSAodWludDMyX3QpUlRDX0lOSVRfTUFTSzsKKyAgICAvKiBTZXQgSU5JVCBiaXQgdG8gZW50ZXIgSW5pdGlhbGl6YXRpb24gbW9kZSAqLworICAgIFNFVF9CSVQoaHJ0Yy0+SW5zdGFuY2UtPklTUiwgUlRDX0lTUl9JTklUKTsKIAorICAgIC8qIEdldCB0aWNrICovCiAgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKLSAgICAvKiBXYWl0IHRpbGwgUlRDIGlzIGluIElOSVQgc3RhdGUgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLwotICAgIHdoaWxlICgoaHJ0Yy0+SW5zdGFuY2UtPklTUiAmIFJUQ19JU1JfSU5JVEYpID09ICh1aW50MzJfdClSRVNFVCkKKworICAgIC8qIFdhaXQgdGlsbCBSVEMgaXMgaW4gSU5JVCBzdGF0ZSBhbmQgaWYgdGltZW91dCBpcyByZWFjaGVkIGV4aXQgKi8KKyAgICB3aGlsZSAoKFJFQURfQklUKGhydGMtPkluc3RhbmNlLT5JU1IsIFJUQ19JU1JfSU5JVEYpID09IDBVKSAmJiAoc3RhdHVzICE9IEhBTF9FUlJPUikpCiAgICAgewogICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJUQ19USU1FT1VUX1ZBTFVFKQogICAgICAgewotICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgIC8qIFNldCBSVEMgc3RhdGUgKi8KKyAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOworICAgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgfQogICB9CiAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAorLyoqCisgICogQGJyaWVmICBFeGl0cyB0aGUgUlRDIEluaXRpYWxpemF0aW9uIG1vZGUuCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBSVENfRXhpdEluaXRNb2RlKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQoreworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CisKKyAgLyogQ2xlYXIgSU5JVCBiaXQgdG8gZXhpdCBJbml0aWFsaXphdGlvbiBtb2RlICovCisgIENMRUFSX0JJVChocnRjLT5JbnN0YW5jZS0+SVNSLCBSVENfSVNSX0lOSVQpOworCisgIC8qIElmIENSX0JZUFNIQUQgYml0ID0gMCwgd2FpdCBmb3Igc3luY2hybyAqLworICBpZiAoUkVBRF9CSVQoaHJ0Yy0+SW5zdGFuY2UtPkNSLCBSVENfQ1JfQllQU0hBRCkgPT0gMFUpCisgIHsKKyAgICBpZiAoSEFMX1JUQ19XYWl0Rm9yU3luY2hybyhocnRjKSAhPSBIQUxfT0spCisgICAgeworICAgICAgLyogU2V0IFJUQyBzdGF0ZSAqLworICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOworICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOworICAgIH0KKyAgfQorCisgIHJldHVybiBzdGF0dXM7Cit9CiAKIC8qKgotICAqIEBicmllZiAgQ29udmVydCBhIDIgZGlnaXQgZGVjaW1hbCB0byBCQ0QgZm9ybWF0LgotICAqIEBwYXJhbSAgVmFsdWUgQnl0ZSB0byBiZSBjb252ZXJ0ZWQKKyAgKiBAYnJpZWYgIENvbnZlcnRzIGEgMi1kaWdpdCBudW1iZXIgZnJvbSBkZWNpbWFsIHRvIEJDRCBmb3JtYXQuCisgICogQHBhcmFtICBudW1iZXIgZGVjaW1hbC1mb3JtYXR0ZWQgbnVtYmVyIChmcm9tIDAgdG8gOTkpIHRvIGJlIGNvbnZlcnRlZAogICAqIEByZXR2YWwgQ29udmVydGVkIGJ5dGUKICAgKi8KLXVpbnQ4X3QgUlRDX0J5dGVUb0JjZDIodWludDhfdCBWYWx1ZSkKK3VpbnQ4X3QgUlRDX0J5dGVUb0JjZDIodWludDhfdCBudW1iZXIpCiB7CiAgIHVpbnQzMl90IGJjZGhpZ2ggPSAwVTsKIAotICB3aGlsZSAoVmFsdWUgPj0gMTBVKQorICB3aGlsZSAobnVtYmVyID49IDEwVSkKICAgewogICAgIGJjZGhpZ2grKzsKLSAgICBWYWx1ZSAtPSAxMFU7CisgICAgbnVtYmVyIC09IDEwVTsKICAgfQogCi0gIHJldHVybiAoKHVpbnQ4X3QpKGJjZGhpZ2ggPDwgNFUpIHwgVmFsdWUpOworICByZXR1cm4gKCh1aW50OF90KShiY2RoaWdoIDw8IDRVKSB8IG51bWJlcik7CiB9CiAKIC8qKgotICAqIEBicmllZiAgQ29udmVydCBmcm9tIDIgZGlnaXQgQkNEIHRvIEJpbmFyeS4KLSAgKiBAcGFyYW0gIFZhbHVlIEJDRCB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQKKyAgKiBAYnJpZWYgIENvbnZlcnRzIGEgMi1kaWdpdCBudW1iZXIgZnJvbSBCQ0QgdG8gZGVjaW1hbCBmb3JtYXQuCisgICogQHBhcmFtICBudW1iZXIgQkNELWZvcm1hdHRlZCBudW1iZXIgKGZyb20gMDAgdG8gOTkpIHRvIGJlIGNvbnZlcnRlZAogICAqIEByZXR2YWwgQ29udmVydGVkIHdvcmQKICAgKi8KLXVpbnQ4X3QgUlRDX0JjZDJUb0J5dGUodWludDhfdCBWYWx1ZSkKK3VpbnQ4X3QgUlRDX0JjZDJUb0J5dGUodWludDhfdCBudW1iZXIpCiB7Ci0gIHVpbnQzMl90IHRtcCA9IDBVOwotICB0bXAgPSAoKHVpbnQ4X3QpKFZhbHVlICYgKHVpbnQ4X3QpMHhGMFUpID4+ICh1aW50OF90KTB4NFUpICogMTBVOwotICByZXR1cm4gKHRtcCArIChWYWx1ZSAmICh1aW50OF90KTB4MEZVKSk7CisgIHVpbnQzMl90IHRlbnMgPSAwVTsKKyAgdGVucyA9ICgoKHVpbnQzMl90KW51bWJlciAmIDB4RjBVKSA+PiA0VSkgKiAxMFU7CisgIHJldHVybiAodWludDhfdCkodGVucyArICgodWludDMyX3QpbnVtYmVyICYgMHgwRlUpKTsKIH0KKwogLyoqCiAgICogQH0KICAgKi8KIAogI2VuZGlmIC8qIEhBTF9SVENfTU9EVUxFX0VOQUJMRUQgKi8KLQogLyoqCiAgICogQH0KICAgKi8KIAotCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfcnRjX2V4LmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9ydGNfZXguYwppbmRleCA0ODhhM2Q5Li40NGM1ZjkxIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9ydGNfZXguYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF9ydGNfZXguYwpAQCAtNCwxMCArNCwxMCBAQAogICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtCiAgICogQGJyaWVmICAgRXh0ZW5kZWQgUlRDIEhBTCBtb2R1bGUgZHJpdmVyLgogICAqICAgICAgICAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcKLSAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIFJlYWwgVGltZSBDbG9jayAoUlRDKSBFeHRlbmRlZCBwZXJpcGhlcmFsOgotICAqICAgICAgICAgICArIFJUQyBUaW1lIFN0YW1wIGZ1bmN0aW9ucworICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgUmVhbC1UaW1lIENsb2NrIChSVEMpIEV4dGVuZGVkIHBlcmlwaGVyYWw6CisgICogICAgICAgICAgICsgUlRDIFRpbWVzdGFtcCBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBSVEMgVGFtcGVyIGZ1bmN0aW9ucwotICAqICAgICAgICAgICArIFJUQyBXYWtlLXVwIGZ1bmN0aW9ucworICAqICAgICAgICAgICArIFJUQyBXYWtldXAgZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgRXh0ZW5kZWQgQ29udHJvbCBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBFeHRlbmRlZCBSVEMgZmVhdHVyZXMgZnVuY3Rpb25zCiAgICoKQEAgLTI0LDcgKzI0LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICMjIyMjIEhvdyB0byB1c2UgdGhpcyBkcml2ZXIgIyMjIyMKKyAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEhvdyB0byB1c2UgdGhpcyBkcml2ZXIgIyMjIyMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFsuLl0KICAgICAoKykgRW5hYmxlIHRoZSBSVEMgZG9tYWluIGFjY2Vzcy4KQEAgLTM0LDMxICszNCwzNSBAQAogICAqKiogUlRDIFdha2V1cCBjb25maWd1cmF0aW9uICoqKgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBbLi5dCi0gICAgKCspIFRvIGNvbmZpZ3VyZSB0aGUgUlRDIFdha2V1cCBDbG9jayBzb3VyY2UgYW5kIENvdW50ZXIgdXNlIHRoZSBIQUxfUlRDRXhfU2V0V2FrZVVwVGltZXIoKQotICAgICAgICBmdW5jdGlvbi4gWW91IGNhbiBhbHNvIGNvbmZpZ3VyZSB0aGUgUlRDIFdha2V1cCB0aW1lciB3aXRoIGludGVycnVwdCBtb2RlCi0gICAgICAgIHVzaW5nIHRoZSBIQUxfUlRDRXhfU2V0V2FrZVVwVGltZXJfSVQoKSBmdW5jdGlvbi4KLSAgICAoKykgVG8gcmVhZCB0aGUgUlRDIFdha2VVcCBDb3VudGVyIHJlZ2lzdGVyLCB1c2UgdGhlIEhBTF9SVENFeF9HZXRXYWtlVXBUaW1lcigpCisgICAgKCspIFRvIGNvbmZpZ3VyZSB0aGUgUlRDIFdha2V1cCBDbG9jayBzb3VyY2UgYW5kIENvdW50ZXIgdXNlIHRoZQorICAgICAgICBIQUxfUlRDRXhfU2V0V2FrZVVwVGltZXIoKSBmdW5jdGlvbi4KKyAgICAgICAgWW91IGNhbiBhbHNvIGNvbmZpZ3VyZSB0aGUgUlRDIFdha2V1cCB0aW1lciBpbiBpbnRlcnJ1cHQgbW9kZSB1c2luZyB0aGUKKyAgICAgICAgSEFMX1JUQ0V4X1NldFdha2VVcFRpbWVyX0lUKCkgZnVuY3Rpb24uCisgICAgKCspIFRvIHJlYWQgdGhlIFJUQyBXYWtldXAgQ291bnRlciByZWdpc3RlciwgdXNlIHRoZSBIQUxfUlRDRXhfR2V0V2FrZVVwVGltZXIoKQogICAgICAgICBmdW5jdGlvbi4KIAotICAqKiogVGltZVN0YW1wIGNvbmZpZ3VyYXRpb24gKioqCisgICoqKiBUaW1lc3RhbXAgY29uZmlndXJhdGlvbiAqKioKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBbLi5dCi0gICAgICAgICgrKSBDb25maWd1cmUgdGhlIFJUQ19BRiB0cmlnZ2VyIGFuZCBlbmFibGUgdGhlIFJUQyBUaW1lU3RhbXAgdXNpbmcgdGhlCi0gICAgICAgIEhBTF9SVENFeF9TZXRUaW1lU3RhbXAoKSBmdW5jdGlvbi4gWW91IGNhbiBhbHNvIGNvbmZpZ3VyZSB0aGUgUlRDIFRpbWVTdGFtcCB3aXRoCi0gICAgICAgIGludGVycnVwdCBtb2RlIHVzaW5nIHRoZSBIQUxfUlRDRXhfU2V0VGltZVN0YW1wX0lUKCkgZnVuY3Rpb24uCi0gICAgKCspIFRvIHJlYWQgdGhlIFJUQyBUaW1lU3RhbXAgVGltZSBhbmQgRGF0ZSByZWdpc3RlciwgdXNlIHRoZSBIQUxfUlRDRXhfR2V0VGltZVN0YW1wKCkKLSAgICAgICAgZnVuY3Rpb24uCi0gICAgKCspIFRoZSBUSU1FU1RBTVAgYWx0ZXJuYXRlIGZ1bmN0aW9uIGlzIG1hcHBlZCB0byBSVENfQUYxIChQQzEzVSkuCisgICAgKCspIFRvIGNvbmZpZ3VyZSB0aGUgUlRDIFRpbWVzdGFtcCB1c2UgdGhlIEhBTF9SVENFeF9TZXRUaW1lU3RhbXAoKSBmdW5jdGlvbi4KKyAgICAgICAgWW91IGNhbiBhbHNvIGNvbmZpZ3VyZSB0aGUgUlRDIFRpbWVzdGFtcCB3aXRoIGludGVycnVwdCBtb2RlIHVzaW5nIHRoZQorICAgICAgICBIQUxfUlRDRXhfU2V0VGltZVN0YW1wX0lUKCkgZnVuY3Rpb24uCisgICAgKCspIFRvIHJlYWQgdGhlIFJUQyBUaW1lc3RhbXAgVGltZSBhbmQgRGF0ZSByZWdpc3RlciwgdXNlIHRoZQorICAgICAgICBIQUxfUlRDRXhfR2V0VGltZVN0YW1wKCkgZnVuY3Rpb24uCisgICAgKCspIFRoZSBUaW1lc3RhbXAgYWx0ZXJuYXRlIGZ1bmN0aW9uIGlzIG1hcHBlZCB0byBSVENfQUYxIChQQzEzKS4KIAogICAqKiogVGFtcGVyIGNvbmZpZ3VyYXRpb24gKioqCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgWy4uXQotICAgICAgICAoKykgRW5hYmxlIHRoZSBSVEMgVGFtcGVyIGFuZCBjb25maWd1cmUgdGhlIFRhbXBlciBmaWx0ZXIgY291bnQsIHRyaWdnZXIgRWRnZQotICAgICAgICBvciBMZXZlbCBhY2NvcmRpbmcgdG8gdGhlIFRhbXBlciBmaWx0ZXIgKGlmIGVxdWFsIHRvIDAgRWRnZSBlbHNlIExldmVsKQotICAgICAgICB2YWx1ZSwgc2FtcGxpbmcgZnJlcXVlbmN5LCBwcmVjaGFyZ2Ugb3IgZGlzY2hhcmdlIGFuZCBQdWxsLVVQIHVzaW5nIHRoZQotICAgICAgICBIQUxfUlRDRXhfU2V0VGFtcGVyKCkgZnVuY3Rpb24uIFlvdSBjYW4gY29uZmlndXJlIFJUQyBUYW1wZXIgd2l0aCBpbnRlcnJ1cHQKLSAgICAgICAgbW9kZSB1c2luZyBIQUxfUlRDRXhfU2V0VGFtcGVyX0lUKCkgZnVuY3Rpb24uCi0gICAgKCspIFRoZSBUQU1QRVIxIGFsdGVybmF0ZSBmdW5jdGlvbiBpcyBtYXBwZWQgdG8gUlRDX0FGMSAoUEMxM1UpLgorICAgICgrKSBUbyBFbmFibGUgdGhlIFJUQyBUYW1wZXIgYW5kIGNvbmZpZ3VyZSB0aGUgVGFtcGVyIGZpbHRlciBjb3VudCwgdHJpZ2dlcgorICAgICAgICBFZGdlIG9yIExldmVsIGFjY29yZGluZyB0byB0aGUgVGFtcGVyIGZpbHRlciB2YWx1ZSAoaWYgZXF1YWwgdG8gMCBFZGdlCisgICAgICAgIGVsc2UgTGV2ZWwpLCBzYW1wbGluZyBmcmVxdWVuY3ksIHByZWNoYXJnZSBvciBkaXNjaGFyZ2UgYW5kIFB1bGwtVVAgdXNlCisgICAgICAgIHRoZSBIQUxfUlRDRXhfU2V0VGFtcGVyKCkgZnVuY3Rpb24uCisgICAgICAgIFlvdSBjYW4gY29uZmlndXJlIFJUQyBUYW1wZXIgaW4gaW50ZXJydXB0IG1vZGUgdXNpbmcgSEFMX1JUQ0V4X1NldFRhbXBlcl9JVCgpCisgICAgICAgIGZ1bmN0aW9uLgorICAgICgrKSBUaGUgVEFNUEVSMSBhbHRlcm5hdGUgZnVuY3Rpb24gaXMgbWFwcGVkIHRvIFJUQ19BRjEgKFBDMTMpLgorICAgICgrKSBUaGUgVEFNUEVSMiBhbHRlcm5hdGUgZnVuY3Rpb24gaXMgbWFwcGVkIHRvIFJUQ19BRjIgKFBBMCkuCisgICAgKCspIFRoZSBUQU1QRVIzIGFsdGVybmF0ZSBmdW5jdGlvbiBpcyBtYXBwZWQgdG8gUlRDX0FGMyAoUEU2KS4KIAogICAqKiogQmFja3VwIERhdGEgUmVnaXN0ZXJzIGNvbmZpZ3VyYXRpb24gKioqCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTY4LDcgKzcyLDIzIEBACiAgICAgKCspIFRvIHJlYWQgdGhlIFJUQyBCYWNrdXAgRGF0YSByZWdpc3RlcnMsIHVzZSB0aGUgSEFMX1JUQ0V4X0JLVVBSZWFkKCkKICAgICAgICAgZnVuY3Rpb24uCiAKLSAgIEBlbmR2ZXJiYXRpbQorICAqKiogU21vb3RoIERpZ2l0YWwgQ2FsaWJyYXRpb24gY29uZmlndXJhdGlvbiAqKioKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFsuLl0KKyAgICAoKykgUlRDIGZyZXF1ZW5jeSBjYW4gYmUgZGlnaXRhbGx5IGNhbGlicmF0ZWQgd2l0aCBhIHJlc29sdXRpb24gb2YgYWJvdXQKKyAgICAgICAgMC45NTQgcHBtIHdpdGggYSByYW5nZSBmcm9tIC00ODcuMSBwcG0gdG8gKzQ4OC41IHBwbS4KKyAgICAgICAgVGhlIGNvcnJlY3Rpb24gb2YgdGhlIGZyZXF1ZW5jeSBpcyBwZXJmb3JtZWQgdXNpbmcgYSBzZXJpZXMgb2Ygc21hbGwKKyAgICAgICAgYWRqdXN0bWVudHMgKGFkZGluZyBhbmQvb3Igc3VidHJhY3RpbmcgaW5kaXZpZHVhbCBSVENDTEsgcHVsc2VzKS4KKyAgICAoKykgVGhlIHNtb290aCBkaWdpdGFsIGNhbGlicmF0aW9uIGlzIHBlcmZvcm1lZCBkdXJpbmcgYSBjeWNsZSBvZiBhYm91dCAyXjIwCisgICAgICAgIFJUQ0NMSyBwdWxzZXMgKG9yIDMyIHNlY29uZHMpIHdoZW4gdGhlIGlucHV0IGZyZXF1ZW5jeSBpcyAzMiw3NjggSHouCisgICAgICAgIFRoaXMgY3ljbGUgaXMgbWFpbnRhaW5lZCBieSBhIDIwLWJpdCBjb3VudGVyIGNsb2NrZWQgYnkgUlRDQ0xLLgorICAgICgrKSBUaGUgc21vb3RoIGNhbGlicmF0aW9uIHJlZ2lzdGVyIChSVENfQ0FMUikgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgUlRDQ0xLCisgICAgICAgIGNsb2NrIGN5Y2xlcyB0byBiZSBtYXNrZWQgZHVyaW5nIHRoZSAzMi1zZWNvbmQgY3ljbGUuCisgICAgKCspIFRoZSBSVEMgU21vb3RoIERpZ2l0YWwgQ2FsaWJyYXRpb24gdmFsdWUgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNhbGlicmF0aW9uCisgICAgICAgIGN5Y2xlIHBlcmlvZCAoMzJzLCAxNnMsIG9yIDhzKSBjYW4gYmUgY2FsaWJyYXRlZCB1c2luZyB0aGUKKyAgICAgICAgSEFMX1JUQ0V4X1NldFNtb290aENhbGliKCkgZnVuY3Rpb24uCisKKyAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCkBAIC03OSwxMCArOTksOCBAQAogICAqIEB7CiAgICovCiAKLQotCi0vKiogQGFkZHRvZ3JvdXAgUlRDRXgKLSAgKiBAYnJpZWYgUlRDIEV4dGVuZGVkIEhBTCBtb2R1bGUgZHJpdmVyCisvKiogQGRlZmdyb3VwIFJUQ0V4IFJUQ0V4CisgICogQGJyaWVmICAgIFJUQyBFeHRlbmRlZCBIQUwgbW9kdWxlIGRyaXZlcgogICAqIEB7CiAgICovCiAKQEAgLTkzLDczICsxMTEsODggQEAKIC8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyoqIEBhZGR0b2dyb3VwIFJUQ0V4X0V4cG9ydGVkX0Z1bmN0aW9ucworLyoqIEBkZWZncm91cCBSVENFeF9FeHBvcnRlZF9GdW5jdGlvbnMgUlRDRXggRXhwb3J0ZWQgRnVuY3Rpb25zCiAgICogQHsKICAgKi8KIAotCi0vKiogQGFkZHRvZ3JvdXAgUlRDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMQotICogIEBicmllZiAgIFJUQyBUaW1lU3RhbXAgYW5kIFRhbXBlciBmdW5jdGlvbnMKLSAqCisvKiogQGRlZmdyb3VwIFJUQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgUlRDIFRpbWVzdGFtcCBhbmQgVGFtcGVyIGZ1bmN0aW9ucworICAqIEBicmllZiAgICBSVEMgVGltZXN0YW1wIGFuZCBUYW1wZXIgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgIyMjIyMgUlRDIFRpbWVTdGFtcCBhbmQgVGFtcGVyIGZ1bmN0aW9ucyAjIyMjIworICAgICAgICAgICAgICAgICAjIyMjIyBSVEMgVGltZXN0YW1wIGFuZCBUYW1wZXIgZnVuY3Rpb25zICMjIyMjCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0gWy4uXSBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvIGNvbmZpZ3VyZSBUaW1lU3RhbXAgZmVhdHVyZQorIFsuLl0gVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBjb25maWd1cmUgVGltZXN0YW1wIGZlYXR1cmUKIAogQGVuZHZlcmJhdGltCiAgICogQHsKICAgKi8KIAogLyoqCi0gICogQGJyaWVmICBTZXQgVGltZVN0YW1wLgotICAqIEBub3RlICAgVGhpcyBBUEkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGVuYWJsaW5nIHRoZSBUaW1lU3RhbXAgZmVhdHVyZS4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQotICAqIEBwYXJhbSAgVGltZVN0YW1wRWRnZSBTcGVjaWZpZXMgdGhlIHBpbiBlZGdlIG9uIHdoaWNoIHRoZSBUaW1lU3RhbXAgaXMKKyAgKiBAYnJpZWYgIFNldHMgVGltZXN0YW1wLgorICAqIEBub3RlICAgVGhpcyBBUEkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGVuYWJsaW5nIHRoZSBUaW1lc3RhbXAgZmVhdHVyZS4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KKyAgKiBAcGFyYW0gIFJUQ19UaW1lU3RhbXBFZGdlIFNwZWNpZmllcyB0aGUgcGluIGVkZ2Ugb24gd2hpY2ggdGhlIFRpbWVzdGFtcCBpcwogICAqICAgICAgICAgYWN0aXZhdGVkLgogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgICAgQGFyZyBSVENfVElNRVNUQU1QRURHRV9SSVNJTkc6IHRoZSBUaW1lIHN0YW1wIGV2ZW50IG9jY3VycyBvbiB0aGUKLSAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaXNpbmcgZWRnZSBvZiB0aGUgcmVsYXRlZCBwaW4uCi0gICogICAgICAgICAgICAgQGFyZyBSVENfVElNRVNUQU1QRURHRV9GQUxMSU5HOiB0aGUgVGltZSBzdGFtcCBldmVudCBvY2N1cnMgb24gdGhlCi0gICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxpbmcgZWRnZSBvZiB0aGUgcmVsYXRlZCBwaW4uCi0gICogQHBhcmFtICBSVENfVGltZVN0YW1wUGluIHNwZWNpZmllcyB0aGUgUlRDIFRpbWVTdGFtcCBQaW4uCisgICogICAgICAgICAgICAgQGFyZyBSVENfVElNRVNUQU1QRURHRV9SSVNJTkc6IHRoZSBUaW1lc3RhbXAgZXZlbnQgb2NjdXJzIG9uCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJpc2luZyBlZGdlIG9mIHRoZSByZWxhdGVkIHBpbi4KKyAgKiAgICAgICAgICAgICBAYXJnIFJUQ19USU1FU1RBTVBFREdFX0ZBTExJTkc6IHRoZSBUaW1lc3RhbXAgZXZlbnQgb2NjdXJzIG9uCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZhbGxpbmcgZWRnZSBvZiB0aGUgcmVsYXRlZCBwaW4uCisgICogQHBhcmFtICBSVENfVGltZVN0YW1wUGluIFNwZWNpZmllcyB0aGUgUlRDIFRpbWVzdGFtcCBQaW4uCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgICBAYXJnIFJUQ19USU1FU1RBTVBQSU5fREVGQVVMVDogUEMxMyBpcyBzZWxlY3RlZCBhcyBSVEMgVGltZVN0YW1wIFBpbi4KKyAgKiAgICAgICAgICAgICBAYXJnIFJUQ19USU1FU1RBTVBQSU5fREVGQVVMVDogUEMxMyBpcyBzZWxlY3RlZCBhcyBSVEMgVGltZXN0YW1wIFBpbi4KKyAgKiBAbm90ZSBBbHRob3VnaCB1bnVzZWQsIHBhcmFtZXRlciBSVENfVGltZVN0YW1wUGluIGhhcyBiZWVuIGtlcHQgZm9yIHBvcnRhYmlsaXR5CisgICogICAgICAgcmVhc29ucy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9TZXRUaW1lU3RhbXAoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIHVpbnQzMl90IFRpbWVTdGFtcEVkZ2UsIHVpbnQzMl90IFJUQ19UaW1lU3RhbXBQaW4pCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfU2V0VGltZVN0YW1wKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBSVENfVGltZVN0YW1wRWRnZSwgdWludDMyX3QgUlRDX1RpbWVTdGFtcFBpbikKIHsKICAgdWludDMyX3QgdG1wcmVnID0gMFU7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KLSAgYXNzZXJ0X3BhcmFtKElTX1RJTUVTVEFNUF9FREdFKFRpbWVTdGFtcEVkZ2UpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTUVTVEFNUF9FREdFKFJUQ19UaW1lU3RhbXBFZGdlKSk7CiAgIGFzc2VydF9wYXJhbShJU19SVENfVElNRVNUQU1QX1BJTihSVENfVGltZVN0YW1wUGluKSk7CiAKKyAgLyogUHJldmVudCBjb21waWxhdGlvbiB3YXJuaW5nIGR1ZSB0byB1bnVzZWQgYXJndW1lbnQocykgaWYgYXNzZXJ0X3BhcmFtIGNoZWNrCisgICAgIGlzIGRpc2FibGVkICovCisgIFVOVVNFRChSVENfVGltZVN0YW1wUGluKTsKKwogICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhydGMpOwogCisgIC8qIENoYW5nZSBSVEMgc3RhdGUgdG8gQlVTWSAqLwogICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfQlVTWTsKIAogICAvKiBHZXQgdGhlIFJUQ19DUiByZWdpc3RlciBhbmQgY2xlYXIgdGhlIGJpdHMgdG8gYmUgY29uZmlndXJlZCAqLwogICB0bXByZWcgPSAodWludDMyX3QpKGhydGMtPkluc3RhbmNlLT5DUiAmICh1aW50MzJfdCl+KFJUQ19DUl9UU0VER0UgfCBSVENfQ1JfVFNFKSk7CiAKLSAgdG1wcmVnIHw9IFRpbWVTdGFtcEVkZ2U7CisgIC8qIENvbmZpZ3VyZSB0aGUgVGltZXN0YW1wIFRTRURHRSBiaXQgKi8KKyAgdG1wcmVnIHw9IFJUQ19UaW1lU3RhbXBFZGdlOwogCiAgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwogCi0gIC8qIENvbmZpZ3VyZSB0aGUgVGltZSBTdGFtcCBUU0VER0UgYW5kIEVuYWJsZSBiaXRzICovCisgIC8qIENvcHkgdGhlIGRlc2lyZWQgY29uZmlndXJhdGlvbiBpbnRvIHRoZSBDUiByZWdpc3RlciAqLwogICBocnRjLT5JbnN0YW5jZS0+Q1IgPSAodWludDMyX3QpdG1wcmVnOwogCisgIC8qIENsZWFyIFJUQyBUaW1lc3RhbXAgZmxhZyAqLworICBfX0hBTF9SVENfVElNRVNUQU1QX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfVFNGKTsKKworICAvKiBDbGVhciBSVEMgVGltZXN0YW1wIG92ZXJydW4gRmxhZyAqLworICBfX0hBTF9SVENfVElNRVNUQU1QX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfVFNPVkYpOworCisgIC8qIEVuYWJsZSB0aGUgVGltZXN0YW1wIHNhdmluZyAqLwogICBfX0hBTF9SVENfVElNRVNUQU1QX0VOQUJMRShocnRjKTsKIAogICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CiAKLSAgLyogQ2hhbmdlIFJUQyBzdGF0ZSAqLworICAvKiBDaGFuZ2UgUlRDIHN0YXRlIGJhY2sgdG8gUkVBRFkgKi8KICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwogCiAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KQEAgLTE2OSw1OCArMjAyLDc0IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgU2V0IFRpbWVTdGFtcCB3aXRoIEludGVycnVwdC4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQotICAqIEBub3RlICAgVGhpcyBBUEkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGVuYWJsaW5nIHRoZSBUaW1lU3RhbXAgZmVhdHVyZS4KLSAgKiBAcGFyYW0gIFRpbWVTdGFtcEVkZ2UgU3BlY2lmaWVzIHRoZSBwaW4gZWRnZSBvbiB3aGljaCB0aGUgVGltZVN0YW1wIGlzCisgICogQGJyaWVmICBTZXRzIFRpbWVzdGFtcCB3aXRoIEludGVycnVwdC4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KKyAgKiBAbm90ZSAgIFRoaXMgQVBJIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBlbmFibGluZyB0aGUgVGltZXN0YW1wIGZlYXR1cmUuCisgICogQHBhcmFtICBSVENfVGltZVN0YW1wRWRnZSBTcGVjaWZpZXMgdGhlIHBpbiBlZGdlIG9uIHdoaWNoIHRoZSBUaW1lc3RhbXAgaXMKICAgKiAgICAgICAgIGFjdGl2YXRlZC4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICAgIEBhcmcgUlRDX1RJTUVTVEFNUEVER0VfUklTSU5HOiB0aGUgVGltZSBzdGFtcCBldmVudCBvY2N1cnMgb24gdGhlCi0gICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlzaW5nIGVkZ2Ugb2YgdGhlIHJlbGF0ZWQgcGluLgotICAqICAgICAgICAgICAgIEBhcmcgUlRDX1RJTUVTVEFNUEVER0VfRkFMTElORzogdGhlIFRpbWUgc3RhbXAgZXZlbnQgb2NjdXJzIG9uIHRoZQotICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxsaW5nIGVkZ2Ugb2YgdGhlIHJlbGF0ZWQgcGluLgotICAqIEBwYXJhbSAgUlRDX1RpbWVTdGFtcFBpbiBTcGVjaWZpZXMgdGhlIFJUQyBUaW1lU3RhbXAgUGluLgorICAqICAgICAgICAgICAgIEBhcmcgUlRDX1RJTUVTVEFNUEVER0VfUklTSU5HOiB0aGUgVGltZXN0YW1wIGV2ZW50IG9jY3VycyBvbgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByaXNpbmcgZWRnZSBvZiB0aGUgcmVsYXRlZCBwaW4uCisgICogICAgICAgICAgICAgQGFyZyBSVENfVElNRVNUQU1QRURHRV9GQUxMSU5HOiB0aGUgVGltZXN0YW1wIGV2ZW50IG9jY3VycyBvbgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmYWxsaW5nIGVkZ2Ugb2YgdGhlIHJlbGF0ZWQgcGluLgorICAqIEBwYXJhbSAgUlRDX1RpbWVTdGFtcFBpbiBTcGVjaWZpZXMgdGhlIFJUQyBUaW1lc3RhbXAgUGluLgogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgICAgQGFyZyBSVENfVElNRVNUQU1QUElOX0RFRkFVTFQ6IFBDMTMgaXMgc2VsZWN0ZWQgYXMgUlRDIFRpbWVTdGFtcCBQaW4uCisgICogICAgICAgICAgICAgQGFyZyBSVENfVElNRVNUQU1QUElOX0RFRkFVTFQ6IFBDMTMgaXMgc2VsZWN0ZWQgYXMgUlRDIFRpbWVzdGFtcCBQaW4uCisgICogQG5vdGUgQWx0aG91Z2ggdW51c2VkLCBwYXJhbWV0ZXIgUlRDX1RpbWVTdGFtcFBpbiBoYXMgYmVlbiBrZXB0IGZvciBwb3J0YWJpbGl0eQorICAqICAgICAgIHJlYXNvbnMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfU2V0VGltZVN0YW1wX0lUKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBUaW1lU3RhbXBFZGdlLCB1aW50MzJfdCBSVENfVGltZVN0YW1wUGluKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X1NldFRpbWVTdGFtcF9JVChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgUlRDX1RpbWVTdGFtcEVkZ2UsIHVpbnQzMl90IFJUQ19UaW1lU3RhbXBQaW4pCiB7CiAgIHVpbnQzMl90IHRtcHJlZyA9IDBVOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCi0gIGFzc2VydF9wYXJhbShJU19USU1FU1RBTVBfRURHRShUaW1lU3RhbXBFZGdlKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1FU1RBTVBfRURHRShSVENfVGltZVN0YW1wRWRnZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfUlRDX1RJTUVTVEFNUF9QSU4oUlRDX1RpbWVTdGFtcFBpbikpOwogCisgIC8qIFByZXZlbnQgY29tcGlsYXRpb24gd2FybmluZyBkdWUgdG8gdW51c2VkIGFyZ3VtZW50KHMpIGlmIGFzc2VydF9wYXJhbSBjaGVjaworICAgICBpcyBkaXNhYmxlZCAqLworICBVTlVTRUQoUlRDX1RpbWVTdGFtcFBpbik7CisKICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgX19IQUxfTE9DSyhocnRjKTsKIAorICAvKiBDaGFuZ2UgUlRDIHN0YXRlIHRvIEJVU1kgKi8KICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0JVU1k7CiAKICAgLyogR2V0IHRoZSBSVENfQ1IgcmVnaXN0ZXIgYW5kIGNsZWFyIHRoZSBiaXRzIHRvIGJlIGNvbmZpZ3VyZWQgKi8KICAgdG1wcmVnID0gKHVpbnQzMl90KShocnRjLT5JbnN0YW5jZS0+Q1IgJiAodWludDMyX3QpfihSVENfQ1JfVFNFREdFIHwgUlRDX0NSX1RTRSkpOwogCi0gIHRtcHJlZyB8PSBUaW1lU3RhbXBFZGdlOworICAvKiBDb25maWd1cmUgdGhlIFRpbWVzdGFtcCBUU0VER0UgYml0ICovCisgIHRtcHJlZyB8PSBSVENfVGltZVN0YW1wRWRnZTsKIAogICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKIAotICAvKiBDb25maWd1cmUgdGhlIFRpbWUgU3RhbXAgVFNFREdFIGFuZCBFbmFibGUgYml0cyAqLworICAvKiBDb3B5IHRoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gaW50byB0aGUgQ1IgcmVnaXN0ZXIgKi8KICAgaHJ0Yy0+SW5zdGFuY2UtPkNSID0gKHVpbnQzMl90KXRtcHJlZzsKIAorICAvKiBDbGVhciBSVEMgVGltZXN0YW1wIGZsYWcgKi8KKyAgX19IQUxfUlRDX1RJTUVTVEFNUF9DTEVBUl9GTEFHKGhydGMsIFJUQ19GTEFHX1RTRik7CisKKyAgLyogQ2xlYXIgUlRDIFRpbWVzdGFtcCBvdmVycnVuIEZsYWcgKi8KKyAgX19IQUxfUlRDX1RJTUVTVEFNUF9DTEVBUl9GTEFHKGhydGMsIFJUQ19GTEFHX1RTT1ZGKTsKKworICAvKiBFbmFibGUgdGhlIFRpbWVzdGFtcCBzYXZpbmcgKi8KICAgX19IQUxfUlRDX1RJTUVTVEFNUF9FTkFCTEUoaHJ0Yyk7CiAKLSAgLyogRW5hYmxlIElUIHRpbWVzdGFtcCAqLworICAvKiBFbmFibGUgSVQgVGltZXN0YW1wICovCiAgIF9fSEFMX1JUQ19USU1FU1RBTVBfRU5BQkxFX0lUKGhydGMsIFJUQ19JVF9UUyk7CiAKLSAgLyogUlRDIHRpbWVzdGFtcCBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbjogRVhUSSBjb25maWd1cmF0aW9uICovCi0gIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRU5BQkxFX0lUKCk7Ci0KLSAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKTsKLQogICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CiAKKyAgLyogUlRDIFRpbWVzdGFtcCBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbjogRVhUSSBjb25maWd1cmF0aW9uICovCisgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRU5BQkxFX0lUKCk7CisgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRU5BQkxFX1JJU0lOR19FREdFKCk7CisKKyAgLyogQ2hhbmdlIFJUQyBzdGF0ZSBiYWNrIHRvIFJFQURZICovCiAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKIAogICAvKiBQcm9jZXNzIFVubG9ja2VkICovCkBAIC0yMzAsOCArMjc5LDkgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBEZWFjdGl2YXRlIFRpbWVTdGFtcC4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEBicmllZiAgRGVhY3RpdmF0ZXMgVGltZXN0YW1wLgorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X0RlYWN0aXZhdGVUaW1lU3RhbXAoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCkBAIC0yNTIsNyArMzAyLDcgQEAKICAgLyogR2V0IHRoZSBSVENfQ1IgcmVnaXN0ZXIgYW5kIGNsZWFyIHRoZSBiaXRzIHRvIGJlIGNvbmZpZ3VyZWQgKi8KICAgdG1wcmVnID0gKHVpbnQzMl90KShocnRjLT5JbnN0YW5jZS0+Q1IgJiAodWludDMyX3QpfihSVENfQ1JfVFNFREdFIHwgUlRDX0NSX1RTRSkpOwogCi0gIC8qIENvbmZpZ3VyZSB0aGUgVGltZSBTdGFtcCBUU0VER0UgYW5kIEVuYWJsZSBiaXRzICovCisgIC8qIENvbmZpZ3VyZSB0aGUgVGltZXN0YW1wIFRTRURHRSBhbmQgRW5hYmxlIGJpdHMgKi8KICAgaHJ0Yy0+SW5zdGFuY2UtPkNSID0gKHVpbnQzMl90KXRtcHJlZzsKIAogICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KQEAgLTI2Nyw4ICszMTcsOSBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIEdldCB0aGUgUlRDIFRpbWVTdGFtcCB2YWx1ZS4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEBicmllZiAgR2V0cyB0aGUgUlRDIFRpbWVzdGFtcCB2YWx1ZS4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcGFyYW0gIHNUaW1lU3RhbXAgUG9pbnRlciB0byBUaW1lIHN0cnVjdHVyZQogICAqIEBwYXJhbSAgc1RpbWVTdGFtcERhdGUgUG9pbnRlciB0byBEYXRlIHN0cnVjdHVyZQogICAqIEBwYXJhbSAgRm9ybWF0IHNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIHRoZSBlbnRlcmVkIHBhcmFtZXRlcnMuCkBAIC0yNzksNTIgKzMzMCw1NCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X0dldFRpbWVTdGFtcChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgUlRDX1RpbWVUeXBlRGVmICpzVGltZVN0YW1wLCBSVENfRGF0ZVR5cGVEZWYgKnNUaW1lU3RhbXBEYXRlLCB1aW50MzJfdCBGb3JtYXQpCiB7Ci0gIHVpbnQzMl90IHRtcHRpbWUgPSAwVSwgdG1wZGF0ZSA9IDBVOworICB1aW50MzJfdCB0bXB0aW1lID0gMFU7CisgIHVpbnQzMl90IHRtcGRhdGUgPSAwVTsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfUlRDX0ZPUk1BVChGb3JtYXQpKTsKIAotICAvKiBHZXQgdGhlIFRpbWVTdGFtcCB0aW1lIGFuZCBkYXRlIHJlZ2lzdGVycyB2YWx1ZXMgKi8KKyAgLyogR2V0IHRoZSBUaW1lc3RhbXAgdGltZSBhbmQgZGF0ZSByZWdpc3RlcnMgdmFsdWVzICovCiAgIHRtcHRpbWUgPSAodWludDMyX3QpKGhydGMtPkluc3RhbmNlLT5UU1RSICYgUlRDX1RSX1JFU0VSVkVEX01BU0spOwogICB0bXBkYXRlID0gKHVpbnQzMl90KShocnRjLT5JbnN0YW5jZS0+VFNEUiAmIFJUQ19EUl9SRVNFUlZFRF9NQVNLKTsKIAogICAvKiBGaWxsIHRoZSBUaW1lIHN0cnVjdHVyZSBmaWVsZHMgd2l0aCB0aGUgcmVhZCBwYXJhbWV0ZXJzICovCi0gIHNUaW1lU3RhbXAtPkhvdXJzID0gKHVpbnQ4X3QpKCh0bXB0aW1lICYgKFJUQ19UUl9IVCB8IFJUQ19UUl9IVSkpID4+IDE2VSk7Ci0gIHNUaW1lU3RhbXAtPk1pbnV0ZXMgPSAodWludDhfdCkoKHRtcHRpbWUgJiAoUlRDX1RSX01OVCB8IFJUQ19UUl9NTlUpKSA+PiA4VSk7Ci0gIHNUaW1lU3RhbXAtPlNlY29uZHMgPSAodWludDhfdCkodG1wdGltZSAmIChSVENfVFJfU1QgfCBSVENfVFJfU1UpKTsKLSAgc1RpbWVTdGFtcC0+VGltZUZvcm1hdCA9ICh1aW50OF90KSgodG1wdGltZSAmIChSVENfVFJfUE0pKSA+PiAxNlUpOworICBzVGltZVN0YW1wLT5Ib3VycyAgICAgID0gKHVpbnQ4X3QpKCh0bXB0aW1lICYgKFJUQ19UU1RSX0hUICB8IFJUQ19UU1RSX0hVKSkgID4+IFJUQ19UU1RSX0hVX1Bvcyk7CisgIHNUaW1lU3RhbXAtPk1pbnV0ZXMgICAgPSAodWludDhfdCkoKHRtcHRpbWUgJiAoUlRDX1RTVFJfTU5UIHwgUlRDX1RTVFJfTU5VKSkgPj4gUlRDX1RTVFJfTU5VX1Bvcyk7CisgIHNUaW1lU3RhbXAtPlNlY29uZHMgICAgPSAodWludDhfdCkoKHRtcHRpbWUgJiAoUlRDX1RTVFJfU1QgIHwgUlRDX1RTVFJfU1UpKSAgPj4gUlRDX1RTVFJfU1VfUG9zKTsKKyAgc1RpbWVTdGFtcC0+VGltZUZvcm1hdCA9ICh1aW50OF90KSgodG1wdGltZSAmIChSVENfVFNUUl9QTSkpICAgICAgICAgICAgICAgICA+PiBSVENfVFNUUl9QTV9Qb3MpOwogICBzVGltZVN0YW1wLT5TdWJTZWNvbmRzID0gKHVpbnQzMl90KSBocnRjLT5JbnN0YW5jZS0+VFNTU1I7CiAKICAgLyogRmlsbCB0aGUgRGF0ZSBzdHJ1Y3R1cmUgZmllbGRzIHdpdGggdGhlIHJlYWQgcGFyYW1ldGVycyAqLwotICBzVGltZVN0YW1wRGF0ZS0+WWVhciA9IDBVOwotICBzVGltZVN0YW1wRGF0ZS0+TW9udGggPSAodWludDhfdCkoKHRtcGRhdGUgJiAoUlRDX0RSX01UIHwgUlRDX0RSX01VKSkgPj4gOFUpOwotICBzVGltZVN0YW1wRGF0ZS0+RGF0ZSA9ICh1aW50OF90KSh0bXBkYXRlICYgKFJUQ19EUl9EVCB8IFJUQ19EUl9EVSkpOwotICBzVGltZVN0YW1wRGF0ZS0+V2Vla0RheSA9ICh1aW50OF90KSgodG1wZGF0ZSAmIChSVENfRFJfV0RVKSkgPj4gMTNVKTsKKyAgc1RpbWVTdGFtcERhdGUtPlllYXIgICAgPSAwVTsKKyAgc1RpbWVTdGFtcERhdGUtPk1vbnRoICAgPSAodWludDhfdCkoKHRtcGRhdGUgJiAoUlRDX1RTRFJfTVQgfCBSVENfVFNEUl9NVSkpID4+IFJUQ19UU0RSX01VX1Bvcyk7CisgIHNUaW1lU3RhbXBEYXRlLT5EYXRlICAgID0gKHVpbnQ4X3QpKCh0bXBkYXRlICYgKFJUQ19UU0RSX0RUIHwgUlRDX1RTRFJfRFUpKSA+PiBSVENfVFNEUl9EVV9Qb3MpOworICBzVGltZVN0YW1wRGF0ZS0+V2Vla0RheSA9ICh1aW50OF90KSgodG1wZGF0ZSAmIChSVENfVFNEUl9XRFUpKSAgICAgICAgICAgICAgPj4gUlRDX1RTRFJfV0RVX1Bvcyk7CiAKICAgLyogQ2hlY2sgdGhlIGlucHV0IHBhcmFtZXRlcnMgZm9ybWF0ICovCiAgIGlmIChGb3JtYXQgPT0gUlRDX0ZPUk1BVF9CSU4pCiAgIHsKLSAgICAvKiBDb252ZXJ0IHRoZSBUaW1lU3RhbXAgc3RydWN0dXJlIHBhcmFtZXRlcnMgdG8gQmluYXJ5IGZvcm1hdCAqLwotICAgIHNUaW1lU3RhbXAtPkhvdXJzID0gKHVpbnQ4X3QpUlRDX0JjZDJUb0J5dGUoc1RpbWVTdGFtcC0+SG91cnMpOworICAgIC8qIENvbnZlcnQgdGhlIFRpbWVzdGFtcCBzdHJ1Y3R1cmUgcGFyYW1ldGVycyB0byBCaW5hcnkgZm9ybWF0ICovCisgICAgc1RpbWVTdGFtcC0+SG91cnMgICA9ICh1aW50OF90KVJUQ19CY2QyVG9CeXRlKHNUaW1lU3RhbXAtPkhvdXJzKTsKICAgICBzVGltZVN0YW1wLT5NaW51dGVzID0gKHVpbnQ4X3QpUlRDX0JjZDJUb0J5dGUoc1RpbWVTdGFtcC0+TWludXRlcyk7CiAgICAgc1RpbWVTdGFtcC0+U2Vjb25kcyA9ICh1aW50OF90KVJUQ19CY2QyVG9CeXRlKHNUaW1lU3RhbXAtPlNlY29uZHMpOwogCiAgICAgLyogQ29udmVydCB0aGUgRGF0ZVRpbWVTdGFtcCBzdHJ1Y3R1cmUgcGFyYW1ldGVycyB0byBCaW5hcnkgZm9ybWF0ICovCi0gICAgc1RpbWVTdGFtcERhdGUtPk1vbnRoID0gKHVpbnQ4X3QpUlRDX0JjZDJUb0J5dGUoc1RpbWVTdGFtcERhdGUtPk1vbnRoKTsKLSAgICBzVGltZVN0YW1wRGF0ZS0+RGF0ZSA9ICh1aW50OF90KVJUQ19CY2QyVG9CeXRlKHNUaW1lU3RhbXBEYXRlLT5EYXRlKTsKKyAgICBzVGltZVN0YW1wRGF0ZS0+TW9udGggICA9ICh1aW50OF90KVJUQ19CY2QyVG9CeXRlKHNUaW1lU3RhbXBEYXRlLT5Nb250aCk7CisgICAgc1RpbWVTdGFtcERhdGUtPkRhdGUgICAgPSAodWludDhfdClSVENfQmNkMlRvQnl0ZShzVGltZVN0YW1wRGF0ZS0+RGF0ZSk7CiAgICAgc1RpbWVTdGFtcERhdGUtPldlZWtEYXkgPSAodWludDhfdClSVENfQmNkMlRvQnl0ZShzVGltZVN0YW1wRGF0ZS0+V2Vla0RheSk7CiAgIH0KIAotICAvKiBDbGVhciB0aGUgVElNRVNUQU1QIEZsYWcgKi8KKyAgLyogQ2xlYXIgdGhlIFRpbWVzdGFtcCBGbGFnICovCiAgIF9fSEFMX1JUQ19USU1FU1RBTVBfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19UU0YpOwogCiAgIHJldHVybiBIQUxfT0s7CiB9CiAKIC8qKgotICAqIEBicmllZiAgU2V0IFRhbXBlcgotICAqIEBub3RlICAgQnkgY2FsbGluZyB0aGlzIEFQSSB3ZSBkaXNhYmxlIHRoZSB0YW1wZXIgaW50ZXJydXB0IGZvciBhbGwgdGFtcGVycy4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEBicmllZiAgU2V0cyBUYW1wZXIuCisgICogQG5vdGUgICBCeSBjYWxsaW5nIHRoaXMgQVBJIHRoZSB0YW1wZXIgZ2xvYmFsIGludGVycnVwdCB3aWxsIGJlIGRpc2FibGVkLgorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEBwYXJhbSAgc1RhbXBlciBQb2ludGVyIHRvIFRhbXBlciBTdHJ1Y3R1cmUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCkBAIC0zMzYsNiArMzg5LDcgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19UQU1QRVIoc1RhbXBlci0+VGFtcGVyKSk7CiAgIGFzc2VydF9wYXJhbShJU19SVENfVEFNUEVSX1RSSUdHRVIoc1RhbXBlci0+VHJpZ2dlcikpOwogICBhc3NlcnRfcGFyYW0oSVNfUlRDX1RBTVBFUl9GSUxURVIoc1RhbXBlci0+RmlsdGVyKSk7CisgIGFzc2VydF9wYXJhbShJU19SVENfVEFNUEVSX0ZJTFRFUl9DT05GSUdfQ09SUkVDVChzVGFtcGVyLT5GaWx0ZXIsIHNUYW1wZXItPlRyaWdnZXIpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19UQU1QRVJfU0FNUExJTkdfRlJFUShzVGFtcGVyLT5TYW1wbGluZ0ZyZXF1ZW5jeSkpOwogICBhc3NlcnRfcGFyYW0oSVNfUlRDX1RBTVBFUl9QUkVDSEFSR0VfRFVSQVRJT04oc1RhbXBlci0+UHJlY2hhcmdlRHVyYXRpb24pKTsKICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19UQU1QRVJfUFVMTFVQX1NUQVRFKHNUYW1wZXItPlRhbXBlclB1bGxVcCkpOwpAQCAtMzQ2LDIwICs0MDAsNDQgQEAKIAogICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfQlVTWTsKIAotICBpZiAoc1RhbXBlci0+VHJpZ2dlciAhPSBSVENfVEFNUEVSVFJJR0dFUl9SSVNJTkdFREdFKQorICAvKiBDb3B5IGNvbnRyb2wgcmVnaXN0ZXIgaW50byB0ZW1wb3JhcnkgdmFyaWFibGUgKi8KKyAgdG1wcmVnID0gaHJ0Yy0+SW5zdGFuY2UtPlRBRkNSOworCisgIC8qIEVuYWJsZSBzZWxlY3RlZCB0YW1wZXIgKi8KKyAgdG1wcmVnIHw9IChzVGFtcGVyLT5UYW1wZXIpOworCisgIC8qIENvbmZpZ3VyZSB0aGUgdGFtcGVyIHRyaWdnZXIgYml0ICh0aGlzIGJpdCBpcyBqdXN0IG9uIHRoZSByaWdodCBvZiB0aGUKKyAgICAgICB0YW1wZXIgZW5hYmxlIGJpdCwgaGVuY2UgdGhlIG9uZS10aW1lIHJpZ2h0IHNoaWZ0IGJlZm9yZSB1cGRhdGluZyBpdCkgKi8KKyAgaWYgKHNUYW1wZXItPlRyaWdnZXIgPT0gUlRDX1RBTVBFUlRSSUdHRVJfRkFMTElOR0VER0UpCiAgIHsKLSAgICBzVGFtcGVyLT5UcmlnZ2VyID0gKHVpbnQzMl90KShzVGFtcGVyLT5UYW1wZXIgPDwgMVUpOworICAgIC8qIFNldCB0aGUgdGFtcGVyIHRyaWdnZXIgYml0IChjYXNlIG9mIGZhbGxpbmcgZWRnZSBvciBoaWdoIGxldmVsKSAqLworICAgIHRtcHJlZyB8PSAodWludDMyX3QpKHNUYW1wZXItPlRhbXBlciA8PCAxVSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogQ2xlYXIgdGhlIHRhbXBlciB0cmlnZ2VyIGJpdCAoY2FzZSBvZiByaXNpbmcgZWRnZSBvciBsb3cgbGV2ZWwpICovCisgICAgdG1wcmVnICY9ICh1aW50MzJfdCl+KHNUYW1wZXItPlRhbXBlciA8PCAxVSk7CiAgIH0KIAotICB0bXByZWcgPSAoKHVpbnQzMl90KXNUYW1wZXItPlRhbXBlciB8ICh1aW50MzJfdClzVGFtcGVyLT5UcmlnZ2VyIHwgKHVpbnQzMl90KXNUYW1wZXItPkZpbHRlciB8IFwKLSAgICAgICAgICAgICh1aW50MzJfdClzVGFtcGVyLT5TYW1wbGluZ0ZyZXF1ZW5jeSB8ICh1aW50MzJfdClzVGFtcGVyLT5QcmVjaGFyZ2VEdXJhdGlvbiB8IFwKLSAgICAgICAgICAgICh1aW50MzJfdClzVGFtcGVyLT5UYW1wZXJQdWxsVXAgfCBzVGFtcGVyLT5UaW1lU3RhbXBPblRhbXBlckRldGVjdGlvbik7CisgIC8qIENsZWFyIHJlbWFpbmluZyBmaWVsZHMgYmVmb3JlIHNldHRpbmcgdGhlbSAqLworICB0bXByZWcgJj0gfihSVENfVEFNUEVSRklMVEVSX01BU0sgICAgICAgICAgICAgIHwgXAorICAgICAgICAgICAgICBSVENfVEFNUEVSU0FNUExJTkdGUkVRX1JUQ0NMS19NQVNLIHwgXAorICAgICAgICAgICAgICBSVENfVEFNUEVSUFJFQ0hBUkdFRFVSQVRJT05fTUFTSyAgIHwgXAorICAgICAgICAgICAgICBSVENfVEFNUEVSX1BVTExVUF9NQVNLICAgICAgICAgICAgIHwgXAorICAgICAgICAgICAgICBSVENfVElNRVNUQU1QT05UQU1QRVJERVRFQ1RJT05fTUFTSyk7CiAKLSAgaHJ0Yy0+SW5zdGFuY2UtPlRBRkNSICY9ICh1aW50MzJfdCl+KCh1aW50MzJfdClzVGFtcGVyLT5UYW1wZXIgfCAodWludDMyX3QpKHNUYW1wZXItPlRhbXBlciA8PCAxVSkgfCAodWludDMyX3QpUlRDX1RBRkNSX1RBTVBUUyB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdClSVENfVEFGQ1JfVEFNUEZSRVEgfCAodWludDMyX3QpUlRDX1RBRkNSX1RBTVBGTFQgfCAodWludDMyX3QpUlRDX1RBRkNSX1RBTVBQUkNIIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KVJUQ19UQUZDUl9UQU1QUFVESVMgfCAodWludDMyX3QpUlRDX1RBRkNSX1RBTVBJRSk7CisgIC8qIFNldCByZW1haW5pbmcgcGFyYW1ldGVycyBvZiBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gaW50byB0ZW1wb3JhcnkgdmFyaWFibGUgKi8KKyAgdG1wcmVnIHw9ICgodWludDMyX3Qpc1RhbXBlci0+RmlsdGVyICAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgKHVpbnQzMl90KXNUYW1wZXItPlNhbXBsaW5nRnJlcXVlbmN5IHwgXAorICAgICAgICAgICAgICh1aW50MzJfdClzVGFtcGVyLT5QcmVjaGFyZ2VEdXJhdGlvbiB8IFwKKyAgICAgICAgICAgICAodWludDMyX3Qpc1RhbXBlci0+VGFtcGVyUHVsbFVwICAgICAgfCBcCisgICAgICAgICAgICAgKHVpbnQzMl90KXNUYW1wZXItPlRpbWVTdGFtcE9uVGFtcGVyRGV0ZWN0aW9uKTsKIAotICBocnRjLT5JbnN0YW5jZS0+VEFGQ1IgfD0gdG1wcmVnOworICAvKiBEaXNhYmxlIHRhbXBlciBnbG9iYWwgaW50ZXJydXB0IGluIGNhc2UgaXQgaXMgZW5hYmxlZCAqLworICB0bXByZWcgJj0gKHVpbnQzMl90KX5SVENfVEFGQ1JfVEFNUElFOworCisgIC8qIENvcHkgZGVzaXJlZCBjb25maWd1cmF0aW9uIGludG8gY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworICBocnRjLT5JbnN0YW5jZS0+VEFGQ1IgPSB0bXByZWc7CiAKICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwogCkBAIC0zNzAsOSArNDQ4LDEwIEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgU2V0IFRhbXBlciB3aXRoIGludGVycnVwdC4KLSAgKiBAbm90ZSAgIEJ5IGNhbGxpbmcgdGhpcyBBUEkgd2UgZm9yY2UgdGhlIHRhbXBlciBpbnRlcnJ1cHQgZm9yIGFsbCB0YW1wZXJzLgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQGJyaWVmICBTZXRzIFRhbXBlciB3aXRoIGludGVycnVwdC4KKyAgKiBAbm90ZSAgIEJ5IGNhbGxpbmcgdGhpcyBBUEkgdGhlIHRhbXBlciBnbG9iYWwgaW50ZXJydXB0IHdpbGwgYmUgZW5hYmxlZC4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcGFyYW0gIHNUYW1wZXIgUG9pbnRlciB0byBSVEMgVGFtcGVyLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtMzg0LDYgKzQ2Myw3IEBACiAgIGFzc2VydF9wYXJhbShJU19SVENfVEFNUEVSKHNUYW1wZXItPlRhbXBlcikpOwogICBhc3NlcnRfcGFyYW0oSVNfUlRDX1RBTVBFUl9UUklHR0VSKHNUYW1wZXItPlRyaWdnZXIpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19UQU1QRVJfRklMVEVSKHNUYW1wZXItPkZpbHRlcikpOworICBhc3NlcnRfcGFyYW0oSVNfUlRDX1RBTVBFUl9GSUxURVJfQ09ORklHX0NPUlJFQ1Qoc1RhbXBlci0+RmlsdGVyLCBzVGFtcGVyLT5UcmlnZ2VyKSk7CiAgIGFzc2VydF9wYXJhbShJU19SVENfVEFNUEVSX1NBTVBMSU5HX0ZSRVEoc1RhbXBlci0+U2FtcGxpbmdGcmVxdWVuY3kpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19UQU1QRVJfUFJFQ0hBUkdFX0RVUkFUSU9OKHNUYW1wZXItPlByZWNoYXJnZUR1cmF0aW9uKSk7CiAgIGFzc2VydF9wYXJhbShJU19SVENfVEFNUEVSX1BVTExVUF9TVEFURShzVGFtcGVyLT5UYW1wZXJQdWxsVXApKTsKQEAgLTM5NCwyOCArNDc0LDQ3IEBACiAKICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0JVU1k7CiAKLSAgLyogQ29uZmlndXJlIHRoZSB0YW1wZXIgdHJpZ2dlciAqLwotICBpZiAoc1RhbXBlci0+VHJpZ2dlciAhPSBSVENfVEFNUEVSVFJJR0dFUl9SSVNJTkdFREdFKQorICAvKiBDb3B5IGNvbnRyb2wgcmVnaXN0ZXIgaW50byB0ZW1wb3JhcnkgdmFyaWFibGUgKi8KKyAgdG1wcmVnID0gaHJ0Yy0+SW5zdGFuY2UtPlRBRkNSOworCisgIC8qIEVuYWJsZSBzZWxlY3RlZCB0YW1wZXIgKi8KKyAgdG1wcmVnIHw9IChzVGFtcGVyLT5UYW1wZXIpOworCisgIC8qIENvbmZpZ3VyZSB0aGUgdGFtcGVyIHRyaWdnZXIgYml0ICh0aGlzIGJpdCBpcyBqdXN0IG9uIHRoZSByaWdodCBvZiB0aGUKKyAgICAgICB0YW1wZXIgZW5hYmxlIGJpdCwgaGVuY2UgdGhlIG9uZS10aW1lIHJpZ2h0IHNoaWZ0IGJlZm9yZSB1cGRhdGluZyBpdCkgKi8KKyAgaWYgKHNUYW1wZXItPlRyaWdnZXIgPT0gUlRDX1RBTVBFUlRSSUdHRVJfRkFMTElOR0VER0UpCiAgIHsKLSAgICBzVGFtcGVyLT5UcmlnZ2VyID0gKHVpbnQzMl90KShzVGFtcGVyLT5UYW1wZXIgPDwgMVUpOworICAgIC8qIFNldCB0aGUgdGFtcGVyIHRyaWdnZXIgYml0IChjYXNlIG9mIGZhbGxpbmcgZWRnZSBvciBoaWdoIGxldmVsKSAqLworICAgIHRtcHJlZyB8PSAodWludDMyX3QpKHNUYW1wZXItPlRhbXBlciA8PCAxVSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogQ2xlYXIgdGhlIHRhbXBlciB0cmlnZ2VyIGJpdCAoY2FzZSBvZiByaXNpbmcgZWRnZSBvciBsb3cgbGV2ZWwpICovCisgICAgdG1wcmVnICY9ICh1aW50MzJfdCl+KHNUYW1wZXItPlRhbXBlciA8PCAxVSk7CiAgIH0KIAotICB0bXByZWcgPSAoKHVpbnQzMl90KXNUYW1wZXItPlRhbXBlciB8ICh1aW50MzJfdClzVGFtcGVyLT5UcmlnZ2VyIHwgKHVpbnQzMl90KXNUYW1wZXItPkZpbHRlciB8IFwKLSAgICAgICAgICAgICh1aW50MzJfdClzVGFtcGVyLT5TYW1wbGluZ0ZyZXF1ZW5jeSB8ICh1aW50MzJfdClzVGFtcGVyLT5QcmVjaGFyZ2VEdXJhdGlvbiB8IFwKLSAgICAgICAgICAgICh1aW50MzJfdClzVGFtcGVyLT5UYW1wZXJQdWxsVXAgfCBzVGFtcGVyLT5UaW1lU3RhbXBPblRhbXBlckRldGVjdGlvbik7CisgIC8qIENsZWFyIHJlbWFpbmluZyBmaWVsZHMgYmVmb3JlIHNldHRpbmcgdGhlbSAqLworICB0bXByZWcgJj0gfihSVENfVEFNUEVSRklMVEVSX01BU0sgICAgICAgICAgICAgIHwgXAorICAgICAgICAgICAgICBSVENfVEFNUEVSU0FNUExJTkdGUkVRX1JUQ0NMS19NQVNLIHwgXAorICAgICAgICAgICAgICBSVENfVEFNUEVSUFJFQ0hBUkdFRFVSQVRJT05fTUFTSyAgIHwgXAorICAgICAgICAgICAgICBSVENfVEFNUEVSX1BVTExVUF9NQVNLICAgICAgICAgICAgIHwgXAorICAgICAgICAgICAgICBSVENfVElNRVNUQU1QT05UQU1QRVJERVRFQ1RJT05fTUFTSyk7CiAKLSAgaHJ0Yy0+SW5zdGFuY2UtPlRBRkNSICY9ICh1aW50MzJfdCl+KCh1aW50MzJfdClzVGFtcGVyLT5UYW1wZXIgfCAodWludDMyX3QpKHNUYW1wZXItPlRhbXBlciA8PCAxVSkgfCAodWludDMyX3QpUlRDX1RBRkNSX1RBTVBUUyB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdClSVENfVEFGQ1JfVEFNUEZSRVEgfCAodWludDMyX3QpUlRDX1RBRkNSX1RBTVBGTFQgfCAodWludDMyX3QpUlRDX1RBRkNSX1RBTVBQUkNIIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KVJUQ19UQUZDUl9UQU1QUFVESVMpOworICAvKiBTZXQgcmVtYWluaW5nIHBhcmFtZXRlcnMgb2YgZGVzaXJlZCBjb25maWd1cmF0aW9uIGludG8gdGVtcG9yYXJ5IHZhcmlhYmxlICovCisgIHRtcHJlZyB8PSAoKHVpbnQzMl90KXNUYW1wZXItPkZpbHRlciAgICAgICAgICAgIHwgXAorICAgICAgICAgICAgICh1aW50MzJfdClzVGFtcGVyLT5TYW1wbGluZ0ZyZXF1ZW5jeSB8IFwKKyAgICAgICAgICAgICAodWludDMyX3Qpc1RhbXBlci0+UHJlY2hhcmdlRHVyYXRpb24gfCBcCisgICAgICAgICAgICAgKHVpbnQzMl90KXNUYW1wZXItPlRhbXBlclB1bGxVcCAgICAgIHwgXAorICAgICAgICAgICAgICh1aW50MzJfdClzVGFtcGVyLT5UaW1lU3RhbXBPblRhbXBlckRldGVjdGlvbik7CiAKLSAgaHJ0Yy0+SW5zdGFuY2UtPlRBRkNSIHw9IHRtcHJlZzsKKyAgLyogRW5hYmxlIGdsb2JhbCB0YW1wZXIgaW50ZXJydXB0ICovCisgIHRtcHJlZyB8PSAodWludDMyX3QpUlRDX1RBRkNSX1RBTVBJRTsKIAotICAvKiBDb25maWd1cmUgdGhlIFRhbXBlciBJbnRlcnJ1cHQgaW4gdGhlIFJUQ19UQUZDUiAqLwotICBocnRjLT5JbnN0YW5jZS0+VEFGQ1IgfD0gKHVpbnQzMl90KVJUQ19UQUZDUl9UQU1QSUU7CisgIC8qIENvcHkgZGVzaXJlZCBjb25maWd1cmF0aW9uIGludG8gY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworICBocnRjLT5JbnN0YW5jZS0+VEFGQ1IgPSB0bXByZWc7CiAKICAgLyogUlRDIFRhbXBlciBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbjogRVhUSSBjb25maWd1cmF0aW9uICovCiAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRU5BQkxFX0lUKCk7Ci0KICAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKTsKIAogICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CkBAIC00MjcsMTEgKzUyNiwxNiBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIERlYWN0aXZhdGUgVGFtcGVyLgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQGJyaWVmICBEZWFjdGl2YXRlcyBUYW1wZXIuCisgICogQG5vdGUgICBUaGUgdGFtcGVyIGdsb2JhbCBpbnRlcnJ1cHQgYml0IHdpbGwgcmVtYWluIHVuY2hhbmdlZC4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcGFyYW0gIFRhbXBlciBTZWxlY3RlZCB0YW1wZXIgcGluLgotICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgUlRDX1RBTVBFUl8xLCBSVENfVEFNUEVSXzIgYW5kIFJUQ19UQU1QRVJfMyAoKikKLSAgKiBAbm90ZSAgICgqKSBSVENfVEFNUEVSXzMgbm90IHByZXNlbnQgb24gYWxsIHRoZSBkZXZpY2VzCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX1RBTVBFUl8xOiAgVGFtcGVyIDEKKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX1RBTVBFUl8yOiAgVGFtcGVyIDIKKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX1RBTVBFUl8zOiAgVGFtcGVyIDMKKyAgKiBAbm90ZSAgIFJUQ19UQU1QRVJfMyBpcyBub3QgYXBwbGljYWJsZSB0byBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9EZWFjdGl2YXRlVGFtcGVyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBUYW1wZXIpCkBAIC00NTUsOTYgKzU1OSw5OSBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIEhhbmRsZSBUaW1lU3RhbXAgaW50ZXJydXB0IHJlcXVlc3QuCi0gICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAYnJpZWYgIEhhbmRsZXMgVGltZXN0YW1wIGFuZCBUYW1wZXIgaW50ZXJydXB0IHJlcXVlc3QuCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCiAgICogQHJldHZhbCBOb25lCiAgICovCiB2b2lkIEhBTF9SVENFeF9UYW1wZXJUaW1lU3RhbXBJUlFIYW5kbGVyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQogewotICAvKiBHZXQgdGhlIFRpbWVTdGFtcCBpbnRlcnJ1cHQgc291cmNlIGVuYWJsZSBzdGF0dXMgKi8KLSAgaWYgKF9fSEFMX1JUQ19USU1FU1RBTVBfR0VUX0lUX1NPVVJDRShocnRjLCBSVENfSVRfVFMpICE9IFJFU0VUKQorICAvKiBDbGVhciB0aGUgRVhUSSdzIEZsYWcgZm9yIFJUQyBUaW1lc3RhbXAgYW5kIFRhbXBlciAqLworICBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0NMRUFSX0ZMQUcoKTsKKworICAvKiBHZXQgdGhlIFRpbWVzdGFtcCBpbnRlcnJ1cHQgc291cmNlIGVuYWJsZSBzdGF0dXMgKi8KKyAgaWYgKF9fSEFMX1JUQ19USU1FU1RBTVBfR0VUX0lUX1NPVVJDRShocnRjLCBSVENfSVRfVFMpICE9IDBVKQogICB7Ci0gICAgLyogR2V0IHRoZSBwZW5kaW5nIHN0YXR1cyBvZiB0aGUgVElNRVNUQU1QIEludGVycnVwdCAqLwotICAgIGlmIChfX0hBTF9SVENfVElNRVNUQU1QX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1RTRikgIT0gUkVTRVQpCisgICAgLyogR2V0IHRoZSBwZW5kaW5nIHN0YXR1cyBvZiB0aGUgVGltZXN0YW1wIEludGVycnVwdCAqLworICAgIGlmIChfX0hBTF9SVENfVElNRVNUQU1QX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1RTRikgIT0gMFUpCiAgICAgewotICAgICAgLyogVElNRVNUQU1QIGNhbGxiYWNrICovCisgICAgICAvKiBUaW1lc3RhbXAgY2FsbGJhY2sgKi8KICNpZiAoVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgICAgICBocnRjLT5UaW1lU3RhbXBFdmVudENhbGxiYWNrKGhydGMpOwogI2Vsc2UKICAgICAgIEhBTF9SVENFeF9UaW1lU3RhbXBFdmVudENhbGxiYWNrKGhydGMpOwogI2VuZGlmIC8qIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCi0gICAgICAvKiBDbGVhciB0aGUgVElNRVNUQU1QIGludGVycnVwdCBwZW5kaW5nIGJpdCAqLworICAgICAgLyogQ2xlYXIgdGhlIFRpbWVzdGFtcCBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgYWZ0ZXIgcmV0dXJuaW5nIGZyb20gY2FsbGJhY2sKKyAgICAgICAgIGFzIFJUQ19UU1RSIGFuZCBSVENfVFNEUiByZWdpc3RlcnMgYXJlIGNsZWFyZWQgd2hlbiBUU0YgYml0IGlzIHJlc2V0ICovCiAgICAgICBfX0hBTF9SVENfVElNRVNUQU1QX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfVFNGKTsKICAgICB9CiAgIH0KIAotICAvKiBHZXQgdGhlIFRhbXBlciBpbnRlcnJ1cHRzIHNvdXJjZSBlbmFibGUgc3RhdHVzICovCi0gIGlmIChfX0hBTF9SVENfVEFNUEVSX0dFVF9JVF9TT1VSQ0UoaHJ0YywgUlRDX0lUX1RBTVApKQorICAvKiBHZXQgdGhlIFRhbXBlciAxIGludGVycnVwdCBzb3VyY2UgZW5hYmxlIHN0YXR1cyAqLworICBpZiAoX19IQUxfUlRDX1RBTVBFUl9HRVRfSVRfU09VUkNFKGhydGMsIFJUQ19JVF9UQU1QKSAhPSAwVSkKICAgewotICAgIC8qIEdldCB0aGUgcGVuZGluZyBzdGF0dXMgb2YgdGhlIFRhbXBlcjEgSW50ZXJydXB0ICovCi0gICAgaWYgKF9fSEFMX1JUQ19UQU1QRVJfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfVEFNUDFGKSAhPSBSRVNFVCkKKyAgICAvKiBHZXQgdGhlIHBlbmRpbmcgc3RhdHVzIG9mIHRoZSBUYW1wZXIgMSBJbnRlcnJ1cHQgKi8KKyAgICBpZiAoX19IQUxfUlRDX1RBTVBFUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19UQU1QMUYpICE9IDBVKQogICAgIHsKLSAgICAgIC8qIFRhbXBlcjEgY2FsbGJhY2sgKi8KKyAgICAgIC8qIENsZWFyIHRoZSBUYW1wZXIgaW50ZXJydXB0IHBlbmRpbmcgYml0ICovCisgICAgICBfX0hBTF9SVENfVEFNUEVSX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfVEFNUDFGKTsKKworICAgICAgLyogVGFtcGVyIGNhbGxiYWNrICovCiAjaWYgKFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICAgICAgaHJ0Yy0+VGFtcGVyMUV2ZW50Q2FsbGJhY2soaHJ0Yyk7CiAjZWxzZQogICAgICAgSEFMX1JUQ0V4X1RhbXBlcjFFdmVudENhbGxiYWNrKGhydGMpOwogI2VuZGlmIC8qIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyAqLwotCi0gICAgICAvKiBDbGVhciB0aGUgVGFtcGVyMSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgKi8KLSAgICAgIF9fSEFMX1JUQ19UQU1QRVJfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19UQU1QMUYpOwogICAgIH0KICAgfQogCi0gIC8qIEdldCB0aGUgVGFtcGVyIGludGVycnVwdHMgc291cmNlIGVuYWJsZSBzdGF0dXMgKi8KLSAgaWYgKF9fSEFMX1JUQ19UQU1QRVJfR0VUX0lUX1NPVVJDRShocnRjLCBSVENfSVRfVEFNUCkpCisgIC8qIEdldCB0aGUgVGFtcGVyIDIgaW50ZXJydXB0IHNvdXJjZSBlbmFibGUgc3RhdHVzICovCisgIGlmIChfX0hBTF9SVENfVEFNUEVSX0dFVF9JVF9TT1VSQ0UoaHJ0YywgUlRDX0lUX1RBTVApICE9IDBVKQogICB7Ci0gICAgLyogR2V0IHRoZSBwZW5kaW5nIHN0YXR1cyBvZiB0aGUgVGFtcGVyMiBJbnRlcnJ1cHQgKi8KLSAgICBpZiAoX19IQUxfUlRDX1RBTVBFUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19UQU1QMkYpICE9IFJFU0VUKQorICAgIC8qIEdldCB0aGUgcGVuZGluZyBzdGF0dXMgb2YgdGhlIFRhbXBlciAyIEludGVycnVwdCAqLworICAgIGlmIChfX0hBTF9SVENfVEFNUEVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1RBTVAyRikgIT0gMFUpCiAgICAgewotICAgICAgLyogVGFtcGVyMiBjYWxsYmFjayAqLworICAgICAgLyogQ2xlYXIgdGhlIFRhbXBlciBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgKi8KKyAgICAgIF9fSEFMX1JUQ19UQU1QRVJfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19UQU1QMkYpOworCisgICAgICAvKiBUYW1wZXIgY2FsbGJhY2sgKi8KICNpZiAoVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgICAgICBocnRjLT5UYW1wZXIyRXZlbnRDYWxsYmFjayhocnRjKTsKICNlbHNlCiAgICAgICBIQUxfUlRDRXhfVGFtcGVyMkV2ZW50Q2FsbGJhY2soaHJ0Yyk7CiAjZW5kaWYgLyogVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTICovCi0KLSAgICAgIC8qIENsZWFyIHRoZSBUYW1wZXIyIGludGVycnVwdCBwZW5kaW5nIGJpdCAqLwotICAgICAgX19IQUxfUlRDX1RBTVBFUl9DTEVBUl9GTEFHKGhydGMsIFJUQ19GTEFHX1RBTVAyRik7CiAgICAgfQogICB9CiAKICNpZiBkZWZpbmVkKFJUQ19UQU1QRVIzX1NVUFBPUlQpCi0gIC8qIEdldCB0aGUgVGFtcGVyIGludGVycnVwdHMgc291cmNlIGVuYWJsZSBzdGF0dXMgKi8KLSAgaWYgKF9fSEFMX1JUQ19UQU1QRVJfR0VUX0lUX1NPVVJDRShocnRjLCBSVENfSVRfVEFNUCkpCisgIC8qIEdldCB0aGUgVGFtcGVyIDMgaW50ZXJydXB0IHNvdXJjZSBlbmFibGUgc3RhdHVzICovCisgIGlmIChfX0hBTF9SVENfVEFNUEVSX0dFVF9JVF9TT1VSQ0UoaHJ0YywgUlRDX0lUX1RBTVApICE9IDBVKQogICB7Ci0gICAgLyogR2V0IHRoZSBwZW5kaW5nIHN0YXR1cyBvZiB0aGUgVGFtcGVyMyBJbnRlcnJ1cHQgKi8KLSAgICBpZiAoX19IQUxfUlRDX1RBTVBFUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19UQU1QM0YpICE9IFJFU0VUKQorICAgIC8qIEdldCB0aGUgcGVuZGluZyBzdGF0dXMgb2YgdGhlIFRhbXBlciAzIEludGVycnVwdCAqLworICAgIGlmIChfX0hBTF9SVENfVEFNUEVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1RBTVAzRikgIT0gMFUpCiAgICAgewotICAgICAgLyogVGFtcGVyMyBjYWxsYmFjayAqLworICAgICAgLyogQ2xlYXIgdGhlIFRhbXBlciBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgKi8KKyAgICAgIF9fSEFMX1JUQ19UQU1QRVJfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19UQU1QM0YpOworCisgICAgICAvKiBUYW1wZXIgY2FsbGJhY2sgKi8KICNpZiAoVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgICAgICBocnRjLT5UYW1wZXIzRXZlbnRDYWxsYmFjayhocnRjKTsKICNlbHNlCiAgICAgICBIQUxfUlRDRXhfVGFtcGVyM0V2ZW50Q2FsbGJhY2soaHJ0Yyk7CiAjZW5kaWYgLyogVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTICovCi0KLSAgICAgIC8qIENsZWFyIHRoZSBUYW1wZXIzIGludGVycnVwdCBwZW5kaW5nIGJpdCAqLwotICAgICAgX19IQUxfUlRDX1RBTVBFUl9DTEVBUl9GTEFHKGhydGMsIFJUQ19GTEFHX1RBTVAzRik7CiAgICAgfQogICB9CiAjZW5kaWYgLyogUlRDX1RBTVBFUjNfU1VQUE9SVCAqLwogCi0gIC8qIENsZWFyIHRoZSBFWFRJJ3MgRmxhZyBmb3IgUlRDIFRpbWVTdGFtcCBhbmQgVGFtcGVyICovCi0gIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfQ0xFQVJfRkxBRygpOwotCiAgIC8qIENoYW5nZSBSVEMgc3RhdGUgKi8KICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwogfQogCiAvKioKLSAgKiBAYnJpZWYgIFRpbWVTdGFtcCBjYWxsYmFjay4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEBicmllZiAgVGltZXN0YW1wIGNhbGxiYWNrLgorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX193ZWFrIHZvaWQgSEFMX1JUQ0V4X1RpbWVTdGFtcEV2ZW50Q2FsbGJhY2soUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCkBAIC01NTIsMTQgKzY1OSwxNSBAQAogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChocnRjKTsKIAotICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCi0gICAgICAgICAgICB0aGUgSEFMX1JUQ0V4X1RpbWVTdGFtcEV2ZW50Q2FsbGJhY2sgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQorICAvKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgdGhlIEhBTF9SVENFeF9UaW1lU3RhbXBFdmVudENhbGxiYWNrIGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKICAgKi8KIH0KIAogLyoqCiAgICogQGJyaWVmICBUYW1wZXIgMSBjYWxsYmFjay4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX193ZWFrIHZvaWQgSEFMX1JUQ0V4X1RhbXBlcjFFdmVudENhbGxiYWNrKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQpAQCAtNTY3LDE0ICs2NzUsMTUgQEAKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaHJ0Yyk7CiAKLSAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAotICAgICAgICAgICAgdGhlIEhBTF9SVENFeF9UYW1wZXIxRXZlbnRDYWxsYmFjayBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisgIC8qIE5PVEU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICB0aGUgSEFMX1JUQ0V4X1RhbXBlcjFFdmVudENhbGxiYWNrIGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKICAgICovCiB9CiAKIC8qKgogICAqIEBicmllZiAgVGFtcGVyIDIgY2FsbGJhY2suCi0gICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fd2VhayB2b2lkIEhBTF9SVENFeF9UYW1wZXIyRXZlbnRDYWxsYmFjayhSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKQEAgLTU4MiwxNSArNjkxLDE2IEBACiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKGhydGMpOwogCi0gIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKLSAgICAgICAgICAgIHRoZSBIQUxfUlRDRXhfVGFtcGVyMkV2ZW50Q2FsbGJhY2sgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQorICAvKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgdGhlIEhBTF9SVENFeF9UYW1wZXIyRXZlbnRDYWxsYmFjayBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCiAgICAqLwogfQogCiAjaWYgZGVmaW5lZChSVENfVEFNUEVSM19TVVBQT1JUKQogLyoqCiAgICogQGJyaWVmICBUYW1wZXIgMyBjYWxsYmFjay4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX193ZWFrIHZvaWQgSEFMX1JUQ0V4X1RhbXBlcjNFdmVudENhbGxiYWNrKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQpAQCAtNTk4LDM1ICs3MDgsMjggQEAKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaHJ0Yyk7CiAKLSAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAotICAgICAgICAgICAgdGhlIEhBTF9SVENFeF9UYW1wZXIzRXZlbnRDYWxsYmFjayBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisgIC8qIE5PVEU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICB0aGUgSEFMX1JUQ0V4X1RhbXBlcjNFdmVudENhbGxiYWNrIGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKICAgICovCiB9CiAjZW5kaWYgLyogUlRDX1RBTVBFUjNfU1VQUE9SVCAqLwogCiAvKioKLSAgKiBAYnJpZWYgIEhhbmRsZSBUaW1lU3RhbXAgcG9sbGluZyByZXF1ZXN0LgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQGJyaWVmICBIYW5kbGVzIFRpbWVzdGFtcCBwb2xsaW5nIHJlcXVlc3QuCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9Qb2xsRm9yVGltZVN0YW1wRXZlbnQoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIHVpbnQzMl90IFRpbWVvdXQpCiB7Ci0gIHVpbnQzMl90IHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CisgIHVpbnQzMl90IHRpY2tzdGFydCA9IDBVOwogCi0gIHdoaWxlIChfX0hBTF9SVENfVElNRVNUQU1QX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1RTRikgPT0gUkVTRVQpCisgIC8qIEdldCB0aWNrICovCisgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CisKKyAgd2hpbGUgKF9fSEFMX1JUQ19USU1FU1RBTVBfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfVFNGKSA9PSAwVSkKICAgewotICAgIGlmIChfX0hBTF9SVENfVElNRVNUQU1QX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1RTT1ZGKSAhPSBSRVNFVCkKLSAgICB7Ci0gICAgICAvKiBDbGVhciB0aGUgVElNRVNUQU1QIE92ZXJSdW4gRmxhZyAqLwotICAgICAgX19IQUxfUlRDX1RJTUVTVEFNUF9DTEVBUl9GTEFHKGhydGMsIFJUQ19GTEFHX1RTT1ZGKTsKLQotICAgICAgLyogQ2hhbmdlIFRJTUVTVEFNUCBzdGF0ZSAqLwotICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgIH0KLQogICAgIGlmIChUaW1lb3V0ICE9IEhBTF9NQVhfREVMQVkpCiAgICAgewogICAgICAgaWYgKChUaW1lb3V0ID09IDBVKSB8fCAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gVGltZW91dCkpCkBAIC02MzUsNiArNzM4LDE3IEBACiAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICAgIH0KICAgICB9CisKKyAgICBpZiAoX19IQUxfUlRDX1RJTUVTVEFNUF9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19UU09WRikgIT0gMFUpCisgICAgeworICAgICAgLyogQ2xlYXIgdGhlIFRpbWVzdGFtcCBPdmVycnVuIEZsYWcgKi8KKyAgICAgIF9fSEFMX1JUQ19USU1FU1RBTVBfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19UU09WRik7CisKKyAgICAgIC8qIENoYW5nZSBUaW1lc3RhbXAgc3RhdGUgKi8KKyAgICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9FUlJPUjsKKworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CiAgIH0KIAogICAvKiBDaGFuZ2UgUlRDIHN0YXRlICovCkBAIC02NDQsMTcgKzc1OCwyMSBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIEhhbmRsZSBUYW1wZXIgMSBQb2xsaW5nLgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQGJyaWVmICBIYW5kbGVzIFRhbXBlciAxIFBvbGxpbmcuCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9Qb2xsRm9yVGFtcGVyMUV2ZW50KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBUaW1lb3V0KQogewotICB1aW50MzJfdCB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworICB1aW50MzJfdCB0aWNrc3RhcnQgPSAwVTsKKworICAvKiBHZXQgdGljayAqLworICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCiAgIC8qIEdldCB0aGUgc3RhdHVzIG9mIHRoZSBJbnRlcnJ1cHQgKi8KLSAgd2hpbGUgKF9fSEFMX1JUQ19UQU1QRVJfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfVEFNUDFGKSA9PSBSRVNFVCkKKyAgd2hpbGUgKF9fSEFMX1JUQ19UQU1QRVJfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfVEFNUDFGKSA9PSAwVSkKICAgewogICAgIGlmIChUaW1lb3V0ICE9IEhBTF9NQVhfREVMQVkpCiAgICAgewpAQCAtNjc2LDE3ICs3OTQsMjEgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBIYW5kbGUgVGFtcGVyIDIgUG9sbGluZy4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEBicmllZiAgSGFuZGxlcyBUYW1wZXIgMiBQb2xsaW5nLgorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfUG9sbEZvclRhbXBlcjJFdmVudChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgVGltZW91dCkKIHsKLSAgdWludDMyX3QgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKyAgdWludDMyX3QgdGlja3N0YXJ0ID0gMFU7CisKKyAgLyogR2V0IHRpY2sgKi8KKyAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKIAogICAvKiBHZXQgdGhlIHN0YXR1cyBvZiB0aGUgSW50ZXJydXB0ICovCi0gIHdoaWxlIChfX0hBTF9SVENfVEFNUEVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1RBTVAyRikgPT0gUkVTRVQpCisgIHdoaWxlIChfX0hBTF9SVENfVEFNUEVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1RBTVAyRikgPT0gMFUpCiAgIHsKICAgICBpZiAoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKQogICAgIHsKQEAgLTcwOSw4ICs4MzEsOSBAQAogCiAjaWYgZGVmaW5lZChSVENfVEFNUEVSM19TVVBQT1JUKQogLyoqCi0gICogQGJyaWVmICBIYW5kbGUgVGFtcGVyIDMgUG9sbGluZy4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEBicmllZiAgSGFuZGxlcyBUYW1wZXIgMyBQb2xsaW5nLgorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCkBAIC03MTksNyArODQyLDcgQEAKICAgdWludDMyX3QgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKIAogICAvKiBHZXQgdGhlIHN0YXR1cyBvZiB0aGUgSW50ZXJydXB0ICovCi0gIHdoaWxlIChfX0hBTF9SVENfVEFNUEVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1RBTVAzRikgPT0gUkVTRVQpCisgIHdoaWxlIChfX0hBTF9SVENfVEFNUEVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1RBTVAzRikgPT0gMFUpCiAgIHsKICAgICBpZiAoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKQogICAgIHsKQEAgLTc0NSwyNSArODY4LDI2IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBhZGR0b2dyb3VwIFJUQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIKLSAgKiBAYnJpZWYgICAgUlRDIFdha2UtdXAgZnVuY3Rpb25zCisvKiogQGRlZmdyb3VwIFJUQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIgUlRDIFdha2V1cCBmdW5jdGlvbnMKKyAgKiBAYnJpZWYgICAgUlRDIFdha2V1cCBmdW5jdGlvbnMKICAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgUlRDIFdha2UtdXAgZnVuY3Rpb25zICMjIyMjCisgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBSVEMgV2FrZXVwIGZ1bmN0aW9ucyAjIyMjIwogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotIFsuLl0gVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBjb25maWd1cmUgV2FrZS11cCBmZWF0dXJlCisgWy4uXSBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvIGNvbmZpZ3VyZSBXYWtldXAgZmVhdHVyZQogCiBAZW5kdmVyYmF0aW0KICAgKiBAewogICAqLwogCiAvKioKLSAgKiBAYnJpZWYgIFNldCB3YWtlIHVwIHRpbWVyLgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCi0gICogQHBhcmFtICBXYWtlVXBDb3VudGVyIFdha2UgdXAgY291bnRlcgotICAqIEBwYXJhbSAgV2FrZVVwQ2xvY2sgV2FrZSB1cCBjbG9jaworICAqIEBicmllZiAgU2V0cyB3YWtldXAgdGltZXIuCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCisgICogQHBhcmFtICBXYWtlVXBDb3VudGVyIFdha2V1cCBjb3VudGVyCisgICogQHBhcmFtICBXYWtlVXBDbG9jayBXYWtldXAgY2xvY2sKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9TZXRXYWtlVXBUaW1lcihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgV2FrZVVwQ291bnRlciwgdWludDMyX3QgV2FrZVVwQ2xvY2spCkBAIC03ODIsMTMgKzkwNiwxMyBAQAogICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKIAotICAvKkNoZWNrIFJUQyBXVVRXRiBmbGFnIGlzIHJlc2V0IG9ubHkgd2hlbiB3YWtlIHVwIHRpbWVyIGVuYWJsZWQqLwotICBpZiAoKGhydGMtPkluc3RhbmNlLT5DUiAmIFJUQ19DUl9XVVRFKSAhPSBSRVNFVCkKKyAgLyogQ2hlY2sgUlRDIFdVVFdGIGZsYWcgaXMgcmVzZXQgb25seSB3aGVuIHdha2V1cCB0aW1lciBlbmFibGVkKi8KKyAgaWYgKChocnRjLT5JbnN0YW5jZS0+Q1IgJiBSVENfQ1JfV1VURSkgIT0gMFUpCiAgIHsKICAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCi0gICAgLyogV2FpdCB0aWxsIFJUQyBXVVRXRiBmbGFnIGlzIHJlc2V0IGFuZCBpZiBUaW1lIG91dCBpcyByZWFjaGVkIGV4aXQgKi8KLSAgICB3aGlsZSAoX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1dVVFdGKSA9PSBTRVQpCisgICAgLyogV2FpdCB0aWxsIFJUQyBXVVRXRiBmbGFnIGlzIHJlc2V0IGFuZCBpZiB0aW1lb3V0IGlzIHJlYWNoZWQgZXhpdCAqLworICAgIHdoaWxlIChfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VUV0YpICE9IDBVKQogICAgIHsKICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBSVENfVElNRU9VVF9WQUxVRSkKICAgICAgIHsKQEAgLTgwNSwxMiArOTI5LDE3IEBACiAgICAgfQogICB9CiAKKyAgLyogRGlzYWJsZSB0aGUgV2FrZXVwIHRpbWVyICovCiAgIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9ESVNBQkxFKGhydGMpOwogCisgIC8qIENsZWFyIHRoZSBXYWtldXAgZmxhZyAqLworICBfX0hBTF9SVENfV0FLRVVQVElNRVJfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19XVVRGKTsKKworICAvKiBHZXQgdGljayAqLwogICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCi0gIC8qIFdhaXQgdGlsbCBSVEMgV1VUV0YgZmxhZyBpcyBzZXQgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLwotICB3aGlsZSAoX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1dVVFdGKSA9PSBSRVNFVCkKKyAgLyogV2FpdCB0aWxsIFJUQyBXVVRXRiBmbGFnIGlzIHNldCBhbmQgaWYgdGltZW91dCBpcyByZWFjaGVkIGV4aXQgKi8KKyAgd2hpbGUgKF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19XVVRXRikgPT0gMFUpCiAgIHsKICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCiAgICAgewpAQCAtODUwLDE1ICs5NzksMTYgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBTZXQgd2FrZSB1cCB0aW1lciB3aXRoIGludGVycnVwdC4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQotICAqIEBwYXJhbSAgV2FrZVVwQ291bnRlciBXYWtlIHVwIGNvdW50ZXIKLSAgKiBAcGFyYW0gIFdha2VVcENsb2NrIFdha2UgdXAgY2xvY2sKKyAgKiBAYnJpZWYgIFNldHMgd2FrZXVwIHRpbWVyIHdpdGggaW50ZXJydXB0LgorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgorICAqIEBwYXJhbSAgV2FrZVVwQ291bnRlciBXYWtldXAgY291bnRlcgorICAqIEBwYXJhbSAgV2FrZVVwQ2xvY2sgV2FrZXVwIGNsb2NrCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfU2V0V2FrZVVwVGltZXJfSVQoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIHVpbnQzMl90IFdha2VVcENvdW50ZXIsIHVpbnQzMl90IFdha2VVcENsb2NrKQogewotICB1aW50MzJfdCB0aWNrc3RhcnQgPSAwVTsKKyAgX19JTyB1aW50MzJfdCBjb3VudCAgPSBSVENfVElNRU9VVF9WQUxVRSAqIChTeXN0ZW1Db3JlQ2xvY2sgLyAzMlUgLyAxMDAwVSk7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19XQUtFVVBfQ0xPQ0soV2FrZVVwQ2xvY2spKTsKQEAgLTg3MiwxNSArMTAwMiwxNCBAQAogICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKIAotICAvKkNoZWNrIFJUQyBXVVRXRiBmbGFnIGlzIHJlc2V0IG9ubHkgd2hlbiB3YWtlIHVwIHRpbWVyIGVuYWJsZWQqLwotICBpZiAoKGhydGMtPkluc3RhbmNlLT5DUiAmIFJUQ19DUl9XVVRFKSAhPSBSRVNFVCkKKyAgLyogQ2hlY2sgUlRDIFdVVFdGIGZsYWcgaXMgcmVzZXQgb25seSB3aGVuIHdha2V1cCB0aW1lciBlbmFibGVkICovCisgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX1dVVEUpICE9IDBVKQogICB7Ci0gICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKLQotICAgIC8qIFdhaXQgdGlsbCBSVEMgV1VUV0YgZmxhZyBpcyByZXNldCBhbmQgaWYgVGltZSBvdXQgaXMgcmVhY2hlZCBleGl0ICovCi0gICAgd2hpbGUgKF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19XVVRXRikgPT0gU0VUKQorICAgIC8qIFdhaXQgdGlsbCBSVEMgV1VUV0YgZmxhZyBpcyByZXNldCBhbmQgaWYgdGltZW91dCBpcyByZWFjaGVkIGV4aXQgKi8KKyAgICBkbwogICAgIHsKLSAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBSVENfVElNRU9VVF9WQUxVRSkKKyAgICAgIGNvdW50ID0gY291bnQgLSAxVTsKKyAgICAgIGlmIChjb3VudCA9PSAwVSkKICAgICAgIHsKICAgICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgICAgICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwpAQCAtODkyLDIxICsxMDIxLDIzIEBACiAKICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgICAgfQotICAgIH0KKyAgICB9IHdoaWxlIChfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VUV0YpICE9IDBVKTsKICAgfQogCi0gIC8qIERpc2FibGUgdGhlIFdha2UtVXAgdGltZXIgKi8KKyAgLyogRGlzYWJsZSB0aGUgV2FrZXVwIHRpbWVyICovCiAgIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9ESVNBQkxFKGhydGMpOwogCi0gIC8qIENsZWFyIGZsYWcgV2FrZS1VcCAqLworICAvKiBDbGVhciB0aGUgV2FrZXVwIGZsYWcgKi8KICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VURik7CiAKLSAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKyAgLyogUmVsb2FkIHRoZSBjb3VudGVyICovCisgIGNvdW50ID0gUlRDX1RJTUVPVVRfVkFMVUUgKiAoU3lzdGVtQ29yZUNsb2NrIC8gMzJVIC8gMTAwMFUpOwogCi0gIC8qIFdhaXQgdGlsbCBSVEMgV1VUV0YgZmxhZyBpcyBzZXQgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLwotICB3aGlsZSAoX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1dVVFdGKSA9PSBSRVNFVCkKKyAgLyogV2FpdCB0aWxsIFJUQyBXVVRXRiBmbGFnIGlzIHNldCBhbmQgaWYgdGltZW91dCBpcyByZWFjaGVkIGV4aXQgKi8KKyAgZG8KICAgewotICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBSVENfVElNRU9VVF9WQUxVRSkKKyAgICBjb3VudCA9IGNvdW50IC0gMVU7CisgICAgaWYgKGNvdW50ID09IDBVKQogICAgIHsKICAgICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CkBAIC05MTgsMTAgKzEwNDksNyBAQAogCiAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQotICB9Ci0KLSAgLyogQ29uZmlndXJlIHRoZSBXYWtldXAgVGltZXIgY291bnRlciAqLwotICBocnRjLT5JbnN0YW5jZS0+V1VUUiA9ICh1aW50MzJfdClXYWtlVXBDb3VudGVyOworICB9IHdoaWxlIChfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VUV0YpID09IDBVKTsKIAogICAvKiBDbGVhciB0aGUgV2FrZXVwIFRpbWVyIGNsb2NrIHNvdXJjZSBiaXRzIGluIENSIHJlZ2lzdGVyICovCiAgIGhydGMtPkluc3RhbmNlLT5DUiAmPSAodWludDMyX3QpflJUQ19DUl9XVUNLU0VMOwpAQCAtOTI5LDEyICsxMDU3LDE0IEBACiAgIC8qIENvbmZpZ3VyZSB0aGUgY2xvY2sgc291cmNlICovCiAgIGhydGMtPkluc3RhbmNlLT5DUiB8PSAodWludDMyX3QpV2FrZVVwQ2xvY2s7CiAKLSAgLyogUlRDIFdha2VVcFRpbWVyIEludGVycnVwdCBDb25maWd1cmF0aW9uOiBFWFRJIGNvbmZpZ3VyYXRpb24gKi8KLSAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX0lUKCk7CisgIC8qIENvbmZpZ3VyZSB0aGUgV2FrZXVwIFRpbWVyIGNvdW50ZXIgKi8KKyAgaHJ0Yy0+SW5zdGFuY2UtPldVVFIgPSAodWludDMyX3QpV2FrZVVwQ291bnRlcjsKIAorICAvKiBSVEMgd2FrZXVwIHRpbWVyIEludGVycnVwdCBDb25maWd1cmF0aW9uOiBFWFRJIGNvbmZpZ3VyYXRpb24gKi8KKyAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX0lUKCk7CiAgIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9SSVNJTkdfRURHRSgpOwogCi0gIC8qIENvbmZpZ3VyZSB0aGUgSW50ZXJydXB0IGluIHRoZSBSVENfQ1IgcmVnaXN0ZXIgKi8KKyAgLyogQ29uZmlndXJlIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIFJUQ19DUiByZWdpc3RlciAqLwogICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRU5BQkxFX0lUKGhydGMsIFJUQ19JVF9XVVQpOwogCiAgIC8qIEVuYWJsZSB0aGUgV2FrZXVwIFRpbWVyICovCkBAIC05NTIsMTEgKzEwODIsMTIgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBEZWFjdGl2YXRlIHdha2UgdXAgdGltZXIgY291bnRlci4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEBicmllZiAgRGVhY3RpdmF0ZXMgd2FrZXVwIHRpbWVyIGNvdW50ZXIuCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi11aW50MzJfdCBIQUxfUlRDRXhfRGVhY3RpdmF0ZVdha2VVcFRpbWVyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X0RlYWN0aXZhdGVXYWtlVXBUaW1lcihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKIHsKICAgdWludDMyX3QgdGlja3N0YXJ0ID0gMFU7CiAKQEAgLTk3NCw5ICsxMTA1LDExIEBACiAgIC8qIEluIGNhc2Ugb2YgaW50ZXJydXB0IG1vZGUgaXMgdXNlZCwgdGhlIGludGVycnVwdCBzb3VyY2UgbXVzdCBkaXNhYmxlZCAqLwogICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRElTQUJMRV9JVChocnRjLCBSVENfSVRfV1VUKTsKIAorICAvKiBHZXQgdGljayAqLwogICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwotICAvKiBXYWl0IHRpbGwgUlRDIFdVVFdGIGZsYWcgaXMgc2V0IGFuZCBpZiBUaW1lIG91dCBpcyByZWFjaGVkIGV4aXQgKi8KLSAgd2hpbGUgKF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19XVVRXRikgPT0gUkVTRVQpCisKKyAgLyogV2FpdCB0aWxsIFJUQyBXVVRXRiBmbGFnIGlzIHNldCBhbmQgaWYgdGltZW91dCBpcyByZWFjaGVkIGV4aXQgKi8KKyAgd2hpbGUgKF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19XVVRXRikgPT0gMFUpCiAgIHsKICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCiAgICAgewpAQCAtMTAwNCw4ICsxMTM3LDkgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBHZXQgd2FrZSB1cCB0aW1lciBjb3VudGVyLgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQGJyaWVmICBHZXRzIHdha2V1cCB0aW1lciBjb3VudGVyLgorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgQ291bnRlciB2YWx1ZQogICAqLwogdWludDMyX3QgSEFMX1JUQ0V4X0dldFdha2VVcFRpbWVyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQpAQCAtMTAxNSwzNiArMTE0OSw0MyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIEhhbmRsZSBXYWtlIFVwIFRpbWVyIGludGVycnVwdCByZXF1ZXN0LgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQGJyaWVmICBIYW5kbGVzIFdha2V1cCBUaW1lciBpbnRlcnJ1cHQgcmVxdWVzdC4KKyAgKiBAbm90ZSAgIFVubGlrZSBhbGFybSBpbnRlcnJ1cHQgbGluZSAoc2hhcmVkIGJ5IEFsYXJtcyBBIGFuZCBCKSBvciB0YW1wZXIKKyAgKiAgICAgICAgIGludGVycnVwdCBsaW5lIChzaGFyZWQgYnkgdGltZXN0YW1wIGFuZCB0YW1wZXJzKSB3YWtldXAgdGltZXIKKyAgKiAgICAgICAgIGludGVycnVwdCBsaW5lIGlzIGV4Y2x1c2l2ZSB0byB0aGUgd2FrZXVwIHRpbWVyLgorICAqICAgICAgICAgVGhlcmUgaXMgbm8gbmVlZCBpbiB0aGlzIGNhc2UgdG8gY2hlY2sgb24gdGhlIGludGVycnVwdCBlbmFibGUKKyAgKiAgICAgICAgIHN0YXR1cyB2aWEgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9JVF9TT1VSQ0UoKS4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIHZvaWQgSEFMX1JUQ0V4X1dha2VVcFRpbWVySVJRSGFuZGxlcihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKIHsKLSAgLyogR2V0IHRoZSBwZW5kaW5nIHN0YXR1cyBvZiB0aGUgV0FLRVVQVElNRVIgSW50ZXJydXB0ICovCi0gIGlmIChfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VURikgIT0gUkVTRVQpCisgIC8qIENsZWFyIHRoZSBFWFRJJ3MgbGluZSBGbGFnIGZvciBSVEMgV2FrZVVwVGltZXIgKi8KKyAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfQ0xFQVJfRkxBRygpOworCisgIC8qIEdldCB0aGUgcGVuZGluZyBzdGF0dXMgb2YgdGhlIFdha2V1cCB0aW1lciBJbnRlcnJ1cHQgKi8KKyAgaWYgKF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19XVVRGKSAhPSAwVSkKICAgewotICAgIC8qIFdBS0VVUFRJTUVSIGNhbGxiYWNrICovCisgICAgLyogQ2xlYXIgdGhlIFdha2V1cCB0aW1lciBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgKi8KKyAgICBfX0hBTF9SVENfV0FLRVVQVElNRVJfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19XVVRGKTsKKworICAgIC8qIFdha2V1cCB0aW1lciBjYWxsYmFjayAqLwogI2lmIChVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgICAgIGhydGMtPldha2VVcFRpbWVyRXZlbnRDYWxsYmFjayhocnRjKTsKKyAgICBocnRjLT5XYWtlVXBUaW1lckV2ZW50Q2FsbGJhY2soaHJ0Yyk7CiAjZWxzZQogICAgIEhBTF9SVENFeF9XYWtlVXBUaW1lckV2ZW50Q2FsbGJhY2soaHJ0Yyk7CiAjZW5kaWYgLyogVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTICovCi0KLSAgICAvKiBDbGVhciB0aGUgV0FLRVVQVElNRVIgaW50ZXJydXB0IHBlbmRpbmcgYml0ICovCi0gICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VURik7CiAgIH0KIAotICAvKiBDbGVhciB0aGUgRVhUSSdzIGxpbmUgRmxhZyBmb3IgUlRDIFdha2VVcFRpbWVyICovCi0gIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0NMRUFSX0ZMQUcoKTsKLQogICAvKiBDaGFuZ2UgUlRDIHN0YXRlICovCiAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKIH0KIAogLyoqCi0gICogQGJyaWVmICBXYWtlIFVwIFRpbWVyIGNhbGxiYWNrLgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQGJyaWVmICBXYWtldXAgVGltZXIgY2FsbGJhY2suCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX3dlYWsgdm9pZCBIQUxfUlRDRXhfV2FrZVVwVGltZXJFdmVudENhbGxiYWNrKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQpAQCAtMTA1MiwzNSArMTE5MywzOCBAQAogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChocnRjKTsKIAotICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCi0gICAgICAgICAgICB0aGUgSEFMX1JUQ0V4X1dha2VVcFRpbWVyRXZlbnRDYWxsYmFjayBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisgIC8qIE5PVEU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICB0aGUgSEFMX1JUQ0V4X1dha2VVcFRpbWVyRXZlbnRDYWxsYmFjayBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCiAgICAqLwogfQogCiAvKioKLSAqIEBicmllZiAgSGFuZGxlIFdha2UgVXAgVGltZXIgUG9sbGluZy4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEBicmllZiAgSGFuZGxlcyBXYWtldXAgVGltZXIgUG9sbGluZy4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCBkdXJhdGlvbgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X1BvbGxGb3JXYWtlVXBUaW1lckV2ZW50KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBUaW1lb3V0KQogewotICB1aW50MzJfdCB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworICB1aW50MzJfdCB0aWNrc3RhcnQgPSAwVTsKIAotICB3aGlsZSAoX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1dVVEYpID09IFJFU0VUKQorICAvKiBHZXQgdGljayAqLworICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCisgIHdoaWxlIChfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VURikgPT0gMFUpCiAgIHsKICAgICBpZiAoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKQogICAgIHsKICAgICAgIGlmICgoVGltZW91dCA9PSAwVSkgfHwgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFRpbWVvdXQpKQogICAgICAgewogICAgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfVElNRU9VVDsKLQogICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgICB9CiAgICAgfQogICB9CiAKLSAgLyogQ2xlYXIgdGhlIFdBS0VVUFRJTUVSIEZsYWcgKi8KKyAgLyogQ2xlYXIgdGhlIFdha2V1cCB0aW1lciBGbGFnICovCiAgIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9DTEVBUl9GTEFHKGhydGMsIFJUQ19GTEFHX1dVVEYpOwogCiAgIC8qIENoYW5nZSBSVEMgc3RhdGUgKi8KQEAgLTEwOTMsOCArMTIzNyw3IEBACiAgICogQH0KICAgKi8KIAotCi0vKiogQGFkZHRvZ3JvdXAgUlRDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMworLyoqIEBkZWZncm91cCBSVENFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIEV4dGVuZGVkIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKICAgKiBAYnJpZWYgICAgRXh0ZW5kZWQgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucwogICAqCiBAdmVyYmF0aW0KQEAgLTExMDUsOCArMTI0OCw2IEBACiAgICAgVGhpcyBzdWJzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0bwogICAgICAgKCspIFdyaXRlIGEgZGF0YSBpbiBhIHNwZWNpZmllZCBSVEMgQmFja3VwIGRhdGEgcmVnaXN0ZXIKICAgICAgICgrKSBSZWFkIGEgZGF0YSBpbiBhIHNwZWNpZmllZCBSVEMgQmFja3VwIGRhdGEgcmVnaXN0ZXIKLSAgICAgICgrKSBTZXQgdGhlIENvYXJzZSBjYWxpYnJhdGlvbiBwYXJhbWV0ZXJzLgotICAgICAgKCspIERlYWN0aXZhdGUgdGhlIENvYXJzZSBjYWxpYnJhdGlvbiBwYXJhbWV0ZXJzCiAgICAgICAoKykgU2V0IHRoZSBTbW9vdGggY2FsaWJyYXRpb24gcGFyYW1ldGVycy4KICAgICAgICgrKSBDb25maWd1cmUgdGhlIFN5bmNocm9uaXphdGlvbiBTaGlmdCBDb250cm9sIFNldHRpbmdzLgogICAgICAgKCspIENvbmZpZ3VyZSB0aGUgQ2FsaWJyYXRpb24gUGlub3V0IChSVENfQ0FMSUIpIFNlbGVjdGlvbiAoMUh6IG9yIDUxMkh6KS4KQEAgLTExMjEsMTEgKzEyNjIsMTUgQEAKICAgKi8KIAogLyoqCi0gICogQGJyaWVmICBXcml0ZSBhIGRhdGEgaW4gYSBzcGVjaWZpZWQgUlRDIEJhY2t1cCBkYXRhIHJlZ2lzdGVyLgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQGJyaWVmICBXcml0ZXMgYSBkYXRhIGluIGEgc3BlY2lmaWVkIFJUQyBCYWNrdXAgZGF0YSByZWdpc3Rlci4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcGFyYW0gIEJhY2t1cFJlZ2lzdGVyIFJUQyBCYWNrdXAgZGF0YSBSZWdpc3RlciBudW1iZXIuCi0gICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBSVENfQktQX0RSeCB3aGVyZSB4IGNhbiBiZSBmcm9tIDAgdG8gMTkgdG8KLSAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIHJlZ2lzdGVyLgorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogUlRDX0JLUF9EUnggKHdoZXJlIHggY2FuIGJlIGZyb20gMCB0byAxNSkKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHNwZWNpZnkgdGhlIHJlZ2lzdGVyLgorICAqIEBub3RlICAgVGhlIHJhbmdlIG9mIHZhbHVlcyBwb3NzaWJsZSBmb3IgcGFyYW1ldGVyIEJhY2t1cFJlZ2lzdGVyIGRlcGVuZHMgb24KKyAgKiAgICAgICAgIHRoZSB0b3RhbCBudW1iZXIgb2YgQmFja3VwIGRhdGEgUmVnaXN0ZXJzLiBUaGlzIHRvdGFsIG51bWJlciBpcyBub3QKKyAgKiAgICAgICAgIHRoZSBzYW1lIG9uIGFsbCBkZXZpY2VzLgogICAqIEBwYXJhbSAgRGF0YSBEYXRhIHRvIGJlIHdyaXR0ZW4gaW4gdGhlIHNwZWNpZmllZCBSVEMgQmFja3VwIGRhdGEgcmVnaXN0ZXIuCiAgICogQHJldHZhbCBOb25lCiAgICovCkBAIC0xMTQ1LDEwICsxMjkwLDE0IEBACiAKIC8qKgogICAqIEBicmllZiAgUmVhZHMgZGF0YSBmcm9tIHRoZSBzcGVjaWZpZWQgUlRDIEJhY2t1cCBkYXRhIFJlZ2lzdGVyLgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCiAgICogQHBhcmFtICBCYWNrdXBSZWdpc3RlciBSVEMgQmFja3VwIGRhdGEgUmVnaXN0ZXIgbnVtYmVyLgotICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogUlRDX0JLUF9EUnggd2hlcmUgeCBjYW4gYmUgZnJvbSAwIHRvIDE5IHRvCi0gICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSByZWdpc3Rlci4KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IFJUQ19CS1BfRFJ4ICh3aGVyZSB4IGNhbiBiZSBmcm9tIDAgdG8gMTUpCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzcGVjaWZ5IHRoZSByZWdpc3Rlci4KKyAgKiBAbm90ZSAgIFRoZSByYW5nZSBvZiB2YWx1ZXMgcG9zc2libGUgZm9yIHBhcmFtZXRlciBCYWNrdXBSZWdpc3RlciBkZXBlbmRzIG9uCisgICogICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIEJhY2t1cCBkYXRhIFJlZ2lzdGVycy4gVGhpcyB0b3RhbCBudW1iZXIgaXMgbm90CisgICogICAgICAgICB0aGUgc2FtZSBvbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIFJlYWQgdmFsdWUKICAgKi8KIHVpbnQzMl90IEhBTF9SVENFeF9CS1VQUmVhZChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgQmFja3VwUmVnaXN0ZXIpCkBAIC0xMTY2LDEwICsxMzE1LDExIEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgU2V0IHRoZSBTbW9vdGggY2FsaWJyYXRpb24gcGFyYW1ldGVycy4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEBicmllZiAgU2V0cyB0aGUgU21vb3RoIGNhbGlicmF0aW9uIHBhcmFtZXRlcnMuCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCiAgICogQHBhcmFtICBTbW9vdGhDYWxpYlBlcmlvZCBTZWxlY3QgdGhlIFNtb290aCBDYWxpYnJhdGlvbiBQZXJpb2QuCi0gICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgOgorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgIEBhcmcgUlRDX1NNT09USENBTElCX1BFUklPRF8zMlNFQzogVGhlIHNtb290aCBjYWxpYnJhdGlvbiBwZXJpb2QgaXMgMzJzLgogICAqICAgICAgICAgICAgIEBhcmcgUlRDX1NNT09USENBTElCX1BFUklPRF8xNlNFQzogVGhlIHNtb290aCBjYWxpYnJhdGlvbiBwZXJpb2QgaXMgMTZzLgogICAqICAgICAgICAgICAgIEBhcmcgUlRDX1NNT09USENBTElCX1BFUklPRF84U0VDOiBUaGUgc21vb3RoIGNhbGlicmF0aW9uIHBlcmlvZCBpcyA4cy4KQEAgLTExODEsNyArMTMzMSw3IEBACiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBhbnkgdmFsdWUgZnJvbSAwIHRvIDB4MDAwMDAxRkYuCiAgICogQG5vdGUgICBUbyBkZWFjdGl2YXRlIHRoZSBzbW9vdGggY2FsaWJyYXRpb24sIHRoZSBmaWVsZCBTbW9vdGhDYWxpYlBsdXNQdWxzZXMKICAgKiAgICAgICAgIG11c3QgYmUgZXF1YWwgdG8gU01PT1RIQ0FMSUJfUExVU1BVTFNFU19SRVNFVCBhbmQgdGhlIGZpZWxkCi0gICogICAgICAgICBTbW9vdGhDYWxpYk1pbnVzUHVsc2VzVmFsdWUgbXV0IGJlIGVxdWFsIHRvIDAuCisgICogICAgICAgICBTbW9vdGhDYWxpYk1pbnVzUHVsc2VzVmFsdWUgbXVzdCBiZSBlcXVhbCB0byAwLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X1NldFNtb290aENhbGliKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBTbW9vdGhDYWxpYlBlcmlvZCwgdWludDMyX3QgU21vb3RoQ2FsaWJQbHVzUHVsc2VzLCB1aW50MzJfdCBTbW9vdGhDYWxpYk1pbnVzUHVsc2VzVmFsdWUpCkBAIC0xMjAyLDEyICsxMzUyLDEzIEBACiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKIAogICAvKiBjaGVjayBpZiBhIGNhbGlicmF0aW9uIGlzIHBlbmRpbmcqLwotICBpZiAoKGhydGMtPkluc3RhbmNlLT5JU1IgJiBSVENfSVNSX1JFQ0FMUEYpICE9IFJFU0VUKQorICBpZiAoKGhydGMtPkluc3RhbmNlLT5JU1IgJiBSVENfSVNSX1JFQ0FMUEYpICE9IDBVKQogICB7CisgICAgLyogR2V0IHRpY2sgKi8KICAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCiAgICAgLyogY2hlY2sgaWYgYSBjYWxpYnJhdGlvbiBpcyBwZW5kaW5nKi8KLSAgICB3aGlsZSAoKGhydGMtPkluc3RhbmNlLT5JU1IgJiBSVENfSVNSX1JFQ0FMUEYpICE9IFJFU0VUKQorICAgIHdoaWxlICgoaHJ0Yy0+SW5zdGFuY2UtPklTUiAmIFJUQ19JU1JfUkVDQUxQRikgIT0gMFUpCiAgICAgewogICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJUQ19USU1FT1VUX1ZBTFVFKQogICAgICAgewpAQCAtMTIyNiw3ICsxMzc3LDkgQEAKICAgfQogCiAgIC8qIENvbmZpZ3VyZSB0aGUgU21vb3RoIGNhbGlicmF0aW9uIHNldHRpbmdzICovCi0gIGhydGMtPkluc3RhbmNlLT5DQUxSID0gKHVpbnQzMl90KSgodWludDMyX3QpU21vb3RoQ2FsaWJQZXJpb2QgfCAodWludDMyX3QpU21vb3RoQ2FsaWJQbHVzUHVsc2VzIHwgKHVpbnQzMl90KVNtb290aENhbGliTWludXNQdWxzZXNWYWx1ZSk7CisgIGhydGMtPkluc3RhbmNlLT5DQUxSID0gKHVpbnQzMl90KSgodWludDMyX3QpU21vb3RoQ2FsaWJQZXJpb2QgICAgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KVNtb290aENhbGliUGx1c1B1bHNlcyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdClTbW9vdGhDYWxpYk1pbnVzUHVsc2VzVmFsdWUpOwogCiAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKQEAgLTEyNDEsMTEgKzEzOTQsMTIgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBDb25maWd1cmUgdGhlIFN5bmNocm9uaXphdGlvbiBTaGlmdCBDb250cm9sIFNldHRpbmdzLgorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgU3luY2hyb25pemF0aW9uIFNoaWZ0IENvbnRyb2wgU2V0dGluZ3MuCiAgICogQG5vdGUgICBXaGVuIFJFRkNLT04gaXMgc2V0LCBmaXJtd2FyZSBtdXN0IG5vdCB3cml0ZSB0byBTaGlmdCBjb250cm9sIHJlZ2lzdGVyLgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCi0gICogQHBhcmFtICBTaGlmdEFkZDFTOiBTZWxlY3QgdG8gYWRkIG9yIG5vdCAxIHNlY29uZCB0byB0aGUgdGltZSBjYWxlbmRhci4KLSAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzIDoKKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KKyAgKiBAcGFyYW0gIFNoaWZ0QWRkMVMgU2VsZWN0IHRvIGFkZCBvciBub3QgMSBzZWNvbmQgdG8gdGhlIHRpbWUgY2FsZW5kYXIuCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgICBAYXJnIFJUQ19TSElGVEFERDFTX1NFVDogQWRkIG9uZSBzZWNvbmQgdG8gdGhlIGNsb2NrIGNhbGVuZGFyLgogICAqICAgICAgICAgICAgIEBhcmcgUlRDX1NISUZUQUREMVNfUkVTRVQ6IE5vIGVmZmVjdC4KICAgKiBAcGFyYW0gIFNoaWZ0U3ViRlMgU2VsZWN0IHRoZSBudW1iZXIgb2YgU2Vjb25kIEZyYWN0aW9ucyB0byBzdWJzdGl0dXRlLgpAQCAtMTI2OCwxMCArMTQyMiwxMSBAQAogICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKIAorICAvKiBHZXQgdGljayAqLwogICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCi0gIC8qIFdhaXQgdW50aWwgdGhlIHNoaWZ0IGlzIGNvbXBsZXRlZCovCi0gIHdoaWxlICgoaHJ0Yy0+SW5zdGFuY2UtPklTUiAmIFJUQ19JU1JfU0hQRikgIT0gUkVTRVQpCisgIC8qIFdhaXQgdW50aWwgdGhlIHNoaWZ0IGlzIGNvbXBsZXRlZCAqLworICB3aGlsZSAoKGhydGMtPkluc3RhbmNlLT5JU1IgJiBSVENfSVNSX1NIUEYpICE9IDBVKQogICB7CiAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJUQ19USU1FT1VUX1ZBTFVFKQogICAgIHsKQEAgLTEyODgsMTMgKzE0NDMsMTMgQEAKICAgfQogCiAgIC8qIENoZWNrIGlmIHRoZSByZWZlcmVuY2UgY2xvY2sgZGV0ZWN0aW9uIGlzIGRpc2FibGVkICovCi0gIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX1JFRkNLT04pID09IFJFU0VUKQorICBpZiAoKGhydGMtPkluc3RhbmNlLT5DUiAmIFJUQ19DUl9SRUZDS09OKSA9PSAwVSkKICAgewogICAgIC8qIENvbmZpZ3VyZSB0aGUgU2hpZnQgc2V0dGluZ3MgKi8KICAgICBocnRjLT5JbnN0YW5jZS0+U0hJRlRSID0gKHVpbnQzMl90KSh1aW50MzJfdCkoU2hpZnRTdWJGUykgfCAodWludDMyX3QpKFNoaWZ0QWRkMVMpOwogCi0gICAgLyogSWYgIFJUQ19DUl9CWVBTSEFEIGJpdCA9IDBVLCB3YWl0IGZvciBzeW5jaHJvIGVsc2UgdGhpcyBjaGVjayBpcyBub3QgbmVlZGVkICovCi0gICAgaWYgKChocnRjLT5JbnN0YW5jZS0+Q1IgJiBSVENfQ1JfQllQU0hBRCkgPT0gUkVTRVQpCisgICAgLyogSWYgIFJUQ19DUl9CWVBTSEFEIGJpdCA9IDAsIHdhaXQgZm9yIHN5bmNocm8gZWxzZSB0aGlzIGNoZWNrIGlzIG5vdCBuZWVkZWQgKi8KKyAgICBpZiAoKGhydGMtPkluc3RhbmNlLT5DUiAmIFJUQ19DUl9CWVBTSEFEKSA9PSAwVSkKICAgICB7CiAgICAgICBpZiAoSEFMX1JUQ19XYWl0Rm9yU3luY2hybyhocnRjKSAhPSBIQUxfT0spCiAgICAgICB7CkBAIC0xMzM3LDkgKzE0OTIsMTAgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBDb25maWd1cmUgdGhlIENhbGlicmF0aW9uIFBpbm91dCAoUlRDX0NBTElCKSBTZWxlY3Rpb24gKDFIeiBvciA1MTJIeikuCi0gICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKLSAgKiBAcGFyYW0gIENhbGliT3V0cHV0IFNlbGVjdCB0aGUgQ2FsaWJyYXRpb24gb3V0cHV0IFNlbGVjdGlvbiAuCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBDYWxpYnJhdGlvbiBQaW5vdXQgKFJUQ19DQUxJQikgU2VsZWN0aW9uICgxSHogb3IgNTEySHopLgorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgorICAqIEBwYXJhbSAgQ2FsaWJPdXRwdXQgU2VsZWN0IHRoZSBDYWxpYnJhdGlvbiBvdXRwdXQgU2VsZWN0aW9uLgogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICAgQGFyZyBSVENfQ0FMSUJPVVRQVVRfNTEySFo6IEEgc2lnbmFsIGhhcyBhIHJlZ3VsYXIgd2F2ZWZvcm0gYXQgNTEySHouCiAgICogICAgICAgICAgICAgQGFyZyBSVENfQ0FMSUJPVVRQVVRfMUhaOiBBIHNpZ25hbCBoYXMgYSByZWd1bGFyIHdhdmVmb3JtIGF0IDFIei4KQEAgLTEzNzksOCArMTUzNSw5IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgRGVhY3RpdmF0ZSB0aGUgQ2FsaWJyYXRpb24gUGlub3V0IChSVENfQ0FMSUIpIFNlbGVjdGlvbiAoMUh6IG9yIDUxMkh6KS4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEBicmllZiAgRGVhY3RpdmF0ZXMgdGhlIENhbGlicmF0aW9uIFBpbm91dCAoUlRDX0NBTElCKSBTZWxlY3Rpb24gKDFIeiBvciA1MTJIeikuCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfRGVhY3RpdmF0ZUNhbGlicmF0aW9uT3V0UHV0KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQpAQCAtMTQwOCwxMiArMTU2NSwxNSBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgUlRDIHJlZmVyZW5jZSBjbG9jayBkZXRlY3Rpb24uCi0gICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAYnJpZWYgIEVuYWJsZXMgdGhlIFJUQyByZWZlcmVuY2UgY2xvY2sgZGV0ZWN0aW9uLgorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X1NldFJlZkNsb2NrKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CisKICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgX19IQUxfTE9DSyhocnRjKTsKIApAQCAtMTQyMiw0NyArMTU4Miw0MiBAQAogICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKIAotICAvKiBTZXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLwotICBpZiAoUlRDX0VudGVySW5pdE1vZGUoaHJ0YykgIT0gSEFMX09LKQorICAvKiBFbnRlciBJbml0aWFsaXphdGlvbiBtb2RlICovCisgIHN0YXR1cyA9IFJUQ19FbnRlckluaXRNb2RlKGhydGMpOworCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7Ci0gICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAvKiBTZXQgUlRDIHN0YXRlKi8KLSAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0KLSAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgfQotICBlbHNlCi0gIHsKKyAgICAvKiBFbmFibGUgdGhlIHJlZmVyZW5jZSBjbG9jayBkZXRlY3Rpb24gKi8KICAgICBfX0hBTF9SVENfQ0xPQ0tSRUZfREVURUNUSU9OX0VOQUJMRShocnRjKTsKIAogICAgIC8qIEV4aXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLwotICAgIGhydGMtPkluc3RhbmNlLT5JU1IgJj0gKHVpbnQzMl90KX5SVENfSVNSX0lOSVQ7CisgICAgc3RhdHVzID0gUlRDX0V4aXRJbml0TW9kZShocnRjKTsKKyAgfQorCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQorICB7CisgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwogICB9CiAKICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwogCi0gIC8qIENoYW5nZSBSVEMgc3RhdGUgKi8KLSAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwotCiAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KICAgX19IQUxfVU5MT0NLKGhydGMpOwogCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSB0aGUgUlRDIHJlZmVyZW5jZSBjbG9jayBkZXRlY3Rpb24uCi0gICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9EZWFjdGl2YXRlUmVmQ2xvY2soUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKKwogICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhydGMpOwogCkBAIC0xNDcxLDQzICsxNjI2LDM2IEBACiAgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwogCi0gIC8qIFNldCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gIGlmIChSVENfRW50ZXJJbml0TW9kZShocnRjKSAhPSBIQUxfT0spCisgIC8qIEVudGVyIEluaXRpYWxpemF0aW9uIG1vZGUgKi8KKyAgc3RhdHVzID0gUlRDX0VudGVySW5pdE1vZGUoaHJ0Yyk7CisKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgIC8qIFNldCBSVEMgc3RhdGUqLwotICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9FUlJPUjsKLQotICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICBfX0hBTF9VTkxPQ0soaHJ0Yyk7Ci0KLSAgICByZXR1cm4gSEFMX0VSUk9SOwotICB9Ci0gIGVsc2UKLSAgeworICAgIC8qIERpc2FibGUgdGhlIHJlZmVyZW5jZSBjbG9jayBkZXRlY3Rpb24gKi8KICAgICBfX0hBTF9SVENfQ0xPQ0tSRUZfREVURUNUSU9OX0RJU0FCTEUoaHJ0Yyk7CiAKICAgICAvKiBFeGl0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSAgICBocnRjLT5JbnN0YW5jZS0+SVNSICY9ICh1aW50MzJfdCl+UlRDX0lTUl9JTklUOworICAgIHN0YXR1cyA9IFJUQ19FeGl0SW5pdE1vZGUoaHJ0Yyk7CisgIH0KKworICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgeworICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKICAgfQogCiAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKIAotICAvKiBDaGFuZ2UgUlRDIHN0YXRlICovCi0gIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKLQogICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgIF9fSEFMX1VOTE9DSyhocnRjKTsKIAotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKLSAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgQnlwYXNzIFNoYWRvdyBmZWF0dXJlLgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQGJyaWVmICBFbmFibGVzIHRoZSBCeXBhc3MgU2hhZG93IGZlYXR1cmUuCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCiAgICogQG5vdGUgICBXaGVuIHRoZSBCeXBhc3MgU2hhZG93IGlzIGVuYWJsZWQgdGhlIGNhbGVuZGFyIHZhbHVlIGFyZSB0YWtlbgogICAqICAgICAgICAgZGlyZWN0bHkgZnJvbSB0aGUgQ2FsZW5kYXIgY291bnRlci4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTE1MzgsOCArMTY4Niw5IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgRGlzYWJsZSB0aGUgQnlwYXNzIFNoYWRvdyBmZWF0dXJlLgotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQGJyaWVmICBEaXNhYmxlcyB0aGUgQnlwYXNzIFNoYWRvdyBmZWF0dXJlLgorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEBub3RlICAgV2hlbiB0aGUgQnlwYXNzIFNoYWRvdyBpcyBlbmFibGVkIHRoZSBjYWxlbmRhciB2YWx1ZSBhcmUgdGFrZW4KICAgKiAgICAgICAgIGRpcmVjdGx5IGZyb20gdGhlIENhbGVuZGFyIGNvdW50ZXIuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCkBAIC0xNTU1LDcgKzE3MDQsNyBAQAogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoaHJ0Yyk7CiAKICAgLyogUmVzZXQgdGhlIEJZUFNIQUQgYml0ICovCi0gIGhydGMtPkluc3RhbmNlLT5DUiAmPSAoKHVpbnQ4X3QpflJUQ19DUl9CWVBTSEFEKTsKKyAgaHJ0Yy0+SW5zdGFuY2UtPkNSICY9ICh1aW50OF90KX5SVENfQ1JfQllQU0hBRDsKIAogICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CkBAIC0xNTczLDcgKzE3MjIsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAYWRkdG9ncm91cCBSVENFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA0IEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucworLyoqIEBkZWZncm91cCBSVENFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA0IEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucwogICAqIEBicmllZiAgICBFeHRlbmRlZCBmZWF0dXJlcyBmdW5jdGlvbnMKICAgKgogQHZlcmJhdGltCkBAIC0xNTgxLDcgKzE3MzAsNyBAQAogICAgICAgICAgICAgICAgICAjIyMjIyBFeHRlbmRlZCBmZWF0dXJlcyBmdW5jdGlvbnMgIyMjIyMKICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXSAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0bzoKLSAgICAgICgrKSBSVEMgQWxyYW0gQiBjYWxsYmFjaworICAgICAgKCspIFJUQyBBbGFybSBCIGNhbGxiYWNrCiAgICAgICAoKykgUlRDIFBvbGwgZm9yIEFsYXJtIEIgcmVxdWVzdAogCiBAZW5kdmVyYmF0aW0KQEAgLTE1OTAsNyArMTczOSw4IEBACiAKIC8qKgogICAqIEBicmllZiAgQWxhcm0gQiBjYWxsYmFjay4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX193ZWFrIHZvaWQgSEFMX1JUQ0V4X0FsYXJtQkV2ZW50Q2FsbGJhY2soUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCkBAIC0xNTk4LDIyICsxNzQ4LDI3IEBACiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKGhydGMpOwogCi0gIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKLSAgICAgICAgICAgIHRoZSBIQUxfUlRDRXhfQWxhcm1CRXZlbnRDYWxsYmFjayBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisgIC8qIE5PVEU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICB0aGUgSEFMX1JUQ0V4X0FsYXJtQkV2ZW50Q2FsbGJhY2sgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQogICAgKi8KIH0KIAogLyoqCi0gICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgQWxhcm1CIFBvbGxpbmcgcmVxdWVzdC4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEBicmllZiAgSGFuZGxlcyBBbGFybSBCIFBvbGxpbmcgcmVxdWVzdC4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCBkdXJhdGlvbgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X1BvbGxGb3JBbGFybUJFdmVudChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgVGltZW91dCkKIHsKLSAgdWludDMyX3QgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKyAgdWludDMyX3QgdGlja3N0YXJ0ID0gMFU7CiAKLSAgd2hpbGUgKF9fSEFMX1JUQ19BTEFSTV9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19BTFJCRikgPT0gUkVTRVQpCisgIC8qIEdldCB0aWNrICovCisgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CisKKyAgLyogV2FpdCB0aWxsIFJUQyBBTFJCRiBmbGFnIGlzIHNldCBhbmQgaWYgdGltZW91dCBpcyByZWFjaGVkIGV4aXQgKi8KKyAgd2hpbGUgKF9fSEFMX1JUQ19BTEFSTV9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19BTFJCRikgPT0gMFUpCiAgIHsKICAgICBpZiAoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKQogICAgIHsKQEAgLTE2MjUsNyArMTc4MCw3IEBACiAgICAgfQogICB9CiAKLSAgLyogQ2xlYXIgdGhlIEFsYXJtIEZsYWcgKi8KKyAgLyogQ2xlYXIgdGhlIEFsYXJtIGZsYWcgKi8KICAgX19IQUxfUlRDX0FMQVJNX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQkYpOwogCiAgIC8qIENoYW5nZSBSVEMgc3RhdGUgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYzeHhfaGFsX3NkYWRjLmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9zZGFkYy5jCmluZGV4IGM1YjhkOGQuLjI0YjkxMmYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfaGFsX3NkYWRjLmMKKysrIGIvU3JjL3N0bTMyZjN4eF9oYWxfc2RhZGMuYwpAQCAtMTEsNyArMTEsNiBAQAogICAqICAgICAgICAgICArIFBvd2VyIHNhdmluZwogICAqICAgICAgICAgICArIFJlZ3VsYXIvSW5qZWN0ZWQgQ2hhbm5lbHMgRE1BIENvbmZpZ3VyYXRpb24KICAgKiAgICAgICAgICAgKyBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50Ci0gICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC0yMzQsOSArMjMzLDggQEAKICAgICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIGFuZCBhbGwgY2FsbGJhY2tzCiAgICAgIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnMuCiAgIAotICBAZW5kdmVyYmF0aW0KLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICovCisgICAgQGVuZHZlcmJhdGltCisgICovIAogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2luY2x1ZGUgInN0bTMyZjN4eF9oYWwuaCIKQEAgLTIzNTUsOSArMjM1MywxMCBAQAogdm9pZCBIQUxfU0RBRENfSVJRSGFuZGxlcihTREFEQ19IYW5kbGVUeXBlRGVmKiBoc2RhZGMpCiB7CiAgIHVpbnQzMl90IHRtcF9pc3IgPSBoc2RhZGMtPkluc3RhbmNlLT5JU1I7CisgIHVpbnQzMl90IHRtcF9jcjEgPSBoc2RhZGMtPkluc3RhbmNlLT5DUjE7CiAgICAgCiAgIC8qIENoZWNrIGlmIGVuZCBvZiByZWd1bGFyIGNvbnZlcnNpb24gKi8KLSAgaWYoKChoc2RhZGMtPkluc3RhbmNlLT5DUjEgJiBTREFEQ19DUjFfUkVPQ0lFKSA9PSBTREFEQ19DUjFfUkVPQ0lFKSAmJgorICBpZigoKHRtcF9jcjEgJiBTREFEQ19DUjFfUkVPQ0lFKSA9PSBTREFEQ19DUjFfUkVPQ0lFKSAmJgogICAgICAoKHRtcF9pc3IgJiBTREFEQ19JU1JfUkVPQ0YpID09IFNEQURDX0lTUl9SRU9DRikpCiAgIHsKICAgICAvKiBDYWxsIHJlZ3VsYXIgY29udmVyc2lvbiBjb21wbGV0ZSBjYWxsYmFjayAqLwpAQCAtMjM4MCw3ICsyMzc5LDcgQEAKICAgICB9CiAgIH0KICAgLyogQ2hlY2sgaWYgZW5kIG9mIGluamVjdGVkIGNvbnZlcnNpb24gKi8KLSAgZWxzZSBpZigoKGhzZGFkYy0+SW5zdGFuY2UtPkNSMSAmIFNEQURDX0NSMV9KRU9DSUUpID09IFNEQURDX0NSMV9KRU9DSUUpICYmCisgIGVsc2UgaWYoKCh0bXBfY3IxICYgU0RBRENfQ1IxX0pFT0NJRSkgPT0gU0RBRENfQ1IxX0pFT0NJRSkgJiYKICAgICAgICAgICAoKHRtcF9pc3IgJiBTREFEQ19JU1JfSkVPQ0YpID09IFNEQURDX0lTUl9KRU9DRikpCiAgIHsKICAgICAvKiBDYWxsIGluamVjdGVkIGNvbnZlcnNpb24gY29tcGxldGUgY2FsbGJhY2sgKi8KQEAgLTI0MTIsNyArMjQxMSw3IEBACiAgICAgfQogICB9CiAgIC8qIENoZWNrIGlmIGVuZCBvZiBjYWxpYnJhdGlvbiAqLwotICBlbHNlIGlmKCgoaHNkYWRjLT5JbnN0YW5jZS0+Q1IxICYgU0RBRENfQ1IxX0VPQ0FMSUUpID09IFNEQURDX0NSMV9FT0NBTElFKSAmJgorICBlbHNlIGlmKCgodG1wX2NyMSAmIFNEQURDX0NSMV9FT0NBTElFKSA9PSBTREFEQ19DUjFfRU9DQUxJRSkgJiYKICAgICAgICAgICAoKHRtcF9pc3IgJiBTREFEQ19JU1JfRU9DQUxGKSA9PSBTREFEQ19JU1JfRU9DQUxGKSkKICAgewogICAgIC8qIENsZWFyIEVPQ0FMSUUgYml0IGluIFNEQURDX0NSMSByZWdpc3RlciAqLwpAQCAtMjQzMiw3ICsyNDMxLDcgQEAKICAgICBoc2RhZGMtPlN0YXRlID0gSEFMX1NEQURDX1NUQVRFX1JFQURZOwogICB9CiAgIC8qIENoZWNrIGlmIG92ZXJydW4gb2NjdXJzIGR1cmluZyByZWd1bGFyIGNvbnZlcnNpb24gKi8KLSAgZWxzZSBpZigoKGhzZGFkYy0+SW5zdGFuY2UtPkNSMSAmIFNEQURDX0NSMV9ST1ZSSUUpID09IFNEQURDX0NSMV9ST1ZSSUUpICYmCisgIGVsc2UgaWYoKCh0bXBfY3IxICYgU0RBRENfQ1IxX1JPVlJJRSkgPT0gU0RBRENfQ1IxX1JPVlJJRSkgJiYKICAgICAgICAgICAoKHRtcF9pc3IgJiBTREFEQ19JU1JfUk9WUkYpID09IFNEQURDX0lTUl9ST1ZSRikpCiAgIHsKICAgICAvKiBTZXQgQ0xSUk9WUkYgYml0IGluIFNEQURDX0NMUklTUiByZWdpc3RlciAqLwpAQCAtMjQ0OSw3ICsyNDQ4LDcgQEAKICNlbmRpZiAvKiBVU0VfSEFMX1NEQURDX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogICB9CiAgIC8qIENoZWNrIGlmIG92ZXJydW4gb2NjdXJzIGR1cmluZyBpbmplY3RlZCBjb252ZXJzaW9uICovCi0gIGVsc2UgaWYoKChoc2RhZGMtPkluc3RhbmNlLT5DUjEgJiBTREFEQ19DUjFfSk9WUklFKSA9PSBTREFEQ19DUjFfSk9WUklFKSAmJgorICBlbHNlIGlmKCgodG1wX2NyMSAmIFNEQURDX0NSMV9KT1ZSSUUpID09IFNEQURDX0NSMV9KT1ZSSUUpICYmCiAgICAgICAgICAgKCh0bXBfaXNyICYgU0RBRENfSVNSX0pPVlJGKSA9PSBTREFEQ19JU1JfSk9WUkYpKQogICB7CiAgICAgLyogU2V0IENMUkpPVlJGIGJpdCBpbiBTREFEQ19DTFJJU1IgcmVnaXN0ZXIgKi8KQEAgLTI3ODIsNyArMjc4MSw3IEBACiAgICAgLyogU2V0IFJTV1NUQVJUIGJpdCBpbiBTREFEQ19DUjIgcmVnaXN0ZXIgKi8KICAgICBoc2RhZGMtPkluc3RhbmNlLT5DUjIgfD0gU0RBRENfQ1IyX1JTV1NUQVJUOwogICB9Ci0gIGVsc2UgLyogc3luY2hyb251b3VzIHRyaWdnZXIgKi8KKyAgZWxzZSAvKiBzeW5jaHJvbm91cyB0cmlnZ2VyICovCiAgIHsKICAgICAvKiBFbnRlciBpbml0IG1vZGUgKi8KICAgICBpZihTREFEQ19FbnRlckluaXRNb2RlKGhzZGFkYykgIT0gSEFMX09LKQpAQCAtMjg0MSw3ICsyODQwLDcgQEAKICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICB9CiAgIH0KLSAgLyogQ2hlY2sgaWYgdHJpZ2dlciBpcyBzeW5jaHJvbnVvdXMgKi8KKyAgLyogQ2hlY2sgaWYgdHJpZ2dlciBpcyBzeW5jaHJvbm91cyAqLwogICBpZihoc2RhZGMtPlJlZ3VsYXJUcmlnZ2VyID09IFNEQURDX1NZTkNIUk9OT1VTX1RSSUdHRVIpCiAgIHsKICAgICAvKiBFbnRlciBpbml0IG1vZGUgKi8KQEAgLTI4OTksNyArMjg5OCw3IEBACiAgICAgLyogU2V0IEpTV1NUQVJUIGJpdCBpbiBTREFEQ19DUjIgcmVnaXN0ZXIgKi8KICAgICBoc2RhZGMtPkluc3RhbmNlLT5DUjIgfD0gU0RBRENfQ1IyX0pTV1NUQVJUOwogICB9Ci0gIGVsc2UgLyogZXh0ZXJuYWwgb3Igc3luY2hyb251b3VzIHRyaWdnZXIgKi8KKyAgZWxzZSAvKiBleHRlcm5hbCBvciBzeW5jaHJvbm91cyB0cmlnZ2VyICovCiAgIHsKICAgICAvKiBFbnRlciBpbml0IG1vZGUgKi8KICAgICBpZihTREFEQ19FbnRlckluaXRNb2RlKGhzZGFkYykgIT0gSEFMX09LKQpAQCAtMjk3Nyw3ICsyOTc2LDcgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIC8qIENoZWNrIGlmIHRyaWdnZXIgaXMgc3luY2hyb251b3VzICovCisgICAgICAvKiBDaGVjayBpZiB0cmlnZ2VyIGlzIHN5bmNocm9ub3VzICovCiAgICAgICBpZihoc2RhZGMtPkluamVjdGVkVHJpZ2dlciA9PSBTREFEQ19TWU5DSFJPTk9VU19UUklHR0VSKQogICAgICAgewogICAgICAgICAvKiBDbGVhciBKU1lOQyBiaXQgaW4gU0RBRENfQ1IxIHJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF9zbWFydGNhcmQuYyBiL1NyYy9zdG0zMmYzeHhfaGFsX3NtYXJ0Y2FyZC5jCmluZGV4IDA4YWExN2QuLmEyYmFlZjkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfaGFsX3NtYXJ0Y2FyZC5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX3NtYXJ0Y2FyZC5jCkBAIC0xOTgsNyArMTk4LDcgQEAKICNkZWZpbmUgU01BUlRDQVJEX1RFQUNLX1JFQUNLX1RJTUVPVVQgIDEwMDBVICAgICAgIC8qITwgU01BUlRDQVJEIFRYIG9yIFJYIGVuYWJsZSBhY2tub3dsZWRnZSB0aW1lLW91dCB2YWx1ZSAqLwogCiAjZGVmaW5lIFVTQVJUX0NSMV9GSUVMRFMgICgodWludDMyX3QpKFVTQVJUX0NSMV9NIHwgVVNBUlRfQ1IxX1BDRSB8IFVTQVJUX0NSMV9QUyB8IFVTQVJUX0NSMV9URSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0FSVF9DUjFfUkUgfCBVU0FSVF9DUjFfT1ZFUjgpKSAvKiE8IFVTQVJUIENSMSBmaWVsZHMgb2YgcGFyYW1ldGVycyBzZXQgYnkgU01BUlRDQVJEX1NldENvbmZpZyBBUEkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBUlRfQ1IxX1JFIHwgVVNBUlRfQ1IxX09WRVI4KSkgLyohPCBVU0FSVCBDUjEgZmllbGRzIG9mIHBhcmFtZXRlcnMgc2V0IGJ5IFNNQVJUQ0FSRF9TZXRDb25maWcgQVBJICovCiAKICNkZWZpbmUgVVNBUlRfQ1IyX0NMS19GSUVMRFMgICgodWludDMyX3QpKFVTQVJUX0NSMl9DTEtFTiB8IFVTQVJUX0NSMl9DUE9MIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBUlRfQ1IyX0NQSEEgfCBVU0FSVF9DUjJfTEJDTCkpIC8qITwgU01BUlRDQVJEIGNsb2NrLXJlbGF0ZWQgVVNBUlQgQ1IyIGZpZWxkcyBvZiBwYXJhbWV0ZXJzICovCkBAIC00NjEsNiArNDYxLDkgQEAKIC8qKgogICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIFNNQVJUQ0FSRCBDYWxsYmFjawogICAqICAgICAgICAgVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAbm90ZSAgIFRoZSBIQUxfU01BUlRDQVJEX1JlZ2lzdGVyQ2FsbGJhY2soKSBtYXkgYmUgY2FsbGVkIGJlZm9yZSBIQUxfU01BUlRDQVJEX0luaXQoKQorICAqICAgICAgICAgaW4gSEFMX1NNQVJUQ0FSRF9TVEFURV9SRVNFVCB0byByZWdpc3RlciBjYWxsYmFja3MgZm9yIEhBTF9TTUFSVENBUkRfTVNQSU5JVF9DQl9JRAorICAqICAgICAgICAgYW5kIEhBTF9TTUFSVENBUkRfTVNQREVJTklUX0NCX0lECiAgICogQHBhcmFtICBoc21hcnRjYXJkIHNtYXJ0Y2FyZCBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC00ODgsOCArNDkxLDYgQEAKIAogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhoc21hcnRjYXJkKTsKIAogICBpZiAoaHNtYXJ0Y2FyZC0+Z1N0YXRlID09IEhBTF9TTUFSVENBUkRfU1RBVEVfUkVBRFkpCiAgIHsKQEAgLTU2OCwxNSArNTY5LDE1IEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaHNtYXJ0Y2FyZCk7Ci0KICAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGFuIFNNQVJUQ0FSRCBjYWxsYmFjawogICAqICAgICAgICAgU01BUlRDQVJEIGNhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqIEBub3RlICAgVGhlIEhBTF9TTUFSVENBUkRfVW5SZWdpc3RlckNhbGxiYWNrKCkgbWF5IGJlIGNhbGxlZCBiZWZvcmUgSEFMX1NNQVJUQ0FSRF9Jbml0KCkKKyAgKiAgICAgICAgIGluIEhBTF9TTUFSVENBUkRfU1RBVEVfUkVTRVQgdG8gdW4tcmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBIQUxfU01BUlRDQVJEX01TUElOSVRfQ0JfSUQKKyAgKiAgICAgICAgIGFuZCBIQUxfU01BUlRDQVJEX01TUERFSU5JVF9DQl9JRAogICAqIEBwYXJhbSAgaHNtYXJ0Y2FyZCBzbWFydGNhcmQgaGFuZGxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC01OTUsOSArNTk2LDYgQEAKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCi0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaHNtYXJ0Y2FyZCk7Ci0KICAgaWYgKEhBTF9TTUFSVENBUkRfU1RBVEVfUkVBRFkgPT0gaHNtYXJ0Y2FyZC0+Z1N0YXRlKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQpAQCAtNjc2LDkgKzY3NCw2IEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaHNtYXJ0Y2FyZCk7Ci0KICAgcmV0dXJuIHN0YXR1czsKIH0KICNlbmRpZiAvKiBVU0VfSEFMX1NNQVJUQ0FSRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KQEAgLTI5MzQsMyArMjkyOSw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF9zbWFydGNhcmRfZXguYyBiL1NyYy9zdG0zMmYzeHhfaGFsX3NtYXJ0Y2FyZF9leC5jCmluZGV4IDVmYTBkY2IuLjFjMjkzMDUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfaGFsX3NtYXJ0Y2FyZF9leC5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX3NtYXJ0Y2FyZF9leC5jCkBAIC0yOSw3ICsyOSw2IEBACiAgICAgKCMpIEFmdGVyIGhhdmluZyBjb25maWd1cmVkIHRoZSBTTUFSVENBUkQgYmFzaWMgZmVhdHVyZXMgd2l0aCBIQUxfU01BUlRDQVJEX0luaXQoKSwKICAgICAgICAgdGhlbiBwcm9ncmFtIFNNQVJUQ0FSRCBhZHZhbmNlZCBmZWF0dXJlcyBpZiByZXF1aXJlZCAoVFgvUlggcGlucyBzd2FwLCBUaW1lT3V0LAogICAgICAgICBhdXRvLXJldHJ5IGNvdW50ZXIsLi4uKSBpbiB0aGUgaHNtYXJ0Y2FyZCBBZHZhbmNlZEluaXQgc3RydWN0dXJlLgotCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KQEAgLTE5NSwzICsxOTQsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfc21idXMuYyBiL1NyYy9zdG0zMmYzeHhfaGFsX3NtYnVzLmMKaW5kZXggZjA1MzFkYy4uNzhmOGQyNyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9oYWxfc21idXMuYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF9zbWJ1cy5jCkBAIC0xNjcsNyArMTY3LDYgQEAKICAgICAgICAoQCkgWW91IGNhbiByZWZlciB0byB0aGUgU01CVVMgSEFMIGRyaXZlciBoZWFkZXIgZmlsZSBmb3IgbW9yZSB1c2VmdWwgbWFjcm9zCiAKICAgQGVuZHZlcmJhdGltCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNTg1LDYgKzU4NCw5IEBACiAvKioKICAgKiBAYnJpZWYgIFJlZ2lzdGVyIGEgVXNlciBTTUJVUyBDYWxsYmFjawogICAqICAgICAgICAgVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAbm90ZSAgIFRoZSBIQUxfU01CVVNfUmVnaXN0ZXJDYWxsYmFjaygpIG1heSBiZSBjYWxsZWQgYmVmb3JlIEhBTF9TTUJVU19Jbml0KCkgaW4KKyAgKiAgICAgICAgIEhBTF9TTUJVU19TVEFURV9SRVNFVCB0byByZWdpc3RlciBjYWxsYmFja3MgZm9yIEhBTF9TTUJVU19NU1BJTklUX0NCX0lEIGFuZAorICAqICAgICAgICAgSEFMX1NNQlVTX01TUERFSU5JVF9DQl9JRC4KICAgKiBAcGFyYW0gIGhzbWJ1cyBQb2ludGVyIHRvIGEgU01CVVNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIFNNQlVTLgogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgcmVnaXN0ZXJlZApAQCAtNjE0LDkgKzYxNiw2IEBACiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaHNtYnVzKTsKLQogICBpZiAoSEFMX1NNQlVTX1NUQVRFX1JFQURZID09IGhzbWJ1cy0+U3RhdGUpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCkBAIC02OTIsMTQgKzY5MSwxNSBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGhzbWJ1cyk7CiAgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgogICAqIEBicmllZiAgVW5yZWdpc3RlciBhbiBTTUJVUyBDYWxsYmFjawogICAqICAgICAgICAgU01CVVMgY2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogQG5vdGUgICBUaGUgSEFMX1NNQlVTX1VuUmVnaXN0ZXJDYWxsYmFjaygpIG1heSBiZSBjYWxsZWQgYmVmb3JlIEhBTF9TTUJVU19Jbml0KCkgaW4KKyAgKiAgICAgICAgIEhBTF9TTUJVU19TVEFURV9SRVNFVCB0byB1bi1yZWdpc3RlciBjYWxsYmFja3MgZm9yIEhBTF9TTUJVU19NU1BJTklUX0NCX0lEIGFuZAorICAqICAgICAgICAgSEFMX1NNQlVTX01TUERFSU5JVF9DQl9JRAogICAqIEBwYXJhbSAgaHNtYnVzIFBvaW50ZXIgdG8gYSBTTUJVU19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgU01CVVMuCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKQEAgLTcyMCw5ICs3MjAsNiBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhoc21idXMpOwotCiAgIGlmIChIQUxfU01CVVNfU1RBVEVfUkVBRFkgPT0gaHNtYnVzLT5TdGF0ZSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKQEAgLTc5OCw4ICs3OTUsNiBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGhzbWJ1cyk7CiAgIHJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTgyMyw4ICs4MTgsNiBAQAogCiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhzbWJ1cyk7CiAKICAgaWYgKEhBTF9TTUJVU19TVEFURV9SRUFEWSA9PSBoc21idXMtPlN0YXRlKQogICB7CkBAIC04MzksOCArODMyLDYgQEAKICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhoc21idXMpOwogICByZXR1cm4gc3RhdHVzOwogfQogCkBAIC04NTUsOSArODQ2LDYgQEAKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCi0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaHNtYnVzKTsKLQogICBpZiAoSEFMX1NNQlVTX1NUQVRFX1JFQURZID09IGhzbWJ1cy0+U3RhdGUpCiAgIHsKICAgICBoc21idXMtPkFkZHJDYWxsYmFjayA9IEhBTF9TTUJVU19BZGRyQ2FsbGJhY2s7IC8qIExlZ2FjeSB3ZWFrIEFkZHJDYWxsYmFjayAgKi8KQEAgLTg3MSw4ICs4NTksNiBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGhzbWJ1cyk7CiAgIHJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTE4MjcsNyArMTgxMyw3IEBACiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgU01CVVMuCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KLXVpbnQzMl90IEhBTF9TTUJVU19HZXRTdGF0ZShTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMpCit1aW50MzJfdCBIQUxfU01CVVNfR2V0U3RhdGUoY29uc3QgU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzKQogewogICAvKiBSZXR1cm4gU01CVVMgaGFuZGxlIHN0YXRlICovCiAgIHJldHVybiBoc21idXMtPlN0YXRlOwpAQCAtMTgzOSw3ICsxODI1LDcgQEAKICAgKiAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgU01CVVMuCiAgICogQHJldHZhbCBTTUJVUyBFcnJvciBDb2RlCiAgICovCi11aW50MzJfdCBIQUxfU01CVVNfR2V0RXJyb3IoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzKQordWludDMyX3QgSEFMX1NNQlVTX0dldEVycm9yKGNvbnN0IFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cykKIHsKICAgcmV0dXJuIGhzbWJ1cy0+RXJyb3JDb2RlOwogfQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfc3BpLmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9zcGkuYwppbmRleCBkYTUxODlmLi44NzQ0MmZlIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF9zcGkuYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF9zcGkuYwpAQCAtOSw3ICs5LDYgQEAKICAgKiAgICAgICAgICAgKyBJTyBvcGVyYXRpb24gZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCi0gICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC0xOTUsNyArMTk0LDYgQEAKICAgICAgICAgICAgICgjKSBSWCBwcm9jZXNzZXMgYXJlIEhBTF9TUElfUmVjZWl2ZSgpLCBIQUxfU1BJX1JlY2VpdmVfSVQoKSBhbmQgSEFMX1NQSV9SZWNlaXZlX0RNQSgpCiAgICAgICAgICAgICAoIykgVFggcHJvY2Vzc2VzIGFyZSBIQUxfU1BJX1RyYW5zbWl0KCksIEhBTF9TUElfVHJhbnNtaXRfSVQoKSBhbmQgSEFMX1NQSV9UcmFuc21pdF9ETUEoKQogCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtOTEwLDYgKzkwOCw3IEBACiAgICAgICAgIGlmICgoKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSAgVGltZW91dCkgJiYgKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkpIHx8IChUaW1lb3V0ID09IDBVKSkKICAgICAgICAgewogICAgICAgICAgIGVycm9yY29kZSA9IEhBTF9USU1FT1VUOworICAgICAgICAgIGhzcGktPlN0YXRlID0gSEFMX1NQSV9TVEFURV9SRUFEWTsKICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICB9CkBAIC05NTksNiArOTU4LDcgQEAKICAgICAgICAgaWYgKCgoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID49ICBUaW1lb3V0KSAmJiAoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKSkgfHwgKFRpbWVvdXQgPT0gMFUpKQogICAgICAgICB7CiAgICAgICAgICAgZXJyb3Jjb2RlID0gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgaHNwaS0+U3RhdGUgPSBIQUxfU1BJX1NUQVRFX1JFQURZOwogICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTk4OCw5ICs5ODgsMTIgQEAKICAgewogICAgIGVycm9yY29kZSA9IEhBTF9FUlJPUjsKICAgfQorICBlbHNlCisgIHsKKyAgICBoc3BpLT5TdGF0ZSA9IEhBTF9TUElfU1RBVEVfUkVBRFk7CisgIH0KIAogZXJyb3I6Ci0gIGhzcGktPlN0YXRlID0gSEFMX1NQSV9TVEFURV9SRUFEWTsKICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICBfX0hBTF9VTkxPQ0soaHNwaSk7CiAgIHJldHVybiBlcnJvcmNvZGU7CkBAIC0xMDA5LDEyICsxMDEyLDE4IEBACiB7CiAjaWYgKFVTRV9TUElfQ1JDICE9IDBVKQogICBfX0lPIHVpbnQzMl90IHRtcHJlZyA9IDBVOwotICBfX0lPIHVpbnQ4X3QgICogcHRtcHJlZzg7CisgIF9fSU8gdWludDhfdCAgKnB0bXByZWc4OwogICBfX0lPIHVpbnQ4X3QgIHRtcHJlZzggPSAwOwogI2VuZGlmIC8qIFVTRV9TUElfQ1JDICovCiAgIHVpbnQzMl90IHRpY2tzdGFydDsKICAgSEFMX1N0YXR1c1R5cGVEZWYgZXJyb3Jjb2RlID0gSEFMX09LOwogCisgIGlmIChoc3BpLT5TdGF0ZSAhPSBIQUxfU1BJX1NUQVRFX1JFQURZKQorICB7CisgICAgZXJyb3Jjb2RlID0gSEFMX0JVU1k7CisgICAgZ290byBlcnJvcjsKKyAgfQorCiAgIGlmICgoaHNwaS0+SW5pdC5Nb2RlID09IFNQSV9NT0RFX01BU1RFUikgJiYgKGhzcGktPkluaXQuRGlyZWN0aW9uID09IFNQSV9ESVJFQ1RJT05fMkxJTkVTKSkKICAgewogICAgIGhzcGktPlN0YXRlID0gSEFMX1NQSV9TVEFURV9CVVNZX1JYOwpAQCAtMTAyOCwxMiArMTAzNyw2IEBACiAgIC8qIEluaXQgdGlja3N0YXJ0IGZvciB0aW1lb3V0IG1hbmFnZW1lbnQqLwogICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCi0gIGlmIChoc3BpLT5TdGF0ZSAhPSBIQUxfU1BJX1NUQVRFX1JFQURZKQotICB7Ci0gICAgZXJyb3Jjb2RlID0gSEFMX0JVU1k7Ci0gICAgZ290byBlcnJvcjsKLSAgfQotCiAgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKFNpemUgPT0gMFUpKQogICB7CiAgICAgZXJyb3Jjb2RlID0gSEFMX0VSUk9SOwpAQCAtMTExMSw2ICsxMTE0LDcgQEAKICAgICAgICAgaWYgKCgoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID49ICBUaW1lb3V0KSAmJiAoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKSkgfHwgKFRpbWVvdXQgPT0gMFUpKQogICAgICAgICB7CiAgICAgICAgICAgZXJyb3Jjb2RlID0gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgaHNwaS0+U3RhdGUgPSBIQUxfU1BJX1NUQVRFX1JFQURZOwogICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTExMzQsNiArMTEzOCw3IEBACiAgICAgICAgIGlmICgoKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSAgVGltZW91dCkgJiYgKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkpIHx8IChUaW1lb3V0ID09IDBVKSkKICAgICAgICAgewogICAgICAgICAgIGVycm9yY29kZSA9IEhBTF9USU1FT1VUOworICAgICAgICAgIGhzcGktPlN0YXRlID0gSEFMX1NQSV9TVEFURV9SRUFEWTsKICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICB9CkBAIC0xMjI4LDkgKzEyMzMsMTIgQEAKICAgewogICAgIGVycm9yY29kZSA9IEhBTF9FUlJPUjsKICAgfQorICBlbHNlCisgIHsKKyAgICBoc3BpLT5TdGF0ZSA9IEhBTF9TUElfU1RBVEVfUkVBRFk7CisgIH0KIAogZXJyb3IgOgotICBoc3BpLT5TdGF0ZSA9IEhBTF9TUElfU1RBVEVfUkVBRFk7CiAgIF9fSEFMX1VOTE9DSyhoc3BpKTsKICAgcmV0dXJuIGVycm9yY29kZTsKIH0KQEAgLTEyNTcsNyArMTI2NSw3IEBACiAgIF9fSU8gdWludDMyX3QgdG1wcmVnID0gMFU7CiAgIHVpbnQzMl90ICAgICAgICAgICAgIHNwaV9jcjE7CiAgIHVpbnQzMl90ICAgICAgICAgICAgIHNwaV9jcjI7Ci0gIF9fSU8gdWludDhfdCAgKiBwdG1wcmVnODsKKyAgX19JTyB1aW50OF90ICAqcHRtcHJlZzg7CiAgIF9fSU8gdWludDhfdCAgdG1wcmVnOCA9IDA7CiAjZW5kaWYgLyogVVNFX1NQSV9DUkMgKi8KIApAQCAtMTM4OSw2ICsxMzk3LDcgQEAKICAgICAgIGlmICgoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID49ICBUaW1lb3V0KSAmJiAoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKSkKICAgICAgIHsKICAgICAgICAgZXJyb3Jjb2RlID0gSEFMX1RJTUVPVVQ7CisgICAgICAgIGhzcGktPlN0YXRlID0gSEFMX1NQSV9TVEFURV9SRUFEWTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICAgIH0KICAgICB9CkBAIC0xNDcxLDYgKzE0ODAsNyBAQAogICAgICAgaWYgKCgoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID49ICBUaW1lb3V0KSAmJiAoKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkpKSB8fCAoVGltZW91dCA9PSAwVSkpCiAgICAgICB7CiAgICAgICAgIGVycm9yY29kZSA9IEhBTF9USU1FT1VUOworICAgICAgICBoc3BpLT5TdGF0ZSA9IEhBTF9TUElfU1RBVEVfUkVBRFk7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICB9CiAgICAgfQpAQCAtMTU0MCw4ICsxNTUwLDE2IEBACiAgICAgaHNwaS0+RXJyb3JDb2RlID0gSEFMX1NQSV9FUlJPUl9GTEFHOwogICB9CiAKKyAgaWYgKGhzcGktPkVycm9yQ29kZSAhPSBIQUxfU1BJX0VSUk9SX05PTkUpCisgIHsKKyAgICBlcnJvcmNvZGUgPSBIQUxfRVJST1I7CisgIH0KKyAgZWxzZQorICB7CisgICAgaHNwaS0+U3RhdGUgPSBIQUxfU1BJX1NUQVRFX1JFQURZOworICB9CisgIAogZXJyb3IgOgotICBoc3BpLT5TdGF0ZSA9IEhBTF9TUElfU1RBVEVfUkVBRFk7CiAgIF9fSEFMX1VOTE9DSyhoc3BpKTsKICAgcmV0dXJuIGVycm9yY29kZTsKIH0KQEAgLTE2NDMsNiArMTY2MSwxMyBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBlcnJvcmNvZGUgPSBIQUxfT0s7CiAKKworICBpZiAoaHNwaS0+U3RhdGUgIT0gSEFMX1NQSV9TVEFURV9SRUFEWSkKKyAgeworICAgIGVycm9yY29kZSA9IEhBTF9CVVNZOworICAgIGdvdG8gZXJyb3I7CisgIH0KKwogICBpZiAoKGhzcGktPkluaXQuRGlyZWN0aW9uID09IFNQSV9ESVJFQ1RJT05fMkxJTkVTKSAmJiAoaHNwaS0+SW5pdC5Nb2RlID09IFNQSV9NT0RFX01BU1RFUikpCiAgIHsKICAgICBoc3BpLT5TdGF0ZSA9IEhBTF9TUElfU1RBVEVfQlVTWV9SWDsKQEAgLTE2NTMsMTIgKzE2NzgsNiBAQAogICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhzcGkpOwogCi0gIGlmIChoc3BpLT5TdGF0ZSAhPSBIQUxfU1BJX1NUQVRFX1JFQURZKQotICB7Ci0gICAgZXJyb3Jjb2RlID0gSEFMX0JVU1k7Ci0gICAgZ290byBlcnJvcjsKLSAgfQotCiAgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKFNpemUgPT0gMFUpKQogICB7CiAgICAgZXJyb3Jjb2RlID0gSEFMX0VSUk9SOwpAQCAtMTk0Nyw3ICsxOTY2LDYgQEAKICAgICBTRVRfQklUKGhzcGktPkVycm9yQ29kZSwgSEFMX1NQSV9FUlJPUl9ETUEpOwogICAgIGVycm9yY29kZSA9IEhBTF9FUlJPUjsKIAotICAgIGhzcGktPlN0YXRlID0gSEFMX1NQSV9TVEFURV9SRUFEWTsKICAgICBnb3RvIGVycm9yOwogICB9CiAKQEAgLTE5ODYsNyArMjAwNCwxMyBAQAogCiAgIC8qIENoZWNrIHJ4IGRtYSBoYW5kbGUgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1NQSV9ETUFfSEFORExFKGhzcGktPmhkbWFyeCkpOwotCisgIAorICBpZiAoaHNwaS0+U3RhdGUgIT0gSEFMX1NQSV9TVEFURV9SRUFEWSkKKyAgeworICAgIGVycm9yY29kZSA9IEhBTF9CVVNZOworICAgIGdvdG8gZXJyb3I7CisgIH0KKyAgCiAgIGlmICgoaHNwaS0+SW5pdC5EaXJlY3Rpb24gPT0gU1BJX0RJUkVDVElPTl8yTElORVMpICYmIChoc3BpLT5Jbml0Lk1vZGUgPT0gU1BJX01PREVfTUFTVEVSKSkKICAgewogICAgIGhzcGktPlN0YXRlID0gSEFMX1NQSV9TVEFURV9CVVNZX1JYOwpAQCAtMjAwMSwxMiArMjAyNSw2IEBACiAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaHNwaSk7CiAKLSAgaWYgKGhzcGktPlN0YXRlICE9IEhBTF9TUElfU1RBVEVfUkVBRFkpCi0gIHsKLSAgICBlcnJvcmNvZGUgPSBIQUxfQlVTWTsKLSAgICBnb3RvIGVycm9yOwotICB9Ci0KICAgaWYgKChwRGF0YSA9PSBOVUxMKSB8fCAoU2l6ZSA9PSAwVSkpCiAgIHsKICAgICBlcnJvcmNvZGUgPSBIQUxfRVJST1I7CkBAIC0yMTAxLDcgKzIxMTksNiBAQAogICAgIFNFVF9CSVQoaHNwaS0+RXJyb3JDb2RlLCBIQUxfU1BJX0VSUk9SX0RNQSk7CiAgICAgZXJyb3Jjb2RlID0gSEFMX0VSUk9SOwogCi0gICAgaHNwaS0+U3RhdGUgPSBIQUxfU1BJX1NUQVRFX1JFQURZOwogICAgIGdvdG8gZXJyb3I7CiAgIH0KIApAQCAtMjI3OSw3ICsyMjk2LDYgQEAKICAgICBTRVRfQklUKGhzcGktPkVycm9yQ29kZSwgSEFMX1NQSV9FUlJPUl9ETUEpOwogICAgIGVycm9yY29kZSA9IEhBTF9FUlJPUjsKIAotICAgIGhzcGktPlN0YXRlID0gSEFMX1NQSV9TVEFURV9SRUFEWTsKICAgICBnb3RvIGVycm9yOwogICB9CiAKQEAgLTIzMDEsNyArMjMxNyw2IEBACiAgICAgU0VUX0JJVChoc3BpLT5FcnJvckNvZGUsIEhBTF9TUElfRVJST1JfRE1BKTsKICAgICBlcnJvcmNvZGUgPSBIQUxfRVJST1I7CiAKLSAgICBoc3BpLT5TdGF0ZSA9IEhBTF9TUElfU1RBVEVfUkVBRFk7CiAgICAgZ290byBlcnJvcjsKICAgfQogCkBAIC0zMDkzLDcgKzMxMDgsNyBAQAogICB1aW50MzJfdCB0aWNrc3RhcnQ7CiAjaWYgKFVTRV9TUElfQ1JDICE9IDBVKQogICBfX0lPIHVpbnQzMl90IHRtcHJlZyA9IDBVOwotICBfX0lPIHVpbnQ4X3QgICogcHRtcHJlZzg7CisgIF9fSU8gdWludDhfdCAgKnB0bXByZWc4OwogICBfX0lPIHVpbnQ4X3QgIHRtcHJlZzggPSAwOwogI2VuZGlmIC8qIFVTRV9TUElfQ1JDICovCiAKQEAgLTMyMTAsNyArMzIyNSw3IEBACiAgIHVpbnQzMl90IHRpY2tzdGFydDsKICNpZiAoVVNFX1NQSV9DUkMgIT0gMFUpCiAgIF9fSU8gdWludDMyX3QgdG1wcmVnID0gMFU7Ci0gIF9fSU8gdWludDhfdCAgKiBwdG1wcmVnODsKKyAgX19JTyB1aW50OF90ICAqcHRtcHJlZzg7CiAgIF9fSU8gdWludDhfdCAgdG1wcmVnOCA9IDA7CiAjZW5kaWYgLyogVVNFX1NQSV9DUkMgKi8KIApAQCAtMzU4Nyw3ICszNjAyLDcgQEAKICAgKi8KIHN0YXRpYyB2b2lkIFNQSV8ybGluZXNSeElTUl84QklUQ1JDKHN0cnVjdCBfX1NQSV9IYW5kbGVUeXBlRGVmICpoc3BpKQogewotICBfX0lPIHVpbnQ4X3QgICogcHRtcHJlZzg7CisgIF9fSU8gdWludDhfdCAgKnB0bXByZWc4OwogICBfX0lPIHVpbnQ4X3QgIHRtcHJlZzggPSAwOwogCiAgIC8qIEluaXRpYWxpemUgdGhlIDhiaXQgdGVtcG9yYXJ5IHBvaW50ZXIgKi8KQEAgLTM3MDcsNyArMzcyMiw3IEBACiAgIC8qIFJlYWQgMTZiaXQgQ1JDIHRvIGZsdXNoIERhdGEgUmVnaXN0ZXIgKi8KICAgdG1wcmVnID0gUkVBRF9SRUcoaHNwaS0+SW5zdGFuY2UtPkRSKTsKICAgLyogVG8gYXZvaWQgR0NDIHdhcm5pbmcgKi8KLSAgVU5VU0VEKHRtcHJlZyk7ICAKKyAgVU5VU0VEKHRtcHJlZyk7CiAKICAgLyogRGlzYWJsZSBSWE5FIGludGVycnVwdCAqLwogICBfX0hBTF9TUElfRElTQUJMRV9JVChoc3BpLCBTUElfSVRfUlhORSk7CkBAIC0zNzYyLDcgKzM3NzcsNyBAQAogICAqLwogc3RhdGljIHZvaWQgU1BJX1J4SVNSXzhCSVRDUkMoc3RydWN0IF9fU1BJX0hhbmRsZVR5cGVEZWYgKmhzcGkpCiB7Ci0gIF9fSU8gdWludDhfdCAgKiBwdG1wcmVnODsKKyAgX19JTyB1aW50OF90ICAqcHRtcHJlZzg7CiAgIF9fSU8gdWludDhfdCAgdG1wcmVnOCA9IDA7CiAKICAgLyogSW5pdGlhbGl6ZSB0aGUgOGJpdCB0ZW1wb3JhcnkgcG9pbnRlciAqLwpAQCAtMzk3OSw3ICszOTk0LDcgQEAKICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgICAgfQogICAgICAgLyogSWYgU3lzdGljayBpcyBkaXNhYmxlZCBvciBub3QgaW5jcmVtZW50ZWQsIGRlYWN0aXZhdGUgdGltZW91dCB0byBnbyBpbiBkaXNhYmxlIGxvb3AgcHJvY2VkdXJlICovCi0gICAgICBpZihjb3VudCA9PSAwVSkKKyAgICAgIGlmIChjb3VudCA9PSAwVSkKICAgICAgIHsKICAgICAgICAgdG1wX3RpbWVvdXQgPSAwVTsKICAgICAgIH0KQEAgLTQwMDYsNyArNDAyMSw3IEBACiAgIF9fSU8gdWludDMyX3QgY291bnQ7CiAgIHVpbnQzMl90IHRtcF90aW1lb3V0OwogICB1aW50MzJfdCB0bXBfdGlja3N0YXJ0OwotICBfX0lPIHVpbnQ4X3QgICogcHRtcHJlZzg7CisgIF9fSU8gdWludDhfdCAgKnB0bXByZWc4OwogICBfX0lPIHVpbnQ4X3QgIHRtcHJlZzggPSAwOwogCiAgIC8qIEFkanVzdCBUaW1lb3V0IHZhbHVlICBpbiBjYXNlIG9mIGVuZCBvZiB0cmFuc2ZlciAqLwpAQCAtNDA2MSwxMCArNDA3NiwxMCBAQAogICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgICB9CiAgICAgICAvKiBJZiBTeXN0aWNrIGlzIGRpc2FibGVkIG9yIG5vdCBpbmNyZW1lbnRlZCwgZGVhY3RpdmF0ZSB0aW1lb3V0IHRvIGdvIGluIGRpc2FibGUgbG9vcCBwcm9jZWR1cmUgKi8KLSAgICAgIGlmKGNvdW50ID09IDBVKQorICAgICAgaWYgKGNvdW50ID09IDBVKQogICAgICAgewogICAgICAgICB0bXBfdGltZW91dCA9IDBVOwotICAgICAgfSAgICAgIAorICAgICAgfQogICAgICAgY291bnQtLTsKICAgICB9CiAgIH0KQEAgLTQ0NTQsMyArNDQ2OSw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF9zcmFtLmMgYi9TcmMvc3RtMzJmM3h4X2hhbF9zcmFtLmMKaW5kZXggYmRmMmQ3MC4uNWRhYjE1YyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9oYWxfc3JhbS5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX3NyYW0uYwpAQCAtMTMzLDkgKzEzMywxNSBAQAogLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBhZGR0b2dyb3VwIFNSQU1fUHJpdmF0ZV9GdW5jdGlvbnMgU1JBTSBQcml2YXRlIEZ1bmN0aW9ucworICAqIEB7CisgICovCiBzdGF0aWMgdm9pZCBTUkFNX0RNQUNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogc3RhdGljIHZvaWQgU1JBTV9ETUFDcGx0UHJvdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgdm9pZCBTUkFNX0RNQUVycm9yKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKKy8qKgorICAqIEB9CisgICovCiAKIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTEwMTgsNyArMTAyNCw3IEBACiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFNSQU0gbW9kdWxlLgogICAqIEByZXR2YWwgSEFMIHN0YXRlCiAgICovCi1IQUxfU1JBTV9TdGF0ZVR5cGVEZWYgSEFMX1NSQU1fR2V0U3RhdGUoU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSkKK0hBTF9TUkFNX1N0YXRlVHlwZURlZiBIQUxfU1JBTV9HZXRTdGF0ZShjb25zdCBTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtKQogewogICByZXR1cm4gaHNyYW0tPlN0YXRlOwogfQpAQCAtMTAzMSw2ICsxMDM3LDEwIEBACiAgICogQH0KICAgKi8KIAorLyoqIEBhZGR0b2dyb3VwIFNSQU1fUHJpdmF0ZV9GdW5jdGlvbnMgU1JBTSBQcml2YXRlIEZ1bmN0aW9ucworICAqIEB7CisgICovCisKIC8qKgogICAqIEBicmllZiAgRE1BIFNSQU0gcHJvY2VzcyBjb21wbGV0ZSBjYWxsYmFjay4KICAgKiBAcGFyYW0gIGhkbWEgOiBETUEgaGFuZGxlCkBAIC0xMTAxLDYgKzExMTEsMTAgQEAKICAgKiBAfQogICAqLwogCisvKioKKyAgKiBAfQorICAqLworCiAjZW5kaWYgLyogSEFMX1NSQU1fTU9EVUxFX0VOQUJMRUQgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF90aW0uYyBiL1NyYy9zdG0zMmYzeHhfaGFsX3RpbS5jCmluZGV4IGYwNWRlMzcuLjk1ZWRiYjMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfaGFsX3RpbS5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX3RpbS5jCkBAIC0yOSw3ICsyOSw2IEBACiAgICogICAgICAgICAgICsgQ29tbXV0YXRpb24gRXZlbnQgY29uZmlndXJhdGlvbiB3aXRoIEludGVycnVwdGlvbiBhbmQgRE1BCiAgICogICAgICAgICAgICsgVElNIE9DUmVmIGNsZWFyIGNvbmZpZ3VyYXRpb24KICAgKiAgICAgICAgICAgKyBUSU0gRXh0ZXJuYWwgQ2xvY2sgY29uZmlndXJhdGlvbgotICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgpAQCAtMjgzLDYgKzI4Miw3IEBACiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DT1VOVEVSX01PREUoaHRpbS0+SW5pdC5Db3VudGVyTW9kZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NMT0NLRElWSVNJT05fRElWKGh0aW0tPkluaXQuQ2xvY2tEaXZpc2lvbikpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX1BFUklPRChodGltLCBodGltLT5Jbml0LlBlcmlvZCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0FVVE9SRUxPQURfUFJFTE9BRChodGltLT5Jbml0LkF1dG9SZWxvYWRQcmVsb2FkKSk7CiAKICAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVTRVQpCkBAIC01NDQsNyArNTQ0LDcgQEAKICAgfQogICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CkBAIC02NjYsNiArNjY2LDcgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NPVU5URVJfTU9ERShodGltLT5Jbml0LkNvdW50ZXJNb2RlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0xPQ0tESVZJU0lPTl9ESVYoaHRpbS0+SW5pdC5DbG9ja0RpdmlzaW9uKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fUEVSSU9EKGh0aW0sIGh0aW0tPkluaXQuUGVyaW9kKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQVVUT1JFTE9BRF9QUkVMT0FEKGh0aW0tPkluaXQuQXV0b1JlbG9hZFByZWxvYWQpKTsKIAogICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRVNFVCkKQEAgLTEwNzMsNyArMTA3NCw3IEBACiAgIH0KICAgZWxzZSBpZiAoVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKICAgewotICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICBpZiAoKHBEYXRhID09IE5VTEwpIHx8IChMZW5ndGggPT0gMFUpKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQpAQCAtMTMzNiw2ICsxMzM3LDcgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NPVU5URVJfTU9ERShodGltLT5Jbml0LkNvdW50ZXJNb2RlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0xPQ0tESVZJU0lPTl9ESVYoaHRpbS0+SW5pdC5DbG9ja0RpdmlzaW9uKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fUEVSSU9EKGh0aW0sIGh0aW0tPkluaXQuUGVyaW9kKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQVVUT1JFTE9BRF9QUkVMT0FEKGh0aW0tPkluaXQuQXV0b1JlbG9hZFByZWxvYWQpKTsKIAogICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRVNFVCkKQEAgLTE3NDMsNyArMTc0NSw3IEBACiAgIH0KICAgZWxzZSBpZiAoVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKICAgewotICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICBpZiAoKHBEYXRhID09IE5VTEwpIHx8IChMZW5ndGggPT0gMFUpKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQpAQCAtMjAwNSw2ICsyMDA3LDcgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NPVU5URVJfTU9ERShodGltLT5Jbml0LkNvdW50ZXJNb2RlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0xPQ0tESVZJU0lPTl9ESVYoaHRpbS0+SW5pdC5DbG9ja0RpdmlzaW9uKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fUEVSSU9EKGh0aW0sIGh0aW0tPkluaXQuUGVyaW9kKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQVVUT1JFTE9BRF9QUkVMT0FEKGh0aW0tPkluaXQuQXV0b1JlbG9hZFByZWxvYWQpKTsKIAogICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRVNFVCkKQEAgLTIzOTgsNyArMjQwMSw3IEBACiAgIGVsc2UgaWYgKChjaGFubmVsX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKICAgICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICB7Ci0gICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CkBAIC0yNjU0LDYgKzI2NTcsNyBAQAogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NPVU5URVJfTU9ERShodGltLT5Jbml0LkNvdW50ZXJNb2RlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0xPQ0tESVZJU0lPTl9ESVYoaHRpbS0+SW5pdC5DbG9ja0RpdmlzaW9uKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fT1BNX01PREUoT25lUHVsc2VNb2RlKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fUEVSSU9EKGh0aW0sIGh0aW0tPkluaXQuUGVyaW9kKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQVVUT1JFTE9BRF9QUkVMT0FEKGh0aW0tPkluaXQuQXV0b1JlbG9hZFByZWxvYWQpKTsKIAogICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRVNFVCkKQEAgLTMwMzEsNyArMzAzNSw3IEBACiAgICogQHBhcmFtICBzQ29uZmlnIFRJTSBFbmNvZGVyIEludGVyZmFjZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX0luaXQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sICBUSU1fRW5jb2Rlcl9Jbml0VHlwZURlZiAqc0NvbmZpZykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9Jbml0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBjb25zdCBUSU1fRW5jb2Rlcl9Jbml0VHlwZURlZiAqc0NvbmZpZykKIHsKICAgdWludDMyX3QgdG1wc21jcjsKICAgdWludDMyX3QgdG1wY2NtcjE7CkBAIC0zMDU3LDYgKzMwNjEsNyBAQAogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX1BSRVNDQUxFUihzQ29uZmlnLT5JQzJQcmVzY2FsZXIpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19GSUxURVIoc0NvbmZpZy0+SUMxRmlsdGVyKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fSUNfRklMVEVSKHNDb25maWctPklDMkZpbHRlcikpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX1BFUklPRChodGltLCBodGltLT5Jbml0LlBlcmlvZCkpOwogCiAgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFU0VUKQogICB7CkBAIC0zNTY2LDcgKzM1NzEsNyBAQAogICAgIGVsc2UgaWYgKChjaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICAgICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICAgIHsKLSAgICAgIGlmICgocERhdGExID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCisgICAgICBpZiAoKHBEYXRhMSA9PSBOVUxMKSB8fCAoTGVuZ3RoID09IDBVKSkKICAgICAgIHsKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KQEAgLTM1OTEsNyArMzU5Niw3IEBACiAgICAgZWxzZSBpZiAoKGNoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCiAgICAgICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCiAgICAgewotICAgICAgaWYgKChwRGF0YTIgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICAgIGlmICgocERhdGEyID09IE5VTEwpIHx8IChMZW5ndGggPT0gMFUpKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtMzYyMCw3ICszNjI1LDcgQEAKICAgICAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICAgICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICAgIHsKLSAgICAgIGlmICgoKChwRGF0YTEgPT0gTlVMTCkgfHwgKHBEYXRhMiA9PSBOVUxMKSkpICYmIChMZW5ndGggPiAwVSkpCisgICAgICBpZiAoKCgocERhdGExID09IE5VTEwpIHx8IChwRGF0YTIgPT0gTlVMTCkpKSB8fCAoTGVuZ3RoID09IDBVKSkKICAgICAgIHsKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KQEAgLTQ1NTksOCArNDU2NCw4IEBACiAgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0JEVFIKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfT1IKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQ0NNUjMgKCopCi0gICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjUgKCopCi0gICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjYgKCopCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjUgICgqKQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ1I2ICAoKikKICAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEBwYXJhbSAgQnVyc3RSZXF1ZXN0U3JjIFRJTSBETUEgUmVxdWVzdCBzb3VyY2VzCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNDU4MCwxMyArNDU4NSwxMSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9Xcml0ZVN0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdEJhc2VBZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgY29uc3QgdWludDMyX3QgKkJ1cnN0QnVmZmVyLCB1aW50MzJfdCAgQnVyc3RMZW5ndGgpCiB7Ci0gIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOwogCi0gIGlmIChzdGF0dXMgPT0gSEFMX09LKQotICB7Ci0gICAgc3RhdHVzID0gSEFMX1RJTV9ETUFCdXJzdF9NdWx0aVdyaXRlU3RhcnQoaHRpbSwgQnVyc3RCYXNlQWRkcmVzcywgQnVyc3RSZXF1ZXN0U3JjLCBCdXJzdEJ1ZmZlciwgQnVyc3RMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpOwotICB9CisgIHN0YXR1cyA9IEhBTF9USU1fRE1BQnVyc3RfTXVsdGlXcml0ZVN0YXJ0KGh0aW0sIEJ1cnN0QmFzZUFkZHJlc3MsIEJ1cnN0UmVxdWVzdFNyYywgQnVyc3RCdWZmZXIsIEJ1cnN0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSk7CisKIAogCiAgIHJldHVybiBzdGF0dXM7CkBAIC00NjE3LDggKzQ2MjAsOCBAQAogICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9CRFRSCiAgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX09SCiAgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDTVIzICgqKQotICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ1I1ICgqKQotICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ1I2ICgqKQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ1I1ICAoKikKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQ0NSNiAgKCopCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKiBAcGFyYW0gIEJ1cnN0UmVxdWVzdFNyYyBUSU0gRE1BIFJlcXVlc3Qgc291cmNlcwogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTQ5MDgsOCArNDkxMSw4IEBACiAgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0JEVFIKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfT1IKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQ0NNUjMgKCopCi0gICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjUgKCopCi0gICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjYgKCopCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjUgICgqKQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ1I2ICAoKikKICAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEBwYXJhbSAgQnVyc3RSZXF1ZXN0U3JjIFRJTSBETUEgUmVxdWVzdCBzb3VyY2VzCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNDkyOSwxMyArNDkzMiwxMSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9SZWFkU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IEJ1cnN0QmFzZUFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMsIHVpbnQzMl90ICAqQnVyc3RCdWZmZXIsIHVpbnQzMl90ICBCdXJzdExlbmd0aCkKIHsKLSAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CiAKLSAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCi0gIHsKLSAgICBzdGF0dXMgPSBIQUxfVElNX0RNQUJ1cnN0X011bHRpUmVhZFN0YXJ0KGh0aW0sIEJ1cnN0QmFzZUFkZHJlc3MsIEJ1cnN0UmVxdWVzdFNyYywgQnVyc3RCdWZmZXIsIEJ1cnN0TGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpOwotICB9CisgIHN0YXR1cyA9IEhBTF9USU1fRE1BQnVyc3RfTXVsdGlSZWFkU3RhcnQoaHRpbSwgQnVyc3RCYXNlQWRkcmVzcywgQnVyc3RSZXF1ZXN0U3JjLCBCdXJzdEJ1ZmZlciwgQnVyc3RMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpOworCiAKICAgcmV0dXJuIHN0YXR1czsKIH0KQEAgLTQ5NjUsOCArNDk2Niw4IEBACiAgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0JEVFIKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfT1IKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQ0NNUjMgKCopCi0gICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjUgKCopCi0gICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjYgKCopCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjUgICgqKQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ1I2ICAoKikKICAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEBwYXJhbSAgQnVyc3RSZXF1ZXN0U3JjIFRJTSBETUEgUmVxdWVzdCBzb3VyY2VzCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNTMyNCw4ICs1MzI1LDggQEAKICAgICB7CiAgICAgICAvKiBDbGVhciB0aGUgT0NSRUYgY2xlYXIgc2VsZWN0aW9uIGJpdCAqLwogICAgICAgQ0xFQVJfQklUKGh0aW0tPkluc3RhbmNlLT5TTUNSLCBUSU1fU01DUl9PQ0NTKTsKKyAgICAgIGJyZWFrOwogICAgIH0KLSAgICBicmVhazsKICNlbmRpZiAvKiBUSU1fU01DUl9PQ0NTICovCiAKICAgICBjYXNlIFRJTV9DTEVBUklOUFVUU09VUkNFX0VUUjoKQEAgLTYwMTcsOCArNjAxOCw2IEBACiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9Ci0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaHRpbSk7CiAKICAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCiAgIHsKQEAgLTYyMTYsOSArNjIxNSw2IEBACiAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhodGltKTsKLQogICByZXR1cm4gc3RhdHVzOwogfQogCkBAIC02MjY0LDkgKzYyNjAsNiBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhodGltKTsKLQogICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKQEAgLTY1MDUsOSArNjQ5OCw2IEBACiAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhodGltKTsKLQogICByZXR1cm4gc3RhdHVzOwogfQogI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfdGltX2V4LmMgYi9TcmMvc3RtMzJmM3h4X2hhbF90aW1fZXguYwppbmRleCBmYTFmZjlkLi44Mzk0YjU3IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF90aW1fZXguYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF90aW1fZXguYwpAQCAtMTIsNyArMTIsNiBAQAogICAqICAgICAgICAgICArIFRpbWUgT3V0cHV0IENvbXBhcmUvUFdNIENoYW5uZWwgQ29uZmlndXJhdGlvbiAoZm9yIGNoYW5uZWxzIDUgYW5kIDYpCiAgICogICAgICAgICAgICsgVGltZSBPQ1JlZiBjbGVhciBjb25maWd1cmF0aW9uCiAgICogICAgICAgICAgICsgVGltZXIgcmVtYXBwaW5nIGNhcGFiaWxpdGllcyBjb25maWd1cmF0aW9uCi0gICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC0xNTQsNiArMTUzLDcgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DTE9DS0RJVklTSU9OX0RJVihodGltLT5Jbml0LkNsb2NrRGl2aXNpb24pKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BVVRPUkVMT0FEX1BSRUxPQUQoaHRpbS0+SW5pdC5BdXRvUmVsb2FkUHJlbG9hZCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX1BPTEFSSVRZKHNDb25maWctPklDMVBvbGFyaXR5KSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fUEVSSU9EKGh0aW0sIGh0aW0tPkluaXQuUGVyaW9kKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fSUNfUFJFU0NBTEVSKHNDb25maWctPklDMVByZXNjYWxlcikpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX0ZJTFRFUihzQ29uZmlnLT5JQzFGaWx0ZXIpKTsKIApAQCAtNTA0LDcgKzUwNCw3IEBACiAgIGVsc2UgaWYgKChjaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKICAgewotICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICBpZiAoKHBEYXRhID09IE5VTEwpIHx8IChMZW5ndGggPT0gMFUpKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQpAQCAtODg1LDcgKzg4NSw3IEBACiAgIH0KICAgZWxzZSBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CkBAIC0xMzY3LDcgKzEzNjcsNyBAQAogICB9CiAgIGVsc2UgaWYgKFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKICAgewotICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICBpZiAoKHBEYXRhID09IE5VTEwpIHx8IChMZW5ndGggPT0gMFUpKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQpAQCAtMjE5MCw3ICsyMTkwLDcgQEAKIAogICAvKiBDaGVjayBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fUkVNQVAoaHRpbS0+SW5zdGFuY2UsIFJlbWFwKSk7Ci0gIAorCiAgIF9fSEFMX0xPQ0soaHRpbSk7CiAKICAgLyogU2V0IHRoZSBUaW1lciByZW1hcHBpbmcgY29uZmlndXJhdGlvbiAqLwpAQCAtMjM3OCw3ICsyMzc4LDcgQEAKICAgKi8KIAogLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAZGVmZ3JvdXAgVElNRXhfUHJpdmF0ZV9GdW5jdGlvbnMgVElNRXggUHJpdmF0ZSBGdW5jdGlvbnMKKy8qKiBAZGVmZ3JvdXAgVElNRXhfUHJpdmF0ZV9GdW5jdGlvbnMgVElNIEV4dGVuZGVkIFByaXZhdGUgRnVuY3Rpb25zCiAgICogQHsKICAgKi8KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfdGltZWJhc2VfcnRjX2FsYXJtX3RlbXBsYXRlLmMgYi9TcmMvc3RtMzJmM3h4X2hhbF90aW1lYmFzZV9ydGNfYWxhcm1fdGVtcGxhdGUuYwppbmRleCBlMzlhNjJhLi4zNTM3YWFhIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2hhbF90aW1lYmFzZV9ydGNfYWxhcm1fdGVtcGxhdGUuYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF90aW1lYmFzZV9ydGNfYWxhcm1fdGVtcGxhdGUuYwpAQCAtNSwxMCArNSwxMCBAQAogICAqCiAgICogICAgICAgICAgVGhpcyBmaWxlIG92ZXJyaWRlIHRoZSBuYXRpdmUgSEFMIHRpbWUgYmFzZSBmdW5jdGlvbnMgKGRlZmluZWQgYXMgd2VhaykKICAgKiAgICAgICAgICB0byB1c2UgdGhlIFJUQyBBTEFSTSBmb3IgdGltZSBiYXNlIGdlbmVyYXRpb246Ci0gICogICAgICAgICAgICsgSW50aWFsaXplcyB0aGUgUlRDIHBlcmlwaGVyYWwgdG8gaW5jcmVtZW50IHRoZSBzZWNvbmRzIHJlZ2lzdGVycyBlYWNoIDFtcworICAqICAgICAgICAgICArIEluaXRpYWxpemVzIHRoZSBSVEMgcGVyaXBoZXJhbCB0byBpbmNyZW1lbnQgdGhlIHNlY29uZHMgcmVnaXN0ZXJzIGVhY2ggMW1zCiAgICogICAgICAgICAgICsgVGhlIGFsYXJtIGlzIGNvbmZpZ3VyZWQgdG8gYXNzZXJ0IGFuIGludGVycnVwdCB3aGVuIHRoZSBSVEMgcmVhY2hlcyAxbXMgCiAgICogICAgICAgICAgICsgSEFMX0luY1RpY2sgaXMgY2FsbGVkIGF0IGVhY2ggQWxhcm0gZXZlbnQgYW5kIHRoZSB0aW1lIGlzIHJlc2V0IHRvIDAwOjAwOjAwCi0gICogICAgICAgICAgICsgSFNFIChkZWZhdWx0KSwgTFNFIG9yIExTSSBjYW4gYmUgc2VsZWN0ZWQgYXMgUlRDIGNsb2NrIHNvdXJjZSAgCisgICogICAgICAgICAgICsgSFNFIChkZWZhdWx0KSwgTFNFIG9yIExTSSBjYW4gYmUgc2VsZWN0ZWQgYXMgUlRDIGNsb2NrIHNvdXJjZQogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KQEAgLTMxNywzICszMTcsNSBAQAogLyoqCiAgICogQH0KICAgKi8KKworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF90aW1lYmFzZV9ydGNfd2FrZXVwX3RlbXBsYXRlLmMgYi9TcmMvc3RtMzJmM3h4X2hhbF90aW1lYmFzZV9ydGNfd2FrZXVwX3RlbXBsYXRlLmMKaW5kZXggYjZiOTQ3Zi4uY2NkYmMzZiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9oYWxfdGltZWJhc2VfcnRjX3dha2V1cF90ZW1wbGF0ZS5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX3RpbWViYXNlX3J0Y193YWtldXBfdGVtcGxhdGUuYwpAQCAtNSw3ICs1LDcgQEAKICAgKiAgICAKICAgKiAgICAgICAgICBUaGlzIGZpbGUgb3ZlcnJpZGVzIHRoZSBuYXRpdmUgSEFMIHRpbWUgYmFzZSBmdW5jdGlvbnMgKGRlZmluZWQgYXMgd2VhaykKICAgKiAgICAgICAgICB0byB1c2UgdGhlIFJUQyBXQUtFVVAgZm9yIHRoZSB0aW1lIGJhc2UgZ2VuZXJhdGlvbjoKLSAgKiAgICAgICAgICAgKyBJbnRpYWxpemVzIHRoZSBSVEMgcGVyaXBoZXJhbCBhbmQgY29uZmlndXJlcyB0aGUgd2FrZXVwIHRpbWVyIHRvIGJlCisgICogICAgICAgICAgICsgSW5pdGlhbGl6ZXMgdGhlIFJUQyBwZXJpcGhlcmFsIGFuZCBjb25maWd1cmVzIHRoZSB3YWtldXAgdGltZXIgdG8gYmUKICAgKiAgICAgICAgICAgICBpbmNyZW1lbnRlZCBlYWNoIDFtcwogICAqICAgICAgICAgICArIFRoZSB3YWtldXAgZmVhdHVyZSBpcyBjb25maWd1cmVkIHRvIGFzc2VydCBhbiBpbnRlcnJ1cHQgZWFjaCAxbXMgCiAgICogICAgICAgICAgICsgSEFMX0luY1RpY2sgaXMgY2FsbGVkIGluc2lkZSB0aGUgSEFMX1JUQ0V4X1dha2VVcFRpbWVyRXZlbnRDYWxsYmFjawpAQCAtMjk0LDMgKzI5NCw1IEBACiAvKioKICAgKiBAfQogICAqLworCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYzeHhfaGFsX3RpbWViYXNlX3RpbV90ZW1wbGF0ZS5jIGIvU3JjL3N0bTMyZjN4eF9oYWxfdGltZWJhc2VfdGltX3RlbXBsYXRlLmMKaW5kZXggZTAxOTMwMi4uMDRhZWQyMSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9oYWxfdGltZWJhc2VfdGltX3RlbXBsYXRlLmMKKysrIGIvU3JjL3N0bTMyZjN4eF9oYWxfdGltZWJhc2VfdGltX3RlbXBsYXRlLmMKQEAgLTUsNyArNSw3IEBACiAgICogICAgCiAgICogICAgICAgICAgVGhpcyBmaWxlIG92ZXJyaWRlIHRoZSBuYXRpdmUgSEFMIHRpbWUgYmFzZSBmdW5jdGlvbnMgKGRlZmluZWQgYXMgd2VhaykKICAgKiAgICAgICAgICB0aGUgVElNIHRpbWUgYmFzZToKLSAgKiAgICAgICAgICAgKyBJbnRpYWxpemVzIHRoZSBUSU0gcGVyaXBoZXJhbCBnZW5lcmF0ZSBhIFBlcmlvZCBlbGFwc2VkIEV2ZW50IGVhY2ggMW1zCisgICogICAgICAgICAgICsgSW5pdGlhbGl6ZXMgdGhlIFRJTSBwZXJpcGhlcmFsIGdlbmVyYXRlIGEgUGVyaW9kIGVsYXBzZWQgRXZlbnQgZWFjaCAxbXMKICAgKiAgICAgICAgICAgKyBIQUxfSW5jVGljayBpcyBjYWxsZWQgaW5zaWRlIEhBTF9USU1fUGVyaW9kRWxhcHNlZENhbGxiYWNrIGllIGVhY2ggMW1zCiAgICogCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTc0LDMgKzE3NCw1IEBACiAvKioKICAgKiBAfQogICAqLyAKKworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF90c2MuYyBiL1NyYy9zdG0zMmYzeHhfaGFsX3RzYy5jCmluZGV4IDdjNWM0MzcuLjZmNDAwYWQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfaGFsX3RzYy5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX3RzYy5jCkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICB8ICAgUEI4ICAoQUYpICB8ICAgVFNDX1NZTkMgICAgICB8CiAgICAgfCAgIFBCMTAgKEFGKSAgfCAgICAgICAgICAgICAgICAgfAogICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKICAgKi8KIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTgyMSw3ICs4MjEsNyBAQAogICAqIEBwYXJhbSAgZ3hfaW5kZXggSW5kZXggb2YgdGhlIGdyb3VwCiAgICogQHJldHZhbCBHcm91cCBzdGF0dXMKICAgKi8KLVRTQ19Hcm91cFN0YXR1c1R5cGVEZWYgSEFMX1RTQ19Hcm91cEdldFN0YXR1cyhUU0NfSGFuZGxlVHlwZURlZiAqaHRzYywgdWludDMyX3QgZ3hfaW5kZXgpCitUU0NfR3JvdXBTdGF0dXNUeXBlRGVmIEhBTF9UU0NfR3JvdXBHZXRTdGF0dXMoY29uc3QgVFNDX0hhbmRsZVR5cGVEZWYgKmh0c2MsIHVpbnQzMl90IGd4X2luZGV4KQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVFNDX0FMTF9JTlNUQU5DRShodHNjLT5JbnN0YW5jZSkpOwpAQCAtODM4LDcgKzgzOCw3IEBACiAgICogQHBhcmFtICBneF9pbmRleCBJbmRleCBvZiB0aGUgZ3JvdXAKICAgKiBAcmV0dmFsIEFjcXVpc2l0aW9uIG1lYXN1cmUKICAgKi8KLXVpbnQzMl90IEhBTF9UU0NfR3JvdXBHZXRWYWx1ZShUU0NfSGFuZGxlVHlwZURlZiAqaHRzYywgdWludDMyX3QgZ3hfaW5kZXgpCit1aW50MzJfdCBIQUxfVFNDX0dyb3VwR2V0VmFsdWUoY29uc3QgVFNDX0hhbmRsZVR5cGVEZWYgKmh0c2MsIHVpbnQzMl90IGd4X2luZGV4KQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVFNDX0FMTF9JTlNUQU5DRShodHNjLT5JbnN0YW5jZSkpOwpAQCAtODczLDcgKzg3Myw3IEBACiAgICogQHBhcmFtICBjb25maWcgUG9pbnRlciB0byB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVFNDX0lPQ29uZmlnKFRTQ19IYW5kbGVUeXBlRGVmICpodHNjLCBUU0NfSU9Db25maWdUeXBlRGVmICpjb25maWcpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVFNDX0lPQ29uZmlnKFRTQ19IYW5kbGVUeXBlRGVmICpodHNjLCBjb25zdCBUU0NfSU9Db25maWdUeXBlRGVmICpjb25maWcpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19UU0NfQUxMX0lOU1RBTkNFKGh0c2MtPkluc3RhbmNlKSk7CkBAIC0xMTIyLDMgKzExMjIsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfdWFydC5jIGIvU3JjL3N0bTMyZjN4eF9oYWxfdWFydC5jCmluZGV4IDBhMmM4YTEuLjI1M2JhZTggMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfaGFsX3VhcnQuYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF91YXJ0LmMKQEAgLTksNiArOSw3IEBACiAgICogICAgICAgICAgICsgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKICAgKgorICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgpAQCAtMTc2LDcgKzE3Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQVJUX0NSMV9PVkVSOCkpIC8qITwgVUFSVCBvciBVU0FSVCBDUjEgZmllbGRzIG9mIHBhcmFtZXRlcnMgc2V0IGJ5IFVBUlRfU2V0Q29uZmlnIEFQSSAqLwogCiAjZGVmaW5lIFVTQVJUX0NSM19GSUVMRFMgICgodWludDMyX3QpKFVTQVJUX0NSM19SVFNFIHwgVVNBUlRfQ1IzX0NUU0UgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0FSVF9DUjNfT05FQklUKSkgLyohPCBVQVJUIG9yIFVTQVJUIENSMyBmaWVsZHMgb2YgcGFyYW1ldGVycyBzZXQgYnkgVUFSVF9TZXRDb25maWcgQVBJICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQVJUX0NSM19PTkVCSVQpKSAvKiE8IFVBUlQgb3IgVVNBUlQgQ1IzIGZpZWxkcyBvZiBwYXJhbWV0ZXJzIHNldCBieSBVQVJUX1NldENvbmZpZyBBUEkgKi8KIAogCiAjZGVmaW5lIFVBUlRfQlJSX01JTiAgICAweDEwVSAgICAgICAgLyogVUFSVCBCUlIgbWluaW11bSBhdXRob3JpemVkIHZhbHVlICovCkBAIC02NzgsNiArNjc5LDkgQEAKIC8qKgogICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIFVBUlQgQ2FsbGJhY2sKICAgKiAgICAgICAgIFRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogQG5vdGUgICBUaGUgSEFMX1VBUlRfUmVnaXN0ZXJDYWxsYmFjaygpIG1heSBiZSBjYWxsZWQgYmVmb3JlIEhBTF9VQVJUX0luaXQoKSwgSEFMX0hhbGZEdXBsZXhfSW5pdCgpLAorICAqICAgICAgICAgSEFMX0xJTl9Jbml0KCksIEhBTF9NdWx0aVByb2Nlc3Nvcl9Jbml0KCkgb3IgSEFMX1JTNDg1RXhfSW5pdCgpIGluIEhBTF9VQVJUX1NUQVRFX1JFU0VUIHRvIHJlZ2lzdGVyCisgICogICAgICAgICBjYWxsYmFja3MgZm9yIEhBTF9VQVJUX01TUElOSVRfQ0JfSUQgYW5kIEhBTF9VQVJUX01TUERFSU5JVF9DQl9JRAogICAqIEBwYXJhbSAgaHVhcnQgdWFydCBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC03MDcsOCArNzExLDYgQEAKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKLSAgX19IQUxfTE9DSyhodWFydCk7Ci0KICAgaWYgKGh1YXJ0LT5nU3RhdGUgPT0gSEFMX1VBUlRfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCkBAIC03OTEsMTQgKzc5MywxNSBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICBfX0hBTF9VTkxPQ0soaHVhcnQpOwotCiAgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgogICAqIEBicmllZiAgVW5yZWdpc3RlciBhbiBVQVJUIENhbGxiYWNrCiAgICogICAgICAgICBVQVJUIGNhbGxhYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAbm90ZSAgIFRoZSBIQUxfVUFSVF9VblJlZ2lzdGVyQ2FsbGJhY2soKSBtYXkgYmUgY2FsbGVkIGJlZm9yZSBIQUxfVUFSVF9Jbml0KCksIEhBTF9IYWxmRHVwbGV4X0luaXQoKSwKKyAgKiAgICAgICAgIEhBTF9MSU5fSW5pdCgpLCBIQUxfTXVsdGlQcm9jZXNzb3JfSW5pdCgpIG9yIEhBTF9SUzQ4NUV4X0luaXQoKSBpbiBIQUxfVUFSVF9TVEFURV9SRVNFVCB0byB1bi1yZWdpc3RlcgorICAqICAgICAgICAgY2FsbGJhY2tzIGZvciBIQUxfVUFSVF9NU1BJTklUX0NCX0lEIGFuZCBIQUxfVUFSVF9NU1BERUlOSVRfQ0JfSUQKICAgKiBAcGFyYW0gIGh1YXJ0IHVhcnQgaGFuZGxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC04MTksOCArODIyLDYgQEAKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCi0gIF9fSEFMX0xPQ0soaHVhcnQpOwotCiAgIGlmIChIQUxfVUFSVF9TVEFURV9SRUFEWSA9PSBodWFydC0+Z1N0YXRlKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQpAQCAtOTA0LDggKzkwNSw2IEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIF9fSEFMX1VOTE9DSyhodWFydCk7Ci0KICAgcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTI1Nyw3ICsxMjU2LDcgQEAKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogCi0gICAgaHVhcnQtPnBUeEJ1ZmZQdHIgID0gKHVpbnQ4X3QgKikgcERhdGE7CisgICAgaHVhcnQtPnBUeEJ1ZmZQdHIgID0gcERhdGE7CiAgICAgaHVhcnQtPlR4WGZlclNpemUgID0gU2l6ZTsKICAgICBodWFydC0+VHhYZmVyQ291bnQgPSBTaXplOwogICAgIGh1YXJ0LT5UeElTUiAgICAgICA9IE5VTEw7CkBAIC0xMzQ0LDcgKzEzNDMsNyBAQAogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CiAKLSAgICBodWFydC0+cFR4QnVmZlB0ciAgPSAodWludDhfdCAqKSBwRGF0YTsKKyAgICBodWFydC0+cFR4QnVmZlB0ciAgPSBwRGF0YTsKICAgICBodWFydC0+VHhYZmVyU2l6ZSAgPSBTaXplOwogICAgIGh1YXJ0LT5UeFhmZXJDb3VudCA9IFNpemU7CiAKQEAgLTE0ODEsNyArMTQ4MCw3IEBACiAKICAgICAvKiBSZS1lbmFibGUgUEUgYW5kIEVSUiAoRnJhbWUgZXJyb3IsIG5vaXNlIGVycm9yLCBvdmVycnVuIGVycm9yKSBpbnRlcnJ1cHRzICovCiAgICAgaWYgKGh1YXJ0LT5Jbml0LlBhcml0eSAhPSBVQVJUX1BBUklUWV9OT05FKQotICAgIHsgICAgCisgICAgewogICAgICAgQVRPTUlDX1NFVF9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9QRUlFKTsKICAgICB9CiAgICAgQVRPTUlDX1NFVF9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19FSUUpOwpAQCAtMTU4NSw5ICsxNTg0LDEwIEBACiAgICAgQVRPTUlDX0NMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMSwgKFVTQVJUX0NSMV9JRExFSUUpKTsKICAgfQogCi0gIC8qIERpc2FibGUgdGhlIFVBUlQgRE1BIFR4IHJlcXVlc3QgaWYgZW5hYmxlZCAqLworICAvKiBBYm9ydCB0aGUgVUFSVCBETUEgVHggY2hhbm5lbCBpZiBlbmFibGVkICovCiAgIGlmIChIQUxfSVNfQklUX1NFVChodWFydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0RNQVQpKQogICB7CisgICAgLyogRGlzYWJsZSB0aGUgVUFSVCBETUEgVHggcmVxdWVzdCBpZiBlbmFibGVkICovCiAgICAgQVRPTUlDX0NMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0RNQVQpOwogCiAgICAgLyogQWJvcnQgdGhlIFVBUlQgRE1BIFR4IGNoYW5uZWwgOiB1c2UgYmxvY2tpbmcgRE1BIEFib3J0IEFQSSAobm8gY2FsbGJhY2spICovCkBAIC0xNjEwLDkgKzE2MTAsMTAgQEAKICAgICB9CiAgIH0KIAotICAvKiBEaXNhYmxlIHRoZSBVQVJUIERNQSBSeCByZXF1ZXN0IGlmIGVuYWJsZWQgKi8KKyAgLyogQWJvcnQgdGhlIFVBUlQgRE1BIFJ4IGNoYW5uZWwgaWYgZW5hYmxlZCAqLwogICBpZiAoSEFMX0lTX0JJVF9TRVQoaHVhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19ETUFSKSkKICAgeworICAgIC8qIERpc2FibGUgdGhlIFVBUlQgRE1BIFJ4IHJlcXVlc3QgaWYgZW5hYmxlZCAqLwogICAgIEFUT01JQ19DTEVBUl9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19ETUFSKTsKIAogICAgIC8qIEFib3J0IHRoZSBVQVJUIERNQSBSeCBjaGFubmVsIDogdXNlIGJsb2NraW5nIERNQSBBYm9ydCBBUEkgKG5vIGNhbGxiYWNrKSAqLwpAQCAtMTY3Myw5ICsxNjc0LDEwIEBACiAgIC8qIERpc2FibGUgVFhFSUUgYW5kIFRDSUUgaW50ZXJydXB0cyAqLwogICBBVE9NSUNfQ0xFQVJfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IxLCAoVVNBUlRfQ1IxX1RYRUlFIHwgVVNBUlRfQ1IxX1RDSUUpKTsKIAotICAvKiBEaXNhYmxlIHRoZSBVQVJUIERNQSBUeCByZXF1ZXN0IGlmIGVuYWJsZWQgKi8KKyAgLyogQWJvcnQgdGhlIFVBUlQgRE1BIFR4IGNoYW5uZWwgaWYgZW5hYmxlZCAqLwogICBpZiAoSEFMX0lTX0JJVF9TRVQoaHVhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19ETUFUKSkKICAgeworICAgIC8qIERpc2FibGUgdGhlIFVBUlQgRE1BIFR4IHJlcXVlc3QgaWYgZW5hYmxlZCAqLwogICAgIEFUT01JQ19DTEVBUl9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19ETUFUKTsKIAogICAgIC8qIEFib3J0IHRoZSBVQVJUIERNQSBUeCBjaGFubmVsIDogdXNlIGJsb2NraW5nIERNQSBBYm9ydCBBUEkgKG5vIGNhbGxiYWNrKSAqLwpAQCAtMTczMiw5ICsxNzM0LDEwIEBACiAgICAgQVRPTUlDX0NMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMSwgKFVTQVJUX0NSMV9JRExFSUUpKTsKICAgfQogCi0gIC8qIERpc2FibGUgdGhlIFVBUlQgRE1BIFJ4IHJlcXVlc3QgaWYgZW5hYmxlZCAqLworICAvKiBBYm9ydCB0aGUgVUFSVCBETUEgUnggY2hhbm5lbCBpZiBlbmFibGVkICovCiAgIGlmIChIQUxfSVNfQklUX1NFVChodWFydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0RNQVIpKQogICB7CisgICAgLyogRGlzYWJsZSB0aGUgVUFSVCBETUEgUnggcmVxdWVzdCBpZiBlbmFibGVkICovCiAgICAgQVRPTUlDX0NMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0RNQVIpOwogCiAgICAgLyogQWJvcnQgdGhlIFVBUlQgRE1BIFJ4IGNoYW5uZWwgOiB1c2UgYmxvY2tpbmcgRE1BIEFib3J0IEFQSSAobm8gY2FsbGJhY2spICovCkBAIC0xODMyLDcgKzE4MzUsNyBAQAogICAgIH0KICAgfQogCi0gIC8qIERpc2FibGUgdGhlIFVBUlQgRE1BIFR4IHJlcXVlc3QgaWYgZW5hYmxlZCAqLworICAvKiBBYm9ydCB0aGUgVUFSVCBETUEgVHggY2hhbm5lbCBpZiBlbmFibGVkICovCiAgIGlmIChIQUxfSVNfQklUX1NFVChodWFydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0RNQVQpKQogICB7CiAgICAgLyogRGlzYWJsZSBETUEgVHggYXQgVUFSVCBsZXZlbCAqLwpAQCAtMTg1Niw5ICsxODU5LDEwIEBACiAgICAgfQogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgVUFSVCBETUEgUnggcmVxdWVzdCBpZiBlbmFibGVkICovCisgIC8qIEFib3J0IHRoZSBVQVJUIERNQSBSeCBjaGFubmVsIGlmIGVuYWJsZWQgKi8KICAgaWYgKEhBTF9JU19CSVRfU0VUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IzLCBVU0FSVF9DUjNfRE1BUikpCiAgIHsKKyAgICAvKiBEaXNhYmxlIHRoZSBVQVJUIERNQSBSeCByZXF1ZXN0IGlmIGVuYWJsZWQgKi8KICAgICBBVE9NSUNfQ0xFQVJfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IzLCBVU0FSVF9DUjNfRE1BUik7CiAKICAgICAvKiBBYm9ydCB0aGUgVUFSVCBETUEgUnggY2hhbm5lbCA6IHVzZSBub24gYmxvY2tpbmcgRE1BIEFib3J0IEFQSSAoY2FsbGJhY2spICovCkBAIC0xOTM4LDkgKzE5NDIsMTAgQEAKICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCiAgIEFUT01JQ19DTEVBUl9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjEsIChVU0FSVF9DUjFfVFhFSUUgfCBVU0FSVF9DUjFfVENJRSkpOwogCi0gIC8qIERpc2FibGUgdGhlIFVBUlQgRE1BIFR4IHJlcXVlc3QgaWYgZW5hYmxlZCAqLworICAvKiBBYm9ydCB0aGUgVUFSVCBETUEgVHggY2hhbm5lbCBpZiBlbmFibGVkICovCiAgIGlmIChIQUxfSVNfQklUX1NFVChodWFydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0RNQVQpKQogICB7CisgICAgLyogRGlzYWJsZSB0aGUgVUFSVCBETUEgVHggcmVxdWVzdCBpZiBlbmFibGVkICovCiAgICAgQVRPTUlDX0NMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0RNQVQpOwogCiAgICAgLyogQWJvcnQgdGhlIFVBUlQgRE1BIFR4IGNoYW5uZWwgOiB1c2Ugbm9uIGJsb2NraW5nIERNQSBBYm9ydCBBUEkgKGNhbGxiYWNrKSAqLwpAQCAtMjAyOSw5ICsyMDM0LDEwIEBACiAgICAgQVRPTUlDX0NMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMSwgKFVTQVJUX0NSMV9JRExFSUUpKTsKICAgfQogCi0gIC8qIERpc2FibGUgdGhlIFVBUlQgRE1BIFJ4IHJlcXVlc3QgaWYgZW5hYmxlZCAqLworICAvKiBBYm9ydCB0aGUgVUFSVCBETUEgUnggY2hhbm5lbCBpZiBlbmFibGVkICovCiAgIGlmIChIQUxfSVNfQklUX1NFVChodWFydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0RNQVIpKQogICB7CisgICAgLyogRGlzYWJsZSB0aGUgVUFSVCBETUEgUnggcmVxdWVzdCBpZiBlbmFibGVkICovCiAgICAgQVRPTUlDX0NMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0RNQVIpOwogCiAgICAgLyogQWJvcnQgdGhlIFVBUlQgRE1BIFJ4IGNoYW5uZWwgOiB1c2Ugbm9uIGJsb2NraW5nIERNQSBBYm9ydCBBUEkgKGNhbGxiYWNrKSAqLwpAQCAtMjIwOCw5ICsyMjE0LDEwIEBACiAgICAgICAgICAgIERpc2FibGUgUnggSW50ZXJydXB0cywgYW5kIGRpc2FibGUgUnggRE1BIHJlcXVlc3QsIGlmIG9uZ29pbmcgKi8KICAgICAgICAgVUFSVF9FbmRSeFRyYW5zZmVyKGh1YXJ0KTsKIAotICAgICAgICAvKiBEaXNhYmxlIHRoZSBVQVJUIERNQSBSeCByZXF1ZXN0IGlmIGVuYWJsZWQgKi8KKyAgICAgICAgLyogQWJvcnQgdGhlIFVBUlQgRE1BIFJ4IGNoYW5uZWwgaWYgZW5hYmxlZCAqLwogICAgICAgICBpZiAoSEFMX0lTX0JJVF9TRVQoaHVhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19ETUFSKSkKICAgICAgICAgeworICAgICAgICAgIC8qIERpc2FibGUgdGhlIFVBUlQgRE1BIFJ4IHJlcXVlc3QgaWYgZW5hYmxlZCAqLwogICAgICAgICAgIEFUT01JQ19DTEVBUl9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19ETUFSKTsKIAogICAgICAgICAgIC8qIEFib3J0IHRoZSBVQVJUIERNQSBSeCBjaGFubmVsICovCkBAIC0yOTc4LDcgKzI5ODUsNyBAQAogICAgICAgdXNhcnRkaXYgPSAodWludDMyX3QpKFVBUlRfRElWX1NBTVBMSU5HMTYocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUpKTsKICAgICAgIGlmICgodXNhcnRkaXYgPj0gVUFSVF9CUlJfTUlOKSAmJiAodXNhcnRkaXYgPD0gVUFSVF9CUlJfTUFYKSkKICAgICAgIHsKLSAgICAgICAgaHVhcnQtPkluc3RhbmNlLT5CUlIgPSB1c2FydGRpdjsKKyAgICAgICAgaHVhcnQtPkluc3RhbmNlLT5CUlIgPSAodWludDE2X3QpdXNhcnRkaXY7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7CkBAIC0zMjM5LDcgKzMyNDYsNyBAQAogCiAgIC8qIEVuYWJsZSB0aGUgVUFSVCBQYXJpdHkgRXJyb3IgaW50ZXJydXB0IGFuZCBEYXRhIFJlZ2lzdGVyIE5vdCBFbXB0eSBpbnRlcnJ1cHQgKi8KICAgaWYgKGh1YXJ0LT5Jbml0LlBhcml0eSAhPSBVQVJUX1BBUklUWV9OT05FKQotICB7IAorICB7CiAgICAgQVRPTUlDX1NFVF9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9QRUlFIHwgVVNBUlRfQ1IxX1JYTkVJRSk7CiAgIH0KICAgZWxzZQpAQCAtMzc2Niw3ICszNzczLDcgQEAKICAgKi8KIHN0YXRpYyB2b2lkIFVBUlRfVHhJU1JfMTZCSVQoVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCkKIHsKLSAgdWludDE2X3QgKnRtcDsKKyAgY29uc3QgdWludDE2X3QgKnRtcDsKIAogICAvKiBDaGVjayB0aGF0IGEgVHggcHJvY2VzcyBpcyBvbmdvaW5nICovCiAgIGlmIChodWFydC0+Z1N0YXRlID09IEhBTF9VQVJUX1NUQVRFX0JVU1lfVFgpCkBAIC0zNzgxLDcgKzM3ODgsNyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgdG1wID0gKHVpbnQxNl90ICopIGh1YXJ0LT5wVHhCdWZmUHRyOworICAgICAgdG1wID0gKGNvbnN0IHVpbnQxNl90ICopIGh1YXJ0LT5wVHhCdWZmUHRyOwogICAgICAgaHVhcnQtPkluc3RhbmNlLT5URFIgPSAoKCh1aW50MzJfdCkoKnRtcCkpICYgMHgwMUZGVUwpOwogICAgICAgaHVhcnQtPnBUeEJ1ZmZQdHIgKz0gMlU7CiAgICAgICBodWFydC0+VHhYZmVyQ291bnQtLTsKQEAgLTQwMDUsMyArNDAxMiw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2hhbF91YXJ0X2V4LmMgYi9TcmMvc3RtMzJmM3h4X2hhbF91YXJ0X2V4LmMKaW5kZXggY2NkMjM3OS4uMGFhMzBmZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9oYWxfdWFydF9leC5jCisrKyBiL1NyYy9zdG0zMmYzeHhfaGFsX3VhcnRfZXguYwpAQCAtOCw2ICs4LDcgQEAKICAgKiAgICAgICAgICAgKyBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucwogICAqCisgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC03MjYsNyArNzI3LDcgQEAKIEhBTF9VQVJUX1J4RXZlbnRUeXBlVHlwZURlZiBIQUxfVUFSVEV4X0dldFJ4RXZlbnRUeXBlKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQpCiB7CiAgIC8qIFJldHVybiBSeCBFdmVudCB0eXBlIHZhbHVlLCBhcyBzdG9yZWQgaW4gVUFSVCBoYW5kbGUgKi8KLSAgcmV0dXJuKGh1YXJ0LT5SeEV2ZW50VHlwZSk7CisgIHJldHVybiAoaHVhcnQtPlJ4RXZlbnRUeXBlKTsKIH0KIAogLyoqCkBAIC03NzEsMyArNzcyLDQgQEAKIC8qKgogICAqIEB9CiAgICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYzeHhfaGFsX3VzYXJ0LmMgYi9TcmMvc3RtMzJmM3h4X2hhbF91c2FydC5jCmluZGV4IDEyZjVkN2YuLmY3NjJkYjQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfaGFsX3VzYXJ0LmMKKysrIGIvU3JjL3N0bTMyZjN4eF9oYWxfdXNhcnQuYwpAQCAtNDA1LDYgKzQwNSw4IEBACiAvKioKICAgKiBAYnJpZWYgIFJlZ2lzdGVyIGEgVXNlciBVU0FSVCBDYWxsYmFjawogICAqICAgICAgICAgVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAbm90ZSAgIFRoZSBIQUxfVVNBUlRfUmVnaXN0ZXJDYWxsYmFjaygpIG1heSBiZSBjYWxsZWQgYmVmb3JlIEhBTF9VU0FSVF9Jbml0KCkgaW4gSEFMX1VTQVJUX1NUQVRFX1JFU0VUCisgICogICAgICAgICB0byByZWdpc3RlciBjYWxsYmFja3MgZm9yIEhBTF9VU0FSVF9NU1BJTklUX0NCX0lEIGFuZCBIQUxfVVNBUlRfTVNQREVJTklUX0NCX0lECiAgICogQHBhcmFtICBodXNhcnQgdXNhcnQgaGFuZGxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSByZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNDMyLDggKzQzNCw2IEBACiAKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9Ci0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaHVzYXJ0KTsKIAogICBpZiAoaHVzYXJ0LT5TdGF0ZSA9PSBIQUxfVVNBUlRfU1RBVEVfUkVBRFkpCiAgIHsKQEAgLTUxNSwxNSArNTE1LDE0IEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaHVzYXJ0KTsKLQogICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFVucmVnaXN0ZXIgYW4gVVNBUlQgQ2FsbGJhY2sKICAgKiAgICAgICAgIFVTQVJUIGNhbGxhYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAbm90ZSAgIFRoZSBIQUxfVVNBUlRfVW5SZWdpc3RlckNhbGxiYWNrKCkgbWF5IGJlIGNhbGxlZCBiZWZvcmUgSEFMX1VTQVJUX0luaXQoKSBpbiBIQUxfVVNBUlRfU1RBVEVfUkVTRVQKKyAgKiAgICAgICAgIHRvIHVuLXJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgSEFMX1VTQVJUX01TUElOSVRfQ0JfSUQgYW5kIEhBTF9VU0FSVF9NU1BERUlOSVRfQ0JfSUQKICAgKiBAcGFyYW0gIGh1c2FydCB1c2FydCBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHVucmVnaXN0ZXJlZAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTU0Miw5ICs1NDEsNiBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhodXNhcnQpOwotCiAgIGlmIChIQUxfVVNBUlRfU1RBVEVfUkVBRFkgPT0gaHVzYXJ0LT5TdGF0ZSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKQEAgLTYyNSw5ICs2MjEsNiBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGh1c2FydCk7Ci0KICAgcmV0dXJuIHN0YXR1czsKIH0KICNlbmRpZiAvKiBVU0VfSEFMX1VTQVJUX1JFR0lTVEVSX0NBTExCQUNLUyAqLwpAQCAtNzI4LDcgKzcyMSw4IEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVVNBUlRfVHJhbnNtaXQoVVNBUlRfSGFuZGxlVHlwZURlZiAqaHVzYXJ0LCBjb25zdCB1aW50OF90ICpwVHhEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VTQVJUX1RyYW5zbWl0KFVTQVJUX0hhbmRsZVR5cGVEZWYgKmh1c2FydCwgY29uc3QgdWludDhfdCAqcFR4RGF0YSwgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KQogewogICBjb25zdCB1aW50OF90ICAqcHR4ZGF0YThiaXRzOwogICBjb25zdCB1aW50MTZfdCAqcHR4ZGF0YTE2Yml0czsKQEAgLTExODIsNyArMTE3Niw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgVVNBUlQgUGFyaXR5IEVycm9yIGFuZCBEYXRhIFJlZ2lzdGVyIG5vdCBlbXB0eSBJbnRlcnJ1cHRzICovCiAgICAgICBpZiAoaHVzYXJ0LT5Jbml0LlBhcml0eSAhPSBVU0FSVF9QQVJJVFlfTk9ORSkKLSAgICAgIHsgIAorICAgICAgewogICAgICAgICBTRVRfQklUKGh1c2FydC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1BFSUUgfCBVU0FSVF9DUjFfUlhORUlFKTsKICAgICAgIH0KICAgICAgIGVsc2UKQEAgLTEyNjUsNyArMTI1OSw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgVVNBUlQgUGFyaXR5IEVycm9yIGFuZCBVU0FSVCBEYXRhIFJlZ2lzdGVyIG5vdCBlbXB0eSBJbnRlcnJ1cHRzICovCiAgICAgICBpZiAoaHVzYXJ0LT5Jbml0LlBhcml0eSAhPSBVU0FSVF9QQVJJVFlfTk9ORSkKLSAgICAgIHsgIAorICAgICAgewogICAgICAgICBTRVRfQklUKGh1c2FydC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1BFSUUgfCBVU0FSVF9DUjFfUlhORUlFKTsKICAgICAgIH0KICAgICAgIGVsc2UKQEAgLTE2ODUsNyArMTY3OSw3IEBACiAKICAgICAvKiBSZS1lbmFibGUgUEUgYW5kIEVSUiAoRnJhbWUgZXJyb3IsIG5vaXNlIGVycm9yLCBvdmVycnVuIGVycm9yKSBpbnRlcnJ1cHRzICovCiAgICAgaWYgKGh1c2FydC0+SW5pdC5QYXJpdHkgIT0gVVNBUlRfUEFSSVRZX05PTkUpCi0gICAgeyAgICAKKyAgICB7CiAgICAgICBTRVRfQklUKGh1c2FydC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1BFSUUpOwogICAgIH0KICAgICBTRVRfQklUKGh1c2FydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0VJRSk7CkBAIC0xNzc3LDkgKzE3NzEsMTAgQEAKICAgQ0xFQVJfQklUKGh1c2FydC0+SW5zdGFuY2UtPkNSMSwgKFVTQVJUX0NSMV9SWE5FSUUgfCBVU0FSVF9DUjFfUEVJRSB8IFVTQVJUX0NSMV9UWEVJRSB8IFVTQVJUX0NSMV9UQ0lFKSk7CiAgIENMRUFSX0JJVChodXNhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19FSUUpOwogCi0gIC8qIERpc2FibGUgdGhlIFVTQVJUIERNQSBUeCByZXF1ZXN0IGlmIGVuYWJsZWQgKi8KKyAgLyogQWJvcnQgdGhlIFVTQVJUIERNQSBUeCBjaGFubmVsIGlmIGVuYWJsZWQgKi8KICAgaWYgKEhBTF9JU19CSVRfU0VUKGh1c2FydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0RNQVQpKQogICB7CisgICAgLyogRGlzYWJsZSB0aGUgVVNBUlQgRE1BIFR4IHJlcXVlc3QgaWYgZW5hYmxlZCAqLwogICAgIENMRUFSX0JJVChodXNhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19ETUFUKTsKIAogICAgIC8qIEFib3J0IHRoZSBVU0FSVCBETUEgVHggY2hhbm5lbCA6IHVzZSBibG9ja2luZyBETUEgQWJvcnQgQVBJIChubyBjYWxsYmFjaykgKi8KQEAgLTE4MDIsOSArMTc5NywxMCBAQAogICAgIH0KICAgfQogCi0gIC8qIERpc2FibGUgdGhlIFVTQVJUIERNQSBSeCByZXF1ZXN0IGlmIGVuYWJsZWQgKi8KKyAgLyogQWJvcnQgdGhlIFVTQVJUIERNQSBSeCBjaGFubmVsIGlmIGVuYWJsZWQgKi8KICAgaWYgKEhBTF9JU19CSVRfU0VUKGh1c2FydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0RNQVIpKQogICB7CisgICAgLyogRGlzYWJsZSB0aGUgVVNBUlQgRE1BIFJ4IHJlcXVlc3QgaWYgZW5hYmxlZCAqLwogICAgIENMRUFSX0JJVChodXNhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19ETUFSKTsKIAogICAgIC8qIEFib3J0IHRoZSBVU0FSVCBETUEgUnggY2hhbm5lbCA6IHVzZSBibG9ja2luZyBETUEgQWJvcnQgQVBJIChubyBjYWxsYmFjaykgKi8KQEAgLTE4OTksNyArMTg5NSw3IEBACiAgICAgfQogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgVVNBUlQgRE1BIFR4IHJlcXVlc3QgaWYgZW5hYmxlZCAqLworICAvKiBBYm9ydCB0aGUgVVNBUlQgRE1BIFR4IGNoYW5uZWwgaWYgZW5hYmxlZCAqLwogICBpZiAoSEFMX0lTX0JJVF9TRVQoaHVzYXJ0LT5JbnN0YW5jZS0+Q1IzLCBVU0FSVF9DUjNfRE1BVCkpCiAgIHsKICAgICAvKiBEaXNhYmxlIERNQSBUeCBhdCBVU0FSVCBsZXZlbCAqLwpAQCAtMTkyMyw5ICsxOTE5LDEwIEBACiAgICAgfQogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgVVNBUlQgRE1BIFJ4IHJlcXVlc3QgaWYgZW5hYmxlZCAqLworICAvKiBBYm9ydCB0aGUgVVNBUlQgRE1BIFJ4IGNoYW5uZWwgaWYgZW5hYmxlZCAqLwogICBpZiAoSEFMX0lTX0JJVF9TRVQoaHVzYXJ0LT5JbnN0YW5jZS0+Q1IzLCBVU0FSVF9DUjNfRE1BUikpCiAgIHsKKyAgICAvKiBEaXNhYmxlIHRoZSBVU0FSVCBETUEgUnggcmVxdWVzdCBpZiBlbmFibGVkICovCiAgICAgQ0xFQVJfQklUKGh1c2FydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0RNQVIpOwogCiAgICAgLyogQWJvcnQgdGhlIFVTQVJUIERNQSBSeCBjaGFubmVsIDogdXNlIG5vbiBibG9ja2luZyBETUEgQWJvcnQgQVBJIChjYWxsYmFjaykgKi8KQEAgLTIwODIsOSArMjA3OSwxMCBAQAogICAgICAgICAgICBEaXNhYmxlIEludGVycnVwdHMsIGFuZCBkaXNhYmxlIERNQSByZXF1ZXN0cywgaWYgb25nb2luZyAqLwogICAgICAgICBVU0FSVF9FbmRUcmFuc2ZlcihodXNhcnQpOwogCi0gICAgICAgIC8qIERpc2FibGUgdGhlIFVTQVJUIERNQSBSeCByZXF1ZXN0IGlmIGVuYWJsZWQgKi8KKyAgICAgICAgLyogQWJvcnQgdGhlIFVTQVJUIERNQSBSeCBjaGFubmVsIGlmIGVuYWJsZWQgKi8KICAgICAgICAgaWYgKEhBTF9JU19CSVRfU0VUKGh1c2FydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0RNQVIpKQogICAgICAgICB7CisgICAgICAgICAgLyogRGlzYWJsZSB0aGUgVVNBUlQgRE1BIFJ4IHJlcXVlc3QgaWYgZW5hYmxlZCAqLwogICAgICAgICAgIENMRUFSX0JJVChodXNhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19ETUFSIHwgVVNBUlRfQ1IzX0RNQVIpOwogCiAgICAgICAgICAgLyogQWJvcnQgdGhlIFVTQVJUIERNQSBUeCBjaGFubmVsICovCkBAIC0zMTM0LDMgKzMxMzIsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfdXNhcnRfZXguYyBiL1NyYy9zdG0zMmYzeHhfaGFsX3VzYXJ0X2V4LmMKaW5kZXggZTMzOTI3NS4uNDRlYWRmZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9oYWxfdXNhcnRfZXguYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF91c2FydF9leC5jCkBAIC03LDYgKzcsNyBAQAogICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgVW5pdmVyc2FsIFN5bmNocm9ub3VzIFJlY2VpdmVyIFRyYW5zbWl0dGVyIFBlcmlwaGVyYWwgKFVTQVJUKS4KICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCiAgICoKKyAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTEzMywzICsxMzQsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9oYWxfd3dkZy5jIGIvU3JjL3N0bTMyZjN4eF9oYWxfd3dkZy5jCmluZGV4IDdlNDFlMzcuLjI4ODczOWYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfaGFsX3d3ZGcuYworKysgYi9TcmMvc3RtMzJmM3h4X2hhbF93d2RnLmMKQEAgLTcsNyArNyw2IEBACiAgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBXaW5kb3cgV2F0Y2hkb2cgKFdXREcpIHBlcmlwaGVyYWw6CiAgICogICAgICAgICAgICsgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucwotICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgpAQCAtNTIsNyArNTEsNyBAQAogICAgICAgICAoKyspIG1heCB0aW1lIChtUykgPSAxMDAwICogKENvdW50ZXIgLSAweDQwKSAvIFdXREcgY2xvY2sKICAgICAoKykgVHlwaWNhbCB2YWx1ZXM6CiAgICAgICAgICgrKykgQ291bnRlciBtaW4gKFRbNTswXSA9IDB4MDApIGF0IDM2TUh6IChQQ0xLMSkgd2l0aCB6ZXJvIHByZXNjYWxlcjoKLSAgICAgICAgICAgICBtYXggdGltZW91dCBiZWZvcmUgcmVzZXQ6IGFwcHJveGltYXRlbHkgMTEzLjc4tXMKKyAgICAgICAgICAgICBtYXggdGltZW91dCBiZWZvcmUgcmVzZXQ6IGFwcHJveGltYXRlbHkgMTEzLjc4dXMKICAgICAgICAgKCsrKSBDb3VudGVyIG1heCAoVFs1OzBdID0gMHgzRikgYXQgMzZNSHogKFBDTEsxKSB3aXRoIHByZXNjYWxlcgogICAgICAgICAgICAgIGRpdmlkaW5nIGJ5IDg6CiAgICAgICAgICAgICAgbWF4IHRpbWVvdXQgYmVmb3JlIHJlc2V0OiBhcHByb3hpbWF0ZWx5IDU4LjI1bXMKQEAgLTY3LDcgKzY2LDcgQEAKICAgICAoKykgRW5hYmxlIFdXREcgQVBCMSBjbG9jayB1c2luZyBfX0hBTF9SQ0NfV1dER19DTEtfRU5BQkxFKCkuCiAgICAgKCspIENvbmZpZ3VyZSB0aGUgV1dERyBwcmVzY2FsZXIsIHJlZnJlc2ggd2luZG93IHZhbHVlLCBjb3VudGVyIHZhbHVlIGFuZCBlYXJseQogICAgICAgICBpbnRlcnJ1cHQgc3RhdHVzIHVzaW5nIEhBTF9XV0RHX0luaXQoKSBmdW5jdGlvbi4gVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkKLSAgICAgICAgZW5hYmxlIFdXREcgYW5kIHN0YXJ0IGl0cyBkb3duY291bnRlci4gVGltZSByZWZlcmVuY2UgY2FuIGJlIHRha2VuIGZyb20gCisgICAgICAgIGVuYWJsZSBXV0RHIGFuZCBzdGFydCBpdHMgZG93bmNvdW50ZXIuIFRpbWUgcmVmZXJlbmNlIGNhbiBiZSB0YWtlbiBmcm9tCiAgICAgICAgIGZ1bmN0aW9uIGV4aXQuIENhcmUgbXVzdCBiZSB0YWtlbiB0byBwcm92aWRlIGEgY291bnRlciB2YWx1ZQogICAgICAgICBncmVhdGVyIHRoYW4gMHg0MCB0byBwcmV2ZW50IGdlbmVyYXRpb24gb2YgaW1tZWRpYXRlIHJlc2V0LgogICAgICgrKSBJZiB0aGUgRWFybHkgV2FrZXVwIEludGVycnVwdCAoRVdJKSBmZWF0dXJlIGlzIGVuYWJsZWQsIGFuIGludGVycnVwdCBpcwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9sbF9hZGMuYyBiL1NyYy9zdG0zMmYzeHhfbGxfYWRjLmMKaW5kZXggNDliNjQ4My4uNmQ3MTRlMyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9sbF9hZGMuYworKysgYi9TcmMvc3RtMzJmM3h4X2xsX2FkYy5jCkBAIC0zMSw3ICszMSw3IEBACiAgICogQHsKICAgKi8KIAotLyogTm90ZTogRGV2aWNlcyBvZiBTVE0zMkYzIHNlcmllIGVtYmVkIDEgb3V0IG9mIDIgZGlmZmVyZW50IEFEQyBJUC4gICBiICAgICAgKi8KKy8qIE5vdGU6IERldmljZXMgb2YgU1RNMzJGMyBzZXJpZXMgZW1iZWQgMSBvdXQgb2YgMiBkaWZmZXJlbnQgQURDIElQLiAgIGIgICAgICAqLwogLyogICAgICAgLSBTVE0zMkYzMHgsIFNUTTMyRjMxeCwgU1RNMzJGMzJ4LCBTVE0zMkYzM3gsIFNUTTMyRjM1eCwgU1RNMzJGMzl4OiAgKi8KIC8qICAgICAgICAgQURDIElQIDVNc2FtcGxlcy9zZWMsIGZyb20gMSB0byA0IEFEQyBpbnN0YW5jZXMgYW5kIG90aGVyIHNwZWNpZmljICovCiAvKiAgICAgICAgIGZlYXR1cmVzIChyZWZlciB0byByZWZlcmVuY2UgbWFudWFsKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNTcwLDcgKzU3MCw3IEBACiAgICogICAgICAgICB0aGUgc2FtZSBBREMgY29tbW9uIGluc3RhbmNlIHRvIHRoZWlyIGRlZmF1bHQgcmVzZXQgdmFsdWVzLgogICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBpcyBwZXJmb3JtaW5nIGEgaGFyZCByZXNldCwgdXNpbmcgaGlnaCBsZXZlbAogICAqICAgICAgICAgY2xvY2sgc291cmNlIFJDQyBBREMgcmVzZXQuCi0gICogICAgICAgICBDYXV0aW9uOiBPbiB0aGlzIFNUTTMyIHNlcmllLCBpZiBzZXZlcmFsIEFEQyBpbnN0YW5jZXMgYXJlIGF2YWlsYWJsZQorICAqICAgICAgICAgQ2F1dGlvbjogT24gdGhpcyBTVE0zMiBzZXJpZXMsIGlmIHNldmVyYWwgQURDIGluc3RhbmNlcyBhcmUgYXZhaWxhYmxlCiAgICogICAgICAgICBvbiB0aGUgc2VsZWN0ZWQgZGV2aWNlLCBSQ0MgQURDIHJlc2V0IHdpbGwgcmVzZXQKICAgKiAgICAgICAgIGFsbCBBREMgaW5zdGFuY2VzIGJlbG9uZ2luZyB0byB0aGUgY29tbW9uIEFEQyBpbnN0YW5jZS4KICAgKiAgICAgICAgIFRvIGRlLWluaXRpYWxpemUgb25seSAxIEFEQyBpbnN0YW5jZSwgdXNlCkBAIC02NTUsNyArNjU1LDcgQEAKIAogICAvKiBOb3RlOiBIYXJkd2FyZSBjb25zdHJhaW50IChyZWZlciB0byBkZXNjcmlwdGlvbiBvZiBmdW5jdGlvbnMgICAgICAgICAgICAgKi8KICAgLyogICAgICAgIkxMX0FEQ19TZXRDb21tb25YWFgoKSIgYW5kICJMTF9BRENfU2V0TXVsdGlYWFgoKSIpOiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhlc2UgZmVhdHVyZXMgaXMgY29uZGl0aW9uZWQgdG8gICAqLworICAvKiAgICAgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiB0aGVzZSBmZWF0dXJlcyBpcyBjb25kaXRpb25lZCB0byAgICovCiAgIC8qICAgICAgIEFEQyBzdGF0ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBBbGwgQURDIGluc3RhbmNlcyBvZiB0aGUgQURDIGNvbW1vbiBncm91cCBtdXN0IGJlIGRpc2FibGVkLiAgICAgICAgKi8KICAgaWYoX19MTF9BRENfSVNfRU5BQkxFRF9BTExfQ09NTU9OX0lOU1RBTkNFKEFEQ3h5X0NPTU1PTikgPT0gMFUpCkBAIC03NDAsNyArNzQwLDcgQEAKICAgKiAgICAgICAgIGlzIGluIGFuIHVua25vd24gc3RhdGUuCiAgICogICAgICAgICBJbiB0aGlzIGNhc2UsIHBlcmZvcm0gYSBoYXJkIHJlc2V0IHVzaW5nIGhpZ2ggbGV2ZWwKICAgKiAgICAgICAgIGNsb2NrIHNvdXJjZSBSQ0MgQURDIHJlc2V0LgotICAqICAgICAgICAgQ2F1dGlvbjogT24gdGhpcyBTVE0zMiBzZXJpZSwgaWYgc2V2ZXJhbCBBREMgaW5zdGFuY2VzIGFyZSBhdmFpbGFibGUKKyAgKiAgICAgICAgIENhdXRpb246IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBpZiBzZXZlcmFsIEFEQyBpbnN0YW5jZXMgYXJlIGF2YWlsYWJsZQogICAqICAgICAgICAgb24gdGhlIHNlbGVjdGVkIGRldmljZSwgUkNDIEFEQyByZXNldCB3aWxsIHJlc2V0CiAgICogICAgICAgICBhbGwgQURDIGluc3RhbmNlcyBiZWxvbmdpbmcgdG8gdGhlIGNvbW1vbiBBREMgaW5zdGFuY2UuCiAgICogICAgICAgICBSZWZlciB0byBmdW5jdGlvbiBAcmVmIExMX0FEQ19Db21tb25EZUluaXQoKS4KQEAgLTk3NCwxMCArOTc0LDEwIEBACiAgICAgLyogQURDIGluc3RhbmNlIGlzIGluIGFuIHVua25vd24gc3RhdGUgKi8KICAgICAvKiBOZWVkIHRvIHBlcmZvcm1pbmcgYSBoYXJkIHJlc2V0IG9mIEFEQyBpbnN0YW5jZSwgdXNpbmcgaGlnaCBsZXZlbCAgICAgICovCiAgICAgLyogY2xvY2sgc291cmNlIFJDQyBBREMgcmVzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qIENhdXRpb246IE9uIHRoaXMgU1RNMzIgc2VyaWUsIGlmIHNldmVyYWwgQURDIGluc3RhbmNlcyBhcmUgYXZhaWxhYmxlICAgKi8KKyAgICAvKiBDYXV0aW9uOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgaWYgc2V2ZXJhbCBBREMgaW5zdGFuY2VzIGFyZSBhdmFpbGFibGUgICAqLwogICAgIC8qICAgICAgICAgIG9uIHRoZSBzZWxlY3RlZCBkZXZpY2UsIFJDQyBBREMgcmVzZXQgd2lsbCByZXNldCAgICAgICAgICAgICAgKi8KICAgICAvKiAgICAgICAgICBhbGwgQURDIGluc3RhbmNlcyBiZWxvbmdpbmcgdG8gdGhlIGNvbW1vbiBBREMgaW5zdGFuY2UuICAgICAgICovCi0gICAgLyogQ2F1dGlvbjogT24gdGhpcyBTVE0zMiBzZXJpZSwgaWYgc2V2ZXJhbCBBREMgaW5zdGFuY2VzIGFyZSBhdmFpbGFibGUgICAqLworICAgIC8qIENhdXRpb246IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBpZiBzZXZlcmFsIEFEQyBpbnN0YW5jZXMgYXJlIGF2YWlsYWJsZSAgICovCiAgICAgLyogICAgICAgICAgb24gdGhlIHNlbGVjdGVkIGRldmljZSwgUkNDIEFEQyByZXNldCB3aWxsIHJlc2V0ICAgICAgICAgICAgICAqLwogICAgIC8qICAgICAgICAgIGFsbCBBREMgaW5zdGFuY2VzIGJlbG9uZ2luZyB0byB0aGUgY29tbW9uIEFEQyBpbnN0YW5jZS4gICAgICAgKi8KICAgICBzdGF0dXMgPSBFUlJPUjsKQEAgLTExMzksNyArMTEzOSw3IEBACiAgICAgLyogICAgLSBTZXQgQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbiBkYXRhIHRyYW5zZmVyOiBubyB0cmFuc2ZlciBvciAgICAqLwogICAgIC8qICAgICAgdHJhbnNmZXIgYnkgRE1BLCBhbmQgRE1BIHJlcXVlc3RzIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiAgICAtIFNldCBBREMgZ3JvdXAgcmVndWxhciBvdmVycnVuIGJlaGF2aW9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgQURDIHRyaWdnZXIgZWRnZSBpcyBzZXQgdG8gdmFsdWUgMHgwIGJ5ICAgICAqLworICAgIC8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBBREMgdHJpZ2dlciBlZGdlIGlzIHNldCB0byB2YWx1ZSAweDAgYnkgICAgICovCiAgICAgLyogICAgICAgc2V0dGluZyBvZiB0cmlnZ2VyIHNvdXJjZSB0byBTVyBzdGFydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmKEFEQ19SRUdfSW5pdFN0cnVjdC0+U2VxdWVuY2VyTGVuZ3RoICE9IExMX0FEQ19SRUdfU0VRX1NDQU5fRElTQUJMRSkKICAgICB7CkBAIC0xMjAxLDcgKzEyMDEsNyBAQAogewogICAvKiBTZXQgQURDX1JFR19Jbml0U3RydWN0IGZpZWxkcyB0byBkZWZhdWx0IHZhbHVlcyAqLwogICAvKiBTZXQgZmllbGRzIG9mIEFEQyBncm91cCByZWd1bGFyICovCi0gIC8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWUsIEFEQyB0cmlnZ2VyIGVkZ2UgaXMgc2V0IHRvIHZhbHVlIDB4MCBieSAgICAgICAqLworICAvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgQURDIHRyaWdnZXIgZWRnZSBpcyBzZXQgdG8gdmFsdWUgMHgwIGJ5ICAgICAgICovCiAgIC8qICAgICAgIHNldHRpbmcgb2YgdHJpZ2dlciBzb3VyY2UgdG8gU1cgc3RhcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBBRENfUkVHX0luaXRTdHJ1Y3QtPlRyaWdnZXJTb3VyY2UgICAgPSBMTF9BRENfUkVHX1RSSUdfU09GVFdBUkU7CiAgIEFEQ19SRUdfSW5pdFN0cnVjdC0+U2VxdWVuY2VyTGVuZ3RoICA9IExMX0FEQ19SRUdfU0VRX1NDQU5fRElTQUJMRTsKQEAgLTEyMzcsMTEgKzEyMzcsMTEgQEAKICAgKiAgICAgICAgICAgIFJlZmVyIHRvIGZ1bmN0aW9uIEByZWYgTExfQURDX0lOSl9TZXRTZXF1ZW5jZXJSYW5rcygpLgogICAqICAgICAgICAgIC0gU2V0IEFEQyBjaGFubmVsIHNhbXBsaW5nIHRpbWUKICAgKiAgICAgICAgICAgIFJlZmVyIHRvIGZ1bmN0aW9uIExMX0FEQ19TZXRDaGFubmVsU2FtcGxpbmdUaW1lKCk7Ci0gICogQG5vdGUgICBDYXV0aW9uIHRvIEFEQyBncm91cCBpbmplY3RlZCBjb250ZXh0cyBxdWV1ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgCisgICogQG5vdGUgICBDYXV0aW9uIHRvIEFEQyBncm91cCBpbmplY3RlZCBjb250ZXh0cyBxdWV1ZTogT24gdGhpcyBTVE0zMiBzZXJpZXMsIAogICAqICAgICAgICAgdXNpbmcgc3VjY2Vzc2l2ZWx5IHNldmVyYWwgdGltZXMgdGhpcyBmdW5jdGlvbiB3aWxsIGFwcGVhciBoYXMKICAgKiAgICAgICAgIGhhdmluZyBubyBlZmZlY3QuCiAgICogICAgICAgICBUaGlzIGlzIGR1ZSB0byBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udGV4dHMgcXVldWUgKHRoaXMgZmVhdHVyZQotICAqICAgICAgICAgY2Fubm90IGJlIGRpc2FibGVkIG9uIHRoaXMgU1RNMzIgc2VyaWUpLgorICAqICAgICAgICAgY2Fubm90IGJlIGRpc2FibGVkIG9uIHRoaXMgU1RNMzIgc2VyaWVzKS4KICAgKiAgICAgICAgIFRvIHNldCBzZXZlcmFsIGZlYXR1cmVzIG9mIEFEQyBncm91cCBpbmplY3RlZCwgdXNlCiAgICogICAgICAgICBmdW5jdGlvbiBAcmVmIExMX0FEQ19JTkpfQ29uZmlnUXVldWVDb250ZXh0KCkuCiAgICogQHBhcmFtICBBREN4IEFEQyBpbnN0YW5jZQpAQCAtMTI3OSw3ICsxMjc5LDcgQEAKICAgICAvKiAgICAtIFNldCBBREMgZ3JvdXAgaW5qZWN0ZWQgc2VxdWVuY2VyIGRpc2NvbnRpbnVvdXMgbW9kZSAgICAgICAgICAgICAgICovCiAgICAgLyogICAgLSBTZXQgQURDIGdyb3VwIGluamVjdGVkIGNvbnZlcnNpb24gdHJpZ2dlcjogaW5kZXBlbmRlbnQgb3IgICAgICAgICAqLwogICAgIC8qICAgICAgZnJvbSBBREMgZ3JvdXAgcmVndWxhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllLCBBREMgdHJpZ2dlciBlZGdlIGlzIHNldCB0byB2YWx1ZSAweDAgYnkgICAgICovCisgICAgLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyB0cmlnZ2VyIGVkZ2UgaXMgc2V0IHRvIHZhbHVlIDB4MCBieSAgICAgKi8KICAgICAvKiAgICAgICBzZXR0aW5nIG9mIHRyaWdnZXIgc291cmNlIHRvIFNXIHN0YXJ0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgaWYoQURDX0lOSl9Jbml0U3RydWN0LT5TZXF1ZW5jZXJMZW5ndGggIT0gTExfQURDX1JFR19TRVFfU0NBTl9ESVNBQkxFKQogICAgIHsKQEAgLTE3ODMsNyArMTc4Myw3IEBACiAgICAgLyogICAgLSBTZXQgQURDIGdyb3VwIHJlZ3VsYXIgY29udGludW91cyBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIC8qICAgIC0gU2V0IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gZGF0YSB0cmFuc2Zlcjogbm8gdHJhbnNmZXIgb3IgICAgKi8KICAgICAvKiAgICAgIHRyYW5zZmVyIGJ5IERNQSwgYW5kIERNQSByZXF1ZXN0cyBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgQURDIHRyaWdnZXIgZWRnZSBpcyBzZXQgd2hlbiBzdGFydGluZyAgICAgICAgKi8KKyAgICAvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgQURDIHRyaWdnZXIgZWRnZSBpcyBzZXQgd2hlbiBzdGFydGluZyAgICAgICAgKi8KICAgICAvKiAgICAgICBBREMgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgLyogICAgICAgUmVmZXIgdG8gZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1N0YXJ0Q29udmVyc2lvbkV4dFRyaWcoKS4gICAgICAqLwogICAgIGlmKEFEQ19SRUdfSW5pdFN0cnVjdC0+U2VxdWVuY2VyTGVuZ3RoICE9IExMX0FEQ19SRUdfU0VRX1NDQU5fRElTQUJMRSkKQEAgLTE4NDQsNyArMTg0NCw3IEBACiB7CiAgIC8qIFNldCBBRENfUkVHX0luaXRTdHJ1Y3QgZmllbGRzIHRvIGRlZmF1bHQgdmFsdWVzICovCiAgIC8qIFNldCBmaWVsZHMgb2YgQURDIGdyb3VwIHJlZ3VsYXIgKi8KLSAgLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgQURDIHRyaWdnZXIgZWRnZSBpcyBzZXQgd2hlbiBzdGFydGluZyAgICAgICAgICovCisgIC8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBBREMgdHJpZ2dlciBlZGdlIGlzIHNldCB3aGVuIHN0YXJ0aW5nICAgICAgICAgKi8KICAgLyogICAgICAgQURDIGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIFJlZmVyIHRvIGZ1bmN0aW9uIEByZWYgTExfQURDX1JFR19TdGFydENvbnZlcnNpb25FeHRUcmlnKCkuICAgICAgICAqLwogICBBRENfUkVHX0luaXRTdHJ1Y3QtPlRyaWdnZXJTb3VyY2UgICAgPSBMTF9BRENfUkVHX1RSSUdfU09GVFdBUkU7CkBAIC0xOTExLDcgKzE5MTEsNyBAQAogICAgIC8qICAgIC0gU2V0IEFEQyBncm91cCBpbmplY3RlZCBzZXF1ZW5jZXIgZGlzY29udGludW91cyBtb2RlICAgICAgICAgICAgICAgKi8KICAgICAvKiAgICAtIFNldCBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbiB0cmlnZ2VyOiBpbmRlcGVuZGVudCBvciAgICAgICAgICovCiAgICAgLyogICAgICBmcm9tIEFEQyBncm91cCByZWd1bGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWUsIEFEQyB0cmlnZ2VyIGVkZ2UgaXMgc2V0IHdoZW4gc3RhcnRpbmcgICAgICAgKi8KKyAgICAvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgQURDIHRyaWdnZXIgZWRnZSBpcyBzZXQgd2hlbiBzdGFydGluZyAgICAgICAqLwogICAgIC8qICAgICAgIEFEQyBjb252ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiAgICAgICBSZWZlciB0byBmdW5jdGlvbiBAcmVmIExMX0FEQ19JTkpfU3RhcnRDb252ZXJzaW9uRXh0VHJpZygpLiAgICAgICovCiAgICAgaWYoQURDX0lOSl9Jbml0U3RydWN0LT5TZXF1ZW5jZXJMZW5ndGggIT0gTExfQURDX1JFR19TRVFfU0NBTl9ESVNBQkxFKQpAQCAtMTk5NSwzICsxOTk1LDQgQEAKICAgKi8KIAogI2VuZGlmIC8qIFVTRV9GVUxMX0xMX0RSSVZFUiAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2xsX2NvbXAuYyBiL1NyYy9zdG0zMmYzeHhfbGxfY29tcC5jCmluZGV4IDE3Y2QwNmMuLjdlNzYwZWQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfbGxfY29tcC5jCisrKyBiL1NyYy9zdG0zMmYzeHhfbGxfY29tcC5jCkBAIC0zMCw3ICszMCw3IEBACiAgICogQHsKICAgKi8KIAotLyogTm90ZTogRGV2aWNlcyBvZiBTVE0zMkYzIHNlcmllIGVtYmVkIDEgb3V0IG9mIDIgZGlmZmVyZW50IGNvbXBhcmF0b3IgSVAuICAgKi8KKy8qIE5vdGU6IERldmljZXMgb2YgU1RNMzJGMyBzZXJpZXMgZW1iZWQgMSBvdXQgb2YgMiBkaWZmZXJlbnQgY29tcGFyYXRvciBJUC4gICAqLwogLyogICAgICAgLSBTVE0zMkYzMHgsIFNUTTMyRjMxeCwgU1RNMzJGMzJ4LCBTVE0zMkYzM3gsIFNUTTMyRjM1eCwgU1RNMzJGMzl4OiAgKi8KIC8qICAgICAgICAgQ09NUCBJUCBmcm9tIDMgdG8gNyBpbnN0YW5jZXMgYW5kIG90aGVyIHNwZWNpZmljIGZlYXR1cmVzICAgICAgICAgICovCiAvKiAgICAgICAgIChjb21wYXJhdG9yIG91dHB1dCBibGFua2luZywgLi4uKSAocmVmZXIgdG8gcmVmZXJlbmNlIG1hbnVhbCkuICAgICAqLwpAQCAtNzEsNyArNzEsNyBAQAogICAoKF9fUE9XRVJfTU9ERV9fKSA9PSBMTF9DT01QX1BPV0VSTU9ERV9ISUdIU1BFRUQpCiAjZW5kaWYKIAotLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgY29tcGFyYXRvciBpbnB1dCBwbHVzIHBhcmFtZXRlcnMgYXJlICAgICAgICAgICAgKi8KKy8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBjb21wYXJhdG9yIGlucHV0IHBsdXMgcGFyYW1ldGVycyBhcmUgICAgICAgICAgICAqLwogLyogICAgICAgdGhlIHNhbWUgb24gYWxsIENPTVAgaW5zdGFuY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgIEhvd2V2ZXIsIGNvbXBhcmF0b3IgaW5zdGFuY2Uga2VwdCBhcyBtYWNybyBwYXJhbWV0ZXIgZm9yICAgICAgICAgICAgICovCiAvKiAgICAgICBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgU1RNMzIgZmFtaWxpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNzY1LDcgKzc2NSw3IEBACiAgICB8fCAoKF9fUE9XRVJfTU9ERV9fKSA9PSBMTF9DT01QX1BPV0VSTU9ERV9VTFRSQUxPV1BPV0VSKSAgICAgICAgICAgICAgICAgICAgXAogICApCiAKLS8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWUsIGNvbXBhcmF0b3IgaW5wdXQgcGx1cyBwYXJhbWV0ZXJzIGFyZSAgICAgICAgICAgICovCisvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgY29tcGFyYXRvciBpbnB1dCBwbHVzIHBhcmFtZXRlcnMgYXJlICAgICAgICAgICAgKi8KIC8qICAgICAgIHRoZSBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIENPTVAgaW5zdGFuY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIElTX0xMX0NPTVBfSU5QVVRfUExVUyhfX0NPTVBfSU5TVEFOQ0VfXywgX19JTlBVVF9QTFVTX18pICAgICAgICAgICAgICAgXAogICAoKChfX0NPTVBfSU5TVEFOQ0VfXykgPT0gQ09NUDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTc3OSw3ICs3NzksNyBAQAogICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKQogCi0vKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllLCBjb21wYXJhdG9yIGlucHV0IG1pbnVzIHBhcmFtZXRlcnMgYXJlICAgICAgICAgICAqLworLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZXMsIGNvbXBhcmF0b3IgaW5wdXQgbWludXMgcGFyYW1ldGVycyBhcmUgICAgICAgICAgICovCiAvKiAgICAgICB0aGUgc2FtZSBvbiBhbGwgQ09NUCBpbnN0YW5jZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgSG93ZXZlciwgY29tcGFyYXRvciBpbnN0YW5jZSBrZXB0IGFzIG1hY3JvIHBhcmFtZXRlciBmb3IgICAgICAgICAgICAgKi8KIC8qICAgICAgIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBTVE0zMiBmYW1pbGllcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMDMwLDMgKzEwMzAsNSBAQAogICAqLwogCiAjZW5kaWYgLyogVVNFX0ZVTExfTExfRFJJVkVSICovCisKKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9sbF9kYWMuYyBiL1NyYy9zdG0zMmYzeHhfbGxfZGFjLmMKaW5kZXggYjU1NmEyYi4uODEzMmU0YiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9sbF9kYWMuYworKysgYi9TcmMvc3RtMzJmM3h4X2xsX2RhYy5jCkBAIC0yMjcsNyArMjI3LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKICAgKiAgICAgICAgIAotICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgorICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHBhcmFtICBEQUNfSW5pdFN0cnVjdCBQb2ludGVyIHRvIGEgQHJlZiBMTF9EQUNfSW5pdFR5cGVEZWYgc3RydWN0dXJlCiAgICogQHJldHZhbCBBbiBFcnJvclN0YXR1cyBlbnVtZXJhdGlvbiB2YWx1ZToKQEAgLTMzMiwzICszMzIsNCBAQAogICAqLwogCiAjZW5kaWYgLyogVVNFX0ZVTExfTExfRFJJVkVSICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYzeHhfbGxfZG1hLmMgYi9TcmMvc3RtMzJmM3h4X2xsX2RtYS5jCmluZGV4IDVjYzFhYTkuLjlkYTQyOWUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfbGxfZG1hLmMKKysrIGIvU3JjL3N0bTMyZjN4eF9sbF9kbWEuYwpAQCAtOSw4ICs5LDggQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzMxLDMgKzMzMSw0IEBACiAgICovCiAKICNlbmRpZiAvKiBVU0VfRlVMTF9MTF9EUklWRVIgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9sbF9leHRpLmMgYi9TcmMvc3RtMzJmM3h4X2xsX2V4dGkuYwppbmRleCA0ZmQxM2I5Li44MGI4NWUzIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2xsX2V4dGkuYworKysgYi9TcmMvc3RtMzJmM3h4X2xsX2V4dGkuYwpAQCAtMjk2LDMgKzI5Niw0IEBACiAgICovCiAKICNlbmRpZiAvKiBVU0VfRlVMTF9MTF9EUklWRVIgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9sbF9mbWMuYyBiL1NyYy9zdG0zMmYzeHhfbGxfZm1jLmMKaW5kZXggZjk3M2NkOC4uMDkyNDgxYSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9sbF9mbWMuYworKysgYi9TcmMvc3RtMzJmM3h4X2xsX2ZtYy5jCkBAIC0xMCw2ICsxMCwxNyBAQAogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucwogICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBhdHRlbnRpb24KKyAgKgorICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgKgorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQorICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KKyAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgRk1DIHBlcmlwaGVyYWwgZmVhdHVyZXMgIyMjIyMKQEAgLTQwLDE2ICs1MSw2IEBACiAKICAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqIEBhdHRlbnRpb24KLSAgKgotICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCi0gICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KLSAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KLSAgKgotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYzeHhfbGxfaTJjLmMgYi9TcmMvc3RtMzJmM3h4X2xsX2kyYy5jCmluZGV4IDJiZWUyMjEuLjg3NTgxOTEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYzeHhfbGxfaTJjLmMKKysrIGIvU3JjL3N0bTMyZjN4eF9sbF9pMmMuYwpAQCAtODMsNyArODMsNyBAQAogICAqICAgICAgICAgIC0gU1VDQ0VTUzogSTJDIHJlZ2lzdGVycyBhcmUgZGUtaW5pdGlhbGl6ZWQKICAgKiAgICAgICAgICAtIEVSUk9SOiBJMkMgcmVnaXN0ZXJzIGFyZSBub3QgZGUtaW5pdGlhbGl6ZWQKICAgKi8KLUVycm9yU3RhdHVzIExMX0kyQ19EZUluaXQoSTJDX1R5cGVEZWYgKkkyQ3gpCitFcnJvclN0YXR1cyBMTF9JMkNfRGVJbml0KGNvbnN0IEkyQ19UeXBlRGVmICpJMkN4KQogewogICBFcnJvclN0YXR1cyBzdGF0dXMgPSBTVUNDRVNTOwogCkBAIC0xMzUsNyArMTM1LDcgQEAKICAgKiAgICAgICAgICAtIFNVQ0NFU1M6IEkyQyByZWdpc3RlcnMgYXJlIGluaXRpYWxpemVkCiAgICogICAgICAgICAgLSBFUlJPUjogTm90IGFwcGxpY2FibGUKICAgKi8KLUVycm9yU3RhdHVzIExMX0kyQ19Jbml0KEkyQ19UeXBlRGVmICpJMkN4LCBMTF9JMkNfSW5pdFR5cGVEZWYgKkkyQ19Jbml0U3RydWN0KQorRXJyb3JTdGF0dXMgTExfSTJDX0luaXQoSTJDX1R5cGVEZWYgKkkyQ3gsIGNvbnN0IExMX0kyQ19Jbml0VHlwZURlZiAqSTJDX0luaXRTdHJ1Y3QpCiB7CiAgIC8qIENoZWNrIHRoZSBJMkMgSW5zdGFuY2UgSTJDeCAqLwogICBhc3NlcnRfcGFyYW0oSVNfSTJDX0FMTF9JTlNUQU5DRShJMkN4KSk7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2xsX29wYW1wLmMgYi9TcmMvc3RtMzJmM3h4X2xsX29wYW1wLmMKaW5kZXggNDM3YTE2Yy4uMzY0MTU3YyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9sbF9vcGFtcC5jCisrKyBiL1NyYy9zdG0zMmYzeHhfbGxfb3BhbXAuYwpAQCAtMjMzLDMgKzIzMyw0IEBACiAgICovCiAKICNlbmRpZiAvKiBVU0VfRlVMTF9MTF9EUklWRVIgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9sbF9yY2MuYyBiL1NyYy9zdG0zMmYzeHhfbGxfcmNjLmMKaW5kZXggMjc1ZmZkZi4uN2Q0Mzk3NSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9sbF9yY2MuYworKysgYi9TcmMvc3RtMzJmM3h4X2xsX3JjYy5jCkBAIC05LDEwICs5LDkgQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogI2lmIGRlZmluZWQoVVNFX0ZVTExfTExfRFJJVkVSKQpAQCAtMTEyNywzICsxMTI2LDQgQEAKICAgKi8KIAogI2VuZGlmIC8qIFVTRV9GVUxMX0xMX0RSSVZFUiAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2xsX3J0Yy5jIGIvU3JjL3N0bTMyZjN4eF9sbF9ydGMuYwppbmRleCA5OTY4YWY0Li4yYjdiMzFhIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2xsX3J0Yy5jCisrKyBiL1NyYy9zdG0zMmYzeHhfbGxfcnRjLmMKQEAgLTg0LDExICs4NCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUlRDX1dFRUtEQVlfU0FUVVJEQVkpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1JUQ19XRUVLREFZX1NVTkRBWSkpCiAKLSNkZWZpbmUgSVNfTExfUlRDX0RBWShfX0RBWV9fKSAgICAoKChfX0RBWV9fKSA+PSAxVSkgJiYgKChfX0RBWV9fKSA8PSAzMVUpKQorI2RlZmluZSBJU19MTF9SVENfREFZKF9fREFZX18pICAgICAoKChfX0RBWV9fKSA+PSAxVSkgJiYgKChfX0RBWV9fKSA8PSAzMVUpKQogCiAjZGVmaW5lIElTX0xMX1JUQ19NT05USChfX01PTlRIX18pICgoKF9fTU9OVEhfXykgPj0gMVUpICYmICgoX19NT05USF9fKSA8PSAxMlUpKQogCi0jZGVmaW5lIElTX0xMX1JUQ19ZRUFSKF9fWUVBUl9fKSAoKF9fWUVBUl9fKSA8PSA5OVUpCisjZGVmaW5lIElTX0xMX1JUQ19ZRUFSKF9fWUVBUl9fKSAgICgoX19ZRUFSX18pIDw9IDk5VSkKIAogI2RlZmluZSBJU19MTF9SVENfQUxNQV9NQVNLKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9SVENfQUxNQV9NQVNLX05PTkUpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUlRDX0FMTUFfTUFTS19EQVRFV0VFS0RBWSkgXApAQCAtMTA0LDE0ICsxMDQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUlRDX0FMTUJfTUFTS19TRUNPTkRTKSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1JUQ19BTE1CX01BU0tfQUxMKSkKIAotCiAjZGVmaW5lIElTX0xMX1JUQ19BTE1BX0RBVEVfV0VFS0RBWV9TRUwoX19TRUxfXykgKCgoX19TRUxfXykgPT0gTExfUlRDX0FMTUFfREFURVdFRUtEQVlTRUxfREFURSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMX18pID09IExMX1JUQ19BTE1BX0RBVEVXRUVLREFZU0VMX1dFRUtEQVkpKQogCiAjZGVmaW5lIElTX0xMX1JUQ19BTE1CX0RBVEVfV0VFS0RBWV9TRUwoX19TRUxfXykgKCgoX19TRUxfXykgPT0gTExfUlRDX0FMTUJfREFURVdFRUtEQVlTRUxfREFURSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMX18pID09IExMX1JUQ19BTE1CX0RBVEVXRUVLREFZU0VMX1dFRUtEQVkpKQogCi0KIC8qKgogICAqIEB9CiAgICovCkBAIC0xMjcsNyArMTI1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEZS1Jbml0aWFsaXplcyB0aGUgUlRDIHJlZ2lzdGVycyB0byB0aGVpciBkZWZhdWx0IHJlc2V0IHZhbHVlcy4KLSAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gZG9lc24ndCByZXNldCB0aGUgUlRDIENsb2NrIHNvdXJjZSBhbmQgUlRDIEJhY2t1cCBEYXRhCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0IHRoZSBSVEMgQ2xvY2sgc291cmNlIGFuZCBSVEMgQmFja3VwIERhdGEKICAgKiAgICAgICAgIHJlZ2lzdGVycy4KICAgKiBAcGFyYW0gIFJUQ3ggUlRDIEluc3RhbmNlCiAgICogQHJldHZhbCBBbiBFcnJvclN0YXR1cyBlbnVtZXJhdGlvbiB2YWx1ZToKQEAgLTE0OSwyMSArMTQ3LDE3IEBACiAgIHsKICAgICAvKiBSZXNldCBUUiwgRFIgYW5kIENSIHJlZ2lzdGVycyAqLwogICAgIExMX1JUQ19Xcml0ZVJlZyhSVEN4LCBUUiwgICAgICAgMHgwMDAwMDAwMFUpOwotI2lmIGRlZmluZWQoUlRDX1dBS0VVUF9TVVBQT1JUKQogICAgIExMX1JUQ19Xcml0ZVJlZyhSVEN4LCBXVVRSLCAgICAgUlRDX1dVVFJfV1VUKTsKLSNlbmRpZiAvKiBSVENfV0FLRVVQX1NVUFBPUlQgKi8KLSAgICBMTF9SVENfV3JpdGVSZWcoUlRDeCwgRFIsIChSVENfRFJfV0RVXzAgfCBSVENfRFJfTVVfMCB8IFJUQ19EUl9EVV8wKSk7CisgICAgTExfUlRDX1dyaXRlUmVnKFJUQ3gsIERSLCAgICAgIChSVENfRFJfV0RVXzAgfCBSVENfRFJfTVVfMCB8IFJUQ19EUl9EVV8wKSk7CisKICAgICAvKiBSZXNldCBBbGwgQ1IgYml0cyBleGNlcHQgQ1JbMjowXSAqLwotI2lmIGRlZmluZWQoUlRDX1dBS0VVUF9TVVBQT1JUKQogICAgIExMX1JUQ19Xcml0ZVJlZyhSVEN4LCBDUiwgKExMX1JUQ19SZWFkUmVnKFJUQ3gsIENSKSAmIFJUQ19DUl9XVUNLU0VMKSk7Ci0jZWxzZQotICAgIExMX1JUQ19Xcml0ZVJlZyhSVEN4LCBDUiwgMHgwMDAwMDAwMFUpOwotI2VuZGlmIC8qIFJUQ19XQUtFVVBfU1VQUE9SVCAqLwotICAgIExMX1JUQ19Xcml0ZVJlZyhSVEN4LCBQUkVSLCAoUlRDX1BSRVJfUFJFRElWX0EgfCBSVENfU1lOQ0hfUFJFU0NfREVGQVVMVCkpOworCisgICAgTExfUlRDX1dyaXRlUmVnKFJUQ3gsIFBSRVIsICAgIChSVENfUFJFUl9QUkVESVZfQSB8IFJUQ19TWU5DSF9QUkVTQ19ERUZBVUxUKSk7CiAgICAgTExfUlRDX1dyaXRlUmVnKFJUQ3gsIEFMUk1BUiwgICAweDAwMDAwMDAwVSk7CiAgICAgTExfUlRDX1dyaXRlUmVnKFJUQ3gsIEFMUk1CUiwgICAweDAwMDAwMDAwVSk7Ci0gICAgTExfUlRDX1dyaXRlUmVnKFJUQ3gsIFNISUZUUiwgICAweDAwMDAwMDAwVSk7CiAgICAgTExfUlRDX1dyaXRlUmVnKFJUQ3gsIENBTFIsICAgICAweDAwMDAwMDAwVSk7CisgICAgTExfUlRDX1dyaXRlUmVnKFJUQ3gsIFNISUZUUiwgICAweDAwMDAwMDAwVSk7CiAgICAgTExfUlRDX1dyaXRlUmVnKFJUQ3gsIEFMUk1BU1NSLCAweDAwMDAwMDAwVSk7CiAgICAgTExfUlRDX1dyaXRlUmVnKFJUQ3gsIEFMUk1CU1NSLCAweDAwMDAwMDAwVSk7CiAKQEAgLTM2Nyw3ICszNjEsNyBAQAogCiAgIGlmICgoUlRDX0Zvcm1hdCA9PSBMTF9SVENfRk9STUFUX0JJTikgJiYgKChSVENfRGF0ZVN0cnVjdC0+TW9udGggJiAweDEwVSkgPT0gMHgxMFUpKQogICB7Ci0gICAgUlRDX0RhdGVTdHJ1Y3QtPk1vbnRoID0gKFJUQ19EYXRlU3RydWN0LT5Nb250aCAmICh1aW50MzJfdCl+KDB4MTBVKSkgKyAweDBBVTsKKyAgICBSVENfRGF0ZVN0cnVjdC0+TW9udGggPSAodWludDhfdCkoUlRDX0RhdGVTdHJ1Y3QtPk1vbnRoICYgKHVpbnQ4X3QpfigweDEwVSkpICsgMHgwQVU7CiAgIH0KICAgaWYgKFJUQ19Gb3JtYXQgPT0gTExfUlRDX0ZPUk1BVF9CSU4pCiAgIHsKQEAgLTc4Miw3ICs3NzYsNyBAQAogICAqICAgICAgICAgc3luY2hyb25pemVkIHdpdGggUlRDIEFQQiBjbG9jay4KICAgKiBAbm90ZSAgIFRoZSBSVEMgUmVzeW5jaHJvbml6YXRpb24gbW9kZSBpcyB3cml0ZSBwcm90ZWN0ZWQsIHVzZSB0aGUKICAgKiAgICAgICAgIEByZWYgTExfUlRDX0Rpc2FibGVXcml0ZVByb3RlY3Rpb24gYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAgKiBAbm90ZSAgIFRvIHJlYWQgdGhlIGNhbGVuZGFyIHRocm91Z2ggdGhlIHNoYWRvdyByZWdpc3RlcnMgYWZ0ZXIgQ2FsZW5kYXIKKyAgKiBAbm90ZSAgIFRvIHJlYWQgdGhlIGNhbGVuZGFyIHRocm91Z2ggdGhlIHNoYWRvdyByZWdpc3RlcnMgYWZ0ZXIgY2FsZW5kYXIKICAgKiAgICAgICAgIGluaXRpYWxpemF0aW9uLCBjYWxlbmRhciB1cGRhdGUgb3IgYWZ0ZXIgd2FrZXVwIGZyb20gbG93IHBvd2VyIG1vZGVzCiAgICogICAgICAgICB0aGUgc29mdHdhcmUgbXVzdCBmaXJzdCBjbGVhciB0aGUgUlNGIGZsYWcuCiAgICogICAgICAgICBUaGUgc29mdHdhcmUgbXVzdCB0aGVuIHdhaXQgdW50aWwgaXQgaXMgc2V0IGFnYWluIGJlZm9yZSByZWFkaW5nCkBAIC04MDcsNyArODAxLDcgQEAKIAogICAvKiBXYWl0IHRoZSByZWdpc3RlcnMgdG8gYmUgc3luY2hyb25pc2VkICovCiAgIHRtcCA9IExMX1JUQ19Jc0FjdGl2ZUZsYWdfUlMoUlRDeCk7Ci0gIHdoaWxlICgodGltZW91dCAhPSAwVSkgJiYgKHRtcCAhPSAwVSkpCisgIHdoaWxlICgodGltZW91dCAhPSAwVSkgJiYgKHRtcCAhPSAxVSkpCiAgIHsKICAgICBpZiAoTExfU1lTVElDS19Jc0FjdGl2ZUNvdW50ZXJGbGFnKCkgPT0gMVUpCiAgICAgewpAQCAtODIwLDI0ICs4MTQsNiBAQAogICAgIH0KICAgfQogCi0gIGlmIChzdGF0dXMgIT0gRVJST1IpCi0gIHsKLSAgICB0aW1lb3V0ID0gUlRDX1NZTkNIUk9fVElNRU9VVDsKLSAgICB0bXAgPSBMTF9SVENfSXNBY3RpdmVGbGFnX1JTKFJUQ3gpOwotICAgIHdoaWxlICgodGltZW91dCAhPSAwVSkgJiYgKHRtcCAhPSAxVSkpCi0gICAgewotICAgICAgaWYgKExMX1NZU1RJQ0tfSXNBY3RpdmVDb3VudGVyRmxhZygpID09IDFVKQotICAgICAgewotICAgICAgICB0aW1lb3V0LS07Ci0gICAgICB9Ci0gICAgICB0bXAgPSBMTF9SVENfSXNBY3RpdmVGbGFnX1JTKFJUQ3gpOwotICAgICAgaWYgKHRpbWVvdXQgPT0gMFUpCi0gICAgICB7Ci0gICAgICAgIHN0YXR1cyA9IEVSUk9SOwotICAgICAgfQotICAgIH0KLSAgfQotCiAgIHJldHVybiAoc3RhdHVzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjN4eF9sbF9zcGkuYyBiL1NyYy9zdG0zMmYzeHhfbGxfc3BpLmMKaW5kZXggM2M1MzNmYi4uMjMxMjc3MSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9sbF9zcGkuYworKysgYi9TcmMvc3RtMzJmM3h4X2xsX3NwaS5jCkBAIC02MzcsMyArNjM3LDQgQEAKICAgKi8KIAogI2VuZGlmIC8qIFVTRV9GVUxMX0xMX0RSSVZFUiAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2xsX3RpbS5jIGIvU3JjL3N0bTMyZjN4eF9sbF90aW0uYwppbmRleCBjZGY2OTA0Li5mODU5ODZmIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2xsX3RpbS5jCisrKyBiL1NyYy9zdG0zMmYzeHhfbGxfdGltLmMKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9DTE9DS0RJVklTSU9OX0RJVjIpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9DTE9DS0RJVklTSU9OX0RJVjQpKQogCi0jaWYgICBkZWZpbmVkKFRJTV9DQ01SMV9PQzFNXzMpCisjaWYgZGVmaW5lZChUSU1fQ0NNUjFfT0MxTV8zKQogI2RlZmluZSBJU19MTF9USU1fT0NNT0RFKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9USU1fT0NNT0RFX0ZST1pFTikgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fT0NNT0RFX0FDVElWRSkgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fT0NNT0RFX0lOQUNUSVZFKSBcCkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9PQ01PREVfRk9SQ0VEX0FDVElWRSkgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fT0NNT0RFX1BXTTEpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX09DTU9ERV9QV00yKSkKLSNlbmRpZgorI2VuZGlmIC8qIFRJTV9DQ01SMV9PQzFNXzMgKi8KIAogI2RlZmluZSBJU19MTF9USU1fT0NTVEFURShfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfVElNX09DU1RBVEVfRElTQUJMRSkgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX09DU1RBVEVfRU5BQkxFKSkKQEAgLTIzMiw3ICsyMzIsNyBAQAogICAqICAgICAgICAgIC0gU1VDQ0VTUzogVElNeCByZWdpc3RlcnMgYXJlIGRlLWluaXRpYWxpemVkCiAgICogICAgICAgICAgLSBFUlJPUjogaW52YWxpZCBUSU14IGluc3RhbmNlCiAgICovCi1FcnJvclN0YXR1cyBMTF9USU1fRGVJbml0KFRJTV9UeXBlRGVmICpUSU14KQorRXJyb3JTdGF0dXMgTExfVElNX0RlSW5pdChjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgRXJyb3JTdGF0dXMgcmVzdWx0ID0gU1VDQ0VTUzsKIApAQCAtMTQ1MSwzICsxNDUxLDQgQEAKICAgKi8KIAogI2VuZGlmIC8qIFVTRV9GVUxMX0xMX0RSSVZFUiAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2xsX3VzYXJ0LmMgYi9TcmMvc3RtMzJmM3h4X2xsX3VzYXJ0LmMKaW5kZXggZGFkODE3ZS4uNjliMDFjYyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjN4eF9sbF91c2FydC5jCisrKyBiL1NyYy9zdG0zMmYzeHhfbGxfdXNhcnQuYwpAQCAtMzEsNyArMzEsNyBAQAogICAqIEB7CiAgICovCiAKLSNpZiBkZWZpbmVkIChVU0FSVDEpIHx8IGRlZmluZWQgKFVTQVJUMikgfHwgZGVmaW5lZCAoVVNBUlQzKSB8fCBkZWZpbmVkIChVQVJUNCkgfHwgZGVmaW5lZCAoVUFSVDUpCisjaWYgZGVmaW5lZChVU0FSVDEpIHx8IGRlZmluZWQoVVNBUlQyKSB8fCBkZWZpbmVkKFVTQVJUMykgfHwgZGVmaW5lZChVQVJUNCkgfHwgZGVmaW5lZChVQVJUNSkKIAogLyoqIEBhZGR0b2dyb3VwIFVTQVJUX0xMCiAgICogQHsKQEAgLTQwLDYgKzQwLDE3IEBACiAvKiBQcml2YXRlIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGFkZHRvZ3JvdXAgVVNBUlRfTExfUHJpdmF0ZV9Db25zdGFudHMKKyAgKiBAeworICAqLworCisvKiBEZWZpbml0aW9uIG9mIGRlZmF1bHQgYmF1ZHJhdGUgdmFsdWUgdXNlZCBmb3IgVVNBUlQgaW5pdGlhbGlzYXRpb24gKi8KKyNkZWZpbmUgVVNBUlRfREVGQVVMVF9CQVVEUkFURSAgICAgICAgICAoOTYwMFUpCisKKy8qKgorICAqIEB9CisgICovCisKIC8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGFkZHRvZ3JvdXAgVVNBUlRfTExfUHJpdmF0ZV9NYWNyb3MKICAgKiBAewpAQCAtMTk2LDcgKzIwNyw3IEBACiAgIHVpbnQzMl90IHBlcmlwaGNsayA9IExMX1JDQ19QRVJJUEhfRlJFUVVFTkNZX05POwogI2lmICghZGVmaW5lZChSQ0NfQ0ZHUjNfVVNBUlQyU1cpfHwhZGVmaW5lZCAoUkNDX0NGR1IzX1VTQVJUM1NXKSkKICAgTExfUkNDX0Nsb2Nrc1R5cGVEZWYgUkNDX0Nsb2NrczsKLSNlbmRpZgorI2VuZGlmIC8qIFVTQVJUIGNsb2NrIHNlbGVjdGlvbiBmbGFncyAqLwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19VQVJUX0lOU1RBTkNFKFVTQVJUeCkpOwpAQCAtMjU0LDcgKzI2NSw3IEBACiAgICAgICAvKiBVU0FSVDIgY2xvY2sgaXMgUENMSyAqLwogICAgICAgTExfUkNDX0dldFN5c3RlbUNsb2Nrc0ZyZXEoJlJDQ19DbG9ja3MpOwogICAgICAgcGVyaXBoY2xrID0gUkNDX0Nsb2Nrcy5QQ0xLMV9GcmVxdWVuY3k7Ci0jZW5kaWYKKyNlbmRpZiAvKiBVU0FSVDIgQ2xvY2sgc2VsZWN0b3IgZmxhZyAqLwogICAgIH0KICAgICBlbHNlIGlmIChVU0FSVHggPT0gVVNBUlQzKQogICAgIHsKQEAgLTI2NCw3ICsyNzUsNyBAQAogICAgICAgLyogVVNBUlQzIGNsb2NrIGlzIFBDTEsgKi8KICAgICAgIExMX1JDQ19HZXRTeXN0ZW1DbG9ja3NGcmVxKCZSQ0NfQ2xvY2tzKTsKICAgICAgIHBlcmlwaGNsayA9IFJDQ19DbG9ja3MuUENMSzFfRnJlcXVlbmN5OwotI2VuZGlmCisjZW5kaWYgLyogVVNBUlQzIENsb2NrIHNlbGVjdG9yIGZsYWcgKi8KICAgICB9CiAjaWYgZGVmaW5lZChVQVJUNCkKICAgICBlbHNlIGlmIChVU0FSVHggPT0gVUFSVDQpCkBAIC0zMTUsNyArMzI2LDcgQEAKIHZvaWQgTExfVVNBUlRfU3RydWN0SW5pdChMTF9VU0FSVF9Jbml0VHlwZURlZiAqVVNBUlRfSW5pdFN0cnVjdCkKIHsKICAgLyogU2V0IFVTQVJUX0luaXRTdHJ1Y3QgZmllbGRzIHRvIGRlZmF1bHQgdmFsdWVzICovCi0gIFVTQVJUX0luaXRTdHJ1Y3QtPkJhdWRSYXRlICAgICAgICAgICAgPSA5NjAwVTsKKyAgVVNBUlRfSW5pdFN0cnVjdC0+QmF1ZFJhdGUgICAgICAgICAgICA9IFVTQVJUX0RFRkFVTFRfQkFVRFJBVEU7CiAgIFVTQVJUX0luaXRTdHJ1Y3QtPkRhdGFXaWR0aCAgICAgICAgICAgPSBMTF9VU0FSVF9EQVRBV0lEVEhfOEI7CiAgIFVTQVJUX0luaXRTdHJ1Y3QtPlN0b3BCaXRzICAgICAgICAgICAgPSBMTF9VU0FSVF9TVE9QQklUU18xOwogICBVU0FSVF9Jbml0U3RydWN0LT5QYXJpdHkgICAgICAgICAgICAgID0gTExfVVNBUlRfUEFSSVRZX05PTkUgOwpAQCAtNDI3LDMgKzQzOCw1IEBACiAgICovCiAKICNlbmRpZiAvKiBVU0VfRlVMTF9MTF9EUklWRVIgKi8KKworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmM3h4X2xsX3VzYi5jIGIvU3JjL3N0bTMyZjN4eF9sbF91c2IuYwppbmRleCA5YzAyYjY2Li45MzBhZWNlIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2xsX3VzYi5jCisrKyBiL1NyYy9zdG0zMmYzeHhfbGxfdXNiLmMKQEAgLTExLDE4ICsxMSw2IEBACiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCiAgICoKLSAgQHZlcmJhdGltCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIFsuLl0KLSAgICAgICgjKSBGaWxsIHBhcmFtZXRlcnMgb2YgSW5pdCBzdHJ1Y3R1cmUgaW4gVVNCX09UR19DZmdUeXBlRGVmIHN0cnVjdHVyZS4KLQotICAgICAgKCMpIENhbGwgVVNCX0NvcmVJbml0KCkgQVBJIHRvIGluaXRpYWxpemUgdGhlIFVTQiBDb3JlIHBlcmlwaGVyYWwuCi0KLSAgICAgICgjKSBUaGUgdXBwZXIgSEFMIEhDRC9QQ0QgZHJpdmVyIHdpbGwgY2FsbCB0aGUgcmlnaHQgcm91dGluZXMgZm9yIGl0cyBpbnRlcm5hbCBwcm9jZXNzZXMuCi0KLSAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgpAQCAtMzQsNiArMjIsMjAgQEAKICAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgQHZlcmJhdGltCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIFsuLl0KKyAgICAgICgjKSBGaWxsIHBhcmFtZXRlcnMgb2YgSW5pdCBzdHJ1Y3R1cmUgaW4gVVNCX0NmZ1R5cGVEZWYgc3RydWN0dXJlLgorCisgICAgICAoIykgQ2FsbCBVU0JfQ29yZUluaXQoKSBBUEkgdG8gaW5pdGlhbGl6ZSB0aGUgVVNCIENvcmUgcGVyaXBoZXJhbC4KKworICAgICAgKCMpIFRoZSB1cHBlciBIQUwgSENEL1BDRCBkcml2ZXIgd2lsbCBjYWxsIHRoZSByaWdodCByb3V0aW5lcyBmb3IgaXRzIGludGVybmFsIHByb2Nlc3Nlcy4KKworICBAZW5kdmVyYmF0aW0KKworICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTUyLDcgKzU0LDYgQEAKIC8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0KIC8qKgogICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIFVTQiBDb3JlCiAgICogQHBhcmFtICBVU0J4IFVTQiBJbnN0YW5jZQpAQCAtMjQxLDEwICsyNDIsMTkgQEAKICAgICAgIFBDRF9TRVRfRVBfUlhfQ05UKFVTQngsIGVwLT5udW0sIGVwLT5tYXhwYWNrZXQpOwogICAgICAgUENEX0NMRUFSX1JYX0RUT0coVVNCeCwgZXAtPm51bSk7CiAKLSAgICAgIC8qIENvbmZpZ3VyZSBWQUxJRCBzdGF0dXMgZm9yIHRoZSBFbmRwb2ludCAqLwotICAgICAgUENEX1NFVF9FUF9SWF9TVEFUVVMoVVNCeCwgZXAtPm51bSwgVVNCX0VQX1JYX1ZBTElEKTsKKyAgICAgIGlmIChlcC0+bnVtID09IDBVKQorICAgICAgeworICAgICAgICAvKiBDb25maWd1cmUgVkFMSUQgc3RhdHVzIGZvciBFUDAgKi8KKyAgICAgICAgUENEX1NFVF9FUF9SWF9TVEFUVVMoVVNCeCwgZXAtPm51bSwgVVNCX0VQX1JYX1ZBTElEKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogQ29uZmlndXJlIE5BSyBzdGF0dXMgZm9yIE9VVCBFbmRwb2ludCAqLworICAgICAgICBQQ0RfU0VUX0VQX1JYX1NUQVRVUyhVU0J4LCBlcC0+bnVtLCBVU0JfRVBfUlhfTkFLKTsKKyAgICAgIH0KICAgICB9CiAgIH0KKyNpZiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKQogICAvKiBEb3VibGUgQnVmZmVyICovCiAgIGVsc2UKICAgewpAQCAtMjkxLDYgKzMwMSw3IEBACiAgICAgICBQQ0RfU0VUX0VQX1JYX1NUQVRVUyhVU0J4LCBlcC0+bnVtLCBVU0JfRVBfUlhfRElTKTsKICAgICB9CiAgIH0KKyNlbmRpZiAvKiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKSAqLwogCiAgIHJldHVybiByZXQ7CiB9CkBAIC0zMDksMTggKzMyMCwyMCBAQAogICAgIHsKICAgICAgIFBDRF9DTEVBUl9UWF9EVE9HKFVTQngsIGVwLT5udW0pOwogCi0gICAgICAvKiBDb25maWd1cmUgRElTQUJMRSBzdGF0dXMgZm9yIHRoZSBFbmRwb2ludCovCisgICAgICAvKiBDb25maWd1cmUgRElTQUJMRSBzdGF0dXMgZm9yIHRoZSBFbmRwb2ludCAqLwogICAgICAgUENEX1NFVF9FUF9UWF9TVEFUVVMoVVNCeCwgZXAtPm51bSwgVVNCX0VQX1RYX0RJUyk7CiAgICAgfQorCiAgICAgZWxzZQogICAgIHsKICAgICAgIFBDRF9DTEVBUl9SWF9EVE9HKFVTQngsIGVwLT5udW0pOwogCi0gICAgICAvKiBDb25maWd1cmUgRElTQUJMRSBzdGF0dXMgZm9yIHRoZSBFbmRwb2ludCovCisgICAgICAvKiBDb25maWd1cmUgRElTQUJMRSBzdGF0dXMgZm9yIHRoZSBFbmRwb2ludCAqLwogICAgICAgUENEX1NFVF9FUF9SWF9TVEFUVVMoVVNCeCwgZXAtPm51bSwgVVNCX0VQX1JYX0RJUyk7CiAgICAgfQogICB9Ci0gIC8qRG91YmxlIEJ1ZmZlciovCisjaWYgKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkKKyAgLyogRG91YmxlIEJ1ZmZlciAqLwogICBlbHNlCiAgIHsKICAgICBpZiAoZXAtPmlzX2luID09IDBVKQpAQCAtMzQ3LDYgKzM2MCw3IEBACiAgICAgICBQQ0RfU0VUX0VQX1JYX1NUQVRVUyhVU0J4LCBlcC0+bnVtLCBVU0JfRVBfUlhfRElTKTsKICAgICB9CiAgIH0KKyNlbmRpZiAvKiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKSAqLwogCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0zNjAsOCArMzc0LDEwIEBACiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRVBTdGFydFhmZXIoVVNCX1R5cGVEZWYgKlVTQngsIFVTQl9FUFR5cGVEZWYgKmVwKQogewogICB1aW50MzJfdCBsZW47CisjaWYgKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkKICAgdWludDE2X3QgcG1hYnVmZmVyOwogICB1aW50MTZfdCB3RVBWYWw7CisjZW5kaWYgLyogKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkgKi8KIAogICAvKiBJTiBlbmRwb2ludCAqLwogICBpZiAoZXAtPmlzX2luID09IDFVKQpAQCAtMzgyLDYgKzM5OCw3IEBACiAgICAgICBVU0JfV3JpdGVQTUEoVVNCeCwgZXAtPnhmZXJfYnVmZiwgZXAtPnBtYWFkcmVzcywgKHVpbnQxNl90KWxlbik7CiAgICAgICBQQ0RfU0VUX0VQX1RYX0NOVChVU0J4LCBlcC0+bnVtLCBsZW4pOwogICAgIH0KKyNpZiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKQogICAgIGVsc2UKICAgICB7CiAgICAgICAvKiBkb3VibGUgYnVmZmVyIGJ1bGsgbWFuYWdlbWVudCAqLwpAQCAtNDkzLDYgKzUxMCw3IEBACiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CisjZW5kaWYgLyogKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkgKi8KIAogICAgIFBDRF9TRVRfRVBfVFhfU1RBVFVTKFVTQngsIGVwLT5udW0sIFVTQl9FUF9UWF9WQUxJRCk7CiAgIH0KQEAgLTUxNCw2ICs1MzIsNyBAQAogICAgICAgLyogY29uZmlndXJlIGFuZCB2YWxpZGF0ZSBSeCBlbmRwb2ludCAqLwogICAgICAgUENEX1NFVF9FUF9SWF9DTlQoVVNCeCwgZXAtPm51bSwgbGVuKTsKICAgICB9CisjaWYgKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkKICAgICBlbHNlCiAgICAgewogICAgICAgLyogRmlyc3QgVHJhbnNmZXIgQ29taW5nIEZyb20gSEFMX1BDRF9FUF9SZWNlaXZlICYgRnJvbSBJU1IgKi8KQEAgLTUzMiw3ICs1NTEsNyBAQAogICAgICAgICAgIGlmICgoKCh3RVBWYWwgJiBVU0JfRVBfRFRPR19SWCkgIT0gMFUpICYmICgod0VQVmFsICYgVVNCX0VQX0RUT0dfVFgpICE9IDBVKSkgfHwKICAgICAgICAgICAgICAgKCgod0VQVmFsICYgVVNCX0VQX0RUT0dfUlgpID09IDBVKSAmJiAoKHdFUFZhbCAmIFVTQl9FUF9EVE9HX1RYKSA9PSAwVSkpKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihVU0J4LCBlcC0+bnVtLCAwVSk7CisgICAgICAgICAgICBQQ0RfRlJFRV9VU0VSX0JVRkZFUihVU0J4LCBlcC0+bnVtLCAwVSk7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CkBAIC01NTcsNiArNTc2LDcgQEAKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICB9CisjZW5kaWYgLyogKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkgKi8KIAogICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKFVTQngsIGVwLT5udW0sIFVTQl9FUF9SWF9WQUxJRCk7CiAgIH0KQEAgLTczOSw5ICs3NTksOSBAQAogLyoqCiAgICogQGJyaWVmICBVU0JfUmVhZEludGVycnVwdHMgcmV0dXJuIHRoZSBnbG9iYWwgVVNCIGludGVycnVwdCBzdGF0dXMKICAgKiBAcGFyYW0gIFVTQnggU2VsZWN0ZWQgZGV2aWNlCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCisgICogQHJldHZhbCBVU0IgR2xvYmFsIEludGVycnVwdCBzdGF0dXMKICAgKi8KLXVpbnQzMl90ICBVU0JfUmVhZEludGVycnVwdHMoVVNCX1R5cGVEZWYgKlVTQngpCit1aW50MzJfdCBVU0JfUmVhZEludGVycnVwdHMoVVNCX1R5cGVEZWYgKlVTQngpCiB7CiAgIHVpbnQzMl90IHRtcHJlZzsKIApAQCAtNzg1LDI1ICs4MDUsMjYgQEAKIHsKICAgdWludDMyX3QgbiA9ICgodWludDMyX3Qpd05CeXRlcyArIDFVKSA+PiAxOwogICB1aW50MzJfdCBCYXNlQWRkciA9ICh1aW50MzJfdClVU0J4OwotICB1aW50MzJfdCBpLCB0ZW1wMSwgdGVtcDI7CisgIHVpbnQzMl90IGNvdW50OworICB1aW50MTZfdCBXclZhbDsKICAgX19JTyB1aW50MTZfdCAqcGR3VmFsOwogICB1aW50OF90ICpwQnVmID0gcGJVc3JCdWY7CiAKICAgcGR3VmFsID0gKF9fSU8gdWludDE2X3QgKikoQmFzZUFkZHIgKyAweDQwMFUgKyAoKHVpbnQzMl90KXdQTUFCdWZBZGRyICogUE1BX0FDQ0VTUykpOwogCi0gIGZvciAoaSA9IG47IGkgIT0gMFU7IGktLSkKKyAgZm9yIChjb3VudCA9IG47IGNvdW50ICE9IDBVOyBjb3VudC0tKQogICB7Ci0gICAgdGVtcDEgPSAqcEJ1ZjsKLSAgICBwQnVmKys7Ci0gICAgdGVtcDIgPSB0ZW1wMSB8ICgodWludDE2X3QpKCh1aW50MTZfdCkgKnBCdWYgPDwgOCkpOwotICAgICpwZHdWYWwgPSAodWludDE2X3QpdGVtcDI7CisgICAgV3JWYWwgPSBwQnVmWzBdOworICAgIFdyVmFsIHw9ICh1aW50MTZfdClwQnVmWzFdIDw8IDg7CisgICAgKnBkd1ZhbCA9IChXclZhbCAmIDB4RkZGRlUpOwogICAgIHBkd1ZhbCsrOwogCiAjaWYgUE1BX0FDQ0VTUyA+IDFVCiAgICAgcGR3VmFsKys7Ci0jZW5kaWYKKyNlbmRpZiAvKiBQTUFfQUNDRVNTICovCiAKICAgICBwQnVmKys7CisgICAgcEJ1ZisrOwogICB9CiB9CiAKQEAgLTgxOSwzMCArODQwLDMxIEBACiB7CiAgIHVpbnQzMl90IG4gPSAodWludDMyX3Qpd05CeXRlcyA+PiAxOwogICB1aW50MzJfdCBCYXNlQWRkciA9ICh1aW50MzJfdClVU0J4OwotICB1aW50MzJfdCBpLCB0ZW1wOworICB1aW50MzJfdCBjb3VudDsKKyAgdWludDMyX3QgUmRWYWw7CiAgIF9fSU8gdWludDE2X3QgKnBkd1ZhbDsKICAgdWludDhfdCAqcEJ1ZiA9IHBiVXNyQnVmOwogCiAgIHBkd1ZhbCA9IChfX0lPIHVpbnQxNl90ICopKEJhc2VBZGRyICsgMHg0MDBVICsgKCh1aW50MzJfdCl3UE1BQnVmQWRkciAqIFBNQV9BQ0NFU1MpKTsKIAotICBmb3IgKGkgPSBuOyBpICE9IDBVOyBpLS0pCisgIGZvciAoY291bnQgPSBuOyBjb3VudCAhPSAwVTsgY291bnQtLSkKICAgewotICAgIHRlbXAgPSAqKF9fSU8gdWludDE2X3QgKilwZHdWYWw7CisgICAgUmRWYWwgPSAqKF9fSU8gdWludDE2X3QgKilwZHdWYWw7CiAgICAgcGR3VmFsKys7Ci0gICAgKnBCdWYgPSAodWludDhfdCkoKHRlbXAgPj4gMCkgJiAweEZGVSk7CisgICAgKnBCdWYgPSAodWludDhfdCkoKFJkVmFsID4+IDApICYgMHhGRlUpOwogICAgIHBCdWYrKzsKLSAgICAqcEJ1ZiA9ICh1aW50OF90KSgodGVtcCA+PiA4KSAmIDB4RkZVKTsKKyAgICAqcEJ1ZiA9ICh1aW50OF90KSgoUmRWYWwgPj4gOCkgJiAweEZGVSk7CiAgICAgcEJ1ZisrOwogCiAjaWYgUE1BX0FDQ0VTUyA+IDFVCiAgICAgcGR3VmFsKys7Ci0jZW5kaWYKKyNlbmRpZiAvKiBQTUFfQUNDRVNTICovCiAgIH0KIAogICBpZiAoKHdOQnl0ZXMgJSAyVSkgIT0gMFUpCiAgIHsKLSAgICB0ZW1wID0gKnBkd1ZhbDsKLSAgICAqcEJ1ZiA9ICh1aW50OF90KSgodGVtcCA+PiAwKSAmIDB4RkZVKTsKKyAgICBSZFZhbCA9ICpwZHdWYWw7CisgICAgKnBCdWYgPSAodWludDhfdCkoKFJkVmFsID4+IDApICYgMHhGRlUpOwogICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYzeHhfbGxfdXRpbHMuYyBiL1NyYy9zdG0zMmYzeHhfbGxfdXRpbHMuYwppbmRleCBkNjkwMTZlLi4xMWVlNTBjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmM3h4X2xsX3V0aWxzLmMKKysrIGIvU3JjL3N0bTMyZjN4eF9sbF91dGlscy5jCkBAIC0yODQsMTAgKzI4NCw2IEBACiAgICAgICB7CiAgICAgICAgIHN0YXR1cyA9IEVSUk9SOwogICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBzdGF0dXMgPSBTVUNDRVNTOwotICAgICAgfQogICAgIH0KICAgfQogCmRpZmYgLS1naXQgYS9faHRtcmVzYy9mYXZpY29uLnBuZyBiL19odG1yZXNjL2Zhdmljb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NzEzZWUKLS0tIC9kZXYvbnVsbAorKysgYi9faHRtcmVzYy9mYXZpY29uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9faHRtcmVzYy9taW5pLXN0LmNzcyBiL19odG1yZXNjL21pbmktc3RfMjAyMC5jc3MKc2ltaWxhcml0eSBpbmRleCA3NyUKcmVuYW1lIGZyb20gX2h0bXJlc2MvbWluaS1zdC5jc3MKcmVuYW1lIHRvIF9odG1yZXNjL21pbmktc3RfMjAyMC5jc3MKaW5kZXggNzFmYmMxNC4uM2Q5ZTgxYSAxMDA2NDQKLS0tIGEvX2h0bXJlc2MvbWluaS1zdC5jc3MKKysrIGIvX2h0bXJlc2MvbWluaS1zdF8yMDIwLmNzcwpAQCAtMSwzOSArMSwzOSBAQAogQGNoYXJzZXQgIlVURi04IjsKIC8qCi0gIEZsYXZvciBuYW1lOiBEZWZhdWx0IChtaW5pLWRlZmF1bHQpCi0gIEF1dGhvcjogQW5nZWxvcyBDaGFsYXJpcyAoY2hhbGFyYW5nZWxvQGdtYWlsLmNvbSkKLSAgTWFpbnRhaW5lcnM6IEFuZ2Vsb3MgQ2hhbGFyaXMKLSAgbWluaS5jc3MgdmVyc2lvbjogdjMuMC4wLWFscGhhLjMKKyAgRmxhdm9yIG5hbWU6IEN1c3RvbSAobWluaS1jdXN0b20pCisgIEdlbmVyYXRlZCBvbmxpbmUgLSBodHRwczovL21pbmljc3Mub3JnL2ZsYXZvcnMKKyAgbWluaS5jc3MgdmVyc2lvbjogdjMuMC4xCiAqLwogLyoKICAgQnJvd3NlcnMgcmVzZXRzIGFuZCBiYXNlIHR5cG9ncmFwaHkuCiAqLwogLyogQ29yZSBtb2R1bGUgQ1NTIHZhcmlhYmxlIGRlZmluaXRpb25zICovCiA6cm9vdCB7Ci0gIC0tZm9yZS1jb2xvcjogIzExMTsKLSAgLS1zZWNvbmRhcnktZm9yZS1jb2xvcjogIzQ0NDsKLSAgLS1iYWNrLWNvbG9yOiAjZjhmOGY4OwotICAtLXNlY29uZGFyeS1iYWNrLWNvbG9yOiAjZjBmMGYwOwotICAtLWJsb2NrcXVvdGUtY29sb3I6ICNmNTdjMDA7Ci0gIC0tcHJlLWNvbG9yOiAjMTU2NWMwOwotICAtLWJvcmRlci1jb2xvcjogI2FhYTsKLSAgLS1zZWNvbmRhcnktYm9yZGVyLWNvbG9yOiAjZGRkOwotICAtLWhlYWRpbmctcmF0aW86IDEuMTk7CisgIC0tZm9yZS1jb2xvcjogIzAzMjM0YjsKKyAgLS1zZWNvbmRhcnktZm9yZS1jb2xvcjogIzAzMjM0YjsKKyAgLS1iYWNrLWNvbG9yOiAjZmZmZmZmOworICAtLXNlY29uZGFyeS1iYWNrLWNvbG9yOiAjZmZmZmZmOworICAtLWJsb2NrcXVvdGUtY29sb3I6ICNlNjAwN2U7CisgIC0tcHJlLWNvbG9yOiAjZTYwMDdlOworICAtLWJvcmRlci1jb2xvcjogIzNjYjRlNjsKKyAgLS1zZWNvbmRhcnktYm9yZGVyLWNvbG9yOiAjM2NiNGU2OworICAtLWhlYWRpbmctcmF0aW86IDEuMjsKICAgLS11bml2ZXJzYWwtbWFyZ2luOiAwLjVyZW07Ci0gIC0tdW5pdmVyc2FsLXBhZGRpbmc6IDAuMTI1cmVtOwotICAtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzOiAwLjEyNXJlbTsKLSAgLS1hLWxpbmstY29sb3I6ICMwMjc3YmQ7Ci0gIC0tYS12aXNpdGVkLWNvbG9yOiAjMDE1NzliOyB9CisgIC0tdW5pdmVyc2FsLXBhZGRpbmc6IDAuMjVyZW07CisgIC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXM6IDAuMDc1cmVtOworICAtLWJhY2tncm91bmQtbWFyZ2luOiAxLjUlOworICAtLWEtbGluay1jb2xvcjogIzNjYjRlNjsKKyAgLS1hLXZpc2l0ZWQtY29sb3I6ICM4YzAwNzg7IH0KIAogaHRtbCB7Ci0gIGZvbnQtc2l6ZTogMTRweDsgfQorICBmb250LXNpemU6IDEzLjVweDsgfQogCiBhLCBiLCBkZWwsIGVtLCBpLCBpbnMsIHEsIHNwYW4sIHN0cm9uZywgdSB7CiAgIGZvbnQtc2l6ZTogMWVtOyB9CiAKIGh0bWwsICogewotICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBSb2JvdG8sIFVidW50dSwgIkhlbHZldGljYSBOZXVlIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOwotICBsaW5lLWhlaWdodDogMS40OworICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBIZWx2ZXRpY2EsIGFyaWFsLCBzYW5zLXNlcmlmOworICBsaW5lLWhlaWdodDogMS4yNTsKICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB9CiAKICogewpAQCAtNDIsNyArNDIsMTAgQEAKIGJvZHkgewogICBtYXJnaW46IDA7CiAgIGNvbG9yOiB2YXIoLS1mb3JlLWNvbG9yKTsKLSAgYmFja2dyb3VuZDogdmFyKC0tYmFjay1jb2xvcik7IH0KKyAgQGJhY2tncm91bmQ6IHZhcigtLWJhY2stY29sb3IpOworICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrLWNvbG9yKSBsaW5lYXItZ3JhZGllbnQoI2ZmZDIwMCwgI2ZmZDIwMCkgcmVwZWF0LXkgbGVmdCB0b3A7CisgIGJhY2tncm91bmQtc2l6ZTogdmFyKC0tYmFja2dyb3VuZC1tYXJnaW4pOworICB9CiAKIGRldGFpbHMgewogICBkaXNwbGF5OiBibG9jazsgfQpAQCAtNjIsOSArNjUsOSBAQAogICBoZWlnaHQ6IGF1dG87IH0KIAogaDEsIGgyLCBoMywgaDQsIGg1LCBoNiB7Ci0gIGxpbmUtaGVpZ2h0OiAxLjI7CisgIGxpbmUtaGVpZ2h0OiAxLjI1OwogICBtYXJnaW46IGNhbGMoMS41ICogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOwotICBmb250LXdlaWdodDogNTAwOyB9CisgIGZvbnQtd2VpZ2h0OiA0MDA7IH0KICAgaDEgc21hbGwsIGgyIHNtYWxsLCBoMyBzbWFsbCwgaDQgc21hbGwsIGg1IHNtYWxsLCBoNiBzbWFsbCB7CiAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS1mb3JlLWNvbG9yKTsKICAgICBkaXNwbGF5OiBibG9jazsKQEAgLTc0LDIxICs3NywxNSBAQAogICBmb250LXNpemU6IGNhbGMoMXJlbSAqIHZhcigtLWhlYWRpbmctcmF0aW8pICogdmFyKC0taGVhZGluZy1yYXRpbykgKiB2YXIoLS1oZWFkaW5nLXJhdGlvKSk7IH0KIAogaDIgewotICBmb250LXNpemU6IGNhbGMoMXJlbSAqIHZhcigtLWhlYWRpbmctcmF0aW8pICogdmFyKC0taGVhZGluZy1yYXRpbyk7ICk7Ci0gIGJhY2tncm91bmQ6IHZhcigtLW1hcmstYmFjay1jb2xvcik7Ci0gIGZvbnQtd2VpZ2h0OiA2MDA7Ci0gIHBhZGRpbmc6IDAuMWVtIDAuNWVtIDAuMmVtIDAuNWVtOwotICBjb2xvcjogdmFyKC0tbWFyay1mb3JlLWNvbG9yKTsgfQotCisgIGZvbnQtc2l6ZTogY2FsYygxcmVtICogdmFyKC0taGVhZGluZy1yYXRpbykgKiB2YXIoLS1oZWFkaW5nLXJhdGlvKSApOworICBib3JkZXItc3R5bGU6IG5vbmUgbm9uZSBzb2xpZCBub25lIDsgCisgIGJvcmRlci13aWR0aDogdGhpbjsKKyAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ib3JkZXItY29sb3IpOyB9CiBoMyB7Ci0gIGZvbnQtc2l6ZTogY2FsYygxcmVtICogdmFyKC0taGVhZGluZy1yYXRpbykpOwotICBwYWRkaW5nLWxlZnQ6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsgCi0gIC8qIGJhY2tncm91bmQ6IHZhcigtLWJvcmRlci1jb2xvcik7ICovCi0gICAgfQorICBmb250LXNpemU6IGNhbGMoMXJlbSAqIHZhcigtLWhlYWRpbmctcmF0aW8pICk7IH0KIAogaDQgewotICBmb250LXNpemU6IDFyZW07KTsKLSAgcGFkZGluZy1sZWZ0OiBjYWxjKDQgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7ICB9CisgIGZvbnQtc2l6ZTogY2FsYygxcmVtICogdmFyKC0taGVhZGluZy1yYXRpbykpOyB9CiAKIGg1IHsKICAgZm9udC1zaXplOiAxcmVtOyB9CkBAIC0xMDEsNyArOTgsNyBAQAogCiBvbCwgdWwgewogICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOwotICBwYWRkaW5nLWxlZnQ6IGNhbGMoNiAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsgfQorICBwYWRkaW5nLWxlZnQ6IGNhbGMoMyAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsgfQogCiBiLCBzdHJvbmcgewogICBmb250LXdlaWdodDogNzAwOyB9CkBAIC0xMTEsNyArMTA4LDcgQEAKICAgYm9yZGVyOiAwOwogICBsaW5lLWhlaWdodDogMS4yNWVtOwogICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOwotICBoZWlnaHQ6IDAuMDYyNXJlbTsKKyAgaGVpZ2h0OiAwLjA3MTQyODU3MTRyZW07CiAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQsIHZhcigtLWJvcmRlci1jb2xvcikgMjAlLCB2YXIoLS1ib3JkZXItY29sb3IpIDgwJSwgdHJhbnNwYXJlbnQpOyB9CiAKIGJsb2NrcXVvdGUgewpAQCAtMTIxLDE2ICsxMTgsMTYgQEAKICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS1mb3JlLWNvbG9yKTsKICAgbWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsKICAgcGFkZGluZzogY2FsYygzICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsKLSAgYm9yZGVyOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7Ci0gIGJvcmRlci1sZWZ0OiAwLjM3NXJlbSBzb2xpZCB2YXIoLS1ibG9ja3F1b3RlLWNvbG9yKTsKKyAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CisgIGJvcmRlci1sZWZ0OiAwLjNyZW0gc29saWQgdmFyKC0tYmxvY2txdW90ZS1jb2xvcik7CiAgIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSAwOyB9CiAgIGJsb2NrcXVvdGU6YmVmb3JlIHsKICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgdG9wOiBjYWxjKDByZW0gLSB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOwogICAgIGxlZnQ6IDA7CiAgICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Ci0gICAgZm9udC1zaXplOiAzcmVtOwotICAgIGZvbnQtd2VpZ2h0OiA3MDA7CisgICAgZm9udC1zaXplOiAycmVtOworICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICAgY29udGVudDogIlwyMDFjIjsKICAgICBjb2xvcjogdmFyKC0tYmxvY2txdW90ZS1jb2xvcik7IH0KICAgYmxvY2txdW90ZVtjaXRlXTphZnRlciB7CkBAIC0xNjAsOCArMTU3LDggQEAKICAgYmFja2dyb3VuZDogdmFyKC0tc2Vjb25kYXJ5LWJhY2stY29sb3IpOwogICBwYWRkaW5nOiBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7CiAgIG1hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7Ci0gIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLXNlY29uZGFyeS1ib3JkZXItY29sb3IpOwotICBib3JkZXItbGVmdDogMC4yNXJlbSBzb2xpZCB2YXIoLS1wcmUtY29sb3IpOworICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKKyAgYm9yZGVyLWxlZnQ6IDAuMjg1NzE0Mjg1N3JlbSBzb2xpZCB2YXIoLS1wcmUtY29sb3IpOwogICBib3JkZXItcmFkaXVzOiAwIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgMDsgfQogCiBzdXAsIHN1YiwgY29kZSwga2JkIHsKQEAgLTIwNCw3ICsyMDEsOCBAQAogICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICBkaXNwbGF5OiBmbGV4OwogICBmbGV4OiAwIDEgYXV0bzsKLSAgZmxleC1mbG93OiByb3cgd3JhcDsgfQorICBmbGV4LWZsb3c6IHJvdyB3cmFwOworICBtYXJnaW46IDAgMCAwIHZhcigtLWJhY2tncm91bmQtbWFyZ2luKTsgfQogCiAuY29sLXNtLAogW2NsYXNzXj0nY29sLXNtLSddLApAQCAtNTY1LDkgKzU2Myw5IEBACiAgICAgb3JkZXI6IDk5OTsgfSB9CiAvKiBDYXJkIGNvbXBvbmVudCBDU1MgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8KIDpyb290IHsKLSAgLS1jYXJkLWJhY2stY29sb3I6ICNmOGY4Zjg7Ci0gIC0tY2FyZC1mb3JlLWNvbG9yOiAjMTExOwotICAtLWNhcmQtYm9yZGVyLWNvbG9yOiAjZGRkOyB9CisgIC0tY2FyZC1iYWNrLWNvbG9yOiAjM2NiNGU2OworICAtLWNhcmQtZm9yZS1jb2xvcjogIzAzMjM0YjsKKyAgLS1jYXJkLWJvcmRlci1jb2xvcjogIzAzMjM0YjsgfQogCiAuY2FyZCB7CiAgIGRpc3BsYXk6IGZsZXg7CkBAIC01NzgsNyArNTc2LDcgQEAKICAgd2lkdGg6IDEwMCU7CiAgIGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmFjay1jb2xvcik7CiAgIGNvbG9yOiB2YXIoLS1jYXJkLWZvcmUtY29sb3IpOwotICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1jYXJkLWJvcmRlci1jb2xvcik7CisgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWNhcmQtYm9yZGVyLWNvbG9yKTsKICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpOwogICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOwogICBvdmVyZmxvdzogaGlkZGVuOyB9CkBAIC01OTIsNyArNTkwLDcgQEAKICAgICBtYXJnaW46IDA7CiAgICAgYm9yZGVyOiAwOwogICAgIGJvcmRlci1yYWRpdXM6IDA7Ci0gICAgYm9yZGVyLWJvdHRvbTogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWNhcmQtYm9yZGVyLWNvbG9yKTsKKyAgICBib3JkZXItYm90dG9tOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tY2FyZC1ib3JkZXItY29sb3IpOwogICAgIHBhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsKICAgICB3aWR0aDogMTAwJTsgfQogICAgIC5jYXJkID4gLnNlY3Rpb25lLm1lZGlhIHsKQEAgLTYxNywxNyArNjE1LDE4IEBACiAgIHdpZHRoOiBhdXRvOyB9CiAKIC5jYXJkLndhcm5pbmcgewotLyogIC0tY2FyZC1iYWNrLWNvbG9yOiAjZmZjYTI4OyAqLwogICAtLWNhcmQtYmFjay1jb2xvcjogI2U1YjhiNzsKLSAgLS1jYXJkLWJvcmRlci1jb2xvcjogI2U4YjgyNTsgfQorICAtLWNhcmQtZm9yZS1jb2xvcjogIzNiMjM0YjsKKyAgLS1jYXJkLWJvcmRlci1jb2xvcjogIzhjMDA3ODsgfQogCiAuY2FyZC5lcnJvciB7Ci0gIC0tY2FyZC1iYWNrLWNvbG9yOiAjYjcxYzFjOwotICAtLWNhcmQtZm9yZS1jb2xvcjogI2Y4ZjhmODsKLSAgLS1jYXJkLWJvcmRlci1jb2xvcjogI2E3MWExYTsgfQorICAtLWNhcmQtYmFjay1jb2xvcjogIzQ2NDY1MDsKKyAgLS1jYXJkLWZvcmUtY29sb3I6ICNmZmZmZmY7CisgIC0tY2FyZC1ib3JkZXItY29sb3I6ICM4YzAwNzg7IH0KIAogLmNhcmQgPiAuc2VjdGlvbmUuZGFyayB7Ci0gIC0tY2FyZC1iYWNrLWNvbG9yOiAjZTBlMGUwOyB9CisgIC0tY2FyZC1iYWNrLWNvbG9yOiAjM2IyMzRiOworICAtLWNhcmQtZm9yZS1jb2xvcjogI2ZmZmZmZjsgfQogCiAuY2FyZCA+IC5zZWN0aW9uZS5kb3VibGUtcGFkZGVkIHsKICAgcGFkZGluZzogY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOyB9CkBAIC02MzcsMTIgKzYzNiwxMiBAQAogKi8KIC8qIElucHV0X2NvbnRyb2wgbW9kdWxlIENTUyB2YXJpYWJsZSBkZWZpbml0aW9ucyAqLwogOnJvb3QgewotICAtLWZvcm0tYmFjay1jb2xvcjogI2YwZjBmMDsKLSAgLS1mb3JtLWZvcmUtY29sb3I6ICMxMTE7Ci0gIC0tZm9ybS1ib3JkZXItY29sb3I6ICNkZGQ7Ci0gIC0taW5wdXQtYmFjay1jb2xvcjogI2Y4ZjhmODsKLSAgLS1pbnB1dC1mb3JlLWNvbG9yOiAjMTExOwotICAtLWlucHV0LWJvcmRlci1jb2xvcjogI2RkZDsKKyAgLS1mb3JtLWJhY2stY29sb3I6ICNmZmU5N2Y7CisgIC0tZm9ybS1mb3JlLWNvbG9yOiAjMDMyMzRiOworICAtLWZvcm0tYm9yZGVyLWNvbG9yOiAjM2NiNGU2OworICAtLWlucHV0LWJhY2stY29sb3I6ICNmZmZmZmY7CisgIC0taW5wdXQtZm9yZS1jb2xvcjogIzAzMjM0YjsKKyAgLS1pbnB1dC1ib3JkZXItY29sb3I6ICMzY2I0ZTY7CiAgIC0taW5wdXQtZm9jdXMtY29sb3I6ICMwMjg4ZDE7CiAgIC0taW5wdXQtaW52YWxpZC1jb2xvcjogI2QzMmYyZjsKICAgLS1idXR0b24tYmFjay1jb2xvcjogI2UyZTJlMjsKQEAgLTY1NSwxMyArNjU0LDEzIEBACiBmb3JtIHsKICAgYmFja2dyb3VuZDogdmFyKC0tZm9ybS1iYWNrLWNvbG9yKTsKICAgY29sb3I6IHZhcigtLWZvcm0tZm9yZS1jb2xvcik7Ci0gIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWZvcm0tYm9yZGVyLWNvbG9yKTsKKyAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tZm9ybS1ib3JkZXItY29sb3IpOwogICBib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7CiAgIG1hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7CiAgIHBhZGRpbmc6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSkgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOyB9CiAKIGZpZWxkc2V0IHsKLSAgYm9yZGVyOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tZm9ybS1ib3JkZXItY29sb3IpOworICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1mb3JtLWJvcmRlci1jb2xvcik7CiAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKICAgbWFyZ2luOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pIC8gNCk7CiAgIHBhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsgfQpAQCAtNjcxLDcgKzY3MCw3IEBACiAgIGRpc3BsYXk6IHRhYmxlOwogICBtYXgtd2lkdGg6IDEwMCU7CiAgIHdoaXRlLXNwYWNlOiBub3JtYWw7Ci0gIGZvbnQtd2VpZ2h0OiA3MDA7CisgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgIHBhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7IH0KIAogbGFiZWwgewpAQCAtNzE2LDcgKzcxNSw3IEBACiAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgIGJhY2tncm91bmQ6IHZhcigtLWlucHV0LWJhY2stY29sb3IpOwogICBjb2xvcjogdmFyKC0taW5wdXQtZm9yZS1jb2xvcik7Ci0gIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWlucHV0LWJvcmRlci1jb2xvcik7CisgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWlucHV0LWJvcmRlci1jb2xvcik7CiAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKICAgbWFyZ2luOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pIC8gMik7CiAgIHBhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7IH0KQEAgLTc2Myw4ICs3NjIsOCBAQAogICBbdHlwZT0icmFkaW8iXTpjaGVja2VkOmJlZm9yZSB7CiAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICBjb250ZW50OiAnJzsKLSAgICB0b3A6IGNhbGMoMC4wNjI1cmVtICsgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7Ci0gICAgbGVmdDogY2FsYygwLjA2MjVyZW0gKyB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKTsKKyAgICB0b3A6IGNhbGMoMC4wNzE0Mjg1NzE0cmVtICsgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7CisgICAgbGVmdDogY2FsYygwLjA3MTQyODU3MTRyZW0gKyB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKTsKICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dC1mb3JlLWNvbG9yKTsKICAgICB3aWR0aDogMC41cmVtOwogICAgIGhlaWdodDogMC41cmVtOyB9CkBAIC03OTMsNyArNzkyLDcgQEAKICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICBiYWNrZ3JvdW5kOiB2YXIoLS1idXR0b24tYmFjay1jb2xvcik7CiAgIGNvbG9yOiB2YXIoLS1idXR0b24tZm9yZS1jb2xvcik7Ci0gIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWJ1dHRvbi1ib3JkZXItY29sb3IpOworICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1idXR0b24tYm9yZGVyLWNvbG9yKTsKICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpOwogICBwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOwogICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOwpAQCAtODE0LDcgKzgxMyw3IEBACiAKIC5idXR0b24tZ3JvdXAgewogICBkaXNwbGF5OiBmbGV4OwotICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1idXR0b24tZ3JvdXAtYm9yZGVyLWNvbG9yKTsKKyAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tYnV0dG9uLWdyb3VwLWJvcmRlci1jb2xvcik7CiAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKICAgbWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsgfQogICAuYnV0dG9uLWdyb3VwID4gYnV0dG9uLCAuYnV0dG9uLWdyb3VwIFt0eXBlPSJidXR0b24iXSwgLmJ1dHRvbi1ncm91cCA+IFt0eXBlPSJzdWJtaXQiXSwgLmJ1dHRvbi1ncm91cCA+IFt0eXBlPSJyZXNldCJdLCAuYnV0dG9uLWdyb3VwID4gLmJ1dHRvbiwgLmJ1dHRvbi1ncm91cCA+IFtyb2xlPSJidXR0b24iXSB7CkBAIC04MjYsMTMgKzgyNSwxMyBAQAogICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgYm94LXNoYWRvdzogbm9uZTsgfQogICAuYnV0dG9uLWdyb3VwID4gOm5vdCg6Zmlyc3QtY2hpbGQpIHsKLSAgICBib3JkZXItbGVmdDogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWJ1dHRvbi1ncm91cC1ib3JkZXItY29sb3IpOyB9CisgICAgYm9yZGVyLWxlZnQ6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1idXR0b24tZ3JvdXAtYm9yZGVyLWNvbG9yKTsgfQogICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0OTlweCkgewogICAgIC5idXR0b24tZ3JvdXAgewogICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfQogICAgICAgLmJ1dHRvbi1ncm91cCA+IDpub3QoOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgIGJvcmRlcjogMDsKLSAgICAgICAgYm9yZGVyLXRvcDogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWJ1dHRvbi1ncm91cC1ib3JkZXItY29sb3IpOyB9IH0KKyAgICAgICAgYm9yZGVyLXRvcDogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWJ1dHRvbi1ncm91cC1ib3JkZXItY29sb3IpOyB9IH0KIAogLyoKICAgQ3VzdG9tIGVsZW1lbnRzIGZvciBmb3JtcyBhbmQgaW5wdXQgZWxlbWVudHMuCkBAIC04NzQsMjkgKzg3MywyOSBAQAogKi8KIC8qIE5hdmlnYXRpb24gbW9kdWxlIENTUyB2YXJpYWJsZSBkZWZpbml0aW9ucyAqLwogOnJvb3QgewotICAtLWhlYWRlci1iYWNrLWNvbG9yOiAjZjhmOGY4OwotICAtLWhlYWRlci1ob3Zlci1iYWNrLWNvbG9yOiAjZjBmMGYwOwotICAtLWhlYWRlci1mb3JlLWNvbG9yOiAjNDQ0OwotICAtLWhlYWRlci1ib3JkZXItY29sb3I6ICNkZGQ7Ci0gIC0tbmF2LWJhY2stY29sb3I6ICNmOGY4Zjg7Ci0gIC0tbmF2LWhvdmVyLWJhY2stY29sb3I6ICNmMGYwZjA7Ci0gIC0tbmF2LWZvcmUtY29sb3I6ICM0NDQ7Ci0gIC0tbmF2LWJvcmRlci1jb2xvcjogI2RkZDsKLSAgLS1uYXYtbGluay1jb2xvcjogIzAyNzdiZDsKLSAgLS1mb290ZXItZm9yZS1jb2xvcjogIzQ0NDsKLSAgLS1mb290ZXItYmFjay1jb2xvcjogI2Y4ZjhmODsKLSAgLS1mb290ZXItYm9yZGVyLWNvbG9yOiAjZGRkOwotICAtLWZvb3Rlci1saW5rLWNvbG9yOiAjMDI3N2JkOwotICAtLWRyYXdlci1iYWNrLWNvbG9yOiAjZjhmOGY4OwotICAtLWRyYXdlci1ob3Zlci1iYWNrLWNvbG9yOiAjZjBmMGYwOwotICAtLWRyYXdlci1ib3JkZXItY29sb3I6ICNkZGQ7Ci0gIC0tZHJhd2VyLWNsb3NlLWNvbG9yOiAjNDQ0OyB9CisgIC0taGVhZGVyLWJhY2stY29sb3I6ICMwMzIzNGI7CisgIC0taGVhZGVyLWhvdmVyLWJhY2stY29sb3I6ICNmZmQyMDA7CisgIC0taGVhZGVyLWZvcmUtY29sb3I6ICNmZmZmZmY7CisgIC0taGVhZGVyLWJvcmRlci1jb2xvcjogIzNjYjRlNjsKKyAgLS1uYXYtYmFjay1jb2xvcjogI2ZmZmZmZjsKKyAgLS1uYXYtaG92ZXItYmFjay1jb2xvcjogI2ZmZTk3ZjsKKyAgLS1uYXYtZm9yZS1jb2xvcjogI2U2MDA3ZTsKKyAgLS1uYXYtYm9yZGVyLWNvbG9yOiAjM2NiNGU2OworICAtLW5hdi1saW5rLWNvbG9yOiAjM2NiNGU2OworICAtLWZvb3Rlci1mb3JlLWNvbG9yOiAjZmZmZmZmOworICAtLWZvb3Rlci1iYWNrLWNvbG9yOiAjMDMyMzRiOworICAtLWZvb3Rlci1ib3JkZXItY29sb3I6ICMzY2I0ZTY7CisgIC0tZm9vdGVyLWxpbmstY29sb3I6ICMzY2I0ZTY7CisgIC0tZHJhd2VyLWJhY2stY29sb3I6ICNmZmZmZmY7CisgIC0tZHJhd2VyLWhvdmVyLWJhY2stY29sb3I6ICNmZmU5N2Y7CisgIC0tZHJhd2VyLWJvcmRlci1jb2xvcjogIzNjYjRlNjsKKyAgLS1kcmF3ZXItY2xvc2UtY29sb3I6ICNlNjAwN2U7IH0KIAogaGVhZGVyIHsKLSAgaGVpZ2h0OiAzLjE4NzVyZW07CisgIGhlaWdodDogMi43NXJlbTsKICAgYmFja2dyb3VuZDogdmFyKC0taGVhZGVyLWJhY2stY29sb3IpOwogICBjb2xvcjogdmFyKC0taGVhZGVyLWZvcmUtY29sb3IpOwotICBib3JkZXItYm90dG9tOiAwLjA2MjVyZW0gc29saWQgdmFyKC0taGVhZGVyLWJvcmRlci1jb2xvcik7CisgIGJvcmRlci1ib3R0b206IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1oZWFkZXItYm9yZGVyLWNvbG9yKTsKICAgcGFkZGluZzogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KSAwOwogICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICBvdmVyZmxvdy14OiBhdXRvOwpAQCAtOTI3LDcgKzkyNiw3IEBACiBuYXYgewogICBiYWNrZ3JvdW5kOiB2YXIoLS1uYXYtYmFjay1jb2xvcik7CiAgIGNvbG9yOiB2YXIoLS1uYXYtZm9yZS1jb2xvcik7Ci0gIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLW5hdi1ib3JkZXItY29sb3IpOworICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1uYXYtYm9yZGVyLWNvbG9yKTsKICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpOwogICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOyB9CiAgIG5hdiAqIHsKQEAgLTk0NiwxMCArOTQ1LDEwIEBACiAgICAgbmF2IC5zdWJsaW5rLTE6YmVmb3JlIHsKICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgIGxlZnQ6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC0gMSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7Ci0gICAgICB0b3A6IC0wLjA2MjVyZW07CisgICAgICB0b3A6IC0wLjA3MTQyODU3MTRyZW07CiAgICAgICBjb250ZW50OiAnJzsKICAgICAgIGhlaWdodDogMTAwJTsKLSAgICAgIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLW5hdi1ib3JkZXItY29sb3IpOworICAgICAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tbmF2LWJvcmRlci1jb2xvcik7CiAgICAgICBib3JkZXItbGVmdDogMDsgfQogICBuYXYgLnN1YmxpbmstMiB7CiAgICAgcG9zaXRpb246IHJlbGF0aXZlOwpAQCAtOTU3LDE2ICs5NTYsMTYgQEAKICAgICBuYXYgLnN1YmxpbmstMjpiZWZvcmUgewogICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgbGVmdDogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLSAzICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsKLSAgICAgIHRvcDogLTAuMDYyNXJlbTsKKyAgICAgIHRvcDogLTAuMDcxNDI4NTcxNHJlbTsKICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgaGVpZ2h0OiAxMDAlOwotICAgICAgYm9yZGVyOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tbmF2LWJvcmRlci1jb2xvcik7CisgICAgICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1uYXYtYm9yZGVyLWNvbG9yKTsKICAgICAgIGJvcmRlci1sZWZ0OiAwOyB9CiAKIGZvb3RlciB7CiAgIGJhY2tncm91bmQ6IHZhcigtLWZvb3Rlci1iYWNrLWNvbG9yKTsKICAgY29sb3I6IHZhcigtLWZvb3Rlci1mb3JlLWNvbG9yKTsKLSAgYm9yZGVyLXRvcDogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWZvb3Rlci1ib3JkZXItY29sb3IpOworICBib3JkZXItdG9wOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tZm9vdGVyLWJvcmRlci1jb2xvcik7CiAgIHBhZGRpbmc6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSkgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOwogICBmb250LXNpemU6IDAuODc1cmVtOyB9CiAgIGZvb3RlciBhLCBmb290ZXIgYTp2aXNpdGVkIHsKQEAgLTEwMTMsNyArMTAxMiw3IEBACiAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgIGJhY2tncm91bmQ6IHZhcigtLWRyYXdlci1iYWNrLWNvbG9yKTsKLSAgICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1kcmF3ZXItYm9yZGVyLWNvbG9yKTsKKyAgICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1kcmF3ZXItYm9yZGVyLWNvbG9yKTsKICAgICBib3JkZXItcmFkaXVzOiAwOwogICAgIG1hcmdpbjogMDsKICAgICB6LWluZGV4OiAxMTEwOwpAQCAtMTA2MCwzOCArMTA1OSwzNiBAQAogKi8KIC8qIFRhYmxlIG1vZHVsZSBDU1MgdmFyaWFibGUgZGVmaW5pdGlvbnMuICovCiA6cm9vdCB7Ci0gIC0tdGFibGUtYm9yZGVyLWNvbG9yOiAjYWFhOwotICAtLXRhYmxlLWJvcmRlci1zZXBhcmF0b3ItY29sb3I6ICM2NjY7Ci0gIC0tdGFibGUtaGVhZC1iYWNrLWNvbG9yOiAjZTZlNmU2OwotICAtLXRhYmxlLWhlYWQtZm9yZS1jb2xvcjogIzExMTsKLSAgLS10YWJsZS1ib2R5LWJhY2stY29sb3I6ICNmOGY4Zjg7Ci0gIC0tdGFibGUtYm9keS1mb3JlLWNvbG9yOiAjMTExOwotICAtLXRhYmxlLWJvZHktYWx0LWJhY2stY29sb3I6ICNlZWU7IH0KKyAgLS10YWJsZS1ib3JkZXItY29sb3I6ICMwMzIzNGI7CisgIC0tdGFibGUtYm9yZGVyLXNlcGFyYXRvci1jb2xvcjogIzAzMjM0YjsKKyAgLS10YWJsZS1oZWFkLWJhY2stY29sb3I6ICMwMzIzNGI7CisgIC0tdGFibGUtaGVhZC1mb3JlLWNvbG9yOiAjZmZmZmZmOworICAtLXRhYmxlLWJvZHktYmFjay1jb2xvcjogI2ZmZmZmZjsKKyAgLS10YWJsZS1ib2R5LWZvcmUtY29sb3I6ICMwMzIzNGI7CisgIC0tdGFibGUtYm9keS1hbHQtYmFjay1jb2xvcjogI2Y0ZjRmNDsgfQogCiB0YWJsZSB7CiAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CiAgIGJvcmRlci1zcGFjaW5nOiAwOwotICA6IG1hcmdpbjogY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSkgdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7CisgIG1hcmdpbjogMDsKICAgZGlzcGxheTogZmxleDsKICAgZmxleDogMCAxIGF1dG87CiAgIGZsZXgtZmxvdzogcm93IHdyYXA7CiAgIHBhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsKLSAgcGFkZGluZy10b3A6IDA7Ci0JbWFyZ2luOiBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKSB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsJfQorICBwYWRkaW5nLXRvcDogMDsgfQogICB0YWJsZSBjYXB0aW9uIHsKLSAgICBmb250LXNpemU6IDEuMjUgKiByZW07CisgICAgZm9udC1zaXplOiAxcmVtOwogICAgIG1hcmdpbjogY2FsYygyICogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpIDA7CiAgICAgbWF4LXdpZHRoOiAxMDAlOwotICAgIGZsZXg6IDAgMCAxMDAlOwotCQl0ZXh0LWFsaWduOiBsZWZ0O30KKyAgICBmbGV4OiAwIDAgMTAwJTsgfQogICB0YWJsZSB0aGVhZCwgdGFibGUgdGJvZHkgewogICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgZmxleC1mbG93OiByb3cgd3JhcDsKLSAgICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9CisgICAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsgfQogICB0YWJsZSB0aGVhZCB7CiAgICAgei1pbmRleDogOTk5OwogICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgMCAwOwotICAgIGJvcmRlci1ib3R0b206IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItc2VwYXJhdG9yLWNvbG9yKTsgfQorICAgIGJvcmRlci1ib3R0b206IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItc2VwYXJhdG9yLWNvbG9yKTsgfQogICB0YWJsZSB0Ym9keSB7CiAgICAgYm9yZGVyLXRvcDogMDsKICAgICBtYXJnaW4tdG9wOiBjYWxjKDAgLSB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7CkBAIC0xMTA5LDExICsxMTA2LDExIEBACiAgIHRhYmxlIHRkIHsKICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10YWJsZS1ib2R5LWJhY2stY29sb3IpOwogICAgIGNvbG9yOiB2YXIoLS10YWJsZS1ib2R5LWZvcmUtY29sb3IpOwotICAgIGJvcmRlci10b3A6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9CisgICAgYm9yZGVyLXRvcDogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7IH0KIAogdGFibGU6bm90KC5ob3Jpem9udGFsKSB7CiAgIG92ZXJmbG93OiBhdXRvOwotICBtYXgtaGVpZ2h0OiA4NTBweDsgfQorICBtYXgtaGVpZ2h0OiAxMDAlOyB9CiAgIHRhYmxlOm5vdCguaG9yaXpvbnRhbCkgdGhlYWQsIHRhYmxlOm5vdCguaG9yaXpvbnRhbCkgdGJvZHkgewogICAgIG1heC13aWR0aDogMTAwJTsKICAgICBmbGV4OiAwIDAgMTAwJTsgfQpAQCAtMTEzNCwzMiArMTEzMSwzMyBAQAogICBib3JkZXI6IDA7IH0KICAgdGFibGUuaG9yaXpvbnRhbCB0aGVhZCwgdGFibGUuaG9yaXpvbnRhbCB0Ym9keSB7CiAgICAgYm9yZGVyOiAwOworICAgIGZsZXg6IC4yIDAgMDsKICAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7IH0KICAgdGFibGUuaG9yaXpvbnRhbCB0Ym9keSB7CiAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwotICAgIGZsZXg6IDEgMCAwOwotICAgIG1hcmdpbi1sZWZ0OiBjYWxjKCA0ICogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpOworICAgIGZsZXg6IC44IDAgMDsKKyAgICBtYXJnaW4tbGVmdDogMDsKICAgICBwYWRkaW5nLWJvdHRvbTogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KTsgfQogICB0YWJsZS5ob3Jpem9udGFsIHRyIHsKICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgIGZsZXg6IDEgMCBhdXRvOyB9CiAgIHRhYmxlLmhvcml6b250YWwgdGgsIHRhYmxlLmhvcml6b250YWwgdGQgewotICAgIHdpZHRoOiAxMDAlOworICAgIHdpZHRoOiBhdXRvOwogICAgIGJvcmRlcjogMDsKLSAgICBib3JkZXItYm90dG9tOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsgfQorICAgIGJvcmRlci1ib3R0b206IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9CiAgICAgdGFibGUuaG9yaXpvbnRhbCB0aDpub3QoOmZpcnN0LWNoaWxkKSwgdGFibGUuaG9yaXpvbnRhbCB0ZDpub3QoOmZpcnN0LWNoaWxkKSB7CiAgICAgICBib3JkZXItdG9wOiAwOyB9CiAgIHRhYmxlLmhvcml6b250YWwgdGggewogICAgIHRleHQtYWxpZ246IHJpZ2h0OwotICAgIGJvcmRlci1sZWZ0OiAwLjA2MjVyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsKLSAgICBib3JkZXItcmlnaHQ6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItc2VwYXJhdG9yLWNvbG9yKTsgfQorICAgIGJvcmRlci1sZWZ0OiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsKKyAgICBib3JkZXItcmlnaHQ6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItc2VwYXJhdG9yLWNvbG9yKTsgfQogICB0YWJsZS5ob3Jpem9udGFsIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHsKICAgICBwYWRkaW5nLWxlZnQ6IDA7IH0KICAgdGFibGUuaG9yaXpvbnRhbCB0aDpmaXJzdC1jaGlsZCwgdGFibGUuaG9yaXpvbnRhbCB0ZDpmaXJzdC1jaGlsZCB7Ci0gICAgYm9yZGVyLXRvcDogMC4wNjI1cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7IH0KKyAgICBib3JkZXItdG9wOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsgfQogICB0YWJsZS5ob3Jpem9udGFsIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQgewotICAgIGJvcmRlci1yaWdodDogMC4wNjI1cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7IH0KKyAgICBib3JkZXItcmlnaHQ6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9CiAgICAgdGFibGUuaG9yaXpvbnRhbCB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkIHsKICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjI1cmVtOyB9CiAgICAgdGFibGUuaG9yaXpvbnRhbCB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQgewpAQCAtMTE5MSwxMiArMTE4OSwxMiBAQAogICAgICAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwOyB9CiAgICAgdGFibGUgdHIsIHRhYmxlLmhvcml6b250YWwgdHIgewogICAgICAgZGlzcGxheTogYmxvY2s7Ci0gICAgICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOworICAgICAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsKICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKLSAgICAgIGJhY2tncm91bmQ6ICNmYWZhZmE7CisgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmOwogICAgICAgcGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOwogICAgICAgbWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsKLSAgICAgIG1hcmdpbi1ib3R0b206IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsgfQorICAgICAgbWFyZ2luLWJvdHRvbTogY2FsYygxICogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpOyB9CiAgICAgdGFibGUgdGgsIHRhYmxlIHRkLCB0YWJsZS5ob3Jpem9udGFsIHRoLCB0YWJsZS5ob3Jpem9udGFsIHRkIHsKICAgICAgIHdpZHRoOiBhdXRvOyB9CiAgICAgdGFibGUgdGQsIHRhYmxlLmhvcml6b250YWwgdGQgewpAQCAtMTIxMSw5ICsxMjA5LDYgQEAKICAgICAgIGJvcmRlci10b3A6IDA7IH0KICAgICB0YWJsZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkLCB0YWJsZS5ob3Jpem9udGFsIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQgewogICAgICAgYm9yZGVyLXJpZ2h0OiAwOyB9IH0KLTpyb290IHsKLSAgLS10YWJsZS1ib2R5LWFsdC1iYWNrLWNvbG9yOiAjZWVlOyB9Ci0KIHRhYmxlIHRyOm50aC1vZi10eXBlKDJuKSA+IHRkIHsKICAgYmFja2dyb3VuZDogdmFyKC0tdGFibGUtYm9keS1hbHQtYmFjay1jb2xvcik7IH0KIApAQCAtMTIzNCw4ICsxMjI5LDggQEAKICovCiAvKiBDb250ZXh0dWFsIG1vZHVsZSBDU1MgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8KIDpyb290IHsKLSAgLS1tYXJrLWJhY2stY29sb3I6ICMwMjc3YmQ7Ci0gIC0tbWFyay1mb3JlLWNvbG9yOiAjZmFmYWZhOyB9CisgIC0tbWFyay1iYWNrLWNvbG9yOiAjM2NiNGU2OworICAtLW1hcmstZm9yZS1jb2xvcjogI2ZmZmZmZjsgfQogCiBtYXJrIHsKICAgYmFja2dyb3VuZDogdmFyKC0tbWFyay1iYWNrLWNvbG9yKTsKQEAgLTEyNDMsMTEgKzEyMzgsMTEgQEAKICAgZm9udC1zaXplOiAwLjk1ZW07CiAgIGxpbmUtaGVpZ2h0OiAxZW07CiAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKLSAgcGFkZGluZzogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KSBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpOyB9CisgIHBhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gNCkgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOyB9CiAgIG1hcmsuaW5saW5lLWJsb2NrIHsKICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgZm9udC1zaXplOiAxZW07Ci0gICAgbGluZS1oZWlnaHQ6IDEuNTsKKyAgICBsaW5lLWhlaWdodDogMS40OwogICAgIHBhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMikgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOyB9CiAKIDpyb290IHsKQEAgLTEzMTQsOCArMTMwOSw4IEBACiAKIDpyb290IHsKICAgLS1tb2RhbC1vdmVybGF5LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDUpOwotICAtLW1vZGFsLWNsb3NlLWNvbG9yOiAjNDQ0OwotICAtLW1vZGFsLWNsb3NlLWhvdmVyLWNvbG9yOiAjZjBmMGYwOyB9CisgIC0tbW9kYWwtY2xvc2UtY29sb3I6ICNlNjAwN2U7CisgIC0tbW9kYWwtY2xvc2UtaG92ZXItY29sb3I6ICNmZmU5N2Y7IH0KIAogW3R5cGU9ImNoZWNrYm94Il0ubW9kYWwgewogICBoZWlnaHQ6IDFweDsKQEAgLTEzNjgsMTMgKzEzNjMsMTQgQEAKICAgICAgIHotaW5kZXg6IDEyMTE7IH0KIAogOnJvb3QgewotICAtLWNvbGxhcHNlLWxhYmVsLWJhY2stY29sb3I6ICNlOGU4ZTg7Ci0gIC0tY29sbGFwc2UtbGFiZWwtZm9yZS1jb2xvcjogIzIxMjEyMTsKLSAgLS1jb2xsYXBzZS1sYWJlbC1ob3Zlci1iYWNrLWNvbG9yOiAjZjBmMGYwOwotICAtLWNvbGxhcHNlLXNlbGVjdGVkLWxhYmVsLWJhY2stY29sb3I6ICNlY2VjZWM7Ci0gIC0tY29sbGFwc2UtYm9yZGVyLWNvbG9yOiAjZGRkOwotICAtLWNvbGxhcHNlLWNvbnRlbnQtYmFjay1jb2xvcjogI2ZhZmFmYTsKLSAgLS1jb2xsYXBzZS1zZWxlY3RlZC1sYWJlbC1ib3JkZXItY29sb3I6ICMwMjc3YmQ7IH0KKyAgLS1jb2xsYXBzZS1sYWJlbC1iYWNrLWNvbG9yOiAjMDMyMzRiOworICAtLWNvbGxhcHNlLWxhYmVsLWZvcmUtY29sb3I6ICNmZmZmZmY7CisgIC0tY29sbGFwc2UtbGFiZWwtaG92ZXItYmFjay1jb2xvcjogIzNjYjRlNjsKKyAgLS1jb2xsYXBzZS1zZWxlY3RlZC1sYWJlbC1iYWNrLWNvbG9yOiAjM2NiNGU2OworICAtLWNvbGxhcHNlLWJvcmRlci1jb2xvcjogdmFyKC0tY29sbGFwc2UtbGFiZWwtYmFjay1jb2xvcik7CisgIC0tY29sbGFwc2Utc2VsZWN0ZWQtYm9yZGVyLWNvbG9yOiAjY2VlY2Y4OworICAtLWNvbGxhcHNlLWNvbnRlbnQtYmFjay1jb2xvcjogI2ZmZmZmZjsKKyAgLS1jb2xsYXBzZS1zZWxlY3RlZC1sYWJlbC1ib3JkZXItY29sb3I6ICMzY2I0ZTY7IH0KIAogLmNvbGxhcHNlIHsKICAgd2lkdGg6IGNhbGMoMTAwJSAtIDIgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7CkBAIC0xMzk1LDEzICsxMzkxLDEzIEBACiAgIC5jb2xsYXBzZSA+IGxhYmVsIHsKICAgICBmbGV4LWdyb3c6IDE7CiAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIGhlaWdodDogMS41cmVtOworICAgIGhlaWdodDogMS4yNXJlbTsKICAgICBjdXJzb3I6IHBvaW50ZXI7Ci0gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjNzOworICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4yczsKICAgICBjb2xvcjogdmFyKC0tY29sbGFwc2UtbGFiZWwtZm9yZS1jb2xvcik7CiAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sbGFwc2UtbGFiZWwtYmFjay1jb2xvcik7Ci0gICAgYm9yZGVyOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tY29sbGFwc2UtYm9yZGVyLWNvbG9yKTsKLSAgICBwYWRkaW5nOiBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7IH0KKyAgICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1jb2xsYXBzZS1zZWxlY3RlZC1ib3JkZXItY29sb3IpOworICAgIHBhZGRpbmc6IGNhbGMoMS4yNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7IH0KICAgICAuY29sbGFwc2UgPiBsYWJlbDpob3ZlciwgLmNvbGxhcHNlID4gbGFiZWw6Zm9jdXMgewogICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sbGFwc2UtbGFiZWwtaG92ZXItYmFjay1jb2xvcik7IH0KICAgICAuY29sbGFwc2UgPiBsYWJlbCArIGRpdiB7CkBAIC0xNDE4LDcgKzE0MTQsNyBAQAogICAgICAgbWF4LWhlaWdodDogMXB4OyB9CiAgIC5jb2xsYXBzZSA+IDpjaGVja2VkICsgbGFiZWwgewogICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbGxhcHNlLXNlbGVjdGVkLWxhYmVsLWJhY2stY29sb3IpOwotICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLWNvbGxhcHNlLXNlbGVjdGVkLWxhYmVsLWJvcmRlci1jb2xvcik7IH0KKyAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbGxhcHNlLXNlbGVjdGVkLWxhYmVsLWJvcmRlci1jb2xvcik7IH0KICAgICAuY29sbGFwc2UgPiA6Y2hlY2tlZCArIGxhYmVsICsgZGl2IHsKICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CkBAIC0xNDI3LDEzICsxNDIzLDEzIEBACiAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgIG1hcmdpbjogMDsKICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbGxhcHNlLWNvbnRlbnQtYmFjay1jb2xvcik7Ci0gICAgICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1jb2xsYXBzZS1ib3JkZXItY29sb3IpOworICAgICAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tY29sbGFwc2Utc2VsZWN0ZWQtYm9yZGVyLWNvbG9yKTsKICAgICAgIGJvcmRlci10b3A6IDA7CiAgICAgICBwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZyk7CiAgICAgICBjbGlwOiBhdXRvOwogICAgICAgLXdlYmtpdC1jbGlwLXBhdGg6IGluc2V0KDAlKTsKICAgICAgIGNsaXAtcGF0aDogaW5zZXQoMCUpOwotICAgICAgbWF4LWhlaWdodDogODUwcHg7IH0KKyAgICAgIG1heC1oZWlnaHQ6IDEwMCU7IH0KICAgLmNvbGxhcHNlID4gbGFiZWw6bm90KDpmaXJzdC1vZi10eXBlKSB7CiAgICAgYm9yZGVyLXRvcDogMDsgfQogICAuY29sbGFwc2UgPiBsYWJlbDpmaXJzdC1vZi10eXBlIHsKQEAgLTE0NTAsMTEgKzE0NDYsOCBAQAogLyoKICAgQ3VzdG9tIGVsZW1lbnRzIGZvciBjb250ZXh0dWFsIGJhY2tncm91bmQgZWxlbWVudHMsIHRvYXN0cyBhbmQgdG9vbHRpcHMuCiAqLwotbWFyay5zZWNvbmRhcnkgewotICAtLW1hcmstYmFjay1jb2xvcjogI2QzMmYyZjsgfQotCiBtYXJrLnRlcnRpYXJ5IHsKLSAgLS1tYXJrLWJhY2stY29sb3I6ICMzMDg3MzI7IH0KKyAgLS1tYXJrLWJhY2stY29sb3I6ICMzY2I0ZTY7IH0KIAogbWFyay50YWcgewogICBwYWRkaW5nOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKS8yKSB2YXIoLS11bml2ZXJzYWwtcGFkZGluZyk7CkBAIC0xNDYzLDkgKzE0NTYsOSBAQAogLyoKICAgRGVmaW5pdGlvbnMgZm9yIHByb2dyZXNzIGVsZW1lbnRzIGFuZCBzcGlubmVycy4KICovCi0vKiBQcm9nZXNzIG1vZHVsZSBDU1MgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8KKy8qIFByb2dyZXNzIG1vZHVsZSBDU1MgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8KIDpyb290IHsKLSAgLS1wcm9ncmVzcy1iYWNrLWNvbG9yOiAjZGRkOworICAtLXByb2dyZXNzLWJhY2stY29sb3I6ICMzY2I0ZTY7CiAgIC0tcHJvZ3Jlc3MtZm9yZS1jb2xvcjogIzU1NTsgfQogCiBwcm9ncmVzcyB7CkBAIC0xNTU4LDQ1ICsxNTUxLDQ1IEBACiAgICAgZmlsdGVyOiBpbnZlcnQoMTAwJSk7IH0KIAogc3Bhbi5pY29uLWFsZXJ0IHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzEwJyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPScxMicgeTE9JzgnIHgyPScxMicgeTI9JzEyJyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nMTInIHkxPScxNicgeDI9JzEyJyB5Mj0nMTYnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzEwJyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPScxMicgeTE9JzgnIHgyPScxMicgeTI9JzEyJyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nMTInIHkxPScxNicgeDI9JzEyJyB5Mj0nMTYnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1ib29rbWFyayB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMTkgMjFsLTctNS03IDVWNWEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ6JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMTkgMjFsLTctNS03IDVWNWEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ6JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24tY2FsZW5kYXIgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3JlY3QgeD0nMycgeT0nNCcgd2lkdGg9JzE4JyBoZWlnaHQ9JzE4JyByeD0nMicgcnk9JzInJTNFJTNDL3JlY3QlM0UlM0NsaW5lIHgxPScxNicgeTE9JzInIHgyPScxNicgeTI9JzYnJTNFJTNDL2xpbmUlM0UlM0NsaW5lIHgxPSc4JyB5MT0nMicgeDI9JzgnIHkyPSc2JyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nMycgeTE9JzEwJyB4Mj0nMjEnIHkyPScxMCclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3JlY3QgeD0nMycgeT0nNCcgd2lkdGg9JzE4JyBoZWlnaHQ9JzE4JyByeD0nMicgcnk9JzInJTNFJTNDL3JlY3QlM0UlM0NsaW5lIHgxPScxNicgeTE9JzInIHgyPScxNicgeTI9JzYnJTNFJTNDL2xpbmUlM0UlM0NsaW5lIHgxPSc4JyB5MT0nMicgeDI9JzgnIHkyPSc2JyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nMycgeTE9JzEwJyB4Mj0nMjEnIHkyPScxMCclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLWNyZWRpdCB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcmVjdCB4PScxJyB5PSc0JyB3aWR0aD0nMjInIGhlaWdodD0nMTYnIHJ4PScyJyByeT0nMiclM0UlM0MvcmVjdCUzRSUzQ2xpbmUgeDE9JzEnIHkxPScxMCcgeDI9JzIzJyB5Mj0nMTAnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NyZWN0IHg9JzEnIHk9JzQnIHdpZHRoPScyMicgaGVpZ2h0PScxNicgcng9JzInIHJ5PScyJyUzRSUzQy9yZWN0JTNFJTNDbGluZSB4MT0nMScgeTE9JzEwJyB4Mj0nMjMnIHkyPScxMCclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLWVkaXQgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIwIDE0LjY2VjIwYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmg1LjM0JyUzRSUzQy9wYXRoJTNFJTNDcG9seWdvbiBwb2ludHM9JzE4IDIgMjIgNiAxMiAxNiA4IDE2IDggMTIgMTggMiclM0UlM0MvcG9seWdvbiUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIwIDE0LjY2VjIwYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmg1LjM0JyUzRSUzQy9wYXRoJTNFJTNDcG9seWdvbiBwb2ludHM9JzE4IDIgMjIgNiAxMiAxNiA4IDE2IDggMTIgMTggMiclM0UlM0MvcG9seWdvbiUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLWxpbmsgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYnJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzE1IDMgMjEgMyAyMSA5JyUzRSUzQy9wb2x5bGluZSUzRSUzQ2xpbmUgeDE9JzEwJyB5MT0nMTQnIHgyPScyMScgeTI9JzMnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2JyUzRSUzQy9wYXRoJTNFJTNDcG9seWxpbmUgcG9pbnRzPScxNSAzIDIxIDMgMjEgOSclM0UlM0MvcG9seWxpbmUlM0UlM0NsaW5lIHgxPScxMCcgeTE9JzE0JyB4Mj0nMjEnIHkyPSczJyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24taGVscCB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDMnJTNFJTNDL3BhdGglM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzEwJyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPScxMicgeTE9JzE3JyB4Mj0nMTInIHkyPScxNyclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTkuMDkgOWEzIDMgMCAwIDEgNS44MyAxYzAgMi0zIDMtMyAzJyUzRSUzQy9wYXRoJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPScxMCclM0UlM0MvY2lyY2xlJTNFJTNDbGluZSB4MT0nMTInIHkxPScxNycgeDI9JzEyJyB5Mj0nMTcnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1ob21lIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00zIDlsOS03IDkgN3YxMWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnonJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzkgMjIgOSAxMiAxNSAxMiAxNSAyMiclM0UlM0MvcG9seWxpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00zIDlsOS03IDkgN3YxMWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnonJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzkgMjIgOSAxMiAxNSAxMiAxNSAyMiclM0UlM0MvcG9seWxpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1pbmZvIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzEwJyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPScxMicgeTE9JzE2JyB4Mj0nMTInIHkyPScxMiclM0UlM0MvbGluZSUzRSUzQ2xpbmUgeDE9JzEyJyB5MT0nOCcgeDI9JzEyJyB5Mj0nOCclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nMTAnJTNFJTNDL2NpcmNsZSUzRSUzQ2xpbmUgeDE9JzEyJyB5MT0nMTYnIHgyPScxMicgeTI9JzEyJyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nMTInIHkxPSc4JyB4Mj0nMTInIHkyPSc4JyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24tbG9jayB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcmVjdCB4PSczJyB5PScxMScgd2lkdGg9JzE4JyBoZWlnaHQ9JzExJyByeD0nMicgcnk9JzInJTNFJTNDL3JlY3QlM0UlM0NwYXRoIGQ9J003IDExVjdhNSA1IDAgMCAxIDEwIDB2NCclM0UlM0MvcGF0aCUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3JlY3QgeD0nMycgeT0nMTEnIHdpZHRoPScxOCcgaGVpZ2h0PScxMScgcng9JzInIHJ5PScyJyUzRSUzQy9yZWN0JTNFJTNDcGF0aCBkPSdNNyAxMVY3YTUgNSAwIDAgMSAxMCAwdjQnJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1tYWlsIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J000IDRoMTZjMS4xIDAgMiAuOSAyIDJ2MTJjMCAxLjEtLjkgMi0yIDJINGMtMS4xIDAtMi0uOS0yLTJWNmMwLTEuMS45LTIgMi0yeiclM0UlM0MvcGF0aCUzRSUzQ3BvbHlsaW5lIHBvaW50cz0nMjIsNiAxMiwxMyAyLDYnJTNFJTNDL3BvbHlsaW5lJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNNCA0aDE2YzEuMSAwIDIgLjkgMiAydjEyYzAgMS4xLS45IDItMiAySDRjLTEuMSAwLTItLjktMi0yVjZjMC0xLjEuOS0yIDItMnonJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzIyLDYgMTIsMTMgMiw2JyUzRSUzQy9wb2x5bGluZSUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLWxvY2F0aW9uIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00yMSAxMGMwIDctOSAxMy05IDEzcy05LTYtOS0xM2E5IDkgMCAwIDEgMTggMHonJTNFJTNDL3BhdGglM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTAnIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIxIDEwYzAgNy05IDEzLTkgMTNzLTktNi05LTEzYTkgOSAwIDAgMSAxOCAweiclM0UlM0MvcGF0aCUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMCcgcj0nMyclM0UlM0MvY2lyY2xlJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24tcGhvbmUgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIyIDE2LjkydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNSAxOS41IDAgMCAxLTYtNiAxOS43OSAxOS43OSAwIDAgMS0zLjA3LTguNjdBMiAyIDAgMCAxIDQuMTEgMmgzYTIgMiAwIDAgMSAyIDEuNzIgMTIuODQgMTIuODQgMCAwIDAgLjcgMi44MSAyIDIgMCAwIDEtLjQ1IDIuMTFMOC4wOSA5LjkxYTE2IDE2IDAgMCAwIDYgNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuN0EyIDIgMCAwIDEgMjIgMTYuOTJ6JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMjIgMTYuOTJ2M2EyIDIgMCAwIDEtMi4xOCAyIDE5Ljc5IDE5Ljc5IDAgMCAxLTguNjMtMy4wNyAxOS41IDE5LjUgMCAwIDEtNi02IDE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42N0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFhMTYgMTYgMCAwIDAgNiA2bDEuMjctMS4yN2EyIDIgMCAwIDEgMi4xMS0uNDUgMTIuODQgMTIuODQgMCAwIDAgMi44MS43QTIgMiAwIDAgMSAyMiAxNi45MnonJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1yc3MgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTQgMTFhOSA5IDAgMCAxIDkgOSclM0UlM0MvcGF0aCUzRSUzQ3BhdGggZD0nTTQgNGExNiAxNiAwIDAgMSAxNiAxNiclM0UlM0MvcGF0aCUzRSUzQ2NpcmNsZSBjeD0nNScgY3k9JzE5JyByPScxJyUzRSUzQy9jaXJjbGUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J000IDExYTkgOSAwIDAgMSA5IDknJTNFJTNDL3BhdGglM0UlM0NwYXRoIGQ9J000IDRhMTYgMTYgMCAwIDEgMTYgMTYnJTNFJTNDL3BhdGglM0UlM0NjaXJjbGUgY3g9JzUnIGN5PScxOScgcj0nMSclM0UlM0MvY2lyY2xlJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24tc2VhcmNoIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzExJyBjeT0nMTEnIHI9JzgnJTNFJTNDL2NpcmNsZSUzRSUzQ2xpbmUgeDE9JzIxJyB5MT0nMjEnIHgyPScxNi42NScgeTI9JzE2LjY1JyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PScxMScgY3k9JzExJyByPSc4JyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPScyMScgeTE9JzIxJyB4Mj0nMTYuNjUnIHkyPScxNi42NSclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLXNldHRpbmdzIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQ3BhdGggZD0nTTE5LjQgMTVhMS42NSAxLjY1IDAgMCAwIC4zMyAxLjgybC4wNi4wNmEyIDIgMCAwIDEgMCAyLjgzIDIgMiAwIDAgMS0yLjgzIDBsLS4wNi0uMDZhMS42NSAxLjY1IDAgMCAwLTEuODItLjMzIDEuNjUgMS42NSAwIDAgMC0xIDEuNTFWMjFhMiAyIDAgMCAxLTIgMiAyIDIgMCAwIDEtMi0ydi0uMDlBMS42NSAxLjY1IDAgMCAwIDkgMTkuNGExLjY1IDEuNjUgMCAwIDAtMS44Mi4zM2wtLjA2LjA2YTIgMiAwIDAgMS0yLjgzIDAgMiAyIDAgMCAxIDAtMi44M2wuMDYtLjA2YTEuNjUgMS42NSAwIDAgMCAuMzMtMS44MiAxLjY1IDEuNjUgMCAwIDAtMS41MS0xSDNhMiAyIDAgMCAxLTItMiAyIDIgMCAwIDEgMi0yaC4wOUExLjY1IDEuNjUgMCAwIDAgNC42IDlhMS42NSAxLjY1IDAgMCAwLS4zMy0xLjgybC0uMDYtLjA2YTIgMiAwIDAgMSAwLTIuODMgMiAyIDAgMCAxIDIuODMgMGwuMDYuMDZhMS42NSAxLjY1IDAgMCAwIDEuODIuMzNIOWExLjY1IDEuNjUgMCAwIDAgMS0xLjUxVjNhMiAyIDAgMCAxIDItMiAyIDIgMCAwIDEgMiAydi4wOWExLjY1IDEuNjUgMCAwIDAgMSAxLjUxIDEuNjUgMS42NSAwIDAgMCAxLjgyLS4zM2wuMDYtLjA2YTIgMiAwIDAgMSAyLjgzIDAgMiAyIDAgMCAxIDAgMi44M2wtLjA2LjA2YTEuNjUgMS42NSAwIDAgMC0uMzMgMS44MlY5YTEuNjUgMS42NSAwIDAgMCAxLjUxIDFIMjFhMiAyIDAgMCAxIDIgMiAyIDIgMCAwIDEtMiAyaC0uMDlhMS42NSAxLjY1IDAgMCAwLTEuNTEgMXonJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQ3BhdGggZD0nTTE5LjQgMTVhMS42NSAxLjY1IDAgMCAwIC4zMyAxLjgybC4wNi4wNmEyIDIgMCAwIDEgMCAyLjgzIDIgMiAwIDAgMS0yLjgzIDBsLS4wNi0uMDZhMS42NSAxLjY1IDAgMCAwLTEuODItLjMzIDEuNjUgMS42NSAwIDAgMC0xIDEuNTFWMjFhMiAyIDAgMCAxLTIgMiAyIDIgMCAwIDEtMi0ydi0uMDlBMS42NSAxLjY1IDAgMCAwIDkgMTkuNGExLjY1IDEuNjUgMCAwIDAtMS44Mi4zM2wtLjA2LjA2YTIgMiAwIDAgMS0yLjgzIDAgMiAyIDAgMCAxIDAtMi44M2wuMDYtLjA2YTEuNjUgMS42NSAwIDAgMCAuMzMtMS44MiAxLjY1IDEuNjUgMCAwIDAtMS41MS0xSDNhMiAyIDAgMCAxLTItMiAyIDIgMCAwIDEgMi0yaC4wOUExLjY1IDEuNjUgMCAwIDAgNC42IDlhMS42NSAxLjY1IDAgMCAwLS4zMy0xLjgybC0uMDYtLjA2YTIgMiAwIDAgMSAwLTIuODMgMiAyIDAgMCAxIDIuODMgMGwuMDYuMDZhMS42NSAxLjY1IDAgMCAwIDEuODIuMzNIOWExLjY1IDEuNjUgMCAwIDAgMS0xLjUxVjNhMiAyIDAgMCAxIDItMiAyIDIgMCAwIDEgMiAydi4wOWExLjY1IDEuNjUgMCAwIDAgMSAxLjUxIDEuNjUgMS42NSAwIDAgMCAxLjgyLS4zM2wuMDYtLjA2YTIgMiAwIDAgMSAyLjgzIDAgMiAyIDAgMCAxIDAgMi44M2wtLjA2LjA2YTEuNjUgMS42NSAwIDAgMC0uMzMgMS44MlY5YTEuNjUgMS42NSAwIDAgMCAxLjUxIDFIMjFhMiAyIDAgMCAxIDIgMiAyIDIgMCAwIDEtMiAyaC0uMDlhMS42NSAxLjY1IDAgMCAwLTEuNTEgMXonJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1zaGFyZSB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PScxOCcgY3k9JzUnIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQ2NpcmNsZSBjeD0nNicgY3k9JzEyJyByPSczJyUzRSUzQy9jaXJjbGUlM0UlM0NjaXJjbGUgY3g9JzE4JyBjeT0nMTknIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQ2xpbmUgeDE9JzguNTknIHkxPScxMy41MScgeDI9JzE1LjQyJyB5Mj0nMTcuNDknJTNFJTNDL2xpbmUlM0UlM0NsaW5lIHgxPScxNS40MScgeTE9JzYuNTEnIHgyPSc4LjU5JyB5Mj0nMTAuNDknJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzE4JyBjeT0nNScgcj0nMyclM0UlM0MvY2lyY2xlJTNFJTNDY2lyY2xlIGN4PSc2JyBjeT0nMTInIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQ2NpcmNsZSBjeD0nMTgnIGN5PScxOScgcj0nMyclM0UlM0MvY2lyY2xlJTNFJTNDbGluZSB4MT0nOC41OScgeTE9JzEzLjUxJyB4Mj0nMTUuNDInIHkyPScxNy40OSclM0UlM0MvbGluZSUzRSUzQ2xpbmUgeDE9JzE1LjQxJyB5MT0nNi41MScgeDI9JzguNTknIHkyPScxMC40OSclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLWNhcnQgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2NpcmNsZSBjeD0nOScgY3k9JzIxJyByPScxJyUzRSUzQy9jaXJjbGUlM0UlM0NjaXJjbGUgY3g9JzIwJyBjeT0nMjEnIHI9JzEnJTNFJTNDL2NpcmNsZSUzRSUzQ3BhdGggZD0nTTEgMWg0bDIuNjggMTMuMzlhMiAyIDAgMCAwIDIgMS42MWg5LjcyYTIgMiAwIDAgMCAyLTEuNjFMMjMgNkg2JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PSc5JyBjeT0nMjEnIHI9JzEnJTNFJTNDL2NpcmNsZSUzRSUzQ2NpcmNsZSBjeD0nMjAnIGN5PScyMScgcj0nMSclM0UlM0MvY2lyY2xlJTNFJTNDcGF0aCBkPSdNMSAxaDRsMi42OCAxMy4zOWEyIDIgMCAwIDAgMiAxLjYxaDkuNzJhMiAyIDAgMCAwIDItMS42MUwyMyA2SDYnJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi11cGxvYWQgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQnJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzE3IDggMTIgMyA3IDgnJTNFJTNDL3BvbHlsaW5lJTNFJTNDbGluZSB4MT0nMTInIHkxPSczJyB4Mj0nMTInIHkyPScxNSclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQnJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzE3IDggMTIgMyA3IDgnJTNFJTNDL3BvbHlsaW5lJTNFJTNDbGluZSB4MT0nMTInIHkxPSczJyB4Mj0nMTInIHkyPScxNSclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLXVzZXIgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIwIDIxdi0yYTQgNCAwIDAgMC00LTRIOGE0IDQgMCAwIDAtNCA0djInJTNFJTNDL3BhdGglM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nNycgcj0nNCclM0UlM0MvY2lyY2xlJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMjAgMjF2LTJhNCA0IDAgMCAwLTQtNEg4YTQgNCAwIDAgMC00IDR2MiclM0UlM0MvcGF0aCUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PSc3JyByPSc0JyUzRSUzQy9jaXJjbGUlM0UlM0Mvc3ZnJTNFIik7IH0KIAogLyoKICAgRGVmaW5pdGlvbnMgZm9yIHV0aWxpdGllcyBhbmQgaGVscGVyIGNsYXNzZXMuCkBAIC0xNjA0LDcgKzE1OTcsNyBAQAogLyogVXRpbGl0eSBtb2R1bGUgQ1NTIHZhcmlhYmxlIGRlZmluaXRpb25zICovCiA6cm9vdCB7CiAgIC0tZ2VuZXJpYy1ib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zKTsKLSAgLS1nZW5lcmljLWJveC1zaGFkb3c6IDAgMC4yNXJlbSAwLjI1cmVtIDAgcmdiYSgwLCAwLCAwLCAwLjEyNSksIDAgMC4xMjVyZW0gMC4xMjVyZW0gLTAuMTI1cmVtIHJnYmEoMCwgMCwgMCwgMC4yNSk7IH0KKyAgLS1nZW5lcmljLWJveC1zaGFkb3c6IDAgMC4yODU3MTQyODU3cmVtIDAuMjg1NzE0Mjg1N3JlbSAwIHJnYmEoMCwgMCwgMCwgMC4xMjUpLCAwIDAuMTQyODU3MTQyOXJlbSAwLjE0Mjg1NzE0MjlyZW0gLTAuMTQyODU3MTQyOXJlbSByZ2JhKDAsIDAsIDAsIDAuMTI1KTsgfQogCiAuaGlkZGVuIHsKICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CkBAIC0xNjIyLDcgKzE2MTUsNyBAQAogICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7IH0KIAogLmJvcmRlcmVkIHsKLSAgYm9yZGVyOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tZ2VuZXJpYy1ib3JkZXItY29sb3IpICFpbXBvcnRhbnQ7IH0KKyAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tZ2VuZXJpYy1ib3JkZXItY29sb3IpICFpbXBvcnRhbnQ7IH0KIAogLnJvdW5kZWQgewogICBib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgIWltcG9ydGFudDsgfQpAQCAtMTY5Nyw0ICsxNjkwLDE0IEBACiAgICAgY2xpcC1wYXRoOiBpbnNldCgxMDAlKSAhaW1wb3J0YW50OwogICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsgfSB9CiAKLS8qIyBzb3VyY2VNYXBwaW5nVVJMPW1pbmktZGVmYXVsdC5jc3MubWFwICovCisvKiMgc291cmNlTWFwcGluZ1VSTD1taW5pLWN1c3RvbS5jc3MubWFwICovCisKK2ltZ1thbHQ9IlNUIGxvZ28iXSB7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87IHdpZHRoOiA3NSU7IG1heC13aWR0aDogMjUwcHg7IG1pbi13aWR0aDogNzFweDsgfQoraW1nW2FsdD0iQ3ViZSBsb2dvIl0geyBmbG9hdDogcmlnaHQ7IHdpZHRoOiAzMCU7IG1heC13aWR0aDogMTByZW07IG1pbi13aWR0aDogOHJlbTsgcGFkZGluZy1yaWdodDogMXJlbTt9CisKKy5maWd1cmUgeworICBkaXNwbGF5OiBibG9jazsKKyAgbWFyZ2luLWxlZnQ6IGF1dG87CisgIG1hcmdpbi1yaWdodDogYXV0bzsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL19odG1yZXNjL3N0X2xvZ28ucG5nIGIvX2h0bXJlc2Mvc3RfbG9nby5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiODAwNTcuLjAwMDAwMDAKLS0tIGEvX2h0bXJlc2Mvc3RfbG9nby5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9faHRtcmVzYy9zdF9sb2dvXzIwMjAucG5nIGIvX2h0bXJlc2Mvc3RfbG9nb18yMDIwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmNlYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvX2h0bXJlc2Mvc3RfbG9nb18yMDIwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCg==