ZGlmZiAtLWdpdCBhL0luYy9MZWdhY3kvc3RtMzJfaGFsX2xlZ2FjeS5oIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKaW5kZXggZDEwYTExZS4uYjU5ZmY2ZCAxMDA2NDQKLS0tIGEvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKKysrIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKQEAgLTcsNyArNyw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQ29weXJpZ2h0IChjKSAyMDIxIFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCkBAIC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIFNUTTMyX0hBTF9MRUdBQ1kKIAogI2lmZGVmIF9fY3BsdXNwbHVzCi0gZXh0ZXJuICJDIiB7CitleHRlcm4gIkMiIHsKICNlbmRpZgogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzcsNiArMzcsMTYgQEAKICNkZWZpbmUgQUVTX0NMRUFSRkxBR19DQ0YgICAgICAgICAgICAgICBDUllQX0NMRUFSRkxBR19DQ0YKICNkZWZpbmUgQUVTX0NMRUFSRkxBR19SREVSUiAgICAgICAgICAgICBDUllQX0NMRUFSRkxBR19SREVSUgogI2RlZmluZSBBRVNfQ0xFQVJGTEFHX1dSRVJSICAgICAgICAgICAgIENSWVBfQ0xFQVJGTEFHX1dSRVJSCisjaWYgZGVmaW5lZChTVE0zMlU1KSB8fCBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJNUDEpCisjZGVmaW5lIENSWVBfREFUQVRZUEVfMzJCICAgICAgICAgICAgICAgQ1JZUF9OT19TV0FQCisjZGVmaW5lIENSWVBfREFUQVRZUEVfMTZCICAgICAgICAgICAgICAgQ1JZUF9IQUxGV09SRF9TV0FQCisjZGVmaW5lIENSWVBfREFUQVRZUEVfOEIgICAgICAgICAgICAgICAgQ1JZUF9CWVRFX1NXQVAKKyNkZWZpbmUgQ1JZUF9EQVRBVFlQRV8xQiAgICAgICAgICAgICAgICBDUllQX0JJVF9TV0FQCisjaWYgZGVmaW5lZChTVE0zMlU1KQorI2RlZmluZSBDUllQX0NDRl9DTEVBUiAgICAgICAgICAgICAgICAgIENSWVBfQ0xFQVJfQ0NGCisjZGVmaW5lIENSWVBfRVJSX0NMRUFSICAgICAgICAgICAgICAgICAgQ1JZUF9DTEVBUl9SV0VJRgorI2VuZGlmIC8qIFNUTTMyVTUgKi8KKyNlbmRpZiAvKiBTVE0zMlU1IHx8IFNUTTMySDcgfHwgU1RNMzJNUDEgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC05Niw2ICsxMDYsMTYgQEAKICNpZiBkZWZpbmVkKFNUTTMySDcpCiAjZGVmaW5lIEFEQ19DSEFOTkVMX1ZCQVRfRElWNCAgICAgICAgICAgQURDX0NIQU5ORUxfVkJBVAogI2VuZGlmIC8qIFNUTTMySDcgKi8KKworI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgQURDX1NBTVBMRVRJTUVfNUNZQ0xFICAgICAgICAgICBBRENfU0FNUExFVElNRV81Q1lDTEVTCisjZGVmaW5lIEFEQ19TQU1QTEVUSU1FXzM5MUNZQ0xFU181ICAgICAgQURDX1NBTVBMRVRJTUVfMzkxQ1lDTEVTCisjZGVmaW5lIEFEQzRfU0FNUExFVElNRV8xNjBDWUNMRVNfNSAgICAgQURDNF9TQU1QTEVUSU1FXzgxNENZQ0xFU181CisjZW5kaWYgLyogU1RNMzJVNSAqLworCisjaWYgZGVmaW5lZChTVE0zMkg1KQorI2RlZmluZSBBRENfQ0hBTk5FTF9WQ09SRSAgICAgICAgICAgICAgIEFEQ19DSEFOTkVMX1ZERENPUkUKKyNlbmRpZiAvKiBTVE0zMkg1ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTIzLDcgKzE0Myw4IEBACiAjZGVmaW5lIENPTVBfRVhUSV9MSU5FX0NPTVA2X0VWRU5UICAgICBDT01QX0VYVElfTElORV9DT01QNgogI2RlZmluZSBDT01QX0VYVElfTElORV9DT01QN19FVkVOVCAgICAgQ09NUF9FWFRJX0xJTkVfQ09NUDcKICNpZiBkZWZpbmVkKFNUTTMyTDApCi0jZGVmaW5lIENPTVBfTFBUSU1DT05ORUNUSU9OX0VOQUJMRUQgICAoKHVpbnQzMl90KTB4MDAwMDAwMDNVKSAgICAvKiE8IENPTVBYIG91dHB1dCBnZW5lcmljIG5hbWluZzogY29ubmVjdGVkIHRvIExQVElNIGlucHV0IDEgZm9yIENPTVAxLCBMUFRJTSBpbnB1dCAyIGZvciBDT01QMiAqLworI2RlZmluZSBDT01QX0xQVElNQ09OTkVDVElPTl9FTkFCTEVEICAgKCh1aW50MzJfdCkweDAwMDAwMDAzVSkgICAgLyohPCBDT01QWCBvdXRwdXQgZ2VuZXJpYyBuYW1pbmc6IGNvbm5lY3RlZCB0byBMUFRJTSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgMSBmb3IgQ09NUDEsIExQVElNIGlucHV0IDIgZm9yIENPTVAyICovCiAjZW5kaWYKICNkZWZpbmUgQ09NUF9PVVRQVVRfQ09NUDZUSU0yT0NSRUZDTFIgIENPTVBfT1VUUFVUX0NPTVA2X1RJTTJPQ1JFRkNMUgogI2lmIGRlZmluZWQoU1RNMzJGMzczeEMpIHx8IGRlZmluZWQoU1RNMzJGMzc4eHgpCkBAIC0xOTcsNiArMjE4LDExIEBACiAjZW5kaWYKIAogI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNUTTMyVTUpCisjZGVmaW5lIF9fSEFMX0NPTVBfQ09NUDFfRVhUSV9DTEVBUl9SQVNJTkdfRkxBRyBfX0hBTF9DT01QX0NPTVAxX0VYVElfQ0xFQVJfUklTSU5HX0ZMQUcKKyNlbmRpZgorCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjA1LDYgKzIzMSwyNSBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIF9fSEFMX0NPUlRFWF9TWVNUSUNLQ0xLX0NPTkZJRyBIQUxfU1lTVElDS19DTEtTb3VyY2VDb25maWcKKyNpZiBkZWZpbmVkKFNUTTMyVTUpCisjZGVmaW5lICBNUFVfREVWSUNFX25HblJuRSAgICAgICAgICBNUFVfREVWSUNFX05HTlJORQorI2RlZmluZSAgTVBVX0RFVklDRV9uR25SRSAgICAgICAgICAgTVBVX0RFVklDRV9OR05SRQorI2RlZmluZSAgTVBVX0RFVklDRV9uR1JFICAgICAgICAgICAgTVBVX0RFVklDRV9OR1JFCisjZW5kaWYgLyogU1RNMzJVNSAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDUkNfQWxpYXNlcyBDUkMgQVBJIGFsaWFzZXMKKyAgKiBAeworICAqLworI2lmIGRlZmluZWQoU1RNMzJINSkgfHwgZGVmaW5lZChTVE0zMkMwKQorI2Vsc2UKKyNkZWZpbmUgSEFMX0NSQ19JbnB1dF9EYXRhX1JldmVyc2UgICBIQUxfQ1JDRXhfSW5wdXRfRGF0YV9SZXZlcnNlICAgIC8qITwgQWxpYXNlZCB0byBIQUxfQ1JDRXhfSW5wdXRfRGF0YV9SZXZlcnNlIGZvciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXIgU1RNMzIgc2VyaWVzIGNvbXBhdGliaWxpdHkgICovCisjZGVmaW5lIEhBTF9DUkNfT3V0cHV0X0RhdGFfUmV2ZXJzZSAgSEFMX0NSQ0V4X091dHB1dF9EYXRhX1JldmVyc2UgICAvKiE8IEFsaWFzZWQgdG8gSEFMX0NSQ0V4X091dHB1dF9EYXRhX1JldmVyc2UgZm9yIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlciBTVE0zMiBzZXJpZXMgY29tcGF0aWJpbGl0eSAqLworI2VuZGlmCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjM0LDEyICsyNzksMjUgQEAKICNkZWZpbmUgREFDX1dBVkVHRU5FUkFUSU9OX05PSVNFICAgICAgICAgICAgICAgICAgICAgICAgREFDX1dBVkVfTk9JU0UKICNkZWZpbmUgREFDX1dBVkVHRU5FUkFUSU9OX1RSSUFOR0xFICAgICAgICAgICAgICAgICAgICAgREFDX1dBVkVfVFJJQU5HTEUKIAotI2lmIGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkg3KQorI2lmIGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQgKFNUTTMyVTUpCiAjZGVmaW5lIERBQ19DSElQQ09OTkVDVF9ESVNBQkxFICAgICAgIERBQ19DSElQQ09OTkVDVF9FWFRFUk5BTAogI2RlZmluZSBEQUNfQ0hJUENPTk5FQ1RfRU5BQkxFICAgICAgICBEQUNfQ0hJUENPTk5FQ1RfSU5URVJOQUwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkc0KQorI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgREFDX1RSSUdHRVJfU1RPUF9MUFRJTTFfT1VUICBEQUNfVFJJR0dFUl9TVE9QX0xQVElNMV9DSDEKKyNkZWZpbmUgREFDX1RSSUdHRVJfU1RPUF9MUFRJTTNfT1VUICBEQUNfVFJJR0dFUl9TVE9QX0xQVElNM19DSDEKKyNkZWZpbmUgREFDX1RSSUdHRVJfTFBUSU0xX09VVCAgICAgICBEQUNfVFJJR0dFUl9MUFRJTTFfQ0gxCisjZGVmaW5lIERBQ19UUklHR0VSX0xQVElNM19PVVQgICAgICAgREFDX1RSSUdHRVJfTFBUSU0zX0NIMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNUTTMySDUpCisjZGVmaW5lIERBQ19UUklHR0VSX0xQVElNMV9PVVQgICAgICAgREFDX1RSSUdHRVJfTFBUSU0xX0NIMQorI2RlZmluZSBEQUNfVFJJR0dFUl9MUFRJTTJfT1VUICAgICAgIERBQ19UUklHR0VSX0xQVElNMl9DSDEKKyNlbmRpZgorCisjaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMySDcpIHx8IFwKKyAgICBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJHNCkKICNkZWZpbmUgSEFMX0RBQ19NU1BfSU5JVF9DQl9JRCAgICAgICBIQUxfREFDX01TUElOSVRfQ0JfSUQKICNkZWZpbmUgSEFMX0RBQ19NU1BfREVJTklUX0NCX0lEICAgICBIQUxfREFDX01TUERFSU5JVF9DQl9JRAogI2VuZGlmCkBAIC0zMDQsNyArMzYyLDggQEAKICNkZWZpbmUgSEFMX0RNQU1VWF9SRVFVRVNUX0dFTl9GQUxMSU5HICAgICAgICAgICBIQUxfRE1BTVVYX1JFUV9HRU5fRkFMTElORwogI2RlZmluZSBIQUxfRE1BTVVYX1JFUVVFU1RfR0VOX1JJU0lOR19GQUxMSU5HICAgIEhBTF9ETUFNVVhfUkVRX0dFTl9SSVNJTkdfRkFMTElORwogCi0jaWYgZGVmaW5lZChTVE0zMkw0UjV4eCkgfHwgZGVmaW5lZChTVE0zMkw0Ujl4eCkgfHwgZGVmaW5lZChTVE0zMkw0Ujl4eCkgfHwgZGVmaW5lZChTVE0zMkw0UzV4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzd4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzl4eCkKKyNpZiBkZWZpbmVkKFNUTTMyTDRSNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRSOXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRSOXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRTNXh4KSB8fCBcCisgICAgZGVmaW5lZChTVE0zMkw0Uzd4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzl4eCkKICNkZWZpbmUgRE1BX1JFUVVFU1RfRENNSV9QU1NJICAgICAgICAgICAgICAgICAgICBETUFfUkVRVUVTVF9EQ01JCiAjZW5kaWYKIApAQCAtMzgyLDYgKzQ0MSw5IEBACiAKICNlbmRpZiAvKiBTVE0zMkg3ICovCiAKKyNpZiBkZWZpbmVkKFNUTTMyVTUpCisjZGVmaW5lIEdQRE1BMV9SRVFVRVNUX0RDTUkgICAgICAgICAgICAgICAgICAgICAgICBHUERNQTFfUkVRVUVTVF9EQ01JX1BTU0kKKyNlbmRpZiAvKiBTVE0zMlU1ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDYxLDcgKzUyMyw3IEBACiAjZGVmaW5lIE9CX1JEUF9MRVZFTDAgICAgICAgICAgICAgICAgIE9CX1JEUF9MRVZFTF8wCiAjZGVmaW5lIE9CX1JEUF9MRVZFTDEgICAgICAgICAgICAgICAgIE9CX1JEUF9MRVZFTF8xCiAjZGVmaW5lIE9CX1JEUF9MRVZFTDIgICAgICAgICAgICAgICAgIE9CX1JEUF9MRVZFTF8yCi0jaWYgZGVmaW5lZChTVE0zMkcwKQorI2lmIGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkMwKQogI2RlZmluZSBPQl9CT09UX0xPQ0tfRElTQUJMRSAgICAgICAgICBPQl9CT09UX0VOVFJZX0ZPUkNFRF9OT05FCiAjZGVmaW5lIE9CX0JPT1RfTE9DS19FTkFCTEUgICAgICAgICAgIE9CX0JPT1RfRU5UUllfRk9SQ0VEX0ZMQVNICiAjZWxzZQpAQCAtNDY5LDE1ICs1MzEsMjcgQEAKICNkZWZpbmUgT0JfQk9PVF9FTlRSWV9GT1JDRURfRkxBU0ggICAgT0JfQk9PVF9MT0NLX0VOQUJMRQogI2VuZGlmCiAjaWYgZGVmaW5lZChTVE0zMkg3KQotI2RlZmluZSBGTEFTSF9GTEFHX1NORUNDRV9CQU5LMVJSIEZMQVNIX0ZMQUdfU05FQ0NFUlJfQkFOSzEKLSNkZWZpbmUgRkxBU0hfRkxBR19EQkVDQ0VfQkFOSzFSUiBGTEFTSF9GTEFHX0RCRUNDRVJSX0JBTksxCi0jZGVmaW5lIEZMQVNIX0ZMQUdfU1RSQkVSX0JBTksxUiAgRkxBU0hfRkxBR19TVFJCRVJSX0JBTksxCi0jZGVmaW5lIEZMQVNIX0ZMQUdfU05FQ0NFX0JBTksyUlIgRkxBU0hfRkxBR19TTkVDQ0VSUl9CQU5LMgotI2RlZmluZSBGTEFTSF9GTEFHX0RCRUNDRV9CQU5LMlJSIEZMQVNIX0ZMQUdfREJFQ0NFUlJfQkFOSzIKLSNkZWZpbmUgRkxBU0hfRkxBR19TVFJCRVJfQkFOSzJSICBGTEFTSF9GTEFHX1NUUkJFUlJfQkFOSzIKLSNkZWZpbmUgRkxBU0hfRkxBR19XRFcgICAgICAgICAgICBGTEFTSF9GTEFHX1dCTkUKLSNkZWZpbmUgT0JfV1JQX1NFQ1RPUl9BbGwgICAgICAgICBPQl9XUlBfU0VDVE9SX0FMTAorI2RlZmluZSBGTEFTSF9GTEFHX1NORUNDRV9CQU5LMVJSICAgICBGTEFTSF9GTEFHX1NORUNDRVJSX0JBTksxCisjZGVmaW5lIEZMQVNIX0ZMQUdfREJFQ0NFX0JBTksxUlIgICAgIEZMQVNIX0ZMQUdfREJFQ0NFUlJfQkFOSzEKKyNkZWZpbmUgRkxBU0hfRkxBR19TVFJCRVJfQkFOSzFSICAgICAgRkxBU0hfRkxBR19TVFJCRVJSX0JBTksxCisjZGVmaW5lIEZMQVNIX0ZMQUdfU05FQ0NFX0JBTksyUlIgICAgIEZMQVNIX0ZMQUdfU05FQ0NFUlJfQkFOSzIKKyNkZWZpbmUgRkxBU0hfRkxBR19EQkVDQ0VfQkFOSzJSUiAgICAgRkxBU0hfRkxBR19EQkVDQ0VSUl9CQU5LMgorI2RlZmluZSBGTEFTSF9GTEFHX1NUUkJFUl9CQU5LMlIgICAgICBGTEFTSF9GTEFHX1NUUkJFUlJfQkFOSzIKKyNkZWZpbmUgRkxBU0hfRkxBR19XRFcgICAgICAgICAgICAgICAgRkxBU0hfRkxBR19XQk5FCisjZGVmaW5lIE9CX1dSUF9TRUNUT1JfQWxsICAgICAgICAgICAgIE9CX1dSUF9TRUNUT1JfQUxMCiAjZW5kaWYgLyogU1RNMzJINyAqLworI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgT0JfVVNFUl9uUlNUX1NUT1AgICAgICAgICAgICAgT0JfVVNFUl9OUlNUX1NUT1AKKyNkZWZpbmUgT0JfVVNFUl9uUlNUX1NUREJZICAgICAgICAgICAgT0JfVVNFUl9OUlNUX1NUREJZCisjZGVmaW5lIE9CX1VTRVJfblJTVF9TSERXICAgICAgICAgICAgIE9CX1VTRVJfTlJTVF9TSERXCisjZGVmaW5lIE9CX1VTRVJfblNXQk9PVDAgICAgICAgICAgICAgIE9CX1VTRVJfTlNXQk9PVDAKKyNkZWZpbmUgT0JfVVNFUl9uQk9PVDAgICAgICAgICAgICAgICAgT0JfVVNFUl9OQk9PVDAKKyNkZWZpbmUgT0JfbkJPT1QwX1JFU0VUICAgICAgICAgICAgICAgT0JfTkJPT1QwX1JFU0VUCisjZGVmaW5lIE9CX25CT09UMF9TRVQgICAgICAgICAgICAgICAgIE9CX05CT09UMF9TRVQKKyNkZWZpbmUgT0JfVVNFUl9TUkFNMTM0X1JTVCAgICAgICAgICAgT0JfVVNFUl9TUkFNX1JTVAorI2RlZmluZSBPQl9TUkFNMTM0X1JTVF9FUkFTRSAgICAgICAgICBPQl9TUkFNX1JTVF9FUkFTRQorI2RlZmluZSBPQl9TUkFNMTM0X1JTVF9OT1RfRVJBU0UgICAgICBPQl9TUkFNX1JTVF9OT1RfRVJBU0UKKyNlbmRpZiAvKiBTVE0zMlU1ICovCiAKIC8qKgogICAqIEB9CkBAIC01MjAsNiArNTk0LDEwNyBAQAogI2RlZmluZSBIQUxfU1lTQ0ZHX0VuYWJsZUlPQW5hbG9nU3dpdGNoVkREICAgICAgICBIQUxfU1lTQ0ZHX0VuYWJsZUlPU3dpdGNoVkRECiAjZGVmaW5lIEhBTF9TWVNDRkdfRGlzYWJsZUlPQW5hbG9nU3dpdGNoVkREICAgICAgIEhBTF9TWVNDRkdfRGlzYWJsZUlPU3dpdGNoVkRECiAjZW5kaWYgLyogU1RNMzJHNCAqLworCisjaWYgZGVmaW5lZChTVE0zMkg1KQorI2RlZmluZSBTWVNDRkdfSVRfRlBVX0lPQyAgICAgICAgIFNCU19JVF9GUFVfSU9DCisjZGVmaW5lIFNZU0NGR19JVF9GUFVfRFpDICAgICAgICAgU0JTX0lUX0ZQVV9EWkMKKyNkZWZpbmUgU1lTQ0ZHX0lUX0ZQVV9VRkMgICAgICAgICBTQlNfSVRfRlBVX1VGQworI2RlZmluZSBTWVNDRkdfSVRfRlBVX09GQyAgICAgICAgIFNCU19JVF9GUFVfT0ZDCisjZGVmaW5lIFNZU0NGR19JVF9GUFVfSURDICAgICAgICAgU0JTX0lUX0ZQVV9JREMKKyNkZWZpbmUgU1lTQ0ZHX0lUX0ZQVV9JWEMgICAgICAgICBTQlNfSVRfRlBVX0lYQworCisjZGVmaW5lIFNZU0NGR19CUkVBS19GTEFTSF9FQ0MgICAgU0JTX0JSRUFLX0ZMQVNIX0VDQworI2RlZmluZSBTWVNDRkdfQlJFQUtfUFZEICAgICAgICAgIFNCU19CUkVBS19QVkQKKyNkZWZpbmUgU1lTQ0ZHX0JSRUFLX1NSQU1fRUNDICAgICBTQlNfQlJFQUtfU1JBTV9FQ0MKKyNkZWZpbmUgU1lTQ0ZHX0JSRUFLX0xPQ0tVUCAgICAgICBTQlNfQlJFQUtfTE9DS1VQCisKKyNkZWZpbmUgU1lTQ0ZHX1ZSRUZCVUZfVk9MVEFHRV9TQ0FMRTAgICBWUkVGQlVGX1ZPTFRBR0VfU0NBTEUwCisjZGVmaW5lIFNZU0NGR19WUkVGQlVGX1ZPTFRBR0VfU0NBTEUxICAgVlJFRkJVRl9WT0xUQUdFX1NDQUxFMQorI2RlZmluZSBTWVNDRkdfVlJFRkJVRl9WT0xUQUdFX1NDQUxFMiAgIFZSRUZCVUZfVk9MVEFHRV9TQ0FMRTIKKyNkZWZpbmUgU1lTQ0ZHX1ZSRUZCVUZfVk9MVEFHRV9TQ0FMRTMgICBWUkVGQlVGX1ZPTFRBR0VfU0NBTEUzCisKKyNkZWZpbmUgU1lTQ0ZHX1ZSRUZCVUZfSElHSF9JTVBFREFOQ0VfRElTQUJMRSAgIFZSRUZCVUZfSElHSF9JTVBFREFOQ0VfRElTQUJMRQorI2RlZmluZSBTWVNDRkdfVlJFRkJVRl9ISUdIX0lNUEVEQU5DRV9FTkFCTEUgICAgVlJFRkJVRl9ISUdIX0lNUEVEQU5DRV9FTkFCTEUKKworI2RlZmluZSBTWVNDRkdfRkFTVE1PREVQTFVTX1BCNiAgIFNCU19GQVNUTU9ERVBMVVNfUEI2CisjZGVmaW5lIFNZU0NGR19GQVNUTU9ERVBMVVNfUEI3ICAgU0JTX0ZBU1RNT0RFUExVU19QQjcKKyNkZWZpbmUgU1lTQ0ZHX0ZBU1RNT0RFUExVU19QQjggICBTQlNfRkFTVE1PREVQTFVTX1BCOAorI2RlZmluZSBTWVNDRkdfRkFTVE1PREVQTFVTX1BCOSAgIFNCU19GQVNUTU9ERVBMVVNfUEI5CisKKyNkZWZpbmUgU1lTQ0ZHX0VUSF9NSUkgICBTQlNfRVRIX01JSQorI2RlZmluZSBTWVNDRkdfRVRIX1JNSUkgIFNCU19FVEhfUk1JSQorI2RlZmluZSBJU19TWVNDRkdfRVRIRVJORVRfQ09ORklHICBJU19TQlNfRVRIRVJORVRfQ09ORklHCisKKyNkZWZpbmUgU1lTQ0ZHX01FTU9SSUVTX0VSQVNFX0ZMQUdfSVBNRUUgICBTQlNfTUVNT1JJRVNfRVJBU0VfRkxBR19JUE1FRQorI2RlZmluZSBTWVNDRkdfTUVNT1JJRVNfRVJBU0VfRkxBR19NQ0xSICAgIFNCU19NRU1PUklFU19FUkFTRV9GTEFHX01DTFIKKyNkZWZpbmUgSVNfU1lTQ0ZHX01FTU9SSUVTX0VSQVNFX0ZMQUcgICAgICBJU19TQlNfTUVNT1JJRVNfRVJBU0VfRkxBRworCisjZGVmaW5lIElTX1NZU0NGR19DT0RFX0NPTkZJRyBJU19TQlNfQ09ERV9DT05GSUcKKworI2RlZmluZSBTWVNDRkdfTVBVX05TRUMgICBTQlNfTVBVX05TRUMKKyNkZWZpbmUgU1lTQ0ZHX1ZUT1JfTlNFQyAgU0JTX1ZUT1JfTlNFQworI2lmIGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfQ01TRSkgJiYgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkKKyNkZWZpbmUgU1lTQ0ZHX1NBVSAgICAgICAgICAgICAgU0JTX1NBVQorI2RlZmluZSBTWVNDRkdfTVBVX1NFQyAgICAgICAgICBTQlNfTVBVX1NFQworI2RlZmluZSBTWVNDRkdfVlRPUl9BSVJDUl9TRUMgICBTQlNfVlRPUl9BSVJDUl9TRUMKKyNkZWZpbmUgU1lTQ0ZHX0xPQ0tfQUxMICAgICAgICAgU0JTX0xPQ0tfQUxMCisjZWxzZQorI2RlZmluZSBTWVNDRkdfTE9DS19BTEwgICAgICAgICBTQlNfTE9DS19BTEwKKyNlbmRpZiAvKiBfX0FSTV9GRUFUVVJFX0NNU0UgKi8KKworI2RlZmluZSBTWVNDRkdfQ0xLICAgICAgU0JTX0NMSworI2RlZmluZSBTWVNDRkdfQ0xBU1NCICAgU0JTX0NMQVNTQgorI2RlZmluZSBTWVNDRkdfRlBVICAgICAgU0JTX0ZQVQorI2RlZmluZSBTWVNDRkdfQUxMICAgICAgU0JTX0FMTAorCisjZGVmaW5lIFNZU0NGR19TRUMgICAgICBTQlNfU0VDCisjZGVmaW5lIFNZU0NGR19OU0VDICAgICBTQlNfTlNFQworCisjZGVmaW5lIF9fSEFMX1NZU0NGR19GUFVfSU5URVJSVVBUX0VOQUJMRSAgIF9fSEFMX1NCU19GUFVfSU5URVJSVVBUX0VOQUJMRQorI2RlZmluZSBfX0hBTF9TWVNDRkdfRlBVX0lOVEVSUlVQVF9ESVNBQkxFICBfX0hBTF9TQlNfRlBVX0lOVEVSUlVQVF9ESVNBQkxFCisKKyNkZWZpbmUgX19IQUxfU1lTQ0ZHX0JSRUFLX0VDQ19MT0NLICAgICAgICBfX0hBTF9TQlNfQlJFQUtfRUNDX0xPQ0sKKyNkZWZpbmUgX19IQUxfU1lTQ0ZHX0JSRUFLX0xPQ0tVUF9MT0NLICAgICBfX0hBTF9TQlNfQlJFQUtfTE9DS1VQX0xPQ0sKKyNkZWZpbmUgX19IQUxfU1lTQ0ZHX0JSRUFLX1BWRF9MT0NLICAgICAgICBfX0hBTF9TQlNfQlJFQUtfUFZEX0xPQ0sKKyNkZWZpbmUgX19IQUxfU1lTQ0ZHX0JSRUFLX1NSQU1fRUNDX0xPQ0sgICBfX0hBTF9TQlNfQlJFQUtfU1JBTV9FQ0NfTE9DSworCisjZGVmaW5lIF9fSEFMX1NZU0NGR19GQVNUTU9ERVBMVVNfRU5BQkxFICAgX19IQUxfU0JTX0ZBU1RNT0RFUExVU19FTkFCTEUKKyNkZWZpbmUgX19IQUxfU1lTQ0ZHX0ZBU1RNT0RFUExVU19ESVNBQkxFICBfX0hBTF9TQlNfRkFTVE1PREVQTFVTX0RJU0FCTEUKKworI2RlZmluZSBfX0hBTF9TWVNDRkdfR0VUX01FTU9SSUVTX0VSQVNFX1NUQVRVUyAgICBfX0hBTF9TQlNfR0VUX01FTU9SSUVTX0VSQVNFX1NUQVRVUworI2RlZmluZSBfX0hBTF9TWVNDRkdfQ0xFQVJfTUVNT1JJRVNfRVJBU0VfU1RBVFVTICBfX0hBTF9TQlNfQ0xFQVJfTUVNT1JJRVNfRVJBU0VfU1RBVFVTCisKKyNkZWZpbmUgSVNfU1lTQ0ZHX0ZQVV9JTlRFUlJVUFQgICAgSVNfU0JTX0ZQVV9JTlRFUlJVUFQKKyNkZWZpbmUgSVNfU1lTQ0ZHX0JSRUFLX0NPTkZJRyAgICAgSVNfU0JTX0JSRUFLX0NPTkZJRworI2RlZmluZSBJU19TWVNDRkdfVlJFRkJVRl9WT0xUQUdFX1NDQUxFICAgICBJU19WUkVGQlVGX1ZPTFRBR0VfU0NBTEUKKyNkZWZpbmUgSVNfU1lTQ0ZHX1ZSRUZCVUZfSElHSF9JTVBFREFOQ0UgICAgSVNfVlJFRkJVRl9ISUdIX0lNUEVEQU5DRQorI2RlZmluZSBJU19TWVNDRkdfVlJFRkJVRl9UUklNTUlORyAgSVNfVlJFRkJVRl9UUklNTUlORworI2RlZmluZSBJU19TWVNDRkdfRkFTVE1PREVQTFVTICAgICAgSVNfU0JTX0ZBU1RNT0RFUExVUworI2RlZmluZSBJU19TWVNDRkdfSVRFTVNfQVRUUklCVVRFUyAgSVNfU0JTX0lURU1TX0FUVFJJQlVURVMKKyNkZWZpbmUgSVNfU1lTQ0ZHX0FUVFJJQlVURVMgICAgICAgIElTX1NCU19BVFRSSUJVVEVTCisjZGVmaW5lIElTX1NZU0NGR19MT0NLX0lURU1TICAgICAgICBJU19TQlNfTE9DS19JVEVNUworCisjZGVmaW5lIEhBTF9TWVNDRkdfVlJFRkJVRl9Wb2x0YWdlU2NhbGluZ0NvbmZpZyAgIEhBTF9WUkVGQlVGX1ZvbHRhZ2VTY2FsaW5nQ29uZmlnCisjZGVmaW5lIEhBTF9TWVNDRkdfVlJFRkJVRl9IaWdoSW1wZWRhbmNlQ29uZmlnICAgIEhBTF9WUkVGQlVGX0hpZ2hJbXBlZGFuY2VDb25maWcKKyNkZWZpbmUgSEFMX1NZU0NGR19WUkVGQlVGX1RyaW1taW5nQ29uZmlnICAgICAgICAgSEFMX1ZSRUZCVUZfVHJpbW1pbmdDb25maWcKKyNkZWZpbmUgSEFMX1NZU0NGR19FbmFibGVWUkVGQlVGICAgICAgICAgICAgICAgICAgSEFMX0VuYWJsZVZSRUZCVUYKKyNkZWZpbmUgSEFMX1NZU0NGR19EaXNhYmxlVlJFRkJVRiAgICAgICAgICAgICAgICAgSEFMX0Rpc2FibGVWUkVGQlVGCisKKyNkZWZpbmUgSEFMX1NZU0NGR19FbmFibGVJT0FuYWxvZ1N3aXRjaEJvb3N0ZXIgICAgSEFMX1NCU19FbmFibGVJT0FuYWxvZ1N3aXRjaEJvb3N0ZXIKKyNkZWZpbmUgSEFMX1NZU0NGR19EaXNhYmxlSU9BbmFsb2dTd2l0Y2hCb29zdGVyICAgSEFMX1NCU19EaXNhYmxlSU9BbmFsb2dTd2l0Y2hCb29zdGVyCisjZGVmaW5lIEhBTF9TWVNDRkdfRVRISW50ZXJmYWNlU2VsZWN0ICAgICAgICAgICAgIEhBTF9TQlNfRVRISW50ZXJmYWNlU2VsZWN0CisKKyNkZWZpbmUgSEFMX1NZU0NGR19Mb2NrICAgICBIQUxfU0JTX0xvY2sKKyNkZWZpbmUgSEFMX1NZU0NGR19HZXRMb2NrICBIQUxfU0JTX0dldExvY2sKKworI2lmIGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfQ01TRSkgJiYgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkKKyNkZWZpbmUgSEFMX1NZU0NGR19Db25maWdBdHRyaWJ1dGVzICAgICBIQUxfU0JTX0NvbmZpZ0F0dHJpYnV0ZXMKKyNkZWZpbmUgSEFMX1NZU0NGR19HZXRDb25maWdBdHRyaWJ1dGVzICBIQUxfU0JTX0dldENvbmZpZ0F0dHJpYnV0ZXMKKyNlbmRpZiAvKiBfX0FSTV9GRUFUVVJFX0NNU0UgKi8KKworI2VuZGlmIC8qIFNUTTMySDUgKi8KKworCiAvKioKICAgKiBAfQogICAqLwpAQCAtNTg3LDM0ICs3NjIsNzIgQEAKICNkZWZpbmUgR1BJT19BRjEwX09URzJfSFMgIEdQSU9fQUYxMF9PVEcyX0ZTCiAjZGVmaW5lIEdQSU9fQUYxMF9PVEcxX0ZTICBHUElPX0FGMTBfT1RHMV9IUwogI2RlZmluZSBHUElPX0FGMTJfT1RHMl9GUyAgR1BJT19BRjEyX09URzFfRlMKLSNlbmRpZiAvKlNUTTMySDc0M3h4IHx8IFNUTTMySDc1M3h4IHx8IFNUTTMySDc1MHh4IHx8IFNUTTMySDc0Mnh4IHx8IFNUTTMySDc0NXh4IHx8IFNUTTMySDc1NXh4IHx8IFNUTTMySDc0N3h4IHx8IFNUTTMySDc1N3h4ICovCisjZW5kaWYgLypTVE0zMkg3NDN4eCB8fCBTVE0zMkg3NTN4eCB8fCBTVE0zMkg3NTB4eCB8fCBTVE0zMkg3NDJ4eCB8fCBTVE0zMkg3NDV4eCB8fCBTVE0zMkg3NTV4eCB8fCBTVE0zMkg3NDd4eCB8fCBcCisgICAgICAgICBTVE0zMkg3NTd4eCAqLwogI2VuZGlmIC8qIFNUTTMySDcgKi8KIAogI2RlZmluZSBHUElPX0FGMF9MUFRJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0FGMF9MUFRJTTEKICNkZWZpbmUgR1BJT19BRjFfTFBUSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjFfTFBUSU0xCiAjZGVmaW5lIEdQSU9fQUYyX0xQVElNICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fQUYyX0xQVElNMQogCi0jaWYgZGVmaW5lZChTVE0zMkwwKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkYyKSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkg3KQorI2lmIGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGMikgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBcCisgICAgZGVmaW5lZChTVE0zMkc0KSB8fCBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMlU1KQogI2RlZmluZSAgR1BJT19TUEVFRF9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX1NQRUVEX0ZSRVFfTE9XCiAjZGVmaW5lICBHUElPX1NQRUVEX01FRElVTSAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fU1BFRURfRlJFUV9NRURJVU0KICNkZWZpbmUgIEdQSU9fU1BFRURfRkFTVCAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19TUEVFRF9GUkVRX0hJR0gKICNkZWZpbmUgIEdQSU9fU1BFRURfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19TUEVFRF9GUkVRX1ZFUllfSElHSAotI2VuZGlmIC8qIFNUTTMyTDAgfHwgU1RNMzJMNCB8fCBTVE0zMkY0IHx8IFNUTTMyRjIgfHwgU1RNMzJGNyB8fCBTVE0zMkc0IHx8IFNUTTMySDcqLworI2VuZGlmIC8qIFNUTTMyTDAgfHwgU1RNMzJMNCB8fCBTVE0zMkY0IHx8IFNUTTMyRjIgfHwgU1RNMzJGNyB8fCBTVE0zMkc0IHx8IFNUTTMySDcgfHwgU1RNMzJXQiB8fCBTVE0zMlU1Ki8KIAogI2lmIGRlZmluZWQoU1RNMzJMMSkKLSAjZGVmaW5lICBHUElPX1NQRUVEX1ZFUllfTE9XICAgIEdQSU9fU1BFRURfRlJFUV9MT1cKLSAjZGVmaW5lICBHUElPX1NQRUVEX0xPVyAgICAgICAgIEdQSU9fU1BFRURfRlJFUV9NRURJVU0KLSAjZGVmaW5lICBHUElPX1NQRUVEX01FRElVTSAgICAgIEdQSU9fU1BFRURfRlJFUV9ISUdICi0gI2RlZmluZSAgR1BJT19TUEVFRF9ISUdIICAgICAgICBHUElPX1NQRUVEX0ZSRVFfVkVSWV9ISUdICisjZGVmaW5lICBHUElPX1NQRUVEX1ZFUllfTE9XICAgIEdQSU9fU1BFRURfRlJFUV9MT1cKKyNkZWZpbmUgIEdQSU9fU1BFRURfTE9XICAgICAgICAgR1BJT19TUEVFRF9GUkVRX01FRElVTQorI2RlZmluZSAgR1BJT19TUEVFRF9NRURJVU0gICAgICBHUElPX1NQRUVEX0ZSRVFfSElHSAorI2RlZmluZSAgR1BJT19TUEVFRF9ISUdIICAgICAgICBHUElPX1NQRUVEX0ZSRVFfVkVSWV9ISUdICiAjZW5kaWYgLyogU1RNMzJMMSAqLwogCiAjaWYgZGVmaW5lZChTVE0zMkYwKSB8fCBkZWZpbmVkKFNUTTMyRjMpIHx8IGRlZmluZWQoU1RNMzJGMSkKLSAjZGVmaW5lICBHUElPX1NQRUVEX0xPVyAgICBHUElPX1NQRUVEX0ZSRVFfTE9XCi0gI2RlZmluZSAgR1BJT19TUEVFRF9NRURJVU0gR1BJT19TUEVFRF9GUkVRX01FRElVTQotICNkZWZpbmUgIEdQSU9fU1BFRURfSElHSCAgIEdQSU9fU1BFRURfRlJFUV9ISUdICisjZGVmaW5lICBHUElPX1NQRUVEX0xPVyAgICBHUElPX1NQRUVEX0ZSRVFfTE9XCisjZGVmaW5lICBHUElPX1NQRUVEX01FRElVTSBHUElPX1NQRUVEX0ZSRVFfTUVESVVNCisjZGVmaW5lICBHUElPX1NQRUVEX0hJR0ggICBHUElPX1NQRUVEX0ZSRVFfSElHSAogI2VuZGlmIC8qIFNUTTMyRjAgfHwgU1RNMzJGMyB8fCBTVE0zMkYxICovCiAKICNkZWZpbmUgR1BJT19BRjZfREZTRE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjZfREZTRE0xCisKKyNpZiBkZWZpbmVkKFNUTTMyVTUpIHx8IGRlZmluZWQoU1RNMzJINSkKKyNkZWZpbmUgR1BJT19BRjBfUlRDXzUwSHogICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjBfUlRDXzUwSFoKKyNlbmRpZiAvKiBTVE0zMlU1IHx8IFNUTTMySDUgKi8KKyNpZiBkZWZpbmVkKFNUTTMyVTUpCisjZGVmaW5lIEdQSU9fQUYwX1MyRFNUT1AgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fQUYwX1NSRFNUT1AKKyNkZWZpbmUgR1BJT19BRjExX0xQR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjExX0xQR1BJTzEKKyNlbmRpZiAvKiBTVE0zMlU1ICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEhBTF9HVFpDX0FsaWFzZWRfRGVmaW5lcyBIQUwgR1RaQyBBbGlhc2VkIERlZmluZXMgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKKyAgKiBAeworICAqLworI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgR1RaQ19QRVJJUEhfRENNSSAgICAgICAgICAgICAgICAgICAgICBHVFpDX1BFUklQSF9EQ01JX1BTU0kKKyNkZWZpbmUgR1RaQ19QRVJJUEhfTFREQyAgICAgICAgICAgICAgICAgICAgICBHVFpDX1BFUklQSF9MVERDVVNCCisjZW5kaWYgLyogU1RNMzJVNSAqLworI2lmIGRlZmluZWQoU1RNMzJINSkKKyNkZWZpbmUgR1RaQ19QRVJJUEhfREFDMTIgICAgICAgICAgICAgICAgICAgICBHVFpDX1BFUklQSF9EQUMxCisjZGVmaW5lIEdUWkNfUEVSSVBIX0FEQzEyICAgICAgICAgICAgICAgICAgICAgR1RaQ19QRVJJUEhfQURDCisjZGVmaW5lIEdUWkNfUEVSSVBIX1VTQkZTICAgICAgICAgICAgICAgICAgICAgR1RaQ19QRVJJUEhfVVNCCisjZW5kaWYgLyogU1RNMzJINSAqLworI2lmIGRlZmluZWQoU1RNMzJINSkgfHwgZGVmaW5lZChTVE0zMlU1KQorI2RlZmluZSBHVFpDX01DUEJCX05CX1ZDVFJfUkVHX01BWCAgICAgICAgICAgIEdUWkNfTVBDQkJfTkJfVkNUUl9SRUdfTUFYCisjZGVmaW5lIEdUWkNfTUNQQkJfTkJfTENLX1ZDVFJfUkVHX01BWCAgICAgICAgR1RaQ19NUENCQl9OQl9MQ0tfVkNUUl9SRUdfTUFYCisjZGVmaW5lIEdUWkNfTUNQQkJfU1VQRVJCTE9DS19VTkxPQ0tFRCAgICAgICAgR1RaQ19NUENCQl9TVVBFUkJMT0NLX1VOTE9DS0VECisjZGVmaW5lIEdUWkNfTUNQQkJfU1VQRVJCTE9DS19MT0NLRUQgICAgICAgICAgR1RaQ19NUENCQl9TVVBFUkJMT0NLX0xPQ0tFRAorI2RlZmluZSBHVFpDX01DUEJCX0JMT0NLX05TRUMgICAgICAgICAgICAgICAgIEdUWkNfTVBDQkJfQkxPQ0tfTlNFQworI2RlZmluZSBHVFpDX01DUEJCX0JMT0NLX1NFQyAgICAgICAgICAgICAgICAgIEdUWkNfTVBDQkJfQkxPQ0tfU0VDCisjZGVmaW5lIEdUWkNfTUNQQkJfQkxPQ0tfTlBSSVYgICAgICAgICAgICAgICAgR1RaQ19NUENCQl9CTE9DS19OUFJJVgorI2RlZmluZSBHVFpDX01DUEJCX0JMT0NLX1BSSVYgICAgICAgICAgICAgICAgIEdUWkNfTVBDQkJfQkxPQ0tfUFJJVgorI2RlZmluZSBHVFpDX01DUEJCX0xPQ0tfT0ZGICAgICAgICAgICAgICAgICAgIEdUWkNfTVBDQkJfTE9DS19PRkYKKyNkZWZpbmUgR1RaQ19NQ1BCQl9MT0NLX09OICAgICAgICAgICAgICAgICAgICBHVFpDX01QQ0JCX0xPQ0tfT04KKyNlbmRpZiAvKiBTVE0zMkg1IHx8IFNUTTMyVTUgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC03NzIsNDkgKzk4NSw2IEBACiAjZGVmaW5lIEhSVElNX0VWRU5UU1JDXzMgICAgICAgICAgICAgIChIUlRJTV9FRUNSMV9FRTFTUkNfMSkKICNkZWZpbmUgSFJUSU1fRVZFTlRTUkNfNCAgICAgICAgICAgICAgKEhSVElNX0VFQ1IxX0VFMVNSQ18xIHwgSFJUSU1fRUVDUjFfRUUxU1JDXzApCiAKLS8qKiBAYnJpZWYgQ29uc3RhbnRzIGRlZmluaW5nIHRoZSBldmVudHMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgdG8gY29uZmlndXJlIHRoZQotICAqICAgICAgICBzZXQvcmVzZXQgY3Jvc3NiYXIgb2YgYSB0aW1lciBvdXRwdXQKLSAgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzEgICAgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQxKQotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMiAgICAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDIpCi0jZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl8zICAgICAgIChIUlRJTV9TRVQxUl9USU1FVk5UMykKLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzQgICAgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQ0KQotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNSAgICAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDUpCi0jZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl82ICAgICAgIChIUlRJTV9TRVQxUl9USU1FVk5UNikKLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzcgICAgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQ3KQotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfOCAgICAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDgpCi0jZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl85ICAgICAgIChIUlRJTV9TRVQxUl9USU1FVk5UOSkKLQotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl8xICAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDEpCi0jZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzIgICAgIChIUlRJTV9SU1QxUl9USU1FVk5UMikKLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfMyAgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQzKQotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl80ICAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDQpCi0jZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzUgICAgIChIUlRJTV9SU1QxUl9USU1FVk5UNSkKLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfNiAgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQ2KQotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl83ICAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDcpCi0jZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzggICAgIChIUlRJTV9SU1QxUl9USU1FVk5UOCkKLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfOSAgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQ5KQotCi0vKiogQGJyaWVmIENvbnN0YW50cyBkZWZpbmluZyB0aGUgZXZlbnQgZmlsdGVyaW5nIGFwcGxpZWQgdG8gZXh0ZXJuYWwgZXZlbnRzCi0gICogICAgICAgIGJ5IGEgdGltZXIKLSAgKi8KLSNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfTk9ORSAgICAgICAgICAgICAoMHgwMDAwMDAwMFUpCi0jZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HQ01QMSAgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMCkKLSNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdDTVAyICAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8xKQotI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0NNUDMgICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzEgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzApCi0jZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HQ01QNCAgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMikKLSNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdGTFRSMSAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8yIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8wKQotI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0ZMVFIyICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzIgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzEpCi0jZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HRkxUUjMgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMiB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMSB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMCkKLSNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdGTFRSNCAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8zKQotI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0ZMVFI1ICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzMgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzApCi0jZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HRkxUUjYgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMyB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMSkKLSNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdGTFRSNyAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8zIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8xIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8wKQotI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0ZMVFI4ICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzMgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzIpCi0jZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX1dJTkRPV0lOR0NNUDIgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMyB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMiB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMCkKLSNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfV0lORE9XSU5HQ01QMyAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8zIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8yIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8xKQotI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9XSU5ET1dJTkdUSU0gICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzMgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzIgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzEgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzApCi0KIC8qKiBAYnJpZWYgQ29uc3RhbnRzIGRlZmluaW5nIHRoZSBETEwgY2FsaWJyYXRpb24gcGVyaW9kcyAoaW4gbWljcm8gc2Vjb25kcykKICAgKi8KICNkZWZpbmUgSFJUSU1fQ0FMSUJSQVRJT05SQVRFXzczMDAgICAgICAgICAgICAgMHgwMDAwMDAwMFUKQEAgLTgzOCw3ICsxMDA4LDggQEAKICNkZWZpbmUgSTJDX05PU1RSRVRDSF9FTkFCTEVEICAgICAgICAgICAgICAgICAgIEkyQ19OT1NUUkVUQ0hfRU5BQkxFCiAjZGVmaW5lIEkyQ19BTkFMT0dGSUxURVJfRU5BQkxFRCAgICAgICAgICAgICAgICBJMkNfQU5BTE9HRklMVEVSX0VOQUJMRQogI2RlZmluZSBJMkNfQU5BTE9HRklMVEVSX0RJU0FCTEVEICAgICAgICAgICAgICAgSTJDX0FOQUxPR0ZJTFRFUl9ESVNBQkxFCi0jaWYgZGVmaW5lZChTVE0zMkYwKSB8fCBkZWZpbmVkKFNUTTMyRjEpIHx8IGRlZmluZWQoU1RNMzJGMykgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMMSkgfHwgZGVmaW5lZChTVE0zMkY3KQorI2lmIGRlZmluZWQoU1RNMzJGMCkgfHwgZGVmaW5lZChTVE0zMkYxKSB8fCBkZWZpbmVkKFNUTTMyRjMpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBcCisgICAgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyRjcpCiAjZGVmaW5lIEhBTF9JMkNfU1RBVEVfTUVNX0JVU1lfVFggICAgICAgICAgICAgICBIQUxfSTJDX1NUQVRFX0JVU1lfVFgKICNkZWZpbmUgSEFMX0kyQ19TVEFURV9NRU1fQlVTWV9SWCAgICAgICAgICAgICAgIEhBTF9JMkNfU1RBVEVfQlVTWV9SWAogI2RlZmluZSBIQUxfSTJDX1NUQVRFX01BU1RFUl9CVVNZX1RYICAgICAgICAgICAgSEFMX0kyQ19TVEFURV9CVVNZX1RYCkBAIC04OTUsNiArMTA2NiwyMCBAQAogI2RlZmluZSBMUFRJTV9UUklHU0FNUExFVElNRV80VFJBTlNJVElPTiAgICAgICAgTFBUSU1fVFJJR1NBTVBMRVRJTUVfNFRSQU5TSVRJT05TCiAjZGVmaW5lIExQVElNX1RSSUdTQU1QTEVUSU1FXzhUUkFOU0lUSU9OICAgICAgICBMUFRJTV9UUklHU0FNUExFVElNRV84VFJBTlNJVElPTlMKIAorCisvKiogQGRlZmdyb3VwIEhBTF9MUFRJTV9BbGlhc2VkX0RlZmluZXMgSEFMIExQVElNIEFsaWFzZWQgRGVmaW5lcyBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQorICAqIEB7CisgICovCisjZGVmaW5lIEhBTF9MUFRJTV9SZWFkQ29tcGFyZSAgICAgIEhBTF9MUFRJTV9SZWFkQ2FwdHVyZWRWYWx1ZQorLyoqCisgICogQH0KKyAgKi8KKworI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgTFBUSU1fSVNSX0NDMSAgICAgICAgTFBUSU1fSVNSX0NDMUlGCisjZGVmaW5lIExQVElNX0lTUl9DQzIgICAgICAgIExQVElNX0lTUl9DQzJJRgorI2RlZmluZSBMUFRJTV9DSEFOTkVMX0FMTCAgICAweDAwMDAwMDAwVQorI2VuZGlmIC8qIFNUTTMyVTUgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC05NjIsMTEgKzExNDcsMTYgQEAKICNkZWZpbmUgT1BBTVBfUEdBQ09OTkVDVF9WTTAgICAgICAgICAgICAgICAgICBPUEFNUF9QR0FfQ09OTkVDVF9JTlZFUlRJTkdJTlBVVF9JTzAKICNkZWZpbmUgT1BBTVBfUEdBQ09OTkVDVF9WTTEgICAgICAgICAgICAgICAgICBPUEFNUF9QR0FfQ09OTkVDVF9JTlZFUlRJTkdJTlBVVF9JTzEKIAotI2lmIGRlZmluZWQoU1RNMzJMMSkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMkc0KQorI2lmIGRlZmluZWQoU1RNMzJMMSkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMkc0KSB8fCBkZWZpbmVkKFNUTTMyVTUpCiAjZGVmaW5lIEhBTF9PUEFNUF9NU1BfSU5JVF9DQl9JRCAgICAgICBIQUxfT1BBTVBfTVNQSU5JVF9DQl9JRAogI2RlZmluZSBIQUxfT1BBTVBfTVNQX0RFSU5JVF9DQl9JRCAgICAgSEFMX09QQU1QX01TUERFSU5JVF9DQl9JRAogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkKKyNkZWZpbmUgT1BBTVBfUE9XRVJNT0RFX05PUk1BTCAgICAgICAgICAgICAgICBPUEFNUF9QT1dFUk1PREVfTk9STUFMUE9XRVIKKyNlbGlmIGRlZmluZWQoU1RNMzJHNCkKKyNkZWZpbmUgT1BBTVBfUE9XRVJNT0RFX05PUk1BTCAgICAgICAgICAgICAgICBPUEFNUF9QT1dFUk1PREVfTk9STUFMU1BFRUQKKyNlbmRpZgogCiAvKioKICAgKiBAfQpAQCAtOTc4LDE1ICsxMTY4LDE1IEBACiAjZGVmaW5lIEkyU19TVEFOREFSRF9QSElMTElQUyAgICAgIEkyU19TVEFOREFSRF9QSElMSVBTCiAKICNpZiBkZWZpbmVkKFNUTTMySDcpCi0gICNkZWZpbmUgSTJTX0lUX1RYRSAgICAgICAgICAgICAgIEkyU19JVF9UWFAKLSAgI2RlZmluZSBJMlNfSVRfUlhORSAgICAgICAgICAgICAgSTJTX0lUX1JYUAorI2RlZmluZSBJMlNfSVRfVFhFICAgICAgICAgICAgICAgSTJTX0lUX1RYUAorI2RlZmluZSBJMlNfSVRfUlhORSAgICAgICAgICAgICAgSTJTX0lUX1JYUAogCi0gICNkZWZpbmUgSTJTX0ZMQUdfVFhFICAgICAgICAgICAgIEkyU19GTEFHX1RYUAotICAjZGVmaW5lIEkyU19GTEFHX1JYTkUgICAgICAgICAgICBJMlNfRkxBR19SWFAKKyNkZWZpbmUgSTJTX0ZMQUdfVFhFICAgICAgICAgICAgIEkyU19GTEFHX1RYUAorI2RlZmluZSBJMlNfRkxBR19SWE5FICAgICAgICAgICAgSTJTX0ZMQUdfUlhQCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoU1RNMzJGNykKLSAgI2RlZmluZSBJMlNfQ0xPQ0tfU1lTQ0xLICAgICAgICAgICBJMlNfQ0xPQ0tfUExMCisjZGVmaW5lIEkyU19DTE9DS19TWVNDTEsgICAgICAgICAgIEkyU19DTE9DS19QTEwKICNlbmRpZgogLyoqCiAgICogQH0KQEAgLTEwMjEsNyArMTIxMSw3IEBACiAvKioKICAgKiBAfQogICAqLwotICAKKwogLyoqIEBkZWZncm91cCBIQUxfUlRDX0FsaWFzZWRfRGVmaW5lcyBIQUwgUlRDIEFsaWFzZWQgRGVmaW5lcyBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQogICAqIEB7CiAgICovCkBAIC0xMDQxLDggKzEyMzEsOCBAQAogI2RlZmluZSBSVENfVEFNUEVSMV8yXzNfSU5URVJSVVBUICAgICAgIFJUQ19BTExfVEFNUEVSX0lOVEVSUlVQVAogCiAjZGVmaW5lIFJUQ19USU1FU1RBTVBQSU5fUEMxMyAgUlRDX1RJTUVTVEFNUFBJTl9ERUZBVUxUCi0jZGVmaW5lIFJUQ19USU1FU1RBTVBQSU5fUEEwIFJUQ19USU1FU1RBTVBQSU5fUE9TMQotI2RlZmluZSBSVENfVElNRVNUQU1QUElOX1BJOCBSVENfVElNRVNUQU1QUElOX1BPUzEKKyNkZWZpbmUgUlRDX1RJTUVTVEFNUFBJTl9QQTAgICBSVENfVElNRVNUQU1QUElOX1BPUzEKKyNkZWZpbmUgUlRDX1RJTUVTVEFNUFBJTl9QSTggICBSVENfVElNRVNUQU1QUElOX1BPUzEKICNkZWZpbmUgUlRDX1RJTUVTVEFNUFBJTl9QQzEgICBSVENfVElNRVNUQU1QUElOX1BPUzIKIAogI2RlZmluZSBSVENfT1VUUFVUX1JFTUFQX1BDMTMgIFJUQ19PVVRQVVRfUkVNQVBfTk9ORQpAQCAtMTA1MywxNSArMTI0Myw0MiBAQAogI2RlZmluZSBSVENfVEFNUEVSUElOX1BBMCAgUlRDX1RBTVBFUlBJTl9QT1MxCiAjZGVmaW5lIFJUQ19UQU1QRVJQSU5fUEk4ICBSVENfVEFNUEVSUElOX1BPUzEKIAorI2lmIGRlZmluZWQoU1RNMzJINSkKKyNkZWZpbmUgVEFNUF9TRUNSRVRERVZJQ0VfRVJBU0VfTk9ORSAgICAgICAgVEFNUF9ERVZJQ0VTRUNSRVRTX0VSQVNFX05PTkUKKyNkZWZpbmUgVEFNUF9TRUNSRVRERVZJQ0VfRVJBU0VfQktQX1NSQU0gICAgVEFNUF9ERVZJQ0VTRUNSRVRTX0VSQVNFX0JLUFNSQU0KKyNlbmRpZiAvKiBTVE0zMkg1ICovCisKKyNpZiBkZWZpbmVkKFNUTTMyV0JBKQorI2RlZmluZSBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9OT05FICAgICAgICAgICAgVEFNUF9ERVZJQ0VTRUNSRVRTX0VSQVNFX05PTkUKKyNkZWZpbmUgVEFNUF9TRUNSRVRERVZJQ0VfRVJBU0VfU1JBTTIgICAgICAgICAgIFRBTVBfREVWSUNFU0VDUkVUU19FUkFTRV9TUkFNMgorI2RlZmluZSBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9SSFVLICAgICAgICAgICAgVEFNUF9ERVZJQ0VTRUNSRVRTX0VSQVNFX1JIVUsKKyNkZWZpbmUgVEFNUF9TRUNSRVRERVZJQ0VfRVJBU0VfSUNBQ0hFICAgICAgICAgIFRBTVBfREVWSUNFU0VDUkVUU19FUkFTRV9JQ0FDSEUKKyNkZWZpbmUgVEFNUF9TRUNSRVRERVZJQ0VfRVJBU0VfU0FFU19BRVNfSEFTSCAgIFRBTVBfREVWSUNFU0VDUkVUU19FUkFTRV9TQUVTX0FFU19IQVNICisjZGVmaW5lIFRBTVBfU0VDUkVUREVWSUNFX0VSQVNFX1BLQV9TUkFNICAgICAgICBUQU1QX0RFVklDRVNFQ1JFVFNfRVJBU0VfUEtBX1NSQU0KKyNkZWZpbmUgVEFNUF9TRUNSRVRERVZJQ0VfRVJBU0VfQUxMICAgICAgICAgICAgIFRBTVBfREVWSUNFU0VDUkVUU19FUkFTRV9BTEwKKyNlbmRpZiAvKiBTVE0zMldCQSAqLworCisjaWYgZGVmaW5lZChTVE0zMkg1KSB8fCBkZWZpbmVkKFNUTTMyV0JBKQorI2RlZmluZSBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9ESVNBQkxFICAgICBUQU1QX0RFVklDRVNFQ1JFVFNfRVJBU0VfTk9ORQorI2RlZmluZSBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9FTkFCTEUgICAgICBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9BTEwKKyNlbmRpZiAvKiBTVE0zMkg1IHx8IFNUTTMyV0JBICovCisKKyNpZiBkZWZpbmVkKFNUTTMyRjcpCisjZGVmaW5lIFJUQ19UQU1QQ1JfVEFNUFhFICAgICAgICAgIFJUQ19UQU1QRVJfRU5BQkxFX0JJVFNfTUFTSworI2RlZmluZSBSVENfVEFNUENSX1RBTVBYSUUgICAgICAgICBSVENfVEFNUEVSX0lUX0VOQUJMRV9CSVRTX01BU0sKKyNlbmRpZiAvKiBTVE0zMkY3ICovCisKICNpZiBkZWZpbmVkKFNUTTMySDcpCiAjZGVmaW5lIFJUQ19UQU1QQ1JfVEFNUFhFICAgICAgICAgIFJUQ19UQU1QRVJfWAogI2RlZmluZSBSVENfVEFNUENSX1RBTVBYSUUgICAgICAgICBSVENfVEFNUEVSX1hfSU5URVJSVVBUCisjZW5kaWYgLyogU1RNMzJINyAqLwogCisjaWYgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJMMCkKICNkZWZpbmUgUlRDX1RBTVBFUjFfSU5URVJSVVBUICAgICAgUlRDX0lUX1RBTVAxCiAjZGVmaW5lIFJUQ19UQU1QRVIyX0lOVEVSUlVQVCAgICAgIFJUQ19JVF9UQU1QMgogI2RlZmluZSBSVENfVEFNUEVSM19JTlRFUlJVUFQgICAgICBSVENfSVRfVEFNUDMKLSNkZWZpbmUgUlRDX0FMTF9UQU1QRVJfSU5URVJSVVBUICAgUlRDX0lUX1RBTVBBTEwKLSNlbmRpZiAvKiBTVE0zMkg3ICovCisjZGVmaW5lIFJUQ19BTExfVEFNUEVSX0lOVEVSUlVQVCAgIFJUQ19JVF9UQU1QCisjZW5kaWYgLyogU1RNMzJGNyB8fCBTVE0zMkg3IHx8IFNUTTMyTDAgKi8KIAogLyoqCiAgICogQH0KQEAgLTExMjEsMTYgKzEzMzgsMTYgQEAKIAogI2lmIGRlZmluZWQoU1RNMzJINykKIAotICNkZWZpbmUgU1BJX0ZMQUdfVFhFICAgICAgICAgICAgICAgICAgICBTUElfRkxBR19UWFAKLSAjZGVmaW5lIFNQSV9GTEFHX1JYTkUgICAgICAgICAgICAgICAgICAgU1BJX0ZMQUdfUlhQCisjZGVmaW5lIFNQSV9GTEFHX1RYRSAgICAgICAgICAgICAgICAgICAgU1BJX0ZMQUdfVFhQCisjZGVmaW5lIFNQSV9GTEFHX1JYTkUgICAgICAgICAgICAgICAgICAgU1BJX0ZMQUdfUlhQCiAKLSAjZGVmaW5lIFNQSV9JVF9UWEUgICAgICAgICAgICAgICAgICAgICAgU1BJX0lUX1RYUAotICNkZWZpbmUgU1BJX0lUX1JYTkUgICAgICAgICAgICAgICAgICAgICBTUElfSVRfUlhQCisjZGVmaW5lIFNQSV9JVF9UWEUgICAgICAgICAgICAgICAgICAgICAgU1BJX0lUX1RYUAorI2RlZmluZSBTUElfSVRfUlhORSAgICAgICAgICAgICAgICAgICAgIFNQSV9JVF9SWFAKIAotICNkZWZpbmUgU1BJX0ZSTFZMX0VNUFRZICAgICAgICAgICAgICAgICBTUElfUlhfRklGT18wUEFDS0VUCi0gI2RlZmluZSBTUElfRlJMVkxfUVVBUlRFUl9GVUxMICAgICAgICAgIFNQSV9SWF9GSUZPXzFQQUNLRVQKLSAjZGVmaW5lIFNQSV9GUkxWTF9IQUxGX0ZVTEwgICAgICAgICAgICAgU1BJX1JYX0ZJRk9fMlBBQ0tFVAotICNkZWZpbmUgU1BJX0ZSTFZMX0ZVTEwgICAgICAgICAgICAgICAgICBTUElfUlhfRklGT18zUEFDS0VUCisjZGVmaW5lIFNQSV9GUkxWTF9FTVBUWSAgICAgICAgICAgICAgICAgU1BJX1JYX0ZJRk9fMFBBQ0tFVAorI2RlZmluZSBTUElfRlJMVkxfUVVBUlRFUl9GVUxMICAgICAgICAgIFNQSV9SWF9GSUZPXzFQQUNLRVQKKyNkZWZpbmUgU1BJX0ZSTFZMX0hBTEZfRlVMTCAgICAgICAgICAgICBTUElfUlhfRklGT18yUEFDS0VUCisjZGVmaW5lIFNQSV9GUkxWTF9GVUxMICAgICAgICAgICAgICAgICAgU1BJX1JYX0ZJRk9fM1BBQ0tFVAogCiAjZW5kaWYgLyogU1RNMzJINyAqLwogCkBAIC0xMjI4LDYgKzE0NDUsMTAgQEAKICNkZWZpbmUgVElNX1RJTTNfVEkxX0NPTVAxQ09NUDJfT1VUICAgVElNX1RJTTNfVEkxX0NPTVAxX0NPTVAyCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgT0NSRUZfQ0xFQVJfU0VMRUNUX1BvcyAgICAgICBPQ1JFRl9DTEVBUl9TRUxFQ1RfUE9TCisjZGVmaW5lIE9DUkVGX0NMRUFSX1NFTEVDVF9Nc2sgICAgICAgT0NSRUZfQ0xFQVJfU0VMRUNUX01TSworI2VuZGlmCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTMzNywzMCArMTU1OCw0MCBAQAogI2RlZmluZSBFVEhfTU1DUkZBRUNSICAgICAgICAgIDB4MDAwMDAxOThVCiAjZGVmaW5lIEVUSF9NTUNSR1VGQ1IgICAgICAgICAgMHgwMDAwMDFDNFUKIAotI2RlZmluZSBFVEhfTUFDX1RYRklGT19GVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwVSAgLyogVHggRklGTyBmdWxsICovCi0jZGVmaW5lIEVUSF9NQUNfVFhGSUZPTk9UX0VNUFRZICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDBVICAvKiBUeCBGSUZPIG5vdCBlbXB0eSAqLwotI2RlZmluZSBFVEhfTUFDX1RYRklGT19XUklURV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwVSAgLyogVHggRklGTyB3cml0ZSBhY3RpdmUgKi8KLSNkZWZpbmUgRVRIX01BQ19UWEZJRk9fSURMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgIC8qIFR4IEZJRk8gcmVhZCBzdGF0dXM6IElkbGUgKi8KLSNkZWZpbmUgRVRIX01BQ19UWEZJRk9fUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMFUgIC8qIFR4IEZJRk8gcmVhZCBzdGF0dXM6IFJlYWQgKHRyYW5zZmVycmluZyBkYXRhIHRvIHRoZSBNQUMgdHJhbnNtaXR0ZXIpICovCi0jZGVmaW5lIEVUSF9NQUNfVFhGSUZPX1dBSVRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDBVICAvKiBUeCBGSUZPIHJlYWQgc3RhdHVzOiBXYWl0aW5nIGZvciBUeFN0YXR1cyBmcm9tIE1BQyB0cmFuc21pdHRlciAqLwotI2RlZmluZSBFVEhfTUFDX1RYRklGT19XUklUSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzAwMDAwVSAgLyogVHggRklGTyByZWFkIHN0YXR1czogV3JpdGluZyB0aGUgcmVjZWl2ZWQgVHhTdGF0dXMgb3IgZmx1c2hpbmcgdGhlIFR4RklGTyAqLwotI2RlZmluZSBFVEhfTUFDX1RSQU5TTUlTU0lPTl9QQVVTRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwVSAgLyogTUFDIHRyYW5zbWl0dGVyIGluIHBhdXNlICovCi0jZGVmaW5lIEVUSF9NQUNfVFJBTlNNSVRGUkFNRUNPTlRST0xMRVJfSURMRSAgICAgICAgICAgIDB4MDAwMDAwMDBVICAvKiBNQUMgdHJhbnNtaXQgZnJhbWUgY29udHJvbGxlcjogSWRsZSAqLwotI2RlZmluZSBFVEhfTUFDX1RSQU5TTUlURlJBTUVDT05UUk9MTEVSX1dBSVRJTkcgICAgICAgICAweDAwMDIwMDAwVSAgLyogTUFDIHRyYW5zbWl0IGZyYW1lIGNvbnRyb2xsZXI6IFdhaXRpbmcgZm9yIFN0YXR1cyBvZiBwcmV2aW91cyBmcmFtZSBvciBJRkcvYmFja29mZiBwZXJpb2QgdG8gYmUgb3ZlciAqLwotI2RlZmluZSBFVEhfTUFDX1RSQU5TTUlURlJBTUVDT05UUk9MTEVSX0dFTlJBVElOR19QQ0YgICAweDAwMDQwMDAwVSAgLyogTUFDIHRyYW5zbWl0IGZyYW1lIGNvbnRyb2xsZXI6IEdlbmVyYXRpbmcgYW5kIHRyYW5zbWl0dGluZyBhIFBhdXNlIGNvbnRyb2wgZnJhbWUgKGluIGZ1bGwgZHVwbGV4IG1vZGUpICovCi0jZGVmaW5lIEVUSF9NQUNfVFJBTlNNSVRGUkFNRUNPTlRST0xMRVJfVFJBTlNGRVJSSU5HICAgIDB4MDAwNjAwMDBVICAvKiBNQUMgdHJhbnNtaXQgZnJhbWUgY29udHJvbGxlcjogVHJhbnNmZXJyaW5nIGlucHV0IGZyYW1lIGZvciB0cmFuc21pc3Npb24gKi8KKyNkZWZpbmUgRVRIX01BQ19UWEZJRk9fRlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDBVICAvKiBUeCBGSUZPIGZ1bGwgKi8KKyNkZWZpbmUgRVRIX01BQ19UWEZJRk9OT1RfRU1QVFkgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDBVICAvKiBUeCBGSUZPIG5vdCBlbXB0eSAqLworI2RlZmluZSBFVEhfTUFDX1RYRklGT19XUklURV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMFUgIC8qIFR4IEZJRk8gd3JpdGUgYWN0aXZlICovCisjZGVmaW5lIEVUSF9NQUNfVFhGSUZPX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgLyogVHggRklGTyByZWFkIHN0YXR1czogSWRsZSAqLworI2RlZmluZSBFVEhfTUFDX1RYRklGT19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMFUgIC8qIFR4IEZJRk8gcmVhZCBzdGF0dXM6IFJlYWQgKHRyYW5zZmVycmluZyBkYXRhIHRvIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBNQUMgdHJhbnNtaXR0ZXIpICovCisjZGVmaW5lIEVUSF9NQUNfVFhGSUZPX1dBSVRJTkcgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwVSAgLyogVHggRklGTyByZWFkIHN0YXR1czogV2FpdGluZyBmb3IgVHhTdGF0dXMgZnJvbSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQUMgdHJhbnNtaXR0ZXIgKi8KKyNkZWZpbmUgRVRIX01BQ19UWEZJRk9fV1JJVElORyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzMDAwMDBVICAvKiBUeCBGSUZPIHJlYWQgc3RhdHVzOiBXcml0aW5nIHRoZSByZWNlaXZlZCBUeFN0YXR1cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGZsdXNoaW5nIHRoZSBUeEZJRk8gKi8KKyNkZWZpbmUgRVRIX01BQ19UUkFOU01JU1NJT05fUEFVU0UgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDBVICAvKiBNQUMgdHJhbnNtaXR0ZXIgaW4gcGF1c2UgKi8KKyNkZWZpbmUgRVRIX01BQ19UUkFOU01JVEZSQU1FQ09OVFJPTExFUl9JRExFICAgICAgICAgIDB4MDAwMDAwMDBVICAvKiBNQUMgdHJhbnNtaXQgZnJhbWUgY29udHJvbGxlcjogSWRsZSAqLworI2RlZmluZSBFVEhfTUFDX1RSQU5TTUlURlJBTUVDT05UUk9MTEVSX1dBSVRJTkcgICAgICAgMHgwMDAyMDAwMFUgIC8qIE1BQyB0cmFuc21pdCBmcmFtZSBjb250cm9sbGVyOiBXYWl0aW5nIGZvciBTdGF0dXMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgcHJldmlvdXMgZnJhbWUgb3IgSUZHL2JhY2tvZmYgcGVyaW9kIHRvIGJlIG92ZXIgKi8KKyNkZWZpbmUgRVRIX01BQ19UUkFOU01JVEZSQU1FQ09OVFJPTExFUl9HRU5SQVRJTkdfUENGIDB4MDAwNDAwMDBVICAvKiBNQUMgdHJhbnNtaXQgZnJhbWUgY29udHJvbGxlcjogR2VuZXJhdGluZyBhbmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXR0aW5nIGEgUGF1c2UgY29udHJvbCBmcmFtZSAoaW4gZnVsbCBkdXBsZXggbW9kZSkgKi8KKyNkZWZpbmUgRVRIX01BQ19UUkFOU01JVEZSQU1FQ09OVFJPTExFUl9UUkFOU0ZFUlJJTkcgIDB4MDAwNjAwMDBVICAvKiBNQUMgdHJhbnNtaXQgZnJhbWUgY29udHJvbGxlcjogVHJhbnNmZXJyaW5nIGlucHV0IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lIGZvciB0cmFuc21pc3Npb24gKi8KICNkZWZpbmUgRVRIX01BQ19NSUlfVFJBTlNNSVRfQUNUSVZFICAgICAgICAgICAweDAwMDEwMDAwVSAgLyogTUFDIE1JSSB0cmFuc21pdCBlbmdpbmUgYWN0aXZlICovCiAjZGVmaW5lIEVUSF9NQUNfUlhGSUZPX0VNUFRZICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgIC8qIFJ4IEZJRk8gZmlsbCBsZXZlbDogZW1wdHkgKi8KLSNkZWZpbmUgRVRIX01BQ19SWEZJRk9fQkVMT1dfVEhSRVNIT0xEICAgICAgICAweDAwMDAwMTAwVSAgLyogUnggRklGTyBmaWxsIGxldmVsOiBmaWxsLWxldmVsIGJlbG93IGZsb3ctY29udHJvbCBkZS1hY3RpdmF0ZSB0aHJlc2hvbGQgKi8KLSNkZWZpbmUgRVRIX01BQ19SWEZJRk9fQUJPVkVfVEhSRVNIT0xEICAgICAgICAweDAwMDAwMjAwVSAgLyogUnggRklGTyBmaWxsIGxldmVsOiBmaWxsLWxldmVsIGFib3ZlIGZsb3ctY29udHJvbCBhY3RpdmF0ZSB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgRVRIX01BQ19SWEZJRk9fQkVMT1dfVEhSRVNIT0xEICAgICAgICAweDAwMDAwMTAwVSAgLyogUnggRklGTyBmaWxsIGxldmVsOiBmaWxsLWxldmVsIGJlbG93IGZsb3ctY29udHJvbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGUtYWN0aXZhdGUgdGhyZXNob2xkICovCisjZGVmaW5lIEVUSF9NQUNfUlhGSUZPX0FCT1ZFX1RIUkVTSE9MRCAgICAgICAgMHgwMDAwMDIwMFUgIC8qIFJ4IEZJRk8gZmlsbCBsZXZlbDogZmlsbC1sZXZlbCBhYm92ZSBmbG93LWNvbnRyb2wgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlIHRocmVzaG9sZCAqLwogI2RlZmluZSBFVEhfTUFDX1JYRklGT19GVUxMICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDBVICAvKiBSeCBGSUZPIGZpbGwgbGV2ZWw6IGZ1bGwgKi8KICNpZiBkZWZpbmVkKFNUTTMyRjEpCiAjZWxzZQogI2RlZmluZSBFVEhfTUFDX1JFQURDT05UUk9MTEVSX0lETEUgICAgICAgICAgIDB4MDAwMDAwMDBVICAvKiBSeCBGSUZPIHJlYWQgY29udHJvbGxlciBJRExFIHN0YXRlICovCiAjZGVmaW5lIEVUSF9NQUNfUkVBRENPTlRST0xMRVJfUkVBRElOR19EQVRBICAgMHgwMDAwMDAyMFUgIC8qIFJ4IEZJRk8gcmVhZCBjb250cm9sbGVyIFJlYWRpbmcgZnJhbWUgZGF0YSAqLwotI2RlZmluZSBFVEhfTUFDX1JFQURDT05UUk9MTEVSX1JFQURJTkdfU1RBVFVTIDB4MDAwMDAwNDBVICAvKiBSeCBGSUZPIHJlYWQgY29udHJvbGxlciBSZWFkaW5nIGZyYW1lIHN0YXR1cyAob3IgdGltZS1zdGFtcCkgKi8KKyNkZWZpbmUgRVRIX01BQ19SRUFEQ09OVFJPTExFUl9SRUFESU5HX1NUQVRVUyAweDAwMDAwMDQwVSAgLyogUnggRklGTyByZWFkIGNvbnRyb2xsZXIgUmVhZGluZyBmcmFtZSBzdGF0dXMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRpbWUtc3RhbXApICovCiAjZW5kaWYKLSNkZWZpbmUgRVRIX01BQ19SRUFEQ09OVFJPTExFUl9GTFVTSElORyAgICAgICAweDAwMDAwMDYwVSAgLyogUnggRklGTyByZWFkIGNvbnRyb2xsZXIgRmx1c2hpbmcgdGhlIGZyYW1lIGRhdGEgYW5kIHN0YXR1cyAqLworI2RlZmluZSBFVEhfTUFDX1JFQURDT05UUk9MTEVSX0ZMVVNISU5HICAgICAgIDB4MDAwMDAwNjBVICAvKiBSeCBGSUZPIHJlYWQgY29udHJvbGxlciBGbHVzaGluZyB0aGUgZnJhbWUgZGF0YSBhbmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyAqLwogI2RlZmluZSBFVEhfTUFDX1JYRklGT19XUklURV9BQ1RJVkUgICAgICAgICAgIDB4MDAwMDAwMTBVICAvKiBSeCBGSUZPIHdyaXRlIGNvbnRyb2xsZXIgYWN0aXZlICovCiAjZGVmaW5lIEVUSF9NQUNfU01BTExfRklGT19OT1RBQ1RJVkUgICAgICAgICAgMHgwMDAwMDAwMFUgIC8qIE1BQyBzbWFsbCBGSUZPIHJlYWQgLyB3cml0ZSBjb250cm9sbGVycyBub3QgYWN0aXZlICovCiAjZGVmaW5lIEVUSF9NQUNfU01BTExfRklGT19SRUFEX0FDVElWRSAgICAgICAgMHgwMDAwMDAwMlUgIC8qIE1BQyBzbWFsbCBGSUZPIHJlYWQgY29udHJvbGxlciBhY3RpdmUgKi8KQEAgLTE0MTYsNiArMTY0NywyMCBAQAogICAqLwogI2VuZGlmICAvKiBTVE0zMkw0IHx8ICBTVE0zMkY3IHx8ICBTVE0zMkY0IHx8ICBTVE0zMkg3ICovCiAKKyNpZiBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkY0Mjd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzd4eCkgXAorICB8fCBkZWZpbmVkKFNUTTMyRjQyOXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQzOXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQ2OXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQ3OXh4KSBcCisgIHx8IGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMlU1KQorLyoqIEBkZWZncm91cCBETUEyRF9BbGlhc2VzIERNQTJEIEFQSSBBbGlhc2VzCisgICogQHsKKyAgKi8KKyNkZWZpbmUgSEFMX0RNQTJEX0Rpc2FibGVDTFVUICAgICAgIEhBTF9ETUEyRF9DTFVUTG9hZGluZ19BYm9ydCAgICAvKiE8IEFsaWFzZWQgdG8gSEFMX0RNQTJEX0NMVVRMb2FkaW5nX0Fib3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGxlZ2FjeSBjb2RlICovCisvKioKKyAgKiBAfQorICAqLworCisjZW5kaWYgIC8qIFNUTTMyTDQgfHwgIFNUTTMyRjcgfHwgIFNUTTMyRjQgfHwgIFNUTTMySDcgfHwgU1RNMzJVNSAqLworCiAvKiogQGRlZmdyb3VwIEhBTF9QUFBfQWxpYXNlZF9EZWZpbmVzIEhBTCBQUFAgQWxpYXNlZCBEZWZpbmVzIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCiAgICogQHsKICAgKi8KQEAgLTE0MzQsNiArMTY3OSwyOSBAQAogICAqIEB9CiAgICovCiAKKy8qKiBAZGVmZ3JvdXAgSEFMX0RDQUNIRV9BbGlhc2VkX0Z1bmN0aW9ucyBIQUwgRENBQ0hFIEFsaWFzZWQgRnVuY3Rpb25zIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCisgICogQHsKKyAgKi8KKworI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgSEFMX0RDQUNIRV9DbGVhbkludmFsaWRhdGVCeUFkZHIgICAgIEhBTF9EQ0FDSEVfQ2xlYW5JbnZhbGlkQnlBZGRyCisjZGVmaW5lIEhBTF9EQ0FDSEVfQ2xlYW5JbnZhbGlkYXRlQnlBZGRyX0lUICBIQUxfRENBQ0hFX0NsZWFuSW52YWxpZEJ5QWRkcl9JVAorI2VuZGlmIC8qIFNUTTMyVTUgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworI2lmICFkZWZpbmVkKFNUTTMyRjIpCisvKiogQGRlZmdyb3VwIEhBU0hfYWxpYXMgSEFTSCBBUEkgYWxpYXMKKyAgKiBAeworICAqLworI2RlZmluZSBIQUxfSEFTSEV4X0lSUUhhbmRsZXIgICBIQUxfSEFTSF9JUlFIYW5kbGVyICAvKiE8IFJlZGlyZWN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5IGNvZGUgKi8KKy8qKgorICAqCisgICogQH0KKyAgKi8KKyNlbmRpZiAvKiBTVE0zMkYyICovCiAvKiogQGRlZmdyb3VwIEhBTF9IQVNIX0FsaWFzZWRfRnVuY3Rpb25zIEhBTCBIQVNIIEFsaWFzZWQgRnVuY3Rpb25zIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCiAgICogQHsKICAgKi8KQEAgLTE0OTMsNyArMTc2MSw5IEBACiAjZGVmaW5lIEhBTF9EaXNhYmxlREJHU3RvcE1vZGUgSEFMX0RCR01DVV9EaXNhYmxlREJHU3RvcE1vZGUKICNkZWZpbmUgSEFMX0VuYWJsZURCR1N0YW5kYnlNb2RlIEhBTF9EQkdNQ1VfRW5hYmxlREJHU3RhbmRieU1vZGUKICNkZWZpbmUgSEFMX0Rpc2FibGVEQkdTdGFuZGJ5TW9kZSBIQUxfREJHTUNVX0Rpc2FibGVEQkdTdGFuZGJ5TW9kZQotI2RlZmluZSBIQUxfREJHX0xvd1Bvd2VyQ29uZmlnKFBlcmlwaCwgY21kKSAoKChjbWQpPT1FTkFCTEUpPyBIQUxfREJHTUNVX0RCR19FbmFibGVMb3dQb3dlckNvbmZpZyhQZXJpcGgpIDogSEFMX0RCR01DVV9EQkdfRGlzYWJsZUxvd1Bvd2VyQ29uZmlnKFBlcmlwaCkpCisjZGVmaW5lIEhBTF9EQkdfTG93UG93ZXJDb25maWcoUGVyaXBoLCBjbWQpICgoKGNtZFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPT1FTkFCTEUpPyBIQUxfREJHTUNVX0RCR19FbmFibGVMb3dQb3dlckNvbmZpZyhQZXJpcGgpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX0RCR01DVV9EQkdfRGlzYWJsZUxvd1Bvd2VyQ29uZmlnKFBlcmlwaCkpCiAjZGVmaW5lIEhBTF9WUkVGSU5UX091dHB1dFNlbGVjdCAgSEFMX1NZU0NGR19WUkVGSU5UX091dHB1dFNlbGVjdAogI2RlZmluZSBIQUxfTG9ja19DbWQoY21kKSAoKChjbWQpPT1FTkFCTEUpID8gSEFMX1NZU0NGR19FbmFibGVfTG9ja19WUkVGSU5UKCkgOiBIQUxfU1lTQ0ZHX0Rpc2FibGVfTG9ja19WUkVGSU5UKCkpCiAjaWYgZGVmaW5lZChTVE0zMkwwKQpAQCAtMTUwMSw4ICsxNzcxLDExIEBACiAjZGVmaW5lIEhBTF9WUkVGSU5UX0NtZChjbWQpICgoKGNtZCk9PUVOQUJMRSk/IEhBTF9TWVNDRkdfRW5hYmxlVlJFRklOVCgpIDogSEFMX1NZU0NGR19EaXNhYmxlVlJFRklOVCgpKQogI2VuZGlmCiAjZGVmaW5lIEhBTF9BRENfRW5hYmxlQnVmZmVyX0NtZChjbWQpICAoKChjbWQpPT1FTkFCTEUpID8gSEFMX0FEQ0V4X0VuYWJsZVZSRUZJTlQoKSA6IEhBTF9BRENFeF9EaXNhYmxlVlJFRklOVCgpKQotI2RlZmluZSBIQUxfQURDX0VuYWJsZUJ1ZmZlclNlbnNvcl9DbWQoY21kKSAoKChjbWQpPT1FTkFCTEUpID8gIEhBTF9BRENFeF9FbmFibGVWUkVGSU5UVGVtcFNlbnNvcigpIDogSEFMX0FEQ0V4X0Rpc2FibGVWUkVGSU5UVGVtcFNlbnNvcigpKQotI2lmIGRlZmluZWQoU1RNMzJIN0EzeHgpIHx8IGRlZmluZWQoU1RNMzJIN0IzeHgpIHx8IGRlZmluZWQoU1RNMzJIN0IweHgpIHx8IGRlZmluZWQoU1RNMzJIN0EzeHhRKSB8fCBkZWZpbmVkKFNUTTMySDdCM3h4USkgfHwgZGVmaW5lZChTVE0zMkg3QjB4eFEpCisjZGVmaW5lIEhBTF9BRENfRW5hYmxlQnVmZmVyU2Vuc29yX0NtZChjbWQpICgoKGNtZFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPT1FTkFCTEUpID8gIEhBTF9BRENFeF9FbmFibGVWUkVGSU5UVGVtcFNlbnNvcigpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX0FEQ0V4X0Rpc2FibGVWUkVGSU5UVGVtcFNlbnNvcigpKQorI2lmIGRlZmluZWQoU1RNMzJIN0EzeHgpIHx8IGRlZmluZWQoU1RNMzJIN0IzeHgpIHx8IGRlZmluZWQoU1RNMzJIN0IweHgpIHx8IGRlZmluZWQoU1RNMzJIN0EzeHhRKSB8fCBcCisgICAgZGVmaW5lZChTVE0zMkg3QjN4eFEpIHx8IGRlZmluZWQoU1RNMzJIN0IweHhRKQogI2RlZmluZSBIQUxfRW5hYmxlU1JEb21haW5EQkdTdG9wTW9kZSAgICAgIEhBTF9FbmFibGVEb21haW4zREJHU3RvcE1vZGUKICNkZWZpbmUgSEFMX0Rpc2FibGVTUkRvbWFpbkRCR1N0b3BNb2RlICAgICBIQUxfRGlzYWJsZURvbWFpbjNEQkdTdG9wTW9kZQogI2RlZmluZSBIQUxfRW5hYmxlU1JEb21haW5EQkdTdGFuZGJ5TW9kZSAgIEhBTF9FbmFibGVEb21haW4zREJHU3RhbmRieU1vZGUKQEAgLTE1MjQsOSArMTc5Nyw5IEBACiAjZGVmaW5lIEhBTF9EQVRBX0VFUFJPTUV4X0VyYXNlICAgIEhBTF9GTEFTSEV4X0RBVEFFRVBST01fRXJhc2UKICNkZWZpbmUgSEFMX0RBVEFfRUVQUk9NRXhfUHJvZ3JhbSAgSEFMX0ZMQVNIRXhfREFUQUVFUFJPTV9Qcm9ncmFtCiAKLSAvKioKKy8qKgogICAqIEB9Ci0gICovCisgKi8KIAogLyoqIEBkZWZncm91cCBIQUxfSTJDX0FsaWFzZWRfRnVuY3Rpb25zIEhBTCBJMkMgQWxpYXNlZCBGdW5jdGlvbnMgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKICAgKiBAewpAQCAtMTUzNiwxNSArMTgwOSwyMSBAQAogI2RlZmluZSBIQUxfRk1QSTJDRXhfQW5hbG9nRmlsdGVyX0NvbmZpZyAgICAgIEhBTF9GTVBJMkNFeF9Db25maWdBbmFsb2dGaWx0ZXIKICNkZWZpbmUgSEFMX0ZNUEkyQ0V4X0RpZ2l0YWxGaWx0ZXJfQ29uZmlnICAgICBIQUxfRk1QSTJDRXhfQ29uZmlnRGlnaXRhbEZpbHRlcgogCi0jZGVmaW5lIEhBTF9JMkNGYXN0TW9kZVBsdXNDb25maWcoU1lTQ0ZHX0kyQ0Zhc3RNb2RlUGx1cywgY21kKSAoKChjbWQpPT1FTkFCTEUpPyBIQUxfSTJDRXhfRW5hYmxlRmFzdE1vZGVQbHVzKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMpOiBIQUxfSTJDRXhfRGlzYWJsZUZhc3RNb2RlUGx1cyhTWVNDRkdfSTJDRmFzdE1vZGVQbHVzKSkKKyNkZWZpbmUgSEFMX0kyQ0Zhc3RNb2RlUGx1c0NvbmZpZyhTWVNDRkdfSTJDRmFzdE1vZGVQbHVzLCBjbWQpICgoY21kID09IEVOQUJMRSk/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfSTJDRXhfRW5hYmxlRmFzdE1vZGVQbHVzKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMpOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX0kyQ0V4X0Rpc2FibGVGYXN0TW9kZVBsdXMoU1lTQ0ZHX0kyQ0Zhc3RNb2RlUGx1cykpCiAKLSNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMSkgfHwgZGVmaW5lZChTVE0zMkYyKSB8fCBkZWZpbmVkKFNUTTMyRjMpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMyRzQpIHx8IGRlZmluZWQoU1RNMzJMMSkKKyNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMSkgfHwgXAorICAgIGRlZmluZWQoU1RNMzJGMikgfHwgZGVmaW5lZChTVE0zMkYzKSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkwwKSB8fCBcCisgICAgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkwxKQogI2RlZmluZSBIQUxfSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1RyYW5zbWl0X0lUICBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfSVQKICNkZWZpbmUgSEFMX0kyQ19NYXN0ZXJfU2VxdWVudGlhbF9SZWNlaXZlX0lUICAgSEFMX0kyQ19NYXN0ZXJfU2VxX1JlY2VpdmVfSVQKICNkZWZpbmUgSEFMX0kyQ19TbGF2ZV9TZXF1ZW50aWFsX1RyYW5zbWl0X0lUICAgSEFMX0kyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfSVQKICNkZWZpbmUgSEFMX0kyQ19TbGF2ZV9TZXF1ZW50aWFsX1JlY2VpdmVfSVQgICAgSEFMX0kyQ19TbGF2ZV9TZXFfUmVjZWl2ZV9JVAotI2VuZGlmIC8qIFNUTTMySDcgfHwgU1RNMzJXQiAgfHwgU1RNMzJHMCB8fCBTVE0zMkYwIHx8IFNUTTMyRjEgfHwgU1RNMzJGMiB8fCBTVE0zMkYzIHx8IFNUTTMyRjQgfHwgU1RNMzJGNyB8fCBTVE0zMkwwIHx8IFNUTTMyTDQgfHwgU1RNMzJMNSB8fCBTVE0zMkc0IHx8IFNUTTMyTDEgKi8KLSNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkwwKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkc0KXx8IGRlZmluZWQoU1RNMzJMMSkKKyNlbmRpZiAvKiBTVE0zMkg3IHx8IFNUTTMyV0IgIHx8IFNUTTMyRzAgfHwgU1RNMzJGMCB8fCBTVE0zMkYxIHx8IFNUTTMyRjIgfHwgU1RNMzJGMyB8fCBTVE0zMkY0IHx8IFNUTTMyRjcgfHwgU1RNMzJMMCB8fAorICAgICAgICAgIFNUTTMyTDQgfHwgU1RNMzJMNSB8fCBTVE0zMkc0IHx8IFNUTTMyTDEgKi8KKyNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgXAorICAgIGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJHNCl8fCBkZWZpbmVkKFNUTTMyTDEpCiAjZGVmaW5lIEhBTF9JMkNfTWFzdGVyX1NlcXVlbnRpYWxfVHJhbnNtaXRfRE1BIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9ETUEKICNkZWZpbmUgSEFMX0kyQ19NYXN0ZXJfU2VxdWVudGlhbF9SZWNlaXZlX0RNQSAgSEFMX0kyQ19NYXN0ZXJfU2VxX1JlY2VpdmVfRE1BCiAjZGVmaW5lIEhBTF9JMkNfU2xhdmVfU2VxdWVudGlhbF9UcmFuc21pdF9ETUEgIEhBTF9JMkNfU2xhdmVfU2VxX1RyYW5zbWl0X0RNQQpAQCAtMTU2MSw5ICsxODQwLDkgQEAKICNkZWZpbmUgSEFMX0ZNUEkyQ19TbGF2ZV9TZXF1ZW50aWFsX1RyYW5zbWl0X0RNQSAgSEFMX0ZNUEkyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfRE1BCiAjZGVmaW5lIEhBTF9GTVBJMkNfU2xhdmVfU2VxdWVudGlhbF9SZWNlaXZlX0RNQSAgIEhBTF9GTVBJMkNfU2xhdmVfU2VxX1JlY2VpdmVfRE1BCiAjZW5kaWYgLyogU1RNMzJGNCAqLwotIC8qKgorLyoqCiAgICogQH0KLSAgKi8KKyAqLwogCiAvKiogQGRlZmdyb3VwIEhBTF9QV1JfQWxpYXNlZCBIQUwgUFdSIEFsaWFzZWQgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKICAgKiBAewpAQCAtMTYxOCw3ICsxODk3LDEwOCBAQAogCiAjZGVmaW5lIFBXUl9NT0RFX0VWVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQV1JfUFZEX01PREVfTk9STUFMCiAKLSAvKioKKyNpZiBkZWZpbmVkIChTVE0zMlU1KQorI2RlZmluZSBQV1JfU1JBTTFfUEFHRTFfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0xX1BBR0UxX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0xX1BBR0UyX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNMV9QQUdFMl9TVE9QCisjZGVmaW5lIFBXUl9TUkFNMV9QQUdFM19TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTFfUEFHRTNfU1RPUAorI2RlZmluZSBQV1JfU1JBTTFfUEFHRTRfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0xX1BBR0U0X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0xX1BBR0U1X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNMV9QQUdFNV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNMV9QQUdFNl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTFfUEFHRTZfU1RPUAorI2RlZmluZSBQV1JfU1JBTTFfUEFHRTdfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0xX1BBR0U3X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0xX1BBR0U4X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNMV9QQUdFOF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNMV9QQUdFOV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTFfUEFHRTlfU1RPUAorI2RlZmluZSBQV1JfU1JBTTFfUEFHRTEwX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX1NSQU0xX1BBR0UxMF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNMV9QQUdFMTFfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfU1JBTTFfUEFHRTExX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0xX1BBR0UxMl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9TUkFNMV9QQUdFMTJfU1RPUAorI2RlZmluZSBQV1JfU1JBTTFfRlVMTF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICAgUFdSX1NSQU0xX0ZVTExfU1RPUAorCisjZGVmaW5lIFBXUl9TUkFNMl9QQUdFMV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTJfUEFHRTFfU1RPUAorI2RlZmluZSBQV1JfU1JBTTJfUEFHRTJfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0yX1BBR0UyX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0yX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgIFBXUl9TUkFNMl9GVUxMX1NUT1AKKworI2RlZmluZSBQV1JfU1JBTTNfUEFHRTFfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0UxX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0UyX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFMl9TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19QQUdFM19TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTNfUEFHRTNfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfUEFHRTRfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0U0X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0U1X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFNV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19QQUdFNl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTNfUEFHRTZfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfUEFHRTdfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0U3X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0U4X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFOF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19QQUdFOV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTNfUEFHRTlfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfUEFHRTEwX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0UxMF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19QQUdFMTFfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfU1JBTTNfUEFHRTExX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0UxMl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFMTJfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfUEFHRTEzX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0UxM19TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgICBQV1JfU1JBTTNfRlVMTF9TVE9QCisKKyNkZWZpbmUgUFdSX1NSQU00X0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgIFBXUl9TUkFNNF9GVUxMX1NUT1AKKworI2RlZmluZSBQV1JfU1JBTTVfUEFHRTFfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0UxX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0UyX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFMl9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9QQUdFM19TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTVfUEFHRTNfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfUEFHRTRfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0U0X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0U1X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFNV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9QQUdFNl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTVfUEFHRTZfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfUEFHRTdfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0U3X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0U4X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFOF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9QQUdFOV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTVfUEFHRTlfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfUEFHRTEwX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0UxMF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9QQUdFMTFfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfU1JBTTVfUEFHRTExX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0UxMl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFMTJfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfUEFHRTEzX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0UxM19TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgICBQV1JfU1JBTTVfRlVMTF9TVE9QCisKKyNkZWZpbmUgUFdSX1NSQU02X1BBR0UxX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNl9QQUdFMV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNl9QQUdFMl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTZfUEFHRTJfU1RPUAorI2RlZmluZSBQV1JfU1JBTTZfUEFHRTNfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU02X1BBR0UzX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU02X1BBR0U0X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNl9QQUdFNF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNl9QQUdFNV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTZfUEFHRTVfU1RPUAorI2RlZmluZSBQV1JfU1JBTTZfUEFHRTZfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU02X1BBR0U2X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU02X1BBR0U3X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNl9QQUdFN19TVE9QCisjZGVmaW5lIFBXUl9TUkFNNl9QQUdFOF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTZfUEFHRThfU1RPUAorI2RlZmluZSBQV1JfU1JBTTZfRlVMTF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICAgUFdSX1NSQU02X0ZVTExfU1RPUAorCisKKyNkZWZpbmUgUFdSX0lDQUNIRV9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9JQ0FDSEVfRlVMTF9TVE9QCisjZGVmaW5lIFBXUl9EQ0FDSEUxX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfRENBQ0hFMV9GVUxMX1NUT1AKKyNkZWZpbmUgUFdSX0RDQUNIRTJfRlVMTF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9EQ0FDSEUyX0ZVTExfU1RPUAorI2RlZmluZSBQV1JfRE1BMkRSQU1fRlVMTF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgUFdSX0RNQTJEUkFNX0ZVTExfU1RPUAorI2RlZmluZSBQV1JfUEVSSVBIUkFNX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgUFdSX1BFUklQSFJBTV9GVUxMX1NUT1AKKyNkZWZpbmUgUFdSX1BLQTMyUkFNX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgIFBXUl9QS0EzMlJBTV9GVUxMX1NUT1AKKyNkZWZpbmUgUFdSX0dSQVBISUNQUkFNX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgIFBXUl9HUkFQSElDUFJBTV9GVUxMX1NUT1AKKyNkZWZpbmUgUFdSX0RTSVJBTV9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9EU0lSQU1fRlVMTF9TVE9QCisjZGVmaW5lIFBXUl9KUEVHUkFNX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfSlBFR1JBTV9GVUxMX1NUT1AKKworCisjZGVmaW5lIFBXUl9TUkFNMl9QQUdFMV9TVEFOREJZX1JFVEVOVElPTiAgICAgICAgICAgICBQV1JfU1JBTTJfUEFHRTFfU1RBTkRCWQorI2RlZmluZSBQV1JfU1JBTTJfUEFHRTJfU1RBTkRCWV9SRVRFTlRJT04gICAgICAgICAgICAgUFdSX1NSQU0yX1BBR0UyX1NUQU5EQlkKKyNkZWZpbmUgUFdSX1NSQU0yX0ZVTExfU1RBTkRCWV9SRVRFTlRJT04gICAgICAgICAgICAgIFBXUl9TUkFNMl9GVUxMX1NUQU5EQlkKKworI2RlZmluZSBQV1JfU1JBTTFfRlVMTF9SVU5fUkVURU5USU9OICAgICAgICAgICAgICAgICAgUFdSX1NSQU0xX0ZVTExfUlVOCisjZGVmaW5lIFBXUl9TUkFNMl9GVUxMX1JVTl9SRVRFTlRJT04gICAgICAgICAgICAgICAgICBQV1JfU1JBTTJfRlVMTF9SVU4KKyNkZWZpbmUgUFdSX1NSQU0zX0ZVTExfUlVOX1JFVEVOVElPTiAgICAgICAgICAgICAgICAgIFBXUl9TUkFNM19GVUxMX1JVTgorI2RlZmluZSBQV1JfU1JBTTRfRlVMTF9SVU5fUkVURU5USU9OICAgICAgICAgICAgICAgICAgUFdSX1NSQU00X0ZVTExfUlVOCisjZGVmaW5lIFBXUl9TUkFNNV9GVUxMX1JVTl9SRVRFTlRJT04gICAgICAgICAgICAgICAgICBQV1JfU1JBTTVfRlVMTF9SVU4KKyNkZWZpbmUgUFdSX1NSQU02X0ZVTExfUlVOX1JFVEVOVElPTiAgICAgICAgICAgICAgICAgIFBXUl9TUkFNNl9GVUxMX1JVTgorCisjZGVmaW5lIFBXUl9BTExfUkFNX1JVTl9SRVRFTlRJT05fTUFTSyAgICAgICAgICAgICAgICBQV1JfQUxMX1JBTV9SVU5fTUFTSworI2VuZGlmCisKKy8qKgorICAqIEB9CisgKi8KKworLyoqIEBkZWZncm91cCBIQUxfUlRDX0FsaWFzZWRfRnVuY3Rpb25zIEhBTCBSVEMgQWxpYXNlZCBGdW5jdGlvbnMgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKKyAgKiBAeworICAqLworI2lmIGRlZmluZWQoU1RNMzJINSkgfHwgZGVmaW5lZChTVE0zMldCQSkKKyNkZWZpbmUgSEFMX1JUQ0V4X1NldEJvb3RoYXJkd2FyZUtleSAgICAgICAgICAgIEhBTF9SVENFeF9Mb2NrQm9vdEhhcmR3YXJlS2V5CisjZGVmaW5lIEhBTF9SVENFeF9CS1VQQmxvY2tfRW5hYmxlICAgICAgICAgICAgICBIQUxfUlRDRXhfQktVUEJsb2NrCisjZGVmaW5lIEhBTF9SVENFeF9CS1VQQmxvY2tfRGlzYWJsZSAgICAgICAgICAgICBIQUxfUlRDRXhfQktVUFVuYmxvY2sKKyNkZWZpbmUgSEFMX1JUQ0V4X0VyYXNlX1NlY3JldERldl9Db25mICAgICAgICAgIEhBTF9SVENFeF9Db25maWdFcmFzZURldmljZVNlY3JldHMKKyNlbmRpZiAvKiBTVE0zMkg1IHx8IFNUTTMyV0JBICovCisKKy8qKgogICAqIEB9CiAgICovCiAKQEAgLTE2NDcsNyArMjAyNyw4IEBACiAjZGVmaW5lIEhBTF9USU1fRE1BRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJTV9ETUFFcnJvcgogI2RlZmluZSBIQUxfVElNX0RNQUNhcHR1cmVDcGx0ICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1fRE1BQ2FwdHVyZUNwbHQKICNkZWZpbmUgSEFMX1RJTUV4X0RNQUNvbW11dGF0aW9uQ3BsdCAgICAgICAgICAgICAgICAgICAgVElNRXhfRE1BQ29tbXV0YXRpb25DcGx0Ci0jaWYgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJGMCkgfHwgZGVmaW5lZChTVE0zMkYxKSB8fCBkZWZpbmVkKFNUTTMyRjIpIHx8IGRlZmluZWQoU1RNMzJGMykgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KQorI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMSkgfHwgZGVmaW5lZChTVE0zMkYyKSB8fCBcCisgICAgZGVmaW5lZChTVE0zMkYzKSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkwwKSB8fCBkZWZpbmVkKFNUTTMyTDQpCiAjZGVmaW5lIEhBTF9USU1fU2xhdmVDb25maWdTeW5jaHJvbml6YXRpb24gICAgICAgICAgICAgIEhBTF9USU1fU2xhdmVDb25maWdTeW5jaHJvCiAjZGVmaW5lIEhBTF9USU1fU2xhdmVDb25maWdTeW5jaHJvbml6YXRpb25fSVQgICAgICAgICAgIEhBTF9USU1fU2xhdmVDb25maWdTeW5jaHJvX0lUCiAjZGVmaW5lIEhBTF9USU1FeF9Db21tdXRhdGlvbkNhbGxiYWNrICAgICAgICAgICAgICAgICAgIEhBTF9USU1FeF9Db21tdXRDYWxsYmFjawpAQCAtMTg2OSwxNSArMjI1MCwxNSBAQAogI2RlZmluZSBfX0hBTF9GUkVFWkVfUlRDX0RCR01DVSBfX0hBTF9EQkdNQ1VfRlJFRVpFX1JUQwogI2RlZmluZSBfX0hBTF9VTkZSRUVaRV9SVENfREJHTUNVIF9fSEFMX0RCR01DVV9VTkZSRUVaRV9SVEMKICNpZiBkZWZpbmVkKFNUTTMySDcpCi0gICNkZWZpbmUgX19IQUxfRlJFRVpFX1dXREdfREJHTUNVIF9fSEFMX0RCR01DVV9GUkVFWkVfV1dERzEKLSAgI2RlZmluZSBfX0hBTF9VTkZSRUVaRV9XV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfVW5GcmVlemVfV1dERzEKLSAgI2RlZmluZSBfX0hBTF9GUkVFWkVfSVdER19EQkdNQ1UgX19IQUxfREJHTUNVX0ZSRUVaRV9JV0RHMQotICAjZGVmaW5lIF9fSEFMX1VORlJFRVpFX0lXREdfREJHTUNVIF9fSEFMX0RCR01DVV9VbkZyZWV6ZV9JV0RHMQorI2RlZmluZSBfX0hBTF9GUkVFWkVfV1dER19EQkdNQ1UgX19IQUxfREJHTUNVX0ZSRUVaRV9XV0RHMQorI2RlZmluZSBfX0hBTF9VTkZSRUVaRV9XV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfVW5GcmVlemVfV1dERzEKKyNkZWZpbmUgX19IQUxfRlJFRVpFX0lXREdfREJHTUNVIF9fSEFMX0RCR01DVV9GUkVFWkVfSVdERzEKKyNkZWZpbmUgX19IQUxfVU5GUkVFWkVfSVdER19EQkdNQ1UgX19IQUxfREJHTUNVX1VuRnJlZXplX0lXREcxCiAjZWxzZQotICAjZGVmaW5lIF9fSEFMX0ZSRUVaRV9XV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfRlJFRVpFX1dXREcKLSAgI2RlZmluZSBfX0hBTF9VTkZSRUVaRV9XV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfVU5GUkVFWkVfV1dERwotICAjZGVmaW5lIF9fSEFMX0ZSRUVaRV9JV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfRlJFRVpFX0lXREcKLSAgI2RlZmluZSBfX0hBTF9VTkZSRUVaRV9JV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfVU5GUkVFWkVfSVdERworI2RlZmluZSBfX0hBTF9GUkVFWkVfV1dER19EQkdNQ1UgX19IQUxfREJHTUNVX0ZSRUVaRV9XV0RHCisjZGVmaW5lIF9fSEFMX1VORlJFRVpFX1dXREdfREJHTUNVIF9fSEFMX0RCR01DVV9VTkZSRUVaRV9XV0RHCisjZGVmaW5lIF9fSEFMX0ZSRUVaRV9JV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfRlJFRVpFX0lXREcKKyNkZWZpbmUgX19IQUxfVU5GUkVFWkVfSVdER19EQkdNQ1UgX19IQUxfREJHTUNVX1VORlJFRVpFX0lXREcKICNlbmRpZiAvKiBTVE0zMkg3ICovCiAjZGVmaW5lIF9fSEFMX0ZSRUVaRV9JMkMxX1RJTUVPVVRfREJHTUNVIF9fSEFMX0RCR01DVV9GUkVFWkVfSTJDMV9USU1FT1VUCiAjZGVmaW5lIF9fSEFMX1VORlJFRVpFX0kyQzFfVElNRU9VVF9EQkdNQ1UgX19IQUxfREJHTUNVX1VORlJFRVpFX0kyQzFfVElNRU9VVApAQCAtMTkwNCw3ICsyMjg1LDggQEAKICNkZWZpbmUgQ09NUF9TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX0NPTVBfRElTQUJMRQogI2RlZmluZSBDT01QX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfQ09NUF9MT0NLCiAKLSNpZiBkZWZpbmVkKFNUTTMyRjMwMXg4KSB8fCBkZWZpbmVkKFNUTTMyRjMwMng4KSB8fCBkZWZpbmVkKFNUTTMyRjMxOHh4KSB8fCBkZWZpbmVkKFNUTTMyRjMwM3g4KSB8fCBkZWZpbmVkKFNUTTMyRjMzNHg4KSB8fCBkZWZpbmVkKFNUTTMyRjMyOHh4KQorI2lmIGRlZmluZWQoU1RNMzJGMzAxeDgpIHx8IGRlZmluZWQoU1RNMzJGMzAyeDgpIHx8IGRlZmluZWQoU1RNMzJGMzE4eHgpIHx8IGRlZmluZWQoU1RNMzJGMzAzeDgpIHx8IFwKKyAgICBkZWZpbmVkKFNUTTMyRjMzNHg4KSB8fCBkZWZpbmVkKFNUTTMyRjMyOHh4KQogI2RlZmluZSBfX0hBTF9DT01QX0VYVElfUklTSU5HX0lUX0VOQUJMRShfX0VYVElMSU5FX18pICAgKCgoX19FWFRJTElORV9fKSAgPT0gQ09NUF9FWFRJX0xJTkVfQ09NUDIpID8gX19IQUxfQ09NUF9DT01QMl9FWFRJX0VOQUJMRV9SSVNJTkdfRURHRSgpIDogXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19FWFRJTElORV9fKSAgPT0gQ09NUF9FWFRJX0xJTkVfQ09NUDQpID8gX19IQUxfQ09NUF9DT01QNF9FWFRJX0VOQUJMRV9SSVNJTkdfRURHRSgpIDogXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX0NPTVBfQ09NUDZfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKSkKQEAgLTIwNzYsOCArMjQ1OCwxMCBAQAogLyoqIEBkZWZncm91cCBIQUxfQ09NUF9BbGlhc2VkX0Z1bmN0aW9ucyBIQUwgQ09NUCBBbGlhc2VkIEZ1bmN0aW9ucyBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQogICAqIEB7CiAgICovCi0jZGVmaW5lIEhBTF9DT01QX1N0YXJ0X0lUICAgICAgIEhBTF9DT01QX1N0YXJ0IC8qIEZ1bmN0aW9uIGNvbnNpZGVyZWQgYXMgbGVnYWN5IGFzIEVYVEkgZXZlbnQgb3IgSVQgY29uZmlndXJhdGlvbiBpcyBkb25lIGludG8gSEFMX0NPTVBfSW5pdCgpICovCi0jZGVmaW5lIEhBTF9DT01QX1N0b3BfSVQgICAgICAgIEhBTF9DT01QX1N0b3AgIC8qIEZ1bmN0aW9uIGNvbnNpZGVyZWQgYXMgbGVnYWN5IGFzIEVYVEkgZXZlbnQgb3IgSVQgY29uZmlndXJhdGlvbiBpcyBkb25lIGludG8gSEFMX0NPTVBfSW5pdCgpICovCisjZGVmaW5lIEhBTF9DT01QX1N0YXJ0X0lUICAgICAgIEhBTF9DT01QX1N0YXJ0IC8qIEZ1bmN0aW9uIGNvbnNpZGVyZWQgYXMgbGVnYWN5IGFzIEVYVEkgZXZlbnQgb3IgSVQgY29uZmlndXJhdGlvbiBpcyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSBpbnRvIEhBTF9DT01QX0luaXQoKSAqLworI2RlZmluZSBIQUxfQ09NUF9TdG9wX0lUICAgICAgICBIQUxfQ09NUF9TdG9wICAvKiBGdW5jdGlvbiBjb25zaWRlcmVkIGFzIGxlZ2FjeSBhcyBFWFRJIGV2ZW50IG9yIElUIGNvbmZpZ3VyYXRpb24gaXMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgaW50byBIQUxfQ09NUF9Jbml0KCkgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0yMDg4LDggKzI0NzIsOCBAQAogICAqLwogCiAjZGVmaW5lIElTX0RBQ19XQVZFKFdBVkUpICgoKFdBVkUpID09IERBQ19XQVZFX05PTkUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKChXQVZFKSA9PSBEQUNfV0FWRV9OT0lTRSl8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgoV0FWRSkgPT0gREFDX1dBVkVfVFJJQU5HTEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXQVZFKSA9PSBEQUNfV0FWRV9OT0lTRSl8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdBVkUpID09IERBQ19XQVZFX1RSSUFOR0xFKSkKIAogLyoqCiAgICogQH0KQEAgLTIxNDUsNyArMjUyOSw3IEBACiAjZGVmaW5lIElTX0kyU19JTlNUQU5DRV9FWFQgICAgICAgICAgICAgSVNfSTJTX0FMTF9JTlNUQU5DRV9FWFQKIAogI2lmIGRlZmluZWQoU1RNMzJINykKLSAgI2RlZmluZSBfX0hBTF9JMlNfQ0xFQVJfRlJFRkxBRyAgICAgICBfX0hBTF9JMlNfQ0xFQVJfVElGUkVGTEFHCisjZGVmaW5lIF9fSEFMX0kyU19DTEVBUl9GUkVGTEFHICAgICAgIF9fSEFMX0kyU19DTEVBUl9USUZSRUZMQUcKICNlbmRpZgogCiAvKioKQEAgLTIyMzYsNyArMjYyMCw5IEBACiAjZGVmaW5lIF9fSEFMX1BXUl9JTlRFUk5BTFdBS0VVUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9FbmFibGVJbnRlcm5hbFdha2VVcExpbmUKICNkZWZpbmUgX19IQUxfUFdSX1BVTExfVVBfRE9XTl9DT05GSUdfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgSEFMX1BXUkV4X0Rpc2FibGVQdWxsVXBQdWxsRG93bkNvbmZpZwogI2RlZmluZSBfX0hBTF9QV1JfUFVMTF9VUF9ET1dOX0NPTkZJR19FTkFCTEUgICAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfRW5hYmxlUHVsbFVwUHVsbERvd25Db25maWcKLSNkZWZpbmUgX19IQUxfUFdSX1BWRF9FWFRJX0NMRUFSX0VHREVfVFJJR0dFUigpICAgICAgICAgICAgICAgICAgZG8geyBfX0hBTF9QV1JfUFZEX0VYVElfRElTQUJMRV9SSVNJTkdfRURHRSgpO19fSEFMX1BXUl9QVkRfRVhUSV9ESVNBQkxFX0ZBTExJTkdfRURHRSgpOyB9IHdoaWxlKDApCisjZGVmaW5lIF9fSEFMX1BXUl9QVkRfRVhUSV9DTEVBUl9FR0RFX1RSSUdHRVIoKSAgICAgICAgICAgICAgICAgIGRvIHsgX19IQUxfUFdSX1BWRF9FWFRJX0RJU0FCTEVfUklTSU5HX0VER0UoKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1BXUl9QVkRfRVhUSV9ESVNBQkxFX0ZBTExJTkdfRURHRSgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKICNkZWZpbmUgX19IQUxfUFdSX1BWRF9FWFRJX0VWRU5UX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUFdSX1BWRF9FWFRJX0RJU0FCTEVfRVZFTlQKICNkZWZpbmUgX19IQUxfUFdSX1BWRF9FWFRJX0VWRU5UX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUFdSX1BWRF9FWFRJX0VOQUJMRV9FVkVOVAogI2RlZmluZSBfX0hBTF9QV1JfUFZEX0VYVElfRkFMTElOR1RSSUdHRVJfRElTQUJMRSAgICAgICAgICAgICAgICBfX0hBTF9QV1JfUFZEX0VYVElfRElTQUJMRV9GQUxMSU5HX0VER0UKQEAgLTIyNDUsOCArMjYzMSwxMiBAQAogI2RlZmluZSBfX0hBTF9QV1JfUFZEX0VYVElfUklTSU5HVFJJR0dFUl9FTkFCTEUgICAgICAgICAgICAgICAgICBfX0hBTF9QV1JfUFZEX0VYVElfRU5BQkxFX1JJU0lOR19FREdFCiAjZGVmaW5lIF9fSEFMX1BXUl9QVkRfRVhUSV9TRVRfRkFMTElOR19FR0RFX1RSSUdHRVIgICAgICAgICAgICAgIF9fSEFMX1BXUl9QVkRfRVhUSV9FTkFCTEVfRkFMTElOR19FREdFCiAjZGVmaW5lIF9fSEFMX1BXUl9QVkRfRVhUSV9TRVRfUklTSU5HX0VER0VfVFJJR0dFUiAgICAgICAgICAgICAgIF9fSEFMX1BXUl9QVkRfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UKLSNkZWZpbmUgX19IQUxfUFdSX1BWTV9ESVNBQkxFKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8geyBIQUxfUFdSRXhfRGlzYWJsZVBWTTEoKTtIQUxfUFdSRXhfRGlzYWJsZVBWTTIoKTtIQUxfUFdSRXhfRGlzYWJsZVBWTTMoKTtIQUxfUFdSRXhfRGlzYWJsZVBWTTQoKTsgfSB3aGlsZSgwKQotI2RlZmluZSBfX0hBTF9QV1JfUFZNX0VOQUJMRSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7IEhBTF9QV1JFeF9FbmFibGVQVk0xKCk7SEFMX1BXUkV4X0VuYWJsZVBWTTIoKTtIQUxfUFdSRXhfRW5hYmxlUFZNMygpO0hBTF9QV1JFeF9FbmFibGVQVk00KCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgX19IQUxfUFdSX1BWTV9ESVNBQkxFKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8geyBIQUxfUFdSRXhfRGlzYWJsZVBWTTEoKTtIQUxfUFdSRXhfRGlzYWJsZVBWTTIoKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9EaXNhYmxlUFZNMygpO0hBTF9QV1JFeF9EaXNhYmxlUFZNNCgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyNkZWZpbmUgX19IQUxfUFdSX1BWTV9FTkFCTEUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8geyBIQUxfUFdSRXhfRW5hYmxlUFZNMSgpO0hBTF9QV1JFeF9FbmFibGVQVk0yKCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfRW5hYmxlUFZNMygpO0hBTF9QV1JFeF9FbmFibGVQVk00KCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogI2RlZmluZSBfX0hBTF9QV1JfU1JBTTJDT05URU5UX1BSRVNFUlZFX0RJU0FCTEUgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfRGlzYWJsZVNSQU0yQ29udGVudFJldGVudGlvbgogI2RlZmluZSBfX0hBTF9QV1JfU1JBTTJDT05URU5UX1BSRVNFUlZFX0VOQUJMRSAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfRW5hYmxlU1JBTTJDb250ZW50UmV0ZW50aW9uCiAjZGVmaW5lIF9fSEFMX1BXUl9WRERJTzJfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9EaXNhYmxlVmRkSU8yCkBAIC0yMjgyLDcgKzI2NzIsOCBAQAogI2RlZmluZSBSQ0NfU3RvcFdha2VVcENsb2NrX0hTSSAgICAgUkNDX1NUT1BfV0FLRVVQQ0xPQ0tfSFNJCiAKICNkZWZpbmUgSEFMX1JDQ19DQ1NDYWxsYmFjayBIQUxfUkNDX0NTU0NhbGxiYWNrCi0jZGVmaW5lIEhBTF9SQzQ4X0VuYWJsZUJ1ZmZlcl9DbWQoY21kKSAoKChjbWQpPT1FTkFCTEUpID8gSEFMX1JDQ0V4X0VuYWJsZUhTSTQ4X1ZSRUZJTlQoKSA6IEhBTF9SQ0NFeF9EaXNhYmxlSFNJNDhfVlJFRklOVCgpKQorI2RlZmluZSBIQUxfUkM0OF9FbmFibGVCdWZmZXJfQ21kKGNtZCkgKCgoY21kKT09RU5BQkxFKSA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUkNDRXhfRW5hYmxlSFNJNDhfVlJFRklOVCgpIDogSEFMX1JDQ0V4X0Rpc2FibGVIU0k0OF9WUkVGSU5UKCkpCiAKICNkZWZpbmUgX19BRENfQ0xLX0RJU0FCTEUgICAgICAgICAgX19IQUxfUkNDX0FEQ19DTEtfRElTQUJMRQogI2RlZmluZSBfX0FEQ19DTEtfRU5BQkxFICAgICAgICAgICBfX0hBTF9SQ0NfQURDX0NMS19FTkFCTEUKQEAgLTI3ODYsNiArMzE3NywxMSBAQAogCiAjZGVmaW5lICBfX0hBTF9SQ0NfV1dER19JU19DTEtfRU5BQkxFRCAgICBfX0hBTF9SQ0NfV1dERzFfSVNfQ0xLX0VOQUJMRUQKICNkZWZpbmUgIF9fSEFMX1JDQ19XV0RHX0lTX0NMS19ESVNBQkxFRCAgX19IQUxfUkNDX1dXREcxX0lTX0NMS19ESVNBQkxFRAorI2RlZmluZSAgUkNDX1NQSTRDTEtTT1VSQ0VfRDJQQ0xLMSAgICAgICBSQ0NfU1BJNENMS1NPVVJDRV9EMlBDTEsyCisjZGVmaW5lICBSQ0NfU1BJNUNMS1NPVVJDRV9EMlBDTEsxICAgICAgIFJDQ19TUEk1Q0xLU09VUkNFX0QyUENMSzIKKyNkZWZpbmUgIFJDQ19TUEk0NUNMS1NPVVJDRV9EMlBDTEsxICAgICAgUkNDX1NQSTQ1Q0xLU09VUkNFX0QyUENMSzIKKyNkZWZpbmUgIFJDQ19TUEk0NUNMS1NPVVJDRV9DRFBDTEsxICAgICAgUkNDX1NQSTQ1Q0xLU09VUkNFX0NEUENMSzIKKyNkZWZpbmUgIFJDQ19TUEk0NUNMS1NPVVJDRV9QQ0xLMSAgICAgICAgUkNDX1NQSTQ1Q0xLU09VUkNFX1BDTEsyCiAjZW5kaWYKIAogI2RlZmluZSBfX1dXREdfQ0xLX0RJU0FCTEUgX19IQUxfUkNDX1dXREdfQ0xLX0RJU0FCTEUKQEAgLTMyNTAsNyArMzY0Niw4IEBACiAjZGVmaW5lIFJDQ19NQ09TT1VSQ0VfUExMQ0xLX05PRElWICBSQ0NfTUNPMVNPVVJDRV9QTExDTEsKICNkZWZpbmUgUkNDX01DT1NPVVJDRV9QTExDTEtfRElWMiAgIFJDQ19NQ08xU09VUkNFX1BMTENMS19ESVYyCiAKLSNpZiBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRzQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMldMKQorI2lmIGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBcCisgICAgICBkZWZpbmVkKFNUTTMyV0wpIHx8IGRlZmluZWQoU1RNMzJDMCkKICNkZWZpbmUgUkNDX1JUQ0NMS1NPVVJDRV9OT19DTEsgICAgIFJDQ19SVENDTEtTT1VSQ0VfTk9ORQogI2Vsc2UKICNkZWZpbmUgUkNDX1JUQ0NMS1NPVVJDRV9OT05FICAgICAgIFJDQ19SVENDTEtTT1VSQ0VfTk9fQ0xLCkBAIC0zMzYyLDYgKzM3NTksMTI0IEBACiAjZGVmaW5lIFJDQ19ERlNETTFDTEtTT1VSQ0VfQVBCMiAgICAgICAgICAgIFJDQ19ERlNETTFDTEtTT1VSQ0VfUENMSzIKICNkZWZpbmUgUkNDX0RGU0RNMkNMS1NPVVJDRV9BUEIyICAgICAgICAgICAgUkNDX0RGU0RNMkNMS1NPVVJDRV9QQ0xLMgogI2RlZmluZSBSQ0NfRk1QSTJDMUNMS1NPVVJDRV9BUEIgICAgICAgICAgICBSQ0NfRk1QSTJDMUNMS1NPVVJDRV9QQ0xLMQorI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgTVNJS1BMTE1vZGVTRUwgICAgICAgICAgICAgICAgICAgICAgICBSQ0NfTVNJS1BMTF9NT0RFX1NFTAorI2RlZmluZSBNU0lTUExMTW9kZVNFTCAgICAgICAgICAgICAgICAgICAgICAgIFJDQ19NU0lTUExMX01PREVfU0VMCisjZGVmaW5lIF9fSEFMX1JDQ19BSEIyMV9DTEtfRElTQUJMRSAgICAgICAgICAgX19IQUxfUkNDX0FIQjJfMV9DTEtfRElTQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfQUhCMjJfQ0xLX0RJU0FCTEUgICAgICAgICAgIF9fSEFMX1JDQ19BSEIyXzJfQ0xLX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX0FIQjFfQ0xLX0Rpc2FibGVfQ2xlYXIgICAgICBfX0hBTF9SQ0NfQUhCMV9DTEtfRU5BQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19BSEIyMV9DTEtfRGlzYWJsZV9DbGVhciAgICAgX19IQUxfUkNDX0FIQjJfMV9DTEtfRU5BQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19BSEIyMl9DTEtfRGlzYWJsZV9DbGVhciAgICAgX19IQUxfUkNDX0FIQjJfMl9DTEtfRU5BQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19BSEIzX0NMS19EaXNhYmxlX0NsZWFyICAgICAgX19IQUxfUkNDX0FIQjNfQ0xLX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfQVBCMV9DTEtfRGlzYWJsZV9DbGVhciAgICAgIF9fSEFMX1JDQ19BUEIxX0NMS19FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX0FQQjJfQ0xLX0Rpc2FibGVfQ2xlYXIgICAgICBfX0hBTF9SQ0NfQVBCMl9DTEtfRU5BQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19BUEIzX0NMS19EaXNhYmxlX0NsZWFyICAgICAgX19IQUxfUkNDX0FQQjNfQ0xLX0VOQUJMRQorI2RlZmluZSBJU19SQ0NfTVNJUExMTW9kZVNlbGVjdGlvbiAgICAgICAgICAgIElTX1JDQ19NU0lQTExNT0RFX1NFTEVDVAorI2RlZmluZSBSQ0NfUEVSSVBIQ0xLX0NMSzQ4ICAgICAgICAgICAgICAgICAgIFJDQ19QRVJJUEhDTEtfSUNMSworI2RlZmluZSBSQ0NfQ0xLNDhDTEtTT1VSQ0VfSFNJNDggICAgICAgICAgICAgIFJDQ19JQ0xLX0NMS1NPVVJDRV9IU0k0OAorI2RlZmluZSBSQ0NfQ0xLNDhDTEtTT1VSQ0VfUExMMiAgICAgICAgICAgICAgIFJDQ19JQ0xLX0NMS1NPVVJDRV9QTEwyCisjZGVmaW5lIFJDQ19DTEs0OENMS1NPVVJDRV9QTEwxICAgICAgICAgICAgICAgUkNDX0lDTEtfQ0xLU09VUkNFX1BMTDEKKyNkZWZpbmUgUkNDX0NMSzQ4Q0xLU09VUkNFX01TSUsgICAgICAgICAgICAgICBSQ0NfSUNMS19DTEtTT1VSQ0VfTVNJSworI2RlZmluZSBfX0hBTF9SQ0NfQURDMV9DTEtfRU5BQkxFICAgICAgICAgICAgIF9fSEFMX1JDQ19BREMxMl9DTEtfRU5BQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19BREMxX0NMS19ESVNBQkxFICAgICAgICAgICAgX19IQUxfUkNDX0FEQzEyX0NMS19ESVNBQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19BREMxX0lTX0NMS19FTkFCTEVEICAgICAgICAgX19IQUxfUkNDX0FEQzEyX0lTX0NMS19FTkFCTEVECisjZGVmaW5lIF9fSEFMX1JDQ19BREMxX0lTX0NMS19ESVNBQkxFRCAgICAgICAgX19IQUxfUkNDX0FEQzEyX0lTX0NMS19ESVNBQkxFRAorI2RlZmluZSBfX0hBTF9SQ0NfQURDMV9GT1JDRV9SRVNFVCAgICAgICAgICAgIF9fSEFMX1JDQ19BREMxMl9GT1JDRV9SRVNFVAorI2RlZmluZSBfX0hBTF9SQ0NfQURDMV9SRUxFQVNFX1JFU0VUICAgICAgICAgIF9fSEFMX1JDQ19BREMxMl9SRUxFQVNFX1JFU0VUCisjZGVmaW5lIF9fSEFMX1JDQ19BREMxX0NMS19TTEVFUF9FTkFCTEUgICAgICAgX19IQUxfUkNDX0FEQzEyX0NMS19TTEVFUF9FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX0FEQzFfQ0xLX1NMRUVQX0RJU0FCTEUgICAgICBfX0hBTF9SQ0NfQURDMTJfQ0xLX1NMRUVQX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX0dFVF9DTEs0OF9TT1VSQ0UgICAgICAgICAgICBfX0hBTF9SQ0NfR0VUX0lDTEtfU09VUkNFCisjZGVmaW5lIF9fSEFMX1JDQ19QTExGUkFDTl9FTkFCTEUgICAgICAgICAgICAgX19IQUxfUkNDX1BMTF9GUkFDTl9FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTEZSQUNOX0RJU0FCTEUgICAgICAgICAgICBfX0hBTF9SQ0NfUExMX0ZSQUNOX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTEZSQUNOX0NPTkZJRyAgICAgICAgICAgICBfX0hBTF9SQ0NfUExMX0ZSQUNOX0NPTkZJRworI2RlZmluZSBJU19SQ0NfUExMRlJBQ05fVkFMVUUgICAgICAgICAgICAgICAgIElTX1JDQ19QTExfRlJBQ05fVkFMVUUKKyNlbmRpZiAvKiBTVE0zMlU1ICovCisKKyNpZiBkZWZpbmVkKFNUTTMySDUpCisjZGVmaW5lIF9fSEFMX1JDQ19QTExGUkFDTl9FTkFCTEUgICAgICAgX19IQUxfUkNDX1BMTF9GUkFDTl9FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTEZSQUNOX0RJU0FCTEUgICAgICBfX0hBTF9SQ0NfUExMX0ZSQUNOX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTEZSQUNOX0NPTkZJRyAgICAgICBfX0hBTF9SQ0NfUExMX0ZSQUNOX0NPTkZJRworI2RlZmluZSBJU19SQ0NfUExMRlJBQ05fVkFMVUUgICAgICAgICAgIElTX1JDQ19QTExfRlJBQ05fVkFMVUUKKworI2RlZmluZSBSQ0NfUExMU09VUkNFX05PTkUgICAgICAgICAgICAgIFJDQ19QTEwxX1NPVVJDRV9OT05FCisjZGVmaW5lIFJDQ19QTExTT1VSQ0VfSFNJICAgICAgICAgICAgICAgUkNDX1BMTDFfU09VUkNFX0hTSQorI2RlZmluZSBSQ0NfUExMU09VUkNFX0NTSSAgICAgICAgICAgICAgIFJDQ19QTEwxX1NPVVJDRV9DU0kKKyNkZWZpbmUgUkNDX1BMTFNPVVJDRV9IU0UgICAgICAgICAgICAgICBSQ0NfUExMMV9TT1VSQ0VfSFNFCisjZGVmaW5lIFJDQ19QTExWQ0lSQU5HRV8wICAgICAgICAgICAgICAgUkNDX1BMTDFfVkNJUkFOR0VfMAorI2RlZmluZSBSQ0NfUExMVkNJUkFOR0VfMSAgICAgICAgICAgICAgIFJDQ19QTEwxX1ZDSVJBTkdFXzEKKyNkZWZpbmUgUkNDX1BMTFZDSVJBTkdFXzIgICAgICAgICAgICAgICBSQ0NfUExMMV9WQ0lSQU5HRV8yCisjZGVmaW5lIFJDQ19QTExWQ0lSQU5HRV8zICAgICAgICAgICAgICAgUkNDX1BMTDFfVkNJUkFOR0VfMworI2RlZmluZSBSQ0NfUExMMVZDT1dJREUgICAgICAgICAgICAgICAgIFJDQ19QTEwxX1ZDT1JBTkdFX1dJREUKKyNkZWZpbmUgUkNDX1BMTDFWQ09NRURJVU0gICAgICAgICAgICAgICBSQ0NfUExMMV9WQ09SQU5HRV9NRURJVU0KKworI2RlZmluZSBJU19SQ0NfUExMU09VUkNFICAgICAgICAgICAgICAgIElTX1JDQ19QTEwxX1NPVVJDRQorI2RlZmluZSBJU19SQ0NfUExMUkdFX1ZBTFVFICAgICAgICAgICAgIElTX1JDQ19QTEwxX1ZDSVJHRV9WQUxVRQorI2RlZmluZSBJU19SQ0NfUExMVkNPUkdFX1ZBTFVFICAgICAgICAgIElTX1JDQ19QTEwxX1ZDT1JHRV9WQUxVRQorI2RlZmluZSBJU19SQ0NfUExMQ0xPQ0tPVVRfVkFMVUUgICAgICAgIElTX1JDQ19QTEwxX0NMT0NLT1VUX1ZBTFVFCisjZGVmaW5lIElTX1JDQ19QTExfRlJBQ05fVkFMVUUgICAgICAgICAgSVNfUkNDX1BMTDFfRlJBQ05fVkFMVUUKKyNkZWZpbmUgSVNfUkNDX1BMTE1fVkFMVUUgICAgICAgICAgICAgICBJU19SQ0NfUExMMV9ESVZNX1ZBTFVFCisjZGVmaW5lIElTX1JDQ19QTExOX1ZBTFVFICAgICAgICAgICAgICAgSVNfUkNDX1BMTDFfTVVMTl9WQUxVRQorI2RlZmluZSBJU19SQ0NfUExMUF9WQUxVRSAgICAgICAgICAgICAgIElTX1JDQ19QTEwxX0RJVlBfVkFMVUUKKyNkZWZpbmUgSVNfUkNDX1BMTFFfVkFMVUUgICAgICAgICAgICAgICBJU19SQ0NfUExMMV9ESVZRX1ZBTFVFCisjZGVmaW5lIElTX1JDQ19QTExSX1ZBTFVFICAgICAgICAgICAgICAgSVNfUkNDX1BMTDFfRElWUl9WQUxVRQorCisjZGVmaW5lIF9fSEFMX1JDQ19QTExfRU5BQkxFICAgICAgICAgICAgX19IQUxfUkNDX1BMTDFfRU5BQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19QTExfRElTQUJMRSAgICAgICAgICAgX19IQUxfUkNDX1BMTDFfRElTQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMX0ZSQUNOX0VOQUJMRSAgICAgIF9fSEFMX1JDQ19QTEwxX0ZSQUNOX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMX0ZSQUNOX0RJU0FCTEUgICAgIF9fSEFMX1JDQ19QTEwxX0ZSQUNOX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTF9DT05GSUcgICAgICAgICAgICBfX0hBTF9SQ0NfUExMMV9DT05GSUcKKyNkZWZpbmUgX19IQUxfUkNDX1BMTF9QTExTT1VSQ0VfQ09ORklHICBfX0hBTF9SQ0NfUExMMV9QTExTT1VSQ0VfQ09ORklHCisjZGVmaW5lIF9fSEFMX1JDQ19QTExfRElWTV9DT05GSUcgICAgICAgX19IQUxfUkNDX1BMTDFfRElWTV9DT05GSUcKKyNkZWZpbmUgX19IQUxfUkNDX1BMTF9GUkFDTl9DT05GSUcgICAgICBfX0hBTF9SQ0NfUExMMV9GUkFDTl9DT05GSUcKKyNkZWZpbmUgX19IQUxfUkNDX1BMTF9WQ0lSQU5HRSAgICAgICAgICBfX0hBTF9SQ0NfUExMMV9WQ0lSQU5HRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMX1ZDT1JBTkdFICAgICAgICAgIF9fSEFMX1JDQ19QTEwxX1ZDT1JBTkdFCisjZGVmaW5lIF9fSEFMX1JDQ19HRVRfUExMX09TQ1NPVVJDRSAgICAgX19IQUxfUkNDX0dFVF9QTEwxX09TQ1NPVVJDRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMQ0xLT1VUX0VOQUJMRSAgICAgIF9fSEFMX1JDQ19QTEwxX0NMS09VVF9FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTENMS09VVF9ESVNBQkxFICAgICBfX0hBTF9SQ0NfUExMMV9DTEtPVVRfRElTQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfR0VUX1BMTENMS09VVF9DT05GSUcgIF9fSEFMX1JDQ19HRVRfUExMMV9DTEtPVVRfQ09ORklHCisKKyNkZWZpbmUgX19IQUxfUkNDX1BMTDJGUkFDTl9FTkFCTEUgICAgICBfX0hBTF9SQ0NfUExMMl9GUkFDTl9FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTDJGUkFDTl9ESVNBQkxFICAgICBfX0hBTF9SQ0NfUExMMl9GUkFDTl9ESVNBQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19QTEwyQ0xLT1VUX0VOQUJMRSAgICAgX19IQUxfUkNDX1BMTDJfQ0xLT1VUX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMMkNMS09VVF9ESVNBQkxFICAgIF9fSEFMX1JDQ19QTEwyX0NMS09VVF9ESVNBQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19QTEwyRlJBQ05fQ09ORklHICAgICAgX19IQUxfUkNDX1BMTDJfRlJBQ05fQ09ORklHCisjZGVmaW5lIF9fSEFMX1JDQ19HRVRfUExMMkNMS09VVF9DT05GSUcgX19IQUxfUkNDX0dFVF9QTEwyX0NMS09VVF9DT05GSUcKKworI2RlZmluZSBfX0hBTF9SQ0NfUExMM0ZSQUNOX0VOQUJMRSAgICAgIF9fSEFMX1JDQ19QTEwzX0ZSQUNOX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMM0ZSQUNOX0RJU0FCTEUgICAgIF9fSEFMX1JDQ19QTEwzX0ZSQUNOX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTDNDTEtPVVRfRU5BQkxFICAgICBfX0hBTF9SQ0NfUExMM19DTEtPVVRfRU5BQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19QTEwzQ0xLT1VUX0RJU0FCTEUgICAgX19IQUxfUkNDX1BMTDNfQ0xLT1VUX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTDNGUkFDTl9DT05GSUcgICAgICBfX0hBTF9SQ0NfUExMM19GUkFDTl9DT05GSUcKKyNkZWZpbmUgX19IQUxfUkNDX0dFVF9QTEwzQ0xLT1VUX0NPTkZJRyBfX0hBTF9SQ0NfR0VUX1BMTDNfQ0xLT1VUX0NPTkZJRworCisjZGVmaW5lIFJDQ19QTEwyVkNJUkFOR0VfMCAgICAgICAgICAgICAgUkNDX1BMTDJfVkNJUkFOR0VfMAorI2RlZmluZSBSQ0NfUExMMlZDSVJBTkdFXzEgICAgICAgICAgICAgIFJDQ19QTEwyX1ZDSVJBTkdFXzEKKyNkZWZpbmUgUkNDX1BMTDJWQ0lSQU5HRV8yICAgICAgICAgICAgICBSQ0NfUExMMl9WQ0lSQU5HRV8yCisjZGVmaW5lIFJDQ19QTEwyVkNJUkFOR0VfMyAgICAgICAgICAgICAgUkNDX1BMTDJfVkNJUkFOR0VfMworCisjZGVmaW5lIFJDQ19QTEwyVkNPV0lERSAgICAgICAgICAgICAgICAgUkNDX1BMTDJfVkNPUkFOR0VfV0lERQorI2RlZmluZSBSQ0NfUExMMlZDT01FRElVTSAgICAgICAgICAgICAgIFJDQ19QTEwyX1ZDT1JBTkdFX01FRElVTQorCisjZGVmaW5lIFJDQ19QTEwyU09VUkNFX05PTkUgICAgICAgICAgICAgUkNDX1BMTDJfU09VUkNFX05PTkUKKyNkZWZpbmUgUkNDX1BMTDJTT1VSQ0VfSFNJICAgICAgICAgICAgICBSQ0NfUExMMl9TT1VSQ0VfSFNJCisjZGVmaW5lIFJDQ19QTEwyU09VUkNFX0NTSSAgICAgICAgICAgICAgUkNDX1BMTDJfU09VUkNFX0NTSQorI2RlZmluZSBSQ0NfUExMMlNPVVJDRV9IU0UgICAgICAgICAgICAgIFJDQ19QTEwyX1NPVVJDRV9IU0UKKworI2RlZmluZSBSQ0NfUExMM1ZDSVJBTkdFXzAgICAgICAgICAgICAgIFJDQ19QTEwzX1ZDSVJBTkdFXzAKKyNkZWZpbmUgUkNDX1BMTDNWQ0lSQU5HRV8xICAgICAgICAgICAgICBSQ0NfUExMM19WQ0lSQU5HRV8xCisjZGVmaW5lIFJDQ19QTEwzVkNJUkFOR0VfMiAgICAgICAgICAgICAgUkNDX1BMTDNfVkNJUkFOR0VfMgorI2RlZmluZSBSQ0NfUExMM1ZDSVJBTkdFXzMgICAgICAgICAgICAgIFJDQ19QTEwzX1ZDSVJBTkdFXzMKKworI2RlZmluZSBSQ0NfUExMM1ZDT1dJREUgICAgICAgICAgICAgICAgIFJDQ19QTEwzX1ZDT1JBTkdFX1dJREUKKyNkZWZpbmUgUkNDX1BMTDNWQ09NRURJVU0gICAgICAgICAgICAgICBSQ0NfUExMM19WQ09SQU5HRV9NRURJVU0KKworI2RlZmluZSBSQ0NfUExMM1NPVVJDRV9OT05FICAgICAgICAgICAgIFJDQ19QTEwzX1NPVVJDRV9OT05FCisjZGVmaW5lIFJDQ19QTEwzU09VUkNFX0hTSSAgICAgICAgICAgICAgUkNDX1BMTDNfU09VUkNFX0hTSQorI2RlZmluZSBSQ0NfUExMM1NPVVJDRV9DU0kgICAgICAgICAgICAgIFJDQ19QTEwzX1NPVVJDRV9DU0kKKyNkZWZpbmUgUkNDX1BMTDNTT1VSQ0VfSFNFICAgICAgICAgICAgICBSQ0NfUExMM19TT1VSQ0VfSFNFCisKKworI2VuZGlmIC8qIFNUTTMySDUgKi8KIAogLyoqCiAgICogQH0KQEAgLTMzNzksNyArMzg5NCw5IEBACiAvKiogQGRlZmdyb3VwIEhBTF9SVENfQWxpYXNlZF9NYWNyb3MgSEFMIFJUQyBBbGlhc2VkIE1hY3JvcyBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQogICAqIEB7CiAgICovCi0jaWYgZGVmaW5lZCAoU1RNMzJHMCkgfHwgZGVmaW5lZCAoU1RNMzJMNSkgfHwgZGVmaW5lZCAoU1RNMzJMNDEyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQyMnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UDV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFE1eHgpIHx8IGRlZmluZWQgKFNUTTMyRzQpIHx8IGRlZmluZWQgKFNUTTMyV0wpCisjaWYgZGVmaW5lZCAoU1RNMzJHMCkgfHwgZGVmaW5lZCAoU1RNMzJMNSkgfHwgZGVmaW5lZCAoU1RNMzJMNDEyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQyMnh4KSB8fCBcCisgICAgZGVmaW5lZCAoU1RNMzJMNFA1eHgpfHwgZGVmaW5lZCAoU1RNMzJMNFE1eHgpIHx8IGRlZmluZWQgKFNUTTMyRzQpIHx8IGRlZmluZWQgKFNUTTMyV0wpIHx8IGRlZmluZWQgKFNUTTMyVTUpIHx8IFwKKyAgICBkZWZpbmVkIChTVE0zMldCQSkgfHwgZGVmaW5lZCAoU1RNMzJINSkgfHwgZGVmaW5lZCAoU1RNMzJDMCkKICNlbHNlCiAjZGVmaW5lIF9fSEFMX1JUQ19DTEVBUl9GTEFHICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19FWFRJX0NMRUFSX0ZMQUcKICNlbmRpZgpAQCAtMzM5OSwyMSArMzkxNiwyNiBAQAogI2Vsc2UKICNkZWZpbmUgX19IQUxfUlRDX0VYVElfQ0xFQVJfRkxBRyhfX0VYVElfTElORV9fKSAgKCgoX19FWFRJX0xJTkVfXykgPT0gUlRDX0VYVElfTElORV9BTEFSTV9FVkVOVCkgPyBfX0hBTF9SVENfQUxBUk1fRVhUSV9DTEVBUl9GTEFHKCkgOiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0VYVElfTElORV9fKSA9PSBSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKSA/IF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0NMRUFSX0ZMQUcoKSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfQ0xFQVJfRkxBRygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0NMRUFSX0ZMQUcoKSkpCiAjZGVmaW5lIF9fSEFMX1JUQ19FWFRJX0VOQUJMRV9JVChfX0VYVElfTElORV9fKSAgICgoKF9fRVhUSV9MSU5FX18pICA9PSBSVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UKSA/IF9fSEFMX1JUQ19BTEFSTV9FWFRJX0VOQUJMRV9JVCgpIDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0VYVElfTElORV9fKSA9PSBSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKSA/IF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9JVCgpIDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9FTkFCTEVfSVQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0VYVElfTElORV9fKSA9PSBSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKSA/IF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9JVCgpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRU5BQkxFX0lUKCkpKQogI2RlZmluZSBfX0hBTF9SVENfRVhUSV9ESVNBQkxFX0lUKF9fRVhUSV9MSU5FX18pICAoKChfX0VYVElfTElORV9fKSA9PSBSVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UKSA/IF9fSEFMX1JUQ19BTEFSTV9FWFRJX0RJU0FCTEVfSVQoKSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19FWFRJX0xJTkVfXykgPT0gUlRDX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkgPyBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX0lUKCkgOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0RJU0FCTEVfSVQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0VYVElfTElORV9fKSA9PSBSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKSA/IF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfSVQoKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0RJU0FCTEVfSVQoKSkpCiAjZGVmaW5lIF9fSEFMX1JUQ19FWFRJX0dFVF9GTEFHKF9fRVhUSV9MSU5FX18pICAgICgoKF9fRVhUSV9MSU5FX18pID09IFJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpID8gX19IQUxfUlRDX0FMQVJNX0VYVElfR0VUX0ZMQUcoKSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19FWFRJX0xJTkVfXykgPT0gUlRDX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkgPyBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9HRVRfRkxBRygpIDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9HRVRfRkxBRygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fRVhUSV9MSU5FX18pID09IFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpID8gX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfR0VUX0ZMQUcoKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0dFVF9GTEFHKCkpKQogI2RlZmluZSBfX0hBTF9SVENfRVhUSV9HRU5FUkFURV9TV0lUKF9fRVhUSV9MSU5FX18pICAgKCgoX19FWFRJX0xJTkVfXykgPT0gUlRDX0VYVElfTElORV9BTEFSTV9FVkVOVCkgPyBfX0hBTF9SVENfQUxBUk1fRVhUSV9HRU5FUkFURV9TV0lUKCkgOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0VYVElfTElORV9fKSA9PSBSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKSA/IF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0dFTkVSQVRFX1NXSVQoKSA6ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9HRU5FUkFURV9TV0lUKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fRVhUSV9MSU5FX18pID09IFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpID8gX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfR0VORVJBVEVfU1dJVCgpIDogIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9HRU5FUkFURV9TV0lUKCkpKQogI2VuZGlmICAgLyogU1RNMzJGMSAqLwogCisjaWYgZGVmaW5lZCAoU1RNMzJGMCkgfHwgZGVmaW5lZCAoU1RNMzJGMikgfHwgZGVmaW5lZCAoU1RNMzJGMykgfHwgZGVmaW5lZCAoU1RNMzJGNCkgfHwgZGVmaW5lZCAoU1RNMzJGNykgfHwgXAorICAgIGRlZmluZWQgKFNUTTMyTDApIHx8IGRlZmluZWQgKFNUTTMyTDEpCisjZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfR0VUX0lUICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfR0VUX0ZMQUcKKyNlbmRpZgorCiAjZGVmaW5lIElTX0FMQVJNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTX1JUQ19BTEFSTQogI2RlZmluZSBJU19BTEFSTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU19SVENfQUxBUk1fTUFTSwogI2RlZmluZSBJU19UQU1QRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU19SVENfVEFNUEVSCkBAIC0zNDMyLDE3ICszOTU0LDMxIEBACiAjZGVmaW5lIF9fUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFCiAjZGVmaW5lIF9fUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUKIAorI2lmIGRlZmluZWQgKFNUTTMySDUpCisjZGVmaW5lIF9fSEFMX1JDQ19SVENBUEJfQ0xLX0VOQUJMRSAgIF9fSEFMX1JDQ19SVENfQ0xLX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUlRDQVBCX0NMS19ESVNBQkxFICBfX0hBTF9SQ0NfUlRDX0NMS19ESVNBQkxFCisjZW5kaWYgICAvKiBTVE0zMkg1ICovCisKIC8qKgogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgSEFMX1NEX0FsaWFzZWRfTWFjcm9zIEhBTCBTRCBBbGlhc2VkIE1hY3JvcyBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQorLyoqIEBkZWZncm91cCBIQUxfU0RfQWxpYXNlZF9NYWNyb3MgSEFMIFNEL01NQyBBbGlhc2VkIE1hY3JvcyBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQogICAqIEB7CiAgICovCiAKICNkZWZpbmUgU0RfT0NSX0NJRF9DU0RfT1ZFUldSSUVURSAgIFNEX09DUl9DSURfQ1NEX09WRVJXUklURQogI2RlZmluZSBTRF9DTURfU0RfQVBQX1NUQVVTICAgICAgICAgU0RfQ01EX1NEX0FQUF9TVEFUVVMKIAorI2lmICFkZWZpbmVkKFNUTTMyRjEpICYmICFkZWZpbmVkKFNUTTMyRjIpICYmICFkZWZpbmVkKFNUTTMyRjQpICYmICFkZWZpbmVkKFNUTTMyTDEpCisjZGVmaW5lIGVNTUNfSElHSF9WT0xUQUdFX1JBTkdFICAgICBFTU1DX0hJR0hfVk9MVEFHRV9SQU5HRQorI2RlZmluZSBlTU1DX0RVQUxfVk9MVEFHRV9SQU5HRSAgICAgRU1NQ19EVUFMX1ZPTFRBR0VfUkFOR0UKKyNkZWZpbmUgZU1NQ19MT1dfVk9MVEFHRV9SQU5HRSAgICAgIEVNTUNfTE9XX1ZPTFRBR0VfUkFOR0UKKworI2RlZmluZSBTRE1NQ19OU3BlZWRfQ0xLX0RJViAgICAgICAgU0RNTUNfTlNQRUVEX0NMS19ESVYKKyNkZWZpbmUgU0RNTUNfSFNwZWVkX0NMS19ESVYgICAgICAgIFNETU1DX0hTUEVFRF9DTEtfRElWCisjZW5kaWYKKwogI2lmIGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkYyKQogI2RlZmluZSAgU0RfU0RNTUNfRElTQUJMRUQgICAgICAgICAgU0RfU0RJT19ESVNBQkxFRAogI2RlZmluZSAgU0RfU0RNTUNfRlVOQ1RJT05fQlVTWSAgICAgU0RfU0RJT19GVU5DVElPTl9CVVNZCkBAIC0zNTk1LDYgKzQxMzEsMTMgQEAKICNkZWZpbmUgX19IQUxfVVNBUlRfR0VUQ0xPQ0tTT1VSQ0UgICAgICBVU0FSVF9HRVRDTE9DS1NPVVJDRQogI2RlZmluZSBfX1VTQVJUX0dFVENMT0NLU09VUkNFICAgICAgICAgIFVTQVJUX0dFVENMT0NLU09VUkNFCiAKKyNpZiBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMykgfHwgZGVmaW5lZChTVE0zMkY3KQorI2RlZmluZSBVU0FSVF9PVkVSU0FNUExJTkdfMTYgICAgICAgICAgICAgICAweDAwMDAwMDAwVQorI2RlZmluZSBVU0FSVF9PVkVSU0FNUExJTkdfOCAgICAgICAgICAgICAgICBVU0FSVF9DUjFfT1ZFUjgKKworI2RlZmluZSBJU19VU0FSVF9PVkVSU0FNUExJTkcoX19TQU1QTElOR19fKSAoKChfX1NBTVBMSU5HX18pID09IFVTQVJUX09WRVJTQU1QTElOR18xNikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NBTVBMSU5HX18pID09IFVTQVJUX09WRVJTQU1QTElOR184KSkKKyNlbmRpZiAvKiBTVE0zMkYwIHx8IFNUTTMyRjMgfHwgU1RNMzJGNyAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTM3NjQsNiArNDMwNywxNiBAQAogICAqIEB9CiAgICovCiAKKy8qKiBAZGVmZ3JvdXAgSEFMX0dlbmVyaWNfQWxpYXNlZF9NYWNyb3MgSEFMIEdlbmVyaWMgQWxpYXNlZCBNYWNyb3MgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKKyAgKiBAeworICAqLworI2lmIGRlZmluZWQgKFNUTTMyRjcpCisjZGVmaW5lIEFSVF9BQ0NMRVJBVE9SX0VOQUJMRSBBUlRfQUNDRUxFUkFUT1JfRU5BQkxFCisjZW5kaWYgLyogU1RNMzJGNyAqLworLyoqCisgICogQH0KKyAgKi8KKwogLyoqIEBkZWZncm91cCBIQUxfUFBQX0FsaWFzZWRfTWFjcm9zIEhBTCBQUFAgQWxpYXNlZCBNYWNyb3MgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKICAgKiBAewogICAqLwpAQCAtMzc3NywzICs0MzMwLDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogU1RNMzJfSEFMX0xFR0FDWSAqLworCisKZGlmZiAtLWdpdCBhL0luYy9MZWdhY3kvc3RtMzJmMXh4X2hhbF9jYW5fZXhfbGVnYWN5LmggYi9JbmMvTGVnYWN5L3N0bTMyZjF4eF9oYWxfY2FuX2V4X2xlZ2FjeS5oCmluZGV4IDE4M2Y5YzMuLjFlYzQ3Y2QgMTAwNjQ0Ci0tLSBhL0luYy9MZWdhY3kvc3RtMzJmMXh4X2hhbF9jYW5fZXhfbGVnYWN5LmgKKysrIGIvSW5jL0xlZ2FjeS9zdG0zMmYxeHhfaGFsX2Nhbl9leF9sZWdhY3kuaApAQCAtMTQsNyArMTQsNyBAQAogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqLworICAqLyAKIAogLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpZm5kZWYgX19TVE0zMkYxeHhfSEFMX0NBTl9FWF9MRUdBQ1lfSApkaWZmIC0tZ2l0IGEvSW5jL0xlZ2FjeS9zdG0zMmYxeHhfaGFsX2Nhbl9sZWdhY3kuaCBiL0luYy9MZWdhY3kvc3RtMzJmMXh4X2hhbF9jYW5fbGVnYWN5LmgKaW5kZXggZGEzMTBiMy4uMjMyMmFjOCAxMDA2NDQKLS0tIGEvSW5jL0xlZ2FjeS9zdG0zMmYxeHhfaGFsX2Nhbl9sZWdhY3kuaAorKysgYi9JbmMvTGVnYWN5L3N0bTMyZjF4eF9oYWxfY2FuX2xlZ2FjeS5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyX2Fzc2VydF90ZW1wbGF0ZS5oIGIvSW5jL3N0bTMyX2Fzc2VydF90ZW1wbGF0ZS5oCmluZGV4IGRlOGJiZGYuLjg5ZDgxYTcgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMl9hc3NlcnRfdGVtcGxhdGUuaAorKysgYi9JbmMvc3RtMzJfYXNzZXJ0X3RlbXBsYXRlLmgKQEAgLTUxLDMgKzUxLDYgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMl9BU1NFUlRfSCAqLworCisKKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9oYWwuaCBiL0luYy9zdG0zMmYxeHhfaGFsLmgKaW5kZXggZjFjNDI0Ni4uYTY3YTNiOSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9oYWwuaAorKysgYi9JbmMvc3RtMzJmMXh4X2hhbC5oCkBAIC0zNTMsMyArMzUzLDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYxeHhfSEFMX0ggKi8KKworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2hhbF9hZGMuaCBiL0luYy9zdG0zMmYxeHhfaGFsX2FkYy5oCmluZGV4IDUyZDlhYzcuLmY1ZTZkMzYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYxeHhfaGFsX2FkYy5oCisrKyBiL0luYy9zdG0zMmYxeHhfaGFsX2FkYy5oCkBAIC02LDYgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKKyAgKgogICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgpAQCAtMjUsOCArMjYsNyBAQAogI2VuZGlmCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jaW5jbHVkZSAic3RtMzJmMXh4X2hhbF9kZWYuaCIKLQorI2luY2x1ZGUgInN0bTMyZjF4eF9oYWxfZGVmLmgiICAKIC8qKiBAYWRkdG9ncm91cCBTVE0zMkYxeHhfSEFMX0RyaXZlcgogICAqIEB7CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2hhbF9jZWMuaCBiL0luYy9zdG0zMmYxeHhfaGFsX2NlYy5oCmluZGV4IDczMTM4M2MuLjNhZTNiYzIgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYxeHhfaGFsX2NlYy5oCisrKyBiL0luYy9zdG0zMmYxeHhfaGFsX2NlYy5oCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIF9fU1RNMzJGMXh4X0hBTF9DRUNfSAogCiAjaWZkZWYgX19jcGx1c3BsdXMKLSBleHRlcm4gIkMiIHsKK2V4dGVybiAiQyIgewogI2VuZGlmCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zNiw0NCArMzYsNDkgQEAKIC8qKiBAYWRkdG9ncm91cCBDRUMKICAgKiBAewogICAqLwotIAotLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gCisKKy8qIEV4cG9ydGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGRlZmdyb3VwIENFQ19FeHBvcnRlZF9UeXBlcyBDRUMgRXhwb3J0ZWQgVHlwZXMKICAgKiBAewogICAqLwotLyoqIAotICAqIEBicmllZiBDRUMgSW5pdCBTdHJ1Y3R1cmUgZGVmaW5pdGlvbiAgCi0gICovIAorCisvKioKKyAgKiBAYnJpZWYgQ0VDIEluaXQgU3RydWN0dXJlIGRlZmluaXRpb24KKyAgKi8KIHR5cGVkZWYgc3RydWN0CiB7Ci0gIHVpbnQzMl90IFRpbWluZ0Vycm9yRnJlZTsgLyohPCBDb25maWd1cmVzIHRoZSBDRUMgQml0IFRpbWluZyBFcnJvciBNb2RlLiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQ0VDX0JpdFRpbWluZ0Vycm9yTW9kZSAqLwotICB1aW50MzJfdCBQZXJpb2RFcnJvckZyZWU7IC8qITwgQ29uZmlndXJlcyB0aGUgQ0VDIEJpdCBQZXJpb2QgRXJyb3IgTW9kZS4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENFQ19CaXRQZXJpb2RFcnJvck1vZGUgKi8KLSAgdWludDE2X3QgIE93bkFkZHJlc3M7ICAgICAvKiE8IE93biBhZGRyZXNzZXMgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBDRUNfT1dOX0FERFJFU1MgKi8KLSAgdWludDhfdCAgKlJ4QnVmZmVyOyAgICAgICAvKiE8IENFQyBSeCBidWZmZXIgcG9pbnRldXIgKi8KLX1DRUNfSW5pdFR5cGVEZWY7CisgIHVpbnQzMl90ICBUaW1pbmdFcnJvckZyZWU7ICAgICAgICAgICAgIC8qITwgQ29uZmlndXJlcyB0aGUgQ0VDIEJpdCBUaW1pbmcgRXJyb3IgTW9kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBDRUNfQml0VGltaW5nRXJyb3JNb2RlICovCiAKLS8qKiAKLSAgKiBAYnJpZWYgSEFMIENFQyBTdGF0ZSBzdHJ1Y3R1cmVzIGRlZmluaXRpb24gCi0gICogQG5vdGUgIEhBTCBDRUMgU3RhdGUgdmFsdWUgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGRpZmZlcmVudCBzdWJzdGF0ZXM6IGdTdGF0ZSBhbmQgUnhTdGF0ZS4KLSAgKiAgICAgICAgLSBnU3RhdGUgY29udGFpbnMgQ0VDIHN0YXRlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gZ2xvYmFsIEhhbmRsZSBtYW5hZ2VtZW50IAorICB1aW50MzJfdCAgUGVyaW9kRXJyb3JGcmVlOyAgICAgICAgICAgICAvKiE8IENvbmZpZ3VyZXMgdGhlIENFQyBCaXQgUGVyaW9kIEVycm9yIE1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQ0VDX0JpdFBlcmlvZEVycm9yTW9kZSAqLworCisgIHVpbnQxNl90ICBPd25BZGRyZXNzOyAgICAgICAgICAgICAgICAgIC8qITwgT3duIGFkZHJlc3NlcyBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBDRUNfT1dOX0FERFJFU1MgKi8KKworICB1aW50OF90ICAqUnhCdWZmZXI7ICAgICAgICAgICAgICAgICAgICAvKiE8IENFQyBSeCBidWZmZXIgcG9pbnRlciAqLworfSBDRUNfSW5pdFR5cGVEZWY7CisKKy8qKgorICAqIEBicmllZiBIQUwgQ0VDIFN0YXRlIGRlZmluaXRpb24KKyAgKiBAbm90ZSAgSEFMIENFQyBTdGF0ZSB2YWx1ZSBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgZGlmZmVyZW50IHN1YnN0YXRlczogZ1N0YXRlIGFuZCBSeFN0YXRlCisgICAgICAgICAgIChzZWUgQHJlZiBDRUNfU3RhdGVfRGVmaW5pdGlvbikuCisgICogICAgICAgIC0gZ1N0YXRlIGNvbnRhaW5zIENFQyBzdGF0ZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGdsb2JhbCBIYW5kbGUgbWFuYWdlbWVudAogICAqICAgICAgICAgIGFuZCBhbHNvIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gVHggb3BlcmF0aW9ucy4KICAgKiAgICAgICAgICBnU3RhdGUgdmFsdWUgY29kaW5nIGZvbGxvdyBiZWxvdyBkZXNjcmliZWQgYml0bWFwIDoKICAgKiAgICAgICAgICBiNyAobm90IHVzZWQpCiAgICogICAgICAgICAgICAgeCAgOiBTaG91bGQgYmUgc2V0IHRvIDAKLSAgKiAgICAgICAgICBiNiAgRXJyb3IgaW5mb3JtYXRpb24gCisgICogICAgICAgICAgYjYgIEVycm9yIGluZm9ybWF0aW9uCiAgICogICAgICAgICAgICAgMCAgOiBObyBFcnJvcgogICAqICAgICAgICAgICAgIDEgIDogRXJyb3IKLSAgKiAgICAgICAgICBiNSAgICAgSVAgaW5pdGlsaXNhdGlvbiBzdGF0dXMKLSAgKiAgICAgICAgICAgICAwICA6IFJlc2V0IChJUCBub3QgaW5pdGlhbGl6ZWQpCi0gICogICAgICAgICAgICAgMSAgOiBJbml0IGRvbmUgKElQIGluaXRpYWxpemVkLiBIQUwgQ0VDIEluaXQgZnVuY3Rpb24gYWxyZWFkeSBjYWxsZWQpCisgICogICAgICAgICAgYjUgICAgIENFQyBwZXJpcGhlcmFsIGluaXRpYWxpemF0aW9uIHN0YXR1cworICAqICAgICAgICAgICAgIDAgIDogUmVzZXQgKHBlcmlwaGVyYWwgbm90IGluaXRpYWxpemVkKQorICAqICAgICAgICAgICAgIDEgIDogSW5pdCBkb25lIChwZXJpcGhlcmFsIGluaXRpYWxpemVkLiBIQUwgQ0VDIEluaXQgZnVuY3Rpb24gYWxyZWFkeSBjYWxsZWQpCiAgICogICAgICAgICAgYjQtYjMgIChub3QgdXNlZCkKICAgKiAgICAgICAgICAgICB4eCA6IFNob3VsZCBiZSBzZXQgdG8gMDAKICAgKiAgICAgICAgICBiMiAgICAgSW50cmluc2ljIHByb2Nlc3Mgc3RhdGUKICAgKiAgICAgICAgICAgICAwICA6IFJlYWR5Ci0gICogICAgICAgICAgICAgMSAgOiBCdXN5IChJUCBidXN5IHdpdGggc29tZSBjb25maWd1cmF0aW9uIG9yIGludGVybmFsIG9wZXJhdGlvbnMpCisgICogICAgICAgICAgICAgMSAgOiBCdXN5IChwZXJpcGhlcmFsIGJ1c3kgd2l0aCBzb21lIGNvbmZpZ3VyYXRpb24gb3IgaW50ZXJuYWwgb3BlcmF0aW9ucykKICAgKiAgICAgICAgICBiMSAgICAgKG5vdCB1c2VkKQogICAqICAgICAgICAgICAgIHggIDogU2hvdWxkIGJlIHNldCB0byAwCiAgICogICAgICAgICAgYjAgICAgIFR4IHN0YXRlCkBAIC04MywyMCArODgsMjAgQEAKICAgKiAgICAgICAgICBSeFN0YXRlIHZhbHVlIGNvZGluZyBmb2xsb3cgYmVsb3cgZGVzY3JpYmVkIGJpdG1hcCA6CiAgICogICAgICAgICAgYjctYjYgIChub3QgdXNlZCkKICAgKiAgICAgICAgICAgICB4eCA6IFNob3VsZCBiZSBzZXQgdG8gMDAKLSAgKiAgICAgICAgICBiNSAgICAgSVAgaW5pdGlsaXNhdGlvbiBzdGF0dXMKLSAgKiAgICAgICAgICAgICAwICA6IFJlc2V0IChJUCBub3QgaW5pdGlhbGl6ZWQpCi0gICogICAgICAgICAgICAgMSAgOiBJbml0IGRvbmUgKElQIGluaXRpYWxpemVkKQorICAqICAgICAgICAgIGI1ICAgICBDRUMgcGVyaXBoZXJhbCBpbml0aWFsaXphdGlvbiBzdGF0dXMKKyAgKiAgICAgICAgICAgICAwICA6IFJlc2V0IChwZXJpcGhlcmFsIG5vdCBpbml0aWFsaXplZCkKKyAgKiAgICAgICAgICAgICAxICA6IEluaXQgZG9uZSAocGVyaXBoZXJhbCBpbml0aWFsaXplZCkKICAgKiAgICAgICAgICBiNC1iMiAgKG5vdCB1c2VkKQogICAqICAgICAgICAgICAgeHh4IDogU2hvdWxkIGJlIHNldCB0byAwMDAKICAgKiAgICAgICAgICBiMSAgICAgUnggc3RhdGUKICAgKiAgICAgICAgICAgICAwICA6IFJlYWR5IChubyBSeCBvcGVyYXRpb24gb25nb2luZykKICAgKiAgICAgICAgICAgICAxICA6IEJ1c3kgKFJ4IG9wZXJhdGlvbiBvbmdvaW5nKQogICAqICAgICAgICAgIGIwICAgICAobm90IHVzZWQpCi0gICogICAgICAgICAgICAgeCAgOiBTaG91bGQgYmUgc2V0IHRvIDAuICAKLSAgKi8gCisgICogICAgICAgICAgICAgeCAgOiBTaG91bGQgYmUgc2V0IHRvIDAuCisgICovCiB0eXBlZGVmIGVudW0KIHsKLSAgSEFMX0NFQ19TVEFURV9SRVNFVCAgICAgICAgICAgICA9IDB4MDBVLCAgICAvKiE8IFBlcmlwaGVyYWwgaXMgbm90IHlldCBJbml0aWFsaXplZCAKKyAgSEFMX0NFQ19TVEFURV9SRVNFVCAgICAgICAgICAgICA9IDB4MDBVLCAgICAvKiE8IFBlcmlwaGVyYWwgaXMgbm90IHlldCBJbml0aWFsaXplZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgaXMgYWxsb3dlZCBmb3IgZ1N0YXRlIGFuZCBSeFN0YXRlICAgICAgICAgICAgICovCiAgIEhBTF9DRUNfU1RBVEVfUkVBRFkgICAgICAgICAgICAgPSAweDIwVSwgICAgLyohPCBQZXJpcGhlcmFsIEluaXRpYWxpemVkIGFuZCByZWFkeSBmb3IgdXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSBpcyBhbGxvd2VkIGZvciBnU3RhdGUgYW5kIFJ4U3RhdGUgICAgICAgICAgICAgKi8KQEAgLTEwNCw1MCArMTA5LDUxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSBpcyBhbGxvd2VkIGZvciBnU3RhdGUgb25seSAgICAgICAgICAgICAgICAgICAgKi8KICAgSEFMX0NFQ19TVEFURV9CVVNZX1JYICAgICAgICAgICA9IDB4MjJVLCAgICAvKiE8IERhdGEgUmVjZXB0aW9uIHByb2Nlc3MgaXMgb25nb2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgaXMgYWxsb3dlZCBmb3IgUnhTdGF0ZSBvbmx5ICAgICAgICAgICAgICAgICAgICovCi0gIEhBTF9DRUNfU1RBVEVfQlVTWV9UWCAgICAgICAgICAgPSAweDIxVSwgICAgLyohPCBEYXRhIFRyYW5zbWlzc2lvbiBwcm9jZXNzIGlzIG9uZ29pbmcgCisgIEhBTF9DRUNfU1RBVEVfQlVTWV9UWCAgICAgICAgICAgPSAweDIxVSwgICAgLyohPCBEYXRhIFRyYW5zbWlzc2lvbiBwcm9jZXNzIGlzIG9uZ29pbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIGlzIGFsbG93ZWQgZm9yIGdTdGF0ZSBvbmx5ICAgICAgICAgICAgICAgICAgICAqLwogICBIQUxfQ0VDX1NUQVRFX0JVU1lfUlhfVFggICAgICAgID0gMHgyM1UsICAgIC8qITwgYW4gaW50ZXJuYWwgcHJvY2VzcyBpcyBvbmdvaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSBpcyBhbGxvd2VkIGZvciBnU3RhdGUgb25seSAgICAgICAgICAgICAgICAgICAgKi8KICAgSEFMX0NFQ19TVEFURV9FUlJPUiAgICAgICAgICAgICA9IDB4NjBVICAgICAvKiE8IEVycm9yIFZhbHVlIGlzIGFsbG93ZWQgZm9yIGdTdGF0ZSBvbmx5ICAgICAgICAgICAgICAqLwotfUhBTF9DRUNfU3RhdGVUeXBlRGVmOworfSBIQUxfQ0VDX1N0YXRlVHlwZURlZjsKIAotLyoqIAotICAqIEBicmllZiAgQ0VDIGhhbmRsZSBTdHJ1Y3R1cmUgZGVmaW5pdGlvbiAgCi0gICovICAKKy8qKgorICAqIEBicmllZiAgQ0VDIGhhbmRsZSBTdHJ1Y3R1cmUgZGVmaW5pdGlvbgorICAqLwogdHlwZWRlZiBzdHJ1Y3QgX19DRUNfSGFuZGxlVHlwZURlZgogewogICBDRUNfVHlwZURlZiAgICAgICAgICAgICAqSW5zdGFuY2U7ICAgICAgLyohPCBDRUMgcmVnaXN0ZXJzIGJhc2UgYWRkcmVzcyAqLwotICAKKwogICBDRUNfSW5pdFR5cGVEZWYgICAgICAgICBJbml0OyAgICAgICAgICAgLyohPCBDRUMgY29tbXVuaWNhdGlvbiBwYXJhbWV0ZXJzICovCi0gIAotICB1aW50OF90ICAgICAgICAgICAgICAgICAqcFR4QnVmZlB0cjsgICAgLyohPCBQb2ludGVyIHRvIENFQyBUeCB0cmFuc2ZlciBCdWZmZXIgKi8KLSAgCisKKyAgY29uc3QgdWludDhfdCAgICAgICAgICAgKnBUeEJ1ZmZQdHI7ICAgIC8qITwgUG9pbnRlciB0byBDRUMgVHggdHJhbnNmZXIgQnVmZmVyICovCisKICAgdWludDE2X3QgICAgICAgICAgICAgICAgVHhYZmVyQ291bnQ7ICAgIC8qITwgQ0VDIFR4IFRyYW5zZmVyIENvdW50ZXIgKi8KLSAgCisKICAgdWludDE2X3QgICAgICAgICAgICAgICAgUnhYZmVyU2l6ZTsgICAgIC8qITwgQ0VDIFJ4IFRyYW5zZmVyIHNpemUsIDA6IGhlYWRlciByZWNlaXZlZCBvbmx5ICovCi0gIAorCiAgIEhBTF9Mb2NrVHlwZURlZiAgICAgICAgIExvY2s7ICAgICAgICAgICAvKiE8IExvY2tpbmcgb2JqZWN0ICovCiAKLSAgSEFMX0NFQ19TdGF0ZVR5cGVEZWYgICAgZ1N0YXRlOyAgICAgICAgIC8qITwgQ0VDIHN0YXRlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gZ2xvYmFsIEhhbmRsZSBtYW5hZ2VtZW50IAorICBIQUxfQ0VDX1N0YXRlVHlwZURlZiAgICBnU3RhdGU7ICAgICAgICAgLyohPCBDRUMgc3RhdGUgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBnbG9iYWwgSGFuZGxlIG1hbmFnZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFsc28gcmVsYXRlZCB0byBUeCBvcGVyYXRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEhBTF9DRUNfU3RhdGVUeXBlRGVmICovCi0gIAorCiAgIEhBTF9DRUNfU3RhdGVUeXBlRGVmICAgIFJ4U3RhdGU7ICAgICAgICAvKiE8IENFQyBzdGF0ZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIFJ4IG9wZXJhdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSEFMX0NFQ19TdGF0ZVR5cGVEZWYgKi8KLSAgCi0gIHVpbnQzMl90ICAgICAgICAgICAgICAgIEVycm9yQ29kZTsgICAgICAvKiE8IEZvciBlcnJvcnMgaGFuZGxpbmcgcHVycG9zZXMsIGNvcHkgb2YgSVNSIHJlZ2lzdGVyIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBjYXNlIGVycm9yIGlzIHJlcG9ydGVkICovICAKKworICB1aW50MzJfdCAgICAgICAgICAgICAgICBFcnJvckNvZGU7ICAgICAgLyohPCBGb3IgZXJyb3JzIGhhbmRsaW5nIHB1cnBvc2VzLCBjb3B5IG9mIElTUiByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBjYXNlIGVycm9yIGlzIHJlcG9ydGVkICovCiAKICNpZiAoVVNFX0hBTF9DRUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gIHZvaWQgICgqIFR4Q3BsdENhbGxiYWNrKSAoIHN0cnVjdCBfX0NFQ19IYW5kbGVUeXBlRGVmICogaGNlYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0VDIFR4IFRyYW5zZmVyIGNvbXBsZXRlZCBjYWxsYmFjayAqLwotICB2b2lkICAoKiBSeENwbHRDYWxsYmFjaykgKCBzdHJ1Y3QgX19DRUNfSGFuZGxlVHlwZURlZiAqIGhjZWMsIHVpbnQzMl90IFJ4RnJhbWVTaXplKTsgICAgICAvKiE8IENFQyBSeCBUcmFuc2ZlciBjb21wbGV0ZWQgY2FsbGJhY2sgKi8KLSAgdm9pZCAgKCogRXJyb3JDYWxsYmFjaykgICggc3RydWN0IF9fQ0VDX0hhbmRsZVR5cGVEZWYgKiBoY2VjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDRUMgZXJyb3IgY2FsbGJhY2sgKi8KKyAgdm9pZCAoKiBUeENwbHRDYWxsYmFjaykoc3RydWN0IF9fQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpOyAvKiE8IENFQyBUeCBUcmFuc2ZlciBjb21wbGV0ZWQgY2FsbGJhY2sgKi8KKyAgdm9pZCAoKiBSeENwbHRDYWxsYmFjaykoc3RydWN0IF9fQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFJ4RnJhbWVTaXplKTsgICAgICAgICAgLyohPCBDRUMgUnggVHJhbnNmZXIgY29tcGxldGVkIGNhbGxiYWNrICAgICovCisgIHZvaWQgKCogRXJyb3JDYWxsYmFjaykoc3RydWN0IF9fQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpOyAvKiE8IENFQyBlcnJvciBjYWxsYmFjayAgICAgICAgICAgICAgICAgICovCiAKLSAgdm9pZCAgKCogTXNwSW5pdENhbGxiYWNrKSAgICAgICAgKCBzdHJ1Y3QgX19DRUNfSGFuZGxlVHlwZURlZiAqIGhjZWMpOyAgICAvKiE8IENFQyBNc3AgSW5pdCBjYWxsYmFjayAgICAgICAgICAgICAgKi8KLSAgdm9pZCAgKCogTXNwRGVJbml0Q2FsbGJhY2spICAgICAgKCBzdHJ1Y3QgX19DRUNfSGFuZGxlVHlwZURlZiAqIGhjZWMpOyAgICAvKiE8IENFQyBNc3AgRGVJbml0IGNhbGxiYWNrICAgICAgICAgICAgKi8KKyAgdm9pZCAoKiBNc3BJbml0Q2FsbGJhY2spKHN0cnVjdCBfX0NFQ19IYW5kbGVUeXBlRGVmICpoY2VjKTsgICAgICAgICAgICAgICAvKiE8IENFQyBNc3AgSW5pdCBjYWxsYmFjayAgICAgICAgICAgICAgKi8KKyAgdm9pZCAoKiBNc3BEZUluaXRDYWxsYmFjaykoc3RydWN0IF9fQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpOyAgICAgICAgICAgICAvKiE8IENFQyBNc3AgRGVJbml0IGNhbGxiYWNrICAgICAgICAgICAgKi8KIAotI2VuZGlmIC8qIChVU0VfSEFMX0NFQ19SRUdJU1RFUl9DQUxMQkFDS1MpICovCQkJCQkJCQkJCQkgICAKLX1DRUNfSGFuZGxlVHlwZURlZjsKKyNlbmRpZiAvKiAoVVNFX0hBTF9DRUNfUkVHSVNURVJfQ0FMTEJBQ0tTKSAqLworfSBDRUNfSGFuZGxlVHlwZURlZjsKIAogI2lmIChVU0VfSEFMX0NFQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKIC8qKgpAQCAtMTU3LDE2ICsxNjMsMTggQEAKIHsKICAgSEFMX0NFQ19UWF9DUExUX0NCX0lEICAgICAgPSAweDAwVSwgICAgLyohPCBDRUMgVHggVHJhbnNmZXIgY29tcGxldGVkIGNhbGxiYWNrIElEICAqLwogICBIQUxfQ0VDX1JYX0NQTFRfQ0JfSUQgICAgICA9IDB4MDFVLCAgICAvKiE8IENFQyBSeCBUcmFuc2ZlciBjb21wbGV0ZWQgY2FsbGJhY2sgSUQgICovCi0gIEhBTF9DRUNfRVJST1JfQ0JfSUQgICAgICAgID0gMHgwMlUsICAgIC8qITwgQ0VDIGVycm9yIGNhbGxiYWNrICBJRCAgICAgICAgICAgICAgICAgKi8KKyAgSEFMX0NFQ19FUlJPUl9DQl9JRCAgICAgICAgPSAweDAyVSwgICAgLyohPCBDRUMgZXJyb3IgY2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAqLwogICBIQUxfQ0VDX01TUElOSVRfQ0JfSUQgICAgICA9IDB4MDNVLCAgICAvKiE8IENFQyBNc3AgSW5pdCBjYWxsYmFjayBJRCAgICAgICAgICAgICAgICovCiAgIEhBTF9DRUNfTVNQREVJTklUX0NCX0lEICAgID0gMHgwNFUgICAgIC8qITwgQ0VDIE1zcCBEZUluaXQgY2FsbGJhY2sgSUQgICAgICAgICAgICAgKi8KLX1IQUxfQ0VDX0NhbGxiYWNrSURUeXBlRGVmOworfSBIQUxfQ0VDX0NhbGxiYWNrSURUeXBlRGVmOwogCiAvKioKICAgKiBAYnJpZWYgIEhBTCBDRUMgQ2FsbGJhY2sgcG9pbnRlciBkZWZpbml0aW9uCiAgICovCi10eXBlZGVmICB2b2lkICgqcENFQ19DYWxsYmFja1R5cGVEZWYpKENFQ19IYW5kbGVUeXBlRGVmICogaGNlYyk7IC8qITwgcG9pbnRlciB0byBhbiBDRUMgY2FsbGJhY2sgZnVuY3Rpb24gKi8KLXR5cGVkZWYgIHZvaWQgKCpwQ0VDX1J4Q2FsbGJhY2tUeXBlRGVmKShDRUNfSGFuZGxlVHlwZURlZiAqIGhjZWMsIHVpbnQzMl90IFJ4RnJhbWVTaXplKTsgLyohPCBwb2ludGVyIHRvIGFuIFJ4IFRyYW5zZmVyIGNvbXBsZXRlZCBjYWxsYmFjayBmdW5jdGlvbiAqLwordHlwZWRlZiAgdm9pZCAoKnBDRUNfQ2FsbGJhY2tUeXBlRGVmKShDRUNfSGFuZGxlVHlwZURlZiAqaGNlYyk7ICAvKiE8IHBvaW50ZXIgdG8gYW4gQ0VDIGNhbGxiYWNrIGZ1bmN0aW9uICovCit0eXBlZGVmICB2b2lkICgqcENFQ19SeENhbGxiYWNrVHlwZURlZikoQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgUnhGcmFtZVNpemUpOyAgLyohPCBwb2ludGVyIHRvIGFuIFJ4IFRyYW5zZmVyIGNvbXBsZXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgZnVuY3Rpb24gKi8KICNlbmRpZiAvKiBVU0VfSEFMX0NFQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIC8qKgogICAqIEB9CkBAIC0xOTcsNyArMjA1LDcgQEAKIAogLyoqIEBkZWZncm91cCBDRUNfQml0VGltaW5nRXJyb3JNb2RlIEJpdCBUaW1pbmcgRXJyb3IgTW9kZQogICAqIEB7Ci0gICovIAorICAqLwogI2RlZmluZSBDRUNfQklUX1RJTUlOR19FUlJPUl9NT0RFX1NUQU5EQVJEICAweDAwMDAwMDAwVSAgICAgIC8qITwgQml0IHRpbWluZyBlcnJvciBTdGFuZGFyZCBNb2RlICovCiAjZGVmaW5lIENFQ19CSVRfVElNSU5HX0VSUk9SX01PREVfRVJST1JGUkVFIENFQ19DRkdSX0JURU0gICAgLyohPCBCaXQgdGltaW5nIGVycm9yIEZyZWUgTW9kZSAqLwogLyoqCkBAIC0yMDYsMTQgKzIxNCwxNCBAQAogCiAvKiogQGRlZmdyb3VwIENFQ19CaXRQZXJpb2RFcnJvck1vZGUgQml0IFBlcmlvZCBFcnJvciBNb2RlCiAgICogQHsKLSAgKi8gCisgICovCiAjZGVmaW5lIENFQ19CSVRfUEVSSU9EX0VSUk9SX01PREVfU1RBTkRBUkQgMHgwMDAwMDAwMFUgICAgICAvKiE8IEJpdCBwZXJpb2QgZXJyb3IgU3RhbmRhcmQgTW9kZSAqLwogI2RlZmluZSBDRUNfQklUX1BFUklPRF9FUlJPUl9NT0RFX0ZMRVhJQkxFIENFQ19DRkdSX0JQRU0gICAgLyohPCBCaXQgcGVyaW9kIGVycm9yIEZsZXhpYmxlIE1vZGUgKi8KIC8qKgogICAqIEB9Ci0gICovIAotICAKLS8qKiBAZGVmZ3JvdXAgQ0VDX0luaXRpYXRvcl9Qb3NpdGlvbiAgIENFQyBJbml0aWF0b3IgbG9naWNhbCBhZGRyZXNzIHBvc2l0aW9uIGluIG1lc3NhZ2UgaGVhZGVyICAgICAKKyAgKi8KKworLyoqIEBkZWZncm91cCBDRUNfSW5pdGlhdG9yX1Bvc2l0aW9uICAgQ0VDIEluaXRpYXRvciBsb2dpY2FsIGFkZHJlc3MgcG9zaXRpb24gaW4gbWVzc2FnZSBoZWFkZXIKICAgKiBAewogICAqLwogI2RlZmluZSBDRUNfSU5JVElBVE9SX0xTQl9QT1MgICAgICAgICAgICAgICAgICA0VQpAQCAtMjIxLDcgKzIyOSw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBDRUNfT1dOX0FERFJFU1MgICBDRUMgT3duIEFkZHJlc3MgICAgCisvKiogQGRlZmdyb3VwIENFQ19PV05fQUREUkVTUyAgIENFQyBPd24gQWRkcmVzcwogICAqIEB7CiAgICovCiAjZGVmaW5lIENFQ19PV05fQUREUkVTU19OT05FICAgICAgICAgICAgQ0VDX09XTl9BRERSRVNTXzAgICAgLyogUmVzZXQgdmFsdWUgKi8KQEAgLTI2NywxOCArMjc1LDE4IEBACiAvKioKICAgKiBAfQogICAqLwotICAKKwogLyoqCiAgICogQH0KLSAgKi8gIAotICAKKyAgKi8KKwogLyogRXhwb3J0ZWQgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAZGVmZ3JvdXAgQ0VDX0V4cG9ydGVkX01hY3JvcyBDRUMgRXhwb3J0ZWQgTWFjcm9zCiAgICogQHsKICAgKi8KIAogLyoqIEBicmllZiAgUmVzZXQgQ0VDIGhhbmRsZSBnc3RhdGUgJiBSeFN0YXRlCi0gICogQHBhcmFtICBfX0hBTkRMRV9fOiBDRUMgaGFuZGxlLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBDRUMgaGFuZGxlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2lmIChVU0VfSEFMX0NFQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKQEAgLTI4OCw3ICsyOTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwSW5pdENhbGxiYWNrID0gTlVMTDsgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcERlSW5pdENhbGxiYWNrID0gTlVMTDsgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKLSNlbHNlICAKKyNlbHNlCiAjZGVmaW5lIF9fSEFMX0NFQ19SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgZG97ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Z1N0YXRlID0gSEFMX0NFQ19TVEFURV9SRVNFVDsgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlJ4U3RhdGUgPSBIQUxfQ0VDX1NUQVRFX1JFU0VUOyAgICBcCkBAIC0yOTYsMTA2ICszMDQsMTA2IEBACiAjZW5kaWYgLyogVVNFX0hBTF9DRUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKIC8qKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGUgc3BlY2lmaWVkIENFQyBpbnRlcnJ1cHQgZmxhZyBpcyBzZXQuCi0gICogQHBhcmFtICBfX0hBTkRMRV9fOiBzcGVjaWZpZXMgdGhlIENFQyBIYW5kbGUuCi0gICogQHBhcmFtICBfX0ZMQUdfXzogc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNoZWNrLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIENFQyBIYW5kbGUuCisgICogQHBhcmFtICBfX0ZMQUdfXyBzcGVjaWZpZXMgdGhlIGZsYWcgdG8gY2hlY2suCiAgICogICAgIEBhcmcgQ0VDX0ZMQUdfVEVSUjogVHggRXJyb3IKICAgKiAgICAgQGFyZyBDRUNfRkxBR19UQlRSRjpUeCBCbG9jayBUcmFuc2ZlciBGaW5pc2hlZAogICAqICAgICBAYXJnIENFQ19GTEFHX1JFUlI6IFJ4IEVycm9yCiAgICogICAgIEBhcmcgQ0VDX0ZMQUdfUkJURjogUnggQmxvY2sgVHJhbnNmZXIgRmluaXNoZWQKICAgKiBAcmV0dmFsIElUU3RhdHVzCiAgICovCi0jZGVmaW5lIF9fSEFMX0NFQ19HRVRfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgUkVBRF9CSVQoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1NSLChfX0ZMQUdfXykpIAorI2RlZmluZSBfX0hBTF9DRUNfR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pIFJFQURfQklUKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNTUiwoX19GTEFHX18pKQogCiAvKiogQGJyaWVmICBDbGVhcnMgdGhlIENFQydzIHBlbmRpbmcgZmxhZ3MuCi0gICogQHBhcmFtICBfX0hBTkRMRV9fOiBzcGVjaWZpZXMgdGhlIENFQyBIYW5kbGUuCi0gICogQHBhcmFtICBfX0ZMQUdfXzogc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNsZWFyLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIENFQyBIYW5kbGUuCisgICogQHBhcmFtICBfX0ZMQUdfXyBzcGVjaWZpZXMgdGhlIGZsYWcgdG8gY2xlYXIuCiAgICogICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICBAYXJnIENFQ19DU1JfVEVSUjogVHggRXJyb3IKICAgKiAgICAgQGFyZyBDRUNfRkxBR19UQlRSRjogVHggQmxvY2sgVHJhbnNmZXIgRmluaXNoZWQKICAgKiAgICAgQGFyZyBDRUNfQ1NSX1JFUlI6IFJ4IEVycm9yCiAgICogICAgIEBhcmcgQ0VDX0NTUl9SQlRGOiBSeCBCbG9jayBUcmFuc2ZlciBGaW5pc2hlZAotICAqIEByZXR2YWwgbm9uZSAgCisgICogQHJldHZhbCBub25lCiAgICovCiAjZGVmaW5lIF9fSEFMX0NFQ19DTEVBUl9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdG1wID0gMHgwVTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1NSICYgMHgwMDAwMDAwMlU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1NSICY9ICh1aW50MzJfdCkoKCh+KHVpbnQzMl90KShfX0ZMQUdfXykpICYgMHhGRkZGRkZGQ1UpIHwgdG1wKTtcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMFUpCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdWludDMyX3QgdG1wID0gMHgwVTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdG1wID0gKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1NSICYgMHgwMDAwMDAwMlU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1NSICY9ICh1aW50MzJfdCkoKCh+KHVpbnQzMl90KShfX0ZMQUdfXykpICYgMHhGRkZGRkZGQ1UpIHwgdG1wKTtcCisgIH0gd2hpbGUoMFUpCiAKIC8qKiBAYnJpZWYgIEVuYWJsZXMgdGhlIHNwZWNpZmllZCBDRUMgaW50ZXJydXB0LgotICAqIEBwYXJhbSAgX19IQU5ETEVfXzogc3BlY2lmaWVzIHRoZSBDRUMgSGFuZGxlLgotICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXzogc3BlY2lmaWVzIHRoZSBDRUMgaW50ZXJydXB0IHRvIGVuYWJsZS4KLSAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6CisgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgQ0VDIEhhbmRsZS4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBDRUMgaW50ZXJydXB0IHRvIGVuYWJsZS4KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBDRUNfSVRfSUUgICAgICAgICA6IEludGVycnVwdCBFbmFibGUuCiAgICogQHJldHZhbCBub25lCiAgICovCiAjZGVmaW5lIF9fSEFMX0NFQ19FTkFCTEVfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgU0VUX0JJVCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DRkdSLCAoX19JTlRFUlJVUFRfXykpCiAKIC8qKiBAYnJpZWYgIERpc2FibGVzIHRoZSBzcGVjaWZpZWQgQ0VDIGludGVycnVwdC4KLSAgKiBAcGFyYW0gIF9fSEFORExFX186IHNwZWNpZmllcyB0aGUgQ0VDIEhhbmRsZS4KLSAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX186IHNwZWNpZmllcyB0aGUgQ0VDIGludGVycnVwdCB0byBkaXNhYmxlLgotICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKKyAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBDRUMgSGFuZGxlLgorICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIENFQyBpbnRlcnJ1cHQgdG8gZGlzYWJsZS4KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBDRUNfSVRfSUUgICAgICAgICA6IEludGVycnVwdCBFbmFibGUKICAgKiBAcmV0dmFsIG5vbmUKLSAgKi8gICAKKyAgKi8KICNkZWZpbmUgX19IQUxfQ0VDX0RJU0FCTEVfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgQ0xFQVJfQklUKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNGR1IsIChfX0lOVEVSUlVQVF9fKSkKIAogLyoqIEBicmllZiAgQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoZSBzcGVjaWZpZWQgQ0VDIGludGVycnVwdCBpcyBlbmFibGVkLgotICAqIEBwYXJhbSAgX19IQU5ETEVfXzogc3BlY2lmaWVzIHRoZSBDRUMgSGFuZGxlLgotICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXzogc3BlY2lmaWVzIHRoZSBDRUMgaW50ZXJydXB0IHRvIGNoZWNrLgotICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKKyAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBDRUMgSGFuZGxlLgorICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIENFQyBpbnRlcnJ1cHQgdG8gY2hlY2suCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgQ0VDX0lUX0lFICAgICAgICAgOiBJbnRlcnJ1cHQgRW5hYmxlCi0gICogQHJldHZhbCBGbGFnU3RhdHVzICAKKyAgKiBAcmV0dmFsIEZsYWdTdGF0dXMKICAgKi8KICNkZWZpbmUgX19IQUxfQ0VDX0dFVF9JVF9TT1VSQ0UoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgUkVBRF9CSVQoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0ZHUiwgKF9fSU5URVJSVVBUX18pKQogCiAvKiogQGJyaWVmICBFbmFibGVzIHRoZSBDRUMgZGV2aWNlCi0gICogQHBhcmFtICBfX0hBTkRMRV9fOiBzcGVjaWZpZXMgdGhlIENFQyBIYW5kbGUuICAgICAgICAgICAgICAgCi0gICogQHJldHZhbCBub25lIAorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIENFQyBIYW5kbGUuCisgICogQHJldHZhbCBub25lCiAgICovCiAjZGVmaW5lIF9fSEFMX0NFQ19FTkFCTEUoX19IQU5ETEVfXykgU0VUX0JJVCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DRkdSLCBDRUNfQ0ZHUl9QRSkKIAogLyoqIEBicmllZiAgRGlzYWJsZXMgdGhlIENFQyBkZXZpY2UKLSAgKiBAcGFyYW0gIF9fSEFORExFX186IHNwZWNpZmllcyB0aGUgQ0VDIEhhbmRsZS4gICAgICAgICAgICAgICAKLSAgKiBAcmV0dmFsIG5vbmUgCisgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgQ0VDIEhhbmRsZS4KKyAgKiBAcmV0dmFsIG5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfQ0VDX0RJU0FCTEUoX19IQU5ETEVfXykgQ0xFQVJfQklUKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNGR1IsIENFQ19DRkdSX1BFKQogCiAvKiogQGJyaWVmICBTZXQgVHJhbnNtaXNzaW9uIFN0YXJ0IGZsYWcKLSAgKiBAcGFyYW0gIF9fSEFORExFX186IHNwZWNpZmllcyB0aGUgQ0VDIEhhbmRsZS4gICAgICAgICAgICAgICAKLSAgKiBAcmV0dmFsIG5vbmUgCisgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgQ0VDIEhhbmRsZS4KKyAgKiBAcmV0dmFsIG5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfQ0VDX0ZJUlNUX0JZVEVfVFhfU0VUKF9fSEFORExFX18pIFNFVF9CSVQoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1NSLCBDRUNfQ1NSX1RTT00pCiAKIC8qKiBAYnJpZWYgIFNldCBUcmFuc21pc3Npb24gRW5kIGZsYWcKLSAgKiBAcGFyYW0gIF9fSEFORExFX186IHNwZWNpZmllcyB0aGUgQ0VDIEhhbmRsZS4gICAgICAgICAgICAgICAKKyAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBDRUMgSGFuZGxlLgogICAqIEByZXR2YWwgbm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9DRUNfTEFTVF9CWVRFX1RYX1NFVChfX0hBTkRMRV9fKSBTRVRfQklUKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNTUiwgQ0VDX0NTUl9URU9NKQogCiAvKiogQGJyaWVmICBHZXQgVHJhbnNtaXNzaW9uIFN0YXJ0IGZsYWcKLSAgKiBAcGFyYW0gIF9fSEFORExFX186IHNwZWNpZmllcyB0aGUgQ0VDIEhhbmRsZS4gICAgICAgICAgICAgICAKLSAgKiBAcmV0dmFsIEZsYWdTdGF0dXMgCisgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgQ0VDIEhhbmRsZS4KKyAgKiBAcmV0dmFsIEZsYWdTdGF0dXMKICAgKi8KICNkZWZpbmUgX19IQUxfQ0VDX0dFVF9UUkFOU01JU1NJT05fU1RBUlRfRkxBRyhfX0hBTkRMRV9fKSBSRUFEX0JJVCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DU1IsIENFQ19DU1JfVFNPTSkKIAogLyoqIEBicmllZiAgR2V0IFRyYW5zbWlzc2lvbiBFbmQgZmxhZwotICAqIEBwYXJhbSAgX19IQU5ETEVfXzogc3BlY2lmaWVzIHRoZSBDRUMgSGFuZGxlLiAgICAgICAgICAgICAgIAotICAqIEByZXR2YWwgRmxhZ1N0YXR1cyAKKyAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBDRUMgSGFuZGxlLgorICAqIEByZXR2YWwgRmxhZ1N0YXR1cwogICAqLwogI2RlZmluZSBfX0hBTF9DRUNfR0VUX1RSQU5TTUlTU0lPTl9FTkRfRkxBRyhfX0hBTkRMRV9fKSBSRUFEX0JJVCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DU1IsIENFQ19DU1JfVEVPTSkKIAogLyoqIEBicmllZiAgQ2xlYXIgT0FSIHJlZ2lzdGVyCi0gICogQHBhcmFtICBfX0hBTkRMRV9fOiBzcGVjaWZpZXMgdGhlIENFQyBIYW5kbGUuICAgICAgICAgICAgICAgCi0gICogQHJldHZhbCBub25lIAorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIENFQyBIYW5kbGUuCisgICogQHJldHZhbCBub25lCiAgICovCiAjZGVmaW5lIF9fSEFMX0NFQ19DTEVBUl9PQVIoX19IQU5ETEVfXykgICBDTEVBUl9CSVQoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+T0FSLCBDRUNfT0FSX09BKQogCiAvKiogQGJyaWVmICBTZXQgT0FSIHJlZ2lzdGVyCi0gICogQHBhcmFtICBfX0hBTkRMRV9fOiBzcGVjaWZpZXMgdGhlIENFQyBIYW5kbGUuIAotICAqIEBwYXJhbSAgX19BRERSRVNTX186IE93biBBZGRyZXNzIHZhbHVlLgotICAqIEByZXR2YWwgbm9uZSAKKyAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBDRUMgSGFuZGxlLgorICAqIEBwYXJhbSAgX19BRERSRVNTX18gT3duIEFkZHJlc3MgdmFsdWUuCisgICogQHJldHZhbCBub25lCiAgICovCiAjZGVmaW5lIF9fSEFMX0NFQ19TRVRfT0FSKF9fSEFORExFX18sX19BRERSRVNTX18pIE1PRElGWV9SRUcoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+T0FSLCBDRUNfT0FSX09BLCAoX19BRERSRVNTX18pKTsKIApAQCAtNDA5LDcgKzQxNyw3IEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBDRUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCi0gICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgCisgICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKICAgKiBAewogICAqLwogLyogSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQxOCw4ICs0MjYsMTAgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9DRUNfU2V0RGV2aWNlQWRkcmVzcyhDRUNfSGFuZGxlVHlwZURlZiAqaGNlYywgdWludDE2X3QgQ0VDX093bkFkZHJlc3MpOwogdm9pZCBIQUxfQ0VDX01zcEluaXQoQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpOwogdm9pZCBIQUxfQ0VDX01zcERlSW5pdChDRUNfSGFuZGxlVHlwZURlZiAqaGNlYyk7CisKICNpZiAoVVNFX0hBTF9DRUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfQ0VDX1JlZ2lzdGVyQ2FsbGJhY2soQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMsIEhBTF9DRUNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwgcENFQ19DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9DRUNfUmVnaXN0ZXJDYWxsYmFjayhDRUNfSGFuZGxlVHlwZURlZiAqaGNlYywgSEFMX0NFQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDRUNfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfQ0VDX1VuUmVnaXN0ZXJDYWxsYmFjayhDRUNfSGFuZGxlVHlwZURlZiAqaGNlYywgSEFMX0NFQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKIAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NFQ19SZWdpc3RlclJ4Q3BsdENhbGxiYWNrKENFQ19IYW5kbGVUeXBlRGVmICpoY2VjLCBwQ0VDX1J4Q2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CkBAIC00MjksMTQgKzQzOSwxNSBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAYWRkdG9ncm91cCBDRUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMiBJbnB1dCBhbmQgT3V0cHV0IG9wZXJhdGlvbiBmdW5jdGlvbnMgCi0gICogIEBicmllZiBDRUMgVHJhbnNtaXQvUmVjZWl2ZSBmdW5jdGlvbnMgCisvKiogQGFkZHRvZ3JvdXAgQ0VDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIgSW5wdXQgYW5kIE91dHB1dCBvcGVyYXRpb24gZnVuY3Rpb25zCisgICogIEBicmllZiBDRUMgVHJhbnNtaXQvUmVjZWl2ZSBmdW5jdGlvbnMKICAgKiBAewogICAqLwogLyogSS9PIG9wZXJhdGlvbiBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9DRUNfVHJhbnNtaXRfSVQoQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMsIHVpbnQ4X3QgSW5pdGlhdG9yQWRkcmVzcyx1aW50OF90IERlc3RpbmF0aW9uQWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQzMl90IFNpemUpOwotdWludDMyX3QgSEFMX0NFQ19HZXRMYXN0UmVjZWl2ZWRGcmFtZVNpemUoQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpOwotdm9pZCBIQUxfQ0VDX0NoYW5nZVJ4QnVmZmVyKENFQ19IYW5kbGVUeXBlRGVmICpoY2VjLCB1aW50OF90KiBSeGJ1ZmZlcik7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfQ0VDX1RyYW5zbWl0X0lUKENFQ19IYW5kbGVUeXBlRGVmICpoY2VjLCB1aW50OF90IEluaXRpYXRvckFkZHJlc3MsIHVpbnQ4X3QgRGVzdGluYXRpb25BZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgU2l6ZSk7Cit1aW50MzJfdCBIQUxfQ0VDX0dldExhc3RSZWNlaXZlZEZyYW1lU2l6ZShjb25zdCBDRUNfSGFuZGxlVHlwZURlZiAqaGNlYyk7Cit2b2lkIEhBTF9DRUNfQ2hhbmdlUnhCdWZmZXIoQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMsIHVpbnQ4X3QgKlJ4YnVmZmVyKTsKIHZvaWQgSEFMX0NFQ19JUlFIYW5kbGVyKENFQ19IYW5kbGVUeXBlRGVmICpoY2VjKTsKIHZvaWQgSEFMX0NFQ19UeENwbHRDYWxsYmFjayhDRUNfSGFuZGxlVHlwZURlZiAqaGNlYyk7CiB2b2lkIEhBTF9DRUNfUnhDcGx0Q2FsbGJhY2soQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMsIHVpbnQzMl90IFJ4RnJhbWVTaXplKTsKQEAgLTQ0NSwxMyArNDU2LDEzIEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBDRUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zIAotICAqICBAYnJpZWYgICBDRUMgY29udHJvbCBmdW5jdGlvbnMgCisvKiogQGRlZmdyb3VwIENFQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKKyAgKiAgQGJyaWVmICAgQ0VDIGNvbnRyb2wgZnVuY3Rpb25zCiAgICogQHsKICAgKi8KLS8qIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9yIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfQ0VDX1N0YXRlVHlwZURlZiBIQUxfQ0VDX0dldFN0YXRlKENFQ19IYW5kbGVUeXBlRGVmICpoY2VjKTsKLXVpbnQzMl90IEhBTF9DRUNfR2V0RXJyb3IoQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpOworLyogUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0hBTF9DRUNfU3RhdGVUeXBlRGVmIEhBTF9DRUNfR2V0U3RhdGUoY29uc3QgQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpOwordWludDMyX3QgSEFMX0NFQ19HZXRFcnJvcihjb25zdCBDRUNfSGFuZGxlVHlwZURlZiAqaGNlYyk7CiAvKioKICAgKiBAfQogICAqLwpAQCAtNDU5LDcgKzQ3MCw3IEBACiAvKioKICAgKiBAfQogICAqLwotICAKKwogLyogUHJpdmF0ZSB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAZGVmZ3JvdXAgQ0VDX1ByaXZhdGVfVHlwZXMgQ0VDIFByaXZhdGUgVHlwZXMKICAgKiBAewpAQCAtNDY3LDE2ICs0NzgsMTYgQEAKIAogLyoqCiAgICogQH0KLSAgKi8gCisgICovCiAKIC8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGRlZmdyb3VwIENFQ19Qcml2YXRlX1ZhcmlhYmxlcyBDRUMgUHJpdmF0ZSBWYXJpYWJsZXMKICAgKiBAewogICAqLwotICAKKwogLyoqCiAgICogQH0KLSAgKi8gCisgICovCiAKIC8qIFByaXZhdGUgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGRlZmdyb3VwIENFQ19Qcml2YXRlX0NvbnN0YW50cyBDRUMgUHJpdmF0ZSBDb25zdGFudHMKQEAgLTQ4NSw3ICs0OTYsNyBAQAogCiAvKioKICAgKiBAfQotICAqLyAKKyAgKi8KIAogLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAZGVmZ3JvdXAgQ0VDX1ByaXZhdGVfTWFjcm9zIENFQyBQcml2YXRlIE1hY3JvcwpAQCAtNDk4LDI4ICs1MDksMjYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBDRUNfQklUX1BFUklPRF9FUlJPUl9NT0RFX0ZMRVhJQkxFKSkKIAogLyoqIEBicmllZiBDaGVjayBDRUMgbWVzc2FnZSBzaXplLgotICAqICAgICAgIFRoZSBtZXNzYWdlIHNpemUgaXMgdGhlIHBheWxvYWQgc2l6ZTogd2l0aG91dCBjb3VudGluZyB0aGUgaGVhZGVyLCAKLSAgKiAgICAgICBpdCB2YXJpZXMgZnJvbSAwIGJ5dGUgKHBpbmcgb3BlcmF0aW9uLCBvbmUgaGVhZGVyIG9ubHksIG5vIHBheWxvYWQpIHRvIAotICAqICAgICAgIDE1IGJ5dGVzICgxIG9wY29kZSBhbmQgdXAgdG8gMTQgb3BlcmFuZHMgZm9sbG93aW5nIHRoZSBoZWFkZXIpLiAKLSAgKiBAcGFyYW0gIF9fU0laRV9fOiBDRUMgbWVzc2FnZSBzaXplLiAgICAgICAgICAgICAgIAorICAqICAgICAgIFRoZSBtZXNzYWdlIHNpemUgaXMgdGhlIHBheWxvYWQgc2l6ZTogd2l0aG91dCBjb3VudGluZyB0aGUgaGVhZGVyLAorICAqICAgICAgIGl0IHZhcmllcyBmcm9tIDAgYnl0ZSAocGluZyBvcGVyYXRpb24sIG9uZSBoZWFkZXIgb25seSwgbm8gcGF5bG9hZCkgdG8KKyAgKiAgICAgICAxNSBieXRlcyAoMSBvcGNvZGUgYW5kIHVwIHRvIDE0IG9wZXJhbmRzIGZvbGxvd2luZyB0aGUgaGVhZGVyKS4KKyAgKiBAcGFyYW0gIF9fU0laRV9fIENFQyBtZXNzYWdlIHNpemUuCiAgICogQHJldHZhbCBUZXN0IHJlc3VsdCAoVFJVRSBvciBGQUxTRSkuCiAgICovCiAjZGVmaW5lIElTX0NFQ19NU0dTSVpFKF9fU0laRV9fKSAoKF9fU0laRV9fKSA8PSAweDEwVSkKKwogLyoqIEBicmllZiBDaGVjayBDRUMgZGV2aWNlIE93biBBZGRyZXNzIFJlZ2lzdGVyIChPQVIpIHNldHRpbmcuCi0gICogQHBhcmFtICBfX0FERFJFU1NfXzogQ0VDIG93biBhZGRyZXNzLiAgICAgICAgICAgICAgIAorICAqIEBwYXJhbSAgX19BRERSRVNTX18gQ0VDIG93biBhZGRyZXNzLgogICAqIEByZXR2YWwgVGVzdCByZXN1bHQgKFRSVUUgb3IgRkFMU0UpLgogICAqLwogI2RlZmluZSBJU19DRUNfT1dOX0FERFJFU1MoX19BRERSRVNTX18pICgoX19BRERSRVNTX18pIDw9IDB4MDAwMDAwMEZVKQogCiAvKiogQGJyaWVmIENoZWNrIENFQyBpbml0aWF0b3Igb3IgZGVzdGluYXRpb24gbG9naWNhbCBhZGRyZXNzIHNldHRpbmcuCi0gICogICAgICAgIEluaXRpYXRvciBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIGFyZSBjb2RlZCBvdmVyIDQgYml0cy4gCi0gICogQHBhcmFtICBfX0FERFJFU1NfXzogQ0VDIGluaXRpYXRvciBvciBsb2dpY2FsIGFkZHJlc3MuICAgICAgICAgICAgICAgCisgICogICAgICAgIEluaXRpYXRvciBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIGFyZSBjb2RlZCBvdmVyIDQgYml0cy4KKyAgKiBAcGFyYW0gIF9fQUREUkVTU19fIENFQyBpbml0aWF0b3Igb3IgbG9naWNhbCBhZGRyZXNzLgogICAqIEByZXR2YWwgVGVzdCByZXN1bHQgKFRSVUUgb3IgRkFMU0UpLgogICAqLwogI2RlZmluZSBJU19DRUNfQUREUkVTUyhfX0FERFJFU1NfXykgKChfX0FERFJFU1NfXykgPD0gMHgwMDAwMDAwRlUpCi0KLQotCiAvKioKICAgKiBAfQogICAqLwpAQCAtNTI3LDE4ICs1MzYsMTggQEAKIC8qKiBAZGVmZ3JvdXAgQ0VDX1ByaXZhdGVfRnVuY3Rpb25zIENFQyBQcml2YXRlIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCi0gIAotLyoqCi0gICogQH0KLSAgKi8KLSAgCi0vKioKLSAgKiBAfQotICAqLyAKIAogLyoqCiAgICogQH0KLSAgKi8gCisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCiAKICNlbmRpZiAvKiBDRUMgKi8KIApAQCAtNTQ3LDMgKzU1Niw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1RNMzJGMXh4X0hBTF9DRUNfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2hhbF9jb25mX3RlbXBsYXRlLmggYi9JbmMvc3RtMzJmMXh4X2hhbF9jb25mX3RlbXBsYXRlLmgKaW5kZXggYjhlNGQzZS4uNzM0MDJlYyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9oYWxfY29uZl90ZW1wbGF0ZS5oCisrKyBiL0luYy9zdG0zMmYxeHhfaGFsX2NvbmZfdGVtcGxhdGUuaApAQCAtMzkzLDMgKzM5Myw2IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1RNMzJGMXh4X0hBTF9DT05GX0ggKi8KKworCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfaGFsX2NvcnRleC5oIGIvSW5jL3N0bTMyZjF4eF9oYWxfY29ydGV4LmgKaW5kZXggMTYzZjYzYy4uZGZhNjlmZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9oYWxfY29ydGV4LmgKKysrIGIvSW5jL3N0bTMyZjF4eF9oYWxfY29ydGV4LmgKQEAgLTksOCArOSw4IEBACiAgICogQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbgorICAqIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KICAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQwNCwzICs0MDQsNSBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjF4eF9IQUxfQ09SVEVYX0ggKi8KKyAKKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9oYWxfY3JjLmggYi9JbmMvc3RtMzJmMXh4X2hhbF9jcmMuaAppbmRleCAwMDQ5ZDVjLi5iZjE3N2U0IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2hhbF9jcmMuaAorKysgYi9JbmMvc3RtMzJmMXh4X2hhbF9jcmMuaApAQCAtMTU3LDcgKzE1Nyw3IEBACiAvKiogQGRlZmdyb3VwIENSQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCiAgICogQHsKICAgKi8KLUhBTF9DUkNfU3RhdGVUeXBlRGVmIEhBTF9DUkNfR2V0U3RhdGUoQ1JDX0hhbmRsZVR5cGVEZWYgKmhjcmMpOworSEFMX0NSQ19TdGF0ZVR5cGVEZWYgSEFMX0NSQ19HZXRTdGF0ZShjb25zdCBDUkNfSGFuZGxlVHlwZURlZiAqaGNyYyk7CiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9oYWxfZGFjLmggYi9JbmMvc3RtMzJmMXh4X2hhbF9kYWMuaAppbmRleCA3NGE3MDY1Li4wMjc3ODg2IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2hhbF9kYWMuaAorKysgYi9JbmMvc3RtMzJmMXh4X2hhbF9kYWMuaApAQCAtNzgsMTkgKzc4LDE5IEBACiAgIF9fSU8gdWludDMyX3QgICAgICAgICAgICAgICBFcnJvckNvZGU7ICAgICAvKiE8IERBQyBFcnJvciBjb2RlICAgICAgICAgICAgICAgICAgICAqLwogCiAjaWYgKFVTRV9IQUxfREFDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotICB2b2lkICgqIENvbnZDcGx0Q2FsbGJhY2tDaDEpICAgICAgICAgICAgKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKLSAgdm9pZCAoKiBDb252SGFsZkNwbHRDYWxsYmFja0NoMSkgICAgICAgIChzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7Ci0gIHZvaWQgKCogRXJyb3JDYWxsYmFja0NoMSkgICAgICAgICAgICAgICAoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwotICB2b2lkICgqIERNQVVuZGVycnVuQ2FsbGJhY2tDaDEpICAgICAgICAgKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKKyAgdm9pZCAoKiBDb252Q3BsdENhbGxiYWNrQ2gxKShzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisgIHZvaWQgKCogQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDEpKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKKyAgdm9pZCAoKiBFcnJvckNhbGxiYWNrQ2gxKShzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisgIHZvaWQgKCogRE1BVW5kZXJydW5DYWxsYmFja0NoMSkoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwogCi0gIHZvaWQgKCogQ29udkNwbHRDYWxsYmFja0NoMikgICAgICAgICAgICAoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwotICB2b2lkICgqIENvbnZIYWxmQ3BsdENhbGxiYWNrQ2gyKSAgICAgICAgKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKLSAgdm9pZCAoKiBFcnJvckNhbGxiYWNrQ2gyKSAgICAgICAgICAgICAgIChzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7Ci0gIHZvaWQgKCogRE1BVW5kZXJydW5DYWxsYmFja0NoMikgICAgICAgICAoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOworICB2b2lkICgqIENvbnZDcGx0Q2FsbGJhY2tDaDIpKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKKyAgdm9pZCAoKiBDb252SGFsZkNwbHRDYWxsYmFja0NoMikoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOworICB2b2lkICgqIEVycm9yQ2FsbGJhY2tDaDIpKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKKyAgdm9pZCAoKiBETUFVbmRlcnJ1bkNhbGxiYWNrQ2gyKShzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CiAKIAotICB2b2lkICgqIE1zcEluaXRDYWxsYmFjaykgICAgICAgICAgICAgICAgKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKLSAgdm9pZCAoKiBNc3BEZUluaXRDYWxsYmFjaykgICAgICAgICAgICAgIChzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisgIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisgIHZvaWQgKCogTXNwRGVJbml0Q2FsbGJhY2spKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKICNlbmRpZiAvKiBVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogfSBEQUNfSGFuZGxlVHlwZURlZjsKQEAgLTM4MSw3ICszODEsNyBAQAogLyogSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfU3RhcnQoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IENoYW5uZWwpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19TdG9wKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCB1aW50MzJfdCBDaGFubmVsKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfU3RhcnRfRE1BKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCAqcERhdGEsIHVpbnQzMl90IExlbmd0aCwKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfU3RhcnRfRE1BKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCB1aW50MzJfdCBDaGFubmVsLCBjb25zdCB1aW50MzJfdCAqcERhdGEsIHVpbnQzMl90IExlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEFsaWdubWVudCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1N0b3BfRE1BKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCB1aW50MzJfdCBDaGFubmVsKTsKIHZvaWQgSEFMX0RBQ19JUlFIYW5kbGVyKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKQEAgLTQwNyw4ICs0MDcsOSBAQAogICAqIEB7CiAgICovCiAvKiBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdWludDMyX3QgSEFMX0RBQ19HZXRWYWx1ZShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX0NvbmZpZ0NoYW5uZWwoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIERBQ19DaGFubmVsQ29uZlR5cGVEZWYgKnNDb25maWcsIHVpbnQzMl90IENoYW5uZWwpOwordWludDMyX3QgSEFMX0RBQ19HZXRWYWx1ZShjb25zdCBEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX0NvbmZpZ0NoYW5uZWwoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgREFDX0NoYW5uZWxDb25mVHlwZURlZiAqc0NvbmZpZywgdWludDMyX3QgQ2hhbm5lbCk7CiAvKioKICAgKiBAfQogICAqLwpAQCAtNDE3LDggKzQxOCw4IEBACiAgICogQHsKICAgKi8KIC8qIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9yIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfREFDX1N0YXRlVHlwZURlZiBIQUxfREFDX0dldFN0YXRlKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKLXVpbnQzMl90IEhBTF9EQUNfR2V0RXJyb3IoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOworSEFMX0RBQ19TdGF0ZVR5cGVEZWYgSEFMX0RBQ19HZXRTdGF0ZShjb25zdCBEQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7Cit1aW50MzJfdCBIQUxfREFDX0dldEVycm9yKGNvbnN0IERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKIAogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfaGFsX2RhY19leC5oIGIvSW5jL3N0bTMyZjF4eF9oYWxfZGFjX2V4LmgKaW5kZXggMDNiNmNjMC4uMjVlOGJjMCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9oYWxfZGFjX2V4LmgKKysrIGIvSW5jL3N0bTMyZjF4eF9oYWxfZGFjX2V4LmgKQEAgLTg0LDcgKzg0LDcgQEAKIC8qKiBAZGVmZ3JvdXAgREFDRXhfdHJpZ2dlcl9zZWxlY3Rpb24gREFDIHRyaWdnZXIgc2VsZWN0aW9uCiAgICogQHsKICAgKi8KLSNkZWZpbmUgREFDX1RSSUdHRVJfTk9ORSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgIC8qITwgQ29udmVyc2lvbiBpcyBhdXRvbWF0aWMgb25jZSB0aGUgREFDMV9ESFJ4eHh4IHJlZ2lzdGVyIAorI2RlZmluZSBEQUNfVFJJR0dFUl9OT05FICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgLyohPCBDb252ZXJzaW9uIGlzIGF1dG9tYXRpYyBvbmNlIHRoZSBEQUMxX0RIUnh4eHggcmVnaXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gbG9hZGVkLCBhbmQgbm90IGJ5IGV4dGVybmFsIHRyaWdnZXIgKi8KICNkZWZpbmUgREFDX1RSSUdHRVJfVDZfVFJHTyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQUNfQ1JfVEVOMSkgIC8qITwgVElNNiBUUkdPIHNlbGVjdGVkIGFzIGV4dGVybmFsIGNvbnZlcnNpb24gdHJpZ2dlciBmb3IgREFDIGNoYW5uZWwgKi8KICNkZWZpbmUgREFDX1RSSUdHRVJfVDdfVFJHTyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KSggICAgICAgICAgICAgICAgIERBQ19DUl9UU0VMMV8xICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfVEVOMSkpIC8qITwgVElNNyBUUkdPIHNlbGVjdGVkIGFzIGV4dGVybmFsIGNvbnZlcnNpb24gdHJpZ2dlciBmb3IgREFDIGNoYW5uZWwgKi8KQEAgLTk3LDcgKzk3LDcgQEAKIC8qIEZvciBTVE0zMkYxMHggaGlnaC1kZW5zaXR5IGFuZCBYTC1kZW5zaXR5IGRldmljZXM6IFRJTTggKi8KICNkZWZpbmUgREFDX1RSSUdHRVJfVDhfVFJHTyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFDX0NSX1RTRUwxXzAgfCBEQUNfQ1JfVEVOMSkgIC8qITwgVElNOCBUUkdPIHNlbGVjdGVkIGFzIGV4dGVybmFsIGNvbnZlcnNpb24gdHJpZ2dlciBmb3IgREFDIGNoYW5uZWwgKi8KICNlbmRpZiAvKiBTVE0zMkYxMDF4RSB8fCBTVE0zMkYxMDF4RyB8fCBTVE0zMkYxMDN4RSB8fCBTVE0zMkYxMDN4RyAqLwotICAgCisKICNpZiBkZWZpbmVkIChTVE0zMkYxMDB4QikgfHwgZGVmaW5lZCAoU1RNMzJGMTAweEUpIHx8IGRlZmluZWQgKFNUTTMyRjEwNXhDKSB8fCBkZWZpbmVkIChTVE0zMkYxMDd4QykKIC8qIEZvciBTVE0zMkYxMHggY29ubmVjdGl2aXR5IGxpbmUgZGV2aWNlcyBhbmQgU1RNMzJGMTAweCBkZXZpY2VzOiBUSU0zICovCiAjZGVmaW5lIERBQ19UUklHR0VSX1QzX1RSR08gICAgICAgICAgICAgICAgKCh1aW50MzJfdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBQ19DUl9UU0VMMV8wIHwgREFDX0NSX1RFTjEpICAvKiE8IFRJTTMgVFJHTyBzZWxlY3RlZCBhcyBleHRlcm5hbCBjb252ZXJzaW9uIHRyaWdnZXIgZm9yIERBQyBjaGFubmVsICovCkBAIC0xMTksMTkgKzExOSwyMCBAQAogCiAjaWYgZGVmaW5lZCAoU1RNMzJGMTAweEUpCiAvKiE8IERBQyB0cmlnZ2VyIGF2YWlsYWJpbGl0eSBkZXBlbmRpbmcgb24gU1RNMzJGMSBkZXZpY2VzOgotICAgICBGb3IgU1RNMzJGMTAweCBoaWdoLWRlbnNpdHkgdmFsdWUgbGluZSBkZXZpY2VzLCB0aGUgVElNMTUgVFJHTyBldmVudCBjYW4gYmUgc2VsZWN0ZWQgCisgICAgIEZvciBTVE0zMkYxMDB4IGhpZ2gtZGVuc2l0eSB2YWx1ZSBsaW5lIGRldmljZXMsIHRoZSBUSU0xNSBUUkdPIGV2ZW50IGNhbiBiZSBzZWxlY3RlZAogICAgICBhcyByZXBsYWNlbWVudCBvZiBUSU01IFRSR08gaWYgdGhlIE1JU0NfUkVNQVAgYml0IGluIHRoZSBBRklPX01BUFIyIHJlZ2lzdGVyIGlzIHNldC4KICAgICAgUmVmZXIgdG8gbWFjcm8gIl9fSEFMX0FGSU9fUkVNQVBfTUlTQ19FTkFCTEUoKS9fX0hBTF9BRklPX1JFTUFQX01JU0NfRElTQUJMRSgpIi4KICAgICAgT3RoZXJ3aXNlLCBUSU01IFRSR08gaXMgdXNlZCBhbmQgVElNMTUgVFJHTyBpcyBub3QgdXNlZCAoZGVmYXVsdCBjYXNlKS4KICAgICAgRm9yIG1vcmUgZGV0YWlscyBwbGVhc2UgcmVmZXIgdG8gdGhlIEFGSU8gc2VjdGlvbi4gKi8KICNkZWZpbmUgREFDX1RSSUdHRVJfVDE1X1RSR08gICAgREFDX1RSSUdHRVJfVDVfVFJHTwogI2VuZGlmIC8qIFNUTTMyRjEwMHhFICovCi0gICAKKwogI2VuZGlmIC8qIFNUTTMyRjEwMHhCICovCiAvKioKICAgKiBAfQogICAqLwogCisKIC8qKgogICAqIEB9CiAgICovCkBAIC0yMjQsNyArMjI1LDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNFeF9EdWFsU3RhcnQoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ0V4X0R1YWxTdG9wKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNFeF9EdWFsU2V0VmFsdWUoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IEFsaWdubWVudCwgdWludDMyX3QgRGF0YTEsIHVpbnQzMl90IERhdGEyKTsKLXVpbnQzMl90IEhBTF9EQUNFeF9EdWFsR2V0VmFsdWUoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwordWludDMyX3QgSEFMX0RBQ0V4X0R1YWxHZXRWYWx1ZShjb25zdCBEQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CiAKIHZvaWQgSEFMX0RBQ0V4X0NvbnZDcGx0Q2FsbGJhY2tDaDIoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwogdm9pZCBIQUxfREFDRXhfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDIoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9oYWxfZGVmLmggYi9JbmMvc3RtMzJmMXh4X2hhbF9kZWYuaAppbmRleCAwYjI4MWEzLi5kNGQ5OGY3IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2hhbF9kZWYuaAorKysgYi9JbmMvc3RtMzJmMXh4X2hhbF9kZWYuaApAQCAtMjA3LDMgKzIwNyw1IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fX1NUTTMyRjF4eF9IQUxfREVGICovCisKKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9oYWxfZG1hLmggYi9JbmMvc3RtMzJmMXh4X2hhbF9kbWEuaAppbmRleCA2NDI4Yjc3Li4yZWZmOWFjIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2hhbF9kbWEuaAorKysgYi9JbmMvc3RtMzJmMXh4X2hhbF9kbWEuaApAQCAtOSw4ICs5LDggQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDUyLDMgKzQ1Miw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1RNMzJGMXh4X0hBTF9ETUFfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2hhbF9kbWFfZXguaCBiL0luYy9zdG0zMmYxeHhfaGFsX2RtYV9leC5oCmluZGV4IDZkYzQ4OTUuLmNlMzFjZmYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYxeHhfaGFsX2RtYV9leC5oCisrKyBiL0luYy9zdG0zMmYxeHhfaGFsX2RtYV9leC5oCkBAIC05LDggKzksOCBAQAogICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNzIsMyArMjcyLDQgQEAKICAgICAgICAvKiBTVE0zMkYxMDN4RyB8fCBTVE0zMkYxMDV4QyB8fCBTVE0zMkYxMDd4QyAqLwogCiAjZW5kaWYgLyogX19TVE0zMkYxeHhfSEFMX0RNQV9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfaGFsX2V0aC5oIGIvSW5jL3N0bTMyZjF4eF9oYWxfZXRoLmgKaW5kZXggZDk0MWZhYi4uMTg2Nzc5NiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9oYWxfZXRoLmgKKysrIGIvSW5jL3N0bTMyZjF4eF9oYWxfZXRoLmgKQEAgLTU3NSw3ICs1NzUsNyBAQAogfSBFVEhfRE1BRGVzY1R5cGVEZWY7CiAKIC8qKgotICAqIEBicmllZiAgUmVjZWl2ZWQgRnJhbWUgSW5mb3JtYXRpb25zIHN0cnVjdHVyZSBkZWZpbml0aW9uCisgICogQGJyaWVmICBSZWNlaXZlZCBGcmFtZSBJbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgogICAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfaGFsX2V4dGkuaCBiL0luYy9zdG0zMmYxeHhfaGFsX2V4dGkuaAppbmRleCBhNGM0ZWZkLi4xNGJhZjQ0IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2hhbF9leHRpLmgKKysrIGIvSW5jL3N0bTMyZjF4eF9oYWxfZXh0aS5oCkBAIC0zMTUsMyArMzE1LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogU1RNMzJGMXh4X0hBTF9FWFRJX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9oYWxfZmxhc2guaCBiL0luYy9zdG0zMmYxeHhfaGFsX2ZsYXNoLmgKaW5kZXggOWZiYWJhZi4uMjQ3OTg0NyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9oYWxfZmxhc2guaAorKysgYi9JbmMvc3RtMzJmMXh4X2hhbF9mbGFzaC5oCkBAIC05LDEwICs5LDkgQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCkBAIC0zMjIsMyArMzIxLDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYxeHhfSEFMX0ZMQVNIX0ggKi8KKworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2hhbF9mbGFzaF9leC5oIGIvSW5jL3N0bTMyZjF4eF9oYWxfZmxhc2hfZXguaAppbmRleCBiOTkwMTM4Li41MjgzNTI2IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2hhbF9mbGFzaF9leC5oCisrKyBiL0luYy9zdG0zMmYxeHhfaGFsX2ZsYXNoX2V4LmgKQEAgLTksMTAgKzksOSBAQAogICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCi0gICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKQEAgLTc4MSwzICs3ODAsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjF4eF9IQUxfRkxBU0hfRVhfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2hhbF9ncGlvLmggYi9JbmMvc3RtMzJmMXh4X2hhbF9ncGlvLmgKaW5kZXggNzkyYzAzYS4uNDY5YTJlYSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9oYWxfZ3Bpby5oCisrKyBiL0luYy9zdG0zMmYxeHhfaGFsX2dwaW8uaApAQCAtMzAzLDMgKzMwMyw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIFNUTTMyRjF4eF9IQUxfR1BJT19IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfaGFsX2dwaW9fZXguaCBiL0luYy9zdG0zMmYxeHhfaGFsX2dwaW9fZXguaAppbmRleCAxODg3NmVmLi5lNjFkYzE1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2hhbF9ncGlvX2V4LmgKKysrIGIvSW5jL3N0bTMyZjF4eF9oYWxfZ3Bpb19leC5oCkBAIC04ODksMyArODg5LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogU1RNMzJGMXh4X0hBTF9HUElPX0VYX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9oYWxfaGNkLmggYi9JbmMvc3RtMzJmMXh4X2hhbF9oY2QuaAppbmRleCAzOTQ2MzY0Li43MTg2YTZlIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2hhbF9oY2QuaAorKysgYi9JbmMvc3RtMzJmMXh4X2hhbF9oY2QuaApAQCAtMTU4LDYgKzE1OCwxMCBAQAogCiAjZGVmaW5lIF9fSEFMX0hDRF9HRVRfRkxBRyhfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICgoVVNCX1JlYWRJbnRlcnJ1cHRzKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKF9fSU5URVJSVVBUX18pKSA9PSAoX19JTlRFUlJVUFRfXykpCisKKyNkZWZpbmUgX19IQUxfSENEX0dFVF9DSF9GTEFHKF9fSEFORExFX18sIF9fY2hudW1fXywgX19JTlRFUlJVUFRfXykgXAorICAoKFVTQl9SZWFkQ2hJbnRlcnJ1cHRzKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UsIChfX2NobnVtX18pKSAmIChfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKQorCiAjZGVmaW5lIF9fSEFMX0hDRF9DTEVBUl9GTEFHKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+R0lOVFNUUykgPSAoX19JTlRFUlJVUFRfXykpCiAjZGVmaW5lIF9fSEFMX0hDRF9JU19JTlZBTElEX0lOVEVSUlVQVChfX0hBTkRMRV9fKSAgICAgICAgIChVU0JfUmVhZEludGVycnVwdHMoKF9fSEFORExFX18pLT5JbnN0YW5jZSkgPT0gMFUpCiAKQEAgLTI0Nyw2ICsyNTEsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHRva2VuLCB1aW50OF90ICpwYnVmZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBsZW5ndGgsIHVpbnQ4X3QgZG9fcGluZyk7CiAKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQ0RfSENfU2V0SHViSW5mbyhIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwgdWludDhfdCBjaF9udW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhZGRyLCB1aW50OF90IFBvcnROYnIpOworCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSENEX0hDX0NsZWFySHViSW5mbyhIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwgdWludDhfdCBjaF9udW0pOworCiAvKiBOb24tQmxvY2tpbmcgbW9kZTogSW50ZXJydXB0ICovCiB2b2lkIEhBTF9IQ0RfSVJRSGFuZGxlcihIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7CiB2b2lkIEhBTF9IQ0RfV0tVUF9JUlFIYW5kbGVyKEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkKTsKQEAgLTI3NiwxNiArMjg1LDEzIEBACiAvKiogQGFkZHRvZ3JvdXAgSENEX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKICAgKiBAewogICAqLwotSENEX1N0YXRlVHlwZURlZiAgICAgICAgSEFMX0hDRF9HZXRTdGF0ZShIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7Ci1IQ0RfVVJCU3RhdGVUeXBlRGVmICAgICBIQUxfSENEX0hDX0dldFVSQlN0YXRlKEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkLCB1aW50OF90IGNobnVtKTsKLUhDRF9IQ1N0YXRlVHlwZURlZiAgICAgIEhBTF9IQ0RfSENfR2V0U3RhdGUoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsIHVpbnQ4X3QgY2hudW0pOwotdWludDMyX3QgICAgICAgICAgICAgICAgSEFMX0hDRF9IQ19HZXRYZmVyQ291bnQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsIHVpbnQ4X3QgY2hudW0pOworSENEX1N0YXRlVHlwZURlZiAgICAgICAgSEFMX0hDRF9HZXRTdGF0ZShIQ0RfSGFuZGxlVHlwZURlZiBjb25zdCAqaGhjZCk7CitIQ0RfVVJCU3RhdGVUeXBlRGVmICAgICBIQUxfSENEX0hDX0dldFVSQlN0YXRlKEhDRF9IYW5kbGVUeXBlRGVmIGNvbnN0ICpoaGNkLCB1aW50OF90IGNobnVtKTsKK0hDRF9IQ1N0YXRlVHlwZURlZiAgICAgIEhBTF9IQ0RfSENfR2V0U3RhdGUoSENEX0hhbmRsZVR5cGVEZWYgY29uc3QgKmhoY2QsIHVpbnQ4X3QgY2hudW0pOwordWludDMyX3QgICAgICAgICAgICAgICAgSEFMX0hDRF9IQ19HZXRYZmVyQ291bnQoSENEX0hhbmRsZVR5cGVEZWYgY29uc3QgKmhoY2QsIHVpbnQ4X3QgY2hudW0pOwogdWludDMyX3QgICAgICAgICAgICAgICAgSEFMX0hDRF9HZXRDdXJyZW50RnJhbWUoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwogdWludDMyX3QgICAgICAgICAgICAgICAgSEFMX0hDRF9HZXRDdXJyZW50U3BlZWQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwogCi0vKioKLSAgKiBAfQotICAqLwogCiAvKioKICAgKiBAfQpAQCAtMzA2LDYgKzMxMiw5IEBACiAvKioKICAgKiBAfQogICAqLworLyoqCisgICogQH0KKyAgKi8KICNlbmRpZiAvKiBkZWZpbmVkIChVU0JfT1RHX0ZTKSAqLwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfaGFsX2kyYy5oIGIvSW5jL3N0bTMyZjF4eF9oYWxfaTJjLmgKaW5kZXggNmQxNTI4Yi4uZTQ4MjMyZCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9oYWxfaTJjLmgKKysrIGIvSW5jL3N0bTMyZjF4eF9oYWxfaTJjLmgKQEAgLTczNSwzICs3MzUsNCBAQAogCiAKICNlbmRpZiAvKiBfX1NUTTMyRjF4eF9IQUxfSTJDX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9oYWxfaTJzLmggYi9JbmMvc3RtMzJmMXh4X2hhbF9pMnMuaAppbmRleCBlMmRhNjI2Li4yNTkzYzc1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2hhbF9pMnMuaAorKysgYi9JbmMvc3RtMzJmMXh4X2hhbF9pMnMuaApAQCAtNTUxLDMgKzU1MSw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIFNUTTMyRjF4eF9IQUxfSTJTX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9oYWxfaXJkYS5oIGIvSW5jL3N0bTMyZjF4eF9oYWxfaXJkYS5oCmluZGV4IDYxMTc0OTQuLjc5MWMxZDMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYxeHhfaGFsX2lyZGEuaAorKysgYi9JbmMvc3RtMzJmMXh4X2hhbF9pcmRhLmgKQEAgLTY2NywzICs2NjcsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjF4eF9IQUxfSVJEQV9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfaGFsX21tYy5oIGIvSW5jL3N0bTMyZjF4eF9oYWxfbW1jLmgKaW5kZXggYzE0OGJkZC4uNDc1YTljNSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9oYWxfbW1jLmgKKysrIGIvSW5jL3N0bTMyZjF4eF9oYWxfbW1jLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCkBAIC0xNCw3ICsxNCw3IEBACiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICovCisgICovIAogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2lmbmRlZiBTVE0zMkYxeHhfSEFMX01NQ19ICmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2hhbF9uYW5kLmggYi9JbmMvc3RtMzJmMXh4X2hhbF9uYW5kLmgKaW5kZXggMWVhZDBkZi4uMzgwOTNjMyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9oYWxfbmFuZC5oCisrKyBiL0luYy9zdG0zMmYxeHhfaGFsX25hbmQuaApAQCAtMTA1LDkgKzEwNSw4IEBACiAgIEZ1bmN0aW9uYWxTdGF0ZSBFeHRyYUNvbW1hbmRFbmFibGU7ICAgIC8qITwgTkFORCBleHRyYSBjb21tYW5kIG5lZWRlZCBmb3IgUGFnZSByZWFkaW5nIG1vZGUuIFRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgaXMgbWFuZGF0b3J5IGZvciBzb21lIE5BTkQgcGFydHMgYWZ0ZXIgdGhlIHJlYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIChOQU5EX0NNRF9BUkVBX1RSVUUxKSBhbmQgYmVmb3JlIERBVEEgcmVhZGluZyBzZXF1ZW5jZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGFtcGxlOiBUb3NoaWJhIFRIVEg1OEJZRzNTMEhCQUk2LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNvdWxkIGJlIEVOQUJMRSBvciBESVNBQkxFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBSZWFkIE1vZGUgc2VxdW5lY2UgaW4gdGhlIE5BTkQgZGV2aWNlIGRhdGFzaGVldCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBjaGVjayB0aGUgUmVhZCBNb2RlIHNlcXVlbmNlIGluIHRoZSBOQU5EIGRldmljZSBkYXRhc2hlZXQgKi8KIH0gTkFORF9EZXZpY2VDb25maWdUeXBlRGVmOwogCiAvKioKQEAgLTEyNyw3ICsxMjYsNyBAQAogCiAgIF9fSU8gSEFMX05BTkRfU3RhdGVUeXBlRGVmICAgICBTdGF0ZTsgICAgICAvKiE8IE5BTkQgZGV2aWNlIGFjY2VzcyBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgTkFORF9EZXZpY2VDb25maWdUeXBlRGVmICAgICAgIENvbmZpZzsgICAgIC8qITwgTkFORCBwaHVzaWNhbCBjaGFyYWN0ZXJpc3RpYyBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgICAgKi8KKyAgTkFORF9EZXZpY2VDb25maWdUeXBlRGVmICAgICAgIENvbmZpZzsgICAgIC8qITwgTkFORCBwaHlzaWNhbCBjaGFyYWN0ZXJpc3RpYyBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgICAgKi8KIAogI2lmIChVU0VfSEFMX05BTkRfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19OQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kKTsgICAgICAgICAgICAgICAvKiE8IE5BTkQgTXNwIEluaXQgY2FsbGJhY2sgICAgICAgICAgICAgICovCkBAIC0yMTUsMjcgKzIxNCwyNyBAQAogLyogSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9SZXNldChOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kKTsKIAotSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1JlYWRfUGFnZV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDhfdCAqcEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtUGFnZVRvUmVhZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfV3JpdGVfUGFnZV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDhfdCAqcEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bVBhZ2VUb1dyaXRlKTsKLUhBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9SZWFkX1NwYXJlQXJlYV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKK0hBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9SZWFkX1BhZ2VfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVBhZ2VUb1JlYWQpOworSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1dyaXRlX1BhZ2VfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1QYWdlVG9Xcml0ZSk7CitIQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfUmVhZF9TcGFyZUFyZWFfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG9SZWFkKTsKLUhBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9Xcml0ZV9TcGFyZUFyZWFfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvd3JpdGUpOworSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1dyaXRlX1NwYXJlQXJlYV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG93cml0ZSk7CiAKLUhBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9SZWFkX1BhZ2VfMTZiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50MTZfdCAqcEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bVBhZ2VUb1JlYWQpOwotSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1dyaXRlX1BhZ2VfMTZiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50MTZfdCAqcEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBOdW1QYWdlVG9Xcml0ZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfUmVhZF9TcGFyZUFyZWFfMTZiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLAorSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1JlYWRfUGFnZV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtUGFnZVRvUmVhZCk7CitIQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfV3JpdGVfUGFnZV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVBhZ2VUb1dyaXRlKTsKK0hBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9SZWFkX1NwYXJlQXJlYV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1TcGFyZUFyZWFUb1JlYWQpOwotSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1dyaXRlX1NwYXJlQXJlYV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG93cml0ZSk7CitIQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfV3JpdGVfU3BhcmVBcmVhXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1TcGFyZUFyZWFUb3dyaXRlKTsKIAotSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX0VyYXNlX0Jsb2NrKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzKTsKK0hBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9FcmFzZV9CbG9jayhOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcyk7CiAKLXVpbnQzMl90ICAgICAgICAgICBIQUxfTkFORF9BZGRyZXNzX0luYyhOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcyk7Cit1aW50MzJfdCAgICAgICAgICAgSEFMX05BTkRfQWRkcmVzc19JbmMoY29uc3QgTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MpOwogCiAjaWYgKFVTRV9IQUxfTkFORF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKIC8qIE5BTkQgY2FsbGJhY2sgcmVnaXN0ZXJpbmcvdW5yZWdpc3RlcmluZyAqLwpAQCAtMjY1LDggKzI2NCw4IEBACiAgICogQHsKICAgKi8KIC8qIE5BTkQgU3RhdGUgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfTkFORF9TdGF0ZVR5cGVEZWYgSEFMX05BTkRfR2V0U3RhdGUoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCk7Ci11aW50MzJfdCAgICAgICAgICAgICAgSEFMX05BTkRfUmVhZF9TdGF0dXMoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCk7CitIQUxfTkFORF9TdGF0ZVR5cGVEZWYgSEFMX05BTkRfR2V0U3RhdGUoY29uc3QgTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCk7Cit1aW50MzJfdCAgICAgICAgICAgICAgSEFMX05BTkRfUmVhZF9TdGF0dXMoY29uc3QgTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCk7CiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9oYWxfbm9yLmggYi9JbmMvc3RtMzJmMXh4X2hhbF9ub3IuaAppbmRleCBmYWIzZGZhLi40YmNmNDQ3IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2hhbF9ub3IuaAorKysgYi9JbmMvc3RtMzJmMXh4X2hhbF9ub3IuaApAQCAtMjM0LDcgKzIzNCw3IEBACiAgICovCiAKIC8qIE5PUiBTdGF0ZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfTk9SX1N0YXRlVHlwZURlZiAgSEFMX05PUl9HZXRTdGF0ZShOT1JfSGFuZGxlVHlwZURlZiAqaG5vcik7CitIQUxfTk9SX1N0YXRlVHlwZURlZiAgSEFMX05PUl9HZXRTdGF0ZShjb25zdCBOT1JfSGFuZGxlVHlwZURlZiAqaG5vcik7CiBIQUxfTk9SX1N0YXR1c1R5cGVEZWYgSEFMX05PUl9HZXRTdGF0dXMoTk9SX0hhbmRsZVR5cGVEZWYgKmhub3IsIHVpbnQzMl90IEFkZHJlc3MsIHVpbnQzMl90IFRpbWVvdXQpOwogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfaGFsX3BjZC5oIGIvSW5jL3N0bTMyZjF4eF9oYWxfcGNkLmgKaW5kZXggNzVjN2VhYy4uODgxYmEyZiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9oYWxfcGNkLmgKKysrIGIvSW5jL3N0bTMyZjF4eF9oYWxfcGNkLmgKQEAgLTExMSw4ICsxMTEsOCBAQAogICBQQ0RfRVBUeXBlRGVmICAgICAgICAgICBPVVRfZXBbMTZdOyAgLyohPCBPVVQgZW5kcG9pbnQgcGFyYW1ldGVycyAgICAgICAgICAgKi8KICNlbmRpZiAvKiBkZWZpbmVkIChVU0JfT1RHX0ZTKSAqLwogI2lmIGRlZmluZWQgKFVTQikKLSAgUENEX0VQVHlwZURlZiAgICAgICAgICAgSU5fZXBbOF07ICAgLyohPCBJTiBlbmRwb2ludCBwYXJhbWV0ZXJzICAgICAgICAgICAgICovCi0gIFBDRF9FUFR5cGVEZWYgICAgICAgICAgIE9VVF9lcFs4XTsgIC8qITwgT1VUIGVuZHBvaW50IHBhcmFtZXRlcnMgICAgICAgICAgICAqLworICBQQ0RfRVBUeXBlRGVmICAgICAgICAgICBJTl9lcFs4XTsgICAgLyohPCBJTiBlbmRwb2ludCBwYXJhbWV0ZXJzICAgICAgICAgICAgKi8KKyAgUENEX0VQVHlwZURlZiAgICAgICAgICAgT1VUX2VwWzhdOyAgIC8qITwgT1VUIGVuZHBvaW50IHBhcmFtZXRlcnMgICAgICAgICAgICovCiAjZW5kaWYgLyogZGVmaW5lZCAoVVNCKSAqLwogICBIQUxfTG9ja1R5cGVEZWYgICAgICAgICBMb2NrOyAgICAgICAgLyohPCBQQ0QgcGVyaXBoZXJhbCBzdGF0dXMgICAgICAgICAgICAgKi8KICAgX19JTyBQQ0RfU3RhdGVUeXBlRGVmICAgU3RhdGU7ICAgICAgIC8qITwgUENEIGNvbW11bmljYXRpb24gc3RhdGUgICAgICAgICAgICovCkBAIC0xMjAsNiArMTIwLDcgQEAKICAgdWludDMyX3QgICAgICAgICAgICAgICAgU2V0dXBbMTJdOyAgIC8qITwgU2V0dXAgcGFja2V0IGJ1ZmZlciAgICAgICAgICAgICAgICovCiAgIFBDRF9MUE1fU3RhdGVUeXBlRGVmICAgIExQTV9TdGF0ZTsgICAvKiE8IExQTSBTdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICB1aW50MzJfdCAgICAgICAgICAgICAgICBCRVNMOworICB1aW50MzJfdCAgICAgICAgICAgICAgICBGcmFtZU51bWJlcjsgLyohPCBTdG9yZSBDdXJyZW50IEZyYW1lIG51bWJlciAgICAgICAgKi8KIAogICB2b2lkICAgICAgICAgICAgICAgICAgICAqcERhdGE7ICAgICAgLyohPCBQb2ludGVyIHRvIHVwcGVyIHN0YWNrIEhhbmRsZXIgKi8KIApAQCAtMTkzLDE0ICsxOTQsMTQgQEAKICAgKiAgQGJyaWVmIG1hY3JvcyB0byBoYW5kbGUgaW50ZXJydXB0cyBhbmQgc3BlY2lmaWMgY2xvY2sgY29uZmlndXJhdGlvbnMKICAgKiBAewogICAqLwotI2lmIGRlZmluZWQgKFVTQl9PVEdfRlMpCiAjZGVmaW5lIF9fSEFMX1BDRF9FTkFCTEUoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKVVTQl9FbmFibGVHbG9iYWxJbnQgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpCiAjZGVmaW5lIF9fSEFMX1BDRF9ESVNBQkxFKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICAgICh2b2lkKVVTQl9EaXNhYmxlR2xvYmFsSW50ICgoX19IQU5ETEVfXyktPkluc3RhbmNlKQogCiAjZGVmaW5lIF9fSEFMX1BDRF9HRVRfRkxBRyhfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSBcCiAgICgoVVNCX1JlYWRJbnRlcnJ1cHRzKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpICYgKF9fSU5URVJSVVBUX18pKSA9PSAoX19JTlRFUlJVUFRfXykpCiAKLSNkZWZpbmUgX19IQUxfUENEX0NMRUFSX0ZMQUcoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5HSU5UU1RTKSAmPSAgKF9fSU5URVJSVVBUX18pKQorI2lmIGRlZmluZWQgKFVTQl9PVEdfRlMpCisjZGVmaW5lIF9fSEFMX1BDRF9DTEVBUl9GTEFHKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+R0lOVFNUUykgJj0gKF9fSU5URVJSVVBUX18pKQogI2RlZmluZSBfX0hBTF9QQ0RfSVNfSU5WQUxJRF9JTlRFUlJVUFQoX19IQU5ETEVfXykgICAgICAgICAoVVNCX1JlYWRJbnRlcnJ1cHRzKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpID09IDBVKQogCiAjZGVmaW5lIF9fSEFMX1BDRF9VTkdBVEVfUEhZQ0xPQ0soX19IQU5ETEVfXykgXApAQCAtMjI1LDE4ICsyMjYsMTMgQEAKICNlbmRpZiAvKiBkZWZpbmVkIChVU0JfT1RHX0ZTKSAqLwogCiAjaWYgZGVmaW5lZCAoVVNCKQotI2RlZmluZSBfX0hBTF9QQ0RfRU5BQkxFKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKVVTQl9FbmFibGVHbG9iYWxJbnQgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpCi0jZGVmaW5lIF9fSEFMX1BDRF9ESVNBQkxFKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpVVNCX0Rpc2FibGVHbG9iYWxJbnQgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpCi0jZGVmaW5lIF9fSEFMX1BDRF9HRVRfRkxBRyhfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICAgICAgICAgICAgKChVU0JfUmVhZEludGVycnVwdHMoKF9fSEFORExFX18pLT5JbnN0YW5jZSlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIChfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKQorI2RlZmluZSBfX0hBTF9QQ0RfQ0xFQVJfRkxBRyhfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICAgICAgKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1RSKVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmPSAodWludDE2X3QpKH4oX19JTlRFUlJVUFRfXykpKQogCi0jZGVmaW5lIF9fSEFMX1BDRF9DTEVBUl9GTEFHKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAgICAgICAgICAgKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1RSKVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJj0gKHVpbnQxNl90KSh+KF9fSU5URVJSVVBUX18pKSkKLQotI2RlZmluZSBfX0hBTF9VU0JfV0FLRVVQX0VYVElfRU5BQkxFX0lUKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVEktPklNUiB8PSBVU0JfV0FLRVVQX0VYVElfTElORQotI2RlZmluZSBfX0hBTF9VU0JfV0FLRVVQX0VYVElfRElTQUJMRV9JVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVEktPklNUiAmPSB+KFVTQl9XQUtFVVBfRVhUSV9MSU5FKQotI2RlZmluZSBfX0hBTF9VU0JfV0FLRVVQX0VYVElfR0VUX0ZMQUcoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVEktPlBSICYgKFVTQl9XQUtFVVBfRVhUSV9MSU5FKQotI2RlZmluZSBfX0hBTF9VU0JfV0FLRVVQX0VYVElfQ0xFQVJfRkxBRygpICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVEktPlBSID0gVVNCX1dBS0VVUF9FWFRJX0xJTkUKKyNkZWZpbmUgX19IQUxfVVNCX1dBS0VVUF9FWFRJX0VOQUJMRV9JVCgpICAgICAgICAgICAgICAgICAgICAgICAgIEVYVEktPklNUiB8PSBVU0JfV0FLRVVQX0VYVElfTElORQorI2RlZmluZSBfX0hBTF9VU0JfV0FLRVVQX0VYVElfRElTQUJMRV9JVCgpICAgICAgICAgICAgICAgICAgICAgICAgRVhUSS0+SU1SICY9IH4oVVNCX1dBS0VVUF9FWFRJX0xJTkUpCisjZGVmaW5lIF9fSEFMX1VTQl9XQUtFVVBfRVhUSV9HRVRfRkxBRygpICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRJLT5QUiAmIChVU0JfV0FLRVVQX0VYVElfTElORSkKKyNkZWZpbmUgX19IQUxfVVNCX1dBS0VVUF9FWFRJX0NMRUFSX0ZMQUcoKSAgICAgICAgICAgICAgICAgICAgICAgIEVYVEktPlBSID0gVVNCX1dBS0VVUF9FWFRJX0xJTkUKIAogI2RlZmluZSBfX0hBTF9VU0JfV0FLRVVQX0VYVElfRU5BQkxFX1JJU0lOR19FREdFKCkgXAogICBkbyB7IFwKQEAgLTMwMiwxMiArMjk4LDEwIEBACiAgICogQH0KICAgKi8KIAotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3RlckNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QQ0RfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfUmVnaXN0ZXJDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgSEFMX1BDRF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQQ0RfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CiAKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfVW5SZWdpc3RlckNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX1BDRF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfVW5SZWdpc3RlckNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCBIQUxfUENEX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQpOwogCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1JlZ2lzdGVyRGF0YU91dFN0YWdlQ2FsbGJhY2soUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFBDRF9EYXRhT3V0U3RhZ2VDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKQEAgLTM2NywyNSArMzYxLDE3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0RldkNvbm5lY3QoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9EZXZEaXNjb25uZWN0KFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfU2V0QWRkcmVzcyhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBhZGRyZXNzKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfT3BlbihQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGVwX21wcywgdWludDhfdCBlcF90eXBlKTsKLQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9PcGVuKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIsIHVpbnQxNl90IGVwX21wcywgdWludDhfdCBlcF90eXBlKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfQ2xvc2UoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQ4X3QgZXBfYWRkcik7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0VQX1JlY2VpdmUoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQ4X3QgZXBfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwQnVmLCB1aW50MzJfdCBsZW4pOwotCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0VQX1RyYW5zbWl0KFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBCdWYsIHVpbnQzMl90IGxlbik7Ci0KLQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9SZWNlaXZlKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIsIHVpbnQ4X3QgKnBCdWYsIHVpbnQzMl90IGxlbik7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0VQX1RyYW5zbWl0KFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIsIHVpbnQ4X3QgKnBCdWYsIHVpbnQzMl90IGxlbik7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0VQX1NldFN0YWxsKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9DbHJTdGFsbChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfRmx1c2goUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQ4X3QgZXBfYWRkcik7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0VQX0Fib3J0KFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9BY3RpdmF0ZVJlbW90ZVdha2V1cChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0RlQWN0aXZhdGVSZW1vdGVXYWtldXAoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QpOwotCi11aW50MzJfdCAgICAgICAgICBIQUxfUENEX0VQX0dldFJ4Q291bnQoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQ4X3QgZXBfYWRkcik7Cit1aW50MzJfdCAgICAgICAgICBIQUxfUENEX0VQX0dldFJ4Q291bnQoUENEX0hhbmRsZVR5cGVEZWYgY29uc3QgKmhwY2QsIHVpbnQ4X3QgZXBfYWRkcik7CiAvKioKICAgKiBAfQogICAqLwpAQCAtMzk0LDcgKzM4MCw3IEBACiAvKiogQGFkZHRvZ3JvdXAgUENEX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKICAgKiBAewogICAqLwotUENEX1N0YXRlVHlwZURlZiBIQUxfUENEX0dldFN0YXRlKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKK1BDRF9TdGF0ZVR5cGVEZWYgSEFMX1BDRF9HZXRTdGF0ZShQQ0RfSGFuZGxlVHlwZURlZiBjb25zdCAqaHBjZCk7CiAvKioKICAgKiBAfQogICAqLwpAQCAtNDk3LDE0ICs0ODMsMTIgQEAKICNkZWZpbmUgVVNCX0NOVFJYX0JMU0laRSAgICAgICAgICAgICAgICAgICAgICAoMHgxVSA8PCAxNSkKIAogLyogU2V0RU5EUE9JTlQgKi8KLSNkZWZpbmUgUENEX1NFVF9FTkRQT0lOVChVU0J4LCBiRXBOdW0sIHdSZWdWYWx1ZSkgICgqKF9fSU8gdWludDE2X3QgKilcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCYoVVNCeCktPkVQMFIgKyAoKGJFcE51bSkgKiAyVSkpID0gKHVpbnQxNl90KSh3UmVnVmFsdWUpKQorI2RlZmluZSBQQ0RfU0VUX0VORFBPSU5UKFVTQngsIGJFcE51bSwgd1JlZ1ZhbHVlKSBcCisgICgqKF9fSU8gdWludDE2X3QgKikoJihVU0J4KS0+RVAwUiArICgoYkVwTnVtKSAqIDJVKSkgPSAodWludDE2X3QpKHdSZWdWYWx1ZSkpCiAKIC8qIEdldEVORFBPSU5UICovCiAjZGVmaW5lIFBDRF9HRVRfRU5EUE9JTlQoVVNCeCwgYkVwTnVtKSAgICAgICAgICAgICAoKihfX0lPIHVpbnQxNl90ICopKCYoVVNCeCktPkVQMFIgKyAoKGJFcE51bSkgKiAyVSkpKQogCi0vKiBFTkRQT0lOVCB0cmFuc2ZlciAqLwotI2RlZmluZSBVU0JfRVAwU3RhcnRYZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0VQU3RhcnRYZmVyCiAKIC8qKgogICAqIEBicmllZiAgc2V0cyB0aGUgdHlwZSBpbiB0aGUgZW5kcG9pbnQgcmVnaXN0ZXIoYml0cyBFUF9UWVBFWzE6MF0pCkBAIC01MTMsOCArNDk3LDkgQEAKICAgKiBAcGFyYW0gIHdUeXBlIEVuZHBvaW50IFR5cGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIFBDRF9TRVRfRVBUWVBFKFVTQngsIGJFcE51bSwgd1R5cGUpIChQQ0RfU0VUX0VORFBPSU5UKChVU0J4KSwgKGJFcE51bSksICgoUENEX0dFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pKVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBVU0JfRVBfVF9NQVNLKSB8ICh3VHlwZSkgfCBVU0JfRVBfQ1RSX1RYIHwgVVNCX0VQX0NUUl9SWCkpKQorI2RlZmluZSBQQ0RfU0VUX0VQVFlQRShVU0J4LCBiRXBOdW0sIHdUeXBlKSBcCisgIChQQ0RfU0VUX0VORFBPSU5UKChVU0J4KSwgKGJFcE51bSksIFwKKyAgICAgICAgICAgICAgICAgICAgKChQQ0RfR0VUX0VORFBPSU5UKChVU0J4KSwgKGJFcE51bSkpICYgVVNCX0VQX1RfTUFTSykgfCAod1R5cGUpIHwgVVNCX0VQX0NUUl9UWCB8IFVTQl9FUF9DVFJfUlgpKSkKIAogCiAvKioKQEAgLTUzMiw3ICs1MTcsNyBAQAogICAqIEBwYXJhbSAgIGJFcE51bSwgYkRpcgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBQQ0RfRnJlZVVzZXJCdWZmZXIoVVNCeCwgYkVwTnVtLCBiRGlyKSBcCisjZGVmaW5lIFBDRF9GUkVFX1VTRVJfQlVGRkVSKFVTQngsIGJFcE51bSwgYkRpcikgXAogICBkbyB7IFwKICAgICBpZiAoKGJEaXIpID09IDBVKSBcCiAgICAgeyBcCkBAIC03MDAsOCArNjg1LDggQEAKICAgKiBAcGFyYW0gIGJFcE51bSBFbmRwb2ludCBOdW1iZXIuCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIFBDRF9TRVRfRVBfREJVRihVU0J4LCBiRXBOdW0pICAgICAgICAgIFBDRF9TRVRfRVBfS0lORCgoVVNCeCksIChiRXBOdW0pKQotI2RlZmluZSBQQ0RfQ0xFQVJfRVBfREJVRihVU0J4LCBiRXBOdW0pICAgICAgICBQQ0RfQ0xFQVJfRVBfS0lORCgoVVNCeCksIChiRXBOdW0pKQorI2RlZmluZSBQQ0RfU0VUX0JVTEtfRVBfREJVRihVU0J4LCBiRXBOdW0pICAgICBQQ0RfU0VUX0VQX0tJTkQoKFVTQngpLCAoYkVwTnVtKSkKKyNkZWZpbmUgUENEX0NMRUFSX0JVTEtfRVBfREJVRihVU0J4LCBiRXBOdW0pICAgUENEX0NMRUFSX0VQX0tJTkQoKFVTQngpLCAoYkVwTnVtKSkKIAogLyoqCiAgICogQGJyaWVmICBDbGVhcnMgYml0IENUUl9SWCAvIENUUl9UWCBpbiB0aGUgZW5kcG9pbnQgcmVnaXN0ZXIuCkBAIC04MDQsMTEgKzc4OSwxMyBAQAogICAqLwogI2RlZmluZSBQQ0RfR0VUX0VQX0FERFJFU1MoVVNCeCwgYkVwTnVtKSAoKHVpbnQ4X3QpKFBDRF9HRVRfRU5EUE9JTlQoKFVTQngpLCAoYkVwTnVtKSkgJiBVU0JfRVBBRERSX0ZJRUxEKSkKIAotI2RlZmluZSBQQ0RfRVBfVFhfQ05UKFVTQngsIGJFcE51bSkgKCh1aW50MTZfdCAqKSgoKCh1aW50MzJfdCkoVVNCeCktPkJUQUJMRVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICgodWludDMyX3QpKGJFcE51bSkgKiA4VSkgKyAyVSkgKiBQTUFfQUNDRVNTKSArICgodWludDMyX3QpKFVTQngpICsgMHg0MDBVKSkpCisjZGVmaW5lIFBDRF9FUF9UWF9DTlQoVVNCeCwgYkVwTnVtKSBcCisgICgodWludDE2X3QgKikoKCgodWludDMyX3QpKFVTQngpLT5CVEFCTEUgKyBcCisgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICsgMlUpICogUE1BX0FDQ0VTUykgKyAoKHVpbnQzMl90KShVU0J4KSArIDB4NDAwVSkpKQogCi0jZGVmaW5lIFBDRF9FUF9SWF9DTlQoVVNCeCwgYkVwTnVtKSAoKHVpbnQxNl90ICopKCgoKHVpbnQzMl90KShVU0J4KS0+QlRBQkxFXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKCh1aW50MzJfdCkoYkVwTnVtKSAqIDhVKSArIDZVKSAqIFBNQV9BQ0NFU1MpICsgKCh1aW50MzJfdCkoVVNCeCkgKyAweDQwMFUpKSkKKyNkZWZpbmUgUENEX0VQX1JYX0NOVChVU0J4LCBiRXBOdW0pIFwKKyAgKCh1aW50MTZfdCAqKSgoKCh1aW50MzJfdCkoVVNCeCktPkJUQUJMRSArIFwKKyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpKGJFcE51bSkgKiA4VSkgKyA2VSkgKiBQTUFfQUNDRVNTKSArICgodWludDMyX3QpKFVTQngpICsgMHg0MDBVKSkpCiAKIAogLyoqCkBAIC04NjEsNyArODQ4LDcgQEAKICAgICB7IFwKICAgICAgICh3TkJsb2NrcyktLTsgXAogICAgIH0gXAotICAgICoocGR3UmVnKSA9ICh1aW50MTZfdCkoKCh3TkJsb2NrcykgPDwgMTApIHwgVVNCX0NOVFJYX0JMU0laRSk7IFwKKyAgICAqKHBkd1JlZykgfD0gKHVpbnQxNl90KSgoKHdOQmxvY2tzKSA8PCAxMCkgfCBVU0JfQ05UUlhfQkxTSVpFKTsgXAogICB9IHdoaWxlKDApIC8qIFBDRF9DQUxDX0JMSzMyICovCiAKICNkZWZpbmUgUENEX0NBTENfQkxLMihwZHdSZWcsIHdDb3VudCwgd05CbG9ja3MpIFwKQEAgLTg3MSwyNCArODU4LDI5IEBACiAgICAgeyBcCiAgICAgICAod05CbG9ja3MpKys7IFwKICAgICB9IFwKLSAgICAqKHBkd1JlZykgPSAodWludDE2X3QpKCh3TkJsb2NrcykgPDwgMTApOyBcCisgICAgKihwZHdSZWcpIHw9ICh1aW50MTZfdCkoKHdOQmxvY2tzKSA8PCAxMCk7IFwKICAgfSB3aGlsZSgwKSAvKiBQQ0RfQ0FMQ19CTEsyICovCiAKICNkZWZpbmUgUENEX1NFVF9FUF9DTlRfUlhfUkVHKHBkd1JlZywgd0NvdW50KSBcCiAgIGRvIHsgXAogICAgIHVpbnQzMl90IHdOQmxvY2tzOyBcCi0gICAgaWYgKCh3Q291bnQpID09IDBVKSBcCisgICAgXAorICAgICoocGR3UmVnKSAmPSAweDNGRlU7IFwKKyAgICBcCisgICAgaWYgKCh3Q291bnQpID4gNjJVKSBcCiAgICAgeyBcCi0gICAgICAqKHBkd1JlZykgJj0gKHVpbnQxNl90KX5VU0JfQ05UUlhfTkJMS19NU0s7IFwKLSAgICAgICoocGR3UmVnKSB8PSBVU0JfQ05UUlhfQkxTSVpFOyBcCi0gICAgfSBcCi0gICAgZWxzZSBpZigod0NvdW50KSA8PSA2MlUpIFwKLSAgICB7IFwKLSAgICAgIFBDRF9DQUxDX0JMSzIoKHBkd1JlZyksICh3Q291bnQpLCB3TkJsb2Nrcyk7IFwKKyAgICAgIFBDRF9DQUxDX0JMSzMyKChwZHdSZWcpLCAod0NvdW50KSwgd05CbG9ja3MpOyBcCiAgICAgfSBcCiAgICAgZWxzZSBcCiAgICAgeyBcCi0gICAgICBQQ0RfQ0FMQ19CTEszMigocGR3UmVnKSwgKHdDb3VudCksIHdOQmxvY2tzKTsgXAorICAgICAgaWYgKCh3Q291bnQpID09IDBVKSBcCisgICAgICB7IFwKKyAgICAgICAgKihwZHdSZWcpIHw9IFVTQl9DTlRSWF9CTFNJWkU7IFwKKyAgICAgIH0gXAorICAgICAgZWxzZSBcCisgICAgICB7IFwKKyAgICAgICAgUENEX0NBTENfQkxLMigocGR3UmVnKSwgKHdDb3VudCksIHdOQmxvY2tzKTsgXAorICAgICAgfSBcCiAgICAgfSBcCiAgIH0gd2hpbGUoMCkgLyogUENEX1NFVF9FUF9DTlRfUlhfUkVHICovCiAKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfaGFsX3BjZF9leC5oIGIvSW5jL3N0bTMyZjF4eF9oYWxfcGNkX2V4LmgKaW5kZXggODA1ODY1OC4uMzBlZjY3MyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9oYWxfcGNkX2V4LmgKKysrIGIvSW5jL3N0bTMyZjF4eF9oYWxfcGNkX2V4LmgKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKLSNlbmRpZgorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJmMXh4X2hhbF9kZWYuaCIKQEAgLTc5LDcgKzc5LDcgQEAKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwogCiAKICNlbmRpZiAvKiBTVE0zMkYxeHhfSEFMX1BDRF9FWF9IICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2hhbF9yY2MuaCBiL0luYy9zdG0zMmYxeHhfaGFsX3JjYy5oCmluZGV4IDAzZTcxMmYuLjk4MTRjYWYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYxeHhfaGFsX3JjYy5oCisrKyBiL0luYy9zdG0zMmYxeHhfaGFsX3JjYy5oCkBAIC05LDEwICs5LDkgQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCkBAIC0xMzcyLDMgKzEzNzEsNSBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjF4eF9IQUxfUkNDX0ggKi8KKworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2hhbF9yY2NfZXguaCBiL0luYy9zdG0zMmYxeHhfaGFsX3JjY19leC5oCmluZGV4IDA5OWE2MjYuLjA0OWQwZWMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYxeHhfaGFsX3JjY19leC5oCisrKyBiL0luYy9zdG0zMmYxeHhfaGFsX3JjY19leC5oCkBAIC05LDEwICs5LDkgQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCkBAIC0xOTAyLDMgKzE5MDEsNSBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjF4eF9IQUxfUkNDX0VYX0ggKi8KKworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2hhbF9zZC5oIGIvSW5jL3N0bTMyZjF4eF9oYWxfc2QuaAppbmRleCA2YzgxODc0Li4yYjQ1ZjU1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2hhbF9zZC5oCisrKyBiL0luYy9zdG0zMmYxeHhfaGFsX3NkLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCkBAIC0xNCw3ICsxNCw3IEBACiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICovCisgICovIAogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2lmbmRlZiBTVE0zMkYxeHhfSEFMX1NEX0gKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfaGFsX3NtYXJ0Y2FyZC5oIGIvSW5jL3N0bTMyZjF4eF9oYWxfc21hcnRjYXJkLmgKaW5kZXggY2FmODE5Ny4uNWQ4YzEyNiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9oYWxfc21hcnRjYXJkLmgKKysrIGIvSW5jL3N0bTMyZjF4eF9oYWxfc21hcnRjYXJkLmgKQEAgLTc0MCwzICs3NDAsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjF4eF9IQUxfU01BUlRDQVJEX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9oYWxfc3BpLmggYi9JbmMvc3RtMzJmMXh4X2hhbF9zcGkuaAppbmRleCAwYjQzYWRkLi43MzA3M2ZjIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2hhbF9zcGkuaAorKysgYi9JbmMvc3RtMzJmMXh4X2hhbF9zcGkuaApAQCAtNjU2LDcgKzY1Niw4IEBACiAKIC8qIENhbGxiYWNrcyBSZWdpc3Rlci9VblJlZ2lzdGVyIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWYgKFVTRV9IQUxfU1BJX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUElfUmVnaXN0ZXJDYWxsYmFjayhTUElfSGFuZGxlVHlwZURlZiAqaHNwaSwgSEFMX1NQSV9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwU1BJX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NQSV9SZWdpc3RlckNhbGxiYWNrKFNQSV9IYW5kbGVUeXBlRGVmICpoc3BpLCBIQUxfU1BJX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNQSV9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUElfVW5SZWdpc3RlckNhbGxiYWNrKFNQSV9IYW5kbGVUeXBlRGVmICpoc3BpLCBIQUxfU1BJX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQpOwogI2VuZGlmIC8qIFVTRV9IQUxfU1BJX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogLyoqCkBAIC03MjYsMyArNzI3LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogU1RNMzJGMXh4X0hBTF9TUElfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2hhbF9zcmFtLmggYi9JbmMvc3RtMzJmMXh4X2hhbF9zcmFtLmgKaW5kZXggN2FiMzNmMC4uYTVmNDk4ZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9oYWxfc3JhbS5oCisrKyBiL0luYy9zdG0zMmYxeHhfaGFsX3NyYW0uaApAQCAtMjA1LDcgKzIwNSw3IEBACiAgICovCiAKIC8qIFNSQU0gIFN0YXRlIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfU1JBTV9TdGF0ZVR5cGVEZWYgSEFMX1NSQU1fR2V0U3RhdGUoU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSk7CitIQUxfU1JBTV9TdGF0ZVR5cGVEZWYgSEFMX1NSQU1fR2V0U3RhdGUoY29uc3QgU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSk7CiAKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2hhbF90aW0uaCBiL0luYy9zdG0zMmYxeHhfaGFsX3RpbS5oCmluZGV4IDJkOGZkYzguLjUzOTUxZjcgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYxeHhfaGFsX3RpbS5oCisrKyBiL0luYy9zdG0zMmYxeHhfaGFsX3RpbS5oCkBAIC03MDUsNiArNzA1LDE1IEBACiAgICogQH0KICAgKi8KIAorLyoqIEBkZWZncm91cCBUSU1fQ0NfRE1BX1JlcXVlc3QgQ0N4IERNQSByZXF1ZXN0IHNlbGVjdGlvbgorICAqIEB7CisgICovCisjZGVmaW5lIFRJTV9DQ0RNQVJFUVVFU1RfQ0MgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0N4IERNQSByZXF1ZXN0IHNlbnQgd2hlbiBjYXB0dXJlIG9yIGNvbXBhcmUgbWF0Y2ggZXZlbnQgb2NjdXJzICovCisjZGVmaW5lIFRJTV9DQ0RNQVJFUVVFU1RfVVBEQVRFICAgICAgICAgICAgIFRJTV9DUjJfQ0NEUyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0N4IERNQSByZXF1ZXN0cyBzZW50IHdoZW4gdXBkYXRlIGV2ZW50IG9jY3VycyAqLworLyoqCisgICogQH0KKyAgKi8KKwogLyoqIEBkZWZncm91cCBUSU1fRmxhZ19kZWZpbml0aW9uIFRJTSBGbGFnIERlZmluaXRpb24KICAgKiBAewogICAqLwpAQCAtNzM5LDE2ICs3NDgsMTYgQEAKIC8qKiBAZGVmZ3JvdXAgVElNX0Nsb2NrX1NvdXJjZSBUSU0gQ2xvY2sgU291cmNlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0VUUk1PREUyICAgIFRJTV9TTUNSX0VUUFNfMSAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0lOVEVSTkFMICAgIFRJTV9TTUNSX0VUUFNfMCAgICAgIC8qITwgSW50ZXJuYWwgY2xvY2sgc291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0VUUk1PREUxICAgIFRJTV9UU19FVFJGICAgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoRVRSRikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0VUUk1PREUyICAgIFRJTV9TTUNSX0VUUFNfMSAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNX0NMT0NLU09VUkNFX1RJMUVEICAgICAgIFRJTV9UU19USTFGX0VEICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoVFRJMUZQMSArIGVkZ2UgZGV0ZWN0LikgKi8KKyNkZWZpbmUgVElNX0NMT0NLU09VUkNFX1RJMSAgICAgICAgIFRJTV9UU19USTFGUDEgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoVFRJMUZQMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNX0NMT0NLU09VUkNFX1RJMiAgICAgICAgIFRJTV9UU19USTJGUDIgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoVFRJMkZQMikgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0lUUjAgICAgICAgIFRJTV9UU19JVFIwICAgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoSVRSMCkgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0lUUjEgICAgICAgIFRJTV9UU19JVFIxICAgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoSVRSMSkgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0lUUjIgICAgICAgIFRJTV9UU19JVFIyICAgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoSVRSMikgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0lUUjMgICAgICAgIFRJTV9UU19JVFIzICAgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoSVRSMykgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVElNX0NMT0NLU09VUkNFX1RJMUVEICAgICAgIFRJTV9UU19USTFGX0VEICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoVFRJMUZQMSArIGVkZ2UgZGV0ZWN0LikgKi8KLSNkZWZpbmUgVElNX0NMT0NLU09VUkNFX1RJMSAgICAgICAgIFRJTV9UU19USTFGUDEgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoVFRJMUZQMSkgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVElNX0NMT0NLU09VUkNFX1RJMiAgICAgICAgIFRJTV9UU19USTJGUDIgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoVFRJMkZQMikgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0VUUk1PREUxICAgIFRJTV9UU19FVFJGICAgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoRVRSRikgICAgICAgICAgICAgICAgICAgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xNTI2LDYgKzE1MzUsMTcgQEAKICAgICBUSU1fU0VUX0NBUFRVUkVQT0xBUklUWSgoX19IQU5ETEVfXyksIChfX0NIQU5ORUxfXyksIChfX1BPTEFSSVRZX18pKTsgXAogICB9d2hpbGUoMCkKIAorLyoqIEBicmllZiAgU2VsZWN0IHRoZSBDYXB0dXJlL2NvbXBhcmUgRE1BIHJlcXVlc3Qgc291cmNlLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFRJTSBIYW5kbGUuCisgICogQHBhcmFtICBfX0NDRE1BX18gc3BlY2lmaWVzIENhcHR1cmUvY29tcGFyZSBETUEgcmVxdWVzdCBzb3VyY2UKKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0NETUFSRVFVRVNUX0NDOiBDQ3ggRE1BIHJlcXVlc3QgZ2VuZXJhdGVkIG9uIENhcHR1cmUvQ29tcGFyZSBldmVudAorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0NETUFSRVFVRVNUX1VQREFURTogQ0N4IERNQSByZXF1ZXN0IGdlbmVyYXRlZCBvbiBVcGRhdGUgZXZlbnQKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KKyNkZWZpbmUgX19IQUxfVElNX1NFTEVDVF9DQ0RNQVJFUVVFU1QoX19IQU5ETEVfXywgX19DQ0RNQV9fKSAgICBcCisgIE1PRElGWV9SRUcoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IyLCBUSU1fQ1IyX0NDRFMsIChfX0NDRE1BX18pKQorCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTYzNCwyMCArMTY1NCwyMiBAQAogI2RlZmluZSBJU19USU1fT1BNX0NIQU5ORUxTKF9fQ0hBTk5FTF9fKSAgICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpKQogCisjZGVmaW5lIElTX1RJTV9QRVJJT0QoX19QRVJJT0RfXykgICAgICAoKChfX1BFUklPRF9fKSA+IDBVKSAmJiAoKF9fUEVSSU9EX18pIDw9IDB4RkZGRlUpKQorCiAjZGVmaW5lIElTX1RJTV9DT01QTEVNRU5UQVJZX0NIQU5ORUxTKF9fQ0hBTk5FTF9fKSAoKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8zKSkKIAogI2RlZmluZSBJU19USU1fQ0xPQ0tTT1VSQ0UoX19DTE9DS19fKSAoKChfX0NMT0NLX18pID09IFRJTV9DTE9DS1NPVVJDRV9JTlRFUk5BTCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NMT0NLX18pID09IFRJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NMT0NLX18pID09IFRJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMikgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NMT0NLX18pID09IFRJTV9DTE9DS1NPVVJDRV9JVFIwKSAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NMT0NLX18pID09IFRJTV9DTE9DS1NPVVJDRV9JVFIxKSAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NMT0NLX18pID09IFRJTV9DTE9DS1NPVVJDRV9JVFIyKSAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NMT0NLX18pID09IFRJTV9DTE9DS1NPVVJDRV9JVFIzKSAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NMT0NLX18pID09IFRJTV9DTE9DS1NPVVJDRV9USTFFRCkgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NMT0NLX18pID09IFRJTV9DTE9DS1NPVVJDRV9USTEpICAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NMT0NLX18pID09IFRJTV9DTE9DS1NPVVJDRV9USTIpICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NMT0NLX18pID09IFRJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0lUUjApICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0lUUjEpICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0lUUjIpICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0lUUjMpKQogCiAjZGVmaW5lIElTX1RJTV9DTE9DS1BPTEFSSVRZKF9fUE9MQVJJVFlfXykgKCgoX19QT0xBUklUWV9fKSA9PSBUSU1fQ0xPQ0tQT0xBUklUWV9JTlZFUlRFRCkgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9MQVJJVFlfXykgPT0gVElNX0NMT0NLUE9MQVJJVFlfTk9OSU5WRVJURUQpIHx8IFwKQEAgLTE3MjMsMTMgKzE3NDUsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gVElNX09DTU9ERV9GT1JDRURfQUNUSVZFKSAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gVElNX09DTU9ERV9GT1JDRURfSU5BQ1RJVkUpKQogCi0jZGVmaW5lIElTX1RJTV9UUklHR0VSX1NFTEVDVElPTihfX1NFTEVDVElPTl9fKSAoKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMCkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjEpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIyKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMykgfHwgXAorI2RlZmluZSBJU19USU1fVFJJR0dFUl9TRUxFQ1RJT04oX19TRUxFQ1RJT05fXykgKCgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjApICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIxKSAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMikgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjMpICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19USTFGX0VEKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfVEkxRlAxKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfVEkyRlAyKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfVEkxRlAxKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX1RJMkZQMikgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19FVFJGKSkKIAogI2RlZmluZSBJU19USU1fSU5URVJOQUxfVFJJR0dFUkVWRU5UX1NFTEVDVElPTihfX1NFTEVDVElPTl9fKSAoKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMCkgfHwgXApAQCAtMTgxOCwxMSArMTg0MCwxMSBAQAogICAgKChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzNdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkpCiAKICNkZWZpbmUgVElNX0NIQU5ORUxfU1RBVEVfU0VUX0FMTChfX0hBTkRMRV9fLCAgX19DSEFOTkVMX1NUQVRFX18pIGRvIHsgXAotICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVswXSAgPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAotICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVsxXSAgPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAotICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVsyXSAgPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAotICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVszXSAgPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAotIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMF0gID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMV0gID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMl0gID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbM10gID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChfX0hBTkRMRV9fLCBfX0NIQU5ORUxfXylcCiAgICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/IChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVswXSA6XApAQCAtMTgzNywxNSArMTg1OSwxNSBAQAogICAgKChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVszXSA9IChfX0NIQU5ORUxfU1RBVEVfXykpKQogCiAjZGVmaW5lIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUX0FMTChfX0hBTkRMRV9fLCAgX19DSEFOTkVMX1NUQVRFX18pIGRvIHsgXAotICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMF0gPSBcCi0gIChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCi0gIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVsxXSA9IFwKLSAgKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKLSAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzJdID0gXAotICAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAotICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbM10gPSBcCi0gIChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCi0gfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVswXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVsxXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVsyXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVszXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKIC8qKgogICAqIEB9CkBAIC0xOTc0LDcgKzE5OTYsNyBAQAogICAqIEB7CiAgICovCiAvKiBUaW1lciBFbmNvZGVyIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX0luaXQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sICBUSU1fRW5jb2Rlcl9Jbml0VHlwZURlZiAqc0NvbmZpZyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0VuY29kZXJfSW5pdChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgY29uc3QgVElNX0VuY29kZXJfSW5pdFR5cGVEZWYgKnNDb25maWcpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX0RlSW5pdChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CiB2b2lkIEhBTF9USU1fRW5jb2Rlcl9Nc3BJbml0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKIHZvaWQgSEFMX1RJTV9FbmNvZGVyX01zcERlSW5pdChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2hhbF90aW1fZXguaCBiL0luYy9zdG0zMmYxeHhfaGFsX3RpbV9leC5oCmluZGV4IGQxNTg4ZDcuLjNlZGM5ZDMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYxeHhfaGFsX3RpbV9leC5oCisrKyBiL0luYy9zdG0zMmYxeHhfaGFsX3RpbV9leC5oCkBAIC0yMzUsNyArMjM1LDcgQEAKIC8qIEVuZCBvZiBleHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIFByaXZhdGUgZnVuY3Rpb25zLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGFkZHRvZ3JvdXAgVElNRXhfUHJpdmF0ZV9GdW5jdGlvbnMgVElNRXggUHJpdmF0ZSBGdW5jdGlvbnMKKy8qKiBAYWRkdG9ncm91cCBUSU1FeF9Qcml2YXRlX0Z1bmN0aW9ucyBUSU0gRXh0ZW5kZWQgUHJpdmF0ZSBGdW5jdGlvbnMKICAgKiBAewogICAqLwogdm9pZCBUSU1FeF9ETUFDb21tdXRhdGlvbkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9oYWxfdWFydC5oIGIvSW5jL3N0bTMyZjF4eF9oYWxfdWFydC5oCmluZGV4IDFmNDIzNDcuLjdmZTc2ZTMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYxeHhfaGFsX3VhcnQuaAorKysgYi9JbmMvc3RtMzJmMXh4X2hhbF91YXJ0LmgKQEAgLTE2Myw3ICsxNjMsNyBAQAogCiAgIFVBUlRfSW5pdFR5cGVEZWYgICAgICAgICAgICAgIEluaXQ7ICAgICAgICAgICAgIC8qITwgVUFSVCBjb21tdW5pY2F0aW9uIHBhcmFtZXRlcnMgICAgICAqLwogCi0gIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICpwVHhCdWZmUHRyOyAgICAgIC8qITwgUG9pbnRlciB0byBVQVJUIFR4IHRyYW5zZmVyIEJ1ZmZlciAqLworICBjb25zdCB1aW50OF90ICAgICAgICAgICAgICAgICAqcFR4QnVmZlB0cjsgICAgICAvKiE8IFBvaW50ZXIgdG8gVUFSVCBUeCB0cmFuc2ZlciBCdWZmZXIgKi8KIAogICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgICBUeFhmZXJTaXplOyAgICAgICAvKiE8IFVBUlQgVHggVHJhbnNmZXIgc2l6ZSAgICAgICAgICAgICAgKi8KIApAQCAtOTEyLDMgKzkxMiw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1RNMzJGMXh4X0hBTF9VQVJUX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9oYWxfdXNhcnQuaCBiL0luYy9zdG0zMmYxeHhfaGFsX3VzYXJ0LmgKaW5kZXggZWEwNDIxNi4uNzk1MmYzYiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9oYWxfdXNhcnQuaAorKysgYi9JbmMvc3RtMzJmMXh4X2hhbF91c2FydC5oCkBAIC02NDUsMyArNjQ1LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYxeHhfSEFMX1VTQVJUX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9oYWxfd3dkZy5oIGIvSW5jL3N0bTMyZjF4eF9oYWxfd3dkZy5oCmluZGV4IDA4MWE5MTguLjYxNzllMjAgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYxeHhfaGFsX3d3ZGcuaAorKysgYi9JbmMvc3RtMzJmMXh4X2hhbF93d2RnLmgKQEAgLTE4Myw3ICsxODMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgV1dERyBlYXJseSB3YWtldXAgaW50ZXJydXB0LgotICAqIEBwYXJhbSAgX19IQU5ETEVfXzogV1dERyBoYW5kbGUKKyAgKiBAcGFyYW0gIF9fSEFORExFX18gICAgIFdXREcgaGFuZGxlCiAgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fICBzcGVjaWZpZXMgdGhlIGludGVycnVwdCB0byBlbmFibGUuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBXV0RHX0lUX0VXSTogRWFybHkgd2FrZXVwIGludGVycnVwdApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9sbF9hZGMuaCBiL0luYy9zdG0zMmYxeHhfbGxfYWRjLmgKaW5kZXggN2E2NGMxZC4uZDZjMjhiOCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9sbF9hZGMuaAorKysgYi9JbmMvc3RtMzJmMXh4X2xsX2FkYy5oCkBAIC0zMTIsOCArMzEyLDggQEAKIHsKICAgdWludDMyX3QgVHJpZ2dlclNvdXJjZTsgICAgICAgICAgICAgICAvKiE8IFNldCBBREMgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlOiBpbnRlcm5hbCAoU1cgc3RhcnQpIG9yIGZyb20gZXh0ZXJuYWwgSVAgKHRpbWVyIGV2ZW50LCBleHRlcm5hbCBpbnRlcnJ1cHQgbGluZSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEFEQ19MTF9FQ19SRUdfVFJJR0dFUl9TT1VSQ0UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIE9uIHRoaXMgU1RNMzIgc2VyaWUsIGV4dGVybmFsIHRyaWdnZXIgaXMgc2V0IHdpdGggdHJpZ2dlciBwb2xhcml0eTogcmlzaW5nIGVkZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbmx5IHRyaWdnZXIgcG9sYXJpdHkgYXZhaWxhYmxlIG9uIHRoaXMgU1RNMzIgc2VyaWUpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGV4dGVybmFsIHRyaWdnZXIgaXMgc2V0IHdpdGggdHJpZ2dlciBwb2xhcml0eTogcmlzaW5nIGVkZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbmx5IHRyaWdnZXIgcG9sYXJpdHkgYXZhaWxhYmxlIG9uIHRoaXMgU1RNMzIgc2VyaWVzKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1NldFRyaWdnZXJTb3VyY2UoKS4gKi8KIApAQCAtMzY2LDggKzM2Niw4IEBACiB7CiAgIHVpbnQzMl90IFRyaWdnZXJTb3VyY2U7ICAgICAgICAgICAgICAgLyohPCBTZXQgQURDIGdyb3VwIGluamVjdGVkIGNvbnZlcnNpb24gdHJpZ2dlciBzb3VyY2U6IGludGVybmFsIChTVyBzdGFydCkgb3IgZnJvbSBleHRlcm5hbCBJUCAodGltZXIgZXZlbnQsIGV4dGVybmFsIGludGVycnVwdCBsaW5lKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQURDX0xMX0VDX0lOSl9UUklHR0VSX1NPVVJDRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgT24gdGhpcyBTVE0zMiBzZXJpZSwgZXh0ZXJuYWwgdHJpZ2dlciBpcyBzZXQgd2l0aCB0cmlnZ2VyIHBvbGFyaXR5OiByaXNpbmcgZWRnZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9ubHkgdHJpZ2dlciBwb2xhcml0eSBhdmFpbGFibGUgb24gdGhpcyBTVE0zMiBzZXJpZSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBPbiB0aGlzIFNUTTMyIHNlcmllcywgZXh0ZXJuYWwgdHJpZ2dlciBpcyBzZXQgd2l0aCB0cmlnZ2VyIHBvbGFyaXR5OiByaXNpbmcgZWRnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9ubHkgdHJpZ2dlciBwb2xhcml0eSBhdmFpbGFibGUgb24gdGhpcyBTVE0zMiBzZXJpZXMpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0FEQ19JTkpfU2V0VHJpZ2dlclNvdXJjZSgpLiAqLwogCkBAIC00MDcsMTUgKzQwNywxNSBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIExMX0FEQ19GTEFHX1NUUlQgICAgICAgICAgICAgICAgICAgQURDX1NSX1NUUlQgICAgICAgIC8qITwgQURDIGZsYWcgQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbiBzdGFydCAqLwotI2RlZmluZSBMTF9BRENfRkxBR19FT1MgICAgICAgICAgICAgICAgICAgIEFEQ19TUl9FT0MgICAgICAgICAvKiE8IEFEQyBmbGFnIEFEQyBncm91cCByZWd1bGFyIGVuZCBvZiBzZXF1ZW5jZSBjb252ZXJzaW9ucyAoTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgcmVndWxhciBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiBGbGFnIG5vdGVkIGFzICJFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiRU9TIiBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykgKi8KKyNkZWZpbmUgTExfQURDX0ZMQUdfRU9TICAgICAgICAgICAgICAgICAgICBBRENfU1JfRU9DICAgICAgICAgLyohPCBBREMgZmxhZyBBREMgZ3JvdXAgcmVndWxhciBlbmQgb2Ygc2VxdWVuY2UgY29udmVyc2lvbnMgKE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCByZWd1bGFyIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uIEZsYWcgbm90ZWQgYXMgIkVPQyIgaXMgY29ycmVzcG9uZGluZyB0byBmbGFnICJFT1MiIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKSAqLwogI2RlZmluZSBMTF9BRENfRkxBR19KU1RSVCAgICAgICAgICAgICAgICAgIEFEQ19TUl9KU1RSVCAgICAgICAvKiE8IEFEQyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCBjb252ZXJzaW9uIHN0YXJ0ICovCi0jZGVmaW5lIExMX0FEQ19GTEFHX0pFT1MgICAgICAgICAgICAgICAgICAgQURDX1NSX0pFT0MgICAgICAgIC8qITwgQURDIGZsYWcgQURDIGdyb3VwIGluamVjdGVkIGVuZCBvZiBzZXF1ZW5jZSBjb252ZXJzaW9ucyAoTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gRmxhZyBub3RlZCBhcyAiSkVPQyIgaXMgY29ycmVzcG9uZGluZyB0byBmbGFnICJKRU9TIiBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykgKi8KKyNkZWZpbmUgTExfQURDX0ZMQUdfSkVPUyAgICAgICAgICAgICAgICAgICBBRENfU1JfSkVPQyAgICAgICAgLyohPCBBREMgZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgZW5kIG9mIHNlcXVlbmNlIGNvbnZlcnNpb25zIChOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gRmxhZyBub3RlZCBhcyAiSkVPQyIgaXMgY29ycmVzcG9uZGluZyB0byBmbGFnICJKRU9TIiBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykgKi8KICNkZWZpbmUgTExfQURDX0ZMQUdfQVdEMSAgICAgICAgICAgICAgICAgICBBRENfU1JfQVdEICAgICAgICAgLyohPCBBREMgZmxhZyBBREMgYW5hbG9nIHdhdGNoZG9nIDEgKi8KICNpZiBkZWZpbmVkKEFEQ19NVUxUSU1PREVfU1VQUE9SVCkKLSNkZWZpbmUgTExfQURDX0ZMQUdfRU9TX01TVCAgICAgICAgICAgICAgICBBRENfU1JfRU9DICAgICAgICAgLyohPCBBREMgZmxhZyBBREMgbXVsdGltb2RlIG1hc3RlciBncm91cCByZWd1bGFyIGVuZCBvZiBzZXF1ZW5jZSBjb252ZXJzaW9ucyAoTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgcmVndWxhciBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiBGbGFnIG5vdGVkIGFzICJFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiRU9TIiBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykgKi8KLSNkZWZpbmUgTExfQURDX0ZMQUdfRU9TX1NMViAgICAgICAgICAgICAgICBBRENfU1JfRU9DICAgICAgICAgLyohPCBBREMgZmxhZyBBREMgbXVsdGltb2RlIHNsYXZlIGdyb3VwIHJlZ3VsYXIgZW5kIG9mIHNlcXVlbmNlIGNvbnZlcnNpb25zIChOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCByZWd1bGFyIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uIEZsYWcgbm90ZWQgYXMgIkVPQyIgaXMgY29ycmVzcG9uZGluZyB0byBmbGFnICJFT1MiIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKSAob24gU1RNMzJGMSwgdGhpcyBmbGFnIG11c3QgYmUgcmVhZCBmcm9tIEFEQyBpbnN0YW5jZSBzbGF2ZTogQURDMikgKi8KLSNkZWZpbmUgTExfQURDX0ZMQUdfSkVPU19NU1QgICAgICAgICAgICAgICBBRENfU1JfSkVPQyAgICAgICAgLyohPCBBREMgZmxhZyBBREMgbXVsdGltb2RlIG1hc3RlciBncm91cCBpbmplY3RlZCBlbmQgb2Ygc2VxdWVuY2UgY29udmVyc2lvbnMgKE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uIEZsYWcgbm90ZWQgYXMgIkpFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiSkVPUyIgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpICovCi0jZGVmaW5lIExMX0FEQ19GTEFHX0pFT1NfU0xWICAgICAgICAgICAgICAgQURDX1NSX0pFT0MgICAgICAgIC8qITwgQURDIGZsYWcgQURDIG11bHRpbW9kZSBzbGF2ZSBncm91cCBpbmplY3RlZCBlbmQgb2Ygc2VxdWVuY2UgY29udmVyc2lvbnMgKE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uIEZsYWcgbm90ZWQgYXMgIkpFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiSkVPUyIgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpIChvbiBTVE0zMkYxLCB0aGlzIGZsYWcgbXVzdCBiZSByZWFkIGZyb20gQURDIGluc3RhbmNlIHNsYXZlOiBBREMyKSAqLworI2RlZmluZSBMTF9BRENfRkxBR19FT1NfTVNUICAgICAgICAgICAgICAgIEFEQ19TUl9FT0MgICAgICAgICAvKiE8IEFEQyBmbGFnIEFEQyBtdWx0aW1vZGUgbWFzdGVyIGdyb3VwIHJlZ3VsYXIgZW5kIG9mIHNlcXVlbmNlIGNvbnZlcnNpb25zIChOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgcmVndWxhciBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiBGbGFnIG5vdGVkIGFzICJFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiRU9TIiBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykgKi8KKyNkZWZpbmUgTExfQURDX0ZMQUdfRU9TX1NMViAgICAgICAgICAgICAgICBBRENfU1JfRU9DICAgICAgICAgLyohPCBBREMgZmxhZyBBREMgbXVsdGltb2RlIHNsYXZlIGdyb3VwIHJlZ3VsYXIgZW5kIG9mIHNlcXVlbmNlIGNvbnZlcnNpb25zIChOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgcmVndWxhciBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiBGbGFnIG5vdGVkIGFzICJFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiRU9TIiBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykgKG9uIFNUTTMyRjEsIHRoaXMgZmxhZyBtdXN0IGJlIHJlYWQgZnJvbSBBREMgaW5zdGFuY2Ugc2xhdmU6IEFEQzIpICovCisjZGVmaW5lIExMX0FEQ19GTEFHX0pFT1NfTVNUICAgICAgICAgICAgICAgQURDX1NSX0pFT0MgICAgICAgIC8qITwgQURDIGZsYWcgQURDIG11bHRpbW9kZSBtYXN0ZXIgZ3JvdXAgaW5qZWN0ZWQgZW5kIG9mIHNlcXVlbmNlIGNvbnZlcnNpb25zIChOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gRmxhZyBub3RlZCBhcyAiSkVPQyIgaXMgY29ycmVzcG9uZGluZyB0byBmbGFnICJKRU9TIiBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykgKi8KKyNkZWZpbmUgTExfQURDX0ZMQUdfSkVPU19TTFYgICAgICAgICAgICAgICBBRENfU1JfSkVPQyAgICAgICAgLyohPCBBREMgZmxhZyBBREMgbXVsdGltb2RlIHNsYXZlIGdyb3VwIGluamVjdGVkIGVuZCBvZiBzZXF1ZW5jZSBjb252ZXJzaW9ucyAoTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uIEZsYWcgbm90ZWQgYXMgIkpFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiSkVPUyIgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpIChvbiBTVE0zMkYxLCB0aGlzIGZsYWcgbXVzdCBiZSByZWFkIGZyb20gQURDIGluc3RhbmNlIHNsYXZlOiBBREMyKSAqLwogI2RlZmluZSBMTF9BRENfRkxBR19BV0QxX01TVCAgICAgICAgICAgICAgIEFEQ19TUl9BV0QgICAgICAgICAvKiE8IEFEQyBmbGFnIEFEQyBtdWx0aW1vZGUgbWFzdGVyIGFuYWxvZyB3YXRjaGRvZyAxIG9mIHRoZSBBREMgbWFzdGVyICovCiAjZGVmaW5lIExMX0FEQ19GTEFHX0FXRDFfU0xWICAgICAgICAgICAgICAgQURDX1NSX0FXRCAgICAgICAgIC8qITwgQURDIGZsYWcgQURDIG11bHRpbW9kZSBzbGF2ZSBhbmFsb2cgd2F0Y2hkb2cgMSBvZiB0aGUgQURDIHNsYXZlIChvbiBTVE0zMkYxLCB0aGlzIGZsYWcgbXVzdCBiZSByZWFkIGZyb20gQURDIGluc3RhbmNlIHNsYXZlOiBBREMyKSAqLwogI2VuZGlmCkBAIC00MjcsOCArNDI3LDggQEAKICAgKiBAYnJpZWYgICAgSVQgZGVmaW5lcyB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIExMX0FEQ19SZWFkUmVnIGFuZCAgTExfQURDX1dyaXRlUmVnIGZ1bmN0aW9ucwogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0FEQ19JVF9FT1MgICAgICAgICAgICAgICAgICAgICAgQURDX0NSMV9FT0NJRSAgICAgIC8qITwgQURDIGludGVycnVwdGlvbiBBREMgZ3JvdXAgcmVndWxhciBlbmQgb2Ygc2VxdWVuY2UgY29udmVyc2lvbnMgKE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIHJlZ3VsYXIgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gRmxhZyBub3RlZCBhcyAiRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkVPUyIgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpICovCi0jZGVmaW5lIExMX0FEQ19JVF9KRU9TICAgICAgICAgICAgICAgICAgICAgQURDX0NSMV9KRU9DSUUgICAgIC8qITwgQURDIGludGVycnVwdGlvbiBBREMgZ3JvdXAgaW5qZWN0ZWQgZW5kIG9mIHNlcXVlbmNlIGNvbnZlcnNpb25zIChOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKSAqLworI2RlZmluZSBMTF9BRENfSVRfRU9TICAgICAgICAgICAgICAgICAgICAgIEFEQ19DUjFfRU9DSUUgICAgICAvKiE8IEFEQyBpbnRlcnJ1cHRpb24gQURDIGdyb3VwIHJlZ3VsYXIgZW5kIG9mIHNlcXVlbmNlIGNvbnZlcnNpb25zIChOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgcmVndWxhciBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiBGbGFnIG5vdGVkIGFzICJFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiRU9TIiBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykgKi8KKyNkZWZpbmUgTExfQURDX0lUX0pFT1MgICAgICAgICAgICAgICAgICAgICBBRENfQ1IxX0pFT0NJRSAgICAgLyohPCBBREMgaW50ZXJydXB0aW9uIEFEQyBncm91cCBpbmplY3RlZCBlbmQgb2Ygc2VxdWVuY2UgY29udmVyc2lvbnMgKE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKSAqLwogI2RlZmluZSBMTF9BRENfSVRfQVdEMSAgICAgICAgICAgICAgICAgICAgIEFEQ19DUjFfQVdESUUgICAgICAvKiE8IEFEQyBpbnRlcnJ1cHRpb24gQURDIGFuYWxvZyB3YXRjaGRvZyAxICovCiAvKioKICAgKiBAfQpAQCAtNDU2LDcgKzQ1Niw3IEBACiAvKiAgICAgICBJZiB0aGV5IGFyZSBub3QgbGlzdGVkIGJlbG93LCB0aGV5IGRvIG5vdCByZXF1aXJlIGFueSBzcGVjaWZpYyAgICAgICAqLwogLyogICAgICAgcGF0aCBlbmFibGUuIEluIHRoaXMgY2FzZSwgQWNjZXNzIHRvIG1lYXN1cmVtZW50IHBhdGggaXMgZG9uZSAgICAgICAgKi8KIC8qICAgICAgIG9ubHkgYnkgc2VsZWN0aW5nIHRoZSBjb3JyZXNwb25kaW5nIEFEQyBpbnRlcm5hbCBjaGFubmVsLiAgICAgICAgICAgICovCi0jZGVmaW5lIExMX0FEQ19QQVRIX0lOVEVSTkFMX05PTkUgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAvKiE8IEFEQyBtZWFzdXJlbWVudCBwYXRoZXMgYWxsIGRpc2FibGVkICovCisjZGVmaW5lIExMX0FEQ19QQVRIX0lOVEVSTkFMX05PTkUgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAvKiE8IEFEQyBtZWFzdXJlbWVudCBwYXRocyBhbGwgZGlzYWJsZWQgKi8KICNkZWZpbmUgTExfQURDX1BBVEhfSU5URVJOQUxfVlJFRklOVCAgICAgICAoQURDX0NSMl9UU1ZSRUZFKSAgICAgIC8qITwgQURDIG1lYXN1cmVtZW50IHBhdGggdG8gaW50ZXJuYWwgY2hhbm5lbCBWcmVmSW50ICovCiAjZGVmaW5lIExMX0FEQ19QQVRIX0lOVEVSTkFMX1RFTVBTRU5TT1IgICAgKEFEQ19DUjJfVFNWUkVGRSkgICAgICAvKiE8IEFEQyBtZWFzdXJlbWVudCBwYXRoIHRvIGludGVybmFsIGNoYW5uZWwgdGVtcGVyYXR1cmUgc2Vuc29yICovCiAvKioKQEAgLTQ3NSw3ICs0NzUsNyBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIExMX0FEQ19EQVRBX0FMSUdOX1JJR0hUICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAvKiE8IEFEQyBjb252ZXJzaW9uIGRhdGEgYWxpZ25tZW50OiByaWdodCBhbGlnbmVkIChhbGlnbm1lbnQgb24gZGF0YSByZWdpc3RlciBMU0IgYml0IDApKi8KLSNkZWZpbmUgTExfQURDX0RBVEFfQUxJR05fTEVGVCAgICAgICAgICAgICAoQURDX0NSMl9BTElHTikgICAgICAgIC8qITwgQURDIGNvbnZlcnNpb24gZGF0YSBhbGlnbm1lbnQ6IGxlZnQgYWxpZ25lZCAoYWxpZ21lbnQgb24gZGF0YSByZWdpc3RlciBNU0IgYml0IDE1KSovCisjZGVmaW5lIExMX0FEQ19EQVRBX0FMSUdOX0xFRlQgICAgICAgICAgICAgKEFEQ19DUjJfQUxJR04pICAgICAgICAvKiE8IEFEQyBjb252ZXJzaW9uIGRhdGEgYWxpZ25tZW50OiBsZWZ0IGFsaWduZWQgKGFsaWdubWVudCBvbiBkYXRhIHJlZ2lzdGVyIE1TQiBiaXQgMTUpKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC04ODgsNyArODg4LDcgQEAKIC8qICAgICAgIGNvbmZpZ3VyYXRpb24gKHN5c3RlbSBjbG9jayB2ZXJzdXMgQURDIGNsb2NrKSwgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICBhbmQgdGhlcmVmb3JlIG11c3QgYmUgZGVmaW5lZCBpbiB1c2VyIGFwcGxpY2F0aW9uLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgSW5kaWNhdGlvbnMgZm9yIGVzdGltYXRpb24gb2YgQURDIHRpbWVvdXQgZGVsYXlzLCBmb3IgdGhpcyAgICAgICAgICAgKi8KLS8qICAgICAgIFNUTTMyIHNlcmllOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICBTVE0zMiBzZXJpZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgIC0gQURDIGVuYWJsZSB0aW1lOiBtYXhpbXVtIGRlbGF5IGlzIDF1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgIChyZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0LCBwYXJhbWV0ZXIgInRTVEFCIikgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgLSBBREMgY29udmVyc2lvbiB0aW1lOiBkdXJhdGlvbiBkZXBlbmRpbmcgb24gQURDIGNsb2NrIGFuZCBBREMgICAgICAgKi8KQEAgLTkwMiw3ICs5MDIsNyBAQAogI2RlZmluZSBMTF9BRENfREVMQVlfVEVNUFNFTlNPUl9TVEFCX1VTICAgICAgICgxMFUpICAvKiE8IERlbGF5IGZvciBpbnRlcm5hbCB2b2x0YWdlIHJlZmVyZW5jZSBzdGFiaWxpemF0aW9uIHRpbWUgKi8KIAogLyogRGVsYXkgcmVxdWlyZWQgYmV0d2VlbiBBREMgZGlzYWJsZSBhbmQgQURDIGNhbGlicmF0aW9uIHN0YXJ0LiAgICAgICAgICAgICAgKi8KLS8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWUsIGJlZm9yZSBzdGFydGluZyBhIGNhbGlicmF0aW9uLCAgICAgICAgICAgICAgICAgICovCisvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgYmVmb3JlIHN0YXJ0aW5nIGEgY2FsaWJyYXRpb24sICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgIEFEQyBtdXN0IGJlIGRpc2FibGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICBBIG1pbmltdW0gbnVtYmVyIG9mIEFEQyBjbG9jayBjeWNsZXMgYXJlIHJlcXVpcmVkICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgYmV0d2VlbiBBREMgZGlzYWJsZSBzdGF0ZSBhbmQgY2FsaWJyYXRpb24gc3RhcnQuICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTkxNCw3ICs5MTQsNyBAQAogI2RlZmluZSBMTF9BRENfREVMQVlfRElTQUJMRV9DQUxJQl9BRENfQ1lDTEVTICAoMlUpICAvKiE8IERlbGF5IHJlcXVpcmVkIGJldHdlZW4gQURDIGRpc2FibGUgYW5kIEFEQyBjYWxpYnJhdGlvbiBzdGFydCAqLwogCiAvKiBEZWxheSByZXF1aXJlZCBiZXR3ZWVuIGVuZCBvZiBBREMgRW5hYmxlIGFuZCB0aGUgc3RhcnQgb2YgQURDIGNhbGlicmF0aW9uLiAqLwotLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgYSBtaW5pbXVtIG51bWJlciBvZiBBREMgY2xvY2sgY3ljbGVzICAgICAgICAgICAgKi8KKy8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBhIG1pbmltdW0gbnVtYmVyIG9mIEFEQyBjbG9jayBjeWNsZXMgICAgICAgICAgICAqLwogLyogICAgICAgYXJlIHJlcXVpcmVkIGJldHdlZW4gdGhlIGVuZCBvZiBBREMgZW5hYmxlIGFuZCB0aGUgc3RhcnQgb2YgQURDICAgICAgKi8KIC8qICAgICAgIGNhbGlicmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICBXYWl0IHRpbWUgY2FuIGJlIGNvbXB1dGVkIGluIHVzZXIgYXBwbGljYXRpb24gYnkgd2FpdGluZyBmb3IgdGhlICAgICAqLwpAQCAtMTMxOSw3ICsxMzE5LDcgQEAKICAgKiBAcGFyYW0gIF9fQVdEX1RIUkVTSE9MRF9fIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwMDAgYW5kIE1heF9EYXRhPTB4RkZGCiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAwIGFuZCBNYXhfRGF0YT0weEZGRgogICAqLwotLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgQURDIGlzIGZpeGVkIHRvIHJlc29sdXRpb24gMTIgYml0cy4gICAgICAgICAgICAqLworLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyBpcyBmaXhlZCB0byByZXNvbHV0aW9uIDEyIGJpdHMuICAgICAgICAgICAgKi8KIC8qICAgICAgIFRoaXMgbWFjcm8gaGFzIGJlZW4ga2VwdCBhbnl3YXkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciAgICAgICAgICovCiAvKiAgICAgICBTVE0zMiBmYW1pbGllcyBmZWF0dXJpbmcgZGlmZmVyZW50IEFEQyByZXNvbHV0aW9ucy4gICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfX0xMX0FEQ19BTkFMT0dXRF9TRVRfVEhSRVNIT0xEX1JFU09MVVRJT04oX19BRENfUkVTT0xVVElPTl9fLCBfX0FXRF9USFJFU0hPTERfXykgXApAQCAtMTM0MSw3ICsxMzQxLDcgQEAKICAgKiBAcGFyYW0gIF9fQVdEX1RIUkVTSE9MRF8xMl9CSVRTX18gVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwMCBhbmQgTWF4X0RhdGE9MHhGRkYKICAgKiBAcmV0dmFsIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwMDAgYW5kIE1heF9EYXRhPTB4RkZGCiAgICovCi0vKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllLCBBREMgaXMgZml4ZWQgdG8gcmVzb2x1dGlvbiAxMiBiaXRzLiAgICAgICAgICAgICovCisvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgQURDIGlzIGZpeGVkIHRvIHJlc29sdXRpb24gMTIgYml0cy4gICAgICAgICAgICAqLwogLyogICAgICAgVGhpcyBtYWNybyBoYXMgYmVlbiBrZXB0IGFueXdheSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyICAgICAgICAgKi8KIC8qICAgICAgIFNUTTMyIGZhbWlsaWVzIGZlYXR1cmluZyBkaWZmZXJlbnQgQURDIHJlc29sdXRpb25zLiAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTExfQURDX0FOQUxPR1dEX0dFVF9USFJFU0hPTERfUkVTT0xVVElPTihfX0FEQ19SRVNPTFVUSU9OX18sIF9fQVdEX1RIUkVTSE9MRF8xMl9CSVRTX18pIFwKQEAgLTE3ODEsOCArMTc4MSw4IEBACiAgICogQGJyaWVmICBTZXQgQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbiB0cmlnZ2VyIHNvdXJjZToKICAgKiAgICAgICAgIGludGVybmFsIChTVyBzdGFydCkgb3IgZnJvbSBleHRlcm5hbCBJUCAodGltZXIgZXZlbnQsCiAgICogICAgICAgICBleHRlcm5hbCBpbnRlcnJ1cHQgbGluZSkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBleHRlcm5hbCB0cmlnZ2VyIGlzIHNldCB3aXRoIHRyaWdnZXIgcG9sYXJpdHk6Ci0gICogICAgICAgICByaXNpbmcgZWRnZSAob25seSB0cmlnZ2VyIHBvbGFyaXR5IGF2YWlsYWJsZSBvbiB0aGlzIFNUTTMyIHNlcmllKS4KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBleHRlcm5hbCB0cmlnZ2VyIGlzIHNldCB3aXRoIHRyaWdnZXIgcG9sYXJpdHk6CisgICogICAgICAgICByaXNpbmcgZWRnZSAob25seSB0cmlnZ2VyIHBvbGFyaXR5IGF2YWlsYWJsZSBvbiB0aGlzIFNUTTMyIHNlcmllcykuCiAgICogQG5vdGUgICBBdmFpbGFiaWxpdHkgb2YgcGFyYW1ldGVycyBvZiB0cmlnZ2VyIHNvdXJjZXMgZnJvbSB0aW1lciAKICAgKiAgICAgICAgIGRlcGVuZHMgb24gdGltZXJzIGF2YWlsYWJpbGl0eSBvbiB0aGUgc2VsZWN0ZWQgZGV2aWNlLgogICAqIEBybXRvbGwgQ1IyICAgICAgRVhUU0VMICAgICAgICAgTExfQURDX1JFR19TZXRUcmlnZ2VyU291cmNlCkBAIC0xODEzLDcgKzE4MTMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX1JFR19TZXRUcmlnZ2VyU291cmNlKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBUcmlnZ2VyU291cmNlKQogewotLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgQURDIGdyb3VwIHJlZ3VsYXIgZXh0ZXJuYWwgdHJpZ2dlciBlZGdlICAgICAgICAqLworLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyBncm91cCByZWd1bGFyIGV4dGVybmFsIHRyaWdnZXIgZWRnZSAgICAgICAgKi8KIC8qICAgICAgIGlzIHVzZWQgdG8gcGVyZm9ybSBhIEFEQyBjb252ZXJzaW9uIHN0YXJ0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHNldCBleHRlcm5hbCB0cmlnZ2VyIGVkZ2UuICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgVGhpcyBmZWF0dXJlIGlzIHNldCB1c2luZyBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE5MDcsNyArMTkwNyw3IEBACiAgICogICAgICAgICAgICAgaGlnaGVzdCBjaGFubmVsIG51bWJlcikuCiAgICogICAgICAgICAgIFNlcXVlbmNlciByYW5rcyBhcmUgc2VsZWN0ZWQgdXNpbmcKICAgKiAgICAgICAgICAgZnVuY3Rpb24gIkxMX0FEQ19SRUdfU2V0U2VxdWVuY2VyQ2hhbm5lbHMoKSIuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBncm91cCByZWd1bGFyIHNlcXVlbmNlciBjb25maWd1cmF0aW9uCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgZ3JvdXAgcmVndWxhciBzZXF1ZW5jZXIgY29uZmlndXJhdGlvbgogICAqICAgICAgICAgaXMgY29uZGl0aW9uZWQgdG8gQURDIGluc3RhbmNlIHNlcXVlbmNlciBtb2RlLgogICAqICAgICAgICAgSWYgQURDIGluc3RhbmNlIHNlcXVlbmNlciBtb2RlIGlzIGRpc2FibGVkLCBzZXF1ZW5jZXJzIG9mCiAgICogICAgICAgICBhbGwgZ3JvdXBzIChncm91cCByZWd1bGFyLCBncm91cCBpbmplY3RlZCkgY2FuIGJlIGNvbmZpZ3VyZWQKQEAgLTE5NjgsNyArMTk2OCw3IEBACiAgICogICAgICAgICAgICAgaGlnaGVzdCBjaGFubmVsIG51bWJlcikuCiAgICogICAgICAgICAgIFNlcXVlbmNlciByYW5rcyBhcmUgc2VsZWN0ZWQgdXNpbmcKICAgKiAgICAgICAgICAgZnVuY3Rpb24gIkxMX0FEQ19SRUdfU2V0U2VxdWVuY2VyQ2hhbm5lbHMoKSIuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBncm91cCByZWd1bGFyIHNlcXVlbmNlciBjb25maWd1cmF0aW9uCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgZ3JvdXAgcmVndWxhciBzZXF1ZW5jZXIgY29uZmlndXJhdGlvbgogICAqICAgICAgICAgaXMgY29uZGl0aW9uZWQgdG8gQURDIGluc3RhbmNlIHNlcXVlbmNlciBtb2RlLgogICAqICAgICAgICAgSWYgQURDIGluc3RhbmNlIHNlcXVlbmNlciBtb2RlIGlzIGRpc2FibGVkLCBzZXF1ZW5jZXJzIG9mCiAgICogICAgICAgICBhbGwgZ3JvdXBzIChncm91cCByZWd1bGFyLCBncm91cCBpbmplY3RlZCkgY2FuIGJlIGNvbmZpZ3VyZWQKQEAgLTIwNTgsMTMgKzIwNTgsMTMgQEAKICAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgY29uZmlndXJhdGlvbiBvZjoKICAgKiAgICAgICAgIC0gQ2hhbm5lbHMgb3JkZXJpbmcgaW50byBlYWNoIHJhbmsgb2Ygc2NhbiBzZXF1ZW5jZToKICAgKiAgICAgICAgICAgd2hhdGV2ZXIgY2hhbm5lbCBjYW4gYmUgcGxhY2VkIGludG8gd2hhdGV2ZXIgcmFuay4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBpcworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBpcwogICAqICAgICAgICAgZnVsbHkgY29uZmlndXJhYmxlOiBzZXF1ZW5jZXIgbGVuZ3RoIGFuZCBlYWNoIHJhbmsKICAgKiAgICAgICAgIGFmZmVjdGF0aW9uIHRvIGEgY2hhbm5lbCBhcmUgY29uZmlndXJhYmxlLgogICAqICAgICAgICAgUmVmZXIgdG8gZGVzY3JpcHRpb24gb2YgZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1NldFNlcXVlbmNlckxlbmd0aCgpLgogICAqIEBub3RlICAgRGVwZW5kaW5nIG9uIGRldmljZXMgYW5kIHBhY2thZ2VzLCBzb21lIGNoYW5uZWxzIG1heSBub3QgYmUgYXZhaWxhYmxlLgogICAqICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdG8gbWVhc3VyZSBpbnRlcm5hbCBjaGFubmVscyAoVnJlZkludCwKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0byBtZWFzdXJlIGludGVybmFsIGNoYW5uZWxzIChWcmVmSW50LAogICAqICAgICAgICAgVGVtcFNlbnNvciwgLi4uKSwgbWVhc3VyZW1lbnQgcGF0aHMgdG8gaW50ZXJuYWwgY2hhbm5lbHMgbXVzdCBiZQogICAqICAgICAgICAgZW5hYmxlZCBzZXBhcmF0ZWx5LgogICAqICAgICAgICAgVGhpcyBjYW4gYmUgZG9uZSB1c2luZyBmdW5jdGlvbiBAcmVmIExMX0FEQ19TZXRDb21tb25QYXRoSW50ZXJuYWxDaCgpLgpAQCAtMjE0Myw3ICsyMTQzLDcgQEAKIC8qKgogICAqIEBicmllZiAgR2V0IEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlOiBjaGFubmVsIG9uIHRoZSBzZWxlY3RlZAogICAqICAgICAgICAgc2NhbiBzZXF1ZW5jZSByYW5rLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgQURDIGdyb3VwIHJlZ3VsYXIgc2VxdWVuY2VyIGlzCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgQURDIGdyb3VwIHJlZ3VsYXIgc2VxdWVuY2VyIGlzCiAgICogICAgICAgICBmdWxseSBjb25maWd1cmFibGU6IHNlcXVlbmNlciBsZW5ndGggYW5kIGVhY2ggcmFuawogICAqICAgICAgICAgYWZmZWN0YXRpb24gdG8gYSBjaGFubmVsIGFyZSBjb25maWd1cmFibGUuCiAgICogICAgICAgICBSZWZlciB0byBkZXNjcmlwdGlvbiBvZiBmdW5jdGlvbiBAcmVmIExMX0FEQ19SRUdfU2V0U2VxdWVuY2VyTGVuZ3RoKCkuCkBAIC0yMzQzLDggKzIzNDMsOCBAQAogICAqIEBicmllZiAgU2V0IEFEQyBncm91cCBpbmplY3RlZCBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlOgogICAqICAgICAgICAgaW50ZXJuYWwgKFNXIHN0YXJ0KSBvciBmcm9tIGV4dGVybmFsIElQICh0aW1lciBldmVudCwKICAgKiAgICAgICAgIGV4dGVybmFsIGludGVycnVwdCBsaW5lKS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIGV4dGVybmFsIHRyaWdnZXIgaXMgc2V0IHdpdGggdHJpZ2dlciBwb2xhcml0eToKLSAgKiAgICAgICAgIHJpc2luZyBlZGdlIChvbmx5IHRyaWdnZXIgcG9sYXJpdHkgYXZhaWxhYmxlIG9uIHRoaXMgU1RNMzIgc2VyaWUpLgorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGV4dGVybmFsIHRyaWdnZXIgaXMgc2V0IHdpdGggdHJpZ2dlciBwb2xhcml0eToKKyAgKiAgICAgICAgIHJpc2luZyBlZGdlIChvbmx5IHRyaWdnZXIgcG9sYXJpdHkgYXZhaWxhYmxlIG9uIHRoaXMgU1RNMzIgc2VyaWVzKS4KICAgKiBAbm90ZSAgIEF2YWlsYWJpbGl0eSBvZiBwYXJhbWV0ZXJzIG9mIHRyaWdnZXIgc291cmNlcyBmcm9tIHRpbWVyIAogICAqICAgICAgICAgZGVwZW5kcyBvbiB0aW1lcnMgYXZhaWxhYmlsaXR5IG9uIHRoZSBzZWxlY3RlZCBkZXZpY2UuCiAgICogQHJtdG9sbCBDUjIgICAgICBKRVhUU0VMICAgICAgICBMTF9BRENfSU5KX1NldFRyaWdnZXJTb3VyY2UKQEAgLTIzNzQsNyArMjM3NCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfSU5KX1NldFRyaWdnZXJTb3VyY2UoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IFRyaWdnZXJTb3VyY2UpCiB7Ci0vKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllLCBBREMgZ3JvdXAgaW5qZWN0ZWQgZXh0ZXJuYWwgdHJpZ2dlciBlZGdlICAgICAgICovCisvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgQURDIGdyb3VwIGluamVjdGVkIGV4dGVybmFsIHRyaWdnZXIgZWRnZSAgICAgICAqLwogLyogICAgICAgaXMgdXNlZCB0byBwZXJmb3JtIGEgQURDIGNvbnZlcnNpb24gc3RhcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc2V0IGV4dGVybmFsIHRyaWdnZXIgZWRnZS4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICBUaGlzIGZlYXR1cmUgaXMgc2V0IHVzaW5nIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjQ0NSw3ICsyNDQ1LDcgQEAKICAgKiAgICAgICAgIC0gU2VxdWVuY2UgbGVuZ3RoOiBOdW1iZXIgb2YgcmFua3MgaW4gdGhlIHNjYW4gc2VxdWVuY2UuCiAgICogICAgICAgICAtIFNlcXVlbmNlIGRpcmVjdGlvbjogVW5sZXNzIHNwZWNpZmllZCBpbiBwYXJhbWV0ZXJzLCBzZXF1ZW5jZXIKICAgKiAgICAgICAgICAgc2NhbiBkaXJlY3Rpb24gaXMgZm9yd2FyZCAoZnJvbSByYW5rIDEgdG8gcmFuayBuKS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIGdyb3VwIGluamVjdGVkIHNlcXVlbmNlciBjb25maWd1cmF0aW9uCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgZ3JvdXAgaW5qZWN0ZWQgc2VxdWVuY2VyIGNvbmZpZ3VyYXRpb24KICAgKiAgICAgICAgIGlzIGNvbmRpdGlvbmVkIHRvIEFEQyBpbnN0YW5jZSBzZXF1ZW5jZXIgbW9kZS4KICAgKiAgICAgICAgIElmIEFEQyBpbnN0YW5jZSBzZXF1ZW5jZXIgbW9kZSBpcyBkaXNhYmxlZCwgc2VxdWVuY2VycyBvZgogICAqICAgICAgICAgYWxsIGdyb3VwcyAoZ3JvdXAgcmVndWxhciwgZ3JvdXAgaW5qZWN0ZWQpIGNhbiBiZSBjb25maWd1cmVkCkBAIC0yNDczLDcgKzI0NzMsNyBAQAogICAqICAgICAgICAgLSBTZXF1ZW5jZSBsZW5ndGg6IE51bWJlciBvZiByYW5rcyBpbiB0aGUgc2NhbiBzZXF1ZW5jZS4KICAgKiAgICAgICAgIC0gU2VxdWVuY2UgZGlyZWN0aW9uOiBVbmxlc3Mgc3BlY2lmaWVkIGluIHBhcmFtZXRlcnMsIHNlcXVlbmNlcgogICAqICAgICAgICAgICBzY2FuIGRpcmVjdGlvbiBpcyBmb3J3YXJkIChmcm9tIHJhbmsgMSB0byByYW5rIG4pLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgZ3JvdXAgaW5qZWN0ZWQgc2VxdWVuY2VyIGNvbmZpZ3VyYXRpb24KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBncm91cCBpbmplY3RlZCBzZXF1ZW5jZXIgY29uZmlndXJhdGlvbgogICAqICAgICAgICAgaXMgY29uZGl0aW9uZWQgdG8gQURDIGluc3RhbmNlIHNlcXVlbmNlciBtb2RlLgogICAqICAgICAgICAgSWYgQURDIGluc3RhbmNlIHNlcXVlbmNlciBtb2RlIGlzIGRpc2FibGVkLCBzZXF1ZW5jZXJzIG9mCiAgICogICAgICAgICBhbGwgZ3JvdXBzIChncm91cCByZWd1bGFyLCBncm91cCBpbmplY3RlZCkgY2FuIGJlIGNvbmZpZ3VyZWQKQEAgLTI1MzIsNyArMjUzMiw3IEBACiAgICogICAgICAgICBzZXF1ZW5jZSByYW5rLgogICAqIEBub3RlICAgRGVwZW5kaW5nIG9uIGRldmljZXMgYW5kIHBhY2thZ2VzLCBzb21lIGNoYW5uZWxzIG1heSBub3QgYmUgYXZhaWxhYmxlLgogICAqICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdG8gbWVhc3VyZSBpbnRlcm5hbCBjaGFubmVscyAoVnJlZkludCwKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0byBtZWFzdXJlIGludGVybmFsIGNoYW5uZWxzIChWcmVmSW50LAogICAqICAgICAgICAgVGVtcFNlbnNvciwgLi4uKSwgbWVhc3VyZW1lbnQgcGF0aHMgdG8gaW50ZXJuYWwgY2hhbm5lbHMgbXVzdCBiZQogICAqICAgICAgICAgZW5hYmxlZCBzZXBhcmF0ZWx5LgogICAqICAgICAgICAgVGhpcyBjYW4gYmUgZG9uZSB1c2luZyBmdW5jdGlvbiBAcmVmIExMX0FEQ19TZXRDb21tb25QYXRoSW50ZXJuYWxDaCgpLgpAQCAtMjc3NSw3ICsyNzc1LDcgQEAKICAgKiAgICAgICAgIFRTX3RlbXAsIC4uLikuCiAgICogQG5vdGUgICBDb252ZXJzaW9uIHRpbWUgaXMgdGhlIGFkZGl0aW9uIG9mIHNhbXBsaW5nIHRpbWUgYW5kIHByb2Nlc3NpbmcgdGltZS4KICAgKiAgICAgICAgIFJlZmVyIHRvIHJlZmVyZW5jZSBtYW51YWwgZm9yIEFEQyBwcm9jZXNzaW5nIHRpbWUgb2YKLSAgKiAgICAgICAgIHRoaXMgU1RNMzIgc2VyaWUuCisgICogICAgICAgICB0aGlzIFNUTTMyIHNlcmllcy4KICAgKiBAbm90ZSAgIEluIGNhc2Ugb2YgQURDIGNvbnZlcnNpb24gb2YgaW50ZXJuYWwgY2hhbm5lbCAoVnJlZkludCwKICAgKiAgICAgICAgIHRlbXBlcmF0dXJlIHNlbnNvciwgLi4uKSwgYSBzYW1wbGluZyB0aW1lIG1pbmltdW0gdmFsdWUKICAgKiAgICAgICAgIGlzIHJlcXVpcmVkLgpAQCAtMjg1Myw3ICsyODUzLDcgQEAKICAgKiAgICAgICAgIG9mIGNoYW5uZWwgbWFwcGVkIG9uIEFEQyBncm91cCByZWd1bGFyIG9yIGluamVjdGVkLgogICAqIEBub3RlICAgQ29udmVyc2lvbiB0aW1lIGlzIHRoZSBhZGRpdGlvbiBvZiBzYW1wbGluZyB0aW1lIGFuZCBwcm9jZXNzaW5nIHRpbWUuCiAgICogICAgICAgICBSZWZlciB0byByZWZlcmVuY2UgbWFudWFsIGZvciBBREMgcHJvY2Vzc2luZyB0aW1lIG9mCi0gICogICAgICAgICB0aGlzIFNUTTMyIHNlcmllLgorICAqICAgICAgICAgdGhpcyBTVE0zMiBzZXJpZXMuCiAgICogQHJtdG9sbCBTTVBSMSAgICBTTVAxNyAgICAgICAgICBMTF9BRENfR2V0Q2hhbm5lbFNhbXBsaW5nVGltZVxuCiAgICogICAgICAgICBTTVBSMSAgICBTTVAxNiAgICAgICAgICBMTF9BRENfR2V0Q2hhbm5lbFNhbXBsaW5nVGltZVxuCiAgICogICAgICAgICBTTVBSMSAgICBTTVAxNSAgICAgICAgICBMTF9BRENfR2V0Q2hhbm5lbFNhbXBsaW5nVGltZVxuCkBAIC0yOTMzLDcgKzI5MzMsNyBAQAogICAqIEBub3RlICAgSW4gY2FzZSBvZiBuZWVkIHRvIGRlZmluZSBhIHNpbmdsZSBjaGFubmVsIHRvIG1vbml0b3IKICAgKiAgICAgICAgIHdpdGggYW5hbG9nIHdhdGNoZG9nIGZyb20gc2VxdWVuY2VyIGNoYW5uZWwgZGVmaW5pdGlvbiwKICAgKiAgICAgICAgIHVzZSBoZWxwZXIgbWFjcm8gQHJlZiBfX0xMX0FEQ19BTkFMT0dXRF9DSEFOTkVMX0dST1VQKCkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBvbmx5IDEga2luZCBvZiBhbmFsb2cgd2F0Y2hkb2cKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBvbmx5IDEga2luZCBvZiBhbmFsb2cgd2F0Y2hkb2cKICAgKiAgICAgICAgIGluc3RhbmNlOgogICAqICAgICAgICAgLSBBV0Qgc3RhbmRhcmQgKGluc3RhbmNlIEFXRDEpOgogICAqICAgICAgICAgICAtIGNoYW5uZWxzIG1vbml0b3JlZDogY2FuIG1vbml0b3IgMSBjaGFubmVsIG9yIGFsbCBjaGFubmVscy4KQEAgLTMwMzUsNyArMzAzNSw3IEBACiAgICogICAgICAgICAgIEByZWYgX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKCkuCiAgICogICAgICAgICAgIEFwcGxpY2FibGUgb25seSB3aGVuIHRoZSBhbmFsb2cgd2F0Y2hkb2cgaXMgc2V0IHRvIG1vbml0b3IKICAgKiAgICAgICAgICAgb25lIGNoYW5uZWwuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBvbmx5IDEga2luZCBvZiBhbmFsb2cgd2F0Y2hkb2cKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBvbmx5IDEga2luZCBvZiBhbmFsb2cgd2F0Y2hkb2cKICAgKiAgICAgICAgIGluc3RhbmNlOgogICAqICAgICAgICAgLSBBV0Qgc3RhbmRhcmQgKGluc3RhbmNlIEFXRDEpOgogICAqICAgICAgICAgICAtIGNoYW5uZWxzIG1vbml0b3JlZDogY2FuIG1vbml0b3IgMSBjaGFubmVsIG9yIGFsbCBjaGFubmVscy4KQEAgLTMxMTQsNyArMzExNCw3IEBACiAvKioKICAgKiBAYnJpZWYgIFNldCBBREMgYW5hbG9nIHdhdGNoZG9nIHRocmVzaG9sZCB2YWx1ZSBvZiB0aHJlc2hvbGQKICAgKiAgICAgICAgIGhpZ2ggb3IgbG93LgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgb25seSAxIGtpbmQgb2YgYW5hbG9nIHdhdGNoZG9nCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgb25seSAxIGtpbmQgb2YgYW5hbG9nIHdhdGNoZG9nCiAgICogICAgICAgICBpbnN0YW5jZToKICAgKiAgICAgICAgIC0gQVdEIHN0YW5kYXJkIChpbnN0YW5jZSBBV0QxKToKICAgKiAgICAgICAgICAgLSBjaGFubmVscyBtb25pdG9yZWQ6IGNhbiBtb25pdG9yIDEgY2hhbm5lbCBvciBhbGwgY2hhbm5lbHMuCkBAIC0zMjMzLDcgKzMyMzMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgc2VsZWN0ZWQgQURDIGluc3RhbmNlLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgYWZ0ZXIgQURDIGVuYWJsZSwgYSBkZWxheSBmb3IgCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgYWZ0ZXIgQURDIGVuYWJsZSwgYSBkZWxheSBmb3IgCiAgICogICAgICAgICBBREMgaW50ZXJuYWwgYW5hbG9nIHN0YWJpbGl6YXRpb24gaXMgcmVxdWlyZWQgYmVmb3JlIHBlcmZvcm1pbmcgYQogICAqICAgICAgICAgQURDIGNvbnZlcnNpb24gc3RhcnQuCiAgICogICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0LCBwYXJhbWV0ZXIgdFNUQUIuCkBAIC0zMjcxLDEyICszMjcxLDEyIEBACiAvKioKICAgKiBAYnJpZWYgIFN0YXJ0IEFEQyBjYWxpYnJhdGlvbiBpbiB0aGUgbW9kZSBzaW5nbGUtZW5kZWQKICAgKiAgICAgICAgIG9yIGRpZmZlcmVudGlhbCAoZm9yIGRldmljZXMgd2l0aCBkaWZmZXJlbnRpYWwgbW9kZSBhdmFpbGFibGUpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgYmVmb3JlIHN0YXJ0aW5nIGEgY2FsaWJyYXRpb24sCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgYmVmb3JlIHN0YXJ0aW5nIGEgY2FsaWJyYXRpb24sCiAgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZC4KICAgKiAgICAgICAgIEEgbWluaW11bSBudW1iZXIgb2YgQURDIGNsb2NrIGN5Y2xlcyBhcmUgcmVxdWlyZWQKICAgKiAgICAgICAgIGJldHdlZW4gQURDIGRpc2FibGUgc3RhdGUgYW5kIGNhbGlicmF0aW9uIHN0YXJ0LgogICAqICAgICAgICAgUmVmZXIgdG8gbGl0ZXJhbCBAcmVmIExMX0FEQ19ERUxBWV9ESVNBQkxFX0NBTElCX0FEQ19DWUNMRVMuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBoYXJkd2FyZSBwcmVyZXF1aXNpdGUgYmVmb3JlIHN0YXJ0aW5nIGEgY2FsaWJyYXRpb246CisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgaGFyZHdhcmUgcHJlcmVxdWlzaXRlIGJlZm9yZSBzdGFydGluZyBhIGNhbGlicmF0aW9uOgogICAgICAgICAgICAgdGhlIEFEQyBtdXN0IGhhdmUgYmVlbiBpbiBwb3dlci1vbiBzdGF0ZSBmb3IgYXQgbGVhc3QKICAgICAgICAgICAgIHR3byBBREMgY2xvY2sgY3ljbGVzLgogICAqIEBybXRvbGwgQ1IyICAgICAgQ0FMICAgICAgICAgICAgTExfQURDX1N0YXJ0Q2FsaWJyYXRpb24KQEAgLTMzMDksNyArMzMwOSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU3RhcnQgQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbi4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoaXMgZnVuY3Rpb24gaXMgcmVsZXZhbnQgb25seSBmb3IKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGlzIGZ1bmN0aW9uIGlzIHJlbGV2YW50IG9ubHkgZm9yCiAgICogICAgICAgICBpbnRlcm5hbCB0cmlnZ2VyIChTVyBzdGFydCksIG5vdCBmb3IgZXh0ZXJuYWwgdHJpZ2dlcjoKICAgKiAgICAgICAgIC0gSWYgQURDIHRyaWdnZXIgaGFzIGJlZW4gc2V0IHRvIHNvZnR3YXJlIHN0YXJ0LCBBREMgY29udmVyc2lvbgogICAqICAgICAgICAgICBzdGFydHMgaW1tZWRpYXRlbHkuCkBAIC0zMzMyLDcgKzMzMzIsNyBAQAogICAqIEBicmllZiAgU3RhcnQgQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbiBmcm9tIGV4dGVybmFsIHRyaWdnZXIuCiAgICogQG5vdGUgICBBREMgY29udmVyc2lvbiB3aWxsIHN0YXJ0IGF0IG5leHQgdHJpZ2dlciBldmVudCAob24gdGhlIHNlbGVjdGVkCiAgICogICAgICAgICB0cmlnZ2VyIGVkZ2UpIGZvbGxvd2luZyB0aGUgQURDIHN0YXJ0IGNvbnZlcnNpb24gY29tbWFuZC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoaXMgZnVuY3Rpb24gaXMgcmVsZXZhbnQgZm9yIAorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoaXMgZnVuY3Rpb24gaXMgcmVsZXZhbnQgZm9yIAogICAqICAgICAgICAgQURDIGNvbnZlcnNpb24gc3RhcnQgZnJvbSBleHRlcm5hbCB0cmlnZ2VyLgogICAqICAgICAgICAgSWYgaW50ZXJuYWwgdHJpZ2dlciAoU1cgc3RhcnQpIGlzIG5lZWRlZCwgcGVyZm9ybSBBREMgY29udmVyc2lvbgogICAqICAgICAgICAgc3RhcnQgdXNpbmcgZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1N0YXJ0Q29udmVyc2lvblNXU3RhcnQoKS4KQEAgLTMzNTIsNyArMzM1Miw3IEBACiAgICogQG5vdGUgICBObyBtb3JlIEFEQyBjb252ZXJzaW9uIHdpbGwgc3RhcnQgYXQgbmV4dCB0cmlnZ2VyIGV2ZW50CiAgICogICAgICAgICBmb2xsb3dpbmcgdGhlIEFEQyBzdG9wIGNvbnZlcnNpb24gY29tbWFuZC4KICAgKiAgICAgICAgIElmIGEgY29udmVyc2lvbiBpcyBvbi1nb2luZywgaXQgd2lsbCBiZSBjb21wbGV0ZWQuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBubyBzcGVjaWZpYyBjb21tYW5kCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gc3BlY2lmaWMgY29tbWFuZAogICAqICAgICAgICAgdG8gc3RvcCBhIGNvbnZlcnNpb24gb24tZ29pbmcgb3IgdG8gc3RvcCBBREMgY29udmVydGluZwogICAqICAgICAgICAgaW4gY29udGludW91cyBtb2RlLiBUaGVzZSBhY3Rpb25zIGNhbiBiZSBwZXJmb3JtZWQKICAgKiAgICAgICAgIHVzaW5nIGZ1bmN0aW9uIEByZWYgTExfQURDX0Rpc2FibGUoKS4KQEAgLTM0MzUsNyArMzQzNSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU3RhcnQgQURDIGdyb3VwIGluamVjdGVkIGNvbnZlcnNpb24uCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGlzIGZ1bmN0aW9uIGlzIHJlbGV2YW50IG9ubHkgZm9yCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgdGhpcyBmdW5jdGlvbiBpcyByZWxldmFudCBvbmx5IGZvcgogICAqICAgICAgICAgaW50ZXJuYWwgdHJpZ2dlciAoU1cgc3RhcnQpLCBub3QgZm9yIGV4dGVybmFsIHRyaWdnZXI6CiAgICogICAgICAgICAtIElmIEFEQyB0cmlnZ2VyIGhhcyBiZWVuIHNldCB0byBzb2Z0d2FyZSBzdGFydCwgQURDIGNvbnZlcnNpb24KICAgKiAgICAgICAgICAgc3RhcnRzIGltbWVkaWF0ZWx5LgpAQCAtMzQ1OCw3ICszNDU4LDcgQEAKICAgKiBAYnJpZWYgIFN0YXJ0IEFEQyBncm91cCBpbmplY3RlZCBjb252ZXJzaW9uIGZyb20gZXh0ZXJuYWwgdHJpZ2dlci4KICAgKiBAbm90ZSAgIEFEQyBjb252ZXJzaW9uIHdpbGwgc3RhcnQgYXQgbmV4dCB0cmlnZ2VyIGV2ZW50IChvbiB0aGUgc2VsZWN0ZWQKICAgKiAgICAgICAgIHRyaWdnZXIgZWRnZSkgZm9sbG93aW5nIHRoZSBBREMgc3RhcnQgY29udmVyc2lvbiBjb21tYW5kLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdGhpcyBmdW5jdGlvbiBpcyByZWxldmFudCBmb3IgCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgdGhpcyBmdW5jdGlvbiBpcyByZWxldmFudCBmb3IgCiAgICogICAgICAgICBBREMgY29udmVyc2lvbiBzdGFydCBmcm9tIGV4dGVybmFsIHRyaWdnZXIuCiAgICogICAgICAgICBJZiBpbnRlcm5hbCB0cmlnZ2VyIChTVyBzdGFydCkgaXMgbmVlZGVkLCBwZXJmb3JtIEFEQyBjb252ZXJzaW9uCiAgICogICAgICAgICBzdGFydCB1c2luZyBmdW5jdGlvbiBAcmVmIExMX0FEQ19JTkpfU3RhcnRDb252ZXJzaW9uU1dTdGFydCgpLgpAQCAtMzQ3OCw3ICszNDc4LDcgQEAKICAgKiBAbm90ZSAgIE5vIG1vcmUgQURDIGNvbnZlcnNpb24gd2lsbCBzdGFydCBhdCBuZXh0IHRyaWdnZXIgZXZlbnQKICAgKiAgICAgICAgIGZvbGxvd2luZyB0aGUgQURDIHN0b3AgY29udmVyc2lvbiBjb21tYW5kLgogICAqICAgICAgICAgSWYgYSBjb252ZXJzaW9uIGlzIG9uLWdvaW5nLCBpdCB3aWxsIGJlIGNvbXBsZXRlZC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIHNwZWNpZmljIGNvbW1hbmQKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBzcGVjaWZpYyBjb21tYW5kCiAgICogICAgICAgICB0byBzdG9wIGEgY29udmVyc2lvbiBvbi1nb2luZyBvciB0byBzdG9wIEFEQyBjb252ZXJ0aW5nCiAgICogICAgICAgICBpbiBjb250aW51b3VzIG1vZGUuIFRoZXNlIGFjdGlvbnMgY2FuIGJlIHBlcmZvcm1lZAogICAqICAgICAgICAgdXNpbmcgZnVuY3Rpb24gQHJlZiBMTF9BRENfRGlzYWJsZSgpLgpAQCAtMzU2MCw3ICszNTYwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfSXNBY3RpdmVGbGFnX0VPUyhBRENfVHlwZURlZiAqQURDeCkKIHsKLSAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgcmVndWxhciAgICAgICAgICAgKi8KKyAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIHJlZ3VsYXIgICAgICAgICAgICovCiAgIC8qICAgICAgIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBGbGFnIG5vdGVkIGFzICJFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiRU9TIiAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNTc2LDcgKzM1NzYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19Jc0FjdGl2ZUZsYWdfSkVPUyhBRENfVHlwZURlZiAqQURDeCkKIHsKLSAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgICAgICAgICAgKi8KKyAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkICAgICAgICAgICovCiAgIC8qICAgICAgIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNjAyLDcgKzM2MDIsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX0NsZWFyRmxhZ19FT1MoQURDX1R5cGVEZWYgKkFEQ3gpCiB7Ci0gIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIHJlZ3VsYXIgICAgICAgICAgICovCisgIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCByZWd1bGFyICAgICAgICAgICAqLwogICAvKiAgICAgICBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgRmxhZyBub3RlZCBhcyAiRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkVPUyIgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzYxOCw3ICszNjE4LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FEQ19DbGVhckZsYWdfSkVPUyhBRENfVHlwZURlZiAqQURDeCkKIHsKLSAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgICAgICAgICAgKi8KKyAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkICAgICAgICAgICovCiAgIC8qICAgICAgIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNjQ2LDcgKzM2NDYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19Jc0FjdGl2ZUZsYWdfTVNUX0VPUyhBRENfQ29tbW9uX1R5cGVEZWYgKkFEQ3h5X0NPTU1PTikKIHsKLSAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgcmVndWxhciAgICAgICAgICAgKi8KKyAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIHJlZ3VsYXIgICAgICAgICAgICovCiAgIC8qICAgICAgIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBGbGFnIG5vdGVkIGFzICJFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiRU9TIiAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNjYyLDcgKzM2NjIsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19Jc0FjdGl2ZUZsYWdfU0xWX0VPUyhBRENfQ29tbW9uX1R5cGVEZWYgKkFEQ3h5X0NPTU1PTikKIHsKLSAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgcmVndWxhciAgICAgICAgICAgKi8KKyAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIHJlZ3VsYXIgICAgICAgICAgICovCiAgIC8qICAgICAgIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBGbGFnIG5vdGVkIGFzICJFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiRU9TIiAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNjgyLDcgKzM2ODIsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19Jc0FjdGl2ZUZsYWdfTVNUX0pFT1MoQURDX0NvbW1vbl9UeXBlRGVmICpBREN4eV9DT01NT04pCiB7Ci0gIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkICAgICAgICAgICovCisgIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCAgICAgICAgICAqLwogICAvKiAgICAgICBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgRmxhZyBub3RlZCBhcyAiSkVPQyIgaXMgY29ycmVzcG9uZGluZyB0byBmbGFnICJKRU9TIiAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzY5OCw3ICszNjk4LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfSXNBY3RpdmVGbGFnX1NMVl9KRU9TKEFEQ19Db21tb25fVHlwZURlZiAqQURDeHlfQ09NTU9OKQogewotICAvKiBOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCAgICAgICAgICAqLworICAvKiBOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgICAgICAgICAgKi8KICAgLyogICAgICAgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIEZsYWcgbm90ZWQgYXMgIkpFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiSkVPUyIgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTM3NTIsNyArMzc1Miw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfRW5hYmxlSVRfRU9TKEFEQ19UeXBlRGVmICpBREN4KQogewotICAvKiBOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCByZWd1bGFyICAgICAgICAgICAqLworICAvKiBOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgcmVndWxhciAgICAgICAgICAgKi8KICAgLyogICAgICAgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIEZsYWcgbm90ZWQgYXMgIkVPQyIgaXMgY29ycmVzcG9uZGluZyB0byBmbGFnICJFT1MiICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTM3NjgsNyArMzc2OCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfRW5hYmxlSVRfSkVPUyhBRENfVHlwZURlZiAqQURDeCkKIHsKLSAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgICAgICAgICAgKi8KKyAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkICAgICAgICAgICovCiAgIC8qICAgICAgIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNzk0LDcgKzM3OTQsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX0Rpc2FibGVJVF9FT1MoQURDX1R5cGVEZWYgKkFEQ3gpCiB7Ci0gIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIHJlZ3VsYXIgICAgICAgICAgICovCisgIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCByZWd1bGFyICAgICAgICAgICAqLwogICAvKiAgICAgICBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgRmxhZyBub3RlZCBhcyAiRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkVPUyIgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzgxMCw3ICszODEwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FEQ19EaXNhYmxlSVRfSkVPUyhBRENfVHlwZURlZiAqQURDeCkKIHsKLSAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgICAgICAgICAgKi8KKyAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkICAgICAgICAgICovCiAgIC8qICAgICAgIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zODM3LDcgKzM4MzcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19Jc0VuYWJsZWRJVF9FT1MoQURDX1R5cGVEZWYgKkFEQ3gpCiB7Ci0gIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIHJlZ3VsYXIgICAgICAgICAgICovCisgIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCByZWd1bGFyICAgICAgICAgICAqLwogICAvKiAgICAgICBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgRmxhZyBub3RlZCBhcyAiRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkVPUyIgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzg1NCw3ICszODU0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfSXNFbmFibGVkSVRfSkVPUyhBRENfVHlwZURlZiAqQURDeCkKIHsKLSAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgICAgICAgICAgKi8KKyAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkICAgICAgICAgICovCiAgIC8qICAgICAgIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2xsX2J1cy5oIGIvSW5jL3N0bTMyZjF4eF9sbF9idXMuaAppbmRleCBkYTFlMjdlLi4xNDZmZDg4IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2xsX2J1cy5oCisrKyBiL0luYy9zdG0zMmYxeHhfbGxfYnVzLmgKQEAgLTI2LDEwICsyNiw5IEBACiAgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbgorICAqIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KICAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KLSAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIApAQCAtMTAxMCwzICsxMDA5LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYxeHhfTExfQlVTX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9sbF9jb3J0ZXguaCBiL0luYy9zdG0zMmYxeHhfbGxfY29ydGV4LmgKaW5kZXggNTVmOGRlNy4uYzhiNTAzYyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9sbF9jb3J0ZXguaAorKysgYi9JbmMvc3RtMzJmMXh4X2xsX2NvcnRleC5oCkBAIC0xMCw3ICsxMCw3IEBACiAgICAgWy4uXQogICAgIFRoZSBMTCBDT1JURVggZHJpdmVyIGNvbnRhaW5zIGEgc2V0IG9mIGdlbmVyaWMgQVBJcyB0aGF0IGNhbiBiZQogICAgIHVzZWQgYnkgdXNlcjoKLSAgICAgICgrKSBTWVNUSUNLIGNvbmZpZ3VyYXRpb24gdXNlZCBieSBAcmVmIExMX21EZWxheSBhbmQgQHJlZiBMTF9Jbml0MW1zVGljaworICAgICAgKCspIFNZU1RJQ0sgY29uZmlndXJhdGlvbiB1c2VkIGJ5IExMX21EZWxheSBhbmQgTExfSW5pdDFtc1RpY2sKICAgICAgICAgICBmdW5jdGlvbnMKICAgICAgICgrKSBMb3cgcG93ZXIgbW9kZSBjb25maWd1cmF0aW9uIChTQ0IgcmVnaXN0ZXIgb2YgQ29ydGV4LU1DVSkKICAgICAgICgrKSBNUFUgQVBJIHRvIGNvbmZpZ3VyZSBhbmQgZW5hYmxlIHJlZ2lvbnMKQEAgLTIyLDExICsyMiwxMSBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02MzUsMyArNjM1LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYxeHhfTExfQ09SVEVYX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9sbF9jcmMuaCBiL0luYy9zdG0zMmYxeHhfbGxfY3JjLmgKaW5kZXggMTI1OTVlNi4uNTM0YmExMSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9sbF9jcmMuaAorKysgYi9JbmMvc3RtMzJmMXh4X2xsX2NyYy5oCkBAIC0xMzUsNyArMTM1LDcgQEAKICAgKiBAcGFyYW0gIENSQ3ggQ1JDIEluc3RhbmNlCiAgICogQHJldHZhbCBDdXJyZW50IENSQyBjYWxjdWxhdGlvbiByZXN1bHQgYXMgc3RvcmVkIGluIENSQ19EUiByZWdpc3RlciAoMzIgYml0cykuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQ1JDX1JlYWREYXRhMzIoQ1JDX1R5cGVEZWYgKkNSQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQ1JDX1JlYWREYXRhMzIoY29uc3QgQ1JDX1R5cGVEZWYgKkNSQ3gpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKENSQ3gtPkRSKSk7CiB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2xsX2RhYy5oIGIvSW5jL3N0bTMyZjF4eF9sbF9kYWMuaAppbmRleCA5MTdjZGI1Li4zZTE3YmJmIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2xsX2RhYy5oCisrKyBiL0luYy9zdG0zMmYxeHhfbGxfZGFjLmgKQEAgLTQ3MywxMiArNDczLDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX1JFU09MVVRJT05fOEIKICAgKiBAcmV0dmFsIERBQyBjb252ZXJzaW9uIGRhdGEgKHVuaXQ6IGRpZ2l0YWwgdmFsdWUpCiAgICovCi0jZGVmaW5lIF9fTExfREFDX0NBTENfVk9MVEFHRV9UT19EQVRBKF9fVlJFRkFOQUxPR19WT0xUQUdFX18sXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0RBQ19WT0xUQUdFX18sXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0RBQ19SRVNPTFVUSU9OX18pICAgICAgICAgICAgICAgICAgICAgIFwKLSgoX19EQUNfVk9MVEFHRV9fKSAqIF9fTExfREFDX0RJR0lUQUxfU0NBTEUoX19EQUNfUkVTT0xVVElPTl9fKSAgICAgICAgICAgICAgXAotIC8gKF9fVlJFRkFOQUxPR19WT0xUQUdFX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0pCisjZGVmaW5lIF9fTExfREFDX0NBTENfVk9MVEFHRV9UT19EQVRBKF9fVlJFRkFOQUxPR19WT0xUQUdFX18sIF9fREFDX1ZPTFRBR0VfXywgX19EQUNfUkVTT0xVVElPTl9fKSAgIFwKKyAgKChfX0RBQ19WT0xUQUdFX18pICogX19MTF9EQUNfRElHSVRBTF9TQ0FMRShfX0RBQ19SRVNPTFVUSU9OX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAvIChfX1ZSRUZBTkFMT0dfVk9MVEFHRV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICApCiAKIC8qKgogICAqIEB9CkBAIC00OTMsNiArNDkxLDcgQEAKIC8qKiBAZGVmZ3JvdXAgREFDX0xMX0V4cG9ydGVkX0Z1bmN0aW9ucyBEQUMgRXhwb3J0ZWQgRnVuY3Rpb25zCiAgICogQHsKICAgKi8KKwogLyoqCiAgICogQGJyaWVmICBTZXQgdGhlIGNvbnZlcnNpb24gdHJpZ2dlciBzb3VyY2UgZm9yIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4KICAgKiBAbm90ZSAgIEZvciBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlIHRvIGJlIGVmZmVjdGl2ZSwgREFDIHRyaWdnZXIKQEAgLTUxMiw3ICs1MTEsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19UUklHX0VYVF9USU0yX1RSR08KICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfVFJJR19FWFRfVElNM19UUkdPCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX1RSSUdfRVhUX1RJTTRfVFJHTwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19UUklHX0VYVF9USU01X1RSR08gIAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19UUklHX0VYVF9USU01X1RSR08KICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfVFJJR19FWFRfVElNNl9UUkdPCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX1RSSUdfRVhUX1RJTTdfVFJHTwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19UUklHX0VYVF9USU0xNV9UUkdPCkBAIC01NDMsMTMgKzU0MiwxMyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19UUklHX0VYVF9USU0yX1RSR08KICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfVFJJR19FWFRfVElNM19UUkdPCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX1RSSUdfRVhUX1RJTTRfVFJHTwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19UUklHX0VYVF9USU01X1RSR08gIAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19UUklHX0VYVF9USU01X1RSR08KICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfVFJJR19FWFRfVElNNl9UUkdPCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX1RSSUdfRVhUX1RJTTdfVFJHTwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19UUklHX0VYVF9USU0xNV9UUkdPCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX1RSSUdfRVhUX0VYVElfTElORTkKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfR2V0VHJpZ2dlclNvdXJjZShEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldFRyaWdnZXJTb3VyY2UoY29uc3QgREFDX1R5cGVEZWYgKkRBQ3gsIHVpbnQzMl90IERBQ19DaGFubmVsKQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChEQUN4LT5DUiwgREFDX0NSX1RTRUwxIDw8IChEQUNfQ2hhbm5lbCAmIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0spKQogICAgICAgICAgICAgICAgICAgICA+PiAoREFDX0NoYW5uZWwgJiBEQUNfQ1JfQ0hYX0JJVE9GRlNFVF9NQVNLKQpAQCAtNTkyLDcgKzU5MSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX1dBVkVfQVVUT19HRU5FUkFUSU9OX05PSVNFCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX1dBVkVfQVVUT19HRU5FUkFUSU9OX1RSSUFOR0xFCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldFdhdmVBdXRvR2VuZXJhdGlvbihEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldFdhdmVBdXRvR2VuZXJhdGlvbihjb25zdCBEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKERBQ3gtPkNSLCBEQUNfQ1JfV0FWRTEgPDwgKERBQ19DaGFubmVsICYgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSykpCiAgICAgICAgICAgICAgICAgICAgID4+IChEQUNfQ2hhbm5lbCAmIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0spCkBAIC02NTgsNyArNjU3LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzEwXzAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzExXzAKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfR2V0V2F2ZU5vaXNlTEZTUihEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldFdhdmVOb2lzZUxGU1IoY29uc3QgREFDX1R5cGVEZWYgKkRBQ3gsIHVpbnQzMl90IERBQ19DaGFubmVsKQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChEQUN4LT5DUiwgREFDX0NSX01BTVAxIDw8IChEQUNfQ2hhbm5lbCAmIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0spKQogICAgICAgICAgICAgICAgICAgICA+PiAoREFDX0NoYW5uZWwgJiBEQUNfQ1JfQ0hYX0JJVE9GRlNFVF9NQVNLKQpAQCAtNzI1LDcgKzcyNCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV8yMDQ3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV80MDk1CiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldFdhdmVUcmlhbmdsZUFtcGxpdHVkZShEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldFdhdmVUcmlhbmdsZUFtcGxpdHVkZShjb25zdCBEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKERBQ3gtPkNSLCBEQUNfQ1JfTUFNUDEgPDwgKERBQ19DaGFubmVsICYgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSykpCiAgICAgICAgICAgICAgICAgICAgID4+IChEQUNfQ2hhbm5lbCAmIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0spCkBAIC03NjQsNyArNzYzLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfT1VUUFVUX0JVRkZFUl9FTkFCTEUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfT1VUUFVUX0JVRkZFUl9ESVNBQkxFCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldE91dHB1dEJ1ZmZlcihEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldE91dHB1dEJ1ZmZlcihjb25zdCBEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKERBQ3gtPkNSLCBEQUNfQ1JfQk9GRjEgPDwgKERBQ19DaGFubmVsICYgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSykpCiAgICAgICAgICAgICAgICAgICAgID4+IChEQUNfQ2hhbm5lbCAmIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0spCkBAIC04MjYsNyArODI1LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0lzRE1BUmVxRW5hYmxlZChEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0lzRE1BUmVxRW5hYmxlZChjb25zdCBEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKERBQ3gtPkNSLAogICAgICAgICAgICAgICAgICAgICBEQUNfQ1JfRE1BRU4xIDw8IChEQUNfQ2hhbm5lbCAmIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0spKQpAQCAtODY1LDcgKzg2NCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0RNQV9SRUdfREFUQV84QklUU19SSUdIVF9BTElHTkVECiAgICogQHJldHZhbCBEQUMgcmVnaXN0ZXIgYWRkcmVzcwogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19ETUFfR2V0UmVnQWRkcihEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwsIHVpbnQzMl90IFJlZ2lzdGVyKQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19ETUFfR2V0UmVnQWRkcihjb25zdCBEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwsIHVpbnQzMl90IFJlZ2lzdGVyKQogewogICAvKiBSZXRyaWV2ZSBhZGRyZXNzIG9mIHJlZ2lzdGVyIERIUjEyUngsIERIUjEyTHggb3IgREhSOFJ4IGRlcGVuZGluZyBvbiAgICAgKi8KICAgLyogREFDIGNoYW5uZWwgc2VsZWN0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC05MjYsNyArOTI1LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0lzRW5hYmxlZChEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0lzRW5hYmxlZChjb25zdCBEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKERBQ3gtPkNSLAogICAgICAgICAgICAgICAgICAgICBEQUNfQ1JfRU4xIDw8IChEQUNfQ2hhbm5lbCAmIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0spKQpAQCAtOTg0LDcgKzk4Myw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19Jc1RyaWdnZXJFbmFibGVkKERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfSXNUcmlnZ2VyRW5hYmxlZChjb25zdCBEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKERBQ3gtPkNSLAogICAgICAgICAgICAgICAgICAgICBEQUNfQ1JfVEVOMSA8PCAoREFDX0NoYW5uZWwgJiBEQUNfQ1JfQ0hYX0JJVE9GRlNFVF9NQVNLKSkKQEAgLTExNTcsNyArMTE1Niw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMgogICAqIEByZXR2YWwgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwMCBhbmQgTWF4X0RhdGE9MHhGRkYKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfUmV0cmlldmVPdXRwdXREYXRhKERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfUmV0cmlldmVPdXRwdXREYXRhKGNvbnN0IERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCkKIHsKICAgX19JTyB1aW50MzJfdCBjb25zdCAqcHJlZyA9IF9fREFDX1BUUl9SRUdfT0ZGU0VUKERBQ3gtPkRPUjEsIChEQUNfQ2hhbm5lbCA+PiBEQUNfUkVHX0RPUlhfUkVHT0ZGU0VUX0JJVE9GRlNFVF9QT1MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIERBQ19SRUdfRE9SWF9SRUdPRkZTRVRfTUFTS19QT1NCSVQwKTsKQEAgLTExODAsNyArMTE3OSw3IEBACiAgICogQHBhcmFtICBEQUN4IERBQyBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19Jc0FjdGl2ZUZsYWdfRE1BVURSMShEQUNfVHlwZURlZiAqREFDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfSXNBY3RpdmVGbGFnX0RNQVVEUjEoY29uc3QgREFDX1R5cGVEZWYgKkRBQ3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKERBQ3gtPlNSLCBMTF9EQUNfRkxBR19ETUFVRFIxKSA9PSAoTExfREFDX0ZMQUdfRE1BVURSMSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTExOTMsNyArMTE5Miw3IEBACiAgICogQHBhcmFtICBEQUN4IERBQyBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19Jc0FjdGl2ZUZsYWdfRE1BVURSMihEQUNfVHlwZURlZiAqREFDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfSXNBY3RpdmVGbGFnX0RNQVVEUjIoY29uc3QgREFDX1R5cGVEZWYgKkRBQ3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKERBQ3gtPlNSLCBMTF9EQUNfRkxBR19ETUFVRFIyKSA9PSAoTExfREFDX0ZMQUdfRE1BVURSMikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTEyOTIsNyArMTI5MSw3IEBACiAgICogQHBhcmFtICBEQUN4IERBQyBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19Jc0VuYWJsZWRJVF9ETUFVRFIxKERBQ19UeXBlRGVmICpEQUN4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19Jc0VuYWJsZWRJVF9ETUFVRFIxKGNvbnN0IERBQ19UeXBlRGVmICpEQUN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChEQUN4LT5DUiwgTExfREFDX0lUX0RNQVVEUklFMSkgPT0gKExMX0RBQ19JVF9ETUFVRFJJRTEpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xMzA1LDcgKzEzMDQsNyBAQAogICAqIEBwYXJhbSAgREFDeCBEQUMgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfSXNFbmFibGVkSVRfRE1BVURSMihEQUNfVHlwZURlZiAqREFDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfSXNFbmFibGVkSVRfRE1BVURSMihjb25zdCBEQUNfVHlwZURlZiAqREFDeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoREFDeC0+Q1IsIExMX0RBQ19JVF9ETUFVRFJJRTIpID09IChMTF9EQUNfSVRfRE1BVURSSUUyKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTMyMCw4ICsxMzE5LDggQEAKICAgKiBAewogICAqLwogCi1FcnJvclN0YXR1cyBMTF9EQUNfRGVJbml0KERBQ19UeXBlRGVmICpEQUN4KTsKLUVycm9yU3RhdHVzIExMX0RBQ19Jbml0KERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCwgTExfREFDX0luaXRUeXBlRGVmICpEQUNfSW5pdFN0cnVjdCk7CitFcnJvclN0YXR1cyBMTF9EQUNfRGVJbml0KGNvbnN0IERBQ19UeXBlRGVmICpEQUN4KTsKK0Vycm9yU3RhdHVzIExMX0RBQ19Jbml0KERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCwgY29uc3QgTExfREFDX0luaXRUeXBlRGVmICpEQUNfSW5pdFN0cnVjdCk7CiB2b2lkICAgICAgICBMTF9EQUNfU3RydWN0SW5pdChMTF9EQUNfSW5pdFR5cGVEZWYgKkRBQ19Jbml0U3RydWN0KTsKIAogLyoqCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2xsX2RtYS5oIGIvSW5jL3N0bTMyZjF4eF9sbF9kbWEuaAppbmRleCAyMDE0MjJhLi45YzUyNmU4IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2xsX2RtYS5oCisrKyBiL0luYy9zdG0zMmYxeHhfbGxfZG1hLmgKQEAgLTksOCArOSw4IEBACiAgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbgorICAqIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KICAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTkwNyw3ICs5MDcsNyBAQAogLyoqCiAgICogQGJyaWVmICBDb25maWd1cmUgdGhlIFNvdXJjZSBhbmQgRGVzdGluYXRpb24gYWRkcmVzc2VzLgogICAqIEBub3RlICAgVGhpcyBBUEkgbXVzdCBub3QgYmUgY2FsbGVkIHdoZW4gdGhlIERNQSBjaGFubmVsIGlzIGVuYWJsZWQuCi0gICogQG5vdGUgICBFYWNoIElQIHVzaW5nIERNQSBwcm92aWRlcyBhbiBBUEkgdG8gZ2V0IGRpcmVjdGx5IHRoZSByZWdpc3RlciBhZHJlc3MgKExMX1BQUF9ETUFfR2V0UmVnQWRkcikuCisgICogQG5vdGUgICBFYWNoIElQIHVzaW5nIERNQSBwcm92aWRlcyBhbiBBUEkgdG8gZ2V0IGRpcmVjdGx5IHRoZSByZWdpc3RlciBhZGRyZXNzIChMTF9QUFBfRE1BX0dldFJlZ0FkZHIpLgogICAqIEBybXRvbGwgQ1BBUiAgICAgICAgIFBBICAgICAgICAgICAgTExfRE1BX0NvbmZpZ0FkZHJlc3Nlc1xuCiAgICogICAgICAgICBDTUFSICAgICAgICAgTUEgICAgICAgICAgICBMTF9ETUFfQ29uZmlnQWRkcmVzc2VzCiAgICogQHBhcmFtICBETUF4IERNQXggSW5zdGFuY2UKQEAgLTE5NTUsMyArMTk1NSw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1RNMzJGMXh4X0xMX0RNQV9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfbGxfZXh0aS5oIGIvSW5jL3N0bTMyZjF4eF9sbF9leHRpLmgKaW5kZXggNGM4NWFlYi4uNDhhNDJmMCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9sbF9leHRpLmgKKysrIGIvSW5jL3N0bTMyZjF4eF9sbF9leHRpLmgKQEAgLTg4MywzICs4ODMsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBTVE0zMkYxeHhfTExfRVhUSV9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfbGxfZnNtYy5oIGIvSW5jL3N0bTMyZjF4eF9sbF9mc21jLmgKaW5kZXggZGQ4Y2Q2ZS4uYWJkNDc4OCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9sbF9mc21jLmgKKysrIGIvSW5jL3N0bTMyZjF4eF9sbF9mc21jLmgKQEAgLTkyLDcgKzkyLDcgQEAKICNkZWZpbmUgSVNfRlNNQ19OT1JTUkFNX0VYVEVOREVEX0RFVklDRShfX0lOU1RBTkNFX18pICgoX19JTlNUQU5DRV9fKSA9PSBGU01DX05PUlNSQU1fRVhURU5ERURfREVWSUNFKQogCiAjZW5kaWYgLyogRlNNQ19CQU5LMSAqLwotI2lmIGRlZmluZWQoRlNNQ19CQU5LMykKKyNpZiAgZGVmaW5lZChGU01DX0JBTkszKQogCiAjZGVmaW5lIElTX0ZTTUNfTkFORF9CQU5LKF9fQkFOS19fKSAoKF9fQkFOS19fKSA9PSBGU01DX05BTkRfQkFOSzMpCiAjZGVmaW5lIElTX0ZTTUNfV0FJVF9GRUFUVVJFKF9fRkVBVFVSRV9fKSAoKChfX0ZFQVRVUkVfXykgPT0gRlNNQ19OQU5EX1BDQ19XQUlUX0ZFQVRVUkVfRElTQUJMRSkgfHwgXApAQCAtMjg3LDcgKzI4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXkgYmV0d2VlbiBBTEUgbG93IGFuZCBSRSBsb3cuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDI1NSAqLwogfSBGU01DX05BTkRfSW5pdFR5cGVEZWY7Ci0jZW5kaWYKKyNlbmRpZiAvKiBGU01DX0JBTkszICovCiAKICNpZiBkZWZpbmVkKEZTTUNfQkFOSzMpIHx8IGRlZmluZWQoRlNNQ19CQU5LNCkKIC8qKgpAQCAtMzM5LDcgKzMzOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXkgYmV0d2VlbiBBTEUgbG93IGFuZCBSRSBsb3cuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDI1NSAqLwogfUZTTUNfUENDQVJEX0luaXRUeXBlRGVmOwotI2VuZGlmCisjZW5kaWYgLyogRlNNQ19CQU5LNCAqLwogCiAvKioKICAgKiBAfQpAQCAtNTUwLDcgKzU1MCw3IEBACiAgICovCiAjaWYgZGVmaW5lZChGU01DX0JBTks0KQogI2RlZmluZSBGU01DX1BDUl9NRU1PUllfVFlQRV9QQ0NBUkQgICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKLSNlbmRpZgorI2VuZGlmIC8qIEZTTUNfQkFOSzQgKi8KICNkZWZpbmUgRlNNQ19QQ1JfTUVNT1JZX1RZUEVfTkFORCAgICAgICAgICAgICAgICAoMHgwMDAwMDAwOFUpCiAvKioKICAgKiBAfQpAQCAtNTkwLDcgKzU5MCw3IEBACiAvKioKICAgKiBAfQogICAqLwotI2VuZGlmIC8qIEZTTUNfQkFOSzMgKi8KKyNlbmRpZiAvKiBGU01DX0JBTkszIHx8IEZTTUNfQmFuazQgKi8KIAogCiAvKiogQGRlZmdyb3VwIEZTTUNfTExfSW50ZXJydXB0X2RlZmluaXRpb24gRlNNQyBMb3cgTGF5ZXIgSW50ZXJydXB0IGRlZmluaXRpb24KQEAgLTYwMCw3ICs2MDAsNyBAQAogI2RlZmluZSBGU01DX0lUX1JJU0lOR19FREdFICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDA4VSkKICNkZWZpbmUgRlNNQ19JVF9MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAxMFUpCiAjZGVmaW5lIEZTTUNfSVRfRkFMTElOR19FREdFICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMjBVKQotI2VuZGlmIC8qIEZTTUNfQkFOSzMgKi8KKyNlbmRpZiAvKiBGU01DX0JBTkszIHx8IEZTTUNfQmFuazQgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC02MTMsNyArNjEzLDcgQEAKICNkZWZpbmUgRlNNQ19GTEFHX0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMlUpCiAjZGVmaW5lIEZTTUNfRkxBR19GQUxMSU5HX0VER0UgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDRVKQogI2RlZmluZSBGU01DX0ZMQUdfRkVNUFQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDQwVSkKLSNlbmRpZiAvKiBGU01DX0JBTkszICovCisjZW5kaWYgLyogRlNNQ19CQU5LMyB8fCBGU01DX0Jhbms0ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNjg2LDcgKzY4Niw3IEBACiAvKioKICAgKiBAfQogICAqLwotI2VuZGlmCisjZW5kaWYgLyogRlNNQ19CQU5LMyAqLwogCiAjaWYgZGVmaW5lZChGU01DX0JBTks0KQogLyoqIEBkZWZncm91cCBGU01DX0xMX1BDQ0FSRF9NYWNyb3MgRk1DIFBDQ0FSRCBNYWNyb3MKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfbGxfZ3Bpby5oIGIvSW5jL3N0bTMyZjF4eF9sbF9ncGlvLmgKaW5kZXggZWIxZGRiZi4uNzA1ODY4NiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9sbF9ncGlvLmgKKysrIGIvSW5jL3N0bTMyZjF4eF9sbF9ncGlvLmgKQEAgLTg5Nyw3ICs4OTcsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIENoZWNrIGlmIFNQSTEgaGFzIGJlZW4gcmVtYXBlZCBvciBub3QKKyAgKiBAYnJpZWYgIENoZWNrIGlmIFNQSTEgaGFzIGJlZW4gcmVtYXBwZWQgb3Igbm90CiAgICogQHJtdG9sbCBNQVBSICAgICAgICAgU1BJMV9SRU1BUCAgICAgICAgIExMX0dQSU9fQUZfSXNFbmFibGVkUmVtYXBfU1BJMQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwpAQCAtOTI5LDcgKzkyOSw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgQ2hlY2sgaWYgSTJDMSBoYXMgYmVlbiByZW1hcGVkIG9yIG5vdAorICAqIEBicmllZiAgQ2hlY2sgaWYgSTJDMSBoYXMgYmVlbiByZW1hcHBlZCBvciBub3QKICAgKiBAcm10b2xsIE1BUFIgICAgICAgICBJMkMxX1JFTUFQICAgICAgICAgTExfR1BJT19BRl9Jc0VuYWJsZWRSZW1hcF9JMkMxCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCkBAIC05NjEsNyArOTYxLDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBDaGVjayBpZiBVU0FSVDEgaGFzIGJlZW4gcmVtYXBlZCBvciBub3QKKyAgKiBAYnJpZWYgIENoZWNrIGlmIFVTQVJUMSBoYXMgYmVlbiByZW1hcHBlZCBvciBub3QKICAgKiBAcm10b2xsIE1BUFIgICAgICAgICBVU0FSVDFfUkVNQVAgICAgICAgICBMTF9HUElPX0FGX0lzRW5hYmxlZFJlbWFwX1VTQVJUMQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwpAQCAtOTkzLDcgKzk5Myw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgQ2hlY2sgaWYgVVNBUlQyIGhhcyBiZWVuIHJlbWFwZWQgb3Igbm90CisgICogQGJyaWVmICBDaGVjayBpZiBVU0FSVDIgaGFzIGJlZW4gcmVtYXBwZWQgb3Igbm90CiAgICogQHJtdG9sbCBNQVBSICAgICAgICAgVVNBUlQyX1JFTUFQICAgICAgICAgTExfR1BJT19BRl9Jc0VuYWJsZWRSZW1hcF9VU0FSVDIKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KQEAgLTExNzUsNyArMTE3NSw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgQ2hlY2sgaWYgVElNNCBoYXMgYmVlbiByZW1hcGVkIG9yIG5vdAorICAqIEBicmllZiAgQ2hlY2sgaWYgVElNNCBoYXMgYmVlbiByZW1hcHBlZCBvciBub3QKICAgKiBAcm10b2xsIE1BUFIgICAgICAgICBUSU00X1JFTUFQICAgICAgICAgTExfR1BJT19BRl9Jc0VuYWJsZWRSZW1hcF9USU00CiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCkBAIC0xMjUwLDcgKzEyNTAsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIENoZWNrIGlmIFBEMDEgaGFzIGJlZW4gcmVtYXBlZCBvciBub3QKKyAgKiBAYnJpZWYgIENoZWNrIGlmIFBEMDEgaGFzIGJlZW4gcmVtYXBwZWQgb3Igbm90CiAgICogQHJtdG9sbCBNQVBSICAgICAgICAgUEQwMV9SRU1BUCAgICAgICAgIExMX0dQSU9fQUZfSXNFbmFibGVkUmVtYXBfUEQwMQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwpAQCAtMTI4NSw3ICsxMjg1LDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBDaGVjayBpZiBUSU01Q0g0IGhhcyBiZWVuIHJlbWFwZWQgb3Igbm90CisgICogQGJyaWVmICBDaGVjayBpZiBUSU01Q0g0IGhhcyBiZWVuIHJlbWFwcGVkIG9yIG5vdAogICAqIEBybXRvbGwgTUFQUiAgICAgICAgIFRJTTVDSDRfSVJFTUFQICAgICAgICAgTExfR1BJT19BRl9Jc0VuYWJsZWRSZW1hcF9USU01Q0g0CiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCkBAIC0xMzIxLDcgKzEzMjEsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIENoZWNrIGlmIEVUSCBoYXMgYmVlbiByZW1hcGVkIG9yIG5vdAorICAqIEBicmllZiAgQ2hlY2sgaWYgRVRIIGhhcyBiZWVuIHJlbWFwcGVkIG9yIG5vdAogICAqIEBybXRvbGwgTUFQUiAgICAgICAgIEVUSF9SRU1BUCAgICAgICAgIExMX0dQSU9fQUZfSXNFbmFibGVkUmVtYXBfRVRICiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCkBAIC0xMzU3LDcgKzEzNTcsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIENoZWNrIGlmIENBTjIgaGFzIGJlZW4gcmVtYXBlZCBvciBub3QKKyAgKiBAYnJpZWYgIENoZWNrIGlmIENBTjIgaGFzIGJlZW4gcmVtYXBwZWQgb3Igbm90CiAgICogQHJtdG9sbCBNQVBSICAgICAgICAgQ0FOMl9SRU1BUCAgICAgICAgIExMX0dQSU9fQUZfSXNFbmFibGVkUmVtYXBfQ0FOMgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwpAQCAtMTQxNyw3ICsxNDE3LDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBDaGVjayBpZiBBREMxX0VUUkdJTkogaGFzIGJlZW4gcmVtYXBlZCBvciBub3QKKyAgKiBAYnJpZWYgIENoZWNrIGlmIEFEQzFfRVRSR0lOSiBoYXMgYmVlbiByZW1hcHBlZCBvciBub3QKICAgKiBAcm10b2xsIE1BUFIgICAgICAgICBBREMxX0VUUkdJTkpfUkVNQVAgICAgICAgICBMTF9HUElPX0FGX0lzRW5hYmxlZFJlbWFwX0FEQzFfRVRSR0lOSgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwpAQCAtMTQ1MSw3ICsxNDUxLDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBDaGVjayBpZiBBREMxX0VUUkdSRUcgaGFzIGJlZW4gcmVtYXBlZCBvciBub3QKKyAgKiBAYnJpZWYgIENoZWNrIGlmIEFEQzFfRVRSR1JFRyBoYXMgYmVlbiByZW1hcHBlZCBvciBub3QKICAgKiBAcm10b2xsIE1BUFIgICAgICAgICBBREMxX0VUUkdSRUdfUkVNQVAgICAgICAgICBMTF9HUElPX0FGX0lzRW5hYmxlZFJlbWFwX0FEQzFfRVRSR1JFRwogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwpAQCAtMTQ4Niw3ICsxNDg2LDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBDaGVjayBpZiBBREMyX0VUUkdJTkogaGFzIGJlZW4gcmVtYXBlZCBvciBub3QKKyAgKiBAYnJpZWYgIENoZWNrIGlmIEFEQzJfRVRSR0lOSiBoYXMgYmVlbiByZW1hcHBlZCBvciBub3QKICAgKiBAcm10b2xsIE1BUFIgICAgICAgICBBREMyX0VUUkdJTkpfUkVNQVAgICAgICAgICBMTF9HUElPX0FGX0lzRW5hYmxlZFJlbWFwX0FEQzJfRVRSR0lOSgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwpAQCAtMTUyMSw3ICsxNTIxLDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBDaGVjayBpZiBBREMyX0VUUkdSRUcgaGFzIGJlZW4gcmVtYXBlZCBvciBub3QKKyAgKiBAYnJpZWYgIENoZWNrIGlmIEFEQzJfRVRSR1JFRyBoYXMgYmVlbiByZW1hcHBlZCBvciBub3QKICAgKiBAcm10b2xsIE1BUFIgICAgICAgICBBREMyX0VUUkdSRUdfUkVNQVAgICAgICAgICBMTF9HUElPX0FGX0lzRW5hYmxlZFJlbWFwX0FEQzJfRVRSR1JFRwogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwpAQCAtMTUzOSw4ICsxNTM5LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0dQSU9fQUZfRW5hYmxlUmVtYXBfU1dKKHZvaWQpCiB7Ci0gIENMRUFSX0JJVChBRklPLT5NQVBSLEFGSU9fTUFQUl9TV0pfQ0ZHKTsKLSAgU0VUX0JJVChBRklPLT5NQVBSLCBBRklPX01BUFJfU1dKX0NGR19SRVNFVCk7CisgIE1PRElGWV9SRUcoQUZJTy0+TUFQUiwgQUZJT19NQVBSX1NXSl9DRkcsIEFGSU9fTUFQUl9TV0pfQ0ZHX1JFU0VUKTsKIH0KIAogLyoqCkBAIC0xNTUxLDggKzE1NTAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfR1BJT19BRl9SZW1hcF9TV0pfTk9OSlRSU1Qodm9pZCkKIHsKLSAgQ0xFQVJfQklUKEFGSU8tPk1BUFIsQUZJT19NQVBSX1NXSl9DRkcpOwotICBTRVRfQklUKEFGSU8tPk1BUFIsIEFGSU9fTUFQUl9TV0pfQ0ZHX05PSk5UUlNUKTsKKyAgTU9ESUZZX1JFRyhBRklPLT5NQVBSLCBBRklPX01BUFJfU1dKX0NGRywgQUZJT19NQVBSX1NXSl9DRkdfTk9KTlRSU1QpOwogfQogCiAvKioKQEAgLTE1NjMsOCArMTU2MSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9HUElPX0FGX1JlbWFwX1NXSl9OT0pUQUcodm9pZCkKIHsKLSAgQ0xFQVJfQklUKEFGSU8tPk1BUFIsQUZJT19NQVBSX1NXSl9DRkcpOwotICBTRVRfQklUKEFGSU8tPk1BUFIsIEFGSU9fTUFQUl9TV0pfQ0ZHX0pUQUdESVNBQkxFKTsKKyAgTU9ESUZZX1JFRyhBRklPLT5NQVBSLCBBRklPX01BUFJfU1dKX0NGRywgQUZJT19NQVBSX1NXSl9DRkdfSlRBR0RJU0FCTEUpOwogfQogCiAvKioKQEAgLTE1NzUsOCArMTU3Miw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9HUElPX0FGX0Rpc2FibGVSZW1hcF9TV0oodm9pZCkKIHsKLSAgQ0xFQVJfQklUKEFGSU8tPk1BUFIsQUZJT19NQVBSX1NXSl9DRkcpOwotICBTRVRfQklUKEFGSU8tPk1BUFIsIEFGSU9fTUFQUl9TV0pfQ0ZHX0RJU0FCTEUpOworICBNT0RJRllfUkVHKEFGSU8tPk1BUFIsIEFGSU9fTUFQUl9TV0pfQ0ZHLCBBRklPX01BUFJfU1dKX0NGR19ESVNBQkxFKTsKIH0KIAogI2lmIGRlZmluZWQoQUZJT19NQVBSX1NQSTNfUkVNQVApCkBAIC0xNjA2LDcgKzE2MDIsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIENoZWNrIGlmIFNQSTMgaGFzIGJlZW4gcmVtYXBlZCBvciBub3QKKyAgKiBAYnJpZWYgIENoZWNrIGlmIFNQSTMgaGFzIGJlZW4gcmVtYXBwZWQgb3Igbm90CiAgICogQHJtdG9sbCBNQVBSICAgICAgICAgU1BJM19SRU1BUCAgICAgICAgIExMX0dQSU9fQUZfSXNFbmFibGVkUmVtYXBfU1BJM19SRU1BUAogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwpAQCAtMTY5NSw3ICsxNjkxLDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBDaGVjayBpZiBUSU05X0NIMSBhbmQgVElNOV9DSDIgaGF2ZSBiZWVuIHJlbWFwZWQgb3Igbm90CisgICogQGJyaWVmICBDaGVjayBpZiBUSU05X0NIMSBhbmQgVElNOV9DSDIgaGF2ZSBiZWVuIHJlbWFwcGVkIG9yIG5vdAogICAqIEBybXRvbGwgTUFQUjIgICAgICAgICBUSU05X1JFTUFQICAgICAgICAgTExfR1BJT19BRl9Jc0VuYWJsZWRSZW1hcF9USU05CiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCkBAIC0xNzMwLDcgKzE3MjYsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIENoZWNrIGlmIFRJTTEwX0NIMSBoYXMgYmVlbiByZW1hcGVkIG9yIG5vdAorICAqIEBicmllZiAgQ2hlY2sgaWYgVElNMTBfQ0gxIGhhcyBiZWVuIHJlbWFwcGVkIG9yIG5vdAogICAqIEBybXRvbGwgTUFQUjIgICAgICAgICBUSU0xMF9SRU1BUCAgICAgICAgIExMX0dQSU9fQUZfSXNFbmFibGVkUmVtYXBfVElNMTAKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KQEAgLTE3NjQsNyArMTc2MCw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgQ2hlY2sgaWYgVElNMTFfQ0gxIGhhcyBiZWVuIHJlbWFwZWQgb3Igbm90CisgICogQGJyaWVmICBDaGVjayBpZiBUSU0xMV9DSDEgaGFzIGJlZW4gcmVtYXBwZWQgb3Igbm90CiAgICogQHJtdG9sbCBNQVBSMiAgICAgICAgIFRJTTExX1JFTUFQICAgICAgICAgTExfR1BJT19BRl9Jc0VuYWJsZWRSZW1hcF9USU0xMQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwpAQCAtMTc5OSw3ICsxNzk1LDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBDaGVjayBpZiBUSU0xM19DSDEgaGFzIGJlZW4gcmVtYXBlZCBvciBub3QKKyAgKiBAYnJpZWYgIENoZWNrIGlmIFRJTTEzX0NIMSBoYXMgYmVlbiByZW1hcHBlZCBvciBub3QKICAgKiBAcm10b2xsIE1BUFIyICAgICAgICAgVElNMTNfUkVNQVAgICAgICAgICBMTF9HUElPX0FGX0lzRW5hYmxlZFJlbWFwX1RJTTEzCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCkBAIC0xODM0LDcgKzE4MzAsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIENoZWNrIGlmIFRJTTE0X0NIMSBoYXMgYmVlbiByZW1hcGVkIG9yIG5vdAorICAqIEBicmllZiAgQ2hlY2sgaWYgVElNMTRfQ0gxIGhhcyBiZWVuIHJlbWFwcGVkIG9yIG5vdAogICAqIEBybXRvbGwgTUFQUjIgICAgICAgICBUSU0xNF9SRU1BUCAgICAgICAgIExMX0dQSU9fQUZfSXNFbmFibGVkUmVtYXBfVElNMTQKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KQEAgLTE4OTMsNyArMTg4OSw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgQ2hlY2sgaWYgVElNMTVfQ0gxIGhhcyBiZWVuIHJlbWFwZWQgb3Igbm90CisgICogQGJyaWVmICBDaGVjayBpZiBUSU0xNV9DSDEgaGFzIGJlZW4gcmVtYXBwZWQgb3Igbm90CiAgICogQHJtdG9sbCBNQVBSMiAgICAgICAgIFRJTTE1X1JFTUFQICAgICAgICAgTExfR1BJT19BRl9Jc0VuYWJsZWRSZW1hcF9USU0xNQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwpAQCAtMTkyOCw3ICsxOTI0LDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBDaGVjayBpZiBUSU0xNl9DSDEgaGFzIGJlZW4gcmVtYXBlZCBvciBub3QKKyAgKiBAYnJpZWYgIENoZWNrIGlmIFRJTTE2X0NIMSBoYXMgYmVlbiByZW1hcHBlZCBvciBub3QKICAgKiBAcm10b2xsIE1BUFIyICAgICAgICAgVElNMTZfUkVNQVAgICAgICAgICBMTF9HUElPX0FGX0lzRW5hYmxlZFJlbWFwX1RJTTE2CiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCkBAIC0xOTYzLDcgKzE5NTksNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIENoZWNrIGlmIFRJTTE3X0NIMSBoYXMgYmVlbiByZW1hcGVkIG9yIG5vdAorICAqIEBicmllZiAgQ2hlY2sgaWYgVElNMTdfQ0gxIGhhcyBiZWVuIHJlbWFwcGVkIG9yIG5vdAogICAqIEBybXRvbGwgTUFQUjIgICAgICAgICBUSU0xN19SRU1BUCAgICAgICAgIExMX0dQSU9fQUZfSXNFbmFibGVkUmVtYXBfVElNMTcKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KQEAgLTE5OTgsNyArMTk5NCw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgQ2hlY2sgaWYgQ0VDIGhhcyBiZWVuIHJlbWFwZWQgb3Igbm90CisgICogQGJyaWVmICBDaGVjayBpZiBDRUMgaGFzIGJlZW4gcmVtYXBwZWQgb3Igbm90CiAgICogQHJtdG9sbCBNQVBSMiAgICAgICAgIENFQ19SRU1BUCAgICAgICAgIExMX0dQSU9fQUZfSXNFbmFibGVkUmVtYXBfQ0VDCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCkBAIC0yMDMzLDcgKzIwMjksNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIENoZWNrIGlmIFRJTTFETUEgaGFzIGJlZW4gcmVtYXBlZCBvciBub3QKKyAgKiBAYnJpZWYgIENoZWNrIGlmIFRJTTFETUEgaGFzIGJlZW4gcmVtYXBwZWQgb3Igbm90CiAgICogQHJtdG9sbCBNQVBSMiAgICAgICAgIFRJTTFfRE1BX1JFTUFQICAgICAgICAgTExfR1BJT19BRl9Jc0VuYWJsZWRSZW1hcF9USU0xRE1BCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCkBAIC0yMDY4LDcgKzIwNjQsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIENoZWNrIGlmIFRJTTY3REFDRE1BIGhhcyBiZWVuIHJlbWFwZWQgb3Igbm90CisgICogQGJyaWVmICBDaGVjayBpZiBUSU02N0RBQ0RNQSBoYXMgYmVlbiByZW1hcHBlZCBvciBub3QKICAgKiBAcm10b2xsIE1BUFIyICAgICAgICAgVElNNzZfREFDX0RNQV9SRU1BUCAgICAgICAgIExMX0dQSU9fQUZfSXNFbmFibGVkUmVtYXBfVElNNjdEQUNETUEKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KQEAgLTIxMDUsNyArMjEwMSw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgQ2hlY2sgaWYgVElNMTJfQ0gxIGhhcyBiZWVuIHJlbWFwZWQgb3Igbm90CisgICogQGJyaWVmICBDaGVjayBpZiBUSU0xMl9DSDEgaGFzIGJlZW4gcmVtYXBwZWQgb3Igbm90CiAgICogQHJtdG9sbCBNQVBSMiAgICAgICAgIFRJTTEyX1JFTUFQICAgICAgICAgTExfR1BJT19BRl9Jc0VuYWJsZWRSZW1hcF9USU0xMgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwpAQCAtMjE1MCw3ICsyMTQ2LDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBDaGVjayBpZiBNSVNDIGhhcyBiZWVuIHJlbWFwZWQgb3Igbm90CisgICogQGJyaWVmICBDaGVjayBpZiBNSVNDIGhhcyBiZWVuIHJlbWFwcGVkIG9yIG5vdAogICAqIEBybXRvbGwgTUFQUjIgICAgICAgICBNSVNDX1JFTUFQICAgICAgICAgTExfR1BJT19BRl9Jc0VuYWJsZWRSZW1hcF9NSVNDCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCkBAIC0yMzQyLDMgKzIzMzgsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBTVE0zMkYxeHhfTExfR1BJT19IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfbGxfaTJjLmggYi9JbmMvc3RtMzJmMXh4X2xsX2kyYy5oCmluZGV4IDZjZDAyMmYuLmUwMGU5MTggMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYxeHhfbGxfaTJjLmgKKysrIGIvSW5jL3N0bTMyZjF4eF9sbF9pMmMuaApAQCAtMjQwLDcgKzI0MCw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBJMkNfTExfRU1fRXhwb3J0ZWRfTWFjcm9zX0hlbHBlciBFeHBvcnRlZF9NYWNyb3NfSGVscGVyCisvKiogQGRlZmdyb3VwIEkyQ19MTF9FTV9FeHBvcnRlZF9NYWNyb3NfSGVscGVyIEV4cG9ydGVkIE1hY3JvcyBIZWxwZXIKICAgKiBAewogICAqLwogCkBAIC03NjEsNyArNzYxLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDb25maWd1cmUgcGVyaXBoZXJhbCBtb2RlLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgU01CVVMgICAgICAgICBMTF9JMkNfU2V0TW9kZVxuCiAgICogICAgICAgICBDUjEgICAgICAgICAgU01CVFlQRSAgICAgICBMTF9JMkNfU2V0TW9kZVxuCkBAIC03ODEsNyArNzgxLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBHZXQgcGVyaXBoZXJhbCBtb2RlLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgU01CVVMgICAgICAgICBMTF9JMkNfR2V0TW9kZVxuCiAgICogICAgICAgICBDUjEgICAgICAgICAgU01CVFlQRSAgICAgICBMTF9JMkNfR2V0TW9kZVxuCkBAIC04MDAsNyArODAwLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgU01CdXMgYWxlcnQgKEhvc3Qgb3IgRGV2aWNlIG1vZGUpCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAbm90ZSAgIFNNQnVzIERldmljZSBtb2RlOgogICAqICAgICAgICAgLSBTTUJ1cyBBbGVydCBwaW4gaXMgZHJpdmVkIGxvdyBhbmQKQEAgLTgxOCw3ICs4MTgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgU01CdXMgYWxlcnQgKEhvc3Qgb3IgRGV2aWNlIG1vZGUpCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAbm90ZSAgIFNNQnVzIERldmljZSBtb2RlOgogICAqICAgICAgICAgLSBTTUJ1cyBBbGVydCBwaW4gaXMgbm90IGRyaXZlZCAoY2FuIGJlIHVzZWQgYXMgYSBzdGFuZGFyZCBHUElPKSBhbmQKQEAgLTgzNiw3ICs4MzYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIGlmIFNNQnVzIGFsZXJ0IChIb3N0IG9yIERldmljZSBtb2RlKSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgQUxFUlQgICAgICAgICBMTF9JMkNfSXNFbmFibGVkU01CdXNBbGVydAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCkBAIC04NDksNyArODQ5LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgU01CdXMgUGFja2V0IEVycm9yIENhbGN1bGF0aW9uIChQRUMpLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgRU5QRUMgICAgICAgICBMTF9JMkNfRW5hYmxlU01CdXNQRUMKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtODYyLDcgKzg2Miw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBTTUJ1cyBQYWNrZXQgRXJyb3IgQ2FsY3VsYXRpb24gKFBFQykuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBFTlBFQyAgICAgICAgIExMX0kyQ19EaXNhYmxlU01CdXNQRUMKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtODc1LDcgKzg3NSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgaWYgU01CdXMgUGFja2V0IEVycm9yIENhbGN1bGF0aW9uIChQRUMpIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBFTlBFQyAgICAgICAgIExMX0kyQ19Jc0VuYWJsZWRTTUJ1c1BFQwogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCkBAIC0xMDU4LDcgKzEwNTgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBFcnJvciBpbnRlcnJ1cHRzLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQG5vdGUgICBBbnkgb2YgdGhlc2UgZXJyb3JzIHdpbGwgZ2VuZXJhdGUgaW50ZXJydXB0IDoKICAgKiAgICAgICAgIEJ1cyBFcnJvciBkZXRlY3Rpb24gKEJFUlIpCkBAIC0xMDc5LDcgKzEwNzksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgRXJyb3IgaW50ZXJydXB0cy4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBub3RlICAgQW55IG9mIHRoZXNlIGVycm9ycyB3aWxsIGdlbmVyYXRlIGludGVycnVwdCA6CiAgICogICAgICAgICBCdXMgRXJyb3IgZGV0ZWN0aW9uIChCRVJSKQpAQCAtMTI2Miw3ICsxMjYyLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSB0aGUgc3RhdHVzIG9mIFNNQnVzIFBFQyBlcnJvciBmbGFnIGluIHJlY2VwdGlvbi4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgU1IxICAgICAgICAgIFBFQ0VSUiAgICAgICAgTExfSTJDX0lzQWN0aXZlU01CdXNGbGFnX1BFQ0VSUgogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCkBAIC0xMjc1LDcgKzEyNzUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluZGljYXRlIHRoZSBzdGF0dXMgb2YgU01CdXMgVGltZW91dCBkZXRlY3Rpb24gZmxhZy4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgU1IxICAgICAgICAgIFRJTUVPVVQgICAgICAgTExfSTJDX0lzQWN0aXZlU01CdXNGbGFnX1RJTUVPVVQKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTI4OCw3ICsxMjg4LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSB0aGUgc3RhdHVzIG9mIFNNQnVzIGFsZXJ0IGZsYWcuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIFNSMSAgICAgICAgICBTTUJBTEVSVCAgICAgIExMX0kyQ19Jc0FjdGl2ZVNNQnVzRmxhZ19BTEVSVAogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCkBAIC0xMzI3LDcgKzEzMjcsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluZGljYXRlIHRoZSBzdGF0dXMgb2YgU01CdXMgSG9zdCBhZGRyZXNzIHJlY2VwdGlvbiAoU2xhdmUgbW9kZSkuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAbm90ZSAgIFJFU0VUOiBObyBTTUJ1cyBIb3N0IGFkZHJlc3MKICAgKiAgICAgICAgIFNFVDogU01CdXMgSG9zdCBhZGRyZXNzIHJlY2VpdmVkLgpAQCAtMTM0Myw3ICsxMzQzLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSB0aGUgc3RhdHVzIG9mIFNNQnVzIERldmljZSBkZWZhdWx0IGFkZHJlc3MgcmVjZXB0aW9uIChTbGF2ZSBtb2RlKS4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBub3RlICAgUkVTRVQ6IE5vIFNNQnVzIERldmljZSBkZWZhdWx0IGFkZHJlc3MKICAgKiAgICAgICAgIFNFVDogU01CdXMgRGV2aWNlIGRlZmF1bHQgYWRkcmVzcyByZWNlaXZlZC4KQEAgLTE0NzUsNyArMTQ3NSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2xlYXIgU01CdXMgVGltZW91dCBkZXRlY3Rpb24gZmxhZy4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgU1IxICAgICAgICAgIFRJTUVPVVQgICAgICAgTExfSTJDX0NsZWFyU01CdXNGbGFnX1RJTUVPVVQKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTQ4OCw3ICsxNDg4LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDbGVhciBTTUJ1cyBBbGVydCBmbGFnLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBTUjEgICAgICAgICAgU01CQUxFUlQgICAgICBMTF9JMkNfQ2xlYXJTTUJ1c0ZsYWdfQUxFUlQKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTY2Niw3ICsxNjY2LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdHJhbnNmZXIgb3IgaW50ZXJuYWwgY29tcGFyaXNvbiBvZiB0aGUgU01CdXMgUGFja2V0IEVycm9yIGJ5dGUgKHRyYW5zbWlzc2lvbiBvciByZWNlcHRpb24gbW9kZSkuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAbm90ZSAgIFRoaXMgZmVhdHVyZSBpcyBjbGVhcmVkIGJ5IGhhcmR3YXJlIHdoZW4gdGhlIFBFQyBieXRlIGlzIHRyYW5zZmVycmVkIG9yIGNvbXBhcmVkLAogICAqICAgICAgICAgb3IgYnkgYSBTVEFSVCBvciBTVE9QIGNvbmRpdGlvbiwgaXQgaXMgYWxzbyBjbGVhcmVkIGJ5IHNvZnR3YXJlLgpAQCAtMTY4MSw3ICsxNjgxLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIHRyYW5zZmVyIG9yIGludGVybmFsIGNvbXBhcmlzb24gb2YgdGhlIFNNQnVzIFBhY2tldCBFcnJvciBieXRlICh0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uIG1vZGUpLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgUEVDICAgICAgICAgICBMTF9JMkNfRGlzYWJsZVNNQnVzUEVDQ29tcGFyZQogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCkBAIC0xNjk0LDcgKzE2OTQsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBTTUJ1cyBQYWNrZXQgRXJyb3IgYnl0ZSB0cmFuc2ZlciBvciBpbnRlcm5hbCBjb21wYXJpc29uIGlzIHJlcXVlc3RlZCBvciBub3QuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBQRUMgICAgICAgICAgIExMX0kyQ19Jc0VuYWJsZWRTTUJ1c1BFQ0NvbXBhcmUKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTcwNyw3ICsxNzA3LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBHZXQgdGhlIFNNQnVzIFBhY2tldCBFcnJvciBieXRlIGNhbGN1bGF0ZWQuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIFNSMiAgICAgICAgICBQRUMgICAgICAgICAgIExMX0kyQ19HZXRTTUJ1c1BFQwogICAqIEBwYXJhbSAgSTJDeCBJMkMgSW5zdGFuY2UuCkBAIC0xNzc5LDMgKzE3NzksNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjF4eF9MTF9JMkNfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2xsX3JjYy5oIGIvSW5jL3N0bTMyZjF4eF9sbF9yY2MuaAppbmRleCAyZjA5NzBjLi45N2E2MzkwIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2xsX3JjYy5oCisrKyBiL0luYy9zdG0zMmYxeHhfbGxfcmNjLmgKQEAgLTksMTAgKzksOSBAQAogICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCi0gICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKQEAgLTIzMDcsMyArMjMwNiw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1RNMzJGMXh4X0xMX1JDQ19IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfbGxfc2RtbWMuaCBiL0luYy9zdG0zMmYxeHhfbGxfc2RtbWMuaAppbmRleCAxOGYwNWY5Li4xZTBhZDVlIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2xsX3NkbW1jLmgKKysrIGIvSW5jL3N0bTMyZjF4eF9sbF9zZG1tYy5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiBDb3B5cmlnaHQgKGMpIDIwMTggU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQpAQCAtMTQsNyArMTQsNyBAQAogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqLworICAqLyAKIAogLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpZm5kZWYgU1RNMzJGMXh4X0xMX1NETU1DX0gKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfbGxfc3BpLmggYi9JbmMvc3RtMzJmMXh4X2xsX3NwaS5oCmluZGV4IGQyMWViY2QuLjM3ZTAwYjEgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYxeHhfbGxfc3BpLmgKKysrIGIvSW5jL3N0bTMyZjF4eF9sbF9zcGkuaApAQCAtMTkzMywzICsxOTMzLDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogU1RNMzJGMXh4X0xMX1NQSV9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfbGxfc3lzdGVtLmggYi9JbmMvc3RtMzJmMXh4X2xsX3N5c3RlbS5oCmluZGV4IDMzNzJjZmQuLjBhYmEzN2IgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYxeHhfbGxfc3lzdGVtLmgKKysrIGIvSW5jL3N0bTMyZjF4eF9sbF9zeXN0ZW0uaApAQCAtMyw2ICszLDE4IEBACiAgICogQGZpbGUgICAgc3RtMzJmMXh4X2xsX3N5c3RlbS5oCiAgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KICAgKiBAYnJpZWYgICBIZWFkZXIgZmlsZSBvZiBTWVNURU0gTEwgbW9kdWxlLgorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBhdHRlbnRpb24KKyAgKgorICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgKgorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQorICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KKyAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSG93IHRvIHVzZSB0aGlzIGRyaXZlciAjIyMjIwpAQCAtMTYsMTYgKzI4LDYgQEAKIAogICBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICogQGF0dGVudGlvbgotICAqCi0gICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KLSAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgotICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNTY5LDMgKzU3MSw1IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1RNMzJGMXh4X0xMX1NZU1RFTV9IICovCisKKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjF4eF9sbF90aW0uaCBiL0luYy9zdG0zMmYxeHhfbGxfdGltLmgKaW5kZXggMzcxNmM1My4uZjFiY2ViNyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9sbF90aW0uaAorKysgYi9JbmMvc3RtMzJmMXh4X2xsX3RpbS5oCkBAIC05MTMsNiArOTEzLDcgQEAKICAgKi8KIAogCisKIC8qKgogICAqIEB9CiAgICovCkBAIC05NDUsMTAgKzk0Niw2IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBUSU1fTExfRU1fRXhwb3J0ZWRfTWFjcm9zIEV4cG9ydGVkX01hY3JvcwotICAqIEB7Ci0gICovCi0KIC8qKgogICAqIEBicmllZiAgSEVMUEVSIG1hY3JvIGNhbGN1bGF0aW5nIERUR1swOjddIGluIHRoZSBUSU14X0JEVFIgcmVnaXN0ZXIgdG8gYWNoaWV2ZSB0aGUgcmVxdWVzdGVkIGRlYWQgdGltZSBkdXJhdGlvbi4KICAgKiBAbm90ZSBleDogQHJlZiBfX0xMX1RJTV9DQUxDX0RFQURUSU1FICg4MDAwMDAwMCwgQHJlZiBMTF9USU1fR2V0Q2xvY2tEaXZpc2lvbiAoKSwgMTIwKTsKQEAgLTEwNDAsMTEgKzEwMzcsNiBAQAogICAqIEB9CiAgICovCiAKLQotLyoqCi0gICogQH0KLSAgKi8KLQogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAZGVmZ3JvdXAgVElNX0xMX0V4cG9ydGVkX0Z1bmN0aW9ucyBUSU0gRXhwb3J0ZWQgRnVuY3Rpb25zCiAgICogQHsKQEAgLTE1ODYsNyArMTU3OCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVElNX0NIQU5ORUxfQ0g0CiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0NDX0lzRW5hYmxlZENoYW5uZWwoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWxzKQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9DQ19Jc0VuYWJsZWRDaGFubmVsKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVscykKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVElNeC0+Q0NFUiwgQ2hhbm5lbHMpID09IChDaGFubmVscykpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE4NzEsNyArMTg2Myw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVElNX0NIQU5ORUxfQ0g0CiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0lzRW5hYmxlZEZhc3QoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0lzRW5hYmxlZEZhc3QoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7CiAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CiAgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CkBAIC0xOTM1LDcgKzE5MjcsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1RJTV9DSEFOTkVMX0NINAogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9PQ19Jc0VuYWJsZWRQcmVsb2FkKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9PQ19Jc0VuYWJsZWRQcmVsb2FkKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewogICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwogICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwpAQCAtMjAwOCw3ICsyMDAwLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fQ0hBTk5FTF9DSDQKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fT0NfSXNFbmFibGVkQ2xlYXIoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0lzRW5hYmxlZENsZWFyKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewogICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwogICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwpAQCAtMjQ1NCw3ICsyNDQ2LDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSUNfSXNFbmFibGVkWE9SQ29tYmluYXRpb24oVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lDX0lzRW5hYmxlZFhPUkNvbWJpbmF0aW9uKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICByZXR1cm4gKChSRUFEX0JJVChUSU14LT5DUjIsIFRJTV9DUjJfVEkxUykgPT0gKFRJTV9DUjJfVEkxUykpID8gMVVMIDogMFVMKTsKIH0KQEAgLTI5NzUsMTAgKzI5NjcsNiBAQAogICAqLwogCiAKLS8qKgotICAqIEB9Ci0gICovCi0KIC8qKiBAZGVmZ3JvdXAgVElNX0xMX0VGX0ZMQUdfTWFuYWdlbWVudCBGTEFHLU1hbmFnZW1lbnQKICAgKiBAewogICAqLwpAQCAtMzUyNSw3ICszNTEzLDcgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFRJTV9MTF9FRl9ETUFfTWFuYWdlbWVudCBETUEtTWFuYWdlbWVudAorLyoqIEBkZWZncm91cCBUSU1fTExfRUZfRE1BX01hbmFnZW1lbnQgRE1BIE1hbmFnZW1lbnQKICAgKiBAewogICAqLwogLyoqCkBAIC0zODYzLDcgKzM4NTEsNyBAQAogICAqIEB7CiAgICovCiAKLUVycm9yU3RhdHVzIExMX1RJTV9EZUluaXQoVElNX1R5cGVEZWYgKlRJTXgpOworRXJyb3JTdGF0dXMgTExfVElNX0RlSW5pdChjb25zdCBUSU1fVHlwZURlZiAqVElNeCk7CiB2b2lkIExMX1RJTV9TdHJ1Y3RJbml0KExMX1RJTV9Jbml0VHlwZURlZiAqVElNX0luaXRTdHJ1Y3QpOwogRXJyb3JTdGF0dXMgTExfVElNX0luaXQoVElNX1R5cGVEZWYgKlRJTXgsIGNvbnN0IExMX1RJTV9Jbml0VHlwZURlZiAqVElNX0luaXRTdHJ1Y3QpOwogdm9pZCBMTF9USU1fT0NfU3RydWN0SW5pdChMTF9USU1fT0NfSW5pdFR5cGVEZWYgKlRJTV9PQ19Jbml0U3RydWN0KTsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfbGxfdXNhcnQuaCBiL0luYy9zdG0zMmYxeHhfbGxfdXNhcnQuaAppbmRleCBkZmM1MDQzLi5mZmU0MTkyIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMXh4X2xsX3VzYXJ0LmgKKysrIGIvSW5jL3N0bTMyZjF4eF9sbF91c2FydC5oCkBAIC0yNTY2LDMgKzI1NjYsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjF4eF9MTF9VU0FSVF9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYxeHhfbGxfdXNiLmggYi9JbmMvc3RtMzJmMXh4X2xsX3VzYi5oCmluZGV4IGQwNTY2N2IuLmMzYTU0OGUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYxeHhfbGxfdXNiLmgKKysrIGIvSW5jL3N0bTMyZjF4eF9sbF91c2IuaApAQCAtMjIsNyArMjIsNyBAQAogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewotI2VuZGlmCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpbmNsdWRlICJzdG0zMmYxeHhfaGFsX2RlZi5oIgpAQCAtNDEsMTMgKzQxLDEyIEBACiAvKioKICAgKiBAYnJpZWYgIFVTQiBNb2RlIGRlZmluaXRpb24KICAgKi8KLSNpZiBkZWZpbmVkIChVU0JfT1RHX0ZTKQogCiB0eXBlZGVmIGVudW0KIHsKLSAgVVNCX0RFVklDRV9NT0RFICA9IDAsCi0gIFVTQl9IT1NUX01PREUgICAgPSAxLAotICBVU0JfRFJEX01PREUgICAgID0gMgorICBVU0JfREVWSUNFX01PREUgPSAwLAorICBVU0JfSE9TVF9NT0RFICAgPSAxLAorICBVU0JfRFJEX01PREUgICAgPSAyCiB9IFVTQl9Nb2RlVHlwZURlZjsKIAogLyoqCkBAIC02MSw3ICs2MCw3IEBACiAgIFVSQl9OWUVULAogICBVUkJfRVJST1IsCiAgIFVSQl9TVEFMTAotfSBVU0JfT1RHX1VSQlN0YXRlVHlwZURlZjsKK30gVVNCX1VSQlN0YXRlVHlwZURlZjsKIAogLyoqCiAgICogQGJyaWVmICBIb3N0IGNoYW5uZWwgU3RhdGVzICBkZWZpbml0aW9uCkBAIC03MSwxMyArNzAsMTUgQEAKICAgSENfSURMRSA9IDAsCiAgIEhDX1hGUkMsCiAgIEhDX0hBTFRFRCwKKyAgSENfQUNLLAogICBIQ19OQUssCiAgIEhDX05ZRVQsCiAgIEhDX1NUQUxMLAogICBIQ19YQUNURVJSLAogICBIQ19CQkxFUlIsCiAgIEhDX0RBVEFUR0xFUlIKLX0gVVNCX09UR19IQ1N0YXRlVHlwZURlZjsKK30gVVNCX0hDU3RhdGVUeXBlRGVmOworCiAKIC8qKgogICAqIEBicmllZiAgVVNCIEluc3RhbmNlIEluaXRpYWxpemF0aW9uIFN0cnVjdHVyZSBkZWZpbml0aW9uCkBAIC04OCwxNiArODksMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVwZW5kcyBvbiB0aGUgdXNlZCBVU0IgY29yZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMSBhbmQgTWF4X0RhdGEgPSAxNSAqLwogCisjaWYgZGVmaW5lZCAoVVNCX09UR19GUykKICAgdWludDMyX3QgSG9zdF9jaGFubmVsczsgICAgICAgICAgIC8qITwgSG9zdCBDaGFubmVscyBudW1iZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIERlcGVuZHMgb24gdGhlIHVzZWQgVVNCIGNvcmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDEgYW5kIE1heF9EYXRhID0gMTUgKi8KIAorICB1aW50MzJfdCBkbWFfZW5hYmxlOyAgICAgICAgICAgICAgLyohPCBVU0IgRE1BIHN0YXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBETUEgaXMgbm90IHN1cHBvcnRlZCB0aGlzIHBhcmFtZXRlciBzaGFsbCBiZSBzZXQgYnkgZGVmYXVsdCB0byB6ZXJvICovCisjZW5kaWYgLyogZGVmaW5lZCAoVVNCX09UR19GUykgKi8KKwogICB1aW50MzJfdCBzcGVlZDsgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgQ29yZSBzcGVlZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAcmVmIFBDRF9TcGVlZC9IQ0RfU3BlZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIQ0RfU1BFRURfeHh4LCBIQ0RfU1BFRURfeHh4KSAqLwogCi0gIHVpbnQzMl90IGRtYV9lbmFibGU7ICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIG9mIHRoZSBVU0IgZW1iZWRkZWQgRE1BIHVzZWQgb25seSBmb3IgT1RHIEhTLiAgICAgICAgKi8KLQogICB1aW50MzJfdCBlcDBfbXBzOyAgICAgICAgICAgICAgICAgLyohPCBTZXQgdGhlIEVuZHBvaW50IDAgTWF4IFBhY2tldCBzaXplLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgdWludDMyX3QgcGh5X2l0ZmFjZTsgICAgICAgICAgICAgIC8qITwgU2VsZWN0IHRoZSB1c2VkIFBIWSBpbnRlcmZhY2UuCkBAIC0xMDUsMTkgKzEwOSwyMCBAQAogCiAgIHVpbnQzMl90IFNvZl9lbmFibGU7ICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIHRoZSBvdXRwdXQgb2YgdGhlIFNPRiBzaWduYWwuICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICB1aW50MzJfdCBsb3dfcG93ZXJfZW5hYmxlOyAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSB0aGUgbG93IHBvd2VyIG1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHVpbnQzMl90IGxvd19wb3dlcl9lbmFibGU7ICAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIHRoZSBsb3cgUG93ZXIgTW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogICB1aW50MzJfdCBscG1fZW5hYmxlOyAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBMaW5rIFBvd2VyIE1hbmFnZW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgdWludDMyX3QgYmF0dGVyeV9jaGFyZ2luZ19lbmFibGU7IC8qITwgRW5hYmxlIG9yIGRpc2FibGUgQmF0dGVyeSBjaGFyZ2luZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCisjaWYgZGVmaW5lZCAoVVNCX09UR19GUykKICAgdWludDMyX3QgdmJ1c19zZW5zaW5nX2VuYWJsZTsgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgdGhlIFZCVVMgU2Vuc2luZyBmZWF0dXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAgIHVpbnQzMl90IHVzZV9kZWRpY2F0ZWRfZXAxOyAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIGRlZGljYXRlZCBFUDEgaW50ZXJydXB0LiAgICAgICAgICAgICAgKi8KIAogICB1aW50MzJfdCB1c2VfZXh0ZXJuYWxfdmJ1czsgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSB0aGUgdXNlIG9mIHRoZSBleHRlcm5hbCBWQlVTLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLX0gVVNCX09UR19DZmdUeXBlRGVmOworI2VuZGlmIC8qIGRlZmluZWQgKFVTQl9PVEdfRlMpICovCit9IFVTQl9DZmdUeXBlRGVmOwogCiB0eXBlZGVmIHN0cnVjdAogewpAQCAtMTMwLDMxICsxMzUsNTggQEAKICAgdWludDhfdCAgIGlzX3N0YWxsOyAgICAgICAgICAgICAvKiE8IEVuZHBvaW50IHN0YWxsIGNvbmRpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSAxICAgICovCiAKKyNpZiBkZWZpbmVkIChVU0JfT1RHX0ZTKQorICB1aW50OF90ICAgaXNfaXNvX2luY29tcGxldGU7ICAgIC8qITwgRW5kcG9pbnQgaXNvYyBjb25kaXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDAgYW5kIE1heF9EYXRhID0gMSAgICAqLworI2VuZGlmIC8qIGRlZmluZWQgKFVTQl9PVEdfRlMpICovCisKICAgdWludDhfdCAgIHR5cGU7ICAgICAgICAgICAgICAgICAvKiE8IEVuZHBvaW50IHR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBVU0JfTExfRVBfVHlwZSAgICAgICAgICAgICAgICAgICAqLwogCiAgIHVpbnQ4X3QgICBkYXRhX3BpZF9zdGFydDsgICAgICAgLyohPCBJbml0aWFsIGRhdGEgUElECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDEgICAgKi8KIAotICB1aW50OF90ICAgZXZlbl9vZGRfZnJhbWU7ICAgICAgIC8qITwgSUZyYW1lIHBhcml0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSAxICAgICovCisjaWYgZGVmaW5lZCAoVVNCKQorICB1aW50MTZfdCAgcG1hYWRyZXNzOyAgICAgICAgICAgIC8qITwgUE1BIEFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgYmV0d2VlbiBNaW5fYWRkciA9IDAgYW5kIE1heF9hZGRyID0gMUsgICAqLwogCi0gIHVpbnQxNl90ICB0eF9maWZvX251bTsgICAgICAgICAgLyohPCBUcmFuc21pc3Npb24gRklGTyBudW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDEgYW5kIE1heF9EYXRhID0gMTUgICAqLworICB1aW50MTZfdCAgcG1hYWRkcjA7ICAgICAgICAgICAgIC8qITwgUE1BIEFkZHJlc3MwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIGJldHdlZW4gTWluX2FkZHIgPSAwIGFuZCBNYXhfYWRkciA9IDFLICAgKi8KKworICB1aW50MTZfdCAgcG1hYWRkcjE7ICAgICAgICAgICAgIC8qITwgUE1BIEFkZHJlc3MxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIGJldHdlZW4gTWluX2FkZHIgPSAwIGFuZCBNYXhfYWRkciA9IDFLICAgKi8KKworICB1aW50OF90ICAgZG91YmxlYnVmZmVyOyAgICAgICAgIC8qITwgRG91YmxlIGJ1ZmZlciBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSAwIG9yIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2VuZGlmIC8qIGRlZmluZWQgKFVTQikgKi8KIAogICB1aW50MzJfdCAgbWF4cGFja2V0OyAgICAgICAgICAgIC8qITwgRW5kcG9pbnQgTWF4IHBhY2tldCBzaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDY0S0IgKi8KIAogICB1aW50OF90ICAgKnhmZXJfYnVmZjsgICAgICAgICAgIC8qITwgUG9pbnRlciB0byB0cmFuc2ZlciBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgdWludDMyX3QgIGRtYV9hZGRyOyAgICAgICAgICAgICAvKiE8IDMyIGJpdHMgYWxpZ25lZCB0cmFuc2ZlciBidWZmZXIgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCiAgIHVpbnQzMl90ICB4ZmVyX2xlbjsgICAgICAgICAgICAgLyohPCBDdXJyZW50IHRyYW5zZmVyIGxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICB1aW50MzJfdCAgeGZlcl9zaXplOyAgICAgICAgICAgIC8qITwgcmVxdWVzdGVkIHRyYW5zZmVyIHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KICAgdWludDMyX3QgIHhmZXJfY291bnQ7ICAgICAgICAgICAvKiE8IFBhcnRpYWwgdHJhbnNmZXIgbGVuZ3RoIGluIGNhc2Ugb2YgbXVsdGkgcGFja2V0IHRyYW5zZmVyICAgICAgICAgICAgICAgICAqLwotfSBVU0JfT1RHX0VQVHlwZURlZjsKKworI2lmIGRlZmluZWQgKFVTQl9PVEdfRlMpCisgIHVpbnQ4X3QgICBldmVuX29kZF9mcmFtZTsgICAgICAgLyohPCBJRnJhbWUgcGFyaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDEgICAgKi8KKworICB1aW50MTZfdCAgdHhfZmlmb19udW07ICAgICAgICAgIC8qITwgVHJhbnNtaXNzaW9uIEZJRk8gbnVtYmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAxIGFuZCBNYXhfRGF0YSA9IDE1ICAgKi8KKworICB1aW50MzJfdCAgZG1hX2FkZHI7ICAgICAgICAgICAgIC8qITwgMzIgYml0cyBhbGlnbmVkIHRyYW5zZmVyIGJ1ZmZlciBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgdWludDMyX3QgIHhmZXJfc2l6ZTsgICAgICAgICAgICAvKiE8IHJlcXVlc3RlZCB0cmFuc2ZlciBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2VuZGlmIC8qIGRlZmluZWQgKFVTQl9PVEdfRlMpICovCisKKyNpZiBkZWZpbmVkIChVU0IpCisgIHVpbnQzMl90ICB4ZmVyX2xlbl9kYjsgICAgICAgICAgLyohPCBkb3VibGUgYnVmZmVyIHRyYW5zZmVyIGxlbmd0aCB1c2VkIHdpdGggYnVsayBkb3VibGUgYnVmZmVyIGluICAgICAgICAgICAgKi8KKworICB1aW50OF90ICAgeGZlcl9maWxsX2RiOyAgICAgICAgIC8qITwgZG91YmxlIGJ1ZmZlciBOZWVkIHRvIEZpbGwgbmV3IGJ1ZmZlciAgdXNlZCB3aXRoIGJ1bGtfaW4gICAgICAgICAgICAgICAgICovCisjZW5kaWYgLyogZGVmaW5lZCAoVVNCKSAqLworfSBVU0JfRVBUeXBlRGVmOwogCiB0eXBlZGVmIHN0cnVjdAogewpAQCAtMTc2LDcgKzIwOCw4IEBACiAKICAgdWludDhfdCAgIGRvX3Bpbmc7ICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSB0aGUgdXNlIG9mIHRoZSBQSU5HIHByb3RvY29sIGZvciBIUyBtb2RlLiAgICAgICAgICAgICAgICAqLwogCi0gIHVpbnQ4X3QgICBwcm9jZXNzX3Bpbmc7ICAgICAgIC8qITwgRXhlY3V0ZSB0aGUgUElORyBwcm90b2NvbCBmb3IgSFMgbW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdWludDhfdCAgIGh1Yl9wb3J0X25icjsgICAgICAgLyohPCBVU0IgSFVCIHBvcnQgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB1aW50OF90ICAgaHViX2FkZHI7ICAgICAgICAgICAvKiE8IFVTQiBIVUIgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgdWludDhfdCAgIGVwX3R5cGU7ICAgICAgICAgICAgLyohPCBFbmRwb2ludCBUeXBlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBVU0JfTExfRVBfVHlwZSAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xODksNyArMjIyLDcgQEAKIAogICB1aW50OF90ICAgKnhmZXJfYnVmZjsgICAgICAgICAvKiE8IFBvaW50ZXIgdG8gdHJhbnNmZXIgYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgdWludDMyX3QgIFhmZXJTaXplOyAgICAgICAgICAgICAvKiE8IE9URyBDaGFubmVsIHRyYW5zZmVyIHNpemUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdWludDMyX3QgIFhmZXJTaXplOyAgICAgICAgICAgLyohPCBPVEcgQ2hhbm5lbCB0cmFuc2ZlciBzaXplLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAgIHVpbnQzMl90ICB4ZmVyX2xlbjsgICAgICAgICAgIC8qITwgQ3VycmVudCB0cmFuc2ZlciBsZW5ndGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIApAQCAtMjA1LDk5ICsyMzgsMjIgQEAKIAogICB1aW50MzJfdCAgRXJyQ250OyAgICAgICAgICAgICAvKiE8IEhvc3QgY2hhbm5lbCBlcnJvciBjb3VudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgVVNCX09UR19VUkJTdGF0ZVR5cGVEZWYgdXJiX3N0YXRlOyAgLyohPCBVUkIgc3RhdGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBVU0JfT1RHX1VSQlN0YXRlVHlwZURlZiAqLworICBVU0JfVVJCU3RhdGVUeXBlRGVmIHVyYl9zdGF0ZTsgIC8qITwgVVJCIHN0YXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAcmVmIFVTQl9VUkJTdGF0ZVR5cGVEZWYgICAgICAgICAgICAgICovCiAKLSAgVVNCX09UR19IQ1N0YXRlVHlwZURlZiBzdGF0ZTsgICAgICAgLyohPCBIb3N0IENoYW5uZWwgc3RhdGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBVU0JfT1RHX0hDU3RhdGVUeXBlRGVmICAqLwotfSBVU0JfT1RHX0hDVHlwZURlZjsKKyAgVVNCX0hDU3RhdGVUeXBlRGVmIHN0YXRlOyAgICAgICAvKiE8IEhvc3QgQ2hhbm5lbCBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBVU0JfSENTdGF0ZVR5cGVEZWYgICAgICAgICAgICAgICAqLworfSBVU0JfSENUeXBlRGVmOworCisjaWYgZGVmaW5lZCAoVVNCX09UR19GUykKK3R5cGVkZWYgVVNCX01vZGVUeXBlRGVmICAgICBVU0JfT1RHX01vZGVUeXBlRGVmOwordHlwZWRlZiBVU0JfQ2ZnVHlwZURlZiAgICAgIFVTQl9PVEdfQ2ZnVHlwZURlZjsKK3R5cGVkZWYgVVNCX0VQVHlwZURlZiAgICAgICBVU0JfT1RHX0VQVHlwZURlZjsKK3R5cGVkZWYgVVNCX1VSQlN0YXRlVHlwZURlZiBVU0JfT1RHX1VSQlN0YXRlVHlwZURlZjsKK3R5cGVkZWYgVVNCX0hDU3RhdGVUeXBlRGVmICBVU0JfT1RHX0hDU3RhdGVUeXBlRGVmOwordHlwZWRlZiBVU0JfSENUeXBlRGVmICAgICAgIFVTQl9PVEdfSENUeXBlRGVmOwogI2VuZGlmIC8qIGRlZmluZWQgKFVTQl9PVEdfRlMpICovCiAKLSNpZiBkZWZpbmVkIChVU0IpCi0KLXR5cGVkZWYgZW51bQotewotICBVU0JfREVWSUNFX01PREUgID0gMAotfSBVU0JfTW9kZVR5cGVEZWY7Ci0KLS8qKgotICAqIEBicmllZiAgVVNCIEluaXRpYWxpemF0aW9uIFN0cnVjdHVyZSBkZWZpbml0aW9uCi0gICovCi10eXBlZGVmIHN0cnVjdAotewotICB1aW50MzJfdCBkZXZfZW5kcG9pbnRzOyAgICAgICAgICAgLyohPCBEZXZpY2UgRW5kcG9pbnRzIG51bWJlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVwZW5kcyBvbiB0aGUgdXNlZCBVU0IgY29yZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMSBhbmQgTWF4X0RhdGEgPSAxNSAqLwotCi0gIHVpbnQzMl90IHNwZWVkOyAgICAgICAgICAgICAgICAgICAvKiE8IFVTQiBDb3JlIHNwZWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgUENEX1NwZWVkL0hDRF9TcGVlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhDRF9TUEVFRF94eHgsIEhDRF9TUEVFRF94eHgpICovCi0KLSAgdWludDMyX3QgZXAwX21wczsgICAgICAgICAgICAgICAgIC8qITwgU2V0IHRoZSBFbmRwb2ludCAwIE1heCBQYWNrZXQgc2l6ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIHVpbnQzMl90IHBoeV9pdGZhY2U7ICAgICAgICAgICAgICAvKiE8IFNlbGVjdCB0aGUgdXNlZCBQSFkgaW50ZXJmYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgUENEX1BIWV9Nb2R1bGUvSENEX1BIWV9Nb2R1bGUgICovCi0KLSAgdWludDMyX3QgU29mX2VuYWJsZTsgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgdGhlIG91dHB1dCBvZiB0aGUgU09GIHNpZ25hbC4gICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIHVpbnQzMl90IGxvd19wb3dlcl9lbmFibGU7ICAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIExvdyBQb3dlciBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICB1aW50MzJfdCBscG1fZW5hYmxlOyAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBCYXR0ZXJ5IGNoYXJnaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgdWludDMyX3QgYmF0dGVyeV9jaGFyZ2luZ19lbmFibGU7IC8qITwgRW5hYmxlIG9yIGRpc2FibGUgQmF0dGVyeSBjaGFyZ2luZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIHVpbnQzMl90IGRtYV9lbmFibGU7ICAgICAgICAgICAgICAvKiE8IGRtYV9lbmFibGUgc3RhdGUgdW51c2VkLCBETUEgbm90IHN1cHBvcnRlZCBieSBGUyBpbnN0YW5jZSAgICAgICAgICAgICAgKi8KLX0gVVNCX0NmZ1R5cGVEZWY7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIHVpbnQ4X3QgICBudW07ICAgICAgICAgICAgIC8qITwgRW5kcG9pbnQgbnVtYmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMSBhbmQgTWF4X0RhdGEgPSAxNSAgICAqLwotCi0gIHVpbnQ4X3QgICBpc19pbjsgICAgICAgICAgIC8qITwgRW5kcG9pbnQgZGlyZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSAxICAgICAqLwotCi0gIHVpbnQ4X3QgICBpc19zdGFsbDsgICAgICAgIC8qITwgRW5kcG9pbnQgc3RhbGwgY29uZGl0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSAxICAgICAqLwotCi0gIHVpbnQ4X3QgICB0eXBlOyAgICAgICAgICAgIC8qITwgRW5kcG9pbnQgdHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBVU0JfRVBfVHlwZSAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICB1aW50OF90ICAgZGF0YV9waWRfc3RhcnQ7ICAvKiE8IEluaXRpYWwgZGF0YSBQSUQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDEgICAgICovCi0KLSAgdWludDE2X3QgIHBtYWFkcmVzczsgICAgICAgLyohPCBQTUEgQWRkcmVzcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgYmV0d2VlbiBNaW5fYWRkciA9IDAgYW5kIE1heF9hZGRyID0gMUsgICAgKi8KLQotICB1aW50MTZfdCAgcG1hYWRkcjA7ICAgICAgICAvKiE8IFBNQSBBZGRyZXNzMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgYmV0d2VlbiBNaW5fYWRkciA9IDAgYW5kIE1heF9hZGRyID0gMUsgICAgKi8KLQotICB1aW50MTZfdCAgcG1hYWRkcjE7ICAgICAgICAvKiE8IFBNQSBBZGRyZXNzMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgYmV0d2VlbiBNaW5fYWRkciA9IDAgYW5kIE1heF9hZGRyID0gMUsgICAgKi8KLQotICB1aW50OF90ICAgZG91YmxlYnVmZmVyOyAgICAvKiE8IERvdWJsZSBidWZmZXIgZW5hYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIDAgb3IgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIHVpbnQxNl90ICB0eF9maWZvX251bTsgICAgIC8qITwgVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHJlcXVpcmVkIGJ5IFVTQiBEZXZpY2UgRlMgcGVyaXBoZXJhbCwgaXQgaXMgdXNlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgYnkgVVNCIE9URyBGUyBwZXJpcGhlcmFsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgYWRkZWQgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgYWNyb3NzIFVTQiBwZXJpcGhlcmFscyAgICAqLwotCi0gIHVpbnQzMl90ICBtYXhwYWNrZXQ7ICAgICAgIC8qITwgRW5kcG9pbnQgTWF4IHBhY2tldCBzaXplCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSA2NEtCICAqLwotCi0gIHVpbnQ4X3QgICAqeGZlcl9idWZmOyAgICAgIC8qITwgUG9pbnRlciB0byB0cmFuc2ZlciBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIHVpbnQzMl90ICB4ZmVyX2xlbjsgICAgICAgIC8qITwgQ3VycmVudCB0cmFuc2ZlciBsZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIHVpbnQzMl90ICB4ZmVyX2NvdW50OyAgICAgIC8qITwgUGFydGlhbCB0cmFuc2ZlciBsZW5ndGggaW4gY2FzZSBvZiBtdWx0aSBwYWNrZXQgdHJhbnNmZXIgICAgICAgICAgICAgICAgICAqLwotCi0gIHVpbnQzMl90ICB4ZmVyX2xlbl9kYjsgICAgICAvKiE8IGRvdWJsZSBidWZmZXIgdHJhbnNmZXIgbGVuZ3RoIHVzZWQgd2l0aCBidWxrIGRvdWJsZSBidWZmZXIgaW4gICAgICAgICAgICovCi0KLSAgdWludDhfdCAgIHhmZXJfZmlsbF9kYjsgICAgIC8qITwgZG91YmxlIGJ1ZmZlciBOZWVkIHRvIEZpbGwgbmV3IGJ1ZmZlciAgdXNlZCB3aXRoIGJ1bGtfaW4gICAgICAgICAgICAgICAgKi8KLQotfSBVU0JfRVBUeXBlRGVmOwotI2VuZGlmIC8qIGRlZmluZWQgKFVTQikgKi8KLQogLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoqIEBkZWZncm91cCBQQ0RfRXhwb3J0ZWRfQ29uc3RhbnRzIFBDRCBFeHBvcnRlZCBDb25zdGFudHMKQEAgLTMyNCwxNSArMjgwLDYgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFVTQl9MTCBEZXZpY2UgU3BlZWQKLSAgKiBAewotICAqLwotI2RlZmluZSBVU0JEX0ZTX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAyVQotI2RlZmluZSBVU0JIX0ZTTFNfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAxVQotLyoqCi0gICogQH0KLSAgKi8KLQogLyoqIEBkZWZncm91cCBVU0JfTExfQ29yZV9TcGVlZCBVU0IgTG93IExheWVyIENvcmUgU3BlZWQKICAgKiBAewogICAqLwpAQCAtMzQ0LDcgKzI5MSw2IEBACiAvKiogQGRlZmdyb3VwIFVTQl9MTF9Db3JlX1BIWSBVU0IgTG93IExheWVyIENvcmUgUEhZCiAgICogQHsKICAgKi8KLSNkZWZpbmUgVVNCX09UR19VTFBJX1BIWSAgICAgICAgICAgICAgICAgICAgICAgMVUKICNkZWZpbmUgVVNCX09UR19FTUJFRERFRF9QSFkgICAgICAgICAgICAgICAgICAgMlUKIC8qKgogICAqIEB9CkBAIC0zOTAsMTA3ICszMzYsNyBAQAogLyoqCiAgICogQH0KICAgKi8KLQotLyoqIEBkZWZncm91cCBVU0JfTExfRVAwX01QUyBVU0IgTG93IExheWVyIEVQMCBNUFMKLSAgKiBAewotICAqLwotI2RlZmluZSBFUF9NUFNfNjQgICAgICAgICAgICAgICAgICAgICAgICAwVQotI2RlZmluZSBFUF9NUFNfMzIgICAgICAgICAgICAgICAgICAgICAgICAxVQotI2RlZmluZSBFUF9NUFNfMTYgICAgICAgICAgICAgICAgICAgICAgICAyVQotI2RlZmluZSBFUF9NUFNfOCAgICAgICAgICAgICAgICAgICAgICAgICAzVQotLyoqCi0gICogQH0KLSAgKi8KLQotLyoqIEBkZWZncm91cCBVU0JfTExfRVBfU3BlZWQgVVNCIExvdyBMYXllciBFUCBTcGVlZAotICAqIEB7Ci0gICovCi0jZGVmaW5lIEVQX1NQRUVEX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDBVCi0jZGVmaW5lIEVQX1NQRUVEX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgICAgIDFVCi0jZGVmaW5lIEVQX1NQRUVEX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgIDJVCi0vKioKLSAgKiBAfQotICAqLwotCi0vKiogQGRlZmdyb3VwIFVTQl9MTF9FUF9UeXBlIFVTQiBMb3cgTGF5ZXIgRVAgVHlwZQotICAqIEB7Ci0gICovCi0jZGVmaW5lIEVQX1RZUEVfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDBVCi0jZGVmaW5lIEVQX1RZUEVfSVNPQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDFVCi0jZGVmaW5lIEVQX1RZUEVfQlVMSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDJVCi0jZGVmaW5lIEVQX1RZUEVfSU5UUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDNVCi0jZGVmaW5lIEVQX1RZUEVfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDNVCi0vKioKLSAgKiBAfQotICAqLwotCi0vKiogQGRlZmdyb3VwIFVTQl9MTF9TVFNfRGVmaW5lcyBVU0IgTG93IExheWVyIFNUUyBEZWZpbmVzCi0gICogQHsKLSAgKi8KLSNkZWZpbmUgU1RTX0dPVVRfTkFLICAgICAgICAgICAgICAgICAgICAgICAgICAgMVUKLSNkZWZpbmUgU1RTX0RBVEFfVVBEVCAgICAgICAgICAgICAgICAgICAgICAgICAgMlUKLSNkZWZpbmUgU1RTX1hGRVJfQ09NUCAgICAgICAgICAgICAgICAgICAgICAgICAgM1UKLSNkZWZpbmUgU1RTX1NFVFVQX0NPTVAgICAgICAgICAgICAgICAgICAgICAgICAgNFUKLSNkZWZpbmUgU1RTX1NFVFVQX1VQRFQgICAgICAgICAgICAgICAgICAgICAgICAgNlUKLS8qKgotICAqIEB9Ci0gICovCi0KLS8qKiBAZGVmZ3JvdXAgVVNCX0xMX0hDRkdfU1BFRURfRGVmaW5lcyBVU0IgTG93IExheWVyIEhDRkcgU3BlZWQgRGVmaW5lcwotICAqIEB7Ci0gICovCi0jZGVmaW5lIEhDRkdfMzBfNjBfTUhaICAgICAgICAgICAgICAgICAgICAgICAgIDBVCi0jZGVmaW5lIEhDRkdfNDhfTUhaICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFVCi0jZGVmaW5lIEhDRkdfNl9NSFogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJVCi0vKioKLSAgKiBAfQotICAqLwotCi0vKiogQGRlZmdyb3VwIFVTQl9MTF9IUFJUMF9QUlRTUERfU1BFRURfRGVmaW5lcyBVU0IgTG93IExheWVyIEhQUlQwIFBSVFNQRCBTcGVlZCBEZWZpbmVzCi0gICogQHsKLSAgKi8KLSNkZWZpbmUgSFBSVDBfUFJUU1BEX0hJR0hfU1BFRUQgICAgICAgICAgICAgICAgMFUKLSNkZWZpbmUgSFBSVDBfUFJUU1BEX0ZVTExfU1BFRUQgICAgICAgICAgICAgICAgMVUKLSNkZWZpbmUgSFBSVDBfUFJUU1BEX0xPV19TUEVFRCAgICAgICAgICAgICAgICAgMlUKLS8qKgotICAqIEB9Ci0gICovCi0KLSNkZWZpbmUgSENDSEFSX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFUKLSNkZWZpbmUgSENDSEFSX0lTT0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMVUKLSNkZWZpbmUgSENDSEFSX0JVTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlUKLSNkZWZpbmUgSENDSEFSX0lOVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgM1UKLQotI2RlZmluZSBIQ19QSURfREFUQTAgICAgICAgICAgICAgICAgICAgICAgICAgICAwVQotI2RlZmluZSBIQ19QSURfREFUQTIgICAgICAgICAgICAgICAgICAgICAgICAgICAxVQotI2RlZmluZSBIQ19QSURfREFUQTEgICAgICAgICAgICAgICAgICAgICAgICAgICAyVQotI2RlZmluZSBIQ19QSURfU0VUVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAzVQotCi0jZGVmaW5lIEdSWFNUU19QS1RTVFNfSU4gICAgICAgICAgICAgICAgICAgICAgIDJVCi0jZGVmaW5lIEdSWFNUU19QS1RTVFNfSU5fWEZFUl9DT01QICAgICAgICAgICAgIDNVCi0jZGVmaW5lIEdSWFNUU19QS1RTVFNfREFUQV9UT0dHTEVfRVJSICAgICAgICAgIDVVCi0jZGVmaW5lIEdSWFNUU19QS1RTVFNfQ0hfSEFMVEVEICAgICAgICAgICAgICAgIDdVCi0KLSNkZWZpbmUgVVNCeF9QQ0dDQ1RMICAgICooX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpVVNCeF9CQVNFICsgVVNCX09UR19QQ0dDQ1RMX0JBU0UpCi0jZGVmaW5lIFVTQnhfSFBSVDAgICAgICAqKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KVVTQnhfQkFTRSArIFVTQl9PVEdfSE9TVF9QT1JUX0JBU0UpCi0KLSNkZWZpbmUgVVNCeF9ERVZJQ0UgICAgICgoVVNCX09UR19EZXZpY2VUeXBlRGVmICopKFVTQnhfQkFTRSArIFVTQl9PVEdfREVWSUNFX0JBU0UpKQotI2RlZmluZSBVU0J4X0lORVAoaSkgICAgKChVU0JfT1RHX0lORW5kcG9pbnRUeXBlRGVmICopKFVTQnhfQkFTRVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFVTQl9PVEdfSU5fRU5EUE9JTlRfQkFTRSArICgoaSkgKiBVU0JfT1RHX0VQX1JFR19TSVpFKSkpCi0KLSNkZWZpbmUgVVNCeF9PVVRFUChpKSAgICgoVVNCX09UR19PVVRFbmRwb2ludFR5cGVEZWYgKikoVVNCeF9CQVNFXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFVTQl9PVEdfT1VUX0VORFBPSU5UX0JBU0UgKyAoKGkpICogVVNCX09UR19FUF9SRUdfU0laRSkpKQotCi0jZGVmaW5lIFVTQnhfREZJRk8oaSkgICAqKF9fSU8gdWludDMyX3QgKikoVVNCeF9CQVNFICsgVVNCX09UR19GSUZPX0JBU0UgKyAoKGkpICogVVNCX09UR19GSUZPX1NJWkUpKQotCi0jZGVmaW5lIFVTQnhfSE9TVCAgICAgICAoKFVTQl9PVEdfSG9zdFR5cGVEZWYgKikoVVNCeF9CQVNFICsgVVNCX09UR19IT1NUX0JBU0UpKQotI2RlZmluZSBVU0J4X0hDKGkpICAgICAgKChVU0JfT1RHX0hvc3RDaGFubmVsVHlwZURlZiAqKShVU0J4X0JBU0VcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgVVNCX09UR19IT1NUX0NIQU5ORUxfQkFTRVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoKGkpICogVVNCX09UR19IT1NUX0NIQU5ORUxfU0laRSkpKQotCiAjZW5kaWYgLyogZGVmaW5lZCAoVVNCX09UR19GUykgKi8KLQotI2lmIGRlZmluZWQgKFVTQikKIC8qKiBAZGVmZ3JvdXAgVVNCX0xMX0VQMF9NUFMgVVNCIExvdyBMYXllciBFUDAgTVBTCiAgICogQHsKICAgKi8KQEAgLTUxNCwyMyArMzYwLDEyOSBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgVVNCX0xMIERldmljZSBTcGVlZAorLyoqIEBkZWZncm91cCBVU0JfTExfRVBfU3BlZWQgVVNCIExvdyBMYXllciBFUCBTcGVlZAogICAqIEB7CiAgICovCi0jZGVmaW5lIFVTQkRfRlNfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAgIDJVCisjZGVmaW5lIEVQX1NQRUVEX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDBVCisjZGVmaW5lIEVQX1NQRUVEX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgICAgIDFVCisjZGVmaW5lIEVQX1NQRUVEX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgIDJVCiAvKioKICAgKiBAfQogICAqLwogCi0jZGVmaW5lIEJUQUJMRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwVQotI2RlZmluZSBQTUFfQUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyVQotI2VuZGlmIC8qIGRlZmluZWQgKFVTQikgKi8KKy8qKiBAZGVmZ3JvdXAgVVNCX0xMX0NIX1BJRF9UeXBlIFVTQiBMb3cgTGF5ZXIgQ2hhbm5lbCBQSUQgVHlwZQorICAqIEB7CisgICovCisjZGVmaW5lIEhDX1BJRF9EQVRBMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDBVCisjZGVmaW5lIEhDX1BJRF9EQVRBMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDFVCisjZGVmaW5lIEhDX1BJRF9EQVRBMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDJVCisjZGVmaW5lIEhDX1BJRF9TRVRVUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDNVCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIFVTQl9MTCBEZXZpY2UgU3BlZWQKKyAgKiBAeworICAqLworI2RlZmluZSBVU0JEX0ZTX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAyVQorI2RlZmluZSBVU0JIX0ZTTFNfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAxVQorLyoqCisgICogQH0KKyAgKi8KKwogI2lmIGRlZmluZWQgKFVTQl9PVEdfRlMpCisvKiogQGRlZmdyb3VwIFVTQl9MTF9TVFNfRGVmaW5lcyBVU0IgTG93IExheWVyIFNUUyBEZWZpbmVzCisgICogQHsKKyAgKi8KKyNkZWZpbmUgU1RTX0dPVVRfTkFLICAgICAgICAgICAgICAgICAgICAgICAgICAgMVUKKyNkZWZpbmUgU1RTX0RBVEFfVVBEVCAgICAgICAgICAgICAgICAgICAgICAgICAgMlUKKyNkZWZpbmUgU1RTX1hGRVJfQ09NUCAgICAgICAgICAgICAgICAgICAgICAgICAgM1UKKyNkZWZpbmUgU1RTX1NFVFVQX0NPTVAgICAgICAgICAgICAgICAgICAgICAgICAgNFUKKyNkZWZpbmUgU1RTX1NFVFVQX1VQRFQgICAgICAgICAgICAgICAgICAgICAgICAgNlUKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgVVNCX0xMX0hDRkdfU1BFRURfRGVmaW5lcyBVU0IgTG93IExheWVyIEhDRkcgU3BlZWQgRGVmaW5lcworICAqIEB7CisgICovCisjZGVmaW5lIEhDRkdfMzBfNjBfTUhaICAgICAgICAgICAgICAgICAgICAgICAgIDBVCisjZGVmaW5lIEhDRkdfNDhfTUhaICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFVCisjZGVmaW5lIEhDRkdfNl9NSFogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJVCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIFVTQl9MTF9IRklSX0RlZmluZXMgVVNCIExvdyBMYXllciBmcmFtZSBpbnRlcnZhbCBEZWZpbmVzCisgICogQHsKKyAgKi8KKyNkZWZpbmUgSEZJUl82X01IWiAgICAgICAgICAgICAgICAgICAgICAgICAgNjAwMFUKKyNkZWZpbmUgSEZJUl82MF9NSFogICAgICAgICAgICAgICAgICAgICAgICA2MDAwMFUKKyNkZWZpbmUgSEZJUl80OF9NSFogICAgICAgICAgICAgICAgICAgICAgICA0ODAwMFUKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgVVNCX0xMX0hQUlQwX1BSVFNQRF9TUEVFRF9EZWZpbmVzIFVTQiBMb3cgTGF5ZXIgSFBSVDAgUFJUU1BEIFNwZWVkIERlZmluZXMKKyAgKiBAeworICAqLworI2RlZmluZSBIUFJUMF9QUlRTUERfSElHSF9TUEVFRCAgICAgICAgICAgICAgICAwVQorI2RlZmluZSBIUFJUMF9QUlRTUERfRlVMTF9TUEVFRCAgICAgICAgICAgICAgICAxVQorI2RlZmluZSBIUFJUMF9QUlRTUERfTE9XX1NQRUVEICAgICAgICAgICAgICAgICAyVQorLyoqCisgICogQH0KKyAgKi8KKworI2RlZmluZSBIQ0NIQVJfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwVQorI2RlZmluZSBIQ0NIQVJfSVNPQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxVQorI2RlZmluZSBIQ0NIQVJfQlVMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyVQorI2RlZmluZSBIQ0NIQVJfSU5UUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzVQorCisjZGVmaW5lIEdSWFNUU19QS1RTVFNfSU4gICAgICAgICAgICAgICAgICAgICAgIDJVCisjZGVmaW5lIEdSWFNUU19QS1RTVFNfSU5fWEZFUl9DT01QICAgICAgICAgICAgIDNVCisjZGVmaW5lIEdSWFNUU19QS1RTVFNfREFUQV9UT0dHTEVfRVJSICAgICAgICAgIDVVCisjZGVmaW5lIEdSWFNUU19QS1RTVFNfQ0hfSEFMVEVEICAgICAgICAgICAgICAgIDdVCisKKyNkZWZpbmUgQ0xFQVJfSU5URVJSVVBUX01BU0sgICAgICAgICAgMHhGRkZGRkZGRlUKKworI2RlZmluZSBIQ19NQVhfUEtUX0NOVCAgICAgICAgICAgICAgICAgICAgICAgMjU2VQorCisjZGVmaW5lIFVTQnhfUENHQ0NUTCAgICAqKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KVVTQnhfQkFTRSArIFVTQl9PVEdfUENHQ0NUTF9CQVNFKQorI2RlZmluZSBVU0J4X0hQUlQwICAgICAgKihfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdClVU0J4X0JBU0UgKyBVU0JfT1RHX0hPU1RfUE9SVF9CQVNFKQorCisjZGVmaW5lIFVTQnhfREVWSUNFICAgICAoKFVTQl9PVEdfRGV2aWNlVHlwZURlZiAqKShVU0J4X0JBU0UgKyBVU0JfT1RHX0RFVklDRV9CQVNFKSkKKyNkZWZpbmUgVVNCeF9JTkVQKGkpICAgICgoVVNCX09UR19JTkVuZHBvaW50VHlwZURlZiAqKShVU0J4X0JBU0VcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBVU0JfT1RHX0lOX0VORFBPSU5UX0JBU0UgKyAoKGkpICogVVNCX09UR19FUF9SRUdfU0laRSkpKQorCisjZGVmaW5lIFVTQnhfT1VURVAoaSkgICAoKFVTQl9PVEdfT1VURW5kcG9pbnRUeXBlRGVmICopKFVTQnhfQkFTRVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBVU0JfT1RHX09VVF9FTkRQT0lOVF9CQVNFICsgKChpKSAqIFVTQl9PVEdfRVBfUkVHX1NJWkUpKSkKKworI2RlZmluZSBVU0J4X0RGSUZPKGkpICAgKihfX0lPIHVpbnQzMl90ICopKFVTQnhfQkFTRSArIFVTQl9PVEdfRklGT19CQVNFICsgKChpKSAqIFVTQl9PVEdfRklGT19TSVpFKSkKKworI2RlZmluZSBVU0J4X0hPU1QgICAgICAgKChVU0JfT1RHX0hvc3RUeXBlRGVmICopKFVTQnhfQkFTRSArIFVTQl9PVEdfSE9TVF9CQVNFKSkKKyNkZWZpbmUgVVNCeF9IQyhpKSAgICAgICgoVVNCX09UR19Ib3N0Q2hhbm5lbFR5cGVEZWYgKikoVVNCeF9CQVNFXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFVTQl9PVEdfSE9TVF9DSEFOTkVMX0JBU0VcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKChpKSAqIFVTQl9PVEdfSE9TVF9DSEFOTkVMX1NJWkUpKSkKKworCiAjZGVmaW5lIEVQX0FERFJfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RlUKICNlbmRpZiAvKiBkZWZpbmVkIChVU0JfT1RHX0ZTKSAqLworCiAjaWYgZGVmaW5lZCAoVVNCKQorI2RlZmluZSBCVEFCTEVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMFUKKyNkZWZpbmUgUE1BX0FDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlUKKworI2lmbmRlZiBVU0JfRVBfUlhfU1RSWAorI2RlZmluZSBVU0JfRVBfUlhfU1RSWCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgzVSA8PCAxMikKKyNlbmRpZiAvKiBVU0JfRVBfUlhfU1RSWCAqLworCiAjZGVmaW5lIEVQX0FERFJfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N1UKKworI2lmbmRlZiBVU0VfVVNCX0RPVUJMRV9CVUZGRVIKKyNkZWZpbmUgVVNFX1VTQl9ET1VCTEVfQlVGRkVSICAgICAgICAgICAgICAgICAgMVUKKyNlbmRpZiAvKiBVU0VfVVNCX0RPVUJMRV9CVUZGRVIgKi8KICNlbmRpZiAvKiBkZWZpbmVkIChVU0IpICovCisKIC8qKgogICAqIEB9CiAgICovCkBAIC01NjksNyArNTIxLDYgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9BY3RpdmF0ZURlZGljYXRlZEVuZHBvaW50KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgVVNCX09UR19FUFR5cGVEZWYgKmVwKTsKIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9EZWFjdGl2YXRlRGVkaWNhdGVkRW5kcG9pbnQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCBVU0JfT1RHX0VQVHlwZURlZiAqZXApOwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0VQU3RhcnRYZmVyKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgVVNCX09UR19FUFR5cGVEZWYgKmVwKTsKLUhBTF9TdGF0dXNUeXBlRGVmIFVTQl9FUDBTdGFydFhmZXIoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCBVU0JfT1RHX0VQVHlwZURlZiAqZXApOwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX1dyaXRlUGFja2V0KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgdWludDhfdCAqc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY2hfZXBfbnVtLCB1aW50MTZfdCBsZW4pOwogCkBAIC01ODUsNyArNTM2LDggQEAKIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9FUDBfT3V0U3RhcnQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCB1aW50OF90ICpwc2V0dXApOwogdWludDhfdCAgICAgICAgICAgVVNCX0dldERldlNwZWVkKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCk7CiB1aW50MzJfdCAgICAgICAgICBVU0JfR2V0TW9kZShVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngpOwotdWludDMyX3QgICAgICAgICAgVVNCX1JlYWRJbnRlcnJ1cHRzKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCk7Cit1aW50MzJfdCAgICAgICAgICBVU0JfUmVhZEludGVycnVwdHMoVVNCX09UR19HbG9iYWxUeXBlRGVmIGNvbnN0ICpVU0J4KTsKK3VpbnQzMl90ICAgICAgICAgIFVTQl9SZWFkQ2hJbnRlcnJ1cHRzKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgdWludDhfdCBjaG51bSk7CiB1aW50MzJfdCAgICAgICAgICBVU0JfUmVhZERldkFsbE91dEVwSW50ZXJydXB0KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCk7CiB1aW50MzJfdCAgICAgICAgICBVU0JfUmVhZERldk91dEVQSW50ZXJydXB0KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgdWludDhfdCBlcG51bSk7CiB1aW50MzJfdCAgICAgICAgICBVU0JfUmVhZERldkFsbEluRXBJbnRlcnJ1cHQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KTsKQEAgLTU5Niw4ICs1NDgsOCBAQAogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0luaXRGU0xTUENsa1NlbChVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngsIHVpbnQ4X3QgZnJlcSk7CiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfUmVzZXRQb3J0KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCk7CiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRHJpdmVWYnVzKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgdWludDhfdCBzdGF0ZSk7Ci11aW50MzJfdCAgICAgICAgICBVU0JfR2V0SG9zdFNwZWVkKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCk7Ci11aW50MzJfdCAgICAgICAgICBVU0JfR2V0Q3VycmVudEZyYW1lKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCk7Cit1aW50MzJfdCAgICAgICAgICBVU0JfR2V0SG9zdFNwZWVkKFVTQl9PVEdfR2xvYmFsVHlwZURlZiBjb25zdCAqVVNCeCk7Cit1aW50MzJfdCAgICAgICAgICBVU0JfR2V0Q3VycmVudEZyYW1lKFVTQl9PVEdfR2xvYmFsVHlwZURlZiBjb25zdCAqVVNCeCk7CiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfSENfSW5pdChVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngsIHVpbnQ4X3QgY2hfbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBlcG51bSwgdWludDhfdCBkZXZfYWRkcmVzcywgdWludDhfdCBzcGVlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZXBfdHlwZSwgdWludDE2X3QgbXBzKTsKQEAgLTYxOSw4ICs1NzEsOSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0Rpc2FibGVHbG9iYWxJbnQoVVNCX1R5cGVEZWYgKlVTQngpOwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX1NldEN1cnJlbnRNb2RlKFVTQl9UeXBlRGVmICpVU0J4LCBVU0JfTW9kZVR5cGVEZWYgbW9kZSk7CiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfU2V0RGV2U3BlZWQoVVNCX1R5cGVEZWYgKlVTQngsIHVpbnQ4X3Qgc3BlZWQpOwotSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0ZsdXNoUnhGaWZvKFVTQl9UeXBlRGVmICpVU0J4KTsKLUhBTF9TdGF0dXNUeXBlRGVmIFVTQl9GbHVzaFR4RmlmbyhVU0JfVHlwZURlZiAqVVNCeCwgdWludDMyX3QgbnVtKTsKKworSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0ZsdXNoUnhGaWZvKFVTQl9UeXBlRGVmIGNvbnN0ICpVU0J4KTsKK0hBTF9TdGF0dXNUeXBlRGVmIFVTQl9GbHVzaFR4RmlmbyhVU0JfVHlwZURlZiBjb25zdCAqVVNCeCwgdWludDMyX3QgbnVtKTsKIAogI2lmIGRlZmluZWQgKEhBTF9QQ0RfTU9EVUxFX0VOQUJMRUQpCiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfQWN0aXZhdGVFbmRwb2ludChVU0JfVHlwZURlZiAqVVNCeCwgVVNCX0VQVHlwZURlZiAqZXApOwpAQCAtNjQxLDcgKzU5NCw3IEBACiAKIHZvaWQgICAgICAgICAgICAgKlVTQl9SZWFkUGFja2V0KFVTQl9UeXBlRGVmICpVU0J4LCB1aW50OF90ICpkZXN0LCB1aW50MTZfdCBsZW4pOwogCi11aW50MzJfdCAgICAgICAgICBVU0JfUmVhZEludGVycnVwdHMoVVNCX1R5cGVEZWYgKlVTQngpOwordWludDMyX3QgICAgICAgICAgVVNCX1JlYWRJbnRlcnJ1cHRzKFVTQl9UeXBlRGVmIGNvbnN0ICpVU0J4KTsKIHVpbnQzMl90ICAgICAgICAgIFVTQl9SZWFkRGV2QWxsT3V0RXBJbnRlcnJ1cHQoVVNCX1R5cGVEZWYgKlVTQngpOwogdWludDMyX3QgICAgICAgICAgVVNCX1JlYWREZXZPdXRFUEludGVycnVwdChVU0JfVHlwZURlZiAqVVNCeCwgdWludDhfdCBlcG51bSk7CiB1aW50MzJfdCAgICAgICAgICBVU0JfUmVhZERldkFsbEluRXBJbnRlcnJ1cHQoVVNCX1R5cGVEZWYgKlVTQngpOwpAQCAtNjUwLDEwICs2MDMsMTAgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9BY3RpdmF0ZVJlbW90ZVdha2V1cChVU0JfVHlwZURlZiAqVVNCeCk7CiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRGVBY3RpdmF0ZVJlbW90ZVdha2V1cChVU0JfVHlwZURlZiAqVVNCeCk7CiAKLXZvaWQgICAgICAgICAgICAgIFVTQl9Xcml0ZVBNQShVU0JfVHlwZURlZiAqVVNCeCwgdWludDhfdCAqcGJVc3JCdWYsCit2b2lkICAgICAgICAgICAgICBVU0JfV3JpdGVQTUEoVVNCX1R5cGVEZWYgY29uc3QgKlVTQngsIHVpbnQ4X3QgKnBiVXNyQnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHdQTUFCdWZBZGRyLCB1aW50MTZfdCB3TkJ5dGVzKTsKIAotdm9pZCAgICAgICAgICAgICAgVVNCX1JlYWRQTUEoVVNCX1R5cGVEZWYgKlVTQngsIHVpbnQ4X3QgKnBiVXNyQnVmLAordm9pZCAgICAgICAgICAgICAgVVNCX1JlYWRQTUEoVVNCX1R5cGVEZWYgY29uc3QgKlVTQngsIHVpbnQ4X3QgKnBiVXNyQnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgd1BNQUJ1ZkFkZHIsIHVpbnQxNl90IHdOQnl0ZXMpOwogI2VuZGlmIC8qIGRlZmluZWQgKFVTQikgKi8KIC8qKgpAQCAtNjc1LDcgKzYyOCw3IEBACiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQotI2VuZGlmCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KIAogCiAjZW5kaWYgLyogU1RNMzJGMXh4X0xMX1VTQl9IICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMXh4X2xsX3V0aWxzLmggYi9JbmMvc3RtMzJmMXh4X2xsX3V0aWxzLmgKaW5kZXggM2FlZDZmYy4uZDkzOGZhMyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjF4eF9sbF91dGlscy5oCisrKyBiL0luYy9zdG0zMmYxeHhfbGxfdXRpbHMuaApAQCAtMyw2ICszLDE3IEBACiAgICogQGZpbGUgICAgc3RtMzJmMXh4X2xsX3V0aWxzLmgKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQogICAqIEBicmllZiAgIEhlYWRlciBmaWxlIG9mIFVUSUxTIExMIG1vZHVsZS4KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGF0dGVudGlvbgorICAqCisgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAqCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCisgICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCkBAIC0xNiwxNiArMjcsNiBAQAogCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKiBAYXR0ZW50aW9uCi0gICoKLSAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgotICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCi0gICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCi0gICoKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKIC8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9MSUNFTlNFLm1kIGIvTElDRU5TRS5tZAppbmRleCA1YWFlYTZhLi5mYTFiNmYyIDEwMDY0NAotLS0gYS9MSUNFTlNFLm1kCisrKyBiL0xJQ0VOU0UubWQKQEAgLTEsNCArMSw0IEBACi1Db3B5cmlnaHQgMjAxNi0yMDIxIFNUTWljcm9lbGVjdHJvbmljcy4KK0NvcHlyaWdodCAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCmRpZmYgLS1naXQgYS9SZWxlYXNlX05vdGVzLmh0bWwgYi9SZWxlYXNlX05vdGVzLmh0bWwKaW5kZXggZjMyNTU5My4uYTJlOWUxNiAxMDA2NDQKLS0tIGEvUmVsZWFzZV9Ob3Rlcy5odG1sCisrKyBiL1JlbGVhc2VfTm90ZXMuaHRtbApAQCAtMTEsNDQgKzExLDE4MyBAQAogICAgICAgc3Bhbi51bmRlcmxpbmV7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fQogICAgICAgZGl2LmNvbHVtbntkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHdpZHRoOiA1MCU7fQogICA8L3N0eWxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Il9odG1yZXNjL21pbmktc3QuY3NzIiAvPgorICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPkBjaGFyc2V0ICJVVEYtOCI7OnJvb3Qgey0tZm9yZS1jb2xvcjogIzAzMjM0YjstLXNlY29uZGFyeS1mb3JlLWNvbG9yOiAjMDMyMzRiOy0tYmFjay1jb2xvcjogI2ZmZmZmZjstLXNlY29uZGFyeS1iYWNrLWNvbG9yOiAjZmZmZmZmOy0tYmxvY2txdW90ZS1jb2xvcjogI2U2MDA3ZTstLXByZS1jb2xvcjogI2U2MDA3ZTstLWJvcmRlci1jb2xvcjogIzNjYjRlNjstLXNlY29uZGFyeS1ib3JkZXItY29sb3I6ICMzY2I0ZTY7LS1oZWFkaW5nLXJhdGlvOiAxLjI7LS11bml2ZXJzYWwtbWFyZ2luOiAwLjVyZW07LS11bml2ZXJzYWwtcGFkZGluZzogMC4yNXJlbTstLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzOiAwLjA3NXJlbTstLWJhY2tncm91bmQtbWFyZ2luOiAxLjUlOy0tYS1saW5rLWNvbG9yOiAjM2NiNGU2Oy0tYS12aXNpdGVkLWNvbG9yOiAjOGMwMDc4OyB9aHRtbCB7Zm9udC1zaXplOiAxMy41cHg7IH1hLCBiLCBkZWwsIGVtLCBpLCBpbnMsIHEsIHNwYW4sIHN0cm9uZywgdSB7Zm9udC1zaXplOiAxZW07IH1odG1sLCAqIHtmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBIZWx2ZXRpY2EsIGFyaWFsLCBzYW5zLXNlcmlmO2xpbmUtaGVpZ2h0OiAxLjI1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgfSoge2ZvbnQtc2l6ZTogMXJlbTsgfWJvZHkge21hcmdpbjogMDtjb2xvcjogdmFyKC0tZm9yZS1jb2xvcik7QGJhY2tncm91bmQ6IHZhcigtLWJhY2stY29sb3IpO2JhY2tncm91bmQ6IHZhcigtLWJhY2stY29sb3IpIGxpbmVhci1ncmFkaWVudCgjZmZkMjAwLCAjZmZkMjAwKSByZXBlYXQteSBsZWZ0IHRvcDtiYWNrZ3JvdW5kLXNpemU6IHZhcigtLWJhY2tncm91bmQtbWFyZ2luKTt9ZGV0YWlscyB7ZGlzcGxheTogYmxvY2s7IH1zdW1tYXJ5IHtkaXNwbGF5OiBsaXN0LWl0ZW07IH1hYmJyW3RpdGxlXSB7Ym9yZGVyLWJvdHRvbTogbm9uZTt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7IH1pbnB1dCB7b3ZlcmZsb3c6IHZpc2libGU7IH1pbWcge21heC13aWR0aDogMTAwJTtoZWlnaHQ6IGF1dG87IH1oMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtsaW5lLWhlaWdodDogMS4yNTttYXJnaW46IGNhbGMoMS41ICogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pO2ZvbnQtd2VpZ2h0OiA0MDA7IH1oMSBzbWFsbCwgaDIgc21hbGwsIGgzIHNtYWxsLCBoNCBzbWFsbCwgaDUgc21hbGwsIGg2IHNtYWxsIHtjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWZvcmUtY29sb3IpO2Rpc3BsYXk6IGJsb2NrO21hcmdpbi10b3A6IC0wLjI1cmVtOyB9aDEge2ZvbnQtc2l6ZTogY2FsYygxcmVtICogdmFyKC0taGVhZGluZy1yYXRpbykgKiB2YXIoLS1oZWFkaW5nLXJhdGlvKSAqIHZhcigtLWhlYWRpbmctcmF0aW8pKTsgfWgyIHtmb250LXNpemU6IGNhbGMoMXJlbSAqIHZhcigtLWhlYWRpbmctcmF0aW8pICogdmFyKC0taGVhZGluZy1yYXRpbykgKTtib3JkZXItc3R5bGU6IG5vbmUgbm9uZSBzb2xpZCBub25lIDsgYm9yZGVyLXdpZHRoOiB0aGluO2JvcmRlci1jb2xvcjogdmFyKC0tYm9yZGVyLWNvbG9yKTsgfWgzIHtmb250LXNpemU6IGNhbGMoMXJlbSAqIHZhcigtLWhlYWRpbmctcmF0aW8pICk7IH1oNCB7Zm9udC1zaXplOiBjYWxjKDFyZW0gKiB2YXIoLS1oZWFkaW5nLXJhdGlvKSk7IH1oNSB7Zm9udC1zaXplOiAxcmVtOyB9aDYge2ZvbnQtc2l6ZTogY2FsYygxcmVtIC8gdmFyKC0taGVhZGluZy1yYXRpbykpOyB9cCB7bWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsgfW9sLCB1bCB7bWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTtwYWRkaW5nLWxlZnQ6IGNhbGMoMyAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsgfWIsIHN0cm9uZyB7Zm9udC13ZWlnaHQ6IDcwMDsgfWhyIHtib3gtc2l6aW5nOiBjb250ZW50LWJveDtib3JkZXI6IDA7bGluZS1oZWlnaHQ6IDEuMjVlbTttYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pO2hlaWdodDogMC4wNzE0Mjg1NzE0cmVtO2JhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQsIHZhcigtLWJvcmRlci1jb2xvcikgMjAlLCB2YXIoLS1ib3JkZXItY29sb3IpIDgwJSwgdHJhbnNwYXJlbnQpOyB9YmxvY2txdW90ZSB7ZGlzcGxheTogYmxvY2s7cG9zaXRpb246IHJlbGF0aXZlO2ZvbnQtc3R5bGU6IGl0YWxpYztjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWZvcmUtY29sb3IpO21hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7cGFkZGluZzogY2FsYygzICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTtib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTtib3JkZXItbGVmdDogMC4zcmVtIHNvbGlkIHZhcigtLWJsb2NrcXVvdGUtY29sb3IpO2JvcmRlci1yYWRpdXM6IDAgdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSAwOyB9YmxvY2txdW90ZTpiZWZvcmUge3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IGNhbGMoMHJlbSAtIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7bGVmdDogMDtmb250LWZhbWlseTogc2Fucy1zZXJpZjtmb250LXNpemU6IDJyZW07Zm9udC13ZWlnaHQ6IDgwMDtjb250ZW50OiAiXDIwMWMiO2NvbG9yOiB2YXIoLS1ibG9ja3F1b3RlLWNvbG9yKTsgfWJsb2NrcXVvdGVbY2l0ZV06YWZ0ZXIge2ZvbnQtc3R5bGU6IG5vcm1hbDtmb250LXNpemU6IDAuNzVlbTtmb250LXdlaWdodDogNzAwO2NvbnRlbnQ6ICJcYeKAlCAiIGF0dHIoY2l0ZSk7d2hpdGUtc3BhY2U6IHByZTsgfWNvZGUsIGtiZCwgcHJlLCBzYW1wIHtmb250LWZhbWlseTogTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2U7Zm9udC1zaXplOiAwLjg1ZW07IH1jb2RlIHtiYWNrZ3JvdW5kOiB2YXIoLS1zZWNvbmRhcnktYmFjay1jb2xvcik7Ym9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gNCkgY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKTsgfWtiZCB7YmFja2dyb3VuZDogdmFyKC0tZm9yZS1jb2xvcik7Y29sb3I6IHZhcigtLWJhY2stY29sb3IpO2JvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDQpIGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7IH1wcmUge292ZXJmbG93OiBhdXRvO2JhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrLWNvbG9yKTtwYWRkaW5nOiBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7bWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTtib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTtib3JkZXItbGVmdDogMC4yODU3MTQyODU3cmVtIHNvbGlkIHZhcigtLXByZS1jb2xvcik7Ym9yZGVyLXJhZGl1czogMCB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIDA7IH1zdXAsIHN1YiwgY29kZSwga2JkIHtsaW5lLWhlaWdodDogMDtwb3NpdGlvbjogcmVsYXRpdmU7dmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyB9c21hbGwsIHN1cCwgc3ViLCBmaWdjYXB0aW9uIHtmb250LXNpemU6IDAuNzVlbTsgfXN1cCB7dG9wOiAtMC41ZW07IH1zdWIge2JvdHRvbTogLTAuMjVlbTsgfWZpZ3VyZSB7bWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsgfWZpZ2NhcHRpb24ge2NvbG9yOiB2YXIoLS1zZWNvbmRhcnktZm9yZS1jb2xvcik7IH1hIHt0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1hOmxpbmsge2NvbG9yOiB2YXIoLS1hLWxpbmstY29sb3IpOyB9YTp2aXNpdGVkIHtjb2xvcjogdmFyKC0tYS12aXNpdGVkLWNvbG9yKTsgfWE6aG92ZXIsIGE6Zm9jdXMge3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9LmNvbnRhaW5lciB7bWFyZ2luOiAwIGF1dG87cGFkZGluZzogMCBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7IH0ucm93IHtib3gtc2l6aW5nOiBib3JkZXItYm94O2Rpc3BsYXk6IGZsZXg7ZmxleDogMCAxIGF1dG87ZmxleC1mbG93OiByb3cgd3JhcDttYXJnaW46IDAgMCAwIHZhcigtLWJhY2tncm91bmQtbWFyZ2luKTsgfS5jb2wtc20sW2NsYXNzXj0nY29sLXNtLSddLFtjbGFzc149J2NvbC1zbS1vZmZzZXQtJ10sLnJvd1tjbGFzcyo9J2NvbHMtc20tJ10gPiAqIHtib3gtc2l6aW5nOiBib3JkZXItYm94O2ZsZXg6IDAgMCBhdXRvO3BhZGRpbmc6IDAgY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKTsgfS5jb2wtc20sLnJvdy5jb2xzLXNtID4gKiB7bWF4LXdpZHRoOiAxMDAlO2ZsZXgtZ3JvdzogMTtmbGV4LWJhc2lzOiAwOyB9LmNvbC1zbS0xLC5yb3cuY29scy1zbS0xID4gKiB7bWF4LXdpZHRoOiA4LjMzMzMzMzMzMzMlO2ZsZXgtYmFzaXM6IDguMzMzMzMzMzMzMyU7IH0uY29sLXNtLW9mZnNldC0wIHttYXJnaW4tbGVmdDogMDsgfS5jb2wtc20tMiwucm93LmNvbHMtc20tMiA+ICoge21heC13aWR0aDogMTYuNjY2NjY2NjY2NyU7ZmxleC1iYXNpczogMTYuNjY2NjY2NjY2NyU7IH0uY29sLXNtLW9mZnNldC0xIHttYXJnaW4tbGVmdDogOC4zMzMzMzMzMzMzJTsgfS5jb2wtc20tMywucm93LmNvbHMtc20tMyA+ICoge21heC13aWR0aDogMjUlO2ZsZXgtYmFzaXM6IDI1JTsgfS5jb2wtc20tb2Zmc2V0LTIge21hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NjY3JTsgfS5jb2wtc20tNCwucm93LmNvbHMtc20tNCA+ICoge21heC13aWR0aDogMzMuMzMzMzMzMzMzMyU7ZmxleC1iYXNpczogMzMuMzMzMzMzMzMzMyU7IH0uY29sLXNtLW9mZnNldC0zIHttYXJnaW4tbGVmdDogMjUlOyB9LmNvbC1zbS01LC5yb3cuY29scy1zbS01ID4gKiB7bWF4LXdpZHRoOiA0MS42NjY2NjY2NjY3JTtmbGV4LWJhc2lzOiA0MS42NjY2NjY2NjY3JTsgfS5jb2wtc20tb2Zmc2V0LTQge21hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMzMzJTsgfS5jb2wtc20tNiwucm93LmNvbHMtc20tNiA+ICoge21heC13aWR0aDogNTAlO2ZsZXgtYmFzaXM6IDUwJTsgfS5jb2wtc20tb2Zmc2V0LTUge21hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NjY3JTsgfS5jb2wtc20tNywucm93LmNvbHMtc20tNyA+ICoge21heC13aWR0aDogNTguMzMzMzMzMzMzMyU7ZmxleC1iYXNpczogNTguMzMzMzMzMzMzMyU7IH0uY29sLXNtLW9mZnNldC02IHttYXJnaW4tbGVmdDogNTAlOyB9LmNvbC1zbS04LC5yb3cuY29scy1zbS04ID4gKiB7bWF4LXdpZHRoOiA2Ni42NjY2NjY2NjY3JTtmbGV4LWJhc2lzOiA2Ni42NjY2NjY2NjY3JTsgfS5jb2wtc20tb2Zmc2V0LTcge21hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzJTsgfS5jb2wtc20tOSwucm93LmNvbHMtc20tOSA+ICoge21heC13aWR0aDogNzUlO2ZsZXgtYmFzaXM6IDc1JTsgfS5jb2wtc20tb2Zmc2V0LTgge21hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NjY3JTsgfS5jb2wtc20tMTAsLnJvdy5jb2xzLXNtLTEwID4gKiB7bWF4LXdpZHRoOiA4My4zMzMzMzMzMzMzJTtmbGV4LWJhc2lzOiA4My4zMzMzMzMzMzMzJTsgfS5jb2wtc20tb2Zmc2V0LTkge21hcmdpbi1sZWZ0OiA3NSU7IH0uY29sLXNtLTExLC5yb3cuY29scy1zbS0xMSA+ICoge21heC13aWR0aDogOTEuNjY2NjY2NjY2NyU7ZmxleC1iYXNpczogOTEuNjY2NjY2NjY2NyU7IH0uY29sLXNtLW9mZnNldC0xMCB7bWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlOyB9LmNvbC1zbS0xMiwucm93LmNvbHMtc20tMTIgPiAqIHttYXgtd2lkdGg6IDEwMCU7ZmxleC1iYXNpczogMTAwJTsgfS5jb2wtc20tb2Zmc2V0LTExIHttYXJnaW4tbGVmdDogOTEuNjY2NjY2NjY2NyU7IH0uY29sLXNtLW5vcm1hbCB7b3JkZXI6IGluaXRpYWw7IH0uY29sLXNtLWZpcnN0IHtvcmRlcjogLTk5OTsgfS5jb2wtc20tbGFzdCB7b3JkZXI6IDk5OTsgfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDUwMHB4KSB7LmNvbC1tZCxbY2xhc3NePSdjb2wtbWQtJ10sW2NsYXNzXj0nY29sLW1kLW9mZnNldC0nXSwucm93W2NsYXNzKj0nY29scy1tZC0nXSA+ICoge2JveC1zaXppbmc6IGJvcmRlci1ib3g7ZmxleDogMCAwIGF1dG87cGFkZGluZzogMCBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpOyB9LmNvbC1tZCwucm93LmNvbHMtbWQgPiAqIHttYXgtd2lkdGg6IDEwMCU7ZmxleC1ncm93OiAxO2ZsZXgtYmFzaXM6IDA7IH0uY29sLW1kLTEsLnJvdy5jb2xzLW1kLTEgPiAqIHttYXgtd2lkdGg6IDguMzMzMzMzMzMzMyU7ZmxleC1iYXNpczogOC4zMzMzMzMzMzMzJTsgfS5jb2wtbWQtb2Zmc2V0LTAge21hcmdpbi1sZWZ0OiAwOyB9LmNvbC1tZC0yLC5yb3cuY29scy1tZC0yID4gKiB7bWF4LXdpZHRoOiAxNi42NjY2NjY2NjY3JTtmbGV4LWJhc2lzOiAxNi42NjY2NjY2NjY3JTsgfS5jb2wtbWQtb2Zmc2V0LTEge21hcmdpbi1sZWZ0OiA4LjMzMzMzMzMzMzMlOyB9LmNvbC1tZC0zLC5yb3cuY29scy1tZC0zID4gKiB7bWF4LXdpZHRoOiAyNSU7ZmxleC1iYXNpczogMjUlOyB9LmNvbC1tZC1vZmZzZXQtMiB7bWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY2NjclOyB9LmNvbC1tZC00LC5yb3cuY29scy1tZC00ID4gKiB7bWF4LXdpZHRoOiAzMy4zMzMzMzMzMzMzJTtmbGV4LWJhc2lzOiAzMy4zMzMzMzMzMzMzJTsgfS5jb2wtbWQtb2Zmc2V0LTMge21hcmdpbi1sZWZ0OiAyNSU7IH0uY29sLW1kLTUsLnJvdy5jb2xzLW1kLTUgPiAqIHttYXgtd2lkdGg6IDQxLjY2NjY2NjY2NjclO2ZsZXgtYmFzaXM6IDQxLjY2NjY2NjY2NjclOyB9LmNvbC1tZC1vZmZzZXQtNCB7bWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzMzMlOyB9LmNvbC1tZC02LC5yb3cuY29scy1tZC02ID4gKiB7bWF4LXdpZHRoOiA1MCU7ZmxleC1iYXNpczogNTAlOyB9LmNvbC1tZC1vZmZzZXQtNSB7bWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclOyB9LmNvbC1tZC03LC5yb3cuY29scy1tZC03ID4gKiB7bWF4LXdpZHRoOiA1OC4zMzMzMzMzMzMzJTtmbGV4LWJhc2lzOiA1OC4zMzMzMzMzMzMzJTsgfS5jb2wtbWQtb2Zmc2V0LTYge21hcmdpbi1sZWZ0OiA1MCU7IH0uY29sLW1kLTgsLnJvdy5jb2xzLW1kLTggPiAqIHttYXgtd2lkdGg6IDY2LjY2NjY2NjY2NjclO2ZsZXgtYmFzaXM6IDY2LjY2NjY2NjY2NjclOyB9LmNvbC1tZC1vZmZzZXQtNyB7bWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzMzMlOyB9LmNvbC1tZC05LC5yb3cuY29scy1tZC05ID4gKiB7bWF4LXdpZHRoOiA3NSU7ZmxleC1iYXNpczogNzUlOyB9LmNvbC1tZC1vZmZzZXQtOCB7bWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY2NjclOyB9LmNvbC1tZC0xMCwucm93LmNvbHMtbWQtMTAgPiAqIHttYXgtd2lkdGg6IDgzLjMzMzMzMzMzMzMlO2ZsZXgtYmFzaXM6IDgzLjMzMzMzMzMzMzMlOyB9LmNvbC1tZC1vZmZzZXQtOSB7bWFyZ2luLWxlZnQ6IDc1JTsgfS5jb2wtbWQtMTEsLnJvdy5jb2xzLW1kLTExID4gKiB7bWF4LXdpZHRoOiA5MS42NjY2NjY2NjY3JTtmbGV4LWJhc2lzOiA5MS42NjY2NjY2NjY3JTsgfS5jb2wtbWQtb2Zmc2V0LTEwIHttYXJnaW4tbGVmdDogODMuMzMzMzMzMzMzMyU7IH0uY29sLW1kLTEyLC5yb3cuY29scy1tZC0xMiA+ICoge21heC13aWR0aDogMTAwJTtmbGV4LWJhc2lzOiAxMDAlOyB9LmNvbC1tZC1vZmZzZXQtMTEge21hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTsgfS5jb2wtbWQtbm9ybWFsIHtvcmRlcjogaW5pdGlhbDsgfS5jb2wtbWQtZmlyc3Qge29yZGVyOiAtOTk5OyB9LmNvbC1tZC1sYXN0IHtvcmRlcjogOTk5OyB9IH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIHsuY29sLWxnLFtjbGFzc149J2NvbC1sZy0nXSxbY2xhc3NePSdjb2wtbGctb2Zmc2V0LSddLC5yb3dbY2xhc3MqPSdjb2xzLWxnLSddID4gKiB7Ym94LXNpemluZzogYm9yZGVyLWJveDtmbGV4OiAwIDAgYXV0bztwYWRkaW5nOiAwIGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7IH0uY29sLWxnLC5yb3cuY29scy1sZyA+ICoge21heC13aWR0aDogMTAwJTtmbGV4LWdyb3c6IDE7ZmxleC1iYXNpczogMDsgfS5jb2wtbGctMSwucm93LmNvbHMtbGctMSA+ICoge21heC13aWR0aDogOC4zMzMzMzMzMzMzJTtmbGV4LWJhc2lzOiA4LjMzMzMzMzMzMzMlOyB9LmNvbC1sZy1vZmZzZXQtMCB7bWFyZ2luLWxlZnQ6IDA7IH0uY29sLWxnLTIsLnJvdy5jb2xzLWxnLTIgPiAqIHttYXgtd2lkdGg6IDE2LjY2NjY2NjY2NjclO2ZsZXgtYmFzaXM6IDE2LjY2NjY2NjY2NjclOyB9LmNvbC1sZy1vZmZzZXQtMSB7bWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMyU7IH0uY29sLWxnLTMsLnJvdy5jb2xzLWxnLTMgPiAqIHttYXgtd2lkdGg6IDI1JTtmbGV4LWJhc2lzOiAyNSU7IH0uY29sLWxnLW9mZnNldC0yIHttYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7IH0uY29sLWxnLTQsLnJvdy5jb2xzLWxnLTQgPiAqIHttYXgtd2lkdGg6IDMzLjMzMzMzMzMzMzMlO2ZsZXgtYmFzaXM6IDMzLjMzMzMzMzMzMzMlOyB9LmNvbC1sZy1vZmZzZXQtMyB7bWFyZ2luLWxlZnQ6IDI1JTsgfS5jb2wtbGctNSwucm93LmNvbHMtbGctNSA+ICoge21heC13aWR0aDogNDEuNjY2NjY2NjY2NyU7ZmxleC1iYXNpczogNDEuNjY2NjY2NjY2NyU7IH0uY29sLWxnLW9mZnNldC00IHttYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMyU7IH0uY29sLWxnLTYsLnJvdy5jb2xzLWxnLTYgPiAqIHttYXgtd2lkdGg6IDUwJTtmbGV4LWJhc2lzOiA1MCU7IH0uY29sLWxnLW9mZnNldC01IHttYXJnaW4tbGVmdDogNDEuNjY2NjY2NjY2NyU7IH0uY29sLWxnLTcsLnJvdy5jb2xzLWxnLTcgPiAqIHttYXgtd2lkdGg6IDU4LjMzMzMzMzMzMzMlO2ZsZXgtYmFzaXM6IDU4LjMzMzMzMzMzMzMlOyB9LmNvbC1sZy1vZmZzZXQtNiB7bWFyZ2luLWxlZnQ6IDUwJTsgfS5jb2wtbGctOCwucm93LmNvbHMtbGctOCA+ICoge21heC13aWR0aDogNjYuNjY2NjY2NjY2NyU7ZmxleC1iYXNpczogNjYuNjY2NjY2NjY2NyU7IH0uY29sLWxnLW9mZnNldC03IHttYXJnaW4tbGVmdDogNTguMzMzMzMzMzMzMyU7IH0uY29sLWxnLTksLnJvdy5jb2xzLWxnLTkgPiAqIHttYXgtd2lkdGg6IDc1JTtmbGV4LWJhc2lzOiA3NSU7IH0uY29sLWxnLW9mZnNldC04IHttYXJnaW4tbGVmdDogNjYuNjY2NjY2NjY2NyU7IH0uY29sLWxnLTEwLC5yb3cuY29scy1sZy0xMCA+ICoge21heC13aWR0aDogODMuMzMzMzMzMzMzMyU7ZmxleC1iYXNpczogODMuMzMzMzMzMzMzMyU7IH0uY29sLWxnLW9mZnNldC05IHttYXJnaW4tbGVmdDogNzUlOyB9LmNvbC1sZy0xMSwucm93LmNvbHMtbGctMTEgPiAqIHttYXgtd2lkdGg6IDkxLjY2NjY2NjY2NjclO2ZsZXgtYmFzaXM6IDkxLjY2NjY2NjY2NjclOyB9LmNvbC1sZy1vZmZzZXQtMTAge21hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMzMzJTsgfS5jb2wtbGctMTIsLnJvdy5jb2xzLWxnLTEyID4gKiB7bWF4LXdpZHRoOiAxMDAlO2ZsZXgtYmFzaXM6IDEwMCU7IH0uY29sLWxnLW9mZnNldC0xMSB7bWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY2NjclOyB9LmNvbC1sZy1ub3JtYWwge29yZGVyOiBpbml0aWFsOyB9LmNvbC1sZy1maXJzdCB7b3JkZXI6IC05OTk7IH0uY29sLWxnLWxhc3Qge29yZGVyOiA5OTk7IH0gfTpyb290IHstLWNhcmQtYmFjay1jb2xvcjogIzNjYjRlNjstLWNhcmQtZm9yZS1jb2xvcjogIzAzMjM0YjstLWNhcmQtYm9yZGVyLWNvbG9yOiAjMDMyMzRiOyB9LmNhcmQge2Rpc3BsYXk6IGZsZXg7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47YWxpZ24tc2VsZjogY2VudGVyO3Bvc2l0aW9uOiByZWxhdGl2ZTt3aWR0aDogMTAwJTtiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLWJhY2stY29sb3IpO2NvbG9yOiB2YXIoLS1jYXJkLWZvcmUtY29sb3IpO2JvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWNhcmQtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7bWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTtvdmVyZmxvdzogaGlkZGVuOyB9QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMzIwcHgpIHsuY2FyZCB7bWF4LXdpZHRoOiAzMjBweDsgfSB9LmNhcmQgPiAuc2VjdGlvbmUge2JhY2tncm91bmQ6IHZhcigtLWNhcmQtYmFjay1jb2xvcik7Y29sb3I6IHZhcigtLWNhcmQtZm9yZS1jb2xvcik7Ym94LXNpemluZzogYm9yZGVyLWJveDttYXJnaW46IDA7Ym9yZGVyOiAwO2JvcmRlci1yYWRpdXM6IDA7Ym9yZGVyLWJvdHRvbTogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWNhcmQtYm9yZGVyLWNvbG9yKTtwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZyk7d2lkdGg6IDEwMCU7IH0uY2FyZCA+IC5zZWN0aW9uZS5tZWRpYSB7aGVpZ2h0OiAyMDBweDtwYWRkaW5nOiAwOy1vLW9iamVjdC1maXQ6IGNvdmVyO29iamVjdC1maXQ6IGNvdmVyOyB9LmNhcmQgPiAuc2VjdGlvbmU6bGFzdC1jaGlsZCB7Ym9yZGVyLWJvdHRvbTogMDsgfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDI0MHB4KSB7LmNhcmQuc21hbGwge21heC13aWR0aDogMjQwcHg7IH0gfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ4MHB4KSB7LmNhcmQubGFyZ2Uge21heC13aWR0aDogNDgwcHg7IH0gfS5jYXJkLmZsdWlkIHttYXgtd2lkdGg6IDEwMCU7d2lkdGg6IGF1dG87IH0uY2FyZC53YXJuaW5nIHstLWNhcmQtYmFjay1jb2xvcjogI2U1YjhiNzstLWNhcmQtZm9yZS1jb2xvcjogIzNiMjM0YjstLWNhcmQtYm9yZGVyLWNvbG9yOiAjOGMwMDc4OyB9LmNhcmQuZXJyb3Igey0tY2FyZC1iYWNrLWNvbG9yOiAjNDY0NjUwOy0tY2FyZC1mb3JlLWNvbG9yOiAjZmZmZmZmOy0tY2FyZC1ib3JkZXItY29sb3I6ICM4YzAwNzg7IH0uY2FyZCA+IC5zZWN0aW9uZS5kYXJrIHstLWNhcmQtYmFjay1jb2xvcjogIzNiMjM0YjstLWNhcmQtZm9yZS1jb2xvcjogI2ZmZmZmZjsgfS5jYXJkID4gLnNlY3Rpb25lLmRvdWJsZS1wYWRkZWQge3BhZGRpbmc6IGNhbGMoMS41ICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsgfTpyb290IHstLWZvcm0tYmFjay1jb2xvcjogI2ZmZTk3ZjstLWZvcm0tZm9yZS1jb2xvcjogIzAzMjM0YjstLWZvcm0tYm9yZGVyLWNvbG9yOiAjM2NiNGU2Oy0taW5wdXQtYmFjay1jb2xvcjogI2ZmZmZmZjstLWlucHV0LWZvcmUtY29sb3I6ICMwMzIzNGI7LS1pbnB1dC1ib3JkZXItY29sb3I6ICMzY2I0ZTY7LS1pbnB1dC1mb2N1cy1jb2xvcjogIzAyODhkMTstLWlucHV0LWludmFsaWQtY29sb3I6ICNkMzJmMmY7LS1idXR0b24tYmFjay1jb2xvcjogI2UyZTJlMjstLWJ1dHRvbi1ob3Zlci1iYWNrLWNvbG9yOiAjZGNkY2RjOy0tYnV0dG9uLWZvcmUtY29sb3I6ICMyMTIxMjE7LS1idXR0b24tYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDstLWJ1dHRvbi1ob3Zlci1ib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Oy0tYnV0dG9uLWdyb3VwLWJvcmRlci1jb2xvcjogcmdiYSgxMjQsIDEyNCwgMTI0LCAwLjU0KTsgfWZvcm0ge2JhY2tncm91bmQ6IHZhcigtLWZvcm0tYmFjay1jb2xvcik7Y29sb3I6IHZhcigtLWZvcm0tZm9yZS1jb2xvcik7Ym9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tZm9ybS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTttYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pO3BhZGRpbmc6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSkgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOyB9ZmllbGRzZXQge2JvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWZvcm0tYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7bWFyZ2luOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pIC8gNCk7cGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOyB9bGVnZW5kIHtib3gtc2l6aW5nOiBib3JkZXItYm94O2Rpc3BsYXk6IHRhYmxlO21heC13aWR0aDogMTAwJTt3aGl0ZS1zcGFjZTogbm9ybWFsO2ZvbnQtd2VpZ2h0OiA1MDA7cGFkZGluZzogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKTsgfWxhYmVsIHtwYWRkaW5nOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsgfS5pbnB1dC1ncm91cCB7ZGlzcGxheTogaW5saW5lLWJsb2NrOyB9LmlucHV0LWdyb3VwLmZsdWlkIHtkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7anVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH0uaW5wdXQtZ3JvdXAuZmx1aWQgPiBpbnB1dCB7bWF4LXdpZHRoOiAxMDAlO2ZsZXgtZ3JvdzogMTtmbGV4LWJhc2lzOiAwcHg7IH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0OTlweCkgey5pbnB1dC1ncm91cC5mbHVpZCB7YWxpZ24taXRlbXM6IHN0cmV0Y2g7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfSB9LmlucHV0LWdyb3VwLnZlcnRpY2FsIHtkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBzdHJldGNoO2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH0uaW5wdXQtZ3JvdXAudmVydGljYWwgPiBpbnB1dCB7bWF4LXdpZHRoOiAxMDAlO2ZsZXgtZ3JvdzogMTtmbGV4LWJhc2lzOiAwcHg7IH1bdHlwZT0ibnVtYmVyIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sIFt0eXBlPSJudW1iZXIiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7aGVpZ2h0OiBhdXRvOyB9W3R5cGU9InNlYXJjaCJdIHstd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDogLTJweDsgfVt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24gey13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgfWlucHV0Om5vdChbdHlwZV0pLCBbdHlwZT0idGV4dCJdLCBbdHlwZT0iZW1haWwiXSwgW3R5cGU9Im51bWJlciJdLCBbdHlwZT0ic2VhcmNoIl0sW3R5cGU9InBhc3N3b3JkIl0sIFt0eXBlPSJ1cmwiXSwgW3R5cGU9InRlbCJdLCBbdHlwZT0iY2hlY2tib3giXSwgW3R5cGU9InJhZGlvIl0sIHRleHRhcmVhLCBzZWxlY3Qge2JveC1zaXppbmc6IGJvcmRlci1ib3g7YmFja2dyb3VuZDogdmFyKC0taW5wdXQtYmFjay1jb2xvcik7Y29sb3I6IHZhcigtLWlucHV0LWZvcmUtY29sb3IpO2JvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWlucHV0LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpO21hcmdpbjogY2FsYyh2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSAvIDIpO3BhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7IH1pbnB1dDpub3QoW3R5cGU9ImJ1dHRvbiJdKTpub3QoW3R5cGU9InN1Ym1pdCJdKTpub3QoW3R5cGU9InJlc2V0Il0pOmhvdmVyLCBpbnB1dDpub3QoW3R5cGU9ImJ1dHRvbiJdKTpub3QoW3R5cGU9InN1Ym1pdCJdKTpub3QoW3R5cGU9InJlc2V0Il0pOmZvY3VzLCB0ZXh0YXJlYTpob3ZlciwgdGV4dGFyZWE6Zm9jdXMsIHNlbGVjdDpob3Zlciwgc2VsZWN0OmZvY3VzIHtib3JkZXItY29sb3I6IHZhcigtLWlucHV0LWZvY3VzLWNvbG9yKTtib3gtc2hhZG93OiBub25lOyB9aW5wdXQ6bm90KFt0eXBlPSJidXR0b24iXSk6bm90KFt0eXBlPSJzdWJtaXQiXSk6bm90KFt0eXBlPSJyZXNldCJdKTppbnZhbGlkLCBpbnB1dDpub3QoW3R5cGU9ImJ1dHRvbiJdKTpub3QoW3R5cGU9InN1Ym1pdCJdKTpub3QoW3R5cGU9InJlc2V0Il0pOmZvY3VzOmludmFsaWQsIHRleHRhcmVhOmludmFsaWQsIHRleHRhcmVhOmZvY3VzOmludmFsaWQsIHNlbGVjdDppbnZhbGlkLCBzZWxlY3Q6Zm9jdXM6aW52YWxpZCB7Ym9yZGVyLWNvbG9yOiB2YXIoLS1pbnB1dC1pbnZhbGlkLWNvbG9yKTtib3gtc2hhZG93OiBub25lOyB9aW5wdXQ6bm90KFt0eXBlPSJidXR0b24iXSk6bm90KFt0eXBlPSJzdWJtaXQiXSk6bm90KFt0eXBlPSJyZXNldCJdKVtyZWFkb25seV0sIHRleHRhcmVhW3JlYWRvbmx5XSwgc2VsZWN0W3JlYWRvbmx5XSB7YmFja2dyb3VuZDogdmFyKC0tc2Vjb25kYXJ5LWJhY2stY29sb3IpOyB9c2VsZWN0IHttYXgtd2lkdGg6IDEwMCU7IH1vcHRpb24ge292ZXJmbG93OiBoaWRkZW47dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IH1bdHlwZT0iY2hlY2tib3giXSwgW3R5cGU9InJhZGlvIl0gey13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTstbW96LWFwcGVhcmFuY2U6IG5vbmU7YXBwZWFyYW5jZTogbm9uZTtwb3NpdGlvbjogcmVsYXRpdmU7aGVpZ2h0OiBjYWxjKDFyZW0gKyB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKTt3aWR0aDogY2FsYygxcmVtICsgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7dmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tO3BhZGRpbmc6IDA7ZmxleC1iYXNpczogY2FsYygxcmVtICsgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMikgIWltcG9ydGFudDtmbGV4LWdyb3c6IDAgIWltcG9ydGFudDsgfVt0eXBlPSJjaGVja2JveCJdOmNoZWNrZWQ6YmVmb3JlLCBbdHlwZT0icmFkaW8iXTpjaGVja2VkOmJlZm9yZSB7cG9zaXRpb246IGFic29sdXRlOyB9W3R5cGU9ImNoZWNrYm94Il06Y2hlY2tlZDpiZWZvcmUge2NvbnRlbnQ6ICdcMjcxMyc7Zm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Zm9udC1zaXplOiBjYWxjKDFyZW0gKyB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKTt0b3A6IGNhbGMoMHJlbSAtIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7bGVmdDogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KTsgfVt0eXBlPSJyYWRpbyJdIHtib3JkZXItcmFkaXVzOiAxMDAlOyB9W3R5cGU9InJhZGlvIl06Y2hlY2tlZDpiZWZvcmUge2JvcmRlci1yYWRpdXM6IDEwMCU7Y29udGVudDogJyc7dG9wOiBjYWxjKDAuMDcxNDI4NTcxNHJlbSArIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpO2xlZnQ6IGNhbGMoMC4wNzE0Mjg1NzE0cmVtICsgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7YmFja2dyb3VuZDogdmFyKC0taW5wdXQtZm9yZS1jb2xvcik7d2lkdGg6IDAuNXJlbTtoZWlnaHQ6IDAuNXJlbTsgfTpwbGFjZWhvbGRlci1zaG93biB7Y29sb3I6IHZhcigtLWlucHV0LWZvcmUtY29sb3IpOyB9OjotbXMtcGxhY2Vob2xkZXIge2NvbG9yOiB2YXIoLS1pbnB1dC1mb3JlLWNvbG9yKTtvcGFjaXR5OiAwLjU0OyB9YnV0dG9uOjotbW96LWZvY3VzLWlubmVyLCBbdHlwZT0iYnV0dG9uIl06Oi1tb3otZm9jdXMtaW5uZXIsIFt0eXBlPSJyZXNldCJdOjotbW96LWZvY3VzLWlubmVyLCBbdHlwZT0ic3VibWl0Il06Oi1tb3otZm9jdXMtaW5uZXIge2JvcmRlci1zdHlsZTogbm9uZTtwYWRkaW5nOiAwOyB9YnV0dG9uLCBodG1sIFt0eXBlPSJidXR0b24iXSwgW3R5cGU9InJlc2V0Il0sIFt0eXBlPSJzdWJtaXQiXSB7LXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IH1idXR0b24ge292ZXJmbG93OiB2aXNpYmxlO3RleHQtdHJhbnNmb3JtOiBub25lOyB9YnV0dG9uLCBbdHlwZT0iYnV0dG9uIl0sIFt0eXBlPSJzdWJtaXQiXSwgW3R5cGU9InJlc2V0Il0sYS5idXR0b24sIGxhYmVsLmJ1dHRvbiwgLmJ1dHRvbixhW3JvbGU9ImJ1dHRvbiJdLCBsYWJlbFtyb2xlPSJidXR0b24iXSwgW3JvbGU9ImJ1dHRvbiJdIHtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7YmFja2dyb3VuZDogdmFyKC0tYnV0dG9uLWJhY2stY29sb3IpO2NvbG9yOiB2YXIoLS1idXR0b24tZm9yZS1jb2xvcik7Ym9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tYnV0dG9uLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7bWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTt0ZXh0LWRlY29yYXRpb246IG5vbmU7Y3Vyc29yOiBwb2ludGVyO3RyYW5zaXRpb246IGJhY2tncm91bmQgMC4zczsgfWJ1dHRvbjpob3ZlciwgYnV0dG9uOmZvY3VzLCBbdHlwZT0iYnV0dG9uIl06aG92ZXIsIFt0eXBlPSJidXR0b24iXTpmb2N1cywgW3R5cGU9InN1Ym1pdCJdOmhvdmVyLCBbdHlwZT0ic3VibWl0Il06Zm9jdXMsIFt0eXBlPSJyZXNldCJdOmhvdmVyLCBbdHlwZT0icmVzZXQiXTpmb2N1cyxhLmJ1dHRvbjpob3ZlcixhLmJ1dHRvbjpmb2N1cywgbGFiZWwuYnV0dG9uOmhvdmVyLCBsYWJlbC5idXR0b246Zm9jdXMsIC5idXR0b246aG92ZXIsIC5idXR0b246Zm9jdXMsYVtyb2xlPSJidXR0b24iXTpob3ZlcixhW3JvbGU9ImJ1dHRvbiJdOmZvY3VzLCBsYWJlbFtyb2xlPSJidXR0b24iXTpob3ZlciwgbGFiZWxbcm9sZT0iYnV0dG9uIl06Zm9jdXMsIFtyb2xlPSJidXR0b24iXTpob3ZlciwgW3JvbGU9ImJ1dHRvbiJdOmZvY3VzIHtiYWNrZ3JvdW5kOiB2YXIoLS1idXR0b24taG92ZXItYmFjay1jb2xvcik7Ym9yZGVyLWNvbG9yOiB2YXIoLS1idXR0b24taG92ZXItYm9yZGVyLWNvbG9yKTsgfWlucHV0OmRpc2FibGVkLCBpbnB1dFtkaXNhYmxlZF0sIHRleHRhcmVhOmRpc2FibGVkLCB0ZXh0YXJlYVtkaXNhYmxlZF0sIHNlbGVjdDpkaXNhYmxlZCwgc2VsZWN0W2Rpc2FibGVkXSwgYnV0dG9uOmRpc2FibGVkLCBidXR0b25bZGlzYWJsZWRdLCAuYnV0dG9uOmRpc2FibGVkLCAuYnV0dG9uW2Rpc2FibGVkXSwgW3JvbGU9ImJ1dHRvbiJdOmRpc2FibGVkLCBbcm9sZT0iYnV0dG9uIl1bZGlzYWJsZWRdIHtjdXJzb3I6IG5vdC1hbGxvd2VkO29wYWNpdHk6IDAuNzU7IH0uYnV0dG9uLWdyb3VwIHtkaXNwbGF5OiBmbGV4O2JvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWJ1dHRvbi1ncm91cC1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTttYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOyB9LmJ1dHRvbi1ncm91cCA+IGJ1dHRvbiwgLmJ1dHRvbi1ncm91cCBbdHlwZT0iYnV0dG9uIl0sIC5idXR0b24tZ3JvdXAgPiBbdHlwZT0ic3VibWl0Il0sIC5idXR0b24tZ3JvdXAgPiBbdHlwZT0icmVzZXQiXSwgLmJ1dHRvbi1ncm91cCA+IC5idXR0b24sIC5idXR0b24tZ3JvdXAgPiBbcm9sZT0iYnV0dG9uIl0ge21hcmdpbjogMDttYXgtd2lkdGg6IDEwMCU7ZmxleDogMSAxIGF1dG87dGV4dC1hbGlnbjogY2VudGVyO2JvcmRlcjogMDtib3JkZXItcmFkaXVzOiAwO2JveC1zaGFkb3c6IG5vbmU7IH0uYnV0dG9uLWdyb3VwID4gOm5vdCg6Zmlyc3QtY2hpbGQpIHtib3JkZXItbGVmdDogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWJ1dHRvbi1ncm91cC1ib3JkZXItY29sb3IpOyB9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDk5cHgpIHsuYnV0dG9uLWdyb3VwIHtmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9LmJ1dHRvbi1ncm91cCA+IDpub3QoOmZpcnN0LWNoaWxkKSB7Ym9yZGVyOiAwO2JvcmRlci10b3A6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1idXR0b24tZ3JvdXAtYm9yZGVyLWNvbG9yKTsgfSB9YnV0dG9uLnByaW1hcnksIFt0eXBlPSJidXR0b24iXS5wcmltYXJ5LCBbdHlwZT0ic3VibWl0Il0ucHJpbWFyeSwgW3R5cGU9InJlc2V0Il0ucHJpbWFyeSwgLmJ1dHRvbi5wcmltYXJ5LCBbcm9sZT0iYnV0dG9uIl0ucHJpbWFyeSB7LS1idXR0b24tYmFjay1jb2xvcjogIzE5NzZkMjstLWJ1dHRvbi1mb3JlLWNvbG9yOiAjZjhmOGY4OyB9YnV0dG9uLnByaW1hcnk6aG92ZXIsIGJ1dHRvbi5wcmltYXJ5OmZvY3VzLCBbdHlwZT0iYnV0dG9uIl0ucHJpbWFyeTpob3ZlciwgW3R5cGU9ImJ1dHRvbiJdLnByaW1hcnk6Zm9jdXMsIFt0eXBlPSJzdWJtaXQiXS5wcmltYXJ5OmhvdmVyLCBbdHlwZT0ic3VibWl0Il0ucHJpbWFyeTpmb2N1cywgW3R5cGU9InJlc2V0Il0ucHJpbWFyeTpob3ZlciwgW3R5cGU9InJlc2V0Il0ucHJpbWFyeTpmb2N1cywgLmJ1dHRvbi5wcmltYXJ5OmhvdmVyLCAuYnV0dG9uLnByaW1hcnk6Zm9jdXMsIFtyb2xlPSJidXR0b24iXS5wcmltYXJ5OmhvdmVyLCBbcm9sZT0iYnV0dG9uIl0ucHJpbWFyeTpmb2N1cyB7LS1idXR0b24taG92ZXItYmFjay1jb2xvcjogIzE1NjVjMDsgfWJ1dHRvbi5zZWNvbmRhcnksIFt0eXBlPSJidXR0b24iXS5zZWNvbmRhcnksIFt0eXBlPSJzdWJtaXQiXS5zZWNvbmRhcnksIFt0eXBlPSJyZXNldCJdLnNlY29uZGFyeSwgLmJ1dHRvbi5zZWNvbmRhcnksIFtyb2xlPSJidXR0b24iXS5zZWNvbmRhcnkgey0tYnV0dG9uLWJhY2stY29sb3I6ICNkMzJmMmY7LS1idXR0b24tZm9yZS1jb2xvcjogI2Y4ZjhmODsgfWJ1dHRvbi5zZWNvbmRhcnk6aG92ZXIsIGJ1dHRvbi5zZWNvbmRhcnk6Zm9jdXMsIFt0eXBlPSJidXR0b24iXS5zZWNvbmRhcnk6aG92ZXIsIFt0eXBlPSJidXR0b24iXS5zZWNvbmRhcnk6Zm9jdXMsIFt0eXBlPSJzdWJtaXQiXS5zZWNvbmRhcnk6aG92ZXIsIFt0eXBlPSJzdWJtaXQiXS5zZWNvbmRhcnk6Zm9jdXMsIFt0eXBlPSJyZXNldCJdLnNlY29uZGFyeTpob3ZlciwgW3R5cGU9InJlc2V0Il0uc2Vjb25kYXJ5OmZvY3VzLCAuYnV0dG9uLnNlY29uZGFyeTpob3ZlciwgLmJ1dHRvbi5zZWNvbmRhcnk6Zm9jdXMsIFtyb2xlPSJidXR0b24iXS5zZWNvbmRhcnk6aG92ZXIsIFtyb2xlPSJidXR0b24iXS5zZWNvbmRhcnk6Zm9jdXMgey0tYnV0dG9uLWhvdmVyLWJhY2stY29sb3I6ICNjNjI4Mjg7IH1idXR0b24udGVydGlhcnksIFt0eXBlPSJidXR0b24iXS50ZXJ0aWFyeSwgW3R5cGU9InN1Ym1pdCJdLnRlcnRpYXJ5LCBbdHlwZT0icmVzZXQiXS50ZXJ0aWFyeSwgLmJ1dHRvbi50ZXJ0aWFyeSwgW3JvbGU9ImJ1dHRvbiJdLnRlcnRpYXJ5IHstLWJ1dHRvbi1iYWNrLWNvbG9yOiAjMzA4NzMyOy0tYnV0dG9uLWZvcmUtY29sb3I6ICNmOGY4Zjg7IH1idXR0b24udGVydGlhcnk6aG92ZXIsIGJ1dHRvbi50ZXJ0aWFyeTpmb2N1cywgW3R5cGU9ImJ1dHRvbiJdLnRlcnRpYXJ5OmhvdmVyLCBbdHlwZT0iYnV0dG9uIl0udGVydGlhcnk6Zm9jdXMsIFt0eXBlPSJzdWJtaXQiXS50ZXJ0aWFyeTpob3ZlciwgW3R5cGU9InN1Ym1pdCJdLnRlcnRpYXJ5OmZvY3VzLCBbdHlwZT0icmVzZXQiXS50ZXJ0aWFyeTpob3ZlciwgW3R5cGU9InJlc2V0Il0udGVydGlhcnk6Zm9jdXMsIC5idXR0b24udGVydGlhcnk6aG92ZXIsIC5idXR0b24udGVydGlhcnk6Zm9jdXMsIFtyb2xlPSJidXR0b24iXS50ZXJ0aWFyeTpob3ZlciwgW3JvbGU9ImJ1dHRvbiJdLnRlcnRpYXJ5OmZvY3VzIHstLWJ1dHRvbi1ob3Zlci1iYWNrLWNvbG9yOiAjMjc3NTI5OyB9YnV0dG9uLmludmVyc2UsIFt0eXBlPSJidXR0b24iXS5pbnZlcnNlLCBbdHlwZT0ic3VibWl0Il0uaW52ZXJzZSwgW3R5cGU9InJlc2V0Il0uaW52ZXJzZSwgLmJ1dHRvbi5pbnZlcnNlLCBbcm9sZT0iYnV0dG9uIl0uaW52ZXJzZSB7LS1idXR0b24tYmFjay1jb2xvcjogIzIxMjEyMTstLWJ1dHRvbi1mb3JlLWNvbG9yOiAjZjhmOGY4OyB9YnV0dG9uLmludmVyc2U6aG92ZXIsIGJ1dHRvbi5pbnZlcnNlOmZvY3VzLCBbdHlwZT0iYnV0dG9uIl0uaW52ZXJzZTpob3ZlciwgW3R5cGU9ImJ1dHRvbiJdLmludmVyc2U6Zm9jdXMsIFt0eXBlPSJzdWJtaXQiXS5pbnZlcnNlOmhvdmVyLCBbdHlwZT0ic3VibWl0Il0uaW52ZXJzZTpmb2N1cywgW3R5cGU9InJlc2V0Il0uaW52ZXJzZTpob3ZlciwgW3R5cGU9InJlc2V0Il0uaW52ZXJzZTpmb2N1cywgLmJ1dHRvbi5pbnZlcnNlOmhvdmVyLCAuYnV0dG9uLmludmVyc2U6Zm9jdXMsIFtyb2xlPSJidXR0b24iXS5pbnZlcnNlOmhvdmVyLCBbcm9sZT0iYnV0dG9uIl0uaW52ZXJzZTpmb2N1cyB7LS1idXR0b24taG92ZXItYmFjay1jb2xvcjogIzExMTsgfWJ1dHRvbi5zbWFsbCwgW3R5cGU9ImJ1dHRvbiJdLnNtYWxsLCBbdHlwZT0ic3VibWl0Il0uc21hbGwsIFt0eXBlPSJyZXNldCJdLnNtYWxsLCAuYnV0dG9uLnNtYWxsLCBbcm9sZT0iYnV0dG9uIl0uc21hbGwge3BhZGRpbmc6IGNhbGMoMC41ICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKSBjYWxjKDAuNzUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpO21hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7IH1idXR0b24ubGFyZ2UsIFt0eXBlPSJidXR0b24iXS5sYXJnZSwgW3R5cGU9InN1Ym1pdCJdLmxhcmdlLCBbdHlwZT0icmVzZXQiXS5sYXJnZSwgLmJ1dHRvbi5sYXJnZSwgW3JvbGU9ImJ1dHRvbiJdLmxhcmdlIHtwYWRkaW5nOiBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSkgY2FsYygyICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTttYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOyB9OnJvb3Qgey0taGVhZGVyLWJhY2stY29sb3I6ICMwMzIzNGI7LS1oZWFkZXItaG92ZXItYmFjay1jb2xvcjogI2ZmZDIwMDstLWhlYWRlci1mb3JlLWNvbG9yOiAjZmZmZmZmOy0taGVhZGVyLWJvcmRlci1jb2xvcjogIzNjYjRlNjstLW5hdi1iYWNrLWNvbG9yOiAjZmZmZmZmOy0tbmF2LWhvdmVyLWJhY2stY29sb3I6ICNmZmU5N2Y7LS1uYXYtZm9yZS1jb2xvcjogI2U2MDA3ZTstLW5hdi1ib3JkZXItY29sb3I6ICMzY2I0ZTY7LS1uYXYtbGluay1jb2xvcjogIzNjYjRlNjstLWZvb3Rlci1mb3JlLWNvbG9yOiAjZmZmZmZmOy0tZm9vdGVyLWJhY2stY29sb3I6ICMwMzIzNGI7LS1mb290ZXItYm9yZGVyLWNvbG9yOiAjM2NiNGU2Oy0tZm9vdGVyLWxpbmstY29sb3I6ICMzY2I0ZTY7LS1kcmF3ZXItYmFjay1jb2xvcjogI2ZmZmZmZjstLWRyYXdlci1ob3Zlci1iYWNrLWNvbG9yOiAjZmZlOTdmOy0tZHJhd2VyLWJvcmRlci1jb2xvcjogIzNjYjRlNjstLWRyYXdlci1jbG9zZS1jb2xvcjogI2U2MDA3ZTsgfWhlYWRlciB7aGVpZ2h0OiAyLjc1cmVtO2JhY2tncm91bmQ6IHZhcigtLWhlYWRlci1iYWNrLWNvbG9yKTtjb2xvcjogdmFyKC0taGVhZGVyLWZvcmUtY29sb3IpO2JvcmRlci1ib3R0b206IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1oZWFkZXItYm9yZGVyLWNvbG9yKTtwYWRkaW5nOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDQpIDA7d2hpdGUtc3BhY2U6IG5vd3JhcDtvdmVyZmxvdy14OiBhdXRvO292ZXJmbG93LXk6IGhpZGRlbjsgfWhlYWRlci5yb3cge2JveC1zaXppbmc6IGNvbnRlbnQtYm94OyB9aGVhZGVyIC5sb2dvIHtjb2xvcjogdmFyKC0taGVhZGVyLWZvcmUtY29sb3IpO2ZvbnQtc2l6ZTogMS43NXJlbTtwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgY2FsYygyICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTt0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1oZWFkZXIgYnV0dG9uLCBoZWFkZXIgW3R5cGU9ImJ1dHRvbiJdLCBoZWFkZXIgLmJ1dHRvbiwgaGVhZGVyIFtyb2xlPSJidXR0b24iXSB7Ym94LXNpemluZzogYm9yZGVyLWJveDtwb3NpdGlvbjogcmVsYXRpdmU7dG9wOiBjYWxjKDByZW0gLSB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KTtoZWlnaHQ6IGNhbGMoMy4xODc1cmVtICsgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7YmFja2dyb3VuZDogdmFyKC0taGVhZGVyLWJhY2stY29sb3IpO2xpbmUtaGVpZ2h0OiBjYWxjKDMuMTg3NXJlbSAtIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAqIDEuNSk7dGV4dC1hbGlnbjogY2VudGVyO2NvbG9yOiB2YXIoLS1oZWFkZXItZm9yZS1jb2xvcik7Ym9yZGVyOiAwO2JvcmRlci1yYWRpdXM6IDA7bWFyZ2luOiAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH1oZWFkZXIgYnV0dG9uOmhvdmVyLCBoZWFkZXIgYnV0dG9uOmZvY3VzLCBoZWFkZXIgW3R5cGU9ImJ1dHRvbiJdOmhvdmVyLCBoZWFkZXIgW3R5cGU9ImJ1dHRvbiJdOmZvY3VzLCBoZWFkZXIgLmJ1dHRvbjpob3ZlciwgaGVhZGVyIC5idXR0b246Zm9jdXMsIGhlYWRlciBbcm9sZT0iYnV0dG9uIl06aG92ZXIsIGhlYWRlciBbcm9sZT0iYnV0dG9uIl06Zm9jdXMge2JhY2tncm91bmQ6IHZhcigtLWhlYWRlci1ob3Zlci1iYWNrLWNvbG9yKTsgfW5hdiB7YmFja2dyb3VuZDogdmFyKC0tbmF2LWJhY2stY29sb3IpO2NvbG9yOiB2YXIoLS1uYXYtZm9yZS1jb2xvcik7Ym9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tbmF2LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpO21hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7IH1uYXYgKiB7cGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIGNhbGMoMS41ICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsgfW5hdiBhLCBuYXYgYTp2aXNpdGVkIHtkaXNwbGF5OiBibG9jaztjb2xvcjogdmFyKC0tbmF2LWxpbmstY29sb3IpO2JvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTt0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3M7IH1uYXYgYTpob3ZlciwgbmF2IGE6Zm9jdXMsIG5hdiBhOnZpc2l0ZWQ6aG92ZXIsIG5hdiBhOnZpc2l0ZWQ6Zm9jdXMge3RleHQtZGVjb3JhdGlvbjogbm9uZTtiYWNrZ3JvdW5kOiB2YXIoLS1uYXYtaG92ZXItYmFjay1jb2xvcik7IH1uYXYgLnN1YmxpbmstMSB7cG9zaXRpb246IHJlbGF0aXZlO21hcmdpbi1sZWZ0OiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOyB9bmF2IC5zdWJsaW5rLTE6YmVmb3JlIHtwb3NpdGlvbjogYWJzb2x1dGU7bGVmdDogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLSAxICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTt0b3A6IC0wLjA3MTQyODU3MTRyZW07Y29udGVudDogJyc7aGVpZ2h0OiAxMDAlO2JvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLW5hdi1ib3JkZXItY29sb3IpO2JvcmRlci1sZWZ0OiAwOyB9bmF2IC5zdWJsaW5rLTIge3Bvc2l0aW9uOiByZWxhdGl2ZTttYXJnaW4tbGVmdDogY2FsYyg0ICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsgfW5hdiAuc3VibGluay0yOmJlZm9yZSB7cG9zaXRpb246IGFic29sdXRlO2xlZnQ6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC0gMyAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7dG9wOiAtMC4wNzE0Mjg1NzE0cmVtO2NvbnRlbnQ6ICcnO2hlaWdodDogMTAwJTtib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1uYXYtYm9yZGVyLWNvbG9yKTtib3JkZXItbGVmdDogMDsgfWZvb3RlciB7YmFja2dyb3VuZDogdmFyKC0tZm9vdGVyLWJhY2stY29sb3IpO2NvbG9yOiB2YXIoLS1mb290ZXItZm9yZS1jb2xvcik7Ym9yZGVyLXRvcDogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWZvb3Rlci1ib3JkZXItY29sb3IpO3BhZGRpbmc6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSkgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpO2ZvbnQtc2l6ZTogMC44NzVyZW07IH1mb290ZXIgYSwgZm9vdGVyIGE6dmlzaXRlZCB7Y29sb3I6IHZhcigtLWZvb3Rlci1saW5rLWNvbG9yKTsgfWhlYWRlci5zdGlja3kge3Bvc2l0aW9uOiAtd2Via2l0LXN0aWNreTtwb3NpdGlvbjogc3RpY2t5O3otaW5kZXg6IDExMDE7dG9wOiAwOyB9Zm9vdGVyLnN0aWNreSB7cG9zaXRpb246IC13ZWJraXQtc3RpY2t5O3Bvc2l0aW9uOiBzdGlja3k7ei1pbmRleDogMTEwMTtib3R0b206IDA7IH0uZHJhd2VyLXRvZ2dsZTpiZWZvcmUge2Rpc3BsYXk6IGlubGluZS1ibG9jaztwb3NpdGlvbjogcmVsYXRpdmU7dmVydGljYWwtYWxpZ246IGJvdHRvbTtjb250ZW50OiAnXDAwYTBcMjI2MVwwMGEwJztmb250LWZhbWlseTogc2Fucy1zZXJpZjtmb250LXNpemU6IDEuNWVtOyB9QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTAwcHgpIHsuZHJhd2VyLXRvZ2dsZTpub3QoLnBlcnNpc3RlbnQpIHtkaXNwbGF5OiBub25lOyB9IH1bdHlwZT0iY2hlY2tib3giXS5kcmF3ZXIge2hlaWdodDogMXB4O3dpZHRoOiAxcHg7bWFyZ2luOiAtMXB4O292ZXJmbG93OiBoaWRkZW47cG9zaXRpb246IGFic29sdXRlO2NsaXA6IHJlY3QoMCAwIDAgMCk7LXdlYmtpdC1jbGlwLXBhdGg6IGluc2V0KDEwMCUpO2NsaXAtcGF0aDogaW5zZXQoMTAwJSk7IH1bdHlwZT0iY2hlY2tib3giXS5kcmF3ZXIgKyAqIHtkaXNwbGF5OiBibG9jaztib3gtc2l6aW5nOiBib3JkZXItYm94O3Bvc2l0aW9uOiBmaXhlZDt0b3A6IDA7d2lkdGg6IDMyMHB4O2hlaWdodDogMTAwdmg7b3ZlcmZsb3cteTogYXV0bztiYWNrZ3JvdW5kOiB2YXIoLS1kcmF3ZXItYmFjay1jb2xvcik7Ym9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tZHJhd2VyLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czogMDttYXJnaW46IDA7ei1pbmRleDogMTExMDtyaWdodDogLTMyMHB4O3RyYW5zaXRpb246IHJpZ2h0IDAuM3M7IH1bdHlwZT0iY2hlY2tib3giXS5kcmF3ZXIgKyAqIC5kcmF3ZXItY2xvc2Uge3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pO3JpZ2h0OiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTt6LWluZGV4OiAxMTExO3dpZHRoOiAycmVtO2hlaWdodDogMnJlbTtib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpO21hcmdpbjogMDtjdXJzb3I6IHBvaW50ZXI7dHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjNzOyB9W3R5cGU9ImNoZWNrYm94Il0uZHJhd2VyICsgKiAuZHJhd2VyLWNsb3NlOmJlZm9yZSB7ZGlzcGxheTogYmxvY2s7Y29udGVudDogJ1wwMEQ3Jztjb2xvcjogdmFyKC0tZHJhd2VyLWNsb3NlLWNvbG9yKTtwb3NpdGlvbjogcmVsYXRpdmU7Zm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Zm9udC1zaXplOiAycmVtO2xpbmUtaGVpZ2h0OiAxO3RleHQtYWxpZ246IGNlbnRlcjsgfVt0eXBlPSJjaGVja2JveCJdLmRyYXdlciArICogLmRyYXdlci1jbG9zZTpob3ZlciwgW3R5cGU9ImNoZWNrYm94Il0uZHJhd2VyICsgKiAuZHJhd2VyLWNsb3NlOmZvY3VzIHtiYWNrZ3JvdW5kOiB2YXIoLS1kcmF3ZXItaG92ZXItYmFjay1jb2xvcik7IH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzMjBweCkge1t0eXBlPSJjaGVja2JveCJdLmRyYXdlciArICoge3dpZHRoOiAxMDAlOyB9IH1bdHlwZT0iY2hlY2tib3giXS5kcmF3ZXI6Y2hlY2tlZCArICoge3JpZ2h0OiAwOyB9QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTAwcHgpIHtbdHlwZT0iY2hlY2tib3giXS5kcmF3ZXI6bm90KC5wZXJzaXN0ZW50KSArICoge3Bvc2l0aW9uOiBzdGF0aWM7aGVpZ2h0OiAxMDAlO3otaW5kZXg6IDExMDA7IH1bdHlwZT0iY2hlY2tib3giXS5kcmF3ZXI6bm90KC5wZXJzaXN0ZW50KSArICogLmRyYXdlci1jbG9zZSB7ZGlzcGxheTogbm9uZTsgfSB9OnJvb3Qgey0tdGFibGUtYm9yZGVyLWNvbG9yOiAjMDMyMzRiOy0tdGFibGUtYm9yZGVyLXNlcGFyYXRvci1jb2xvcjogIzAzMjM0YjstLXRhYmxlLWhlYWQtYmFjay1jb2xvcjogIzAzMjM0YjstLXRhYmxlLWhlYWQtZm9yZS1jb2xvcjogI2ZmZmZmZjstLXRhYmxlLWJvZHktYmFjay1jb2xvcjogI2ZmZmZmZjstLXRhYmxlLWJvZHktZm9yZS1jb2xvcjogIzAzMjM0YjstLXRhYmxlLWJvZHktYWx0LWJhY2stY29sb3I6ICNmNGY0ZjQ7IH10YWJsZSB7Ym9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtib3JkZXItc3BhY2luZzogMDttYXJnaW46IDA7ZGlzcGxheTogZmxleDtmbGV4OiAwIDEgYXV0bztmbGV4LWZsb3c6IHJvdyB3cmFwO3BhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTtwYWRkaW5nLXRvcDogMDsgfXRhYmxlIGNhcHRpb24ge2ZvbnQtc2l6ZTogMXJlbTttYXJnaW46IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKSAwO21heC13aWR0aDogMTAwJTtmbGV4OiAwIDAgMTAwJTsgfXRhYmxlIHRoZWFkLCB0YWJsZSB0Ym9keSB7ZGlzcGxheTogZmxleDtmbGV4LWZsb3c6IHJvdyB3cmFwO2JvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7IH10YWJsZSB0aGVhZCB7ei1pbmRleDogOTk5O2JvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgMCAwO2JvcmRlci1ib3R0b206IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItc2VwYXJhdG9yLWNvbG9yKTsgfXRhYmxlIHRib2R5IHtib3JkZXItdG9wOiAwO21hcmdpbi10b3A6IGNhbGMoMCAtIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTtib3JkZXItcmFkaXVzOiAwIDAgdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsgfXRhYmxlIHRyIHtkaXNwbGF5OiBmbGV4O3BhZGRpbmc6IDA7IH10YWJsZSB0aCwgdGFibGUgdGQge3BhZGRpbmc6IGNhbGMoMC41ICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTtmb250LXNpemU6IDAuOXJlbTsgfXRhYmxlIHRoIHt0ZXh0LWFsaWduOiBsZWZ0O2JhY2tncm91bmQ6IHZhcigtLXRhYmxlLWhlYWQtYmFjay1jb2xvcik7Y29sb3I6IHZhcigtLXRhYmxlLWhlYWQtZm9yZS1jb2xvcik7IH10YWJsZSB0ZCB7YmFja2dyb3VuZDogdmFyKC0tdGFibGUtYm9keS1iYWNrLWNvbG9yKTtjb2xvcjogdmFyKC0tdGFibGUtYm9keS1mb3JlLWNvbG9yKTtib3JkZXItdG9wOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsgfXRhYmxlOm5vdCguaG9yaXpvbnRhbCkge292ZXJmbG93OiBhdXRvO21heC1oZWlnaHQ6IDEwMCU7IH10YWJsZTpub3QoLmhvcml6b250YWwpIHRoZWFkLCB0YWJsZTpub3QoLmhvcml6b250YWwpIHRib2R5IHttYXgtd2lkdGg6IDEwMCU7ZmxleDogMCAwIDEwMCU7IH10YWJsZTpub3QoLmhvcml6b250YWwpIHRyIHtmbGV4LWZsb3c6IHJvdyB3cmFwO2ZsZXg6IDAgMCAxMDAlOyB9dGFibGU6bm90KC5ob3Jpem9udGFsKSB0aCwgdGFibGU6bm90KC5ob3Jpem9udGFsKSB0ZCB7ZmxleDogMSAwIDAlO292ZXJmbG93OiBoaWRkZW47dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IH10YWJsZTpub3QoLmhvcml6b250YWwpIHRoZWFkIHtwb3NpdGlvbjogc3RpY2t5O3RvcDogMDsgfXRhYmxlOm5vdCguaG9yaXpvbnRhbCkgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQge2JvcmRlci10b3A6IDA7IH10YWJsZS5ob3Jpem9udGFsIHtib3JkZXI6IDA7IH10YWJsZS5ob3Jpem9udGFsIHRoZWFkLCB0YWJsZS5ob3Jpem9udGFsIHRib2R5IHtib3JkZXI6IDA7ZmxleDogLjIgMCAwO2ZsZXgtZmxvdzogcm93IG5vd3JhcDsgfXRhYmxlLmhvcml6b250YWwgdGJvZHkge292ZXJmbG93OiBhdXRvO2p1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtmbGV4OiAuOCAwIDA7bWFyZ2luLWxlZnQ6IDA7cGFkZGluZy1ib3R0b206IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gNCk7IH10YWJsZS5ob3Jpem9udGFsIHRyIHtmbGV4LWRpcmVjdGlvbjogY29sdW1uO2ZsZXg6IDEgMCBhdXRvOyB9dGFibGUuaG9yaXpvbnRhbCB0aCwgdGFibGUuaG9yaXpvbnRhbCB0ZCB7d2lkdGg6IGF1dG87Ym9yZGVyOiAwO2JvcmRlci1ib3R0b206IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9dGFibGUuaG9yaXpvbnRhbCB0aDpub3QoOmZpcnN0LWNoaWxkKSwgdGFibGUuaG9yaXpvbnRhbCB0ZDpub3QoOmZpcnN0LWNoaWxkKSB7Ym9yZGVyLXRvcDogMDsgfXRhYmxlLmhvcml6b250YWwgdGgge3RleHQtYWxpZ246IHJpZ2h0O2JvcmRlci1sZWZ0OiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTtib3JkZXItcmlnaHQ6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItc2VwYXJhdG9yLWNvbG9yKTsgfXRhYmxlLmhvcml6b250YWwgdGhlYWQgdHI6Zmlyc3QtY2hpbGQge3BhZGRpbmctbGVmdDogMDsgfXRhYmxlLmhvcml6b250YWwgdGg6Zmlyc3QtY2hpbGQsIHRhYmxlLmhvcml6b250YWwgdGQ6Zmlyc3QtY2hpbGQge2JvcmRlci10b3A6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9dGFibGUuaG9yaXpvbnRhbCB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkIHtib3JkZXItcmlnaHQ6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9dGFibGUuaG9yaXpvbnRhbCB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkIHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTsgfXRhYmxlLmhvcml6b250YWwgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkIHtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTsgfXRhYmxlLmhvcml6b250YWwgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQge2JvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07IH10YWJsZS5ob3Jpem9udGFsIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQge2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07IH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0OTlweCkge3RhYmxlLCB0YWJsZS5ob3Jpem9udGFsIHtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlcjogMDt3aWR0aDogMTAwJTtkaXNwbGF5OiB0YWJsZTsgfXRhYmxlIHRoZWFkLCB0YWJsZSB0aCwgdGFibGUuaG9yaXpvbnRhbCB0aGVhZCwgdGFibGUuaG9yaXpvbnRhbCB0aCB7Ym9yZGVyOiAwO2hlaWdodDogMXB4O3dpZHRoOiAxcHg7bWFyZ2luOiAtMXB4O292ZXJmbG93OiBoaWRkZW47cGFkZGluZzogMDtwb3NpdGlvbjogYWJzb2x1dGU7Y2xpcDogcmVjdCgwIDAgMCAwKTstd2Via2l0LWNsaXAtcGF0aDogaW5zZXQoMTAwJSk7Y2xpcC1wYXRoOiBpbnNldCgxMDAlKTsgfXRhYmxlIHRib2R5LCB0YWJsZS5ob3Jpem9udGFsIHRib2R5IHtib3JkZXI6IDA7ZGlzcGxheTogdGFibGUtcm93LWdyb3VwOyB9dGFibGUgdHIsIHRhYmxlLmhvcml6b250YWwgdHIge2Rpc3BsYXk6IGJsb2NrO2JvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpO2JhY2tncm91bmQ6ICNmZmZmZmY7cGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpO21hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7bWFyZ2luLWJvdHRvbTogY2FsYygxICogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpOyB9dGFibGUgdGgsIHRhYmxlIHRkLCB0YWJsZS5ob3Jpem9udGFsIHRoLCB0YWJsZS5ob3Jpem9udGFsIHRkIHt3aWR0aDogYXV0bzsgfXRhYmxlIHRkLCB0YWJsZS5ob3Jpem9udGFsIHRkIHtkaXNwbGF5OiBibG9jaztib3JkZXI6IDA7dGV4dC1hbGlnbjogcmlnaHQ7IH10YWJsZSB0ZDpiZWZvcmUsIHRhYmxlLmhvcml6b250YWwgdGQ6YmVmb3JlIHtjb250ZW50OiBhdHRyKGRhdGEtbGFiZWwpO2Zsb2F0OiBsZWZ0O2ZvbnQtd2VpZ2h0OiA2MDA7IH10YWJsZSB0aDpmaXJzdC1jaGlsZCwgdGFibGUgdGQ6Zmlyc3QtY2hpbGQsIHRhYmxlLmhvcml6b250YWwgdGg6Zmlyc3QtY2hpbGQsIHRhYmxlLmhvcml6b250YWwgdGQ6Zmlyc3QtY2hpbGQge2JvcmRlci10b3A6IDA7IH10YWJsZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkLCB0YWJsZS5ob3Jpem9udGFsIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQge2JvcmRlci1yaWdodDogMDsgfSB9dGFibGUgdHI6bnRoLW9mLXR5cGUoMm4pID4gdGQge2JhY2tncm91bmQ6IHZhcigtLXRhYmxlLWJvZHktYWx0LWJhY2stY29sb3IpOyB9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTAwcHgpIHt0YWJsZSB0cjpudGgtb2YtdHlwZSgybikge2JhY2tncm91bmQ6IHZhcigtLXRhYmxlLWJvZHktYWx0LWJhY2stY29sb3IpOyB9IH06cm9vdCB7LS10YWJsZS1ib2R5LWhvdmVyLWJhY2stY29sb3I6ICM5MGNhZjk7IH10YWJsZS5ob3ZlcmFibGUgdHI6aG92ZXIsIHRhYmxlLmhvdmVyYWJsZSB0cjpob3ZlciA+IHRkLCB0YWJsZS5ob3ZlcmFibGUgdHI6Zm9jdXMsIHRhYmxlLmhvdmVyYWJsZSB0cjpmb2N1cyA+IHRkIHtiYWNrZ3JvdW5kOiB2YXIoLS10YWJsZS1ib2R5LWhvdmVyLWJhY2stY29sb3IpOyB9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTAwcHgpIHt0YWJsZS5ob3ZlcmFibGUgdHI6aG92ZXIsIHRhYmxlLmhvdmVyYWJsZSB0cjpob3ZlciA+IHRkLCB0YWJsZS5ob3ZlcmFibGUgdHI6Zm9jdXMsIHRhYmxlLmhvdmVyYWJsZSB0cjpmb2N1cyA+IHRkIHtiYWNrZ3JvdW5kOiB2YXIoLS10YWJsZS1ib2R5LWhvdmVyLWJhY2stY29sb3IpOyB9IH06cm9vdCB7LS1tYXJrLWJhY2stY29sb3I6ICMzY2I0ZTY7LS1tYXJrLWZvcmUtY29sb3I6ICNmZmZmZmY7IH1tYXJrIHtiYWNrZ3JvdW5kOiB2YXIoLS1tYXJrLWJhY2stY29sb3IpO2NvbG9yOiB2YXIoLS1tYXJrLWZvcmUtY29sb3IpO2ZvbnQtc2l6ZTogMC45NWVtO2xpbmUtaGVpZ2h0OiAxZW07Ym9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gNCkgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOyB9bWFyay5pbmxpbmUtYmxvY2sge2Rpc3BsYXk6IGlubGluZS1ibG9jaztmb250LXNpemU6IDFlbTtsaW5lLWhlaWdodDogMS40O3BhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMikgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOyB9OnJvb3Qgey0tdG9hc3QtYmFjay1jb2xvcjogIzQyNDI0MjstLXRvYXN0LWZvcmUtY29sb3I6ICNmYWZhZmE7IH0udG9hc3Qge3Bvc2l0aW9uOiBmaXhlZDtib3R0b206IGNhbGModmFyKC0tdW5pdmVyc2FsLW1hcmdpbikgKiAzKTtsZWZ0OiA1MCU7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7ei1pbmRleDogMTExMTtjb2xvcjogdmFyKC0tdG9hc3QtZm9yZS1jb2xvcik7YmFja2dyb3VuZDogdmFyKC0tdG9hc3QtYmFjay1jb2xvcik7Ym9yZGVyLXJhZGl1czogY2FsYyh2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgKiAxNik7cGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpICogMyk7IH06cm9vdCB7LS10b29sdGlwLWJhY2stY29sb3I6ICMyMTIxMjE7LS10b29sdGlwLWZvcmUtY29sb3I6ICNmYWZhZmE7IH0udG9vbHRpcCB7cG9zaXRpb246IHJlbGF0aXZlO2Rpc3BsYXk6IGlubGluZS1ibG9jazsgfS50b29sdGlwOmJlZm9yZSwgLnRvb2x0aXA6YWZ0ZXIge3Bvc2l0aW9uOiBhYnNvbHV0ZTtvcGFjaXR5OiAwO2NsaXA6IHJlY3QoMCAwIDAgMCk7LXdlYmtpdC1jbGlwLXBhdGg6IGluc2V0KDEwMCUpO2NsaXAtcGF0aDogaW5zZXQoMTAwJSk7dHJhbnNpdGlvbjogYWxsIDAuM3M7ei1pbmRleDogMTAxMDtsZWZ0OiA1MCU7IH0udG9vbHRpcDpub3QoLmJvdHRvbSk6YmVmb3JlLCAudG9vbHRpcDpub3QoLmJvdHRvbSk6YWZ0ZXIge2JvdHRvbTogNzUlOyB9LnRvb2x0aXAuYm90dG9tOmJlZm9yZSwgLnRvb2x0aXAuYm90dG9tOmFmdGVyIHt0b3A6IDc1JTsgfS50b29sdGlwOmhvdmVyOmJlZm9yZSwgLnRvb2x0aXA6aG92ZXI6YWZ0ZXIsIC50b29sdGlwOmZvY3VzOmJlZm9yZSwgLnRvb2x0aXA6Zm9jdXM6YWZ0ZXIge29wYWNpdHk6IDE7Y2xpcDogYXV0bzstd2Via2l0LWNsaXAtcGF0aDogaW5zZXQoMCUpO2NsaXAtcGF0aDogaW5zZXQoMCUpOyB9LnRvb2x0aXA6YmVmb3JlIHtjb250ZW50OiAnJztiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtib3JkZXI6IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pIHNvbGlkIHRyYW5zcGFyZW50O2xlZnQ6IGNhbGMoNTAlIC0gdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpOyB9LnRvb2x0aXA6bm90KC5ib3R0b20pOmJlZm9yZSB7Ym9yZGVyLXRvcC1jb2xvcjogIzIxMjEyMTsgfS50b29sdGlwLmJvdHRvbTpiZWZvcmUge2JvcmRlci1ib3R0b20tY29sb3I6ICMyMTIxMjE7IH0udG9vbHRpcDphZnRlciB7Y29udGVudDogYXR0cihhcmlhLWxhYmVsKTtjb2xvcjogdmFyKC0tdG9vbHRpcC1mb3JlLWNvbG9yKTtiYWNrZ3JvdW5kOiB2YXIoLS10b29sdGlwLWJhY2stY29sb3IpO2JvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZyk7d2hpdGUtc3BhY2U6IG5vd3JhcDt0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7IH0udG9vbHRpcDpub3QoLmJvdHRvbSk6YWZ0ZXIge21hcmdpbi1ib3R0b206IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsgfS50b29sdGlwLmJvdHRvbTphZnRlciB7bWFyZ2luLXRvcDogY2FsYygyICogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpOyB9OnJvb3Qgey0tbW9kYWwtb3ZlcmxheS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQ1KTstLW1vZGFsLWNsb3NlLWNvbG9yOiAjZTYwMDdlOy0tbW9kYWwtY2xvc2UtaG92ZXItY29sb3I6ICNmZmU5N2Y7IH1bdHlwZT0iY2hlY2tib3giXS5tb2RhbCB7aGVpZ2h0OiAxcHg7d2lkdGg6IDFweDttYXJnaW46IC0xcHg7b3ZlcmZsb3c6IGhpZGRlbjtwb3NpdGlvbjogYWJzb2x1dGU7Y2xpcDogcmVjdCgwIDAgMCAwKTstd2Via2l0LWNsaXAtcGF0aDogaW5zZXQoMTAwJSk7Y2xpcC1wYXRoOiBpbnNldCgxMDAlKTsgfVt0eXBlPSJjaGVja2JveCJdLm1vZGFsICsgZGl2IHtwb3NpdGlvbjogZml4ZWQ7dG9wOiAwO2xlZnQ6IDA7ZGlzcGxheTogbm9uZTt3aWR0aDogMTAwdnc7aGVpZ2h0OiAxMDB2aDtiYWNrZ3JvdW5kOiB2YXIoLS1tb2RhbC1vdmVybGF5LWNvbG9yKTsgfVt0eXBlPSJjaGVja2JveCJdLm1vZGFsICsgZGl2IC5jYXJkIHttYXJnaW46IDAgYXV0bzttYXgtaGVpZ2h0OiA1MHZoO292ZXJmbG93OiBhdXRvOyB9W3R5cGU9ImNoZWNrYm94Il0ubW9kYWwgKyBkaXYgLmNhcmQgLm1vZGFsLWNsb3NlIHtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiAwO3JpZ2h0OiAwO3dpZHRoOiAxLjc1cmVtO2hlaWdodDogMS43NXJlbTtib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpO21hcmdpbjogMDtjdXJzb3I6IHBvaW50ZXI7dHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjNzOyB9W3R5cGU9ImNoZWNrYm94Il0ubW9kYWwgKyBkaXYgLmNhcmQgLm1vZGFsLWNsb3NlOmJlZm9yZSB7ZGlzcGxheTogYmxvY2s7Y29udGVudDogJ1wwMEQ3Jztjb2xvcjogdmFyKC0tbW9kYWwtY2xvc2UtY29sb3IpO3Bvc2l0aW9uOiByZWxhdGl2ZTtmb250LWZhbWlseTogc2Fucy1zZXJpZjtmb250LXNpemU6IDEuNzVyZW07bGluZS1oZWlnaHQ6IDE7dGV4dC1hbGlnbjogY2VudGVyOyB9W3R5cGU9ImNoZWNrYm94Il0ubW9kYWwgKyBkaXYgLmNhcmQgLm1vZGFsLWNsb3NlOmhvdmVyLCBbdHlwZT0iY2hlY2tib3giXS5tb2RhbCArIGRpdiAuY2FyZCAubW9kYWwtY2xvc2U6Zm9jdXMge2JhY2tncm91bmQ6IHZhcigtLW1vZGFsLWNsb3NlLWhvdmVyLWNvbG9yKTsgfVt0eXBlPSJjaGVja2JveCJdLm1vZGFsOmNoZWNrZWQgKyBkaXYge2Rpc3BsYXk6IGZsZXg7ZmxleDogMCAxIGF1dG87ei1pbmRleDogMTIwMDsgfVt0eXBlPSJjaGVja2JveCJdLm1vZGFsOmNoZWNrZWQgKyBkaXYgLmNhcmQgLm1vZGFsLWNsb3NlIHt6LWluZGV4OiAxMjExOyB9OnJvb3Qgey0tY29sbGFwc2UtbGFiZWwtYmFjay1jb2xvcjogIzAzMjM0YjstLWNvbGxhcHNlLWxhYmVsLWZvcmUtY29sb3I6ICNmZmZmZmY7LS1jb2xsYXBzZS1sYWJlbC1ob3Zlci1iYWNrLWNvbG9yOiAjM2NiNGU2Oy0tY29sbGFwc2Utc2VsZWN0ZWQtbGFiZWwtYmFjay1jb2xvcjogIzNjYjRlNjstLWNvbGxhcHNlLWJvcmRlci1jb2xvcjogdmFyKC0tY29sbGFwc2UtbGFiZWwtYmFjay1jb2xvcik7LS1jb2xsYXBzZS1zZWxlY3RlZC1ib3JkZXItY29sb3I6ICNjZWVjZjg7LS1jb2xsYXBzZS1jb250ZW50LWJhY2stY29sb3I6ICNmZmZmZmY7LS1jb2xsYXBzZS1zZWxlY3RlZC1sYWJlbC1ib3JkZXItY29sb3I6ICMzY2I0ZTY7IH0uY29sbGFwc2Uge3dpZHRoOiBjYWxjKDEwMCUgLSAyICogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpO29wYWNpdHk6IDE7ZGlzcGxheTogZmxleDtmbGV4LWRpcmVjdGlvbjogY29sdW1uO21hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7Ym9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpOyB9LmNvbGxhcHNlID4gW3R5cGU9InJhZGlvIl0sIC5jb2xsYXBzZSA+IFt0eXBlPSJjaGVja2JveCJdIHtoZWlnaHQ6IDFweDt3aWR0aDogMXB4O21hcmdpbjogLTFweDtvdmVyZmxvdzogaGlkZGVuO3Bvc2l0aW9uOiBhYnNvbHV0ZTtjbGlwOiByZWN0KDAgMCAwIDApOy13ZWJraXQtY2xpcC1wYXRoOiBpbnNldCgxMDAlKTtjbGlwLXBhdGg6IGluc2V0KDEwMCUpOyB9LmNvbGxhcHNlID4gbGFiZWwge2ZsZXgtZ3JvdzogMTtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7aGVpZ2h0OiAxLjI1cmVtO2N1cnNvcjogcG9pbnRlcjt0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7Y29sb3I6IHZhcigtLWNvbGxhcHNlLWxhYmVsLWZvcmUtY29sb3IpO2JhY2tncm91bmQ6IHZhcigtLWNvbGxhcHNlLWxhYmVsLWJhY2stY29sb3IpO2JvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWNvbGxhcHNlLXNlbGVjdGVkLWJvcmRlci1jb2xvcik7cGFkZGluZzogY2FsYygxLjI1ICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsgfS5jb2xsYXBzZSA+IGxhYmVsOmhvdmVyLCAuY29sbGFwc2UgPiBsYWJlbDpmb2N1cyB7YmFja2dyb3VuZDogdmFyKC0tY29sbGFwc2UtbGFiZWwtaG92ZXItYmFjay1jb2xvcik7IH0uY29sbGFwc2UgPiBsYWJlbCArIGRpdiB7ZmxleC1iYXNpczogYXV0bztoZWlnaHQ6IDFweDt3aWR0aDogMXB4O21hcmdpbjogLTFweDtvdmVyZmxvdzogaGlkZGVuO3Bvc2l0aW9uOiBhYnNvbHV0ZTtjbGlwOiByZWN0KDAgMCAwIDApOy13ZWJraXQtY2xpcC1wYXRoOiBpbnNldCgxMDAlKTtjbGlwLXBhdGg6IGluc2V0KDEwMCUpO3RyYW5zaXRpb246IG1heC1oZWlnaHQgMC4zczttYXgtaGVpZ2h0OiAxcHg7IH0uY29sbGFwc2UgPiA6Y2hlY2tlZCArIGxhYmVsIHtiYWNrZ3JvdW5kOiB2YXIoLS1jb2xsYXBzZS1zZWxlY3RlZC1sYWJlbC1iYWNrLWNvbG9yKTtib3JkZXItY29sb3I6IHZhcigtLWNvbGxhcHNlLXNlbGVjdGVkLWxhYmVsLWJvcmRlci1jb2xvcik7IH0uY29sbGFwc2UgPiA6Y2hlY2tlZCArIGxhYmVsICsgZGl2IHtib3gtc2l6aW5nOiBib3JkZXItYm94O3Bvc2l0aW9uOiByZWxhdGl2ZTt3aWR0aDogMTAwJTtoZWlnaHQ6IGF1dG87b3ZlcmZsb3c6IGF1dG87bWFyZ2luOiAwO2JhY2tncm91bmQ6IHZhcigtLWNvbGxhcHNlLWNvbnRlbnQtYmFjay1jb2xvcik7Ym9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tY29sbGFwc2Utc2VsZWN0ZWQtYm9yZGVyLWNvbG9yKTtib3JkZXItdG9wOiAwO3BhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTtjbGlwOiBhdXRvOy13ZWJraXQtY2xpcC1wYXRoOiBpbnNldCgwJSk7Y2xpcC1wYXRoOiBpbnNldCgwJSk7bWF4LWhlaWdodDogMTAwJTsgfS5jb2xsYXBzZSA+IGxhYmVsOm5vdCg6Zmlyc3Qtb2YtdHlwZSkge2JvcmRlci10b3A6IDA7IH0uY29sbGFwc2UgPiBsYWJlbDpmaXJzdC1vZi10eXBlIHtib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIDAgMDsgfS5jb2xsYXBzZSA+IGxhYmVsOmxhc3Qtb2YtdHlwZTpub3QoOmZpcnN0LW9mLXR5cGUpIHtib3JkZXItcmFkaXVzOiAwIDAgdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsgfS5jb2xsYXBzZSA+IGxhYmVsOmxhc3Qtb2YtdHlwZTpmaXJzdC1vZi10eXBlIHtib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7IH0uY29sbGFwc2UgPiA6Y2hlY2tlZDpsYXN0LW9mLXR5cGU6bm90KDpmaXJzdC1vZi10eXBlKSArIGxhYmVsIHtib3JkZXItcmFkaXVzOiAwOyB9LmNvbGxhcHNlID4gOmNoZWNrZWQ6bGFzdC1vZi10eXBlICsgbGFiZWwgKyBkaXYge2JvcmRlci1yYWRpdXM6IDAgMCB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpOyB9bWFyay50ZXJ0aWFyeSB7LS1tYXJrLWJhY2stY29sb3I6ICMzY2I0ZTY7IH1tYXJrLnRhZyB7cGFkZGluZzogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykvMikgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpO2JvcmRlci1yYWRpdXM6IDFlbTsgfTpyb290IHstLXByb2dyZXNzLWJhY2stY29sb3I6ICMzY2I0ZTY7LS1wcm9ncmVzcy1mb3JlLWNvbG9yOiAjNTU1OyB9cHJvZ3Jlc3Mge2Rpc3BsYXk6IGJsb2NrO3ZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTstd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7LW1vei1hcHBlYXJhbmNlOiBub25lO2FwcGVhcmFuY2U6IG5vbmU7aGVpZ2h0OiAwLjc1cmVtO3dpZHRoOiBjYWxjKDEwMCUgLSAyICogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpO21hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7Ym9yZGVyOiAwO2JvcmRlci1yYWRpdXM6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSk7YmFja2dyb3VuZDogdmFyKC0tcHJvZ3Jlc3MtYmFjay1jb2xvcik7Y29sb3I6IHZhcigtLXByb2dyZXNzLWZvcmUtY29sb3IpOyB9cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWUge2JhY2tncm91bmQ6IHZhcigtLXByb2dyZXNzLWZvcmUtY29sb3IpO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogY2FsYygyICogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpKTsgfXByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLWJhciB7YmFja2dyb3VuZDogdmFyKC0tcHJvZ3Jlc3MtYmFjay1jb2xvcik7IH1wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXIge2JhY2tncm91bmQ6IHZhcigtLXByb2dyZXNzLWZvcmUtY29sb3IpO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogY2FsYygyICogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpKTsgfXByb2dyZXNzW3ZhbHVlPSIxMDAwIl06Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWUge2JvcmRlci1yYWRpdXM6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSk7IH1wcm9ncmVzc1t2YWx1ZT0iMTAwMCJdOjotbW96LXByb2dyZXNzLWJhciB7Ym9yZGVyLXJhZGl1czogY2FsYygyICogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpKTsgfXByb2dyZXNzLmlubGluZSB7ZGlzcGxheTogaW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7d2lkdGg6IDYwJTsgfTpyb290IHstLXNwaW5uZXItYmFjay1jb2xvcjogI2RkZDstLXNwaW5uZXItZm9yZS1jb2xvcjogIzU1NTsgfUBrZXlmcmFtZXMgc3Bpbm5lci1kb251dC1hbmltIHswJSB7dHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH0xMDAlIHt0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9IH0uc3Bpbm5lciB7ZGlzcGxheTogaW5saW5lLWJsb2NrO21hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7Ym9yZGVyOiAwLjI1cmVtIHNvbGlkIHZhcigtLXNwaW5uZXItYmFjay1jb2xvcik7Ym9yZGVyLWxlZnQ6IDAuMjVyZW0gc29saWQgdmFyKC0tc3Bpbm5lci1mb3JlLWNvbG9yKTtib3JkZXItcmFkaXVzOiA1MCU7d2lkdGg6IDEuMjVyZW07aGVpZ2h0OiAxLjI1cmVtO2FuaW1hdGlvbjogc3Bpbm5lci1kb251dC1hbmltIDEuMnMgbGluZWFyIGluZmluaXRlOyB9cHJvZ3Jlc3MucHJpbWFyeSB7LS1wcm9ncmVzcy1mb3JlLWNvbG9yOiAjMTk3NmQyOyB9cHJvZ3Jlc3Muc2Vjb25kYXJ5IHstLXByb2dyZXNzLWZvcmUtY29sb3I6ICNkMzJmMmY7IH1wcm9ncmVzcy50ZXJ0aWFyeSB7LS1wcm9ncmVzcy1mb3JlLWNvbG9yOiAjMzA4NzMyOyB9LnNwaW5uZXIucHJpbWFyeSB7LS1zcGlubmVyLWZvcmUtY29sb3I6ICMxOTc2ZDI7IH0uc3Bpbm5lci5zZWNvbmRhcnkgey0tc3Bpbm5lci1mb3JlLWNvbG9yOiAjZDMyZjJmOyB9LnNwaW5uZXIudGVydGlhcnkgey0tc3Bpbm5lci1mb3JlLWNvbG9yOiAjMzA4NzMyOyB9c3BhbltjbGFzc149J2ljb24tJ10ge2Rpc3BsYXk6IGlubGluZS1ibG9jaztoZWlnaHQ6IDFlbTt3aWR0aDogMWVtO3ZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTtiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47bWFyZ2luOiAwIGNhbGModmFyKC0tdW5pdmVyc2FsLW1hcmdpbikgLyA0KTsgfXNwYW5bY2xhc3NePSdpY29uLSddLnNlY29uZGFyeSB7LXdlYmtpdC1maWx0ZXI6IGludmVydCgyNSUpO2ZpbHRlcjogaW52ZXJ0KDI1JSk7IH1zcGFuW2NsYXNzXj0naWNvbi0nXS5pbnZlcnNlIHstd2Via2l0LWZpbHRlcjogaW52ZXJ0KDEwMCUpO2ZpbHRlcjogaW52ZXJ0KDEwMCUpOyB9c3Bhbi5pY29uLWFsZXJ0IHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nMTAnJTNFJTNDL2NpcmNsZSUzRSUzQ2xpbmUgeDE9JzEyJyB5MT0nOCcgeDI9JzEyJyB5Mj0nMTInJTNFJTNDL2xpbmUlM0UlM0NsaW5lIHgxPScxMicgeTE9JzE2JyB4Mj0nMTInIHkyPScxNiclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfXNwYW4uaWNvbi1ib29rbWFyayB7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00xOSAyMWwtNy01LTcgNVY1YTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnonJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7IH1zcGFuLmljb24tY2FsZW5kYXIge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcmVjdCB4PSczJyB5PSc0JyB3aWR0aD0nMTgnIGhlaWdodD0nMTgnIHJ4PScyJyByeT0nMiclM0UlM0MvcmVjdCUzRSUzQ2xpbmUgeDE9JzE2JyB5MT0nMicgeDI9JzE2JyB5Mj0nNiclM0UlM0MvbGluZSUzRSUzQ2xpbmUgeDE9JzgnIHkxPScyJyB4Mj0nOCcgeTI9JzYnJTNFJTNDL2xpbmUlM0UlM0NsaW5lIHgxPSczJyB5MT0nMTAnIHgyPScyMScgeTI9JzEwJyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9c3Bhbi5pY29uLWNyZWRpdCB7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NyZWN0IHg9JzEnIHk9JzQnIHdpZHRoPScyMicgaGVpZ2h0PScxNicgcng9JzInIHJ5PScyJyUzRSUzQy9yZWN0JTNFJTNDbGluZSB4MT0nMScgeTE9JzEwJyB4Mj0nMjMnIHkyPScxMCclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfXNwYW4uaWNvbi1lZGl0IHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIwIDE0LjY2VjIwYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmg1LjM0JyUzRSUzQy9wYXRoJTNFJTNDcG9seWdvbiBwb2ludHM9JzE4IDIgMjIgNiAxMiAxNiA4IDE2IDggMTIgMTggMiclM0UlM0MvcG9seWdvbiUzRSUzQy9zdmclM0UiKTsgfXNwYW4uaWNvbi1saW5rIHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYnJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzE1IDMgMjEgMyAyMSA5JyUzRSUzQy9wb2x5bGluZSUzRSUzQ2xpbmUgeDE9JzEwJyB5MT0nMTQnIHgyPScyMScgeTI9JzMnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH1zcGFuLmljb24taGVscCB7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J005LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyclM0UlM0MvcGF0aCUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nMTAnJTNFJTNDL2NpcmNsZSUzRSUzQ2xpbmUgeDE9JzEyJyB5MT0nMTcnIHgyPScxMicgeTI9JzE3JyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9c3Bhbi5pY29uLWhvbWUge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMyA5bDktNyA5IDd2MTFhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6JyUzRSUzQy9wYXRoJTNFJTNDcG9seWxpbmUgcG9pbnRzPSc5IDIyIDkgMTIgMTUgMTIgMTUgMjInJTNFJTNDL3BvbHlsaW5lJTNFJTNDL3N2ZyUzRSIpOyB9c3Bhbi5pY29uLWluZm8ge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPScxMCclM0UlM0MvY2lyY2xlJTNFJTNDbGluZSB4MT0nMTInIHkxPScxNicgeDI9JzEyJyB5Mj0nMTInJTNFJTNDL2xpbmUlM0UlM0NsaW5lIHgxPScxMicgeTE9JzgnIHgyPScxMicgeTI9JzgnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH1zcGFuLmljb24tbG9jayB7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NyZWN0IHg9JzMnIHk9JzExJyB3aWR0aD0nMTgnIGhlaWdodD0nMTEnIHJ4PScyJyByeT0nMiclM0UlM0MvcmVjdCUzRSUzQ3BhdGggZD0nTTcgMTFWN2E1IDUgMCAwIDEgMTAgMHY0JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9c3Bhbi5pY29uLW1haWwge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNNCA0aDE2YzEuMSAwIDIgLjkgMiAydjEyYzAgMS4xLS45IDItMiAySDRjLTEuMSAwLTItLjktMi0yVjZjMC0xLjEuOS0yIDItMnonJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzIyLDYgMTIsMTMgMiw2JyUzRSUzQy9wb2x5bGluZSUzRSUzQy9zdmclM0UiKTsgfXNwYW4uaWNvbi1sb2NhdGlvbiB7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00yMSAxMGMwIDctOSAxMy05IDEzcy05LTYtOS0xM2E5IDkgMCAwIDEgMTggMHonJTNFJTNDL3BhdGglM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTAnIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQy9zdmclM0UiKTsgfXNwYW4uaWNvbi1waG9uZSB7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00yMiAxNi45MnYzYTIgMiAwIDAgMS0yLjE4IDIgMTkuNzkgMTkuNzkgMCAwIDEtOC42My0zLjA3IDE5LjUgMTkuNSAwIDAgMS02LTYgMTkuNzkgMTkuNzkgMCAwIDEtMy4wNy04LjY3QTIgMiAwIDAgMSA0LjExIDJoM2EyIDIgMCAwIDEgMiAxLjcyIDEyLjg0IDEyLjg0IDAgMCAwIC43IDIuODEgMiAyIDAgMCAxLS40NSAyLjExTDguMDkgOS45MWExNiAxNiAwIDAgMCA2IDZsMS4yNy0xLjI3YTIgMiAwIDAgMSAyLjExLS40NSAxMi44NCAxMi44NCAwIDAgMCAyLjgxLjdBMiAyIDAgMCAxIDIyIDE2LjkyeiclM0UlM0MvcGF0aCUzRSUzQy9zdmclM0UiKTsgfXNwYW4uaWNvbi1yc3Mge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNNCAxMWE5IDkgMCAwIDEgOSA5JyUzRSUzQy9wYXRoJTNFJTNDcGF0aCBkPSdNNCA0YTE2IDE2IDAgMCAxIDE2IDE2JyUzRSUzQy9wYXRoJTNFJTNDY2lyY2xlIGN4PSc1JyBjeT0nMTknIHI9JzEnJTNFJTNDL2NpcmNsZSUzRSUzQy9zdmclM0UiKTsgfXNwYW4uaWNvbi1zZWFyY2gge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PScxMScgY3k9JzExJyByPSc4JyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPScyMScgeTE9JzIxJyB4Mj0nMTYuNjUnIHkyPScxNi42NSclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfXNwYW4uaWNvbi1zZXR0aW5ncyB7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQ3BhdGggZD0nTTE5LjQgMTVhMS42NSAxLjY1IDAgMCAwIC4zMyAxLjgybC4wNi4wNmEyIDIgMCAwIDEgMCAyLjgzIDIgMiAwIDAgMS0yLjgzIDBsLS4wNi0uMDZhMS42NSAxLjY1IDAgMCAwLTEuODItLjMzIDEuNjUgMS42NSAwIDAgMC0xIDEuNTFWMjFhMiAyIDAgMCAxLTIgMiAyIDIgMCAwIDEtMi0ydi0uMDlBMS42NSAxLjY1IDAgMCAwIDkgMTkuNGExLjY1IDEuNjUgMCAwIDAtMS44Mi4zM2wtLjA2LjA2YTIgMiAwIDAgMS0yLjgzIDAgMiAyIDAgMCAxIDAtMi44M2wuMDYtLjA2YTEuNjUgMS42NSAwIDAgMCAuMzMtMS44MiAxLjY1IDEuNjUgMCAwIDAtMS41MS0xSDNhMiAyIDAgMCAxLTItMiAyIDIgMCAwIDEgMi0yaC4wOUExLjY1IDEuNjUgMCAwIDAgNC42IDlhMS42NSAxLjY1IDAgMCAwLS4zMy0xLjgybC0uMDYtLjA2YTIgMiAwIDAgMSAwLTIuODMgMiAyIDAgMCAxIDIuODMgMGwuMDYuMDZhMS42NSAxLjY1IDAgMCAwIDEuODIuMzNIOWExLjY1IDEuNjUgMCAwIDAgMS0xLjUxVjNhMiAyIDAgMCAxIDItMiAyIDIgMCAwIDEgMiAydi4wOWExLjY1IDEuNjUgMCAwIDAgMSAxLjUxIDEuNjUgMS42NSAwIDAgMCAxLjgyLS4zM2wuMDYtLjA2YTIgMiAwIDAgMSAyLjgzIDAgMiAyIDAgMCAxIDAgMi44M2wtLjA2LjA2YTEuNjUgMS42NSAwIDAgMC0uMzMgMS44MlY5YTEuNjUgMS42NSAwIDAgMCAxLjUxIDFIMjFhMiAyIDAgMCAxIDIgMiAyIDIgMCAwIDEtMiAyaC0uMDlhMS42NSAxLjY1IDAgMCAwLTEuNTEgMXonJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7IH1zcGFuLmljb24tc2hhcmUge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PScxOCcgY3k9JzUnIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQ2NpcmNsZSBjeD0nNicgY3k9JzEyJyByPSczJyUzRSUzQy9jaXJjbGUlM0UlM0NjaXJjbGUgY3g9JzE4JyBjeT0nMTknIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQ2xpbmUgeDE9JzguNTknIHkxPScxMy41MScgeDI9JzE1LjQyJyB5Mj0nMTcuNDknJTNFJTNDL2xpbmUlM0UlM0NsaW5lIHgxPScxNS40MScgeTE9JzYuNTEnIHgyPSc4LjU5JyB5Mj0nMTAuNDknJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH1zcGFuLmljb24tY2FydCB7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzknIGN5PScyMScgcj0nMSclM0UlM0MvY2lyY2xlJTNFJTNDY2lyY2xlIGN4PScyMCcgY3k9JzIxJyByPScxJyUzRSUzQy9jaXJjbGUlM0UlM0NwYXRoIGQ9J00xIDFoNGwyLjY4IDEzLjM5YTIgMiAwIDAgMCAyIDEuNjFoOS43MmEyIDIgMCAwIDAgMi0xLjYxTDIzIDZINiclM0UlM0MvcGF0aCUzRSUzQy9zdmclM0UiKTsgfXNwYW4uaWNvbi11cGxvYWQge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCclM0UlM0MvcGF0aCUzRSUzQ3BvbHlsaW5lIHBvaW50cz0nMTcgOCAxMiAzIDcgOCclM0UlM0MvcG9seWxpbmUlM0UlM0NsaW5lIHgxPScxMicgeTE9JzMnIHgyPScxMicgeTI9JzE1JyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9c3Bhbi5pY29uLXVzZXIge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMjAgMjF2LTJhNCA0IDAgMCAwLTQtNEg4YTQgNCAwIDAgMC00IDR2MiclM0UlM0MvcGF0aCUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PSc3JyByPSc0JyUzRSUzQy9jaXJjbGUlM0UlM0Mvc3ZnJTNFIik7IH06cm9vdCB7LS1nZW5lcmljLWJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjMpOy0tZ2VuZXJpYy1ib3gtc2hhZG93OiAwIDAuMjg1NzE0Mjg1N3JlbSAwLjI4NTcxNDI4NTdyZW0gMCByZ2JhKDAsIDAsIDAsIDAuMTI1KSwgMCAwLjE0Mjg1NzE0MjlyZW0gMC4xNDI4NTcxNDI5cmVtIC0wLjE0Mjg1NzE0MjlyZW0gcmdiYSgwLCAwLCAwLCAwLjEyNSk7IH0uaGlkZGVuIHtkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0udmlzdWFsbHktaGlkZGVuIHtwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDt3aWR0aDogMXB4ICFpbXBvcnRhbnQ7aGVpZ2h0OiAxcHggIWltcG9ydGFudDttYXJnaW46IC0xcHggIWltcG9ydGFudDtib3JkZXI6IDAgIWltcG9ydGFudDtwYWRkaW5nOiAwICFpbXBvcnRhbnQ7Y2xpcDogcmVjdCgwIDAgMCAwKSAhaW1wb3J0YW50Oy13ZWJraXQtY2xpcC1wYXRoOiBpbnNldCgxMDAlKSAhaW1wb3J0YW50O2NsaXAtcGF0aDogaW5zZXQoMTAwJSkgIWltcG9ydGFudDtvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7IH0uYm9yZGVyZWQge2JvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWdlbmVyaWMtYm9yZGVyLWNvbG9yKSAhaW1wb3J0YW50OyB9LnJvdW5kZWQge2JvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSAhaW1wb3J0YW50OyB9LmNpcmN1bGFyIHtib3JkZXItcmFkaXVzOiA1MCUgIWltcG9ydGFudDsgfS5zaGFkb3dlZCB7Ym94LXNoYWRvdzogdmFyKC0tZ2VuZXJpYy1ib3gtc2hhZG93KSAhaW1wb3J0YW50OyB9LnJlc3BvbnNpdmUtbWFyZ2luIHttYXJnaW46IGNhbGModmFyKC0tdW5pdmVyc2FsLW1hcmdpbikgLyA0KSAhaW1wb3J0YW50OyB9QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTAwcHgpIHsucmVzcG9uc2l2ZS1tYXJnaW4ge21hcmdpbjogY2FsYyh2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSAvIDIpICFpbXBvcnRhbnQ7IH0gfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyODBweCkgey5yZXNwb25zaXZlLW1hcmdpbiB7bWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSAhaW1wb3J0YW50OyB9IH0ucmVzcG9uc2l2ZS1wYWRkaW5nIHtwYWRkaW5nOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDQpICFpbXBvcnRhbnQ7IH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1MDBweCkgey5yZXNwb25zaXZlLXBhZGRpbmcge3BhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMikgIWltcG9ydGFudDsgfSB9QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI4MHB4KSB7LnJlc3BvbnNpdmUtcGFkZGluZyB7cGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpICFpbXBvcnRhbnQ7IH0gfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ5OXB4KSB7LmhpZGRlbi1zbSB7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9IH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1MDBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkgey5oaWRkZW4tbWQge2Rpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSB9QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI4MHB4KSB7LmhpZGRlbi1sZyB7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9IH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0OTlweCkgey52aXN1YWxseS1oaWRkZW4tc20ge3Bvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O3dpZHRoOiAxcHggIWltcG9ydGFudDtoZWlnaHQ6IDFweCAhaW1wb3J0YW50O21hcmdpbjogLTFweCAhaW1wb3J0YW50O2JvcmRlcjogMCAhaW1wb3J0YW50O3BhZGRpbmc6IDAgIWltcG9ydGFudDtjbGlwOiByZWN0KDAgMCAwIDApICFpbXBvcnRhbnQ7LXdlYmtpdC1jbGlwLXBhdGg6IGluc2V0KDEwMCUpICFpbXBvcnRhbnQ7Y2xpcC1wYXRoOiBpbnNldCgxMDAlKSAhaW1wb3J0YW50O292ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsgfSB9QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTAwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIHsudmlzdWFsbHktaGlkZGVuLW1kIHtwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDt3aWR0aDogMXB4ICFpbXBvcnRhbnQ7aGVpZ2h0OiAxcHggIWltcG9ydGFudDttYXJnaW46IC0xcHggIWltcG9ydGFudDtib3JkZXI6IDAgIWltcG9ydGFudDtwYWRkaW5nOiAwICFpbXBvcnRhbnQ7Y2xpcDogcmVjdCgwIDAgMCAwKSAhaW1wb3J0YW50Oy13ZWJraXQtY2xpcC1wYXRoOiBpbnNldCgxMDAlKSAhaW1wb3J0YW50O2NsaXAtcGF0aDogaW5zZXQoMTAwJSkgIWltcG9ydGFudDtvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7IH0gfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyODBweCkgey52aXN1YWxseS1oaWRkZW4tbGcge3Bvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O3dpZHRoOiAxcHggIWltcG9ydGFudDtoZWlnaHQ6IDFweCAhaW1wb3J0YW50O21hcmdpbjogLTFweCAhaW1wb3J0YW50O2JvcmRlcjogMCAhaW1wb3J0YW50O3BhZGRpbmc6IDAgIWltcG9ydGFudDtjbGlwOiByZWN0KDAgMCAwIDApICFpbXBvcnRhbnQ7LXdlYmtpdC1jbGlwLXBhdGg6IGluc2V0KDEwMCUpICFpbXBvcnRhbnQ7Y2xpcC1wYXRoOiBpbnNldCgxMDAlKSAhaW1wb3J0YW50O292ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsgfSB9aW1nW2FsdD0iU1QgbG9nbyJdIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogYXV0bzsgd2lkdGg6IDc1JTsgbWF4LXdpZHRoOiAyNTBweDsgbWluLXdpZHRoOiA3MXB4OyB9aW1nW2FsdD0iQ3ViZSBsb2dvIl0geyBmbG9hdDogcmlnaHQ7IHdpZHRoOiAzMCU7IG1heC13aWR0aDogMTByZW07IG1pbi13aWR0aDogOHJlbTsgcGFkZGluZy1yaWdodDogMXJlbTt9LmZpZ3VyZSB7ZGlzcGxheTogYmxvY2s7bWFyZ2luLWxlZnQ6IGF1dG87bWFyZ2luLXJpZ2h0OiBhdXRvO3RleHQtYWxpZ246IGNlbnRlcjt9PC9zdHlsZT4KICAgPCEtLVtpZiBsdCBJRSA5XT4KICAgICA8c2NyaXB0IHNyYz0iLy9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvaHRtbDVzaGl2LzMuNy4zL2h0bWw1c2hpdi1wcmludHNoaXYubWluLmpzIj48L3NjcmlwdD4KICAgPCFbZW5kaWZdLS0+CisgIDxsaW5rIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ0FBQUFBZ0NBTUFBQUJFcElyR0FBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBRE5RVEZSRmdaR2xFekZXNy9IMFluYVBvS3k3ME5iZDMrUG9Na3h0a0o2d1VtaUR3TWpTSXo5aXNMckhjb1NhUWxwNEF5TkwvLy8vZVQ2TWdnQUFBQkYwVWs1VC8vLy8vLy8vLy8vLy8vLy8vLy8vL3dBbHJabGlBQUFBd2tsRVFWUjQydHlUM1JhRUlBaUVFYzIwSCtYOW4zWVp0SzF6TnR2N3VCbkxUeGpJU1A0RXZRbUlsTXQ5TkNEVVVUZ0RsdUYrSlFNeVZ0UFlROVQ5OEdSeXIzVis3TUpwQVpGMHFhejhCQzBHb0lWZFpMdGFFL0hRWkVEUjFjb0t1aS9Bd2wwVnNGelZhNm5wSUh3djZNMkQ3eS81SkJhUnRhc1FIOGRtN3M1Z2NlbXF3R2tlaEtVTGJYUnROclNlM25NcjdkaEdCd1Z3aVUwZm16VUlXdis5RDhnWGJYVFZ4UnZBdCtsaGRDN2MzQ2pDRGRHdnVwV2M0aHYvaTNGOEJCZ0FZbmc2WnZzNHRpNEFBQUFBU1VWT1JLNUNZSUlxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUJVbEpSRUZVZU5yc2wxdU1WZFVaeDMvZldtdWZmYzZaT1FNemdqRGdDRTZRY1NCWWk0Q1FnbVBSVWk5b1V0c1FReUtKbDhpTFZSNmE4S0RHUzN5Z1RWcXJxVWFUMmtKRGpFRWxyWWFXa2VnSVdMVlR4RkhCa2Fzd2c1eTU0RnpPbVRtM3ZmZGFmZGdUaW9GcGZDRHhvYk9TbmJXU0wzdXQzL2V0Yi8yL3RjUTV4L2ZaRk45em13Q1lBSmdBTVAvTG1CM0kzZDNhY1h4OTErRG9iSlFScGJWRGFiUVNqQWhhSzdRSVdndGFCS1VBQkd2QjRvZ3NXQmYza1FObkxiaUljaVZRQzJkUDZWNTl6UlhYalF2UTNubDgwOFl0dXpabUN3NU1rZ0FGbm85NFNYeWpTSHNLMzlQNG5pWnBoS1NuU0dpRmM0NVNhT012Y0pRRFN5bUlLSWFXTUFpeFFZbGlmcGdYNzIzNVlOd0lqQlpMUDNyeUw2MGIrL01oQ1M5QmZVWlkxSGdwbVdRQ0p3b1JVQko3TFNvZUt3R0ZnSUIxc2VlT2VPd2NXTWI2S0NUbHpYQTNMYmppaFhFQjJqNDdkdC94dmh3bWxlTEh6ZlU4dHFhRktiV1RMdWJXZHdDN0x3amdvT0d0OWtNL2k2S0l5K3RxZUhyZHpXUlNpWXVkZXk4NzV5SVJPUi9nVUhaNFRYdm5pY2xLWU1tOHhyT0wvL3ZJS2RxKzZNWlBKRkJhZzlJb3BSR2x4aEpRRUJFQ2ExazVkenBOMCtPSXZmM0pVZlozRFpCS0pZa2NMRzY4OU15S0s2ZS9QdDRwOEZzL1ByeHVOSmREZVFrbVY2Zk9HbzUwbmVhWk4zWXp1VzRxeGs4aXhrTThIekVlUmlzOEpTaWwwSlZSYm15c0JXQndPTWR2V3ovblZKREUySWhTWVlRRk0ycTJBNzBpY2o1QUtiUXIyOW8vdmRwWEZvZmx5eFBaczdhMU55NG1qT0EzTy9ialM0S0VFZEFPMFE2MFFpbEZNWWk0ZmthYXVUT254cm4wUlRkZkY0VGFLa1dsWEtGeGlvbFd6SzMvODdoQ3RQUFRFL2NkT0hTTXBOR2tQTVcrQTRmWnZMdHp6Q3FzVzdXRUorNXFJWWdpeXFVaVJCVmNVTUVGWld3UUVKU0wzTEdrQ2NhODIvbmxBQ210Y0VHWnZzRkJycDh6NWNPazc3ZGZVSWdpeDVXLzI3N3JsdXpRQUdVbWsvS1RHT1BZOU1yZkdTa1dlZkRtaFFEOFlsa3pOVFUxUExWdEQwR3BoT2U3V0Z5aU1zMzFkU3hyYW9pM3JDL0hucFA5REpkTDVJTUFGUmE1ZFhIenk4UW44dndJL1BQQTBYWDcydHZUU1U4eFdpNXpwbENncDFDZ2J5VEhyN2E4eVliTk80aHNCTUNxK1RONTZQYnI2Qm90Y21va1Q5ZEluc1BET1ZaZk93dmZ4RlArOFY5SE9kVGJUMyt4d09od2p0VUxyK3BxdW16YTM4YVQ0c3lmZHJ5M3RwalBZNlFHb2pIWmpDeG9EekVlei81MUx3TkRPVjVZZnlmVktaK2I1amVROElYdW9Sd1l3NlNxTkMxTjlRRDA1QXBzM3ZzWldpSjBKU0NaVUd4WWVmVTJZUENDQUwxREk3Y2Q3TzV2bkRPbkVhTU5vaFJPYVVScm5HaFFDaXVhUFoybjZEb3p4THlHYWRUNm1ta3E0SFJZSVN5VnVHTitQUTJUMGdCczI3dWZ2bXlXcXFvMGhXS1JaUXVhS29zdXYyVExCWXVSYzQ2NjZ0UURPemM5akZhS2IxMVJ2M1ZoZFNnUmF0SkpBSTcxRG5DeWR3RGZPclIxM0w5eVVaeExrZVcxanpyeHNPaEtDVGVTWjgwUFo3Y3E0Y0M1VXovMDZFczg5L1I2akxWMnFXZjBEWmRrMHQ5WnhrcVZrQ2UzL29PK25qNHdocFlmekdYcFZiTUEyTlZ4aFBjL1A0WTJtbHd1NE9kTG03KzVaL244eDgvOS81ZVB2TWdmZnI4dEJ0QmFMd2RHZ1BDN0xCNUZscTN2N3FPNzV4dCtzcWlab0J5eTRmWVZHQjBuMzVIVC9TeWZNME9tMXRhRVAxM1kxTDcrbG1XUEFaOEVRY2p6bTNmd3dVY0hlZTJOTnBoVUZSL3U3R2lRbVo0MmRYRVp3QUZ5RWJSZWdBQTQzZHEybjE4Lzh5bzlBOE4wSHZ3S3JFTlZwK0xxK1BXYm1MVTdzOFhMTXVZa1FHZ2Q4K3A4WmxZYmJwaVpabFphZU91ZGorbnNQQUZha2NtazhSTWVnNE41RUVFa0pyYjJ2N21pSks0SkRzZXUzUjI4dTdlREtGK0FoRUdxVWlqZzNNZVFUTHlNSmdEKzd3SCtNd0FHUERVd3JiQm04Z0FBQUFCSlJVNUVya0pnZ2c9PSIgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIC8+CiA8L2hlYWQ+CiA8Ym9keT4KIDxkaXYgY2xhc3M9InJvdyI+CiA8ZGl2IGNsYXNzPSJjb2wtc20tMTIgY29sLWxnLTQiPgotPGRpdiBjbGFzcz0iY2FyZCBmbHVpZCI+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uZSBkYXJrIj4KIDxjZW50ZXI+Ci08aDEgaWQ9InJlbGVhc2Utbm90ZXMtZm9yLXN0bTMyZjF4eC1oYWwtZHJpdmVycyI+PHN0cm9uZz5SZWxlYXNlIE5vdGVzIGZvciBTVE0zMkYxeHggSEFMIERyaXZlcnM8L3N0cm9uZz48L2gxPgorPGgxIGlkPSJyZWxlYXNlLW5vdGVzLWZvcnN0bTMyZjF4eC1oYWwtZHJpdmVycyI+PHNtYWxsPlJlbGVhc2UgTm90ZXMgZm9yPC9zbWFsbD48bWFyaz5TVE0zMkYxeHggSEFMIERyaXZlcnM8L21hcms+PC9oMT4KIDxwPkNvcHlyaWdodCDCqSAyMDE2IFNUTWljcm9lbGVjdHJvbmljczxiciAvPgogPC9wPgotPGEgaHJlZj0iaHR0cHM6Ly93d3cuc3QuY29tIiBjbGFzcz0ibG9nbyI+PGltZyBzcmM9Ii4uLy4uL19odG1yZXNjL3N0X2xvZ28ucG5nIiBhbHQ9IlNUIGxvZ28iIC8+PC9hPgorPGEgaHJlZj0iaHR0cHM6Ly93d3cuc3QuY29tIiBjbGFzcz0ibG9nbyI+PGltZyBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVVFBQUFENUNBWUFBQUVvem54UEFBQUFDWEJJV1hNQUFBc1NBQUFMRWdIUzNYNzhBQUFkRWtsRVFWUjRuTzJkM1ZVak9kUEhOZXU5ZjB3RUM2Y0RlQ0NDZ1d0ZkxFUXdFTUZDQkVBRU1CSEFSQUI3NFd1OEVlQU53QWRuZ044QWZPWTk0aWt4UXFpNzlmM1IvZitkTTJkbTdIYTNXbDFka3FwS1ZRd0FNRkMrdU43V3BKbjlETjBsMjlWYzI1N2ZiVTgwYVdaM2pMSFRJSzB5eExxUmFnUGI3ajRrVmhlUUgzR0t4Z2wrYy96ZEpueFQybkY1M0x3WGQ4Uy9UVjhndWVmVjMvUTlGZU9lN0dqTWtlazU2RHlIeWtlOVQ4VllydnJ1dnF0SGZYcVJtZmFrcmdFdUYzUEY5Y1Z4YXFqcmpmVTJjdExNam0wdXJCS2loMDE2OHFIdkFKTTNmTkxNbnBXUExneXUvVVp3T1dwVCtENHk3Q1dUSGh6WS9OUkptZXNnL2Zja2ZmWCtPSE1OcDZBSU5FTmpKelpqOXhYLzAvSDlJZjA5VmQva1NUTjdFcDlKeHozSm56czFVanFwT05FZmpMRkw2ZnRYNlpnUGYyczRWRitZN1dwK0pEN252OVBvVVFBQUFBQVVqdE5zZU5MTXpobGpONEZ2N1hxN21uK2FUVmszTUlhQmxIVXNIWnhOZThUWmRqVy85MnhiSjg2THJGU0xKWnNaOTd2bE51Vkt6cVlINzlRUHFOR2ZQdGNoYm9yUDBobGpVK21RVGpIeFd1eWJ5cC9TNDFQbHU4NXpPSnZ4V2k0ZUhLY2V0TFRQYUMwU3BqZG5ZcjU3OVdua2RqVy83YnRHRnlZOU9HMzdncGFTKzMyTlpERU5vQWEwcm5WRHlHZXZtZ2x4a1VrejIzWDliVkNiWW9kWjdrVStMb3ZSMDNBU2NRWjc0bWhwTS8xMXlxQXNWMlEvRkNhNEIvWkxEeDZxeDhxL2wreUVoOHAzUnZaREU5dWhPTUdsc1BOdFYvTVQ2Zk03UHRxSTd6U25Xbklib2ViemZkbDIyTlZJQUFBQUFBQUFRRGlTckZySm9sTk5nSUR0YWo1Nko5YTJTbkl4aDBUdHhMWU9ISnJkSnRyTjZEcHdxRWF2S0RjMXBnNWtJVU02QlRZNmtJZmFNY2EwZmhCSEZoVHhadFVtM3djY1ZEckl0dGdhMjkzVzJGQ2RxVHQvaWxqeVlKMW8yaEcya2Z1bXVIUWdZMnhudTVwN2I4MEo2Zkl4a2lTeWNIYzZnbTJsbzZVRFd5TjNpVVdJRG1TaEpORnpMdGdxRFpObXhnTjV6cnQrM0tFaW9yL0dnaENlejFDVGFXMHdScy81OTdhcitkcTJUYUZuQ3I0N2xmcGVHUnMrZFVZUDZ4STZrS1ZhTzd2U05kcm5Hb2wxRk51SnRsRklQUjBZWkJRR1lHQW9rUkRhZjVlSXpYWXkyd0hUZW5UdWlPVVRjYVR2NFNXMGlsRWJLTDQvVjdlamlYOVBtdG1MNW5qeDk3T0lPOVI4dDgrM0ZOTTVubG5MdzVWKy95RDk3clR0K0Q1aWJIeDlTeDdBUTJBb2hFVWt1bmhyck9oc0pZQlNsUkk1Nm00aGY3RmR6US9rQkFYRUFYMjNGRnVlK1hIMDNRZURCTzhzOFhzSzArSEhQNHM1Nm1Dc1RSVGNOR1VWV3NZQkFBQUFBQUFBQUFBQUFBQUFSQ2FwS2J3V0s3V3RpeUI0a0tlT29adjRzWHRBd2NWUkZUWE43VmljVEVsZTV4YVdrbHV6YXBKdXdTQk90cXY1NHhBNlQ1QlVFb2U2RFNPS1RoVGhHUXEyUVp6VkVHdGcrUlNZdVYzTjk0YlJaWjhKM29tNklLYWhFME1uR20vcWlUQUZjZ21lOTliVnVjb2hSS0dsQS90U1RIcG5HUTJkLzgxcWExbWkwYnF6ZHRWMk5UL3p2VUJvU2JUV2g2RTZNdWYwS1dTaXY4NG5uaU1uYWFvdEdTRWxzVGU5YlZlaENNOGJ5anA5U2oydzdIZnBUZXBJNi8wbUxUdXJYdlJIditPdEN3VkJPdEZ5cXZLcEpvc014VlBiakpqTGxzODdzNjJHelAyZGJZclQwNUZucGhLcHN3VEpTWUZUNE4ySkJ2T3dydC8yU2FRcm5UbDRpdHBsU25qVkVPMVJCWjFHaTFLc1FrV3NXRHJ5NTFpUHVnYjZPZmhJSHJReW8rZTVyS3FROFhJWUx0ZlJqZVMrRkxOMjNxN21DNFBENU9NLzdiK2oyaVZkdEkza1hwUythVHprbnVkb09yUktLNDVqWjBUYk5GNXNKOXBhaEF5azBHZksxRW1SblVoenp6YUxrRlZGYVpaZ0twVFQ3NnpGUUtJK0RVQnRtN3hSR2dJQUFDcWdKVEVGdHhFK2xkeDYweVdxeTFJMjFPajhPdWFSTUxUTGRGK3NYN3RTcWNqZjYzTHJTSDlmaVlwRGFzb1ZxUXJSdVREQ2FuNi95MU84S0cxb3ZaNHJvU2ZiejJUK3YrcXpzblRrUGJ5UzByNWNTY2ZmSzc5ZjBIVjRqc1ViVWlkcStwZTFTUEVpc1JIbG5JUzlzcmdJQ0g3amRQUHZOeTJaNjZmU1oyMVprS3g5SHp3Wkx5WGtOVEdQVGFYalJkb1lyeFNHVGpxUkxpcHE4Qi9SWjJvZExPNG51YWNuemwrOUw4cjNJaUhRaDlwWlhIcklVMmRVMWsvNS9iVXFqVDNIaS9YMGVuQ2gwV3JhcXZ3dEFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHTUd0MmxIQ3E0SFlZbGE1cjY0ZmVJdTBPWjhyN3hHb0pPem1FTElhaGRFMnRGWDlIN1dBWEFmTXFkZkc5VU96UmlDazdDSm1mdEdwa3FOT0dsbU40NUNlTEJkemFQa0J3TitWS2NSSFlianFKTnNFSVlhTmFLcEVFTDdWVVJWR3RFMG53Q3lxdFZITlZrN0xaSmFuRVJ1Q29oQUZackROcHVMeFhsZlhjckZwTVQwZnFnTW1GVzJXSVZrSzJRZHhXdEVTbGxrSklTVzUzMFlpaEFTUGtJWU5VV3hDVVVMSWlVVHV6UTQxSnJ0YW40U3NvSk5oUGJaYUhhdlhGd2x6S2xMMTRpZDlWTjBrSTNSQ080eG9JZFFXaWxrNDV6aEFSTENGWEh2eGM0UlBUdll5WFFUWUo0VmdudlR1b3NCdkV1MzI5WDhJdG1kZFZDa0lBWksrK2hWOUQxVDZrbmpCUU5sMG5XdUFzYlRhNVpVRkxvNFFiUlpJUnZpSzVESlZ0WUpWOGpGMlZxTGFveVMxRGMwWHVZSnFyVWFyWERpMkJZbktzVTBpQ2RnWjR6MTFXa05ncytESUxOUDZLVEt4djd3SVFvaEs4elhuRVFJMmNlSGFSMFFRV2Fma0hQSUV3c2g5RjFJV1Zmd1NrWFJ4VW9UOEVwbE5LeUgzRUNhaGErUUgwME83Q2tSWjNvdHF6S2NLY211cGdzcmpIQm1FNDNzR1NGdXMwSSsxcFE4aVhLdFhHUVZ4TmdMQUZkU0xCekd2RUxXa1cxb3BrcFZ4UWxoQ2hMN2tLc0liRUhjbmdmME1obTdGSW5ScjVCMVZGbEZ2Q0JzaGRCNFcyYUFGWEl4WGhNVEJyR3ZPUWNPMnVyUmRDSGt1MEt1TVVJZFE3TWxyZ1p0aThXSnowcTgybjA2MElpRytLendMVFdVclJCZXl4Vnhhd1Vhc1FkUkg5b0ZGd055eC9VMjJKVUlBQUFBQUFCQVlIUTJOOXB2b1g3MmsyeG93QkcrMkFrZFNFTFBKZXJLUEl2NVJ1MG94WFoyT21sbVA4U0tVeE13eXowVGV4WWVDdDNXQXg2Sjhpck1LdFNlSTNXVnEzN2VzbG5wL1Z4dE5rRDZUaFdPRDVFK0xlN0M5Mk9rYzI4VVkvZjdaaXY1R3VMZjBqMSs2Z2ZWck5UU2ZxTXdOVit5Q0tMNllPaEJ2MzBtZHc0ZGM2THBzQnUrZWFncnRJbGlESjkxTmp4YnJTc2lZRnJPcFJVODVaaWZxbytadE14MHU1cmZTZ0wvU1REVVBsSHZtZCtMT0VaK0dTUUIvUEIvNWJmY2piamd3YjdVaHV1VzQ2S0g2dFZnMFA1cjBzeiswbnplWjFQamUxL1d1aSs0QnFGZGNLYWNkeHgzWWhJaDA2TEJaYzEyMkdKRHZPNDU5WStldE0xdi9kQXl0SDVYMnBqTk1GNjZJTjV5SVZDMHBCaXFUNlRQM25mYWlXUEZXODYvazdWSXkvQnpTNS9KMTNuZjNNOGZFSDhaTkJyYmQwdW5mUDFMbW5Lc2xmdnNFOFJPdHF2NUVXbTB2NVIrZU1zN0x0M1BrVzZLRWlENFlsejBlVUJvZU8ybDdUd2sxTHZxdVdpYVVGS1VlU2VtMnlKY3RrLzRBQmVmQlMwQkQ0UHc5UUl3ZWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURFSUZNWFU0N3JCMDFORk9CSTdHTGtnNnJYTEdxckZOQ1VvV0ZVWE1tSHdRaGlTNFVwRUlhRDJQMDRpS0c1cHZJU05SSjdXT2I4Vm5zblFRaWo0MVZ3eUpTcU5TS0VNRDRwdENHcldTT2luRzRTdExVTVkxRHowR3hUMUJHNEVYMlJJcWh5MWF3clRXc0pMOEw0dDFxZkdlU2pWdk9OaTZINnZjQTJLSS9xQk5HeXpqSm4wMVZnSEpSQmpYTkVtMFhLUFlTd0Rxb1NSTk9heThRamh1SjZxRTBqR3Z1UmVRWDd1RTBCSWFsTkVJMTh5YW1Nc0NBYzFRamlwSm5kR0I2NmpOd1VFSUZxTkllcE93L2FzRTZxMElnVVp3Z0dUQzFEcytraUJjTnlwUXdxUXB1NzdVd1ByQ0dhMjJhYU1XbG0vRjZjUjQ3Y1U1cmlOZUtrbVQxWUhHN2pPeDdhbG9LcXB5ODFETTNIQmJRaEI3ZW0xd3dRQkpJaytMV0xvZ1hSd2E5c1EvUU5RVDVzVi9NTGk1OTc3VmJjcnVaWDBXN0VrTkkxb20zd3EvRURLZHdIYlJ5UUd1QmxUUmI4MmtXeGdtanBWeGI4WlhNd1RkQkwxSXhIRnNmNlJxb25DMzd0b21TTjZMS1lzQlplMG94RkNlTjJOVGZTVXBObTVyMTlkcnVhRjNIdkpRdWlVeWRQbXBuMWZJbUVzUlFicEUzRWtPOGlwWmpvcENJRmNkTE1mQ2JQVGc5bnU1b2ZXSnAvb3JCZHplOHR6dXVsRVMydkZaVlNOZUtsejQ4bnpjeko1TE5kemZuY0xPZkRNWDRSTElKQTJuajAvSDFRaWdzUW9IblBTNEJUN2JqT2Z5Yk43Snd4NXZ1Z3JiSDBwSGp0NlM0dE9LUkVqUmpLNC9IcXVQTG1EK20ycFBtVHloQ0RRRW9VUkNmaGFjRkhHTzhUbXpac0lzcDlYOVlpVERZeVJRbGlwT3dOcjY0YVpMdWFMMU05dE8xcW5tek9SdmRWRktWcHhGZ3V2V2RQWVl6dGhURmVJRmtHZ2VndzltR25wSmdKSzYxMGZUdTVqek5Ya3dVTjhhOHhHalhtUllxZ0pJMFlXd2c1ZDY2K1diNENqL1FRalZmMlEvRXI2eWhDRUYwWEZJN2NlYzVGOXdLM3gyWU82anVIdHZGaEo2VVVqZWpycXJMbDFGVVl5UThjekFOajRWZjJmbGxOcjVXRFVnUXhoMTNzbE1McnJTRVBUQWhzQWxKOVRUWkZaNzNJTG9pZWZtVmY5aWtKdkF2ZXJrRExnTlRCK0pWMWxLQVJ2ZnpLQWRpZE5EUHIxWENBdkRvMndhKytMMnZ4ZVNDekNtS0llTHBBVERQazQ3WlpwSGk5ckFHbkV0SElyUkdMMmtubklJek9IZ3JUZ0l5Q1h0YW81QmJFbEdZYkl5eDN4TGtPZVRiRHV1L0xXcncyWkRrRnNlQ3FBRFlSM3YvbmNnSExoWVBYeTFwTG52Q2NHckhVcWdBMnRyYXZEdWMzRG00SThMSVd2VktXcWI3eVZHQVcyOVhjeG5QaXNqL0dKdHpMNjJXdEtXTnV0dHczSTAwZlorTlg5czF3VVhRQ0FSVm9SRWNjWFc0MkN3ZmZJSkRpZ2wrN2dDQzZZeTBvS1FOU1MvWXI2NEFndW1NN1AweVpWS202a2g0UVJBZGNnaVVTSmxWNkxDVjdndzBRUkV0b3k0RnR0RkNxcEVxYldzdDZRQkR0Y2ZGMHBBaCtyYnJVR3dUUkF0ZkFpQVIrNWVwTHZRMHRoM1lVUFBOdHgwNnE1SnpSb2lSUWs2U0hsRW5TTFRUdUkrMUlyRjRBQmRDSUhkQlFhYlBhL1lCRHdNRmVXeVEyaXB3REFBQUFBQUFBQUFBQUFBQkFSTGluUVB5UnI4TGo3WFRaQytqejFCdmRCd1gxdDFkdFBwVVV6eVJxMEFPNXQzVGg4VXMxTklyQ253NUh1cGRsOUdSeDhiVUVpWDZySVVjTGlFTnlRYVF3K0xlaFEyZy9XZlh6Zjh0YVVUNmV1RGJOb3RVU05iT2tJSWEzODlBdzlxUnFZdlh6bHZvdmoxUlBXcHpycDNSK0FkOGk4SzhTWi9ncGRwQVNRVTNianFGejM2dGJUS1gyWFVrNWN2Z1VoLzk5eEgzVTRsNlV0dCtxQ29FeW82bSs3aVRoWmNuakVTa2gwSkh5MlJmU2hndEZDSC9TUTkyaHozbFF3S1ZKcUQ0SkRqL3VndjlXL0hHSnBLRWRleThrY1BLNWRGcys5Nlh2K1VNOEp5RThrRDZmeXVudzZEN1h5cmszbXJrWkY4STk2WmlsT0lhL0NGTGZIZEV4QzNvWnVSQ2VxTzJTcTFmUmVhWktHNjVqNVExWEtibE03dHViejdXQ0NIZmlPOU9FTUJsczUzeWhnTkVQbTVZYzU2Q3Y5Sko4ME1RdDV6cVR2dCtJdWJDeWcrOUFhQjZ4YUtOYWdQSzU5OWl2S2xpQ2UzbDNudnFiRnA3cEJYcVVmcmVSWHBMM1FwcXFscWI3VFRKZEtqa01qTCt0aTViY2dHdnF4TTRodWlQVGdVc2NuK2xlRUhWL3lscjlqQXNsRFoyTWh0TjF5ODY5RFgwdlhxWWZ1Z3R5UWVvSkUvdmF0ak9RTk9abFcyWXpQb0tsV0RXWExJalRqaXlwL01IK3grUGNKb0w0NGRxUmcxRDUvZnlqK1Z6M21RdHQ1L2xINm91c1FiWWxDeUtmbUIvcmtreXFHb0RTYzN6VlRMNnZXaFkyc3BDMWJYci9Vem5YVTZTRWwyOExrSmI3L09rVG1DdXhVYWNvb200TUxiSyt0eVVNU0pXMXJkZzVJZzJyVTdVamFLR2lEak1QTlBtV08vT0FGamFIeXU4L1RMNkZwbE1tN2xObEljTG5hNGZLZkMySW9WZE1IOVFGbVBpL0trQU84Q25GamR3UFV2R2lCWlBLcjZsOVF5OTRrcXh0VVRXaXppeGoraG45ZDRkcTZjbWQwVlY0NTEveEQ1cUhuVWltRE1GYWszUHdnTXFreVlKMkt5YnpmSUV3YVdiaUdMbDhybXFxY1VMMGl5cllJWXo3WE1nbXpleE0wdytQOGg1b2FzT3I1dVhhQzFTMmVCejBiY1UwM2FxcHE5bkh0WlB5c2t5bGYvOE1tVjQ0dEh2T3NRMkRLOE03R0VqZ1BzeWpXalFJY0FDNytNd1Iwd1JaOEdMVjV3TUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSitJSk9ycGRKTXp0a2pQRS9mekRHZHFVL0FPUmd6Umc3MnE3bTYxcDcvL2NDMmdCNklNWDNqVEYyaXI0Q0JiTkxBL1I5clE4SkNyRkFKczFzeWhpN1pJeWRqNzB2UUZYY2JsZnphcFVodzVLNUxDYk5qTThBNzhiZUQ2QktGdHZWL0tqMlJ3ZUZXQUNUWm5hSDVUQ29tUFYyTmQ4YndnUEVramtqazJiR2w4UTNvKzBBTUJTcW54a0tvQkF6UURiQ0Y4YllkSFEzRDRaRzFWNWxsZC9LYXM3d0lZL3hLNVFoR0FBWDI5VjhNYVFIQ1J0aVFrZ1pQaFhXckExamJGbEFPMEJkL0tqZG82d0RDakVSazJhMlM4dmtsSEJGOTUwOGdJTloxZ0FRQ3lqRUJDUzBHZkxseXhtVUh3QnV3S21TaHFlSXlwRFBBaytnQkFId0J3b3hNaFJqdUIvaEt2ZmIxZnlzcUpzRm9IS2dFQ015YVdaWEVRS3VseFRxc0NucVpnRVlBTEFoUm1MU3pJNFpZdytCejM2OVhjMnZpcmxKQUFZR0ZHSUVJbm1VajRZVzh3VkFhU0F3T3c3UGdjOTZCbVVJUUh5Z0VBTXphV2JQZ1QzSzkwTU1nQVdnUktBUUF4TEpvM3lSOWFZQUdCSHdNZ2VDTXRlRTlpamZ4L0ltVTdBNHo3UnpqSDNWVGtSemNHVitObngvOG0zaWF4WURab2dCSUk5eWpEUmVmMGRvNjNUU3pGNG93Y1FwbEtFemY4WTRLWVZxNVh3Mlh6TmNzeGlnRUQwaGozTG84QnBCak5uaERVTWhLbDgyTVhJQVVzYjB5K1IzOHd1ZTZQVWs0L1d6QTRYb1QyaVBjbXorcmF5OUpYSVEycFF4YVdiN0JaU1BHRXlpVjFlZ0VEMllOTE9ZZTVSWmpDMS9aQi9DbGo5M2dpZlBJSnRoN3JSd2cwcjA2Z29Vb2lQa1VUNk1mSmtvZGlvZXhyTmR6YjlBTVZwekhTa0VLblNvbGkyRFMvVHFDbmFxT0pDNEZncGZua1ZONEVyTHRkaXozZHFKa2t5amdBSmpTQklpQVlWb1NZYXMxOGtxbWtsMnJCalplV29teWpNZ2ozSk9KOG9nU29lR0JBclJna3hacjFucVVWeXlhVUV4L3MranZCZkJpUklqK1ljTm0rMXF2cFB4K2tVQ2hXZ0J4ZS9sQ2xuSk1wcWpablI0azBYR2dWVm1EMDZVejBBaEdrSWU1ZGhPbEQ0MjlJSW1GK1NSS3NhejBFNlVRa3JROGd6cmp4bXZYeXp3TWh1UXlLTnN3dHZMUk1vNUtYekpQakxQZEN5UGNtN24xUVdVWVR1WUlmWkF1d2R5Qjh5MmtTMTdOdG5BN2dicW1YNk1zV01ESHVYeWdVTHNvTkE2eWpxeUZab2FZTWhPTEk5eXlsQXRIY3Z0YW42UThmcFZBSVhZUWlHR2IxczJOR05NWG5oK1FKN3BuU0Y2bEdONHlvY0lGR0lMbVQzS3ZteklWcFE4c1d6bGloRWU1WkVEaGFpaEVJOXlLSUo3U2sycHpETWRwWjhtemV3Vkh1VjZnSmRaWWRMTWJnYWtERGwzazJiMms1UlRVc2lBdjBNMnpwSzVqYVFNYzl0V3I2RU03Y0FNVWFKd2ozSW9zbmdhQys3YktBSHY4Q2pYQ1JRaVVaRkhPUlRKUTNZS2RGVEY4aWpuVnY3SjlyOFBEU2pFWDQ2QTF3S2Frb09raXJHd3ZvN2hVYzQ5c01LajdBRnNpUCtqdHF6WEllSGU0RmR1L0tlWXdxalFpMXBDUEZ6d1FZQm13TGxYR2NHemVZK0owU3ZFU1RON1FJMlJOL2pNN1RtRllxVFFscHlWM1dJVi9zK3RESU5uOHg0Ym8xNHlrMGY1dklDbWxFclVrQjN1L2M1dzM3RVN2ZVlPMVlwV0ZuVk1qRlloanNTakhJcWpHRE9xREVva2xrYzU5OEFhWmUvMUdCbmxrcm1RQ21jMThVVDJzZEQ4azdBUE5wR1U0V2xtWlRqNjBxRWhHWjFDSkMvbm1KMG9ydFJ1WnczdXlDbGtZRVhDaG9DTWNZYVljNU45clp4RWNrSjhUZFFmd1V0c0ZqS3d3cU1jbU44SGRUY0c4R1VUamV5b01OZk5PcWJIa3A1QkN2dGhyQktidVpYaFdZNnNSa05uZEFxUi9RcjdBSGxKVVczdW5ncnpCNldBVUswb2U2OEJkcXFBRENUeThFZEppRnBBNlZEc1VZNElGQ0pJQ2kyVll5ODNvNVRZTENCVUM4b3dNcVBmcVFMU1FmdDhVOWplaHVoUnZvQXlqQThVSWtnQzFSUkpzYlV0ZUcwWktRdDREcGFVaENMblZzZlJNRXFuQ2toSDRwSUNzUktpUG1lSVNzaFdIMmZNUUNHQ2FDUk9rbm9mWXk4djNVTktqM0syQ29vQVRoVVFHSm9SY2lWeW5MQnZhL2NvYnlpdUVPbitNNE1aSWdnQzJRZ3ZjeTB0UTUrVVNvZkdVb2E4elR5TzhEdG1nbVVCaFFpY3lWdzNaRU0ydzFqT0J0OHRjUnRhL2k0cGljVUMyK3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoa3ZWVy9jb25kUUh1dExGVTdsSW5tVGdoMm5HWVNuVi9RWlppa0ZxYUN1a1NJeXhMRFc0VzNvWG81YWVpRTN0TzFWMEtabTZsTHhRYnAzbEx6VVpXc1JXS3dCU3N5L0pPZCtpR0tNK1RBaEVHNjhaWTlVV3pLOWFJVzVYOHpmbFI2TlRiNzQ2aTdxOGR5U0lmTFRiODI0b0FLQUtSckdYbVZLL2YwamhwS2FLb2tMc1lsL3V2dlM1T082K2F5bEF2ejlXa2hzc1UreGhwZnY3azJhLzR2b2JtazM4TFpiNjByMHNaTk9DY3UrZDkybHpQQTFVZjJuYTlVaG1pMFZidTlScjBEbStTWlg2MW5SL1B6VDNja25IaVdlK3BHT05raW5RQ2tIdVU4RmJmOUk5YTUrcHB0Mk0rdUJZYXM5R2FzK25HUi8xbTdqdUg5SlgzeFF6a2JidkpYbVFNdzVaOVlIbVhQSXoxUGI5RUJoTGNvZi9rcEtUN1RIcXRINHExUW1lYWo3N2xKcUpoT1ZHZWRtWDBtOHY2VGhHbngrRlVvNlVqVVd1TWMyRjlMdTBwQklLNUppU01DeVZKSzJ5SU85S21WMFdkSzR1V284bm0rdVQ4dkxja3lKaDBvdDZTdjJ5MENnZHRVM3l0YzdvbkgrUzRoSG5lWlFVZ0RCeC9DTTlRNTZONTV5T1BXcFJSR3F5Q243T0M2bnZ2dEx6dnFIelhHdHlNT3JhTFFZQllhcjVTbTA5cHZPb3RWSjJOYkxJcUEzeXdQNHVrNXA2TDB1cDdlSjhwMUlmTE5wV1RKcHpDZGtTc3YxVmVZYURTV0k3aUh5SThwSlpMS005ajN1aWw3UkxhRjVJMEhvekd5c0NwbnVKYk8vM1NWSWkycGU3NC9xZjJxQ1lIRXpPcHoxZVVTZ1hmWmxvS0dYWWphNWR5alc2bm9OcUxqbHJjMzZSVSsyYy9uc2duaG5ONmtSVzdONkJTeXBTTDU3L25qaGVhYytHcnRNMmcrYS9mNkgvUG01WDg1T2UrMnRUNU0ra0xJMnliRk1aVlRGNEhDa3piRm0yRGd6TzFmb01hd1ExVlJ5UTZ2SnlyOTlPbjlEUUN5cXF3RjJTZ25LOTlwVWtzSHNtU3hhNmZ2QUVxa3E3amlWbGVHYVNsb3VPK2FRRU5GeDNuR01oelNyWFhaRUEyOVg4UXZxdnZKeDhFTXFRSjVydG04WHo3OG0ydktiZlBiUWNldEcxUEtYdlJKdU9hWFp0aFJRNXdVZ2VlbWRycEhoRlA3MFBKblF1SVZ1OWNzM3NubUVWSUIraUcrSmwycDgwczU4T1ovam00YlVXUzZtRmpTMklDL2VrbWFuTDA1RHNTOWN5dmplZUpacVdYU0Z3RGZjUWJYZDlubTE5YXRJZVdlbTRKTmVWbGVpclMxL3lXU2dOTE9KY1ZuYnZ3TTh3SzFDSWJxeHBocGlqVHU0LzlBSWU4aVdYcVZLazVabUpNalI1S1hYbmtlMkl4NmJwOEdsbW1adTFOT09QT3BPT2dQejhkenh0MUV0SnRxYW01M0taMlpZS2xzeHVpQ1hDS2RuTk91SEN4VzJPZlBaQnRzZFA4S1V3ZlMvLzBRV2VYMGxMeEJjVFlhUmp0TmRsdjVhZDRzVzZhVHVPZmZUaXF1ZTRsMmE5RHlabUFUcW1iYm1aRW1HZjVEUEVaN0lSZHJWN1NzZnhaL1JLZlpJRkdwREZzek9WaHp1ZGpKRkp3ZlpjcVdwdEo2SHFHYUlVcnZHSDVyT0ZKcXhEZDl5YjNVa0pseEFDdnFzTHU2SGw1dzdaWDA3cHhWWTljVXp5aElvWHJNdmdyS3ZmY2FrTHhPVU9Cc2xSOGl4NWEzOUlBcjJyaEtsc2VtWi9CNlEwZDJuWnVLRDdFYk9FL2I2YUtmemxuRFN6SDZUazdpVHY5ZytwWDlSMnFkN3Y1TkJ6L1NJNUo3aVMyeWplOGFua3FSVjlrR09GOEFsdXo1UWNSa0llUk52RjgvdFRDZjNST28vb1hLcHNQZEs1WEdXckdtcGZNbitWL3IxUVBsc2JIdmNmK251cS9IYXRIUGRoQ1VpQzlMYThvbEh5bTBaaHJDMktDUjJRSWhFQ3UrZ3lWb3NabVJRejkwM3hKRE1wOU9JdGJvNDhpR3JmeVBlelErYzdwL09wczdkSHljRWhacEx2TDVRMDJ6aWlRVU8wUzUxMUxvUTNXUEdpeW9QSlJucFdmVXUzcGZKM0YrOE9HRTBmcU0velZQSktNeWw4NXJyamVkcTAyK1I0by9QUjdPNkNCbllSOXlqUDBqZFN2M2M2NGhUWk9pZGxxcE90TXluR3RWVzJhZ0psU0VFd2xQQ2UxbEFaZ1JLemlGMUJJRHRRaUNBb0xmdkErYXpxWDhsby8xOGw3S1dJcFNjQVVJZ2dHalFERkxZbWRaZk0zeFNNakxyRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdBcGo3UDhCN3JsamJ3K0ZLckVBQUFBQVNVVk9SSzVDWUlJPSIgYWx0PSJTVCBsb2dvIiAvPjwvYT4KIDwvY2VudGVyPgotPC9kaXY+Ci08L2Rpdj4KLTxoMSBpZD0ibGljZW5zZSI+PHN0cm9uZz5MaWNlbnNlPC9zdHJvbmc+PC9oMT4KLVRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLCB0aGUg4oCcTGljZW5zZeKAnTsgWW91IG1heSBub3QgdXNlIHRoaXMgY29tcG9uZW50IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKLTxjZW50ZXI+Ci08YSBocmVmPSJodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZSI+aHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2U8L2E+Ci08L2NlbnRlcj4KKzxoMSBpZD0icHVycG9zZSI+UHVycG9zZTwvaDE+Cis8cD5UaGUgU1RNMzJDdWJlIEhBTCBhbmQgTEwsIGFuIFNUTTMyIGFic3RyYWN0aW9uIGxheWVyIGVtYmVkZGVkIHNvZnR3YXJlLCBlbnN1cmUgbWF4aW1pemVkIHBvcnRhYmlsaXR5IGFjcm9zcyBTVE0zMiBwb3J0Zm9saW8uPC9wPgorPHA+VGhlIHBvcnRhYmxlIEFQSXMgbGF5ZXIgcHJvdmlkZXMgYSBnZW5lcmljLCBtdWx0aSBpbnN0YW5jZWQgYW5kIHNpbXBsZSBzZXQgb2YgQVBJcyB0byBpbnRlcmFjdCB3aXRoIHRoZSB1cHBlciBsYXllciAoYXBwbGljYXRpb24sIGxpYnJhcmllcyBhbmQgc3RhY2tzKS4gSXQgaXMgY29tcG9zZWQgb2YgbmF0aXZlIGFuZCBleHRlbmRlZCBBUElzIHNldC4gSXQgaXMgZGlyZWN0bHkgYnVpbHQgYXJvdW5kIGEgZ2VuZXJpYyBhcmNoaXRlY3R1cmUgYW5kIGFsbG93cyB0aGUgYnVpbGQtdXBvbiBsYXllcnMsIGxpa2UgdGhlIG1pZGRsZXdhcmUgbGF5ZXIsIHRvIGltcGxlbWVudCBpdHMgZnVuY3Rpb25zIHdpdGhvdXQga25vd2luZyBpbi1kZXB0aCB0aGUgdXNlZCBTVE0zMiBkZXZpY2UuIFRoaXMgaW1wcm92ZXMgdGhlIGxpYnJhcnkgY29kZSByZXVzYWJpbGl0eSBhbmQgZ3VhcmFudGVlcyBhbiBlYXN5IHBvcnRhYmlsaXR5IG9uIG90aGVyIGRldmljZXMgYW5kIFNUTTMyIGZhbWlsaWVzLjwvcD4KKzxwPlRoZSBMb3cgTGF5ZXIgKExMKSBkcml2ZXJzIGFyZSBwYXJ0IG9mIHRoZSBTVE0zMkN1YmUgZmlybXdhcmUgSEFMIHRoYXQgcHJvdmlkZXMgYSBiYXNpYyBzZXQgb2Ygb3B0aW1pemVkIGFuZCBvbmUgc2hvdCBzZXJ2aWNlcy4gVGhlIExvdyBsYXllciBkcml2ZXJzLCBjb250cmFyeSB0byB0aGUgSEFMIG9uZXMgYXJlIG5vdCBmdWxseSBwb3J0YWJsZSBhY3Jvc3MgdGhlIFNUTTMyIGZhbWlsaWVzOyB0aGUgYXZhaWxhYmlsaXR5IG9mIHNvbWUgZnVuY3Rpb25zIGRlcGVuZHMgb24gdGhlIHBoeXNpY2FsIGF2YWlsYWJpbGl0eSBvZiB0aGUgcmVsYXRpdmUgZmVhdHVyZXMgb24gdGhlIHByb2R1Y3QuIFRoZSBMb3cgTGF5ZXIgKExMKSBkcml2ZXJzIGFyZSBkZXNpZ25lZCB0byBvZmZlciB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOjwvcD4KKzx1bD4KKzxsaT5OZXcgc2V0IG9mIGlubGluZSBmdW5jdGlvbnMgZm9yIGRpcmVjdCBhbmQgYXRvbWljIHJlZ2lzdGVyIGFjY2VzczwvbGk+Cis8bGk+T25lLXNob3Qgb3BlcmF0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBIQUwgZHJpdmVycyBvciBmcm9tIGFwcGxpY2F0aW9uIGxldmVsPC9saT4KKzxsaT5GdWxsIGluZGVwZW5kZW5jZSBmcm9tIEhBTCBhbmQgc3RhbmRhbG9uZSB1c2FnZSAod2l0aG91dCBIQUwgZHJpdmVycyk8L2xpPgorPGxpPkZ1bGwgZmVhdHVyZXMgY292ZXJhZ2Ugb2YgYWxsIHRoZSBzdXBwb3J0ZWQgcGVyaXBoZXJhbHM8L2xpPgorPC91bD4KIDwvZGl2PgogPGRpdiBjbGFzcz0iY29sLXNtLTEyIGNvbC1sZy04Ij4KLTxoMSBpZD0idXBkYXRlLWhpc3RvcnkiPjxzdHJvbmc+VXBkYXRlIEhpc3Rvcnk8L3N0cm9uZz48L2gxPgorPGgxIGlkPSJ1cGRhdGUtaGlzdG9yeSI+VXBkYXRlIEhpc3Rvcnk8L2gxPgogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgotPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjFfMV84IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xXzFfOCIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMS44IC8gMTgtTWF5LTIwMjE8L3N0cm9uZz48L2xhYmVsPgorPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjFfMV85IiBjaGVja2VkIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjFfMV85IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4xLjkgLyAwNy1BcHJpbC0yMDIzPC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+CiA8aDIgaWQ9Im1haW4tY2hhbmdlcyI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KLTxsaT5HZW5lcmFsIHVwZGF0ZXMgdG8gZml4IGtub3duIGRlZmVjdHMuPC9saT4KKzxsaT5HZW5lcmFsIHVwZGF0ZXMgdG8gZml4IGtub3duIGRlZmVjdHMgYW5kIGVuaGFuY2VtZW50cyBpbXBsZW1lbnRhdGlvbi48L2xpPgorPGxpPkhBTCBjb2RlIHF1YWxpdHkgZW5oYW5jZW1lbnQgZm9yIE1JU1JBLUMgUnVsZS04LjEzIGJ5IGFkZGluZyBjb25zdCBxdWFsaWZpZXJzLjwvbGk+Cis8bGk+QWxsIHNvdXJjZSBmaWxlczogdXBkYXRlIGRpc2NsYWltZXIgdG8gYWRkIHJlZmVyZW5jZSB0byB0aGUgbmV3IGxpY2Vuc2UgYWdyZWVtZW50LjwvbGk+CiA8L3VsPgogPGgyIGlkPSJjb250ZW50cyI+Q29udGVudHM8L2gyPgogPHVsPgorPGxpPjxzdHJvbmc+SEFMIEdlbmVyaWM8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+QWxsb3cgcmVkZWZpbml0aW9uIG9mIG1hY3JvIFVOVVNFRCh4KS48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIEVYVEk8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+Rml4IGNvbXB1dGF0aW9uIG9mIHBFeHRpQ29uZmlnLSZndDtHUElPU2VsIGluIEhBTF9FWFRJX0dldENvbmZpZ0xpbmUoKS48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIEdQSU88L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+UmVvcmRlciBFWFRJIGNvbmZpZ3VyYXRpb24gc2VxdWVuY2UgaW4gb3JkZXIgdG8gYXZvaWQgdW5leHBlY3RlZCBsZXZlbCBkZXRlY3Rpb24uPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBSQ0M8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+QWRkIOKAmHN0YXRpY+KAmSBzdG9yYWdlLWNsYXNzIHNwZWNpZmllciB0byDigJhjb25zdOKAmSBhcnJheXMuPC9saT4KKzxsaT51cGRhdGUgbWFjcm8gX19IQUxfUkNDX0FQQjFfRk9SQ0VfUkVTRVQgZGVmaW5pdGlvbi48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIERNQTwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5BZGQgdm9sYXRpbGUgcXVhbGlmaWVyIHRvIG1lbWJlciDigJhTdGF0ZeKAmSBvZiBETUFfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdG8gcHJldmVudCBhbnkgaXNzdWUgd2hlbiBvcHRpbWl6YXRpb24gaXMgZW5hYmxlZC48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIENFQzwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5CZXR0ZXIgcGVyZm9ybWFuY2UgYnkgcmVtb3ZpbmcgbXVsdGlwbGUgdm9sYXRpbGUgcmVhZHMgb3Igd3JpdGVzIGluIGludGVycnVwdCBoYW5kbGVyLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgQURDPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPlJlbW92ZSBtdWx0aXBsZSB2b2xhdGlsZSByZWFkcyBvciB3cml0ZXMgaW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIGJldHRlciBwZXJmb3JtYW5jZS48L2xpPgorPGxpPkZpeCBIQUxfQURDRXhfQ2FsaWJyYXRpb25fU3RhcnQoKSBpbiBwb3dlci1vbiBzdGF0ZSAoQURPTiBiaXQgPSDigJgx4oCZKSBmb3IgYXQgbGVhc3QgdHdvIEFEQyBjbG9jayBjeWNsZXMuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBEQUM8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+Rml4IGluY29ycmVjdCB3b3JkIOKAmHN1cmNoYXJnZWTigJkgaW4gZnVuY3Rpb25zIGhlYWRlcnMuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTC9MTCBUSU08L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+TWFuYWdlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIENhcHR1cmUvY29tcGFyZSBETUEgcmVxdWVzdCBzb3VyY2U6Cis8dWw+Cis8bGk+QWRkIHJlbGF0ZWQgbmV3IGV4cG9ydGVkIGNvbnN0YW50cyAoVElNX0NDRE1BUkVRVUVTVF9DQywgVElNX0NDRE1BUkVRVUVTVF9VUERBVEUpLjwvbGk+Cis8bGk+Q3JlYXRlIGEgbmV3IG1hY3JvIF9fSEFMX1RJTV9TRUxFQ1RfQ0NETUFSRVFVRVNUKCkgYWxsb3dpbmcgdG8gcHJvZ3JhbSB0aGUgVElNeF9DUjIuQ0NEUyBiaXRmaWVsZC48L2xpPgorPC91bD48L2xpPgorPGxpPlVwZGF0ZSBfX0xMX1RJTV9DQUxDX1BTQygpIG1hY3JvIHRvIHJvdW5kIHVwIHRoZSBldmFsdWF0ZWQgdmFsdWUgd2hlbiB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBkaXZpc2lvbiBpcyBncmVhdGVyIHRoYW4gMC41LjwvbGk+Cis8bGk+SW1wcm92ZWQgZHJpdmVyIHJvYnVzdG5lc3MgYWdhaW5zdCB3cm9uZyBwZXJpb2QgdmFsdWVzLjwvbGk+Cis8bGk+SW1wcm92ZWQgZHJpdmVyIHJvYnVzdG5lc3MgYWdhaW5zdCB3cm9uZyBETUEgcmVsYXRlZCBwYXJhbWV0ZXJzLjwvbGk+Cis8bGk+SW1wcm92ZWQgcGVyaW9kIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGNoZWNrLjwvbGk+Cis8bGk+UmVtb3ZlZCBsb2NrIG1hbmFnZW1lbnQgZnJvbSBjYWxsYmFjayBtYW5hZ2VtZW50IGZ1bmN0aW9ucy48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIFJUQzwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5JbiBIQUxfUlRDX0luaXQoKSwgdXNlIFdSSVRFX1JFRygpIGluc3RlYWQgb2YgTU9ESUZZX1JFRygpIHRvIGhhbmRsZSBQUkxMIGFuZCBQUkxIIHdyaXRlLW9ubHkgcmVnaXN0ZXJzLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgU1BJPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPkZpeCBkcml2ZXIgdG8gZG9u4oCZdCB1cGRhdGUgc3RhdGUgaW4gY2FzZSBvZiBlcnJvci4gKEhBTF9TUElfU1RBVEVfUkVBRFkgd2lsbCBiZSBzZXQgb25seSBpbiBjYXNlIG9mIEhBTF9USU1FT1VUKS48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIEkyQzwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5VcGRhdGUgSEFMX0kyQ19NZW1fV3JpdGVfRE1BKCkgYW5kIEhBTF9JMkNfTWVtX1JlYWRfRE1BKCkgQVBJcyB0byBhZGQgaW5pdGlhbGl6YXRpb24gb2YgRGV2YWRkcmVzcywgTWVtYWRkcmVzcyBhbmQgRXZlbnRDb3VudCBwYXJhbWV0ZXJzLjwvbGk+Cis8bGk+VXBkYXRlIEkyQ19NYXN0ZXJSZWNlaXZlX1JYTkUoKSBwcm9jZXNzIHRvIHNhZmVseSBtYW5hZ2UgZGF0YSBOPTIgYW5kIE49MywgRGlzYWJsZSBCVUYgaW50ZXJydXB0IGlmIG5vdGhpbmcgdG8gZG8uPC9saT4KKzxsaT5VcGRhdGUgSEFMX0kyQ19NYXN0ZXJfVHJhbnNtaXRfSVQgdG8gcmV0dXJuIEhBTF9CVVNZIGluc3RlYWQgb2YgSEFMX0VSUk9SIHdoZW4gdGltZW91dCBvY2N1ciBhbmQgSTJDX0ZMQUdfQlVTWSBpcyBTRVQuPC9saT4KKzxsaT5EdXBsaWNhdGUgdGhlIHRlc3QgY29uZGl0aW9uIGFmdGVyIHRpbWVvdXQgZGV0ZWN0aW9uIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwvTEwgVVNBUlQ8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+SGFuZGxpbmcgb2YgVUFSVCBjb25jdXJyZW50IHJlZ2lzdGVyIGFjY2VzcyBpbiBjYXNlIG9mIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gVHggYW5kIFJ4IHRyYW5zZmVycy48L2xpPgorPGxpPkltcHJvdmUgaGVhZGVyIGRlc2NyaXB0aW9uIG9mIFVTQVJUX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoKSBmdW5jdGlvbi48L2xpPgorPGxpPkFkZCBhIGNoZWNrIG9uIHRoZSBVU0FSVCBwYXJpdHkgYmVmb3JlIGVuYWJsaW5nIHRoZSBwYXJpdHkgZXJyb3IgaW50ZXJydXB0LjwvbGk+Cis8bGk+UmVtb3ZlIF9fSEFMX0xPQ0soKSBmcm9tIEhBTF94eHhfUmVnaXN0ZXJDYWxsYmFjaygpL0hBTF94eHhfVW5SZWdpc3RlckNhbGxiYWNrKCkuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBVQVJUPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPkhhbmRsaW5nIG9mIFVBUlQgY29uY3VycmVudCByZWdpc3RlciBhY2Nlc3MgaW4gY2FzZSBvZiByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIFR4IGFuZCBSeCB0cmFuc2ZlcnMuPC9saT4KKzxsaT5JbXByb3ZlIGhlYWRlciBkZXNjcmlwdGlvbiBvZiBVQVJUX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoKSBmdW5jdGlvbi48L2xpPgorPGxpPkFkZCBhIGNoZWNrIG9uIHRoZSBVQVJUIHBhcml0eSBiZWZvcmUgZW5hYmxpbmcgdGhlIHBhcml0eSBlcnJvciBpbnRlcnJ1cHRpb24uPC9saT4KKzxsaT5GaXggdHlwbyBpbiBVQVJUX0lUX1RYRSBiaXQgZGVzY3JpcHRpb24uPC9saT4KKzxsaT5BZGQgYSBuZXcgQVBJIEhBTF9VQVJURXhfR2V0UnhFdmVudFR5cGUgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJldHJpZXZlIHRoZSB0eXBlIG9mIGV2ZW50IHRoYXQgaGFzIGxlZCB0aGUgUnhFdmVudENhbGxiYWNrIGV4ZWN1dGlvbi48L2xpPgorPGxpPlJlbW92YWwgb2YgSEFMX0xPQ0svSEFMX1VOTE9DSyBjYWxscyBpbiBIQUwgVUFSVCBUeCBhbmQgUnggQVBJcy48L2xpPgorPGxpPlJlbW92ZSBfX0hBTF9MT0NLKCkgZnJvbSBIQUxfeHh4X1JlZ2lzdGVyQ2FsbGJhY2soKS9IQUxfeHh4X1VuUmVnaXN0ZXJDYWxsYmFjaygpLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgU01BUlRDQVJEPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPkltcHJvdmUgaGVhZGVyIGRlc2NyaXB0aW9uIG9mIFNNQVJUQ0FSRF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KCkgZnVuY3Rpb24uPC9saT4KKzxsaT5SZW1vdmUgX19IQUxfTE9DSygpIGZyb20gSEFMX3h4eF9SZWdpc3RlckNhbGxiYWNrKCkvSEFMX3h4eF9VblJlZ2lzdGVyQ2FsbGJhY2soKS48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIElSREE8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+SW1wcm92ZSBoZWFkZXIgZGVzY3JpcHRpb24gb2YgSVJEQV9XYWl0T25GbGFnVW50aWxUaW1lb3V0KCkgZnVuY3Rpb24uPC9saT4KKzxsaT5BZGQgYSBjaGVjayBvbiB0aGUgSVJEQSBwYXJpdHkgYmVmb3JlIGVuYWJsaW5nIHRoZSBwYXJpdHkgZXJyb3IgaW50ZXJydXB0LjwvbGk+Cis8bGk+UmVtb3ZlIF9fSEFMX0xPQ0soKSBmcm9tIEhBTF94eHhfUmVnaXN0ZXJDYWxsYmFjaygpL0hBTF94eHhfVW5SZWdpc3RlckNhbGxiYWNrKCkuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBTRE1NQzwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5UYWtlIGluIGFjY291bnQgdGhlIHZvbHRhZ2UgcmFuZ2UgaW4gdGhlIENNRDEgY29tbWFuZC48L2xpPgorPGxpPkFkZCBuZXcgTEwgZnVuY3Rpb24gdG8gaGF2ZSBjb3JyZWN0IHJlc3BvbnNlIGZvciBNTUMgZHJpdmVyLjwvbGk+Cis8bGk+VXBkYXRlIHRoZSBkcml2ZXIgdG8gaGF2ZSBhbGwgZmllbGRzIGNvcnJlY3RseSBpbml0aWFsaXplZC48L2xpPgorPGxpPkFkZCBhIGludGVybmFsIHRvIG1hbmFnZSB0aGUgcG93ZXIgY2xhc3MgYW5kIGNhbGwgaXQgYmVmb3JlIHRvIHVwZGF0ZSBzcGVlZCBvZiBidXMgd2lkdGguPC9saT4KKzxsaT5BZGQgbmV3IEFQSSB0byBnZXQgdGhlIHZhbHVlIG9mIHRoZSBFeHRlbmRlZCBDU0QgcmVnaXN0ZXIgYW5kIHBvcHVsYXRlIHRoZSBFeHRDU0QgZmllbGQgb2YgdGhlIE1NQyBoYW5kbGUuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBDQU48L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+UmVtb3ZhbCBvZiBuZXZlciByZWFjaGVkIGNvZGUuPC9saT4KKzxsaT5JbXByb3ZlIHByb3RlY3Rpb24gYWdhaW5zdCBiYWQgaW5wdXRzLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgTk9SPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPkVuYWJsZSB3cml0ZSBvcGVyYXRpb25zIGJlZm9yZSBlZmZlY3RpdmUgd3JpdGUgdG8gTk9SIG1lbW9yeSBpbiBIQUxfTk9SX0luaXQoKSBmdW5jdGlvbiB0byBhdm9pZCBIYXJkRmF1bHQuPC9saT4KKzxsaT5GTUNfV1JJVEVfT1BFUkFUSU9OX0RJU0FCTEUgZm9yIE5PUiBjYXVzZSBIYXJkZmF1bHQgZm9yIFJlYWQgb3BlcmF0aW9ucy48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFML0xMIFVTQjwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5QQ0Q6IGFkZCBoYW5kbGluZyBvZiBVU0IgT1VUIEVuZHBvaW50IGRpc2FibGUgaW50ZXJydXB0LjwvbGk+Cis8bGk+UENEOiBmaXggZGV2aWNlIElOIGVuZHBvaW50IGlzb2MgaW5jb21wbGV0ZSB0cmFuc2ZlciBpbnRlcnJ1cHQgaGFuZGxpbmcuPC9saT4KKzxsaT5QQ0Q6IGZpeCBVU0IgZGV2aWNlIElzb2MgT1VUIEVuZHBvaW50IGluY29tcGxldGUgdHJhbnNmZXIgaW50ZXJydXB0IGhhbmRsaW5nLjwvbGk+Cis8bGk+Rml4IGhhbmRsaW5nIG9mIE9EREZSTSBiaXQgaW4gT1RHX0hDQ0hBUnggZm9yIGlzb2Nocm9ub3VzIElOIHRyYW5zYWN0aW9ucy48L2xpPgorPGxpPkZpeCByZWNlaXZlZCBkYXRhIGxlbmd0aCBjb3VudGluZyB3aGVuIERNQSBpcyBlbmFibGVkLjwvbGk+Cis8bGk+Rml4IGFkZGVkIHRvIFVTQl9DbGVhckludGVycnVwdHMoKSBhbmQgVVNCX0hDX0hhbHQoKSBBUElzLjwvbGk+Cis8bGk+UmVtb3ZlIHVzZWxlc3Mgc29mdHdhcmUgc2V0dGluZyB0byBzZXR1cCB0aGUgZnJhbWUgaW50ZXJ2YWwgYXQgODAlLjwvbGk+Cis8bGk+UENEOiBhZGQgc3VwcG9ydGluZyBtdWx0aSBwYWNrZXRzIHRyYW5zZmVyIG9uIEludGVycnVwdCBlbmRwb2ludC48L2xpPgorPGxpPlBDRDogc29mdHdhcmUgY29ycmVjdGlvbiBhZGRlZCB0byBhdm9pZCB1bmV4cGVjdGVkIFNUQUxMIGNvbmRpdGlvbiBkdXJpbmcgRVAwIG11bHRpIHBhY2tldCBPVVQgdHJhbnNmZXIuPC9saT4KKzxsaT5QQ0Q6IGFkZCBhIG1hc2sgZm9yIFVTQiBSWCBieXRlcyBjb3VudC48L2xpPgorPGxpPkFkZCBuZXcgSEFMX1BDRF9FUF9BYm9ydCgpIEFQSSB0byBhYm9ydCBjdXJyZW50IFVTQiBlbmRwb2ludCB0cmFuc2Zlci48L2xpPgorPC91bD48L2xpPgorPC91bD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+Cis8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMV8xXzgiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjFfMV84IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4xLjggLyAxOC1NYXktMjAyMTwvc3Ryb25nPjwvbGFiZWw+Cis8ZGl2PgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzx1bD4KKzxsaT5HZW5lcmFsIHVwZGF0ZXMgdG8gZml4IGtub3duIGRlZmVjdHMuPC9saT4KKzwvdWw+Cis8aDIgaWQ9ImNvbnRlbnRzLTEiPkNvbnRlbnRzPC9oMj4KKzx1bD4KIDxsaT48c3Ryb25nPkhBTC9MTCBBREM8L3N0cm9uZz4gZHJpdmVyCiA8dWw+CiA8bGk+VXBkYXRlIExMX0FEQ19EZUluaXQoKSBBUEkgdG8gY2xlYXIgbWlzc2luZyBTUVIzIHJlZ2lzdGVyLjwvbGk+Cis8bGk+VXBkYXRlIEhBTCBBREMgZHJpdmVyIHRvIGFkZCBpbmNsdWRlIG9mIHRoZSBMTCBBREMgZHJpdmVyLjwvbGk+CiA8bGk+VXBkYXRlIHRpbWVvdXQgbWVjaGFuaXNtIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbi48L2xpPgogPC91bD48L2xpPgogPGxpPjxzdHJvbmc+SEFMIEVYVEk8L3N0cm9uZz4gZHJpdmVyCkBAIC04OSw3ICsyMjgsNiBAQAogPGxpPlVwZGF0ZSBJMkNfTWVtb3J5VHJhbnNtaXRfVFhFX0JURigpIEFQSSB0byBpbmNyZW1lbnQgRXZlbnRDb3VudC48L2xpPgogPC91bD48L2xpPgogPGxpPlVwZGF0ZSB0byB1c2UgdGhlIHJpZ2h0IG1hY3JvIHRvIGNsZWFyIEkyQyBBRERSIGZsYWcgaW5zaWRlIEkyQ19TbGF2ZV9BRERSKCkgQVBJIGFzIGl04oCZcyBpbmRpY2F0ZWQgaW4gdGhlIHJlZmVyZW5jZSBtYW51YWwuPC9saT4KLTxsaT5VcGRhdGUgSEFMX0kyQ19FVl9JUlFIYW5kbGVyKCkgYW5kIEkyQ19NYXN0ZXJUcmFuc21pdF9CVEYoKSBBUElzIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdHJhbnNmZXIgb2YgdGhlIGZpcnN0IGZldyBieXRlcyB0byBhbiBJMkMgbWVtb3J5IGZhaWxzLjwvbGk+CiA8L3VsPjwvbGk+CiA8bGk+PHN0cm9uZz5IQUwgTkFORDwvc3Ryb25nPiBkcml2ZXIKIDx1bD4KQEAgLTE2NSwxMSArMzAzLDExIEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMV8xXzciIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjFfMV83IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4xLjcgLyAyMC1PY3RvYmVyLTIwMjA8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy0yIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cy48L2xpPgogPC91bD4KLTxoMiBpZD0iY29udGVudHMtMSI+Q29udGVudHM8L2gyPgorPGgyIGlkPSJjb250ZW50cy0yIj5Db250ZW50czwvaDI+CiA8dWw+CiA8bGk+PHN0cm9uZz5IQUwvTEwgSTJDPC9zdHJvbmc+IGRyaXZlcgogPHVsPgpAQCAtMTg4LDExICszMjYsMTEgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xXzFfNiIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMV8xXzYiIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3Ryb25nPlYxLjEuNiAvIDA3LVNlcHRlbWJlci0yMDIwPC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0yIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMyI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5HZW5lcmFsIHVwZGF0ZXMgdG8gZml4IGtub3duIGRlZmVjdHMgYW5kIGVuaGFuY2VtZW50cyBpbXBsZW1lbnRhdGlvbjwvbGk+CiA8L3VsPgotPGgyIGlkPSJjb250ZW50cy0yIj5Db250ZW50czwvaDI+Cis8aDIgaWQ9ImNvbnRlbnRzLTMiPkNvbnRlbnRzPC9oMj4KIDx1bD4KIDxsaT48c3Ryb25nPkhBTC9MTCBBREM8L3N0cm9uZz4gZHJpdmVyCiA8dWw+CkBAIC0zNzEsMTEgKzUwOSwxMSBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjFfMV81IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xXzFfNSIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMS41IC8gMzAtSnVseS0yMDIwPC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0zIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtNCI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5HZW5lcmFsIHVwZGF0ZXMgdG8gZml4IGtub3duIGRlZmVjdHMgYW5kIGVuaGFuY2VtZW50cyBpbXBsZW1lbnRhdGlvbjwvbGk+CiA8L3VsPgotPGgyIGlkPSJjb250ZW50cy0zIj5Db250ZW50czwvaDI+Cis8aDIgaWQ9ImNvbnRlbnRzLTQiPkNvbnRlbnRzPC9oMj4KIDx1bD4KIDxsaT48c3Ryb25nPkhBTDwvc3Ryb25nPiBkcml2ZXIKIDx1bD4KQEAgLTQyOCw3ICs1NjYsNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjExIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xMSIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMS40IC8gMjYtSnVuZS0yMDE5PC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy00Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtNSI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5HZW5lcmFsIHVwZGF0ZXMgdG8gZml4IGtub3duIGRlZmVjdHMgYW5kIGVuaGFuY2VtZW50cyBpbXBsZW1lbnRhdGlvbjwvbGk+CiA8bGk+QWRkIHN1cHBvcnQgb2YgSEFMIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBmZWF0dXJlPC9saT4KQEAgLTYzNSw3ICs3NzMsNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjEwIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xMCIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMS4zIC8gMDktT2N0b2Jlci0yMDE4PC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy01Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtNiI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT48c3Ryb25nPk1haW50ZW5hbmNlIHJlbGVhc2UgdG8gZml4IGtub3duIGRlZmVjdHMgYW5kIGVuaGFuY2VtZW50cyBpbXBsZW1lbnRhdGlvbjwvc3Ryb25nPjwvbGk+CiA8bGk+PHN0cm9uZz5HZW5lcmljIGRyaXZlcnMgY2hhbmdlczwvc3Ryb25nPjwvbGk+CkBAIC02NzgsNyArODE2LDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb245IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb245IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4xLjIgLyAwOS1NYXJjaC0yMDE4PC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy02Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtNyI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5HZW5lcmFsIHVwZGF0ZXMgdG8gZml4IGtub3duIGRlZmVjdHMgYW5kIGVuaGFuY2VtZW50cyBpbXBsZW1lbnRhdGlvbjwvbGk+CiA8bGk+UmVtb3ZlIERhdGUgYW5kIHZlcnNpb24gZnJvbSBoZWFkZXIgZmlsZXM8L2xpPgpAQCAtNzU2LDcgKzg5NCw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uOCIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uOCIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMS4xIC8gMTItTWF5LTIwMTc8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTciPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy04Ij5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uPC9saT4KIDxsaT48c3Ryb25nPkhBTCBHZW5lcmljPC9zdHJvbmc+IHVwZGF0ZQpAQCAtNzgyLDcgKzkyMCw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uNyIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uNyIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMS4wIC8gMTQtQXByaWwtMjAxNzwvc3Ryb25nPjwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtOCI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTkiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+PHN0cm9uZz5BZGQgTG93IExheWVyIGRyaXZlcnMgYWxsb3dpbmcgcGVyZm9ybWFuY2UgYW5kIGZvb3RwcmludCBvcHRpbWl6YXRpb248L3N0cm9uZz4KIDx1bD4KQEAgLTEwNjQsNyArMTIwMiw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uNiIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uNiIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMC41IC8gMDYtRGVjZW1iZXItMjAxNjwvc3Ryb25nPjwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtOSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEwIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBmaXggbWFpbmx5IGtub3duIEkyQyBkZWZlY3RzIGFuZCBlbmhhbmNlbWVudHMgaW1wbGVtZW50YXRpb248L2xpPgogPGxpPjxzdHJvbmc+VGhlIGZvbGxvd2luZyBjaGFuZ2VzIGRvbmUgb24gdGhlIEhBTCBkcml2ZXJzIHJlcXVpcmUgYW4gdXBkYXRlIG9uIHRoZSBhcHBsaWNhdGlvbiBjb2RlIGJhc2VkIG9uIEhBTCBWMS4wLjQ8L3N0cm9uZz4KQEAgLTExNjAsNyArMTI5OCw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uNSIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uNSIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMC40IC8gMjktQXByaWwtMjAxNjwvc3Ryb25nPjwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMTAiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy0xMSI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5HZW5lcmFsIHVwZGF0ZXMgdG8gZml4IGtub3duIGRlZmVjdHMgYW5kIGVuaGFuY2VtZW50cyBpbXBsZW1lbnRhdGlvbi48L2xpPgogPGxpPjxzdHJvbmc+SEFMIFJDQzwvc3Ryb25nPgpAQCAtMTIwMCw3ICsxMzM4LDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb240IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb240IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4wLjMgLyAxMS1KYW51YXJ5LTIwMTY8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTExIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTIiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+UmVtb3ZlIHRoZSAjaWYgZGVmaW5lZChVU0VfSEFMX0xFR0FDWSkgY29uZGl0aW9uIHRvIGluY2x1ZGUgTGVnYWN5L3N0bTMyX2hhbF9sZWdhY3kuaCBieSBkZWZhdWx0LCBpbiBzdG0zMmYxeHhfaGFsX2RlZi5oLjwvbGk+CiA8L3VsPgpAQCAtMTIwOSw3ICsxMzQ3LDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24zIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24zIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4wLjIgLyAxOC1EZWNlbWJlci0yMDE1PC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0xMiI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEzIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uLjwvbGk+CiA8bGk+PHN0cm9uZz5IQUwgZ2VuZXJpYzwvc3Ryb25nPgpAQCAtMTI5NSw3ICsxNDMzLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4wLjEgLyAzMS1KdWx5LTIwMTU8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEzIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTQiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+R2VuZXJhbCB1cGRhdGVzIHRvIGZpeCBrbm93biBkZWZlY3RzIGFuZCBlbmhhbmNlbWVudHMgaW1wbGVtZW50YXRpb24uPC9saT4KIDxsaT48c3Ryb25nPkhBTCBnZW5lcmljPC9zdHJvbmc+CkBAIC0xMzk3LDcgKzE1MzUsNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjEiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjEiIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3Ryb25nPlYxLjAuMCAvIDE1LURlY2VtYmVyLTIwMTQ8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTE0Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTUiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+Rmlyc3QgT2ZmaWNpYWwgcmVsZWFzZSBvZiA8c3Ryb25nPlNUTTMyRjF4eCBIQUwgRHJpdmVyczwvc3Ryb25nPiBmb3IgYWxsIFNUTTMyRjEgZGV2aWNlcy48L2xpPgogPGxpPlRoaXMgcmVsZWFzZSBpcyBpbiBsaW5lIHdpdGggPHN0cm9uZz5TVE0zMkN1YmUgRmlybXdhcmUgc3BlY2lmaWNhdGlvbiBSZXYxLjA8L3N0cm9uZz4gZG9jdW1lbnQ8L2xpPgpkaWZmIC0tZ2l0IGEvU3JjL0xlZ2FjeS9zdG0zMmYxeHhfaGFsX2Nhbi5jIGIvU3JjL0xlZ2FjeS9zdG0zMmYxeHhfaGFsX2Nhbi5jCmluZGV4IDczOWY3NjUuLmZjOTBjZjAgMTAwNjQ0Ci0tLSBhL1NyYy9MZWdhY3kvc3RtMzJmMXh4X2hhbF9jYW4uYworKysgYi9TcmMvTGVnYWN5L3N0bTMyZjF4eF9oYWxfY2FuLmMKQEAgLTEyLDcgKzEyLDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKQEAgLTg4LDYgKzg4LDcgQEAKICAgICAgIChAKSBZb3UgY2FuIHJlZmVyIHRvIHRoZSBDQU4gTGVnYWN5IEhBTCBkcml2ZXIgaGVhZGVyIGZpbGUgZm9yIG1vcmUgdXNlZnVsIG1hY3JvcwogICAgICAgICAgICAgICAgIAogICBAZW5kdmVyYmF0aW0KKyAgICAgICAgICAgCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2hhbC5jIGIvU3JjL3N0bTMyZjF4eF9oYWwuYwppbmRleCA1NzI0NzYxLi5lNjZmYzIyIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2hhbC5jCisrKyBiL1NyYy9zdG0zMmYxeHhfaGFsLmMKQEAgLTUzLDExICs1MywxMSBAQAogICAqIEB7CiAgICovCiAvKioKLSAqIEBicmllZiBTVE0zMkYxeHggSEFMIERyaXZlciB2ZXJzaW9uIG51bWJlciBWMS4xLjgKKyAqIEBicmllZiBTVE0zMkYxeHggSEFMIERyaXZlciB2ZXJzaW9uIG51bWJlcgogICAgKi8KICNkZWZpbmUgX19TVE0zMkYxeHhfSEFMX1ZFUlNJT05fTUFJTiAgICgweDAxVSkgLyohPCBbMzE6MjRdIG1haW4gdmVyc2lvbiAqLwogI2RlZmluZSBfX1NUTTMyRjF4eF9IQUxfVkVSU0lPTl9TVUIxICAgKDB4MDFVKSAvKiE8IFsyMzoxNl0gc3ViMSB2ZXJzaW9uICovCi0jZGVmaW5lIF9fU1RNMzJGMXh4X0hBTF9WRVJTSU9OX1NVQjIgICAoMHgwOFUpIC8qITwgWzE1OjhdICBzdWIyIHZlcnNpb24gKi8KKyNkZWZpbmUgX19TVE0zMkYxeHhfSEFMX1ZFUlNJT05fU1VCMiAgICgweDA5VSkgLyohPCBbMTU6OF0gIHN1YjIgdmVyc2lvbiAqLwogI2RlZmluZSBfX1NUTTMyRjF4eF9IQUxfVkVSU0lPTl9SQyAgICAgKDB4MDBVKSAvKiE8IFs3OjBdICByZWxlYXNlIGNhbmRpZGF0ZSAqLwogI2RlZmluZSBfX1NUTTMyRjF4eF9IQUxfVkVSU0lPTiAgICAgICAgICgoX19TVE0zMkYxeHhfSEFMX1ZFUlNJT05fTUFJTiA8PCAyNClcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRjF4eF9IQUxfVkVSU0lPTl9TVUIxIDw8IDE2KVwKQEAgLTYwMywzICs2MDMsNSBAQAogLyoqCiAgICogQH0KICAgKi8KKworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2hhbF9hZGMuYyBiL1NyYy9zdG0zMmYxeHhfaGFsX2FkYy5jCmluZGV4IGM0MWU3OTUuLjI5ZDc0NjYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfaGFsX2FkYy5jCisrKyBiL1NyYy9zdG0zMmYxeHhfaGFsX2FkYy5jCkBAIC02LDE3ICs2LDggQEAKICAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRvciAoQURDKQogICAqICAgICAgICAgIHBlcmlwaGVyYWw6CiAgICogICAgICAgICAgICsgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwotICAqICAgICAgICAgICAgICsrIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIG9mIEFEQwotICAqICAgICAgICAgICArIE9wZXJhdGlvbiBmdW5jdGlvbnMKLSAgKiAgICAgICAgICAgICArKyBTdGFydCwgc3RvcCwgZ2V0IHJlc3VsdCBvZiBjb252ZXJzaW9ucyBvZiByZWd1bGFyCi0gICogICAgICAgICAgICAgICAgZ3JvdXAsIHVzaW5nIDMgcG9zc2libGUgbW9kZXM6IHBvbGxpbmcsIGludGVycnVwdGlvbiBvciBETUEuCi0gICogICAgICAgICAgICsgQ29udHJvbCBmdW5jdGlvbnMKLSAgKiAgICAgICAgICAgICArKyBDaGFubmVscyBjb25maWd1cmF0aW9uIG9uIHJlZ3VsYXIgZ3JvdXAKLSAgKiAgICAgICAgICAgICArKyBDaGFubmVscyBjb25maWd1cmF0aW9uIG9uIGluamVjdGVkIGdyb3VwCi0gICogICAgICAgICAgICAgKysgQW5hbG9nIFdhdGNoZG9nIGNvbmZpZ3VyYXRpb24KLSAgKiAgICAgICAgICAgKyBTdGF0ZSBmdW5jdGlvbnMKLSAgKiAgICAgICAgICAgICArKyBBREMgc3RhdGUgbWFjaGluZSBtYW5hZ2VtZW50Ci0gICogICAgICAgICAgICAgKysgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudAorICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKKyAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucwogICAqICAgICAgICAgIE90aGVyIGZ1bmN0aW9ucyAoZXh0ZW5kZWQgZnVuY3Rpb25zKSBhcmUgYXZhaWxhYmxlIGluIGZpbGUgCiAgICogICAgICAgICAgInN0bTMyZjF4eF9oYWxfYWRjX2V4LmMiLgogICAqCkBAIC0yNTgsMTEgKzI0OSwxMSBAQAogCiAgICAgIFRoZSBjb21waWxhdGlvbiBmbGFnIFVTRV9IQUxfQURDX1JFR0lTVEVSX0NBTExCQUNLUywgd2hlbiBzZXQgdG8gMSwKICAgICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KLSAgICAgVXNlIEZ1bmN0aW9ucyBAcmVmIEhBTF9BRENfUmVnaXN0ZXJDYWxsYmFjaygpCisgICAgIFVzZSBGdW5jdGlvbnMgSEFMX0FEQ19SZWdpc3RlckNhbGxiYWNrKCkKICAgICAgdG8gcmVnaXN0ZXIgYW4gaW50ZXJydXB0IGNhbGxiYWNrLgogICAgIFsuLl0KIAotICAgICBGdW5jdGlvbiBAcmVmIEhBTF9BRENfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgorICAgICBGdW5jdGlvbiBIQUxfQURDX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICAoKykgQ29udkNwbHRDYWxsYmFjayAgICAgICAgICAgICAgIDogQURDIGNvbnZlcnNpb24gY29tcGxldGUgY2FsbGJhY2sKICAgICAgICAoKykgQ29udkhhbGZDcGx0Q2FsbGJhY2sgICAgICAgICAgIDogQURDIGNvbnZlcnNpb24gRE1BIGhhbGYtdHJhbnNmZXIgY2FsbGJhY2sKICAgICAgICAoKykgTGV2ZWxPdXRPZldpbmRvd0NhbGxiYWNrICAgICAgIDogQURDIGFuYWxvZyB3YXRjaGRvZyAxIGNhbGxiYWNrCkBAIC0yNzQsMTEgKzI2NSwxMSBAQAogICAgICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogICAgIFsuLl0KIAotICAgICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfQURDX1VuUmVnaXN0ZXJDYWxsYmFjayB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgICAgIFVzZSBmdW5jdGlvbiBIQUxfQURDX1VuUmVnaXN0ZXJDYWxsYmFjayB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgICAgIHdlYWsgZnVuY3Rpb24uCiAgICAgWy4uXQogCi0gICAgIEByZWYgSEFMX0FEQ19VblJlZ2lzdGVyQ2FsbGJhY2sgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAorICAgICBIQUxfQURDX1VuUmVnaXN0ZXJDYWxsYmFjayB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgICAgIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAgICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAgKCspIENvbnZDcGx0Q2FsbGJhY2sgICAgICAgICAgICAgICA6IEFEQyBjb252ZXJzaW9uIGNvbXBsZXRlIGNhbGxiYWNrCkBAIC0yOTAsMjcgKzI4MSwyNyBAQAogICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgICAgICAgICAgOiBBREMgTXNwIERlSW5pdCBjYWxsYmFjawogICAgICBbLi5dCiAKLSAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX0FEQ19Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEByZWYgSEFMX0FEQ19TVEFURV9SRVNFVAorICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX0FEQ19Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9BRENfU1RBVEVfUkVTRVQKICAgICAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zOgotICAgICBleGFtcGxlcyBAcmVmIEhBTF9BRENfQ29udkNwbHRDYWxsYmFjaygpLCBAcmVmIEhBTF9BRENfRXJyb3JDYWxsYmFjaygpLgorICAgICBleGFtcGxlcyBIQUxfQURDX0NvbnZDcGx0Q2FsbGJhY2soKSwgSEFMX0FEQ19FcnJvckNhbGxiYWNrKCkuCiAgICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgZnVuY3Rpb25zIHRoYXQgYXJlCi0gICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayBmdW5jdGlvbnMgaW4gdGhlIEByZWYgSEFMX0FEQ19Jbml0KCkvIEByZWYgSEFMX0FEQ19EZUluaXQoKSBvbmx5IHdoZW4KKyAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIGZ1bmN0aW9ucyBpbiB0aGUgSEFMX0FEQ19Jbml0KCkvIEhBTF9BRENfRGVJbml0KCkgb25seSB3aGVuCiAgICAgIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCiAgICAgWy4uXQogCi0gICAgIElmIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX0FEQ19Jbml0KCkvIEByZWYgSEFMX0FEQ19EZUluaXQoKQorICAgICBJZiBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfQURDX0luaXQoKS8gSEFMX0FEQ19EZUluaXQoKQogICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpIHdoYXRldmVyIHRoZSBzdGF0ZS4KICAgICAgWy4uXQogCi0gICAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gQHJlZiBIQUxfQURDX1NUQVRFX1JFQURZIHN0YXRlIG9ubHkuCisgICAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gSEFMX0FEQ19TVEFURV9SRUFEWSBzdGF0ZSBvbmx5LgogICAgICBFeGNlcHRpb24gZG9uZSBNc3BJbml0L01zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQKLSAgICAgaW4gQHJlZiBIQUxfQURDX1NUQVRFX1JFQURZIG9yIEByZWYgSEFMX0FEQ19TVEFURV9SRVNFVCBzdGF0ZSwKKyAgICAgaW4gSEFMX0FEQ19TVEFURV9SRUFEWSBvciBIQUxfQURDX1NUQVRFX1JFU0VUIHN0YXRlLAogICAgICB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZCBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgogICAgIFsuLl0KIAogICAgICBUaGVuLCB0aGUgdXNlciBmaXJzdCByZWdpc3RlcnMgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCi0gICAgIHVzaW5nIEByZWYgSEFMX0FEQ19SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfQURDX0RlSW5pdCgpCi0gICAgIG9yIEByZWYgSEFMX0FEQ19Jbml0KCkgZnVuY3Rpb24uCisgICAgIHVzaW5nIEhBTF9BRENfUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEhBTF9BRENfRGVJbml0KCkKKyAgICAgb3IgSEFMX0FEQ19Jbml0KCkgZnVuY3Rpb24uCiAgICAgIFsuLl0KIAogICAgICBXaGVuIHRoZSBjb21waWxhdGlvbiBmbGFnIFVTRV9IQUxfQURDX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgpAQCAtMzE4LDcgKzMwOSw2IEBACiAgICAgIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnMuCiAgIAogICBAZW5kdmVyYmF0aW0KLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xOTk4LDcgKzE5ODgsNyBAQAogICAqIEBub3RlICAgUG9zc2liaWxpdHkgdG8gdXBkYXRlIHBhcmFtZXRlcnMgb24gdGhlIGZseToKICAgKiAgICAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgY2hhbm5lbCBpbnRvIHJlZ3VsYXIgZ3JvdXAsIGZvbGxvd2luZyAgCiAgICogICAgICAgICBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHJlY29uZmlndXJlIHNvbWUgcGFyYW1ldGVycyAKLSAgKiAgICAgICAgIG9mIHN0cnVjdHVyZSAiQURDX0NoYW5uZWxDb25mVHlwZURlZiIgb24gdGhlIGZseSwgd2l0aG91dCByZXNldGluZyAKKyAgKiAgICAgICAgIG9mIHN0cnVjdHVyZSAiQURDX0NoYW5uZWxDb25mVHlwZURlZiIgb24gdGhlIGZseSwgd2l0aG91dCByZXNldHRpbmcgCiAgICogICAgICAgICB0aGUgQURDLgogICAqICAgICAgICAgVGhlIHNldHRpbmcgb2YgdGhlc2UgcGFyYW1ldGVycyBpcyBjb25kaXRpb25lZCB0byBBREMgc3RhdGUuCiAgICogICAgICAgICBGb3IgcGFyYW1ldGVycyBjb25zdHJhaW50cywgc2VlIGNvbW1lbnRzIG9mIHN0cnVjdHVyZSAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYxeHhfaGFsX2FkY19leC5jIGIvU3JjL3N0bTMyZjF4eF9oYWxfYWRjX2V4LmMKaW5kZXggMjJiYzhkNy4uYWY4NTA4OSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjF4eF9oYWxfYWRjX2V4LmMKKysrIGIvU3JjL3N0bTMyZjF4eF9oYWxfYWRjX2V4LmMKQEAgLTUsMTMgKzUsNyBAQAogICAqIEBicmllZiAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcgCiAgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0b3IgKEFEQykKICAgKiAgICAgICAgICBwZXJpcGhlcmFsOgotICAqICAgICAgICAgICArIE9wZXJhdGlvbiBmdW5jdGlvbnMKLSAgKiAgICAgICAgICAgICArKyBTdGFydCwgc3RvcCwgZ2V0IHJlc3VsdCBvZiBjb252ZXJzaW9ucyBvZiBpbmplY3RlZAotICAqICAgICAgICAgICAgICAgIGdyb3VwLCB1c2luZyAyIHBvc3NpYmxlIG1vZGVzOiBwb2xsaW5nLCBpbnRlcnJ1cHRpb24uCi0gICogICAgICAgICAgICAgKysgTXVsdGltb2RlIGZlYXR1cmUgKGF2YWlsYWJsZSBvbiBkZXZpY2VzIHdpdGggMiBBRENzIG9yIG1vcmUpCi0gICogICAgICAgICAgICAgKysgQ2FsaWJyYXRpb24gKEFEQyBhdXRvbWF0aWMgc2VsZi1jYWxpYnJhdGlvbikKLSAgKiAgICAgICAgICAgKyBDb250cm9sIGZ1bmN0aW9ucwotICAqICAgICAgICAgICAgICsrIENoYW5uZWxzIGNvbmZpZ3VyYXRpb24gb24gaW5qZWN0ZWQgZ3JvdXAKKyAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCiAgICogICAgICAgICAgT3RoZXIgZnVuY3Rpb25zIChnZW5lcmljIGZ1bmN0aW9ucykgYXJlIGF2YWlsYWJsZSBpbiBmaWxlIAogICAqICAgICAgICAgICJzdG0zMmYxeHhfaGFsX2FkYy5jIi4KICAgKgpAQCAtMzIsNyArMjYsNiBAQAogICAgICAgYXZhaWxhYmxlIGluIGZpbGUgb2YgZ2VuZXJpYyBmdW5jdGlvbnMgInN0bTMyZjF4eF9oYWxfYWRjLmMiLgogICBbLi5dCiAgIEBlbmR2ZXJiYXRpbQotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEzNSwyMCArMTI4LDIwIEBACiAgIC8qIFByb2Nlc3MgbG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaGFkYyk7CiAgICAgCi0gIC8qIDEuIENhbGlicmF0aW9uIHByZXJlcXVpc2l0ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAtIEFEQyBtdXN0IGJlIGRpc2FibGVkIGZvciBhdCBsZWFzdCB0d28gQURDIGNsb2NrIGN5Y2xlcyBpbiBkaXNhYmxlICAgKi8KLSAgLyogICAgICBtb2RlIGJlZm9yZSBBREMgZW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0b3AgcG90ZW50aWFsIGNvbnZlcnNpb24gb24gZ29pbmcsIG9uIHJlZ3VsYXIgYW5kIGluamVjdGVkIGdyb3VwcyAgICAgICAqLwotICAvKiBEaXNhYmxlIEFEQyBwZXJpcGhlcmFsICovCi0gIHRtcF9oYWxfc3RhdHVzID0gQURDX0NvbnZlcnNpb25TdG9wX0Rpc2FibGUoaGFkYyk7CisgICAvKiAxLiBEaXNhYmxlIEFEQyBwZXJpcGhlcmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICB0bXBfaGFsX3N0YXR1cyA9IEFEQ19Db252ZXJzaW9uU3RvcF9EaXNhYmxlKGhhZGMpOwogICAKLSAgLyogQ2hlY2sgaWYgQURDIGlzIGVmZmVjdGl2ZWx5IGRpc2FibGVkICovCi0gIGlmICh0bXBfaGFsX3N0YXR1cyA9PSBIQUxfT0spCi0gIHsKLSAgICAvKiBTZXQgQURDIHN0YXRlICovCi0gICAgQURDX1NUQVRFX0NMUl9TRVQoaGFkYy0+U3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgSEFMX0FEQ19TVEFURV9SRUdfQlVTWSB8IEhBTF9BRENfU1RBVEVfSU5KX0JVU1ksCi0gICAgICAgICAgICAgICAgICAgICAgSEFMX0FEQ19TVEFURV9CVVNZX0lOVEVSTkFMKTsKKyAgIC8qIDIuIENhbGlicmF0aW9uIHByZXJlcXVpc2l0ZSBkZWxheSBiZWZvcmUgc3RhcnRpbmcgdGhlIGNhbGlicmF0aW9uLiAgICAgICAqLworICAgLyogICAgLSBBREMgbXVzdCBiZSBlbmFibGVkIGZvciBhdCBsZWFzdCB0d28gQURDIGNsb2NrIGN5Y2xlcyAgICAgICAgICAgICAgICovCisgICB0bXBfaGFsX3N0YXR1cyA9IEFEQ19FbmFibGUoaGFkYyk7CisKKyAgIC8qIENoZWNrIGlmIEFEQyBpcyBlZmZlY3RpdmVseSBlbmFibGVkICovCisgICBpZiAodG1wX2hhbF9zdGF0dXMgPT0gSEFMX09LKQorICAgeworICAgICAvKiBTZXQgQURDIHN0YXRlICovCisgICAgIEFEQ19TVEFURV9DTFJfU0VUKGhhZGMtPlN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICBIQUxfQURDX1NUQVRFX1JFR19CVVNZIHwgSEFMX0FEQ19TVEFURV9JTkpfQlVTWSwKKyAgICAgICAgICAgICAgICAgICAgICAgSEFMX0FEQ19TVEFURV9CVVNZX0lOVEVSTkFMKTsKICAgICAKICAgICAvKiBIYXJkd2FyZSBwcmVyZXF1aXNpdGU6IGRlbGF5IGJlZm9yZSBzdGFydGluZyB0aGUgY2FsaWJyYXRpb24uICAgICAgICAgICovCiAgICAgLyogIC0gQ29tcHV0YXRpb24gb2YgQ1BVIGNsb2NrIGN5Y2xlcyBjb3JyZXNwb25kaW5nIHRvIEFEQyBjbG9jayBjeWNsZXMuICAqLwpAQCAtMTYxLDEwICsxNTQsNyBAQAogICAgIHsKICAgICAgIHdhaXRfbG9vcF9pbmRleC0tOwogICAgIH0KLSAgICAKLSAgICAvKiAyLiBFbmFibGUgdGhlIEFEQyBwZXJpcGhlcmFsICovCi0gICAgQURDX0VuYWJsZShoYWRjKTsKLSAgICAKKwogICAgIC8qIDMuIFJlc2V0cyBBREMgY2FsaWJyYXRpb24gcmVnaXN0ZXJzICovICAKICAgICBTRVRfQklUKGhhZGMtPkluc3RhbmNlLT5DUjIsIEFEQ19DUjJfUlNUQ0FMKTsKICAgICAKQEAgLTk5OSw3ICs5ODksNyBAQAogICAqIEBub3RlICAgUG9zc2liaWxpdHkgdG8gdXBkYXRlIHBhcmFtZXRlcnMgb24gdGhlIGZseToKICAgKiAgICAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgaW5qZWN0ZWQgZ3JvdXAsIGZvbGxvd2luZyBjYWxscyB0byB0aGlzIAogICAqICAgICAgICAgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmVjb25maWd1cmUgc29tZSBwYXJhbWV0ZXJzIG9mIHN0cnVjdHVyZQotICAqICAgICAgICAgIkFEQ19JbmplY3Rpb25Db25mVHlwZURlZiIgb24gdGhlIGZseSwgd2l0aG91dCByZXNldGluZyB0aGUgQURDLgorICAqICAgICAgICAgIkFEQ19JbmplY3Rpb25Db25mVHlwZURlZiIgb24gdGhlIGZseSwgd2l0aG91dCByZXNldHRpbmcgdGhlIEFEQy4KICAgKiAgICAgICAgIFRoZSBzZXR0aW5nIG9mIHRoZXNlIHBhcmFtZXRlcnMgaXMgY29uZGl0aW9uZWQgdG8gQURDIHN0YXRlOiAKICAgKiAgICAgICAgIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2hlbiBBREMgaXMgbm90IHVuZGVyIGNvbnZlcnNpb24uCiAgICogQHBhcmFtICBoYWRjOiBBREMgaGFuZGxlCkBAIC0xMjU3LDcgKzEyNDcsNyBAQAogICAqIEBub3RlICAgUG9zc2liaWxpdHkgdG8gdXBkYXRlIHBhcmFtZXRlcnMgb24gdGhlIGZseToKICAgKiAgICAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgbXVsdGltb2RlIHBhcmFtZXRlcnMsIGZvbGxvd2luZyAgCiAgICogICAgICAgICBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHJlY29uZmlndXJlIHNvbWUgcGFyYW1ldGVycyAKLSAgKiAgICAgICAgIG9mIHN0cnVjdHVyZSAiQURDX011bHRpTW9kZVR5cGVEZWYiIG9uIHRoZSBmbHksIHdpdGhvdXQgcmVzZXRpbmcgCisgICogICAgICAgICBvZiBzdHJ1Y3R1cmUgIkFEQ19NdWx0aU1vZGVUeXBlRGVmIiBvbiB0aGUgZmx5LCB3aXRob3V0IHJlc2V0dGluZyAKICAgKiAgICAgICAgIHRoZSBBRENzIChib3RoIEFEQ3Mgb2YgdGhlIGNvbW1vbiBncm91cCkuCiAgICogICAgICAgICBUaGUgc2V0dGluZyBvZiB0aGVzZSBwYXJhbWV0ZXJzIGlzIGNvbmRpdGlvbmVkIHRvIEFEQyBzdGF0ZS4KICAgKiAgICAgICAgIEZvciBwYXJhbWV0ZXJzIGNvbnN0cmFpbnRzLCBzZWUgY29tbWVudHMgb2Ygc3RydWN0dXJlIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfY2FuLmMgYi9TcmMvc3RtMzJmMXh4X2hhbF9jYW4uYwppbmRleCA5N2VmMzFmLi5iMTQzYWM4IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2hhbF9jYW4uYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF9jYW4uYwpAQCAtMTQyLDkgKzE0Miw5IEBACiAKICAgVGhlIGNvbXBpbGF0aW9uIGRlZmluZSAgVVNFX0hBTF9DQU5fUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEKICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KLSAgVXNlIEZ1bmN0aW9uIEByZWYgSEFMX0NBTl9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYW4gaW50ZXJydXB0IGNhbGxiYWNrLgorICBVc2UgRnVuY3Rpb24gSEFMX0NBTl9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYW4gaW50ZXJydXB0IGNhbGxiYWNrLgogCi0gIEZ1bmN0aW9uIEByZWYgSEFMX0NBTl9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CisgIEZ1bmN0aW9uIEhBTF9DQU5fUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBUeE1haWxib3gwQ29tcGxldGVDYWxsYmFjayAgIDogVHggTWFpbGJveCAwIENvbXBsZXRlIENhbGxiYWNrLgogICAgICgrKSBUeE1haWxib3gxQ29tcGxldGVDYWxsYmFjayAgIDogVHggTWFpbGJveCAxIENvbXBsZXRlIENhbGxiYWNrLgogICAgICgrKSBUeE1haWxib3gyQ29tcGxldGVDYWxsYmFjayAgIDogVHggTWFpbGJveCAyIENvbXBsZXRlIENhbGxiYWNrLgpAQCAtMTYzLDkgKzE2Myw5IEBACiAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLCB0aGUgQ2FsbGJhY2sgSUQKICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KIAotICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfQ0FOX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgVXNlIGZ1bmN0aW9uIEhBTF9DQU5fVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAogICB3ZWFrIGZ1bmN0aW9uLgotICBAcmVmIEhBTF9DQU5fVW5SZWdpc3RlckNhbGxiYWNrIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKKyAgSEFMX0NBTl9VblJlZ2lzdGVyQ2FsbGJhY2sgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAogICBhbmQgdGhlIENhbGxiYWNrIElELgogICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBUeE1haWxib3gwQ29tcGxldGVDYWxsYmFjayAgIDogVHggTWFpbGJveCAwIENvbXBsZXRlIENhbGxiYWNrLgpAQCAtMTg0LDEzICsxODQsMTMgQEAKICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgICAgICAgICA6IENBTiBNc3BJbml0LgogICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgICAgICAgIDogQ0FOIE1zcERlSW5pdC4KIAotICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfQ0FOX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX0NBTl9TVEFURV9SRVNFVCwKKyAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9DQU5fSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfQ0FOX1NUQVRFX1JFU0VULAogICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnM6Ci0gIGV4YW1wbGUgQHJlZiBIQUxfQ0FOX0Vycm9yQ2FsbGJhY2soKS4KKyAgZXhhbXBsZSBIQUxfQ0FOX0Vycm9yQ2FsbGJhY2soKS4KICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUKLSAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIGZ1bmN0aW9uIGluIHRoZSBAcmVmIEhBTF9DQU5fSW5pdCgpLyBAcmVmIEhBTF9DQU5fRGVJbml0KCkgb25seSB3aGVuCisgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayBmdW5jdGlvbiBpbiB0aGUgSEFMX0NBTl9Jbml0KCkvIEhBTF9DQU5fRGVJbml0KCkgb25seSB3aGVuCiAgIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCi0gIGlmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgQHJlZiBIQUxfQ0FOX0luaXQoKS8gQHJlZiBIQUxfQ0FOX0RlSW5pdCgpCisgIGlmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgSEFMX0NBTl9Jbml0KCkvIEhBTF9DQU5fRGVJbml0KCkKICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKQogCiAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gSEFMX0NBTl9TVEFURV9SRUFEWSBzdGF0ZSBvbmx5LgpAQCAtMTk4LDggKzE5OCw4IEBACiAgIGluIEhBTF9DQU5fU1RBVEVfUkVBRFkgb3IgSEFMX0NBTl9TVEFURV9SRVNFVCBzdGF0ZSwKICAgdGh1cyByZWdpc3RlcmVkICh1c2VyKSBNc3BJbml0L0RlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICB1c2luZyBAcmVmIEhBTF9DQU5fUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX0NBTl9EZUluaXQoKQotICBvciBAcmVmIEhBTF9DQU5fSW5pdCgpIGZ1bmN0aW9uLgorICB1c2luZyBIQUxfQ0FOX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBIQUxfQ0FOX0RlSW5pdCgpCisgIG9yIEhBTF9DQU5fSW5pdCgpIGZ1bmN0aW9uLgogCiAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX0NBTl9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIGFuZCBhbGwgY2FsbGJhY2tzCkBAIC02NzYsNyArNjc2LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGEgQ0FOIENhbGxCYWNrLgotICAqICAgICAgICAgQ0FOIGNhbGxhYmNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqICAgICAgICAgQ0FOIGNhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjawogICAqIEBwYXJhbSAgaGNhbiBwb2ludGVyIHRvIGEgQ0FOX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBDQU4gbW9kdWxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKQEAgLTEyNTIsMTUgKzEyNTIsNiBAQAogICAgICAgLyogU2VsZWN0IGFuIGVtcHR5IHRyYW5zbWl0IG1haWxib3ggKi8KICAgICAgIHRyYW5zbWl0bWFpbGJveCA9ICh0c3IgJiBDQU5fVFNSX0NPREUpID4+IENBTl9UU1JfQ09ERV9Qb3M7CiAKLSAgICAgIC8qIENoZWNrIHRyYW5zbWl0IG1haWxib3ggdmFsdWUgKi8KLSAgICAgIGlmICh0cmFuc21pdG1haWxib3ggPiAyVSkKLSAgICAgIHsKLSAgICAgICAgLyogVXBkYXRlIGVycm9yIGNvZGUgKi8KLSAgICAgICAgaGNhbi0+RXJyb3JDb2RlIHw9IEhBTF9DQU5fRVJST1JfSU5URVJOQUw7Ci0KLSAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICAgIH0KLQogICAgICAgLyogU3RvcmUgdGhlIFR4IG1haWxib3ggKi8KICAgICAgICpwVHhNYWlsYm94ID0gKHVpbnQzMl90KTEgPDwgdHJhbnNtaXRtYWlsYm94OwogCkBAIC0xNTMzLDcgKzE1MjQsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGhjYW4tPkluc3RhbmNlLT5zRklGT01haWxCb3hbUnhGaWZvXS5SSVIpID4+IENBTl9SSTBSX0VYSURfUG9zOwogICAgIH0KICAgICBwSGVhZGVyLT5SVFIgPSAoQ0FOX1JJMFJfUlRSICYgaGNhbi0+SW5zdGFuY2UtPnNGSUZPTWFpbEJveFtSeEZpZm9dLlJJUik7Ci0gICAgcEhlYWRlci0+RExDID0gKENBTl9SRFQwUl9ETEMgJiBoY2FuLT5JbnN0YW5jZS0+c0ZJRk9NYWlsQm94W1J4Rmlmb10uUkRUUikgPj4gQ0FOX1JEVDBSX0RMQ19Qb3M7CisgICAgaWYgKCgoQ0FOX1JEVDBSX0RMQyAmIGhjYW4tPkluc3RhbmNlLT5zRklGT01haWxCb3hbUnhGaWZvXS5SRFRSKSA+PiBDQU5fUkRUMFJfRExDX1BvcykgPj0gOFUpCisgICAgeworICAgICAgLyogVHJ1bmNhdGUgRExDIHRvIDggaWYgcmVjZWl2ZWQgZmllbGQgaXMgb3ZlciByYW5nZSAqLworICAgICAgcEhlYWRlci0+RExDID0gOFU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBwSGVhZGVyLT5ETEMgPSAoQ0FOX1JEVDBSX0RMQyAmIGhjYW4tPkluc3RhbmNlLT5zRklGT01haWxCb3hbUnhGaWZvXS5SRFRSKSA+PiBDQU5fUkRUMFJfRExDX1BvczsKKyAgICB9CiAgICAgcEhlYWRlci0+RmlsdGVyTWF0Y2hJbmRleCA9IChDQU5fUkRUMFJfRk1JICYgaGNhbi0+SW5zdGFuY2UtPnNGSUZPTWFpbEJveFtSeEZpZm9dLlJEVFIpID4+IENBTl9SRFQwUl9GTUlfUG9zOwogICAgIHBIZWFkZXItPlRpbWVzdGFtcCA9IChDQU5fUkRUMFJfVElNRSAmIGhjYW4tPkluc3RhbmNlLT5zRklGT01haWxCb3hbUnhGaWZvXS5SRFRSKSA+PiBDQU5fUkRUMFJfVElNRV9Qb3M7CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYxeHhfaGFsX2NlYy5jIGIvU3JjL3N0bTMyZjF4eF9oYWxfY2VjLmMKaW5kZXggOWE2ZWMwYy4uYzBhMTczZCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjF4eF9oYWxfY2VjLmMKKysrIGIvU3JjL3N0bTMyZjF4eF9oYWxfY2VjLmMKQEAgLTMsMTMgKzMsMTQgQEAKICAgKiBAZmlsZSAgICBzdG0zMmYxeHhfaGFsX2NlYy5jCiAgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KICAgKiBAYnJpZWYgICBDRUMgSEFMIG1vZHVsZSBkcml2ZXIuCi0gICogICAgICAgICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZyAKLSAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIEhpZ2ggRGVmaW5pdGlvbiBNdWx0aW1lZGlhIEludGVyZmFjZSAKKyAgKiAgICAgICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nCisgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBIaWdoIERlZmluaXRpb24gTXVsdGltZWRpYSBJbnRlcmZhY2UKICAgKiAgICAgICAgICBDb25zdW1lciBFbGVjdHJvbmljcyBDb250cm9sIFBlcmlwaGVyYWwgKENFQykuCiAgICogICAgICAgICAgICsgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9uCiAgICogICAgICAgICAgICsgSU8gb3BlcmF0aW9uIGZ1bmN0aW9uCiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9uCiAgICoKKyAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTIxLDEzICsyMiwxMyBAQAogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBAdmVyYmF0aW0gICAgICAgCisgIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEhvdyB0byB1c2UgdGhpcyBkcml2ZXIgIyMjIyMKICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQogICAgIFRoZSBDRUMgSEFMIGRyaXZlciBjYW4gYmUgdXNlZCBhcyBmb2xsb3c6Ci0gICAgCisKICAgICAoIykgRGVjbGFyZSBhIENFQ19IYW5kbGVUeXBlRGVmIGhhbmRsZSBzdHJ1Y3R1cmUuCiAgICAgKCMpIEluaXRpYWxpemUgdGhlIENFQyBsb3cgbGV2ZWwgcmVzb3VyY2VzIGJ5IGltcGxlbWVudGluZyB0aGUgSEFMX0NFQ19Nc3BJbml0ICgpQVBJOgogICAgICAgICAoIyMpIEVuYWJsZSB0aGUgQ0VDIGludGVyZmFjZSBjbG9jay4KQEAgLTM4LDI2ICszOSwyNyBAQAogICAgICAgICAgICAgIGFuZCBIQUxfQ0VDX1JlY2VpdmVfSVQoKSBBUElzKToKICAgICAgICAgICAgICgrKyspIENvbmZpZ3VyZSB0aGUgQ0VDIGludGVycnVwdCBwcmlvcml0eS4KICAgICAgICAgICAgICgrKyspIEVuYWJsZSB0aGUgTlZJQyBDRUMgSVJRIGhhbmRsZS4KLSAgICAgICAgICAgICgrKyspIFRoZSBzcGVjaWZpYyBDRUMgaW50ZXJydXB0cyAoVHJhbnNtaXNzaW9uIGNvbXBsZXRlIGludGVycnVwdCwgCisgICAgICAgICAgICAoKysrKSBUaGUgc3BlY2lmaWMgQ0VDIGludGVycnVwdHMgKFRyYW5zbWlzc2lvbiBjb21wbGV0ZSBpbnRlcnJ1cHQsCiAgICAgICAgICAgICAgICAgICBSWE5FIGludGVycnVwdCBhbmQgRXJyb3IgSW50ZXJydXB0cykgd2lsbCBiZSBtYW5hZ2VkIHVzaW5nIHRoZSBtYWNyb3MKLSAgICAgICAgICAgICAgICAgIF9fSEFMX0NFQ19FTkFCTEVfSVQoKSBhbmQgX19IQUxfQ0VDX0RJU0FCTEVfSVQoKSBpbnNpZGUgdGhlIHRyYW5zbWl0IAorICAgICAgICAgICAgICAgICAgX19IQUxfQ0VDX0VOQUJMRV9JVCgpIGFuZCBfX0hBTF9DRUNfRElTQUJMRV9JVCgpIGluc2lkZSB0aGUgdHJhbnNtaXQKICAgICAgICAgICAgICAgICAgIGFuZCByZWNlaXZlIHByb2Nlc3MuCiAKICAgICAoIykgUHJvZ3JhbSB0aGUgQml0IFRpbWluZyBFcnJvciBNb2RlIGFuZCB0aGUgQml0IFBlcmlvZCBFcnJvciBNb2RlIGluIHRoZSBoY2VjIEluaXQgc3RydWN0dXJlLgogCiAgICAgKCMpIEluaXRpYWxpemUgdGhlIENFQyByZWdpc3RlcnMgYnkgY2FsbGluZyB0aGUgSEFMX0NFQ19Jbml0KCkgQVBJLgogCi0gIFsuLl0gICAgICAgIAorICBbLi5dCiAgICAgKEApIFRoaXMgQVBJIChIQUxfQ0VDX0luaXQoKSkgY29uZmlndXJlcyBhbHNvIHRoZSBsb3cgbGV2ZWwgSGFyZHdhcmUgKEdQSU8sIENMT0NLLCBDT1JURVguLi5ldGMpCiAgICAgICAgIGJ5IGNhbGxpbmcgdGhlIGN1c3RvbWVkIEhBTF9DRUNfTXNwSW5pdCgpIEFQSS4KICAgKioqIENhbGxiYWNrIHJlZ2lzdHJhdGlvbiAqKioKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKICAgVGhlIGNvbXBpbGF0aW9uIGRlZmluZSAgVVNFX0hBTF9DRUNfUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEKICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KLSAgVXNlIEZ1bmN0aW9ucyBAcmVmIEhBTF9DRUNfUmVnaXN0ZXJDYWxsYmFjaygpIG9yIEhBTF9DRUNfUmVnaXN0ZXJYWFhDYWxsYmFjaygpCisgIFVzZSBGdW5jdGlvbnMgSEFMX0NFQ19SZWdpc3RlckNhbGxiYWNrKCkgb3IgSEFMX0NFQ19SZWdpc3RlclhYWENhbGxiYWNrKCkKICAgdG8gcmVnaXN0ZXIgYW4gaW50ZXJydXB0IGNhbGxiYWNrLgogCi0gIEZ1bmN0aW9uIEByZWYgSEFMX0NFQ19SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CisgIEZ1bmN0aW9uIEhBTF9DRUNfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBUeENwbHRDYWxsYmFjayAgICAgOiBUeCBUcmFuc2ZlciBjb21wbGV0ZWQgY2FsbGJhY2suCiAgICAgKCspIEVycm9yQ2FsbGJhY2sgICAgICA6IGNhbGxiYWNrIGZvciBlcnJvciBkZXRlY3Rpb24uCiAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICA6IENFQyBNc3BJbml0LgpAQCAtNjUsMTIgKzY3LDEyIEBACiAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLCB0aGUgQ2FsbGJhY2sgSUQKICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KIAotICBGb3Igc3BlY2lmaWMgY2FsbGJhY2sgSEFMX0NFQ19SeENwbHRDYWxsYmFjayB1c2UgZGVkaWNhdGVkIHJlZ2lzdGVyIGNhbGxiYWNrcyAKLSAgQHJlZiBIQUxfQ0VDX1JlZ2lzdGVyUnhDcGx0Q2FsbGJhY2soKS4KKyAgRm9yIHNwZWNpZmljIGNhbGxiYWNrIEhBTF9DRUNfUnhDcGx0Q2FsbGJhY2sgdXNlIGRlZGljYXRlZCByZWdpc3RlciBjYWxsYmFja3MKKyAgSEFMX0NFQ19SZWdpc3RlclJ4Q3BsdENhbGxiYWNrKCkuCiAKLSAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX0NFQ19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgIFVzZSBmdW5jdGlvbiBIQUxfQ0VDX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgd2VhayBmdW5jdGlvbi4KLSAgQHJlZiBIQUxfQ0VDX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKKyAgSEFMX0NFQ19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgKCspIFR4Q3BsdENhbGxiYWNrICAgICA6IFR4IFRyYW5zZmVyIGNvbXBsZXRlZCBjYWxsYmFjay4KQEAgLTc4LDE2ICs4MCwxNiBAQAogICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgOiBDRUMgTXNwSW5pdC4KICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgIDogQ0VDIE1zcERlSW5pdC4KIAotICBGb3IgY2FsbGJhY2sgSEFMX0NFQ19SeENwbHRDYWxsYmFjayB1c2UgZGVkaWNhdGVkIHVucmVnaXN0ZXIgY2FsbGJhY2sgOiAKLSAgQHJlZiBIQUxfQ0VDX1VuUmVnaXN0ZXJSeENwbHRDYWxsYmFjaygpLgorICBGb3IgY2FsbGJhY2sgSEFMX0NFQ19SeENwbHRDYWxsYmFjayB1c2UgZGVkaWNhdGVkIHVucmVnaXN0ZXIgY2FsbGJhY2sgOgorICBIQUxfQ0VDX1VuUmVnaXN0ZXJSeENwbHRDYWxsYmFjaygpLgogCi0gIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9DRUNfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfQ0VDX1NUQVRFX1JFU0VUCisgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBIQUxfQ0VDX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX0NFQ19TVEFURV9SRVNFVAogICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnMgOgotICBleGFtcGxlcyBAcmVmIEhBTF9DRUNfVHhDcGx0Q2FsbGJhY2soKSAsIEByZWYgSEFMX0NFQ19SeENwbHRDYWxsYmFjaygpLgorICBleGFtcGxlcyBIQUxfQ0VDX1R4Q3BsdENhbGxiYWNrKCkgLCBIQUxfQ0VDX1J4Q3BsdENhbGxiYWNrKCkuCiAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgZnVuY3Rpb25zIHRoYXQgYXJlCi0gIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayBmdW5jdGlvbiBpbiB0aGUgQHJlZiBIQUxfQ0VDX0luaXQoKS8gQHJlZiBIQUxfQ0VDX0RlSW5pdCgpIG9ubHkgd2hlbgorICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgZnVuY3Rpb24gaW4gdGhlIEhBTF9DRUNfSW5pdCgpLyBIQUxfQ0VDX0RlSW5pdCgpIG9ubHkgd2hlbgogICB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgotICBpZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX0NFQ19Jbml0KCkgLyBAcmVmIEhBTF9DRUNfRGVJbml0KCkKKyAgaWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfQ0VDX0luaXQoKSAvIEhBTF9DRUNfRGVJbml0KCkKICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGZ1bmN0aW9ucyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKQogCiAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gSEFMX0NFQ19TVEFURV9SRUFEWSBzdGF0ZSBvbmx5LgpAQCAtOTUsOCArOTcsOCBAQAogICBpbiBIQUxfQ0VDX1NUQVRFX1JFQURZIG9yIEhBTF9DRUNfU1RBVEVfUkVTRVQgc3RhdGUsCiAgIHRodXMgcmVnaXN0ZXJlZCAodXNlcikgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCiAgIEluIHRoYXQgY2FzZSBmaXJzdCByZWdpc3RlciB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKLSAgdXNpbmcgQHJlZiBIQUxfQ0VDX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9DRUNfRGVJbml0KCkKLSAgb3IgQHJlZiBIQUxfQ0VDX0luaXQoKSBmdW5jdGlvbi4KKyAgdXNpbmcgSEFMX0NFQ19SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgSEFMX0NFQ19EZUluaXQoKQorICBvciBIQUxfQ0VDX0luaXQoKSBmdW5jdGlvbi4KIAogICBXaGVuIHRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9DRUNfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCiAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBhbmQgYWxsIGNhbGxiYWNrcwpAQCAtMTM0LDcgKzEzNiw3IEBACiAvKioKICAgKiBAfQogICAqLwotIAorCiAvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDYsNyArMTQ4LDcgQEAKIC8qKgogICAqIEB9CiAgICovCi0gIAorCiAvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoqIEBkZWZncm91cCBDRUNfRXhwb3J0ZWRfRnVuY3Rpb25zIENFQyBFeHBvcnRlZCBGdW5jdGlvbnMKQEAgLTE1NCwxNyArMTU2LDE3IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgQ0VDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwotICAqICBAYnJpZWYgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIAorICAqICBAYnJpZWYgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zCiAgICoKLUB2ZXJiYXRpbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorQHZlcmJhdGltCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAjIyMjIyBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgIyMjIyMKLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQogICAgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gaW5pdGlhbGl6ZSB0aGUgQ0VDCi0gICAgICAoKykgVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIG5lZWQgdG8gYmUgY29uZmlndXJlZDogCisgICAgICAoKykgVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIG5lZWQgdG8gYmUgY29uZmlndXJlZDoKICAgICAgICAgKCsrKSBUaW1pbmdFcnJvckZyZWUKLSAgICAgICAgKCsrKSBQZXJpb2RFcnJvckZyZWUgCisgICAgICAgICgrKykgUGVyaW9kRXJyb3JGcmVlCiAgICAgICAgICgrKykgSW5pdGlhdG9yQWRkcmVzcwogCiBAZW5kdmVyYmF0aW0KQEAgLTE3NCwyNCArMTc2LDI0IEBACiAvKioKICAgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIENFQyBtb2RlIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkCiAgICogICAgICAgICBwYXJhbWV0ZXJzIGluIHRoZSBDRUNfSW5pdFR5cGVEZWYgYW5kIGNyZWF0ZXMgdGhlIGFzc29jaWF0ZWQgaGFuZGxlIC4KLSAgKiBAcGFyYW0gaGNlYzogQ0VDIGhhbmRsZQorICAqIEBwYXJhbSBoY2VjIENFQyBoYW5kbGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9DRUNfSW5pdChDRUNfSGFuZGxlVHlwZURlZiAqaGNlYykKIHsKICAgLyogQ2hlY2sgdGhlIENFQyBoYW5kbGUgYWxsb2NhdGlvbiAqLwotICBpZigoaGNlYyA9PSBOVUxMKSB8fChoY2VjLT5Jbml0LlJ4QnVmZmVyID09IE5VTEwpKQorICBpZiAoKGhjZWMgPT0gTlVMTCkgfHwgKGhjZWMtPkluaXQuUnhCdWZmZXIgPT0gTlVMTCkpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKLSAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8gCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19DRUNfQUxMX0lOU1RBTkNFKGhjZWMtPkluc3RhbmNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19DRUNfQklUX1RJTUlOR19FUlJPUl9NT0RFKGhjZWMtPkluaXQuVGltaW5nRXJyb3JGcmVlKSk7CiAgIGFzc2VydF9wYXJhbShJU19DRUNfQklUX1BFUklPRF9FUlJPUl9NT0RFKGhjZWMtPkluaXQuUGVyaW9kRXJyb3JGcmVlKSk7CiAgIGFzc2VydF9wYXJhbShJU19DRUNfQUREUkVTUyhoY2VjLT5Jbml0Lk93bkFkZHJlc3MpKTsKICNpZiAoVVNFX0hBTF9DRUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gIGlmKGhjZWMtPmdTdGF0ZSA9PSBIQUxfQ0VDX1NUQVRFX1JFU0VUKQorICBpZiAoaGNlYy0+Z1N0YXRlID09IEhBTF9DRUNfU1RBVEVfUkVTRVQpCiAgIHsKICAgICAvKiBBbGxvY2F0ZSBsb2NrIHJlc291cmNlIGFuZCBpbml0aWFsaXplIGl0ICovCiAgICAgaGNlYy0+TG9jayA9IEhBTF9VTkxPQ0tFRDsKQEAgLTIwMCw3ICsyMDIsNyBAQAogICAgIGhjZWMtPlJ4Q3BsdENhbGxiYWNrID0gSEFMX0NFQ19SeENwbHRDYWxsYmFjazsgICAvKiBMZWdhY3kgd2VhayBSeENwbHRDYWxsYmFjayAqLwogICAgIGhjZWMtPkVycm9yQ2FsbGJhY2sgPSBIQUxfQ0VDX0Vycm9yQ2FsbGJhY2s7ICAgICAvKiBMZWdhY3kgd2VhayBFcnJvckNhbGxiYWNrICovCiAKLSAgICBpZihoY2VjLT5Nc3BJbml0Q2FsbGJhY2sgPT0gTlVMTCkKKyAgICBpZiAoaGNlYy0+TXNwSW5pdENhbGxiYWNrID09IE5VTEwpCiAgICAgewogICAgICAgaGNlYy0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0NFQ19Nc3BJbml0OyAvKiBMZWdhY3kgd2VhayBNc3BJbml0ICAqLwogICAgIH0KQEAgLTIwOSw3ICsyMTEsNyBAQAogICAgIGhjZWMtPk1zcEluaXRDYWxsYmFjayhoY2VjKTsKICAgfQogI2Vsc2UKLSAgaWYoaGNlYy0+Z1N0YXRlID09IEhBTF9DRUNfU1RBVEVfUkVTRVQpCisgIGlmIChoY2VjLT5nU3RhdGUgPT0gSEFMX0NFQ19TVEFURV9SRVNFVCkKICAgewogICAgIC8qIEFsbG9jYXRlIGxvY2sgcmVzb3VyY2UgYW5kIGluaXRpYWxpemUgaXQgKi8KICAgICBoY2VjLT5Mb2NrID0gSEFMX1VOTE9DS0VEOwpAQCAtMjE5LDQxICsyMjEsNDEgQEAKICNlbmRpZiAvKiBVU0VfSEFMX0NFQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogICBoY2VjLT5nU3RhdGUgPSBIQUxfQ0VDX1NUQVRFX0JVU1k7Ci0gIAorCiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfQ0VDX0RJU0FCTEUoaGNlYyk7Ci0gIAorCiAgIC8qIFdyaXRlIHRvIENFQyBDb250cm9sIFJlZ2lzdGVyICovCiAgIE1PRElGWV9SRUcoaGNlYy0+SW5zdGFuY2UtPkNGR1IsIENFQ19DRkdSX0ZJRUxEUywgaGNlYy0+SW5pdC5UaW1pbmdFcnJvckZyZWUgfCBoY2VjLT5Jbml0LlBlcmlvZEVycm9yRnJlZSk7Ci0gIAorCiAgIC8qIFdyaXRlIHRvIENFQyBPd24gQWRkcmVzcyBSZWdpc3RlciAqLwogICBNT0RJRllfUkVHKGhjZWMtPkluc3RhbmNlLT5PQVIsIENFQ19PQVJfT0EsIGhjZWMtPkluaXQuT3duQWRkcmVzcyk7Ci0gIAorCiAgIC8qIENvbmZpZ3VyZSB0aGUgcHJlc2NhbGVyIHRvIGdlbmVyYXRlIHRoZSByZXF1aXJlZCA1MCBtaWNyb3NlY29uZHMgdGltZSBiYXNlLiovCi0gIE1PRElGWV9SRUcoaGNlYy0+SW5zdGFuY2UtPlBSRVMsIENFQ19QUkVTX1BSRVMsIDUwVSAqIChIQUxfUkNDX0dldFBDTEsxRnJlcSgpLzEwMDAwMDBVKSAtIDFVKTsKLSAgCisgIE1PRElGWV9SRUcoaGNlYy0+SW5zdGFuY2UtPlBSRVMsIENFQ19QUkVTX1BSRVMsIDUwVSAqIChIQUxfUkNDX0dldFBDTEsxRnJlcSgpIC8gMTAwMDAwMFUpIC0gMVUpOworCiAgIC8qIEVuYWJsZSB0aGUgZm9sbG93aW5nIENFQyBJbnRlcnJ1cHQgKi8KICAgX19IQUxfQ0VDX0VOQUJMRV9JVChoY2VjLCBDRUNfSVRfSUUpOwogCiAgIC8qIEVuYWJsZSB0aGUgQ0VDIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfQ0VDX0VOQUJMRShoY2VjKTsKLSAgCisKICAgaGNlYy0+RXJyb3JDb2RlID0gSEFMX0NFQ19FUlJPUl9OT05FOwogICBoY2VjLT5nU3RhdGUgPSBIQUxfQ0VDX1NUQVRFX1JFQURZOwogICBoY2VjLT5SeFN0YXRlID0gSEFMX0NFQ19TVEFURV9SRUFEWTsKLSAgCisKICAgcmV0dXJuIEhBTF9PSzsKIH0KIAogLyoqCi0gICogQGJyaWVmIERlSW5pdGlhbGl6ZXMgdGhlIENFQyBwZXJpcGhlcmFsIAotICAqIEBwYXJhbSBoY2VjOiBDRUMgaGFuZGxlCisgICogQGJyaWVmIERlSW5pdGlhbGl6ZXMgdGhlIENFQyBwZXJpcGhlcmFsCisgICogQHBhcmFtIGhjZWMgQ0VDIGhhbmRsZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NFQ19EZUluaXQoQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpCiB7CiAgIC8qIENoZWNrIHRoZSBDRUMgaGFuZGxlIGFsbG9jYXRpb24gKi8KLSAgaWYoaGNlYyA9PSBOVUxMKQorICBpZiAoaGNlYyA9PSBOVUxMKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQpAQCAtMjY0LDcgKzI2Niw3IEBACiAgIGhjZWMtPmdTdGF0ZSA9IEhBTF9DRUNfU1RBVEVfQlVTWTsKIAogI2lmIChVU0VfSEFMX0NFQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgaWYoaGNlYy0+TXNwRGVJbml0Q2FsbGJhY2sgPT0gTlVMTCkKKyAgaWYgKGhjZWMtPk1zcERlSW5pdENhbGxiYWNrID09IE5VTEwpCiAgIHsKICAgICBoY2VjLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9DRUNfTXNwRGVJbml0OyAvKiBMZWdhY3kgd2VhayBNc3BEZUluaXQgICovCiAgIH0KQEAgLTI3OSwyMSArMjgxLDIxIEBACiAKICAgX19IQUxfUkNDX0NFQ19GT1JDRV9SRVNFVCgpOwogICBfX0hBTF9SQ0NfQ0VDX1JFTEVBU0VfUkVTRVQoKTsKLSAgCisKICAgaGNlYy0+RXJyb3JDb2RlID0gSEFMX0NFQ19FUlJPUl9OT05FOwogICBoY2VjLT5nU3RhdGUgPSBIQUxfQ0VDX1NUQVRFX1JFU0VUOwogICBoY2VjLT5SeFN0YXRlID0gSEFMX0NFQ19TVEFURV9SRVNFVDsKLSAgCisKICAgLyogUHJvY2VzcyBVbmxvY2sgKi8KICAgX19IQUxfVU5MT0NLKGhjZWMpOwotICAKKwogICByZXR1cm4gSEFMX09LOwogfQogCiAvKioKICAgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIE93biBBZGRyZXNzIG9mIHRoZSBDRUMgZGV2aWNlCi0gICogQHBhcmFtIGhjZWM6IENFQyBoYW5kbGUKLSAgKiBAcGFyYW0gIENFQ19Pd25BZGRyZXNzOiBUaGUgQ0VDIG93biBhZGRyZXNzLiAgCisgICogQHBhcmFtIGhjZWMgQ0VDIGhhbmRsZQorICAqIEBwYXJhbSAgQ0VDX093bkFkZHJlc3MgVGhlIENFQyBvd24gYWRkcmVzcy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9DRUNfU2V0RGV2aWNlQWRkcmVzcyhDRUNfSGFuZGxlVHlwZURlZiAqaGNlYywgdWludDE2X3QgQ0VDX093bkFkZHJlc3MpCkBAIC0zMDIsMzQgKzMwNCwzNCBAQAogICBhc3NlcnRfcGFyYW0oSVNfQ0VDX09XTl9BRERSRVNTKENFQ19Pd25BZGRyZXNzKSk7CiAKICAgaWYgKChoY2VjLT5nU3RhdGUgPT0gSEFMX0NFQ19TVEFURV9SRUFEWSkgJiYgKGhjZWMtPlJ4U3RhdGUgPT0gSEFMX0NFQ19TVEFURV9SRUFEWSkpCi0gIHsgCisgIHsKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwotICAgIF9fSEFMX0xPQ0soaGNlYyk7IAotICAgIAorICAgIF9fSEFMX0xPQ0soaGNlYyk7CisKICAgICBoY2VjLT5nU3RhdGUgPSBIQUxfQ0VDX1NUQVRFX0JVU1k7Ci0gIAorCiAgICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICAgIF9fSEFMX0NFQ19ESVNBQkxFKGhjZWMpOwotICAgIAotICAgIGlmKENFQ19Pd25BZGRyZXNzICE9IENFQ19PV05fQUREUkVTU19OT05FKQorCisgICAgaWYgKENFQ19Pd25BZGRyZXNzICE9IENFQ19PV05fQUREUkVTU19OT05FKQogICAgIHsKLSAgICAgICBNT0RJRllfUkVHKGhjZWMtPkluc3RhbmNlLT5PQVIsIENFQ19PQVJfT0EsIGhjZWMtPkluaXQuT3duQWRkcmVzcyk7CisgICAgICBNT0RJRllfUkVHKGhjZWMtPkluc3RhbmNlLT5PQVIsIENFQ19PQVJfT0EsIGhjZWMtPkluaXQuT3duQWRkcmVzcyk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgQ0xFQVJfQklUKGhjZWMtPkluc3RhbmNlLT5PQVIsIENFQ19PQVJfT0EpOyAgCisgICAgICBDTEVBUl9CSVQoaGNlYy0+SW5zdGFuY2UtPk9BUiwgQ0VDX09BUl9PQSk7CiAgICAgfQotICAgICAgICAKKwogICAgIGhjZWMtPmdTdGF0ZSA9IEhBTF9DRUNfU1RBVEVfUkVBRFk7CiAgICAgaGNlYy0+RXJyb3JDb2RlID0gSEFMX0NFQ19FUlJPUl9OT05FOwotICAgIAorCiAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgIF9fSEFMX1VOTE9DSyhoY2VjKTsgCi0gICAgCisgICAgX19IQUxfVU5MT0NLKGhjZWMpOworCiAgICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgICAgX19IQUxfQ0VDX0VOQUJMRShoY2VjKTsKLSAgICAKLSAgICByZXR1cm4gIEhBTF9PSzsgCisKKyAgICByZXR1cm4gIEhBTF9PSzsKICAgfQogICBlbHNlCiAgIHsKQEAgLTMzOSwzMiArMzQxLDMxIEBACiAKIC8qKgogICAqIEBicmllZiBDRUMgTVNQIEluaXQKLSAgKiBAcGFyYW0gaGNlYzogQ0VDIGhhbmRsZQorICAqIEBwYXJhbSBoY2VjIENFQyBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSBfX3dlYWsgdm9pZCBIQUxfQ0VDX01zcEluaXQoQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpCitfX3dlYWsgdm9pZCBIQUxfQ0VDX01zcEluaXQoQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpCiB7CiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKGhjZWMpOwogICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCiAgICAgICAgICAgICB0aGUgSEFMX0NFQ19Nc3BJbml0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCi0gICAqLyAKKyAgICovCiB9CiAKIC8qKgogICAqIEBicmllZiBDRUMgTVNQIERlSW5pdAotICAqIEBwYXJhbSBoY2VjOiBDRUMgaGFuZGxlCisgICogQHBhcmFtIGhjZWMgQ0VDIGhhbmRsZQogICAqIEByZXR2YWwgTm9uZQogICAqLwotIF9fd2VhayB2b2lkIEhBTF9DRUNfTXNwRGVJbml0KENFQ19IYW5kbGVUeXBlRGVmICpoY2VjKQorX193ZWFrIHZvaWQgSEFMX0NFQ19Nc3BEZUluaXQoQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpCiB7CiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKGhjZWMpOwogICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCiAgICAgICAgICAgICB0aGUgSEFMX0NFQ19Nc3BEZUluaXQgY2FuIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKLSAgICovIAorICAgKi8KIH0KLQogI2lmIChVU0VfSEFMX0NFQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKIC8qKgogICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIENFQyBDYWxsYmFjawpAQCAtMzc5LDY1ICszODAsNjYgQEAKICAgKiBAcGFyYW0gIHBDYWxsYmFjayBwb2ludGVyIHRvIHRoZSBDYWxsYmFjayBmdW5jdGlvbgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NFQ19SZWdpc3RlckNhbGxiYWNrKENFQ19IYW5kbGVUeXBlRGVmICpoY2VjLCBIQUxfQ0VDX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsIHBDRUNfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9DRUNfUmVnaXN0ZXJDYWxsYmFjayhDRUNfSGFuZGxlVHlwZURlZiAqaGNlYywgSEFMX0NFQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDRUNfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCi0gIGlmKHBDYWxsYmFjayA9PSBOVUxMKQorICBpZiAocENhbGxiYWNrID09IE5VTEwpCiAgIHsKICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KICAgICBoY2VjLT5FcnJvckNvZGUgfD0gSEFMX0NFQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOwogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgICAvKiBQcm9jZXNzIGxvY2tlZCAqLworICAvKiBQcm9jZXNzIGxvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhjZWMpOwogCi0gIGlmKGhjZWMtPmdTdGF0ZSA9PSBIQUxfQ0VDX1NUQVRFX1JFQURZKQorICBpZiAoaGNlYy0+Z1N0YXRlID09IEhBTF9DRUNfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCiAgICAgewotICAgIGNhc2UgSEFMX0NFQ19UWF9DUExUX0NCX0lEIDoKLSAgICAgIGhjZWMtPlR4Q3BsdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9DRUNfVFhfQ1BMVF9DQl9JRCA6CisgICAgICAgIGhjZWMtPlR4Q3BsdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX0NFQ19FUlJPUl9DQl9JRCA6Ci0gICAgICBoY2VjLT5FcnJvckNhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9DRUNfRVJST1JfQ0JfSUQgOgorICAgICAgICBoY2VjLT5FcnJvckNhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX0NFQ19NU1BJTklUX0NCX0lEIDoKLSAgICAgIGhjZWMtPk1zcEluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfQ0VDX01TUElOSVRfQ0JfSUQgOgorICAgICAgICBoY2VjLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOwogCi0gICBjYXNlIEhBTF9DRUNfTVNQREVJTklUX0NCX0lEIDoKLSAgICAgIGhjZWMtPk1zcERlSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9DRUNfTVNQREVJTklUX0NCX0lEIDoKKyAgICAgICAgaGNlYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOwogCi0gICAgZGVmYXVsdCA6Ci0gICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgIGhjZWMtPkVycm9yQ29kZSB8PSBIQUxfQ0VDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7Ci0gICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCi0gICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwotICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIGhjZWMtPkVycm9yQ29kZSB8PSBIQUxfQ0VDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9Ci0gIGVsc2UgaWYoaGNlYy0+Z1N0YXRlID09IEhBTF9DRUNfU1RBVEVfUkVTRVQpCisgIGVsc2UgaWYgKGhjZWMtPmdTdGF0ZSA9PSBIQUxfQ0VDX1NUQVRFX1JFU0VUKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKLSAgICBjYXNlIEhBTF9DRUNfTVNQSU5JVF9DQl9JRCA6Ci0gICAgICBoY2VjLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0NFQ19NU1BJTklUX0NCX0lEIDoKKyAgICAgICAgaGNlYy0+TXNwSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKIAotICAgY2FzZSBIQUxfQ0VDX01TUERFSU5JVF9DQl9JRCA6Ci0gICAgICBoY2VjLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfQ0VDX01TUERFSU5JVF9DQl9JRCA6CisgICAgICAgIGhjZWMtPk1zcERlSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKIAotICAgIGRlZmF1bHQgOgotICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgICBoY2VjLT5FcnJvckNvZGUgfD0gSEFMX0NFQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOwotICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCi0gICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwotICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIGhjZWMtPkVycm9yQ29kZSB8PSBIQUxfQ0VDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTQ1NiwxMSArNDU4LDExIEBACiAKIC8qKgogICAqIEBicmllZiAgVW5yZWdpc3RlciBhbiBDRUMgQ2FsbGJhY2sKLSAgKiAgICAgICAgIENFQyBjYWxsYWJjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiAgICAgICAgIENFQyBjYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKICAgKiBAcGFyYW0gaGNlYyB1YXJ0IGhhbmRsZQogICAqIEBwYXJhbSBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9DRUNfVFhfQ1BMVF9DQl9JRCBUeCBDb21wbGV0ZSBjYWxsYmFjayBJREQKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0NFQ19UWF9DUExUX0NCX0lEIFR4IENvbXBsZXRlIGNhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9DRUNfRVJST1JfQ0JfSUQgRXJyb3IgY2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0NFQ19NU1BJTklUX0NCX0lEIE1zcEluaXQgY2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0NFQ19NU1BERUlOSVRfQ0JfSUQgTXNwRGVJbml0IGNhbGxiYWNrIElECkBAIC00NzMsNTIgKzQ3NSw1MiBAQAogICAvKiBQcm9jZXNzIGxvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhjZWMpOwogCi0gIGlmKGhjZWMtPmdTdGF0ZSA9PSBIQUxfQ0VDX1NUQVRFX1JFQURZKQorICBpZiAoaGNlYy0+Z1N0YXRlID09IEhBTF9DRUNfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCiAgICAgewotICAgIGNhc2UgSEFMX0NFQ19UWF9DUExUX0NCX0lEIDoKLSAgICAgIGhjZWMtPlR4Q3BsdENhbGxiYWNrID0gSEFMX0NFQ19UeENwbHRDYWxsYmFjazsgIC8qIExlZ2FjeSB3ZWFrICBUeENwbHRDYWxsYmFjayAqLwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9DRUNfVFhfQ1BMVF9DQl9JRCA6CisgICAgICAgIGhjZWMtPlR4Q3BsdENhbGxiYWNrID0gSEFMX0NFQ19UeENwbHRDYWxsYmFjazsgIC8qIExlZ2FjeSB3ZWFrICBUeENwbHRDYWxsYmFjayAqLworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX0NFQ19FUlJPUl9DQl9JRCA6Ci0gICAgICBoY2VjLT5FcnJvckNhbGxiYWNrID0gSEFMX0NFQ19FcnJvckNhbGxiYWNrOyAgLyogTGVnYWN5IHdlYWsgRXJyb3JDYWxsYmFjayAgICovCi0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0NFQ19FUlJPUl9DQl9JRCA6CisgICAgICAgIGhjZWMtPkVycm9yQ2FsbGJhY2sgPSBIQUxfQ0VDX0Vycm9yQ2FsbGJhY2s7ICAvKiBMZWdhY3kgd2VhayBFcnJvckNhbGxiYWNrICAgKi8KKyAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEhBTF9DRUNfTVNQSU5JVF9DQl9JRCA6Ci0gICAgICBoY2VjLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfQ0VDX01zcEluaXQ7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0NFQ19NU1BJTklUX0NCX0lEIDoKKyAgICAgICAgaGNlYy0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0NFQ19Nc3BJbml0OworICAgICAgICBicmVhazsKIAotICAgY2FzZSBIQUxfQ0VDX01TUERFSU5JVF9DQl9JRCA6Ci0gICAgICBoY2VjLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9DRUNfTXNwRGVJbml0OwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9DRUNfTVNQREVJTklUX0NCX0lEIDoKKyAgICAgICAgaGNlYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfQ0VDX01zcERlSW5pdDsKKyAgICAgICAgYnJlYWs7CiAKLSAgICBkZWZhdWx0IDoKLSAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgICAgaGNlYy0+RXJyb3JDb2RlIHw9IEhBTF9DRUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKLSAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwotICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKLSAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdCA6CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgICAgICBoY2VjLT5FcnJvckNvZGUgfD0gSEFMX0NFQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCisgICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQotICBlbHNlIGlmKGhjZWMtPmdTdGF0ZSA9PSBIQUxfQ0VDX1NUQVRFX1JFU0VUKQorICBlbHNlIGlmIChoY2VjLT5nU3RhdGUgPT0gSEFMX0NFQ19TVEFURV9SRVNFVCkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKICAgICB7Ci0gICAgY2FzZSBIQUxfQ0VDX01TUElOSVRfQ0JfSUQgOgotICAgICAgaGNlYy0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0NFQ19Nc3BJbml0OwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9DRUNfTVNQSU5JVF9DQl9JRCA6CisgICAgICAgIGhjZWMtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9DRUNfTXNwSW5pdDsKKyAgICAgICAgYnJlYWs7CiAKLSAgIGNhc2UgSEFMX0NFQ19NU1BERUlOSVRfQ0JfSUQgOgotICAgICAgaGNlYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfQ0VDX01zcERlSW5pdDsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfQ0VDX01TUERFSU5JVF9DQl9JRCA6CisgICAgICAgIGhjZWMtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX0NFQ19Nc3BEZUluaXQ7CisgICAgICAgIGJyZWFrOwogCi0gICAgZGVmYXVsdCA6Ci0gICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgIGhjZWMtPkVycm9yQ29kZSB8PSBIQUxfQ0VDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7Ci0gICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaGNlYy0+RXJyb3JDb2RlIHw9IEhBTF9DRUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLworICAgICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOworICAgICAgICBicmVhazsKICAgICB9CiAgIH0KICAgZWxzZQpAQCAtNTQ2LDcgKzU0OCw3IEBACiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAotICBpZihwQ2FsbGJhY2sgPT0gTlVMTCkKKyAgaWYgKHBDYWxsYmFjayA9PSBOVUxMKQogICB7CiAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCiAgICAgaGNlYy0+RXJyb3JDb2RlIHw9IEhBTF9DRUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKQEAgLTU1NSw3ICs1NTcsNyBAQAogICAvKiBQcm9jZXNzIGxvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhjZWMpOwogCi0gIGlmKEhBTF9DRUNfU1RBVEVfUkVBRFkgPT0gaGNlYy0+UnhTdGF0ZSkKKyAgaWYgKEhBTF9DRUNfU1RBVEVfUkVBRFkgPT0gaGNlYy0+UnhTdGF0ZSkKICAgewogICAgIGhjZWMtPlJ4Q3BsdENhbGxiYWNrID0gcENhbGxiYWNrOwogICB9CkBAIC01ODUsNyArNTg3LDcgQEAKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhoY2VjKTsKIAotICBpZihIQUxfQ0VDX1NUQVRFX1JFQURZID09IGhjZWMtPlJ4U3RhdGUpCisgIGlmIChIQUxfQ0VDX1NUQVRFX1JFQURZID09IGhjZWMtPlJ4U3RhdGUpCiAgIHsKICAgICBoY2VjLT5SeENwbHRDYWxsYmFjayA9IEhBTF9DRUNfUnhDcGx0Q2FsbGJhY2s7IC8qIExlZ2FjeSB3ZWFrICBDRUMgUnhDcGx0Q2FsbGJhY2sgICovCiAgIH0KQEAgLTYwNywyOCArNjA5LDI3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBDRUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMiBJbnB1dCBhbmQgT3V0cHV0IG9wZXJhdGlvbiBmdW5jdGlvbnMgCi0gICogIEBicmllZiBDRUMgVHJhbnNtaXQvUmVjZWl2ZSBmdW5jdGlvbnMgCisvKiogQGRlZmdyb3VwIENFQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIElucHV0IGFuZCBPdXRwdXQgb3BlcmF0aW9uIGZ1bmN0aW9ucworICAqICBAYnJpZWYgQ0VDIFRyYW5zbWl0L1JlY2VpdmUgZnVuY3Rpb25zCiAgICoKLUB2ZXJiYXRpbSAgIAorQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICMjIyMjIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMgIyMjIyMgCi0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgCi0gICAgWy4uXQorICAgICAgICAgICAgICAgICAgICAgICMjIyMjIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMgIyMjIyMKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgVGhpcyBzdWJzZWN0aW9uIHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBtYW5hZ2UgdGhlIENFQyBkYXRhIHRyYW5zZmVycy4KLSAgICAKKwogICAgICgjKSBUaGUgQ0VDIGhhbmRsZSBtdXN0IGNvbnRhaW4gdGhlIGluaXRpYXRvciAoVFggc2lkZSkgYW5kIHRoZSBkZXN0aW5hdGlvbiAoUlggc2lkZSkKICAgICAgICAgbG9naWNhbCBhZGRyZXNzZXMgKDQtYml0IGxvbmcgYWRkcmVzc2VzLCAweEYgZm9yIGJyb2FkY2FzdCBtZXNzYWdlcyBkZXN0aW5hdGlvbikKLSAgICAKLSAgICAoIykgVGhlIGNvbW11bmljYXRpb24gaXMgcGVyZm9ybWVkIHVzaW5nIEludGVycnVwdHMuIAorCisgICAgKCMpIFRoZSBjb21tdW5pY2F0aW9uIGlzIHBlcmZvcm1lZCB1c2luZyBJbnRlcnJ1cHRzLgogICAgICAgICAgICBUaGVzZSBBUEkncyByZXR1cm4gdGhlIEhBTCBzdGF0dXMuCi0gICAgICAgICAgIFRoZSBlbmQgb2YgdGhlIGRhdGEgcHJvY2Vzc2luZyB3aWxsIGJlIGluZGljYXRlZCB0aHJvdWdoIHRoZSAKKyAgICAgICAgICAgVGhlIGVuZCBvZiB0aGUgZGF0YSBwcm9jZXNzaW5nIHdpbGwgYmUgaW5kaWNhdGVkIHRocm91Z2ggdGhlCiAgICAgICAgICAgIGRlZGljYXRlZCBDRUMgSVJRIHdoZW4gdXNpbmcgSW50ZXJydXB0IG1vZGUuCi0gICAgICAgICAgIFRoZSBIQUxfQ0VDX1R4Q3BsdENhbGxiYWNrKCksIEhBTF9DRUNfUnhDcGx0Q2FsbGJhY2soKSB1c2VyIGNhbGxiYWNrcyAKKyAgICAgICAgICAgVGhlIEhBTF9DRUNfVHhDcGx0Q2FsbGJhY2soKSwgSEFMX0NFQ19SeENwbHRDYWxsYmFjaygpIHVzZXIgY2FsbGJhY2tzCiAgICAgICAgICAgIHdpbGwgYmUgZXhlY3V0ZWQgcmVzcGVjdGl2ZWx5IGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zbWl0IG9yIFJlY2VpdmUgcHJvY2VzcwotICAgICAgICAgICBUaGUgSEFMX0NFQ19FcnJvckNhbGxiYWNrKCkgdXNlciBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gYSBjb21tdW5pY2F0aW9uIAorICAgICAgICAgICBUaGUgSEFMX0NFQ19FcnJvckNhbGxiYWNrKCkgdXNlciBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gYSBjb21tdW5pY2F0aW9uCiAgICAgICAgICAgIGVycm9yIGlzIGRldGVjdGVkCi0gICAgICAgIAorCiAgICAgKCMpIEFQSSdzIHdpdGggSW50ZXJydXB0IGFyZSA6CiAgICAgICAgICAoKykgSEFMX0NFQ19UcmFuc21pdF9JVCgpCiAgICAgICAgICAoKykgSEFMX0NFQ19JUlFIYW5kbGVyKCkKQEAgLTYzNywzNyArNjM4LDM4IEBACiAgICAgICAgICAoKykgSEFMX0NFQ19UeENwbHRDYWxsYmFjaygpCiAgICAgICAgICAoKykgSEFMX0NFQ19SeENwbHRDYWxsYmFjaygpCiAgICAgICAgICAoKykgSEFMX0NFQ19FcnJvckNhbGxiYWNrKCkKLSAgICAgIAorCiBAZW5kdmVyYmF0aW0KICAgKiBAewogICAqLwogCiAvKioKLSAgKiBAYnJpZWYgU2VuZCBkYXRhIGluIGludGVycnVwdCBtb2RlIAotICAqIEBwYXJhbSBoY2VjOiBDRUMgaGFuZGxlCi0gICogQHBhcmFtIEluaXRpYXRvckFkZHJlc3M6IEluaXRpYXRvciBhZGRyZXNzCi0gICogQHBhcmFtIERlc3RpbmF0aW9uQWRkcmVzczogZGVzdGluYXRpb24gbG9naWNhbCBhZGRyZXNzICAgICAgCi0gICogQHBhcmFtIHBEYXRhOiBwb2ludGVyIHRvIGlucHV0IGJ5dGUgZGF0YSBidWZmZXIKLSAgKiBAcGFyYW0gU2l6ZTogYW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudCBpbiBieXRlcyAod2l0aG91dCBjb3VudGluZyB0aGUgaGVhZGVyKS4KKyAgKiBAYnJpZWYgU2VuZCBkYXRhIGluIGludGVycnVwdCBtb2RlCisgICogQHBhcmFtIGhjZWMgQ0VDIGhhbmRsZQorICAqIEBwYXJhbSBJbml0aWF0b3JBZGRyZXNzIEluaXRpYXRvciBhZGRyZXNzCisgICogQHBhcmFtIERlc3RpbmF0aW9uQWRkcmVzcyBkZXN0aW5hdGlvbiBsb2dpY2FsIGFkZHJlc3MKKyAgKiBAcGFyYW0gcERhdGEgcG9pbnRlciB0byBpbnB1dCBieXRlIGRhdGEgYnVmZmVyCisgICogQHBhcmFtIFNpemUgYW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudCBpbiBieXRlcyAod2l0aG91dCBjb3VudGluZyB0aGUgaGVhZGVyKS4KICAgKiAgICAgICAgICAgICAgMCBtZWFucyBvbmx5IHRoZSBoZWFkZXIgaXMgc2VudCAocGluZyBvcGVyYXRpb24pLgotICAqICAgICAgICAgICAgICBNYXhpbXVtIFRYIHNpemUgaXMgMTUgYnl0ZXMgKDEgb3Bjb2RlIGFuZCB1cCB0byAxNCBvcGVyYW5kcykuICAgIAorICAqICAgICAgICAgICAgICBNYXhpbXVtIFRYIHNpemUgaXMgMTUgYnl0ZXMgKDEgb3Bjb2RlIGFuZCB1cCB0byAxNCBvcGVyYW5kcykuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfQ0VDX1RyYW5zbWl0X0lUKENFQ19IYW5kbGVUeXBlRGVmICpoY2VjLCB1aW50OF90IEluaXRpYXRvckFkZHJlc3MsdWludDhfdCBEZXN0aW5hdGlvbkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NFQ19UcmFuc21pdF9JVChDRUNfSGFuZGxlVHlwZURlZiAqaGNlYywgdWludDhfdCBJbml0aWF0b3JBZGRyZXNzLCB1aW50OF90IERlc3RpbmF0aW9uQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcERhdGEsIHVpbnQzMl90IFNpemUpCiB7Ci0gIC8qIGlmIHRoZSBJUCBpc24ndCBhbHJlYWR5IGJ1c3kgYW5kIGlmIHRoZXJlIGlzIG5vIHByZXZpb3VzIHRyYW5zbWlzc2lvbgorICAvKiBpZiB0aGUgcGVyaXBoZXJhbCBpc24ndCBhbHJlYWR5IGJ1c3kgYW5kIGlmIHRoZXJlIGlzIG5vIHByZXZpb3VzIHRyYW5zbWlzc2lvbgogICAgICBhbHJlYWR5IHBlbmRpbmcgZHVlIHRvIGFyYml0cmF0aW9uIGxvc3QgKi8KLSAgaWYoaGNlYy0+Z1N0YXRlID09IEhBTF9DRUNfU1RBVEVfUkVBRFkpIAotICB7ICAgIAotICAgIGlmKChwRGF0YSA9PSBOVUxMICkgJiYgKFNpemUgPiAwVSkpIAorICBpZiAoaGNlYy0+Z1N0YXRlID09IEhBTF9DRUNfU1RBVEVfUkVBRFkpCisgIHsKKyAgICBpZiAoKHBEYXRhID09IE5VTEwpICYmIChTaXplID4gMFUpKQogICAgIHsKICAgICAgIHJldHVybiAgSEFMX0VSUk9SOwogICAgIH0KIAogICAgIGFzc2VydF9wYXJhbShJU19DRUNfQUREUkVTUyhEZXN0aW5hdGlvbkFkZHJlc3MpKTsKLSAgICBhc3NlcnRfcGFyYW0oSVNfQ0VDX0FERFJFU1MoSW5pdGlhdG9yQWRkcmVzcykpOyAKKyAgICBhc3NlcnRfcGFyYW0oSVNfQ0VDX0FERFJFU1MoSW5pdGlhdG9yQWRkcmVzcykpOwogICAgIGFzc2VydF9wYXJhbShJU19DRUNfTVNHU0laRShTaXplKSk7Ci0gICAgCisKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaGNlYyk7CiAgICAgaGNlYy0+cFR4QnVmZlB0ciA9IHBEYXRhOwpAQCAtNjgwLDU1ICs2ODIsNTUgQEAKIAogICAgIC8qIHNlbmQgaGVhZGVyIGJsb2NrICovCiAgICAgaGNlYy0+SW5zdGFuY2UtPlRYRCA9ICh1aW50OF90KSgodWludDMyX3QpSW5pdGlhdG9yQWRkcmVzcyA8PCBDRUNfSU5JVElBVE9SX0xTQl9QT1MpIHwgRGVzdGluYXRpb25BZGRyZXNzOwotICAgIAorCiAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgIF9fSEFMX1VOTE9DSyhoY2VjKTsgCisgICAgX19IQUxfVU5MT0NLKGhjZWMpOwogCiAgICAgLyogY2FzZSBubyBkYXRhIHRvIGJlIHNlbnQsIHNlbmRlciBpcyBvbmx5IHBpbmdpbmcgdGhlIHN5c3RlbSAqLwogICAgIGlmIChTaXplICE9IDApCi0gICAgeyAgICAKKyAgICB7CiAgICAgICAvKiBTZXQgVFggU3RhcnQgb2YgTWVzc2FnZSAoVFhTT00pIGJpdCAqLwogICAgICAgTU9ESUZZX1JFRyhoY2VjLT5JbnN0YW5jZS0+Q1NSLCBDRUNfRkxBR19UUkFOU01JVF9NQVNLLCBDRUNfRkxBR19UU09NKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgIC8qIFNlbmQgYSBwaW5nIGNvbW1hbmQgKi8KLSAgICAgIE1PRElGWV9SRUcoaGNlYy0+SW5zdGFuY2UtPkNTUiwgQ0VDX0ZMQUdfVFJBTlNNSVRfTUFTSywgQ0VDX0ZMQUdfVEVPTXxDRUNfRkxBR19UU09NKTsKKyAgICAgIE1PRElGWV9SRUcoaGNlYy0+SW5zdGFuY2UtPkNTUiwgQ0VDX0ZMQUdfVFJBTlNNSVRfTUFTSywgQ0VDX0ZMQUdfVEVPTSB8IENFQ19GTEFHX1RTT00pOwogICAgIH0KICAgICByZXR1cm4gSEFMX09LOwogCiAgIH0KICAgZWxzZQogICB7Ci0gICAgcmV0dXJuIEhBTF9CVVNZOyAgIAorICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQogfQogCiAvKioKICAgKiBAYnJpZWYgR2V0IHNpemUgb2YgdGhlIHJlY2VpdmVkIGZyYW1lLgotICAqIEBwYXJhbSBoY2VjOiBDRUMgaGFuZGxlCisgICogQHBhcmFtIGhjZWMgQ0VDIGhhbmRsZQogICAqIEByZXR2YWwgRnJhbWUgc2l6ZQogICAqLwotdWludDMyX3QgSEFMX0NFQ19HZXRMYXN0UmVjZWl2ZWRGcmFtZVNpemUoQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpCit1aW50MzJfdCBIQUxfQ0VDX0dldExhc3RSZWNlaXZlZEZyYW1lU2l6ZShjb25zdCBDRUNfSGFuZGxlVHlwZURlZiAqaGNlYykKIHsKICAgcmV0dXJuIGhjZWMtPlJ4WGZlclNpemU7CiB9CiAKIC8qKgogICAqIEBicmllZiBDaGFuZ2UgUnggQnVmZmVyLgotICAqIEBwYXJhbSBoY2VjOiBDRUMgaGFuZGxlCi0gICogQHBhcmFtIFJ4YnVmZmVyOiBSeCBCdWZmZXIKLSAgKiBAbm90ZSAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG9ubHkgaW5zaWRlIHRoZSBIQUxfQ0VDX1J4Q3BsdENhbGxiYWNrKCkgCisgICogQHBhcmFtIGhjZWMgQ0VDIGhhbmRsZQorICAqIEBwYXJhbSBSeGJ1ZmZlciBSeCBCdWZmZXIKKyAgKiBAbm90ZSAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG9ubHkgaW5zaWRlIHRoZSBIQUxfQ0VDX1J4Q3BsdENhbGxiYWNrKCkKICAgKiBAcmV0dmFsIEZyYW1lIHNpemUKICAgKi8KLXZvaWQgSEFMX0NFQ19DaGFuZ2VSeEJ1ZmZlcihDRUNfSGFuZGxlVHlwZURlZiAqaGNlYywgdWludDhfdCogUnhidWZmZXIpCit2b2lkIEhBTF9DRUNfQ2hhbmdlUnhCdWZmZXIoQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMsIHVpbnQ4X3QgKlJ4YnVmZmVyKQogewotICBoY2VjLT5Jbml0LlJ4QnVmZmVyID0gUnhidWZmZXI7IAorICBoY2VjLT5Jbml0LlJ4QnVmZmVyID0gUnhidWZmZXI7CiB9Ci0gIAorCiAvKioKICAgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBoYW5kbGVzIENFQyBpbnRlcnJ1cHQgcmVxdWVzdHMuCi0gICogQHBhcmFtIGhjZWM6IENFQyBoYW5kbGUKKyAgKiBAcGFyYW0gaGNlYyBDRUMgaGFuZGxlCiAgICogQHJldHZhbCBOb25lCiAgICovCiB2b2lkIEhBTF9DRUNfSVJRSGFuZGxlcihDRUNfSGFuZGxlVHlwZURlZiAqaGNlYykKQEAgLTc0NiwzMCArNzQ4LDMwIEBACiAgIHsKICAgICAvKiBBY2tub3dsZWRnZW1lbnQgb2YgdGhlIGVycm9yICovCiAgICAgX19IQUxfQ0VDX0NMRUFSX0ZMQUcoaGNlYywgQ0VDX0ZMQUdfVEVSUik7Ci0gICAgCisKICAgICBoY2VjLT5nU3RhdGUgPSBIQUxfQ0VDX1NUQVRFX1JFQURZOwogICB9Ci0gIAorCiAgIC8qIFJlY2VpdmUgZXJyb3IgKi8KICAgaWYgKEhBTF9JU19CSVRfU0VUKGl0ZmxhZywgQ0VDX0ZMQUdfUkVSUikpCiAgIHsKICAgICAvKiBBY2tub3dsZWRnZW1lbnQgb2YgdGhlIGVycm9yICovCiAgICAgX19IQUxfQ0VDX0NMRUFSX0ZMQUcoaGNlYywgQ0VDX0ZMQUdfUkVSUik7Ci0gICAgaGNlYy0+SW5pdC5SeEJ1ZmZlci09aGNlYy0+UnhYZmVyU2l6ZTsKLSAgICBoY2VjLT5SeFhmZXJTaXplID0gMFU7IAorICAgIGhjZWMtPkluaXQuUnhCdWZmZXIgLT0gaGNlYy0+UnhYZmVyU2l6ZTsKKyAgICBoY2VjLT5SeFhmZXJTaXplID0gMFU7CiAgICAgaGNlYy0+UnhTdGF0ZSA9IEhBTF9DRUNfU1RBVEVfUkVBRFk7CiAgIH0KLSAgCi0gIGlmKChoY2VjLT5FcnJvckNvZGUgJiBDRUNfRVNSX0FMTF9FUlJPUikgIT0gMFUpCisKKyAgaWYgKChoY2VjLT5FcnJvckNvZGUgJiBDRUNfRVNSX0FMTF9FUlJPUikgIT0gMFUpCiAgIHsKICAgICAvKiBFcnJvciAgQ2FsbCBCYWNrICovCiAjaWYgKFVTRV9IQUxfQ0VDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICAgIGhjZWMtPkVycm9yQ2FsbGJhY2soaGNlYyk7Ci0jZWxzZSAgICAKKyNlbHNlCiAgICAgSEFMX0NFQ19FcnJvckNhbGxiYWNrKGhjZWMpOwogI2VuZGlmIC8qIFVTRV9IQUxfQ0VDX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogICB9Ci0gIAorCiAgIC8qIFRyYW5zbWl0IGJ5dGUgcmVxdWVzdCBvciBibG9jayB0cmFuc2ZlciBmaW5pc2hlZCAqLwogICBpZiAoSEFMX0lTX0JJVF9TRVQoaXRmbGFnLCBDRUNfRkxBR19UQlRSRikpCiAgIHsKQEAgLTc3OSwzNCArNzgxLDMzIEBACiAgIC8qIFJlY2VpdmUgYnl0ZSBvciBibG9jayB0cmFuc2ZlciBmaW5pc2hlZCAqLwogICBpZiAoSEFMX0lTX0JJVF9TRVQoaXRmbGFnLCBDRUNfRkxBR19SQlRGKSkKICAgewotICAgIGlmKGhjZWMtPlJ4WGZlclNpemUgPT0gMFUpCisgICAgaWYgKGhjZWMtPlJ4WGZlclNpemUgPT0gMFUpCiAgICAgewotICAgICAgLyogcmVjZXB0aW9uIGlzIHN0YXJ0aW5nICovIAorICAgICAgLyogcmVjZXB0aW9uIGlzIHN0YXJ0aW5nICovCiAgICAgICBoY2VjLT5SeFN0YXRlID0gSEFMX0NFQ19TVEFURV9CVVNZX1JYOwogICAgIH0KICAgICBDRUNfUmVjZWl2ZV9JVChoY2VjKTsKICAgfQogfQogCi0KIC8qKgogICAqIEBicmllZiBUeCBUcmFuc2ZlciBjb21wbGV0ZWQgY2FsbGJhY2sKLSAgKiBAcGFyYW0gaGNlYzogQ0VDIGhhbmRsZQorICAqIEBwYXJhbSBoY2VjIENFQyBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSBfX3dlYWsgdm9pZCBIQUxfQ0VDX1R4Q3BsdENhbGxiYWNrKENFQ19IYW5kbGVUeXBlRGVmICpoY2VjKQorX193ZWFrIHZvaWQgSEFMX0NFQ19UeENwbHRDYWxsYmFjayhDRUNfSGFuZGxlVHlwZURlZiAqaGNlYykKIHsKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaGNlYyk7CiAgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKICAgICAgICAgICAgIHRoZSBIQUxfQ0VDX1R4Q3BsdENhbGxiYWNrIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCi0gICAqLyAKKyAgICovCiB9CiAKIC8qKgogICAqIEBicmllZiBSeCBUcmFuc2ZlciBjb21wbGV0ZWQgY2FsbGJhY2sKLSAgKiBAcGFyYW0gaGNlYzogQ0VDIGhhbmRsZQotICAqIEBwYXJhbSBSeEZyYW1lU2l6ZTogU2l6ZSBvZiBmcmFtZQorICAqIEBwYXJhbSBoY2VjIENFQyBoYW5kbGUKKyAgKiBAcGFyYW0gUnhGcmFtZVNpemUgU2l6ZSBvZiBmcmFtZQogICAqIEByZXR2YWwgTm9uZQogICAqLwogX193ZWFrIHZvaWQgSEFMX0NFQ19SeENwbHRDYWxsYmFjayhDRUNfSGFuZGxlVHlwZURlZiAqaGNlYywgdWludDMyX3QgUnhGcmFtZVNpemUpCkBAIC04MjEsNTcgKzgyMiw1OCBAQAogCiAvKioKICAgKiBAYnJpZWYgQ0VDIGVycm9yIGNhbGxiYWNrcwotICAqIEBwYXJhbSBoY2VjOiBDRUMgaGFuZGxlCisgICogQHBhcmFtIGhjZWMgQ0VDIGhhbmRsZQogICAqIEByZXR2YWwgTm9uZQogICAqLwotIF9fd2VhayB2b2lkIEhBTF9DRUNfRXJyb3JDYWxsYmFjayhDRUNfSGFuZGxlVHlwZURlZiAqaGNlYykKK19fd2VhayB2b2lkIEhBTF9DRUNfRXJyb3JDYWxsYmFjayhDRUNfSGFuZGxlVHlwZURlZiAqaGNlYykKIHsKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaGNlYyk7CiAgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKICAgICAgICAgICAgIHRoZSBIQUxfQ0VDX0Vycm9yQ2FsbGJhY2sgY2FuIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKLSAgICovIAorICAgKi8KIH0KIC8qKgogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgQ0VDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAKLSAgKiAgQGJyaWVmICAgQ0VDIGNvbnRyb2wgZnVuY3Rpb25zIAorLyoqIEBkZWZncm91cCBDRUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCisgICogIEBicmllZiAgIENFQyBjb250cm9sIGZ1bmN0aW9ucwogICAqCi1AdmVyYmF0aW0gICAKK0B2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb24gIyMjIyMKLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQogICAgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29udHJvbCB0aGUgQ0VDLgotICAgICAoKykgSEFMX0NFQ19HZXRTdGF0ZSgpIEFQSSBjYW4gYmUgaGVscGZ1bCB0byBjaGVjayBpbiBydW4tdGltZSB0aGUgc3RhdGUgb2YgdGhlIENFQyBwZXJpcGhlcmFsLiAKLQkgKCspIEhBTF9DRUNfR2V0RXJyb3IoKSBBUEkgY2FuIGJlIGhlbHBmdWwgdG8gY2hlY2sgaW4gcnVuLXRpbWUgdGhlIGVycm9yIG9mIHRoZSBDRUMgcGVyaXBoZXJhbC4gCisgICAgICgrKSBIQUxfQ0VDX0dldFN0YXRlKCkgQVBJIGNhbiBiZSBoZWxwZnVsIHRvIGNoZWNrIGluIHJ1bi10aW1lIHRoZSBzdGF0ZSBvZiB0aGUgQ0VDIHBlcmlwaGVyYWwuCisgICAgICgrKSBIQUxfQ0VDX0dldEVycm9yKCkgQVBJIGNhbiBiZSBoZWxwZnVsIHRvIGNoZWNrIGluIHJ1bi10aW1lIHRoZSBlcnJvciBvZiB0aGUgQ0VDIHBlcmlwaGVyYWwuCiBAZW5kdmVyYmF0aW0KICAgKiBAewogICAqLwogLyoqCiAgICogQGJyaWVmIHJldHVybiB0aGUgQ0VDIHN0YXRlCi0gICogQHBhcmFtIGhjZWM6IHBvaW50ZXIgdG8gYSBDRUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqIEBwYXJhbSBoY2VjIHBvaW50ZXIgdG8gYSBDRUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBDRUMgbW9kdWxlLgogICAqIEByZXR2YWwgSEFMIHN0YXRlCiAgICovCi1IQUxfQ0VDX1N0YXRlVHlwZURlZiBIQUxfQ0VDX0dldFN0YXRlKENFQ19IYW5kbGVUeXBlRGVmICpoY2VjKQorSEFMX0NFQ19TdGF0ZVR5cGVEZWYgSEFMX0NFQ19HZXRTdGF0ZShjb25zdCBDRUNfSGFuZGxlVHlwZURlZiAqaGNlYykKIHsKLSAgdWludDMyX3QgdGVtcDE9IDB4MDBVLCB0ZW1wMiA9IDB4MDBVOworICB1aW50MzJfdCB0ZW1wMTsKKyAgdWludDMyX3QgdGVtcDI7CiAgIHRlbXAxID0gaGNlYy0+Z1N0YXRlOwogICB0ZW1wMiA9IGhjZWMtPlJ4U3RhdGU7Ci0gIAorCiAgIHJldHVybiAoSEFMX0NFQ19TdGF0ZVR5cGVEZWYpKHRlbXAxIHwgdGVtcDIpOwogfQogCiAvKioKLSogQGJyaWVmICBSZXR1cm4gdGhlIENFQyBlcnJvciBjb2RlCi0qIEBwYXJhbSAgaGNlYyA6IHBvaW50ZXIgdG8gYSBDRUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqIEBicmllZiAgUmV0dXJuIHRoZSBDRUMgZXJyb3IgY29kZQorICAqIEBwYXJhbSAgaGNlYyAgcG9pbnRlciB0byBhIENFQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIENFQy4KLSogQHJldHZhbCBDRUMgRXJyb3IgQ29kZQotKi8KLXVpbnQzMl90IEhBTF9DRUNfR2V0RXJyb3IoQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpCisgICogQHJldHZhbCBDRUMgRXJyb3IgQ29kZQorICAqLwordWludDMyX3QgSEFMX0NFQ19HZXRFcnJvcihjb25zdCBDRUNfSGFuZGxlVHlwZURlZiAqaGNlYykKIHsKICAgcmV0dXJuIGhjZWMtPkVycm9yQ29kZTsKIH0KQEAgLTg4OCw0NCArODkwLDQ0IEBACiAgICogQHsKICAgKi8KIAotIC8qKgotICAqIEBicmllZiBTZW5kIGRhdGEgaW4gaW50ZXJydXB0IG1vZGUgCi0gICogQHBhcmFtIGhjZWM6IENFQyBoYW5kbGUuIAorLyoqCisgICogQGJyaWVmIFNlbmQgZGF0YSBpbiBpbnRlcnJ1cHQgbW9kZQorICAqIEBwYXJhbSBoY2VjIENFQyBoYW5kbGUuCiAgICogICAgICAgICBGdW5jdGlvbiBjYWxsZWQgdW5kZXIgaW50ZXJydXB0aW9uIG9ubHksIG9uY2UKLSAgKiAgICAgICAgIGludGVycnVwdGlvbnMgaGF2ZSBiZWVuIGVuYWJsZWQgYnkgSEFMX0NFQ19UcmFuc21pdF9JVCgpICAgCisgICogICAgICAgICBpbnRlcnJ1cHRpb25zIGhhdmUgYmVlbiBlbmFibGVkIGJ5IEhBTF9DRUNfVHJhbnNtaXRfSVQoKQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwotICAqLyAgCisgKi8KIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBDRUNfVHJhbnNtaXRfSVQoQ0VDX0hhbmRsZVR5cGVEZWYgKmhjZWMpCiB7Ci0gIC8qIGlmIHRoZSBJUCBpcyBhbHJlYWR5IGJ1c3kgb3IgaWYgdGhlcmUgaXMgYSBwcmV2aW91cyB0cmFuc21pc3Npb24KKyAgLyogaWYgdGhlIHBlcmlwaGVyYWwgaXMgYWxyZWFkeSBidXN5IG9yIGlmIHRoZXJlIGlzIGEgcHJldmlvdXMgdHJhbnNtaXNzaW9uCiAgICAgIGFscmVhZHkgcGVuZGluZyBkdWUgdG8gYXJiaXRyYXRpb24gbG9zcyAqLwotICBpZigoaGNlYy0+Z1N0YXRlID09IEhBTF9DRUNfU1RBVEVfQlVTWV9UWCkgfHwgKF9fSEFMX0NFQ19HRVRfVFJBTlNNSVNTSU9OX1NUQVJUX0ZMQUcoaGNlYykgIT0gUkVTRVQpKQorICBpZiAoKGhjZWMtPmdTdGF0ZSA9PSBIQUxfQ0VDX1NUQVRFX0JVU1lfVFgpIHx8IChfX0hBTF9DRUNfR0VUX1RSQU5TTUlTU0lPTl9TVEFSVF9GTEFHKGhjZWMpICE9IFJFU0VUKSkKICAgewogICAgIC8qIGlmIGFsbCBkYXRhIGhhdmUgYmVlbiBzZW50ICovCi0gICAgaWYoaGNlYy0+VHhYZmVyQ291bnQgPT0gMFUpCisgICAgaWYgKGhjZWMtPlR4WGZlckNvdW50ID09IDBVKQogICAgIHsKICAgICAgIC8qIEFja25vd2xlZGdlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBieSB3cml0aW5nIDB4MDAgKi8KICAgICAgIE1PRElGWV9SRUcoaGNlYy0+SW5zdGFuY2UtPkNTUiwgQ0VDX0ZMQUdfVFJBTlNNSVRfTUFTSywgMHgwMFUpOwogCiAgICAgICBoY2VjLT5nU3RhdGUgPSBIQUxfQ0VDX1NUQVRFX1JFQURZOwogI2lmIChVU0VfSEFMX0NFQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgICAgaGNlYy0+VHhDcGx0Q2FsbGJhY2soaGNlYyk7CisgICAgICBoY2VjLT5UeENwbHRDYWxsYmFjayhoY2VjKTsKICNlbHNlCi0gICAgIEhBTF9DRUNfVHhDcGx0Q2FsbGJhY2soaGNlYyk7Ci0jZW5kaWYgLyogVVNFX0hBTF9DRUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovICAgICAKLSAgICAgIAorICAgICAgSEFMX0NFQ19UeENwbHRDYWxsYmFjayhoY2VjKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0NFQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKwogICAgICAgcmV0dXJuIEhBTF9PSzsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgIC8qIFJlZHVjZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIGJ5IG9uZSAqLwogICAgICAgaGNlYy0+VHhYZmVyQ291bnQtLTsKLSAgICAgIAorCiAgICAgICAvKiBXcml0ZSBkYXRhIHRvIFRYIGJ1ZmZlciovCi0gICAgICBoY2VjLT5JbnN0YW5jZS0+VFhEID0gKmhjZWMtPnBUeEJ1ZmZQdHIrKzsKLSAgICAgIAorICAgICAgaGNlYy0+SW5zdGFuY2UtPlRYRCA9ICh1aW50OF90KSpoY2VjLT5wVHhCdWZmUHRyKys7CisKICAgICAgIC8qIElmIHRoaXMgaXMgdGhlIGxhc3QgYnl0ZSBvZiB0aGUgb25nb2luZyB0cmFuc21pc3Npb24gKi8KLSAgICAgIGlmKGhjZWMtPlR4WGZlckNvdW50ID09IDBVKQorICAgICAgaWYgKGhjZWMtPlR4WGZlckNvdW50ID09IDBVKQogICAgICAgewogICAgICAgICAvKiBBY2tub3dsZWRnZSBieXRlIHJlcXVlc3QgYW5kIHNpZ25hbCBlbmQgb2YgbWVzc2FnZSAqLwogICAgICAgICBNT0RJRllfUkVHKGhjZWMtPkluc3RhbmNlLT5DU1IsIENFQ19GTEFHX1RSQU5TTUlUX01BU0ssIENFQ19GTEFHX1RFT00pOwpAQCAtOTM0LDY3ICs5MzYsNjcgQEAKICAgICAgIHsKICAgICAgICAgLyogQWNrbm93bGVkZ2UgYnl0ZSByZXF1ZXN0IGJ5IHdyaXRpbmcgMHgwMCAqLwogICAgICAgICBNT0RJRllfUkVHKGhjZWMtPkluc3RhbmNlLT5DU1IsIENFQ19GTEFHX1RSQU5TTUlUX01BU0ssIDB4MDBVKTsKLSAgICAgIH0gIAotICAgICAgCisgICAgICB9CisKICAgICAgIHJldHVybiBIQUxfT0s7CiAgICAgfQogICB9CiAgIGVsc2UKICAgewotICAgIHJldHVybiBIQUxfQlVTWTsgICAKKyAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KIH0KIAogLyoqCi0gICogQGJyaWVmIFJlY2VpdmUgZGF0YSBpbiBpbnRlcnJ1cHQgbW9kZS4gCi0gICogQHBhcmFtIGhjZWM6IENFQyBoYW5kbGUuCisgICogQGJyaWVmIFJlY2VpdmUgZGF0YSBpbiBpbnRlcnJ1cHQgbW9kZS4KKyAgKiBAcGFyYW0gaGNlYyBDRUMgaGFuZGxlLgogICAqICAgICAgICAgRnVuY3Rpb24gY2FsbGVkIHVuZGVyIGludGVycnVwdGlvbiBvbmx5LCBvbmNlCi0gICogICAgICAgICBpbnRlcnJ1cHRpb25zIGhhdmUgYmVlbiBlbmFibGVkIGJ5IEhBTF9DRUNfUmVjZWl2ZV9JVCgpICAgCisgICogICAgICAgICBpbnRlcnJ1cHRpb25zIGhhdmUgYmVlbiBlbmFibGVkIGJ5IEhBTF9DRUNfUmVjZWl2ZV9JVCgpCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCi0gICovICAKKyAgKi8KIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBDRUNfUmVjZWl2ZV9JVChDRUNfSGFuZGxlVHlwZURlZiAqaGNlYykKIHsKICAgc3RhdGljIHVpbnQzMl90IHRlbXA7Ci0gIAotICBpZihoY2VjLT5SeFN0YXRlID09IEhBTF9DRUNfU1RBVEVfQlVTWV9SWCkKKworICBpZiAoaGNlYy0+UnhTdGF0ZSA9PSBIQUxfQ0VDX1NUQVRFX0JVU1lfUlgpCiAgIHsKICAgICB0ZW1wID0gaGNlYy0+SW5zdGFuY2UtPkNTUjsKLSAgICAKKwogICAgIC8qIFN0b3JlIHJlY2VpdmVkIGRhdGEgKi8KICAgICBoY2VjLT5SeFhmZXJTaXplKys7CiAgICAgKmhjZWMtPkluaXQuUnhCdWZmZXIrKyA9IGhjZWMtPkluc3RhbmNlLT5SWEQ7Ci0gICAgCisKICAgICAvKiBBY2tub3dsZWRnZSByZWNlaXZlZCBieXRlIGJ5IHdyaXRpbmcgMHgwMCAqLwogICAgIE1PRElGWV9SRUcoaGNlYy0+SW5zdGFuY2UtPkNTUiwgQ0VDX0ZMQUdfUkVDRUlWRV9NQVNLLCAweDAwVSk7Ci0gICAgCisKICAgICAvKiBJZiB0aGUgRW5kIE9mIE1lc3NhZ2UgaXMgcmVhY2hlZCAqLwotICAgIGlmKEhBTF9JU19CSVRfU0VUKHRlbXAsIENFQ19GTEFHX1JFT00pKQorICAgIGlmIChIQUxfSVNfQklUX1NFVCh0ZW1wLCBDRUNfRkxBR19SRU9NKSkKICAgICB7CiAgICAgICAvKiBJbnRlcnJ1cHRzIGFyZSBub3QgZGlzYWJsZWQgZHVlIHRvIHRyYW5zbWlzc2lvbiBzdGlsbCBvbmdvaW5nICovCiAgICAgICBoY2VjLT5SeFN0YXRlID0gSEFMX0NFQ19TVEFURV9SRUFEWTsKICNpZiAoVVNFX0hBTF9DRUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgaGNlYy0+UnhDcGx0Q2FsbGJhY2soaGNlYywgaGNlYy0+UnhYZmVyU2l6ZSk7CisgICAgICBoY2VjLT5SeENwbHRDYWxsYmFjayhoY2VjLCBoY2VjLT5SeFhmZXJTaXplKTsKICNlbHNlCi0gICAgSEFMX0NFQ19SeENwbHRDYWxsYmFjayhoY2VjLCBoY2VjLT5SeFhmZXJTaXplKTsgCi0jZW5kaWYgLyogVVNFX0hBTF9DRUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovICAgICAgCi0gICAgICAKKyAgICAgIEhBTF9DRUNfUnhDcGx0Q2FsbGJhY2soaGNlYywgaGNlYy0+UnhYZmVyU2l6ZSk7CisjZW5kaWYgLyogVVNFX0hBTF9DRUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisKICAgICAgIHJldHVybiBIQUxfT0s7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICByZXR1cm4gSEFMX0JVU1k7IAorICAgICAgcmV0dXJuIEhBTF9CVVNZOwogICAgIH0KICAgfQogICBlbHNlCiAgIHsKLSAgICByZXR1cm4gSEFMX0JVU1k7IAorICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQogfQogCiAvKioKLSAqIEB9Ci0gKi8gCi0gCisgICogQH0KKyAgKi8KKwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYxeHhfaGFsX2NvcnRleC5jIGIvU3JjL3N0bTMyZjF4eF9oYWxfY29ydGV4LmMKaW5kZXggMjIyNjhkMi4uYzZjODdjNiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjF4eF9oYWxfY29ydGV4LmMKKysrIGIvU3JjL3N0bTMyZjF4eF9oYWxfY29ydGV4LmMKQEAgLTgsMTcgKzgsNiBAQAogICAqICAgICAgICAgICArIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zIAogICAqCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqIEBhdHRlbnRpb24KLSAgKgotICAqIENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCi0gICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KLSAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KLSAgKgotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgQHZlcmJhdGltICAKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCkBAIC03Nyw2ICs2NiwxNiBAQAogICAgCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC01MDEsMyArNTAwLDQgQEAKIC8qKgogICAqIEB9CiAgICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYxeHhfaGFsX2NyYy5jIGIvU3JjL3N0bTMyZjF4eF9oYWxfY3JjLmMKaW5kZXggMzc5Yzk0NS4uODEwYmE5YiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjF4eF9oYWxfY3JjLmMKKysrIGIvU3JjL3N0bTMyZjF4eF9oYWxfY3JjLmMKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICBfX0hBTF9DUkNfRFJfUkVTRVQoaGNyYyk7CiAKICAgLyogUmVzZXQgSURSIHJlZ2lzdGVyIGNvbnRlbnQgKi8KLSAgQ0xFQVJfQklUKGhjcmMtPkluc3RhbmNlLT5JRFIsIENSQ19JRFJfSURSKTsKKyAgX19IQUxfQ1JDX1NFVF9JRFIoaGNyYywgMCk7CiAKICAgLyogRGVJbml0IHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmUgKi8KICAgSEFMX0NSQ19Nc3BEZUluaXQoaGNyYyk7CkBAIC0zMDMsNyArMzAzLDcgQEAKICAgKiBAcGFyYW0gIGhjcmMgQ1JDIGhhbmRsZQogICAqIEByZXR2YWwgSEFMIHN0YXRlCiAgICovCi1IQUxfQ1JDX1N0YXRlVHlwZURlZiBIQUxfQ1JDX0dldFN0YXRlKENSQ19IYW5kbGVUeXBlRGVmICpoY3JjKQorSEFMX0NSQ19TdGF0ZVR5cGVEZWYgSEFMX0NSQ19HZXRTdGF0ZShjb25zdCBDUkNfSGFuZGxlVHlwZURlZiAqaGNyYykKIHsKICAgLyogUmV0dXJuIENSQyBoYW5kbGUgc3RhdGUgKi8KICAgcmV0dXJuIGhjcmMtPlN0YXRlOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfZGFjLmMgYi9TcmMvc3RtMzJmMXh4X2hhbF9kYWMuYwppbmRleCA3OTI2ZTM3Li5jODkwY2FkIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2hhbF9kYWMuYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF9kYWMuYwpAQCAtMTAsNiArMTAsNyBAQAogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIFN0YXRlIGFuZCBFcnJvcnMgZnVuY3Rpb25zCiAgICoKKyAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTE3MSw3ICsxNzIsNyBAQAogICAgICAgVGhlIGNvbXBpbGF0aW9uIGRlZmluZSAgVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEKICAgICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCiAKLSAgICBVc2UgRnVuY3Rpb25zIEByZWYgSEFMX0RBQ19SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLAorICAgIFVzZSBGdW5jdGlvbnMgSEFMX0RBQ19SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLAogICAgICAgaXQgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAoKykgQ29udkNwbHRDYWxsYmFja0NoMSAgICAgOiBjYWxsYmFjayB3aGVuIGEgaGFsZiB0cmFuc2ZlciBpcyBjb21wbGV0ZWQgb24gQ2gxLgogICAgICAgKCspIENvbnZIYWxmQ3BsdENhbGxiYWNrQ2gxIDogY2FsbGJhY2sgd2hlbiBhIHRyYW5zZmVyIGlzIGNvbXBsZXRlZCBvbiBDaDEuCkBAIC0xODYsOCArMTg3LDggQEAKICAgICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLCB0aGUgQ2FsbGJhY2sgSUQKICAgICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKLSAgICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfREFDX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKLSAgICAgIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uLiBJdCBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKKyAgICBVc2UgZnVuY3Rpb24gSEFMX0RBQ19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgICAgICB3ZWFrIChvdmVycmlkZGVuKSBmdW5jdGlvbi4gSXQgYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAoKykgQ29udkNwbHRDYWxsYmFja0NoMSAgICAgOiBjYWxsYmFjayB3aGVuIGEgaGFsZiB0cmFuc2ZlciBpcyBjb21wbGV0ZWQgb24gQ2gxLgogICAgICAgKCspIENvbnZIYWxmQ3BsdENhbGxiYWNrQ2gxIDogY2FsbGJhY2sgd2hlbiBhIHRyYW5zZmVyIGlzIGNvbXBsZXRlZCBvbiBDaDEuCiAgICAgICAoKykgRXJyb3JDYWxsYmFja0NoMSAgICAgICAgOiBjYWxsYmFjayB3aGVuIGFuIGVycm9yIG9jY3VycyBvbiBDaDEuCkBAIC0yMDEsMTIgKzIwMiwxMiBAQAogICAgICAgKCspIEFsbCBDYWxsYmFja3MKICAgICAgIFRoaXMgZnVuY3Rpb24pIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSBhbmQgdGhlIENhbGxiYWNrIElELgogCi0gICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfREFDX0luaXQgYW5kIGlmIHRoZSBzdGF0ZSBpcyBIQUxfREFDX1NUQVRFX1JFU0VUCi0gICAgICBhbGwgY2FsbGJhY2tzIGFyZSByZXNldCB0byB0aGUgY29ycmVzcG9uZGluZyBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zLgorICAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9EQUNfSW5pdCBhbmQgaWYgdGhlIHN0YXRlIGlzIEhBTF9EQUNfU1RBVEVfUkVTRVQKKyAgICAgIGFsbCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChvdmVycmlkZGVuKSBmdW5jdGlvbnMuCiAgICAgICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCBhbmQgTXNwRGVJbml0IGNhbGxiYWNrcyB0aGF0IGFyZSByZXNwZWN0aXZlbHkKLSAgICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBAcmVmIEhBTF9EQUNfSW5pdAotICAgICAgYW5kIEByZWYgIEhBTF9EQUNfRGVJbml0IG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgotICAgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9EQUNfSW5pdCBhbmQgQHJlZiBIQUxfREFDX0RlSW5pdAorICAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChvdmVycmlkZGVuKSBmdW5jdGlvbnMgaW4gdGhlIEhBTF9EQUNfSW5pdAorICAgICAgYW5kICBIQUxfREFDX0RlSW5pdCBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KKyAgICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgSEFMX0RBQ19Jbml0IGFuZCBIQUxfREFDX0RlSW5pdAogICAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKQogCiAgICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIFJFQURZIHN0YXRlIG9ubHkuCkBAIC0yMTQsMTIgKzIxNSwxMiBAQAogICAgICAgaW4gUkVBRFkgb3IgUkVTRVQgc3RhdGUsIHRodXMgcmVnaXN0ZXJlZCAodXNlcikgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkCiAgICAgICBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgogICAgICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICAgICAgdXNpbmcgQHJlZiBIQUxfREFDX1JlZ2lzdGVyQ2FsbGJhY2sgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfREFDX0RlSW5pdAotICAgICAgb3IgQHJlZiBIQUxfREFDX0luaXQgZnVuY3Rpb24uCisgICAgICB1c2luZyBIQUxfREFDX1JlZ2lzdGVyQ2FsbGJhY2sgYmVmb3JlIGNhbGxpbmcgSEFMX0RBQ19EZUluaXQKKyAgICAgIG9yIEhBTF9EQUNfSW5pdCBmdW5jdGlvbi4KIAogICAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfREFDX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgogICAgICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RlcmluZyBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUKLSAgICAgIGFuZCB3ZWFrIChzdXJjaGFyZ2VkKSBjYWxsYmFja3MgYXJlIHVzZWQuCisgICAgICBhbmQgd2VhayAob3ZlcnJpZGRlbikgY2FsbGJhY2tzIGFyZSB1c2VkLgogCiAgICAgICoqKiBEQUMgSEFMIGRyaXZlciBtYWNyb3MgbGlzdCAqKioKICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMzQsNyArMjM1LDcgQEAKICAgICAgWy4uXQogICAgICAgKEApIFlvdSBjYW4gcmVmZXIgdG8gdGhlIERBQyBIQUwgZHJpdmVyIGhlYWRlciBmaWxlIGZvciBtb3JlIHVzZWZ1bCBtYWNyb3MKIAotICBAZW5kdmVyYmF0aW0KK0BlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIApAQCAtMjg5LDcgKzI5MCw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX0luaXQoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpCiB7Ci0gIC8qIENoZWNrIERBQyBoYW5kbGUgKi8KKyAgLyogQ2hlY2sgdGhlIERBQyBwZXJpcGhlcmFsIGhhbmRsZSAqLwogICBpZiAoaGRhYyA9PSBOVUxMKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTM1MCw3ICszNTEsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19EZUluaXQoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpCiB7Ci0gIC8qIENoZWNrIERBQyBoYW5kbGUgKi8KKyAgLyogQ2hlY2sgdGhlIERBQyBwZXJpcGhlcmFsIGhhbmRsZSAqLwogICBpZiAoaGRhYyA9PSBOVUxMKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTQ1Myw2ICs0NTQsMTIgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfU3RhcnQoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIC8qIENoZWNrIHRoZSBEQUMgcGVyaXBoZXJhbCBoYW5kbGUgKi8KKyAgaWYgKGhkYWMgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfREFDX0NIQU5ORUwoQ2hhbm5lbCkpOwogCkBAIC01MDgsNiArNTE1LDEyIEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1N0b3AoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIC8qIENoZWNrIHRoZSBEQUMgcGVyaXBoZXJhbCBoYW5kbGUgKi8KKyAgaWYgKGhkYWMgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfREFDX0NIQU5ORUwoQ2hhbm5lbCkpOwogCkBAIC01MzgsMTEgKzU1MSwxNyBAQAogICAqICAgICAgICAgICAgQGFyZyBEQUNfQUxJR05fMTJCX1I6IDEyYml0IHJpZ2h0IGRhdGEgYWxpZ25tZW50IHNlbGVjdGVkCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1N0YXJ0X0RNQShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgKnBEYXRhLCB1aW50MzJfdCBMZW5ndGgsCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1N0YXJ0X0RNQShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCwgY29uc3QgdWludDMyX3QgKnBEYXRhLCB1aW50MzJfdCBMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBBbGlnbm1lbnQpCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKLSAgdWludDMyX3QgdG1wcmVnID0gMFU7CisgIHVpbnQzMl90IHRtcHJlZzsKKworICAvKiBDaGVjayB0aGUgREFDIHBlcmlwaGVyYWwgaGFuZGxlICovCisgIGlmIChoZGFjID09IE5VTEwpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0RBQ19DSEFOTkVMKENoYW5uZWwpKTsKQEAgLTU3OSwxMiArNTk4LDEwIEBACiAgICAgICAgIC8qIEdldCBESFIxMkwxIGFkZHJlc3MgKi8KICAgICAgICAgdG1wcmVnID0gKHVpbnQzMl90KSZoZGFjLT5JbnN0YW5jZS0+REhSMTJMMTsKICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIERBQ19BTElHTl84Ql9SOgorICAgICAgZGVmYXVsdDogLyogY2FzZSBEQUNfQUxJR05fOEJfUiAqLwogICAgICAgICAvKiBHZXQgREhSOFIxIGFkZHJlc3MgKi8KICAgICAgICAgdG1wcmVnID0gKHVpbnQzMl90KSZoZGFjLT5JbnN0YW5jZS0+REhSOFIxOwogICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgfQogCkBAIC02MTMsMTcgKzYzMCwxMyBAQAogICAgICAgICAvKiBHZXQgREhSMTJMMiBhZGRyZXNzICovCiAgICAgICAgIHRtcHJlZyA9ICh1aW50MzJfdCkmaGRhYy0+SW5zdGFuY2UtPkRIUjEyTDI7CiAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBEQUNfQUxJR05fOEJfUjoKKyAgICAgIGRlZmF1bHQ6IC8qIGNhc2UgREFDX0FMSUdOXzhCX1IgKi8KICAgICAgICAgLyogR2V0IERIUjhSMiBhZGRyZXNzICovCiAgICAgICAgIHRtcHJlZyA9ICh1aW50MzJfdCkmaGRhYy0+SW5zdGFuY2UtPkRIUjhSMjsKICAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKICAgICB9CiAgIH0KIAotCi0gIC8qIEVuYWJsZSB0aGUgRE1BIFN0cmVhbSAqLwogICBpZiAoQ2hhbm5lbCA9PSBEQUNfQ0hBTk5FTF8xKQogICB7CiAjaWYgZGVmaW5lZChEQUNfQ1JfRE1BVURSSUUxKQpAQCAtNjc2LDYgKzY4OSwxMiBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19TdG9wX0RNQShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCkKIHsKKyAgLyogQ2hlY2sgdGhlIERBQyBwZXJpcGhlcmFsIGhhbmRsZSAqLworICBpZiAoaGRhYyA9PSBOVUxMKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19EQUNfQ0hBTk5FTChDaGFubmVsKSk7CiAKQEAgLTY5Miw2ICs3MTEsNyBAQAogICB7CiAgICAgLyogRGlzYWJsZSB0aGUgRE1BIFN0cmVhbSAqLwogICAgICh2b2lkKUhBTF9ETUFfQWJvcnQoaGRhYy0+RE1BX0hhbmRsZTEpOworCiAjaWYgZGVmaW5lZChEQUNfQ1JfRE1BVURSSUUxKQogICAgIC8qIERpc2FibGUgdGhlIERBQyBETUEgdW5kZXJydW4gaW50ZXJydXB0ICovCiAgICAgX19IQUxfREFDX0RJU0FCTEVfSVQoaGRhYywgREFDX0lUX0RNQVVEUjEpOwpAQCAtNzAyLDYgKzcyMiw3IEBACiAgIHsKICAgICAvKiBEaXNhYmxlIHRoZSBETUEgU3RyZWFtICovCiAgICAgKHZvaWQpSEFMX0RNQV9BYm9ydChoZGFjLT5ETUFfSGFuZGxlMik7CisKICNpZiBkZWZpbmVkKERBQ19DUl9ETUFVRFJJRTIpCiAgICAgLyogRGlzYWJsZSB0aGUgREFDIERNQSB1bmRlcnJ1biBpbnRlcnJ1cHQgKi8KICAgICBfX0hBTF9EQUNfRElTQUJMRV9JVChoZGFjLCBEQUNfSVRfRE1BVURSMik7CkBAIC03MjgsMTMgKzc0OSwxNiBAQAogewogI2lmICFkZWZpbmVkKERBQ19TUl9ETUFVRFIxKSAmJiAhZGVmaW5lZChEQUNfU1JfRE1BVURSMikKICAgVU5VU0VEKGhkYWMpOwotI2VuZGlmCisjZWxzZQorICB1aW50MzJfdCBpdHNvdXJjZSA9IGhkYWMtPkluc3RhbmNlLT5DUjsKKyAgdWludDMyX3QgaXRmbGFnICAgPSBoZGFjLT5JbnN0YW5jZS0+U1I7CisjZW5kaWYgLyogIURBQ19TUl9ETUFVRFIxICYmICFEQUNfU1JfRE1BVURSMiAqLwogCiAjaWYgZGVmaW5lZChEQUNfU1JfRE1BVURSMSkKLSAgaWYgKF9fSEFMX0RBQ19HRVRfSVRfU09VUkNFKGhkYWMsIERBQ19JVF9ETUFVRFIxKSkKKyAgaWYgKChpdHNvdXJjZSAmIERBQ19JVF9ETUFVRFIxKSA9PSBEQUNfSVRfRE1BVURSMSkKICAgewogICAgIC8qIENoZWNrIHVuZGVycnVuIGZsYWcgb2YgREFDIGNoYW5uZWwgMSAqLwotICAgIGlmIChfX0hBTF9EQUNfR0VUX0ZMQUcoaGRhYywgREFDX0ZMQUdfRE1BVURSMSkpCisgICAgaWYgKChpdGZsYWcgJiBEQUNfRkxBR19ETUFVRFIxKSA9PSBEQUNfRkxBR19ETUFVRFIxKQogICAgIHsKICAgICAgIC8qIENoYW5nZSBEQUMgc3RhdGUgdG8gZXJyb3Igc3RhdGUgKi8KICAgICAgIGhkYWMtPlN0YXRlID0gSEFMX0RBQ19TVEFURV9FUlJPUjsKQEAgLTc0Niw3ICs3NzAsNyBAQAogICAgICAgX19IQUxfREFDX0NMRUFSX0ZMQUcoaGRhYywgREFDX0ZMQUdfRE1BVURSMSk7CiAKICAgICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsMSBETUEgcmVxdWVzdCAqLwotICAgICAgQ0xFQVJfQklUKGhkYWMtPkluc3RhbmNlLT5DUiwgREFDX0NSX0RNQUVOMSk7CisgICAgICBfX0hBTF9EQUNfRElTQUJMRV9JVChoZGFjLCBEQUNfQ1JfRE1BRU4xKTsKIAogICAgICAgLyogRXJyb3IgY2FsbGJhY2sgKi8KICNpZiAoVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCkBAIC03NTksMTAgKzc4MywxMCBAQAogI2VuZGlmIC8qIERBQ19TUl9ETUFVRFIxICovCiAKICNpZiBkZWZpbmVkKERBQ19TUl9ETUFVRFIyKQotICBpZiAoX19IQUxfREFDX0dFVF9JVF9TT1VSQ0UoaGRhYywgREFDX0lUX0RNQVVEUjIpKQorICBpZiAoKGl0c291cmNlICYgREFDX0lUX0RNQVVEUjIpID09IERBQ19JVF9ETUFVRFIyKQogICB7CiAgICAgLyogQ2hlY2sgdW5kZXJydW4gZmxhZyBvZiBEQUMgY2hhbm5lbCAyICovCi0gICAgaWYgKF9fSEFMX0RBQ19HRVRfRkxBRyhoZGFjLCBEQUNfRkxBR19ETUFVRFIyKSkKKyAgICBpZiAoKGl0ZmxhZyAmIERBQ19GTEFHX0RNQVVEUjIpID09IERBQ19GTEFHX0RNQVVEUjIpCiAgICAgewogICAgICAgLyogQ2hhbmdlIERBQyBzdGF0ZSB0byBlcnJvciBzdGF0ZSAqLwogICAgICAgaGRhYy0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX0VSUk9SOwpAQCAtNzc0LDcgKzc5OCw3IEBACiAgICAgICBfX0hBTF9EQUNfQ0xFQVJfRkxBRyhoZGFjLCBEQUNfRkxBR19ETUFVRFIyKTsKIAogICAgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwyIERNQSByZXF1ZXN0ICovCi0gICAgICBDTEVBUl9CSVQoaGRhYy0+SW5zdGFuY2UtPkNSLCBEQUNfQ1JfRE1BRU4yKTsKKyAgICAgIF9fSEFMX0RBQ19ESVNBQkxFX0lUKGhkYWMsICBEQUNfQ1JfRE1BRU4yKTsKIAogICAgICAgLyogRXJyb3IgY2FsbGJhY2sgKi8KICNpZiAoVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCkBAIC04MDcsNiArODMxLDEyIEBACiB7CiAgIF9fSU8gdWludDMyX3QgdG1wID0gMFVMOwogCisgIC8qIENoZWNrIHRoZSBEQUMgcGVyaXBoZXJhbCBoYW5kbGUgKi8KKyAgaWYgKGhkYWMgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfREFDX0NIQU5ORUwoQ2hhbm5lbCkpOwogICBhc3NlcnRfcGFyYW0oSVNfREFDX0FMSUdOKEFsaWdubWVudCkpOwpAQCAtOTI0LDEwICs5NTQsMTYgQEAKICAgKiAgICAgICAgICAgIEBhcmcgREFDX0NIQU5ORUxfMjogREFDIENoYW5uZWwyIHNlbGVjdGVkCiAgICogQHJldHZhbCBUaGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgZGF0YSBvdXRwdXQgdmFsdWUuCiAgICovCi11aW50MzJfdCBIQUxfREFDX0dldFZhbHVlKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCB1aW50MzJfdCBDaGFubmVsKQordWludDMyX3QgSEFMX0RBQ19HZXRWYWx1ZShjb25zdCBEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgdWludDMyX3QgcmVzdWx0OwogCisgIC8qIENoZWNrIHRoZSBEQUMgcGVyaXBoZXJhbCBoYW5kbGUgKi8KKyAgaWYgKGhkYWMgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfREFDX0NIQU5ORUwoQ2hhbm5lbCkpOwogCkBAIC05NTYsMTEgKzk5MiwxOSBAQAogICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8yOiBEQUMgQ2hhbm5lbDIgc2VsZWN0ZWQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfQ29uZmlnQ2hhbm5lbChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgREFDX0NoYW5uZWxDb25mVHlwZURlZiAqc0NvbmZpZywgdWludDMyX3QgQ2hhbm5lbCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfQ29uZmlnQ2hhbm5lbChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEQUNfQ2hhbm5lbENvbmZUeXBlRGVmICpzQ29uZmlnLCB1aW50MzJfdCBDaGFubmVsKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIHVpbnQzMl90IHRtcHJlZzE7CiAgIHVpbnQzMl90IHRtcHJlZzI7CiAKKyAgLyogQ2hlY2sgdGhlIERBQyBwZXJpcGhlcmFsIGhhbmRsZSBhbmQgY2hhbm5lbCBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworICBpZiAoKGhkYWMgPT0gTlVMTCkgfHwgKHNDb25maWcgPT0gTlVMTCkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKICAgLyogQ2hlY2sgdGhlIERBQyBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19EQUNfVFJJR0dFUihzQ29uZmlnLT5EQUNfVHJpZ2dlcikpOwogICBhc3NlcnRfcGFyYW0oSVNfREFDX09VVFBVVF9CVUZGRVJfU1RBVEUoc0NvbmZpZy0+REFDX091dHB1dEJ1ZmZlcikpOwpAQCAtOTc1LDcgKzEwMTksOCBAQAogICAvKiBHZXQgdGhlIERBQyBDUiB2YWx1ZSAqLwogICB0bXByZWcxID0gaGRhYy0+SW5zdGFuY2UtPkNSOwogICAvKiBDbGVhciBCT0ZGeCwgVEVOeCwgVFNFTHgsIFdBVkV4IGFuZCBNQU1QeCBiaXRzICovCi0gIHRtcHJlZzEgJj0gfigoKHVpbnQzMl90KShEQUNfQ1JfTUFNUDEgfCBEQUNfQ1JfV0FWRTEgfCBEQUNfQ1JfVFNFTDEgfCBEQUNfQ1JfVEVOMSB8IERBQ19DUl9CT0ZGMSkpIDw8IChDaGFubmVsICYgMHgxMFVMKSk7CisgIHRtcHJlZzEgJj0gfigoKHVpbnQzMl90KShEQUNfQ1JfTUFNUDEgfCBEQUNfQ1JfV0FWRTEgfCBEQUNfQ1JfVFNFTDEgfCBEQUNfQ1JfVEVOMSB8IERBQ19DUl9CT0ZGMSkpCisgICAgICAgICAgICAgICA8PCAoQ2hhbm5lbCAmIDB4MTBVTCkpOwogICAvKiBDb25maWd1cmUgZm9yIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbDogYnVmZmVyIG91dHB1dCwgdHJpZ2dlciAqLwogICAvKiBTZXQgVFNFTHggYW5kIFRFTnggYml0cyBhY2NvcmRpbmcgdG8gREFDX1RyaWdnZXIgdmFsdWUgKi8KICAgLyogU2V0IEJPRkZ4IGJpdCBhY2NvcmRpbmcgdG8gREFDX091dHB1dEJ1ZmZlciB2YWx1ZSAqLwpAQCAtOTk0LDcgKzEwMzksNyBAQAogICBfX0hBTF9VTkxPQ0soaGRhYyk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTEwMjMsNyArMTA2OCw3IEBACiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBEQUMuCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KLUhBTF9EQUNfU3RhdGVUeXBlRGVmIEhBTF9EQUNfR2V0U3RhdGUoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpCitIQUxfREFDX1N0YXRlVHlwZURlZiBIQUxfREFDX0dldFN0YXRlKGNvbnN0IERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKQogewogICAvKiBSZXR1cm4gREFDIGhhbmRsZSBzdGF0ZSAqLwogICByZXR1cm4gaGRhYy0+U3RhdGU7CkBAIC0xMDM2LDcgKzEwODEsNyBAQAogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgREFDLgogICAqIEByZXR2YWwgREFDIEVycm9yIENvZGUKICAgKi8KLXVpbnQzMl90IEhBTF9EQUNfR2V0RXJyb3IoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpCit1aW50MzJfdCBIQUxfREFDX0dldEVycm9yKGNvbnN0IERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKQogewogICByZXR1cm4gaGRhYy0+RXJyb3JDb2RlOwogfQpAQCAtMTA1OSw3ICsxMTA0LDkgQEAKICNpZiAoVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAvKioKICAgKiBAYnJpZWYgIFJlZ2lzdGVyIGEgVXNlciBEQUMgQ2FsbGJhY2sKLSAgKiAgICAgICAgIFRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayAoc3VyY2hhcmdlZCkgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqICAgICAgICAgVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB3ZWFrIChvdmVycmlkZGVuKSBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogQG5vdGUgICBUaGUgSEFMX0RBQ19SZWdpc3RlckNhbGxiYWNrKCkgbWF5IGJlIGNhbGxlZCBiZWZvcmUgSEFMX0RBQ19Jbml0KCkgaW4gSEFMX0RBQ19TVEFURV9SRVNFVCB0byByZWdpc3RlcgorICAqICAgICAgICAgY2FsbGJhY2tzIGZvciBIQUxfREFDX01TUElOSVRfQ0JfSUQgYW5kIEhBTF9EQUNfTVNQREVJTklUX0NCX0lECiAgICogQHBhcmFtICBoZGFjIERBQyBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0xMDgzLDYgKzExMzAsMTIgQEAKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCisgIC8qIENoZWNrIHRoZSBEQUMgcGVyaXBoZXJhbCBoYW5kbGUgKi8KKyAgaWYgKGhkYWMgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKwogICBpZiAocENhbGxiYWNrID09IE5VTEwpCiAgIHsKICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KQEAgLTEwOTAsOSArMTE0Myw2IEBACiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaGRhYyk7Ci0KICAgaWYgKGhkYWMtPlN0YXRlID09IEhBTF9EQUNfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCkBAIC0xMTYzLDE0ICsxMjEzLDE0IEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaGRhYyk7CiAgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgogICAqIEBicmllZiAgVW5yZWdpc3RlciBhIFVzZXIgREFDIENhbGxiYWNrCi0gICogICAgICAgICBEQUMgQ2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayAoc3VyY2hhcmdlZCkgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqICAgICAgICAgREFDIENhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgKG92ZXJyaWRkZW4pIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAbm90ZSAgIFRoZSBIQUxfREFDX1VuUmVnaXN0ZXJDYWxsYmFjaygpIG1heSBiZSBjYWxsZWQgYmVmb3JlIEhBTF9EQUNfSW5pdCgpIGluIEhBTF9EQUNfU1RBVEVfUkVTRVQgdG8gdW4tcmVnaXN0ZXIKKyAgKiAgICAgICAgIGNhbGxiYWNrcyBmb3IgSEFMX0RBQ19NU1BJTklUX0NCX0lEIGFuZCBIQUxfREFDX01TUERFSU5JVF9DQl9JRAogICAqIEBwYXJhbSAgaGRhYyBEQUMgaGFuZGxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0xMTkxLDggKzEyNDEsMTEgQEAKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCi0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaGRhYyk7CisgIC8qIENoZWNrIHRoZSBEQUMgcGVyaXBoZXJhbCBoYW5kbGUgKi8KKyAgaWYgKGhkYWMgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KIAogICBpZiAoaGRhYy0+U3RhdGUgPT0gSEFMX0RBQ19TVEFURV9SRUFEWSkKICAgewpAQCAtMTI3OCw4ICsxMzMxLDYgQEAKICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhoZGFjKTsKICAgcmV0dXJuIHN0YXR1czsKIH0KICNlbmRpZiAvKiBVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KQEAgLTEzNjUsNyArMTQxNiw2IEBACiAjZW5kaWYgLyogREFDICovCiAKICNlbmRpZiAvKiBIQUxfREFDX01PRFVMRV9FTkFCTEVEICovCi0KIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2hhbF9kYWNfZXguYyBiL1NyYy9zdG0zMmYxeHhfaGFsX2RhY19leC5jCmluZGV4IDJhMWMwYTAuLjNjNGZiYjggMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfaGFsX2RhY19leC5jCisrKyBiL1NyYy9zdG0zMmYxeHhfaGFsX2RhY19leC5jCkBAIC0yMywyMiArMjMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0KLQotICAgICAqKiogRHVhbCBtb2RlIElPIG9wZXJhdGlvbiAqKioKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFsuLl0KLSAgICAgICgrKSBXaGVuIER1YWwgbW9kZSBpcyBlbmFibGVkIChpLmUuIERBQyBDaGFubmVsMSBhbmQgQ2hhbm5lbDIgYXJlIHVzZWQgc2ltdWx0YW5lb3VzbHkpIDoKLSAgICAgICAgICBVc2UgSEFMX0RBQ0V4X0R1YWxHZXRWYWx1ZSgpIHRvIGdldCBkaWdpdGFsIGRhdGEgdG8gYmUgY29udmVydGVkIGFuZCB1c2UKLSAgICAgICAgICBIQUxfREFDRXhfRHVhbFNldFZhbHVlKCkgdG8gc2V0IGRpZ2l0YWwgdmFsdWUgdG8gY29udmVydGVkIHNpbXVsdGFuZW91c2x5IGluCi0gICAgICAgICAgQ2hhbm5lbCAxIGFuZCBDaGFubmVsIDIuCi0KICAgICAgKioqIFNpZ25hbCBnZW5lcmF0aW9uIG9wZXJhdGlvbiAqKioKICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgWy4uXQogICAgICAgKCspIFVzZSBIQUxfREFDRXhfVHJpYW5nbGVXYXZlR2VuZXJhdGUoKSB0byBnZW5lcmF0ZSBUcmlhbmdsZSBzaWduYWwuCiAgICAgICAoKykgVXNlIEhBTF9EQUNFeF9Ob2lzZVdhdmVHZW5lcmF0ZSgpIHRvIGdlbmVyYXRlIE5vaXNlIHNpZ25hbC4KIAotICBAZW5kdmVyYmF0aW0KKyBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKQEAgLTYxLDYgKzUyLDcgQEAKIAogLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIC8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEwMCw2ICs5MiwxMiBAQAogewogICB1aW50MzJfdCB0bXBfc3d0cmlnID0gMFVMOwogCisgIC8qIENoZWNrIHRoZSBEQUMgcGVyaXBoZXJhbCBoYW5kbGUgKi8KKyAgaWYgKGhkYWMgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKwogCiAgIC8qIFByb2Nlc3MgbG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaGRhYyk7CkBAIC0xNDEsNiArMTM5LDEyIEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDRXhfRHVhbFN0b3AoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpCiB7CisgIC8qIENoZWNrIHRoZSBEQUMgcGVyaXBoZXJhbCBoYW5kbGUgKi8KKyAgaWYgKGhkYWMgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKwogCiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfREFDX0RJU0FCTEUoaGRhYywgREFDX0NIQU5ORUxfMSk7CkBAIC0xODAsNiArMTg0LDEyIEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDRXhfVHJpYW5nbGVXYXZlR2VuZXJhdGUoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IEFtcGxpdHVkZSkKIHsKKyAgLyogQ2hlY2sgdGhlIERBQyBwZXJpcGhlcmFsIGhhbmRsZSAqLworICBpZiAoaGRhYyA9PSBOVUxMKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19EQUNfQ0hBTk5FTChDaGFubmVsKSk7CiAgIGFzc2VydF9wYXJhbShJU19EQUNfTEZTUl9VTk1BU0tfVFJJQU5HTEVfQU1QTElUVURFKEFtcGxpdHVkZSkpOwpAQCAtMjMwLDYgKzI0MCwxMiBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ0V4X05vaXNlV2F2ZUdlbmVyYXRlKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBBbXBsaXR1ZGUpCiB7CisgIC8qIENoZWNrIHRoZSBEQUMgcGVyaXBoZXJhbCBoYW5kbGUgKi8KKyAgaWYgKGhkYWMgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfREFDX0NIQU5ORUwoQ2hhbm5lbCkpOwogICBhc3NlcnRfcGFyYW0oSVNfREFDX0xGU1JfVU5NQVNLX1RSSUFOR0xFX0FNUExJVFVERShBbXBsaXR1ZGUpKTsKQEAgLTI3NSw2ICsyOTEsMTIgQEAKICAgdWludDMyX3QgZGF0YTsKICAgdWludDMyX3QgdG1wOwogCisgIC8qIENoZWNrIHRoZSBEQUMgcGVyaXBoZXJhbCBoYW5kbGUgKi8KKyAgaWYgKGhkYWMgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfREFDX0FMSUdOKEFsaWdubWVudCkpOwogICBhc3NlcnRfcGFyYW0oSVNfREFDX0RBVEEoRGF0YTEpKTsKQEAgLTM5MSw3ICs0MTMsNyBAQAogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgREFDLgogICAqIEByZXR2YWwgVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsIGRhdGEgb3V0cHV0IHZhbHVlLgogICAqLwotdWludDMyX3QgSEFMX0RBQ0V4X0R1YWxHZXRWYWx1ZShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYykKK3VpbnQzMl90IEhBTF9EQUNFeF9EdWFsR2V0VmFsdWUoY29uc3QgREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpCiB7CiAgIHVpbnQzMl90IHRtcCA9IDBVTDsKIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfZG1hLmMgYi9TcmMvc3RtMzJmMXh4X2hhbF9kbWEuYwppbmRleCBjM2E3NjUxLi44MGI2NWE0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2hhbF9kbWEuYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF9kbWEuYwpAQCAtOCwxOCArOCw2IEBACiAgICogICAgICAgICAgICsgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIFN0YXRlIGFuZCBlcnJvcnMgZnVuY3Rpb25zCi0gICoKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICogQGF0dGVudGlvbgotICAqCi0gICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KLSAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgotICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCkBAIC04MCw2ICs2OCwxNiBAQAogCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC02ODUsOSArNjgzLDkgQEAKICAgKiBAYnJpZWYgUmVnaXN0ZXIgY2FsbGJhY2tzCiAgICogQHBhcmFtIGhkbWE6IHBvaW50ZXIgdG8gYSBETUFfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBETUEgQ2hhbm5lbC4KLSAgKiBAcGFyYW0gQ2FsbGJhY2tJRDogVXNlciBDYWxsYmFjayBpZGVudGlmZXIKKyAgKiBAcGFyYW0gQ2FsbGJhY2tJRDogVXNlciBDYWxsYmFjayBpZGVudGlmaWVyCiAgICogICAgICAgICAgICAgICAgICAgIGEgSEFMX0RNQV9DYWxsYmFja0lEVHlwZURlZiBFTlVNIGFzIHBhcmFtZXRlci4KLSAgKiBAcGFyYW0gcENhbGxiYWNrOiBwb2ludGVyIHRvIHByaXZhdGUgY2FsbGJhY3NrIGZ1bmN0aW9uIHdoaWNoIGhhcyBwb2ludGVyIHRvIAorICAqIEBwYXJhbSBwQ2FsbGJhY2s6IHBvaW50ZXIgdG8gcHJpdmF0ZSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBoYXMgcG9pbnRlciB0byAKICAgKiAgICAgICAgICAgICAgICAgICBhIERNQV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSBhcyBwYXJhbWV0ZXIuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovICAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTczOCw3ICs3MzYsNyBAQAogICAqIEBicmllZiBVblJlZ2lzdGVyIGNhbGxiYWNrcwogICAqIEBwYXJhbSBoZG1hOiBwb2ludGVyIHRvIGEgRE1BX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgRE1BIENoYW5uZWwuCi0gICogQHBhcmFtIENhbGxiYWNrSUQ6IFVzZXIgQ2FsbGJhY2sgaWRlbnRpZmVyCisgICogQHBhcmFtIENhbGxiYWNrSUQ6IFVzZXIgQ2FsbGJhY2sgaWRlbnRpZmllcgogICAqICAgICAgICAgICAgICAgICAgICBhIEhBTF9ETUFfQ2FsbGJhY2tJRFR5cGVEZWYgRU5VTSBhcyBwYXJhbWV0ZXIuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovICAgICAgICAgICAgICAKQEAgLTgxMyw3ICs4MTEsNyBAQAogICAqLwogCiAvKioKLSAgKiBAYnJpZWYgIFJldHVybiB0aGUgRE1BIGhhbmRlIHN0YXRlLgorICAqIEBicmllZiAgUmV0dXJuIHRoZSBETUEgaGFuZGxlIHN0YXRlLgogICAqIEBwYXJhbSAgaGRtYTogcG9pbnRlciB0byBhIERNQV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBETUEgQ2hhbm5lbC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0ZQpAQCAtODk2LDMgKzg5NCw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2hhbF9ldGguYyBiL1NyYy9zdG0zMmYxeHhfaGFsX2V0aC5jCmluZGV4IGZjODkwODkuLjE5OGU5ZTQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfaGFsX2V0aC5jCisrKyBiL1NyYy9zdG0zMmYxeHhfaGFsX2V0aC5jCkBAIC03NjQsNyArNzY0LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGFuIEVUSCBDYWxsYmFjawotICAqICAgICAgICAgRVRIIGNhbGxhYmNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqICAgICAgICAgRVRIIGNhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjawogICAqIEBwYXJhbSBoZXRoIGV0aCBoYW5kbGUKICAgKiBAcGFyYW0gQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2hhbF9leHRpLmMgYi9TcmMvc3RtMzJmMXh4X2hhbF9leHRpLmMKaW5kZXggY2NmNTI3MC4uZWY4ZTAwNSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjF4eF9oYWxfZXh0aS5jCisrKyBiL1NyYy9zdG0zMmYxeHhfaGFsX2V4dGkuYwpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAoKyspIFByb3ZpZGUgZXhpdGluZyBoYW5kbGUgYXMgcGFyYW1ldGVyLgogICAgICAgICAoKyspIFByb3ZpZGUgcG9pbnRlciBvbiBFWFRJX0NvbmZpZ1R5cGVEZWYgc3RydWN0dXJlIGFzIHNlY29uZCBwYXJhbWV0ZXIuCiAKLSAgICAoIykgQ2xlYXIgRXh0aSBjb25maWd1cmF0aW9uIG9mIGEgZGVkaWNhdGVkIGxpbmUgdXNpbmcgSEFMX0VYVElfR2V0Q29uZmlnTGluZSgpLgorICAgICgjKSBDbGVhciBFeHRpIGNvbmZpZ3VyYXRpb24gb2YgYSBkZWRpY2F0ZWQgbGluZSB1c2luZyBIQUxfRVhUSV9DbGVhckNvbmZpZ0xpbmUoKS4KICAgICAgICAgKCsrKSBQcm92aWRlIGV4aXRpbmcgaGFuZGxlIGFzIHBhcmFtZXRlci4KIAogICAgICgjKSBSZWdpc3RlciBjYWxsYmFjayB0byB0cmVhdCBFeHRpIGludGVycnVwdHMgdXNpbmcgSEFMX0VYVElfUmVnaXN0ZXJDYWxsYmFjaygpLgpAQCAtNzUsMTIgKzc1LDExIEBACiAKICAgICAoIykgR2V0IGludGVycnVwdCBwZW5kaW5nIGJpdCB1c2luZyBIQUxfRVhUSV9HZXRQZW5kaW5nKCkuCiAKLSAgICAoIykgQ2xlYXIgaW50ZXJydXB0IHBlbmRpbmcgYml0IHVzaW5nIEhBTF9FWFRJX0dldFBlbmRpbmcoKS4KKyAgICAoIykgQ2xlYXIgaW50ZXJydXB0IHBlbmRpbmcgYml0IHVzaW5nIEhBTF9FWFRJX0NsZWFyUGVuZGluZygpLgogCiAgICAgKCMpIEdlbmVyYXRlIHNvZnR3YXJlIGludGVycnVwdCB1c2luZyBIQUxfRVhUSV9HZW5lcmF0ZVNXSSgpLgogCiAgIEBlbmR2ZXJiYXRpbQotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTU1MSwzICs1NTAsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfZmxhc2guYyBiL1NyYy9zdG0zMmYxeHhfaGFsX2ZsYXNoLmMKaW5kZXggMjg5MmE5NS4uNmY5MjBhZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjF4eF9oYWxfZmxhc2guYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF9mbGFzaC5jCkBAIC05LDE3ICs5LDYgQEAKICAgKiAgICAgICAgICAgKyBNZW1vcnkgQ29udHJvbCBmdW5jdGlvbnMgCiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKICAgKiAgICAgICAgIAotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKiBAYXR0ZW50aW9uCi0gICoKLSAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgotICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCi0gICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCi0gICoKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEZMQVNIIHBlcmlwaGVyYWwgZmVhdHVyZXMgIyMjIyMKQEAgLTc5LDYgKzY4LDE1IEBACiAgICAgICAgICAgCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtOTYzLDMgKzk2MSw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2hhbF9mbGFzaF9leC5jIGIvU3JjL3N0bTMyZjF4eF9oYWxfZmxhc2hfZXguYwppbmRleCA4Yzk1NzM0Li5lNjIwMGMyIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2hhbF9mbGFzaF9leC5jCisrKyBiL1NyYy9zdG0zMmYxeHhfaGFsX2ZsYXNoX2V4LmMKQEAgLTEwLDE3ICsxMCw2IEBACiAgICogICAgICAgICAgICsgRXh0ZW5kZWQgSS9PIG9wZXJhdGlvbiBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBFeHRlbmRlZCBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zIAogICAqICAgICAgICAgCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqIEBhdHRlbnRpb24KLSAgKgotICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCi0gICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KLSAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KLSAgKgotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgIyMjIyMgRmxhc2ggcGVyaXBoZXJhbCBleHRlbmRlZCBmZWF0dXJlcyAgIyMjIyMKQEAgLTM3LDYgKzI2LDE1IEBACiAgIAogICBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGF0dGVudGlvbgorICAqCisgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAqCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEyNSwxNSArMTIzLDE1IEBACiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgICAgWy4uXSBUaGUgRkxBU0ggTWVtb3J5IEVyYXNpbmcgZnVuY3Rpb25zLCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKLSAgICAoKykgQHJlZiBIQUxfRkxBU0hFeF9FcmFzZTogcmV0dXJuIG9ubHkgd2hlbiBlcmFzZSBoYXMgYmVlbiBkb25lCi0gICAgKCspIEByZWYgSEFMX0ZMQVNIRXhfRXJhc2VfSVQ6IGVuZCBvZiBlcmFzZSBpcyBkb25lIHdoZW4gQHJlZiBIQUxfRkxBU0hfRW5kT2ZPcGVyYXRpb25DYWxsYmFjayAKKyAgICAoKykgSEFMX0ZMQVNIRXhfRXJhc2U6IHJldHVybiBvbmx5IHdoZW4gZXJhc2UgaGFzIGJlZW4gZG9uZQorICAgICgrKSBIQUxfRkxBU0hFeF9FcmFzZV9JVDogZW5kIG9mIGVyYXNlIGlzIGRvbmUgd2hlbiBIQUxfRkxBU0hfRW5kT2ZPcGVyYXRpb25DYWxsYmFjayAKICAgICAgICAgaXMgY2FsbGVkIHdpdGggcGFyYW1ldGVyIDB4RkZGRkZGRkYKIAogICAgIFsuLl0gQW55IG9wZXJhdGlvbiBvZiBlcmFzZSBzaG91bGQgZm9sbG93IHRoZXNlIHN0ZXBzOgotICAgICgjKSBDYWxsIHRoZSBAcmVmIEhBTF9GTEFTSF9VbmxvY2soKSBmdW5jdGlvbiB0byBlbmFibGUgdGhlIGZsYXNoIGNvbnRyb2wgcmVnaXN0ZXIgYW5kIAorICAgICgjKSBDYWxsIHRoZSBIQUxfRkxBU0hfVW5sb2NrKCkgZnVuY3Rpb24gdG8gZW5hYmxlIHRoZSBmbGFzaCBjb250cm9sIHJlZ2lzdGVyIGFuZCAKICAgICAgICAgcHJvZ3JhbSBtZW1vcnkgYWNjZXNzLgogICAgICgjKSBDYWxsIHRoZSBkZXNpcmVkIGZ1bmN0aW9uIHRvIGVyYXNlIHBhZ2UuCi0gICAgKCMpIENhbGwgdGhlIEByZWYgSEFMX0ZMQVNIX0xvY2soKSB0byBkaXNhYmxlIHRoZSBmbGFzaCBwcm9ncmFtIG1lbW9yeSBhY2Nlc3MgCisgICAgKCMpIENhbGwgdGhlIEhBTF9GTEFTSF9Mb2NrKCkgdG8gZGlzYWJsZSB0aGUgZmxhc2ggcHJvZ3JhbSBtZW1vcnkgYWNjZXNzIAogICAgICAgIChyZWNvbW1lbmRlZCB0byBwcm90ZWN0IHRoZSBGTEFTSCBtZW1vcnkgYWdhaW5zdCBwb3NzaWJsZSB1bndhbnRlZCBvcGVyYXRpb24pLgogCiBAZW5kdmVyYmF0aW0KQEAgLTExMjMsMyArMTEyMSw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2hhbF9ncGlvLmMgYi9TcmMvc3RtMzJmMXh4X2hhbF9ncGlvLmMKaW5kZXggYWIxNDI2ZS4uZjgzN2M1OCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjF4eF9oYWxfZ3Bpby5jCisrKyBiL1NyYy9zdG0zMmYxeHhfaGFsX2dwaW8uYwpAQCAtMjk1LDI2ICsyOTUsNiBAQAogICAgICAgICBBRklPLT5FWFRJQ1JbcG9zaXRpb24gPj4gMnVdID0gdGVtcDsKIAogCi0gICAgICAgIC8qIENvbmZpZ3VyZSB0aGUgaW50ZXJydXB0IG1hc2sgKi8KLSAgICAgICAgaWYgKChHUElPX0luaXQtPk1vZGUgJiBHUElPX01PREVfSVQpID09IEdQSU9fTU9ERV9JVCkKLSAgICAgICAgewotICAgICAgICAgIFNFVF9CSVQoRVhUSS0+SU1SLCBpb2N1cnJlbnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIENMRUFSX0JJVChFWFRJLT5JTVIsIGlvY3VycmVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBDb25maWd1cmUgdGhlIGV2ZW50IG1hc2sgKi8KLSAgICAgICAgaWYgKChHUElPX0luaXQtPk1vZGUgJiBHUElPX01PREVfRVZUKSA9PSBHUElPX01PREVfRVZUKQotICAgICAgICB7Ci0gICAgICAgICAgU0VUX0JJVChFWFRJLT5FTVIsIGlvY3VycmVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgQ0xFQVJfQklUKEVYVEktPkVNUiwgaW9jdXJyZW50KTsKLSAgICAgICAgfQotCiAgICAgICAgIC8qIEVuYWJsZSBvciBkaXNhYmxlIHRoZSByaXNpbmcgdHJpZ2dlciAqLwogICAgICAgICBpZiAoKEdQSU9fSW5pdC0+TW9kZSAmIFJJU0lOR19FREdFKSA9PSBSSVNJTkdfRURHRSkKICAgICAgICAgewpAQCAtMzM0LDYgKzMxNCwyNiBAQAogICAgICAgICB7CiAgICAgICAgICAgQ0xFQVJfQklUKEVYVEktPkZUU1IsIGlvY3VycmVudCk7CiAgICAgICAgIH0KKworICAgICAgICAvKiBDb25maWd1cmUgdGhlIGV2ZW50IG1hc2sgKi8KKyAgICAgICAgaWYgKChHUElPX0luaXQtPk1vZGUgJiBHUElPX01PREVfRVZUKSA9PSBHUElPX01PREVfRVZUKQorICAgICAgICB7CisgICAgICAgICAgU0VUX0JJVChFWFRJLT5FTVIsIGlvY3VycmVudCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgQ0xFQVJfQklUKEVYVEktPkVNUiwgaW9jdXJyZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENvbmZpZ3VyZSB0aGUgaW50ZXJydXB0IG1hc2sgKi8KKyAgICAgICAgaWYgKChHUElPX0luaXQtPk1vZGUgJiBHUElPX01PREVfSVQpID09IEdQSU9fTU9ERV9JVCkKKyAgICAgICAgeworICAgICAgICAgIFNFVF9CSVQoRVhUSS0+SU1SLCBpb2N1cnJlbnQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIENMRUFSX0JJVChFWFRJLT5JTVIsIGlvY3VycmVudCk7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAKQEAgLTM3NSwxNiArMzc1LDE2IEBACiAgICAgICB0bXAgJj0gMHgwRnVMIDw8ICg0dSAqIChwb3NpdGlvbiAmIDB4MDN1KSk7CiAgICAgICBpZiAodG1wID09IChHUElPX0dFVF9JTkRFWChHUElPeCkgPDwgKDR1ICogKHBvc2l0aW9uICYgMHgwM3UpKSkpCiAgICAgICB7Ci0gICAgICAgIHRtcCA9IDB4MEZ1TCA8PCAoNHUgKiAocG9zaXRpb24gJiAweDAzdSkpOwotICAgICAgICBDTEVBUl9CSVQoQUZJTy0+RVhUSUNSW3Bvc2l0aW9uID4+IDJ1XSwgdG1wKTsKLQogICAgICAgICAvKiBDbGVhciBFWFRJIGxpbmUgY29uZmlndXJhdGlvbiAqLwogICAgICAgICBDTEVBUl9CSVQoRVhUSS0+SU1SLCAodWludDMyX3QpaW9jdXJyZW50KTsKICAgICAgICAgQ0xFQVJfQklUKEVYVEktPkVNUiwgKHVpbnQzMl90KWlvY3VycmVudCk7CiAKICAgICAgICAgLyogQ2xlYXIgUmlzaW5nIEZhbGxpbmcgZWRnZSBjb25maWd1cmF0aW9uICovCi0gICAgICAgIENMRUFSX0JJVChFWFRJLT5SVFNSLCAodWludDMyX3QpaW9jdXJyZW50KTsKICAgICAgICAgQ0xFQVJfQklUKEVYVEktPkZUU1IsICh1aW50MzJfdClpb2N1cnJlbnQpOworICAgICAgICBDTEVBUl9CSVQoRVhUSS0+UlRTUiwgKHVpbnQzMl90KWlvY3VycmVudCk7CisgICAgICAgIAorICAgICAgICB0bXAgPSAweDBGdUwgPDwgKDR1ICogKHBvc2l0aW9uICYgMHgwM3UpKTsKKyAgICAgICAgQ0xFQVJfQklUKEFGSU8tPkVYVElDUltwb3NpdGlvbiA+PiAydV0sIHRtcCk7CiAgICAgICB9CiAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR1BJTyBNb2RlIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgICAgLyogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgYml0IGJlbG9uZ3MgdG8gZmlyc3QgaGFsZiBvciBsYXN0IGhhbGYgb2YgdGhlIHBpbiBjb3VudCBudW1iZXIKQEAgLTQ5MSw3ICs0OTEsNyBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfR1BJT19QSU4oR1BJT19QaW4pKTsKIAotICAvKiBnZXQgY3VycmVudCBPdXB1dCBEYXRhIFJlZ2lzdGVyIHZhbHVlICovCisgIC8qIGdldCBjdXJyZW50IE91dHB1dCBEYXRhIFJlZ2lzdGVyIHZhbHVlICovCiAgIG9kciA9IEdQSU94LT5PRFI7CiAKICAgLyogU2V0IHNlbGVjdGVkIHBpbnMgdGhhdCB3ZXJlIGF0IGxvdyBsZXZlbCwgYW5kIHJlc2V0IG9uZXMgdGhhdCB3ZXJlIGhpZ2ggKi8KQEAgLTU4MywzICs1ODMsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfZ3Bpb19leC5jIGIvU3JjL3N0bTMyZjF4eF9oYWxfZ3Bpb19leC5jCmluZGV4IGY2YzgwNzYuLmRiMDczNTkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfaGFsX2dwaW9fZXguYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF9ncGlvX2V4LmMKQEAgLTEyMywzICsxMjMsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfaGNkLmMgYi9TcmMvc3RtMzJmMXh4X2hhbF9oY2QuYwppbmRleCAyMmU1ZmQ4Li42N2M4NmFmIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2hhbF9oY2QuYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF9oY2QuYwpAQCAtMTkzLDI0ICsxOTMsMjEgQEAKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBmcm9tIDAgdG8zMksKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQ0RfSENfSW5pdChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGNoX251bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGVwbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZGV2X2FkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBzcGVlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGVwX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbXBzKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hDRF9IQ19Jbml0KEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkLCB1aW50OF90IGNoX251bSwgdWludDhfdCBlcG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGRldl9hZGRyZXNzLCB1aW50OF90IHNwZWVkLCB1aW50OF90IGVwX3R5cGUsIHVpbnQxNl90IG1wcykKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOworICB1aW50MzJfdCBIQ2NoYXJNcHMgPSBtcHM7CiAKICAgX19IQUxfTE9DSyhoaGNkKTsKICAgaGhjZC0+aGNbY2hfbnVtXS5kb19waW5nID0gMFU7CiAgIGhoY2QtPmhjW2NoX251bV0uZGV2X2FkZHIgPSBkZXZfYWRkcmVzczsKLSAgaGhjZC0+aGNbY2hfbnVtXS5tYXhfcGFja2V0ID0gbXBzOwogICBoaGNkLT5oY1tjaF9udW1dLmNoX251bSA9IGNoX251bTsKICAgaGhjZC0+aGNbY2hfbnVtXS5lcF90eXBlID0gZXBfdHlwZTsKICAgaGhjZC0+aGNbY2hfbnVtXS5lcF9udW0gPSBlcG51bSAmIDB4N0ZVOwogCisgICh2b2lkKUhBTF9IQ0RfSENfQ2xlYXJIdWJJbmZvKGhoY2QsIGNoX251bSk7CisKICAgaWYgKChlcG51bSAmIDB4ODBVKSA9PSAweDgwVSkKICAgewogICAgIGhoY2QtPmhjW2NoX251bV0uZXBfaXNfaW4gPSAxVTsKQEAgLTIyMSwxNCArMjE4LDExIEBACiAgIH0KIAogICBoaGNkLT5oY1tjaF9udW1dLnNwZWVkID0gc3BlZWQ7CisgIGhoY2QtPmhjW2NoX251bV0ubWF4X3BhY2tldCA9ICh1aW50MTZfdClIQ2NoYXJNcHM7CiAKLSAgc3RhdHVzID0gIFVTQl9IQ19Jbml0KGhoY2QtPkluc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hfbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgZXBudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXZfYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkLAotICAgICAgICAgICAgICAgICAgICAgICAgZXBfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1wcyk7CisgIHN0YXR1cyA9ICBVU0JfSENfSW5pdChoaGNkLT5JbnN0YW5jZSwgY2hfbnVtLCBlcG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl9hZGRyZXNzLCBzcGVlZCwgZXBfdHlwZSwgKHVpbnQxNl90KUhDY2hhck1wcyk7CisKICAgX19IQUxfVU5MT0NLKGhoY2QpOwogCiAgIHJldHVybiBzdGF0dXM7CkBAIC0yNDYsNyArMjQwLDcgQEAKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCiAgIF9fSEFMX0xPQ0soaGhjZCk7Ci0gICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCAodWludDhfdCljaF9udW0pOworICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hfbnVtKTsKICAgX19IQUxfVU5MT0NLKGhoY2QpOwogCiAgIHJldHVybiBzdGF0dXM7CkBAIC0zODUsMjQgKzM3OSwyNyBAQAogICBzd2l0Y2ggKGVwX3R5cGUpCiAgIHsKICAgICBjYXNlIEVQX1RZUEVfQ1RSTDoKLSAgICAgIGlmICgodG9rZW4gPT0gMVUpICYmIChkaXJlY3Rpb24gPT0gMFUpKSAvKnNlbmQgZGF0YSAqLworICAgICAgaWYgKHRva2VuID09IDFVKSAvKiBzZW5kIGRhdGEgKi8KICAgICAgIHsKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAwVSkKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSAwVSkKICAgICAgICAgewotICAgICAgICAgIC8qIEZvciBTdGF0dXMgT1VUIHN0YWdlLCBMZW5ndGg9PTAsIFN0YXR1cyBPdXQgUElEID0gMSAqLwotICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0udG9nZ2xlX291dCA9IDFVOwotICAgICAgICB9CisgICAgICAgICAgaWYgKGxlbmd0aCA9PSAwVSkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBGb3IgU3RhdHVzIE9VVCBzdGFnZSwgTGVuZ3RoID09IDBVLCBTdGF0dXMgT3V0IFBJRCA9IDEgKi8KKyAgICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0udG9nZ2xlX291dCA9IDFVOworICAgICAgICAgIH0KIAotICAgICAgICAvKiBTZXQgdGhlIERhdGEgVG9nZ2xlIGJpdCBhcyBwZXIgdGhlIEZsYWcgKi8KLSAgICAgICAgaWYgKGhoY2QtPmhjW2NoX251bV0udG9nZ2xlX291dCA9PSAwVSkKLSAgICAgICAgewotICAgICAgICAgIC8qIFB1dCB0aGUgUElEIDAgKi8KLSAgICAgICAgICBoaGNkLT5oY1tjaF9udW1dLmRhdGFfcGlkID0gSENfUElEX0RBVEEwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8qIFB1dCB0aGUgUElEIDEgKi8KLSAgICAgICAgICBoaGNkLT5oY1tjaF9udW1dLmRhdGFfcGlkID0gSENfUElEX0RBVEExOworICAgICAgICAgIC8qIFNldCB0aGUgRGF0YSBUb2dnbGUgYml0IGFzIHBlciB0aGUgRmxhZyAqLworICAgICAgICAgIGlmIChoaGNkLT5oY1tjaF9udW1dLnRvZ2dsZV9vdXQgPT0gMFUpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogUHV0IHRoZSBQSUQgMCAqLworICAgICAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS5kYXRhX3BpZCA9IEhDX1BJRF9EQVRBMDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFB1dCB0aGUgUElEIDEgKi8KKyAgICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0uZGF0YV9waWQgPSBIQ19QSURfREFUQTE7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTUzMywxNCArNTMwLDIyIEBACiAKICAgICAgIGlmICgoVVNCeF9IUFJUMCAmIFVTQl9PVEdfSFBSVF9QQ1NUUykgPT0gMFUpCiAgICAgICB7CisgICAgICAgIC8qIEZsdXNoIFVTQiBGaWZvICovCisgICAgICAgICh2b2lkKVVTQl9GbHVzaFR4RmlmbyhVU0J4LCAweDEwVSk7CisgICAgICAgICh2b2lkKVVTQl9GbHVzaFJ4RmlmbyhVU0J4KTsKKworICAgICAgICBpZiAoaGhjZC0+SW5pdC5waHlfaXRmYWNlID09IFVTQl9PVEdfRU1CRURERURfUEhZKQorICAgICAgICB7CisgICAgICAgICAgLyogUmVzdG9yZSBGUyBDbG9jayAqLworICAgICAgICAgICh2b2lkKVVTQl9Jbml0RlNMU1BDbGtTZWwoaGhjZC0+SW5zdGFuY2UsIEhDRkdfNDhfTUhaKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8qIEhhbmRsZSBIb3N0IFBvcnQgRGlzY29ubmVjdCBJbnRlcnJ1cHQgKi8KICNpZiAoVVNFX0hBTF9IQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgICAgICBoaGNkLT5EaXNjb25uZWN0Q2FsbGJhY2soaGhjZCk7CiAjZWxzZQogICAgICAgICBIQUxfSENEX0Rpc2Nvbm5lY3RfQ2FsbGJhY2soaGhjZCk7CiAjZW5kaWYgLyogVVNFX0hBTF9IQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCi0KLSAgICAgICAgKHZvaWQpVVNCX0luaXRGU0xTUENsa1NlbChoaGNkLT5JbnN0YW5jZSwgSENGR180OF9NSFopOwogICAgICAgfQogICAgIH0KIApAQCAtNTYyLDE2ICs1NjcsNiBAQAogICAgICAgX19IQUxfSENEX0NMRUFSX0ZMQUcoaGhjZCwgVVNCX09UR19HSU5UU1RTX1NPRik7CiAgICAgfQogCi0gICAgLyogSGFuZGxlIFJ4IFF1ZXVlIExldmVsIEludGVycnVwdHMgKi8KLSAgICBpZiAoKF9fSEFMX0hDRF9HRVRfRkxBRyhoaGNkLCBVU0JfT1RHX0dJTlRTVFNfUlhGTFZMKSkgIT0gMFUpCi0gICAgewotICAgICAgVVNCX01BU0tfSU5URVJSVVBUKGhoY2QtPkluc3RhbmNlLCBVU0JfT1RHX0dJTlRTVFNfUlhGTFZMKTsKLQotICAgICAgSENEX1JYUUxWTF9JUlFIYW5kbGVyKGhoY2QpOwotCi0gICAgICBVU0JfVU5NQVNLX0lOVEVSUlVQVChoaGNkLT5JbnN0YW5jZSwgVVNCX09UR19HSU5UU1RTX1JYRkxWTCk7Ci0gICAgfQotCiAgICAgLyogSGFuZGxlIEhvc3QgY2hhbm5lbCBJbnRlcnJ1cHQgKi8KICAgICBpZiAoX19IQUxfSENEX0dFVF9GTEFHKGhoY2QsIFVTQl9PVEdfR0lOVFNUU19IQ0lOVCkpCiAgICAgewpAQCAtNTkyLDYgKzU4NywxNiBAQAogICAgICAgfQogICAgICAgX19IQUxfSENEX0NMRUFSX0ZMQUcoaGhjZCwgVVNCX09UR19HSU5UU1RTX0hDSU5UKTsKICAgICB9CisKKyAgICAvKiBIYW5kbGUgUnggUXVldWUgTGV2ZWwgSW50ZXJydXB0cyAqLworICAgIGlmICgoX19IQUxfSENEX0dFVF9GTEFHKGhoY2QsIFVTQl9PVEdfR0lOVFNUU19SWEZMVkwpKSAhPSAwVSkKKyAgICB7CisgICAgICBVU0JfTUFTS19JTlRFUlJVUFQoaGhjZC0+SW5zdGFuY2UsIFVTQl9PVEdfR0lOVFNUU19SWEZMVkwpOworCisgICAgICBIQ0RfUlhRTFZMX0lSUUhhbmRsZXIoaGhjZCk7CisKKyAgICAgIFVTQl9VTk1BU0tfSU5URVJSVVBUKGhoY2QtPkluc3RhbmNlLCBVU0JfT1RHX0dJTlRTVFNfUlhGTFZMKTsKKyAgICB9CiAgIH0KIH0KIApAQCAtMTA3NSw3ICsxMDgwLDcgQEAKICAgKiBAcGFyYW0gIGhoY2QgSENEIGhhbmRsZQogICAqIEByZXR2YWwgSEFMIHN0YXRlCiAgICovCi1IQ0RfU3RhdGVUeXBlRGVmIEhBTF9IQ0RfR2V0U3RhdGUoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpCitIQ0RfU3RhdGVUeXBlRGVmIEhBTF9IQ0RfR2V0U3RhdGUoSENEX0hhbmRsZVR5cGVEZWYgY29uc3QgKmhoY2QpCiB7CiAgIHJldHVybiBoaGNkLT5TdGF0ZTsKIH0KQEAgLTEwOTQsNyArMTA5OSw3IEBACiAgICogICAgICAgICAgICBVUkJfRVJST1IvCiAgICogICAgICAgICAgICBVUkJfU1RBTEwKICAgKi8KLUhDRF9VUkJTdGF0ZVR5cGVEZWYgSEFMX0hDRF9IQ19HZXRVUkJTdGF0ZShIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwgdWludDhfdCBjaG51bSkKK0hDRF9VUkJTdGF0ZVR5cGVEZWYgSEFMX0hDRF9IQ19HZXRVUkJTdGF0ZShIQ0RfSGFuZGxlVHlwZURlZiBjb25zdCAqaGhjZCwgdWludDhfdCBjaG51bSkKIHsKICAgcmV0dXJuIGhoY2QtPmhjW2NobnVtXS51cmJfc3RhdGU7CiB9CkBAIC0xMTA3LDcgKzExMTIsNyBAQAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgZnJvbSAxIHRvIDE1CiAgICogQHJldHZhbCBsYXN0IHRyYW5zZmVyIHNpemUgaW4gYnl0ZQogICAqLwotdWludDMyX3QgSEFMX0hDRF9IQ19HZXRYZmVyQ291bnQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsIHVpbnQ4X3QgY2hudW0pCit1aW50MzJfdCBIQUxfSENEX0hDX0dldFhmZXJDb3VudChIQ0RfSGFuZGxlVHlwZURlZiBjb25zdCAqaGhjZCwgdWludDhfdCBjaG51bSkKIHsKICAgcmV0dXJuIGhoY2QtPmhjW2NobnVtXS54ZmVyX2NvdW50OwogfQpAQCAtMTEyOSw3ICsxMTM0LDcgQEAKICAgKiAgICAgICAgICAgIEhDX0JCTEVSUi8KICAgKiAgICAgICAgICAgIEhDX0RBVEFUR0xFUlIKICAgKi8KLUhDRF9IQ1N0YXRlVHlwZURlZiAgSEFMX0hDRF9IQ19HZXRTdGF0ZShIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwgdWludDhfdCBjaG51bSkKK0hDRF9IQ1N0YXRlVHlwZURlZiAgSEFMX0hDRF9IQ19HZXRTdGF0ZShIQ0RfSGFuZGxlVHlwZURlZiBjb25zdCAqaGhjZCwgdWludDhfdCBjaG51bSkKIHsKICAgcmV0dXJuIGhoY2QtPmhjW2NobnVtXS5zdGF0ZTsKIH0KQEAgLTExNTUsNiArMTE2MCwzOSBAQAogfQogCiAvKioKKyAgKiBAYnJpZWYgIFNldCBob3N0IGNoYW5uZWwgSHViIGluZm9ybWF0aW9uLgorICAqIEBwYXJhbSAgaGhjZCBIQ0QgaGFuZGxlCisgICogQHBhcmFtICBjaF9udW0gQ2hhbm5lbCBudW1iZXIuCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBmcm9tIDEgdG8gMTUKKyAgKiBAcGFyYW0gIGFkZHIgSHViIGFkZHJlc3MKKyAgKiBAcGFyYW0gIFBvcnROYnIgSHViIHBvcnQgbnVtYmVyCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSENEX0hDX1NldEh1YkluZm8oSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsIHVpbnQ4X3QgY2hfbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWRkciwgdWludDhfdCBQb3J0TmJyKQoreworICBoaGNkLT5oY1tjaF9udW1dLmh1Yl9hZGRyID0gYWRkcjsKKyAgaGhjZC0+aGNbY2hfbnVtXS5odWJfcG9ydF9uYnIgPSBQb3J0TmJyOworCisgIHJldHVybiBIQUxfT0s7Cit9CisKKworLyoqCisgICogQGJyaWVmICBDbGVhciBob3N0IGNoYW5uZWwgaHViIGluZm9ybWF0aW9uLgorICAqIEBwYXJhbSAgaGhjZCBIQ0QgaGFuZGxlCisgICogQHBhcmFtICBjaF9udW0gQ2hhbm5lbCBudW1iZXIuCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBmcm9tIDEgdG8gMTUKKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQ0RfSENfQ2xlYXJIdWJJbmZvKEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkLCB1aW50OF90IGNoX251bSkKK3sKKyAgaGhjZC0+aGNbY2hfbnVtXS5odWJfYWRkciA9IDBVOworICBoaGNkLT5oY1tjaF9udW1dLmh1Yl9wb3J0X25iciA9IDBVOworCisgIHJldHVybiBIQUxfT0s7Cit9CisvKioKICAgKiBAfQogICAqLwogCkBAIC0xMTc2LDgzICsxMjE0LDcwIEBACiB7CiAgIFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCA9IGhoY2QtPkluc3RhbmNlOwogICB1aW50MzJfdCBVU0J4X0JBU0UgPSAodWludDMyX3QpVVNCeDsKLSAgdWludDMyX3QgY2hfbnVtID0gKHVpbnQzMl90KWNobnVtOwotCiAgIHVpbnQzMl90IHRtcHJlZzsKIAotICBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX0FIQkVSUikgPT0gVVNCX09UR19IQ0lOVF9BSEJFUlIpCisgIGlmIChfX0hBTF9IQ0RfR0VUX0NIX0ZMQUcoaGhjZCwgY2hudW0sIFVTQl9PVEdfSENJTlRfQUhCRVJSKSkKICAgewotICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX0FIQkVSUik7Ci0gICAgX19IQUxfSENEX1VOTUFTS19IQUxUX0hDX0lOVChjaF9udW0pOworICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hudW0sIFVTQl9PVEdfSENJTlRfQUhCRVJSKTsKKyAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19YQUNURVJSOworICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCBjaG51bSk7CiAgIH0KLSAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX0JCRVJSKSA9PSBVU0JfT1RHX0hDSU5UX0JCRVJSKQorICBlbHNlIGlmIChfX0hBTF9IQ0RfR0VUX0NIX0ZMQUcoaGhjZCwgY2hudW0sIFVTQl9PVEdfSENJTlRfQkJFUlIpKQogICB7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfQkJFUlIpOwotICAgIGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPSBIQ19CQkxFUlI7Ci0gICAgX19IQUxfSENEX1VOTUFTS19IQUxUX0hDX0lOVChjaF9udW0pOwotICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCAodWludDhfdCljaF9udW0pOworICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hudW0sIFVTQl9PVEdfSENJTlRfQkJFUlIpOworICAgIGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9IEhDX0JCTEVSUjsKKyAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hudW0pOwogICB9Ci0gIGVsc2UgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9BQ0spID09IFVTQl9PVEdfSENJTlRfQUNLKQorICBlbHNlIGlmIChfX0hBTF9IQ0RfR0VUX0NIX0ZMQUcoaGhjZCwgY2hudW0sIFVTQl9PVEdfSENJTlRfU1RBTEwpKQogICB7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfQUNLKTsKKyAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNobnVtLCBVU0JfT1RHX0hDSU5UX1NUQUxMKTsKKyAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19TVEFMTDsKKyAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hudW0pOwogICB9Ci0gIGVsc2UgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9TVEFMTCkgPT0gVVNCX09UR19IQ0lOVF9TVEFMTCkKKyAgZWxzZSBpZiAoX19IQUxfSENEX0dFVF9DSF9GTEFHKGhoY2QsIGNobnVtLCBVU0JfT1RHX0hDSU5UX0RURVJSKSkKICAgewotICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKLSAgICBoaGNkLT5oY1tjaF9udW1dLnN0YXRlID0gSENfU1RBTEw7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfTkFLKTsKLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9TVEFMTCk7Ci0gICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9EVEVSUik7CisgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfREFUQVRHTEVSUjsKKyAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hudW0pOwogICB9Ci0gIGVsc2UgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9EVEVSUikgPT0gVVNCX09UR19IQ0lOVF9EVEVSUikKKyAgZWxzZSBpZiAoX19IQUxfSENEX0dFVF9DSF9GTEFHKGhoY2QsIGNobnVtLCBVU0JfT1RHX0hDSU5UX1RYRVJSKSkKICAgewotICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKLSAgICBoaGNkLT5oY1tjaF9udW1dLnN0YXRlID0gSENfREFUQVRHTEVSUjsKLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9OQUspOwotICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX0RURVJSKTsKLSAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKLSAgfQotICBlbHNlIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfVFhFUlIpID09IFVTQl9PVEdfSENJTlRfVFhFUlIpCi0gIHsKLSAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7Ci0gICAgaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9IEhDX1hBQ1RFUlI7Ci0gICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfVFhFUlIpOworICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hudW0sIFVTQl9PVEdfSENJTlRfVFhFUlIpOworICAgIGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9IEhDX1hBQ1RFUlI7CisgICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsIGNobnVtKTsKICAgfQogICBlbHNlCiAgIHsKICAgICAvKiAuLi4gKi8KICAgfQogCi0gIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfRlJNT1IpID09IFVTQl9PVEdfSENJTlRfRlJNT1IpCisgIGlmIChfX0hBTF9IQ0RfR0VUX0NIX0ZMQUcoaGhjZCwgY2hudW0sIFVTQl9PVEdfSENJTlRfRlJNT1IpKQogICB7Ci0gICAgX19IQUxfSENEX1VOTUFTS19IQUxUX0hDX0lOVChjaF9udW0pOwotICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCAodWludDhfdCljaF9udW0pOwotICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX0ZSTU9SKTsKKyAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hudW0pOworICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hudW0sIFVTQl9PVEdfSENJTlRfRlJNT1IpOwogICB9Ci0gIGVsc2UgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9YRlJDKSA9PSBVU0JfT1RHX0hDSU5UX1hGUkMpCisgIGVsc2UgaWYgKF9fSEFMX0hDRF9HRVRfQ0hfRkxBRyhoaGNkLCBjaG51bSwgVVNCX09UR19IQ0lOVF9YRlJDKSkKICAgewotICAgIGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPSBIQ19YRlJDOwotICAgIGhoY2QtPmhjW2NoX251bV0uRXJyQ250ID0gMFU7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfWEZSQyk7CisgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfWEZSQzsKKyAgICBoaGNkLT5oY1tjaG51bV0uRXJyQ250ID0gMFU7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9YRlJDKTsKIAotICAgIGlmICgoaGhjZC0+aGNbY2hfbnVtXS5lcF90eXBlID09IEVQX1RZUEVfQ1RSTCkgfHwKLSAgICAgICAgKGhoY2QtPmhjW2NoX251bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0JVTEspKQorICAgIGlmICgoaGhjZC0+aGNbY2hudW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9DVFJMKSB8fAorICAgICAgICAoaGhjZC0+aGNbY2hudW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9CVUxLKSkKICAgICB7Ci0gICAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7Ci0gICAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKLSAgICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX05BSyk7CisgICAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hudW0pOworICAgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9OQUspOwogICAgIH0KLSAgICBlbHNlIGlmICgoaGhjZC0+aGNbY2hfbnVtXS5lcF90eXBlID09IEVQX1RZUEVfSU5UUikgfHwKLSAgICAgICAgICAgICAoaGhjZC0+aGNbY2hfbnVtXS5lcF90eXBlID09IEVQX1RZUEVfSVNPQykpCisgICAgZWxzZSBpZiAoKGhoY2QtPmhjW2NobnVtXS5lcF90eXBlID09IEVQX1RZUEVfSU5UUikgfHwKKyAgICAgICAgICAgICAoaGhjZC0+aGNbY2hudW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9JU09DKSkKICAgICB7Ci0gICAgICBVU0J4X0hDKGNoX251bSktPkhDQ0hBUiB8PSBVU0JfT1RHX0hDQ0hBUl9PRERGUk07Ci0gICAgICBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSA9IFVSQl9ET05FOworICAgICAgVVNCeF9IQyhjaG51bSktPkhDQ0hBUiB8PSBVU0JfT1RHX0hDQ0hBUl9PRERGUk07CisgICAgICBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlID0gVVJCX0RPTkU7CiAKICNpZiAoVVNFX0hBTF9IQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQotICAgICAgaGhjZC0+SENfTm90aWZ5VVJCQ2hhbmdlQ2FsbGJhY2soaGhjZCwgKHVpbnQ4X3QpY2hfbnVtLCBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSk7CisgICAgICBoaGNkLT5IQ19Ob3RpZnlVUkJDaGFuZ2VDYWxsYmFjayhoaGNkLCBjaG51bSwgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSk7CiAjZWxzZQotICAgICAgSEFMX0hDRF9IQ19Ob3RpZnlVUkJDaGFuZ2VfQ2FsbGJhY2soaGhjZCwgKHVpbnQ4X3QpY2hfbnVtLCBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSk7CisgICAgICBIQUxfSENEX0hDX05vdGlmeVVSQkNoYW5nZV9DYWxsYmFjayhoaGNkLCBjaG51bSwgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSk7CiAjZW5kaWYgLyogVVNFX0hBTF9IQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgICAgfQogICAgIGVsc2UKQEAgLTEyNjIsOTEgKzEyODcsMTMxIEBACiAKICAgICBpZiAoaGhjZC0+SW5pdC5kbWFfZW5hYmxlID09IDFVKQogICAgIHsKLSAgICAgIGlmICgoKGhoY2QtPmhjW2NoX251bV0uWGZlclNpemUgLyBoaGNkLT5oY1tjaF9udW1dLm1heF9wYWNrZXQpICYgMVUpICE9IDBVKQorICAgICAgaWYgKCgoKGhoY2QtPmhjW2NobnVtXS54ZmVyX2NvdW50ICsgaGhjZC0+aGNbY2hudW1dLm1heF9wYWNrZXQgLSAxVSkgLyBoaGNkLT5oY1tjaG51bV0ubWF4X3BhY2tldCkgJiAxVSkgIT0gMFUpCiAgICAgICB7Ci0gICAgICAgIGhoY2QtPmhjW2NoX251bV0udG9nZ2xlX2luIF49IDFVOworICAgICAgICBoaGNkLT5oY1tjaG51bV0udG9nZ2xlX2luIF49IDFVOwogICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgaGhjZC0+aGNbY2hfbnVtXS50b2dnbGVfaW4gXj0gMVU7CisgICAgICBoaGNkLT5oY1tjaG51bV0udG9nZ2xlX2luIF49IDFVOwogICAgIH0KICAgfQotICBlbHNlIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfQ0hIKSA9PSBVU0JfT1RHX0hDSU5UX0NISCkKKyAgZWxzZSBpZiAoX19IQUxfSENEX0dFVF9DSF9GTEFHKGhoY2QsIGNobnVtLCBVU0JfT1RHX0hDSU5UX0FDSykpCiAgIHsKLSAgICBfX0hBTF9IQ0RfTUFTS19IQUxUX0hDX0lOVChjaF9udW0pOworICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hudW0sIFVTQl9PVEdfSENJTlRfQUNLKTsKKyAgfQorICBlbHNlIGlmIChfX0hBTF9IQ0RfR0VUX0NIX0ZMQUcoaGhjZCwgY2hudW0sIFVTQl9PVEdfSENJTlRfQ0hIKSkKKyAgeworICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hudW0sIFVTQl9PVEdfSENJTlRfQ0hIKTsKIAotICAgIGlmIChoaGNkLT5oY1tjaF9udW1dLnN0YXRlID09IEhDX1hGUkMpCisgICAgaWYgKGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9PSBIQ19YRlJDKQogICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlID0gVVJCX0RPTkU7CisgICAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19IQUxURUQ7CisgICAgICBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlID0gVVJCX0RPTkU7CiAgICAgfQotICAgIGVsc2UgaWYgKGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPT0gSENfU1RBTEwpCisgICAgZWxzZSBpZiAoaGhjZC0+aGNbY2hudW1dLnN0YXRlID09IEhDX1NUQUxMKQogICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlID0gVVJCX1NUQUxMOworICAgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfSEFMVEVEOworICAgICAgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSA9IFVSQl9TVEFMTDsKICAgICB9Ci0gICAgZWxzZSBpZiAoKGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPT0gSENfWEFDVEVSUikgfHwKLSAgICAgICAgICAgICAoaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9PSBIQ19EQVRBVEdMRVJSKSkKKyAgICBlbHNlIGlmICgoaGhjZC0+aGNbY2hudW1dLnN0YXRlID09IEhDX1hBQ1RFUlIpIHx8CisgICAgICAgICAgICAgKGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9PSBIQ19EQVRBVEdMRVJSKSkKICAgICB7Ci0gICAgICBoaGNkLT5oY1tjaF9udW1dLkVyckNudCsrOwotICAgICAgaWYgKGhoY2QtPmhjW2NoX251bV0uRXJyQ250ID4gMlUpCisgICAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19IQUxURUQ7CisgICAgICBoaGNkLT5oY1tjaG51bV0uRXJyQ250Kys7CisgICAgICBpZiAoaGhjZC0+aGNbY2hudW1dLkVyckNudCA+IDJVKQogICAgICAgewotICAgICAgICBoaGNkLT5oY1tjaF9udW1dLkVyckNudCA9IDBVOwotICAgICAgICBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSA9IFVSQl9FUlJPUjsKKyAgICAgICAgaGhjZC0+aGNbY2hudW1dLkVyckNudCA9IDBVOworICAgICAgICBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlID0gVVJCX0VSUk9SOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSA9IFVSQl9OT1RSRUFEWTsKKyAgICAgICAgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSA9IFVSQl9OT1RSRUFEWTsKIAotICAgICAgICAvKiByZS1hY3RpdmF0ZSB0aGUgY2hhbm5lbCAqLwotICAgICAgICB0bXByZWcgPSBVU0J4X0hDKGNoX251bSktPkhDQ0hBUjsKLSAgICAgICAgdG1wcmVnICY9IH5VU0JfT1RHX0hDQ0hBUl9DSERJUzsKLSAgICAgICAgdG1wcmVnIHw9IFVTQl9PVEdfSENDSEFSX0NIRU5BOwotICAgICAgICBVU0J4X0hDKGNoX251bSktPkhDQ0hBUiA9IHRtcHJlZzsKKyAgICAgICAgaWYgKChoaGNkLT5oY1tjaG51bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0NUUkwpIHx8CisgICAgICAgICAgICAoaGhjZC0+aGNbY2hudW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9CVUxLKSkKKyAgICAgICAgeworICAgICAgICAgIC8qIHJlLWFjdGl2YXRlIHRoZSBjaGFubmVsICovCisgICAgICAgICAgdG1wcmVnID0gVVNCeF9IQyhjaG51bSktPkhDQ0hBUjsKKyAgICAgICAgICB0bXByZWcgJj0gflVTQl9PVEdfSENDSEFSX0NIRElTOworICAgICAgICAgIHRtcHJlZyB8PSBVU0JfT1RHX0hDQ0hBUl9DSEVOQTsKKyAgICAgICAgICBVU0J4X0hDKGNobnVtKS0+SENDSEFSID0gdG1wcmVnOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPT0gSENfTkFLKQorICAgIGVsc2UgaWYgKGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9PSBIQ19OWUVUKQogICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlICA9IFVSQl9OT1RSRUFEWTsKKyAgICAgIGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9IEhDX0hBTFRFRDsKKyAgICB9CisgICAgZWxzZSBpZiAoaGhjZC0+aGNbY2hudW1dLnN0YXRlID09IEhDX0FDSykKKyAgICB7CisgICAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19IQUxURUQ7CisgICAgfQorICAgIGVsc2UgaWYgKGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9PSBIQ19OQUspCisgICAgeworICAgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfSEFMVEVEOworICAgICAgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSA9IFVSQl9OT1RSRUFEWTsKIAotICAgICAgLyogcmUtYWN0aXZhdGUgdGhlIGNoYW5uZWwgKi8KLSAgICAgIHRtcHJlZyA9IFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSOwotICAgICAgdG1wcmVnICY9IH5VU0JfT1RHX0hDQ0hBUl9DSERJUzsKLSAgICAgIHRtcHJlZyB8PSBVU0JfT1RHX0hDQ0hBUl9DSEVOQTsKLSAgICAgIFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSID0gdG1wcmVnOworICAgICAgaWYgKChoaGNkLT5oY1tjaG51bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0NUUkwpIHx8CisgICAgICAgICAgKGhoY2QtPmhjW2NobnVtXS5lcF90eXBlID09IEVQX1RZUEVfQlVMSykpCisgICAgICB7CisgICAgICAgIC8qIHJlLWFjdGl2YXRlIHRoZSBjaGFubmVsICovCisgICAgICAgIHRtcHJlZyA9IFVTQnhfSEMoY2hudW0pLT5IQ0NIQVI7CisgICAgICAgIHRtcHJlZyAmPSB+VVNCX09UR19IQ0NIQVJfQ0hESVM7CisgICAgICAgIHRtcHJlZyB8PSBVU0JfT1RHX0hDQ0hBUl9DSEVOQTsKKyAgICAgICAgVVNCeF9IQyhjaG51bSktPkhDQ0hBUiA9IHRtcHJlZzsKKyAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAoaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9PSBIQ19CQkxFUlIpCisgICAgZWxzZSBpZiAoaGhjZC0+aGNbY2hudW1dLnN0YXRlID09IEhDX0JCTEVSUikKICAgICB7Ci0gICAgICBoaGNkLT5oY1tjaF9udW1dLkVyckNudCsrOwotICAgICAgaGhjZC0+aGNbY2hfbnVtXS51cmJfc3RhdGUgPSBVUkJfRVJST1I7CisgICAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19IQUxURUQ7CisgICAgICBoaGNkLT5oY1tjaG51bV0uRXJyQ250Kys7CisgICAgICBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlID0gVVJCX0VSUk9SOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgLyogLi4uICovCisgICAgICBpZiAoaGhjZC0+aGNbY2hudW1dLnN0YXRlID09IEhDX0hBTFRFRCkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQogICAgIH0KLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9DSEgpOwotICAgIEhBTF9IQ0RfSENfTm90aWZ5VVJCQ2hhbmdlX0NhbGxiYWNrKGhoY2QsICh1aW50OF90KWNoX251bSwgaGhjZC0+aGNbY2hfbnVtXS51cmJfc3RhdGUpOworCisjaWYgKFVTRV9IQUxfSENEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgICBoaGNkLT5IQ19Ob3RpZnlVUkJDaGFuZ2VDYWxsYmFjayhoaGNkLCBjaG51bSwgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSk7CisjZWxzZQorICAgIEhBTF9IQ0RfSENfTm90aWZ5VVJCQ2hhbmdlX0NhbGxiYWNrKGhoY2QsIGNobnVtLCBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0hDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgfQotICBlbHNlIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfTkFLKSA9PSBVU0JfT1RHX0hDSU5UX05BSykKKyAgZWxzZSBpZiAoX19IQUxfSENEX0dFVF9DSF9GTEFHKGhoY2QsIGNobnVtLCBVU0JfT1RHX0hDSU5UX05ZRVQpKQogICB7Ci0gICAgaWYgKGhoY2QtPmhjW2NoX251bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0lOVFIpCisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9OWUVUKTsKKyAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19OWUVUOworICAgIGhoY2QtPmhjW2NobnVtXS5FcnJDbnQgPSAwVTsKKworICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCBjaG51bSk7CisgIH0KKyAgZWxzZSBpZiAoX19IQUxfSENEX0dFVF9DSF9GTEFHKGhoY2QsIGNobnVtLCBVU0JfT1RHX0hDSU5UX05BSykpCisgIHsKKyAgICBpZiAoaGhjZC0+aGNbY2hudW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9JTlRSKQogICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0uRXJyQ250ID0gMFU7Ci0gICAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7Ci0gICAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKKyAgICAgIGhoY2QtPmhjW2NobnVtXS5FcnJDbnQgPSAwVTsKKyAgICAgIGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9IEhDX05BSzsKKyAgICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCBjaG51bSk7CiAgICAgfQotICAgIGVsc2UgaWYgKChoaGNkLT5oY1tjaF9udW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9DVFJMKSB8fAotICAgICAgICAgICAgIChoaGNkLT5oY1tjaF9udW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9CVUxLKSkKKyAgICBlbHNlIGlmICgoaGhjZC0+aGNbY2hudW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9DVFJMKSB8fAorICAgICAgICAgICAgIChoaGNkLT5oY1tjaG51bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0JVTEspKQogICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0uRXJyQ250ID0gMFU7Ci0gICAgICBoaGNkLT5oY1tjaF9udW1dLnN0YXRlID0gSENfTkFLOwotICAgICAgX19IQUxfSENEX1VOTUFTS19IQUxUX0hDX0lOVChjaF9udW0pOwotICAgICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7CisgICAgICBoaGNkLT5oY1tjaG51bV0uRXJyQ250ID0gMFU7CisgICAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19OQUs7CisgICAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hudW0pOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgLyogLi4uICovCiAgICAgfQotICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX05BSyk7CisKKyAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNobnVtLCBVU0JfT1RHX0hDSU5UX05BSyk7CiAgIH0KICAgZWxzZQogICB7CkBAIC0xMzY1LDE1NyArMTQzMCwxMzUgQEAKIHsKICAgVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4ID0gaGhjZC0+SW5zdGFuY2U7CiAgIHVpbnQzMl90IFVTQnhfQkFTRSA9ICh1aW50MzJfdClVU0J4OwotICB1aW50MzJfdCBjaF9udW0gPSAodWludDMyX3QpY2hudW07CiAgIHVpbnQzMl90IHRtcHJlZzsKICAgdWludDMyX3QgbnVtX3BhY2tldHM7CiAKLSAgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9BSEJFUlIpID09IFVTQl9PVEdfSENJTlRfQUhCRVJSKQorICBpZiAoX19IQUxfSENEX0dFVF9DSF9GTEFHKGhoY2QsIGNobnVtLCBVU0JfT1RHX0hDSU5UX0FIQkVSUikpCiAgIHsKLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9BSEJFUlIpOwotICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKKyAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNobnVtLCBVU0JfT1RHX0hDSU5UX0FIQkVSUik7CisgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfWEFDVEVSUjsKKyAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hudW0pOwogICB9Ci0gIGVsc2UgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9BQ0spID09IFVTQl9PVEdfSENJTlRfQUNLKQorICBlbHNlIGlmIChfX0hBTF9IQ0RfR0VUX0NIX0ZMQUcoaGhjZCwgY2hudW0sIFVTQl9PVEdfSENJTlRfQUNLKSkKICAgewotICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX0FDSyk7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9BQ0spOworICB9CisgIGVsc2UgaWYgKF9fSEFMX0hDRF9HRVRfQ0hfRkxBRyhoaGNkLCBjaG51bSwgVVNCX09UR19IQ0lOVF9GUk1PUikpCisgIHsKKyAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNobnVtLCBVU0JfT1RHX0hDSU5UX0ZSTU9SKTsKKyAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hudW0pOworICB9CisgIGVsc2UgaWYgKF9fSEFMX0hDRF9HRVRfQ0hfRkxBRyhoaGNkLCBjaG51bSwgVVNCX09UR19IQ0lOVF9YRlJDKSkKKyAgeworICAgIGhoY2QtPmhjW2NobnVtXS5FcnJDbnQgPSAwVTsKIAotICAgIGlmIChoaGNkLT5oY1tjaF9udW1dLmRvX3BpbmcgPT0gMVUpCisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9YRlJDKTsKKyAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19YRlJDOworICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCBjaG51bSk7CisgIH0KKyAgZWxzZSBpZiAoX19IQUxfSENEX0dFVF9DSF9GTEFHKGhoY2QsIGNobnVtLCBVU0JfT1RHX0hDSU5UX1NUQUxMKSkKKyAgeworICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hudW0sIFVTQl9PVEdfSENJTlRfU1RBTEwpOworICAgIGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9IEhDX1NUQUxMOworICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCBjaG51bSk7CisgIH0KKyAgZWxzZSBpZiAoX19IQUxfSENEX0dFVF9DSF9GTEFHKGhoY2QsIGNobnVtLCBVU0JfT1RHX0hDSU5UX05BSykpCisgIHsKKyAgICBoaGNkLT5oY1tjaG51bV0uRXJyQ250ID0gMFU7CisgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfTkFLOworCisgICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsIGNobnVtKTsKKyAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNobnVtLCBVU0JfT1RHX0hDSU5UX05BSyk7CisgIH0KKyAgZWxzZSBpZiAoX19IQUxfSENEX0dFVF9DSF9GTEFHKGhoY2QsIGNobnVtLCBVU0JfT1RHX0hDSU5UX1RYRVJSKSkKKyAgeworICAgIGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9IEhDX1hBQ1RFUlI7CisgICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsIGNobnVtKTsKKyAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNobnVtLCBVU0JfT1RHX0hDSU5UX1RYRVJSKTsKKyAgfQorICBlbHNlIGlmIChfX0hBTF9IQ0RfR0VUX0NIX0ZMQUcoaGhjZCwgY2hudW0sIFVTQl9PVEdfSENJTlRfRFRFUlIpKQorICB7CisgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfREFUQVRHTEVSUjsKKyAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hudW0pOworICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hudW0sIFVTQl9PVEdfSENJTlRfRFRFUlIpOworICB9CisgIGVsc2UgaWYgKF9fSEFMX0hDRF9HRVRfQ0hfRkxBRyhoaGNkLCBjaG51bSwgVVNCX09UR19IQ0lOVF9DSEgpKQorICB7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9DSEgpOworCisgICAgaWYgKGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9PSBIQ19YRlJDKQogICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0uZG9fcGluZyA9IDBVOwotICAgICAgaGhjZC0+aGNbY2hfbnVtXS51cmJfc3RhdGUgID0gVVJCX05PVFJFQURZOwotICAgICAgX19IQUxfSENEX1VOTUFTS19IQUxUX0hDX0lOVChjaF9udW0pOwotICAgICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7Ci0gICAgfQotICB9Ci0gIGVsc2UgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9GUk1PUikgPT0gVVNCX09UR19IQ0lOVF9GUk1PUikKLSAgewotICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKLSAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9GUk1PUik7Ci0gIH0KLSAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX1hGUkMpID09IFVTQl9PVEdfSENJTlRfWEZSQykKLSAgewotICAgIGhoY2QtPmhjW2NoX251bV0uRXJyQ250ID0gMFU7CisgICAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19IQUxURUQ7CisgICAgICBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlID0gVVJCX0RPTkU7CiAKLSAgICAvKiB0cmFuc2FjdGlvbiBjb21wbGV0ZWQgd2l0aCBOWUVUIHN0YXRlLCB1cGRhdGUgZG8gcGluZyBzdGF0ZSAqLwotICAgIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfTllFVCkgPT0gVVNCX09UR19IQ0lOVF9OWUVUKQotICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0uZG9fcGluZyA9IDFVOwotICAgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfTllFVCk7Ci0gICAgfQotICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKLSAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9YRlJDKTsKLSAgICBoaGNkLT5oY1tjaF9udW1dLnN0YXRlID0gSENfWEZSQzsKLSAgfQotICBlbHNlIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfTllFVCkgPT0gVVNCX09UR19IQ0lOVF9OWUVUKQotICB7Ci0gICAgaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9IEhDX05ZRVQ7Ci0gICAgaGhjZC0+aGNbY2hfbnVtXS5kb19waW5nID0gMVU7Ci0gICAgaGhjZC0+aGNbY2hfbnVtXS5FcnJDbnQgPSAwVTsKLSAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7Ci0gICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfTllFVCk7Ci0gIH0KLSAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX1NUQUxMKSA9PSBVU0JfT1RHX0hDSU5UX1NUQUxMKQotICB7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfU1RBTEwpOwotICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKLSAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKLSAgICBoaGNkLT5oY1tjaF9udW1dLnN0YXRlID0gSENfU1RBTEw7Ci0gIH0KLSAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX05BSykgPT0gVVNCX09UR19IQ0lOVF9OQUspCi0gIHsKLSAgICBoaGNkLT5oY1tjaF9udW1dLkVyckNudCA9IDBVOwotICAgIGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPSBIQ19OQUs7Ci0KLSAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7Ci0gICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfTkFLKTsKLSAgfQotICBlbHNlIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfVFhFUlIpID09IFVTQl9PVEdfSENJTlRfVFhFUlIpCi0gIHsKLSAgICBoaGNkLT5oY1tjaF9udW1dLnN0YXRlID0gSENfWEFDVEVSUjsKLSAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7Ci0gICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfVFhFUlIpOwotICB9Ci0gIGVsc2UgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9EVEVSUikgPT0gVVNCX09UR19IQ0lOVF9EVEVSUikKLSAgewotICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKLSAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9OQUspOwotICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX0RURVJSKTsKLSAgICBoaGNkLT5oY1tjaF9udW1dLnN0YXRlID0gSENfREFUQVRHTEVSUjsKLSAgfQotICBlbHNlIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfQ0hIKSA9PSBVU0JfT1RHX0hDSU5UX0NISCkKLSAgewotICAgIF9fSEFMX0hDRF9NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7Ci0KLSAgICBpZiAoaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9PSBIQ19YRlJDKQotICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlICA9IFVSQl9ET05FOwotICAgICAgaWYgKChoaGNkLT5oY1tjaF9udW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9CVUxLKSB8fAotICAgICAgICAgIChoaGNkLT5oY1tjaF9udW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9JTlRSKSkKKyAgICAgIGlmICgoaGhjZC0+aGNbY2hudW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9CVUxLKSB8fAorICAgICAgICAgIChoaGNkLT5oY1tjaG51bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0lOVFIpKQogICAgICAgewogICAgICAgICBpZiAoaGhjZC0+SW5pdC5kbWFfZW5hYmxlID09IDBVKQogICAgICAgICB7Ci0gICAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS50b2dnbGVfb3V0IF49IDFVOworICAgICAgICAgIGhoY2QtPmhjW2NobnVtXS50b2dnbGVfb3V0IF49IDFVOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKChoaGNkLT5Jbml0LmRtYV9lbmFibGUgPT0gMVUpICYmIChoaGNkLT5oY1tjaF9udW1dLnhmZXJfbGVuID4gMFUpKQorICAgICAgICBpZiAoKGhoY2QtPkluaXQuZG1hX2VuYWJsZSA9PSAxVSkgJiYgKGhoY2QtPmhjW2NobnVtXS54ZmVyX2xlbiA+IDBVKSkKICAgICAgICAgewotICAgICAgICAgIG51bV9wYWNrZXRzID0gKGhoY2QtPmhjW2NoX251bV0ueGZlcl9sZW4gKyBoaGNkLT5oY1tjaF9udW1dLm1heF9wYWNrZXQgLSAxVSkgLyBoaGNkLT5oY1tjaF9udW1dLm1heF9wYWNrZXQ7CisgICAgICAgICAgbnVtX3BhY2tldHMgPSAoaGhjZC0+aGNbY2hudW1dLnhmZXJfbGVuICsgaGhjZC0+aGNbY2hudW1dLm1heF9wYWNrZXQgLSAxVSkgLyBoaGNkLT5oY1tjaG51bV0ubWF4X3BhY2tldDsKIAogICAgICAgICAgIGlmICgobnVtX3BhY2tldHMgJiAxVSkgIT0gMFUpCiAgICAgICAgICAgewotICAgICAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS50b2dnbGVfb3V0IF49IDFVOworICAgICAgICAgICAgaGhjZC0+aGNbY2hudW1dLnRvZ2dsZV9vdXQgXj0gMVU7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPT0gSENfTkFLKQorICAgIGVsc2UgaWYgKGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9PSBIQ19BQ0spCiAgICAgewotICAgICAgaGhjZC0+aGNbY2hfbnVtXS51cmJfc3RhdGUgPSBVUkJfTk9UUkVBRFk7CisgICAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19IQUxURUQ7CiAgICAgfQotICAgIGVsc2UgaWYgKGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPT0gSENfTllFVCkKKyAgICBlbHNlIGlmIChoaGNkLT5oY1tjaG51bV0uc3RhdGUgPT0gSENfTkFLKQogICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlICA9IFVSQl9OT1RSRUFEWTsKKyAgICAgIGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9IEhDX0hBTFRFRDsKKyAgICAgIGhoY2QtPmhjW2NobnVtXS51cmJfc3RhdGUgPSBVUkJfTk9UUkVBRFk7CiAgICAgfQotICAgIGVsc2UgaWYgKGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPT0gSENfU1RBTEwpCisgICAgZWxzZSBpZiAoaGhjZC0+aGNbY2hudW1dLnN0YXRlID09IEhDX1NUQUxMKQogICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlICA9IFVSQl9TVEFMTDsKKyAgICAgIGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9IEhDX0hBTFRFRDsKKyAgICAgIGhoY2QtPmhjW2NobnVtXS51cmJfc3RhdGUgID0gVVJCX1NUQUxMOwogICAgIH0KLSAgICBlbHNlIGlmICgoaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9PSBIQ19YQUNURVJSKSB8fAotICAgICAgICAgICAgIChoaGNkLT5oY1tjaF9udW1dLnN0YXRlID09IEhDX0RBVEFUR0xFUlIpKQorICAgIGVsc2UgaWYgKChoaGNkLT5oY1tjaG51bV0uc3RhdGUgPT0gSENfWEFDVEVSUikgfHwKKyAgICAgICAgICAgICAoaGhjZC0+aGNbY2hudW1dLnN0YXRlID09IEhDX0RBVEFUR0xFUlIpKQogICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0uRXJyQ250Kys7Ci0gICAgICBpZiAoaGhjZC0+aGNbY2hfbnVtXS5FcnJDbnQgPiAyVSkKKyAgICAgIGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9IEhDX0hBTFRFRDsKKyAgICAgIGhoY2QtPmhjW2NobnVtXS5FcnJDbnQrKzsKKyAgICAgIGlmIChoaGNkLT5oY1tjaG51bV0uRXJyQ250ID4gMlUpCiAgICAgICB7Ci0gICAgICAgIGhoY2QtPmhjW2NoX251bV0uRXJyQ250ID0gMFU7Ci0gICAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlID0gVVJCX0VSUk9SOworICAgICAgICBoaGNkLT5oY1tjaG51bV0uRXJyQ250ID0gMFU7CisgICAgICAgIGhoY2QtPmhjW2NobnVtXS51cmJfc3RhdGUgPSBVUkJfRVJST1I7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlID0gVVJCX05PVFJFQURZOworICAgICAgICBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlID0gVVJCX05PVFJFQURZOwogCiAgICAgICAgIC8qIHJlLWFjdGl2YXRlIHRoZSBjaGFubmVsICAqLwotICAgICAgICB0bXByZWcgPSBVU0J4X0hDKGNoX251bSktPkhDQ0hBUjsKKyAgICAgICAgdG1wcmVnID0gVVNCeF9IQyhjaG51bSktPkhDQ0hBUjsKICAgICAgICAgdG1wcmVnICY9IH5VU0JfT1RHX0hDQ0hBUl9DSERJUzsKICAgICAgICAgdG1wcmVnIHw9IFVTQl9PVEdfSENDSEFSX0NIRU5BOwotICAgICAgICBVU0J4X0hDKGNoX251bSktPkhDQ0hBUiA9IHRtcHJlZzsKKyAgICAgICAgVVNCeF9IQyhjaG51bSktPkhDQ0hBUiA9IHRtcHJlZzsKICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIC8qIC4uLiAqLworICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX0NISCk7Ci0gICAgSEFMX0hDRF9IQ19Ob3RpZnlVUkJDaGFuZ2VfQ2FsbGJhY2soaGhjZCwgKHVpbnQ4X3QpY2hfbnVtLCBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSk7CisjaWYgKFVTRV9IQUxfSENEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgICBoaGNkLT5IQ19Ob3RpZnlVUkJDaGFuZ2VDYWxsYmFjayhoaGNkLCBjaG51bSwgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSk7CisjZWxzZQorICAgIEhBTF9IQ0RfSENfTm90aWZ5VVJCQ2hhbmdlX0NhbGxiYWNrKGhoY2QsIGNobnVtLCBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0hDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiAuLi4gKi8KKyAgICByZXR1cm47CiAgIH0KIH0KIApAQCAtMTUzMywxMCArMTU3NiwxMCBAQAogICB1aW50MzJfdCBHcnhzdHNwUmVnOwogICB1aW50MzJfdCB4ZmVyU2l6ZVBrdENudDsKICAgdWludDMyX3QgdG1wcmVnOwotICB1aW50MzJfdCBjaF9udW07CisgIHVpbnQzMl90IGNobnVtOwogCiAgIEdyeHN0c3BSZWcgPSBoaGNkLT5JbnN0YW5jZS0+R1JYU1RTUDsKLSAgY2hfbnVtID0gR3J4c3RzcFJlZyAmIFVTQl9PVEdfR1JYU1RTUF9FUE5VTTsKKyAgY2hudW0gPSBHcnhzdHNwUmVnICYgVVNCX09UR19HUlhTVFNQX0VQTlVNOwogICBwa3RzdHMgPSAoR3J4c3RzcFJlZyAmIFVTQl9PVEdfR1JYU1RTUF9QS1RTVFMpID4+IDE3OwogICBwa3RjbnQgPSAoR3J4c3RzcFJlZyAmIFVTQl9PVEdfR1JYU1RTUF9CQ05UKSA+PiA0OwogCkBAIC0xNTQ0LDMzICsxNTg3LDMzIEBACiAgIHsKICAgICBjYXNlIEdSWFNUU19QS1RTVFNfSU46CiAgICAgICAvKiBSZWFkIHRoZSBkYXRhIGludG8gdGhlIGhvc3QgYnVmZmVyLiAqLwotICAgICAgaWYgKChwa3RjbnQgPiAwVSkgJiYgKGhoY2QtPmhjW2NoX251bV0ueGZlcl9idWZmICE9ICh2b2lkICopMCkpCisgICAgICBpZiAoKHBrdGNudCA+IDBVKSAmJiAoaGhjZC0+aGNbY2hudW1dLnhmZXJfYnVmZiAhPSAodm9pZCAqKTApKQogICAgICAgewotICAgICAgICBpZiAoKGhoY2QtPmhjW2NoX251bV0ueGZlcl9jb3VudCArIHBrdGNudCkgPD0gaGhjZC0+aGNbY2hfbnVtXS54ZmVyX2xlbikKKyAgICAgICAgaWYgKChoaGNkLT5oY1tjaG51bV0ueGZlcl9jb3VudCArIHBrdGNudCkgPD0gaGhjZC0+aGNbY2hudW1dLnhmZXJfbGVuKQogICAgICAgICB7CiAgICAgICAgICAgKHZvaWQpVVNCX1JlYWRQYWNrZXQoaGhjZC0+SW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS54ZmVyX2J1ZmYsICh1aW50MTZfdClwa3RjbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhoY2QtPmhjW2NobnVtXS54ZmVyX2J1ZmYsICh1aW50MTZfdClwa3RjbnQpOwogCiAgICAgICAgICAgLyogbWFuYWdlIG11bHRpcGxlIFhmZXIgKi8KLSAgICAgICAgICBoaGNkLT5oY1tjaF9udW1dLnhmZXJfYnVmZiArPSBwa3RjbnQ7Ci0gICAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS54ZmVyX2NvdW50ICs9IHBrdGNudDsKKyAgICAgICAgICBoaGNkLT5oY1tjaG51bV0ueGZlcl9idWZmICs9IHBrdGNudDsKKyAgICAgICAgICBoaGNkLT5oY1tjaG51bV0ueGZlcl9jb3VudCArPSBwa3RjbnQ7CiAKICAgICAgICAgICAvKiBnZXQgdHJhbnNmZXIgc2l6ZSBwYWNrZXQgY291bnQgKi8KLSAgICAgICAgICB4ZmVyU2l6ZVBrdENudCA9IChVU0J4X0hDKGNoX251bSktPkhDVFNJWiAmIFVTQl9PVEdfSENUU0laX1BLVENOVCkgPj4gMTk7CisgICAgICAgICAgeGZlclNpemVQa3RDbnQgPSAoVVNCeF9IQyhjaG51bSktPkhDVFNJWiAmIFVTQl9PVEdfSENUU0laX1BLVENOVCkgPj4gMTk7CiAKLSAgICAgICAgICBpZiAoKGhoY2QtPmhjW2NoX251bV0ubWF4X3BhY2tldCA9PSBwa3RjbnQpICYmICh4ZmVyU2l6ZVBrdENudCA+IDBVKSkKKyAgICAgICAgICBpZiAoKGhoY2QtPmhjW2NobnVtXS5tYXhfcGFja2V0ID09IHBrdGNudCkgJiYgKHhmZXJTaXplUGt0Q250ID4gMFUpKQogICAgICAgICAgIHsKICAgICAgICAgICAgIC8qIHJlLWFjdGl2YXRlIHRoZSBjaGFubmVsIHdoZW4gbW9yZSBwYWNrZXRzIGFyZSBleHBlY3RlZCAqLwotICAgICAgICAgICAgdG1wcmVnID0gVVNCeF9IQyhjaF9udW0pLT5IQ0NIQVI7CisgICAgICAgICAgICB0bXByZWcgPSBVU0J4X0hDKGNobnVtKS0+SENDSEFSOwogICAgICAgICAgICAgdG1wcmVnICY9IH5VU0JfT1RHX0hDQ0hBUl9DSERJUzsKICAgICAgICAgICAgIHRtcHJlZyB8PSBVU0JfT1RHX0hDQ0hBUl9DSEVOQTsKLSAgICAgICAgICAgIFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSID0gdG1wcmVnOwotICAgICAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS50b2dnbGVfaW4gXj0gMVU7CisgICAgICAgICAgICBVU0J4X0hDKGNobnVtKS0+SENDSEFSID0gdG1wcmVnOworICAgICAgICAgICAgaGhjZC0+aGNbY2hudW1dLnRvZ2dsZV9pbiBePSAxVTsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS51cmJfc3RhdGUgPSBVUkJfRVJST1I7CisgICAgICAgICAgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSA9IFVSQl9FUlJPUjsKICAgICAgICAgfQogICAgICAgfQogICAgICAgYnJlYWs7CkBAIC0xNjI1LDcgKzE2NjgsNyBAQAogCiAgICAgaWYgKChocHJ0MCAmIFVTQl9PVEdfSFBSVF9QRU5BKSA9PSBVU0JfT1RHX0hQUlRfUEVOQSkKICAgICB7Ci0gICAgICBpZiAoaGhjZC0+SW5pdC5waHlfaXRmYWNlICA9PSBVU0JfT1RHX0VNQkVEREVEX1BIWSkKKyAgICAgIGlmIChoaGNkLT5Jbml0LnBoeV9pdGZhY2UgPT0gVVNCX09UR19FTUJFRERFRF9QSFkpCiAgICAgICB7CiAgICAgICAgIGlmICgoaHBydDAgJiBVU0JfT1RHX0hQUlRfUFNQRCkgPT0gKEhQUlQwX1BSVFNQRF9MT1dfU1BFRUQgPDwgMTcpKQogICAgICAgICB7CkBAIC0xNjQwLDcgKzE2ODMsNyBAQAogICAgICAgewogICAgICAgICBpZiAoaGhjZC0+SW5pdC5zcGVlZCA9PSBIQ0RfU1BFRURfRlVMTCkKICAgICAgICAgewotICAgICAgICAgIFVTQnhfSE9TVC0+SEZJUiA9IDYwMDAwVTsKKyAgICAgICAgICBVU0J4X0hPU1QtPkhGSVIgPSBIRklSXzYwX01IWjsKICAgICAgICAgfQogICAgICAgfQogI2lmIChVU0VfSEFMX0hDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2hhbF9pMmMuYyBiL1NyYy9zdG0zMmYxeHhfaGFsX2kyYy5jCmluZGV4IDQ0NjgzMWIuLjA2NTFlODYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfaGFsX2kyYy5jCisrKyBiL1NyYy9zdG0zMmYxeHhfaGFsX2kyYy5jCkBAIC0zMCw3ICszMCw3IEBACiAgICAgKCMpIERlY2xhcmUgYSBJMkNfSGFuZGxlVHlwZURlZiBoYW5kbGUgc3RydWN0dXJlLCBmb3IgZXhhbXBsZToKICAgICAgICAgSTJDX0hhbmRsZVR5cGVEZWYgIGhpMmM7CiAKLSAgICAoIylJbml0aWFsaXplIHRoZSBJMkMgbG93IGxldmVsIHJlc291cmNlcyBieSBpbXBsZW1lbnRpbmcgdGhlIEByZWYgSEFMX0kyQ19Nc3BJbml0KCkgQVBJOgorICAgICgjKUluaXRpYWxpemUgdGhlIEkyQyBsb3cgbGV2ZWwgcmVzb3VyY2VzIGJ5IGltcGxlbWVudGluZyB0aGUgSEFMX0kyQ19Nc3BJbml0KCkgQVBJOgogICAgICAgICAoIyMpIEVuYWJsZSB0aGUgSTJDeCBpbnRlcmZhY2UgY2xvY2sKICAgICAgICAgKCMjKSBJMkMgcGlucyBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICAoKysrKSBFbmFibGUgdGhlIGNsb2NrIGZvciB0aGUgSTJDIEdQSU9zCkBAIC01MCw0OCArNTAsNDggQEAKICAgICAoIykgQ29uZmlndXJlIHRoZSBDb21tdW5pY2F0aW9uIFNwZWVkLCBEdXR5IGN5Y2xlLCBBZGRyZXNzaW5nIG1vZGUsIE93biBBZGRyZXNzMSwKICAgICAgICAgRHVhbCBBZGRyZXNzaW5nIG1vZGUsIE93biBBZGRyZXNzMiwgR2VuZXJhbCBjYWxsIGFuZCBOb3N0cmV0Y2ggbW9kZSBpbiB0aGUgaGkyYyBJbml0IHN0cnVjdHVyZS4KIAotICAgICgjKSBJbml0aWFsaXplIHRoZSBJMkMgcmVnaXN0ZXJzIGJ5IGNhbGxpbmcgdGhlIEByZWYgSEFMX0kyQ19Jbml0KCksIGNvbmZpZ3VyZXMgYWxzbyB0aGUgbG93IGxldmVsIEhhcmR3YXJlCi0gICAgICAgIChHUElPLCBDTE9DSywgTlZJQy4uLmV0YykgYnkgY2FsbGluZyB0aGUgY3VzdG9taXplZCBAcmVmIEhBTF9JMkNfTXNwSW5pdCgpIEFQSS4KKyAgICAoIykgSW5pdGlhbGl6ZSB0aGUgSTJDIHJlZ2lzdGVycyBieSBjYWxsaW5nIHRoZSBIQUxfSTJDX0luaXQoKSwgY29uZmlndXJlcyBhbHNvIHRoZSBsb3cgbGV2ZWwgSGFyZHdhcmUKKyAgICAgICAgKEdQSU8sIENMT0NLLCBOVklDLi4uZXRjKSBieSBjYWxsaW5nIHRoZSBjdXN0b21pemVkIEhBTF9JMkNfTXNwSW5pdCgpIEFQSS4KIAotICAgICgjKSBUbyBjaGVjayBpZiB0YXJnZXQgZGV2aWNlIGlzIHJlYWR5IGZvciBjb21tdW5pY2F0aW9uLCB1c2UgdGhlIGZ1bmN0aW9uIEByZWYgSEFMX0kyQ19Jc0RldmljZVJlYWR5KCkKKyAgICAoIykgVG8gY2hlY2sgaWYgdGFyZ2V0IGRldmljZSBpcyByZWFkeSBmb3IgY29tbXVuaWNhdGlvbiwgdXNlIHRoZSBmdW5jdGlvbiBIQUxfSTJDX0lzRGV2aWNlUmVhZHkoKQogCiAgICAgKCMpIEZvciBJMkMgSU8gYW5kIElPIE1FTSBvcGVyYXRpb25zLCB0aHJlZSBvcGVyYXRpb24gbW9kZXMgYXJlIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBkcml2ZXIgOgogCiAgICAgKioqIFBvbGxpbmcgbW9kZSBJTyBvcGVyYXRpb24gKioqCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQotICAgICAgKCspIFRyYW5zbWl0IGluIG1hc3RlciBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUgdXNpbmcgQHJlZiBIQUxfSTJDX01hc3Rlcl9UcmFuc21pdCgpCi0gICAgICAoKykgUmVjZWl2ZSBpbiBtYXN0ZXIgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlIHVzaW5nIEByZWYgSEFMX0kyQ19NYXN0ZXJfUmVjZWl2ZSgpCi0gICAgICAoKykgVHJhbnNtaXQgaW4gc2xhdmUgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlIHVzaW5nIEByZWYgSEFMX0kyQ19TbGF2ZV9UcmFuc21pdCgpCi0gICAgICAoKykgUmVjZWl2ZSBpbiBzbGF2ZSBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUgdXNpbmcgQHJlZiBIQUxfSTJDX1NsYXZlX1JlY2VpdmUoKQorICAgICAgKCspIFRyYW5zbWl0IGluIG1hc3RlciBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUgdXNpbmcgSEFMX0kyQ19NYXN0ZXJfVHJhbnNtaXQoKQorICAgICAgKCspIFJlY2VpdmUgaW4gbWFzdGVyIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gYmxvY2tpbmcgbW9kZSB1c2luZyBIQUxfSTJDX01hc3Rlcl9SZWNlaXZlKCkKKyAgICAgICgrKSBUcmFuc21pdCBpbiBzbGF2ZSBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUgdXNpbmcgSEFMX0kyQ19TbGF2ZV9UcmFuc21pdCgpCisgICAgICAoKykgUmVjZWl2ZSBpbiBzbGF2ZSBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUgdXNpbmcgSEFMX0kyQ19TbGF2ZV9SZWNlaXZlKCkKIAogICAgICoqKiBQb2xsaW5nIG1vZGUgSU8gTUVNIG9wZXJhdGlvbiAqKioKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQotICAgICAgKCspIFdyaXRlIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUgdG8gYSBzcGVjaWZpYyBtZW1vcnkgYWRkcmVzcyB1c2luZyBAcmVmIEhBTF9JMkNfTWVtX1dyaXRlKCkKLSAgICAgICgrKSBSZWFkIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUgZnJvbSBhIHNwZWNpZmljIG1lbW9yeSBhZGRyZXNzIHVzaW5nIEByZWYgSEFMX0kyQ19NZW1fUmVhZCgpCisgICAgICAoKykgV3JpdGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gYmxvY2tpbmcgbW9kZSB0byBhIHNwZWNpZmljIG1lbW9yeSBhZGRyZXNzIHVzaW5nIEhBTF9JMkNfTWVtX1dyaXRlKCkKKyAgICAgICgrKSBSZWFkIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUgZnJvbSBhIHNwZWNpZmljIG1lbW9yeSBhZGRyZXNzIHVzaW5nIEhBTF9JMkNfTWVtX1JlYWQoKQogCiAKICAgICAqKiogSW50ZXJydXB0IG1vZGUgSU8gb3BlcmF0aW9uICoqKgogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQotICAgICAgKCspIFRyYW5zbWl0IGluIG1hc3RlciBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHVzaW5nIEByZWYgSEFMX0kyQ19NYXN0ZXJfVHJhbnNtaXRfSVQoKQotICAgICAgKCspIEF0IHRyYW5zbWlzc2lvbiBlbmQgb2YgdHJhbnNmZXIsIEByZWYgSEFMX0kyQ19NYXN0ZXJUeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgotICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBAcmVmIEhBTF9JMkNfTWFzdGVyVHhDcGx0Q2FsbGJhY2soKQotICAgICAgKCspIFJlY2VpdmUgaW4gbWFzdGVyIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgdXNpbmcgQHJlZiBIQUxfSTJDX01hc3Rlcl9SZWNlaXZlX0lUKCkKLSAgICAgICgrKSBBdCByZWNlcHRpb24gZW5kIG9mIHRyYW5zZmVyLCBAcmVmIEhBTF9JMkNfTWFzdGVyUnhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX01hc3RlclJ4Q3BsdENhbGxiYWNrKCkKLSAgICAgICgrKSBUcmFuc21pdCBpbiBzbGF2ZSBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHVzaW5nIEByZWYgSEFMX0kyQ19TbGF2ZV9UcmFuc21pdF9JVCgpCi0gICAgICAoKykgQXQgdHJhbnNtaXNzaW9uIGVuZCBvZiB0cmFuc2ZlciwgQHJlZiBIQUxfSTJDX1NsYXZlVHhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX1NsYXZlVHhDcGx0Q2FsbGJhY2soKQotICAgICAgKCspIFJlY2VpdmUgaW4gc2xhdmUgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB1c2luZyBAcmVmIEhBTF9JMkNfU2xhdmVfUmVjZWl2ZV9JVCgpCi0gICAgICAoKykgQXQgcmVjZXB0aW9uIGVuZCBvZiB0cmFuc2ZlciwgQHJlZiBIQUxfSTJDX1NsYXZlUnhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX1NsYXZlUnhDcGx0Q2FsbGJhY2soKQotICAgICAgKCspIEluIGNhc2Ugb2YgdHJhbnNmZXIgRXJyb3IsIEByZWYgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkKLSAgICAgICgrKSBBYm9ydCBhIG1hc3RlciBJMkMgcHJvY2VzcyBjb21tdW5pY2F0aW9uIHdpdGggSW50ZXJydXB0IHVzaW5nIEByZWYgSEFMX0kyQ19NYXN0ZXJfQWJvcnRfSVQoKQotICAgICAgKCspIEVuZCBvZiBhYm9ydCBwcm9jZXNzLCBAcmVmIEhBTF9JMkNfQWJvcnRDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX0Fib3J0Q3BsdENhbGxiYWNrKCkKKyAgICAgICgrKSBUcmFuc21pdCBpbiBtYXN0ZXIgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB1c2luZyBIQUxfSTJDX01hc3Rlcl9UcmFuc21pdF9JVCgpCisgICAgICAoKykgQXQgdHJhbnNtaXNzaW9uIGVuZCBvZiB0cmFuc2ZlciwgSEFMX0kyQ19NYXN0ZXJUeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgorICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJDX01hc3RlclR4Q3BsdENhbGxiYWNrKCkKKyAgICAgICgrKSBSZWNlaXZlIGluIG1hc3RlciBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHVzaW5nIEhBTF9JMkNfTWFzdGVyX1JlY2VpdmVfSVQoKQorICAgICAgKCspIEF0IHJlY2VwdGlvbiBlbmQgb2YgdHJhbnNmZXIsIEhBTF9JMkNfTWFzdGVyUnhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19NYXN0ZXJSeENwbHRDYWxsYmFjaygpCisgICAgICAoKykgVHJhbnNtaXQgaW4gc2xhdmUgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB1c2luZyBIQUxfSTJDX1NsYXZlX1RyYW5zbWl0X0lUKCkKKyAgICAgICgrKSBBdCB0cmFuc21pc3Npb24gZW5kIG9mIHRyYW5zZmVyLCBIQUxfSTJDX1NsYXZlVHhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19TbGF2ZVR4Q3BsdENhbGxiYWNrKCkKKyAgICAgICgrKSBSZWNlaXZlIGluIHNsYXZlIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgdXNpbmcgSEFMX0kyQ19TbGF2ZV9SZWNlaXZlX0lUKCkKKyAgICAgICgrKSBBdCByZWNlcHRpb24gZW5kIG9mIHRyYW5zZmVyLCBIQUxfSTJDX1NsYXZlUnhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19TbGF2ZVJ4Q3BsdENhbGxiYWNrKCkKKyAgICAgICgrKSBJbiBjYXNlIG9mIHRyYW5zZmVyIEVycm9yLCBIQUxfSTJDX0Vycm9yQ2FsbGJhY2soKSBmdW5jdGlvbiBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkKKyAgICAgICgrKSBBYm9ydCBhIG1hc3RlciBJMkMgcHJvY2VzcyBjb21tdW5pY2F0aW9uIHdpdGggSW50ZXJydXB0IHVzaW5nIEhBTF9JMkNfTWFzdGVyX0Fib3J0X0lUKCkKKyAgICAgICgrKSBFbmQgb2YgYWJvcnQgcHJvY2VzcywgSEFMX0kyQ19BYm9ydENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgorICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJDX0Fib3J0Q3BsdENhbGxiYWNrKCkKIAogICAgICoqKiBJbnRlcnJ1cHQgbW9kZSBvciBETUEgbW9kZSBJTyBzZXF1ZW50aWFsIG9wZXJhdGlvbiAqKioKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMDAsMTQgKzEwMCwxNCBAQAogICAgICAgICAgIHdoZW4gYSBkaXJlY3Rpb24gY2hhbmdlIGR1cmluZyB0cmFuc2ZlcgogICAgIFsuLl0KICAgICAgICgrKSBBIHNwZWNpZmljIG9wdGlvbiBmaWVsZCBtYW5hZ2UgdGhlIGRpZmZlcmVudCBzdGVwcyBvZiBhIHNlcXVlbnRpYWwgdHJhbnNmZXIKLSAgICAgICgrKSBPcHRpb24gZmllbGQgdmFsdWVzIGFyZSBkZWZpbmVkIHRocm91Z2ggQHJlZiBJMkNfWGZlck9wdGlvbnNfZGVmaW5pdGlvbiBhbmQgYXJlIGxpc3RlZCBiZWxvdzoKKyAgICAgICgrKSBPcHRpb24gZmllbGQgdmFsdWVzIGFyZSBkZWZpbmVkIHRocm91Z2ggSTJDX1hmZXJPcHRpb25zX2RlZmluaXRpb24gYW5kIGFyZSBsaXN0ZWQgYmVsb3c6CiAgICAgICAoKyspIEkyQ19GSVJTVF9BTkRfTEFTVF9GUkFNRTogTm8gc2VxdWVudGlhbCB1c2FnZSwgZnVuY3Rpb25hbCBpcyBzYW1lIGFzIGFzc29jaWF0ZWQgaW50ZXJmYWNlcyBpbiBubyBzZXF1ZW50aWFsIG1vZGUKICAgICAgICgrKykgSTJDX0ZJUlNUX0ZSQU1FOiBTZXF1ZW50aWFsIHVzYWdlLCB0aGlzIG9wdGlvbiBhbGxvdyB0byBtYW5hZ2UgYSBzZXF1ZW5jZSB3aXRoIHN0YXJ0IGNvbmRpdGlvbiwgYWRkcmVzcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBkYXRhIHRvIHRyYW5zZmVyIHdpdGhvdXQgYSBmaW5hbCBzdG9wIGNvbmRpdGlvbgogICAgICAgKCsrKSBJMkNfRklSU1RfQU5EX05FWFRfRlJBTUU6IFNlcXVlbnRpYWwgdXNhZ2UgKE1hc3RlciBvbmx5KSwgdGhpcyBvcHRpb24gYWxsb3cgdG8gbWFuYWdlIGEgc2VxdWVuY2Ugd2l0aCBzdGFydCBjb25kaXRpb24sIGFkZHJlc3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZGF0YSB0byB0cmFuc2ZlciB3aXRob3V0IGEgZmluYWwgc3RvcCBjb25kaXRpb24sIGFuIHRoZW4gcGVybWl0IGEgY2FsbCB0aGUgc2FtZSBtYXN0ZXIgc2VxdWVudGlhbCBpbnRlcmZhY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXZlcmFsIHRpbWVzIChsaWtlIEByZWYgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0lUKCkgdGhlbiBAcmVmIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9JVCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgQHJlZiBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfRE1BKCkgdGhlbiBAcmVmIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9ETUEoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXZlcmFsIHRpbWVzIChsaWtlIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9JVCgpIHRoZW4gSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0lUKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfRE1BKCkgdGhlbiBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfRE1BKCkpCiAgICAgICAoKyspIEkyQ19ORVhUX0ZSQU1FOiBTZXF1ZW50aWFsIHVzYWdlLCB0aGlzIG9wdGlvbiBhbGxvdyB0byBtYW5hZ2UgYSBzZXF1ZW5jZSB3aXRoIGEgcmVzdGFydCBjb25kaXRpb24sIGFkZHJlc3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgd2l0aCBuZXcgZGF0YSB0byB0cmFuc2ZlciBpZiB0aGUgZGlyZWN0aW9uIGNoYW5nZSBvciBtYW5hZ2Ugb25seSB0aGUgbmV3IGRhdGEgdG8gdHJhbnNmZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBubyBkaXJlY3Rpb24gY2hhbmdlIGFuZCB3aXRob3V0IGEgZmluYWwgc3RvcCBjb25kaXRpb24gaW4gYm90aCBjYXNlcwpAQCAtMTMxLDg1ICsxMzEsODUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVuIHVzYWdlIG9mIHRoaXMgb3B0aW9uIEkyQ19PVEhFUl9BTkRfTEFTVF9GUkFNRSBhdCB0aGUgbGFzdCBmcmFtZSB0byBoZWxwIGF1dG9tYXRpYyBnZW5lcmF0aW9uIG9mIFNUT1AgY29uZGl0aW9uLgogCiAgICAgICAoKykgRGlmZmVyZW50IHNlcXVlbnRpYWwgSTJDIGludGVyZmFjZXMgYXJlIGxpc3RlZCBiZWxvdzoKLSAgICAgICgrKykgU2VxdWVudGlhbCB0cmFuc21pdCBpbiBtYXN0ZXIgSTJDIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgdXNpbmcgQHJlZiBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfSVQoKQotICAgICAgICAgICAgb3IgdXNpbmcgQHJlZiBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfRE1BKCkKLSAgICAgICgrKyspIEF0IHRyYW5zbWlzc2lvbiBlbmQgb2YgY3VycmVudCBmcmFtZSB0cmFuc2ZlciwgQHJlZiBIQUxfSTJDX01hc3RlclR4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19NYXN0ZXJUeENwbHRDYWxsYmFjaygpCi0gICAgICAoKyspIFNlcXVlbnRpYWwgcmVjZWl2ZSBpbiBtYXN0ZXIgSTJDIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgdXNpbmcgQHJlZiBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9JVCgpCi0gICAgICAgICAgICBvciB1c2luZyBAcmVmIEhBTF9JMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0RNQSgpCi0gICAgICAoKysrKSBBdCByZWNlcHRpb24gZW5kIG9mIGN1cnJlbnQgZnJhbWUgdHJhbnNmZXIsIEByZWYgSEFMX0kyQ19NYXN0ZXJSeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgotICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBAcmVmIEhBTF9JMkNfTWFzdGVyUnhDcGx0Q2FsbGJhY2soKQotICAgICAgKCsrKSBBYm9ydCBhIG1hc3RlciBJVCBvciBETUEgSTJDIHByb2Nlc3MgY29tbXVuaWNhdGlvbiB3aXRoIEludGVycnVwdCB1c2luZyBAcmVmIEhBTF9JMkNfTWFzdGVyX0Fib3J0X0lUKCkKLSAgICAgICgrKyspIEVuZCBvZiBhYm9ydCBwcm9jZXNzLCBAcmVmIEhBTF9JMkNfQWJvcnRDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX0Fib3J0Q3BsdENhbGxiYWNrKCkKLSAgICAgICgrKykgRW5hYmxlL2Rpc2FibGUgdGhlIEFkZHJlc3MgbGlzdGVuIG1vZGUgaW4gc2xhdmUgSTJDIG1vZGUgdXNpbmcgQHJlZiBIQUxfSTJDX0VuYWJsZUxpc3Rlbl9JVCgpIEByZWYgSEFMX0kyQ19EaXNhYmxlTGlzdGVuX0lUKCkKLSAgICAgICgrKyspIFdoZW4gYWRkcmVzcyBzbGF2ZSBJMkMgbWF0Y2gsIEByZWYgSEFMX0kyQ19BZGRyQ2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICgrKykgU2VxdWVudGlhbCB0cmFuc21pdCBpbiBtYXN0ZXIgSTJDIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgdXNpbmcgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0lUKCkKKyAgICAgICAgICAgIG9yIHVzaW5nIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9ETUEoKQorICAgICAgKCsrKykgQXQgdHJhbnNtaXNzaW9uIGVuZCBvZiBjdXJyZW50IGZyYW1lIHRyYW5zZmVyLCBIQUxfSTJDX01hc3RlclR4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfTWFzdGVyVHhDcGx0Q2FsbGJhY2soKQorICAgICAgKCsrKSBTZXF1ZW50aWFsIHJlY2VpdmUgaW4gbWFzdGVyIEkyQyBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHVzaW5nIEhBTF9JMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0lUKCkKKyAgICAgICAgICAgIG9yIHVzaW5nIEhBTF9JMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0RNQSgpCisgICAgICAoKysrKSBBdCByZWNlcHRpb24gZW5kIG9mIGN1cnJlbnQgZnJhbWUgdHJhbnNmZXIsIEhBTF9JMkNfTWFzdGVyUnhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19NYXN0ZXJSeENwbHRDYWxsYmFjaygpCisgICAgICAoKyspIEFib3J0IGEgbWFzdGVyIElUIG9yIERNQSBJMkMgcHJvY2VzcyBjb21tdW5pY2F0aW9uIHdpdGggSW50ZXJydXB0IHVzaW5nIEhBTF9JMkNfTWFzdGVyX0Fib3J0X0lUKCkKKyAgICAgICgrKyspIEVuZCBvZiBhYm9ydCBwcm9jZXNzLCBIQUxfSTJDX0Fib3J0Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfQWJvcnRDcGx0Q2FsbGJhY2soKQorICAgICAgKCsrKSBFbmFibGUvZGlzYWJsZSB0aGUgQWRkcmVzcyBsaXN0ZW4gbW9kZSBpbiBzbGF2ZSBJMkMgbW9kZSB1c2luZyBIQUxfSTJDX0VuYWJsZUxpc3Rlbl9JVCgpIEhBTF9JMkNfRGlzYWJsZUxpc3Rlbl9JVCgpCisgICAgICAoKysrKSBXaGVuIGFkZHJlc3Mgc2xhdmUgSTJDIG1hdGNoLCBIQUxfSTJDX0FkZHJDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgogICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIHRvIGNoZWNrIHRoZSBBZGRyZXNzIE1hdGNoIENvZGUgYW5kIHRoZSB0cmFuc21pc3Npb24gZGlyZWN0aW9uIHJlcXVlc3QgYnkgbWFzdGVyIChXcml0ZS9SZWFkKS4KLSAgICAgICgrKyspIEF0IExpc3RlbiBtb2RlIGVuZCBAcmVmIEhBTF9JMkNfTGlzdGVuQ3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19MaXN0ZW5DcGx0Q2FsbGJhY2soKQotICAgICAgKCsrKSBTZXF1ZW50aWFsIHRyYW5zbWl0IGluIHNsYXZlIEkyQyBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHVzaW5nIEByZWYgSEFMX0kyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfSVQoKQotICAgICAgICAgICAgb3IgdXNpbmcgQHJlZiBIQUxfSTJDX1NsYXZlX1NlcV9UcmFuc21pdF9ETUEoKQotICAgICAgKCsrKykgQXQgdHJhbnNtaXNzaW9uIGVuZCBvZiBjdXJyZW50IGZyYW1lIHRyYW5zZmVyLCBAcmVmIEhBTF9JMkNfU2xhdmVUeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgotICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBAcmVmIEhBTF9JMkNfU2xhdmVUeENwbHRDYWxsYmFjaygpCi0gICAgICAoKyspIFNlcXVlbnRpYWwgcmVjZWl2ZSBpbiBzbGF2ZSBJMkMgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB1c2luZyBAcmVmIEhBTF9JMkNfU2xhdmVfU2VxX1JlY2VpdmVfSVQoKQotICAgICAgICAgICAgb3IgdXNpbmcgQHJlZiBIQUxfSTJDX1NsYXZlX1NlcV9SZWNlaXZlX0RNQSgpCi0gICAgICAoKysrKSBBdCByZWNlcHRpb24gZW5kIG9mIGN1cnJlbnQgZnJhbWUgdHJhbnNmZXIsIEByZWYgSEFMX0kyQ19TbGF2ZVJ4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19TbGF2ZVJ4Q3BsdENhbGxiYWNrKCkKLSAgICAgICgrKykgSW4gY2FzZSBvZiB0cmFuc2ZlciBFcnJvciwgQHJlZiBIQUxfSTJDX0Vycm9yQ2FsbGJhY2soKSBmdW5jdGlvbiBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX0Vycm9yQ2FsbGJhY2soKQorICAgICAgKCsrKykgQXQgTGlzdGVuIG1vZGUgZW5kIEhBTF9JMkNfTGlzdGVuQ3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfTGlzdGVuQ3BsdENhbGxiYWNrKCkKKyAgICAgICgrKykgU2VxdWVudGlhbCB0cmFuc21pdCBpbiBzbGF2ZSBJMkMgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB1c2luZyBIQUxfSTJDX1NsYXZlX1NlcV9UcmFuc21pdF9JVCgpCisgICAgICAgICAgICBvciB1c2luZyBIQUxfSTJDX1NsYXZlX1NlcV9UcmFuc21pdF9ETUEoKQorICAgICAgKCsrKykgQXQgdHJhbnNtaXNzaW9uIGVuZCBvZiBjdXJyZW50IGZyYW1lIHRyYW5zZmVyLCBIQUxfSTJDX1NsYXZlVHhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19TbGF2ZVR4Q3BsdENhbGxiYWNrKCkKKyAgICAgICgrKykgU2VxdWVudGlhbCByZWNlaXZlIGluIHNsYXZlIEkyQyBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHVzaW5nIEhBTF9JMkNfU2xhdmVfU2VxX1JlY2VpdmVfSVQoKQorICAgICAgICAgICAgb3IgdXNpbmcgSEFMX0kyQ19TbGF2ZV9TZXFfUmVjZWl2ZV9ETUEoKQorICAgICAgKCsrKykgQXQgcmVjZXB0aW9uIGVuZCBvZiBjdXJyZW50IGZyYW1lIHRyYW5zZmVyLCBIQUxfSTJDX1NsYXZlUnhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19TbGF2ZVJ4Q3BsdENhbGxiYWNrKCkKKyAgICAgICgrKykgSW4gY2FzZSBvZiB0cmFuc2ZlciBFcnJvciwgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfRXJyb3JDYWxsYmFjaygpCiAKICAgICAqKiogSW50ZXJydXB0IG1vZGUgSU8gTUVNIG9wZXJhdGlvbiAqKioKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBbLi5dCiAgICAgICAoKykgV3JpdGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgd2l0aCBJbnRlcnJ1cHQgdG8gYSBzcGVjaWZpYyBtZW1vcnkgYWRkcmVzcyB1c2luZwotICAgICAgICAgIEByZWYgSEFMX0kyQ19NZW1fV3JpdGVfSVQoKQotICAgICAgKCspIEF0IE1lbW9yeSBlbmQgb2Ygd3JpdGUgdHJhbnNmZXIsIEByZWYgSEFMX0kyQ19NZW1UeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgotICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBAcmVmIEhBTF9JMkNfTWVtVHhDcGx0Q2FsbGJhY2soKQorICAgICAgICAgIEhBTF9JMkNfTWVtX1dyaXRlX0lUKCkKKyAgICAgICgrKSBBdCBNZW1vcnkgZW5kIG9mIHdyaXRlIHRyYW5zZmVyLCBIQUxfSTJDX01lbVR4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfTWVtVHhDcGx0Q2FsbGJhY2soKQogICAgICAgKCspIFJlYWQgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgd2l0aCBJbnRlcnJ1cHQgZnJvbSBhIHNwZWNpZmljIG1lbW9yeSBhZGRyZXNzIHVzaW5nCi0gICAgICAgICAgQHJlZiBIQUxfSTJDX01lbV9SZWFkX0lUKCkKLSAgICAgICgrKSBBdCBNZW1vcnkgZW5kIG9mIHJlYWQgdHJhbnNmZXIsIEByZWYgSEFMX0kyQ19NZW1SeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgotICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBAcmVmIEhBTF9JMkNfTWVtUnhDcGx0Q2FsbGJhY2soKQotICAgICAgKCspIEluIGNhc2Ugb2YgdHJhbnNmZXIgRXJyb3IsIEByZWYgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkKKyAgICAgICAgICBIQUxfSTJDX01lbV9SZWFkX0lUKCkKKyAgICAgICgrKSBBdCBNZW1vcnkgZW5kIG9mIHJlYWQgdHJhbnNmZXIsIEhBTF9JMkNfTWVtUnhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19NZW1SeENwbHRDYWxsYmFjaygpCisgICAgICAoKykgSW4gY2FzZSBvZiB0cmFuc2ZlciBFcnJvciwgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfRXJyb3JDYWxsYmFjaygpCiAKICAgICAqKiogRE1BIG1vZGUgSU8gb3BlcmF0aW9uICoqKgogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0KICAgICAgICgrKSBUcmFuc21pdCBpbiBtYXN0ZXIgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSAoRE1BKSB1c2luZwotICAgICAgICAgIEByZWYgSEFMX0kyQ19NYXN0ZXJfVHJhbnNtaXRfRE1BKCkKLSAgICAgICgrKSBBdCB0cmFuc21pc3Npb24gZW5kIG9mIHRyYW5zZmVyLCBAcmVmIEhBTF9JMkNfTWFzdGVyVHhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX01hc3RlclR4Q3BsdENhbGxiYWNrKCkKKyAgICAgICAgICBIQUxfSTJDX01hc3Rlcl9UcmFuc21pdF9ETUEoKQorICAgICAgKCspIEF0IHRyYW5zbWlzc2lvbiBlbmQgb2YgdHJhbnNmZXIsIEhBTF9JMkNfTWFzdGVyVHhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19NYXN0ZXJUeENwbHRDYWxsYmFjaygpCiAgICAgICAoKykgUmVjZWl2ZSBpbiBtYXN0ZXIgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSAoRE1BKSB1c2luZwotICAgICAgICAgIEByZWYgSEFMX0kyQ19NYXN0ZXJfUmVjZWl2ZV9ETUEoKQotICAgICAgKCspIEF0IHJlY2VwdGlvbiBlbmQgb2YgdHJhbnNmZXIsIEByZWYgSEFMX0kyQ19NYXN0ZXJSeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgotICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBAcmVmIEhBTF9JMkNfTWFzdGVyUnhDcGx0Q2FsbGJhY2soKQorICAgICAgICAgIEhBTF9JMkNfTWFzdGVyX1JlY2VpdmVfRE1BKCkKKyAgICAgICgrKSBBdCByZWNlcHRpb24gZW5kIG9mIHRyYW5zZmVyLCBIQUxfSTJDX01hc3RlclJ4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfTWFzdGVyUnhDcGx0Q2FsbGJhY2soKQogICAgICAgKCspIFRyYW5zbWl0IGluIHNsYXZlIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgKERNQSkgdXNpbmcKLSAgICAgICAgICBAcmVmIEhBTF9JMkNfU2xhdmVfVHJhbnNtaXRfRE1BKCkKLSAgICAgICgrKSBBdCB0cmFuc21pc3Npb24gZW5kIG9mIHRyYW5zZmVyLCBAcmVmIEhBTF9JMkNfU2xhdmVUeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgotICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBAcmVmIEhBTF9JMkNfU2xhdmVUeENwbHRDYWxsYmFjaygpCisgICAgICAgICAgSEFMX0kyQ19TbGF2ZV9UcmFuc21pdF9ETUEoKQorICAgICAgKCspIEF0IHRyYW5zbWlzc2lvbiBlbmQgb2YgdHJhbnNmZXIsIEhBTF9JMkNfU2xhdmVUeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgorICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJDX1NsYXZlVHhDcGx0Q2FsbGJhY2soKQogICAgICAgKCspIFJlY2VpdmUgaW4gc2xhdmUgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSAoRE1BKSB1c2luZwotICAgICAgICAgIEByZWYgSEFMX0kyQ19TbGF2ZV9SZWNlaXZlX0RNQSgpCi0gICAgICAoKykgQXQgcmVjZXB0aW9uIGVuZCBvZiB0cmFuc2ZlciwgQHJlZiBIQUxfSTJDX1NsYXZlUnhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX1NsYXZlUnhDcGx0Q2FsbGJhY2soKQotICAgICAgKCspIEluIGNhc2Ugb2YgdHJhbnNmZXIgRXJyb3IsIEByZWYgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkKLSAgICAgICgrKSBBYm9ydCBhIG1hc3RlciBJMkMgcHJvY2VzcyBjb21tdW5pY2F0aW9uIHdpdGggSW50ZXJydXB0IHVzaW5nIEByZWYgSEFMX0kyQ19NYXN0ZXJfQWJvcnRfSVQoKQotICAgICAgKCspIEVuZCBvZiBhYm9ydCBwcm9jZXNzLCBAcmVmIEhBTF9JMkNfQWJvcnRDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX0Fib3J0Q3BsdENhbGxiYWNrKCkKKyAgICAgICAgICBIQUxfSTJDX1NsYXZlX1JlY2VpdmVfRE1BKCkKKyAgICAgICgrKSBBdCByZWNlcHRpb24gZW5kIG9mIHRyYW5zZmVyLCBIQUxfSTJDX1NsYXZlUnhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19TbGF2ZVJ4Q3BsdENhbGxiYWNrKCkKKyAgICAgICgrKSBJbiBjYXNlIG9mIHRyYW5zZmVyIEVycm9yLCBIQUxfSTJDX0Vycm9yQ2FsbGJhY2soKSBmdW5jdGlvbiBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkKKyAgICAgICgrKSBBYm9ydCBhIG1hc3RlciBJMkMgcHJvY2VzcyBjb21tdW5pY2F0aW9uIHdpdGggSW50ZXJydXB0IHVzaW5nIEhBTF9JMkNfTWFzdGVyX0Fib3J0X0lUKCkKKyAgICAgICgrKSBFbmQgb2YgYWJvcnQgcHJvY2VzcywgSEFMX0kyQ19BYm9ydENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgorICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJDX0Fib3J0Q3BsdENhbGxiYWNrKCkKIAogICAgICoqKiBETUEgbW9kZSBJTyBNRU0gb3BlcmF0aW9uICoqKgogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0KICAgICAgICgrKSBXcml0ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB3aXRoIERNQSB0byBhIHNwZWNpZmljIG1lbW9yeSBhZGRyZXNzIHVzaW5nCi0gICAgICAgICAgQHJlZiBIQUxfSTJDX01lbV9Xcml0ZV9ETUEoKQotICAgICAgKCspIEF0IE1lbW9yeSBlbmQgb2Ygd3JpdGUgdHJhbnNmZXIsIEByZWYgSEFMX0kyQ19NZW1UeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgotICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBAcmVmIEhBTF9JMkNfTWVtVHhDcGx0Q2FsbGJhY2soKQorICAgICAgICAgIEhBTF9JMkNfTWVtX1dyaXRlX0RNQSgpCisgICAgICAoKykgQXQgTWVtb3J5IGVuZCBvZiB3cml0ZSB0cmFuc2ZlciwgSEFMX0kyQ19NZW1UeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgorICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJDX01lbVR4Q3BsdENhbGxiYWNrKCkKICAgICAgICgrKSBSZWFkIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHdpdGggRE1BIGZyb20gYSBzcGVjaWZpYyBtZW1vcnkgYWRkcmVzcyB1c2luZwotICAgICAgICAgIEByZWYgSEFMX0kyQ19NZW1fUmVhZF9ETUEoKQotICAgICAgKCspIEF0IE1lbW9yeSBlbmQgb2YgcmVhZCB0cmFuc2ZlciwgQHJlZiBIQUxfSTJDX01lbVJ4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19NZW1SeENwbHRDYWxsYmFjaygpCi0gICAgICAoKykgSW4gY2FzZSBvZiB0cmFuc2ZlciBFcnJvciwgQHJlZiBIQUxfSTJDX0Vycm9yQ2FsbGJhY2soKSBmdW5jdGlvbiBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX0Vycm9yQ2FsbGJhY2soKQorICAgICAgICAgIEhBTF9JMkNfTWVtX1JlYWRfRE1BKCkKKyAgICAgICgrKSBBdCBNZW1vcnkgZW5kIG9mIHJlYWQgdHJhbnNmZXIsIEhBTF9JMkNfTWVtUnhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19NZW1SeENwbHRDYWxsYmFjaygpCisgICAgICAoKykgSW4gY2FzZSBvZiB0cmFuc2ZlciBFcnJvciwgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfRXJyb3JDYWxsYmFjaygpCiAKIAogICAgICAqKiogSTJDIEhBTCBkcml2ZXIgbWFjcm9zIGxpc3QgKioqCkBAIC0yMTcsMjIgKzIxNywyMiBAQAogICAgICBbLi5dCiAgICAgICAgQmVsb3cgdGhlIGxpc3Qgb2YgbW9zdCB1c2VkIG1hY3JvcyBpbiBJMkMgSEFMIGRyaXZlci4KIAotICAgICAgKCspIEByZWYgX19IQUxfSTJDX0VOQUJMRTogICAgIEVuYWJsZSB0aGUgSTJDIHBlcmlwaGVyYWwKLSAgICAgICgrKSBAcmVmIF9fSEFMX0kyQ19ESVNBQkxFOiAgICBEaXNhYmxlIHRoZSBJMkMgcGVyaXBoZXJhbAotICAgICAgKCspIEByZWYgX19IQUxfSTJDX0dFVF9GTEFHOiAgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgSTJDIGZsYWcgaXMgc2V0IG9yIG5vdAotICAgICAgKCspIEByZWYgX19IQUxfSTJDX0NMRUFSX0ZMQUc6IENsZWFyIHRoZSBzcGVjaWZpZWQgSTJDIHBlbmRpbmcgZmxhZwotICAgICAgKCspIEByZWYgX19IQUxfSTJDX0VOQUJMRV9JVDogIEVuYWJsZSB0aGUgc3BlY2lmaWVkIEkyQyBpbnRlcnJ1cHQKLSAgICAgICgrKSBAcmVmIF9fSEFMX0kyQ19ESVNBQkxFX0lUOiBEaXNhYmxlIHRoZSBzcGVjaWZpZWQgSTJDIGludGVycnVwdAorICAgICAgKCspIF9fSEFMX0kyQ19FTkFCTEU6ICAgICBFbmFibGUgdGhlIEkyQyBwZXJpcGhlcmFsCisgICAgICAoKykgX19IQUxfSTJDX0RJU0FCTEU6ICAgIERpc2FibGUgdGhlIEkyQyBwZXJpcGhlcmFsCisgICAgICAoKykgX19IQUxfSTJDX0dFVF9GTEFHOiAgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgSTJDIGZsYWcgaXMgc2V0IG9yIG5vdAorICAgICAgKCspIF9fSEFMX0kyQ19DTEVBUl9GTEFHOiBDbGVhciB0aGUgc3BlY2lmaWVkIEkyQyBwZW5kaW5nIGZsYWcKKyAgICAgICgrKSBfX0hBTF9JMkNfRU5BQkxFX0lUOiAgRW5hYmxlIHRoZSBzcGVjaWZpZWQgSTJDIGludGVycnVwdAorICAgICAgKCspIF9fSEFMX0kyQ19ESVNBQkxFX0lUOiBEaXNhYmxlIHRoZSBzcGVjaWZpZWQgSTJDIGludGVycnVwdAogCiAgICAgICoqKiBDYWxsYmFjayByZWdpc3RyYXRpb24gKioqCiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0KICAgICAgVGhlIGNvbXBpbGF0aW9uIGZsYWcgVVNFX0hBTF9JMkNfUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEKICAgICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KLSAgICAgVXNlIEZ1bmN0aW9ucyBAcmVmIEhBTF9JMkNfUmVnaXN0ZXJDYWxsYmFjaygpIG9yIEByZWYgSEFMX0kyQ19SZWdpc3RlckFkZHJDYWxsYmFjaygpCisgICAgIFVzZSBGdW5jdGlvbnMgSEFMX0kyQ19SZWdpc3RlckNhbGxiYWNrKCkgb3IgSEFMX0kyQ19SZWdpc3RlckFkZHJDYWxsYmFjaygpCiAgICAgIHRvIHJlZ2lzdGVyIGFuIGludGVycnVwdCBjYWxsYmFjay4KICAgICBbLi5dCi0gICAgIEZ1bmN0aW9uIEByZWYgSEFMX0kyQ19SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CisgICAgIEZ1bmN0aW9uIEhBTF9JMkNfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgICgrKSBNYXN0ZXJUeENwbHRDYWxsYmFjayA6IGNhbGxiYWNrIGZvciBNYXN0ZXIgdHJhbnNtaXNzaW9uIGVuZCBvZiB0cmFuc2Zlci4KICAgICAgICAoKykgTWFzdGVyUnhDcGx0Q2FsbGJhY2sgOiBjYWxsYmFjayBmb3IgTWFzdGVyIHJlY2VwdGlvbiBlbmQgb2YgdHJhbnNmZXIuCiAgICAgICAgKCspIFNsYXZlVHhDcGx0Q2FsbGJhY2sgIDogY2FsbGJhY2sgZm9yIFNsYXZlIHRyYW5zbWlzc2lvbiBlbmQgb2YgdHJhbnNmZXIuCkBAIC0yNDcsMTEgKzI0NywxMSBAQAogICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECiAgICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAgICAgWy4uXQotICAgICBGb3Igc3BlY2lmaWMgY2FsbGJhY2sgQWRkckNhbGxiYWNrIHVzZSBkZWRpY2F0ZWQgcmVnaXN0ZXIgY2FsbGJhY2tzIDogQHJlZiBIQUxfSTJDX1JlZ2lzdGVyQWRkckNhbGxiYWNrKCkuCisgICAgIEZvciBzcGVjaWZpYyBjYWxsYmFjayBBZGRyQ2FsbGJhY2sgdXNlIGRlZGljYXRlZCByZWdpc3RlciBjYWxsYmFja3MgOiBIQUxfSTJDX1JlZ2lzdGVyQWRkckNhbGxiYWNrKCkuCiAgICAgWy4uXQotICAgICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfSTJDX1VuUmVnaXN0ZXJDYWxsYmFjayB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgICAgIFVzZSBmdW5jdGlvbiBIQUxfSTJDX1VuUmVnaXN0ZXJDYWxsYmFjayB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgICAgIHdlYWsgZnVuY3Rpb24uCi0gICAgIEByZWYgSEFMX0kyQ19VblJlZ2lzdGVyQ2FsbGJhY2sgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAorICAgICBIQUxfSTJDX1VuUmVnaXN0ZXJDYWxsYmFjayB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgICAgIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAgICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAgKCspIE1hc3RlclR4Q3BsdENhbGxiYWNrIDogY2FsbGJhY2sgZm9yIE1hc3RlciB0cmFuc21pc3Npb24gZW5kIG9mIHRyYW5zZmVyLgpAQCAtMjY2LDI0ICsyNjYsMjQgQEAKICAgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgOiBjYWxsYmFjayBmb3IgTXNwIEluaXQuCiAgICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgIDogY2FsbGJhY2sgZm9yIE1zcCBEZUluaXQuCiAgICAgWy4uXQotICAgICBGb3IgY2FsbGJhY2sgQWRkckNhbGxiYWNrIHVzZSBkZWRpY2F0ZWQgcmVnaXN0ZXIgY2FsbGJhY2tzIDogQHJlZiBIQUxfSTJDX1VuUmVnaXN0ZXJBZGRyQ2FsbGJhY2soKS4KKyAgICAgRm9yIGNhbGxiYWNrIEFkZHJDYWxsYmFjayB1c2UgZGVkaWNhdGVkIHJlZ2lzdGVyIGNhbGxiYWNrcyA6IEhBTF9JMkNfVW5SZWdpc3RlckFkZHJDYWxsYmFjaygpLgogICAgIFsuLl0KLSAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX0kyQ19Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEByZWYgSEFMX0kyQ19TVEFURV9SRVNFVAorICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX0kyQ19Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9JMkNfU1RBVEVfUkVTRVQKICAgICAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zOgotICAgICBleGFtcGxlcyBAcmVmIEhBTF9JMkNfTWFzdGVyVHhDcGx0Q2FsbGJhY2soKSwgQHJlZiBIQUxfSTJDX01hc3RlclJ4Q3BsdENhbGxiYWNrKCkuCisgICAgIGV4YW1wbGVzIEhBTF9JMkNfTWFzdGVyVHhDcGx0Q2FsbGJhY2soKSwgSEFMX0kyQ19NYXN0ZXJSeENwbHRDYWxsYmFjaygpLgogICAgICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCBhbmQgTXNwRGVJbml0IGZ1bmN0aW9ucyB0aGF0IGFyZQotICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgZnVuY3Rpb25zIGluIHRoZSBAcmVmIEhBTF9JMkNfSW5pdCgpLyBAcmVmIEhBTF9JMkNfRGVJbml0KCkgb25seSB3aGVuCisgICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayBmdW5jdGlvbnMgaW4gdGhlIEhBTF9JMkNfSW5pdCgpLyBIQUxfSTJDX0RlSW5pdCgpIG9ubHkgd2hlbgogICAgICB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgotICAgICBJZiBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9JMkNfSW5pdCgpLyBAcmVmIEhBTF9JMkNfRGVJbml0KCkKKyAgICAgSWYgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgSEFMX0kyQ19Jbml0KCkvIEhBTF9JMkNfRGVJbml0KCkKICAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKSB3aGF0ZXZlciB0aGUgc3RhdGUuCiAgICAgWy4uXQotICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIEByZWYgSEFMX0kyQ19TVEFURV9SRUFEWSBzdGF0ZSBvbmx5LgorICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIEhBTF9JMkNfU1RBVEVfUkVBRFkgc3RhdGUgb25seS4KICAgICAgRXhjZXB0aW9uIGRvbmUgTXNwSW5pdC9Nc3BEZUluaXQgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkCi0gICAgIGluIEByZWYgSEFMX0kyQ19TVEFURV9SRUFEWSBvciBAcmVmIEhBTF9JMkNfU1RBVEVfUkVTRVQgc3RhdGUsCisgICAgIGluIEhBTF9JMkNfU1RBVEVfUkVBRFkgb3IgSEFMX0kyQ19TVEFURV9SRVNFVCBzdGF0ZSwKICAgICAgdGh1cyByZWdpc3RlcmVkICh1c2VyKSBNc3BJbml0L0RlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KICAgICAgVGhlbiwgdGhlIHVzZXIgZmlyc3QgcmVnaXN0ZXJzIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICAgICB1c2luZyBAcmVmIEhBTF9JMkNfUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX0kyQ19EZUluaXQoKQotICAgICBvciBAcmVmIEhBTF9JMkNfSW5pdCgpIGZ1bmN0aW9uLgorICAgICB1c2luZyBIQUxfSTJDX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBIQUxfSTJDX0RlSW5pdCgpCisgICAgIG9yIEhBTF9JMkNfSW5pdCgpIGZ1bmN0aW9uLgogICAgIFsuLl0KICAgICAgV2hlbiB0aGUgY29tcGlsYXRpb24gZmxhZyBVU0VfSEFMX0kyQ19SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIGFuZCBhbGwgY2FsbGJhY2tzCkBAIC0zMDEsMTkgKzMwMSwxOCBAQAogICAgICAgICAgICgrKykgU3RhcnQgY2Fubm90IGJlIGdlbmVyYXRlZCBhZnRlciBhIG1pc3BsYWNlZCBTdG9wCiAgICAgICAgICAgKCsrKSBTb21lIHNvZnR3YXJlIGV2ZW50cyBtdXN0IGJlIG1hbmFnZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJ5dGUgaXMgYmVpbmcgdHJhbnNmZXJyZWQ6CiAgICAgICAgICAgICAgICBXb3JrYXJvdW5kOiBVc2UgRE1BIGluIGdlbmVyYWwsIGV4Y2VwdCB3aGVuIHRoZSBNYXN0ZXIgaXMgcmVjZWl2aW5nIGEgc2luZ2xlIGJ5dGUuCi0gICAgICAgICAgICAgICBGb3IgSW50ZXJ1cHQgbW9kZSwgSTJDIHNob3VsZCBoYXZlIHRoZSBoaWdoZXN0IHByaW9yaXR5IGluIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgIEZvciBJbnRlcnJ1cHQgbW9kZSwgSTJDIHNob3VsZCBoYXZlIHRoZSBoaWdoZXN0IHByaW9yaXR5IGluIHRoZSBhcHBsaWNhdGlvbi4KICAgICAgICAgICAoKyspIE1pc21hdGNoIG9uIHRoZSAiU2V0dXAgdGltZSBmb3IgYSByZXBlYXRlZCBTdGFydCBjb25kaXRpb24iIHRpbWluZyBwYXJhbWV0ZXI6CiAgICAgICAgICAgICAgICBXb3JrYXJvdW5kOiBSZWR1Y2UgdGhlIGZyZXF1ZW5jeSBkb3duIHRvIDg4IGtIeiBvciB1c2UgdGhlIEkyQyBGYXN0LW1vZGUgaWYKICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBieSB0aGUgc2xhdmUuCiAgICAgICAgICAgKCsrKSBEYXRhIHZhbGlkIHRpbWUgKHRWRDtEQVQpIHZpb2xhdGVkIHdpdGhvdXQgdGhlIE9WUiBmbGFnIGJlaW5nIHNldDoKICAgICAgICAgICAgICAgIFdvcmthcm91bmQ6IElmIHRoZSBzbGF2ZSBkZXZpY2UgYWxsb3dzIGl0LCB1c2UgdGhlIGNsb2NrIHN0cmV0Y2hpbmcgbWVjaGFuaXNtCi0gICAgICAgICAgICAgICBieSBwcm9ncmFtbWluZyBOb1N0cmV0Y2hNb2RlID0gSTJDX05PU1RSRVRDSF9ESVNBQkxFIGluIEByZWYgSEFMX0kyQ19Jbml0LgorICAgICAgICAgICAgICAgYnkgcHJvZ3JhbW1pbmcgTm9TdHJldGNoTW9kZSA9IEkyQ19OT1NUUkVUQ0hfRElTQUJMRSBpbiBIQUxfSTJDX0luaXQuCiAKICAgICAgWy4uXQogICAgICAgIChAKSBZb3UgY2FuIHJlZmVyIHRvIHRoZSBJMkMgSEFMIGRyaXZlciBoZWFkZXIgZmlsZSBmb3IgbW9yZSB1c2VmdWwgbWFjcm9zCiAKICAgQGVuZHZlcmJhdGltCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzMyLDcgKzMzMSw3IEBACiAKIC8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBhZGR0b2dyb3VwIEkyQ19Qcml2YXRlX0RlZmluZQorLyoqIEBkZWZncm91cCBJMkNfUHJpdmF0ZV9EZWZpbmUgSTJDIFByaXZhdGUgRGVmaW5lCiAgICogQHsKICAgKi8KICNkZWZpbmUgSTJDX1RJTUVPVVRfRkxBRyAgICAgICAgICAzNVUgICAgICAgICAvKiE8IFRpbWVvdXQgMzUgbXMgICAgICAgICAgICAgKi8KQEAgLTM1Myw2ICszNTIsMTQgQEAKICAgKi8KIAogLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAYWRkdG9ncm91cCBJMkNfUHJpdmF0ZV9NYWNyb3MKKyAgKiBAeworICAqLworLyogTWFjcm8gdG8gZ2V0IHJlbWFpbmluZyBkYXRhIHRvIHRyYW5zZmVyIG9uIERNQSBzaWRlICovCisjZGVmaW5lIEkyQ19HRVRfRE1BX1JFTUFJTl9EQVRBKF9fSEFORExFX18pICAgICBfX0hBTF9ETUFfR0VUX0NPVU5URVIoX19IQU5ETEVfXykKKy8qKgorICAqIEB9CisgICovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNDAyLDYgKzQwOSw5IEBACiAKIC8qIFByaXZhdGUgZnVuY3Rpb24gdG8gQ29udmVydCBTcGVjaWZpYyBvcHRpb25zICovCiBzdGF0aWMgdm9pZCBJMkNfQ29udmVydE90aGVyWGZlck9wdGlvbnMoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMpOworCisvKiBQcml2YXRlIGZ1bmN0aW9uIHRvIGZsdXNoIERSIHJlZ2lzdGVyICovCitzdGF0aWMgdm9pZCBJMkNfRmx1c2hfRFIoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTk2MCw2ICs5NzAsMjAgQEAKICNlbmRpZiAvKiBVU0VfSEFMX0kyQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogLyoqCisgICogQGJyaWVmICBJMkMgZGF0YSByZWdpc3RlciBmbHVzaCBwcm9jZXNzLgorICAqIEBwYXJhbSAgaGkyYyBJMkMgaGFuZGxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworc3RhdGljIHZvaWQgSTJDX0ZsdXNoX0RSKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjKQoreworICAvKiBXcml0ZSBhIGR1bW15IGRhdGEgaW4gRFIgdG8gY2xlYXIgVFhFIGZsYWcgKi8KKyAgaWYgKF9fSEFMX0kyQ19HRVRfRkxBRyhoaTJjLCBJMkNfRkxBR19UWEUpICE9IFJFU0VUKQorICB7CisgICAgaGkyYy0+SW5zdGFuY2UtPkRSID0gMHgwMFU7CisgIH0KK30KKworLyoqCiAgICogQH0KICAgKi8KIApAQCAtMzUwNiw3ICszNTMwLDcgQEAKIHsKICAgLyogR2V0IHRpY2sgKi8KICAgdWludDMyX3QgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKLSAgdWludDMyX3QgSTJDX1RyaWFscyA9IDFVOworICB1aW50MzJfdCBJMkNfVHJpYWxzID0gMFU7CiAgIEZsYWdTdGF0dXMgdG1wMTsKICAgRmxhZ1N0YXR1cyB0bXAyOwogCkBAIC01NTgxLDcgKzU2MDUsOCBAQAogICB9CiAgIGVsc2UKICAgewotICAgIC8qIERvIG5vdGhpbmcgKi8KKyAgICAvKiBDbGVhciBUWEUgYW5kIEJURiBmbGFncyAqLworICAgIEkyQ19GbHVzaF9EUihoaTJjKTsKICAgfQogfQogCkBAIC02MjUwLDcgKzYyNzUsNyBAQAogICB7CiAgICAgaWYgKChDdXJyZW50U3RhdGUgPT0gSEFMX0kyQ19TVEFURV9CVVNZX1JYKSB8fCAoQ3VycmVudFN0YXRlID09IEhBTF9JMkNfU1RBVEVfQlVTWV9SWF9MSVNURU4pKQogICAgIHsKLSAgICAgIGhpMmMtPlhmZXJDb3VudCA9ICh1aW50MTZfdCkoX19IQUxfRE1BX0dFVF9DT1VOVEVSKGhpMmMtPmhkbWFyeCkpOworICAgICAgaGkyYy0+WGZlckNvdW50ID0gKHVpbnQxNl90KShJMkNfR0VUX0RNQV9SRU1BSU5fREFUQShoaTJjLT5oZG1hcngpKTsKIAogICAgICAgaWYgKGhpMmMtPlhmZXJDb3VudCAhPSAwVSkKICAgICAgIHsKQEAgLTYyNzgsNyArNjMwMyw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBoaTJjLT5YZmVyQ291bnQgPSAodWludDE2X3QpKF9fSEFMX0RNQV9HRVRfQ09VTlRFUihoaTJjLT5oZG1hdHgpKTsKKyAgICAgIGhpMmMtPlhmZXJDb3VudCA9ICh1aW50MTZfdCkoSTJDX0dFVF9ETUFfUkVNQUlOX0RBVEEoaGkyYy0+aGRtYXR4KSk7CiAKICAgICAgIGlmIChoaTJjLT5YZmVyQ291bnQgIT0gMFUpCiAgICAgICB7CkBAIC02NDQ3LDYgKzY0NzIsOSBAQAogICAgIC8qIERpc2FibGUgQWNrbm93bGVkZ2UgKi8KICAgICBDTEVBUl9CSVQoaGkyYy0+SW5zdGFuY2UtPkNSMSwgSTJDX0NSMV9BQ0spOwogCisgICAgLyogQ2xlYXIgVFhFIGZsYWcgKi8KKyAgICBJMkNfRmx1c2hfRFIoaGkyYyk7CisKICNpZiAoVVNFX0hBTF9JMkNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgICAgaGkyYy0+U2xhdmVUeENwbHRDYWxsYmFjayhoaTJjKTsKICNlbHNlCkBAIC03NjEzLDMgKzc2NDEsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfaTJzLmMgYi9TcmMvc3RtMzJmMXh4X2hhbF9pMnMuYwppbmRleCA0OTYxNTdlLi4wYWU5MDNlIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2hhbF9pMnMuYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF9pMnMuYwpAQCAtOCw3ICs4LDYgQEAKICAgKiAgICAgICAgICAgKyBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9ycyBmdW5jdGlvbnMKLSAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTE4Nyw3ICsxODYsNyBAQAogICAgICAgICAgICBpcyBpbiBNYXN0ZXIgYW5kIHVzZWQgdGhlIFBDTSBsb25nIHN5bmNocm9uaXphdGlvbiBtb2RlLgogCiAgIEBlbmR2ZXJiYXRpbQotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTg3NiwzICsxODc1LDQgQEAKICNlbmRpZiAvKiBTUElfSTJTX1NVUFBPUlQgKi8KIAogI2VuZGlmIC8qIEhBTF9JMlNfTU9EVUxFX0VOQUJMRUQgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfaXJkYS5jIGIvU3JjL3N0bTMyZjF4eF9oYWxfaXJkYS5jCmluZGV4IDUzMDBkZDIuLjE2OTdjMWIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfaGFsX2lyZGEuYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF9pcmRhLmMKQEAgLTEyMyw4ICsxMjMsOCBAQAogICAgICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KIAogICAgIFsuLl0KLSAgICAgIFVzZSBGdW5jdGlvbiBAcmVmIEhBTF9JUkRBX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2suCi0gICAgICBGdW5jdGlvbiBAcmVmIEhBTF9JUkRBX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKKyAgICAgIFVzZSBGdW5jdGlvbiBIQUxfSVJEQV9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLgorICAgICAgRnVuY3Rpb24gSEFMX0lSREFfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgICgrKSBUeEhhbGZDcGx0Q2FsbGJhY2sgICAgICAgIDogVHggSGFsZiBDb21wbGV0ZSBDYWxsYmFjay4KICAgICAgICAoKykgVHhDcGx0Q2FsbGJhY2sgICAgICAgICAgICA6IFR4IENvbXBsZXRlIENhbGxiYWNrLgogICAgICAgICgrKSBSeEhhbGZDcGx0Q2FsbGJhY2sgICAgICAgIDogUnggSGFsZiBDb21wbGV0ZSBDYWxsYmFjay4KQEAgLTEzOSw5ICsxMzksOSBAQAogICAgICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KIAogICAgIFsuLl0KLSAgICAgIFVzZSBmdW5jdGlvbiBAcmVmIEhBTF9JUkRBX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICAgIFVzZSBmdW5jdGlvbiBIQUxfSVJEQV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgICAgICB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbi4KLSAgICAgIEByZWYgSEFMX0lSREFfVW5SZWdpc3RlckNhbGxiYWNrKCkgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAorICAgICAgSEFMX0lSREFfVW5SZWdpc3RlckNhbGxiYWNrKCkgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAogICAgICAgYW5kIHRoZSBDYWxsYmFjayBJRC4KICAgICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAgKCspIFR4SGFsZkNwbHRDYWxsYmFjayAgICAgICAgOiBUeCBIYWxmIENvbXBsZXRlIENhbGxiYWNrLgpAQCAtMTU2LDEzICsxNTYsMTMgQEAKICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgICA6IElSREEgTXNwRGVJbml0LgogCiAgICAgWy4uXQotICAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX0lSREFfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfSVJEQV9TVEFURV9SRVNFVAorICAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9JUkRBX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX0lSREFfU1RBVEVfUkVTRVQKICAgICAgIGFsbCBjYWxsYmFja3MgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnM6Ci0gICAgICBleGFtcGxlcyBAcmVmIEhBTF9JUkRBX1R4Q3BsdENhbGxiYWNrKCksIEByZWYgSEFMX0lSREFfUnhIYWxmQ3BsdENhbGxiYWNrKCkuCisgICAgICBleGFtcGxlcyBIQUxfSVJEQV9UeENwbHRDYWxsYmFjaygpLCBIQUxfSVJEQV9SeEhhbGZDcGx0Q2FsbGJhY2soKS4KICAgICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgZnVuY3Rpb25zIHRoYXQgYXJlIHJlc3BlY3RpdmVseQotICAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEByZWYgSEFMX0lSREFfSW5pdCgpCi0gICAgICBhbmQgQHJlZiBIQUxfSVJEQV9EZUluaXQoKSBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KLSAgICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgQHJlZiBIQUxfSVJEQV9Jbml0KCkgYW5kIEByZWYgSEFMX0lSREFfRGVJbml0KCkKKyAgICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBIQUxfSVJEQV9Jbml0KCkKKyAgICAgIGFuZCBIQUxfSVJEQV9EZUluaXQoKSBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KKyAgICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgSEFMX0lSREFfSW5pdCgpIGFuZCBIQUxfSVJEQV9EZUluaXQoKQogICAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KIAogICAgIFsuLl0KQEAgLTE3MSw4ICsxNzEsOCBAQAogICAgICAgaW4gSEFMX0lSREFfU1RBVEVfUkVBRFkgb3IgSEFMX0lSREFfU1RBVEVfUkVTRVQgc3RhdGUsIHRodXMgcmVnaXN0ZXJlZCAodXNlcikKICAgICAgIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZCBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgogICAgICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICAgICAgdXNpbmcgQHJlZiBIQUxfSVJEQV9SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfSVJEQV9EZUluaXQoKQotICAgICAgb3IgQHJlZiBIQUxfSVJEQV9Jbml0KCkgZnVuY3Rpb24uCisgICAgICB1c2luZyBIQUxfSVJEQV9SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgSEFMX0lSREFfRGVJbml0KCkKKyAgICAgIG9yIEhBTF9JUkRBX0luaXQoKSBmdW5jdGlvbi4KIAogICAgIFsuLl0KICAgICAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX0lSREFfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCkBAIC0xOTYsNyArMTk2LDYgQEAKICAgICB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICB8ICAgIDEgICAgfCAgICAxICAgICAgfCAgICB8IFNCIHwgOCBiaXQgZGF0YSB8IFBCIHwgMSBTVEIgfCAgIHwKICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIApAQCAtNDQwLDYgKzQzOSw4IEBACiAvKioKICAgKiBAYnJpZWYgIFJlZ2lzdGVyIGEgVXNlciBJUkRBIENhbGxiYWNrCiAgICogICAgICAgICBUbyBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqIEBub3RlICAgVGhlIEhBTF9JUkRBX1JlZ2lzdGVyQ2FsbGJhY2soKSBtYXkgYmUgY2FsbGVkIGJlZm9yZSBIQUxfSVJEQV9Jbml0KCkgaW4gSEFMX0lSREFfU1RBVEVfUkVTRVQKKyAgKiAgICAgICAgIHRvIHJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgSEFMX0lSREFfTVNQSU5JVF9DQl9JRCBhbmQgSEFMX0lSREFfTVNQREVJTklUX0NCX0lECiAgICogQHBhcmFtICBoaXJkYSBpcmRhIGhhbmRsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgcmVnaXN0ZXJlZAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTQ2Nyw4ICs0NjgsNiBAQAogCiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhpcmRhKTsKIAogICBpZiAoaGlyZGEtPmdTdGF0ZSA9PSBIQUxfSVJEQV9TVEFURV9SRUFEWSkKICAgewpAQCAtNTUzLDE1ICs1NTIsMTQgQEAKICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhoaXJkYSk7Ci0KICAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGFuIElSREEgY2FsbGJhY2sKICAgKiAgICAgICAgIElSREEgY2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogQG5vdGUgICBUaGUgSEFMX0lSREFfVW5SZWdpc3RlckNhbGxiYWNrKCkgbWF5IGJlIGNhbGxlZCBiZWZvcmUgSEFMX0lSREFfSW5pdCgpIGluIEhBTF9JUkRBX1NUQVRFX1JFU0VUCisgICogICAgICAgICB0byB1bi1yZWdpc3RlciBjYWxsYmFja3MgZm9yIEhBTF9JUkRBX01TUElOSVRfQ0JfSUQgYW5kIEhBTF9JUkRBX01TUERFSU5JVF9DQl9JRAogICAqIEBwYXJhbSAgaGlyZGEgaXJkYSBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHVucmVnaXN0ZXJlZAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTU4MSw5ICs1NzksNiBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhoaXJkYSk7Ci0KICAgaWYgKEhBTF9JUkRBX1NUQVRFX1JFQURZID09IGhpcmRhLT5nU3RhdGUpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCkBAIC02NjcsOSArNjYyLDYgQEAKICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhoaXJkYSk7Ci0KICAgcmV0dXJuIHN0YXR1czsKIH0KICNlbmRpZiAvKiBVU0VfSEFMX0lSREFfUkVHSVNURVJfQ0FMTEJBQ0tTICovCkBAIC0yNjcxLDMgKzI2NjMsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfaXdkZy5jIGIvU3JjL3N0bTMyZjF4eF9oYWxfaXdkZy5jCmluZGV4IDg2NTViNTMuLmM2NWI3OTIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfaGFsX2l3ZGcuYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF9pd2RnLmMKQEAgLTkxLDcgKzkxLDYgQEAKICAgICAgICAgICB0aGUgcmVsb2FkIHJlZ2lzdGVyCiAKICAgQGVuZHZlcmJhdGltCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTE5LDcgKzExOCw3IEBACiAgICB0aGUgTFNJX1ZBTFVFIGNvbnN0YW50LiBUaGUgdmFsdWUgb2YgdGhpcyBjb25zdGFudCBjYW4gYmUgY2hhbmdlZCBieSB0aGUgdXNlcgogICAgdG8gdGFrZSBpbnRvIGFjY291bnQgcG9zc2libGUgTFNJIGNsb2NrIHBlcmlvZCB2YXJpYXRpb25zLgogICAgVGhlIHRpbWVvdXQgdmFsdWUgaXMgbXVsdGlwbGllZCBieSAxMDAwIHRvIGJlIGNvbnZlcnRlZCBpbiBtaWxsaXNlY29uZHMuCi0gICBMU0kgc3RhcnR1cCB0aW1lIGlzIGFsc28gY29uc2lkZXJlZCBoZXJlIGJ5IGFkZGluZyBMU0lfU1RBUlRVUF9USU1FT1VUCisgICBMU0kgc3RhcnR1cCB0aW1lIGlzIGFsc28gY29uc2lkZXJlZCBoZXJlIGJ5IGFkZGluZyBMU0lfU1RBUlRVUF9USU1FCiAgICBjb252ZXJ0ZWQgaW4gbWlsbGlzZWNvbmRzLiAqLwogI2RlZmluZSBIQUxfSVdER19ERUZBVUxUX1RJTUVPVVQgICAgICAgICgoKDZVTCAqIDI1NlVMICogMTAwMFVMKSAvIExTSV9WQUxVRSkgKyAoKExTSV9TVEFSVFVQX1RJTUUgLyAxMDAwVUwpICsgMVVMKSkKICNkZWZpbmUgSVdER19LRVJORUxfVVBEQVRFX0ZMQUdTICAgICAgICAoSVdER19TUl9SVlUgfCBJV0RHX1NSX1BWVSkKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYxeHhfaGFsX21tYy5jIGIvU3JjL3N0bTMyZjF4eF9oYWxfbW1jLmMKaW5kZXggNGIzM2FhZi4uZTM5NDcwNiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjF4eF9oYWxfbW1jLmMKKysrIGIvU3JjL3N0bTMyZjF4eF9oYWxfbW1jLmMKQEAgLTEzLDcgKzEzLDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKQEAgLTc0LDcgKzc0LDcgQEAKICAgICBTRE1NQyBQZXJpcGhlcmFsIChTVE0zMiBzaWRlKSBhbmQgdGhlIE1NQyBDYXJkLCBhbmQgcHV0IGl0IGludG8gU3RhbmRCeSBTdGF0ZSAoUmVhZHkgZm9yIGRhdGEgdHJhbnNmZXIpLgogICAgIFRoaXMgZnVuY3Rpb24gcHJvdmlkZSB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnM6CiAKLSAgICAoIykgSW5pdGlhbGl6ZSB0aGUgU0RNTUMgcGVyaXBoZXJhbCBpbnRlcmZhY2Ugd2l0aCBkZWZhdWxsdCBjb25maWd1cmF0aW9uLgorICAgICgjKSBJbml0aWFsaXplIHRoZSBTRE1NQyBwZXJpcGhlcmFsIGludGVyZmFjZSB3aXRoIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KICAgICAgICAgVGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgaXMgZG9uZSBhdCA0MDBLSHouIFlvdSBjYW4gY2hhbmdlIG9yIGFkYXB0CiAgICAgICAgIHRoaXMgZnJlcXVlbmN5IGJ5IGFkanVzdGluZyB0aGUgIkNsb2NrRGl2IiBmaWVsZC4KICAgICAgICAgVGhlIE1NQyBDYXJkIGZyZXF1ZW5jeSAoU0RNTUNfQ0spIGlzIGNvbXB1dGVkIGFzIGZvbGxvd3M6CkBAIC0yMDYsNyArMjA2LDcgQEAKICAgICBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyB3aGVuIHNldCB0byAxCiAgICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KIAotICAgIFVzZSBGdW5jdGlvbnMgQHJlZiBIQUxfTU1DX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2ssCisgICAgVXNlIEZ1bmN0aW9ucyBIQUxfTU1DX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2ssCiAgICAgaXQgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAoKykgVHhDcGx0Q2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIGEgdHJhbnNtaXNzaW9uIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4KICAgICAgICgrKSBSeENwbHRDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gYSByZWNlcHRpb24gdHJhbnNmZXIgaXMgY29tcGxldGVkLgpAQCAtMjE3LDcgKzIxNyw3IEBACiAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBDYWxsYmFjayBJRAogICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKLSAgICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfTU1DX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICBVc2UgZnVuY3Rpb24gSEFMX01NQ19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgICAgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb24uIEl0IGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgKCspIFR4Q3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBhIHRyYW5zbWlzc2lvbiB0cmFuc2ZlciBpcyBjb21wbGV0ZWQuCiAgICAgICAoKykgUnhDcGx0Q2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIGEgcmVjZXB0aW9uIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4KQEAgLTIyNywxMiArMjI3LDEyIEBACiAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgIDogTU1DIE1zcERlSW5pdC4KICAgICBUaGlzIGZ1bmN0aW9uKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUgYW5kIHRoZSBDYWxsYmFjayBJRC4KIAotICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9NTUNfSW5pdCBhbmQgaWYgdGhlIHN0YXRlIGlzIEhBTF9NTUNfU1RBVEVfUkVTRVQKKyAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX01NQ19Jbml0IGFuZCBpZiB0aGUgc3RhdGUgaXMgSEFMX01NQ19TVEFURV9SRVNFVAogICAgIGFsbCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMuCiAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBjYWxsYmFja3MgdGhhdCBhcmUgcmVzcGVjdGl2ZWx5Ci0gICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEByZWYgSEFMX01NQ19Jbml0Ci0gICAgYW5kIEByZWYgIEhBTF9NTUNfRGVJbml0IG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgotICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgQHJlZiBIQUxfTU1DX0luaXQgYW5kIEByZWYgSEFMX01NQ19EZUluaXQKKyAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgSEFMX01NQ19Jbml0CisgICAgYW5kICBIQUxfTU1DX0RlSW5pdCBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KKyAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEhBTF9NTUNfSW5pdCBhbmQgSEFMX01NQ19EZUluaXQKICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpCiAKICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIFJFQURZIHN0YXRlIG9ubHkuCkBAIC0yNDAsOCArMjQwLDggQEAKICAgICBpbiBSRUFEWSBvciBSRVNFVCBzdGF0ZSwgdGh1cyByZWdpc3RlcmVkICh1c2VyKSBNc3BJbml0L0RlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQKICAgICBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgogICAgIEluIHRoYXQgY2FzZSBmaXJzdCByZWdpc3RlciB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKLSAgICB1c2luZyBAcmVmIEhBTF9NTUNfUmVnaXN0ZXJDYWxsYmFjayBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9NTUNfRGVJbml0Ci0gICAgb3IgQHJlZiBIQUxfTU1DX0luaXQgZnVuY3Rpb24uCisgICAgdXNpbmcgSEFMX01NQ19SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEhBTF9NTUNfRGVJbml0CisgICAgb3IgSEFMX01NQ19Jbml0IGZ1bmN0aW9uLgogCiAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgogICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlCkBAIC0yOTUsNyArMjk1LDcgQEAKICNlbmRpZgogCiAvKiBGcmVxdWVuY2llcyB1c2VkIGluIHRoZSBkcml2ZXIgZm9yIGNsb2NrIGRpdmlkZXIgY2FsY3VsYXRpb24gKi8KLSNkZWZpbmUgTU1DX0lOSVRfRlJFUSAgICAgICAgICAgICAgICAgICA0MDAwMDBVICAgLyogSW5pdGFsaXphdGlvbiBwaGFzZSA6IDQwMCBrSHogbWF4ICovCisjZGVmaW5lIE1NQ19JTklUX0ZSRVEgICAgICAgICAgICAgICAgICAgNDAwMDAwVSAgIC8qIEluaXRpYWxpemF0aW9uIHBoYXNlIDogNDAwIGtIeiBtYXggKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC00NjAsNiArNDYwLDkgQEAKICAgLyogRW5hYmxlIE1NQyBDbG9jayAqLwogICBfX0hBTF9NTUNfRU5BQkxFKGhtbWMpOwogCisgIC8qIFJlcXVpcmVkIHBvd2VyIHVwIHdhaXRpbmcgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIE1NQyBpbml0aWFsaXphdGlvbiAgc2VxdWVuY2UgKi8KKyAgSEFMX0RlbGF5KDIpOworCiAgIC8qIElkZW50aWZ5IGNhcmQgb3BlcmF0aW5nIHZvbHRhZ2UgKi8KICAgZXJyb3JzdGF0ZSA9IE1NQ19Qb3dlck9OKGhtbWMpOwogICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYxeHhfaGFsX21zcF90ZW1wbGF0ZS5jIGIvU3JjL3N0bTMyZjF4eF9oYWxfbXNwX3RlbXBsYXRlLmMKaW5kZXggNTNiYWE3OS4uZmNmODJlNiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjF4eF9oYWxfbXNwX3RlbXBsYXRlLmMKKysrIGIvU3JjL3N0bTMyZjF4eF9oYWxfbXNwX3RlbXBsYXRlLmMKQEAgLTUsNyArNSw2IEBACiAgICogQGJyaWVmICAgSEFMIEJTUCBtb2R1bGUuCiAgICogICAgICAgICAgVGhpcyBmaWxlIHRlbXBsYXRlIGlzIGxvY2F0ZWQgaW4gdGhlIEhBTCBmb2xkZXIgYW5kIHNob3VsZCBiZSBjb3BpZWQKICAgKiAgICAgICAgICB0byB0aGUgdXNlciBmb2xkZXIuCi0gICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC04OSwzICs4OCw1IEBACiAvKioKICAgKiBAfQogICAqLworCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYxeHhfaGFsX25hbmQuYyBiL1NyYy9zdG0zMmYxeHhfaGFsX25hbmQuYwppbmRleCBlZjZhODBiLi44ODkzMGNhIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2hhbF9uYW5kLmMKKysrIGIvU3JjL3N0bTMyZjF4eF9oYWxfbmFuZC5jCkBAIC02OSwyNSArNjksMjUgQEAKICAgICAgIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgIFVTRV9IQUxfTkFORF9SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICAgICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KIAotICAgICAgVXNlIEZ1bmN0aW9ucyBAcmVmIEhBTF9OQU5EX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2ssCisgICAgICBVc2UgRnVuY3Rpb25zIEhBTF9OQU5EX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2ssCiAgICAgICBpdCBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICA6IE5BTkQgTXNwSW5pdC4KICAgICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICA6IE5BTkQgTXNwRGVJbml0LgogICAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBDYWxsYmFjayBJRAogICAgICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KIAotICAgICAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX05BTkRfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAotICAgICAgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb24uIEl0IGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgorICAgICAgVXNlIGZ1bmN0aW9uIEhBTF9OQU5EX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICAgIHdlYWsgKG92ZXJyaWRkZW4pIGZ1bmN0aW9uLiBJdCBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICA6IE5BTkQgTXNwSW5pdC4KICAgICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICA6IE5BTkQgTXNwRGVJbml0LgogICAgICAgVGhpcyBmdW5jdGlvbikgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAKLSAgICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9OQU5EX0luaXQgYW5kIGlmIHRoZSBzdGF0ZSBpcyBIQUxfTkFORF9TVEFURV9SRVNFVAotICAgICAgYWxsIGNhbGxiYWNrcyBhcmUgcmVzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucy4KKyAgICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBIQUxfTkFORF9Jbml0IGFuZCBpZiB0aGUgc3RhdGUgaXMgSEFMX05BTkRfU1RBVEVfUkVTRVQKKyAgICAgIGFsbCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChvdmVycmlkZGVuKSBmdW5jdGlvbnMuCiAgICAgICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCBhbmQgTXNwRGVJbml0IGNhbGxiYWNrcyB0aGF0IGFyZSByZXNwZWN0aXZlbHkKLSAgICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBAcmVmIEhBTF9OQU5EX0luaXQKLSAgICAgIGFuZCBAcmVmICBIQUxfTkFORF9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCi0gICAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX05BTkRfSW5pdCBhbmQgQHJlZiBIQUxfTkFORF9EZUluaXQKKyAgICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAob3ZlcnJpZGRlbikgZnVuY3Rpb25zIGluIHRoZSBIQUxfTkFORF9Jbml0CisgICAgICBhbmQgIEhBTF9OQU5EX0RlSW5pdCBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KKyAgICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgSEFMX05BTkRfSW5pdCBhbmQgSEFMX05BTkRfRGVJbml0CiAgICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpCiAKICAgICAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gUkVBRFkgc3RhdGUgb25seS4KQEAgLTk1LDEyICs5NSwxMiBAQAogICAgICAgaW4gUkVBRFkgb3IgUkVTRVQgc3RhdGUsIHRodXMgcmVnaXN0ZXJlZCAodXNlcikgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkCiAgICAgICBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgogICAgICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICAgICAgdXNpbmcgQHJlZiBIQUxfTkFORF9SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX05BTkRfRGVJbml0Ci0gICAgICBvciBAcmVmIEhBTF9OQU5EX0luaXQgZnVuY3Rpb24uCisgICAgICB1c2luZyBIQUxfTkFORF9SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEhBTF9OQU5EX0RlSW5pdAorICAgICAgb3IgSEFMX05BTkRfSW5pdCBmdW5jdGlvbi4KIAogICAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfTkFORF9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlCi0gICAgICBhbmQgd2VhayAoc3VyY2hhcmdlZCkgY2FsbGJhY2tzIGFyZSB1c2VkLgorICAgICAgYW5kIHdlYWsgKG92ZXJyaWRkZW4pIGNhbGxiYWNrcyBhcmUgdXNlZC4KIAogICBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01MjksOCArNTI5LDggQEAKICAgKiBAcGFyYW0gIE51bVBhZ2VUb1JlYWQgIG51bWJlciBvZiBwYWdlcyB0byByZWFkIGZyb20gYmxvY2sKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1JlYWRfUGFnZV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDhfdCAqcEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBOdW1QYWdlVG9SZWFkKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfUmVhZF9QYWdlXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIGNvbnN0IE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVBhZ2VUb1JlYWQpCiB7CiAgIHVpbnQzMl90IGluZGV4OwogICB1aW50MzJfdCB0aWNrc3RhcnQ7CkBAIC02OTQsOCArNjk0LDggQEAKICAgKiBAcGFyYW0gIE51bVBhZ2VUb1JlYWQgIG51bWJlciBvZiBwYWdlcyB0byByZWFkIGZyb20gYmxvY2sKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1JlYWRfUGFnZV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsIHVpbnQxNl90ICpwQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBOdW1QYWdlVG9SZWFkKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfUmVhZF9QYWdlXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVBhZ2VUb1JlYWQpCiB7CiAgIHVpbnQzMl90IGluZGV4OwogICB1aW50MzJfdCB0aWNrc3RhcnQ7CkBAIC04NjksOCArODY5LDggQEAKICAgKiBAcGFyYW0gIE51bVBhZ2VUb1dyaXRlICAgbnVtYmVyIG9mIHBhZ2VzIHRvIHdyaXRlIHRvIGJsb2NrCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9Xcml0ZV9QYWdlXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50OF90ICpwQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBOdW1QYWdlVG9Xcml0ZSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1dyaXRlX1BhZ2VfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVBhZ2VUb1dyaXRlKQogewogICB1aW50MzJfdCBpbmRleDsKICAgdWludDMyX3QgdGlja3N0YXJ0OwpAQCAtODc4LDcgKzg3OCw3IEBACiAgIHVpbnQzMl90IG51bXBhZ2Vzd3JpdHRlbiA9IDBVOwogICB1aW50MzJfdCBuYW5kYWRkcmVzczsKICAgdWludDMyX3QgbmJwYWdlcyA9IE51bVBhZ2VUb1dyaXRlOwotICB1aW50OF90ICpidWZmID0gcEJ1ZmZlcjsKKyAgY29uc3QgdWludDhfdCAqYnVmZiA9IHBCdWZmZXI7CiAKICAgLyogQ2hlY2sgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwogICBpZiAoaG5hbmQtPlN0YXRlID09IEhBTF9OQU5EX1NUQVRFX0JVU1kpCkBAIC0xMDI5LDggKzEwMjksOCBAQAogICAqIEBwYXJhbSAgTnVtUGFnZVRvV3JpdGUgICBudW1iZXIgb2YgcGFnZXMgdG8gd3JpdGUgdG8gYmxvY2sKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1dyaXRlX1BhZ2VfMTZiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50MTZfdCAqcEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bVBhZ2VUb1dyaXRlKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfV3JpdGVfUGFnZV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MTZfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtUGFnZVRvV3JpdGUpCiB7CiAgIHVpbnQzMl90IGluZGV4OwogICB1aW50MzJfdCB0aWNrc3RhcnQ7CkBAIC0xMDM4LDcgKzEwMzgsNyBAQAogICB1aW50MzJfdCBudW1wYWdlc3dyaXR0ZW4gPSAwVTsKICAgdWludDMyX3QgbmFuZGFkZHJlc3M7CiAgIHVpbnQzMl90IG5icGFnZXMgPSBOdW1QYWdlVG9Xcml0ZTsKLSAgdWludDE2X3QgKmJ1ZmYgPSBwQnVmZmVyOworICBjb25zdCB1aW50MTZfdCAqYnVmZiA9IHBCdWZmZXI7CiAKICAgLyogQ2hlY2sgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwogICBpZiAoaG5hbmQtPlN0YXRlID09IEhBTF9OQU5EX1NUQVRFX0JVU1kpCkBAIC0xMjAwLDggKzEyMDAsOCBAQAogICAqIEBwYXJhbSAgTnVtU3BhcmVBcmVhVG9SZWFkIE51bWJlciBvZiBzcGFyZSBhcmVhIHRvIHJlYWQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1JlYWRfU3BhcmVBcmVhXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50OF90ICpwQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtU3BhcmVBcmVhVG9SZWFkKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfUmVhZF9TcGFyZUFyZWFfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1TcGFyZUFyZWFUb1JlYWQpCiB7CiAgIHVpbnQzMl90IGluZGV4OwogICB1aW50MzJfdCB0aWNrc3RhcnQ7CkBAIC0xMzcyLDcgKzEzNzIsNyBAQAogICAqIEBwYXJhbSAgTnVtU3BhcmVBcmVhVG9SZWFkIE51bWJlciBvZiBzcGFyZSBhcmVhIHRvIHJlYWQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1JlYWRfU3BhcmVBcmVhXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1JlYWRfU3BhcmVBcmVhXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG9SZWFkKQogewogICB1aW50MzJfdCBpbmRleDsKQEAgLTE1NDQsOCArMTU0NCw4IEBACiAgICogQHBhcmFtICBOdW1TcGFyZUFyZWFUb3dyaXRlICAgbnVtYmVyIG9mIHNwYXJlIGFyZWFzIHRvIHdyaXRlIHRvIGJsb2NrCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9Xcml0ZV9TcGFyZUFyZWFfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG93cml0ZSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1dyaXRlX1NwYXJlQXJlYV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1TcGFyZUFyZWFUb3dyaXRlKQogewogICB1aW50MzJfdCBpbmRleDsKICAgdWludDMyX3QgdGlja3N0YXJ0OwpAQCAtMTU1NCw3ICsxNTU0LDcgQEAKICAgdWludDMyX3QgbmFuZGFkZHJlc3M7CiAgIHVpbnQzMl90IGNvbHVtbmFkZHJlc3M7CiAgIHVpbnQzMl90IG5ic3BhcmUgPSBOdW1TcGFyZUFyZWFUb3dyaXRlOwotICB1aW50OF90ICpidWZmID0gcEJ1ZmZlcjsKKyAgY29uc3QgdWludDhfdCAqYnVmZiA9IHBCdWZmZXI7CiAKICAgLyogQ2hlY2sgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwogICBpZiAoaG5hbmQtPlN0YXRlID09IEhBTF9OQU5EX1NUQVRFX0JVU1kpCkBAIC0xNzE0LDggKzE3MTQsOCBAQAogICAqIEBwYXJhbSAgTnVtU3BhcmVBcmVhVG93cml0ZSAgIG51bWJlciBvZiBzcGFyZSBhcmVhcyB0byB3cml0ZSB0byBibG9jawogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfV3JpdGVfU3BhcmVBcmVhXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvd3JpdGUpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9Xcml0ZV9TcGFyZUFyZWFfMTZiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIGNvbnN0IE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MTZfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG93cml0ZSkKIHsKICAgdWludDMyX3QgaW5kZXg7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKQEAgLTE3MjQsNyArMTcyNCw3IEBACiAgIHVpbnQzMl90IG5hbmRhZGRyZXNzOwogICB1aW50MzJfdCBjb2x1bW5hZGRyZXNzOwogICB1aW50MzJfdCBuYnNwYXJlID0gTnVtU3BhcmVBcmVhVG93cml0ZTsKLSAgdWludDE2X3QgKmJ1ZmYgPSBwQnVmZmVyOworICBjb25zdCB1aW50MTZfdCAqYnVmZiA9IHBCdWZmZXI7CiAKICAgLyogQ2hlY2sgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwogICBpZiAoaG5hbmQtPlN0YXRlID09IEhBTF9OQU5EX1NUQVRFX0JVU1kpCkBAIC0xODgyLDcgKzE4ODIsNyBAQAogICAqIEBwYXJhbSAgcEFkZHJlc3MgIHBvaW50ZXIgdG8gTkFORCBhZGRyZXNzIHN0cnVjdHVyZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfRXJhc2VfQmxvY2soTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9FcmFzZV9CbG9jayhOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcykKIHsKICAgdWludDMyX3QgZGV2aWNlYWRkcmVzczsKIApAQCAtMTk0NSw3ICsxOTQ1LDcgQEAKICAgKiAgICAgICAgICAgLSBOQU5EX1ZBTElEX0FERFJFU1M6IFdoZW4gdGhlIG5ldyBhZGRyZXNzIGlzIHZhbGlkIGFkZHJlc3MKICAgKiAgICAgICAgICAgLSBOQU5EX0lOVkFMSURfQUREUkVTUzogV2hlbiB0aGUgbmV3IGFkZHJlc3MgaXMgaW52YWxpZCBhZGRyZXNzCiAgICovCi11aW50MzJfdCBIQUxfTkFORF9BZGRyZXNzX0luYyhOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcykKK3VpbnQzMl90IEhBTF9OQU5EX0FkZHJlc3NfSW5jKGNvbnN0IE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzKQogewogICB1aW50MzJfdCBzdGF0dXMgPSBOQU5EX1ZBTElEX0FERFJFU1M7CiAKQEAgLTE5NzYsNyArMTk3Niw3IEBACiAjaWYgKFVTRV9IQUxfTkFORF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKIC8qKgogICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIE5BTkQgQ2FsbGJhY2sKLSAgKiAgICAgICAgIFRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayAoc3VyY2hhcmdlZCkgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqICAgICAgICAgVG8gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtIGhuYW5kIDogTkFORCBoYW5kbGUKICAgKiBAcGFyYW0gQ2FsbGJhY2tJZCA6IElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSByZWdpc3RlcmVkCiAgICogICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0xOTk2LDkgKzE5OTYsNiBAQAogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhuYW5kKTsKLQogICBpZiAoaG5hbmQtPlN0YXRlID09IEhBTF9OQU5EX1NUQVRFX1JFQURZKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lkKQpAQCAtMjA0MCwxNCArMjAzNywxMSBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGhuYW5kKTsKLSAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGEgVXNlciBOQU5EIENhbGxiYWNrCi0gICogICAgICAgICBOQU5EIENhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgKHN1cmNoYXJnZWQpIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiAgICAgICAgIE5BTkQgQ2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtIGhuYW5kIDogTkFORCBoYW5kbGUKICAgKiBAcGFyYW0gQ2FsbGJhY2tJZCA6IElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKICAgKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTIwNjAsOSArMjA1NCw2IEBACiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhuYW5kKTsKLQogICBpZiAoaG5hbmQtPlN0YXRlID09IEhBTF9OQU5EX1NUQVRFX1JFQURZKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lkKQpAQCAtMjEwNCw5ICsyMDk1LDYgQEAKICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhobmFuZCk7Ci0gIHJldHVybiBzdGF0dXM7CiB9CiAjZW5kaWYgLyogVVNFX0hBTF9OQU5EX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCkBAIC0yMjU2LDcgKzIyNDQsNyBAQAogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBOQU5EIG1vZHVsZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0ZQogICAqLwotSEFMX05BTkRfU3RhdGVUeXBlRGVmIEhBTF9OQU5EX0dldFN0YXRlKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQpCitIQUxfTkFORF9TdGF0ZVR5cGVEZWYgSEFMX05BTkRfR2V0U3RhdGUoY29uc3QgTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCkKIHsKICAgcmV0dXJuIGhuYW5kLT5TdGF0ZTsKIH0KQEAgLTIyNjcsNyArMjI1NSw3IEBACiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIE5BTkQgbW9kdWxlLgogICAqIEByZXR2YWwgTkFORCBzdGF0dXMKICAgKi8KLXVpbnQzMl90IEhBTF9OQU5EX1JlYWRfU3RhdHVzKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQpCit1aW50MzJfdCBIQUxfTkFORF9SZWFkX1N0YXR1cyhjb25zdCBOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kKQogewogICB1aW50MzJfdCBkYXRhOwogICB1aW50MzJfdCBkZXZpY2VhZGRyZXNzOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfbm9yLmMgYi9TcmMvc3RtMzJmMXh4X2hhbF9ub3IuYwppbmRleCBlYmJjNDAwLi43NTUyZTU5IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2hhbF9ub3IuYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF9ub3IuYwpAQCAtNjYsMjUgKzY2LDI1IEBACiAgICAgICBUaGUgY29tcGlsYXRpb24gZGVmaW5lICBVU0VfSEFMX05PUl9SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICAgICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KIAotICAgICAgVXNlIEZ1bmN0aW9ucyBAcmVmIEhBTF9OT1JfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjaywKKyAgICAgIFVzZSBGdW5jdGlvbnMgSEFMX05PUl9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLAogICAgICAgaXQgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgOiBOT1IgTXNwSW5pdC4KICAgICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICA6IE5PUiBNc3BEZUluaXQuCiAgICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECiAgICAgICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogCi0gICAgICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfTk9SX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKLSAgICAgIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uLiBJdCBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKKyAgICAgIFVzZSBmdW5jdGlvbiBIQUxfTk9SX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICAgIHdlYWsgKG92ZXJyaWRkZW4pIGZ1bmN0aW9uLiBJdCBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICA6IE5PUiBNc3BJbml0LgogICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgIDogTk9SIE1zcERlSW5pdC4KICAgICAgIFRoaXMgZnVuY3Rpb24pIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSBhbmQgdGhlIENhbGxiYWNrIElELgogCi0gICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfTk9SX0luaXQgYW5kIGlmIHRoZSBzdGF0ZSBpcyBIQUxfTk9SX1NUQVRFX1JFU0VUCi0gICAgICBhbGwgY2FsbGJhY2tzIGFyZSByZXNldCB0byB0aGUgY29ycmVzcG9uZGluZyBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zLgorICAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9OT1JfSW5pdCBhbmQgaWYgdGhlIHN0YXRlIGlzIEhBTF9OT1JfU1RBVEVfUkVTRVQKKyAgICAgIGFsbCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChvdmVycmlkZGVuKSBmdW5jdGlvbnMuCiAgICAgICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCBhbmQgTXNwRGVJbml0IGNhbGxiYWNrcyB0aGF0IGFyZSByZXNwZWN0aXZlbHkKLSAgICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBAcmVmIEhBTF9OT1JfSW5pdAotICAgICAgYW5kIEByZWYgIEhBTF9OT1JfRGVJbml0IG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgotICAgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9OT1JfSW5pdCBhbmQgQHJlZiBIQUxfTk9SX0RlSW5pdAorICAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChvdmVycmlkZGVuKSBmdW5jdGlvbnMgaW4gdGhlIEhBTF9OT1JfSW5pdAorICAgICAgYW5kICBIQUxfTk9SX0RlSW5pdCBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KKyAgICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgSEFMX05PUl9Jbml0IGFuZCBIQUxfTk9SX0RlSW5pdAogICAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKQogCiAgICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIFJFQURZIHN0YXRlIG9ubHkuCkBAIC05MiwxMiArOTIsMTIgQEAKICAgICAgIGluIFJFQURZIG9yIFJFU0VUIHN0YXRlLCB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZAogICAgICAgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KICAgICAgIEluIHRoYXQgY2FzZSBmaXJzdCByZWdpc3RlciB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKLSAgICAgIHVzaW5nIEByZWYgSEFMX05PUl9SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX05PUl9EZUluaXQKLSAgICAgIG9yIEByZWYgSEFMX05PUl9Jbml0IGZ1bmN0aW9uLgorICAgICAgdXNpbmcgSEFMX05PUl9SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEhBTF9OT1JfRGVJbml0CisgICAgICBvciBIQUxfTk9SX0luaXQgZnVuY3Rpb24uCiAKICAgICAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX05PUl9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlCi0gICAgICBhbmQgd2VhayAoc3VyY2hhcmdlZCkgY2FsbGJhY2tzIGFyZSB1c2VkLgorICAgICAgYW5kIHdlYWsgKG92ZXJyaWRkZW4pIGNhbGxiYWNrcyBhcmUgdXNlZC4KIAogICBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMDYsNyArMTA2LDcgQEAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJmMXh4X2hhbC5oIgogCi0jaWYgZGVmaW5lZChGU01DX0JBTksxKQorI2lmICBkZWZpbmVkKEZTTUNfQkFOSzEpCiAKIC8qKiBAYWRkdG9ncm91cCBTVE0zMkYxeHhfSEFMX0RyaXZlcgogICAqIEB7CkBAIC0xMjcsNiArMTI3LDExIEBACiAgICovCiAKIC8qIENvbnN0YW50cyB0byBkZWZpbmUgYWRkcmVzcyB0byBzZXQgdG8gd3JpdGUgYSBjb21tYW5kICovCisjZGVmaW5lIE5PUl9DTURfQUREUkVTU19GSVJTVF9CWVRFICAgICAgICAgICAgKHVpbnQxNl90KTB4MEFBQQorI2RlZmluZSBOT1JfQ01EX0FERFJFU1NfRklSU1RfQ0ZJX0JZVEUgICAgICAgICh1aW50MTZfdCkweDAwQUEKKyNkZWZpbmUgTk9SX0NNRF9BRERSRVNTX1NFQ09ORF9CWVRFICAgICAgICAgICAodWludDE2X3QpMHgwNTU1CisjZGVmaW5lIE5PUl9DTURfQUREUkVTU19USElSRF9CWVRFICAgICAgICAgICAgKHVpbnQxNl90KTB4MEFBQQorCiAjZGVmaW5lIE5PUl9DTURfQUREUkVTU19GSVJTVCAgICAgICAgICAgICAgICAgKHVpbnQxNl90KTB4MDU1NQogI2RlZmluZSBOT1JfQ01EX0FERFJFU1NfRklSU1RfQ0ZJICAgICAgICAgICAgICh1aW50MTZfdCkweDAwNTUKICNkZWZpbmUgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCAgICAgICAgICAgICAgICAodWludDE2X3QpMHgwMkFBCkBAIC0yNjQsNyArMjY5LDggQEAKICAgKHZvaWQpRlNNQ19OT1JTUkFNX1RpbWluZ19Jbml0KGhub3ItPkluc3RhbmNlLCBUaW1pbmcsIGhub3ItPkluaXQuTlNCYW5rKTsKIAogICAvKiBJbml0aWFsaXplIE5PUiBleHRlbmRlZCBtb2RlIHRpbWluZyBJbnRlcmZhY2UgKi8KLSAgKHZvaWQpRlNNQ19OT1JTUkFNX0V4dGVuZGVkX1RpbWluZ19Jbml0KGhub3ItPkV4dGVuZGVkLCBFeHRUaW1pbmcsIGhub3ItPkluaXQuTlNCYW5rLCBobm9yLT5Jbml0LkV4dGVuZGVkTW9kZSk7CisgICh2b2lkKUZTTUNfTk9SU1JBTV9FeHRlbmRlZF9UaW1pbmdfSW5pdChobm9yLT5FeHRlbmRlZCwgRXh0VGltaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG5vci0+SW5pdC5OU0JhbmssIGhub3ItPkluaXQuRXh0ZW5kZWRNb2RlKTsKIAogICAvKiBFbmFibGUgdGhlIE5PUlNSQU0gZGV2aWNlICovCiAgIF9fRlNNQ19OT1JTUkFNX0VOQUJMRShobm9yLT5JbnN0YW5jZSwgaG5vci0+SW5pdC5OU0JhbmspOwpAQCAtMzAwLDIxICszMDYsMzAgQEAKICAgICBkZXZpY2VhZGRyZXNzID0gTk9SX01FTU9SWV9BRFJFU1M0OwogICB9CiAKLSAgRlNNQ19OT1JTUkFNX1dyaXRlT3BlcmF0aW9uX0VuYWJsZShobm9yLT5JbnN0YW5jZSxobm9yLT5Jbml0Lk5TQmFuayk7Ci0gIAotICAvKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBjb21tYW5kIHNldCAqLwotICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVF9DRkkpLCBOT1JfQ01EX0RBVEFfQ0ZJKTsKLSAgaG5vci0+Q29tbWFuZFNldCA9ICooX19JTyB1aW50MTZfdCAqKSBOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0FERFJFU1NfQ09NTUFORF9TRVQpOwotICAKLSAgc3RhdHVzID0gSEFMX05PUl9SZXR1cm5Ub1JlYWRNb2RlKGhub3IpOwotCiAgIGlmIChobm9yLT5Jbml0LldyaXRlT3BlcmF0aW9uID09IEZTTUNfV1JJVEVfT1BFUkFUSU9OX0RJU0FCTEUpCiAgIHsKLSAgICBGU01DX05PUlNSQU1fV3JpdGVPcGVyYXRpb25fRGlzYWJsZShobm9yLT5JbnN0YW5jZSxobm9yLT5Jbml0Lk5TQmFuayk7CisgICAgKHZvaWQpRlNNQ19OT1JTUkFNX1dyaXRlT3BlcmF0aW9uX0Rpc2FibGUoaG5vci0+SW5zdGFuY2UsIGhub3ItPkluaXQuTlNCYW5rKTsKIAogICAgIC8qIFVwZGF0ZSB0aGUgTk9SIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgICBobm9yLT5TdGF0ZSA9IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEOwogICB9CisgIGVsc2UKKyAgeworICAgIC8qIEdldCB0aGUgdmFsdWUgb2YgdGhlIGNvbW1hbmQgc2V0ICovCisgICAgaWYgKHV3Tk9STWVtb3J5RGF0YVdpZHRoID09IE5PUl9NRU1PUllfOEIpCisgICAgeworICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1RfQ0ZJX0JZVEUpLAorICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DRkkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1RfQ0ZJKSwgTk9SX0NNRF9EQVRBX0NGSSk7CisgICAgfQorCisgICAgaG5vci0+Q29tbWFuZFNldCA9ICooX19JTyB1aW50MTZfdCAqKSBOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0FERFJFU1NfQ09NTUFORF9TRVQpOworCisgICAgc3RhdHVzID0gSEFMX05PUl9SZXR1cm5Ub1JlYWRNb2RlKGhub3IpOworICB9CiAKICAgcmV0dXJuIHN0YXR1czsKIH0KQEAgLTQzOSw3ICs0NTQsMTEgQEAKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmICgoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEKSkKKyAgZWxzZSBpZiAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisgIGVsc2UgaWYgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVBRFkpCiAgIHsKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaG5vcik7CkBAIC00NjgsOSArNDg3LDIyIEBACiAgICAgLyogU2VuZCByZWFkIElEIGNvbW1hbmQgKi8KICAgICBpZiAoaG5vci0+Q29tbWFuZFNldCA9PSBOT1JfQU1EX0ZVSklUU1VfQ09NTUFORF9TRVQpCiAgICAgewotICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1QpLCBOT1JfQ01EX0RBVEFfRklSU1QpOwotICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19USElSRCksIE5PUl9DTURfREFUQV9BVVRPX1NFTEVDVCk7CisgICAgICBpZiAodXdOT1JNZW1vcnlEYXRhV2lkdGggPT0gTk9SX01FTU9SWV84QikKKyAgICAgIHsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1RfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfRklSU1QpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfU0VDT05EKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQVVUT19TRUxFQ1QpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19USElSRCksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQVVUT19TRUxFQ1QpOworICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9JTlRFTF9TSEFSUF9FWFRfQ09NTUFORF9TRVQpCiAgICAgewpAQCAtNTI2LDcgKzU1OCwxMSBAQAogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1JFQURZKSB8fCAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpKQorICBlbHNlIGlmIChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKyAgZWxzZSBpZiAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkKICAgewogICAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgICAgX19IQUxfTE9DSyhobm9yKTsKQEAgLTYwMCw3ICs2MzYsMTEgQEAKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmICgoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEKSkKKyAgZWxzZSBpZiAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisgIGVsc2UgaWYgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVBRFkpCiAgIHsKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaG5vcik7CkBAIC02MjksOSArNjY5LDIyIEBACiAgICAgLyogU2VuZCByZWFkIGRhdGEgY29tbWFuZCAqLwogICAgIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCkKICAgICB7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwgTk9SX0NNRF9EQVRBX1JFQURfUkVTRVQpOworICAgICAgaWYgKHV3Tk9STWVtb3J5RGF0YVdpZHRoID09IE5PUl9NRU1PUllfOEIpCisgICAgICB7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX1JFQURfUkVTRVQpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19USElSRCksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfUkVBRF9SRVNFVCk7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0lOVEVMX1NIQVJQX0VYVF9DT01NQU5EX1NFVCkKICAgICB7CkBAIC03MTAsOSArNzYzLDIxIEBACiAgICAgLyogU2VuZCBwcm9ncmFtIGRhdGEgY29tbWFuZCAqLwogICAgIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCkKICAgICB7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwgTk9SX0NNRF9EQVRBX1BST0dSQU0pOworICAgICAgaWYgKHV3Tk9STWVtb3J5RGF0YVdpZHRoID09IE5PUl9NRU1PUllfOEIpCisgICAgICB7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX1BST0dSQU0pOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19USElSRCksIE5PUl9DTURfREFUQV9QUk9HUkFNKTsKKyAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoaG5vci0+Q29tbWFuZFNldCA9PSBOT1JfSU5URUxfU0hBUlBfRVhUX0NPTU1BTkRfU0VUKQogICAgIHsKQEAgLTc2OSw3ICs4MzQsMTEgQEAKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmICgoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEKSkKKyAgZWxzZSBpZiAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisgIGVsc2UgaWYgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVBRFkpCiAgIHsKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaG5vcik7CkBAIC03OTgsOSArODY3LDIyIEBACiAgICAgLyogU2VuZCByZWFkIGRhdGEgY29tbWFuZCAqLwogICAgIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCkKICAgICB7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwgTk9SX0NNRF9EQVRBX1JFQURfUkVTRVQpOworICAgICAgaWYgKHV3Tk9STWVtb3J5RGF0YVdpZHRoID09IE5PUl9NRU1PUllfOEIpCisgICAgICB7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX1JFQURfUkVTRVQpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19USElSRCksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfUkVBRF9SRVNFVCk7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0lOVEVMX1NIQVJQX0VYVF9DT01NQU5EX1NFVCkKICAgICB7CkBAIC04OTMsMTAgKzk3NSwyMCBAQAogCiAgICAgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0FNRF9GVUpJVFNVX0NPTU1BTkRfU0VUKQogICAgIHsKLSAgICAgIC8qIElzc3VlIHVubG9jayBjb21tYW5kIHNlcXVlbmNlICovCi0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKLQorICAgICAgaWYgKHV3Tk9STWVtb3J5RGF0YVdpZHRoID09IE5PUl9NRU1PUllfOEIpCisgICAgICB7CisgICAgICAgIC8qIElzc3VlIHVubG9jayBjb21tYW5kIHNlcXVlbmNlICovCisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIElzc3VlIHVubG9jayBjb21tYW5kIHNlcXVlbmNlICovCisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUKSwgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICB9CiAgICAgICAvKiBXcml0ZSBCdWZmZXIgTG9hZCBDb21tYW5kICovCiAgICAgICBOT1JfV1JJVEUoKGRldmljZWFkZHJlc3MgKyB1d0FkZHJlc3MpLCBOT1JfQ01EX0RBVEFfQlVGRkVSX0FORF9QUk9HKTsKICAgICAgIE5PUl9XUklURSgoZGV2aWNlYWRkcmVzcyArIHV3QWRkcmVzcyksICh1aW50MTZfdCkodXdCdWZmZXJTaXplIC0gMVUpKTsKQEAgLTk5NiwxNCArMTA4OCwyNiBAQAogICAgIC8qIFNlbmQgYmxvY2sgZXJhc2UgY29tbWFuZCBzZXF1ZW5jZSAqLwogICAgIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCkKICAgICB7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwKLSAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9USElSRCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GT1VSVEgpLAotICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX0ZPVVJUSCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSUZUSCksCi0gICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NISVBfQkxPQ0tfRVJBU0VfRklGVEgpOworICAgICAgaWYgKHV3Tk9STWVtb3J5RGF0YVdpZHRoID09IE5PUl9NRU1PUllfOEIpCisgICAgICB7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEX0JZVEUpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NISVBfQkxPQ0tfRVJBU0VfVEhJUkQpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19USElSRCksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9USElSRCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZPVVJUSCksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9GT1VSVEgpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSUZUSCksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9GSUZUSCk7CisgICAgICB9CiAgICAgICBOT1JfV1JJVEUoKHVpbnQzMl90KShCbG9ja0FkZHJlc3MgKyBBZGRyZXNzKSwgTk9SX0NNRF9EQVRBX0JMT0NLX0VSQVNFKTsKICAgICB9CiAgICAgZWxzZSBpZiAoaG5vci0+Q29tbWFuZFNldCA9PSBOT1JfSU5URUxfU0hBUlBfRVhUX0NPTU1BTkRfU0VUKQpAQCAtMTA4MSwxNSArMTE4NSwyOCBAQAogICAgIC8qIFNlbmQgTk9SIGNoaXAgZXJhc2UgY29tbWFuZCBzZXF1ZW5jZSAqLwogICAgIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCkKICAgICB7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwKLSAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9USElSRCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GT1VSVEgpLAotICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX0ZPVVJUSCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSUZUSCksCi0gICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NISVBfQkxPQ0tfRVJBU0VfRklGVEgpOwotICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0lYVEgpLCBOT1JfQ01EX0RBVEFfQ0hJUF9FUkFTRSk7CisgICAgICBpZiAodXdOT1JNZW1vcnlEYXRhV2lkdGggPT0gTk9SX01FTU9SWV84QikKKyAgICAgIHsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1RfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfRklSU1QpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfU0VDT05EKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9USElSRCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUKSwgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX1RISVJEKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRk9VUlRIKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX0ZPVVJUSCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJRlRIKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX0ZJRlRIKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0lYVEgpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NISVBfRVJBU0UpOworICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtMTEyOSw3ICsxMjQ2LDExIEBACiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVBRFkpIHx8IChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRCkpCisgIGVsc2UgaWYgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorICBlbHNlIGlmIChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1JFQURZKQogICB7CiAgICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgICBfX0hBTF9MT0NLKGhub3IpOwpAQCAtMTE1Niw4ICsxMjc3LDE1IEBACiAgICAgfQogCiAgICAgLyogU2VuZCByZWFkIENGSSBxdWVyeSBjb21tYW5kICovCi0gICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1RfQ0ZJKSwgTk9SX0NNRF9EQVRBX0NGSSk7Ci0KKyAgICBpZiAodXdOT1JNZW1vcnlEYXRhV2lkdGggPT0gTk9SX01FTU9SWV84QikKKyAgICB7CisgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVF9DRklfQllURSksCisgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NGSSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVF9DRkkpLCBOT1JfQ01EX0RBVEFfQ0ZJKTsKKyAgICB9CiAgICAgLyogcmVhZCB0aGUgTk9SIENGSSBpbmZvcm1hdGlvbiAqLwogICAgIHBOT1JfQ0ZJLT5DRklfMSA9ICooX19JTyB1aW50MTZfdCAqKSBOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgQ0ZJMV9BRERSRVNTKTsKICAgICBwTk9SX0NGSS0+Q0ZJXzIgPSAqKF9fSU8gdWludDE2X3QgKikgTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIENGSTJfQUREUkVTUyk7CkBAIC0xMTgxLDcgKzEzMDksNyBAQAogI2lmIChVU0VfSEFMX05PUl9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKIC8qKgogICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIE5PUiBDYWxsYmFjawotICAqICAgICAgICAgVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB3ZWFrIChzdXJjaGFyZ2VkKSBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogICAgICAgICBUbyBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKICAgKiBAcGFyYW0gaG5vciA6IE5PUiBoYW5kbGUKICAgKiBAcGFyYW0gQ2FsbGJhY2tJZCA6IElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSByZWdpc3RlcmVkCiAgICogICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0xMjAxLDkgKzEzMjksNiBAQAogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhub3IpOwotCiAgIHN0YXRlID0gaG5vci0+U3RhdGU7CiAgIGlmICgoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVTRVQpIHx8IChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRCkpCiAgIHsKQEAgLTEyMjcsMTQgKzEzNTIsMTIgQEAKICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhobm9yKTsKICAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGEgVXNlciBOT1IgQ2FsbGJhY2sKLSAgKiAgICAgICAgIE5PUiBDYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIChzdXJjaGFyZ2VkKSBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogICAgICAgICBOT1IgQ2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtIGhub3IgOiBOT1IgaGFuZGxlCiAgICogQHBhcmFtIENhbGxiYWNrSWQgOiBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0xMjQ3LDkgKzEzNzAsNiBAQAogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIEhBTF9OT1JfU3RhdGVUeXBlRGVmIHN0YXRlOwogCi0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaG5vcik7Ci0KICAgc3RhdGUgPSBobm9yLT5TdGF0ZTsKICAgaWYgKChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1JFQURZKSB8fCAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRVNFVCkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEKSkKICAgewpAQCAtMTI3Myw4ICsxMzkzLDYgQEAKICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhobm9yKTsKICAgcmV0dXJuIHN0YXR1czsKIH0KICNlbmRpZiAvKiAoVVNFX0hBTF9OT1JfUkVHSVNURVJfQ0FMTEJBQ0tTKSAqLwpAQCAtMTM5MSw3ICsxNTA5LDcgQEAKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgTk9SIG1vZHVsZS4KICAgKiBAcmV0dmFsIE5PUiBjb250cm9sbGVyIHN0YXRlCiAgICovCi1IQUxfTk9SX1N0YXRlVHlwZURlZiBIQUxfTk9SX0dldFN0YXRlKE5PUl9IYW5kbGVUeXBlRGVmICpobm9yKQorSEFMX05PUl9TdGF0ZVR5cGVEZWYgSEFMX05PUl9HZXRTdGF0ZShjb25zdCBOT1JfSGFuZGxlVHlwZURlZiAqaG5vcikKIHsKICAgcmV0dXJuIGhub3ItPlN0YXRlOwogfQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfcGNjYXJkLmMgYi9TcmMvc3RtMzJmMXh4X2hhbF9wY2NhcmQuYwppbmRleCBkZmI2M2I4Li5lYzI0NmI0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2hhbF9wY2NhcmQuYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF9wY2NhcmQuYwpAQCAtNjEsMjUgKzYxLDI1IEBACiAgICAgICBUaGUgY29tcGlsYXRpb24gZGVmaW5lICBVU0VfSEFMX1BDQ0FSRF9SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICAgICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KIAotICAgICAgVXNlIEZ1bmN0aW9ucyBAcmVmIEhBTF9QQ0NBUkRfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjaywKKyAgICAgIFVzZSBGdW5jdGlvbnMgSEFMX1BDQ0FSRF9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLAogICAgICAgaXQgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgOiBQQ0NBUkQgTXNwSW5pdC4KICAgICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICA6IFBDQ0FSRCBNc3BEZUluaXQuCiAgICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECiAgICAgICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogCi0gICAgICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfUENDQVJEX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICAgIFVzZSBmdW5jdGlvbiBIQUxfUENDQVJEX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICAgIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uLiBJdCBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICA6IFBDQ0FSRCBNc3BJbml0LgogICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgIDogUENDQVJEIE1zcERlSW5pdC4KICAgICAgIFRoaXMgZnVuY3Rpb24pIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSBhbmQgdGhlIENhbGxiYWNrIElELgogCi0gICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfUENDQVJEX0luaXQgYW5kIGlmIHRoZSBzdGF0ZSBpcyBIQUxfUENDQVJEX1NUQVRFX1JFU0VUCisgICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX1BDQ0FSRF9Jbml0IGFuZCBpZiB0aGUgc3RhdGUgaXMgSEFMX1BDQ0FSRF9TVEFURV9SRVNFVAogICAgICAgYWxsIGNhbGxiYWNrcyBhcmUgcmVzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucy4KICAgICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgY2FsbGJhY2tzIHRoYXQgYXJlIHJlc3BlY3RpdmVseQotICAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEByZWYgSEFMX1BDQ0FSRF9Jbml0Ci0gICAgICBhbmQgQHJlZiAgSEFMX1BDQ0FSRF9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCi0gICAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX1BDQ0FSRF9Jbml0IGFuZCBAcmVmIEhBTF9QQ0NBUkRfRGVJbml0CisgICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgSEFMX1BDQ0FSRF9Jbml0CisgICAgICBhbmQgIEhBTF9QQ0NBUkRfRGVJbml0IG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgorICAgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfUENDQVJEX0luaXQgYW5kIEhBTF9QQ0NBUkRfRGVJbml0CiAgICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpCiAKICAgICAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gUkVBRFkgc3RhdGUgb25seS4KQEAgLTg3LDggKzg3LDggQEAKICAgICAgIGluIFJFQURZIG9yIFJFU0VUIHN0YXRlLCB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZAogICAgICAgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KICAgICAgIEluIHRoYXQgY2FzZSBmaXJzdCByZWdpc3RlciB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKLSAgICAgIHVzaW5nIEByZWYgSEFMX1BDQ0FSRF9SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX1BDQ0FSRF9EZUluaXQKLSAgICAgIG9yIEByZWYgSEFMX1BDQ0FSRF9Jbml0IGZ1bmN0aW9uLgorICAgICAgdXNpbmcgSEFMX1BDQ0FSRF9SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEhBTF9QQ0NBUkRfRGVJbml0CisgICAgICBvciBIQUxfUENDQVJEX0luaXQgZnVuY3Rpb24uCiAKICAgICAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX1BDQ0FSRF9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2hhbF9wY2QuYyBiL1NyYy9zdG0zMmYxeHhfaGFsX3BjZC5jCmluZGV4IGJlNmZiN2QuLmUwMWVmZTUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfaGFsX3BjZC5jCisrKyBiL1NyYy9zdG0zMmYxeHhfaGFsX3BjZC5jCkBAIC0zNyw3ICszNyw4IEBACiAKICAgICAgKCMpIEluaXRpYWxpemUgdGhlIFBDRCBsb3cgbGV2ZWwgcmVzb3VyY2VzIHRocm91Z2ggdGhlIEhBTF9QQ0RfTXNwSW5pdCgpIEFQSToKICAgICAgICAgICgjIykgRW5hYmxlIHRoZSBQQ0QvVVNCIExvdyBMZXZlbCBpbnRlcmZhY2UgY2xvY2sgdXNpbmcKLSAgICAgICAgICAgICAgKCsrKykgX19IQUxfUkNDX1VTQl9DTEtfRU5BQkxFKCk7IEZvciBVU0IgRGV2aWNlIG9ubHkgRlMgcGVyaXBoZXJhbAorICAgICAgICAgICAgICAoKysrKSBfX0hBTF9SQ0NfVVNCX0NMS19FTkFCTEUoKTsgRm9yIFVTQiBEZXZpY2UgRlMgcGVyaXBoZXJhbAorICAgICAgICAgICAgICAoKysrKSBfX0hBTF9SQ0NfVVNCX09UR19GU19DTEtfRU5BQkxFKCk7CiAKICAgICAgICAgICgjIykgSW5pdGlhbGl6ZSB0aGUgcmVsYXRlZCBHUElPIGNsb2NrcwogICAgICAgICAgKCMjKSBDb25maWd1cmUgUENEIHBpbi1vdXQKQEAgLTk0LDggKzk1LDEwIEBACiAKICNpZiBkZWZpbmVkIChVU0IpCiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgUENEX0VQX0lTUl9IYW5kbGVyKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKKyNpZiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKQogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfREJfVHJhbnNtaXQoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIFBDRF9FUFR5cGVEZWYgKmVwLCB1aW50MTZfdCB3RVBWYWwpOwogc3RhdGljIHVpbnQxNl90IEhBTF9QQ0RfRVBfREJfUmVjZWl2ZShQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgUENEX0VQVHlwZURlZiAqZXAsIHVpbnQxNl90IHdFUFZhbCk7CisjZW5kaWYgLyogKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkgKi8KICNlbmRpZiAvKiBkZWZpbmVkIChVU0IpICovCiAvKioKICAgKiBAfQpAQCAtMjA1LDcgKzIwOCw5IEBACiAgICAgLyogSW5pdCBlcCBzdHJ1Y3R1cmUgKi8KICAgICBocGNkLT5JTl9lcFtpXS5pc19pbiA9IDFVOwogICAgIGhwY2QtPklOX2VwW2ldLm51bSA9IGk7CisjaWYgZGVmaW5lZCAoVVNCX09UR19GUykKICAgICBocGNkLT5JTl9lcFtpXS50eF9maWZvX251bSA9IGk7CisjZW5kaWYgLyogZGVmaW5lZCAoVVNCX09UR19GUykgKi8KICAgICAvKiBDb250cm9sIHVudGlsIGVwIGlzIGFjdGl2YXRlZCAqLwogICAgIGhwY2QtPklOX2VwW2ldLnR5cGUgPSBFUF9UWVBFX0NUUkw7CiAgICAgaHBjZC0+SU5fZXBbaV0ubWF4cGFja2V0ID0gMFU7CkBAIC0zMjAsNyArMzI1LDcgQEAKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1BDRF9TVVNQRU5EX0NCX0lEIFVTQiBQQ0QgU3VzcGVuZCBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUENEX1JFU1VNRV9DQl9JRCBVU0IgUENEIFJlc3VtZSBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUENEX0NPTk5FQ1RfQ0JfSUQgVVNCIFBDRCBDb25uZWN0IGNhbGxiYWNrIElECi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9QQ0RfRElTQ09OTkVDVF9DQl9JRCBPVEcgUENEIERpc2Nvbm5lY3QgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1BDRF9ESVNDT05ORUNUX0NCX0lEIFVTQiBQQ0QgRGlzY29ubmVjdCBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUENEX01TUElOSVRfQ0JfSUQgTXNwRGVJbml0IGNhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9QQ0RfTVNQREVJTklUX0NCX0lEIE1zcERlSW5pdCBjYWxsYmFjayBJRAogICAqIEBwYXJhbSAgcENhbGxiYWNrIHBvaW50ZXIgdG8gdGhlIENhbGxiYWNrIGZ1bmN0aW9uCkBAIC00MjQsNyArNDI5LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGFuIFVTQiBQQ0QgQ2FsbGJhY2sKLSAgKiAgICAgICAgIFVTQiBQQ0QgY2FsbGFiY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogICAgICAgICBVU0IgUENEIGNhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjawogICAqIEBwYXJhbSAgaHBjZCBVU0IgUENEIGhhbmRsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNDM0LDcgKzQzOSw3IEBACiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9QQ0RfU1VTUEVORF9DQl9JRCBVU0IgUENEIFN1c3BlbmQgY2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1BDRF9SRVNVTUVfQ0JfSUQgVVNCIFBDRCBSZXN1bWUgY2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1BDRF9DT05ORUNUX0NCX0lEIFVTQiBQQ0QgQ29ubmVjdCBjYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUENEX0RJU0NPTk5FQ1RfQ0JfSUQgT1RHIFBDRCBEaXNjb25uZWN0IGNhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9QQ0RfRElTQ09OTkVDVF9DQl9JRCBVU0IgUENEIERpc2Nvbm5lY3QgY2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1BDRF9NU1BJTklUX0NCX0lEIE1zcERlSW5pdCBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUENEX01TUERFSU5JVF9DQl9JRCBNc3BEZUluaXQgY2FsbGJhY2sgSUQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTkxMSw3ICs5MTYsNyBAQAogICB1aW50MzJfdCBlcGludDsKICAgdWludDMyX3QgZXBudW07CiAgIHVpbnQzMl90IGZpZm9lbXB0eW1zazsKLSAgdWludDMyX3QgdGVtcDsKKyAgdWludDMyX3QgUmVnVmFsOwogCiAgIC8qIGVuc3VyZSB0aGF0IHdlIGFyZSBpbiBkZXZpY2UgbW9kZSAqLwogICBpZiAoVVNCX0dldE1vZGUoaHBjZC0+SW5zdGFuY2UpID09IFVTQl9PVEdfTU9ERV9ERVZJQ0UpCkBAIC05MjIsNiArOTI3LDkgQEAKICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICAvKiBzdG9yZSBjdXJyZW50IGZyYW1lIG51bWJlciAqLworICAgIGhwY2QtPkZyYW1lTnVtYmVyID0gKFVTQnhfREVWSUNFLT5EU1RTICYgVVNCX09UR19EU1RTX0ZOU09GX01zaykgPj4gVVNCX09UR19EU1RTX0ZOU09GX1BvczsKKwogICAgIGlmIChfX0hBTF9QQ0RfR0VUX0ZMQUcoaHBjZCwgVVNCX09UR19HSU5UU1RTX01NSVMpKQogICAgIHsKICAgICAgIC8qIGluY29ycmVjdCBtb2RlLCBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0ICovCkBAIC05MzMsMzAgKzk0MSwzMSBAQAogICAgIHsKICAgICAgIFVTQl9NQVNLX0lOVEVSUlVQVChocGNkLT5JbnN0YW5jZSwgVVNCX09UR19HSU5UU1RTX1JYRkxWTCk7CiAKLSAgICAgIHRlbXAgPSBVU0J4LT5HUlhTVFNQOworICAgICAgUmVnVmFsID0gVVNCeC0+R1JYU1RTUDsKIAotICAgICAgZXAgPSAmaHBjZC0+T1VUX2VwW3RlbXAgJiBVU0JfT1RHX0dSWFNUU1BfRVBOVU1dOworICAgICAgZXAgPSAmaHBjZC0+T1VUX2VwW1JlZ1ZhbCAmIFVTQl9PVEdfR1JYU1RTUF9FUE5VTV07CiAKLSAgICAgIGlmICgoKHRlbXAgJiBVU0JfT1RHX0dSWFNUU1BfUEtUU1RTKSA+PiAxNykgPT0gIFNUU19EQVRBX1VQRFQpCisgICAgICBpZiAoKChSZWdWYWwgJiBVU0JfT1RHX0dSWFNUU1BfUEtUU1RTKSA+PiAxNykgPT0gIFNUU19EQVRBX1VQRFQpCiAgICAgICB7Ci0gICAgICAgIGlmICgodGVtcCAmIFVTQl9PVEdfR1JYU1RTUF9CQ05UKSAhPSAwVSkKKyAgICAgICAgaWYgKChSZWdWYWwgJiBVU0JfT1RHX0dSWFNUU1BfQkNOVCkgIT0gMFUpCiAgICAgICAgIHsKICAgICAgICAgICAodm9pZClVU0JfUmVhZFBhY2tldChVU0J4LCBlcC0+eGZlcl9idWZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdCkoKHRlbXAgJiBVU0JfT1RHX0dSWFNUU1BfQkNOVCkgPj4gNCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdCkoKFJlZ1ZhbCAmIFVTQl9PVEdfR1JYU1RTUF9CQ05UKSA+PiA0KSk7CiAKLSAgICAgICAgICBlcC0+eGZlcl9idWZmICs9ICh0ZW1wICYgVVNCX09UR19HUlhTVFNQX0JDTlQpID4+IDQ7Ci0gICAgICAgICAgZXAtPnhmZXJfY291bnQgKz0gKHRlbXAgJiBVU0JfT1RHX0dSWFNUU1BfQkNOVCkgPj4gNDsKKyAgICAgICAgICBlcC0+eGZlcl9idWZmICs9IChSZWdWYWwgJiBVU0JfT1RHX0dSWFNUU1BfQkNOVCkgPj4gNDsKKyAgICAgICAgICBlcC0+eGZlcl9jb3VudCArPSAoUmVnVmFsICYgVVNCX09UR19HUlhTVFNQX0JDTlQpID4+IDQ7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCgodGVtcCAmIFVTQl9PVEdfR1JYU1RTUF9QS1RTVFMpID4+IDE3KSA9PSAgU1RTX1NFVFVQX1VQRFQpCisgICAgICBlbHNlIGlmICgoKFJlZ1ZhbCAmIFVTQl9PVEdfR1JYU1RTUF9QS1RTVFMpID4+IDE3KSA9PSBTVFNfU0VUVVBfVVBEVCkKICAgICAgIHsKICAgICAgICAgKHZvaWQpVVNCX1JlYWRQYWNrZXQoVVNCeCwgKHVpbnQ4X3QgKilocGNkLT5TZXR1cCwgOFUpOwotICAgICAgICBlcC0+eGZlcl9jb3VudCArPSAodGVtcCAmIFVTQl9PVEdfR1JYU1RTUF9CQ05UKSA+PiA0OworICAgICAgICBlcC0+eGZlcl9jb3VudCArPSAoUmVnVmFsICYgVVNCX09UR19HUlhTVFNQX0JDTlQpID4+IDQ7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgIC8qIC4uLiAqLwogICAgICAgfQorCiAgICAgICBVU0JfVU5NQVNLX0lOVEVSUlVQVChocGNkLT5JbnN0YW5jZSwgVVNCX09UR19HSU5UU1RTX1JYRkxWTCk7CiAgICAgfQogCkBAIC05OTEsNiArMTAwMCwzMCBAQAogICAgICAgICAgICAgQ0xFQVJfT1VUX0VQX0lOVFIoZXBudW0sIFVTQl9PVEdfRE9FUElOVF9PVEVQRElTKTsKICAgICAgICAgICB9CiAKKyAgICAgICAgICAvKiBDbGVhciBPVVQgRW5kcG9pbnQgZGlzYWJsZSBpbnRlcnJ1cHQgKi8KKyAgICAgICAgICBpZiAoKGVwaW50ICYgVVNCX09UR19ET0VQSU5UX0VQRElTRCkgPT0gVVNCX09UR19ET0VQSU5UX0VQRElTRCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoKFVTQngtPkdJTlRTVFMgJiBVU0JfT1RHX0dJTlRTVFNfQk9VVE5BS0VGRikgPT0gVVNCX09UR19HSU5UU1RTX0JPVVROQUtFRkYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFVTQnhfREVWSUNFLT5EQ1RMIHw9IFVTQl9PVEdfRENUTF9DR09OQUs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVwID0gJmhwY2QtPk9VVF9lcFtlcG51bV07CisKKyAgICAgICAgICAgIGlmIChlcC0+aXNfaXNvX2luY29tcGxldGUgPT0gMVUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVwLT5pc19pc29faW5jb21wbGV0ZSA9IDBVOworCisjaWYgKFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgICAgICAgICAgICAgaHBjZC0+SVNPT1VUSW5jb21wbGV0ZUNhbGxiYWNrKGhwY2QsICh1aW50OF90KWVwbnVtKTsKKyNlbHNlCisgICAgICAgICAgICAgIEhBTF9QQ0RfSVNPT1VUSW5jb21wbGV0ZUNhbGxiYWNrKGhwY2QsICh1aW50OF90KWVwbnVtKTsKKyNlbmRpZiAvKiBVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ0xFQVJfT1VUX0VQX0lOVFIoZXBudW0sIFVTQl9PVEdfRE9FUElOVF9FUERJU0QpOworICAgICAgICAgIH0KKwogICAgICAgICAgIC8qIENsZWFyIFN0YXR1cyBQaGFzZSBSZWNlaXZlZCBpbnRlcnJ1cHQgKi8KICAgICAgICAgICBpZiAoKGVwaW50ICYgVVNCX09UR19ET0VQSU5UX09URVBTUFIpID09IFVTQl9PVEdfRE9FUElOVF9PVEVQU1BSKQogICAgICAgICAgIHsKQEAgLTEwNDksNiArMTA4MiwyMCBAQAogICAgICAgICAgIGlmICgoZXBpbnQgJiBVU0JfT1RHX0RJRVBJTlRfRVBESVNEKSA9PSBVU0JfT1RHX0RJRVBJTlRfRVBESVNEKQogICAgICAgICAgIHsKICAgICAgICAgICAgICh2b2lkKVVTQl9GbHVzaFR4RmlmbyhVU0J4LCBlcG51bSk7CisKKyAgICAgICAgICAgIGVwID0gJmhwY2QtPklOX2VwW2VwbnVtXTsKKworICAgICAgICAgICAgaWYgKGVwLT5pc19pc29faW5jb21wbGV0ZSA9PSAxVSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXAtPmlzX2lzb19pbmNvbXBsZXRlID0gMFU7CisKKyNpZiAoVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQorICAgICAgICAgICAgICBocGNkLT5JU09JTkluY29tcGxldGVDYWxsYmFjayhocGNkLCAodWludDhfdCllcG51bSk7CisjZWxzZQorICAgICAgICAgICAgICBIQUxfUENEX0lTT0lOSW5jb21wbGV0ZUNhbGxiYWNrKGhwY2QsICh1aW50OF90KWVwbnVtKTsKKyNlbmRpZiAvKiBVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgQ0xFQVJfSU5fRVBfSU5UUihlcG51bSwgVVNCX09UR19ESUVQSU5UX0VQRElTRCk7CiAgICAgICAgICAgfQogICAgICAgICAgIGlmICgoZXBpbnQgJiBVU0JfT1RHX0RJRVBJTlRfVFhGRSkgPT0gVVNCX09UR19ESUVQSU5UX1RYRkUpCkBAIC0xMDk5LDcgKzExNDYsNiBAQAogICAgICAgewogICAgICAgICBVU0J4X0lORVAoaSktPkRJRVBJTlQgPSAweEZCN0ZVOwogICAgICAgICBVU0J4X0lORVAoaSktPkRJRVBDVEwgJj0gflVTQl9PVEdfRElFUENUTF9TVEFMTDsKLSAgICAgICAgVVNCeF9JTkVQKGkpLT5ESUVQQ1RMIHw9IFVTQl9PVEdfRElFUENUTF9TTkFLOwogICAgICAgICBVU0J4X09VVEVQKGkpLT5ET0VQSU5UID0gMHhGQjdGVTsKICAgICAgICAgVVNCeF9PVVRFUChpKS0+RE9FUENUTCAmPSB+VVNCX09UR19ET0VQQ1RMX1NUQUxMOwogICAgICAgICBVU0J4X09VVEVQKGkpLT5ET0VQQ1RMIHw9IFVTQl9PVEdfRE9FUENUTF9TTkFLOwpAQCAtMTE3MCwxOCArMTIxNiwzNyBAQAogICAgICAgX19IQUxfUENEX0NMRUFSX0ZMQUcoaHBjZCwgVVNCX09UR19HSU5UU1RTX1NPRik7CiAgICAgfQogCisgICAgLyogSGFuZGxlIEdsb2JhbCBPVVQgTkFLIGVmZmVjdGl2ZSBJbnRlcnJ1cHQgKi8KKyAgICBpZiAoX19IQUxfUENEX0dFVF9GTEFHKGhwY2QsIFVTQl9PVEdfR0lOVFNUU19CT1VUTkFLRUZGKSkKKyAgICB7CisgICAgICBVU0J4LT5HSU5UTVNLICY9IH5VU0JfT1RHX0dJTlRNU0tfR09OQUtFRkZNOworCisgICAgICBmb3IgKGVwbnVtID0gMVU7IGVwbnVtIDwgaHBjZC0+SW5pdC5kZXZfZW5kcG9pbnRzOyBlcG51bSsrKQorICAgICAgeworICAgICAgICBpZiAoaHBjZC0+T1VUX2VwW2VwbnVtXS5pc19pc29faW5jb21wbGV0ZSA9PSAxVSkKKyAgICAgICAgeworICAgICAgICAgIC8qIEFib3J0IGN1cnJlbnQgdHJhbnNhY3Rpb24gYW5kIGRpc2FibGUgdGhlIEVQICovCisgICAgICAgICAgKHZvaWQpSEFMX1BDRF9FUF9BYm9ydChocGNkLCAodWludDhfdCllcG51bSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKICAgICAvKiBIYW5kbGUgSW5jb21wbGV0ZSBJU08gSU4gSW50ZXJydXB0ICovCiAgICAgaWYgKF9fSEFMX1BDRF9HRVRfRkxBRyhocGNkLCBVU0JfT1RHX0dJTlRTVFNfSUlTT0lYRlIpKQogICAgIHsKLSAgICAgIC8qIEtlZXAgYXBwbGljYXRpb24gY2hlY2tpbmcgdGhlIGNvcnJlc3BvbmRpbmcgSXNvIElOIGVuZHBvaW50Ci0gICAgICBjYXVzaW5nIHRoZSBpbmNvbXBsZXRlIEludGVycnVwdCAqLwotICAgICAgZXBudW0gPSAwVTsKKyAgICAgIGZvciAoZXBudW0gPSAxVTsgZXBudW0gPCBocGNkLT5Jbml0LmRldl9lbmRwb2ludHM7IGVwbnVtKyspCisgICAgICB7CisgICAgICAgIFJlZ1ZhbCA9IFVTQnhfSU5FUChlcG51bSktPkRJRVBDVEw7CiAKLSNpZiAoVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQotICAgICAgaHBjZC0+SVNPSU5JbmNvbXBsZXRlQ2FsbGJhY2soaHBjZCwgKHVpbnQ4X3QpZXBudW0pOwotI2Vsc2UKLSAgICAgIEhBTF9QQ0RfSVNPSU5JbmNvbXBsZXRlQ2FsbGJhY2soaHBjZCwgKHVpbnQ4X3QpZXBudW0pOwotI2VuZGlmIC8qIFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICAgICAgICBpZiAoKGhwY2QtPklOX2VwW2VwbnVtXS50eXBlID09IEVQX1RZUEVfSVNPQykgJiYKKyAgICAgICAgICAgICgoUmVnVmFsICYgVVNCX09UR19ESUVQQ1RMX0VQRU5BKSA9PSBVU0JfT1RHX0RJRVBDVExfRVBFTkEpKQorICAgICAgICB7CisgICAgICAgICAgaHBjZC0+SU5fZXBbZXBudW1dLmlzX2lzb19pbmNvbXBsZXRlID0gMVU7CisKKyAgICAgICAgICAvKiBBYm9ydCBjdXJyZW50IHRyYW5zYWN0aW9uIGFuZCBkaXNhYmxlIHRoZSBFUCAqLworICAgICAgICAgICh2b2lkKUhBTF9QQ0RfRVBfQWJvcnQoaHBjZCwgKHVpbnQ4X3QpKGVwbnVtIHwgMHg4MFUpKTsKKyAgICAgICAgfQorICAgICAgfQogCiAgICAgICBfX0hBTF9QQ0RfQ0xFQVJfRkxBRyhocGNkLCBVU0JfT1RHX0dJTlRTVFNfSUlTT0lYRlIpOwogICAgIH0KQEAgLTExODksMTUgKzEyNTQsMjUgQEAKICAgICAvKiBIYW5kbGUgSW5jb21wbGV0ZSBJU08gT1VUIEludGVycnVwdCAqLwogICAgIGlmIChfX0hBTF9QQ0RfR0VUX0ZMQUcoaHBjZCwgVVNCX09UR19HSU5UU1RTX1BYRlJfSU5DT01QSVNPT1VUKSkKICAgICB7Ci0gICAgICAvKiBLZWVwIGFwcGxpY2F0aW9uIGNoZWNraW5nIHRoZSBjb3JyZXNwb25kaW5nIElzbyBPVVQgZW5kcG9pbnQKLSAgICAgIGNhdXNpbmcgdGhlIGluY29tcGxldGUgSW50ZXJydXB0ICovCi0gICAgICBlcG51bSA9IDBVOworICAgICAgZm9yIChlcG51bSA9IDFVOyBlcG51bSA8IGhwY2QtPkluaXQuZGV2X2VuZHBvaW50czsgZXBudW0rKykKKyAgICAgIHsKKyAgICAgICAgUmVnVmFsID0gVVNCeF9PVVRFUChlcG51bSktPkRPRVBDVEw7CiAKLSNpZiAoVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQotICAgICAgaHBjZC0+SVNPT1VUSW5jb21wbGV0ZUNhbGxiYWNrKGhwY2QsICh1aW50OF90KWVwbnVtKTsKLSNlbHNlCi0gICAgICBIQUxfUENEX0lTT09VVEluY29tcGxldGVDYWxsYmFjayhocGNkLCAodWludDhfdCllcG51bSk7Ci0jZW5kaWYgLyogVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgICAgICAgIGlmICgoaHBjZC0+T1VUX2VwW2VwbnVtXS50eXBlID09IEVQX1RZUEVfSVNPQykgJiYKKyAgICAgICAgICAgICgoUmVnVmFsICYgVVNCX09UR19ET0VQQ1RMX0VQRU5BKSA9PSBVU0JfT1RHX0RPRVBDVExfRVBFTkEpICYmCisgICAgICAgICAgICAoKFJlZ1ZhbCAmICgweDFVIDw8IDE2KSkgPT0gKGhwY2QtPkZyYW1lTnVtYmVyICYgMHgxVSkpKQorICAgICAgICB7CisgICAgICAgICAgaHBjZC0+T1VUX2VwW2VwbnVtXS5pc19pc29faW5jb21wbGV0ZSA9IDFVOworCisgICAgICAgICAgVVNCeC0+R0lOVE1TSyB8PSBVU0JfT1RHX0dJTlRNU0tfR09OQUtFRkZNOworCisgICAgICAgICAgaWYgKChVU0J4LT5HSU5UU1RTICYgVVNCX09UR19HSU5UU1RTX0JPVVROQUtFRkYpID09IDBVKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFVTQnhfREVWSUNFLT5EQ1RMIHw9IFVTQl9PVEdfRENUTF9TR09OQUs7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KIAogICAgICAgX19IQUxfUENEX0NMRUFSX0ZMQUcoaHBjZCwgVVNCX09UR19HSU5UU1RTX1BYRlJfSU5DT01QSVNPT1VUKTsKICAgICB9CkBAIC0xMjE3LDkgKzEyOTIsOSBAQAogICAgIC8qIEhhbmRsZSBEaXNjb25uZWN0aW9uIGV2ZW50IEludGVycnVwdCAqLwogICAgIGlmIChfX0hBTF9QQ0RfR0VUX0ZMQUcoaHBjZCwgVVNCX09UR19HSU5UU1RTX09UR0lOVCkpCiAgICAgewotICAgICAgdGVtcCA9IGhwY2QtPkluc3RhbmNlLT5HT1RHSU5UOworICAgICAgUmVnVmFsID0gaHBjZC0+SW5zdGFuY2UtPkdPVEdJTlQ7CiAKLSAgICAgIGlmICgodGVtcCAmIFVTQl9PVEdfR09UR0lOVF9TRURFVCkgPT0gVVNCX09UR19HT1RHSU5UX1NFREVUKQorICAgICAgaWYgKChSZWdWYWwgJiBVU0JfT1RHX0dPVEdJTlRfU0VERVQpID09IFVTQl9PVEdfR09UR0lOVF9TRURFVCkKICAgICAgIHsKICNpZiAoVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgICAgICBocGNkLT5EaXNjb25uZWN0Q2FsbGJhY2soaHBjZCk7CkBAIC0xMjI3LDcgKzEzMDIsNyBAQAogICAgICAgICBIQUxfUENEX0Rpc2Nvbm5lY3RDYWxsYmFjayhocGNkKTsKICNlbmRpZiAvKiBVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgICAgIH0KLSAgICAgIGhwY2QtPkluc3RhbmNlLT5HT1RHSU5UIHw9IHRlbXA7CisgICAgICBocGNkLT5JbnN0YW5jZS0+R09UR0lOVCB8PSBSZWdWYWw7CiAgICAgfQogICB9CiB9CkBAIC0xMjUzLDE3ICsxMzI4LDIwIEBACiAgICovCiB2b2lkIEhBTF9QQ0RfSVJRSGFuZGxlcihQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCkKIHsKKyAgdWludDMyX3Qgd0lzdHIgPSBVU0JfUmVhZEludGVycnVwdHMoaHBjZC0+SW5zdGFuY2UpOwogICB1aW50MTZfdCBzdG9yZV9lcFs4XTsKICAgdWludDhfdCBpOwogCi0gIGlmIChfX0hBTF9QQ0RfR0VUX0ZMQUcoaHBjZCwgVVNCX0lTVFJfQ1RSKSkKKyAgaWYgKCh3SXN0ciAmIFVTQl9JU1RSX0NUUikgPT0gVVNCX0lTVFJfQ1RSKQogICB7CiAgICAgLyogc2VydmljaW5nIG9mIHRoZSBlbmRwb2ludCBjb3JyZWN0IHRyYW5zZmVyIGludGVycnVwdCAqLwogICAgIC8qIGNsZWFyIG9mIHRoZSBDVFIgZmxhZyBpbnRvIHRoZSBzdWIgKi8KICAgICAodm9pZClQQ0RfRVBfSVNSX0hhbmRsZXIoaHBjZCk7CisKKyAgICByZXR1cm47CiAgIH0KIAotICBpZiAoX19IQUxfUENEX0dFVF9GTEFHKGhwY2QsIFVTQl9JU1RSX1JFU0VUKSkKKyAgaWYgKCh3SXN0ciAmIFVTQl9JU1RSX1JFU0VUKSA9PSBVU0JfSVNUUl9SRVNFVCkKICAgewogICAgIF9fSEFMX1BDRF9DTEVBUl9GTEFHKGhwY2QsIFVTQl9JU1RSX1JFU0VUKTsKIApAQCAtMTI3NCwxOSArMTM1MiwyNSBAQAogI2VuZGlmIC8qIFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCiAgICAgKHZvaWQpSEFMX1BDRF9TZXRBZGRyZXNzKGhwY2QsIDBVKTsKKworICAgIHJldHVybjsKICAgfQogCi0gIGlmIChfX0hBTF9QQ0RfR0VUX0ZMQUcoaHBjZCwgVVNCX0lTVFJfUE1BT1ZSKSkKKyAgaWYgKCh3SXN0ciAmIFVTQl9JU1RSX1BNQU9WUikgPT0gVVNCX0lTVFJfUE1BT1ZSKQogICB7CiAgICAgX19IQUxfUENEX0NMRUFSX0ZMQUcoaHBjZCwgVVNCX0lTVFJfUE1BT1ZSKTsKKworICAgIHJldHVybjsKICAgfQogCi0gIGlmIChfX0hBTF9QQ0RfR0VUX0ZMQUcoaHBjZCwgVVNCX0lTVFJfRVJSKSkKKyAgaWYgKCh3SXN0ciAmIFVTQl9JU1RSX0VSUikgPT0gVVNCX0lTVFJfRVJSKQogICB7CiAgICAgX19IQUxfUENEX0NMRUFSX0ZMQUcoaHBjZCwgVVNCX0lTVFJfRVJSKTsKKworICAgIHJldHVybjsKICAgfQogCi0gIGlmIChfX0hBTF9QQ0RfR0VUX0ZMQUcoaHBjZCwgVVNCX0lTVFJfV0tVUCkpCisgIGlmICgod0lzdHIgJiBVU0JfSVNUUl9XS1VQKSA9PSBVU0JfSVNUUl9XS1VQKQogICB7CiAgICAgaHBjZC0+SW5zdGFuY2UtPkNOVFIgJj0gKHVpbnQxNl90KSB+KFVTQl9DTlRSX0xQX01PREUpOwogICAgIGhwY2QtPkluc3RhbmNlLT5DTlRSICY9ICh1aW50MTZfdCkgfihVU0JfQ05UUl9GU1VTUCk7CkBAIC0xMjk4LDEzICsxMzgyLDE1IEBACiAjZW5kaWYgLyogVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKICAgICBfX0hBTF9QQ0RfQ0xFQVJfRkxBRyhocGNkLCBVU0JfSVNUUl9XS1VQKTsKKworICAgIHJldHVybjsKICAgfQogCi0gIGlmIChfX0hBTF9QQ0RfR0VUX0ZMQUcoaHBjZCwgVVNCX0lTVFJfU1VTUCkpCisgIGlmICgod0lzdHIgJiBVU0JfSVNUUl9TVVNQKSA9PSBVU0JfSVNUUl9TVVNQKQogICB7CiAgICAgLyogV0E6IFRvIENsZWFyIFdha2V1cCBmbGFnIGlmIHJhaXNlZCB3aXRoIHN1c3BlbmQgc2lnbmFsICovCiAKLSAgICAvKiBTdG9yZSBFbmRwb2ludCByZWdpc3RlciAqLworICAgIC8qIFN0b3JlIEVuZHBvaW50IHJlZ2lzdGVycyAqLwogICAgIGZvciAoaSA9IDBVOyBpIDwgOFU7IGkrKykKICAgICB7CiAgICAgICBzdG9yZV9lcFtpXSA9IFBDRF9HRVRfRU5EUE9JTlQoaHBjZC0+SW5zdGFuY2UsIGkpOwpAQCAtMTM0Myw5ICsxNDI5LDExIEBACiAjZWxzZQogICAgIEhBTF9QQ0RfU3VzcGVuZENhbGxiYWNrKGhwY2QpOwogI2VuZGlmIC8qIFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyAqLworCisgICAgcmV0dXJuOwogICB9CiAKLSAgaWYgKF9fSEFMX1BDRF9HRVRfRkxBRyhocGNkLCBVU0JfSVNUUl9TT0YpKQorICBpZiAoKHdJc3RyICYgVVNCX0lTVFJfU09GKSA9PSBVU0JfSVNUUl9TT0YpCiAgIHsKICAgICBfX0hBTF9QQ0RfQ0xFQVJfRkxBRyhocGNkLCBVU0JfSVNUUl9TT0YpOwogCkBAIC0xMzU0LDEyICsxNDQyLDE2IEBACiAjZWxzZQogICAgIEhBTF9QQ0RfU09GQ2FsbGJhY2soaHBjZCk7CiAjZW5kaWYgLyogVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisKKyAgICByZXR1cm47CiAgIH0KIAotICBpZiAoX19IQUxfUENEX0dFVF9GTEFHKGhwY2QsIFVTQl9JU1RSX0VTT0YpKQorICBpZiAoKHdJc3RyICYgVVNCX0lTVFJfRVNPRikgPT0gVVNCX0lTVFJfRVNPRikKICAgewogICAgIC8qIGNsZWFyIEVTT0YgZmxhZyBpbiBJU1RSICovCiAgICAgX19IQUxfUENEX0NMRUFSX0ZMQUcoaHBjZCwgVVNCX0lTVFJfRVNPRik7CisKKyAgICByZXR1cm47CiAgIH0KIH0KIApAQCAtMTY0OSwxMSArMTc0MSwxNCBAQAogICBlcC0+bWF4cGFja2V0ID0gZXBfbXBzOwogICBlcC0+dHlwZSA9IGVwX3R5cGU7CiAKKyNpZiBkZWZpbmVkIChVU0JfT1RHX0ZTKQogICBpZiAoZXAtPmlzX2luICE9IDBVKQogICB7CiAgICAgLyogQXNzaWduIGEgVHggRklGTyAqLwogICAgIGVwLT50eF9maWZvX251bSA9IGVwLT5udW07CiAgIH0KKyNlbmRpZiAvKiBkZWZpbmVkIChVU0JfT1RHX0ZTKSAqLworCiAgIC8qIFNldCBpbml0aWFsIGRhdGEgUElELiAqLwogICBpZiAoZXBfdHlwZSA9PSBFUF9UWVBFX0JVTEspCiAgIHsKQEAgLTE2ODcsNyArMTc4Miw3IEBACiAgICAgZXAgPSAmaHBjZC0+T1VUX2VwW2VwX2FkZHIgJiBFUF9BRERSX01TS107CiAgICAgZXAtPmlzX2luID0gMFU7CiAgIH0KLSAgZXAtPm51bSAgID0gZXBfYWRkciAmIEVQX0FERFJfTVNLOworICBlcC0+bnVtID0gZXBfYWRkciAmIEVQX0FERFJfTVNLOwogCiAgIF9fSEFMX0xPQ0soaHBjZCk7CiAgICh2b2lkKVVTQl9EZWFjdGl2YXRlRW5kcG9pbnQoaHBjZC0+SW5zdGFuY2UsIGVwKTsKQEAgLTE3MTcsMTQgKzE4MTIsNyBAQAogICBlcC0+aXNfaW4gPSAwVTsKICAgZXAtPm51bSA9IGVwX2FkZHIgJiBFUF9BRERSX01TSzsKIAotICBpZiAoKGVwX2FkZHIgJiBFUF9BRERSX01TSykgPT0gMFUpCi0gIHsKLSAgICAodm9pZClVU0JfRVAwU3RhcnRYZmVyKGhwY2QtPkluc3RhbmNlLCBlcCk7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgKHZvaWQpVVNCX0VQU3RhcnRYZmVyKGhwY2QtPkluc3RhbmNlLCBlcCk7Ci0gIH0KKyAgKHZvaWQpVVNCX0VQU3RhcnRYZmVyKGhwY2QtPkluc3RhbmNlLCBlcCk7CiAKICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTE3MzUsNyArMTgyMyw3IEBACiAgICogQHBhcmFtICBlcF9hZGRyIGVuZHBvaW50IGFkZHJlc3MKICAgKiBAcmV0dmFsIERhdGEgU2l6ZQogICAqLwotdWludDMyX3QgSEFMX1BDRF9FUF9HZXRSeENvdW50KFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIpCit1aW50MzJfdCBIQUxfUENEX0VQX0dldFJ4Q291bnQoUENEX0hhbmRsZVR5cGVEZWYgY29uc3QgKmhwY2QsIHVpbnQ4X3QgZXBfYWRkcikKIHsKICAgcmV0dXJuIGhwY2QtPk9VVF9lcFtlcF9hZGRyICYgRVBfQUREUl9NU0tdLnhmZXJfY291bnQ7CiB9CkBAIC0xNzY0LDE0ICsxODUyLDcgQEAKICAgZXAtPmlzX2luID0gMVU7CiAgIGVwLT5udW0gPSBlcF9hZGRyICYgRVBfQUREUl9NU0s7CiAKLSAgaWYgKChlcF9hZGRyICYgRVBfQUREUl9NU0spID09IDBVKQotICB7Ci0gICAgKHZvaWQpVVNCX0VQMFN0YXJ0WGZlcihocGNkLT5JbnN0YW5jZSwgZXApOwotICB9Ci0gIGVsc2UKLSAgewotICAgICh2b2lkKVVTQl9FUFN0YXJ0WGZlcihocGNkLT5JbnN0YW5jZSwgZXApOwotICB9CisgICh2b2lkKVVTQl9FUFN0YXJ0WGZlcihocGNkLT5JbnN0YW5jZSwgZXApOwogCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0xOTQ5LDcgKzIwMzAsNyBAQAogICAqIEBwYXJhbSAgaHBjZCBQQ0QgaGFuZGxlCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KLVBDRF9TdGF0ZVR5cGVEZWYgSEFMX1BDRF9HZXRTdGF0ZShQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCkKK1BDRF9TdGF0ZVR5cGVEZWYgSEFMX1BDRF9HZXRTdGF0ZShQQ0RfSGFuZGxlVHlwZURlZiBjb25zdCAqaHBjZCkKIHsKICAgcmV0dXJuIGhwY2QtPlN0YXRlOwogfQpAQCAtMjExMiw5ICsyMTkzLDE2IEBACiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgUENEX0VQX0lTUl9IYW5kbGVyKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKQogewogICBQQ0RfRVBUeXBlRGVmICplcDsKLSAgdWludDE2X3QgY291bnQsIHdJc3RyLCB3RVBWYWwsIFR4Qnl0ZU5icmU7CisgIHVpbnQxNl90IGNvdW50OworICB1aW50MTZfdCB3SXN0cjsKKyAgdWludDE2X3Qgd0VQVmFsOworICB1aW50MTZfdCBUeFBjdFNpemU7CiAgIHVpbnQ4X3QgZXBpbmRleDsKIAorI2lmIChVU0VfVVNCX0RPVUJMRV9CVUZGRVIgIT0gMVUpCisgIGNvdW50ID0gMFU7CisjZW5kaWYgLyogVVNFX1VTQl9ET1VCTEVfQlVGRkVSICovCisKICAgLyogc3RheSBpbiBsb29wIHdoaWxlIHBlbmRpbmcgaW50ZXJydXB0cyAqLwogICB3aGlsZSAoKGhwY2QtPkluc3RhbmNlLT5JU1RSICYgVVNCX0lTVFJfQ1RSKSAhPSAwVSkKICAgewpAQCAtMjIwMiw3ICsyMjkwLDkgQEAKICNlbmRpZiAvKiBVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgICAgICAgICB9CiAKLSAgICAgICAgICBpZiAoKFBDRF9HRVRfRU5EUE9JTlQoaHBjZC0+SW5zdGFuY2UsIFBDRF9FTkRQMCkgJiBVU0JfRVBfU0VUVVApID09IDBVKQorICAgICAgICAgIHdFUFZhbCA9ICh1aW50MTZfdClQQ0RfR0VUX0VORFBPSU5UKGhwY2QtPkluc3RhbmNlLCBQQ0RfRU5EUDApOworCisgICAgICAgICAgaWYgKCgod0VQVmFsICYgVVNCX0VQX1NFVFVQKSA9PSAwVSkgJiYgKCh3RVBWYWwgJiBVU0JfRVBfUlhfU1RSWCkgIT0gVVNCX0VQX1JYX1ZBTElEKSkKICAgICAgICAgICB7CiAgICAgICAgICAgICBQQ0RfU0VUX0VQX1JYX0NOVChocGNkLT5JbnN0YW5jZSwgUENEX0VORFAwLCBlcC0+bWF4cGFja2V0KTsKICAgICAgICAgICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKGhwY2QtPkluc3RhbmNlLCBQQ0RfRU5EUDAsIFVTQl9FUF9SWF9WQUxJRCk7CkBAIC0yMjMyLDYgKzIzMjIsNyBAQAogICAgICAgICAgICAgVVNCX1JlYWRQTUEoaHBjZC0+SW5zdGFuY2UsIGVwLT54ZmVyX2J1ZmYsIGVwLT5wbWFhZHJlc3MsIGNvdW50KTsKICAgICAgICAgICB9CiAgICAgICAgIH0KKyNpZiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAvKiBtYW5hZ2UgZG91YmxlIGJ1ZmZlciBidWxrIG91dCAqLwpAQCAtMjI0Miw3ICsyMzMzLDcgQEAKICAgICAgICAgICBlbHNlIC8qIG1hbmFnZSBkb3VibGUgYnVmZmVyIGlzbyBvdXQgKi8KICAgICAgICAgICB7CiAgICAgICAgICAgICAvKiBmcmVlIEVQIE9VVCBCdWZmZXIgKi8KLSAgICAgICAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMFUpOworICAgICAgICAgICAgUENEX0ZSRUVfVVNFUl9CVUZGRVIoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0sIDBVKTsKIAogICAgICAgICAgICAgaWYgKChQQ0RfR0VUX0VORFBPSU5UKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtKSAmIFVTQl9FUF9EVE9HX1JYKSAhPSAwVSkKICAgICAgICAgICAgIHsKQEAgLTIyNjYsNiArMjM1Nyw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CisjZW5kaWYgLyogKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkgKi8KKwogICAgICAgICAvKiBtdWx0aS1wYWNrZXQgb24gdGhlIE5PTiBjb250cm9sIE9VVCBlbmRwb2ludCAqLwogICAgICAgICBlcC0+eGZlcl9jb3VudCArPSBjb3VudDsKICAgICAgICAgZXAtPnhmZXJfYnVmZiArPSBjb3VudDsKQEAgLTIyODEsOSArMjM3NCw4IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgKHZvaWQpIFVTQl9FUFN0YXJ0WGZlcihocGNkLT5JbnN0YW5jZSwgZXApOworICAgICAgICAgICh2b2lkKVVTQl9FUFN0YXJ0WGZlcihocGNkLT5JbnN0YW5jZSwgZXApOwogICAgICAgICB9Ci0KICAgICAgIH0KIAogICAgICAgaWYgKCh3RVBWYWwgJiBVU0JfRVBfQ1RSX1RYKSAhPSAwVSkKQEAgLTIyOTMsNDQgKzIzODUsNzMgQEAKICAgICAgICAgLyogY2xlYXIgaW50IGZsYWcgKi8KICAgICAgICAgUENEX0NMRUFSX1RYX0VQX0NUUihocGNkLT5JbnN0YW5jZSwgZXBpbmRleCk7CiAKLSAgICAgICAgLyogTWFuYWdlIGFsbCBub24gYnVsay9pc29jIHRyYW5zYWN0aW9uIEJ1bGsgU2luZ2xlIEJ1ZmZlciBUcmFuc2FjdGlvbiAqLwotICAgICAgICBpZiAoKGVwLT50eXBlID09IEVQX1RZUEVfSU5UUikgfHwgKGVwLT50eXBlID09IEVQX1RZUEVfQ1RSTCkgfHwKLSAgICAgICAgICAgKChlcC0+dHlwZSA9PSBFUF9UWVBFX0JVTEspICYmICgod0VQVmFsICYgVVNCX0VQX0tJTkQpID09IDBVKSkpCisgICAgICAgIGlmIChlcC0+dHlwZSA9PSBFUF9UWVBFX0lTT0MpCiAgICAgICAgIHsKLSAgICAgICAgICAvKiBtdWx0aS1wYWNrZXQgb24gdGhlIE5PTiBjb250cm9sIElOIGVuZHBvaW50ICovCi0gICAgICAgICAgVHhCeXRlTmJyZSA9ICh1aW50MTZfdClQQ0RfR0VUX0VQX1RYX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSk7CisgICAgICAgICAgZXAtPnhmZXJfbGVuID0gMFU7CiAKLSAgICAgICAgICBpZiAoZXAtPnhmZXJfbGVuID4gVHhCeXRlTmJyZSkKKyNpZiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKQorICAgICAgICAgIGlmIChlcC0+ZG91YmxlYnVmZmVyICE9IDBVKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIGVwLT54ZmVyX2xlbiAtPSBUeEJ5dGVOYnJlOworICAgICAgICAgICAgaWYgKCh3RVBWYWwgJiBVU0JfRVBfRFRPR19UWCkgIT0gMFUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFBDRF9TRVRfRVBfREJVRjBfQ05UKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCBlcC0+aXNfaW4sIDBVKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgUENEX1NFVF9FUF9EQlVGMV9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0sIGVwLT5pc19pbiwgMFUpOworICAgICAgICAgICAgfQogICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgZXAtPnhmZXJfbGVuID0gMFU7Ci0gICAgICAgICAgfQorI2VuZGlmIC8qIChVU0VfVVNCX0RPVUJMRV9CVUZGRVIgPT0gMVUpICovCiAKLSAgICAgICAgICAvKiBaZXJvIExlbmd0aCBQYWNrZXQ/ICovCi0gICAgICAgICAgaWYgKGVwLT54ZmVyX2xlbiA9PSAwVSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBUWCBDT01QTEVURSAqLworICAgICAgICAgIC8qIFRYIENPTVBMRVRFICovCiAjaWYgKFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKLSAgICAgICAgICAgIGhwY2QtPkRhdGFJblN0YWdlQ2FsbGJhY2soaHBjZCwgZXAtPm51bSk7CisgICAgICAgICAgaHBjZC0+RGF0YUluU3RhZ2VDYWxsYmFjayhocGNkLCBlcC0+bnVtKTsKICNlbHNlCi0gICAgICAgICAgICBIQUxfUENEX0RhdGFJblN0YWdlQ2FsbGJhY2soaHBjZCwgZXAtPm51bSk7CisgICAgICAgICAgSEFMX1BDRF9EYXRhSW5TdGFnZUNhbGxiYWNrKGhwY2QsIGVwLT5udW0pOwogI2VuZGlmIC8qIFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyAqLwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgLyogVHJhbnNmZXIgaXMgbm90IHlldCBEb25lICovCi0gICAgICAgICAgICBlcC0+eGZlcl9idWZmICs9IFR4Qnl0ZU5icmU7Ci0gICAgICAgICAgICBlcC0+eGZlcl9jb3VudCArPSBUeEJ5dGVOYnJlOwotICAgICAgICAgICAgKHZvaWQpVVNCX0VQU3RhcnRYZmVyKGhwY2QtPkluc3RhbmNlLCBlcCk7Ci0gICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIC8qIERvdWJsZSBCdWZmZXIgSXNvL2J1bGsgSU4gKGJ1bGsgdHJhbnNmZXIgTGVuID4gRXBfTXBzKSAqLwogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAodm9pZClIQUxfUENEX0VQX0RCX1RyYW5zbWl0KGhwY2QsIGVwLCB3RVBWYWwpOworICAgICAgICAgIC8qIE1hbmFnZSBTaW5nbGUgQnVmZmVyIFRyYW5zYWN0aW9uICovCisgICAgICAgICAgaWYgKCh3RVBWYWwgJiBVU0JfRVBfS0lORCkgPT0gMFUpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogbXVsdGktcGFja2V0IG9uIHRoZSBOT04gY29udHJvbCBJTiBlbmRwb2ludCAqLworICAgICAgICAgICAgVHhQY3RTaXplID0gKHVpbnQxNl90KVBDRF9HRVRfRVBfVFhfQ05UKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtKTsKKworICAgICAgICAgICAgaWYgKGVwLT54ZmVyX2xlbiA+IFR4UGN0U2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXAtPnhmZXJfbGVuIC09IFR4UGN0U2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXAtPnhmZXJfbGVuID0gMFU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFplcm8gTGVuZ3RoIFBhY2tldD8gKi8KKyAgICAgICAgICAgIGlmIChlcC0+eGZlcl9sZW4gPT0gMFUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIFRYIENPTVBMRVRFICovCisjaWYgKFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgICAgICAgICAgICAgaHBjZC0+RGF0YUluU3RhZ2VDYWxsYmFjayhocGNkLCBlcC0+bnVtKTsKKyNlbHNlCisgICAgICAgICAgICAgIEhBTF9QQ0RfRGF0YUluU3RhZ2VDYWxsYmFjayhocGNkLCBlcC0+bnVtKTsKKyNlbmRpZiAvKiBVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogVHJhbnNmZXIgaXMgbm90IHlldCBEb25lICovCisgICAgICAgICAgICAgIGVwLT54ZmVyX2J1ZmYgKz0gVHhQY3RTaXplOworICAgICAgICAgICAgICBlcC0+eGZlcl9jb3VudCArPSBUeFBjdFNpemU7CisgICAgICAgICAgICAgICh2b2lkKVVTQl9FUFN0YXJ0WGZlcihocGNkLT5JbnN0YW5jZSwgZXApOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyNpZiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKQorICAgICAgICAgIC8qIERvdWJsZSBCdWZmZXIgYnVsayBJTiAoYnVsayB0cmFuc2ZlciBMZW4gPiBFcF9NcHMpICovCisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgICh2b2lkKUhBTF9QQ0RfRVBfREJfVHJhbnNtaXQoaHBjZCwgZXAsIHdFUFZhbCk7CisgICAgICAgICAgfQorI2VuZGlmIC8qIChVU0VfVVNCX0RPVUJMRV9CVUZGRVIgPT0gMVUpICovCiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC0yMzQwLDYgKzI0NjEsNyBAQAogfQogCiAKKyNpZiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKQogLyoqCiAgICogQGJyaWVmICBNYW5hZ2UgZG91YmxlIGJ1ZmZlciBidWxrIG91dCB0cmFuc2FjdGlvbiBmcm9tIElTUgogICAqIEBwYXJhbSAgaHBjZCBQQ0QgaGFuZGxlCkBAIC0yMzczLDEwICsyNDk1LDEwIEBACiAgICAgICBQQ0RfU0VUX0VQX1JYX1NUQVRVUyhocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgVVNCX0VQX1JYX05BSyk7CiAgICAgfQogCi0gICAgLyogQ2hlY2sgaWYgQnVmZmVyMSBpcyBpbiBibG9ja2VkIHNhdGUgd2hpY2ggcmVxdWlyZXMgdG8gdG9nZ2xlICovCisgICAgLyogQ2hlY2sgaWYgQnVmZmVyMSBpcyBpbiBibG9ja2VkIHN0YXRlIHdoaWNoIHJlcXVpcmVzIHRvIHRvZ2dsZSAqLwogICAgIGlmICgod0VQVmFsICYgVVNCX0VQX0RUT0dfVFgpICE9IDBVKQogICAgIHsKLSAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMFUpOworICAgICAgUENEX0ZSRUVfVVNFUl9CVUZGRVIoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0sIDBVKTsKICAgICB9CiAKICAgICBpZiAoY291bnQgIT0gMFUpCkBAIC0yNDA4LDcgKzI1MzAsNyBAQAogICAgIC8qTmVlZCB0byBGcmVlVXNlciBCdWZmZXIqLwogICAgIGlmICgod0VQVmFsICYgVVNCX0VQX0RUT0dfVFgpID09IDBVKQogICAgIHsKLSAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMFUpOworICAgICAgUENEX0ZSRUVfVVNFUl9CVUZGRVIoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0sIDBVKTsKICAgICB9CiAKICAgICBpZiAoY291bnQgIT0gMFUpCkBAIC0yNDMyLDIyICsyNTU0LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0RfRVBUeXBlRGVmICplcCwgdWludDE2X3Qgd0VQVmFsKQogewogICB1aW50MzJfdCBsZW47Ci0gIHVpbnQxNl90IFR4Qnl0ZU5icmU7CisgIHVpbnQxNl90IFR4UGN0U2l6ZTsKIAogICAvKiBEYXRhIEJ1ZmZlcjAgQUNLIHJlY2VpdmVkICovCiAgIGlmICgod0VQVmFsICYgVVNCX0VQX0RUT0dfVFgpICE9IDBVKQogICB7CiAgICAgLyogbXVsdGktcGFja2V0IG9uIHRoZSBOT04gY29udHJvbCBJTiBlbmRwb2ludCAqLwotICAgIFR4Qnl0ZU5icmUgPSAodWludDE2X3QpUENEX0dFVF9FUF9EQlVGMF9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0pOworICAgIFR4UGN0U2l6ZSA9ICh1aW50MTZfdClQQ0RfR0VUX0VQX0RCVUYwX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSk7CiAKLSAgICBpZiAoZXAtPnhmZXJfbGVuID4gVHhCeXRlTmJyZSkKKyAgICBpZiAoZXAtPnhmZXJfbGVuID4gVHhQY3RTaXplKQogICAgIHsKLSAgICAgIGVwLT54ZmVyX2xlbiAtPSBUeEJ5dGVOYnJlOworICAgICAgZXAtPnhmZXJfbGVuIC09IFR4UGN0U2l6ZTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgIGVwLT54ZmVyX2xlbiA9IDBVOwogICAgIH0KKwogICAgIC8qIFRyYW5zZmVyIGlzIGNvbXBsZXRlZCAqLwogICAgIGlmIChlcC0+eGZlcl9sZW4gPT0gMFUpCiAgICAgewpAQCAtMjQ2Myw3ICsyNTg2LDcgQEAKIAogICAgICAgaWYgKCh3RVBWYWwgJiBVU0JfRVBfRFRPR19SWCkgIT0gMFUpCiAgICAgICB7Ci0gICAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMVUpOworICAgICAgICBQQ0RfRlJFRV9VU0VSX0JVRkZFUihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMVUpOwogICAgICAgfQogICAgIH0KICAgICBlbHNlIC8qIFRyYW5zZmVyIGlzIG5vdCB5ZXQgRG9uZSAqLwpAQCAtMjQ3MSwxNCArMjU5NCwxNCBAQAogICAgICAgLyogbmVlZCB0byBGcmVlIFVTQiBCdWZmICovCiAgICAgICBpZiAoKHdFUFZhbCAmIFVTQl9FUF9EVE9HX1JYKSAhPSAwVSkKICAgICAgIHsKLSAgICAgICAgUENEX0ZyZWVVc2VyQnVmZmVyKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCAxVSk7CisgICAgICAgIFBDRF9GUkVFX1VTRVJfQlVGRkVSKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCAxVSk7CiAgICAgICB9CiAKICAgICAgIC8qIFN0aWxsIHRoZXJlIGlzIGRhdGEgdG8gRmlsbCBpbiB0aGUgbmV4dCBCdWZmZXIgKi8KICAgICAgIGlmIChlcC0+eGZlcl9maWxsX2RiID09IDFVKQogICAgICAgewotICAgICAgICBlcC0+eGZlcl9idWZmICs9IFR4Qnl0ZU5icmU7Ci0gICAgICAgIGVwLT54ZmVyX2NvdW50ICs9IFR4Qnl0ZU5icmU7CisgICAgICAgIGVwLT54ZmVyX2J1ZmYgKz0gVHhQY3RTaXplOworICAgICAgICBlcC0+eGZlcl9jb3VudCArPSBUeFBjdFNpemU7CiAKICAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSBsZW4gb2YgdGhlIG5ldyBidWZmZXIgdG8gZmlsbCAqLwogICAgICAgICBpZiAoZXAtPnhmZXJfbGVuX2RiID49IGVwLT5tYXhwYWNrZXQpCkBAIC0yNDg4LDcgKzI2MTEsNyBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGVwLT54ZmVyX2xlbl9kYiA9PSAwVSkKICAgICAgICAgewotICAgICAgICAgIGxlbiA9IFR4Qnl0ZU5icmU7CisgICAgICAgICAgbGVuID0gVHhQY3RTaXplOwogICAgICAgICAgIGVwLT54ZmVyX2ZpbGxfZGIgPSAwVTsKICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0yNTEwLDExICsyNjMzLDExIEBACiAgIGVsc2UgLyogRGF0YSBCdWZmZXIxIEFDSyByZWNlaXZlZCAqLwogICB7CiAgICAgLyogbXVsdGktcGFja2V0IG9uIHRoZSBOT04gY29udHJvbCBJTiBlbmRwb2ludCAqLwotICAgIFR4Qnl0ZU5icmUgPSAodWludDE2X3QpUENEX0dFVF9FUF9EQlVGMV9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0pOworICAgIFR4UGN0U2l6ZSA9ICh1aW50MTZfdClQQ0RfR0VUX0VQX0RCVUYxX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSk7CiAKLSAgICBpZiAoZXAtPnhmZXJfbGVuID49IFR4Qnl0ZU5icmUpCisgICAgaWYgKGVwLT54ZmVyX2xlbiA+PSBUeFBjdFNpemUpCiAgICAgewotICAgICAgZXAtPnhmZXJfbGVuIC09IFR4Qnl0ZU5icmU7CisgICAgICBlcC0+eGZlcl9sZW4gLT0gVHhQY3RTaXplOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtMjUzNyw3ICsyNjYwLDcgQEAKICAgICAgIC8qIG5lZWQgdG8gRnJlZSBVU0IgQnVmZiAqLwogICAgICAgaWYgKCh3RVBWYWwgJiBVU0JfRVBfRFRPR19SWCkgPT0gMFUpCiAgICAgICB7Ci0gICAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMVUpOworICAgICAgICBQQ0RfRlJFRV9VU0VSX0JVRkZFUihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMVUpOwogICAgICAgfQogICAgIH0KICAgICBlbHNlIC8qIFRyYW5zZmVyIGlzIG5vdCB5ZXQgRG9uZSAqLwpAQCAtMjU0NSwxNCArMjY2OCwxNCBAQAogICAgICAgLyogbmVlZCB0byBGcmVlIFVTQiBCdWZmICovCiAgICAgICBpZiAoKHdFUFZhbCAmIFVTQl9FUF9EVE9HX1JYKSA9PSAwVSkKICAgICAgIHsKLSAgICAgICAgUENEX0ZyZWVVc2VyQnVmZmVyKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCAxVSk7CisgICAgICAgIFBDRF9GUkVFX1VTRVJfQlVGRkVSKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCAxVSk7CiAgICAgICB9CiAKICAgICAgIC8qIFN0aWxsIHRoZXJlIGlzIGRhdGEgdG8gRmlsbCBpbiB0aGUgbmV4dCBCdWZmZXIgKi8KICAgICAgIGlmIChlcC0+eGZlcl9maWxsX2RiID09IDFVKQogICAgICAgewotICAgICAgICBlcC0+eGZlcl9idWZmICs9IFR4Qnl0ZU5icmU7Ci0gICAgICAgIGVwLT54ZmVyX2NvdW50ICs9IFR4Qnl0ZU5icmU7CisgICAgICAgIGVwLT54ZmVyX2J1ZmYgKz0gVHhQY3RTaXplOworICAgICAgICBlcC0+eGZlcl9jb3VudCArPSBUeFBjdFNpemU7CiAKICAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSBsZW4gb2YgdGhlIG5ldyBidWZmZXIgdG8gZmlsbCAqLwogICAgICAgICBpZiAoZXAtPnhmZXJfbGVuX2RiID49IGVwLT5tYXhwYWNrZXQpCkBAIC0yNTYyLDcgKzI2ODUsNyBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGVwLT54ZmVyX2xlbl9kYiA9PSAwVSkKICAgICAgICAgewotICAgICAgICAgIGxlbiA9IFR4Qnl0ZU5icmU7CisgICAgICAgICAgbGVuID0gVHhQY3RTaXplOwogICAgICAgICAgIGVwLT54ZmVyX2ZpbGxfZGIgPSAwVTsKICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0yNTg2LDYgKzI3MDksNyBAQAogCiAgIHJldHVybiBIQUxfT0s7CiB9CisjZW5kaWYgLyogKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkgKi8KIAogI2VuZGlmIC8qIGRlZmluZWQgKFVTQikgKi8KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfcGNkX2V4LmMgYi9TcmMvc3RtMzJmMXh4X2hhbF9wY2RfZXguYwppbmRleCBiZWE5NDk5Li4yZTVhMmEzIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2hhbF9wY2RfZXguYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF9wY2RfZXguYwpAQCAtMTU3LDYgKzE1Nyw3IEBACiAgICAgLyogQ29uZmlndXJlIHRoZSBQTUEgKi8KICAgICBlcC0+cG1hYWRyZXNzID0gKHVpbnQxNl90KXBtYWFkcmVzczsKICAgfQorI2lmIChVU0VfVVNCX0RPVUJMRV9CVUZGRVIgPT0gMVUpCiAgIGVsc2UgLyogVVNCX0RCTF9CVUYgKi8KICAgewogICAgIC8qIERvdWJsZSBCdWZmZXIgRW5kcG9pbnQgKi8KQEAgLTE2NSw2ICsxNjYsNyBAQAogICAgIGVwLT5wbWFhZGRyMCA9ICh1aW50MTZfdCkocG1hYWRyZXNzICYgMHhGRkZGVSk7CiAgICAgZXAtPnBtYWFkZHIxID0gKHVpbnQxNl90KSgocG1hYWRyZXNzICYgMHhGRkZGMDAwMFUpID4+IDE2KTsKICAgfQorI2VuZGlmIC8qIChVU0VfVVNCX0RPVUJMRV9CVUZGRVIgPT0gMVUpICovCiAKICAgcmV0dXJuIEhBTF9PSzsKIH0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYxeHhfaGFsX3JjYy5jIGIvU3JjL3N0bTMyZjF4eF9oYWxfcmNjLmMKaW5kZXggNDkxZTU5Yi4uZmU3NTE1YiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjF4eF9oYWxfcmNjLmMKKysrIGIvU3JjL3N0bTMyZjF4eF9oYWxfcmNjLmMKQEAgLTgsMTcgKzgsNiBAQAogICAqICAgICAgICAgICArIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCiAgICoKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICogQGF0dGVudGlvbgotICAqCi0gICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KLSAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgotICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgUkNDIHNwZWNpZmljIGZlYXR1cmVzICMjIyMjCkBAIC01Nyw2ICs0NiwxNSBAQAogCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTU1LDcgKzE1Myw3IEBACiAgICAgICAgICAgb24gQUhCIGJ1cyAoRE1BLCBHUElPLi4uKS4gQVBCMSAoUENMSzEpIGFuZCBBUEIyIChQQ0xLMikgY2xvY2tzIGFyZSBkZXJpdmVkCiAgICAgICAgICAgZnJvbSBBSEIgY2xvY2sgdGhyb3VnaCBjb25maWd1cmFibGUgcHJlc2NhbGVycyBhbmQgdXNlZCB0byBjbG9jawogICAgICAgICAgIHRoZSBwZXJpcGhlcmFscyBtYXBwZWQgb24gdGhlc2UgYnVzZXMuIFlvdSBjYW4gdXNlCi0gICAgICAgICAgIkByZWYgSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKSIgZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGZyZXF1ZW5jaWVzIG9mIHRoZXNlIGNsb2Nrcy4KKyAgICAgICAgICAiSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKSIgZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGZyZXF1ZW5jaWVzIG9mIHRoZXNlIGNsb2Nrcy4KIAogICAgICAgLUAtIEFsbCB0aGUgcGVyaXBoZXJhbCBjbG9ja3MgYXJlIGRlcml2ZWQgZnJvbSB0aGUgU3lzdGVtIGNsb2NrIChTWVNDTEspIGV4Y2VwdDoKICAgICAgICAgICAoK0ApIFJUQzogUlRDIGNsb2NrIGNhbiBiZSBkZXJpdmVkIGVpdGhlciBmcm9tIHRoZSBMU0ksIExTRSBvciBIU0UgY2xvY2sKQEAgLTEzOTksMyArMTM5Nyw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2hhbF9yY2NfZXguYyBiL1NyYy9zdG0zMmYxeHhfaGFsX3JjY19leC5jCmluZGV4IDQyMjY0MDMuLjdlNzg5ZDkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfaGFsX3JjY19leC5jCisrKyBiL1NyYy9zdG0zMmYxeHhfaGFsX3JjY19leC5jCkBAIC0xMywxMCArMTMsOSBAQAogICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCi0gICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKQEAgLTg1NywzICs4NTYsNSBAQAogLyoqCiAgICogQH0KICAgKi8KKworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2hhbF9ydGMuYyBiL1NyYy9zdG0zMmYxeHhfaGFsX3J0Yy5jCmluZGV4IGJhNWNjOGMuLmY4MDhjZTIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfaGFsX3J0Yy5jCisrKyBiL1NyYy9zdG0zMmYxeHhfaGFsX3J0Yy5jCkBAIC0xMzUsMTAgKzEzNSwxMCBAQAogICBbLi5dCiAgIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyB3aGVuIHNldCB0byAxCiAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCi0gIFVzZSBGdW5jdGlvbiBAcmVmIEhBTF9SVENfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGFuIGludGVycnVwdCBjYWxsYmFjay4KKyAgVXNlIEZ1bmN0aW9uIEhBTF9SVENfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGFuIGludGVycnVwdCBjYWxsYmFjay4KICAgCiAgIFsuLl0KLSAgRnVuY3Rpb24gQHJlZiBIQUxfUlRDX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKKyAgRnVuY3Rpb24gSEFMX1JUQ19SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgKCspIEFsYXJtQUV2ZW50Q2FsbGJhY2sgICAgICAgICAgOiBSVEMgQWxhcm0gQSBFdmVudCBjYWxsYmFjay4KICAgICAoKykgVGFtcGVyMUV2ZW50Q2FsbGJhY2sgICAgICAgICA6IFJUQyBUYW1wZXIgMSBFdmVudCBjYWxsYmFjay4KICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgICAgICAgICA6IFJUQyBNc3BJbml0IGNhbGxiYWNrLgpAQCAtMTQ4LDkgKzE0OCw5IEBACiAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAgIAogICBbLi5dCi0gIFVzZSBmdW5jdGlvbiBAcmVmIEhBTF9SVENfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAorICBVc2UgZnVuY3Rpb24gSEFMX1JUQ19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgIHdlYWsgZnVuY3Rpb24uCi0gIEByZWYgSEFMX1JUQ19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCisgIEhBTF9SVENfVW5SZWdpc3RlckNhbGxiYWNrKCkgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAogICBhbmQgdGhlIENhbGxiYWNrIElELgogICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBBbGFybUFFdmVudENhbGxiYWNrICAgICAgICAgIDogUlRDIEFsYXJtIEEgRXZlbnQgY2FsbGJhY2suCkBAIC0xNTgsMTMgKzE1OCwxMyBAQAogICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgICAgICAgIDogUlRDIE1zcEluaXQgY2FsbGJhY2suCiAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICAgICAgICAgOiBSVEMgTXNwRGVJbml0IGNhbGxiYWNrLgogICBbLi5dCi0gIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9SVENfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfUlRDX1NUQVRFX1JFU0VULAorICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX1JUQ19Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9SVENfU1RBVEVfUkVTRVQsCiAgIGFsbCBjYWxsYmFja3MgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIGZ1bmN0aW9ucyA6Ci0gIGV4YW1wbGUgQHJlZiBBbGFybUFFdmVudENhbGxiYWNrKCkuCisgIGV4YW1wbGUgQWxhcm1BRXZlbnRDYWxsYmFjaygpLgogICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCBhbmQgTXNwRGVJbml0IGNhbGxiYWNrcyB0aGF0IGFyZSByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgZnVuY3Rpb24KLSAgaW4gdGhlIEByZWYgSEFMX1JUQ19Jbml0KCkvQHJlZiBIQUxfUlRDX0RlSW5pdCgpIG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwKKyAgaW4gdGhlIEhBTF9SVENfSW5pdCgpL0hBTF9SVENfRGVJbml0KCkgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbAogICAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCi0gIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCBAcmVmIEhBTF9SVENfSW5pdCgpL0ByZWYgSEFMX1JUQ19EZUluaXQoKQorICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgSEFMX1JUQ19Jbml0KCkvSEFMX1JUQ19EZUluaXQoKQogICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpCiAgIFsuLl0KICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBIQUxfUlRDX1NUQVRFX1JFQURZIHN0YXRlIG9ubHkuCkBAIC0xNzIsOCArMTcyLDggQEAKICAgaW4gSEFMX1JUQ19TVEFURV9SRUFEWSBvciBIQUxfUlRDX1NUQVRFX1JFU0VUIHN0YXRlLAogICB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZCBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgogICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCi0gIHVzaW5nIEByZWYgSEFMX1JUQ19SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfUlRDX0RlSW5pdCgpCi0gIG9yIEByZWYgSEFMX1JUQ19Jbml0KCkgZnVuY3Rpb24uCisgIHVzaW5nIEhBTF9SVENfUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEhBTF9SVENfRGVJbml0KCkKKyAgb3IgSEFMX1JUQ19Jbml0KCkgZnVuY3Rpb24uCiAgIFsuLl0KICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgogICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgYW5kIGFsbCBjYWxsYmFja3MKQEAgLTU2OCw3ICs1NjgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFVucmVnaXN0ZXIgYW4gUlRDIENhbGxiYWNrCi0gICogICAgICAgICBSVEMgY2FsbGFiY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogICAgICAgICBSVEMgY2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHVucmVnaXN0ZXJlZAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTEzMjQsNyArMTMyNCw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgRGVhY3RpdmUgdGhlIHNwZWNpZmllZCBSVEMgQWxhcm0KKyAgKiBAYnJpZWYgIERlYWN0aXZhdGUgdGhlIHNwZWNpZmllZCBSVEMgQWxhcm0KICAgKiBAcGFyYW0gIGhydGMgICBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEBwYXJhbSAgQWxhcm06IFNwZWNpZmllcyB0aGUgQWxhcm0uCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2hhbF9ydGNfZXguYyBiL1NyYy9zdG0zMmYxeHhfaGFsX3J0Y19leC5jCmluZGV4IDMwODAxNTAuLjczOGVlMWYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfaGFsX3J0Y19leC5jCisrKyBiL1NyYy9zdG0zMmYxeHhfaGFsX3J0Y19leC5jCkBAIC0zMDMsNyArMzAzLDcgQEAKICAgICAgICAgICAgICAgICAgIyMjIyMgUlRDIFNlY29uZCBmdW5jdGlvbnMgIyMjIyMKICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSBbLi5dIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgaW1wbGVtZW50aW5nIHNlY29uZCBpbnRlcnVwdCBoYW5kbGVycworIFsuLl0gVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBpbXBsZW1lbnRpbmcgc2Vjb25kIGludGVycnVwdCBoYW5kbGVycwogCiBAZW5kdmVyYmF0aW0KICAgKiBAewpAQCAtMzI4LDcgKzMyOCw3IEBACiAKICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0JVU1k7CiAKLSAgLyogRW5hYmxlIFNlY29uZCBpbnRlcnVwdGlvbiAqLworICAvKiBFbmFibGUgU2Vjb25kIGludGVycnVwdGlvbiAqLwogICBfX0hBTF9SVENfU0VDT05EX0VOQUJMRV9JVChocnRjLCBSVENfSVRfU0VDKTsKIAogICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CkBAIC0zNTgsNyArMzU4LDcgQEAKIAogICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfQlVTWTsKIAotICAvKiBEZWFjdGl2YXRlIFNlY29uZCBpbnRlcnVwdGlvbiovCisgIC8qIERlYWN0aXZhdGUgU2Vjb25kIGludGVycnVwdGlvbiovCiAgIF9fSEFMX1JUQ19TRUNPTkRfRElTQUJMRV9JVChocnRjLCBSVENfSVRfU0VDKTsKIAogICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2hhbF9zZC5jIGIvU3JjL3N0bTMyZjF4eF9oYWxfc2QuYwppbmRleCBmYWU2MWQzLi45OTZmOWJkIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2hhbF9zZC5jCisrKyBiL1NyYy9zdG0zMmYxeHhfaGFsX3NkLmMKQEAgLTEzLDcgKzEzLDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKQEAgLTIxMCw3ICsyMTAsNyBAQAogICAgIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCiAKLSAgICBVc2UgRnVuY3Rpb25zIEByZWYgSEFMX1NEX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2ssCisgICAgVXNlIEZ1bmN0aW9ucyBIQUxfU0RfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjaywKICAgICBpdCBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICgrKSBUeENwbHRDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gYSB0cmFuc21pc3Npb24gdHJhbnNmZXIgaXMgY29tcGxldGVkLgogICAgICAgKCspIFJ4Q3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBhIHJlY2VwdGlvbiB0cmFuc2ZlciBpcyBjb21wbGV0ZWQuCkBAIC0yMjEsNyArMjIxLDcgQEAKICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECiAgICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KIAotICAgIFVzZSBmdW5jdGlvbiBAcmVmIEhBTF9TRF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgICAgVXNlIGZ1bmN0aW9uIEhBTF9TRF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgICAgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb24uIEl0IGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgKCspIFR4Q3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBhIHRyYW5zbWlzc2lvbiB0cmFuc2ZlciBpcyBjb21wbGV0ZWQuCiAgICAgICAoKykgUnhDcGx0Q2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIGEgcmVjZXB0aW9uIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4KQEAgLTIzMSwxMiArMjMxLDEyIEBACiAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgIDogU0QgTXNwRGVJbml0LgogICAgIFRoaXMgZnVuY3Rpb24pIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSBhbmQgdGhlIENhbGxiYWNrIElELgogCi0gICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX1NEX0luaXQgYW5kIGlmIHRoZSBzdGF0ZSBpcyBIQUxfU0RfU1RBVEVfUkVTRVQKKyAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX1NEX0luaXQgYW5kIGlmIHRoZSBzdGF0ZSBpcyBIQUxfU0RfU1RBVEVfUkVTRVQKICAgICBhbGwgY2FsbGJhY2tzIGFyZSByZXNldCB0byB0aGUgY29ycmVzcG9uZGluZyBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zLgogICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgY2FsbGJhY2tzIHRoYXQgYXJlIHJlc3BlY3RpdmVseQotICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBAcmVmIEhBTF9TRF9Jbml0Ci0gICAgYW5kIEByZWYgIEhBTF9TRF9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCi0gICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9TRF9Jbml0IGFuZCBAcmVmIEhBTF9TRF9EZUluaXQKKyAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgSEFMX1NEX0luaXQKKyAgICBhbmQgIEhBTF9TRF9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCisgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfU0RfSW5pdCBhbmQgSEFMX1NEX0RlSW5pdAogICAgIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkKIAogICAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gUkVBRFkgc3RhdGUgb25seS4KQEAgLTI0NCw4ICsyNDQsOCBAQAogICAgIGluIFJFQURZIG9yIFJFU0VUIHN0YXRlLCB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZAogICAgIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCiAgICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICAgIHVzaW5nIEByZWYgSEFMX1NEX1JlZ2lzdGVyQ2FsbGJhY2sgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfU0RfRGVJbml0Ci0gICAgb3IgQHJlZiBIQUxfU0RfSW5pdCBmdW5jdGlvbi4KKyAgICB1c2luZyBIQUxfU0RfUmVnaXN0ZXJDYWxsYmFjayBiZWZvcmUgY2FsbGluZyBIQUxfU0RfRGVJbml0CisgICAgb3IgSEFMX1NEX0luaXQgZnVuY3Rpb24uCiAKICAgICBXaGVuIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdGVyaW5nIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZQpAQCAtNDMwLDYgKzQzMCw5IEBACiAgIC8qIEVuYWJsZSBTRElPIENsb2NrICovCiAgIF9fSEFMX1NEX0VOQUJMRShoc2QpOwogCisgIC8qIFJlcXVpcmVkIHBvd2VyIHVwIHdhaXRpbmcgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIFNEIGluaXRpYWxpemF0aW9uICBzZXF1ZW5jZSAqLworICBIQUxfRGVsYXkoMik7CisKICAgLyogSWRlbnRpZnkgY2FyZCBvcGVyYXRpbmcgdm9sdGFnZSAqLwogICBlcnJvcnN0YXRlID0gU0RfUG93ZXJPTihoc2QpOwogICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfc21hcnRjYXJkLmMgYi9TcmMvc3RtMzJmMXh4X2hhbF9zbWFydGNhcmQuYwppbmRleCBkZmE5MWE5Li44N2JjODBhIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2hhbF9zbWFydGNhcmQuYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF9zbWFydGNhcmQuYwpAQCAtMTE2LDggKzExNiw4IEBACiAgICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KIAogICAgIFsuLl0KLSAgICBVc2UgRnVuY3Rpb24gQHJlZiBIQUxfU01BUlRDQVJEX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2suCi0gICAgRnVuY3Rpb24gQHJlZiBIQUxfU01BUlRDQVJEX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKKyAgICBVc2UgRnVuY3Rpb24gSEFMX1NNQVJUQ0FSRF9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLgorICAgIEZ1bmN0aW9uIEhBTF9TTUFSVENBUkRfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBUeENwbHRDYWxsYmFjayAgICAgICAgICAgIDogVHggQ29tcGxldGUgQ2FsbGJhY2suCiAgICAgKCspIFJ4Q3BsdENhbGxiYWNrICAgICAgICAgICAgOiBSeCBDb21wbGV0ZSBDYWxsYmFjay4KICAgICAoKykgRXJyb3JDYWxsYmFjayAgICAgICAgICAgICA6IEVycm9yIENhbGxiYWNrLgpAQCAtMTMwLDkgKzEzMCw5IEBACiAgICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KIAogICAgIFsuLl0KLSAgICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfU01BUlRDQVJEX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICBVc2UgZnVuY3Rpb24gSEFMX1NNQVJUQ0FSRF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgICAgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb24uCi0gICAgQHJlZiBIQUxfU01BUlRDQVJEX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKKyAgICBIQUxfU01BUlRDQVJEX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKICAgICBhbmQgdGhlIENhbGxiYWNrIElELgogICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgKCspIFR4Q3BsdENhbGxiYWNrICAgICAgICAgICAgOiBUeCBDb21wbGV0ZSBDYWxsYmFjay4KQEAgLTE0NSwxMyArMTQ1LDEzIEBACiAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICAgICAgOiBTTUFSVENBUkQgTXNwRGVJbml0LgogCiAgICAgWy4uXQotICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9TTUFSVENBUkRfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfU01BUlRDQVJEX1NUQVRFX1JFU0VUCisgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9TTUFSVENBUkRfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfU01BUlRDQVJEX1NUQVRFX1JFU0VUCiAgICAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uczoKLSAgICBleGFtcGxlcyBAcmVmIEhBTF9TTUFSVENBUkRfVHhDcGx0Q2FsbGJhY2soKSwgQHJlZiBIQUxfU01BUlRDQVJEX1J4Q3BsdENhbGxiYWNrKCkuCisgICAgZXhhbXBsZXMgSEFMX1NNQVJUQ0FSRF9UeENwbHRDYWxsYmFjaygpLCBIQUxfU01BUlRDQVJEX1J4Q3BsdENhbGxiYWNrKCkuCiAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUgcmVzcGVjdGl2ZWx5Ci0gICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEByZWYgSEFMX1NNQVJUQ0FSRF9Jbml0KCkKLSAgICBhbmQgQHJlZiBIQUxfU01BUlRDQVJEX0RlSW5pdCgpIG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgotICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgQHJlZiBIQUxfU01BUlRDQVJEX0luaXQoKSBhbmQgQHJlZiBIQUxfU01BUlRDQVJEX0RlSW5pdCgpCisgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEhBTF9TTUFSVENBUkRfSW5pdCgpCisgICAgYW5kIEhBTF9TTUFSVENBUkRfRGVJbml0KCkgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCisgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfU01BUlRDQVJEX0luaXQoKSBhbmQgSEFMX1NNQVJUQ0FSRF9EZUluaXQoKQogICAgIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCiAKICAgICBbLi5dCkBAIC0xNjAsOCArMTYwLDggQEAKICAgICBpbiBIQUxfU01BUlRDQVJEX1NUQVRFX1JFQURZIG9yIEhBTF9TTUFSVENBUkRfU1RBVEVfUkVTRVQgc3RhdGUsIHRodXMgcmVnaXN0ZXJlZCAodXNlcikKICAgICBNc3BJbml0L0RlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KICAgICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCi0gICAgdXNpbmcgQHJlZiBIQUxfU01BUlRDQVJEX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9TTUFSVENBUkRfRGVJbml0KCkKLSAgICBvciBAcmVmIEhBTF9TTUFSVENBUkRfSW5pdCgpIGZ1bmN0aW9uLgorICAgIHVzaW5nIEhBTF9TTUFSVENBUkRfUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEhBTF9TTUFSVENBUkRfRGVJbml0KCkKKyAgICBvciBIQUxfU01BUlRDQVJEX0luaXQoKSBmdW5jdGlvbi4KIAogICAgIFsuLl0KICAgICBXaGVuIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9TTUFSVENBUkRfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCkBAIC00NDYsNiArNDQ2LDkgQEAKIC8qKgogICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIFNNQVJUQ0FSRCBDYWxsYmFjawogICAqICAgICAgICAgVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAbm90ZSAgIFRoZSBIQUxfU01BUlRDQVJEX1JlZ2lzdGVyQ2FsbGJhY2soKSBtYXkgYmUgY2FsbGVkIGJlZm9yZSBIQUxfU01BUlRDQVJEX0luaXQoKQorICAqICAgICAgICAgaW4gSEFMX1NNQVJUQ0FSRF9TVEFURV9SRVNFVCB0byByZWdpc3RlciBjYWxsYmFja3MgZm9yIEhBTF9TTUFSVENBUkRfTVNQSU5JVF9DQl9JRAorICAqICAgICAgICAgYW5kIEhBTF9TTUFSVENBUkRfTVNQREVJTklUX0NCX0lECiAgICogQHBhcmFtICBoc2Mgc21hcnRjYXJkIGhhbmRsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgcmVnaXN0ZXJlZAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTQ3MSw4ICs0NzQsNiBAQAogCiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhzYyk7CiAKICAgaWYgKGhzYy0+Z1N0YXRlID09IEhBTF9TTUFSVENBUkRfU1RBVEVfUkVBRFkpCiAgIHsKQEAgLTU1MSwxNSArNTUyLDE1IEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaHNjKTsKLQogICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFVucmVnaXN0ZXIgYW4gU01BUlRDQVJEIGNhbGxiYWNrCiAgICogICAgICAgICBTTUFSVENBUkQgY2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogQG5vdGUgICBUaGUgSEFMX1NNQVJUQ0FSRF9VblJlZ2lzdGVyQ2FsbGJhY2soKSBtYXkgYmUgY2FsbGVkIGJlZm9yZSBIQUxfU01BUlRDQVJEX0luaXQoKQorICAqICAgICAgICAgaW4gSEFMX1NNQVJUQ0FSRF9TVEFURV9SRVNFVCB0byB1bi1yZWdpc3RlciBjYWxsYmFja3MgZm9yIEhBTF9TTUFSVENBUkRfTVNQSU5JVF9DQl9JRAorICAqICAgICAgICAgYW5kIEhBTF9TTUFSVENBUkRfTVNQREVJTklUX0NCX0lECiAgICogQHBhcmFtICBoc2Mgc21hcnRjYXJkIGhhbmRsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNTc3LDkgKzU3OCw2IEBACiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhzYyk7Ci0KICAgaWYgKEhBTF9TTUFSVENBUkRfU1RBVEVfUkVBRFkgPT0gaHNjLT5nU3RhdGUpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCkBAIC02NTYsOSArNjU0LDYgQEAKICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhoc2MpOwotCiAgIHJldHVybiBzdGF0dXM7CiB9CiAjZW5kaWYgLyogVVNFX0hBTF9TTUFSVENBUkRfUkVHSVNURVJfQ0FMTEJBQ0tTICovCkBAIC0yMzQ5LDMgKzIzNDQsNSBAQAogLyoqCiAgICogQH0KICAgKi8KKworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2hhbF9zcGkuYyBiL1NyYy9zdG0zMmYxeHhfaGFsX3NwaS5jCmluZGV4IGU3NGNiNGMuLmNjYTVhNTcgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfaGFsX3NwaS5jCisrKyBiL1NyYy9zdG0zMmYxeHhfaGFsX3NwaS5jCkBAIC05LDcgKzksNiBAQAogICAqICAgICAgICAgICArIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKLSAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTE5NSw3ICsxOTQsNiBAQAogICAgICAgICAgICAgKCMpIFJYIHByb2Nlc3NlcyBhcmUgSEFMX1NQSV9SZWNlaXZlKCksIEhBTF9TUElfUmVjZWl2ZV9JVCgpIGFuZCBIQUxfU1BJX1JlY2VpdmVfRE1BKCkKICAgICAgICAgICAgICgjKSBUWCBwcm9jZXNzZXMgYXJlIEhBTF9TUElfVHJhbnNtaXQoKSwgSEFMX1NQSV9UcmFuc21pdF9JVCgpIGFuZCBIQUxfU1BJX1RyYW5zbWl0X0RNQSgpCiAKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yMTQsNyArMjEyLDcgQEAKIC8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGRlZmluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2lmIChVU0VfU1BJX0NSQyAhPSAwVSkgJiYgZGVmaW5lZChTUElfQ1JDX0VSUk9SX1dPUktBUk9VTkRfRkVBVFVSRSkKLS8qIENSQyBXT1JLQU9VTkQgRkVBVFVSRTogVmFyaWFibGUgdXNlZCB0byBkZXRlcm1pbmUgaWYgZGV2aWNlIGlzIGltcGFjdGVkIGJ5IGltcGxlbWVudGF0aW9uCisvKiBDUkMgV09SS0FST1VORCBGRUFUVVJFOiBWYXJpYWJsZSB1c2VkIHRvIGRldGVybWluZSBpZiBkZXZpY2UgaXMgaW1wYWN0ZWQgYnkgaW1wbGVtZW50YXRpb24KICAqIG9mIHdvcmthcm91bmQgcmVsYXRlZCB0byB3cm9uZyBDUkMgZXJyb3JzIGRldGVjdGlvbiBvbiBTUEkyLiBDb25kaXRpb25zIGluIHdoaWNoIHRoaXMgd29ya2Fyb3VuZAogICogaGFzIHRvIGJlIGFwcGxpZWQsIGFyZToKICAqICAtIFNUTTMyRjEwMUNERS9TVE0zMkYxMDNDREUKQEAgLTIzNSw3ICsyMzMsNyBAQAogICogU28sIGluIGNhc2Ugb2YgUmV2aXNpb24gWiBGMTAxIG9yIEYxMDMgZGV2aWNlcywgYmVsb3cgZGVmaW5lIHNob3VsZCBiZSBhc3NpZ25lZCB0byAxLgogICovCiAjZGVmaW5lICBVU0VfU1BJX0NSQ19FUlJPUl9XT1JLQVJPVU5EICAgMFUKLSNlbmRpZgorI2VuZGlmIC8qIFVTRV9TUElfQ1JDICovCiAvKiogQGRlZmdyb3VwIFNQSV9Qcml2YXRlX0NvbnN0YW50cyBTUEkgUHJpdmF0ZSBDb25zdGFudHMKICAgKiBAewogICAqLwpAQCAtMzIzMyw3ICszMjMxLDcgQEAKICAgKi8KIHN0YXRpYyB2b2lkIFNQSV8ybGluZXNSeElTUl84QklUQ1JDKHN0cnVjdCBfX1NQSV9IYW5kbGVUeXBlRGVmICpoc3BpKQogewotICBfX0lPIHVpbnQ4X3QgICogcHRtcHJlZzg7CisgIF9fSU8gdWludDhfdCAgKnB0bXByZWc4OwogICBfX0lPIHVpbnQ4X3QgIHRtcHJlZzggPSAwOwogCiAgIC8qIEluaXRpYWxpemUgdGhlIDhiaXQgdGVtcG9yYXJ5IHBvaW50ZXIgKi8KQEAgLTMzMzYsNyArMzMzNCw3IEBACiAgIC8qIFJlYWQgMTZiaXQgQ1JDIHRvIGZsdXNoIERhdGEgUmVnaXN0ZXIgKi8KICAgdG1wcmVnID0gUkVBRF9SRUcoaHNwaS0+SW5zdGFuY2UtPkRSKTsKICAgLyogVG8gYXZvaWQgR0NDIHdhcm5pbmcgKi8KLSAgVU5VU0VEKHRtcHJlZyk7ICAKKyAgVU5VU0VEKHRtcHJlZyk7CiAKICAgLyogRGlzYWJsZSBSWE5FIGludGVycnVwdCAqLwogICBfX0hBTF9TUElfRElTQUJMRV9JVChoc3BpLCBTUElfSVRfUlhORSk7CkBAIC0zMzkxLDcgKzMzODksNyBAQAogICAqLwogc3RhdGljIHZvaWQgU1BJX1J4SVNSXzhCSVRDUkMoc3RydWN0IF9fU1BJX0hhbmRsZVR5cGVEZWYgKmhzcGkpCiB7Ci0gIF9fSU8gdWludDhfdCAgKiBwdG1wcmVnODsKKyAgX19JTyB1aW50OF90ICAqcHRtcHJlZzg7CiAgIF9fSU8gdWludDhfdCAgdG1wcmVnOCA9IDA7CiAKICAgLyogSW5pdGlhbGl6ZSB0aGUgOGJpdCB0ZW1wb3JhcnkgcG9pbnRlciAqLwpAQCAtMzYxNyw3ICszNjE1LDcgQEAKICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgICAgfQogICAgICAgLyogSWYgU3lzdGljayBpcyBkaXNhYmxlZCBvciBub3QgaW5jcmVtZW50ZWQsIGRlYWN0aXZhdGUgdGltZW91dCB0byBnbyBpbiBkaXNhYmxlIGxvb3AgcHJvY2VkdXJlICovCi0gICAgICBpZihjb3VudCA9PSAwVSkKKyAgICAgIGlmIChjb3VudCA9PSAwVSkKICAgICAgIHsKICAgICAgICAgdG1wX3RpbWVvdXQgPSAwVTsKICAgICAgIH0KQEAgLTM5OTgsNyArMzk5Niw3IEBACiAgICAgICByZXR1cm4gKFNQSV9JTlZBTElEX0NSQ19FUlJPUik7CiAgICAgfQogICB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfU1BJX0NSQ19FUlJPUl9XT1JLQVJPVU5EICovCiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKGhzcGkpOwogCkBAIC00MDE4LDMgKzQwMTYsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfc3JhbS5jIGIvU3JjL3N0bTMyZjF4eF9oYWxfc3JhbS5jCmluZGV4IGUxMDJmYTEuLmQxMzZlYTQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfaGFsX3NyYW0uYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF9zcmFtLmMKQEAgLTc1LDI1ICs3NSwyNSBAQAogICAgICAgVGhlIGNvbXBpbGF0aW9uIGRlZmluZSAgVVNFX0hBTF9TUkFNX1JFR0lTVEVSX0NBTExCQUNLUyB3aGVuIHNldCB0byAxCiAgICAgICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgogCi0gICAgICBVc2UgRnVuY3Rpb25zIEByZWYgSEFMX1NSQU1fUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjaywKKyAgICAgIFVzZSBGdW5jdGlvbnMgSEFMX1NSQU1fUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjaywKICAgICAgIGl0IGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgIDogU1JBTSBNc3BJbml0LgogICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgIDogU1JBTSBNc3BEZUluaXQuCiAgICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECiAgICAgICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogCi0gICAgICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfU1JBTV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0Ci0gICAgICB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbi4gSXQgYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6CisgICAgICBVc2UgZnVuY3Rpb24gSEFMX1NSQU1fVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAorICAgICAgd2VhayAob3ZlcnJpZGRlbikgZnVuY3Rpb24uIEl0IGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgIDogU1JBTSBNc3BJbml0LgogICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgIDogU1JBTSBNc3BEZUluaXQuCiAgICAgICBUaGlzIGZ1bmN0aW9uKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUgYW5kIHRoZSBDYWxsYmFjayBJRC4KIAotICAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX1NSQU1fSW5pdCBhbmQgaWYgdGhlIHN0YXRlIGlzIEhBTF9TUkFNX1NUQVRFX1JFU0VUCi0gICAgICBhbGwgY2FsbGJhY2tzIGFyZSByZXNldCB0byB0aGUgY29ycmVzcG9uZGluZyBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zLgorICAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9TUkFNX0luaXQgYW5kIGlmIHRoZSBzdGF0ZSBpcyBIQUxfU1JBTV9TVEFURV9SRVNFVAorICAgICAgYWxsIGNhbGxiYWNrcyBhcmUgcmVzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbGVnYWN5IHdlYWsgKG92ZXJyaWRkZW4pIGZ1bmN0aW9ucy4KICAgICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgY2FsbGJhY2tzIHRoYXQgYXJlIHJlc3BlY3RpdmVseQotICAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEByZWYgSEFMX1NSQU1fSW5pdAotICAgICAgYW5kIEByZWYgIEhBTF9TUkFNX0RlSW5pdCBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KLSAgICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgQHJlZiBIQUxfU1JBTV9Jbml0IGFuZCBAcmVmIEhBTF9TUkFNX0RlSW5pdAorICAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChvdmVycmlkZGVuKSBmdW5jdGlvbnMgaW4gdGhlIEhBTF9TUkFNX0luaXQKKyAgICAgIGFuZCAgSEFMX1NSQU1fRGVJbml0IG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgorICAgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfU1JBTV9Jbml0IGFuZCBIQUxfU1JBTV9EZUluaXQKICAgICAgIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkKIAogICAgICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBSRUFEWSBzdGF0ZSBvbmx5LgpAQCAtMTAxLDEyICsxMDEsMTIgQEAKICAgICAgIGluIFJFQURZIG9yIFJFU0VUIHN0YXRlLCB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZAogICAgICAgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KICAgICAgIEluIHRoYXQgY2FzZSBmaXJzdCByZWdpc3RlciB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKLSAgICAgIHVzaW5nIEByZWYgSEFMX1NSQU1fUmVnaXN0ZXJDYWxsYmFjayBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9TUkFNX0RlSW5pdAotICAgICAgb3IgQHJlZiBIQUxfU1JBTV9Jbml0IGZ1bmN0aW9uLgorICAgICAgdXNpbmcgSEFMX1NSQU1fUmVnaXN0ZXJDYWxsYmFjayBiZWZvcmUgY2FsbGluZyBIQUxfU1JBTV9EZUluaXQKKyAgICAgIG9yIEhBTF9TUkFNX0luaXQgZnVuY3Rpb24uCiAKICAgICAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX1NSQU1fUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCiAgICAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdGVyaW5nIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZQotICAgICAgYW5kIHdlYWsgKHN1cmNoYXJnZWQpIGNhbGxiYWNrcyBhcmUgdXNlZC4KKyAgICAgIGFuZCB3ZWFrIChvdmVycmlkZGVuKSBjYWxsYmFja3MgYXJlIHVzZWQuCiAKICAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTMzLDkgKzEzMywxNSBAQAogLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBhZGR0b2dyb3VwIFNSQU1fUHJpdmF0ZV9GdW5jdGlvbnMgU1JBTSBQcml2YXRlIEZ1bmN0aW9ucworICAqIEB7CisgICovCiBzdGF0aWMgdm9pZCBTUkFNX0RNQUNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogc3RhdGljIHZvaWQgU1JBTV9ETUFDcGx0UHJvdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgdm9pZCBTUkFNX0RNQUVycm9yKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKKy8qKgorICAqIEB9CisgICovCiAKIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTczMSw3ICs3MzcsNyBAQAogI2lmIChVU0VfSEFMX1NSQU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAvKioKICAgKiBAYnJpZWYgIFJlZ2lzdGVyIGEgVXNlciBTUkFNIENhbGxiYWNrCi0gICogICAgICAgICBUbyBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHdlYWsgKHN1cmNoYXJnZWQpIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiAgICAgICAgIFRvIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjawogICAqIEBwYXJhbSBoc3JhbSA6IFNSQU0gaGFuZGxlCiAgICogQHBhcmFtIENhbGxiYWNrSWQgOiBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgcmVnaXN0ZXJlZAogICAqICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNzUxLDkgKzc1Nyw2IEBACiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaHNyYW0pOwotCiAgIHN0YXRlID0gaHNyYW0tPlN0YXRlOwogICBpZiAoKHN0YXRlID09IEhBTF9TUkFNX1NUQVRFX1JFQURZKSB8fCAoc3RhdGUgPT0gSEFMX1NSQU1fU1RBVEVfUkVTRVQpIHx8IChzdGF0ZSA9PSBIQUxfU1JBTV9TVEFURV9QUk9URUNURUQpKQogICB7CkBAIC03NzcsMTQgKzc4MCwxMiBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGhzcmFtKTsKICAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGEgVXNlciBTUkFNIENhbGxiYWNrCi0gICogICAgICAgICBTUkFNIENhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgKHN1cmNoYXJnZWQpIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiAgICAgICAgIFNSQU0gQ2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtIGhzcmFtIDogU1JBTSBoYW5kbGUKICAgKiBAcGFyYW0gQ2FsbGJhY2tJZCA6IElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKICAgKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTc5OSw5ICs4MDAsNiBAQAogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIEhBTF9TUkFNX1N0YXRlVHlwZURlZiBzdGF0ZTsKIAotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhzcmFtKTsKLQogICBzdGF0ZSA9IGhzcmFtLT5TdGF0ZTsKICAgaWYgKChzdGF0ZSA9PSBIQUxfU1JBTV9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9TUkFNX1NUQVRFX1BST1RFQ1RFRCkpCiAgIHsKQEAgLTg0NywxNCArODQ1LDEyIEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaHNyYW0pOwogICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFJlZ2lzdGVyIGEgVXNlciBTUkFNIENhbGxiYWNrIGZvciBETUEgdHJhbnNmZXJzCi0gICogICAgICAgICBUbyBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHdlYWsgKHN1cmNoYXJnZWQpIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiAgICAgICAgIFRvIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjawogICAqIEBwYXJhbSBoc3JhbSA6IFNSQU0gaGFuZGxlCiAgICogQHBhcmFtIENhbGxiYWNrSWQgOiBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgcmVnaXN0ZXJlZAogICAqICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtMTAxOCw3ICsxMDE0LDcgQEAKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgU1JBTSBtb2R1bGUuCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KLUhBTF9TUkFNX1N0YXRlVHlwZURlZiBIQUxfU1JBTV9HZXRTdGF0ZShTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtKQorSEFMX1NSQU1fU3RhdGVUeXBlRGVmIEhBTF9TUkFNX0dldFN0YXRlKGNvbnN0IFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0pCiB7CiAgIHJldHVybiBoc3JhbS0+U3RhdGU7CiB9CkBAIC0xMDMxLDYgKzEwMjcsMTAgQEAKICAgKiBAfQogICAqLwogCisvKiogQGFkZHRvZ3JvdXAgU1JBTV9Qcml2YXRlX0Z1bmN0aW9ucyBTUkFNIFByaXZhdGUgRnVuY3Rpb25zCisgICogQHsKKyAgKi8KKwogLyoqCiAgICogQGJyaWVmICBETUEgU1JBTSBwcm9jZXNzIGNvbXBsZXRlIGNhbGxiYWNrLgogICAqIEBwYXJhbSAgaGRtYSA6IERNQSBoYW5kbGUKQEAgLTExMDEsNiArMTEwMSwxMCBAQAogICAqIEB9CiAgICovCiAKKy8qKgorICAqIEB9CisgICovCisKICNlbmRpZiAvKiBIQUxfU1JBTV9NT0RVTEVfRU5BQkxFRCAqLwogCiAvKioKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYxeHhfaGFsX3RpbS5jIGIvU3JjL3N0bTMyZjF4eF9oYWxfdGltLmMKaW5kZXggMGJlOGE4ZC4uNDBjZWU4OCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjF4eF9oYWxfdGltLmMKKysrIGIvU3JjL3N0bTMyZjF4eF9oYWxfdGltLmMKQEAgLTI5LDcgKzI5LDYgQEAKICAgKiAgICAgICAgICAgKyBDb21tdXRhdGlvbiBFdmVudCBjb25maWd1cmF0aW9uIHdpdGggSW50ZXJydXB0aW9uIGFuZCBETUEKICAgKiAgICAgICAgICAgKyBUSU0gT0NSZWYgY2xlYXIgY29uZmlndXJhdGlvbgogICAqICAgICAgICAgICArIFRJTSBFeHRlcm5hbCBDbG9jayBjb25maWd1cmF0aW9uCi0gICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC0xMTUsMTQgKzExNCwxNCBAQAogICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgogCiAgIFsuLl0KLSAgVXNlIEZ1bmN0aW9uIEByZWYgSEFMX1RJTV9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSBjYWxsYmFjay4KLSAgQHJlZiBIQUxfVElNX1JlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCisgIFVzZSBGdW5jdGlvbiBIQUxfVElNX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIGNhbGxiYWNrLgorICBIQUxfVElNX1JlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgIHRoZSBDYWxsYmFjayBJRCBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogCiAgIFsuLl0KLSAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX1RJTV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgIFVzZSBmdW5jdGlvbiBIQUxfVElNX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgd2VhayBmdW5jdGlvbi4KLSAgQHJlZiBIQUxfVElNX1VuUmVnaXN0ZXJDYWxsYmFjayB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCisgIEhBTF9USU1fVW5SZWdpc3RlckNhbGxiYWNrIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKICAgYW5kIHRoZSBDYWxsYmFjayBJRC4KIAogICBbLi5dCkBAIC0xNTgsNyArMTU3LDcgQEAKICAgWy4uXQogQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEluaXQgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9USU1fU1RBVEVfUkVTRVQKIGFsbCBpbnRlcnJ1cHQgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnM6Ci0gIGV4YW1wbGVzIEByZWYgSEFMX1RJTV9UcmlnZ2VyQ2FsbGJhY2soKSwgQHJlZiBIQUxfVElNX0Vycm9yQ2FsbGJhY2soKS4KKyAgZXhhbXBsZXMgSEFMX1RJTV9UcmlnZ2VyQ2FsbGJhY2soKSwgSEFMX1RJTV9FcnJvckNhbGxiYWNrKCkuCiAKICAgWy4uXQogICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCBhbmQgTXNwRGVJbml0IGZ1bmN0aW9ucyB0aGF0IGFyZSByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsKQEAgLTE3Miw3ICsxNzEsNyBAQAogICAgIGluIEhBTF9USU1fU1RBVEVfUkVBRFkgb3IgSEFMX1RJTV9TVEFURV9SRVNFVCBzdGF0ZSwKICAgICB0aHVzIHJlZ2lzdGVyZWQodXNlcikgTXNwSW5pdCAvIERlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSBJbml0IC8gRGVJbml0LgogICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCi0gICAgICB1c2luZyBAcmVmIEhBTF9USU1fUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIERlSW5pdCBvciBJbml0IGZ1bmN0aW9uLgorICAgICAgdXNpbmcgSEFMX1RJTV9SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgRGVJbml0IG9yIEluaXQgZnVuY3Rpb24uCiAKICAgWy4uXQogICAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgpAQCAtMjc2LDYgKzI3NSw3IEBACiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DT1VOVEVSX01PREUoaHRpbS0+SW5pdC5Db3VudGVyTW9kZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NMT0NLRElWSVNJT05fRElWKGh0aW0tPkluaXQuQ2xvY2tEaXZpc2lvbikpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX1BFUklPRChodGltLT5Jbml0LlBlcmlvZCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0FVVE9SRUxPQURfUFJFTE9BRChodGltLT5Jbml0LkF1dG9SZWxvYWRQcmVsb2FkKSk7CiAKICAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVTRVQpCkBAIC01MzcsNyArNTM3LDcgQEAKICAgfQogICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CkBAIC01NjAsNyArNTYwLDcgQEAKIAogICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9VUERBVEVdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkFSUiwKLSAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKICAgewogICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtNjU5LDYgKzY1OSw3IEBACiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DT1VOVEVSX01PREUoaHRpbS0+SW5pdC5Db3VudGVyTW9kZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NMT0NLRElWSVNJT05fRElWKGh0aW0tPkluaXQuQ2xvY2tEaXZpc2lvbikpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX1BFUklPRChodGltLT5Jbml0LlBlcmlvZCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0FVVE9SRUxPQURfUFJFTE9BRChodGltLT5Jbml0LkF1dG9SZWxvYWRQcmVsb2FkKSk7CiAKICAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVTRVQpCkBAIC04NzYsNiArODc3LDcgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fT0NfU3RhcnRfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgdWludDMyX3QgdG1wc21jcjsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwpAQCAtOTIxLDM0ICs5MjMsMzggQEAKICAgICB9CiAKICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAotICAvKiBFbmFibGUgdGhlIE91dHB1dCBjb21wYXJlIGNoYW5uZWwgKi8KLSAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKLQotICBpZiAoSVNfVElNX0JSRUFLX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSAhPSBSRVNFVCkKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICAvKiBFbmFibGUgdGhlIG1haW4gb3V0cHV0ICovCi0gICAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7Ci0gIH0KKyAgICAvKiBFbmFibGUgdGhlIE91dHB1dCBjb21wYXJlIGNoYW5uZWwgKi8KKyAgICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9FTkFCTEUpOwogCi0gIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKLSAgewotICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIGlmIChJU19USU1fQlJFQUtfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpICE9IFJFU0VUKQorICAgIHsKKyAgICAgIC8qIEVuYWJsZSB0aGUgbWFpbiBvdXRwdXQgKi8KKyAgICAgIF9fSEFMX1RJTV9NT0VfRU5BQkxFKGh0aW0pOworICAgIH0KKworICAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLworICAgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICAgIHsKKyAgICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgICB7CisgICAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKICAgICB7CiAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICAgIH0KICAgfQotICBlbHNlCi0gIHsKLSAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwotICB9CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTk2NCw2ICs5NzAsOCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9PQ19TdG9wX0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIApAQCAtOTk4LDI2ICsxMDA2LDMwIEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgT3V0cHV0IGNvbXBhcmUgY2hhbm5lbCAqLwotICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9ESVNBQkxFKTsKLQotICBpZiAoSVNfVElNX0JSRUFLX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSAhPSBSRVNFVCkKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICAvKiBEaXNhYmxlIHRoZSBNYWluIE91dHB1dCAqLwotICAgIF9fSEFMX1RJTV9NT0VfRElTQUJMRShodGltKTsKKyAgICAvKiBEaXNhYmxlIHRoZSBPdXRwdXQgY29tcGFyZSBjaGFubmVsICovCisgICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRElTQUJMRSk7CisKKyAgICBpZiAoSVNfVElNX0JSRUFLX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSAhPSBSRVNFVCkKKyAgICB7CisgICAgICAvKiBEaXNhYmxlIHRoZSBNYWluIE91dHB1dCAqLworICAgICAgX19IQUxfVElNX01PRV9ESVNBQkxFKGh0aW0pOworICAgIH0KKworICAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KKyAgICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKKworICAgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKICAgfQogCi0gIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KLSAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7Ci0KLSAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLwotICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKLQogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtMTAzNiw2ICsxMDQ4LDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fT0NfU3RhcnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsLCBjb25zdCB1aW50MzJfdCAqcERhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBMZW5ndGgpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgdWludDMyX3QgdG1wc21jcjsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwpAQCAtMTA0OCw3ICsxMDYxLDcgQEAKICAgfQogICBlbHNlIGlmIChUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CkBAIC0xMDc1LDcgKzEwODgsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IxLAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTEwOTcsNyArMTExMCw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMTExOSw3ICsxMTMyLDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMywKLSAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0xMTQwLDcgKzExNTMsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1I0LAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTExNTEsMzQgKzExNjQsMzggQEAKICAgICB9CiAKICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAotICAvKiBFbmFibGUgdGhlIE91dHB1dCBjb21wYXJlIGNoYW5uZWwgKi8KLSAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKLQotICBpZiAoSVNfVElNX0JSRUFLX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSAhPSBSRVNFVCkKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICAvKiBFbmFibGUgdGhlIG1haW4gb3V0cHV0ICovCi0gICAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7Ci0gIH0KKyAgICAvKiBFbmFibGUgdGhlIE91dHB1dCBjb21wYXJlIGNoYW5uZWwgKi8KKyAgICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9FTkFCTEUpOwogCi0gIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKLSAgewotICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIGlmIChJU19USU1fQlJFQUtfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpICE9IFJFU0VUKQorICAgIHsKKyAgICAgIC8qIEVuYWJsZSB0aGUgbWFpbiBvdXRwdXQgKi8KKyAgICAgIF9fSEFMX1RJTV9NT0VfRU5BQkxFKGh0aW0pOworICAgIH0KKworICAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLworICAgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICAgIHsKKyAgICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgICB7CisgICAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKICAgICB7CiAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICAgIH0KICAgfQotICBlbHNlCi0gIHsKLSAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwotICB9CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTExOTQsNiArMTIxMSw4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX09DX1N0b3BfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIApAQCAtMTIzMiwyNiArMTI1MSwzMCBAQAogICAgIH0KIAogICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIERpc2FibGUgdGhlIE91dHB1dCBjb21wYXJlIGNoYW5uZWwgKi8KLSAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRElTQUJMRSk7Ci0KLSAgaWYgKElTX1RJTV9CUkVBS19JTlNUQU5DRShodGltLT5JbnN0YW5jZSkgIT0gUkVTRVQpCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7Ci0gICAgLyogRGlzYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KLSAgICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CisgICAgLyogRGlzYWJsZSB0aGUgT3V0cHV0IGNvbXBhcmUgY2hhbm5lbCAqLworICAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0RJU0FCTEUpOworCisgICAgaWYgKElTX1RJTV9CUkVBS19JTlNUQU5DRShodGltLT5JbnN0YW5jZSkgIT0gUkVTRVQpCisgICAgeworICAgICAgLyogRGlzYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KKyAgICAgIF9fSEFMX1RJTV9NT0VfRElTQUJMRShodGltKTsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCisgICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CisKKyAgICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CiAgIH0KIAotICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCi0gIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwotCi0gIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KLSAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7Ci0KICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTEzMDEsNiArMTMyNCw3IEBACiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DT1VOVEVSX01PREUoaHRpbS0+SW5pdC5Db3VudGVyTW9kZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NMT0NLRElWSVNJT05fRElWKGh0aW0tPkluaXQuQ2xvY2tEaXZpc2lvbikpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX1BFUklPRChodGltLT5Jbml0LlBlcmlvZCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0FVVE9SRUxPQURfUFJFTE9BRChodGltLT5Jbml0LkF1dG9SZWxvYWRQcmVsb2FkKSk7CiAKICAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVTRVQpCkBAIC0xNTE4LDcgKzE1NDIsOSBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9QV01fU3RhcnRfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgdWludDMyX3QgdG1wc21jcjsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCkBAIC0xNTYyLDM0ICsxNTg4LDM4IEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogRW5hYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgY2hhbm5lbCAqLwotICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9FTkFCTEUpOwotCi0gIGlmIChJU19USU1fQlJFQUtfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpICE9IFJFU0VUKQorICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIC8qIEVuYWJsZSB0aGUgbWFpbiBvdXRwdXQgKi8KLSAgICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKLSAgfQorICAgIC8qIEVuYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgKi8KKyAgICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9FTkFCTEUpOwogCi0gIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKLSAgewotICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIGlmIChJU19USU1fQlJFQUtfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpICE9IFJFU0VUKQorICAgIHsKKyAgICAgIC8qIEVuYWJsZSB0aGUgbWFpbiBvdXRwdXQgKi8KKyAgICAgIF9fSEFMX1RJTV9NT0VfRU5BQkxFKGh0aW0pOworICAgIH0KKworICAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLworICAgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICAgIHsKKyAgICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgICB7CisgICAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKICAgICB7CiAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICAgIH0KICAgfQotICBlbHNlCi0gIHsKLSAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwotICB9CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTE2MDUsNiArMTYzNSw4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX1BXTV9TdG9wX0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIApAQCAtMTYzOSwyNiArMTY3MSwzMCBAQAogICAgIH0KIAogICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIERpc2FibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsICovCi0gIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0RJU0FCTEUpOwotCi0gIGlmIChJU19USU1fQlJFQUtfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpICE9IFJFU0VUKQorICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIC8qIERpc2FibGUgdGhlIE1haW4gT3V0cHV0ICovCi0gICAgX19IQUxfVElNX01PRV9ESVNBQkxFKGh0aW0pOworICAgIC8qIERpc2FibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsICovCisgICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRElTQUJMRSk7CisKKyAgICBpZiAoSVNfVElNX0JSRUFLX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSAhPSBSRVNFVCkKKyAgICB7CisgICAgICAvKiBEaXNhYmxlIHRoZSBNYWluIE91dHB1dCAqLworICAgICAgX19IQUxfVElNX01PRV9ESVNBQkxFKGh0aW0pOworICAgIH0KKworICAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KKyAgICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKKworICAgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKICAgfQogCi0gIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KLSAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7Ci0KLSAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLwotICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKLQogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtMTY3Nyw2ICsxNzEzLDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fUFdNX1N0YXJ0X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCwgY29uc3QgdWludDMyX3QgKnBEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IExlbmd0aCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICB1aW50MzJfdCB0bXBzbWNyOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCkBAIC0xNjg5LDcgKzE3MjYsNyBAQAogICB9CiAgIGVsc2UgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBpZiAoKHBEYXRhID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCisgICAgaWYgKChwRGF0YSA9PSBOVUxMKSB8fCAoTGVuZ3RoID09IDBVKSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KQEAgLTE3MTYsNyArMTc1Myw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMTczOCw3ICsxNzc1LDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0xNzU5LDcgKzE3OTYsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IzLAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTE3ODAsNyArMTgxNyw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMTc5MSwzNCArMTgyOCwzOCBAQAogICAgIH0KIAogICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIEVuYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgKi8KLSAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKLQotICBpZiAoSVNfVElNX0JSRUFLX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSAhPSBSRVNFVCkKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICAvKiBFbmFibGUgdGhlIG1haW4gb3V0cHV0ICovCi0gICAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7Ci0gIH0KKyAgICAvKiBFbmFibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsICovCisgICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKIAotICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCi0gIHsKLSAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICBpZiAoSVNfVElNX0JSRUFLX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSAhPSBSRVNFVCkKKyAgICB7CisgICAgICAvKiBFbmFibGUgdGhlIG1haW4gb3V0cHV0ICovCisgICAgICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KKyAgICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgICB7CisgICAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgICAgeworICAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCiAgICAgewogICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgICB9CiAgIH0KLSAgZWxzZQotICB7Ci0gICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKLSAgfQogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xODM0LDYgKzE4NzUsOCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9QV01fU3RvcF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCkBAIC0xODcyLDI2ICsxOTE1LDMwIEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgKi8KLSAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRElTQUJMRSk7Ci0KLSAgaWYgKElTX1RJTV9CUkVBS19JTlNUQU5DRShodGltLT5JbnN0YW5jZSkgIT0gUkVTRVQpCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7Ci0gICAgLyogRGlzYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KLSAgICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CisgICAgLyogRGlzYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgKi8KKyAgICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9ESVNBQkxFKTsKKworICAgIGlmIChJU19USU1fQlJFQUtfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpICE9IFJFU0VUKQorICAgIHsKKyAgICAgIC8qIERpc2FibGUgdGhlIE1haW4gT3V0cHV0ICovCisgICAgICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CisgICAgfQorCisgICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOworCisgICAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwotICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKLQotICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCi0gIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwotCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xOTQxLDYgKzE5ODgsNyBAQAogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQ09VTlRFUl9NT0RFKGh0aW0tPkluaXQuQ291bnRlck1vZGUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DTE9DS0RJVklTSU9OX0RJVihodGltLT5Jbml0LkNsb2NrRGl2aXNpb24pKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9QRVJJT0QoaHRpbS0+SW5pdC5QZXJpb2QpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BVVRPUkVMT0FEX1BSRUxPQUQoaHRpbS0+SW5pdC5BdXRvUmVsb2FkUHJlbG9hZCkpOwogCiAgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFU0VUKQpAQCAtMjE1MSw3ICsyMTk5LDkgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fSUNfU3RhcnRfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgdWludDMyX3QgdG1wc21jcjsKKwogICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKTsKICAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpOwogCkBAIC0yMjAwLDI3ICsyMjUwLDMyIEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9Ci0gIC8qIEVuYWJsZSB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsICovCi0gIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0VOQUJMRSk7CiAKLSAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIC8qIEVuYWJsZSB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsICovCisgICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKKworICAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLworICAgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICAgIHsKKyAgICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgICB7CisgICAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKICAgICB7CiAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICAgIH0KICAgfQotICBlbHNlCi0gIHsKLSAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwotICB9CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTIyMzYsNiArMjI5MSw4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0lDX1N0b3BfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCkBAIC0yMjcwLDIxICsyMzI3LDI1IEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsICovCi0gIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0RJU0FCTEUpOworICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgeworICAgIC8qIERpc2FibGUgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLworICAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0RJU0FCTEUpOwogCi0gIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KLSAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CisgICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KLSAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7Ci0gIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtMjMwMiw3ICsyMzYzLDkgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fSUNfU3RhcnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCAqcERhdGEsIHVpbnQxNl90IExlbmd0aCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICB1aW50MzJfdCB0bXBzbWNyOworCiAgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpOwogICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCk7CiAKQEAgLTIzMTksNyArMjM4Miw3IEBACiAgIGVsc2UgaWYgKChjaGFubmVsX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKICAgICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICB7Ci0gICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CkBAIC0yMzM3LDIwICsyNDAwLDYgQEAKICAgLyogRW5hYmxlIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWwgKi8KICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKIAotICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCi0gIHsKLSAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKLSAgICB7Ci0gICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwotICAgIH0KLSAgfQotICBlbHNlCi0gIHsKLSAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwotICB9Ci0KICAgc3dpdGNoIChDaGFubmVsKQogICB7CiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgpAQCAtMjM2NCw3ICsyNDEzLDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjEsICh1aW50MzJfdClwRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0yMzg1LDcgKzI0MzQsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMiwgKHVpbnQzMl90KXBEYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTI0MDYsNyArMjQ1NSw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IzLCAodWludDMyX3QpcERhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMjQyNyw3ICsyNDc2LDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjQsICh1aW50MzJfdClwRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0yNDM4LDExICsyNDg3LDI2IEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKKyAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCisgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICB7CisgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgeworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgfQorCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0yNDU4LDYgKzI1MjIsOCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9JQ19TdG9wX0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX0NDX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CkBAIC0yNTAwLDE4ICsyNTY2LDIyIEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwotICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgIHsKKyAgICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCisgICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLwotICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKLSAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgfQogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIC8qKgogICAqIEB9CkBAIC0yNTY4LDYgKzI2MzgsNyBAQAogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NPVU5URVJfTU9ERShodGltLT5Jbml0LkNvdW50ZXJNb2RlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0xPQ0tESVZJU0lPTl9ESVYoaHRpbS0+SW5pdC5DbG9ja0RpdmlzaW9uKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fT1BNX01PREUoT25lUHVsc2VNb2RlKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fUEVSSU9EKGh0aW0tPkluaXQuUGVyaW9kKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQVVUT1JFTE9BRF9QUkVMT0FEKGh0aW0tPkluaXQuQXV0b1JlbG9hZFByZWxvYWQpKTsKIAogICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRVNFVCkKQEAgLTI5NDUsNyArMzAxNiw3IEBACiAgICogQHBhcmFtICBzQ29uZmlnIFRJTSBFbmNvZGVyIEludGVyZmFjZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX0luaXQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sICBUSU1fRW5jb2Rlcl9Jbml0VHlwZURlZiAqc0NvbmZpZykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9Jbml0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBjb25zdCBUSU1fRW5jb2Rlcl9Jbml0VHlwZURlZiAqc0NvbmZpZykKIHsKICAgdWludDMyX3QgdG1wc21jcjsKICAgdWludDMyX3QgdG1wY2NtcjE7CkBAIC0yOTcxLDYgKzMwNDIsNyBAQAogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX1BSRVNDQUxFUihzQ29uZmlnLT5JQzJQcmVzY2FsZXIpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19GSUxURVIoc0NvbmZpZy0+SUMxRmlsdGVyKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fSUNfRklMVEVSKHNDb25maWctPklDMkZpbHRlcikpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX1BFUklPRChodGltLT5Jbml0LlBlcmlvZCkpOwogCiAgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFU0VUKQogICB7CkBAIC0zNDc5LDcgKzM1NTEsNyBAQAogICAgIGVsc2UgaWYgKChjaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICAgICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICAgIHsKLSAgICAgIGlmICgocERhdGExID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCisgICAgICBpZiAoKHBEYXRhMSA9PSBOVUxMKSB8fCAoTGVuZ3RoID09IDBVKSkKICAgICAgIHsKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KQEAgLTM1MDQsNyArMzU3Niw3IEBACiAgICAgZWxzZSBpZiAoKGNoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCiAgICAgICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCiAgICAgewotICAgICAgaWYgKChwRGF0YTIgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICAgIGlmICgocERhdGEyID09IE5VTEwpIHx8IChMZW5ndGggPT0gMFUpKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtMzUzMyw3ICszNjA1LDcgQEAKICAgICAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICAgICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICAgIHsKLSAgICAgIGlmICgoKChwRGF0YTEgPT0gTlVMTCkgfHwgKHBEYXRhMiA9PSBOVUxMKSkpICYmIChMZW5ndGggPiAwVSkpCisgICAgICBpZiAoKCgocERhdGExID09IE5VTEwpIHx8IChwRGF0YTIgPT0gTlVMTCkpKSB8fCAoTGVuZ3RoID09IDBVKSkKICAgICAgIHsKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KQEAgLTM1NjQsNyArMzYzNiw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IxLCAodWludDMyX3QpcERhdGExLAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTM1NzIsMTEgKzM2NDQsMTIgQEAKICAgICAgIC8qIEVuYWJsZSB0aGUgVElNIElucHV0IENhcHR1cmUgRE1BIHJlcXVlc3QgKi8KICAgICAgIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIFRJTV9ETUFfQ0MxKTsKIAorICAgICAgLyogRW5hYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgY2hhbm5lbCAqLworICAgICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIFRJTV9DSEFOTkVMXzEsIFRJTV9DQ3hfRU5BQkxFKTsKKwogICAgICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogCi0gICAgICAvKiBFbmFibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsICovCi0gICAgICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgVElNX0NIQU5ORUxfMSwgVElNX0NDeF9FTkFCTEUpOwogICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zNTkwLDcgKzM2NjMsNyBAQAogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yOwogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjIsICh1aW50MzJfdClwRGF0YTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMzU5OCwxNSArMzY3MSwxNiBAQAogICAgICAgLyogRW5hYmxlIHRoZSBUSU0gSW5wdXQgQ2FwdHVyZSAgRE1BIHJlcXVlc3QgKi8KICAgICAgIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIFRJTV9ETUFfQ0MyKTsKIAorICAgICAgLyogRW5hYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgY2hhbm5lbCAqLworICAgICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIFRJTV9DSEFOTkVMXzIsIFRJTV9DQ3hfRU5BQkxFKTsKKwogICAgICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogCi0gICAgICAvKiBFbmFibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsICovCi0gICAgICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgVElNX0NIQU5ORUxfMiwgVElNX0NDeF9FTkFCTEUpOwogICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBUSU1fQ0hBTk5FTF9BTEw6CisgICAgZGVmYXVsdDoKICAgICB7CiAgICAgICAvKiBTZXQgdGhlIERNQSBjYXB0dXJlIGNhbGxiYWNrcyAqLwogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BQ2FwdHVyZUNwbHQ7CkBAIC0zNjE3LDcgKzM2OTEsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMSwgKHVpbnQzMl90KXBEYXRhMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0zNjMyLDI3ICszNzA2LDI2IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IyLCAodWludDMyX3QpcERhdGEyLAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KLSAgICAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwotICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKLQotICAgICAgLyogRW5hYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgY2hhbm5lbCAqLwotICAgICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIFRJTV9DSEFOTkVMXzEsIFRJTV9DQ3hfRU5BQkxFKTsKLSAgICAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBUSU1fQ0hBTk5FTF8yLCBUSU1fQ0N4X0VOQUJMRSk7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgVElNIElucHV0IENhcHR1cmUgIERNQSByZXF1ZXN0ICovCiAgICAgICBfX0hBTF9USU1fRU5BQkxFX0RNQShodGltLCBUSU1fRE1BX0NDMSk7CiAgICAgICAvKiBFbmFibGUgdGhlIFRJTSBJbnB1dCBDYXB0dXJlICBETUEgcmVxdWVzdCAqLwogICAgICAgX19IQUxfVElNX0VOQUJMRV9ETUEoaHRpbSwgVElNX0RNQV9DQzIpOworCisgICAgICAvKiBFbmFibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsICovCisgICAgICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgVElNX0NIQU5ORUxfMSwgVElNX0NDeF9FTkFCTEUpOworICAgICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIFRJTV9DSEFOTkVMXzIsIFRJTV9DQ3hfRU5BQkxFKTsKKworICAgICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCisgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworCiAgICAgICBicmVhazsKICAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7CiAgIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCkBAIC0zOTY1LDYgKzQwMzgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJTV9PQ19Jbml0VHlwZURlZiAqc0NvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBDaGFubmVsKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DSEFOTkVMUyhDaGFubmVsKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fT0NfTU9ERShzQ29uZmlnLT5PQ01vZGUpKTsKQEAgLTQwMTYsMTIgKzQwOTEsMTMgQEAKICAgICB9CiAKICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAogICBfX0hBTF9VTkxPQ0soaHRpbSk7CiAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC00MDM5LDYgKzQxMTUsOCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9JQ19Db25maWdDaGFubmVsKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBjb25zdCBUSU1fSUNfSW5pdFR5cGVEZWYgKnNDb25maWcsIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX1BPTEFSSVRZKHNDb25maWctPklDUG9sYXJpdHkpKTsKQEAgLTQwOTUsNyArNDE3Myw3IEBACiAgICAgLyogU2V0IHRoZSBJQzNQU0MgdmFsdWUgKi8KICAgICBodGltLT5JbnN0YW5jZS0+Q0NNUjIgfD0gc0NvbmZpZy0+SUNQcmVzY2FsZXI7CiAgIH0KLSAgZWxzZQorICBlbHNlIGlmIChDaGFubmVsID09IFRJTV9DSEFOTkVMXzQpCiAgIHsKICAgICAvKiBUSTQgQ29uZmlndXJhdGlvbiAqLwogICAgIGFzc2VydF9wYXJhbShJU19USU1fQ0M0X0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CkBAIC00MTExLDEwICs0MTg5LDE0IEBACiAgICAgLyogU2V0IHRoZSBJQzRQU0MgdmFsdWUgKi8KICAgICBodGltLT5JbnN0YW5jZS0+Q0NNUjIgfD0gKHNDb25maWctPklDUHJlc2NhbGVyIDw8IDhVKTsKICAgfQorICBlbHNlCisgIHsKKyAgICBzdGF0dXMgPSBIQUxfRVJST1I7CisgIH0KIAogICBfX0hBTF9VTkxPQ0soaHRpbSk7CiAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC00MTM0LDYgKzQyMTYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSU1fT0NfSW5pdFR5cGVEZWYgKnNDb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NIQU5ORUxTKENoYW5uZWwpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9QV01fTU9ERShzQ29uZmlnLT5PQ01vZGUpKTsKQEAgLTQyMTQsMTIgKzQyOTgsMTMgQEAKICAgICB9CiAKICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAogICBfX0hBTF9VTkxPQ0soaHRpbSk7CiAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC00MjQ0LDYgKzQzMjksNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9PbmVQdWxzZV9Db25maWdDaGFubmVsKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCAgVElNX09uZVB1bHNlX0luaXRUeXBlRGVmICpzQ29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE91dHB1dENoYW5uZWwsICB1aW50MzJfdCBJbnB1dENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgVElNX09DX0luaXRUeXBlRGVmIHRlbXAxOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCkBAIC00Mjc0LDYgKzQzNjAsNyBAQAogICAgICAgICBUSU1fT0MxX1NldENvbmZpZyhodGltLT5JbnN0YW5jZSwgJnRlbXAxKTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CisKICAgICAgIGNhc2UgVElNX0NIQU5ORUxfMjoKICAgICAgIHsKICAgICAgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQzJfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKQEAgLTQyODEsNjAgKzQzNjgsNjcgQEAKICAgICAgICAgVElNX09DMl9TZXRDb25maWcoaHRpbS0+SW5zdGFuY2UsICZ0ZW1wMSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQorCiAgICAgICBkZWZhdWx0OgorICAgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHN3aXRjaCAoSW5wdXRDaGFubmVsKQorICAgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICAgIHsKLSAgICAgIGNhc2UgVElNX0NIQU5ORUxfMToKKyAgICAgIHN3aXRjaCAoSW5wdXRDaGFubmVsKQogICAgICAgewotICAgICAgICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworICAgICAgICBjYXNlIFRJTV9DSEFOTkVMXzE6CisgICAgICAgIHsKKyAgICAgICAgICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCi0gICAgICAgIFRJTV9USTFfU2V0Q29uZmlnKGh0aW0tPkluc3RhbmNlLCBzQ29uZmlnLT5JQ1BvbGFyaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICBzQ29uZmlnLT5JQ1NlbGVjdGlvbiwgc0NvbmZpZy0+SUNGaWx0ZXIpOworICAgICAgICAgIFRJTV9USTFfU2V0Q29uZmlnKGh0aW0tPkluc3RhbmNlLCBzQ29uZmlnLT5JQ1BvbGFyaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNDb25maWctPklDU2VsZWN0aW9uLCBzQ29uZmlnLT5JQ0ZpbHRlcik7CiAKLSAgICAgICAgLyogUmVzZXQgdGhlIElDMVBTQyBCaXRzICovCi0gICAgICAgIGh0aW0tPkluc3RhbmNlLT5DQ01SMSAmPSB+VElNX0NDTVIxX0lDMVBTQzsKKyAgICAgICAgICAvKiBSZXNldCB0aGUgSUMxUFNDIEJpdHMgKi8KKyAgICAgICAgICBodGltLT5JbnN0YW5jZS0+Q0NNUjEgJj0gflRJTV9DQ01SMV9JQzFQU0M7CiAKLSAgICAgICAgLyogU2VsZWN0IHRoZSBUcmlnZ2VyIHNvdXJjZSAqLwotICAgICAgICBodGltLT5JbnN0YW5jZS0+U01DUiAmPSB+VElNX1NNQ1JfVFM7Ci0gICAgICAgIGh0aW0tPkluc3RhbmNlLT5TTUNSIHw9IFRJTV9UU19USTFGUDE7CisgICAgICAgICAgLyogU2VsZWN0IHRoZSBUcmlnZ2VyIHNvdXJjZSAqLworICAgICAgICAgIGh0aW0tPkluc3RhbmNlLT5TTUNSICY9IH5USU1fU01DUl9UUzsKKyAgICAgICAgICBodGltLT5JbnN0YW5jZS0+U01DUiB8PSBUSU1fVFNfVEkxRlAxOwogCi0gICAgICAgIC8qIFNlbGVjdCB0aGUgU2xhdmUgTW9kZSAqLwotICAgICAgICBodGltLT5JbnN0YW5jZS0+U01DUiAmPSB+VElNX1NNQ1JfU01TOwotICAgICAgICBodGltLT5JbnN0YW5jZS0+U01DUiB8PSBUSU1fU0xBVkVNT0RFX1RSSUdHRVI7Ci0gICAgICAgIGJyZWFrOworICAgICAgICAgIC8qIFNlbGVjdCB0aGUgU2xhdmUgTW9kZSAqLworICAgICAgICAgIGh0aW0tPkluc3RhbmNlLT5TTUNSICY9IH5USU1fU01DUl9TTVM7CisgICAgICAgICAgaHRpbS0+SW5zdGFuY2UtPlNNQ1IgfD0gVElNX1NMQVZFTU9ERV9UUklHR0VSOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUSU1fQ0hBTk5FTF8yOgorICAgICAgICB7CisgICAgICAgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQzJfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKworICAgICAgICAgIFRJTV9USTJfU2V0Q29uZmlnKGh0aW0tPkluc3RhbmNlLCBzQ29uZmlnLT5JQ1BvbGFyaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNDb25maWctPklDU2VsZWN0aW9uLCBzQ29uZmlnLT5JQ0ZpbHRlcik7CisKKyAgICAgICAgICAvKiBSZXNldCB0aGUgSUMyUFNDIEJpdHMgKi8KKyAgICAgICAgICBodGltLT5JbnN0YW5jZS0+Q0NNUjEgJj0gflRJTV9DQ01SMV9JQzJQU0M7CisKKyAgICAgICAgICAvKiBTZWxlY3QgdGhlIFRyaWdnZXIgc291cmNlICovCisgICAgICAgICAgaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJj0gflRJTV9TTUNSX1RTOworICAgICAgICAgIGh0aW0tPkluc3RhbmNlLT5TTUNSIHw9IFRJTV9UU19USTJGUDI7CisKKyAgICAgICAgICAvKiBTZWxlY3QgdGhlIFNsYXZlIE1vZGUgKi8KKyAgICAgICAgICBodGltLT5JbnN0YW5jZS0+U01DUiAmPSB+VElNX1NNQ1JfU01TOworICAgICAgICAgIGh0aW0tPkluc3RhbmNlLT5TTUNSIHw9IFRJTV9TTEFWRU1PREVfVFJJR0dFUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOworICAgICAgICAgIGJyZWFrOwogICAgICAgfQotICAgICAgY2FzZSBUSU1fQ0hBTk5FTF8yOgotICAgICAgewotICAgICAgICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwotCi0gICAgICAgIFRJTV9USTJfU2V0Q29uZmlnKGh0aW0tPkluc3RhbmNlLCBzQ29uZmlnLT5JQ1BvbGFyaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICBzQ29uZmlnLT5JQ1NlbGVjdGlvbiwgc0NvbmZpZy0+SUNGaWx0ZXIpOwotCi0gICAgICAgIC8qIFJlc2V0IHRoZSBJQzJQU0MgQml0cyAqLwotICAgICAgICBodGltLT5JbnN0YW5jZS0+Q0NNUjEgJj0gflRJTV9DQ01SMV9JQzJQU0M7Ci0KLSAgICAgICAgLyogU2VsZWN0IHRoZSBUcmlnZ2VyIHNvdXJjZSAqLwotICAgICAgICBodGltLT5JbnN0YW5jZS0+U01DUiAmPSB+VElNX1NNQ1JfVFM7Ci0gICAgICAgIGh0aW0tPkluc3RhbmNlLT5TTUNSIHw9IFRJTV9UU19USTJGUDI7Ci0KLSAgICAgICAgLyogU2VsZWN0IHRoZSBTbGF2ZSBNb2RlICovCi0gICAgICAgIGh0aW0tPkluc3RhbmNlLT5TTUNSICY9IH5USU1fU01DUl9TTVM7Ci0gICAgICAgIGh0aW0tPkluc3RhbmNlLT5TTUNSIHw9IFRJTV9TTEFWRU1PREVfVFJJR0dFUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKIAogICAgIF9fSEFMX1VOTE9DSyhodGltKTsKIAotICAgIHJldHVybiBIQUxfT0s7CisgICAgcmV0dXJuIHN0YXR1czsKICAgfQogICBlbHNlCiAgIHsKQEAgLTQzODMsOCArNDQ3NywxNCBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9Xcml0ZVN0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdEJhc2VBZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgY29uc3QgdWludDMyX3QgKkJ1cnN0QnVmZmVyLCB1aW50MzJfdCAgQnVyc3RMZW5ndGgpCiB7Ci0gIHJldHVybiBIQUxfVElNX0RNQUJ1cnN0X011bHRpV3JpdGVTdGFydChodGltLCBCdXJzdEJhc2VBZGRyZXNzLCBCdXJzdFJlcXVlc3RTcmMsIEJ1cnN0QnVmZmVyLCBCdXJzdExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQnVyc3RMZW5ndGgpID4+IDhVKSArIDFVKTsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOworCisgIHN0YXR1cyA9IEhBTF9USU1fRE1BQnVyc3RfTXVsdGlXcml0ZVN0YXJ0KGh0aW0sIEJ1cnN0QmFzZUFkZHJlc3MsIEJ1cnN0UmVxdWVzdFNyYywgQnVyc3RCdWZmZXIsIEJ1cnN0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSk7CisKKworCisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtNDQzMCw2ICs0NTMwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgY29uc3QgdWludDMyX3QgKkJ1cnN0QnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgIEJ1cnN0TGVuZ3RoLCAgdWludDMyX3QgIERhdGFMZW5ndGgpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQUJVUlNUX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX0JBU0UoQnVyc3RCYXNlQWRkcmVzcykpOwpAQCAtNDQ1Niw2ICs0NTU4LDcgQEAKICAgewogICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KICAgfQorCiAgIHN3aXRjaCAoQnVyc3RSZXF1ZXN0U3JjKQogICB7CiAgICAgY2FzZSBUSU1fRE1BX1VQREFURToKQEAgLTQ0NjksNyArNDU3Miw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9VUERBVEVdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC00NDg3LDcgKzQ1OTAsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtNDUwNSw3ICs0NjA4LDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTQ1MjMsNyArNDYyNiw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC00NTQxLDcgKzQ2NDQsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtNDU1OSw3ICs0NjYyLDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NPTU1VVEFUSU9OXSwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtNDU3Nyw3ICs0NjgwLDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1RSSUdHRVJdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC00NTg1LDE2ICs0Njg4LDIwIEBACiAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogQ29uZmlndXJlIHRoZSBETUEgQnVyc3QgTW9kZSAqLwotICBodGltLT5JbnN0YW5jZS0+RENSID0gKEJ1cnN0QmFzZUFkZHJlc3MgfCBCdXJzdExlbmd0aCk7Ci0gIC8qIEVuYWJsZSB0aGUgVElNIERNQSBSZXF1ZXN0ICovCi0gIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQorICB7CisgICAgLyogQ29uZmlndXJlIHRoZSBETUEgQnVyc3QgTW9kZSAqLworICAgIGh0aW0tPkluc3RhbmNlLT5EQ1IgPSAoQnVyc3RCYXNlQWRkcmVzcyB8IEJ1cnN0TGVuZ3RoKTsKKyAgICAvKiBFbmFibGUgdGhlIFRJTSBETUEgUmVxdWVzdCAqLworICAgIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CisgIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtNDYwNSw2ICs0NzEyLDggQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RfV3JpdGVTdG9wKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9TT1VSQ0UoQnVyc3RSZXF1ZXN0U3JjKSk7CiAKQEAgLTQ2NDcsMTcgKzQ3NTYsMjEgQEAKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAotICAvKiBEaXNhYmxlIHRoZSBUSU0gVXBkYXRlIERNQSByZXF1ZXN0ICovCi0gIF9fSEFMX1RJTV9ESVNBQkxFX0RNQShodGltLCBCdXJzdFJlcXVlc3RTcmMpOworICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgeworICAgIC8qIERpc2FibGUgdGhlIFRJTSBVcGRhdGUgRE1BIHJlcXVlc3QgKi8KKyAgICBfX0hBTF9USU1fRElTQUJMRV9ETUEoaHRpbSwgQnVyc3RSZXF1ZXN0U3JjKTsKIAotICAvKiBDaGFuZ2UgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KLSAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisgICAgLyogQ2hhbmdlIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgICAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisgIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtNDcwMSw4ICs0ODE0LDEzIEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X1JlYWRTdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RCYXNlQWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgdWludDMyX3QgICpCdXJzdEJ1ZmZlciwgdWludDMyX3QgIEJ1cnN0TGVuZ3RoKQogewotICByZXR1cm4gSEFMX1RJTV9ETUFCdXJzdF9NdWx0aVJlYWRTdGFydChodGltLCBCdXJzdEJhc2VBZGRyZXNzLCBCdXJzdFJlcXVlc3RTcmMsIEJ1cnN0QnVmZmVyLCBCdXJzdExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpOworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CisKKyAgc3RhdHVzID0gSEFMX1RJTV9ETUFCdXJzdF9NdWx0aVJlYWRTdGFydChodGltLCBCdXJzdEJhc2VBZGRyZXNzLCBCdXJzdFJlcXVlc3RTcmMsIEJ1cnN0QnVmZmVyLCBCdXJzdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSk7CisKKworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTQ3NDgsNiArNDg2Niw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgdWludDMyX3QgICpCdXJzdEJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgIEJ1cnN0TGVuZ3RoLCB1aW50MzJfdCAgRGF0YUxlbmd0aCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BQlVSU1RfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfQkFTRShCdXJzdEJhc2VBZGRyZXNzKSk7CkBAIC00Nzg3LDcgKzQ5MDcsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfVVBEQVRFXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtNDgwNSw3ICs0OTI1LDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTQ4MjMsNyArNDk0Myw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC00ODQxLDcgKzQ5NjEsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtNDg1OSw3ICs0OTc5LDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTQ4NzcsNyArNDk5Nyw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DT01NVVRBVElPTl0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTQ4OTUsNyArNTAxNSw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9UUklHR0VSXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtNDkwMywxNyArNTAyMywyMSBAQAogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIENvbmZpZ3VyZSB0aGUgRE1BIEJ1cnN0IE1vZGUgKi8KLSAgaHRpbS0+SW5zdGFuY2UtPkRDUiA9IChCdXJzdEJhc2VBZGRyZXNzIHwgQnVyc3RMZW5ndGgpOworICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgeworICAgIC8qIENvbmZpZ3VyZSB0aGUgRE1BIEJ1cnN0IE1vZGUgKi8KKyAgICBodGltLT5JbnN0YW5jZS0+RENSID0gKEJ1cnN0QmFzZUFkZHJlc3MgfCBCdXJzdExlbmd0aCk7CiAKLSAgLyogRW5hYmxlIHRoZSBUSU0gRE1BIFJlcXVlc3QgKi8KLSAgX19IQUxfVElNX0VOQUJMRV9ETUEoaHRpbSwgQnVyc3RSZXF1ZXN0U3JjKTsKKyAgICAvKiBFbmFibGUgdGhlIFRJTSBETUEgUmVxdWVzdCAqLworICAgIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CisgIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtNDkyNCw2ICs1MDQ4LDggQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RfUmVhZFN0b3AoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYykKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX1NPVVJDRShCdXJzdFJlcXVlc3RTcmMpKTsKIApAQCAtNDk2NiwxNyArNTA5MiwyMSBAQAogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIERpc2FibGUgdGhlIFRJTSBVcGRhdGUgRE1BIHJlcXVlc3QgKi8KLSAgX19IQUxfVElNX0RJU0FCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQorICB7CisgICAgLyogRGlzYWJsZSB0aGUgVElNIFVwZGF0ZSBETUEgcmVxdWVzdCAqLworICAgIF9fSEFMX1RJTV9ESVNBQkxFX0RNQShodGltLCBCdXJzdFJlcXVlc3RTcmMpOwogCi0gIC8qIENoYW5nZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLwotICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRUFEWTsKKyAgICAvKiBDaGFuZ2UgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRUFEWTsKKyAgfQogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC01MDQwLDYgKzUxNzAsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJTV9DbGVhcklucHV0Q29uZmlnVHlwZURlZiAqc0NsZWFySW5wdXRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQ2hhbm5lbCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fT0NYUkVGX0NMRUFSX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0xFQVJJTlBVVF9TT1VSQ0Uoc0NsZWFySW5wdXRDb25maWctPkNsZWFySW5wdXRTb3VyY2UpKTsKQEAgLTUwODEsNzYgKzUyMTMsODAgQEAKICAgICB9CiAKICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAotICBzd2l0Y2ggKENoYW5uZWwpCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7Ci0gICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgorICAgIHN3aXRjaCAoQ2hhbm5lbCkKICAgICB7Ci0gICAgICBpZiAoc0NsZWFySW5wdXRDb25maWctPkNsZWFySW5wdXRTdGF0ZSAhPSAodWludDMyX3QpRElTQUJMRSkKKyAgICAgIGNhc2UgVElNX0NIQU5ORUxfMToKICAgICAgIHsKLSAgICAgICAgLyogRW5hYmxlIHRoZSBPQ1JFRiBjbGVhciBmZWF0dXJlIGZvciBDaGFubmVsIDEgKi8KLSAgICAgICAgU0VUX0JJVChodGltLT5JbnN0YW5jZS0+Q0NNUjEsIFRJTV9DQ01SMV9PQzFDRSk7CisgICAgICAgIGlmIChzQ2xlYXJJbnB1dENvbmZpZy0+Q2xlYXJJbnB1dFN0YXRlICE9ICh1aW50MzJfdClESVNBQkxFKQorICAgICAgICB7CisgICAgICAgICAgLyogRW5hYmxlIHRoZSBPQ1JFRiBjbGVhciBmZWF0dXJlIGZvciBDaGFubmVsIDEgKi8KKyAgICAgICAgICBTRVRfQklUKGh0aW0tPkluc3RhbmNlLT5DQ01SMSwgVElNX0NDTVIxX09DMUNFKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBEaXNhYmxlIHRoZSBPQ1JFRiBjbGVhciBmZWF0dXJlIGZvciBDaGFubmVsIDEgKi8KKyAgICAgICAgICBDTEVBUl9CSVQoaHRpbS0+SW5zdGFuY2UtPkNDTVIxLCBUSU1fQ0NNUjFfT0MxQ0UpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgfQotICAgICAgZWxzZQorICAgICAgY2FzZSBUSU1fQ0hBTk5FTF8yOgogICAgICAgewotICAgICAgICAvKiBEaXNhYmxlIHRoZSBPQ1JFRiBjbGVhciBmZWF0dXJlIGZvciBDaGFubmVsIDEgKi8KLSAgICAgICAgQ0xFQVJfQklUKGh0aW0tPkluc3RhbmNlLT5DQ01SMSwgVElNX0NDTVIxX09DMUNFKTsKKyAgICAgICAgaWYgKHNDbGVhcklucHV0Q29uZmlnLT5DbGVhcklucHV0U3RhdGUgIT0gKHVpbnQzMl90KURJU0FCTEUpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBFbmFibGUgdGhlIE9DUkVGIGNsZWFyIGZlYXR1cmUgZm9yIENoYW5uZWwgMiAqLworICAgICAgICAgIFNFVF9CSVQoaHRpbS0+SW5zdGFuY2UtPkNDTVIxLCBUSU1fQ0NNUjFfT0MyQ0UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIERpc2FibGUgdGhlIE9DUkVGIGNsZWFyIGZlYXR1cmUgZm9yIENoYW5uZWwgMiAqLworICAgICAgICAgIENMRUFSX0JJVChodGltLT5JbnN0YW5jZS0+Q0NNUjEsIFRJTV9DQ01SMV9PQzJDRSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgVElNX0NIQU5ORUxfMzoKKyAgICAgIHsKKyAgICAgICAgaWYgKHNDbGVhcklucHV0Q29uZmlnLT5DbGVhcklucHV0U3RhdGUgIT0gKHVpbnQzMl90KURJU0FCTEUpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBFbmFibGUgdGhlIE9DUkVGIGNsZWFyIGZlYXR1cmUgZm9yIENoYW5uZWwgMyAqLworICAgICAgICAgIFNFVF9CSVQoaHRpbS0+SW5zdGFuY2UtPkNDTVIyLCBUSU1fQ0NNUjJfT0MzQ0UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIERpc2FibGUgdGhlIE9DUkVGIGNsZWFyIGZlYXR1cmUgZm9yIENoYW5uZWwgMyAqLworICAgICAgICAgIENMRUFSX0JJVChodGltLT5JbnN0YW5jZS0+Q0NNUjIsIFRJTV9DQ01SMl9PQzNDRSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIFRJTV9DSEFOTkVMXzQ6CisgICAgICB7CisgICAgICAgIGlmIChzQ2xlYXJJbnB1dENvbmZpZy0+Q2xlYXJJbnB1dFN0YXRlICE9ICh1aW50MzJfdClESVNBQkxFKQorICAgICAgICB7CisgICAgICAgICAgLyogRW5hYmxlIHRoZSBPQ1JFRiBjbGVhciBmZWF0dXJlIGZvciBDaGFubmVsIDQgKi8KKyAgICAgICAgICBTRVRfQklUKGh0aW0tPkluc3RhbmNlLT5DQ01SMiwgVElNX0NDTVIyX09DNENFKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBEaXNhYmxlIHRoZSBPQ1JFRiBjbGVhciBmZWF0dXJlIGZvciBDaGFubmVsIDQgKi8KKyAgICAgICAgICBDTEVBUl9CSVQoaHRpbS0+SW5zdGFuY2UtPkNDTVIyLCBUSU1fQ0NNUjJfT0M0Q0UpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVElNX0NIQU5ORUxfMjoKLSAgICB7Ci0gICAgICBpZiAoc0NsZWFySW5wdXRDb25maWctPkNsZWFySW5wdXRTdGF0ZSAhPSAodWludDMyX3QpRElTQUJMRSkKLSAgICAgIHsKLSAgICAgICAgLyogRW5hYmxlIHRoZSBPQ1JFRiBjbGVhciBmZWF0dXJlIGZvciBDaGFubmVsIDIgKi8KLSAgICAgICAgU0VUX0JJVChodGltLT5JbnN0YW5jZS0+Q0NNUjEsIFRJTV9DQ01SMV9PQzJDRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8qIERpc2FibGUgdGhlIE9DUkVGIGNsZWFyIGZlYXR1cmUgZm9yIENoYW5uZWwgMiAqLwotICAgICAgICBDTEVBUl9CSVQoaHRpbS0+SW5zdGFuY2UtPkNDTVIxLCBUSU1fQ0NNUjFfT0MyQ0UpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVElNX0NIQU5ORUxfMzoKLSAgICB7Ci0gICAgICBpZiAoc0NsZWFySW5wdXRDb25maWctPkNsZWFySW5wdXRTdGF0ZSAhPSAodWludDMyX3QpRElTQUJMRSkKLSAgICAgIHsKLSAgICAgICAgLyogRW5hYmxlIHRoZSBPQ1JFRiBjbGVhciBmZWF0dXJlIGZvciBDaGFubmVsIDMgKi8KLSAgICAgICAgU0VUX0JJVChodGltLT5JbnN0YW5jZS0+Q0NNUjIsIFRJTV9DQ01SMl9PQzNDRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8qIERpc2FibGUgdGhlIE9DUkVGIGNsZWFyIGZlYXR1cmUgZm9yIENoYW5uZWwgMyAqLwotICAgICAgICBDTEVBUl9CSVQoaHRpbS0+SW5zdGFuY2UtPkNDTVIyLCBUSU1fQ0NNUjJfT0MzQ0UpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVElNX0NIQU5ORUxfNDoKLSAgICB7Ci0gICAgICBpZiAoc0NsZWFySW5wdXRDb25maWctPkNsZWFySW5wdXRTdGF0ZSAhPSAodWludDMyX3QpRElTQUJMRSkKLSAgICAgIHsKLSAgICAgICAgLyogRW5hYmxlIHRoZSBPQ1JFRiBjbGVhciBmZWF0dXJlIGZvciBDaGFubmVsIDQgKi8KLSAgICAgICAgU0VUX0JJVChodGltLT5JbnN0YW5jZS0+Q0NNUjIsIFRJTV9DQ01SMl9PQzRDRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8qIERpc2FibGUgdGhlIE9DUkVGIGNsZWFyIGZlYXR1cmUgZm9yIENoYW5uZWwgNCAqLwotICAgICAgICBDTEVBUl9CSVQoaHRpbS0+SW5zdGFuY2UtPkNDTVIyLCBUSU1fQ0NNUjJfT0M0Q0UpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKICAgfQogCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKIAogICBfX0hBTF9VTkxPQ0soaHRpbSk7CiAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC01MTYyLDYgKzUyOTgsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9Db25maWdDbG9ja1NvdXJjZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgY29uc3QgVElNX0Nsb2NrQ29uZmlnVHlwZURlZiAqc0Nsb2NrU291cmNlQ29uZmlnKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIHVpbnQzMl90IHRtcHNtY3I7CiAKICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KQEAgLTUyODIsMjIgKzU0MTksMjMgQEAKICAgICBjYXNlIFRJTV9DTE9DS1NPVVJDRV9JVFIxOgogICAgIGNhc2UgVElNX0NMT0NLU09VUkNFX0lUUjI6CiAgICAgY2FzZSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMzoKLSAgICAgIHsKLSAgICAgICAgLyogQ2hlY2sgd2hldGhlciBvciBub3QgdGhlIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGludGVybmFsIHRyaWdnZXIgaW5wdXQgKi8KLSAgICAgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DTE9DS1NPVVJDRV9JVFJYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisgICAgeworICAgICAgLyogQ2hlY2sgd2hldGhlciBvciBub3QgdGhlIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGludGVybmFsIHRyaWdnZXIgaW5wdXQgKi8KKyAgICAgIGFzc2VydF9wYXJhbShJU19USU1fQ0xPQ0tTT1VSQ0VfSVRSWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCi0gICAgICAgIFRJTV9JVFJ4X1NldENvbmZpZyhodGltLT5JbnN0YW5jZSwgc0Nsb2NrU291cmNlQ29uZmlnLT5DbG9ja1NvdXJjZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQorICAgICAgVElNX0lUUnhfU2V0Q29uZmlnKGh0aW0tPkluc3RhbmNlLCBzQ2xvY2tTb3VyY2VDb25maWctPkNsb2NrU291cmNlKTsKKyAgICAgIGJyZWFrOworICAgIH0KIAogICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICBicmVhazsKICAgfQogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CiAKICAgX19IQUxfVU5MT0NLKGh0aW0pOwogCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtNTcwMSw4ICs1ODM5LDYgQEAKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhodGltKTsKIAogICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKICAgewpAQCAtNTgxOCw3ICs1OTU0LDcgQEAKIAogICAgICAgZGVmYXVsdCA6CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KLSAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgICBicmVhazsKICAgICB9CiAgIH0KQEAgLTU4ODQsMTkgKzYwMjAsMTYgQEAKIAogICAgICAgZGVmYXVsdCA6CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KLSAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgICBicmVhazsKICAgICB9CiAgIH0KICAgZWxzZQogICB7CiAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwotICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhodGltKTsKLQogICByZXR1cm4gc3RhdHVzOwogfQogCkBAIC01OTM5LDkgKzYwNzIsNiBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhodGltKTsKLQogICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKQEAgLTYwODMsNyArNjIxMyw3IEBACiAKICAgICAgIGRlZmF1bHQgOgogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCi0gICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CkBAIC02MTYzLDE5ICs2MjkzLDE2IEBACiAKICAgICAgIGRlZmF1bHQgOgogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCi0gICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UKICAgewogICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KLSAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOworICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaHRpbSk7Ci0KICAgcmV0dXJuIHN0YXR1czsKIH0KICNlbmRpZiAvKiBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KQEAgLTY2OTYsMTEgKzY4MjMsMTIgQEAKICAgdWludDMyX3QgdG1wY2NlcjsKICAgdWludDMyX3QgdG1wY3IyOwogCisgIC8qIEdldCB0aGUgVElNeCBDQ0VSIHJlZ2lzdGVyIHZhbHVlICovCisgIHRtcGNjZXIgPSBUSU14LT5DQ0VSOworCiAgIC8qIERpc2FibGUgdGhlIENoYW5uZWwgMTogUmVzZXQgdGhlIENDMUUgQml0ICovCiAgIFRJTXgtPkNDRVIgJj0gflRJTV9DQ0VSX0NDMUU7CiAKLSAgLyogR2V0IHRoZSBUSU14IENDRVIgcmVnaXN0ZXIgdmFsdWUgKi8KLSAgdG1wY2NlciA9IFRJTXgtPkNDRVI7CiAgIC8qIEdldCB0aGUgVElNeCBDUjIgcmVnaXN0ZXIgdmFsdWUgKi8KICAgdG1wY3IyID0gIFRJTXgtPkNSMjsKIApAQCAtNjc3MSwxMSArNjg5OSwxMiBAQAogICB1aW50MzJfdCB0bXBjY2VyOwogICB1aW50MzJfdCB0bXBjcjI7CiAKKyAgLyogR2V0IHRoZSBUSU14IENDRVIgcmVnaXN0ZXIgdmFsdWUgKi8KKyAgdG1wY2NlciA9IFRJTXgtPkNDRVI7CisKICAgLyogRGlzYWJsZSB0aGUgQ2hhbm5lbCAyOiBSZXNldCB0aGUgQ0MyRSBCaXQgKi8KICAgVElNeC0+Q0NFUiAmPSB+VElNX0NDRVJfQ0MyRTsKIAotICAvKiBHZXQgdGhlIFRJTXggQ0NFUiByZWdpc3RlciB2YWx1ZSAqLwotICB0bXBjY2VyID0gVElNeC0+Q0NFUjsKICAgLyogR2V0IHRoZSBUSU14IENSMiByZWdpc3RlciB2YWx1ZSAqLwogICB0bXBjcjIgPSAgVElNeC0+Q1IyOwogCkBAIC02ODQ3LDExICs2OTc2LDEyIEBACiAgIHVpbnQzMl90IHRtcGNjZXI7CiAgIHVpbnQzMl90IHRtcGNyMjsKIAorICAvKiBHZXQgdGhlIFRJTXggQ0NFUiByZWdpc3RlciB2YWx1ZSAqLworICB0bXBjY2VyID0gVElNeC0+Q0NFUjsKKwogICAvKiBEaXNhYmxlIHRoZSBDaGFubmVsIDM6IFJlc2V0IHRoZSBDQzJFIEJpdCAqLwogICBUSU14LT5DQ0VSICY9IH5USU1fQ0NFUl9DQzNFOwogCi0gIC8qIEdldCB0aGUgVElNeCBDQ0VSIHJlZ2lzdGVyIHZhbHVlICovCi0gIHRtcGNjZXIgPSBUSU14LT5DQ0VSOwogICAvKiBHZXQgdGhlIFRJTXggQ1IyIHJlZ2lzdGVyIHZhbHVlICovCiAgIHRtcGNyMiA9ICBUSU14LT5DUjI7CiAKQEAgLTY5MjEsMTEgKzcwNTEsMTIgQEAKICAgdWludDMyX3QgdG1wY2NlcjsKICAgdWludDMyX3QgdG1wY3IyOwogCisgIC8qIEdldCB0aGUgVElNeCBDQ0VSIHJlZ2lzdGVyIHZhbHVlICovCisgIHRtcGNjZXIgPSBUSU14LT5DQ0VSOworCiAgIC8qIERpc2FibGUgdGhlIENoYW5uZWwgNDogUmVzZXQgdGhlIENDNEUgQml0ICovCiAgIFRJTXgtPkNDRVIgJj0gflRJTV9DQ0VSX0NDNEU7CiAKLSAgLyogR2V0IHRoZSBUSU14IENDRVIgcmVnaXN0ZXIgdmFsdWUgKi8KLSAgdG1wY2NlciA9IFRJTXgtPkNDRVI7CiAgIC8qIEdldCB0aGUgVElNeCBDUjIgcmVnaXN0ZXIgdmFsdWUgKi8KICAgdG1wY3IyID0gIFRJTXgtPkNSMjsKIApAQCAtNjk3OCw2ICs3MTA5LDcgQEAKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBUSU1fU2xhdmVUaW1lcl9TZXRDb25maWcoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJTV9TbGF2ZUNvbmZpZ1R5cGVEZWYgKnNTbGF2ZUNvbmZpZykKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICB1aW50MzJfdCB0bXBzbWNyOwogICB1aW50MzJfdCB0bXBjY21yMTsKICAgdWludDMyX3QgdG1wY2NlcjsKQEAgLTcwNzQsMTYgKzcyMDYsMTggQEAKICAgICBjYXNlIFRJTV9UU19JVFIxOgogICAgIGNhc2UgVElNX1RTX0lUUjI6CiAgICAgY2FzZSBUSU1fVFNfSVRSMzoKLSAgICAgIHsKLSAgICAgICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlciAqLwotICAgICAgICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KKyAgICB7CisgICAgICAvKiBDaGVjayB0aGUgcGFyYW1ldGVyICovCisgICAgICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9Ci0gIHJldHVybiBIQUxfT0s7CisKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC03MTEzLDkgKzcyNDcsOSBAQAogICB1aW50MzJfdCB0bXBjY2VyOwogCiAgIC8qIERpc2FibGUgdGhlIENoYW5uZWwgMTogUmVzZXQgdGhlIENDMUUgQml0ICovCisgIHRtcGNjZXIgPSBUSU14LT5DQ0VSOwogICBUSU14LT5DQ0VSICY9IH5USU1fQ0NFUl9DQzFFOwogICB0bXBjY21yMSA9IFRJTXgtPkNDTVIxOwotICB0bXBjY2VyID0gVElNeC0+Q0NFUjsKIAogICAvKiBTZWxlY3QgdGhlIElucHV0ICovCiAgIGlmIChJU19USU1fQ0MyX0lOU1RBTkNFKFRJTXgpICE9IFJFU0VUKQpAQCAtNzIwMyw5ICs3MzM3LDkgQEAKICAgdWludDMyX3QgdG1wY2NlcjsKIAogICAvKiBEaXNhYmxlIHRoZSBDaGFubmVsIDI6IFJlc2V0IHRoZSBDQzJFIEJpdCAqLworICB0bXBjY2VyID0gVElNeC0+Q0NFUjsKICAgVElNeC0+Q0NFUiAmPSB+VElNX0NDRVJfQ0MyRTsKICAgdG1wY2NtcjEgPSBUSU14LT5DQ01SMTsKLSAgdG1wY2NlciA9IFRJTXgtPkNDRVI7CiAKICAgLyogU2VsZWN0IHRoZSBJbnB1dCAqLwogICB0bXBjY21yMSAmPSB+VElNX0NDTVIxX0NDMlM7CkBAIC03MjQyLDkgKzczNzYsOSBAQAogICB1aW50MzJfdCB0bXBjY2VyOwogCiAgIC8qIERpc2FibGUgdGhlIENoYW5uZWwgMjogUmVzZXQgdGhlIENDMkUgQml0ICovCisgIHRtcGNjZXIgPSBUSU14LT5DQ0VSOwogICBUSU14LT5DQ0VSICY9IH5USU1fQ0NFUl9DQzJFOwogICB0bXBjY21yMSA9IFRJTXgtPkNDTVIxOwotICB0bXBjY2VyID0gVElNeC0+Q0NFUjsKIAogICAvKiBTZXQgdGhlIGZpbHRlciAqLwogICB0bXBjY21yMSAmPSB+VElNX0NDTVIxX0lDMkY7CkBAIC03Mjg1LDkgKzc0MTksOSBAQAogICB1aW50MzJfdCB0bXBjY2VyOwogCiAgIC8qIERpc2FibGUgdGhlIENoYW5uZWwgMzogUmVzZXQgdGhlIENDM0UgQml0ICovCisgIHRtcGNjZXIgPSBUSU14LT5DQ0VSOwogICBUSU14LT5DQ0VSICY9IH5USU1fQ0NFUl9DQzNFOwogICB0bXBjY21yMiA9IFRJTXgtPkNDTVIyOwotICB0bXBjY2VyID0gVElNeC0+Q0NFUjsKIAogICAvKiBTZWxlY3QgdGhlIElucHV0ICovCiAgIHRtcGNjbXIyICY9IH5USU1fQ0NNUjJfQ0MzUzsKQEAgLTczMzIsOSArNzQ2Niw5IEBACiAgIHVpbnQzMl90IHRtcGNjZXI7CiAKICAgLyogRGlzYWJsZSB0aGUgQ2hhbm5lbCA0OiBSZXNldCB0aGUgQ0M0RSBCaXQgKi8KKyAgdG1wY2NlciA9IFRJTXgtPkNDRVI7CiAgIFRJTXgtPkNDRVIgJj0gflRJTV9DQ0VSX0NDNEU7CiAgIHRtcGNjbXIyID0gVElNeC0+Q0NNUjI7Ci0gIHRtcGNjZXIgPSBUSU14LT5DQ0VSOwogCiAgIC8qIFNlbGVjdCB0aGUgSW5wdXQgKi8KICAgdG1wY2NtcjIgJj0gflRJTV9DQ01SMl9DQzRTOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfdGltX2V4LmMgYi9TcmMvc3RtMzJmMXh4X2hhbF90aW1fZXguYwppbmRleCAxNWU5ZGE5Li5mZjhjOGY1IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2hhbF90aW1fZXguYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF90aW1fZXguYwpAQCAtMTAsNyArMTAsNiBAQAogICAqICAgICAgICAgICArIFRpbWUgQ29tcGxlbWVudGFyeSBzaWduYWwgYnJlYWsgYW5kIGRlYWQgdGltZSBjb25maWd1cmF0aW9uCiAgICogICAgICAgICAgICsgVGltZSBNYXN0ZXIgYW5kIFNsYXZlIHN5bmNocm9uaXphdGlvbiBjb25maWd1cmF0aW9uCiAgICogICAgICAgICAgICsgVGltZXIgcmVtYXBwaW5nIGNhcGFiaWxpdGllcyBjb25maWd1cmF0aW9uCi0gICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC0xNTIsNiArMTUxLDcgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DTE9DS0RJVklTSU9OX0RJVihodGltLT5Jbml0LkNsb2NrRGl2aXNpb24pKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BVVRPUkVMT0FEX1BSRUxPQUQoaHRpbS0+SW5pdC5BdXRvUmVsb2FkUHJlbG9hZCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX1BPTEFSSVRZKHNDb25maWctPklDMVBvbGFyaXR5KSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fUEVSSU9EKGh0aW0tPkluaXQuUGVyaW9kKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fSUNfUFJFU0NBTEVSKHNDb25maWctPklDMVByZXNjYWxlcikpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX0ZJTFRFUihzQ29uZmlnLT5JQzFGaWx0ZXIpKTsKIApAQCAtNTAyLDcgKzUwMiw3IEBACiAgIGVsc2UgaWYgKChjaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKICAgewotICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICBpZiAoKHBEYXRhID09IE5VTEwpIHx8IChMZW5ndGggPT0gMFUpKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQpAQCAtNzA3LDYgKzcwNyw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfT0NOX1N0YXJ0X0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIHVpbnQzMl90IHRtcHNtY3I7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KQEAgLTc0NiwzNCArNzQ3LDM4IEBACiAKIAogICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIEVuYWJsZSB0aGUgVElNIEJyZWFrIGludGVycnVwdCAqLwotICBfX0hBTF9USU1fRU5BQkxFX0lUKGh0aW0sIFRJTV9JVF9CUkVBSyk7Ci0KLSAgLyogRW5hYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgY2hhbm5lbCBOICovCi0gIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeE5fRU5BQkxFKTsKLQotICAvKiBFbmFibGUgdGhlIE1haW4gT3V0cHV0ICovCi0gIF9fSEFMX1RJTV9NT0VfRU5BQkxFKGh0aW0pOwotCi0gIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICAvKiBFbmFibGUgdGhlIFRJTSBCcmVhayBpbnRlcnJ1cHQgKi8KKyAgICBfX0hBTF9USU1fRU5BQkxFX0lUKGh0aW0sIFRJTV9JVF9CUkVBSyk7CisKKyAgICAvKiBFbmFibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsIE4gKi8KKyAgICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hOX0VOQUJMRSk7CisKKyAgICAvKiBFbmFibGUgdGhlIE1haW4gT3V0cHV0ICovCisgICAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7CisKKyAgICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KKyAgICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgICB7CisgICAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgICAgeworICAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCiAgICAgewogICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgICB9CiAgIH0KLSAgZWxzZQotICB7Ci0gICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKLSAgfQogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC03ODksNyArNzk0LDkgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9PQ05fU3RvcF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICB1aW50MzJfdCB0bXBjY2VyOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCkBAIC04MTcsMzAgKzgyNCwzNCBAQAogICAgIH0KIAogICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIERpc2FibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsIE4gKi8KLSAgVElNX0NDeE5DaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4Tl9ESVNBQkxFKTsKLQotICAvKiBEaXNhYmxlIHRoZSBUSU0gQnJlYWsgaW50ZXJydXB0IChvbmx5IGlmIG5vIG1vcmUgY2hhbm5lbCBpcyBhY3RpdmUpICovCi0gIHRtcGNjZXIgPSBodGltLT5JbnN0YW5jZS0+Q0NFUjsKLSAgaWYgKCh0bXBjY2VyICYgKFRJTV9DQ0VSX0NDMU5FIHwgVElNX0NDRVJfQ0MyTkUgfCBUSU1fQ0NFUl9DQzNORSkpID09ICh1aW50MzJfdClSRVNFVCkKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICBfX0hBTF9USU1fRElTQUJMRV9JVChodGltLCBUSU1fSVRfQlJFQUspOworICAgIC8qIERpc2FibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsIE4gKi8KKyAgICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hOX0RJU0FCTEUpOworCisgICAgLyogRGlzYWJsZSB0aGUgVElNIEJyZWFrIGludGVycnVwdCAob25seSBpZiBubyBtb3JlIGNoYW5uZWwgaXMgYWN0aXZlKSAqLworICAgIHRtcGNjZXIgPSBodGltLT5JbnN0YW5jZS0+Q0NFUjsKKyAgICBpZiAoKHRtcGNjZXIgJiAoVElNX0NDRVJfQ0MxTkUgfCBUSU1fQ0NFUl9DQzJORSB8IFRJTV9DQ0VSX0NDM05FKSkgPT0gKHVpbnQzMl90KVJFU0VUKQorICAgIHsKKyAgICAgIF9fSEFMX1RJTV9ESVNBQkxFX0lUKGh0aW0sIFRJTV9JVF9CUkVBSyk7CisgICAgfQorCisgICAgLyogRGlzYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KKyAgICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CisKKyAgICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCisgICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CisKKyAgICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KLSAgX19IQUxfVElNX01PRV9ESVNBQkxFKGh0aW0pOwotCi0gIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KLSAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7Ci0KLSAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCi0gIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7Ci0KICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTg1OSw2ICs4NzAsNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X09DTl9TdGFydF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwsIGNvbnN0IHVpbnQzMl90ICpwRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IExlbmd0aCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICB1aW50MzJfdCB0bXBzbWNyOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCkBAIC04NzEsNyArODgzLDcgQEAKICAgfQogICBlbHNlIGlmIChUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBpZiAoKHBEYXRhID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCisgICAgaWYgKChwRGF0YSA9PSBOVUxMKSB8fCAoTGVuZ3RoID09IDBVKSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KQEAgLTg5OCw3ICs5MTAsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IxLAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTkxOSw3ICs5MzEsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IyLAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTk0MCw3ICs5NTIsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IzLAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTk1MSwzMSArOTYzLDM1IEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogRW5hYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgY2hhbm5lbCBOICovCi0gIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeE5fRU5BQkxFKTsKLQotICAvKiBFbmFibGUgdGhlIE1haW4gT3V0cHV0ICovCi0gIF9fSEFMX1RJTV9NT0VfRU5BQkxFKGh0aW0pOwotCi0gIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICAvKiBFbmFibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsIE4gKi8KKyAgICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hOX0VOQUJMRSk7CisKKyAgICAvKiBFbmFibGUgdGhlIE1haW4gT3V0cHV0ICovCisgICAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7CisKKyAgICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KKyAgICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgICB7CisgICAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgICAgeworICAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCiAgICAgewogICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgICB9CiAgIH0KLSAgZWxzZQotICB7Ci0gICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKLSAgfQogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC05OTEsNiArMTAwNyw4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfT0NOX1N0b3BfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKQEAgLTEwMjEsMjMgKzEwMzksMjcgQEAKICAgICB9CiAKICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAotICAvKiBEaXNhYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgY2hhbm5lbCBOICovCi0gIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeE5fRElTQUJMRSk7CisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQorICB7CisgICAgLyogRGlzYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgTiAqLworICAgIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeE5fRElTQUJMRSk7CiAKLSAgLyogRGlzYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KLSAgX19IQUxfVElNX01PRV9ESVNBQkxFKGh0aW0pOworICAgIC8qIERpc2FibGUgdGhlIE1haW4gT3V0cHV0ICovCisgICAgX19IQUxfVElNX01PRV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KLSAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CisgICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLwotICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtMTE2OCw2ICsxMTkwLDcgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9QV01OX1N0YXJ0X0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIHVpbnQzMl90IHRtcHNtY3I7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KQEAgLTEyMDYsMzQgKzEyMjksMzggQEAKICAgICB9CiAKICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAotICAvKiBFbmFibGUgdGhlIFRJTSBCcmVhayBpbnRlcnJ1cHQgKi8KLSAgX19IQUxfVElNX0VOQUJMRV9JVChodGltLCBUSU1fSVRfQlJFQUspOwotCi0gIC8qIEVuYWJsZSB0aGUgY29tcGxlbWVudGFyeSBQV00gb3V0cHV0ICAqLwotICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hOX0VOQUJMRSk7Ci0KLSAgLyogRW5hYmxlIHRoZSBNYWluIE91dHB1dCAqLwotICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKLQotICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7Ci0gICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgLyogRW5hYmxlIHRoZSBUSU0gQnJlYWsgaW50ZXJydXB0ICovCisgICAgX19IQUxfVElNX0VOQUJMRV9JVChodGltLCBUSU1fSVRfQlJFQUspOworCisgICAgLyogRW5hYmxlIHRoZSBjb21wbGVtZW50YXJ5IFBXTSBvdXRwdXQgICovCisgICAgVElNX0NDeE5DaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4Tl9FTkFCTEUpOworCisgICAgLyogRW5hYmxlIHRoZSBNYWluIE91dHB1dCAqLworICAgIF9fSEFMX1RJTV9NT0VfRU5BQkxFKGh0aW0pOworCisgICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCisgICAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgICAgeworICAgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICAgIHsKKyAgICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQogICAgIHsKICAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgICAgfQogICB9Ci0gIGVsc2UKLSAgewotICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7Ci0gIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtMTI0OSw2ICsxMjc2LDcgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9QV01OX1N0b3BfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgdWludDMyX3QgdG1wY2NlcjsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwpAQCAtMTI3OCwzMCArMTMwNiwzNCBAQAogICAgIH0KIAogICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIERpc2FibGUgdGhlIGNvbXBsZW1lbnRhcnkgUFdNIG91dHB1dCAgKi8KLSAgVElNX0NDeE5DaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4Tl9ESVNBQkxFKTsKLQotICAvKiBEaXNhYmxlIHRoZSBUSU0gQnJlYWsgaW50ZXJydXB0IChvbmx5IGlmIG5vIG1vcmUgY2hhbm5lbCBpcyBhY3RpdmUpICovCi0gIHRtcGNjZXIgPSBodGltLT5JbnN0YW5jZS0+Q0NFUjsKLSAgaWYgKCh0bXBjY2VyICYgKFRJTV9DQ0VSX0NDMU5FIHwgVElNX0NDRVJfQ0MyTkUgfCBUSU1fQ0NFUl9DQzNORSkpID09ICh1aW50MzJfdClSRVNFVCkKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICBfX0hBTF9USU1fRElTQUJMRV9JVChodGltLCBUSU1fSVRfQlJFQUspOworICAgIC8qIERpc2FibGUgdGhlIGNvbXBsZW1lbnRhcnkgUFdNIG91dHB1dCAgKi8KKyAgICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hOX0RJU0FCTEUpOworCisgICAgLyogRGlzYWJsZSB0aGUgVElNIEJyZWFrIGludGVycnVwdCAob25seSBpZiBubyBtb3JlIGNoYW5uZWwgaXMgYWN0aXZlKSAqLworICAgIHRtcGNjZXIgPSBodGltLT5JbnN0YW5jZS0+Q0NFUjsKKyAgICBpZiAoKHRtcGNjZXIgJiAoVElNX0NDRVJfQ0MxTkUgfCBUSU1fQ0NFUl9DQzJORSB8IFRJTV9DQ0VSX0NDM05FKSkgPT0gKHVpbnQzMl90KVJFU0VUKQorICAgIHsKKyAgICAgIF9fSEFMX1RJTV9ESVNBQkxFX0lUKGh0aW0sIFRJTV9JVF9CUkVBSyk7CisgICAgfQorCisgICAgLyogRGlzYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KKyAgICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CisKKyAgICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCisgICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CisKKyAgICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KLSAgX19IQUxfVElNX01PRV9ESVNBQkxFKGh0aW0pOwotCi0gIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KLSAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7Ci0KLSAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCi0gIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7Ci0KICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTEzMjAsNiArMTM1Miw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfUFdNTl9TdGFydF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwsIGNvbnN0IHVpbnQzMl90ICpwRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBMZW5ndGgpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgdWludDMyX3QgdG1wc21jcjsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwpAQCAtMTMzMiw3ICsxMzY1LDcgQEAKICAgfQogICBlbHNlIGlmIChUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBpZiAoKHBEYXRhID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCisgICAgaWYgKChwRGF0YSA9PSBOVUxMKSB8fCAoTGVuZ3RoID09IDBVKSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KQEAgLTEzNTksNyArMTM5Miw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMTM4MCw3ICsxNDEzLDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0xNDAxLDcgKzE0MzQsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IzLAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTE0MTIsMzEgKzE0NDUsMzUgQEAKICAgICB9CiAKICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAotICAvKiBFbmFibGUgdGhlIGNvbXBsZW1lbnRhcnkgUFdNIG91dHB1dCAgKi8KLSAgVElNX0NDeE5DaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4Tl9FTkFCTEUpOwotCi0gIC8qIEVuYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KLSAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7Ci0KLSAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIC8qIEVuYWJsZSB0aGUgY29tcGxlbWVudGFyeSBQV00gb3V0cHV0ICAqLworICAgIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeE5fRU5BQkxFKTsKKworICAgIC8qIEVuYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KKyAgICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKKworICAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLworICAgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICAgIHsKKyAgICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgICB7CisgICAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKICAgICB7CiAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICAgIH0KICAgfQotICBlbHNlCi0gIHsKLSAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwotICB9CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTE0NTIsNiArMTQ4OSw4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfUFdNTl9TdG9wX0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCkBAIC0xNDgyLDIzICsxNTIxLDI3IEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgY29tcGxlbWVudGFyeSBQV00gb3V0cHV0ICovCi0gIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeE5fRElTQUJMRSk7CisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQorICB7CisgICAgLyogRGlzYWJsZSB0aGUgY29tcGxlbWVudGFyeSBQV00gb3V0cHV0ICovCisgICAgVElNX0NDeE5DaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4Tl9ESVNBQkxFKTsKIAotICAvKiBEaXNhYmxlIHRoZSBNYWluIE91dHB1dCAqLwotICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CisgICAgLyogRGlzYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KKyAgICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwotICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKKyAgICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCisgICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCi0gIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgfQogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0yMTU4LDcgKzIyMDEsNyBAQAogICAqLwogCiAvKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBkZWZncm91cCBUSU1FeF9Qcml2YXRlX0Z1bmN0aW9ucyBUSU1FeCBQcml2YXRlIEZ1bmN0aW9ucworLyoqIEBkZWZncm91cCBUSU1FeF9Qcml2YXRlX0Z1bmN0aW9ucyBUSU0gRXh0ZW5kZWQgUHJpdmF0ZSBGdW5jdGlvbnMKICAgKiBAewogICAqLwogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2hhbF90aW1lYmFzZV9ydGNfYWxhcm1fdGVtcGxhdGUuYyBiL1NyYy9zdG0zMmYxeHhfaGFsX3RpbWViYXNlX3J0Y19hbGFybV90ZW1wbGF0ZS5jCmluZGV4IDIxOWU1MzYuLmI2ZGEyZWQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfaGFsX3RpbWViYXNlX3J0Y19hbGFybV90ZW1wbGF0ZS5jCisrKyBiL1NyYy9zdG0zMmYxeHhfaGFsX3RpbWViYXNlX3J0Y19hbGFybV90ZW1wbGF0ZS5jCkBAIC0zMDUsMyArMzA1LDUgQEAKIC8qKgogICAqIEB9CiAgICovCisKKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfdGltZWJhc2VfdGltX3RlbXBsYXRlLmMgYi9TcmMvc3RtMzJmMXh4X2hhbF90aW1lYmFzZV90aW1fdGVtcGxhdGUuYwppbmRleCBkOGE1ZmY4Li5kOWRiZTZiIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2hhbF90aW1lYmFzZV90aW1fdGVtcGxhdGUuYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF90aW1lYmFzZV90aW1fdGVtcGxhdGUuYwpAQCAtNiw3ICs2LDcgQEAKICAgKgogICAqICAgICAgICAgIFRoaXMgZmlsZSBvdmVycmlkZXMgdGhlIG5hdGl2ZSBIQUwgdGltZSBiYXNlIGZ1bmN0aW9ucyAoZGVmaW5lZCBhcyB3ZWFrKQogICAqICAgICAgICAgIHRoZSBUSU0gdGltZSBiYXNlOgotICAqICAgICAgICAgICArIEludGlhbGl6ZXMgdGhlIFRJTSBwZXJpcGhlcmFsIGdlbmVyYXRlIGEgUGVyaW9kIGVsYXBzZWQgRXZlbnQgZWFjaCAxbXMKKyAgKiAgICAgICAgICAgKyBJbml0aWFsaXplcyB0aGUgVElNIHBlcmlwaGVyYWwgZ2VuZXJhdGUgYSBQZXJpb2QgZWxhcHNlZCBFdmVudCBlYWNoIDFtcwogICAqICAgICAgICAgICArIEhBTF9JbmNUaWNrIGlzIGNhbGxlZCBpbnNpZGUgSEFMX1RJTV9QZXJpb2RFbGFwc2VkQ2FsbGJhY2sgaWUgZWFjaCAxbXMKICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE3NCwzICsxNzQsNSBAQAogLyoqCiAgICogQH0KICAgKi8KKworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2hhbF91YXJ0LmMgYi9TcmMvc3RtMzJmMXh4X2hhbF91YXJ0LmMKaW5kZXggZDI2NWM0Zi4uZGIxZjA4NyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjF4eF9oYWxfdWFydC5jCisrKyBiL1NyYy9zdG0zMmYxeHhfaGFsX3VhcnQuYwpAQCAtODQsOCArODQsOCBAQAogICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCiAKICAgICBbLi5dCi0gICAgVXNlIEZ1bmN0aW9uIEByZWYgSEFMX1VBUlRfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjay4KLSAgICBGdW5jdGlvbiBAcmVmIEhBTF9VQVJUX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKKyAgICBVc2UgRnVuY3Rpb24gSEFMX1VBUlRfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjay4KKyAgICBGdW5jdGlvbiBIQUxfVUFSVF9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgKCspIFR4SGFsZkNwbHRDYWxsYmFjayAgICAgICAgOiBUeCBIYWxmIENvbXBsZXRlIENhbGxiYWNrLgogICAgICgrKSBUeENwbHRDYWxsYmFjayAgICAgICAgICAgIDogVHggQ29tcGxldGUgQ2FsbGJhY2suCiAgICAgKCspIFJ4SGFsZkNwbHRDYWxsYmFjayAgICAgICAgOiBSeCBIYWxmIENvbXBsZXRlIENhbGxiYWNrLgpAQCAtMTAwLDkgKzEwMCw5IEBACiAgICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KIAogICAgIFsuLl0KLSAgICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfVUFSVF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgICAgVXNlIGZ1bmN0aW9uIEhBTF9VQVJUX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbi4KLSAgICBAcmVmIEhBTF9VQVJUX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKKyAgICBIQUxfVUFSVF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgICAgYW5kIHRoZSBDYWxsYmFjayBJRC4KICAgICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBUeEhhbGZDcGx0Q2FsbGJhY2sgICAgICAgIDogVHggSGFsZiBDb21wbGV0ZSBDYWxsYmFjay4KQEAgLTExOCwxNiArMTE4LDE2IEBACiAKICAgICBbLi5dCiAgICAgRm9yIHNwZWNpZmljIGNhbGxiYWNrIFJ4RXZlbnRDYWxsYmFjaywgdXNlIGRlZGljYXRlZCByZWdpc3RyYXRpb24vcmVzZXQgZnVuY3Rpb25zOgotICAgIHJlc3BlY3RpdmVseSBAcmVmIEhBTF9VQVJUX1JlZ2lzdGVyUnhFdmVudENhbGxiYWNrKCkgLCBAcmVmIEhBTF9VQVJUX1VuUmVnaXN0ZXJSeEV2ZW50Q2FsbGJhY2soKS4KKyAgICByZXNwZWN0aXZlbHkgSEFMX1VBUlRfUmVnaXN0ZXJSeEV2ZW50Q2FsbGJhY2soKSAsIEhBTF9VQVJUX1VuUmVnaXN0ZXJSeEV2ZW50Q2FsbGJhY2soKS4KIAogICAgIFsuLl0KLSAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfVUFSVF9Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9VQVJUX1NUQVRFX1JFU0VUCisgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9VQVJUX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX1VBUlRfU1RBVEVfUkVTRVQKICAgICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zOgotICAgIGV4YW1wbGVzIEByZWYgSEFMX1VBUlRfVHhDcGx0Q2FsbGJhY2soKSwgQHJlZiBIQUxfVUFSVF9SeEhhbGZDcGx0Q2FsbGJhY2soKS4KKyAgICBleGFtcGxlcyBIQUxfVUFSVF9UeENwbHRDYWxsYmFjaygpLCBIQUxfVUFSVF9SeEhhbGZDcGx0Q2FsbGJhY2soKS4KICAgICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCBhbmQgTXNwRGVJbml0IGZ1bmN0aW9ucyB0aGF0IGFyZSByZXNwZWN0aXZlbHkKLSAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgQHJlZiBIQUxfVUFSVF9Jbml0KCkKLSAgICBhbmQgQHJlZiBIQUxfVUFSVF9EZUluaXQoKSBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KLSAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX1VBUlRfSW5pdCgpIGFuZCBAcmVmIEhBTF9VQVJUX0RlSW5pdCgpCisgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEhBTF9VQVJUX0luaXQoKQorICAgIGFuZCBIQUxfVUFSVF9EZUluaXQoKSBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KKyAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEhBTF9VQVJUX0luaXQoKSBhbmQgSEFMX1VBUlRfRGVJbml0KCkKICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgogCiAgICAgWy4uXQpAQCAtMTM2LDggKzEzNiw4IEBACiAgICAgaW4gSEFMX1VBUlRfU1RBVEVfUkVBRFkgb3IgSEFMX1VBUlRfU1RBVEVfUkVTRVQgc3RhdGUsIHRodXMgcmVnaXN0ZXJlZCAodXNlcikKICAgICBNc3BJbml0L0RlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KICAgICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCi0gICAgdXNpbmcgQHJlZiBIQUxfVUFSVF9SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfVUFSVF9EZUluaXQoKQotICAgIG9yIEByZWYgSEFMX1VBUlRfSW5pdCgpIGZ1bmN0aW9uLgorICAgIHVzaW5nIEhBTF9VQVJUX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBIQUxfVUFSVF9EZUluaXQoKQorICAgIG9yIEhBTF9VQVJUX0luaXQoKSBmdW5jdGlvbi4KIAogICAgIFsuLl0KICAgICBXaGVuIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9VQVJUX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgpAQCAtMjUxLDcgKzI1MSw2IEBACiAgICAgfC0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgfCAgICAxICAgIHwgICAgMSAgICAgIHwgICAgfCBTQiB8IDggYml0IGRhdGEgfCBQQiB8IFNUQiB8ICAgICB8CiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKQEAgLTc0NCw2ICs3NDMsOCBAQAogLyoqCiAgICogQGJyaWVmICBSZWdpc3RlciBhIFVzZXIgVUFSVCBDYWxsYmFjawogICAqICAgICAgICAgVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAbm90ZSAgIFRoZSBIQUxfVUFSVF9SZWdpc3RlckNhbGxiYWNrKCkgbWF5IGJlIGNhbGxlZCBiZWZvcmUgSEFMX1VBUlRfSW5pdCgpLCBIQUxfSGFsZkR1cGxleF9Jbml0KCksIEhBTF9MSU5fSW5pdCgpLAorICAqICAgICAgICAgSEFMX011bHRpUHJvY2Vzc29yX0luaXQoKSB0byByZWdpc3RlciBjYWxsYmFja3MgZm9yIEhBTF9VQVJUX01TUElOSVRfQ0JfSUQgYW5kIEhBTF9VQVJUX01TUERFSU5JVF9DQl9JRAogICAqIEBwYXJhbSAgaHVhcnQgdWFydCBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC03NzIsOCArNzczLDYgQEAKIAogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhodWFydCk7CiAKICAgaWYgKGh1YXJ0LT5nU3RhdGUgPT0gSEFMX1VBUlRfU1RBVEVfUkVBRFkpCiAgIHsKQEAgLTg1OCwxNSArODU3LDE1IEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaHVhcnQpOwotCiAgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgogICAqIEBicmllZiAgVW5yZWdpc3RlciBhbiBVQVJUIENhbGxiYWNrCiAgICogICAgICAgICBVQVJUIGNhbGxhYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAbm90ZSAgIFRoZSBIQUxfVUFSVF9VblJlZ2lzdGVyQ2FsbGJhY2soKSBtYXkgYmUgY2FsbGVkIGJlZm9yZSBIQUxfVUFSVF9Jbml0KCksIEhBTF9IYWxmRHVwbGV4X0luaXQoKSwKKyAgKiAgICAgICAgIEhBTF9MSU5fSW5pdCgpLCBIQUxfTXVsdGlQcm9jZXNzb3JfSW5pdCgpIHRvIHVuLXJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgSEFMX1VBUlRfTVNQSU5JVF9DQl9JRAorICAqICAgICAgICAgYW5kIEhBTF9VQVJUX01TUERFSU5JVF9DQl9JRAogICAqIEBwYXJhbSAgaHVhcnQgdWFydCBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHVucmVnaXN0ZXJlZAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTg4Niw5ICs4ODUsNiBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhodWFydCk7Ci0KICAgaWYgKEhBTF9VQVJUX1NUQVRFX1JFQURZID09IGh1YXJ0LT5nU3RhdGUpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCkBAIC05NzIsOSArOTY4LDYgQEAKICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhodWFydCk7Ci0KICAgcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTMxOSw3ICsxMzEyLDcgQEAKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogCi0gICAgaHVhcnQtPnBUeEJ1ZmZQdHIgPSAodWludDhfdCAqKSBwRGF0YTsKKyAgICBodWFydC0+cFR4QnVmZlB0ciA9IHBEYXRhOwogICAgIGh1YXJ0LT5UeFhmZXJTaXplID0gU2l6ZTsKICAgICBodWFydC0+VHhYZmVyQ291bnQgPSBTaXplOwogCkBAIC0xMzgyLDcgKzEzNzUsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VBUlRfVHJhbnNtaXRfRE1BKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQsIGNvbnN0IHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQogewotICB1aW50MzJfdCAqdG1wOworICBjb25zdCB1aW50MzJfdCAqdG1wOwogCiAgIC8qIENoZWNrIHRoYXQgYSBUeCBwcm9jZXNzIGlzIG5vdCBhbHJlYWR5IG9uZ29pbmcgKi8KICAgaWYgKGh1YXJ0LT5nU3RhdGUgPT0gSEFMX1VBUlRfU1RBVEVfUkVBRFkpCkBAIC0xMzkyLDcgKzEzODUsNyBAQAogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CiAKLSAgICBodWFydC0+cFR4QnVmZlB0ciA9ICh1aW50OF90ICopIHBEYXRhOworICAgIGh1YXJ0LT5wVHhCdWZmUHRyID0gcERhdGE7CiAgICAgaHVhcnQtPlR4WGZlclNpemUgPSBTaXplOwogICAgIGh1YXJ0LT5UeFhmZXJDb3VudCA9IFNpemU7CiAKQEAgLTE0MTIsOCArMTQwNSw4IEBACiAgICAgaHVhcnQtPmhkbWF0eC0+WGZlckFib3J0Q2FsbGJhY2sgPSBOVUxMOwogCiAgICAgLyogRW5hYmxlIHRoZSBVQVJUIHRyYW5zbWl0IERNQSBjaGFubmVsICovCi0gICAgdG1wID0gKHVpbnQzMl90ICopJnBEYXRhOwotICAgIEhBTF9ETUFfU3RhcnRfSVQoaHVhcnQtPmhkbWF0eCwgKih1aW50MzJfdCAqKXRtcCwgKHVpbnQzMl90KSZodWFydC0+SW5zdGFuY2UtPkRSLCBTaXplKTsKKyAgICB0bXAgPSAoY29uc3QgdWludDMyX3QgKikmcERhdGE7CisgICAgSEFMX0RNQV9TdGFydF9JVChodWFydC0+aGRtYXR4LCAqKGNvbnN0IHVpbnQzMl90ICopdG1wLCAodWludDMyX3QpJmh1YXJ0LT5JbnN0YW5jZS0+RFIsIFNpemUpOwogCiAgICAgLyogQ2xlYXIgdGhlIFRDIGZsYWcgaW4gdGhlIFNSIHJlZ2lzdGVyIGJ5IHdyaXRpbmcgMCB0byBpdCAqLwogICAgIF9fSEFMX1VBUlRfQ0xFQVJfRkxBRyhodWFydCwgVUFSVF9GTEFHX1RDKTsKQEAgLTM1MjAsMTQgKzM1MTMsMTQgQEAKICAgKi8KIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBVQVJUX1RyYW5zbWl0X0lUKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQpCiB7Ci0gIHVpbnQxNl90ICp0bXA7CisgIGNvbnN0IHVpbnQxNl90ICp0bXA7CiAKICAgLyogQ2hlY2sgdGhhdCBhIFR4IHByb2Nlc3MgaXMgb25nb2luZyAqLwogICBpZiAoaHVhcnQtPmdTdGF0ZSA9PSBIQUxfVUFSVF9TVEFURV9CVVNZX1RYKQogICB7CiAgICAgaWYgKChodWFydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVBUlRfV09SRExFTkdUSF85QikgJiYgKGh1YXJ0LT5Jbml0LlBhcml0eSA9PSBVQVJUX1BBUklUWV9OT05FKSkKICAgICB7Ci0gICAgICB0bXAgPSAodWludDE2X3QgKikgaHVhcnQtPnBUeEJ1ZmZQdHI7CisgICAgICB0bXAgPSAoY29uc3QgdWludDE2X3QgKikgaHVhcnQtPnBUeEJ1ZmZQdHI7CiAgICAgICBodWFydC0+SW5zdGFuY2UtPkRSID0gKHVpbnQxNl90KSgqdG1wICYgKHVpbnQxNl90KTB4MDFGRik7CiAgICAgICBodWFydC0+cFR4QnVmZlB0ciArPSAyVTsKICAgICB9CkBAIC0zNzYwLDMgKzM3NTMsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9oYWxfdXNhcnQuYyBiL1NyYy9zdG0zMmYxeHhfaGFsX3VzYXJ0LmMKaW5kZXggMjYwOTQ0OS4uZWI1YmFjZCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjF4eF9oYWxfdXNhcnQuYworKysgYi9TcmMvc3RtMzJmMXh4X2hhbF91c2FydC5jCkBAIC0xOTMsNyArMTkzLDYgQEAKICAgICB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICB8ICAgIDEgICAgfCAgICAxICAgICAgfCAgICB8IFNCIHwgOCBiaXQgZGF0YSB8IFBCIHwgU1RCIHwgICAgIHwKICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIApAQCAtNDI1LDYgKzQyNCw4IEBACiAvKioKICAgKiBAYnJpZWYgIFJlZ2lzdGVyIGEgVXNlciBVU0FSVCBDYWxsYmFjawogICAqICAgICAgICAgVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAbm90ZSAgIFRoZSBIQUxfVVNBUlRfUmVnaXN0ZXJDYWxsYmFjaygpIG1heSBiZSBjYWxsZWQgYmVmb3JlIEhBTF9VU0FSVF9Jbml0KCkgaW4gSEFMX1VTQVJUX1NUQVRFX1JFU0VUCisgICogICAgICAgICB0byByZWdpc3RlciBjYWxsYmFja3MgZm9yIEhBTF9VU0FSVF9NU1BJTklUX0NCX0lEIGFuZCBIQUxfVVNBUlRfTVNQREVJTklUX0NCX0lECiAgICogQHBhcmFtICBodXNhcnQgdXNhcnQgaGFuZGxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSByZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNDUyLDggKzQ1Myw2IEBACiAKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9Ci0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaHVzYXJ0KTsKIAogICBpZiAoaHVzYXJ0LT5TdGF0ZSA9PSBIQUxfVVNBUlRfU1RBVEVfUkVBRFkpCiAgIHsKQEAgLTUzNCwxNSArNTMzLDE0IEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaHVzYXJ0KTsKLQogICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFVucmVnaXN0ZXIgYW4gVVNBUlQgQ2FsbGJhY2sKICAgKiAgICAgICAgIFVTQVJUIGNhbGxhYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAbm90ZSAgIFRoZSBIQUxfVVNBUlRfVW5SZWdpc3RlckNhbGxiYWNrKCkgbWF5IGJlIGNhbGxlZCBiZWZvcmUgSEFMX1VTQVJUX0luaXQoKSBpbiBIQUxfVVNBUlRfU1RBVEVfUkVTRVQKKyAgKiAgICAgICAgIHRvIHVuLXJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgSEFMX1VTQVJUX01TUElOSVRfQ0JfSUQgYW5kIEhBTF9VU0FSVF9NU1BERUlOSVRfQ0JfSUQKICAgKiBAcGFyYW0gIGh1c2FydCB1c2FydCBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHVucmVnaXN0ZXJlZAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTU2MSw5ICs1NTksNiBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhodXNhcnQpOwotCiAgIGlmIChodXNhcnQtPlN0YXRlID09IEhBTF9VU0FSVF9TVEFURV9SRUFEWSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKQEAgLTY0Myw5ICs2MzgsNiBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGh1c2FydCk7Ci0KICAgcmV0dXJuIHN0YXR1czsKIH0KICNlbmRpZiAvKiBVU0VfSEFMX1VTQVJUX1JFR0lTVEVSX0NBTExCQUNLUyAqLwpAQCAtMjgxOCwzICsyODEwLDQgQEAKIC8qKgogICAqIEB9CiAgICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYxeHhfaGFsX3d3ZGcuYyBiL1NyYy9zdG0zMmYxeHhfaGFsX3d3ZGcuYwppbmRleCAxZTVkOGVhLi5iMTRkYjk3IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2hhbF93d2RnLmMKKysrIGIvU3JjL3N0bTMyZjF4eF9oYWxfd3dkZy5jCkBAIC03LDcgKzcsNiBAQAogICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgV2luZG93IFdhdGNoZG9nIChXV0RHKSBwZXJpcGhlcmFsOgogICAqICAgICAgICAgICArIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMKLSAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTUyLDcgKzUxLDcgQEAKICAgICAgICAgKCsrKSBtYXggdGltZSAobVMpID0gMTAwMCAqIChDb3VudGVyIC0gMHg0MCkgLyBXV0RHIGNsb2NrCiAgICAgKCspIFR5cGljYWwgdmFsdWVzOgogICAgICAgICAoKyspIENvdW50ZXIgbWluIChUWzU7MF0gPSAweDAwKSBhdCAzNk1IeiAoUENMSzEpIHdpdGggemVybyBwcmVzY2FsZXI6Ci0gICAgICAgICAgICAgbWF4IHRpbWVvdXQgYmVmb3JlIHJlc2V0OiBhcHByb3hpbWF0ZWx5IDkxMLVzCisgICAgICAgICAgICAgbWF4IHRpbWVvdXQgYmVmb3JlIHJlc2V0OiBhcHByb3hpbWF0ZWx5IDkxMHVzCiAgICAgICAgICgrKykgQ291bnRlciBtYXggKFRbNTswXSA9IDB4M0YpIGF0IDM2TUh6IChQQ0xLMSkgd2l0aCBwcmVzY2FsZXIKICAgICAgICAgICAgICBkaXZpZGluZyBieSA4OgogICAgICAgICAgICAgIG1heCB0aW1lb3V0IGJlZm9yZSByZXNldDogYXBwcm94aW1hdGVseSA1OC4yNW1zCkBAIC02Nyw3ICs2Niw3IEBACiAgICAgKCspIEVuYWJsZSBXV0RHIEFQQjEgY2xvY2sgdXNpbmcgX19IQUxfUkNDX1dXREdfQ0xLX0VOQUJMRSgpLgogICAgICgrKSBDb25maWd1cmUgdGhlIFdXREcgcHJlc2NhbGVyLCByZWZyZXNoIHdpbmRvdyB2YWx1ZSwgY291bnRlciB2YWx1ZSBhbmQgZWFybHkKICAgICAgICAgaW50ZXJydXB0IHN0YXR1cyB1c2luZyBIQUxfV1dER19Jbml0KCkgZnVuY3Rpb24uIFRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5Ci0gICAgICAgIGVuYWJsZSBXV0RHIGFuZCBzdGFydCBpdHMgZG93bmNvdW50ZXIuIFRpbWUgcmVmZXJlbmNlIGNhbiBiZSB0YWtlbiBmcm9tIAorICAgICAgICBlbmFibGUgV1dERyBhbmQgc3RhcnQgaXRzIGRvd25jb3VudGVyLiBUaW1lIHJlZmVyZW5jZSBjYW4gYmUgdGFrZW4gZnJvbQogICAgICAgICBmdW5jdGlvbiBleGl0LiBDYXJlIG11c3QgYmUgdGFrZW4gdG8gcHJvdmlkZSBhIGNvdW50ZXIgdmFsdWUKICAgICAgICAgZ3JlYXRlciB0aGFuIDB4NDAgdG8gcHJldmVudCBnZW5lcmF0aW9uIG9mIGltbWVkaWF0ZSByZXNldC4KICAgICAoKykgSWYgdGhlIEVhcmx5IFdha2V1cCBJbnRlcnJ1cHQgKEVXSSkgZmVhdHVyZSBpcyBlbmFibGVkLCBhbiBpbnRlcnJ1cHQgaXMKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYxeHhfbGxfYWRjLmMgYi9TcmMvc3RtMzJmMXh4X2xsX2FkYy5jCmluZGV4IDUzNzRiNjQuLjQwNjI1MTEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfbGxfYWRjLmMKKysrIGIvU3JjL3N0bTMyZjF4eF9sbF9hZGMuYwpAQCAtMzE3LDcgKzMxNyw3IEBACiAKICAgLyogTm90ZTogSGFyZHdhcmUgY29uc3RyYWludCAocmVmZXIgdG8gZGVzY3JpcHRpb24gb2YgZnVuY3Rpb25zICAgICAgICAgICAgICovCiAgIC8qICAgICAgICJMTF9BRENfU2V0Q29tbW9uWFhYKCkiIGFuZCAiTExfQURDX1NldE11bHRpWFhYKCkiKTogICAgICAgICAgICAgICAqLwotICAvKiAgICAgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoZXNlIGZlYXR1cmVzIGlzIGNvbmRpdGlvbmVkIHRvICAgKi8KKyAgLyogICAgICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhlc2UgZmVhdHVyZXMgaXMgY29uZGl0aW9uZWQgdG8gICAqLwogICAvKiAgICAgICBBREMgc3RhdGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgQWxsIEFEQyBpbnN0YW5jZXMgb2YgdGhlIEFEQyBjb21tb24gZ3JvdXAgbXVzdCBiZSBkaXNhYmxlZC4gICAgICAgICovCiAgIGlmKF9fTExfQURDX0lTX0VOQUJMRURfQUxMX0NPTU1PTl9JTlNUQU5DRShBREN4eV9DT01NT04pID09IDBVKQpAQCAtNjc4LDcgKzY3OCw3IEBACiAgICAgLyogICAgLSBTZXQgQURDIGdyb3VwIHJlZ3VsYXIgY29udGludW91cyBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIC8qICAgIC0gU2V0IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gZGF0YSB0cmFuc2Zlcjogbm8gdHJhbnNmZXIgb3IgICAgKi8KICAgICAvKiAgICAgIHRyYW5zZmVyIGJ5IERNQSwgYW5kIERNQSByZXF1ZXN0cyBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgQURDIHRyaWdnZXIgZWRnZSBpcyBzZXQgd2hlbiBzdGFydGluZyAgICAgICAqLworICAgIC8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBBREMgdHJpZ2dlciBlZGdlIGlzIHNldCB3aGVuIHN0YXJ0aW5nICAgICAgICovCiAgICAgLyogICAgICAgQURDIGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIC8qICAgICAgIFJlZmVyIHRvIGZ1bmN0aW9uIEByZWYgTExfQURDX1JFR19TdGFydENvbnZlcnNpb25FeHRUcmlnKCkuICAgICAgKi8KICAgICBpZihBRENfUkVHX0luaXRTdHJ1Y3QtPlNlcXVlbmNlckxlbmd0aCAhPSBMTF9BRENfUkVHX1NFUV9TQ0FOX0RJU0FCTEUpCkBAIC03MzksNyArNzM5LDcgQEAKIHsKICAgLyogU2V0IEFEQ19SRUdfSW5pdFN0cnVjdCBmaWVsZHMgdG8gZGVmYXVsdCB2YWx1ZXMgKi8KICAgLyogU2V0IGZpZWxkcyBvZiBBREMgZ3JvdXAgcmVndWxhciAqLwotICAvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllLCBBREMgdHJpZ2dlciBlZGdlIGlzIHNldCB3aGVuIHN0YXJ0aW5nICAgICAgICAgKi8KKyAgLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyB0cmlnZ2VyIGVkZ2UgaXMgc2V0IHdoZW4gc3RhcnRpbmcgICAgICAgICAqLwogICAvKiAgICAgICBBREMgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgUmVmZXIgdG8gZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1N0YXJ0Q29udmVyc2lvbkV4dFRyaWcoKS4gICAgICAgICovCiAgIEFEQ19SRUdfSW5pdFN0cnVjdC0+VHJpZ2dlclNvdXJjZSAgICA9IExMX0FEQ19SRUdfVFJJR19TT0ZUV0FSRTsKQEAgLTgxMCw3ICs4MTAsNyBAQAogICAgIC8qICAgIC0gU2V0IEFEQyBncm91cCBpbmplY3RlZCBzZXF1ZW5jZXIgZGlzY29udGludW91cyBtb2RlICAgICAgICAgICAgICAgKi8KICAgICAvKiAgICAtIFNldCBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbiB0cmlnZ2VyOiBpbmRlcGVuZGVudCBvciAgICAgICAgICovCiAgICAgLyogICAgICBmcm9tIEFEQyBncm91cCByZWd1bGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWUsIEFEQyB0cmlnZ2VyIGVkZ2UgaXMgc2V0IHdoZW4gc3RhcnRpbmcgICAgICAgKi8KKyAgICAvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgQURDIHRyaWdnZXIgZWRnZSBpcyBzZXQgd2hlbiBzdGFydGluZyAgICAgICAqLwogICAgIC8qICAgICAgIEFEQyBjb252ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiAgICAgICBSZWZlciB0byBmdW5jdGlvbiBAcmVmIExMX0FEQ19JTkpfU3RhcnRDb252ZXJzaW9uRXh0VHJpZygpLiAgICAgICovCiAgICAgaWYoQURDX0lOSl9Jbml0U3RydWN0LT5TZXF1ZW5jZXJMZW5ndGggIT0gTExfQURDX1JFR19TRVFfU0NBTl9ESVNBQkxFKQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9sbF9jcmMuYyBiL1NyYy9zdG0zMmYxeHhfbGxfY3JjLmMKaW5kZXggNDk3MzZkNS4uNDVhYzc2YiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjF4eF9sbF9jcmMuYworKysgYi9TcmMvc3RtMzJmMXh4X2xsX2NyYy5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAic3RtMzJfYXNzZXJ0LmgiCiAjZWxzZQogI2RlZmluZSBhc3NlcnRfcGFyYW0oZXhwcikgKCh2b2lkKTBVKQotI2VuZGlmLyogVVNFX0ZVTExfQVNTRVJUICovCisjZW5kaWYgLyogVVNFX0ZVTExfQVNTRVJUICovCiAKIC8qKiBAYWRkdG9ncm91cCBTVE0zMkYxeHhfTExfRHJpdmVyCiAgICogQHsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYxeHhfbGxfZGFjLmMgYi9TcmMvc3RtMzJmMXh4X2xsX2RhYy5jCmluZGV4IGUzMGY0MmMuLjFmZmM0OGIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfbGxfZGFjLmMKKysrIGIvU3JjL3N0bTMyZjF4eF9sbF9kYWMuYwpAQCAtNDYsMTIgKzQ2LDEyIEBACiAgICogQHsKICAgKi8KICNkZWZpbmUgSVNfTExfREFDX0NIQU5ORUwoX19EQUNfQ0hBTk5FTF9fKSAgICAgICAgXAotICAoICAoKF9fREFDX0NIQU5ORUxfXykgPT0gTExfREFDX0NIQU5ORUxfMSkgICAgICBcCi0gICAgIHx8ICgoX19EQUNfQ0hBTk5FTF9fKSA9PSBMTF9EQUNfQ0hBTk5FTF8yKSAgIFwKKyAgKCgoX19EQUNfQ0hBTk5FTF9fKSA9PSBMTF9EQUNfQ0hBTk5FTF8xKSAgICAgIFwKKyAgIHx8ICgoX19EQUNfQ0hBTk5FTF9fKSA9PSBMTF9EQUNfQ0hBTk5FTF8yKSAgIFwKICAgKQogCiAjZGVmaW5lIElTX0xMX0RBQ19UUklHR0VSX1NPVVJDRShfX1RSSUdHRVJfU09VUkNFX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoICAgKChfX1RSSUdHRVJfU09VUkNFX18pID09IExMX0RBQ19UUklHX1NPRlRXQVJFKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCgoX19UUklHR0VSX1NPVVJDRV9fKSA9PSBMTF9EQUNfVFJJR19TT0ZUV0FSRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICB8fCAoKF9fVFJJR0dFUl9TT1VSQ0VfXykgPT0gTExfREFDX1RSSUdfRVhUX1RJTTNfVFJHTykgICAgICAgICAgICAgICAgICAgICAgXAogICAgfHwgKChfX1RSSUdHRVJfU09VUkNFX18pID09IExMX0RBQ19UUklHX0VYVF9USU0xNV9UUkdPKSAgICAgICAgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19UUklHR0VSX1NPVVJDRV9fKSA9PSBMTF9EQUNfVFJJR19FWFRfVElNMl9UUkdPKSAgICAgICAgICAgICAgICAgICAgICBcCkBAIC02NCw0NSArNjQsNDUgQEAKICAgKQogCiAjZGVmaW5lIElTX0xMX0RBQ19XQVZFX0FVVE9fR0VORVJfTU9ERShfX1dBVkVfQVVUT19HRU5FUkFUSU9OX01PREVfXykgICAgICAgICAgICAgIFwKLSAgKCAgICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9NT0RFX18pID09IExMX0RBQ19XQVZFX0FVVE9fR0VORVJBVElPTl9OT05FKSAgICAgICAgXAotICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX01PREVfXykgPT0gTExfREFDX1dBVkVfQVVUT19HRU5FUkFUSU9OX05PSVNFKSAgICBcCi0gICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fTU9ERV9fKSA9PSBMTF9EQUNfV0FWRV9BVVRPX0dFTkVSQVRJT05fVFJJQU5HTEUpIFwKKyAgKCgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9NT0RFX18pID09IExMX0RBQ19XQVZFX0FVVE9fR0VORVJBVElPTl9OT05FKSAgICAgICAgICAgXAorICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX01PREVfXykgPT0gTExfREFDX1dBVkVfQVVUT19HRU5FUkFUSU9OX05PSVNFKSAgICAgICBcCisgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fTU9ERV9fKSA9PSBMTF9EQUNfV0FWRV9BVVRPX0dFTkVSQVRJT05fVFJJQU5HTEUpICAgIFwKICAgKQogCiAjZGVmaW5lIElTX0xMX0RBQ19XQVZFX0FVVE9fR0VORVJfQ09ORklHKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fTU9ERV9fLCBfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSAgXAogICAoICgoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fTU9ERV9fKSA9PSBMTF9EQUNfV0FWRV9BVVRPX0dFTkVSQVRJT05fTk9JU0UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgJiYgKCAgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUMCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFMxXzApICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTMl8wKSAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzNfMCkgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFM0XzApICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTNV8wKSAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzZfMCkgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFM3XzApICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTOF8wKSAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzlfMCkgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFMxMF8wKSAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTMTFfMCkpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgJiYgKCgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTMV8wKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzJfMCkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFMzXzApICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTNF8wKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzVfMCkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFM2XzApICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTN18wKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzhfMCkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFM5XzApICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTMTBfMCkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzExXzApKSAgICAgICAgICAgICAgICAgICAgIFwKICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfHwoKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX01PREVfXykgPT0gTExfREFDX1dBVkVfQVVUT19HRU5FUkFUSU9OX1RSSUFOR0xFKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICYmICggICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV8xKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMykgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzcpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV8xNSkgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMzEpICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzYzKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV8xMjcpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMjU1KSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzUxMSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV8xMDIzKSAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMjA0NykgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzQwOTUpKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICYmICgoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzMpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV83KSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMTUpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzMxKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV82MykgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMTI3KSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzI1NSkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV81MTEpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMTAyMykgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzIwNDcpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV80MDk1KSkgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKQogCiAjZGVmaW5lIElTX0xMX0RBQ19PVVRQVVRfQlVGRkVSKF9fT1VUUFVUX0JVRkZFUl9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoICAgKChfX09VVFBVVF9CVUZGRVJfXykgPT0gTExfREFDX09VVFBVVF9CVUZGRVJfRU5BQkxFKSAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHx8ICgoX19PVVRQVVRfQlVGRkVSX18pID09IExMX0RBQ19PVVRQVVRfQlVGRkVSX0RJU0FCTEUpICAgICAgICAgICAgICAgICBcCisgICgoKF9fT1VUUFVUX0JVRkZFUl9fKSA9PSBMTF9EQUNfT1VUUFVUX0JVRkZFUl9FTkFCTEUpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgfHwgKChfX09VVFBVVF9CVUZGRVJfXykgPT0gTExfREFDX09VVFBVVF9CVUZGRVJfRElTQUJMRSkgICAgICAgICAgICAgICAgICAgIFwKICAgKQogCiAvKioKQEAgLTEyOSw3ICsxMjksNyBAQAogICAqICAgICAgICAgIC0gU1VDQ0VTUzogREFDIHJlZ2lzdGVycyBhcmUgZGUtaW5pdGlhbGl6ZWQKICAgKiAgICAgICAgICAtIEVSUk9SOiBub3QgYXBwbGljYWJsZQogICAqLwotRXJyb3JTdGF0dXMgTExfREFDX0RlSW5pdChEQUNfVHlwZURlZiAqREFDeCkKK0Vycm9yU3RhdHVzIExMX0RBQ19EZUluaXQoY29uc3QgREFDX1R5cGVEZWYgKkRBQ3gpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19EQUNfQUxMX0lOU1RBTkNFKERBQ3gpKTsKQEAgLTE2OCw3ICsxNjgsNyBAQAogICAqICAgICAgICAgIC0gU1VDQ0VTUzogREFDIHJlZ2lzdGVycyBhcmUgaW5pdGlhbGl6ZWQKICAgKiAgICAgICAgICAtIEVSUk9SOiBEQUMgcmVnaXN0ZXJzIGFyZSBub3QgaW5pdGlhbGl6ZWQKICAgKi8KLUVycm9yU3RhdHVzIExMX0RBQ19Jbml0KERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCwgTExfREFDX0luaXRUeXBlRGVmICpEQUNfSW5pdFN0cnVjdCkKK0Vycm9yU3RhdHVzIExMX0RBQ19Jbml0KERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCwgY29uc3QgTExfREFDX0luaXRUeXBlRGVmICpEQUNfSW5pdFN0cnVjdCkKIHsKICAgRXJyb3JTdGF0dXMgc3RhdHVzID0gU1VDQ0VTUzsKIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9sbF9kbWEuYyBiL1NyYy9zdG0zMmYxeHhfbGxfZG1hLmMKaW5kZXggYzljNjliNC4uOThkMDNlMyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjF4eF9sbF9kbWEuYworKysgYi9TcmMvc3RtMzJmMXh4X2xsX2RtYS5jCkBAIC05LDggKzksOCBAQAogICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMDksMyArMzA5LDQgQEAKICAgKi8KIAogI2VuZGlmIC8qIFVTRV9GVUxMX0xMX0RSSVZFUiAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2xsX2V4dGkuYyBiL1NyYy9zdG0zMmYxeHhfbGxfZXh0aS5jCmluZGV4IDc3OTE2MzQuLmZlMTljYTEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfbGxfZXh0aS5jCisrKyBiL1NyYy9zdG0zMmYxeHhfbGxfZXh0aS5jCkBAIC0yMTAsMyArMjEwLDQgQEAKICAgKi8KIAogI2VuZGlmIC8qIFVTRV9GVUxMX0xMX0RSSVZFUiAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2xsX2ZzbWMuYyBiL1NyYy9zdG0zMmYxeHhfbGxfZnNtYy5jCmluZGV4IDdkYjU2YWYuLjNkNDI1NjUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfbGxfZnNtYy5jCisrKyBiL1NyYy9zdG0zMmYxeHhfbGxfZnNtYy5jCkBAIC0xMCw2ICsxMCwxNyBAQAogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucwogICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBhdHRlbnRpb24KKyAgKgorICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgKgorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQorICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KKyAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgRlNNQyBwZXJpcGhlcmFsIGZlYXR1cmVzICMjIyMjCkBAIC00MCwxNiArNTEsNiBAQAogCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKiBAYXR0ZW50aW9uCi0gICoKLSAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgotICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCi0gICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCi0gICoKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC01OCw3ICs1OSw4IEBACiAvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMXh4X0hBTF9Ecml2ZXIKICAgKiBAewogICAqLwotI2lmIGRlZmluZWQoSEFMX05PUl9NT0RVTEVfRU5BQkxFRCkgfHwgZGVmaW5lZChIQUxfU1JBTV9NT0RVTEVfRU5BQkxFRCkgfHwgZGVmaW5lZChIQUxfTkFORF9NT0RVTEVfRU5BQkxFRCkgfHwgZGVmaW5lZChIQUxfUENDQVJEX01PRFVMRV9FTkFCTEVEKQorI2lmIGRlZmluZWQoSEFMX05PUl9NT0RVTEVfRU5BQkxFRCkgfHwgZGVmaW5lZChIQUxfTkFORF9NT0RVTEVfRU5BQkxFRCkgfHwgZGVmaW5lZChIQUxfUENDQVJEX01PRFVMRV9FTkFCTEVEKSBcCisgfHwgZGVmaW5lZChIQUxfU1JBTV9NT0RVTEVfRU5BQkxFRCkKIAogLyoqIEBkZWZncm91cCBGU01DX0xMICBGU01DIExvdyBMYXllcgogICAqIEBicmllZiBGU01DIGRyaXZlciBtb2R1bGVzCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2xsX2dwaW8uYyBiL1NyYy9zdG0zMmYxeHhfbGxfZ3Bpby5jCmluZGV4IDBhNjllZjAuLmU4ZTA1MzQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfbGxfZ3Bpby5jCisrKyBiL1NyYy9zdG0zMmYxeHhfbGxfZ3Bpby5jCkBAIC0yNTMsMyArMjUzLDQgQEAKICAgKi8KIAogI2VuZGlmIC8qIFVTRV9GVUxMX0xMX0RSSVZFUiAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMXh4X2xsX2kyYy5jIGIvU3JjL3N0bTMyZjF4eF9sbF9pMmMuYwppbmRleCAyZjVlODg3Li4yNWE4MzlmIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2xsX2kyYy5jCisrKyBiL1NyYy9zdG0zMmYxeHhfbGxfaTJjLmMKQEAgLTIxNiwzICsyMTYsNCBAQAogICAqLwogCiAjZW5kaWYgLyogVVNFX0ZVTExfTExfRFJJVkVSICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYxeHhfbGxfcmNjLmMgYi9TcmMvc3RtMzJmMXh4X2xsX3JjYy5jCmluZGV4IDZmYTViYmYuLjlkNDY2NzggMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfbGxfcmNjLmMKKysrIGIvU3JjL3N0bTMyZjF4eF9sbF9yY2MuYwpAQCAtOSwxMCArOSw5IEBACiAgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbgorICAqIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KICAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KLSAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIApAQCAtNDY5LDMgKzQ2OCw0IEBACiAgICovCiAKICNlbmRpZiAvKiBVU0VfRlVMTF9MTF9EUklWRVIgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9sbF9zZG1tYy5jIGIvU3JjL3N0bTMyZjF4eF9sbF9zZG1tYy5jCmluZGV4IGZlYjc1ZWQuLjA4MTM0OTEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfbGxfc2RtbWMuYworKysgYi9TcmMvc3RtMzJmMXh4X2xsX3NkbW1jLmMKQEAgLTExLDYgKzExLDE3IEBACiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucwogICAqICAgICAgICAgCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBhdHRlbnRpb24KKyAgKgorICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgKgorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQorICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KKyAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBTRE1NQyBwZXJpcGhlcmFsIGZlYXR1cmVzICMjIyMjCkBAIC0xNDIsMTcgKzE1Myw3IEBACiAgIAogICBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICogQGF0dGVudGlvbgotICAqCi0gICogQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KLSAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgotICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqLworICAqLyAKIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpbmNsdWRlICJzdG0zMmYxeHhfaGFsLmgiCkBAIC0zMDUsMTAgKzMwNiw2IEBACiAgIC8qIFNldCBwb3dlciBzdGF0ZSB0byBPTiAqLyAKICAgU0RJT3gtPlBPV0VSID0gU0RJT19QT1dFUl9QV1JDVFJMOwogCi0gIC8qIDFtczogcmVxdWlyZWQgcG93ZXIgdXAgd2FpdGluZyB0aW1lIGJlZm9yZSBzdGFydGluZyB0aGUgU0QgaW5pdGlhbGl6YXRpb24KLSAgc2VxdWVuY2UgKi8KLSAgSEFMX0RlbGF5KDIpOwotICAKICAgcmV0dXJuIEhBTF9PSzsKIH0KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjF4eF9sbF9zcGkuYyBiL1NyYy9zdG0zMmYxeHhfbGxfc3BpLmMKaW5kZXggMjUzYjYyNy4uNWY1NTdkMyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjF4eF9sbF9zcGkuYworKysgYi9TcmMvc3RtMzJmMXh4X2xsX3NwaS5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAic3RtMzJfYXNzZXJ0LmgiCiAjZWxzZQogI2RlZmluZSBhc3NlcnRfcGFyYW0oZXhwcikgKCh2b2lkKTBVKQotI2VuZGlmCisjZW5kaWYgLyogVVNFX0ZVTExfQVNTRVJUICovCiAKIC8qKiBAYWRkdG9ncm91cCBTVE0zMkYxeHhfTExfRHJpdmVyCiAgICogQHsKQEAgLTUyNSwzICs1MjUsNCBAQAogICAqLwogCiAjZW5kaWYgLyogVVNFX0ZVTExfTExfRFJJVkVSICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYxeHhfbGxfdGltLmMgYi9TcmMvc3RtMzJmMXh4X2xsX3RpbS5jCmluZGV4IDBkNGM4OTcuLjZlMDFkMGYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfbGxfdGltLmMKKysrIGIvU3JjL3N0bTMyZjF4eF9sbF90aW0uYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAgICogICAgICAgICAgLSBTVUNDRVNTOiBUSU14IHJlZ2lzdGVycyBhcmUgZGUtaW5pdGlhbGl6ZWQKICAgKiAgICAgICAgICAtIEVSUk9SOiBpbnZhbGlkIFRJTXggaW5zdGFuY2UKICAgKi8KLUVycm9yU3RhdHVzIExMX1RJTV9EZUluaXQoVElNX1R5cGVEZWYgKlRJTXgpCitFcnJvclN0YXR1cyBMTF9USU1fRGVJbml0KGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICBFcnJvclN0YXR1cyByZXN1bHQgPSBTVUNDRVNTOwogCkBAIC0xODIsMTEyICsxODIsMTEyIEBACiAgICAgTExfQVBCMl9HUlAxX0ZvcmNlUmVzZXQoTExfQVBCMl9HUlAxX1BFUklQSF9USU0xKTsKICAgICBMTF9BUEIyX0dSUDFfUmVsZWFzZVJlc2V0KExMX0FQQjJfR1JQMV9QRVJJUEhfVElNMSk7CiAgIH0KLSNlbmRpZgorI2VuZGlmIC8qIFRJTTEgKi8KICNpZiBkZWZpbmVkKFRJTTMpCiAgIGVsc2UgaWYgKFRJTXggPT0gVElNMykKICAgewogICAgIExMX0FQQjFfR1JQMV9Gb3JjZVJlc2V0KExMX0FQQjFfR1JQMV9QRVJJUEhfVElNMyk7CiAgICAgTExfQVBCMV9HUlAxX1JlbGVhc2VSZXNldChMTF9BUEIxX0dSUDFfUEVSSVBIX1RJTTMpOwogICB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBUSU0zICovCiAjaWYgZGVmaW5lZChUSU00KQogICBlbHNlIGlmIChUSU14ID09IFRJTTQpCiAgIHsKICAgICBMTF9BUEIxX0dSUDFfRm9yY2VSZXNldChMTF9BUEIxX0dSUDFfUEVSSVBIX1RJTTQpOwogICAgIExMX0FQQjFfR1JQMV9SZWxlYXNlUmVzZXQoTExfQVBCMV9HUlAxX1BFUklQSF9USU00KTsKICAgfQotI2VuZGlmCisjZW5kaWYgLyogVElNNCAqLwogI2lmIGRlZmluZWQoVElNNSkKICAgZWxzZSBpZiAoVElNeCA9PSBUSU01KQogICB7CiAgICAgTExfQVBCMV9HUlAxX0ZvcmNlUmVzZXQoTExfQVBCMV9HUlAxX1BFUklQSF9USU01KTsKICAgICBMTF9BUEIxX0dSUDFfUmVsZWFzZVJlc2V0KExMX0FQQjFfR1JQMV9QRVJJUEhfVElNNSk7CiAgIH0KLSNlbmRpZgorI2VuZGlmIC8qIFRJTTUgKi8KICNpZiBkZWZpbmVkKFRJTTYpCiAgIGVsc2UgaWYgKFRJTXggPT0gVElNNikKICAgewogICAgIExMX0FQQjFfR1JQMV9Gb3JjZVJlc2V0KExMX0FQQjFfR1JQMV9QRVJJUEhfVElNNik7CiAgICAgTExfQVBCMV9HUlAxX1JlbGVhc2VSZXNldChMTF9BUEIxX0dSUDFfUEVSSVBIX1RJTTYpOwogICB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBUSU02ICovCiAjaWYgZGVmaW5lZCAoVElNNykKICAgZWxzZSBpZiAoVElNeCA9PSBUSU03KQogICB7CiAgICAgTExfQVBCMV9HUlAxX0ZvcmNlUmVzZXQoTExfQVBCMV9HUlAxX1BFUklQSF9USU03KTsKICAgICBMTF9BUEIxX0dSUDFfUmVsZWFzZVJlc2V0KExMX0FQQjFfR1JQMV9QRVJJUEhfVElNNyk7CiAgIH0KLSNlbmRpZgorI2VuZGlmIC8qIFRJTTcgKi8KICNpZiBkZWZpbmVkKFRJTTgpCiAgIGVsc2UgaWYgKFRJTXggPT0gVElNOCkKICAgewogICAgIExMX0FQQjJfR1JQMV9Gb3JjZVJlc2V0KExMX0FQQjJfR1JQMV9QRVJJUEhfVElNOCk7CiAgICAgTExfQVBCMl9HUlAxX1JlbGVhc2VSZXNldChMTF9BUEIyX0dSUDFfUEVSSVBIX1RJTTgpOwogICB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBUSU04ICovCiAjaWYgZGVmaW5lZChUSU05KQogICBlbHNlIGlmIChUSU14ID09IFRJTTkpCiAgIHsKICAgICBMTF9BUEIyX0dSUDFfRm9yY2VSZXNldChMTF9BUEIyX0dSUDFfUEVSSVBIX1RJTTkpOwogICAgIExMX0FQQjJfR1JQMV9SZWxlYXNlUmVzZXQoTExfQVBCMl9HUlAxX1BFUklQSF9USU05KTsKICAgfQotI2VuZGlmCisjZW5kaWYgLyogVElNOSAqLwogI2lmIGRlZmluZWQoVElNMTApCiAgIGVsc2UgaWYgKFRJTXggPT0gVElNMTApCiAgIHsKICAgICBMTF9BUEIyX0dSUDFfRm9yY2VSZXNldChMTF9BUEIyX0dSUDFfUEVSSVBIX1RJTTEwKTsKICAgICBMTF9BUEIyX0dSUDFfUmVsZWFzZVJlc2V0KExMX0FQQjJfR1JQMV9QRVJJUEhfVElNMTApOwogICB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBUSU0xMCAqLwogI2lmIGRlZmluZWQoVElNMTEpCiAgIGVsc2UgaWYgKFRJTXggPT0gVElNMTEpCiAgIHsKICAgICBMTF9BUEIyX0dSUDFfRm9yY2VSZXNldChMTF9BUEIyX0dSUDFfUEVSSVBIX1RJTTExKTsKICAgICBMTF9BUEIyX0dSUDFfUmVsZWFzZVJlc2V0KExMX0FQQjJfR1JQMV9QRVJJUEhfVElNMTEpOwogICB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBUSU0xMSAqLwogI2lmIGRlZmluZWQoVElNMTIpCiAgIGVsc2UgaWYgKFRJTXggPT0gVElNMTIpCiAgIHsKICAgICBMTF9BUEIxX0dSUDFfRm9yY2VSZXNldChMTF9BUEIxX0dSUDFfUEVSSVBIX1RJTTEyKTsKICAgICBMTF9BUEIxX0dSUDFfUmVsZWFzZVJlc2V0KExMX0FQQjFfR1JQMV9QRVJJUEhfVElNMTIpOwogICB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBUSU0xMiAqLwogI2lmIGRlZmluZWQoVElNMTMpCiAgIGVsc2UgaWYgKFRJTXggPT0gVElNMTMpCiAgIHsKICAgICBMTF9BUEIxX0dSUDFfRm9yY2VSZXNldChMTF9BUEIxX0dSUDFfUEVSSVBIX1RJTTEzKTsKICAgICBMTF9BUEIxX0dSUDFfUmVsZWFzZVJlc2V0KExMX0FQQjFfR1JQMV9QRVJJUEhfVElNMTMpOwogICB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBUSU0xMyAqLwogI2lmIGRlZmluZWQoVElNMTQpCiAgIGVsc2UgaWYgKFRJTXggPT0gVElNMTQpCiAgIHsKICAgICBMTF9BUEIxX0dSUDFfRm9yY2VSZXNldChMTF9BUEIxX0dSUDFfUEVSSVBIX1RJTTE0KTsKICAgICBMTF9BUEIxX0dSUDFfUmVsZWFzZVJlc2V0KExMX0FQQjFfR1JQMV9QRVJJUEhfVElNMTQpOwogICB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBUSU0xNCAqLwogI2lmIGRlZmluZWQoVElNMTUpCiAgIGVsc2UgaWYgKFRJTXggPT0gVElNMTUpCiAgIHsKICAgICBMTF9BUEIyX0dSUDFfRm9yY2VSZXNldChMTF9BUEIyX0dSUDFfUEVSSVBIX1RJTTE1KTsKICAgICBMTF9BUEIyX0dSUDFfUmVsZWFzZVJlc2V0KExMX0FQQjJfR1JQMV9QRVJJUEhfVElNMTUpOwogICB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBUSU0xNSAqLwogI2lmIGRlZmluZWQoVElNMTYpCiAgIGVsc2UgaWYgKFRJTXggPT0gVElNMTYpCiAgIHsKICAgICBMTF9BUEIyX0dSUDFfRm9yY2VSZXNldChMTF9BUEIyX0dSUDFfUEVSSVBIX1RJTTE2KTsKICAgICBMTF9BUEIyX0dSUDFfUmVsZWFzZVJlc2V0KExMX0FQQjJfR1JQMV9QRVJJUEhfVElNMTYpOwogICB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBUSU0xNiAqLwogI2lmIGRlZmluZWQoVElNMTcpCiAgIGVsc2UgaWYgKFRJTXggPT0gVElNMTcpCiAgIHsKICAgICBMTF9BUEIyX0dSUDFfRm9yY2VSZXNldChMTF9BUEIyX0dSUDFfUEVSSVBIX1RJTTE3KTsKICAgICBMTF9BUEIyX0dSUDFfUmVsZWFzZVJlc2V0KExMX0FQQjJfR1JQMV9QRVJJUEhfVElNMTcpOwogICB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBUSU0xNyAqLwogICBlbHNlCiAgIHsKICAgICByZXN1bHQgPSBFUlJPUjsKQEAgLTcyOSw3ICs3MjksNiBAQAogICBNT0RJRllfUkVHKHRtcGJkdHIsIFRJTV9CRFRSX0JLRSwgVElNX0JEVFJJbml0U3RydWN0LT5CcmVha1N0YXRlKTsKICAgTU9ESUZZX1JFRyh0bXBiZHRyLCBUSU1fQkRUUl9CS1AsIFRJTV9CRFRSSW5pdFN0cnVjdC0+QnJlYWtQb2xhcml0eSk7CiAgIE1PRElGWV9SRUcodG1wYmR0ciwgVElNX0JEVFJfQU9FLCBUSU1fQkRUUkluaXRTdHJ1Y3QtPkF1dG9tYXRpY091dHB1dCk7Ci0gIE1PRElGWV9SRUcodG1wYmR0ciwgVElNX0JEVFJfTU9FLCBUSU1fQkRUUkluaXRTdHJ1Y3QtPkF1dG9tYXRpY091dHB1dCk7CiAKICAgLyogU2V0IFRJTXhfQkRUUiAqLwogICBMTF9USU1fV3JpdGVSZWcoVElNeCwgQkRUUiwgdG1wYmR0cik7CkBAIC0xMjA0LDMgKzEyMDMsNCBAQAogICAqLwogCiAjZW5kaWYgLyogVVNFX0ZVTExfTExfRFJJVkVSICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYxeHhfbGxfdXNhcnQuYyBiL1NyYy9zdG0zMmYxeHhfbGxfdXNhcnQuYwppbmRleCBjMDQ3MzdiLi40MzAxZDA5IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMXh4X2xsX3VzYXJ0LmMKKysrIGIvU3JjL3N0bTMyZjF4eF9sbF91c2FydC5jCkBAIC00MzQsMyArNDM0LDUgQEAKICAgKi8KIAogI2VuZGlmIC8qIFVTRV9GVUxMX0xMX0RSSVZFUiAqLworCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYxeHhfbGxfdXNiLmMgYi9TcmMvc3RtMzJmMXh4X2xsX3VzYi5jCmluZGV4IDAwNTIyZWIuLmEyNWYzMDUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYxeHhfbGxfdXNiLmMKKysrIGIvU3JjL3N0bTMyZjF4eF9sbF91c2IuYwpAQCAtMTEsMTggKzExLDYgQEAKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKICAgKgotICBAdmVyYmF0aW0KLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICMjIyMjIEhvdyB0byB1c2UgdGhpcyBkcml2ZXIgIyMjIyMKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgWy4uXQotICAgICAgKCMpIEZpbGwgcGFyYW1ldGVycyBvZiBJbml0IHN0cnVjdHVyZSBpbiBVU0JfT1RHX0NmZ1R5cGVEZWYgc3RydWN0dXJlLgotCi0gICAgICAoIykgQ2FsbCBVU0JfQ29yZUluaXQoKSBBUEkgdG8gaW5pdGlhbGl6ZSB0aGUgVVNCIENvcmUgcGVyaXBoZXJhbC4KLQotICAgICAgKCMpIFRoZSB1cHBlciBIQUwgSENEL1BDRCBkcml2ZXIgd2lsbCBjYWxsIHRoZSByaWdodCByb3V0aW5lcyBmb3IgaXRzIGludGVybmFsIHByb2Nlc3Nlcy4KLQotICBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC0zNCw2ICsyMiwyMCBAQAogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBAdmVyYmF0aW0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgICAgICAgICAgICMjIyMjIEhvdyB0byB1c2UgdGhpcyBkcml2ZXIgIyMjIyMKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgWy4uXQorICAgICAgKCMpIEZpbGwgcGFyYW1ldGVycyBvZiBJbml0IHN0cnVjdHVyZSBpbiBVU0JfQ2ZnVHlwZURlZiBzdHJ1Y3R1cmUuCisKKyAgICAgICgjKSBDYWxsIFVTQl9Db3JlSW5pdCgpIEFQSSB0byBpbml0aWFsaXplIHRoZSBVU0IgQ29yZSBwZXJpcGhlcmFsLgorCisgICAgICAoIykgVGhlIHVwcGVyIEhBTCBIQ0QvUENEIGRyaXZlciB3aWxsIGNhbGwgdGhlIHJpZ2h0IHJvdXRpbmVzIGZvciBpdHMgaW50ZXJuYWwgcHJvY2Vzc2VzLgorCisgIEBlbmR2ZXJiYXRpbQorCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtODIsNyArODQsNiBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiByZXQ7CiAKLQogICAvKiBTZWxlY3QgRlMgRW1iZWRkZWQgUEhZICovCiAgIFVTQngtPkdVU0JDRkcgfD0gVVNCX09UR19HVVNCQ0ZHX1BIWVNFTDsKIApAQCAtMjcyLDkgKzI3Myw2IEBACiAgIC8qIFJlc3RhcnQgdGhlIFBoeSBDbG9jayAqLwogICBVU0J4X1BDR0NDVEwgPSAwVTsKIAotICAvKiBEZXZpY2UgbW9kZSBjb25maWd1cmF0aW9uICovCi0gIFVTQnhfREVWSUNFLT5EQ0ZHIHw9IERDRkdfRlJBTUVfSU5URVJWQUxfODA7Ci0KICAgLyogU2V0IENvcmUgc3BlZWQgdG8gRnVsbCBzcGVlZCBtb2RlICovCiAgICh2b2lkKVVTQl9TZXREZXZTcGVlZChVU0J4LCBVU0JfT1RHX1NQRUVEX0ZVTEwpOwogCkBAIC0zNjksNyArMzY3LDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBVU0JfT1RHX0ZsdXNoVHhGaWZvIDogRmx1c2ggYSBUeCBGSUZPCisgICogQGJyaWVmICBVU0JfRmx1c2hUeEZpZm8gRmx1c2ggYSBUeCBGSUZPCiAgICogQHBhcmFtICBVU0J4ICBTZWxlY3RlZCBkZXZpY2UKICAgKiBAcGFyYW0gIG51bSAgRklGTyBudW1iZXIKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGZyb20gMSB0byAxNQpAQCAtMzc4LDEzICszNzYsMjggQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9GbHVzaFR4RmlmbyhVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngsIHVpbnQzMl90IG51bSkKIHsKLSAgdWludDMyX3QgY291bnQgPSAwVTsKKyAgX19JTyB1aW50MzJfdCBjb3VudCA9IDBVOwogCisgIC8qIFdhaXQgZm9yIEFIQiBtYXN0ZXIgSURMRSBzdGF0ZS4gKi8KKyAgZG8KKyAgeworICAgIGNvdW50Kys7CisKKyAgICBpZiAoY291bnQgPiAyMDAwMDBVKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICB9CisgIH0gd2hpbGUgKChVU0J4LT5HUlNUQ1RMICYgVVNCX09UR19HUlNUQ1RMX0FIQklETCkgPT0gMFUpOworCisgIC8qIEZsdXNoIFRYIEZpZm8gKi8KKyAgY291bnQgPSAwVTsKICAgVVNCeC0+R1JTVENUTCA9IChVU0JfT1RHX0dSU1RDVExfVFhGRkxTSCB8IChudW0gPDwgNikpOwogCiAgIGRvCiAgIHsKLSAgICBpZiAoKytjb3VudCA+IDIwMDAwMFUpCisgICAgY291bnQrKzsKKworICAgIGlmIChjb3VudCA+IDIwMDAwMFUpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgIH0KQEAgLTM5NCwxOSArNDA3LDM0IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgVVNCX0ZsdXNoUnhGaWZvIDogRmx1c2ggUnggRklGTworICAqIEBicmllZiAgVVNCX0ZsdXNoUnhGaWZvICBGbHVzaCBSeCBGSUZPCiAgICogQHBhcmFtICBVU0J4ICBTZWxlY3RlZCBkZXZpY2UKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9GbHVzaFJ4RmlmbyhVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngpCiB7Ci0gIHVpbnQzMl90IGNvdW50ID0gMDsKKyAgX19JTyB1aW50MzJfdCBjb3VudCA9IDBVOwogCisgIC8qIFdhaXQgZm9yIEFIQiBtYXN0ZXIgSURMRSBzdGF0ZS4gKi8KKyAgZG8KKyAgeworICAgIGNvdW50Kys7CisKKyAgICBpZiAoY291bnQgPiAyMDAwMDBVKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICB9CisgIH0gd2hpbGUgKChVU0J4LT5HUlNUQ1RMICYgVVNCX09UR19HUlNUQ1RMX0FIQklETCkgPT0gMFUpOworCisgIC8qIEZsdXNoIFJYIEZpZm8gKi8KKyAgY291bnQgPSAwVTsKICAgVVNCeC0+R1JTVENUTCA9IFVTQl9PVEdfR1JTVENUTF9SWEZGTFNIOwogCiAgIGRvCiAgIHsKLSAgICBpZiAoKytjb3VudCA+IDIwMDAwMFUpCisgICAgY291bnQrKzsKKworICAgIGlmIChjb3VudCA+IDIwMDAwMFUpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgIH0KQEAgLTY1MSw4ICs2NzksMjEgQEAKICAgICAgICovCiAgICAgICBVU0J4X0lORVAoZXBudW0pLT5ESUVQVFNJWiAmPSB+KFVTQl9PVEdfRElFUFRTSVpfWEZSU0laKTsKICAgICAgIFVTQnhfSU5FUChlcG51bSktPkRJRVBUU0laICY9IH4oVVNCX09UR19ESUVQVFNJWl9QS1RDTlQpOwotICAgICAgVVNCeF9JTkVQKGVwbnVtKS0+RElFUFRTSVogfD0gKFVTQl9PVEdfRElFUFRTSVpfUEtUQ05UICYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChlcC0+eGZlcl9sZW4gKyBlcC0+bWF4cGFja2V0IC0gMVUpIC8gZXAtPm1heHBhY2tldCkgPDwgMTkpKTsKKworICAgICAgaWYgKGVwbnVtID09IDBVKQorICAgICAgeworICAgICAgICBpZiAoZXAtPnhmZXJfbGVuID4gZXAtPm1heHBhY2tldCkKKyAgICAgICAgeworICAgICAgICAgIGVwLT54ZmVyX2xlbiA9IGVwLT5tYXhwYWNrZXQ7CisgICAgICAgIH0KKworICAgICAgICBVU0J4X0lORVAoZXBudW0pLT5ESUVQVFNJWiB8PSAoVVNCX09UR19ESUVQVFNJWl9QS1RDTlQgJiAoMVUgPDwgMTkpKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgVVNCeF9JTkVQKGVwbnVtKS0+RElFUFRTSVogfD0gKFVTQl9PVEdfRElFUFRTSVpfUEtUQ05UICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGVwLT54ZmVyX2xlbiArIGVwLT5tYXhwYWNrZXQgLSAxVSkgLyBlcC0+bWF4cGFja2V0KSA8PCAxOSkpOworICAgICAgfQogCiAgICAgICBVU0J4X0lORVAoZXBudW0pLT5ESUVQVFNJWiB8PSAoVVNCX09UR19ESUVQVFNJWl9YRlJTSVogJiBlcC0+eGZlcl9sZW4pOwogCkBAIC02OTYsMTggKzczNywzNCBAQAogICAgIFVTQnhfT1VURVAoZXBudW0pLT5ET0VQVFNJWiAmPSB+KFVTQl9PVEdfRE9FUFRTSVpfWEZSU0laKTsKICAgICBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUFRTSVogJj0gfihVU0JfT1RHX0RPRVBUU0laX1BLVENOVCk7CiAKLSAgICBpZiAoZXAtPnhmZXJfbGVuID09IDBVKQorICAgIGlmIChlcG51bSA9PSAwVSkKICAgICB7Ci0gICAgICBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUFRTSVogfD0gKFVTQl9PVEdfRE9FUFRTSVpfWEZSU0laICYgZXAtPm1heHBhY2tldCk7CisgICAgICBpZiAoZXAtPnhmZXJfbGVuID4gMFUpCisgICAgICB7CisgICAgICAgIGVwLT54ZmVyX2xlbiA9IGVwLT5tYXhwYWNrZXQ7CisgICAgICB9CisKKyAgICAgIC8qIFN0b3JlIHRyYW5zZmVyIHNpemUsIGZvciBFUDAgdGhpcyBpcyBlcXVhbCB0byBlbmRwb2ludCBtYXggcGFja2V0IHNpemUgKi8KKyAgICAgIGVwLT54ZmVyX3NpemUgPSBlcC0+bWF4cGFja2V0OworCisgICAgICBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUFRTSVogfD0gKFVTQl9PVEdfRE9FUFRTSVpfWEZSU0laICYgZXAtPnhmZXJfc2l6ZSk7CiAgICAgICBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUFRTSVogfD0gKFVTQl9PVEdfRE9FUFRTSVpfUEtUQ05UICYgKDFVIDw8IDE5KSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBwa3RjbnQgPSAodWludDE2X3QpKChlcC0+eGZlcl9sZW4gKyBlcC0+bWF4cGFja2V0IC0gMVUpIC8gZXAtPm1heHBhY2tldCk7Ci0gICAgICBlcC0+eGZlcl9zaXplID0gZXAtPm1heHBhY2tldCAqIHBrdGNudDsKKyAgICAgIGlmIChlcC0+eGZlcl9sZW4gPT0gMFUpCisgICAgICB7CisgICAgICAgIFVTQnhfT1VURVAoZXBudW0pLT5ET0VQVFNJWiB8PSAoVVNCX09UR19ET0VQVFNJWl9YRlJTSVogJiBlcC0+bWF4cGFja2V0KTsKKyAgICAgICAgVVNCeF9PVVRFUChlcG51bSktPkRPRVBUU0laIHw9IChVU0JfT1RHX0RPRVBUU0laX1BLVENOVCAmICgxVSA8PCAxOSkpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBwa3RjbnQgPSAodWludDE2X3QpKChlcC0+eGZlcl9sZW4gKyBlcC0+bWF4cGFja2V0IC0gMVUpIC8gZXAtPm1heHBhY2tldCk7CisgICAgICAgIGVwLT54ZmVyX3NpemUgPSBlcC0+bWF4cGFja2V0ICogcGt0Y250OwogCi0gICAgICBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUFRTSVogfD0gVVNCX09UR19ET0VQVFNJWl9QS1RDTlQgJiAoKHVpbnQzMl90KXBrdGNudCA8PCAxOSk7Ci0gICAgICBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUFRTSVogfD0gVVNCX09UR19ET0VQVFNJWl9YRlJTSVogJiBlcC0+eGZlcl9zaXplOworICAgICAgICBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUFRTSVogfD0gVVNCX09UR19ET0VQVFNJWl9QS1RDTlQgJiAoKHVpbnQzMl90KXBrdGNudCA8PCAxOSk7CisgICAgICAgIFVTQnhfT1VURVAoZXBudW0pLT5ET0VQVFNJWiB8PSBVU0JfT1RHX0RPRVBUU0laX1hGUlNJWiAmIGVwLT54ZmVyX3NpemU7CisgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGVwLT50eXBlID09IEVQX1RZUEVfSVNPQykKQEAgLTcyOCw4MSArNzg1LDYgQEAKICAgcmV0dXJuIEhBTF9PSzsKIH0KIAotLyoqCi0gICogQGJyaWVmICBVU0JfRVAwU3RhcnRYZmVyIDogc2V0dXAgYW5kIHN0YXJ0cyBhIHRyYW5zZmVyIG92ZXIgdGhlIEVQICAwCi0gICogQHBhcmFtICBVU0J4ICBTZWxlY3RlZCBkZXZpY2UKLSAgKiBAcGFyYW0gIGVwIHBvaW50ZXIgdG8gZW5kcG9pbnQgc3RydWN0dXJlCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCi0gICovCi1IQUxfU3RhdHVzVHlwZURlZiBVU0JfRVAwU3RhcnRYZmVyKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgVVNCX09UR19FUFR5cGVEZWYgKmVwKQotewotICB1aW50MzJfdCBVU0J4X0JBU0UgPSAodWludDMyX3QpVVNCeDsKLSAgdWludDMyX3QgZXBudW0gPSAodWludDMyX3QpZXAtPm51bTsKLQotICAvKiBJTiBlbmRwb2ludCAqLwotICBpZiAoZXAtPmlzX2luID09IDFVKQotICB7Ci0gICAgLyogWmVybyBMZW5ndGggUGFja2V0PyAqLwotICAgIGlmIChlcC0+eGZlcl9sZW4gPT0gMFUpCi0gICAgewotICAgICAgVVNCeF9JTkVQKGVwbnVtKS0+RElFUFRTSVogJj0gfihVU0JfT1RHX0RJRVBUU0laX1BLVENOVCk7Ci0gICAgICBVU0J4X0lORVAoZXBudW0pLT5ESUVQVFNJWiB8PSAoVVNCX09UR19ESUVQVFNJWl9QS1RDTlQgJiAoMVUgPDwgMTkpKTsKLSAgICAgIFVTQnhfSU5FUChlcG51bSktPkRJRVBUU0laICY9IH4oVVNCX09UR19ESUVQVFNJWl9YRlJTSVopOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLyogUHJvZ3JhbSB0aGUgdHJhbnNmZXIgc2l6ZSBhbmQgcGFja2V0IGNvdW50Ci0gICAgICAqIGFzIGZvbGxvd3M6IHhmZXJzaXplID0gTiAqIG1heHBhY2tldCArCi0gICAgICAqIHNob3J0X3BhY2tldCBwa3RjbnQgPSBOICsgKHNob3J0X3BhY2tldAotICAgICAgKiBleGlzdCA/IDEgOiAwKQotICAgICAgKi8KLSAgICAgIFVTQnhfSU5FUChlcG51bSktPkRJRVBUU0laICY9IH4oVVNCX09UR19ESUVQVFNJWl9YRlJTSVopOwotICAgICAgVVNCeF9JTkVQKGVwbnVtKS0+RElFUFRTSVogJj0gfihVU0JfT1RHX0RJRVBUU0laX1BLVENOVCk7Ci0KLSAgICAgIGlmIChlcC0+eGZlcl9sZW4gPiBlcC0+bWF4cGFja2V0KQotICAgICAgewotICAgICAgICBlcC0+eGZlcl9sZW4gPSBlcC0+bWF4cGFja2V0OwotICAgICAgfQotICAgICAgVVNCeF9JTkVQKGVwbnVtKS0+RElFUFRTSVogfD0gKFVTQl9PVEdfRElFUFRTSVpfUEtUQ05UICYgKDFVIDw8IDE5KSk7Ci0gICAgICBVU0J4X0lORVAoZXBudW0pLT5ESUVQVFNJWiB8PSAoVVNCX09UR19ESUVQVFNJWl9YRlJTSVogJiBlcC0+eGZlcl9sZW4pOwotICAgIH0KLQotICAgIC8qIEVQIGVuYWJsZSwgSU4gZGF0YSBpbiBGSUZPICovCi0gICAgVVNCeF9JTkVQKGVwbnVtKS0+RElFUENUTCB8PSAoVVNCX09UR19ESUVQQ1RMX0NOQUsgfCBVU0JfT1RHX0RJRVBDVExfRVBFTkEpOwotCi0gICAgLyogRW5hYmxlIHRoZSBUeCBGSUZPIEVtcHR5IEludGVycnVwdCBmb3IgdGhpcyBFUCAqLwotICAgIGlmIChlcC0+eGZlcl9sZW4gPiAwVSkKLSAgICB7Ci0gICAgICBVU0J4X0RFVklDRS0+RElFUEVNUE1TSyB8PSAxVUwgPDwgKGVwLT5udW0gJiBFUF9BRERSX01TSyk7Ci0gICAgfQotICB9Ci0gIGVsc2UgLyogT1VUIGVuZHBvaW50ICovCi0gIHsKLSAgICAvKiBQcm9ncmFtIHRoZSB0cmFuc2ZlciBzaXplIGFuZCBwYWNrZXQgY291bnQgYXMgZm9sbG93czoKLSAgICAqIHBrdGNudCA9IE4KLSAgICAqIHhmZXJzaXplID0gTiAqIG1heHBhY2tldAotICAgICovCi0gICAgVVNCeF9PVVRFUChlcG51bSktPkRPRVBUU0laICY9IH4oVVNCX09UR19ET0VQVFNJWl9YRlJTSVopOwotICAgIFVTQnhfT1VURVAoZXBudW0pLT5ET0VQVFNJWiAmPSB+KFVTQl9PVEdfRE9FUFRTSVpfUEtUQ05UKTsKLQotICAgIGlmIChlcC0+eGZlcl9sZW4gPiAwVSkKLSAgICB7Ci0gICAgICBlcC0+eGZlcl9sZW4gPSBlcC0+bWF4cGFja2V0OwotICAgIH0KLQotICAgIC8qIFN0b3JlIHRyYW5zZmVyIHNpemUsIGZvciBFUDAgdGhpcyBpcyBlcXVhbCB0byBlbmRwb2ludCBtYXggcGFja2V0IHNpemUgKi8KLSAgICBlcC0+eGZlcl9zaXplID0gZXAtPm1heHBhY2tldDsKLQotICAgIFVTQnhfT1VURVAoZXBudW0pLT5ET0VQVFNJWiB8PSAoVVNCX09UR19ET0VQVFNJWl9QS1RDTlQgJiAoMVUgPDwgMTkpKTsKLSAgICBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUFRTSVogfD0gKFVTQl9PVEdfRE9FUFRTSVpfWEZSU0laICYgZXAtPnhmZXJfc2l6ZSk7Ci0KLSAgICAvKiBFUCBlbmFibGUgKi8KLSAgICBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUENUTCB8PSAoVVNCX09UR19ET0VQQ1RMX0NOQUsgfCBVU0JfT1RHX0RPRVBDVExfRVBFTkEpOwotICB9Ci0KLSAgcmV0dXJuIEhBTF9PSzsKLX0KLQogCiAvKioKICAgICogQGJyaWVmICBVU0JfRVBTdG9wdFhmZXIgIFN0b3AgdHJhbnNmZXIgb24gYW4gRVAKQEAgLTgyNyw3ICs4MDksOSBAQAogCiAgICAgICBkbwogICAgICAgewotICAgICAgICBpZiAoKytjb3VudCA+IDEwMDAwVSkKKyAgICAgICAgY291bnQrKzsKKworICAgICAgICBpZiAoY291bnQgPiAxMDAwMFUpCiAgICAgICAgIHsKICAgICAgICAgICByZXQgPSBIQUxfRVJST1I7CiAgICAgICAgICAgYnJlYWs7CkBAIC04NDQsNyArODI4LDkgQEAKIAogICAgICAgZG8KICAgICAgIHsKLSAgICAgICAgaWYgKCsrY291bnQgPiAxMDAwMFUpCisgICAgICAgIGNvdW50Kys7CisKKyAgICAgICAgaWYgKGNvdW50ID4gMTAwMDBVKQogICAgICAgICB7CiAgICAgICAgICAgcmV0ID0gSEFMX0VSUk9SOwogICAgICAgICAgIGJyZWFrOwpAQCAtMTAzNyw3ICsxMDIzLDcgQEAKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBmcm9tIDAgdG8gMjU1CiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiAgVVNCX1NldERldkFkZHJlc3MoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCB1aW50OF90IGFkZHJlc3MpCitIQUxfU3RhdHVzVHlwZURlZiBVU0JfU2V0RGV2QWRkcmVzcyhVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngsIHVpbnQ4X3QgYWRkcmVzcykKIHsKICAgdWludDMyX3QgVVNCeF9CQVNFID0gKHVpbnQzMl90KVVTQng7CiAKQEAgLTEwNTIsNyArMTAzOCw3IEBACiAgICogQHBhcmFtICBVU0J4ICBTZWxlY3RlZCBkZXZpY2UKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmICBVU0JfRGV2Q29ubmVjdChVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngpCitIQUxfU3RhdHVzVHlwZURlZiBVU0JfRGV2Q29ubmVjdChVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngpCiB7CiAgIHVpbnQzMl90IFVTQnhfQkFTRSA9ICh1aW50MzJfdClVU0J4OwogCkBAIC0xMDY5LDcgKzEwNTUsNyBAQAogICAqIEBwYXJhbSAgVVNCeCAgU2VsZWN0ZWQgZGV2aWNlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiAgVVNCX0RldkRpc2Nvbm5lY3QoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KQorSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0RldkRpc2Nvbm5lY3QoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KQogewogICB1aW50MzJfdCBVU0J4X0JBU0UgPSAodWludDMyX3QpVVNCeDsKIApAQCAtMTA4NCw5ICsxMDcwLDkgQEAKIC8qKgogICAqIEBicmllZiAgVVNCX1JlYWRJbnRlcnJ1cHRzOiByZXR1cm4gdGhlIGdsb2JhbCBVU0IgaW50ZXJydXB0IHN0YXR1cwogICAqIEBwYXJhbSAgVVNCeCAgU2VsZWN0ZWQgZGV2aWNlCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCisgICogQHJldHZhbCBVU0IgR2xvYmFsIEludGVycnVwdCBzdGF0dXMKICAgKi8KLXVpbnQzMl90ICBVU0JfUmVhZEludGVycnVwdHMoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KQordWludDMyX3QgVVNCX1JlYWRJbnRlcnJ1cHRzKFVTQl9PVEdfR2xvYmFsVHlwZURlZiBjb25zdCAqVVNCeCkKIHsKICAgdWludDMyX3QgdG1wcmVnOwogCkBAIC0xMDk3LDkgKzEwODMsMjYgQEAKIH0KIAogLyoqCisgICogQGJyaWVmICBVU0JfUmVhZENoSW50ZXJydXB0czogcmV0dXJuIFVTQiBjaGFubmVsIGludGVycnVwdCBzdGF0dXMKKyAgKiBAcGFyYW0gIFVTQnggIFNlbGVjdGVkIGRldmljZQorICAqIEBwYXJhbSAgY2hudW0gQ2hhbm5lbCBudW1iZXIKKyAgKiBAcmV0dmFsIFVTQiBDaGFubmVsIEludGVycnVwdCBzdGF0dXMKKyAgKi8KK3VpbnQzMl90IFVTQl9SZWFkQ2hJbnRlcnJ1cHRzKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgdWludDhfdCBjaG51bSkKK3sKKyAgdWludDMyX3QgVVNCeF9CQVNFID0gKHVpbnQzMl90KVVTQng7CisgIHVpbnQzMl90IHRtcHJlZzsKKworICB0bXByZWcgPSBVU0J4X0hDKGNobnVtKS0+SENJTlQ7CisgIHRtcHJlZyAmPSBVU0J4X0hDKGNobnVtKS0+SENJTlRNU0s7CisKKyAgcmV0dXJuIHRtcHJlZzsKK30KKworLyoqCiAgICogQGJyaWVmICBVU0JfUmVhZERldkFsbE91dEVwSW50ZXJydXB0OiByZXR1cm4gdGhlIFVTQiBkZXZpY2UgT1VUIGVuZHBvaW50cyBpbnRlcnJ1cHQgc3RhdHVzCiAgICogQHBhcmFtICBVU0J4ICBTZWxlY3RlZCBkZXZpY2UKLSAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKiBAcmV0dmFsIFVTQiBEZXZpY2UgT1VUIEVQIGludGVycnVwdCBzdGF0dXMKICAgKi8KIHVpbnQzMl90IFVTQl9SZWFkRGV2QWxsT3V0RXBJbnRlcnJ1cHQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KQogewpAQCAtMTExNSw3ICsxMTE4LDcgQEAKIC8qKgogICAqIEBicmllZiAgVVNCX1JlYWREZXZBbGxJbkVwSW50ZXJydXB0OiByZXR1cm4gdGhlIFVTQiBkZXZpY2UgSU4gZW5kcG9pbnRzIGludGVycnVwdCBzdGF0dXMKICAgKiBAcGFyYW0gIFVTQnggIFNlbGVjdGVkIGRldmljZQotICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqIEByZXR2YWwgVVNCIERldmljZSBJTiBFUCBpbnRlcnJ1cHQgc3RhdHVzCiAgICovCiB1aW50MzJfdCBVU0JfUmVhZERldkFsbEluRXBJbnRlcnJ1cHQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KQogewpAQCAtMTE5Nyw3ICsxMjAwLDcgQEAKICAgKiBAcGFyYW0gIFVTQnggIFNlbGVjdGVkIGRldmljZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgIFVTQl9BY3RpdmF0ZVNldHVwKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCkKK0hBTF9TdGF0dXNUeXBlRGVmIFVTQl9BY3RpdmF0ZVNldHVwKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCkKIHsKICAgdWludDMyX3QgVVNCeF9CQVNFID0gKHVpbnQzMl90KVVTQng7CiAKQEAgLTEyNDQsMTIgKzEyNDcsMTQgQEAKICAgKi8KIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBVU0JfQ29yZVJlc2V0KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCkKIHsKLSAgdWludDMyX3QgY291bnQgPSAwVTsKKyAgX19JTyB1aW50MzJfdCBjb3VudCA9IDBVOwogCiAgIC8qIFdhaXQgZm9yIEFIQiBtYXN0ZXIgSURMRSBzdGF0ZS4gKi8KICAgZG8KICAgewotICAgIGlmICgrK2NvdW50ID4gMjAwMDAwVSkKKyAgICBjb3VudCsrOworCisgICAgaWYgKGNvdW50ID4gMjAwMDAwVSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQpAQCAtMTI2MSw3ICsxMjY2LDkgQEAKIAogICBkbwogICB7Ci0gICAgaWYgKCsrY291bnQgPiAyMDAwMDBVKQorICAgIGNvdW50Kys7CisKKyAgICBpZiAoY291bnQgPiAyMDAwMDBVKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICB9CkBAIC0xMjgwLDYgKzEyODcsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0hvc3RJbml0KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgVVNCX09UR19DZmdUeXBlRGVmIGNmZykKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgcmV0ID0gSEFMX09LOwogICB1aW50MzJfdCBVU0J4X0JBU0UgPSAodWludDMyX3QpVVNCeDsKICAgdWludDMyX3QgaTsKIApAQCAtMTI5MywxMyArMTMwMSwyMCBAQAogICBVU0J4X0hPU1QtPkhDRkcgJj0gfihVU0JfT1RHX0hDRkdfRlNMU1MpOwogCiAgIC8qIE1ha2Ugc3VyZSB0aGUgRklGT3MgYXJlIGZsdXNoZWQuICovCi0gICh2b2lkKVVTQl9GbHVzaFR4RmlmbyhVU0J4LCAweDEwVSk7IC8qIGFsbCBUeCBGSUZPcyAqLwotICAodm9pZClVU0JfRmx1c2hSeEZpZm8oVVNCeCk7CisgIGlmIChVU0JfRmx1c2hUeEZpZm8oVVNCeCwgMHgxMFUpICE9IEhBTF9PSykgLyogYWxsIFR4IEZJRk9zICovCisgIHsKKyAgICByZXQgPSBIQUxfRVJST1I7CisgIH0KKworICBpZiAoVVNCX0ZsdXNoUnhGaWZvKFVTQngpICE9IEhBTF9PSykKKyAgeworICAgIHJldCA9IEhBTF9FUlJPUjsKKyAgfQogCiAgIC8qIENsZWFyIGFsbCBwZW5kaW5nIEhDIEludGVycnVwdHMgKi8KICAgZm9yIChpID0gMFU7IGkgPCBjZmcuSG9zdF9jaGFubmVsczsgaSsrKQogICB7Ci0gICAgVVNCeF9IQyhpKS0+SENJTlQgPSAweEZGRkZGRkZGVTsKKyAgICBVU0J4X0hDKGkpLT5IQ0lOVCA9IENMRUFSX0lOVEVSUlVQVF9NQVNLOwogICAgIFVTQnhfSEMoaSktPkhDSU5UTVNLID0gMFU7CiAgIH0KIApAQCAtMTMwNyw3ICsxMzIyLDcgQEAKICAgVVNCeC0+R0lOVE1TSyA9IDBVOwogCiAgIC8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgKi8KLSAgVVNCeC0+R0lOVFNUUyA9IDB4RkZGRkZGRkZVOworICBVU0J4LT5HSU5UU1RTID0gQ0xFQVJfSU5URVJSVVBUX01BU0s7CiAKICAgLyogc2V0IFJ4IEZJRk8gc2l6ZSAqLwogICBVU0J4LT5HUlhGU0laICA9IDB4ODBVOwpAQCAtMTMyMSw3ICsxMzM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgVVNCX09UR19HSU5UTVNLX1NPRk0gICAgICAgICAgICAgfCBVU0JfT1RHX0dJTlRTVFNfRElTQ0lOVCB8IFwKICAgICAgICAgICAgICAgICAgICAgVVNCX09UR19HSU5UTVNLX1BYRlJNX0lJU09PWEZSTSAgfCBVU0JfT1RHX0dJTlRNU0tfV1VJTSk7CiAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC0xMzQzLDE1ICsxMzU4LDE1IEBACiAKICAgaWYgKGZyZXEgPT0gSENGR180OF9NSFopCiAgIHsKLSAgICBVU0J4X0hPU1QtPkhGSVIgPSA0ODAwMFU7CisgICAgVVNCeF9IT1NULT5IRklSID0gSEZJUl80OF9NSFo7CiAgIH0KICAgZWxzZSBpZiAoZnJlcSA9PSBIQ0ZHXzZfTUhaKQogICB7Ci0gICAgVVNCeF9IT1NULT5IRklSID0gNjAwMFU7CisgICAgVVNCeF9IT1NULT5IRklSID0gSEZJUl82X01IWjsKICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiAuLi4gKi8KKyAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKICAgcmV0dXJuIEhBTF9PSzsKQEAgLTE0MjAsNyArMTQzNSw3IEBACiAgICogICAgICAgICAgICBAYXJnIEhDRF9TUEVFRF9GVUxMOiBGdWxsIHNwZWVkIG1vZGUKICAgKiAgICAgICAgICAgIEBhcmcgSENEX1NQRUVEX0xPVzogTG93IHNwZWVkIG1vZGUKICAgKi8KLXVpbnQzMl90IFVTQl9HZXRIb3N0U3BlZWQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KQordWludDMyX3QgVVNCX0dldEhvc3RTcGVlZChVU0JfT1RHX0dsb2JhbFR5cGVEZWYgY29uc3QgKlVTQngpCiB7CiAgIHVpbnQzMl90IFVTQnhfQkFTRSA9ICh1aW50MzJfdClVU0J4OwogICBfX0lPIHVpbnQzMl90IGhwcnQwID0gMFU7CkBAIC0xNDM0LDcgKzE0NDksNyBAQAogICAqIEBwYXJhbSAgVVNCeCAgU2VsZWN0ZWQgZGV2aWNlCiAgICogQHJldHZhbCBjdXJyZW50IGZyYW1lIG51bWJlcgogICAqLwotdWludDMyX3QgVVNCX0dldEN1cnJlbnRGcmFtZShVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngpCit1aW50MzJfdCBVU0JfR2V0Q3VycmVudEZyYW1lKFVTQl9PVEdfR2xvYmFsVHlwZURlZiBjb25zdCAqVVNCeCkKIHsKICAgdWludDMyX3QgVVNCeF9CQVNFID0gKHVpbnQzMl90KVVTQng7CiAKQEAgLTE0NzUsNyArMTQ5MCw3IEBACiAgIHVpbnQzMl90IEhvc3RDb3JlU3BlZWQ7CiAKICAgLyogQ2xlYXIgb2xkIGludGVycnVwdCBjb25kaXRpb25zIGZvciB0aGlzIGhvc3QgY2hhbm5lbC4gKi8KLSAgVVNCeF9IQygodWludDMyX3QpY2hfbnVtKS0+SENJTlQgPSAweEZGRkZGRkZGVTsKKyAgVVNCeF9IQygodWludDMyX3QpY2hfbnVtKS0+SENJTlQgPSBDTEVBUl9JTlRFUlJVUFRfTUFTSzsKIAogICAvKiBFbmFibGUgY2hhbm5lbCBpbnRlcnJ1cHRzIHJlcXVpcmVkIGZvciB0aGlzIHRyYW5zZmVyLiAqLwogICBzd2l0Y2ggKGVwX3R5cGUpCkBAIC0xNTI4LDYgKzE1NDMsOSBAQAogICAgICAgYnJlYWs7CiAgIH0KIAorICAvKiBFbmFibGUgaG9zdCBjaGFubmVsIEhhbHQgaW50ZXJydXB0ICovCisgIFVTQnhfSEMoKHVpbnQzMl90KWNoX251bSktPkhDSU5UTVNLIHw9IFVTQl9PVEdfSENJTlRNU0tfQ0hITTsKKwogICAvKiBFbmFibGUgdGhlIHRvcCBsZXZlbCBob3N0IGNoYW5uZWwgaW50ZXJydXB0LiAqLwogICBVU0J4X0hPU1QtPkhBSU5UTVNLIHw9IDFVTCA8PCAoY2hfbnVtICYgMHhGVSk7CiAKQEAgLTE1NTksNyArMTU3Nyw4IEBACiAgIFVTQnhfSEMoKHVpbnQzMl90KWNoX251bSktPkhDQ0hBUiA9ICgoKHVpbnQzMl90KWRldl9hZGRyZXNzIDw8IDIyKSAmIFVTQl9PVEdfSENDSEFSX0RBRCkgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgodWludDMyX3QpZXBudW0gJiAweDdGVSkgPDwgMTEpICYgVVNCX09UR19IQ0NIQVJfRVBOVU0pIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpZXBfdHlwZSA8PCAxOCkgJiBVU0JfT1RHX0hDQ0hBUl9FUFRZUCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KW1wcyAmIFVTQl9PVEdfSENDSEFSX01QU0laKSB8IEhDY2hhckVwRGlyIHwgSENjaGFyTG93U3BlZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpbXBzICYgVVNCX09UR19IQ0NIQVJfTVBTSVopIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX09UR19IQ0NIQVJfTUNfMCB8IEhDY2hhckVwRGlyIHwgSENjaGFyTG93U3BlZWQ7CiAKICAgaWYgKChlcF90eXBlID09IEVQX1RZUEVfSU5UUikgfHwgKGVwX3R5cGUgPT0gRVBfVFlQRV9JU09DKSkKICAgewpAQCAtMTU4Myw3ICsxNjAyLDcgQEAKICAgdWludDhfdCAgaXNfb2RkZnJhbWU7CiAgIHVpbnQxNl90IGxlbl93b3JkczsKICAgdWludDE2X3QgbnVtX3BhY2tldHM7Ci0gIHVpbnQxNl90IG1heF9oY19wa3RfY291bnQgPSAyNTZVOworICB1aW50MTZfdCBtYXhfaGNfcGt0X2NvdW50ID0gSENfTUFYX1BLVF9DTlQ7CiAKICAgLyogQ29tcHV0ZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHBhY2tldHMgYXNzb2NpYXRlZCB0byB0aGUgdHJhbnNmZXIgKi8KICAgaWYgKGhjLT54ZmVyX2xlbiA+IDBVKQpAQCAtMTcwMywxMiArMTcyMiwxNyBAQAogewogICB1aW50MzJfdCBVU0J4X0JBU0UgPSAodWludDMyX3QpVVNCeDsKICAgdWludDMyX3QgaGNudW0gPSAodWludDMyX3QpaGNfbnVtOwotICB1aW50MzJfdCBjb3VudCA9IDBVOworICBfX0lPIHVpbnQzMl90IGNvdW50ID0gMFU7CiAgIHVpbnQzMl90IEhjRXBUeXBlID0gKFVTQnhfSEMoaGNudW0pLT5IQ0NIQVIgJiBVU0JfT1RHX0hDQ0hBUl9FUFRZUCkgPj4gMTg7CiAgIHVpbnQzMl90IENoYW5uZWxFbmEgPSAoVVNCeF9IQyhoY251bSktPkhDQ0hBUiAmIFVTQl9PVEdfSENDSEFSX0NIRU5BKSA+PiAzMTsKKyAgdWludDMyX3QgU3BsaXRFbmEgPSAoVVNCeF9IQyhoY251bSktPkhDU1BMVCAmIFVTQl9PVEdfSENTUExUX1NQTElURU4pID4+IDMxOwogCi0gIGlmICgoKFVTQngtPkdBSEJDRkcgJiBVU0JfT1RHX0dBSEJDRkdfRE1BRU4pID09IFVTQl9PVEdfR0FIQkNGR19ETUFFTikgJiYKLSAgICAgIChDaGFubmVsRW5hID09IDBVKSkKKyAgLyogSW4gYnVmZmVyIERNQSwgQ2hhbm5lbCBkaXNhYmxlIG11c3Qgbm90IGJlIHByb2dyYW1tZWQgZm9yIG5vbi1zcGxpdCBwZXJpb2RpYyBjaGFubmVscy4KKyAgICAgQXQgdGhlIGVuZCBvZiB0aGUgbmV4dCB1ZnJhbWUvZnJhbWUgKGluIHRoZSB3b3JzdCBjYXNlKSwgdGhlIGNvcmUgZ2VuZXJhdGVzIGEgY2hhbm5lbCBoYWx0ZWQKKyAgICAgYW5kIGRpc2FibGVzIHRoZSBjaGFubmVsIGF1dG9tYXRpY2FsbHkuICovCisKKyAgaWYgKCgoKFVTQngtPkdBSEJDRkcgJiBVU0JfT1RHX0dBSEJDRkdfRE1BRU4pID09IFVTQl9PVEdfR0FIQkNGR19ETUFFTikgJiYgKFNwbGl0RW5hID09IDBVKSkgJiYKKyAgICAgICgoQ2hhbm5lbEVuYSA9PSAwVSkgfHwgKCgoSGNFcFR5cGUgPT0gSENDSEFSX0lTT0MpIHx8IChIY0VwVHlwZSA9PSBIQ0NIQVJfSU5UUikpKSkpCiAgIHsKICAgICByZXR1cm4gSEFMX09LOwogICB9CkBAIC0xNzI0LDEwICsxNzQ4LDExIEBACiAgICAgICB7CiAgICAgICAgIFVTQnhfSEMoaGNudW0pLT5IQ0NIQVIgJj0gflVTQl9PVEdfSENDSEFSX0NIRU5BOwogICAgICAgICBVU0J4X0hDKGhjbnVtKS0+SENDSEFSIHw9IFVTQl9PVEdfSENDSEFSX0NIRU5BOwotICAgICAgICBVU0J4X0hDKGhjbnVtKS0+SENDSEFSICY9IH5VU0JfT1RHX0hDQ0hBUl9FUERJUjsKICAgICAgICAgZG8KICAgICAgICAgewotICAgICAgICAgIGlmICgrK2NvdW50ID4gMTAwMFUpCisgICAgICAgICAgY291bnQrKzsKKworICAgICAgICAgIGlmIChjb3VudCA+IDEwMDBVKQogICAgICAgICAgIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KQEAgLTE3NTEsMTAgKzE3NzYsMTEgQEAKICAgICB7CiAgICAgICBVU0J4X0hDKGhjbnVtKS0+SENDSEFSICY9IH5VU0JfT1RHX0hDQ0hBUl9DSEVOQTsKICAgICAgIFVTQnhfSEMoaGNudW0pLT5IQ0NIQVIgfD0gVVNCX09UR19IQ0NIQVJfQ0hFTkE7Ci0gICAgICBVU0J4X0hDKGhjbnVtKS0+SENDSEFSICY9IH5VU0JfT1RHX0hDQ0hBUl9FUERJUjsKICAgICAgIGRvCiAgICAgICB7Ci0gICAgICAgIGlmICgrK2NvdW50ID4gMTAwMFUpCisgICAgICAgIGNvdW50Kys7CisKKyAgICAgICAgaWYgKGNvdW50ID4gMTAwMFUpCiAgICAgICAgIHsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTgwMiwxNiArMTgyOCwyNCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX1N0b3BIb3N0KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgcmV0ID0gSEFMX09LOwogICB1aW50MzJfdCBVU0J4X0JBU0UgPSAodWludDMyX3QpVVNCeDsKLSAgdWludDMyX3QgY291bnQgPSAwVTsKKyAgX19JTyB1aW50MzJfdCBjb3VudCA9IDBVOwogICB1aW50MzJfdCB2YWx1ZTsKICAgdWludDMyX3QgaTsKIAogICAodm9pZClVU0JfRGlzYWJsZUdsb2JhbEludChVU0J4KTsKIAotICAvKiBGbHVzaCBGSUZPICovCi0gICh2b2lkKVVTQl9GbHVzaFR4RmlmbyhVU0J4LCAweDEwVSk7Ci0gICh2b2lkKVVTQl9GbHVzaFJ4RmlmbyhVU0J4KTsKKyAgLyogRmx1c2ggVVNCIEZJRk8gKi8KKyAgaWYgKFVTQl9GbHVzaFR4RmlmbyhVU0J4LCAweDEwVSkgIT0gSEFMX09LKSAvKiBhbGwgVHggRklGT3MgKi8KKyAgeworICAgIHJldCA9IEhBTF9FUlJPUjsKKyAgfQorCisgIGlmIChVU0JfRmx1c2hSeEZpZm8oVVNCeCkgIT0gSEFMX09LKQorICB7CisgICAgcmV0ID0gSEFMX0VSUk9SOworICB9CiAKICAgLyogRmx1c2ggb3V0IGFueSBsZWZ0b3ZlciBxdWV1ZWQgcmVxdWVzdHMuICovCiAgIGZvciAoaSA9IDBVOyBpIDw9IDE1VTsgaSsrKQpAQCAtMTgzNCw3ICsxODY4LDkgQEAKIAogICAgIGRvCiAgICAgewotICAgICAgaWYgKCsrY291bnQgPiAxMDAwVSkKKyAgICAgIGNvdW50Kys7CisKKyAgICAgIGlmIChjb3VudCA+IDEwMDBVKQogICAgICAgewogICAgICAgICBicmVhazsKICAgICAgIH0KQEAgLTE4NDIsMTAgKzE4NzgsMTIgQEAKICAgfQogCiAgIC8qIENsZWFyIGFueSBwZW5kaW5nIEhvc3QgaW50ZXJydXB0cyAqLwotICBVU0J4X0hPU1QtPkhBSU5UID0gMHhGRkZGRkZGRlU7Ci0gIFVTQngtPkdJTlRTVFMgPSAweEZGRkZGRkZGVTsKKyAgVVNCeF9IT1NULT5IQUlOVCA9IENMRUFSX0lOVEVSUlVQVF9NQVNLOworICBVU0J4LT5HSU5UU1RTID0gQ0xFQVJfSU5URVJSVVBUX01BU0s7CiAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgKHZvaWQpVVNCX0VuYWJsZUdsb2JhbEludChVU0J4KTsKKworICByZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTIwMDksNyArMjA0Nyw3IEBACiAgICAgICAgICAgICAxNSBtZWFucyBGbHVzaCBhbGwgVHggRklGT3MKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIFVTQl9GbHVzaFR4RmlmbyhVU0JfVHlwZURlZiAqVVNCeCwgdWludDMyX3QgbnVtKQorSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0ZsdXNoVHhGaWZvKFVTQl9UeXBlRGVmIGNvbnN0ICpVU0J4LCB1aW50MzJfdCBudW0pCiB7CiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKFVTQngpOwpAQCAtMjAyOCw3ICsyMDY2LDcgQEAKICAgKiBAcGFyYW0gIFVTQnggOiBTZWxlY3RlZCBkZXZpY2UKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIFVTQl9GbHVzaFJ4RmlmbyhVU0JfVHlwZURlZiAqVVNCeCkKK0hBTF9TdGF0dXNUeXBlRGVmIFVTQl9GbHVzaFJ4RmlmbyhVU0JfVHlwZURlZiBjb25zdCAqVVNCeCkKIHsKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoVVNCeCk7CkBAIC0yMDQxLDYgKzIwNzksNyBAQAogICByZXR1cm4gSEFMX09LOwogfQogCisKICNpZiBkZWZpbmVkIChIQUxfUENEX01PRFVMRV9FTkFCTEVEKQogLyoqCiAgICogQGJyaWVmICBBY3RpdmF0ZSBhbmQgY29uZmlndXJlIGFuIGVuZHBvaW50CkBAIC0yMTA0LDIyICsyMTQzLDM5IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAvKlNldCB0aGUgZW5kcG9pbnQgUmVjZWl2ZSBidWZmZXIgYWRkcmVzcyAqLworICAgICAgLyogU2V0IHRoZSBlbmRwb2ludCBSZWNlaXZlIGJ1ZmZlciBhZGRyZXNzICovCiAgICAgICBQQ0RfU0VUX0VQX1JYX0FERFJFU1MoVVNCeCwgZXAtPm51bSwgZXAtPnBtYWFkcmVzcyk7CiAKLSAgICAgIC8qU2V0IHRoZSBlbmRwb2ludCBSZWNlaXZlIGJ1ZmZlciBjb3VudGVyKi8KKyAgICAgIC8qIFNldCB0aGUgZW5kcG9pbnQgUmVjZWl2ZSBidWZmZXIgY291bnRlciAqLwogICAgICAgUENEX1NFVF9FUF9SWF9DTlQoVVNCeCwgZXAtPm51bSwgZXAtPm1heHBhY2tldCk7CiAgICAgICBQQ0RfQ0xFQVJfUlhfRFRPRyhVU0J4LCBlcC0+bnVtKTsKIAotICAgICAgLyogQ29uZmlndXJlIFZBTElEIHN0YXR1cyBmb3IgdGhlIEVuZHBvaW50Ki8KLSAgICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKFVTQngsIGVwLT5udW0sIFVTQl9FUF9SWF9WQUxJRCk7CisgICAgICBpZiAoZXAtPm51bSA9PSAwVSkKKyAgICAgIHsKKyAgICAgICAgLyogQ29uZmlndXJlIFZBTElEIHN0YXR1cyBmb3IgRVAwICovCisgICAgICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKFVTQngsIGVwLT5udW0sIFVTQl9FUF9SWF9WQUxJRCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIENvbmZpZ3VyZSBOQUsgc3RhdHVzIGZvciBPVVQgRW5kcG9pbnQgKi8KKyAgICAgICAgUENEX1NFVF9FUF9SWF9TVEFUVVMoVVNCeCwgZXAtPm51bSwgVVNCX0VQX1JYX05BSyk7CisgICAgICB9CiAgICAgfQogICB9Ci0gIC8qRG91YmxlIEJ1ZmZlciovCisjaWYgKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkKKyAgLyogRG91YmxlIEJ1ZmZlciAqLwogICBlbHNlCiAgIHsKLSAgICAvKiBTZXQgdGhlIGVuZHBvaW50IGFzIGRvdWJsZSBidWZmZXJlZCAqLwotICAgIFBDRF9TRVRfRVBfREJVRihVU0J4LCBlcC0+bnVtKTsKKyAgICBpZiAoZXAtPnR5cGUgPT0gRVBfVFlQRV9CVUxLKQorICAgIHsKKyAgICAgIC8qIFNldCBidWxrIGVuZHBvaW50IGFzIGRvdWJsZSBidWZmZXJlZCAqLworICAgICAgUENEX1NFVF9CVUxLX0VQX0RCVUYoVVNCeCwgZXAtPm51bSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBTZXQgdGhlIElTT0MgZW5kcG9pbnQgaW4gZG91YmxlIGJ1ZmZlciBtb2RlICovCisgICAgICBQQ0RfQ0xFQVJfRVBfS0lORChVU0J4LCBlcC0+bnVtKTsKKyAgICB9CiAKICAgICAvKiBTZXQgYnVmZmVyIGFkZHJlc3MgZm9yIGRvdWJsZSBidWZmZXJlZCBtb2RlICovCiAgICAgUENEX1NFVF9FUF9EQlVGX0FERFIoVVNCeCwgZXAtPm51bSwgZXAtPnBtYWFkZHIwLCBlcC0+cG1hYWRkcjEpOwpAQCAtMjE1Myw2ICsyMjA5LDcgQEAKICAgICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKFVTQngsIGVwLT5udW0sIFVTQl9FUF9SWF9ESVMpOwogICAgIH0KICAgfQorI2VuZGlmIC8qIChVU0VfVVNCX0RPVUJMRV9CVUZGRVIgPT0gMVUpICovCiAKICAgcmV0dXJuIHJldDsKIH0KQEAgLTIxNzEsMTggKzIyMjgsMjAgQEAKICAgICB7CiAgICAgICBQQ0RfQ0xFQVJfVFhfRFRPRyhVU0J4LCBlcC0+bnVtKTsKIAotICAgICAgLyogQ29uZmlndXJlIERJU0FCTEUgc3RhdHVzIGZvciB0aGUgRW5kcG9pbnQqLworICAgICAgLyogQ29uZmlndXJlIERJU0FCTEUgc3RhdHVzIGZvciB0aGUgRW5kcG9pbnQgKi8KICAgICAgIFBDRF9TRVRfRVBfVFhfU1RBVFVTKFVTQngsIGVwLT5udW0sIFVTQl9FUF9UWF9ESVMpOwogICAgIH0KKwogICAgIGVsc2UKICAgICB7CiAgICAgICBQQ0RfQ0xFQVJfUlhfRFRPRyhVU0J4LCBlcC0+bnVtKTsKIAotICAgICAgLyogQ29uZmlndXJlIERJU0FCTEUgc3RhdHVzIGZvciB0aGUgRW5kcG9pbnQqLworICAgICAgLyogQ29uZmlndXJlIERJU0FCTEUgc3RhdHVzIGZvciB0aGUgRW5kcG9pbnQgKi8KICAgICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKFVTQngsIGVwLT5udW0sIFVTQl9FUF9SWF9ESVMpOwogICAgIH0KICAgfQotICAvKkRvdWJsZSBCdWZmZXIqLworI2lmIChVU0VfVVNCX0RPVUJMRV9CVUZGRVIgPT0gMVUpCisgIC8qIERvdWJsZSBCdWZmZXIgKi8KICAgZWxzZQogICB7CiAgICAgaWYgKGVwLT5pc19pbiA9PSAwVSkKQEAgLTIyMDksNiArMjI2OCw3IEBACiAgICAgICBQQ0RfU0VUX0VQX1JYX1NUQVRVUyhVU0J4LCBlcC0+bnVtLCBVU0JfRVBfUlhfRElTKTsKICAgICB9CiAgIH0KKyNlbmRpZiAvKiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKSAqLwogCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0yMjIyLDggKzIyODIsMTAgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9FUFN0YXJ0WGZlcihVU0JfVHlwZURlZiAqVVNCeCwgVVNCX0VQVHlwZURlZiAqZXApCiB7CiAgIHVpbnQzMl90IGxlbjsKKyNpZiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKQogICB1aW50MTZfdCBwbWFidWZmZXI7CiAgIHVpbnQxNl90IHdFUFZhbDsKKyNlbmRpZiAvKiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKSAqLwogCiAgIC8qIElOIGVuZHBvaW50ICovCiAgIGlmIChlcC0+aXNfaW4gPT0gMVUpCkBAIC0yMjQ0LDYgKzIzMDYsNyBAQAogICAgICAgVVNCX1dyaXRlUE1BKFVTQngsIGVwLT54ZmVyX2J1ZmYsIGVwLT5wbWFhZHJlc3MsICh1aW50MTZfdClsZW4pOwogICAgICAgUENEX1NFVF9FUF9UWF9DTlQoVVNCeCwgZXAtPm51bSwgbGVuKTsKICAgICB9CisjaWYgKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkKICAgICBlbHNlCiAgICAgewogICAgICAgLyogZG91YmxlIGJ1ZmZlciBidWxrIG1hbmFnZW1lbnQgKi8KQEAgLTIyNTIsNyArMjMxNSw3IEBACiAgICAgICAgIGlmIChlcC0+eGZlcl9sZW5fZGIgPiBlcC0+bWF4cGFja2V0KQogICAgICAgICB7CiAgICAgICAgICAgLyogZW5hYmxlIGRvdWJsZSBidWZmZXIgKi8KLSAgICAgICAgICBQQ0RfU0VUX0VQX0RCVUYoVVNCeCwgZXAtPm51bSk7CisgICAgICAgICAgUENEX1NFVF9CVUxLX0VQX0RCVUYoVVNCeCwgZXAtPm51bSk7CiAKICAgICAgICAgICAvKiBlYWNoIFRpbWUgdG8gd3JpdGUgaW4gUE1BIHhmZXJfbGVuX2RiIHdpbGwgKi8KICAgICAgICAgICBlcC0+eGZlcl9sZW5fZGIgLT0gbGVuOwpAQCAtMjMxOCw4ICsyMzgxLDggQEAKICAgICAgICAgewogICAgICAgICAgIGxlbiA9IGVwLT54ZmVyX2xlbl9kYjsKIAotICAgICAgICAgIC8qIGRpc2FibGUgZG91YmxlIGJ1ZmZlciBtb2RlICovCi0gICAgICAgICAgUENEX0NMRUFSX0VQX0RCVUYoVVNCeCwgZXAtPm51bSk7CisgICAgICAgICAgLyogZGlzYWJsZSBkb3VibGUgYnVmZmVyIG1vZGUgZm9yIEJ1bGsgZW5kcG9pbnQgKi8KKyAgICAgICAgICBQQ0RfQ0xFQVJfQlVMS19FUF9EQlVGKFVTQngsIGVwLT5udW0pOwogCiAgICAgICAgICAgLyogU2V0IFR4IGNvdW50IHdpdGggbmJyZSBvZiBieXRlIHRvIGJlIHRyYW5zbWl0dGVkICovCiAgICAgICAgICAgUENEX1NFVF9FUF9UWF9DTlQoVVNCeCwgZXAtPm51bSwgbGVuKTsKQEAgLTIzMjgsMTQgKzIzOTEsOSBAQAogICAgICAgICAgIC8qIFdyaXRlIHRoZSB1c2VyIGJ1ZmZlciB0byBVU0IgUE1BICovCiAgICAgICAgICAgVVNCX1dyaXRlUE1BKFVTQngsIGVwLT54ZmVyX2J1ZmYsIHBtYWJ1ZmZlciwgKHVpbnQxNl90KWxlbik7CiAgICAgICAgIH0KLSAgICAgIH0vKiBlbmQgaWYgYnVsayBkb3VibGUgYnVmZmVyICovCi0KLSAgICAgIC8qIG1hbmFnZSBpc29jaHJvbm91cyBkb3VibGUgYnVmZmVyIElOIG1vZGUgKi8KLSAgICAgIGVsc2UKKyAgICAgIH0KKyAgICAgIGVsc2UgLyogbWFuYWdlIGlzb2Nocm9ub3VzIGRvdWJsZSBidWZmZXIgSU4gbW9kZSAqLwogICAgICAgewotICAgICAgICAvKiBlbmFibGUgZG91YmxlIGJ1ZmZlciAqLwotICAgICAgICBQQ0RfU0VUX0VQX0RCVUYoVVNCeCwgZXAtPm51bSk7Ci0KICAgICAgICAgLyogZWFjaCBUaW1lIHRvIHdyaXRlIGluIFBNQSB4ZmVyX2xlbl9kYiB3aWxsICovCiAgICAgICAgIGVwLT54ZmVyX2xlbl9kYiAtPSBsZW47CiAKQEAgLTIzNDgsMjcgKzI0MDYsNiBAQAogCiAgICAgICAgICAgLyogV3JpdGUgdGhlIHVzZXIgYnVmZmVyIHRvIFVTQiBQTUEgKi8KICAgICAgICAgICBVU0JfV3JpdGVQTUEoVVNCeCwgZXAtPnhmZXJfYnVmZiwgcG1hYnVmZmVyLCAodWludDE2X3QpbGVuKTsKLSAgICAgICAgICBlcC0+eGZlcl9idWZmICs9IGxlbjsKLQotICAgICAgICAgIGlmIChlcC0+eGZlcl9sZW5fZGIgPiBlcC0+bWF4cGFja2V0KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGVwLT54ZmVyX2xlbl9kYiAtPSBsZW47Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBsZW4gPSBlcC0+eGZlcl9sZW5fZGI7Ci0gICAgICAgICAgICBlcC0+eGZlcl9sZW5fZGIgPSAwVTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAobGVuID4gMFUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLyogU2V0IHRoZSBEb3VibGUgYnVmZmVyIGNvdW50ZXIgZm9yIHBtYWJ1ZmZlcjAgKi8KLSAgICAgICAgICAgIFBDRF9TRVRfRVBfREJVRjBfQ05UKFVTQngsIGVwLT5udW0sIGVwLT5pc19pbiwgbGVuKTsKLSAgICAgICAgICAgIHBtYWJ1ZmZlciA9IGVwLT5wbWFhZGRyMDsKLQotICAgICAgICAgICAgLyogV3JpdGUgdGhlIHVzZXIgYnVmZmVyIHRvIFVTQiBQTUEgKi8KLSAgICAgICAgICAgIFVTQl9Xcml0ZVBNQShVU0J4LCBlcC0+eGZlcl9idWZmLCBwbWFidWZmZXIsICh1aW50MTZfdClsZW4pOwotICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKQEAgLTIzNzgsMzAgKzI0MTUsMTAgQEAKIAogICAgICAgICAgIC8qIFdyaXRlIHRoZSB1c2VyIGJ1ZmZlciB0byBVU0IgUE1BICovCiAgICAgICAgICAgVVNCX1dyaXRlUE1BKFVTQngsIGVwLT54ZmVyX2J1ZmYsIHBtYWJ1ZmZlciwgKHVpbnQxNl90KWxlbik7Ci0gICAgICAgICAgZXAtPnhmZXJfYnVmZiArPSBsZW47Ci0KLSAgICAgICAgICBpZiAoZXAtPnhmZXJfbGVuX2RiID4gZXAtPm1heHBhY2tldCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlcC0+eGZlcl9sZW5fZGIgLT0gbGVuOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgbGVuID0gZXAtPnhmZXJfbGVuX2RiOwotICAgICAgICAgICAgZXAtPnhmZXJfbGVuX2RiID0gMFU7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKGxlbiA+IDBVKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFNldCB0aGUgRG91YmxlIGJ1ZmZlciBjb3VudGVyIGZvciBwbWFidWZmZXIxICovCi0gICAgICAgICAgICBQQ0RfU0VUX0VQX0RCVUYxX0NOVChVU0J4LCBlcC0+bnVtLCBlcC0+aXNfaW4sIGxlbik7Ci0gICAgICAgICAgICBwbWFidWZmZXIgPSBlcC0+cG1hYWRkcjE7Ci0KLSAgICAgICAgICAgIC8qIFdyaXRlIHRoZSB1c2VyIGJ1ZmZlciB0byBVU0IgUE1BICovCi0gICAgICAgICAgICBVU0JfV3JpdGVQTUEoVVNCeCwgZXAtPnhmZXJfYnVmZiwgcG1hYnVmZmVyLCAodWludDE2X3QpbGVuKTsKLSAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CisjZW5kaWYgLyogKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkgKi8KIAogICAgIFBDRF9TRVRfRVBfVFhfU1RBVFVTKFVTQngsIGVwLT5udW0sIFVTQl9FUF9UWF9WQUxJRCk7CiAgIH0KQEAgLTI0MjMsNiArMjQ0MCw3IEBACiAgICAgICAvKiBjb25maWd1cmUgYW5kIHZhbGlkYXRlIFJ4IGVuZHBvaW50ICovCiAgICAgICBQQ0RfU0VUX0VQX1JYX0NOVChVU0J4LCBlcC0+bnVtLCBsZW4pOwogICAgIH0KKyNpZiAoVVNFX1VTQl9ET1VCTEVfQlVGRkVSID09IDFVKQogICAgIGVsc2UKICAgICB7CiAgICAgICAvKiBGaXJzdCBUcmFuc2ZlciBDb21pbmcgRnJvbSBIQUxfUENEX0VQX1JlY2VpdmUgJiBGcm9tIElTUiAqLwpAQCAtMjQ0MSw3ICsyNDU5LDcgQEAKICAgICAgICAgICBpZiAoKCgod0VQVmFsICYgVVNCX0VQX0RUT0dfUlgpICE9IDBVKSAmJiAoKHdFUFZhbCAmIFVTQl9FUF9EVE9HX1RYKSAhPSAwVSkpIHx8CiAgICAgICAgICAgICAgICgoKHdFUFZhbCAmIFVTQl9FUF9EVE9HX1JYKSA9PSAwVSkgJiYgKCh3RVBWYWwgJiBVU0JfRVBfRFRPR19UWCkgPT0gMFUpKSkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBQQ0RfRnJlZVVzZXJCdWZmZXIoVVNCeCwgZXAtPm51bSwgMFUpOworICAgICAgICAgICAgUENEX0ZSRUVfVVNFUl9CVUZGRVIoVVNCeCwgZXAtPm51bSwgMFUpOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpAQCAtMjQ2Niw2ICsyNDg0LDcgQEAKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICB9CisjZW5kaWYgLyogKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkgKi8KIAogICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKFVTQngsIGVwLT5udW0sIFVTQl9FUF9SWF9WQUxJRCk7CiAgIH0KQEAgLTI2NDgsOSArMjY2Nyw5IEBACiAvKioKICAgKiBAYnJpZWYgIFVTQl9SZWFkSW50ZXJydXB0cyByZXR1cm4gdGhlIGdsb2JhbCBVU0IgaW50ZXJydXB0IHN0YXR1cwogICAqIEBwYXJhbSAgVVNCeCBTZWxlY3RlZCBkZXZpY2UKLSAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKiBAcmV0dmFsIFVTQiBHbG9iYWwgSW50ZXJydXB0IHN0YXR1cwogICAqLwotdWludDMyX3QgIFVTQl9SZWFkSW50ZXJydXB0cyhVU0JfVHlwZURlZiAqVVNCeCkKK3VpbnQzMl90IFVTQl9SZWFkSW50ZXJydXB0cyhVU0JfVHlwZURlZiBjb25zdCAqVVNCeCkKIHsKICAgdWludDMyX3QgdG1wcmVnOwogCkBAIC0yNzk1LDI5ICsyODE0LDMwIEBACiAgICogQHBhcmFtICAgd05CeXRlcyBuby4gb2YgYnl0ZXMgdG8gYmUgY29waWVkLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotdm9pZCBVU0JfV3JpdGVQTUEoVVNCX1R5cGVEZWYgKlVTQngsIHVpbnQ4X3QgKnBiVXNyQnVmLCB1aW50MTZfdCB3UE1BQnVmQWRkciwgdWludDE2X3Qgd05CeXRlcykKK3ZvaWQgVVNCX1dyaXRlUE1BKFVTQl9UeXBlRGVmIGNvbnN0ICpVU0J4LCB1aW50OF90ICpwYlVzckJ1ZiwgdWludDE2X3Qgd1BNQUJ1ZkFkZHIsIHVpbnQxNl90IHdOQnl0ZXMpCiB7CiAgIHVpbnQzMl90IG4gPSAoKHVpbnQzMl90KXdOQnl0ZXMgKyAxVSkgPj4gMTsKICAgdWludDMyX3QgQmFzZUFkZHIgPSAodWludDMyX3QpVVNCeDsKLSAgdWludDMyX3QgaSwgdGVtcDEsIHRlbXAyOworICB1aW50MzJfdCBjb3VudDsKKyAgdWludDE2X3QgV3JWYWw7CiAgIF9fSU8gdWludDE2X3QgKnBkd1ZhbDsKICAgdWludDhfdCAqcEJ1ZiA9IHBiVXNyQnVmOwogCiAgIHBkd1ZhbCA9IChfX0lPIHVpbnQxNl90ICopKEJhc2VBZGRyICsgMHg0MDBVICsgKCh1aW50MzJfdCl3UE1BQnVmQWRkciAqIFBNQV9BQ0NFU1MpKTsKIAotICBmb3IgKGkgPSBuOyBpICE9IDBVOyBpLS0pCisgIGZvciAoY291bnQgPSBuOyBjb3VudCAhPSAwVTsgY291bnQtLSkKICAgewotICAgIHRlbXAxID0gKnBCdWY7Ci0gICAgcEJ1ZisrOwotICAgIHRlbXAyID0gdGVtcDEgfCAoKHVpbnQxNl90KSgodWludDE2X3QpICpwQnVmIDw8IDgpKTsKLSAgICAqcGR3VmFsID0gKHVpbnQxNl90KXRlbXAyOworICAgIFdyVmFsID0gcEJ1ZlswXTsKKyAgICBXclZhbCB8PSAodWludDE2X3QpcEJ1ZlsxXSA8PCA4OworICAgICpwZHdWYWwgPSAoV3JWYWwgJiAweEZGRkZVKTsKICAgICBwZHdWYWwrKzsKIAogI2lmIFBNQV9BQ0NFU1MgPiAxVQogICAgIHBkd1ZhbCsrOwotI2VuZGlmCisjZW5kaWYgLyogUE1BX0FDQ0VTUyAqLwogCiAgICAgcEJ1ZisrOworICAgIHBCdWYrKzsKICAgfQogfQogCkBAIC0yODI5LDM4ICsyODQ5LDM5IEBACiAgICogQHBhcmFtICAgd05CeXRlcyBuby4gb2YgYnl0ZXMgdG8gYmUgY29waWVkLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotdm9pZCBVU0JfUmVhZFBNQShVU0JfVHlwZURlZiAqVVNCeCwgdWludDhfdCAqcGJVc3JCdWYsIHVpbnQxNl90IHdQTUFCdWZBZGRyLCB1aW50MTZfdCB3TkJ5dGVzKQordm9pZCBVU0JfUmVhZFBNQShVU0JfVHlwZURlZiBjb25zdCAqVVNCeCwgdWludDhfdCAqcGJVc3JCdWYsIHVpbnQxNl90IHdQTUFCdWZBZGRyLCB1aW50MTZfdCB3TkJ5dGVzKQogewogICB1aW50MzJfdCBuID0gKHVpbnQzMl90KXdOQnl0ZXMgPj4gMTsKICAgdWludDMyX3QgQmFzZUFkZHIgPSAodWludDMyX3QpVVNCeDsKLSAgdWludDMyX3QgaSwgdGVtcDsKKyAgdWludDMyX3QgY291bnQ7CisgIHVpbnQzMl90IFJkVmFsOwogICBfX0lPIHVpbnQxNl90ICpwZHdWYWw7CiAgIHVpbnQ4X3QgKnBCdWYgPSBwYlVzckJ1ZjsKIAogICBwZHdWYWwgPSAoX19JTyB1aW50MTZfdCAqKShCYXNlQWRkciArIDB4NDAwVSArICgodWludDMyX3Qpd1BNQUJ1ZkFkZHIgKiBQTUFfQUNDRVNTKSk7CiAKLSAgZm9yIChpID0gbjsgaSAhPSAwVTsgaS0tKQorICBmb3IgKGNvdW50ID0gbjsgY291bnQgIT0gMFU7IGNvdW50LS0pCiAgIHsKLSAgICB0ZW1wID0gKihfX0lPIHVpbnQxNl90ICopcGR3VmFsOworICAgIFJkVmFsID0gKihfX0lPIHVpbnQxNl90ICopcGR3VmFsOwogICAgIHBkd1ZhbCsrOwotICAgICpwQnVmID0gKHVpbnQ4X3QpKCh0ZW1wID4+IDApICYgMHhGRlUpOworICAgICpwQnVmID0gKHVpbnQ4X3QpKChSZFZhbCA+PiAwKSAmIDB4RkZVKTsKICAgICBwQnVmKys7Ci0gICAgKnBCdWYgPSAodWludDhfdCkoKHRlbXAgPj4gOCkgJiAweEZGVSk7CisgICAgKnBCdWYgPSAodWludDhfdCkoKFJkVmFsID4+IDgpICYgMHhGRlUpOwogICAgIHBCdWYrKzsKIAogI2lmIFBNQV9BQ0NFU1MgPiAxVQogICAgIHBkd1ZhbCsrOwotI2VuZGlmCisjZW5kaWYgLyogUE1BX0FDQ0VTUyAqLwogICB9CiAKICAgaWYgKCh3TkJ5dGVzICUgMlUpICE9IDBVKQogICB7Ci0gICAgdGVtcCA9ICpwZHdWYWw7Ci0gICAgKnBCdWYgPSAodWludDhfdCkoKHRlbXAgPj4gMCkgJiAweEZGVSk7CisgICAgUmRWYWwgPSAqcGR3VmFsOworICAgICpwQnVmID0gKHVpbnQ4X3QpKChSZFZhbCA+PiAwKSAmIDB4RkZVKTsKICAgfQogfQotI2VuZGlmIC8qIGRlZmluZWQgKFVTQikgKi8KIAorI2VuZGlmIC8qIGRlZmluZWQgKFVTQikgKi8KIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9faHRtcmVzYy9mYXZpY29uLnBuZyBiL19odG1yZXNjL2Zhdmljb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NzEzZWUKLS0tIC9kZXYvbnVsbAorKysgYi9faHRtcmVzYy9mYXZpY29uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9faHRtcmVzYy9taW5pLXN0LmNzcyBiL19odG1yZXNjL21pbmktc3RfMjAyMC5jc3MKc2ltaWxhcml0eSBpbmRleCA3NyUKcmVuYW1lIGZyb20gX2h0bXJlc2MvbWluaS1zdC5jc3MKcmVuYW1lIHRvIF9odG1yZXNjL21pbmktc3RfMjAyMC5jc3MKaW5kZXggNzFmYmMxNC4uM2Q5ZTgxYSAxMDA2NDQKLS0tIGEvX2h0bXJlc2MvbWluaS1zdC5jc3MKKysrIGIvX2h0bXJlc2MvbWluaS1zdF8yMDIwLmNzcwpAQCAtMSwzOSArMSwzOSBAQAogQGNoYXJzZXQgIlVURi04IjsKIC8qCi0gIEZsYXZvciBuYW1lOiBEZWZhdWx0IChtaW5pLWRlZmF1bHQpCi0gIEF1dGhvcjogQW5nZWxvcyBDaGFsYXJpcyAoY2hhbGFyYW5nZWxvQGdtYWlsLmNvbSkKLSAgTWFpbnRhaW5lcnM6IEFuZ2Vsb3MgQ2hhbGFyaXMKLSAgbWluaS5jc3MgdmVyc2lvbjogdjMuMC4wLWFscGhhLjMKKyAgRmxhdm9yIG5hbWU6IEN1c3RvbSAobWluaS1jdXN0b20pCisgIEdlbmVyYXRlZCBvbmxpbmUgLSBodHRwczovL21pbmljc3Mub3JnL2ZsYXZvcnMKKyAgbWluaS5jc3MgdmVyc2lvbjogdjMuMC4xCiAqLwogLyoKICAgQnJvd3NlcnMgcmVzZXRzIGFuZCBiYXNlIHR5cG9ncmFwaHkuCiAqLwogLyogQ29yZSBtb2R1bGUgQ1NTIHZhcmlhYmxlIGRlZmluaXRpb25zICovCiA6cm9vdCB7Ci0gIC0tZm9yZS1jb2xvcjogIzExMTsKLSAgLS1zZWNvbmRhcnktZm9yZS1jb2xvcjogIzQ0NDsKLSAgLS1iYWNrLWNvbG9yOiAjZjhmOGY4OwotICAtLXNlY29uZGFyeS1iYWNrLWNvbG9yOiAjZjBmMGYwOwotICAtLWJsb2NrcXVvdGUtY29sb3I6ICNmNTdjMDA7Ci0gIC0tcHJlLWNvbG9yOiAjMTU2NWMwOwotICAtLWJvcmRlci1jb2xvcjogI2FhYTsKLSAgLS1zZWNvbmRhcnktYm9yZGVyLWNvbG9yOiAjZGRkOwotICAtLWhlYWRpbmctcmF0aW86IDEuMTk7CisgIC0tZm9yZS1jb2xvcjogIzAzMjM0YjsKKyAgLS1zZWNvbmRhcnktZm9yZS1jb2xvcjogIzAzMjM0YjsKKyAgLS1iYWNrLWNvbG9yOiAjZmZmZmZmOworICAtLXNlY29uZGFyeS1iYWNrLWNvbG9yOiAjZmZmZmZmOworICAtLWJsb2NrcXVvdGUtY29sb3I6ICNlNjAwN2U7CisgIC0tcHJlLWNvbG9yOiAjZTYwMDdlOworICAtLWJvcmRlci1jb2xvcjogIzNjYjRlNjsKKyAgLS1zZWNvbmRhcnktYm9yZGVyLWNvbG9yOiAjM2NiNGU2OworICAtLWhlYWRpbmctcmF0aW86IDEuMjsKICAgLS11bml2ZXJzYWwtbWFyZ2luOiAwLjVyZW07Ci0gIC0tdW5pdmVyc2FsLXBhZGRpbmc6IDAuMTI1cmVtOwotICAtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzOiAwLjEyNXJlbTsKLSAgLS1hLWxpbmstY29sb3I6ICMwMjc3YmQ7Ci0gIC0tYS12aXNpdGVkLWNvbG9yOiAjMDE1NzliOyB9CisgIC0tdW5pdmVyc2FsLXBhZGRpbmc6IDAuMjVyZW07CisgIC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXM6IDAuMDc1cmVtOworICAtLWJhY2tncm91bmQtbWFyZ2luOiAxLjUlOworICAtLWEtbGluay1jb2xvcjogIzNjYjRlNjsKKyAgLS1hLXZpc2l0ZWQtY29sb3I6ICM4YzAwNzg7IH0KIAogaHRtbCB7Ci0gIGZvbnQtc2l6ZTogMTRweDsgfQorICBmb250LXNpemU6IDEzLjVweDsgfQogCiBhLCBiLCBkZWwsIGVtLCBpLCBpbnMsIHEsIHNwYW4sIHN0cm9uZywgdSB7CiAgIGZvbnQtc2l6ZTogMWVtOyB9CiAKIGh0bWwsICogewotICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBSb2JvdG8sIFVidW50dSwgIkhlbHZldGljYSBOZXVlIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOwotICBsaW5lLWhlaWdodDogMS40OworICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBIZWx2ZXRpY2EsIGFyaWFsLCBzYW5zLXNlcmlmOworICBsaW5lLWhlaWdodDogMS4yNTsKICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB9CiAKICogewpAQCAtNDIsNyArNDIsMTAgQEAKIGJvZHkgewogICBtYXJnaW46IDA7CiAgIGNvbG9yOiB2YXIoLS1mb3JlLWNvbG9yKTsKLSAgYmFja2dyb3VuZDogdmFyKC0tYmFjay1jb2xvcik7IH0KKyAgQGJhY2tncm91bmQ6IHZhcigtLWJhY2stY29sb3IpOworICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrLWNvbG9yKSBsaW5lYXItZ3JhZGllbnQoI2ZmZDIwMCwgI2ZmZDIwMCkgcmVwZWF0LXkgbGVmdCB0b3A7CisgIGJhY2tncm91bmQtc2l6ZTogdmFyKC0tYmFja2dyb3VuZC1tYXJnaW4pOworICB9CiAKIGRldGFpbHMgewogICBkaXNwbGF5OiBibG9jazsgfQpAQCAtNjIsOSArNjUsOSBAQAogICBoZWlnaHQ6IGF1dG87IH0KIAogaDEsIGgyLCBoMywgaDQsIGg1LCBoNiB7Ci0gIGxpbmUtaGVpZ2h0OiAxLjI7CisgIGxpbmUtaGVpZ2h0OiAxLjI1OwogICBtYXJnaW46IGNhbGMoMS41ICogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOwotICBmb250LXdlaWdodDogNTAwOyB9CisgIGZvbnQtd2VpZ2h0OiA0MDA7IH0KICAgaDEgc21hbGwsIGgyIHNtYWxsLCBoMyBzbWFsbCwgaDQgc21hbGwsIGg1IHNtYWxsLCBoNiBzbWFsbCB7CiAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS1mb3JlLWNvbG9yKTsKICAgICBkaXNwbGF5OiBibG9jazsKQEAgLTc0LDIxICs3NywxNSBAQAogICBmb250LXNpemU6IGNhbGMoMXJlbSAqIHZhcigtLWhlYWRpbmctcmF0aW8pICogdmFyKC0taGVhZGluZy1yYXRpbykgKiB2YXIoLS1oZWFkaW5nLXJhdGlvKSk7IH0KIAogaDIgewotICBmb250LXNpemU6IGNhbGMoMXJlbSAqIHZhcigtLWhlYWRpbmctcmF0aW8pICogdmFyKC0taGVhZGluZy1yYXRpbyk7ICk7Ci0gIGJhY2tncm91bmQ6IHZhcigtLW1hcmstYmFjay1jb2xvcik7Ci0gIGZvbnQtd2VpZ2h0OiA2MDA7Ci0gIHBhZGRpbmc6IDAuMWVtIDAuNWVtIDAuMmVtIDAuNWVtOwotICBjb2xvcjogdmFyKC0tbWFyay1mb3JlLWNvbG9yKTsgfQotCisgIGZvbnQtc2l6ZTogY2FsYygxcmVtICogdmFyKC0taGVhZGluZy1yYXRpbykgKiB2YXIoLS1oZWFkaW5nLXJhdGlvKSApOworICBib3JkZXItc3R5bGU6IG5vbmUgbm9uZSBzb2xpZCBub25lIDsgCisgIGJvcmRlci13aWR0aDogdGhpbjsKKyAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ib3JkZXItY29sb3IpOyB9CiBoMyB7Ci0gIGZvbnQtc2l6ZTogY2FsYygxcmVtICogdmFyKC0taGVhZGluZy1yYXRpbykpOwotICBwYWRkaW5nLWxlZnQ6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsgCi0gIC8qIGJhY2tncm91bmQ6IHZhcigtLWJvcmRlci1jb2xvcik7ICovCi0gICAgfQorICBmb250LXNpemU6IGNhbGMoMXJlbSAqIHZhcigtLWhlYWRpbmctcmF0aW8pICk7IH0KIAogaDQgewotICBmb250LXNpemU6IDFyZW07KTsKLSAgcGFkZGluZy1sZWZ0OiBjYWxjKDQgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7ICB9CisgIGZvbnQtc2l6ZTogY2FsYygxcmVtICogdmFyKC0taGVhZGluZy1yYXRpbykpOyB9CiAKIGg1IHsKICAgZm9udC1zaXplOiAxcmVtOyB9CkBAIC0xMDEsNyArOTgsNyBAQAogCiBvbCwgdWwgewogICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOwotICBwYWRkaW5nLWxlZnQ6IGNhbGMoNiAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsgfQorICBwYWRkaW5nLWxlZnQ6IGNhbGMoMyAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsgfQogCiBiLCBzdHJvbmcgewogICBmb250LXdlaWdodDogNzAwOyB9CkBAIC0xMTEsNyArMTA4LDcgQEAKICAgYm9yZGVyOiAwOwogICBsaW5lLWhlaWdodDogMS4yNWVtOwogICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOwotICBoZWlnaHQ6IDAuMDYyNXJlbTsKKyAgaGVpZ2h0OiAwLjA3MTQyODU3MTRyZW07CiAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQsIHZhcigtLWJvcmRlci1jb2xvcikgMjAlLCB2YXIoLS1ib3JkZXItY29sb3IpIDgwJSwgdHJhbnNwYXJlbnQpOyB9CiAKIGJsb2NrcXVvdGUgewpAQCAtMTIxLDE2ICsxMTgsMTYgQEAKICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS1mb3JlLWNvbG9yKTsKICAgbWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsKICAgcGFkZGluZzogY2FsYygzICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsKLSAgYm9yZGVyOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7Ci0gIGJvcmRlci1sZWZ0OiAwLjM3NXJlbSBzb2xpZCB2YXIoLS1ibG9ja3F1b3RlLWNvbG9yKTsKKyAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CisgIGJvcmRlci1sZWZ0OiAwLjNyZW0gc29saWQgdmFyKC0tYmxvY2txdW90ZS1jb2xvcik7CiAgIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSAwOyB9CiAgIGJsb2NrcXVvdGU6YmVmb3JlIHsKICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgdG9wOiBjYWxjKDByZW0gLSB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOwogICAgIGxlZnQ6IDA7CiAgICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Ci0gICAgZm9udC1zaXplOiAzcmVtOwotICAgIGZvbnQtd2VpZ2h0OiA3MDA7CisgICAgZm9udC1zaXplOiAycmVtOworICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICAgY29udGVudDogIlwyMDFjIjsKICAgICBjb2xvcjogdmFyKC0tYmxvY2txdW90ZS1jb2xvcik7IH0KICAgYmxvY2txdW90ZVtjaXRlXTphZnRlciB7CkBAIC0xNjAsOCArMTU3LDggQEAKICAgYmFja2dyb3VuZDogdmFyKC0tc2Vjb25kYXJ5LWJhY2stY29sb3IpOwogICBwYWRkaW5nOiBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7CiAgIG1hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7Ci0gIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLXNlY29uZGFyeS1ib3JkZXItY29sb3IpOwotICBib3JkZXItbGVmdDogMC4yNXJlbSBzb2xpZCB2YXIoLS1wcmUtY29sb3IpOworICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKKyAgYm9yZGVyLWxlZnQ6IDAuMjg1NzE0Mjg1N3JlbSBzb2xpZCB2YXIoLS1wcmUtY29sb3IpOwogICBib3JkZXItcmFkaXVzOiAwIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgMDsgfQogCiBzdXAsIHN1YiwgY29kZSwga2JkIHsKQEAgLTIwNCw3ICsyMDEsOCBAQAogICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICBkaXNwbGF5OiBmbGV4OwogICBmbGV4OiAwIDEgYXV0bzsKLSAgZmxleC1mbG93OiByb3cgd3JhcDsgfQorICBmbGV4LWZsb3c6IHJvdyB3cmFwOworICBtYXJnaW46IDAgMCAwIHZhcigtLWJhY2tncm91bmQtbWFyZ2luKTsgfQogCiAuY29sLXNtLAogW2NsYXNzXj0nY29sLXNtLSddLApAQCAtNTY1LDkgKzU2Myw5IEBACiAgICAgb3JkZXI6IDk5OTsgfSB9CiAvKiBDYXJkIGNvbXBvbmVudCBDU1MgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8KIDpyb290IHsKLSAgLS1jYXJkLWJhY2stY29sb3I6ICNmOGY4Zjg7Ci0gIC0tY2FyZC1mb3JlLWNvbG9yOiAjMTExOwotICAtLWNhcmQtYm9yZGVyLWNvbG9yOiAjZGRkOyB9CisgIC0tY2FyZC1iYWNrLWNvbG9yOiAjM2NiNGU2OworICAtLWNhcmQtZm9yZS1jb2xvcjogIzAzMjM0YjsKKyAgLS1jYXJkLWJvcmRlci1jb2xvcjogIzAzMjM0YjsgfQogCiAuY2FyZCB7CiAgIGRpc3BsYXk6IGZsZXg7CkBAIC01NzgsNyArNTc2LDcgQEAKICAgd2lkdGg6IDEwMCU7CiAgIGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmFjay1jb2xvcik7CiAgIGNvbG9yOiB2YXIoLS1jYXJkLWZvcmUtY29sb3IpOwotICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1jYXJkLWJvcmRlci1jb2xvcik7CisgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWNhcmQtYm9yZGVyLWNvbG9yKTsKICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpOwogICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOwogICBvdmVyZmxvdzogaGlkZGVuOyB9CkBAIC01OTIsNyArNTkwLDcgQEAKICAgICBtYXJnaW46IDA7CiAgICAgYm9yZGVyOiAwOwogICAgIGJvcmRlci1yYWRpdXM6IDA7Ci0gICAgYm9yZGVyLWJvdHRvbTogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWNhcmQtYm9yZGVyLWNvbG9yKTsKKyAgICBib3JkZXItYm90dG9tOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tY2FyZC1ib3JkZXItY29sb3IpOwogICAgIHBhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsKICAgICB3aWR0aDogMTAwJTsgfQogICAgIC5jYXJkID4gLnNlY3Rpb25lLm1lZGlhIHsKQEAgLTYxNywxNyArNjE1LDE4IEBACiAgIHdpZHRoOiBhdXRvOyB9CiAKIC5jYXJkLndhcm5pbmcgewotLyogIC0tY2FyZC1iYWNrLWNvbG9yOiAjZmZjYTI4OyAqLwogICAtLWNhcmQtYmFjay1jb2xvcjogI2U1YjhiNzsKLSAgLS1jYXJkLWJvcmRlci1jb2xvcjogI2U4YjgyNTsgfQorICAtLWNhcmQtZm9yZS1jb2xvcjogIzNiMjM0YjsKKyAgLS1jYXJkLWJvcmRlci1jb2xvcjogIzhjMDA3ODsgfQogCiAuY2FyZC5lcnJvciB7Ci0gIC0tY2FyZC1iYWNrLWNvbG9yOiAjYjcxYzFjOwotICAtLWNhcmQtZm9yZS1jb2xvcjogI2Y4ZjhmODsKLSAgLS1jYXJkLWJvcmRlci1jb2xvcjogI2E3MWExYTsgfQorICAtLWNhcmQtYmFjay1jb2xvcjogIzQ2NDY1MDsKKyAgLS1jYXJkLWZvcmUtY29sb3I6ICNmZmZmZmY7CisgIC0tY2FyZC1ib3JkZXItY29sb3I6ICM4YzAwNzg7IH0KIAogLmNhcmQgPiAuc2VjdGlvbmUuZGFyayB7Ci0gIC0tY2FyZC1iYWNrLWNvbG9yOiAjZTBlMGUwOyB9CisgIC0tY2FyZC1iYWNrLWNvbG9yOiAjM2IyMzRiOworICAtLWNhcmQtZm9yZS1jb2xvcjogI2ZmZmZmZjsgfQogCiAuY2FyZCA+IC5zZWN0aW9uZS5kb3VibGUtcGFkZGVkIHsKICAgcGFkZGluZzogY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOyB9CkBAIC02MzcsMTIgKzYzNiwxMiBAQAogKi8KIC8qIElucHV0X2NvbnRyb2wgbW9kdWxlIENTUyB2YXJpYWJsZSBkZWZpbml0aW9ucyAqLwogOnJvb3QgewotICAtLWZvcm0tYmFjay1jb2xvcjogI2YwZjBmMDsKLSAgLS1mb3JtLWZvcmUtY29sb3I6ICMxMTE7Ci0gIC0tZm9ybS1ib3JkZXItY29sb3I6ICNkZGQ7Ci0gIC0taW5wdXQtYmFjay1jb2xvcjogI2Y4ZjhmODsKLSAgLS1pbnB1dC1mb3JlLWNvbG9yOiAjMTExOwotICAtLWlucHV0LWJvcmRlci1jb2xvcjogI2RkZDsKKyAgLS1mb3JtLWJhY2stY29sb3I6ICNmZmU5N2Y7CisgIC0tZm9ybS1mb3JlLWNvbG9yOiAjMDMyMzRiOworICAtLWZvcm0tYm9yZGVyLWNvbG9yOiAjM2NiNGU2OworICAtLWlucHV0LWJhY2stY29sb3I6ICNmZmZmZmY7CisgIC0taW5wdXQtZm9yZS1jb2xvcjogIzAzMjM0YjsKKyAgLS1pbnB1dC1ib3JkZXItY29sb3I6ICMzY2I0ZTY7CiAgIC0taW5wdXQtZm9jdXMtY29sb3I6ICMwMjg4ZDE7CiAgIC0taW5wdXQtaW52YWxpZC1jb2xvcjogI2QzMmYyZjsKICAgLS1idXR0b24tYmFjay1jb2xvcjogI2UyZTJlMjsKQEAgLTY1NSwxMyArNjU0LDEzIEBACiBmb3JtIHsKICAgYmFja2dyb3VuZDogdmFyKC0tZm9ybS1iYWNrLWNvbG9yKTsKICAgY29sb3I6IHZhcigtLWZvcm0tZm9yZS1jb2xvcik7Ci0gIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWZvcm0tYm9yZGVyLWNvbG9yKTsKKyAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tZm9ybS1ib3JkZXItY29sb3IpOwogICBib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7CiAgIG1hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7CiAgIHBhZGRpbmc6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSkgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOyB9CiAKIGZpZWxkc2V0IHsKLSAgYm9yZGVyOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tZm9ybS1ib3JkZXItY29sb3IpOworICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1mb3JtLWJvcmRlci1jb2xvcik7CiAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKICAgbWFyZ2luOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pIC8gNCk7CiAgIHBhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsgfQpAQCAtNjcxLDcgKzY3MCw3IEBACiAgIGRpc3BsYXk6IHRhYmxlOwogICBtYXgtd2lkdGg6IDEwMCU7CiAgIHdoaXRlLXNwYWNlOiBub3JtYWw7Ci0gIGZvbnQtd2VpZ2h0OiA3MDA7CisgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgIHBhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7IH0KIAogbGFiZWwgewpAQCAtNzE2LDcgKzcxNSw3IEBACiAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgIGJhY2tncm91bmQ6IHZhcigtLWlucHV0LWJhY2stY29sb3IpOwogICBjb2xvcjogdmFyKC0taW5wdXQtZm9yZS1jb2xvcik7Ci0gIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWlucHV0LWJvcmRlci1jb2xvcik7CisgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWlucHV0LWJvcmRlci1jb2xvcik7CiAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKICAgbWFyZ2luOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pIC8gMik7CiAgIHBhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7IH0KQEAgLTc2Myw4ICs3NjIsOCBAQAogICBbdHlwZT0icmFkaW8iXTpjaGVja2VkOmJlZm9yZSB7CiAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICBjb250ZW50OiAnJzsKLSAgICB0b3A6IGNhbGMoMC4wNjI1cmVtICsgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7Ci0gICAgbGVmdDogY2FsYygwLjA2MjVyZW0gKyB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKTsKKyAgICB0b3A6IGNhbGMoMC4wNzE0Mjg1NzE0cmVtICsgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7CisgICAgbGVmdDogY2FsYygwLjA3MTQyODU3MTRyZW0gKyB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKTsKICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dC1mb3JlLWNvbG9yKTsKICAgICB3aWR0aDogMC41cmVtOwogICAgIGhlaWdodDogMC41cmVtOyB9CkBAIC03OTMsNyArNzkyLDcgQEAKICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICBiYWNrZ3JvdW5kOiB2YXIoLS1idXR0b24tYmFjay1jb2xvcik7CiAgIGNvbG9yOiB2YXIoLS1idXR0b24tZm9yZS1jb2xvcik7Ci0gIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWJ1dHRvbi1ib3JkZXItY29sb3IpOworICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1idXR0b24tYm9yZGVyLWNvbG9yKTsKICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpOwogICBwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOwogICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOwpAQCAtODE0LDcgKzgxMyw3IEBACiAKIC5idXR0b24tZ3JvdXAgewogICBkaXNwbGF5OiBmbGV4OwotICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1idXR0b24tZ3JvdXAtYm9yZGVyLWNvbG9yKTsKKyAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tYnV0dG9uLWdyb3VwLWJvcmRlci1jb2xvcik7CiAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKICAgbWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsgfQogICAuYnV0dG9uLWdyb3VwID4gYnV0dG9uLCAuYnV0dG9uLWdyb3VwIFt0eXBlPSJidXR0b24iXSwgLmJ1dHRvbi1ncm91cCA+IFt0eXBlPSJzdWJtaXQiXSwgLmJ1dHRvbi1ncm91cCA+IFt0eXBlPSJyZXNldCJdLCAuYnV0dG9uLWdyb3VwID4gLmJ1dHRvbiwgLmJ1dHRvbi1ncm91cCA+IFtyb2xlPSJidXR0b24iXSB7CkBAIC04MjYsMTMgKzgyNSwxMyBAQAogICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgYm94LXNoYWRvdzogbm9uZTsgfQogICAuYnV0dG9uLWdyb3VwID4gOm5vdCg6Zmlyc3QtY2hpbGQpIHsKLSAgICBib3JkZXItbGVmdDogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWJ1dHRvbi1ncm91cC1ib3JkZXItY29sb3IpOyB9CisgICAgYm9yZGVyLWxlZnQ6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1idXR0b24tZ3JvdXAtYm9yZGVyLWNvbG9yKTsgfQogICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0OTlweCkgewogICAgIC5idXR0b24tZ3JvdXAgewogICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfQogICAgICAgLmJ1dHRvbi1ncm91cCA+IDpub3QoOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgIGJvcmRlcjogMDsKLSAgICAgICAgYm9yZGVyLXRvcDogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWJ1dHRvbi1ncm91cC1ib3JkZXItY29sb3IpOyB9IH0KKyAgICAgICAgYm9yZGVyLXRvcDogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWJ1dHRvbi1ncm91cC1ib3JkZXItY29sb3IpOyB9IH0KIAogLyoKICAgQ3VzdG9tIGVsZW1lbnRzIGZvciBmb3JtcyBhbmQgaW5wdXQgZWxlbWVudHMuCkBAIC04NzQsMjkgKzg3MywyOSBAQAogKi8KIC8qIE5hdmlnYXRpb24gbW9kdWxlIENTUyB2YXJpYWJsZSBkZWZpbml0aW9ucyAqLwogOnJvb3QgewotICAtLWhlYWRlci1iYWNrLWNvbG9yOiAjZjhmOGY4OwotICAtLWhlYWRlci1ob3Zlci1iYWNrLWNvbG9yOiAjZjBmMGYwOwotICAtLWhlYWRlci1mb3JlLWNvbG9yOiAjNDQ0OwotICAtLWhlYWRlci1ib3JkZXItY29sb3I6ICNkZGQ7Ci0gIC0tbmF2LWJhY2stY29sb3I6ICNmOGY4Zjg7Ci0gIC0tbmF2LWhvdmVyLWJhY2stY29sb3I6ICNmMGYwZjA7Ci0gIC0tbmF2LWZvcmUtY29sb3I6ICM0NDQ7Ci0gIC0tbmF2LWJvcmRlci1jb2xvcjogI2RkZDsKLSAgLS1uYXYtbGluay1jb2xvcjogIzAyNzdiZDsKLSAgLS1mb290ZXItZm9yZS1jb2xvcjogIzQ0NDsKLSAgLS1mb290ZXItYmFjay1jb2xvcjogI2Y4ZjhmODsKLSAgLS1mb290ZXItYm9yZGVyLWNvbG9yOiAjZGRkOwotICAtLWZvb3Rlci1saW5rLWNvbG9yOiAjMDI3N2JkOwotICAtLWRyYXdlci1iYWNrLWNvbG9yOiAjZjhmOGY4OwotICAtLWRyYXdlci1ob3Zlci1iYWNrLWNvbG9yOiAjZjBmMGYwOwotICAtLWRyYXdlci1ib3JkZXItY29sb3I6ICNkZGQ7Ci0gIC0tZHJhd2VyLWNsb3NlLWNvbG9yOiAjNDQ0OyB9CisgIC0taGVhZGVyLWJhY2stY29sb3I6ICMwMzIzNGI7CisgIC0taGVhZGVyLWhvdmVyLWJhY2stY29sb3I6ICNmZmQyMDA7CisgIC0taGVhZGVyLWZvcmUtY29sb3I6ICNmZmZmZmY7CisgIC0taGVhZGVyLWJvcmRlci1jb2xvcjogIzNjYjRlNjsKKyAgLS1uYXYtYmFjay1jb2xvcjogI2ZmZmZmZjsKKyAgLS1uYXYtaG92ZXItYmFjay1jb2xvcjogI2ZmZTk3ZjsKKyAgLS1uYXYtZm9yZS1jb2xvcjogI2U2MDA3ZTsKKyAgLS1uYXYtYm9yZGVyLWNvbG9yOiAjM2NiNGU2OworICAtLW5hdi1saW5rLWNvbG9yOiAjM2NiNGU2OworICAtLWZvb3Rlci1mb3JlLWNvbG9yOiAjZmZmZmZmOworICAtLWZvb3Rlci1iYWNrLWNvbG9yOiAjMDMyMzRiOworICAtLWZvb3Rlci1ib3JkZXItY29sb3I6ICMzY2I0ZTY7CisgIC0tZm9vdGVyLWxpbmstY29sb3I6ICMzY2I0ZTY7CisgIC0tZHJhd2VyLWJhY2stY29sb3I6ICNmZmZmZmY7CisgIC0tZHJhd2VyLWhvdmVyLWJhY2stY29sb3I6ICNmZmU5N2Y7CisgIC0tZHJhd2VyLWJvcmRlci1jb2xvcjogIzNjYjRlNjsKKyAgLS1kcmF3ZXItY2xvc2UtY29sb3I6ICNlNjAwN2U7IH0KIAogaGVhZGVyIHsKLSAgaGVpZ2h0OiAzLjE4NzVyZW07CisgIGhlaWdodDogMi43NXJlbTsKICAgYmFja2dyb3VuZDogdmFyKC0taGVhZGVyLWJhY2stY29sb3IpOwogICBjb2xvcjogdmFyKC0taGVhZGVyLWZvcmUtY29sb3IpOwotICBib3JkZXItYm90dG9tOiAwLjA2MjVyZW0gc29saWQgdmFyKC0taGVhZGVyLWJvcmRlci1jb2xvcik7CisgIGJvcmRlci1ib3R0b206IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1oZWFkZXItYm9yZGVyLWNvbG9yKTsKICAgcGFkZGluZzogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KSAwOwogICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICBvdmVyZmxvdy14OiBhdXRvOwpAQCAtOTI3LDcgKzkyNiw3IEBACiBuYXYgewogICBiYWNrZ3JvdW5kOiB2YXIoLS1uYXYtYmFjay1jb2xvcik7CiAgIGNvbG9yOiB2YXIoLS1uYXYtZm9yZS1jb2xvcik7Ci0gIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLW5hdi1ib3JkZXItY29sb3IpOworICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1uYXYtYm9yZGVyLWNvbG9yKTsKICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpOwogICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOyB9CiAgIG5hdiAqIHsKQEAgLTk0NiwxMCArOTQ1LDEwIEBACiAgICAgbmF2IC5zdWJsaW5rLTE6YmVmb3JlIHsKICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgIGxlZnQ6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC0gMSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7Ci0gICAgICB0b3A6IC0wLjA2MjVyZW07CisgICAgICB0b3A6IC0wLjA3MTQyODU3MTRyZW07CiAgICAgICBjb250ZW50OiAnJzsKICAgICAgIGhlaWdodDogMTAwJTsKLSAgICAgIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLW5hdi1ib3JkZXItY29sb3IpOworICAgICAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tbmF2LWJvcmRlci1jb2xvcik7CiAgICAgICBib3JkZXItbGVmdDogMDsgfQogICBuYXYgLnN1YmxpbmstMiB7CiAgICAgcG9zaXRpb246IHJlbGF0aXZlOwpAQCAtOTU3LDE2ICs5NTYsMTYgQEAKICAgICBuYXYgLnN1YmxpbmstMjpiZWZvcmUgewogICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgbGVmdDogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLSAzICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsKLSAgICAgIHRvcDogLTAuMDYyNXJlbTsKKyAgICAgIHRvcDogLTAuMDcxNDI4NTcxNHJlbTsKICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgaGVpZ2h0OiAxMDAlOwotICAgICAgYm9yZGVyOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tbmF2LWJvcmRlci1jb2xvcik7CisgICAgICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1uYXYtYm9yZGVyLWNvbG9yKTsKICAgICAgIGJvcmRlci1sZWZ0OiAwOyB9CiAKIGZvb3RlciB7CiAgIGJhY2tncm91bmQ6IHZhcigtLWZvb3Rlci1iYWNrLWNvbG9yKTsKICAgY29sb3I6IHZhcigtLWZvb3Rlci1mb3JlLWNvbG9yKTsKLSAgYm9yZGVyLXRvcDogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWZvb3Rlci1ib3JkZXItY29sb3IpOworICBib3JkZXItdG9wOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tZm9vdGVyLWJvcmRlci1jb2xvcik7CiAgIHBhZGRpbmc6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSkgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOwogICBmb250LXNpemU6IDAuODc1cmVtOyB9CiAgIGZvb3RlciBhLCBmb290ZXIgYTp2aXNpdGVkIHsKQEAgLTEwMTMsNyArMTAxMiw3IEBACiAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgIGJhY2tncm91bmQ6IHZhcigtLWRyYXdlci1iYWNrLWNvbG9yKTsKLSAgICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1kcmF3ZXItYm9yZGVyLWNvbG9yKTsKKyAgICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1kcmF3ZXItYm9yZGVyLWNvbG9yKTsKICAgICBib3JkZXItcmFkaXVzOiAwOwogICAgIG1hcmdpbjogMDsKICAgICB6LWluZGV4OiAxMTEwOwpAQCAtMTA2MCwzOCArMTA1OSwzNiBAQAogKi8KIC8qIFRhYmxlIG1vZHVsZSBDU1MgdmFyaWFibGUgZGVmaW5pdGlvbnMuICovCiA6cm9vdCB7Ci0gIC0tdGFibGUtYm9yZGVyLWNvbG9yOiAjYWFhOwotICAtLXRhYmxlLWJvcmRlci1zZXBhcmF0b3ItY29sb3I6ICM2NjY7Ci0gIC0tdGFibGUtaGVhZC1iYWNrLWNvbG9yOiAjZTZlNmU2OwotICAtLXRhYmxlLWhlYWQtZm9yZS1jb2xvcjogIzExMTsKLSAgLS10YWJsZS1ib2R5LWJhY2stY29sb3I6ICNmOGY4Zjg7Ci0gIC0tdGFibGUtYm9keS1mb3JlLWNvbG9yOiAjMTExOwotICAtLXRhYmxlLWJvZHktYWx0LWJhY2stY29sb3I6ICNlZWU7IH0KKyAgLS10YWJsZS1ib3JkZXItY29sb3I6ICMwMzIzNGI7CisgIC0tdGFibGUtYm9yZGVyLXNlcGFyYXRvci1jb2xvcjogIzAzMjM0YjsKKyAgLS10YWJsZS1oZWFkLWJhY2stY29sb3I6ICMwMzIzNGI7CisgIC0tdGFibGUtaGVhZC1mb3JlLWNvbG9yOiAjZmZmZmZmOworICAtLXRhYmxlLWJvZHktYmFjay1jb2xvcjogI2ZmZmZmZjsKKyAgLS10YWJsZS1ib2R5LWZvcmUtY29sb3I6ICMwMzIzNGI7CisgIC0tdGFibGUtYm9keS1hbHQtYmFjay1jb2xvcjogI2Y0ZjRmNDsgfQogCiB0YWJsZSB7CiAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CiAgIGJvcmRlci1zcGFjaW5nOiAwOwotICA6IG1hcmdpbjogY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSkgdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7CisgIG1hcmdpbjogMDsKICAgZGlzcGxheTogZmxleDsKICAgZmxleDogMCAxIGF1dG87CiAgIGZsZXgtZmxvdzogcm93IHdyYXA7CiAgIHBhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsKLSAgcGFkZGluZy10b3A6IDA7Ci0JbWFyZ2luOiBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKSB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsJfQorICBwYWRkaW5nLXRvcDogMDsgfQogICB0YWJsZSBjYXB0aW9uIHsKLSAgICBmb250LXNpemU6IDEuMjUgKiByZW07CisgICAgZm9udC1zaXplOiAxcmVtOwogICAgIG1hcmdpbjogY2FsYygyICogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpIDA7CiAgICAgbWF4LXdpZHRoOiAxMDAlOwotICAgIGZsZXg6IDAgMCAxMDAlOwotCQl0ZXh0LWFsaWduOiBsZWZ0O30KKyAgICBmbGV4OiAwIDAgMTAwJTsgfQogICB0YWJsZSB0aGVhZCwgdGFibGUgdGJvZHkgewogICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgZmxleC1mbG93OiByb3cgd3JhcDsKLSAgICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9CisgICAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsgfQogICB0YWJsZSB0aGVhZCB7CiAgICAgei1pbmRleDogOTk5OwogICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgMCAwOwotICAgIGJvcmRlci1ib3R0b206IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItc2VwYXJhdG9yLWNvbG9yKTsgfQorICAgIGJvcmRlci1ib3R0b206IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItc2VwYXJhdG9yLWNvbG9yKTsgfQogICB0YWJsZSB0Ym9keSB7CiAgICAgYm9yZGVyLXRvcDogMDsKICAgICBtYXJnaW4tdG9wOiBjYWxjKDAgLSB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7CkBAIC0xMTA5LDExICsxMTA2LDExIEBACiAgIHRhYmxlIHRkIHsKICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10YWJsZS1ib2R5LWJhY2stY29sb3IpOwogICAgIGNvbG9yOiB2YXIoLS10YWJsZS1ib2R5LWZvcmUtY29sb3IpOwotICAgIGJvcmRlci10b3A6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9CisgICAgYm9yZGVyLXRvcDogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7IH0KIAogdGFibGU6bm90KC5ob3Jpem9udGFsKSB7CiAgIG92ZXJmbG93OiBhdXRvOwotICBtYXgtaGVpZ2h0OiA4NTBweDsgfQorICBtYXgtaGVpZ2h0OiAxMDAlOyB9CiAgIHRhYmxlOm5vdCguaG9yaXpvbnRhbCkgdGhlYWQsIHRhYmxlOm5vdCguaG9yaXpvbnRhbCkgdGJvZHkgewogICAgIG1heC13aWR0aDogMTAwJTsKICAgICBmbGV4OiAwIDAgMTAwJTsgfQpAQCAtMTEzNCwzMiArMTEzMSwzMyBAQAogICBib3JkZXI6IDA7IH0KICAgdGFibGUuaG9yaXpvbnRhbCB0aGVhZCwgdGFibGUuaG9yaXpvbnRhbCB0Ym9keSB7CiAgICAgYm9yZGVyOiAwOworICAgIGZsZXg6IC4yIDAgMDsKICAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7IH0KICAgdGFibGUuaG9yaXpvbnRhbCB0Ym9keSB7CiAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwotICAgIGZsZXg6IDEgMCAwOwotICAgIG1hcmdpbi1sZWZ0OiBjYWxjKCA0ICogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpOworICAgIGZsZXg6IC44IDAgMDsKKyAgICBtYXJnaW4tbGVmdDogMDsKICAgICBwYWRkaW5nLWJvdHRvbTogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KTsgfQogICB0YWJsZS5ob3Jpem9udGFsIHRyIHsKICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgIGZsZXg6IDEgMCBhdXRvOyB9CiAgIHRhYmxlLmhvcml6b250YWwgdGgsIHRhYmxlLmhvcml6b250YWwgdGQgewotICAgIHdpZHRoOiAxMDAlOworICAgIHdpZHRoOiBhdXRvOwogICAgIGJvcmRlcjogMDsKLSAgICBib3JkZXItYm90dG9tOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsgfQorICAgIGJvcmRlci1ib3R0b206IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9CiAgICAgdGFibGUuaG9yaXpvbnRhbCB0aDpub3QoOmZpcnN0LWNoaWxkKSwgdGFibGUuaG9yaXpvbnRhbCB0ZDpub3QoOmZpcnN0LWNoaWxkKSB7CiAgICAgICBib3JkZXItdG9wOiAwOyB9CiAgIHRhYmxlLmhvcml6b250YWwgdGggewogICAgIHRleHQtYWxpZ246IHJpZ2h0OwotICAgIGJvcmRlci1sZWZ0OiAwLjA2MjVyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsKLSAgICBib3JkZXItcmlnaHQ6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItc2VwYXJhdG9yLWNvbG9yKTsgfQorICAgIGJvcmRlci1sZWZ0OiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsKKyAgICBib3JkZXItcmlnaHQ6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItc2VwYXJhdG9yLWNvbG9yKTsgfQogICB0YWJsZS5ob3Jpem9udGFsIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHsKICAgICBwYWRkaW5nLWxlZnQ6IDA7IH0KICAgdGFibGUuaG9yaXpvbnRhbCB0aDpmaXJzdC1jaGlsZCwgdGFibGUuaG9yaXpvbnRhbCB0ZDpmaXJzdC1jaGlsZCB7Ci0gICAgYm9yZGVyLXRvcDogMC4wNjI1cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7IH0KKyAgICBib3JkZXItdG9wOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsgfQogICB0YWJsZS5ob3Jpem9udGFsIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQgewotICAgIGJvcmRlci1yaWdodDogMC4wNjI1cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7IH0KKyAgICBib3JkZXItcmlnaHQ6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9CiAgICAgdGFibGUuaG9yaXpvbnRhbCB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkIHsKICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjI1cmVtOyB9CiAgICAgdGFibGUuaG9yaXpvbnRhbCB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQgewpAQCAtMTE5MSwxMiArMTE4OSwxMiBAQAogICAgICAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwOyB9CiAgICAgdGFibGUgdHIsIHRhYmxlLmhvcml6b250YWwgdHIgewogICAgICAgZGlzcGxheTogYmxvY2s7Ci0gICAgICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOworICAgICAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsKICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKLSAgICAgIGJhY2tncm91bmQ6ICNmYWZhZmE7CisgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmOwogICAgICAgcGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOwogICAgICAgbWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsKLSAgICAgIG1hcmdpbi1ib3R0b206IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsgfQorICAgICAgbWFyZ2luLWJvdHRvbTogY2FsYygxICogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpOyB9CiAgICAgdGFibGUgdGgsIHRhYmxlIHRkLCB0YWJsZS5ob3Jpem9udGFsIHRoLCB0YWJsZS5ob3Jpem9udGFsIHRkIHsKICAgICAgIHdpZHRoOiBhdXRvOyB9CiAgICAgdGFibGUgdGQsIHRhYmxlLmhvcml6b250YWwgdGQgewpAQCAtMTIxMSw5ICsxMjA5LDYgQEAKICAgICAgIGJvcmRlci10b3A6IDA7IH0KICAgICB0YWJsZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkLCB0YWJsZS5ob3Jpem9udGFsIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQgewogICAgICAgYm9yZGVyLXJpZ2h0OiAwOyB9IH0KLTpyb290IHsKLSAgLS10YWJsZS1ib2R5LWFsdC1iYWNrLWNvbG9yOiAjZWVlOyB9Ci0KIHRhYmxlIHRyOm50aC1vZi10eXBlKDJuKSA+IHRkIHsKICAgYmFja2dyb3VuZDogdmFyKC0tdGFibGUtYm9keS1hbHQtYmFjay1jb2xvcik7IH0KIApAQCAtMTIzNCw4ICsxMjI5LDggQEAKICovCiAvKiBDb250ZXh0dWFsIG1vZHVsZSBDU1MgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8KIDpyb290IHsKLSAgLS1tYXJrLWJhY2stY29sb3I6ICMwMjc3YmQ7Ci0gIC0tbWFyay1mb3JlLWNvbG9yOiAjZmFmYWZhOyB9CisgIC0tbWFyay1iYWNrLWNvbG9yOiAjM2NiNGU2OworICAtLW1hcmstZm9yZS1jb2xvcjogI2ZmZmZmZjsgfQogCiBtYXJrIHsKICAgYmFja2dyb3VuZDogdmFyKC0tbWFyay1iYWNrLWNvbG9yKTsKQEAgLTEyNDMsMTEgKzEyMzgsMTEgQEAKICAgZm9udC1zaXplOiAwLjk1ZW07CiAgIGxpbmUtaGVpZ2h0OiAxZW07CiAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKLSAgcGFkZGluZzogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KSBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpOyB9CisgIHBhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gNCkgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOyB9CiAgIG1hcmsuaW5saW5lLWJsb2NrIHsKICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgZm9udC1zaXplOiAxZW07Ci0gICAgbGluZS1oZWlnaHQ6IDEuNTsKKyAgICBsaW5lLWhlaWdodDogMS40OwogICAgIHBhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMikgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOyB9CiAKIDpyb290IHsKQEAgLTEzMTQsOCArMTMwOSw4IEBACiAKIDpyb290IHsKICAgLS1tb2RhbC1vdmVybGF5LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDUpOwotICAtLW1vZGFsLWNsb3NlLWNvbG9yOiAjNDQ0OwotICAtLW1vZGFsLWNsb3NlLWhvdmVyLWNvbG9yOiAjZjBmMGYwOyB9CisgIC0tbW9kYWwtY2xvc2UtY29sb3I6ICNlNjAwN2U7CisgIC0tbW9kYWwtY2xvc2UtaG92ZXItY29sb3I6ICNmZmU5N2Y7IH0KIAogW3R5cGU9ImNoZWNrYm94Il0ubW9kYWwgewogICBoZWlnaHQ6IDFweDsKQEAgLTEzNjgsMTMgKzEzNjMsMTQgQEAKICAgICAgIHotaW5kZXg6IDEyMTE7IH0KIAogOnJvb3QgewotICAtLWNvbGxhcHNlLWxhYmVsLWJhY2stY29sb3I6ICNlOGU4ZTg7Ci0gIC0tY29sbGFwc2UtbGFiZWwtZm9yZS1jb2xvcjogIzIxMjEyMTsKLSAgLS1jb2xsYXBzZS1sYWJlbC1ob3Zlci1iYWNrLWNvbG9yOiAjZjBmMGYwOwotICAtLWNvbGxhcHNlLXNlbGVjdGVkLWxhYmVsLWJhY2stY29sb3I6ICNlY2VjZWM7Ci0gIC0tY29sbGFwc2UtYm9yZGVyLWNvbG9yOiAjZGRkOwotICAtLWNvbGxhcHNlLWNvbnRlbnQtYmFjay1jb2xvcjogI2ZhZmFmYTsKLSAgLS1jb2xsYXBzZS1zZWxlY3RlZC1sYWJlbC1ib3JkZXItY29sb3I6ICMwMjc3YmQ7IH0KKyAgLS1jb2xsYXBzZS1sYWJlbC1iYWNrLWNvbG9yOiAjMDMyMzRiOworICAtLWNvbGxhcHNlLWxhYmVsLWZvcmUtY29sb3I6ICNmZmZmZmY7CisgIC0tY29sbGFwc2UtbGFiZWwtaG92ZXItYmFjay1jb2xvcjogIzNjYjRlNjsKKyAgLS1jb2xsYXBzZS1zZWxlY3RlZC1sYWJlbC1iYWNrLWNvbG9yOiAjM2NiNGU2OworICAtLWNvbGxhcHNlLWJvcmRlci1jb2xvcjogdmFyKC0tY29sbGFwc2UtbGFiZWwtYmFjay1jb2xvcik7CisgIC0tY29sbGFwc2Utc2VsZWN0ZWQtYm9yZGVyLWNvbG9yOiAjY2VlY2Y4OworICAtLWNvbGxhcHNlLWNvbnRlbnQtYmFjay1jb2xvcjogI2ZmZmZmZjsKKyAgLS1jb2xsYXBzZS1zZWxlY3RlZC1sYWJlbC1ib3JkZXItY29sb3I6ICMzY2I0ZTY7IH0KIAogLmNvbGxhcHNlIHsKICAgd2lkdGg6IGNhbGMoMTAwJSAtIDIgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7CkBAIC0xMzk1LDEzICsxMzkxLDEzIEBACiAgIC5jb2xsYXBzZSA+IGxhYmVsIHsKICAgICBmbGV4LWdyb3c6IDE7CiAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIGhlaWdodDogMS41cmVtOworICAgIGhlaWdodDogMS4yNXJlbTsKICAgICBjdXJzb3I6IHBvaW50ZXI7Ci0gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjNzOworICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4yczsKICAgICBjb2xvcjogdmFyKC0tY29sbGFwc2UtbGFiZWwtZm9yZS1jb2xvcik7CiAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sbGFwc2UtbGFiZWwtYmFjay1jb2xvcik7Ci0gICAgYm9yZGVyOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tY29sbGFwc2UtYm9yZGVyLWNvbG9yKTsKLSAgICBwYWRkaW5nOiBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7IH0KKyAgICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1jb2xsYXBzZS1zZWxlY3RlZC1ib3JkZXItY29sb3IpOworICAgIHBhZGRpbmc6IGNhbGMoMS4yNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7IH0KICAgICAuY29sbGFwc2UgPiBsYWJlbDpob3ZlciwgLmNvbGxhcHNlID4gbGFiZWw6Zm9jdXMgewogICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sbGFwc2UtbGFiZWwtaG92ZXItYmFjay1jb2xvcik7IH0KICAgICAuY29sbGFwc2UgPiBsYWJlbCArIGRpdiB7CkBAIC0xNDE4LDcgKzE0MTQsNyBAQAogICAgICAgbWF4LWhlaWdodDogMXB4OyB9CiAgIC5jb2xsYXBzZSA+IDpjaGVja2VkICsgbGFiZWwgewogICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbGxhcHNlLXNlbGVjdGVkLWxhYmVsLWJhY2stY29sb3IpOwotICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLWNvbGxhcHNlLXNlbGVjdGVkLWxhYmVsLWJvcmRlci1jb2xvcik7IH0KKyAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbGxhcHNlLXNlbGVjdGVkLWxhYmVsLWJvcmRlci1jb2xvcik7IH0KICAgICAuY29sbGFwc2UgPiA6Y2hlY2tlZCArIGxhYmVsICsgZGl2IHsKICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CkBAIC0xNDI3LDEzICsxNDIzLDEzIEBACiAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgIG1hcmdpbjogMDsKICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbGxhcHNlLWNvbnRlbnQtYmFjay1jb2xvcik7Ci0gICAgICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1jb2xsYXBzZS1ib3JkZXItY29sb3IpOworICAgICAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tY29sbGFwc2Utc2VsZWN0ZWQtYm9yZGVyLWNvbG9yKTsKICAgICAgIGJvcmRlci10b3A6IDA7CiAgICAgICBwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZyk7CiAgICAgICBjbGlwOiBhdXRvOwogICAgICAgLXdlYmtpdC1jbGlwLXBhdGg6IGluc2V0KDAlKTsKICAgICAgIGNsaXAtcGF0aDogaW5zZXQoMCUpOwotICAgICAgbWF4LWhlaWdodDogODUwcHg7IH0KKyAgICAgIG1heC1oZWlnaHQ6IDEwMCU7IH0KICAgLmNvbGxhcHNlID4gbGFiZWw6bm90KDpmaXJzdC1vZi10eXBlKSB7CiAgICAgYm9yZGVyLXRvcDogMDsgfQogICAuY29sbGFwc2UgPiBsYWJlbDpmaXJzdC1vZi10eXBlIHsKQEAgLTE0NTAsMTEgKzE0NDYsOCBAQAogLyoKICAgQ3VzdG9tIGVsZW1lbnRzIGZvciBjb250ZXh0dWFsIGJhY2tncm91bmQgZWxlbWVudHMsIHRvYXN0cyBhbmQgdG9vbHRpcHMuCiAqLwotbWFyay5zZWNvbmRhcnkgewotICAtLW1hcmstYmFjay1jb2xvcjogI2QzMmYyZjsgfQotCiBtYXJrLnRlcnRpYXJ5IHsKLSAgLS1tYXJrLWJhY2stY29sb3I6ICMzMDg3MzI7IH0KKyAgLS1tYXJrLWJhY2stY29sb3I6ICMzY2I0ZTY7IH0KIAogbWFyay50YWcgewogICBwYWRkaW5nOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKS8yKSB2YXIoLS11bml2ZXJzYWwtcGFkZGluZyk7CkBAIC0xNDYzLDkgKzE0NTYsOSBAQAogLyoKICAgRGVmaW5pdGlvbnMgZm9yIHByb2dyZXNzIGVsZW1lbnRzIGFuZCBzcGlubmVycy4KICovCi0vKiBQcm9nZXNzIG1vZHVsZSBDU1MgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8KKy8qIFByb2dyZXNzIG1vZHVsZSBDU1MgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8KIDpyb290IHsKLSAgLS1wcm9ncmVzcy1iYWNrLWNvbG9yOiAjZGRkOworICAtLXByb2dyZXNzLWJhY2stY29sb3I6ICMzY2I0ZTY7CiAgIC0tcHJvZ3Jlc3MtZm9yZS1jb2xvcjogIzU1NTsgfQogCiBwcm9ncmVzcyB7CkBAIC0xNTU4LDQ1ICsxNTUxLDQ1IEBACiAgICAgZmlsdGVyOiBpbnZlcnQoMTAwJSk7IH0KIAogc3Bhbi5pY29uLWFsZXJ0IHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzEwJyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPScxMicgeTE9JzgnIHgyPScxMicgeTI9JzEyJyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nMTInIHkxPScxNicgeDI9JzEyJyB5Mj0nMTYnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzEwJyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPScxMicgeTE9JzgnIHgyPScxMicgeTI9JzEyJyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nMTInIHkxPScxNicgeDI9JzEyJyB5Mj0nMTYnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1ib29rbWFyayB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMTkgMjFsLTctNS03IDVWNWEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ6JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMTkgMjFsLTctNS03IDVWNWEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ6JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24tY2FsZW5kYXIgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3JlY3QgeD0nMycgeT0nNCcgd2lkdGg9JzE4JyBoZWlnaHQ9JzE4JyByeD0nMicgcnk9JzInJTNFJTNDL3JlY3QlM0UlM0NsaW5lIHgxPScxNicgeTE9JzInIHgyPScxNicgeTI9JzYnJTNFJTNDL2xpbmUlM0UlM0NsaW5lIHgxPSc4JyB5MT0nMicgeDI9JzgnIHkyPSc2JyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nMycgeTE9JzEwJyB4Mj0nMjEnIHkyPScxMCclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3JlY3QgeD0nMycgeT0nNCcgd2lkdGg9JzE4JyBoZWlnaHQ9JzE4JyByeD0nMicgcnk9JzInJTNFJTNDL3JlY3QlM0UlM0NsaW5lIHgxPScxNicgeTE9JzInIHgyPScxNicgeTI9JzYnJTNFJTNDL2xpbmUlM0UlM0NsaW5lIHgxPSc4JyB5MT0nMicgeDI9JzgnIHkyPSc2JyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nMycgeTE9JzEwJyB4Mj0nMjEnIHkyPScxMCclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLWNyZWRpdCB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcmVjdCB4PScxJyB5PSc0JyB3aWR0aD0nMjInIGhlaWdodD0nMTYnIHJ4PScyJyByeT0nMiclM0UlM0MvcmVjdCUzRSUzQ2xpbmUgeDE9JzEnIHkxPScxMCcgeDI9JzIzJyB5Mj0nMTAnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NyZWN0IHg9JzEnIHk9JzQnIHdpZHRoPScyMicgaGVpZ2h0PScxNicgcng9JzInIHJ5PScyJyUzRSUzQy9yZWN0JTNFJTNDbGluZSB4MT0nMScgeTE9JzEwJyB4Mj0nMjMnIHkyPScxMCclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLWVkaXQgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIwIDE0LjY2VjIwYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmg1LjM0JyUzRSUzQy9wYXRoJTNFJTNDcG9seWdvbiBwb2ludHM9JzE4IDIgMjIgNiAxMiAxNiA4IDE2IDggMTIgMTggMiclM0UlM0MvcG9seWdvbiUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIwIDE0LjY2VjIwYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmg1LjM0JyUzRSUzQy9wYXRoJTNFJTNDcG9seWdvbiBwb2ludHM9JzE4IDIgMjIgNiAxMiAxNiA4IDE2IDggMTIgMTggMiclM0UlM0MvcG9seWdvbiUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLWxpbmsgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYnJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzE1IDMgMjEgMyAyMSA5JyUzRSUzQy9wb2x5bGluZSUzRSUzQ2xpbmUgeDE9JzEwJyB5MT0nMTQnIHgyPScyMScgeTI9JzMnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2JyUzRSUzQy9wYXRoJTNFJTNDcG9seWxpbmUgcG9pbnRzPScxNSAzIDIxIDMgMjEgOSclM0UlM0MvcG9seWxpbmUlM0UlM0NsaW5lIHgxPScxMCcgeTE9JzE0JyB4Mj0nMjEnIHkyPSczJyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24taGVscCB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDMnJTNFJTNDL3BhdGglM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzEwJyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPScxMicgeTE9JzE3JyB4Mj0nMTInIHkyPScxNyclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTkuMDkgOWEzIDMgMCAwIDEgNS44MyAxYzAgMi0zIDMtMyAzJyUzRSUzQy9wYXRoJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPScxMCclM0UlM0MvY2lyY2xlJTNFJTNDbGluZSB4MT0nMTInIHkxPScxNycgeDI9JzEyJyB5Mj0nMTcnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1ob21lIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00zIDlsOS03IDkgN3YxMWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnonJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzkgMjIgOSAxMiAxNSAxMiAxNSAyMiclM0UlM0MvcG9seWxpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00zIDlsOS03IDkgN3YxMWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnonJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzkgMjIgOSAxMiAxNSAxMiAxNSAyMiclM0UlM0MvcG9seWxpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1pbmZvIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzEwJyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPScxMicgeTE9JzE2JyB4Mj0nMTInIHkyPScxMiclM0UlM0MvbGluZSUzRSUzQ2xpbmUgeDE9JzEyJyB5MT0nOCcgeDI9JzEyJyB5Mj0nOCclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nMTAnJTNFJTNDL2NpcmNsZSUzRSUzQ2xpbmUgeDE9JzEyJyB5MT0nMTYnIHgyPScxMicgeTI9JzEyJyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nMTInIHkxPSc4JyB4Mj0nMTInIHkyPSc4JyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24tbG9jayB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcmVjdCB4PSczJyB5PScxMScgd2lkdGg9JzE4JyBoZWlnaHQ9JzExJyByeD0nMicgcnk9JzInJTNFJTNDL3JlY3QlM0UlM0NwYXRoIGQ9J003IDExVjdhNSA1IDAgMCAxIDEwIDB2NCclM0UlM0MvcGF0aCUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3JlY3QgeD0nMycgeT0nMTEnIHdpZHRoPScxOCcgaGVpZ2h0PScxMScgcng9JzInIHJ5PScyJyUzRSUzQy9yZWN0JTNFJTNDcGF0aCBkPSdNNyAxMVY3YTUgNSAwIDAgMSAxMCAwdjQnJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1tYWlsIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J000IDRoMTZjMS4xIDAgMiAuOSAyIDJ2MTJjMCAxLjEtLjkgMi0yIDJINGMtMS4xIDAtMi0uOS0yLTJWNmMwLTEuMS45LTIgMi0yeiclM0UlM0MvcGF0aCUzRSUzQ3BvbHlsaW5lIHBvaW50cz0nMjIsNiAxMiwxMyAyLDYnJTNFJTNDL3BvbHlsaW5lJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNNCA0aDE2YzEuMSAwIDIgLjkgMiAydjEyYzAgMS4xLS45IDItMiAySDRjLTEuMSAwLTItLjktMi0yVjZjMC0xLjEuOS0yIDItMnonJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzIyLDYgMTIsMTMgMiw2JyUzRSUzQy9wb2x5bGluZSUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLWxvY2F0aW9uIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00yMSAxMGMwIDctOSAxMy05IDEzcy05LTYtOS0xM2E5IDkgMCAwIDEgMTggMHonJTNFJTNDL3BhdGglM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTAnIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIxIDEwYzAgNy05IDEzLTkgMTNzLTktNi05LTEzYTkgOSAwIDAgMSAxOCAweiclM0UlM0MvcGF0aCUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMCcgcj0nMyclM0UlM0MvY2lyY2xlJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24tcGhvbmUgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIyIDE2LjkydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNSAxOS41IDAgMCAxLTYtNiAxOS43OSAxOS43OSAwIDAgMS0zLjA3LTguNjdBMiAyIDAgMCAxIDQuMTEgMmgzYTIgMiAwIDAgMSAyIDEuNzIgMTIuODQgMTIuODQgMCAwIDAgLjcgMi44MSAyIDIgMCAwIDEtLjQ1IDIuMTFMOC4wOSA5LjkxYTE2IDE2IDAgMCAwIDYgNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuN0EyIDIgMCAwIDEgMjIgMTYuOTJ6JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMjIgMTYuOTJ2M2EyIDIgMCAwIDEtMi4xOCAyIDE5Ljc5IDE5Ljc5IDAgMCAxLTguNjMtMy4wNyAxOS41IDE5LjUgMCAwIDEtNi02IDE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42N0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFhMTYgMTYgMCAwIDAgNiA2bDEuMjctMS4yN2EyIDIgMCAwIDEgMi4xMS0uNDUgMTIuODQgMTIuODQgMCAwIDAgMi44MS43QTIgMiAwIDAgMSAyMiAxNi45MnonJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1yc3MgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTQgMTFhOSA5IDAgMCAxIDkgOSclM0UlM0MvcGF0aCUzRSUzQ3BhdGggZD0nTTQgNGExNiAxNiAwIDAgMSAxNiAxNiclM0UlM0MvcGF0aCUzRSUzQ2NpcmNsZSBjeD0nNScgY3k9JzE5JyByPScxJyUzRSUzQy9jaXJjbGUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J000IDExYTkgOSAwIDAgMSA5IDknJTNFJTNDL3BhdGglM0UlM0NwYXRoIGQ9J000IDRhMTYgMTYgMCAwIDEgMTYgMTYnJTNFJTNDL3BhdGglM0UlM0NjaXJjbGUgY3g9JzUnIGN5PScxOScgcj0nMSclM0UlM0MvY2lyY2xlJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24tc2VhcmNoIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzExJyBjeT0nMTEnIHI9JzgnJTNFJTNDL2NpcmNsZSUzRSUzQ2xpbmUgeDE9JzIxJyB5MT0nMjEnIHgyPScxNi42NScgeTI9JzE2LjY1JyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PScxMScgY3k9JzExJyByPSc4JyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPScyMScgeTE9JzIxJyB4Mj0nMTYuNjUnIHkyPScxNi42NSclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLXNldHRpbmdzIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQ3BhdGggZD0nTTE5LjQgMTVhMS42NSAxLjY1IDAgMCAwIC4zMyAxLjgybC4wNi4wNmEyIDIgMCAwIDEgMCAyLjgzIDIgMiAwIDAgMS0yLjgzIDBsLS4wNi0uMDZhMS42NSAxLjY1IDAgMCAwLTEuODItLjMzIDEuNjUgMS42NSAwIDAgMC0xIDEuNTFWMjFhMiAyIDAgMCAxLTIgMiAyIDIgMCAwIDEtMi0ydi0uMDlBMS42NSAxLjY1IDAgMCAwIDkgMTkuNGExLjY1IDEuNjUgMCAwIDAtMS44Mi4zM2wtLjA2LjA2YTIgMiAwIDAgMS0yLjgzIDAgMiAyIDAgMCAxIDAtMi44M2wuMDYtLjA2YTEuNjUgMS42NSAwIDAgMCAuMzMtMS44MiAxLjY1IDEuNjUgMCAwIDAtMS41MS0xSDNhMiAyIDAgMCAxLTItMiAyIDIgMCAwIDEgMi0yaC4wOUExLjY1IDEuNjUgMCAwIDAgNC42IDlhMS42NSAxLjY1IDAgMCAwLS4zMy0xLjgybC0uMDYtLjA2YTIgMiAwIDAgMSAwLTIuODMgMiAyIDAgMCAxIDIuODMgMGwuMDYuMDZhMS42NSAxLjY1IDAgMCAwIDEuODIuMzNIOWExLjY1IDEuNjUgMCAwIDAgMS0xLjUxVjNhMiAyIDAgMCAxIDItMiAyIDIgMCAwIDEgMiAydi4wOWExLjY1IDEuNjUgMCAwIDAgMSAxLjUxIDEuNjUgMS42NSAwIDAgMCAxLjgyLS4zM2wuMDYtLjA2YTIgMiAwIDAgMSAyLjgzIDAgMiAyIDAgMCAxIDAgMi44M2wtLjA2LjA2YTEuNjUgMS42NSAwIDAgMC0uMzMgMS44MlY5YTEuNjUgMS42NSAwIDAgMCAxLjUxIDFIMjFhMiAyIDAgMCAxIDIgMiAyIDIgMCAwIDEtMiAyaC0uMDlhMS42NSAxLjY1IDAgMCAwLTEuNTEgMXonJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQ3BhdGggZD0nTTE5LjQgMTVhMS42NSAxLjY1IDAgMCAwIC4zMyAxLjgybC4wNi4wNmEyIDIgMCAwIDEgMCAyLjgzIDIgMiAwIDAgMS0yLjgzIDBsLS4wNi0uMDZhMS42NSAxLjY1IDAgMCAwLTEuODItLjMzIDEuNjUgMS42NSAwIDAgMC0xIDEuNTFWMjFhMiAyIDAgMCAxLTIgMiAyIDIgMCAwIDEtMi0ydi0uMDlBMS42NSAxLjY1IDAgMCAwIDkgMTkuNGExLjY1IDEuNjUgMCAwIDAtMS44Mi4zM2wtLjA2LjA2YTIgMiAwIDAgMS0yLjgzIDAgMiAyIDAgMCAxIDAtMi44M2wuMDYtLjA2YTEuNjUgMS42NSAwIDAgMCAuMzMtMS44MiAxLjY1IDEuNjUgMCAwIDAtMS41MS0xSDNhMiAyIDAgMCAxLTItMiAyIDIgMCAwIDEgMi0yaC4wOUExLjY1IDEuNjUgMCAwIDAgNC42IDlhMS42NSAxLjY1IDAgMCAwLS4zMy0xLjgybC0uMDYtLjA2YTIgMiAwIDAgMSAwLTIuODMgMiAyIDAgMCAxIDIuODMgMGwuMDYuMDZhMS42NSAxLjY1IDAgMCAwIDEuODIuMzNIOWExLjY1IDEuNjUgMCAwIDAgMS0xLjUxVjNhMiAyIDAgMCAxIDItMiAyIDIgMCAwIDEgMiAydi4wOWExLjY1IDEuNjUgMCAwIDAgMSAxLjUxIDEuNjUgMS42NSAwIDAgMCAxLjgyLS4zM2wuMDYtLjA2YTIgMiAwIDAgMSAyLjgzIDAgMiAyIDAgMCAxIDAgMi44M2wtLjA2LjA2YTEuNjUgMS42NSAwIDAgMC0uMzMgMS44MlY5YTEuNjUgMS42NSAwIDAgMCAxLjUxIDFIMjFhMiAyIDAgMCAxIDIgMiAyIDIgMCAwIDEtMiAyaC0uMDlhMS42NSAxLjY1IDAgMCAwLTEuNTEgMXonJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1zaGFyZSB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PScxOCcgY3k9JzUnIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQ2NpcmNsZSBjeD0nNicgY3k9JzEyJyByPSczJyUzRSUzQy9jaXJjbGUlM0UlM0NjaXJjbGUgY3g9JzE4JyBjeT0nMTknIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQ2xpbmUgeDE9JzguNTknIHkxPScxMy41MScgeDI9JzE1LjQyJyB5Mj0nMTcuNDknJTNFJTNDL2xpbmUlM0UlM0NsaW5lIHgxPScxNS40MScgeTE9JzYuNTEnIHgyPSc4LjU5JyB5Mj0nMTAuNDknJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzE4JyBjeT0nNScgcj0nMyclM0UlM0MvY2lyY2xlJTNFJTNDY2lyY2xlIGN4PSc2JyBjeT0nMTInIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQ2NpcmNsZSBjeD0nMTgnIGN5PScxOScgcj0nMyclM0UlM0MvY2lyY2xlJTNFJTNDbGluZSB4MT0nOC41OScgeTE9JzEzLjUxJyB4Mj0nMTUuNDInIHkyPScxNy40OSclM0UlM0MvbGluZSUzRSUzQ2xpbmUgeDE9JzE1LjQxJyB5MT0nNi41MScgeDI9JzguNTknIHkyPScxMC40OSclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLWNhcnQgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2NpcmNsZSBjeD0nOScgY3k9JzIxJyByPScxJyUzRSUzQy9jaXJjbGUlM0UlM0NjaXJjbGUgY3g9JzIwJyBjeT0nMjEnIHI9JzEnJTNFJTNDL2NpcmNsZSUzRSUzQ3BhdGggZD0nTTEgMWg0bDIuNjggMTMuMzlhMiAyIDAgMCAwIDIgMS42MWg5LjcyYTIgMiAwIDAgMCAyLTEuNjFMMjMgNkg2JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PSc5JyBjeT0nMjEnIHI9JzEnJTNFJTNDL2NpcmNsZSUzRSUzQ2NpcmNsZSBjeD0nMjAnIGN5PScyMScgcj0nMSclM0UlM0MvY2lyY2xlJTNFJTNDcGF0aCBkPSdNMSAxaDRsMi42OCAxMy4zOWEyIDIgMCAwIDAgMiAxLjYxaDkuNzJhMiAyIDAgMCAwIDItMS42MUwyMyA2SDYnJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi11cGxvYWQgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQnJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzE3IDggMTIgMyA3IDgnJTNFJTNDL3BvbHlsaW5lJTNFJTNDbGluZSB4MT0nMTInIHkxPSczJyB4Mj0nMTInIHkyPScxNSclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQnJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzE3IDggMTIgMyA3IDgnJTNFJTNDL3BvbHlsaW5lJTNFJTNDbGluZSB4MT0nMTInIHkxPSczJyB4Mj0nMTInIHkyPScxNSclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLXVzZXIgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIwIDIxdi0yYTQgNCAwIDAgMC00LTRIOGE0IDQgMCAwIDAtNCA0djInJTNFJTNDL3BhdGglM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nNycgcj0nNCclM0UlM0MvY2lyY2xlJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMjAgMjF2LTJhNCA0IDAgMCAwLTQtNEg4YTQgNCAwIDAgMC00IDR2MiclM0UlM0MvcGF0aCUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PSc3JyByPSc0JyUzRSUzQy9jaXJjbGUlM0UlM0Mvc3ZnJTNFIik7IH0KIAogLyoKICAgRGVmaW5pdGlvbnMgZm9yIHV0aWxpdGllcyBhbmQgaGVscGVyIGNsYXNzZXMuCkBAIC0xNjA0LDcgKzE1OTcsNyBAQAogLyogVXRpbGl0eSBtb2R1bGUgQ1NTIHZhcmlhYmxlIGRlZmluaXRpb25zICovCiA6cm9vdCB7CiAgIC0tZ2VuZXJpYy1ib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zKTsKLSAgLS1nZW5lcmljLWJveC1zaGFkb3c6IDAgMC4yNXJlbSAwLjI1cmVtIDAgcmdiYSgwLCAwLCAwLCAwLjEyNSksIDAgMC4xMjVyZW0gMC4xMjVyZW0gLTAuMTI1cmVtIHJnYmEoMCwgMCwgMCwgMC4yNSk7IH0KKyAgLS1nZW5lcmljLWJveC1zaGFkb3c6IDAgMC4yODU3MTQyODU3cmVtIDAuMjg1NzE0Mjg1N3JlbSAwIHJnYmEoMCwgMCwgMCwgMC4xMjUpLCAwIDAuMTQyODU3MTQyOXJlbSAwLjE0Mjg1NzE0MjlyZW0gLTAuMTQyODU3MTQyOXJlbSByZ2JhKDAsIDAsIDAsIDAuMTI1KTsgfQogCiAuaGlkZGVuIHsKICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CkBAIC0xNjIyLDcgKzE2MTUsNyBAQAogICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7IH0KIAogLmJvcmRlcmVkIHsKLSAgYm9yZGVyOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tZ2VuZXJpYy1ib3JkZXItY29sb3IpICFpbXBvcnRhbnQ7IH0KKyAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tZ2VuZXJpYy1ib3JkZXItY29sb3IpICFpbXBvcnRhbnQ7IH0KIAogLnJvdW5kZWQgewogICBib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgIWltcG9ydGFudDsgfQpAQCAtMTY5Nyw0ICsxNjkwLDE0IEBACiAgICAgY2xpcC1wYXRoOiBpbnNldCgxMDAlKSAhaW1wb3J0YW50OwogICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsgfSB9CiAKLS8qIyBzb3VyY2VNYXBwaW5nVVJMPW1pbmktZGVmYXVsdC5jc3MubWFwICovCisvKiMgc291cmNlTWFwcGluZ1VSTD1taW5pLWN1c3RvbS5jc3MubWFwICovCisKK2ltZ1thbHQ9IlNUIGxvZ28iXSB7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87IHdpZHRoOiA3NSU7IG1heC13aWR0aDogMjUwcHg7IG1pbi13aWR0aDogNzFweDsgfQoraW1nW2FsdD0iQ3ViZSBsb2dvIl0geyBmbG9hdDogcmlnaHQ7IHdpZHRoOiAzMCU7IG1heC13aWR0aDogMTByZW07IG1pbi13aWR0aDogOHJlbTsgcGFkZGluZy1yaWdodDogMXJlbTt9CisKKy5maWd1cmUgeworICBkaXNwbGF5OiBibG9jazsKKyAgbWFyZ2luLWxlZnQ6IGF1dG87CisgIG1hcmdpbi1yaWdodDogYXV0bzsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL19odG1yZXNjL3N0X2xvZ28ucG5nIGIvX2h0bXJlc2Mvc3RfbG9nby5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiODAwNTcuLjAwMDAwMDAKLS0tIGEvX2h0bXJlc2Mvc3RfbG9nby5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9faHRtcmVzYy9zdF9sb2dvXzIwMjAucG5nIGIvX2h0bXJlc2Mvc3RfbG9nb18yMDIwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmNlYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvX2h0bXJlc2Mvc3RfbG9nb18yMDIwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCg==