LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIGxpY2Vuc2UuICBXaGVuIHlvdSB1c2Ugb3IKICogZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlLCB5b3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlcgogKiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMdjIgTGljZW5zZSIpCiAqIG9yIEJTRCBMaWNlbnNlLgogKgogKiBHUEx2MiBMaWNlbnNlCiAqCiAqIENvcHlyaWdodChDKSAyMDE2IE1lZGlhVGVrIEluYy4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAqIFNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIEJTRCBMSUNFTlNFCiAqCiAqIENvcHlyaWdodChDKSAyMDE2IE1lZGlhVGVrIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKgogKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAqICAgIGRpc3RyaWJ1dGlvbi4KICogICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwogKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgogKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAogKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qCioqIElkOiAvL0RlcGFydG1lbnQvRGFWaW5jaS9CUkFOQ0hFUy9NVDY2MjBfV0lGSV9EUklWRVJfVjJfMy9pbmNsdWRlL3dsYW5fb2lkLmgjNAoqLwoKLyohIFxmaWxlICAgIndsYW5fb2lkLmgiCiogICAgXGJyaWVmIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVjbGFpcmF0aW9uIGZpbGUgb2YgdGhlIFdMQU4gT0lEIHByb2Nlc3Npbmcgcm91dGluZXMKKgkgICBvZiBXaW5kb3dzIGRyaXZlciBmb3IgTWVkaWFUZWsgSW5jLiA4MDIuMTEgV2lyZWxlc3MgTEFOIEFkYXB0ZXJzLgoqLwoKCiNpZm5kZWYgX1dMQU5fT0lEX0gKI2RlZmluZSBfV0xBTl9PSURfSAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiAgICAgICAgICAgICAgICAgICAgICAgICBDIE8gTSBQIEkgTCBFIFIgICBGIEwgQSBHIFMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICAgICAgICAgICAgICAgICAgIEUgWCBUIEUgUiBOIEEgTCAgIFIgRSBGIEUgUiBFIE4gQyBFIFMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDIE8gTiBTIFQgQSBOIFQgUwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqLwoKI2RlZmluZSBQQVJBTV9NQVhfTEVOX1NTSUQgICAgICAgICAgICAgICAgICAgICAgMzIKCiNkZWZpbmUgUEFSQU1fTUFDX0FERFJfTEVOICAgICAgICAgICAgICAgICAgICAgIDYKCiNkZWZpbmUgRVRIRVJORVRfSEVBREVSX1NaICAgICAgICAgICAgICAgICAgICAgIDE0CiNkZWZpbmUgRVRIRVJORVRfTUlOX1BLVF9TWiAgICAgICAgICAgICAgICAgICAgIDYwCiNkZWZpbmUgRVRIRVJORVRfTUFYX1BLVF9TWiAgICAgICAgICAgICAgICAgICAgIDE1MTQKCiNkZWZpbmUgUEFSQU1fTUFYX0xFTl9SQVRFUyAgICAgICAgICAgICAgICAgICAgIDgKI2RlZmluZSBQQVJBTV9NQVhfTEVOX1JBVEVTX0VYICAgICAgICAgICAgICAgICAgMTYKCiNkZWZpbmUgUEFSQU1fQVVUSF9SRVFVRVNUX1JFQVVUSCAgICAgICAgICAgICAgIDB4MDEKI2RlZmluZSBQQVJBTV9BVVRIX1JFUVVFU1RfS0VZVVBEQVRFICAgICAgICAgICAgMHgwMgojZGVmaW5lIFBBUkFNX0FVVEhfUkVRVUVTVF9QQUlSV0lTRV9FUlJPUiAgICAgICAweDA2CiNkZWZpbmUgUEFSQU1fQVVUSF9SRVFVRVNUX0dST1VQX0VSUk9SICAgICAgICAgIDB4MEUKCiNkZWZpbmUgUEFSQU1fRUVQUk9NX1JFQURfTUVUSE9EX1JFQUQgICAgICAgICAgIDEKI2RlZmluZSBQQVJBTV9FRVBST01fUkVBRF9NRVRIT0RfR0VUU0laRSAgICAgICAgMAoKI2RlZmluZSBQQVJBTV9XSFFMX1JTU0lfTUFYX0RCTSAgICAgICAgICAgICAgICAgKC0xMCkKI2RlZmluZSBQQVJBTV9XSFFMX1JTU0lfTUlOX0RCTSAgICAgICAgICAgICAgICAgKC0yMDApCgojZGVmaW5lIFBBUkFNX0RFVklDRV9XQUtFX1VQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKI2RlZmluZSBQQVJBTV9ERVZJQ0VfV0FLRV9PTl9QQVRURVJOX01BVENIX0VOQUJMRSAgICAgICAweDAwMDAwMDAyCiNkZWZpbmUgUEFSQU1fREVWSUNFX1dBS0VfT05fTUFHSUNfUEFDS0VUX0VOQUJMRSAgICAgICAgMHgwMDAwMDAwNAoKI2RlZmluZSBQQVJBTV9XQUtFX1VQX01BR0lDX1BBQ0tFVCAgICAgICAgICAgICAgMHgwMDAwMDAwMQojZGVmaW5lIFBBUkFNX1dBS0VfVVBfUEFUVEVSTl9NQVRDSCAgICAgICAgICAgICAweDAwMDAwMDAyCiNkZWZpbmUgUEFSQU1fV0FLRV9VUF9MSU5LX0NIQU5HRSAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKCi8qIFBhY2tldCBmaWx0ZXIgYml0IGRlZmluaXRpb2luIChVSU5UXzMyIGJpdC13aXNlIGRlZmluaXRpb24pICovCiNkZWZpbmUgUEFSQU1fUEFDS0VUX0ZJTFRFUl9ESVJFQ1RFRCAgICAgICAgICAgIDB4MDAwMDAwMDEKI2RlZmluZSBQQVJBTV9QQUNLRVRfRklMVEVSX01VTFRJQ0FTVCAgICAgICAgICAgMHgwMDAwMDAwMgojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfQUxMX01VTFRJQ0FTVCAgICAgICAweDAwMDAwMDA0CiNkZWZpbmUgUEFSQU1fUEFDS0VUX0ZJTFRFUl9CUk9BRENBU1QgICAgICAgICAgIDB4MDAwMDAwMDgKI2RlZmluZSBQQVJBTV9QQUNLRVRfRklMVEVSX1BST01JU0NVT1VTICAgICAgICAgMHgwMDAwMDAyMAojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfQUxMX0xPQ0FMICAgICAgICAgICAweDAwMDAwMDgwCiNpZiBDRkdfRU5BQkxFX1dJRklfRElSRUNUX0NGR184MDIxMQojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfUDJQX01BU0sgICAgICAgICAgICAgMHhDMDAwMDAwMAojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfUFJPQkVfUkVRICAgICAgICAgICAweDgwMDAwMDAwCiNkZWZpbmUgUEFSQU1fUEFDS0VUX0ZJTFRFUl9BQ1RJT05fRlJBTUUgICAgICAweDQwMDAwMDAwCiNlbmRpZgoKI2lmIENGR19TTFRfU1VQUE9SVAojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfU1VQUE9SVEVEICAgKFBBUkFNX1BBQ0tFVF9GSUxURVJfRElSRUNURUQgfCBcCgkJCQkJIFBBUkFNX1BBQ0tFVF9GSUxURVJfTVVMVElDQVNUIHwgXAoJCQkJCSBQQVJBTV9QQUNLRVRfRklMVEVSX0JST0FEQ0FTVCB8IFwKCQkJCQkgUEFSQU1fUEFDS0VUX0ZJTFRFUl9BTExfTVVMVElDQVNUKQojZWxzZQojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfU1VQUE9SVEVEICAgKFBBUkFNX1BBQ0tFVF9GSUxURVJfRElSRUNURUQgfCBcCgkJCQkJIFBBUkFNX1BBQ0tFVF9GSUxURVJfTVVMVElDQVNUIHwgXAoJCQkJCSBQQVJBTV9QQUNLRVRfRklMVEVSX0JST0FEQ0FTVCB8IFwKCQkJCQkgUEFSQU1fUEFDS0VUX0ZJTFRFUl9BTExfTVVMVElDQVNUKQojZW5kaWYKCiNkZWZpbmUgUEFSQU1fTUVNX0RVTVBfTUFYX1NJWkUgICAgICAgICAxNTM2CgojaWYgQ0ZHX1NVUFBPUlRfQ0FMX1JFU1VMVF9CQUNLVVBfVE9fSE9TVAojZGVmaW5lIFBBUkFNX0NBTF9EQVRBX0RVTVBfTUFYX1NJWkUJMTIwMAojZGVmaW5lIFBBUkFNX0NBTF9EQVRBX0RVTVBfTUFYX05VTQkJMzAwCiNlbmRpZgoKI2RlZmluZSBCVF9QUk9GSUxFX1BBUkFNX0xFTiAgICAgICAgOAoKI2lmIENGR19TVVBQT1JUX0JVRkZFUl9NT0RFCgovKiBGb3IgTVQ3NjY4ICovCiNkZWZpbmUgRUZVU0VfQ09OVEVOVF9CVUZGRVJfU1RBUlQgICAgICAgIDB4MDNBCiNkZWZpbmUgRUZVU0VfQ09OVEVOVF9CVUZGRVJfRU5EICAgICAgICAgIDB4MUQ5CiNkZWZpbmUgRUZVU0VfQ09OVEVOVF9CVUZGRVJfU0laRQkJICAoRUZVU0VfQ09OVEVOVF9CVUZGRVJfRU5EIC0gRUZVU0VfQ09OVEVOVF9CVUZGRVJfU1RBUlQgKyAxKQoKLyogRm9yIE1UNjYzMiAqLwojZGVmaW5lIEVGVVNFX0NPTlRFTlRfU0laRQkJCTE2CgojZGVmaW5lIEVGVVNFX0JMT0NLX1NJWkUgMTYKI2RlZmluZSBFRVBST01fU0laRSAxMTg0CiNkZWZpbmUgTUFYX0VFUFJPTV9CVUZGRVJfU0laRQkxMjAwCiNlbmRpZiAvKiBDRkdfU1VQUE9SVF9CVUZGRVJfTU9ERSAqLwoKI2lmIENGR19TVVBQT1JUX1RYX0JGCiNkZWZpbmUgVFhCRl9DTURfTkVFRF9UT19SRVNQT05TRSh1NFR4QmZDbWRJZCkgKHU0VHhCZkNtZElkID09IEJGX1BGTVVfVEFHX1JFQUQgfHwgXAoJCQkJCQl1NFR4QmZDbWRJZCA9PSBCRl9QUk9GSUxFX1JFQUQpCiNlbmRpZiAvKiBDRkdfU1VQUE9SVF9UWF9CRiAqLwojZGVmaW5lIE1VX0NNRF9ORUVEX1RPX1JFU1BPTlNFKHU0TXVDbWRJZCkgKHU0TXVDbWRJZCA9PSBNVV9HRVRfQ0FMQ19JTklUX01DUyB8fCBcCgkJCQkJICAgIHU0TXVDbWRJZCA9PSBNVV9IUUFfR0VUX1FEIHx8IFwKCQkJCQkgICAgdTRNdUNtZElkID09IE1VX0hRQV9HRVRfQ0FMQ19MUSkKI2lmIENGR19TVVBQT1JUX01VX01JTU8KLyogQE5JVEVTSDogTUFDUk9TIEZvciBJbml0IE1DUyBjYWxjdWxhdGlvbiAoTVUgTWV0cmljIFRhYmxlKSAqLwojZGVmaW5lIE5VTV9NVVRfRkVDICAgICAgICAgICAgIDIKI2RlZmluZSBOVU1fTVVUX01DUyAgICAgICAgICAgICAxMAojZGVmaW5lIE5VTV9NVVRfTlJfTlVNICAgICAgICAgIDMKI2RlZmluZSBOVU1fTVVUX0lOREVYICAgICAgICAgICA4CgojZGVmaW5lIE5VTV9PRl9VU0VSICAgICAgICAgICAgIDIKI2RlZmluZSBOVU1fT0ZfTU9EVUwgICAgICAgICAgICA1CiNlbmRpZiAvKiBDRkdfU1VQUE9SVF9NVV9NSU1PICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEIEEgVCBBICAgVCBZIFAgRSBTCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiovCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qIFBhcmFtZXRlcnMgb2YgVXNlciBDb25maWd1cmF0aW9uIHdoaWNoIG1hdGNoIHRvIE5ESVM1LjEgICAgICAgICAgICAgICAgICAgICovCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qIE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUgKi8KdHlwZWRlZiBlbnVtIF9FTlVNX1BBUkFNX0FVVEhfTU9ERV9UIHsKCUFVVEhfTU9ERV9PUEVOLAkJLyohPCBPcGVuIHN5c3RlbSAqLwoJQVVUSF9NT0RFX1NIQVJFRCwJLyohPCBTaGFyZWQga2V5ICovCglBVVRIX01PREVfQVVUT19TV0lUQ0gsCS8qITwgRWl0aGVyIG9wZW4gc3lzdGVtIG9yIHNoYXJlZCBrZXkgKi8KCUFVVEhfTU9ERV9XUEEsCglBVVRIX01PREVfV1BBX1BTSywKCUFVVEhfTU9ERV9XUEFfTk9ORSwJLyohPCBGb3IgQWQgaG9jICovCglBVVRIX01PREVfV1BBMiwKCUFVVEhfTU9ERV9XUEEyX1BTSywKCUFVVEhfTU9ERV9OVU0JCS8qITwgVXBwZXIgYm91bmQsIG5vdCByZWFsIGNhc2UgKi8KfSBFTlVNX1BBUkFNX0FVVEhfTU9ERV9ULCAqUF9FTlVNX1BBUkFNX0FVVEhfTU9ERV9UOwoKLyogTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMgKi8vKiBFbmNyeXB0aW9uIHR5cGVzICovCnR5cGVkZWYgZW51bSBfRU5VTV9XRVBfU1RBVFVTX1QgewoJRU5VTV9XRVBfRU5BQkxFRCwKCUVOVU1fRU5DUllQVElPTjFfRU5BQkxFRCA9IEVOVU1fV0VQX0VOQUJMRUQsCglFTlVNX1dFUF9ESVNBQkxFRCwKCUVOVU1fRU5DUllQVElPTl9ESVNBQkxFRCA9IEVOVU1fV0VQX0RJU0FCTEVELAoJRU5VTV9XRVBfS0VZX0FCU0VOVCwKCUVOVU1fRU5DUllQVElPTjFfS0VZX0FCU0VOVCA9IEVOVU1fV0VQX0tFWV9BQlNFTlQsCglFTlVNX1dFUF9OT1RfU1VQUE9SVEVELAoJRU5VTV9FTkNSWVBUSU9OX05PVF9TVVBQT1JURUQgPSBFTlVNX1dFUF9OT1RfU1VQUE9SVEVELAoJRU5VTV9FTkNSWVBUSU9OMl9FTkFCTEVELAoJRU5VTV9FTkNSWVBUSU9OMl9LRVlfQUJTRU5ULAoJRU5VTV9FTkNSWVBUSU9OM19FTkFCTEVELAoJRU5VTV9FTkNSWVBUSU9OM19LRVlfQUJTRU5UCn0gRU5VTV9QQVJBTV9FTkNSWVBUSU9OX1NUQVRVU19ULCAqUF9FTlVNX1BBUkFNX0VOQ1JZUFRJT05fU1RBVFVTX1Q7Cgp0eXBlZGVmIFVJTlRfOCBQQVJBTV9NQUNfQUREUkVTU1tQQVJBTV9NQUNfQUREUl9MRU5dOwoKdHlwZWRlZiBVSU5UXzMyIFBBUkFNX0tFWV9JTkRFWDsKdHlwZWRlZiBVSU5UXzY0IFBBUkFNX0tFWV9SU0M7CnR5cGVkZWYgSU5UXzMyIFBBUkFNX1JTU0k7Cgp0eXBlZGVmIFVJTlRfMzIgUEFSQU1fRlJBR01FTlRBVElPTl9USFJFU0hPTEQ7CnR5cGVkZWYgVUlOVF8zMiBQQVJBTV9SVFNfVEhSRVNIT0xEOwoKdHlwZWRlZiBVSU5UXzggUEFSQU1fUkFURVNbUEFSQU1fTUFYX0xFTl9SQVRFU107CnR5cGVkZWYgVUlOVF84IFBBUkFNX1JBVEVTX0VYW1BBUkFNX01BWF9MRU5fUkFURVNfRVhdOwoKdHlwZWRlZiBlbnVtIF9FTlVNX1BBUkFNX1BIWV9UWVBFX1QgewoJUEhZX1RZUEVfODAyXzExQUJHID0gMCwJLyohPCBDYW4gYXNzb2NpYXRlZCB3aXRoIDgwMi4xMWFiZyBBUCwKCQkJCSogU2NhbiBkdWFsIGJhbmQuCgkJCQkqLwoJUEhZX1RZUEVfODAyXzExQkcsCS8qITwgQ2FuIGFzc29jaWF0ZWQgd2l0aCA4MDJfMTFiZyBBUCwKCQkJCSogIFNjYW4gc2luZ2xlIGJhbmQgYW5kIG5vdCByZXBvcnQgODAyXzExYSBCU1NzLgoJCQkJKi8KCVBIWV9UWVBFXzgwMl8xMUcsCS8qITwgQ2FuIGFzc29jaWF0ZWQgd2l0aCA4MDJfMTFnIG9ubHkgQVAsCgkJCQkqIFNjYW4gc2luZ2xlIGJhbmQgYW5kIG5vdCByZXBvcnQgODAyXzExYWIgQlNTcy4KCQkJCSovCglQSFlfVFlQRV84MDJfMTFBLAkvKiE8IENhbiBhc3NvY2lhdGVkIHdpdGggODAyXzExYSBvbmx5IEFQLAoJCQkJKiBTY2FuIHNpbmdsZSBiYW5kIGFuZCBub3QgcmVwb3J0IDgwMl8xMWJnIEJTU3MuCgkJCQkqLwoJUEhZX1RZUEVfODAyXzExQiwJLyohPCBDYW4gYXNzb2NpYXRlZCB3aXRoIDgwMl8xMWIgb25seSBBUAoJCQkJKiBTY2FuIHNpbmdsZSBiYW5kIGFuZCBub3QgcmVwb3J0IDgwMl8xMWFnIEJTU3MuCgkJCQkqLwoJUEhZX1RZUEVfTlVNCQkvKiA1ICovCn0gRU5VTV9QQVJBTV9QSFlfVFlQRV9ULCAqUF9FTlVNX1BBUkFNX1BIWV9UWVBFX1Q7Cgp0eXBlZGVmIGVudW0gX0VOVU1fUEFSQU1fT1BfTU9ERV9UIHsKCU5FVF9UWVBFX0lCU1MgPSAwLAkvKiE8IFRyeSB0byBtZXJnZS9lc3RhYmxpc2ggYW4gQWRIb2MsIGRvIHBlcmlvZGljIFNDQU4gZm9yIG1lcmdpbmcuICovCglORVRfVFlQRV9JTkZSQSwJCS8qITwgVHJ5IHRvIGpvaW4gYW4gSW5mcmFzdHJ1Y3R1cmUsIGRvIHBlcmlvZGljIFNDQU4gZm9yIGpvaW5pbmcuICovCglORVRfVFlQRV9BVVRPX1NXSVRDSCwJLyohPCBUcnkgdG8gam9pbiBhbiBJbmZyYXN0cnVjdHVyZSwgaWYgZmFpbCB0aGVuIHRyeSB0byBtZXJnZSBvciAqLwoJCQkJLyogIGVzdGFibGlzaCBhbiBBZEhvYywgZG8gcGVyaW9kaWMgU0NBTiBmb3Igam9pbmluZyBvciBtZXJnaW5nLiAqLwoJTkVUX1RZUEVfREVESUNBVEVEX0lCU1MsCS8qITwgVHJ5IHRvIG1lcmdlIGFuIEFkSG9jIGZpcnN0LCAqLwoJCQkJCS8qIGlmIGZhaWwgdGhlbiBlc3RhYmxpc2ggQWRIb2MgcGVybWFuZW50bHksIG5vIG1vcmUgU0NBTi4gKi8KCU5FVF9UWVBFX05VTQkJLyogNCAqLwp9IEVOVU1fUEFSQU1fT1BfTU9ERV9ULCAqUF9FTlVNX1BBUkFNX09QX01PREVfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9TU0lEX1QgewoJVUlOVF8zMiB1NFNzaWRMZW47CS8qITwgU1NJRCBsZW5ndGggaW4gYnl0ZXMuIFplcm8gbGVuZ3RoIGlzIGJyb2FkY2FzdChhbnkpIFNTSUQgKi8KCVVJTlRfOCBhdWNTc2lkW1BBUkFNX01BWF9MRU5fU1NJRF07Cn0gUEFSQU1fU1NJRF9ULCAqUF9QQVJBTV9TU0lEX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ09OTkVDVF9UIHsKCVVJTlRfMzIgdTRTc2lkTGVuOwkvKiE8IFNTSUQgbGVuZ3RoIGluIGJ5dGVzLiBaZXJvIGxlbmd0aCBpcyBicm9hZGNhc3QoYW55KSBTU0lEICovCglVSU5UXzggKnB1Y1NzaWQ7CglVSU5UXzggKnB1Y0Jzc2lkOwoJVUlOVF8zMiB1NENlbnRlckZyZXE7Cn0gUEFSQU1fQ09OTkVDVF9ULCAqUF9QQVJBTV9DT05ORUNUX1Q7CgovKiBUaGlzIGlzIGVudW0gZGVmaW5lZCBmb3IgdXNlciB0byBzZWxlY3QgYW4gQWRIb2MgTW9kZSAqLwp0eXBlZGVmIGVudW0gX0VOVU1fUEFSQU1fQURfSE9DX01PREVfVCB7CglBRF9IT0NfTU9ERV8xMUIgPSAwLAkvKiE8IENyZWF0ZSAxMWIgSUJTUyBpZiB3ZSBzdXBwb3J0IDgwMi4xMWFiZy84MDIuMTFiZy4gKi8KCUFEX0hPQ19NT0RFX01JWEVEXzExQkcsCS8qITwgQ3JlYXRlIDExYmcgbWl4ZWQgSUJTUyBpZiB3ZSBzdXBwb3J0IDgwMi4xMWFiZy84MDIuMTFiZy84MDIuMTFnLiAqLwoJQURfSE9DX01PREVfMTFHLAkvKiE8IENyZWF0ZSAxMWcgb25seSBJQlNTIGlmIHdlIHN1cHBvcnQgODAyLjExYWJnLzgwMi4xMWJnLzgwMi4xMWcuICovCglBRF9IT0NfTU9ERV8xMUEsCS8qITwgQ3JlYXRlIDExYSBvbmx5IElCU1MgaWYgd2Ugc3VwcG9ydCA4MDIuMTFhYmcuICovCglBRF9IT0NfTU9ERV9OVU0JCS8qIDQgKi8KfSBFTlVNX1BBUkFNX0FEX0hPQ19NT0RFX1QsICpQX0VOVU1fUEFSQU1fQURfSE9DX01PREVfVDsKCnR5cGVkZWYgZW51bSBfRU5VTV9QQVJBTV9NRURJQV9TVEFURV9UIHsKCVBBUkFNX01FRElBX1NUQVRFX0NPTk5FQ1RFRCwKCVBBUkFNX01FRElBX1NUQVRFX0RJU0NPTk5FQ1RFRCwKCVBBUkFNX01FRElBX1NUQVRFX1RPX0JFX0lORElDQVRFRAkvKiBmb3IgZm9sbG93aW5nIE1TRE4gcmUtYXNzb2NpYXRpb24gYmVoYXZpb3IgKi8KfSBFTlVNX1BBUkFNX01FRElBX1NUQVRFX1QsICpQX0VOVU1fUEFSQU1fTUVESUFfU1RBVEVfVDsKCnR5cGVkZWYgZW51bSBfRU5VTV9QQVJBTV9ORVRXT1JLX1RZUEVfVCB7CglQQVJBTV9ORVRXT1JLX1RZUEVfRkgsCglQQVJBTV9ORVRXT1JLX1RZUEVfRFMsCglQQVJBTV9ORVRXT1JLX1RZUEVfT0ZETTUsCglQQVJBTV9ORVRXT1JLX1RZUEVfT0ZETTI0LAoJUEFSQU1fTkVUV09SS19UWVBFX0FVVE9NT0RFLAoJUEFSQU1fTkVUV09SS19UWVBFX05VTQkvKiE8IFVwcGVyIGJvdW5kLCBub3QgcmVhbCBjYXNlICovCn0gRU5VTV9QQVJBTV9ORVRXT1JLX1RZUEVfVCwgKlBfRU5VTV9QQVJBTV9ORVRXT1JLX1RZUEVfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9ORVRXT1JLX1RZUEVfTElTVCB7CglVSU5UXzMyIE51bWJlck9mSXRlbXM7CS8qITwgQXQgbGVhc3QgMSAqLwoJRU5VTV9QQVJBTV9ORVRXT1JLX1RZUEVfVCBlTmV0d29ya1R5cGVbMV07Cn0gUEFSQU1fTkVUV09SS19UWVBFX0xJU1QsICpQUEFSQU1fTkVUV09SS19UWVBFX0xJU1Q7Cgp0eXBlZGVmIGVudW0gX0VOVU1fUEFSQU1fUFJJVkFDWV9GSUxURVJfVCB7CglQUklWQUNZX0ZJTFRFUl9BQ0NFUFRfQUxMLAoJUFJJVkFDWV9GSUxURVJfODAyMXhXRVAsCglQUklWQUNZX0ZJTFRFUl9OVU0KfSBFTlVNX1BBUkFNX1BSSVZBQ1lfRklMVEVSX1QsICpQX0VOVU1fUEFSQU1fUFJJVkFDWV9GSUxURVJfVDsKCnR5cGVkZWYgZW51bSBfRU5VTV9SRUxPQURfREVGQVVMVFMgewoJRU5VTV9SRUxPQURfV0VQX0tFWVMKfSBQQVJBTV9SRUxPQURfREVGQVVMVFMsICpQX1BBUkFNX1JFTE9BRF9ERUZBVUxUUzsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9QTV9QQUNLRVRfUEFUVEVSTiB7CglVSU5UXzMyIFByaW9yaXR5OwkvKiBJbXBvcnRhbmNlIG9mIHRoZSBnaXZlbiBwYXR0ZXJuLiAqLwoJVUlOVF8zMiBSZXNlcnZlZDsJLyogQ29udGV4dCBpbmZvcm1hdGlvbiBmb3IgdHJhbnNwb3J0cy4gKi8KCVVJTlRfMzIgTWFza1NpemU7CS8qIFNpemUgaW4gYnl0ZXMgb2YgdGhlIHBhdHRlcm4gbWFzay4gKi8KCVVJTlRfMzIgUGF0dGVybk9mZnNldDsJLyogT2Zmc2V0IGZyb20gYmVnaW5uaW5nIG9mIHRoaXMgKi8KCS8qIHN0cnVjdHVyZSB0byB0aGUgcGF0dGVybiBieXRlcy4gKi8KCVVJTlRfMzIgUGF0dGVyblNpemU7CS8qIFNpemUgaW4gYnl0ZXMgb2YgdGhlIHBhdHRlcm4uICovCglVSU5UXzMyIFBhdHRlcm5GbGFnczsJLyogRmxhZ3MgKFRCRCkuICovCn0gUEFSQU1fUE1fUEFDS0VUX1BBVFRFUk4sICpQX1BBUkFNX1BNX1BBQ0tFVF9QQVRURVJOOwoKCi8qIENvbWJpbmUgdWNUcFRlc3RNb2RlIGFuZCB1Y1NpZ21hVGVzdE1vZGUgaW4gb25lIGZsYWcgKi8KLyogdWNUcFRlc3RNb2RlID09IDAsIGZvciBub3JtYWwgZHJpdmVyICovCi8qIHVjVHBUZXN0TW9kZSA9PSAxLCBmb3IgcHVyZSB0aHJvdWdocHV0IHRlc3QgbW9kZSAoZXg6IFJ2UikgKi8KLyogdWNUcFRlc3RNb2RlID09IDIsIGZvciBzaWdtYSBUR24vVEdhYy9QTUYgKi8KLyogdWNUcFRlc3RNb2RlID09IDMsIGZvciBzaWdtYSBXTU0gUFMgKi8KdHlwZWRlZiBlbnVtIF9FTlVNX1RQX1RFU1RfTU9ERV9UIHsKCUVOVU1fVFBfVEVTVF9NT0RFX05PUk1BTCA9IDAsCglFTlVNX1RQX1RFU1RfTU9ERV9USFJPVUdIUFVULAoJRU5VTV9UUF9URVNUX01PREVfU0lHTUFfQUNfTl9QTUYsCglFTlVNX1RQX1RFU1RfTU9ERV9TSUdNQV9XTU1fUFMsCglFTlVNX1RQX1RFU1RfTU9ERV9OVU0KfSBFTlVNX1RQX1RFU1RfTU9ERV9ULCAqUF9FTlVNX1RQX1RFU1RfTU9ERV9UOwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qISBcYnJpZWYgU3RydWN0IGRlZmluaXRpb24gdG8gaW5kaWNhdGUgc3BlY2lmaWMgZXZlbnQuICAgICAgICAgICAgICAgICovCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwp0eXBlZGVmIGVudW0gX0VOVU1fU1RBVFVTX1RZUEVfVCB7CglFTlVNX1NUQVRVU19UWVBFX0FVVEhFTlRJQ0FUSU9OLAoJRU5VTV9TVEFUVVNfVFlQRV9NRURJQV9TVFJFQU1fTU9ERSwKCUVOVU1fU1RBVFVTX1RZUEVfQ0FORElEQVRFX0xJU1QsCglFTlVNX1NUQVRVU19UWVBFX05VTQkvKiE8IFVwcGVyIGJvdW5kLCBub3QgcmVhbCBjYXNlICovCn0gRU5VTV9TVEFUVVNfVFlQRV9ULCAqUF9FTlVNX1NUQVRVU19UWVBFX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fODAyXzExX0NPTkZJR19GSF9UIHsKCVVJTlRfMzIgdTRMZW5ndGg7CS8qITwgTGVuZ3RoIG9mIHN0cnVjdHVyZSAqLwoJVUlOVF8zMiB1NEhvcFBhdHRlcm47CS8qITwgRGVmaW5lZCBhcyA4MDIuMTEgKi8KCVVJTlRfMzIgdTRIb3BTZXQ7CS8qITwgdG8gb25lIGlmIG5vbi04MDIuMTEgKi8KCVVJTlRfMzIgdTREd2VsbFRpbWU7CS8qITwgSW4gdW5pdCBvZiBLdXNlYyAqLwp9IFBBUkFNXzgwMl8xMV9DT05GSUdfRkhfVCwgKlBfUEFSQU1fODAyXzExX0NPTkZJR19GSF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNXzgwMl8xMV9DT05GSUdfVCB7CglVSU5UXzMyIHU0TGVuZ3RoOwkvKiE8IExlbmd0aCBvZiBzdHJ1Y3R1cmUgKi8KCVVJTlRfMzIgdTRCZWFjb25QZXJpb2Q7CS8qITwgSW4gdW5pdCBvZiBLdXNlYyAqLwoJVUlOVF8zMiB1NEFUSU1XaW5kb3c7CS8qITwgSW4gdW5pdCBvZiBLdXNlYyAqLwoJVUlOVF8zMiB1NERTQ29uZmlnOwkvKiE8IENoYW5uZWwgZnJlcXVlbmN5IGluIHVuaXQgb2Yga0h6ICovCglQQVJBTV84MDJfMTFfQ09ORklHX0ZIX1QgckZIQ29uZmlnOwp9IFBBUkFNXzgwMl8xMV9DT05GSUdfVCwgKlBfUEFSQU1fODAyXzExX0NPTkZJR19UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1NUQVRVU19JTkRJQ0FUSU9OX1QgewoJRU5VTV9TVEFUVVNfVFlQRV9UIGVTdGF0dXNUeXBlOwp9IFBBUkFNX1NUQVRVU19JTkRJQ0FUSU9OX1QsICpQX1BBUkFNX1NUQVRVU19JTkRJQ0FUSU9OX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQVVUSF9SRVFVRVNUX1QgewoJVUlOVF8zMiB1NExlbmd0aDsJLyohPCBMZW5ndGggb2YgdGhpcyBzdHJ1Y3QgKi8KCVBBUkFNX01BQ19BRERSRVNTIGFyQnNzaWQ7CglVSU5UXzMyIHU0RmxhZ3M7CS8qITwgRGVmaW5pdGlvbnMgYXJlIGFzIGZvbGxvd3MgKi8KfSBQQVJBTV9BVVRIX1JFUVVFU1RfVCwgKlBfUEFSQU1fQVVUSF9SRVFVRVNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQVVUSF9FVkVOVF9UIHsKCVBBUkFNX1NUQVRVU19JTkRJQ0FUSU9OX1QgclN0YXR1czsKCVBBUkFNX0FVVEhfUkVRVUVTVF9UIGFyUmVxdWVzdFsxXTsKfSBQQVJBTV9BVVRIX0VWRU5UX1QsICpQX1BBUkFNX0FVVEhfRVZFTlRfVDsKCi8qISBcYnJpZWYgQ2FwYWJpbGl0aWVzLCBwcml2YWN5LCByc3NpIGFuZCBJRXMgb2YgZWFjaCBCU1NJRCAqLwp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQlNTSURfRVhfVCB7CglVSU5UXzMyIHU0TGVuZ3RoOwkvKiE8IExlbmd0aCBvZiBzdHJ1Y3R1cmUgKi8KCVBBUkFNX01BQ19BRERSRVNTIGFyTWFjQWRkcmVzczsJLyohPCBCU1NJRCAqLwoJVUlOVF84IFJlc2VydmVkWzJdOwoJUEFSQU1fU1NJRF9UIHJTc2lkOwkvKiE8IFNTSUQgKi8KCVVJTlRfMzIgdTRQcml2YWN5OwkvKiE8IE5lZWQgV0VQIGVuY3J5cHRpb24gKi8KCVBBUkFNX1JTU0kgclJzc2k7CS8qITwgaW4gZEJtICovCglFTlVNX1BBUkFNX05FVFdPUktfVFlQRV9UIGVOZXR3b3JrVHlwZUluVXNlOwoJUEFSQU1fODAyXzExX0NPTkZJR19UIHJDb25maWd1cmF0aW9uOwoJRU5VTV9QQVJBTV9PUF9NT0RFX1QgZU9wTW9kZTsKCVBBUkFNX1JBVEVTX0VYIHJTdXBwb3J0ZWRSYXRlczsKCVVJTlRfMzIgdTRJRUxlbmd0aDsKCVVJTlRfOCBhdWNJRXNbMV07Cn0gUEFSQU1fQlNTSURfRVhfVCwgKlBfUEFSQU1fQlNTSURfRVhfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9CU1NJRF9MSVNUX0VYIHsKCVVJTlRfMzIgdTROdW1iZXJPZkl0ZW1zOwkvKiE8IGF0IGxlYXN0IDEgKi8KCVBBUkFNX0JTU0lEX0VYX1QgYXJCc3NpZFsxXTsKfSBQQVJBTV9CU1NJRF9MSVNUX0VYX1QsICpQX1BBUkFNX0JTU0lEX0xJU1RfRVhfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9XRVBfVCB7CglVSU5UXzMyIHU0TGVuZ3RoOwkvKiE8IExlbmd0aCBvZiBzdHJ1Y3R1cmUgKi8KCVVJTlRfMzIgdTRLZXlJbmRleDsJLyohPCAwOiBwYWlyd2lzZSBrZXksIG90aGVycyBncm91cCBrZXlzICovCglVSU5UXzMyIHU0S2V5TGVuZ3RoOwkvKiE8IEtleSBsZW5ndGggaW4gYnl0ZXMgKi8KCVVJTlRfOCBhdWNLZXlNYXRlcmlhbFszMl07CS8qITwgS2V5IGNvbnRlbnQgYnkgYWJvdmUgc2V0dGluZyAqLwp9IFBBUkFNX1dFUF9ULCAqUF9QQVJBTV9XRVBfVDsKCi8qISBcYnJpZWYgS2V5IG1hcHBpbmcgb2YgQlNTSUQgKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0tFWV9UIHsKCVVJTlRfMzIgdTRMZW5ndGg7CS8qITwgTGVuZ3RoIG9mIHN0cnVjdHVyZSAqLwoJVUlOVF8zMiB1NEtleUluZGV4OwkvKiE8IEtleUlEICovCglVSU5UXzMyIHU0S2V5TGVuZ3RoOwkvKiE8IEtleSBsZW5ndGggaW4gYnl0ZXMgKi8KCVBBUkFNX01BQ19BRERSRVNTIGFyQlNTSUQ7CS8qITwgTUFDIGFkZHJlc3MgKi8KCVBBUkFNX0tFWV9SU0MgcktleVJTQzsKCVVJTlRfOCB1Y0Jzc0lkeDsKCVVJTlRfOCB1Y0NpcGhlcjsKCVVJTlRfOCBhdWNLZXlNYXRlcmlhbFszMl07CS8qITwgS2V5IGNvbnRlbnQgYnkgYWJvdmUgc2V0dGluZyAqLwoJLyogRm9sbG93aW5nIGFkZCB0byBjaGFuZ2UgdGhlIG9yaWdpbmFsIHdpbmRvd3Mgc3RydWN0dXJlICovCn0gUEFSQU1fS0VZX1QsICpQX1BBUkFNX0tFWV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1JFTU9WRV9LRVlfVCB7CglVSU5UXzMyIHU0TGVuZ3RoOwkvKiE8IExlbmd0aCBvZiBzdHJ1Y3R1cmUgKi8KCVVJTlRfMzIgdTRLZXlJbmRleDsJLyohPCBLZXlJRCAqLwoJUEFSQU1fTUFDX0FERFJFU1MgYXJCU1NJRDsJLyohPCBNQUMgYWRkcmVzcyAqLwoJVUlOVF84IHVjQnNzSWR4Owp9IFBBUkFNX1JFTU9WRV9LRVlfVCwgKlBfUEFSQU1fUkVNT1ZFX0tFWV9UOwoKLyohIFxicmllZiBEZWZhdWx0IGtleSAqLwp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fREVGQVVMVF9LRVlfVCB7CglVSU5UXzggdWNLZXlJRDsKCVVJTlRfOCB1Y1VuaWNhc3Q7CglVSU5UXzggdWNNdWx0aWNhc3Q7CglVSU5UXzggdWNCc3NJZHg7Cn0gUEFSQU1fREVGQVVMVF9LRVlfVCwgKlBfUEFSQU1fREVGQVVMVF9LRVlfVDsKCiNpZiBDRkdfU1VQUE9SVF9XQVBJCnR5cGVkZWYgZW51bSBfRU5VTV9LRVlfVFlQRSB7CglFTlVNX1dQSV9QQUlSV0lTRV9LRVkgPSAwLAoJRU5VTV9XUElfR1JPVVBfS0VZCn0gRU5VTV9LRVlfVFlQRTsKCnR5cGVkZWYgZW51bSBfRU5VTV9XUElfUFJPVEVDVF9UWVBFIHsKCUVOVU1fV1BJX05PTkUsCglFTlVNX1dQSV9SWCwKCUVOVU1fV1BJX1RYLAoJRU5VTV9XUElfUlhfVFgKfSBFTlVNX1dQSV9QUk9URUNUX1RZUEU7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fV1BJX0tFWV9UIHsKCUVOVU1fS0VZX1RZUEUgZUtleVR5cGU7CglFTlVNX1dQSV9QUk9URUNUX1RZUEUgZURpcmVjdGlvbjsKCVVJTlRfOCB1Y0tleUlEOwoJVUlOVF84IGF1Y1JzdlszXTsKCVVJTlRfOCBhdWNBZGRySW5kZXhbMTJdOwoJVUlOVF8zMiB1NExlbldQSUVLOwoJVUlOVF84IGF1Y1dQSUVLWzI1Nl07CglVSU5UXzMyIHU0TGVuV1BJQ0s7CglVSU5UXzggYXVjV1BJQ0tbMjU2XTsKCVVJTlRfOCBhdWNQTlsxNl07Cn0gUEFSQU1fV1BJX0tFWV9ULCAqUF9QQVJBTV9XUElfS0VZX1Q7CiNlbmRpZgoKdHlwZWRlZiBlbnVtIF9QQVJBTV9QT1dFUl9NT0RFIHsKCVBhcmFtX1Bvd2VyTW9kZUNBTSwKCVBhcmFtX1Bvd2VyTW9kZU1BWF9QU1AsCglQYXJhbV9Qb3dlck1vZGVGYXN0X1BTUCwKCVBhcmFtX1Bvd2VyTW9kZU1heAkvKiBVcHBlciBib3VuZCwgbm90IHJlYWwgY2FzZSAqLwp9IFBBUkFNX1BPV0VSX01PREUsICpQUEFSQU1fUE9XRVJfTU9ERTsKCnR5cGVkZWYgZW51bSBfUEFSQU1fREVWSUNFX1BPV0VSX1NUQVRFIHsKCVBhcmFtRGV2aWNlU3RhdGVVbnNwZWNpZmllZCA9IDAsCglQYXJhbURldmljZVN0YXRlRDAsCglQYXJhbURldmljZVN0YXRlRDEsCglQYXJhbURldmljZVN0YXRlRDIsCglQYXJhbURldmljZVN0YXRlRDMsCglQYXJhbURldmljZVN0YXRlTWF4aW11bQp9IFBBUkFNX0RFVklDRV9QT1dFUl9TVEFURSwgKlBQQVJBTV9ERVZJQ0VfUE9XRVJfU1RBVEU7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fUE9XRVJfTU9ERV9UIHsKCVVJTlRfOCB1Y0Jzc0lkeDsKCVBBUkFNX1BPV0VSX01PREUgZVBvd2VyTW9kZTsKfSBQQVJBTV9QT1dFUl9NT0RFX1QsICpQX1BBUkFNX1BPV0VSX01PREVfVDsKCiNpZiBDRkdfU1VQUE9SVF84MDJfMTFECgovKiEgXGJyaWVmIFRoZSBlbnVtZXJhdGlvbiBkZWZpbml0aW9ucyBmb3IgT0lEX0lQTl9NVUxUSV9ET01BSU5fQ0FQQUJJTElUWSAqLwp0eXBlZGVmIGVudW0gX1BBUkFNX01VTFRJX0RPTUFJTl9DQVBBQklMSVRZIHsKCVBhcmFtTXVsdGlEb21haW5DYXBEaXNhYmxlZCwKCVBhcmFtTXVsdGlEb21haW5DYXBFbmFibGVkCn0gUEFSQU1fTVVMVElfRE9NQUlOX0NBUEFCSUxJVFksICpQX1BBUkFNX01VTFRJX0RPTUFJTl9DQVBBQklMSVRZOwojZW5kaWYKCnR5cGVkZWYgc3RydWN0IF9DT1VOVFJZX1NUUklOR19FTlRSWSB7CglVSU5UXzggYXVjQ291bnRyeUNvZGVbMl07CglVSU5UXzggYXVjRW52aXJvbm1lbnRDb2RlWzJdOwp9IENPVU5UUllfU1RSSU5HX0VOVFJZLCAqUF9DT1VOVFJZX1NUUklOR19FTlRSWTsKCi8qIFBvd2VyIG1hbmFnZW1lbnQgcmVsYXRlZCBkZWZpbml0aW9uIGFuZCBlbnVtZXJhdGlvbnMgKi8KI2RlZmluZSBVQVBTRF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAojZGVmaW5lIFVBUFNEX0FDMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQklUKDApIHwgQklUKDQpKQojZGVmaW5lIFVBUFNEX0FDMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQklUKDEpIHwgQklUKDUpKQojZGVmaW5lIFVBUFNEX0FDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQklUKDIpIHwgQklUKDYpKQojZGVmaW5lIFVBUFNEX0FDMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQklUKDMpIHwgQklUKDcpKQojZGVmaW5lIFVBUFNEX0FMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUFQU0RfQUMwIHwgVUFQU0RfQUMxIHwgVUFQU0RfQUMyIHwgVUFQU0RfQUMzKQoKdHlwZWRlZiBlbnVtIF9FTlVNX1BPV0VSX1NBVkVfUFJPRklMRV9UIHsKCUVOVU1fUFNQX0NPTlRJTlVPVVNfQUNUSVZFID0gMCwKCUVOVU1fUFNQX0NPTlRJTlVPVVNfUE9XRVJfU0FWRSwKCUVOVU1fUFNQX0ZBU1RfU1dJVENILAoJRU5VTV9QU1BfTlVNCn0gRU5VTV9QT1dFUl9TQVZFX1BST0ZJTEVfVCwgKlBFTlVNX1BPV0VSX1NBVkVfUFJPRklMRV9UOwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qISBcYnJpZWYgU2V0L1F1ZXJ5IHRlc3RpbmcgdHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNXzgwMl8xMV9URVNUX1QgewoJVUlOVF8zMiB1NExlbmd0aDsKCVVJTlRfMzIgdTRUeXBlOwoJdW5pb24gewoJCVBBUkFNX0FVVEhfRVZFTlRfVCBBdXRoZW50aWNhdGlvbkV2ZW50OwoJCVBBUkFNX1JTU0kgUnNzaVRyaWdnZXI7Cgl9IHU7Cn0gUEFSQU1fODAyXzExX1RFU1RfVCwgKlBfUEFSQU1fODAyXzExX1RFU1RfVDsKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiEgXGJyaWVmIFNldC9RdWVyeSBhdXRoZW50aWNhdGlvbiBhbmQgZW5jcnlwdGlvbiBjYXBhYmlsaXR5LiAgKi8KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9BVVRIX0VOQ1JZUFRJT05fVCB7CglFTlVNX1BBUkFNX0FVVEhfTU9ERV9UIGVBdXRoTW9kZVN1cHBvcnRlZDsKCUVOVU1fUEFSQU1fRU5DUllQVElPTl9TVEFUVVNfVCBlRW5jcnlwdFN0YXR1c1N1cHBvcnRlZDsKfSBQQVJBTV9BVVRIX0VOQ1JZUFRJT05fVCwgKlBfUEFSQU1fQVVUSF9FTkNSWVBUSU9OX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ0FQQUJJTElUWV9UIHsKCVVJTlRfMzIgdTRMZW5ndGg7CglVSU5UXzMyIHU0VmVyc2lvbjsKCVVJTlRfMzIgdTROb09mUE1LSURzOwoJVUlOVF8zMiB1NE5vT2ZBdXRoRW5jcnlwdFBhaXJzU3VwcG9ydGVkOwoJUEFSQU1fQVVUSF9FTkNSWVBUSU9OX1QgYXJBdXRoZW50aWNhdGlvbkVuY3J5cHRpb25TdXBwb3J0ZWRbMV07Cn0gUEFSQU1fQ0FQQUJJTElUWV9ULCAqUF9QQVJBTV9DQVBBQklMSVRZX1Q7Cgp0eXBlZGVmIFVJTlRfOCBQQVJBTV9QTUtJRF9WQUxVRVsxNl07Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQlNTSURfSU5GT19UIHsKCVBBUkFNX01BQ19BRERSRVNTIGFyQlNTSUQ7CglQQVJBTV9QTUtJRF9WQUxVRSBhclBNS0lEOwp9IFBBUkFNX0JTU0lEX0lORk9fVCwgKlBfUEFSQU1fQlNTSURfSU5GT19UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1BNS0lEX1QgewoJVUlOVF8zMiB1NExlbmd0aDsKCVVJTlRfMzIgdTRCU1NJREluZm9Db3VudDsKCVBBUkFNX0JTU0lEX0lORk9fVCBhckJTU0lESW5mb1sxXTsKfSBQQVJBTV9QTUtJRF9ULCAqUF9QQVJBTV9QTUtJRF9UOwoKLyohIFxicmllZiBQTUtJRCBjYW5kaWRhdGUgbGlzdHMuICovCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9QTUtJRF9DQU5ESURBVEVfVCB7CglQQVJBTV9NQUNfQUREUkVTUyBhckJTU0lEOwoJVUlOVF8zMiB1NEZsYWdzOwp9IFBBUkFNX1BNS0lEX0NBTkRJREFURV9ULCAqUF9QQVJBTV9QTUtJRF9DQU5ESURBVEVfVDsKCi8qICNpZmRlZiBMSU5VWCAqLwp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fUE1LSURfQ0FORElEQVRFX0xJU1RfVCB7CglVSU5UXzMyIHU0VmVyc2lvbjsJLyohPCBWZXJzaW9uICovCglVSU5UXzMyIHU0TnVtQ2FuZGlkYXRlczsJLyohPCBIb3cgbWFueSBjYW5kaWRhdGVzIGZvbGxvdyAqLwoJUEFSQU1fUE1LSURfQ0FORElEQVRFX1QgYXJDYW5kaWRhdGVMaXN0WzFdOwp9IFBBUkFNX1BNS0lEX0NBTkRJREFURV9MSVNUX1QsICpQX1BBUkFNX1BNS0lEX0NBTkRJREFURV9MSVNUX1Q7Ci8qICNlbmRpZiAqLwoKI2RlZmluZSBOTDgwMjExX0tDS19MRU4gICAgICAgICAgICAgICAgIDE2CiNkZWZpbmUgTkw4MDIxMV9LRUtfTEVOICAgICAgICAgICAgICAgICAxNgojZGVmaW5lIE5MODAyMTFfUkVQTEFZX0NUUl9MRU4gICAgICAgICAgOAoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0dUS19SRUtFWV9EQVRBIHsKCVVJTlRfOCBhdWNLZWtbTkw4MDIxMV9LRUtfTEVOXTsKCVVJTlRfOCBhdWNLY2tbTkw4MDIxMV9LQ0tfTEVOXTsKCVVJTlRfOCBhdWNSZXBsYXlDdHJbTkw4MDIxMV9SRVBMQVlfQ1RSX0xFTl07CglVSU5UXzggdWNCc3NJbmRleDsKCVVJTlRfOCB1Y1JzdlszXTsKCVVJTlRfMzIgdTRQcm90bzsKCVVJTlRfMzIgdTRQYWlyd2lzZUNpcGhlcjsKCVVJTlRfMzIgdTRHcm91cENpcGhlcjsKCVVJTlRfMzIgdTRLZXlNZ210OwoJVUlOVF8zMiB1NE1nbXRHcm91cENpcGhlcjsKfSBQQVJBTV9HVEtfUkVLRVlfREFUQSwgKlBfUEFSQU1fR1RLX1JFS0VZX0RBVEE7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX01DUl9SV19TVFJVQ1RfVCB7CglVSU5UXzMyIHU0TWNyT2Zmc2V0OwoJVUlOVF8zMiB1NE1jckRhdGE7Cn0gUEFSQU1fQ1VTVE9NX01DUl9SV19TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX01DUl9SV19TVFJVQ1RfVDsKCiNpZiBDRkdfU1VQUE9SVF9DQUxfUkVTVUxUX0JBQ0tVUF9UT19IT1NUCi8qCiAqIERlc2NyaXB0aW9uIG9mIEVhY2ggUGFyYW1ldGVycyA6CiAqIHVjUmVhc29uIDoKICogMCA6IFF1ZXJ5IEluZm9ybWF0aW9uIG9mIFRoZXJtYWwgb3IgQ2FsIERhdGEgTGVuZ3RoCiAqIDEgOiBUcmlnZ2VyIEZXIGRvIG9yIGRvbid0IEFsbCBDYWwKICogMiA6IER1bXAgRGF0YSB0byBIb3N0CiAqIDMgOiBTZW5kIEJhY2t1cHBlZCBDYWwgRGF0YSB0byBGVwogKiA0IDogRm9yIERlYnVnIFVzZSwgVGVsbCBGVyBQcmludCBDYWwgRGF0YSAoUm9tIG9yIFJhbSkKICogdWNBY3Rpb24gOgogKiAwIDogUmVhZCBUaGVybWFsIFZhbHVlCiAqIDEgOiBBc2sgdGhlIENhbCBEYXRhIFRvdGFsIExlbmd0aCAoUm9tIGFuZCBSYW0pCiAqIDIgOiBUZWxsIEZXIGRvIEFsbCBDYWwKICogMyA6IFRlbGwgRlcgZG9uJ3QgZG8gQ2FsCiAqIDQgOiBEdW1wIERhdGEgdG8gSG9zdCAoUm9tIG9yIFJhbSkKICogNSA6IFNlbmQgQmFja3VwcGVkIENhbCBEYXRhIHRvIEZXIChSb20gb3IgUmFtKQogKiA2IDogRm9yIERlYnVnIFVzZSwgVGVsbCBGVyBQcmludCBDYWwgRGF0YSAoUm9tIG9yIFJhbSkKICogdWNOZWVkUmVzcCA6CiAqIDAgOiBGVyBObyBOZWVkIHRvIFJlc3BvbnNlIGFuIEVWRU5UCiAqIDEgOiBGVyBOZWVkIHRvIFJlc3BvbnNlIGFuIEVWRU5UCiAqIHVjRnJhZ051bSA6CiAqIFNlcXVlbmNlIE51bWJlcgogKiB1Y1JvbVJhbSA6CiAqIDAgOiBPcGVyYXRpb24gZm9yIFJvbSBDYWwgRGF0YQogKiAxIDogT3BlcmF0aW9uIGZvciBSYW0gQ2FsIERhdGEKICogdTRUaGVybWFsVmFsdWUgOgogKiBGaWVsZCBmb3IgZmlsbGluZyB0aGUgVGhlcm1hbCBWYWx1ZSBpbiBGVwogKiB1NEFkZHJlc3MgOgogKiBEdW1wcGVkIFN0YXJ0aW5nIEFkZHJlc3MKICogVXNlZCBmb3IgRHVtcCBhbmQgU2VuZCBDYWwgRGF0YSBCZXR3ZWVuIERyaXZlciBhbmQgRlcKICogdTRMZW5ndGggOgogKiBNZW1vcnkgU2l6ZSBuZWVkIHRvIGFsbG9jYXRlZCBpbiBEcml2ZXIgb3IgRGF0YSBTaXplIGluIGFuIEVWRU5UCiAqIFVzZWQgZm9yIER1bXAgYW5kIFNlbmQgQ2FsIERhdGEgQmV0d2VlbiBEcml2ZXIgYW5kIEZXCiAqIHU0UmVtYWluTGVuZ3RoIDoKICogUmVtYWluIExlbmd0aCBuZWVkIHRvIER1bXAKICogVXNlZCBmb3IgRHVtcCBhbmQgU2VuZCBDYWwgRGF0YSBCZXR3ZWVuIERyaXZlciBhbmQgRlcKICovCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DQUxfQkFDS1VQX1NUUlVDVF9WMl9UIHsKCVVJTlRfOAl1Y1JlYXNvbjsKCVVJTlRfOAl1Y0FjdGlvbjsKCVVJTlRfOAl1Y05lZWRSZXNwOwoJVUlOVF84CXVjRnJhZ051bTsKCVVJTlRfOAl1Y1JvbVJhbTsKCVVJTlRfMzIJdTRUaGVybWFsVmFsdWU7CglVSU5UXzMyIHU0QWRkcmVzczsKCVVJTlRfMzIJdTRMZW5ndGg7CglVSU5UXzMyCXU0UmVtYWluTGVuZ3RoOwp9IFBBUkFNX0NBTF9CQUNLVVBfU1RSVUNUX1YyX1QsICpQX1BBUkFNX0NBTF9CQUNLVVBfU1RSVUNUX1YyX1Q7CiNlbmRpZgoKI2lmIENGR19TVVBQT1JUX1FBX1RPT0wKI2lmIENGR19TVVBQT1JUX0JVRkZFUl9NT0RFCnR5cGVkZWYgc3RydWN0IF9CSU5fQ09OVEVOVF9UIHsKCVVJTlRfMTYgdTJBZGRyOwoJVUlOVF84IHVjVmFsdWU7CglVSU5UXzggdWNSZXNlcnZlZDsKfSBCSU5fQ09OVEVOVF9ULCAqUF9CSU5fQ09OVEVOVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9FRlVTRV9CVUZGRVJfTU9ERV9UIHsKCVVJTlRfOCB1Y1NvdXJjZU1vZGU7CglVSU5UXzggdWNDb3VudDsKCVVJTlRfOCB1Y0NtZFR5cGU7CglVSU5UXzggdWNSZXNlcnZlZDsKCVVJTlRfOCBhQmluQ29udGVudFtNQVhfRUVQUk9NX0JVRkZFUl9TSVpFXTsKfSBQQVJBTV9DVVNUT01fRUZVU0VfQlVGRkVSX01PREVfVCwgKlBfUEFSQU1fQ1VTVE9NX0VGVVNFX0JVRkZFUl9NT0RFX1Q7CgovKiNpZiAoQ0ZHX0VFUFJPTV9QQUdFX0FDQ0VTUyA9PSAxKSovCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fQUNDRVNTX0VGVVNFX1QgewoJVUlOVF8zMiB1NEFkZHJlc3M7CglVSU5UXzMyIHU0VmFsaWQ7CglVSU5UXzggYXVjRGF0YVsxNl07Cn0gUEFSQU1fQ1VTVE9NX0FDQ0VTU19FRlVTRV9ULCAqUF9QQVJBTV9DVVNUT01fQUNDRVNTX0VGVVNFX1Q7CgoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9FRlVTRV9GUkVFX0JMT0NLX1QgewoJVUlOVF84ICB1Y0dldEZyZWVCbG9jazsKCVVJTlRfOCAgYXVjUmVzZXJ2ZWRbM107Cn0gUEFSQU1fQ1VTVE9NX0VGVVNFX0ZSRUVfQkxPQ0tfVCwgKlBfUEFSQU1fQ1VTVE9NX0VGVVNFX0ZSRUVfQkxPQ0tfVDsKCgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX0dFVF9UWF9QT1dFUl9UIHsKCVVJTlRfOCB1Y1R4UHdyVHlwZTsKCVVJTlRfOCB1Y0NlbnRlckNoYW5uZWw7CglVSU5UXzggdWNEYmRjSWR4OyAvKiAwOkJhbmQgMCwgMTogQmFuZDEgKi8KCVVJTlRfOCB1Y0JhbmQ7IC8qIDA6Ry1iYW5kIDE6IEEtYmFuZCovCglVSU5UXzggdWNSZXNlcnZlZFs0XTsKfSBQQVJBTV9DVVNUT01fR0VUX1RYX1BPV0VSX1QsICpQX1BBUkFNX0NVU1RPTV9HRVRfVFhfUE9XRVJfVDsKCgovKiNlbmRpZiovCgojZW5kaWYgLyogQ0ZHX1NVUFBPUlRfQlVGRkVSX01PREUgKi8KCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fU0VUX1RYX1RBUkdFVF9QT1dFUl9UIHsKCUlOVF84IGNUeFB3cjJHNENjazsgICAgICAgLyogc2lnbmVkLCBpbiB1bml0IG9mIDAuNWRCbSAqLwoJSU5UXzggY1R4UHdyMkc0RHNzczsgICAgICAvKiBzaWduZWQsIGluIHVuaXQgb2YgMC41ZEJtICovCglVSU5UXzggdWNUeFRhcmdldFB3cjsJCS8qIFR4IHRhcmdldCBwb3dlciBiYXNlIGZvciBhbGwqLwoJVUlOVF84IHVjUmVzZXJ2ZWQ7CgoJSU5UXzggY1R4UHdyMkc0T0ZETV9CUFNLOwoJSU5UXzggY1R4UHdyMkc0T0ZETV9RUFNLOwoJSU5UXzggY1R4UHdyMkc0T0ZETV8xNlFBTTsKCUlOVF84IGNUeFB3cjJHNE9GRE1fUmVzZXJ2ZWQ7CglJTlRfOCBjVHhQd3IyRzRPRkRNXzQ4TWJwczsKCUlOVF84IGNUeFB3cjJHNE9GRE1fNTRNYnBzOwoKCUlOVF84IGNUeFB3cjJHNEhUMjBfQlBTSzsKCUlOVF84IGNUeFB3cjJHNEhUMjBfUVBTSzsKCUlOVF84IGNUeFB3cjJHNEhUMjBfMTZRQU07CglJTlRfOCBjVHhQd3IyRzRIVDIwX01DUzU7CglJTlRfOCBjVHhQd3IyRzRIVDIwX01DUzY7CglJTlRfOCBjVHhQd3IyRzRIVDIwX01DUzc7CgoJSU5UXzggY1R4UHdyMkc0SFQ0MF9CUFNLOwoJSU5UXzggY1R4UHdyMkc0SFQ0MF9RUFNLOwoJSU5UXzggY1R4UHdyMkc0SFQ0MF8xNlFBTTsKCUlOVF84IGNUeFB3cjJHNEhUNDBfTUNTNTsKCUlOVF84IGNUeFB3cjJHNEhUNDBfTUNTNjsKCUlOVF84IGNUeFB3cjJHNEhUNDBfTUNTNzsKCglJTlRfOCBjVHhQd3I1R09GRE1fQlBTSzsKCUlOVF84IGNUeFB3cjVHT0ZETV9RUFNLOwoJSU5UXzggY1R4UHdyNUdPRkRNXzE2UUFNOwoJSU5UXzggY1R4UHdyNUdPRkRNX1Jlc2VydmVkOwoJSU5UXzggY1R4UHdyNUdPRkRNXzQ4TWJwczsKCUlOVF84IGNUeFB3cjVHT0ZETV81NE1icHM7CgoJSU5UXzggY1R4UHdyNUdIVDIwX0JQU0s7CglJTlRfOCBjVHhQd3I1R0hUMjBfUVBTSzsKCUlOVF84IGNUeFB3cjVHSFQyMF8xNlFBTTsKCUlOVF84IGNUeFB3cjVHSFQyMF9NQ1M1OwoJSU5UXzggY1R4UHdyNUdIVDIwX01DUzY7CglJTlRfOCBjVHhQd3I1R0hUMjBfTUNTNzsKCglJTlRfOCBjVHhQd3I1R0hUNDBfQlBTSzsKCUlOVF84IGNUeFB3cjVHSFQ0MF9RUFNLOwoJSU5UXzggY1R4UHdyNUdIVDQwXzE2UUFNOwoJSU5UXzggY1R4UHdyNUdIVDQwX01DUzU7CglJTlRfOCBjVHhQd3I1R0hUNDBfTUNTNjsKCUlOVF84IGNUeFB3cjVHSFQ0MF9NQ1M3Owp9IFBBUkFNX0NVU1RPTV9TRVRfVFhfVEFSR0VUX1BPV0VSX1QsICpQX1BBUkFNX0NVU1RPTV9TRVRfVFhfVEFSR0VUX1BPV0VSX1Q7CgoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9BQ0NFU1NfUlhfU1RBVCB7CglVSU5UXzMyIHU0U2VxTnVtOwoJVUlOVF8zMiB1NFRvdGFsTnVtOwp9IFBBUkFNX0NVU1RPTV9BQ0NFU1NfUlhfU1RBVCwgKlBfUEFSQU1fQ1VTVE9NX0FDQ0VTU19SWF9TVEFUOwoKLyogRXh0IERldkluZm8gVGFnICovCnR5cGVkZWYgZW51bSBfRVhUX0VOVU1fREVWSU5GT19UQUdfSEFORExFX1QgewoJREVWX0lORk9fQUNUSVZFID0gMCwKCURFVl9JTkZPX0JTU0lELAoJREVWX0lORk9fTUFYX05VTQp9IEVYVF9FTlVNX1RBR19ERVZJTkZPX0hBTkRMRV9UOwoKLyogIFNUQSByZWNvcmQgVExWIHRhZyAqLwp0eXBlZGVmIGVudW0gX0VYVF9FTlVNX1NUQVJFQ19UQUdfSEFORExFX1QgewoJU1RBX1JFQ19CQVNJQyA9IDAsCglTVEFfUkVDX1JBLAoJU1RBX1JFQ19SQV9DT01NT05fSU5GTywKCVNUQV9SRUNfUkFfVVBEQVRFLAoJU1RBX1JFQ19CRiwKCVNUQV9SRUNfTUFVTkFMX0FTU09DLAoJU1RBX1JFQ19CQSA9IDYsCglTVEFfUkVDX01BWF9OVU0KfSBFWFRfRU5VTV9UQUdfU1RBUkVDX0hBTkRMRV9UOwoKI2lmIENGR19TVVBQT1JUX1RYX0JGCnR5cGVkZWYgZW51bSBfQkZfQUNUSU9OX0NBVEVHT1JZIHsKCUJGX1NPVU5ESU5HX09GRiA9IDAsCglCRl9TT1VORElOR19PTiwKCUJGX0hXX0NUUkwsCglCRl9EQVRBX1BBQ0tFVF9BUFBMWSwKCUJGX1BGTVVfTUVNX0FMTE9DQVRFLAoJQkZfUEZNVV9NRU1fUkVMRUFTRSwKCUJGX1BGTVVfVEFHX1JFQUQsCglCRl9QRk1VX1RBR19XUklURSwKCUJGX1BST0ZJTEVfUkVBRCwKCUJGX1BST0ZJTEVfV1JJVEUsCglCRl9QTl9SRUFELAoJQkZfUE5fV1JJVEUsCglCRl9QRk1VX01FTV9BTExPQ19NQVBfUkVBRAp9IEJGX0FDVElPTl9DQVRFR09SWTsKCmVudW0gewoJREVWSU5GT19BQ1RJVkUgPSAwLAoJREVWSU5GT19NQVhfTlVNID0gMSwKfTsKCmVudW0gewoJREVWSU5GT19BQ1RJVkVfRkVBVFVSRSA9ICgxIDw8IERFVklORk9fQUNUSVZFKSwKCURFVklORk9fTUFYX05VTV9GRUFUVVJFID0gKDEgPDwgREVWSU5GT19NQVhfTlVNKQp9OwoKZW51bSB7CglCU1NfSU5GT19PV05fTUFDID0gMCwKCUJTU19JTkZPX0JBU0lDID0gMSwKCUJTU19JTkZPX1JGX0NIID0gMiwKCUJTU19JTkZPX1BNID0gMywKCUJTU19JTkZPX1VBUFNEID0gNCwKCUJTU19JTkZPX1JPQU1fREVURUNUSU9OID0gNSwKCUJTU19JTkZPX0xRX1JNID0gNiwKCUJTU19JTkZPX0VYVF9CU1MgPSA3LAoJQlNTX0lORk9fQlJPQURDQVNUX0lORk8gPSA4LAoJQlNTX0lORk9fU1lOQ19NT0RFID0gOSwKCUJTU19JTkZPX01BWF9OVU0KfTsKCnR5cGVkZWYgdW5pb24gX1BGTVVfUFJPRklMRV9UQUcxIHsKCXN0cnVjdCB7CgkJVUlOVF8zMiB1Y1Byb2ZpbGVJRDo3OwkvKiBbNjowXSA6IDAgfiA2MyAqLwoJCVVJTlRfMzIgdWNUeEJmOjE7CS8qIFs3XSA6IDA6IGlCRiwgMTogZUJGICovCgkJVUlOVF8zMiB1Y0RCVzoyOwkvKiBbOTo4XSA6IDAvMS8yLzM6IERXMjAvNDAvODAvMTYwTkMgKi8KCQlVSU5UXzMyIHVjU1VfTVU6MTsJLyogWzEwXSA6IDA6U1UsIDE6IE1VICovCgkJVUlOVF8zMiB1Y0ludmFsaWRQcm9mOjE7CS8qIFsxMV0gOiAwOmRlZmF1bHQsIDE6IFRoaXMgcHJvZmlsZSBudW1iZXIgaXMgaW52YWxpZCBieSBTVyAqLwoJCVVJTlRfMzIgdWNSTVNEOjM7CS8qIFsxNDoxMl0gOiBSTVNEIHZhbHVlIGZyb20gQ0UgKi8KCQlVSU5UXzMyIHVjTWVtQWRkcjFDb2xJZHg6MzsJLyogWzE3IDogMTVdIDogY29sdW1uIGluZGV4IDogMCB+IDUgKi8KCQlVSU5UXzMyIHVjTWVtQWRkcjFSb3dJZHg6NjsJLyogWzIzIDogMThdIDogcm93IGluZGV4IDogMCB+IDYzICovCgkJVUlOVF8zMiB1Y01lbUFkZHIyQ29sSWR4OjM7CS8qIFsyNiA6IDI0XSA6IGNvbHVtbiBpbmRleCA6IDAgfiA1ICovCgkJVUlOVF8zMiB1Y01lbUFkZHIyUm93SWR4OjU7CS8qIFszMSA6IDI3XSA6IHJvdyBpbmRleCA6IDAgfiA2MyAqLwoJCVVJTlRfMzIgdWNNZW1BZGRyMlJvd0lkeE1zYjoxOwkvKiBbMzJdIDogTVNCIG9mIHJvdyBpbmRleCAqLwoJCVVJTlRfMzIgdWNNZW1BZGRyM0NvbElkeDozOwkvKiBbMzUgOiAzM10gOiBjb2x1bW4gaW5kZXggOiAwIH4gNSAqLwoJCVVJTlRfMzIgdWNNZW1BZGRyM1Jvd0lkeDo2OwkvKiBbNDEgOiAzNl0gOiByb3cgaW5kZXggOiAwIH4gNjMgKi8KCQlVSU5UXzMyIHVjTWVtQWRkcjRDb2xJZHg6MzsJLyogWzQ0IDogNDJdIDogY29sdW1uIGluZGV4IDogMCB+IDUgKi8KCQlVSU5UXzMyIHVjTWVtQWRkcjRSb3dJZHg6NjsJLyogWzUwIDogNDVdIDogcm93IGluZGV4IDogMCB+IDYzICovCgkJVUlOVF8zMiB1Y1Jlc2VydmVkOjE7CS8qIFs1MV0gOiBSZXNlcnZlZCAqLwoJCVVJTlRfMzIgdWNOcm93OjI7CS8qIFs1MyA6IDUyXSA6IE5yb3cgKi8KCQlVSU5UXzMyIHVjTmNvbDoyOwkvKiBbNTUgOiA1NF0gOiBOY29sICovCgkJVUlOVF8zMiB1Y05ncm91cDoyOwkvKiBbNTcgOiA1Nl0gOiBOZ3JvdXAgKi8KCQlVSU5UXzMyIHVjTE06MjsJLyogWzU5IDogNThdIDogMC8xLzIgKi8KCQlVSU5UXzMyIHVjQ29kZUJvb2s6MjsJLyogWzYxOjYwXSA6IENvZGUgYm9vayAqLwoJCVVJTlRfMzIgdWNIdGNFeGlzdDoxOwkvKiBbNjJdIDogSHRjRXhpc3QgKi8KCQlVSU5UXzMyIHVjUmVzZXJ2ZWQxOjE7CS8qIFs2M10gOiBSZXNlcnZlZCAqLwoJCVVJTlRfMzIgdWNTTlJfU1RTMDo4OwkvKiBbNzE6NjRdIDogU05SX1NUUzAgKi8KCQlVSU5UXzMyIHVjU05SX1NUUzE6ODsJLyogWzc5OjcyXSA6IFNOUl9TVFMxICovCgkJVUlOVF8zMiB1Y1NOUl9TVFMyOjg7CS8qIFs4Nzo4MF0gOiBTTlJfU1RTMiAqLwoJCVVJTlRfMzIgdWNTTlJfU1RTMzo4OwkvKiBbOTU6ODhdIDogU05SX1NUUzMgKi8KCQlVSU5UXzMyIHVjSUJmTG5hSWR4Ojg7CS8qIFsxMDM6OTZdIDogaUJGIExOQSBpbmRleCAqLwoJfSByRmllbGQ7CglVSU5UXzMyIGF1NFJhd0RhdGFbNF07Cn0gUEZNVV9QUk9GSUxFX1RBRzEsICpQX1BGTVVfUFJPRklMRV9UQUcxOwoKdHlwZWRlZiB1bmlvbiBfUEZNVV9QUk9GSUxFX1RBRzIgewoJc3RydWN0IHsKCQlVSU5UXzMyIHUyU21hcnRBbnQ6MTI7CS8qIFsxMTowXSA6IFNtYXJ0IEFudCBjb25maWcgKi8KCQlVSU5UXzMyIHVjUmVzZXJ2ZWQwOjM7CS8qIFsxNDoxMl0gOiBSZXNlcnZlZCAqLwoJCVVJTlRfMzIgdWNTRUlkeDo1OwkvKiBbMTk6MTVdIDogU0UgaW5kZXggKi8KCQlVSU5UXzMyIHVjUk1TRFRoZDozOwkvKiBbMjI6MjBdIDogUk1TRCBUaHJlc2hvbGQgKi8KCQlVSU5UXzMyIHVjUmVzZXJ2ZWQxOjE7CS8qIFsyM10gOiBSZXNlcnZlZCAqLwoJCVVJTlRfMzIgdWNNQ1NUaEwxU1M6NDsJLyogWzI3OjI0XSA6IE1DUyBUSCBsb25nIDFTUyAqLwoJCVVJTlRfMzIgdWNNQ1NUaFMxU1M6NDsJLyogWzMxOjI4XSA6IE1DUyBUSCBzaG9ydCAxU1MgKi8KCQlVSU5UXzMyIHVjTUNTVGhMMlNTOjQ7CS8qIFszNTozMl0gOiBNQ1MgVEggbG9uZyAyU1MgKi8KCQlVSU5UXzMyIHVjTUNTVGhTMlNTOjQ7CS8qIFszOTozNl0gOiBNQ1MgVEggc2hvcnQgMlNTICovCgkJVUlOVF8zMiB1Y01DU1RoTDNTUzo0OwkvKiBbNDM6NDBdIDogTUNTIFRIIGxvbmcgM1NTICovCgkJVUlOVF8zMiB1Y01DU1RoUzNTUzo0OwkvKiBbNDc6NDRdIDogTUNTIFRIIHNob3J0IDNTUyAqLwoJCVVJTlRfMzIgdWNpQmZUaW1lT3V0Ojg7CS8qIFs1NTo0OF0gOiBpQkYgdGltZW91dCBsaW1pdCAqLwoJCVVJTlRfMzIgdWNSZXNlcnZlZDI6ODsJLyogWzYzOjU2XSA6IFJlc2VydmVkICovCgkJVUlOVF8zMiB1Y1Jlc2VydmVkMzo4OwkvKiBbNzE6NjRdIDogUmVzZXJ2ZWQgKi8KCQlVSU5UXzMyIHVjUmVzZXJ2ZWQ0Ojg7CS8qIFs3OTo3Ml0gOiBSZXNlcnZlZCAqLwoJCVVJTlRfMzIgdWNpQmZEQlc6MjsJLyogWzgxOjgwXSA6IGlCRiBkZXNpcmVkIERCVyAwLzEvMi8zIDogQlcyMC80MC84MC8xNjBOQyAqLwoJCVVJTlRfMzIgdWNpQmZOY29sOjI7CS8qIFs4Mzo4Ml0gOiBpQkYgZGVzaXJlZCBOY29sID0gMSB+IDMgKi8KCQlVSU5UXzMyIHVjaUJmTnJvdzoyOwkvKiBbODU6ODRdIDogaUJGIGRlc2lyZWQgTnJvdyA9IDEgfiA0ICovCgkJVUlOVF8zMiB1MlJlc2VydmVkNToxMDsJLyogWzk1Ojg2XSA6IFJlc2VydmVkICovCgl9IHJGaWVsZDsKCVVJTlRfMzIgYXU0UmF3RGF0YVszXTsKfSBQRk1VX1BST0ZJTEVfVEFHMiwgKlBfUEZNVV9QUk9GSUxFX1RBRzI7Cgp0eXBlZGVmIHVuaW9uIF9QRk1VX0RBVEEgewoJc3RydWN0IHsKCQlVSU5UXzMyIHUyUGhpMTE6OTsKCQlVSU5UXzMyIHVjUHNpMjE6NzsKCQlVSU5UXzMyIHUyUGhpMjE6OTsKCQlVSU5UXzMyIHVjUHNpMzE6NzsKCQlVSU5UXzMyIHUyUGhpMzE6OTsKCQlVSU5UXzMyIHVjUHNpNDE6NzsKCQlVSU5UXzMyIHUyUGhpMjI6OTsKCQlVSU5UXzMyIHVjUHNpMzI6NzsKCQlVSU5UXzMyIHUyUGhpMzI6OTsKCQlVSU5UXzMyIHVjUHNpNDI6NzsKCQlVSU5UXzMyIHUyUGhpMzM6OTsKCQlVSU5UXzMyIHVjUHNpNDM6NzsKCQlVSU5UXzMyIHUyZFNOUjAwOjQ7CgkJVUlOVF8zMiB1MmRTTlIwMTo0OwoJCVVJTlRfMzIgdTJkU05SMDI6NDsKCQlVSU5UXzMyIHUyZFNOUjAzOjQ7CgkJVUlOVF8zMiB1MlJlc2VydmVkOjE2OwoJfSByRmllbGQ7CglVSU5UXzMyIGF1NFJhd0RhdGFbNV07Cn0gUEZNVV9EQVRBLCAqUF9QRk1VX0RBVEE7Cgp0eXBlZGVmIHN0cnVjdCBfUFJPRklMRV9UQUdfUkVBRF9UIHsKCVVJTlRfOCB1Y1R4QmZDYXRlZ29yeTsKCVVJTlRfOCB1Y1Byb2ZpbGVJZHg7CglCT09MRUFOIGZnQmZlcjsKCVVJTlRfOCB1Y1JzdjsKfSBQUk9GSUxFX1RBR19SRUFEX1QsICpQX1BST0ZJTEVfVEFHX1JFQURfVDsKCnR5cGVkZWYgc3RydWN0IF9QUk9GSUxFX1RBR19XUklURV9UIHsKCVVJTlRfOCB1Y1R4QmZDYXRlZ29yeTsKCVVJTlRfOCB1Y1BmbXVJZDsKCVVJTlRfOCB1Y0J1ZmZlclsyOF07Cn0gUFJPRklMRV9UQUdfV1JJVEVfVCwgKlBfUFJPRklMRV9UQUdfV1JJVEVfVDsKCnR5cGVkZWYgc3RydWN0IF9QUk9GSUxFX0RBVEFfUkVBRF9UIHsKCVVJTlRfOCB1Y1R4QmZDYXRlZ29yeTsKCVVJTlRfOCB1Y1BmbXVJZHg7CglCT09MRUFOIGZnQkZlcjsKCVVJTlRfOCB1Y1Jlc2VydmVkWzNdOwoJVUlOVF84IHVjU3ViQ2FycklkeExzYjsKCVVJTlRfOCB1Y1N1YkNhcnJJZHhNc2I7Cn0gUFJPRklMRV9EQVRBX1JFQURfVCwgKlBfUFJPRklMRV9EQVRBX1JFQURfVDsKCnR5cGVkZWYgc3RydWN0IF9QUk9GSUxFX0RBVEFfV1JJVEVfVCB7CglVSU5UXzggdWNUeEJmQ2F0ZWdvcnk7CglVSU5UXzggdWNQZm11SWR4OwoJVUlOVF84IHUyU3ViQ2FycklkeExzYjsKCVVJTlRfOCB1MlN1YkNhcnJJZHhNc2I7CglQRk1VX0RBVEEgclR4QmZQZm11RGF0YTsKfSBQUk9GSUxFX0RBVEFfV1JJVEVfVCwgKlBfUFJPRklMRV9EQVRBX1dSSVRFX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUFJPRklMRV9QTl9SRUFEX1QgewoJVUlOVF84IHVjVHhCZkNhdGVnb3J5OwoJVUlOVF84IHVjUGZtdUlkeDsKCVVJTlRfOCB1Y1Jlc2VydmVkWzJdOwp9IFBST0ZJTEVfUE5fUkVBRF9ULCAqUF9QUk9GSUxFX1BOX1JFQURfVDsKCnR5cGVkZWYgc3RydWN0IF9QUk9GSUxFX1BOX1dSSVRFX1QgewoJVUlOVF84IHVjVHhCZkNhdGVnb3J5OwoJVUlOVF84IHVjUGZtdUlkeDsKCVVJTlRfMTYgdTJidzsKCVVJTlRfOCB1Y0J1ZlszMl07Cn0gUFJPRklMRV9QTl9XUklURV9ULCAqUF9QUk9GSUxFX1BOX1dSSVRFX1Q7Cgp0eXBlZGVmIGVudW0gX0JGX1NPVU5ESU5HX01PREUgewoJU1VfU09VTkRJTkcgPSAwLAoJTVVfU09VTkRJTkcsCglTVV9QRVJJT0RJQ19TT1VORElORywKCU1VX1BFUklPRElDX1NPVU5ESU5HCn0gQkZfU09VTkRJTkdfTU9ERTsKCnR5cGVkZWYgc3RydWN0IF9FWFRfQ01EX0VUWEJmX1NORF9QRVJJT0RJQ19UUklHR0VSX0NUUkxfVCB7CglVSU5UXzggdWNDbWRDYXRlZ29yeUlEOwoJVUlOVF84IHVjU3VNdVNuZE1vZGU7CglVSU5UXzggdWNXbGFuSWR4OwoJVUlOVF8zMiB1NFNvdW5kaW5nSW50ZXJ2YWw7CS8qIEJ5IG1zICovCn0gRVhUX0NNRF9FVFhCZl9TTkRfUEVSSU9ESUNfVFJJR0dFUl9DVFJMX1QsICpQX0VYVF9DTURfRVRYQmZfU05EX1BFUklPRElDX1RSSUdHRVJfQ1RSTF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX0VYVF9DTURfRVRYQmZfTVVfU05EX1BFUklPRElDX1RSSUdHRVJfQ1RSTF9UIHsKCVVJTlRfOCB1Y0NtZENhdGVnb3J5SUQ7CglVSU5UXzggdWNTdU11U25kTW9kZTsKCVVJTlRfOCB1Y1dsYW5JZFs0XTsKCVVJTlRfOCB1Y1N0YU51bTsKCVVJTlRfMzIgdTRTb3VuZGluZ0ludGVydmFsOwkvKiBCeSBtcyAqLwp9IEVYVF9DTURfRVRYQmZfTVVfU05EX1BFUklPRElDX1RSSUdHRVJfQ1RSTF9ULCAqUF9FWFRfQ01EX0VUWEJmX01VX1NORF9QRVJJT0RJQ19UUklHR0VSX0NUUkxfVDsKCi8qIERldmljZSBpbmZvcm1hdGlvbiAoVGFnMCkgKi8KdHlwZWRlZiBzdHJ1Y3QgX0NNRF9ERVZJTkZPX0FDVElWRV9UIHsKCVVJTlRfMTYgdTJUYWc7CQkvKiBUYWcgPSAweDAwICovCglVSU5UXzE2IHUyTGVuZ3RoOwoJVUlOVF84IHVjQWN0aXZlOwoJVUlOVF84IHVjQmFuZE51bTsKCVVJTlRfOCBhdWNPd25NYWNBZGRyWzZdOwoJVUlOVF84IGF1Y1Jlc2VydmVbNF07Cn0gQ01EX0RFVklORk9fQUNUSVZFX1QsICpQX0NNRF9ERVZJTkZPX0FDVElWRV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX0JTU0lORk9fQkFTSUNfVCB7CgkvKiBCYXNpYyBCU1MgaW5mb3JtYXRpb24gKFRhZzEpICovCglVSU5UXzE2IHUyVGFnOwkJLyogVGFnID0gMHgwMSAqLwoJVUlOVF8xNiB1Mkxlbmd0aDsKCVVJTlRfMzIgdTROZXR3b3JrVHlwZTsKCVVJTlRfOCB1Y0FjdGl2ZTsKCVVJTlRfOCB1Y1Jlc2VydmUwOwoJVUlOVF8xNiB1MkJjbkludGVydmFsOwoJVUlOVF84IGF1Y0JTU0lEWzZdOwoJVUlOVF84IHVjV21tSWR4OwoJVUlOVF84IHVjRHRpbVBlcmlvZDsKCVVJTlRfOCB1Y0JjTWNXbGFuaWR4OwkvKiBpbmRpY2F0ZSB3aGljaCB3bGFuLWlkeCB1c2VkIGZvciBNQy9CQyB0cmFuc21pc3Npb24uICovCglVSU5UXzggdWNDaXBoZXJTdWl0OwoJVUlOVF84IGFjdVJlc2VydmVbNl07Cn0gQ01EX0JTU0lORk9fQkFTSUNfVCwgKlBfQ01EX0JTU0lORk9fQkFTSUNfVDsKCnR5cGVkZWYgc3RydWN0IF9UWEJGX1BGTVVfU1RBX0lORk8gewoJVUlOVF8xNiB1MlBmbXVJZDsJLyogMHhGRkZGIG1lYW5zIG5vIGFjY2VzcyByaWdodCBmb3IgUEZNVSAqLwoJVUlOVF84IGZnU1VfTVU7CQkvKiAwIDogU1UsIDEgOiBNVSAqLwoJVUlOVF84IGZnRVR4QmZDYXA7CS8qIDAgOiBJVHhCZiwgMSA6IEVUeEJmICovCglVSU5UXzggdWNTb3VuZGluZ1BoeTsJLyogMDogbGVnYWN5LCAxOiBPRkRNLCAyOiBIVCwgNDogVkhUICovCglVSU5UXzggdWNOZHBhUmF0ZTsKCVVJTlRfOCB1Y05kcFJhdGU7CglVSU5UXzggdWNSZXB0UG9sbFJhdGU7CglVSU5UXzggdWNUeE1vZGU7CS8qIDA6IGxlZ2FjeSwgMTogT0ZETSwgMjogSFQsIDQ6IFZIVCAqLwoJVUlOVF84IHVjTmM7CglVSU5UXzggdWNOcjsKCVVJTlRfOCB1Y0NCVzsJCS8qIDAgOiAyME0sIDEgOiA0ME0sIDIgOiA4ME0sIDMgOiA4MCArIDgwTSAqLwoJVUlOVF84IHVjVG90TWVtUmVxdWlyZTsKCVVJTlRfOCB1Y01lbVJlcXVpcmUyME07CglVSU5UXzggdWNNZW1Sb3cwOwoJVUlOVF84IHVjTWVtQ29sMDsKCVVJTlRfOCB1Y01lbVJvdzE7CglVSU5UXzggdWNNZW1Db2wxOwoJVUlOVF84IHVjTWVtUm93MjsKCVVJTlRfOCB1Y01lbUNvbDI7CglVSU5UXzggdWNNZW1Sb3czOwoJVUlOVF84IHVjTWVtQ29sMzsKCVVJTlRfMTYgdTJTbWFydEFudDsKCVVJTlRfOCB1Y1NFSWR4OwoJVUlOVF84IHVjaUJmVGltZU91dDsKCVVJTlRfOCB1Y2lCZkRCVzsKCVVJTlRfOCB1Y2lCZk5jb2w7CglVSU5UXzggdWNpQmZOcm93OwoJVUlOVF84IGF1Y1Jlc2VydmVkWzNdOwp9IFRYQkZfUEZNVV9TVEFfSU5GTywgKlBfVFhCRl9QRk1VX1NUQV9JTkZPOwoKdHlwZWRlZiBzdHJ1Y3QgX1NUQV9SRUNfVVBEX0VOVFJZX1QgewoJVFhCRl9QRk1VX1NUQV9JTkZPIHJUeEJmUGZtdVN0YUluZm87CglVSU5UXzggYXVjQWRkcltQQVJBTV9NQUNfQUREUl9MRU5dOwoJVUlOVF84IHVjQWlkOwoJVUlOVF84IHVjUnN2Owp9IFNUQV9SRUNfVVBEX0VOVFJZX1QsICpQX1NUQV9SRUNfVVBEX0VOVFJZX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfU1RBUkVDX0NPTU1PTl9UIHsKCS8qIEJhc2ljIFNUQSByZWNvcmQgKEdyb3VwMCkgKi8KCVVJTlRfMTYgdTJUYWc7CQkvKiBUYWcgPSAweDAwICovCglVSU5UXzE2IHUyTGVuZ3RoOwoJVUlOVF8zMiB1NENvbm5lY3Rpb25UeXBlOwoJVUlOVF84IHVjQ29ubmVjdGlvblN0YXRlOwoJVUlOVF84IHVjSXNRQlNTOwoJVUlOVF8xNiB1MkFJRDsKCVVJTlRfOCBhdWNQZWVyTWFjQWRkcls2XTsKCVVJTlRfMTYgdTJSZXNlcnZlMTsKfSBDTURfU1RBUkVDX0NPTU1PTl9ULCAqUF9DTURfU1RBUkVDX0NPTU1PTl9UOwoKdHlwZWRlZiBzdHJ1Y3QgX0NNRF9TVEFSRUNfQkYgewoJVUlOVF8xNiB1MlRhZzsJCS8qIFRhZyA9IDB4MDIgKi8KCVVJTlRfMTYgdTJMZW5ndGg7CglUWEJGX1BGTVVfU1RBX0lORk8gclR4QmZQZm11SW5mbzsKCVVJTlRfOCB1Y1Jlc2VydmVkWzNdOwp9IENNRF9TVEFSRUNfQkYsICpQX0NNRF9TVEFSRUNfQkY7CgovKiBRQSB0b29sOiBtYXVuYWwgYXNzb2MgKi8KdHlwZWRlZiBzdHJ1Y3QgX0NNRF9NQU5VQUxfQVNTT0NfU1RSVUNUX1QgewovKgoqCVVJTlRfOCAgICAgICAgICAgICAgdWNCc3NJbmRleDsKKglVSU5UXzggICAgICAgICAgICAgIHVjV2xhbklkeDsKKglVSU5UXzE2ICAgICAgICAgICAgIHUyVG90YWxFbGVtZW50TnVtOwoqCVVJTlRfMzIgICAgICAgICAgICAgdTRSZXNlcnZlOwoqLwoJLyogZXh0ZW5zaW9uICovCglVSU5UXzE2IHUyVGFnOwkJLyogVGFnID0gMHgwNSAqLwoJVUlOVF8xNiB1Mkxlbmd0aDsKCVVJTlRfOCBhdWNNYWNbTUFDX0FERFJfTEVOXTsKCVVJTlRfOCB1Y1R5cGU7CglVSU5UXzggdWNXdGJsOwoJVUlOVF84IHVjT3dubWFjOwoJVUlOVF84IHVjTW9kZTsKCVVJTlRfOCB1Y0J3OwoJVUlOVF84IHVjTnNzOwoJVUlOVF84IHVjUGZtdUlkOwoJVUlOVF84IHVjTWFyYXRlOwoJVUlOVF84IHVjU3BlSWR4OwoJVUlOVF84IHVjYWlkOwp9IENNRF9NQU5VQUxfQVNTT0NfU1RSVUNUX1QsICpQX0NNRF9NQU5VQUxfQVNTT0NfU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfVFhfQkZfU09VTkRJTkdfU1RBUlRfVCB7Cgl1bmlvbiB7CgkJRVhUX0NNRF9FVFhCZl9TTkRfUEVSSU9ESUNfVFJJR0dFUl9DVFJMX1QgckV4dENtZEV4dEJmU25kUGVyaW9kaWNUcmlnZ2VyQ3RybDsKCQlFWFRfQ01EX0VUWEJmX01VX1NORF9QRVJJT0RJQ19UUklHR0VSX0NUUkxfVCByRXh0Q21kRXh0QmZNdVNuZFBlcmlvZGljVHJpZ2dlckN0cmw7Cgl9IHJUeEJmU291bmRpbmc7Cn0gVFhfQkZfU09VTkRJTkdfU1RBUlRfVCwgKlBfVFhfQkZfU09VTkRJTkdfU1RBUlRfVDsKCnR5cGVkZWYgc3RydWN0IF9UWF9CRl9TT1VORElOR19TVE9QX1QgewoJVUlOVF84IHVjVHhCZkNhdGVnb3J5OwoJVUlOVF84IHVjU25kZ1N0b3A7CglVSU5UXzggdWNSZXNlcnZlZFsyXTsKfSBUWF9CRl9TT1VORElOR19TVE9QX1QsICpQX1RYX0JGX1NPVU5ESU5HX1NUT1BfVDsKCnR5cGVkZWYgc3RydWN0IF9UWF9CRl9UWF9BUFBMWV9UIHsKCVVJTlRfOCB1Y1R4QmZDYXRlZ29yeTsKCVVJTlRfOCB1Y1dsYW5JZDsKCVVJTlRfOCBmZ0VUeEJmOwoJVUlOVF84IGZnSVR4QmY7CglVSU5UXzggZmdNdVR4QmY7CglVSU5UXzggdWNSZXNlcnZlZFszXTsKfSBUWF9CRl9UWF9BUFBMWV9ULCAqUF9UWF9CRl9UWF9BUFBMWV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1RYX0JGX1BGTVVfTUVNX0FMTE9DX1QgewoJVUlOVF84IHVjVHhCZkNhdGVnb3J5OwoJVUlOVF84IHVjU3VNdU1vZGU7CglVSU5UXzggdWNXbGFuSWR4OwoJVUlOVF84IHVjUmVzZXJ2ZWQ7Cn0gVFhfQkZfUEZNVV9NRU1fQUxMT0NfVCwgKlBfVFhfQkZfUEZNVV9NRU1fQUxMT0NfVDsKCnR5cGVkZWYgc3RydWN0IF9UWF9CRl9QRk1VX01FTV9STFNfVCB7CglVSU5UXzggdWNUeEJmQ2F0ZWdvcnk7CglVSU5UXzggdWNXbGFuSWQ7CglVSU5UXzggdWNSZXNlcnZlZFsyXTsKfSBUWF9CRl9QRk1VX01FTV9STFNfVCwgKlBfVFhfQkZfUEZNVV9NRU1fUkxTX1Q7Cgp0eXBlZGVmIHVuaW9uIF9QQVJBTV9DVVNUT01fVFhCRl9BQ1RJT05fU1RSVUNUX1QgewoJUFJPRklMRV9UQUdfUkVBRF9UIHJQcm9maWxlVGFnUmVhZDsKCVBST0ZJTEVfVEFHX1dSSVRFX1QgclByb2ZpbGVUYWdXcml0ZTsKCVBST0ZJTEVfREFUQV9SRUFEX1QgclByb2ZpbGVEYXRhUmVhZDsKCVBST0ZJTEVfREFUQV9XUklURV9UIHJQcm9maWxlRGF0YVdyaXRlOwoJUFJPRklMRV9QTl9SRUFEX1QgclByb2ZpbGVQblJlYWQ7CglQUk9GSUxFX1BOX1dSSVRFX1QgclByb2ZpbGVQbldyaXRlOwoJVFhfQkZfU09VTkRJTkdfU1RBUlRfVCByVHhCZlNvdW5kaW5nU3RhcnQ7CglUWF9CRl9TT1VORElOR19TVE9QX1QgclR4QmZTb3VuZGluZ1N0b3A7CglUWF9CRl9UWF9BUFBMWV9UIHJUeEJmVHhBcHBseTsKCVRYX0JGX1BGTVVfTUVNX0FMTE9DX1QgclR4QmZQZm11TWVtQWxsb2M7CglUWF9CRl9QRk1VX01FTV9STFNfVCByVHhCZlBmbXVNZW1SbHM7Cn0gUEFSQU1fQ1VTVE9NX1RYQkZfQUNUSU9OX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fVFhCRl9BQ1RJT05fU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX1NUQV9SRUNfVVBEX1NUUlVDVF9UIHsKCVVJTlRfOCB1Y0Jzc0luZGV4OwoJVUlOVF84IHVjV2xhbklkeDsKCVVJTlRfMTYgdTJUb3RhbEVsZW1lbnROdW07CglVSU5UXzggdWNBcHBlbmRDbWRUTFY7CglVSU5UXzggdWNNdWFySWR4OwoJVUlOVF84IGF1Y1Jlc2VydmVbMl07CglVSU5UXzMyICpwclN0YVJlYzsKCUNNRF9TVEFSRUNfQkYgckNtZFN0YVJlY0JmOwp9IFBBUkFNX0NVU1RPTV9TVEFfUkVDX1VQRF9TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX1NUQV9SRUNfVVBEX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX0JTU0lORk9fQVJHVU1FTlRfVCB7CglVQ0hBUiBPd25NYWNJZHg7CglVSU5UXzggdWNCc3NJbmRleDsKCVVJTlRfOCBCc3NpZFtQQVJBTV9NQUNfQUREUl9MRU5dOwoJVUlOVF84IHVjQmNNY1dsYW5JZHg7CglVSU5UXzggdWNQZWVyV2xhbklkeDsKCVVJTlRfMzIgTmV0d29ya1R5cGU7CglVSU5UXzMyIHU0Q29ubmVjdGlvblR5cGU7CglVSU5UXzggQ2lwaGVyU3VpdDsKCVVJTlRfOCBBY3RpdmU7CglVSU5UXzggV21tSWR4OwoJVUlOVF8zMiB1NEJzc0luZm9GZWF0dXJlOwoJVUlOVF84IGF1Y0J1ZmZlclswXTsKfSBCU1NJTkZPX0FSR1VNRU5UX1QsICpQX0JTU0lORk9fQVJHVU1FTlRfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fUEZNVV9UQUdfUkVBRF9TVFJVQ1RfVCB7CglQRk1VX1BST0ZJTEVfVEFHMSBydTRUeEJmUEZNVVRhZzE7CglQRk1VX1BST0ZJTEVfVEFHMiBydTRUeEJmUEZNVVRhZzI7Cn0gUEFSQU1fQ1VTVE9NX1BGTVVfVEFHX1JFQURfU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9QRk1VX1RBR19SRUFEX1NUUlVDVF9UOwoKI2lmIENGR19TVVBQT1JUX01VX01JTU8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9TSE9XX0dST1VQX1RCTF9FTlRSWV9TVFJVQ1RfVCB7CglVSU5UXzMyIHU0RXZlbnRJZDsKCVVJTlRfOCBpbmRleDsKCVVJTlRfOCBudW1Vc2VyOjI7CglVSU5UXzggQlc6MjsKCVVJTlRfOCBOUzA6MjsKCVVJTlRfOCBOUzE6MjsKCS8qIFVJTlRfOCAgICAgICBOUzI6MTsgKi8KCS8qIFVJTlRfOCAgICAgICBOUzM6MTsgKi8KCVVJTlRfOCBQRklEVXNlcjA7CglVSU5UXzggUEZJRFVzZXIxOwoJLyogVUlOVF84ICAgICAgIFBGSURVc2VyMjsgKi8KCS8qIFVJTlRfOCAgICAgICBQRklEVXNlcjM7ICovCglCT09MRUFOIGZnSXNTaG9ydEdJOwoJQk9PTEVBTiBmZ0lzVXNlZDsKCUJPT0xFQU4gZmdJc0Rpc2FibGU7CglVSU5UXzggaW5pdE1jc1VzZXIwOjQ7CglVSU5UXzggaW5pdE1jc1VzZXIxOjQ7CgkvKiBVSU5UXzggICAgICAgaW5pdE1jc1VzZXIyOjQ7ICovCgkvKiBVSU5UXzggICAgICAgaW5pdE1jc1VzZXIzOjQ7ICovCglVSU5UXzggZE1jc1VzZXIwOjQ7CglVSU5UXzggZE1jc1VzZXIxOjQ7CgkvKiBVSU5UXzggICAgICAgZE1jc1VzZXIyOjQ7ICovCgkvKiBVSU5UXzggICAgICAgZE1jc1VzZXIzOjQ7ICovCn0gUEFSQU1fQ1VTVE9NX1NIT1dfR1JPVVBfVEJMX0VOVFJZX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fU0hPV19HUk9VUF9UQkxfRU5UUllfU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX0dFVF9RRF9TVFJVQ1RfVCB7CglVSU5UXzMyIHU0RXZlbnRJZDsKCVVJTlRfMzIgYXU0UmF3RGF0YVsxNF07Cn0gUEFSQU1fQ1VTVE9NX0dFVF9RRF9TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX0dFVF9RRF9TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9NVV9TVFJVQ1RfTFFfUkVQT1JUIHsKCWludCBscV9yZXBvcnRbTlVNX09GX1VTRVJdW05VTV9PRl9NT0RVTF07Cn0gTVVfU1RSVUNUX0xRX1JFUE9SVCwgKlBfTVVfU1RSVUNUX0xRX1JFUE9SVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fR0VUX01VX0NBTENfTFFfU1RSVUNUX1QgewoJVUlOVF8zMiB1NEV2ZW50SWQ7CglNVV9TVFJVQ1RfTFFfUkVQT1JUIHJFbnRyeTsKfSBQQVJBTV9DVVNUT01fR0VUX01VX0NBTENfTFFfU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9HRVRfTVVfQ0FMQ19MUV9TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9NVV9HRVRfQ0FMQ19JTklUX01DU19UIHsKCVVJTlRfOCB1Y2dyb3VwSWR4OwoJVUlOVF84IHVjUnN2WzNdOwp9IE1VX0dFVF9DQUxDX0lOSVRfTUNTX1QsICpQX01VX0dFVF9DQUxDX0lOSVRfTUNTX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfTVVfU0VUX0lOSVRfTUNTX1QgewoJVUlOVF84IHVjTnVtT2ZVc2VyOwkvKiB6ZXJvLWJhc2UgOiAwfjM6IG1lYW5zIDF+MiB1c2VycyAqLwoJVUlOVF84IHVjQmFuZHdpZHRoOwkvKiB6ZXJvLWJhc2UgOiAwOjIwIGh6IDE6NDAgaHogMjogODAgaHogMzogMTYwICovCglVSU5UXzggdWNOc3NPZlVzZXIwOwkvKiB6ZXJvLWJhc2UgOiAwfjEgbWVhbnMgdWVzcjAgdXNlIDF+MiBzcyAsIGlmIG5vIHVzZSBrZWVwIDAgKi8KCVVJTlRfOCB1Y05zc09mVXNlcjE7CS8qIHplcm8tYmFzZSA6IDB+MSBtZWFucyB1ZXNyMCB1c2UgMX4yIHNzICwgaWYgbm8gdXNlIGtlZXAgMCAqLwoJVUlOVF84IHVjUGZNdUlkT2ZVc2VyMDsJLyogemVyby1iYXNlIDogZm9yIG5vdywgdWVzcjAgdXNlIHBmIG11IGlkIDAgKi8KCVVJTlRfOCB1Y1BmTXVJZE9mVXNlcjE7CS8qIHplcm8tYmFzZSA6IGZvciBub3csIHVlc3IxIHVzZSBwZiBtdSBpZCAxICovCglVSU5UXzggdWNOdW1PZlR4ZXI7CS8qIDB+MzogbWVhbiB1c2UgMX40IGFubnRhaW4sIGZvciBub3csIHNob3VsZCBmaXggMyAqLwoJVUlOVF84IHVjU3BlSW5kZXg7CS8qYWRkIG5ldyBmaWVsZCB0byBmaWxsoadzcGVjaWFsIGV4dGVuc2lvbiBpbmRleKGod2hpY2ggcmVwbGFjZSByZXNlcnZlICovCglVSU5UXzMyIHU0R3JvdXBJbmRleDsJLyogMH4gOnRoZSBpbmRleCBvZiBncm91cCB0YWJsZSBlbnRyeSBmb3IgY2FsY3VsYXRpb24gKi8KfSBNVV9TRVRfSU5JVF9NQ1NfVCwgKlBfTVVfU0VUX0lOSVRfTUNTX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfTVVfU0VUX0NBTENfTFFfVCB7CglVSU5UXzggdWNOdW1PZlVzZXI7CS8qIHplcm8tYmFzZSA6IDB+MzogbWVhbnMgMX4yIHVzZXJzICovCglVSU5UXzggdWNCYW5kd2lkdGg7CS8qIHplcm8tYmFzZSA6IDA6MjAgaHogMTo0MCBoeiAyOiA4MCBoeiAzOiAxNjAgKi8KCVVJTlRfOCB1Y05zc09mVXNlcjA7CS8qIHplcm8tYmFzZSA6IDB+MSBtZWFucyB1ZXNyMCB1c2UgMX4yIHNzICwgaWYgbm8gdXNlIGtlZXAgMCAqLwoJVUlOVF84IHVjTnNzT2ZVc2VyMTsJLyogemVyby1iYXNlIDogMH4xIG1lYW5zIHVlc3IwIHVzZSAxfjIgc3MgLCBpZiBubyB1c2Uga2VlcCAwICovCglVSU5UXzggdWNQZk11SWRPZlVzZXIwOwkvKiB6ZXJvLWJhc2UgOiBmb3Igbm93LCB1ZXNyMCB1c2UgcGYgbXUgaWQgMCAqLwoJVUlOVF84IHVjUGZNdUlkT2ZVc2VyMTsJLyogemVyby1iYXNlIDogZm9yIG5vdywgdWVzcjEgdXNlIHBmIG11IGlkIDEgKi8KCVVJTlRfOCB1Y051bU9mVHhlcjsJLyogMH4zOiBtZWFuIHVzZSAxfjQgYW5udGFpbiwgZm9yIG5vdywgc2hvdWxkIGZpeCAzICovCglVSU5UXzggdWNTcGVJbmRleDsJLyphZGQgbmV3IGZpZWxkIHRvIGZpbGyhp3NwZWNpYWwgZXh0ZW5zaW9uIGluZGV4oah3aGljaCByZXBsYWNlIHJlc2VydmUgKi8KCVVJTlRfMzIgdTRHcm91cEluZGV4OwkvKiAwfiA6dGhlIGluZGV4IG9mIGdyb3VwIHRhYmxlIGVudHJ5IGZvciBjYWxjdWxhdGlvbiAqLwp9IE1VX1NFVF9DQUxDX0xRX1QsICpQX01VX1NFVF9DQUxDX0xRX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfTVVfR0VUX0xRX1QgewoJVUlOVF84IHVjVHlwZTsKCVVJTlRfOCB1Y1JzdlszXTsKfSBNVV9HRVRfTFFfVCwgKlBfTVVfR0VUX0xRX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfTVVfU0VUX1NOUl9PRkZTRVRfVCB7CglVSU5UXzggdWNWYWw7CglVSU5UXzggdWNSc3ZbM107Cn0gTVVfU0VUX1NOUl9PRkZTRVRfVCwgKlBfTVVfU0VUX1NOUl9PRkZTRVRfVDsKCnR5cGVkZWYgc3RydWN0IF9NVV9TRVRfWkVST19OU1NfVCB7CglVSU5UXzggdWNWYWw7CglVSU5UXzggdWNSc3ZbM107Cn0gTVVfU0VUX1pFUk9fTlNTX1QsICpQX01VX1NFVF9aRVJPX05TU19UOwoKdHlwZWRlZiBzdHJ1Y3QgX01VX1NQRUVEX1VQX0xRX1QgewoJVUlOVF8zMiB1NFZhbDsKfSBNVV9TUEVFRF9VUF9MUV9ULCAqUF9NVV9TUEVFRF9VUF9MUV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX01VX1NFVF9NVV9UQUJMRV9UIHsKCS8qIFVJTlRfMTYgIHUyVHlwZTsgKi8KCS8qIFVJTlRfMzIgIHU0TGVuZ3RoOyAqLwoJVUlOVF84IGF1Y01ldHJpY1RhYmxlW05VTV9NVVRfTlJfTlVNICogTlVNX01VVF9GRUMgKiBOVU1fTVVUX01DUyAqIE5VTV9NVVRfSU5ERVhdOwp9IE1VX1NFVF9NVV9UQUJMRV9ULCAqUF9NVV9TRVRfTVVfVEFCTEVfVDsKCnR5cGVkZWYgc3RydWN0IF9NVV9TRVRfR1JPVVBfVCB7CglVSU5UXzMyIHU0R3JvdXBJbmRleDsJLyogR3JvdXAgVGFibGUgSWR4ICovCglVSU5UXzMyIHU0TnVtT2ZVc2VyOwoJVUlOVF8zMiB1NFVzZXIwTGRwYzsKCVVJTlRfMzIgdTRVc2VyMUxkcGM7CglVSU5UXzMyIHU0U2hvcnRHSTsKCVVJTlRfMzIgdTRCdzsKCVVJTlRfMzIgdTRVc2VyME5zczsKCVVJTlRfMzIgdTRVc2VyMU5zczsKCVVJTlRfMzIgdTRHcm91cElkOwoJVUlOVF8zMiB1NFVzZXIwVVA7CglVSU5UXzMyIHU0VXNlcjFVUDsKCVVJTlRfMzIgdTRVc2VyME11UGZJZDsKCVVJTlRfMzIgdTRVc2VyMU11UGZJZDsKCVVJTlRfMzIgdTRVc2VyMEluaXRNQ1M7CglVSU5UXzMyIHU0VXNlcjFJbml0TUNTOwoJVUlOVF84IGF1Y1VzZXIwTWFjQWRkcltQQVJBTV9NQUNfQUREUl9MRU5dOwoJVUlOVF84IGF1Y1VzZXIxTWFjQWRkcltQQVJBTV9NQUNfQUREUl9MRU5dOwp9IE1VX1NFVF9HUk9VUF9ULCAqUF9NVV9TRVRfR1JPVVBfVDsKCnR5cGVkZWYgc3RydWN0IF9NVV9HRVRfUURfVCB7CglVSU5UXzggdWNTdWJjYXJyaWVySW5kZXg7CgkvKiBVSU5UXzMyIHU0TGVuZ3RoOyAqLwoJLyogVUlOVF84ICpwclFkOyAqLwp9IE1VX0dFVF9RRF9ULCAqUF9NVV9HRVRfUURfVDsKCnR5cGVkZWYgc3RydWN0IF9NVV9TRVRfRU5BQkxFX1QgewoJVUlOVF84IHVjVmFsOwoJVUlOVF84IHVjUnN2WzNdOwp9IE1VX1NFVF9FTkFCTEVfVCwgKlBfTVVfU0VUX0VOQUJMRV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX01VX1NFVF9HSURfVVBfVCB7CglVSU5UXzMyIGF1NEdpZFsyXTsKCVVJTlRfMzIgYXU0VXBbNF07Cn0gTVVfU0VUX0dJRF9VUF9ULCAqUF9NVV9TRVRfR0lEX1VQX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfTVVfVFJJR0dFUl9NVV9UWF9UIHsKCVVJTlRfOCAgZmdJc1JhbmRvbVBhdHRlcm47IC8qIGlzIHJhbmRvbSBwYXR0ZXJuIG9yIG5vdCAqLwoJVUlOVF8zMiB1NE1zZHVQYXlsb2FkTGVuZ3RoMDsgLyogcGF5bG9hZCBsZW5ndGggb2YgdGhlIE1TRFUgZm9yIHVzZXIgMCAqLwoJVUlOVF8zMiB1NE1zZHVQYXlsb2FkTGVuZ3RoMTsgLyogcGF5bG9hZCBsZW5ndGggb2YgdGhlIE1TRFUgZm9yIHVzZXIgMSAqLwoJVUlOVF8zMiB1NE11UGFja2V0Q291bnQ7IC8qIE1VIFRYIGNvdW50ICovCglVSU5UXzMyIHU0TnVtT2ZTVEFzOyAvKiBudW1iZXIgb2YgdXNlciBpbiB0aGUgTVUgVFggKi8KCVVJTlRfOCAgIGF1Y01hY0FkZHJzWzJdWzZdOyAvKiBNQUMgYWRkcmVzcyBvZiB1c2VycyovCn0gTVVfVFJJR0dFUl9NVV9UWF9ULCAqUF9NVV9UUklHR0VSX01VX1RYX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX01VTUlNT19BQ1RJT05fU1RSVUNUX1QgewoJVUlOVF84IHVjTXVNaW1vQ2F0ZWdvcnk7CglVSU5UXzggYXVjUnN2WzNdOwoJdW5pb24gewoJCU1VX0dFVF9DQUxDX0lOSVRfTUNTX1Qgck11R2V0Q2FsY0luaXRNY3M7CgkJTVVfU0VUX0lOSVRfTUNTX1Qgck11U2V0SW5pdE1jczsKCQlNVV9TRVRfQ0FMQ19MUV9UIHJNdVNldENhbGNMcTsKCQlNVV9HRVRfTFFfVCByTXVHZXRMcTsKCQlNVV9TRVRfU05SX09GRlNFVF9UIHJNdVNldFNuck9mZnNldDsKCQlNVV9TRVRfWkVST19OU1NfVCByTXVTZXRaZXJvTnNzOwoJCU1VX1NQRUVEX1VQX0xRX1Qgck11U3BlZWRVcExxOwoJCU1VX1NFVF9NVV9UQUJMRV9UIHJNdVNldE11VGFibGU7CgkJTVVfU0VUX0dST1VQX1Qgck11U2V0R3JvdXA7CgkJTVVfR0VUX1FEX1Qgck11R2V0UWQ7CgkJTVVfU0VUX0VOQUJMRV9UIHJNdVNldEVuYWJsZTsKCQlNVV9TRVRfR0lEX1VQX1Qgck11U2V0R2lkVXA7CgkJTVVfVFJJR0dFUl9NVV9UWF9UIHJNdVRyaWdnZXJNdVR4OwoJfSB1bk11TWltb1BhcmFtOwp9IFBBUkFNX0NVU1RPTV9NVU1JTU9fQUNUSU9OX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fTVVNSU1PX0FDVElPTl9TVFJVQ1RfVDsKI2VuZGlmIC8qIENGR19TVVBQT1JUX01VX01JTU8gKi8KI2VuZGlmIC8qIENGR19TVVBQT1JUX1RYX0JGICovCiNlbmRpZiAvKiBDRkdfU1VQUE9SVF9RQV9UT09MICovCgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX01FTV9EVU1QX1NUUlVDVF9UIHsKCVVJTlRfMzIgdTRBZGRyZXNzOwoJVUlOVF8zMiB1NExlbmd0aDsKCVVJTlRfMzIgdTRSZW1haW5MZW5ndGg7CiNpZiBDRkdfU1VQUE9SVF9RQV9UT09MCglVSU5UXzMyIHU0SWNhcENvbnRlbnQ7CiNlbmRpZgkJCQkvKiBDRkdfU1VQUE9SVF9RQV9UT09MICovCglVSU5UXzggdWNGcmFnTnVtOwp9IFBBUkFNX0NVU1RPTV9NRU1fRFVNUF9TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX01FTV9EVU1QX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9TV19DVFJMX1NUUlVDVF9UIHsKCVVJTlRfMzIgdTRJZDsKCVVJTlRfMzIgdTREYXRhOwp9IFBBUkFNX0NVU1RPTV9TV19DVFJMX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fU1dfQ1RSTF9TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fQ0hJUF9DT05GSUdfU1RSVUNUX1QgewoJVUlOVF8xNiB1MklkOwoJVUlOVF84IHVjVHlwZTsKCVVJTlRfOCB1Y1Jlc3BUeXBlOwoJVUlOVF8xNiB1Mk1zZ1NpemU7CglVSU5UXzggYXVjUmVzZXJ2ZWQwWzJdOwoJVUlOVF84IGF1Y0NtZFtDSElQX0NPTkZJR19SRVNQX1NJWkVdOwp9IFBBUkFNX0NVU1RPTV9DSElQX0NPTkZJR19TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX0NISVBfQ09ORklHX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9LRVlfQ0ZHX1NUUlVDVF9UIHsKCVVJTlRfOCBhdWNLZXlbV0xBTl9DRkdfS0VZX0xFTl9NQVhdOwoJVUlOVF84IGF1Y1ZhbHVlW1dMQU5fQ0ZHX1ZBTFVFX0xFTl9NQVhdOwp9IFBBUkFNX0NVU1RPTV9LRVlfQ0ZHX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fS0VZX0NGR19TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fRUVQUk9NX1JXX1NUUlVDVF9UIHsKCVVJTlRfOCB1Y0VlcHJvbU1ldGhvZDsJLyogRm9yIHJlYWQgb25seSByZWFkOiAxLCBxdWVyeSBzaXplOiAwICovCglVSU5UXzggdWNFZXByb21JbmRleDsKCVVJTlRfOCByZXNlcnZlZDsKCVVJTlRfMTYgdTJFZXByb21EYXRhOwp9IFBBUkFNX0NVU1RPTV9FRVBST01fUldfU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9FRVBST01fUldfU1RSVUNUX1QsClBBUkFNX0NVU1RPTV9OVlJBTV9SV19TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX05WUkFNX1JXX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9XTU1fUFNfVEVTVF9TVFJVQ1RfVCB7CglVSU5UXzggYm1mZ0Fwc2RFbkFjOwkvKiBiMH4zOiB0cmlnZ2VyLWVuIEFDMH4zLiBiNH43OiBkZWxpdmVyeS1lbiBBQzB+MyAqLwoJVUlOVF84IHVjSXNFbnRlclBzQXRPbmNlOwkvKiBlbnRlciBQUyBpbW1lZGlhdGVseSB3aXRob3V0IDUgc2Vjb25kIGd1YXJkIGFmdGVyIGNvbm5lY3RlZCAqLwoJVUlOVF84IHVjSXNEaXNhYmxlVWNUcmlnZ2VyOwkvKiBub3QgdG8gdHJpZ2dlciBVQyBvbiBiZWFjb24gVElNIGlzIG1hdGNoZWQgKHVuZGVyIFUtQVBTRCkgKi8KCVVJTlRfOCByZXNlcnZlZDsKfSBQQVJBTV9DVVNUT01fV01NX1BTX1RFU1RfU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9XTU1fUFNfVEVTVF9TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fTk9BX1BBUkFNX1NUUlVDVF9UIHsKCVVJTlRfMzIgdTROb2FEdXJhdGlvbk1zOwoJVUlOVF8zMiB1NE5vYUludGVydmFsTXM7CglVSU5UXzMyIHU0Tm9hQ291bnQ7CglVSU5UXzggdWNCc3NJZHg7Cn0gUEFSQU1fQ1VTVE9NX05PQV9QQVJBTV9TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX05PQV9QQVJBTV9TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fT1BQUFNfUEFSQU1fU1RSVUNUX1QgewoJVUlOVF84IHVjQnNzSWR4OwoJVUlOVF84IHVjTGVnY3lQUzsKCVVJTlRfOCB1Y09wcFBzOwoJVUlOVF84IGF1Y1Jlc3ZbMV07CglVSU5UXzMyIHU0Q1R3aW5kb3dNczsKfSBQQVJBTV9DVVNUT01fT1BQUFNfUEFSQU1fU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9PUFBQU19QQVJBTV9TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fVUFQU0RfUEFSQU1fU1RSVUNUX1QgewoJVUlOVF84IHVjQnNzSWR4OwoJVUlOVF84IGZnRW5BUFNEOwoJVUlOVF84IGZnRW5BUFNEX0FjQmU7CglVSU5UXzggZmdFbkFQU0RfQWNCazsKCVVJTlRfOCBmZ0VuQVBTRF9BY1ZvOwoJVUlOVF84IGZnRW5BUFNEX0FjVmk7CglVSU5UXzggdWNNYXhTcExlbjsKCVVJTlRfOCBhdWNSZXN2WzJdOwp9IFBBUkFNX0NVU1RPTV9VQVBTRF9QQVJBTV9TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX1VBUFNEX1BBUkFNX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9QMlBfU0VUX1NUUlVDVF9UIHsKCVVJTlRfMzIgdTRFbmFibGU7CglVSU5UXzMyIHU0TW9kZTsKfSBQQVJBTV9DVVNUT01fUDJQX1NFVF9TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX1AyUF9TRVRfU1RSVUNUX1Q7Cgp0eXBlZGVmIGVudW0gX0VOVU1fQ0ZHX1NSQ19UWVBFX1QgewoJQ0ZHX1NSQ19UWVBFX0VFUFJPTSwKCUNGR19TUkNfVFlQRV9OVlJBTSwKCUNGR19TUkNfVFlQRV9VTktOT1dOLAoJQ0ZHX1NSQ19UWVBFX05VTQp9IEVOVU1fQ0ZHX1NSQ19UWVBFX1QsICpQX0VOVU1fQ0ZHX1NSQ19UWVBFX1Q7Cgp0eXBlZGVmIGVudW0gX0VOVU1fRUVQUk9NX1RZUEVfVCB7CglFRVBST01fVFlQRV9OTywKCUVFUFJPTV9UWVBFX1BSRVNFTlQsCglFRVBST01fVFlQRV9OVU0KfSBFTlVNX0VFUFJPTV9UWVBFX1QsICpQX0VOVU1fRUVQUk9NX1RZUEVfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9RT1NfVFNJTkZPIHsKCVVJTlRfOCB1Y1RyYWZmaWNUeXBlOwkvKiBUcmFmZmljIFR5cGU6IDEgZm9yIGlzb2Nocm9ub3VzIDAgZm9yIGFzeW5jaHJvbm91cyAqLwoJVUlOVF84IHVjVGlkOwkJLyogVFNJRDogbXVzdCBiZSBiZXR3ZWVuIDggfiAxNSAqLwoJVUlOVF84IHVjRGlyZWN0aW9uOwkvKiBkaXJlY3Rpb24gKi8KCVVJTlRfOCB1Y0FjY2Vzc1BvbGljeTsJLyogYWNjZXNzIHBvbGljeSAqLwoJVUlOVF84IHVjQWdncmVnYXRpb247CS8qIGFnZ3JlZ2F0aW9uICovCglVSU5UXzggdWNBcHNkOwkJLyogQVBTRCAqLwoJVUlOVF84IHVjdXNlclByaW9yaXR5OwkvKiB1c2VyIHByaW9yaXR5ICovCglVSU5UXzggdWNUc0luZm9BY2tQb2xpY3k7CS8qIFRTSU5GTyBBQ0sgcG9saWN5ICovCglVSU5UXzggdWNTY2hlZHVsZTsJLyogU2NoZWR1bGUgKi8KfSBQQVJBTV9RT1NfVFNJTkZPLCAqUF9QQVJBTV9RT1NfVFNJTkZPOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1FPU19UU1BFQyB7CglQQVJBTV9RT1NfVFNJTkZPIHJUc0luZm87CS8qIFRTIGluZm8gZmllbGQgKi8KCVVJTlRfMTYgdTJOb21pbmFsTVNEVVNpemU7CS8qIG5vbWluYWwgTVNEVSBzaXplICovCglVSU5UXzE2IHUyTWF4TVNEVXNpemU7CS8qIG1heGltdW0gTVNEVSBzaXplICovCglVSU5UXzMyIHU0TWluU3ZjSW50djsJLyogbWluaW11bSBzZXJ2aWNlIGludGVydmFsICovCglVSU5UXzMyIHU0TWF4U3ZjSW50djsJLyogbWF4aW11bSBzZXJ2aWNlIGludGVydmFsICovCglVSU5UXzMyIHU0SW5hY3RJbnR2OwkvKiBpbmFjdGl2aXR5IGludGVydmFsICovCglVSU5UXzMyIHU0U3BzSW50djsJLyogc3VzcGVuc2lvbiBpbnRlcnZhbCAqLwoJVUlOVF8zMiB1NFN2Y1N0YXJ0VGltZTsJLyogc2VydmljZSBzdGFydCB0aW1lICovCglVSU5UXzMyIHU0TWluRGF0YVJhdGU7CS8qIG1pbmltdW0gRGF0YSByYXRlICovCglVSU5UXzMyIHU0TWVhbkRhdGFSYXRlOwkvKiBtZWFuIGRhdGEgcmF0ZSAqLwoJVUlOVF8zMiB1NFBlYWtEYXRhUmF0ZTsJLyogcGVhayBkYXRhIHJhdGUgKi8KCVVJTlRfMzIgdTRNYXhCdXJzdFNpemU7CS8qIG1heGltdW0gYnVyc3Qgc2l6ZSAqLwoJVUlOVF8zMiB1NERlbGF5Qm91bmQ7CS8qIGRlbGF5IGJvdW5kICovCglVSU5UXzMyIHU0TWluUEhZUmF0ZTsJLyogbWluaW11bSBQSFkgcmF0ZSAqLwoJVUlOVF8xNiB1MlNiYTsJCS8qIHN1cnBsdXMgYmFuZHdpZHRoIGFsbG93YW5jZSAqLwoJVUlOVF8xNiB1Mk1lZGl1bVRpbWU7CS8qIG1lZGl1bSB0aW1lICovCn0gUEFSQU1fUU9TX1RTUEVDLCAqUF9QQVJBTV9RT1NfVFNQRUM7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fUU9TX0FERFRTX1JFUV9JTkZPIHsKCVBBUkFNX1FPU19UU1BFQyByVHNwZWM7Cn0gUEFSQU1fUU9TX0FERFRTX1JFUV9JTkZPLCAqUF9QQVJBTV9RT1NfQUREVFNfUkVRX0lORk87Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fVk9JUF9DT05GSUcgewoJVUlOVF8zMiB1NFZvaXBUcmFmZmljSW50ZXJ2YWw7CS8qIDA6IGRpc2FibGUgVk9JUCBjb25maWd1cmF0aW9uICovCn0gUEFSQU1fVk9JUF9DT05GSUcsICpQX1BBUkFNX1ZPSVBfQ09ORklHOwoKLyo4MDIuMTEgU3RhdGlzdGljcyBTdHJ1Y3QqLwp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fODAyXzExX1NUQVRJU1RJQ1NfU1RSVUNUX1QgewoJVUlOVF8zMiB1NExlbmd0aDsJLyogTGVuZ3RoIG9mIHN0cnVjdHVyZSAqLwoJTEFSR0VfSU5URUdFUiByVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50OwoJTEFSR0VfSU5URUdFUiByTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50OwoJTEFSR0VfSU5URUdFUiByRmFpbGVkQ291bnQ7CglMQVJHRV9JTlRFR0VSIHJSZXRyeUNvdW50OwoJTEFSR0VfSU5URUdFUiByTXVsdGlwbGVSZXRyeUNvdW50OwoJTEFSR0VfSU5URUdFUiByUlRTU3VjY2Vzc0NvdW50OwoJTEFSR0VfSU5URUdFUiByUlRTRmFpbHVyZUNvdW50OwoJTEFSR0VfSU5URUdFUiByQUNLRmFpbHVyZUNvdW50OwoJTEFSR0VfSU5URUdFUiByRnJhbWVEdXBsaWNhdGVDb3VudDsKCUxBUkdFX0lOVEVHRVIgclJlY2VpdmVkRnJhZ21lbnRDb3VudDsKCUxBUkdFX0lOVEVHRVIgck11bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudDsKCUxBUkdFX0lOVEVHRVIgckZDU0Vycm9yQ291bnQ7CglMQVJHRV9JTlRFR0VSIHJUS0lQTG9jYWxNSUNGYWlsdXJlczsKCUxBUkdFX0lOVEVHRVIgclRLSVBJQ1ZFcnJvcnM7CglMQVJHRV9JTlRFR0VSIHJUS0lQQ291bnRlck1lYXN1cmVzSW52b2tlZDsKCUxBUkdFX0lOVEVHRVIgclRLSVBSZXBsYXlzOwoJTEFSR0VfSU5URUdFUiByQ0NNUEZvcm1hdEVycm9yczsKCUxBUkdFX0lOVEVHRVIgckNDTVBSZXBsYXlzOwoJTEFSR0VfSU5URUdFUiByQ0NNUERlY3J5cHRFcnJvcnM7CglMQVJHRV9JTlRFR0VSIHJGb3VyV2F5SGFuZHNoYWtlRmFpbHVyZXM7CglMQVJHRV9JTlRFR0VSIHJXRVBVbmRlY3J5cHRhYmxlQ291bnQ7CglMQVJHRV9JTlRFR0VSIHJXRVBJQ1ZFcnJvckNvdW50OwoJTEFSR0VfSU5URUdFUiByRGVjcnlwdFN1Y2Nlc3NDb3VudDsKCUxBUkdFX0lOVEVHRVIgckRlY3J5cHRGYWlsdXJlQ291bnQ7Cn0gUEFSQU1fODAyXzExX1NUQVRJU1RJQ1NfU1RSVUNUX1QsICpQX1BBUkFNXzgwMl8xMV9TVEFUSVNUSUNTX1NUUlVDVF9UOwoKLyogTGludXggTmV0d29yayBEZXZpY2UgU3RhdGlzdGljcyBTdHJ1Y3QgKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0xJTlVYX05FVERFVl9TVEFUSVNUSUNTX1QgewoJVUlOVF8zMiB1NFJ4UGFja2V0czsKCVVJTlRfMzIgdTRUeFBhY2tldHM7CglVSU5UXzMyIHU0UnhCeXRlczsKCVVJTlRfMzIgdTRUeEJ5dGVzOwoJVUlOVF8zMiB1NFJ4RXJyb3JzOwoJVUlOVF8zMiB1NFR4RXJyb3JzOwoJVUlOVF8zMiB1NE11bHRpY2FzdDsKfSBQQVJBTV9MSU5VWF9ORVRERVZfU1RBVElTVElDU19ULCAqUF9QQVJBTV9MSU5VWF9ORVRERVZfU1RBVElTVElDU19UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX01US19XSUZJX1RFU1RfU1RSVUNUX1QgewoJVUlOVF8zMiB1NEZ1bmNJbmRleDsKCVVJTlRfMzIgdTRGdW5jRGF0YTsKfSBQQVJBTV9NVEtfV0lGSV9URVNUX1NUUlVDVF9ULCAqUF9QQVJBTV9NVEtfV0lGSV9URVNUX1NUUlVDVF9UOwoKLyogODAyLjExIE1lZGlhIHN0cmVhbSBjb25zdHJhaW50cyAqLwp0eXBlZGVmIGVudW0gX0VOVU1fTUVESUFfU1RSRUFNX01PREUgewoJRU5VTV9NRURJQV9TVFJFQU1fT0ZGLAoJRU5VTV9NRURJQV9TVFJFQU1fT04KfSBFTlVNX01FRElBX1NUUkVBTV9NT0RFLCAqUF9FTlVNX01FRElBX1NUUkVBTV9NT0RFOwoKLyogZm9yIE5ESVMgNS4xIE1lZGlhIFN0cmVhbWluZyBDaGFuZ2UgKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX01FRElBX1NUUkVBTUlOR19JTkRJQ0FUSU9OIHsKCVBBUkFNX1NUQVRVU19JTkRJQ0FUSU9OX1QgclN0YXR1czsKCUVOVU1fTUVESUFfU1RSRUFNX01PREUgZU1lZGlhU3RyZWFtTW9kZTsKfSBQQVJBTV9NRURJQV9TVFJFQU1JTkdfSU5ESUNBVElPTiwgKlBfUEFSQU1fTUVESUFfU1RSRUFNSU5HX0lORElDQVRJT047CgojZGVmaW5lIFBBUkFNX1BST1RPQ09MX0lEX0RFRkFVTFQgICAgICAgMHgwMAojZGVmaW5lIFBBUkFNX1BST1RPQ09MX0lEX1RDUF9JUCAgICAgICAgMHgwMgojZGVmaW5lIFBBUkFNX1BST1RPQ09MX0lEX0lQWCAgICAgICAgICAgMHgwNgojZGVmaW5lIFBBUkFNX1BST1RPQ09MX0lEX05CRiAgICAgICAgICAgMHgwNwojZGVmaW5lIFBBUkFNX1BST1RPQ09MX0lEX01BWCAgICAgICAgICAgMHgwRgojZGVmaW5lIFBBUkFNX1BST1RPQ09MX0lEX01BU0sgICAgICAgICAgMHgwRgoKLyogZm9yIE5ESVMgT0lEX0dFTl9ORVRXT1JLX0xBWUVSX0FERFJFU1NFUyAqLwp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fTkVUV09SS19BRERSRVNTX0lQIHsKCVVJTlRfMTYgc2luX3BvcnQ7CglVSU5UXzMyIGluX2FkZHI7CglVSU5UXzggc2luX3plcm9bOF07Cn0gUEFSQU1fTkVUV09SS19BRERSRVNTX0lQLCAqUF9QQVJBTV9ORVRXT1JLX0FERFJFU1NfSVA7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fTkVUV09SS19BRERSRVNTIHsKCVVJTlRfMTYgdTJBZGRyZXNzTGVuZ3RoOwkvKiBsZW5ndGggaW4gYnl0ZXMgb2YgQWRkcmVzc1tdIGluIHRoaXMgKi8KCVVJTlRfMTYgdTJBZGRyZXNzVHlwZTsJLyogdHlwZSBvZiB0aGlzIGFkZHJlc3MgKFBBUkFNX1BST1RPQ09MX0lEX1hYWCBhYm92ZSkgKi8KCVVJTlRfOCBhdWNBZGRyZXNzWzFdOwkvKiBhY3R1YWxseSBBZGRyZXNzTGVuZ3RoIGJ5dGVzIGxvbmcgKi8KfSBQQVJBTV9ORVRXT1JLX0FERFJFU1MsICpQX1BBUkFNX05FVFdPUktfQUREUkVTUzsKCi8qIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCB3aXRoIE9JRF9HRU5fTkVUV09SS19MQVlFUl9BRERSRVNTRVMgdG8gc2V0IG5ldHdvcmsgbGF5ZXIgYWRkcmVzc2VzIG9uIGFuIGludGVyZmFjZSAqLwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX05FVFdPUktfQUREUkVTU19MSVNUIHsKCVVJTlRfOCB1Y0Jzc0lkeDsKCVVJTlRfMzIgdTRBZGRyZXNzQ291bnQ7CS8qIG51bWJlciBvZiBhZGRyZXNzZXMgZm9sbG93aW5nICovCglVSU5UXzE2IHUyQWRkcmVzc1R5cGU7CS8qIHR5cGUgb2YgdGhpcyBhZGRyZXNzIChORElTX1BST1RPQ09MX0lEX1hYWCBhYm92ZSkgKi8KCVBBUkFNX05FVFdPUktfQUREUkVTUyBhckFkZHJlc3NbMV07CS8qIGFjdHVhbGx5IEFkZHJlc3NDb3VudCBlbGVtZW50cyBsb25nICovCn0gUEFSQU1fTkVUV09SS19BRERSRVNTX0xJU1QsICpQX1BBUkFNX05FVFdPUktfQUREUkVTU19MSVNUOwoKI2lmIENGR19TTFRfU1VQUE9SVAoKI2RlZmluZSBGSVhFRF9CV19MRzIwICAgICAgIDB4MDAwMAojZGVmaW5lIEZJWEVEX0JXX1VMMjAgICAgICAgMHgyMDAwCiNkZWZpbmUgRklYRURfQldfREw0MCAgICAgICAweDMwMDAKCiNkZWZpbmUgRklYRURfRVhUX0NITkxfVTIwICAweDQwMDAJLyogRm9yIEFHRyByZWdpc3Rlci4gKi8KI2RlZmluZSBGSVhFRF9FWFRfQ0hOTF9MMjAgIDB4QzAwMAkvKiBGb3IgQUdHIHJlZ3NpdGVyLiAqLwoKdHlwZWRlZiBlbnVtIF9FTlVNX01US19MUF9URVNUX01PREVfVCB7CglFTlVNX01US19MUF9URVNUX05PUk1BTCwKCUVOVU1fTVRLX0xQX1RFU1RfR09MREVOX1NBTVBMRSwKCUVOVU1fTVRLX0xQX1RFU1RfRFVULAoJRU5VTV9NVEtfTFBfVEVTVF9NT0RFX05VTQp9IEVOVU1fTVRLX0xQX1RFU1RfTU9ERV9ULCAqUF9FTlVNX01US19MUF9URVNUX01PREVfVDsKCnR5cGVkZWYgZW51bSBfRU5VTV9NVEtfU0xUX0ZVTkNfSURYX1QgewoJRU5VTV9NVEtfU0xUX0ZVTkNfRE9fTk9USElORywKCUVOVU1fTVRLX1NMVF9GVU5DX0lOSVRJQUwsCglFTlVNX01US19TTFRfRlVOQ19SQVRFX1NFVCwKCUVOVU1fTVRLX1NMVF9GVU5DX0xQX1NFVCwKCUVOVU1fTVRLX1NMVF9GVU5DX05VTQp9IEVOVU1fTVRLX1NMVF9GVU5DX0lEWF9ULCAqUF9FTlVNX01US19TTFRfRlVOQ19JRFhfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9NVEtfU0xUX0xQX1RFU1RfU1RSVUNUX1QgewoJRU5VTV9NVEtfTFBfVEVTVF9NT0RFX1QgckxwVGVzdE1vZGU7CglVSU5UXzMyIHU0QmNuUmN2TnVtOwp9IFBBUkFNX01US19TTFRfTFBfVEVTVF9TVFJVQ1RfVCwgKlBfUEFSQU1fTVRLX1NMVF9MUF9URVNUX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX01US19TTFRfVFJfVEVTVF9TVFJVQ1RfVCB7CglFTlVNX1BBUkFNX05FVFdPUktfVFlQRV9UIHJOZXR3b3JrVHlwZTsJLyogTmV0d29yayBUeXBlIE9GRE01RyBvciBPRkRNMi40RyAqLwoJVUlOVF8zMiB1NEZpeGVkUmF0ZTsJLyogRml4ZWQgUmF0ZSBpbmNsdWRpbmcgQlcgKi8KfSBQQVJBTV9NVEtfU0xUX1RSX1RFU1RfU1RSVUNUX1QsICpQX1BBUkFNX01US19TTFRfVFJfVEVTVF9TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9NVEtfU0xUX0lOSVRJQUxfU1RSVUNUX1QgewoJVUlOVF84IGF1Y1RhcmdldE1hY0FkZHJbUEFSQU1fTUFDX0FERFJfTEVOXTsKCVVJTlRfMTYgdTJTaXRlSUQ7Cn0gUEFSQU1fTVRLX1NMVF9JTklUSUFMX1NUUlVDVF9ULCAqUF9QQVJBTV9NVEtfU0xUX0lOSVRJQUxfU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fTVRLX1NMVF9URVNUX1NUUlVDVF9UIHsKCUVOVU1fTVRLX1NMVF9GVU5DX0lEWF9UIHJTbHRGdW5jSWR4OwoJVUlOVF8zMiB1NExlbmd0aDsJLyogTGVuZ3RoIG9mIHN0cnVjdHVyZSwgKi8KCQkJCS8qIGluY2x1ZGluZyBteXNlbGYgKi8KCVVJTlRfMzIgdTRGdW5jSW5mb0xlbjsJLyogSW5jbHVkZSBmb2xsb3dpbmcgY29udGVudCAqLwoJCQkJLyogZmllbGQgYW5kIG15c2VsZiAqLwoJdW5pb24gewoJCVBBUkFNX01US19TTFRfSU5JVElBTF9TVFJVQ1RfVCByTXRrSW5pdFRlc3Q7CgkJUEFSQU1fTVRLX1NMVF9MUF9URVNUX1NUUlVDVF9UIHJNdGtMcFRlc3Q7CgkJUEFSQU1fTVRLX1NMVF9UUl9URVNUX1NUUlVDVF9UIHJNdGtUUlRlc3Q7Cgl9IHVuRnVuY0luZm9Db250ZW50OwoKfSBQQVJBTV9NVEtfU0xUX1RFU1RfU1RSVUNUX1QsICpQX1BBUkFNX01US19TTFRfVEVTVF9TVFJVQ1RfVDsKCiNlbmRpZgoKI2lmIENGR19TVVBQT1JUX01TUAovKiBTaG91bGQgYnkgY2hpcCAqLwp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fU0VDX0NPTkZJR19UIHsKCUJPT0wgZmdXUElGbGFnOwoJQk9PTCBmZ1JWOwoJQk9PTCBmZ0lLVjsKCUJPT0wgZmdSS1Y7CgoJQk9PTCBmZ1JDSUQ7CglCT09MIGZnUkNBMTsKCUJPT0wgZmdSQ0EyOwoJQk9PTCBmZ0V2ZW5QTjsKCglVSU5UXzggdWNLZXlJRDsKCVVJTlRfOCB1Y01VQVJJZHg7CglVSU5UXzggdWNDaXBoZXJTdWl0OwoJVUlOVF84IGF1Y1Jlc2VydmVkWzFdOwp9IFBBUkFNX1NFQ19DT05GSUdfVCwgKlBfUEFSQU1fU0VDX0NPTkZJR19UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1RYX0NPTkZJR19UIHsKCVVJTlRfOCBhdWNQQVs2XTsKCUJPT0wgZmdTVzsKCUJPT0wgZmdEaXNSeEhkclRyYW47CgoJQk9PTCBmZ0FBRE9NOwoJVUlOVF84IHVjUEZNVUlkeDsKCVVJTlRfMTYgdTJQYXJ0aWFsQUlEOwoKCUJPT0wgZmdUSUJGOwoJQk9PTCBmZ1RFQkY7CglCT09MIGZnSXNIVDsKCUJPT0wgZmdJc1ZIVDsKCglCT09MIGZnTWVzaDsKCUJPT0wgZmdCQUZFbjsKCUJPT0wgZmdDRkFjazsKCUJPT0wgZmdSZGdCQTsKCglCT09MIGZnUkRHOwoJQk9PTCBmZ0lzUHdyTWd0OwoJQk9PTCBmZ1JUUzsKCUJPT0wgZmdTTVBTOwoKCUJPT0wgZmdUeG9wUFM7CglCT09MIGZnRG9ub3RVcGRhdGVJUFNNOwoJQk9PTCBmZ1NraXBUeDsKCUJPT0wgZmdMRFBDOwoKCUJPT0wgZmdJc1FvUzsKCUJPT0wgZmdJc0Zyb21EUzsKCUJPT0wgZmdJc1RvRFM7CglCT09MIGZnRHluQnc7CgoJQk9PTCBmZ0lzQU1TRFVDcm9zc0xHOwoJQk9PTCBmZ0NoZWNrUEVSOwoJQk9PTCBmZ0lzR0lENjM7CglVSU5UXzggYXVjUmVzZXJ2ZWRbMV07CgojaWYgKDEgLyogQ0ZHX1NVUFBPUlRfVkhUID09IDEgKi8pCglCT09MIGZnVmh0VElCRjsKCUJPT0wgZmdWaHRURUJGOwoJQk9PTCBmZ1ZodExEUEM7CglVSU5UXzggYXVjUmVzZXJ2ZWQyWzFdOwojZW5kaWYKfSBQQVJBTV9UWF9DT05GSUdfVCwgKlBfUEFSQU1fVFhfQ09ORklHX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fS0VZX0NPTkZJR19UIHsKCVVJTlRfOCAgICAgICAgICAgICAgICAgYXVjS2V5WzMyXTsKfSBQQVJBTV9LRVlfQ09ORklHX1QsICpQX1BBUkFNX0tFWV9DT05GSUdfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9QRUVSX1JBVEVfSU5GT19UIHsKCVVJTlRfOCAgICAgICAgICAgICAgICAgdWNDb3VudGVyTVBEVUZhaWw7CglVSU5UXzggICAgICAgICAgICAgICAgIHVjQ291bnRlck1QRFVUeDsKCVVJTlRfOCAgICAgICAgICAgICAgICAgdWNSYXRlSWR4OwoJVUlOVF84ICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkWzFdOwoKCVVJTlRfMTYgICAgICAgICAgICAgICAgYXUyUmF0ZUNvZGVbQVVUT19SQVRFX05VTV07Cn0gUEFSQU1fUEVFUl9SQVRFX0lORk9fVCwgKlBfUEFSQU1fUEVFUl9SQVRFX0lORk9fVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9QRUVSX0JBX0NPTkZJR19UIHsKCVVJTlRfOAkJCXVjQmFFbjsKCVVJTlRfOAkJCXVjUnN2WzNdOwoJVUlOVF8zMgkJCXU0QmFXaW5TaXplOwp9IFBBUkFNX1BFRVJfQkFfQ09ORklHX1QsICpQX1BBUkFNX1BFRVJfQkFfQ09ORklHX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQU5UX0lEX0NPTkZJR19UIHsKCVVJTlRfOAkJCXVjQU5USURTdHMwOwoJVUlOVF84CQkJdWNBTlRJRFN0czE7CglVSU5UXzgJCQl1Y0FOVElEU3RzMjsKCVVJTlRfOAkJCXVjQU5USURTdHMzOwp9IFBBUkFNX0FOVF9JRF9DT05GSUdfVCwgKlBfUEFSQU1fQU5UX0lEX0NPTkZJR19UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1BFRVJfQ0FQX1QgewoJUEFSQU1fQU5UX0lEX0NPTkZJR19UCXJBbnRJRENvbmZpZzsKCglVSU5UXzgJCQl1Y1R4UG93ZXJPZmZzZXQ7CglVSU5UXzgJCQl1Y0NvdW50ZXJCV1NlbGVjdG9yOwoJVUlOVF84CQkJdWNDaGFuZ2VCV0FmdGVyUmF0ZU47CglVSU5UXzgJCQl1Y0ZyZXF1ZW5jeUNhcGFiaWxpdHk7CglVSU5UXzgJCQl1Y1NwYXRpYWxFeHRlbnNpb25JbmRleDsKCglCT09MCQkJZmdHMjsKCUJPT0wJCQlmZ0c0OwoJQk9PTAkJCWZnRzg7CglCT09MCQkJZmdHMTY7CgoJVUlOVF84CQkJdWNNTVNTOwoJVUlOVF84CQkJdWNBbXBkdUZhY3RvcjsKCVVJTlRfOAkJCXVjUmVzZXJ2ZWRbMV07Cn0gUEFSQU1fUEVFUl9DQVBfVCwgKlBfUEFSQU1fUEVFUl9DQVBfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9QRUVSX1JYX0NPVU5URVJfQUxMX1QgewoJVUlOVF84CQkJdWNSeFJjcGkwOwoJVUlOVF84CQkJdWNSeFJjcGkxOwoJVUlOVF84CQkJdWNSeFJjcGkyOwoJVUlOVF84CQkJdWNSeFJjcGkzOwoKCVVJTlRfOAkJCXVjUnhDQzA7CglVSU5UXzgJCQl1Y1J4Q0MxOwoJVUlOVF84CQkJdWNSeENDMjsKCVVJTlRfOAkJCXVjUnhDQzM7CgoJQk9PTAkJCWZnUnhDQ1NlbDsKCVVJTlRfOAkJCXVjQ2VSbXNkOwoJVUlOVF84CQkJYXVjUmVzZXJ2ZWRbMl07Cn0gUEFSQU1fUEVFUl9SWF9DT1VOVEVSX0FMTF9ULCAqUF9QQVJBTV9QRUVSX1JYX0NPVU5URVJfQUxMX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fUEVFUl9UWF9DT1VOVEVSX0FMTF9UIHsKCVVJTlRfMTYgdTJSYXRlMVR4Q250OwoJVUlOVF8xNiB1MlJhdGUxRmFpbENudDsKCVVJTlRfMTYgdTJSYXRlMk9rQ250OwoJVUlOVF8xNiB1MlJhdGUzT2tDbnQ7CglVSU5UXzE2IHUyQ3VyQndUeENudDsKCVVJTlRfMTYgdTJDdXJCd0ZhaWxDbnQ7CglVSU5UXzE2IHUyT3RoZXJCd1R4Q250OwoJVUlOVF8xNiB1Mk90aGVyQndGYWlsQ250Owp9IFBBUkFNX1BFRVJfVFhfQ09VTlRFUl9BTExfVCwgKlBfUEFSQU1fUEVFUl9UWF9DT1VOVEVSX0FMTF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0hXX1dMQU5fSU5GT19UIHsKCVVJTlRfMzIJCQl1NEluZGV4OwoJUEFSQU1fVFhfQ09ORklHX1QJcld0YmxUeENvbmZpZzsKCVBBUkFNX1NFQ19DT05GSUdfVAlyV3RibFNlY0NvbmZpZzsKCVBBUkFNX0tFWV9DT05GSUdfVAlyV3RibEtleUNvbmZpZzsKCVBBUkFNX1BFRVJfUkFURV9JTkZPX1QJcld0YmxSYXRlSW5mbzsKCVBBUkFNX1BFRVJfQkFfQ09ORklHX1QgIHJXdGJsQmFDb25maWc7CglQQVJBTV9QRUVSX0NBUF9UCXJXdGJsUGVlckNhcDsKCVBBUkFNX1BFRVJfUlhfQ09VTlRFUl9BTExfVCByV3RibFJ4Q291bnRlcjsKCVBBUkFNX1BFRVJfVFhfQ09VTlRFUl9BTExfVCByV3RibFR4Q291bnRlcjsKfSBQQVJBTV9IV19XTEFOX0lORk9fVCwgKlBfUEFSQU1fSFdfV0xBTl9JTkZPX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfSFdfVFhfQU1QRFVfTUVUUklDU19UIHsKCVVJTlRfMzIgdTRUeFNmQ250OwoJVUlOVF8zMiB1NFR4QWNrU2ZDbnQ7CglVSU5UXzMyIHUyVHhBbXBkdUNudDsKCVVJTlRfMzIgdTJUeFJzcEJhQ250OwoJVUlOVF8xNiB1MlR4RWFybHlTdG9wQ250OwoJVUlOVF8xNiB1MlR4UmFuZ2UxQW1wZHVDbnQ7CglVSU5UXzE2IHUyVHhSYW5nZTJBbXBkdUNudDsKCVVJTlRfMTYgdTJUeFJhbmdlM0FtcGR1Q250OwoJVUlOVF8xNiB1MlR4UmFuZ2U0QW1wZHVDbnQ7CglVSU5UXzE2IHUyVHhSYW5nZTVBbXBkdUNudDsKCVVJTlRfMTYgdTJUeFJhbmdlNkFtcGR1Q250OwoJVUlOVF8xNiB1MlR4UmFuZ2U3QW1wZHVDbnQ7CglVSU5UXzE2IHUyVHhSYW5nZThBbXBkdUNudDsKCVVJTlRfMTYgdTJUeFJhbmdlOUFtcGR1Q250Owp9IEhXX1RYX0FNUERVX01FVFJJQ1NfVCwgKlBfSFdfVFhfQU1QRFVfTUVUUklDU19UOwoKdHlwZWRlZiBzdHJ1Y3QgX0hXX01JQl9DT1VOVEVSX1QgewoJVUlOVF8zMiB1NFJ4RmNzRXJyQ250OwoJVUlOVF8zMiB1NFJ4Rmlmb0Z1bGxDbnQ7CglVSU5UXzMyIHU0UnhNcGR1Q250OwoJVUlOVF8zMiB1NFJ4QU1QRFVDbnQ7CglVSU5UXzMyIHU0UnhUb3RhbEJ5dGU7CglVSU5UXzMyIHU0UnhWYWxpZEFNUERVU0Y7CglVSU5UXzMyIHU0UnhWYWxpZEJ5dGU7CglVSU5UXzMyIHU0Q2hhbm5lbElkbGVDbnQ7CglVSU5UXzMyIHU0UnhWZWN0b3JEcm9wQ250OwoJVUlOVF8zMiB1NERlbGltaXRlckZhaWxlZENudDsKCVVJTlRfMzIgdTRSeFZlY3Rvck1pc21hdGNoQ250OwoJVUlOVF8zMiB1NE1kcmR5Q250OwoJVUlOVF8zMiB1NENDS01kcmR5Q250OwoJVUlOVF8zMiB1NE9GRE1MR01peE1kcmR5OwoJVUlOVF8zMiB1NE9GRE1HcmVlbk1kcmR5OwoJVUlOVF8zMiB1NFBGRHJvcENudDsKCVVJTlRfMzIgdTRSeExlbk1pc21hdGNoQ250OwoJVUlOVF8zMiB1NFBDY2FUaW1lOwoJVUlOVF8zMiB1NFNDY2FUaW1lOwoJVUlOVF8zMiB1NENjYU5hdlR4OwoJVUlOVF8zMiB1NFBFRFRpbWU7CglVSU5UXzMyIHU0QmVhY29uVHhDbnQ7CglVSU5UXzMyIGF1NEJhTWlzc2VkQ250W0JTU0lEX05VTV07CglVSU5UXzMyIGF1NFJ0c1R4Q250W0JTU0lEX05VTV07CglVSU5UXzMyIGF1NEZyYW1lUmV0cnlDbnRbQlNTSURfTlVNXTsKCVVJTlRfMzIgYXU0RnJhbWVSZXRyeTJDbnRbQlNTSURfTlVNXTsKCVVJTlRfMzIgYXU0UnRzUmV0cnlDbnRbQlNTSURfTlVNXTsKCVVJTlRfMzIgYXU0QWNrRmFpbGVkQ250W0JTU0lEX05VTV07Cn0gSFdfTUlCX0NPVU5URVJfVCwgKlBfSFdfTUlCX0NPVU5URVJfVDsKCnR5cGVkZWYgc3RydWN0IF9IV19NSUIyX0NPVU5URVJfVCB7CglVSU5UXzMyIHU0VHg0ME1IekNudDsKCVVJTlRfMzIgdTRUeDgwTUh6Q250OwoJVUlOVF8zMiB1NFR4MTYwTUh6Q250Owp9IEhXX01JQjJfQ09VTlRFUl9ULCAqUF9IV19NSUIyX0NPVU5URVJfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9IV19NSUJfSU5GT19UIHsKCVVJTlRfMzIJCQl1NEluZGV4OwoJSFdfTUlCX0NPVU5URVJfVAlySHdNaWJDbnQ7CglIV19NSUIyX0NPVU5URVJfVAlySHdNaWIyQ250OwoJSFdfVFhfQU1QRFVfTUVUUklDU19UCXJId1R4QW1wZHVNdHM7Cn0gUEFSQU1fSFdfTUlCX0lORk9fVCwgKlBfUEFSQU1fSFdfTUlCX0lORk9fVDsKI2VuZGlmCgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qISBcYnJpZWYgRm9yIEZpeGVkIFJhdGUgQ29uZmlndXJhdGlvbiAoUmVnaXN0cnkpICAgICAgICAgICAgICAqLwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KdHlwZWRlZiBlbnVtIF9FTlVNX1JFR0lTVFJZX0ZJWEVEX1JBVEVfVCB7CglGSVhFRF9SQVRFX05PTkUsCglGSVhFRF9SQVRFXzFNLAoJRklYRURfUkFURV8yTSwKCUZJWEVEX1JBVEVfNV81TSwKCUZJWEVEX1JBVEVfMTFNLAoJRklYRURfUkFURV82TSwKCUZJWEVEX1JBVEVfOU0sCglGSVhFRF9SQVRFXzEyTSwKCUZJWEVEX1JBVEVfMThNLAoJRklYRURfUkFURV8yNE0sCglGSVhFRF9SQVRFXzM2TSwKCUZJWEVEX1JBVEVfNDhNLAoJRklYRURfUkFURV81NE0sCglGSVhFRF9SQVRFX01DUzBfMjBNXzgwME5TLAoJRklYRURfUkFURV9NQ1MxXzIwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTMl8yME1fODAwTlMsCglGSVhFRF9SQVRFX01DUzNfMjBNXzgwME5TLAoJRklYRURfUkFURV9NQ1M0XzIwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTNV8yME1fODAwTlMsCglGSVhFRF9SQVRFX01DUzZfMjBNXzgwME5TLAoJRklYRURfUkFURV9NQ1M3XzIwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTMF8yME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzFfMjBNXzQwME5TLAoJRklYRURfUkFURV9NQ1MyXzIwTV80MDBOUywKCUZJWEVEX1JBVEVfTUNTM18yME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzRfMjBNXzQwME5TLAoJRklYRURfUkFURV9NQ1M1XzIwTV80MDBOUywKCUZJWEVEX1JBVEVfTUNTNl8yME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzdfMjBNXzQwME5TLAoJRklYRURfUkFURV9NQ1MwXzQwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTMV80ME1fODAwTlMsCglGSVhFRF9SQVRFX01DUzJfNDBNXzgwME5TLAoJRklYRURfUkFURV9NQ1MzXzQwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTNF80ME1fODAwTlMsCglGSVhFRF9SQVRFX01DUzVfNDBNXzgwME5TLAoJRklYRURfUkFURV9NQ1M2XzQwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTN180ME1fODAwTlMsCglGSVhFRF9SQVRFX01DUzMyXzgwME5TLAoJRklYRURfUkFURV9NQ1MwXzQwTV80MDBOUywKCUZJWEVEX1JBVEVfTUNTMV80ME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzJfNDBNXzQwME5TLAoJRklYRURfUkFURV9NQ1MzXzQwTV80MDBOUywKCUZJWEVEX1JBVEVfTUNTNF80ME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzVfNDBNXzQwME5TLAoJRklYRURfUkFURV9NQ1M2XzQwTV80MDBOUywKCUZJWEVEX1JBVEVfTUNTN180ME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzMyXzQwME5TLAoJRklYRURfUkFURV9OVU0KfSBFTlVNX1JFR0lTVFJZX0ZJWEVEX1JBVEVfVCwgKlBfRU5VTV9SRUdJU1RSWV9GSVhFRF9SQVRFX1Q7Cgp0eXBlZGVmIGVudW0gX0VOVU1fQlRfQ01EX1QgewoJQlRfQ01EX1BST0ZJTEUgPSAwLAoJQlRfQ01EX1VQREFURSwKCUJUX0NNRF9OVU0KfSBFTlVNX0JUX0NNRF9UOwoKdHlwZWRlZiBlbnVtIF9FTlVNX0JUX1BST0ZJTEVfVCB7CglCVF9QUk9GSUxFX0NVU1RPTSA9IDAsCglCVF9QUk9GSUxFX1NDTywKCUJUX1BST0ZJTEVfQUNMLAoJQlRfUFJPRklMRV9NSVhFRCwKCUJUX1BST0ZJTEVfTk9fQ09OTkVDVElPTiwKCUJUX1BST0ZJTEVfTlVNCn0gRU5VTV9CVF9QUk9GSUxFX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUFRBX1BST0ZJTEVfVCB7CglFTlVNX0JUX1BST0ZJTEVfVCBlQnRQcm9maWxlOwoJdW5pb24gewoJCVVJTlRfOCBhdWNCVFBQYXJhbXNbQlRfUFJPRklMRV9QQVJBTV9MRU5dOwoJCS8qICAwOiBzY28gcmVzZXJ2ZWQgc2xvdCB0aW1lLAoJCSogIDE6IHNjbyBpZGxlIHNsb3QgdGltZSwKCQkqICAyOiBhY2wgdGhyb3VnaHB1dCwKCQkqICAgMzogYnQgdHggcG93ZXIsCgkJKiAgIDQ6IGJ0IHJzc2kKCQkqICAgNTogVm9JUCBpbnRlcnZhbAoJCSogICA2OiBCSVQoMCkgVXNlIHRoaXMgZmllbGQsIEJJVCgxKSAwIGFwcGx5IHNpbmdsZS8gMSBkdWFsIFBUQSBzZXR0aW5nLgoJCSovCgkJVUlOVF8zMiBhdTRCdGNyWzRdOwoJfSB1Owp9IFBUQV9QUk9GSUxFX1QsICpQX1BUQV9QUk9GSUxFX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUFRBX0lQQ19UIHsKCVVJTlRfOCB1Y0NtZDsKCVVJTlRfOCB1Y0xlbjsKCXVuaW9uIHsKCQlQVEFfUFJPRklMRV9UIHJQcm9maWxlOwoJCVVJTlRfOCBhdWNCVFBQYXJhbXNbQlRfUFJPRklMRV9QQVJBTV9MRU5dOwoJfSB1Owp9IFBBUkFNX1BUQV9JUENfVCwgKlBfUEFSQU1fUFRBX0lQQ19ULCBQVEFfSVBDX1QsICpQX1BUQV9JUENfVDsKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiEgXGJyaWVmIENGRzgwMjExIFNjYW4gUmVxdWVzdCBDb250YWluZXIgICAgICAgICAgICAgICAgICAgICAgKi8KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9TQ0FOX1JFUVVFU1RfRVhUX1QgewoJUEFSQU1fU1NJRF9UIHJTc2lkOwoJVUlOVF8zMiB1NElFTGVuZ3RoOwoJUFVJTlRfOCBwdWNJRTsKfSBQQVJBTV9TQ0FOX1JFUVVFU1RfRVhUX1QsICpQX1BBUkFNX1NDQU5fUkVRVUVTVF9FWFRfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9TQ0FOX1JFUVVFU1RfQURWX1QgewoJVUlOVF8zMiB1NFNzaWROdW07CglQQVJBTV9TU0lEX1QgclNzaWRbQ0ZHX1NDQU5fU1NJRF9NQVhfTlVNXTsKCVVJTlRfMzIgdTRJRUxlbmd0aDsKCVBVSU5UXzggcHVjSUU7Cn0gUEFSQU1fU0NBTl9SRVFVRVNUX0FEVl9ULCAqUF9QQVJBTV9TQ0FOX1JFUVVFU1RfQURWX1Q7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyohIFxicmllZiBDRkc4MDIxMSBTY2hlZHVsZWQgU2NhbiBSZXF1ZXN0IENvbnRhaW5lciAgICAgICAgICAgICovCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fU0NIRURfU0NBTl9SRVFVRVNUX1QgewoJVUlOVF8zMiB1NFNzaWROdW07CglQQVJBTV9TU0lEX1QgYXJTc2lkW0NGR19TQ0FOX1NTSURfTUFUQ0hfTUFYX05VTV07CglVSU5UXzMyIHU0SUVMZW5ndGg7CglQVUlOVF84IHB1Y0lFOwoJVUlOVF8xNiB1MlNjYW5JbnRlcnZhbDsJLyogaW4gbWlsbGlzZWNvbmRzICovCn0gUEFSQU1fU0NIRURfU0NBTl9SRVFVRVNULCAqUF9QQVJBTV9TQ0hFRF9TQ0FOX1JFUVVFU1Q7CgojaWYgQ0ZHX1NVUFBPUlRfUEFTU1BPSU5UCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9IUzIwX1NFVF9CU1NJRF9QT09MIHsKCUJPT0xFQU4gZmdJc0VuYWJsZTsKCVVJTlRfOCB1Y051bUJzc2lkUG9vbDsKCVBBUkFNX01BQ19BRERSRVNTIGFyQlNTSURbOF07Cn0gUEFSQU1fSFMyMF9TRVRfQlNTSURfUE9PTCwgKlBfUEFSQU1fSFMyMF9TRVRfQlNTSURfUE9PTDsKCiNlbmRpZiAvKiBDRkdfU1VQUE9SVF9QQVNTUE9JTlQgKi8KCiNpZiBDRkdfU1VQUE9SVF9TTklGRkVSCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fTU9OSVRPUl9TRVRfU1RSVUNUX1QgewoJVUlOVF84IHVjRW5hYmxlOwoJVUlOVF84IHVjQmFuZDsKCVVJTlRfOCB1Y1ByaUNoYW5uZWw7CglVSU5UXzggdWNTY287CglVSU5UXzggdWNDaGFubmVsV2lkdGg7CglVSU5UXzggdWNDaGFubmVsUzE7CglVSU5UXzggdWNDaGFubmVsUzI7CglVSU5UXzggYXVjUmVzdls5XTsKfSBQQVJBTV9DVVNUT01fTU9OSVRPUl9TRVRfU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9NT05JVE9SX1NFVF9TVFJVQ1RfVDsKI2VuZGlmCgojaWYgQ0ZHX0FVVE9fQ0hBTk5FTF9TRUxfU1VQUE9SVAovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyohIFxicmllZiBNVEsgQXV0byBDaGFubmVsIFNlbGVjdGlvbiByZWxhdGVkIENvbnRhaW5lciAgICAgICAgICovCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwp0eXBlZGVmIHN0cnVjdCBfTFRFX1NBRkVfQ0hOX0lORk9fVCB7CglVSU5UXzMyIGF1NFNhZmVDaGFubmVsQml0bWFza1s1XTsgLyogTkw4MDIxMV9URVNUTU9ERV9BVkFJTEFCTEVfQ0hBTl9BVFRSX01BWCAqLwp9IExURV9TQUZFX0NITl9JTkZPX1QsICpQX0NNRF9MVEVfU0FGRV9DSE5fSU5GT19UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NITl9MT0FEX0lORk8gewoJLyogUGVyLUNITiBMb2FkICovCglVSU5UXzggdWNDaGFubmVsOwoJVUlOVF8xNiB1MkFQTnVtOwoJVUlOVF8zMiB1NERpcnR5bmVzczsKCVVJTlRfOCB1Y1Jlc2VydmVkOwp9IFBBUkFNX0NITl9MT0FEX0lORk8sICpQX1BBUkFNX0NITl9MT0FEX0lORk87Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ0hOX1JBTktfSU5GTyB7CglVSU5UXzggdWNDaGFubmVsOwoJVUlOVF8zMiB1NERpcnR5bmVzczsKCVVJTlRfOCB1Y1Jlc2VydmVkOwp9IFBBUkFNX0NITl9SQU5LX0lORk8sICpQX1BBUkFNX0NITl9SQU5LX0lORk87Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fR0VUX0NITl9JTkZPIHsKCUxURV9TQUZFX0NITl9JTkZPX1Qgckx0ZVNhZmVDaG5MaXN0OwoJUEFSQU1fQ0hOX0xPQURfSU5GTyByRWFjaENobkxvYWRbTUFYX0NITl9OVU1dOwoJQk9PTEVBTiBmZ0RhdGFSZWFkeUJpdDsKCVBBUkFNX0NITl9SQU5LX0lORk8gckNoblJhbmtMaXN0W01BWF9DSE5fTlVNXTsKCVVJTlRfOCB1Y0F2YWlsQ2huTnVtOwoJVUlOVF84IGF1Y1Jlc2VydmVkWzNdOwp9IFBBUkFNX0dFVF9DSE5fSU5GTywgKlBfUEFSQU1fR0VUX0NITl9JTkZPOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1BSRUZFUl9DSE5fSU5GTyB7CglVSU5UXzggdWNDaGFubmVsOwoJVUlOVF8xNiB1MkFQTnVtU2NvcmU7CglVSU5UXzggdWNSZXNlcnZlZDsKfSBQQVJBTV9QUkVGRVJfQ0hOX0lORk8sICpQX1BBUkFNX1BSRUZFUl9DSE5fSU5GTzsKI2VuZGlmCgoKdHlwZWRlZiBzdHJ1Y3QgX1VNQUNfU1RBVDJfR0VUX1QgewoJVUlOVF8xNgl1MlBsZVJldlBnSGlmMEdyb3VwMDsKCVVJTlRfMTYJdTJQbGVSZXZQZ0NwdUdyb3VwMjsKCglVSU5UXzE2CXUyUHNlUmV2UGdIaWYwR3JvdXAwOwoJVUlOVF8xNgl1MlBzZVJldlBnSGlmMUdyb3VwMTsKCVVJTlRfMTYJdTJQc2VSZXZQZ0NwdUdyb3VwMjsKCVVJTlRfMTYJdTJQc2VSZXZQZ0xtYWMwR3JvdXAzOwoJVUlOVF8xNgl1MlBzZVJldlBnTG1hYzFHcm91cDQ7CglVSU5UXzE2CXUyUHNlUmV2UGdMbWFjMkdyb3VwNTsKCVVJTlRfMTYJdTJQc2VSZXZQZ1BsZUdyb3VwNjsKCglVSU5UXzE2CXUyUGxlU3J2UGdIaWYwR3JvdXAwOwoJVUlOVF8xNgl1MlBsZVNydlBnQ3B1R3JvdXAyOwoKCVVJTlRfMTYJdTJQc2VTcnZQZ0hpZjBHcm91cDA7CglVSU5UXzE2CXUyUHNlU3J2UGdIaWYxR3JvdXAxOwoJVUlOVF8xNgl1MlBzZVNydlBnQ3B1R3JvdXAyOwoJVUlOVF8xNgl1MlBzZVNydlBnTG1hYzBHcm91cDM7CglVSU5UXzE2CXUyUHNlU3J2UGdMbWFjMUdyb3VwNDsKCVVJTlRfMTYJdTJQc2VTcnZQZ0xtYWMyR3JvdXA1OwoJVUlOVF8xNgl1MlBzZVNydlBnUGxlR3JvdXA2OwoKCVVJTlRfMTYJdTJQbGVUb3RhbFBhZ2VOdW07CglVSU5UXzE2CXUyUGxlRnJlZVBhZ2VOdW07CglVSU5UXzE2CXUyUGxlRmZhTnVtOwoKCVVJTlRfMTYJdTJQc2VUb3RhbFBhZ2VOdW07CglVSU5UXzE2CXUyUHNlRnJlZVBhZ2VOdW07CglVSU5UXzE2CXUyUHNlRmZhTnVtOwp9IFVNQUNfU1RBVDJfR0VUX1QsICpQX1VNQUNfU1RBVDJfR0VUX1Q7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQIFUgQiBMIEkgQyAgIEQgQSBUIEEKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICAgICAgICAgICAgICAgICAgICAgICAgICBQIFIgSSBWIEEgVCBFICAgRCBBIFQgQQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0gQSBDIFIgTyBTCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqICAgICAgICAgICAgICAgICAgIEYgVSBOIEMgVCBJIE8gTiAgIEQgRSBDIEwgQSBSIEEgVCBJIE8gTiBTCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiovCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiBSb3V0aW5lcyB0byBzZXQgcGFyYW1ldGVycyBvciBxdWVyeSBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgKi8KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qKioqKiBSb3V0aW5lcyBpbiB3bGFuX29pZC5jICoqKioqLwpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlOZXR3b3JrVHlwZXNTdXBwb3J0ZWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkJICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeU5ldHdvcmtUeXBlSW5Vc2UoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldE5ldHdvcmtUeXBlSW5Vc2UoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5QnNzaWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0QnNzaWRMaXN0U2NhbihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCUlOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0QnNzaWRMaXN0U2NhbkV4dChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0QnNzaWRMaXN0U2NhbkFkdihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlCc3NpZExpc3QoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEJzc2lkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRDb25uZWN0KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0U3NpZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlTc2lkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlJbmZyYXN0cnVjdHVyZU1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0SW5mcmFzdHJ1Y3R1cmVNb2RlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5QXV0aE1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0QXV0aE1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgojaWYgMApXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlQcml2YWN5RmlsdGVyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRQcml2YWN5RmlsdGVyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKI2VuZGlmCgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RW5jcnlwdGlvblN0YXR1cyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlFbmNyeXB0aW9uU3RhdHVzKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEFkZFdlcChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0UmVtb3ZlV2VwKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRBZGRLZXkoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLCBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFJlbW92ZUtleShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0UmVsb2FkRGVmYXVsdHMoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRUZXN0KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUNhcGFiaWxpdHkoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUZyZXF1ZW5jeShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RnJlcXVlbmN5KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUF0aW1XaW5kb3coSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRBdGltV2luZG93KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0Q2hhbm5lbChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5UnNzaShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5UnNzaVRyaWdnZXIoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQlPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRSc3NpVHJpZ2dlcihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVJ0c1RocmVzaG9sZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRSdHNUaHJlc2hvbGQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5ODAyZG90MTFQb3dlclNhdmVQcm9maWxlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJCSAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXQ4MDJkb3QxMVBvd2VyU2F2ZVByb2ZpbGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkJICAgSU4gUFZPSUQgcHJTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVBta2lkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFBta2lkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVN1cHBvcnRlZFJhdGVzKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlEZXNpcmVkUmF0ZXMoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RGVzaXJlZFJhdGVzKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVBlcm1hbmVudEFkZHIoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgIElOIFBWT0lEIHB2UXVlcnlCdWYsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZkxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlDdXJyZW50QWRkcihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCUlOIFBWT0lEIHB2UXVlcnlCdWYsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZkxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlQZXJtYW5lbnRBZGRyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICBJTiBQVk9JRCBwdlF1ZXJ5QnVmLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5TGlua1NwZWVkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKI2lmIENGR19TVVBQT1JUX1FBX1RPT0wKI2lmIENGR19TVVBQT1JUX0JVRkZFUl9NT0RFCldMQU5fU1RBVFVTIHdsYW5vaWRTZXRFZnVzQnVmZmVyTW9kZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCQkgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgovKiNpZiAoQ0ZHX0VFUFJPTV9QQUdFX0FDQ0VTUyA9PSAxKSovCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVByb2Nlc3NBY2Nlc3NFZnVzZVJlYWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkJCUlOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlQcm9jZXNzQWNjZXNzRWZ1c2VXcml0ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCQkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUVmdXNlRnJlZUJsb2NrKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJCQlJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5R2V0VHhQb3dlcihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCQkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKLyojZW5kaWYqLwoKI2VuZGlmIC8qIENGR19TVVBQT1JUX0JVRkZFUl9NT0RFICovCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVJ4U3RhdGlzdGljcyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZEJzc0luZm9CYXNpYyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkRGV2SW5mb0FjdGl2ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZE1hbnVhbEFzc29jKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKI2lmIENGR19TVVBQT1JUX1RYX0JGCldMQU5fU1RBVFVTCndsYW5vaWRUeEJmQWN0aW9uKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sCgkJICBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CldMQU5fU1RBVFVTIHdsYW5vaWRNdU1pbW9BY3Rpb24oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLCBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwKCQkJCU9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKV0xBTl9TVEFUVVMgd2xhbm9pZFN0YVJlY1VwZGF0ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLAoJCQkJT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwpXTEFOX1NUQVRVUyB3bGFub2lkU3RhUmVjQkZVcGRhdGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLCBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwKCQkJCSAgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwojZW5kaWYgLyogQ0ZHX1NVUFBPUlRfVFhfQkYgKi8KI2VuZGlmIC8qIENGR19TVVBQT1JUX1FBX1RPT0wgKi8KCiNpZiBDRkdfU1VQUE9SVF9DQUxfUkVTVUxUX0JBQ0tVUF9UT19IT1NUCldMQU5fU1RBVFVTCndsYW5vaWRTZW5kQ2FsQmFja3VwVjJDbWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLCBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldENhbEJhY2t1cChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUNhbEJhY2t1cFYyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKI2VuZGlmCgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlNY3JSZWFkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeU1lbUR1bXAoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldE1jcldyaXRlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5RHJ2TWNyUmVhZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RHJ2TWNyV3JpdGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlTd0N0cmxSZWFkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRTd0N0cmxXcml0ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRDaGlwQ29uZmlnKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlDaGlwQ29uZmlnKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRLZXlDZmcoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLCBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5RWVwcm9tUmVhZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RWVwcm9tV3JpdGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlSZlRlc3RSeFN0YXR1cyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlSZlRlc3RUeFN0YXR1cyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlPaWRJbnRlcmZhY2VWZXJzaW9uKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJCUlOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlWZW5kb3JJZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeU11bHRpY2FzdExpc3QoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldE11bHRpY2FzdExpc3QoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQlJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5UmN2RXJyb3IoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVJjdk5vQnVmZmVyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVJjdkNyY0Vycm9yKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVN0YXRpc3RpY3MoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKI2lmZGVmIExJTlVYCgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlTdGF0aXN0aWNzRm9yTGludXgoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCiNlbmRpZgoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5TWVkaWFTdHJlYW1Nb2RlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0TWVkaWFTdHJlYW1Nb2RlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5UmN2T2soSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVhtaXRPayhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVhtaXRFcnJvcihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVhtaXRPbmVDb2xsaXNpb24oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlYbWl0TW9yZUNvbGxpc2lvbnMoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVhtaXRNYXhDb2xsaXNpb25zKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRDdXJyZW50UGFja2V0RmlsdGVyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUN1cnJlbnRQYWNrZXRGaWx0ZXIoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkJSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRBY3BpRGV2aWNlUG93ZXJTdGF0ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5QWNwaURldmljZVBvd2VyU3RhdGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkJIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RGlzYXNzb2NpYXRlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUZyYWdUaHJlc2hvbGQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEZyYWdUaHJlc2hvbGQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQlJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5QWRIb2NNb2RlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRBZEhvY01vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5QmVhY29uSW50ZXJ2YWwoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRCZWFjb25JbnRlcnZhbChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEN1cnJlbnRBZGRyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKI2lmIENGR19UQ1BfSVBfQ0hLU1VNX09GRkxPQUQKV0xBTl9TVEFUVVMKd2xhbm9pZFNldENTVU1PZmZsb2FkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwojZW5kaWYgLyogQ0ZHX1RDUF9JUF9DSEtTVU1fT0ZGTE9BRCAqLwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldE5ldHdvcmtBZGRyZXNzKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlNYXhGcmFtZVNpemUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlNYXhUb3RhbFNpemUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0Q3VycmVudExvb2thaGVhZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgovKiBSRiBUZXN0IHJlbGF0ZWQgQVBJcyAqLwpXTEFOX1NUQVRVUwp3bGFub2lkUmZ0ZXN0U2V0VGVzdE1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRSZnRlc3RTZXRUZXN0SWNhcE1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUmZ0ZXN0U2V0QWJvcnRUZXN0TW9kZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUmZ0ZXN0UXVlcnlBdXRvVGVzdChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFJmdGVzdFNldEF1dG9UZXN0KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJIE9VVCBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKI2lmIENGR19TVVBQT1JUX1dBUEkKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFdhcGlNb2RlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFdhcGlBc3NvY0luZm8oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQlJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFdhcGlLZXkoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKI2VuZGlmCgojaWYgQ0ZHX1NVUFBPUlRfV1BTMgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0V1NDQXNzb2NJbmZvKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKI2VuZGlmCgojaWYgQ0ZHX0VOQUJMRV9XQUtFVVBfT05fTEFOCldMQU5fU1RBVFVTCndsYW5vaWRTZXRBZGRXYWtldXBQYXR0ZXJuKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRSZW1vdmVXYWtldXBQYXR0ZXJuKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUVuYWJsZVdha2V1cChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEVuYWJsZVdha2V1cChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CiNlbmRpZgoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFdpRmlXbW1Qc1Rlc3QoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQlJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFR4QW1wZHUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRBZGRiYVJlamVjdChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeU52cmFtUmVhZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0TnZyYW1Xcml0ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5Q2ZnU3JjVHlwZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5RWVwcm9tVHlwZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldENvdW50cnlDb2RlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMgd2xhblNlbmRNZW1EdW1wQ21kKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuKTsKCiNpZiBDRkdfU0xUX1NVUFBPUlQKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVNMVFN0YXR1cyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkVXBkYXRlU0xUTW9kZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKI2VuZGlmCgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlXbGFuSW5mbyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCglPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeU1pYkluZm8oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RndMb2cySG9zdCgKCUlOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCUlOIFBWT0lEIHB2U2V0QnVmZmVyLAoJSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwKCU9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCiNpZiAwCldMQU5fU1RBVFVTCndsYW5vaWRTZXROb2FQYXJhbShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRPcHBQc1BhcmFtKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0VUFwc2RQYXJhbShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwojZW5kaWYKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCldMQU5fU1RBVFVTCndsYW5vaWRTZXRCVChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlCVChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkgICAgICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0VHhQb3dlcihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKI2lmIDAKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5QnRTaW5nbGVBbnRlbm5hKAoJSU4gIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCU9VVCBQVk9JRCAgICAgICBwdlF1ZXJ5QnVmZmVyLAoJSU4gIFVJTlRfMzIgICAgIHU0UXVlcnlCdWZmZXJMZW4sCglPVVQgUFVJTlRfMzIgICAgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRCdFNpbmdsZUFudGVubmEoCglJTiAgUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJSU4gIFBWT0lEICAgICAgIHB2U2V0QnVmZmVyLAoJSU4gIFVJTlRfMzIgICAgIHU0U2V0QnVmZmVyTGVuLAoJT1VUIFBVSU5UXzMyICAgIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFB0YSgKCUlOICBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCglJTiAgUFZPSUQgICAgICAgcHZTZXRCdWZmZXIsCglJTiAgVUlOVF8zMiAgICAgdTRTZXRCdWZmZXJMZW4sCglPVVQgUFVJTlRfMzIgICAgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlQdGEoCglJTiAgUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJT1VUIFBWT0lEICAgICAgIHB2UXVlcnlCdWZmZXIsCglJTiAgVUlOVF8zMiAgICAgdTRRdWVyeUJ1ZmZlckxlbiwKCU9VVCBQVUlOVF8zMiAgICBwdTRRdWVyeUluZm9MZW4pOwojZW5kaWYKCiNpZiBDRkdfRU5BQkxFX1dJRklfRElSRUNUCldMQU5fU1RBVFVTCndsYW5vaWRTZXRQMnBNb2RlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CiNlbmRpZgoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldERlZmF1bHRLZXkoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRHdGtSZWtleURhdGEoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFN0YXJ0U2NoZWRTY2FuKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0U3RvcFNjaGVkU2NhbihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCUlOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgojaWYgQ0ZHX00wVkVfQkFfVE9fRFJJVkVSCldMQU5fU1RBVFVTIHdsYW5vaWRSZXNldEJBU2NvcmVib2FyZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuKTsKI2VuZGlmCgojaWYgQ0ZHX1NVUFBPUlRfQkFUQ0hfU0NBTgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0QmF0Y2hTY2FuUmVxKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUJhdGNoU2NhblJlc3VsdChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKI2VuZGlmCgojaWYgQ0ZHX1NVUFBPUlRfUEFTU1BPSU5UCldMQU5fU1RBVFVTCndsYW5vaWRTZXRIUzIwSW5mbyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRJbnRlcndvcmtpbmdJbmZvKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRSb2FtaW5nQ29uc29ydGl1bUlFSW5mbyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCQkgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0SFMyMEJzc2lkUG9vbChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCUlOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CiNlbmRpZiAvKiBDRkdfU1VQUE9SVF9QQVNTUE9JTlQgKi8KCiNpZiBDRkdfU1VQUE9SVF9TTklGRkVSCldMQU5fU1RBVFVTIHdsYW5vaWRTZXRNb25pdG9yKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKI2VuZGlmCgpXTEFOX1NUQVRVUwp3bGFub2lkTm90aWZ5RndTdXNwZW5kKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJCUlOIFBWT0lEIHB2U2V0QnVmZmVyLAoJCQkJSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwKCQkJCU9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKI2lmIENGR19TVVBQT1JUX0RCREMKV0xBTl9TVEFUVVMKd2xhbm9pZFNldERiZGNFbmFibGUoCgkJSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCUlOIFBWT0lEIHB2U2V0QnVmZmVyLAoJCUlOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sCgkJT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwojZW5kaWYgLyojaWYgQ0ZHX1NVUFBPUlRfREJEQyovCgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlTZXRUeFRhcmdldFBvd2VyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCiNpZiBDRkdfQVVUT19DSEFOTkVMX1NFTF9TVVBQT1JUCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUx0ZVNhZmVDaGFubmVsKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKV0xBTl9TVEFUVVMKd2xhbkNhbGN1bGF0ZUNoYW5uZWxEaXJ0eW5lc3MoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyKTsKVUlOVF84CndsYW5HZXRDaGFubmVsSW5kZXgoSU4gVUlOVF84IGNoYW5uZWwpOwpWT0lECndsYW5Tb3J0Q2hhbm5lbChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIpOwojZW5kaWYKCldMQU5fU1RBVFVTCndsYW5vaWRMaW5rRG93bihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGIFUgTiBDIFQgSSBPIE4gUwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqLwoKI2VuZGlmIC8qIF9XTEFOX09JRF9IICovCg==