ZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4Ly5jdnNpZ25vcmUgYi8zcmRwYXJ0eS9zcGVleC8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNmJjYTIKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC8uY3ZzaWdub3JlCkBAIC0wLDAgKzEsMTcgQEAKK01ha2VmaWxlCitNYWtlZmlsZS5pbgorU3BlZXguc3BlYworYWNsb2NhbC5tNAorYXV0b200dGUuY2FjaGUKK2NvbmZpZy5ndWVzcworY29uZmlnLmxvZworY29uZmlnLnN0YXR1cworY29uZmlnLnN1YgorY29uZmlndXJlCitkZXBjb21wCitpbnN0YWxsLXNoCitsaWJ0b29sCitsdGNvbmZpZworbHRtYWluLnNoCittaXNzaW5nCitta2luc3RhbGxkaXJzCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9BVVRIT1JTIGIvM3JkcGFydHkvc3BlZXgvQVVUSE9SUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTVjM2ZlCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvQVVUSE9SUwpAQCAtMCwwICsxLDE4IEBACitKZWFuLU1hcmMgVmFsaW4gPGplYW4tbWFyYy52YWxpbkB1c2hlcmJyb29rZS5jYT4KKyAgIEFsbCB0aGUgY29kZSBleGNlcHQgdGhlIGZvbGxvd2luZworCitEYXZpZCBSb3dlIDxkYXZpZEByb3dldGVsLmNvbT4KKyAgIGxzcC5jIGxzcC5oIAorICAgQWxzbyBpZGVhcyBhbmQgZmVlZGJhY2sKKworSm9obiBGcmFuY2lzIEVkd2FyZHMKKyAgIHdhdmVfb3V0LltjaF0sIHNvbWUgI2lmZGVmcyBmb3Igd2luZG93cyBwb3J0IGFuZCBNU1ZDIHByb2plY3QgZmlsZXMKKworU2VnaGVyIEJvZXNzZW5rb29sCisgICBNaXNjLiBvcHRpbWl6YXRpb25zIChmb3IgUU1GIGluIHBhcnRpY3VsYXIpCisKK0F0c3VoaWtvIFlhbWFuYWthIDx5bW5rQGpjcmFmdC5jb20+OgorICAgUGF0Y2ggdG8gc3BlZXhlbmMuYyB0byBhZGQgVm9yYmlzIGNvbW1lbnQgZm9ybWF0CisKK1JhZGltIEtvbGFyIDxoc25AY3liZXJtYWlsLm5ldD46CisgICBQYXRjaCB0byBzcGVleGVuYy5jIGZvciBzdXBwb3J0aW5nIG1vcmUgaW5wdXQgZm9ybWF0cwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvQ09QWUlORyBiLzNyZHBhcnR5L3NwZWV4L0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2YjU3OQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L0NPUFlJTkcKQEAgLTAsMCArMSwzNCBAQAorQ29weXJpZ2h0IDIwMDItMjAwNiAKKyAgICAgICAgWGlwaC5vcmcgRm91bmRhdGlvbgorICAgICAgICBKZWFuLU1hcmMgVmFsaW4KKyAgICAgICAgRGF2aWQgUm93ZQorICAgICAgICBFcGljR2FtZXMKKyAgICAgICAgQW5hbG9nIERldmljZXMKKyAgICAgICAgQ29tbW9ud2VhbHRoIFNjaWVudGlmaWMgYW5kIEluZHVzdHJpYWwgUmVzZWFyY2ggT3JnYW5pc2F0aW9uIChDU0lSTykKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisKKy0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCitjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQordGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCitDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9DaGFuZ2VMb2cgYi8zcmRwYXJ0eS9zcGVleC9DaGFuZ2VMb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2Y2Q4YQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L0NoYW5nZUxvZwpAQCAtMCwwICsxLDIxIEBACisyMDA1LTA5LTA3ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBsaWJzcGVleC9jYl9zZWFyY2guYzogKHNwbGl0X2NiX3NlYXJjaF9zaGFwZV9zaWduX04xKToKKwkgIGFkZCBkZWNsYXJhdGlvbiBmb3Igbiwgc2VlbXMgbGlrZSBhbiBvYnZpb3VzIGJ1aWxkIGZpeCwgc2xhcAorCSAgbWUgZG93biBpZiBpdCdzIG5vdAorCisyMDA0LTAyLTE4IEplYW4tTWFyYyBWYWxpbiA8amVhbi1tYXJjLnZhbGluQHVzaGVyYnJvb2tlLmNhPgorCVBhdGNoIGZvciBjb21waWxpbmcgd2l0aCBtaW5ndzMyIHNlbnQgYnkgakB0aGluZy5uZXQgCisKKzIwMDQtMDItMTggSmVhbi1NYXJjIFZhbGluIDxqZWFuLW1hcmMudmFsaW5AdXNoZXJicm9va2UuY2E+CisJSW50ZWdyYXRlZCBJUklYIHBhdGNoIChnZXRvcHQgc3R1ZmYpIGZyb20gTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4gCisKKzIwMDQtMDItMTggSmVhbi1NYXJjIFZhbGluIDxqZWFuLW1hcmMudmFsaW5AdXNoZXJicm9va2UuY2E+CisJQ2hhbmdlZCB0aGUgTWFrZWZpbGUuYW0gc28gdGhhdCBLRGV2ZWxvcCBjYW4gcGFyc2UgU1VCRElSUyBjb3JyZWN0bHkgCisKKzIwMDIvMDMvMjcgSmVhbi1NYXJjIFZhbGluOgorV29ya2luZyBlbmNvZGVyIGFuZCBkZWNvZGVyIGZvciBib3RoIG5hcnJvd2JhbmQgYW5kIHdpZGViYW5kLgorCisyMDAyLzAyLzI3IEplYW4tTWFyYyBWYWxpbjoKK0dvdCB0aGUgYmFzaWMgZW5jb2RlciB3b3JraW5nIGFzIGEgZGVtbyB3aXRoIHF1YW50aXphdGlvbiBvbmx5IG9uIHNvbWUgCitwYXJhbWV0ZXJzLgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvRG94eWZpbGUgYi8zcmRwYXJ0eS9zcGVleC9Eb3h5ZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzI5MzRmCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvRG94eWZpbGUKQEAgLTAsMCArMSwyMjUgQEAKKyMgRG94eWZpbGUgMS41LjEtS0RldmVsb3AKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9qZWN0IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQUk9KRUNUX05BTUUgICAgICAgICAgID0gU3BlZXgKK1BST0pFQ1RfTlVNQkVSICAgICAgICAgPSAxLjItYmV0YTIKK09VVFBVVF9ESVJFQ1RPUlkgICAgICAgPSBkb2MKK0NSRUFURV9TVUJESVJTICAgICAgICAgPSBOTworT1VUUFVUX0xBTkdVQUdFICAgICAgICA9IEVuZ2xpc2gKK1VTRV9XSU5ET1dTX0VOQ09ESU5HICAgPSBOTworQlJJRUZfTUVNQkVSX0RFU0MgICAgICA9IFlFUworUkVQRUFUX0JSSUVGICAgICAgICAgICA9IFlFUworQUJCUkVWSUFURV9CUklFRiAgICAgICA9IAorQUxXQVlTX0RFVEFJTEVEX1NFQyAgICA9IE5PCitJTkxJTkVfSU5IRVJJVEVEX01FTUIgID0gTk8KK0ZVTExfUEFUSF9OQU1FUyAgICAgICAgPSBOTworU1RSSVBfRlJPTV9QQVRIICAgICAgICA9IAorU1RSSVBfRlJPTV9JTkNfUEFUSCAgICA9IAorU0hPUlRfTkFNRVMgICAgICAgICAgICA9IE5PCitKQVZBRE9DX0FVVE9CUklFRiAgICAgID0gTk8KK01VTFRJTElORV9DUFBfSVNfQlJJRUYgPSBOTworREVUQUlMU19BVF9UT1AgICAgICAgICA9IE5PCitJTkhFUklUX0RPQ1MgICAgICAgICAgID0gWUVTCitTRVBBUkFURV9NRU1CRVJfUEFHRVMgID0gTk8KK1RBQl9TSVpFICAgICAgICAgICAgICAgPSA4CitBTElBU0VTICAgICAgICAgICAgICAgID0gCitPUFRJTUlaRV9PVVRQVVRfRk9SX0MgID0gTk8KK09QVElNSVpFX09VVFBVVF9KQVZBICAgPSBOTworQlVJTFRJTl9TVExfU1VQUE9SVCAgICA9IE5PCitESVNUUklCVVRFX0dST1VQX0RPQyAgID0gTk8KK1NVQkdST1VQSU5HICAgICAgICAgICAgPSBZRVMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQnVpbGQgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0VYVFJBQ1RfQUxMICAgICAgICAgICAgPSBOTworRVhUUkFDVF9QUklWQVRFICAgICAgICA9IE5PCitFWFRSQUNUX1NUQVRJQyAgICAgICAgID0gTk8KK0VYVFJBQ1RfTE9DQUxfQ0xBU1NFUyAgPSBZRVMKK0VYVFJBQ1RfTE9DQUxfTUVUSE9EUyAgPSBOTworSElERV9VTkRPQ19NRU1CRVJTICAgICA9IE5PCitISURFX1VORE9DX0NMQVNTRVMgICAgID0gTk8KK0hJREVfRlJJRU5EX0NPTVBPVU5EUyAgPSBOTworSElERV9JTl9CT0RZX0RPQ1MgICAgICA9IE5PCitJTlRFUk5BTF9ET0NTICAgICAgICAgID0gTk8KK0NBU0VfU0VOU0VfTkFNRVMgICAgICAgPSBZRVMKK0hJREVfU0NPUEVfTkFNRVMgICAgICAgPSBOTworU0hPV19JTkNMVURFX0ZJTEVTICAgICA9IFlFUworSU5MSU5FX0lORk8gICAgICAgICAgICA9IFlFUworU09SVF9NRU1CRVJfRE9DUyAgICAgICA9IFlFUworU09SVF9CUklFRl9ET0NTICAgICAgICA9IE5PCitTT1JUX0JZX1NDT1BFX05BTUUgICAgID0gTk8KK0dFTkVSQVRFX1RPRE9MSVNUICAgICAgPSBZRVMKK0dFTkVSQVRFX1RFU1RMSVNUICAgICAgPSBZRVMKK0dFTkVSQVRFX0JVR0xJU1QgICAgICAgPSBZRVMKK0dFTkVSQVRFX0RFUFJFQ0FURURMSVNUPSBZRVMKK0VOQUJMRURfU0VDVElPTlMgICAgICAgPSAKK01BWF9JTklUSUFMSVpFUl9MSU5FUyAgPSAzMAorU0hPV19VU0VEX0ZJTEVTICAgICAgICA9IFlFUworU0hPV19ESVJFQ1RPUklFUyAgICAgICA9IFlFUworRklMRV9WRVJTSU9OX0ZJTFRFUiAgICA9IAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3YXJuaW5nIGFuZCBwcm9ncmVzcyBtZXNzYWdlcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUVVJRVQgICAgICAgICAgICAgICAgICA9IE5PCitXQVJOSU5HUyAgICAgICAgICAgICAgID0gWUVTCitXQVJOX0lGX1VORE9DVU1FTlRFRCAgID0gWUVTCitXQVJOX0lGX0RPQ19FUlJPUiAgICAgID0gWUVTCitXQVJOX05PX1BBUkFNRE9DICAgICAgID0gTk8KK1dBUk5fRk9STUFUICAgICAgICAgICAgPSAiJGZpbGU6JGxpbmU6ICR0ZXh0IgorV0FSTl9MT0dGSUxFICAgICAgICAgICA9IAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgaW5wdXQgZmlsZXMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lOUFVUICAgICAgICAgICAgICAgICAgPSBpbmNsdWRlL3NwZWV4CitGSUxFX1BBVFRFUk5TICAgICAgICAgID0gCitSRUNVUlNJVkUgICAgICAgICAgICAgID0gTk8KK0VYQ0xVREUgICAgICAgICAgICAgICAgPSAKK0VYQ0xVREVfU1lNTElOS1MgICAgICAgPSBOTworRVhDTFVERV9QQVRURVJOUyAgICAgICA9IHNwZWV4X2NvbmZpZ190eXBlcy5oCitFWEFNUExFX1BBVEggICAgICAgICAgID0gCitFWEFNUExFX1BBVFRFUk5TICAgICAgID0gCitFWEFNUExFX1JFQ1VSU0lWRSAgICAgID0gTk8KK0lNQUdFX1BBVEggICAgICAgICAgICAgPSAKK0lOUFVUX0ZJTFRFUiAgICAgICAgICAgPSAKK0ZJTFRFUl9QQVRURVJOUyAgICAgICAgPSAKK0ZJTFRFUl9TT1VSQ0VfRklMRVMgICAgPSBOTworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBzb3VyY2UgYnJvd3NpbmcKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NPVVJDRV9CUk9XU0VSICAgICAgICAgPSBOTworSU5MSU5FX1NPVVJDRVMgICAgICAgICA9IE5PCitTVFJJUF9DT0RFX0NPTU1FTlRTICAgID0gWUVTCitSRUZFUkVOQ0VEX0JZX1JFTEFUSU9OID0gWUVTCitSRUZFUkVOQ0VTX1JFTEFUSU9OICAgID0gWUVTCitSRUZFUkVOQ0VTX0xJTktfU09VUkNFID0gWUVTCitVU0VfSFRBR1MgICAgICAgICAgICAgID0gTk8KK1ZFUkJBVElNX0hFQURFUlMgICAgICAgPSBZRVMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGFscGhhYmV0aWNhbCBjbGFzcyBpbmRleAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUxQSEFCRVRJQ0FMX0lOREVYICAgICA9IE5PCitDT0xTX0lOX0FMUEhBX0lOREVYICAgID0gNQorSUdOT1JFX1BSRUZJWCAgICAgICAgICA9IAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgSFRNTCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dFTkVSQVRFX0hUTUwgICAgICAgICAgPSBZRVMKK0hUTUxfT1VUUFVUICAgICAgICAgICAgPSBodG1sCitIVE1MX0ZJTEVfRVhURU5TSU9OICAgID0gLmh0bWwKK0hUTUxfSEVBREVSICAgICAgICAgICAgPSAKK0hUTUxfRk9PVEVSICAgICAgICAgICAgPSAKK0hUTUxfU1RZTEVTSEVFVCAgICAgICAgPSAKK0hUTUxfQUxJR05fTUVNQkVSUyAgICAgPSBZRVMKK0dFTkVSQVRFX0hUTUxIRUxQICAgICAgPSBOTworQ0hNX0ZJTEUgICAgICAgICAgICAgICA9IAorSEhDX0xPQ0FUSU9OICAgICAgICAgICA9IAorR0VORVJBVEVfQ0hJICAgICAgICAgICA9IE5PCitCSU5BUllfVE9DICAgICAgICAgICAgID0gTk8KK1RPQ19FWFBBTkQgICAgICAgICAgICAgPSBOTworRElTQUJMRV9JTkRFWCAgICAgICAgICA9IE5PCitFTlVNX1ZBTFVFU19QRVJfTElORSAgID0gNAorR0VORVJBVEVfVFJFRVZJRVcgICAgICA9IE5PCitUUkVFVklFV19XSURUSCAgICAgICAgID0gMjUwCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBMYVRlWCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dFTkVSQVRFX0xBVEVYICAgICAgICAgPSBZRVMKK0xBVEVYX09VVFBVVCAgICAgICAgICAgPSBsYXRleAorTEFURVhfQ01EX05BTUUgICAgICAgICA9IGxhdGV4CitNQUtFSU5ERVhfQ01EX05BTUUgICAgID0gbWFrZWluZGV4CitDT01QQUNUX0xBVEVYICAgICAgICAgID0gTk8KK1BBUEVSX1RZUEUgICAgICAgICAgICAgPSBhNHdpZGUKK0VYVFJBX1BBQ0tBR0VTICAgICAgICAgPSAKK0xBVEVYX0hFQURFUiAgICAgICAgICAgPSAKK1BERl9IWVBFUkxJTktTICAgICAgICAgPSBZRVMKK1VTRV9QREZMQVRFWCAgICAgICAgICAgPSBZRVMKK0xBVEVYX0JBVENITU9ERSAgICAgICAgPSBOTworTEFURVhfSElERV9JTkRJQ0VTICAgICA9IE5PCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBSVEYgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHRU5FUkFURV9SVEYgICAgICAgICAgID0gTk8KK1JURl9PVVRQVVQgICAgICAgICAgICAgPSBydGYKK0NPTVBBQ1RfUlRGICAgICAgICAgICAgPSBOTworUlRGX0hZUEVSTElOS1MgICAgICAgICA9IE5PCitSVEZfU1RZTEVTSEVFVF9GSUxFICAgID0gCitSVEZfRVhURU5TSU9OU19GSUxFICAgID0gCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBtYW4gcGFnZSBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dFTkVSQVRFX01BTiAgICAgICAgICAgPSBOTworTUFOX09VVFBVVCAgICAgICAgICAgICA9IG1hbgorTUFOX0VYVEVOU0lPTiAgICAgICAgICA9IC4zCitNQU5fTElOS1MgICAgICAgICAgICAgID0gTk8KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFhNTCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dFTkVSQVRFX1hNTCAgICAgICAgICAgPSBOTworWE1MX09VVFBVVCAgICAgICAgICAgICA9IHhtbAorWE1MX1NDSEVNQSAgICAgICAgICAgICA9IAorWE1MX0RURCAgICAgICAgICAgICAgICA9IAorWE1MX1BST0dSQU1MSVNUSU5HICAgICA9IFlFUworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBBdXRvR2VuIERlZmluaXRpb25zIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR0VORVJBVEVfQVVUT0dFTl9ERUYgICA9IE5PCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dFTkVSQVRFX1BFUkxNT0QgICAgICAgPSBOTworUEVSTE1PRF9MQVRFWCAgICAgICAgICA9IE5PCitQRVJMTU9EX1BSRVRUWSAgICAgICAgID0gWUVTCitQRVJMTU9EX01BS0VWQVJfUFJFRklYID0gCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBwcmVwcm9jZXNzb3IgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0VOQUJMRV9QUkVQUk9DRVNTSU5HICAgPSBZRVMKK01BQ1JPX0VYUEFOU0lPTiAgICAgICAgPSBOTworRVhQQU5EX09OTFlfUFJFREVGICAgICA9IE5PCitTRUFSQ0hfSU5DTFVERVMgICAgICAgID0gWUVTCitJTkNMVURFX1BBVEggICAgICAgICAgID0gCitJTkNMVURFX0ZJTEVfUEFUVEVSTlMgID0gCitQUkVERUZJTkVEICAgICAgICAgICAgID0gCitFWFBBTkRfQVNfREVGSU5FRCAgICAgID0gCitTS0lQX0ZVTkNUSU9OX01BQ1JPUyAgID0gWUVTCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb246OmFkZGl0aW9ucyByZWxhdGVkIHRvIGV4dGVybmFsIHJlZmVyZW5jZXMgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RBR0ZJTEVTICAgICAgICAgICAgICAgPSAKK0dFTkVSQVRFX1RBR0ZJTEUgICAgICAgPSAKK0FMTEVYVEVSTkFMUyAgICAgICAgICAgPSBOTworRVhURVJOQUxfR1JPVVBTICAgICAgICA9IFlFUworUEVSTF9QQVRIICAgICAgICAgICAgICA9IC91c3IvYmluL3BlcmwKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGRvdCB0b29sICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDTEFTU19ESUFHUkFNUyAgICAgICAgID0gWUVTCitISURFX1VORE9DX1JFTEFUSU9OUyAgID0gWUVTCitIQVZFX0RPVCAgICAgICAgICAgICAgID0gTk8KK0NMQVNTX0dSQVBIICAgICAgICAgICAgPSBZRVMKK0NPTExBQk9SQVRJT05fR1JBUEggICAgPSBZRVMKK0dST1VQX0dSQVBIUyAgICAgICAgICAgPSBZRVMKK1VNTF9MT09LICAgICAgICAgICAgICAgPSBOTworVEVNUExBVEVfUkVMQVRJT05TICAgICA9IFlFUworSU5DTFVERV9HUkFQSCAgICAgICAgICA9IFlFUworSU5DTFVERURfQllfR1JBUEggICAgICA9IFlFUworQ0FMTF9HUkFQSCAgICAgICAgICAgICA9IE5PCitDQUxMRVJfR1JBUEggICAgICAgICAgID0gTk8KK0dSQVBISUNBTF9ISUVSQVJDSFkgICAgPSBZRVMKK0RJUkVDVE9SWV9HUkFQSCAgICAgICAgPSBZRVMKK0RPVF9JTUFHRV9GT1JNQVQgICAgICAgPSBnaWYKK0RPVF9QQVRIICAgICAgICAgICAgICAgPSAKK0RPVEZJTEVfRElSUyAgICAgICAgICAgPSAKK01BWF9ET1RfR1JBUEhfV0lEVEggICAgPSAxMDI0CitNQVhfRE9UX0dSQVBIX0hFSUdIVCAgID0gMTAyNAorTUFYX0RPVF9HUkFQSF9ERVBUSCAgICA9IDAKK0RPVF9UUkFOU1BBUkVOVCAgICAgICAgPSBOTworRE9UX01VTFRJX1RBUkdFVFMgICAgICA9IE5PCitHRU5FUkFURV9MRUdFTkQgICAgICAgID0gWUVTCitET1RfQ0xFQU5VUCAgICAgICAgICAgID0gWUVTCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb246OmFkZGl0aW9ucyByZWxhdGVkIHRvIHRoZSBzZWFyY2ggZW5naW5lICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTRUFSQ0hFTkdJTkUgICAgICAgICAgID0gTk8KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L0lERUFTIGIvM3JkcGFydHkvc3BlZXgvSURFQVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNmZTI2ZQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L0lERUFTCkBAIC0wLDAgKzEsNCBAQAorLSBOb24tbGluZWFyIGFkYXB0aXZlIGNvZGVib29rICh1c2UgZXhjW25dKnxleGNbbl18IHRvIHJlZHVjZSBub2lzZSAKKyAgY29tcG9uZW50IGluIGFkYXB0aXZlIGNvZGVib29rIGV4Y2l0YXRpb24pCisKKy0gSW5jbHVkZSB0aW1lLWRvbWFpbiBtYXNraW5nIGZvciBWQlIKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L0lOU1RBTEwgYi8zcmRwYXJ0eS9zcGVleC9JTlNUQUxMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNDgyY2EKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9JTlNUQUxMCkBAIC0wLDAgKzEsOCBAQAorSW5zdGFsbGluZyBTcGVleCBpcyBhcyBlYXN5IGFzOgorCislIC4vY29uZmlndXJlIFstLXByZWZpeD08aW5zdGFsbC1wYXRoPl0KKyUgbWFrZQorJSBtYWtlIGluc3RhbGwKKworTm90ZSB0aGF0IGlmIHlvdSBhcmUgdXNpbmcgdGhlIGNvZGUgZnJvbSBTVk4sIHlvdSB3aWxsIG5lZWQgdG8gcnVuICJhdXRvZ2VuLnNoIgoraW5zdGVhZCBvZiAiY29uZmlndXJlIi4KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L01ha2VmaWxlLmFtIGIvM3JkcGFydHkvc3BlZXgvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwOGVmYgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMjEgQEAKKyMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbi4gLSotTWFrZWZpbGUtKi0KKworIyBUbyBkaXNhYmxlIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nIGlmIHVzaW5nIG90aGVyIHRvb2xzIHRoYW4KKyMgZ2NjIGFuZCBnbWFrZSwgYWRkIHRoZSBvcHRpb24gJ25vLWRlcGVuZGVuY2llcycKK0FVVE9NQUtFX09QVElPTlMgPSAxLjgKKworbTRkYXRhZGlyID0gJChkYXRhZGlyKS9hY2xvY2FsCittNGRhdGFfREFUQSA9IHNwZWV4Lm00CisKK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKK3BrZ2NvbmZpZ19EQVRBID0gc3BlZXgucGMKKworRVhUUkFfRElTVCA9IFNwZWV4LnNwZWMgU3BlZXguc3BlYy5pbiBTcGVleC5rZGV2ZWxvcCBzcGVleC5tNCBzcGVleC5wYy5pbiBSRUFETUUuYmxhY2tmaW4gUkVBRE1FLnN5bWJpYW4gUkVBRE1FLlRJLURTUAorCisjRm9vbHMgS0RldmVsb3AgaW50byBpbmNsdWRpbmcgYWxsIGZpbGVzCitTVUJESVJTID0gbGlic3BlZXggaW5jbHVkZSBAc3JjQCBkb2Mgd2luMzIgc3ltYmlhbiB0aQorCitESVNUX1NVQkRJUlMgPSBsaWJzcGVleCBpbmNsdWRlIHNyYyBkb2Mgd2luMzIgc3ltYmlhbiB0aQorCitycG06IGRpc3QKKwlycG1idWlsZCAtdGEgJHtQQUNLQUdFfS0ke1ZFUlNJT059LnRhci5negpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvTkVXUyBiLzNyZHBhcnR5L3NwZWV4L05FV1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5OTUyOQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L05FV1MKQEAgLTAsMCArMSBAQAorMjAwMi8wMi8xMzogQ3JlYXRpb24gb2YgdGhlICJTcGVleCIgcHJvamVjdApkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvT1BUSU1JWkUgYi8zcmRwYXJ0eS9zcGVleC9PUFRJTUlaRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzZmNWY3Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvT1BUSU1JWkUKQEAgLTAsMCArMSwxMCBAQAorTmFycm93YmFuZDoKKworLSBwaXRjaF9nYWluX3NlYXJjaF8zdGFwIGNhbGxzIHN5bl9maWx0X3plcm8gbW9yZSB0aW1lcyB0aGFuIGl0IHNob3VsZCAod2UncmUKK2NvbXB1dGluZyBzb21lIHRoaW5ncyB0d2ljZSkKKworV2lkZWJhbmQKKworLSBBbGwgbmFycm93YmFuZCBvcHRpbWl6YXRpb25zIGFwcGx5CistIExvdHMgb2YgdGltZSBzcGVudCBpbiB0aGUgY29kZWJvb2sgc2VhcmNoLiBXZSBjb3VsZCBzcGVlZCB0aGF0IHVwIGJ5IHVzaW5nCisgIGEgaGllcmFyY2hpY2FsIGNvZGVib29rCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9SRUFETUUgYi8zcmRwYXJ0eS9zcGVleC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRmZTc0YQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L1JFQURNRQpAQCAtMCwwICsxLDkgQEAKK1NlZSBJTlNUQUxMIGZpbGUgZm9yIGluc3RydWN0aW9uIG9uIGhvdyB0byBpbnN0YWxsIFNwZWV4LgorCitUaGUgU3BlZXggaXMgYSBwYXRlbnQtZnJlZSwgT3BlbiBTb3VyY2UvRnJlZSBTb2Z0d2FyZSB2b2ljZSBjb2RlYy4gVW5saWtlIG90aGVyIGNvZGVjcyBsaWtlIE1QMyBhbmQgT2dnIFZvcmJpcywgU3BlZXggaXMgZGVzaWduZWQgdG8gY29tcHJlc3Mgdm9pY2UgYXQgYml0cmF0ZXMgaW4gdGhlIDItNDUga2JwcyByYW5nZS4gUG9zc2libGUgYXBwbGljYXRpb25zIGluY2x1ZGUgVm9JUCwgaW50ZXJuZXQgYXVkaW8gc3RyZWFtaW5nLCBhcmNoaXZpbmcgb2Ygc3BlZWNoIGRhdGEgKGUuZy4gdm9pY2UgbWFpbCksIGFuZCBhdWRpbyBib29rcy4gSW4gc29tZSBzZW5zZSwgaXQgaXMgbWVhbnQgdG8gYmUgY29tcGxlbWVudGFyeSB0byB0aGUgT2dnIFZvcmJpcyBjb2RlYy4KKworVG8gdXNlIHRoZSBTcGVleCBjb21tYW5kIGxpbmUgdG9vbHM6CisKKyUgc3BlZXhlbmMgW29wdGlvbnNdIGlucHV0X2ZpbGUud2F2IGNvbXByZXNzZWRfZmlsZS5zcHgKKworJSBzcGVleGRlYyBbb3B0aW9uc10gY29tcHJlc3NlZF9maWxlLnNweCBvdXRwdXRfZmlsZS53YXYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L1JFQURNRS5USS1EU1AgYi8zcmRwYXJ0eS9zcGVleC9SRUFETUUuVEktRFNQCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NTAzZWUKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9SRUFETUUuVEktRFNQCkBAIC0wLDAgKzEsNTYgQEAKK1RoZXNlIGFyZSBhbGwgb2YgdGhlIGNoYW5nZXMgYW5kIGFkZGl0aW9ucyBuZWNlc3NhcnkgdG8gYnVpbGQgYSBsb29wYmFjayBhcHBsaWNhdGlvbiBmb3IgdGhlIA0KK1RJIEM2NDE1LCBDNTUwOUEsIG9yIEM1NDE2IHNpbXVsYXRvcnMgdXNpbmcgdGhlIFRJIENvZGUgQ29tcG9zZXIgU3R1ZGlvIChDQ1MpIGRldmVsb3BtZW50IHN5c3RlbS4gIA0KK0EgdHJpYWwgdmVyc2lvbiBvZiB0aGUgdG9vbHMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSB0aGUgVEkgd2Vic2l0ZS4NCisNCitUaGlzIGJ1aWxkIHJ1bnMgOGticHMgbmFycm93YmFuZCwgd2l0aCBtaW5pbXVtIGNvbXBsZXhpdHkuDQorDQorU2V2ZXJhbCBjaGFuZ2VzIGFyZSBpbnRyb2R1Y2VkIGluIFNwZWV4IDEuMS4xMSB3aGljaCBhcmUgdXNlZCBpbiB0aGVzZSBhcHBsaWNhdGlvbnM6DQorDQorYXJjaC5oOiBBZGRlZCBzd2l0Y2ggZm9yIGNvbXBpbGVycyBub3Qgc3VwcG9ydGluZyAibG9uZyBsb25nIiAoQzU1eCBkb2VzLCBDNTR4LCBDQ1MgMi54IEM2NHggZG9lcyBub3QpDQorYml0cy5jOiBBbGxvdyBleHRlcm5hbCBkZWZpbml0aW9uIGZvciBtYXggYnVmZmVyIHNpemUsIGNoYW5nZWQgTUFYX0JZVEVTX1BFUl9GUkFNRQ0KKyAgICAgICAgdG8gTUFYX0NIQVJTX1BFUl9GUkFNRSBmb3IgY29uc2lzdGVuY3kNCittaXNjLmM6IEFkZGVkIG92ZXJyaWRlIHN3aXRjaGVzIHRvIGFsbG9jIHJvdXRpbmVzLCBjb25kaXRpb25hbCBpbmNsdWRlIG9mIHVzZXIgZmlsZSAidXNlcl9taXNjLmgiLg0KKyAgICAgICAgVGhlc2UgY2hhbmdlcyBhbGxvdyBtYW51YWwgbWVtb3J5IGFsbG9jYXRpb24gcmF0aGVyIHRoYW4gdXNpbmcgaGVhcA0KKw0KK1RoZSBhcmNoLmggY2hhbmdlIGFsbG93cyBvcGVyYXRpb24gd2l0aCAyLnggdmVyc2lvbnMgb2YgQ29kZSBDb21wb3NlciBTdHVkaW8uDQorVGhlIGJpdHMuYyBjaGFuZ2UgcmVkdWNlcyB0aGUgZGF0YSBtZW1vcnkgdXNhZ2UuDQorVGhlIG1pc2MuYyBjaGFuZ2UgYWxsb3dzIHByaXZhdGUgbWVtb3J5IGFsbG9jYXRpb24sIGZvciBjYXNlcyB3aGVyZSBpdCBpcyBub3QNCitkZXNpcmFibGUgdG8gdXNlIHRoZSBub3JtYWwgaGVhcC4NCisNCitBZGRlZCBmaWxlczoNCisNCit0ZXN0ZW5jLVRJLUM1eC5jICAoRm9yIEM1NHggYW5kIEM1NXggYnVpbGRzLCBkZXJpdmVkIGZyb20gdGVzdGVuYy5jLCANCisgICAgICAgICAgICAgICAgICAgICAgIG1hbnVhbCBhbGxvYywgYnl0ZSBwYWNraW5nL3VucGFja2luZyBhZGRlZCkNCit0ZXN0ZW5jLVRJLUM2NHguYyAgKEZvciBDNjR4IGJ1aWxkcywgZGVyaXZlZCBmcm9tIHRlc3RlbmMuYywgbWFudWFsIGFsbG9jLCBieXRlIHBhY2tpbmcvdW5wYWNraW5nIGFkZGVkKQ0KKw0KK2NvbmZpZy5oIChub3QgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQsIHNldHMgbWVtb3J5IHNpemVzLCBlbmFibGVzL2Rpc2FibGVzIG1hbnVhbCBhbGxvYykNCit1c2VyX21pc2MuaCAoY29udGFpbnMgdGhlIG1hbnVhbCBtZW1vcnkgYWxsb2Mgcm91dGluZXMsIHdpdGggZGVidWcgY29kZSB0byBkaXNwbGF5IG1lbSB1c2FnZSkNCitzcGVleFxzcGVleF9jb25maWdfdHlwZXMuaCAobWF0Y2ggU3BlZXggdHlwZXMgdG8gY29tcGlsZXIgdHlwZXMsIG5vdCBnZW5lcmF0ZWQgZnJvbSB0eXBlcy5pbikNCisNCitzcGVleF9jNTRfdGVzdFxzcGVleF9jNTRfdGVzdC5jbWQgKEM1NDE2IGxpbmtlciBjb21tYW5kIGZpbGUpDQorc3BlZXhfYzU0X3Rlc3Rcc3BlZXhfYzU0X3Rlc3QucGp0IChDb2RlIENvbXBvc2VyIFN0dWRpbyBQcm9qZWN0IEZpbGUgKQ0KK3NwZWV4X2M1NV90ZXN0XHNwZWV4X2M1NV90ZXN0LmNtZCAoQzU1MDlBIGxpbmtlciBjb21tYW5kIGZpbGUpDQorc3BlZXhfYzU1X3Rlc3Rcc3BlZXhfYzU1X3Rlc3QucGp0IChDb2RlIENvbXBvc2VyIFN0dWRpbyBQcm9qZWN0IEZpbGUgKQ0KK3NwZWV4X2M2NF90ZXN0XHNwZWV4X2M2NF90ZXN0LmNtZCAoQzY0MTUgbGlua2VyIGNvbW1hbmQgZmlsZSkNCitzcGVleF9jNjRfdGVzdFxzcGVleF9jNjRfdGVzdC5wanQgKENvZGUgQ29tcG9zZXIgU3R1ZGlvIFByb2plY3QgRmlsZSApDQorDQorc2FtcGxlc1xtYWxlLnNuZCAgDQorDQorVXNhZ2U6DQorMS4gQ3JlYXRlIGEgU3BlZXggMS4xLjExIChvciBsYXRlcikgc291cmNlIHRyZWUuDQorMi4gRWRpdCB0aGUgZmlsZXMgdGVzdGVuYy1USS1DNXguYyBhbmQvb3IgdGVzdGVuYy1USS1DNjR4LmMgdG8gY2hhbmdlIHRoZSBoYXJkLWNvZGVkIHBhdGggDQorICAgZm9yIHRoZSB0ZXN0IGF1ZGlvIGFuZCBkYXRhIGZpbGVzLg0KKyAgIFRoaXMgYnVpbGQgdXNlcyB0aGUgZmlsZSBlOlxzcGVleHRydW5rdGVzdFxzYW1wbGVzXG1hbGUuc25kLg0KKyAgIE5vdGU6ICBUaGlzIGlzIGEgaGVhZGVybGVzcyAxNi1iaXQgc3RlcmVvIGF1ZGlvIGZpbGUgZGVyaXZlZCBmcm9tIHRoZSBtYWxlLndhdiB0ZXN0IGZpbGUgDQorICAgICAgICAgIGh0dHA6Ly93d3cuc3BlZXgub3JnL3NhbXBsZXMvbWFsZS53YXYNCiszLiBFZGl0IHRoZSAucGp0IGZpbGUgd2l0aCBhIHRleHQgZWRpdG9yIGFuZCBjaGFuZ2UgcHJvamRpciBvciBwcm9qZWN0ZGlyIHRvIHRoZSBjb3JyZWN0IHBhdGggDQorICAgKG9uZSBwbGFjZSBuZWFyIHRoZSB0b3Agb2YgdGhlIGZpbGUpLg0KKzQuIEVkaXQgY29uZmlnLmggaWYgZGVzaXJlZCwgdG8gY2hhbmdlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBtZXRob2QgKGNhbGxvYyBvciBtYW51YWwpLA0KKyAgIGFuZCB0byBlbmFibGUvZGlzYWJsZSBkZWJ1ZyBwcmludHMgZm9yIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiANCisgICAodGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gZGV0ZXJtaW5lIHRoZSByZXF1aXJlZCBzaXplKS4NCis1LiBSdW4gQ29kZSBDb21wb3NlciBTdHVkaW8sIGFuZCBvcGVuIHRoZSBwcm9qZWN0IGZvciB0aGUgZGVzaXJlZCB0YXJnZXQgKGUuZy4gc3BlZXhfYzU1X3Rlc3QpLg0KKyAgIE5vdGUgdGhhdCB0aGUgY29ycmVjdCBzaW11bGF0b3IgbXVzdCBiZSBzZWxlY3RlZCAoaW4gQ0NTIFNldHVwKSBiZWZvcmUgc3RhcnRpbmcgQ0NTLg0KKzYuIEJ1aWxkIGFuZCBydW4gdGhlIHNpbXVsYXRpb24uDQorDQorTm90ZSB0aGF0IGFzc2VtYmx5IG9wdGltaXphdGlvbnMgd2lsbCBiZSByZXF1aXJlZCB0byBydW4gQzU0eCBpbiByZWFsIHRpbWUuDQorVGhlcmUgYXJlIG5vIGFzc2VtYmx5IG9wdGltaXphdGlvbnMgaW4gYW55IG9mIHRoZXNlIGJ1aWxkcy4NCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9SRUFETUUuVHJpbWVkaWEgYi8zcmRwYXJ0eS9zcGVleC9SRUFETUUuVHJpbWVkaWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkYjhkYwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L1JFQURNRS5UcmltZWRpYQpAQCAtMCwwICsxLDE5MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMgUkVNT1ZFIHdhcm5pbmdzIG9uIHRyaW1lZGlhIGNvbXBpbGVyIAkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIyMjIyMjIyMjIyMjIyMjIyBOb3QgY3JpdGljYWwgdG8gY29tcGlsYXRpb24JCQkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCisxLiBDaGFuZ2UgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnRzIHRvIHJlbW92ZSB3YXJuaW5nIGZvciBjb25zdGFudCBleHByZXNzaW9uDQorKGkpCQltZGYuYwkJCVtpZigwKSAtLT4gI2lmIDBdDQorKGlpKQlsdHAuYwkJCVtpZigxKSAtLT4gI2lmIDFdDQorKGlpaSkJcHJlcHJvY2Vzcy5jCVtpZigxKSAtLT4gI2lmIDFdDQorKGl2KQlzYl9jZWxwLmMJCVtpZiAoU1BFRVhfU0VUX1ZCUl9NQVhfQklUUkFURTwxKSAtLT4gI2lmIChTUEVFWF9TRVRfVkJSX01BWF9CSVRSQVRFPDEpXQ0KKw0KKzIuIGFkZCBSRU1BUktfT04gbWFjcm8gdG8gcmVtb3ZlIHdhcm5pbmcgb24gbm90IHJlZmVyZW5jZSB2YXJpYWJsZQ0KKy0tIHVzZXMgKHZvaWQpPHZhcmlhYmxlPiB0byByZW1vdmUgd2FybmluZyBvbiBub3QgcmVmZXJlbmNlZCB2YXJpYWJsZQ0KKy0tICNkZWZpbmUgUkVNQVJLX09ODQorLS0JICAodm9pZCk8dmFyaWFibGU+DQorLS0gI2VuZGlmDQorLS0gc2VhcmNoIGZvciBSRU1BUktfT04gb24gdGhlIGZvbGxvd2luZyBmaWxlcyANCisoaSkJCWppdHRlci5jDQorKGlpKQlsc3AuYw0KKyhpaWkpCWx0cC5jDQorKGl2KQltZGYuYw0KKyh2KQkJZmlsdGVycy5jDQorKHZpKQlmaWx0ZXJiYW5rLmMNCisodmlpKQljYl9zZWFyY2guYw0KKyh2aWlpKQl2cS5jDQorKGl4KQl2YnIuYw0KKyh4KQkJc3RlcmVvLmMNCisoeGkpCXNwZWV4X2NhbGxiYWNrcy5jDQorKHhpaSkJcHJlcHJvY2Vzcy5jDQorDQorMy4gY29tbWVudGVkIG91dCB0aGUgZm9sbG93aW5nIGluIHBzZXVkb2Zsb2F0LmggZm9yIHVudXNlZCB2YXJpYWJsZQ0KKy8vc3RhdGljIGNvbnN0IHNweF9mbG9hdF90IEZMT0FUX0hBTEYgPSB7MTYzODQsLTE1fTsNCisNCis0LiBjb21tZW50ZWQgb3V0IHVudXNlZCB2YXJpYWJsZSBpbiBuYl9jZWxwLmMNCisvL3NweF93b3JkMTZfdCAqc3A7ICoqKnVudXNlZCB2YXJpYWJsZSoqKg0KKy8vc3A9b3V0K29mZnNldDsgKioqdW51c2VkIHZhcmlhYmxlKioqDQorLy9pbnQgc3VibW9kZTsgKioqdW51c2VkIHZhcmlhYmxlKioqDQorLy8gKioqdW51c2VkIHZhcmlhYmxlKioqDQorLy8gYWR2YW5jZSA9IHN1Ym1vZGUgPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCBTQl9TVUJNT0RFX0JJVFMpOw0KK2FkdmFuY2UgPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCBTQl9TVUJNT0RFX0JJVFMpOw0KKy8vICoqKnVudXNlZCB2YXJpYWJsZSoqKg0KKy8vYWR2YW5jZSA9IHN1Ym1vZGUgPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCBTQl9TVUJNT0RFX0JJVFMpOw0KK2FkdmFuY2UgPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCBTQl9TVUJNT0RFX0JJVFMpOw0KKy8vIHNweF93b3JkMTZfdCAqZXhjOyAqKip1bnVzZWQgdmFyaWFibGUqKiogDQorLy8gZXhjPXN0LT5leGMrb2Zmc2V0OyAqKip1bnVzZWQgdmFyaWFibGUqKioNCisNCis1LiBjb21tZW50ZWQgb3V0IHVudXNlZCB2YXJpYWJsZSBpbiB2YnIuYw0KKy8vaW50IHZhOyAqKip1bnVzZWQgdmFyaWFibGUqKioNCisvL3ZhID0gMDsgKioqdW51c2VkIHZhcmlhYmxlKioqDQorLy92YSA9IDE7ICoqKnVudXNlZCB2YXJpYWJsZSoqKg0KKw0KKzYuIGFkZGVkIEhBVkVfQ09ORklHIGludG8gbWVkZmlsdGVyLmMNCisNCisjIyMjIyMjIyMjIyMjIyMjIyBQYXRjaGVzIGZvciB0cmltZWRpYSBjb21waWxlciAJCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMjIyMjIyMjIyMjIyMjIyMjIENyaXRpY2FsIHRvIGNvbXBpbGF0aW9uCQkJCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKy0tIGNoYW5nZSB0aGUgZm9sbG93aW5nIGluIG1vZGVzLmMgYW5kIHNwZWV4LmggYXMgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBjb25zdCAqIGNvbnN0Li4uDQorKGkpIG1vZGVzLmMNCisjaWZkZWYgX19UQ1NfXw0KK2NvbnN0IFNwZWV4TW9kZSAqIHNwZWV4X21vZGVfbGlzdFtTUEVFWF9OQl9NT0RFU10gPSB7JnNwZWV4X25iX21vZGUsICZzcGVleF93Yl9tb2RlLCAmc3BlZXhfdXdiX21vZGV9Ow0KKyNlbHNlDQorY29uc3QgU3BlZXhNb2RlICogY29uc3Qgc3BlZXhfbW9kZV9saXN0W1NQRUVYX05CX01PREVTXSA9IHsmc3BlZXhfbmJfbW9kZSwgJnNwZWV4X3diX21vZGUsICZzcGVleF91d2JfbW9kZX07DQorI2VuZGlmDQorDQorKGlpKSBzcGVleC5oDQorI2lmZGVmIF9fVENTX18NCitleHRlcm4gY29uc3QgU3BlZXhNb2RlICogc3BlZXhfbW9kZV9saXN0W1NQRUVYX05CX01PREVTXTsNCisjZWxzZQ0KK2V4dGVybiBjb25zdCBTcGVleE1vZGUgKiBjb25zdCBzcGVleF9tb2RlX2xpc3RbU1BFRVhfTkJfTU9ERVNdOw0KKyNlbmRpZg0KKw0KKy0tIGFkZGVkIHRoZSAjZWxpZiBkZWZpbmVkIChUTV9BU00pIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgZm9yIG9wdGltaXplZCBjb2Rlcw0KKygxKQkJYXJjaC5oIA0KKygyKQkJY2Jfc2VhcmNoLmMNCisoMykJCWZmdHdyYXAuYw0KKyg0KQkJZmlsdGVyYmFuay5jDQorKDUpCQlmaWx0ZXJzLmMNCisoNikgCWtpc3NfZmZ0LmMNCisoNykJCWtpc3NfZmZ0ci5jDQorKDgpCQlscGMuYw0KKyg5KQkJbHNwLmMNCisoMTApCWx0cC5jDQorKDExKQltZGYuYw0KKygxMikJbWlzYy5jDQorKDEzKQlwcmVwcm9jZXNzLmMNCisoMTQpCXF1YW50X2xzcC5jDQorKDE1KQl2cS5jDQorDQorLS0gcmVvcmRlciBtYWNybyBkZWZpbmF0aW9ucyBpbiBxdWFudF9sc3AuYw0KKyNpZmRlZiBGSVhFRF9QT0lOVA0KKw0KKyNkZWZpbmUgTFNQX0xJTkVBUihpKQkJKFNITDE2KGkrMSwxMSkpDQorI2RlZmluZSBMU1BfTElORUFSX0hJR0goaSkJKEFERDE2KE1VTFQxNl8xNl8xNihpLDI1NjApLDYxNDQpKQ0KKyNkZWZpbmUgTFNQX0RJVl8yNTYoeCkJCShTSEwxNigoc3B4X3dvcmQxNl90KXgsIDUpKQ0KKyNkZWZpbmUgTFNQX0RJVl81MTIoeCkJCShTSEwxNigoc3B4X3dvcmQxNl90KXgsIDQpKQ0KKyNkZWZpbmUgTFNQX0RJVl8xMDI0KHgpCQkoU0hMMTYoKHNweF93b3JkMTZfdCl4LCAzKSkNCisjZGVmaW5lIExTUF9QSQkJCQkyNTczNg0KKw0KKyNlbHNlDQorDQorI2RlZmluZSBMU1BfTElORUFSKGkpCQkoLjI1KihpKSsuMjUpDQorI2RlZmluZSBMU1BfTElORUFSX0hJR0goaSkJKC4zMTI1KihpKSsuNzUpDQorI2RlZmluZSBMU1BfU0NBTEUJCQkyNTYuDQorI2RlZmluZSBMU1BfRElWXzI1Nih4KQkJKDAuMDAzOTA2MiooeCkpDQorI2RlZmluZSBMU1BfRElWXzUxMih4KQkJKDAuMDAxOTUzMSooeCkpDQorI2RlZmluZSBMU1BfRElWXzEwMjQoeCkJCSgwLjAwMDk3NjU2Kih4KSkNCisjZGVmaW5lIExTUF9QSQkJCQlNX1BJDQorDQorI2VuZGlmDQorDQorI2lmZGVmIEJGSU5fQVNNDQorI2luY2x1ZGUgInF1YW50X2xzcF9iZmluLmgiDQorI2VsaWYgZGVmaW5lZCAoVE1fQVNNKQ0KKyNpbmNsdWRlICJxdWFudF9sc3BfdG0uaCINCisjZW5kaWYNCisNCistLSBhZGRlZCBtYWNybyBQUkVQUk9DRVNTX01ERl9GTE9BVCB0byBhbGxvdyB1c2luZyBvZiBmbG9hdGluZyBwb2ludCANCistLSBpbiBtZGYgYW5kIHByZXByb2Nlc3Mgd2hpbGUga2VlcGluZyBmaXhlZCBwb2ludCBpbiBlbmNvZGVyL2RlY29kZXINCistLSBUaGlzIGlzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHByZXByb2Nlc3MvbWRmIHJ1biBmYXN0ZXIgb24gZmxvYXRpbmcNCistLSBwb2ludCBvbiB0cmltZWRpYQ0KKy0tIGFkZGVkIHRoZSBmb2xsb3dpbmcgMyBsaW5lcyB0byB0aGUgZmlsZXMgYmVsb3cNCisjaWZkZWYgUFJFUFJPQ0VTU19NREZfRkxPQVQNCisjdW5kZWYgRklYRURfUE9JTlQNCisjZW5kaWYNCisoMSkgbWRmLmMNCisoMikgcHJlcHJvY2Vzcy5jDQorKDMpIGZpbHRlcmJhbmsuYw0KKyg0KSBmZnR3cmFwLmMNCisoNSkga2lzc19mZnQuYw0KKyg2KSBraXNzX2ZmdHIuYw0KKw0KKy0tIGNyZWF0ZWQgYSBuZXcgVVNFX0NPTVBBQ1RfS0lTU19GRlQgZm9yIGZmdHdyYXAuYyBhbmQgc2hpZnRlZCBkZWZpbmF0aW9uIA0KKy0tIHRvIGNvbmZpZyBmaWxlIHNvIHRoYXQgdXNlciBjb25maWd1cmUgdGhlIHVzYWdlIG9mIGZmdCBvbiBjb25maWcuaA0KKy0tIFRPRVhQTE9SRTppcyBpdCBwb3NzaWJsZSB0byBzaGFyZSB0YWJsZSBiZXR3ZWVuIG1kZi9wcmVwcm9jZXNzPw0KKy0tIEludHJvZHVjaW5nIHRoaXMgbWFjcm8gbWFkZSB0aGUgZm9sbG93aW5nIGNoYW5nZXMgaW4gQyBjb2RlIA0KKy0tIE5ldyBtYWNybyB0byBmYWNpbGl0YXRlIGludGVncmF0aW9uDQorKGdyb3VwaW5nIHJlYWwvY29tcGxleCBmb3IgZGMgYW5kIG55cXVpc3QgZnJlcXVlbmN5IHNlZW1zIHRvIHJlcXVpcmUgYSBsYXJnZQ0KK2Ftb3VudCBvZiBtZW1vcnkgZm9yIG1kZiwgdGhlcmVmb3JlIGRpZCBub3QgbWFkZSB0aGUgY2hhbmdlcyBmb3IgdGhhdCkNCisoMSkgbW9kaWZ5IHByZXByb2Nlc3MuYyBvbiBpbml0IGFuZCBkZXN0cm95DQorKDIpIG1vZGlmeSBtZGYuYyBvbiBpbml0IGFuZCBkZXN0cm95DQorKDMpIHNoaWZ0ZWQgcG93ZXJfc3BlY3RydW0gdG8gZmZ0d3JhcC5jIHRvIHNoYXJlIG9wdGltaXNlZCBjb2RlIGJldHdlZW4NCisJcHJlcHJvY2Vzcy5jIGFuZCBtZGYuYw0KKwkNCisjIyMjIyMjIyMjIyMjIyMjIyBOT1RFUyAJCQkJCQkJCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKygxKSBmaXhlZCBwb2ludCBlbmNvZGluZy9kZWNvZGluZyBpcyB0ZXN0ZWQgb24gbmFycm93YmFuZA0KKwktCXNvbWUgb2YgdGhlIFFYIGZyYWN0aW9ucyBhcmUgcGFja2VkIHRvZ2V0aGVyIHRvIA0KKwkJCShmcmFjMSAqIGEgKyBmcmFjMiAqIGEpID4+IFggKHNob3VsZCBiZSBtb3JlIGFjY3VyYXRlIGluIHJvdW5kaW5nKQ0KKwkJaW5zdGVhZCBvZiANCisJCQkoKGZyYWMxICogYSkgPj4gWCkgKyAoKGZyYWMyICogYSkgPj4gWCkNCisJCXdpbGwgY2F1c2Ugc29tZSBkaWZmZXJlbnQgYmV0d2VlbiBvcHRpbWl6ZWQgYW5kIHVub3B0aW1pemVkIGNvZGUuDQorCQl0cmllZCBkZWNvZGluZy9lbmNvZGluZyBvcHRpbWl6ZWQgY29kZSBvbiBzb21lIGF1ZGlvIGZpbGVzIHJldGFpbnMgDQorCQl0aGUgY2xlYXJpdHkgb2YgdGhlIHdvcmQNCisJCQ0KKwktIHdpZGViYW5kL3VsdHJhd2lkZWJhbmQgaXMgbm90IGhlYXZpbHkgdGVzdGVkIHlldA0KKwkJDQorKDIpIG9wdGltaXplZCBmaXhlZCBwb2ludCBjb2RlIHJlcXVpcmVzIG1lbW9yeSBhbGlnbm1lbnQNCisJLQl1c2VkIGNvbmZpZyB0byBkZWJ1ZyBvbiBmdW5jdGlvbnMgd2hlcmUgbWVtb3J5IGlzIG5vdCBhbGlnbg0KKw0KKygzKSBmbG9hdGluZyBwb2ludCBvcHRpbWl6YXRpb24gZm9yIHByZXByb2Nlc3MvbWRmIGlzIHRlc3RlZA0KKwlmaXhlZCBwb2ludCBpcyBub3QgdGVzdGVkIHlldCAoZXhjZXB0IGZmdC9maWx0ZXJiYW5rKQ0KKwlOb3RlICgxKSBhbHNvIGFwcGxpZXMgdG8gc3JvdW5kIGluIGZmdCBmb3IgZml4ZWQgcG9pbnQNCisJc29tZSBvcHRpbWl6YXRpb24gaXMgcHJvdmlkZWQgZm9yIGZpeGVkIHBvaW50IGFzIGl0IHJlcXVpcmVzIGxlc3Nlcg0KKwltZW1vcnkgY29tcGFyZWQgdG8gZmxvYXRpbmcgcG9pbnQuDQorCQ0KKyg0KSB1bnJvbGwgY29uZmlndXJhdGlvbnMgcHJvdmlkZWQgdG8gcmVkdWNlIGNvZGUgc2l6ZSBpZiByZXF1aXJlZA0KKw0KKyg1KSB1c2UgcHJvZmlsZSBvcHRpb25zIG9ubHkgaWYgY29tcGlsZXIgcHJvZmlsaW5nIGZhaWxzIHRvIHdvcmsgDQorDQorKDYpIGNhbid0IGluY2x1ZGUgdGhlIG1ha2VmaWxlIGFzIGl0IGlzIGNsb3NlIHByb3ByaWV0YXJ5DQorDQorIyMjIyMjIyMjIyMjIyMjIyMgVE9ETzpGb3IgVHJpbWVkaWEJCQkJCQkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisoMSkgUG9zc2libGUgYWRkIFRTU0Egd3JhcHBlciBmb3IgY29kZWMgYnV0IGRvbid0IHRoaW5rIHRoaXMgY2FuIGJlIG9wZW4gc291cmNlLg0KKygyKSBPcHRpbWl6YXRpb25zIGZvciBmaXhlZCBwb2ludCBpbiBtZGYvcHJlcHJvY2Vzcw0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIEFkZGVkIEZpbGVzCQkJCQkJCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKy0gX2tpc3NfZmZ0X2d1dHNfdG0uaA0KKy0gY2Jfc2VhcmNoX3RtLmgNCistIGZmdHdyYXBfdG0uaA0KKy0gZmlsdGVyYmFua190bS5oDQorLSBmaWx0ZXJzX3RtLmgNCistIGZpeGVkX3RtLmgNCistIGtpc3NfZmZ0X3RtLmgNCistIGtpc3NfZmZ0cl90bS5oDQorLSBscGNfdG0uaA0KKy0gbHNwX3RtLmgNCistIGx0cF90bS5oDQorLSBtZGZfdG0uaA0KKy0gbWlzY190bS5oDQorLSBwcmVwcm9jZXNzX3RtLmgNCistIHByb2ZpbGVfdG0uaA0KKy0gcXVhbnRfbHNwX3RtLmgNCistIHZxX3RtLmgNCistIGNvbmZpZy5oDQorLSBzcGVleF9jb25maWdfdHlwZXMuaA0KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L1JFQURNRS5ibGFja2ZpbiBiLzNyZHBhcnR5L3NwZWV4L1JFQURNRS5ibGFja2ZpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZThkNjAwCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvUkVBRE1FLmJsYWNrZmluCkBAIC0wLDAgKzEsMjEgQEAKK1NwZWV4IGhhcyBiZWVuIHBvcnRlZCB0byB0aGUgQmxhY2tmaW4gRFNQLCBmb3IgdGhlIFNUQU1QIGRldmVsb3BtZW50IGJvYXJkLgorCitUaGlzIHBvcnQgaGFzIGJlZW4gdGVzdGVkIG9uIHRoZSBTVEFNUCBkZXZlbG9wbWVudCBib2FyZCBhbmQgcmVxdWlyZXMgdGhlIAordG9vbGNoYWluIGF2YWlsYWJsZSBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisKKzEvIEluIG9yZGVyIHRvIGNyb3NzLWNvbXBpbGUgZm9yIHVDbGludXggZnJvbSB0aGUgU3BlZXggdGFyYmFsbDoKKworICAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1ibGFja2Zpbi1hc20gLS1lbmFibGUtZml4ZWQtcG9pbnQgLS1ob3N0PWJmaW4tdWNsaW51eAorICBjZCBsaWJzcGVleAorICBtYWtlCisKK1RoZSAtLWVuYWJsZS1ibGFja2Zpbi1hc20gb3B0aW9uIGlzIG5vdCByZXF1aXJlZCwgYnV0IGl0IHNwZWVkcyB1cCBTcGVleCBieQorYXBwcm94aW1hdGVseSBhIGZhY3RvciBvZiB0d28uCisKKzIvIEluIG9yZGVyIHRvIGNyb3NzLWNvbXBpbGUgZm9yIHVDbGludXggZnJvbSB0aGUgU3BlZXggU1ZOOgorCisgIHN2biBjbyBodHRwOi8vc3ZuLnhpcGgub3JnL3RydW5rL3NwZWV4IHNwZWV4LXRydW5rCisgIGNkIHNwZWV4LXRydW5rCisgIC4vYXV0b2dlbi5zaCAtLWVuYWJsZS1ibGFja2Zpbi1hc20gLS1lbmFibGUtZml4ZWQtcG9pbnQgLS1ob3N0PWJmaW4tdWNsaW51eAorICBjZCBsaWJzcGVleAorICBtYWtlCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9SRUFETUUuc3ltYmlhbiBiLzNyZHBhcnR5L3NwZWV4L1JFQURNRS5zeW1iaWFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZjhkOTUKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9SRUFETUUuc3ltYmlhbgpAQCAtMCwwICsxLDQzIEBACitVc2luZyBTcGVleCBvbiBTeW1iaWFuIE9TCitDb25yYWQgUGFya2VyIGFuZCBDb2xpbiBXYXJkLCBDU0lSTyBBdXN0cmFsaWEsIEp1bHkgMjAwNAorCisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKK1RoZSBzeW1iaWFuLyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGZvbGxvd2luZyBmaWxlcyBmb3IgU3ltYmlhbidzIGFidWlsZCB0b29sOgorCisgIGJsZC5pbmYgICAgQ29tcG9uZW50IGRlZmluaXRpb24gZmlsZQorICBzcGVleC5tbXAgIFByb2plY3Qgc3BlY2lmaWNhdGlvbiBmaWxlCisgIGNvbmZpZy5oICAgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBib3RoIGVtdWxhdG9yIGFuZCBkZXZpY2UgYnVpbGRzCisKKworRGV2ZWxvcGluZyBhcHBsaWNhdGlvbnMgZm9yIGxpYnNwZWV4IGZvciBTeW1iaWFuIE9TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICBBbnkgcmVmZXJlbmNlcyB0byB0aGUgc3RhdGljYWxseSBkZWZpbmVkIFNwZWV4TW9kZSBzdHJ1Y3R1cmVzIG11c3QgYmUKKyAgICAgcmVwbGFjZWQgYnkgYSBjYWxsIHRvIGEgc3BlZXhfbGliX2dldF9tb2RlICgpIGZvciB0aGF0IG1vZGUuCisKKyAgICAgKiBSZWZlcmVuY2VzIHRvIHRoZSBzdGF0aWNhbGx5IGRlZmluZWQgYXJyYXkgc3BlZXhfbW9kZV9saXN0W21vZGVJRF0KKyAgICAgbXVzdCBiZSByZXBsYWNlZCBieSBhIGNhbGwgdG8gc3BlZXhfbGliX2dldF9tb2RlIChtb2RlSUQpOgorCistICAgICAgbW9kZSA9IHNwZWV4X21vZGVfbGlzdFttb2RlSURdOworKyAgICAgIG1vZGUgPSBzcGVleF9saWJfZ2V0X21vZGUgKG1vZGVJRCk7CisKKyAgICAgKiBSZWZlcmVuY2VzIHRvIHRoZSBzdGF0aWNhbGx5IGRlZmluZWQgbW9kZSBzdHJ1Y3R1cmVzIG11c3QgYmUgcmVwbGFjZWQ6CisKKyAgICAgICBTcGVleE1vZGUgKiBtb2RlMSwgKiBtb2RlMiwgKiBtb2RlMzsKKworLSAgICAgIG1vZGUxID0gJnNwZWV4X25iX21vZGU7CisrICAgICAgbW9kZTEgPSBzcGVleF9saWJfZ2V0X21vZGUgKFNQRUVYX01PREVJRF9OQik7CisKKy0gICAgICBtb2RlMiA9ICZzcGVleF93Yl9tb2RlOworKyAgICAgIG1vZGUyID0gc3BlZXhfbGliX2dldF9tb2RlIChTUEVFWF9NT0RFSURfV0IpOworCistICAgICAgbW9kZTMgPSAmc3BlZXhfdXdiX21vZGU7CisrICAgICAgbW9kZTMgPSBzcGVleF9saWJfZ2V0X21vZGUgKFNQRUVYX01PREVJRF9VV0IpOworCisgICAgIE5vdGUgdGhhdCB0aGUgY29uc3RhbnRzIFNQRUVYX01PREVJRF9OQiwgU1BFRVhfTU9ERUlEX1dCIGFuZAorICAgICBTUEVFWF9NT0RFSURfVVdCIHdlcmUgaW50cm9kdWNlZCBpbiBsaWJzcGVleCAxLjEuNiwgYW5kIGFyZQorICAgICBkZWZpbmVkIGluIDxzcGVleC9zcGVleC5oPi4gc3BlZXhfbGliX2dldF9tb2RlKCkgd2FzIGludHJvZHVjZWQKKyAgICAgaW4gbGlic3BlZXggMS4xLjcgYW5kIGlzIGRlY2xhcmVkIGluIDxzcGVleC9zcGVleC5oPi4KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L1JFQURNRS53aW4zMiBiLzNyZHBhcnR5L3NwZWV4L1JFQURNRS53aW4zMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjBjN2IzCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvUkVBRE1FLndpbjMyCkBAIC0wLDAgKzEsMTEgQEAKK1dpbjMyIFNwZWNpZmljIG9wdGlvbnMNCisNCitJbiBvcmRlciB0byBlbmFibGUgdGhlIGZvbGxvd2luZyBvcHRpb25zIHdpdGhpbiBTcGVleCwgeW91IHdpbGwgbmVlZCB0byBtYW51YWxseSBlZGl0IHRoZSBwcm9qZWN0IG9wdGlvbnMgZm9yIHRoZSBhcHByb3ByaWF0ZSBWQyBjb25maWd1cmF0aW9uLiAgVGhlc2UgbWFjcm9zIGNhbiBiZSBzcGVjaWZpZWQgYnkgYWRkaW5nIHRoZW0gYXMgIlByZXByb2Nlc3NvciBEZWZpbml0aW9ucyIgdW5kZXIgdGhlIGFwcHJvcHJpYXRlIENvbmZpZ3VyYXRpb24ncyBwcm9qZWN0IG9wdGlvbnMuICBJZiB5b3UgZG9uJ3Qga25vdyBob3cgdG8gZG8gdGhpcywgcGxlYXNlIGNoZWNrIHlvdXIgVmlzdWFsIEMgZG9jdW1lbnRhdGlvbi4NCisNCitGZWF0dXJlOg0KKw0KK0ludGVsIFN0cmVhbWluZyBTSU1EIEV4dGVuc2lvbnMgLSBTU0UgLSBtYWNybzogVVNFX1NTRQ0KK0ZpeGVkIHBvaW50IC0gbWFjcm86IEZJWEVEX1BPSU5UDQorRXBpYyA0OCAtIG1hY3JvOiBFUElDXzQ4Sw0KKw0KK05vdGU6IFVTRV9TU0UgYW5kIEZJWEVEX1BPSU5UIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuDQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvU3BlZXgua2RldmVsb3AgYi8zcmRwYXJ0eS9zcGVleC9TcGVleC5rZGV2ZWxvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjUyNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvU3BlZXgua2RldmVsb3AKQEAgLTAsMCArMSwxODAgQEAKKzw/eG1sIHZlcnNpb24gPSAnMS4wJz8+Cis8a2RldmVsb3A+CisgIDxnZW5lcmFsPgorICAgIDxhdXRob3I+SmVhbi1NYXJjIFZhbGluPC9hdXRob3I+CisgICAgPGVtYWlsPmplYW4tbWFyYy52YWxpbkB1c2hlcmJyb29rZS5jYTwvZW1haWw+CisgICAgPHZlcnNpb24+JFZFUlNJT04kPC92ZXJzaW9uPgorICAgIDxwcm9qZWN0bWFuYWdlbWVudD5LRGV2QXV0b1Byb2plY3Q8L3Byb2plY3RtYW5hZ2VtZW50PgorICAgIDxwcmltYXJ5bGFuZ3VhZ2U+QzwvcHJpbWFyeWxhbmd1YWdlPgorICAgIDxpZ25vcmVwYXJ0cy8+CisgICAgPHByb2plY3RkaXJlY3Rvcnk+LjwvcHJvamVjdGRpcmVjdG9yeT4KKyAgICA8YWJzb2x1dGVwcm9qZWN0cGF0aD5mYWxzZTwvYWJzb2x1dGVwcm9qZWN0cGF0aD4KKyAgICA8ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj4KKyAgICA8c2Vjb25kYXJ5TGFuZ3VhZ2VzLz4KKyAgICA8dmVyc2lvbmNvbnRyb2w+a2RldnN1YnZlcnNpb248L3ZlcnNpb25jb250cm9sPgorICAgIDxkZWZhdWx0ZW5jb2Rpbmc+PC9kZWZhdWx0ZW5jb2Rpbmc+CisgICAgPHByb2plY3RuYW1lPlNwZWV4PC9wcm9qZWN0bmFtZT4KKyAgPC9nZW5lcmFsPgorICA8a2RldmF1dG9wcm9qZWN0PgorICAgIDxnZW5lcmFsPgorICAgICAgPGFjdGl2ZXRhcmdldD5saWJzcGVleC9saWJzcGVleC5sYTwvYWN0aXZldGFyZ2V0PgorICAgICAgPHVzZWNvbmZpZ3VyYXRpb24+ZGVmYXVsdDwvdXNlY29uZmlndXJhdGlvbj4KKyAgICA8L2dlbmVyYWw+CisgICAgPHJ1bj4KKyAgICAgIDxtYWlucHJvZ3JhbT5zcmMvU3BlZXg8L21haW5wcm9ncmFtPgorICAgICAgPGRpcmVjdG9yeXJhZGlvPmV4ZWN1dGFibGU8L2RpcmVjdG9yeXJhZGlvPgorICAgICAgPGN1c3RvbWRpcmVjdG9yeT4vPC9jdXN0b21kaXJlY3Rvcnk+CisgICAgICA8cHJvZ3JhbWFyZ3MvPgorICAgICAgPHRlcm1pbmFsPmZhbHNlPC90ZXJtaW5hbD4KKyAgICAgIDxhdXRvY29tcGlsZT50cnVlPC9hdXRvY29tcGlsZT4KKyAgICAgIDxlbnZ2YXJzLz4KKyAgICAgIDxhdXRvaW5zdGFsbD5mYWxzZTwvYXV0b2luc3RhbGw+CisgICAgICA8YXV0b2tkZXN1PmZhbHNlPC9hdXRva2Rlc3U+CisgICAgPC9ydW4+CisgICAgPGNvbmZpZ3VyYXRpb25zPgorICAgICAgPG9wdGltaXplZD4KKyAgICAgICAgPGJ1aWxkZGlyPm9wdGltaXplZDwvYnVpbGRkaXI+CisgICAgICAgIDxjY29tcGlsZXI+R2NjT3B0aW9uczwvY2NvbXBpbGVyPgorICAgICAgICA8Y3h4Y29tcGlsZXI+R3BwT3B0aW9uczwvY3h4Y29tcGlsZXI+CisgICAgICAgIDxmNzdjb21waWxlcj5HNzdPcHRpb25zPC9mNzdjb21waWxlcj4KKyAgICAgICAgPGNmbGFncz4tTzIgLWcwPC9jZmxhZ3M+CisgICAgICA8L29wdGltaXplZD4KKyAgICAgIDxkZWJ1Zz4KKyAgICAgICAgPGNvbmZpZ2FyZ3M+LS1lbmFibGUtZGVidWc9ZnVsbDwvY29uZmlnYXJncz4KKyAgICAgICAgPGJ1aWxkZGlyPmRlYnVnPC9idWlsZGRpcj4KKyAgICAgICAgPGNjb21waWxlcj5HY2NPcHRpb25zPC9jY29tcGlsZXI+CisgICAgICAgIDxjeHhjb21waWxlcj5HcHBPcHRpb25zPC9jeHhjb21waWxlcj4KKyAgICAgICAgPGY3N2NvbXBpbGVyPkc3N09wdGlvbnM8L2Y3N2NvbXBpbGVyPgorICAgICAgICA8Y2ZsYWdzPi1PMCAtZzM8L2NmbGFncz4KKyAgICAgIDwvZGVidWc+CisgICAgICA8ZGVmYXVsdD4KKyAgICAgICAgPGVudnZhcnMvPgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvY29uZmlndXJhdGlvbnM+CisgICAgPG1ha2U+CisgICAgICA8ZW52dmFycz4KKyAgICAgICAgPGVudnZhciB2YWx1ZT0iMSIgbmFtZT0iV0FOVF9BVVRPQ09ORl8yXzUiIC8+CisgICAgICAgIDxlbnZ2YXIgdmFsdWU9IjEiIG5hbWU9IldBTlRfQVVUT01BS0VfMV82IiAvPgorICAgICAgPC9lbnZ2YXJzPgorICAgICAgPGFib3J0b25lcnJvcj5mYWxzZTwvYWJvcnRvbmVycm9yPgorICAgICAgPG51bWJlcm9mam9icz40PC9udW1iZXJvZmpvYnM+CisgICAgICA8ZG9udGFjdD5mYWxzZTwvZG9udGFjdD4KKyAgICAgIDxtYWtlYmluLz4KKyAgICAgIDxydW5tdWx0aXBsZWpvYnM+dHJ1ZTwvcnVubXVsdGlwbGVqb2JzPgorICAgICAgPHByaW8+MDwvcHJpbz4KKyAgICA8L21ha2U+CisgIDwva2RldmF1dG9wcm9qZWN0PgorICA8a2RldmRlYnVnZ2VyPgorICAgIDxnZW5lcmFsPgorICAgICAgPGRiZ3NoZWxsPmxpYnRvb2w8L2RiZ3NoZWxsPgorICAgICAgPHByb2dyYW1hcmdzLz4KKyAgICAgIDxnZGJwYXRoPjwvZ2RicGF0aD4KKyAgICAgIDxjb25maWdHZGJTY3JpcHQ+PC9jb25maWdHZGJTY3JpcHQ+CisgICAgICA8cnVuU2hlbGxTY3JpcHQ+PC9ydW5TaGVsbFNjcmlwdD4KKyAgICAgIDxydW5HZGJTY3JpcHQ+PC9ydW5HZGJTY3JpcHQ+CisgICAgICA8YnJlYWtvbmxvYWRpbmdsaWJzPnRydWU8L2JyZWFrb25sb2FkaW5nbGlicz4KKyAgICAgIDxzZXBhcmF0ZXR0eT5mYWxzZTwvc2VwYXJhdGV0dHk+CisgICAgICA8ZmxvYXRpbmd0b29sYmFyPmZhbHNlPC9mbG9hdGluZ3Rvb2xiYXI+CisgICAgPC9nZW5lcmFsPgorICAgIDxkaXNwbGF5PgorICAgICAgPHN0YXRpY21lbWJlcnM+ZmFsc2U8L3N0YXRpY21lbWJlcnM+CisgICAgICA8ZGVtYW5nbGVuYW1lcz50cnVlPC9kZW1hbmdsZW5hbWVzPgorICAgICAgPG91dHB1dHJhZGl4PjEwPC9vdXRwdXRyYWRpeD4KKyAgICA8L2Rpc3BsYXk+CisgIDwva2RldmRlYnVnZ2VyPgorICA8a2RldmZpbGVjcmVhdGU+CisgICAgPGZpbGV0eXBlcy8+CisgICAgPHVzZWdsb2JhbHR5cGVzPgorICAgICAgPHR5cGUgZXh0PSJjIiAvPgorICAgICAgPHR5cGUgZXh0PSJoIiAvPgorICAgIDwvdXNlZ2xvYmFsdHlwZXM+CisgIDwva2RldmZpbGVjcmVhdGU+CisgIDxrZGV2Y3Bwc3VwcG9ydD4KKyAgICA8cmVmZXJlbmNlcy8+CisgICAgPGNvZGVjb21wbGV0aW9uPgorICAgICAgPGluY2x1ZGVHbG9iYWxGdW5jdGlvbnM+dHJ1ZTwvaW5jbHVkZUdsb2JhbEZ1bmN0aW9ucz4KKyAgICAgIDxpbmNsdWRlVHlwZXM+dHJ1ZTwvaW5jbHVkZVR5cGVzPgorICAgICAgPGluY2x1ZGVFbnVtcz50cnVlPC9pbmNsdWRlRW51bXM+CisgICAgICA8aW5jbHVkZVR5cGVkZWZzPmZhbHNlPC9pbmNsdWRlVHlwZWRlZnM+CisgICAgICA8YXV0b21hdGljQ29kZUNvbXBsZXRpb24+dHJ1ZTwvYXV0b21hdGljQ29kZUNvbXBsZXRpb24+CisgICAgICA8YXV0b21hdGljQXJndW1lbnRzSGludD50cnVlPC9hdXRvbWF0aWNBcmd1bWVudHNIaW50PgorICAgICAgPGF1dG9tYXRpY0hlYWRlckNvbXBsZXRpb24+dHJ1ZTwvYXV0b21hdGljSGVhZGVyQ29tcGxldGlvbj4KKyAgICAgIDxjb2RlQ29tcGxldGlvbkRlbGF5PjM1MDwvY29kZUNvbXBsZXRpb25EZWxheT4KKyAgICAgIDxhcmd1bWVudHNIaW50RGVsYXk+NDAwPC9hcmd1bWVudHNIaW50RGVsYXk+CisgICAgICA8aGVhZGVyQ29tcGxldGlvbkRlbGF5PjI1MDwvaGVhZGVyQ29tcGxldGlvbkRlbGF5PgorICAgICAgPHNob3dPbmx5QWNjZXNzaWJsZUl0ZW1zPmZhbHNlPC9zaG93T25seUFjY2Vzc2libGVJdGVtcz4KKyAgICAgIDxjb21wbGV0aW9uQm94SXRlbU9yZGVyPjA8L2NvbXBsZXRpb25Cb3hJdGVtT3JkZXI+CisgICAgICA8aG93RXZhbHVhdGlvbkNvbnRleHRNZW51PnRydWU8L2hvd0V2YWx1YXRpb25Db250ZXh0TWVudT4KKyAgICAgIDxzaG93Q29tbWVudFdpdGhBcmd1bWVudEhpbnQ+dHJ1ZTwvc2hvd0NvbW1lbnRXaXRoQXJndW1lbnRIaW50PgorICAgICAgPHN0YXR1c0JhclR5cGVFdmFsdWF0aW9uPmZhbHNlPC9zdGF0dXNCYXJUeXBlRXZhbHVhdGlvbj4KKyAgICAgIDxuYW1lc3BhY2VBbGlhc2VzPnN0ZD1fR0xJQkNYWF9TVEQ7X19nbnVfY3h4PXN0ZDwvbmFtZXNwYWNlQWxpYXNlcz4KKyAgICAgIDxwcm9jZXNzUHJpbWFyeVR5cGVzPnRydWU8L3Byb2Nlc3NQcmltYXJ5VHlwZXM+CisgICAgICA8cHJvY2Vzc0Z1bmN0aW9uQXJndW1lbnRzPnRydWU8L3Byb2Nlc3NGdW5jdGlvbkFyZ3VtZW50cz4KKyAgICAgIDxwcmVQcm9jZXNzQWxsSGVhZGVycz5mYWxzZTwvcHJlUHJvY2Vzc0FsbEhlYWRlcnM+CisgICAgICA8cGFyc2VNaXNzaW5nSGVhZGVycz5mYWxzZTwvcGFyc2VNaXNzaW5nSGVhZGVycz4KKyAgICAgIDxyZXNvbHZlSW5jbHVkZVBhdGhzPnRydWU8L3Jlc29sdmVJbmNsdWRlUGF0aHM+CisgICAgICA8YWx3YXlzUGFyc2VJbkJhY2tncm91bmQ+dHJ1ZTwvYWx3YXlzUGFyc2VJbkJhY2tncm91bmQ+CisgICAgICA8dXNlUGVybWFuZW50Q2FjaGluZz50cnVlPC91c2VQZXJtYW5lbnRDYWNoaW5nPgorICAgICAgPGFsd2F5c0luY2x1ZGVOYW1lc3BhY2VzPnRydWU8L2Fsd2F5c0luY2x1ZGVOYW1lc3BhY2VzPgorICAgICAgPGluY2x1ZGVQYXRocz4uOzwvaW5jbHVkZVBhdGhzPgorICAgIDwvY29kZWNvbXBsZXRpb24+CisgICAgPHF0PgorICAgICAgPHVzZWQ+ZmFsc2U8L3VzZWQ+CisgICAgICA8dmVyc2lvbj4zPC92ZXJzaW9uPgorICAgICAgPHJvb3Q+L3Vzci9zaGFyZS9xdDM8L3Jvb3Q+CisgICAgICA8aW5jbHVkZXN0eWxlPjM8L2luY2x1ZGVzdHlsZT4KKyAgICAgIDxkZXNpZ25lcmludGVncmF0aW9uPkVtYmVkZGVkS0RldkRlc2lnbmVyPC9kZXNpZ25lcmludGVncmF0aW9uPgorICAgICAgPHFtYWtlPi91c3Ivc2hhcmUvcXQzL2Jpbi9xbWFrZTwvcW1ha2U+CisgICAgICA8ZGVzaWduZXI+PC9kZXNpZ25lcj4KKyAgICAgIDxkZXNpZ25lcnBsdWdpbnBhdGhzLz4KKyAgICA8L3F0PgorICAgIDxjcmVhdGVnZXR0ZXJzZXR0ZXI+CisgICAgICA8cHJlZml4R2V0PjwvcHJlZml4R2V0PgorICAgICAgPHByZWZpeFNldD5zZXQ8L3ByZWZpeFNldD4KKyAgICAgIDxwcmVmaXhWYXJpYWJsZT5tXyxfPC9wcmVmaXhWYXJpYWJsZT4KKyAgICAgIDxwYXJhbWV0ZXJOYW1lPnRoZVZhbHVlPC9wYXJhbWV0ZXJOYW1lPgorICAgICAgPGlubGluZUdldD50cnVlPC9pbmxpbmVHZXQ+CisgICAgICA8aW5saW5lU2V0PnRydWU8L2lubGluZVNldD4KKyAgICA8L2NyZWF0ZWdldHRlcnNldHRlcj4KKyAgICA8c3BsaXRoZWFkZXJzb3VyY2U+CisgICAgICA8ZW5hYmxlZD50cnVlPC9lbmFibGVkPgorICAgICAgPHN5bmNocm9uaXplPnRydWU8L3N5bmNocm9uaXplPgorICAgICAgPG9yaWVudGF0aW9uPkhvcml6b250YWw8L29yaWVudGF0aW9uPgorICAgIDwvc3BsaXRoZWFkZXJzb3VyY2U+CisgIDwva2RldmNwcHN1cHBvcnQ+CisgIDxrZGV2ZmlsZXZpZXc+CisgICAgPGdyb3Vwcz4KKyAgICAgIDxoaWRlbm9ucHJvamVjdGZpbGVzPmZhbHNlPC9oaWRlbm9ucHJvamVjdGZpbGVzPgorICAgICAgPGhpZGVub25sb2NhdGlvbj5mYWxzZTwvaGlkZW5vbmxvY2F0aW9uPgorICAgIDwvZ3JvdXBzPgorICAgIDx0cmVlPgorICAgICAgPGhpZGVwYXR0ZXJucz4qLm8sKi5sbyxDVlM8L2hpZGVwYXR0ZXJucz4KKyAgICAgIDxoaWRlbm9ucHJvamVjdGZpbGVzPnRydWU8L2hpZGVub25wcm9qZWN0ZmlsZXM+CisgICAgICA8c2hvd3Zjc2ZpZWxkcz5mYWxzZTwvc2hvd3Zjc2ZpZWxkcz4KKyAgICA8L3RyZWU+CisgIDwva2RldmZpbGV2aWV3PgorICA8a2RldmRvY3RyZWV2aWV3PgorICAgIDxwcm9qZWN0ZG9jPgorICAgICAgPHVzZXJkb2NEaXI+aHRtbC88L3VzZXJkb2NEaXI+CisgICAgICA8YXBpZG9jRGlyPmh0bWwvPC9hcGlkb2NEaXI+CisgICAgPC9wcm9qZWN0ZG9jPgorICAgIDxpZ25vcmVxdF94bWwvPgorICAgIDxpZ25vcmVkb3h5Z2VuLz4KKyAgICA8aWdub3Jla2RvY3MvPgorICAgIDxpZ25vcmV0b2NzLz4KKyAgICA8aWdub3JlZGV2aGVscC8+CisgIDwva2RldmRvY3RyZWV2aWV3PgorICA8Y3Bwc3VwcG9ydHBhcnQ+CisgICAgPGZpbGV0ZW1wbGF0ZXM+CisgICAgICA8aW50ZXJmYWNlc3VmZml4Pi5oPC9pbnRlcmZhY2VzdWZmaXg+CisgICAgICA8aW1wbGVtZW50YXRpb25zdWZmaXg+LmNwcDwvaW1wbGVtZW50YXRpb25zdWZmaXg+CisgICAgPC9maWxldGVtcGxhdGVzPgorICA8L2NwcHN1cHBvcnRwYXJ0PgorICA8a2RldmRvY3VtZW50YXRpb24+CisgICAgPHByb2plY3Rkb2M+CisgICAgICA8ZG9jc3lzdGVtLz4KKyAgICAgIDxkb2N1cmwvPgorICAgICAgPHVzZXJtYW51YWx1cmwvPgorICAgIDwvcHJvamVjdGRvYz4KKyAgPC9rZGV2ZG9jdW1lbnRhdGlvbj4KKzwva2RldmVsb3A+CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9TcGVleC5zcGVjLmluIGIvM3JkcGFydHkvc3BlZXgvU3BlZXguc3BlYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTZmNDM1Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvU3BlZXguc3BlYy5pbgpAQCAtMCwwICsxLDcwIEBACislZGVmaW5lIG5hbWUgICAgIEBQQUNLQUdFQAorJWRlZmluZSB2ZXIgICAgICBAVkVSU0lPTkAKKyVkZWZpbmUgcmVsICAgICAgMQorCitTdW1tYXJ5OiBBbiBvcGVuLXNvdXJjZSwgcGF0ZW50LWZyZWUgc3BlZWNoIGNvZGVjCitOYW1lOiAlbmFtZQorVmVyc2lvbjogJXZlcgorUmVsZWFzZTogJXJlbAorTGljZW5zZTogQlNECitHcm91cDogQXBwbGljYXRpb24vRGV2ZWwKK1NvdXJjZTogaHR0cDovL3d3dy5zcGVleC5vcmcvZG93bmxvYWQvJXtuYW1lfS0le3Zlcn0udGFyLmd6CitVUkw6IGh0dHA6Ly93d3cuc3BlZXgub3JnLworVmVuZG9yOiBTcGVleAorUGFja2FnZXI6IEplYW4tTWFyYyBWYWxpbiAoamVhbi1tYXJjLnZhbGluQHVzaGVyYnJvb2tlLmNhKQorQnVpbGRSb290OiAvdmFyL3RtcC8le25hbWV9LWJ1aWxkLXJvb3QKK0RvY2RpcjogL3Vzci9zaGFyZS9kb2MKKworJWRlc2NyaXB0aW9uCitTcGVleCBpcyBhIHBhdGVudC1mcmVlIGF1ZGlvIGNvZGVjIGRlc2lnbmVkIGVzcGVjaWFsbHkgZm9yIHZvaWNlICh1bmxpa2UgCitWb3JiaXMgd2hpY2ggdGFyZ2V0cyBnZW5lcmFsIGF1ZGlvKSBzaWduYWxzIGFuZCBwcm92aWRpbmcgZ29vZCBuYXJyb3diYW5kIAorYW5kIHdpZGViYW5kIHF1YWxpdHkuIFRoaXMgcHJvamVjdCBhaW1zIHRvIGJlIGNvbXBsZW1lbnRhcnkgdG8gdGhlIFZvcmJpcworY29kZWMuCisKKyVwYWNrYWdlIGRldmVsCitTdW1tYXJ5OglTcGVleCBkZXZlbG9wbWVudCBmaWxlcworR3JvdXA6CQlEZXZlbG9wbWVudC9MaWJyYXJpZXMKK1JlcXVpcmVzOgkle25hbWV9ID0gJXt2ZXJzaW9ufQorCislZGVzY3JpcHRpb24gZGV2ZWwKK1NwZWV4IGRldmVsb3BtZW50IGZpbGVzLgorCislY2hhbmdlbG9nCisqIFRodSBPY3QgMDMgMjAwMiBKZWFuLU1hcmMgVmFsaW4gCistIEFkZGVkIGRldmVsIHBhY2thZ2UgaW5zcGlyZWQgZnJvbSBQTEQgc3BlYyBmaWxlCisKKyogVHVlIEp1bCAzMCAyMDAyIEZyZWRyaWsgUmFtYnJpcyA8Ym9vc3RAdXNlcnMuc291cmNlZm9yZ2UubmV0PiAwLjUuMgorLSBBZGRlZCBidWlsZHJvb3QgYW5kIGRvY2RpciBhbmQgbGRjb25maWcuIE1ha2VzIGl0IGJ1aWxhZGJsZSBieSBub24tcm9vdHMKKyAgYW5kIGFsc28gZG9lc24ndCB3cml0ZSB0byBhY3R1YWwgbGlicmFyeSBwYXRocyB3aGVuIGJ1aWxkaW5nLgorCislcHJlcAorJXNldHVwCisKKyVidWlsZAorZXhwb3J0IENGTEFHUz0nLU8zJworLi9jb25maWd1cmUgLS1wcmVmaXg9L3VzciAtLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtc3RhdGljCittYWtlCisKKyVpbnN0YWxsCitybSAtcmYgJFJQTV9CVUlMRF9ST09UCittYWtlIERFU1RESVI9JFJQTV9CVUlMRF9ST09UIGluc3RhbGwKKworJXBvc3QgLXAgL3NiaW4vbGRjb25maWcKKyVwb3N0dW4gLXAgL3NiaW4vbGRjb25maWcKKworJWZpbGVzCislZGVmYXR0cig2NDQscm9vdCxyb290LDc1NSkKKyVkb2MgQ09QWUlORyBBVVRIT1JTIENoYW5nZUxvZyBORVdTIFJFQURNRQorJWRvYyBkb2MvbWFudWFsLnBkZgorL3Vzci9zaGFyZS9tYW4vbWFuMS9zcGVleGVuYy4xKgorL3Vzci9zaGFyZS9tYW4vbWFuMS9zcGVleGRlYy4xKgorJWF0dHIoNzU1LHJvb3Qscm9vdCkgJXtfYmluZGlyfS9zcGVleCoKKyVhdHRyKDc1NSxyb290LHJvb3QpICV7X2xpYmRpcn0vbGlic3BlZXgqLnNvKgorCislZmlsZXMgZGV2ZWwKKyVkZWZhdHRyKDY0NCxyb290LHJvb3QsNzU1KQorJWF0dHIoNzU1LHJvb3Qscm9vdCkgJXtfbGliZGlyfS9saWJzcGVleCoubGEKKyV7X2luY2x1ZGVkaXJ9L3NwZWV4L3NwZWV4Ki5oCisvdXNyL3NoYXJlL2FjbG9jYWwvc3BlZXgubTQKKyV7X2xpYmRpcn0vcGtnY29uZmlnL3NwZWV4LnBjCisle19saWJkaXJ9L2xpYnNwZWV4Ki5hCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9UT0RPIGIvM3JkcGFydHkvc3BlZXgvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjQyNThhCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvVE9ETwpAQCAtMCwwICsxLDUzIEBACitGb3IgMS4yYmV0YTI6CisqVXNlIGZ1bGwgY29tcGxleCB2YWx1ZXMgZm9yIGZmdCByZXN1bHRzPworKmdldCByaWQgb2YgY3JhcCB0aGF0IHNob3VsZG4ndCBiZSBleHBvc2VkIGluIHNwZWV4LmgKKypSZWR1Y2Ugd2lkZWJhbmQgUkFNIHJlcXVpcmVtZW50cworKk1ha2UgZm9yZWdyb3VuZCBmaWx0ZXIgMTYgYml0cyBpbiBBRUMuCisqRW5hYmxlIHJlc2FtcGxlciBpbiBidWlsZAorKkFkZCBkdW1waW5nIG9mIGRhdGEgZm9yIGRlYnVnIHB1cnBvc2VzLgorKnJlbW92ZSB3aWRlYmFuZCBwc2V1ZG8tc3RhY2sKKypwaXRjaCBwcmVkaWN0aW9uIHNhdHVyYXRpb24gdG8gcHJldmVudCBOYU4tYmFzZWQgRG9TIGF0dGFja3MuCisqRml4IGppdHRlciBidWZmZXIKKworc3BlZXhfZGVjb2Rlcl9jdGwoKSBjYWxsIHRvIGRldGVjdCBzaWxlbmNlCitDb21wbGV0ZSByZXNhbXBsZXIgQVBJIChlcnJvciBjb2RlcykKK0ZpeCByZXNhbXBsZXIgY29ybmVyIGNhc2UKK1VzZSBsb3dlciBzaW5jIG92ZXJzYW1wbGluZyB3aGVuIGRvd24tc2FtcGxpbmcKKyoqRml4IHJlZ2lzdGVyIGlzc3VlIG9uIEJsYWNrZmluCitNZXJnZSBUcmlNZWRpYSBzdHVmZgorTWFrZSBpdCBwb3NzaWJsZSB0byBkZWNvZGUgYSAicmF3IiBwYWNrZXQgd2l0aCBTcGVleEJpdHMKK0NvbnRyb2wgZGVsYXkgaW4gbmV3IEFFQyBBUEkuCisKK0xhdGVyOgorRG8gVkFEIHByb3Blcmx5CitXYXJuaW5nL2Vycm9yIGhhbmRsaW5nCistLWVuYWJsZS17YWVjLHByZXByb2Nlc3NvcixqaXR0ZXIscmVzYW1wbGVyfQorCisKK09wdGltaXNhdGlvbnMKKy0gQWRkIHJlc3RyaWN0IGluIGEgZmV3IHBsYWNlcz8KKy0gZW5hYmxlIDR4NCB2ZXJzaW9uIG9mIHBpdGNoX3hjb3JyKCk/CisKK1dvdWxkIGJlIG5pY2U6CitJbXBsZW1lbnQgd2lkZWJhbmQgc3BsaXQgYXMgSUlSIGluc3RlYWQgb2YgUU1GLgorCitBbGxvY2F0b3Igb3ZlcnJpZGUgKHNwZWV4X2xpYl9jdGw/KQorQmV0dGVyIGVycm9yIGhhbmRsaW5nCitGaXhlZC1wb2ludDoKKyAgLSBXaWRlYmFuZAorICAtIEppdHRlciBidWZmZXIKK0Rlbm9pc2VyOgorICAtIEJldHRlciBub2lzZSBhZGFwdGF0aW9uCitBR0M6CisgIC0gVXNlIG1lZGlhbiBmaWx0ZXJpbmcgaW5zdGVhZCBvZiAibm9uLWxpbmVhciBtZWFuIj8KKworRmVhdHVyZXMKKy1JbXByb3ZlIGVycm9yIGhhbmRsaW5nICh3aXRoIHBlcnJvci1saWtlIGNhbGw/KQorCitTdGFuZGFyZHMKKy1Db21wbGV0ZSBTcGVleCBSVFAgcHJvZmlsZQorLU1JTUUgdHlwZSByZWdpc3RyYXRpb24KKworaWRlYXM6CitQZWVsYWJsZSBzdHJlYW0gKGRvdWJsZSBjb2RlYm9vaywgaGlnaGVyIGJhbmRzLCBzdGVyZW8pCitMUEMgZnJvbSBzcGVjdHJhbCBkb21haW4KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2FjaW5jbHVkZS5tNCBiLzNyZHBhcnR5L3NwZWV4L2FjaW5jbHVkZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTFmMWFiCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsMTAyIEBACisjIENvbmZpZ3VyZSBwYXRocyBmb3IgbGlib2dnCisjIEphY2sgTW9mZml0dCA8amFja0BpY2VjYXN0Lm9yZz4gMTAtMjEtMjAwMAorIyBTaGFtZWxlc3NseSBzdG9sZW4gZnJvbSBPd2VuIFRheWxvciBhbmQgTWFuaXNoIFNpbmdoCisKK2RubCBYSVBIX1BBVEhfT0dHKFtBQ1RJT04tSUYtRk9VTkQgWywgQUNUSU9OLUlGLU5PVC1GT1VORF1dKQorZG5sIFRlc3QgZm9yIGxpYm9nZywgYW5kIGRlZmluZSBPR0dfQ0ZMQUdTIGFuZCBPR0dfTElCUworZG5sCitBQ19ERUZVTihbWElQSF9QQVRIX09HR10sCitbZG5sIAorZG5sIEdldCB0aGUgY2ZsYWdzIGFuZCBsaWJyYXJpZXMKK2RubAorQUNfQVJHX1dJVEgob2dnLFsgIC0td2l0aC1vZ2c9UEZYICAgUHJlZml4IHdoZXJlIGxpYm9nZyBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sIG9nZ19wcmVmaXg9IiR3aXRodmFsIiwgb2dnX3ByZWZpeD0iIikKK0FDX0FSR19XSVRIKG9nZy1saWJyYXJpZXMsWyAgLS13aXRoLW9nZy1saWJyYXJpZXM9RElSICAgRGlyZWN0b3J5IHdoZXJlIGxpYm9nZyBsaWJyYXJ5IGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwgb2dnX2xpYnJhcmllcz0iJHdpdGh2YWwiLCBvZ2dfbGlicmFyaWVzPSIiKQorQUNfQVJHX1dJVEgob2dnLWluY2x1ZGVzLFsgIC0td2l0aC1vZ2ctaW5jbHVkZXM9RElSICAgRGlyZWN0b3J5IHdoZXJlIGxpYm9nZyBoZWFkZXIgZmlsZXMgYXJlIGluc3RhbGxlZCAob3B0aW9uYWwpXSwgb2dnX2luY2x1ZGVzPSIkd2l0aHZhbCIsIG9nZ19pbmNsdWRlcz0iIikKK0FDX0FSR19FTkFCTEUob2dndGVzdCwgWyAgLS1kaXNhYmxlLW9nZ3Rlc3QgICAgICAgRG8gbm90IHRyeSB0byBjb21waWxlIGFuZCBydW4gYSB0ZXN0IE9nZyBwcm9ncmFtXSwsIGVuYWJsZV9vZ2d0ZXN0PXllcykKKworICBpZiB0ZXN0ICJ4JG9nZ19saWJyYXJpZXMiICE9ICJ4IiA7IHRoZW4KKyAgICBPR0dfTElCUz0iLUwkb2dnX2xpYnJhcmllcyIKKyAgZWxpZiB0ZXN0ICJ4JG9nZ19wcmVmaXgiICE9ICJ4IiA7IHRoZW4KKyAgICBPR0dfTElCUz0iLUwkb2dnX3ByZWZpeC9saWIiCisgIGVsaWYgdGVzdCAieCRwcmVmaXgiICE9ICJ4Tk9ORSIgOyB0aGVuCisgICAgT0dHX0xJQlM9Ii1MJHByZWZpeC9saWIiCisgIGZpCisKKyAgT0dHX0xJQlM9IiRPR0dfTElCUyAtbG9nZyIKKworICBpZiB0ZXN0ICJ4JG9nZ19pbmNsdWRlcyIgIT0gIngiIDsgdGhlbgorICAgIE9HR19DRkxBR1M9Ii1JJG9nZ19pbmNsdWRlcyIKKyAgZWxpZiB0ZXN0ICJ4JG9nZ19wcmVmaXgiICE9ICJ4IiA7IHRoZW4KKyAgICBPR0dfQ0ZMQUdTPSItSSRvZ2dfcHJlZml4L2luY2x1ZGUiCisgIGVsaWYgdGVzdCAieCRwcmVmaXgiICE9ICJ4Tk9ORSI7IHRoZW4KKyAgICBPR0dfQ0ZMQUdTPSItSSRwcmVmaXgvaW5jbHVkZSIKKyAgZmkKKworICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIE9nZykKKyAgbm9fb2dnPSIiCisKKworICBpZiB0ZXN0ICJ4JGVuYWJsZV9vZ2d0ZXN0IiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorICAgIENGTEFHUz0iJENGTEFHUyAkT0dHX0NGTEFHUyIKKyAgICBMSUJTPSIkTElCUyAkT0dHX0xJQlMiCitkbmwKK2RubCBOb3cgY2hlY2sgaWYgdGhlIGluc3RhbGxlZCBPZ2cgaXMgc3VmZmljaWVudGx5IG5ldy4KK2RubAorICAgICAgcm0gLWYgY29uZi5vZ2d0ZXN0CisgICAgICBBQ19UUllfUlVOKFsKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPG9nZy9vZ2cuaD4KKworaW50IG1haW4gKCkKK3sKKyAgc3lzdGVtKCJ0b3VjaCBjb25mLm9nZ3Rlc3QiKTsKKyAgcmV0dXJuIDA7Cit9CisKK10sLCBub19vZ2c9eWVzLFtlY2hvICRhY19uICJjcm9zcyBjb21waWxpbmc7IGFzc3VtZWQgT0suLi4gJGFjX2MiXSkKKyAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKyAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorICBmaQorCisgIGlmIHRlc3QgIngkbm9fb2dnIiA9ICJ4IiA7IHRoZW4KKyAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgIGlmZWxzZShbJDFdLCAsIDosIFskMV0pICAgICAKKyAgZWxzZQorICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBpZiB0ZXN0IC1mIGNvbmYub2dndGVzdCA7IHRoZW4KKyAgICAgICA6CisgICAgIGVsc2UKKyAgICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBPZ2cgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCisgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRPR0dfQ0ZMQUdTIgorICAgICAgIExJQlM9IiRMSUJTICRPR0dfTElCUyIKKyAgICAgICBBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxvZ2cvb2dnLmg+CitdLCAgICAgWyByZXR1cm4gMDsgXSwKKyAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGNvbXBpbGVkLCBidXQgZGlkIG5vdCBydW4uIFRoaXMgdXN1YWxseSBtZWFucyIKKyAgICAgICBlY2hvICIqKiogdGhhdCB0aGUgcnVuLXRpbWUgbGlua2VyIGlzIG5vdCBmaW5kaW5nIE9nZyBvciBmaW5kaW5nIHRoZSB3cm9uZyIKKyAgICAgICBlY2hvICIqKiogdmVyc2lvbiBvZiBPZ2cuIElmIGl0IGlzIG5vdCBmaW5kaW5nIE9nZywgeW91J2xsIG5lZWQgdG8gc2V0IHlvdXIiCisgICAgICAgZWNobyAiKioqIExEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmYgdG8gcG9pbnQiCisgICAgICAgZWNobyAiKioqIHRvIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24gIEFsc28sIG1ha2Ugc3VyZSB5b3UgaGF2ZSBydW4gbGRjb25maWcgaWYgdGhhdCIKKyAgICAgICBlY2hvICIqKiogaXMgcmVxdWlyZWQgb24geW91ciBzeXN0ZW0iCisgICAgICAgZWNobyAiKioqIgorICAgICAgIGVjaG8gIioqKiBJZiB5b3UgaGF2ZSBhbiBvbGQgdmVyc2lvbiBpbnN0YWxsZWQsIGl0IGlzIGJlc3QgdG8gcmVtb3ZlIGl0LCBhbHRob3VnaCIKKyAgICAgICBlY2hvICIqKiogeW91IG1heSBhbHNvIGJlIGFibGUgdG8gZ2V0IHRoaW5ncyB0byB3b3JrIGJ5IG1vZGlmeWluZyBMRF9MSUJSQVJZX1BBVEgiXSwKKyAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGZhaWxlZCB0byBjb21waWxlIG9yIGxpbmsuIFNlZSB0aGUgZmlsZSBjb25maWcubG9nIGZvciB0aGUiCisgICAgICAgZWNobyAiKioqIGV4YWN0IGVycm9yIHRoYXQgb2NjdXJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIE9nZyB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgorICAgICAgIGVjaG8gIioqKiBvciB0aGF0IHlvdSBoYXZlIG1vdmVkIE9nZyBzaW5jZSBpdCB3YXMgaW5zdGFsbGVkLiIgXSkKKyAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKyAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorICAgICBmaQorICAgICBPR0dfQ0ZMQUdTPSIiCisgICAgIE9HR19MSUJTPSIiCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCisgIGZpCisgIEFDX1NVQlNUKE9HR19DRkxBR1MpCisgIEFDX1NVQlNUKE9HR19MSUJTKQorICBybSAtZiBjb25mLm9nZ3Rlc3QKK10pCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9hdXRvZ2VuLnNoIGIvM3JkcGFydHkvc3BlZXgvYXV0b2dlbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZjY1MGYyCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvYXV0b2dlbi5zaApAQCAtMCwwICsxLDEyMiBAQAorIyEvYmluL3NoCisjIFJ1biB0aGlzIHRvIHNldCB1cCB0aGUgYnVpbGQgc3lzdGVtOiBjb25maWd1cmUsIG1ha2VmaWxlcywgZXRjLgorIyAoYmFzZWQgb24gdGhlIHZlcnNpb24gaW4gZW5saWdodGVubWVudCdzIGN2cykKKworcGFja2FnZT0iU3BlZXgiCisKK29sZGRpcj1gcHdkYAorc3JjZGlyPWBkaXJuYW1lICQwYAordGVzdCAteiAiJHNyY2RpciIgJiYgc3JjZGlyPS4KKworY2QgIiRzcmNkaXIiCitESUU9MAorCitlY2hvICJjaGVja2luZyBmb3IgYXV0b2NvbmYuLi4gIgorKGF1dG9jb25mIC0tdmVyc2lvbikgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMSB8fCB7CisgICAgICAgIGVjaG8KKyAgICAgICAgZWNobyAiWW91IG11c3QgaGF2ZSBhdXRvY29uZiBpbnN0YWxsZWQgdG8gY29tcGlsZSAkcGFja2FnZS4iCisgICAgICAgIGVjaG8gIkRvd25sb2FkIHRoZSBhcHByb3ByaWF0ZSBwYWNrYWdlIGZvciB5b3VyIGRpc3RyaWJ1dGlvbiwiCisgICAgICAgIGVjaG8gIm9yIGdldCB0aGUgc291cmNlIHRhcmJhbGwgYXQgZnRwOi8vZnRwLmdudS5vcmcvcHViL2dudS8iCisgICAgICAgIERJRT0xCit9CisKK1ZFUlNJT05HUkVQPSJzZWQgLWUgcy8uKlteMC05XC5dXChbMC05XVwuWzAtOV1cKS4qL1wxLyIKK1ZFUlNJT05NS0lOVD0ic2VkIC1lIHMvW14wLTldLy8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIyBkbyB3ZSBuZWVkIGF1dG9tYWtlPworaWYgdGVzdCAtciBNYWtlZmlsZS5hbTsgdGhlbgorICBBTV9PUFRJT05TPWBmZ3JlcCBBVVRPTUFLRV9PUFRJT05TIE1ha2VmaWxlLmFtYAorICBBTV9ORUVERUQ9YGVjaG8gJEFNX09QVElPTlMgfCAkVkVSU0lPTkdSRVBgCisgIGlmIHRlc3QgeCIkQU1fTkVFREVEIiA9ICJ4JEFNX09QVElPTlMiOyB0aGVuCisgICAgQU1fTkVFREVEPSIiCisgIGZpCisgIGlmIHRlc3QgLXogJEFNX05FRURFRDsgdGhlbgorICAgIGVjaG8gLW4gImNoZWNraW5nIGZvciBhdXRvbWFrZS4uLiAiCisgICAgQVVUT01BS0U9YXV0b21ha2UKKyAgICBBQ0xPQ0FMPWFjbG9jYWwKKyAgICBpZiAoJEFVVE9NQUtFIC0tdmVyc2lvbiA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxKTsgdGhlbgorICAgICAgZWNobyAieWVzIgorICAgIGVsc2UKKyAgICAgIGVjaG8gIm5vIgorICAgICAgQVVUT01BS0U9CisgICAgZmkKKyAgZWxzZQorICAgIGVjaG8gLW4gImNoZWNraW5nIGZvciBhdXRvbWFrZSAkQU1fTkVFREVEIG9yIGxhdGVyLi4uICIKKyAgICBmb3IgYW0gaW4gYXV0b21ha2UtJEFNX05FRURFRCBhdXRvbWFrZSRBTV9ORUVERUQgXAorCWF1dG9tYWtlIGF1dG9tYWtlLTEuNyBhdXRvbWFrZS0xLjggYXV0b21ha2UtMS45OyBkbworICAgICAgKCRhbSAtLXZlcnNpb24gPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMSkgfHwgY29udGludWUKKyAgICAgIHZlcj1gJGFtIC0tdmVyc2lvbiA8IC9kZXYvbnVsbCB8IGhlYWQgLW4gMSB8ICRWRVJTSU9OR1JFUCB8ICRWRVJTSU9OTUtJTlRgCisgICAgICB2ZXJuZWVkZWQ9YGVjaG8gJEFNX05FRURFRCB8ICRWRVJTSU9OTUtJTlRgCisgICAgICBpZiB0ZXN0ICR2ZXIgLWdlICR2ZXJuZWVkZWQ7IHRoZW4KKyAgICAgICAgQVVUT01BS0U9JGFtCisgICAgICAgIGVjaG8gJEFVVE9NQUtFCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgICB0ZXN0IC16ICRBVVRPTUFLRSAmJiAgZWNobyAibm8iCisgICAgZWNobyAtbiAiY2hlY2tpbmcgZm9yIGFjbG9jYWwgJEFNX05FRURFRCBvciBsYXRlci4uLiAiCisgICAgZm9yIGFjIGluIGFjbG9jYWwtJEFNX05FRURFRCBhY2xvY2FsJEFNX05FRURFRCBcCisJYWNsb2NhbCBhY2xvY2FsLTEuNyBhY2xvY2FsLTEuOCBhY2xvY2FsLTEuOTsgZG8KKyAgICAgICgkYWMgLS12ZXJzaW9uIDwgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjEpIHx8IGNvbnRpbnVlCisgICAgICB2ZXI9YCRhYyAtLXZlcnNpb24gPCAvZGV2L251bGwgfCBoZWFkIC1uIDEgfCAkVkVSU0lPTkdSRVAgfCAkVkVSU0lPTk1LSU5UYAorICAgICAgdmVybmVlZGVkPWBlY2hvICRBTV9ORUVERUQgfCAkVkVSU0lPTk1LSU5UYAorICAgICAgaWYgdGVzdCAkdmVyIC1nZSAkdmVybmVlZGVkOyB0aGVuCisgICAgICAgIEFDTE9DQUw9JGFjCisgICAgICAgIGVjaG8gJEFDTE9DQUwKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgIHRlc3QgLXogJEFDTE9DQUwgJiYgZWNobyAibm8iCisgIGZpCisgIHRlc3QgLXogJEFVVE9NQUtFIHx8IHRlc3QgLXogJEFDTE9DQUwgJiYgeworICAgICAgICBlY2hvCisgICAgICAgIGVjaG8gIllvdSBtdXN0IGhhdmUgYXV0b21ha2UgaW5zdGFsbGVkIHRvIGNvbXBpbGUgJHBhY2thZ2UuIgorICAgICAgICBlY2hvICJEb3dubG9hZCB0aGUgYXBwcm9wcmlhdGUgcGFja2FnZSBmb3IgeW91ciBkaXN0cmlidXRpb24sIgorICAgICAgICBlY2hvICJvciBnZXQgdGhlIHNvdXJjZSB0YXJiYWxsIGF0IGZ0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvIgorICAgICAgICBleGl0IDEKKyAgfQorZmkKKworZWNobyAtbiAiY2hlY2tpbmcgZm9yIGxpYnRvb2wuLi4gIgorZm9yIExJQlRPT0xJWkUgaW4gbGlidG9vbGl6ZSBnbGlidG9vbGl6ZSBub3BlOyBkbworICAoJExJQlRPT0xJWkUgLS12ZXJzaW9uKSA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxICYmIGJyZWFrCitkb25lCitpZiB0ZXN0IHgkTElCVE9PTElaRSA9IHhub3BlOyB0aGVuCisgIGVjaG8gIm5vcGUuIgorICBMSUJUT09MSVpFPWxpYnRvb2xpemUKK2Vsc2UKKyAgZWNobyAkTElCVE9PTElaRQorZmkKKygkTElCVE9PTElaRSAtLXZlcnNpb24pIDwgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjEgfHwgeworCWVjaG8KKwllY2hvICJZb3UgbXVzdCBoYXZlIGxpYnRvb2wgaW5zdGFsbGVkIHRvIGNvbXBpbGUgJHBhY2thZ2UuIgorCWVjaG8gIkRvd25sb2FkIHRoZSBhcHByb3ByaWF0ZSBwYWNrYWdlIGZvciB5b3VyIHN5c3RlbSwiCisJZWNobyAib3IgZ2V0IHRoZSBzb3VyY2UgZnJvbSBvbmUgb2YgdGhlIEdOVSBmdHAgc2l0ZXMiCisJZWNobyAibGlzdGVkIGluIGh0dHA6Ly93d3cuZ251Lm9yZy9vcmRlci9mdHAuaHRtbCIKKwlESUU9MQorfQorCitpZiB0ZXN0ICIkRElFIiAtZXEgMTsgdGhlbgorICAgICAgICBleGl0IDEKK2ZpCisKK2lmIHRlc3QgLXogIiQqIjsgdGhlbgorICAgICAgICBlY2hvICJJIGFtIGdvaW5nIHRvIHJ1biAuL2NvbmZpZ3VyZSB3aXRoIG5vIGFyZ3VtZW50cyAtIGlmIHlvdSB3aXNoICIKKyAgICAgICAgZWNobyAidG8gcGFzcyBhbnkgdG8gaXQsIHBsZWFzZSBzcGVjaWZ5IHRoZW0gb24gdGhlICQwIGNvbW1hbmQgbGluZS4iCitmaQorCitlY2hvICJHZW5lcmF0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yICRwYWNrYWdlLCBwbGVhc2Ugd2FpdC4uLi4iCisKK2VjaG8gIiAgJEFDTE9DQUwgJEFDTE9DQUxfRkxBR1MiCiskQUNMT0NBTCAkQUNMT0NBTF9GTEFHUyB8fCBleGl0IDEKK2VjaG8gIiAgJExJQlRPT0xJWkUgLS1hdXRvbWFrZSIKKyRMSUJUT09MSVpFIC0tYXV0b21ha2UgfHwgZXhpdCAxCitlY2hvICIgIGF1dG9oZWFkZXIiCithdXRvaGVhZGVyIHx8IGV4aXQgMQorZWNobyAiICAkQVVUT01BS0UgLS1hZGQtbWlzc2luZyAkQVVUT01BS0VfRkxBR1MiCiskQVVUT01BS0UgLS1hZGQtbWlzc2luZyAkQVVUT01BS0VfRkxBR1MgfHwgZXhpdCAxCitlY2hvICIgIGF1dG9jb25mIgorYXV0b2NvbmYgfHwgZXhpdCAxCisKK2NkICRvbGRkaXIKKyRzcmNkaXIvY29uZmlndXJlIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSAiJEAiICYmIGVjaG8KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2NvbmZpZ3VyZS5hYyBiLzNyZHBhcnR5L3NwZWV4L2NvbmZpZ3VyZS5hYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTRlZWYwCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvY29uZmlndXJlLmFjCkBAIC0wLDAgKzEsMjA5IEBACitkbmwgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4gLSotbTQtKi0KKworQUNfSU5JVChsaWJzcGVleC9zcGVleC5jKQorCitBTV9DT05GSUdfSEVBREVSKFtjb25maWcuaF0pCisKK1NQRUVYX01BSk9SX1ZFUlNJT049MQorU1BFRVhfTUlOT1JfVkVSU0lPTj0xCitTUEVFWF9NSUNST19WRVJTSU9OPTE0CitTUEVFWF9FWFRSQV9WRVJTSU9OPS1zdm4KKyNTUEVFWF9WRVJTSU9OPQorU1BFRVhfVkVSU0lPTj0kU1BFRVhfTUFKT1JfVkVSU0lPTi4kU1BFRVhfTUlOT1JfVkVSU0lPTi4kU1BFRVhfTUlDUk9fVkVSU0lPTiRTUEVFWF9FWFRSQV9WRVJTSU9OCisjU1BFRVhfVkVSU0lPTj0iMS4yYmV0YTEiCisKK1NQRUVYX0xUX0NVUlJFTlQ9NQorU1BFRVhfTFRfUkVWSVNJT049MAorU1BFRVhfTFRfQUdFPTQKKworQUNfU1VCU1QoU1BFRVhfTFRfQ1VSUkVOVCkKK0FDX1NVQlNUKFNQRUVYX0xUX1JFVklTSU9OKQorQUNfU1VCU1QoU1BFRVhfTFRfQUdFKQorCisjIEZvciBhdXRvbWFrZS4KK1ZFUlNJT049JFNQRUVYX1ZFUlNJT04KK1BBQ0tBR0U9c3BlZXgKKworQUNfU1VCU1QoU1BFRVhfVkVSU0lPTikKKworQU1fSU5JVF9BVVRPTUFLRSgkUEFDS0FHRSwgJFZFUlNJT04sIG5vLWRlZmluZSkKK0FNX01BSU5UQUlORVJfTU9ERQorCitBQ19DQU5PTklDQUxfSE9TVAorQU1fUFJPR19MSUJUT09MCisKK0FDX0NfQklHRU5ESUFOCitBQ19DX0NPTlNUCitBQ19DX0lOTElORQorQUNfQ19SRVNUUklDVAorCisKK0FDX01TR19DSEVDS0lORyhmb3IgQzk5IHZhcmlhYmxlLXNpemUgYXJyYXlzKQorQUNfVFJZX0NPTVBJTEUoICwgWworaW50IGZvbz0xMDsKK2ludCBhcnJheVtmb29dOworXSwKK1toYXNfdmFyX2FycmF5cz15ZXM7QUNfREVGSU5FKFtWQVJfQVJSQVlTXSwgW10sIFtVc2UgQzk5IHZhcmlhYmxlLXNpemUgYXJyYXlzXSkKK10sCitoYXNfdmFyX2FycmF5cz1ubworKQorQUNfTVNHX1JFU1VMVCgkaGFzX3Zhcl9hcnJheXMpCisKK0FDX01TR19DSEVDS0lORyhmb3IgYWxsb2NhKQorQUNfVFJZX0NPTVBJTEUoIFsjaW5jbHVkZSA8YWxsb2NhLmg+XSwgWworaW50IGZvbz0xMDsKK2ludCAqYXJyYXkgPSBhbGxvY2EoZm9vKTsKK10sCitbCitoYXNfYWxsb2NhPXllczsKK2lmIHRlc3QgeCRoYXNfdmFyX2FycmF5cyA9ICJ4bm8iIDsgdGhlbgorQUNfREVGSU5FKFtVU0VfQUxMT0NBXSwgW10sIFtNYWtlIHVzZSBvZiBhbGxvY2FdKQorZmkKK10sCitoYXNfYWxsb2NhPW5vCispCitBQ19NU0dfUkVTVUxUKCRoYXNfYWxsb2NhKQorCisKK0FDX0NIRUNLX0hFQURFUlMoc3lzL3NvdW5kY2FyZC5oIHN5cy9hdWRpb2lvLmgpCisKK1hJUEhfUEFUSF9PR0coW3NyYz0ic3JjIl0sIFtzcmM9IiJdKQorQUNfU1VCU1Qoc3JjKQorCitBQ19DSEVDS19MSUIobSwgc2luKQorCisjIENoZWNrIGZvciBnZXRvcHRfbG9uZzsgaWYgbm90IGZvdW5kLCB1c2UgaW5jbHVkZWQgc291cmNlLgorQUNfQ0hFQ0tfRlVOQ1MoW2dldG9wdF9sb25nXSwsCitbIyBGcmVlQlNEIGhhcyBhIGdudWdldG9wdCBsaWJyYXJ5LgorICBBQ19DSEVDS19MSUIoW2dudWdldG9wdF0sW2dldG9wdF9sb25nXSwKK1tBQ19ERUZJTkUoW0hBVkVfR0VUT1BUX0xPTkddKV0sCitbIyBVc2UgdGhlIEdOVSByZXBsYWNlbWVudC4KK0FDX0xJQk9CSihnZXRvcHQpCitBQ19MSUJPQkooZ2V0b3B0MSldKV0pCisKK0FDX0NIRUNLX0xJQih3aW5tbSwgbWFpbikKKworQUNfREVGSU5FX1VOUVVPVEVEKFNQRUVYX1ZFUlNJT04sICIke1NQRUVYX1ZFUlNJT059IiwgW0NvbXBsZXRlIHZlcnNpb24gc3RyaW5nXSkKK0FDX0RFRklORV9VTlFVT1RFRChTUEVFWF9NQUpPUl9WRVJTSU9OLCAke1NQRUVYX01BSk9SX1ZFUlNJT059LCBbVmVyc2lvbiBtYWpvcl0pCitBQ19ERUZJTkVfVU5RVU9URUQoU1BFRVhfTUlOT1JfVkVSU0lPTiwgJHtTUEVFWF9NSU5PUl9WRVJTSU9OfSwgW1ZlcnNpb24gbWlub3JdKQorQUNfREVGSU5FX1VOUVVPVEVEKFNQRUVYX01JQ1JPX1ZFUlNJT04sICR7U1BFRVhfTUlDUk9fVkVSU0lPTn0sIFtWZXJzaW9uIG1pY3JvXSkKK0FDX0RFRklORV9VTlFVT1RFRChTUEVFWF9FWFRSQV9WRVJTSU9OLCAiJHtTUEVFWF9FWFRSQV9WRVJTSU9OfSIsIFtWZXJzaW9uIGV4dHJhXSkKKworQUNfQVJHX0VOQUJMRSh3aWRlYmFuZCwgWyAgLS1kaXNhYmxlLXdpZGViYW5kICAgICAgRGlzYWJsZSB3aWRlYmFuZCBjb2RlY10sCitbaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSBubzsgdGhlbgorICBBQ19ERUZJTkUoW0RJU0FCTEVfV0lERUJBTkRdLCAsIFtEaXNhYmxlIHdpZGViYW5kIGNvZGVjXSkKK2ZpXSkKKworQUNfQVJHX0VOQUJMRSh2b3JiaXMtcHN5LCBbICAtLWVuYWJsZS12b3JiaXMtcHN5ICAgICAgIEVuYWJsZSBWb3JiaXMtc3R5bGUgcHN5Y2hvYWNvdXN0aWNzIChFWFBFUklNRU5UQUwpXSwKK1tpZiB0ZXN0ICIkZW5hYmxldmFsIiA9IHllczsgdGhlbgorICBBQ19ERUZJTkUoW1ZPUkJJU19QU1lDSE9dLCAsIFtFbmFibGUgVm9yYmlzLXN0eWxlIHBzeWNob2Fjb3VzdGljcyAoRVhQRVJJTUVOVEFMKV0pCitmaV0pCisKK0FDX0FSR19FTkFCTEUodmFsZ3JpbmQsIFsgIC0tZW5hYmxlLXZhbGdyaW5kICAgICAgIEVuYWJsZSB2YWxncmluZCBleHRyYSBjaGVja3NdLAorW2lmIHRlc3QgIiRlbmFibGV2YWwiID0geWVzOyB0aGVuCisgIEFDX0RFRklORShbRU5BQkxFX1ZBTEdSSU5EXSwgLCBbRW5hYmxlIHZhbGdyaW5kIGV4dHJhIGNoZWNrc10pCitmaV0pCisKK0FDX0FSR19FTkFCTEUoc3NlLCBbICAtLWVuYWJsZS1zc2UgICAgICAgICAgICBFbmFibGUgU1NFIHN1cHBvcnRdLCBbaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXM7IHRoZW4KK0FDX0RFRklORShbX1VTRV9TU0VdLCAsIFtFbmFibGUgU1NFIHN1cHBvcnRdKQorQ0ZMQUdTPSIkQ0ZMQUdTIC1PMyAtbXNzZSIKK2ZpCitdKQorCitBQ19BUkdfRU5BQkxFKGZpeGVkLXBvaW50LCBbICAtLWVuYWJsZS1maXhlZC1wb2ludCAgICBDb21waWxlIGFzIGZpeGVkLXBvaW50XSwKK1tpZiB0ZXN0ICIkZW5hYmxldmFsIiA9IHllczsgdGhlbgorICBBQ19ERUZJTkUoW0ZJWEVEX1BPSU5UXSwgLCBbQ29tcGlsZSBhcyBmaXhlZC1wb2ludF0pCitmaV0pCisKK0FDX0FSR19FTkFCTEUoYXJtNC1hc20sIFsgIC0tZW5hYmxlLWFybTQtYXNtICAgICAgIE1ha2UgdXNlIG9mIEFSTTQgYXNzZW1ibHkgb3B0aW1pemF0aW9uc10sCitbaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKFtBUk00X0FTTV0sICwgW01ha2UgdXNlIG9mIEFSTTQgYXNzZW1ibHkgb3B0aW1pemF0aW9uc10pCitmaV0pCisKK0FDX0FSR19FTkFCTEUoYXJtNWUtYXNtLCBbICAtLWVuYWJsZS1hcm01ZS1hc20gICAgICBNYWtlIHVzZSBvZiBBUk01RSBhc3NlbWJseSBvcHRpbWl6YXRpb25zXSwKK1tpZiB0ZXN0ICIkZW5hYmxldmFsIiA9IHllczsgdGhlbgorICBBQ19ERUZJTkUoW0FSTTVFX0FTTV0sICwgW01ha2UgdXNlIG9mIEFSTTVFIGFzc2VtYmx5IG9wdGltaXphdGlvbnNdKQorZmldKQorCitBQ19BUkdfRU5BQkxFKGJsYWNrZmluLWFzbSwgWyAgLS1lbmFibGUtYmxhY2tmaW4tYXNtICAgICAgTWFrZSB1c2Ugb2YgQmxhY2tmaW4gYXNzZW1ibHkgb3B0aW1pemF0aW9uc10sCitbaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKFtCRklOX0FTTV0sICwgW01ha2UgdXNlIG9mIEJsYWNrZmluIGFzc2VtYmx5IG9wdGltaXphdGlvbnNdKQorICBMREZMQUdTPSItV2wsLWVsZjJmbHQ9LXMxMDAwMDAiCitmaV0pCisKK0FDX0FSR19FTkFCTEUoZml4ZWQtcG9pbnQtZGVidWcsIFsgIC0tZW5hYmxlLWZpeGVkLXBvaW50LWRlYnVnICBEZWJ1ZyBmaXhlZC1wb2ludCBpbXBsZW1lbnRhdGlvbl0sCitbaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKFtGSVhFRF9ERUJVR10sICwgW0RlYnVnIGZpeGVkLXBvaW50IGltcGxlbWVudGF0aW9uXSkKK2ZpXSkKKworQUNfQVJHX0VOQUJMRShlcGljLTQ4aywgWyAgLS1lbmFibGUtZXBpYy00OGsgICAgICAgRW5hYmxlIHN1cHBvcnQgZm9yIEVwaWMgNC44IGticHMgbW9kZV0sCitbaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKFtFUElDXzQ4S10sICwgW0VuYWJsZSBzdXBwb3J0IGZvciBFcGljIDQuOCBrYnBzIG1vZGVdKQorZmldKQorCitBQ19BUkdfRU5BQkxFKHRpLWM1NXgsIFsgIC0tZW5hYmxlLXRpLWM1NXggICAgICAgIEVuYWJsZSBzdXBwb3J0IGZvciBUSSBDNTVYIERTUF0sCitbaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXM7IHRoZW4KKyAgaGFzX2NoYXIxNj15ZXM7CisgIEFDX0RFRklORShbVElfQzU1WF0sICwgW0VuYWJsZSBzdXBwb3J0IGZvciBUSSBDNTVYIERTUF0pCitmaV0pCisKK0FDX0FSR19FTkFCTEUoMTZiaXQtcHJlY2lzaW9uLCBbICAtLWVuYWJsZS0xNmJpdC1wcmVjaXNpb24gUmVkdWNlIHByZWNpc2lvbiB0byAxNiBiaXRzIChFWFBFUklNRU5UQUwpXSwKK1tpZiB0ZXN0ICIkZW5hYmxldmFsIiA9IHllczsgdGhlbgorICBBQ19ERUZJTkUoW1BSRUNJU0lPTjE2XSwgLCBbUmVkdWNlIHByZWNpc2lvbiB0byAxNiBiaXRzIChFWFBFUklNRU5UQUwpXSkKK2ZpXSkKKworQUNfQ0hFQ0tfU0laRU9GKHNob3J0KQorQUNfQ0hFQ0tfU0laRU9GKGludCkKK0FDX0NIRUNLX1NJWkVPRihsb25nKQorCitpZiB0ZXN0IHgkaGFzX2NoYXIxNiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgY2FzZSAxIGluCisgICAgICAgICAgICAgICAgJGFjX2N2X3NpemVvZl9zaG9ydCkgU0laRTE2PSJzaG9ydCI7OworICAgICAgICAgICAgICAgICRhY19jdl9zaXplb2ZfaW50KSBTSVpFMTY9ImludCI7OworICAgICAgICBlc2FjCitlbHNlCisgICAgICAgIGNhc2UgMiBpbgorICAgICAgICAgICAgICAgICRhY19jdl9zaXplb2Zfc2hvcnQpIFNJWkUxNj0ic2hvcnQiOzsKKyAgICAgICAgICAgICAgICAkYWNfY3Zfc2l6ZW9mX2ludCkgU0laRTE2PSJpbnQiOzsKKyAgICAgICAgZXNhYworZmkKKworaWYgdGVzdCB4JGhhc19jaGFyMTYgPSAieHllcyIgOyB0aGVuCisgICAgICAgIGNhc2UgMiBpbgorICAgICAgICAgICAgICAgICRhY19jdl9zaXplb2ZfaW50KSBTSVpFMzI9ImludCI7OworICAgICAgICAgICAgICAgICRhY19jdl9zaXplb2ZfbG9uZykgU0laRTMyPSJsb25nIjs7CisgICAgICAgICAgICAgICAgJGFjX2N2X3NpemVvZl9zaG9ydCkgU0laRTMyPSJzaG9ydCI7OworICAgICAgICBlc2FjCitlbHNlCisgICAgICAgIGNhc2UgNCBpbgorICAgICAgICAgICAgICAgICRhY19jdl9zaXplb2ZfaW50KSBTSVpFMzI9ImludCI7OworICAgICAgICAgICAgICAgICRhY19jdl9zaXplb2ZfbG9uZykgU0laRTMyPSJsb25nIjs7CisgICAgICAgICAgICAgICAgJGFjX2N2X3NpemVvZl9zaG9ydCkgU0laRTMyPSJzaG9ydCI7OworICAgICAgICBlc2FjCitmaQorCitBQ19TVUJTVChTSVpFMTYpCitBQ19TVUJTVChTSVpFMzIpCisKK0FDX09VVFBVVChbTWFrZWZpbGUgbGlic3BlZXgvTWFrZWZpbGUgc3JjL01ha2VmaWxlIGRvYy9NYWtlZmlsZSBTcGVleC5zcGVjCisgICAgICAgICAgIGluY2x1ZGUvTWFrZWZpbGUgaW5jbHVkZS9zcGVleC9NYWtlZmlsZSBzcGVleC5wYworICAgICAgICAgICB3aW4zMi9NYWtlZmlsZSB3aW4zMi9saWJzcGVleC9NYWtlZmlsZSB3aW4zMi9zcGVleGVuYy9NYWtlZmlsZQorICAgICAgICAgICB3aW4zMi9zcGVleGRlYy9NYWtlZmlsZSBzeW1iaWFuL01ha2VmaWxlIAorICAgICAgICAgICB3aW4zMi9WUzIwMDMvTWFrZWZpbGUgd2luMzIvVlMyMDA1L01ha2VmaWxlCisgICAgICAgICAgIHdpbjMyL1ZTMjAwMy9saWJzcGVleC9NYWtlZmlsZQorICAgICAgICAgICB3aW4zMi9WUzIwMDMvc3BlZXhkZWMvTWFrZWZpbGUKKyAgICAgICAgICAgd2luMzIvVlMyMDAzL3NwZWV4ZW5jL01ha2VmaWxlCisgICAgICAgICAgIHdpbjMyL1ZTMjAwNS9saWJzcGVleC9NYWtlZmlsZQorICAgICAgICAgICB3aW4zMi9WUzIwMDUvc3BlZXhkZWMvTWFrZWZpbGUKKyAgICAgICAgICAgd2luMzIvVlMyMDA1L3NwZWV4ZW5jL01ha2VmaWxlCisgICAgICAgICAgIGluY2x1ZGUvc3BlZXgvc3BlZXhfY29uZmlnX3R5cGVzLmggdGkvTWFrZWZpbGUgCisJICAgdGkvc3BlZXhfQzU0X3Rlc3QvTWFrZWZpbGUgdGkvc3BlZXhfQzU1X3Rlc3QvTWFrZWZpbGUKKwkgICB0aS9zcGVleF9DNjRfdGVzdC9NYWtlZmlsZSBdKQorCitpZiB0ZXN0ICJ4JHNyYyIgPSAieCI7IHRoZW4gCitlY2hvICIqKklNUE9SVEFOVCoqIgorZWNobyAiWW91IGRvbid0IHNlZW0gdG8gaGF2ZSB0aGUgZGV2ZWxvcG1lbnQgcGFja2FnZSBmb3IgbGlib2dnIChsaWJvZ2ctZGV2ZWwpIGluc3RhbGxlZC4gT25seSB0aGUgU3BlZXggbGlicmFyeSAobGlic3BlZXgpIHdpbGwgYmUgYnVpbHQgKG5vIGVuY29kZXIvZGVjb2RlciBleGVjdXRhYmxlKSIKK2VjaG8gIllvdSBjYW4gZG93bmxvYWQgbGlib2dnIGZyb20gaHR0cDovL2Rvd25sb2Fkcy54aXBoLm9yZy9yZWxlYXNlcy9vZ2cvIgorZmkKKworZWNobyAiVHlwZSBcIm1ha2U7IG1ha2UgaW5zdGFsbFwiIHRvIGNvbXBpbGUgYW5kIGluc3RhbGwgU3BlZXgiOwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvZG9jLy5jdnNpZ25vcmUgYi8zcmRwYXJ0eS9zcGVleC9kb2MvLmN2c2lnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODI1MjJkCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvZG9jLy5jdnNpZ25vcmUKQEAgLTAsMCArMSwyIEBACitNYWtlZmlsZQorTWFrZWZpbGUuaW4KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2RvYy9NYWtlZmlsZS5hbSBiLzNyZHBhcnR5L3NwZWV4L2RvYy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzBhOTdiCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvZG9jL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNSBAQAorZG9jZGlyPSQocHJlZml4KS9zaGFyZS9kb2MvQFBBQ0tBR0VALUBWRVJTSU9OQAorCitkb2NfREFUQSA9IG1hbnVhbC5wZGYKKworRVhUUkFfRElTVCA9ICQoZG9jX0RBVEEpCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9kb2MvY2VscF9kZWNvZGVyLmVwcyBiLzNyZHBhcnR5L3NwZWV4L2RvYy9jZWxwX2RlY29kZXIuZXBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZjA3MDQKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9kb2MvY2VscF9kZWNvZGVyLmVwcwpAQCAtMCwwICsxLDY4OCBAQAorJSFQUy1BZG9iZS0zLjAgRVBTRi0zLjAgCislJUJvdW5kaW5nQm94OiAwIDAgNDQyIDMxNQorJSVQYWdlczogMAorJSVDcmVhdG9yOiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCislJVRpdGxlOiBub25lCislJUNyZWF0aW9uRGF0ZTogbm9uZQorJSVMYW5ndWFnZUxldmVsOiAyCislJUVuZENvbW1lbnRzCislJUJlZ2luUHJvbG9nCislJUJlZ2luUmVzb3VyY2U6IFNEUmVzCisvYjRfaW5jX3N0YXRlIHNhdmUgZGVmCisvZGljdF9jb3VudCBjb3VudGRpY3RzdGFjayBkZWYKKy9vcF9jb3VudCBjb3VudCAxIHN1YiBkZWYKK3VzZXJkaWN0IGJlZ2luCiswIHNldGdyYXkgMCBzZXRsaW5lY2FwIDEgc2V0bGluZXdpZHRoIDAgc2V0bGluZWpvaW4gMTAgc2V0bWl0ZXJsaW1pdFtdIDAgc2V0ZGFzaCBuZXdwYXRoCisvbGFuZ3VhZ2VsZXZlbCB3aGVyZSB7cG9wIGxhbmd1YWdlbGV2ZWwgMSBuZSB7ZmFsc2Ugc2V0c3Ryb2tlYWRqdXN0IGZhbHNlIHNldG92ZXJwcmludH0gaWZ9IGlmCisvYmRlZiB7YmluZCBkZWZ9IGJpbmQgZGVmCisvYyB7c2V0Z3JheX0gYmRlZgorL2wge25lZyBsaW5ldG99IGJkZWYKKy9ybCB7bmVnIHJsaW5ldG99IGJkZWYKKy9sYyB7c2V0bGluZWNhcH0gYmRlZgorL2xqIHtzZXRsaW5lam9pbn0gYmRlZgorL2x3IHtzZXRsaW5ld2lkdGh9IGJkZWYKKy9tbCB7c2V0bWl0ZXJsaW1pdH0gYmRlZgorL2xkIHtzZXRkYXNofSBiZGVmCisvbSB7bmVnIG1vdmV0b30gYmRlZgorL2N0IHs2IDIgcm9sbCBuZWcgNiAyIHJvbGwgbmVnIDYgMiByb2xsIG5lZyBjdXJ2ZXRvfSBiZGVmCisvciB7cm90YXRlfSBiZGVmCisvdCB7bmVnIHRyYW5zbGF0ZX0gYmRlZgorL3Mge3NjYWxlfSBiZGVmCisvc3cge3Nob3d9IGJkZWYKKy9ncyB7Z3NhdmV9IGJkZWYKKy9nciB7Z3Jlc3RvcmV9IGJkZWYKKy9mIHtmaW5kZm9udCBkdXAgbGVuZ3RoIGRpY3QgYmVnaW4KK3sxIGluZGV4IC9GSUQgbmUge2RlZn0ge3BvcCBwb3B9IGlmZWxzZX0gZm9yYWxsIC9FbmNvZGluZyBJU09MYXRpbjFFbmNvZGluZyBkZWYKK2N1cnJlbnRkaWN0IGVuZCAvTkZvbnQgZXhjaCBkZWZpbmVmb250IHBvcCAvTkZvbnQgZmluZGZvbnR9IGJkZWYKKy9wIHtjbG9zZXBhdGh9IGJkZWYKKy9zZiB7c2NhbGVmb250IHNldGZvbnR9IGJkZWYKKy9lZiB7ZW9maWxsfWJkZWYKKy9wYyB7Y2xvc2VwYXRoIHN0cm9rZX1iZGVmCisvcHMge3N0cm9rZX1iZGVmCisvcHVtIHttYXRyaXggY3VycmVudG1hdHJpeH1iZGVmCisvcG9tIHtzZXRtYXRyaXh9YmRlZgorL2JzIHsvYVN0cmluZyBleGNoIGRlZiAvblhPZnMgZXhjaCBkZWYgL25XaWR0aCBleGNoIGRlZiBjdXJyZW50cG9pbnQgblhPZnMgMCBybW92ZXRvIHB1bSBuV2lkdGggYVN0cmluZyBzdHJpbmd3aWR0aCBwb3AgZGl2IDEgc2NhbGUgYVN0cmluZyBzaG93IHBvbSBtb3ZldG99IGJkZWYKKyUlRW5kUmVzb3VyY2UKKyUlRW5kUHJvbG9nCislJUJlZ2luU2V0dXAKKyUlRW5kU2V0dXAKKyUlUGFnZTogMSAxCislJUJlZ2luUGFnZVNldHVwCislJUVuZFBhZ2VTZXR1cAorcHVtCiswLjAyODM2IDAuMDI4MzQgcyAKKzAgLTExMTEzIHQKKy90bSBtYXRyaXggY3VycmVudG1hdHJpeCBkZWYKK3RtIHNldG1hdHJpeAorLTUxNTIgLTk0MTggdCAKKzEgMSBzIAorMCBsdyAxIGxqIDAuMDAwIGMgNjkzNSAxNDMxOCBtICA1NDM1IDE0MzE4IGwgIDU0MzUgMTAzMTggbCAgODQzNSAxMDMxOCBsIAorODQzNSAxNDMxOCBsICA2OTM1IDE0MzE4IGwgIHBjCisxMTQzNiAxMjMxNyBtICAxMDkzNCAxMjgxOCBsICAxMDkzNiAxMTgxNyBsICAxMTQzNiAxMjMxNyBsICBwYworNTgzMSAxMTk2NiBtICA4MTA5IDExOTY2IGwgIHBzCis2NDI1IDExOTY2IG0gIDY0MjUgMTE2MzYgbCAgcHMKKzYxMjMgMTE5NjYgbSAgNjEyMyAxMjM2NiBsICBwcworNjcyNyAxMTk2NiBtICA2NzI3IDExNzA3IGwgIHBzCis3NzE5IDExOTY2IG0gIDc3MTkgMTE4NzIgbCAgcHMKKzcwNzAgMTE5NjYgbSAgNzA3MCAxMjI0OCBsICBwcworNzQzOSAxMTk2NiBtICA3NDM5IDExNjM2IGwgIHBzCis1ODMwIDEwOTIwIG0gIDgxMDggMTA5MjAgbCAgcHMKKzYxNjMgMTA5MjAgbSAgNjE2MyAxMDU5MCBsICBwcworNjQ3MCAxMDkyMCBtICA2NDcwIDExMzIwIGwgIHBzCis2NzI2IDEwOTIwIG0gIDY3MjYgMTA2NjEgbCAgcHMKKzcxMDkgMTA5MjAgbSAgNzEwOSAxMDgyNiBsICBwcworNzQxNyAxMDkyMCBtICA3NDE3IDExMjAyIGwgIHBzCis3Njk5IDEwOTIwIG0gIDc2OTkgMTA1OTAgbCAgcHMKKzU4MzEgMTA5MjEgbSAgODEwOSAxMDkyMSBsICBwcworNjE2NCAxMDkyMSBtICA2MTY0IDEwNTkxIGwgIHBzCis2NDcxIDEwOTIxIG0gIDY0NzEgMTEzMjEgbCAgcHMKKzY3MjcgMTA5MjEgbSAgNjcyNyAxMDY2MiBsICBwcworNzExMCAxMDkyMSBtICA3MTEwIDEwODI3IGwgIHBzCis3NDE4IDEwOTIxIG0gIDc0MTggMTEyMDMgbCAgcHMKKzc3MDAgMTA5MjEgbSAgNzcwMCAxMDU5MSBsICBwcworNTg1NyAxMjkxOCBtICA4MTM1IDEyOTE4IGwgIHBzCis2MTkwIDEyOTE4IG0gIDYxODggMTI3MjkgbCAgcHMKKzY0OTcgMTI5MTggbSAgNjQ5NyAxMzMxOCBsICBwcworNjc1MyAxMjkxOCBtICA2NzUxIDEzMjQ3IGwgIHBzCis3MTM2IDEyOTE4IG0gIDcxMzYgMTI4MjQgbCAgcHMKKzc0NDQgMTI5MTggbSAgNzQ0MiAxMjYxMSBsICBwcworNzc5NiAxMjkxOSBtICA3Nzk0IDEzMjQ4IGwgIHBzCis2OTM1IDE3ODE4IG0gIDU0MzUgMTc4MTggbCAgNTQzNSAxNTgxOCBsICA4NDM1IDE1ODE4IGwgIDg0MzUgMTc4MTggbCAgNjkzNSAxNzgxOCBsIAorcGMKK2dzCitwdW0KKzYyNjMgMTcwMzkgdAorMjE5IC0xMDQgbSAgMjE0IC02NiAxODQgLTM5IDE0NyAtMzkgY3QgMTIwIC0zOSA5OSAtNTEgODUgLTc0IGN0IDc0IC05MiA3MSAtMTEwIDY5IC0xNDcgY3QgCisyNjggLTE0NyBsICAyNjYgLTIxMyAyNjAgLTI0NCAyNDUgLTI3NyBjdCAyMjQgLTMyMSAxOTMgLTM0MSAxNDkgLTM0MSBjdCA3MSAtMzQxIDIwIC0yNzEgMjAgLTE2MCBjdCAKKzIwIC01NSA2OCA5IDE0NiA5IGN0IDIwOCA5IDI1MiAtMzIgMjY0IC0xMDQgY3QgMjE5IC0xMDQgbCAgcAorNjkgLTE5MiBtICA3MiAtMjUyIDEwNCAtMjkyIDE0NyAtMjkyIGN0IDE3MSAtMjkyIDE5MSAtMjgwIDIwMyAtMjYwIGN0IDIxNCAtMjQzIDIxOCAtMjI2IDIyMCAtMTkyIGN0IAorNjkgLTE5MiBsICBwIGVmCiszNjIgLTQxMiBtICA0MTggLTQxMiBsICA0MTggLTQ1OCBsICAzMjEgLTQ1OCBsICAzMjEgMTI0IGwgIDQxOCAxMjQgbCAgNDE4IDc4IGwgCiszNjIgNzggbCAgMzYyIC00MTIgbCAgcCBlZgorNTA4IC0zMzIgbSAgNDY1IC0zMzIgbCAgNDY1IDAgbCAgNTExIDAgbCAgNTExIC0xODAgbCAgNTExIC0yNTAgNTM5IC0yOTIgNTg2IC0yOTIgY3QgCis2MjUgLTI5MiA2NDIgLTI2NSA2NDIgLTIwNCBjdCA2NDIgMCBsICA2ODcgMCBsICA2ODcgLTIyNiBsICA2ODcgLTI5OSA2NTMgLTM0MSA1OTUgLTM0MSBjdCAKKzU1OCAtMzQxIDUzMiAtMzI0IDUwOCAtMjgzIGN0IDUwOCAtMzMyIGwgIHAgZWYKKzg3MCAtMjA0IG0gIDc0MiAtMjA0IGwgIDc0MiAtMTQ3IGwgIDg3MCAtMTQ3IGwgIDg3MCAtMjA0IGwgIHAgZWYKKzg5OSAtNDAwIG0gIDEwMjYgLTQwMCBsICAxMDI2IDAgbCAgMTA3NyAwIGwgIDEwNzcgLTQwMCBsICAxMjA0IC00MDAgbCAKKzEyMDQgLTQ1NSBsICA4OTkgLTQ1NSBsICA4OTkgLTQwMCBsICBwIGVmCisxMjgxIDc4IG0gIDEyMjUgNzggbCAgMTIyNSAxMjQgbCAgMTMyMiAxMjQgbCAgMTMyMiAtNDU4IGwgIDEyMjUgLTQ1OCBsIAorMTIyNSAtNDEyIGwgIDEyODEgLTQxMiBsICAxMjgxIDc4IGwgIHAgZWYKK3BvbQorZ3IKKzEwNDEwIDEyNDkyIG0gIDEwNDEwIDEyMTQyIGwgIDEwOTM1IDEyMzE3IGwgIDEwNDEwIDEyNDkyIGwgIHAgZWYKKzEgbHcgMCBsaiA4NDM1IDEyMzE4IG0gIDk2ODUgMTIzMTggbCAgOTY4NSAxMjMxNyBsICAxMDUxNSAxMjMxNyBsICBwcworMCBsdyAxIGxqIDExNDM0IDE2ODE3IG0gIDEwOTMyIDE3MzE4IGwgIDEwOTM0IDE2MzE3IGwgIDExNDM0IDE2ODE3IGwgIHBjCisxMDQ4MyAxNjk2NyBtICAxMDQ4MyAxNjY2NyBsICAxMDkzMyAxNjgxNyBsICAxMDQ4MyAxNjk2NyBsICBwIGVmCisxIGx3IDAgbGogODQzNSAxNjgxOCBtICA5Njg0IDE2ODE4IGwgIDk2ODQgMTY4MTcgbCAgMTA1NzMgMTY4MTcgbCAgcHMKKzAgbHcgMSBsaiAxMzA4NSAxNDgxOCBtICAxMjk0NyAxNDgxOCAxMjgzNSAxNDcwNiAxMjgzNSAxNDU2OCBjdCAxMjgzNSAxNDQzMCAxMjk0NyAxNDMxOCAxMzA4NSAxNDMxOCBjdCAKKzEzMjIzIDE0MzE4IDEzMzM1IDE0NDMwIDEzMzM1IDE0NTY4IGN0IDEzMzM1IDE0NzA2IDEzMjIzIDE0ODE4IDEzMDg1IDE0ODE4IGN0IAorcGMKK2dzCitwdW0KKzEyOTMxIDE0NzkxIHQKKzEzMyAtMTgzIG0gIDIwIC0xODMgbCAgMjAgLTEzNyBsICAxMzMgLTEzNyBsICAxMzMgMCBsICAxNzEgMCBsICAxNzEgLTEzNyBsIAorMjgzIC0xMzcgbCAgMjgzIC0xODMgbCAgMTcxIC0xODMgbCAgMTcxIC0zMjAgbCAgMTMzIC0zMjAgbCAgMTMzIC0xODMgbCAKK3AgZWYKK3BvbQorZ3IKKzEzMjM0IDE1MjY4IG0gIDEyOTM0IDE1MjY4IGwgIDEzMDg0IDE0ODE4IGwgIDEzMjM0IDE1MjY4IGwgIHAgZWYKKzEgbHcgMCBsaiAxMTQzNSAxNjgxNyBtICAxMzA4NCAxNjgxNyBsICAxMzA4NCAxNTE3OCBsICBwcworMTI5MzQgMTM4NjggbSAgMTMyMzQgMTM4NjggbCAgMTMwODQgMTQzMTggbCAgMTI5MzQgMTM4NjggbCAgcCBlZgorMTE0MzcgMTIzMTcgbSAgMTMwODQgMTIzMTcgbCAgMTMwODQgMTM5NTggbCAgcHMKKzAgbHcgMSBsaiAxNzgzNSAxNTMxOCBtICAxNjMzNSAxNTMxOCBsICAxNjMzNSAxMzgxOCBsICAxOTMzNSAxMzgxOCBsICAxOTMzNSAxNTMxOCBsIAorMTc4MzUgMTUzMTggbCAgcGMKKzE2NjY4IDE1MDIzIG0gIDE2Nzc4IDE0ODAxIDE2ODkxIDE0NTY5IDE2OTI1IDE0MzE2IGN0IDE2OTk3IDEzNzY2IDE3MzA3IDE0MjczIDE3MjIxIDE0NTUxIGN0IAorMTcxNjUgMTQ3MzEgMTc1MjMgMTUwNTggMTc2OTQgMTQ2MjIgY3QgMTc4NTYgMTQyMTMgMTgwNTAgMTQ5MTIgMTgyODYgMTUwMDAgY3QgCisxODQ4OSAxNTA3NSAxODY4MCAxNDk5OSAxODg3OCAxNTAwMCBjdCAxODg3OCAxNTAwMCAxODg3OCAxNTAwMCAxOTA3NiAxNTA0NyBjdCAKKzE5MDc2IDE1MDQ3IDE5MDc2IDE1MDQ3IDE5MTM1IDE1MTE4IGN0IHBzCisxNTg4NSAxNDcxOCBtICAxNTg4NSAxNDQxOCBsICAxNjMzNSAxNDU2OCBsICAxNTg4NSAxNDcxOCBsICBwIGVmCisxIGx3IDAgbGogMTMzMzUgMTQ1NjcgbSAgMTQ5MzUgMTQ1NjcgbCAgMTQ5MzUgMTQ1NjggbCAgMTU5NzUgMTQ1NjggbCAgcHMKK2dzCitwdW0KKzE3MDg1IDEzMDUyIHQKKzIwOCAtMjE0IG0gIDIwNiAtMjQxIDIwMyAtMjU0IDE5NSAtMjY5IGN0IDE4MCAtMjk2IDE1MSAtMzExIDExNCAtMzExIGN0IDg0IC0zMTEgNjEgLTMwMiA0NiAtMjgzIGN0IAorMzMgLTI2NiAyNSAtMjQzIDI1IC0yMTkgY3QgMjUgLTE4MCA0MyAtMTU2IDc4IC0xNDYgY3QgMTI5IC0xMzEgbCAgMTcwIC0xMjAgMTgyIC0xMDggMTgyIC03OSBjdCAKKzE4MiAtNDYgMTU4IC0yNyAxMTggLTI3IGN0IDkwIC0yNyA2OSAtMzcgNTggLTU2IGN0IDUxIC02OCA0OSAtNzggNDggLTk4IGN0IDE2IC05OCBsIAorMTcgLTY1IDIyIC00OCAzNSAtMzAgY3QgNTQgLTMgNzggOCAxMTYgOCBjdCAxNzcgOCAyMTQgLTI2IDIxNCAtODMgY3QgMjE0IC0xMjYgMTk1IC0xNTQgMTU4IC0xNjQgY3QgCis4NyAtMTg0IGwgIDY3IC0xOTAgNTcgLTIwMiA1NyAtMjI0IGN0IDU3IC0yNTcgNzggLTI3NiAxMTQgLTI3NiBjdCAxMzcgLTI3NiAxNTYgLTI2NyAxNjYgLTI1MCBjdCAKKzE3MiAtMjQwIDE3NSAtMjMxIDE3NiAtMjE0IGN0IDIwOCAtMjE0IGwgIHAgZWYKKzMxOSAtMzkgbSAgMjcxIC0yMjEgbCAgMjM2IC0yMjEgbCAgMzA0IDUgbCAgMzAwIDE2IDI5NyAyNSAyOTYgMjggY3QgMjg5IDUxIDI4NCA1NyAyNzEgNTcgY3QgCisyNjUgNTcgMjU5IDU1IDI1MyA1MyBjdCAyNTMgODcgbCAgMjU1IDg3IGwgIDI2MSA5MCAyNjMgOTAgMjY4IDkwIGN0IDMwNCA5MCAzMDkgODMgMzM3IC00IGN0IAorNDAyIC0yMjEgbCAgMzY4IC0yMjEgbCAgMzE5IC0zOSBsICBwIGVmCis0NTcgLTIyMSBtICA0MjggLTIyMSBsICA0MjggMCBsICA0NTggMCBsICA0NTggLTEyMCBsICA0NTggLTE2NiA0NzcgLTE5NCA1MDggLTE5NCBjdCAKKzUzNCAtMTk0IDU0NiAtMTc2IDU0NiAtMTM2IGN0IDU0NiAwIGwgIDU3NiAwIGwgIDU3NiAtMTUwIGwgIDU3NiAtMTk5IDU1MyAtMjI3IDUxNSAtMjI3IGN0IAorNDkwIC0yMjcgNDcyIC0yMTYgNDU3IC0xODggY3QgNDU3IC0yMjEgbCAgcCBlZgorNjkwIC0xOTAgbSAgNjkwIC0yMjEgbCAgNjYwIC0yMjEgbCAgNjYwIC0yODIgbCAgNjMwIC0yODIgbCAgNjMwIC0yMjEgbCAKKzYwNSAtMjIxIGwgIDYwNSAtMTkwIGwgIDYzMCAtMTkwIGwgIDYzMCAtNDQgbCAgNjMwIC0xMiA2NDEgMiA2NjUgMiBjdCA2NjcgMiA2NjkgMiA2NzYgMSBjdCAKKzY3OCAxIDY4MyAwIDY4OSAwIGN0IDY4OSAtMjkgbCAgNjc5IC0yOSBsICA2NjUgLTI5IDY2MCAtMzQgNjYwIC00NiBjdCA2NjAgLTE5MCBsIAorNjkwIC0xOTAgbCAgcCBlZgorNzUxIC0zMDMgbSAgNzIxIC0zMDMgbCAgNzIxIDAgbCAgNzUxIDAgbCAgNzUxIC0xMjAgbCAgNzUxIC0xNjcgNzcwIC0xOTQgODAzIC0xOTQgY3QgCis4MjggLTE5NCA4MzkgLTE3OSA4MzkgLTE0NCBjdCA4MzkgMCBsICA4NjkgMCBsICA4NjkgLTE1MCBsICA4NjkgLTE5OSA4NDYgLTIyNyA4MDggLTIyNyBjdCAKKzc4NCAtMjI3IDc2OSAtMjE4IDc1MSAtMTkwIGN0IDc1MSAtMzAzIGwgIHAgZWYKKzEwMzggLTY5IG0gIDEwMzUgLTQ0IDEwMTUgLTI2IDk5MSAtMjYgY3QgOTczIC0yNiA5NTggLTM0IDk1MCAtNDkgY3QgOTQyIC02MSA5NDAgLTczIDkzOSAtOTggY3QgCisxMDcxIC05OCBsICAxMDcwIC0xNDIgMTA2NiAtMTYyIDEwNTYgLTE4NCBjdCAxMDQyIC0yMTQgMTAyMiAtMjI3IDk5MiAtMjI3IGN0IAorOTQwIC0yMjcgOTA2IC0xODAgOTA2IC0xMDYgY3QgOTA2IC0zNiA5MzggNiA5OTAgNiBjdCAxMDMyIDYgMTA2MSAtMjEgMTA2OSAtNjkgY3QgCisxMDM4IC02OSBsICBwCis5MzkgLTEyOCBtICA5NDEgLTE2NyA5NjIgLTE5NCA5OTEgLTE5NCBjdCAxMDA3IC0xOTQgMTAyMCAtMTg2IDEwMjggLTE3MyBjdCAxMDM1IC0xNjIgMTAzOCAtMTUxIDEwNDAgLTEyOCBjdCAKKzkzOSAtMTI4IGwgIHAgZWYKKzEyNDIgLTE1OCBtICAxMjQwIC0yMDIgMTIxNSAtMjI3IDExNzQgLTIyNyBjdCAxMTMyIC0yMjcgMTEwNCAtMjAwIDExMDQgLTE1NyBjdCAKKzExMDQgLTEyOSAxMTE4IC0xMTEgMTE0NiAtMTAzIGN0IDExODIgLTkyIGwgIDEyMTAgLTg0IDEyMTggLTc3IDEyMTggLTYwIGN0IDEyMTggLTM5IDEyMDIgLTI2IDExNzUgLTI2IGN0IAorMTE0NCAtMjYgMTEzMCAtMzkgMTEyOCAtNzEgY3QgMTA5OSAtNzEgbCAgMTEwMCAtNDkgMTEwMiAtMzggMTEwOCAtMjcgY3QgMTEyMCAtNSAxMTQzIDYgMTE3MyA2IGN0IAorMTIxOSA2IDEyNDggLTIyIDEyNDggLTY2IGN0IDEyNDggLTk3IDEyMzQgLTExMyAxMTk3IC0xMjUgY3QgMTE2NyAtMTM0IGwgIDExNDAgLTE0MiAxMTM0IC0xNDggMTEzNCAtMTYzIGN0IAorMTEzNCAtMTgzIDExNDggLTE5NSAxMTcyIC0xOTUgY3QgMTE5OCAtMTk1IDEyMTEgLTE4MyAxMjEzIC0xNTggY3QgMTI0MiAtMTU4IGwgCitwIGVmCisxMzE1IC0yMjEgbSAgMTI4NSAtMjIxIGwgIDEyODUgMCBsICAxMzE1IDAgbCAgMTMxNSAtMjIxIGwgIHAKKzEzMTUgLTI2MSBtICAxMzE1IC0zMDMgbCAgMTI4NSAtMzAzIGwgIDEyODUgLTI2MSBsICAxMzE1IC0yNjEgbCAgcCBlZgorMTQ5MiAtMTU4IG0gIDE0OTAgLTIwMiAxNDY1IC0yMjcgMTQyNCAtMjI3IGN0IDEzODIgLTIyNyAxMzU0IC0yMDAgMTM1NCAtMTU3IGN0IAorMTM1NCAtMTI5IDEzNjggLTExMSAxMzk2IC0xMDMgY3QgMTQzMiAtOTIgbCAgMTQ2MCAtODQgMTQ2OCAtNzcgMTQ2OCAtNjAgY3QgMTQ2OCAtMzkgMTQ1MiAtMjYgMTQyNSAtMjYgY3QgCisxMzk0IC0yNiAxMzgwIC0zOSAxMzc4IC03MSBjdCAxMzQ5IC03MSBsICAxMzUwIC00OSAxMzUyIC0zOCAxMzU4IC0yNyBjdCAxMzcwIC01IDEzOTMgNiAxNDIzIDYgY3QgCisxNDY5IDYgMTQ5OCAtMjIgMTQ5OCAtNjYgY3QgMTQ5OCAtOTcgMTQ4NCAtMTEzIDE0NDcgLTEyNSBjdCAxNDE3IC0xMzQgbCAgMTM5MCAtMTQyIDEzODQgLTE0OCAxMzg0IC0xNjMgY3QgCisxMzg0IC0xODMgMTM5OCAtMTk1IDE0MjIgLTE5NSBjdCAxNDQ4IC0xOTUgMTQ2MSAtMTgzIDE0NjMgLTE1OCBjdCAxNDkyIC0xNTggbCAKK3AgZWYKK3BvbQorcHVtCisxNzA4NSAxMzU4MSB0Cis5MCAtMTkwIG0gIDkwIC0yMjEgbCAgNjAgLTIyMSBsICA2MCAtMjQ4IGwgIDYwIC0yNjYgNjUgLTI3NCA3OCAtMjc0IGN0IDgxIC0yNzQgODUgLTI3NCA5MCAtMjczIGN0IAorOTAgLTMwNyBsICA4MSAtMzA3IDc5IC0zMDcgNzYgLTMwNyBjdCA0NiAtMzA3IDMwIC0yOTEgMzAgLTI1OSBjdCAzMCAtMjIxIGwgIDQgLTIyMSBsIAorNCAtMTkwIGwgIDMwIC0xOTAgbCAgMzAgMCBsICA2MCAwIGwgIDYwIC0xOTAgbCAgOTAgLTE5MCBsICBwIGVmCisxNTAgLTIyMSBtICAxMjAgLTIyMSBsICAxMjAgMCBsICAxNTAgMCBsICAxNTAgLTIyMSBsICBwCisxNTAgLTI2MSBtICAxNTAgLTMwMyBsICAxMjAgLTMwMyBsICAxMjAgLTI2MSBsICAxNTAgLTI2MSBsICBwIGVmCisyMjcgLTMwMyBtICAxOTcgLTMwMyBsICAxOTcgMCBsICAyMjcgMCBsICAyMjcgLTMwMyBsICBwIGVmCiszMzkgLTE5MCBtICAzMzkgLTIyMSBsICAzMDkgLTIyMSBsICAzMDkgLTI4MiBsICAyNzkgLTI4MiBsICAyNzkgLTIyMSBsIAorMjU0IC0yMjEgbCAgMjU0IC0xOTAgbCAgMjc5IC0xOTAgbCAgMjc5IC00NCBsICAyNzkgLTEyIDI5MCAyIDMxNCAyIGN0IDMxNiAyIDMxOCAyIDMyNSAxIGN0IAorMzI3IDEgMzMyIDAgMzM4IDAgY3QgMzM4IC0yOSBsICAzMjggLTI5IGwgIDMxNCAtMjkgMzA5IC0zNCAzMDkgLTQ2IGN0IDMwOSAtMTkwIGwgCiszMzkgLTE5MCBsICBwIGVmCis0OTIgLTY5IG0gIDQ4OSAtNDQgNDY5IC0yNiA0NDUgLTI2IGN0IDQyNyAtMjYgNDEyIC0zNCA0MDQgLTQ5IGN0IDM5NiAtNjEgMzk0IC03MyAzOTMgLTk4IGN0IAorNTI1IC05OCBsICA1MjQgLTE0MiA1MjAgLTE2MiA1MTAgLTE4NCBjdCA0OTYgLTIxNCA0NzYgLTIyNyA0NDYgLTIyNyBjdCAzOTQgLTIyNyAzNjAgLTE4MCAzNjAgLTEwNiBjdCAKKzM2MCAtMzYgMzkyIDYgNDQ0IDYgY3QgNDg2IDYgNTE1IC0yMSA1MjMgLTY5IGN0IDQ5MiAtNjkgbCAgcAorMzkzIC0xMjggbSAgMzk1IC0xNjcgNDE2IC0xOTQgNDQ1IC0xOTQgY3QgNDYxIC0xOTQgNDc0IC0xODYgNDgyIC0xNzMgY3QgNDg5IC0xNjIgNDkyIC0xNTEgNDk0IC0xMjggY3QgCiszOTMgLTEyOCBsICBwIGVmCis2NTcgLTE4OCBtICA2NTcgLTIyNiBsICA2NTQgLTIyNyA2NTEgLTIyNyA2NDkgLTIyNyBjdCA2MjcgLTIyNyA2MTMgLTIxNSA1OTcgLTE4MyBjdCAKKzU5NyAtMjIxIGwgIDU2OCAtMjIxIGwgIDU2OCAwIGwgIDU5OSAwIGwgIDU5OSAtMTI5IGwgIDU5OSAtMTYzIDYxOCAtMTg4IDY0NSAtMTg4IGN0IAorNjU3IC0xODggbCAgcCBlZgorODc4IC0yOTcgbSAgODU0IC0yOTcgbCAgODQ0IC0yNTMgODM0IC0yNDQgNzg5IC0yNDAgY3QgNzg5IC0yMTEgbCAgODQ1IC0yMTEgbCAKKzg0NSAwIGwgIDg3OCAwIGwgIDg3OCAtMjk3IGwgIHAgZWYKKzEwNTAgLTMxMSBtICAxMDI3IC0zMTEgbCAgOTQzIDggbCAgOTY1IDggbCAgMTA1MCAtMzExIGwgIHAgZWYKKzEyMTEgLTg4IG0gIDEyMzUgMCBsICAxMjcyIDAgbCAgMTE4MiAtMzAzIGwgIDExNDQgLTMwMyBsICAxMDUwIDAgbCAgMTA4NSAwIGwgCisxMTExIC04OCBsICAxMjExIC04OCBsICBwCisxMTIxIC0xMjUgbSAgMTE2MSAtMjU5IGwgIDExOTkgLTEyNSBsICAxMTIxIC0xMjUgbCAgcCBlZgorMTM2MCAtMzEwIG0gIDEzMTYgLTIzMSAxMzAxIC0xNzkgMTMwMSAtMTEwIGN0IDEzMDEgLTQyIDEzMTQgMSAxMzYxIDg3IGN0IDEzODEgODcgbCAKKzEzNDMgLTUgMTMzNCAtNDIgMTMzNCAtMTA3IGN0IDEzMzQgLTE4MiAxMzQ0IC0yMjUgMTM4MSAtMzEwIGN0IDEzNjAgLTMxMCBsICBwIGVmCisxNTUyIC0xOTAgbSAgMTU1MiAtMjIxIGwgIDE0MTIgLTIyMSBsICAxNDEyIC0xOTAgbCAgMTUxMyAtMTkwIGwgIDE0MDMgLTI5IGwgCisxNDAzIDAgbCAgMTU1NSAwIGwgIDE1NTUgLTMwIGwgIDE0NDQgLTMwIGwgIDE1NTIgLTE5MCBsICBwIGVmCisxNTk5IDg3IG0gIDE2NDIgOCAxNjU3IC00MyAxNjU3IC0xMTEgY3QgMTY1NyAtMTc5IDE2NDQgLTIyMyAxNTk4IC0zMTAgY3QgMTU3NyAtMzEwIGwgCisxNjE2IC0yMTcgMTYyNSAtMTc5IDE2MjUgLTExNSBjdCAxNjI1IC00MCAxNjE1IDIgMTU3OCA4NyBjdCAxNTk5IDg3IGwgIHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzU3MDggOTk1NiB0Cis2MyAtMTM3IG0gIDE4NSAtMTM3IGwgIDE4NSAtMTc0IGwgIDYzIC0xNzQgbCAgNjMgLTI2NiBsICAyMDIgLTI2NiBsICAyMDIgLTMwMyBsIAorMzAgLTMwMyBsICAzMCAwIGwgIDYzIDAgbCAgNjMgLTEzNyBsICBwIGVmCisyNjUgLTIyMSBtICAyMzUgLTIyMSBsICAyMzUgMCBsICAyNjUgMCBsICAyNjUgLTIyMSBsICBwCisyNjUgLTI2MSBtICAyNjUgLTMwMyBsICAyMzUgLTMwMyBsICAyMzUgLTI2MSBsICAyNjUgLTI2MSBsICBwIGVmCiszOTQgLTExMyBtICA0NTUgLTIyMSBsICA0MTggLTIyMSBsICAzNzUgLTE0MyBsICAzMzQgLTIyMSBsICAyOTQgLTIyMSBsIAorMzU1IC0xMTMgbCAgMjkxIDAgbCAgMzMwIDAgbCAgMzczIC04MyBsICA0MTkgMCBsICA0NTggMCBsICAzOTQgLTExMyBsIAorcCBlZgorNjA2IC02OSBtICA2MDMgLTQ0IDU4MyAtMjYgNTU5IC0yNiBjdCA1NDEgLTI2IDUyNiAtMzQgNTE4IC00OSBjdCA1MTAgLTYxIDUwOCAtNzMgNTA3IC05OCBjdCAKKzYzOSAtOTggbCAgNjM4IC0xNDIgNjM0IC0xNjIgNjI0IC0xODQgY3QgNjEwIC0yMTQgNTkwIC0yMjcgNTYwIC0yMjcgY3QgNTA4IC0yMjcgNDc0IC0xODAgNDc0IC0xMDYgY3QgCis0NzQgLTM2IDUwNiA2IDU1OCA2IGN0IDYwMCA2IDYyOSAtMjEgNjM3IC02OSBjdCA2MDYgLTY5IGwgIHAKKzUwNyAtMTI4IG0gIDUwOSAtMTY3IDUzMCAtMTk0IDU1OSAtMTk0IGN0IDU3NSAtMTk0IDU4OCAtMTg2IDU5NiAtMTczIGN0IDYwMyAtMTYyIDYwNiAtMTUxIDYwOCAtMTI4IGN0IAorNTA3IC0xMjggbCAgcCBlZgorODI5IC0zMDMgbSAgNzk4IC0zMDMgbCAgNzk4IC0xODcgbCAgNzg0IC0yMTYgNzY4IC0yMjcgNzQzIC0yMjcgY3QgNjk4IC0yMjcgNjY4IC0xODIgNjY4IC0xMTUgY3QgCis2NjggLTQxIDY5OSA2IDc0NyA2IGN0IDc3MiA2IDc4NyAtNCA4MDAgLTMxIGN0IDgwMCAwIGwgIDgyOSAwIGwgIDgyOSAtMzAzIGwgCitwCis3NDkgLTE5NCBtICA3ODAgLTE5NCA3OTggLTE2MiA3OTggLTEwNCBjdCA3OTggLTc2IDc5MyAtNTcgNzgyIC00MyBjdCA3NzMgLTMyIDc2MSAtMjYgNzQ4IC0yNiBjdCAKKzcxNyAtMjYgNjk5IC01OCA2OTkgLTExMyBjdCA2OTkgLTE2NyA3MTYgLTE5NCA3NDkgLTE5NCBjdCBwIGVmCisxMTEzIC0xNDYgbSAgMTEwNyAtMjAwIDEwODUgLTIyNyAxMDQ0IC0yMjcgY3QgOTkxIC0yMjcgOTU4IC0xODAgOTU4IC0xMDYgY3QgCis5NTggLTM3IDk5MCA2IDEwMzkgNiBjdCAxMDgxIDYgMTEwNiAtMjIgMTExMyAtNzggY3QgMTA4MyAtNzggbCAgMTA3NyAtNDMgMTA2MiAtMjYgMTAzOSAtMjYgY3QgCisxMDA4IC0yNiA5OTEgLTU2IDk5MSAtMTA5IGN0IDk5MSAtMTYzIDEwMDkgLTE5NCAxMDQxIC0xOTQgY3QgMTA2NSAtMTk0IDEwNzggLTE4MCAxMDgzIC0xNDYgY3QgCisxMTEzIC0xNDYgbCAgcCBlZgorMTIxOSAtMjI3IG0gIDExNjggLTIyNyAxMTM0IC0xODAgMTEzNCAtMTEwIGN0IDExMzQgLTQxIDExNjggNSAxMjE4IDUgY3QgMTI2OCA1IDEzMDIgLTQxIDEzMDIgLTExMCBjdCAKKzEzMDIgLTE3OCAxMjY4IC0yMjcgMTIxOSAtMjI3IGN0IHAKKzEyMTkgLTE5NSBtICAxMjUwIC0xOTUgMTI3MCAtMTYxIDEyNzAgLTExMCBjdCAxMjcwIC01OSAxMjUwIC0yNiAxMjE4IC0yNiBjdCAKKzExODYgLTI2IDExNjUgLTU5IDExNjUgLTExMCBjdCAxMTY1IC0xNjIgMTE4NiAtMTk1IDEyMTkgLTE5NSBjdCBwIGVmCisxNDkwIC0zMDMgbSAgMTQ1OSAtMzAzIGwgIDE0NTkgLTE4NyBsICAxNDQ1IC0yMTYgMTQyOSAtMjI3IDE0MDQgLTIyNyBjdCAxMzU5IC0yMjcgMTMyOSAtMTgyIDEzMjkgLTExNSBjdCAKKzEzMjkgLTQxIDEzNjAgNiAxNDA4IDYgY3QgMTQzMyA2IDE0NDggLTQgMTQ2MSAtMzEgY3QgMTQ2MSAwIGwgIDE0OTAgMCBsICAxNDkwIC0zMDMgbCAKK3AKKzE0MTAgLTE5NCBtICAxNDQxIC0xOTQgMTQ1OSAtMTYyIDE0NTkgLTEwNCBjdCAxNDU5IC03NiAxNDU0IC01NyAxNDQzIC00MyBjdCAKKzE0MzQgLTMyIDE0MjIgLTI2IDE0MDkgLTI2IGN0IDEzNzggLTI2IDEzNjAgLTU4IDEzNjAgLTExMyBjdCAxMzYwIC0xNjcgMTM3NyAtMTk0IDE0MTAgLTE5NCBjdCAKK3AgZWYKKzE2NTYgLTY5IG0gIDE2NTMgLTQ0IDE2MzMgLTI2IDE2MDkgLTI2IGN0IDE1OTEgLTI2IDE1NzYgLTM0IDE1NjggLTQ5IGN0IDE1NjAgLTYxIDE1NTggLTczIDE1NTcgLTk4IGN0IAorMTY4OSAtOTggbCAgMTY4OCAtMTQyIDE2ODQgLTE2MiAxNjc0IC0xODQgY3QgMTY2MCAtMjE0IDE2NDAgLTIyNyAxNjEwIC0yMjcgY3QgCisxNTU4IC0yMjcgMTUyNCAtMTgwIDE1MjQgLTEwNiBjdCAxNTI0IC0zNiAxNTU2IDYgMTYwOCA2IGN0IDE2NTAgNiAxNjc5IC0yMSAxNjg3IC02OSBjdCAKKzE2NTYgLTY5IGwgIHAKKzE1NTcgLTEyOCBtICAxNTU5IC0xNjcgMTU4MCAtMTk0IDE2MDkgLTE5NCBjdCAxNjI1IC0xOTQgMTYzOCAtMTg2IDE2NDYgLTE3MyBjdCAKKzE2NTMgLTE2MiAxNjU2IC0xNTEgMTY1OCAtMTI4IGN0IDE1NTcgLTEyOCBsICBwIGVmCisxNzU1IDAgbSAgMTc1NSAtMjggbCAgMTc2OCAtMyAxNzgyIDYgMTgwNiA2IGN0IDE4NTQgNiAxODg1IC00MSAxODg1IC0xMTUgY3QgCisxODg1IC0xODIgMTg1NSAtMjI3IDE4MTAgLTIyNyBjdCAxNzg4IC0yMjcgMTc3MiAtMjE3IDE3NTYgLTE5MiBjdCAxNzU2IC0zMDMgbCAKKzE3MjYgLTMwMyBsICAxNzI2IDAgbCAgMTc1NSAwIGwgIHAKKzE4MDUgLTE5NCBtICAxODM3IC0xOTQgMTg1MyAtMTY3IDE4NTMgLTExMyBjdCAxODUzIC01OCAxODM1IC0yNiAxODA0IC0yNiBjdCAKKzE3OTIgLTI2IDE3ODAgLTMyIDE3NzEgLTQzIGN0IDE3NjAgLTU3IDE3NTUgLTc2IDE3NTUgLTEwNSBjdCAxNzU1IC0xNjMgMTc3MiAtMTk0IDE4MDUgLTE5NCBjdCAKK3AgZWYKKzE5OTggLTIyNyBtICAxOTQ3IC0yMjcgMTkxMyAtMTgwIDE5MTMgLTExMCBjdCAxOTEzIC00MSAxOTQ3IDUgMTk5NyA1IGN0IDIwNDcgNSAyMDgxIC00MSAyMDgxIC0xMTAgY3QgCisyMDgxIC0xNzggMjA0NyAtMjI3IDE5OTggLTIyNyBjdCBwCisxOTk4IC0xOTUgbSAgMjAyOSAtMTk1IDIwNDkgLTE2MSAyMDQ5IC0xMTAgY3QgMjA0OSAtNTkgMjAyOSAtMjYgMTk5NyAtMjYgY3QgCisxOTY1IC0yNiAxOTQ0IC01OSAxOTQ0IC0xMTAgY3QgMTk0NCAtMTYyIDE5NjUgLTE5NSAxOTk4IC0xOTUgY3QgcCBlZgorMjE5MyAtMjI3IG0gIDIxNDIgLTIyNyAyMTA4IC0xODAgMjEwOCAtMTEwIGN0IDIxMDggLTQxIDIxNDIgNSAyMTkyIDUgY3QgMjI0MiA1IDIyNzYgLTQxIDIyNzYgLTExMCBjdCAKKzIyNzYgLTE3OCAyMjQyIC0yMjcgMjE5MyAtMjI3IGN0IHAKKzIxOTMgLTE5NSBtICAyMjI0IC0xOTUgMjI0NCAtMTYxIDIyNDQgLTExMCBjdCAyMjQ0IC01OSAyMjI0IC0yNiAyMTkyIC0yNiBjdCAKKzIxNjAgLTI2IDIxMzkgLTU5IDIxMzkgLTExMCBjdCAyMTM5IC0xNjIgMjE2MCAtMTk1IDIxOTMgLTE5NSBjdCBwIGVmCisyMzkwIC0xMzggbSAgMjQ1OSAtMjIxIGwgIDI0MjEgLTIyMSBsICAyMzQyIC0xMjcgbCAgMjM0MiAtMzAzIGwgIDIzMTMgLTMwMyBsIAorMjMxMyAwIGwgIDIzNDIgMCBsICAyMzQyIC04MyBsICAyMzY4IC0xMTEgbCAgMjQyNCAwIGwgIDI0NjMgMCBsICAyMzkwIC0xMzggbCAKK3AgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzUzOTAgMTU1MzkgdAorMTY1IC04OCBtICAxODkgMCBsICAyMjYgMCBsICAxMzYgLTMwMyBsICA5OCAtMzAzIGwgIDQgMCBsICAzOSAwIGwgIDY1IC04OCBsIAorMTY1IC04OCBsICBwCis3NSAtMTI1IG0gIDExNSAtMjU5IGwgIDE1MyAtMTI1IGwgIDc1IC0xMjUgbCAgcCBlZgorNDA2IC0zMDMgbSAgMzc1IC0zMDMgbCAgMzc1IC0xODcgbCAgMzYxIC0yMTYgMzQ1IC0yMjcgMzIwIC0yMjcgY3QgMjc1IC0yMjcgMjQ1IC0xODIgMjQ1IC0xMTUgY3QgCisyNDUgLTQxIDI3NiA2IDMyNCA2IGN0IDM0OSA2IDM2NCAtNCAzNzcgLTMxIGN0IDM3NyAwIGwgIDQwNiAwIGwgIDQwNiAtMzAzIGwgCitwCiszMjYgLTE5NCBtICAzNTcgLTE5NCAzNzUgLTE2MiAzNzUgLTEwNCBjdCAzNzUgLTc2IDM3MCAtNTcgMzU5IC00MyBjdCAzNTAgLTMyIDMzOCAtMjYgMzI1IC0yNiBjdCAKKzI5NCAtMjYgMjc2IC01OCAyNzYgLTExMyBjdCAyNzYgLTE2NyAyOTMgLTE5NCAzMjYgLTE5NCBjdCBwIGVmCis0NzcgLTE1MyBtICA0ODEgLTE4NCA0OTMgLTE5NiA1MjAgLTE5NiBjdCA1NDcgLTE5NiA1NjIgLTE4NCA1NjIgLTE1OSBjdCA1NjIgLTE0MyA1NTcgLTEzNiA1NDYgLTEzNCBjdCAKKzQ5NSAtMTI2IGwgIDQ2MCAtMTIxIDQ0MCAtOTYgNDQwIC01OCBjdCA0NDAgLTE5IDQ2MyA2IDQ5OCA2IGN0IDUyNCA2IDU0MyAtNCA1NjIgLTI5IGN0IAorNTY1IC01IDU3MyA0IDU5NCA0IGN0IDU5OCA0IDYwMiAzIDYwOCAxIGN0IDYxMCAwIDYxMCAwIDYxMiAwIGN0IDYxMiAtMjcgbCAgNjA1IC0yNSA2MDMgLTI1IDYwMSAtMjUgY3QgCis1OTUgLTI1IDU5MSAtMzAgNTkxIC0zOCBjdCA1OTEgLTE2NSBsICA1OTEgLTIwNCA1NjUgLTIyNyA1MjIgLTIyNyBjdCA0OTMgLTIyNyA0NzIgLTIxNyA0NjAgLTE5OCBjdCAKKzQ1MyAtMTg2IDQ1MCAtMTc1IDQ0OSAtMTUzIGN0IDQ3NyAtMTUzIGwgIHAKKzU2MSAtNzYgbSAgNTYxIC00OCA1MzUgLTI0IDUwNCAtMjQgY3QgNDg0IC0yNCA0NzIgLTM4IDQ3MiAtNjEgY3QgNDcyIC04MyA0ODMgLTk0IDUxMSAtOTggY3QgCis1NDYgLTEwNCA1NTQgLTEwNyA1NjEgLTExMiBjdCA1NjEgLTc2IGwgIHAgZWYKKzY0MiA4NyBtICA2NzIgODcgbCAgNjcyIC0yNCBsICA2ODUgLTIgNjk5IDYgNzIyIDYgY3QgNzcwIDYgODAxIC00MiA4MDEgLTExNSBjdCAKKzgwMSAtMTgyIDc3MSAtMjI3IDcyNiAtMjI3IGN0IDcwMSAtMjI3IDY4NyAtMjE3IDY3MSAtMTg4IGN0IDY3MSAtMjIxIGwgIDY0MiAtMjIxIGwgCis2NDIgODcgbCAgcAorNzIxIC0xOTQgbSAgNzUyIC0xOTQgNzY5IC0xNjYgNzY5IC0xMTQgY3QgNzY5IC01OCA3NTEgLTI2IDcyMCAtMjYgY3QgNjkwIC0yNiA2NzEgLTU1IDY3MSAtMTAzIGN0IAorNjcxIC0xNjMgNjg4IC0xOTQgNzIxIC0xOTQgY3QgcCBlZgorOTA2IC0xOTAgbSAgOTA2IC0yMjEgbCAgODc2IC0yMjEgbCAgODc2IC0yODIgbCAgODQ2IC0yODIgbCAgODQ2IC0yMjEgbCAKKzgyMSAtMjIxIGwgIDgyMSAtMTkwIGwgIDg0NiAtMTkwIGwgIDg0NiAtNDQgbCAgODQ2IC0xMiA4NTcgMiA4ODEgMiBjdCA4ODMgMiA4ODUgMiA4OTIgMSBjdCAKKzg5NCAxIDg5OSAwIDkwNSAwIGN0IDkwNSAtMjkgbCAgODk1IC0yOSBsICA4ODEgLTI5IDg3NiAtMzQgODc2IC00NiBjdCA4NzYgLTE5MCBsIAorOTA2IC0xOTAgbCAgcCBlZgorOTY3IC0yMjEgbSAgOTM3IC0yMjEgbCAgOTM3IDAgbCAgOTY3IDAgbCAgOTY3IC0yMjEgbCAgcAorOTY3IC0yNjEgbSAgOTY3IC0zMDMgbCAgOTM3IC0zMDMgbCAgOTM3IC0yNjEgbCAgOTY3IC0yNjEgbCAgcCBlZgorMTA3NiAtMzkgbSAgMTAyOSAtMjIxIGwgIDk5MyAtMjIxIGwgIDEwNTkgMCBsICAxMDkyIDAgbCAgMTE2MSAtMjIxIGwgIDExMjggLTIyMSBsIAorMTA3NiAtMzkgbCAgcCBlZgorMTMwOSAtNjkgbSAgMTMwNiAtNDQgMTI4NiAtMjYgMTI2MiAtMjYgY3QgMTI0NCAtMjYgMTIyOSAtMzQgMTIyMSAtNDkgY3QgMTIxMyAtNjEgMTIxMSAtNzMgMTIxMCAtOTggY3QgCisxMzQyIC05OCBsICAxMzQxIC0xNDIgMTMzNyAtMTYyIDEzMjcgLTE4NCBjdCAxMzEzIC0yMTQgMTI5MyAtMjI3IDEyNjMgLTIyNyBjdCAKKzEyMTEgLTIyNyAxMTc3IC0xODAgMTE3NyAtMTA2IGN0IDExNzcgLTM2IDEyMDkgNiAxMjYxIDYgY3QgMTMwMyA2IDEzMzIgLTIxIDEzNDAgLTY5IGN0IAorMTMwOSAtNjkgbCAgcAorMTIxMCAtMTI4IG0gIDEyMTIgLTE2NyAxMjMzIC0xOTQgMTI2MiAtMTk0IGN0IDEyNzggLTE5NCAxMjkxIC0xODYgMTI5OSAtMTczIGN0IAorMTMwNiAtMTYyIDEzMDkgLTE1MSAxMzExIC0xMjggY3QgMTIxMCAtMTI4IGwgIHAgZWYKKzE2MjEgLTE0NiBtICAxNjE1IC0yMDAgMTU5MyAtMjI3IDE1NTIgLTIyNyBjdCAxNDk5IC0yMjcgMTQ2NiAtMTgwIDE0NjYgLTEwNiBjdCAKKzE0NjYgLTM3IDE0OTggNiAxNTQ3IDYgY3QgMTU4OSA2IDE2MTQgLTIyIDE2MjEgLTc4IGN0IDE1OTEgLTc4IGwgIDE1ODUgLTQzIDE1NzAgLTI2IDE1NDcgLTI2IGN0IAorMTUxNiAtMjYgMTQ5OSAtNTYgMTQ5OSAtMTA5IGN0IDE0OTkgLTE2MyAxNTE3IC0xOTQgMTU0OSAtMTk0IGN0IDE1NzMgLTE5NCAxNTg2IC0xODAgMTU5MSAtMTQ2IGN0IAorMTYyMSAtMTQ2IGwgIHAgZWYKKzE3MjcgLTIyNyBtICAxNjc2IC0yMjcgMTY0MiAtMTgwIDE2NDIgLTExMCBjdCAxNjQyIC00MSAxNjc2IDUgMTcyNiA1IGN0IDE3NzYgNSAxODEwIC00MSAxODEwIC0xMTAgY3QgCisxODEwIC0xNzggMTc3NiAtMjI3IDE3MjcgLTIyNyBjdCBwCisxNzI3IC0xOTUgbSAgMTc1OCAtMTk1IDE3NzggLTE2MSAxNzc4IC0xMTAgY3QgMTc3OCAtNTkgMTc1OCAtMjYgMTcyNiAtMjYgY3QgCisxNjk0IC0yNiAxNjczIC01OSAxNjczIC0xMTAgY3QgMTY3MyAtMTYyIDE2OTQgLTE5NSAxNzI3IC0xOTUgY3QgcCBlZgorMTk5OCAtMzAzIG0gIDE5NjcgLTMwMyBsICAxOTY3IC0xODcgbCAgMTk1MyAtMjE2IDE5MzcgLTIyNyAxOTEyIC0yMjcgY3QgMTg2NyAtMjI3IDE4MzcgLTE4MiAxODM3IC0xMTUgY3QgCisxODM3IC00MSAxODY4IDYgMTkxNiA2IGN0IDE5NDEgNiAxOTU2IC00IDE5NjkgLTMxIGN0IDE5NjkgMCBsICAxOTk4IDAgbCAgMTk5OCAtMzAzIGwgCitwCisxOTE4IC0xOTQgbSAgMTk0OSAtMTk0IDE5NjcgLTE2MiAxOTY3IC0xMDQgY3QgMTk2NyAtNzYgMTk2MiAtNTcgMTk1MSAtNDMgY3QgCisxOTQyIC0zMiAxOTMwIC0yNiAxOTE3IC0yNiBjdCAxODg2IC0yNiAxODY4IC01OCAxODY4IC0xMTMgY3QgMTg2OCAtMTY3IDE4ODUgLTE5NCAxOTE4IC0xOTQgY3QgCitwIGVmCisyMTY0IC02OSBtICAyMTYxIC00NCAyMTQxIC0yNiAyMTE3IC0yNiBjdCAyMDk5IC0yNiAyMDg0IC0zNCAyMDc2IC00OSBjdCAyMDY4IC02MSAyMDY2IC03MyAyMDY1IC05OCBjdCAKKzIxOTcgLTk4IGwgIDIxOTYgLTE0MiAyMTkyIC0xNjIgMjE4MiAtMTg0IGN0IDIxNjggLTIxNCAyMTQ4IC0yMjcgMjExOCAtMjI3IGN0IAorMjA2NiAtMjI3IDIwMzIgLTE4MCAyMDMyIC0xMDYgY3QgMjAzMiAtMzYgMjA2NCA2IDIxMTYgNiBjdCAyMTU4IDYgMjE4NyAtMjEgMjE5NSAtNjkgY3QgCisyMTY0IC02OSBsICBwCisyMDY1IC0xMjggbSAgMjA2NyAtMTY3IDIwODggLTE5NCAyMTE3IC0xOTQgY3QgMjEzMyAtMTk0IDIxNDYgLTE4NiAyMTU0IC0xNzMgY3QgCisyMTYxIC0xNjIgMjE2NCAtMTUxIDIxNjYgLTEyOCBjdCAyMDY1IC0xMjggbCAgcCBlZgorMjI2MyAwIG0gIDIyNjMgLTI4IGwgIDIyNzYgLTMgMjI5MCA2IDIzMTQgNiBjdCAyMzYyIDYgMjM5MyAtNDEgMjM5MyAtMTE1IGN0IAorMjM5MyAtMTgyIDIzNjMgLTIyNyAyMzE4IC0yMjcgY3QgMjI5NiAtMjI3IDIyODAgLTIxNyAyMjY0IC0xOTIgY3QgMjI2NCAtMzAzIGwgCisyMjM0IC0zMDMgbCAgMjIzNCAwIGwgIDIyNjMgMCBsICBwCisyMzEzIC0xOTQgbSAgMjM0NSAtMTk0IDIzNjEgLTE2NyAyMzYxIC0xMTMgY3QgMjM2MSAtNTggMjM0MyAtMjYgMjMxMiAtMjYgY3QgCisyMzAwIC0yNiAyMjg4IC0zMiAyMjc5IC00MyBjdCAyMjY4IC01NyAyMjYzIC03NiAyMjYzIC0xMDUgY3QgMjI2MyAtMTYzIDIyODAgLTE5NCAyMzEzIC0xOTQgY3QgCitwIGVmCisyNTA2IC0yMjcgbSAgMjQ1NSAtMjI3IDI0MjEgLTE4MCAyNDIxIC0xMTAgY3QgMjQyMSAtNDEgMjQ1NSA1IDI1MDUgNSBjdCAyNTU1IDUgMjU4OSAtNDEgMjU4OSAtMTEwIGN0IAorMjU4OSAtMTc4IDI1NTUgLTIyNyAyNTA2IC0yMjcgY3QgcAorMjUwNiAtMTk1IG0gIDI1MzcgLTE5NSAyNTU3IC0xNjEgMjU1NyAtMTEwIGN0IDI1NTcgLTU5IDI1MzcgLTI2IDI1MDUgLTI2IGN0IAorMjQ3MyAtMjYgMjQ1MiAtNTkgMjQ1MiAtMTEwIGN0IDI0NTIgLTE2MiAyNDczIC0xOTUgMjUwNiAtMTk1IGN0IHAgZWYKKzI3MDEgLTIyNyBtICAyNjUwIC0yMjcgMjYxNiAtMTgwIDI2MTYgLTExMCBjdCAyNjE2IC00MSAyNjUwIDUgMjcwMCA1IGN0IDI3NTAgNSAyNzg0IC00MSAyNzg0IC0xMTAgY3QgCisyNzg0IC0xNzggMjc1MCAtMjI3IDI3MDEgLTIyNyBjdCBwCisyNzAxIC0xOTUgbSAgMjczMiAtMTk1IDI3NTIgLTE2MSAyNzUyIC0xMTAgY3QgMjc1MiAtNTkgMjczMiAtMjYgMjcwMCAtMjYgY3QgCisyNjY4IC0yNiAyNjQ3IC01OSAyNjQ3IC0xMTAgY3QgMjY0NyAtMTYyIDI2NjggLTE5NSAyNzAxIC0xOTUgY3QgcCBlZgorMjg5OCAtMTM4IG0gIDI5NjcgLTIyMSBsICAyOTI5IC0yMjEgbCAgMjg1MCAtMTI3IGwgIDI4NTAgLTMwMyBsICAyODIxIC0zMDMgbCAKKzI4MjEgMCBsICAyODUwIDAgbCAgMjg1MCAtODMgbCAgMjg3NiAtMTExIGwgIDI5MzIgMCBsICAyOTcxIDAgbCAgMjg5OCAtMTM4IGwgCitwIGVmCitwb20KK2dyCitncworcHVtCisxNDAxNiAxMzg0NiB0CisyMTMgLTM2IG0gIDYzIC0zNiBsICA2MyAtMTM3IGwgIDE5OSAtMTM3IGwgIDE5OSAtMTc0IGwgIDYzIC0xNzQgbCAgNjMgLTI2NiBsIAorMjExIC0yNjYgbCAgMjExIC0zMDMgbCAgMzAgLTMwMyBsICAzMCAwIGwgIDIxMyAwIGwgIDIxMyAtMzYgbCAgcCBlZgorMzM5IC0xMTMgbSAgNDAwIC0yMjEgbCAgMzYzIC0yMjEgbCAgMzIwIC0xNDMgbCAgMjc5IC0yMjEgbCAgMjM5IC0yMjEgbCAKKzMwMCAtMTEzIGwgIDIzNiAwIGwgIDI3NSAwIGwgIDMxOCAtODMgbCAgMzY0IDAgbCAgNDAzIDAgbCAgMzM5IC0xMTMgbCAKK3AgZWYKKzU3MSAtMTQ2IG0gIDU2NSAtMjAwIDU0MyAtMjI3IDUwMiAtMjI3IGN0IDQ0OSAtMjI3IDQxNiAtMTgwIDQxNiAtMTA2IGN0IDQxNiAtMzcgNDQ4IDYgNDk3IDYgY3QgCis1MzkgNiA1NjQgLTIyIDU3MSAtNzggY3QgNTQxIC03OCBsICA1MzUgLTQzIDUyMCAtMjYgNDk3IC0yNiBjdCA0NjYgLTI2IDQ0OSAtNTYgNDQ5IC0xMDkgY3QgCis0NDkgLTE2MyA0NjcgLTE5NCA0OTkgLTE5NCBjdCA1MjMgLTE5NCA1MzYgLTE4MCA1NDEgLTE0NiBjdCA1NzEgLTE0NiBsICBwIGVmCis2MzMgLTIyMSBtICA2MDMgLTIyMSBsICA2MDMgMCBsICA2MzMgMCBsICA2MzMgLTIyMSBsICBwCis2MzMgLTI2MSBtICA2MzMgLTMwMyBsICA2MDMgLTMwMyBsICA2MDMgLTI2MSBsICA2MzMgLTI2MSBsICBwIGVmCis3NDUgLTE5MCBtICA3NDUgLTIyMSBsICA3MTUgLTIyMSBsICA3MTUgLTI4MiBsICA2ODUgLTI4MiBsICA2ODUgLTIyMSBsIAorNjYwIC0yMjEgbCAgNjYwIC0xOTAgbCAgNjg1IC0xOTAgbCAgNjg1IC00NCBsICA2ODUgLTEyIDY5NiAyIDcyMCAyIGN0IDcyMiAyIDcyNCAyIDczMSAxIGN0IAorNzMzIDEgNzM4IDAgNzQ0IDAgY3QgNzQ0IC0yOSBsICA3MzQgLTI5IGwgIDcyMCAtMjkgNzE1IC0zNCA3MTUgLTQ2IGN0IDcxNSAtMTkwIGwgCis3NDUgLTE5MCBsICBwIGVmCis4MDMgLTE1MyBtICA4MDcgLTE4NCA4MTkgLTE5NiA4NDYgLTE5NiBjdCA4NzMgLTE5NiA4ODggLTE4NCA4ODggLTE1OSBjdCA4ODggLTE0MyA4ODMgLTEzNiA4NzIgLTEzNCBjdCAKKzgyMSAtMTI2IGwgIDc4NiAtMTIxIDc2NiAtOTYgNzY2IC01OCBjdCA3NjYgLTE5IDc4OSA2IDgyNCA2IGN0IDg1MCA2IDg2OSAtNCA4ODggLTI5IGN0IAorODkxIC01IDg5OSA0IDkyMCA0IGN0IDkyNCA0IDkyOCAzIDkzNCAxIGN0IDkzNiAwIDkzNiAwIDkzOCAwIGN0IDkzOCAtMjcgbCAgOTMxIC0yNSA5MjkgLTI1IDkyNyAtMjUgY3QgCis5MjEgLTI1IDkxNyAtMzAgOTE3IC0zOCBjdCA5MTcgLTE2NSBsICA5MTcgLTIwNCA4OTEgLTIyNyA4NDggLTIyNyBjdCA4MTkgLTIyNyA3OTggLTIxNyA3ODYgLTE5OCBjdCAKKzc3OSAtMTg2IDc3NiAtMTc1IDc3NSAtMTUzIGN0IDgwMyAtMTUzIGwgIHAKKzg4NyAtNzYgbSAgODg3IC00OCA4NjEgLTI0IDgzMCAtMjQgY3QgODEwIC0yNCA3OTggLTM4IDc5OCAtNjEgY3QgNzk4IC04MyA4MDkgLTk0IDgzNyAtOTggY3QgCis4NzIgLTEwNCA4ODAgLTEwNyA4ODcgLTExMiBjdCA4ODcgLTc2IGwgIHAgZWYKKzEwMzcgLTE5MCBtICAxMDM3IC0yMjEgbCAgMTAwNyAtMjIxIGwgIDEwMDcgLTI4MiBsICA5NzcgLTI4MiBsICA5NzcgLTIyMSBsIAorOTUyIC0yMjEgbCAgOTUyIC0xOTAgbCAgOTc3IC0xOTAgbCAgOTc3IC00NCBsICA5NzcgLTEyIDk4OCAyIDEwMTIgMiBjdCAxMDE0IDIgMTAxNiAyIDEwMjMgMSBjdCAKKzEwMjUgMSAxMDMwIDAgMTAzNiAwIGN0IDEwMzYgLTI5IGwgIDEwMjYgLTI5IGwgIDEwMTIgLTI5IDEwMDcgLTM0IDEwMDcgLTQ2IGN0IAorMTAwNyAtMTkwIGwgIDEwMzcgLTE5MCBsICBwIGVmCisxMDk5IC0yMjEgbSAgMTA2OSAtMjIxIGwgIDEwNjkgMCBsICAxMDk5IDAgbCAgMTA5OSAtMjIxIGwgIHAKKzEwOTkgLTI2MSBtICAxMDk5IC0zMDMgbCAgMTA2OSAtMzAzIGwgIDEwNjkgLTI2MSBsICAxMDk5IC0yNjEgbCAgcCBlZgorMTIxOSAtMjI3IG0gIDExNjggLTIyNyAxMTM0IC0xODAgMTEzNCAtMTEwIGN0IDExMzQgLTQxIDExNjggNSAxMjE4IDUgY3QgMTI2OCA1IDEzMDIgLTQxIDEzMDIgLTExMCBjdCAKKzEzMDIgLTE3OCAxMjY4IC0yMjcgMTIxOSAtMjI3IGN0IHAKKzEyMTkgLTE5NSBtICAxMjUwIC0xOTUgMTI3MCAtMTYxIDEyNzAgLTExMCBjdCAxMjcwIC01OSAxMjUwIC0yNiAxMjE4IC0yNiBjdCAKKzExODYgLTI2IDExNjUgLTU5IDExNjUgLTExMCBjdCAxMTY1IC0xNjIgMTE4NiAtMTk1IDEyMTkgLTE5NSBjdCBwIGVmCisxMzY4IC0yMjEgbSAgMTMzOSAtMjIxIGwgIDEzMzkgMCBsICAxMzY5IDAgbCAgMTM2OSAtMTIwIGwgIDEzNjkgLTE2NiAxMzg4IC0xOTQgMTQxOSAtMTk0IGN0IAorMTQ0NSAtMTk0IDE0NTcgLTE3NiAxNDU3IC0xMzYgY3QgMTQ1NyAwIGwgIDE0ODcgMCBsICAxNDg3IC0xNTAgbCAgMTQ4NyAtMTk5IDE0NjQgLTIyNyAxNDI2IC0yMjcgY3QgCisxNDAxIC0yMjcgMTM4MyAtMjE2IDEzNjggLTE4OCBjdCAxMzY4IC0yMjEgbCAgcCBlZgorcG9tCitwdW0KKzE0NDgwIDE0Mzc1IHQKKzE0NSAtNjkgbSAgMTQyIC00NCAxMjIgLTI2IDk4IC0yNiBjdCA4MCAtMjYgNjUgLTM0IDU3IC00OSBjdCA0OSAtNjEgNDcgLTczIDQ2IC05OCBjdCAKKzE3OCAtOTggbCAgMTc3IC0xNDIgMTczIC0xNjIgMTYzIC0xODQgY3QgMTQ5IC0yMTQgMTI5IC0yMjcgOTkgLTIyNyBjdCA0NyAtMjI3IDEzIC0xODAgMTMgLTEwNiBjdCAKKzEzIC0zNiA0NSA2IDk3IDYgY3QgMTM5IDYgMTY4IC0yMSAxNzYgLTY5IGN0IDE0NSAtNjkgbCAgcAorNDYgLTEyOCBtICA0OCAtMTY3IDY5IC0xOTQgOTggLTE5NCBjdCAxMTQgLTE5NCAxMjcgLTE4NiAxMzUgLTE3MyBjdCAxNDIgLTE2MiAxNDUgLTE1MSAxNDcgLTEyOCBjdCAKKzQ2IC0xMjggbCAgcCBlZgorMjQ0IC0yNzQgbSAgMjgxIC0yNzQgbCAgMjgxIC0zMDUgbCAgMjE3IC0zMDUgbCAgMjE3IDgyIGwgIDI4MSA4MiBsICAyODEgNTIgbCAKKzI0NCA1MiBsICAyNDQgLTI3NCBsICBwIGVmCiszNDMgLTIyMSBtICAzMTQgLTIyMSBsICAzMTQgMCBsICAzNDQgMCBsICAzNDQgLTEyMCBsICAzNDQgLTE2NiAzNjMgLTE5NCAzOTQgLTE5NCBjdCAKKzQyMCAtMTk0IDQzMiAtMTc2IDQzMiAtMTM2IGN0IDQzMiAwIGwgIDQ2MiAwIGwgIDQ2MiAtMTUwIGwgIDQ2MiAtMTk5IDQzOSAtMjI3IDQwMSAtMjI3IGN0IAorMzc2IC0yMjcgMzU4IC0yMTYgMzQzIC0xODggY3QgMzQzIC0yMjEgbCAgcCBlZgorNTMzIDUyIG0gIDQ5NiA1MiBsICA0OTYgODIgbCAgNTYxIDgyIGwgIDU2MSAtMzA1IGwgIDQ5NiAtMzA1IGwgIDQ5NiAtMjc0IGwgCis1MzMgLTI3NCBsICA1MzMgNTIgbCAgcCBlZgorcG9tCitncgorZ3MKK3B1bQorOTQ5MSAxMzIzNyB0Cis2MyAtMTM3IG0gIDE4NSAtMTM3IGwgIDE4NSAtMTc0IGwgIDYzIC0xNzQgbCAgNjMgLTI2NiBsICAyMDIgLTI2NiBsICAyMDIgLTMwMyBsIAorMzAgLTMwMyBsICAzMCAwIGwgIDYzIDAgbCAgNjMgLTEzNyBsICBwIGVmCisyNjUgLTIyMSBtICAyMzUgLTIyMSBsICAyMzUgMCBsICAyNjUgMCBsICAyNjUgLTIyMSBsICBwCisyNjUgLTI2MSBtICAyNjUgLTMwMyBsICAyMzUgLTMwMyBsICAyMzUgLTI2MSBsICAyNjUgLTI2MSBsICBwIGVmCiszOTQgLTExMyBtICA0NTUgLTIyMSBsICA0MTggLTIyMSBsICAzNzUgLTE0MyBsICAzMzQgLTIyMSBsICAyOTQgLTIyMSBsIAorMzU1IC0xMTMgbCAgMjkxIDAgbCAgMzMwIDAgbCAgMzczIC04MyBsICA0MTkgMCBsICA0NTggMCBsICAzOTQgLTExMyBsIAorcCBlZgorNjA2IC02OSBtICA2MDMgLTQ0IDU4MyAtMjYgNTU5IC0yNiBjdCA1NDEgLTI2IDUyNiAtMzQgNTE4IC00OSBjdCA1MTAgLTYxIDUwOCAtNzMgNTA3IC05OCBjdCAKKzYzOSAtOTggbCAgNjM4IC0xNDIgNjM0IC0xNjIgNjI0IC0xODQgY3QgNjEwIC0yMTQgNTkwIC0yMjcgNTYwIC0yMjcgY3QgNTA4IC0yMjcgNDc0IC0xODAgNDc0IC0xMDYgY3QgCis0NzQgLTM2IDUwNiA2IDU1OCA2IGN0IDYwMCA2IDYyOSAtMjEgNjM3IC02OSBjdCA2MDYgLTY5IGwgIHAKKzUwNyAtMTI4IG0gIDUwOSAtMTY3IDUzMCAtMTk0IDU1OSAtMTk0IGN0IDU3NSAtMTk0IDU4OCAtMTg2IDU5NiAtMTczIGN0IDYwMyAtMTYyIDYwNiAtMTUxIDYwOCAtMTI4IGN0IAorNTA3IC0xMjggbCAgcCBlZgorODI5IC0zMDMgbSAgNzk4IC0zMDMgbCAgNzk4IC0xODcgbCAgNzg0IC0yMTYgNzY4IC0yMjcgNzQzIC0yMjcgY3QgNjk4IC0yMjcgNjY4IC0xODIgNjY4IC0xMTUgY3QgCis2NjggLTQxIDY5OSA2IDc0NyA2IGN0IDc3MiA2IDc4NyAtNCA4MDAgLTMxIGN0IDgwMCAwIGwgIDgyOSAwIGwgIDgyOSAtMzAzIGwgCitwCis3NDkgLTE5NCBtICA3ODAgLTE5NCA3OTggLTE2MiA3OTggLTEwNCBjdCA3OTggLTc2IDc5MyAtNTcgNzgyIC00MyBjdCA3NzMgLTMyIDc2MSAtMjYgNzQ4IC0yNiBjdCAKKzcxNyAtMjYgNjk5IC01OCA2OTkgLTExMyBjdCA2OTkgLTE2NyA3MTYgLTE5NCA3NDkgLTE5NCBjdCBwIGVmCisxMTEzIC0xNDYgbSAgMTEwNyAtMjAwIDEwODUgLTIyNyAxMDQ0IC0yMjcgY3QgOTkxIC0yMjcgOTU4IC0xODAgOTU4IC0xMDYgY3QgCis5NTggLTM3IDk5MCA2IDEwMzkgNiBjdCAxMDgxIDYgMTEwNiAtMjIgMTExMyAtNzggY3QgMTA4MyAtNzggbCAgMTA3NyAtNDMgMTA2MiAtMjYgMTAzOSAtMjYgY3QgCisxMDA4IC0yNiA5OTEgLTU2IDk5MSAtMTA5IGN0IDk5MSAtMTYzIDEwMDkgLTE5NCAxMDQxIC0xOTQgY3QgMTA2NSAtMTk0IDEwNzggLTE4MCAxMDgzIC0xNDYgY3QgCisxMTEzIC0xNDYgbCAgcCBlZgorMTIxOSAtMjI3IG0gIDExNjggLTIyNyAxMTM0IC0xODAgMTEzNCAtMTEwIGN0IDExMzQgLTQxIDExNjggNSAxMjE4IDUgY3QgMTI2OCA1IDEzMDIgLTQxIDEzMDIgLTExMCBjdCAKKzEzMDIgLTE3OCAxMjY4IC0yMjcgMTIxOSAtMjI3IGN0IHAKKzEyMTkgLTE5NSBtICAxMjUwIC0xOTUgMTI3MCAtMTYxIDEyNzAgLTExMCBjdCAxMjcwIC01OSAxMjUwIC0yNiAxMjE4IC0yNiBjdCAKKzExODYgLTI2IDExNjUgLTU5IDExNjUgLTExMCBjdCAxMTY1IC0xNjIgMTE4NiAtMTk1IDEyMTkgLTE5NSBjdCBwIGVmCisxNDkwIC0zMDMgbSAgMTQ1OSAtMzAzIGwgIDE0NTkgLTE4NyBsICAxNDQ1IC0yMTYgMTQyOSAtMjI3IDE0MDQgLTIyNyBjdCAxMzU5IC0yMjcgMTMyOSAtMTgyIDEzMjkgLTExNSBjdCAKKzEzMjkgLTQxIDEzNjAgNiAxNDA4IDYgY3QgMTQzMyA2IDE0NDggLTQgMTQ2MSAtMzEgY3QgMTQ2MSAwIGwgIDE0OTAgMCBsICAxNDkwIC0zMDMgbCAKK3AKKzE0MTAgLTE5NCBtICAxNDQxIC0xOTQgMTQ1OSAtMTYyIDE0NTkgLTEwNCBjdCAxNDU5IC03NiAxNDU0IC01NyAxNDQzIC00MyBjdCAKKzE0MzQgLTMyIDE0MjIgLTI2IDE0MDkgLTI2IGN0IDEzNzggLTI2IDEzNjAgLTU4IDEzNjAgLTExMyBjdCAxMzYwIC0xNjcgMTM3NyAtMTk0IDE0MTAgLTE5NCBjdCAKK3AgZWYKKzE2NTYgLTY5IG0gIDE2NTMgLTQ0IDE2MzMgLTI2IDE2MDkgLTI2IGN0IDE1OTEgLTI2IDE1NzYgLTM0IDE1NjggLTQ5IGN0IDE1NjAgLTYxIDE1NTggLTczIDE1NTcgLTk4IGN0IAorMTY4OSAtOTggbCAgMTY4OCAtMTQyIDE2ODQgLTE2MiAxNjc0IC0xODQgY3QgMTY2MCAtMjE0IDE2NDAgLTIyNyAxNjEwIC0yMjcgY3QgCisxNTU4IC0yMjcgMTUyNCAtMTgwIDE1MjQgLTEwNiBjdCAxNTI0IC0zNiAxNTU2IDYgMTYwOCA2IGN0IDE2NTAgNiAxNjc5IC0yMSAxNjg3IC02OSBjdCAKKzE2NTYgLTY5IGwgIHAKKzE1NTcgLTEyOCBtICAxNTU5IC0xNjcgMTU4MCAtMTk0IDE2MDkgLTE5NCBjdCAxNjI1IC0xOTQgMTYzOCAtMTg2IDE2NDYgLTE3MyBjdCAKKzE2NTMgLTE2MiAxNjU2IC0xNTEgMTY1OCAtMTI4IGN0IDE1NTcgLTEyOCBsICBwIGVmCisxNzU1IDAgbSAgMTc1NSAtMjggbCAgMTc2OCAtMyAxNzgyIDYgMTgwNiA2IGN0IDE4NTQgNiAxODg1IC00MSAxODg1IC0xMTUgY3QgCisxODg1IC0xODIgMTg1NSAtMjI3IDE4MTAgLTIyNyBjdCAxNzg4IC0yMjcgMTc3MiAtMjE3IDE3NTYgLTE5MiBjdCAxNzU2IC0zMDMgbCAKKzE3MjYgLTMwMyBsICAxNzI2IDAgbCAgMTc1NSAwIGwgIHAKKzE4MDUgLTE5NCBtICAxODM3IC0xOTQgMTg1MyAtMTY3IDE4NTMgLTExMyBjdCAxODUzIC01OCAxODM1IC0yNiAxODA0IC0yNiBjdCAKKzE3OTIgLTI2IDE3ODAgLTMyIDE3NzEgLTQzIGN0IDE3NjAgLTU3IDE3NTUgLTc2IDE3NTUgLTEwNSBjdCAxNzU1IC0xNjMgMTc3MiAtMTk0IDE4MDUgLTE5NCBjdCAKK3AgZWYKKzE5OTggLTIyNyBtICAxOTQ3IC0yMjcgMTkxMyAtMTgwIDE5MTMgLTExMCBjdCAxOTEzIC00MSAxOTQ3IDUgMTk5NyA1IGN0IDIwNDcgNSAyMDgxIC00MSAyMDgxIC0xMTAgY3QgCisyMDgxIC0xNzggMjA0NyAtMjI3IDE5OTggLTIyNyBjdCBwCisxOTk4IC0xOTUgbSAgMjAyOSAtMTk1IDIwNDkgLTE2MSAyMDQ5IC0xMTAgY3QgMjA0OSAtNTkgMjAyOSAtMjYgMTk5NyAtMjYgY3QgCisxOTY1IC0yNiAxOTQ0IC01OSAxOTQ0IC0xMTAgY3QgMTk0NCAtMTYyIDE5NjUgLTE5NSAxOTk4IC0xOTUgY3QgcCBlZgorMjE5MyAtMjI3IG0gIDIxNDIgLTIyNyAyMTA4IC0xODAgMjEwOCAtMTEwIGN0IDIxMDggLTQxIDIxNDIgNSAyMTkyIDUgY3QgMjI0MiA1IDIyNzYgLTQxIDIyNzYgLTExMCBjdCAKKzIyNzYgLTE3OCAyMjQyIC0yMjcgMjE5MyAtMjI3IGN0IHAKKzIxOTMgLTE5NSBtICAyMjI0IC0xOTUgMjI0NCAtMTYxIDIyNDQgLTExMCBjdCAyMjQ0IC01OSAyMjI0IC0yNiAyMTkyIC0yNiBjdCAKKzIxNjAgLTI2IDIxMzkgLTU5IDIxMzkgLTExMCBjdCAyMTM5IC0xNjIgMjE2MCAtMTk1IDIxOTMgLTE5NSBjdCBwIGVmCisyMzkwIC0xMzggbSAgMjQ1OSAtMjIxIGwgIDI0MjEgLTIyMSBsICAyMzQyIC0xMjcgbCAgMjM0MiAtMzAzIGwgIDIzMTMgLTMwMyBsIAorMjMxMyAwIGwgIDIzNDIgMCBsICAyMzQyIC04MyBsICAyMzY4IC0xMTEgbCAgMjQyNCAwIGwgIDI0NjMgMCBsICAyMzkwIC0xMzggbCAKK3AgZWYKKzI3MzQgLTIyMSBtICAyNzA1IC0yMjEgbCAgMjcwNSAtMTg4IGwgIDI2ODggLTIxNyAyNjc0IC0yMjcgMjY0OSAtMjI3IGN0IDI2MDQgLTIyNyAyNTc0IC0xODIgMjU3NCAtMTE1IGN0IAorMjU3NCAtNDIgMjYwNiA2IDI2NTQgNiBjdCAyNjc2IDYgMjY5MSAtMiAyNzAzIC0yNCBjdCAyNzAzIC0xNSBsICAyNzAzIDExIDI3MDEgMjUgMjY5NSAzNyBjdCAKKzI2ODcgNTQgMjY3MyA2MiAyNjUxIDYyIGN0IDI2MjggNjIgMjYxNiA1MiAyNjEwIDI3IGN0IDI1ODAgMjcgbCAgMjU4NSA1NSAyNTkxIDY4IDI2MDUgNzkgY3QgCisyNjE3IDg4IDI2MzIgOTMgMjY1MCA5MyBjdCAyNjgxIDkzIDI3MDUgODAgMjcxOSA1NyBjdCAyNzI5IDM5IDI3MzQgMTcgMjczNCAtMTggY3QgCisyNzM0IC0yMjEgbCAgcAorMjY1NiAtMTk0IG0gIDI2ODcgLTE5NCAyNzA0IC0xNjIgMjcwNCAtMTA0IGN0IDI3MDQgLTU1IDI2ODYgLTI2IDI2NTQgLTI2IGN0IAorMjYyNCAtMjYgMjYwNiAtNTggMjYwNiAtMTEzIGN0IDI2MDYgLTE2NyAyNjIzIC0xOTQgMjY1NiAtMTk0IGN0IHAgZWYKKzI4MDUgLTE1MyBtICAyODA5IC0xODQgMjgyMSAtMTk2IDI4NDggLTE5NiBjdCAyODc1IC0xOTYgMjg5MCAtMTg0IDI4OTAgLTE1OSBjdCAKKzI4OTAgLTE0MyAyODg1IC0xMzYgMjg3NCAtMTM0IGN0IDI4MjMgLTEyNiBsICAyNzg4IC0xMjEgMjc2OCAtOTYgMjc2OCAtNTggY3QgCisyNzY4IC0xOSAyNzkxIDYgMjgyNiA2IGN0IDI4NTIgNiAyODcxIC00IDI4OTAgLTI5IGN0IDI4OTMgLTUgMjkwMSA0IDI5MjIgNCBjdCAyOTI2IDQgMjkzMCAzIDI5MzYgMSBjdCAKKzI5MzggMCAyOTM4IDAgMjk0MCAwIGN0IDI5NDAgLTI3IGwgIDI5MzMgLTI1IDI5MzEgLTI1IDI5MjkgLTI1IGN0IDI5MjMgLTI1IDI5MTkgLTMwIDI5MTkgLTM4IGN0IAorMjkxOSAtMTY1IGwgIDI5MTkgLTIwNCAyODkzIC0yMjcgMjg1MCAtMjI3IGN0IDI4MjEgLTIyNyAyODAwIC0yMTcgMjc4OCAtMTk4IGN0IAorMjc4MSAtMTg2IDI3NzggLTE3NSAyNzc3IC0xNTMgY3QgMjgwNSAtMTUzIGwgIHAKKzI4ODkgLTc2IG0gIDI4ODkgLTQ4IDI4NjMgLTI0IDI4MzIgLTI0IGN0IDI4MTIgLTI0IDI4MDAgLTM4IDI4MDAgLTYxIGN0IDI4MDAgLTgzIDI4MTEgLTk0IDI4MzkgLTk4IGN0IAorMjg3NCAtMTA0IDI4ODIgLTEwNyAyODg5IC0xMTIgY3QgMjg4OSAtNzYgbCAgcCBlZgorMzAwNCAtMjIxIG0gIDI5NzQgLTIyMSBsICAyOTc0IDAgbCAgMzAwNCAwIGwgIDMwMDQgLTIyMSBsICBwCiszMDA0IC0yNjEgbSAgMzAwNCAtMzAzIGwgIDI5NzQgLTMwMyBsICAyOTc0IC0yNjEgbCAgMzAwNCAtMjYxIGwgIHAgZWYKKzMwNzggLTIyMSBtICAzMDQ5IC0yMjEgbCAgMzA0OSAwIGwgIDMwNzkgMCBsICAzMDc5IC0xMjAgbCAgMzA3OSAtMTY2IDMwOTggLTE5NCAzMTI5IC0xOTQgY3QgCiszMTU1IC0xOTQgMzE2NyAtMTc2IDMxNjcgLTEzNiBjdCAzMTY3IDAgbCAgMzE5NyAwIGwgIDMxOTcgLTE1MCBsICAzMTk3IC0xOTkgMzE3NCAtMjI3IDMxMzYgLTIyNyBjdCAKKzMxMTEgLTIyNyAzMDkzIC0yMTYgMzA3OCAtMTg4IGN0IDMwNzggLTIyMSBsICBwIGVmCitwb20KK2dyCitncworcHVtCis5MTc0IDE3NzYyIHQKKzE2NSAtODggbSAgMTg5IDAgbCAgMjI2IDAgbCAgMTM2IC0zMDMgbCAgOTggLTMwMyBsICA0IDAgbCAgMzkgMCBsICA2NSAtODggbCAKKzE2NSAtODggbCAgcAorNzUgLTEyNSBtICAxMTUgLTI1OSBsICAxNTMgLTEyNSBsICA3NSAtMTI1IGwgIHAgZWYKKzQwNiAtMzAzIG0gIDM3NSAtMzAzIGwgIDM3NSAtMTg3IGwgIDM2MSAtMjE2IDM0NSAtMjI3IDMyMCAtMjI3IGN0IDI3NSAtMjI3IDI0NSAtMTgyIDI0NSAtMTE1IGN0IAorMjQ1IC00MSAyNzYgNiAzMjQgNiBjdCAzNDkgNiAzNjQgLTQgMzc3IC0zMSBjdCAzNzcgMCBsICA0MDYgMCBsICA0MDYgLTMwMyBsIAorcAorMzI2IC0xOTQgbSAgMzU3IC0xOTQgMzc1IC0xNjIgMzc1IC0xMDQgY3QgMzc1IC03NiAzNzAgLTU3IDM1OSAtNDMgY3QgMzUwIC0zMiAzMzggLTI2IDMyNSAtMjYgY3QgCisyOTQgLTI2IDI3NiAtNTggMjc2IC0xMTMgY3QgMjc2IC0xNjcgMjkzIC0xOTQgMzI2IC0xOTQgY3QgcCBlZgorNDc3IC0xNTMgbSAgNDgxIC0xODQgNDkzIC0xOTYgNTIwIC0xOTYgY3QgNTQ3IC0xOTYgNTYyIC0xODQgNTYyIC0xNTkgY3QgNTYyIC0xNDMgNTU3IC0xMzYgNTQ2IC0xMzQgY3QgCis0OTUgLTEyNiBsICA0NjAgLTEyMSA0NDAgLTk2IDQ0MCAtNTggY3QgNDQwIC0xOSA0NjMgNiA0OTggNiBjdCA1MjQgNiA1NDMgLTQgNTYyIC0yOSBjdCAKKzU2NSAtNSA1NzMgNCA1OTQgNCBjdCA1OTggNCA2MDIgMyA2MDggMSBjdCA2MTAgMCA2MTAgMCA2MTIgMCBjdCA2MTIgLTI3IGwgIDYwNSAtMjUgNjAzIC0yNSA2MDEgLTI1IGN0IAorNTk1IC0yNSA1OTEgLTMwIDU5MSAtMzggY3QgNTkxIC0xNjUgbCAgNTkxIC0yMDQgNTY1IC0yMjcgNTIyIC0yMjcgY3QgNDkzIC0yMjcgNDcyIC0yMTcgNDYwIC0xOTggY3QgCis0NTMgLTE4NiA0NTAgLTE3NSA0NDkgLTE1MyBjdCA0NzcgLTE1MyBsICBwCis1NjEgLTc2IG0gIDU2MSAtNDggNTM1IC0yNCA1MDQgLTI0IGN0IDQ4NCAtMjQgNDcyIC0zOCA0NzIgLTYxIGN0IDQ3MiAtODMgNDgzIC05NCA1MTEgLTk4IGN0IAorNTQ2IC0xMDQgNTU0IC0xMDcgNTYxIC0xMTIgY3QgNTYxIC03NiBsICBwIGVmCis2NDIgODcgbSAgNjcyIDg3IGwgIDY3MiAtMjQgbCAgNjg1IC0yIDY5OSA2IDcyMiA2IGN0IDc3MCA2IDgwMSAtNDIgODAxIC0xMTUgY3QgCis4MDEgLTE4MiA3NzEgLTIyNyA3MjYgLTIyNyBjdCA3MDEgLTIyNyA2ODcgLTIxNyA2NzEgLTE4OCBjdCA2NzEgLTIyMSBsICA2NDIgLTIyMSBsIAorNjQyIDg3IGwgIHAKKzcyMSAtMTk0IG0gIDc1MiAtMTk0IDc2OSAtMTY2IDc2OSAtMTE0IGN0IDc2OSAtNTggNzUxIC0yNiA3MjAgLTI2IGN0IDY5MCAtMjYgNjcxIC01NSA2NzEgLTEwMyBjdCAKKzY3MSAtMTYzIDY4OCAtMTk0IDcyMSAtMTk0IGN0IHAgZWYKKzkwNiAtMTkwIG0gIDkwNiAtMjIxIGwgIDg3NiAtMjIxIGwgIDg3NiAtMjgyIGwgIDg0NiAtMjgyIGwgIDg0NiAtMjIxIGwgCis4MjEgLTIyMSBsICA4MjEgLTE5MCBsICA4NDYgLTE5MCBsICA4NDYgLTQ0IGwgIDg0NiAtMTIgODU3IDIgODgxIDIgY3QgODgzIDIgODg1IDIgODkyIDEgY3QgCis4OTQgMSA4OTkgMCA5MDUgMCBjdCA5MDUgLTI5IGwgIDg5NSAtMjkgbCAgODgxIC0yOSA4NzYgLTM0IDg3NiAtNDYgY3QgODc2IC0xOTAgbCAKKzkwNiAtMTkwIGwgIHAgZWYKKzk2NyAtMjIxIG0gIDkzNyAtMjIxIGwgIDkzNyAwIGwgIDk2NyAwIGwgIDk2NyAtMjIxIGwgIHAKKzk2NyAtMjYxIG0gIDk2NyAtMzAzIGwgIDkzNyAtMzAzIGwgIDkzNyAtMjYxIGwgIDk2NyAtMjYxIGwgIHAgZWYKKzEwNzYgLTM5IG0gIDEwMjkgLTIyMSBsICA5OTMgLTIyMSBsICAxMDU5IDAgbCAgMTA5MiAwIGwgIDExNjEgLTIyMSBsICAxMTI4IC0yMjEgbCAKKzEwNzYgLTM5IGwgIHAgZWYKKzEzMDkgLTY5IG0gIDEzMDYgLTQ0IDEyODYgLTI2IDEyNjIgLTI2IGN0IDEyNDQgLTI2IDEyMjkgLTM0IDEyMjEgLTQ5IGN0IDEyMTMgLTYxIDEyMTEgLTczIDEyMTAgLTk4IGN0IAorMTM0MiAtOTggbCAgMTM0MSAtMTQyIDEzMzcgLTE2MiAxMzI3IC0xODQgY3QgMTMxMyAtMjE0IDEyOTMgLTIyNyAxMjYzIC0yMjcgY3QgCisxMjExIC0yMjcgMTE3NyAtMTgwIDExNzcgLTEwNiBjdCAxMTc3IC0zNiAxMjA5IDYgMTI2MSA2IGN0IDEzMDMgNiAxMzMyIC0yMSAxMzQwIC02OSBjdCAKKzEzMDkgLTY5IGwgIHAKKzEyMTAgLTEyOCBtICAxMjEyIC0xNjcgMTIzMyAtMTk0IDEyNjIgLTE5NCBjdCAxMjc4IC0xOTQgMTI5MSAtMTg2IDEyOTkgLTE3MyBjdCAKKzEzMDYgLTE2MiAxMzA5IC0xNTEgMTMxMSAtMTI4IGN0IDEyMTAgLTEyOCBsICBwIGVmCisxNjIxIC0xNDYgbSAgMTYxNSAtMjAwIDE1OTMgLTIyNyAxNTUyIC0yMjcgY3QgMTQ5OSAtMjI3IDE0NjYgLTE4MCAxNDY2IC0xMDYgY3QgCisxNDY2IC0zNyAxNDk4IDYgMTU0NyA2IGN0IDE1ODkgNiAxNjE0IC0yMiAxNjIxIC03OCBjdCAxNTkxIC03OCBsICAxNTg1IC00MyAxNTcwIC0yNiAxNTQ3IC0yNiBjdCAKKzE1MTYgLTI2IDE0OTkgLTU2IDE0OTkgLTEwOSBjdCAxNDk5IC0xNjMgMTUxNyAtMTk0IDE1NDkgLTE5NCBjdCAxNTczIC0xOTQgMTU4NiAtMTgwIDE1OTEgLTE0NiBjdCAKKzE2MjEgLTE0NiBsICBwIGVmCisxNzI3IC0yMjcgbSAgMTY3NiAtMjI3IDE2NDIgLTE4MCAxNjQyIC0xMTAgY3QgMTY0MiAtNDEgMTY3NiA1IDE3MjYgNSBjdCAxNzc2IDUgMTgxMCAtNDEgMTgxMCAtMTEwIGN0IAorMTgxMCAtMTc4IDE3NzYgLTIyNyAxNzI3IC0yMjcgY3QgcAorMTcyNyAtMTk1IG0gIDE3NTggLTE5NSAxNzc4IC0xNjEgMTc3OCAtMTEwIGN0IDE3NzggLTU5IDE3NTggLTI2IDE3MjYgLTI2IGN0IAorMTY5NCAtMjYgMTY3MyAtNTkgMTY3MyAtMTEwIGN0IDE2NzMgLTE2MiAxNjk0IC0xOTUgMTcyNyAtMTk1IGN0IHAgZWYKKzE5OTggLTMwMyBtICAxOTY3IC0zMDMgbCAgMTk2NyAtMTg3IGwgIDE5NTMgLTIxNiAxOTM3IC0yMjcgMTkxMiAtMjI3IGN0IDE4NjcgLTIyNyAxODM3IC0xODIgMTgzNyAtMTE1IGN0IAorMTgzNyAtNDEgMTg2OCA2IDE5MTYgNiBjdCAxOTQxIDYgMTk1NiAtNCAxOTY5IC0zMSBjdCAxOTY5IDAgbCAgMTk5OCAwIGwgIDE5OTggLTMwMyBsIAorcAorMTkxOCAtMTk0IG0gIDE5NDkgLTE5NCAxOTY3IC0xNjIgMTk2NyAtMTA0IGN0IDE5NjcgLTc2IDE5NjIgLTU3IDE5NTEgLTQzIGN0IAorMTk0MiAtMzIgMTkzMCAtMjYgMTkxNyAtMjYgY3QgMTg4NiAtMjYgMTg2OCAtNTggMTg2OCAtMTEzIGN0IDE4NjggLTE2NyAxODg1IC0xOTQgMTkxOCAtMTk0IGN0IAorcCBlZgorMjE2NCAtNjkgbSAgMjE2MSAtNDQgMjE0MSAtMjYgMjExNyAtMjYgY3QgMjA5OSAtMjYgMjA4NCAtMzQgMjA3NiAtNDkgY3QgMjA2OCAtNjEgMjA2NiAtNzMgMjA2NSAtOTggY3QgCisyMTk3IC05OCBsICAyMTk2IC0xNDIgMjE5MiAtMTYyIDIxODIgLTE4NCBjdCAyMTY4IC0yMTQgMjE0OCAtMjI3IDIxMTggLTIyNyBjdCAKKzIwNjYgLTIyNyAyMDMyIC0xODAgMjAzMiAtMTA2IGN0IDIwMzIgLTM2IDIwNjQgNiAyMTE2IDYgY3QgMjE1OCA2IDIxODcgLTIxIDIxOTUgLTY5IGN0IAorMjE2NCAtNjkgbCAgcAorMjA2NSAtMTI4IG0gIDIwNjcgLTE2NyAyMDg4IC0xOTQgMjExNyAtMTk0IGN0IDIxMzMgLTE5NCAyMTQ2IC0xODYgMjE1NCAtMTczIGN0IAorMjE2MSAtMTYyIDIxNjQgLTE1MSAyMTY2IC0xMjggY3QgMjA2NSAtMTI4IGwgIHAgZWYKKzIyNjMgMCBtICAyMjYzIC0yOCBsICAyMjc2IC0zIDIyOTAgNiAyMzE0IDYgY3QgMjM2MiA2IDIzOTMgLTQxIDIzOTMgLTExNSBjdCAKKzIzOTMgLTE4MiAyMzYzIC0yMjcgMjMxOCAtMjI3IGN0IDIyOTYgLTIyNyAyMjgwIC0yMTcgMjI2NCAtMTkyIGN0IDIyNjQgLTMwMyBsIAorMjIzNCAtMzAzIGwgIDIyMzQgMCBsICAyMjYzIDAgbCAgcAorMjMxMyAtMTk0IG0gIDIzNDUgLTE5NCAyMzYxIC0xNjcgMjM2MSAtMTEzIGN0IDIzNjEgLTU4IDIzNDMgLTI2IDIzMTIgLTI2IGN0IAorMjMwMCAtMjYgMjI4OCAtMzIgMjI3OSAtNDMgY3QgMjI2OCAtNTcgMjI2MyAtNzYgMjI2MyAtMTA1IGN0IDIyNjMgLTE2MyAyMjgwIC0xOTQgMjMxMyAtMTk0IGN0IAorcCBlZgorMjUwNiAtMjI3IG0gIDI0NTUgLTIyNyAyNDIxIC0xODAgMjQyMSAtMTEwIGN0IDI0MjEgLTQxIDI0NTUgNSAyNTA1IDUgY3QgMjU1NSA1IDI1ODkgLTQxIDI1ODkgLTExMCBjdCAKKzI1ODkgLTE3OCAyNTU1IC0yMjcgMjUwNiAtMjI3IGN0IHAKKzI1MDYgLTE5NSBtICAyNTM3IC0xOTUgMjU1NyAtMTYxIDI1NTcgLTExMCBjdCAyNTU3IC01OSAyNTM3IC0yNiAyNTA1IC0yNiBjdCAKKzI0NzMgLTI2IDI0NTIgLTU5IDI0NTIgLTExMCBjdCAyNDUyIC0xNjIgMjQ3MyAtMTk1IDI1MDYgLTE5NSBjdCBwIGVmCisyNzAxIC0yMjcgbSAgMjY1MCAtMjI3IDI2MTYgLTE4MCAyNjE2IC0xMTAgY3QgMjYxNiAtNDEgMjY1MCA1IDI3MDAgNSBjdCAyNzUwIDUgMjc4NCAtNDEgMjc4NCAtMTEwIGN0IAorMjc4NCAtMTc4IDI3NTAgLTIyNyAyNzAxIC0yMjcgY3QgcAorMjcwMSAtMTk1IG0gIDI3MzIgLTE5NSAyNzUyIC0xNjEgMjc1MiAtMTEwIGN0IDI3NTIgLTU5IDI3MzIgLTI2IDI3MDAgLTI2IGN0IAorMjY2OCAtMjYgMjY0NyAtNTkgMjY0NyAtMTEwIGN0IDI2NDcgLTE2MiAyNjY4IC0xOTUgMjcwMSAtMTk1IGN0IHAgZWYKKzI4OTggLTEzOCBtICAyOTY3IC0yMjEgbCAgMjkyOSAtMjIxIGwgIDI4NTAgLTEyNyBsICAyODUwIC0zMDMgbCAgMjgyMSAtMzAzIGwgCisyODIxIDAgbCAgMjg1MCAwIGwgIDI4NTAgLTgzIGwgIDI4NzYgLTExMSBsICAyOTMyIDAgbCAgMjk3MSAwIGwgIDI4OTggLTEzOCBsIAorcCBlZgorMzI0MiAtMjIxIG0gIDMyMTMgLTIyMSBsICAzMjEzIC0xODggbCAgMzE5NiAtMjE3IDMxODIgLTIyNyAzMTU3IC0yMjcgY3QgMzExMiAtMjI3IDMwODIgLTE4MiAzMDgyIC0xMTUgY3QgCiszMDgyIC00MiAzMTE0IDYgMzE2MiA2IGN0IDMxODQgNiAzMTk5IC0yIDMyMTEgLTI0IGN0IDMyMTEgLTE1IGwgIDMyMTEgMTEgMzIwOSAyNSAzMjAzIDM3IGN0IAorMzE5NSA1NCAzMTgxIDYyIDMxNTkgNjIgY3QgMzEzNiA2MiAzMTI0IDUyIDMxMTggMjcgY3QgMzA4OCAyNyBsICAzMDkzIDU1IDMwOTkgNjggMzExMyA3OSBjdCAKKzMxMjUgODggMzE0MCA5MyAzMTU4IDkzIGN0IDMxODkgOTMgMzIxMyA4MCAzMjI3IDU3IGN0IDMyMzcgMzkgMzI0MiAxNyAzMjQyIC0xOCBjdCAKKzMyNDIgLTIyMSBsICBwCiszMTY0IC0xOTQgbSAgMzE5NSAtMTk0IDMyMTIgLTE2MiAzMjEyIC0xMDQgY3QgMzIxMiAtNTUgMzE5NCAtMjYgMzE2MiAtMjYgY3QgCiszMTMyIC0yNiAzMTE0IC01OCAzMTE0IC0xMTMgY3QgMzExNCAtMTY3IDMxMzEgLTE5NCAzMTY0IC0xOTQgY3QgcCBlZgorMzMxMyAtMTUzIG0gIDMzMTcgLTE4NCAzMzI5IC0xOTYgMzM1NiAtMTk2IGN0IDMzODMgLTE5NiAzMzk4IC0xODQgMzM5OCAtMTU5IGN0IAorMzM5OCAtMTQzIDMzOTMgLTEzNiAzMzgyIC0xMzQgY3QgMzMzMSAtMTI2IGwgIDMyOTYgLTEyMSAzMjc2IC05NiAzMjc2IC01OCBjdCAKKzMyNzYgLTE5IDMyOTkgNiAzMzM0IDYgY3QgMzM2MCA2IDMzNzkgLTQgMzM5OCAtMjkgY3QgMzQwMSAtNSAzNDA5IDQgMzQzMCA0IGN0IDM0MzQgNCAzNDM4IDMgMzQ0NCAxIGN0IAorMzQ0NiAwIDM0NDYgMCAzNDQ4IDAgY3QgMzQ0OCAtMjcgbCAgMzQ0MSAtMjUgMzQzOSAtMjUgMzQzNyAtMjUgY3QgMzQzMSAtMjUgMzQyNyAtMzAgMzQyNyAtMzggY3QgCiszNDI3IC0xNjUgbCAgMzQyNyAtMjA0IDM0MDEgLTIyNyAzMzU4IC0yMjcgY3QgMzMyOSAtMjI3IDMzMDggLTIxNyAzMjk2IC0xOTggY3QgCiszMjg5IC0xODYgMzI4NiAtMTc1IDMyODUgLTE1MyBjdCAzMzEzIC0xNTMgbCAgcAorMzM5NyAtNzYgbSAgMzM5NyAtNDggMzM3MSAtMjQgMzM0MCAtMjQgY3QgMzMyMCAtMjQgMzMwOCAtMzggMzMwOCAtNjEgY3QgMzMwOCAtODMgMzMxOSAtOTQgMzM0NyAtOTggY3QgCiszMzgyIC0xMDQgMzM5MCAtMTA3IDMzOTcgLTExMiBjdCAzMzk3IC03NiBsICBwIGVmCiszNTEyIC0yMjEgbSAgMzQ4MiAtMjIxIGwgIDM0ODIgMCBsICAzNTEyIDAgbCAgMzUxMiAtMjIxIGwgIHAKKzM1MTIgLTI2MSBtICAzNTEyIC0zMDMgbCAgMzQ4MiAtMzAzIGwgIDM0ODIgLTI2MSBsICAzNTEyIC0yNjEgbCAgcCBlZgorMzU4NiAtMjIxIG0gIDM1NTcgLTIyMSBsICAzNTU3IDAgbCAgMzU4NyAwIGwgIDM1ODcgLTEyMCBsICAzNTg3IC0xNjYgMzYwNiAtMTk0IDM2MzcgLTE5NCBjdCAKKzM2NjMgLTE5NCAzNjc1IC0xNzYgMzY3NSAtMTM2IGN0IDM2NzUgMCBsICAzNzA1IDAgbCAgMzcwNSAtMTUwIGwgIDM3MDUgLTE5OSAzNjgyIC0yMjcgMzY0NCAtMjI3IGN0IAorMzYxOSAtMjI3IDM2MDEgLTIxNiAzNTg2IC0xODggY3QgMzU4NiAtMjIxIGwgIHAgZWYKK3BvbQorZ3IKKzAgbHcgMSBsaiAxMTE4NSAxOTgxOCBtICA5NDM1IDE5ODE4IGwgIDk0MzUgMTgzMTggbCAgMTI5MzUgMTgzMTggbCAgMTI5MzUgMTk4MTggbCAKKzExMTg1IDE5ODE4IGwgIHBjCitncworcHVtCisxMDUyMyAxOTI4OCB0Cis0MSAwIG0gIDE5MSAwIGwgIDIzNCAwIDI3MiAtMTcgMjk3IC00OCBjdCAzMzIgLTkyIDM1MSAtMTU3IDM1MSAtMjMzIGN0IDM1MSAtMzY4IDI4OSAtNDU1IDE5MyAtNDU1IGN0IAorNDEgLTQ1NSBsICA0MSAwIGwgIHAKKzkyIC00MDMgbSAgMTg3IC00MDMgbCAgMjU5IC00MDMgMjk5IC0zNDEgMjk5IC0yMjcgY3QgMjk5IC0xMTkgMjU3IC01MiAxOTAgLTUyIGN0IAorOTIgLTUyIGwgIDkyIC00MDMgbCAgcCBlZgorNTk2IC0xMDQgbSAgNTkxIC02NiA1NjEgLTM5IDUyNCAtMzkgY3QgNDk3IC0zOSA0NzYgLTUxIDQ2MiAtNzQgY3QgNDUxIC05MiA0NDggLTExMCA0NDYgLTE0NyBjdCAKKzY0NSAtMTQ3IGwgIDY0MyAtMjEzIDYzNyAtMjQ0IDYyMiAtMjc3IGN0IDYwMSAtMzIxIDU3MCAtMzQxIDUyNiAtMzQxIGN0IDQ0OCAtMzQxIDM5NyAtMjcxIDM5NyAtMTYwIGN0IAorMzk3IC01NSA0NDUgOSA1MjMgOSBjdCA1ODUgOSA2MjkgLTMyIDY0MSAtMTA0IGN0IDU5NiAtMTA0IGwgIHAKKzQ0NiAtMTkyIG0gIDQ0OSAtMjUyIDQ4MSAtMjkyIDUyNCAtMjkyIGN0IDU0OCAtMjkyIDU2OCAtMjgwIDU4MCAtMjYwIGN0IDU5MSAtMjQzIDU5NSAtMjI2IDU5NyAtMTkyIGN0IAorNDQ2IC0xOTIgbCAgcCBlZgorNzQ1IC00NTUgbSAgNjk5IC00NTUgbCAgNjk5IDAgbCAgNzQ1IDAgbCAgNzQ1IC00NTUgbCAgcCBlZgorODUzIC0yMzEgbSAgODU5IC0yNzcgODc3IC0yOTUgOTE3IC0yOTUgY3QgOTU4IC0yOTUgOTgwIC0yNzYgOTgwIC0yNDAgY3QgOTgwIC0yMTUgOTczIC0yMDQgOTU2IC0yMDEgY3QgCis4ODAgLTE5MCBsICA4MjcgLTE4MiA3OTggLTE0NSA3OTggLTg3IGN0IDc5OCAtMjkgODMyIDkgODg1IDkgY3QgOTIzIDkgOTUxIC02IDk4MSAtNDQgY3QgCis5ODQgLTggOTk3IDYgMTAyOCA2IGN0IDEwMzUgNiAxMDQwIDUgMTA0OSAxIGN0IDEwNTIgMCAxMDUzIDAgMTA1NSAwIGN0IDEwNTUgLTQwIGwgCisxMDQ1IC0zOCAxMDQzIC0zOCAxMDM5IC0zOCBjdCAxMDI5IC0zOCAxMDI0IC00NSAxMDI0IC01NyBjdCAxMDI0IC0yNDggbCAgMTAyNCAtMzA2IDk4NSAtMzQxIDkyMCAtMzQxIGN0IAorODc4IC0zNDEgODQ1IC0zMjYgODI3IC0yOTcgY3QgODE3IC0yODAgODEzIC0yNjQgODExIC0yMzEgY3QgODUzIC0yMzEgbCAgcAorOTc5IC0xMTQgbSAgOTc5IC03MyA5NDAgLTM2IDg5NCAtMzYgY3QgODYzIC0zNiA4NDUgLTU3IDg0NSAtOTIgY3QgODQ1IC0xMjUgODYyIC0xNDEgOTA0IC0xNDggY3QgCis5NTYgLTE1NyA5NjkgLTE2MCA5NzkgLTE2OSBjdCA5NzkgLTExNCBsICBwIGVmCisxMTk3IC01OSBtICAxMTI0IC0zMzIgbCAgMTA3MiAtMzMyIGwgIDExNzMgOCBsICAxMTY4IDI0IDExNjQgMzggMTE2MiA0MyBjdCAKKzExNTIgNzYgMTE0NCA4NSAxMTI1IDg1IGN0IDExMTUgODUgMTEwNiA4MyAxMDk3IDgwIGN0IDEwOTcgMTMwIGwgIDExMDEgMTMyIGwgCisxMTA5IDEzNSAxMTEzIDEzNSAxMTE5IDEzNSBjdCAxMTc0IDEzNSAxMTgyIDEyNSAxMjIzIC02IGN0IDEzMjEgLTMzMiBsICAxMjcwIC0zMzIgbCAKKzExOTcgLTU5IGwgIHAgZWYKK3BvbQorZ3IKKzEzMzg1IDE4OTE4IG0gIDEzMzg1IDE5MjE4IGwgIDEyOTM1IDE5MDY4IGwgIDEzMzg1IDE4OTE4IGwgIHAgZWYKKzEgbHcgMCBsaiAxNDkzNSAxNDU2NyBtICAxNDkzNSAxOTA2OCBsICAxMzI5NSAxOTA2OCBsICBwcworNzA4NSAxODI2OCBtICA2Nzg1IDE4MjY4IGwgIDY5MzUgMTc4MTggbCAgNzA4NSAxODI2OCBsICBwIGVmCis5NDM1IDE5MDY4IG0gIDY5MzUgMTkwNjggbCAgNjkzNSAxODE3OCBsICBwcworMjAwMjUgMTQ3MTggbSAgMjAwMzEgMTQ0MTggbCAgMjA0NzggMTQ1NzcgbCAgMjAwMjUgMTQ3MTggbCAgcCBlZgorMTkzMzUgMTQ1NjggbSAgMjAxMjcgMTQ1NjggbCAgcHMKK2dzCitwdW0KKzEwMTc5IDIwMjQ5IHQKKzYzIC0xMjggbSAgMTQxIC0xMjggbCAgMTg2IC0xMjggMjE1IC0xNjMgMjE1IC0yMTcgY3QgMjE1IC0yNjkgMTg2IC0zMDMgMTQxIC0zMDMgY3QgCiszMCAtMzAzIGwgIDMwIDAgbCAgNjMgMCBsICA2MyAtMTI4IGwgIHAKKzYzIC0yNjggbSAgMTMxIC0yNjggbCAgMTY0IC0yNjggMTgxIC0yNTEgMTgxIC0yMTYgY3QgMTgxIC0xODEgMTY0IC0xNjMgMTMwIC0xNjMgY3QgCis2MyAtMTYzIGwgIDYzIC0yNjggbCAgcCBlZgorMjgyIC0xNTMgbSAgMjg2IC0xODQgMjk4IC0xOTYgMzI1IC0xOTYgY3QgMzUyIC0xOTYgMzY3IC0xODQgMzY3IC0xNTkgY3QgMzY3IC0xNDMgMzYyIC0xMzYgMzUxIC0xMzQgY3QgCiszMDAgLTEyNiBsICAyNjUgLTEyMSAyNDUgLTk2IDI0NSAtNTggY3QgMjQ1IC0xOSAyNjggNiAzMDMgNiBjdCAzMjkgNiAzNDggLTQgMzY3IC0yOSBjdCAKKzM3MCAtNSAzNzggNCAzOTkgNCBjdCA0MDMgNCA0MDcgMyA0MTMgMSBjdCA0MTUgMCA0MTUgMCA0MTcgMCBjdCA0MTcgLTI3IGwgIDQxMCAtMjUgNDA4IC0yNSA0MDYgLTI1IGN0IAorNDAwIC0yNSAzOTYgLTMwIDM5NiAtMzggY3QgMzk2IC0xNjUgbCAgMzk2IC0yMDQgMzcwIC0yMjcgMzI3IC0yMjcgY3QgMjk4IC0yMjcgMjc3IC0yMTcgMjY1IC0xOTggY3QgCisyNTggLTE4NiAyNTUgLTE3NSAyNTQgLTE1MyBjdCAyODIgLTE1MyBsICBwCiszNjYgLTc2IG0gIDM2NiAtNDggMzQwIC0yNCAzMDkgLTI0IGN0IDI4OSAtMjQgMjc3IC0zOCAyNzcgLTYxIGN0IDI3NyAtODMgMjg4IC05NCAzMTYgLTk4IGN0IAorMzUxIC0xMDQgMzU5IC0xMDcgMzY2IC0xMTIgY3QgMzY2IC03NiBsICBwIGVmCis1ODIgLTE1OCBtICA1ODAgLTIwMiA1NTUgLTIyNyA1MTQgLTIyNyBjdCA0NzIgLTIyNyA0NDQgLTIwMCA0NDQgLTE1NyBjdCA0NDQgLTEyOSA0NTggLTExMSA0ODYgLTEwMyBjdCAKKzUyMiAtOTIgbCAgNTUwIC04NCA1NTggLTc3IDU1OCAtNjAgY3QgNTU4IC0zOSA1NDIgLTI2IDUxNSAtMjYgY3QgNDg0IC0yNiA0NzAgLTM5IDQ2OCAtNzEgY3QgCis0MzkgLTcxIGwgIDQ0MCAtNDkgNDQyIC0zOCA0NDggLTI3IGN0IDQ2MCAtNSA0ODMgNiA1MTMgNiBjdCA1NTkgNiA1ODggLTIyIDU4OCAtNjYgY3QgCis1ODggLTk3IDU3NCAtMTEzIDUzNyAtMTI1IGN0IDUwNyAtMTM0IGwgIDQ4MCAtMTQyIDQ3NCAtMTQ4IDQ3NCAtMTYzIGN0IDQ3NCAtMTgzIDQ4OCAtMTk1IDUxMiAtMTk1IGN0IAorNTM4IC0xOTUgNTUxIC0xODMgNTUzIC0xNTggY3QgNTgyIC0xNTggbCAgcCBlZgorNjkwIC0xOTAgbSAgNjkwIC0yMjEgbCAgNjYwIC0yMjEgbCAgNjYwIC0yODIgbCAgNjMwIC0yODIgbCAgNjMwIC0yMjEgbCAKKzYwNSAtMjIxIGwgIDYwNSAtMTkwIGwgIDYzMCAtMTkwIGwgIDYzMCAtNDQgbCAgNjMwIC0xMiA2NDEgMiA2NjUgMiBjdCA2NjcgMiA2NjkgMiA2NzYgMSBjdCAKKzY3OCAxIDY4MyAwIDY4OSAwIGN0IDY4OSAtMjkgbCAgNjc5IC0yOSBsICA2NjUgLTI5IDY2MCAtMzQgNjYwIC00NiBjdCA2NjAgLTE5MCBsIAorNjkwIC0xOTAgbCAgcCBlZgorOTUwIC0xNTggbSAgOTQ4IC0yMDIgOTIzIC0yMjcgODgyIC0yMjcgY3QgODQwIC0yMjcgODEyIC0yMDAgODEyIC0xNTcgY3QgODEyIC0xMjkgODI2IC0xMTEgODU0IC0xMDMgY3QgCis4OTAgLTkyIGwgIDkxOCAtODQgOTI2IC03NyA5MjYgLTYwIGN0IDkyNiAtMzkgOTEwIC0yNiA4ODMgLTI2IGN0IDg1MiAtMjYgODM4IC0zOSA4MzYgLTcxIGN0IAorODA3IC03MSBsICA4MDggLTQ5IDgxMCAtMzggODE2IC0yNyBjdCA4MjggLTUgODUxIDYgODgxIDYgY3QgOTI3IDYgOTU2IC0yMiA5NTYgLTY2IGN0IAorOTU2IC05NyA5NDIgLTExMyA5MDUgLTEyNSBjdCA4NzUgLTEzNCBsICA4NDggLTE0MiA4NDIgLTE0OCA4NDIgLTE2MyBjdCA4NDIgLTE4MyA4NTYgLTE5NSA4ODAgLTE5NSBjdCAKKzkwNiAtMTk1IDkxOSAtMTgzIDkyMSAtMTU4IGN0IDk1MCAtMTU4IGwgIHAgZWYKKzExMzggMCBtICAxMTM4IC0yMjEgbCAgMTEwOCAtMjIxIGwgIDExMDggLTk5IGwgIDExMDggLTU0IDEwODggLTI2IDEwNTggLTI2IGN0IAorMTAzNCAtMjYgMTAyMyAtNDIgMTAyMyAtNzQgY3QgMTAyMyAtMjIxIGwgIDk5MiAtMjIxIGwgIDk5MiAtNjIgbCAgOTkyIC0xOSAxMDE1IDYgMTA1MiA2IGN0IAorMTA3OSA2IDEwOTMgLTMgMTEwOSAtMzQgY3QgMTEwOSAwIGwgIDExMzggMCBsICBwIGVmCisxMjEzIDAgbSAgMTIxMyAtMjggbCAgMTIyNiAtMyAxMjQwIDYgMTI2NCA2IGN0IDEzMTIgNiAxMzQzIC00MSAxMzQzIC0xMTUgY3QgCisxMzQzIC0xODIgMTMxMyAtMjI3IDEyNjggLTIyNyBjdCAxMjQ2IC0yMjcgMTIzMCAtMjE3IDEyMTQgLTE5MiBjdCAxMjE0IC0zMDMgbCAKKzExODQgLTMwMyBsICAxMTg0IDAgbCAgMTIxMyAwIGwgIHAKKzEyNjMgLTE5NCBtICAxMjk1IC0xOTQgMTMxMSAtMTY3IDEzMTEgLTExMyBjdCAxMzExIC01OCAxMjkzIC0yNiAxMjYyIC0yNiBjdCAKKzEyNTAgLTI2IDEyMzggLTMyIDEyMjkgLTQzIGN0IDEyMTggLTU3IDEyMTMgLTc2IDEyMTMgLTEwNSBjdCAxMjEzIC0xNjMgMTIzMCAtMTk0IDEyNjMgLTE5NCBjdCAKK3AgZWYKKzE0NDkgLTE5MCBtICAxNDQ5IC0yMjEgbCAgMTQxOSAtMjIxIGwgIDE0MTkgLTI0OCBsICAxNDE5IC0yNjYgMTQyNCAtMjc0IDE0MzcgLTI3NCBjdCAKKzE0NDAgLTI3NCAxNDQ0IC0yNzQgMTQ0OSAtMjczIGN0IDE0NDkgLTMwNyBsICAxNDQwIC0zMDcgMTQzOCAtMzA3IDE0MzUgLTMwNyBjdCAKKzE0MDUgLTMwNyAxMzg5IC0yOTEgMTM4OSAtMjU5IGN0IDEzODkgLTIyMSBsICAxMzYzIC0yMjEgbCAgMTM2MyAtMTkwIGwgIDEzODkgLTE5MCBsIAorMTM4OSAwIGwgIDE0MTkgMCBsICAxNDE5IC0xOTAgbCAgMTQ0OSAtMTkwIGwgIHAgZWYKKzE1NzEgLTE4OCBtICAxNTcxIC0yMjYgbCAgMTU2OCAtMjI3IDE1NjUgLTIyNyAxNTYzIC0yMjcgY3QgMTU0MSAtMjI3IDE1MjcgLTIxNSAxNTExIC0xODMgY3QgCisxNTExIC0yMjEgbCAgMTQ4MiAtMjIxIGwgIDE0ODIgMCBsICAxNTEzIDAgbCAgMTUxMyAtMTI5IGwgIDE1MTMgLTE2MyAxNTMyIC0xODggMTU1OSAtMTg4IGN0IAorMTU3MSAtMTg4IGwgIHAgZWYKKzE2MjAgLTE1MyBtICAxNjI0IC0xODQgMTYzNiAtMTk2IDE2NjMgLTE5NiBjdCAxNjkwIC0xOTYgMTcwNSAtMTg0IDE3MDUgLTE1OSBjdCAKKzE3MDUgLTE0MyAxNzAwIC0xMzYgMTY4OSAtMTM0IGN0IDE2MzggLTEyNiBsICAxNjAzIC0xMjEgMTU4MyAtOTYgMTU4MyAtNTggY3QgCisxNTgzIC0xOSAxNjA2IDYgMTY0MSA2IGN0IDE2NjcgNiAxNjg2IC00IDE3MDUgLTI5IGN0IDE3MDggLTUgMTcxNiA0IDE3MzcgNCBjdCAxNzQxIDQgMTc0NSAzIDE3NTEgMSBjdCAKKzE3NTMgMCAxNzUzIDAgMTc1NSAwIGN0IDE3NTUgLTI3IGwgIDE3NDggLTI1IDE3NDYgLTI1IDE3NDQgLTI1IGN0IDE3MzggLTI1IDE3MzQgLTMwIDE3MzQgLTM4IGN0IAorMTczNCAtMTY1IGwgIDE3MzQgLTIwNCAxNzA4IC0yMjcgMTY2NSAtMjI3IGN0IDE2MzYgLTIyNyAxNjE1IC0yMTcgMTYwMyAtMTk4IGN0IAorMTU5NiAtMTg2IDE1OTMgLTE3NSAxNTkyIC0xNTMgY3QgMTYyMCAtMTUzIGwgIHAKKzE3MDQgLTc2IG0gIDE3MDQgLTQ4IDE2NzggLTI0IDE2NDcgLTI0IGN0IDE2MjcgLTI0IDE2MTUgLTM4IDE2MTUgLTYxIGN0IDE2MTUgLTgzIDE2MjYgLTk0IDE2NTQgLTk4IGN0IAorMTY4OSAtMTA0IDE2OTcgLTEwNyAxNzA0IC0xMTIgY3QgMTcwNCAtNzYgbCAgcCBlZgorMTc4NyAwIG0gIDE4MTcgMCBsICAxODE3IC0xMjAgbCAgMTgxNyAtMTY1IDE4MzYgLTE5NCAxODY2IC0xOTQgY3QgMTg4MyAtMTk0IDE4OTQgLTE3OSAxODk0IC0xNTMgY3QgCisxODk0IDAgbCAgMTkyNCAwIGwgIDE5MjQgLTEzNCBsICAxOTI0IC0xNjggMTk0MyAtMTk0IDE5NjggLTE5NCBjdCAxOTkwIC0xOTQgMjAwMSAtMTc3IDIwMDEgLTE0MiBjdCAKKzIwMDEgMCBsICAyMDMxIDAgbCAgMjAzMSAtMTUzIGwgIDIwMzEgLTE5OSAyMDA5IC0yMjcgMTk3NCAtMjI3IGN0IDE5NTIgLTIyNyAxOTQwIC0yMTkgMTkyMCAtMTkxIGN0IAorMTkwOCAtMjE3IDE4OTQgLTIyNyAxODcyIC0yMjcgY3QgMTg0OCAtMjI3IDE4MzEgLTIxNiAxODE2IC0xODggY3QgMTgxNiAtMjIxIGwgCisxNzg3IC0yMjEgbCAgMTc4NyAwIGwgIHAgZWYKKzIxOTggLTY5IG0gIDIxOTUgLTQ0IDIxNzUgLTI2IDIxNTEgLTI2IGN0IDIxMzMgLTI2IDIxMTggLTM0IDIxMTAgLTQ5IGN0IDIxMDIgLTYxIDIxMDAgLTczIDIwOTkgLTk4IGN0IAorMjIzMSAtOTggbCAgMjIzMCAtMTQyIDIyMjYgLTE2MiAyMjE2IC0xODQgY3QgMjIwMiAtMjE0IDIxODIgLTIyNyAyMTUyIC0yMjcgY3QgCisyMTAwIC0yMjcgMjA2NiAtMTgwIDIwNjYgLTEwNiBjdCAyMDY2IC0zNiAyMDk4IDYgMjE1MCA2IGN0IDIxOTIgNiAyMjIxIC0yMSAyMjI5IC02OSBjdCAKKzIxOTggLTY5IGwgIHAKKzIwOTkgLTEyOCBtICAyMTAxIC0xNjcgMjEyMiAtMTk0IDIxNTEgLTE5NCBjdCAyMTY3IC0xOTQgMjE4MCAtMTg2IDIxODggLTE3MyBjdCAKKzIxOTUgLTE2MiAyMTk4IC0xNTEgMjIwMCAtMTI4IGN0IDIwOTkgLTEyOCBsICBwIGVmCitwb20KK2dyCit0bSBzZXRtYXRyaXgKKzAgMCB0IAorMSAxIHMgCiswIDExMTEzIHQgCitwb20KK2NvdW50IG9wX2NvdW50IHN1YiB7cG9wfSByZXBlYXQgY291bnRkaWN0c3RhY2sgZGljdF9jb3VudCBzdWIge2VuZH0gcmVwZWF0IGI0X2luY19zdGF0ZSByZXN0b3JlCislJVBhZ2VUcmFpbGVyCislJVRyYWlsZXIKKyUlRU9GCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9kb2MvY2VscF9kZWNvZGVyLm9kZyBiLzNyZHBhcnR5L3NwZWV4L2RvYy9jZWxwX2RlY29kZXIub2RnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNTM3YWQKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9kb2MvY2VscF9kZWNvZGVyLm9kZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9kb2MvZHJhZnQtaGVybGVpbi1hdnQtcnRwLXNwZWV4LTAwLnR4dCBiLzNyZHBhcnR5L3NwZWV4L2RvYy9kcmFmdC1oZXJsZWluLWF2dC1ydHAtc3BlZXgtMDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NzMzZTkKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9kb2MvZHJhZnQtaGVybGVpbi1hdnQtcnRwLXNwZWV4LTAwLnR4dApAQCAtMCwwICsxLDY5OSBAQAorCisKKworCitJbnRlcm5ldCBFbmdpbmVlcmluZyBUYXNrIEZvcmNlICAgICAgICAgICAgICAgICAgICAgICAgICBHcmVnIEhlcmxlaW4KK0ludGVybmV0IERyYWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEplYW4tTWFyYyBWYWxpbgorZHJhZnQtaGVybGVpbi1hdnQtcnRwLXNwZWV4LTAwLnR4dCAgICAgICAgICAgICAgICAgICAgICAgU2ltb24gTW9ybGF0CitNYXJjaCAzLCAyMDA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm9nZXIgSGFyZGltYW4KK0V4cGlyZXM6IFNlcHRlbWJlciAzLCAyMDA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoaWwgS2VycgorCisKKyAgICAgICAgICAgICAgICAgUlRQIFBheWxvYWQgRm9ybWF0IGZvciB0aGUgU3BlZXggQ29kZWMKKworU3RhdHVzIG9mIHRoaXMgTWVtbworCisgICBUaGlzIGRvY3VtZW50IGlzIGFuIEludGVybmV0LURyYWZ0IGFuZCBpcyBpbiBmdWxsIGNvbmZvcm1hbmNlIHdpdGgKKyAgIGFsbCBwcm92aXNpb25zIG9mIFNlY3Rpb24gMTAgb2YgUkZDIDIwMjYuCisKKyAgIEludGVybmV0LURyYWZ0cyBhcmUgd29ya2luZyBkb2N1bWVudHMgb2YgdGhlIEludGVybmV0IEVuZ2luZWVyaW5nCisgICBUYXNrIEZvcmNlIChJRVRGKSwgaXRzIGFyZWFzLCBhbmQgaXRzIHdvcmtpbmcgZ3JvdXBzLiAgTm90ZSB0aGF0CisgICBvdGhlciBncm91cHMgbWF5IGFsc28gZGlzdHJpYnV0ZSB3b3JraW5nIGRvY3VtZW50cyBhcyBJbnRlcm5ldC0KKyAgIERyYWZ0cy4KKworICAgSW50ZXJuZXQtRHJhZnRzIGFyZSBkcmFmdCBkb2N1bWVudHMgdmFsaWQgZm9yIGEgbWF4aW11bSBvZiBzaXgKKyAgIG1vbnRocyBhbmQgbWF5IGJlIHVwZGF0ZWQsIHJlcGxhY2VkLCBvciBvYnNvbGV0ZWQgYnkgb3RoZXIKKyAgIGRvY3VtZW50cyBhdCBhbnkgdGltZS4gIEl0IGlzIGluYXBwcm9wcmlhdGUgdG8gdXNlIEludGVybmV0LURyYWZ0cworICAgYXMgcmVmZXJlbmNlIG1hdGVyaWFsIG9yIHRvIGNpdGUgdGhlbSBvdGhlciB0aGFuIGFzICJ3b3JrIGluCisgICBwcm9ncmVzcyIuCisKKyAgIFRoZSBsaXN0IG9mIGN1cnJlbnQgSW50ZXJuZXQtRHJhZnRzIGNhbiBiZSBhY2Nlc3NlZCBhdAorICAgaHR0cDovL3d3dy5pZXRmLm9yZy9pZXRmLzFpZC1hYnN0cmFjdHMudHh0CisKKyAgIFRvIHZpZXcgdGhlIGxpc3QgSW50ZXJuZXQtRHJhZnQgU2hhZG93IERpcmVjdG9yaWVzLCBzZWUKKyAgIGh0dHA6Ly93d3cuaWV0Zi5vcmcvc2hhZG93Lmh0bWwuCisKKworQ29weXJpZ2h0IE5vdGljZQorCisgICBDb3B5cmlnaHQgKEMpIFRoZSBJbnRlcm5ldCBTb2NpZXR5ICgyMDAzKS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKworQWJzdHJhY3QKKworICAgU3BlZXggaXMgYW4gb3Blbi1zb3VyY2Ugdm9pY2UgY29kZWMgc3VpdGFibGUgZm9yIHVzZSBpbiBWb2ljZSBvdmVyCisgICBJUCAoVm9JUCkgdHlwZSBhcHBsaWNhdGlvbnMuICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgcGF5bG9hZAorICAgZm9ybWF0IGZvciBTcGVleCBnZW5lcmF0ZWQgYml0IHN0cmVhbXMgd2l0aGluIGFuIFJUUCBwYWNrZXQuICBBbHNvCisgICBpbmNsdWRlZCBoZXJlIGFyZSB0aGUgbmVjZXNzYXJ5IGRldGFpbHMgZm9yIHRoZSB1c2Ugb2YgU3BlZXggd2l0aAorICAgdGhlIFNlc3Npb24gRGVzY3JpcHRpb24gUHJvdG9jb2wgKFNEUCkgYW5kIGEgcHJlbGltaW5hcnkgbWV0aG9kIG9mCisgICB1c2luZyBTcGVleCB3aXRoaW4gSC4zMjMgYXBwbGljYXRpb25zLgorCisKKzEuIENvbnZlbnRpb25zIHVzZWQgaW4gdGhpcyBkb2N1bWVudAorCisgICBUaGUga2V5IHdvcmRzICJNVVNUIiwgIk1VU1QgTk9UIiwgIlJFUVVJUkVEIiwgIlNIQUxMIiwgIlNIQUxMIE5PVCIsCisgICAiU0hPVUxEIiwgIlNIT1VMRCBOT1QiLCAiUkVDT01NRU5ERUQiLCAiTUFZIiwgYW5kICJPUFRJT05BTCIgaW4gdGhpcworICAgZG9jdW1lbnQgYXJlIHRvIGJlIGludGVycHJldGVkIGFzIGRlc2NyaWJlZCBpbiBSRkMgMjExOSBbNV0uCisKK0hlcmxlaW4sIFZhbGluLCBldC4gYWwuICAgICBFeHBpcmVzIFNlcHRlbWJlciAzLCAyMDA0ICAgICAgICAgICAgW1BhZ2UgMV0KK15MCitJbnRlcm5ldC1EcmFmdCAgICAgICBkcmFmdC1oZXJsZWluLWF2dC1ydHAtc3BlZXgtMDAudHh0ICAgIE1hcmNoIDMsIDIwMDQKKworCisyLiBPdmVydmlldyBvZiB0aGUgU3BlZXggQ29kZWMKKworICAgU3BlZXggaXMgYmFzZWQgb24gdGhlIENFTFAgWzEyXSBlbmNvZGluZyB0ZWNobmlxdWUgd2l0aCBzdXBwb3J0IGZvciAKKyAgIGVpdGhlciBuYXJyb3diYW5kIChub21pbmFsIDhrSHopLCB3aWRlYmFuZCAobm9taW5hbCAxNmtIeikgb3IgCisgICB1bHRyYS13aWRlYmFuZCAobm9taW5hbCAzMmtIeiksIGFuZCAobm9uLW9wdGltYWwpIHJhdGVzIHVwIHRvIDQ4IGtIeiAKKyAgIHNhbXBsaW5nIGFsc28gYXZhaWxhYmxlLiAgVGhlIG1haW4gY2hhcmFjdGVyaXN0aWNzIGNhbiBiZSBzdW1tYXJpemVkIAorICAgYXMgZm9sbG93czoKKworICAgbyAgRnJlZSBzb2Z0d2FyZS9vcGVuLXNvdXJjZQorICAgbyAgSW50ZWdyYXRpb24gb2Ygd2lkZWJhbmQgYW5kIG5hcnJvd2JhbmQgaW4gdGhlIHNhbWUgYml0LXN0cmVhbQorICAgbyAgV2lkZSByYW5nZSBvZiBiaXQtcmF0ZXMgYXZhaWxhYmxlCisgICBvICBEeW5hbWljIGJpdC1yYXRlIHN3aXRjaGluZyBhbmQgdmFyaWFibGUgYml0LXJhdGUgKFZCUikKKyAgIG8gIFZvaWNlIEFjdGl2aXR5IERldGVjdGlvbiAoVkFELCBpbnRlZ3JhdGVkIHdpdGggVkJSKQorICAgbyAgVmFyaWFibGUgY29tcGxleGl0eQorCisKKzMuIFJUUCBwYXlsb2FkIGZvcm1hdCBmb3IgU3BlZXgKKworICAgRm9yIFJUUCBiYXNlZCB0cmFuc3BvcnRhdGlvbiBvZiBTcGVleCBlbmNvZGVkIGF1ZGlvIHRoZSBzdGFuZGFyZCAKKyAgIFJUUCBoZWFkZXIgWzJdIGlzIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIHBheWxvYWQgZGF0YSBibG9ja3MuIAorICAgQW4gb3B0aW9uYWwgcGFkZGluZyB0ZXJtaW5hdG9yIG1heSBhbHNvIGJlIHVzZWQuIAorCisgICAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisgICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBSVFAgSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSsKKyAgICAgfCAgICAgICAgICAgICAgICAgb25lIG9yIG1vcmUgZnJhbWVzIG9mIFNwZWV4IC4uLi4gICAgICAgICAgICAgIHwKKyAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgfCAgICAgICAgb25lIG9yIG1vcmUgZnJhbWVzIG9mIFNwZWV4IC4uLi4gICAgICAgfCAgICBwYWRkaW5nICAgIHwKKyAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworCiszLjEgUlRQIEhlYWRlcgorCisgICAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisgICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgfFY9MnxQfFh8ICBDQyAgIHxNfCAgICAgUFQgICAgICB8ICAgICAgIHNlcXVlbmNlIG51bWJlciAgICAgICAgIHwKKyAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgfCAgICAgICAgICAgc3luY2hyb25pemF0aW9uIHNvdXJjZSAoU1NSQykgaWRlbnRpZmllciAgICAgICAgICAgIHwKKyAgICAgKz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSsKKyAgICAgfCAgICAgICAgICAgIGNvbnRyaWJ1dGluZyBzb3VyY2UgKENTUkMpIGlkZW50aWZpZXJzICAgICAgICAgICAgIHwKKyAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworCisgICBUaGUgUlRQIGhlYWRlciBiZWdpbnMgd2l0aCBhbiBvY3RldCBvZiBmaWVsZHMgKFYsIFAsIFgsIGFuZCBDQykgdG8gICAKKyAgIHN1cHBvcnQgc3BlY2lhbGl6ZWQgUlRQIHVzZXMgKHNlZSBbOF0gYW5kIFs5XSBmb3IgZGV0YWlscykuIEZvciAKKyAgIFNwZWV4IHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSB1c2VkLgorCitIZXJsZWluLCBWYWxpbiwgZXQuIGFsLiAgICAgRXhwaXJlcyBTZXB0ZW1iZXIgMywgMjAwNCAgICAgICAgICAgIFtQYWdlIDJdCiteTAorSW50ZXJuZXQtRHJhZnQgICAgICAgZHJhZnQtaGVybGVpbi1hdnQtcnRwLXNwZWV4LTAwLnR4dCAgICBNYXJjaCAzLCAyMDA0CisKKworICAgVmVyc2lvbiAoVik6IDIgYml0cworICAgICAgVGhpcyBmaWVsZCBpZGVudGlmaWVzIHRoZSB2ZXJzaW9uIG9mIFJUUC4gVGhlIHZlcnNpb24KKyAgICAgIHVzZWQgYnkgdGhpcyBzcGVjaWZpY2F0aW9uIGlzIHR3byAoMikuCisKKyAgIFBhZGRpbmcgKFApOiAxIGJpdAorICAgICAgSWYgdGhlIHBhZGRpbmcgYml0IGlzIHNldCwgdGhlIHBhY2tldCBjb250YWlucyBvbmUgb3IgbW9yZQorICAgICAgYWRkaXRpb25hbCBwYWRkaW5nIG9jdGV0cyBhdCB0aGUgZW5kIHdoaWNoIGFyZSBub3QgcGFydCBvZgorICAgICAgdGhlIHBheWxvYWQuICBQIGlzIHNldCBpZiB0aGUgdG90YWwgcGFja2V0IHNpemUgaXMgbGVzcyB0aGFuIAorICAgICAgdGhlIE1UVS4gIAorCisgICBFeHRlbnNpb24gKFgpOiAxIGJpdAorICAgICAgSWYgdGhlIGV4dGVuc2lvbiwgWCwgYml0IGlzIHNldCwgdGhlIGZpeGVkIGhlYWRlciBNVVNUIGJlIAorICAgICAgZm9sbG93ZWQgYnkgZXhhY3RseSBvbmUgaGVhZGVyIGV4dGVuc2lvbiwgd2l0aCBhIGZvcm1hdCBkZWZpbmVkIAorICAgICAgaW4gU2VjdGlvbiA1LjMuMS4gb2YgWzhdLCAKKworICAgQ1NSQyBjb3VudCAoQ0MpOiA0IGJpdHMKKyAgICAgIFRoZSBDU1JDIGNvdW50IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgQ1NSQyBpZGVudGlmaWVycy4KKworICAgTWFya2VyIChNKTogMSBiaXQKKyAgICAgIFRoZSBNIGJpdCBpbmRpY2F0ZXMgaWYgdGhlIHBhY2tldCBjb250YWlucyBjb21mb3J0IG5vaXNlLiAgVGhpcyAKKyAgICAgIGZpZWxkIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgY25nIFNEUCBhdHRyaWJ1dGUgYW5kIGlzIAorICAgICAgZGV0YWlsZWQgZnVydGhlciBpbiBzZWN0aW9uIDUgYmVsb3cuICBJbiBub3JtYWwgdXNhZ2UgdGhpcyBiaXQgCisgICAgICBpcyBzZXQgaWYgdGhlIHBhY2tldCBjb250YWlucyBjb21mb3J0IG5vaXNlLgorCisgICBQYXlsb2FkIFR5cGUgKFBUKTogNyBiaXRzCisgICAgICBBbiBSVFAgcHJvZmlsZSBmb3IgYSBjbGFzcyBvZiBhcHBsaWNhdGlvbnMgaXMgZXhwZWN0ZWQgdG8gYXNzaWduIAorICAgICAgYSBwYXlsb2FkIHR5cGUgZm9yIHRoaXMgZm9ybWF0LCBvciBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCAKKyAgICAgIHBheWxvYWQgdHlwZSBTSE9VTEQgYmUgY2hvc2VuIHdoaWNoIGRlc2lnbmF0ZXMgdGhlIHBheWxvYWQgYXMgCisgICAgICBTcGVleC4KKworICAgU2VxdWVuY2UgbnVtYmVyOiAxNiBiaXRzCisgICAgICBUaGUgc2VxdWVuY2UgbnVtYmVyIGluY3JlbWVudHMgYnkgb25lIGZvciBlYWNoIFJUUCBkYXRhIHBhY2tldAorICAgICAgc2VudCwgYW5kIG1heSBiZSB1c2VkIGJ5IHRoZSByZWNlaXZlciB0byBkZXRlY3QgcGFja2V0IGxvc3MgYW5kCisgICAgICB0byByZXN0b3JlIHBhY2tldCBzZXF1ZW5jZS4gIFRoaXMgZmllbGQgaXMgZGV0YWlsZWQgZnVydGhlciBpbgorICAgICAgWzJdLgorCisgICBUaW1lc3RhbXA6IDMyIGJpdHMKKyAgICAgIEEgdGltZXN0YW1wIHJlcHJlc2VudGluZyB0aGUgc2FtcGxpbmcgdGltZSBvZiB0aGUgZmlyc3Qgc2FtcGxlIG9mCisgICAgICB0aGUgZmlyc3QgU3BlZXggcGFja2V0IGluIHRoZSBSVFAgcGFja2V0LiAgVGhlIGNsb2NrIGZyZXF1ZW5jeSAKKyAgICAgIE1VU1QgYmUgc2V0IHRvIHRoZSBzYW1wbGUgcmF0ZSBvZiB0aGUgZW5jb2RlZCBhdWRpbyBkYXRhLgorCisgICAgICBTcGVleCB1c2VzIDIwIG1zZWMgZnJhbWVzIGFuZCBhIHZhcmlhYmxlIHNhbXBsaW5nIHJhdGUgY2xvY2suICAKKyAgICAgIFRoZSBSVFAgdGltZXN0YW1wIE1VU1QgYmUgaW4gdW5pdHMgb2YgMS9YIG9mIGEgc2Vjb25kIHdoZXJlIFggCisgICAgICBpcyB0aGUgc2FtcGxlIHJhdGUgdXNlZC4gIFNwZWV4IHVzZXMgYSBub21pbmFsIDhrSHogc2FtcGxpbmcgcmF0ZQorICAgICAgZm9yIG5hcnJvd2JhbmQgdXNlLCBhIG5vbWluYWwgMTZrSHogc2FtcGxpbmcgcmF0ZSBmb3Igd2lkZWJhbmQgdXNlLCAKKyAgICAgIGFuZCBhIG5vbWluYWwgMzJrSHogc2FtcGxpbmcgcmF0ZSBmb3IgdWx0cmEtd2lkZWJhbmQgdXNlLgorCisgICBTU1JDL0NTUkMgaWRlbnRpZmllcnM6IAorICAgICAgVGhlc2UgdHdvIGZpZWxkcywgMzIgYml0cyBlYWNoIHdpdGggb25lIFNTUkMgZmllbGQgYW5kIGEgbWF4aW11bSAKKyAgICAgIG9mIDE2IENTUkMgZmllbGRzLCBhcmUgYXMgZGVmaW5lZCBpbiBbMl0uICAKKworCisKK0hlcmxlaW4sIFZhbGluLCBldC4gYWwuICAgICBFeHBpcmVzIFNlcHRlbWJlciAzLCAyMDA0ICAgICAgICAgICAgW1BhZ2UgM10KK15MCitJbnRlcm5ldC1EcmFmdCAgICAgICBkcmFmdC1oZXJsZWluLWF2dC1ydHAtc3BlZXgtMDAudHh0ICAgIE1hcmNoIDMsIDIwMDQKKworCiszLjIgU3BlZXggcGF5bG9hZAorCisgICBGb3IgdGhlIHB1cnBvc2VzIG9mIHBhY2tldGl6aW5nIHRoZSBiaXQgc3RyZWFtIGluIFJUUCwgaXQgaXMgb25seQorICAgbmVjZXNzYXJ5IHRvIGNvbnNpZGVyIHRoZSBzZXF1ZW5jZSBvZiBiaXRzIGFzIG91dHB1dCBieSB0aGUgU3BlZXgKKyAgIGVuY29kZXIgWzExXSwgYW5kIHByZXNlbnQgdGhlIHNhbWUgc2VxdWVuY2UgdG8gdGhlIGRlY29kZXIuICBUaGUgCisgICBwYXlsb2FkIGZvcm1hdCBkZXNjcmliZWQgaGVyZSBtYWludGFpbnMgdGhpcyBzZXF1ZW5jZS4gIAorCisgICBBIHR5cGljYWwgU3BlZXggZnJhbWUsIGVuY29kZWQgYXQgdGhlIG1heGltdW0gYml0cmF0ZSwgaXMgYXBwcm94LgorICAgMTEwIG9jdGV0cyBhbmQgdGhlIHRvdGFsIG51bWJlciBvZiBTcGVleCBmcmFtZXMgU0hPVUxEIGJlIGtlcHQgCisgICBsZXNzIHRoYW4gdGhlIHBhdGggTVRVIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gIFNwZWV4IGZyYW1lcyBNVVNUCisgICBOT1QgYmUgZnJhZ21lbnRlZCBhY3Jvc3MgbXVsdGlwbGUgUlRQIHBhY2tldHMsCisKKyAgIEFuIFJUUCBwYWNrZXQgTUFZIGNvbnRhaW4gU3BlZXggZnJhbWVzIG9mIHRoZSBzYW1lIGJpdCByYXRlIG9yIG9mCisgICB2YXJ5aW5nIGJpdCByYXRlcywgc2luY2UgdGhlIGJpdC1yYXRlIGZvciBhIGZyYW1lIGlzIGNvbnZleWVkIGluCisgICBiYW5kIHdpdGggdGhlIHNpZ25hbC4KKworICAgVGhlIGVuY29kaW5nIGFuZCBkZWNvZGluZyBhbGdvcml0aG0gY2FuIGNoYW5nZSB0aGUgYml0IHJhdGUgYXQgYW55CisgICAyMCBtc2VjIGZyYW1lIGJvdW5kYXJ5LCB3aXRoIHRoZSBiaXQgcmF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uIHByb3ZpZGVkCisgICBpbi1iYW5kIHdpdGggdGhlIGJpdCBzdHJlYW0uICBFYWNoIGZyYW1lIGNvbnRhaW5zIGJvdGggIm1vZGUiIAorICAgKG5hcnJvd2JhbmQsIHdpZGViYW5kIG9yIHVsdHJhLXdpZGViYW5kKSBhbmQgInN1Yi1tb2RlIiAoYml0LXJhdGUpIAorICAgaW5mb3JtYXRpb24gaW4gdGhlIGJpdCBzdHJlYW0uICBObyBvdXQtb2YtYmFuZCBub3RpZmljYXRpb24gaXMgCisgICByZXF1aXJlZCBmb3IgdGhlIGRlY29kZXIgdG8gcHJvY2VzcyBjaGFuZ2VzIGluIHRoZSBiaXQgcmF0ZSBzZW50IAorICAgYnkgdGhlIGVuY29kZXIuCisKKyAgIEl0IGlzIFJFQ09NTUVOREVEIHRoYXQgdmFsdWVzIG9mIDgwMDAsIDE2MDAwIGFuZCAzMjAwMCBiZSB1c2VkIAorICAgZm9yIG5vcm1hbCBpbnRlcm5ldCB0ZWxlcGhvbnkgYXBwbGljYXRpb25zLCB0aG91Z2ggdGhlIHNhbXBsZSAKKyAgIHJhdGUgaXMgc3VwcG9ydGVkIGF0IHJhdGVzIGFzIGxvdyBhcyA2MDAwIEh6IGFuZCBhcyBoaWdoIGFzIAorICAgNDgga0h6LgorCisgICBUaGUgUlRQIHBheWxvYWQgTVVTVCBiZSBwYWRkZWQgdG8gcHJvdmlkZSBhbiBpbnRlZ2VyIG51bWJlciBvZgorICAgb2N0ZXRzIGFzIHRoZSBwYXlsb2FkIGxlbmd0aC4gIFRoZXNlIHBhZGRpbmcgYml0cyBhcmUgTFNCIGFsaWduZWQKKyAgIGluIG5ldHdvcmsgYnl0ZSBvcmRlciBhbmQgY29uc2lzdCBvZiBhIDAgZm9sbG93ZWQgYnkgYWxsIG9uZXMKKyAgICh1bnRpbCB0aGUgZW5kIG9mIHRoZSBvY3RldCkuICBUaGlzIHBhZGRpbmcgaXMgb25seSByZXF1aXJlZCBmb3IKKyAgIHRoZSBsYXN0IGZyYW1lIGluIHRoZSBwYWNrZXQsIGFuZCBvbmx5IHRvIGVuc3VyZSB0aGUgcGFja2V0CisgICBjb250ZW50cyBlbmRzIG9uIGFuIG9jdGV0IGJvdW5kYXJ5LgorCisKKzMuMi4xIEV4YW1wbGUgU3BlZXggcGFja2V0CisKKyAgIEluIHRoZSBleGFtcGxlIGJlbG93IHdlIGhhdmUgYSBzaW5nbGUgU3BlZXggZnJhbWUgd2l0aCA1IGJpdHMKKyAgIG9mIHBhZGRpbmcgdG8gZW5zdXJlIHRoZSBwYWNrZXQgc2l6ZSBmYWxscyBvbiBhbiBvY3RldCBib3VuZGFyeS4KKworICAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICB8Vj0yfFB8WHwgIENDICAgfE18ICAgICBQVCAgICAgIHwgICAgICAgc2VxdWVuY2UgbnVtYmVyICAgICAgICAgfAorICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgfCAgICAgICAgIHN5bmNocm9uaXphdGlvbiBzb3VyY2UgKFNTUkMpIGlkZW50aWZpZXIgICAgICAgICAgICAgIHwKKyAgICs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rCisKKworSGVybGVpbiwgVmFsaW4sIGV0LiBhbC4gICAgIEV4cGlyZXMgU2VwdGVtYmVyIDMsIDIwMDQgICAgICAgICAgICBbUGFnZSA0XQorXkwKK0ludGVybmV0LURyYWZ0ICAgICAgIGRyYWZ0LWhlcmxlaW4tYXZ0LXJ0cC1zcGVleC0wMC50eHQgICAgTWFyY2ggMywgMjAwNAorCisKKyAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisgICAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCisgICArPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9KworICAgfCAgICAgICAgIGNvbnRyaWJ1dGluZyBzb3VyY2UgKENTUkMpIGlkZW50aWZpZXJzICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAuLnNwZWV4IGRhdGEuLiAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgfCAgICAgICAgICAgICAgICAgICAgICAgIC4uc3BlZXggZGF0YS4uICAgICAgICAgICAgICAgfDAgMSAxIDEgMXwKKyAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKworMy40IE11bHRpcGxlIFNwZWV4IGZyYW1lcyBpbiBhIFJUUCBwYWNrZXQKKworICAgQmVsb3cgaXMgYW4gZXhhbXBsZSBvZiB0d28gU3BlZXggZnJhbWVzIGNvbnRhaW5lZCB3aXRoaW4gb25lIFJUUCAKKyAgIHBhY2tldC4gIFRoZSBTcGVleCBmcmFtZSBsZW5ndGggaW4gdGhpcyBleGFtcGxlIGZhbGwgb24gYW4gb2N0ZXQKKyAgIGJvdW5kYXJ5IHNvIHRoZXJlIGlzIG5vIHBhZGRpbmcuCisKKyAgIFNwZWV4IGNvZGVjcyBbMTFdIGFyZSBhYmxlIHRvIGRldGVjdCB0aGUgdGhlIGJpdHJhdGUgZnJvbSB0aGUKKyAgIHBheWxvYWQgYW5kIGFyZSByZXNwb25zaWJsZSBmb3IgZGV0ZWN0aW5nIHRoZSAyMCBtc2VjIGJvdW5kYXJpZXMKKyAgIGJldHdlZW4gZWFjaCBmcmFtZS4KKworICAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICB8Vj0yfFB8WHwgIENDICAgfE18ICAgICBQVCAgICAgIHwgICAgICAgc2VxdWVuY2UgbnVtYmVyICAgICAgICAgfAorICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgfCAgICAgICAgIHN5bmNocm9uaXphdGlvbiBzb3VyY2UgKFNTUkMpIGlkZW50aWZpZXIgICAgICAgICAgICAgIHwKKyAgICs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rCisgICB8ICAgICAgICAgY29udHJpYnV0aW5nIHNvdXJjZSAoQ1NSQykgaWRlbnRpZmllcnMgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgfCAgICAgICAgICAgICAgICAgICAgICAgIC4uc3BlZXggZGF0YS4uICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICB8ICAgICAgICAuLnNwZWV4IGRhdGEuLiAgICAgICAgIHwgICAgICAgIC4uc3BlZXggZGF0YS4uICAgICAgICAgfAorICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAuLnNwZWV4IGRhdGEuLiAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisKKzQuIE1JTUUgcmVnaXN0cmF0aW9uIG9mIFNwZWV4CisKKyAgIEZ1bGwgZGVmaW5pdGlvbiBvZiB0aGUgTUlNRSB0eXBlIGZvciBTcGVleCB3aWxsIGJlIHBhcnQgb2YgdGhlIE9nZworICAgVm9yYmlzIE1JTUUgdHlwZSBkZWZpbml0aW9uIGFwcGxpY2F0aW9uIFsxMF0uICAKKworICAgTUlNRSBtZWRpYSB0eXBlIG5hbWU6IGF1ZGlvCisKKyAgIE1JTUUgc3VidHlwZTogc3BlZXgKKworSGVybGVpbiwgVmFsaW4sIGV0LiBhbC4gICAgIEV4cGlyZXMgU2VwdGVtYmVyIDMsIDIwMDQgICAgICAgICAgICBbUGFnZSA1XQorXkwKK0ludGVybmV0LURyYWZ0ICAgICAgIGRyYWZ0LWhlcmxlaW4tYXZ0LXJ0cC1zcGVleC0wMC50eHQgICAgTWFyY2ggMywgMjAwNAorCisKKyAgIE9wdGlvbmFsIHBhcmFtZXRlcnM6CisKKyAgIFJlcXVpcmVkIHBhcmFtZXRlcnM6IHRvIGJlIGluY2x1ZGVkIGluIHRoZSBPZ2cgTUlNRSBzcGVjaWZpY2F0aW9uLgorCisgICBFbmNvZGluZyBjb25zaWRlcmF0aW9uczoKKworICAgU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnM6CisgICAgICAgICBTZWUgU2VjdGlvbiA2IG9mIFJGQyAzMDQ3LgorCisgICBJbnRlcm9wZXJhYmlsaXR5IGNvbnNpZGVyYXRpb25zOiBub25lCisKKyAgIFB1Ymxpc2hlZCBzcGVjaWZpY2F0aW9uOiAgCisKKyAgIEFwcGxpY2F0aW9ucyB3aGljaCB1c2UgdGhpcyBtZWRpYSB0eXBlOgorCisgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uOiBub25lCisKKyAgIFBlcnNvbiAmIGVtYWlsIGFkZHJlc3MgdG8gY29udGFjdCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbjoKKwkgR3JlZyBIZXJsZWluIDxnaGVybGVpbkBoZXJsZWluLmNvbT4KKwkgSmVhbi1NYXJjIFZhbGluIDxqZWFuLW1hcmMudmFsaW5AaGVybWVzLnVzaGVyYi5jYT4KKworICAgSW50ZW5kZWQgdXNhZ2U6IENPTU1PTgorCisgICBBdXRob3IvQ2hhbmdlIGNvbnRyb2xsZXI6CisgICAgICAgICBBdXRob3I6ICBHcmVnIEhlcmxlaW4gPGdoZXJsZWluQGhlcmxlaW4uY29tPgorICAgICAgICAgQ2hhbmdlIGNvbnRyb2xsZXI6IEdyZWcgSGVybGVpbiA8Z2hlcmxlaW5AaGVybGVpbi5jb20+CisKKyAgIFRoaXMgdHJhbnNwb3J0IHR5cGUgc2lnbmlmaWVzIHRoYXQgdGhlIGNvbnRlbnQgaXMgdG8gYmUgaW50ZXJwcmV0ZWQKKyAgIGFjY29yZGluZyB0byB0aGlzIGRvY3VtZW50IGlmIHRoZSBjb250ZW50cyBhcmUgdHJhbnNtaXR0ZWQgb3ZlciBSVFAuIAorICAgU2hvdWxkIHRoaXMgdHJhbnNwb3J0IHR5cGUgYXBwZWFyIG92ZXIgYSBsb3NzbGVzcyBzdHJlYW1pbmcgcHJvdG9jb2wKKyAgIHN1Y2ggYXMgVENQLCB0aGUgY29udGVudCBlbmNhcHN1bGF0aW9uIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhbiAKKyAgIE9nZyBTdHJlYW0gaW4gYWNjb3JkYW5jZSB3aXRoIFJGQyAzNTM0LCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUKKyAgIGNvbnRlbnQgb2YgdGhlIE9nZyBTdHJlYW0gbWF5IGJlIGFzc3VtZWQgdG8gYmUgU3BlZXggYXVkaW8gYW5kIAorICAgU3BlZXggYXVkaW8gb25seS4KKworCis1LiBTRFAgdXNhZ2Ugb2YgU3BlZXgKKworICAgV2hlbiBjb252ZXlpbmcgaW5mb3JtYXRpb24gYnkgU0RQIFs0XSwgdGhlIGVuY29kaW5nIG5hbWUgTVVTVCBiZQorICAgc2V0IHRvICJzcGVleCIuICBBbiBleGFtcGxlIG9mIHRoZSBtZWRpYSByZXByZXNlbnRhdGlvbiBpbiBTRFAgZm9yCisgICBvZmZlcmluZyBhIHNpbmdsZSBjaGFubmVsIG9mIFNwZWV4IGF0IDgwMDAgc2FtcGxlcyBwZXIgc2Vjb25kIG1pZ2h0CisgICBiZToKKworCW09YXVkaW8gODA4OCBSVFAvQVZQIDk3CisJYT1ydHBtYXA6OTcgc3BlZXgvODAwMAorCisgICBOb3RlIHRoYXQgdGhlIFJUUCBwYXlsb2FkIHR5cGUgY29kZSBvZiA5NyBpcyBkZWZpbmVkIGluIHRoaXMgbWVkaWEKKyAgIGRlZmluaXRpb24gdG8gYmUgJ21hcHBlZCcgdG8gdGhlIHNwZWV4IGNvZGVjIGF0IGFuIDhrSHogc2FtcGxpbmcKKyAgIGZyZXF1ZW5jeSB1c2luZyB0aGUgJ2E9cnRwbWFwJyBsaW5lLiAgQW55IG51bWJlciBmcm9tIDk2IHRvIDEyNworICAgY291bGQgaGF2ZSBiZWVuIGNob3NlbiAodGhlIGFsbG93ZWQgcmFuZ2UgZm9yIGR5bmFtaWMgdHlwZXMpLiAgCisKKworCitIZXJsZWluLCBWYWxpbiwgZXQuIGFsLiAgICAgRXhwaXJlcyBTZXB0ZW1iZXIgMywgMjAwNCAgICAgICAgICAgIFtQYWdlIDZdCiteTAorSW50ZXJuZXQtRHJhZnQgICAgICAgZHJhZnQtaGVybGVpbi1hdnQtcnRwLXNwZWV4LTAwLnR4dCAgICBNYXJjaCAzLCAyMDA0CisKKworICAgVGhlIHZhbHVlIG9mIHRoZSBzYW1wbGluZyBmcmVxdWVuY3kgaXMgdHlwaWNhbGx5IDgwMDAgZm9yIG5hcnJvdyBiYW5kCisgICBvcGVyYXRpb24sIDE2MDAwIGZvciB3aWRlIGJhbmQgb3BlcmF0aW9uLCBhbmQgMzIwMDAgZm9yIHVsdHJhLXdpZGUKKyAgIGJhbmQgb3BlcmF0aW9uLgorCisgICBJZiBmb3Igc29tZSByZWFzb24gdGhlIG9mZmVyZXIgaGFzIGJhbmR3aWR0aCBsaW1pdGF0aW9ucywgdGhlIGNsaWVudCAKKyAgIG1heSB1c2UgdGhlICJiPSIgaGVhZGVyLCBhcyBleHBsYWluZWQgaW4gU0RQIFs0XS4gVGhlIGZvbGxvd2luZyBleGFtcGxlCisgICBpbGx1c3RyYXRlcyB0aGUgY2FzZSB3aGVyZSB0aGUgb2ZmZXJlciBjYW5ub3QgcmVjZWl2ZSBtb3JlIHRoYW4KKyAgIDEwIGtiaXQvcy4KKworICAgCW09YXVkaW8gODA4OCBSVFAvQVZQIDk3CisJYj1BUzoxMAorCWE9cnRtYXA6OTcgc3BlZXgvODAwMAorCisgICBJbiB0aGlzIGNhc2UsIGlmIHRoZSByZW1vdGUgcGFydCBhZ3JlZXMsIGl0IHNob3VsZCBjb25maWd1cmUgaXRzCisgICBTcGVleCBlbmNvZGVyIHNvIHRoYXQgaXQgZG9lcyBub3QgdXNlIG1vZGVzIHRoYXQgcHJvZHVjZSBtb3JlIHRoYW4KKyAgIDEwIGtiaXQvcy4gTm90ZSB0aGF0IHRoZSAiYj0iIGNvbnN0cmFpbnQgYWxzbyBhcHBsaWVzIG9uIGFsbAorICAgcGF5bG9hZCB0eXBlcyB0aGF0IG1heSBiZSBwcm9wb3NlZCBpbiB0aGUgbWVkaWEgbGluZSAoIm09IikuCisKKyAgIEFuIG90aGVyIHdheSB0byBtYWtlIHJlY29tbWVuZGF0aW9ucyB0byB0aGUgcmVtb3RlIFNwZWV4IGVuY29kZXIKKyAgIGlzIHRvIHVzZSBpdHMgc3BlY2lmaWMgcGFyYW1ldGVycyB2aWEgdGhlIGE9Zm10cDogZGlyZWN0aXZlLiAgVGhlCisgICBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgZGVmaW5lZCBmb3IgdXNlIGluIHRoaXMgd2F5OgorCisgICAgICAgICBwdGltZTogZHVyYXRpb24gb2YgZWFjaCBwYWNrZXQgaW4gbWlsbGlzZWNvbmRzLgorCisJIHNyOiAgICBhY3R1YWwgc2FtcGxlIHJhdGUgaW4gSHouCisKKwkgZWJ3OiAgIGVuY29kaW5nIGJhbmR3aWR0aCAtIGVpdGhlciAnbmFycm93JyBvciAnd2lkZScgb3IgCisgICAgICAgICAgICAgICAgJ3VsdHJhJyAoY29ycmVzcG9uZHMgdG8gbm9taW5hbCA4MDAwLCAxNjAwMCwgYW5kCisJCTMyMDAwIEh6IHNhbXBsaW5nIHJhdGVzKS4KKworCSB2YnI6ICAgdmFyaWFibGUgYml0IHJhdGUgIC0gZWl0aGVyICdvbicgJ29mZicgb3IgJ3ZhZCcKKwkJKGRlZmF1bHRzIHRvIG9mZikuICBJZiBvbiwgdmFyaWFibGUgYml0IHJhdGUgaXMKKwkJZW5hYmxlZC4gIElmIG9mZiwgZGlzYWJsZWQuICBJZiBzZXQgdG8gJ3ZhZCcgdGhlbgorCQljb25zdGFudCBiaXQgcmF0ZSBpcyB1c2VkIGJ1dCBzaWxlbmNlIHdpbGwgYmUgZW5jb2RlZAorCQl3aXRoIHNwZWNpYWwgc2hvcnQgZnJhbWVzIHRvIGluZGljYXRlIGEgbGFjayBvZiB2b2ljZQorCQlmb3IgdGhhdCBwZXJpb2QuCisKKwkgY25nOiAgIGNvbWZvcnQgbm9pc2UgZ2VuZXJhdGlvbiAtIGVpdGhlciAnb24nIG9yICdvZmYnLiBJZgorCQlvZmYgdGhlbiBzaWxlbmNlIGZyYW1lcyB3aWxsIGJlIHNpbGVudDsgaWYgJ29uJyB0aGVuCisJCXRob3NlIGZyYW1lcyB3aWxsIGJlIGZpbGxlZCB3aXRoIGNvbWZvcnQgbm9pc2UuCisKKwkgbW9kZTogIFNwZWV4IGVuY29kaW5nIG1vZGUuIENhbiBiZSB7MSwyLDMsNCw1LDYsYW55fQorICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIDMgaW4gbmFycm93YmFuZCwgNiBpbiB3aWRlIGFuZCB1bHRyYS13aWRlLgorCisJIHBlbmg6CXVzZSBvZiBwZXJjZXB0dWFsIGVuaGFuY2VtZW50LiAxIGluZGljYXRlcyAKKwkgCXRvIHRoZSBkZWNvZGVyIHRoYXQgcGVyY2VwdHVhbCBlbmhhbmNlbWVudCBpcyByZWNvbW1lbmRlZCwKKwkJMCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBub3QuIERlZmF1bHRzIHRvIG9uICgxKS4KKworCisKKworCisKK0hlcmxlaW4sIFZhbGluLCBldC4gYWwuICAgICBFeHBpcmVzIFNlcHRlbWJlciAzLCAyMDA0ICAgICAgICAgICAgW1BhZ2UgN10KK15MCitJbnRlcm5ldC1EcmFmdCAgICAgICBkcmFmdC1oZXJsZWluLWF2dC1ydHAtc3BlZXgtMDAudHh0ICAgIE1hcmNoIDMsIDIwMDQKKworCisgICBFeGFtcGxlczoKKworICAgCW09YXVkaW8gODAwOCBSVFAvQVZQIDk3CisJYT1ydHBtYXA6OTcgc3BlZXgvODAwMAorCWE9Zm10cDo5NyBtb2RlPTQKKworICAgVGhpcyBleGFtcGxlcyBpbGx1c3RyYXRlIGFuIG9mZmVyZXIgdGhhdCB3aXNoZXMgdG8gcmVjZWl2ZQorICAgYSBTcGVleCBzdHJlYW0gYXQgODAwMEh6LCBidXQgb25seSB1c2luZyBzcGVleCBtb2RlIDMuCisgCisgICBUaGUgb2ZmZXJlciBtYXkgc3VnZ2VzdCB0byB0aGUgcmVtb3RlIGRlY29kZXIgdG8gYWN0aXZhdGUKKyAgIGl0cyBwZXJjZXB0dWFsIGVuaGFuY2VtZW50IGZpbHRlciBsaWtlIHRoaXM6CisgICAKKwltPWF1ZGlvIDgwODggUlRQL0FWUCA5NworCWE9cnRtYXA6OTcgc3BlZXgvODAwMAorCWE9Zm10cDo5NyBwZW5oPTEgCisJCisgICBTZXZlcmFsIFNwZWV4IHNwZWNpZmljIHBhcmFtZXRlcnMgY2FuIGJlIGdpdmVuIGluIGEgc2luZ2xlCisgICBhPWZtdHAgbGluZSBwcm92aWRlZCB0aGF0IHRoZXkgYXJlIHNlcGFyYXRlZCBieSBhIHNlbWktY29sb246CisgICAKKyAgIAlhPWZtdHA6OTcgbW9kZT1hbnk7cGVuaD0xCisKKyAgIFRoZSBvZmZlcmVyIG1heSBpbmRpY2F0ZSB0aGF0IGl0IHdpc2hlcyB0byBzZW5kIHZhcmlhYmxlIGJpdCByYXRlCisgICBmcmFtZXMgd2l0aCBjb21mb3J0IG5vaXNlOgorCisJbT1hdWRpbyA4MDg4IFJUUC9BVlAgOTcKKwlhPXJ0bWFwOjk3IHNwZWV4LzgwMDAKKwlhPWZtdHA6OTcgdmJyPW9uO2NuZz1vbgorCisgICBUaGUgInB0aW1lIiBhdHRyaWJ1dGUgaXMgdXNlZCB0byBkZW5vdGUgdGhlIHBhY2tldGl6YXRpb24gCisgICBpbnRlcnZhbCAoaWUsIGhvdyBtYW55IG1pbGxpc2Vjb25kcyBvZiBhdWRpbyBpcyBlbmNvZGVkIGluIGEgCisgICBzaW5nbGUgUlRQIHBhY2tldCkuICBTaW5jZSBTcGVleCB1c2VzIDIwIG1zZWMgZnJhbWVzLCBwdGltZSB2YWx1ZXMgCisgICBvZiBtdWx0aXBsZXMgb2YgMjAgZGVub3RlIG11bHRpcGxlIFNwZWV4IGZyYW1lcyBwZXIgcGFja2V0LiAgCisgICBWYWx1ZXMgb2YgcHRpbWUgd2hpY2ggYXJlIG5vdCBtdWx0aXBsZXMgb2YgMjAgTVVTVCBiZSBpZ25vcmVkIAorICAgYW5kIGNsaWVudHMgTVVTVCB1c2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgMjAgaW5zdGVhZC4KKyAgIAorICAgSW4gdGhlIGV4YW1wbGUgYmVsb3cgdGhlIHB0aW1lIHZhbHVlIGlzIHNldCB0byA0MCwgaW5kaWNhdGluZyB0aGF0IAorICAgdGhlcmUgYXJlIDIgZnJhbWVzIGluIGVhY2ggcGFja2V0LgkKKyAgIAorICAgCW09YXVkaW8gODAwOCBSVFAvQVZQIDk3CisJYT1ydHBtYXA6OTcgc3BlZXgvODAwMAorCWE9cHRpbWU6NDAKKwkKKyAgIE5vdGUgdGhhdCB0aGUgcHRpbWUgcGFyYW1ldGVyIGFwcGxpZXMgdG8gYWxsIHBheWxvYWRzIGxpc3RlZAorICAgaW4gdGhlIG1lZGlhIGxpbmUgYW5kIGlzIG5vdCB1c2VkIGFzIHBhcnQgb2YgYW4gYT1mbXRwIGRpcmVjdGl2ZS4KKworICAgVmFsdWVzIG9mIHB0aW1lIG5vdCBtdWx0aXBsZSBvZiAyMCBtc2VjIGFyZSBtZWFuaW5nbGVzcywgc28gdGhlIAorICAgcmVjZWl2ZXIgb2Ygc3VjaCBwdGltZSB2YWx1ZXMgTVVTVCBpZ25vcmUgdGhlbS4gIElmIGR1cmluZyB0aGUgCisgICBsaWZlIG9mIGFuIFJUUCBzZXNzaW9uIHRoZSBwdGltZSB2YWx1ZSBjaGFuZ2VzLCB3aGVuIHRoZXJlIGFyZSAKKyAgIG11bHRpcGxlIFNwZWV4IGZyYW1lcyBmb3IgZXhhbXBsZSwgdGhlIFNEUCB2YWx1ZSBtdXN0IGFsc28gcmVmbGVjdCAKKyAgIHRoZSBuZXcgdmFsdWUuIAorCisKKworSGVybGVpbiwgVmFsaW4sIGV0LiBhbC4gICAgIEV4cGlyZXMgU2VwdGVtYmVyIDMsIDIwMDQgICAgICAgICAgICBbUGFnZSA4XQorXkwKK0ludGVybmV0LURyYWZ0ICAgICAgIGRyYWZ0LWhlcmxlaW4tYXZ0LXJ0cC1zcGVleC0wMC50eHQgICAgTWFyY2ggMywgMjAwNAorCisKKyAgIENhcmUgbXVzdCBiZSB0YWtlbiB3aGVuIHNldHRpbmcgdGhlIHZhbHVlIG9mIHB0aW1lIHNvIHRoYXQgdGhlIAorICAgUlRQIHBhY2tldCBzaXplIGRvZXMgbm90IGV4Y2VlZCB0aGUgcGF0aCBNVFUuIAorCisKKzYuIElUVSBILjMyMy9ILjI0NSBVc2Ugb2YgU3BlZXgKKworICAgQXBwbGljYXRpb24gaXMgdW5kZXJ3YXkgdG8gbWFrZSBTcGVleCBhIHN0YW5kYXJkIElUVSBjb2RlYy4KKyAgIEhvd2V2ZXIsIHVudGlsIHRoYXQgaXMgZmluYWxpemVkLCBTcGVleCBNQVkgYmUgdXNlZCBpbiBILjMyMyBbNl0gYnkKKyAgIHVzaW5nIGEgbm9uLXN0YW5kYXJkIGNvZGVjIGJsb2NrIGRlZmluaXRpb24gaW4gdGhlIEguMjQ1IFs3XSBjb2RlYworICAgY2FwYWJpbGl0eSBuZWdvdGlhdGlvbnMuICAKKworCis2LjEgTm9uU3RhbmRhcmRNZXNzYWdlIGZvcm1hdAorCisgICBGb3IgU3BlZXggdXNlIGluIEguMjQ1IFs3XSBiYXNlZCBzeXN0ZW1zLCB0aGUgZmllbGRzIGluIHRoZQorICAgTm9uU3RhbmRhcmRNZXNzYWdlIHNob3VsZCBiZToKKworICAgdDM1Q291bnRyeUNvZGUgICA9IEhleDogQjUKKyAgIHQzNUV4dGVuc2lvbiAgICAgPSBIZXg6IDAwCisgICBtYW51ZmFjdHVyZXJDb2RlID0gSGV4OiAwMDI2CisgICBbTGVuZ3RoIG9mIHRoZSBCaW5hcnkgU2VxdWVuY2UgKDggYml0IG51bWJlcildCisgICBbQmluYXJ5IFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgYW4gQVNDSUkgc3RyaW5nLCBubyBOVUxMIHRlcm1pbmF0b3JdCisKKyAgIFRoZSBiaW5hcnkgc2VxdWVuY2UgaXMgYW4gYXNjaWkgc3RyaW5nIG1lcmVseSBmb3IgZWFzZSBvZiB1c2UuCisgICBUaGUgc3RyaW5nIGlzIG5vdCBudWxsIHRlcm1pbmF0ZWQuICBUaGUgZm9ybWF0IG9mIHRoaXMgc3RyaW5nIGlzCisKKyAgICAgICBzcGVleCBbb3B0aW9uYWwgdmFyaWFibGVzXQorICAgCisgICBUaGUgb3B0aW9uYWwgdmFyaWFibGVzIGFyZSBpZGVudGljYWwgdG8gdGhvc2UgdXNlZCBmb3IgdGhlIFNEUAorICAgYT1mbXRwIHN0cmluZ3MgZGlzY3Vzc2VkIGluIHNlY3Rpb24gNSBhYm92ZS4gIFRoZSBzdHJpbmcgaXMgYnVpbHQKKyAgIHRvIGJlIGFsbCBvbiBvbmUgbGluZSwgZWFjaCBrZXktdmFsdWUgcGFpciBzZXBhcmF0ZWQgYnkgYQorICAgc2VtaS1jb2xvbi4gIFRoZSBvcHRpb25hbCB2YXJpYWJsZXMgTUFZIGJlIG9taXR0ZWQsIHdoaWNoIGNhdXNlcworICAgdGhlIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGFzc3VtZWQuICBUaGV5IGFyZToKKworICAgICAgIGVidz1uYXJyb3c7bW9kZT0zO3Zicj1vZmY7Y25nPW9mZjtwdGltZT0yMDtzcj04MDAwO3Blbmg9bm87CisKKyAgIFRoZSBmaWZ0aCBieXRlIG9mIHRoZSBibG9jayBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBiaW5hcnkgc2VxdWVuY2UuCisKKyAgIE5PVEU6ICB0aGlzIG1ldGhvZCBjYW4gcmVzdWx0IGluIHRoZSBhZHZlcnRpc2luZyBvZiBhIGxhcmdlIG51bWJlcgorICAgb2YgU3BlZXggJ2NvZGVjcycgYmFzZWQgb24gdGhlIG51bWJlciBvZiB2YXJpYWJsZXMgcG9zc2libGUuICBGb3IKKyAgIG1vc3QgVm9JUCBhcHBsaWNhdGlvbnMsIHVzZSBvZiB0aGUgZGVmYXVsdCBiaW5hcnkgc2VxdWVuY2Ugb2YKKyAgICdzcGVleCcgaXMgUkVDT01NRU5ERUQgdG8gYmUgdXNlZCBpbiBhZGRpdGlvbiB0byBhbGwgb3RoZXIgb3B0aW9ucy4KKyAgIFRoaXMgbWF4aW1pemVzIHRoZSBjaGFuY2VzIHRoYXQgdHdvIEguMzIzIGJhc2VkIGFwcGxpY2F0aW9ucyB0aGF0CisgICBzdXBwb3J0IFNwZWV4IGNhbiBmaW5kIGEgbXV0dWFsIGNvZGVjLiAgIAorCisKKzYuMiBSVFAgUGF5bG9hZCBUeXBlcworCisgICBEeW5hbWljIHBheWxvYWQgdHlwZSBjb2RlcyBNVVNUIGJlIG5lZ290aWF0ZWQgJ291dC1vZi1iYW5kJworICAgZm9yIHRoZSBhc3NpZ25tZW50IG9mIGEgZHluYW1pYyBwYXlsb2FkIHR5cGUgZnJvbSB0aGUKKyAgIHJhbmdlIG9mIDk2LTEyNy4gIEguMzIzIGFwcGxpY2F0aW9ucyBNVVNUIHVzZSB0aGUgSC4yNDUKKyAgIEgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzIGVuY29kaW5nIHRvIGFjY29tcGxpc2ggdGhpcy4gIAorCitIZXJsZWluLCBWYWxpbiwgZXQuIGFsLiAgICAgRXhwaXJlcyBTZXB0ZW1iZXIgMywgMjAwNCAgICAgICAgICAgIFtQYWdlIDldCiteTAorSW50ZXJuZXQtRHJhZnQgICAgICAgZHJhZnQtaGVybGVpbi1hdnQtcnRwLXNwZWV4LTAwLnR4dCAgICBNYXJjaCAzLCAyMDA0CisKKworNy4gU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMKKworICAgUlRQIHBhY2tldHMgdXNpbmcgdGhlIHBheWxvYWQgZm9ybWF0IGRlZmluZWQgaW4gdGhpcyBzcGVjaWZpY2F0aW9uCisgICBhcmUgc3ViamVjdCB0byB0aGUgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgZGlzY3Vzc2VkIGluIHRoZSBSVFAKKyAgIHNwZWNpZmljYXRpb24gWzJdLCBhbmQgYW55IGFwcHJvcHJpYXRlIFJUUCBwcm9maWxlLiAgVGhpcyBpbXBsaWVzCisgICB0aGF0IGNvbmZpZGVudGlhbGl0eSBvZiB0aGUgbWVkaWEgc3RyZWFtcyBpcyBhY2hpZXZlZCBieSBlbmNyeXB0aW9uLgorICAgQmVjYXVzZSB0aGUgZGF0YSBjb21wcmVzc2lvbiB1c2VkIHdpdGggdGhpcyBwYXlsb2FkIGZvcm1hdCBpcyBhcHBsaWVkCisgICBlbmQtdG8tZW5kLCBlbmNyeXB0aW9uIG1heSBiZSBwZXJmb3JtZWQgYWZ0ZXIgY29tcHJlc3Npb24gc28gdGhlcmUgaXMKKyAgIG5vIGNvbmZsaWN0IGJldHdlZW4gdGhlIHR3byBvcGVyYXRpb25zLgorCisgICBBIHBvdGVudGlhbCBkZW5pYWwtb2Ytc2VydmljZSB0aHJlYXQgZXhpc3RzIGZvciBkYXRhIGVuY29kaW5ncyB1c2luZworICAgY29tcHJlc3Npb24gdGVjaG5pcXVlcyB0aGF0IGhhdmUgbm9uLXVuaWZvcm0gcmVjZWl2ZXItZW5kCisgICBjb21wdXRhdGlvbmFsIGxvYWQuICBUaGUgYXR0YWNrZXIgY2FuIGluamVjdCBwYXRob2xvZ2ljYWwgZGF0YWdyYW1zCisgICBpbnRvIHRoZSBzdHJlYW0gd2hpY2ggYXJlIGNvbXBsZXggdG8gZGVjb2RlIGFuZCBjYXVzZSB0aGUgcmVjZWl2ZXIgdG8KKyAgIGJlIG92ZXJsb2FkZWQuICBIb3dldmVyLCB0aGlzIGVuY29kaW5nIGRvZXMgbm90IGV4aGliaXQgYW55CisgICBzaWduaWZpY2FudCBub24tdW5pZm9ybWl0eS4KKworICAgQXMgd2l0aCBhbnkgSVAtYmFzZWQgcHJvdG9jb2wsIGluIHNvbWUgY2lyY3Vtc3RhbmNlcyBhIHJlY2VpdmVyIG1heQorICAgYmUgb3ZlcmxvYWRlZCBzaW1wbHkgYnkgdGhlIHJlY2VpcHQgb2YgdG9vIG1hbnkgcGFja2V0cywgZWl0aGVyCisgICBkZXNpcmVkIG9yIHVuZGVzaXJlZC4gIE5ldHdvcmstbGF5ZXIgYXV0aGVudGljYXRpb24gbWF5IGJlIHVzZWQgdG8KKyAgIGRpc2NhcmQgcGFja2V0cyBmcm9tIHVuZGVzaXJlZCBzb3VyY2VzLCBidXQgdGhlIHByb2Nlc3NpbmcgY29zdCBvZgorICAgdGhlIGF1dGhlbnRpY2F0aW9uIGl0c2VsZiBtYXkgYmUgdG9vIGhpZ2guICAKKworCis4LiBOb3JtYXRpdmUgUmVmZXJlbmNlcworCisgICAxLiAgQnJhZG5lciwgUy4sICJUaGUgSW50ZXJuZXQgU3RhbmRhcmRzIFByb2Nlc3MgLS0gUmV2aXNpb24gMyIsIEJDUAorICAgICAgIDksIFJGQyAyMDI2LCBPY3RvYmVyIDE5OTYuCisKKyAgIDIuICBTY2h1bHpyaW5uZSwgSC4sIENhc25lciwgUy4sIEZyZWRlcmljaywgUi4gYW5kIFYuIEphY29ic29uLCAiUlRQOgorICAgICAgIEEgVHJhbnNwb3J0IFByb3RvY29sIGZvciByZWFsLXRpbWUgYXBwbGljYXRpb25zIiwgUkZDIDE4ODksCisgICAgICAgSmFudWFyeSAxOTk2LgorCisgICAzLiAgRnJlZWQsIE4uIGFuZCBOLiBCb3JlbnN0ZWluLCAiTXVsdGlwdXJwb3NlIEludGVybmV0IE1haWwKKyAgICAgICBFeHRlbnNpb25zIChNSU1FKSBQYXJ0IE9uZTogRm9ybWF0IG9mIEludGVybmV0IE1lc3NhZ2UgQm9kaWVzIiwKKyAgICAgICBSRkMgMjA0NSwgTm92ZW1iZXIgMTk5Ni4KKworICAgNC4gIEhhbmRsZXksIE0uIGFuZCBWLiBKYWNvYnNvbiwgIlNEUDogU2Vzc2lvbiBEZXNjcmlwdGlvbiAKKyAgICAgICBQcm90b2NvbCIsIFJGQyAyMzI3LCBBcHJpbCAxOTk4LgorCisgICA1LiAgQnJhZG5lciwgUy4sICJLZXkgd29yZHMgZm9yIHVzZSBpbiBSRkNzIHRvIEluZGljYXRlIFJlcXVpcmVtZW50CisgICAgICAgTGV2ZWxzIiwgQkNQIDE0LCBSRkMgMjExOSwgTWFyY2ggMTk5Ny4KKworICAgNi4gIElUVS1UIFJlY29tbWVuZGF0aW9uIEguMzIzLiAgIlBhY2tldC1iYXNlZCBNdWx0aW1lZGlhIAorICAgICAgIENvbW11bmljYXRpb25zIFN5c3RlbXMsIiAxOTk4LgorCisgICA3LiAgSVRVLVQgUmVjb21tZW5kYXRpb24gSC4yNDUgKDE5OTgpLCAiQ29udHJvbCBvZiBjb21tdW5pY2F0aW9ucworICAgICAgIGJldHdlZW4gVmlzdWFsIFRlbGVwaG9uZSBTeXN0ZW1zIGFuZCBUZXJtaW5hbCBFcXVpcG1lbnQiLgorCisgICA4LiAgUlRQOiBBIHRyYW5zcG9ydCBwcm90b2NvbCBmb3IgcmVhbC10aW1lIGFwcGxpY2F0aW9ucy4gV29yayAgIAorICAgICAgIGluIHByb2dyZXNzLCBkcmFmdC1pZXRmLWF2dC1ydHAtbmV3LTEyLnR4dC4KKworSGVybGVpbiwgVmFsaW4sIGV0LiBhbC4gICBFeHBpcmVzIFNlcHRlbWJlciAzLCAyMDA0ICAgICAgICAgICAgIFtQYWdlIDEwXQorXkwKK0ludGVybmV0LURyYWZ0ICAgICAgIGRyYWZ0LWhlcmxlaW4tYXZ0LXJ0cC1zcGVleC0wMC50eHQgICAgTWFyY2ggMywgMjAwNAorCisKKyAgIDkuICBSVFAgUHJvZmlsZSBmb3IgQXVkaW8gYW5kIFZpZGVvIENvbmZlcmVuY2VzIHdpdGggTWluaW1hbCAgCisgICAgICAgQ29udHJvbC4gIFdvcmsgaW4gcHJvZ3Jlc3MsIGRyYWZ0LWlldGYtYXZ0LXByb2ZpbGUtbmV3LTEzLnR4dC4KKworICAgMTAuIEwuIFdhbGxlaWosICJUaGUgYXBwbGljYXRpb24vb2dnIE1lZGlhIFR5cGUiLCBSRkMgMzUzNCwgTWF5IAorICAgICAgIDIwMDMuCisKKworOC4xIEluZm9ybWF0aXZlIFJlZmVyZW5jZXMKKworICAgMTEuIFNwZWV4ZW5jL3NwZWV4ZGVjLCByZWZlcmVuY2UgY29tbWFuZC1saW5lIGVuY29kZXIvZGVjb2RlciwgCisgICAgICAgU3BlZXggd2Vic2l0ZSwgaHR0cDovL3d3dy5zcGVleC5vcmcvCisgCisgICAxMi4gQ0VMUCwgVS5TLiBGZWRlcmFsIFN0YW5kYXJkIDEwMTYuICBOYXRpb25hbCBUZWNobmljYWwgCisgICAgICAgSW5mb3JtYXRpb24gU2VydmljZSAoTlRJUykgd2Vic2l0ZSwgaHR0cDovL3d3dy5udGlzLmdvdi8gCisKKworOS4gQWNrbm93bGVkZ21lbnRzCisKKyAgIFRoZSBhdXRob3JzIHdvdWxkIGxpa2UgdG8gdGhhbmsgRXF1aXZhbGVuY2UgUHR5IEx0ZCBvZiBBdXN0cmFsaWEKKyAgIGZvciB0aGVpciBhc3Npc3RhbmNlIGluIGF0dGVtcHRpbmcgdG8gc3RhbmRhcmRpemUgdGhlIHVzZSBvZiBTcGVleAorICAgaW4gSC4zMjMgYXBwbGljYXRpb25zLCBhbmQgZm9yIGltcGxlbWVudGluZyBTcGVleCBpbiB0aGVpciBvcGVuCisgICBzb3VyY2UgT3BlbkgzMjMgc3RhY2suICBUaGUgYXV0aG9ycyB3b3VsZCBhbHNvIGxpa2UgdG8gdGhhbmsgQnJpYW4KKyAgIEMuIFdpbGVzIDxicmlhbkBzdHJlYW1jb21tLmNvbT4gb2YgU3RyZWFtQ29tbSBmb3IgaGlzIGFzc2lzdGFuY2UgaW4KKyAgIGRldmVsb3BpbmcgdGhlIHByb3Bvc2VkIHN0YW5kYXJkIGZvciBTcGVleCB1c2UgaW4gSC4zMjMKKyAgIGFwcGxpY2F0aW9ucy4KKworICAgVGhlIGF1dGhvcnMgd291bGQgYWxzbyBsaWtlIHRvIHRoYW5rIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBvZiB0aGUgCisgICBTcGVleCBhbmQgQVZUIGNvbW11bml0aWVzIGZvciB0aGVpciBpbnB1dDogIFJvc3MgRmlubGF5c29uLCAKKyAgIEZlZGVyaWNvIE1vbnRlc2lubyBQb3V6b2xzLCBIZW5uaW5nIFNjaHVsenJpbm5lLCBNYWdudXMgV2VzdGVybHVuZC4KKworCisxMC4gQXV0aG9yJ3MgQWRkcmVzcworCisgICBHcmVnIEhlcmxlaW4gPGdoZXJsZWluQGhlcmxlaW4uY29tPgorICAgMjAzNCBGaWxiZXJ0IFN0cmVldAorICAgU2FuIEZyYW5jaXNjbywgQ0EgCisgICBVbml0ZWQgU3RhdGVzIDk0MTIzCisgICAKKworICAgSmVhbi1NYXJjIFZhbGluIDxqZWFuLW1hcmMudmFsaW5AaGVybWVzLnVzaGVyYi5jYT4KKyAgIERlcGFydG1lbnQgb2YgRWxlY3RyaWNhbCBhbmQgQ29tcHV0ZXIgRW5naW5lZXJpbmcKKyAgIFVuaXZlcnNpdHkgb2YgU2hlcmJyb29rZQorICAgMjUwMCBibHZkIFVuaXZlcnNpdPzD/K38w+kKKyAgIFNoZXJicm9va2UsIFF1ZWJlYywgQ2FuYWRhLCBKMUsgMlIxCisKKworICAgU2ltb24gTU9STEFUIDxzaW1vbi5tb3JsYXRAbGlucGhvbmUub3JnPgorICAgMzUsIGF2IGRlIFZpemlsbGUgQXBwIDQyCisgICAzODAwMCBHUkVOT0JMRQorICAgRlJBTkNFCisKKworCisKK0hlcmxlaW4sIFZhbGluLCBldC4gYWwuICAgRXhwaXJlcyBTZXB0ZW1iZXIgMywgMjAwNCAgICAgICAgICAgICBbUGFnZSAxMV0KK15MCitJbnRlcm5ldC1EcmFmdCAgICAgICBkcmFmdC1oZXJsZWluLWF2dC1ydHAtc3BlZXgtMDAudHh0ICAgIE1hcmNoIDMsIDIwMDQKKworCisgICBSb2dlciBIYXJkaW1hbiA8cm9nZXJAZnJlZWJzZC5vcmc+CisgICA0OSBOZXR0bGV0b24gUm9hZAorICAgQ2hlbHRlbmhhbQorICAgR2xvdWNlc3RlcnNoaXJlCisgICBHTDUxIDZOUgorICAgRW5nbGFuZAorCisKKyAgIFBoaWwgS2VyciA8cGhpbGtlcnJAZWxlYy5nbGEuYWMudWs+CisgICBDZW50cmUgZm9yIE11c2ljIFRlY2hub2xvZ3kKKyAgIFVuaXZlcnNpdHkgb2YgR2xhc2dvdworICAgR2xhc2dvdworICAgRzEyIDhMVAorICAgU2NvdGxhbmQKKworCisxMC4gRnVsbCBDb3B5cmlnaHQgU3RhdGVtZW50CisKKyAgIENvcHlyaWdodCAoQykgVGhlIEludGVybmV0IFNvY2lldHkgKDIwMDMpLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhpcyBkb2N1bWVudCBhbmQgdHJhbnNsYXRpb25zIG9mIGl0IG1heSBiZSBjb3BpZWQgYW5kIGZ1cm5pc2hlZCB0bworICAgb3RoZXJzLCBhbmQgZGVyaXZhdGl2ZSB3b3JrcyB0aGF0IGNvbW1lbnQgb24gb3Igb3RoZXJ3aXNlIGV4cGxhaW4gaXQKKyAgIG9yIGFzc2lzdCBpbiBpdHMgaW1wbGVtZW50YXRpb24gbWF5IGJlIHByZXBhcmVkLCBjb3BpZWQsIHB1Ymxpc2hlZAorICAgYW5kIGRpc3RyaWJ1dGVkLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCB3aXRob3V0IHJlc3RyaWN0aW9uIG9mIGFueQorICAga2luZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXJlCisgICBpbmNsdWRlZCBvbiBhbGwgc3VjaCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MuICBIb3dldmVyLCB0aGlzCisgICBkb2N1bWVudCBpdHNlbGYgbWF5IG5vdCBiZSBtb2RpZmllZCBpbiBhbnkgd2F5LCBzdWNoIGFzIGJ5IHJlbW92aW5nCisgICB0aGUgY29weXJpZ2h0IG5vdGljZSBvciByZWZlcmVuY2VzIHRvIHRoZSBJbnRlcm5ldCBTb2NpZXR5IG9yIG90aGVyCisgICBJbnRlcm5ldCBvcmdhbml6YXRpb25zLCBleGNlcHQgYXMgbmVlZGVkIGZvciB0aGUgcHVycG9zZSBvZgorICAgZGV2ZWxvcGluZyBJbnRlcm5ldCBzdGFuZGFyZHMgaW4gd2hpY2ggY2FzZSB0aGUgcHJvY2VkdXJlcyBmb3IKKyAgIGNvcHlyaWdodHMgZGVmaW5lZCBpbiB0aGUgSW50ZXJuZXQgU3RhbmRhcmRzIHByb2Nlc3MgbXVzdCBiZQorICAgZm9sbG93ZWQsIG9yIGFzIHJlcXVpcmVkIHRvIHRyYW5zbGF0ZSBpdCBpbnRvIGxhbmd1YWdlcyBvdGhlciB0aGFuCisgICBFbmdsaXNoLgorCisgICBUaGUgbGltaXRlZCBwZXJtaXNzaW9ucyBncmFudGVkIGFib3ZlIGFyZSBwZXJwZXR1YWwgYW5kIHdpbGwgbm90IGJlCisgICByZXZva2VkIGJ5IHRoZSBJbnRlcm5ldCBTb2NpZXR5IG9yIGl0cyBzdWNjZXNzb3JzIG9yIGFzc2lnbnMuCisKKyAgIFRoaXMgZG9jdW1lbnQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzIHByb3ZpZGVkIG9uIGFuCisgICAiQVMgSVMiIGJhc2lzIGFuZCBUSEUgSU5URVJORVQgU09DSUVUWSBBTkQgVEhFIElOVEVSTkVUIEVOR0lORUVSSU5HCisgICBUQVNLIEZPUkNFIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcKKyAgIEJVVCBOT1QgTElNSVRFRCBUTyBBTlkgV0FSUkFOVFkgVEhBVCBUSEUgVVNFIE9GIFRIRSBJTkZPUk1BVElPTgorICAgSEVSRUlOIFdJTEwgTk9UIElORlJJTkdFIEFOWSBSSUdIVFMgT1IgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisKK0Fja25vd2xlZGdlbWVudAorCisgICBGdW5kaW5nIGZvciB0aGUgUkZDIEVkaXRvciBmdW5jdGlvbiBpcyBjdXJyZW50bHkgcHJvdmlkZWQgYnkgdGhlCisgICBJbnRlcm5ldCBTb2NpZXR5LgorCisKKworCitIZXJsZWluLCBWYWxpbiwgZXQuIGFsLiAgIEV4cGlyZXMgU2VwdGVtYmVyIDMsIDIwMDQgICAgICAgICAgICAgW1BhZ2UgMTJdCiteTAorCisKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2RvYy9kcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAyLnR4dCBiLzNyZHBhcnR5L3NwZWV4L2RvYy9kcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjI1ZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvZG9jL2RyYWZ0LWhlcmxlaW4tc3BlZXgtcnRwLXByb2ZpbGUtMDIudHh0CkBAIC0wLDAgKzEsODQxIEBACisKKworQVZUIFdvcmtpbmcgR3JvdXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHLiBIZXJsZWluCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTLiBNb3JsYXQKK0V4cGlyZXM6IE9jdG9iZXIgMywgMjAwNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEouIEplYW4tTWFyYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIuIEhhcmRpbWFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAuIEtlcnIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHJpbCAwNCwgMjAwNQorCisKKyAgICAgICAgICAgICAgICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAyCisgICAgICAgICAgICAgICAgIFJUUCBQYXlsb2FkIEZvcm1hdCBmb3IgdGhlIFNwZWV4IENvZGVjCisKK1N0YXR1cyBvZiB0aGlzIE1lbW8KKworICAgVGhpcyBkb2N1bWVudCBpcyBhbiBJbnRlcm5ldC1EcmFmdCBhbmQgaXMgc3ViamVjdCB0byBhbGwgcHJvdmlzaW9ucworICAgb2Ygc2VjdGlvbiAzIG9mIFJGQyAzNjY3LiAgQnkgc3VibWl0dGluZyB0aGlzIEludGVybmV0LURyYWZ0LCBlYWNoCisgICBhdXRob3IgcmVwcmVzZW50cyB0aGF0IGFueSBhcHBsaWNhYmxlIHBhdGVudCBvciBvdGhlciBJUFIgY2xhaW1zIG9mCisgICB3aGljaCBoZSBvciBzaGUgaXMgYXdhcmUgaGF2ZSBiZWVuIG9yIHdpbGwgYmUgZGlzY2xvc2VkLCBhbmQgYW55IG9mCisgICB3aGljaCBoZSBvciBzaGUgYmVjb21lIGF3YXJlIHdpbGwgYmUgZGlzY2xvc2VkLCBpbiBhY2NvcmRhbmNlIHdpdGgKKyAgIFJGQyAzNjY4LgorCisgICBJbnRlcm5ldC1EcmFmdHMgYXJlIHdvcmtpbmcgZG9jdW1lbnRzIG9mIHRoZSBJbnRlcm5ldCBFbmdpbmVlcmluZworICAgVGFzayBGb3JjZSAoSUVURiksIGl0cyBhcmVhcywgYW5kIGl0cyB3b3JraW5nIGdyb3Vwcy4gIE5vdGUgdGhhdAorICAgb3RoZXIgZ3JvdXBzIG1heSBhbHNvIGRpc3RyaWJ1dGUgd29ya2luZyBkb2N1bWVudHMgYXMKKyAgIEludGVybmV0LURyYWZ0cy4KKworICAgSW50ZXJuZXQtRHJhZnRzIGFyZSBkcmFmdCBkb2N1bWVudHMgdmFsaWQgZm9yIGEgbWF4aW11bSBvZiBzaXggbW9udGhzCisgICBhbmQgbWF5IGJlIHVwZGF0ZWQsIHJlcGxhY2VkLCBvciBvYnNvbGV0ZWQgYnkgb3RoZXIgZG9jdW1lbnRzIGF0IGFueQorICAgdGltZS4gIEl0IGlzIGluYXBwcm9wcmlhdGUgdG8gdXNlIEludGVybmV0LURyYWZ0cyBhcyByZWZlcmVuY2UKKyAgIG1hdGVyaWFsIG9yIHRvIGNpdGUgdGhlbSBvdGhlciB0aGFuIGFzICJ3b3JrIGluIHByb2dyZXNzLiIKKworICAgVGhlIGxpc3Qgb2YgY3VycmVudCBJbnRlcm5ldC1EcmFmdHMgY2FuIGJlIGFjY2Vzc2VkIGF0CisgICBodHRwOi8vd3d3LmlldGYub3JnL2lldGYvMWlkLWFic3RyYWN0cy50eHQuCisKKyAgIFRoZSBsaXN0IG9mIEludGVybmV0LURyYWZ0IFNoYWRvdyBEaXJlY3RvcmllcyBjYW4gYmUgYWNjZXNzZWQgYXQKKyAgIGh0dHA6Ly93d3cuaWV0Zi5vcmcvc2hhZG93Lmh0bWwuCisKKyAgIFRoaXMgSW50ZXJuZXQtRHJhZnQgd2lsbCBleHBpcmUgb24gT2N0b2JlciAzLCAyMDA1LgorCitDb3B5cmlnaHQgTm90aWNlCisKKyAgIENvcHlyaWdodCAoQykgVGhlIEludGVybmV0IFNvY2lldHkgKDIwMDUpLgorCitBYnN0cmFjdAorCisgICBTcGVleCBpcyBhbiBvcGVuLXNvdXJjZSB2b2ljZSBjb2RlYyBzdWl0YWJsZSBmb3IgdXNlIGluIFZvaWNlIG92ZXIgSVAKKyAgIChWb0lQKSB0eXBlIGFwcGxpY2F0aW9ucy4gIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBwYXlsb2FkIGZvcm1hdAorICAgZm9yIFNwZWV4IGdlbmVyYXRlZCBiaXQgc3RyZWFtcyB3aXRoaW4gYW4gUlRQIHBhY2tldC4gIEFsc28gaW5jbHVkZWQKKyAgIGhlcmUgYXJlIHRoZSBuZWNlc3NhcnkgZGV0YWlscyBmb3IgdGhlIHVzZSBvZiBTcGVleCB3aXRoIHRoZSBTZXNzaW9uCisgICBEZXNjcmlwdGlvbiBQcm90b2NvbCAoU0RQKSBhbmQgYSBwcmVsaW1pbmFyeSBtZXRob2Qgb2YgdXNpbmcgU3BlZXgKKworCisKK0hlcmxlaW4sIGV0IGFsLiAgICAgICAgIEV4cGlyZXMgT2N0b2JlciAzLCAyMDA1ICAgICAgICAgICAgICAgICBbUGFnZSAxXQorCitJbnRlcm5ldC1EcmFmdCAgICAgZHJhZnQtaGVybGVpbi1zcGVleC1ydHAtcHJvZmlsZS0wMiAgICAgICAgIEFwcmlsIDIwMDUKKworCisgICB3aXRoaW4gSC4zMjMgYXBwbGljYXRpb25zLgorCitUYWJsZSBvZiBDb250ZW50cworCisgICAxLiAgIENvbnZlbnRpb25zIHVzZWQgaW4gdGhpcyBkb2N1bWVudCAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgIDMKKyAgIDIuICAgT3ZlcnZpZXcgb2YgdGhlIFNwZWV4IENvZGVjICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgMworICAgMy4gICBSVFAgcGF5bG9hZCBmb3JtYXQgZm9yIFNwZWV4IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAzCisgICA0LiAgIFJUUCBIZWFkZXIgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgIDMKKyAgIDUuICAgU3BlZXggcGF5bG9hZCAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgNQorICAgNi4gICBFeGFtcGxlIFNwZWV4IHBhY2tldCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICA2CisgICA3LiAgIE11bHRpcGxlIFNwZWV4IGZyYW1lcyBpbiBhIFJUUCBwYWNrZXQgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgIDYKKyAgIDguICAgTUlNRSByZWdpc3RyYXRpb24gb2YgU3BlZXggLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgNworICAgOS4gICBTRFAgdXNhZ2Ugb2YgU3BlZXggLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICA4CisgICAxMC4gIElUVSBILjMyMy9ILjI0NSBVc2Ugb2YgU3BlZXggLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTAKKyAgIDExLiAgTm9uU3RhbmRhcmRNZXNzYWdlIGZvcm1hdCAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAxMAorICAgMTIuICBSVFAgUGF5bG9hZCBUeXBlcyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDExCisgICAxMy4gIFNlY3VyaXR5IENvbnNpZGVyYXRpb25zICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTEKKyAgIDE0LiAgQWNrbm93bGVkZ21lbnRzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAxMgorICAgMTUuICBSZWZlcmVuY2VzIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDEyCisgICAxNS4xICAgTm9ybWF0aXZlIFJlZmVyZW5jZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTIKKyAgIDE1LjIgICBJbmZvcm1hdGl2ZSBSZWZlcmVuY2VzIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAxMworICAgICAgICBBdXRob3JzJyBBZGRyZXNzZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDEzCisgICAgICAgIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBhbmQgQ29weXJpZ2h0IFN0YXRlbWVudHMgLiAuIC4gLiAuIC4gLiAgMTUKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgRXhwaXJlcyBPY3RvYmVyIDMsIDIwMDUgICAgICAgICAgICAgICAgIFtQYWdlIDJdCisKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAyICAgICAgICAgQXByaWwgMjAwNQorCisKKzEuICBDb252ZW50aW9ucyB1c2VkIGluIHRoaXMgZG9jdW1lbnQKKworICAgVGhlIGtleSB3b3JkcyAiTVVTVCIsICJNVVNUIE5PVCIsICJSRVFVSVJFRCIsICJTSEFMTCIsICJTSEFMTCBOT1QiLAorICAgIlNIT1VMRCIsICJTSE9VTEQgTk9UIiwgIlJFQ09NTUVOREVEIiwgIk1BWSIsIGFuZCAiT1BUSU9OQUwiIGluIHRoaXMKKyAgIGRvY3VtZW50IGFyZSB0byBiZSBpbnRlcnByZXRlZCBhcyBkZXNjcmliZWQgaW4gUkZDIDIxMTkgWzFdLgorCisyLiAgT3ZlcnZpZXcgb2YgdGhlIFNwZWV4IENvZGVjCisKKyAgIFNwZWV4IGlzIGJhc2VkIG9uIHRoZSBDRUxQIFsxMF0gZW5jb2RpbmcgdGVjaG5pcXVlIHdpdGggc3VwcG9ydCBmb3IKKyAgIGVpdGhlciBuYXJyb3diYW5kIChub21pbmFsIDhrSHopLCB3aWRlYmFuZCAobm9taW5hbCAxNmtIeikgb3IKKyAgIHVsdHJhLXdpZGViYW5kIChub21pbmFsIDMya0h6KSwgYW5kIChub24tb3B0aW1hbCkgcmF0ZXMgdXAgdG8gNDgga0h6CisgICBzYW1wbGluZyBhbHNvIGF2YWlsYWJsZS4gIFRoZSBtYWluIGNoYXJhY3RlcmlzdGljcyBjYW4gYmUgc3VtbWFyaXplZAorICAgYXMgZm9sbG93czoKKworICAgbyAgRnJlZSBzb2Z0d2FyZS9vcGVuLXNvdXJjZQorICAgbyAgSW50ZWdyYXRpb24gb2Ygd2lkZWJhbmQgYW5kIG5hcnJvd2JhbmQgaW4gdGhlIHNhbWUgYml0LXN0cmVhbQorICAgbyAgV2lkZSByYW5nZSBvZiBiaXQtcmF0ZXMgYXZhaWxhYmxlCisgICBvICBEeW5hbWljIGJpdC1yYXRlIHN3aXRjaGluZyBhbmQgdmFyaWFibGUgYml0LXJhdGUgKFZCUikKKyAgIG8gIFZvaWNlIEFjdGl2aXR5IERldGVjdGlvbiAoVkFELCBpbnRlZ3JhdGVkIHdpdGggVkJSKQorICAgbyAgVmFyaWFibGUgY29tcGxleGl0eQorCiszLiAgUlRQIHBheWxvYWQgZm9ybWF0IGZvciBTcGVleAorCisgICBGb3IgUlRQIGJhc2VkIHRyYW5zcG9ydGF0aW9uIG9mIFNwZWV4IGVuY29kZWQgYXVkaW8gdGhlIHN0YW5kYXJkIFJUUAorICAgaGVhZGVyIFsyXSBpcyBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBwYXlsb2FkIGRhdGEgYmxvY2tzLiAgQW4KKyAgIG9wdGlvbmFsIHBhZGRpbmcgdGVybWluYXRvciBtYXkgYWxzbyBiZSB1c2VkLgorCisgICAgICAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisgICAgICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBSVFAgSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgKz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSsKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgb25lIG9yIG1vcmUgZnJhbWVzIG9mIFNwZWV4IC4uLi4gICAgICAgICAgICAgIHwKKyAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgfCAgICAgICAgb25lIG9yIG1vcmUgZnJhbWVzIG9mIFNwZWV4IC4uLi4gICAgICAgfCAgICBwYWRkaW5nICAgIHwKKyAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworCis0LiAgUlRQIEhlYWRlcgorCisgICAgICAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisgICAgICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgfFY9MnxQfFh8ICBDQyAgIHxNfCAgICAgUFQgICAgICB8ICAgICAgIHNlcXVlbmNlIG51bWJlciAgICAgICAgIHwKKyAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgfCAgICAgICAgICAgc3luY2hyb25pemF0aW9uIHNvdXJjZSAoU1NSQykgaWRlbnRpZmllciAgICAgICAgICAgIHwKKworCisKK0hlcmxlaW4sIGV0IGFsLiAgICAgICAgIEV4cGlyZXMgT2N0b2JlciAzLCAyMDA1ICAgICAgICAgICAgICAgICBbUGFnZSAzXQorCitJbnRlcm5ldC1EcmFmdCAgICAgZHJhZnQtaGVybGVpbi1zcGVleC1ydHAtcHJvZmlsZS0wMiAgICAgICAgIEFwcmlsIDIwMDUKKworCisgICAgICAgICs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rCisgICAgICAgIHwgICAgICAgICAgICBjb250cmlidXRpbmcgc291cmNlIChDU1JDKSBpZGVudGlmaWVycyAgICAgICAgICAgICB8CisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKyAgIFRoZSBSVFAgaGVhZGVyIGJlZ2lucyB3aXRoIGFuIG9jdGV0IG9mIGZpZWxkcyAoViwgUCwgWCwgYW5kIENDKSB0bworICAgc3VwcG9ydCBzcGVjaWFsaXplZCBSVFAgdXNlcyAoc2VlIFsyXSBhbmQgWzddIGZvciBkZXRhaWxzKS4gIEZvcgorICAgU3BlZXggdGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIHVzZWQuCisKKyAgIFZlcnNpb24gKFYpOiAyIGJpdHMKKworICAgVGhpcyBmaWVsZCBpZGVudGlmaWVzIHRoZSB2ZXJzaW9uIG9mIFJUUC4gIFRoZSB2ZXJzaW9uIHVzZWQgYnkgdGhpcworICAgc3BlY2lmaWNhdGlvbiBpcyB0d28gWzJdLgorCisgICBQYWRkaW5nIChQKTogMSBiaXQKKworICAgSWYgdGhlIHBhZGRpbmcgYml0IGlzIHNldCwgdGhlIHBhY2tldCBjb250YWlucyBvbmUgb3IgbW9yZSBhZGRpdGlvbmFsCisgICBwYWRkaW5nIG9jdGV0cyBhdCB0aGUgZW5kIHdoaWNoIGFyZSBub3QgcGFydCBvZiB0aGUgcGF5bG9hZC4gIFAgaXMKKyAgIHNldCBpZiB0aGUgdG90YWwgcGFja2V0IHNpemUgaXMgbGVzcyB0aGFuIHRoZSBNVFUuCisKKyAgIEV4dGVuc2lvbiAoWCk6IDEgYml0CisKKyAgIElmIHRoZSBleHRlbnNpb24sIFgsIGJpdCBpcyBzZXQsIHRoZSBmaXhlZCBoZWFkZXIgTVVTVCBiZSBmb2xsb3dlZCBieQorICAgZXhhY3RseSBvbmUgaGVhZGVyIGV4dGVuc2lvbiwgd2l0aCBhIGZvcm1hdCBkZWZpbmVkIGluIFNlY3Rpb24gNS4zLjEuCisgICBvZiBbMl0uCisKKyAgIENTUkMgY291bnQgKENDKTogNCBiaXRzCisKKyAgIFRoZSBDU1JDIGNvdW50IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgQ1NSQyBpZGVudGlmaWVycy4KKworICAgTWFya2VyIChNKTogMSBiaXQKKworICAgVGhlIE0gYml0IGluZGljYXRlcyBpZiB0aGUgcGFja2V0IGNvbnRhaW5zIGNvbWZvcnQgbm9pc2UuICBUaGlzIGZpZWxkCisgICBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGNuZyBTRFAgYXR0cmlidXRlIGFuZCBpcyBkZXRhaWxlZAorICAgZnVydGhlciBpbiBzZWN0aW9uIDUgYmVsb3cuICBJbiBub3JtYWwgdXNhZ2UgdGhpcyBiaXQgaXMgc2V0IGlmIHRoZQorICAgcGFja2V0IGNvbnRhaW5zIGNvbWZvcnQgbm9pc2UuCisKKyAgIFBheWxvYWQgVHlwZSAoUFQpOiA3IGJpdHMKKworICAgQW4gUlRQIHByb2ZpbGUgZm9yIGEgY2xhc3Mgb2YgYXBwbGljYXRpb25zIGlzIGV4cGVjdGVkIHRvIGFzc2lnbiBhCisgICBwYXlsb2FkIHR5cGUgZm9yIHRoaXMgZm9ybWF0LCBvciBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBwYXlsb2FkIHR5cGUKKyAgIFNIT1VMRCBiZSBjaG9zZW4gd2hpY2ggZGVzaWduYXRlcyB0aGUgcGF5bG9hZCBhcyBTcGVleC4KKworICAgU2VxdWVuY2UgbnVtYmVyOiAxNiBiaXRzCisKKyAgIFRoZSBzZXF1ZW5jZSBudW1iZXIgaW5jcmVtZW50cyBieSBvbmUgZm9yIGVhY2ggUlRQIGRhdGEgcGFja2V0IHNlbnQsCisgICBhbmQgbWF5IGJlIHVzZWQgYnkgdGhlIHJlY2VpdmVyIHRvIGRldGVjdCBwYWNrZXQgbG9zcyBhbmQgdG8gcmVzdG9yZQorICAgcGFja2V0IHNlcXVlbmNlLiAgVGhpcyBmaWVsZCBpcyBkZXRhaWxlZCBmdXJ0aGVyIGluIFsyXS4KKworCisKK0hlcmxlaW4sIGV0IGFsLiAgICAgICAgIEV4cGlyZXMgT2N0b2JlciAzLCAyMDA1ICAgICAgICAgICAgICAgICBbUGFnZSA0XQorCitJbnRlcm5ldC1EcmFmdCAgICAgZHJhZnQtaGVybGVpbi1zcGVleC1ydHAtcHJvZmlsZS0wMiAgICAgICAgIEFwcmlsIDIwMDUKKworCisgICBUaW1lc3RhbXA6IDMyIGJpdHMKKworICAgQSB0aW1lc3RhbXAgcmVwcmVzZW50aW5nIHRoZSBzYW1wbGluZyB0aW1lIG9mIHRoZSBmaXJzdCBzYW1wbGUgb2YgdGhlCisgICBmaXJzdCBTcGVleCBwYWNrZXQgaW4gdGhlIFJUUCBwYWNrZXQuICBUaGUgY2xvY2sgZnJlcXVlbmN5IE1VU1QgYmUKKyAgIHNldCB0byB0aGUgc2FtcGxlIHJhdGUgb2YgdGhlIGVuY29kZWQgYXVkaW8gZGF0YS4gIFNwZWV4IHVzZXMgMjAgbXNlYworICAgZnJhbWVzIGFuZCBhIHZhcmlhYmxlIHNhbXBsaW5nIHJhdGUgY2xvY2suICBUaGUgUlRQIHRpbWVzdGFtcCBNVVNUIGJlCisgICBpbiB1bml0cyBvZiAxL1ggb2YgYSBzZWNvbmQgd2hlcmUgWCBpcyB0aGUgc2FtcGxlIHJhdGUgdXNlZC4gIFNwZWV4CisgICB1c2VzIGEgbm9taW5hbCA4a0h6IHNhbXBsaW5nIHJhdGUgZm9yIG5hcnJvd2JhbmQgdXNlLCBhIG5vbWluYWwgMTZrSHoKKyAgIHNhbXBsaW5nIHJhdGUgZm9yIHdpZGViYW5kIHVzZSwgYW5kIGEgbm9taW5hbCAzMmtIeiBzYW1wbGluZyByYXRlIGZvcgorICAgdWx0cmEtd2lkZWJhbmQgdXNlLgorCisgICBTU1JDL0NTUkMgaWRlbnRpZmllcnM6CisKKyAgIFRoZXNlIHR3byBmaWVsZHMsIDMyIGJpdHMgZWFjaCB3aXRoIG9uZSBTU1JDIGZpZWxkIGFuZCBhIG1heGltdW0gb2YKKyAgIDE2IENTUkMgZmllbGRzLCBhcmUgYXMgZGVmaW5lZCBpbiBbMl0uCisKKzUuICBTcGVleCBwYXlsb2FkCisKKyAgIEZvciB0aGUgcHVycG9zZXMgb2YgcGFja2V0aXppbmcgdGhlIGJpdCBzdHJlYW0gaW4gUlRQLCBpdCBpcyBvbmx5CisgICBuZWNlc3NhcnkgdG8gY29uc2lkZXIgdGhlIHNlcXVlbmNlIG9mIGJpdHMgYXMgb3V0cHV0IGJ5IHRoZSBTcGVleAorICAgZW5jb2RlciBbOV0sIGFuZCBwcmVzZW50IHRoZSBzYW1lIHNlcXVlbmNlIHRvIHRoZSBkZWNvZGVyLiAgVGhlCisgICBwYXlsb2FkIGZvcm1hdCBkZXNjcmliZWQgaGVyZSBtYWludGFpbnMgdGhpcyBzZXF1ZW5jZS4KKworICAgQSB0eXBpY2FsIFNwZWV4IGZyYW1lLCBlbmNvZGVkIGF0IHRoZSBtYXhpbXVtIGJpdHJhdGUsIGlzIGFwcHJveC4KKyAgIDExMCBvY3RldHMgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgU3BlZXggZnJhbWVzIFNIT1VMRCBiZSBrZXB0IGxlc3MKKyAgIHRoYW4gdGhlIHBhdGggTVRVIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gIFNwZWV4IGZyYW1lcyBNVVNUIE5PVCBiZQorICAgZnJhZ21lbnRlZCBhY3Jvc3MgbXVsdGlwbGUgUlRQIHBhY2tldHMsCisKKyAgIEFuIFJUUCBwYWNrZXQgTUFZIGNvbnRhaW4gU3BlZXggZnJhbWVzIG9mIHRoZSBzYW1lIGJpdCByYXRlIG9yIG9mCisgICB2YXJ5aW5nIGJpdCByYXRlcywgc2luY2UgdGhlIGJpdC1yYXRlIGZvciBhIGZyYW1lIGlzIGNvbnZleWVkIGluIGJhbmQKKyAgIHdpdGggdGhlIHNpZ25hbC4KKworICAgVGhlIGVuY29kaW5nIGFuZCBkZWNvZGluZyBhbGdvcml0aG0gY2FuIGNoYW5nZSB0aGUgYml0IHJhdGUgYXQgYW55IDIwCisgICBtc2VjIGZyYW1lIGJvdW5kYXJ5LCB3aXRoIHRoZSBiaXQgcmF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uIHByb3ZpZGVkCisgICBpbi1iYW5kIHdpdGggdGhlIGJpdCBzdHJlYW0uICBFYWNoIGZyYW1lIGNvbnRhaW5zIGJvdGggIm1vZGUiCisgICAobmFycm93YmFuZCwgd2lkZWJhbmQgb3IgdWx0cmEtd2lkZWJhbmQpIGFuZCAic3ViLW1vZGUiIChiaXQtcmF0ZSkKKyAgIGluZm9ybWF0aW9uIGluIHRoZSBiaXQgc3RyZWFtLiAgTm8gb3V0LW9mLWJhbmQgbm90aWZpY2F0aW9uIGlzCisgICByZXF1aXJlZCBmb3IgdGhlIGRlY29kZXIgdG8gcHJvY2VzcyBjaGFuZ2VzIGluIHRoZSBiaXQgcmF0ZSBzZW50IGJ5CisgICB0aGUgZW5jb2Rlci4KKworICAgSXQgaXMgUkVDT01NRU5ERUQgdGhhdCB2YWx1ZXMgb2YgODAwMCwgMTYwMDAgYW5kIDMyMDAwIGJlIHVzZWQgZm9yCisgICBub3JtYWwgaW50ZXJuZXQgdGVsZXBob255IGFwcGxpY2F0aW9ucywgdGhvdWdoIHRoZSBzYW1wbGUgcmF0ZSBpcworICAgc3VwcG9ydGVkIGF0IHJhdGVzIGFzIGxvdyBhcyA2MDAwIEh6IGFuZCBhcyBoaWdoIGFzIDQ4IGtIei4KKworICAgVGhlIFJUUCBwYXlsb2FkIE1VU1QgYmUgcGFkZGVkIHRvIHByb3ZpZGUgYW4gaW50ZWdlciBudW1iZXIgb2Ygb2N0ZXRzCisgICBhcyB0aGUgcGF5bG9hZCBsZW5ndGguICBUaGVzZSBwYWRkaW5nIGJpdHMgYXJlIExTQiBhbGlnbmVkIGluIG5ldHdvcmsKKyAgIG9jdGV0IG9yZGVyIGFuZCBjb25zaXN0IG9mIGEgMCBmb2xsb3dlZCBieSBhbGwgb25lcyAodW50aWwgdGhlIGVuZCBvZgorICAgdGhlIG9jdGV0KS4gIFRoaXMgcGFkZGluZyBpcyBvbmx5IHJlcXVpcmVkIGZvciB0aGUgbGFzdCBmcmFtZSBpbiB0aGUKKworCisKK0hlcmxlaW4sIGV0IGFsLiAgICAgICAgIEV4cGlyZXMgT2N0b2JlciAzLCAyMDA1ICAgICAgICAgICAgICAgICBbUGFnZSA1XQorCitJbnRlcm5ldC1EcmFmdCAgICAgZHJhZnQtaGVybGVpbi1zcGVleC1ydHAtcHJvZmlsZS0wMiAgICAgICAgIEFwcmlsIDIwMDUKKworCisgICBwYWNrZXQsIGFuZCBvbmx5IHRvIGVuc3VyZSB0aGUgcGFja2V0IGNvbnRlbnRzIGVuZHMgb24gYW4gb2N0ZXQKKyAgIGJvdW5kYXJ5LgorCis2LiAgRXhhbXBsZSBTcGVleCBwYWNrZXQKKworICAgSW4gdGhlIGV4YW1wbGUgYmVsb3cgd2UgaGF2ZSBhIHNpbmdsZSBTcGVleCBmcmFtZSB3aXRoIDUgYml0cyBvZgorICAgcGFkZGluZyB0byBlbnN1cmUgdGhlIHBhY2tldCBzaXplIGZhbGxzIG9uIGFuIG9jdGV0IGJvdW5kYXJ5LgorCisgICAgICAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMworICAgICAgIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQorICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgIHxWPTJ8UHxYfCAgQ0MgICB8TXwgICAgIFBUICAgICAgfCAgICAgICBzZXF1ZW5jZSBudW1iZXIgICAgICAgICB8CisgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICB8ICAgICAgICAgc3luY2hyb25pemF0aW9uIHNvdXJjZSAoU1NSQykgaWRlbnRpZmllciAgICAgICAgICAgICAgfAorICAgICAgKz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSsKKworICAgICAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyAgICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAgICAgICs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rCisgICAgICB8ICAgICAgICAgY29udHJpYnV0aW5nIHNvdXJjZSAoQ1NSQykgaWRlbnRpZmllcnMgICAgICAgICAgICAgICAgfAorICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIC4uc3BlZXggZGF0YS4uICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgLi5zcGVleCBkYXRhLi4gICAgICAgICAgICAgICB8MCAxIDEgMSAxfAorICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworCis3LiAgTXVsdGlwbGUgU3BlZXggZnJhbWVzIGluIGEgUlRQIHBhY2tldAorCisgICBCZWxvdyBpcyBhbiBleGFtcGxlIG9mIHR3byBTcGVleCBmcmFtZXMgY29udGFpbmVkIHdpdGhpbiBvbmUgUlRQCisgICBwYWNrZXQuICBUaGUgU3BlZXggZnJhbWUgbGVuZ3RoIGluIHRoaXMgZXhhbXBsZSBmYWxsIG9uIGFuIG9jdGV0CisgICBib3VuZGFyeSBzbyB0aGVyZSBpcyBubyBwYWRkaW5nLgorCisgICBTcGVleCBjb2RlY3MgWzldIGFyZSBhYmxlIHRvIGRldGVjdCB0aGUgdGhlIGJpdHJhdGUgZnJvbSB0aGUgcGF5bG9hZAorICAgYW5kIGFyZSByZXNwb25zaWJsZSBmb3IgZGV0ZWN0aW5nIHRoZSAyMCBtc2VjIGJvdW5kYXJpZXMgYmV0d2VlbiBlYWNoCisgICBmcmFtZS4KKworICAgICAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyAgICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICB8Vj0yfFB8WHwgIENDICAgfE18ICAgICBQVCAgICAgIHwgICAgICAgc2VxdWVuY2UgbnVtYmVyICAgICAgICAgfAorICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgRXhwaXJlcyBPY3RvYmVyIDMsIDIwMDUgICAgICAgICAgICAgICAgIFtQYWdlIDZdCisKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAyICAgICAgICAgQXByaWwgMjAwNQorCisKKyAgICAgIHwgICAgICAgICBzeW5jaHJvbml6YXRpb24gc291cmNlIChTU1JDKSBpZGVudGlmaWVyICAgICAgICAgICAgICB8CisgICAgICArPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9KworICAgICAgfCAgICAgICAgIGNvbnRyaWJ1dGluZyBzb3VyY2UgKENTUkMpIGlkZW50aWZpZXJzICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAuLnNwZWV4IGRhdGEuLiAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgfCAgICAgICAgLi5zcGVleCBkYXRhLi4gICAgICAgICB8ICAgICAgICAuLnNwZWV4IGRhdGEuLiAgICAgICAgIHwKKyAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgLi5zcGVleCBkYXRhLi4gICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworCis4LiAgTUlNRSByZWdpc3RyYXRpb24gb2YgU3BlZXgKKworICAgRnVsbCBkZWZpbml0aW9uIG9mIHRoZSBNSU1FIFszXSB0eXBlIGZvciBTcGVleCB3aWxsIGJlIHBhcnQgb2YgdGhlCisgICBPZ2cgVm9yYmlzIE1JTUUgdHlwZSBkZWZpbml0aW9uIGFwcGxpY2F0aW9uIFs4XS4KKworICAgTUlNRSBtZWRpYSB0eXBlIG5hbWU6IGF1ZGlvCisKKyAgIE1JTUUgc3VidHlwZTogc3BlZXgKKworICAgT3B0aW9uYWwgcGFyYW1ldGVyczoKKworICAgUmVxdWlyZWQgcGFyYW1ldGVyczogdG8gYmUgaW5jbHVkZWQgaW4gdGhlIE9nZyBNSU1FIHNwZWNpZmljYXRpb24uCisKKyAgIEVuY29kaW5nIGNvbnNpZGVyYXRpb25zOgorCisgICBTZWN1cml0eSBDb25zaWRlcmF0aW9uczoKKworICAgU2VlIFNlY3Rpb24gNiBvZiBSRkMgMzA0Ny4KKworICAgSW50ZXJvcGVyYWJpbGl0eSBjb25zaWRlcmF0aW9uczogbm9uZQorCisgICBQdWJsaXNoZWQgc3BlY2lmaWNhdGlvbjoKKworICAgQXBwbGljYXRpb25zIHdoaWNoIHVzZSB0aGlzIG1lZGlhIHR5cGU6CisKKyAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb246IG5vbmUKKworICAgUGVyc29uICYgZW1haWwgYWRkcmVzcyB0byBjb250YWN0IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uOgorCisgICAgICBHcmVnIEhlcmxlaW4gPGdoZXJsZWluQGhlcmxlaW4uY29tPgorICAgICAgSmVhbi1NYXJjIFZhbGluIDxqZWFuLW1hcmMudmFsaW5AaGVybWVzLnVzaGVyYi5jYT4KKworICAgSW50ZW5kZWQgdXNhZ2U6IENPTU1PTgorCisKKworCitIZXJsZWluLCBldCBhbC4gICAgICAgICBFeHBpcmVzIE9jdG9iZXIgMywgMjAwNSAgICAgICAgICAgICAgICAgW1BhZ2UgN10KKworSW50ZXJuZXQtRHJhZnQgICAgIGRyYWZ0LWhlcmxlaW4tc3BlZXgtcnRwLXByb2ZpbGUtMDIgICAgICAgICBBcHJpbCAyMDA1CisKKworICAgQXV0aG9yL0NoYW5nZSBjb250cm9sbGVyOgorCisgICAgICBBdXRob3I6ICBHcmVnIEhlcmxlaW4gPGdoZXJsZWluQGhlcmxlaW4uY29tPgorICAgICAgQ2hhbmdlIGNvbnRyb2xsZXI6IEdyZWcgSGVybGVpbiA8Z2hlcmxlaW5AaGVybGVpbi5jb20+CisgICAgICBDaGFuZ2UgY29udHJvbGxlcjogSUVURiBBVlQgV29ya2luZyBHcm91cAorCisgICBUaGlzIHRyYW5zcG9ydCB0eXBlIHNpZ25pZmllcyB0aGF0IHRoZSBjb250ZW50IGlzIHRvIGJlIGludGVycHJldGVkCisgICBhY2NvcmRpbmcgdG8gdGhpcyBkb2N1bWVudCBpZiB0aGUgY29udGVudHMgYXJlIHRyYW5zbWl0dGVkIG92ZXIgUlRQLgorICAgU2hvdWxkIHRoaXMgdHJhbnNwb3J0IHR5cGUgYXBwZWFyIG92ZXIgYSBsb3NzbGVzcyBzdHJlYW1pbmcgcHJvdG9jb2wKKyAgIHN1Y2ggYXMgVENQLCB0aGUgY29udGVudCBlbmNhcHN1bGF0aW9uIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhbgorICAgT2dnIFN0cmVhbSBpbiBhY2NvcmRhbmNlIHdpdGggWzhdLCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUKKyAgIGNvbnRlbnQgb2YgdGhlIE9nZyBTdHJlYW0gbWF5IGJlIGFzc3VtZWQgdG8gYmUgU3BlZXggYXVkaW8gYW5kIFNwZWV4CisgICBhdWRpbyBvbmx5LgorCis5LiAgU0RQIHVzYWdlIG9mIFNwZWV4CisKKyAgIFdoZW4gY29udmV5aW5nIGluZm9ybWF0aW9uIGJ5IFNEUCBbNF0sIHRoZSBlbmNvZGluZyBuYW1lIE1VU1QgYmUgc2V0CisgICB0byAic3BlZXgiLiAgQW4gZXhhbXBsZSBvZiB0aGUgbWVkaWEgcmVwcmVzZW50YXRpb24gaW4gU0RQIGZvcgorICAgb2ZmZXJpbmcgYSBzaW5nbGUgY2hhbm5lbCBvZiBTcGVleCBhdCA4MDAwIHNhbXBsZXMgcGVyIHNlY29uZCBtaWdodAorICAgYmU6CisKKyAgICAgIG09YXVkaW8gODA4OCBSVFAvQVZQIDk3CisgICAgICBhPXJ0cG1hcDo5NyBzcGVleC84MDAwCisKKyAgIE5vdGUgdGhhdCB0aGUgUlRQIHBheWxvYWQgdHlwZSBjb2RlIG9mIDk3IGlzIGRlZmluZWQgaW4gdGhpcyBtZWRpYQorICAgZGVmaW5pdGlvbiB0byBiZSAnbWFwcGVkJyB0byB0aGUgc3BlZXggY29kZWMgYXQgYW4gOGtIeiBzYW1wbGluZworICAgZnJlcXVlbmN5IHVzaW5nIHRoZSAnYT1ydHBtYXAnIGxpbmUuICBBbnkgbnVtYmVyIGZyb20gOTYgdG8gMTI3IGNvdWxkCisgICBoYXZlIGJlZW4gY2hvc2VuICh0aGUgYWxsb3dlZCByYW5nZSBmb3IgZHluYW1pYyB0eXBlcykuCisKKyAgIFRoZSB2YWx1ZSBvZiB0aGUgc2FtcGxpbmcgZnJlcXVlbmN5IGlzIHR5cGljYWxseSA4MDAwIGZvciBuYXJyb3cgYmFuZAorICAgb3BlcmF0aW9uLCAxNjAwMCBmb3Igd2lkZSBiYW5kIG9wZXJhdGlvbiwgYW5kIDMyMDAwIGZvciB1bHRyYS13aWRlCisgICBiYW5kIG9wZXJhdGlvbi4KKworICAgSWYgZm9yIHNvbWUgcmVhc29uIHRoZSBvZmZlcmVyIGhhcyBiYW5kd2lkdGggbGltaXRhdGlvbnMsIHRoZSBjbGllbnQKKyAgIG1heSB1c2UgdGhlICJiPSIgaGVhZGVyLCBhcyBleHBsYWluZWQgaW4gU0RQIFs0XS4gIFRoZSBmb2xsb3dpbmcKKyAgIGV4YW1wbGUgaWxsdXN0cmF0ZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIG9mZmVyZXIgY2Fubm90IHJlY2VpdmUgbW9yZQorICAgdGhhbiAxMCBrYml0L3MuCisKKyAgICAgIG09YXVkaW8gODA4OCBSVFAvQVZQIDk3CisgICAgICBiPUFTOjEwCisgICAgICBhPXJ0bWFwOjk3IHNwZWV4LzgwMDAKKworICAgSW4gdGhpcyBjYXNlLCBpZiB0aGUgcmVtb3RlIHBhcnQgYWdyZWVzLCBpdCBzaG91bGQgY29uZmlndXJlIGl0cworICAgU3BlZXggZW5jb2RlciBzbyB0aGF0IGl0IGRvZXMgbm90IHVzZSBtb2RlcyB0aGF0IHByb2R1Y2UgbW9yZSB0aGFuIDEwCisgICBrYml0L3MuICBOb3RlIHRoYXQgdGhlICJiPSIgY29uc3RyYWludCBhbHNvIGFwcGxpZXMgb24gYWxsIHBheWxvYWQKKyAgIHR5cGVzIHRoYXQgbWF5IGJlIHByb3Bvc2VkIGluIHRoZSBtZWRpYSBsaW5lICgibT0iKS4KKworICAgQW4gb3RoZXIgd2F5IHRvIG1ha2UgcmVjb21tZW5kYXRpb25zIHRvIHRoZSByZW1vdGUgU3BlZXggZW5jb2RlciBpcworCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgRXhwaXJlcyBPY3RvYmVyIDMsIDIwMDUgICAgICAgICAgICAgICAgIFtQYWdlIDhdCisKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAyICAgICAgICAgQXByaWwgMjAwNQorCisKKyAgIHRvIHVzZSBpdHMgc3BlY2lmaWMgcGFyYW1ldGVycyB2aWEgdGhlIGE9Zm10cDogZGlyZWN0aXZlLiAgVGhlCisgICBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgZGVmaW5lZCBmb3IgdXNlIGluIHRoaXMgd2F5OgorCisgICAgICBwdGltZTogZHVyYXRpb24gb2YgZWFjaCBwYWNrZXQgaW4gbWlsbGlzZWNvbmRzLgorCisgICAgICBzcjogICAgYWN0dWFsIHNhbXBsZSByYXRlIGluIEh6LgorCisgICAgICBlYnc6ICAgZW5jb2RpbmcgYmFuZHdpZHRoIC0gZWl0aGVyICduYXJyb3cnIG9yICd3aWRlJyBvciAndWx0cmEnCisgICAgICAoY29ycmVzcG9uZHMgdG8gbm9taW5hbCA4MDAwLCAxNjAwMCwgYW5kIDMyMDAwIEh6IHNhbXBsaW5nIHJhdGVzKS4KKworICAgICAgdmJyOiAgIHZhcmlhYmxlIGJpdCByYXRlICAtIGVpdGhlciAnb24nICdvZmYnIG9yICd2YWQnIChkZWZhdWx0cworICAgICAgdG8gb2ZmKS4gIElmIG9uLCB2YXJpYWJsZSBiaXQgcmF0ZSBpcyBlbmFibGVkLiAgSWYgb2ZmLCBkaXNhYmxlZC4KKyAgICAgIElmIHNldCB0byAndmFkJyB0aGVuIGNvbnN0YW50IGJpdCByYXRlIGlzIHVzZWQgYnV0IHNpbGVuY2Ugd2lsbCBiZQorICAgICAgZW5jb2RlZCB3aXRoIHNwZWNpYWwgc2hvcnQgZnJhbWVzIHRvIGluZGljYXRlIGEgbGFjayBvZiB2b2ljZSBmb3IKKyAgICAgIHRoYXQgcGVyaW9kLgorCisgICAgICBjbmc6ICAgY29tZm9ydCBub2lzZSBnZW5lcmF0aW9uIC0gZWl0aGVyICdvbicgb3IgJ29mZicuICBJZiBvZmYKKyAgICAgIHRoZW4gc2lsZW5jZSBmcmFtZXMgd2lsbCBiZSBzaWxlbnQ7IGlmICdvbicgdGhlbiB0aG9zZSBmcmFtZXMgd2lsbAorICAgICAgYmUgZmlsbGVkIHdpdGggY29tZm9ydCBub2lzZS4KKworICAgICAgbW9kZTogIFNwZWV4IGVuY29kaW5nIG1vZGUuICBDYW4gYmUgezEsMiwzLDQsNSw2LGFueX0gZGVmYXVsdHMgdG8KKyAgICAgIDMgaW4gbmFycm93YmFuZCwgNiBpbiB3aWRlIGFuZCB1bHRyYS13aWRlLgorCisgICAgICBwZW5oOgl1c2Ugb2YgcGVyY2VwdHVhbCBlbmhhbmNlbWVudC4gIDEgaW5kaWNhdGVzIHRvIHRoZSBkZWNvZGVyCisgICAgICB0aGF0IHBlcmNlcHR1YWwgZW5oYW5jZW1lbnQgaXMgcmVjb21tZW5kZWQsIDAgaW5kaWNhdGVzIHRoYXQgaXQgaXMKKyAgICAgIG5vdC4gIERlZmF1bHRzIHRvIG9uICgxKS4KKworCisgICBFeGFtcGxlczoKKworICAgICAgbT1hdWRpbyA4MDA4IFJUUC9BVlAgOTcKKyAgICAgIGE9cnRwbWFwOjk3IHNwZWV4LzgwMDAKKyAgICAgIGE9Zm10cDo5NyBtb2RlPTQKKworICAgVGhpcyBleGFtcGxlcyBpbGx1c3RyYXRlIGFuIG9mZmVyZXIgdGhhdCB3aXNoZXMgdG8gcmVjZWl2ZSBhIFNwZWV4CisgICBzdHJlYW0gYXQgODAwMEh6LCBidXQgb25seSB1c2luZyBzcGVleCBtb2RlIDMuCisKKyAgIFRoZSBvZmZlcmVyIG1heSBzdWdnZXN0IHRvIHRoZSByZW1vdGUgZGVjb2RlciB0byBhY3RpdmF0ZSBpdHMKKyAgIHBlcmNlcHR1YWwgZW5oYW5jZW1lbnQgZmlsdGVyIGxpa2UgdGhpczoKKworICAgICAgbT1hdWRpbyA4MDg4IFJUUC9BVlAgOTcKKyAgICAgIGE9cnRtYXA6OTcgc3BlZXgvODAwMAorICAgICAgYT1mbXRwOjk3IHBlbmg9MQorCisgICBTZXZlcmFsIFNwZWV4IHNwZWNpZmljIHBhcmFtZXRlcnMgY2FuIGJlIGdpdmVuIGluIGEgc2luZ2xlIGE9Zm10cAorICAgbGluZSBwcm92aWRlZCB0aGF0IHRoZXkgYXJlIHNlcGFyYXRlZCBieSBhIHNlbWktY29sb246CisKKworCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgRXhwaXJlcyBPY3RvYmVyIDMsIDIwMDUgICAgICAgICAgICAgICAgIFtQYWdlIDldCisKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAyICAgICAgICAgQXByaWwgMjAwNQorCisKKyAgICAgIGE9Zm10cDo5NyBtb2RlPWFueTtwZW5oPTEKKworICAgVGhlIG9mZmVyZXIgbWF5IGluZGljYXRlIHRoYXQgaXQgd2lzaGVzIHRvIHNlbmQgdmFyaWFibGUgYml0IHJhdGUKKyAgIGZyYW1lcyB3aXRoIGNvbWZvcnQgbm9pc2U6CisKKyAgICAgIG09YXVkaW8gODA4OCBSVFAvQVZQIDk3CisgICAgICBhPXJ0bWFwOjk3IHNwZWV4LzgwMDAKKyAgICAgIGE9Zm10cDo5NyB2YnI9b247Y25nPW9uCisKKyAgIFRoZSAicHRpbWUiIGF0dHJpYnV0ZSBpcyB1c2VkIHRvIGRlbm90ZSB0aGUgcGFja2V0aXphdGlvbiBpbnRlcnZhbAorICAgKGllLCBob3cgbWFueSBtaWxsaXNlY29uZHMgb2YgYXVkaW8gaXMgZW5jb2RlZCBpbiBhIHNpbmdsZSBSVFAKKyAgIHBhY2tldCkuICBTaW5jZSBTcGVleCB1c2VzIDIwIG1zZWMgZnJhbWVzLCBwdGltZSB2YWx1ZXMgb2YgbXVsdGlwbGVzCisgICBvZiAyMCBkZW5vdGUgbXVsdGlwbGUgU3BlZXggZnJhbWVzIHBlciBwYWNrZXQuICBWYWx1ZXMgb2YgcHRpbWUgd2hpY2gKKyAgIGFyZSBub3QgbXVsdGlwbGVzIG9mIDIwIE1VU1QgYmUgaWdub3JlZCBhbmQgY2xpZW50cyBNVVNUIHVzZSB0aGUKKyAgIGRlZmF1bHQgdmFsdWUgb2YgMjAgaW5zdGVhZC4KKworICAgSW4gdGhlIGV4YW1wbGUgYmVsb3cgdGhlIHB0aW1lIHZhbHVlIGlzIHNldCB0byA0MCwgaW5kaWNhdGluZyB0aGF0CisgICB0aGVyZSBhcmUgMiBmcmFtZXMgaW4gZWFjaCBwYWNrZXQuCisKKyAgICAgIG09YXVkaW8gODAwOCBSVFAvQVZQIDk3CisgICAgICBhPXJ0cG1hcDo5NyBzcGVleC84MDAwCisgICAgICBhPXB0aW1lOjQwCisKKyAgIE5vdGUgdGhhdCB0aGUgcHRpbWUgcGFyYW1ldGVyIGFwcGxpZXMgdG8gYWxsIHBheWxvYWRzIGxpc3RlZCBpbiB0aGUKKyAgIG1lZGlhIGxpbmUgYW5kIGlzIG5vdCB1c2VkIGFzIHBhcnQgb2YgYW4gYT1mbXRwIGRpcmVjdGl2ZS4KKworICAgVmFsdWVzIG9mIHB0aW1lIG5vdCBtdWx0aXBsZSBvZiAyMCBtc2VjIGFyZSBtZWFuaW5nbGVzcywgc28gdGhlCisgICByZWNlaXZlciBvZiBzdWNoIHB0aW1lIHZhbHVlcyBNVVNUIGlnbm9yZSB0aGVtLiAgSWYgZHVyaW5nIHRoZSBsaWZlCisgICBvZiBhbiBSVFAgc2Vzc2lvbiB0aGUgcHRpbWUgdmFsdWUgY2hhbmdlcywgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUKKyAgIFNwZWV4IGZyYW1lcyBmb3IgZXhhbXBsZSwgdGhlIFNEUCB2YWx1ZSBtdXN0IGFsc28gcmVmbGVjdCB0aGUgbmV3CisgICB2YWx1ZS4KKworICAgQ2FyZSBtdXN0IGJlIHRha2VuIHdoZW4gc2V0dGluZyB0aGUgdmFsdWUgb2YgcHRpbWUgc28gdGhhdCB0aGUgUlRQCisgICBwYWNrZXQgc2l6ZSBkb2VzIG5vdCBleGNlZWQgdGhlIHBhdGggTVRVLgorCisxMC4gIElUVSBILjMyMy9ILjI0NSBVc2Ugb2YgU3BlZXgKKworICAgQXBwbGljYXRpb24gaXMgdW5kZXJ3YXkgdG8gbWFrZSBTcGVleCBhIHN0YW5kYXJkIElUVSBjb2RlYy4gIEhvd2V2ZXIsCisgICB1bnRpbCB0aGF0IGlzIGZpbmFsaXplZCwgU3BlZXggTUFZIGJlIHVzZWQgaW4gSC4zMjMgWzVdIGJ5IHVzaW5nIGEKKyAgIG5vbi1zdGFuZGFyZCBjb2RlYyBibG9jayBkZWZpbml0aW9uIGluIHRoZSBILjI0NSBbNl0gY29kZWMgY2FwYWJpbGl0eQorICAgbmVnb3RpYXRpb25zLgorCisxMS4gIE5vblN0YW5kYXJkTWVzc2FnZSBmb3JtYXQKKworICAgRm9yIFNwZWV4IHVzZSBpbiBILjI0NSBbNl0gYmFzZWQgc3lzdGVtcywgdGhlIGZpZWxkcyBpbiB0aGUKKyAgIE5vblN0YW5kYXJkTWVzc2FnZSBzaG91bGQgYmU6CisKKworCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgRXhwaXJlcyBPY3RvYmVyIDMsIDIwMDUgICAgICAgICAgICAgICAgW1BhZ2UgMTBdCisKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAyICAgICAgICAgQXByaWwgMjAwNQorCisKKyAgICAgIHQzNUNvdW50cnlDb2RlICAgPSBIZXg6IEI1CisgICAgICB0MzVFeHRlbnNpb24gICAgID0gSGV4OiAwMAorICAgICAgbWFudWZhY3R1cmVyQ29kZSA9IEhleDogMDAyNgorICAgICAgW0xlbmd0aCBvZiB0aGUgQmluYXJ5IFNlcXVlbmNlICg4IGJpdCBudW1iZXIpXQorICAgICAgW0JpbmFyeSBTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIGFuIEFTQ0lJIHN0cmluZywgbm8gTlVMTAorICAgICAgdGVybWluYXRvcl0KKworICAgVGhlIGJpbmFyeSBzZXF1ZW5jZSBpcyBhbiBhc2NpaSBzdHJpbmcgbWVyZWx5IGZvciBlYXNlIG9mIHVzZS4gIFRoZQorICAgc3RyaW5nIGlzIG5vdCBudWxsIHRlcm1pbmF0ZWQuICBUaGUgZm9ybWF0IG9mIHRoaXMgc3RyaW5nIGlzCisKKyAgICAgIHNwZWV4IFtvcHRpb25hbCB2YXJpYWJsZXNdCisKKyAgIFRoZSBvcHRpb25hbCB2YXJpYWJsZXMgYXJlIGlkZW50aWNhbCB0byB0aG9zZSB1c2VkIGZvciB0aGUgU0RQIGE9Zm10cAorICAgc3RyaW5ncyBkaXNjdXNzZWQgaW4gc2VjdGlvbiA1IGFib3ZlLiAgVGhlIHN0cmluZyBpcyBidWlsdCB0byBiZSBhbGwKKyAgIG9uIG9uZSBsaW5lLCBlYWNoIGtleS12YWx1ZSBwYWlyIHNlcGFyYXRlZCBieSBhIHNlbWktY29sb24uICBUaGUKKyAgIG9wdGlvbmFsIHZhcmlhYmxlcyBNQVkgYmUgb21pdHRlZCwgd2hpY2ggY2F1c2VzIHRoZSBkZWZhdWx0IHZhbHVlcyB0bworICAgYmUgYXNzdW1lZC4gIFRoZXkgYXJlOgorCisgICAgICBlYnc9bmFycm93O21vZGU9Mzt2YnI9b2ZmO2NuZz1vZmY7cHRpbWU9MjA7c3I9ODAwMDtwZW5oPW5vOworCisgICBUaGUgZmlmdGggb2N0ZXQgb2YgdGhlIGJsb2NrIGlzIHRoZSBsZW5ndGggb2YgdGhlIGJpbmFyeSBzZXF1ZW5jZS4KKworICAgTk9URTogIHRoaXMgbWV0aG9kIGNhbiByZXN1bHQgaW4gdGhlIGFkdmVydGlzaW5nIG9mIGEgbGFyZ2UgbnVtYmVyIG9mCisgICBTcGVleCAnY29kZWNzJyBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHZhcmlhYmxlcyBwb3NzaWJsZS4gIEZvciBtb3N0CisgICBWb0lQIGFwcGxpY2F0aW9ucywgdXNlIG9mIHRoZSBkZWZhdWx0IGJpbmFyeSBzZXF1ZW5jZSBvZiAnc3BlZXgnIGlzCisgICBSRUNPTU1FTkRFRCB0byBiZSB1c2VkIGluIGFkZGl0aW9uIHRvIGFsbCBvdGhlciBvcHRpb25zLiAgVGhpcworICAgbWF4aW1pemVzIHRoZSBjaGFuY2VzIHRoYXQgdHdvIEguMzIzIGJhc2VkIGFwcGxpY2F0aW9ucyB0aGF0IHN1cHBvcnQKKyAgIFNwZWV4IGNhbiBmaW5kIGEgbXV0dWFsIGNvZGVjLgorCisxMi4gIFJUUCBQYXlsb2FkIFR5cGVzCisKKyAgIER5bmFtaWMgcGF5bG9hZCB0eXBlIGNvZGVzIE1VU1QgYmUgbmVnb3RpYXRlZCAnb3V0LW9mLWJhbmQnIGZvciB0aGUKKyAgIGFzc2lnbm1lbnQgb2YgYSBkeW5hbWljIHBheWxvYWQgdHlwZSBmcm9tIHRoZSByYW5nZSBvZiA5Ni0xMjcuICBILjMyMworICAgYXBwbGljYXRpb25zIE1VU1QgdXNlIHRoZSBILjI0NSBIMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycworICAgZW5jb2RpbmcgdG8gYWNjb21wbGlzaCB0aGlzLgorCisxMy4gIFNlY3VyaXR5IENvbnNpZGVyYXRpb25zCisKKyAgIFJUUCBwYWNrZXRzIHVzaW5nIHRoZSBwYXlsb2FkIGZvcm1hdCBkZWZpbmVkIGluIHRoaXMgc3BlY2lmaWNhdGlvbgorICAgYXJlIHN1YmplY3QgdG8gdGhlIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIGRpc2N1c3NlZCBpbiB0aGUgUlRQCisgICBzcGVjaWZpY2F0aW9uIFsyXSwgYW5kIGFueSBhcHByb3ByaWF0ZSBSVFAgcHJvZmlsZS4gIFRoaXMgaW1wbGllcworICAgdGhhdCBjb25maWRlbnRpYWxpdHkgb2YgdGhlIG1lZGlhIHN0cmVhbXMgaXMgYWNoaWV2ZWQgYnkgZW5jcnlwdGlvbi4KKyAgIEJlY2F1c2UgdGhlIGRhdGEgY29tcHJlc3Npb24gdXNlZCB3aXRoIHRoaXMgcGF5bG9hZCBmb3JtYXQgaXMgYXBwbGllZAorICAgZW5kLXRvLWVuZCwgZW5jcnlwdGlvbiBtYXkgYmUgcGVyZm9ybWVkIGFmdGVyIGNvbXByZXNzaW9uIHNvIHRoZXJlIGlzCisgICBubyBjb25mbGljdCBiZXR3ZWVuIHRoZSB0d28gb3BlcmF0aW9ucy4KKworICAgQSBwb3RlbnRpYWwgZGVuaWFsLW9mLXNlcnZpY2UgdGhyZWF0IGV4aXN0cyBmb3IgZGF0YSBlbmNvZGluZ3MgdXNpbmcKKyAgIGNvbXByZXNzaW9uIHRlY2huaXF1ZXMgdGhhdCBoYXZlIG5vbi11bmlmb3JtIHJlY2VpdmVyLWVuZAorCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgRXhwaXJlcyBPY3RvYmVyIDMsIDIwMDUgICAgICAgICAgICAgICAgW1BhZ2UgMTFdCisKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAyICAgICAgICAgQXByaWwgMjAwNQorCisKKyAgIGNvbXB1dGF0aW9uYWwgbG9hZC4gIFRoZSBhdHRhY2tlciBjYW4gaW5qZWN0IHBhdGhvbG9naWNhbCBkYXRhZ3JhbXMKKyAgIGludG8gdGhlIHN0cmVhbSB3aGljaCBhcmUgY29tcGxleCB0byBkZWNvZGUgYW5kIGNhdXNlIHRoZSByZWNlaXZlciB0bworICAgYmUgb3ZlcmxvYWRlZC4gIEhvd2V2ZXIsIHRoaXMgZW5jb2RpbmcgZG9lcyBub3QgZXhoaWJpdCBhbnkKKyAgIHNpZ25pZmljYW50IG5vbi11bmlmb3JtaXR5LgorCisgICBBcyB3aXRoIGFueSBJUC1iYXNlZCBwcm90b2NvbCwgaW4gc29tZSBjaXJjdW1zdGFuY2VzIGEgcmVjZWl2ZXIgbWF5CisgICBiZSBvdmVybG9hZGVkIHNpbXBseSBieSB0aGUgcmVjZWlwdCBvZiB0b28gbWFueSBwYWNrZXRzLCBlaXRoZXIKKyAgIGRlc2lyZWQgb3IgdW5kZXNpcmVkLiAgTmV0d29yay1sYXllciBhdXRoZW50aWNhdGlvbiBtYXkgYmUgdXNlZCB0bworICAgZGlzY2FyZCBwYWNrZXRzIGZyb20gdW5kZXNpcmVkIHNvdXJjZXMsIGJ1dCB0aGUgcHJvY2Vzc2luZyBjb3N0IG9mCisgICB0aGUgYXV0aGVudGljYXRpb24gaXRzZWxmIG1heSBiZSB0b28gaGlnaC4KKworMTQuICBBY2tub3dsZWRnbWVudHMKKworICAgVGhlIGF1dGhvcnMgd291bGQgbGlrZSB0byB0aGFuayBFcXVpdmFsZW5jZSBQdHkgTHRkIG9mIEF1c3RyYWxpYSBmb3IKKyAgIHRoZWlyIGFzc2lzdGFuY2UgaW4gYXR0ZW1wdGluZyB0byBzdGFuZGFyZGl6ZSB0aGUgdXNlIG9mIFNwZWV4IGluCisgICBILjMyMyBhcHBsaWNhdGlvbnMsIGFuZCBmb3IgaW1wbGVtZW50aW5nIFNwZWV4IGluIHRoZWlyIG9wZW4gc291cmNlCisgICBPcGVuSDMyMyBzdGFjay4gIFRoZSBhdXRob3JzIHdvdWxkIGFsc28gbGlrZSB0byB0aGFuayBCcmlhbiBDLiAgV2lsZXMKKyAgIDxicmlhbkBzdHJlYW1jb21tLmNvbT4gb2YgU3RyZWFtQ29tbSBmb3IgaGlzIGFzc2lzdGFuY2UgaW4gZGV2ZWxvcGluZworICAgdGhlIHByb3Bvc2VkIHN0YW5kYXJkIGZvciBTcGVleCB1c2UgaW4gSC4zMjMgYXBwbGljYXRpb25zLgorCisgICBUaGUgYXV0aG9ycyB3b3VsZCBhbHNvIGxpa2UgdG8gdGhhbmsgdGhlIGZvbGxvd2luZyBtZW1iZXJzIG9mIHRoZQorICAgU3BlZXggYW5kIEFWVCBjb21tdW5pdGllcyBmb3IgdGhlaXIgaW5wdXQ6ICBSb3NzIEZpbmxheXNvbiwgRmVkZXJpY28KKyAgIE1vbnRlc2lubyBQb3V6b2xzLCBIZW5uaW5nIFNjaHVsenJpbm5lLCBNYWdudXMgV2VzdGVybHVuZC4KKworMTUuICBSZWZlcmVuY2VzCisKKzE1LjEgIE5vcm1hdGl2ZSBSZWZlcmVuY2VzCisKKyAgIFsxXSAgQnJhZG5lciwgUy4sICJLZXkgd29yZHMgZm9yIHVzZSBpbiBSRkNzIHRvIEluZGljYXRlIFJlcXVpcmVtZW50CisgICAgICAgIExldmVscyIsIFJGQyAyMTE5LgorCisgICBbMl0gIFNjaHVsenJpbm5lLCBILiwgQ2FzbmVyLCBTLiwgRnJlZGVyaWNrLCBSLiBhbmQgVi4gSmFjb2Jzb24sCisgICAgICAgICJSVFA6IEEgVHJhbnNwb3J0IFByb3RvY29sIGZvciByZWFsLXRpbWUgYXBwbGljYXRpb25zIiwgUkZDCisgICAgICAgIDM1NTAuCisKKyAgIFszXSAgIk11bHRpcHVycG9zZSBJbnRlcm5ldCBNYWlsIEV4dGVuc2lvbnMgKE1JTUUpIFBhcnQgT25lOiBGb3JtYXQKKyAgICAgICAgb2YgSW50ZXJuZXQgTWVzc2FnZSBCb2RpZXMiLCBSRkMgMjA0NS4KKworICAgWzRdICBKYWNvYnNvbiwgVi4gYW5kIE0uIEhhbmRsZXksICJTRFA6IFNlc3Npb24gRGVzY3JpcHRpb24KKyAgICAgICAgUHJvdG9jb2wiLCBSRkMgMjMyNy4KKworICAgWzVdICAiUGFja2V0LWJhc2VkIE11bHRpbWVkaWEgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcyIsIElUVS1UCisgICAgICAgIFJlY29tbWVuZGF0aW9uIEguMzIzLgorCisgICBbNl0gICJDb250cm9sIG9mIGNvbW11bmljYXRpb25zIGJldHdlZW4gVmlzdWFsIFRlbGVwaG9uZSBTeXN0ZW1zIGFuZAorICAgICAgICBUZXJtaW5hbCBFcXVpcG1lbnQiLCBJVFUtVCBSZWNvbW1lbmRhdGlvbiBILjI0NS4KKworICAgWzddICBTY2h1bHpyaW5uZSwgSC4gYW5kIFMuIENhc25lciwgIlJUUCBQcm9maWxlIGZvciBBdWRpbyBhbmQgVmlkZW8KKworCisKK0hlcmxlaW4sIGV0IGFsLiAgICAgICAgIEV4cGlyZXMgT2N0b2JlciAzLCAyMDA1ICAgICAgICAgICAgICAgIFtQYWdlIDEyXQorCitJbnRlcm5ldC1EcmFmdCAgICAgZHJhZnQtaGVybGVpbi1zcGVleC1ydHAtcHJvZmlsZS0wMiAgICAgICAgIEFwcmlsIDIwMDUKKworCisgICAgICAgIENvbmZlcmVuY2VzIHdpdGggTWluaW1hbCBDb250cm9sLiIsIFJGQyAzNTUxLgorCisgICBbOF0gIFdhbGxlaWosIEwuLCAiVGhlIGFwcGxpY2F0aW9uL29nZyBNZWRpYSBUeXBlIiwgUkZDIDM1MzQuCisKKzE1LjIgIEluZm9ybWF0aXZlIFJlZmVyZW5jZXMKKworICAgWzldICAgIlNwZWV4ZW5jL3NwZWV4ZGVjLCByZWZlcmVuY2UgY29tbWFuZC1saW5lIGVuY29kZXIvZGVjb2RlciIsCisgICAgICAgICBTcGVleCB3ZWJzaXRlIGh0dHA6Ly93d3cuc3BlZXgub3JnLy4KKworICAgWzEwXSAgIkNFTFAsIFUuUy4gRmVkZXJhbCBTdGFuZGFyZCAxMDE2LiIsIE5hdGlvbmFsIFRlY2huaWNhbAorICAgICAgICAgSW5mb3JtYXRpb24gU2VydmljZSAoTlRJUykgd2Vic2l0ZSBodHRwOi8vd3d3Lm50aXMuZ292Ly4KKworCitBdXRob3JzJyBBZGRyZXNzZXMKKworICAgR3JlZyBIZXJsZWluCisgICAyMDM0IEZpbGJlcnQgU3RyZWV0CisgICBTYW4gRnJhbmNpc2NvLCBDYWxpZm9ybmlhICA5NDEyMworICAgVW5pdGVkIFN0YXRlcworCisgICBFTWFpbDogZ2hlcmxlaW5AaGVybGVpbi5jb20KKworCisgICBTaW1vbiBNb3JsYXQKKyAgIDM1LCBhdiBkZSBWaXppbGxlIEFwcCA0MgorICAgR3Jlbm9ibGUgIDM4MDAwCisgICBGcmFuY2UKKworICAgRU1haWw6IHNpbW9uLm1vcmxhdEBsaW5waG9uZS5vcmcKKworCisgICBKZWFuLU1hcmMgVmFsaW4KKyAgIERlcGFydG1lbnQgb2YgRWxlY3RyaWNhbCBhbmQgQ29tcHV0ZXIgRW5naW5lZXJpbmcKKyAgIFVuaXZlcnNpdHkgb2YgU2hlcmJyb29rZQorICAgMjUwMCBibHZkIFVuaXZlcnNpdGUKKyAgIFNoZXJicm9va2UsIFF1ZWJlYyAgSjFLIDJSMQorICAgQ2FuYWRhCisKKyAgIEVNYWlsOiBqZWFuLW1hcmMudmFsaW5AaGVybWVzLnVzaGVyYi5jYQorCisKKyAgIFJvZ2VyIEhhcmRpbWFuCisgICA0OSBOZXR0bGV0b24gUm9hZAorICAgQ2hlbHRlbmhhbSwgR2xvdWNlc3RlcnNoaXJlICBHTDUxIDZOUgorICAgRW5nbGFuZAorCisgICBFTWFpbDogcm9nZXJAZnJlZWJzZC5vcmcKKworCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgRXhwaXJlcyBPY3RvYmVyIDMsIDIwMDUgICAgICAgICAgICAgICAgW1BhZ2UgMTNdCisKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAyICAgICAgICAgQXByaWwgMjAwNQorCisKKyAgIFBoaWwgS2VycgorICAgRW5nbGFuZAorCisgICBFTWFpbDogcGhpbEBwbHVzMjQuY29tCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgRXhwaXJlcyBPY3RvYmVyIDMsIDIwMDUgICAgICAgICAgICAgICAgW1BhZ2UgMTRdCisKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAyICAgICAgICAgQXByaWwgMjAwNQorCisKK0ludGVsbGVjdHVhbCBQcm9wZXJ0eSBTdGF0ZW1lbnQKKworICAgVGhlIElFVEYgdGFrZXMgbm8gcG9zaXRpb24gcmVnYXJkaW5nIHRoZSB2YWxpZGl0eSBvciBzY29wZSBvZiBhbnkKKyAgIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMgb3Igb3RoZXIgcmlnaHRzIHRoYXQgbWlnaHQgYmUgY2xhaW1lZCB0bworICAgcGVydGFpbiB0byB0aGUgaW1wbGVtZW50YXRpb24gb3IgdXNlIG9mIHRoZSB0ZWNobm9sb2d5IGRlc2NyaWJlZCBpbgorICAgdGhpcyBkb2N1bWVudCBvciB0aGUgZXh0ZW50IHRvIHdoaWNoIGFueSBsaWNlbnNlIHVuZGVyIHN1Y2ggcmlnaHRzCisgICBtaWdodCBvciBtaWdodCBub3QgYmUgYXZhaWxhYmxlOyBub3IgZG9lcyBpdCByZXByZXNlbnQgdGhhdCBpdCBoYXMKKyAgIG1hZGUgYW55IGluZGVwZW5kZW50IGVmZm9ydCB0byBpZGVudGlmeSBhbnkgc3VjaCByaWdodHMuICBJbmZvcm1hdGlvbgorICAgb24gdGhlIHByb2NlZHVyZXMgd2l0aCByZXNwZWN0IHRvIHJpZ2h0cyBpbiBSRkMgZG9jdW1lbnRzIGNhbiBiZQorICAgZm91bmQgaW4gQkNQIDc4IGFuZCBCQ1AgNzkuCisKKyAgIENvcGllcyBvZiBJUFIgZGlzY2xvc3VyZXMgbWFkZSB0byB0aGUgSUVURiBTZWNyZXRhcmlhdCBhbmQgYW55CisgICBhc3N1cmFuY2VzIG9mIGxpY2Vuc2VzIHRvIGJlIG1hZGUgYXZhaWxhYmxlLCBvciB0aGUgcmVzdWx0IG9mIGFuCisgICBhdHRlbXB0IG1hZGUgdG8gb2J0YWluIGEgZ2VuZXJhbCBsaWNlbnNlIG9yIHBlcm1pc3Npb24gZm9yIHRoZSB1c2Ugb2YKKyAgIHN1Y2ggcHJvcHJpZXRhcnkgcmlnaHRzIGJ5IGltcGxlbWVudGVycyBvciB1c2VycyBvZiB0aGlzCisgICBzcGVjaWZpY2F0aW9uIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSBJRVRGIG9uLWxpbmUgSVBSIHJlcG9zaXRvcnkgYXQKKyAgIGh0dHA6Ly93d3cuaWV0Zi5vcmcvaXByLgorCisgICBUaGUgSUVURiBpbnZpdGVzIGFueSBpbnRlcmVzdGVkIHBhcnR5IHRvIGJyaW5nIHRvIGl0cyBhdHRlbnRpb24gYW55CisgICBjb3B5cmlnaHRzLCBwYXRlbnRzIG9yIHBhdGVudCBhcHBsaWNhdGlvbnMsIG9yIG90aGVyIHByb3ByaWV0YXJ5CisgICByaWdodHMgdGhhdCBtYXkgY292ZXIgdGVjaG5vbG9neSB0aGF0IG1heSBiZSByZXF1aXJlZCB0byBpbXBsZW1lbnQKKyAgIHRoaXMgc3RhbmRhcmQuICBQbGVhc2UgYWRkcmVzcyB0aGUgaW5mb3JtYXRpb24gdG8gdGhlIElFVEYgYXQKKyAgIGlldGYtaXByQGlldGYub3JnLgorCisKK0Rpc2NsYWltZXIgb2YgVmFsaWRpdHkKKworICAgVGhpcyBkb2N1bWVudCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gYXJlIHByb3ZpZGVkIG9uIGFuCisgICAiQVMgSVMiIGJhc2lzIGFuZCBUSEUgQ09OVFJJQlVUT1IsIFRIRSBPUkdBTklaQVRJT04gSEUvU0hFIFJFUFJFU0VOVFMKKyAgIE9SIElTIFNQT05TT1JFRCBCWSAoSUYgQU5ZKSwgVEhFIElOVEVSTkVUIFNPQ0lFVFkgQU5EIFRIRSBJTlRFUk5FVAorICAgRU5HSU5FRVJJTkcgVEFTSyBGT1JDRSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELAorICAgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBBTlkgV0FSUkFOVFkgVEhBVCBUSEUgVVNFIE9GIFRIRQorICAgSU5GT1JNQVRJT04gSEVSRUlOIFdJTEwgTk9UIElORlJJTkdFIEFOWSBSSUdIVFMgT1IgQU5ZIElNUExJRUQKKyAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisKK0NvcHlyaWdodCBTdGF0ZW1lbnQKKworICAgQ29weXJpZ2h0IChDKSBUaGUgSW50ZXJuZXQgU29jaWV0eSAoMjAwNSkuICBUaGlzIGRvY3VtZW50IGlzIHN1YmplY3QKKyAgIHRvIHRoZSByaWdodHMsIGxpY2Vuc2VzIGFuZCByZXN0cmljdGlvbnMgY29udGFpbmVkIGluIEJDUCA3OCwgYW5kCisgICBleGNlcHQgYXMgc2V0IGZvcnRoIHRoZXJlaW4sIHRoZSBhdXRob3JzIHJldGFpbiBhbGwgdGhlaXIgcmlnaHRzLgorCisKK0Fja25vd2xlZGdtZW50CisKKyAgIEZ1bmRpbmcgZm9yIHRoZSBSRkMgRWRpdG9yIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBwcm92aWRlZCBieSB0aGUKKyAgIEludGVybmV0IFNvY2lldHkuCisKKworCisKK0hlcmxlaW4sIGV0IGFsLiAgICAgICAgIEV4cGlyZXMgT2N0b2JlciAzLCAyMDA1ICAgICAgICAgICAgICAgIFtQYWdlIDE1XQorCisKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2RvYy9kcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAzLnR4dCBiLzNyZHBhcnR5L3NwZWV4L2RvYy9kcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWFkNGIzCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvZG9jL2RyYWZ0LWhlcmxlaW4tc3BlZXgtcnRwLXByb2ZpbGUtMDMudHh0CkBAIC0wLDAgKzEsMTIzMiBAQAorCisKK0FWVCBXb3JraW5nIEdyb3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRy4gSGVybGVpbgorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUy4gTW9ybGF0CitFeHBpcmVzOiBKdWx5IDIsIDIwMDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKLiBKZWFuLU1hcmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSLiBIYXJkaW1hbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQLiBLZXJyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEphbnVhcnkgMDEsIDIwMDUKKworCisgICAgICAgICAgICAgICAgICAgZHJhZnQtaGVybGVpbi1zcGVleC1ydHAtcHJvZmlsZS0wMworICAgICAgICAgICAgICAgICBSVFAgUGF5bG9hZCBGb3JtYXQgZm9yIHRoZSBTcGVleCBDb2RlYworCitTdGF0dXMgb2YgdGhpcyBNZW1vCisKKyAgIFRoaXMgZG9jdW1lbnQgaXMgYW4gSW50ZXJuZXQtRHJhZnQgYW5kIGlzIHN1YmplY3QgdG8gYWxsIHByb3Zpc2lvbnMKKyAgIG9mIHNlY3Rpb24gMyBvZiBSRkMgMzY2Ny4gIEJ5IHN1Ym1pdHRpbmcgdGhpcyBJbnRlcm5ldC1EcmFmdCwgZWFjaAorICAgYXV0aG9yIHJlcHJlc2VudHMgdGhhdCBhbnkgYXBwbGljYWJsZSBwYXRlbnQgb3Igb3RoZXIgSVBSIGNsYWltcyBvZgorICAgd2hpY2ggaGUgb3Igc2hlIGlzIGF3YXJlIGhhdmUgYmVlbiBvciB3aWxsIGJlIGRpc2Nsb3NlZCwgYW5kIGFueSBvZgorICAgd2hpY2ggaGUgb3Igc2hlIGJlY29tZSBhd2FyZSB3aWxsIGJlIGRpc2Nsb3NlZCwgaW4gYWNjb3JkYW5jZSB3aXRoCisgICBSRkMgMzY2OC4KKworICAgSW50ZXJuZXQtRHJhZnRzIGFyZSB3b3JraW5nIGRvY3VtZW50cyBvZiB0aGUgSW50ZXJuZXQgRW5naW5lZXJpbmcKKyAgIFRhc2sgRm9yY2UgKElFVEYpLCBpdHMgYXJlYXMsIGFuZCBpdHMgd29ya2luZyBncm91cHMuICBOb3RlIHRoYXQKKyAgIG90aGVyIGdyb3VwcyBtYXkgYWxzbyBkaXN0cmlidXRlIHdvcmtpbmcgZG9jdW1lbnRzIGFzCisgICBJbnRlcm5ldC1EcmFmdHMuCisKKyAgIEludGVybmV0LURyYWZ0cyBhcmUgZHJhZnQgZG9jdW1lbnRzIHZhbGlkIGZvciBhIG1heGltdW0gb2Ygc2l4IG1vbnRocworICAgYW5kIG1heSBiZSB1cGRhdGVkLCByZXBsYWNlZCwgb3Igb2Jzb2xldGVkIGJ5IG90aGVyIGRvY3VtZW50cyBhdCBhbnkKKyAgIHRpbWUuICBJdCBpcyBpbmFwcHJvcHJpYXRlIHRvIHVzZSBJbnRlcm5ldC1EcmFmdHMgYXMgcmVmZXJlbmNlCisgICBtYXRlcmlhbCBvciB0byBjaXRlIHRoZW0gb3RoZXIgdGhhbiBhcyAid29yayBpbiBwcm9ncmVzcy4iCisKKyAgIFRoZSBsaXN0IG9mIGN1cnJlbnQgSW50ZXJuZXQtRHJhZnRzIGNhbiBiZSBhY2Nlc3NlZCBhdAorICAgaHR0cDovL3d3dy5pZXRmLm9yZy9pZXRmLzFpZC1hYnN0cmFjdHMudHh0LgorCisgICBUaGUgbGlzdCBvZiBJbnRlcm5ldC1EcmFmdCBTaGFkb3cgRGlyZWN0b3JpZXMgY2FuIGJlIGFjY2Vzc2VkIGF0CisgICBodHRwOi8vd3d3LmlldGYub3JnL3NoYWRvdy5odG1sLgorCisgICBUaGlzIEludGVybmV0LURyYWZ0IHdpbGwgZXhwaXJlIG9uIEp1bHkgMiwgMjAwNS4KKworQ29weXJpZ2h0IE5vdGljZQorCisgICBDb3B5cmlnaHQgKEMpIFRoZSBJbnRlcm5ldCBTb2NpZXR5ICgyMDA1KS4KKworQWJzdHJhY3QKKworICAgU3BlZXggaXMgYW4gb3Blbi1zb3VyY2Ugdm9pY2UgY29kZWMgc3VpdGFibGUgZm9yIHVzZSBpbiBWb2ljZSBvdmVyIElQCisgICAoVm9JUCkgdHlwZSBhcHBsaWNhdGlvbnMuICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgcGF5bG9hZCBmb3JtYXQKKyAgIGZvciBTcGVleCBnZW5lcmF0ZWQgYml0IHN0cmVhbXMgd2l0aGluIGFuIFJUUCBwYWNrZXQuICBBbHNvIGluY2x1ZGVkCisgICBoZXJlIGFyZSB0aGUgbmVjZXNzYXJ5IGRldGFpbHMgZm9yIHRoZSB1c2Ugb2YgU3BlZXggd2l0aCB0aGUgU2Vzc2lvbgorICAgRGVzY3JpcHRpb24gUHJvdG9jb2wgKFNEUCkgYW5kIGEgcHJlbGltaW5hcnkgbWV0aG9kIG9mIHVzaW5nIFNwZWV4CisKKworCitIZXJsZWluLCBldCBhbC4gICAgICAgICAgIEV4cGlyZXMgSnVseSAyLCAyMDA1ICAgICAgICAgICAgICAgICAgW1BhZ2UgMV0KKwwKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAzICAgICAgIEphbnVhcnkgMjAwNQorCisKKyAgIHdpdGhpbiBILjMyMyBhcHBsaWNhdGlvbnMuCisKK1RhYmxlIG9mIENvbnRlbnRzCisKKyAgIDEuICAgQ29udmVudGlvbnMgdXNlZCBpbiB0aGlzIGRvY3VtZW50ICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgMworICAgMi4gICBPdmVydmlldyBvZiB0aGUgU3BlZXggQ29kZWMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICA0CisgICAzLiAgIFJUUCBwYXlsb2FkIGZvcm1hdCBmb3IgU3BlZXggLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgIDUKKyAgIDQuICAgUlRQIEhlYWRlciAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgNgorICAgNS4gICBTcGVleCBwYXlsb2FkICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICA4CisgICA2LiAgIEV4YW1wbGUgU3BlZXggcGFja2V0IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgIDkKKyAgIDcuICAgTXVsdGlwbGUgU3BlZXggZnJhbWVzIGluIGEgUlRQIHBhY2tldCAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAxMAorICAgOC4gICBNSU1FIHJlZ2lzdHJhdGlvbiBvZiBTcGVleCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDExCisgICA5LiAgIFNEUCB1c2FnZSBvZiBTcGVleCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTIKKyAgIDEwLiAgSVRVIEguMzIzL0guMjQ1IFVzZSBvZiBTcGVleCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAxNQorICAgMTEuICBOb25TdGFuZGFyZE1lc3NhZ2UgZm9ybWF0ICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDE2CisgICAxMi4gIFJUUCBQYXlsb2FkIFR5cGVzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTcKKyAgIDEzLiAgU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAxOAorICAgMTQuICBBY2tub3dsZWRnbWVudHMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDE5CisgICAxNS4gIFJlZmVyZW5jZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMjAKKyAgIDE1LjEgICBOb3JtYXRpdmUgUmVmZXJlbmNlcyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAyMAorICAgMTUuMiAgIEluZm9ybWF0aXZlIFJlZmVyZW5jZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDIwCisgICAgICAgIEF1dGhvcnMnIEFkZHJlc3NlcyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMjAKKyAgICAgICAgSW50ZWxsZWN0dWFsIFByb3BlcnR5IGFuZCBDb3B5cmlnaHQgU3RhdGVtZW50cyAuIC4gLiAuIC4gLiAuICAyMgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitIZXJsZWluLCBldCBhbC4gICAgICAgICAgIEV4cGlyZXMgSnVseSAyLCAyMDA1ICAgICAgICAgICAgICAgICAgW1BhZ2UgMl0KKwwKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAzICAgICAgIEphbnVhcnkgMjAwNQorCisKKzEuICBDb252ZW50aW9ucyB1c2VkIGluIHRoaXMgZG9jdW1lbnQKKworICAgVGhlIGtleSB3b3JkcyAiTVVTVCIsICJNVVNUIE5PVCIsICJSRVFVSVJFRCIsICJTSEFMTCIsICJTSEFMTCBOT1QiLAorICAgIlNIT1VMRCIsICJTSE9VTEQgTk9UIiwgIlJFQ09NTUVOREVEIiwgIk1BWSIsIGFuZCAiT1BUSU9OQUwiIGluIHRoaXMKKyAgIGRvY3VtZW50IGFyZSB0byBiZSBpbnRlcnByZXRlZCBhcyBkZXNjcmliZWQgaW4gUkZDIDIxMTkgWzFdLgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitIZXJsZWluLCBldCBhbC4gICAgICAgICAgIEV4cGlyZXMgSnVseSAyLCAyMDA1ICAgICAgICAgICAgICAgICAgW1BhZ2UgM10KKwwKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAzICAgICAgIEphbnVhcnkgMjAwNQorCisKKzIuICBPdmVydmlldyBvZiB0aGUgU3BlZXggQ29kZWMKKworICAgU3BlZXggaXMgYmFzZWQgb24gdGhlIENFTFAgWzEwXSBlbmNvZGluZyB0ZWNobmlxdWUgd2l0aCBzdXBwb3J0IGZvcgorICAgZWl0aGVyIG5hcnJvd2JhbmQgKG5vbWluYWwgOGtIeiksIHdpZGViYW5kIChub21pbmFsIDE2a0h6KSBvcgorICAgdWx0cmEtd2lkZWJhbmQgKG5vbWluYWwgMzJrSHopLCBhbmQgKG5vbi1vcHRpbWFsKSByYXRlcyB1cCB0byA0OCBrSHoKKyAgIHNhbXBsaW5nIGFsc28gYXZhaWxhYmxlLiAgVGhlIG1haW4gY2hhcmFjdGVyaXN0aWNzIGNhbiBiZSBzdW1tYXJpemVkCisgICBhcyBmb2xsb3dzOgorCisgICBvICBGcmVlIHNvZnR3YXJlL29wZW4tc291cmNlCisgICBvICBJbnRlZ3JhdGlvbiBvZiB3aWRlYmFuZCBhbmQgbmFycm93YmFuZCBpbiB0aGUgc2FtZSBiaXQtc3RyZWFtCisgICBvICBXaWRlIHJhbmdlIG9mIGJpdC1yYXRlcyBhdmFpbGFibGUKKyAgIG8gIER5bmFtaWMgYml0LXJhdGUgc3dpdGNoaW5nIGFuZCB2YXJpYWJsZSBiaXQtcmF0ZSAoVkJSKQorICAgbyAgVm9pY2UgQWN0aXZpdHkgRGV0ZWN0aW9uIChWQUQsIGludGVncmF0ZWQgd2l0aCBWQlIpCisgICBvICBWYXJpYWJsZSBjb21wbGV4aXR5CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK0hlcmxlaW4sIGV0IGFsLiAgICAgICAgICAgRXhwaXJlcyBKdWx5IDIsIDIwMDUgICAgICAgICAgICAgICAgICBbUGFnZSA0XQorDAorSW50ZXJuZXQtRHJhZnQgICAgIGRyYWZ0LWhlcmxlaW4tc3BlZXgtcnRwLXByb2ZpbGUtMDMgICAgICAgSmFudWFyeSAyMDA1CisKKworMy4gIFJUUCBwYXlsb2FkIGZvcm1hdCBmb3IgU3BlZXgKKworICAgRm9yIFJUUCBiYXNlZCB0cmFuc3BvcnRhdGlvbiBvZiBTcGVleCBlbmNvZGVkIGF1ZGlvIHRoZSBzdGFuZGFyZCBSVFAKKyAgIGhlYWRlciBbMl0gaXMgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgcGF5bG9hZCBkYXRhIGJsb2Nrcy4gIEFuCisgICBvcHRpb25hbCBwYWRkaW5nIHRlcm1pbmF0b3IgbWF5IGFsc28gYmUgdXNlZC4KKworICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMworICAgICAgICAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCisgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgUlRQIEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rCisgICAgICAgIHwgICAgICAgICAgICAgICAgIG9uZSBvciBtb3JlIGZyYW1lcyBvZiBTcGVleCAuLi4uICAgICAgICAgICAgICB8CisgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgIHwgICAgICAgIG9uZSBvciBtb3JlIGZyYW1lcyBvZiBTcGVleCAuLi4uICAgICAgIHwgICAgcGFkZGluZyAgICB8CisgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitIZXJsZWluLCBldCBhbC4gICAgICAgICAgIEV4cGlyZXMgSnVseSAyLCAyMDA1ICAgICAgICAgICAgICAgICAgW1BhZ2UgNV0KKwwKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAzICAgICAgIEphbnVhcnkgMjAwNQorCisKKzQuICBSVFAgSGVhZGVyCisKKyAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyAgICAgICAgIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQorICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICB8Vj0yfFB8WHwgIENDICAgfE18ICAgICBQVCAgICAgIHwgICAgICAgc2VxdWVuY2UgbnVtYmVyICAgICAgICAgfAorICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICB8ICAgICAgICAgICBzeW5jaHJvbml6YXRpb24gc291cmNlIChTU1JDKSBpZGVudGlmaWVyICAgICAgICAgICAgfAorICAgICAgICArPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9KworICAgICAgICB8ICAgICAgICAgICAgY29udHJpYnV0aW5nIHNvdXJjZSAoQ1NSQykgaWRlbnRpZmllcnMgICAgICAgICAgICAgfAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgICBUaGUgUlRQIGhlYWRlciBiZWdpbnMgd2l0aCBhbiBvY3RldCBvZiBmaWVsZHMgKFYsIFAsIFgsIGFuZCBDQykgdG8KKyAgIHN1cHBvcnQgc3BlY2lhbGl6ZWQgUlRQIHVzZXMgKHNlZSBbMl0gYW5kIFs3XSBmb3IgZGV0YWlscykuICBGb3IKKyAgIFNwZWV4IHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSB1c2VkLgorCisgICBWZXJzaW9uIChWKTogMiBiaXRzCisKKyAgIFRoaXMgZmllbGQgaWRlbnRpZmllcyB0aGUgdmVyc2lvbiBvZiBSVFAuICBUaGUgdmVyc2lvbiB1c2VkIGJ5IHRoaXMKKyAgIHNwZWNpZmljYXRpb24gaXMgdHdvIFsyXS4KKworICAgUGFkZGluZyAoUCk6IDEgYml0CisKKyAgIElmIHRoZSBwYWRkaW5nIGJpdCBpcyBzZXQsIHRoZSBwYWNrZXQgY29udGFpbnMgb25lIG9yIG1vcmUgYWRkaXRpb25hbAorICAgcGFkZGluZyBvY3RldHMgYXQgdGhlIGVuZCB3aGljaCBhcmUgbm90IHBhcnQgb2YgdGhlIHBheWxvYWQuICBQIGlzCisgICBzZXQgaWYgdGhlIHRvdGFsIHBhY2tldCBzaXplIGlzIGxlc3MgdGhhbiB0aGUgTVRVLgorCisgICBFeHRlbnNpb24gKFgpOiAxIGJpdAorCisgICBJZiB0aGUgZXh0ZW5zaW9uLCBYLCBiaXQgaXMgc2V0LCB0aGUgZml4ZWQgaGVhZGVyIE1VU1QgYmUgZm9sbG93ZWQgYnkKKyAgIGV4YWN0bHkgb25lIGhlYWRlciBleHRlbnNpb24sIHdpdGggYSBmb3JtYXQgZGVmaW5lZCBpbiBTZWN0aW9uIDUuMy4xLgorICAgb2YgWzJdLgorCisgICBDU1JDIGNvdW50IChDQyk6IDQgYml0cworCisgICBUaGUgQ1NSQyBjb3VudCBjb250YWlucyB0aGUgbnVtYmVyIG9mIENTUkMgaWRlbnRpZmllcnMuCisKKyAgIE1hcmtlciAoTSk6IDEgYml0CisKKyAgIFRoZSBNIGJpdCBpbmRpY2F0ZXMgaWYgdGhlIHBhY2tldCBjb250YWlucyBjb21mb3J0IG5vaXNlLiAgVGhpcyBmaWVsZAorICAgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjbmcgU0RQIGF0dHJpYnV0ZSBhbmQgaXMgZGV0YWlsZWQKKyAgIGZ1cnRoZXIgaW4gc2VjdGlvbiA1IGJlbG93LiAgSW4gbm9ybWFsIHVzYWdlIHRoaXMgYml0IGlzIHNldCBpZiB0aGUKKyAgIHBhY2tldCBjb250YWlucyBjb21mb3J0IG5vaXNlLgorCisgICBQYXlsb2FkIFR5cGUgKFBUKTogNyBiaXRzCisKKworCitIZXJsZWluLCBldCBhbC4gICAgICAgICAgIEV4cGlyZXMgSnVseSAyLCAyMDA1ICAgICAgICAgICAgICAgICAgW1BhZ2UgNl0KKwwKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAzICAgICAgIEphbnVhcnkgMjAwNQorCisKKyAgIEFuIFJUUCBwcm9maWxlIGZvciBhIGNsYXNzIG9mIGFwcGxpY2F0aW9ucyBpcyBleHBlY3RlZCB0byBhc3NpZ24gYQorICAgcGF5bG9hZCB0eXBlIGZvciB0aGlzIGZvcm1hdCwgb3IgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgcGF5bG9hZCB0eXBlCisgICBTSE9VTEQgYmUgY2hvc2VuIHdoaWNoIGRlc2lnbmF0ZXMgdGhlIHBheWxvYWQgYXMgU3BlZXguCisKKyAgIFNlcXVlbmNlIG51bWJlcjogMTYgYml0cworCisgICBUaGUgc2VxdWVuY2UgbnVtYmVyIGluY3JlbWVudHMgYnkgb25lIGZvciBlYWNoIFJUUCBkYXRhIHBhY2tldCBzZW50LAorICAgYW5kIG1heSBiZSB1c2VkIGJ5IHRoZSByZWNlaXZlciB0byBkZXRlY3QgcGFja2V0IGxvc3MgYW5kIHRvIHJlc3RvcmUKKyAgIHBhY2tldCBzZXF1ZW5jZS4gIFRoaXMgZmllbGQgaXMgZGV0YWlsZWQgZnVydGhlciBpbiBbMl0uCisKKyAgIFRpbWVzdGFtcDogMzIgYml0cworCisgICBBIHRpbWVzdGFtcCByZXByZXNlbnRpbmcgdGhlIHNhbXBsaW5nIHRpbWUgb2YgdGhlIGZpcnN0IHNhbXBsZSBvZiB0aGUKKyAgIGZpcnN0IFNwZWV4IHBhY2tldCBpbiB0aGUgUlRQIHBhY2tldC4gIFRoZSBjbG9jayBmcmVxdWVuY3kgTVVTVCBiZQorICAgc2V0IHRvIHRoZSBzYW1wbGUgcmF0ZSBvZiB0aGUgZW5jb2RlZCBhdWRpbyBkYXRhLiAgU3BlZXggdXNlcyAyMCBtc2VjCisgICBmcmFtZXMgYW5kIGEgdmFyaWFibGUgc2FtcGxpbmcgcmF0ZSBjbG9jay4gIFRoZSBSVFAgdGltZXN0YW1wIE1VU1QgYmUKKyAgIGluIHVuaXRzIG9mIDEvWCBvZiBhIHNlY29uZCB3aGVyZSBYIGlzIHRoZSBzYW1wbGUgcmF0ZSB1c2VkLiAgU3BlZXgKKyAgIHVzZXMgYSBub21pbmFsIDhrSHogc2FtcGxpbmcgcmF0ZSBmb3IgbmFycm93YmFuZCB1c2UsIGEgbm9taW5hbCAxNmtIegorICAgc2FtcGxpbmcgcmF0ZSBmb3Igd2lkZWJhbmQgdXNlLCBhbmQgYSBub21pbmFsIDMya0h6IHNhbXBsaW5nIHJhdGUgZm9yCisgICB1bHRyYS13aWRlYmFuZCB1c2UuCisKKyAgIFNTUkMvQ1NSQyBpZGVudGlmaWVyczoKKworICAgVGhlc2UgdHdvIGZpZWxkcywgMzIgYml0cyBlYWNoIHdpdGggb25lIFNTUkMgZmllbGQgYW5kIGEgbWF4aW11bSBvZgorICAgMTYgQ1NSQyBmaWVsZHMsIGFyZSBhcyBkZWZpbmVkIGluIFsyXS4KKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitIZXJsZWluLCBldCBhbC4gICAgICAgICAgIEV4cGlyZXMgSnVseSAyLCAyMDA1ICAgICAgICAgICAgICAgICAgW1BhZ2UgN10KKwwKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAzICAgICAgIEphbnVhcnkgMjAwNQorCisKKzUuICBTcGVleCBwYXlsb2FkCisKKyAgIEZvciB0aGUgcHVycG9zZXMgb2YgcGFja2V0aXppbmcgdGhlIGJpdCBzdHJlYW0gaW4gUlRQLCBpdCBpcyBvbmx5CisgICBuZWNlc3NhcnkgdG8gY29uc2lkZXIgdGhlIHNlcXVlbmNlIG9mIGJpdHMgYXMgb3V0cHV0IGJ5IHRoZSBTcGVleAorICAgZW5jb2RlciBbOV0sIGFuZCBwcmVzZW50IHRoZSBzYW1lIHNlcXVlbmNlIHRvIHRoZSBkZWNvZGVyLiAgVGhlCisgICBwYXlsb2FkIGZvcm1hdCBkZXNjcmliZWQgaGVyZSBtYWludGFpbnMgdGhpcyBzZXF1ZW5jZS4KKworICAgQSB0eXBpY2FsIFNwZWV4IGZyYW1lLCBlbmNvZGVkIGF0IHRoZSBtYXhpbXVtIGJpdHJhdGUsIGlzIGFwcHJveC4KKyAgIDExMCBvY3RldHMgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgU3BlZXggZnJhbWVzIFNIT1VMRCBiZSBrZXB0IGxlc3MKKyAgIHRoYW4gdGhlIHBhdGggTVRVIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gIFNwZWV4IGZyYW1lcyBNVVNUIE5PVCBiZQorICAgZnJhZ21lbnRlZCBhY3Jvc3MgbXVsdGlwbGUgUlRQIHBhY2tldHMsCisKKyAgIEFuIFJUUCBwYWNrZXQgTUFZIGNvbnRhaW4gU3BlZXggZnJhbWVzIG9mIHRoZSBzYW1lIGJpdCByYXRlIG9yIG9mCisgICB2YXJ5aW5nIGJpdCByYXRlcywgc2luY2UgdGhlIGJpdC1yYXRlIGZvciBhIGZyYW1lIGlzIGNvbnZleWVkIGluIGJhbmQKKyAgIHdpdGggdGhlIHNpZ25hbC4KKworICAgVGhlIGVuY29kaW5nIGFuZCBkZWNvZGluZyBhbGdvcml0aG0gY2FuIGNoYW5nZSB0aGUgYml0IHJhdGUgYXQgYW55IDIwCisgICBtc2VjIGZyYW1lIGJvdW5kYXJ5LCB3aXRoIHRoZSBiaXQgcmF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uIHByb3ZpZGVkCisgICBpbi1iYW5kIHdpdGggdGhlIGJpdCBzdHJlYW0uICBFYWNoIGZyYW1lIGNvbnRhaW5zIGJvdGggIm1vZGUiCisgICAobmFycm93YmFuZCwgd2lkZWJhbmQgb3IgdWx0cmEtd2lkZWJhbmQpIGFuZCAic3ViLW1vZGUiIChiaXQtcmF0ZSkKKyAgIGluZm9ybWF0aW9uIGluIHRoZSBiaXQgc3RyZWFtLiAgTm8gb3V0LW9mLWJhbmQgbm90aWZpY2F0aW9uIGlzCisgICByZXF1aXJlZCBmb3IgdGhlIGRlY29kZXIgdG8gcHJvY2VzcyBjaGFuZ2VzIGluIHRoZSBiaXQgcmF0ZSBzZW50IGJ5CisgICB0aGUgZW5jb2Rlci4KKworICAgSXQgaXMgUkVDT01NRU5ERUQgdGhhdCB2YWx1ZXMgb2YgODAwMCwgMTYwMDAgYW5kIDMyMDAwIGJlIHVzZWQgZm9yCisgICBub3JtYWwgaW50ZXJuZXQgdGVsZXBob255IGFwcGxpY2F0aW9ucywgdGhvdWdoIHRoZSBzYW1wbGUgcmF0ZSBpcworICAgc3VwcG9ydGVkIGF0IHJhdGVzIGFzIGxvdyBhcyA2MDAwIEh6IGFuZCBhcyBoaWdoIGFzIDQ4IGtIei4KKworICAgVGhlIFJUUCBwYXlsb2FkIE1VU1QgYmUgcGFkZGVkIHRvIHByb3ZpZGUgYW4gaW50ZWdlciBudW1iZXIgb2Ygb2N0ZXRzCisgICBhcyB0aGUgcGF5bG9hZCBsZW5ndGguICBUaGVzZSBwYWRkaW5nIGJpdHMgYXJlIExTQiBhbGlnbmVkIGluIG5ldHdvcmsKKyAgIG9jdGV0IG9yZGVyIGFuZCBjb25zaXN0IG9mIGEgMCBmb2xsb3dlZCBieSBhbGwgb25lcyAodW50aWwgdGhlIGVuZCBvZgorICAgdGhlIG9jdGV0KS4gIFRoaXMgcGFkZGluZyBpcyBvbmx5IHJlcXVpcmVkIGZvciB0aGUgbGFzdCBmcmFtZSBpbiB0aGUKKyAgIHBhY2tldCwgYW5kIG9ubHkgdG8gZW5zdXJlIHRoZSBwYWNrZXQgY29udGVudHMgZW5kcyBvbiBhbiBvY3RldAorICAgYm91bmRhcnkuCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgICBFeHBpcmVzIEp1bHkgMiwgMjAwNSAgICAgICAgICAgICAgICAgIFtQYWdlIDhdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgZHJhZnQtaGVybGVpbi1zcGVleC1ydHAtcHJvZmlsZS0wMyAgICAgICBKYW51YXJ5IDIwMDUKKworCis2LiAgRXhhbXBsZSBTcGVleCBwYWNrZXQKKworICAgSW4gdGhlIGV4YW1wbGUgYmVsb3cgd2UgaGF2ZSBhIHNpbmdsZSBTcGVleCBmcmFtZSB3aXRoIDUgYml0cyBvZgorICAgcGFkZGluZyB0byBlbnN1cmUgdGhlIHBhY2tldCBzaXplIGZhbGxzIG9uIGFuIG9jdGV0IGJvdW5kYXJ5LgorCisgICAgICAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMworICAgICAgIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQorICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgIHxWPTJ8UHxYfCAgQ0MgICB8TXwgICAgIFBUICAgICAgfCAgICAgICBzZXF1ZW5jZSBudW1iZXIgICAgICAgICB8CisgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICB8ICAgICAgICAgc3luY2hyb25pemF0aW9uIHNvdXJjZSAoU1NSQykgaWRlbnRpZmllciAgICAgICAgICAgICAgfAorICAgICAgKz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSsKKworICAgICAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyAgICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAgICAgICs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rCisgICAgICB8ICAgICAgICAgY29udHJpYnV0aW5nIHNvdXJjZSAoQ1NSQykgaWRlbnRpZmllcnMgICAgICAgICAgICAgICAgfAorICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIC4uc3BlZXggZGF0YS4uICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgLi5zcGVleCBkYXRhLi4gICAgICAgICAgICAgICB8MCAxIDEgMSAxfAorICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgICBFeHBpcmVzIEp1bHkgMiwgMjAwNSAgICAgICAgICAgICAgICAgIFtQYWdlIDldCisMCitJbnRlcm5ldC1EcmFmdCAgICAgZHJhZnQtaGVybGVpbi1zcGVleC1ydHAtcHJvZmlsZS0wMyAgICAgICBKYW51YXJ5IDIwMDUKKworCis3LiAgTXVsdGlwbGUgU3BlZXggZnJhbWVzIGluIGEgUlRQIHBhY2tldAorCisgICBCZWxvdyBpcyBhbiBleGFtcGxlIG9mIHR3byBTcGVleCBmcmFtZXMgY29udGFpbmVkIHdpdGhpbiBvbmUgUlRQCisgICBwYWNrZXQuICBUaGUgU3BlZXggZnJhbWUgbGVuZ3RoIGluIHRoaXMgZXhhbXBsZSBmYWxsIG9uIGFuIG9jdGV0CisgICBib3VuZGFyeSBzbyB0aGVyZSBpcyBubyBwYWRkaW5nLgorCisgICBTcGVleCBjb2RlY3MgWzldIGFyZSBhYmxlIHRvIGRldGVjdCB0aGUgdGhlIGJpdHJhdGUgZnJvbSB0aGUgcGF5bG9hZAorICAgYW5kIGFyZSByZXNwb25zaWJsZSBmb3IgZGV0ZWN0aW5nIHRoZSAyMCBtc2VjIGJvdW5kYXJpZXMgYmV0d2VlbiBlYWNoCisgICBmcmFtZS4KKworICAgICAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyAgICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICB8Vj0yfFB8WHwgIENDICAgfE18ICAgICBQVCAgICAgIHwgICAgICAgc2VxdWVuY2UgbnVtYmVyICAgICAgICAgfAorICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgfCAgICAgICAgIHN5bmNocm9uaXphdGlvbiBzb3VyY2UgKFNTUkMpIGlkZW50aWZpZXIgICAgICAgICAgICAgIHwKKyAgICAgICs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rCisgICAgICB8ICAgICAgICAgY29udHJpYnV0aW5nIHNvdXJjZSAoQ1NSQykgaWRlbnRpZmllcnMgICAgICAgICAgICAgICAgfAorICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIC4uc3BlZXggZGF0YS4uICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICB8ICAgICAgICAuLnNwZWV4IGRhdGEuLiAgICAgICAgIHwgICAgICAgIC4uc3BlZXggZGF0YS4uICAgICAgICAgfAorICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAuLnNwZWV4IGRhdGEuLiAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitIZXJsZWluLCBldCBhbC4gICAgICAgICAgIEV4cGlyZXMgSnVseSAyLCAyMDA1ICAgICAgICAgICAgICAgICBbUGFnZSAxMF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAzICAgICAgIEphbnVhcnkgMjAwNQorCisKKzguICBNSU1FIHJlZ2lzdHJhdGlvbiBvZiBTcGVleAorCisgICBGdWxsIGRlZmluaXRpb24gb2YgdGhlIE1JTUUgWzNdIHR5cGUgZm9yIFNwZWV4IHdpbGwgYmUgcGFydCBvZiB0aGUKKyAgIE9nZyBWb3JiaXMgTUlNRSB0eXBlIGRlZmluaXRpb24gYXBwbGljYXRpb24gWzhdLgorCisgICBNSU1FIG1lZGlhIHR5cGUgbmFtZTogYXVkaW8KKworICAgTUlNRSBzdWJ0eXBlOiBzcGVleAorCisgICBPcHRpb25hbCBwYXJhbWV0ZXJzOgorCisgICBSZXF1aXJlZCBwYXJhbWV0ZXJzOiB0byBiZSBpbmNsdWRlZCBpbiB0aGUgT2dnIE1JTUUgc3BlY2lmaWNhdGlvbi4KKworICAgRW5jb2RpbmcgY29uc2lkZXJhdGlvbnM6CisKKyAgIFNlY3VyaXR5IENvbnNpZGVyYXRpb25zOgorCisgICBTZWUgU2VjdGlvbiA2IG9mIFJGQyAzMDQ3LgorCisgICBJbnRlcm9wZXJhYmlsaXR5IGNvbnNpZGVyYXRpb25zOiBub25lCisKKyAgIFB1Ymxpc2hlZCBzcGVjaWZpY2F0aW9uOgorCisgICBBcHBsaWNhdGlvbnMgd2hpY2ggdXNlIHRoaXMgbWVkaWEgdHlwZToKKworICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbjogbm9uZQorCisgICBQZXJzb24gJiBlbWFpbCBhZGRyZXNzIHRvIGNvbnRhY3QgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb246CisKKyAgICAgIEdyZWcgSGVybGVpbiA8Z2hlcmxlaW5AaGVybGVpbi5jb20+CisgICAgICBKZWFuLU1hcmMgVmFsaW4gPGplYW4tbWFyYy52YWxpbkBoZXJtZXMudXNoZXJiLmNhPgorCisgICBJbnRlbmRlZCB1c2FnZTogQ09NTU9OCisKKyAgIEF1dGhvci9DaGFuZ2UgY29udHJvbGxlcjoKKworICAgICAgQXV0aG9yOiAgR3JlZyBIZXJsZWluIDxnaGVybGVpbkBoZXJsZWluLmNvbT4KKyAgICAgIENoYW5nZSBjb250cm9sbGVyOiBHcmVnIEhlcmxlaW4gPGdoZXJsZWluQGhlcmxlaW4uY29tPgorICAgICAgQ2hhbmdlIGNvbnRyb2xsZXI6IElFVEYgQVZUIFdvcmtpbmcgR3JvdXAKKworICAgVGhpcyB0cmFuc3BvcnQgdHlwZSBzaWduaWZpZXMgdGhhdCB0aGUgY29udGVudCBpcyB0byBiZSBpbnRlcnByZXRlZAorICAgYWNjb3JkaW5nIHRvIHRoaXMgZG9jdW1lbnQgaWYgdGhlIGNvbnRlbnRzIGFyZSB0cmFuc21pdHRlZCBvdmVyIFJUUC4KKyAgIFNob3VsZCB0aGlzIHRyYW5zcG9ydCB0eXBlIGFwcGVhciBvdmVyIGEgbG9zc2xlc3Mgc3RyZWFtaW5nIHByb3RvY29sCisgICBzdWNoIGFzIFRDUCwgdGhlIGNvbnRlbnQgZW5jYXBzdWxhdGlvbiBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYW4KKyAgIE9nZyBTdHJlYW0gaW4gYWNjb3JkYW5jZSB3aXRoIFs4XSwgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlCisgICBjb250ZW50IG9mIHRoZSBPZ2cgU3RyZWFtIG1heSBiZSBhc3N1bWVkIHRvIGJlIFNwZWV4IGF1ZGlvIGFuZCBTcGVleAorICAgYXVkaW8gb25seS4KKworCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgICBFeHBpcmVzIEp1bHkgMiwgMjAwNSAgICAgICAgICAgICAgICAgW1BhZ2UgMTFdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgZHJhZnQtaGVybGVpbi1zcGVleC1ydHAtcHJvZmlsZS0wMyAgICAgICBKYW51YXJ5IDIwMDUKKworCis5LiAgU0RQIHVzYWdlIG9mIFNwZWV4CisKKyAgIFdoZW4gY29udmV5aW5nIGluZm9ybWF0aW9uIGJ5IFNEUCBbNF0sIHRoZSBlbmNvZGluZyBuYW1lIE1VU1QgYmUgc2V0CisgICB0byAic3BlZXgiLiAgQW4gZXhhbXBsZSBvZiB0aGUgbWVkaWEgcmVwcmVzZW50YXRpb24gaW4gU0RQIGZvcgorICAgb2ZmZXJpbmcgYSBzaW5nbGUgY2hhbm5lbCBvZiBTcGVleCBhdCA4MDAwIHNhbXBsZXMgcGVyIHNlY29uZCBtaWdodAorICAgYmU6CisKKyAgICAgIG09YXVkaW8gODA4OCBSVFAvQVZQIDk3CisgICAgICBhPXJ0cG1hcDo5NyBzcGVleC84MDAwCisKKyAgIE5vdGUgdGhhdCB0aGUgUlRQIHBheWxvYWQgdHlwZSBjb2RlIG9mIDk3IGlzIGRlZmluZWQgaW4gdGhpcyBtZWRpYQorICAgZGVmaW5pdGlvbiB0byBiZSAnbWFwcGVkJyB0byB0aGUgc3BlZXggY29kZWMgYXQgYW4gOGtIeiBzYW1wbGluZworICAgZnJlcXVlbmN5IHVzaW5nIHRoZSAnYT1ydHBtYXAnIGxpbmUuICBBbnkgbnVtYmVyIGZyb20gOTYgdG8gMTI3IGNvdWxkCisgICBoYXZlIGJlZW4gY2hvc2VuICh0aGUgYWxsb3dlZCByYW5nZSBmb3IgZHluYW1pYyB0eXBlcykuCisKKyAgIFRoZSB2YWx1ZSBvZiB0aGUgc2FtcGxpbmcgZnJlcXVlbmN5IGlzIHR5cGljYWxseSA4MDAwIGZvciBuYXJyb3cgYmFuZAorICAgb3BlcmF0aW9uLCAxNjAwMCBmb3Igd2lkZSBiYW5kIG9wZXJhdGlvbiwgYW5kIDMyMDAwIGZvciB1bHRyYS13aWRlCisgICBiYW5kIG9wZXJhdGlvbi4KKworICAgSWYgZm9yIHNvbWUgcmVhc29uIHRoZSBvZmZlcmVyIGhhcyBiYW5kd2lkdGggbGltaXRhdGlvbnMsIHRoZSBjbGllbnQKKyAgIG1heSB1c2UgdGhlICJiPSIgaGVhZGVyLCBhcyBleHBsYWluZWQgaW4gU0RQIFs0XS4gIFRoZSBmb2xsb3dpbmcKKyAgIGV4YW1wbGUgaWxsdXN0cmF0ZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIG9mZmVyZXIgY2Fubm90IHJlY2VpdmUgbW9yZQorICAgdGhhbiAxMCBrYml0L3MuCisKKyAgICAgIG09YXVkaW8gODA4OCBSVFAvQVZQIDk3CisgICAgICBiPUFTOjEwCisgICAgICBhPXJ0bWFwOjk3IHNwZWV4LzgwMDAKKworICAgSW4gdGhpcyBjYXNlLCBpZiB0aGUgcmVtb3RlIHBhcnQgYWdyZWVzLCBpdCBzaG91bGQgY29uZmlndXJlIGl0cworICAgU3BlZXggZW5jb2RlciBzbyB0aGF0IGl0IGRvZXMgbm90IHVzZSBtb2RlcyB0aGF0IHByb2R1Y2UgbW9yZSB0aGFuIDEwCisgICBrYml0L3MuICBOb3RlIHRoYXQgdGhlICJiPSIgY29uc3RyYWludCBhbHNvIGFwcGxpZXMgb24gYWxsIHBheWxvYWQKKyAgIHR5cGVzIHRoYXQgbWF5IGJlIHByb3Bvc2VkIGluIHRoZSBtZWRpYSBsaW5lICgibT0iKS4KKworICAgQW4gb3RoZXIgd2F5IHRvIG1ha2UgcmVjb21tZW5kYXRpb25zIHRvIHRoZSByZW1vdGUgU3BlZXggZW5jb2RlciBpcworICAgdG8gdXNlIGl0cyBzcGVjaWZpYyBwYXJhbWV0ZXJzIHZpYSB0aGUgYT1mbXRwOiBkaXJlY3RpdmUuICBUaGUKKyAgIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBkZWZpbmVkIGZvciB1c2UgaW4gdGhpcyB3YXk6CisKKyAgICAgIHB0aW1lOiBkdXJhdGlvbiBvZiBlYWNoIHBhY2tldCBpbiBtaWxsaXNlY29uZHMuCisKKyAgICAgIHNyOiAgICBhY3R1YWwgc2FtcGxlIHJhdGUgaW4gSHouCisKKyAgICAgIGVidzogICBlbmNvZGluZyBiYW5kd2lkdGggLSBlaXRoZXIgJ25hcnJvdycgb3IgJ3dpZGUnIG9yICd1bHRyYScKKyAgICAgIChjb3JyZXNwb25kcyB0byBub21pbmFsIDgwMDAsIDE2MDAwLCBhbmQgMzIwMDAgSHogc2FtcGxpbmcgcmF0ZXMpLgorCisgICAgICB2YnI6ICAgdmFyaWFibGUgYml0IHJhdGUgIC0gZWl0aGVyICdvbicgJ29mZicgb3IgJ3ZhZCcgKGRlZmF1bHRzCisgICAgICB0byBvZmYpLiAgSWYgb24sIHZhcmlhYmxlIGJpdCByYXRlIGlzIGVuYWJsZWQuICBJZiBvZmYsIGRpc2FibGVkLgorICAgICAgSWYgc2V0IHRvICd2YWQnIHRoZW4gY29uc3RhbnQgYml0IHJhdGUgaXMgdXNlZCBidXQgc2lsZW5jZSB3aWxsIGJlCisgICAgICBlbmNvZGVkIHdpdGggc3BlY2lhbCBzaG9ydCBmcmFtZXMgdG8gaW5kaWNhdGUgYSBsYWNrIG9mIHZvaWNlIGZvcgorCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgICBFeHBpcmVzIEp1bHkgMiwgMjAwNSAgICAgICAgICAgICAgICAgW1BhZ2UgMTJdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgZHJhZnQtaGVybGVpbi1zcGVleC1ydHAtcHJvZmlsZS0wMyAgICAgICBKYW51YXJ5IDIwMDUKKworCisgICAgICB0aGF0IHBlcmlvZC4KKworICAgICAgY25nOiAgIGNvbWZvcnQgbm9pc2UgZ2VuZXJhdGlvbiAtIGVpdGhlciAnb24nIG9yICdvZmYnLiAgSWYgb2ZmCisgICAgICB0aGVuIHNpbGVuY2UgZnJhbWVzIHdpbGwgYmUgc2lsZW50OyBpZiAnb24nIHRoZW4gdGhvc2UgZnJhbWVzIHdpbGwKKyAgICAgIGJlIGZpbGxlZCB3aXRoIGNvbWZvcnQgbm9pc2UuCisKKyAgICAgIG1vZGU6ICBTcGVleCBlbmNvZGluZyBtb2RlLiAgQ2FuIGJlIHsxLDIsMyw0LDUsNixhbnl9IGRlZmF1bHRzIHRvCisgICAgICAzIGluIG5hcnJvd2JhbmQsIDYgaW4gd2lkZSBhbmQgdWx0cmEtd2lkZS4KKworICAgICAgcGVuaDoJdXNlIG9mIHBlcmNlcHR1YWwgZW5oYW5jZW1lbnQuICAxIGluZGljYXRlcyB0byB0aGUgZGVjb2RlcgorICAgICAgdGhhdCBwZXJjZXB0dWFsIGVuaGFuY2VtZW50IGlzIHJlY29tbWVuZGVkLCAwIGluZGljYXRlcyB0aGF0IGl0IGlzCisgICAgICBub3QuICBEZWZhdWx0cyB0byBvbiAoMSkuCisKKworICAgRXhhbXBsZXM6CisKKyAgICAgIG09YXVkaW8gODAwOCBSVFAvQVZQIDk3CisgICAgICBhPXJ0cG1hcDo5NyBzcGVleC84MDAwCisgICAgICBhPWZtdHA6OTcgbW9kZT00CisKKyAgIFRoaXMgZXhhbXBsZXMgaWxsdXN0cmF0ZSBhbiBvZmZlcmVyIHRoYXQgd2lzaGVzIHRvIHJlY2VpdmUgYSBTcGVleAorICAgc3RyZWFtIGF0IDgwMDBIeiwgYnV0IG9ubHkgdXNpbmcgc3BlZXggbW9kZSAzLgorCisgICBUaGUgb2ZmZXJlciBtYXkgc3VnZ2VzdCB0byB0aGUgcmVtb3RlIGRlY29kZXIgdG8gYWN0aXZhdGUgaXRzCisgICBwZXJjZXB0dWFsIGVuaGFuY2VtZW50IGZpbHRlciBsaWtlIHRoaXM6CisKKyAgICAgIG09YXVkaW8gODA4OCBSVFAvQVZQIDk3CisgICAgICBhPXJ0bWFwOjk3IHNwZWV4LzgwMDAKKyAgICAgIGE9Zm10cDo5NyBwZW5oPTEKKworICAgU2V2ZXJhbCBTcGVleCBzcGVjaWZpYyBwYXJhbWV0ZXJzIGNhbiBiZSBnaXZlbiBpbiBhIHNpbmdsZSBhPWZtdHAKKyAgIGxpbmUgcHJvdmlkZWQgdGhhdCB0aGV5IGFyZSBzZXBhcmF0ZWQgYnkgYSBzZW1pLWNvbG9uOgorCisgICAgICBhPWZtdHA6OTcgbW9kZT1hbnk7cGVuaD0xCisKKyAgIFRoZSBvZmZlcmVyIG1heSBpbmRpY2F0ZSB0aGF0IGl0IHdpc2hlcyB0byBzZW5kIHZhcmlhYmxlIGJpdCByYXRlCisgICBmcmFtZXMgd2l0aCBjb21mb3J0IG5vaXNlOgorCisgICAgICBtPWF1ZGlvIDgwODggUlRQL0FWUCA5NworICAgICAgYT1ydG1hcDo5NyBzcGVleC84MDAwCisgICAgICBhPWZtdHA6OTcgdmJyPW9uO2NuZz1vbgorCisgICBUaGUgInB0aW1lIiBhdHRyaWJ1dGUgaXMgdXNlZCB0byBkZW5vdGUgdGhlIHBhY2tldGl6YXRpb24gaW50ZXJ2YWwKKyAgIChpZSwgaG93IG1hbnkgbWlsbGlzZWNvbmRzIG9mIGF1ZGlvIGlzIGVuY29kZWQgaW4gYSBzaW5nbGUgUlRQCisgICBwYWNrZXQpLiAgU2luY2UgU3BlZXggdXNlcyAyMCBtc2VjIGZyYW1lcywgcHRpbWUgdmFsdWVzIG9mIG11bHRpcGxlcworICAgb2YgMjAgZGVub3RlIG11bHRpcGxlIFNwZWV4IGZyYW1lcyBwZXIgcGFja2V0LiAgVmFsdWVzIG9mIHB0aW1lIHdoaWNoCisgICBhcmUgbm90IG11bHRpcGxlcyBvZiAyMCBNVVNUIGJlIGlnbm9yZWQgYW5kIGNsaWVudHMgTVVTVCB1c2UgdGhlCisgICBkZWZhdWx0IHZhbHVlIG9mIDIwIGluc3RlYWQuCisKKworCitIZXJsZWluLCBldCBhbC4gICAgICAgICAgIEV4cGlyZXMgSnVseSAyLCAyMDA1ICAgICAgICAgICAgICAgICBbUGFnZSAxM10KKwwKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAzICAgICAgIEphbnVhcnkgMjAwNQorCisKKyAgIEluIHRoZSBleGFtcGxlIGJlbG93IHRoZSBwdGltZSB2YWx1ZSBpcyBzZXQgdG8gNDAsIGluZGljYXRpbmcgdGhhdAorICAgdGhlcmUgYXJlIDIgZnJhbWVzIGluIGVhY2ggcGFja2V0LgorCisgICAgICBtPWF1ZGlvIDgwMDggUlRQL0FWUCA5NworICAgICAgYT1ydHBtYXA6OTcgc3BlZXgvODAwMAorICAgICAgYT1wdGltZTo0MAorCisgICBOb3RlIHRoYXQgdGhlIHB0aW1lIHBhcmFtZXRlciBhcHBsaWVzIHRvIGFsbCBwYXlsb2FkcyBsaXN0ZWQgaW4gdGhlCisgICBtZWRpYSBsaW5lIGFuZCBpcyBub3QgdXNlZCBhcyBwYXJ0IG9mIGFuIGE9Zm10cCBkaXJlY3RpdmUuCisKKyAgIFZhbHVlcyBvZiBwdGltZSBub3QgbXVsdGlwbGUgb2YgMjAgbXNlYyBhcmUgbWVhbmluZ2xlc3MsIHNvIHRoZQorICAgcmVjZWl2ZXIgb2Ygc3VjaCBwdGltZSB2YWx1ZXMgTVVTVCBpZ25vcmUgdGhlbS4gIElmIGR1cmluZyB0aGUgbGlmZQorICAgb2YgYW4gUlRQIHNlc3Npb24gdGhlIHB0aW1lIHZhbHVlIGNoYW5nZXMsIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlCisgICBTcGVleCBmcmFtZXMgZm9yIGV4YW1wbGUsIHRoZSBTRFAgdmFsdWUgbXVzdCBhbHNvIHJlZmxlY3QgdGhlIG5ldworICAgdmFsdWUuCisKKyAgIENhcmUgbXVzdCBiZSB0YWtlbiB3aGVuIHNldHRpbmcgdGhlIHZhbHVlIG9mIHB0aW1lIHNvIHRoYXQgdGhlIFJUUAorICAgcGFja2V0IHNpemUgZG9lcyBub3QgZXhjZWVkIHRoZSBwYXRoIE1UVS4KKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK0hlcmxlaW4sIGV0IGFsLiAgICAgICAgICAgRXhwaXJlcyBKdWx5IDIsIDIwMDUgICAgICAgICAgICAgICAgIFtQYWdlIDE0XQorDAorSW50ZXJuZXQtRHJhZnQgICAgIGRyYWZ0LWhlcmxlaW4tc3BlZXgtcnRwLXByb2ZpbGUtMDMgICAgICAgSmFudWFyeSAyMDA1CisKKworMTAuICBJVFUgSC4zMjMvSC4yNDUgVXNlIG9mIFNwZWV4CisKKyAgIEFwcGxpY2F0aW9uIGlzIHVuZGVyd2F5IHRvIG1ha2UgU3BlZXggYSBzdGFuZGFyZCBJVFUgY29kZWMuICBIb3dldmVyLAorICAgdW50aWwgdGhhdCBpcyBmaW5hbGl6ZWQsIFNwZWV4IE1BWSBiZSB1c2VkIGluIEguMzIzIFs1XSBieSB1c2luZyBhCisgICBub24tc3RhbmRhcmQgY29kZWMgYmxvY2sgZGVmaW5pdGlvbiBpbiB0aGUgSC4yNDUgWzZdIGNvZGVjIGNhcGFiaWxpdHkKKyAgIG5lZ290aWF0aW9ucy4KKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK0hlcmxlaW4sIGV0IGFsLiAgICAgICAgICAgRXhwaXJlcyBKdWx5IDIsIDIwMDUgICAgICAgICAgICAgICAgIFtQYWdlIDE1XQorDAorSW50ZXJuZXQtRHJhZnQgICAgIGRyYWZ0LWhlcmxlaW4tc3BlZXgtcnRwLXByb2ZpbGUtMDMgICAgICAgSmFudWFyeSAyMDA1CisKKworMTEuICBOb25TdGFuZGFyZE1lc3NhZ2UgZm9ybWF0CisKKyAgIEZvciBTcGVleCB1c2UgaW4gSC4yNDUgWzZdIGJhc2VkIHN5c3RlbXMsIHRoZSBmaWVsZHMgaW4gdGhlCisgICBOb25TdGFuZGFyZE1lc3NhZ2Ugc2hvdWxkIGJlOgorCisgICAgICB0MzVDb3VudHJ5Q29kZSAgID0gSGV4OiBCNQorICAgICAgdDM1RXh0ZW5zaW9uICAgICA9IEhleDogMDAKKyAgICAgIG1hbnVmYWN0dXJlckNvZGUgPSBIZXg6IDAwMjYKKyAgICAgIFtMZW5ndGggb2YgdGhlIEJpbmFyeSBTZXF1ZW5jZSAoOCBiaXQgbnVtYmVyKV0KKyAgICAgIFtCaW5hcnkgU2VxdWVuY2UgY29uc2lzdGluZyBvZiBhbiBBU0NJSSBzdHJpbmcsIG5vIE5VTEwKKyAgICAgIHRlcm1pbmF0b3JdCisKKyAgIFRoZSBiaW5hcnkgc2VxdWVuY2UgaXMgYW4gYXNjaWkgc3RyaW5nIG1lcmVseSBmb3IgZWFzZSBvZiB1c2UuICBUaGUKKyAgIHN0cmluZyBpcyBub3QgbnVsbCB0ZXJtaW5hdGVkLiAgVGhlIGZvcm1hdCBvZiB0aGlzIHN0cmluZyBpcworCisgICAgICBzcGVleCBbb3B0aW9uYWwgdmFyaWFibGVzXQorCisgICBUaGUgb3B0aW9uYWwgdmFyaWFibGVzIGFyZSBpZGVudGljYWwgdG8gdGhvc2UgdXNlZCBmb3IgdGhlIFNEUCBhPWZtdHAKKyAgIHN0cmluZ3MgZGlzY3Vzc2VkIGluIHNlY3Rpb24gNSBhYm92ZS4gIFRoZSBzdHJpbmcgaXMgYnVpbHQgdG8gYmUgYWxsCisgICBvbiBvbmUgbGluZSwgZWFjaCBrZXktdmFsdWUgcGFpciBzZXBhcmF0ZWQgYnkgYSBzZW1pLWNvbG9uLiAgVGhlCisgICBvcHRpb25hbCB2YXJpYWJsZXMgTUFZIGJlIG9taXR0ZWQsIHdoaWNoIGNhdXNlcyB0aGUgZGVmYXVsdCB2YWx1ZXMgdG8KKyAgIGJlIGFzc3VtZWQuICBUaGV5IGFyZToKKworICAgICAgZWJ3PW5hcnJvdzttb2RlPTM7dmJyPW9mZjtjbmc9b2ZmO3B0aW1lPTIwO3NyPTgwMDA7cGVuaD1ubzsKKworICAgVGhlIGZpZnRoIG9jdGV0IG9mIHRoZSBibG9jayBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBiaW5hcnkgc2VxdWVuY2UuCisKKyAgIE5PVEU6ICB0aGlzIG1ldGhvZCBjYW4gcmVzdWx0IGluIHRoZSBhZHZlcnRpc2luZyBvZiBhIGxhcmdlIG51bWJlciBvZgorICAgU3BlZXggJ2NvZGVjcycgYmFzZWQgb24gdGhlIG51bWJlciBvZiB2YXJpYWJsZXMgcG9zc2libGUuICBGb3IgbW9zdAorICAgVm9JUCBhcHBsaWNhdGlvbnMsIHVzZSBvZiB0aGUgZGVmYXVsdCBiaW5hcnkgc2VxdWVuY2Ugb2YgJ3NwZWV4JyBpcworICAgUkVDT01NRU5ERUQgdG8gYmUgdXNlZCBpbiBhZGRpdGlvbiB0byBhbGwgb3RoZXIgb3B0aW9ucy4gIFRoaXMKKyAgIG1heGltaXplcyB0aGUgY2hhbmNlcyB0aGF0IHR3byBILjMyMyBiYXNlZCBhcHBsaWNhdGlvbnMgdGhhdCBzdXBwb3J0CisgICBTcGVleCBjYW4gZmluZCBhIG11dHVhbCBjb2RlYy4KKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK0hlcmxlaW4sIGV0IGFsLiAgICAgICAgICAgRXhwaXJlcyBKdWx5IDIsIDIwMDUgICAgICAgICAgICAgICAgIFtQYWdlIDE2XQorDAorSW50ZXJuZXQtRHJhZnQgICAgIGRyYWZ0LWhlcmxlaW4tc3BlZXgtcnRwLXByb2ZpbGUtMDMgICAgICAgSmFudWFyeSAyMDA1CisKKworMTIuICBSVFAgUGF5bG9hZCBUeXBlcworCisgICBEeW5hbWljIHBheWxvYWQgdHlwZSBjb2RlcyBNVVNUIGJlIG5lZ290aWF0ZWQgJ291dC1vZi1iYW5kJyBmb3IgdGhlCisgICBhc3NpZ25tZW50IG9mIGEgZHluYW1pYyBwYXlsb2FkIHR5cGUgZnJvbSB0aGUgcmFuZ2Ugb2YgOTYtMTI3LiAgSC4zMjMKKyAgIGFwcGxpY2F0aW9ucyBNVVNUIHVzZSB0aGUgSC4yNDUgSDIyNTBMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMKKyAgIGVuY29kaW5nIHRvIGFjY29tcGxpc2ggdGhpcy4KKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK0hlcmxlaW4sIGV0IGFsLiAgICAgICAgICAgRXhwaXJlcyBKdWx5IDIsIDIwMDUgICAgICAgICAgICAgICAgIFtQYWdlIDE3XQorDAorSW50ZXJuZXQtRHJhZnQgICAgIGRyYWZ0LWhlcmxlaW4tc3BlZXgtcnRwLXByb2ZpbGUtMDMgICAgICAgSmFudWFyeSAyMDA1CisKKworMTMuICBTZWN1cml0eSBDb25zaWRlcmF0aW9ucworCisgICBSVFAgcGFja2V0cyB1c2luZyB0aGUgcGF5bG9hZCBmb3JtYXQgZGVmaW5lZCBpbiB0aGlzIHNwZWNpZmljYXRpb24KKyAgIGFyZSBzdWJqZWN0IHRvIHRoZSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBkaXNjdXNzZWQgaW4gdGhlIFJUUAorICAgc3BlY2lmaWNhdGlvbiBbMl0sIGFuZCBhbnkgYXBwcm9wcmlhdGUgUlRQIHByb2ZpbGUuICBUaGlzIGltcGxpZXMKKyAgIHRoYXQgY29uZmlkZW50aWFsaXR5IG9mIHRoZSBtZWRpYSBzdHJlYW1zIGlzIGFjaGlldmVkIGJ5IGVuY3J5cHRpb24uCisgICBCZWNhdXNlIHRoZSBkYXRhIGNvbXByZXNzaW9uIHVzZWQgd2l0aCB0aGlzIHBheWxvYWQgZm9ybWF0IGlzIGFwcGxpZWQKKyAgIGVuZC10by1lbmQsIGVuY3J5cHRpb24gbWF5IGJlIHBlcmZvcm1lZCBhZnRlciBjb21wcmVzc2lvbiBzbyB0aGVyZSBpcworICAgbm8gY29uZmxpY3QgYmV0d2VlbiB0aGUgdHdvIG9wZXJhdGlvbnMuCisKKyAgIEEgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlIHRocmVhdCBleGlzdHMgZm9yIGRhdGEgZW5jb2RpbmdzIHVzaW5nCisgICBjb21wcmVzc2lvbiB0ZWNobmlxdWVzIHRoYXQgaGF2ZSBub24tdW5pZm9ybSByZWNlaXZlci1lbmQKKyAgIGNvbXB1dGF0aW9uYWwgbG9hZC4gIFRoZSBhdHRhY2tlciBjYW4gaW5qZWN0IHBhdGhvbG9naWNhbCBkYXRhZ3JhbXMKKyAgIGludG8gdGhlIHN0cmVhbSB3aGljaCBhcmUgY29tcGxleCB0byBkZWNvZGUgYW5kIGNhdXNlIHRoZSByZWNlaXZlciB0bworICAgYmUgb3ZlcmxvYWRlZC4gIEhvd2V2ZXIsIHRoaXMgZW5jb2RpbmcgZG9lcyBub3QgZXhoaWJpdCBhbnkKKyAgIHNpZ25pZmljYW50IG5vbi11bmlmb3JtaXR5LgorCisgICBBcyB3aXRoIGFueSBJUC1iYXNlZCBwcm90b2NvbCwgaW4gc29tZSBjaXJjdW1zdGFuY2VzIGEgcmVjZWl2ZXIgbWF5CisgICBiZSBvdmVybG9hZGVkIHNpbXBseSBieSB0aGUgcmVjZWlwdCBvZiB0b28gbWFueSBwYWNrZXRzLCBlaXRoZXIKKyAgIGRlc2lyZWQgb3IgdW5kZXNpcmVkLiAgTmV0d29yay1sYXllciBhdXRoZW50aWNhdGlvbiBtYXkgYmUgdXNlZCB0bworICAgZGlzY2FyZCBwYWNrZXRzIGZyb20gdW5kZXNpcmVkIHNvdXJjZXMsIGJ1dCB0aGUgcHJvY2Vzc2luZyBjb3N0IG9mCisgICB0aGUgYXV0aGVudGljYXRpb24gaXRzZWxmIG1heSBiZSB0b28gaGlnaC4KKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitIZXJsZWluLCBldCBhbC4gICAgICAgICAgIEV4cGlyZXMgSnVseSAyLCAyMDA1ICAgICAgICAgICAgICAgICBbUGFnZSAxOF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAzICAgICAgIEphbnVhcnkgMjAwNQorCisKKzE0LiAgQWNrbm93bGVkZ21lbnRzCisKKyAgIFRoZSBhdXRob3JzIHdvdWxkIGxpa2UgdG8gdGhhbmsgRXF1aXZhbGVuY2UgUHR5IEx0ZCBvZiBBdXN0cmFsaWEgZm9yCisgICB0aGVpciBhc3Npc3RhbmNlIGluIGF0dGVtcHRpbmcgdG8gc3RhbmRhcmRpemUgdGhlIHVzZSBvZiBTcGVleCBpbgorICAgSC4zMjMgYXBwbGljYXRpb25zLCBhbmQgZm9yIGltcGxlbWVudGluZyBTcGVleCBpbiB0aGVpciBvcGVuIHNvdXJjZQorICAgT3BlbkgzMjMgc3RhY2suICBUaGUgYXV0aG9ycyB3b3VsZCBhbHNvIGxpa2UgdG8gdGhhbmsgQnJpYW4gQy4gIFdpbGVzCisgICA8YnJpYW5Ac3RyZWFtY29tbS5jb20+IG9mIFN0cmVhbUNvbW0gZm9yIGhpcyBhc3Npc3RhbmNlIGluIGRldmVsb3BpbmcKKyAgIHRoZSBwcm9wb3NlZCBzdGFuZGFyZCBmb3IgU3BlZXggdXNlIGluIEguMzIzIGFwcGxpY2F0aW9ucy4KKworICAgVGhlIGF1dGhvcnMgd291bGQgYWxzbyBsaWtlIHRvIHRoYW5rIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBvZiB0aGUKKyAgIFNwZWV4IGFuZCBBVlQgY29tbXVuaXRpZXMgZm9yIHRoZWlyIGlucHV0OiAgUm9zcyBGaW5sYXlzb24sIEZlZGVyaWNvCisgICBNb250ZXNpbm8gUG91em9scywgSGVubmluZyBTY2h1bHpyaW5uZSwgTWFnbnVzIFdlc3Rlcmx1bmQuCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitIZXJsZWluLCBldCBhbC4gICAgICAgICAgIEV4cGlyZXMgSnVseSAyLCAyMDA1ICAgICAgICAgICAgICAgICBbUGFnZSAxOV0KKwwKK0ludGVybmV0LURyYWZ0ICAgICBkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAzICAgICAgIEphbnVhcnkgMjAwNQorCisKKzE1LiAgUmVmZXJlbmNlcworCisxNS4xICBOb3JtYXRpdmUgUmVmZXJlbmNlcworCisgICBbMV0gIEJyYWRuZXIsIFMuLCAiS2V5IHdvcmRzIGZvciB1c2UgaW4gUkZDcyB0byBJbmRpY2F0ZSBSZXF1aXJlbWVudAorICAgICAgICBMZXZlbHMiLCBSRkMgMjExOS4KKworICAgWzJdICBTY2h1bHpyaW5uZSwgSC4sIENhc25lciwgUy4sIEZyZWRlcmljaywgUi4gYW5kIFYuIEphY29ic29uLAorICAgICAgICAiUlRQOiBBIFRyYW5zcG9ydCBQcm90b2NvbCBmb3IgcmVhbC10aW1lIGFwcGxpY2F0aW9ucyIsIFJGQworICAgICAgICAzNTUwLgorCisgICBbM10gICJNdWx0aXB1cnBvc2UgSW50ZXJuZXQgTWFpbCBFeHRlbnNpb25zIChNSU1FKSBQYXJ0IE9uZTogRm9ybWF0CisgICAgICAgIG9mIEludGVybmV0IE1lc3NhZ2UgQm9kaWVzIiwgUkZDIDIwNDUuCisKKyAgIFs0XSAgSmFjb2Jzb24sIFYuIGFuZCBNLiBIYW5kbGV5LCAiU0RQOiBTZXNzaW9uIERlc2NyaXB0aW9uCisgICAgICAgIFByb3RvY29sIiwgUkZDIDIzMjcuCisKKyAgIFs1XSAgIlBhY2tldC1iYXNlZCBNdWx0aW1lZGlhIENvbW11bmljYXRpb25zIFN5c3RlbXMiLCBJVFUtVAorICAgICAgICBSZWNvbW1lbmRhdGlvbiBILjMyMy4KKworICAgWzZdICAiQ29udHJvbCBvZiBjb21tdW5pY2F0aW9ucyBiZXR3ZWVuIFZpc3VhbCBUZWxlcGhvbmUgU3lzdGVtcyBhbmQKKyAgICAgICAgVGVybWluYWwgRXF1aXBtZW50IiwgSVRVLVQgUmVjb21tZW5kYXRpb24gSC4yNDUuCisKKyAgIFs3XSAgU2NodWx6cmlubmUsIEguIGFuZCBTLiBDYXNuZXIsICJSVFAgUHJvZmlsZSBmb3IgQXVkaW8gYW5kIFZpZGVvCisgICAgICAgIENvbmZlcmVuY2VzIHdpdGggTWluaW1hbCBDb250cm9sLiIsIFJGQyAzNTUxLgorCisgICBbOF0gIFdhbGxlaWosIEwuLCAiVGhlIGFwcGxpY2F0aW9uL29nZyBNZWRpYSBUeXBlIiwgUkZDIDM1MzQuCisKKzE1LjIgIEluZm9ybWF0aXZlIFJlZmVyZW5jZXMKKworICAgWzldICAgIlNwZWV4ZW5jL3NwZWV4ZGVjLCByZWZlcmVuY2UgY29tbWFuZC1saW5lIGVuY29kZXIvZGVjb2RlciIsCisgICAgICAgICBTcGVleCB3ZWJzaXRlIGh0dHA6Ly93d3cuc3BlZXgub3JnLy4KKworICAgWzEwXSAgIkNFTFAsIFUuUy4gRmVkZXJhbCBTdGFuZGFyZCAxMDE2LiIsIE5hdGlvbmFsIFRlY2huaWNhbAorICAgICAgICAgSW5mb3JtYXRpb24gU2VydmljZSAoTlRJUykgd2Vic2l0ZSBodHRwOi8vd3d3Lm50aXMuZ292Ly4KKworCitBdXRob3JzJyBBZGRyZXNzZXMKKworICAgR3JlZyBIZXJsZWluCisgICAyMDM0IEZpbGJlcnQgU3RyZWV0CisgICBTYW4gRnJhbmNpc2NvLCBDYWxpZm9ybmlhICA5NDEyMworICAgVW5pdGVkIFN0YXRlcworCisgICBFTWFpbDogZ2hlcmxlaW5AaGVybGVpbi5jb20KKworCisKKworCisKK0hlcmxlaW4sIGV0IGFsLiAgICAgICAgICAgRXhwaXJlcyBKdWx5IDIsIDIwMDUgICAgICAgICAgICAgICAgIFtQYWdlIDIwXQorDAorSW50ZXJuZXQtRHJhZnQgICAgIGRyYWZ0LWhlcmxlaW4tc3BlZXgtcnRwLXByb2ZpbGUtMDMgICAgICAgSmFudWFyeSAyMDA1CisKKworICAgU2ltb24gTW9ybGF0CisgICAzNSwgYXYgZGUgVml6aWxsZSBBcHAgNDIKKyAgIEdyZW5vYmxlICAzODAwMAorICAgRnJhbmNlCisKKyAgIEVNYWlsOiBzaW1vbi5tb3JsYXRAbGlucGhvbmUub3JnCisKKworICAgSmVhbi1NYXJjIFZhbGluCisgICBEZXBhcnRtZW50IG9mIEVsZWN0cmljYWwgYW5kIENvbXB1dGVyIEVuZ2luZWVyaW5nCisgICBVbml2ZXJzaXR5IG9mIFNoZXJicm9va2UKKyAgIDI1MDAgYmx2ZCBVbml2ZXJzaXRlCisgICBTaGVyYnJvb2tlLCBRdWViZWMgIEoxSyAyUjEKKyAgIENhbmFkYQorCisgICBFTWFpbDogamVhbi1tYXJjLnZhbGluQGhlcm1lcy51c2hlcmIuY2EKKworCisgICBSb2dlciBIYXJkaW1hbgorICAgNDkgTmV0dGxldG9uIFJvYWQKKyAgIENoZWx0ZW5oYW0sIEdsb3VjZXN0ZXJzaGlyZSAgR0w1MSA2TlIKKyAgIEVuZ2xhbmQKKworICAgRU1haWw6IHJvZ2VyQGZyZWVic2Qub3JnCisKKworICAgUGhpbCBLZXJyCisgICBFbmdsYW5kCisKKyAgIEVNYWlsOiBwaGlsQHBsdXMyNC5jb20KKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK0hlcmxlaW4sIGV0IGFsLiAgICAgICAgICAgRXhwaXJlcyBKdWx5IDIsIDIwMDUgICAgICAgICAgICAgICAgIFtQYWdlIDIxXQorDAorSW50ZXJuZXQtRHJhZnQgICAgIGRyYWZ0LWhlcmxlaW4tc3BlZXgtcnRwLXByb2ZpbGUtMDMgICAgICAgSmFudWFyeSAyMDA1CisKKworSW50ZWxsZWN0dWFsIFByb3BlcnR5IFN0YXRlbWVudAorCisgICBUaGUgSUVURiB0YWtlcyBubyBwb3NpdGlvbiByZWdhcmRpbmcgdGhlIHZhbGlkaXR5IG9yIHNjb3BlIG9mIGFueQorICAgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cyBvciBvdGhlciByaWdodHMgdGhhdCBtaWdodCBiZSBjbGFpbWVkIHRvCisgICBwZXJ0YWluIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvciB1c2Ugb2YgdGhlIHRlY2hub2xvZ3kgZGVzY3JpYmVkIGluCisgICB0aGlzIGRvY3VtZW50IG9yIHRoZSBleHRlbnQgdG8gd2hpY2ggYW55IGxpY2Vuc2UgdW5kZXIgc3VjaCByaWdodHMKKyAgIG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGU7IG5vciBkb2VzIGl0IHJlcHJlc2VudCB0aGF0IGl0IGhhcworICAgbWFkZSBhbnkgaW5kZXBlbmRlbnQgZWZmb3J0IHRvIGlkZW50aWZ5IGFueSBzdWNoIHJpZ2h0cy4gIEluZm9ybWF0aW9uCisgICBvbiB0aGUgcHJvY2VkdXJlcyB3aXRoIHJlc3BlY3QgdG8gcmlnaHRzIGluIFJGQyBkb2N1bWVudHMgY2FuIGJlCisgICBmb3VuZCBpbiBCQ1AgNzggYW5kIEJDUCA3OS4KKworICAgQ29waWVzIG9mIElQUiBkaXNjbG9zdXJlcyBtYWRlIHRvIHRoZSBJRVRGIFNlY3JldGFyaWF0IGFuZCBhbnkKKyAgIGFzc3VyYW5jZXMgb2YgbGljZW5zZXMgdG8gYmUgbWFkZSBhdmFpbGFibGUsIG9yIHRoZSByZXN1bHQgb2YgYW4KKyAgIGF0dGVtcHQgbWFkZSB0byBvYnRhaW4gYSBnZW5lcmFsIGxpY2Vuc2Ugb3IgcGVybWlzc2lvbiBmb3IgdGhlIHVzZSBvZgorICAgc3VjaCBwcm9wcmlldGFyeSByaWdodHMgYnkgaW1wbGVtZW50ZXJzIG9yIHVzZXJzIG9mIHRoaXMKKyAgIHNwZWNpZmljYXRpb24gY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIElFVEYgb24tbGluZSBJUFIgcmVwb3NpdG9yeSBhdAorICAgaHR0cDovL3d3dy5pZXRmLm9yZy9pcHIuCisKKyAgIFRoZSBJRVRGIGludml0ZXMgYW55IGludGVyZXN0ZWQgcGFydHkgdG8gYnJpbmcgdG8gaXRzIGF0dGVudGlvbiBhbnkKKyAgIGNvcHlyaWdodHMsIHBhdGVudHMgb3IgcGF0ZW50IGFwcGxpY2F0aW9ucywgb3Igb3RoZXIgcHJvcHJpZXRhcnkKKyAgIHJpZ2h0cyB0aGF0IG1heSBjb3ZlciB0ZWNobm9sb2d5IHRoYXQgbWF5IGJlIHJlcXVpcmVkIHRvIGltcGxlbWVudAorICAgdGhpcyBzdGFuZGFyZC4gIFBsZWFzZSBhZGRyZXNzIHRoZSBpbmZvcm1hdGlvbiB0byB0aGUgSUVURiBhdAorICAgaWV0Zi1pcHJAaWV0Zi5vcmcuCisKKworRGlzY2xhaW1lciBvZiBWYWxpZGl0eQorCisgICBUaGlzIGRvY3VtZW50IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbiBhcmUgcHJvdmlkZWQgb24gYW4KKyAgICJBUyBJUyIgYmFzaXMgYW5kIFRIRSBDT05UUklCVVRPUiwgVEhFIE9SR0FOSVpBVElPTiBIRS9TSEUgUkVQUkVTRU5UUworICAgT1IgSVMgU1BPTlNPUkVEIEJZIChJRiBBTlkpLCBUSEUgSU5URVJORVQgU09DSUVUWSBBTkQgVEhFIElOVEVSTkVUCisgICBFTkdJTkVFUklORyBUQVNLIEZPUkNFIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsCisgICBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBXQVJSQU5UWSBUSEFUIFRIRSBVU0UgT0YgVEhFCisgICBJTkZPUk1BVElPTiBIRVJFSU4gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFJJR0hUUyBPUiBBTlkgSU1QTElFRAorICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKworQ29weXJpZ2h0IFN0YXRlbWVudAorCisgICBDb3B5cmlnaHQgKEMpIFRoZSBJbnRlcm5ldCBTb2NpZXR5ICgyMDA1KS4gIFRoaXMgZG9jdW1lbnQgaXMgc3ViamVjdAorICAgdG8gdGhlIHJpZ2h0cywgbGljZW5zZXMgYW5kIHJlc3RyaWN0aW9ucyBjb250YWluZWQgaW4gQkNQIDc4LCBhbmQKKyAgIGV4Y2VwdCBhcyBzZXQgZm9ydGggdGhlcmVpbiwgdGhlIGF1dGhvcnMgcmV0YWluIGFsbCB0aGVpciByaWdodHMuCisKKworQWNrbm93bGVkZ21lbnQKKworICAgRnVuZGluZyBmb3IgdGhlIFJGQyBFZGl0b3IgZnVuY3Rpb24gaXMgY3VycmVudGx5IHByb3ZpZGVkIGJ5IHRoZQorICAgSW50ZXJuZXQgU29jaWV0eS4KKworCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgICBFeHBpcmVzIEp1bHkgMiwgMjAwNSAgICAgICAgICAgICAgICAgW1BhZ2UgMjJdCisMCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9kb2MvZHJhZnQtaGVybGVpbi1zcGVleC1ydHAtcHJvZmlsZS0wMy54bWwgYi8zcmRwYXJ0eS9zcGVleC9kb2MvZHJhZnQtaGVybGVpbi1zcGVleC1ydHAtcHJvZmlsZS0wMy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5ZWZjZAotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2RvYy9kcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAzLnhtbApAQCAtMCwwICsxLDgxNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8IURPQ1RZUEUgcmZjIFNZU1RFTSAncmZjMjYyOS5kdGQnPgorPD9yZmMgdG9jPSJ5ZXMiID8+CisKKzxyZmMgaXByPSJmdWxsMzY2NyIgZG9jTmFtZT0iUlRQIFBheWxvYWQgRm9ybWF0IGZvciB0aGUgU3BlZXggQ29kZWMiPgorCis8ZnJvbnQ+Cis8dGl0bGU+ZHJhZnQtaGVybGVpbi1zcGVleC1ydHAtcHJvZmlsZS0wMzwvdGl0bGU+CisKKzxhdXRob3IgaW5pdGlhbHM9IkciIHN1cm5hbWU9IkhlcmxlaW4iIGZ1bGxuYW1lPSJHcmVnIEhlcmxlaW4iPgorPG9yZ2FuaXphdGlvbj48L29yZ2FuaXphdGlvbj4KKzxhZGRyZXNzPgorPGVtYWlsPmdoZXJsZWluQGhlcmxlaW4uY29tPC9lbWFpbD4KKzxwb3N0YWw+Cis8c3RyZWV0PjIwMzQgRmlsYmVydCBTdHJlZXQ8L3N0cmVldD4KKzxjaXR5PlNhbiBGcmFuY2lzY288L2NpdHk+IAorPHJlZ2lvbj5DYWxpZm9ybmlhPC9yZWdpb24+Cis8Y29kZT45NDEyMzwvY29kZT4KKzxjb3VudHJ5PlVuaXRlZCBTdGF0ZXM8L2NvdW50cnk+IAorPC9wb3N0YWw+Cis8L2FkZHJlc3M+Cis8L2F1dGhvcj4KKworPGF1dGhvciBpbml0aWFscz0iUyIgc3VybmFtZT0iTW9ybGF0IiBmdWxsbmFtZT0iU2ltb24gTW9ybGF0Ij4KKzxhZGRyZXNzPgorPGVtYWlsPnNpbW9uLm1vcmxhdEBsaW5waG9uZS5vcmc8L2VtYWlsPgorPHBvc3RhbD4KKzxzdHJlZXQ+MzUsIGF2IGRlIFZpemlsbGUgQXBwIDQyPC9zdHJlZXQ+Cis8Y2l0eT5HcmVub2JsZTwvY2l0eT4KKzxjb2RlPjM4MDAwPC9jb2RlPgorPGNvdW50cnk+RnJhbmNlPC9jb3VudHJ5PgorPC9wb3N0YWw+Cis8L2FkZHJlc3M+Cis8L2F1dGhvcj4KKworPGF1dGhvciBpbml0aWFscz0iSiIgc3VybmFtZT0iSmVhbi1NYXJjIiBmdWxsbmFtZT0iSmVhbi1NYXJjIFZhbGluIj4KKzxhZGRyZXNzPgorPGVtYWlsPmplYW4tbWFyYy52YWxpbkBoZXJtZXMudXNoZXJiLmNhPC9lbWFpbD4KKzxwb3N0YWw+Cis8c3RyZWV0PkRlcGFydG1lbnQgb2YgRWxlY3RyaWNhbCBhbmQgQ29tcHV0ZXIgRW5naW5lZXJpbmc8L3N0cmVldD4KKzxzdHJlZXQ+VW5pdmVyc2l0eSBvZiBTaGVyYnJvb2tlPC9zdHJlZXQ+Cis8c3RyZWV0PjI1MDAgYmx2ZCBVbml2ZXJzaXRlPC9zdHJlZXQ+Cis8Y2l0eT5TaGVyYnJvb2tlPC9jaXR5PgorPHJlZ2lvbj5RdWViZWM8L3JlZ2lvbj4KKzxjb2RlPkoxSyAyUjE8L2NvZGU+Cis8Y291bnRyeT5DYW5hZGE8L2NvdW50cnk+Cis8L3Bvc3RhbD4KKzwvYWRkcmVzcz4KKzwvYXV0aG9yPgorCis8YXV0aG9yIGluaXRpYWxzPSJSIiBzdXJuYW1lPSJIYXJkaW1hbiIgZnVsbG5hbWU9IlJvZ2VyIEhhcmRpbWFuIj4KKzxhZGRyZXNzPgorPGVtYWlsPnJvZ2VyQGZyZWVic2Qub3JnPC9lbWFpbD4KKzxwb3N0YWw+Cis8c3RyZWV0PjQ5IE5ldHRsZXRvbiBSb2FkPC9zdHJlZXQ+Cis8Y2l0eT5DaGVsdGVuaGFtPC9jaXR5PgorPHJlZ2lvbj5HbG91Y2VzdGVyc2hpcmU8L3JlZ2lvbj4KKzxjb2RlPkdMNTEgNk5SPC9jb2RlPgorPGNvdW50cnk+RW5nbGFuZDwvY291bnRyeT4KKzwvcG9zdGFsPgorPC9hZGRyZXNzPgorPC9hdXRob3I+CisKKworPGF1dGhvciBpbml0aWFscz0iUCIgc3VybmFtZT0iS2VyciIgZnVsbG5hbWU9IlBoaWwgS2VyciI+Cis8YWRkcmVzcz4KKzxlbWFpbD5waGlsQHBsdXMyNC5jb208L2VtYWlsPgorPHBvc3RhbD4KKzxjb3VudHJ5PkVuZ2xhbmQ8L2NvdW50cnk+Cis8L3Bvc3RhbD4KKzwvYWRkcmVzcz4KKzwvYXV0aG9yPgorCis8ZGF0ZSBkYXk9IjAxIiBtb250aD0iSmFudWFyeSIgeWVhcj0iMjAwNSIgLz4KKworPGFyZWE+R2VuZXJhbDwvYXJlYT4KKzx3b3JrZ3JvdXA+QVZUIFdvcmtpbmcgR3JvdXA8L3dvcmtncm91cD4KKzxrZXl3b3JkPkktRDwva2V5d29yZD4KKworPGtleXdvcmQ+SW50ZXJuZXQtRHJhZnQ8L2tleXdvcmQ+Cis8a2V5d29yZD5TcGVleDwva2V5d29yZD4KKzxrZXl3b3JkPlJUUDwva2V5d29yZD4KKzxhYnN0cmFjdD4KKzx0PgorU3BlZXggaXMgYW4gb3Blbi1zb3VyY2Ugdm9pY2UgY29kZWMgc3VpdGFibGUgZm9yIHVzZSBpbiBWb2ljZSBvdmVyCitJUCAoVm9JUCkgdHlwZSBhcHBsaWNhdGlvbnMuICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgcGF5bG9hZAorZm9ybWF0IGZvciBTcGVleCBnZW5lcmF0ZWQgYml0IHN0cmVhbXMgd2l0aGluIGFuIFJUUCBwYWNrZXQuICBBbHNvCitpbmNsdWRlZCBoZXJlIGFyZSB0aGUgbmVjZXNzYXJ5IGRldGFpbHMgZm9yIHRoZSB1c2Ugb2YgU3BlZXggd2l0aAordGhlIFNlc3Npb24gRGVzY3JpcHRpb24gUHJvdG9jb2wgKFNEUCkgYW5kIGEgcHJlbGltaW5hcnkgbWV0aG9kIG9mCit1c2luZyBTcGVleCB3aXRoaW4gSC4zMjMgYXBwbGljYXRpb25zLgorPC90PgorPC9hYnN0cmFjdD4KKzwvZnJvbnQ+CisKKzxtaWRkbGU+CisKKzxzZWN0aW9uIGFuY2hvcj0iQ29udmVudGlvbnMgdXNlZCBpbiB0aGlzIGRvY3VtZW50IiB0aXRsZT0iQ29udmVudGlvbnMgdXNlZCBpbiB0aGlzIGRvY3VtZW50Ij4KKzx0PgorVGhlIGtleSB3b3JkcyAiTVVTVCIsICJNVVNUIE5PVCIsICJSRVFVSVJFRCIsICJTSEFMTCIsICJTSEFMTCBOT1QiLAorIlNIT1VMRCIsICJTSE9VTEQgTk9UIiwgIlJFQ09NTUVOREVEIiwgIk1BWSIsIGFuZCAiT1BUSU9OQUwiIGluIHRoaXMKK2RvY3VtZW50IGFyZSB0byBiZSBpbnRlcnByZXRlZCBhcyBkZXNjcmliZWQgaW4gUkZDIDIxMTkgPHhyZWYgdGFyZ2V0PSJyZmMyMTE5Ij48L3hyZWY+LgorPC90PgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBhbmNob3I9Ik92ZXJ2aWV3IG9mIHRoZSBTcGVleCBDb2RlYyIgdGl0bGU9Ik92ZXJ2aWV3IG9mIHRoZSBTcGVleCBDb2RlYyI+CisKKzx0PgorU3BlZXggaXMgYmFzZWQgb24gdGhlIENFTFAgPHhyZWYgdGFyZ2V0PSJDRUxQIj48L3hyZWY+IGVuY29kaW5nIHRlY2huaXF1ZSB3aXRoIHN1cHBvcnQgZm9yIAorZWl0aGVyIG5hcnJvd2JhbmQgKG5vbWluYWwgOGtIeiksIHdpZGViYW5kIChub21pbmFsIDE2a0h6KSBvciAKK3VsdHJhLXdpZGViYW5kIChub21pbmFsIDMya0h6KSwgYW5kIChub24tb3B0aW1hbCkgcmF0ZXMgdXAgdG8gNDgga0h6IAorc2FtcGxpbmcgYWxzbyBhdmFpbGFibGUuICBUaGUgbWFpbiBjaGFyYWN0ZXJpc3RpY3MgY2FuIGJlIHN1bW1hcml6ZWQgCithcyBmb2xsb3dzOgorPC90PgorCis8dD4KKzxsaXN0IHN0eWxlPSJzeW1ib2xzIj4KKzx0PkZyZWUgc29mdHdhcmUvb3Blbi1zb3VyY2U8L3Q+Cis8dD5JbnRlZ3JhdGlvbiBvZiB3aWRlYmFuZCBhbmQgbmFycm93YmFuZCBpbiB0aGUgc2FtZSBiaXQtc3RyZWFtPC90PgorPHQ+V2lkZSByYW5nZSBvZiBiaXQtcmF0ZXMgYXZhaWxhYmxlPC90PgorPHQ+RHluYW1pYyBiaXQtcmF0ZSBzd2l0Y2hpbmcgYW5kIHZhcmlhYmxlIGJpdC1yYXRlIChWQlIpPC90PgorPHQ+Vm9pY2UgQWN0aXZpdHkgRGV0ZWN0aW9uIChWQUQsIGludGVncmF0ZWQgd2l0aCBWQlIpPC90PgorPHQ+VmFyaWFibGUgY29tcGxleGl0eTwvdD4KKzwvbGlzdD4KKzwvdD4KKworPC9zZWN0aW9uPgorCis8c2VjdGlvbiBhbmNob3I9IlJUUCBwYXlsb2FkIGZvcm1hdCBmb3IgU3BlZXgiIHRpdGxlPSJSVFAgcGF5bG9hZCBmb3JtYXQgZm9yIFNwZWV4Ij4KKworPHQ+CitGb3IgUlRQIGJhc2VkIHRyYW5zcG9ydGF0aW9uIG9mIFNwZWV4IGVuY29kZWQgYXVkaW8gdGhlIHN0YW5kYXJkIAorUlRQIGhlYWRlciBbMl0gaXMgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgcGF5bG9hZCBkYXRhIGJsb2Nrcy4gCitBbiBvcHRpb25hbCBwYWRkaW5nIHRlcm1pbmF0b3IgbWF5IGFsc28gYmUgdXNlZC4gCis8L3Q+Cis8YXJ0d29yaz48IVtDREFUQVsKKyAgICAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyAgICAgIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQorICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFJUUCBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICArPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9KworICAgICB8ICAgICAgICAgICAgICAgICBvbmUgb3IgbW9yZSBmcmFtZXMgb2YgU3BlZXggLi4uLiAgICAgICAgICAgICAgfAorICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICB8ICAgICAgICBvbmUgb3IgbW9yZSBmcmFtZXMgb2YgU3BlZXggLi4uLiAgICAgICB8ICAgIHBhZGRpbmcgICAgfAorICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworXV0+PC9hcnR3b3JrPgorCis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGFuY2hvcj0iUlRQIEhlYWRlciIgdGl0bGU9IlJUUCBIZWFkZXIiPgorCis8YXJ0d29yaz48IVtDREFUQVsKKyAgICAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyAgICAgIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQorICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICB8Vj0yfFB8WHwgIENDICAgfE18ICAgICBQVCAgICAgIHwgICAgICAgc2VxdWVuY2UgbnVtYmVyICAgICAgICAgfAorICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICB8ICAgICAgICAgICBzeW5jaHJvbml6YXRpb24gc291cmNlIChTU1JDKSBpZGVudGlmaWVyICAgICAgICAgICAgfAorICAgICArPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9KworICAgICB8ICAgICAgICAgICAgY29udHJpYnV0aW5nIHNvdXJjZSAoQ1NSQykgaWRlbnRpZmllcnMgICAgICAgICAgICAgfAorICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworXV0+PC9hcnR3b3JrPgorCis8dD4KK1RoZSBSVFAgaGVhZGVyIGJlZ2lucyB3aXRoIGFuIG9jdGV0IG9mIGZpZWxkcyAoViwgUCwgWCwgYW5kIENDKSB0byAgIAorc3VwcG9ydCBzcGVjaWFsaXplZCBSVFAgdXNlcyAoc2VlIDx4cmVmIHRhcmdldD0icmZjMzU1MCI+PC94cmVmPiBhbmQgPHhyZWYgdGFyZ2V0PSJyZmMzNTUxIj48L3hyZWY+IGZvciBkZXRhaWxzKS4gRm9yIAorU3BlZXggdGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIHVzZWQuCis8L3Q+CisKKzx0PlZlcnNpb24gKFYpOiAyIGJpdHM8L3Q+PHQ+CisgICBUaGlzIGZpZWxkIGlkZW50aWZpZXMgdGhlIHZlcnNpb24gb2YgUlRQLiBUaGUgdmVyc2lvbgorICAgdXNlZCBieSB0aGlzIHNwZWNpZmljYXRpb24gaXMgdHdvIDx4cmVmIHRhcmdldD0icmZjMzU1MCI+PC94cmVmPi4KKzwvdD4KKworPHQ+UGFkZGluZyAoUCk6IDEgYml0PC90Pjx0PgorICAgICAgSWYgdGhlIHBhZGRpbmcgYml0IGlzIHNldCwgdGhlIHBhY2tldCBjb250YWlucyBvbmUgb3IgbW9yZQorICAgICAgYWRkaXRpb25hbCBwYWRkaW5nIG9jdGV0cyBhdCB0aGUgZW5kIHdoaWNoIGFyZSBub3QgcGFydCBvZgorICAgICAgdGhlIHBheWxvYWQuICBQIGlzIHNldCBpZiB0aGUgdG90YWwgcGFja2V0IHNpemUgaXMgbGVzcyB0aGFuIAorICAgICAgdGhlIE1UVS4gIAorPC90PgorCis8dD5FeHRlbnNpb24gKFgpOiAxIGJpdDwvdD48dD4KKyAgICAgIElmIHRoZSBleHRlbnNpb24sIFgsIGJpdCBpcyBzZXQsIHRoZSBmaXhlZCBoZWFkZXIgTVVTVCBiZSAKKyAgICAgIGZvbGxvd2VkIGJ5IGV4YWN0bHkgb25lIGhlYWRlciBleHRlbnNpb24sIHdpdGggYSBmb3JtYXQgZGVmaW5lZCAKKyAgICAgIGluIFNlY3Rpb24gNS4zLjEuIG9mIDx4cmVmIHRhcmdldD0icmZjMzU1MCI+PC94cmVmPi4gCis8L3Q+CisKKzx0PkNTUkMgY291bnQgKENDKTogNCBiaXRzPC90Pjx0PgorICAgICAgVGhlIENTUkMgY291bnQgY29udGFpbnMgdGhlIG51bWJlciBvZiBDU1JDIGlkZW50aWZpZXJzLgorPC90PgorCis8dD5NYXJrZXIgKE0pOiAxIGJpdDwvdD48dD4KKyAgICAgIFRoZSBNIGJpdCBpbmRpY2F0ZXMgaWYgdGhlIHBhY2tldCBjb250YWlucyBjb21mb3J0IG5vaXNlLiAgVGhpcyAKKyAgICAgIGZpZWxkIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgY25nIFNEUCBhdHRyaWJ1dGUgYW5kIGlzIAorICAgICAgZGV0YWlsZWQgZnVydGhlciBpbiBzZWN0aW9uIDUgYmVsb3cuICBJbiBub3JtYWwgdXNhZ2UgdGhpcyBiaXQgCisgICAgICBpcyBzZXQgaWYgdGhlIHBhY2tldCBjb250YWlucyBjb21mb3J0IG5vaXNlLgorPC90PgorCis8dD5QYXlsb2FkIFR5cGUgKFBUKTogNyBiaXRzPC90Pjx0PgorICAgICAgQW4gUlRQIHByb2ZpbGUgZm9yIGEgY2xhc3Mgb2YgYXBwbGljYXRpb25zIGlzIGV4cGVjdGVkIHRvIGFzc2lnbiAKKyAgICAgIGEgcGF5bG9hZCB0eXBlIGZvciB0aGlzIGZvcm1hdCwgb3IgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgCisgICAgICBwYXlsb2FkIHR5cGUgU0hPVUxEIGJlIGNob3NlbiB3aGljaCBkZXNpZ25hdGVzIHRoZSBwYXlsb2FkIGFzIAorICAgICAgU3BlZXguCis8L3Q+CisKKzx0PlNlcXVlbmNlIG51bWJlcjogMTYgYml0czwvdD48dD4KKyAgICAgIFRoZSBzZXF1ZW5jZSBudW1iZXIgaW5jcmVtZW50cyBieSBvbmUgZm9yIGVhY2ggUlRQIGRhdGEgcGFja2V0CisgICAgICBzZW50LCBhbmQgbWF5IGJlIHVzZWQgYnkgdGhlIHJlY2VpdmVyIHRvIGRldGVjdCBwYWNrZXQgbG9zcyBhbmQKKyAgICAgIHRvIHJlc3RvcmUgcGFja2V0IHNlcXVlbmNlLiAgVGhpcyBmaWVsZCBpcyBkZXRhaWxlZCBmdXJ0aGVyIGluCisgICAgICA8eHJlZiB0YXJnZXQ9InJmYzM1NTAiPjwveHJlZj4uCis8L3Q+CisKKzx0PlRpbWVzdGFtcDogMzIgYml0czwvdD48dD4KKyAgICAgIEEgdGltZXN0YW1wIHJlcHJlc2VudGluZyB0aGUgc2FtcGxpbmcgdGltZSBvZiB0aGUgZmlyc3Qgc2FtcGxlIG9mCisgICAgICB0aGUgZmlyc3QgU3BlZXggcGFja2V0IGluIHRoZSBSVFAgcGFja2V0LiAgVGhlIGNsb2NrIGZyZXF1ZW5jeSAKKyAgICAgIE1VU1QgYmUgc2V0IHRvIHRoZSBzYW1wbGUgcmF0ZSBvZiB0aGUgZW5jb2RlZCBhdWRpbyBkYXRhLgorCisgICAgICBTcGVleCB1c2VzIDIwIG1zZWMgZnJhbWVzIGFuZCBhIHZhcmlhYmxlIHNhbXBsaW5nIHJhdGUgY2xvY2suICAKKyAgICAgIFRoZSBSVFAgdGltZXN0YW1wIE1VU1QgYmUgaW4gdW5pdHMgb2YgMS9YIG9mIGEgc2Vjb25kIHdoZXJlIFggCisgICAgICBpcyB0aGUgc2FtcGxlIHJhdGUgdXNlZC4gIFNwZWV4IHVzZXMgYSBub21pbmFsIDhrSHogc2FtcGxpbmcgcmF0ZQorICAgICAgZm9yIG5hcnJvd2JhbmQgdXNlLCBhIG5vbWluYWwgMTZrSHogc2FtcGxpbmcgcmF0ZSBmb3Igd2lkZWJhbmQgdXNlLCAKKyAgICAgIGFuZCBhIG5vbWluYWwgMzJrSHogc2FtcGxpbmcgcmF0ZSBmb3IgdWx0cmEtd2lkZWJhbmQgdXNlLgorPC90PgorCis8dD5TU1JDL0NTUkMgaWRlbnRpZmllcnM6PC90Pjx0PgorICAgICAgVGhlc2UgdHdvIGZpZWxkcywgMzIgYml0cyBlYWNoIHdpdGggb25lIFNTUkMgZmllbGQgYW5kIGEgbWF4aW11bSAKKyAgICAgIG9mIDE2IENTUkMgZmllbGRzLCBhcmUgYXMgZGVmaW5lZCBpbiA8eHJlZiB0YXJnZXQ9InJmYzM1NTAiPjwveHJlZj4uICAKKzwvdD4KKworPC9zZWN0aW9uPgorCis8c2VjdGlvbiBhbmNob3I9IlNwZWV4IHBheWxvYWQiIHRpdGxlPSJTcGVleCBwYXlsb2FkIj4KKworPHQ+CitGb3IgdGhlIHB1cnBvc2VzIG9mIHBhY2tldGl6aW5nIHRoZSBiaXQgc3RyZWFtIGluIFJUUCwgaXQgaXMgb25seQorbmVjZXNzYXJ5IHRvIGNvbnNpZGVyIHRoZSBzZXF1ZW5jZSBvZiBiaXRzIGFzIG91dHB1dCBieSB0aGUgU3BlZXgKK2VuY29kZXIgPHhyZWYgdGFyZ2V0PSJzcGVleGVuYyI+PC94cmVmPiwgYW5kIHByZXNlbnQgdGhlIHNhbWUgc2VxdWVuY2UgdG8gdGhlIGRlY29kZXIuICBUaGUgCitwYXlsb2FkIGZvcm1hdCBkZXNjcmliZWQgaGVyZSBtYWludGFpbnMgdGhpcyBzZXF1ZW5jZS4gIAorPC90PgorCis8dD4KK0EgdHlwaWNhbCBTcGVleCBmcmFtZSwgZW5jb2RlZCBhdCB0aGUgbWF4aW11bSBiaXRyYXRlLCBpcyBhcHByb3guCisxMTAgb2N0ZXRzIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIFNwZWV4IGZyYW1lcyBTSE9VTEQgYmUga2VwdCAKK2xlc3MgdGhhbiB0aGUgcGF0aCBNVFUgdG8gcHJldmVudCBmcmFnbWVudGF0aW9uLiAgU3BlZXggZnJhbWVzIE1VU1QKK05PVCBiZSBmcmFnbWVudGVkIGFjcm9zcyBtdWx0aXBsZSBSVFAgcGFja2V0cywKKzwvdD4KKworPHQ+CitBbiBSVFAgcGFja2V0IE1BWSBjb250YWluIFNwZWV4IGZyYW1lcyBvZiB0aGUgc2FtZSBiaXQgcmF0ZSBvciBvZgordmFyeWluZyBiaXQgcmF0ZXMsIHNpbmNlIHRoZSBiaXQtcmF0ZSBmb3IgYSBmcmFtZSBpcyBjb252ZXllZCBpbgorYmFuZCB3aXRoIHRoZSBzaWduYWwuCis8L3Q+CisKKzx0PgorVGhlIGVuY29kaW5nIGFuZCBkZWNvZGluZyBhbGdvcml0aG0gY2FuIGNoYW5nZSB0aGUgYml0IHJhdGUgYXQgYW55CisyMCBtc2VjIGZyYW1lIGJvdW5kYXJ5LCB3aXRoIHRoZSBiaXQgcmF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uIHByb3ZpZGVkCitpbi1iYW5kIHdpdGggdGhlIGJpdCBzdHJlYW0uICBFYWNoIGZyYW1lIGNvbnRhaW5zIGJvdGggIm1vZGUiIAorKG5hcnJvd2JhbmQsIHdpZGViYW5kIG9yIHVsdHJhLXdpZGViYW5kKSBhbmQgInN1Yi1tb2RlIiAoYml0LXJhdGUpIAoraW5mb3JtYXRpb24gaW4gdGhlIGJpdCBzdHJlYW0uICBObyBvdXQtb2YtYmFuZCBub3RpZmljYXRpb24gaXMgCityZXF1aXJlZCBmb3IgdGhlIGRlY29kZXIgdG8gcHJvY2VzcyBjaGFuZ2VzIGluIHRoZSBiaXQgcmF0ZSBzZW50IAorYnkgdGhlIGVuY29kZXIuCis8L3Q+CisKKzx0PgorSXQgaXMgUkVDT01NRU5ERUQgdGhhdCB2YWx1ZXMgb2YgODAwMCwgMTYwMDAgYW5kIDMyMDAwIGJlIHVzZWQgCitmb3Igbm9ybWFsIGludGVybmV0IHRlbGVwaG9ueSBhcHBsaWNhdGlvbnMsIHRob3VnaCB0aGUgc2FtcGxlIAorcmF0ZSBpcyBzdXBwb3J0ZWQgYXQgcmF0ZXMgYXMgbG93IGFzIDYwMDAgSHogYW5kIGFzIGhpZ2ggYXMgCis0OCBrSHouCis8L3Q+CisKKzx0PgorVGhlIFJUUCBwYXlsb2FkIE1VU1QgYmUgcGFkZGVkIHRvIHByb3ZpZGUgYW4gaW50ZWdlciBudW1iZXIgb2YKK29jdGV0cyBhcyB0aGUgcGF5bG9hZCBsZW5ndGguICBUaGVzZSBwYWRkaW5nIGJpdHMgYXJlIExTQiBhbGlnbmVkCitpbiBuZXR3b3JrIG9jdGV0IG9yZGVyIGFuZCBjb25zaXN0IG9mIGEgMCBmb2xsb3dlZCBieSBhbGwgb25lcworKHVudGlsIHRoZSBlbmQgb2YgdGhlIG9jdGV0KS4gIFRoaXMgcGFkZGluZyBpcyBvbmx5IHJlcXVpcmVkIGZvcgordGhlIGxhc3QgZnJhbWUgaW4gdGhlIHBhY2tldCwgYW5kIG9ubHkgdG8gZW5zdXJlIHRoZSBwYWNrZXQKK2NvbnRlbnRzIGVuZHMgb24gYW4gb2N0ZXQgYm91bmRhcnkuCis8L3Q+CisKKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gYW5jaG9yPSJFeGFtcGxlIFNwZWV4IHBhY2tldCIgdGl0bGU9IkV4YW1wbGUgU3BlZXggcGFja2V0Ij4KKworPHQ+CitJbiB0aGUgZXhhbXBsZSBiZWxvdyB3ZSBoYXZlIGEgc2luZ2xlIFNwZWV4IGZyYW1lIHdpdGggNSBiaXRzCitvZiBwYWRkaW5nIHRvIGVuc3VyZSB0aGUgcGFja2V0IHNpemUgZmFsbHMgb24gYW4gb2N0ZXQgYm91bmRhcnkuCis8L3Q+CisKKzxhcnR3b3JrPjwhW0NEQVRBWworICAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICB8Vj0yfFB8WHwgIENDICAgfE18ICAgICBQVCAgICAgIHwgICAgICAgc2VxdWVuY2UgbnVtYmVyICAgICAgICAgfAorICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgfCAgICAgICAgIHN5bmNocm9uaXphdGlvbiBzb3VyY2UgKFNTUkMpIGlkZW50aWZpZXIgICAgICAgICAgICAgIHwKKyAgICs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rCisKKyAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisgICAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCisgICArPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9KworICAgfCAgICAgICAgIGNvbnRyaWJ1dGluZyBzb3VyY2UgKENTUkMpIGlkZW50aWZpZXJzICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAuLnNwZWV4IGRhdGEuLiAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgfCAgICAgICAgICAgICAgICAgICAgICAgIC4uc3BlZXggZGF0YS4uICAgICAgICAgICAgICAgfDAgMSAxIDEgMXwKKyAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCitdXT48L2FydHdvcms+CisKKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gYW5jaG9yPSJNdWx0aXBsZSBTcGVleCBmcmFtZXMgaW4gYSBSVFAgcGFja2V0IiB0aXRsZT0iTXVsdGlwbGUgU3BlZXggZnJhbWVzIGluIGEgUlRQIHBhY2tldCI+CisKKzx0PgorQmVsb3cgaXMgYW4gZXhhbXBsZSBvZiB0d28gU3BlZXggZnJhbWVzIGNvbnRhaW5lZCB3aXRoaW4gb25lIFJUUCAKK3BhY2tldC4gIFRoZSBTcGVleCBmcmFtZSBsZW5ndGggaW4gdGhpcyBleGFtcGxlIGZhbGwgb24gYW4gb2N0ZXQKK2JvdW5kYXJ5IHNvIHRoZXJlIGlzIG5vIHBhZGRpbmcuCis8L3Q+CisKKzx0PgorU3BlZXggY29kZWNzIDx4cmVmIHRhcmdldD0ic3BlZXhlbmMiPjwveHJlZj4gYXJlIGFibGUgdG8gZGV0ZWN0IHRoZSB0aGUgYml0cmF0ZSBmcm9tIHRoZQorcGF5bG9hZCBhbmQgYXJlIHJlc3BvbnNpYmxlIGZvciBkZXRlY3RpbmcgdGhlIDIwIG1zZWMgYm91bmRhcmllcworYmV0d2VlbiBlYWNoIGZyYW1lLgorPC90PgorCis8YXJ0d29yaz48IVtDREFUQVsKKyAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisgICAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCisgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgfFY9MnxQfFh8ICBDQyAgIHxNfCAgICAgUFQgICAgICB8ICAgICAgIHNlcXVlbmNlIG51bWJlciAgICAgICAgIHwKKyAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgIHwgICAgICAgICBzeW5jaHJvbml6YXRpb24gc291cmNlIChTU1JDKSBpZGVudGlmaWVyICAgICAgICAgICAgICB8CisgICArPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9KworICAgfCAgICAgICAgIGNvbnRyaWJ1dGluZyBzb3VyY2UgKENTUkMpIGlkZW50aWZpZXJzICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAuLnNwZWV4IGRhdGEuLiAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgfCAgICAgICAgLi5zcGVleCBkYXRhLi4gICAgICAgICB8ICAgICAgICAuLnNwZWV4IGRhdGEuLiAgICAgICAgIHwKKyAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgLi5zcGVleCBkYXRhLi4gICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKK11dPjwvYXJ0d29yaz4KKworPC9zZWN0aW9uPgorCis8c2VjdGlvbiBhbmNob3I9Ik1JTUUgcmVnaXN0cmF0aW9uIG9mIFNwZWV4IiB0aXRsZT0iTUlNRSByZWdpc3RyYXRpb24gb2YgU3BlZXgiPgorCis8dD4KK0Z1bGwgZGVmaW5pdGlvbiBvZiB0aGUgTUlNRSA8eHJlZiB0YXJnZXQ9InJmYzIwNDUiPjwveHJlZj4gdHlwZSBmb3IgU3BlZXggd2lsbCBiZSBwYXJ0IG9mIHRoZSBPZ2cKK1ZvcmJpcyBNSU1FIHR5cGUgZGVmaW5pdGlvbiBhcHBsaWNhdGlvbiA8eHJlZiB0YXJnZXQ9InJmYzM1MzQiPjwveHJlZj4uICAKKzwvdD4KKworPHQ+TUlNRSBtZWRpYSB0eXBlIG5hbWU6IGF1ZGlvPC90PgorCis8dD5NSU1FIHN1YnR5cGU6IHNwZWV4PC90PgorCis8dD5PcHRpb25hbCBwYXJhbWV0ZXJzOjwvdD4KKworPHQ+UmVxdWlyZWQgcGFyYW1ldGVyczogdG8gYmUgaW5jbHVkZWQgaW4gdGhlIE9nZyBNSU1FIHNwZWNpZmljYXRpb24uPC90PgorCis8dD5FbmNvZGluZyBjb25zaWRlcmF0aW9uczo8L3Q+CisKKzx0PlNlY3VyaXR5IENvbnNpZGVyYXRpb25zOjwvdD4KKzx0PlNlZSBTZWN0aW9uIDYgb2YgUkZDIDMwNDcuPC90PgorCis8dD5JbnRlcm9wZXJhYmlsaXR5IGNvbnNpZGVyYXRpb25zOiBub25lPC90PgorCis8dD5QdWJsaXNoZWQgc3BlY2lmaWNhdGlvbjogIDwvdD4KKworPHQ+QXBwbGljYXRpb25zIHdoaWNoIHVzZSB0aGlzIG1lZGlhIHR5cGU6PC90PgorCis8dD5BZGRpdGlvbmFsIGluZm9ybWF0aW9uOiBub25lPC90PgorCis8dD5QZXJzb24gJmFtcDsgZW1haWwgYWRkcmVzcyB0byBjb250YWN0IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uOjx2c3BhY2UgYmxhbmtMaW5lcz0iMSIgLz4KKzxsaXN0IHN0eWxlPSJlbXB0eSI+Cis8dD5HcmVnIEhlcmxlaW4gJmx0O2doZXJsZWluQGhlcmxlaW4uY29tJmd0OzwvdD4KKzx0PkplYW4tTWFyYyBWYWxpbiAmbHQ7amVhbi1tYXJjLnZhbGluQGhlcm1lcy51c2hlcmIuY2EmZ3Q7PC90PgorPC9saXN0PgorPC90PgorCis8dD5JbnRlbmRlZCB1c2FnZTogQ09NTU9OPC90PgorCis8dD5BdXRob3IvQ2hhbmdlIGNvbnRyb2xsZXI6PC90PgorCis8dD4KKzxsaXN0IHN0eWxlPSJlbXB0eSI+Cis8dD5BdXRob3I6ICBHcmVnIEhlcmxlaW4gJmx0O2doZXJsZWluQGhlcmxlaW4uY29tJmd0OzwvdD4KKzx0PkNoYW5nZSBjb250cm9sbGVyOiBHcmVnIEhlcmxlaW4gJmx0O2doZXJsZWluQGhlcmxlaW4uY29tJmd0OzwvdD4gICAgICAgICAgCis8dD5DaGFuZ2UgY29udHJvbGxlcjogSUVURiBBVlQgV29ya2luZyBHcm91cDwvdD4KKzwvbGlzdD4KKzwvdD4KKworPHQ+CitUaGlzIHRyYW5zcG9ydCB0eXBlIHNpZ25pZmllcyB0aGF0IHRoZSBjb250ZW50IGlzIHRvIGJlIGludGVycHJldGVkCithY2NvcmRpbmcgdG8gdGhpcyBkb2N1bWVudCBpZiB0aGUgY29udGVudHMgYXJlIHRyYW5zbWl0dGVkIG92ZXIgUlRQLiAKK1Nob3VsZCB0aGlzIHRyYW5zcG9ydCB0eXBlIGFwcGVhciBvdmVyIGEgbG9zc2xlc3Mgc3RyZWFtaW5nIHByb3RvY29sCitzdWNoIGFzIFRDUCwgdGhlIGNvbnRlbnQgZW5jYXBzdWxhdGlvbiBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gCitPZ2cgU3RyZWFtIGluIGFjY29yZGFuY2Ugd2l0aCA8eHJlZiB0YXJnZXQ9InJmYzM1MzQiPjwveHJlZj4sIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IHRoZQorY29udGVudCBvZiB0aGUgT2dnIFN0cmVhbSBtYXkgYmUgYXNzdW1lZCB0byBiZSBTcGVleCBhdWRpbyBhbmQgCitTcGVleCBhdWRpbyBvbmx5LgorPC90PgorCis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGFuY2hvcj0iU0RQIHVzYWdlIG9mIFNwZWV4IiB0aXRsZT0iU0RQIHVzYWdlIG9mIFNwZWV4Ij4KKworPHQ+CitXaGVuIGNvbnZleWluZyBpbmZvcm1hdGlvbiBieSBTRFAgPHhyZWYgdGFyZ2V0PSJyZmMyMzI3Ij48L3hyZWY+LCB0aGUgZW5jb2RpbmcgbmFtZSBNVVNUIGJlCitzZXQgdG8gInNwZWV4Ii4gIEFuIGV4YW1wbGUgb2YgdGhlIG1lZGlhIHJlcHJlc2VudGF0aW9uIGluIFNEUCBmb3IKK29mZmVyaW5nIGEgc2luZ2xlIGNoYW5uZWwgb2YgU3BlZXggYXQgODAwMCBzYW1wbGVzIHBlciBzZWNvbmQgbWlnaHQKK2JlOgorPC90PgorCis8dnNwYWNlIGJsYW5rTGluZXM9IjEiIC8+Cis8bGlzdCBzdHlsZT0iZW1wdHkiPgorPHQ+bT1hdWRpbyA4MDg4IFJUUC9BVlAgOTc8L3Q+Cis8dD5hPXJ0cG1hcDo5NyBzcGVleC84MDAwPC90PgorPC9saXN0PgkKKworPHQ+CitOb3RlIHRoYXQgdGhlIFJUUCBwYXlsb2FkIHR5cGUgY29kZSBvZiA5NyBpcyBkZWZpbmVkIGluIHRoaXMgbWVkaWEKK2RlZmluaXRpb24gdG8gYmUgJ21hcHBlZCcgdG8gdGhlIHNwZWV4IGNvZGVjIGF0IGFuIDhrSHogc2FtcGxpbmcKK2ZyZXF1ZW5jeSB1c2luZyB0aGUgJ2E9cnRwbWFwJyBsaW5lLiAgQW55IG51bWJlciBmcm9tIDk2IHRvIDEyNworY291bGQgaGF2ZSBiZWVuIGNob3NlbiAodGhlIGFsbG93ZWQgcmFuZ2UgZm9yIGR5bmFtaWMgdHlwZXMpLiAgCis8L3Q+CisKKzx0PgorVGhlIHZhbHVlIG9mIHRoZSBzYW1wbGluZyBmcmVxdWVuY3kgaXMgdHlwaWNhbGx5IDgwMDAgZm9yIG5hcnJvdyBiYW5kCitvcGVyYXRpb24sIDE2MDAwIGZvciB3aWRlIGJhbmQgb3BlcmF0aW9uLCBhbmQgMzIwMDAgZm9yIHVsdHJhLXdpZGUKK2JhbmQgb3BlcmF0aW9uLgorPC90PgorCis8dD4KK0lmIGZvciBzb21lIHJlYXNvbiB0aGUgb2ZmZXJlciBoYXMgYmFuZHdpZHRoIGxpbWl0YXRpb25zLCB0aGUgY2xpZW50IAorbWF5IHVzZSB0aGUgImI9IiBoZWFkZXIsIGFzIGV4cGxhaW5lZCBpbiBTRFAgPHhyZWYgdGFyZ2V0PSJyZmMyMzI3Ij48L3hyZWY+LiBUaGUgZm9sbG93aW5nIGV4YW1wbGUKK2lsbHVzdHJhdGVzIHRoZSBjYXNlIHdoZXJlIHRoZSBvZmZlcmVyIGNhbm5vdCByZWNlaXZlIG1vcmUgdGhhbgorMTAga2JpdC9zLgorPC90PgorCis8dnNwYWNlIGJsYW5rTGluZXM9IjEiIC8+Cis8bGlzdCBzdHlsZT0iZW1wdHkiPgorPHQ+bT1hdWRpbyA4MDg4IFJUUC9BVlAgOTc8L3Q+Cis8dD5iPUFTOjEwPC90PgorPHQ+YT1ydG1hcDo5NyBzcGVleC84MDAwPC90PgorPC9saXN0PgkKKworPHQ+CitJbiB0aGlzIGNhc2UsIGlmIHRoZSByZW1vdGUgcGFydCBhZ3JlZXMsIGl0IHNob3VsZCBjb25maWd1cmUgaXRzCitTcGVleCBlbmNvZGVyIHNvIHRoYXQgaXQgZG9lcyBub3QgdXNlIG1vZGVzIHRoYXQgcHJvZHVjZSBtb3JlIHRoYW4KKzEwIGtiaXQvcy4gTm90ZSB0aGF0IHRoZSAiYj0iIGNvbnN0cmFpbnQgYWxzbyBhcHBsaWVzIG9uIGFsbAorcGF5bG9hZCB0eXBlcyB0aGF0IG1heSBiZSBwcm9wb3NlZCBpbiB0aGUgbWVkaWEgbGluZSAoIm09IikuCis8L3Q+CisKKzx0PgorQW4gb3RoZXIgd2F5IHRvIG1ha2UgcmVjb21tZW5kYXRpb25zIHRvIHRoZSByZW1vdGUgU3BlZXggZW5jb2RlcgoraXMgdG8gdXNlIGl0cyBzcGVjaWZpYyBwYXJhbWV0ZXJzIHZpYSB0aGUgYT1mbXRwOiBkaXJlY3RpdmUuICBUaGUKK2ZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBkZWZpbmVkIGZvciB1c2UgaW4gdGhpcyB3YXk6Cis8L3Q+CisKKzx2c3BhY2UgYmxhbmtMaW5lcz0iMSIgLz4KKzxsaXN0IHN0eWxlPSJlbXB0eSI+Cis8dD5wdGltZTogZHVyYXRpb24gb2YgZWFjaCBwYWNrZXQgaW4gbWlsbGlzZWNvbmRzLjx2c3BhY2UgYmxhbmtMaW5lcz0iMSIgLz48L3Q+CisKKzx0PnNyOiAgICBhY3R1YWwgc2FtcGxlIHJhdGUgaW4gSHouPHZzcGFjZSBibGFua0xpbmVzPSIxIiAvPjwvdD4KKworPHQ+ZWJ3OiAgIGVuY29kaW5nIGJhbmR3aWR0aCAtIGVpdGhlciAnbmFycm93JyBvciAnd2lkZScgb3IgCisgICAgICAgICd1bHRyYScgKGNvcnJlc3BvbmRzIHRvIG5vbWluYWwgODAwMCwgMTYwMDAsIGFuZAorCQkzMjAwMCBIeiBzYW1wbGluZyByYXRlcykuPHZzcGFjZSBibGFua0xpbmVzPSIxIiAvPjwvdD4KKworPHQ+dmJyOiAgIHZhcmlhYmxlIGJpdCByYXRlICAtIGVpdGhlciAnb24nICdvZmYnIG9yICd2YWQnCisJCShkZWZhdWx0cyB0byBvZmYpLiAgSWYgb24sIHZhcmlhYmxlIGJpdCByYXRlIGlzCisJCWVuYWJsZWQuICBJZiBvZmYsIGRpc2FibGVkLiAgSWYgc2V0IHRvICd2YWQnIHRoZW4KKwkJY29uc3RhbnQgYml0IHJhdGUgaXMgdXNlZCBidXQgc2lsZW5jZSB3aWxsIGJlIGVuY29kZWQKKwkJd2l0aCBzcGVjaWFsIHNob3J0IGZyYW1lcyB0byBpbmRpY2F0ZSBhIGxhY2sgb2Ygdm9pY2UKKwkJZm9yIHRoYXQgcGVyaW9kLjx2c3BhY2UgYmxhbmtMaW5lcz0iMSIgLz48L3Q+CisKKzx0PmNuZzogICBjb21mb3J0IG5vaXNlIGdlbmVyYXRpb24gLSBlaXRoZXIgJ29uJyBvciAnb2ZmJy4gSWYKKwkJb2ZmIHRoZW4gc2lsZW5jZSBmcmFtZXMgd2lsbCBiZSBzaWxlbnQ7IGlmICdvbicgdGhlbgorCQl0aG9zZSBmcmFtZXMgd2lsbCBiZSBmaWxsZWQgd2l0aCBjb21mb3J0IG5vaXNlLjx2c3BhY2UgYmxhbmtMaW5lcz0iMSIgLz48L3Q+CisKKzx0Pm1vZGU6ICBTcGVleCBlbmNvZGluZyBtb2RlLiBDYW4gYmUgezEsMiwzLDQsNSw2LGFueX0KKyAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byAzIGluIG5hcnJvd2JhbmQsIDYgaW4gd2lkZSBhbmQgdWx0cmEtd2lkZS48dnNwYWNlIGJsYW5rTGluZXM9IjEiIC8+PC90PgorCis8dD5wZW5oOgl1c2Ugb2YgcGVyY2VwdHVhbCBlbmhhbmNlbWVudC4gMSBpbmRpY2F0ZXMgCisJIAl0byB0aGUgZGVjb2RlciB0aGF0IHBlcmNlcHR1YWwgZW5oYW5jZW1lbnQgaXMgcmVjb21tZW5kZWQsCisJCTAgaW5kaWNhdGVzIHRoYXQgaXQgaXMgbm90LiBEZWZhdWx0cyB0byBvbiAoMSkuPHZzcGFjZSBibGFua0xpbmVzPSIxIiAvPjwvdD4KKzwvbGlzdD4JCisKKzx0PkV4YW1wbGVzOjwvdD4KKworPHZzcGFjZSBibGFua0xpbmVzPSIxIiAvPgorPGxpc3Qgc3R5bGU9ImVtcHR5Ij4KKyAgIAk8dD5tPWF1ZGlvIDgwMDggUlRQL0FWUCA5NzwvdD4KKwk8dD5hPXJ0cG1hcDo5NyBzcGVleC84MDAwPC90PgorCTx0PmE9Zm10cDo5NyBtb2RlPTQ8L3Q+Cis8L2xpc3Q+CQorCis8dD4KK1RoaXMgZXhhbXBsZXMgaWxsdXN0cmF0ZSBhbiBvZmZlcmVyIHRoYXQgd2lzaGVzIHRvIHJlY2VpdmUKK2EgU3BlZXggc3RyZWFtIGF0IDgwMDBIeiwgYnV0IG9ubHkgdXNpbmcgc3BlZXggbW9kZSAzLgorPC90PgorIAorPHQ+CitUaGUgb2ZmZXJlciBtYXkgc3VnZ2VzdCB0byB0aGUgcmVtb3RlIGRlY29kZXIgdG8gYWN0aXZhdGUKK2l0cyBwZXJjZXB0dWFsIGVuaGFuY2VtZW50IGZpbHRlciBsaWtlIHRoaXM6Cis8L3Q+CisKKzx2c3BhY2UgYmxhbmtMaW5lcz0iMSIgLz4gICAKKzxsaXN0IHN0eWxlPSJlbXB0eSI+CisJPHQ+bT1hdWRpbyA4MDg4IFJUUC9BVlAgOTc8L3Q+CisJPHQ+YT1ydG1hcDo5NyBzcGVleC84MDAwPC90PgorCTx0PmE9Zm10cDo5NyBwZW5oPTEgPC90PgorPC9saXN0PgkKKwkKKzx0PgorU2V2ZXJhbCBTcGVleCBzcGVjaWZpYyBwYXJhbWV0ZXJzIGNhbiBiZSBnaXZlbiBpbiBhIHNpbmdsZQorYT1mbXRwIGxpbmUgcHJvdmlkZWQgdGhhdCB0aGV5IGFyZSBzZXBhcmF0ZWQgYnkgYSBzZW1pLWNvbG9uOgorPC90PgorCis8dnNwYWNlIGJsYW5rTGluZXM9IjEiIC8+ICAgCis8bGlzdCBzdHlsZT0iZW1wdHkiPgorICAgCTx0PmE9Zm10cDo5NyBtb2RlPWFueTtwZW5oPTE8L3Q+Cis8L2xpc3Q+CQorCis8dD4KK1RoZSBvZmZlcmVyIG1heSBpbmRpY2F0ZSB0aGF0IGl0IHdpc2hlcyB0byBzZW5kIHZhcmlhYmxlIGJpdCByYXRlCitmcmFtZXMgd2l0aCBjb21mb3J0IG5vaXNlOgorPC90PgorCis8dnNwYWNlIGJsYW5rTGluZXM9IjEiIC8+Cis8bGlzdCBzdHlsZT0iZW1wdHkiPgorCTx0Pm09YXVkaW8gODA4OCBSVFAvQVZQIDk3PC90PgorCTx0PmE9cnRtYXA6OTcgc3BlZXgvODAwMDwvdD4KKwk8dD5hPWZtdHA6OTcgdmJyPW9uO2NuZz1vbjwvdD4KKzwvbGlzdD4JCisKKzx0PgorVGhlICJwdGltZSIgYXR0cmlidXRlIGlzIHVzZWQgdG8gZGVub3RlIHRoZSBwYWNrZXRpemF0aW9uIAoraW50ZXJ2YWwgKGllLCBob3cgbWFueSBtaWxsaXNlY29uZHMgb2YgYXVkaW8gaXMgZW5jb2RlZCBpbiBhIAorc2luZ2xlIFJUUCBwYWNrZXQpLiAgU2luY2UgU3BlZXggdXNlcyAyMCBtc2VjIGZyYW1lcywgcHRpbWUgdmFsdWVzIAorb2YgbXVsdGlwbGVzIG9mIDIwIGRlbm90ZSBtdWx0aXBsZSBTcGVleCBmcmFtZXMgcGVyIHBhY2tldC4gIAorVmFsdWVzIG9mIHB0aW1lIHdoaWNoIGFyZSBub3QgbXVsdGlwbGVzIG9mIDIwIE1VU1QgYmUgaWdub3JlZCAKK2FuZCBjbGllbnRzIE1VU1QgdXNlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDIwIGluc3RlYWQuCis8L3Q+CisgICAKKzx0PgorSW4gdGhlIGV4YW1wbGUgYmVsb3cgdGhlIHB0aW1lIHZhbHVlIGlzIHNldCB0byA0MCwgaW5kaWNhdGluZyB0aGF0IAordGhlcmUgYXJlIDIgZnJhbWVzIGluIGVhY2ggcGFja2V0LgkKKzwvdD4KKworPHZzcGFjZSBibGFua0xpbmVzPSIxIiAvPiAgIAorPGxpc3Qgc3R5bGU9ImVtcHR5Ij4KKyAgIAk8dD5tPWF1ZGlvIDgwMDggUlRQL0FWUCA5NzwvdD4KKwk8dD5hPXJ0cG1hcDo5NyBzcGVleC84MDAwPC90PgorCTx0PmE9cHRpbWU6NDA8L3Q+Cis8L2xpc3Q+CQorCis8dD4KK05vdGUgdGhhdCB0aGUgcHRpbWUgcGFyYW1ldGVyIGFwcGxpZXMgdG8gYWxsIHBheWxvYWRzIGxpc3RlZAoraW4gdGhlIG1lZGlhIGxpbmUgYW5kIGlzIG5vdCB1c2VkIGFzIHBhcnQgb2YgYW4gYT1mbXRwIGRpcmVjdGl2ZS4KKzwvdD4KKworPHQ+CitWYWx1ZXMgb2YgcHRpbWUgbm90IG11bHRpcGxlIG9mIDIwIG1zZWMgYXJlIG1lYW5pbmdsZXNzLCBzbyB0aGUgCityZWNlaXZlciBvZiBzdWNoIHB0aW1lIHZhbHVlcyBNVVNUIGlnbm9yZSB0aGVtLiAgSWYgZHVyaW5nIHRoZSAKK2xpZmUgb2YgYW4gUlRQIHNlc3Npb24gdGhlIHB0aW1lIHZhbHVlIGNoYW5nZXMsIHdoZW4gdGhlcmUgYXJlIAorbXVsdGlwbGUgU3BlZXggZnJhbWVzIGZvciBleGFtcGxlLCB0aGUgU0RQIHZhbHVlIG11c3QgYWxzbyByZWZsZWN0IAordGhlIG5ldyB2YWx1ZS4gCis8L3Q+CisKKzx0PgorQ2FyZSBtdXN0IGJlIHRha2VuIHdoZW4gc2V0dGluZyB0aGUgdmFsdWUgb2YgcHRpbWUgc28gdGhhdCB0aGUgCitSVFAgcGFja2V0IHNpemUgZG9lcyBub3QgZXhjZWVkIHRoZSBwYXRoIE1UVS4gCis8L3Q+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGFuY2hvcj0iSVRVIEguMzIzL0guMjQ1IFVzZSBvZiBTcGVleCIgdGl0bGU9IklUVSBILjMyMy9ILjI0NSBVc2Ugb2YgU3BlZXgiPgorCis8dD4KK0FwcGxpY2F0aW9uIGlzIHVuZGVyd2F5IHRvIG1ha2UgU3BlZXggYSBzdGFuZGFyZCBJVFUgY29kZWMuCitIb3dldmVyLCB1bnRpbCB0aGF0IGlzIGZpbmFsaXplZCwgU3BlZXggTUFZIGJlIHVzZWQgaW4gSC4zMjMgPHhyZWYgdGFyZ2V0PSJIMzIzIj48L3hyZWY+IGJ5Cit1c2luZyBhIG5vbi1zdGFuZGFyZCBjb2RlYyBibG9jayBkZWZpbml0aW9uIGluIHRoZSBILjI0NSA8eHJlZiB0YXJnZXQ9IkgyNDUiPjwveHJlZj4gY29kZWMKK2NhcGFiaWxpdHkgbmVnb3RpYXRpb25zLiAgCis8L3Q+CisKKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gYW5jaG9yPSJOb25TdGFuZGFyZE1lc3NhZ2UgZm9ybWF0IiB0aXRsZT0iTm9uU3RhbmRhcmRNZXNzYWdlIGZvcm1hdCI+CisKKzx0PgorRm9yIFNwZWV4IHVzZSBpbiBILjI0NSA8eHJlZiB0YXJnZXQ9IkgyNDUiPjwveHJlZj4gYmFzZWQgc3lzdGVtcywgdGhlIGZpZWxkcyBpbiB0aGUKK05vblN0YW5kYXJkTWVzc2FnZSBzaG91bGQgYmU6Cis8L3Q+CisKKzx2c3BhY2UgYmxhbmtMaW5lcz0iMSIgLz4gICAKKzxsaXN0IHN0eWxlPSJlbXB0eSI+Cis8dD50MzVDb3VudHJ5Q29kZSAgID0gSGV4OiBCNTwvdD4KKzx0PnQzNUV4dGVuc2lvbiAgICAgPSBIZXg6IDAwPC90PgorPHQ+bWFudWZhY3R1cmVyQ29kZSA9IEhleDogMDAyNjwvdD4KKzx0PltMZW5ndGggb2YgdGhlIEJpbmFyeSBTZXF1ZW5jZSAoOCBiaXQgbnVtYmVyKV08L3Q+Cis8dD5bQmluYXJ5IFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgYW4gQVNDSUkgc3RyaW5nLCBubyBOVUxMIHRlcm1pbmF0b3JdPC90PgorPC9saXN0PgorCis8dD4KK1RoZSBiaW5hcnkgc2VxdWVuY2UgaXMgYW4gYXNjaWkgc3RyaW5nIG1lcmVseSBmb3IgZWFzZSBvZiB1c2UuCitUaGUgc3RyaW5nIGlzIG5vdCBudWxsIHRlcm1pbmF0ZWQuICBUaGUgZm9ybWF0IG9mIHRoaXMgc3RyaW5nIGlzCis8L3Q+CisKKzx2c3BhY2UgYmxhbmtMaW5lcz0iMSIgLz4gICAKKzxsaXN0IHN0eWxlPSJlbXB0eSI+Cis8dD5zcGVleCBbb3B0aW9uYWwgdmFyaWFibGVzXTwvdD4KKzwvbGlzdD4KKyAgIAorPHQ+CitUaGUgb3B0aW9uYWwgdmFyaWFibGVzIGFyZSBpZGVudGljYWwgdG8gdGhvc2UgdXNlZCBmb3IgdGhlIFNEUAorYT1mbXRwIHN0cmluZ3MgZGlzY3Vzc2VkIGluIHNlY3Rpb24gNSBhYm92ZS4gIFRoZSBzdHJpbmcgaXMgYnVpbHQKK3RvIGJlIGFsbCBvbiBvbmUgbGluZSwgZWFjaCBrZXktdmFsdWUgcGFpciBzZXBhcmF0ZWQgYnkgYQorc2VtaS1jb2xvbi4gIFRoZSBvcHRpb25hbCB2YXJpYWJsZXMgTUFZIGJlIG9taXR0ZWQsIHdoaWNoIGNhdXNlcwordGhlIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGFzc3VtZWQuICBUaGV5IGFyZToKKzwvdD4KKworPHZzcGFjZSBibGFua0xpbmVzPSIxIiAvPiAgIAorPGxpc3Qgc3R5bGU9ImVtcHR5Ij4KKzx0PmVidz1uYXJyb3c7bW9kZT0zO3Zicj1vZmY7Y25nPW9mZjtwdGltZT0yMDtzcj04MDAwO3Blbmg9bm87PC90PgorPC9saXN0PgorCis8dD4KK1RoZSBmaWZ0aCBvY3RldCBvZiB0aGUgYmxvY2sgaXMgdGhlIGxlbmd0aCBvZiB0aGUgYmluYXJ5IHNlcXVlbmNlLgorPC90PgorCis8dD4KK05PVEU6ICB0aGlzIG1ldGhvZCBjYW4gcmVzdWx0IGluIHRoZSBhZHZlcnRpc2luZyBvZiBhIGxhcmdlIG51bWJlcgorb2YgU3BlZXggJ2NvZGVjcycgYmFzZWQgb24gdGhlIG51bWJlciBvZiB2YXJpYWJsZXMgcG9zc2libGUuICBGb3IKK21vc3QgVm9JUCBhcHBsaWNhdGlvbnMsIHVzZSBvZiB0aGUgZGVmYXVsdCBiaW5hcnkgc2VxdWVuY2Ugb2YKKydzcGVleCcgaXMgUkVDT01NRU5ERUQgdG8gYmUgdXNlZCBpbiBhZGRpdGlvbiB0byBhbGwgb3RoZXIgb3B0aW9ucy4KK1RoaXMgbWF4aW1pemVzIHRoZSBjaGFuY2VzIHRoYXQgdHdvIEguMzIzIGJhc2VkIGFwcGxpY2F0aW9ucyB0aGF0CitzdXBwb3J0IFNwZWV4IGNhbiBmaW5kIGEgbXV0dWFsIGNvZGVjLiAgIAorPC90PgorCis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGFuY2hvcj0iUlRQIFBheWxvYWQgVHlwZXMiIHRpdGxlPSJSVFAgUGF5bG9hZCBUeXBlcyI+CisKKzx0PgorRHluYW1pYyBwYXlsb2FkIHR5cGUgY29kZXMgTVVTVCBiZSBuZWdvdGlhdGVkICdvdXQtb2YtYmFuZCcKK2ZvciB0aGUgYXNzaWdubWVudCBvZiBhIGR5bmFtaWMgcGF5bG9hZCB0eXBlIGZyb20gdGhlCityYW5nZSBvZiA5Ni0xMjcuICBILjMyMyBhcHBsaWNhdGlvbnMgTVVTVCB1c2UgdGhlIEguMjQ1CitIMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyBlbmNvZGluZyB0byBhY2NvbXBsaXNoIHRoaXMuICAKKzwvdD4KKworPC9zZWN0aW9uPgorCis8c2VjdGlvbiBhbmNob3I9IlNlY3VyaXR5IENvbnNpZGVyYXRpb25zIiB0aXRsZT0iU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMiPgorCis8dD4KK1JUUCBwYWNrZXRzIHVzaW5nIHRoZSBwYXlsb2FkIGZvcm1hdCBkZWZpbmVkIGluIHRoaXMgc3BlY2lmaWNhdGlvbgorYXJlIHN1YmplY3QgdG8gdGhlIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIGRpc2N1c3NlZCBpbiB0aGUgUlRQCitzcGVjaWZpY2F0aW9uIDx4cmVmIHRhcmdldD0icmZjMzU1MCI+PC94cmVmPiwgYW5kIGFueSBhcHByb3ByaWF0ZSBSVFAgcHJvZmlsZS4gIFRoaXMgaW1wbGllcwordGhhdCBjb25maWRlbnRpYWxpdHkgb2YgdGhlIG1lZGlhIHN0cmVhbXMgaXMgYWNoaWV2ZWQgYnkgZW5jcnlwdGlvbi4KK0JlY2F1c2UgdGhlIGRhdGEgY29tcHJlc3Npb24gdXNlZCB3aXRoIHRoaXMgcGF5bG9hZCBmb3JtYXQgaXMgYXBwbGllZAorZW5kLXRvLWVuZCwgZW5jcnlwdGlvbiBtYXkgYmUgcGVyZm9ybWVkIGFmdGVyIGNvbXByZXNzaW9uIHNvIHRoZXJlIGlzCitubyBjb25mbGljdCBiZXR3ZWVuIHRoZSB0d28gb3BlcmF0aW9ucy4KKzwvdD4KKworPHQ+CitBIHBvdGVudGlhbCBkZW5pYWwtb2Ytc2VydmljZSB0aHJlYXQgZXhpc3RzIGZvciBkYXRhIGVuY29kaW5ncyB1c2luZworY29tcHJlc3Npb24gdGVjaG5pcXVlcyB0aGF0IGhhdmUgbm9uLXVuaWZvcm0gcmVjZWl2ZXItZW5kCitjb21wdXRhdGlvbmFsIGxvYWQuICBUaGUgYXR0YWNrZXIgY2FuIGluamVjdCBwYXRob2xvZ2ljYWwgZGF0YWdyYW1zCitpbnRvIHRoZSBzdHJlYW0gd2hpY2ggYXJlIGNvbXBsZXggdG8gZGVjb2RlIGFuZCBjYXVzZSB0aGUgcmVjZWl2ZXIgdG8KK2JlIG92ZXJsb2FkZWQuICBIb3dldmVyLCB0aGlzIGVuY29kaW5nIGRvZXMgbm90IGV4aGliaXQgYW55CitzaWduaWZpY2FudCBub24tdW5pZm9ybWl0eS4KKzwvdD4KKworPHQ+CitBcyB3aXRoIGFueSBJUC1iYXNlZCBwcm90b2NvbCwgaW4gc29tZSBjaXJjdW1zdGFuY2VzIGEgcmVjZWl2ZXIgbWF5CitiZSBvdmVybG9hZGVkIHNpbXBseSBieSB0aGUgcmVjZWlwdCBvZiB0b28gbWFueSBwYWNrZXRzLCBlaXRoZXIKK2Rlc2lyZWQgb3IgdW5kZXNpcmVkLiAgTmV0d29yay1sYXllciBhdXRoZW50aWNhdGlvbiBtYXkgYmUgdXNlZCB0bworZGlzY2FyZCBwYWNrZXRzIGZyb20gdW5kZXNpcmVkIHNvdXJjZXMsIGJ1dCB0aGUgcHJvY2Vzc2luZyBjb3N0IG9mCit0aGUgYXV0aGVudGljYXRpb24gaXRzZWxmIG1heSBiZSB0b28gaGlnaC4gIAorPC90PgorCis8L3NlY3Rpb24+IAorCis8c2VjdGlvbiBhbmNob3I9IkFja25vd2xlZGdtZW50cyIgdGl0bGU9IkFja25vd2xlZGdtZW50cyI+CisKKzx0PgorVGhlIGF1dGhvcnMgd291bGQgbGlrZSB0byB0aGFuayBFcXVpdmFsZW5jZSBQdHkgTHRkIG9mIEF1c3RyYWxpYQorZm9yIHRoZWlyIGFzc2lzdGFuY2UgaW4gYXR0ZW1wdGluZyB0byBzdGFuZGFyZGl6ZSB0aGUgdXNlIG9mIFNwZWV4CitpbiBILjMyMyBhcHBsaWNhdGlvbnMsIGFuZCBmb3IgaW1wbGVtZW50aW5nIFNwZWV4IGluIHRoZWlyIG9wZW4KK3NvdXJjZSBPcGVuSDMyMyBzdGFjay4gIFRoZSBhdXRob3JzIHdvdWxkIGFsc28gbGlrZSB0byB0aGFuayBCcmlhbgorQy4gV2lsZXMgJmx0O2JyaWFuQHN0cmVhbWNvbW0uY29tJmd0OyBvZiBTdHJlYW1Db21tIGZvciBoaXMgYXNzaXN0YW5jZSBpbgorZGV2ZWxvcGluZyB0aGUgcHJvcG9zZWQgc3RhbmRhcmQgZm9yIFNwZWV4IHVzZSBpbiBILjMyMworYXBwbGljYXRpb25zLgorPC90PgorCis8dD4KK1RoZSBhdXRob3JzIHdvdWxkIGFsc28gbGlrZSB0byB0aGFuayB0aGUgZm9sbG93aW5nIG1lbWJlcnMgb2YgdGhlIAorU3BlZXggYW5kIEFWVCBjb21tdW5pdGllcyBmb3IgdGhlaXIgaW5wdXQ6ICBSb3NzIEZpbmxheXNvbiwgCitGZWRlcmljbyBNb250ZXNpbm8gUG91em9scywgSGVubmluZyBTY2h1bHpyaW5uZSwgTWFnbnVzIFdlc3Rlcmx1bmQuCis8L3Q+Cis8L3NlY3Rpb24+IAorCis8L21pZGRsZT4KKworPGJhY2s+CisKKzxyZWZlcmVuY2VzIHRpdGxlPSJOb3JtYXRpdmUgUmVmZXJlbmNlcyI+CisKKzxyZWZlcmVuY2UgYW5jaG9yPSJyZmMyMTE5Ij4KKzxmcm9udD4KKzx0aXRsZT5LZXkgd29yZHMgZm9yIHVzZSBpbiBSRkNzIHRvIEluZGljYXRlIFJlcXVpcmVtZW50IExldmVscyA8L3RpdGxlPgorPGF1dGhvciBpbml0aWFscz0iUy4iIHN1cm5hbWU9IkJyYWRuZXIiIGZ1bGxuYW1lPSJTY290dCBCcmFkbmVyIj48L2F1dGhvcj4KKzwvZnJvbnQ+Cis8c2VyaWVzSW5mbyBuYW1lPSJSRkMiIHZhbHVlPSIyMTE5IiAvPgorPC9yZWZlcmVuY2U+IAorCis8cmVmZXJlbmNlIGFuY2hvcj0icmZjMzU1MCI+Cis8ZnJvbnQ+Cis8dGl0bGU+UlRQOiBBIFRyYW5zcG9ydCBQcm90b2NvbCBmb3IgcmVhbC10aW1lIGFwcGxpY2F0aW9uczwvdGl0bGU+Cis8YXV0aG9yIGluaXRpYWxzPSJILiIgc3VybmFtZT0iU2NodWx6cmlubmUiIGZ1bGxuYW1lPSIiPjwvYXV0aG9yPgorPGF1dGhvciBpbml0aWFscz0iUy4iIHN1cm5hbWU9IkNhc25lciIgZnVsbG5hbWU9IiI+PC9hdXRob3I+Cis8YXV0aG9yIGluaXRpYWxzPSJSLiIgc3VybmFtZT0iRnJlZGVyaWNrIiBmdWxsbmFtZT0iIj48L2F1dGhvcj4KKzxhdXRob3IgaW5pdGlhbHM9IlYuIiBzdXJuYW1lPSJKYWNvYnNvbiIgZnVsbG5hbWU9IiI+PC9hdXRob3I+Cis8L2Zyb250PgorPHNlcmllc0luZm8gbmFtZT0iUkZDIiB2YWx1ZT0iMzU1MCIgLz4KKzwvcmVmZXJlbmNlPiAKKworPHJlZmVyZW5jZSBhbmNob3I9InJmYzIwNDUiPgorPGZyb250PgorPHRpdGxlPk11bHRpcHVycG9zZSBJbnRlcm5ldCBNYWlsIEV4dGVuc2lvbnMgKE1JTUUpIFBhcnQgT25lOiBGb3JtYXQgb2YgSW50ZXJuZXQgTWVzc2FnZSBCb2RpZXM8L3RpdGxlPgorPGF1dGhvciBpbml0aWFscz0iIiBzdXJuYW1lPSIiIGZ1bGxuYW1lPSIiPjwvYXV0aG9yPgorPC9mcm9udD4KKzxkYXRlIG1vbnRoPSJOb3ZlbWJlciIgeWVhcj0iMTk5OCIgLz4KKzxzZXJpZXNJbmZvIG5hbWU9IlJGQyIgdmFsdWU9IjIwNDUiIC8+Cis8L3JlZmVyZW5jZT4gCisKKzxyZWZlcmVuY2UgYW5jaG9yPSJyZmMyMzI3Ij4KKzxmcm9udD4KKzx0aXRsZT5TRFA6IFNlc3Npb24gRGVzY3JpcHRpb24gUHJvdG9jb2w8L3RpdGxlPgorPGF1dGhvciBpbml0aWFscz0iVi4iIHN1cm5hbWU9IkphY29ic29uIiBmdWxsbmFtZT0iIj48L2F1dGhvcj4KKzxhdXRob3IgaW5pdGlhbHM9Ik0uIiBzdXJuYW1lPSJIYW5kbGV5IiBmdWxsbmFtZT0iIj48L2F1dGhvcj4KKzwvZnJvbnQ+Cis8ZGF0ZSBtb250aD0iQXByaWwiIHllYXI9IjE5OTgiIC8+Cis8c2VyaWVzSW5mbyBuYW1lPSJSRkMiIHZhbHVlPSIyMzI3IiAvPgorPC9yZWZlcmVuY2U+IAorCis8cmVmZXJlbmNlIGFuY2hvcj0iSDMyMyI+Cis8ZnJvbnQ+Cis8dGl0bGU+UGFja2V0LWJhc2VkIE11bHRpbWVkaWEgQ29tbXVuaWNhdGlvbnMgU3lzdGVtczwvdGl0bGU+Cis8YXV0aG9yIGluaXRpYWxzPSIiIHN1cm5hbWU9IiIgZnVsbG5hbWU9IiI+PC9hdXRob3I+Cis8L2Zyb250PgorPGRhdGUgbW9udGg9IiIgeWVhcj0iMTk5OCIgLz4KKzxzZXJpZXNJbmZvIG5hbWU9IklUVS1UIFJlY29tbWVuZGF0aW9uIiB2YWx1ZT0iSC4zMjMiIC8+Cis8L3JlZmVyZW5jZT4gCisKKzxyZWZlcmVuY2UgYW5jaG9yPSJIMjQ1Ij4KKzxmcm9udD4KKzx0aXRsZT5Db250cm9sIG9mIGNvbW11bmljYXRpb25zIGJldHdlZW4gVmlzdWFsIFRlbGVwaG9uZSBTeXN0ZW1zIGFuZCBUZXJtaW5hbCBFcXVpcG1lbnQ8L3RpdGxlPgorPGF1dGhvciBpbml0aWFscz0iIiBzdXJuYW1lPSIiIGZ1bGxuYW1lPSIiPjwvYXV0aG9yPgorPC9mcm9udD4KKzxkYXRlIG1vbnRoPSIiIHllYXI9IjE5OTgiIC8+Cis8c2VyaWVzSW5mbyBuYW1lPSJJVFUtVCBSZWNvbW1lbmRhdGlvbiIgdmFsdWU9IkguMjQ1IiAvPgorPC9yZWZlcmVuY2U+IAorCis8cmVmZXJlbmNlIGFuY2hvcj0icmZjMzU1MSI+Cis8ZnJvbnQ+Cis8dGl0bGU+UlRQIFByb2ZpbGUgZm9yIEF1ZGlvIGFuZCBWaWRlbyBDb25mZXJlbmNlcyB3aXRoIE1pbmltYWwgQ29udHJvbC48L3RpdGxlPgorPGF1dGhvciBpbml0aWFscz0iSC4iIHN1cm5hbWU9IlNjaHVsenJpbm5lIiBmdWxsbmFtZT0iIj48L2F1dGhvcj4KKzxhdXRob3IgaW5pdGlhbHM9IlMuIiBzdXJuYW1lPSJDYXNuZXIiIGZ1bGxuYW1lPSIiPjwvYXV0aG9yPgorPC9mcm9udD4KKzxkYXRlIG1vbnRoPSJKdWx5IiB5ZWFyPSIyMDAzIiAvPgorPHNlcmllc0luZm8gbmFtZT0iUkZDIiB2YWx1ZT0iMzU1MSIgLz4KKzwvcmVmZXJlbmNlPiAKKworPHJlZmVyZW5jZSBhbmNob3I9InJmYzM1MzQiPgorPGZyb250PgorPHRpdGxlPlRoZSBhcHBsaWNhdGlvbi9vZ2cgTWVkaWEgVHlwZTwvdGl0bGU+Cis8YXV0aG9yIGluaXRpYWxzPSJMLiIgc3VybmFtZT0iV2FsbGVpaiIgZnVsbG5hbWU9IiI+PC9hdXRob3I+Cis8L2Zyb250PgorPGRhdGUgbW9udGg9Ik1heSIgeWVhcj0iMjAwMyIgLz4KKzxzZXJpZXNJbmZvIG5hbWU9IlJGQyIgdmFsdWU9IjM1MzQiIC8+Cis8L3JlZmVyZW5jZT4gCisKKzwvcmVmZXJlbmNlcz4gCisKKzxyZWZlcmVuY2VzIHRpdGxlPSJJbmZvcm1hdGl2ZSBSZWZlcmVuY2VzIj4KKworPHJlZmVyZW5jZSBhbmNob3I9InNwZWV4ZW5jIj4KKzxmcm9udD4KKzx0aXRsZT5TcGVleGVuYy9zcGVleGRlYywgcmVmZXJlbmNlIGNvbW1hbmQtbGluZSBlbmNvZGVyL2RlY29kZXI8L3RpdGxlPgorPC9mcm9udD4KKzxzZXJpZXNJbmZvIG5hbWU9IlNwZWV4IHdlYnNpdGUiIHZhbHVlPSJodHRwOi8vd3d3LnNwZWV4Lm9yZy8iIC8+Cis8L3JlZmVyZW5jZT4gCisKKzxyZWZlcmVuY2UgYW5jaG9yPSJDRUxQIj4KKzxmcm9udD4KKzx0aXRsZT5DRUxQLCBVLlMuIEZlZGVyYWwgU3RhbmRhcmQgMTAxNi48L3RpdGxlPgorPGF1dGhvciBpbml0aWFscz0iIiBzdXJuYW1lPSIiIGZ1bGxuYW1lPSIiPjwvYXV0aG9yPgorPC9mcm9udD4KKzxzZXJpZXNJbmZvIG5hbWU9Ik5hdGlvbmFsIFRlY2huaWNhbCBJbmZvcm1hdGlvbiBTZXJ2aWNlIChOVElTKSB3ZWJzaXRlIiB2YWx1ZT0iaHR0cDovL3d3dy5udGlzLmdvdi8iIC8+Cis8L3JlZmVyZW5jZT4gCisKKzwvcmVmZXJlbmNlcz4gCisKKzwvYmFjaz4KKzwvcmZjPgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvZG9jL2RyYWZ0LWlldGYtYXZ0LXJ0cC1zcGVleC0wMC50eHQgYi8zcmRwYXJ0eS9zcGVleC9kb2MvZHJhZnQtaWV0Zi1hdnQtcnRwLXNwZWV4LTAwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2ZhY2FiCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvZG9jL2RyYWZ0LWlldGYtYXZ0LXJ0cC1zcGVleC0wMC50eHQKQEAgLTAsMCArMSw3ODQgQEAKKworCisKK0FWVCBXb3JraW5nIEdyb3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRy4gSGVybGVpbgorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUy4gTW9ybGF0CitFeHBpcmVzOiBBcHJpbCAxNSwgMjAwNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKLiBKZWFuLU1hcmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSLiBIYXJkaW1hbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQLiBLZXJyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9jdG9iZXIgMTIsIDIwMDUKKworCisgICAgICAgICAgICAgICAgICAgICAgZHJhZnQtaWV0Zi1hdnQtcnRwLXNwZWV4LTAwCisgICAgICAgICAgICAgICAgIFJUUCBQYXlsb2FkIEZvcm1hdCBmb3IgdGhlIFNwZWV4IENvZGVjCisKK1N0YXR1cyBvZiB0aGlzIE1lbW8KKworICAgQnkgc3VibWl0dGluZyB0aGlzIEludGVybmV0LURyYWZ0LCBlYWNoIGF1dGhvciByZXByZXNlbnRzIHRoYXQgYW55CisgICBhcHBsaWNhYmxlIHBhdGVudCBvciBvdGhlciBJUFIgY2xhaW1zIG9mIHdoaWNoIGhlIG9yIHNoZSBpcyBhd2FyZQorICAgaGF2ZSBiZWVuIG9yIHdpbGwgYmUgZGlzY2xvc2VkLCBhbmQgYW55IG9mIHdoaWNoIGhlIG9yIHNoZSBiZWNvbWVzCisgICBhd2FyZSB3aWxsIGJlIGRpc2Nsb3NlZCwgaW4gYWNjb3JkYW5jZSB3aXRoIFNlY3Rpb24gNiBvZiBCQ1AgNzkuCisKKyAgIEludGVybmV0LURyYWZ0cyBhcmUgd29ya2luZyBkb2N1bWVudHMgb2YgdGhlIEludGVybmV0IEVuZ2luZWVyaW5nCisgICBUYXNrIEZvcmNlIChJRVRGKSwgaXRzIGFyZWFzLCBhbmQgaXRzIHdvcmtpbmcgZ3JvdXBzLiAgTm90ZSB0aGF0CisgICBvdGhlciBncm91cHMgbWF5IGFsc28gZGlzdHJpYnV0ZSB3b3JraW5nIGRvY3VtZW50cyBhcyBJbnRlcm5ldC0KKyAgIERyYWZ0cy4KKworICAgSW50ZXJuZXQtRHJhZnRzIGFyZSBkcmFmdCBkb2N1bWVudHMgdmFsaWQgZm9yIGEgbWF4aW11bSBvZiBzaXggbW9udGhzCisgICBhbmQgbWF5IGJlIHVwZGF0ZWQsIHJlcGxhY2VkLCBvciBvYnNvbGV0ZWQgYnkgb3RoZXIgZG9jdW1lbnRzIGF0IGFueQorICAgdGltZS4gIEl0IGlzIGluYXBwcm9wcmlhdGUgdG8gdXNlIEludGVybmV0LURyYWZ0cyBhcyByZWZlcmVuY2UKKyAgIG1hdGVyaWFsIG9yIHRvIGNpdGUgdGhlbSBvdGhlciB0aGFuIGFzICJ3b3JrIGluIHByb2dyZXNzLiIKKworICAgVGhlIGxpc3Qgb2YgY3VycmVudCBJbnRlcm5ldC1EcmFmdHMgY2FuIGJlIGFjY2Vzc2VkIGF0CisgICBodHRwOi8vd3d3LmlldGYub3JnL2lldGYvMWlkLWFic3RyYWN0cy50eHQuCisKKyAgIFRoZSBsaXN0IG9mIEludGVybmV0LURyYWZ0IFNoYWRvdyBEaXJlY3RvcmllcyBjYW4gYmUgYWNjZXNzZWQgYXQKKyAgIGh0dHA6Ly93d3cuaWV0Zi5vcmcvc2hhZG93Lmh0bWwuCisKKyAgIFRoaXMgSW50ZXJuZXQtRHJhZnQgd2lsbCBleHBpcmUgb24gQXByaWwgMTUsIDIwMDYuCisKK0NvcHlyaWdodCBOb3RpY2UKKworICAgQ29weXJpZ2h0IChDKSBUaGUgSW50ZXJuZXQgU29jaWV0eSAoMjAwNSkuCisKK0Fic3RyYWN0CisKKyAgIFNwZWV4IGlzIGFuIG9wZW4tc291cmNlIHZvaWNlIGNvZGVjIHN1aXRhYmxlIGZvciB1c2UgaW4gVm9pY2Ugb3ZlciBJUAorICAgKFZvSVApIHR5cGUgYXBwbGljYXRpb25zLiAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHBheWxvYWQgZm9ybWF0CisgICBmb3IgU3BlZXggZ2VuZXJhdGVkIGJpdCBzdHJlYW1zIHdpdGhpbiBhbiBSVFAgcGFja2V0LiAgQWxzbyBpbmNsdWRlZAorICAgaGVyZSBhcmUgdGhlIG5lY2Vzc2FyeSBkZXRhaWxzIGZvciB0aGUgdXNlIG9mIFNwZWV4IHdpdGggdGhlIFNlc3Npb24KKyAgIERlc2NyaXB0aW9uIFByb3RvY29sIChTRFApLgorCisKKworCitIZXJsZWluLCBldCBhbC4gICAgICAgICAgRXhwaXJlcyBBcHJpbCAxNSwgMjAwNiAgICAgICAgICAgICAgICAgW1BhZ2UgMV0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgZHJhZnQtaWV0Zi1hdnQtcnRwLXNwZWV4LTAwICAgICAgICAgIE9jdG9iZXIgMjAwNQorCisKK0VkaXRvcnMgTm90ZQorCisgICBBbGwgcmVmZXJlbmNlcyB0byBSRkMgWFhYWCBhcmUgdG8gYmUgcmVwbGFjZWQgYnkgcmVmZXJlbmNlcyB0byB0aGUKKyAgIFJGQyBudW1iZXIgb2YgdGhpcyBtZW1vLCB3aGVuIHB1Ymxpc2hlZC4KKworVGFibGUgb2YgQ29udGVudHMKKworICAgMS4gICBDb252ZW50aW9ucyB1c2VkIGluIHRoaXMgZG9jdW1lbnQgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAzCisgICAyLiAgIE92ZXJ2aWV3IG9mIHRoZSBTcGVleCBDb2RlYyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgIDMKKyAgIDMuICAgUlRQIHBheWxvYWQgZm9ybWF0IGZvciBTcGVleCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgMworICAgNC4gICBSVFAgSGVhZGVyIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAzCisgICA1LiAgIFNwZWV4IHBheWxvYWQgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgIDUKKyAgIDYuICAgRXhhbXBsZSBTcGVleCBwYWNrZXQgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgNgorICAgNy4gICBNdWx0aXBsZSBTcGVleCBmcmFtZXMgaW4gYSBSVFAgcGFja2V0ICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICA2CisgICA4LiAgIE1JTUUgcmVnaXN0cmF0aW9uIG9mIFNwZWV4IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgIDcKKyAgIDkuICAgU0RQIHVzYWdlIG9mIFNwZWV4IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgOAorICAgMTAuICBJVFUgSC4zMjMgVXNlIG9mIFNwZWV4IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDEwCisgICAxMS4gIFNlY3VyaXR5IENvbnNpZGVyYXRpb25zICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTAKKyAgIDEyLiAgQWNrbm93bGVkZ21lbnRzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAxMQorICAgMTMuICBSZWZlcmVuY2VzIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDExCisgICAgIDEzLjEgICBOb3JtYXRpdmUgUmVmZXJlbmNlcyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTEKKyAgICAgMTMuMiAgIEluZm9ybWF0aXZlIFJlZmVyZW5jZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAxMgorICAgICAgICBBdXRob3JzJyBBZGRyZXNzZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDEyCisgICAgICAgIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBhbmQgQ29weXJpZ2h0IFN0YXRlbWVudHMgLiAuIC4gLiAuIC4gLiAgMTQKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK0hlcmxlaW4sIGV0IGFsLiAgICAgICAgICBFeHBpcmVzIEFwcmlsIDE1LCAyMDA2ICAgICAgICAgICAgICAgICBbUGFnZSAyXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICBkcmFmdC1pZXRmLWF2dC1ydHAtc3BlZXgtMDAgICAgICAgICAgT2N0b2JlciAyMDA1CisKKworMS4gIENvbnZlbnRpb25zIHVzZWQgaW4gdGhpcyBkb2N1bWVudAorCisgICBUaGUga2V5IHdvcmRzICJNVVNUIiwgIk1VU1QgTk9UIiwgIlJFUVVJUkVEIiwgIlNIQUxMIiwgIlNIQUxMIE5PVCIsCisgICAiU0hPVUxEIiwgIlNIT1VMRCBOT1QiLCAiUkVDT01NRU5ERUQiLCAiTUFZIiwgYW5kICJPUFRJT05BTCIgaW4gdGhpcworICAgZG9jdW1lbnQgYXJlIHRvIGJlIGludGVycHJldGVkIGFzIGRlc2NyaWJlZCBpbiBSRkMgMjExOSBbMV0uCisKKzIuICBPdmVydmlldyBvZiB0aGUgU3BlZXggQ29kZWMKKworICAgU3BlZXggaXMgYmFzZWQgb24gdGhlIENFTFAgWzhdIGVuY29kaW5nIHRlY2huaXF1ZSB3aXRoIHN1cHBvcnQgZm9yCisgICBlaXRoZXIgbmFycm93YmFuZCAobm9taW5hbCA4a0h6KSwgd2lkZWJhbmQgKG5vbWluYWwgMTZrSHopIG9yIHVsdHJhLQorICAgd2lkZWJhbmQgKG5vbWluYWwgMzJrSHopLCBhbmQgKG5vbi1vcHRpbWFsKSByYXRlcyB1cCB0byA0OCBrSHoKKyAgIHNhbXBsaW5nIGFsc28gYXZhaWxhYmxlLiAgVGhlIG1haW4gY2hhcmFjdGVyaXN0aWNzIGNhbiBiZSBzdW1tYXJpemVkCisgICBhcyBmb2xsb3dzOgorCisgICBvICBGcmVlIHNvZnR3YXJlL29wZW4tc291cmNlCisgICBvICBJbnRlZ3JhdGlvbiBvZiB3aWRlYmFuZCBhbmQgbmFycm93YmFuZCBpbiB0aGUgc2FtZSBiaXQtc3RyZWFtCisgICBvICBXaWRlIHJhbmdlIG9mIGJpdC1yYXRlcyBhdmFpbGFibGUKKyAgIG8gIER5bmFtaWMgYml0LXJhdGUgc3dpdGNoaW5nIGFuZCB2YXJpYWJsZSBiaXQtcmF0ZSAoVkJSKQorICAgbyAgVm9pY2UgQWN0aXZpdHkgRGV0ZWN0aW9uIChWQUQsIGludGVncmF0ZWQgd2l0aCBWQlIpCisgICBvICBWYXJpYWJsZSBjb21wbGV4aXR5CisKKzMuICBSVFAgcGF5bG9hZCBmb3JtYXQgZm9yIFNwZWV4CisKKyAgIEZvciBSVFAgYmFzZWQgdHJhbnNwb3J0YXRpb24gb2YgU3BlZXggZW5jb2RlZCBhdWRpbyB0aGUgc3RhbmRhcmQgUlRQCisgICBoZWFkZXIgWzJdIGlzIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIHBheWxvYWQgZGF0YSBibG9ja3MuICBBbgorICAgb3B0aW9uYWwgcGFkZGluZyB0ZXJtaW5hdG9yIG1heSBhbHNvIGJlIHVzZWQuCisKKyAgICAgICAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMworICAgICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgUlRQIEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgKz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSsKKyAgICAgICB8ICAgICAgICAgICAgICAgICBvbmUgb3IgbW9yZSBmcmFtZXMgb2YgU3BlZXggLi4uLiAgICAgICAgICAgICAgfAorICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgfCAgICAgICAgb25lIG9yIG1vcmUgZnJhbWVzIG9mIFNwZWV4IC4uLi4gICAgICAgfCAgICBwYWRkaW5nICAgIHwKKyAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisKKzQuICBSVFAgSGVhZGVyCisKKworCisKKworCisKKworCisKKworCitIZXJsZWluLCBldCBhbC4gICAgICAgICAgRXhwaXJlcyBBcHJpbCAxNSwgMjAwNiAgICAgICAgICAgICAgICAgW1BhZ2UgM10KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgZHJhZnQtaWV0Zi1hdnQtcnRwLXNwZWV4LTAwICAgICAgICAgIE9jdG9iZXIgMjAwNQorCisKKyAgICAgICAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMworICAgICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgIHxWPTJ8UHxYfCAgQ0MgICB8TXwgICAgIFBUICAgICAgfCAgICAgICBzZXF1ZW5jZSBudW1iZXIgICAgICAgICB8CisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgfCAgICAgICAgICAgc3luY2hyb25pemF0aW9uIHNvdXJjZSAoU1NSQykgaWRlbnRpZmllciAgICAgICAgICAgIHwKKyAgICAgICArPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9KworICAgICAgIHwgICAgICAgICAgICBjb250cmlidXRpbmcgc291cmNlIChDU1JDKSBpZGVudGlmaWVycyAgICAgICAgICAgICB8CisgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgICBUaGUgUlRQIGhlYWRlciBiZWdpbnMgd2l0aCBhbiBvY3RldCBvZiBmaWVsZHMgKFYsIFAsIFgsIGFuZCBDQykgdG8KKyAgIHN1cHBvcnQgc3BlY2lhbGl6ZWQgUlRQIHVzZXMgKHNlZSBbMl0gYW5kIFs1XSBmb3IgZGV0YWlscykuICBGb3IKKyAgIFNwZWV4IHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSB1c2VkLgorCisgICBWZXJzaW9uIChWKTogMiBiaXRzCisKKyAgIFRoaXMgZmllbGQgaWRlbnRpZmllcyB0aGUgdmVyc2lvbiBvZiBSVFAuICBUaGUgdmVyc2lvbiB1c2VkIGJ5IHRoaXMKKyAgIHNwZWNpZmljYXRpb24gaXMgdHdvIFsyXS4KKworICAgUGFkZGluZyAoUCk6IDEgYml0CisKKyAgIElmIHRoZSBwYWRkaW5nIGJpdCBpcyBzZXQsIHRoZSBwYWNrZXQgY29udGFpbnMgb25lIG9yIG1vcmUgYWRkaXRpb25hbAorICAgcGFkZGluZyBvY3RldHMgYXQgdGhlIGVuZCB3aGljaCBhcmUgbm90IHBhcnQgb2YgdGhlIHBheWxvYWQuCisKKyAgIEV4dGVuc2lvbiAoWCk6IDEgYml0CisKKyAgIElmIHRoZSBleHRlbnNpb24sIFgsIGJpdCBpcyBzZXQsIHRoZSBmaXhlZCBoZWFkZXIgTVVTVCBiZSBmb2xsb3dlZCBieQorICAgZXhhY3RseSBvbmUgaGVhZGVyIGV4dGVuc2lvbiwgd2l0aCBhIGZvcm1hdCBkZWZpbmVkIGluIFNlY3Rpb24gNS4zLjEuCisgICBvZiBbMl0uCisKKyAgIENTUkMgY291bnQgKENDKTogNCBiaXRzCisKKyAgIFRoZSBDU1JDIGNvdW50IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgQ1NSQyBpZGVudGlmaWVycy4KKworICAgTWFya2VyIChNKTogMSBiaXQKKworICAgVGhlIE0gYml0IGluZGljYXRlcyBpZiB0aGUgcGFja2V0IGNvbnRhaW5zIGNvbWZvcnQgbm9pc2UuICBUaGlzIGZpZWxkCisgICBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGNuZyBTRFAgYXR0cmlidXRlIGFuZCBjb25mb3JtcyB0bworICAgU2VjdGlvbiA0LjEuIG9mIFs1XS4KKworICAgUGF5bG9hZCBUeXBlIChQVCk6IDcgYml0cworCisgICBBbiBSVFAgcHJvZmlsZSBmb3IgYSBjbGFzcyBvZiBhcHBsaWNhdGlvbnMgaXMgZXhwZWN0ZWQgdG8gYXNzaWduIGEKKyAgIHBheWxvYWQgdHlwZSBmb3IgdGhpcyBmb3JtYXQsIG9yIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHBheWxvYWQgdHlwZQorICAgU0hPVUxEIGJlIGNob3NlbiB3aGljaCBkZXNpZ25hdGVzIHRoZSBwYXlsb2FkIGFzIFNwZWV4LgorCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgIEV4cGlyZXMgQXByaWwgMTUsIDIwMDYgICAgICAgICAgICAgICAgIFtQYWdlIDRdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgIGRyYWZ0LWlldGYtYXZ0LXJ0cC1zcGVleC0wMCAgICAgICAgICBPY3RvYmVyIDIwMDUKKworCisgICBTZXF1ZW5jZSBudW1iZXI6IDE2IGJpdHMKKworICAgVGhlIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzIGJ5IG9uZSBmb3IgZWFjaCBSVFAgZGF0YSBwYWNrZXQgc2VudCwKKyAgIGFuZCBtYXkgYmUgdXNlZCBieSB0aGUgcmVjZWl2ZXIgdG8gZGV0ZWN0IHBhY2tldCBsb3NzIGFuZCB0byByZXN0b3JlCisgICBwYWNrZXQgc2VxdWVuY2UuICBUaGlzIGZpZWxkIGlzIGRldGFpbGVkIGZ1cnRoZXIgaW4gWzJdLgorCisgICBUaW1lc3RhbXA6IDMyIGJpdHMKKworICAgQSB0aW1lc3RhbXAgcmVwcmVzZW50aW5nIHRoZSBzYW1wbGluZyB0aW1lIG9mIHRoZSBmaXJzdCBzYW1wbGUgb2YgdGhlCisgICBmaXJzdCBTcGVleCBwYWNrZXQgaW4gdGhlIFJUUCBwYWNrZXQuICBUaGUgY2xvY2sgZnJlcXVlbmN5IE1VU1QgYmUKKyAgIHNldCB0byB0aGUgc2FtcGxlIHJhdGUgb2YgdGhlIGVuY29kZWQgYXVkaW8gZGF0YS4gIFNwZWV4IHVzZXMgMjAgbXNlYworICAgZnJhbWVzIGFuZCBhIHZhcmlhYmxlIHNhbXBsaW5nIHJhdGUgY2xvY2suICBUaGUgUlRQIHRpbWVzdGFtcCBNVVNUIGJlCisgICBpbiB1bml0cyBvZiAxL1ggb2YgYSBzZWNvbmQgd2hlcmUgWCBpcyB0aGUgc2FtcGxlIHJhdGUgdXNlZC4gIFNwZWV4CisgICB1c2VzIGEgbm9taW5hbCA4a0h6IHNhbXBsaW5nIHJhdGUgZm9yIG5hcnJvd2JhbmQgdXNlLCBhIG5vbWluYWwgMTZrSHoKKyAgIHNhbXBsaW5nIHJhdGUgZm9yIHdpZGViYW5kIHVzZSwgYW5kIGEgbm9taW5hbCAzMmtIeiBzYW1wbGluZyByYXRlIGZvcgorICAgdWx0cmEtd2lkZWJhbmQgdXNlLgorCisgICBTU1JDL0NTUkMgaWRlbnRpZmllcnM6CisKKyAgIFRoZXNlIHR3byBmaWVsZHMsIDMyIGJpdHMgZWFjaCB3aXRoIG9uZSBTU1JDIGZpZWxkIGFuZCBhIG1heGltdW0gb2YKKyAgIDE2IENTUkMgZmllbGRzLCBhcmUgYXMgZGVmaW5lZCBpbiBbMl0uCisKKzUuICBTcGVleCBwYXlsb2FkCisKKyAgIEZvciB0aGUgcHVycG9zZXMgb2YgcGFja2V0aXppbmcgdGhlIGJpdCBzdHJlYW0gaW4gUlRQLCBpdCBpcyBvbmx5CisgICBuZWNlc3NhcnkgdG8gY29uc2lkZXIgdGhlIHNlcXVlbmNlIG9mIGJpdHMgYXMgb3V0cHV0IGJ5IHRoZSBTcGVleAorICAgZW5jb2RlciBbN10sIGFuZCBwcmVzZW50IHRoZSBzYW1lIHNlcXVlbmNlIHRvIHRoZSBkZWNvZGVyLiAgVGhlCisgICBwYXlsb2FkIGZvcm1hdCBkZXNjcmliZWQgaGVyZSBtYWludGFpbnMgdGhpcyBzZXF1ZW5jZS4KKworICAgQSB0eXBpY2FsIFNwZWV4IGZyYW1lLCBlbmNvZGVkIGF0IHRoZSBtYXhpbXVtIGJpdHJhdGUsIGlzIGFwcHJveC4gMTEwCisgICBvY3RldHMgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgU3BlZXggZnJhbWVzIFNIT1VMRCBiZSBrZXB0IGxlc3MgdGhhbgorICAgdGhlIHBhdGggTVRVIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gIFNwZWV4IGZyYW1lcyBNVVNUIE5PVCBiZQorICAgZnJhZ21lbnRlZCBhY3Jvc3MgbXVsdGlwbGUgUlRQIHBhY2tldHMsCisKKyAgIEFuIFJUUCBwYWNrZXQgTUFZIGNvbnRhaW4gU3BlZXggZnJhbWVzIG9mIHRoZSBzYW1lIGJpdCByYXRlIG9yIG9mCisgICB2YXJ5aW5nIGJpdCByYXRlcywgc2luY2UgdGhlIGJpdC1yYXRlIGZvciBhIGZyYW1lIGlzIGNvbnZleWVkIGluIGJhbmQKKyAgIHdpdGggdGhlIHNpZ25hbC4KKworICAgVGhlIGVuY29kaW5nIGFuZCBkZWNvZGluZyBhbGdvcml0aG0gY2FuIGNoYW5nZSB0aGUgYml0IHJhdGUgYXQgYW55IDIwCisgICBtc2VjIGZyYW1lIGJvdW5kYXJ5LCB3aXRoIHRoZSBiaXQgcmF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uIHByb3ZpZGVkCisgICBpbi1iYW5kIHdpdGggdGhlIGJpdCBzdHJlYW0uICBFYWNoIGZyYW1lIGNvbnRhaW5zIGJvdGggIm1vZGUiCisgICAobmFycm93YmFuZCwgd2lkZWJhbmQgb3IgdWx0cmEtd2lkZWJhbmQpIGFuZCAic3ViLW1vZGUiIChiaXQtcmF0ZSkKKyAgIGluZm9ybWF0aW9uIGluIHRoZSBiaXQgc3RyZWFtLiAgTm8gb3V0LW9mLWJhbmQgbm90aWZpY2F0aW9uIGlzCisgICByZXF1aXJlZCBmb3IgdGhlIGRlY29kZXIgdG8gcHJvY2VzcyBjaGFuZ2VzIGluIHRoZSBiaXQgcmF0ZSBzZW50IGJ5CisgICB0aGUgZW5jb2Rlci4KKworICAgSXQgaXMgUkVDT01NRU5ERUQgdGhhdCB2YWx1ZXMgb2YgODAwMCwgMTYwMDAgYW5kIDMyMDAwIGJlIHVzZWQgZm9yCisgICBub3JtYWwgaW50ZXJuZXQgdGVsZXBob255IGFwcGxpY2F0aW9ucywgdGhvdWdoIHRoZSBzYW1wbGUgcmF0ZSBpcworCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgIEV4cGlyZXMgQXByaWwgMTUsIDIwMDYgICAgICAgICAgICAgICAgIFtQYWdlIDVdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgIGRyYWZ0LWlldGYtYXZ0LXJ0cC1zcGVleC0wMCAgICAgICAgICBPY3RvYmVyIDIwMDUKKworCisgICBzdXBwb3J0ZWQgYXQgcmF0ZXMgYXMgbG93IGFzIDYwMDAgSHogYW5kIGFzIGhpZ2ggYXMgNDgga0h6LgorCisgICBUaGUgUlRQIHBheWxvYWQgTVVTVCBiZSBwYWRkZWQgdG8gcHJvdmlkZSBhbiBpbnRlZ2VyIG51bWJlciBvZiBvY3RldHMKKyAgIGFzIHRoZSBwYXlsb2FkIGxlbmd0aC4gIFRoZXNlIHBhZGRpbmcgYml0cyBhcmUgTFNCIGFsaWduZWQgaW4gbmV0d29yaworICAgb2N0ZXQgb3JkZXIgYW5kIGNvbnNpc3Qgb2YgYSAwIGZvbGxvd2VkIGJ5IGFsbCBvbmVzICh1bnRpbCB0aGUgZW5kIG9mCisgICB0aGUgb2N0ZXQpLiAgVGhpcyBwYWRkaW5nIGlzIG9ubHkgcmVxdWlyZWQgZm9yIHRoZSBsYXN0IGZyYW1lIGluIHRoZQorICAgcGFja2V0LCBhbmQgb25seSB0byBlbnN1cmUgdGhlIHBhY2tldCBjb250ZW50cyBlbmRzIG9uIGFuIG9jdGV0CisgICBib3VuZGFyeS4KKworNi4gIEV4YW1wbGUgU3BlZXggcGFja2V0CisKKyAgIEluIHRoZSBleGFtcGxlIGJlbG93IHdlIGhhdmUgYSBzaW5nbGUgU3BlZXggZnJhbWUgd2l0aCA1IGJpdHMgb2YKKyAgIHBhZGRpbmcgdG8gZW5zdXJlIHRoZSBwYWNrZXQgc2l6ZSBmYWxscyBvbiBhbiBvY3RldCBib3VuZGFyeS4KKworICAgICAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyAgICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICB8Vj0yfFB8WHwgIENDICAgfE18ICAgICBQVCAgICAgIHwgICAgICAgc2VxdWVuY2UgbnVtYmVyICAgICAgICAgfAorICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgfCAgICAgICAgIHN5bmNocm9uaXphdGlvbiBzb3VyY2UgKFNTUkMpIGlkZW50aWZpZXIgICAgICAgICAgICAgIHwKKyAgICAgICs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rCisKKyAgICAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisgICAgICAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCisgICAgICArPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9KworICAgICAgfCAgICAgICAgIGNvbnRyaWJ1dGluZyBzb3VyY2UgKENTUkMpIGlkZW50aWZpZXJzICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAuLnNwZWV4IGRhdGEuLiAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIC4uc3BlZXggZGF0YS4uICAgICAgICAgICAgICAgfDAgMSAxIDEgMXwKKyAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKworNy4gIE11bHRpcGxlIFNwZWV4IGZyYW1lcyBpbiBhIFJUUCBwYWNrZXQKKworICAgQmVsb3cgaXMgYW4gZXhhbXBsZSBvZiB0d28gU3BlZXggZnJhbWVzIGNvbnRhaW5lZCB3aXRoaW4gb25lIFJUUAorICAgcGFja2V0LiAgVGhlIFNwZWV4IGZyYW1lIGxlbmd0aCBpbiB0aGlzIGV4YW1wbGUgZmFsbCBvbiBhbiBvY3RldAorICAgYm91bmRhcnkgc28gdGhlcmUgaXMgbm8gcGFkZGluZy4KKworICAgU3BlZXggY29kZWNzIFs3XSBhcmUgYWJsZSB0byBkZXRlY3QgdGhlIGJpdHJhdGUgZnJvbSB0aGUgcGF5bG9hZCBhbmQKKyAgIGFyZSByZXNwb25zaWJsZSBmb3IgZGV0ZWN0aW5nIHRoZSAyMCBtc2VjIGJvdW5kYXJpZXMgYmV0d2VlbiBlYWNoCisgICBmcmFtZS4KKworCisKKworCitIZXJsZWluLCBldCBhbC4gICAgICAgICAgRXhwaXJlcyBBcHJpbCAxNSwgMjAwNiAgICAgICAgICAgICAgICAgW1BhZ2UgNl0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgZHJhZnQtaWV0Zi1hdnQtcnRwLXNwZWV4LTAwICAgICAgICAgIE9jdG9iZXIgMjAwNQorCisKKyAgICAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisgICAgICAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCisgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgfFY9MnxQfFh8ICBDQyAgIHxNfCAgICAgUFQgICAgICB8ICAgICAgIHNlcXVlbmNlIG51bWJlciAgICAgICAgIHwKKyAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgIHwgICAgICAgICBzeW5jaHJvbml6YXRpb24gc291cmNlIChTU1JDKSBpZGVudGlmaWVyICAgICAgICAgICAgICB8CisgICAgICArPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9KworICAgICAgfCAgICAgICAgIGNvbnRyaWJ1dGluZyBzb3VyY2UgKENTUkMpIGlkZW50aWZpZXJzICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAuLnNwZWV4IGRhdGEuLiAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgfCAgICAgICAgLi5zcGVleCBkYXRhLi4gICAgICAgICB8ICAgICAgICAuLnNwZWV4IGRhdGEuLiAgICAgICAgIHwKKyAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgLi5zcGVleCBkYXRhLi4gICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworCis4LiAgTUlNRSByZWdpc3RyYXRpb24gb2YgU3BlZXgKKworICAgRnVsbCBkZWZpbml0aW9uIG9mIHRoZSBNSU1FIFszXSB0eXBlIGZvciBTcGVleCB3aWxsIGJlIHBhcnQgb2YgdGhlCisgICBPZ2cgVm9yYmlzIE1JTUUgdHlwZSBkZWZpbml0aW9uIGFwcGxpY2F0aW9uIFs2XS4KKworICAgTUlNRSBtZWRpYSB0eXBlIG5hbWU6IGF1ZGlvCisKKyAgIE1JTUUgc3VidHlwZTogc3BlZXgKKworICAgT3B0aW9uYWwgcGFyYW1ldGVyczoKKworICAgUmVxdWlyZWQgcGFyYW1ldGVyczogdG8gYmUgaW5jbHVkZWQgaW4gdGhlIE9nZyBNSU1FIHNwZWNpZmljYXRpb24uCisKKyAgIEVuY29kaW5nIGNvbnNpZGVyYXRpb25zOgorCisgICBUaGlzIHR5cGUgaXMgb25seSBkZWZpbmVkIGZvciB0cmFuc2ZlciB2aWEgSFRUUCBhcyBzcGVjaWZpZWQgaW4gUkZDCisgICBYWFhYLgorCisgICBTZWN1cml0eSBDb25zaWRlcmF0aW9uczoKKworICAgU2VlIFNlY3Rpb24gNiBvZiBSRkMgMzA0Ny4KKworICAgSW50ZXJvcGVyYWJpbGl0eSBjb25zaWRlcmF0aW9uczogbm9uZQorCisgICBQdWJsaXNoZWQgc3BlY2lmaWNhdGlvbjoKKworICAgQXBwbGljYXRpb25zIHdoaWNoIHVzZSB0aGlzIG1lZGlhIHR5cGU6CisKKworCitIZXJsZWluLCBldCBhbC4gICAgICAgICAgRXhwaXJlcyBBcHJpbCAxNSwgMjAwNiAgICAgICAgICAgICAgICAgW1BhZ2UgN10KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgZHJhZnQtaWV0Zi1hdnQtcnRwLXNwZWV4LTAwICAgICAgICAgIE9jdG9iZXIgMjAwNQorCisKKyAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb246IG5vbmUKKworICAgUGVyc29uICYgZW1haWwgYWRkcmVzcyB0byBjb250YWN0IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uOgorCisgICAgICBHcmVnIEhlcmxlaW4gPGdoZXJsZWluQGhlcmxlaW4uY29tPgorICAgICAgSmVhbi1NYXJjIFZhbGluIDxqZWFuLW1hcmMudmFsaW5AdXNoZXJicm9va2UuY2E+CisKKyAgIEludGVuZGVkIHVzYWdlOiBDT01NT04KKworICAgQXV0aG9yL0NoYW5nZSBjb250cm9sbGVyOgorCisgICAgICBBdXRob3I6ICBHcmVnIEhlcmxlaW4gPGdoZXJsZWluQGhlcmxlaW4uY29tPgorICAgICAgQ2hhbmdlIGNvbnRyb2xsZXI6IEdyZWcgSGVybGVpbiA8Z2hlcmxlaW5AaGVybGVpbi5jb20+CisgICAgICBDaGFuZ2UgY29udHJvbGxlcjogSUVURiBBVlQgV29ya2luZyBHcm91cAorCisgICBUaGlzIHRyYW5zcG9ydCB0eXBlIHNpZ25pZmllcyB0aGF0IHRoZSBjb250ZW50IGlzIHRvIGJlIGludGVycHJldGVkCisgICBhY2NvcmRpbmcgdG8gdGhpcyBkb2N1bWVudCBpZiB0aGUgY29udGVudHMgYXJlIHRyYW5zbWl0dGVkIG92ZXIgUlRQLgorICAgU2hvdWxkIHRoaXMgdHJhbnNwb3J0IHR5cGUgYXBwZWFyIG92ZXIgYSBsb3NzbGVzcyBzdHJlYW1pbmcgcHJvdG9jb2wKKyAgIHN1Y2ggYXMgVENQLCB0aGUgY29udGVudCBlbmNhcHN1bGF0aW9uIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhbgorICAgT2dnIFN0cmVhbSBpbiBhY2NvcmRhbmNlIHdpdGggWzZdLCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUKKyAgIGNvbnRlbnQgb2YgdGhlIE9nZyBTdHJlYW0gbWF5IGJlIGFzc3VtZWQgdG8gYmUgU3BlZXggYXVkaW8gYW5kIFNwZWV4CisgICBhdWRpbyBvbmx5LgorCis5LiAgU0RQIHVzYWdlIG9mIFNwZWV4CisKKyAgIFdoZW4gY29udmV5aW5nIGluZm9ybWF0aW9uIGJ5IFNEUCBbNF0sIHRoZSBlbmNvZGluZyBuYW1lIE1VU1QgYmUgc2V0CisgICB0byAic3BlZXgiLiAgQW4gZXhhbXBsZSBvZiB0aGUgbWVkaWEgcmVwcmVzZW50YXRpb24gaW4gU0RQIGZvcgorICAgb2ZmZXJpbmcgYSBzaW5nbGUgY2hhbm5lbCBvZiBTcGVleCBhdCA4MDAwIHNhbXBsZXMgcGVyIHNlY29uZCBtaWdodAorICAgYmU6CisKKyAgICAgIG09YXVkaW8gODA4OCBSVFAvQVZQIDk3CisgICAgICBhPXJ0cG1hcDo5NyBzcGVleC84MDAwCisKKyAgIE5vdGUgdGhhdCB0aGUgUlRQIHBheWxvYWQgdHlwZSBjb2RlIG9mIDk3IGlzIGRlZmluZWQgaW4gdGhpcyBtZWRpYQorICAgZGVmaW5pdGlvbiB0byBiZSAnbWFwcGVkJyB0byB0aGUgc3BlZXggY29kZWMgYXQgYW4gOGtIeiBzYW1wbGluZworICAgZnJlcXVlbmN5IHVzaW5nIHRoZSAnYT1ydHBtYXAnIGxpbmUuICBBbnkgbnVtYmVyIGZyb20gOTYgdG8gMTI3IGNvdWxkCisgICBoYXZlIGJlZW4gY2hvc2VuICh0aGUgYWxsb3dlZCByYW5nZSBmb3IgZHluYW1pYyB0eXBlcykuCisKKyAgIFRoZSB2YWx1ZSBvZiB0aGUgc2FtcGxpbmcgZnJlcXVlbmN5IGlzIHR5cGljYWxseSA4MDAwIGZvciBuYXJyb3cgYmFuZAorICAgb3BlcmF0aW9uLCAxNjAwMCBmb3Igd2lkZSBiYW5kIG9wZXJhdGlvbiwgYW5kIDMyMDAwIGZvciB1bHRyYS13aWRlCisgICBiYW5kIG9wZXJhdGlvbi4KKworICAgSWYgZm9yIHNvbWUgcmVhc29uIHRoZSBvZmZlcmVyIGhhcyBiYW5kd2lkdGggbGltaXRhdGlvbnMsIHRoZSBjbGllbnQKKyAgIG1heSB1c2UgdGhlICJiPSIgaGVhZGVyLCBhcyBleHBsYWluZWQgaW4gU0RQIFs0XS4gIFRoZSBmb2xsb3dpbmcKKyAgIGV4YW1wbGUgaWxsdXN0cmF0ZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIG9mZmVyZXIgY2Fubm90IHJlY2VpdmUgbW9yZQorICAgdGhhbiAxMCBrYml0L3MuCisKKworCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgIEV4cGlyZXMgQXByaWwgMTUsIDIwMDYgICAgICAgICAgICAgICAgIFtQYWdlIDhdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgIGRyYWZ0LWlldGYtYXZ0LXJ0cC1zcGVleC0wMCAgICAgICAgICBPY3RvYmVyIDIwMDUKKworCisgICAgICBtPWF1ZGlvIDgwODggUlRQL0FWUCA5NworICAgICAgYj1BUzoxMAorICAgICAgYT1ydG1hcDo5NyBzcGVleC84MDAwCisKKyAgIEluIHRoaXMgY2FzZSwgaWYgdGhlIHJlbW90ZSBwYXJ0IGFncmVlcywgaXQgc2hvdWxkIGNvbmZpZ3VyZSBpdHMKKyAgIFNwZWV4IGVuY29kZXIgc28gdGhhdCBpdCBkb2VzIG5vdCB1c2UgbW9kZXMgdGhhdCBwcm9kdWNlIG1vcmUgdGhhbiAxMAorICAga2JpdC9zLiAgTm90ZSB0aGF0IHRoZSAiYj0iIGNvbnN0cmFpbnQgYWxzbyBhcHBsaWVzIG9uIGFsbCBwYXlsb2FkCisgICB0eXBlcyB0aGF0IG1heSBiZSBwcm9wb3NlZCBpbiB0aGUgbWVkaWEgbGluZSAoIm09IikuCisKKyAgIEFuIG90aGVyIHdheSB0byBtYWtlIHJlY29tbWVuZGF0aW9ucyB0byB0aGUgcmVtb3RlIFNwZWV4IGVuY29kZXIgaXMKKyAgIHRvIHVzZSBpdHMgc3BlY2lmaWMgcGFyYW1ldGVycyB2aWEgdGhlIGE9Zm10cDogZGlyZWN0aXZlLiAgVGhlCisgICBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgZGVmaW5lZCBmb3IgdXNlIGluIHRoaXMgd2F5OgorCisgICAgICBwdGltZTogZHVyYXRpb24gb2YgZWFjaCBwYWNrZXQgaW4gbWlsbGlzZWNvbmRzLgorCisgICAgICBzcjogICAgYWN0dWFsIHNhbXBsZSByYXRlIGluIEh6LgorCisgICAgICBlYnc6ICAgZW5jb2RpbmcgYmFuZHdpZHRoIC0gZWl0aGVyICduYXJyb3cnIG9yICd3aWRlJyBvciAndWx0cmEnCisgICAgICAoY29ycmVzcG9uZHMgdG8gbm9taW5hbCA4MDAwLCAxNjAwMCwgYW5kIDMyMDAwIEh6IHNhbXBsaW5nIHJhdGVzKS4KKworICAgICAgdmJyOiAgIHZhcmlhYmxlIGJpdCByYXRlICAtIGVpdGhlciAnb24nICdvZmYnIG9yICd2YWQnIChkZWZhdWx0cworICAgICAgdG8gb2ZmKS4gIElmIG9uLCB2YXJpYWJsZSBiaXQgcmF0ZSBpcyBlbmFibGVkLiAgSWYgb2ZmLCBkaXNhYmxlZC4KKyAgICAgIElmIHNldCB0byAndmFkJyB0aGVuIGNvbnN0YW50IGJpdCByYXRlIGlzIHVzZWQgYnV0IHNpbGVuY2Ugd2lsbCBiZQorICAgICAgZW5jb2RlZCB3aXRoIHNwZWNpYWwgc2hvcnQgZnJhbWVzIHRvIGluZGljYXRlIGEgbGFjayBvZiB2b2ljZSBmb3IKKyAgICAgIHRoYXQgcGVyaW9kLgorCisgICAgICBjbmc6ICAgY29tZm9ydCBub2lzZSBnZW5lcmF0aW9uIC0gZWl0aGVyICdvbicgb3IgJ29mZicuICBJZiBvZmYKKyAgICAgIHRoZW4gc2lsZW5jZSBmcmFtZXMgd2lsbCBiZSBzaWxlbnQ7IGlmICdvbicgdGhlbiB0aG9zZSBmcmFtZXMgd2lsbAorICAgICAgYmUgZmlsbGVkIHdpdGggY29tZm9ydCBub2lzZS4KKworICAgICAgbW9kZTogIFNwZWV4IGVuY29kaW5nIG1vZGUuICBDYW4gYmUgezEsMiwzLDQsNSw2LGFueX0gZGVmYXVsdHMgdG8KKyAgICAgIDMgaW4gbmFycm93YmFuZCwgNiBpbiB3aWRlIGFuZCB1bHRyYS13aWRlLgorCisKKyAgIEV4YW1wbGVzOgorCisgICAgICBtPWF1ZGlvIDgwMDggUlRQL0FWUCA5NworICAgICAgYT1ydHBtYXA6OTcgc3BlZXgvODAwMAorICAgICAgYT1mbXRwOjk3IG1vZGU9NAorCisgICBUaGlzIGV4YW1wbGVzIGlsbHVzdHJhdGUgYW4gb2ZmZXJlciB0aGF0IHdpc2hlcyB0byByZWNlaXZlIGEgU3BlZXgKKyAgIHN0cmVhbSBhdCA4MDAwSHosIGJ1dCBvbmx5IHVzaW5nIHNwZWV4IG1vZGUgNC4KKworICAgU2V2ZXJhbCBTcGVleCBzcGVjaWZpYyBwYXJhbWV0ZXJzIGNhbiBiZSBnaXZlbiBpbiBhIHNpbmdsZSBhPWZtdHAKKyAgIGxpbmUgcHJvdmlkZWQgdGhhdCB0aGV5IGFyZSBzZXBhcmF0ZWQgYnkgYSBzZW1pLWNvbG9uOgorCisKKworCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgIEV4cGlyZXMgQXByaWwgMTUsIDIwMDYgICAgICAgICAgICAgICAgIFtQYWdlIDldCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgIGRyYWZ0LWlldGYtYXZ0LXJ0cC1zcGVleC0wMCAgICAgICAgICBPY3RvYmVyIDIwMDUKKworCisgICAgICBhPWZtdHA6OTcgbW9kZT1hbnk7bW9kZT0xCisKKyAgIFRoZSBvZmZlcmVyIG1heSBpbmRpY2F0ZSB0aGF0IGl0IHdpc2hlcyB0byBzZW5kIHZhcmlhYmxlIGJpdCByYXRlCisgICBmcmFtZXMgd2l0aCBjb21mb3J0IG5vaXNlOgorCisgICAgICBtPWF1ZGlvIDgwODggUlRQL0FWUCA5NworICAgICAgYT1ydG1hcDo5NyBzcGVleC84MDAwCisgICAgICBhPWZtdHA6OTcgdmJyPW9uO2NuZz1vbgorCisgICBUaGUgInB0aW1lIiBhdHRyaWJ1dGUgaXMgdXNlZCB0byBkZW5vdGUgdGhlIHBhY2tldGl6YXRpb24gaW50ZXJ2YWwKKyAgIChpZSwgaG93IG1hbnkgbWlsbGlzZWNvbmRzIG9mIGF1ZGlvIGlzIGVuY29kZWQgaW4gYSBzaW5nbGUgUlRQCisgICBwYWNrZXQpLiAgU2luY2UgU3BlZXggdXNlcyAyMCBtc2VjIGZyYW1lcywgcHRpbWUgdmFsdWVzIG9mIG11bHRpcGxlcworICAgb2YgMjAgZGVub3RlIG11bHRpcGxlIFNwZWV4IGZyYW1lcyBwZXIgcGFja2V0LiAgVmFsdWVzIG9mIHB0aW1lIHdoaWNoCisgICBhcmUgbm90IG11bHRpcGxlcyBvZiAyMCBNVVNUIGJlIGlnbm9yZWQgYW5kIGNsaWVudHMgTVVTVCB1c2UgdGhlCisgICBkZWZhdWx0IHZhbHVlIG9mIDIwIGluc3RlYWQuCisKKyAgIEluIHRoZSBleGFtcGxlIGJlbG93IHRoZSBwdGltZSB2YWx1ZSBpcyBzZXQgdG8gNDAsIGluZGljYXRpbmcgdGhhdAorICAgdGhlcmUgYXJlIDIgZnJhbWVzIGluIGVhY2ggcGFja2V0LgorCisgICAgICBtPWF1ZGlvIDgwMDggUlRQL0FWUCA5NworICAgICAgYT1ydHBtYXA6OTcgc3BlZXgvODAwMAorICAgICAgYT1wdGltZTo0MAorCisgICBOb3RlIHRoYXQgdGhlIHB0aW1lIHBhcmFtZXRlciBhcHBsaWVzIHRvIGFsbCBwYXlsb2FkcyBsaXN0ZWQgaW4gdGhlCisgICBtZWRpYSBsaW5lIGFuZCBpcyBub3QgdXNlZCBhcyBwYXJ0IG9mIGFuIGE9Zm10cCBkaXJlY3RpdmUuCisKKyAgIFZhbHVlcyBvZiBwdGltZSBub3QgbXVsdGlwbGUgb2YgMjAgbXNlYyBhcmUgbWVhbmluZ2xlc3MsIHNvIHRoZQorICAgcmVjZWl2ZXIgb2Ygc3VjaCBwdGltZSB2YWx1ZXMgTVVTVCBpZ25vcmUgdGhlbS4gIElmIGR1cmluZyB0aGUgbGlmZQorICAgb2YgYW4gUlRQIHNlc3Npb24gdGhlIHB0aW1lIHZhbHVlIGNoYW5nZXMsIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlCisgICBTcGVleCBmcmFtZXMgZm9yIGV4YW1wbGUsIHRoZSBTRFAgdmFsdWUgbXVzdCBhbHNvIHJlZmxlY3QgdGhlIG5ldworICAgdmFsdWUuCisKKyAgIENhcmUgbXVzdCBiZSB0YWtlbiB3aGVuIHNldHRpbmcgdGhlIHZhbHVlIG9mIHB0aW1lIHNvIHRoYXQgdGhlIFJUUAorICAgcGFja2V0IHNpemUgZG9lcyBub3QgZXhjZWVkIHRoZSBwYXRoIE1UVS4KKworMTAuICBJVFUgSC4zMjMgVXNlIG9mIFNwZWV4CisKKyAgIEl0IGlzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgZG9jdW1lbnQgdG8gY292ZXIgdGhlIHVzZSBvZiBTcGVleAorICAgYW5kIEguMzIzLCBtb3JlIGRldGFpbHMgbWF5IGJlIGZvdW5kIG9uIHRoZSBTcGVleCB3ZWJzaXRlIFs5XS4KKworMTEuICBTZWN1cml0eSBDb25zaWRlcmF0aW9ucworCisgICBSVFAgcGFja2V0cyB1c2luZyB0aGUgcGF5bG9hZCBmb3JtYXQgZGVmaW5lZCBpbiB0aGlzIHNwZWNpZmljYXRpb24KKyAgIGFyZSBzdWJqZWN0IHRvIHRoZSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBkaXNjdXNzZWQgaW4gdGhlIFJUUAorICAgc3BlY2lmaWNhdGlvbiBbMl0sIGFuZCBhbnkgYXBwcm9wcmlhdGUgUlRQIHByb2ZpbGUuICBUaGlzIGltcGxpZXMKKyAgIHRoYXQgY29uZmlkZW50aWFsaXR5IG9mIHRoZSBtZWRpYSBzdHJlYW1zIGlzIGFjaGlldmVkIGJ5IGVuY3J5cHRpb24uCisgICBCZWNhdXNlIHRoZSBkYXRhIGNvbXByZXNzaW9uIHVzZWQgd2l0aCB0aGlzIHBheWxvYWQgZm9ybWF0IGlzIGFwcGxpZWQKKyAgIGVuZC10by1lbmQsIGVuY3J5cHRpb24gbWF5IGJlIHBlcmZvcm1lZCBhZnRlciBjb21wcmVzc2lvbiBzbyB0aGVyZSBpcworCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgIEV4cGlyZXMgQXByaWwgMTUsIDIwMDYgICAgICAgICAgICAgICAgW1BhZ2UgMTBdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgIGRyYWZ0LWlldGYtYXZ0LXJ0cC1zcGVleC0wMCAgICAgICAgICBPY3RvYmVyIDIwMDUKKworCisgICBubyBjb25mbGljdCBiZXR3ZWVuIHRoZSB0d28gb3BlcmF0aW9ucy4KKworICAgQSBwb3RlbnRpYWwgZGVuaWFsLW9mLXNlcnZpY2UgdGhyZWF0IGV4aXN0cyBmb3IgZGF0YSBlbmNvZGluZ3MgdXNpbmcKKyAgIGNvbXByZXNzaW9uIHRlY2huaXF1ZXMgdGhhdCBoYXZlIG5vbi11bmlmb3JtIHJlY2VpdmVyLWVuZAorICAgY29tcHV0YXRpb25hbCBsb2FkLiAgVGhlIGF0dGFja2VyIGNhbiBpbmplY3QgcGF0aG9sb2dpY2FsIGRhdGFncmFtcworICAgaW50byB0aGUgc3RyZWFtIHdoaWNoIGFyZSBjb21wbGV4IHRvIGRlY29kZSBhbmQgY2F1c2UgdGhlIHJlY2VpdmVyIHRvCisgICBiZSBvdmVybG9hZGVkLiAgSG93ZXZlciwgdGhpcyBlbmNvZGluZyBkb2VzIG5vdCBleGhpYml0IGFueQorICAgc2lnbmlmaWNhbnQgbm9uLXVuaWZvcm1pdHkuCisKKyAgIEFzIHdpdGggYW55IElQLWJhc2VkIHByb3RvY29sLCBpbiBzb21lIGNpcmN1bXN0YW5jZXMgYSByZWNlaXZlciBtYXkKKyAgIGJlIG92ZXJsb2FkZWQgc2ltcGx5IGJ5IHRoZSByZWNlaXB0IG9mIHRvbyBtYW55IHBhY2tldHMsIGVpdGhlcgorICAgZGVzaXJlZCBvciB1bmRlc2lyZWQuICBOZXR3b3JrLWxheWVyIGF1dGhlbnRpY2F0aW9uIG1heSBiZSB1c2VkIHRvCisgICBkaXNjYXJkIHBhY2tldHMgZnJvbSB1bmRlc2lyZWQgc291cmNlcywgYnV0IHRoZSBwcm9jZXNzaW5nIGNvc3Qgb2YKKyAgIHRoZSBhdXRoZW50aWNhdGlvbiBpdHNlbGYgbWF5IGJlIHRvbyBoaWdoLgorCisxMi4gIEFja25vd2xlZGdtZW50cworCisgICBUaGUgYXV0aG9ycyB3b3VsZCBsaWtlIHRvIHRoYW5rIEVxdWl2YWxlbmNlIFB0eSBMdGQgb2YgQXVzdHJhbGlhIGZvcgorICAgdGhlaXIgYXNzaXN0YW5jZSBpbiBhdHRlbXB0aW5nIHRvIHN0YW5kYXJkaXplIHRoZSB1c2Ugb2YgU3BlZXggaW4KKyAgIEguMzIzIGFwcGxpY2F0aW9ucywgYW5kIGZvciBpbXBsZW1lbnRpbmcgU3BlZXggaW4gdGhlaXIgb3BlbiBzb3VyY2UKKyAgIE9wZW5IMzIzIHN0YWNrLiAgVGhlIGF1dGhvcnMgd291bGQgYWxzbyBsaWtlIHRvIHRoYW5rIEJyaWFuIEMuIFdpbGVzCisgICA8YnJpYW5Ac3RyZWFtY29tbS5jb20+IG9mIFN0cmVhbUNvbW0gZm9yIGhpcyBhc3Npc3RhbmNlIGluIGRldmVsb3BpbmcKKyAgIHRoZSBwcm9wb3NlZCBzdGFuZGFyZCBmb3IgU3BlZXggdXNlIGluIEguMzIzIGFwcGxpY2F0aW9ucy4KKworICAgVGhlIGF1dGhvcnMgd291bGQgYWxzbyBsaWtlIHRvIHRoYW5rIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBvZiB0aGUKKyAgIFNwZWV4IGFuZCBBVlQgY29tbXVuaXRpZXMgZm9yIHRoZWlyIGlucHV0OiAgUm9zcyBGaW5sYXlzb24sIEZlZGVyaWNvCisgICBNb250ZXNpbm8gUG91em9scywgSGVubmluZyBTY2h1bHpyaW5uZSwgTWFnbnVzIFdlc3Rlcmx1bmQuCisKKzEzLiAgUmVmZXJlbmNlcworCisxMy4xICBOb3JtYXRpdmUgUmVmZXJlbmNlcworCisgICBbMV0gIEJyYWRuZXIsIFMuLCAiS2V5IHdvcmRzIGZvciB1c2UgaW4gUkZDcyB0byBJbmRpY2F0ZSBSZXF1aXJlbWVudAorICAgICAgICBMZXZlbHMiLCBSRkMgMjExOS4KKworICAgWzJdICBTY2h1bHpyaW5uZSwgSC4sIENhc25lciwgUy4sIEZyZWRlcmljaywgUi4sIGFuZCBWLiBKYWNvYnNvbiwKKyAgICAgICAgIlJUUDogQSBUcmFuc3BvcnQgUHJvdG9jb2wgZm9yIHJlYWwtdGltZSBhcHBsaWNhdGlvbnMiLAorICAgICAgICBSRkMgMzU1MC4KKworICAgWzNdICAiTXVsdGlwdXJwb3NlIEludGVybmV0IE1haWwgRXh0ZW5zaW9ucyAoTUlNRSkgUGFydCBPbmU6IEZvcm1hdAorICAgICAgICBvZiBJbnRlcm5ldCBNZXNzYWdlIEJvZGllcyIsIFJGQyAyMDQ1LgorCisgICBbNF0gIEphY29ic29uLCBWLiBhbmQgTS4gSGFuZGxleSwgIlNEUDogU2Vzc2lvbiBEZXNjcmlwdGlvbgorICAgICAgICBQcm90b2NvbCIsIFJGQyAyMzI3LgorCisgICBbNV0gIFNjaHVsenJpbm5lLCBILiBhbmQgUy4gQ2FzbmVyLCAiUlRQIFByb2ZpbGUgZm9yIEF1ZGlvIGFuZCBWaWRlbworICAgICAgICBDb25mZXJlbmNlcyB3aXRoIE1pbmltYWwgQ29udHJvbC4iLCBSRkMgMzU1MS4KKworCisKKworSGVybGVpbiwgZXQgYWwuICAgICAgICAgIEV4cGlyZXMgQXByaWwgMTUsIDIwMDYgICAgICAgICAgICAgICAgW1BhZ2UgMTFdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgIGRyYWZ0LWlldGYtYXZ0LXJ0cC1zcGVleC0wMCAgICAgICAgICBPY3RvYmVyIDIwMDUKKworCisgICBbNl0gIFdhbGxlaWosIEwuLCAiVGhlIGFwcGxpY2F0aW9uL29nZyBNZWRpYSBUeXBlIiwgUkZDIDM1MzQuCisKKzEzLjIgIEluZm9ybWF0aXZlIFJlZmVyZW5jZXMKKworICAgWzddICAiU3BlZXhlbmMvc3BlZXhkZWMsIHJlZmVyZW5jZSBjb21tYW5kLWxpbmUgZW5jb2Rlci9kZWNvZGVyIiwKKyAgICAgICAgU3BlZXggd2Vic2l0ZSBodHRwOi8vd3d3LnNwZWV4Lm9yZy8uCisKKyAgIFs4XSAgIkNFTFAsIFUuUy4gRmVkZXJhbCBTdGFuZGFyZCAxMDE2LiIsIE5hdGlvbmFsIFRlY2huaWNhbAorICAgICAgICBJbmZvcm1hdGlvbiBTZXJ2aWNlIChOVElTKSB3ZWJzaXRlIGh0dHA6Ly93d3cubnRpcy5nb3YvLgorCisgICBbOV0gICJJVFUgSC4zMjMvSC4yNDUgVXNlIG9mIFNwZWV4IiwgU3BlZXgKKyAgICAgICAgd2Vic2l0ZSBodHRwOi8vd3d3LnNwZWV4Lm9yZy9pdHUvLgorCisKK0F1dGhvcnMnIEFkZHJlc3NlcworCisgICBHcmVnIEhlcmxlaW4KKyAgIDIwMzQgRmlsYmVydCBTdHJlZXQKKyAgIFNhbiBGcmFuY2lzY28sIENhbGlmb3JuaWEgIDk0MTIzCisgICBVbml0ZWQgU3RhdGVzCisKKyAgIEVtYWlsOiBnaGVybGVpbkBoZXJsZWluLmNvbQorCisKKyAgIFNpbW9uIE1vcmxhdAorICAgMzUsIGF2IGRlIFZpemlsbGUgQXBwIDQyCisgICBHcmVub2JsZSAgMzgwMDAKKyAgIEZyYW5jZQorCisgICBFbWFpbDogc2ltb24ubW9ybGF0QGxpbnBob25lLm9yZworCisKKyAgIEplYW4tTWFyYyBWYWxpbgorICAgRGVwYXJ0bWVudCBvZiBFbGVjdHJpY2FsIGFuZCBDb21wdXRlciBFbmdpbmVlcmluZworICAgVW5pdmVyc2l0eSBvZiBTaGVyYnJvb2tlCisgICAyNTAwIGJsdmQgVW5pdmVyc2l0ZQorICAgU2hlcmJyb29rZSwgUXVlYmVjICBKMUsgMlIxCisgICBDYW5hZGEKKworICAgRW1haWw6IGplYW4tbWFyYy52YWxpbkB1c2hlcmJyb29rZS5jYQorCisKKworCisKKworCisKKworCisKK0hlcmxlaW4sIGV0IGFsLiAgICAgICAgICBFeHBpcmVzIEFwcmlsIDE1LCAyMDA2ICAgICAgICAgICAgICAgIFtQYWdlIDEyXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICBkcmFmdC1pZXRmLWF2dC1ydHAtc3BlZXgtMDAgICAgICAgICAgT2N0b2JlciAyMDA1CisKKworICAgUm9nZXIgSGFyZGltYW4KKyAgIDQ5IE5ldHRsZXRvbiBSb2FkCisgICBDaGVsdGVuaGFtLCBHbG91Y2VzdGVyc2hpcmUgIEdMNTEgNk5SCisgICBFbmdsYW5kCisKKyAgIEVtYWlsOiByb2dlckBmcmVlYnNkLm9yZworCisKKyAgIFBoaWwgS2VycgorICAgRW5nbGFuZAorCisgICBFbWFpbDogcGhpbEBwbHVzMjQuY29tCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitIZXJsZWluLCBldCBhbC4gICAgICAgICAgRXhwaXJlcyBBcHJpbCAxNSwgMjAwNiAgICAgICAgICAgICAgICBbUGFnZSAxM10KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgZHJhZnQtaWV0Zi1hdnQtcnRwLXNwZWV4LTAwICAgICAgICAgIE9jdG9iZXIgMjAwNQorCisKK0ludGVsbGVjdHVhbCBQcm9wZXJ0eSBTdGF0ZW1lbnQKKworICAgVGhlIElFVEYgdGFrZXMgbm8gcG9zaXRpb24gcmVnYXJkaW5nIHRoZSB2YWxpZGl0eSBvciBzY29wZSBvZiBhbnkKKyAgIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMgb3Igb3RoZXIgcmlnaHRzIHRoYXQgbWlnaHQgYmUgY2xhaW1lZCB0bworICAgcGVydGFpbiB0byB0aGUgaW1wbGVtZW50YXRpb24gb3IgdXNlIG9mIHRoZSB0ZWNobm9sb2d5IGRlc2NyaWJlZCBpbgorICAgdGhpcyBkb2N1bWVudCBvciB0aGUgZXh0ZW50IHRvIHdoaWNoIGFueSBsaWNlbnNlIHVuZGVyIHN1Y2ggcmlnaHRzCisgICBtaWdodCBvciBtaWdodCBub3QgYmUgYXZhaWxhYmxlOyBub3IgZG9lcyBpdCByZXByZXNlbnQgdGhhdCBpdCBoYXMKKyAgIG1hZGUgYW55IGluZGVwZW5kZW50IGVmZm9ydCB0byBpZGVudGlmeSBhbnkgc3VjaCByaWdodHMuICBJbmZvcm1hdGlvbgorICAgb24gdGhlIHByb2NlZHVyZXMgd2l0aCByZXNwZWN0IHRvIHJpZ2h0cyBpbiBSRkMgZG9jdW1lbnRzIGNhbiBiZQorICAgZm91bmQgaW4gQkNQIDc4IGFuZCBCQ1AgNzkuCisKKyAgIENvcGllcyBvZiBJUFIgZGlzY2xvc3VyZXMgbWFkZSB0byB0aGUgSUVURiBTZWNyZXRhcmlhdCBhbmQgYW55CisgICBhc3N1cmFuY2VzIG9mIGxpY2Vuc2VzIHRvIGJlIG1hZGUgYXZhaWxhYmxlLCBvciB0aGUgcmVzdWx0IG9mIGFuCisgICBhdHRlbXB0IG1hZGUgdG8gb2J0YWluIGEgZ2VuZXJhbCBsaWNlbnNlIG9yIHBlcm1pc3Npb24gZm9yIHRoZSB1c2Ugb2YKKyAgIHN1Y2ggcHJvcHJpZXRhcnkgcmlnaHRzIGJ5IGltcGxlbWVudGVycyBvciB1c2VycyBvZiB0aGlzCisgICBzcGVjaWZpY2F0aW9uIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSBJRVRGIG9uLWxpbmUgSVBSIHJlcG9zaXRvcnkgYXQKKyAgIGh0dHA6Ly93d3cuaWV0Zi5vcmcvaXByLgorCisgICBUaGUgSUVURiBpbnZpdGVzIGFueSBpbnRlcmVzdGVkIHBhcnR5IHRvIGJyaW5nIHRvIGl0cyBhdHRlbnRpb24gYW55CisgICBjb3B5cmlnaHRzLCBwYXRlbnRzIG9yIHBhdGVudCBhcHBsaWNhdGlvbnMsIG9yIG90aGVyIHByb3ByaWV0YXJ5CisgICByaWdodHMgdGhhdCBtYXkgY292ZXIgdGVjaG5vbG9neSB0aGF0IG1heSBiZSByZXF1aXJlZCB0byBpbXBsZW1lbnQKKyAgIHRoaXMgc3RhbmRhcmQuICBQbGVhc2UgYWRkcmVzcyB0aGUgaW5mb3JtYXRpb24gdG8gdGhlIElFVEYgYXQKKyAgIGlldGYtaXByQGlldGYub3JnLgorCisKK0Rpc2NsYWltZXIgb2YgVmFsaWRpdHkKKworICAgVGhpcyBkb2N1bWVudCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gYXJlIHByb3ZpZGVkIG9uIGFuCisgICAiQVMgSVMiIGJhc2lzIGFuZCBUSEUgQ09OVFJJQlVUT1IsIFRIRSBPUkdBTklaQVRJT04gSEUvU0hFIFJFUFJFU0VOVFMKKyAgIE9SIElTIFNQT05TT1JFRCBCWSAoSUYgQU5ZKSwgVEhFIElOVEVSTkVUIFNPQ0lFVFkgQU5EIFRIRSBJTlRFUk5FVAorICAgRU5HSU5FRVJJTkcgVEFTSyBGT1JDRSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELAorICAgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBBTlkgV0FSUkFOVFkgVEhBVCBUSEUgVVNFIE9GIFRIRQorICAgSU5GT1JNQVRJT04gSEVSRUlOIFdJTEwgTk9UIElORlJJTkdFIEFOWSBSSUdIVFMgT1IgQU5ZIElNUExJRUQKKyAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisKK0NvcHlyaWdodCBTdGF0ZW1lbnQKKworICAgQ29weXJpZ2h0IChDKSBUaGUgSW50ZXJuZXQgU29jaWV0eSAoMjAwNSkuICBUaGlzIGRvY3VtZW50IGlzIHN1YmplY3QKKyAgIHRvIHRoZSByaWdodHMsIGxpY2Vuc2VzIGFuZCByZXN0cmljdGlvbnMgY29udGFpbmVkIGluIEJDUCA3OCwgYW5kCisgICBleGNlcHQgYXMgc2V0IGZvcnRoIHRoZXJlaW4sIHRoZSBhdXRob3JzIHJldGFpbiBhbGwgdGhlaXIgcmlnaHRzLgorCisKK0Fja25vd2xlZGdtZW50CisKKyAgIEZ1bmRpbmcgZm9yIHRoZSBSRkMgRWRpdG9yIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBwcm92aWRlZCBieSB0aGUKKyAgIEludGVybmV0IFNvY2lldHkuCisKKworCisKK0hlcmxlaW4sIGV0IGFsLiAgICAgICAgICBFeHBpcmVzIEFwcmlsIDE1LCAyMDA2ICAgICAgICAgICAgICAgIFtQYWdlIDE0XQorDApkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvZG9jL2VjaG9fcGF0aC5lcHMgYi8zcmRwYXJ0eS9zcGVleC9kb2MvZWNob19wYXRoLmVwcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWE0NThjCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvZG9jL2VjaG9fcGF0aC5lcHMKQEAgLTAsMCArMSwxMjk4IEBACislIVBTLUFkb2JlLTMuMCBFUFNGLTMuMCAKKyUlQm91bmRpbmdCb3g6IDAgMCA0MTUgMjM1CislJVBhZ2VzOiAwCislJUNyZWF0b3I6IFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyUlVGl0bGU6IG5vbmUKKyUlQ3JlYXRpb25EYXRlOiBub25lCislJUxhbmd1YWdlTGV2ZWw6IDIKKyUlRW5kQ29tbWVudHMKKyUlQmVnaW5Qcm9sb2cKKyUlQmVnaW5SZXNvdXJjZTogcHJvY3NldCBTRFJlcy1Qcm9sb2cgMS4wIDAKKy9iNF9pbmNfc3RhdGUgc2F2ZSBkZWYKKy9kaWN0X2NvdW50IGNvdW50ZGljdHN0YWNrIGRlZgorL29wX2NvdW50IGNvdW50IDEgc3ViIGRlZgordXNlcmRpY3QgYmVnaW4KKzAgc2V0Z3JheSAwIHNldGxpbmVjYXAgMSBzZXRsaW5ld2lkdGggMCBzZXRsaW5lam9pbiAxMCBzZXRtaXRlcmxpbWl0W10gMCBzZXRkYXNoIG5ld3BhdGgKKy9sYW5ndWFnZWxldmVsIHdoZXJlIHtwb3AgbGFuZ3VhZ2VsZXZlbCAxIG5lIHtmYWxzZSBzZXRzdHJva2VhZGp1c3QgZmFsc2Ugc2V0b3ZlcnByaW50fSBpZn0gaWYKKy9iZGVmIHtiaW5kIGRlZn0gYmluZCBkZWYKKy9jIHtzZXRncmF5fSBiZGVmCisvbCB7bmVnIGxpbmV0b30gYmRlZgorL3JsIHtuZWcgcmxpbmV0b30gYmRlZgorL2xjIHtzZXRsaW5lY2FwfSBiZGVmCisvbGoge3NldGxpbmVqb2lufSBiZGVmCisvbHcge3NldGxpbmV3aWR0aH0gYmRlZgorL21sIHtzZXRtaXRlcmxpbWl0fSBiZGVmCisvbGQge3NldGRhc2h9IGJkZWYKKy9tIHtuZWcgbW92ZXRvfSBiZGVmCisvY3QgezYgMiByb2xsIG5lZyA2IDIgcm9sbCBuZWcgNiAyIHJvbGwgbmVnIGN1cnZldG99IGJkZWYKKy9yIHtyb3RhdGV9IGJkZWYKKy90IHtuZWcgdHJhbnNsYXRlfSBiZGVmCisvcyB7c2NhbGV9IGJkZWYKKy9zdyB7c2hvd30gYmRlZgorL2dzIHtnc2F2ZX0gYmRlZgorL2dyIHtncmVzdG9yZX0gYmRlZgorL2Yge2ZpbmRmb250IGR1cCBsZW5ndGggZGljdCBiZWdpbgorezEgaW5kZXggL0ZJRCBuZSB7ZGVmfSB7cG9wIHBvcH0gaWZlbHNlfSBmb3JhbGwgL0VuY29kaW5nIElTT0xhdGluMUVuY29kaW5nIGRlZgorY3VycmVudGRpY3QgZW5kIC9ORm9udCBleGNoIGRlZmluZWZvbnQgcG9wIC9ORm9udCBmaW5kZm9udH0gYmRlZgorL3Age2Nsb3NlcGF0aH0gYmRlZgorL3NmIHtzY2FsZWZvbnQgc2V0Zm9udH0gYmRlZgorL2VmIHtlb2ZpbGx9YmRlZgorL3BjIHtjbG9zZXBhdGggc3Ryb2tlfWJkZWYKKy9wcyB7c3Ryb2tlfWJkZWYKKy9wdW0ge21hdHJpeCBjdXJyZW50bWF0cml4fWJkZWYKKy9wb20ge3NldG1hdHJpeH1iZGVmCisvYnMgey9hU3RyaW5nIGV4Y2ggZGVmIC9uWE9mcyBleGNoIGRlZiAvbldpZHRoIGV4Y2ggZGVmIGN1cnJlbnRwb2ludCBuWE9mcyAwIHJtb3ZldG8gcHVtIG5XaWR0aCBhU3RyaW5nIHN0cmluZ3dpZHRoIHBvcCBkaXYgMSBzY2FsZSBhU3RyaW5nIHNob3cgcG9tIG1vdmV0b30gYmRlZgorJSVFbmRSZXNvdXJjZQorJSVFbmRQcm9sb2cKKyUlQmVnaW5TZXR1cAorJSVFbmRTZXR1cAorJSVQYWdlOiAxIDEKKyUlQmVnaW5QYWdlU2V0dXAKKyUlRW5kUGFnZVNldHVwCitwdW0KKzAuMDI4MzYgMC4wMjgzNiBzIAorMCAtODI4NiB0CisvdG0gbWF0cml4IGN1cnJlbnRtYXRyaXggZGVmCit0bSBzZXRtYXRyaXgKKy0zOTAwIC04ODU3IHQgCisxIDEgcyAKKzAuMDAwIGMgMTAwMDAgMTIwMDAgbSAgOTU4MSAxMjQxOSBsICA5NDEzIDEyMDg0IGwgIDEwMDAwIDEyMDAwIGwgIHAgZWYKKzY5ODkgMTM0NzggbSAgOTU4NiAxMjE3OSBsICA5NjA5IDEyMjI0IGwgIDcwMTEgMTM1MjIgbCAgNjk4OSAxMzQ3OCBsICBwIGVmCiswLjk5NiBjIDg1MDAgMTM4MDAgbSAgNzUwMCAxMzgwMCBsICA3NTAwIDExODAwIGwgIDk1MDAgMTE4MDAgbCAgOTUwMCAxMzgwMCBsIAorODUwMCAxMzgwMCBsICBwIGVmCis1MCBsdyAxIGxqIDAuMDAwIGMgODUwMCAxMzgwMCBtICA3NTAwIDEzODAwIGwgIDc1MDAgMTE4MDAgbCAgOTUwMCAxMTgwMCBsIAorOTUwMCAxMzgwMCBsICA4NTAwIDEzODAwIGwgIHBjCitncworZ3MKK3B1bQorODA4MCAxMjk2MCB0CisxMDMgLTMzNCBtICAxMDMgLTMzNCAxMDMgLTMzNCA4IC0zMzQgY3QgOCAtMzM0IDggLTMzNCA4IC0zMjMgY3QgMzEgLTMxOCAzNCAtMzE0IDM0IC0yOTQgY3QgCiszNCAtMjk0IDM0IC0yOTQgMzQgLTQyIGN0IDM0IC0yMSAzMCAtMTYgOCAtMTIgY3QgOCAtMTIgOCAtMTIgOCAwIGN0IDggMCA4IDAgMTI3IDAgY3QgCisxMjcgMCAxMjcgMCAxMjcgLTEyIGN0IDEwOSAtMTQgMTAzIC0yMiAxMDMgLTQwIGN0IDEwMyAtNDAgMTAzIC00MCAxMDMgLTE3MiBjdCAxMDMgLTE3NCAxMDYgLTE3OSAxMTEgLTE4NCBjdCAKKzEyMiAtMTk1IDEzNCAtMjAxIDE0NSAtMjAxIGN0IDE2MyAtMjAxIDE3MSAtMTg4IDE3MSAtMTYwIGN0IDE3MSAtMTYwIDE3MSAtMTYwIDE3MSAtNDAgY3QgCisxNzEgLTIyIDE2NSAtMTQgMTQ4IC0xMiBjdCAxNDggLTEyIDE0OCAtMTIgMTQ4IDAgY3QgMTQ4IDAgMTQ4IDAgMjY0IDAgY3QgMjY0IDAgMjY0IDAgMjY0IC0xMiBjdCAKKzI0NiAtMTMgMjQwIC0yMSAyNDAgLTQyIGN0IDI0MCAtNDIgMjQwIC00MiAyNDAgLTE2NCBjdCAyNDAgLTIwNyAyMTMgLTIzNCAxNzMgLTIzNCBjdCAKKzE0NyAtMjM0IDEyOCAtMjI0IDEwMyAtMTk1IGN0IDEwMyAtMTk1IDEwMyAtMTk1IDEwMyAtMzM0IGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzgzNTEgMTI5NjAgdAorMTQzIC0zMzQgbSAgMTA3IC0zMTAgOTIgLTI5NyA3NSAtMjc0IGN0IDQwIC0yMzEgMjMgLTE4MiAyMyAtMTI0IGN0IDIzIC02MiA0MSAtMTMgODQgMzcgY3QgCisxMDQgNjEgMTE2IDcyIDE0MSA4NyBjdCAxNDEgODcgMTQxIDg3IDE0NyA3OSBjdCAxMDggNDggOTUgMzEgODIgLTYgY3QgNzAgLTM5IDY1IC03NiA2NSAtMTI2IGN0IAorNjUgLTE3OCA3MSAtMjE4IDg0IC0yNDkgY3QgOTggLTI3OSAxMTIgLTI5NyAxNDcgLTMyNiBjdCAxNDcgLTMyNiAxNDcgLTMyNiAxNDMgLTMzNCBjdCAKK3AgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzg1MTYgMTI5NjAgdAorMjI3IC01OCBtICAyMjcgLTU4IDIyNyAtNTggMjE3IC00NSBjdCAyMDMgLTI3IDE5NCAtMTkgMTg3IC0xOSBjdCAxODMgLTE5IDE3OSAtMjMgMTc5IC0yNyBjdCAKKzE3OSAtMzEgMTc5IC0zMSAxODYgLTU4IGN0IDE4NiAtNTggMTg2IC01OCAyMTQgLTE2MCBjdCAyMTYgLTE3MCAyMTggLTE4MSAyMTggLTE4OCBjdCAKKzIxOCAtMjA2IDIwNSAtMjE4IDE4NiAtMjE4IGN0IDE1NCAtMjE4IDEyMyAtMTg5IDcyIC0xMTAgY3QgNzIgLTExMCA3MiAtMTEwIDEwNSAtMjE3IGN0IAorMTA1IC0yMTcgMTA1IC0yMTcgMTA0IC0yMTggY3QgNzcgLTIxMyA2NyAtMjExIDI0IC0yMDMgY3QgMjQgLTIwMyAyNCAtMjAzIDI0IC0xOTUgY3QgCis0OSAtMTk1IDU1IC0xOTIgNTUgLTE4MiBjdCA1NSAtMTc5IDU1IC0xNzYgNTQgLTE3MyBjdCA1NCAtMTczIDU0IC0xNzMgNyAwIGN0IDcgMCA3IDAgNDQgMCBjdCAKKzY3IC03OCA3MiAtODkgOTMgLTEyMyBjdCAxMjMgLTE2OCAxNDggLTE5MyAxNjYgLTE5MyBjdCAxNzQgLTE5MyAxNzggLTE4OCAxNzggLTE3OSBjdCAKKzE3OCAtMTczIDE3NSAtMTU2IDE3MSAtMTQxIGN0IDE3MSAtMTQxIDE3MSAtMTQxIDE1MCAtNjAgY3QgMTQzIC0zNSAxNDIgLTI4IDE0MiAtMjMgY3QgCisxNDIgLTQgMTQ5IDQgMTY1IDQgY3QgMTg3IDQgMjAwIC02IDIzNCAtNTIgY3QgMjM0IC01MiAyMzQgLTUyIDIyNyAtNTggY3QgcCBlZgorcG9tCitncgorZ3MKK3B1bQorODc2NiAxMjk2MCB0CisxOCA4NyBtICA1NCA2NCA2OSA1MSA4NyAyOCBjdCAxMjEgLTE1IDEzOCAtNjQgMTM4IC0xMjIgY3QgMTM4IC0xODUgMTIwIC0yMzMgNzcgLTI4MyBjdCAKKzU4IC0zMDcgNDUgLTMxOCAyMCAtMzM0IGN0IDIwIC0zMzQgMjAgLTMzNCAxNCAtMzI2IGN0IDUzIC0yOTUgNjYgLTI3NyA3OSAtMjQwIGN0IAorOTEgLTIwNyA5NiAtMTcwIDk2IC0xMjAgY3QgOTYgLTY5IDkwIC0yOCA3NyAyIGN0IDYzIDMzIDQ5IDUxIDE0IDc5IGN0IDE0IDc5IDE0IDc5IDE4IDg3IGN0IAorcCBlZgorcG9tCitncgorZ3IKKzE0MTAwIDE2MDAwIG0gIDEzODI0IDE2MDAwIDEzNjAwIDE1Nzc2IDEzNjAwIDE1NTAwIGN0IDEzNjAwIDE1MjI0IDEzODI0IDE1MDAwIDE0MTAwIDE1MDAwIGN0IAorMTQzNzYgMTUwMDAgMTQ2MDAgMTUyMjQgMTQ2MDAgMTU1MDAgY3QgMTQ2MDAgMTU3NzYgMTQzNzYgMTYwMDAgMTQxMDAgMTYwMDAgY3QgCitwYworZ3MKK2dzCitwdW0KKzEzOTU0IDE1NjY4IHQKKzEyMSAtMTQxIG0gIDE1IC0xNDEgbCAgMTUgLTEwOCBsICAxMjEgLTEwOCBsICAxMjEgMCBsICAxNTMgMCBsICAxNTMgLTEwOCBsIAorMjU5IC0xMDggbCAgMjU5IC0xNDEgbCAgMTUzIC0xNDEgbCAgMTUzIC0yNTAgbCAgMTIxIC0yNTAgbCAgMTIxIC0xNDEgbCAKK3AgZWYKK3BvbQorZ3IKK2dyCis4NTAwIDE2MDAwIG0gIDgyMjQgMTYwMDAgODAwMCAxNTc3NiA4MDAwIDE1NTAwIGN0IDgwMDAgMTUyMjQgODIyNCAxNTAwMCA4NTAwIDE1MDAwIGN0IAorODc3NiAxNTAwMCA5MDAwIDE1MjI0IDkwMDAgMTU1MDAgY3QgOTAwMCAxNTc3NiA4Nzc2IDE2MDAwIDg1MDAgMTYwMDAgY3QgcGMKKzg1MDAgMTUwMDAgbSAgODMxMyAxNDQzOCBsICA4Njg4IDE0NDM4IGwgIDg1MDAgMTUwMDAgbCAgcCBlZgorODUyNSAxMzgwMCBtICA4NTI1IDE0NTUwIGwgIDg0NzUgMTQ1NTAgbCAgODQ3NSAxMzgwMCBsICA4NTI1IDEzODAwIGwgIHAgZWYKKzkwMDAgMTU1MDAgbSAgOTU2MyAxNTMxMyBsICA5NTYzIDE1Njg4IGwgIDkwMDAgMTU1MDAgbCAgcCBlZgorMTM2MDAgMTU1MjUgbSAgOTQ1MCAxNTUyNSBsICA5NDUwIDE1NDc1IGwgIDEzNjAwIDE1NDc1IGwgIDEzNjAwIDE1NTI1IGwgCitwIGVmCisxNDEwMCAxMzgwMCBtICAxMzEwMCAxMzgwMCBsICAxMzEwMCAxMTgwMCBsICAxNTEwMCAxMTgwMCBsICAxNTEwMCAxMzgwMCBsIAorMTQxMDAgMTM4MDAgbCAgcGMKK2dzCitncworcHVtCisxMzY2MyAxMjk2MCB0CisxMDMgLTMzNCBtICAxMDMgLTMzNCAxMDMgLTMzNCA4IC0zMzQgY3QgOCAtMzM0IDggLTMzNCA4IC0zMjMgY3QgMzEgLTMxOCAzNCAtMzE0IDM0IC0yOTQgY3QgCiszNCAtMjk0IDM0IC0yOTQgMzQgLTQyIGN0IDM0IC0yMSAzMCAtMTYgOCAtMTIgY3QgOCAtMTIgOCAtMTIgOCAwIGN0IDggMCA4IDAgMTI3IDAgY3QgCisxMjcgMCAxMjcgMCAxMjcgLTEyIGN0IDEwOSAtMTQgMTAzIC0yMiAxMDMgLTQwIGN0IDEwMyAtNDAgMTAzIC00MCAxMDMgLTE3MiBjdCAxMDMgLTE3NCAxMDYgLTE3OSAxMTEgLTE4NCBjdCAKKzEyMiAtMTk1IDEzNCAtMjAxIDE0NSAtMjAxIGN0IDE2MyAtMjAxIDE3MSAtMTg4IDE3MSAtMTYwIGN0IDE3MSAtMTYwIDE3MSAtMTYwIDE3MSAtNDAgY3QgCisxNzEgLTIyIDE2NSAtMTQgMTQ4IC0xMiBjdCAxNDggLTEyIDE0OCAtMTIgMTQ4IDAgY3QgMTQ4IDAgMTQ4IDAgMjY0IDAgY3QgMjY0IDAgMjY0IDAgMjY0IC0xMiBjdCAKKzI0NiAtMTMgMjQwIC0yMSAyNDAgLTQyIGN0IDI0MCAtNDIgMjQwIC00MiAyNDAgLTE2NCBjdCAyNDAgLTIwNyAyMTMgLTIzNCAxNzMgLTIzNCBjdCAKKzE0NyAtMjM0IDEyOCAtMjI0IDEwMyAtMTk1IGN0IDEwMyAtMTk1IDEwMyAtMTk1IDEwMyAtMzM0IGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzEzOTM0IDEyOTYwIHQKKzE0MyAtMzM0IG0gIDEwNyAtMzEwIDkyIC0yOTcgNzUgLTI3NCBjdCA0MCAtMjMxIDIzIC0xODIgMjMgLTEyNCBjdCAyMyAtNjIgNDEgLTEzIDg0IDM3IGN0IAorMTA0IDYxIDExNiA3MiAxNDEgODcgY3QgMTQxIDg3IDE0MSA4NyAxNDcgNzkgY3QgMTA4IDQ4IDk1IDMxIDgyIC02IGN0IDcwIC0zOSA2NSAtNzYgNjUgLTEyNiBjdCAKKzY1IC0xNzggNzEgLTIxOCA4NCAtMjQ5IGN0IDk4IC0yNzkgMTEyIC0yOTcgMTQ3IC0zMjYgY3QgMTQ3IC0zMjYgMTQ3IC0zMjYgMTQzIC0zMzQgY3QgCitwIGVmCitwb20KK2dyCitncworcHVtCisxNDA5OSAxMjk2MCB0CisyMjcgLTU4IG0gIDIyNyAtNTggMjI3IC01OCAyMTcgLTQ1IGN0IDIwMyAtMjcgMTk0IC0xOSAxODcgLTE5IGN0IDE4MyAtMTkgMTc5IC0yMyAxNzkgLTI3IGN0IAorMTc5IC0zMSAxNzkgLTMxIDE4NiAtNTggY3QgMTg2IC01OCAxODYgLTU4IDIxNCAtMTYwIGN0IDIxNiAtMTcwIDIxOCAtMTgxIDIxOCAtMTg4IGN0IAorMjE4IC0yMDYgMjA1IC0yMTggMTg2IC0yMTggY3QgMTU0IC0yMTggMTIzIC0xODkgNzIgLTExMCBjdCA3MiAtMTEwIDcyIC0xMTAgMTA1IC0yMTcgY3QgCisxMDUgLTIxNyAxMDUgLTIxNyAxMDQgLTIxOCBjdCA3NyAtMjEzIDY3IC0yMTEgMjQgLTIwMyBjdCAyNCAtMjAzIDI0IC0yMDMgMjQgLTE5NSBjdCAKKzQ5IC0xOTUgNTUgLTE5MiA1NSAtMTgyIGN0IDU1IC0xNzkgNTUgLTE3NiA1NCAtMTczIGN0IDU0IC0xNzMgNTQgLTE3MyA3IDAgY3QgNyAwIDcgMCA0NCAwIGN0IAorNjcgLTc4IDcyIC04OSA5MyAtMTIzIGN0IDEyMyAtMTY4IDE0OCAtMTkzIDE2NiAtMTkzIGN0IDE3NCAtMTkzIDE3OCAtMTg4IDE3OCAtMTc5IGN0IAorMTc4IC0xNzMgMTc1IC0xNTYgMTcxIC0xNDEgY3QgMTcxIC0xNDEgMTcxIC0xNDEgMTUwIC02MCBjdCAxNDMgLTM1IDE0MiAtMjggMTQyIC0yMyBjdCAKKzE0MiAtNCAxNDkgNCAxNjUgNCBjdCAxODcgNCAyMDAgLTYgMjM0IC01MiBjdCAyMzQgLTUyIDIzNCAtNTIgMjI3IC01OCBjdCBwIGVmCitwb20KK2dyCitncworcHVtCisxNDM0OSAxMjk2MCB0CisxOCA4NyBtICA1NCA2NCA2OSA1MSA4NyAyOCBjdCAxMjEgLTE1IDEzOCAtNjQgMTM4IC0xMjIgY3QgMTM4IC0xODUgMTIwIC0yMzMgNzcgLTI4MyBjdCAKKzU4IC0zMDcgNDUgLTMxOCAyMCAtMzM0IGN0IDIwIC0zMzQgMjAgLTMzNCAxNCAtMzI2IGN0IDUzIC0yOTUgNjYgLTI3NyA3OSAtMjQwIGN0IAorOTEgLTIwNyA5NiAtMTcwIDk2IC0xMjAgY3QgOTYgLTY5IDkwIC0yOCA3NyAyIGN0IDYzIDMzIDQ5IDUxIDE0IDc5IGN0IDE0IDc5IDE0IDc5IDE4IDg3IGN0IAorcCBlZgorcG9tCitncgorZ3IKKzE0MTAwIDE1MDAwIG0gIDEzOTEzIDE0NDM4IGwgIDE0Mjg4IDE0NDM4IGwgIDE0MTAwIDE1MDAwIGwgIHAgZWYKKzE0MTI1IDEzODAwIG0gIDE0MTI1IDE0NTUwIGwgIDE0MDc1IDE0NTUwIGwgIDE0MDc1IDEzODAwIGwgIDE0MTI1IDEzODAwIGwgCitwIGVmCis1OTAwIDE1NTAwIG0gIDY0NjMgMTUzMTMgbCAgNjQ2MyAxNTY4OCBsICA1OTAwIDE1NTAwIGwgIHAgZWYKKzgwMDAgMTU1MjUgbSAgNjM1MCAxNTUyNSBsICA2MzUwIDE1NDc1IGwgIDgwMDAgMTU0NzUgbCAgODAwMCAxNTUyNSBsICBwIGVmCis4NTAwIDExODAwIG0gIDgzMTMgMTEyMzggbCAgODY4OCAxMTIzOCBsICA4NTAwIDExODAwIGwgIHAgZWYKKzU2MDAgMTA1NzUgbSAgODUwMCAxMDU3NSBsICA4NTAwIDEwNjAwIGwgIDg1MDAgMTA2MjUgbCAgNTYwMCAxMDYyNSBsICA1NjAwIDEwNjAwIGwgCis1NjAwIDEwNTc1IGwgIHAgZWYKKzg1MDAgMTA2MDAgbSAgODUwMCAxMDU3NSBsICA4NTA0IDEwNTc1IGwgIDg1MDkgMTA1NzcgbCAgODUxMiAxMDU3OCBsICA4NTE2IDEwNTgxIGwgCis4NTE5IDEwNTg0IGwgIDg1MjIgMTA1ODcgbCAgODUyMyAxMDU5MSBsICA4NTI1IDEwNTk2IGwgIDg1MjUgMTA2MDAgbCAgODUyNSAxMDYwMCBsIAorODUwMCAxMDYwMCBsICBwIGVmCis4NTI1IDEwNjAwIG0gIDg1MjUgMTEzNTAgbCAgODUwMCAxMTM1MCBsICA4NDc1IDExMzUwIGwgIDg0NzUgMTA2MDAgbCAgODUwMCAxMDYwMCBsIAorODUyNSAxMDYwMCBsICBwIGVmCisxNDYwMCAxNTUwMCBtICAxNTE2MyAxNTMxMyBsICAxNTE2MyAxNTY4OCBsICAxNDYwMCAxNTUwMCBsICBwIGVmCisxNTkwMCAxNTUyNSBtICAxNTA1MCAxNTUyNSBsICAxNTA1MCAxNTQ3NSBsICAxNTkwMCAxNTQ3NSBsICAxNTkwMCAxNTUyNSBsIAorcCBlZgorMTQxMDAgMTE4MDAgbSAgMTM5MTMgMTEyMzggbCAgMTQyODggMTEyMzggbCAgMTQxMDAgMTE4MDAgbCAgcCBlZgorNTYwMCAxMDU3NSBtICAxNDEwMCAxMDU3NSBsICAxNDEwMCAxMDYwMCBsICAxNDEwMCAxMDYyNSBsICA1NjAwIDEwNjI1IGwgCis1NjAwIDEwNjAwIGwgIDU2MDAgMTA1NzUgbCAgcCBlZgorMTQxMDAgMTA2MDAgbSAgMTQxMDAgMTA1NzUgbCAgMTQxMDQgMTA1NzUgbCAgMTQxMDkgMTA1NzcgbCAgMTQxMTIgMTA1NzggbCAKKzE0MTE2IDEwNTgxIGwgIDE0MTE5IDEwNTg0IGwgIDE0MTIyIDEwNTg3IGwgIDE0MTIzIDEwNTkxIGwgIDE0MTI1IDEwNTk2IGwgCisxNDEyNSAxMDYwMCBsICAxNDEyNSAxMDYwMCBsICAxNDEwMCAxMDYwMCBsICBwIGVmCisxNDEyNSAxMDYwMCBtICAxNDEyNSAxMTM1MCBsICAxNDEwMCAxMTM1MCBsICAxNDA3NSAxMTM1MCBsICAxNDA3NSAxMDYwMCBsIAorMTQxMDAgMTA2MDAgbCAgMTQxMjUgMTA2MDAgbCAgcCBlZgorNzAwMCAxNTUwMCBtICA3MDAwIDEzNTAwIGwgIHBzCitncworZ3MKK3B1bQorMTYxNTAgMTU1MzYgdAorMTAgLTIwMCBtICAxNiAtMjAwIDIwIC0yMDAgMjUgLTIwMCBjdCA0NCAtMjAwIDQ5IC0xOTIgNTYgLTE0NiBjdCA2MSAtMTEyIDY3IC0zNyA2NyAtOCBjdCAKKzY3IDYgNjggOSA3MiA5IGN0IDg0IDkgMTMwIC00MyAxODAgLTExNCBjdCAxOTggLTEzOCAyMTAgLTE3MCAyMTAgLTE4OSBjdCAyMTAgLTIwNSAxOTggLTIxOCAxODMgLTIxOCBjdCAKKzE3MiAtMjE4IDE2NSAtMjEyIDE2NSAtMjAxIGN0IDE2NSAtMTkzIDE2NyAtMTg4IDE3NiAtMTgwIGN0IDE4MyAtMTc0IDE4NSAtMTcwIDE4NSAtMTY1IGN0IAorMTg1IC0xNDIgMTUzIC04NyAxMTggLTUwIGN0IDExOCAtNTAgMTE4IC01MCAxMDIgLTM1IGN0IDk5IC0xMDQgOTYgLTEzMCA4OSAtMTY3IGN0IAorODAgLTIxNyA4MCAtMjE4IDc1IC0yMTggY3QgNzMgLTIxOCA2OSAtMjE3IDY1IC0yMTYgY3QgNTYgLTIxNCAyOSAtMjA5IDEwIC0yMDYgY3QgCisxMCAtMjA2IDEwIC0yMDYgMTAgLTIwMCBjdCBwIGVmCitwb20KK2dyCitncworcHVtCisxNjM3MCAxNTUzNiB0CisxNDMgLTMzNCBtICAxMDcgLTMxMCA5MiAtMjk3IDc1IC0yNzQgY3QgNDAgLTIzMSAyMyAtMTgyIDIzIC0xMjQgY3QgMjMgLTYyIDQxIC0xMyA4NCAzNyBjdCAKKzEwNCA2MSAxMTYgNzIgMTQxIDg3IGN0IDE0MSA4NyAxNDEgODcgMTQ3IDc5IGN0IDEwOCA0OCA5NSAzMSA4MiAtNiBjdCA3MCAtMzkgNjUgLTc2IDY1IC0xMjYgY3QgCis2NSAtMTc4IDcxIC0yMTggODQgLTI0OSBjdCA5OCAtMjc5IDExMiAtMjk3IDE0NyAtMzI2IGN0IDE0NyAtMzI2IDE0NyAtMzI2IDE0MyAtMzM0IGN0IAorcCBlZgorcG9tCitncgorZ3MKK3B1bQorMTY1MzUgMTU1MzYgdAorMjI3IC01OCBtICAyMjcgLTU4IDIyNyAtNTggMjE3IC00NSBjdCAyMDMgLTI3IDE5NCAtMTkgMTg3IC0xOSBjdCAxODMgLTE5IDE3OSAtMjMgMTc5IC0yNyBjdCAKKzE3OSAtMzEgMTc5IC0zMSAxODYgLTU4IGN0IDE4NiAtNTggMTg2IC01OCAyMTQgLTE2MCBjdCAyMTYgLTE3MCAyMTggLTE4MSAyMTggLTE4OCBjdCAKKzIxOCAtMjA2IDIwNSAtMjE4IDE4NiAtMjE4IGN0IDE1NCAtMjE4IDEyMyAtMTg5IDcyIC0xMTAgY3QgNzIgLTExMCA3MiAtMTEwIDEwNSAtMjE3IGN0IAorMTA1IC0yMTcgMTA1IC0yMTcgMTA0IC0yMTggY3QgNzcgLTIxMyA2NyAtMjExIDI0IC0yMDMgY3QgMjQgLTIwMyAyNCAtMjAzIDI0IC0xOTUgY3QgCis0OSAtMTk1IDU1IC0xOTIgNTUgLTE4MiBjdCA1NSAtMTc5IDU1IC0xNzYgNTQgLTE3MyBjdCA1NCAtMTczIDU0IC0xNzMgNyAwIGN0IDcgMCA3IDAgNDQgMCBjdCAKKzY3IC03OCA3MiAtODkgOTMgLTEyMyBjdCAxMjMgLTE2OCAxNDggLTE5MyAxNjYgLTE5MyBjdCAxNzQgLTE5MyAxNzggLTE4OCAxNzggLTE3OSBjdCAKKzE3OCAtMTczIDE3NSAtMTU2IDE3MSAtMTQxIGN0IDE3MSAtMTQxIDE3MSAtMTQxIDE1MCAtNjAgY3QgMTQzIC0zNSAxNDIgLTI4IDE0MiAtMjMgY3QgCisxNDIgLTQgMTQ5IDQgMTY1IDQgY3QgMTg3IDQgMjAwIC02IDIzNCAtNTIgY3QgMjM0IC01MiAyMzQgLTUyIDIyNyAtNTggY3QgcCBlZgorcG9tCitncgorZ3MKK3B1bQorMTY3ODUgMTU1MzYgdAorMTggODcgbSAgNTQgNjQgNjkgNTEgODcgMjggY3QgMTIxIC0xNSAxMzggLTY0IDEzOCAtMTIyIGN0IDEzOCAtMTg1IDEyMCAtMjMzIDc3IC0yODMgY3QgCis1OCAtMzA3IDQ1IC0zMTggMjAgLTMzNCBjdCAyMCAtMzM0IDIwIC0zMzQgMTQgLTMyNiBjdCA1MyAtMjk1IDY2IC0yNzcgNzkgLTI0MCBjdCAKKzkxIC0yMDcgOTYgLTE3MCA5NiAtMTIwIGN0IDk2IC02OSA5MCAtMjggNzcgMiBjdCA2MyAzMyA0OSA1MSAxNCA3OSBjdCAxNCA3OSAxNCA3OSAxOCA4NyBjdCAKK3AgZWYKK3BvbQorZ3IKK2dyCitncworZ3MKK3B1bQorOTc0NyAxNTI5OCB0CisyMjkgLTU1IG0gIDIwMiAtMjQgMTk3IC0yMCAxODggLTIwIGN0IDE4MyAtMjAgMTc5IC0yNCAxNzkgLTMwIGN0IDE3OSAtMzcgMTk1IC05NyAyMTEgLTE1MiBjdCAKKzIyNSAtMTk3IDIzNSAtMjM3IDI2MCAtMzM2IGN0IDI2MCAtMzM2IDI2MCAtMzM2IDI1OCAtMzM4IGN0IDIzMiAtMzMzIDIxNCAtMzMwIDE4MiAtMzI3IGN0IAorMTgyIC0zMjcgMTgyIC0zMjcgMTgyIC0zMTggY3QgMjA5IC0zMTggMjEzIC0zMTYgMjEzIC0zMDYgY3QgMjEzIC0yOTkgMjEyIC0yOTYgMjA2IC0yNzEgY3QgCisyMDYgLTI3MSAyMDYgLTI3MSAxODQgLTE5MCBjdCAxODAgLTIxMCAxNzEgLTIxOCAxNTIgLTIxOCBjdCA4NyAtMjE4IDcgLTEyNSA3IC01MSBjdCAKKzcgLTE2IDI3IDUgNTkgNSBjdCA5MyA1IDExNSAtMTEgMTQ4IC02MCBjdCAxNDMgLTM1IDE0MiAtMjcgMTQyIC0xNiBjdCAxNDIgLTMgMTUwIDYgMTYzIDYgY3QgCisxODMgNiAyMDkgLTE0IDIzNSAtNTAgY3QgMjM1IC01MCAyMzUgLTUwIDIyOSAtNTUgY3QgcAorMTU0IC0yMDcgbSAgMTY4IC0yMDcgMTc2IC0xOTggMTc2IC0xODAgY3QgMTc2IC0xMDQgMTI0IC0xOSA3OSAtMTkgY3QgNjIgLTE5IDUwIC0zMiA1MCAtNTEgY3QgCis1MCAtOTIgNzUgLTE0OSAxMDggLTE4MyBjdCAxMjIgLTE5OCAxNDAgLTIwNyAxNTQgLTIwNyBjdCBwIGVmCitwb20KK2dyCitncworcHVtCis5OTk3IDE1Mjk4IHQKKzE0MyAtMzM0IG0gIDEwNyAtMzEwIDkyIC0yOTcgNzUgLTI3NCBjdCA0MCAtMjMxIDIzIC0xODIgMjMgLTEyNCBjdCAyMyAtNjIgNDEgLTEzIDg0IDM3IGN0IAorMTA0IDYxIDExNiA3MiAxNDEgODcgY3QgMTQxIDg3IDE0MSA4NyAxNDcgNzkgY3QgMTA4IDQ4IDk1IDMxIDgyIC02IGN0IDcwIC0zOSA2NSAtNzYgNjUgLTEyNiBjdCAKKzY1IC0xNzggNzEgLTIxOCA4NCAtMjQ5IGN0IDk4IC0yNzkgMTEyIC0yOTcgMTQ3IC0zMjYgY3QgMTQ3IC0zMjYgMTQ3IC0zMjYgMTQzIC0zMzQgY3QgCitwIGVmCitwb20KK2dyCitncworcHVtCisxMDE2MiAxNTI5OCB0CisyMjcgLTU4IG0gIDIyNyAtNTggMjI3IC01OCAyMTcgLTQ1IGN0IDIwMyAtMjcgMTk0IC0xOSAxODcgLTE5IGN0IDE4MyAtMTkgMTc5IC0yMyAxNzkgLTI3IGN0IAorMTc5IC0zMSAxNzkgLTMxIDE4NiAtNTggY3QgMTg2IC01OCAxODYgLTU4IDIxNCAtMTYwIGN0IDIxNiAtMTcwIDIxOCAtMTgxIDIxOCAtMTg4IGN0IAorMjE4IC0yMDYgMjA1IC0yMTggMTg2IC0yMTggY3QgMTU0IC0yMTggMTIzIC0xODkgNzIgLTExMCBjdCA3MiAtMTEwIDcyIC0xMTAgMTA1IC0yMTcgY3QgCisxMDUgLTIxNyAxMDUgLTIxNyAxMDQgLTIxOCBjdCA3NyAtMjEzIDY3IC0yMTEgMjQgLTIwMyBjdCAyNCAtMjAzIDI0IC0yMDMgMjQgLTE5NSBjdCAKKzQ5IC0xOTUgNTUgLTE5MiA1NSAtMTgyIGN0IDU1IC0xNzkgNTUgLTE3NiA1NCAtMTczIGN0IDU0IC0xNzMgNTQgLTE3MyA3IDAgY3QgNyAwIDcgMCA0NCAwIGN0IAorNjcgLTc4IDcyIC04OSA5MyAtMTIzIGN0IDEyMyAtMTY4IDE0OCAtMTkzIDE2NiAtMTkzIGN0IDE3NCAtMTkzIDE3OCAtMTg4IDE3OCAtMTc5IGN0IAorMTc4IC0xNzMgMTc1IC0xNTYgMTcxIC0xNDEgY3QgMTcxIC0xNDEgMTcxIC0xNDEgMTUwIC02MCBjdCAxNDMgLTM1IDE0MiAtMjggMTQyIC0yMyBjdCAKKzE0MiAtNCAxNDkgNCAxNjUgNCBjdCAxODcgNCAyMDAgLTYgMjM0IC01MiBjdCAyMzQgLTUyIDIzNCAtNTIgMjI3IC01OCBjdCBwIGVmCitwb20KK2dyCitncworcHVtCisxMDQxMiAxNTI5OCB0CisxOCA4NyBtICA1NCA2NCA2OSA1MSA4NyAyOCBjdCAxMjEgLTE1IDEzOCAtNjQgMTM4IC0xMjIgY3QgMTM4IC0xODUgMTIwIC0yMzMgNzcgLTI4MyBjdCAKKzU4IC0zMDcgNDUgLTMxOCAyMCAtMzM0IGN0IDIwIC0zMzQgMjAgLTMzNCAxNCAtMzI2IGN0IDUzIC0yOTUgNjYgLTI3NyA3OSAtMjQwIGN0IAorOTEgLTIwNyA5NiAtMTcwIDk2IC0xMjAgY3QgOTYgLTY5IDkwIC0yOCA3NyAyIGN0IDYzIDMzIDQ5IDUxIDE0IDc5IGN0IDE0IDc5IDE0IDc5IDE4IDg3IGN0IAorcCBlZgorcG9tCitncgorZ3IKK2dzCitncworcHVtCis0NTYxIDEwNzQ3IHQKKzE5OSAtNTUgbSAgMTk1IC01MSAxOTIgLTQ4IDE4OCAtNDIgY3QgMTc2IC0yNyAxNzAgLTIyIDE2NSAtMjIgY3QgMTU4IC0yMiAxNTMgLTI5IDE1MCAtNDIgY3QgCisxNDkgLTQ2IDE0OCAtNDkgMTQ4IC01MSBjdCAxMzUgLTEwMSAxMzAgLTEyMyAxMzAgLTEzMSBjdCAxNTIgLTE2OSAxNjkgLTE5MCAxNzggLTE5MCBjdCAKKzE4MSAtMTkwIDE4NSAtMTg5IDE5MCAtMTg2IGN0IDE5NiAtMTgzIDIwMCAtMTgyIDIwNCAtMTgyIGN0IDIxNCAtMTgyIDIyMSAtMTg5IDIyMSAtMjAwIGN0IAorMjIxIC0yMTAgMjEyIC0yMTggMjAxIC0yMTggY3QgMTc5IC0yMTggMTYwIC0yMDAgMTI2IC0xNDcgY3QgMTI2IC0xNDcgMTI2IC0xNDcgMTIxIC0xNzUgY3QgCisxMTQgLTIwOCAxMDggLTIxOCA5NSAtMjE4IGN0IDg0IC0yMTggNjcgLTIxNCAzNyAtMjA0IGN0IDM3IC0yMDQgMzcgLTIwNCAzMiAtMjAyIGN0IAorMzIgLTIwMiAzMiAtMjAyIDM0IC0xOTQgY3QgNTIgLTE5OSA1NyAtMjAwIDYxIC0yMDAgY3QgNzQgLTIwMCA3NyAtMTk1IDgzIC0xNjYgY3QgCis4MyAtMTY2IDgzIC0xNjYgOTggLTEwNSBjdCA5OCAtMTA1IDk4IC0xMDUgNTcgLTQ3IGN0IDQ3IC0zMyAzOCAtMjQgMzIgLTI0IGN0IDI5IC0yNCAyNCAtMjUgMTkgLTI4IGN0IAorMTMgLTMyIDcgLTMzIDMgLTMzIGN0IC02IC0zMyAtMTMgLTI2IC0xMyAtMTYgY3QgLTEzIC0zIC0zIDUgMTEgNSBjdCAyNyA1IDMzIDEgNTcgLTMwIGN0IAorNzEgLTQ1IDgxIC01OSAxMDIgLTg3IGN0IDEwMiAtODcgMTAyIC04NyAxMTcgLTI4IGN0IDEyMyAtMyAxMjkgNSAxNDUgNSBjdCAxNjQgNSAxNzcgLTcgMjA2IC01MSBjdCAKKzIwNiAtNTEgMjA2IC01MSAxOTkgLTU1IGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzQ3ODEgMTA3NDcgdAorMTQzIC0zMzQgbSAgMTA3IC0zMTAgOTIgLTI5NyA3NSAtMjc0IGN0IDQwIC0yMzEgMjMgLTE4MiAyMyAtMTI0IGN0IDIzIC02MiA0MSAtMTMgODQgMzcgY3QgCisxMDQgNjEgMTE2IDcyIDE0MSA4NyBjdCAxNDEgODcgMTQxIDg3IDE0NyA3OSBjdCAxMDggNDggOTUgMzEgODIgLTYgY3QgNzAgLTM5IDY1IC03NiA2NSAtMTI2IGN0IAorNjUgLTE3OCA3MSAtMjE4IDg0IC0yNDkgY3QgOTggLTI3OSAxMTIgLTI5NyAxNDcgLTMyNiBjdCAxNDcgLTMyNiAxNDcgLTMyNiAxNDMgLTMzNCBjdCAKK3AgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzQ5NDYgMTA3NDcgdAorMjI3IC01OCBtICAyMjcgLTU4IDIyNyAtNTggMjE3IC00NSBjdCAyMDMgLTI3IDE5NCAtMTkgMTg3IC0xOSBjdCAxODMgLTE5IDE3OSAtMjMgMTc5IC0yNyBjdCAKKzE3OSAtMzEgMTc5IC0zMSAxODYgLTU4IGN0IDE4NiAtNTggMTg2IC01OCAyMTQgLTE2MCBjdCAyMTYgLTE3MCAyMTggLTE4MSAyMTggLTE4OCBjdCAKKzIxOCAtMjA2IDIwNSAtMjE4IDE4NiAtMjE4IGN0IDE1NCAtMjE4IDEyMyAtMTg5IDcyIC0xMTAgY3QgNzIgLTExMCA3MiAtMTEwIDEwNSAtMjE3IGN0IAorMTA1IC0yMTcgMTA1IC0yMTcgMTA0IC0yMTggY3QgNzcgLTIxMyA2NyAtMjExIDI0IC0yMDMgY3QgMjQgLTIwMyAyNCAtMjAzIDI0IC0xOTUgY3QgCis0OSAtMTk1IDU1IC0xOTIgNTUgLTE4MiBjdCA1NSAtMTc5IDU1IC0xNzYgNTQgLTE3MyBjdCA1NCAtMTczIDU0IC0xNzMgNyAwIGN0IDcgMCA3IDAgNDQgMCBjdCAKKzY3IC03OCA3MiAtODkgOTMgLTEyMyBjdCAxMjMgLTE2OCAxNDggLTE5MyAxNjYgLTE5MyBjdCAxNzQgLTE5MyAxNzggLTE4OCAxNzggLTE3OSBjdCAKKzE3OCAtMTczIDE3NSAtMTU2IDE3MSAtMTQxIGN0IDE3MSAtMTQxIDE3MSAtMTQxIDE1MCAtNjAgY3QgMTQzIC0zNSAxNDIgLTI4IDE0MiAtMjMgY3QgCisxNDIgLTQgMTQ5IDQgMTY1IDQgY3QgMTg3IDQgMjAwIC02IDIzNCAtNTIgY3QgMjM0IC01MiAyMzQgLTUyIDIyNyAtNTggY3QgcCBlZgorcG9tCitncgorZ3MKK3B1bQorNTE5NiAxMDc0NyB0CisxOCA4NyBtICA1NCA2NCA2OSA1MSA4NyAyOCBjdCAxMjEgLTE1IDEzOCAtNjQgMTM4IC0xMjIgY3QgMTM4IC0xODUgMTIwIC0yMzMgNzcgLTI4MyBjdCAKKzU4IC0zMDcgNDUgLTMxOCAyMCAtMzM0IGN0IDIwIC0zMzQgMjAgLTMzNCAxNCAtMzI2IGN0IDUzIC0yOTUgNjYgLTI3NyA3OSAtMjQwIGN0IAorOTEgLTIwNyA5NiAtMTcwIDk2IC0xMjAgY3QgOTYgLTY5IDkwIC0yOCA3NyAyIGN0IDYzIDMzIDQ5IDUxIDE0IDc5IGN0IDE0IDc5IDE0IDc5IDE4IDg3IGN0IAorcCBlZgorcG9tCitncgorZ3IKK2dzCitncworcHVtCis0OTMyIDE1Njk0IHQKKzE3NyAtNTQgbSAgMTQxIC0yNSAxMjYgLTE3IDEwNSAtMTcgY3QgNzcgLTE3IDU4IC0zNSA1OCAtNjIgY3QgNTggLTY5IDU5IC03NyA2MyAtOTIgY3QgCis2MyAtOTIgNjMgLTkyIDc3IC05NCBjdCAxNTEgLTEwNSAyMDQgLTE0MiAyMDQgLTE4NSBjdCAyMDQgLTIwNiAxODkgLTIxOCAxNjQgLTIxOCBjdCAKKzkzIC0yMTggMTUgLTEzNyAxNSAtNjMgY3QgMTUgLTIzIDQyIDUgODEgNSBjdCAxMTYgNSAxNTQgLTE1IDE4MyAtNDggY3QgMTgzIC00OCAxODMgLTQ4IDE3NyAtNTQgY3QgCitwCis3NSAtMTI1IG0gIDkyIC0xNjkgMTI4IC0yMDcgMTU0IC0yMDcgY3QgMTY0IC0yMDcgMTcxIC0xOTkgMTcxIC0xODggY3QgMTcxIC0xNzIgMTYyIC0xNTUgMTQ2IC0xNDAgY3QgCisxMjggLTEyMyAxMDkgLTExNCA2NyAtMTAzIGN0IDY3IC0xMDMgNjcgLTEwMyA3NSAtMTI1IGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzUxNTIgMTU2OTQgdAorMTQzIC0zMzQgbSAgMTA3IC0zMTAgOTIgLTI5NyA3NSAtMjc0IGN0IDQwIC0yMzEgMjMgLTE4MiAyMyAtMTI0IGN0IDIzIC02MiA0MSAtMTMgODQgMzcgY3QgCisxMDQgNjEgMTE2IDcyIDE0MSA4NyBjdCAxNDEgODcgMTQxIDg3IDE0NyA3OSBjdCAxMDggNDggOTUgMzEgODIgLTYgY3QgNzAgLTM5IDY1IC03NiA2NSAtMTI2IGN0IAorNjUgLTE3OCA3MSAtMjE4IDg0IC0yNDkgY3QgOTggLTI3OSAxMTIgLTI5NyAxNDcgLTMyNiBjdCAxNDcgLTMyNiAxNDcgLTMyNiAxNDMgLTMzNCBjdCAKK3AgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzUzMTcgMTU2OTQgdAorMjI3IC01OCBtICAyMjcgLTU4IDIyNyAtNTggMjE3IC00NSBjdCAyMDMgLTI3IDE5NCAtMTkgMTg3IC0xOSBjdCAxODMgLTE5IDE3OSAtMjMgMTc5IC0yNyBjdCAKKzE3OSAtMzEgMTc5IC0zMSAxODYgLTU4IGN0IDE4NiAtNTggMTg2IC01OCAyMTQgLTE2MCBjdCAyMTYgLTE3MCAyMTggLTE4MSAyMTggLTE4OCBjdCAKKzIxOCAtMjA2IDIwNSAtMjE4IDE4NiAtMjE4IGN0IDE1NCAtMjE4IDEyMyAtMTg5IDcyIC0xMTAgY3QgNzIgLTExMCA3MiAtMTEwIDEwNSAtMjE3IGN0IAorMTA1IC0yMTcgMTA1IC0yMTcgMTA0IC0yMTggY3QgNzcgLTIxMyA2NyAtMjExIDI0IC0yMDMgY3QgMjQgLTIwMyAyNCAtMjAzIDI0IC0xOTUgY3QgCis0OSAtMTk1IDU1IC0xOTIgNTUgLTE4MiBjdCA1NSAtMTc5IDU1IC0xNzYgNTQgLTE3MyBjdCA1NCAtMTczIDU0IC0xNzMgNyAwIGN0IDcgMCA3IDAgNDQgMCBjdCAKKzY3IC03OCA3MiAtODkgOTMgLTEyMyBjdCAxMjMgLTE2OCAxNDggLTE5MyAxNjYgLTE5MyBjdCAxNzQgLTE5MyAxNzggLTE4OCAxNzggLTE3OSBjdCAKKzE3OCAtMTczIDE3NSAtMTU2IDE3MSAtMTQxIGN0IDE3MSAtMTQxIDE3MSAtMTQxIDE1MCAtNjAgY3QgMTQzIC0zNSAxNDIgLTI4IDE0MiAtMjMgY3QgCisxNDIgLTQgMTQ5IDQgMTY1IDQgY3QgMTg3IDQgMjAwIC02IDIzNCAtNTIgY3QgMjM0IC01MiAyMzQgLTUyIDIyNyAtNTggY3QgcCBlZgorcG9tCitncgorZ3MKK3B1bQorNTU2NyAxNTY5NCB0CisxOCA4NyBtICA1NCA2NCA2OSA1MSA4NyAyOCBjdCAxMjEgLTE1IDEzOCAtNjQgMTM4IC0xMjIgY3QgMTM4IC0xODUgMTIwIC0yMzMgNzcgLTI4MyBjdCAKKzU4IC0zMDcgNDUgLTMxOCAyMCAtMzM0IGN0IDIwIC0zMzQgMjAgLTMzNCAxNCAtMzI2IGN0IDUzIC0yOTUgNjYgLTI3NyA3OSAtMjQwIGN0IAorOTEgLTIwNyA5NiAtMTcwIDk2IC0xMjAgY3QgOTYgLTY5IDkwIC0yOCA3NyAyIGN0IDYzIDMzIDQ5IDUxIDE0IDc5IGN0IDE0IDc5IDE0IDc5IDE4IDg3IGN0IAorcCBlZgorcG9tCitncgorZ3IKK2dzCitncworcHVtCis4OTU0IDE1OTU5IHQKKzEyMSAtMTQxIG0gIDE1IC0xNDEgbCAgMTUgLTEwOCBsICAxMjEgLTEwOCBsICAxMjEgMCBsICAxNTMgMCBsICAxNTMgLTEwOCBsIAorMjU5IC0xMDggbCAgMjU5IC0xNDEgbCAgMTUzIC0xNDEgbCAgMTUzIC0yNTAgbCAgMTIxIC0yNTAgbCAgMTIxIC0xNDEgbCAKK3AgZWYKK3BvbQorZ3IKK2dyCitncworZ3MKK3B1bQorODg0OCAxNTAzMyB0CisxOSAtMTI3IG0gIDE5IC05NiBsICAxMzggLTk2IGwgIDEzOCAtMTI3IGwgIDE5IC0xMjcgbCAgcCBlZgorcG9tCitncgorZ3IKK2dzCitncworcHVtCis4MDgwIDEyNzA1IHQKKzQ1IC0xNDcgbSAgMTE0IC0yOTAgbCAgMTgzIC0xNDcgbCAgMjE2IC0xNDcgbCAgMTI4IC0zMjcgbCAgOTkgLTMyNyBsICAxMiAtMTQ3IGwgCis0NSAtMTQ3IGwgIHAgZWYKK3BvbQorZ3IKK2dyCiswLjk5NiBjIDEyNDAwIDk2MDEgbSAgMTIzOTQgMTE2MDIgbCAgMTE4OTUgMTEwOTkgbCAgMTE4OTcgMTAwOTkgbCAgMTI0MDAgOTYwMSBsIAorcCBlZgorMC4wMDAgYyAxMjQwMCA5NjAxIG0gIDEyMzk0IDExNjAyIGwgIDExODk1IDExMDk5IGwgIDExODk3IDEwMDk5IGwgIDEyNDAwIDk2MDEgbCAKK3BjCiswLjk5NiBjIDExMzk3IDEwNTk5IG0gIDExMzk4IDEwMDk5IGwgIDExODk4IDEwMTAwIGwgIDExODk1IDExMTAwIGwgIDExMzk1IDExMDk5IGwgCisxMTM5NyAxMDU5OSBsICBwIGVmCiswLjAwMCBjIDExMzk3IDEwNTk5IG0gIDExMzk4IDEwMDk5IGwgIDExODk4IDEwMTAwIGwgIDExODk1IDExMTAwIGwgIDExMzk1IDExMDk5IGwgCisxMTM5NyAxMDU5OSBsICBwYworMC45OTYgYyAxMTkwMCAxNjAwMCBtICAxMTYyNCAxNjAwMCAxMTQwMCAxNTc3NiAxMTQwMCAxNTUwMCBjdCAxMTQwMCAxNTIyNCAxMTYyNCAxNTAwMCAxMTkwMCAxNTAwMCBjdCAKKzEyMTc2IDE1MDAwIDEyNDAwIDE1MjI0IDEyNDAwIDE1NTAwIGN0IDEyNDAwIDE1Nzc2IDEyMTc2IDE2MDAwIDExOTAwIDE2MDAwIGN0IAorcCBlZgorMC4wMDAgYyAxMTkwMCAxNjAwMCBtICAxMTYyNCAxNjAwMCAxMTQwMCAxNTc3NiAxMTQwMCAxNTUwMCBjdCAxMTQwMCAxNTIyNCAxMTYyNCAxNTAwMCAxMTkwMCAxNTAwMCBjdCAKKzEyMTc2IDE1MDAwIDEyNDAwIDE1MjI0IDEyNDAwIDE1NTAwIGN0IDEyNDAwIDE1Nzc2IDEyMTc2IDE2MDAwIDExOTAwIDE2MDAwIGN0IAorcGMKKzEyNDAwIDE1MDAwIG0gIDEyNDAwIDE2MDAwIGwgIHBzCitncworZ3MKK3B1bQorMTQ4ODAgMTYxNDQgdAorOCAtMTk2IG0gIDExIC0xOTggMTUgLTE5OCAyMSAtMTk4IGN0IDM0IC0xOTggMzkgLTE5MSAzOSAtMTY2IGN0IDM5IC0xNjYgMzkgLTE2NiAzOSAtNDQgY3QgCiszOSAtMTUgMzMgLTggOSAtOCBjdCA5IC04IDkgLTggOSAwIGN0IDkgMCA5IDAgMTExIDAgY3QgMTExIDAgMTExIDAgMTExIC04IGN0IDg3IC04IDc5IC0xNCA3OSAtMzIgY3QgCis3OSAtMzIgNzkgLTMyIDc5IC0xNzEgY3QgMTAzIC0xOTQgMTEzIC0yMDAgMTI5IC0yMDAgY3QgMTUzIC0yMDAgMTY1IC0xODQgMTY1IC0xNTIgY3QgCisxNjUgLTE1MiAxNjUgLTE1MiAxNjUgLTQ4IGN0IDE2NSAtMTcgMTU4IC04IDEzNCAtOCBjdCAxMzQgLTggMTM0IC04IDEzNCAwIGN0IDEzNCAwIDEzNCAwIDIzNSAwIGN0IAorMjM1IDAgMjM1IDAgMjM1IC03IGN0IDIxMSAtMTAgMjA1IC0xNiAyMDUgLTQwIGN0IDIwNSAtNDAgMjA1IC00MCAyMDUgLTE1MyBjdCAyMDUgLTE5OSAxODQgLTIyNyAxNDggLTIyNyBjdCAKKzEyNiAtMjI3IDExMSAtMjE5IDc4IC0xODcgY3QgNzggLTE4NyA3OCAtMTg3IDc4IC0yMjYgY3QgNzggLTIyNiA3OCAtMjI2IDc1IC0yMjcgY3QgCis1MSAtMjE4IDM0IC0yMTMgOCAtMjA1IGN0IDggLTIwNSA4IC0yMDUgOCAtMTk2IGN0IHAgZWYKKzQ0OCAtODEgbSAgNDI0IC00MyA0MDMgLTI5IDM3MiAtMjkgY3QgMzQ1IC0yOSAzMjQgLTQzIDMxMCAtNzIgY3QgMzAxIC05MCAyOTggLTEwNyAyOTcgLTEzNyBjdCAKKzI5NyAtMTM3IDI5NyAtMTM3IDQ0NiAtMTM3IGN0IDQ0MiAtMTY5IDQzNyAtMTgzIDQyNSAtMTk5IGN0IDQxMSAtMjE3IDM4OCAtMjI3IDM2MyAtMjI3IGN0IAorMzM5IC0yMjcgMzE2IC0yMTggMjk4IC0yMDEgY3QgMjc1IC0xODEgMjYyIC0xNDYgMjYyIC0xMDYgY3QgMjYyIC0zNyAyOTcgNSAzNTMgNSBjdCAKKzM5OSA1IDQzNSAtMjQgNDU1IC03OCBjdCA0NTUgLTc4IDQ1NSAtNzggNDQ4IC04MSBjdCBwCisyOTggLTE1MyBtICAzMDMgLTE5MSAzMjAgLTIwOSAzNDkgLTIwOSBjdCAzNzkgLTIwOSAzOTAgLTE5NiAzOTcgLTE1MyBjdCAzOTcgLTE1MyAzOTcgLTE1MyAyOTggLTE1MyBjdCAKK3AgZWYKKzY4NCAtMzIgbSAgNjc2IC0yNiA2NzAgLTIzIDY2MyAtMjMgY3QgNjUyIC0yMyA2NDggLTMwIDY0OCAtNTIgY3QgNjQ4IC01MiA2NDggLTUyIDY0OCAtMTQ4IGN0IAorNjQ4IC0xNzMgNjQ2IC0xODggNjM4IC0yMDAgY3QgNjI4IC0yMTggNjA3IC0yMjcgNTc4IC0yMjcgY3QgNTMzIC0yMjcgNDk3IC0yMDMgNDk3IC0xNzEgY3QgCis0OTcgLTE2MCA1MDcgLTE1MCA1MTggLTE1MCBjdCA1MzAgLTE1MCA1NDAgLTE2MCA1NDAgLTE3MSBjdCA1NDAgLTE3MyA1MzkgLTE3NSA1MzkgLTE3OSBjdCAKKzUzOCAtMTgzIDUzNyAtMTg3IDUzNyAtMTkxIGN0IDUzNyAtMjA0IDU1MyAtMjE1IDU3MiAtMjE1IGN0IDU5NiAtMjE1IDYwOSAtMjAxIDYwOSAtMTc0IGN0IAorNjA5IC0xNzQgNjA5IC0xNzQgNjA5IC0xNDQgY3QgNTM0IC0xMTMgNTI2IC0xMDkgNTA1IC05MCBjdCA0OTUgLTgxIDQ4OCAtNjQgNDg4IC00OCBjdCAKKzQ4OCAtMTcgNTA5IDUgNTM5IDUgY3QgNTYwIDUgNTgwIC01IDYwOSAtMzEgY3QgNjEyIC01IDYyMSA1IDY0MCA1IGN0IDY1NyA1IDY2NyAtMSA2ODQgLTIwIGN0IAorNjg0IC0yMCA2ODQgLTIwIDY4NCAtMzIgY3QgcAorNjA5IC02MSBtICA2MDkgLTQ1IDYwNyAtNDEgNTk2IC0zNSBjdCA1ODUgLTI4IDU3MSAtMjQgNTYxIC0yNCBjdCA1NDQgLTI0IDUzMSAtNDAgNTMxIC02MiBjdCAKKzUzMSAtNjIgNTMxIC02MiA1MzEgLTYzIGN0IDUzMSAtOTIgNTUwIC0xMTAgNjA5IC0xMzIgY3QgNjA5IC0xMzIgNjA5IC0xMzIgNjA5IC02MSBjdCAKK3AgZWYKKzY5MyAtMTkyIG0gIDcwMCAtMTk0IDcwNSAtMTk0IDcxMCAtMTk0IGN0IDcyMiAtMTk0IDcyNyAtMTg2IDcyNyAtMTY0IGN0IDcyNyAtMTY0IDcyNyAtMTY0IDcyNyAtNDEgY3QgCis3MjcgLTE3IDcyMyAtMTMgNjkyIC03IGN0IDY5MiAtNyA2OTIgLTcgNjkyIDAgY3QgNjkyIDAgNjkyIDAgODA5IDAgY3QgODA5IDAgODA5IDAgODA5IC04IGN0IAorNzc2IC04IDc2NyAtMTUgNzY3IC00NCBjdCA3NjcgLTQ0IDc2NyAtNDQgNzY3IC0xNTUgY3QgNzY3IC0xNzEgNzg4IC0xOTYgODAxIC0xOTYgY3QgCis4MDQgLTE5NiA4MDkgLTE5MyA4MTQgLTE4OCBjdCA4MjIgLTE4MiA4MjcgLTE3OSA4MzMgLTE3OSBjdCA4NDUgLTE3OSA4NTIgLTE4NyA4NTIgLTIwMSBjdCAKKzg1MiAtMjE3IDg0MiAtMjI3IDgyNiAtMjI3IGN0IDgwNSAtMjI3IDc5MSAtMjE2IDc2NyAtMTgxIGN0IDc2NyAtMTgxIDc2NyAtMTgxIDc2NyAtMjI2IGN0IAorNzY3IC0yMjYgNzY3IC0yMjYgNzY1IC0yMjcgY3QgNzM5IC0yMTYgNzIyIC0yMTAgNjkzIC0yMDAgY3QgNjkzIC0yMDAgNjkzIC0yMDAgNjkzIC0xOTIgY3QgCitwIGVmCisxMTc2IC04MSBtICAxMTUyIC00MyAxMTMxIC0yOSAxMTAwIC0yOSBjdCAxMDczIC0yOSAxMDUyIC00MyAxMDM4IC03MiBjdCAxMDI5IC05MCAxMDI2IC0xMDcgMTAyNSAtMTM3IGN0IAorMTAyNSAtMTM3IDEwMjUgLTEzNyAxMTc0IC0xMzcgY3QgMTE3MCAtMTY5IDExNjUgLTE4MyAxMTUzIC0xOTkgY3QgMTEzOSAtMjE3IDExMTYgLTIyNyAxMDkxIC0yMjcgY3QgCisxMDY3IC0yMjcgMTA0NCAtMjE4IDEwMjYgLTIwMSBjdCAxMDAzIC0xODEgOTkwIC0xNDYgOTkwIC0xMDYgY3QgOTkwIC0zNyAxMDI1IDUgMTA4MSA1IGN0IAorMTEyNyA1IDExNjMgLTI0IDExODMgLTc4IGN0IDExODMgLTc4IDExODMgLTc4IDExNzYgLTgxIGN0IHAKKzEwMjYgLTE1MyBtICAxMDMxIC0xOTEgMTA0OCAtMjA5IDEwNzcgLTIwOSBjdCAxMTA3IC0yMDkgMTExOCAtMTk2IDExMjUgLTE1MyBjdCAKKzExMjUgLTE1MyAxMTI1IC0xNTMgMTAyNiAtMTUzIGN0IHAgZWYKKzEyMDYgLTE5NiBtICAxMjA5IC0xOTggMTIxMyAtMTk4IDEyMTkgLTE5OCBjdCAxMjMyIC0xOTggMTIzNyAtMTkxIDEyMzcgLTE2NiBjdCAKKzEyMzcgLTE2NiAxMjM3IC0xNjYgMTIzNyAtNDQgY3QgMTIzNyAtMTUgMTIzMSAtOCAxMjA3IC04IGN0IDEyMDcgLTggMTIwNyAtOCAxMjA3IDAgY3QgCisxMjA3IDAgMTIwNyAwIDEzMDkgMCBjdCAxMzA5IDAgMTMwOSAwIDEzMDkgLTggY3QgMTI4NSAtOCAxMjc3IC0xNCAxMjc3IC0zMiBjdCAxMjc3IC0zMiAxMjc3IC0zMiAxMjc3IC0xNzEgY3QgCisxMzAxIC0xOTQgMTMxMSAtMjAwIDEzMjcgLTIwMCBjdCAxMzUxIC0yMDAgMTM2MyAtMTg0IDEzNjMgLTE1MiBjdCAxMzYzIC0xNTIgMTM2MyAtMTUyIDEzNjMgLTQ4IGN0IAorMTM2MyAtMTcgMTM1NiAtOCAxMzMyIC04IGN0IDEzMzIgLTggMTMzMiAtOCAxMzMyIDAgY3QgMTMzMiAwIDEzMzIgMCAxNDMzIDAgY3QgMTQzMyAwIDE0MzMgMCAxNDMzIC03IGN0IAorMTQwOSAtMTAgMTQwMyAtMTYgMTQwMyAtNDAgY3QgMTQwMyAtNDAgMTQwMyAtNDAgMTQwMyAtMTUzIGN0IDE0MDMgLTE5OSAxMzgyIC0yMjcgMTM0NiAtMjI3IGN0IAorMTMyNCAtMjI3IDEzMDkgLTIxOSAxMjc2IC0xODcgY3QgMTI3NiAtMTg3IDEyNzYgLTE4NyAxMjc2IC0yMjYgY3QgMTI3NiAtMjI2IDEyNzYgLTIyNiAxMjczIC0yMjcgY3QgCisxMjQ5IC0yMTggMTIzMiAtMjEzIDEyMDYgLTIwNSBjdCAxMjA2IC0yMDUgMTIwNiAtMjA1IDEyMDYgLTE5NiBjdCBwIGVmCisxNjE1IDUgbSAgMTYxNSA1IDE2MTUgNSAxNjg2IC0yMSBjdCAxNjg2IC0yMSAxNjg2IC0yMSAxNjg2IC0yOCBjdCAxNjc3IC0yOCAxNjc2IC0yOCAxNjc1IC0yOCBjdCAKKzE2NTcgLTI4IDE2NTMgLTMzIDE2NTMgLTU2IGN0IDE2NTMgLTU2IDE2NTMgLTU2IDE2NTMgLTMzNiBjdCAxNjUzIC0zMzYgMTY1MyAtMzM2IDE2NTEgLTMzNyBjdCAKKzE2MjggLTMyOSAxNjExIC0zMjQgMTU4MCAtMzE1IGN0IDE1ODAgLTMxNSAxNTgwIC0zMTUgMTU4MCAtMzA4IGN0IDE1ODQgLTMwOCAxNTg2IC0zMDggMTU5MCAtMzA4IGN0IAorMTYwOCAtMzA4IDE2MTMgLTMwMyAxNjEzIC0yODMgY3QgMTYxMyAtMjgzIDE2MTMgLTI4MyAxNjEzIC0yMDYgY3QgMTU5NCAtMjIyIDE1ODEgLTIyNyAxNTYyIC0yMjcgY3QgCisxNTA2IC0yMjcgMTQ2MSAtMTcxIDE0NjEgLTEwMSBjdCAxNDYxIC0zOCAxNDk3IDUgMTU1MSA1IGN0IDE1NzggNSAxNTk2IC01IDE2MTMgLTI4IGN0IAorMTYxMyAtMjggMTYxMyAtMjggMTYxMyA0IGN0IDE2MTMgNCAxNjEzIDQgMTYxNSA1IGN0IHAKKzE2MTMgLTUwIG0gIDE2MTMgLTQ3IDE2MDkgLTQxIDE2MDQgLTM1IGN0IDE1OTYgLTI2IDE1ODQgLTIxIDE1NzAgLTIxIGN0IDE1MjkgLTIxIDE1MDMgLTYwIDE1MDMgLTEyMSBjdCAKKzE1MDMgLTE3NyAxNTI2IC0yMTMgMTU2MyAtMjEzIGN0IDE1ODkgLTIxMyAxNjEzIC0xOTAgMTYxMyAtMTY0IGN0IDE2MTMgLTE2NCAxNjEzIC0xNjQgMTYxMyAtNTAgY3QgCitwIGVmCisxOTczIC0xNTUgbSAgMTk3MyAtMTU1IDE5NzMgLTE1NSAxOTcxIC0yMjIgY3QgMTk3MSAtMjIyIDE5NzEgLTIyMiAxOTY1IC0yMjIgY3QgCisxOTY1IC0yMjIgMTk2NSAtMjIyIDE5NjQgLTIyMSBjdCAxOTYwIC0yMTggMTk1OSAtMjE3IDE5NTcgLTIxNyBjdCAxOTU1IC0yMTcgMTk1MCAtMjE4IDE5NDQgLTIyMSBjdCAKKzE5MzQgLTIyNSAxOTIzIC0yMjcgMTkxMSAtMjI3IGN0IDE4NzIgLTIyNyAxODQ1IC0yMDIgMTg0NSAtMTY2IGN0IDE4NDUgLTEzOCAxODYwIC0xMTggMTkwMSAtOTUgY3QgCisxOTAxIC05NSAxOTAxIC05NSAxOTI5IC03OCBjdCAxOTQ2IC02OSAxOTU1IC01NyAxOTU1IC00MSBjdCAxOTU1IC0yMCAxOTM5IC02IDE5MTQgLTYgY3QgCisxODk4IC02IDE4ODMgLTEyIDE4NzQgLTIzIGN0IDE4NjQgLTM1IDE4NTkgLTQ3IDE4NTMgLTc1IGN0IDE4NTMgLTc1IDE4NTMgLTc1IDE4NDUgLTc1IGN0IAorMTg0NSAtNzUgMTg0NSAtNzUgMTg0NSAyIGN0IDE4NDUgMiAxODQ1IDIgMTg1MSAyIGN0IDE4NTUgLTMgMTg1NyAtNCAxODYzIC00IGN0IAorMTg2NyAtNCAxODc0IC0zIDE4ODUgMCBjdCAxODk4IDMgMTkxMiA1IDE5MjAgNSBjdCAxOTU3IDUgMTk4OCAtMjQgMTk4OCAtNTggY3QgMTk4OCAtODMgMTk3NyAtOTkgMTk0OCAtMTE3IGN0IAorMTk0OCAtMTE3IDE5NDggLTExNyAxODk2IC0xNDggY3QgMTg4MiAtMTU2IDE4NzUgLTE2OSAxODc1IC0xODIgY3QgMTg3NSAtMjAyIDE4OTAgLTIxNiAxOTEyIC0yMTYgY3QgCisxOTQwIC0yMTYgMTk1NCAtMTk5IDE5NjUgLTE1NSBjdCAxOTY1IC0xNTUgMTk2NSAtMTU1IDE5NzMgLTE1NSBjdCBwIGVmCisyMDE5IC0xOTUgbSAgMjAyNCAtMTk1IDIwMjcgLTE5NSAyMDMxIC0xOTUgY3QgMjA0OCAtMTk1IDIwNTEgLTE5MCAyMDUxIC0xNjcgY3QgCisyMDUxIC0xNjcgMjA1MSAtMTY3IDIwNTEgNjUgY3QgMjA1MSA5MCAyMDQ2IDk2IDIwMTcgOTkgY3QgMjAxNyA5OSAyMDE3IDk5IDIwMTcgMTA3IGN0IAorMjAxNyAxMDcgMjAxNyAxMDcgMjEzNSAxMDcgY3QgMjEzNSAxMDcgMjEzNSAxMDcgMjEzNSA5OCBjdCAyMDk4IDk4IDIwOTIgOTMgMjA5MiA2MSBjdCAKKzIwOTIgNjEgMjA5MiA2MSAyMDkyIC0xNiBjdCAyMTA5IDAgMjEyMSA1IDIxNDEgNSBjdCAyMTk4IDUgMjI0MyAtNTAgMjI0MyAtMTIyIGN0IAorMjI0MyAtMTgzIDIyMDkgLTIyNyAyMTYyIC0yMjcgY3QgMjEzNSAtMjI3IDIxMTMgLTIxNSAyMDkyIC0xODkgY3QgMjA5MiAtMTg5IDIwOTIgLTE4OSAyMDkyIC0yMjYgY3QgCisyMDkyIC0yMjYgMjA5MiAtMjI2IDIwODkgLTIyNyBjdCAyMDYzIC0yMTcgMjA0NiAtMjEwIDIwMTkgLTIwMiBjdCAyMDE5IC0yMDIgMjAxOSAtMjAyIDIwMTkgLTE5NSBjdCAKK3AKKzIwOTIgLTE2NSBtICAyMDkyIC0xODAgMjExOSAtMTk3IDIxNDEgLTE5NyBjdCAyMTc3IC0xOTcgMjIwMSAtMTYwIDIyMDEgLTEwMyBjdCAKKzIyMDEgLTQ4IDIxNzcgLTExIDIxNDIgLTExIGN0IDIxMjAgLTExIDIwOTIgLTI5IDIwOTIgLTQ0IGN0IDIwOTIgLTQ0IDIwOTIgLTQ0IDIwOTIgLTE2NSBjdCAKK3AgZWYKKzI0NjMgLTgxIG0gIDI0MzkgLTQzIDI0MTggLTI5IDIzODcgLTI5IGN0IDIzNjAgLTI5IDIzMzkgLTQzIDIzMjUgLTcyIGN0IDIzMTYgLTkwIDIzMTMgLTEwNyAyMzEyIC0xMzcgY3QgCisyMzEyIC0xMzcgMjMxMiAtMTM3IDI0NjEgLTEzNyBjdCAyNDU3IC0xNjkgMjQ1MiAtMTgzIDI0NDAgLTE5OSBjdCAyNDI2IC0yMTcgMjQwMyAtMjI3IDIzNzggLTIyNyBjdCAKKzIzNTQgLTIyNyAyMzMxIC0yMTggMjMxMyAtMjAxIGN0IDIyOTAgLTE4MSAyMjc3IC0xNDYgMjI3NyAtMTA2IGN0IDIyNzcgLTM3IDIzMTIgNSAyMzY4IDUgY3QgCisyNDE0IDUgMjQ1MCAtMjQgMjQ3MCAtNzggY3QgMjQ3MCAtNzggMjQ3MCAtNzggMjQ2MyAtODEgY3QgcAorMjMxMyAtMTUzIG0gIDIzMTggLTE5MSAyMzM1IC0yMDkgMjM2NCAtMjA5IGN0IDIzOTQgLTIwOSAyNDA1IC0xOTYgMjQxMiAtMTUzIGN0IAorMjQxMiAtMTUzIDI0MTIgLTE1MyAyMzEzIC0xNTMgY3QgcCBlZgorMjY4MyAtODEgbSAgMjY1OSAtNDMgMjYzOCAtMjkgMjYwNyAtMjkgY3QgMjU4MCAtMjkgMjU1OSAtNDMgMjU0NSAtNzIgY3QgMjUzNiAtOTAgMjUzMyAtMTA3IDI1MzIgLTEzNyBjdCAKKzI1MzIgLTEzNyAyNTMyIC0xMzcgMjY4MSAtMTM3IGN0IDI2NzcgLTE2OSAyNjcyIC0xODMgMjY2MCAtMTk5IGN0IDI2NDYgLTIxNyAyNjIzIC0yMjcgMjU5OCAtMjI3IGN0IAorMjU3NCAtMjI3IDI1NTEgLTIxOCAyNTMzIC0yMDEgY3QgMjUxMCAtMTgxIDI0OTcgLTE0NiAyNDk3IC0xMDYgY3QgMjQ5NyAtMzcgMjUzMiA1IDI1ODggNSBjdCAKKzI2MzQgNSAyNjcwIC0yNCAyNjkwIC03OCBjdCAyNjkwIC03OCAyNjkwIC03OCAyNjgzIC04MSBjdCBwCisyNTMzIC0xNTMgbSAgMjUzOCAtMTkxIDI1NTUgLTIwOSAyNTg0IC0yMDkgY3QgMjYxNCAtMjA5IDI2MjUgLTE5NiAyNjMyIC0xNTMgY3QgCisyNjMyIC0xNTMgMjYzMiAtMTUzIDI1MzMgLTE1MyBjdCBwIGVmCisyODk4IC03NyBtICAyODc0IC00MiAyODU3IC0zMSAyODI5IC0zMSBjdCAyNzg1IC0zMSAyNzU0IC03MCAyNzU0IC0xMjcgY3QgMjc1NCAtMTc4IDI3ODEgLTIxMyAyODIwIC0yMTMgY3QgCisyODM4IC0yMTMgMjg0NCAtMjA3IDI4NDkgLTE4OSBjdCAyODQ5IC0xODkgMjg0OSAtMTg5IDI4NTIgLTE3OCBjdCAyODU2IC0xNjQgMjg2NCAtMTU1IDI4NzQgLTE1NSBjdCAKKzI4ODcgLTE1NSAyODk4IC0xNjQgMjg5OCAtMTc2IGN0IDI4OTggLTIwNCAyODY0IC0yMjcgMjgyMyAtMjI3IGN0IDI3OTkgLTIyNyAyNzc1IC0yMTcgMjc1NSAtMTk5IGN0IAorMjczMSAtMTc4IDI3MTcgLTE0NCAyNzE3IC0xMDUgY3QgMjcxNyAtNDEgMjc1NSA1IDI4MDkgNSBjdCAyODMxIDUgMjg1MCAtMyAyODY4IC0xOCBjdCAKKzI4ODEgLTMwIDI4OTAgLTQzIDI5MDQgLTcyIGN0IDI5MDQgLTcyIDI5MDQgLTcyIDI4OTggLTc3IGN0IHAgZWYKKzMwMDEgLTE2OSBtICAzMDIxIC0xOTIgMzAzNiAtMjAwIDMwNTUgLTIwMCBjdCAzMDc5IC0yMDAgMzA5MSAtMTgyIDMwOTEgLTE0OCBjdCAKKzMwOTEgLTE0OCAzMDkxIC0xNDggMzA5MSAtNTAgY3QgMzA5MSAtMTYgMzA4NiAtMTAgMzA1OCAtNyBjdCAzMDU4IC03IDMwNTggLTcgMzA1OCAwIGN0IAorMzA1OCAwIDMwNTggMCAzMTYxIDAgY3QgMzE2MSAwIDMxNjEgMCAzMTYxIC03IGN0IDMxMzUgLTEyIDMxMzIgLTE2IDMxMzIgLTUwIGN0IAorMzEzMiAtNTAgMzEzMiAtNTAgMzEzMiAtMTQ4IGN0IDMxMzIgLTIwMCAzMTExIC0yMjcgMzA3MiAtMjI3IGN0IDMwNDQgLTIyNyAzMDIzIC0yMTUgMzAwMSAtMTg1IGN0IAorMzAwMSAtMTg1IDMwMDEgLTE4NSAzMDAxIC0zMzYgY3QgMzAwMSAtMzM2IDMwMDEgLTMzNiAyOTk5IC0zMzcgY3QgMjk4MiAtMzMxIDI5NzAgLTMyNyAyOTQzIC0zMTkgY3QgCisyOTQzIC0zMTkgMjk0MyAtMzE5IDI5MzAgLTMxNSBjdCAyOTMwIC0zMTUgMjkzMCAtMzE1IDI5MzAgLTMwOCBjdCAyOTMyIC0zMDggMjkzMyAtMzA4IDI5MzYgLTMwOCBjdCAKKzI5NTYgLTMwOCAyOTYwIC0zMDQgMjk2MCAtMjgzIGN0IDI5NjAgLTI4MyAyOTYwIC0yODMgMjk2MCAtNTAgY3QgMjk2MCAtMTUgMjk1NyAtMTEgMjkyOSAtNyBjdCAKKzI5MjkgLTcgMjkyOSAtNyAyOTI5IDAgY3QgMjkyOSAwIDI5MjkgMCAzMDM0IDAgY3QgMzAzNCAwIDMwMzQgMCAzMDM0IC03IGN0IDMwMDYgLTEwIDMwMDEgLTE2IDMwMDEgLTUwIGN0IAorMzAwMSAtNTAgMzAwMSAtNTAgMzAwMSAtMTY5IGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzE1NTE5IDE2NzQ1IHQKKzIxNCAtMzIgbSAgMjA2IC0yNiAyMDAgLTIzIDE5MyAtMjMgY3QgMTgyIC0yMyAxNzggLTMwIDE3OCAtNTIgY3QgMTc4IC01MiAxNzggLTUyIDE3OCAtMTQ4IGN0IAorMTc4IC0xNzMgMTc2IC0xODggMTY4IC0yMDAgY3QgMTU4IC0yMTggMTM3IC0yMjcgMTA4IC0yMjcgY3QgNjMgLTIyNyAyNyAtMjAzIDI3IC0xNzEgY3QgCisyNyAtMTYwIDM3IC0xNTAgNDggLTE1MCBjdCA2MCAtMTUwIDcwIC0xNjAgNzAgLTE3MSBjdCA3MCAtMTczIDY5IC0xNzUgNjkgLTE3OSBjdCAKKzY4IC0xODMgNjcgLTE4NyA2NyAtMTkxIGN0IDY3IC0yMDQgODMgLTIxNSAxMDIgLTIxNSBjdCAxMjYgLTIxNSAxMzkgLTIwMSAxMzkgLTE3NCBjdCAKKzEzOSAtMTc0IDEzOSAtMTc0IDEzOSAtMTQ0IGN0IDY0IC0xMTMgNTYgLTEwOSAzNSAtOTAgY3QgMjUgLTgxIDE4IC02NCAxOCAtNDggY3QgCisxOCAtMTcgMzkgNSA2OSA1IGN0IDkwIDUgMTEwIC01IDEzOSAtMzEgY3QgMTQyIC01IDE1MSA1IDE3MCA1IGN0IDE4NyA1IDE5NyAtMSAyMTQgLTIwIGN0IAorMjE0IC0yMCAyMTQgLTIwIDIxNCAtMzIgY3QgcAorMTM5IC02MSBtICAxMzkgLTQ1IDEzNyAtNDEgMTI2IC0zNSBjdCAxMTUgLTI4IDEwMSAtMjQgOTEgLTI0IGN0IDc0IC0yNCA2MSAtNDAgNjEgLTYyIGN0IAorNjEgLTYyIDYxIC02MiA2MSAtNjMgY3QgNjEgLTkyIDgwIC0xMTAgMTM5IC0xMzIgY3QgMTM5IC0xMzIgMTM5IC0xMzIgMTM5IC02MSBjdCAKK3AgZWYKKzIyOCAtMTk2IG0gIDIzMSAtMTk4IDIzNSAtMTk4IDI0MSAtMTk4IGN0IDI1NCAtMTk4IDI1OSAtMTkxIDI1OSAtMTY2IGN0IDI1OSAtMTY2IDI1OSAtMTY2IDI1OSAtNDQgY3QgCisyNTkgLTE1IDI1MyAtOCAyMjkgLTggY3QgMjI5IC04IDIyOSAtOCAyMjkgMCBjdCAyMjkgMCAyMjkgMCAzMzEgMCBjdCAzMzEgMCAzMzEgMCAzMzEgLTggY3QgCiszMDcgLTggMjk5IC0xNCAyOTkgLTMyIGN0IDI5OSAtMzIgMjk5IC0zMiAyOTkgLTE3MSBjdCAzMjMgLTE5NCAzMzMgLTIwMCAzNDkgLTIwMCBjdCAKKzM3MyAtMjAwIDM4NSAtMTg0IDM4NSAtMTUyIGN0IDM4NSAtMTUyIDM4NSAtMTUyIDM4NSAtNDggY3QgMzg1IC0xNyAzNzggLTggMzU0IC04IGN0IAorMzU0IC04IDM1NCAtOCAzNTQgMCBjdCAzNTQgMCAzNTQgMCA0NTUgMCBjdCA0NTUgMCA0NTUgMCA0NTUgLTcgY3QgNDMxIC0xMCA0MjUgLTE2IDQyNSAtNDAgY3QgCis0MjUgLTQwIDQyNSAtNDAgNDI1IC0xNTMgY3QgNDI1IC0xOTkgNDA0IC0yMjcgMzY4IC0yMjcgY3QgMzQ2IC0yMjcgMzMxIC0yMTkgMjk4IC0xODcgY3QgCisyOTggLTE4NyAyOTggLTE4NyAyOTggLTIyNiBjdCAyOTggLTIyNiAyOTggLTIyNiAyOTUgLTIyNyBjdCAyNzEgLTIxOCAyNTQgLTIxMyAyMjggLTIwNSBjdCAKKzIyOCAtMjA1IDIyOCAtMjA1IDIyOCAtMTk2IGN0IHAgZWYKKzYzNyA1IG0gIDYzNyA1IDYzNyA1IDcwOCAtMjEgY3QgNzA4IC0yMSA3MDggLTIxIDcwOCAtMjggY3QgNjk5IC0yOCA2OTggLTI4IDY5NyAtMjggY3QgCis2NzkgLTI4IDY3NSAtMzMgNjc1IC01NiBjdCA2NzUgLTU2IDY3NSAtNTYgNjc1IC0zMzYgY3QgNjc1IC0zMzYgNjc1IC0zMzYgNjczIC0zMzcgY3QgCis2NTAgLTMyOSA2MzMgLTMyNCA2MDIgLTMxNSBjdCA2MDIgLTMxNSA2MDIgLTMxNSA2MDIgLTMwOCBjdCA2MDYgLTMwOCA2MDggLTMwOCA2MTIgLTMwOCBjdCAKKzYzMCAtMzA4IDYzNSAtMzAzIDYzNSAtMjgzIGN0IDYzNSAtMjgzIDYzNSAtMjgzIDYzNSAtMjA2IGN0IDYxNiAtMjIyIDYwMyAtMjI3IDU4NCAtMjI3IGN0IAorNTI4IC0yMjcgNDgzIC0xNzEgNDgzIC0xMDEgY3QgNDgzIC0zOCA1MTkgNSA1NzMgNSBjdCA2MDAgNSA2MTggLTUgNjM1IC0yOCBjdCA2MzUgLTI4IDYzNSAtMjggNjM1IDQgY3QgCis2MzUgNCA2MzUgNCA2MzcgNSBjdCBwCis2MzUgLTUwIG0gIDYzNSAtNDcgNjMxIC00MSA2MjYgLTM1IGN0IDYxOCAtMjYgNjA2IC0yMSA1OTIgLTIxIGN0IDU1MSAtMjEgNTI1IC02MCA1MjUgLTEyMSBjdCAKKzUyNSAtMTc3IDU0OCAtMjEzIDU4NSAtMjEzIGN0IDYxMSAtMjEzIDYzNSAtMTkwIDYzNSAtMTY0IGN0IDYzNSAtMTY0IDYzNSAtMTY0IDYzNSAtNTAgY3QgCitwIGVmCis4NTAgLTE5NiBtICA4NTMgLTE5OCA4NTcgLTE5OCA4NjMgLTE5OCBjdCA4NzYgLTE5OCA4ODEgLTE5MSA4ODEgLTE2NiBjdCA4ODEgLTE2NiA4ODEgLTE2NiA4ODEgLTQ0IGN0IAorODgxIC0xNSA4NzUgLTggODUxIC04IGN0IDg1MSAtOCA4NTEgLTggODUxIDAgY3QgODUxIDAgODUxIDAgOTUzIDAgY3QgOTUzIDAgOTUzIDAgOTUzIC04IGN0IAorOTI5IC04IDkyMSAtMTQgOTIxIC0zMiBjdCA5MjEgLTMyIDkyMSAtMzIgOTIxIC0xNzEgY3QgOTQ1IC0xOTQgOTU1IC0yMDAgOTcxIC0yMDAgY3QgCis5OTUgLTIwMCAxMDA3IC0xODQgMTAwNyAtMTUyIGN0IDEwMDcgLTE1MiAxMDA3IC0xNTIgMTAwNyAtNDggY3QgMTAwNyAtMTcgMTAwMCAtOCA5NzYgLTggY3QgCis5NzYgLTggOTc2IC04IDk3NiAwIGN0IDk3NiAwIDk3NiAwIDEwNzcgMCBjdCAxMDc3IDAgMTA3NyAwIDEwNzcgLTcgY3QgMTA1MyAtMTAgMTA0NyAtMTYgMTA0NyAtNDAgY3QgCisxMDQ3IC00MCAxMDQ3IC00MCAxMDQ3IC0xNTMgY3QgMTA0NyAtMTk5IDEwMjYgLTIyNyA5OTAgLTIyNyBjdCA5NjggLTIyNyA5NTMgLTIxOSA5MjAgLTE4NyBjdCAKKzkyMCAtMTg3IDkyMCAtMTg3IDkyMCAtMjI2IGN0IDkyMCAtMjI2IDkyMCAtMjI2IDkxNyAtMjI3IGN0IDg5MyAtMjE4IDg3NiAtMjEzIDg1MCAtMjA1IGN0IAorODUwIC0yMDUgODUwIC0yMDUgODUwIC0xOTYgY3QgcCBlZgorMTIxMyAtMjI3IG0gIDExNTAgLTIyNyAxMTA2IC0xODAgMTEwNiAtMTEyIGN0IDExMDYgLTQ1IDExNTEgNSAxMjEyIDUgY3QgMTI3MyA1IDEzMjAgLTQ3IDEzMjAgLTExNSBjdCAKKzEzMjAgLTE4MCAxMjc1IC0yMjcgMTIxMyAtMjI3IGN0IHAKKzEyMDcgLTIxMyBtICAxMjQ3IC0yMTMgMTI3NiAtMTY2IDEyNzYgLTk4IGN0IDEyNzYgLTQyIDEyNTQgLTkgMTIxOCAtOSBjdCAxMTk5IC05IDExODEgLTIxIDExNzEgLTQwIGN0IAorMTE1NyAtNjYgMTE1MCAtMTAxIDExNTAgLTEzNiBjdCAxMTUwIC0xODMgMTE3MiAtMjEzIDEyMDcgLTIxMyBjdCBwIGVmCisxNDI3IC0yMjcgbSAgMTQyNyAtMjI3IDE0MjcgLTIyNyAxMzUyIC0yMDAgY3QgMTM1MiAtMjAwIDEzNTIgLTIwMCAxMzUyIC0xOTIgY3QgCisxMzUyIC0xOTIgMTM1MiAtMTkyIDEzNTYgLTE5MyBjdCAxMzYxIC0xOTQgMTM2OCAtMTk0IDEzNzIgLTE5NCBjdCAxMzg0IC0xOTQgMTM4OCAtMTg2IDEzODggLTE2NCBjdCAKKzEzODggLTE2NCAxMzg4IC0xNjQgMTM4OCAtNDkgY3QgMTM4OCAtMTQgMTM4MyAtOCAxMzUwIC04IGN0IDEzNTAgLTggMTM1MCAtOCAxMzUwIDAgY3QgCisxMzUwIDAgMTM1MCAwIDE0NjQgMCBjdCAxNDY0IDAgMTQ2NCAwIDE0NjQgLTggY3QgMTQzMyAtOCAxNDI5IC0xNSAxNDI5IC01MCBjdCAxNDI5IC01MCAxNDI5IC01MCAxNDI5IC0yMjUgY3QgCisxNDI5IC0yMjUgMTQyOSAtMjI1IDE0MjcgLTIyNyBjdCBwCisxNDA0IC0zMzcgbSAgMTM5MSAtMzM3IDEzODAgLTMyNiAxMzgwIC0zMTIgY3QgMTM4MCAtMjk4IDEzOTAgLTI4NyAxNDA0IC0yODcgY3QgCisxNDE4IC0yODcgMTQyOSAtMjk4IDE0MjkgLTMxMiBjdCAxNDI5IC0zMjYgMTQxOCAtMzM3IDE0MDQgLTMzNyBjdCBwIGVmCisxNjM1IC0xNTUgbSAgMTYzNSAtMTU1IDE2MzUgLTE1NSAxNjMzIC0yMjIgY3QgMTYzMyAtMjIyIDE2MzMgLTIyMiAxNjI3IC0yMjIgY3QgCisxNjI3IC0yMjIgMTYyNyAtMjIyIDE2MjYgLTIyMSBjdCAxNjIyIC0yMTggMTYyMSAtMjE3IDE2MTkgLTIxNyBjdCAxNjE3IC0yMTcgMTYxMiAtMjE4IDE2MDYgLTIyMSBjdCAKKzE1OTYgLTIyNSAxNTg1IC0yMjcgMTU3MyAtMjI3IGN0IDE1MzQgLTIyNyAxNTA3IC0yMDIgMTUwNyAtMTY2IGN0IDE1MDcgLTEzOCAxNTIyIC0xMTggMTU2MyAtOTUgY3QgCisxNTYzIC05NSAxNTYzIC05NSAxNTkxIC03OCBjdCAxNjA4IC02OSAxNjE3IC01NyAxNjE3IC00MSBjdCAxNjE3IC0yMCAxNjAxIC02IDE1NzYgLTYgY3QgCisxNTYwIC02IDE1NDUgLTEyIDE1MzYgLTIzIGN0IDE1MjYgLTM1IDE1MjEgLTQ3IDE1MTUgLTc1IGN0IDE1MTUgLTc1IDE1MTUgLTc1IDE1MDcgLTc1IGN0IAorMTUwNyAtNzUgMTUwNyAtNzUgMTUwNyAyIGN0IDE1MDcgMiAxNTA3IDIgMTUxMyAyIGN0IDE1MTcgLTMgMTUxOSAtNCAxNTI1IC00IGN0IAorMTUyOSAtNCAxNTM2IC0zIDE1NDcgMCBjdCAxNTYwIDMgMTU3NCA1IDE1ODIgNSBjdCAxNjE5IDUgMTY1MCAtMjQgMTY1MCAtNTggY3QgMTY1MCAtODMgMTYzOSAtOTkgMTYxMCAtMTE3IGN0IAorMTYxMCAtMTE3IDE2MTAgLTExNyAxNTU4IC0xNDggY3QgMTU0NCAtMTU2IDE1MzcgLTE2OSAxNTM3IC0xODIgY3QgMTUzNyAtMjAyIDE1NTIgLTIxNiAxNTc0IC0yMTYgY3QgCisxNjAyIC0yMTYgMTYxNiAtMTk5IDE2MjcgLTE1NSBjdCAxNjI3IC0xNTUgMTYyNyAtMTU1IDE2MzUgLTE1NSBjdCBwIGVmCisxODc0IC04MSBtICAxODUwIC00MyAxODI5IC0yOSAxNzk4IC0yOSBjdCAxNzcxIC0yOSAxNzUwIC00MyAxNzM2IC03MiBjdCAxNzI3IC05MCAxNzI0IC0xMDcgMTcyMyAtMTM3IGN0IAorMTcyMyAtMTM3IDE3MjMgLTEzNyAxODcyIC0xMzcgY3QgMTg2OCAtMTY5IDE4NjMgLTE4MyAxODUxIC0xOTkgY3QgMTgzNyAtMjE3IDE4MTQgLTIyNyAxNzg5IC0yMjcgY3QgCisxNzY1IC0yMjcgMTc0MiAtMjE4IDE3MjQgLTIwMSBjdCAxNzAxIC0xODEgMTY4OCAtMTQ2IDE2ODggLTEwNiBjdCAxNjg4IC0zNyAxNzIzIDUgMTc3OSA1IGN0IAorMTgyNSA1IDE4NjEgLTI0IDE4ODEgLTc4IGN0IDE4ODEgLTc4IDE4ODEgLTc4IDE4NzQgLTgxIGN0IHAKKzE3MjQgLTE1MyBtICAxNzI5IC0xOTEgMTc0NiAtMjA5IDE3NzUgLTIwOSBjdCAxODA1IC0yMDkgMTgxNiAtMTk2IDE4MjMgLTE1MyBjdCAKKzE4MjMgLTE1MyAxODIzIC0xNTMgMTcyNCAtMTUzIGN0IHAgZWYKK3BvbQorZ3IKK2dyCitncworZ3MKK3B1bQorNTQzNSAxMDM1MCB0CisxNTAgLTIyMiBtICAxNTAgLTIyMiAxNTAgLTIyMiA5MCAtMjIyIGN0IDkwIC0yMjIgOTAgLTIyMiA5MCAtMjc5IGN0IDkwIC0zMDggOTkgLTMyMyAxMTggLTMyMyBjdCAKKzEyOCAtMzIzIDEzNSAtMzE4IDE0MyAtMzA0IGN0IDE1MSAtMjkxIDE1NyAtMjg2IDE2NSAtMjg2IGN0IDE3NiAtMjg2IDE4NSAtMjk1IDE4NSAtMzA2IGN0IAorMTg1IC0zMjQgMTY0IC0zMzcgMTM1IC0zMzcgY3QgMTA1IC0zMzcgNzkgLTMyNCA2NyAtMzAxIGN0IDU0IC0yNzkgNTAgLTI2MSA1MCAtMjIyIGN0IAorNTAgLTIyMiA1MCAtMjIyIDEwIC0yMjIgY3QgMTAgLTIyMiAxMCAtMjIyIDEwIC0yMDYgY3QgMTAgLTIwNiAxMCAtMjA2IDUwIC0yMDYgY3QgCis1MCAtMjA2IDUwIC0yMDYgNTAgLTUxIGN0IDUwIC0xNCA0NSAtOCAxMCAtOCBjdCAxMCAtOCAxMCAtOCAxMCAwIGN0IDEwIDAgMTAgMCAxMzYgMCBjdCAKKzEzNiAwIDEzNiAwIDEzNiAtOCBjdCA5NiAtOCA5MSAtMTMgOTEgLTUxIGN0IDkxIC01MSA5MSAtNTEgOTEgLTIwNiBjdCA5MSAtMjA2IDkxIC0yMDYgMTUwIC0yMDYgY3QgCisxNTAgLTIwNiAxNTAgLTIwNiAxNTAgLTIyMiBjdCBwIGVmCiszNzUgLTMyIG0gIDM2NyAtMjYgMzYxIC0yMyAzNTQgLTIzIGN0IDM0MyAtMjMgMzM5IC0zMCAzMzkgLTUyIGN0IDMzOSAtNTIgMzM5IC01MiAzMzkgLTE0OCBjdCAKKzMzOSAtMTczIDMzNyAtMTg4IDMyOSAtMjAwIGN0IDMxOSAtMjE4IDI5OCAtMjI3IDI2OSAtMjI3IGN0IDIyNCAtMjI3IDE4OCAtMjAzIDE4OCAtMTcxIGN0IAorMTg4IC0xNjAgMTk4IC0xNTAgMjA5IC0xNTAgY3QgMjIxIC0xNTAgMjMxIC0xNjAgMjMxIC0xNzEgY3QgMjMxIC0xNzMgMjMwIC0xNzUgMjMwIC0xNzkgY3QgCisyMjkgLTE4MyAyMjggLTE4NyAyMjggLTE5MSBjdCAyMjggLTIwNCAyNDQgLTIxNSAyNjMgLTIxNSBjdCAyODcgLTIxNSAzMDAgLTIwMSAzMDAgLTE3NCBjdCAKKzMwMCAtMTc0IDMwMCAtMTc0IDMwMCAtMTQ0IGN0IDIyNSAtMTEzIDIxNyAtMTA5IDE5NiAtOTAgY3QgMTg2IC04MSAxNzkgLTY0IDE3OSAtNDggY3QgCisxNzkgLTE3IDIwMCA1IDIzMCA1IGN0IDI1MSA1IDI3MSAtNSAzMDAgLTMxIGN0IDMwMyAtNSAzMTIgNSAzMzEgNSBjdCAzNDggNSAzNTggLTEgMzc1IC0yMCBjdCAKKzM3NSAtMjAgMzc1IC0yMCAzNzUgLTMyIGN0IHAKKzMwMCAtNjEgbSAgMzAwIC00NSAyOTggLTQxIDI4NyAtMzUgY3QgMjc2IC0yOCAyNjIgLTI0IDI1MiAtMjQgY3QgMjM1IC0yNCAyMjIgLTQwIDIyMiAtNjIgY3QgCisyMjIgLTYyIDIyMiAtNjIgMjIyIC02MyBjdCAyMjIgLTkyIDI0MSAtMTEwIDMwMCAtMTMyIGN0IDMwMCAtMTMyIDMwMCAtMTMyIDMwMCAtNjEgY3QgCitwIGVmCiszODQgLTE5MiBtICAzOTEgLTE5NCAzOTYgLTE5NCA0MDEgLTE5NCBjdCA0MTMgLTE5NCA0MTggLTE4NiA0MTggLTE2NCBjdCA0MTggLTE2NCA0MTggLTE2NCA0MTggLTQxIGN0IAorNDE4IC0xNyA0MTQgLTEzIDM4MyAtNyBjdCAzODMgLTcgMzgzIC03IDM4MyAwIGN0IDM4MyAwIDM4MyAwIDUwMCAwIGN0IDUwMCAwIDUwMCAwIDUwMCAtOCBjdCAKKzQ2NyAtOCA0NTggLTE1IDQ1OCAtNDQgY3QgNDU4IC00NCA0NTggLTQ0IDQ1OCAtMTU1IGN0IDQ1OCAtMTcxIDQ3OSAtMTk2IDQ5MiAtMTk2IGN0IAorNDk1IC0xOTYgNTAwIC0xOTMgNTA1IC0xODggY3QgNTEzIC0xODIgNTE4IC0xNzkgNTI0IC0xNzkgY3QgNTM2IC0xNzkgNTQzIC0xODcgNTQzIC0yMDEgY3QgCis1NDMgLTIxNyA1MzMgLTIyNyA1MTcgLTIyNyBjdCA0OTYgLTIyNyA0ODIgLTIxNiA0NTggLTE4MSBjdCA0NTggLTE4MSA0NTggLTE4MSA0NTggLTIyNiBjdCAKKzQ1OCAtMjI2IDQ1OCAtMjI2IDQ1NiAtMjI3IGN0IDQzMCAtMjE2IDQxMyAtMjEwIDM4NCAtMjAwIGN0IDM4NCAtMjAwIDM4NCAtMjAwIDM4NCAtMTkyIGN0IAorcCBlZgorODY3IC04MSBtICA4NDMgLTQzIDgyMiAtMjkgNzkxIC0yOSBjdCA3NjQgLTI5IDc0MyAtNDMgNzI5IC03MiBjdCA3MjAgLTkwIDcxNyAtMTA3IDcxNiAtMTM3IGN0IAorNzE2IC0xMzcgNzE2IC0xMzcgODY1IC0xMzcgY3QgODYxIC0xNjkgODU2IC0xODMgODQ0IC0xOTkgY3QgODMwIC0yMTcgODA3IC0yMjcgNzgyIC0yMjcgY3QgCis3NTggLTIyNyA3MzUgLTIxOCA3MTcgLTIwMSBjdCA2OTQgLTE4MSA2ODEgLTE0NiA2ODEgLTEwNiBjdCA2ODEgLTM3IDcxNiA1IDc3MiA1IGN0IAorODE4IDUgODU0IC0yNCA4NzQgLTc4IGN0IDg3NCAtNzggODc0IC03OCA4NjcgLTgxIGN0IHAKKzcxNyAtMTUzIG0gIDcyMiAtMTkxIDczOSAtMjA5IDc2OCAtMjA5IGN0IDc5OCAtMjA5IDgwOSAtMTk2IDgxNiAtMTUzIGN0IDgxNiAtMTUzIDgxNiAtMTUzIDcxNyAtMTUzIGN0IAorcCBlZgorODk3IC0xOTYgbSAgOTAwIC0xOTggOTA0IC0xOTggOTEwIC0xOTggY3QgOTIzIC0xOTggOTI4IC0xOTEgOTI4IC0xNjYgY3QgOTI4IC0xNjYgOTI4IC0xNjYgOTI4IC00NCBjdCAKKzkyOCAtMTUgOTIyIC04IDg5OCAtOCBjdCA4OTggLTggODk4IC04IDg5OCAwIGN0IDg5OCAwIDg5OCAwIDEwMDAgMCBjdCAxMDAwIDAgMTAwMCAwIDEwMDAgLTggY3QgCis5NzYgLTggOTY4IC0xNCA5NjggLTMyIGN0IDk2OCAtMzIgOTY4IC0zMiA5NjggLTE3MSBjdCA5OTIgLTE5NCAxMDAyIC0yMDAgMTAxOCAtMjAwIGN0IAorMTA0MiAtMjAwIDEwNTQgLTE4NCAxMDU0IC0xNTIgY3QgMTA1NCAtMTUyIDEwNTQgLTE1MiAxMDU0IC00OCBjdCAxMDU0IC0xNyAxMDQ3IC04IDEwMjMgLTggY3QgCisxMDIzIC04IDEwMjMgLTggMTAyMyAwIGN0IDEwMjMgMCAxMDIzIDAgMTEyNCAwIGN0IDExMjQgMCAxMTI0IDAgMTEyNCAtNyBjdCAxMTAwIC0xMCAxMDk0IC0xNiAxMDk0IC00MCBjdCAKKzEwOTQgLTQwIDEwOTQgLTQwIDEwOTQgLTE1MyBjdCAxMDk0IC0xOTkgMTA3MyAtMjI3IDEwMzcgLTIyNyBjdCAxMDE1IC0yMjcgMTAwMCAtMjE5IDk2NyAtMTg3IGN0IAorOTY3IC0xODcgOTY3IC0xODcgOTY3IC0yMjYgY3QgOTY3IC0yMjYgOTY3IC0yMjYgOTY0IC0yMjcgY3QgOTQwIC0yMTggOTIzIC0yMTMgODk3IC0yMDUgY3QgCis4OTcgLTIwNSA4OTcgLTIwNSA4OTcgLTE5NiBjdCBwIGVmCisxMzA2IDUgbSAgMTMwNiA1IDEzMDYgNSAxMzc3IC0yMSBjdCAxMzc3IC0yMSAxMzc3IC0yMSAxMzc3IC0yOCBjdCAxMzY4IC0yOCAxMzY3IC0yOCAxMzY2IC0yOCBjdCAKKzEzNDggLTI4IDEzNDQgLTMzIDEzNDQgLTU2IGN0IDEzNDQgLTU2IDEzNDQgLTU2IDEzNDQgLTMzNiBjdCAxMzQ0IC0zMzYgMTM0NCAtMzM2IDEzNDIgLTMzNyBjdCAKKzEzMTkgLTMyOSAxMzAyIC0zMjQgMTI3MSAtMzE1IGN0IDEyNzEgLTMxNSAxMjcxIC0zMTUgMTI3MSAtMzA4IGN0IDEyNzUgLTMwOCAxMjc3IC0zMDggMTI4MSAtMzA4IGN0IAorMTI5OSAtMzA4IDEzMDQgLTMwMyAxMzA0IC0yODMgY3QgMTMwNCAtMjgzIDEzMDQgLTI4MyAxMzA0IC0yMDYgY3QgMTI4NSAtMjIyIDEyNzIgLTIyNyAxMjUzIC0yMjcgY3QgCisxMTk3IC0yMjcgMTE1MiAtMTcxIDExNTIgLTEwMSBjdCAxMTUyIC0zOCAxMTg4IDUgMTI0MiA1IGN0IDEyNjkgNSAxMjg3IC01IDEzMDQgLTI4IGN0IAorMTMwNCAtMjggMTMwNCAtMjggMTMwNCA0IGN0IDEzMDQgNCAxMzA0IDQgMTMwNiA1IGN0IHAKKzEzMDQgLTUwIG0gIDEzMDQgLTQ3IDEzMDAgLTQxIDEyOTUgLTM1IGN0IDEyODcgLTI2IDEyNzUgLTIxIDEyNjEgLTIxIGN0IDEyMjAgLTIxIDExOTQgLTYwIDExOTQgLTEyMSBjdCAKKzExOTQgLTE3NyAxMjE3IC0yMTMgMTI1NCAtMjEzIGN0IDEyODAgLTIxMyAxMzA0IC0xOTAgMTMwNCAtMTY0IGN0IDEzMDQgLTE2NCAxMzA0IC0xNjQgMTMwNCAtNTAgY3QgCitwIGVmCisxNjY0IC0xNTUgbSAgMTY2NCAtMTU1IDE2NjQgLTE1NSAxNjYyIC0yMjIgY3QgMTY2MiAtMjIyIDE2NjIgLTIyMiAxNjU2IC0yMjIgY3QgCisxNjU2IC0yMjIgMTY1NiAtMjIyIDE2NTUgLTIyMSBjdCAxNjUxIC0yMTggMTY1MCAtMjE3IDE2NDggLTIxNyBjdCAxNjQ2IC0yMTcgMTY0MSAtMjE4IDE2MzUgLTIyMSBjdCAKKzE2MjUgLTIyNSAxNjE0IC0yMjcgMTYwMiAtMjI3IGN0IDE1NjMgLTIyNyAxNTM2IC0yMDIgMTUzNiAtMTY2IGN0IDE1MzYgLTEzOCAxNTUxIC0xMTggMTU5MiAtOTUgY3QgCisxNTkyIC05NSAxNTkyIC05NSAxNjIwIC03OCBjdCAxNjM3IC02OSAxNjQ2IC01NyAxNjQ2IC00MSBjdCAxNjQ2IC0yMCAxNjMwIC02IDE2MDUgLTYgY3QgCisxNTg5IC02IDE1NzQgLTEyIDE1NjUgLTIzIGN0IDE1NTUgLTM1IDE1NTAgLTQ3IDE1NDQgLTc1IGN0IDE1NDQgLTc1IDE1NDQgLTc1IDE1MzYgLTc1IGN0IAorMTUzNiAtNzUgMTUzNiAtNzUgMTUzNiAyIGN0IDE1MzYgMiAxNTM2IDIgMTU0MiAyIGN0IDE1NDYgLTMgMTU0OCAtNCAxNTU0IC00IGN0IAorMTU1OCAtNCAxNTY1IC0zIDE1NzYgMCBjdCAxNTg5IDMgMTYwMyA1IDE2MTEgNSBjdCAxNjQ4IDUgMTY3OSAtMjQgMTY3OSAtNTggY3QgMTY3OSAtODMgMTY2OCAtOTkgMTYzOSAtMTE3IGN0IAorMTYzOSAtMTE3IDE2MzkgLTExNyAxNTg3IC0xNDggY3QgMTU3MyAtMTU2IDE1NjYgLTE2OSAxNTY2IC0xODIgY3QgMTU2NiAtMjAyIDE1ODEgLTIxNiAxNjAzIC0yMTYgY3QgCisxNjMxIC0yMTYgMTY0NSAtMTk5IDE2NTYgLTE1NSBjdCAxNjU2IC0xNTUgMTY1NiAtMTU1IDE2NjQgLTE1NSBjdCBwIGVmCisxNzEwIC0xOTUgbSAgMTcxNSAtMTk1IDE3MTggLTE5NSAxNzIyIC0xOTUgY3QgMTczOSAtMTk1IDE3NDIgLTE5MCAxNzQyIC0xNjcgY3QgCisxNzQyIC0xNjcgMTc0MiAtMTY3IDE3NDIgNjUgY3QgMTc0MiA5MCAxNzM3IDk2IDE3MDggOTkgY3QgMTcwOCA5OSAxNzA4IDk5IDE3MDggMTA3IGN0IAorMTcwOCAxMDcgMTcwOCAxMDcgMTgyNiAxMDcgY3QgMTgyNiAxMDcgMTgyNiAxMDcgMTgyNiA5OCBjdCAxNzg5IDk4IDE3ODMgOTMgMTc4MyA2MSBjdCAKKzE3ODMgNjEgMTc4MyA2MSAxNzgzIC0xNiBjdCAxODAwIDAgMTgxMiA1IDE4MzIgNSBjdCAxODg5IDUgMTkzNCAtNTAgMTkzNCAtMTIyIGN0IAorMTkzNCAtMTgzIDE5MDAgLTIyNyAxODUzIC0yMjcgY3QgMTgyNiAtMjI3IDE4MDQgLTIxNSAxNzgzIC0xODkgY3QgMTc4MyAtMTg5IDE3ODMgLTE4OSAxNzgzIC0yMjYgY3QgCisxNzgzIC0yMjYgMTc4MyAtMjI2IDE3ODAgLTIyNyBjdCAxNzU0IC0yMTcgMTczNyAtMjEwIDE3MTAgLTIwMiBjdCAxNzEwIC0yMDIgMTcxMCAtMjAyIDE3MTAgLTE5NSBjdCAKK3AKKzE3ODMgLTE2NSBtICAxNzgzIC0xODAgMTgxMCAtMTk3IDE4MzIgLTE5NyBjdCAxODY4IC0xOTcgMTg5MiAtMTYwIDE4OTIgLTEwMyBjdCAKKzE4OTIgLTQ4IDE4NjggLTExIDE4MzMgLTExIGN0IDE4MTEgLTExIDE3ODMgLTI5IDE3ODMgLTQ0IGN0IDE3ODMgLTQ0IDE3ODMgLTQ0IDE3ODMgLTE2NSBjdCAKK3AgZWYKKzIxNTQgLTgxIG0gIDIxMzAgLTQzIDIxMDkgLTI5IDIwNzggLTI5IGN0IDIwNTEgLTI5IDIwMzAgLTQzIDIwMTYgLTcyIGN0IDIwMDcgLTkwIDIwMDQgLTEwNyAyMDAzIC0xMzcgY3QgCisyMDAzIC0xMzcgMjAwMyAtMTM3IDIxNTIgLTEzNyBjdCAyMTQ4IC0xNjkgMjE0MyAtMTgzIDIxMzEgLTE5OSBjdCAyMTE3IC0yMTcgMjA5NCAtMjI3IDIwNjkgLTIyNyBjdCAKKzIwNDUgLTIyNyAyMDIyIC0yMTggMjAwNCAtMjAxIGN0IDE5ODEgLTE4MSAxOTY4IC0xNDYgMTk2OCAtMTA2IGN0IDE5NjggLTM3IDIwMDMgNSAyMDU5IDUgY3QgCisyMTA1IDUgMjE0MSAtMjQgMjE2MSAtNzggY3QgMjE2MSAtNzggMjE2MSAtNzggMjE1NCAtODEgY3QgcAorMjAwNCAtMTUzIG0gIDIwMDkgLTE5MSAyMDI2IC0yMDkgMjA1NSAtMjA5IGN0IDIwODUgLTIwOSAyMDk2IC0xOTYgMjEwMyAtMTUzIGN0IAorMjEwMyAtMTUzIDIxMDMgLTE1MyAyMDA0IC0xNTMgY3QgcCBlZgorMjM3NCAtODEgbSAgMjM1MCAtNDMgMjMyOSAtMjkgMjI5OCAtMjkgY3QgMjI3MSAtMjkgMjI1MCAtNDMgMjIzNiAtNzIgY3QgMjIyNyAtOTAgMjIyNCAtMTA3IDIyMjMgLTEzNyBjdCAKKzIyMjMgLTEzNyAyMjIzIC0xMzcgMjM3MiAtMTM3IGN0IDIzNjggLTE2OSAyMzYzIC0xODMgMjM1MSAtMTk5IGN0IDIzMzcgLTIxNyAyMzE0IC0yMjcgMjI4OSAtMjI3IGN0IAorMjI2NSAtMjI3IDIyNDIgLTIxOCAyMjI0IC0yMDEgY3QgMjIwMSAtMTgxIDIxODggLTE0NiAyMTg4IC0xMDYgY3QgMjE4OCAtMzcgMjIyMyA1IDIyNzkgNSBjdCAKKzIzMjUgNSAyMzYxIC0yNCAyMzgxIC03OCBjdCAyMzgxIC03OCAyMzgxIC03OCAyMzc0IC04MSBjdCBwCisyMjI0IC0xNTMgbSAgMjIyOSAtMTkxIDIyNDYgLTIwOSAyMjc1IC0yMDkgY3QgMjMwNSAtMjA5IDIzMTYgLTE5NiAyMzIzIC0xNTMgY3QgCisyMzIzIC0xNTMgMjMyMyAtMTUzIDIyMjQgLTE1MyBjdCBwIGVmCisyNTg5IC03NyBtICAyNTY1IC00MiAyNTQ4IC0zMSAyNTIwIC0zMSBjdCAyNDc2IC0zMSAyNDQ1IC03MCAyNDQ1IC0xMjcgY3QgMjQ0NSAtMTc4IDI0NzIgLTIxMyAyNTExIC0yMTMgY3QgCisyNTI5IC0yMTMgMjUzNSAtMjA3IDI1NDAgLTE4OSBjdCAyNTQwIC0xODkgMjU0MCAtMTg5IDI1NDMgLTE3OCBjdCAyNTQ3IC0xNjQgMjU1NSAtMTU1IDI1NjUgLTE1NSBjdCAKKzI1NzggLTE1NSAyNTg5IC0xNjQgMjU4OSAtMTc2IGN0IDI1ODkgLTIwNCAyNTU1IC0yMjcgMjUxNCAtMjI3IGN0IDI0OTAgLTIyNyAyNDY2IC0yMTcgMjQ0NiAtMTk5IGN0IAorMjQyMiAtMTc4IDI0MDggLTE0NCAyNDA4IC0xMDUgY3QgMjQwOCAtNDEgMjQ0NiA1IDI1MDAgNSBjdCAyNTIyIDUgMjU0MSAtMyAyNTU5IC0xOCBjdCAKKzI1NzIgLTMwIDI1ODEgLTQzIDI1OTUgLTcyIGN0IDI1OTUgLTcyIDI1OTUgLTcyIDI1ODkgLTc3IGN0IHAgZWYKKzI2OTIgLTE2OSBtICAyNzEyIC0xOTIgMjcyNyAtMjAwIDI3NDYgLTIwMCBjdCAyNzcwIC0yMDAgMjc4MiAtMTgyIDI3ODIgLTE0OCBjdCAKKzI3ODIgLTE0OCAyNzgyIC0xNDggMjc4MiAtNTAgY3QgMjc4MiAtMTYgMjc3NyAtMTAgMjc0OSAtNyBjdCAyNzQ5IC03IDI3NDkgLTcgMjc0OSAwIGN0IAorMjc0OSAwIDI3NDkgMCAyODUyIDAgY3QgMjg1MiAwIDI4NTIgMCAyODUyIC03IGN0IDI4MjYgLTEyIDI4MjMgLTE2IDI4MjMgLTUwIGN0IAorMjgyMyAtNTAgMjgyMyAtNTAgMjgyMyAtMTQ4IGN0IDI4MjMgLTIwMCAyODAyIC0yMjcgMjc2MyAtMjI3IGN0IDI3MzUgLTIyNyAyNzE0IC0yMTUgMjY5MiAtMTg1IGN0IAorMjY5MiAtMTg1IDI2OTIgLTE4NSAyNjkyIC0zMzYgY3QgMjY5MiAtMzM2IDI2OTIgLTMzNiAyNjkwIC0zMzcgY3QgMjY3MyAtMzMxIDI2NjEgLTMyNyAyNjM0IC0zMTkgY3QgCisyNjM0IC0zMTkgMjYzNCAtMzE5IDI2MjEgLTMxNSBjdCAyNjIxIC0zMTUgMjYyMSAtMzE1IDI2MjEgLTMwOCBjdCAyNjIzIC0zMDggMjYyNCAtMzA4IDI2MjcgLTMwOCBjdCAKKzI2NDcgLTMwOCAyNjUxIC0zMDQgMjY1MSAtMjgzIGN0IDI2NTEgLTI4MyAyNjUxIC0yODMgMjY1MSAtNTAgY3QgMjY1MSAtMTUgMjY0OCAtMTEgMjYyMCAtNyBjdCAKKzI2MjAgLTcgMjYyMCAtNyAyNjIwIDAgY3QgMjYyMCAwIDI2MjAgMCAyNzI1IDAgY3QgMjcyNSAwIDI3MjUgMCAyNzI1IC03IGN0IDI2OTcgLTEwIDI2OTIgLTE2IDI2OTIgLTUwIGN0IAorMjY5MiAtNTAgMjY5MiAtNTAgMjY5MiAtMTY5IGN0IHAgZWYKK3BvbQorZ3IKK2dyCitncworZ3MKK3B1bQorMTA3NzkgMTY0ODggdAorOSAtMTk2IG0gIDE1IC0xOTggMTkgLTE5OCAyNSAtMTk4IGN0IDM3IC0xOTggNDIgLTE5MCA0MiAtMTY2IGN0IDQyIC0xNjYgNDIgLTE2NiA0MiAtNDEgY3QgCis0MiAtMTUgMzUgLTcgOCAtNyBjdCA4IC03IDggLTcgOCAwIGN0IDggMCA4IDAgMTE1IDAgY3QgMTE1IDAgMTE1IDAgMTE1IC04IGN0IDkwIC04IDgyIC0xMyA4MiAtMzMgY3QgCis4MiAtMzMgODIgLTMzIDgyIC0xNzIgY3QgODIgLTE3MyA4NiAtMTc4IDkwIC0xODEgY3QgMTAyIC0xOTMgMTIyIC0yMDEgMTM5IC0yMDEgY3QgCisxNjEgLTIwMSAxNzEgLTE4NCAxNzEgLTE0OSBjdCAxNzEgLTE0OSAxNzEgLTE0OSAxNzEgLTQyIGN0IDE3MSAtMTQgMTY2IC04IDEzOCAtOCBjdCAKKzEzOCAtOCAxMzggLTggMTM4IDAgY3QgMTM4IDAgMTM4IDAgMjQ3IDAgY3QgMjQ3IDAgMjQ3IDAgMjQ3IC03IGN0IDIxOSAtNyAyMTIgLTE2IDIxMiAtNDYgY3QgCisyMTIgLTQ2IDIxMiAtNDYgMjEyIC0xNzEgY3QgMjI3IC0xOTIgMjQzIC0yMDEgMjY1IC0yMDEgY3QgMjkyIC0yMDEgMzAxIC0xODggMzAxIC0xNDcgY3QgCiszMDEgLTE0NyAzMDEgLTE0NyAzMDEgLTQzIGN0IDMwMSAtMTUgMjk3IC0xMSAyNjkgLTcgY3QgMjY5IC03IDI2OSAtNyAyNjkgMCBjdCAyNjkgMCAyNjkgMCAzNzUgMCBjdCAKKzM3NSAwIDM3NSAwIDM3NSAtOCBjdCAzNzUgLTggMzc1IC04IDM2MyAtOCBjdCAzNDggLTggMzQyIC0xOCAzNDIgLTM3IGN0IDM0MiAtMzcgMzQyIC0zNyAzNDIgLTEzOSBjdCAKKzM0MiAtMTk3IDMyMyAtMjI3IDI4NiAtMjI3IGN0IDI1OCAtMjI3IDIzMyAtMjE0IDIwNyAtMTg1IGN0IDE5OCAtMjE0IDE4MiAtMjI3IDE1NSAtMjI3IGN0IAorMTM0IC0yMjcgMTIxIC0yMjAgODAgLTE4OSBjdCA4MCAtMTg5IDgwIC0xODkgODAgLTIyNiBjdCA4MCAtMjI2IDgwIC0yMjYgNzcgLTIyNyBjdCAKKzUyIC0yMTggMzYgLTIxMiA5IC0yMDUgY3QgOSAtMjA1IDkgLTIwNSA5IC0xOTYgY3QgcCBlZgorNDcwIC0yMjcgbSAgNDcwIC0yMjcgNDcwIC0yMjcgMzk1IC0yMDAgY3QgMzk1IC0yMDAgMzk1IC0yMDAgMzk1IC0xOTIgY3QgMzk1IC0xOTIgMzk1IC0xOTIgMzk5IC0xOTMgY3QgCis0MDQgLTE5NCA0MTEgLTE5NCA0MTUgLTE5NCBjdCA0MjcgLTE5NCA0MzEgLTE4NiA0MzEgLTE2NCBjdCA0MzEgLTE2NCA0MzEgLTE2NCA0MzEgLTQ5IGN0IAorNDMxIC0xNCA0MjYgLTggMzkzIC04IGN0IDM5MyAtOCAzOTMgLTggMzkzIDAgY3QgMzkzIDAgMzkzIDAgNTA3IDAgY3QgNTA3IDAgNTA3IDAgNTA3IC04IGN0IAorNDc2IC04IDQ3MiAtMTUgNDcyIC01MCBjdCA0NzIgLTUwIDQ3MiAtNTAgNDcyIC0yMjUgY3QgNDcyIC0yMjUgNDcyIC0yMjUgNDcwIC0yMjcgY3QgCitwCis0NDcgLTMzNyBtICA0MzQgLTMzNyA0MjMgLTMyNiA0MjMgLTMxMiBjdCA0MjMgLTI5OCA0MzMgLTI4NyA0NDcgLTI4NyBjdCA0NjEgLTI4NyA0NzIgLTI5OCA0NzIgLTMxMiBjdCAKKzQ3MiAtMzI2IDQ2MSAtMzM3IDQ0NyAtMzM3IGN0IHAgZWYKKzcxOCAtNzcgbSAgNjk0IC00MiA2NzcgLTMxIDY0OSAtMzEgY3QgNjA1IC0zMSA1NzQgLTcwIDU3NCAtMTI3IGN0IDU3NCAtMTc4IDYwMSAtMjEzIDY0MCAtMjEzIGN0IAorNjU4IC0yMTMgNjY0IC0yMDcgNjY5IC0xODkgY3QgNjY5IC0xODkgNjY5IC0xODkgNjcyIC0xNzggY3QgNjc2IC0xNjQgNjg0IC0xNTUgNjk0IC0xNTUgY3QgCis3MDcgLTE1NSA3MTggLTE2NCA3MTggLTE3NiBjdCA3MTggLTIwNCA2ODQgLTIyNyA2NDMgLTIyNyBjdCA2MTkgLTIyNyA1OTUgLTIxNyA1NzUgLTE5OSBjdCAKKzU1MSAtMTc4IDUzNyAtMTQ0IDUzNyAtMTA1IGN0IDUzNyAtNDEgNTc1IDUgNjI5IDUgY3QgNjUxIDUgNjcwIC0zIDY4OCAtMTggY3QgNzAxIC0zMCA3MTAgLTQzIDcyNCAtNzIgY3QgCis3MjQgLTcyIDcyNCAtNzIgNzE4IC03NyBjdCBwIGVmCis3NDggLTE5MiBtICA3NTUgLTE5NCA3NjAgLTE5NCA3NjUgLTE5NCBjdCA3NzcgLTE5NCA3ODIgLTE4NiA3ODIgLTE2NCBjdCA3ODIgLTE2NCA3ODIgLTE2NCA3ODIgLTQxIGN0IAorNzgyIC0xNyA3NzggLTEzIDc0NyAtNyBjdCA3NDcgLTcgNzQ3IC03IDc0NyAwIGN0IDc0NyAwIDc0NyAwIDg2NCAwIGN0IDg2NCAwIDg2NCAwIDg2NCAtOCBjdCAKKzgzMSAtOCA4MjIgLTE1IDgyMiAtNDQgY3QgODIyIC00NCA4MjIgLTQ0IDgyMiAtMTU1IGN0IDgyMiAtMTcxIDg0MyAtMTk2IDg1NiAtMTk2IGN0IAorODU5IC0xOTYgODY0IC0xOTMgODY5IC0xODggY3QgODc3IC0xODIgODgyIC0xNzkgODg4IC0xNzkgY3QgOTAwIC0xNzkgOTA3IC0xODcgOTA3IC0yMDEgY3QgCis5MDcgLTIxNyA4OTcgLTIyNyA4ODEgLTIyNyBjdCA4NjAgLTIyNyA4NDYgLTIxNiA4MjIgLTE4MSBjdCA4MjIgLTE4MSA4MjIgLTE4MSA4MjIgLTIyNiBjdCAKKzgyMiAtMjI2IDgyMiAtMjI2IDgyMCAtMjI3IGN0IDc5NCAtMjE2IDc3NyAtMjEwIDc0OCAtMjAwIGN0IDc0OCAtMjAwIDc0OCAtMjAwIDc0OCAtMTkyIGN0IAorcCBlZgorMTAzMSAtMjI3IG0gIDk2OCAtMjI3IDkyNCAtMTgwIDkyNCAtMTEyIGN0IDkyNCAtNDUgOTY5IDUgMTAzMCA1IGN0IDEwOTEgNSAxMTM4IC00NyAxMTM4IC0xMTUgY3QgCisxMTM4IC0xODAgMTA5MyAtMjI3IDEwMzEgLTIyNyBjdCBwCisxMDI1IC0yMTMgbSAgMTA2NSAtMjEzIDEwOTQgLTE2NiAxMDk0IC05OCBjdCAxMDk0IC00MiAxMDcyIC05IDEwMzYgLTkgY3QgMTAxNyAtOSA5OTkgLTIxIDk4OSAtNDAgY3QgCis5NzUgLTY2IDk2OCAtMTAxIDk2OCAtMTM2IGN0IDk2OCAtMTgzIDk5MCAtMjEzIDEwMjUgLTIxMyBjdCBwIGVmCisxMTY0IC0xOTUgbSAgMTE2OSAtMTk1IDExNzIgLTE5NSAxMTc2IC0xOTUgY3QgMTE5MyAtMTk1IDExOTYgLTE5MCAxMTk2IC0xNjcgY3QgCisxMTk2IC0xNjcgMTE5NiAtMTY3IDExOTYgNjUgY3QgMTE5NiA5MCAxMTkxIDk2IDExNjIgOTkgY3QgMTE2MiA5OSAxMTYyIDk5IDExNjIgMTA3IGN0IAorMTE2MiAxMDcgMTE2MiAxMDcgMTI4MCAxMDcgY3QgMTI4MCAxMDcgMTI4MCAxMDcgMTI4MCA5OCBjdCAxMjQzIDk4IDEyMzcgOTMgMTIzNyA2MSBjdCAKKzEyMzcgNjEgMTIzNyA2MSAxMjM3IC0xNiBjdCAxMjU0IDAgMTI2NiA1IDEyODYgNSBjdCAxMzQzIDUgMTM4OCAtNTAgMTM4OCAtMTIyIGN0IAorMTM4OCAtMTgzIDEzNTQgLTIyNyAxMzA3IC0yMjcgY3QgMTI4MCAtMjI3IDEyNTggLTIxNSAxMjM3IC0xODkgY3QgMTIzNyAtMTg5IDEyMzcgLTE4OSAxMjM3IC0yMjYgY3QgCisxMjM3IC0yMjYgMTIzNyAtMjI2IDEyMzQgLTIyNyBjdCAxMjA4IC0yMTcgMTE5MSAtMjEwIDExNjQgLTIwMiBjdCAxMTY0IC0yMDIgMTE2NCAtMjAyIDExNjQgLTE5NSBjdCAKK3AKKzEyMzcgLTE2NSBtICAxMjM3IC0xODAgMTI2NCAtMTk3IDEyODYgLTE5NyBjdCAxMzIyIC0xOTcgMTM0NiAtMTYwIDEzNDYgLTEwMyBjdCAKKzEzNDYgLTQ4IDEzMjIgLTExIDEyODcgLTExIGN0IDEyNjUgLTExIDEyMzcgLTI5IDEyMzcgLTQ0IGN0IDEyMzcgLTQ0IDEyMzcgLTQ0IDEyMzcgLTE2NSBjdCAKK3AgZWYKKzE0ODYgLTE2OSBtICAxNTA2IC0xOTIgMTUyMSAtMjAwIDE1NDAgLTIwMCBjdCAxNTY0IC0yMDAgMTU3NiAtMTgyIDE1NzYgLTE0OCBjdCAKKzE1NzYgLTE0OCAxNTc2IC0xNDggMTU3NiAtNTAgY3QgMTU3NiAtMTYgMTU3MSAtMTAgMTU0MyAtNyBjdCAxNTQzIC03IDE1NDMgLTcgMTU0MyAwIGN0IAorMTU0MyAwIDE1NDMgMCAxNjQ2IDAgY3QgMTY0NiAwIDE2NDYgMCAxNjQ2IC03IGN0IDE2MjAgLTEyIDE2MTcgLTE2IDE2MTcgLTUwIGN0IAorMTYxNyAtNTAgMTYxNyAtNTAgMTYxNyAtMTQ4IGN0IDE2MTcgLTIwMCAxNTk2IC0yMjcgMTU1NyAtMjI3IGN0IDE1MjkgLTIyNyAxNTA4IC0yMTUgMTQ4NiAtMTg1IGN0IAorMTQ4NiAtMTg1IDE0ODYgLTE4NSAxNDg2IC0zMzYgY3QgMTQ4NiAtMzM2IDE0ODYgLTMzNiAxNDg0IC0zMzcgY3QgMTQ2NyAtMzMxIDE0NTUgLTMyNyAxNDI4IC0zMTkgY3QgCisxNDI4IC0zMTkgMTQyOCAtMzE5IDE0MTUgLTMxNSBjdCAxNDE1IC0zMTUgMTQxNSAtMzE1IDE0MTUgLTMwOCBjdCAxNDE3IC0zMDggMTQxOCAtMzA4IDE0MjEgLTMwOCBjdCAKKzE0NDEgLTMwOCAxNDQ1IC0zMDQgMTQ0NSAtMjgzIGN0IDE0NDUgLTI4MyAxNDQ1IC0yODMgMTQ0NSAtNTAgY3QgMTQ0NSAtMTUgMTQ0MiAtMTEgMTQxNCAtNyBjdCAKKzE0MTQgLTcgMTQxNCAtNyAxNDE0IDAgY3QgMTQxNCAwIDE0MTQgMCAxNTE5IDAgY3QgMTUxOSAwIDE1MTkgMCAxNTE5IC03IGN0IDE0OTEgLTEwIDE0ODYgLTE2IDE0ODYgLTUwIGN0IAorMTQ4NiAtNTAgMTQ4NiAtNTAgMTQ4NiAtMTY5IGN0IHAgZWYKKzE3ODAgLTIyNyBtICAxNzE3IC0yMjcgMTY3MyAtMTgwIDE2NzMgLTExMiBjdCAxNjczIC00NSAxNzE4IDUgMTc3OSA1IGN0IDE4NDAgNSAxODg3IC00NyAxODg3IC0xMTUgY3QgCisxODg3IC0xODAgMTg0MiAtMjI3IDE3ODAgLTIyNyBjdCBwCisxNzc0IC0yMTMgbSAgMTgxNCAtMjEzIDE4NDMgLTE2NiAxODQzIC05OCBjdCAxODQzIC00MiAxODIxIC05IDE3ODUgLTkgY3QgMTc2NiAtOSAxNzQ4IC0yMSAxNzM4IC00MCBjdCAKKzE3MjQgLTY2IDE3MTcgLTEwMSAxNzE3IC0xMzYgY3QgMTcxNyAtMTgzIDE3MzkgLTIxMyAxNzc0IC0yMTMgY3QgcCBlZgorMTkxNyAtMTk2IG0gIDE5MjAgLTE5OCAxOTI0IC0xOTggMTkzMCAtMTk4IGN0IDE5NDMgLTE5OCAxOTQ4IC0xOTEgMTk0OCAtMTY2IGN0IAorMTk0OCAtMTY2IDE5NDggLTE2NiAxOTQ4IC00NCBjdCAxOTQ4IC0xNSAxOTQyIC04IDE5MTggLTggY3QgMTkxOCAtOCAxOTE4IC04IDE5MTggMCBjdCAKKzE5MTggMCAxOTE4IDAgMjAyMCAwIGN0IDIwMjAgMCAyMDIwIDAgMjAyMCAtOCBjdCAxOTk2IC04IDE5ODggLTE0IDE5ODggLTMyIGN0IDE5ODggLTMyIDE5ODggLTMyIDE5ODggLTE3MSBjdCAKKzIwMTIgLTE5NCAyMDIyIC0yMDAgMjAzOCAtMjAwIGN0IDIwNjIgLTIwMCAyMDc0IC0xODQgMjA3NCAtMTUyIGN0IDIwNzQgLTE1MiAyMDc0IC0xNTIgMjA3NCAtNDggY3QgCisyMDc0IC0xNyAyMDY3IC04IDIwNDMgLTggY3QgMjA0MyAtOCAyMDQzIC04IDIwNDMgMCBjdCAyMDQzIDAgMjA0MyAwIDIxNDQgMCBjdCAyMTQ0IDAgMjE0NCAwIDIxNDQgLTcgY3QgCisyMTIwIC0xMCAyMTE0IC0xNiAyMTE0IC00MCBjdCAyMTE0IC00MCAyMTE0IC00MCAyMTE0IC0xNTMgY3QgMjExNCAtMTk5IDIwOTMgLTIyNyAyMDU3IC0yMjcgY3QgCisyMDM1IC0yMjcgMjAyMCAtMjE5IDE5ODcgLTE4NyBjdCAxOTg3IC0xODcgMTk4NyAtMTg3IDE5ODcgLTIyNiBjdCAxOTg3IC0yMjYgMTk4NyAtMjI2IDE5ODQgLTIyNyBjdCAKKzE5NjAgLTIxOCAxOTQzIC0yMTMgMTkxNyAtMjA1IGN0IDE5MTcgLTIwNSAxOTE3IC0yMDUgMTkxNyAtMTk2IGN0IHAgZWYKKzIzNTcgLTgxIG0gIDIzMzMgLTQzIDIzMTIgLTI5IDIyODEgLTI5IGN0IDIyNTQgLTI5IDIyMzMgLTQzIDIyMTkgLTcyIGN0IDIyMTAgLTkwIDIyMDcgLTEwNyAyMjA2IC0xMzcgY3QgCisyMjA2IC0xMzcgMjIwNiAtMTM3IDIzNTUgLTEzNyBjdCAyMzUxIC0xNjkgMjM0NiAtMTgzIDIzMzQgLTE5OSBjdCAyMzIwIC0yMTcgMjI5NyAtMjI3IDIyNzIgLTIyNyBjdCAKKzIyNDggLTIyNyAyMjI1IC0yMTggMjIwNyAtMjAxIGN0IDIxODQgLTE4MSAyMTcxIC0xNDYgMjE3MSAtMTA2IGN0IDIxNzEgLTM3IDIyMDYgNSAyMjYyIDUgY3QgCisyMzA4IDUgMjM0NCAtMjQgMjM2NCAtNzggY3QgMjM2NCAtNzggMjM2NCAtNzggMjM1NyAtODEgY3QgcAorMjIwNyAtMTUzIG0gIDIyMTIgLTE5MSAyMjI5IC0yMDkgMjI1OCAtMjA5IGN0IDIyODggLTIwOSAyMjk5IC0xOTYgMjMwNiAtMTUzIGN0IAorMjMwNiAtMTUzIDIzMDYgLTE1MyAyMjA3IC0xNTMgY3QgcCBlZgorcG9tCitncgorZ3IKK2dzCitncworcHVtCisxNTM1NiAxMjk5NiB0CiszIC0xOTIgbSAgMTAgLTE5NCAxNSAtMTk0IDIwIC0xOTQgY3QgMzIgLTE5NCAzNyAtMTg2IDM3IC0xNjQgY3QgMzcgLTE2NCAzNyAtMTY0IDM3IC00MSBjdCAKKzM3IC0xNyAzMyAtMTMgMiAtNyBjdCAyIC03IDIgLTcgMiAwIGN0IDIgMCAyIDAgMTE5IDAgY3QgMTE5IDAgMTE5IDAgMTE5IC04IGN0IDg2IC04IDc3IC0xNSA3NyAtNDQgY3QgCis3NyAtNDQgNzcgLTQ0IDc3IC0xNTUgY3QgNzcgLTE3MSA5OCAtMTk2IDExMSAtMTk2IGN0IDExNCAtMTk2IDExOSAtMTkzIDEyNCAtMTg4IGN0IAorMTMyIC0xODIgMTM3IC0xNzkgMTQzIC0xNzkgY3QgMTU1IC0xNzkgMTYyIC0xODcgMTYyIC0yMDEgY3QgMTYyIC0yMTcgMTUyIC0yMjcgMTM2IC0yMjcgY3QgCisxMTUgLTIyNyAxMDEgLTIxNiA3NyAtMTgxIGN0IDc3IC0xODEgNzcgLTE4MSA3NyAtMjI2IGN0IDc3IC0yMjYgNzcgLTIyNiA3NSAtMjI3IGN0IAorNDkgLTIxNiAzMiAtMjEwIDMgLTIwMCBjdCAzIC0yMDAgMyAtMjAwIDMgLTE5MiBjdCBwIGVmCiszNjMgLTgxIG0gIDMzOSAtNDMgMzE4IC0yOSAyODcgLTI5IGN0IDI2MCAtMjkgMjM5IC00MyAyMjUgLTcyIGN0IDIxNiAtOTAgMjEzIC0xMDcgMjEyIC0xMzcgY3QgCisyMTIgLTEzNyAyMTIgLTEzNyAzNjEgLTEzNyBjdCAzNTcgLTE2OSAzNTIgLTE4MyAzNDAgLTE5OSBjdCAzMjYgLTIxNyAzMDMgLTIyNyAyNzggLTIyNyBjdCAKKzI1NCAtMjI3IDIzMSAtMjE4IDIxMyAtMjAxIGN0IDE5MCAtMTgxIDE3NyAtMTQ2IDE3NyAtMTA2IGN0IDE3NyAtMzcgMjEyIDUgMjY4IDUgY3QgCiszMTQgNSAzNTAgLTI0IDM3MCAtNzggY3QgMzcwIC03OCAzNzAgLTc4IDM2MyAtODEgY3QgcAorMjEzIC0xNTMgbSAgMjE4IC0xOTEgMjM1IC0yMDkgMjY0IC0yMDkgY3QgMjk0IC0yMDkgMzA1IC0xOTYgMzEyIC0xNTMgY3QgMzEyIC0xNTMgMzEyIC0xNTMgMjEzIC0xNTMgY3QgCitwIGVmCis2MTYgLTIyMiBtICA2MTYgLTIyMiA2MTYgLTIyMiA1NDkgLTIyMiBjdCA1NDkgLTIyMiA1NDkgLTIyMiA1NDkgLTIxNSBjdCA1NjQgLTIxMyA1NzEgLTIwOCA1NzEgLTE5OSBjdCAKKzU3MSAtMTk0IDU3MCAtMTg5IDU2OCAtMTg0IGN0IDU2OCAtMTg0IDU2OCAtMTg0IDUyMSAtNTYgY3QgNTIxIC01NiA1MjEgLTU2IDQ3MSAtMTgyIGN0IAorNDY4IC0xODkgNDY3IC0xOTYgNDY3IC0yMDEgY3QgNDY3IC0yMTAgNDcyIC0yMTMgNDg5IC0yMTUgY3QgNDg5IC0yMTUgNDg5IC0yMTUgNDg5IC0yMjIgY3QgCis0ODkgLTIyMiA0ODkgLTIyMiAzOTQgLTIyMiBjdCAzOTQgLTIyMiAzOTQgLTIyMiAzOTQgLTIxNCBjdCA0MTMgLTIxNCA0MTYgLTIwOSA0MzggLTE1OCBjdCAKKzQzOCAtMTU4IDQzOCAtMTU4IDQ5NiAtMTYgY3QgNDk3IC0xMyA0OTkgLTEwIDUwMCAtNiBjdCA1MDMgMyA1MDYgNyA1MDkgNyBjdCA1MTIgNyA1MTUgMSA1MjIgLTE4IGN0IAorNTIyIC0xOCA1MjIgLTE4IDU4NCAtMTc2IGN0IDU5OSAtMjEwIDYwMSAtMjEzIDYxNiAtMjE1IGN0IDYxNiAtMjE1IDYxNiAtMjE1IDYxNiAtMjIyIGN0IAorcCBlZgorODI5IC04MSBtICA4MDUgLTQzIDc4NCAtMjkgNzUzIC0yOSBjdCA3MjYgLTI5IDcwNSAtNDMgNjkxIC03MiBjdCA2ODIgLTkwIDY3OSAtMTA3IDY3OCAtMTM3IGN0IAorNjc4IC0xMzcgNjc4IC0xMzcgODI3IC0xMzcgY3QgODIzIC0xNjkgODE4IC0xODMgODA2IC0xOTkgY3QgNzkyIC0yMTcgNzY5IC0yMjcgNzQ0IC0yMjcgY3QgCis3MjAgLTIyNyA2OTcgLTIxOCA2NzkgLTIwMSBjdCA2NTYgLTE4MSA2NDMgLTE0NiA2NDMgLTEwNiBjdCA2NDMgLTM3IDY3OCA1IDczNCA1IGN0IAorNzgwIDUgODE2IC0yNCA4MzYgLTc4IGN0IDgzNiAtNzggODM2IC03OCA4MjkgLTgxIGN0IHAKKzY3OSAtMTUzIG0gIDY4NCAtMTkxIDcwMSAtMjA5IDczMCAtMjA5IGN0IDc2MCAtMjA5IDc3MSAtMTk2IDc3OCAtMTUzIGN0IDc3OCAtMTUzIDc3OCAtMTUzIDY3OSAtMTUzIGN0IAorcCBlZgorODU0IC0xOTIgbSAgODYxIC0xOTQgODY2IC0xOTQgODcxIC0xOTQgY3QgODgzIC0xOTQgODg4IC0xODYgODg4IC0xNjQgY3QgODg4IC0xNjQgODg4IC0xNjQgODg4IC00MSBjdCAKKzg4OCAtMTcgODg0IC0xMyA4NTMgLTcgY3QgODUzIC03IDg1MyAtNyA4NTMgMCBjdCA4NTMgMCA4NTMgMCA5NzAgMCBjdCA5NzAgMCA5NzAgMCA5NzAgLTggY3QgCis5MzcgLTggOTI4IC0xNSA5MjggLTQ0IGN0IDkyOCAtNDQgOTI4IC00NCA5MjggLTE1NSBjdCA5MjggLTE3MSA5NDkgLTE5NiA5NjIgLTE5NiBjdCAKKzk2NSAtMTk2IDk3MCAtMTkzIDk3NSAtMTg4IGN0IDk4MyAtMTgyIDk4OCAtMTc5IDk5NCAtMTc5IGN0IDEwMDYgLTE3OSAxMDEzIC0xODcgMTAxMyAtMjAxIGN0IAorMTAxMyAtMjE3IDEwMDMgLTIyNyA5ODcgLTIyNyBjdCA5NjYgLTIyNyA5NTIgLTIxNiA5MjggLTE4MSBjdCA5MjggLTE4MSA5MjggLTE4MSA5MjggLTIyNiBjdCAKKzkyOCAtMjI2IDkyOCAtMjI2IDkyNiAtMjI3IGN0IDkwMCAtMjE2IDg4MyAtMjEwIDg1NCAtMjAwIGN0IDg1NCAtMjAwIDg1NCAtMjAwIDg1NCAtMTkyIGN0IAorcCBlZgorMTA5MCAtMzM2IG0gIDEwOTAgLTMzNiAxMDkwIC0zMzYgMTA4OCAtMzM3IGN0IDEwNjcgLTMzMCAxMDU0IC0zMjYgMTAzMSAtMzE5IGN0IAorMTAzMSAtMzE5IDEwMzEgLTMxOSAxMDE3IC0zMTUgY3QgMTAxNyAtMzE1IDEwMTcgLTMxNSAxMDE3IC0zMDggY3QgMTAyMCAtMzA4IDEwMjIgLTMwOCAxMDI2IC0zMDggY3QgCisxMDQ1IC0zMDggMTA0OSAtMzA0IDEwNDkgLTI4MyBjdCAxMDQ5IC0yODMgMTA0OSAtMjgzIDEwNDkgLTI3IGN0IDEwNDkgLTExIDEwOTEgNSAxMTI5IDUgY3QgCisxMTkzIDUgMTI0MyAtNDkgMTI0MyAtMTIwIGN0IDEyNDMgLTE4MSAxMjA2IC0yMjcgMTE1NyAtMjI3IGN0IDExMjggLTIyNyAxMTAwIC0yMDkgMTA5MCAtMTg1IGN0IAorMTA5MCAtMTg1IDEwOTAgLTE4NSAxMDkwIC0zMzYgY3QgcAorMTA5MCAtMTU5IG0gIDEwOTAgLTE3OCAxMTEzIC0xOTYgMTEzOCAtMTk2IGN0IDExNzYgLTE5NiAxMjAwIC0xNTcgMTIwMCAtOTcgY3QgCisxMjAwIC00MiAxMTc3IC0xMSAxMTM3IC0xMSBjdCAxMTEyIC0xMSAxMDkwIC0yMiAxMDkwIC0zNSBjdCAxMDkwIC0zNSAxMDkwIC0zNSAxMDkwIC0xNTkgY3QgCitwIGVmCisxNDY0IC04MSBtICAxNDQwIC00MyAxNDE5IC0yOSAxMzg4IC0yOSBjdCAxMzYxIC0yOSAxMzQwIC00MyAxMzI2IC03MiBjdCAxMzE3IC05MCAxMzE0IC0xMDcgMTMxMyAtMTM3IGN0IAorMTMxMyAtMTM3IDEzMTMgLTEzNyAxNDYyIC0xMzcgY3QgMTQ1OCAtMTY5IDE0NTMgLTE4MyAxNDQxIC0xOTkgY3QgMTQyNyAtMjE3IDE0MDQgLTIyNyAxMzc5IC0yMjcgY3QgCisxMzU1IC0yMjcgMTMzMiAtMjE4IDEzMTQgLTIwMSBjdCAxMjkxIC0xODEgMTI3OCAtMTQ2IDEyNzggLTEwNiBjdCAxMjc4IC0zNyAxMzEzIDUgMTM2OSA1IGN0IAorMTQxNSA1IDE0NTEgLTI0IDE0NzEgLTc4IGN0IDE0NzEgLTc4IDE0NzEgLTc4IDE0NjQgLTgxIGN0IHAKKzEzMTQgLTE1MyBtICAxMzE5IC0xOTEgMTMzNiAtMjA5IDEzNjUgLTIwOSBjdCAxMzk1IC0yMDkgMTQwNiAtMTk2IDE0MTMgLTE1MyBjdCAKKzE0MTMgLTE1MyAxNDEzIC0xNTMgMTMxNCAtMTUzIGN0IHAgZWYKKzE0ODkgLTE5MiBtICAxNDk2IC0xOTQgMTUwMSAtMTk0IDE1MDYgLTE5NCBjdCAxNTE4IC0xOTQgMTUyMyAtMTg2IDE1MjMgLTE2NCBjdCAKKzE1MjMgLTE2NCAxNTIzIC0xNjQgMTUyMyAtNDEgY3QgMTUyMyAtMTcgMTUxOSAtMTMgMTQ4OCAtNyBjdCAxNDg4IC03IDE0ODggLTcgMTQ4OCAwIGN0IAorMTQ4OCAwIDE0ODggMCAxNjA1IDAgY3QgMTYwNSAwIDE2MDUgMCAxNjA1IC04IGN0IDE1NzIgLTggMTU2MyAtMTUgMTU2MyAtNDQgY3QgMTU2MyAtNDQgMTU2MyAtNDQgMTU2MyAtMTU1IGN0IAorMTU2MyAtMTcxIDE1ODQgLTE5NiAxNTk3IC0xOTYgY3QgMTYwMCAtMTk2IDE2MDUgLTE5MyAxNjEwIC0xODggY3QgMTYxOCAtMTgyIDE2MjMgLTE3OSAxNjI5IC0xNzkgY3QgCisxNjQxIC0xNzkgMTY0OCAtMTg3IDE2NDggLTIwMSBjdCAxNjQ4IC0yMTcgMTYzOCAtMjI3IDE2MjIgLTIyNyBjdCAxNjAxIC0yMjcgMTU4NyAtMjE2IDE1NjMgLTE4MSBjdCAKKzE1NjMgLTE4MSAxNTYzIC0xODEgMTU2MyAtMjI2IGN0IDE1NjMgLTIyNiAxNTYzIC0yMjYgMTU2MSAtMjI3IGN0IDE1MzUgLTIxNiAxNTE4IC0yMTAgMTQ4OSAtMjAwIGN0IAorMTQ4OSAtMjAwIDE0ODkgLTIwMCAxNDg5IC0xOTIgY3QgcCBlZgorMTg2NSAtMzIgbSAgMTg1NyAtMjYgMTg1MSAtMjMgMTg0NCAtMjMgY3QgMTgzMyAtMjMgMTgyOSAtMzAgMTgyOSAtNTIgY3QgMTgyOSAtNTIgMTgyOSAtNTIgMTgyOSAtMTQ4IGN0IAorMTgyOSAtMTczIDE4MjcgLTE4OCAxODE5IC0yMDAgY3QgMTgwOSAtMjE4IDE3ODggLTIyNyAxNzU5IC0yMjcgY3QgMTcxNCAtMjI3IDE2NzggLTIwMyAxNjc4IC0xNzEgY3QgCisxNjc4IC0xNjAgMTY4OCAtMTUwIDE2OTkgLTE1MCBjdCAxNzExIC0xNTAgMTcyMSAtMTYwIDE3MjEgLTE3MSBjdCAxNzIxIC0xNzMgMTcyMCAtMTc1IDE3MjAgLTE3OSBjdCAKKzE3MTkgLTE4MyAxNzE4IC0xODcgMTcxOCAtMTkxIGN0IDE3MTggLTIwNCAxNzM0IC0yMTUgMTc1MyAtMjE1IGN0IDE3NzcgLTIxNSAxNzkwIC0yMDEgMTc5MCAtMTc0IGN0IAorMTc5MCAtMTc0IDE3OTAgLTE3NCAxNzkwIC0xNDQgY3QgMTcxNSAtMTEzIDE3MDcgLTEwOSAxNjg2IC05MCBjdCAxNjc2IC04MSAxNjY5IC02NCAxNjY5IC00OCBjdCAKKzE2NjkgLTE3IDE2OTAgNSAxNzIwIDUgY3QgMTc0MSA1IDE3NjEgLTUgMTc5MCAtMzEgY3QgMTc5MyAtNSAxODAyIDUgMTgyMSA1IGN0IDE4MzggNSAxODQ4IC0xIDE4NjUgLTIwIGN0IAorMTg2NSAtMjAgMTg2NSAtMjAgMTg2NSAtMzIgY3QgcAorMTc5MCAtNjEgbSAgMTc5MCAtNDUgMTc4OCAtNDEgMTc3NyAtMzUgY3QgMTc2NiAtMjggMTc1MiAtMjQgMTc0MiAtMjQgY3QgMTcyNSAtMjQgMTcxMiAtNDAgMTcxMiAtNjIgY3QgCisxNzEyIC02MiAxNzEyIC02MiAxNzEyIC02MyBjdCAxNzEyIC05MiAxNzMxIC0xMTAgMTc5MCAtMTMyIGN0IDE3OTAgLTEzMiAxNzkwIC0xMzIgMTc5MCAtNjEgY3QgCitwIGVmCisxOTk0IC0yMjIgbSAgMTk5NCAtMjIyIDE5OTQgLTIyMiAxOTQ2IC0yMjIgY3QgMTk0NiAtMjIyIDE5NDYgLTIyMiAxOTQ2IC0yNzkgY3QgCisxOTQ2IC0yODQgMTk0NSAtMjg2IDE5NDIgLTI4NiBjdCAxOTM5IC0yODEgMTkzNiAtMjc3IDE5MzIgLTI3MiBjdCAxOTE0IC0yNDUgMTg5MyAtMjIxIDE4ODYgLTIxOSBjdCAKKzE4ODAgLTIxNiAxODc3IC0yMTIgMTg3NyAtMjEwIGN0IDE4NzcgLTIwOCAxODc4IC0yMDcgMTg3OSAtMjA2IGN0IDE4NzkgLTIwNiAxODc5IC0yMDYgMTkwNSAtMjA2IGN0IAorMTkwNSAtMjA2IDE5MDUgLTIwNiAxOTA1IC01OCBjdCAxOTA1IC0xNiAxOTE5IDUgMTk0OCA1IGN0IDE5NzIgNSAxOTkwIC03IDIwMDYgLTMzIGN0IAorMjAwNiAtMzMgMjAwNiAtMzMgMjAwMCAtMzggY3QgMTk5MCAtMjYgMTk4MSAtMjEgMTk3MSAtMjEgY3QgMTk1MyAtMjEgMTk0NiAtMzQgMTk0NiAtNjUgY3QgCisxOTQ2IC02NSAxOTQ2IC02NSAxOTQ2IC0yMDYgY3QgMTk0NiAtMjA2IDE5NDYgLTIwNiAxOTk0IC0yMDYgY3QgMTk5NCAtMjA2IDE5OTQgLTIwNiAxOTk0IC0yMjIgY3QgCitwIGVmCisyMDk2IC0yMjcgbSAgMjA5NiAtMjI3IDIwOTYgLTIyNyAyMDIxIC0yMDAgY3QgMjAyMSAtMjAwIDIwMjEgLTIwMCAyMDIxIC0xOTIgY3QgCisyMDIxIC0xOTIgMjAyMSAtMTkyIDIwMjUgLTE5MyBjdCAyMDMwIC0xOTQgMjAzNyAtMTk0IDIwNDEgLTE5NCBjdCAyMDUzIC0xOTQgMjA1NyAtMTg2IDIwNTcgLTE2NCBjdCAKKzIwNTcgLTE2NCAyMDU3IC0xNjQgMjA1NyAtNDkgY3QgMjA1NyAtMTQgMjA1MiAtOCAyMDE5IC04IGN0IDIwMTkgLTggMjAxOSAtOCAyMDE5IDAgY3QgCisyMDE5IDAgMjAxOSAwIDIxMzMgMCBjdCAyMTMzIDAgMjEzMyAwIDIxMzMgLTggY3QgMjEwMiAtOCAyMDk4IC0xNSAyMDk4IC01MCBjdCAyMDk4IC01MCAyMDk4IC01MCAyMDk4IC0yMjUgY3QgCisyMDk4IC0yMjUgMjA5OCAtMjI1IDIwOTYgLTIyNyBjdCBwCisyMDczIC0zMzcgbSAgMjA2MCAtMzM3IDIwNDkgLTMyNiAyMDQ5IC0zMTIgY3QgMjA0OSAtMjk4IDIwNTkgLTI4NyAyMDczIC0yODcgY3QgCisyMDg3IC0yODcgMjA5OCAtMjk4IDIwOTggLTMxMiBjdCAyMDk4IC0zMjYgMjA4NyAtMzM3IDIwNzMgLTMzNyBjdCBwIGVmCisyMjcyIC0yMjcgbSAgMjIwOSAtMjI3IDIxNjUgLTE4MCAyMTY1IC0xMTIgY3QgMjE2NSAtNDUgMjIxMCA1IDIyNzEgNSBjdCAyMzMyIDUgMjM3OSAtNDcgMjM3OSAtMTE1IGN0IAorMjM3OSAtMTgwIDIzMzQgLTIyNyAyMjcyIC0yMjcgY3QgcAorMjI2NiAtMjEzIG0gIDIzMDYgLTIxMyAyMzM1IC0xNjYgMjMzNSAtOTggY3QgMjMzNSAtNDIgMjMxMyAtOSAyMjc3IC05IGN0IDIyNTggLTkgMjI0MCAtMjEgMjIzMCAtNDAgY3QgCisyMjE2IC02NiAyMjA5IC0xMDEgMjIwOSAtMTM2IGN0IDIyMDkgLTE4MyAyMjMxIC0yMTMgMjI2NiAtMjEzIGN0IHAgZWYKKzI0MDggLTE5NiBtICAyNDExIC0xOTggMjQxNSAtMTk4IDI0MjEgLTE5OCBjdCAyNDM0IC0xOTggMjQzOSAtMTkxIDI0MzkgLTE2NiBjdCAKKzI0MzkgLTE2NiAyNDM5IC0xNjYgMjQzOSAtNDQgY3QgMjQzOSAtMTUgMjQzMyAtOCAyNDA5IC04IGN0IDI0MDkgLTggMjQwOSAtOCAyNDA5IDAgY3QgCisyNDA5IDAgMjQwOSAwIDI1MTEgMCBjdCAyNTExIDAgMjUxMSAwIDI1MTEgLTggY3QgMjQ4NyAtOCAyNDc5IC0xNCAyNDc5IC0zMiBjdCAyNDc5IC0zMiAyNDc5IC0zMiAyNDc5IC0xNzEgY3QgCisyNTAzIC0xOTQgMjUxMyAtMjAwIDI1MjkgLTIwMCBjdCAyNTUzIC0yMDAgMjU2NSAtMTg0IDI1NjUgLTE1MiBjdCAyNTY1IC0xNTIgMjU2NSAtMTUyIDI1NjUgLTQ4IGN0IAorMjU2NSAtMTcgMjU1OCAtOCAyNTM0IC04IGN0IDI1MzQgLTggMjUzNCAtOCAyNTM0IDAgY3QgMjUzNCAwIDI1MzQgMCAyNjM1IDAgY3QgMjYzNSAwIDI2MzUgMCAyNjM1IC03IGN0IAorMjYxMSAtMTAgMjYwNSAtMTYgMjYwNSAtNDAgY3QgMjYwNSAtNDAgMjYwNSAtNDAgMjYwNSAtMTUzIGN0IDI2MDUgLTE5OSAyNTg0IC0yMjcgMjU0OCAtMjI3IGN0IAorMjUyNiAtMjI3IDI1MTEgLTIxOSAyNDc4IC0xODcgY3QgMjQ3OCAtMTg3IDI0NzggLTE4NyAyNDc4IC0yMjYgY3QgMjQ3OCAtMjI2IDI0NzggLTIyNiAyNDc1IC0yMjcgY3QgCisyNDUxIC0yMTggMjQzNCAtMjEzIDI0MDggLTIwNSBjdCAyNDA4IC0yMDUgMjQwOCAtMjA1IDI0MDggLTE5NiBjdCBwIGVmCitwb20KK2dyCitncgorZ3MKK2dzCitwdW0KKzQ1NjEgMTI5OTYgdAorMjE0IC0zMiBtICAyMDYgLTI2IDIwMCAtMjMgMTkzIC0yMyBjdCAxODIgLTIzIDE3OCAtMzAgMTc4IC01MiBjdCAxNzggLTUyIDE3OCAtNTIgMTc4IC0xNDggY3QgCisxNzggLTE3MyAxNzYgLTE4OCAxNjggLTIwMCBjdCAxNTggLTIxOCAxMzcgLTIyNyAxMDggLTIyNyBjdCA2MyAtMjI3IDI3IC0yMDMgMjcgLTE3MSBjdCAKKzI3IC0xNjAgMzcgLTE1MCA0OCAtMTUwIGN0IDYwIC0xNTAgNzAgLTE2MCA3MCAtMTcxIGN0IDcwIC0xNzMgNjkgLTE3NSA2OSAtMTc5IGN0IAorNjggLTE4MyA2NyAtMTg3IDY3IC0xOTEgY3QgNjcgLTIwNCA4MyAtMjE1IDEwMiAtMjE1IGN0IDEyNiAtMjE1IDEzOSAtMjAxIDEzOSAtMTc0IGN0IAorMTM5IC0xNzQgMTM5IC0xNzQgMTM5IC0xNDQgY3QgNjQgLTExMyA1NiAtMTA5IDM1IC05MCBjdCAyNSAtODEgMTggLTY0IDE4IC00OCBjdCAKKzE4IC0xNyAzOSA1IDY5IDUgY3QgOTAgNSAxMTAgLTUgMTM5IC0zMSBjdCAxNDIgLTUgMTUxIDUgMTcwIDUgY3QgMTg3IDUgMTk3IC0xIDIxNCAtMjAgY3QgCisyMTQgLTIwIDIxNCAtMjAgMjE0IC0zMiBjdCBwCisxMzkgLTYxIG0gIDEzOSAtNDUgMTM3IC00MSAxMjYgLTM1IGN0IDExNSAtMjggMTAxIC0yNCA5MSAtMjQgY3QgNzQgLTI0IDYxIC00MCA2MSAtNjIgY3QgCis2MSAtNjIgNjEgLTYyIDYxIC02MyBjdCA2MSAtOTIgODAgLTExMCAxMzkgLTEzMiBjdCAxMzkgLTEzMiAxMzkgLTEzMiAxMzkgLTYxIGN0IAorcCBlZgorMzg3IDUgbSAgMzg3IDUgMzg3IDUgNDU4IC0yMSBjdCA0NTggLTIxIDQ1OCAtMjEgNDU4IC0yOCBjdCA0NDkgLTI4IDQ0OCAtMjggNDQ3IC0yOCBjdCAKKzQyOSAtMjggNDI1IC0zMyA0MjUgLTU2IGN0IDQyNSAtNTYgNDI1IC01NiA0MjUgLTMzNiBjdCA0MjUgLTMzNiA0MjUgLTMzNiA0MjMgLTMzNyBjdCAKKzQwMCAtMzI5IDM4MyAtMzI0IDM1MiAtMzE1IGN0IDM1MiAtMzE1IDM1MiAtMzE1IDM1MiAtMzA4IGN0IDM1NiAtMzA4IDM1OCAtMzA4IDM2MiAtMzA4IGN0IAorMzgwIC0zMDggMzg1IC0zMDMgMzg1IC0yODMgY3QgMzg1IC0yODMgMzg1IC0yODMgMzg1IC0yMDYgY3QgMzY2IC0yMjIgMzUzIC0yMjcgMzM0IC0yMjcgY3QgCisyNzggLTIyNyAyMzMgLTE3MSAyMzMgLTEwMSBjdCAyMzMgLTM4IDI2OSA1IDMyMyA1IGN0IDM1MCA1IDM2OCAtNSAzODUgLTI4IGN0IDM4NSAtMjggMzg1IC0yOCAzODUgNCBjdCAKKzM4NSA0IDM4NSA0IDM4NyA1IGN0IHAKKzM4NSAtNTAgbSAgMzg1IC00NyAzODEgLTQxIDM3NiAtMzUgY3QgMzY4IC0yNiAzNTYgLTIxIDM0MiAtMjEgY3QgMzAxIC0yMSAyNzUgLTYwIDI3NSAtMTIxIGN0IAorMjc1IC0xNzcgMjk4IC0yMTMgMzM1IC0yMTMgY3QgMzYxIC0yMTMgMzg1IC0xOTAgMzg1IC0xNjQgY3QgMzg1IC0xNjQgMzg1IC0xNjQgMzg1IC01MCBjdCAKK3AgZWYKKzY4NCAtMzIgbSAgNjc2IC0yNiA2NzAgLTIzIDY2MyAtMjMgY3QgNjUyIC0yMyA2NDggLTMwIDY0OCAtNTIgY3QgNjQ4IC01MiA2NDggLTUyIDY0OCAtMTQ4IGN0IAorNjQ4IC0xNzMgNjQ2IC0xODggNjM4IC0yMDAgY3QgNjI4IC0yMTggNjA3IC0yMjcgNTc4IC0yMjcgY3QgNTMzIC0yMjcgNDk3IC0yMDMgNDk3IC0xNzEgY3QgCis0OTcgLTE2MCA1MDcgLTE1MCA1MTggLTE1MCBjdCA1MzAgLTE1MCA1NDAgLTE2MCA1NDAgLTE3MSBjdCA1NDAgLTE3MyA1MzkgLTE3NSA1MzkgLTE3OSBjdCAKKzUzOCAtMTgzIDUzNyAtMTg3IDUzNyAtMTkxIGN0IDUzNyAtMjA0IDU1MyAtMjE1IDU3MiAtMjE1IGN0IDU5NiAtMjE1IDYwOSAtMjAxIDYwOSAtMTc0IGN0IAorNjA5IC0xNzQgNjA5IC0xNzQgNjA5IC0xNDQgY3QgNTM0IC0xMTMgNTI2IC0xMDkgNTA1IC05MCBjdCA0OTUgLTgxIDQ4OCAtNjQgNDg4IC00OCBjdCAKKzQ4OCAtMTcgNTA5IDUgNTM5IDUgY3QgNTYwIDUgNTgwIC01IDYwOSAtMzEgY3QgNjEyIC01IDYyMSA1IDY0MCA1IGN0IDY1NyA1IDY2NyAtMSA2ODQgLTIwIGN0IAorNjg0IC0yMCA2ODQgLTIwIDY4NCAtMzIgY3QgcAorNjA5IC02MSBtICA2MDkgLTQ1IDYwNyAtNDEgNTk2IC0zNSBjdCA1ODUgLTI4IDU3MSAtMjQgNTYxIC0yNCBjdCA1NDQgLTI0IDUzMSAtNDAgNTMxIC02MiBjdCAKKzUzMSAtNjIgNTMxIC02MiA1MzEgLTYzIGN0IDUzMSAtOTIgNTUwIC0xMTAgNjA5IC0xMzIgY3QgNjA5IC0xMzIgNjA5IC0xMzIgNjA5IC02MSBjdCAKK3AgZWYKKzY5NCAtMTk1IG0gIDY5OSAtMTk1IDcwMiAtMTk1IDcwNiAtMTk1IGN0IDcyMyAtMTk1IDcyNiAtMTkwIDcyNiAtMTY3IGN0IDcyNiAtMTY3IDcyNiAtMTY3IDcyNiA2NSBjdCAKKzcyNiA5MCA3MjEgOTYgNjkyIDk5IGN0IDY5MiA5OSA2OTIgOTkgNjkyIDEwNyBjdCA2OTIgMTA3IDY5MiAxMDcgODEwIDEwNyBjdCA4MTAgMTA3IDgxMCAxMDcgODEwIDk4IGN0IAorNzczIDk4IDc2NyA5MyA3NjcgNjEgY3QgNzY3IDYxIDc2NyA2MSA3NjcgLTE2IGN0IDc4NCAwIDc5NiA1IDgxNiA1IGN0IDg3MyA1IDkxOCAtNTAgOTE4IC0xMjIgY3QgCis5MTggLTE4MyA4ODQgLTIyNyA4MzcgLTIyNyBjdCA4MTAgLTIyNyA3ODggLTIxNSA3NjcgLTE4OSBjdCA3NjcgLTE4OSA3NjcgLTE4OSA3NjcgLTIyNiBjdCAKKzc2NyAtMjI2IDc2NyAtMjI2IDc2NCAtMjI3IGN0IDczOCAtMjE3IDcyMSAtMjEwIDY5NCAtMjAyIGN0IDY5NCAtMjAyIDY5NCAtMjAyIDY5NCAtMTk1IGN0IAorcAorNzY3IC0xNjUgbSAgNzY3IC0xODAgNzk0IC0xOTcgODE2IC0xOTcgY3QgODUyIC0xOTcgODc2IC0xNjAgODc2IC0xMDMgY3QgODc2IC00OCA4NTIgLTExIDgxNyAtMTEgY3QgCis3OTUgLTExIDc2NyAtMjkgNzY3IC00NCBjdCA3NjcgLTQ0IDc2NyAtNDQgNzY3IC0xNjUgY3QgcCBlZgorMTA2MyAtMjIyIG0gIDEwNjMgLTIyMiAxMDYzIC0yMjIgMTAxNSAtMjIyIGN0IDEwMTUgLTIyMiAxMDE1IC0yMjIgMTAxNSAtMjc5IGN0IAorMTAxNSAtMjg0IDEwMTQgLTI4NiAxMDExIC0yODYgY3QgMTAwOCAtMjgxIDEwMDUgLTI3NyAxMDAxIC0yNzIgY3QgOTgzIC0yNDUgOTYyIC0yMjEgOTU1IC0yMTkgY3QgCis5NDkgLTIxNiA5NDYgLTIxMiA5NDYgLTIxMCBjdCA5NDYgLTIwOCA5NDcgLTIwNyA5NDggLTIwNiBjdCA5NDggLTIwNiA5NDggLTIwNiA5NzQgLTIwNiBjdCAKKzk3NCAtMjA2IDk3NCAtMjA2IDk3NCAtNTggY3QgOTc0IC0xNiA5ODggNSAxMDE3IDUgY3QgMTA0MSA1IDEwNTkgLTcgMTA3NSAtMzMgY3QgCisxMDc1IC0zMyAxMDc1IC0zMyAxMDY5IC0zOCBjdCAxMDU5IC0yNiAxMDUwIC0yMSAxMDQwIC0yMSBjdCAxMDIyIC0yMSAxMDE1IC0zNCAxMDE1IC02NSBjdCAKKzEwMTUgLTY1IDEwMTUgLTY1IDEwMTUgLTIwNiBjdCAxMDE1IC0yMDYgMTAxNSAtMjA2IDEwNjMgLTIwNiBjdCAxMDYzIC0yMDYgMTA2MyAtMjA2IDEwNjMgLTIyMiBjdCAKK3AgZWYKKzExNjUgLTIyNyBtICAxMTY1IC0yMjcgMTE2NSAtMjI3IDEwOTAgLTIwMCBjdCAxMDkwIC0yMDAgMTA5MCAtMjAwIDEwOTAgLTE5MiBjdCAKKzEwOTAgLTE5MiAxMDkwIC0xOTIgMTA5NCAtMTkzIGN0IDEwOTkgLTE5NCAxMTA2IC0xOTQgMTExMCAtMTk0IGN0IDExMjIgLTE5NCAxMTI2IC0xODYgMTEyNiAtMTY0IGN0IAorMTEyNiAtMTY0IDExMjYgLTE2NCAxMTI2IC00OSBjdCAxMTI2IC0xNCAxMTIxIC04IDEwODggLTggY3QgMTA4OCAtOCAxMDg4IC04IDEwODggMCBjdCAKKzEwODggMCAxMDg4IDAgMTIwMiAwIGN0IDEyMDIgMCAxMjAyIDAgMTIwMiAtOCBjdCAxMTcxIC04IDExNjcgLTE1IDExNjcgLTUwIGN0IDExNjcgLTUwIDExNjcgLTUwIDExNjcgLTIyNSBjdCAKKzExNjcgLTIyNSAxMTY3IC0yMjUgMTE2NSAtMjI3IGN0IHAKKzExNDIgLTMzNyBtICAxMTI5IC0zMzcgMTExOCAtMzI2IDExMTggLTMxMiBjdCAxMTE4IC0yOTggMTEyOCAtMjg3IDExNDIgLTI4NyBjdCAKKzExNTYgLTI4NyAxMTY3IC0yOTggMTE2NyAtMzEyIGN0IDExNjcgLTMyNiAxMTU2IC0zMzcgMTE0MiAtMzM3IGN0IHAgZWYKKzE0NTAgLTIyMiBtICAxNDUwIC0yMjIgMTQ1MCAtMjIyIDEzODMgLTIyMiBjdCAxMzgzIC0yMjIgMTM4MyAtMjIyIDEzODMgLTIxNSBjdCAKKzEzOTggLTIxMyAxNDA1IC0yMDggMTQwNSAtMTk5IGN0IDE0MDUgLTE5NCAxNDA0IC0xODkgMTQwMiAtMTg0IGN0IDE0MDIgLTE4NCAxNDAyIC0xODQgMTM1NSAtNTYgY3QgCisxMzU1IC01NiAxMzU1IC01NiAxMzA1IC0xODIgY3QgMTMwMiAtMTg5IDEzMDEgLTE5NiAxMzAxIC0yMDEgY3QgMTMwMSAtMjEwIDEzMDYgLTIxMyAxMzIzIC0yMTUgY3QgCisxMzIzIC0yMTUgMTMyMyAtMjE1IDEzMjMgLTIyMiBjdCAxMzIzIC0yMjIgMTMyMyAtMjIyIDEyMjggLTIyMiBjdCAxMjI4IC0yMjIgMTIyOCAtMjIyIDEyMjggLTIxNCBjdCAKKzEyNDcgLTIxNCAxMjUwIC0yMDkgMTI3MiAtMTU4IGN0IDEyNzIgLTE1OCAxMjcyIC0xNTggMTMzMCAtMTYgY3QgMTMzMSAtMTMgMTMzMyAtMTAgMTMzNCAtNiBjdCAKKzEzMzcgMyAxMzQwIDcgMTM0MyA3IGN0IDEzNDYgNyAxMzQ5IDEgMTM1NiAtMTggY3QgMTM1NiAtMTggMTM1NiAtMTggMTQxOCAtMTc2IGN0IAorMTQzMyAtMjEwIDE0MzUgLTIxMyAxNDUwIC0yMTUgY3QgMTQ1MCAtMjE1IDE0NTAgLTIxNSAxNDUwIC0yMjIgY3QgcCBlZgorMTY2MyAtODEgbSAgMTYzOSAtNDMgMTYxOCAtMjkgMTU4NyAtMjkgY3QgMTU2MCAtMjkgMTUzOSAtNDMgMTUyNSAtNzIgY3QgMTUxNiAtOTAgMTUxMyAtMTA3IDE1MTIgLTEzNyBjdCAKKzE1MTIgLTEzNyAxNTEyIC0xMzcgMTY2MSAtMTM3IGN0IDE2NTcgLTE2OSAxNjUyIC0xODMgMTY0MCAtMTk5IGN0IDE2MjYgLTIxNyAxNjAzIC0yMjcgMTU3OCAtMjI3IGN0IAorMTU1NCAtMjI3IDE1MzEgLTIxOCAxNTEzIC0yMDEgY3QgMTQ5MCAtMTgxIDE0NzcgLTE0NiAxNDc3IC0xMDYgY3QgMTQ3NyAtMzcgMTUxMiA1IDE1NjggNSBjdCAKKzE2MTQgNSAxNjUwIC0yNCAxNjcwIC03OCBjdCAxNjcwIC03OCAxNjcwIC03OCAxNjYzIC04MSBjdCBwCisxNTEzIC0xNTMgbSAgMTUxOCAtMTkxIDE1MzUgLTIwOSAxNTY0IC0yMDkgY3QgMTU5NCAtMjA5IDE2MDUgLTE5NiAxNjEyIC0xNTMgY3QgCisxNjEyIC0xNTMgMTYxMiAtMTUzIDE1MTMgLTE1MyBjdCBwIGVmCisxOTU4IC0yMjIgbSAgMTk1OCAtMjIyIDE5NTggLTIyMiAxODk4IC0yMjIgY3QgMTg5OCAtMjIyIDE4OTggLTIyMiAxODk4IC0yNzkgY3QgCisxODk4IC0zMDggMTkwNyAtMzIzIDE5MjYgLTMyMyBjdCAxOTM2IC0zMjMgMTk0MyAtMzE4IDE5NTEgLTMwNCBjdCAxOTU5IC0yOTEgMTk2NSAtMjg2IDE5NzMgLTI4NiBjdCAKKzE5ODQgLTI4NiAxOTkzIC0yOTUgMTk5MyAtMzA2IGN0IDE5OTMgLTMyNCAxOTcyIC0zMzcgMTk0MyAtMzM3IGN0IDE5MTMgLTMzNyAxODg3IC0zMjQgMTg3NSAtMzAxIGN0IAorMTg2MiAtMjc5IDE4NTggLTI2MSAxODU4IC0yMjIgY3QgMTg1OCAtMjIyIDE4NTggLTIyMiAxODE4IC0yMjIgY3QgMTgxOCAtMjIyIDE4MTggLTIyMiAxODE4IC0yMDYgY3QgCisxODE4IC0yMDYgMTgxOCAtMjA2IDE4NTggLTIwNiBjdCAxODU4IC0yMDYgMTg1OCAtMjA2IDE4NTggLTUxIGN0IDE4NTggLTE0IDE4NTMgLTggMTgxOCAtOCBjdCAKKzE4MTggLTggMTgxOCAtOCAxODE4IDAgY3QgMTgxOCAwIDE4MTggMCAxOTQ0IDAgY3QgMTk0NCAwIDE5NDQgMCAxOTQ0IC04IGN0IDE5MDQgLTggMTg5OSAtMTMgMTg5OSAtNTEgY3QgCisxODk5IC01MSAxODk5IC01MSAxODk5IC0yMDYgY3QgMTg5OSAtMjA2IDE4OTkgLTIwNiAxOTU4IC0yMDYgY3QgMTk1OCAtMjA2IDE5NTggLTIwNiAxOTU4IC0yMjIgY3QgCitwIGVmCisyMDU0IC0yMjcgbSAgMjA1NCAtMjI3IDIwNTQgLTIyNyAxOTc5IC0yMDAgY3QgMTk3OSAtMjAwIDE5NzkgLTIwMCAxOTc5IC0xOTIgY3QgCisxOTc5IC0xOTIgMTk3OSAtMTkyIDE5ODMgLTE5MyBjdCAxOTg4IC0xOTQgMTk5NSAtMTk0IDE5OTkgLTE5NCBjdCAyMDExIC0xOTQgMjAxNSAtMTg2IDIwMTUgLTE2NCBjdCAKKzIwMTUgLTE2NCAyMDE1IC0xNjQgMjAxNSAtNDkgY3QgMjAxNSAtMTQgMjAxMCAtOCAxOTc3IC04IGN0IDE5NzcgLTggMTk3NyAtOCAxOTc3IDAgY3QgCisxOTc3IDAgMTk3NyAwIDIwOTEgMCBjdCAyMDkxIDAgMjA5MSAwIDIwOTEgLTggY3QgMjA2MCAtOCAyMDU2IC0xNSAyMDU2IC01MCBjdCAyMDU2IC01MCAyMDU2IC01MCAyMDU2IC0yMjUgY3QgCisyMDU2IC0yMjUgMjA1NiAtMjI1IDIwNTQgLTIyNyBjdCBwCisyMDMxIC0zMzcgbSAgMjAxOCAtMzM3IDIwMDcgLTMyNiAyMDA3IC0zMTIgY3QgMjAwNyAtMjk4IDIwMTcgLTI4NyAyMDMxIC0yODcgY3QgCisyMDQ1IC0yODcgMjA1NiAtMjk4IDIwNTYgLTMxMiBjdCAyMDU2IC0zMjYgMjA0NSAtMzM3IDIwMzEgLTMzNyBjdCBwIGVmCisyMTE3IC0zMDcgbSAgMjExNyAtMzA3IDIxMTcgLTMwNyAyMTIwIC0zMDcgY3QgMjEyNSAtMzA4IDIxMzEgLTMwOCAyMTM1IC0zMDggY3QgCisyMTUxIC0zMDggMjE1NSAtMzAxIDIxNTUgLTI3OCBjdCAyMTU1IC0yNzggMjE1NSAtMjc4IDIxNTUgLTQyIGN0IDIxNTUgLTE1IDIxNDkgLTggMjExOCAtOCBjdCAKKzIxMTggLTggMjExOCAtOCAyMTE4IDAgY3QgMjExOCAwIDIxMTggMCAyMjMyIDAgY3QgMjIzMiAwIDIyMzIgMCAyMjMyIC04IGN0IDIyMDIgLTggMjE5NiAtMTQgMjE5NiAtNDEgY3QgCisyMTk2IC00MSAyMTk2IC00MSAyMTk2IC0zMzYgY3QgMjE5NiAtMzM2IDIxOTYgLTMzNiAyMTk0IC0zMzcgY3QgMjE2OSAtMzI4IDIxNTEgLTMyMyAyMTE3IC0zMTUgY3QgCisyMTE3IC0zMTUgMjExNyAtMzE1IDIxMTcgLTMwNyBjdCBwIGVmCisyMzY3IC0yMjIgbSAgMjM2NyAtMjIyIDIzNjcgLTIyMiAyMzE5IC0yMjIgY3QgMjMxOSAtMjIyIDIzMTkgLTIyMiAyMzE5IC0yNzkgY3QgCisyMzE5IC0yODQgMjMxOCAtMjg2IDIzMTUgLTI4NiBjdCAyMzEyIC0yODEgMjMwOSAtMjc3IDIzMDUgLTI3MiBjdCAyMjg3IC0yNDUgMjI2NiAtMjIxIDIyNTkgLTIxOSBjdCAKKzIyNTMgLTIxNiAyMjUwIC0yMTIgMjI1MCAtMjEwIGN0IDIyNTAgLTIwOCAyMjUxIC0yMDcgMjI1MiAtMjA2IGN0IDIyNTIgLTIwNiAyMjUyIC0yMDYgMjI3OCAtMjA2IGN0IAorMjI3OCAtMjA2IDIyNzggLTIwNiAyMjc4IC01OCBjdCAyMjc4IC0xNiAyMjkyIDUgMjMyMSA1IGN0IDIzNDUgNSAyMzYzIC03IDIzNzkgLTMzIGN0IAorMjM3OSAtMzMgMjM3OSAtMzMgMjM3MyAtMzggY3QgMjM2MyAtMjYgMjM1NCAtMjEgMjM0NCAtMjEgY3QgMjMyNiAtMjEgMjMxOSAtMzQgMjMxOSAtNjUgY3QgCisyMzE5IC02NSAyMzE5IC02NSAyMzE5IC0yMDYgY3QgMjMxOSAtMjA2IDIzMTkgLTIwNiAyMzY3IC0yMDYgY3QgMjM2NyAtMjA2IDIzNjcgLTIwNiAyMzY3IC0yMjIgY3QgCitwIGVmCisyNTgxIC04MSBtICAyNTU3IC00MyAyNTM2IC0yOSAyNTA1IC0yOSBjdCAyNDc4IC0yOSAyNDU3IC00MyAyNDQzIC03MiBjdCAyNDM0IC05MCAyNDMxIC0xMDcgMjQzMCAtMTM3IGN0IAorMjQzMCAtMTM3IDI0MzAgLTEzNyAyNTc5IC0xMzcgY3QgMjU3NSAtMTY5IDI1NzAgLTE4MyAyNTU4IC0xOTkgY3QgMjU0NCAtMjE3IDI1MjEgLTIyNyAyNDk2IC0yMjcgY3QgCisyNDcyIC0yMjcgMjQ0OSAtMjE4IDI0MzEgLTIwMSBjdCAyNDA4IC0xODEgMjM5NSAtMTQ2IDIzOTUgLTEwNiBjdCAyMzk1IC0zNyAyNDMwIDUgMjQ4NiA1IGN0IAorMjUzMiA1IDI1NjggLTI0IDI1ODggLTc4IGN0IDI1ODggLTc4IDI1ODggLTc4IDI1ODEgLTgxIGN0IHAKKzI0MzEgLTE1MyBtICAyNDM2IC0xOTEgMjQ1MyAtMjA5IDI0ODIgLTIwOSBjdCAyNTEyIC0yMDkgMjUyMyAtMTk2IDI1MzAgLTE1MyBjdCAKKzI1MzAgLTE1MyAyNTMwIC0xNTMgMjQzMSAtMTUzIGN0IHAgZWYKKzI2MDcgLTE5MiBtICAyNjE0IC0xOTQgMjYxOSAtMTk0IDI2MjQgLTE5NCBjdCAyNjM2IC0xOTQgMjY0MSAtMTg2IDI2NDEgLTE2NCBjdCAKKzI2NDEgLTE2NCAyNjQxIC0xNjQgMjY0MSAtNDEgY3QgMjY0MSAtMTcgMjYzNyAtMTMgMjYwNiAtNyBjdCAyNjA2IC03IDI2MDYgLTcgMjYwNiAwIGN0IAorMjYwNiAwIDI2MDYgMCAyNzIzIDAgY3QgMjcyMyAwIDI3MjMgMCAyNzIzIC04IGN0IDI2OTAgLTggMjY4MSAtMTUgMjY4MSAtNDQgY3QgMjY4MSAtNDQgMjY4MSAtNDQgMjY4MSAtMTU1IGN0IAorMjY4MSAtMTcxIDI3MDIgLTE5NiAyNzE1IC0xOTYgY3QgMjcxOCAtMTk2IDI3MjMgLTE5MyAyNzI4IC0xODggY3QgMjczNiAtMTgyIDI3NDEgLTE3OSAyNzQ3IC0xNzkgY3QgCisyNzU5IC0xNzkgMjc2NiAtMTg3IDI3NjYgLTIwMSBjdCAyNzY2IC0yMTcgMjc1NiAtMjI3IDI3NDAgLTIyNyBjdCAyNzE5IC0yMjcgMjcwNSAtMjE2IDI2ODEgLTE4MSBjdCAKKzI2ODEgLTE4MSAyNjgxIC0xODEgMjY4MSAtMjI2IGN0IDI2ODEgLTIyNiAyNjgxIC0yMjYgMjY3OSAtMjI3IGN0IDI2NTMgLTIxNiAyNjM2IC0yMTAgMjYwNyAtMjAwIGN0IAorMjYwNyAtMjAwIDI2MDcgLTIwMCAyNjA3IC0xOTIgY3QgcCBlZgorcG9tCitncgorZ3IKK2dzCitncworcHVtCisxMDc1MyA5NDUwIHQKKzkgLTMwNyBtICA5IC0zMDcgOSAtMzA3IDEyIC0zMDcgY3QgMTcgLTMwOCAyMyAtMzA4IDI3IC0zMDggY3QgNDMgLTMwOCA0NyAtMzAxIDQ3IC0yNzggY3QgCis0NyAtMjc4IDQ3IC0yNzggNDcgLTQyIGN0IDQ3IC0xNSA0MSAtOCAxMCAtOCBjdCAxMCAtOCAxMCAtOCAxMCAwIGN0IDEwIDAgMTAgMCAxMjQgMCBjdCAKKzEyNCAwIDEyNCAwIDEyNCAtOCBjdCA5NCAtOCA4OCAtMTQgODggLTQxIGN0IDg4IC00MSA4OCAtNDEgODggLTMzNiBjdCA4OCAtMzM2IDg4IC0zMzYgODYgLTMzNyBjdCAKKzYxIC0zMjggNDMgLTMyMyA5IC0zMTUgY3QgOSAtMzE1IDkgLTMxNSA5IC0zMDcgY3QgcCBlZgorMjU2IC0yMjcgbSAgMTkzIC0yMjcgMTQ5IC0xODAgMTQ5IC0xMTIgY3QgMTQ5IC00NSAxOTQgNSAyNTUgNSBjdCAzMTYgNSAzNjMgLTQ3IDM2MyAtMTE1IGN0IAorMzYzIC0xODAgMzE4IC0yMjcgMjU2IC0yMjcgY3QgcAorMjUwIC0yMTMgbSAgMjkwIC0yMTMgMzE5IC0xNjYgMzE5IC05OCBjdCAzMTkgLTQyIDI5NyAtOSAyNjEgLTkgY3QgMjQyIC05IDIyNCAtMjEgMjE0IC00MCBjdCAKKzIwMCAtNjYgMTkzIC0xMDEgMTkzIC0xMzYgY3QgMTkzIC0xODMgMjE1IC0yMTMgMjUwIC0yMTMgY3QgcCBlZgorNjE3IC0yNSBtICA2MTcgLTI1IDYxNyAtMjUgNjE0IC0yNSBjdCA1OTIgLTI1IDU4NyAtMzAgNTg3IC01MyBjdCA1ODcgLTUzIDU4NyAtNTMgNTg3IC0yMjIgY3QgCis1ODcgLTIyMiA1ODcgLTIyMiA1MTAgLTIyMiBjdCA1MTAgLTIyMiA1MTAgLTIyMiA1MTAgLTIxMyBjdCA1NDAgLTIxMyA1NDYgLTIwOCA1NDYgLTE4MyBjdCAKKzU0NiAtMTgzIDU0NiAtMTgzIDU0NiAtNjcgY3QgNTQ2IC01MyA1NDQgLTQ2IDUzNyAtNDEgY3QgNTI0IC0zMCA1MDkgLTI0IDQ5NCAtMjQgY3QgCis0NzYgLTI0IDQ2MCAtNDEgNDYwIC02MSBjdCA0NjAgLTYxIDQ2MCAtNjEgNDYwIC0yMjIgY3QgNDYwIC0yMjIgNDYwIC0yMjIgMzg5IC0yMjIgY3QgCiszODkgLTIyMiAzODkgLTIyMiAzODkgLTIxNCBjdCA0MTMgLTIxNCA0MTkgLTIwNiA0MTkgLTE4NCBjdCA0MTkgLTE4NCA0MTkgLTE4NCA0MTkgLTU5IGN0IAorNDE5IC0yMCA0NDMgNSA0NzggNSBjdCA0OTYgNSA1MTUgLTMgNTI4IC0xNiBjdCA1MjggLTE2IDUyOCAtMTYgNTQ5IC0zOCBjdCA1NDkgLTM4IDU0OSAtMzggNTQ5IDQgY3QgCis1NDkgNCA1NDkgNCA1NTEgNSBjdCA1NzUgLTUgNTkyIC0xMSA2MTcgLTE4IGN0IDYxNyAtMTggNjE3IC0xOCA2MTcgLTI1IGN0IHAgZWYKKzc5OCA1IG0gIDc5OCA1IDc5OCA1IDg2OSAtMjEgY3QgODY5IC0yMSA4NjkgLTIxIDg2OSAtMjggY3QgODYwIC0yOCA4NTkgLTI4IDg1OCAtMjggY3QgCis4NDAgLTI4IDgzNiAtMzMgODM2IC01NiBjdCA4MzYgLTU2IDgzNiAtNTYgODM2IC0zMzYgY3QgODM2IC0zMzYgODM2IC0zMzYgODM0IC0zMzcgY3QgCis4MTEgLTMyOSA3OTQgLTMyNCA3NjMgLTMxNSBjdCA3NjMgLTMxNSA3NjMgLTMxNSA3NjMgLTMwOCBjdCA3NjcgLTMwOCA3NjkgLTMwOCA3NzMgLTMwOCBjdCAKKzc5MSAtMzA4IDc5NiAtMzAzIDc5NiAtMjgzIGN0IDc5NiAtMjgzIDc5NiAtMjgzIDc5NiAtMjA2IGN0IDc3NyAtMjIyIDc2NCAtMjI3IDc0NSAtMjI3IGN0IAorNjg5IC0yMjcgNjQ0IC0xNzEgNjQ0IC0xMDEgY3QgNjQ0IC0zOCA2ODAgNSA3MzQgNSBjdCA3NjEgNSA3NzkgLTUgNzk2IC0yOCBjdCA3OTYgLTI4IDc5NiAtMjggNzk2IDQgY3QgCis3OTYgNCA3OTYgNCA3OTggNSBjdCBwCis3OTYgLTUwIG0gIDc5NiAtNDcgNzkyIC00MSA3ODcgLTM1IGN0IDc3OSAtMjYgNzY3IC0yMSA3NTMgLTIxIGN0IDcxMiAtMjEgNjg2IC02MCA2ODYgLTEyMSBjdCAKKzY4NiAtMTc3IDcwOSAtMjEzIDc0NiAtMjEzIGN0IDc3MiAtMjEzIDc5NiAtMTkwIDc5NiAtMTY0IGN0IDc5NiAtMTY0IDc5NiAtMTY0IDc5NiAtNTAgY3QgCitwIGVmCisxMDM0IC0xNTUgbSAgMTAzNCAtMTU1IDEwMzQgLTE1NSAxMDMyIC0yMjIgY3QgMTAzMiAtMjIyIDEwMzIgLTIyMiAxMDI2IC0yMjIgY3QgCisxMDI2IC0yMjIgMTAyNiAtMjIyIDEwMjUgLTIyMSBjdCAxMDIxIC0yMTggMTAyMCAtMjE3IDEwMTggLTIxNyBjdCAxMDE2IC0yMTcgMTAxMSAtMjE4IDEwMDUgLTIyMSBjdCAKKzk5NSAtMjI1IDk4NCAtMjI3IDk3MiAtMjI3IGN0IDkzMyAtMjI3IDkwNiAtMjAyIDkwNiAtMTY2IGN0IDkwNiAtMTM4IDkyMSAtMTE4IDk2MiAtOTUgY3QgCis5NjIgLTk1IDk2MiAtOTUgOTkwIC03OCBjdCAxMDA3IC02OSAxMDE2IC01NyAxMDE2IC00MSBjdCAxMDE2IC0yMCAxMDAwIC02IDk3NSAtNiBjdCAKKzk1OSAtNiA5NDQgLTEyIDkzNSAtMjMgY3QgOTI1IC0zNSA5MjAgLTQ3IDkxNCAtNzUgY3QgOTE0IC03NSA5MTQgLTc1IDkwNiAtNzUgY3QgCis5MDYgLTc1IDkwNiAtNzUgOTA2IDIgY3QgOTA2IDIgOTA2IDIgOTEyIDIgY3QgOTE2IC0zIDkxOCAtNCA5MjQgLTQgY3QgOTI4IC00IDkzNSAtMyA5NDYgMCBjdCAKKzk1OSAzIDk3MyA1IDk4MSA1IGN0IDEwMTggNSAxMDQ5IC0yNCAxMDQ5IC01OCBjdCAxMDQ5IC04MyAxMDM4IC05OSAxMDA5IC0xMTcgY3QgCisxMDA5IC0xMTcgMTAwOSAtMTE3IDk1NyAtMTQ4IGN0IDk0MyAtMTU2IDkzNiAtMTY5IDkzNiAtMTgyIGN0IDkzNiAtMjAyIDk1MSAtMjE2IDk3MyAtMjE2IGN0IAorMTAwMSAtMjE2IDEwMTUgLTE5OSAxMDI2IC0xNTUgY3QgMTAyNiAtMTU1IDEwMjYgLTE1NSAxMDM0IC0xNTUgY3QgcCBlZgorMTA3OSAtMTk1IG0gIDEwODQgLTE5NSAxMDg3IC0xOTUgMTA5MSAtMTk1IGN0IDExMDggLTE5NSAxMTExIC0xOTAgMTExMSAtMTY3IGN0IAorMTExMSAtMTY3IDExMTEgLTE2NyAxMTExIDY1IGN0IDExMTEgOTAgMTEwNiA5NiAxMDc3IDk5IGN0IDEwNzcgOTkgMTA3NyA5OSAxMDc3IDEwNyBjdCAKKzEwNzcgMTA3IDEwNzcgMTA3IDExOTUgMTA3IGN0IDExOTUgMTA3IDExOTUgMTA3IDExOTUgOTggY3QgMTE1OCA5OCAxMTUyIDkzIDExNTIgNjEgY3QgCisxMTUyIDYxIDExNTIgNjEgMTE1MiAtMTYgY3QgMTE2OSAwIDExODEgNSAxMjAxIDUgY3QgMTI1OCA1IDEzMDMgLTUwIDEzMDMgLTEyMiBjdCAKKzEzMDMgLTE4MyAxMjY5IC0yMjcgMTIyMiAtMjI3IGN0IDExOTUgLTIyNyAxMTczIC0yMTUgMTE1MiAtMTg5IGN0IDExNTIgLTE4OSAxMTUyIC0xODkgMTE1MiAtMjI2IGN0IAorMTE1MiAtMjI2IDExNTIgLTIyNiAxMTQ5IC0yMjcgY3QgMTEyMyAtMjE3IDExMDYgLTIxMCAxMDc5IC0yMDIgY3QgMTA3OSAtMjAyIDEwNzkgLTIwMiAxMDc5IC0xOTUgY3QgCitwCisxMTUyIC0xNjUgbSAgMTE1MiAtMTgwIDExNzkgLTE5NyAxMjAxIC0xOTcgY3QgMTIzNyAtMTk3IDEyNjEgLTE2MCAxMjYxIC0xMDMgY3QgCisxMjYxIC00OCAxMjM3IC0xMSAxMjAyIC0xMSBjdCAxMTgwIC0xMSAxMTUyIC0yOSAxMTUyIC00NCBjdCAxMTUyIC00NCAxMTUyIC00NCAxMTUyIC0xNjUgY3QgCitwIGVmCisxNTIzIC04MSBtICAxNDk5IC00MyAxNDc4IC0yOSAxNDQ3IC0yOSBjdCAxNDIwIC0yOSAxMzk5IC00MyAxMzg1IC03MiBjdCAxMzc2IC05MCAxMzczIC0xMDcgMTM3MiAtMTM3IGN0IAorMTM3MiAtMTM3IDEzNzIgLTEzNyAxNTIxIC0xMzcgY3QgMTUxNyAtMTY5IDE1MTIgLTE4MyAxNTAwIC0xOTkgY3QgMTQ4NiAtMjE3IDE0NjMgLTIyNyAxNDM4IC0yMjcgY3QgCisxNDE0IC0yMjcgMTM5MSAtMjE4IDEzNzMgLTIwMSBjdCAxMzUwIC0xODEgMTMzNyAtMTQ2IDEzMzcgLTEwNiBjdCAxMzM3IC0zNyAxMzcyIDUgMTQyOCA1IGN0IAorMTQ3NCA1IDE1MTAgLTI0IDE1MzAgLTc4IGN0IDE1MzAgLTc4IDE1MzAgLTc4IDE1MjMgLTgxIGN0IHAKKzEzNzMgLTE1MyBtICAxMzc4IC0xOTEgMTM5NSAtMjA5IDE0MjQgLTIwOSBjdCAxNDU0IC0yMDkgMTQ2NSAtMTk2IDE0NzIgLTE1MyBjdCAKKzE0NzIgLTE1MyAxNDcyIC0xNTMgMTM3MyAtMTUzIGN0IHAgZWYKKzE3NTkgLTMyIG0gIDE3NTEgLTI2IDE3NDUgLTIzIDE3MzggLTIzIGN0IDE3MjcgLTIzIDE3MjMgLTMwIDE3MjMgLTUyIGN0IDE3MjMgLTUyIDE3MjMgLTUyIDE3MjMgLTE0OCBjdCAKKzE3MjMgLTE3MyAxNzIxIC0xODggMTcxMyAtMjAwIGN0IDE3MDMgLTIxOCAxNjgyIC0yMjcgMTY1MyAtMjI3IGN0IDE2MDggLTIyNyAxNTcyIC0yMDMgMTU3MiAtMTcxIGN0IAorMTU3MiAtMTYwIDE1ODIgLTE1MCAxNTkzIC0xNTAgY3QgMTYwNSAtMTUwIDE2MTUgLTE2MCAxNjE1IC0xNzEgY3QgMTYxNSAtMTczIDE2MTQgLTE3NSAxNjE0IC0xNzkgY3QgCisxNjEzIC0xODMgMTYxMiAtMTg3IDE2MTIgLTE5MSBjdCAxNjEyIC0yMDQgMTYyOCAtMjE1IDE2NDcgLTIxNSBjdCAxNjcxIC0yMTUgMTY4NCAtMjAxIDE2ODQgLTE3NCBjdCAKKzE2ODQgLTE3NCAxNjg0IC0xNzQgMTY4NCAtMTQ0IGN0IDE2MDkgLTExMyAxNjAxIC0xMDkgMTU4MCAtOTAgY3QgMTU3MCAtODEgMTU2MyAtNjQgMTU2MyAtNDggY3QgCisxNTYzIC0xNyAxNTg0IDUgMTYxNCA1IGN0IDE2MzUgNSAxNjU1IC01IDE2ODQgLTMxIGN0IDE2ODcgLTUgMTY5NiA1IDE3MTUgNSBjdCAxNzMyIDUgMTc0MiAtMSAxNzU5IC0yMCBjdCAKKzE3NTkgLTIwIDE3NTkgLTIwIDE3NTkgLTMyIGN0IHAKKzE2ODQgLTYxIG0gIDE2ODQgLTQ1IDE2ODIgLTQxIDE2NzEgLTM1IGN0IDE2NjAgLTI4IDE2NDYgLTI0IDE2MzYgLTI0IGN0IDE2MTkgLTI0IDE2MDYgLTQwIDE2MDYgLTYyIGN0IAorMTYwNiAtNjIgMTYwNiAtNjIgMTYwNiAtNjMgY3QgMTYwNiAtOTIgMTYyNSAtMTEwIDE2ODQgLTEzMiBjdCAxNjg0IC0xMzIgMTY4NCAtMTMyIDE2ODQgLTYxIGN0IAorcCBlZgorMTc2OCAtMzA3IG0gIDE3NzUgLTMwNyAxNzc5IC0zMDggMTc4NCAtMzA4IGN0IDE4MDAgLTMwOCAxODA1IC0zMDIgMTgwNSAtMjc4IGN0IAorMTgwNSAtMjc4IDE4MDUgLTI3OCAxODA1IC00MCBjdCAxODA1IC0xNSAxODAzIC0xMyAxNzY4IC03IGN0IDE3NjggLTcgMTc2OCAtNyAxNzY4IDAgY3QgCisxNzY4IDAgMTc2OCAwIDE4ODIgMCBjdCAxODgyIDAgMTg4MiAwIDE4ODIgLTggY3QgMTg4MiAtOCAxODgyIC04IDE4NzIgLTggY3QgMTg1MyAtOCAxODQ1IC0xNSAxODQ1IC0zMiBjdCAKKzE4NDUgLTMyIDE4NDUgLTMyIDE4NDUgLTEyNCBjdCAxODQ1IC0xMjQgMTg0NSAtMTI0IDE5MTMgLTMyIGN0IDE5MTMgLTMyIDE5MTMgLTMyIDE5MTUgLTMwIGN0IAorMTkxNiAtMjggMTkxNyAtMjcgMTkxOCAtMjUgY3QgMTkyMiAtMjAgMTkyMyAtMTcgMTkyMyAtMTUgY3QgMTkyMyAtMTAgMTkxOSAtNyAxOTEzIC03IGN0IAorMTkxMyAtNyAxOTEzIC03IDE5MDQgLTcgY3QgMTkwNCAtNyAxOTA0IC03IDE5MDQgMCBjdCAxOTA0IDAgMTkwNCAwIDIwMDkgMCBjdCAyMDA5IDAgMjAwOSAwIDIwMDkgLTggY3QgCisxOTg4IC04IDE5NzMgLTE4IDE5NTMgLTQzIGN0IDE5NTMgLTQzIDE5NTMgLTQzIDE4NzkgLTEzOSBjdCAxODc5IC0xMzkgMTg3OSAtMTM5IDE4OTMgLTE1MiBjdCAKKzE5MjcgLTE4NSAxOTU3IC0yMDggMTk3MSAtMjEyIGN0IDE5NzkgLTIxNCAxOTg1IC0yMTUgMTk5NCAtMjE1IGN0IDE5OTQgLTIxNSAxOTk0IC0yMTUgMTk5NyAtMjE1IGN0IAorMTk5NyAtMjE1IDE5OTcgLTIxNSAxOTk3IC0yMjIgY3QgMTk5NyAtMjIyIDE5OTcgLTIyMiAxODk5IC0yMjIgY3QgMTg5OSAtMjIyIDE4OTkgLTIyMiAxODk5IC0yMTUgY3QgCisxOTE4IC0yMTUgMTkyMyAtMjEzIDE5MjMgLTIwNiBjdCAxOTIzIC0yMDIgMTkxOCAtMTk1IDE5MTIgLTE4OSBjdCAxOTEyIC0xODkgMTkxMiAtMTg5IDE4NDUgLTEyOSBjdCAKKzE4NDUgLTEyOSAxODQ1IC0xMjkgMTg0NSAtMzM2IGN0IDE4NDUgLTMzNiAxODQ1IC0zMzYgMTg0MyAtMzM3IGN0IDE4MjUgLTMzMSAxODExIC0zMjcgMTc4MyAtMzE5IGN0IAorMTc4MyAtMzE5IDE3ODMgLTMxOSAxNzY4IC0zMTUgY3QgMTc2OCAtMzE1IDE3NjggLTMxNSAxNzY4IC0zMDcgY3QgcCBlZgorMjIxNyAtODEgbSAgMjE5MyAtNDMgMjE3MiAtMjkgMjE0MSAtMjkgY3QgMjExNCAtMjkgMjA5MyAtNDMgMjA3OSAtNzIgY3QgMjA3MCAtOTAgMjA2NyAtMTA3IDIwNjYgLTEzNyBjdCAKKzIwNjYgLTEzNyAyMDY2IC0xMzcgMjIxNSAtMTM3IGN0IDIyMTEgLTE2OSAyMjA2IC0xODMgMjE5NCAtMTk5IGN0IDIxODAgLTIxNyAyMTU3IC0yMjcgMjEzMiAtMjI3IGN0IAorMjEwOCAtMjI3IDIwODUgLTIxOCAyMDY3IC0yMDEgY3QgMjA0NCAtMTgxIDIwMzEgLTE0NiAyMDMxIC0xMDYgY3QgMjAzMSAtMzcgMjA2NiA1IDIxMjIgNSBjdCAKKzIxNjggNSAyMjA0IC0yNCAyMjI0IC03OCBjdCAyMjI0IC03OCAyMjI0IC03OCAyMjE3IC04MSBjdCBwCisyMDY3IC0xNTMgbSAgMjA3MiAtMTkxIDIwODkgLTIwOSAyMTE4IC0yMDkgY3QgMjE0OCAtMjA5IDIxNTkgLTE5NiAyMTY2IC0xNTMgY3QgCisyMTY2IC0xNTMgMjE2NiAtMTUzIDIwNjcgLTE1MyBjdCBwIGVmCisyMjQyIC0xOTIgbSAgMjI0OSAtMTk0IDIyNTQgLTE5NCAyMjU5IC0xOTQgY3QgMjI3MSAtMTk0IDIyNzYgLTE4NiAyMjc2IC0xNjQgY3QgCisyMjc2IC0xNjQgMjI3NiAtMTY0IDIyNzYgLTQxIGN0IDIyNzYgLTE3IDIyNzIgLTEzIDIyNDEgLTcgY3QgMjI0MSAtNyAyMjQxIC03IDIyNDEgMCBjdCAKKzIyNDEgMCAyMjQxIDAgMjM1OCAwIGN0IDIzNTggMCAyMzU4IDAgMjM1OCAtOCBjdCAyMzI1IC04IDIzMTYgLTE1IDIzMTYgLTQ0IGN0IDIzMTYgLTQ0IDIzMTYgLTQ0IDIzMTYgLTE1NSBjdCAKKzIzMTYgLTE3MSAyMzM3IC0xOTYgMjM1MCAtMTk2IGN0IDIzNTMgLTE5NiAyMzU4IC0xOTMgMjM2MyAtMTg4IGN0IDIzNzEgLTE4MiAyMzc2IC0xNzkgMjM4MiAtMTc5IGN0IAorMjM5NCAtMTc5IDI0MDEgLTE4NyAyNDAxIC0yMDEgY3QgMjQwMSAtMjE3IDIzOTEgLTIyNyAyMzc1IC0yMjcgY3QgMjM1NCAtMjI3IDIzNDAgLTIxNiAyMzE2IC0xODEgY3QgCisyMzE2IC0xODEgMjMxNiAtMTgxIDIzMTYgLTIyNiBjdCAyMzE2IC0yMjYgMjMxNiAtMjI2IDIzMTQgLTIyNyBjdCAyMjg4IC0yMTYgMjI3MSAtMjEwIDIyNDIgLTIwMCBjdCAKKzIyNDIgLTIwMCAyMjQyIC0yMDAgMjI0MiAtMTkyIGN0IHAgZWYKK3BvbQorZ3IKK2dyCitncworZ3MKK3B1bQorNDYxOSAxNjI1MCB0CisxMjEgLTIyNyBtICA1OCAtMjI3IDE0IC0xODAgMTQgLTExMiBjdCAxNCAtNDUgNTkgNSAxMjAgNSBjdCAxODEgNSAyMjggLTQ3IDIyOCAtMTE1IGN0IAorMjI4IC0xODAgMTgzIC0yMjcgMTIxIC0yMjcgY3QgcAorMTE1IC0yMTMgbSAgMTU1IC0yMTMgMTg0IC0xNjYgMTg0IC05OCBjdCAxODQgLTQyIDE2MiAtOSAxMjYgLTkgY3QgMTA3IC05IDg5IC0yMSA3OSAtNDAgY3QgCis2NSAtNjYgNTggLTEwMSA1OCAtMTM2IGN0IDU4IC0xODMgODAgLTIxMyAxMTUgLTIxMyBjdCBwIGVmCis0ODIgLTI1IG0gIDQ4MiAtMjUgNDgyIC0yNSA0NzkgLTI1IGN0IDQ1NyAtMjUgNDUyIC0zMCA0NTIgLTUzIGN0IDQ1MiAtNTMgNDUyIC01MyA0NTIgLTIyMiBjdCAKKzQ1MiAtMjIyIDQ1MiAtMjIyIDM3NSAtMjIyIGN0IDM3NSAtMjIyIDM3NSAtMjIyIDM3NSAtMjEzIGN0IDQwNSAtMjEzIDQxMSAtMjA4IDQxMSAtMTgzIGN0IAorNDExIC0xODMgNDExIC0xODMgNDExIC02NyBjdCA0MTEgLTUzIDQwOSAtNDYgNDAyIC00MSBjdCAzODkgLTMwIDM3NCAtMjQgMzU5IC0yNCBjdCAKKzM0MSAtMjQgMzI1IC00MSAzMjUgLTYxIGN0IDMyNSAtNjEgMzI1IC02MSAzMjUgLTIyMiBjdCAzMjUgLTIyMiAzMjUgLTIyMiAyNTQgLTIyMiBjdCAKKzI1NCAtMjIyIDI1NCAtMjIyIDI1NCAtMjE0IGN0IDI3OCAtMjE0IDI4NCAtMjA2IDI4NCAtMTg0IGN0IDI4NCAtMTg0IDI4NCAtMTg0IDI4NCAtNTkgY3QgCisyODQgLTIwIDMwOCA1IDM0MyA1IGN0IDM2MSA1IDM4MCAtMyAzOTMgLTE2IGN0IDM5MyAtMTYgMzkzIC0xNiA0MTQgLTM4IGN0IDQxNCAtMzggNDE0IC0zOCA0MTQgNCBjdCAKKzQxNCA0IDQxNCA0IDQxNiA1IGN0IDQ0MCAtNSA0NTcgLTExIDQ4MiAtMTggY3QgNDgyIC0xOCA0ODIgLTE4IDQ4MiAtMjUgY3QgcCBlZgorNjE4IC0yMjIgbSAgNjE4IC0yMjIgNjE4IC0yMjIgNTcwIC0yMjIgY3QgNTcwIC0yMjIgNTcwIC0yMjIgNTcwIC0yNzkgY3QgNTcwIC0yODQgNTY5IC0yODYgNTY2IC0yODYgY3QgCis1NjMgLTI4MSA1NjAgLTI3NyA1NTYgLTI3MiBjdCA1MzggLTI0NSA1MTcgLTIyMSA1MTAgLTIxOSBjdCA1MDQgLTIxNiA1MDEgLTIxMiA1MDEgLTIxMCBjdCAKKzUwMSAtMjA4IDUwMiAtMjA3IDUwMyAtMjA2IGN0IDUwMyAtMjA2IDUwMyAtMjA2IDUyOSAtMjA2IGN0IDUyOSAtMjA2IDUyOSAtMjA2IDUyOSAtNTggY3QgCis1MjkgLTE2IDU0MyA1IDU3MiA1IGN0IDU5NiA1IDYxNCAtNyA2MzAgLTMzIGN0IDYzMCAtMzMgNjMwIC0zMyA2MjQgLTM4IGN0IDYxNCAtMjYgNjA1IC0yMSA1OTUgLTIxIGN0IAorNTc3IC0yMSA1NzAgLTM0IDU3MCAtNjUgY3QgNTcwIC02NSA1NzAgLTY1IDU3MCAtMjA2IGN0IDU3MCAtMjA2IDU3MCAtMjA2IDYxOCAtMjA2IGN0IAorNjE4IC0yMDYgNjE4IC0yMDYgNjE4IC0yMjIgY3QgcCBlZgorNjM5IC0xOTUgbSAgNjQ0IC0xOTUgNjQ3IC0xOTUgNjUxIC0xOTUgY3QgNjY4IC0xOTUgNjcxIC0xOTAgNjcxIC0xNjcgY3QgNjcxIC0xNjcgNjcxIC0xNjcgNjcxIDY1IGN0IAorNjcxIDkwIDY2NiA5NiA2MzcgOTkgY3QgNjM3IDk5IDYzNyA5OSA2MzcgMTA3IGN0IDYzNyAxMDcgNjM3IDEwNyA3NTUgMTA3IGN0IDc1NSAxMDcgNzU1IDEwNyA3NTUgOTggY3QgCis3MTggOTggNzEyIDkzIDcxMiA2MSBjdCA3MTIgNjEgNzEyIDYxIDcxMiAtMTYgY3QgNzI5IDAgNzQxIDUgNzYxIDUgY3QgODE4IDUgODYzIC01MCA4NjMgLTEyMiBjdCAKKzg2MyAtMTgzIDgyOSAtMjI3IDc4MiAtMjI3IGN0IDc1NSAtMjI3IDczMyAtMjE1IDcxMiAtMTg5IGN0IDcxMiAtMTg5IDcxMiAtMTg5IDcxMiAtMjI2IGN0IAorNzEyIC0yMjYgNzEyIC0yMjYgNzA5IC0yMjcgY3QgNjgzIC0yMTcgNjY2IC0yMTAgNjM5IC0yMDIgY3QgNjM5IC0yMDIgNjM5IC0yMDIgNjM5IC0xOTUgY3QgCitwCis3MTIgLTE2NSBtICA3MTIgLTE4MCA3MzkgLTE5NyA3NjEgLTE5NyBjdCA3OTcgLTE5NyA4MjEgLTE2MCA4MjEgLTEwMyBjdCA4MjEgLTQ4IDc5NyAtMTEgNzYyIC0xMSBjdCAKKzc0MCAtMTEgNzEyIC0yOSA3MTIgLTQ0IGN0IDcxMiAtNDQgNzEyIC00NCA3MTIgLTE2NSBjdCBwIGVmCisxMTE3IC0yNSBtICAxMTE3IC0yNSAxMTE3IC0yNSAxMTE0IC0yNSBjdCAxMDkyIC0yNSAxMDg3IC0zMCAxMDg3IC01MyBjdCAxMDg3IC01MyAxMDg3IC01MyAxMDg3IC0yMjIgY3QgCisxMDg3IC0yMjIgMTA4NyAtMjIyIDEwMTAgLTIyMiBjdCAxMDEwIC0yMjIgMTAxMCAtMjIyIDEwMTAgLTIxMyBjdCAxMDQwIC0yMTMgMTA0NiAtMjA4IDEwNDYgLTE4MyBjdCAKKzEwNDYgLTE4MyAxMDQ2IC0xODMgMTA0NiAtNjcgY3QgMTA0NiAtNTMgMTA0NCAtNDYgMTAzNyAtNDEgY3QgMTAyNCAtMzAgMTAwOSAtMjQgOTk0IC0yNCBjdCAKKzk3NiAtMjQgOTYwIC00MSA5NjAgLTYxIGN0IDk2MCAtNjEgOTYwIC02MSA5NjAgLTIyMiBjdCA5NjAgLTIyMiA5NjAgLTIyMiA4ODkgLTIyMiBjdCAKKzg4OSAtMjIyIDg4OSAtMjIyIDg4OSAtMjE0IGN0IDkxMyAtMjE0IDkxOSAtMjA2IDkxOSAtMTg0IGN0IDkxOSAtMTg0IDkxOSAtMTg0IDkxOSAtNTkgY3QgCis5MTkgLTIwIDk0MyA1IDk3OCA1IGN0IDk5NiA1IDEwMTUgLTMgMTAyOCAtMTYgY3QgMTAyOCAtMTYgMTAyOCAtMTYgMTA0OSAtMzggY3QgCisxMDQ5IC0zOCAxMDQ5IC0zOCAxMDQ5IDQgY3QgMTA0OSA0IDEwNDkgNCAxMDUxIDUgY3QgMTA3NSAtNSAxMDkyIC0xMSAxMTE3IC0xOCBjdCAKKzExMTcgLTE4IDExMTcgLTE4IDExMTcgLTI1IGN0IHAgZWYKKzEyNTMgLTIyMiBtICAxMjUzIC0yMjIgMTI1MyAtMjIyIDEyMDUgLTIyMiBjdCAxMjA1IC0yMjIgMTIwNSAtMjIyIDEyMDUgLTI3OSBjdCAKKzEyMDUgLTI4NCAxMjA0IC0yODYgMTIwMSAtMjg2IGN0IDExOTggLTI4MSAxMTk1IC0yNzcgMTE5MSAtMjcyIGN0IDExNzMgLTI0NSAxMTUyIC0yMjEgMTE0NSAtMjE5IGN0IAorMTEzOSAtMjE2IDExMzYgLTIxMiAxMTM2IC0yMTAgY3QgMTEzNiAtMjA4IDExMzcgLTIwNyAxMTM4IC0yMDYgY3QgMTEzOCAtMjA2IDExMzggLTIwNiAxMTY0IC0yMDYgY3QgCisxMTY0IC0yMDYgMTE2NCAtMjA2IDExNjQgLTU4IGN0IDExNjQgLTE2IDExNzggNSAxMjA3IDUgY3QgMTIzMSA1IDEyNDkgLTcgMTI2NSAtMzMgY3QgCisxMjY1IC0zMyAxMjY1IC0zMyAxMjU5IC0zOCBjdCAxMjQ5IC0yNiAxMjQwIC0yMSAxMjMwIC0yMSBjdCAxMjEyIC0yMSAxMjA1IC0zNCAxMjA1IC02NSBjdCAKKzEyMDUgLTY1IDEyMDUgLTY1IDEyMDUgLTIwNiBjdCAxMjA1IC0yMDYgMTIwNSAtMjA2IDEyNTMgLTIwNiBjdCAxMjUzIC0yMDYgMTI1MyAtMjA2IDEyNTMgLTIyMiBjdCAKK3AgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzQxMzggMTY4NTEgdAorMTQzIC0zMzQgbSAgMTA3IC0zMTAgOTIgLTI5NyA3NSAtMjc0IGN0IDQwIC0yMzEgMjMgLTE4MiAyMyAtMTI0IGN0IDIzIC02MiA0MSAtMTMgODQgMzcgY3QgCisxMDQgNjEgMTE2IDcyIDE0MSA4NyBjdCAxNDEgODcgMTQxIDg3IDE0NyA3OSBjdCAxMDggNDggOTUgMzEgODIgLTYgY3QgNzAgLTM5IDY1IC03NiA2NSAtMTI2IGN0IAorNjUgLTE3OCA3MSAtMjE4IDg0IC0yNDkgY3QgOTggLTI3OSAxMTIgLTI5NyAxNDcgLTMyNiBjdCAxNDcgLTMyNiAxNDcgLTMyNiAxNDMgLTMzNCBjdCAKK3AgZWYKKzI4OCAtMjIyIG0gIDI4OCAtMjIyIDI4OCAtMjIyIDI0MCAtMjIyIGN0IDI0MCAtMjIyIDI0MCAtMjIyIDI0MCAtMjc5IGN0IDI0MCAtMjg0IDIzOSAtMjg2IDIzNiAtMjg2IGN0IAorMjMzIC0yODEgMjMwIC0yNzcgMjI2IC0yNzIgY3QgMjA4IC0yNDUgMTg3IC0yMjEgMTgwIC0yMTkgY3QgMTc0IC0yMTYgMTcxIC0yMTIgMTcxIC0yMTAgY3QgCisxNzEgLTIwOCAxNzIgLTIwNyAxNzMgLTIwNiBjdCAxNzMgLTIwNiAxNzMgLTIwNiAxOTkgLTIwNiBjdCAxOTkgLTIwNiAxOTkgLTIwNiAxOTkgLTU4IGN0IAorMTk5IC0xNiAyMTMgNSAyNDIgNSBjdCAyNjYgNSAyODQgLTcgMzAwIC0zMyBjdCAzMDAgLTMzIDMwMCAtMzMgMjk0IC0zOCBjdCAyODQgLTI2IDI3NSAtMjEgMjY1IC0yMSBjdCAKKzI0NyAtMjEgMjQwIC0zNCAyNDAgLTY1IGN0IDI0MCAtNjUgMjQwIC02NSAyNDAgLTIwNiBjdCAyNDAgLTIwNiAyNDAgLTIwNiAyODggLTIwNiBjdCAKKzI4OCAtMjA2IDI4OCAtMjA2IDI4OCAtMjIyIGN0IHAgZWYKKzQyNiAtMjI3IG0gIDM2MyAtMjI3IDMxOSAtMTgwIDMxOSAtMTEyIGN0IDMxOSAtNDUgMzY0IDUgNDI1IDUgY3QgNDg2IDUgNTMzIC00NyA1MzMgLTExNSBjdCAKKzUzMyAtMTgwIDQ4OCAtMjI3IDQyNiAtMjI3IGN0IHAKKzQyMCAtMjEzIG0gIDQ2MCAtMjEzIDQ4OSAtMTY2IDQ4OSAtOTggY3QgNDg5IC00MiA0NjcgLTkgNDMxIC05IGN0IDQxMiAtOSAzOTQgLTIxIDM4NCAtNDAgY3QgCiszNzAgLTY2IDM2MyAtMTAxIDM2MyAtMTM2IGN0IDM2MyAtMTgzIDM4NSAtMjEzIDQyMCAtMjEzIGN0IHAgZWYKKzgyNyAtMjIyIG0gIDgyNyAtMjIyIDgyNyAtMjIyIDc2NyAtMjIyIGN0IDc2NyAtMjIyIDc2NyAtMjIyIDc2NyAtMjc5IGN0IDc2NyAtMzA4IDc3NiAtMzIzIDc5NSAtMzIzIGN0IAorODA1IC0zMjMgODEyIC0zMTggODIwIC0zMDQgY3QgODI4IC0yOTEgODM0IC0yODYgODQyIC0yODYgY3QgODUzIC0yODYgODYyIC0yOTUgODYyIC0zMDYgY3QgCis4NjIgLTMyNCA4NDEgLTMzNyA4MTIgLTMzNyBjdCA3ODIgLTMzNyA3NTYgLTMyNCA3NDQgLTMwMSBjdCA3MzEgLTI3OSA3MjcgLTI2MSA3MjcgLTIyMiBjdCAKKzcyNyAtMjIyIDcyNyAtMjIyIDY4NyAtMjIyIGN0IDY4NyAtMjIyIDY4NyAtMjIyIDY4NyAtMjA2IGN0IDY4NyAtMjA2IDY4NyAtMjA2IDcyNyAtMjA2IGN0IAorNzI3IC0yMDYgNzI3IC0yMDYgNzI3IC01MSBjdCA3MjcgLTE0IDcyMiAtOCA2ODcgLTggY3QgNjg3IC04IDY4NyAtOCA2ODcgMCBjdCA2ODcgMCA2ODcgMCA4MTMgMCBjdCAKKzgxMyAwIDgxMyAwIDgxMyAtOCBjdCA3NzMgLTggNzY4IC0xMyA3NjggLTUxIGN0IDc2OCAtNTEgNzY4IC01MSA3NjggLTIwNiBjdCA3NjggLTIwNiA3NjggLTIwNiA4MjcgLTIwNiBjdCAKKzgyNyAtMjA2IDgyNyAtMjA2IDgyNyAtMjIyIGN0IHAgZWYKKzEwNTIgLTMyIG0gIDEwNDQgLTI2IDEwMzggLTIzIDEwMzEgLTIzIGN0IDEwMjAgLTIzIDEwMTYgLTMwIDEwMTYgLTUyIGN0IDEwMTYgLTUyIDEwMTYgLTUyIDEwMTYgLTE0OCBjdCAKKzEwMTYgLTE3MyAxMDE0IC0xODggMTAwNiAtMjAwIGN0IDk5NiAtMjE4IDk3NSAtMjI3IDk0NiAtMjI3IGN0IDkwMSAtMjI3IDg2NSAtMjAzIDg2NSAtMTcxIGN0IAorODY1IC0xNjAgODc1IC0xNTAgODg2IC0xNTAgY3QgODk4IC0xNTAgOTA4IC0xNjAgOTA4IC0xNzEgY3QgOTA4IC0xNzMgOTA3IC0xNzUgOTA3IC0xNzkgY3QgCis5MDYgLTE4MyA5MDUgLTE4NyA5MDUgLTE5MSBjdCA5MDUgLTIwNCA5MjEgLTIxNSA5NDAgLTIxNSBjdCA5NjQgLTIxNSA5NzcgLTIwMSA5NzcgLTE3NCBjdCAKKzk3NyAtMTc0IDk3NyAtMTc0IDk3NyAtMTQ0IGN0IDkwMiAtMTEzIDg5NCAtMTA5IDg3MyAtOTAgY3QgODYzIC04MSA4NTYgLTY0IDg1NiAtNDggY3QgCis4NTYgLTE3IDg3NyA1IDkwNyA1IGN0IDkyOCA1IDk0OCAtNSA5NzcgLTMxIGN0IDk4MCAtNSA5ODkgNSAxMDA4IDUgY3QgMTAyNSA1IDEwMzUgLTEgMTA1MiAtMjAgY3QgCisxMDUyIC0yMCAxMDUyIC0yMCAxMDUyIC0zMiBjdCBwCis5NzcgLTYxIG0gIDk3NyAtNDUgOTc1IC00MSA5NjQgLTM1IGN0IDk1MyAtMjggOTM5IC0yNCA5MjkgLTI0IGN0IDkxMiAtMjQgODk5IC00MCA4OTkgLTYyIGN0IAorODk5IC02MiA4OTkgLTYyIDg5OSAtNjMgY3QgODk5IC05MiA5MTggLTExMCA5NzcgLTEzMiBjdCA5NzcgLTEzMiA5NzcgLTEzMiA5NzcgLTYxIGN0IAorcCBlZgorMTA2MSAtMTkyIG0gIDEwNjggLTE5NCAxMDczIC0xOTQgMTA3OCAtMTk0IGN0IDEwOTAgLTE5NCAxMDk1IC0xODYgMTA5NSAtMTY0IGN0IAorMTA5NSAtMTY0IDEwOTUgLTE2NCAxMDk1IC00MSBjdCAxMDk1IC0xNyAxMDkxIC0xMyAxMDYwIC03IGN0IDEwNjAgLTcgMTA2MCAtNyAxMDYwIDAgY3QgCisxMDYwIDAgMTA2MCAwIDExNzcgMCBjdCAxMTc3IDAgMTE3NyAwIDExNzcgLTggY3QgMTE0NCAtOCAxMTM1IC0xNSAxMTM1IC00NCBjdCAxMTM1IC00NCAxMTM1IC00NCAxMTM1IC0xNTUgY3QgCisxMTM1IC0xNzEgMTE1NiAtMTk2IDExNjkgLTE5NiBjdCAxMTcyIC0xOTYgMTE3NyAtMTkzIDExODIgLTE4OCBjdCAxMTkwIC0xODIgMTE5NSAtMTc5IDEyMDEgLTE3OSBjdCAKKzEyMTMgLTE3OSAxMjIwIC0xODcgMTIyMCAtMjAxIGN0IDEyMjAgLTIxNyAxMjEwIC0yMjcgMTE5NCAtMjI3IGN0IDExNzMgLTIyNyAxMTU5IC0yMTYgMTEzNSAtMTgxIGN0IAorMTEzNSAtMTgxIDExMzUgLTE4MSAxMTM1IC0yMjYgY3QgMTEzNSAtMjI2IDExMzUgLTIyNiAxMTMzIC0yMjcgY3QgMTEwNyAtMjE2IDEwOTAgLTIxMCAxMDYxIC0yMDAgY3QgCisxMDYxIC0yMDAgMTA2MSAtMjAwIDEwNjEgLTE5MiBjdCBwIGVmCisxNTQ0IC04MSBtICAxNTIwIC00MyAxNDk5IC0yOSAxNDY4IC0yOSBjdCAxNDQxIC0yOSAxNDIwIC00MyAxNDA2IC03MiBjdCAxMzk3IC05MCAxMzk0IC0xMDcgMTM5MyAtMTM3IGN0IAorMTM5MyAtMTM3IDEzOTMgLTEzNyAxNTQyIC0xMzcgY3QgMTUzOCAtMTY5IDE1MzMgLTE4MyAxNTIxIC0xOTkgY3QgMTUwNyAtMjE3IDE0ODQgLTIyNyAxNDU5IC0yMjcgY3QgCisxNDM1IC0yMjcgMTQxMiAtMjE4IDEzOTQgLTIwMSBjdCAxMzcxIC0xODEgMTM1OCAtMTQ2IDEzNTggLTEwNiBjdCAxMzU4IC0zNyAxMzkzIDUgMTQ0OSA1IGN0IAorMTQ5NSA1IDE1MzEgLTI0IDE1NTEgLTc4IGN0IDE1NTEgLTc4IDE1NTEgLTc4IDE1NDQgLTgxIGN0IHAKKzEzOTQgLTE1MyBtICAxMzk5IC0xOTEgMTQxNiAtMjA5IDE0NDUgLTIwOSBjdCAxNDc1IC0yMDkgMTQ4NiAtMTk2IDE0OTMgLTE1MyBjdCAKKzE0OTMgLTE1MyAxNDkzIC0xNTMgMTM5NCAtMTUzIGN0IHAgZWYKKzE1NzQgLTE5NiBtICAxNTc3IC0xOTggMTU4MSAtMTk4IDE1ODcgLTE5OCBjdCAxNjAwIC0xOTggMTYwNSAtMTkxIDE2MDUgLTE2NiBjdCAKKzE2MDUgLTE2NiAxNjA1IC0xNjYgMTYwNSAtNDQgY3QgMTYwNSAtMTUgMTU5OSAtOCAxNTc1IC04IGN0IDE1NzUgLTggMTU3NSAtOCAxNTc1IDAgY3QgCisxNTc1IDAgMTU3NSAwIDE2NzcgMCBjdCAxNjc3IDAgMTY3NyAwIDE2NzcgLTggY3QgMTY1MyAtOCAxNjQ1IC0xNCAxNjQ1IC0zMiBjdCAxNjQ1IC0zMiAxNjQ1IC0zMiAxNjQ1IC0xNzEgY3QgCisxNjY5IC0xOTQgMTY3OSAtMjAwIDE2OTUgLTIwMCBjdCAxNzE5IC0yMDAgMTczMSAtMTg0IDE3MzEgLTE1MiBjdCAxNzMxIC0xNTIgMTczMSAtMTUyIDE3MzEgLTQ4IGN0IAorMTczMSAtMTcgMTcyNCAtOCAxNzAwIC04IGN0IDE3MDAgLTggMTcwMCAtOCAxNzAwIDAgY3QgMTcwMCAwIDE3MDAgMCAxODAxIDAgY3QgMTgwMSAwIDE4MDEgMCAxODAxIC03IGN0IAorMTc3NyAtMTAgMTc3MSAtMTYgMTc3MSAtNDAgY3QgMTc3MSAtNDAgMTc3MSAtNDAgMTc3MSAtMTUzIGN0IDE3NzEgLTE5OSAxNzUwIC0yMjcgMTcxNCAtMjI3IGN0IAorMTY5MiAtMjI3IDE2NzcgLTIxOSAxNjQ0IC0xODcgY3QgMTY0NCAtMTg3IDE2NDQgLTE4NyAxNjQ0IC0yMjYgY3QgMTY0NCAtMjI2IDE2NDQgLTIyNiAxNjQxIC0yMjcgY3QgCisxNjE3IC0yMTggMTYwMCAtMjEzIDE1NzQgLTIwNSBjdCAxNTc0IC0yMDUgMTU3NCAtMjA1IDE1NzQgLTE5NiBjdCBwIGVmCisxOTgzIDUgbSAgMTk4MyA1IDE5ODMgNSAyMDU0IC0yMSBjdCAyMDU0IC0yMSAyMDU0IC0yMSAyMDU0IC0yOCBjdCAyMDQ1IC0yOCAyMDQ0IC0yOCAyMDQzIC0yOCBjdCAKKzIwMjUgLTI4IDIwMjEgLTMzIDIwMjEgLTU2IGN0IDIwMjEgLTU2IDIwMjEgLTU2IDIwMjEgLTMzNiBjdCAyMDIxIC0zMzYgMjAyMSAtMzM2IDIwMTkgLTMzNyBjdCAKKzE5OTYgLTMyOSAxOTc5IC0zMjQgMTk0OCAtMzE1IGN0IDE5NDggLTMxNSAxOTQ4IC0zMTUgMTk0OCAtMzA4IGN0IDE5NTIgLTMwOCAxOTU0IC0zMDggMTk1OCAtMzA4IGN0IAorMTk3NiAtMzA4IDE5ODEgLTMwMyAxOTgxIC0yODMgY3QgMTk4MSAtMjgzIDE5ODEgLTI4MyAxOTgxIC0yMDYgY3QgMTk2MiAtMjIyIDE5NDkgLTIyNyAxOTMwIC0yMjcgY3QgCisxODc0IC0yMjcgMTgyOSAtMTcxIDE4MjkgLTEwMSBjdCAxODI5IC0zOCAxODY1IDUgMTkxOSA1IGN0IDE5NDYgNSAxOTY0IC01IDE5ODEgLTI4IGN0IAorMTk4MSAtMjggMTk4MSAtMjggMTk4MSA0IGN0IDE5ODEgNCAxOTgxIDQgMTk4MyA1IGN0IHAKKzE5ODEgLTUwIG0gIDE5ODEgLTQ3IDE5NzcgLTQxIDE5NzIgLTM1IGN0IDE5NjQgLTI2IDE5NTIgLTIxIDE5MzggLTIxIGN0IDE4OTcgLTIxIDE4NzEgLTYwIDE4NzEgLTEyMSBjdCAKKzE4NzEgLTE3NyAxODk0IC0yMTMgMTkzMSAtMjEzIGN0IDE5NTcgLTIxMyAxOTgxIC0xOTAgMTk4MSAtMTY0IGN0IDE5ODEgLTE2NCAxOTgxIC0xNjQgMTk4MSAtNTAgY3QgCitwIGVmCisyMDg0IDg3IG0gIDIxMjAgNjQgMjEzNSA1MSAyMTUzIDI4IGN0IDIxODcgLTE1IDIyMDQgLTY0IDIyMDQgLTEyMiBjdCAyMjA0IC0xODUgMjE4NiAtMjMzIDIxNDMgLTI4MyBjdCAKKzIxMjQgLTMwNyAyMTExIC0zMTggMjA4NiAtMzM0IGN0IDIwODYgLTMzNCAyMDg2IC0zMzQgMjA4MCAtMzI2IGN0IDIxMTkgLTI5NSAyMTMyIC0yNzcgMjE0NSAtMjQwIGN0IAorMjE1NyAtMjA3IDIxNjIgLTE3MCAyMTYyIC0xMjAgY3QgMjE2MiAtNjkgMjE1NiAtMjggMjE0MyAyIGN0IDIxMjkgMzMgMjExNSA1MSAyMDgwIDc5IGN0IAorMjA4MCA3OSAyMDgwIDc5IDIwODQgODcgY3QgcCBlZgorcG9tCitncgorZ3IKK2dzCitncworcHVtCis4NzQyIDE0MzE5IHQKKzcgLTE5OSBtICAxNCAtMjAwIDE3IC0yMDEgMjMgLTIwMSBjdCA1MSAtMjAxIDU4IC0xODggODEgLTEwMyBjdCA4OSAtNzEgMTAxIC0xMyAxMDEgLTQgY3QgCisxMDEgNCA5OCAxMSA5MSAyMCBjdCA3NiA0MSA2NiA1NCA2MCA1OSBjdCA1MCA3MCA0NCA3NCAzOCA3NCBjdCAzNSA3NCAzMSA3MyAyNiA2OSBjdCAKKzE4IDYzIDEzIDYwIDcgNjAgY3QgLTMgNjAgLTEyIDY5IC0xMiA4MCBjdCAtMTIgOTIgLTEgMTAyIDEzIDEwMiBjdCA0NSAxMDIgMTEwIDI3IDE2MyAtNzEgY3QgCisxOTcgLTEzMSAyMTAgLTE2NyAyMTAgLTE5MSBjdCAyMTAgLTIwNiAxOTggLTIxOSAxODMgLTIxOSBjdCAxNzIgLTIxOSAxNjQgLTIxMSAxNjQgLTIwMCBjdCAKKzE2NCAtMTkzIDE2OCAtMTg4IDE3OCAtMTgxIGN0IDE4NyAtMTc2IDE5MSAtMTcxIDE5MSAtMTY0IGN0IDE5MSAtMTQ1IDE3MiAtMTA2IDEzMCAtMzYgY3QgCisxMzAgLTM2IDEzMCAtMzYgMTIxIC05NCBjdCAxMTMgLTEzNyA4NSAtMjE5IDc4IC0yMTkgY3QgNzggLTIxOSA3OCAtMjE5IDc2IC0yMTkgY3QgCis3NiAtMjE4IDc0IC0yMTggNzIgLTIxOCBjdCA2NyAtMjE3IDQ5IC0yMTQgMjMgLTIwOSBjdCAyMSAtMjA5IDE0IC0yMDggNyAtMjA3IGN0IAorNyAtMjA3IDcgLTIwNyA3IC0xOTkgY3QgcCBlZgorcG9tCitncgorZ3MKK3B1bQorODk2MiAxNDMxOSB0CisxNDMgLTMzNCBtICAxMDcgLTMxMCA5MiAtMjk3IDc1IC0yNzQgY3QgNDAgLTIzMSAyMyAtMTgyIDIzIC0xMjQgY3QgMjMgLTYyIDQxIC0xMyA4NCAzNyBjdCAKKzEwNCA2MSAxMTYgNzIgMTQxIDg3IGN0IDE0MSA4NyAxNDEgODcgMTQ3IDc5IGN0IDEwOCA0OCA5NSAzMSA4MiAtNiBjdCA3MCAtMzkgNjUgLTc2IDY1IC0xMjYgY3QgCis2NSAtMTc4IDcxIC0yMTggODQgLTI0OSBjdCA5OCAtMjc5IDExMiAtMjk3IDE0NyAtMzI2IGN0IDE0NyAtMzI2IDE0NyAtMzI2IDE0MyAtMzM0IGN0IAorcCBlZgorcG9tCitncgorZ3MKK3B1bQorOTEyNyAxNDMxOSB0CisyMjcgLTU4IG0gIDIyNyAtNTggMjI3IC01OCAyMTcgLTQ1IGN0IDIwMyAtMjcgMTk0IC0xOSAxODcgLTE5IGN0IDE4MyAtMTkgMTc5IC0yMyAxNzkgLTI3IGN0IAorMTc5IC0zMSAxNzkgLTMxIDE4NiAtNTggY3QgMTg2IC01OCAxODYgLTU4IDIxNCAtMTYwIGN0IDIxNiAtMTcwIDIxOCAtMTgxIDIxOCAtMTg4IGN0IAorMjE4IC0yMDYgMjA1IC0yMTggMTg2IC0yMTggY3QgMTU0IC0yMTggMTIzIC0xODkgNzIgLTExMCBjdCA3MiAtMTEwIDcyIC0xMTAgMTA1IC0yMTcgY3QgCisxMDUgLTIxNyAxMDUgLTIxNyAxMDQgLTIxOCBjdCA3NyAtMjEzIDY3IC0yMTEgMjQgLTIwMyBjdCAyNCAtMjAzIDI0IC0yMDMgMjQgLTE5NSBjdCAKKzQ5IC0xOTUgNTUgLTE5MiA1NSAtMTgyIGN0IDU1IC0xNzkgNTUgLTE3NiA1NCAtMTczIGN0IDU0IC0xNzMgNTQgLTE3MyA3IDAgY3QgNyAwIDcgMCA0NCAwIGN0IAorNjcgLTc4IDcyIC04OSA5MyAtMTIzIGN0IDEyMyAtMTY4IDE0OCAtMTkzIDE2NiAtMTkzIGN0IDE3NCAtMTkzIDE3OCAtMTg4IDE3OCAtMTc5IGN0IAorMTc4IC0xNzMgMTc1IC0xNTYgMTcxIC0xNDEgY3QgMTcxIC0xNDEgMTcxIC0xNDEgMTUwIC02MCBjdCAxNDMgLTM1IDE0MiAtMjggMTQyIC0yMyBjdCAKKzE0MiAtNCAxNDkgNCAxNjUgNCBjdCAxODcgNCAyMDAgLTYgMjM0IC01MiBjdCAyMzQgLTUyIDIzNCAtNTIgMjI3IC01OCBjdCBwIGVmCitwb20KK2dyCitncworcHVtCis5Mzc3IDE0MzE5IHQKKzE4IDg3IG0gIDU0IDY0IDY5IDUxIDg3IDI4IGN0IDEyMSAtMTUgMTM4IC02NCAxMzggLTEyMiBjdCAxMzggLTE4NSAxMjAgLTIzMyA3NyAtMjgzIGN0IAorNTggLTMwNyA0NSAtMzE4IDIwIC0zMzQgY3QgMjAgLTMzNCAyMCAtMzM0IDE0IC0zMjYgY3QgNTMgLTI5NSA2NiAtMjc3IDc5IC0yNDAgY3QgCis5MSAtMjA3IDk2IC0xNzAgOTYgLTEyMCBjdCA5NiAtNjkgOTAgLTI4IDc3IDIgY3QgNjMgMzMgNDkgNTEgMTQgNzkgY3QgMTQgNzkgMTQgNzkgMTggODcgY3QgCitwIGVmCitwb20KK2dyCitncgorZ3MKK2dzCitwdW0KKzg3NDIgMTQxODYgdAorNDUgLTE0NyBtICAxMTQgLTI5MCBsICAxODMgLTE0NyBsICAyMTYgLTE0NyBsICAxMjggLTMyNyBsICA5OSAtMzI3IGwgIDEyIC0xNDcgbCAKKzQ1IC0xNDcgbCAgcCBlZgorcG9tCitncgorZ3IKK2dzCitncworcHVtCisxNDM1MSAxNDI5MiB0Cis3IC0xOTkgbSAgMTQgLTIwMCAxNyAtMjAxIDIzIC0yMDEgY3QgNTEgLTIwMSA1OCAtMTg4IDgxIC0xMDMgY3QgODkgLTcxIDEwMSAtMTMgMTAxIC00IGN0IAorMTAxIDQgOTggMTEgOTEgMjAgY3QgNzYgNDEgNjYgNTQgNjAgNTkgY3QgNTAgNzAgNDQgNzQgMzggNzQgY3QgMzUgNzQgMzEgNzMgMjYgNjkgY3QgCisxOCA2MyAxMyA2MCA3IDYwIGN0IC0zIDYwIC0xMiA2OSAtMTIgODAgY3QgLTEyIDkyIC0xIDEwMiAxMyAxMDIgY3QgNDUgMTAyIDExMCAyNyAxNjMgLTcxIGN0IAorMTk3IC0xMzEgMjEwIC0xNjcgMjEwIC0xOTEgY3QgMjEwIC0yMDYgMTk4IC0yMTkgMTgzIC0yMTkgY3QgMTcyIC0yMTkgMTY0IC0yMTEgMTY0IC0yMDAgY3QgCisxNjQgLTE5MyAxNjggLTE4OCAxNzggLTE4MSBjdCAxODcgLTE3NiAxOTEgLTE3MSAxOTEgLTE2NCBjdCAxOTEgLTE0NSAxNzIgLTEwNiAxMzAgLTM2IGN0IAorMTMwIC0zNiAxMzAgLTM2IDEyMSAtOTQgY3QgMTEzIC0xMzcgODUgLTIxOSA3OCAtMjE5IGN0IDc4IC0yMTkgNzggLTIxOSA3NiAtMjE5IGN0IAorNzYgLTIxOCA3NCAtMjE4IDcyIC0yMTggY3QgNjcgLTIxNyA0OSAtMjE0IDIzIC0yMDkgY3QgMjEgLTIwOSAxNCAtMjA4IDcgLTIwNyBjdCAKKzcgLTIwNyA3IC0yMDcgNyAtMTk5IGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzE0NTcxIDE0MjkyIHQKKzE0MyAtMzM0IG0gIDEwNyAtMzEwIDkyIC0yOTcgNzUgLTI3NCBjdCA0MCAtMjMxIDIzIC0xODIgMjMgLTEyNCBjdCAyMyAtNjIgNDEgLTEzIDg0IDM3IGN0IAorMTA0IDYxIDExNiA3MiAxNDEgODcgY3QgMTQxIDg3IDE0MSA4NyAxNDcgNzkgY3QgMTA4IDQ4IDk1IDMxIDgyIC02IGN0IDcwIC0zOSA2NSAtNzYgNjUgLTEyNiBjdCAKKzY1IC0xNzggNzEgLTIxOCA4NCAtMjQ5IGN0IDk4IC0yNzkgMTEyIC0yOTcgMTQ3IC0zMjYgY3QgMTQ3IC0zMjYgMTQ3IC0zMjYgMTQzIC0zMzQgY3QgCitwIGVmCitwb20KK2dyCitncworcHVtCisxNDczNiAxNDI5MiB0CisyMjcgLTU4IG0gIDIyNyAtNTggMjI3IC01OCAyMTcgLTQ1IGN0IDIwMyAtMjcgMTk0IC0xOSAxODcgLTE5IGN0IDE4MyAtMTkgMTc5IC0yMyAxNzkgLTI3IGN0IAorMTc5IC0zMSAxNzkgLTMxIDE4NiAtNTggY3QgMTg2IC01OCAxODYgLTU4IDIxNCAtMTYwIGN0IDIxNiAtMTcwIDIxOCAtMTgxIDIxOCAtMTg4IGN0IAorMjE4IC0yMDYgMjA1IC0yMTggMTg2IC0yMTggY3QgMTU0IC0yMTggMTIzIC0xODkgNzIgLTExMCBjdCA3MiAtMTEwIDcyIC0xMTAgMTA1IC0yMTcgY3QgCisxMDUgLTIxNyAxMDUgLTIxNyAxMDQgLTIxOCBjdCA3NyAtMjEzIDY3IC0yMTEgMjQgLTIwMyBjdCAyNCAtMjAzIDI0IC0yMDMgMjQgLTE5NSBjdCAKKzQ5IC0xOTUgNTUgLTE5MiA1NSAtMTgyIGN0IDU1IC0xNzkgNTUgLTE3NiA1NCAtMTczIGN0IDU0IC0xNzMgNTQgLTE3MyA3IDAgY3QgNyAwIDcgMCA0NCAwIGN0IAorNjcgLTc4IDcyIC04OSA5MyAtMTIzIGN0IDEyMyAtMTY4IDE0OCAtMTkzIDE2NiAtMTkzIGN0IDE3NCAtMTkzIDE3OCAtMTg4IDE3OCAtMTc5IGN0IAorMTc4IC0xNzMgMTc1IC0xNTYgMTcxIC0xNDEgY3QgMTcxIC0xNDEgMTcxIC0xNDEgMTUwIC02MCBjdCAxNDMgLTM1IDE0MiAtMjggMTQyIC0yMyBjdCAKKzE0MiAtNCAxNDkgNCAxNjUgNCBjdCAxODcgNCAyMDAgLTYgMjM0IC01MiBjdCAyMzQgLTUyIDIzNCAtNTIgMjI3IC01OCBjdCBwIGVmCitwb20KK2dyCitncworcHVtCisxNDk4NiAxNDI5MiB0CisxOCA4NyBtICA1NCA2NCA2OSA1MSA4NyAyOCBjdCAxMjEgLTE1IDEzOCAtNjQgMTM4IC0xMjIgY3QgMTM4IC0xODUgMTIwIC0yMzMgNzcgLTI4MyBjdCAKKzU4IC0zMDcgNDUgLTMxOCAyMCAtMzM0IGN0IDIwIC0zMzQgMjAgLTMzNCAxNCAtMzI2IGN0IDUzIC0yOTUgNjYgLTI3NyA3OSAtMjQwIGN0IAorOTEgLTIwNyA5NiAtMTcwIDk2IC0xMjAgY3QgOTYgLTY5IDkwIC0yOCA3NyAyIGN0IDYzIDMzIDQ5IDUxIDE0IDc5IGN0IDE0IDc5IDE0IDc5IDE4IDg3IGN0IAorcCBlZgorcG9tCitncgorZ3IKK3RtIHNldG1hdHJpeAorMCAwIHQgCisxIDEgcyAKKzAgODI4NiB0IAorcG9tCitjb3VudCBvcF9jb3VudCBzdWIge3BvcH0gcmVwZWF0IGNvdW50ZGljdHN0YWNrIGRpY3RfY291bnQgc3ViIHtlbmR9IHJlcGVhdCBiNF9pbmNfc3RhdGUgcmVzdG9yZQorJSVQYWdlVHJhaWxlcgorJSVUcmFpbGVyCislJUVPRgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvZG9jL2VjaG9fcGF0aC5vZGcgYi8zcmRwYXJ0eS9zcGVleC9kb2MvZWNob19wYXRoLm9kZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjBhZjg0Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvZG9jL2VjaG9fcGF0aC5vZGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvZG9jL21hbnVhbC5seXggYi8zcmRwYXJ0eS9zcGVleC9kb2MvbWFudWFsLmx5eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2FhMzFhCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvZG9jL21hbnVhbC5seXgKQEAgLTAsMCArMSw4MzYxIEBACisjTHlYIDEuNC40IGNyZWF0ZWQgdGhpcyBmaWxlLiBGb3IgbW9yZSBpbmZvIHNlZSBodHRwOi8vd3d3Lmx5eC5vcmcvCitcbHl4Zm9ybWF0IDI0NQorXGJlZ2luX2RvY3VtZW50CitcYmVnaW5faGVhZGVyCitcdGV4dGNsYXNzIHNjcmJvb2sKK1xsYW5ndWFnZSBlbmdsaXNoCitcaW5wdXRlbmNvZGluZyBhdXRvCitcZm9udHNjaGVtZSBwc2xhdGV4CitcZ3JhcGhpY3MgZGVmYXVsdAorXHBhcGVyZm9udHNpemUgMTAKK1xzcGFjaW5nIG9uZWhhbGYKK1xwYXBlcnNpemUgbGV0dGVycGFwZXIKK1x1c2VfZ2VvbWV0cnkgdHJ1ZQorXHVzZV9hbXNtYXRoIDIKK1xjaXRlX2VuZ2luZSBiYXNpYworXHVzZV9iaWJ0b3BpYyBmYWxzZQorXHBhcGVyb3JpZW50YXRpb24gcG9ydHJhaXQKK1xsZWZ0bWFyZ2luIDJjbQorXHRvcG1hcmdpbiAyY20KK1xyaWdodG1hcmdpbiAyY20KK1xib3R0b21tYXJnaW4gMmNtCitcc2VjbnVtZGVwdGggMworXHRvY2RlcHRoIDMKK1xwYXJhZ3JhcGhfc2VwYXJhdGlvbiBpbmRlbnQKK1xkZWZza2lwIG1lZHNraXAKK1xxdW90ZXNfbGFuZ3VhZ2UgZW5nbGlzaAorXHBhcGVyY29sdW1ucyAxCitccGFwZXJzaWRlcyAxCitccGFwZXJwYWdlc3R5bGUgaGVhZGluZ3MKK1x0cmFja2luZ19jaGFuZ2VzIGZhbHNlCitcb3V0cHV0X2NoYW5nZXMgdHJ1ZQorXGVuZF9oZWFkZXIKKworXGJlZ2luX2JvZHkKKworXGJlZ2luX2xheW91dCBUaXRsZQorVGhlIFNwZWV4IENvZGVjIE1hbnVhbAorXG5ld2xpbmUKKyh2ZXJzaW9uIDEuMi1iZXRhMikKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgQXV0aG9yCitKZWFuLU1hcmMgVmFsaW4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKworXG5ld3BhZ2UKK0NvcHlyaWdodCAoYykgMjAwMi0yMDA2IEplYW4tTWFyYyBWYWxpbi9YaXBoLm9yZyBGb3VuZGF0aW9uCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjEgb3IgYW55IGxhdGVyCisgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbiwKKyB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubyBCYWNrLUNvdmVyLgorIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAiR05VIEZyZWUgRG9jdW1lbnRhdGkKK29uIExpY2Vuc2UiLgorIAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorCitcbmV3cGFnZQorCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFx0YWJsZW9mY29udGVudHN7fQorCitcZW5kX2luc2V0CisKKworXG5ld3BhZ2UKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorXGJlZ2luX2luc2V0IEZsb2F0TGlzdCB0YWJsZQorCitcZW5kX2luc2V0CisKKworXG5ld3BhZ2UKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBDaGFwdGVyCitJbnRyb2R1Y3Rpb24gdG8gU3BlZXgKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoZSBTcGVleCBwcm9qZWN0ICgKK1xmYW1pbHkgdHlwZXdyaXRlcgoraHR0cDovL3d3dy5zcGVleC5vcmcvCitcZmFtaWx5IGRlZmF1bHQKKykgaGFzIGJlZW4gc3RhcnRlZCBiZWNhdXNlIHRoZXJlIHdhcyBhIG5lZWQgZm9yIGEgc3BlZWNoIGNvZGVjIHRoYXQgd2FzCisgb3Blbi1zb3VyY2UgYW5kIGZyZWUgZnJvbSBzb2Z0d2FyZSBwYXRlbnRzLgorIFRoZXNlIGFyZSBlc3NlbnRpYWwgY29uZGl0aW9ucyBmb3IgYmVpbmcgdXNlZCBieSBhbnkgb3Blbi1zb3VyY2Ugc29mdHdhcmUuCisgVGhlcmUgaXMgYWxyZWFkeSBWb3JiaXMgdGhhdCBkb2VzIGdlbmVyYWwgYXVkaW8sIGJ1dCBpdCBpcyBub3QgcmVhbGx5IHN1aXRhYmxlCisgZm9yIHNwZWVjaC4KKyBBbHNvLCB1bmxpa2UgbWFueSBvdGhlciBzcGVlY2ggY29kZWNzLCBTcGVleCBpcyBub3QgdGFyZ2V0ZWQgYXQgY2VsbCBwaG9uZXMKKyBidXQgcmF0aGVyIGF0IHZvaWNlIG92ZXIgSVAgKFZvSVApIGFuZCBmaWxlLWJhc2VkIGNvbXByZXNzaW9uLgorIAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorQXMgZGVzaWduIGdvYWxzLCB3ZSB3YW50ZWQgdG8gaGF2ZSBhIGNvZGVjIHRoYXQgd291bGQgYWxsb3cgYm90aCB2ZXJ5IGdvb2QKKyBxdWFsaXR5IHNwZWVjaCBhbmQgbG93IGJpdC1yYXRlICh1bmZvcnR1bmF0ZWx5IG5vdCBhdCB0aGUgc2FtZSB0aW1lISksCisgd2hpY2ggbGVkIHVzIHRvIGRldmVsb3BpbmcgYSBjb2RlYyB3aXRoIG11bHRpcGxlIGJpdC1yYXRlcy4KKyBPZiBjb3Vyc2UgdmVyeSBnb29kIHF1YWxpdHkgYWxzbyBtZWFudCB3ZSBoYWQgdG8gZG8gd2lkZWJhbmQgKDE2IGtIeiBzYW1wbGluZworIHJhdGUpIGluIGFkZGl0aW9uIHRvIG5hcnJvd2JhbmQgKHRlbGVwaG9uZSBxdWFsaXR5LCA4IGtIeiBzYW1wbGluZyByYXRlKS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0Rlc2lnbmluZyBmb3IgVm9JUCBpbnN0ZWFkIG9mIGNlbGwgcGhvbmUgdXNlIG1lYW5zIHRoYXQgU3BlZXggbXVzdCBiZSByb2J1c3QKKyB0byBsb3N0IHBhY2tldHMsIGJ1dCBub3QgdG8gY29ycnVwdGVkIG9uZXMgc2luY2UgcGFja2V0cyBlaXRoZXIgYXJyaXZlCisgdW5hbHRlcmVkIG9yIGRvbid0IGFycml2ZSBhdCBhbGwuCisgQWxzbywgdGhlIGlkZWEgd2FzIHRvIGhhdmUgYSByZWFzb25hYmxlIGNvbXBsZXhpdHkgYW5kIG1lbW9yeSByZXF1aXJlbWVudAorIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRvbyBtdWNoIG9uIHRoZSBlZmZpY2llbmN5IG9mIHRoZSBjb2RlYy4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0FsbCB0aGlzIGxlZCB1cyB0byB0aGUgY2hvaWNlIG9mIENFTFAKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e0NFTFB9CisKK1xlbmRfaW5zZXQKKworIGFzIHRoZSBlbmNvZGluZyB0ZWNobmlxdWUgdG8gdXNlIGZvciBTcGVleC4KKyBPbmUgb2YgdGhlIG1haW4gcmVhc29ucyBpcyB0aGF0IENFTFAgaGFzIGxvbmcgcHJvdmVkIHRoYXQgaXQgY291bGQgZG8gdGhlCisgam9iIGFuZCBzY2FsZSB3ZWxsIHRvIGJvdGggbG93IGJpdC1yYXRlcyAodGhpbmsgRG9EIENFTFAgQCA0Ljgga2JwcykgYW5kCisgaGlnaCBiaXQtcmF0ZXMgKHRoaW5rIEcuNzI4IEAgMTYga2JwcykuCisgCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGlzIGRvY3VtZW50IGlzIGRpdmlkZWQgaW4gdGhlIGZvbGxvd2luZyB3YXkuCisgU2VjdGlvbiAKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXHJlZntzZWM6RmVhdHVyZS1kZXNjcmlwdGlvbn0KKworXGVuZF9pbnNldAorCisgZGVzY3JpYmVzIHRoZSBkaWZmZXJlbnQgU3BlZXggZmVhdHVyZXMgYW5kIGRlZmluZXMgc29tZSB0ZXJtcyB0aGF0IHdpbGwKKyBiZSB1c2VkIGluIGxhdGVyIHNlY3Rpb25zLgorIFNlY3Rpb24gCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxyZWZ7c2VjOkNvbW1hbmQtbGluZS1lbmNvZGVyL2RlY29kZXJ9CisKK1xlbmRfaW5zZXQKKworIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGFuZGFyZCBjb21tYW5kLWxpbmUgdG9vbHMsIHdoaWxlIAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBccmVme3NlYzpQcm9ncmFtbWluZy13aXRoLVNwZWV4fQorCitcZW5kX2luc2V0CisKKyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBwcm9ncmFtbWluZyB1c2luZyB0aGUgU3BlZXggQVBJLgorIFNlY3Rpb24gCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxyZWZ7c2VjOkZvcm1hdHMtYW5kLXN0YW5kYXJkc30KKworXGVuZF9pbnNldAorCisgaGFzIHNvbWUgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBTcGVleCBhbmQgc3RhbmRhcmRzLgorIFRoZSB0aHJlZSBsYXN0IHNlY3Rpb25zIGRlc2NyaWJlIHRoZSBpbnRlcm5hbHMgb2YgdGhlIGNvZGVjIGFuZCByZXF1aXJlCisgc29tZSBzaWduYWwgcHJvY2Vzc2luZyBrbm93bGVkZ2UuCisgU2VjdGlvbiAKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXHJlZntzZWM6SW50cm9kdWN0aW9uLXRvLUNFTFB9CisKK1xlbmRfaW5zZXQKKworIGV4cGxhaW5zIHRoZSBnZW5lcmFsIGlkZWEgYmVoaW5kIENFTFAsIHdoaWxlIHNlY3Rpb25zIAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBccmVme3NlYzpTcGVleC1uYXJyb3diYW5kLW1vZGV9CisKK1xlbmRfaW5zZXQKKworIGFuZCAKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXHJlZntzZWM6U3BlZXgtd2lkZWJhbmQtbW9kZX0KKworXGVuZF9pbnNldAorCisgYXJlIHNwZWNpZmljIHRvIFNwZWV4LgorIE5vdGUgdGhhdCBpZiB5b3UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB1c2luZyBTcGVleCwgdGhvc2UgdGhyZWUgbGFzdCBzZWN0aW9ucworIGFyZSBub3QgcmVxdWlyZWQuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisKK1xuZXdwYWdlCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgQ2hhcHRlcgorQ29kZWMgZGVzY3JpcHRpb24KK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGxhYmVse3NlYzpGZWF0dXJlLWRlc2NyaXB0aW9ufQorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgbWFpbiBmZWF0dXJlcyBwcm92aWRlZCBieSBTcGVleC4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU2VjdGlvbgorQ29uY2VwdHMKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0JlZm9yZSBpbnRyb2R1Y2luZyBhbGwgdGhlIFNwZWV4IGZlYXR1cmVzLCBoZXJlIGFyZSBzb21lIGNvbmNlcHRzIGluIHNwZWVjaAorIGNvZGluZyB0aGF0IGhlbHAgYmV0dGVyIHVuZGVyc3RhbmQgdGhlIHJlc3Qgb2YgdGhlIG1hbnVhbC4KKyBFbXBoYXNpcyBpcyBwbGFjZWQgb24gU3BlZXguCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN1YnNlY3Rpb24qCitTYW1wbGluZyByYXRlCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtzYW1wbGluZyByYXRlfQorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorU3BlZXggaXMgbWFpbmx5IGRlc2lnbmVkIGZvciB0aHJlZSBkaWZmZXJlbnQgc2FtcGxpbmcgcmF0ZXM6IDgga0h6LCAxNiBrSHosCisgYW5kIDMyIGtIei4KKyBUaGVzZSBhcmUgcmVzcGVjdGl2ZWx5IHJlZmVyZWQgdG8gYXMgbmFycm93YmFuZAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7bmFycm93YmFuZH0KKworXGVuZF9pbnNldAorCissIHdpZGViYW5kCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHt3aWRlYmFuZH0KKworXGVuZF9pbnNldAorCisgYW5kIHVsdHJhLXdpZGViYW5kCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHt1bHRyYS13aWRlYmFuZH0KKworXGVuZF9pbnNldAorCisuCisgRm9yIGEgc2FtcGxpbmcgcmF0ZSBvZiAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRGX3tzfSQKK1xlbmRfaW5zZXQKKworIGtIeiwgdGhlIGhpZ2hlc3QgZnJlcXVlbmN5IHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGlzIGVxdWFsIHRvIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJEZfe3N9LzIkCitcZW5kX2luc2V0CisKKyBrSHouCisgVGhpcyBpcyBhIGNvbnNlcXVlbmNlIG9mIE55cXVpc3QncyBzYW1wbGluZyB0aGVvcmVtIChhbmQgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkRl97c30vMiQKK1xlbmRfaW5zZXQKKworIGlzIGtub3duIGFzIHRoZSBOeXF1aXN0IGZyZXF1ZW5jeSkuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN1YnNlY3Rpb24qCitRdWFsaXR5CitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtxdWFsaXR5fQorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorU3BlZXggZW5jb2RpbmcgaXMgY29udHJvbGxlZCBtb3N0IG9mIHRoZSB0aW1lIGJ5IGEgcXVhbGl0eSBwYXJhbWV0ZXIgdGhhdAorIHJhbmdlcyBmcm9tIDAgdG8gMTAuCisgSW4gY29uc3RhbnQgYml0LXJhdGUKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e2NvbnN0YW50IGJpdC1yYXRlfQorCitcZW5kX2luc2V0CisKKyAoQ0JSKSBvcGVyYXRpb24sIHRoZSBxdWFsaXR5IHBhcmFtZXRlciBpcyBhbiBpbnRlZ2VyLCB3aGlsZSBmb3IgdmFyaWFibGUKKyBiaXQtcmF0ZSAoVkJSKSwgdGhlIHBhcmFtZXRlciBpcyBhIGZsb2F0LgorIAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdWJzZWN0aW9uKgorQ29tcGxleGl0eQorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7Y29tcGxleGl0eX0KKworXGVuZF9pbnNldAorCisgKHZhcmlhYmxlKQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorV2l0aCBTcGVleCwgaXQgaXMgcG9zc2libGUgdG8gdmFyeSB0aGUgY29tcGxleGl0eSBhbGxvd2VkIGZvciB0aGUgZW5jb2Rlci4KKyBUaGlzIGlzIGRvbmUgYnkgY29udHJvbGxpbmcgaG93IHRoZSBzZWFyY2ggaXMgcGVyZm9ybWVkIHdpdGggYW4gaW50ZWdlcgorIHJhbmdpbmcgZnJvbSAxIHRvIDEwIGluIGEgd2F5IHRoYXQncyBzaW1pbGFyIHRvIHRoZSAtMSB0byAtOSBvcHRpb25zIHRvCisgCitcZW1waCBvbgorZ3ppcAorXGVtcGggZGVmYXVsdAorIGFuZCAKK1xlbXBoIG9uCitiemlwMgorXGVtcGggZGVmYXVsdAorIGNvbXByZXNzaW9uIHV0aWxpdGllcy4KKyBGb3Igbm9ybWFsIHVzZSwgdGhlIG5vaXNlIGxldmVsIGF0IGNvbXBsZXhpdHkgMSBpcyBiZXR3ZWVuIDEgYW5kIDIgZEIgaGlnaGVyCisgdGhhbiBhdCBjb21wbGV4aXR5IDEwLCBidXQgdGhlIENQVSByZXF1aXJlbWVudHMgZm9yIGNvbXBsZXhpdHkgMTAgaXMgYWJvdXQKKyA1IHRpbWVzIGhpZ2hlciB0aGFuIGZvciBjb21wbGV4aXR5IDEuCisgSW4gcHJhY3RpY2UsIHRoZSBiZXN0IHRyYWRlLW9mZiBpcyBiZXR3ZWVuIGNvbXBsZXhpdHkgMiBhbmQgNCwgdGhvdWdoIGhpZ2hlcgorIHNldHRpbmdzIGFyZSBvZnRlbiB1c2VmdWwgd2hlbiBlbmNvZGluZyBub24tc3BlZWNoIHNvdW5kcyBsaWtlIERUTUYKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e0RUTUZ9CisKK1xlbmRfaW5zZXQKKworIHRvbmVzLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdWJzZWN0aW9uKgorVmFyaWFibGUgQml0LVJhdGUKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e3ZhcmlhYmxlIGJpdC1yYXRlfQorCitcZW5kX2luc2V0CisKKyAoVkJSKQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVmFyaWFibGUgYml0LXJhdGUgKFZCUikgYWxsb3dzIGEgY29kZWMgdG8gY2hhbmdlIGl0cyBiaXQtcmF0ZSBkeW5hbWljYWxseQorIHRvIGFkYXB0IHRvIHRoZSAKK1xiZWdpbl9pbnNldCBRdW90ZXMgZWxkCitcZW5kX2luc2V0CisKK2RpZmZpY3VsdHkKK1xiZWdpbl9pbnNldCBRdW90ZXMgZXJkCitcZW5kX2luc2V0CisKKyBvZiB0aGUgYXVkaW8gYmVpbmcgZW5jb2RlZC4KKyBJbiB0aGUgZXhhbXBsZSBvZiBTcGVleCwgc291bmRzIGxpa2Ugdm93ZWxzIGFuZCBoaWdoLWVuZXJneSB0cmFuc2llbnRzCisgcmVxdWlyZSBhIGhpZ2hlciBiaXQtcmF0ZSB0byBhY2hpZXZlIGdvb2QgcXVhbGl0eSwgd2hpbGUgZnJpY2F0aXZlcyAoZS5nLgorIHMsZiBzb3VuZHMpIGNhbiBiZSBjb2RlZCBhZGVxdWF0ZWx5IHdpdGggbGVzcyBiaXRzLgorIEZvciB0aGlzIHJlYXNvbiwgVkJSIGNhbiBhY2hpdmUgbG93ZXIgYml0LXJhdGUgZm9yIHRoZSBzYW1lIHF1YWxpdHksIG9yCisgYSBiZXR0ZXIgcXVhbGl0eSBmb3IgYSBjZXJ0YWluIGJpdC1yYXRlLgorIERlc3BpdGUgaXRzIGFkdmFudGFnZXMsIFZCUiBoYXMgdHdvIG1haW4gZHJhd2JhY2tzOiBmaXJzdCwgYnkgb25seSBzcGVjaWZ5aW5nCisgcXVhbGl0eSwgdGhlcmUncyBubyBndWFyYW50eSBhYm91dCB0aGUgZmluYWwgYXZlcmFnZSBiaXQtcmF0ZS4KKyBTZWNvbmQsIGZvciBzb21lIHJlYWwtdGltZSBhcHBsaWNhdGlvbnMgbGlrZSB2b2ljZSBvdmVyIElQIChWb0lQKSwgd2hhdAorIGNvdW50cyBpcyB0aGUgbWF4aW11bSBiaXQtcmF0ZSwgd2hpY2ggbXVzdCBiZSBsb3cgZW5vdWdoIGZvciB0aGUgY29tbXVuaWNhdGlvbgorIGNoYW5uZWwuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN1YnNlY3Rpb24qCitBdmVyYWdlIEJpdC1SYXRlCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHthdmVyYWdlIGJpdC1yYXRlfQorCitcZW5kX2luc2V0CisKKyAoQUJSKQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorQXZlcmFnZSBiaXQtcmF0ZSBzb2x2ZXMgb25lIG9mIHRoZSBwcm9ibGVtcyBvZiBWQlIsIGFzIGl0IGR5bmFtaWNhbGx5IGFkanVzdHMKKyBWQlIgcXVhbGl0eSBpbiBvcmRlciB0byBtZWV0IGEgc3BlY2lmaWMgdGFyZ2V0IGJpdC1yYXRlLgorIEJlY2F1c2UgdGhlIHF1YWxpdHkvYml0LXJhdGUgaXMgYWRqdXN0ZWQgaW4gcmVhbC10aW1lIChvcGVuLWxvb3ApLCB0aGUKKyBnbG9iYWwgcXVhbGl0eSB3aWxsIGJlIHNsaWdodGx5IGxvd2VyIHRoYW4gdGhhdCBvYnRhaW5lZCBieSBlbmNvZGluZyBpbgorIFZCUiB3aXRoIGV4YWN0bHkgdGhlIHJpZ2h0IHF1YWxpdHkgc2V0dGluZyB0byBtZWV0IHRoZSB0YXJnZXQgYXZlcmFnZSBiaXQtcmF0ZS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3Vic2VjdGlvbioKK1ZvaWNlIEFjdGl2aXR5IERldGVjdGlvbgorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7dm9pY2UgYWN0aXZpdHkgZGV0ZWN0aW9ufQorCitcZW5kX2luc2V0CisKKyAoVkFEKQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorV2hlbiBlbmFibGVkLCB2b2ljZSBhY3Rpdml0eSBkZXRlY3Rpb24gZGV0ZWN0cyB3aGV0aGVyIHRoZSBhdWRpbyBiZWluZyBlbmNvZGVkCisgaXMgc3BlZWNoIG9yIHNpbGVuY2UvYmFja2dyb3VuZCBub2lzZS4KKyBWQUQgaXMgYWx3YXlzIGltcGxpY2l0bHkgYWN0aXZhdGVkIHdoZW4gZW5jb2RpbmcgaW4gVkJSLCBzbyB0aGUgb3B0aW9uCisgaXMgb25seSB1c2VmdWwgaW4gbm9uLVZCUiBvcGVyYXRpb24uCisgSW4gdGhpcyBjYXNlLCBTcGVleCBkZXRlY3RzIG5vbi1zcGVlY2ggcGVyaW9kcyBhbmQgZW5jb2RlIHRoZW0gd2l0aCBqdXN0CisgZW5vdWdoIGJpdHMgdG8gcmVwcm9kdWNlIHRoZSBiYWNrZ3JvdW5kIG5vaXNlLgorIFRoaXMgaXMgY2FsbGVkIAorXGJlZ2luX2luc2V0IFF1b3RlcyBlbGQKK1xlbmRfaW5zZXQKKworY29tZm9ydCBub2lzZSBnZW5lcmF0aW9uCitcYmVnaW5faW5zZXQgUXVvdGVzIGVyZAorXGVuZF9pbnNldAorCisgKENORykuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN1YnNlY3Rpb24qCitEaXNjb250aW51b3VzIFRyYW5zbWlzc2lvbgorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7ZGlzY29udGludW91cyB0cmFuc21pc3Npb259CisKK1xlbmRfaW5zZXQKKworIChEVFgpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitEaXNjb250aW51b3VzIHRyYW5zbWlzc2lvbiBpcyBhbiBhZGRpdGlvbiB0byBWQUQvVkJSIG9wZXJhdGlvbiwgdGhhdCBhbGxvd3MKKyB0byBzdG9wIHRyYW5zbWl0dGluZyBjb21wbGV0ZWx5IHdoZW4gdGhlIGJhY2tncm91bmQgbm9pc2UgaXMgc3RhdGlvbmFyeS4KKyBJbiBmaWxlLWJhc2VkIG9wZXJhdGlvbiwgc2luY2Ugd2UgY2Fubm90IGp1c3Qgc3RvcCB3cml0aW5nIHRvIHRoZSBmaWxlLAorIG9ubHkgNSBiaXRzIGFyZSB1c2VkIGZvciBzdWNoIGZyYW1lcyAoY29ycmVzcG9uZGluZyB0byAyNTAgYnBzKS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3Vic2VjdGlvbioKK1BlcmNlcHR1YWwgZW5oYW5jZW1lbnQKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e3BlcmNlcHR1YWwgZW5oYW5jZW1lbnR9CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitQZXJjZXB0dWFsIGVuaGFuY2VtZW50IGlzIGEgcGFydCBvZiB0aGUgZGVjb2RlciB3aGljaCwgd2hlbiB0dXJuZWQgb24sIHRyaWVzCisgdG8gcmVkdWNlICh0aGUgcGVyY2VwdGlvbiBvZikgdGhlIG5vaXNlIHByb2R1Y2VkIGJ5IHRoZSBjb2RpbmcvZGVjb2RpbmcKKyBwcm9jZXNzLgorIEluIG1vc3QgY2FzZXMsIHBlcmNlcHR1YWwgZW5oYW5jZW1lbnQgbWFrZSB0aGUgc291bmQgZnVydGhlciBmcm9tIHRoZSBvcmlnaW5hbAorIAorXGVtcGggb24KK29iamVjdGl2ZWx5CitcZW1waCBkZWZhdWx0CisgKGlmIHlvdSB1c2UgU05SKSwgYnV0IGluIHRoZSBlbmQgaXQgc3RpbGwgCitcZW1waCBvbgorc291bmRzCitcZW1waCBkZWZhdWx0CisgYmV0dGVyIChzdWJqZWN0aXZlIGltcHJvdmVtZW50KS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3Vic2VjdGlvbioKK0FsZ29yaXRobWljIGRlbGF5CitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHthbGdvcml0aG1pYyBkZWxheX0KKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0V2ZXJ5IHNwZWVjaCBjb2RlYyBpbnRyb2R1Y2VzIGEgZGVsYXkgaW4gdGhlIHRyYW5zbWlzc2lvbi4KKyBGb3IgU3BlZXgsIHRoaXMgZGVsYXkgaXMgZXF1YWwgdG8gdGhlIGZyYW1lIHNpemUsIHBsdXMgc29tZSBhbW91bnQgb2YgCitcYmVnaW5faW5zZXQgUXVvdGVzIGVsZAorXGVuZF9pbnNldAorCitsb29rLWFoZWFkCitcYmVnaW5faW5zZXQgUXVvdGVzIGVyZAorXGVuZF9pbnNldAorCisgcmVxdWlyZWQgdG8gcHJvY2VzcyBlYWNoIGZyYW1lLgorIEluIG5hcnJvd2JhbmQgb3BlcmF0aW9uICg4IGtIeiksIHRoZSBkZWxheSBpcyAzMCBtcywgd2hpbGUgZm9yIHdpZGViYW5kCisgKDE2IGtIeiksIHRoZSBkZWxheSBpcyAzNCBtcy4KKyBUaGVzZSB2YWx1ZXMgZG9uJ3QgYWNjb3VudCBmb3IgdGhlIENQVSB0aW1lIGl0IHRha2VzIHRvIGVuY29kZSBvciBkZWNvZGUKKyB0aGUgZnJhbWVzLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTZWN0aW9uCitDb2RlYworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlIG1haW4gY2hhcmFjdGVyaXN0aWNzIG9mIFNwZWV4IGNhbiBiZSBzdW1tYXJpemVkIGFzIGZvbGxvd3M6CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEl0ZW1pemUKK0ZyZWUgc29mdHdhcmUvb3Blbi1zb3VyY2UKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e29wZW4tc291cmNlfQorCitcZW5kX2luc2V0CisKKywgcGF0ZW50CitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtwYXRlbnR9CisKK1xlbmRfaW5zZXQKKworIGFuZCByb3lhbHR5LWZyZWUKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgSXRlbWl6ZQorSW50ZWdyYXRpb24gb2YgbmFycm93YmFuZAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7bmFycm93YmFuZH0KKworXGVuZF9pbnNldAorCisgYW5kIHdpZGViYW5kCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHt3aWRlYmFuZH0KKworXGVuZF9pbnNldAorCisgdXNpbmcgYW4gZW1iZWRkZWQgYml0LXN0cmVhbQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBJdGVtaXplCitXaWRlIHJhbmdlIG9mIGJpdC1yYXRlcyBhdmFpbGFibGUgKGZyb20gMi4xNSBrYnBzIHRvIDQ0IGticHMpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEl0ZW1pemUKK0R5bmFtaWMgYml0LXJhdGUgc3dpdGNoaW5nIChBTVIpIGFuZCBWYXJpYWJsZSBCaXQtUmF0ZQorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7dmFyaWFibGUgYml0LXJhdGV9CisKK1xlbmRfaW5zZXQKKworIChWQlIpIG9wZXJhdGlvbgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBJdGVtaXplCitWb2ljZSBBY3Rpdml0eSBEZXRlY3Rpb24KK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e3ZvaWNlIGFjdGl2aXR5IGRldGVjdGlvbn0KKworXGVuZF9pbnNldAorCisgKFZBRCwgaW50ZWdyYXRlZCB3aXRoIFZCUikgYW5kIGRpc2NvbnRpbnVvdXMgdHJhbnNtaXNzaW9uIChEVFgpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEl0ZW1pemUKK1ZhcmlhYmxlIGNvbXBsZXhpdHkKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e2NvbXBsZXhpdHl9CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEl0ZW1pemUKK0VtYmVkZGVkIHdpZGViYW5kIHN0cnVjdHVyZSAoc2NhbGFibGUgc2FtcGxpbmcgcmF0ZSkKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgSXRlbWl6ZQorVWx0cmEtd2lkZWJhbmQgbW9kZSBhdCAzMiBrSHoKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgSXRlbWl6ZQorSW50ZW5zaXR5IHN0ZXJlbyBlbmNvZGluZyBvcHRpb24KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgSXRlbWl6ZQorRml4ZWQtcG9pbnQgaW1wbGVtZW50YXRpb24gKHdvcmsgaW4gcHJvZ3Jlc3MpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24KK1ByZXByb2Nlc3NvcgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhpcyBwYXJ0IHJlZmVycyB0byB0aGUgcHJlcHJvY2Vzc29yIG1vZHVsZSBpbnRyb2R1Y2VkIGluIHRoZSAxLjEueCBicmFuY2guCisgVGhlIHByZXByb2Nlc3NvciBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIG9uIHRoZSBhdWRpbyAKK1xlbXBoIG9uCitiZWZvcmUKK1xlbXBoIGRlZmF1bHQKKyBydW5uaW5nIHRoZSBlbmNvZGVyLgorIFRoZSBwcmVwcm9jZXNzb3IgcHJvdmlkZXMgdGhyZWUgbWFpbiBmdW5jdGlvbmFsaXRpZXM6CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEl0ZW1pemUKK25vaXNlIHN1cHByZXNzaW9uCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEl0ZW1pemUKK2F1dG9tYXRpYyBnYWluIGNvbnRyb2wgKEFHQykKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgSXRlbWl6ZQordm9pY2UgYWN0aXZpdHkgZGV0ZWN0aW9uIChWQUQpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGUgZGVub2lzZXIgY2FuIGJlIHVzZWQgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgYmFja2dyb3VuZCBub2lzZSBwcmVzZW50CisgaW4gdGhlIGlucHV0IHNpZ25hbC4KKyBUaGlzIHByb3ZpZGVzIGhpZ2hlciBxdWFsaXR5IHNwZWVjaCB3aGV0aGVyIG9yIG5vdCB0aGUgZGVub2lzZWQgc2lnbmFsCisgaXMgZW5jb2RlZCB3aXRoIFNwZWV4IChvciBhdCBhbGwpLgorIEhvd2V2ZXIsIHdoZW4gdXNpbmcgdGhlIGRlbm9pc2VkIHNpZ25hbCB3aXRoIHRoZSBjb2RlYywgdGhlcmUgaXMgYW4gYWRkaXRpb25hbAorIGJlbmVmaXQuCisgU3BlZWNoIGNvZGVjcyBpbiBnZW5lcmFsIChTcGVleCBpbmNsdWRlZCkgdGVuZCB0byBwZXJmb3JtIHBvb3JseSBvbiBub2lzeQorIGlucHV0LCB3aGljaCB0ZW5kcyB0byBhbXBsaWZ5IHRoZSBub2lzZS4KKyBUaGUgZGVub2lzZXIgZ3JlYXRseSByZWR1Y2VzIHRoaXMgZWZmZWN0LgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorQXV0b21hdGljIGdhaW4gY29udHJvbCAoQUdDKSBpcyBhIGZlYXR1cmUgdGhhdCBkZWFscyB3aXRoIHRoZSBmYWN0IHRoYXQKKyB0aGUgcmVjb3JkaW5nIHZvbHVtZSBtYXkgdmFyeSBieSBhIGxhcmdlIGFtb3VudCBiZXR3ZWVuIGRpZmZlcmVudCBzZXR1cHMuCisgVGhlIEFHQyBwcm92aWRlcyBhIHdheSB0byBhZGp1c3QgYSBzaWduYWwgdG8gYSByZWZlcmVuY2Ugdm9sdW1lLgorIFRoaXMgaXMgdXNlZnVsIGZvciB2b2ljZSBvdmVyIElQIGJlY2F1c2UgaXQgcmVtb3ZlcyB0aGUgbmVlZCBmb3IgbWFudWFsCisgYWRqdXN0bWVudCBvZiB0aGUgbWljcm9waG9uZSBnYWluLgorIEEgc2Vjb25kYXJ5IGFkdmFudGFnZSBpcyB0aGF0IGJ5IHNldHRpbmcgdGhlIG1pY3JvcGhvbmUgZ2FpbiB0byBhIGNvbnNlcnZhdGl2ZQorIChsb3cpIGxldmVsLCBpdCBpcyBlYXNpZXIgdG8gYXZvaWQgY2xpcHBpbmcuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGUgdm9pY2UgYWN0aXZpdHkgZGV0ZWN0b3IgKFZBRCkgcHJvdmlkZWQgYnkgdGhlIHByZXByb2Nlc3NvciBpcyBtb3JlIGFkdmFuY2VkCisgdGhhbiB0aGUgb25lIGRpcmVjdGx5IHByb3ZpZGVkIGluIHRoZSBjb2RlYy4KKyAKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU2VjdGlvbgorQWRhcHRpdmUgSml0dGVyIEJ1ZmZlcgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorV2hlbiB0cmFuc21pdHRpbmcgdm9pY2UgKG9yIGFueSBjb250ZW50IGZvciB0aGF0IG1hdHRlcikgb3ZlciBVRFAgb3IgUlRQLAorIHBhY2tldCBtYXkgYmUgbG9zdCwgYXJyaXZlIHdpdGggZGlmZmVyZW50IGRlbGF5LCBvciBldmVuIG91dCBvZiBvcmRlci4KKyBUaGUgcHVycG9zZSBvZiBhIGppdHRlciBidWZmZXIgaXMgdG8gcmVvcmRlciBwYWNrZXRzIGFuZCBidWZmZXIgdGhlbSBsb25nCisgZW5vdWdoIChidXQgbm8gbG9uZ2VyIHRoYW4gbmVjZXNzYXJ5KSBzbyB0aGV5IGNhbiBiZSBzZW50IHRvIGJlIGRlY29kZWQuCisgCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24KK0Fjb3VzdGljIEVjaG8gQ2FuY2VsbGVyCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitJbiBhbnkgaGFuZHMtZnJlZSBjb21tdW5pY2F0aW9uIHN5c3RlbSAoRmlnLgorIAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBccmVme2ZpZzpBY291c3RpYy1lY2hvLW1vZGVsfQorCitcZW5kX2luc2V0CisKKyksIHNwZWVjaCBmcm9tIHRoZSByZW1vdGUgZW5kIGlzIHBsYXllZCBpbiB0aGUgbG9jYWwgbG91ZHNwZWFrZXIsIHByb3BhZ2F0ZXMKKyBpbiB0aGUgcm9vbSBhbmQgaXMgY2FwdHVyZWQgYnkgdGhlIG1pY3JvcGhvbmUuCisgSWYgdGhlIGF1ZGlvIGNhcHR1cmVkIGZyb20gdGhlIG1pY3JvcGhvbmUgaXMgc2VudCBkaXJlY3RseSB0byB0aGUgcmVtb3RlCisgZW5kLCB0aGVuIHRoZSByZW1vdmUgdXNlciBoZWFycyBhbiBlY2hvIG9mIGhpcyB2b2ljZS4KKyBBbiBhY291c3RpYyBlY2hvIGNhbmNlbGxlciBpcyBkZXNpZ25lZCB0byByZW1vdmUgdGhlIGFjb3VzdGljIGVjaG8gYmVmb3JlCisgaXQgaXMgc2VudCB0byB0aGUgcmVtb3RlIGVuZC4KKyBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IHRoZSBlY2hvIGNhbmNlbGxlciBpcyBtZWFudCB0byBpbXByb3ZlCisgdGhlIHF1YWxpdHkgb24gdGhlIAorXHNlcmllcyBib2xkCityZW1vdGUKK1xzZXJpZXMgZGVmYXVsdAorIGVuZC4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1xiZWdpbl9pbnNldCBGbG9hdCBmaWd1cmUKK3dpZGUgZmFsc2UKK3NpZGV3YXlzIGZhbHNlCitzdGF0dXMgb3BlbgorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitcYmVnaW5faW5zZXQgRVJUCitzdGF0dXMgY29sbGFwc2VkCisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKworCitcYmFja3NsYXNoCitiZWdpbntjZW50ZXJ9CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0CisKKworXGJlZ2luX2luc2V0IEdyYXBoaWNzCisJZmlsZW5hbWUgZWNob19wYXRoLmVwcworCXdpZHRoIDEwY20KKworXGVuZF9pbnNldAorCisKK1xiZWdpbl9pbnNldCBFUlQKK3N0YXR1cyBjb2xsYXBzZWQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorCisKK1xiYWNrc2xhc2gKK2VuZHtjZW50ZXJ9CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBDYXB0aW9uCitBY291c3RpYyBlY2hvIG1vZGVsCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxsYWJlbHtmaWc6QWNvdXN0aWMtZWNoby1tb2RlbH0KKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisKK1xuZXdwYWdlCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgQ2hhcHRlcgorQ29tcGlsaW5nCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitDb21waWxpbmcgU3BlZXggdW5kZXIgVU5JWCBvciBhbnkgcGxhdGZvcm0gc3VwcG9ydGVkIGJ5IGF1dG9jb25mIChlLmcuCisgV2luMzIvY3lnd2luKSBpcyBhcyBlYXN5IGFzIHR5cGluZzoKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKKyUgLi9jb25maWd1cmUgW29wdGlvbnNdCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCislIG1ha2UKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKKyUgbWFrZSBpbnN0YWxsCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGUgb3B0aW9ucyBzdXBwb3J0ZWQgYnkgdGhlIFNwZWV4IGNvbmZpZ3VyZSBzY3JpcHQgYXJlOgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorLS1wcmVmaXg9PHBhdGg+IFNwZWNpZmllcyB3aGVyZSB0byBpbnN0YWxsIFNwZWV4CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCistLWVuYWJsZS1zaGFyZWQvLS1kaXNhYmxlLXNoYXJlZCBXaGV0aGVyIHRvIGNvbXBpbGUgc2hhcmVkIGxpYnJhcmllcworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorLS1lbmFibGUtc3RhdGljLy0tZGlzYWJsZS1zdGF0aWMgV2hldGhlciB0byBjb21waWxlIHN0YXRpYyBsaWJyYXJpZXMKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tZGlzYWJsZS13aWRlYmFuZCBEaXNhYmxlIHRoZSB3aWRlYmFuZCBwYXJ0IG9mIFNwZWV4ICh0eXBpY2FsbHkgdG8gc2FtZQorIHNwYWNlKQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorLS1lbmFibGUtdmFsZ3JpbmQgRW5hYmxlIGV4dHJhIGluZm9ybWF0aW9uIHdoZW4gKGFuZCBvbmx5IHdoZW4pIHJ1bm5pbmcKKyB3aXRoIHZhbGdyaW5kCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCistLWVuYWJsZS1zc2UgRW5hYmxlIHVzZSBvZiBTU0UgaW5zdHJ1Y3Rpb25zICh4ODYvZmxvYXQgb25seSkKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tZW5hYmxlLWZpeGVkLXBvaW50CitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtmaXhlZC1wb2ludH0KKworXGVuZF9pbnNldAorCisgQ29tcGlsZSBTcGVleCBmb3IgYSBwcm9jZXNzb3IgdGhhdCBkb2VzIG5vdCBoYXZlIGEgZmxvYXRpbmcgcG9pbnQgdW5pdAorIChGUFUpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCistLWVuYWJsZS1hcm00LWFzbSBFbmFibGUgYXNzZW1ibHkgc3BlY2lmaWMgdG8gdGhlIEFSTXY0IGFyY2hpdGVjdHVyZSAoZ2NjCisgb25seSkKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tZW5hYmxlLWFybTVlLWFzbSBFbmFibGUgYXNzZW1ibHkgc3BlY2lmaWMgdG8gdGhlIEFSTXY1RSBhcmNoaXRlY3R1cmUgKGdjYworIG9ubHkpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCistLWVuYWJsZS1maXhlZC1wb2ludC1kZWJ1ZyBVc2Ugb25seSBmb3IgZGVidWdnaW5nIHRoZSBmaXhlZC1wb2ludAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7Zml4ZWQtcG9pbnR9CisKK1xlbmRfaW5zZXQKKworIGNvZGUgKHZlcnkgc2xvdykKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tZW5hYmxlLWVwaWMtNDhrIEVuYWJsZSBhIHNwZWNpYWwgKGFuZCBub24tY29tcGF0aWJsZSkgNC44IGticHMgbmFycm93YmFuZAorIG1vZGUKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tZW5hYmxlLXRpLWM1NXggRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBUSSBDNXggZmFtaWx5CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCistLWVuYWJsZS1ibGFja2Zpbi1hc20gRW5hYmxlIGFzc2VtYmx5IHNwZWNpZmljIHRvIHRoZSBCbGFja2ZpbiBEU1AgYXJjaGl0ZWN0dXJlCisgKGdjYyBvbmx5KQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorLS1lbmFibGUtMTZiaXQtcHJlY2lzaW9uIFJlZHVjZXMgcHJlY2lzaW9uIHRvIDE2IGJpdHMgaW4gdGltZS1jcml0aWNhbCBhcmVhcworIChmaXhlZC1wb2ludCBvbmx5KQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorCitcbmV3cGFnZQorCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IENoYXB0ZXIKK0NvbW1hbmQtbGluZSBlbmNvZGVyL2RlY29kZXIKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGxhYmVse3NlYzpDb21tYW5kLWxpbmUtZW5jb2Rlci9kZWNvZGVyfQorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlIGJhc2UgU3BlZXggZGlzdHJpYnV0aW9uIGluY2x1ZGVzIGEgY29tbWFuZC1saW5lIGVuY29kZXIgKAorXGVtcGggb24KK3NwZWV4ZW5jCitcZW1waCBkZWZhdWx0CispIGFuZCBkZWNvZGVyICgKK1xlbXBoIG9uCitzcGVleGRlYworXGVtcGggZGVmYXVsdAorKS4KKyBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byB1c2UgdGhlc2UgdG9vbHMuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24KKworXGVtcGggb24KK3NwZWV4ZW5jCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtzcGVleGVuY30KKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoZSAKK1xlbXBoIG9uCitzcGVleGVuYworXGVtcGggZGVmYXVsdAorIHV0aWxpdHkgaXMgdXNlZCB0byBjcmVhdGUgU3BlZXggZmlsZXMgZnJvbSByYXcgUENNIG9yIHdhdmUgZmlsZXMuCisgSXQgY2FuIGJlIHVzZWQgYnkgY2FsbGluZzogCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCitzcGVleGVuYyBbb3B0aW9uc10gaW5wdXRfZmlsZSBvdXRwdXRfZmlsZQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlIHZhbHVlICctJyBmb3IgaW5wdXRfZmlsZSBvciBvdXRwdXRfZmlsZSBjb3JyZXNwb25kcyByZXNwZWN0aXZlbHkgdG8KKyBzdGRpbiBhbmQgc3Rkb3V0LgorIFRoZSB2YWxpZCBvcHRpb25zIGFyZToKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tbmFycm93YmFuZFxJbnNldFNwYWNlIH4KKygtbikgVGVsbCBTcGVleCB0byB0cmVhdCB0aGUgaW5wdXQgYXMgbmFycm93YmFuZCAoOCBrSHopLgorIFRoaXMgaXMgdGhlIGRlZmF1bHQKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0td2lkZWJhbmRcSW5zZXRTcGFjZSB+CisoLXcpIFRlbGwgU3BlZXggdG8gdHJlYXQgdGhlIGlucHV0IGFzIHdpZGViYW5kICgxNiBrSHopCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCistLXVsdHJhLXdpZGViYW5kXEluc2V0U3BhY2UgfgorKC11KSBUZWxsIFNwZWV4IHRvIHRyZWF0IHRoZSBpbnB1dCBhcyAKK1xiZWdpbl9pbnNldCBRdW90ZXMgZWxkCitcZW5kX2luc2V0CisKK3VsdHJhLXdpZGViYW5kCitcYmVnaW5faW5zZXQgUXVvdGVzIGVyZAorXGVuZF9pbnNldAorCisgKDMyIGtIeikKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tcXVhbGl0eVxJbnNldFNwYWNlIH4KK24gU2V0IHRoZSBlbmNvZGluZyBxdWFsaXR5ICgwLTEwKSwgZGVmYXVsdCBpcyA4CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCistLWJpdHJhdGVcSW5zZXRTcGFjZSB+CituIEVuY29kaW5nIGJpdC1yYXRlICh1c2UgYml0LXJhdGUgbiBvciBsb3dlcikgCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCistLXZiciBFbmFibGUgVkJSIChWYXJpYWJsZSBCaXQtUmF0ZSksIGRpc2FibGVkIGJ5IGRlZmF1bHQKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tYWJyXEluc2V0U3BhY2UgfgorbiBFbmFibGUgQUJSIChBdmVyYWdlIEJpdC1SYXRlKSBhdCBuIGticHMsIGRpc2FibGVkIGJ5IGRlZmF1bHQKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tdmFkIEVuYWJsZSBWQUQgKFZvaWNlIEFjdGl2aXR5IERldGVjdGlvbiksIGRpc2FibGVkIGJ5IGRlZmF1bHQKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tZHR4IEVuYWJsZSBEVFggKERpc2NvbnRpbnVvdXMgVHJhbnNtaXNzaW9uKSwgZGlzYWJsZWQgYnkgZGVmYXVsdAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorLS1uZnJhbWVzXEluc2V0U3BhY2UgfgorbiBQYWNrIG4gZnJhbWVzIGluIGVhY2ggT2dnIHBhY2tldCAodGhpcyBzYXZlcyBzcGFjZSBhdCBsb3cgYml0LXJhdGVzKQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorLS1jb21wXEluc2V0U3BhY2UgfgorbiBTZXQgZW5jb2Rpbmcgc3BlZWQvcXVhbGl0eSB0cmFkZW9mZi4KKyBUaGUgaGlnaGVyIHRoZSB2YWx1ZSBvZiBuLCB0aGUgc2xvd2VyIHRoZSBlbmNvZGluZyAoZGVmYXVsdCBpcyAzKQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorLVYgVmVyYm9zZSBvcGVyYXRpb24sIHByaW50IGJpdC1yYXRlIGN1cnJlbnRseSBpbiB1c2UKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0taGVscFxJbnNldFNwYWNlIH4KKygtaCkgUHJpbnQgdGhlIGhlbHAKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tdmVyc2lvblxJbnNldFNwYWNlIH4KKygtdikgUHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdWJzZWN0aW9uKgorU3BlZXggY29tbWVudHMKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tY29tbWVudCBBZGQgdGhlIGdpdmVuIHN0cmluZyBhcyBhbiBleHRyYSBjb21tZW50LgorIFRoaXMgbWF5IGJlIHVzZWQgbXVsdGlwbGUgdGltZXMuCisgCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCistLWF1dGhvciBBdXRob3Igb2YgdGhpcyB0cmFjay4KKyAKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tdGl0bGUgVGl0bGUgZm9yIHRoaXMgdHJhY2suCisgCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN1YnNlY3Rpb24qCitSYXcgaW5wdXQgb3B0aW9ucworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorLS1yYXRlXEluc2V0U3BhY2UgfgorbiBTYW1wbGluZyByYXRlIGZvciByYXcgaW5wdXQKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tc3RlcmVvIENvbnNpZGVyIHJhdyBpbnB1dCBhcyBzdGVyZW8gCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCistLWxlIFJhdyBpbnB1dCBpcyBsaXR0bGUtZW5kaWFuIAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorLS1iZSBSYXcgaW5wdXQgaXMgYmlnLWVuZGlhbiAKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tOGJpdCBSYXcgaW5wdXQgaXMgOC1iaXQgdW5zaWduZWQgCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCistLTE2Yml0IFJhdyBpbnB1dCBpcyAxNi1iaXQgc2lnbmVkIAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTZWN0aW9uCisKK1xlbXBoIG9uCitzcGVleGRlYworXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7c3BlZXhkZWN9CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGUgCitcZW1waCBvbgorc3BlZXhkZWMKK1xlbXBoIGRlZmF1bHQKKyB1dGlsaXR5IGlzIHVzZWQgdG8gZGVjb2RlIFNwZWV4IGZpbGVzIGFuZCBjYW4gYmUgdXNlZCBieSBjYWxsaW5nOiAKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKK3NwZWV4ZGVjIFtvcHRpb25zXSBzcGVleF9maWxlIFtvdXRwdXRfZmlsZV0KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoZSB2YWx1ZSAnLScgZm9yIGlucHV0X2ZpbGUgb3Igb3V0cHV0X2ZpbGUgY29ycmVzcG9uZHMgcmVzcGVjdGl2ZWx5IHRvCisgc3RkaW4gYW5kIHN0ZG91dC4KKyBBbHNvLCB3aGVuIG5vIG91dHB1dF9maWxlIGlzIHNwZWNpZmllZCwgdGhlIGZpbGUgaXMgcGxheWVkIHRvIHRoZSBzb3VuZGNhcmQuCisgVGhlIHZhbGlkIG9wdGlvbnMgYXJlOgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorLS1lbmggZW5hYmxlIHBvc3QtZmlsdGVyIChkZWZhdWx0KQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorLS1uby1lbmggZGlzYWJsZSBwb3N0LWZpbHRlcgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorLS1mb3JjZS1uYiBGb3JjZSBkZWNvZGluZyBpbiBuYXJyb3diYW5kIAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorLS1mb3JjZS13YiBGb3JjZSBkZWNvZGluZyBpbiB3aWRlYmFuZCAKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tZm9yY2UtdXdiIEZvcmNlIGRlY29kaW5nIGluIHVsdHJhLXdpZGViYW5kIAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorLS1tb25vIEZvcmNlIGRlY29kaW5nIGluIG1vbm8gCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCistLXN0ZXJlbyBGb3JjZSBkZWNvZGluZyBpbiBzdGVyZW8gCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCistLXJhdGVcSW5zZXRTcGFjZSB+CituIEZvcmNlIGRlY29kaW5nIGF0IG4gSHogc2FtcGxpbmcgcmF0ZQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorLS1wYWNrZXQtbG9zc1xJbnNldFNwYWNlIH4KK24gU2ltdWxhdGUgbiAlIHJhbmRvbSBwYWNrZXQgbG9zcworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorLVYgVmVyYm9zZSBvcGVyYXRpb24sIHByaW50IGJpdC1yYXRlIGN1cnJlbnRseSBpbiB1c2UKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0taGVscFxJbnNldFNwYWNlIH4KKygtaCkgUHJpbnQgdGhlIGhlbHAKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KKy0tdmVyc2lvblxJbnNldFNwYWNlIH4KKygtdikgUHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorCitcbmV3cGFnZQorCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IENoYXB0ZXIKK1Byb2dyYW1taW5nIHdpdGggU3BlZXggKHRoZSBsaWJzcGVleAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7bGlic3BlZXh9CisKK1xlbmRfaW5zZXQKKworIEFQSQorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7QVBJfQorCitcZW5kX2luc2V0CisKKykKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGxhYmVse3NlYzpQcm9ncmFtbWluZy13aXRoLVNwZWV4fQorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhpcyBzZWN0aW9uIGV4cGxhaW5zIGhvdyB0byB1c2UgdGhlIFNwZWV4IEFQSS4KKyBFeGFtcGxlcyBvZiBjb2RlIGNhbiBhbHNvIGJlIGZvdW5kIGluIGFwcGVuZGl4IAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBccmVme3NlYzpTYW1wbGUtY29kZX0KKworXGVuZF9pbnNldAorCisuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24KK0VuY29kaW5nCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxsYWJlbHtzdWI6RW5jb2Rpbmd9CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitJbiBvcmRlciB0byBlbmNvZGUgc3BlZWNoIHVzaW5nIFNwZWV4LCB5b3UgZmlyc3QgbmVlZCB0bzoKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKKyNpbmNsdWRlIDxzcGVleC9zcGVleC5oPgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorWW91IHRoZW4gbmVlZCB0byBkZWNsYXJlIGEgU3BlZXggYml0LXBhY2tpbmcgc3RydWN0CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCitTcGVleEJpdHMgYml0czsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK2FuZCBhIFNwZWV4IGVuY29kZXIgc3RhdGUKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKK3ZvaWQgKmVuY19zdGF0ZTsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoZSB0d28gYXJlIGluaXRpYWxpemVkIGJ5OgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBMeVgtQ29kZQorc3BlZXhfYml0c19pbml0KCZiaXRzKTsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKK2VuY19zdGF0ZSA9IHNwZWV4X2VuY29kZXJfaW5pdCgmc3BlZXhfbmJfbW9kZSk7CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitGb3Igd2lkZWJhbmQgY29kaW5nLCAKK1xlbXBoIG9uCitzcGVleF9uYl9tb2RlCitcZW1waCBkZWZhdWx0Cisgd2lsbCBiZSByZXBsYWNlZCBieSAKK1xlbXBoIG9uCitzcGVleF93Yl9tb2RlCitcZW1waCBkZWZhdWx0CisuCisgSW4gbW9zdCBjYXNlcywgeW91IHdpbGwgbmVlZCB0byBrbm93IHRoZSBmcmFtZSBzaXplIHVzZWQgYnkgdGhlIG1vZGUgeW91CisgYXJlIHVzaW5nLgorIFlvdSBjYW4gZ2V0IHRoYXQgdmFsdWUgaW4gdGhlIAorXGVtcGggb24KK2ZyYW1lX3NpemUKK1xlbXBoIGRlZmF1bHQKKyB2YXJpYWJsZSB3aXRoOgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBMeVgtQ29kZQorc3BlZXhfZW5jb2Rlcl9jdGwoZW5jX3N0YXRlLFNQRUVYX0dFVF9GUkFNRV9TSVpFLCZmcmFtZV9zaXplKTsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0luIHByYWN0aWNlLCAKK1xlbXBoIG9uCitmcmFtZV9zaXplCitcZW1waCBkZWZhdWx0Cisgd2lsbCBjb3JyZXNwb25kIHRvIDIwIG1zIHdoZW4gdXNpbmcgOCwgMTYsIG9yIDMyIGtIeiBzYW1wbGluZyByYXRlLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorT25jZSB0aGUgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSwgZm9yIGV2ZXJ5IGlucHV0IGZyYW1lOgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBMeVgtQ29kZQorc3BlZXhfYml0c19yZXNldCgmYml0cyk7CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCitzcGVleF9lbmNvZGVfaW50KGVuY19zdGF0ZSwgaW5wdXRfZnJhbWUsICZiaXRzKTsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKK25iQnl0ZXMgPSBzcGVleF9iaXRzX3dyaXRlKCZiaXRzLCBieXRlX3B0ciwgTUFYX05CX0JZVEVTKTsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK3doZXJlIAorXGVtcGggb24KK2lucHV0X2ZyYW1lCitcZW1waCBkZWZhdWx0CisgaXMgYSAKK1xlbXBoIG9uCisoCitcZW1waCBkZWZhdWx0CitzaG9ydAorXGVtcGggb24KKyAqKQorXGVtcGggZGVmYXVsdAorIHBvaW50aW5nIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBzcGVlY2ggZnJhbWUsIAorXGVtcGggb24KK2J5dGVfcHRyCitcZW1waCBkZWZhdWx0CisgaXMgYSAKK1xlbXBoIG9uCisoY2hhciAqKQorXGVtcGggZGVmYXVsdAorIHdoZXJlIHRoZSBlbmNvZGVkIGZyYW1lIHdpbGwgYmUgd3JpdHRlbiwgCitcZW1waCBvbgorTUFYX05CX0JZVEVTCitcZW1waCBkZWZhdWx0CisgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY2FuIGJlIHdyaXR0ZW4gdG8gCitcZW1waCBvbgorYnl0ZV9wdHIKK1xlbXBoIGRlZmF1bHQKKyB3aXRob3V0IGNhdXNpbmcgYW4gb3ZlcmZsb3cgYW5kIAorXGVtcGggb24KK25iQnl0ZXMKK1xlbXBoIGRlZmF1bHQKKyBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gdG8gCitcZW1waCBvbgorYnl0ZV9wdHIKK1xlbXBoIGRlZmF1bHQKKyAodGhlIGVuY29kZWQgc2l6ZSBpbiBieXRlcykuCisgQmVmb3JlIGNhbGxpbmcgc3BlZXhfYml0c193cml0ZSwgaXQgaXMgcG9zc2libGUgdG8gZmluZCB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgdGhhdCBuZWVkIHRvIGJlIHdyaXR0ZW4gYnkgY2FsbGluZyAKK1xmYW1pbHkgdHlwZXdyaXRlcgorc3BlZXhfYml0c19uYnl0ZXMoJmJpdHMpCitcZmFtaWx5IGRlZmF1bHQKKywgd2hpY2ggcmV0dXJucyBhIG51bWJlciBvZiBieXRlcy4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0l0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIHVzZSB0aGUgCitcZW1waCBvbgorc3BlZXhfZW5jb2RlKCkKK1xlbXBoIGRlZmF1bHQKKyBmdW5jdGlvbiwgd2hpY2ggdGFrZXMgYSAKK1xlbXBoIG9uCisoZmxvYXQgKikKK1xlbXBoIGRlZmF1bHQKKyBmb3IgdGhlIGF1ZGlvLgorIEhvd2V2ZXIsIHRoaXMgd291bGQgbWFrZSBhbiBldmVudHVhbCBwb3J0IHRvIGFuIEZQVS1sZXNzIHBsYXRmb3JtIChsaWtlCisgQVJNKSBtb3JlIGNvbXBsaWNhdGVkLgorIEludGVybmFsbHksIAorXGVtcGggb24KK3NwZWV4X2VuY29kZSgpIAorXGVtcGggZGVmYXVsdAorYW5kCitcZW1waCBvbgorIHNwZWV4X2VuY29kZV9pbnQoKQorXGVtcGggZGVmYXVsdAorIGFyZSBwcm9jZXNzZWQgaW4gdGhlIHNhbWUgd2F5LgorIFdoZXRoZXIgdGhlIGVuY29kZXIgdXNlcyB0aGUgZml4ZWQtcG9pbnQgdmVyc2lvbiBpcyBvbmx5IGRlY2lkZWQgYnkgdGhlCisgY29tcGlsZS10aW1lIGZsYWdzLCBub3QgYXQgdGhlIEFQSSBsZXZlbC4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0FmdGVyIHlvdSdyZSBkb25lIHdpdGggdGhlIGVuY29kaW5nLCBmcmVlIGFsbCByZXNvdXJjZXMgd2l0aDoKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKK3NwZWV4X2JpdHNfZGVzdHJveSgmYml0cyk7CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCitzcGVleF9lbmNvZGVyX2Rlc3Ryb3koZW5jX3N0YXRlKTsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoYXQncyBhYm91dCBpdCBmb3IgdGhlIGVuY29kZXIuCisgCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24KK0RlY29kaW5nCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxsYWJlbHtzdWI6RGVjb2Rpbmd9CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitJbiBvcmRlciB0byBkZWNvZGUgc3BlZWNoIHVzaW5nIFNwZWV4LCB5b3UgZmlyc3QgbmVlZCB0bzoKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKKyNpbmNsdWRlIDxzcGVleC9zcGVleC5oPgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorWW91IGFsc28gbmVlZCB0byBkZWNsYXJlIGEgU3BlZXggYml0LXBhY2tpbmcgc3RydWN0CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCitTcGVleEJpdHMgYml0czsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK2FuZCBhIFNwZWV4IGRlY29kZXIgc3RhdGUKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKK3ZvaWQgKmRlY19zdGF0ZTsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoZSB0d28gYXJlIGluaXRpYWxpemVkIGJ5OgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBMeVgtQ29kZQorc3BlZXhfYml0c19pbml0KCZiaXRzKTsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKK2RlY19zdGF0ZSA9IHNwZWV4X2RlY29kZXJfaW5pdCgmc3BlZXhfbmJfbW9kZSk7CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitGb3Igd2lkZWJhbmQgZGVjb2RpbmcsIAorXGVtcGggb24KK3NwZWV4X25iX21vZGUKK1xlbXBoIGRlZmF1bHQKKyB3aWxsIGJlIHJlcGxhY2VkIGJ5IAorXGVtcGggb24KK3NwZWV4X3diX21vZGUKK1xlbXBoIGRlZmF1bHQKKy4KKyBJZiB5b3UgbmVlZCB0byBvYnRhaW4gdGhlIHNpemUgb2YgdGhlIGZyYW1lcyB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgZGVjb2RlciwKKyB5b3UgY2FuIGdldCB0aGF0IHZhbHVlIGluIHRoZSAKK1xlbXBoIG9uCitmcmFtZV9zaXplCitcZW1waCBkZWZhdWx0CisgdmFyaWFibGUgd2l0aDoKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKK3NwZWV4X2RlY29kZXJfY3RsKGRlY19zdGF0ZSwgU1BFRVhfR0VUX0ZSQU1FX1NJWkUsICZmcmFtZV9zaXplKTsgCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGVyZSBpcyBhbHNvIGEgcGFyYW1ldGVyIHRoYXQgY2FuIGJlIHNldCBmb3IgdGhlIGRlY29kZXI6IHdoZXRoZXIgb3Igbm90CisgdG8gdXNlIGEgcGVyY2VwdHVhbCBlbmhhbmNlci4KKyBUaGlzIGNhbiBiZSBzZXQgYnk6IAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBMeVgtQ29kZQorc3BlZXhfZGVjb2Rlcl9jdGwoZGVjX3N0YXRlLCBTUEVFWF9TRVRfRU5ILCAmZW5oKTsgCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCit3aGVyZSAKK1xlbXBoIG9uCitlbmgKK1xlbXBoIGRlZmF1bHQKKyBpcyBhbiBpbnQgd2l0aCB2YWx1ZSAwIHRvIGhhdmUgdGhlIGVuaGFuY2VyIGRpc2FibGVkIGFuZCAxIHRvIGhhdmUgaXQgZW5hYmxlZC4KKyBBcyBvZiAxLjItYmV0YTEsIHRoZSBkZWZhdWx0IGlzIG5vdyB0byBlbmFibGUgdGhlIGVuaGFuY2VyLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorQWdhaW4sIG9uY2UgdGhlIGRlY29kZXIgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSwgZm9yIGV2ZXJ5IGlucHV0IGZyYW1lOgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBMeVgtQ29kZQorc3BlZXhfYml0c19yZWFkX2Zyb20oJmJpdHMsIGlucHV0X2J5dGVzLCBuYkJ5dGVzKTsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKK3NwZWV4X2RlY29kZV9pbnQoZGVjX3N0YXRlLCAmYml0cywgb3V0cHV0X2ZyYW1lKTsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK3doZXJlIGlucHV0X2J5dGVzIGlzIGEgCitcZW1waCBvbgorKGNoYXIgKikKK1xlbXBoIGRlZmF1bHQKKyBjb250YWluaW5nIHRoZSBiaXQtc3RyZWFtIGRhdGEgcmVjZWl2ZWQgZm9yIGEgZnJhbWUsIAorXGVtcGggb24KK25iQnl0ZXMKK1xlbXBoIGRlZmF1bHQKKyBpcyB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoYXQgYml0LXN0cmVhbSwgYW5kIAorXGVtcGggb24KK291dHB1dF9mcmFtZQorXGVtcGggZGVmYXVsdAorIGlzIGEgCitcZW1waCBvbgorKHNob3J0ICopCitcZW1waCBkZWZhdWx0CisgYW5kIHBvaW50cyB0byB0aGUgYXJlYSB3aGVyZSB0aGUgZGVjb2RlZCBzcGVlY2ggZnJhbWUgd2lsbCBiZSB3cml0dGVuLgorIEEgTlVMTCB2YWx1ZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgaW5kaWNhdGVzIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0aGUgYml0cworIGZvciB0aGUgY3VycmVudCBmcmFtZS4KKyBXaGVuIGEgZnJhbWUgaXMgbG9zdCwgdGhlIFNwZWV4IGRlY29kZXIgd2lsbCBkbyBpdHMgYmVzdCB0byAiZ3Vlc3MiIHRoZQorIGNvcnJlY3Qgc2lnbmFsLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorQXMgZm9yIHRoZSBlbmNvZGVyLCB0aGUgCitcZW1waCBvbgorc3BlZXhfZGVjb2RlKCkKK1xlbXBoIGRlZmF1bHQKKyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgdXNlZCwgd2l0aCBhIAorXGVtcGggb24KKyhmbG9hdCAqKQorXGVtcGggZGVmYXVsdAorIGFzIHRoZSBvdXRwdXQgZm9yIHRoZSBhdWRpby4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0FmdGVyIHlvdSdyZSBkb25lIHdpdGggdGhlIGRlY29kaW5nLCBmcmVlIGFsbCByZXNvdXJjZXMgd2l0aDoKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKK3NwZWV4X2JpdHNfZGVzdHJveSgmYml0cyk7CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCitzcGVleF9kZWNvZGVyX2Rlc3Ryb3koZGVjX3N0YXRlKTsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU2VjdGlvbgorUHJlcHJvY2Vzc29yCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxsYWJlbHtzdWI6UHJlcHJvY2Vzc29yfQorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorSW4gb3JkZXIgdG8gdXNlIHRoZSBTcGVleCBwcmVwcm9jZXNzb3IKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e3ByZXByb2Nlc3Nvcn0KKworXGVuZF9pbnNldAorCissIHlvdSBmaXJzdCBuZWVkIHRvOgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBMeVgtQ29kZQorI2luY2x1ZGUgPHNwZWV4L3NwZWV4X3ByZXByb2Nlc3MuaD4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoZW4sIGEgcHJlcHJvY2Vzc29yIHN0YXRlIGNhbiBiZSBjcmVhdGVkIGFzOgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBMeVgtQ29kZQorU3BlZXhQcmVwcm9jZXNzU3RhdGUgKnByZXByb2Nlc3Nfc3RhdGUgPSBzcGVleF9wcmVwcm9jZXNzX3N0YXRlX2luaXQoZnJhbWVfc2l6ZSwKKyBzYW1wbGluZ19yYXRlKTsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0l0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgc2FtZSB2YWx1ZSBmb3IgCitcZmFtaWx5IHR5cGV3cml0ZXIKK2ZyYW1lX3NpemUKK1xmYW1pbHkgZGVmYXVsdAorIGFzIGlzIHVzZWQgYnkgdGhlIGVuY29kZXIgKDIwIAorXGVtcGggb24KK21zCitcZW1waCBkZWZhdWx0CispLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorRm9yIGVhY2ggaW5wdXQgZnJhbWUsIHlvdSBuZWVkIHRvIGNhbGw6CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCitzcGVleF9wcmVwcm9jZXNzX3J1bihwcmVwcm9jZXNzX3N0YXRlLCBhdWRpb19mcmFtZSk7CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCit3aGVyZSAKK1xmYW1pbHkgdHlwZXdyaXRlcgorYXVkaW9fZnJhbWUKK1xmYW1pbHkgZGVmYXVsdAorIGlzIHVzZWQgYm90aCBhcyBpbnB1dCBhbmQgb3V0cHV0LgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorSW4gY2FzZXMgd2hlcmUgdGhlIG91dHB1dCBhdWRpbyBpcyBub3QgdXNlZnVsIGZvciBhIGNlcnRhaW4gZnJhbWUsIGl0IGlzCisgcG9zc2libGUgdG8gdXNlIGluc3RlYWQ6CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCitzcGVleF9wcmVwcm9jZXNzX2VzdGltYXRlX3VwZGF0ZShwcmVwcm9jZXNzX3N0YXRlLCBhdWRpb19mcmFtZSk7CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGlzIGNhbGwgd2lsbCB1cGRhdGUgYWxsIHRoZSBwcmVwcm9jZXNzb3IgaW50ZXJuYWwgc3RhdGUgdmFyaWFibGVzIHdpdGhvdXQKKyBjb21wdXRpbmcgdGhlIG91dHB1dCBhdWRpbywgdGh1cyBzYXZpbmcgc29tZSBDUFUgY3ljbGVzLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlIGJlaGF2aW91ciBvZiB0aGUgcHJlcHJvY2Vzc29yIGNhbiBiZSBjaGFuZ2VkIHVzaW5nOgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBMeVgtQ29kZQorc3BlZXhfcHJlcHJvY2Vzc19jdGwocHJlcHJvY2Vzc19zdGF0ZSwgcmVxdWVzdCwgcHRyKTsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK3doaWNoIGlzIHVzZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBlbmNvZGVyIGFuZCBkZWNvZGVyIGVxdWl2YWxlbnQuCisgT3B0aW9ucyBhcmUgbGlzdGVkIGluIFNlY3Rpb24gLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlIHByZXByb2Nlc3NvciBzdGF0ZSBjYW4gYmUgZGVzdHJveWVkIHVzaW5nOgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBMeVgtQ29kZQorc3BlZXhfcHJlcHJvY2Vzc19zdGF0ZV9kZXN0cm95KHByZXByb2Nlc3Nfc3RhdGUpOworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTZWN0aW9uCitFY2hvIENhbmNlbGxhdGlvbgorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcbGFiZWx7c3ViOkVjaG8tQ2FuY2VsbGF0aW9ufQorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlIFNwZWV4IGxpYnJhcnkgbm93IGluY2x1ZGVzIGFuIGVjaG8gY2FuY2VsbGF0aW9uCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtlY2hvIGNhbmNlbGxhdGlvbn0KKworXGVuZF9pbnNldAorCisgYWxnb3JpdGhtIHN1aXRhYmxlIGZvciBBY291c3RpYyBFY2hvIENhbmNlbGxhdGlvbgorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7YWNvdXN0aWMgZWNobyBjYW5jZWxsYXRpb259CisKK1xlbmRfaW5zZXQKKworIChBRUMpLgorIEluIG9yZGVyIHRvIHVzZSB0aGUgZWNobyBjYW5jZWxsZXIsIHlvdSBmaXJzdCBuZWVkIHRvCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCisjaW5jbHVkZSA8c3BlZXgvc3BlZXhfZWNoby5oPgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlbiwgYW4gZWNobyBjYW5jZWxsZXIgc3RhdGUgY2FuIGJlIGNyZWF0ZWQgYnk6CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCitTcGVleEVjaG9TdGF0ZSAqZWNob19zdGF0ZSA9IHNwZWV4X2VjaG9fc3RhdGVfaW5pdChmcmFtZV9zaXplLCBmaWx0ZXJfbGVuZ3RoKTsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK3doZXJlIAorXGZhbWlseSB0eXBld3JpdGVyCitmcmFtZV9zaXplCitcZmFtaWx5IGRlZmF1bHQKKyBpcyB0aGUgYW1vdW50IG9mIGRhdGEgKGluIHNhbXBsZXMpIHlvdSB3YW50IHRvIHByb2Nlc3MgYXQgb25jZSBhbmQgCitcZmFtaWx5IHR5cGV3cml0ZXIKK2ZpbHRlcl9sZW5ndGgKK1xmYW1pbHkgZGVmYXVsdAorIGlzIHRoZSBsZW5ndGggKGluIHNhbXBsZXMpIG9mIHRoZSBlY2hvIGNhbmNlbGxpbmcgZmlsdGVyIHlvdSB3YW50IHRvIHVzZQorIChhbHNvIGtub3duIGFzIAorXHNoYXBlIGl0YWxpYwordGFpbCBsZW5ndGgKK1xzaGFwZSBkZWZhdWx0CisKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e3RhaWwgbGVuZ3RofQorCitcZW5kX2luc2V0CisKKykuCisgSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGEgZnJhbWUgc2l6ZSBpbiB0aGUgb3JkZXIgb2YgMjAgbXMgKG9yIGVxdWFsIHRvCisgdGhlIGNvZGVjIGZyYW1lIHNpemUpIGFuZCBtYWtlIHN1cmUgaXQgaXMgZWFzeSB0byBwZXJmb3JtIGFuIEZGVCBvZiB0aGF0Cisgc2l6ZSAocG93ZXJzIG9mIHR3byBhcmUgYmV0dGVyIHRoYW4gcHJpbWUgc2l6ZXMpLgorIFRoZSByZWNvbW1lbmRlZCB0YWlsIGxlbmd0aCBpcyBhcHByb3hpbWF0ZWx5IHRoZSB0aGlyZCBvZiB0aGUgcm9vbSByZXZlcmJlcmF0aW8KK24gdGltZS4KKyBGb3IgZXhhbXBsZSwgaW4gYSBzbWFsbCByb29tLCByZXZlcmJlcmF0aW9uIHRpbWUgaXMgaW4gdGhlIG9yZGVyIG9mIDMwMAorIG1zLCBzbyBhIHRhaWwgbGVuZ3RoIG9mIDEwMCBtcyBpcyBhIGdvb2QgY2hvaWNlICg4MDAgc2FtcGxlcyBhdCA4MDAwIEh6Cisgc2FtcGxpbmcgcmF0ZSkuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitPbmNlIHRoZSBlY2hvIGNhbmNlbGxlciBzdGF0ZSBpcyBjcmVhdGVkLCBhdWRpbyBjYW4gYmUgcHJvY2Vzc2VkIGJ5OgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBMeVgtQ29kZQorc3BlZXhfZWNob19jYW5jZWxsYXRpb24oZWNob19zdGF0ZSwgaW5wdXRfZnJhbWUsIGVjaG9fZnJhbWUsIG91dHB1dF9mcmFtZSk7CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCit3aGVyZSAKK1xmYW1pbHkgdHlwZXdyaXRlcgoraW5wdXRfZnJhbWUKK1xmYW1pbHkgZGVmYXVsdAorIGlzIHRoZSBhdWRpbyBhcyBjYXB0dXJlZCBieSB0aGUgbWljcm9waG9uZSwgCitcZmFtaWx5IHR5cGV3cml0ZXIKK2VjaG9fZnJhbWUKK1xmYW1pbHkgZGVmYXVsdAorIGlzIHRoZSBzaWduYWwgdGhhdCB3YXMgcGxheWVkIGluIHRoZSBzcGVha2VyIChhbmQgbmVlZHMgdG8gYmUgcmVtb3ZlZCkKKyBhbmQgCitcZmFtaWx5IHR5cGV3cml0ZXIKK291dHB1dF9mcmFtZQorXGZhbWlseSBkZWZhdWx0CisgaXMgdGhlIHNpZ25hbCB3aXRoIGVjaG8gcmVtb3ZlZC4KKyAKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK09uZSBpbXBvcnRhbnQgdGhpbmcgdG8ga2VlcCBpbiBtaW5kIGlzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiAKK1xmYW1pbHkgdHlwZXdyaXRlcgoraW5wdXRfZnJhbWUKK1xmYW1pbHkgZGVmYXVsdAorIGFuZCAKK1xmYW1pbHkgdHlwZXdyaXRlcgorZWNob19mcmFtZQorXGZhbWlseSBkZWZhdWx0CisuCisgSXQgaXMgaW1wb3J0YW50IHRoYXQsIGF0IGFueSB0aW1lLCBhbnkgZWNobyB0aGF0IGlzIHByZXNlbnQgaW4gdGhlIGlucHV0CisgaGFzIGFscmVhZHkgYmVlbiBzZW50IHRvIHRoZSBlY2hvIGNhbmNlbGxlciBhcyAKK1xmYW1pbHkgdHlwZXdyaXRlcgorZWNob19mcmFtZQorXGZhbWlseSBkZWZhdWx0CisuCisgSW4gb3RoZXIgd29yZHMsIHRoZSBlY2hvIGNhbmNlbGxlciBjYW5ub3QgcmVtb3ZlIGEgc2lnbmFsIHRoYXQgaXQgaGFzbid0CisgeWV0IHJlY2VpdmVkLgorIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgZGVsYXkgYmV0d2VlbiB0aGUgaW5wdXQgc2lnbmFsIGFuZCB0aGUgZWNobyBzaWduYWwKKyBtdXN0IGJlIHNtYWxsIGVub3VnaCBiZWNhdXNlIG90aGVyd2lzZSBwYXJ0IG9mIHRoZSBlY2hvIGNhbmNlbGxhdGlvbiBmaWx0ZXIKKyBpcyBpbmVmZmljaWVudC4KKyBJbiB0aGUgaWRlYWwgY2FzZSwgeW91IGNvZGUgd291bGQgbG9vayBsaWtlOgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBMeVgtQ29kZQord3JpdGVfdG9fc291bmRjYXJkKGVjaG9fZnJhbWUsIGZyYW1lX3NpemUpOworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBMeVgtQ29kZQorcmVhZF9mcm9tX3NvdW5kY2FyZChpbnB1dF9mcmFtZSwgZnJhbWVfc2l6ZSk7CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCitzcGVleF9lY2hvX2NhbmNlbGxhdGlvbihlY2hvX3N0YXRlLCBpbnB1dF9mcmFtZSwgZWNob19mcmFtZSwgb3V0cHV0X2ZyYW1lKTsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0lmIHlvdSB3aXNoIHRvIGZ1cnRoZXIgcmVkdWNlIHRoZSBlY2hvIHByZXNlbnQgaW4gdGhlIHNpZ25hbCwgeW91IGNhbiBkbworIHNvIGJ5IAorXGZhbWlseSB0eXBld3JpdGVyCithc3NvY2lhdGluZyB0aGUgZWNobyBjYW5jZWxsZXIgdG8gdGhlIHByZXByb2Nlc3NvcgorXGZhbWlseSBkZWZhdWx0CisgKHNlZSBTZWN0aW9uIAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBccmVme3N1YjpQcmVwcm9jZXNzb3J9CisKK1xlbmRfaW5zZXQKKworKS4KKyBUaGlzIGlzIGRvbmUgYnkgY2FsbGluZzoKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKK3NwZWV4X3ByZXByb2Nlc3NfY3RsKHByZXByb2Nlc3Nfc3RhdGUsIFNQRUVYX1BSRVBST0NFU1NfU0VUX0VDSE9fU1RBVEUsCisgZWNob19zdGF0ZSk7CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitpbiB0aGUgaW5pdGlhbGlzYXRpb24uCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitBcyBvZiB2ZXJzaW9uIDEuMi1iZXRhMiwgdGhlcmUgaXMgYW4gYWx0ZXJuYXRpdmUsIHNpbXBsZXIgQVBJIHRoYXQgY2FuIGJlCisgdXNlZCBpbnN0ZWFkIG9mIAorXGVtcGggb24KK3NwZWV4X2VjaG9fY2FuY2VsbGF0aW9uKCkKK1xlbXBoIGRlZmF1bHQKKy4KKyBXaGVuIGF1ZGlvIGNhcHR1cmUgYW5kIHBsYXliYWNrIGFyZSBoYW5kbGVkIGFzeW5jaHJvbm91c2x5IChlLmcuCisgaW4gZGlmZmVyZW50IHRocmVhZHMgb3IgdXNpbmcgdGhlIAorXGVtcGggb24KK3BvbGwoKQorXGVtcGggZGVmYXVsdAorIG9yIAorXGVtcGggb24KK3NlbGVjdCgpCitcZW1waCBkZWZhdWx0Cisgc3lzdGVtIGNhbGwpLCBpdCBjYW4gYmUgZGlmZmljdWx0IHRvIGtlZXAgdHJhY2sgb2Ygd2hhdCBpbnB1dF9mcmFtZSBjb21lcworIHdpdGggd2hhdCBlY2hvX2ZyYW1lLgorIEluc3RlYWQsIHRoZSBwbGF5YmFjayBjb210ZXh0L3RocmVhZCBjYW4gc2ltcGx5IGNhbGw6CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCitzcGVleF9lY2hvX3BsYXliYWNrKGVjaG9fc3RhdGUsIGVjaG9fZnJhbWUpOworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorZXZlcnkgdGltZSBhbiBhdWRpbyBmcmFtZSBpcyBwbGF5ZWQuCisgVGhlbiwgdGhlIGNhcHR1cmUgY29udGV4dC90aHJlYWQgY2FsbHM6CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCitzcGVleF9lY2hvX2NhcHR1cmUoZWNob19zdGF0ZSwgaW5wdXRfZnJhbWUsIG91dHB1dF9mcmFtZSk7CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitmb3IgZXZlcnkgZnJhbWUgY2FwdHVyZWQuCisgSW50ZXJuYWxseSwgCitcZW1waCBvbgorc3BlZXhfZWNob19wbGF5YmFjaygpCitcZW1waCBkZWZhdWx0Cisgc2ltcGx5IGJ1ZmZlcnMgdGhlIHBsYXliYWNrIGZyYW1lIHNvIGl0IGNhbiBiZSB1c2VkIGJ5IAorXGVtcGggb24KK3NwZWV4X2VjaG9fY2FwdHVyZSgpCitcZW1waCBkZWZhdWx0CisgdG8gY2FsbCAKK1xlbXBoIG9uCitzcGVleF9lY2hvX2NhbmNlbCgpCitcZW1waCBkZWZhdWx0CisuCisgQSBzaWRlIGVmZmVjdCBvZiB1c2luZyB0aGlzIGFsdGVybmF0ZSBBUEkgaXMgdGhhdCB0aGUgcGxheWJhY2sgYXVkaW8gaXMKKyBkZWxheWVkIGJ5IHR3byBmcmFtZXMsIHdoaWNoIGlzIHRoZSBub3JtYWwgZGVsYXkgY2F1c2VkIGJ5IHRoZSBzb3VuZGNhcmQuCisgV2hlbiBjYXB0dXJlIGFuZCBwbGF5YmFjayBhcmUgYWxyZWFkeSBzeW5jaHJvbmlzZWQsIAorXGVtcGggb24KK3NwZWV4X2VjaG9fY2FuY2VsbGF0aW9uKCkKK1xlbXBoIGRlZmF1bHQKKyBpcyBwcmVmZXJhYmxlIHNpbmNlIGl0IGdpdmVzIGJldHRlciBjb250cm9sIG9uIHRoZSBleGFjdCBpbnB1dC9lY2hvIHRpbWluZy4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoZSBlY2hvIGNhbmNlbGxhdGlvbiBzdGF0ZSBjYW4gYmUgZGVzdHJveWVkIHdpdGg6CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCitzcGVleF9lY2hvX3N0YXRlX2Rlc3Ryb3koZWNob19zdGF0ZSk7CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgZWNobyBjYW5jZWxsZXIgc28gaXQgY2FuIGJlCisgcmV1c2VkIHdpdGhvdXQgdGhlIG5lZWQgdG8gY3JlYXRlIGFub3RoZXIgc3RhdGUgd2l0aDoKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKK3NwZWV4X2VjaG9fc3RhdGVfcmVzZXQoZWNob19zdGF0ZSk7CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN1YnNlY3Rpb24KK1Ryb3VibGVzaG9vdGluZworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlcmUgYXJlIHNldmVyYWwgdGhpbmdzIHRoYXQgbWF5IHByZXZlbnQgdGhlIGVjaG8gY2FuY2VsbGVyIGZyb20gd29ya2luZworIHByb3Blcmx5LgorIE9uZSBvZiB0aGVtIGlzIGEgYnVnIChvciBzb21ldGhpbmcgc3Vib3B0aW1hbCkgaW4gdGhlIGNvZGUsIGJ1dCB0aGVyZSBhcmUKKyBtYW55IG90aGVycyB5b3Ugc2hvdWxkIGNvbnNpZGVyIGZpcnN0CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEl0ZW1pemUKK1VzaW5nIGEgZGlmZmVyZW50IHNvdW5kY2FyZCB0byBkbyB0aGUgY2FwdHVyZSBhbmQgcGxhYmFjayB3aWxsICpub3QqIHdvcmssCisgcmVnYXJkbGVzcyBvZiB3aGF0IHlvdSBtYXkgdGhpbmsuCisgVGhlIG9ubHkgZXhjZXB0aW9uIHRvIHRoYXQgaXMgaWYgdGhlIHR3byBjYXJkcyBjYW4gYmUgbWFkZSB0byBoYXZlIHRoZWlyCisgc2FtcGxpbmcgY2xvY2sgCitcYmVnaW5faW5zZXQgUXVvdGVzIGVsZAorXGVuZF9pbnNldAorCitsb2NrZWQKK1xiZWdpbl9pbnNldCBRdW90ZXMgZXJkCitcZW5kX2luc2V0CisKKyBvbiB0aGUgc2FtZSBjbG9jayBzb3VyY2UuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEl0ZW1pemUKK1RoZSBkZWxheSBiZXR3ZWVuIHRoZSByZWNvcmQgYW5kIHBsYXliYWNrIHNpZ25hbHMgbXVzdCBiZSBtaW5pbWFsLgorIEFueSBzaWduYWwgcGxheWVkIGhhcyB0byAKK1xiZWdpbl9pbnNldCBRdW90ZXMgZWxkCitcZW5kX2luc2V0CisKK2FwcGVhcgorXGJlZ2luX2luc2V0IFF1b3RlcyBlcmQKK1xlbmRfaW5zZXQKKworIG9uIHRoZSBwbGF5YmFjayAoZmFyIGVuZCkgc2lnbmFsIHNsaWdodGx5IGJlZm9yZSB0aGUgZWNobyBjYW5jZWxsZXIgCitcYmVnaW5faW5zZXQgUXVvdGVzIGVsZAorXGVuZF9pbnNldAorCitzZWVzCitcYmVnaW5faW5zZXQgUXVvdGVzIGVyZAorXGVuZF9pbnNldAorCisgaXQgaW4gdGhlIG5lYXIgZW5kIHNpZ25hbCwgYnV0IGV4Y2Vzc2l2ZSBkZWxheSBtZWFucyB0aGF0IHBhcnQgb2YgdGhlIGZpbHRlcgorIGxlbmd0aCBpcyB3YXN0ZWQuCisgSW4gdGhlIHdvcnN0IHNpdHVhdGlvbnMsIHRoZSBkZWxheSBpcyBzdWNoIHRoYXQgaXQgaXMgbG9uZ2VyIHRoYW4gdGhlIGZpbHRlcgorIGxlbmd0aCwgaW4gd2hpY2ggY2FzZSwgbm8gZWNobyBjYW4gYmUgY2FuY2VsbGVkLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBJdGVtaXplCitXaGVuIGl0IGNvbWVzIHRvIGVjaG8gdGFpbCBsZW5ndGggKGZpbHRlciBsZW5ndGgpLCBsb25nZXIgaXMgKm5vdCogYmV0dGVyLgorIEFjdHVhbGx5LCB0aGUgbG9uZ2VyIHRoZSB0YWlsIGxlbmd0aCwgdGhlIGxvbmdlciBpdCB0YWtlcyBmb3IgdGhlIGZpbHRlcgorIHRvIGFkYXB0LgorIE9mIGNvdXJzZSwgYSB0YWlsIGxlbmd0aCB0aGF0IGlzIHRvbyBzaG9ydCB3aWxsIG5vdCBjYW5jZWwgZW5vdWdoIGVjaG8sCisgYnV0IHRoZSBtb3N0IGNvbW1vbiBwcm9ibGVtIHNlZW4gaXMgdGhhdCBwZW9wbGUgc2V0IGEgdmVyeSBsb25nIHRhaWwgbGVuZ3RoCisgYW5kIHRoZW4gd29uZGVyIHdoeSBubyBlY2hvIGlzIGJlaW5nIGNhbmNlbGxlZC4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgSXRlbWl6ZQorTm9uLWxpbmVhciBkaXN0b3J0aW9uIGNhbm5vdCAoYnkgZGVmaW5pdGlvbikgYmUgbW9kZWxlZCBieSB0aGUgbGluZWFyIGFkYXB0aXZlCisgZmlsdGVyIHVzZWQgaW4gdGhlIGVjaG8gY2FuY2VsbGVyIGFuZCB0aHVzIGNhbm5vdCBiZSBjYW5jZWxsZWQuCisgVXNlIGdvb2QgYXVkaW8gZ2VhciBhbmQgYXZvaWQgc2F0dXJhdGlvbi9jbGlwcGluZy4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0Fsc28gdXNlZnVsIGlzIHJlYWRpbmcgCitcZW1waCBvbgorRWNobyBDYW5jZWxsYXRpb24gRGVteXN0aWZpZWQKK1xlbXBoIGRlZmF1bHQKKyBieSBBbGV4ZXkgRnJ1bnplCitcYmVnaW5faW5zZXQgRm9vdAorc3RhdHVzIGNvbGxhcHNlZAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitodHRwOi8vd3d3LmVtYmVkZGVkc3Rhci5jb20vYXJ0aWNsZXMvMjAwMy83L2FydGljbGUyMDAzMDcyMC0xLmh0bWwKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKworLCB3aGljaCBleHBsYWlucyB0aGUgZnVuZGFtZW50YWwgcHJpbmNpcGxlcyBvZiBlY2hvIGNhbmNlbGxhdGlvbi4KKyBUaGUgZGV0YWlscyBvZiB0aGUgYWxnb3JpdGhtIGRlc2NyaWJlZCBpbiB0aGUgYXJ0aWNsZSBhcmUgZGlmZmVyZW50LCBidXQKKyB0aGUgZ2VuZXJhbCBpZGVhcyBvZiBlY2hvIGNhbmNlbGxhdGlvbiB0aHJvdWdoIGFkYXB0aXZlIGZpbHRlcnMgYXJlIHRoZQorIHNhbWUuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitBcyBvZiB2ZXJzaW9uIDEuMmJldGEyLCBhIG5ldyAKK1xmYW1pbHkgdHlwZXdyaXRlcgorZWNob19kaWFnbm9zdGljLm0KK1xmYW1pbHkgZGVmYXVsdAorIHRvb2wgaXMgaW5jbHVkZWQgaW4gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24uCisgVGhlIGZpcnN0IHN0ZXAgaXMgdG8gZGVmaW5lIERVTVBfRUNIT19DQU5DRUxfREFUQSBkdXJpbmcgdGhlIGJ1aWxkLgorIFRoaXMgY2F1c2VzIHRoZSBlY2hvIGNhbmNlbGxlciB0byBhdXRvbWF0aWNhbGx5IHNhdmUgdGhlIG5lYXItZW5kLCBmYXItZW5kCisgYW5kIG91dHB1dCBzaWduYWxzIHRvIGZpbGVzIChhZWNfcmVjLnN3IGFlY19wbGF5LnN3IGFuZCBhZWNfb3V0LnN3KS4KKyBUaGVzZSBhcmUgZXhhY3RseSB3aGF0IHRoZSBBRUMgcmVjZWl2ZXMgYW5kIG91dHB1dHMuCisgRnJvbSB0aGVyZSwgaXQgaXMgbmVjZXNzYXJ5IHRvIHN0YXJ0IE9jdGF2ZSBhbmQgdHlwZToKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKK2VjaG9fZGlhZ25vc3RpYygnYWVjX3JlYy5zdycsICdhZWNfcGxheS5zdycsICdhZWNfZGlhZ25vc3RpYy5zdycsIDEwMjQpOworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlIHZhbHVlIG9mIDEwMjQgaXMgdGhlIGZpbHRlciBsZW5ndGggYW5kIGNhbiBiZSBjaGFuZ2VkLgorIFRoZXJlIHdpbGwgYmUgc29tZSAoaG9wZWZ1bGx5KSB1c2VmdWwgbWVzc2FnZXMgcHJpbnRlZCBhbmQgZWNobyBjYW5jZWxsZWQKKyBhdWRpbyB3aWxsIGJlIHNhdmVkIHRvIGFlY19kaWFnbm9zdGljLnN3IC4KKyBJZiBldmVuIHRoYXQgb3V0cHV0IGlzIGJhZCAoYWxtb3N0IG5vIGNhbmNlbGxhdGlvbikgdGhlbiB0aGVyZSBpcyAgcHJvYmFibHkKKyBwcm9ibGVtIHdpdGggdGhlIHBsYXliYWNrIG9yIHJlY29yZGluZyBwcm9jZXNzLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTZWN0aW9uCitKaXR0ZXIgQnVmZmVyCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGVyZSBhcmUgdHdvIGppdHRlciBidWZmZXJzLgorIEJvdGggY2FuIGJlIGVuYWJsZWQgYnkgaW5jbHVkaW5nOgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBMeVgtQ29kZQorI2luY2x1ZGUgPHNwZWV4L3NwZWV4X2ppdHRlci5jPgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdWJzZWN0aW9uCitHZW5lcmljIEppdHRlciBCdWZmZXIKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3Vic2VjdGlvbgorU3BlZXggSml0dGVyIEJ1ZmZlcgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTZWN0aW9uCitSZXNhbXBsZXIKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0FzIG9mIHZlcnNpb24gMS4yYmV0YTIsIFNwZWV4IGluY2x1ZGVzIGEgcmVzYW1wbGluZyBtb2R1bGVzLgorIFRvIG1ha2UgdXNlIG9mIHRoZSByZXNhbXBsZXIsIGl0IGlzIG5lY2Vzc2FyeSB0byBpbmNsdWRlIGl0cyBoZWFkZXIgZmlsZToKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKKyNpbmNsdWRlIDxzcGVleC9zcGVleF9yZXNhbXBsZXIuaD4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0ZvciBlYWNoIHN0cmVhbSB0aGF0IGlzIHRvIGJlIHJlc2FtcGxlZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIHJlc2FtcGxlcgorIHN0YXRlIHdpdGg6CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCitTcGVleFJlc2FtcGxlclN0YXRlICpyZXNhbXBsZXI7CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEx5WC1Db2RlCityZXNhbXBsZXIgPSBzcGVleF9yZXNhbXBsZXJfaW5pdChuYl9jaGFubmVscywgaW5wdXRfcmF0ZSwgb3V0cHV0X3JhdGUsIHF1YWxpdHkpOworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAord2hlcmUgbmJfY2hhbm5lbHMgaXMgdGhlIG51bWJlciBvZiBjaGFubmVscyB0aGF0IHdpbGwgYmUgdXNlZCAoZWl0aGVyIGludGVybGVhdmUKK2Qgb3Igbm9uLWludGVybGVhdmVkKSwgaW5wdXRfcmF0ZSBpcyB0aGUgc2FtcGxpbmcgcmF0ZSBvZiB0aGUgaW5wdXQgc3RyZWFtLAorIG91dHB1dF9yYXRlIGlzIHRoZSBzYW1wbGluZyByYXRlIG9mIHRoZSBvdXRwdXQgc3RyZWFtIGFuZCBxdWFsaXR5IGlzIHRoZQorIHJlcXVlc3RlZCBxdWFsaXR5IHNldHRpbmcgKDAgdG8gMTApLgorIFRoZSBxdWFsaXR5IHBhcmFtZXRlciBpcyB1c2VmdWwgZm9yIGNvbnRyb2xsaW5nIHRoZSBxdWFsaXR5L2NvbXBsZXhpdHkvbGF0ZW5jeQorIHRyYWRlb2ZmLgorIFVzaW5nIGEgaGlnaGVyIHF1YWxpdHkgc2V0dGluZyBtZWFucyBsZXNzIG5vaXNlL2FsaWFzaW5nLCBhIGhpZ2hlciBjb21wbGV4aXR5CisgYW5kIGEgaGlnaGVyIGxhdGVuY3kuCisgVXN1YWxseSwgYSBxdWFsaXR5IG9mIDMgaXMgYWNjZXB0YWJsZSBmb3IgbW9zdCBkZXNrdG9wIHVzZXMgYW5kIHF1YWxpdHkKKyAxMCBpcyBtb3N0bHkgcmVjb21tZW5kZWQgZm9yIHBybyBhdWRpbyB3b3JrLgorIFF1YWxpdHkgMCB1c3VhbGx5IGhhcyBhIGRlY2VudCBzb3VuZCAoY2VydGFpbmx5IGJldHRlciB0aGFuIHVzaW5nIGxpbmVhcgorIGludGVycG9sYXRpb24gcmVzYW1wbGluZyksIGJ1dCBhcnRpZmFjdHMgbWF5IGJlIGhlYXJkLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTZWN0aW9uCitDb2RlYyBPcHRpb25zIChzcGVleF8qX2N0bCkKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGxhYmVse3N1YjpDb2RlYy1PcHRpb25zfQorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBRdW90ZQorXGFsaWduIGNlbnRlcgorCitcZW1waCBvbgorRW50aXRpZXMgc2hvdWxkIG5vdCBiZSBtdWx0aXBsaWVkIGJleW9uZCBuZWNlc3NpdHkgLS0gV2lsbGlhbSBvZiBPY2toYW0uCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFF1b3RlCitcYWxpZ24gY2VudGVyCisKK1xlbXBoIG9uCitKdXN0IGJlY2F1c2UgdGhlcmUncyBhbiBvcHRpb24gZG9lc24ndCBtZWFuIHlvdSBoYXZlIHRvIHVzZSBpdCAtLSBtZS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoZSBTcGVleCBlbmNvZGVyIGFuZCBkZWNvZGVyIHN1cHBvcnQgbWFueSBvcHRpb25zIGFuZCByZXF1ZXN0cyB0aGF0IGNhbgorIGJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlIAorXGVtcGggb24KK3NwZWV4X2VuY29kZXJfY3RsCitcZW1waCBkZWZhdWx0CisgYW5kIAorXGVtcGggb24KK3NwZWV4X2RlY29kZXJfY3RsCitcZW1waCBkZWZhdWx0CisgZnVuY3Rpb25zLgorIERlc3BpdGUgdGhhdCwgdGhlIGRlZmF1bHRzIGFyZSBnb29kIGZvciBtYW55IGFwcGxpY2F0aW9ucyBhbmQgCitcc2VyaWVzIGJvbGQKK29wdGlvbmFsIHNldHRpbmdzIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBvbmUgdW5kZXJzdGFuZHMgdGhlbSBhbmQga25vd3MKKyB0aGF0IHRoZXkgYXJlIG5lZWRlZAorXHNlcmllcyBkZWZhdWx0CisuCisgQSBjb21tb24gZXJyb3IgaXMgdG8gYXR0ZW1wdCB0byBzZXQgbWFueSB1bm5lY2Vzc2FyeSBzZXR0aW5ncy4KKyBUaGVzZSBmdW5jdGlvbnMgYXJlIHNpbWlsYXIgdG8gdGhlIAorXGVtcGggb24KK2lvY3RsCitcZW1waCBkZWZhdWx0Cisgc3lzdGVtIGNhbGwgYW5kIHRoZWlyIHByb3RvdHlwZXMgYXJlOgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBMeVgtQ29kZQordm9pZCBzcGVleF9lbmNvZGVyX2N0bCh2b2lkICplbmNvZGVyLCBpbnQgcmVxdWVzdCwgdm9pZCAqcHRyKTsKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgTHlYLUNvZGUKK3ZvaWQgc3BlZXhfZGVjb2Rlcl9jdGwodm9pZCAqZW5jb2RlciwgaW50IHJlcXVlc3QsIHZvaWQgKnB0cik7CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGUgZGlmZmVyZW50IHZhbHVlcyBvZiByZXF1ZXN0IGFsbG93ZWQgYXJlIChub3RlIHRoYXQgc29tZSBvbmx5IGFwcGx5IHRvCisgdGhlIGVuY29kZXIgb3IgdGhlIGRlY29kZXIpOgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorU1BFRVhfU0VUX0VOSCoqIFNldCBwZXJjZXB0dWFsIGVuaGFuY2VyCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtwZXJjZXB0dWFsIGVuaGFuY2VtZW50fQorCitcZW5kX2luc2V0CisKKyB0byBvbiAoMSkgb3Igb2ZmICgwKSAoaW50ZWdlcikKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX0dFVF9FTkgqKiBHZXQgcGVyY2VwdHVhbCBlbmhhbmNlciBzdGF0dXMgKGludGVnZXIpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9HRVRfRlJBTUVfU0laRSBHZXQgdGhlIGZyYW1lIHNpemUgdXNlZCBmb3IgdGhlIGN1cnJlbnQgbW9kZSAoaW50ZWdlcikKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX1NFVF9RVUFMSVRZKiBTZXQgdGhlIGVuY29kZXIgc3BlZWNoIHF1YWxpdHkgKGludGVnZXIgMCB0byAxMCkKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX0dFVF9RVUFMSVRZKiBHZXQgdGhlIGN1cnJlbnQgZW5jb2RlciBzcGVlY2ggcXVhbGl0eSAoaW50ZWdlciAwIHRvCisgMTApCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9TRVRfTU9ERSoKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRcZGFnZ2VyJAorXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX0dFVF9NT0RFKgorXGJlZ2luX2luc2V0IEZvcm11bGEgJFxkYWdnZXIkCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorU1BFRVhfU0VUX0xPV19NT0RFKgorXGJlZ2luX2luc2V0IEZvcm11bGEgJFxkYWdnZXIkCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorU1BFRVhfR0VUX0xPV19NT0RFKgorXGJlZ2luX2luc2V0IEZvcm11bGEgJFxkYWdnZXIkCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorU1BFRVhfU0VUX0hJR0hfTU9ERSoKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRcZGFnZ2VyJAorXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX0dFVF9ISUdIX01PREUqCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkXGRhZ2dlciQKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9TRVRfVkJSKiBTZXQgdmFyaWFibGUgYml0LXJhdGUgKFZCUikgdG8gb24gKDEpIG9yIG9mZiAoMCkgKGludGVnZXIpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9HRVRfVkJSKiBHZXQgdmFyaWFibGUgYml0LXJhdGUKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e3ZhcmlhYmxlIGJpdC1yYXRlfQorCitcZW5kX2luc2V0CisKKyAoVkJSKSBzdGF0dXMgKGludGVnZXIpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9TRVRfVkJSX1FVQUxJVFkqIFNldCB0aGUgZW5jb2RlciBWQlIgc3BlZWNoIHF1YWxpdHkgKGZsb2F0IDAgdG8gMTApCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9HRVRfVkJSX1FVQUxJVFkqIEdldCB0aGUgY3VycmVudCBlbmNvZGVyIFZCUiBzcGVlY2ggcXVhbGl0eSAoZmxvYXQKKyAwIHRvIDEwKQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorU1BFRVhfU0VUX0NPTVBMRVhJVFkqIFNldCB0aGUgQ1BVIHJlc291cmNlcyBhbGxvd2VkIGZvciB0aGUgZW5jb2RlciAoaW50ZWdlcgorIDEgdG8gMTApCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9HRVRfQ09NUExFWElUWSogR2V0IHRoZSBDUFUgcmVzb3VyY2VzIGFsbG93ZWQgZm9yIHRoZSBlbmNvZGVyIChpbnRlZ2VyCisgMSB0byAxMCkKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX1NFVF9CSVRSQVRFKiBTZXQgdGhlIGJpdC1yYXRlIHRvIHVzZSB0byB0aGUgY2xvc2VzdCB2YWx1ZSBub3QgZXhjZWVkaW5nCisgdGhlIHBhcmFtZXRlciAoaW50ZWdlciBpbiBicHMpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9HRVRfQklUUkFURSBHZXQgdGhlIGN1cnJlbnQgYml0LXJhdGUgaW4gdXNlIChpbnRlZ2VyIGluIGJwcykKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX1NFVF9TQU1QTElOR19SQVRFIFNldCByZWFsIHNhbXBsaW5nIHJhdGUgKGludGVnZXIgaW4gSHopCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9HRVRfU0FNUExJTkdfUkFURSBHZXQgcmVhbCBzYW1wbGluZyByYXRlIChpbnRlZ2VyIGluIEh6KQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorU1BFRVhfUkVTRVRfU1RBVEUgUmVzZXQgdGhlIGVuY29kZXIvZGVjb2RlciBzdGF0ZSB0byBpdHMgb3JpZ2luYWwgc3RhdGUKKyAoemVyb3MgYWxsIG1lbW9yaWVzKQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorU1BFRVhfU0VUX1ZBRCogU2V0IHZvaWNlIGFjdGl2aXR5IGRldGVjdGlvbgorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7dm9pY2UgYWN0aXZpdHkgZGV0ZWN0aW9ufQorCitcZW5kX2luc2V0CisKKyAoVkFEKSB0byBvbiAoMSkgb3Igb2ZmICgwKSAoaW50ZWdlcikKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX0dFVF9WQUQqIEdldCB2b2ljZSBhY3Rpdml0eSBkZXRlY3Rpb24gKFZBRCkgc3RhdHVzIChpbnRlZ2VyKQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorU1BFRVhfU0VUX0RUWCogU2V0IGRpc2NvbnRpbnVvdXMgdHJhbnNtaXNzaW9uCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtkaXNjb250aW51b3VzIHRyYW5zbWlzc2lvbn0KKworXGVuZF9pbnNldAorCisgKERUWCkgdG8gb24gKDEpIG9yIG9mZiAoMCkgKGludGVnZXIpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9HRVRfRFRYKiBHZXQgZGlzY29udGludW91cyB0cmFuc21pc3Npb24gKERUWCkgc3RhdHVzIChpbnRlZ2VyKQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorU1BFRVhfU0VUX0FCUiogU2V0IGF2ZXJhZ2UgYml0LXJhdGUKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e2F2ZXJhZ2UgYml0LXJhdGV9CisKK1xlbmRfaW5zZXQKKworIChBQlIpIHRvIGEgdmFsdWUgbiBpbiBiaXRzIHBlciBzZWNvbmQgKGludGVnZXIgaW4gYnBzKQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorU1BFRVhfR0VUX0FCUiogR2V0IGF2ZXJhZ2UgYml0LXJhdGUgKEFCUikgc2V0dGluZyAoaW50ZWdlciBpbiBicHMpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9TRVRfUExDX1RVTklORyogVGVsbCB0aGUgZW5jb2RlciB0byBvcHRpbWl6ZSBlbmNvZGluZyBmb3IgYSBjZXJ0YWluCisgcGVyY2VudGFnZSBvZiBwYWNrZXQgbG9zcyAoaW50ZWdlciBpbiBwZXJjZW50KQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorU1BFRVhfR0VUX1BMQ19UVU5JTkcqIEdldCB0aGUgY3VycmVudCB0dW5pbmcgb2YgdGhlIGVuY29kZXIgZm9yIFBMQyAoaW50ZWdlcgorIGluIHBlcmNlbnQpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCisqIGFwcGxpZXMgb25seSB0byB0aGUgZW5jb2RlcgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorKiogYXBwbGllcyBvbmx5IHRvIHRoZSBkZWNvZGVyCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkXGRhZ2dlciQKK1xlbmRfaW5zZXQKKworIG5vcm1hbGx5IG9ubHkgdXNlZCBpbnRlcm5hbGx5CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24KK01vZGUgcXVlcmllcworXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcbGFiZWx7c3ViOk1vZGUtcXVlcmllc30KKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1NwZWV4IG1vZGVzIGhhdmUgYSBxdWVyeSBzeXN0ZW0gc2ltaWxhciB0byB0aGUgc3BlZXhfZW5jb2Rlcl9jdGwgYW5kIHNwZWV4X2RlY29kCitlcl9jdGwgY2FsbHMuCisgU2luY2UgbW9kZXMgYXJlIHJlYWQtb25seSwgaXQgaXMgb25seSBwb3NzaWJsZSB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQKKyBhIHBhcnRpY3VsYXIgbW9kZS4KKyBUaGUgZnVuY3Rpb24gdXNlZCB0byBkbyB0aGF0IGlzOgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBMeVgtQ29kZQordm9pZCBzcGVleF9tb2RlX3F1ZXJ5KFNwZWV4TW9kZSAqbW9kZSwgaW50IHJlcXVlc3QsIHZvaWQgKnB0cik7CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGUgYWRtaXNzaWJsZSB2YWx1ZXMgZm9yIHJlcXVlc3QgYXJlICh1bmxlc3Mgb3RoZXJ3aXNlIG5vdGUsIHRoZSB2YWx1ZXMKKyBhcmUgcmV0dXJuZWQgdGhyb3VnaCAKK1xlbXBoIG9uCitwdHIKK1xlbXBoIGRlZmF1bHQKKyk6CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9NT0RFX0ZSQU1FX1NJWkUgR2V0IHRoZSBmcmFtZSBzaXplIChpbiBzYW1wbGVzKSBmb3IgdGhlIG1vZGUKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX1NVQk1PREVfQklUUkFURSBHZXQgdGhlIGJpdC1yYXRlIGZvciBhIHN1Ym1vZGUgbnVtYmVyIHNwZWNpZmllZCB0aHJvdWdoCisgCitcZW1waCBvbgorcHRyCitcZW1waCBkZWZhdWx0CisgKGludGVnZXIgaW4gYnBzKS4KKyAKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU2VjdGlvbgorUHJlcHJvY2Vzc29yIG9wdGlvbnMKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGxhYmVse3N1YjpQcmVwcm9jZXNzb3Itb3B0aW9uc30KKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX1BSRVBST0NFU1NfU0VUX0RFTk9JU0UgVHVybnMgZGVub2lzaW5nIG9uKDEpIG9yIG9mZigyKSAoaW50ZWdlcikKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX1BSRVBST0NFU1NfR0VUX0RFTk9JU0UgR2V0IGRlbm9pc2luZyBzdGF0dXMgKGludGVnZXIpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9QUkVQUk9DRVNTX1NFVF9BR0MgVHVybnMgYXV0b21hdGljIGdhaW4gY29udHJvbCAoQUdDKSBvbigxKSBvciBvZmYoMikKKyAoaW50ZWdlcikKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX1BSRVBST0NFU1NfR0VUX0FHQyBHZXQgQUdDIHN0YXR1cyAoaW50ZWdlcikKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX1BSRVBST0NFU1NfU0VUX1ZBRCBUdXJucyB2b2ljZSBhY3Rpdml0eSBkZXRlY3RvciAoVkFEKSBvbigxKSBvciBvZmYoMikKKyAoaW50ZWdlcikKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX1BSRVBST0NFU1NfR0VUX1ZBRCBHZXQgVkFEIHN0YXR1cyAoaW50ZWdlcikKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX1BSRVBST0NFU1NfU0VUX0FHQ19MRVZFTAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorU1BFRVhfUFJFUFJPQ0VTU19HRVRfQUdDX0xFVkVMCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9QUkVQUk9DRVNTX1NFVF9ERVJFVkVSQiBUdXJucyByZXZlcmJlcmF0aW9uIHJlbW92YWwgb24oMSkgb3Igb2ZmKDIpCisgKGludGVnZXIpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9QUkVQUk9DRVNTX0dFVF9ERVJFVkVSQiBHZXQgcmV2ZXJiZXJhdGlvbiByZW1vdmFsIHN0YXR1cyAoaW50ZWdlcikKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX1BSRVBST0NFU1NfU0VUX0RFUkVWRVJCX0xFVkVMCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9QUkVQUk9DRVNTX0dFVF9ERVJFVkVSQl9MRVZFTAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorU1BFRVhfUFJFUFJPQ0VTU19TRVRfREVSRVZFUkJfREVDQVkKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX1BSRVBST0NFU1NfR0VUX0RFUkVWRVJCX0RFQ0FZCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9QUkVQUk9DRVNTX1NFVF9QUk9CX1NUQVJUCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9QUkVQUk9DRVNTX0dFVF9QUk9CX1NUQVJUCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9QUkVQUk9DRVNTX1NFVF9QUk9CX0NPTlRJTlVFCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9QUkVQUk9DRVNTX0dFVF9QUk9CX0NPTlRJTlVFCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9QUkVQUk9DRVNTX1NFVF9OT0lTRV9TVVBQUkVTUyBTZXQgbWF4aW11bSBhdHRlbnVhdGlvbiBvZiB0aGUgbm9pc2UKKyBpbiBkQiAobmVnYXRpdmUgbnVtYmVyKQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorU1BFRVhfUFJFUFJPQ0VTU19HRVRfTk9JU0VfU1VQUFJFU1MgR2V0IG1heGltdW0gYXR0ZW51YXRpb24gb2YgdGhlIG5vaXNlCisgaW4gZEIgKG5lZ2F0aXZlIG51bWJlcikKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgRGVzY3JpcHRpb24KK1NQRUVYX1BSRVBST0NFU1NfU0VUX0VDSE9fU1VQUFJFU1MgU2V0IG1heGltdW0gYXR0ZW51YXRpb24gb2YgdGhlIHJlc2lkdWFsCisgZWNobyBpbiBkQiAobmVnYXRpdmUgbnVtYmVyKQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorU1BFRVhfUFJFUFJPQ0VTU19HRVRfRUNIT19TVVBQUkVTUyBTZXQgbWF4aW11bSBhdHRlbnVhdGlvbiBvZiB0aGUgcmVzaWR1YWwKKyBlY2hvIGluIGRCIChuZWdhdGl2ZSBudW1iZXIpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9QUkVQUk9DRVNTX1NFVF9FQ0hPX1NVUFBSRVNTX0FDVElWRSBTZXQgbWF4aW11bSBhdHRlbnVhdGlvbiBvZiB0aGUKKyBlY2hvIGluIGRCIHdoZW4gbmVhciBlbmQgaXMgYWN0aXZlIChuZWdhdGl2ZSBudW1iZXIpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9QUkVQUk9DRVNTX0dFVF9FQ0hPX1NVUFBSRVNTX0FDVElWRSBTZXQgbWF4aW11bSBhdHRlbnVhdGlvbiBvZiB0aGUKKyBlY2hvIGluIGRCIHdoZW4gbmVhciBlbmQgaXMgYWN0aXZlIChuZWdhdGl2ZSBudW1iZXIpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IERlc2NyaXB0aW9uCitTUEVFWF9QUkVQUk9DRVNTX1NFVF9FQ0hPX1NUQVRFIFNldCB0aGUgYXNzb2NpYXRlZCBlY2hvIGNhbmNlbGxlciBmb3IgcmVzaWR1YWwKKyBlY2hvIHN1cHByZXNzaW9uIChOVUxMIGZvciBubyByZXNpZHVhbCBlY2hvIHN1cHByZXNzaW9uKQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBEZXNjcmlwdGlvbgorU1BFRVhfUFJFUFJPQ0VTU19HRVRfRUNIT19TVEFURSBHZXQgdGhlIGFzc29jaWF0ZWQgZWNobyBjYW5jZWxsZXIKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU2VjdGlvbgorUGFja2luZyBhbmQgaW4tYmFuZCBzaWduYWxsaW5nCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtpbi1iYW5kIHNpZ25hbGxpbmd9CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitTb21ldGltZXMgaXQgaXMgZGVzaXJhYmxlIHRvIHBhY2sgbW9yZSB0aGFuIG9uZSBmcmFtZSBwZXIgcGFja2V0IChvciBvdGhlcgorIGJhc2ljIHVuaXQgb2Ygc3RvcmFnZSkuCisgVGhlIHByb3BlciB3YXkgdG8gZG8gaXQgaXMgdG8gY2FsbCBzcGVleF9lbmNvZGUgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkTiQKK1xlbmRfaW5zZXQKKworIHRpbWVzIGJlZm9yZSB3cml0aW5nIHRoZSBzdHJlYW0gd2l0aCBzcGVleF9iaXRzX3dyaXRlLgorIEluIGNhc2VzIHdoZXJlIHRoZSBudW1iZXIgb2YgZnJhbWVzIGlzIG5vdCBkZXRlcm1pbmVkIGJ5IGFuIG91dC1vZi1iYW5kCisgbWVjaGFuaXNtLCBpdCBpcyBwb3NzaWJsZSB0byBpbmNsdWRlIGEgdGVybWluYXRvciBjb2RlLgorIFRoYXQgdGVybWluYXRvciBjb25zaXN0cyBvZiB0aGUgY29kZSAxNSAoZGVjaW1hbCkgZW5jb2RlZCB3aXRoIDUgYml0cywKKyBhcyBzaG93biBpbiBUYWJsZSAKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXHJlZntjYXA6cXVhbGl0eV92c19icHN9CisKK1xlbmRfaW5zZXQKKworLgorIE5vdGUgdGhhdCBhcyBvZiB2ZXJzaW9uIDEuMC4yLCBjYWxsaW5nIHNwZWV4X2JpdHNfd3JpdGUgYXV0b21hdGljYWxseSBpbnNlcnRzCisgdGhlIHRlcm1pbmF0b3Igc28gYXMgdG8gZmlsbCB0aGUgbGFzdCBieXRlLgorIFRoaXMgZG9lc24ndCBpbnZvbHZlcyBhbnkgb3ZlcmhlYWQgYW5kIG1ha2VzIHN1cmUgU3BlZXggY2FuIGFsd2F5cyBkZXRlY3QKKyB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgZnJhbWUgaW4gYSBwYWNrZXQuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNlbmQgaW4tYmFuZCAKK1xiZWdpbl9pbnNldCBRdW90ZXMgZWxkCitcZW5kX2luc2V0CisKK21lc3NhZ2VzCitcYmVnaW5faW5zZXQgUXVvdGVzIGVyZAorXGVuZF9pbnNldAorCisgdG8gdGhlIG90aGVyIHNpZGUuCisgQWxsIHRoZXNlIG1lc3NhZ2VzIGFyZSBlbmNvZGVkIGFzIAorXGJlZ2luX2luc2V0IFF1b3RlcyBlbGQKK1xlbmRfaW5zZXQKKworcHNldWRvLWZyYW1lcworXGJlZ2luX2luc2V0IFF1b3RlcyBlcmQKK1xlbmRfaW5zZXQKKworIG9mIG1vZGUgMTQgd2hpY2ggY29udGFpbiBhIDQtYml0IG1lc3NhZ2UgdHlwZSBjb2RlLCBmb2xsb3dlZCBieSB0aGUgbWVzc2FnZS4KKyBUYWJsZSAKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXHJlZntjYXA6SW4tYmFuZC1zaWduYWxsaW5nLWNvZGVzfQorCitcZW5kX2luc2V0CisKKyBsaXN0cyB0aGUgYXZhaWxhYmxlIGNvZGVzLCB0aGVpciBtZWFuaW5nIGFuZCB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZSB0aGF0CisgZm9sbG93cy4KKyBNb3N0IG9mIHRoZXNlIG1lc3NhZ2VzIGFyZSByZXF1ZXN0cyB0aGF0IGFyZSBzZW50IHRvIHRoZSBlbmNvZGVyIG9yIGRlY29kZXIKKyBvbiB0aGUgb3RoZXIgZW5kLCB3aGljaCBpcyBmcmVlIHRvIGNvbXBseSBvciBpZ25vcmUgdGhlbS4KKyBCeSBkZWZhdWx0LCBhbGwgaW4tYmFuZCBtZXNzYWdlcyBhcmUgaWdub3JlZC4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1xiZWdpbl9pbnNldCBGbG9hdCB0YWJsZQorcGxhY2VtZW50IGh0YnAKK3dpZGUgZmFsc2UKK3NpZGV3YXlzIGZhbHNlCitzdGF0dXMgb3BlbgorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitcYmVnaW5faW5zZXQgVGFidWxhcgorPGx5eHRhYnVsYXIgdmVyc2lvbj0iMyIgcm93cz0iMTciIGNvbHVtbnM9IjMiPgorPGZlYXR1cmVzPgorPGNvbHVtbiBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiBsZWZ0bGluZT0idHJ1ZSIgd2lkdGg9IjBwdCI+Cis8Y29sdW1uIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIGxlZnRsaW5lPSJ0cnVlIiB3aWR0aD0iMHB0Ij4KKzxjb2x1bW4gYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgd2lkdGg9IjBwdCI+Cis8cm93IHRvcGxpbmU9InRydWUiIGJvdHRvbWxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitDb2RlCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1NpemUgKGJpdHMpCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorQ29udGVudAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiswCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzEKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitBc2tzIGRlY29kZXIgdG8gc2V0IHBlcmNlcHR1YWwgZW5oYW5jZW1lbnQgb2ZmICgwKSBvciBvbigxKQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzEKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitBc2tzIChpZiAxKSB0aGUgZW5jb2RlciB0byBiZSBsZXNzIAorXGJlZ2luX2luc2V0IFF1b3RlcyBlbGQKK1xlbmRfaW5zZXQKKworYWdyZXNzaXZlCitcYmVnaW5faW5zZXQgUXVvdGVzIGVyZAorXGVuZF9pbnNldAorCisgZHVlIHRvIGhpZ2ggcGFja2V0IGxvc3MKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorQXNrcyBlbmNvZGVyIHRvIHN3aXRjaCB0byBtb2RlIE4KK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMworXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorQXNrcyBlbmNvZGVyIHRvIHN3aXRjaCB0byBtb2RlIE4gZm9yIGxvdy1iYW5kCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8L3Jvdz4KKzxyb3cgdG9wbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0Fza3MgZW5jb2RlciB0byBzd2l0Y2ggdG8gbW9kZSBOIGZvciBoaWdoLWJhbmQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorQXNrcyBlbmNvZGVyIHRvIHN3aXRjaCB0byBxdWFsaXR5IE4gZm9yIFZCUgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis2CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitSZXF1ZXN0IGFja25vd2xvZWRnZSAoMD1ubywgMT1hbGwsIDI9b25seSBmb3IgaW4tYmFuZCBkYXRhKQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis3CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitBc2tzIGVuY29kZXIgdG8gc2V0IENCUiAoMCksIFZBRCgxKSwgRFRYKDMpLCBWQlIoNSksIFZCUitEVFgoNykKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorOAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis4CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVHJhbnNtaXQgKDgtYml0KSBjaGFyYWN0ZXIgdG8gdGhlIG90aGVyIGVuZAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis5CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzgKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitJbnRlbnNpdHkgc3RlcmVvIGluZm9ybWF0aW9uCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8L3Jvdz4KKzxyb3cgdG9wbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzEwCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzE2CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorQW5ub3VuY2UgbWF4aW11bSBiaXQtcmF0ZSBhY2NlcHRhYmxlIChOIGluIGJ5dGVzL3NlY29uZCkKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMTEKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMTYKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCityZXNlcnZlZAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxMgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiszMgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0Fja25vd2xlZGdlIHJlY2VpdmluZyBwYWNrZXQgTgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxMworXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiszMgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK3Jlc2VydmVkCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8L3Jvdz4KKzxyb3cgdG9wbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzE0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzY0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorcmVzZXJ2ZWQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIiBib3R0b21saW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMTUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNjQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCityZXNlcnZlZAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8L2x5eHRhYnVsYXI+CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IENhcHRpb24KK0luLWJhbmQgc2lnbmFsbGluZyBjb2RlcworXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcbGFiZWx7Y2FwOkluLWJhbmQtc2lnbmFsbGluZy1jb2Rlc30KKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitGaW5hbGx5LCBhcHBsaWNhdGlvbnMgbWF5IGRlZmluZSBjdXN0b20gaW4tYmFuZCBtZXNzYWdlcyB1c2luZyBtb2RlIDEzLgorIFRoZSBzaXplIG9mIHRoZSBtZXNzYWdlIGluIGJ5dGVzIGlzIGVuY29kZWQgd2l0aCA1IGJpdHMsIHNvIHRoYXQgdGhlIGRlY29kZXIKKyBjYW4gc2tpcCBpdCBpZiBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGludGVycHJldCBpdC4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKworXG5ld3BhZ2UKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBDaGFwdGVyCitGb3JtYXRzIGFuZCBzdGFuZGFyZHMKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e3N0YW5kYXJkc30KKworXGVuZF9pbnNldAorCisKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGxhYmVse3NlYzpGb3JtYXRzLWFuZC1zdGFuZGFyZHN9CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitTcGVleCBjYW4gZW5jb2RlIHNwZWVjaCBpbiBib3RoIG5hcnJvd2JhbmQgYW5kIHdpZGViYW5kIGFuZCBwcm92aWRlcyBkaWZmZXJlbnQKKyBiaXQtcmF0ZXMuCisgSG93ZXZlciwgbm90IGFsbCBmZWF0dXJlcyBuZWVkIHRvIGJlIHN1cHBvcnRlZCBieSBhIGNlcnRhaW4gaW1wbGVtZW50YXRpb24KKyBvciBkZXZpY2UuCisgSW4gb3JkZXIgdG8gYmUgY2FsbGVkIAorXGJlZ2luX2luc2V0IFF1b3RlcyBlbGQKK1xlbmRfaW5zZXQKKworU3BlZXggY29tcGF0aWJsZQorXGJlZ2luX2luc2V0IFF1b3RlcyBlcmQKK1xlbmRfaW5zZXQKKworICh3aGF0ZXZlciB0aGF0IG1lYW5zKSwgYW4gaW1wbGVtZW50YXRpb24gbXVzdCBpbXBsZW1lbnQgYXQgbGVhc3QgYSBiYXNpYworIHNldCBvZiBmZWF0dXJlcy4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0F0IHRoZSBtaW5pbXVtLCBhbGwgbmFycm93YmFuZCBtb2RlcyBvZiBvcGVyYXRpb24gTVVTVCBiZSBzdXBwb3J0ZWQgYXQgdGhlCisgZGVjb2Rlci4KKyBUaGlzIGluY2x1ZGVzIHRoZSBkZWNvZGluZyBvZiBhIHdpZGViYW5kIGJpdC1zdHJlYW0gYnkgdGhlIG5hcnJvd2JhbmQgZGVjb2RlcgorXGJlZ2luX2luc2V0IEZvb3QKK3N0YXR1cyBjb2xsYXBzZWQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlIHdpZGViYW5kIGJpdC1zdHJlYW0gY29udGFpbnMgYW4gZW1iZWRkZWQgbmFycm93YmFuZCBiaXQtc3RyZWFtIHdoaWNoCisgY2FuIGJlIGRlY29kZWQgYWxvbmUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKworLgorIElmIHByZXNlbnQsIGEgd2lkZWJhbmQgZGVjb2RlciBNVVNUIGJlIGFibGUgdG8gZGVjb2RlIGEgbmFycm93YmFuZCBzdHJlYW0sCisgYW5kIE1BWSBlaXRoZXIgYmUgYWJsZSB0byBkZWNvZGUgYWxsIHdpZGViYW5kIG1vZGVzIG9yIGJlIGFibGUgdG8gZGVjb2RlCisgdGhlIGVtYmVkZGVkIG5hcnJvd2JhbmQgcGFydCBvZiBhbGwgbW9kZXMgKHdoaWNoIGluY2x1ZGVzIGlnbm9yaW5nIHRoZQorIGhpZ2gtYmFuZCBiaXRzKS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0ZvciBlbmNvZGVycywgYXQgbGVhc3Qgb25lIG5hcnJvd2JhbmQgb3Igd2lkZWJhbmQgbW9kZSBNVVNUIGJlIHN1cHBvcnRlZC4KKyBUaGUgbWFpbiByZWFzb24gd2h5IGFsbCBlbmNvZGluZyBtb2RlcyBkbyBub3QgaGF2ZSB0byBiZSBzdXBwb3J0ZWQgaXMgdGhhdAorIHNvbWUgcGxhdGZvcm1zIG1heSBub3QgYmUgYWJsZSB0byBoYW5kbGUgdGhlIGNvbXBsZXhpdHkgb2YgZW5jb2RpbmcgaW4KKyBzb21lIG1vZGVzLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTZWN0aW9uCitSVFAKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e1JUUH0KKworXGVuZF9pbnNldAorCisgUGF5bG9hZCBGb3JtYXQgCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGUgUlRQIHBheWxvYWQgZHJhZnQgaXMgaW5jbHVkZWQgaW4gYXBwZW5kaXggCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxyZWZ7c2VjOklFVEYtZHJhZnR9CisKK1xlbmRfaW5zZXQKKworIGFuZCB0aGUgbGF0ZXN0IHZlcnNpb24gaXMgYXZhaWxhYmxlIGF0IAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcdXJse2h0dHA6Ly93d3cuc3BlZXgub3JnL2RyYWZ0cy9sYXRlc3R9CisKK1xlbmRfaW5zZXQKKworLgorIFRoaXMgZHJhZnQgaGFzIGJlZW4gc2VudCAoMjAwMy8wMi8yNikgdG8gdGhlIEludGVybmV0IEVuZ2luZWVyaW5nIFRhc2sKKyBGb3JjZSAoSUVURikgYW5kIHdpbGwgYmUgZGlzY3Vzc2VkIGF0IHRoZSBNYXJjaCAxOHRoIG1lZXRpbmcgaW4gU2FuIEZyYW5jaXNjby4KKyAKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU2VjdGlvbgorTUlNRSBUeXBlCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitGb3Igbm93LCB5b3Ugc2hvdWxkIHVzZSB0aGUgTUlNRSB0eXBlIGF1ZGlvL3gtc3BlZXggZm9yIFNwZWV4LWluLU9nZy4KKyBXZSB3aWxsIGFwcGx5IGZvciB0eXBlIAorXGZhbWlseSB0eXBld3JpdGVyCithdWRpby9zcGVleAorXGZhbWlseSBkZWZhdWx0CisgaW4gdGhlIG5lYXIgZnV0dXJlLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTZWN0aW9uCitPZ2cKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e09nZ30KKworXGVuZF9pbnNldAorCisgZmlsZSBmb3JtYXQKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1NwZWV4IGJpdC1zdHJlYW1zIGNhbiBiZSBzdG9yZWQgaW4gT2dnIGZpbGVzLgorIEluIHRoaXMgY2FzZSwgdGhlIGZpcnN0IHBhY2tldCBvZiB0aGUgT2dnIGZpbGUgY29udGFpbnMgdGhlIFNwZWV4IGhlYWRlcgorIGRlc2NyaWJlZCBpbiB0YWJsZSAKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXHJlZntjYXA6b2dnX3NwZWV4X2hlYWRlcn0KKworXGVuZF9pbnNldAorCisuCisgQWxsIGludGVnZXIgZmllbGRzIGluIHRoZSBoZWFkZXJzIGFyZSBzdG9yZWQgYXMgbGl0dGxlLWVuZGlhbi4KKyBUaGUgCitcZmFtaWx5IHR5cGV3cml0ZXIKK3NwZWV4X3N0cmluZworXGZhbWlseSBkZWZhdWx0CisgZmllbGQgbXVzdCBjb250YWluIHRoZSAKK1xiZWdpbl9pbnNldCBRdW90ZXMgZWxkCitcZW5kX2luc2V0CisKKworXGZhbWlseSB0eXBld3JpdGVyCitTcGVleAorXGZhbWlseSBkZWZhdWx0CitcSW5zZXRTcGFjZSB+CitcSW5zZXRTcGFjZSB+CitcSW5zZXRTcGFjZSB+CisKK1xiZWdpbl9pbnNldCBRdW90ZXMgZXJkCitcZW5kX2luc2V0CisKKyAod2l0aCAzIHRyYWlsaW5nIHNwYWNlcyksIHdoaWNoIGlkZW50aWZpZXMgdGhlIGJpdC1zdHJlYW0uCisgVGhlIG5leHQgZmllbGQsIAorXGZhbWlseSB0eXBld3JpdGVyCitzcGVleF92ZXJzaW9uCitcZmFtaWx5IGRlZmF1bHQKKyBjb250YWlucyB0aGUgdmVyc2lvbiBvZiBTcGVleCB0aGF0IGVuY29kZWQgdGhlIGZpbGUuCisgRm9yIG5vdywgcmVmZXIgdG8gc3BlZXhfaGVhZGVyLltjaF0gZm9yIG1vcmUgaW5mby4KKyBUaGUgCitcZW1waCBvbgorYmVnaW5uaW5nIG9mIHN0cmVhbQorXGVtcGggZGVmYXVsdAorICgKK1xmYW1pbHkgdHlwZXdyaXRlcgorYl9vX3MKK1xmYW1pbHkgZGVmYXVsdAorKSBmbGFnIGlzIHNldCB0byAxIGZvciB0aGUgaGVhZGVyLgorIFRoZSBoZWFkZXIgcGFja2V0IGhhcyAKK1xmYW1pbHkgdHlwZXdyaXRlcgorcGFja2V0bm89MAorXGZhbWlseSBkZWZhdWx0CisgYW5kIAorXGZhbWlseSB0eXBld3JpdGVyCitncmFudWxlcG9zPTAKK1xmYW1pbHkgZGVmYXVsdAorLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlIHNlY29uZCBwYWNrZXQgY29udGFpbnMgdGhlIFNwZWV4IGNvbW1lbnQgaGVhZGVyLgorIFRoZSBmb3JtYXQgdXNlZCBpcyB0aGUgVm9yYmlzIGNvbW1lbnQgZm9ybWF0IGRlc2NyaWJlZCBoZXJlOiBodHRwOi8vd3d3LnhpcGgub3JnLworb2dnL3ZvcmJpcy9kb2Mvdi1jb21tZW50Lmh0bWwgLgorIFRoaXMgcGFja2V0IGhhcyAKK1xmYW1pbHkgdHlwZXdyaXRlcgorcGFja2V0bm89MQorXGZhbWlseSBkZWZhdWx0CisgYW5kIAorXGZhbWlseSB0eXBld3JpdGVyCitncmFudWxlcG9zPTAKK1xmYW1pbHkgZGVmYXVsdAorLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlIHRoaXJkIGFuZCBzdWJzZXF1ZW50IHBhY2tldHMgZWFjaCBjb250YWluIG9uZSBvciBtb3JlIChudW1iZXIgZm91bmQKKyBpbiBoZWFkZXIpIFNwZWV4IGZyYW1lcy4KKyBUaGVzZSBhcmUgaWRlbnRpZmllZCB3aXRoIAorXGZhbWlseSB0eXBld3JpdGVyCitwYWNrZXRubworXGZhbWlseSBkZWZhdWx0Cisgc3RhcnRpbmcgZnJvbSAyIGFuZCB0aGUgCitcZmFtaWx5IHR5cGV3cml0ZXIKK2dyYW51bGVwb3MKK1xmYW1pbHkgZGVmYXVsdAorIGlzIHRoZSBudW1iZXIgb2YgdGhlIGxhc3Qgc2FtcGxlIGVuY29kZWQgaW4gdGhhdCBwYWNrZXQuCisgVGhlIGxhc3Qgb2YgdGhlc2UgcGFja2V0cyBoYXMgdGhlIAorXGVtcGggb24KK2VuZCBvZiBzdHJlYW0KK1xlbXBoIGRlZmF1bHQKKyAoCitcZmFtaWx5IHR5cGV3cml0ZXIKK2Vfb19zCitcZmFtaWx5IGRlZmF1bHQKKykgZmxhZyBpcyBzZXQgdG8gMS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1xiZWdpbl9pbnNldCBGbG9hdCB0YWJsZQorcGxhY2VtZW50IGh0YnAKK3dpZGUgdHJ1ZQorc2lkZXdheXMgZmFsc2UKK3N0YXR1cyBvcGVuCisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1xiZWdpbl9pbnNldCBFUlQKK3N0YXR1cyBjb2xsYXBzZWQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorCisKK1xiYWNrc2xhc2gKK2JlZ2lue2NlbnRlcn0KK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKworCitcYmVnaW5faW5zZXQgVGFidWxhcgorPGx5eHRhYnVsYXIgdmVyc2lvbj0iMyIgcm93cz0iMTYiIGNvbHVtbnM9IjMiPgorPGZlYXR1cmVzPgorPGNvbHVtbiBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiBsZWZ0bGluZT0idHJ1ZSIgd2lkdGg9IjBwdCI+Cis8Y29sdW1uIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIGxlZnRsaW5lPSJ0cnVlIiB3aWR0aD0iMHB0Ij4KKzxjb2x1bW4gYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgd2lkdGg9IjBwdCI+Cis8cm93IHRvcGxpbmU9InRydWUiIGJvdHRvbWxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitGaWVsZAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUeXBlCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorU2l6ZQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitzcGVleF9zdHJpbmcKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorY2hhcltdCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorOAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitzcGVleF92ZXJzaW9uCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK2NoYXJbXQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzIwCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8L3Jvdz4KKzxyb3cgdG9wbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK3NwZWV4X3ZlcnNpb25faWQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAoraW50CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitoZWFkZXJfc2l6ZQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitpbnQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8L3Jvdz4KKzxyb3cgdG9wbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK3JhdGUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAoraW50CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCittb2RlCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK2ludAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorbW9kZV9iaXRzdHJlYW1fdmVyc2lvbgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitpbnQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8L3Jvdz4KKzxyb3cgdG9wbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK25iX2NoYW5uZWxzCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK2ludAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorYml0cmF0ZQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitpbnQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8L3Jvdz4KKzxyb3cgdG9wbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK2ZyYW1lX3NpemUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAoraW50CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCit2YnIKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAoraW50CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitmcmFtZXNfcGVyX3BhY2tldAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitpbnQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8L3Jvdz4KKzxyb3cgdG9wbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK2V4dHJhX2hlYWRlcnMKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAoraW50CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCityZXNlcnZlZDEKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAoraW50CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiIGJvdHRvbWxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCityZXNlcnZlZDIKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAoraW50CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8L2x5eHRhYnVsYXI+CisKK1xlbmRfaW5zZXQKKworCitcYmVnaW5faW5zZXQgRVJUCitzdGF0dXMgY29sbGFwc2VkCisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKworCitcYmFja3NsYXNoCitlbmR7Y2VudGVyfQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgQ2FwdGlvbgorT2dnL1NwZWV4IGhlYWRlciBwYWNrZXQKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGxhYmVse2NhcDpvZ2dfc3BlZXhfaGVhZGVyfQorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1xiZWdpbl9pbnNldCBFUlQKK3N0YXR1cyBjb2xsYXBzZWQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorCisKK1xiYWNrc2xhc2gKK2NsZWFycGFnZQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgQ2hhcHRlcgorSW50cm9kdWN0aW9uIHRvIENFTFAgQ29kaW5nCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtDRUxQfQorCitcZW5kX2luc2V0CisKKworXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcbGFiZWx7c2VjOkludHJvZHVjdGlvbi10by1DRUxQfQorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBRdW90ZQorXGFsaWduIGNlbnRlcgorCitcZW1waCBvbgorRG8gbm90IG1lZGRsZSBpbiB0aGUgYWZmYWlycyBvZiBwb2xlcywgZm9yIHRoZXkgYXJlIHN1YnRsZSBhbmQgcXVpY2sgdG8KKyBsZWF2ZSB0aGUgdW5pdCBjaXJjbGUuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitTcGVleCBpcyBiYXNlZCBvbiBDRUxQLCB3aGljaCBzdGFuZHMgZm9yIENvZGUgRXhjaXRlZCBMaW5lYXIgUHJlZGljdGlvbi4KKyBUaGlzIHNlY3Rpb24gYXR0ZW1wdHMgdG8gaW50cm9kdWNlIHRoZSBwcmluY2lwbGVzIGJlaGluZCBDRUxQLCBzbyBpZiB5b3UKKyBhcmUgYWxyZWFkeSBmYW1pbGlhciB3aXRoIENFTFAsIHlvdSBjYW4gc2FmZWx5IHNraXAgdG8gc2VjdGlvbiAKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXHJlZntzZWM6U3BlZXgtbmFycm93YmFuZC1tb2RlfQorCitcZW5kX2luc2V0CisKKy4KKyBUaGUgQ0VMUCB0ZWNobmlxdWUgaXMgYmFzZWQgb24gdGhyZWUgaWRlYXM6CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEVudW1lcmF0ZQorVGhlIHVzZSBvZiBhIGxpbmVhciBwcmVkaWN0aW9uIChMUCkgbW9kZWwgdG8gbW9kZWwgdGhlIHZvY2FsIHRyYWN0CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEVudW1lcmF0ZQorVGhlIHVzZSBvZiAoYWRhcHRpdmUgYW5kIGZpeGVkKSBjb2RlYm9vayBlbnRyaWVzIGFzIGlucHV0IChleGNpdGF0aW9uKSBvZgorIHRoZSBMUCBtb2RlbAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBFbnVtZXJhdGUKK1RoZSBzZWFyY2ggcGVyZm9ybWVkIGluIGNsb3NlZC1sb29wIGluIGEgCitcYmVnaW5faW5zZXQgUXVvdGVzIGVsZAorXGVuZF9pbnNldAorCitwZXJjZXB0dWFsbHkgd2VpZ2h0ZWQgZG9tYWluCitcYmVnaW5faW5zZXQgUXVvdGVzIGVyZAorXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIGJhc2ljIGlkZWFzIGJlaGluZCBDRUxQLgorIFRoaXMgaXMgc3RpbGwgYSB3b3JrIGluIHByb2dyZXNzLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTZWN0aW9uCitTb3VyY2UtRmlsdGVyIE1vZGVsIG9mIFNwZWVjaCBQcmVkaWN0aW9uCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGUgc291cmNlLWZpbHRlciBtb2RlbCBvZiBzcGVlY2ggcHJvZHVjdGlvbiBhc3N1bWVzIHRoYXQgdGhlIHZvY2FsIGNvcmRzCisgYXJlIHRoZSBzb3VyY2Ugb2Ygc3BlY3RyYWxseSBmbGF0IHNvdW5kICh0aGUgZXhjaXRhdGlvbiBzaWduYWwpLCBhbmQgdGhhdAorIHRoZSB2b2NhbCB0cmFjdCBhY3RzIGFzIGEgZmlsdGVyIHRvIHNwZWN0cmFsbHkgc2hhcGUgdGhlIHZhcmlvdXMgc291bmRzCisgb2Ygc3BlZWNoLgorIFdoaWxlIHN0aWxsIGFuIGFwcHJveGltYXRpb24sIHRoZSBtb2RlbCBpcyB3aWRlbHkgdXNlZCBpbiBzcGVlY2ggY29kaW5nCisgYmVjYXVzZSBvZiBpdHMgc2ltcGxpY2l0eS5JdHMgdXNlIGlzIGFsc28gdGhlIHJlYXNvbiB3aHkgbW9zdCBzcGVlY2ggY29kZWNzCisgKFNwZWV4IGluY2x1ZGVkKSBwZXJmb3JtIGJhZGx5IG9uIG11c2ljIHNpZ25hbHMuCisgVGhlIGRpZmZlcmVudCBwaG9uZW1lcyBjYW4gYmUgZGlzdGluZ3Vpc2hlZCBieSB0aGVpciBleGNpdGF0aW9uIChzb3VyY2UpCisgYW5kIHNwZWN0cmFsIHNoYXBlIChmaWx0ZXIpLgorIFZvaWNlZCBzb3VuZHMgKGUuZy4KKyB2b3dlbHMpIGhhdmUgYW4gZXhjaXRhdGlvbiBzaWduYWwgdGhhdCBpcyBwZXJpb2RpYyBhbmQgdGhhdCBjYW4gYmUgYXBwcm94aW1hdGVkCisgYnkgYW4gaW1wdWxzZSB0cmFpbiBpbiB0aGUgdGltZSBkb21haW4gb3IgYnkgcmVndWxhcmx5LXNwYWNlZCBoYXJtb25pY3MKKyBpbiB0aGUgZnJlcXVlbmN5IGRvbWFpbi4KKyBPbiB0aGUgb3RoZXIgaGFuZCwgZnJpY2F0aXZlcyAoc3VjaCBhcyB0aGUgInMiLCAic2giIGFuZCAiZiIgc291bmRzKSBoYXZlCisgYW4gZXhjaXRhdGlvbiBzaWduYWwgdGhhdCBpcyBzaW1pbGFyIHRvIHdoaXRlIEdhdXNzaWFuIG5vaXNlLgorIFNvIGNhbGxlZCB2b2ljZSBmcmljYXRpdmVzIChzdWNoIGFzICJ6IiBhbmQgInYiKSBoYXZlIGV4Y2l0YXRpb24gc2lnbmFsCisgY29tcG9zZWQgb2YgYW4gaGFybW9uaWMgcGFydCBhbmQgYSBub2lzeSBwYXJ0LgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlIHNvdXJjZS1maWx0ZXIgbW9kZWwgaXMgdXN1YWxseSB0aWVkIHdpdGggdGhlIHVzZSBvZiBMaW5lYXIgcHJlZGljdGlvbi4KKyBUaGUgQ0VMUCBtb2RlbCBpcyBiYXNlZCBvbiBzb3VyY2UtZmlsdGVyIG1vZGVsLCBhcyBjYW4gYmUgc2VlbiBmcm9tIHRoZQorIENFTFAgZGVjb2RlciBpbGx1c3RyYXRlZCBpbiBGaWd1cmUgCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxyZWZ7ZmlnOlRoZS1DRUxQLW1vZGVsfQorCitcZW5kX2luc2V0CisKKy4KKyAKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1xiZWdpbl9pbnNldCBGbG9hdCBmaWd1cmUKK3dpZGUgZmFsc2UKK3NpZGV3YXlzIGZhbHNlCitzdGF0dXMgb3BlbgorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitcYmVnaW5faW5zZXQgRVJUCitzdGF0dXMgY29sbGFwc2VkCisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKworCitcYmFja3NsYXNoCitiZWdpbntjZW50ZXJ9CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0CisKKworXGJlZ2luX2luc2V0IEdyYXBoaWNzCisJZmlsZW5hbWUgY2VscF9kZWNvZGVyLmVwcworCXdpZHRoIDQ1cGFnZSUKKwlrZWVwQXNwZWN0UmF0aW8KKworXGVuZF9pbnNldAorCisKK1xiZWdpbl9pbnNldCBFUlQKK3N0YXR1cyBjb2xsYXBzZWQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorCisKK1xiYWNrc2xhc2gKK2VuZHtjZW50ZXJ9CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBDYXB0aW9uCitUaGUgQ0VMUCBtb2RlbCBvZiBzcGVlY2ggc3ludGhlc2lzIChkZWNvZGVyKQorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcbGFiZWx7ZmlnOlRoZS1DRUxQLW1vZGVsfQorCitcZW5kX2luc2V0CisKKyAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24KK0xpbmVhciBQcmVkaWN0aW9uIChMUEMpCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtsaW5lYXIgcHJlZGljdGlvbn0KKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0xpbmVhciBwcmVkaWN0aW9uIGlzIGF0IHRoZSBiYXNlIG9mIG1hbnkgc3BlZWNoIGNvZGluZyB0ZWNobmlxdWVzLCBpbmNsdWRpbmcKKyBDRUxQLgorIFRoZSBpZGVhIGJlaGluZCBpdCBpcyB0byBwcmVkaWN0IHRoZSBzaWduYWwgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkeFtuXSQKK1xlbmRfaW5zZXQKKworIHVzaW5nIGEgbGluZWFyIGNvbWJpbmF0aW9uIG9mIGl0cyBwYXN0IHNhbXBsZXM6CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitcYmVnaW5faW5zZXQgRm9ybXVsYSBcWworeVtuXT1cc3VtX3tpPTF9XntOfWFfe2l9eFtuLWldXF0KKworXGVuZF9pbnNldAorCit3aGVyZSAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICR5W25dJAorXGVuZF9pbnNldAorCisgaXMgdGhlIGxpbmVhciBwcmVkaWN0aW9uIG9mIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJHhbbl0kCitcZW5kX2luc2V0CisKKy4KKyBUaGUgcHJlZGljdGlvbiBlcnJvciBpcyB0aHVzIGdpdmVuIGJ5OgorXGJlZ2luX2luc2V0IEZvcm11bGEgXFsKK2Vbbl09eFtuXS15W25dPXhbbl0tXHN1bV97aT0xfV57Tn1hX3tpfXhbbi1pXVxdCisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGUgZ29hbCBvZiB0aGUgTFBDIGFuYWx5c2lzIGlzIHRvIGZpbmQgdGhlIGJlc3QgcHJlZGljdGlvbiBjb2VmZmljaWVudHMKKyAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRhX3tpfSQKK1xlbmRfaW5zZXQKKworIHdoaWNoIG1pbmltaXplIHRoZSBxdWFkcmF0aWMgZXJyb3IgZnVuY3Rpb246CitcYmVnaW5faW5zZXQgRm9ybXVsYSBcWworRT1cc3VtX3tuPTB9XntMLTF9XGxlZnRbZVtuXVxyaWdodF1eezJ9PVxzdW1fe249MH1ee0wtMX1cbGVmdFt4W25dLVxzdW1fe2k9MX1ee059YV97aX14W24taV1ccmlnaHRdXnsyfVxdCisKK1xlbmRfaW5zZXQKKworVGhhdCBjYW4gYmUgZG9uZSBieSBtYWtpbmcgYWxsIGRlcml2YXRpdmVzIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJFxmcmFje1xwYXJ0aWFsIEV9e1xwYXJ0aWFsIGFfe2l9fSQKK1xlbmRfaW5zZXQKKworIGVxdWFsIHRvIHplcm86CitcYmVnaW5faW5zZXQgRm9ybXVsYSBcWworXGZyYWN7XHBhcnRpYWwgRX17XHBhcnRpYWwgYV97aX19PVxmcmFje1xwYXJ0aWFsfXtccGFydGlhbCBhX3tpfX1cc3VtX3tuPTB9XntMLTF9XGxlZnRbeFtuXS1cc3VtX3tpPTF9XntOfWFfe2l9eFtuLWldXHJpZ2h0XV57Mn09MFxdCisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitGb3IgYW4gb3JkZXIgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkTiQKK1xlbmRfaW5zZXQKKworIGZpbHRlciwgdGhlIGZpbHRlciBjb2VmZmljaWVudHMgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkYV97aX0kCitcZW5kX2luc2V0CisKKyBhcmUgZm91bmQgYnkgc29sdmluZyB0aGUgc3lzdGVtIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJE5cdGltZXMgTiQKK1xlbmRfaW5zZXQKKworIGxpbmVhciBzeXN0ZW0gCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkXG1hdGhiZntSYX09XG1hdGhiZntyfSQKK1xlbmRfaW5zZXQKKworLCB3aGVyZQorXGJlZ2luX2luc2V0IEZvcm11bGEgXFsKK1xtYXRoYmZ7Un09XGxlZnRbXGJlZ2lue2FycmF5fXtjY2NjfQorUigwKSAmIFIoMSkgJiBcY2RvdHMgJiBSKE4tMSlcXAorUigxKSAmIFIoMCkgJiBcY2RvdHMgJiBSKE4tMilcXAorXHZkb3RzICYgXHZkb3RzICYgXGRkb3RzICYgXHZkb3RzXFwKK1IoTi0xKSAmIFIoTi0yKSAmIFxjZG90cyAmIFIoMClcZW5ke2FycmF5fVxyaWdodF1cXQorCitcZW5kX2luc2V0CisKKworXGJlZ2luX2luc2V0IEZvcm11bGEgXFsKK1xtYXRoYmZ7cn09XGxlZnRbXGJlZ2lue2FycmF5fXtjfQorUigxKVxcCitSKDIpXFwKK1x2ZG90c1xcCitSKE4pXGVuZHthcnJheX1ccmlnaHRdXF0KKworXGVuZF9pbnNldAorCit3aXRoIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJFIobSkkCitcZW5kX2luc2V0CisKKywgdGhlIGF1dG8tY29ycmVsYXRpb24KK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e2F1dG8tY29ycmVsYXRpb259CisKK1xlbmRfaW5zZXQKKworIG9mIHRoZSBzaWduYWwgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkeFtuXSQKK1xlbmRfaW5zZXQKKworLCBjb21wdXRlZCBhczoKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1xiZWdpbl9pbnNldCBGb3JtdWxhIFxbCitSKG0pPVxzdW1fe2k9MH1ee04tMX14W2ldeFtpLW1dXF0KKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0JlY2F1c2UgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkXG1hdGhiZntSfSQKK1xlbmRfaW5zZXQKKworIGlzIHRvZXBsaXR6IGhlcm1pdGlhbiwgdGhlIExldmluc29uLUR1cmJpbgorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7TGV2aW5zb24tRHVyYmlufQorCitcZW5kX2luc2V0CisKKyBhbGdvcml0aG0gY2FuIGJlIHVzZWQsIG1ha2luZyB0aGUgc29sdXRpb24gdG8gdGhlIHByb2JsZW0gCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkXG1hdGhjYWx7T31cbGVmdChOXnsyfVxyaWdodCkkCitcZW5kX2luc2V0CisKKyBpbnN0ZWFkIG9mIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJFxtYXRoY2Fse099XGxlZnQoTl57M31ccmlnaHQpJAorXGVuZF9pbnNldAorCisuCisgQWxzbywgaXQgY2FuIGJlIHByb3ZlbiB0aGF0IGFsbCB0aGUgcm9vdHMgb2YgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkQSh6KSQKK1xlbmRfaW5zZXQKKworIGFyZSB3aXRoaW4gdGhlIHVuaXQgY2lyY2xlLCB3aGljaCBtZWFucyB0aGF0IAorXGJlZ2luX2luc2V0IEZvcm11bGEgJDEvQSh6KSQKK1xlbmRfaW5zZXQKKworIGlzIGFsd2F5cyBzdGFibGUuCisgVGhpcyBpcyBpbiB0aGVvcnk7IGluIHByYWN0aWNlIGJlY2F1c2Ugb2YgZmluaXRlIHByZWNpc2lvbiwgdGhlcmUgYXJlIHR3bworIGNvbW1vbmx5IHVzZWQgdGVjaG5pcXVlcyB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhIHN0YWJsZSBmaWx0ZXIuCisgRmlyc3QsIHdlIG11bHRpcGx5IAorXGJlZ2luX2luc2V0IEZvcm11bGEgJFIoMCkkCitcZW5kX2luc2V0CisKKyBieSBhIG51bWJlciBzbGlnaHRseSBhYm92ZSBvbmUgKHN1Y2ggYXMgMS4wMDAxKSwgd2hpY2ggaXMgZXF1aXZhbGVudCB0bworIGFkZGluZyBub2lzZSB0byB0aGUgc2lnbmFsLgorIEFsc28sIHdlIGNhbiBhcHBseSBhIHdpbmRvdyB0byB0aGUgYXV0by1jb3JyZWxhdGlvbiwgd2hpY2ggaXMgZXF1aXZhbGVudAorIHRvIGZpbHRlcmluZyBpbiB0aGUgZnJlcXVlbmN5IGRvbWFpbiwgcmVkdWNpbmcgc2hhcnAgcmVzb25hbmNlcy4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU2VjdGlvbgorUGl0Y2ggUHJlZGljdGlvbgorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7cGl0Y2h9CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitEdXJpbmcgdm9pY2VkIHNlZ21lbnRzLCB0aGUgc3BlZWNoIHNpZ25hbCBpcyBwZXJpb2RpYywgc28gaXQgaXMgcG9zc2libGUKKyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGF0IHByb3BlcnR5IGJ5IGFwcHJveGltYXRpbmcgdGhlIGV4Y2l0YXRpb24gc2lnbmFsCisgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkZVtuXSQKK1xlbmRfaW5zZXQKKworIGJ5IGEgZ2FpbiB0aW1lcyB0aGUgcGFzdCBvZiB0aGUgZXhjaXRhdGlvbjoKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1xiZWdpbl9pbnNldCBGb3JtdWxhIFxbCitlW25dXHNpbWVxIHBbbl09XGJldGEgZVtuLVRdXF0KKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK3doZXJlIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJFQkCitcZW5kX2luc2V0CisKKyBpcyB0aGUgcGl0Y2ggcGVyaW9kLCAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRcYmV0YSQKK1xlbmRfaW5zZXQKKworIGlzIHRoZSBwaXRjaCBnYWluLgorIFdlIGNhbGwgdGhhdCBsb25nLXRlcm0gcHJlZGljdGlvbiBzaW5jZSB0aGUgZXhjaXRhdGlvbiBpcyBwcmVkaWN0ZWQgZnJvbQorIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJGVbbi1UXSQKK1xlbmRfaW5zZXQKKworIHdpdGggCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkVFxnZyBOJAorXGVuZF9pbnNldAorCisuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24KK0lubm92YXRpb24gQ29kZWJvb2sKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoZSBmaW5hbCBleGNpdGF0aW9uIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJGVbbl0kCitcZW5kX2luc2V0CisKKyB3aWxsIGJlIHRoZSBzdW0gb2YgdGhlIHBpdGNoIHByZWRpY3Rpb24gYW5kIGFuIAorXGVtcGggb24KK2lubm92YXRpb24KK1xlbXBoIGRlZmF1bHQKKyBzaWduYWwgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkY1tuXSQKK1xlbmRfaW5zZXQKKworIHRha2VuIGZyb20gYSBmaXhlZCBjb2RlYm9vaywgaGVuY2UgdGhlIG5hbWUgCitcZW1waCBvbgorQ29kZQorXGVtcGggZGVmYXVsdAorIEV4Y2l0ZWQgTGluZWFyIFByZWRpY3Rpb24uCisgVGhlIGZpbmFsIGV4Y2l0YXRpb24gaXMgZ2l2ZW4gYnk6CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitcYmVnaW5faW5zZXQgRm9ybXVsYSBcWworZVtuXT1wW25dK2Nbbl09XGJldGEgZVtuLVRdK2Nbbl1cXQorCitcZW5kX2luc2V0CisKK1RoZSBxdWFudGl6YXRpb24gb2YgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkY1tuXSQKK1xlbmRfaW5zZXQKKworIGlzIHdoZXJlIG1vc3Qgb2YgdGhlIGJpdHMgaW4gYSBDRUxQIGNvZGVjIGFyZSBhbGxvY2F0ZWQuCisgSXQgcmVwcmVzZW50cyB0aGUgaW5mb3JtYXRpb24gdGhhdCBjb3VsZG4ndCBiZSBvYnRhaW5lZCBlaXRoZXIgZnJvbSBsaW5lYXIKKyBwcmVkaWN0aW9uIG9yIHBpdGNoIHByZWRpY3Rpb24uCisgSW4gdGhlIAorXGVtcGggb24KK3oKK1xlbXBoIGRlZmF1bHQKKy1kb21haW4gd2UgY2FuIHJlcHJlc2VudCB0aGUgZmluYWwgc2lnbmFsIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJFgoeikkCitcZW5kX2luc2V0CisKKyBhcyAKK1xiZWdpbl9pbnNldCBGb3JtdWxhIFxbCitYKHopPVxmcmFje0Moeil9e0EoeilcbGVmdCgxLVxiZXRhIHpeey1UfVxyaWdodCl9XF0KKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU2VjdGlvbgorTm9pc2UgV2VpZ2h0aW5nCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtlcnJvciB3ZWlnaHRpbmd9CisKK1xlbmRfaW5zZXQKKworCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHthbmFseXNpcy1ieS1zeW50aGVzaXN9CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitNb3N0IChpZiBub3QgYWxsKSBtb2Rlcm4gYXVkaW8gY29kZWNzIGF0dGVtcHQgdG8gCitcYmVnaW5faW5zZXQgUXVvdGVzIGVsZAorXGVuZF9pbnNldAorCitzaGFwZQorXGJlZ2luX2luc2V0IFF1b3RlcyBlcmQKK1xlbmRfaW5zZXQKKworIHRoZSBub2lzZSBzbyB0aGF0IGl0IGFwcGVhcnMgbW9zdGx5IGluIHRoZSBmcmVxdWVuY3kgcmVnaW9ucyB3aGVyZSB0aGUKKyBlYXIgY2Fubm90IGRldGVjdCBpdC4KKyBGb3IgZXhhbXBsZSwgdGhlIGVhciBpcyBtb3JlIHRvbGVyYW50IHRvIG5vaXNlIGluIHBhcnRzIG9mIHRoZSBzcGVjdHJ1bQorIHRoYXQgYXJlIGxvdWRlciBhbmQgCitcZW1waCBvbgordmljZSB2ZXJzYQorXGVtcGggZGVmYXVsdAorLgorIEluIG9yZGVyIHRvIG1heGltaXplIHNwZWVjaCBxdWFsaXR5LCBDRUxQIGNvZGVjcyBtaW5pbWl6ZSB0aGUgbWVhbiBzcXVhcmUKKyBvZiB0aGUgZXJyb3IgKG5vaXNlKSBpbiB0aGUgcGVyY2VwdHVhbGx5IHdlaWdodGVkIGRvbWFpbi4KKyBUaGlzIG1lYW5zIHRoYXQgYSBwZXJjZXB0dWFsIG5vaXNlIHdlaWdodGluZyBmaWx0ZXIgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkVyh6KSQKK1xlbmRfaW5zZXQKKworIGlzIGFwcGxpZWQgdG8gdGhlIGVycm9yIHNpZ25hbCBpbiB0aGUgZW5jb2Rlci4KKyBJbiBtb3N0IENFTFAgY29kZWNzLCAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRXKHopJAorXGVuZF9pbnNldAorCisgaXMgYSBwb2xlLXplcm8gd2VpZ2h0aW5nIGZpbHRlciBkZXJpdmVkIGZyb20gdGhlIGxpbmVhciBwcmVkaWN0aW9uIGNvZWZmaWNpZW50cworIChMUEMpLCBnZW5lcmFsbHkgdXNpbmcgYmFuZHdpZHRoIGV4cGFuc2lvbi4KKyBMZXQgdGhlIHNwZWN0cmFsIGVudmVsb3BlIGJlIHJlcHJlc2VudGVkIGJ5IHRoZSBzeW50aGVzaXMgZmlsdGVyIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJDEvQSh6KSQKK1xlbmRfaW5zZXQKKworLCBDRUxQIGNvZGVjcyB0eXBpY2FsbHkgZGVyaXZlIHRoZSBub2lzZSB3ZWlnaHRpbmcgZmlsdGVyIGFzOiAKK1xiZWdpbl9pbnNldCBGb3JtdWxhIFxiZWdpbntlcXVhdGlvbn0KK1coeik9XGZyYWN7QSh6L1xnYW1tYV97MX0pfXtBKHovXGdhbW1hX3syfSl9XGxhYmVse2VxOmdhbW1hLXdlaWdodGluZ31cZW5ke2VxdWF0aW9ufQorCitcZW5kX2luc2V0CisKK3doZXJlIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJFxnYW1tYV97MX09MC45JAorXGVuZF9pbnNldAorCisgYW5kIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJFxnYW1tYV97Mn09MC42JAorXGVuZF9pbnNldAorCisgaW4gdGhlIFNwZWV4IHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4KKyBJZiBhIGZpbHRlciAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRBKHopJAorXGVuZF9pbnNldAorCisgaGFzIChjb21wbGV4KSBwb2xlcyBhdCAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRwX3tpfSQKK1xlbmRfaW5zZXQKKworIGluIHRoZSAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICR6JAorXGVuZF9pbnNldAorCistcGxhbmUsIHRoZSBmaWx0ZXIgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkQSh6L1xnYW1tYSkkCitcZW5kX2luc2V0CisKKyB3aWxsIGhhdmUgaXRzIHBvbGVzIGF0IAorXGJlZ2luX2luc2V0IEZvcm11bGEgJHAnX3tpfT1cZ2FtbWEgcF97aX0kCitcZW5kX2luc2V0CisKKywgbWFraW5nIGl0IGEgZmxhdHRlciB2ZXJzaW9uIG9mIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJEEoeikkCitcZW5kX2luc2V0CisKKy4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoZSB3ZWlnaHRpbmcgZmlsdGVyIGlzIGFwcGxpZWQgdG8gdGhlIGVycm9yIHNpZ25hbCB1c2VkIHRvIG9wdGltaXplIHRoZQorIGNvZGVib29rIHNlYXJjaCB0aHJvdWdoIGFuYWx5c2lzLWJ5LXN5bnRoZXNpcyAoQWJTKS4KKyBUaGlzIHJlc3VsdHMgaW4gYSBzcGVjdHJhbCBzaGFwZSBvZiB0aGUgbm9pc2UgdGhhdCB0ZW5kcyB0b3dhcmRzIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJDEvVyh6KSQKK1xlbmRfaW5zZXQKKworLgorIFdoaWxlIHRoZSBzaW1wbGljaXR5IG9mIHRoZSBtb2RlbCBoYXMgYmVlbiBhbiBpbXBvcnRhbnQgcmVhc29uIGZvciB0aGUKKyBzdWNjZXNzIG9mIENFTFAsIGl0IHJlbWFpbnMgdGhhdCAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRXKHopJAorXGVuZF9pbnNldAorCisgaXMgYSB2ZXJ5IHJvdWdoIGFwcHJveGltYXRpb24gZm9yIHRoZSBwZXJjZXB0dWFsbHkgb3B0aW1hbCBub2lzZSB3ZWlnaHRpbmcKKyBmdW5jdGlvbi4KKyBGaWcuCisgCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxyZWZ7Y2FwOlN0YW5kYXJkLW5vaXNlLXNoYXBpbmd9CisKK1xlbmRfaW5zZXQKKworIGlsbHVzdHJhdGVzIHRoZSBub2lzZSBzaGFwaW5nIHRoYXQgcmVzdWx0cyBmcm9tIEVxLgorIAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBccmVme2VxOmdhbW1hLXdlaWdodGluZ30KKworXGVuZF9pbnNldAorCisuCisgVGhyb3VnaG91dCB0aGlzIHBhcGVyLCB3ZSByZWZlciB0byAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRXKHopJAorXGVuZF9pbnNldAorCisgYXMgdGhlIG5vaXNlIHdlaWdodGluZyBmaWx0ZXIgYW5kIHRvIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJDEvVyh6KSQKK1xlbmRfaW5zZXQKKworIGFzIHRoZSBub2lzZSBzaGFwaW5nIGZpbHRlciAob3IgY3VydmUpLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorXGJlZ2luX2luc2V0IEZsb2F0IGZpZ3VyZQord2lkZSBmYWxzZQorc2lkZXdheXMgZmFsc2UKK3N0YXR1cyBvcGVuCisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1xiZWdpbl9pbnNldCBFUlQKK3N0YXR1cyBjb2xsYXBzZWQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorCisKK1xiYWNrc2xhc2gKK2JlZ2lue2NlbnRlcn0KK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKworCitcYmVnaW5faW5zZXQgR3JhcGhpY3MKKwlmaWxlbmFtZSByZWZfc2hhcGluZy5lcHMKKwl3aWR0aCA0NXBhZ2UlCisJa2VlcEFzcGVjdFJhdGlvCisKK1xlbmRfaW5zZXQKKworCitcYmVnaW5faW5zZXQgRVJUCitzdGF0dXMgY29sbGFwc2VkCisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKworCitcYmFja3NsYXNoCitlbmR7Y2VudGVyfQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgQ2FwdGlvbgorU3RhbmRhcmQgbm9pc2Ugc2hhcGluZyBpbiBDRUxQLgorIEFyYml0cmFyeSB5LWF4aXMgb2Zmc2V0LgorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcbGFiZWx7Y2FwOlN0YW5kYXJkLW5vaXNlLXNoYXBpbmd9CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTZWN0aW9uCitBbmFseXNpcy1ieS1TeW50aGVzaXMKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK09uZSBvZiB0aGUgbWFpbiBwcmluY2lwbGVzIGJlaGluZCBDRUxQIGlzIGNhbGxlZCBBbmFseXNpcy1ieS1TeW50aGVzaXMgKEFiUyksCisgbWVhbmluZyB0aGF0IHRoZSBlbmNvZGluZyAoYW5hbHlzaXMpIGlzIHBlcmZvcm1lZCBieSBwZXJjZXB0dWFsbHkgb3B0aW1pc2luZworIHRoZSBkZWNvZGVkIChzeW50aGVzaXMpIHNpZ25hbCBpbiBhIGNsb3NlZCBsb29wLgorIEluIHRoZW9yeSwgdGhlIGJlc3QgQ0VMUCBzdHJlYW0gd291bGQgYmUgcHJvZHVjZWQgYnkgdHJ5aW5nIGFsbCBwb3NzaWJsZQorIGJpdCBjb21iaW5hdGlvbnMgYW5kIHNlbGVjdGluZyB0aGUgb25lIHRoYXQgcHJvZHVjZXMgdGhlIGJlc3Qtc291bmRpbmcKKyBkZWNvZGVkIHNpZ25hbC4KKyBUaGlzIGlzIG9idmlvdXNseSBub3QgcG9zc2libGUgaW4gcHJhY3RpY2UgZm9yIHR3byByZWFzb25zOiB0aGUgcmVxdWlyZWQKKyBjb21wbGV4aXR5IGlzIGJleW9uZCBhbnkgY3VycmVudGx5IGF2YWlsYWJsZSBoYXJkd2FyZSBhbmQgdGhlIAorXGJlZ2luX2luc2V0IFF1b3RlcyBlbGQKK1xlbmRfaW5zZXQKKworYmVzdCBzb3VuZGluZworXGJlZ2luX2luc2V0IFF1b3RlcyBlcmQKK1xlbmRfaW5zZXQKKworIHNlbGVjdGlvbiBjcml0ZXJpb24gaW1wbGllcyBhIGh1bWFuIGxpc3RlbmVyLgorIAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorSW4gb3JkZXIgdG8gYWNoaWV2ZSByZWFsLXRpbWUgZW5jb2RpbmcgdXNpbmcgbGltaXRlZCBjb21wdXRpbmcgcmVzb3VyY2VzLAorIHRoZSBDRUxQIG9wdGltaXNhdGlvbiBpcyBicm9rZW4gZG93biBpbnRvIHNtYWxsZXIsIG1vcmUgbWFuYWdlYWJsZSwgc2VxdWVudGlhbAorIHNlYXJjaGVzIHVzaW5nIHRoZSBwZXJjZXB0dWFsIHdlaWdodGluZyBmdW5jdGlvbiBkZXNjcmliZWQgZWFybGllci4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKworXG5ld3BhZ2UKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBDaGFwdGVyCitTcGVleCBuYXJyb3diYW5kIG1vZGUKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGxhYmVse3NlYzpTcGVleC1uYXJyb3diYW5kLW1vZGV9CisKK1xlbmRfaW5zZXQKKworCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtuYXJyb3diYW5kfQorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhpcyBzZWN0aW9uIGxvb2tzIGF0IGhvdyBTcGVleCB3b3JrcyBmb3IgbmFycm93YmFuZCAoCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkOFw6XG1hdGhybXtrSHp9JAorXGVuZF9pbnNldAorCisgc2FtcGxpbmcgcmF0ZSkgb3BlcmF0aW9uLgorIFRoZSBmcmFtZSBzaXplIGZvciB0aGlzIG1vZGUgaXMgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkMjBcOlxtYXRocm17bXN9JAorXGVuZF9pbnNldAorCissIGNvcnJlc3BvbmRpbmcgdG8gMTYwIHNhbXBsZXMuCisgRWFjaCBmcmFtZSBpcyBhbHNvIHN1YmRpdmlkZWQgaW50byA0IHN1Yi1mcmFtZXMgb2YgNDAgc2FtcGxlcyBlYWNoLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorQWxzbyBtYW55IGRlc2lnbiBkZWNpc2lvbnMgd2VyZSBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgZ29hbHMgYW5kIGFzc3VtcHRpb25zOgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBJdGVtaXplCitNaW5pbWl6aW5nIHRoZSBhbW91bnQgb2YgaW5mb3JtYXRpb24gZXh0cmFjdGVkIGZyb20gcGFzdCBmcmFtZXMgKGZvciByb2J1c3RuZXNzCisgdG8gcGFja2V0IGxvc3MpCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEl0ZW1pemUKK0R5bmFtaWNhbGx5LXNlbGVjdGFibGUgY29kZWJvb2tzIChMU1AsIHBpdGNoIGFuZCBpbm5vdmF0aW9uKQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBJdGVtaXplCitzdWItdmVjdG9yIGZpeGVkIChpbm5vdmF0aW9uKSBjb2RlYm9va3MKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU2VjdGlvbgorV2hvbGUtRnJhbWUgQW5hbHlzaXMKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e2xpbmVhciBwcmVkaWN0aW9ufQorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorSW4gbmFycm93YmFuZCwgU3BlZXggZnJhbWVzIGFyZSAyMCBtcyBsb25nICgxNjAgc2FtcGxlcykgYW5kIGFyZSBzdWJkaXZpZGVkCisgaW4gNCBzdWItZnJhbWVzIG9mIDUgbXMgZWFjaCAoNDAgc2FtcGxlcykuCisgRm9yIG1vc3QgbmFycm93YmFuZCBiaXQtcmF0ZXMgKDgga2JwcyBhbmQgYWJvdmUpLCB0aGUgb25seSBwYXJhbWV0ZXJzIGVuY29kZWQKKyBhdCB0aGUgZnJhbWUgbGV2ZWwgYXJlIHRoZSBMaW5lIFNwZWN0cmFsIFBhaXJzIChMU1ApIGFuZCBhIGdsb2JhbCBleGNpdGF0aW9uCisgZ2FpbiAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRnX3tmcmFtZX0kCitcZW5kX2luc2V0CisKKywgYXMgc2hvd24gaW4gRmlnLgorIAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBccmVme2NhcDpGcmFtZS1vcGVuLWxvb3AtYW5hbHlzaXN9CisKK1xlbmRfaW5zZXQKKworLgorIEFsbCBvdGhlciBwYXJhbWV0ZXJzIGFyZSBlbmNvZGVkIGF0IHRoZSBzdWItZnJhbWUgbGV2ZWwuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitMaW5lYXIgcHJlZGljdGlvbiBhbmFseXNpcyBpcyBwZXJmb3JtZWQgb25jZSBwZXIgZnJhbWUgdXNpbmcgYW4gYXN5bW1ldHJpYworIEhhbW1pbmcgd2luZG93IGNlbnRlcmVkIG9uIHRoZSBmb3VydGggc3ViLWZyYW1lLgorIEJlY2F1c2UgbGluZWFyIHByZWRpY3Rpb24gY29lZmZpY2llbnRzIChMUEMpIGFyZSBub3Qgcm9idXN0IHRvIHF1YW50aXphdGlvbiwKKyB0aGV5IGFyZSBmaXJzdCBhcmUgY29udmVydGVkIHRvIGxpbmUgc3BlY3RyYWwgcGFpcnMgKExTUCkKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e2xpbmUgc3BlY3RyYWwgcGFpcn0KKworXGVuZF9pbnNldAorCisuCisgVGhlIExTUCdzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGFzc29jaWF0ZWQgdG8gdGhlIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJDRee3RofSQKK1xlbmRfaW5zZXQKKworIHN1Yi1mcmFtZXMgYW5kIHRoZSBMU1AncyBhc3NvY2lhdGVkIHRvIHRoZSBmaXJzdCAzIHN1Yi1mcmFtZXMgYXJlIGxpbmVhcmx5CisgaW50ZXJwb2xhdGVkIHVzaW5nIHRoZSBjdXJyZW50IGFuZCBwcmV2aW91cyBMU1AgY29lZmZpY2llbnRzLgorIFRoZSBMU1AgY29lZmZpY2llbnRzIGFuZCBjb252ZXJ0ZWQgYmFjayB0byB0aGUgTFBDIGZpbHRlciAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRcaGF0e0F9KHopJAorXGVuZF9pbnNldAorCisuCisgVGhlIG5vbi1xdWFudGl6ZWQgaW50ZXJwb2xhdGVkIGZpbHRlciBpcyBkZW5vdGVkIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJEEoeikkCitcZW5kX2luc2V0CisKKyBhbmQgY2FuIGJlIHVzZWQgZm9yIHRoZSB3ZWlnaHRpbmcgZmlsdGVyIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJFcoeikkCitcZW5kX2luc2V0CisKKyBiZWNhdXNlIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgYXZhaWxhYmxlIHRvIHRoZSBkZWNvZGVyLgorIAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVG8gbWFrZSBTcGVleCBtb3JlIHJvYnVzdCB0byBwYWNrZXQgbG9zcywgbm8gcHJlZGljdGlvbiBpcyBhcHBsaWVkIG9uIHRoZQorIExTUCBjb2VmZmljaWVudHMgcHJpb3IgdG8gcXVhbnRpemF0aW9uLgorIFRoZSBMU1BzIGFyZSBlbmNvZGVkIHVzaW5nIHZlY3RvciBxdWFudGl6YXRpbiAoVlEpIHdpdGggMzAgYml0cyBmb3IgaGlnaGVyCisgcXVhbGl0eSBtb2RlcyBhbmQgMTggYml0cyBmb3IgbG93ZXIgcXVhbGl0eS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1xiZWdpbl9pbnNldCBGbG9hdCBmaWd1cmUKK3dpZGUgZmFsc2UKK3NpZGV3YXlzIGZhbHNlCitzdGF0dXMgb3BlbgorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitcYmVnaW5faW5zZXQgRVJUCitzdGF0dXMgY29sbGFwc2VkCisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKworCitcYmFja3NsYXNoCitiZWdpbntjZW50ZXJ9CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0CisKKworXGJlZ2luX2luc2V0IEdyYXBoaWNzCisJZmlsZW5hbWUgc3BlZXhfYW5hbHlzaXMuZXBzCisJd2lkdGggMzVwYWdlJQorCitcZW5kX2luc2V0CisKKworXGJlZ2luX2luc2V0IEVSVAorc3RhdHVzIGNvbGxhcHNlZAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisKKworXGJhY2tzbGFzaAorZW5ke2NlbnRlcn0KK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IENhcHRpb24KK0ZyYW1lIG9wZW4tbG9vcCBhbmFseXNpcworXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcbGFiZWx7Y2FwOkZyYW1lLW9wZW4tbG9vcC1hbmFseXNpc30KKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24KK1N1Yi1GcmFtZSBBbmFseXNpcy1ieS1TeW50aGVzaXMKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1xiZWdpbl9pbnNldCBGbG9hdCBmaWd1cmUKK3dpZGUgZmFsc2UKK3NpZGV3YXlzIGZhbHNlCitzdGF0dXMgb3BlbgorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitcYmVnaW5faW5zZXQgRVJUCitzdGF0dXMgY29sbGFwc2VkCisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKworCitcYmFja3NsYXNoCitiZWdpbntjZW50ZXJ9CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0CisKKworXGJlZ2luX2luc2V0IEdyYXBoaWNzCisJZmlsZW5hbWUgc3BlZXhfYWJzLmVwcworCWx5eHNjYWxlIDc1CisJd2lkdGggNDBwYWdlJQorCitcZW5kX2luc2V0CisKKworXGJlZ2luX2luc2V0IEVSVAorc3RhdHVzIGNvbGxhcHNlZAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisKKworXGJhY2tzbGFzaAorZW5ke2NlbnRlcn0KK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IENhcHRpb24KK0FuYWx5c2lzLWJ5LXN5bnRoZXNpcyBjbG9zZWQtbG9vcCBvcHRpbWl6YXRpb24gb24gYSBzdWItZnJhbWUuCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxsYWJlbHtjYXA6U3ViLWZyYW1lLUFiU30KKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGUgYW5hbHlzaXMtYnktc3ludGhlc2lzIChBYlMpIGVuY29kZXIgbG9vcCBpcyBkZXNjcmliZWQgaW4gRmlnLgorIAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBccmVme2NhcDpTdWItZnJhbWUtQWJTfQorCitcZW5kX2luc2V0CisKKy4KKyBUaGVyZSBhcmUgdGhyZWUgbWFpbiBhc3BlY3RzIHdoZXJlIFNwZWV4IHNpZ25pZmljYW50bHkgZGlmZmVycyBmcm9tIG1vc3QKKyBvdGhlciBDRUxQIGNvZGVjcy4KKyBGaXJzdCwgd2hpbGUgbW9zdCByZWNlbnQgQ0VMUCBjb2RlY3MgbWFrZSB1c2Ugb2YgZnJhY3Rpb25hbCBwaXRjaCBlc3RpbWF0aW9uCisgd2l0aCBhIHNpbmdsZSBnYWluLCBTcGVleCB1c2VzIGFuIGludGVnZXIgdG8gZW5jb2RlIHRoZSBwaXRjaCBwZXJpb2QsIGJ1dAorIHVzZXMgYSAzLXRhcCBwcmVkaWN0b3IgKDMgZ2FpbnMpLgorIFRoZSBhZGFwdGl2ZSBjb2RlYm9vayBjb250cmlidXRpb24gCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkZV97YX1bbl0kCitcZW5kX2luc2V0CisKKyBjYW4gdGh1cyBiZSBleHByZXNzZWQgYXM6CitcYmVnaW5faW5zZXQgRm9ybXVsYSBcYmVnaW57ZXF1YXRpb259CitlX3thfVtuXT1nX3swfWVbbi1ULTFdK2dfezF9ZVtuLVRdK2dfezJ9ZVtuLVQrMV1cbGFiZWx7ZXE6YWRhcHRpdmUtM3RhcH1cZW5ke2VxdWF0aW9ufQorCitcZW5kX2luc2V0CisKK3doZXJlIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJGdfezB9JAorXGVuZF9pbnNldAorCissIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJGdfezF9JAorXGVuZF9pbnNldAorCisgYW5kIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJGdfezJ9JAorXGVuZF9pbnNldAorCisgYXJlIHRoZSBqb2ludGx5IHF1YW50aXplZCBwaXRjaCBnYWlucyBhbmQgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkZVtuXSQKK1xlbmRfaW5zZXQKKworIGlzIHRoZSBjb2RlYyBleGNpdGF0aW9uIG1lbW9yeS4KKyBJdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB3aGVuIHRoZSBwaXRjaCBpcyBzbWFsbGVyIHRoYW4gdGhlIHN1Yi1mcmFtZSBzaXplLAorIHdlIHJlcGVhdCB0aGUgZXhjaXRhdGlvbiBhdCBhIHBlcmlvZCAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRUJAorXGVuZF9pbnNldAorCisuCisgRm9yIGV4YW1wbGUsIHdoZW4gCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkbi1UKzFcZ2VxMCQKK1xlbmRfaW5zZXQKKworLCB3ZSB1c2UgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkbi0yVCsxJAorXGVuZF9pbnNldAorCisgaW5zdGVhZC4KKyBJbiBtb3N0IG1vZGVzLCB0aGUgcGl0Y2ggcGVyaW9kIGlzIGVuY29kZWQgd2l0aCA3IGJpdHMgaW4gdGhlIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJFxsZWZ0WzE3LDE0NFxyaWdodF0kCitcZW5kX2luc2V0CisKKyByYW5nZSBhbmQgdGhlIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJFxiZXRhX3tpfSQKK1xlbmRfaW5zZXQKKworIGNvZWZmaWNpZW50cyBhcmUgdmVjdG9yLXF1YW50aXplZCB1c2luZyA3IGJpdHMgYXQgaGlnaGVyIGJpdC1yYXRlcyAoMTUKKyBrYnBzIG5hcnJvd2JhbmQgYW5kIGFib3ZlKSBhbmQgNSBiaXRzIGF0IGxvd2VyIGJpdC1yYXRlcyAoMTEga2JwcyBuYXJyb3diYW5kCisgYW5kIGJlbG93KS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK01hbnkgY3VycmVudCBDRUxQIGNvZGVjcyB1c2UgbW92aW5nIGF2ZXJhZ2UgKE1BKSBwcmVkaWN0aW9uIHRvIGVuY29kZSB0aGUKKyBmaXhlZCBjb2RlYm9vayBnYWluLgorIFRoaXMgcHJvdmlkZXMgc2xpZ2h0bHkgYmV0dGVyIGNvZGluZyBhdCB0aGUgZXhwZW5zZSBvZiBpbnRyb2R1Y2luZyBhIGRlcGVuZGVuY3kKKyBvbiBwcmV2aW91c2x5IGVuY29kZWQgZnJhbWVzLgorIEEgc2Vjb25kIGRpZmZlcmVuY2UgaXMgdGhhdCBTcGVleCBlbmNvZGVzIHRoZSBmaXhlZCBjb2RlYm9vayBnYWluIGFzIHRoZQorIHByb2R1Y3Qgb2YgdGhlIGdsb2JhbCBleGNpdGF0aW9uIGdhaW4gCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkZ197ZnJhbWV9JAorXGVuZF9pbnNldAorCisgd2l0aCBhIHN1Yi1mcmFtZSBnYWluIGNvcnJlY3Rpb25zIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJGdfe3N1YmZ9JAorXGVuZF9pbnNldAorCisuCisgVGhpcyBpbmNyZWFzZXMgcm9idXN0bmVzcyB0byBwYWNrZXQgbG9zcyBieSBlbGltaW5hdGluZyB0aGUgaW50ZXItZnJhbWUKKyBkZXBlbmRlbmN5LgorIFRoZSBzdWItZnJhbWUgZ2FpbiBjb3JyZWN0aW9uIGlzIGVuY29kZWQgYmVmb3JlIHRoZSBmaXhlZCBjb2RlYm9vayBpcyBzZWFyY2hlZAorIChub3QgY2xvc2VkLWxvb3Agb3B0aW1pemVkKSBhbmQgdXNlcyBiZXR3ZWVuIDAgYW5kIDMgYml0cyBwZXIgc3ViLWZyYW1lLAorIGRlcGVuZGluZyBvbiB0aGUgYml0LXJhdGUuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGUgdGhpcmQgZGlmZmVyZW5jZSBpcyB0aGF0IFNwZWV4IHVzZXMgc3ViLXZlY3RvciBxdWFudGl6YXRpb24gb2YgdGhlIGlubm92YXRpbworbiAoZml4ZWQgY29kZWJvb2spIHNpZ25hbCBpbnN0ZWFkIG9mIGFuIGFsZ2VicmFpYyBjb2RlYm9vay4KKyBFYWNoIHN1Yi1mcmFtZSBpcyBkaXZpZGVkIGludG8gc3ViLXZlY3RvcnMgb2YgbGVuZ3RocyByYW5naW5nIGJldHdlZW4gNQorIGFuZCAyMCBzYW1wbGVzLgorIEVhY2ggc3ViLXZlY3RvciBpcyBjaG9zZW4gZnJvbSBhIGJpdHJhdGUtZGVwZW5kZW50IGNvZGVib29rIGFuZCBhbGwgc3ViLXZlY3RvcnMKKyBhcmUgY29uY2F0ZW5hdGVkIHRvIGZvcm0gYSBzdWItZnJhbWUuCisgQXMgYW4gZXhhbXBsZSwgdGhlIDMuOTUga2JwcyBtb2RlIHVzZXMgYSBzdWItdmVjdG9yIHNpemUgb2YgMjAgc2FtcGxlcyB3aXRoCisgMzIgZW50cmllcyBpbiB0aGUgY29kZWJvb2sgKDUgYml0cykuCisgVGhpcyBtZWFucyB0aGF0IHRoZSBpbm5vdmF0aW9uIGlzIGVuY29kZWQgd2l0aCAxMCBiaXRzIHBlciBzdWItZnJhbWUsIG9yCisgMjAwMCBicHMuCisgT24gdGhlIG90aGVyIGhhbmQsIHRoZSAxOC4yIGticHMgbW9kZSB1c2VzIGEgc3ViLXZlY3RvciBzaXplIG9mIDUgc2FtcGxlcworIHdpdGggMjU2IGVudHJpZXMgaW4gdGhlIGNvZGVib29rICg4IGJpdHMpLCBzbyB0aGUgaW5ub3ZhdGlvbiB1c2VzIDY0IGJpdHMKKyBwZXIgc3ViLWZyYW1lLCBvciAxMjgwMCBicHMuCisgCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24KK0JpdCBhbGxvY2F0aW9uCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGVyZSBhcmUgNyBkaWZmZXJlbnQgbmFycm93YmFuZCBiaXQtcmF0ZXMgZGVmaW5lZCBmb3IgU3BlZXgsIHJhbmdpbmcgZnJvbQorIDI1MCBicHMgdG8gMjQuNiBrYnBzLCBhbHRob3VnaCB0aGUgbW9kZXMgYmVsb3cgNS45IGticHMgc2hvdWxkIG5vdCBiZSB1c2VkCisgZm9yIHNwZWVjaC4KKyBUaGUgYml0LWFsbG9jYXRpb24gZm9yIGVhY2ggbW9kZSBpcyBkZXRhaWxlZCBpbiB0YWJsZSAKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXHJlZntjYXA6Yml0cy1uYXJyb3diYW5kfQorCitcZW5kX2luc2V0CisKKy4KKyBFYWNoIGZyYW1lIHN0YXJ0cyB3aXRoIHRoZSBtb2RlIElEIGVuY29kZWQgd2l0aCA0IGJpdHMgd2hpY2ggYWxsb3dzIGEgcmFuZ2UKKyBmcm9tIDAgdG8gMTUsIHRob3VnaCBvbmx5IHRoZSBmaXJzdCA3IHZhbHVlcyBhcmUgdXNlZCAodGhlIG90aGVycyBhcmUgcmVzZXJ2ZWQpLgorIFRoZSBwYXJhbWV0ZXJzIGFyZSBsaXN0ZWQgaW4gdGhlIHRhYmxlIGluIHRoZSBvcmRlciB0aGV5IGFyZSBwYWNrZWQgaW4KKyB0aGUgYml0LXN0cmVhbS4KKyBBbGwgZnJhbWUtYmFzZWQgcGFyYW1ldGVycyBhcmUgcGFja2VkIGJlZm9yZSBzdWItZnJhbWUgcGFyYW1ldGVycy4KKyBUaGUgcGFyYW1ldGVycyBmb3IgYSBjZXJ0YWluIHN1Yi1mcmFtZSBhcmUgYWxsIHBhY2tlZCBiZWZvcmUgdGhlIGZvbGxvd2luZworIHN1Yi1mcmFtZSBpcyBwYWNrZWQuCisgTm90ZSB0aGF0IHRoZSAKK1xiZWdpbl9pbnNldCBRdW90ZXMgZWxkCitcZW5kX2luc2V0CisKK09MCitcYmVnaW5faW5zZXQgUXVvdGVzIGVyZAorXGVuZF9pbnNldAorCisgaW4gdGhlIHBhcmFtZXRlciBkZXNjcmlwdGlvbiBtZWFucyB0aGF0IHRoZSBwYXJhbWV0ZXIgaXMgYW4gb3BlbiBsb29wIGVzdGltYXRpbworbiBiYXNlZCBvbiB0aGUgd2hvbGUgZnJhbWUuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitcYmVnaW5faW5zZXQgRmxvYXQgdGFibGUKK3BsYWNlbWVudCBoCit3aWRlIHRydWUKK3NpZGV3YXlzIGZhbHNlCitzdGF0dXMgb3BlbgorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitcYmVnaW5faW5zZXQgVGFidWxhcgorPGx5eHRhYnVsYXIgdmVyc2lvbj0iMyIgcm93cz0iMTIiIGNvbHVtbnM9IjExIj4KKzxmZWF0dXJlcz4KKzxjb2x1bW4gYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgbGVmdGxpbmU9InRydWUiIHdpZHRoPSIwcHQiPgorPGNvbHVtbiBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiBsZWZ0bGluZT0idHJ1ZSIgd2lkdGg9IjBwdCI+Cis8Y29sdW1uIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIGxlZnRsaW5lPSJ0cnVlIiB3aWR0aD0iMHB0Ij4KKzxjb2x1bW4gYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgbGVmdGxpbmU9InRydWUiIHdpZHRoPSIwcHQiPgorPGNvbHVtbiBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiBsZWZ0bGluZT0idHJ1ZSIgd2lkdGg9IjBwdCI+Cis8Y29sdW1uIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIGxlZnRsaW5lPSJ0cnVlIiB3aWR0aD0iMHB0Ij4KKzxjb2x1bW4gYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgbGVmdGxpbmU9InRydWUiIHdpZHRoPSIwcHQiPgorPGNvbHVtbiBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiBsZWZ0bGluZT0idHJ1ZSIgd2lkdGg9IjBwdCI+Cis8Y29sdW1uIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIGxlZnRsaW5lPSJ0cnVlIiB3aWR0aD0iMHB0Ij4KKzxjb2x1bW4gYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgbGVmdGxpbmU9InRydWUiIHdpZHRoPSIwcHQiPgorPGNvbHVtbiBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB3aWR0aD0iMHB0Ij4KKzxyb3cgdG9wbGluZT0idHJ1ZSIgYm90dG9tbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1BhcmFtZXRlcgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitVcGRhdGUgcmF0ZQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiswCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzEKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiszCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzYKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis3CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorOAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitXaWRlYmFuZCBiaXQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorZnJhbWUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzEKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzEKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzEKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorTW9kZSBJRAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitmcmFtZQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitMU1AKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorZnJhbWUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxOAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxOAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxOAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxOAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiszMAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzMwCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMzAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxOAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitPTCBwaXRjaAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitmcmFtZQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiswCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzcKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNworXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiswCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiswCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNworXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitPTCBwaXRjaCBnYWluCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK2ZyYW1lCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiswCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiswCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8L3Jvdz4KKzxyb3cgdG9wbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK09MIEV4YyBnYWluCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK2ZyYW1lCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis1CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis1CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis1CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8L3Jvdz4KKzxyb3cgdG9wbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0ZpbmUgcGl0Y2gKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorc3ViLWZyYW1lCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiswCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzcKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNworXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis3CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNworXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzcKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiswCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8L3Jvdz4KKzxyb3cgdG9wbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1BpdGNoIGdhaW4KK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorc3ViLWZyYW1lCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis1CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis3CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNworXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzcKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiswCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8L3Jvdz4KKzxyb3cgdG9wbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0lubm92YXRpb24gZ2FpbgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitzdWItZnJhbWUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzMKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiszCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMworXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIiBib3R0b21saW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorSW5ub3ZhdGlvbiBWUQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitzdWItZnJhbWUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiswCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzE2CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzIwCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzM1CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzQ4CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNjQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis5NgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzEwCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8L3Jvdz4KKzxyb3cgdG9wbGluZT0idHJ1ZSIgYm90dG9tbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RvdGFsCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK2ZyYW1lCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNDMKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMTE5CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzE2MAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisyMjAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMzAwCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMzY0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNDkyCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNzkKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPC9seXh0YWJ1bGFyPgorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBDYXB0aW9uCitCaXQgYWxsb2NhdGlvbiBmb3IgbmFycm93YmFuZCBtb2RlcworXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcbGFiZWx7Y2FwOmJpdHMtbmFycm93YmFuZH0KKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitTbyBmYXIsIG5vIE1PUyAoTWVhbiBPcGluaW9uIFNjb3JlCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHttZWFuIG9waW5pb24gc2NvcmV9CisKK1xlbmRfaW5zZXQKKworKSBzdWJqZWN0aXZlIGV2YWx1YXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkIGZvciBTcGVleC4KKyBJbiBvcmRlciB0byBnaXZlIGFuIGlkZWEgb2YgdGhlIHF1YWxpdHkgYWNoaXZhYmxlIHdpdGggaXQsIHRhYmxlIAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBccmVme2NhcDpxdWFsaXR5X3ZzX2Jwc30KKworXGVuZF9pbnNldAorCisgcHJlc2VudHMgbXkgb3duIHN1YmplY3RpdmUgb3BpbmlvbiBvbiBpdC4KKyBJdCBzb3VsZCBiZSBub3RlZCB0aGF0IGRpZmZlcmVudCBwZW9wbGUgd2lsbCBwZXJjZWl2ZSB0aGUgcXVhbGl0eSBkaWZmZXJlbnRseQorIGFuZCB0aGF0IHRoZSBwZXJzb24gdGhhdCBkZXNpZ25lZCB0aGUgY29kZWMgb2Z0ZW4gaGFzIGEgYmlhcyAob25lIHdheSBvcgorIGFub3RoZXIpIHdoZW4gaXQgY29tZXMgdG8gc3ViamVjdGl2ZSBldmFsdWF0aW9uLgorIExhc3QgdGhpbmcsIGl0IHNob3VsZCBiZSBub3RlZCB0aGF0IGZvciBtb3N0IGNvZGVjcyAoaW5jbHVkaW5nIFNwZWV4KSBlbmNvZGluZworIHF1YWxpdHkgc29tZXRpbWVzIHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIGlucHV0LgorIE5vdGUgdGhhdCB0aGUgY29tcGxleGl0eSBpcyBvbmx5IGFwcHJveGltYXRlICh3aXRoaW4gMC41IG1mbG9wcyBhbmQgdXNpbmcKKyB0aGUgbG93ZXN0IGNvbXBsZXhpdHkgc2V0dGluZykuCisgRGVjb2RpbmcgcmVxdWlyZXMgYXBwcm94aW1hdGVseSAwLjUgbWZsb3BzCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtjb21wbGV4aXR5fQorCitcZW5kX2luc2V0CisKKyBpbiBtb3N0IG1vZGVzICgxIG1mbG9wcyB3aXRoIHBlcmNlcHR1YWwgZW5oYW5jZW1lbnQpLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorXGJlZ2luX2luc2V0IEZsb2F0IHRhYmxlCitwbGFjZW1lbnQgaAord2lkZSB0cnVlCitzaWRld2F5cyBmYWxzZQorc3RhdHVzIG9wZW4KKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorXGJlZ2luX2luc2V0IFRhYnVsYXIKKzxseXh0YWJ1bGFyIHZlcnNpb249IjMiIHJvd3M9IjE3IiBjb2x1bW5zPSI0Ij4KKzxmZWF0dXJlcz4KKzxjb2x1bW4gYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgbGVmdGxpbmU9InRydWUiIHdpZHRoPSIwcHQiPgorPGNvbHVtbiBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiBsZWZ0bGluZT0idHJ1ZSIgd2lkdGg9IjBwdCI+Cis8Y29sdW1uIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIGxlZnRsaW5lPSJ0cnVlIiB3aWR0aD0iMHB0Ij4KKzxjb2x1bW4gYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgd2lkdGg9IjBwdCI+Cis8cm93IHRvcGxpbmU9InRydWUiIGJvdHRvbWxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitNb2RlCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0JpdC1yYXRlCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtiaXQtcmF0ZX0KKworXGVuZF9pbnNldAorCisgKGJwcykKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorbWZsb3BzCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtjb21wbGV4aXR5fQorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1F1YWxpdHkvZGVzY3JpcHRpb24KK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisyNTAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorTi9BCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorTm8gdHJhbnNtaXNzaW9uIChEVFgpCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8L3Jvdz4KKzxyb3cgdG9wbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzEKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMiwxNTAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1ZvY29kZXIgKG1vc3RseSBmb3IgY29tZm9ydCBub2lzZSkKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis1LDk1MAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis5CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVmVyeSBub3RpY2VhYmxlIGFydGlmYWN0cy9ub2lzZSwgZ29vZCBpbnRlbGxpZ2liaWxpdHkKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMworXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis4LDAwMAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxMAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0FydGlmYWN0cy9ub2lzZSBzb21ldGltZXMgbm90aWNlYWJsZQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzExLDAwMAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxNAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0FydGlmYWN0cyB1c3VhbGx5IG5vdGljZWFibGUgb25seSB3aXRoIGhlYWRwaG9uZXMKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxNSwwMDAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMTEKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitOZWVkIGdvb2QgaGVhZHBob25lcyB0byB0ZWxsIHRoZSBkaWZmZXJlbmNlCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8L3Jvdz4KKzxyb3cgdG9wbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzYKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMTgsMjAwCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzE3LjUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitIYXJkIHRvIHRlbGwgdGhlIGRpZmZlcmVuY2UgZXZlbiB3aXRoIGdvb2QgaGVhZHBob25lcworXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis3CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzI0LDYwMAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxNC41CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorQ29tcGxldGVseSB0cmFuc3BhcmVudCBmb3Igdm9pY2UsIGdvb2QgcXVhbGl0eSBtdXNpYworXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis4CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzMsOTUwCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzEwLjUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitWZXJ5IG5vdGljZWFibGUgYXJ0aWZhY3RzL25vaXNlLCBnb29kIGludGVsbGlnaWJpbGl0eQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis5CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK04vQQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitOL0EKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCityZXNlcnZlZAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxMAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitOL0EKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorTi9BCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorcmVzZXJ2ZWQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMTEKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorTi9BCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK04vQQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK3Jlc2VydmVkCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8L3Jvdz4KKzxyb3cgdG9wbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzEyCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK04vQQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitOL0EKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiByaWdodGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCityZXNlcnZlZAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxMworXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitOL0EKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorTi9BCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorQXBwbGljYXRpb24tZGVmaW5lZCwgaW50ZXJwcmV0ZWQgYnkgY2FsbGJhY2sgb3Igc2tpcHBlZAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxNAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitOL0EKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorTi9BCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorU3BlZXggaW4tYmFuZCBzaWduYWxpbmcKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIiBib3R0b21saW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMTUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorTi9BCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK04vQQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHJpZ2h0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1Rlcm1pbmF0b3IgY29kZQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8L2x5eHRhYnVsYXI+CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IENhcHRpb24KK1F1YWxpdHkgdmVyc3VzIGJpdC1yYXRlCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxsYWJlbHtjYXA6cXVhbGl0eV92c19icHN9CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTZWN0aW9uCitQZXJjZXB0dWFsIGVuaGFuY2VtZW50CitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHtwZXJjZXB0dWFsIGVuaGFuY2VtZW50fQorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorCitcc2VyaWVzIGJvbGQKK1RoaXMgc2VjdGlvbiB3YXMgb25seSB2YWxpZCBmb3IgdmVyc2lvbiAxLjEuMTIgYW5kIGVhcmxpZXIuCisgSXQgZG9lcyBub3QgYXBwbHkgdG8gdmVyc2lvbiAxLjItYmV0YTEgKGFuZCBsYXRlciksIGZvciB3aGljaCB0aGUgbmV3IHBlcmNlcHR1YWwKKyBlbmhhbmNlbWVudCBpcyBub3QgeWV0IGRvY3VtZW50ZWQuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGlzIHBhcnQgb2YgdGhlIGNvZGVjIG9ubHkgYXBwbGllcyB0byB0aGUgZGVjb2RlciBhbmQgY2FuIGV2ZW4gYmUgY2hhbmdlZAorIHdpdGhvdXQgYWZmZWN0aW5nIGludGVyLW9wZXJhYmlsaXR5LgorIEZvciB0aGF0IHJlYXNvbiwgdGhlIGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIGFuZCBkZXNjcmliZWQgaGVyZSBzaG91bGQKKyBvbmx5IGJlIGNvbnNpZGVyZWQgYXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uCisgVGhlIGVuaGFuY2VtZW50IHN5c3RlbSBpcyBkaXZpZGVkIGludG8gdHdvIHBhcnRzLgorIEZpcnN0LCB0aGUgc3ludGhlc2lzIGZpbHRlciAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRTKHopPTEvQSh6KSQKK1xlbmRfaW5zZXQKKworIGlzIHJlcGxhY2VkIGJ5IGFuIGVuaGFuY2VkIGZpbHRlcjoKK1xiZWdpbl9pbnNldCBGb3JtdWxhIFxbCitTJyh6KT1cZnJhY3tBXGxlZnQoei9hX3syfVxyaWdodClBXGxlZnQoei9hX3szfVxyaWdodCl9e0FcbGVmdCh6XHJpZ2h0KUFcbGVmdCh6L2FfezF9XHJpZ2h0KX1cXQorCitcZW5kX2luc2V0CisKK3doZXJlIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJGFfezF9JAorXGVuZF9pbnNldAorCisgYW5kIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJGFfezJ9JAorXGVuZF9pbnNldAorCisgZGVwZW5kIG9uIHRoZSBtb2RlIGluIHVzZSBhbmQgCitcYmVnaW5faW5zZXQgRm9ybXVsYSAkYV97M309XGZyYWN7MX17cn1cbGVmdCgxLVxmcmFjezEtcmFfezF9fXsxLXJhX3syfX1ccmlnaHQpJAorXGVuZF9pbnNldAorCisgd2l0aCAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRyPS45JAorXGVuZF9pbnNldAorCisuCisgVGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBlbmhhbmNlbWVudCBjb25zaXN0cyBvZiB1c2luZyBhIGNvbWIgZmlsdGVyIHRvIGVuaGFuY2UKKyB0aGUgcGl0Y2ggaW4gdGhlIGV4Y2l0YXRpb24gZG9tYWluLgorIAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorCitcbmV3cGFnZQorCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IENoYXB0ZXIKK1NwZWV4IHdpZGViYW5kIG1vZGUgKHN1Yi1iYW5kIENFTFApCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxpbmRleHt3aWRlYmFuZH0KKworXGVuZF9pbnNldAorCisKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGxhYmVse3NlYzpTcGVleC13aWRlYmFuZC1tb2RlfQorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorRm9yIHdpZGViYW5kLCB0aGUgU3BlZXggYXBwcm9hY2ggdXNlcyBhIAorXGVtcGggb24KK3EKK1xlbXBoIGRlZmF1bHQKK3VhZHJhdHVyZSAKK1xlbXBoIG9uCittCitcZW1waCBkZWZhdWx0CitpcnJvciAKK1xlbXBoIG9uCitmCitcZW1waCBkZWZhdWx0CitpbHRlcgorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7cXVhZHJhdHVyZSBtaXJyb3IgZmlsdGVyfQorCitcZW5kX2luc2V0CisKKyAoUU1GKSB0byBzcGxpdCB0aGUgYmFuZCBpbiB0d28uCisgVGhlIDE2IGtIeiBzaWduYWwgaXMgdGh1cyBkaXZpZGVkIGludG8gdHdvIDgga0h6IHNpZ25hbHMsIG9uZSByZXByZXNlbnRpbmcKKyB0aGUgbG93IGJhbmQgKDAtNCBrSHopLCB0aGUgb3RoZXIgdGhlIGhpZ2ggYmFuZCAoNC04IGtIeikuCisgVGhlIGxvdyBiYW5kIGlzIGVuY29kZWQgd2l0aCB0aGUgbmFycm93YmFuZCBtb2RlIGRlc2NyaWJlZCBpbiBzZWN0aW9uIAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBccmVme3NlYzpTcGVleC1uYXJyb3diYW5kLW1vZGV9CisKK1xlbmRfaW5zZXQKKworIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgcmVzdWx0aW5nIAorXGJlZ2luX2luc2V0IFF1b3RlcyBlbGQKK1xlbmRfaW5zZXQKKworZW1iZWRkZWQgbmFycm93YmFuZCBiaXQtc3RyZWFtCitcYmVnaW5faW5zZXQgUXVvdGVzIGVyZAorXGVuZF9pbnNldAorCisgY2FuIGFsc28gYmUgZGVjb2RlZCB3aXRoIHRoZSBuYXJyb3diYW5kIGRlY29kZXIuCisgU2luY2UgdGhlIGxvdyBiYW5kIGVuY29kaW5nIGhhcyBhbHJlYWR5IGJlZW4gZGVzY3JpYmVkLCBvbmx5IHRoZSBoaWdoIGJhbmQKKyBlbmNvZGluZyBpcyBkZXNjcmliZWQgaW4gdGhpcyBzZWN0aW9uLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTZWN0aW9uCitMaW5lYXIgUHJlZGljdGlvbgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlIGxpbmVhciBwcmVkaWN0aW9uIHBhcnQgdXNlZCBmb3IgdGhlIGhpZ2gtYmFuZCBpcyB2ZXJ5IHNpbWlsYXIgdG8gd2hhdAorIGlzIGRvbmUgZm9yIG5hcnJvd2JhbmQuCisgVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHdlIHVzZSBvbmx5IDEyIGJpdHMgdG8gZW5jb2RlIHRoZSBoaWdoLWJhbmQKKyBMU1AncyB1c2luZyBhIG11bHRpLXN0YWdlIHZlY3RvciBxdWFudGl6ZXIgKE1TVlEpLgorIFRoZSBmaXJzdCBsZXZlbCBxdWFudGl6ZXMgdGhlIDEwIGNvZWZmaWNpZW50cyB3aXRoIDYgYml0cyBhbmQgdGhlIGVycm9yCisgaXMgdGhlbiBxdWFudGl6ZWQgdXNpbmcgNiBiaXRzLCB0b28uCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24KK1BpdGNoIFByZWRpY3Rpb24KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoYXQgcGFydCBpcyBlYXN5OiB0aGVyZSdzIG5vIHBpdGNoIHByZWRpY3Rpb24gZm9yIHRoZSBoaWdoLWJhbmQuCisgVGhlcmUgYXJlIHR3byByZWFzb25zIGZvciB0aGF0LgorIEZpcnN0LCB0aGVyZSBpcyB1c3VhbGx5IGxpdHRsZSBoYXJtb25pYyBzdHJ1Y3R1cmUgaW4gdGhpcyBiYW5kIChhYm92ZSA0Cisga0h6KS4KKyBTZWNvbmQsIGl0IHdvdWxkIGJlIHZlcnkgaGFyZCB0byBpbXBsZW1lbnQgc2luY2UgdGhlIFFNRiBmb2xkcyB0aGUgNC04Cisga0h6IGJhbmQgaW50byA0LTAga0h6IChyZXZlcnNpbmcgdGhlIGZyZXF1ZW5jeSBheGlzKSwgd2hpY2ggbWVhbnMgdGhhdAorIHRoZSBsb2NhdGlvbiBvZiB0aGUgaGFybW9uaWNzIGlzIG5vIGxvbmdlciBhdCBtdWx0aXBsZXMgb2YgdGhlIGZ1bmRhbWVudGFsCisgKHBpdGNoKS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU2VjdGlvbgorRXhjaXRhdGlvbiBRdWFudGl6YXRpb24KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoZSBoaWdoLWJhbmQgZXhjaXRhdGlvbiBpcyBjb2RlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIG5hcnJvd2JhbmQuCisgCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24KK0JpdCBhbGxvY2F0aW9uCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitGb3IgdGhlIHdpZGViYW5kIG1vZGUsIHRoZSBlbnRpcmUgbmFycm93YmFuZCBmcmFtZSBpcyBwYWNrZWQgYmVmb3JlIHRoZQorIGhpZ2gtYmFuZCBpcyBlbmNvZGVkLgorIFRoZSBuYXJyb3diYW5kIHBhcnQgb2YgdGhlIGJpdC1zdHJlYW0gaXMgYXMgZGVmaW5lZCBpbiB0YWJsZSAKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXHJlZntjYXA6Yml0cy1uYXJyb3diYW5kfQorCitcZW5kX2luc2V0CisKKy4KKyBUaGUgaGlnaC1iYW5kIGZvbGxvd3MsIGFzIGRlc2NyaWJlZCBpbiB0YWJsZSAKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXHJlZntjYXA6Yml0cy13aWRlYmFuZH0KKworXGVuZF9pbnNldAorCisuCisgVGhpcyBhbHNvIG1lYW5zIHRoYXQgYSB3aWRlYmFuZCBmcmFtZSBtYXkgYmUgY29ycmVjdGx5IGRlY29kZWQgYnkgYSBuYXJyb3diYW5kCisgZGVjb2RlciB3aXRoIHRoZSBvbmx5IGNhdmVhdCB0aGF0IGlmIG1vcmUgdGhhbiBvbmUgZnJhbWUgaXMgcGFja2VkIGluIHRoZQorIHNhbWUgcGFja2V0LCB0aGUgZGVjb2RlciB3aWxsIG5lZWQgdG8gc2tpcCB0aGUgaGlnaC1iYW5kIHBhcnRzIGluIG9yZGVyCisgdG8gc3luYyB3aXRoIHRoZSBiaXQtc3RyZWFtLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorXGJlZ2luX2luc2V0IEZsb2F0IHRhYmxlCitwbGFjZW1lbnQgaAord2lkZSB0cnVlCitzaWRld2F5cyBmYWxzZQorc3RhdHVzIG9wZW4KKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorXGJlZ2luX2luc2V0IFRhYnVsYXIKKzxseXh0YWJ1bGFyIHZlcnNpb249IjMiIHJvd3M9IjciIGNvbHVtbnM9IjciPgorPGZlYXR1cmVzPgorPGNvbHVtbiBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiBsZWZ0bGluZT0idHJ1ZSIgd2lkdGg9IjBwdCI+Cis8Y29sdW1uIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIGxlZnRsaW5lPSJ0cnVlIiB3aWR0aD0iMHB0Ij4KKzxjb2x1bW4gYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgbGVmdGxpbmU9InRydWUiIHdpZHRoPSIwcHQiPgorPGNvbHVtbiBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiBsZWZ0bGluZT0idHJ1ZSIgd2lkdGg9IjBwdCI+Cis8Y29sdW1uIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIGxlZnRsaW5lPSJ0cnVlIiB3aWR0aD0iMHB0Ij4KKzxjb2x1bW4gYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgbGVmdGxpbmU9InRydWUiIHdpZHRoPSIwcHQiPgorPGNvbHVtbiBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiBsZWZ0bGluZT0idHJ1ZSIgcmlnaHRsaW5lPSJ0cnVlIiB3aWR0aD0iMHB0Ij4KKzxyb3cgdG9wbGluZT0idHJ1ZSIgYm90dG9tbGluZT0idHJ1ZSI+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1BhcmFtZXRlcgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitVcGRhdGUgcmF0ZQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiswCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzEKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiszCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorV2lkZWJhbmQgYml0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK2ZyYW1lCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzEKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzEKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitNb2RlIElECitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK2ZyYW1lCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzMKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMworXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiszCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzMKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMworXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitMU1AKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorZnJhbWUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxMgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxMgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxMgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxMgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitFeGNpdGF0aW9uIGdhaW4KK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorc3ViLWZyYW1lCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCis0CitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzQKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8cm93IHRvcGxpbmU9InRydWUiIGJvdHRvbWxpbmU9InRydWUiPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitFeGNpdGF0aW9uIFZRCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK3N1Yi1mcmFtZQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiswCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMjAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNDAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorODAKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzwvcm93PgorPHJvdyB0b3BsaW5lPSJ0cnVlIiBib3R0b21saW5lPSJ0cnVlIj4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVG90YWwKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorZnJhbWUKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorNAorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCiszNgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPGNlbGwgYWxpZ25tZW50PSJjZW50ZXIiIHZhbGlnbm1lbnQ9InRvcCIgdG9wbGluZT0idHJ1ZSIgbGVmdGxpbmU9InRydWUiIHVzZWJveD0ibm9uZSI+CitcYmVnaW5faW5zZXQgVGV4dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisxMTIKK1xlbmRfbGF5b3V0CisKK1xlbmRfaW5zZXQKKzwvY2VsbD4KKzxjZWxsIGFsaWdubWVudD0iY2VudGVyIiB2YWxpZ25tZW50PSJ0b3AiIHRvcGxpbmU9InRydWUiIGxlZnRsaW5lPSJ0cnVlIiB1c2Vib3g9Im5vbmUiPgorXGJlZ2luX2luc2V0IFRleHQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorMTkyCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0Cis8L2NlbGw+Cis8Y2VsbCBhbGlnbm1lbnQ9ImNlbnRlciIgdmFsaWdubWVudD0idG9wIiB0b3BsaW5lPSJ0cnVlIiBsZWZ0bGluZT0idHJ1ZSIgdXNlYm94PSJub25lIj4KK1xiZWdpbl9pbnNldCBUZXh0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKzM1MgorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorPC9jZWxsPgorPC9yb3c+Cis8L2x5eHRhYnVsYXI+CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IENhcHRpb24KK0JpdCBhbGxvY2F0aW9uIGZvciBoaWdoLWJhbmQgaW4gd2lkZWJhbmQgbW9kZQorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcbGFiZWx7Y2FwOmJpdHMtd2lkZWJhbmR9CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcZW5kX2luc2V0CisKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorXGJlZ2luX2luc2V0IEVSVAorc3RhdHVzIG9wZW4KKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorCisKK1xiYWNrc2xhc2gKK2NsZWFycGFnZQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1xiZWdpbl9pbnNldCBFUlQKK3N0YXR1cyBjb2xsYXBzZWQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorCisKK1xiYWNrc2xhc2gKK2NsZWFycGFnZQorXGVuZF9sYXlvdXQKKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgQ2hhcHRlcgorXHN0YXJ0X29mX2FwcGVuZGl4CitGQVEKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3Vic2VjdGlvbioKK1ZvcmJpcyBpcyBvcGVuLXNvdXJjZQorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7b3Blbi1zb3VyY2V9CisKK1xlbmRfaW5zZXQKKworIGFuZCBwYXRlbnQtZnJlZQorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7cGF0ZW50fQorCitcZW5kX2luc2V0CisKKzsgd2h5IGRvIHdlIG5lZWQgU3BlZXg/CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitWb3JiaXMgaXMgYSBncmVhdCBwcm9qZWN0IGJ1dCBpdHMgZ29hbHMgYXJlIG5vdCB0aGUgc2FtZSBhcyBTcGVleC4KKyBWb3JiaXMgaXMgbW9zdGx5IGFpbWVkIGF0IGNvbXByZXNzaW5nIG11c2ljIGFuZCBhdWRpbyBpbiBnZW5lcmFsLCB3aGlsZQorIFNwZWV4IHRhcmdldHMgc3BlZWNoIG9ubHkuCisgRm9yIHRoYXQgcmVhc29uIFNwZWV4IGNhbiBhY2hpZXZlIG11Y2ggYmV0dGVyIHJlc3VsdHMgdGhhbiBWb3JiaXMgb24gc3BlZWNoLAorIHR5cGljYWxseSAyLTQgdGltZXMgaGlnaGVyIGNvbXByZXNzaW9uIGF0IGVxdWFsIHF1YWxpdHkuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN1YnNlY3Rpb24qCitJc24ndCB0aGVyZSBhbiBvcGVuLXNvdXJjZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR1NNLUZSIGNvZGVjPyBXaHkgaXMgU3BlZXgKKyBuZWNlc3Nhcnk/CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitGaXJzdCBvZiBhbGwsIGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgR1NNLUZSIGlzIGNvdmVyZWQgYnkgYSBQaGlsaXBzIHBhdGVudAorIChzZWUgaHR0cDovL2ticy5jcy50dS1iZXJsaW4uZGUvfmp1dHRhL3RvYXN0Lmh0bWwpLgorIEFsc28sIEdTTS1GUiBvZmZlcnMgbWVkaW9jcmUgcXVhbGl0eSBhdCBhIHJlbGF0aXZlbHkgaGlnaCBiaXQtcmF0ZSwgd2hpbGUKKyBTcGVleCBjYW4gb2ZmZXIgZXF1aXZhbGVudCBxdWFsaXR5IGF0IGFsbW9zdCBoYWxmIHRoZSBiaXQtcmF0ZS4KKyBMYXN0IGJ1dCBub3QgbGVhc3QsIFNwZWV4IG9mZmVycyBhIHdpZGUgcmFuZ2Ugb2YgYml0LXJhdGVzIGFuZCBzYW1wbGluZworIHJhdGVzLCB3aGlsZSBHU00tRlIgaXMgbGltaXRlZCB0byA4IGtIeiBzcGVlY2ggYXQgMTMga2Jwcy4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3Vic2VjdGlvbioKK1VuZGVyIHdoYXQgbGljZW5zZSBpcyBTcGVleCByZWxlYXNlZD8KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0FzIG9mIHZlcnNpb24gMS4wIGJldGEgMSwgU3BlZXggaXMgcmVsZWFzZWQgdW5kZXIgWGlwaCdzIHZlcnNpb24gb2YgdGhlIChyZXZpc2VkKQorIEJTRCBsaWNlbnNlIChzZWUgQXBwZW5kaXggCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxyZWZ7c2VjOlNwZWV4LUxpY2Vuc2V9CisKK1xlbmRfaW5zZXQKKworKS4KKyBUaGlzIGxpY2Vuc2UgaXMgb25lIG9mIHRoZSBtb3N0IHBlcm1pc3NpdmUgb3Blbi1zb3VyY2UgbGljZW5zZXMuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN1YnNlY3Rpb24qCitBbSBJIGFsbG93ZWQgdG8gdXNlIFNwZWV4IGluIGNvbW1lcmNpYWwgc29mdHdhcmU/CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitZZXMuCisgQXMgbG9uZyBhcyB5b3UgY29tcGx5IHdpdGggdGhlIGxpY2Vuc2UuCisgVGhpcyBiYXNpY2FsbHkgbWVhbnMgeW91IGhhdmUgdG8ga2VlcCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgeW91IGNhbid0CisgdXNlIG91ciBuYW1lIHRvIHByb21vdGUgeW91ciBwcm9kdWN0IHdpdGhvdXQgYXV0aG9yaXphdGlvbi4KKyBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgbGljZW5zZSBpbiBBcHBlbmRpeCAKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXHJlZntzZWM6U3BlZXgtTGljZW5zZX0KKworXGVuZF9pbnNldAorCisuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN1YnNlY3Rpb24qCitPZ2cKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e09nZ30KKworXGVuZF9pbnNldAorCissIFNwZWV4LCBWb3JiaXMKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e1ZvcmJpc30KKworXGVuZF9pbnNldAorCissIHdoYXQncyB0aGUgZGlmZmVyZW5jZT8KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK09nZyBpcyBhIGNvbnRhaW5lciBmb3JtYXQgZm9yIGhvbGRpbmcgbXVsdGltZWRpYSBkYXRhLgorIFZvcmJpcyBpcyBhbiBhdWRpbyBjb2RlYyB0aGF0IHVzZXMgT2dnIHRvIHN0b3JlIGl0cyBiaXQtc3RyZWFtcyBhcyBmaWxlcywKKyBoZW5jZSB0aGUgbmFtZSBPZ2cgVm9yYmlzLgorIFNwZWV4IGFsc28gdXNlcyB0aGUgT2dnIGZvcm1hdCB0byBzdG9yZSBpdHMgYml0LXN0cmVhbXMgYXMgZmlsZXMsIHNvIHRlY2huaWNhbGwKK3kgdGhleSB3b3VsZCBiZSAKK1xiZWdpbl9pbnNldCBRdW90ZXMgZWxkCitcZW5kX2luc2V0CisKK09nZyBTcGVleAorXGJlZ2luX2luc2V0IFF1b3RlcyBlcmQKK1xlbmRfaW5zZXQKKworIGZpbGVzIChJIHByZWZlciB0byBjYWxsIHRoZW0ganVzdCBTcGVleCBmaWxlcykuCisgT25lIGRpZmZlcmVuY2Ugd2l0aCBWb3JiaXMgaG93ZXZlciwgaXMgdGhhdCBTcGVleCBpcyBsZXNzIHRpZWQgd2l0aCBPZ2cuCisgQWN0dWFsbHksIGlmIHlvdSBqdXN0IGRvIFZvaWNlIG92ZXIgSVAgKFZvSVApLCB5b3UgZG9uJ3QgbmVlZCBPZ2cgYXQgYWxsLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdWJzZWN0aW9uKgorV2hhdCdzIHRoZSBleHRlbnNpb24gZm9yIFNwZWV4PworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorU3BlZXggZmlsZXMgaGF2ZSB0aGUgLnNweCBleHRlbnNpb24uCisgTm90ZSwgaG93ZXZlciB0aGF0IHRoZSBTcGVleCB0b29scyAoc3BlZXhlbmMsIHNwZWV4ZGVjKSBkbyBub3QgcmVseSBvbgorIHRoZSBleHRlbnNpb24gYXQgYWxsLCBzbyBhbnkgZXh0ZW5zaW9uIHdpbGwgd29yay4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3Vic2VjdGlvbioKK0NhbiBJIHVzZSBTcGVleCBmb3IgY29tcHJlc3NpbmcgbXVzaWMKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e211c2ljfQorCitcZW5kX2luc2V0CisKKz8KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0p1c3QgbGlrZSBWb3JiaXMgaXMgbm90IHJlYWxseSBhZGFwdGVkIHRvIHNwZWVjaCwgU3BlZXggaXMgcmVhbGx5IG5vdCBhZGFwdGVkCisgZm9yIG11c2ljLgorIEluIG1vc3QgY2FzZXMsIHlvdSdsbCBiZSBiZXR0ZXIgb2Ygd2l0aCBWb3JiaXMgd2hlbiBpdCBjb21lcyB0byBtdXNpYy4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3Vic2VjdGlvbioKK0kgY29udmVydGVkIHNvbWUgTVAzcyB0byBTcGVleCBhbmQgdGhlIHF1YWxpdHkgaXMgYmFkLgorIFdoYXQncyB3cm9uZz8KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoaXMgaXMgY2FsbGVkIHRyYW5zY29kaW5nIGFuZCBpdCB3aWxsIGFsd2F5cyByZXN1bHQgaW4gbXVjaCBwb29yZXIgcXVhbGl0eQorIHRoYW4gdGhlIG9yaWdpbmFsIE1QMy4KKyBVbmxlc3MgeW91IGhhdmUgYSByZWFsbHkgZ29vZCAoc2l6ZSkgcmVhc29uIHRvIGRvIHNvLCBuZXZlciB0cmFuc2NvZGUgc3BlZWNoLgorIFRoaXMgaXMgZXZlbiB2YWxpZCBmb3Igc2VsZiB0cmFuc2NvZGluZyAodGFuZGVtaW5nKSwgaS5lLgorIElmIHlvdSBkZWNvZGUgYSBTcGVleCBmaWxlIGFuZCByZS1lbmNvZGUgaXQgYWdhaW4gYXQgdGhlIHNhbWUgYml0LXJhdGUsCisgeW91IHdpbGwgbG9zZSBxdWFsaXR5LgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdWJzZWN0aW9uKgorRG9lcyBTcGVleCBydW4gb24gV2luZG93cz8KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0NvbXBpbGF0aW9uIG9uIFdpbmRvd3MgaGFzIGJlZW4gc3VwcG9ydGVkIHNpbmNlIHZlcnNpb24gMC44LjAuCisgVGhlcmUgYXJlIGFsc28gc2V2ZXJhbCBmcm9udC1lbmRzIGF2YWlsYWJsZSBmcm9tIHRoZSB3ZWJzaXRlLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdWJzZWN0aW9uKgorV2h5IGlzIGVuY29kaW5nIHNvIHNsb3cgY29tcGFyZWQgdG8gZGVjb2Rpbmc/CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitGb3IgbW9zdCBraW5kcyBvZiBjb21wcmVzc2lvbiwgZW5jb2RpbmcgaXMgaW5oZXJlbnRseSBzbG93ZXIgdGhhbiBkZWNvZGluZy4KKyBJbiB0aGUgY2FzZSBvZiBTcGVleCwgZW5jb2RpbmcgY29uc2lzdHMgb2YgZmluZGluZywgZm9yIGVhY2ggdmVjdG9yIG9mCisgNSB0byAxMCBzYW1wbGVzLCB0aGUgZW50cnkgdGhhdCBtYXRjaGVzIHRoZSBiZXN0IHdpdGhpbiBhIGNvZGVib29rIGNvbnNpc3RpbmcKKyBvZiAxNiB0byAyNTYgZW50cmllcy4KKyBPbiB0aGUgb3RoZXIgaGFuZCwgYXQgZGVjb2RpbmcgYWxsIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBpcyBsb29rIHVwIHRoZQorIHJpZ2h0IGVudHJ5IGluIHRoZSBjb2RlYm9vayB1c2luZyB0aGUgZW5jb2RlZCBpbmRleC4KKyBTaW5jZSBhIGxvb2t1cCBpcyBtdWNoIGZhc3RlciB0aGFuIGEgc2VhcmNoLCB0aGUgZGVjb2RlciB3b3JrcyBtdWNoIGZhc3RlcgorIHRoYW4gdGhlIGVuY29kZXIuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN1YnNlY3Rpb24qCitXaHkgaXMgU3BlZXggc28gc2xvdyBvbiBteSBpUGFxIChvciBpbnNlcnQgYW55IHBsYXRmb3JtIHdpdGhvdXQgYW4gRlBVKT8KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1lvdSBwcm9iYWJseSBkaWRuJ3QgYnVpbGQgU3BlZXggd2l0aCB0aGUgZml4ZWQtcG9pbnQgb3B0aW9uICgtLWVuYWJsZS1maXhlZC1wb2luCit0KS4KKyBFdmVuIGlmIHlvdSBkaWQsIG5vdCBhbGwgbW9kZXMgaGF2ZSBiZWVuIHBvcnRlZCB0byB1c2UgZml4ZWQtcG9pbnQgYXJpdGhtZXRpYywKKyBzbyB0aGUgY29kZSBtYXkgYmUgc2xvd2VkIGRvd24gYnkgYSBmZXcgZmxvYXQgb3BlcmF0aW9ucyBsZWZ0IChlLmcuCisgaW4gdGhlIHdpZGViYW5kIG1vZGUpLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdWJzZWN0aW9uKgorSSdtIGdldHRpbmcgdW51c3VhbCBiYWNrZ3JvdW5kIG5vaXNlIChoaXNzKSB3aGVuIHVzaW5nIGxpYnNwZWV4IGluIG15IGFwcGxpY2F0aW8KK24uCisgSG93IGRvIEkgZml4IHRoYXQ/CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitPbmUgb2YgdGhlIGNhdXNlcyBjb3VsZCBiZSBzY2FsaW5nIG9mIHRoZSBpbnB1dCBzcGVlY2guCisgU3BlZXggZXhwZWN0cyBzaWduYWxzIHRvIGhhdmUgYSAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRccG0yXnsxNX0kCitcZW5kX2luc2V0CisKKyAoc2lnbmVkIHNob3J0KSBkeW5hbWljIHJhbmdlLgorIElmIHRoZSBkeW5hbWljIHJhbmdlIG9mIHlvdXIgc2lnbmFscyBpcyB0b28gc21hbGwgKGUuZy4KKyAKK1xiZWdpbl9pbnNldCBGb3JtdWxhICRccG0xLjAkCitcZW5kX2luc2V0CisKKyksIHlvdSB3aWxsIHN1ZmZlciBpbXBvcnRhbnQgcXVhbnRpemF0aW9uIG5vaXNlLgorIEEgZ29vZCB0YXJnZXQgaXMgdG8gaGF2ZSBhIGR5bmFtaWMgcmFuZ2UgYXJvdW5kIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJFxwbTgwMDAkCitcZW5kX2luc2V0CisKKyB3aGljaCBpcyBsYXJnZSBlbm91Z2gsIGJ1dCBzbWFsbCBlbm91Z2ggdG8gbWFrZSBzdXJlIHRoZXJlJ3Mgbm8gY2xpcHBpbmcKKyB3aGVuIGNvbnZlcnRpbmcgYmFjayB0byBzaWduZWQgc2hvcnQuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN1YnNlY3Rpb24qCitJIGdldCB2ZXJ5IGRpc3RvcnRlZCBzcGVlY2ggd2hlbiB1c2luZyBsaWJzcGVleCBpbiBteSBhcHBsaWNhdGlvbi4KKyBXaGF0J3Mgd3Jvbmc/CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGVyZSBhcmUgbWFueSBwb3NzaWJsZSBjYXVzZXMgZm9yIHRoYXQuCisgT25lIG9mIHRoZW0gaXMgZXJyb3JzIGluIHRoZSB3YXkgdGhlIGJpdHMgYXJlIG1hbmlwdWxhdGVkLgorIEFub3RoZXIgcG9zc2libGUgY2F1c2UgaXMgdGhlIHVzZSBvZiB0aGUgc2FtZSBlbmNvZGVyIG9yIGRlY29kZXIgc3RhdGUKKyBmb3IgbW9yZSB0aGFuIG9uZSBhdWRpbyBzdHJlYW0gKGNoYW5uZWwpLCB3aGljaCBwcm9kdWNlcyBzdHJhbmdlIGVmZmVjdHMKKyB3aXRoIHRoZSBmaWx0ZXIgbWVtb3JpZXMuCisgSWYgdGhlIGlucHV0IHNwZWVjaCBoYXMgYW4gYW1wbGl0dWRlIGNsb3NlIHRvIAorXGJlZ2luX2luc2V0IEZvcm11bGEgJFxwbTJeezE1fSQKK1xlbmRfaW5zZXQKKworLCBpdCBpcyBwb3NzaWJsZSB0aGF0IGF0IGRlY29kaW5nLCB0aGUgYW1wbGl0dWRlIGJlIGEgYml0IGhpZ2hlciB0aGFuIHRoYXQsCisgY2F1c2luZyBjbGlwcGluZyB3aGVuIHNhdmluZyBhcyAxNi1iaXQgUENNLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdWJzZWN0aW9uKgorSG93IGRvZXMgU3BlZXggY29tcGFyZSB0byBvdGhlciBwcm9wcmlldGFyeSBjb2RlY3M/CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitJdCdzIGhhcmQgdG8gZ2l2ZSBwcmVjaXNlIGZpZ3VyZXMgc2luY2Ugbm8gZm9ybWFsIGxpc3RlbmluZyB0ZXN0cyBoYXZlIGJlZW4KKyBwZXJmb3JtZWQgeWV0LgorIEFsbCBJIGNhbiBzYXkgaXMgdGhhdCBpbiB0ZXJtcyBvZiBxdWFsaXR5LCBTcGVleCBjb21wZXRlcyBvbiB0aGUgc2FtZSBncm91bmQKKyBhcyBvdGhlciBwcm9wcmlldGFyeSBjb2RlY3MgKG5vdCBuZWNlc3NhcmlseSB0aGUgYmVzdCwgYnV0IG5vdCB0aGUgd29yc3QKKyBlaXRoZXIpLgorIFNwZWV4IGFsc28gaGFzIG1hbnkgZmVhdHVyZXMgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gbW9zdCBvdGhlciBjb2RlY3MuCisgVGhlc2UgaW5jbHVkZSB2YXJpYWJsZSBiaXQtcmF0ZSAoVkJSKSwgaW50ZWdyYXRpb24gb2YgbmFycm93YmFuZCBhbmQgd2lkZWJhbmQsCisgYXMgd2VsbCBhcyBzdGVyZW8gc3VwcG9ydC4KKyBPZiBjb3Vyc2UsIGFub3RoZXIgYXJlYSB3aGVyZSBTcGVleCBpcyByZWFsbHkgaGFyZCB0byBiZWF0IGlzIHRoZSBxdWFsaXR5L3ByaWNlCisgcmF0aW8uCisgVW5saWtlIG1hbnkgdmVyeSBleHBlbnNpdmUgY29kZWNzLCBTcGVleCBpcyBmcmVlIGFuZCBhbnlvbmUgbWF5IGRpc3RyaWJ1dGUKKyBvciBtb2RpZnkgaXQgYXQgd2lsbC4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3Vic2VjdGlvbioKK0NhbiBTcGVleCBwYXNzIERUTUYKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGluZGV4e0RUTUZ9CisKK1xlbmRfaW5zZXQKKworPworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorSSBndWVzcyBpdCBhbGwgZGVwZW5kcyBvbiB0aGUgYml0LXJhdGUgdXNlZC4KKyBUaG91Z2ggbm8gZm9ybWFsIHRlc3RpbmcgaGFzIHlldCBiZWVuIHBlcmZvcm1lZCwgSSdkIHNheSBpcyBjb3JyZWN0bHkgYXQKKyA4IGticHMgYW5kIGFib3ZlLgorIEFsc28sIG1ha2Ugc3VyZSB5b3UgZG9uJ3QgdXNlIHRoZSBsb3dlc3QgY29tcGxleGl0eSAoc2VlIFNQRUVYX1NFVF9DT01QTEVYSVRZCisgb3IgLS1jb21wIG9wdGlvbiksIGFzIGl0IGNhdXNlcyBzaWduaWZpY2FudCBub2lzZS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3Vic2VjdGlvbioKK0NhbiBTcGVleCBwYXNzIFYuOXggbW9kZW0gc2lnbmFscyBjb3JyZWN0bHk/CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitJZiBJIGNvdWxkIGRvIHRoYXQgSSdkIGJlIHZlcnkgcmljaCBieSBub3cgOi0pIFNlcmlvdXNseSwgdGhhdCB3b3VsZCBicmVhaworIGZ1bmRhbWVudGFsIGxhd3Mgb2YgaW5mb3JtYXRpb24gdGhlb3J5LgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdWJzZWN0aW9uKgorV2hhdCBpcyB5b3VyIChKZWFuLU1hcmMpIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBVbml2ZXJzaXR5IG9mIFNoZXJicm9va2UKKyBhbmQgaG93IGRvZXMgU3BlZXggZml0IGludG8gdGhhdD8KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0kgaGF2ZSBjb21wbGV0ZWQgbXkgCitcZW1waCBvbgorUGguRC4KKworXGVtcGggZGVmYXVsdAorIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFNoZXJicm9va2UgaW4gMjAwNSBpbiBtb2JpbGUgcm9ib3RpY3MuCisgQWx0aG91Z2ggSSBkaWQgbXkgbWFzdGVyIHdpdGggdGhlIFNoZXJicm9va2Ugc3BlZWNoIGNvZGluZyBncm91cCAoaW4gc3BlZWNoCisgZW5oYW5jZW1lbnQsIG5vdCBjb2RpbmcpLCB3YXMgbm8gbG9uZ2VyIGFzc29jaWF0ZWQgd2l0aCB0aGVtIHdoZW4gZGV2ZWxvcGluZworIFNwZWV4LgorIEl0IHNob3VsZCAKK1xzZXJpZXMgYm9sZAorbm90Citcc2VyaWVzIGRlZmF1bHQKKyBiZSB1bmRlcnN0b29kIHRoYXQgdGhleSBvciB0aGUgVW5pdmVyc2l0eSBvZiBTaGVyYnJvb2tlIGhhdmUgYW55dGhpbmcgdG8KKyBkbyB3aXRoIHRoZSBTcGVleCBwcm9qZWN0LgorIEZ1cnRoZXJtb3JlLCBTcGVleCBkb2VzIG5vdCBtYWtlIHVzZSBvZiBhbnkgY29kZSBvciBwcm9wcmlldGFyeSB0ZWNobm9sb2d5CisgZGV2ZWxvcGVkIGluIHRoZSBTaGVyYnJvb2tlIHNwZWVjaCBjb2RpbmcgZ3JvdXAuCisgCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN1YnNlY3Rpb24qCitDRUxQLCBBQ0VMUAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcaW5kZXh7QUNFTFB9CisKK1xlbmRfaW5zZXQKKworLCB3aGF0J3MgdGhlIGRpZmZlcmVuY2U/CitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitDRUxQIHN0YW5kcyBmb3IgCitcYmVnaW5faW5zZXQgUXVvdGVzIGVsZAorXGVuZF9pbnNldAorCitDb2RlIEV4Y2l0ZWQgTGluZWFyIFByZWRpY3Rpb24KK1xiZWdpbl9pbnNldCBRdW90ZXMgZXJkCitcZW5kX2luc2V0CisKKywgd2hpbGUgQUNFTFAgc3RhbmRzIGZvciAKK1xiZWdpbl9pbnNldCBRdW90ZXMgZWxkCitcZW5kX2luc2V0CisKKworXGVtcGggb24KK0FsZ2VicmFpYworXGVtcGggZGVmYXVsdAorIENvZGUgRXhjaXRlZCBMaW5lYXIgUHJlZGljdGlvbgorXGJlZ2luX2luc2V0IFF1b3RlcyBlcmQKK1xlbmRfaW5zZXQKKworLgorIFRoYXQgbWVhbnMgQUNFTFAgaXMgYSBDRUxQIHRlY2huaXF1ZSB0aGF0IHVzZXMgYW4gYWxnZWJyYWljIGNvZGVib29rIHJlcHJlc2VudGUKK2QgYXMgYSBzdW0gb2YgdW5pdCBwdWxzZXMsIHRodXMgbWFraW5nIHRoZSBjb2RlYm9vayBzZWFyY2ggbXVjaCBtb3JlIGVmZmljaWVudC4KKyBUaGlzIHRlY2huaXF1ZSB3YXMgaW52ZW50ZWQgYXQgdGhlIFVuaXZlcnNpdHkgb2YgU2hlcmJyb29rZSBhbmQgaXMgbm93Cisgb25lIG9mIHRoZSBtb3N0IHdpZGVseSB1c2VkIGZvcm0gb2YgQ0VMUC4KKyBVbmZvcnR1bmF0ZWx5LCBzaW5jZSBpdCBpcyBwYXRlbnRlZCwgaXQgY2Fubm90IGJlIHVzZWQgaW4gU3BlZXguCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisKK1xuZXdwYWdlCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgQ2hhcHRlcgorU2FtcGxlIGNvZGUKK1xiZWdpbl9pbnNldCBMYXRleENvbW1hbmQgXGxhYmVse3NlYzpTYW1wbGUtY29kZX0KKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoaXMgc2VjdGlvbiBzaG93cyBzYW1wbGUgY29kZSBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHNwZWVjaCB1c2luZyB0aGUKKyBTcGVleCBBUEkuCisgVGhlIGNvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIGVuY29kZSBhbmQgZGVjb2RlIGEgZmlsZSBieSBjYWxsaW5nOgorXGZhbWlseSB0eXBld3JpdGVyCisKK1xuZXdsaW5lCislIHNhbXBsZWVuYyBpbl9maWxlLnN3IHwgc2FtcGxlZGVjIG91dF9maWxlLnN3CitcZmFtaWx5IGRlZmF1bHQKKworXG5ld2xpbmUKK3doZXJlIGJvdGggZmlsZXMgYXJlIHJhdyAobm8gaGVhZGVyKSBmaWxlcyBlbmNvZGVkIGF0IDE2IGJpdHMgcGVyIHNhbXBsZQorIChpbiB0aGUgbWFjaGluZSBuYXR1cmFsIGVuZGlhbm5lc3MpLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTZWN0aW9uCitzYW1wbGVlbmMuYworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorc2FtcGxlZW5jIHRha2VzIGEgcmF3IDE2IGJpdHMvc2FtcGxlIGZpbGUsIGVuY29kZXMgaXQgYW5kIG91dHB1dHMgYSBTcGVleAorIHN0cmVhbSB0byBzdGRvdXQuCisgTm90ZSB0aGF0IHRoZSBwYWNraW5nIHVzZWQgaXMgTk9UIGNvbXBhdGlibGUgd2l0aCB0aGF0IG9mIHNwZWV4ZW5jL3NwZWV4ZGVjLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorXGJlZ2luX2luc2V0IEluY2x1ZGUgXHZlcmJhdGltaW5wdXR7c2FtcGxlZW5jLmN9CitwcmV2aWV3IGZhbHNlCisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24KK3NhbXBsZWRlYy5jCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitzYW1wbGVkZWMgcmVhZHMgYSBTcGVleCBzdHJlYW0gZnJvbSBzdGRpbiwgZGVjb2RlcyBpdCBhbmQgb3V0cHV0cyBpdCB0bworIGEgcmF3IDE2IGJpdHMvc2FtcGxlIGZpbGUuCisgTm90ZSB0aGF0IHRoZSBwYWNraW5nIHVzZWQgaXMgTk9UIGNvbXBhdGlibGUgd2l0aCB0aGF0IG9mIHNwZWV4ZW5jL3NwZWV4ZGVjLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorXGJlZ2luX2luc2V0IEluY2x1ZGUgXHZlcmJhdGltaW5wdXR7c2FtcGxlZGVjLmN9CitwcmV2aWV3IGZhbHNlCisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCisKK1xuZXdwYWdlCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgQ2hhcHRlcgorSUVURiBSVFAgUHJvZmlsZQorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBcbGFiZWx7c2VjOklFVEYtZHJhZnR9CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitcYmVnaW5faW5zZXQgSW5jbHVkZSBcdmVyYmF0aW1pbnB1dHtkcmFmdC1oZXJsZWluLXNwZWV4LXJ0cC1wcm9maWxlLTAyLnR4dH0KK3ByZXZpZXcgZmFsc2UKKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKKworXG5ld3BhZ2UKKworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBDaGFwdGVyCitTcGVleCBMaWNlbnNlCitcYmVnaW5faW5zZXQgTGF0ZXhDb21tYW5kIFxsYWJlbHtzZWM6U3BlZXgtTGljZW5zZX0KKworXGVuZF9pbnNldAorCisKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBJdGVtaXplCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgSXRlbWl6ZQorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgSXRlbWl6ZQorTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUworIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorCitcbmV3cGFnZQorCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IENoYXB0ZXIKK0dOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVmVyc2lvbiAxLjEsIE1hcmNoIDIwMDAKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0NvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQSBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQKKyB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZworIGl0IGlzIG5vdCBhbGxvd2VkLgorIAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTZWN0aW9uKgorMC4KKyBQUkVBTUJMRQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIGlzIHRvIG1ha2UgYSBtYW51YWwsIHRleHRib29rLCBvciBvdGhlciB3cml0dGVuCisgZG9jdW1lbnQgImZyZWUiIGluIHRoZSBzZW5zZSBvZiBmcmVlZG9tOiB0byBhc3N1cmUgZXZlcnlvbmUgdGhlIGVmZmVjdGl2ZQorIGZyZWVkb20gdG8gY29weSBhbmQgcmVkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZ5aW5nIGl0LCBlaXRoZXIKKyBjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LgorIFNlY29uZGFyaWx5LCB0aGlzIExpY2Vuc2UgcHJlc2VydmVzIGZvciB0aGUgYXV0aG9yIGFuZCBwdWJsaXNoZXIgYSB3YXkKKyB0byBnZXQgY3JlZGl0IGZvciB0aGVpciB3b3JrLCB3aGlsZSBub3QgYmVpbmcgY29uc2lkZXJlZCByZXNwb25zaWJsZSBmb3IKKyBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXJzLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhpcyBMaWNlbnNlIGlzIGEga2luZCBvZiAiY29weWxlZnQiLCB3aGljaCBtZWFucyB0aGF0IGRlcml2YXRpdmUgd29ya3MKKyBvZiB0aGUgZG9jdW1lbnQgbXVzdCB0aGVtc2VsdmVzIGJlIGZyZWUgaW4gdGhlIHNhbWUgc2Vuc2UuCisgSXQgY29tcGxlbWVudHMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aGljaCBpcyBhIGNvcHlsZWZ0IGxpY2Vuc2UKKyBkZXNpZ25lZCBmb3IgZnJlZSBzb2Z0d2FyZS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1dlIGhhdmUgZGVzaWduZWQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHVzZSBpdCBmb3IgbWFudWFscyBmb3IgZnJlZSBzb2Z0d2FyZSwKKyBiZWNhdXNlIGZyZWUgc29mdHdhcmUgbmVlZHMgZnJlZSBkb2N1bWVudGF0aW9uOiBhIGZyZWUgcHJvZ3JhbSBzaG91bGQgY29tZQorIHdpdGggbWFudWFscyBwcm92aWRpbmcgdGhlIHNhbWUgZnJlZWRvbXMgdGhhdCB0aGUgc29mdHdhcmUgZG9lcy4KKyBCdXQgdGhpcyBMaWNlbnNlIGlzIG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIG1hbnVhbHM7IGl0IGNhbiBiZSB1c2VkIGZvcgorIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3Mgb2Ygc3ViamVjdCBtYXR0ZXIgb3Igd2hldGhlciBpdCBpcyBwdWJsaXNoZWQKKyBhcyBhIHByaW50ZWQgYm9vay4KKyBXZSByZWNvbW1lbmQgdGhpcyBMaWNlbnNlIHByaW5jaXBhbGx5IGZvciB3b3JrcyB3aG9zZSBwdXJwb3NlIGlzIGluc3RydWN0aW9uCisgb3IgcmVmZXJlbmNlLgorIAorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTZWN0aW9uKgorMS4KKyBBUFBMSUNBQklMSVRZIEFORCBERUZJTklUSU9OUworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrIHRoYXQgY29udGFpbnMgYSBub3RpY2UKKyBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IGNhbiBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKKyBvZiB0aGlzIExpY2Vuc2UuCisgVGhlICJEb2N1bWVudCIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggbWFudWFsIG9yIHdvcmsuCisgQW55IG1lbWJlciBvZiB0aGUgcHVibGljIGlzIGEgbGljZW5zZWUsIGFuZCBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitBICJNb2RpZmllZCBWZXJzaW9uIiBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYW55IHdvcmsgY29udGFpbmluZyB0aGUgRG9jdW1lbnQKKyBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciBjb3BpZWQgdmVyYmF0aW0sIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IKKyB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0EgIlNlY29uZGFyeSBTZWN0aW9uIiBpcyBhIG5hbWVkIGFwcGVuZGl4IG9yIGEgZnJvbnQtbWF0dGVyIHNlY3Rpb24gb2YgdGhlCisgRG9jdW1lbnQgdGhhdCBkZWFscyBleGNsdXNpdmVseSB3aXRoIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlIHB1Ymxpc2hlcnMKKyBvciBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgRG9jdW1lbnQncyBvdmVyYWxsIHN1YmplY3QgKG9yIHRvIHJlbGF0ZWQKKyBtYXR0ZXJzKSBhbmQgY29udGFpbnMgbm90aGluZyB0aGF0IGNvdWxkIGZhbGwgZGlyZWN0bHkgd2l0aGluIHRoYXQgb3ZlcmFsbAorIHN1YmplY3QuCisgKEZvciBleGFtcGxlLCBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gcGFydCBhIHRleHRib29rIG9mIG1hdGhlbWF0aWNzLCBhIFNlY29uZGFyeQorIFNlY3Rpb24gbWF5IG5vdCBleHBsYWluIGFueSBtYXRoZW1hdGljcy4pIFRoZSByZWxhdGlvbnNoaXAgY291bGQgYmUgYSBtYXR0ZXIKKyBvZiBoaXN0b3JpY2FsIGNvbm5lY3Rpb24gd2l0aCB0aGUgc3ViamVjdCBvciB3aXRoIHJlbGF0ZWQgbWF0dGVycywgb3Igb2YKKyBsZWdhbCwgY29tbWVyY2lhbCwgcGhpbG9zb3BoaWNhbCwgZXRoaWNhbCBvciBwb2xpdGljYWwgcG9zaXRpb24gcmVnYXJkaW5nCisgdGhlbS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoZSAiSW52YXJpYW50IFNlY3Rpb25zIiBhcmUgY2VydGFpbiBTZWNvbmRhcnkgU2VjdGlvbnMgd2hvc2UgdGl0bGVzIGFyZQorIGRlc2lnbmF0ZWQsIGFzIGJlaW5nIHRob3NlIG9mIEludmFyaWFudCBTZWN0aW9ucywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMKKyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitUaGUgIkNvdmVyIFRleHRzIiBhcmUgY2VydGFpbiBzaG9ydCBwYXNzYWdlcyBvZiB0ZXh0IHRoYXQgYXJlIGxpc3RlZCwgYXMKKyBGcm9udC1Db3ZlciBUZXh0cyBvciBCYWNrLUNvdmVyIFRleHRzLCBpbiB0aGUgbm90aWNlIHRoYXQgc2F5cyB0aGF0IHRoZQorIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0EgIlRyYW5zcGFyZW50IiBjb3B5IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSwgcmVwcmVzZW50ZWQKKyBpbiBhIGZvcm1hdCB3aG9zZSBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgZ2VuZXJhbCBwdWJsaWMsIHdob3NlCisgY29udGVudHMgY2FuIGJlIHZpZXdlZCBhbmQgZWRpdGVkIGRpcmVjdGx5IGFuZCBzdHJhaWdodGZvcndhcmRseSB3aXRoIGdlbmVyaWMKKyB0ZXh0IGVkaXRvcnMgb3IgKGZvciBpbWFnZXMgY29tcG9zZWQgb2YgcGl4ZWxzKSBnZW5lcmljIHBhaW50IHByb2dyYW1zCisgb3IgKGZvciBkcmF3aW5ncykgc29tZSB3aWRlbHkgYXZhaWxhYmxlIGRyYXdpbmcgZWRpdG9yLCBhbmQgdGhhdCBpcyBzdWl0YWJsZQorIGZvciBpbnB1dCB0byB0ZXh0IGZvcm1hdHRlcnMgb3IgZm9yIGF1dG9tYXRpYyB0cmFuc2xhdGlvbiB0byBhIHZhcmlldHkKKyBvZiBmb3JtYXRzIHN1aXRhYmxlIGZvciBpbnB1dCB0byB0ZXh0IGZvcm1hdHRlcnMuCisgQSBjb3B5IG1hZGUgaW4gYW4gb3RoZXJ3aXNlIFRyYW5zcGFyZW50IGZpbGUgZm9ybWF0IHdob3NlIG1hcmt1cCBoYXMgYmVlbgorIGRlc2lnbmVkIHRvIHRod2FydCBvciBkaXNjb3VyYWdlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIGJ5IHJlYWRlcnMgaXMKKyBub3QgVHJhbnNwYXJlbnQuCisgQSBjb3B5IHRoYXQgaXMgbm90ICJUcmFuc3BhcmVudCIgaXMgY2FsbGVkICJPcGFxdWUiLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorRXhhbXBsZXMgb2Ygc3VpdGFibGUgZm9ybWF0cyBmb3IgVHJhbnNwYXJlbnQgY29waWVzIGluY2x1ZGUgcGxhaW4gQVNDSUkKKyB3aXRob3V0IG1hcmt1cCwgVGV4aW5mbyBpbnB1dCBmb3JtYXQsIExhVGVYIGlucHV0IGZvcm1hdCwgU0dNTCBvciBYTUwgdXNpbmcKKyBhIHB1YmxpY2x5IGF2YWlsYWJsZSBEVEQsIGFuZCBzdGFuZGFyZC1jb25mb3JtaW5nIHNpbXBsZSBIVE1MIGRlc2lnbmVkCisgZm9yIGh1bWFuIG1vZGlmaWNhdGlvbi4KKyBPcGFxdWUgZm9ybWF0cyBpbmNsdWRlIFBvc3RTY3JpcHQsIFBERiwgcHJvcHJpZXRhcnkgZm9ybWF0cyB0aGF0IGNhbiBiZQorIHJlYWQgYW5kIGVkaXRlZCBvbmx5IGJ5IHByb3ByaWV0YXJ5IHdvcmQgcHJvY2Vzc29ycywgU0dNTCBvciBYTUwgZm9yIHdoaWNoCisgdGhlIERURCBhbmQvb3IgcHJvY2Vzc2luZyB0b29scyBhcmUgbm90IGdlbmVyYWxseSBhdmFpbGFibGUsIGFuZCB0aGUgbWFjaGluZS1nZQorbmVyYXRlZCBIVE1MIHByb2R1Y2VkIGJ5IHNvbWUgd29yZCBwcm9jZXNzb3JzIGZvciBvdXRwdXQgcHVycG9zZXMgb25seS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RoZSAiVGl0bGUgUGFnZSIgbWVhbnMsIGZvciBhIHByaW50ZWQgYm9vaywgdGhlIHRpdGxlIHBhZ2UgaXRzZWxmLCBwbHVzCisgc3VjaCBmb2xsb3dpbmcgcGFnZXMgYXMgYXJlIG5lZWRlZCB0byBob2xkLCBsZWdpYmx5LCB0aGUgbWF0ZXJpYWwgdGhpcworIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLgorIEZvciB3b3JrcyBpbiBmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZSBwYWdlIGFzIHN1Y2gsICJUaXRsZSBQYWdlIgorIG1lYW5zIHRoZSB0ZXh0IG5lYXIgdGhlIG1vc3QgcHJvbWluZW50IGFwcGVhcmFuY2Ugb2YgdGhlIHdvcmsncyB0aXRsZSwKKyBwcmVjZWRpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgYm9keSBvZiB0aGUgdGV4dC4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU2VjdGlvbioKKzIuCisgVkVSQkFUSU0gQ09QWUlORworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpbiBhbnkgbWVkaXVtLCBlaXRoZXIgY29tbWVyY2lhbGx5Cisgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlIGNvcHlyaWdodCBub3RpY2VzLAorIGFuZCB0aGUgbGljZW5zZSBub3RpY2Ugc2F5aW5nIHRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBEb2N1bWVudCBhcmUKKyByZXByb2R1Y2VkIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHlvdSBhZGQgbm8gb3RoZXIgY29uZGl0aW9ucyB3aGF0c29ldmVyCisgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIFlvdSBtYXkgbm90IHVzZSB0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IgY29udHJvbCB0aGUgcmVhZGluZyBvcgorIGZ1cnRoZXIgY29weWluZyBvZiB0aGUgY29waWVzIHlvdSBtYWtlIG9yIGRpc3RyaWJ1dGUuCisgSG93ZXZlciwgeW91IG1heSBhY2NlcHQgY29tcGVuc2F0aW9uIGluIGV4Y2hhbmdlIGZvciBjb3BpZXMuCisgSWYgeW91IGRpc3RyaWJ1dGUgYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9mIGNvcGllcyB5b3UgbXVzdCBhbHNvIGZvbGxvdworIHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1lvdSBtYXkgYWxzbyBsZW5kIGNvcGllcywgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBzdGF0ZWQgYWJvdmUsIGFuZCB5b3UKKyBtYXkgcHVibGljbHkgZGlzcGxheSBjb3BpZXMuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24qCiszLgorIENPUFlJTkcgSU4gUVVBTlRJVFkKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0lmIHlvdSBwdWJsaXNoIHByaW50ZWQgY29waWVzIG9mIHRoZSBEb2N1bWVudCBudW1iZXJpbmcgbW9yZSB0aGFuIDEwMCwgYW5kCisgdGhlIERvY3VtZW50J3MgbGljZW5zZSBub3RpY2UgcmVxdWlyZXMgQ292ZXIgVGV4dHMsIHlvdSBtdXN0IGVuY2xvc2UgdGhlCisgY29waWVzIGluIGNvdmVycyB0aGF0IGNhcnJ5LCBjbGVhcmx5IGFuZCBsZWdpYmx5LCBhbGwgdGhlc2UgQ292ZXIgVGV4dHM6CisgRnJvbnQtQ292ZXIgVGV4dHMgb24gdGhlIGZyb250IGNvdmVyLCBhbmQgQmFjay1Db3ZlciBUZXh0cyBvbiB0aGUgYmFjaworIGNvdmVyLgorIEJvdGggY292ZXJzIG11c3QgYWxzbyBjbGVhcmx5IGFuZCBsZWdpYmx5IGlkZW50aWZ5IHlvdSBhcyB0aGUgcHVibGlzaGVyCisgb2YgdGhlc2UgY29waWVzLgorIFRoZSBmcm9udCBjb3ZlciBtdXN0IHByZXNlbnQgdGhlIGZ1bGwgdGl0bGUgd2l0aCBhbGwgd29yZHMgb2YgdGhlIHRpdGxlCisgZXF1YWxseSBwcm9taW5lbnQgYW5kIHZpc2libGUuCisgWW91IG1heSBhZGQgb3RoZXIgbWF0ZXJpYWwgb24gdGhlIGNvdmVycyBpbiBhZGRpdGlvbi4KKyBDb3B5aW5nIHdpdGggY2hhbmdlcyBsaW1pdGVkIHRvIHRoZSBjb3ZlcnMsIGFzIGxvbmcgYXMgdGhleSBwcmVzZXJ2ZSB0aGUKKyB0aXRsZSBvZiB0aGUgRG9jdW1lbnQgYW5kIHNhdGlzZnkgdGhlc2UgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQgYXMgdmVyYmF0aW0KKyBjb3B5aW5nIGluIG90aGVyIHJlc3BlY3RzLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorSWYgdGhlIHJlcXVpcmVkIHRleHRzIGZvciBlaXRoZXIgY292ZXIgYXJlIHRvbyB2b2x1bWlub3VzIHRvIGZpdCBsZWdpYmx5LAorIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQgcmVhc29uYWJseSkgb24gdGhlCisgYWN0dWFsIGNvdmVyLCBhbmQgY29udGludWUgdGhlIHJlc3Qgb250byBhZGphY2VudCBwYWdlcy4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0lmIHlvdSBwdWJsaXNoIG9yIGRpc3RyaWJ1dGUgT3BhcXVlIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQgbnVtYmVyaW5nIG1vcmUKKyB0aGFuIDEwMCwgeW91IG11c3QgZWl0aGVyIGluY2x1ZGUgYSBtYWNoaW5lLXJlYWRhYmxlIFRyYW5zcGFyZW50IGNvcHkgYWxvbmcKKyB3aXRoIGVhY2ggT3BhcXVlIGNvcHksIG9yIHN0YXRlIGluIG9yIHdpdGggZWFjaCBPcGFxdWUgY29weSBhIHB1YmxpY2x5LWFjY2Vzc2liCitsZSBjb21wdXRlci1uZXR3b3JrIGxvY2F0aW9uIGNvbnRhaW5pbmcgYSBjb21wbGV0ZSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZQorIERvY3VtZW50LCBmcmVlIG9mIGFkZGVkIG1hdGVyaWFsLCB3aGljaCB0aGUgZ2VuZXJhbCBuZXR3b3JrLXVzaW5nIHB1YmxpYworIGhhcyBhY2Nlc3MgdG8gZG93bmxvYWQgYW5vbnltb3VzbHkgYXQgbm8gY2hhcmdlIHVzaW5nIHB1YmxpYy1zdGFuZGFyZCBuZXR3b3JrCisgcHJvdG9jb2xzLgorIElmIHlvdSB1c2UgdGhlIGxhdHRlciBvcHRpb24sIHlvdSBtdXN0IHRha2UgcmVhc29uYWJseSBwcnVkZW50IHN0ZXBzLCB3aGVuCisgeW91IGJlZ2luIGRpc3RyaWJ1dGlvbiBvZiBPcGFxdWUgY29waWVzIGluIHF1YW50aXR5LCB0byBlbnN1cmUgdGhhdCB0aGlzCisgVHJhbnNwYXJlbnQgY29weSB3aWxsIHJlbWFpbiB0aHVzIGFjY2Vzc2libGUgYXQgdGhlIHN0YXRlZCBsb2NhdGlvbiB1bnRpbAorIGF0IGxlYXN0IG9uZSB5ZWFyIGFmdGVyIHRoZSBsYXN0IHRpbWUgeW91IGRpc3RyaWJ1dGUgYW4gT3BhcXVlIGNvcHkgKGRpcmVjdGx5Cisgb3IgdGhyb3VnaCB5b3VyIGFnZW50cyBvciByZXRhaWxlcnMpIG9mIHRoYXQgZWRpdGlvbiB0byB0aGUgcHVibGljLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorSXQgaXMgcmVxdWVzdGVkLCBidXQgbm90IHJlcXVpcmVkLCB0aGF0IHlvdSBjb250YWN0IHRoZSBhdXRob3JzIG9mIHRoZSBEb2N1bWVudAorIHdlbGwgYmVmb3JlIHJlZGlzdHJpYnV0aW5nIGFueSBsYXJnZSBudW1iZXIgb2YgY29waWVzLCB0byBnaXZlIHRoZW0gYSBjaGFuY2UKKyB0byBwcm92aWRlIHlvdSB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQuCisgCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24qCis0LgorIE1PRElGSUNBVElPTlMKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZQorIGNvbmRpdGlvbnMgb2Ygc2VjdGlvbnMgMiBhbmQgMyBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgcmVsZWFzZSB0aGUgTW9kaWZpZWQKKyBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGggdGhlIE1vZGlmaWVkIFZlcnNpb24gZmlsbGluZworIHRoZSByb2xlIG9mIHRoZSBEb2N1bWVudCwgdGh1cyBsaWNlbnNpbmcgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24KKyBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiB0byB3aG9ldmVyIHBvc3Nlc3NlcyBhIGNvcHkgb2YgaXQuCisgSW4gYWRkaXRpb24sIHlvdSBtdXN0IGRvIHRoZXNlIHRoaW5ncyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbjogCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEl0ZW1pemUKK0EuCisgVXNlIGluIHRoZSBUaXRsZSBQYWdlIChhbmQgb24gdGhlIGNvdmVycywgaWYgYW55KSBhIHRpdGxlIGRpc3RpbmN0IGZyb20KKyB0aGF0IG9mIHRoZSBEb2N1bWVudCwgYW5kIGZyb20gdGhvc2Ugb2YgcHJldmlvdXMgdmVyc2lvbnMgKHdoaWNoIHNob3VsZCwKKyBpZiB0aGVyZSB3ZXJlIGFueSwgYmUgbGlzdGVkIGluIHRoZSBIaXN0b3J5IHNlY3Rpb24gb2YgdGhlIERvY3VtZW50KS4KKyBZb3UgbWF5IHVzZSB0aGUgc2FtZSB0aXRsZSBhcyBhIHByZXZpb3VzIHZlcnNpb24gaWYgdGhlIG9yaWdpbmFsIHB1Ymxpc2hlcgorIG9mIHRoYXQgdmVyc2lvbiBnaXZlcyBwZXJtaXNzaW9uLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBJdGVtaXplCitCLgorIExpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IgZW50aXRpZXMgcmVzcG9uc2libGUKKyBmb3IgYXV0aG9yc2hpcCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbiwgdG9nZXRoZXIgd2l0aAorIGF0IGxlYXN0IGZpdmUgb2YgdGhlIHByaW5jaXBhbCBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCAoYWxsIG9mIGl0cyBwcmluY2lwYWwKKyBhdXRob3JzLCBpZiBpdCBoYXMgbGVzcyB0aGFuIGZpdmUpLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBJdGVtaXplCitDLgorIFN0YXRlIG9uIHRoZSBUaXRsZSBwYWdlIHRoZSBuYW1lIG9mIHRoZSBwdWJsaXNoZXIgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24sCisgYXMgdGhlIHB1Ymxpc2hlci4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgSXRlbWl6ZQorRC4KKyBQcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgSXRlbWl6ZQorRS4KKyBBZGQgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBmb3IgeW91ciBtb2RpZmljYXRpb25zIGFkamFjZW50IHRvCisgdGhlIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBJdGVtaXplCitGLgorIEluY2x1ZGUsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5cmlnaHQgbm90aWNlcywgYSBsaWNlbnNlIG5vdGljZSBnaXZpbmcKKyB0aGUgcHVibGljIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCisgTGljZW5zZSwgaW4gdGhlIGZvcm0gc2hvd24gaW4gdGhlIEFkZGVuZHVtIGJlbG93LgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBJdGVtaXplCitHLgorIFByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50IFNlY3Rpb25zIGFuZAorIHJlcXVpcmVkIENvdmVyIFRleHRzIGdpdmVuIGluIHRoZSBEb2N1bWVudCdzIGxpY2Vuc2Ugbm90aWNlLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBJdGVtaXplCitILgorIEluY2x1ZGUgYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhpcyBMaWNlbnNlLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBJdGVtaXplCitJLgorIFByZXNlcnZlIHRoZSBzZWN0aW9uIGVudGl0bGVkICJIaXN0b3J5IiwgYW5kIGl0cyB0aXRsZSwgYW5kIGFkZCB0byBpdCBhbgorIGl0ZW0gc3RhdGluZyBhdCBsZWFzdCB0aGUgdGl0bGUsIHllYXIsIG5ldyBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZQorIE1vZGlmaWVkIFZlcnNpb24gYXMgZ2l2ZW4gb24gdGhlIFRpdGxlIFBhZ2UuCisgSWYgdGhlcmUgaXMgbm8gc2VjdGlvbiBlbnRpdGxlZCAiSGlzdG9yeSIgaW4gdGhlIERvY3VtZW50LCBjcmVhdGUgb25lIHN0YXRpbmcKKyB0aGUgdGl0bGUsIHllYXIsIGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlIERvY3VtZW50IGFzIGdpdmVuIG9uIGl0cworIFRpdGxlIFBhZ2UsIHRoZW4gYWRkIGFuIGl0ZW0gZGVzY3JpYmluZyB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhcyBzdGF0ZWQKKyBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2UuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEl0ZW1pemUKK0ouCisgUHJlc2VydmUgdGhlIG5ldHdvcmsgbG9jYXRpb24sIGlmIGFueSwgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwdWJsaWMKKyBhY2Nlc3MgdG8gYSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgYW5kIGxpa2V3aXNlIHRoZSBuZXR3b3JrCisgbG9jYXRpb25zIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IgcHJldmlvdXMgdmVyc2lvbnMgaXQgd2FzIGJhc2VkIG9uLgorIFRoZXNlIG1heSBiZSBwbGFjZWQgaW4gdGhlICJIaXN0b3J5IiBzZWN0aW9uLgorIFlvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0IHdhcyBwdWJsaXNoZWQgYXQgbGVhc3QKKyBmb3VyIHllYXJzIGJlZm9yZSB0aGUgRG9jdW1lbnQgaXRzZWxmLCBvciBpZiB0aGUgb3JpZ2luYWwgcHVibGlzaGVyIG9mCisgdGhlIHZlcnNpb24gaXQgcmVmZXJzIHRvIGdpdmVzIHBlcm1pc3Npb24uCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEl0ZW1pemUKK0suCisgSW4gYW55IHNlY3Rpb24gZW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiIG9yICJEZWRpY2F0aW9ucyIsIHByZXNlcnZlIHRoZQorIHNlY3Rpb24ncyB0aXRsZSwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbCB0aGUgc3Vic3RhbmNlIGFuZCB0b25lCisgb2YgZWFjaCBvZiB0aGUgY29udHJpYnV0b3IgYWNrbm93bGVkZ2VtZW50cyBhbmQvb3IgZGVkaWNhdGlvbnMgZ2l2ZW4gdGhlcmVpbi4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgSXRlbWl6ZQorTC4KKyBQcmVzZXJ2ZSBhbGwgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiB0aGUgRG9jdW1lbnQsIHVuYWx0ZXJlZCBpbiB0aGVpcgorIHRleHQgYW5kIGluIHRoZWlyIHRpdGxlcy4KKyBTZWN0aW9uIG51bWJlcnMgb3IgdGhlIGVxdWl2YWxlbnQgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNlY3Rpb24KKyB0aXRsZXMuCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEl0ZW1pemUKK00uCisgRGVsZXRlIGFueSBzZWN0aW9uIGVudGl0bGVkICJFbmRvcnNlbWVudHMiLgorIFN1Y2ggYSBzZWN0aW9uIG1heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IEl0ZW1pemUKK04uCisgRG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNlY3Rpb24gYXMgIkVuZG9yc2VtZW50cyIgb3IgdG8gY29uZmxpY3QgaW4KKyB0aXRsZSB3aXRoIGFueSBJbnZhcmlhbnQgU2VjdGlvbi4KKyAKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0lmIHRoZSBNb2RpZmllZCBWZXJzaW9uIGluY2x1ZGVzIG5ldyBmcm9udC1tYXR0ZXIgc2VjdGlvbnMgb3IgYXBwZW5kaWNlcworIHRoYXQgcXVhbGlmeSBhcyBTZWNvbmRhcnkgU2VjdGlvbnMgYW5kIGNvbnRhaW4gbm8gbWF0ZXJpYWwgY29waWVkIGZyb20KKyB0aGUgRG9jdW1lbnQsIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gZGVzaWduYXRlIHNvbWUgb3IgYWxsIG9mIHRoZXNlIHNlY3Rpb25zCisgYXMgaW52YXJpYW50LgorIFRvIGRvIHRoaXMsIGFkZCB0aGVpciB0aXRsZXMgdG8gdGhlIGxpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBNb2RpZmllZAorIFZlcnNpb24ncyBsaWNlbnNlIG5vdGljZS4KKyBUaGVzZSB0aXRsZXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9tIGFueSBvdGhlciBzZWN0aW9uIHRpdGxlcy4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1lvdSBtYXkgYWRkIGEgc2VjdGlvbiBlbnRpdGxlZCAiRW5kb3JzZW1lbnRzIiwgcHJvdmlkZWQgaXQgY29udGFpbnMgbm90aGluZworIGJ1dCBlbmRvcnNlbWVudHMgb2YgeW91ciBNb2RpZmllZCBWZXJzaW9uIGJ5IHZhcmlvdXMgcGFydGllcy0tZm9yIGV4YW1wbGUsCisgc3RhdGVtZW50cyBvZiBwZWVyIHJldmlldyBvciB0aGF0IHRoZSB0ZXh0IGhhcyBiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbgorIGFzIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24gb2YgYSBzdGFuZGFyZC4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1lvdSBtYXkgYWRkIGEgcGFzc2FnZSBvZiB1cCB0byBmaXZlIHdvcmRzIGFzIGEgRnJvbnQtQ292ZXIgVGV4dCwgYW5kIGEgcGFzc2FnZQorIG9mIHVwIHRvIDI1IHdvcmRzIGFzIGEgQmFjay1Db3ZlciBUZXh0LCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IG9mIENvdmVyCisgVGV4dHMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uCisgT25seSBvbmUgcGFzc2FnZSBvZiBGcm9udC1Db3ZlciBUZXh0IGFuZCBvbmUgb2YgQmFjay1Db3ZlciBUZXh0IG1heSBiZQorIGFkZGVkIGJ5IChvciB0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4KKyBJZiB0aGUgRG9jdW1lbnQgYWxyZWFkeSBpbmNsdWRlcyBhIGNvdmVyIHRleHQgZm9yIHRoZSBzYW1lIGNvdmVyLCBwcmV2aW91c2x5CisgYWRkZWQgYnkgeW91IG9yIGJ5IGFycmFuZ2VtZW50IG1hZGUgYnkgdGhlIHNhbWUgZW50aXR5IHlvdSBhcmUgYWN0aW5nIG9uCisgYmVoYWxmIG9mLCB5b3UgbWF5IG5vdCBhZGQgYW5vdGhlcjsgYnV0IHlvdSBtYXkgcmVwbGFjZSB0aGUgb2xkIG9uZSwgb24KKyBleHBsaWNpdCBwZXJtaXNzaW9uIGZyb20gdGhlIHByZXZpb3VzIHB1Ymxpc2hlciB0aGF0IGFkZGVkIHRoZSBvbGQgb25lLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlIGF1dGhvcihzKSBhbmQgcHVibGlzaGVyKHMpIG9mIHRoZSBEb2N1bWVudCBkbyBub3QgYnkgdGhpcyBMaWNlbnNlIGdpdmUKKyBwZXJtaXNzaW9uIHRvIHVzZSB0aGVpciBuYW1lcyBmb3IgcHVibGljaXR5IGZvciBvciB0byBhc3NlcnQgb3IgaW1wbHkgZW5kb3JzZW1lCitudCBvZiBhbnkgTW9kaWZpZWQgVmVyc2lvbi4KKyAKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU2VjdGlvbioKKzUuCisgQ09NQklOSU5HIERPQ1VNRU5UUworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorWW91IG1heSBjb21iaW5lIHRoZSBEb2N1bWVudCB3aXRoIG90aGVyIGRvY3VtZW50cyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UsCisgdW5kZXIgdGhlIHRlcm1zIGRlZmluZWQgaW4gc2VjdGlvbiA0IGFib3ZlIGZvciBtb2RpZmllZCB2ZXJzaW9ucywgcHJvdmlkZWQKKyB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb21iaW5hdGlvbiBhbGwgb2YgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiBhbGwKKyBvZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnRzLCB1bm1vZGlmaWVkLCBhbmQgbGlzdCB0aGVtIGFsbCBhcyBJbnZhcmlhbnQgU2VjdGlvbnMKKyBvZiB5b3VyIGNvbWJpbmVkIHdvcmsgaW4gaXRzIGxpY2Vuc2Ugbm90aWNlLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlIGNvbWJpbmVkIHdvcmsgbmVlZCBvbmx5IGNvbnRhaW4gb25lIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBhbmQgbXVsdGlwbGUKKyBpZGVudGljYWwgSW52YXJpYW50IFNlY3Rpb25zIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIGNvcHkuCisgSWYgdGhlcmUgYXJlIG11bHRpcGxlIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0IGRpZmZlcmVudAorIGNvbnRlbnRzLCBtYWtlIHRoZSB0aXRsZSBvZiBlYWNoIHN1Y2ggc2VjdGlvbiB1bmlxdWUgYnkgYWRkaW5nIGF0IHRoZSBlbmQKKyBvZiBpdCwgaW4gcGFyZW50aGVzZXMsIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBhdXRob3Igb3IgcHVibGlzaGVyIG9mCisgdGhhdCBzZWN0aW9uIGlmIGtub3duLCBvciBlbHNlIGEgdW5pcXVlIG51bWJlci4KKyBNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluIHRoZSBsaXN0IG9mIEludmFyaWFudAorIFNlY3Rpb25zIGluIHRoZSBsaWNlbnNlIG5vdGljZSBvZiB0aGUgY29tYmluZWQgd29yay4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK0luIHRoZSBjb21iaW5hdGlvbiwgeW91IG11c3QgY29tYmluZSBhbnkgc2VjdGlvbnMgZW50aXRsZWQgIkhpc3RvcnkiIGluCisgdGhlIHZhcmlvdXMgb3JpZ2luYWwgZG9jdW1lbnRzLCBmb3JtaW5nIG9uZSBzZWN0aW9uIGVudGl0bGVkICJIaXN0b3J5IjsKKyBsaWtld2lzZSBjb21iaW5lIGFueSBzZWN0aW9ucyBlbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsIGFuZCBhbnkgc2VjdGlvbnMKKyBlbnRpdGxlZCAiRGVkaWNhdGlvbnMiLgorIFlvdSBtdXN0IGRlbGV0ZSBhbGwgc2VjdGlvbnMgZW50aXRsZWQgIkVuZG9yc2VtZW50cy4iCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24qCis2LgorIENPTExFQ1RJT05TIE9GIERPQ1VNRU5UUworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorWW91IG1heSBtYWtlIGEgY29sbGVjdGlvbiBjb25zaXN0aW5nIG9mIHRoZSBEb2N1bWVudCBhbmQgb3RoZXIgZG9jdW1lbnRzCisgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhpcworIExpY2Vuc2UgaW4gdGhlIHZhcmlvdXMgZG9jdW1lbnRzIHdpdGggYSBzaW5nbGUgY29weSB0aGF0IGlzIGluY2x1ZGVkIGluCisgdGhlIGNvbGxlY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGZvbGxvdyB0aGUgcnVsZXMgb2YgdGhpcyBMaWNlbnNlIGZvcgorIHZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1lvdSBtYXkgZXh0cmFjdCBhIHNpbmdsZSBkb2N1bWVudCBmcm9tIHN1Y2ggYSBjb2xsZWN0aW9uLCBhbmQgZGlzdHJpYnV0ZQorIGl0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYSBjb3B5IG9mIHRoaXMKKyBMaWNlbnNlIGludG8gdGhlIGV4dHJhY3RlZCBkb2N1bWVudCwgYW5kIGZvbGxvdyB0aGlzIExpY2Vuc2UgaW4gYWxsIG90aGVyCisgcmVzcGVjdHMgcmVnYXJkaW5nIHZlcmJhdGltIGNvcHlpbmcgb2YgdGhhdCBkb2N1bWVudC4KKyAKK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU2VjdGlvbioKKzcuCisgQUdHUkVHQVRJT04gV0lUSCBJTkRFUEVOREVOVCBXT1JLUworXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorQSBjb21waWxhdGlvbiBvZiB0aGUgRG9jdW1lbnQgb3IgaXRzIGRlcml2YXRpdmVzIHdpdGggb3RoZXIgc2VwYXJhdGUgYW5kCisgaW5kZXBlbmRlbnQgZG9jdW1lbnRzIG9yIHdvcmtzLCBpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uCisgbWVkaXVtLCBkb2VzIG5vdCBhcyBhIHdob2xlIGNvdW50IGFzIGEgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQsCisgcHJvdmlkZWQgbm8gY29tcGlsYXRpb24gY29weXJpZ2h0IGlzIGNsYWltZWQgZm9yIHRoZSBjb21waWxhdGlvbi4KKyBTdWNoIGEgY29tcGlsYXRpb24gaXMgY2FsbGVkIGFuICJhZ2dyZWdhdGUiLCBhbmQgdGhpcyBMaWNlbnNlIGRvZXMgbm90CisgYXBwbHkgdG8gdGhlIG90aGVyIHNlbGYtY29udGFpbmVkIHdvcmtzIHRodXMgY29tcGlsZWQgd2l0aCB0aGUgRG9jdW1lbnQsCisgb24gYWNjb3VudCBvZiB0aGVpciBiZWluZyB0aHVzIGNvbXBpbGVkLCBpZiB0aGV5IGFyZSBub3QgdGhlbXNlbHZlcyBkZXJpdmF0aXZlCisgd29ya3Mgb2YgdGhlIERvY3VtZW50LgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorSWYgdGhlIENvdmVyIFRleHQgcmVxdWlyZW1lbnQgb2Ygc2VjdGlvbiAzIGlzIGFwcGxpY2FibGUgdG8gdGhlc2UgY29waWVzCisgb2YgdGhlIERvY3VtZW50LCB0aGVuIGlmIHRoZSBEb2N1bWVudCBpcyBsZXNzIHRoYW4gb25lIHF1YXJ0ZXIgb2YgdGhlIGVudGlyZQorIGFnZ3JlZ2F0ZSwgdGhlIERvY3VtZW50J3MgQ292ZXIgVGV4dHMgbWF5IGJlIHBsYWNlZCBvbiBjb3ZlcnMgdGhhdCBzdXJyb3VuZAorIG9ubHkgdGhlIERvY3VtZW50IHdpdGhpbiB0aGUgYWdncmVnYXRlLgorIE90aGVyd2lzZSB0aGV5IG11c3QgYXBwZWFyIG9uIGNvdmVycyBhcm91bmQgdGhlIHdob2xlIGFnZ3JlZ2F0ZS4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU2VjdGlvbioKKzguCisgVFJBTlNMQVRJT04KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1RyYW5zbGF0aW9uIGlzIGNvbnNpZGVyZWQgYSBraW5kIG9mIG1vZGlmaWNhdGlvbiwgc28geW91IG1heSBkaXN0cmlidXRlCisgdHJhbnNsYXRpb25zIG9mIHRoZSBEb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbiA0LgorIFJlcGxhY2luZyBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbCBwZXJtaXNzaW9uCisgZnJvbSB0aGVpciBjb3B5cmlnaHQgaG9sZGVycywgYnV0IHlvdSBtYXkgaW5jbHVkZSB0cmFuc2xhdGlvbnMgb2Ygc29tZQorIG9yIGFsbCBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlIG9yaWdpbmFsIHZlcnNpb25zIG9mIHRoZXNlCisgSW52YXJpYW50IFNlY3Rpb25zLgorIFlvdSBtYXkgaW5jbHVkZSBhIHRyYW5zbGF0aW9uIG9mIHRoaXMgTGljZW5zZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGluY2x1ZGUKKyB0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZS4KKyBJbiBjYXNlIG9mIGEgZGlzYWdyZWVtZW50IGJldHdlZW4gdGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgRW5nbGlzaAorIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIHdpbGwgcHJldmFpbC4KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU2VjdGlvbioKKzkuCisgVEVSTUlOQVRJT04KK1xlbmRfbGF5b3V0CisKK1xiZWdpbl9sYXlvdXQgU3RhbmRhcmQKK1lvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgZXhjZXB0CisgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGZvciB1bmRlciB0aGlzIExpY2Vuc2UuCisgQW55IG90aGVyIGF0dGVtcHQgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50CisgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMKKyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcworIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisgCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFNlY3Rpb24qCisxMC4KKyBGVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRQorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCBuZXcsIHJldmlzZWQgdmVyc2lvbnMgb2YgdGhlIEdOVQorIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLgorIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0CisgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisgU2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC8uCitcZW5kX2xheW91dAorCitcYmVnaW5fbGF5b3V0IFN0YW5kYXJkCitFYWNoIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKyBJZiB0aGUgRG9jdW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBwYXJ0aWN1bGFyIG51bWJlcmVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlCisgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZworIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBzcGVjaWZpZWQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIKKyB2ZXJzaW9uIHRoYXQgaGFzIGJlZW4gcHVibGlzaGVkIChub3QgYXMgYSBkcmFmdCkgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvCituLgorIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UKKyBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIChub3QgYXMgYSBkcmFmdCkgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyBGb3VuZGF0aW9uLgorXGVuZF9sYXlvdXQKKworXGJlZ2luX2xheW91dCBTdGFuZGFyZAorXGJlZ2luX2luc2V0IExhdGV4Q29tbWFuZCBccHJpbnRpbmRleHt9CisKK1xlbmRfaW5zZXQKKworCitcZW5kX2xheW91dAorCitcZW5kX2JvZHkKK1xlbmRfZG9jdW1lbnQKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2RvYy9tYW51YWwucGRmIGIvM3JkcGFydHkvc3BlZXgvZG9jL21hbnVhbC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM3NzM0MQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2RvYy9tYW51YWwucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2RvYy9wcm9ncmFtbWluZy5odG1sIGIvM3JkcGFydHkvc3BlZXgvZG9jL3Byb2dyYW1taW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I1YmM3YQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2RvYy9wcm9ncmFtbWluZy5odG1sCkBAIC0wLDAgKzEsMTI1IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+CisgIDx0aXRsZT5TcGVleCBQcm9ncmFtbWluZzwvdGl0bGU+CisgICAgICAKKyAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIgorIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzwvaGVhZD4KKyAgPGJvZHk+CisgCis8ZGl2IGFsaWduPSJjZW50ZXIiPiAKKzxoMT5TcGVleCBQcm9ncmFtbWluZzwvaDE+CisgCis8ZGl2IGFsaWduPSJsZWZ0Ij4gCis8aDI+RW5jb2Rpbmc8L2gyPgorIEluIG9yZGVyIHRvIGVuY29kZSBzcGVlY2ggdXNpbmcgU3BlZXgsIHlvdSBmaXJzdCBuZWVkIHRvOjxicj4KKyAKKzxibG9ja3F1b3RlPiAgIAorICA8cHJlPjxiaWc+I2luY2x1ZGUgJmx0O3NwZWV4LmgmZ3Q7PC9iaWc+PC9wcmU+CisgPC9ibG9ja3F1b3RlPgorIFlvdSB0aGVuIG5lZWQgdG8gZGVjbGFyZSBhIFNwZWV4IGJpdC1wYWNraW5nIHN0cnVjdDxicj4KKyAKKzxibG9ja3F1b3RlPiAgIAorICA8cHJlPjxiaWc+U3BlZXhCaXRzIGJpdHM7PC9iaWc+PC9wcmU+CisgPC9ibG9ja3F1b3RlPgorIGFuZCBhIFNwZWV4IGVuY29kZXIgc3RhdGU8YnI+CisgCis8YmxvY2txdW90ZT4gICAKKyAgPHByZT48YmlnPnZvaWQgKmVuY19zdGF0ZTs8L2JpZz48L3ByZT4KKyA8L2Jsb2NrcXVvdGU+CisgVGhlIHR3byBhcmUgaW5pdGlhbGl6ZWQgYnk6PGJyPgorIAorPGJsb2NrcXVvdGU+ICAgCisgIDxwcmU+PGJpZz5zcGVleF9iaXRzX2luaXQoJmFtcDtiaXRzKTs8L2JpZz48L3ByZT4KKyAgIAorICA8cHJlPjxiaWc+ZW5jX3N0YXRlID0gc3BlZXhfZW5jb2Rlcl9pbml0KCZhbXA7c3BlZXhfbmJfbW9kZSk7PC9iaWc+PC9wcmU+CisgPC9ibG9ja3F1b3RlPgorIEZvciB3aWRlYmFuZCBjb2RpbmcsIDxpPnNwZWV4X25iX21vZGU8L2k+IHdpbGwgYmUgcmVwbGFjZWQgYnkgPGk+c3BlZXhfd2JfbW9kZTwvaT4KKy4gSW4gbW9zdCBjYXNlcywgeW91IHdpbGwgbmVlZCB0byBrbm93IHRoZSBmcmFtZSBzaXplIHVzZWQgYnkgdGhlIG1vZGUgeW91CithcmUgdXNpbmcuIFlvdSBjYW4gZ2V0IHRoYXQgdmFsdWUgaW4gdGhlIDxpPmZyYW1lX3NpemU8L2k+IHZhcmlhYmxlIHdpdGg6PGJyPgorPGJsb2NrcXVvdGU+PGJpZz48dHQ+c3BlZXhfZW5jb2Rlcl9jdGwoZW5jX3N0YXRlLCBTUEVFWF9HRVRfRlJBTUVfU0laRSwgJmFtcDtmcmFtZV9zaXplKTs8L3R0PjwvYmlnPjxicj4KKzwvYmxvY2txdW90ZT4KKyBGb3IgZXZlcnkgaW5wdXQgZnJhbWU6PGJyPgorIAorPGJsb2NrcXVvdGU+ICAgCisgIDxwcmU+PGJpZz5zcGVleF9iaXRzX3Jlc2V0KCZhbXA7Yml0cyk7PC9iaWc+PC9wcmU+CisgICAKKyAgPHByZT48YmlnPnNwZWV4X2VuY29kZShlbmNfc3RhdGUsIGlucHV0X2ZyYW1lLCAmYW1wO2JpdHMpOzwvYmlnPjwvcHJlPgorICAgCisgIDxwcmU+PGJpZz5uYkJ5dGVzID0gc3BlZXhfYml0c193cml0ZSgmYW1wO2JpdHMsIGJ5dGVfcHRyLCBNQVhfTkJfQllURVMpOzwvYmlnPjwvcHJlPgorIDwvYmxvY2txdW90ZT4KKyB3aGVyZSA8aT5pbnB1dF9mcmFtZTwvaT4gaXMgYSA8aT4oZmxvYXQgKik8L2k+IHBvaW50aW5nIHRvIHRoZSBiZWdpbm5pbmcgCitvZiBhIHNwZWVjaCBmcmFtZSwgYnl0ZV9wdHIgaXMgYSA8aT4oY2hhciAqKTwvaT4gd2hlcmUgdGhlIGVuY29kZWQgZnJhbWUgd2lsbAorYmUgd3JpdHRlbiwgPGk+TUFYX05CX0JZVEVTPC9pPiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4gYmUKK3dyaXR0ZW4gdG8gPGk+Ynl0ZV9wdHI8L2k+IHdpdGhvdXQgY2F1c2luZyBhbiBvdmVyZmxvdyBhbmQgPGk+bmJCeXRlczwvaT4KKyAgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuIHRvIDxpPmJ5dGVfcHRyPC9pPiAodGhlIGVuY29kZWQgCitzaXplIGluIGJ5dGVzKS48YnI+CisgPGJyPgorIEFmdGVyIHlvdSdyZSBkb25lIHdpdGggdGhlIGVuY29kaW5nLCBmcmVlIGFsbCByZXNvdXJjZXMgd2l0aDo8YnI+CisgCis8YmxvY2txdW90ZT4gICAKKyAgPHByZT48YmlnPnNwZWV4X2JpdHNfZGVzdHJveSgmYW1wO2JpdHMpOzwvYmlnPjwvcHJlPgorICAgCisgIDxwcmU+PGJpZz5zcGVleF9lbmNvZGVyX2Rlc3Ryb3koJmFtcDtlbmNfc3RhdGUpOzwvYmlnPjwvcHJlPgorIDwvYmxvY2txdW90ZT4KKyBUaGF0J3MgYWJvdXQgaXQgZm9yIHRoZSBlbmNvZGVyLjxicj4KKyAKKzxoMj5EZWNvZGluZzwvaDI+CisgSW4gb3JkZXIgdG8gZW5jb2RlIHNwZWVjaCB1c2luZyBTcGVleCwgeW91IGZpcnN0IG5lZWQgdG86PGJyPgorICAgCis8YmxvY2txdW90ZT4gICAgICAKKyAgPHByZT48YmlnPiNpbmNsdWRlICZsdDtzcGVleC5oJmd0OzwvYmlnPjwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisgIFlvdSB0aGVuIG5lZWQgdG8gZGVjbGFyZSBhIFNwZWV4IGJpdC1wYWNraW5nIHN0cnVjdDxicj4KKyAgIAorPGJsb2NrcXVvdGU+ICAgICAgCisgIDxwcmU+PGJpZz5TcGVleEJpdHMgYml0czs8L2JpZz48L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorICBhbmQgYSBTcGVleCBlbmNvZGVyIHN0YXRlPGJyPgorICAgCis8YmxvY2txdW90ZT4gICAgICAKKyAgPHByZT48YmlnPnZvaWQgKmRlY19zdGF0ZTs8L2JpZz48L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorICBUaGUgdHdvIGFyZSBpbml0aWFsaXplZCBieTo8YnI+CisgICAKKzxibG9ja3F1b3RlPiAgICAgIAorICA8cHJlPjxiaWc+c3BlZXhfYml0c19pbml0KCZhbXA7Yml0cyk7PC9iaWc+PC9wcmU+CisgICAgICAgCisgIDxwcmU+PGJpZz5kZWNfc3RhdGUgPSBzcGVleF9kZWNvZGVyX2luaXQoJmFtcDtzcGVleF9uYl9tb2RlKTs8L2JpZz48L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorICBGb3Igd2lkZWJhbmQgZGVjb2RpbmcsIDxpPnNwZWV4X25iX21vZGU8L2k+IHdpbGwgYmUgcmVwbGFjZWQgYnkgPGk+c3BlZXhfd2JfbW9kZTwvaT4KKy4gWW91IGNhbiBnZXQgdGhhdCB2YWx1ZSBpbiB0aGUgPGk+ZnJhbWVfc2l6ZTwvaT4gdmFyaWFibGUgd2l0aDo8YnI+CisgCis8YmxvY2txdW90ZT48YmlnPjx0dD5zcGVleF9kZWNvZGVyX2N0bChkZWNfc3RhdGUsIFNQRUVYX0dFVF9GUkFNRV9TSVpFLCAmYW1wO2ZyYW1lX3NpemUpOzwvdHQ+PC9iaWc+PGJyPgorPC9ibG9ja3F1b3RlPgorICBUaGVyZSBpcyBhbHNvIGEgcGFyYW1ldGVyIHRoYXQgY2FuIGJlIHNldCBmb3IgdGhlIGRlY29kZXI6IHdoZXRoZXIgb3Igbm90Cit0byB1c2UgYSBwZXJjZXB0dWFsIHBvc3QtZmlsdGVyLiBUaGlzIGNhbiBiZSBzZXQgYnk6PGJyPgorPGJsb2NrcXVvdGU+PGJpZz48dHQ+c3BlZXhfZGVjb2Rlcl9jdGwoZGVjX3N0YXRlLCBTUEVFWF9TRVRfUEYsICZhbXA7cGYpOzwvdHQ+PC9iaWc+PGJyPgorPC9ibG9ja3F1b3RlPgord2hlcmUgPGk+cGY8L2k+IGlzIGFuIDxpPmludDwvaT4gdGhhdCB3aXRoIHZhbHVlIDAgdG8gaGF2ZSB0aGUgcG9zdC1maWx0ZXIKK2Rpc2FibGVkIGFuZCAxIHRvIGhhdmUgaXQgZW5hYmxlZC48YnI+Cis8YnI+CitGb3IgZXZlcnkgaW5wdXQgZnJhbWU6PGJyPgorICAgICAgIAorPGJsb2NrcXVvdGU+ICAgCisgIDxwcmU+PGJpZz5zcGVleF9iaXRzX3JlYWRfZnJvbSgmYW1wO2JpdHMsIGlucHV0X2J5dGVzLCBuYkJ5dGVzKTs8L2JpZz48L3ByZT4KKyAgIAorICA8cHJlPjxiaWc+c3BlZXhfZGVjb2RlKHN0LCAmYW1wO2JpdHMsIG91dHB1dF9mcmFtZSwgMCk7PC9iaWc+PC9wcmU+CisgPC9ibG9ja3F1b3RlPgorIHdoZXJlIDxpPmlucHV0X2J5dGVzPC9pPiBpcyBhIDxpPihjaGFyICopPC9pPiBjb250YWluaW5nIHRoZSBiaXQtc3RyZWFtCitkYXRhIHJlY2VpdmVkIGZvciBhIGZyYW1lLCA8aT5uYkJ5dGVzPC9pPiBpcyB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoYXQKK2JpdC1zdHJlYW0sIGFuZCA8aT5vdXRwdXRfZnJhbWU8L2k+IGlzIGEgPGk+KGZsb2F0ICopPC9pPiBhbmQgcG9pbnRzIHRvIHRoZQorYXJlYSB3aGVyZSB0aGUgZGVjb2RlZCBzcGVlY2ggZnJhbWUgd2lsbCBiZSB3cml0dGVuLiBUaGUgbGFzdCBhcmd1bWVudCBpbmRpY2F0ZXMKK3doZXRoZXIgdGhlIGZyYW1lIHdlJ2QgbGlrZSB0byBkZWNvZGUgd2FzIGxvc3QuIEEgdmFsdWUgb2YgMCBpbmRpY2F0ZXMgdGhlCitub3JtYWwgY2FzZSB3aGVyZSBiaXRzIHBvaW50cyB0byB0aGUgYml0IG9mIHRoZSBjdXJyZW50IGZyYW1lLiBBIHZhbHVlIG9mCisxIGluZGljYXRlcyB0aGF0IHdlIGRvbid0IGhhdmUgdGhlIGJpdHMgZm9yIHRoZSBjdXJyZW50IGZyYW1lLCBpbiB3aGljaCBjYXNlCit0aGUgYml0cyBhcmd1bWVudCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIGJpdHMgZm9yIHRoZSBsYXN0IGNvcnJlY3RseSByZWNlaXZlZAorZnJhbWUuIFdoZW4gYSBmcmFtZSBpcyBsb3N0LCB0aGUgU3BlZXggZGVjb2RlciB3aWxsIGRvIGl0cyBiZXN0IHRvICJndWVzcyIKK3RoZSBzb3JyZWN0IHNpZ25hbC48YnI+CisgPGJyPgorIDwvZGl2PgorIDwvZGl2PgorIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvZG9jL3JlZl9zaGFwaW5nLmVwcyBiLzNyZHBhcnR5L3NwZWV4L2RvYy9yZWZfc2hhcGluZy5lcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVmNzAwNwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2RvYy9yZWZfc2hhcGluZy5lcHMKQEAgLTAsMCArMSwyMDQ1IEBACislIVBTLUFkb2JlLTIuMCBFUFNGLTIuMAorJSVUaXRsZTogcHJpbnRvdXQuZXBzCislJUNyZWF0b3I6IGdudXBsb3QgNC4wIHBhdGNobGV2ZWwgMAorJSVDcmVhdGlvbkRhdGU6IE1vbiBNYXIgIDYgMTc6MTU6MjcgMjAwNgorJSVEb2N1bWVudEZvbnRzOiAoYXRlbmQpCislJUJvdW5kaW5nQm94OiA1MCA1MCA0MTAgMzAyCislJU9yaWVudGF0aW9uOiBQb3J0cmFpdAorJSVFbmRDb21tZW50cworL2dudWRpY3QgMjU2IGRpY3QgZGVmCitnbnVkaWN0IGJlZ2luCisvQ29sb3IgdHJ1ZSBkZWYKKy9Tb2xpZCBmYWxzZSBkZWYKKy9nbnVsaW5ld2lkdGggNS4wMDAgZGVmCisvdXNlcmxpbmV3aWR0aCBnbnVsaW5ld2lkdGggZGVmCisvdnNoaWZ0IC00NiBkZWYKKy9kbCB7MTAuMCBtdWx9IGRlZgorL2hwdF8gMzEuNSBkZWYKKy92cHRfIDMxLjUgZGVmCisvaHB0IGhwdF8gZGVmCisvdnB0IHZwdF8gZGVmCisvUm91bmRlZCBmYWxzZSBkZWYKKy9NIHttb3ZldG99IGJpbmQgZGVmCisvTCB7bGluZXRvfSBiaW5kIGRlZgorL1Ige3Jtb3ZldG99IGJpbmQgZGVmCisvViB7cmxpbmV0b30gYmluZCBkZWYKKy9OIHtuZXdwYXRoIG1vdmV0b30gYmluZCBkZWYKKy9DIHtzZXRyZ2Jjb2xvcn0gYmluZCBkZWYKKy9mIHtybGluZXRvIGZpbGx9IGJpbmQgZGVmCisvdnB0MiB2cHQgMiBtdWwgZGVmCisvaHB0MiBocHQgMiBtdWwgZGVmCisvTHNob3cgeyBjdXJyZW50cG9pbnQgc3Ryb2tlIE0KKyAgMCB2c2hpZnQgUiBzaG93IH0gZGVmCisvUnNob3cgeyBjdXJyZW50cG9pbnQgc3Ryb2tlIE0KKyAgZHVwIHN0cmluZ3dpZHRoIHBvcCBuZWcgdnNoaWZ0IFIgc2hvdyB9IGRlZgorL0NzaG93IHsgY3VycmVudHBvaW50IHN0cm9rZSBNCisgIGR1cCBzdHJpbmd3aWR0aCBwb3AgLTIgZGl2IHZzaGlmdCBSIHNob3cgfSBkZWYKKy9VUCB7IGR1cCB2cHRfIG11bCAvdnB0IGV4Y2ggZGVmIGhwdF8gbXVsIC9ocHQgZXhjaCBkZWYKKyAgL2hwdDIgaHB0IDIgbXVsIGRlZiAvdnB0MiB2cHQgMiBtdWwgZGVmIH0gZGVmCisvREwgeyBDb2xvciB7c2V0cmdiY29sb3IgU29saWQge3BvcCBbXX0gaWYgMCBzZXRkYXNoIH0KKyB7cG9wIHBvcCBwb3AgMCBzZXRncmF5IFNvbGlkIHtwb3AgW119IGlmIDAgc2V0ZGFzaH0gaWZlbHNlIH0gZGVmCisvQkwgeyBzdHJva2UgdXNlcmxpbmV3aWR0aCAyIG11bCBzZXRsaW5ld2lkdGgKKyAgICAgIFJvdW5kZWQgeyAxIHNldGxpbmVqb2luIDEgc2V0bGluZWNhcCB9IGlmIH0gZGVmCisvQUwgeyBzdHJva2UgdXNlcmxpbmV3aWR0aCAyIGRpdiBzZXRsaW5ld2lkdGgKKyAgICAgIFJvdW5kZWQgeyAxIHNldGxpbmVqb2luIDEgc2V0bGluZWNhcCB9IGlmIH0gZGVmCisvVUwgeyBkdXAgZ251bGluZXdpZHRoIG11bCAvdXNlcmxpbmV3aWR0aCBleGNoIGRlZgorICAgICAgZHVwIDEgbHQge3BvcCAxfSBpZiAxMCBtdWwgL3VkbCBleGNoIGRlZiB9IGRlZgorL1BMIHsgc3Ryb2tlIHVzZXJsaW5ld2lkdGggc2V0bGluZXdpZHRoCisgICAgICBSb3VuZGVkIHsgMSBzZXRsaW5lam9pbiAxIHNldGxpbmVjYXAgfSBpZiB9IGRlZgorL0xUdyB7IFBMIFtdIDEgc2V0Z3JheSB9IGRlZgorL0xUYiB7IEJMIFtdIDAgMCAwIERMIH0gZGVmCisvTFRhIHsgQUwgWzEgdWRsIG11bCAyIHVkbCBtdWxdIDAgc2V0ZGFzaCAwIDAgMCBzZXRyZ2Jjb2xvciB9IGRlZgorL0xUMCB7IFBMIFtdIDEgMCAwIERMIH0gZGVmCisvTFQxIHsgUEwgWzQgZGwgMiBkbF0gMCAxIDAgREwgfSBkZWYKKy9MVDIgeyBQTCBbMiBkbCAzIGRsXSAwIDAgMSBETCB9IGRlZgorL0xUMyB7IFBMIFsxIGRsIDEuNSBkbF0gMSAwIDEgREwgfSBkZWYKKy9MVDQgeyBQTCBbNSBkbCAyIGRsIDEgZGwgMiBkbF0gMCAxIDEgREwgfSBkZWYKKy9MVDUgeyBQTCBbNCBkbCAzIGRsIDEgZGwgMyBkbF0gMSAxIDAgREwgfSBkZWYKKy9MVDYgeyBQTCBbMiBkbCAyIGRsIDIgZGwgNCBkbF0gMCAwIDAgREwgfSBkZWYKKy9MVDcgeyBQTCBbMiBkbCAyIGRsIDIgZGwgMiBkbCAyIGRsIDQgZGxdIDEgMC4zIDAgREwgfSBkZWYKKy9MVDggeyBQTCBbMiBkbCAyIGRsIDIgZGwgMiBkbCAyIGRsIDIgZGwgMiBkbCA0IGRsXSAwLjUgMC41IDAuNSBETCB9IGRlZgorL1BudCB7IHN0cm9rZSBbXSAwIHNldGRhc2gKKyAgIGdzYXZlIDEgc2V0bGluZWNhcCBNIDAgMCBWIHN0cm9rZSBncmVzdG9yZSB9IGRlZgorL0RpYSB7IHN0cm9rZSBbXSAwIHNldGRhc2ggMiBjb3B5IHZwdCBhZGQgTQorICBocHQgbmVnIHZwdCBuZWcgViBocHQgdnB0IG5lZyBWCisgIGhwdCB2cHQgViBocHQgbmVnIHZwdCBWIGNsb3NlcGF0aCBzdHJva2UKKyAgUG50IH0gZGVmCisvUGxzIHsgc3Ryb2tlIFtdIDAgc2V0ZGFzaCB2cHQgc3ViIE0gMCB2cHQyIFYKKyAgY3VycmVudHBvaW50IHN0cm9rZSBNCisgIGhwdCBuZWcgdnB0IG5lZyBSIGhwdDIgMCBWIHN0cm9rZQorICB9IGRlZgorL0JveCB7IHN0cm9rZSBbXSAwIHNldGRhc2ggMiBjb3B5IGV4Y2ggaHB0IHN1YiBleGNoIHZwdCBhZGQgTQorICAwIHZwdDIgbmVnIFYgaHB0MiAwIFYgMCB2cHQyIFYKKyAgaHB0MiBuZWcgMCBWIGNsb3NlcGF0aCBzdHJva2UKKyAgUG50IH0gZGVmCisvQ3JzIHsgc3Ryb2tlIFtdIDAgc2V0ZGFzaCBleGNoIGhwdCBzdWIgZXhjaCB2cHQgYWRkIE0KKyAgaHB0MiB2cHQyIG5lZyBWIGN1cnJlbnRwb2ludCBzdHJva2UgTQorICBocHQyIG5lZyAwIFIgaHB0MiB2cHQyIFYgc3Ryb2tlIH0gZGVmCisvVHJpVSB7IHN0cm9rZSBbXSAwIHNldGRhc2ggMiBjb3B5IHZwdCAxLjEyIG11bCBhZGQgTQorICBocHQgbmVnIHZwdCAtMS42MiBtdWwgVgorICBocHQgMiBtdWwgMCBWCisgIGhwdCBuZWcgdnB0IDEuNjIgbXVsIFYgY2xvc2VwYXRoIHN0cm9rZQorICBQbnQgIH0gZGVmCisvU3RhciB7IDIgY29weSBQbHMgQ3JzIH0gZGVmCisvQm94RiB7IHN0cm9rZSBbXSAwIHNldGRhc2ggZXhjaCBocHQgc3ViIGV4Y2ggdnB0IGFkZCBNCisgIDAgdnB0MiBuZWcgViAgaHB0MiAwIFYgIDAgdnB0MiBWCisgIGhwdDIgbmVnIDAgViAgY2xvc2VwYXRoIGZpbGwgfSBkZWYKKy9UcmlVRiB7IHN0cm9rZSBbXSAwIHNldGRhc2ggdnB0IDEuMTIgbXVsIGFkZCBNCisgIGhwdCBuZWcgdnB0IC0xLjYyIG11bCBWCisgIGhwdCAyIG11bCAwIFYKKyAgaHB0IG5lZyB2cHQgMS42MiBtdWwgViBjbG9zZXBhdGggZmlsbCB9IGRlZgorL1RyaUQgeyBzdHJva2UgW10gMCBzZXRkYXNoIDIgY29weSB2cHQgMS4xMiBtdWwgc3ViIE0KKyAgaHB0IG5lZyB2cHQgMS42MiBtdWwgVgorICBocHQgMiBtdWwgMCBWCisgIGhwdCBuZWcgdnB0IC0xLjYyIG11bCBWIGNsb3NlcGF0aCBzdHJva2UKKyAgUG50ICB9IGRlZgorL1RyaURGIHsgc3Ryb2tlIFtdIDAgc2V0ZGFzaCB2cHQgMS4xMiBtdWwgc3ViIE0KKyAgaHB0IG5lZyB2cHQgMS42MiBtdWwgVgorICBocHQgMiBtdWwgMCBWCisgIGhwdCBuZWcgdnB0IC0xLjYyIG11bCBWIGNsb3NlcGF0aCBmaWxsfSBkZWYKKy9EaWFGIHsgc3Ryb2tlIFtdIDAgc2V0ZGFzaCB2cHQgYWRkIE0KKyAgaHB0IG5lZyB2cHQgbmVnIFYgaHB0IHZwdCBuZWcgVgorICBocHQgdnB0IFYgaHB0IG5lZyB2cHQgViBjbG9zZXBhdGggZmlsbCB9IGRlZgorL1BlbnQgeyBzdHJva2UgW10gMCBzZXRkYXNoIDIgY29weSBnc2F2ZQorICB0cmFuc2xhdGUgMCBocHQgTSA0IHs3MiByb3RhdGUgMCBocHQgTH0gcmVwZWF0CisgIGNsb3NlcGF0aCBzdHJva2UgZ3Jlc3RvcmUgUG50IH0gZGVmCisvUGVudEYgeyBzdHJva2UgW10gMCBzZXRkYXNoIGdzYXZlCisgIHRyYW5zbGF0ZSAwIGhwdCBNIDQgezcyIHJvdGF0ZSAwIGhwdCBMfSByZXBlYXQKKyAgY2xvc2VwYXRoIGZpbGwgZ3Jlc3RvcmUgfSBkZWYKKy9DaXJjbGUgeyBzdHJva2UgW10gMCBzZXRkYXNoIDIgY29weQorICBocHQgMCAzNjAgYXJjIHN0cm9rZSBQbnQgfSBkZWYKKy9DaXJjbGVGIHsgc3Ryb2tlIFtdIDAgc2V0ZGFzaCBocHQgMCAzNjAgYXJjIGZpbGwgfSBkZWYKKy9DMCB7IEJMIFtdIDAgc2V0ZGFzaCAyIGNvcHkgbW92ZXRvIHZwdCA5MCA0NTAgIGFyYyB9IGJpbmQgZGVmCisvQzEgeyBCTCBbXSAwIHNldGRhc2ggMiBjb3B5ICAgICAgICBtb3ZldG8KKyAgICAgICAyIGNvcHkgIHZwdCAwIDkwIGFyYyBjbG9zZXBhdGggZmlsbAorICAgICAgICAgICAgICAgdnB0IDAgMzYwIGFyYyBjbG9zZXBhdGggfSBiaW5kIGRlZgorL0MyIHsgQkwgW10gMCBzZXRkYXNoIDIgY29weSBtb3ZldG8KKyAgICAgICAyIGNvcHkgIHZwdCA5MCAxODAgYXJjIGNsb3NlcGF0aCBmaWxsCisgICAgICAgICAgICAgICB2cHQgMCAzNjAgYXJjIGNsb3NlcGF0aCB9IGJpbmQgZGVmCisvQzMgeyBCTCBbXSAwIHNldGRhc2ggMiBjb3B5IG1vdmV0bworICAgICAgIDIgY29weSAgdnB0IDAgMTgwIGFyYyBjbG9zZXBhdGggZmlsbAorICAgICAgICAgICAgICAgdnB0IDAgMzYwIGFyYyBjbG9zZXBhdGggfSBiaW5kIGRlZgorL0M0IHsgQkwgW10gMCBzZXRkYXNoIDIgY29weSBtb3ZldG8KKyAgICAgICAyIGNvcHkgIHZwdCAxODAgMjcwIGFyYyBjbG9zZXBhdGggZmlsbAorICAgICAgICAgICAgICAgdnB0IDAgMzYwIGFyYyBjbG9zZXBhdGggfSBiaW5kIGRlZgorL0M1IHsgQkwgW10gMCBzZXRkYXNoIDIgY29weSBtb3ZldG8KKyAgICAgICAyIGNvcHkgIHZwdCAwIDkwIGFyYworICAgICAgIDIgY29weSBtb3ZldG8KKyAgICAgICAyIGNvcHkgIHZwdCAxODAgMjcwIGFyYyBjbG9zZXBhdGggZmlsbAorICAgICAgICAgICAgICAgdnB0IDAgMzYwIGFyYyB9IGJpbmQgZGVmCisvQzYgeyBCTCBbXSAwIHNldGRhc2ggMiBjb3B5IG1vdmV0bworICAgICAgMiBjb3B5ICB2cHQgOTAgMjcwIGFyYyBjbG9zZXBhdGggZmlsbAorICAgICAgICAgICAgICB2cHQgMCAzNjAgYXJjIGNsb3NlcGF0aCB9IGJpbmQgZGVmCisvQzcgeyBCTCBbXSAwIHNldGRhc2ggMiBjb3B5IG1vdmV0bworICAgICAgMiBjb3B5ICB2cHQgMCAyNzAgYXJjIGNsb3NlcGF0aCBmaWxsCisgICAgICAgICAgICAgIHZwdCAwIDM2MCBhcmMgY2xvc2VwYXRoIH0gYmluZCBkZWYKKy9DOCB7IEJMIFtdIDAgc2V0ZGFzaCAyIGNvcHkgbW92ZXRvCisgICAgICAyIGNvcHkgdnB0IDI3MCAzNjAgYXJjIGNsb3NlcGF0aCBmaWxsCisgICAgICAgICAgICAgIHZwdCAwIDM2MCBhcmMgY2xvc2VwYXRoIH0gYmluZCBkZWYKKy9DOSB7IEJMIFtdIDAgc2V0ZGFzaCAyIGNvcHkgbW92ZXRvCisgICAgICAyIGNvcHkgIHZwdCAyNzAgNDUwIGFyYyBjbG9zZXBhdGggZmlsbAorICAgICAgICAgICAgICB2cHQgMCAzNjAgYXJjIGNsb3NlcGF0aCB9IGJpbmQgZGVmCisvQzEwIHsgQkwgW10gMCBzZXRkYXNoIDIgY29weSAyIGNvcHkgbW92ZXRvIHZwdCAyNzAgMzYwIGFyYyBjbG9zZXBhdGggZmlsbAorICAgICAgIDIgY29weSBtb3ZldG8KKyAgICAgICAyIGNvcHkgdnB0IDkwIDE4MCBhcmMgY2xvc2VwYXRoIGZpbGwKKyAgICAgICAgICAgICAgIHZwdCAwIDM2MCBhcmMgY2xvc2VwYXRoIH0gYmluZCBkZWYKKy9DMTEgeyBCTCBbXSAwIHNldGRhc2ggMiBjb3B5IG1vdmV0bworICAgICAgIDIgY29weSAgdnB0IDAgMTgwIGFyYyBjbG9zZXBhdGggZmlsbAorICAgICAgIDIgY29weSBtb3ZldG8KKyAgICAgICAyIGNvcHkgIHZwdCAyNzAgMzYwIGFyYyBjbG9zZXBhdGggZmlsbAorICAgICAgICAgICAgICAgdnB0IDAgMzYwIGFyYyBjbG9zZXBhdGggfSBiaW5kIGRlZgorL0MxMiB7IEJMIFtdIDAgc2V0ZGFzaCAyIGNvcHkgbW92ZXRvCisgICAgICAgMiBjb3B5ICB2cHQgMTgwIDM2MCBhcmMgY2xvc2VwYXRoIGZpbGwKKyAgICAgICAgICAgICAgIHZwdCAwIDM2MCBhcmMgY2xvc2VwYXRoIH0gYmluZCBkZWYKKy9DMTMgeyBCTCBbXSAwIHNldGRhc2ggIDIgY29weSBtb3ZldG8KKyAgICAgICAyIGNvcHkgIHZwdCAwIDkwIGFyYyBjbG9zZXBhdGggZmlsbAorICAgICAgIDIgY29weSBtb3ZldG8KKyAgICAgICAyIGNvcHkgIHZwdCAxODAgMzYwIGFyYyBjbG9zZXBhdGggZmlsbAorICAgICAgICAgICAgICAgdnB0IDAgMzYwIGFyYyBjbG9zZXBhdGggfSBiaW5kIGRlZgorL0MxNCB7IEJMIFtdIDAgc2V0ZGFzaCAyIGNvcHkgbW92ZXRvCisgICAgICAgMiBjb3B5ICB2cHQgOTAgMzYwIGFyYyBjbG9zZXBhdGggZmlsbAorICAgICAgICAgICAgICAgdnB0IDAgMzYwIGFyYyB9IGJpbmQgZGVmCisvQzE1IHsgQkwgW10gMCBzZXRkYXNoIDIgY29weSB2cHQgMCAzNjAgYXJjIGNsb3NlcGF0aCBmaWxsCisgICAgICAgICAgICAgICB2cHQgMCAzNjAgYXJjIGNsb3NlcGF0aCB9IGJpbmQgZGVmCisvUmVjICAgeyBuZXdwYXRoIDQgMiByb2xsIG1vdmV0byAxIGluZGV4IDAgcmxpbmV0byAwIGV4Y2ggcmxpbmV0bworICAgICAgIG5lZyAwIHJsaW5ldG8gY2xvc2VwYXRoIH0gYmluZCBkZWYKKy9TcXVhcmUgeyBkdXAgUmVjIH0gYmluZCBkZWYKKy9Cc3F1YXJlIHsgdnB0IHN1YiBleGNoIHZwdCBzdWIgZXhjaCB2cHQyIFNxdWFyZSB9IGJpbmQgZGVmCisvUzAgeyBCTCBbXSAwIHNldGRhc2ggMiBjb3B5IG1vdmV0byAwIHZwdCBybGluZXRvIEJMIEJzcXVhcmUgfSBiaW5kIGRlZgorL1MxIHsgQkwgW10gMCBzZXRkYXNoIDIgY29weSB2cHQgU3F1YXJlIGZpbGwgQnNxdWFyZSB9IGJpbmQgZGVmCisvUzIgeyBCTCBbXSAwIHNldGRhc2ggMiBjb3B5IGV4Y2ggdnB0IHN1YiBleGNoIHZwdCBTcXVhcmUgZmlsbCBCc3F1YXJlIH0gYmluZCBkZWYKKy9TMyB7IEJMIFtdIDAgc2V0ZGFzaCAyIGNvcHkgZXhjaCB2cHQgc3ViIGV4Y2ggdnB0MiB2cHQgUmVjIGZpbGwgQnNxdWFyZSB9IGJpbmQgZGVmCisvUzQgeyBCTCBbXSAwIHNldGRhc2ggMiBjb3B5IGV4Y2ggdnB0IHN1YiBleGNoIHZwdCBzdWIgdnB0IFNxdWFyZSBmaWxsIEJzcXVhcmUgfSBiaW5kIGRlZgorL1M1IHsgQkwgW10gMCBzZXRkYXNoIDIgY29weSAyIGNvcHkgdnB0IFNxdWFyZSBmaWxsCisgICAgICAgZXhjaCB2cHQgc3ViIGV4Y2ggdnB0IHN1YiB2cHQgU3F1YXJlIGZpbGwgQnNxdWFyZSB9IGJpbmQgZGVmCisvUzYgeyBCTCBbXSAwIHNldGRhc2ggMiBjb3B5IGV4Y2ggdnB0IHN1YiBleGNoIHZwdCBzdWIgdnB0IHZwdDIgUmVjIGZpbGwgQnNxdWFyZSB9IGJpbmQgZGVmCisvUzcgeyBCTCBbXSAwIHNldGRhc2ggMiBjb3B5IGV4Y2ggdnB0IHN1YiBleGNoIHZwdCBzdWIgdnB0IHZwdDIgUmVjIGZpbGwKKyAgICAgICAyIGNvcHkgdnB0IFNxdWFyZSBmaWxsCisgICAgICAgQnNxdWFyZSB9IGJpbmQgZGVmCisvUzggeyBCTCBbXSAwIHNldGRhc2ggMiBjb3B5IHZwdCBzdWIgdnB0IFNxdWFyZSBmaWxsIEJzcXVhcmUgfSBiaW5kIGRlZgorL1M5IHsgQkwgW10gMCBzZXRkYXNoIDIgY29weSB2cHQgc3ViIHZwdCB2cHQyIFJlYyBmaWxsIEJzcXVhcmUgfSBiaW5kIGRlZgorL1MxMCB7IEJMIFtdIDAgc2V0ZGFzaCAyIGNvcHkgdnB0IHN1YiB2cHQgU3F1YXJlIGZpbGwgMiBjb3B5IGV4Y2ggdnB0IHN1YiBleGNoIHZwdCBTcXVhcmUgZmlsbAorICAgICAgIEJzcXVhcmUgfSBiaW5kIGRlZgorL1MxMSB7IEJMIFtdIDAgc2V0ZGFzaCAyIGNvcHkgdnB0IHN1YiB2cHQgU3F1YXJlIGZpbGwgMiBjb3B5IGV4Y2ggdnB0IHN1YiBleGNoIHZwdDIgdnB0IFJlYyBmaWxsCisgICAgICAgQnNxdWFyZSB9IGJpbmQgZGVmCisvUzEyIHsgQkwgW10gMCBzZXRkYXNoIDIgY29weSBleGNoIHZwdCBzdWIgZXhjaCB2cHQgc3ViIHZwdDIgdnB0IFJlYyBmaWxsIEJzcXVhcmUgfSBiaW5kIGRlZgorL1MxMyB7IEJMIFtdIDAgc2V0ZGFzaCAyIGNvcHkgZXhjaCB2cHQgc3ViIGV4Y2ggdnB0IHN1YiB2cHQyIHZwdCBSZWMgZmlsbAorICAgICAgIDIgY29weSB2cHQgU3F1YXJlIGZpbGwgQnNxdWFyZSB9IGJpbmQgZGVmCisvUzE0IHsgQkwgW10gMCBzZXRkYXNoIDIgY29weSBleGNoIHZwdCBzdWIgZXhjaCB2cHQgc3ViIHZwdDIgdnB0IFJlYyBmaWxsCisgICAgICAgMiBjb3B5IGV4Y2ggdnB0IHN1YiBleGNoIHZwdCBTcXVhcmUgZmlsbCBCc3F1YXJlIH0gYmluZCBkZWYKKy9TMTUgeyBCTCBbXSAwIHNldGRhc2ggMiBjb3B5IEJzcXVhcmUgZmlsbCBCc3F1YXJlIH0gYmluZCBkZWYKKy9EMCB7IGdzYXZlIHRyYW5zbGF0ZSA0NSByb3RhdGUgMCAwIFMwIHN0cm9rZSBncmVzdG9yZSB9IGJpbmQgZGVmCisvRDEgeyBnc2F2ZSB0cmFuc2xhdGUgNDUgcm90YXRlIDAgMCBTMSBzdHJva2UgZ3Jlc3RvcmUgfSBiaW5kIGRlZgorL0QyIHsgZ3NhdmUgdHJhbnNsYXRlIDQ1IHJvdGF0ZSAwIDAgUzIgc3Ryb2tlIGdyZXN0b3JlIH0gYmluZCBkZWYKKy9EMyB7IGdzYXZlIHRyYW5zbGF0ZSA0NSByb3RhdGUgMCAwIFMzIHN0cm9rZSBncmVzdG9yZSB9IGJpbmQgZGVmCisvRDQgeyBnc2F2ZSB0cmFuc2xhdGUgNDUgcm90YXRlIDAgMCBTNCBzdHJva2UgZ3Jlc3RvcmUgfSBiaW5kIGRlZgorL0Q1IHsgZ3NhdmUgdHJhbnNsYXRlIDQ1IHJvdGF0ZSAwIDAgUzUgc3Ryb2tlIGdyZXN0b3JlIH0gYmluZCBkZWYKKy9ENiB7IGdzYXZlIHRyYW5zbGF0ZSA0NSByb3RhdGUgMCAwIFM2IHN0cm9rZSBncmVzdG9yZSB9IGJpbmQgZGVmCisvRDcgeyBnc2F2ZSB0cmFuc2xhdGUgNDUgcm90YXRlIDAgMCBTNyBzdHJva2UgZ3Jlc3RvcmUgfSBiaW5kIGRlZgorL0Q4IHsgZ3NhdmUgdHJhbnNsYXRlIDQ1IHJvdGF0ZSAwIDAgUzggc3Ryb2tlIGdyZXN0b3JlIH0gYmluZCBkZWYKKy9EOSB7IGdzYXZlIHRyYW5zbGF0ZSA0NSByb3RhdGUgMCAwIFM5IHN0cm9rZSBncmVzdG9yZSB9IGJpbmQgZGVmCisvRDEwIHsgZ3NhdmUgdHJhbnNsYXRlIDQ1IHJvdGF0ZSAwIDAgUzEwIHN0cm9rZSBncmVzdG9yZSB9IGJpbmQgZGVmCisvRDExIHsgZ3NhdmUgdHJhbnNsYXRlIDQ1IHJvdGF0ZSAwIDAgUzExIHN0cm9rZSBncmVzdG9yZSB9IGJpbmQgZGVmCisvRDEyIHsgZ3NhdmUgdHJhbnNsYXRlIDQ1IHJvdGF0ZSAwIDAgUzEyIHN0cm9rZSBncmVzdG9yZSB9IGJpbmQgZGVmCisvRDEzIHsgZ3NhdmUgdHJhbnNsYXRlIDQ1IHJvdGF0ZSAwIDAgUzEzIHN0cm9rZSBncmVzdG9yZSB9IGJpbmQgZGVmCisvRDE0IHsgZ3NhdmUgdHJhbnNsYXRlIDQ1IHJvdGF0ZSAwIDAgUzE0IHN0cm9rZSBncmVzdG9yZSB9IGJpbmQgZGVmCisvRDE1IHsgZ3NhdmUgdHJhbnNsYXRlIDQ1IHJvdGF0ZSAwIDAgUzE1IHN0cm9rZSBncmVzdG9yZSB9IGJpbmQgZGVmCisvRGlhRSB7IHN0cm9rZSBbXSAwIHNldGRhc2ggdnB0IGFkZCBNCisgIGhwdCBuZWcgdnB0IG5lZyBWIGhwdCB2cHQgbmVnIFYKKyAgaHB0IHZwdCBWIGhwdCBuZWcgdnB0IFYgY2xvc2VwYXRoIHN0cm9rZSB9IGRlZgorL0JveEUgeyBzdHJva2UgW10gMCBzZXRkYXNoIGV4Y2ggaHB0IHN1YiBleGNoIHZwdCBhZGQgTQorICAwIHZwdDIgbmVnIFYgaHB0MiAwIFYgMCB2cHQyIFYKKyAgaHB0MiBuZWcgMCBWIGNsb3NlcGF0aCBzdHJva2UgfSBkZWYKKy9UcmlVRSB7IHN0cm9rZSBbXSAwIHNldGRhc2ggdnB0IDEuMTIgbXVsIGFkZCBNCisgIGhwdCBuZWcgdnB0IC0xLjYyIG11bCBWCisgIGhwdCAyIG11bCAwIFYKKyAgaHB0IG5lZyB2cHQgMS42MiBtdWwgViBjbG9zZXBhdGggc3Ryb2tlIH0gZGVmCisvVHJpREUgeyBzdHJva2UgW10gMCBzZXRkYXNoIHZwdCAxLjEyIG11bCBzdWIgTQorICBocHQgbmVnIHZwdCAxLjYyIG11bCBWCisgIGhwdCAyIG11bCAwIFYKKyAgaHB0IG5lZyB2cHQgLTEuNjIgbXVsIFYgY2xvc2VwYXRoIHN0cm9rZSB9IGRlZgorL1BlbnRFIHsgc3Ryb2tlIFtdIDAgc2V0ZGFzaCBnc2F2ZQorICB0cmFuc2xhdGUgMCBocHQgTSA0IHs3MiByb3RhdGUgMCBocHQgTH0gcmVwZWF0CisgIGNsb3NlcGF0aCBzdHJva2UgZ3Jlc3RvcmUgfSBkZWYKKy9DaXJjRSB7IHN0cm9rZSBbXSAwIHNldGRhc2ggCisgIGhwdCAwIDM2MCBhcmMgc3Ryb2tlIH0gZGVmCisvT3BhcXVlIHsgZ3NhdmUgY2xvc2VwYXRoIDEgc2V0Z3JheSBmaWxsIGdyZXN0b3JlIDAgc2V0Z3JheSBjbG9zZXBhdGggfSBkZWYKKy9EaWFXIHsgc3Ryb2tlIFtdIDAgc2V0ZGFzaCB2cHQgYWRkIE0KKyAgaHB0IG5lZyB2cHQgbmVnIFYgaHB0IHZwdCBuZWcgVgorICBocHQgdnB0IFYgaHB0IG5lZyB2cHQgViBPcGFxdWUgc3Ryb2tlIH0gZGVmCisvQm94VyB7IHN0cm9rZSBbXSAwIHNldGRhc2ggZXhjaCBocHQgc3ViIGV4Y2ggdnB0IGFkZCBNCisgIDAgdnB0MiBuZWcgViBocHQyIDAgViAwIHZwdDIgVgorICBocHQyIG5lZyAwIFYgT3BhcXVlIHN0cm9rZSB9IGRlZgorL1RyaVVXIHsgc3Ryb2tlIFtdIDAgc2V0ZGFzaCB2cHQgMS4xMiBtdWwgYWRkIE0KKyAgaHB0IG5lZyB2cHQgLTEuNjIgbXVsIFYKKyAgaHB0IDIgbXVsIDAgVgorICBocHQgbmVnIHZwdCAxLjYyIG11bCBWIE9wYXF1ZSBzdHJva2UgfSBkZWYKKy9UcmlEVyB7IHN0cm9rZSBbXSAwIHNldGRhc2ggdnB0IDEuMTIgbXVsIHN1YiBNCisgIGhwdCBuZWcgdnB0IDEuNjIgbXVsIFYKKyAgaHB0IDIgbXVsIDAgVgorICBocHQgbmVnIHZwdCAtMS42MiBtdWwgViBPcGFxdWUgc3Ryb2tlIH0gZGVmCisvUGVudFcgeyBzdHJva2UgW10gMCBzZXRkYXNoIGdzYXZlCisgIHRyYW5zbGF0ZSAwIGhwdCBNIDQgezcyIHJvdGF0ZSAwIGhwdCBMfSByZXBlYXQKKyAgT3BhcXVlIHN0cm9rZSBncmVzdG9yZSB9IGRlZgorL0NpcmNXIHsgc3Ryb2tlIFtdIDAgc2V0ZGFzaCAKKyAgaHB0IDAgMzYwIGFyYyBPcGFxdWUgc3Ryb2tlIH0gZGVmCisvQm94RmlsbCB7IGdzYXZlIFJlYyAxIHNldGdyYXkgZmlsbCBncmVzdG9yZSB9IGRlZgorL0JveENvbEZpbGwgeworICBnc2F2ZSBSZWMKKyAgL0ZpbGxkZW4gZXhjaCBkZWYKKyAgY3VycmVudHJnYmNvbG9yCisgIC9Db2xCIGV4Y2ggZGVmIC9Db2xHIGV4Y2ggZGVmIC9Db2xSIGV4Y2ggZGVmCisgIC9Db2xSIENvbFIgRmlsbGRlbiBtdWwgRmlsbGRlbiBzdWIgMSBhZGQgZGVmCisgIC9Db2xHIENvbEcgRmlsbGRlbiBtdWwgRmlsbGRlbiBzdWIgMSBhZGQgZGVmCisgIC9Db2xCIENvbEIgRmlsbGRlbiBtdWwgRmlsbGRlbiBzdWIgMSBhZGQgZGVmCisgIENvbFIgQ29sRyBDb2xCIHNldHJnYmNvbG9yCisgIGZpbGwgZ3Jlc3RvcmUgfSBkZWYKKyUKKyUgUG9zdFNjcmlwdCBMZXZlbCAxIFBhdHRlcm4gRmlsbCByb3V0aW5lCislIFVzYWdlOiB4IHkgdyBoIHMgYSBYWCBQYXR0ZXJuRmlsbAorJQl4LHkgPSBsb3dlciBsZWZ0IGNvcm5lciBvZiBib3ggdG8gYmUgZmlsbGVkCislCXcsaCA9IHdpZHRoIGFuZCBoZWlnaHQgb2YgYm94CislCSAgYSA9IGFuZ2xlIGluIGRlZ3JlZXMgYmV0d2VlbiBsaW5lcyBhbmQgeC1heGlzCislCSBYWCA9IDAvMSBmb3Igbm8veWVzIGNyb3NzLWhhdGNoCislCisvUGF0dGVybkZpbGwgeyBnc2F2ZSAvUEZhIFsgOSAyIHJvbGwgXSBkZWYKKyAgICBQRmEgMCBnZXQgUEZhIDIgZ2V0IDIgZGl2IGFkZCBQRmEgMSBnZXQgUEZhIDMgZ2V0IDIgZGl2IGFkZCB0cmFuc2xhdGUKKyAgICBQRmEgMiBnZXQgLTIgZGl2IFBGYSAzIGdldCAtMiBkaXYgUEZhIDIgZ2V0IFBGYSAzIGdldCBSZWMKKyAgICBnc2F2ZSAxIHNldGdyYXkgZmlsbCBncmVzdG9yZSBjbGlwCisgICAgY3VycmVudGxpbmV3aWR0aCAwLjUgbXVsIHNldGxpbmV3aWR0aAorICAgIC9QRnMgUEZhIDIgZ2V0IGR1cCBtdWwgUEZhIDMgZ2V0IGR1cCBtdWwgYWRkIHNxcnQgZGVmCisgICAgMCAwIE0gUEZhIDUgZ2V0IHJvdGF0ZSBQRnMgLTIgZGl2IGR1cCB0cmFuc2xhdGUKKwkwIDEgUEZzIFBGYSA0IGdldCBkaXYgMSBhZGQgZmxvb3IgY3ZpCisJeyBQRmEgNCBnZXQgbXVsIDAgTSAwIFBGcyBWIH0gZm9yCisgICAgMCBQRmEgNiBnZXQgbmUgeworCTAgMSBQRnMgUEZhIDQgZ2V0IGRpdiAxIGFkZCBmbG9vciBjdmkKKwl7IFBGYSA0IGdldCBtdWwgMCAyIDEgcm9sbCBNIFBGcyAwIFYgfSBmb3IKKyAgICB9IGlmCisgICAgc3Ryb2tlIGdyZXN0b3JlIH0gZGVmCislCisvU3ltYm9sLU9ibGlxdWUgL1N5bWJvbCBmaW5kZm9udCBbMSAwIC4xNjcgMSAwIDBdIG1ha2Vmb250CitkdXAgbGVuZ3RoIGRpY3QgYmVnaW4gezEgaW5kZXggL0ZJRCBlcSB7cG9wIHBvcH0ge2RlZn0gaWZlbHNlfSBmb3JhbGwKK2N1cnJlbnRkaWN0IGVuZCBkZWZpbmVmb250IHBvcAorZW5kCislJUVuZFByb2xvZworZ251ZGljdCBiZWdpbgorZ3NhdmUKKzUwIDUwIHRyYW5zbGF0ZQorMC4wNTAgMC4wNTAgc2NhbGUKKzAgc2V0Z3JheQorbmV3cGF0aAorKEhlbHZldGljYSkgZmluZGZvbnQgMTQwIHNjYWxlZm9udCBzZXRmb250CisxLjAwMCBVTAorTFRiCis2MzAgNDIwIE0KKzYzIDAgVgorNjI2OSAwIFIKKy02MyAwIFYKKzU0NiA0MjAgTQorKC00MCkgUnNob3cKKzEuMDAwIFVMCitMVGIKKzYzMCAxMDU2IE0KKzYzIDAgVgorNjI2OSAwIFIKKy02MyAwIFYKKy02MzUzIDAgUgorKC0zMCkgUnNob3cKKzEuMDAwIFVMCitMVGIKKzYzMCAxNjkyIE0KKzYzIDAgVgorNjI2OSAwIFIKKy02MyAwIFYKKy02MzUzIDAgUgorKC0yMCkgUnNob3cKKzEuMDAwIFVMCitMVGIKKzYzMCAyMzI4IE0KKzYzIDAgVgorNjI2OSAwIFIKKy02MyAwIFYKKy02MzUzIDAgUgorKC0xMCkgUnNob3cKKzEuMDAwIFVMCitMVGIKKzYzMCAyOTY0IE0KKzYzIDAgVgorNjI2OSAwIFIKKy02MyAwIFYKKy02MzUzIDAgUgorKCAwKSBSc2hvdworMS4wMDAgVUwKK0xUYgorNjMwIDM2MDAgTQorNjMgMCBWCis2MjY5IDAgUgorLTYzIDAgVgorLTYzNTMgMCBSCisoIDEwKSBSc2hvdworMS4wMDAgVUwKK0xUYgorNjMwIDQyMzYgTQorNjMgMCBWCis2MjY5IDAgUgorLTYzIDAgVgorLTYzNTMgMCBSCisoIDIwKSBSc2hvdworMS4wMDAgVUwKK0xUYgorNjMwIDQ4NzIgTQorNjMgMCBWCis2MjY5IDAgUgorLTYzIDAgVgorLTYzNTMgMCBSCisoIDMwKSBSc2hvdworMS4wMDAgVUwKK0xUYgorNjMwIDQyMCBNCiswIDYzIFYKKzAgNDM4OSBSCiswIC02MyBWCis2MzAgMjgwIE0KKyggMCkgQ3Nob3cKKzEuMDAwIFVMCitMVGIKKzE0MjEgNDIwIE0KKzAgNjMgVgorMCA0Mzg5IFIKKzAgLTYzIFYKKzAgLTQ1MjkgUgorKCA1MDApIENzaG93CisxLjAwMCBVTAorTFRiCisyMjEzIDQyMCBNCiswIDYzIFYKKzAgNDM4OSBSCiswIC02MyBWCiswIC00NTI5IFIKKyggMTAwMCkgQ3Nob3cKKzEuMDAwIFVMCitMVGIKKzMwMDQgNDIwIE0KKzAgNjMgVgorMCA0Mzg5IFIKKzAgLTYzIFYKKzAgLTQ1MjkgUgorKCAxNTAwKSBDc2hvdworMS4wMDAgVUwKK0xUYgorMzc5NiA0MjAgTQorMCA2MyBWCiswIDQzODkgUgorMCAtNjMgVgorMCAtNDUyOSBSCisoIDIwMDApIENzaG93CisxLjAwMCBVTAorTFRiCis0NTg3IDQyMCBNCiswIDYzIFYKKzAgNDM4OSBSCiswIC02MyBWCiswIC00NTI5IFIKKyggMjUwMCkgQ3Nob3cKKzEuMDAwIFVMCitMVGIKKzUzNzkgNDIwIE0KKzAgNjMgVgorMCA0Mzg5IFIKKzAgLTYzIFYKKzAgLTQ1MjkgUgorKCAzMDAwKSBDc2hvdworMS4wMDAgVUwKK0xUYgorNjE3MCA0MjAgTQorMCA2MyBWCiswIDQzODkgUgorMCAtNjMgVgorMCAtNDUyOSBSCisoIDM1MDApIENzaG93CisxLjAwMCBVTAorTFRiCis2OTYyIDQyMCBNCiswIDYzIFYKKzAgNDM4OSBSCiswIC02MyBWCiswIC00NTI5IFIKKyggNDAwMCkgQ3Nob3cKKzEuMDAwIFVMCitMVGIKKzEuMDAwIFVMCitMVGIKKzYzMCA0MjAgTQorNjMzMiAwIFYKKzAgNDQ1MiBWCistNjMzMiAwIFYKKzYzMCA0MjAgTAorTFRiCisxNDAgMjY0NiBNCitjdXJyZW50cG9pbnQgZ3NhdmUgdHJhbnNsYXRlIDkwIHJvdGF0ZSAwIDAgTQorKFJlc3BvbnNlIFwoZEJcKSkgQ3Nob3cKK2dyZXN0b3JlCitMVGIKKzM3OTYgNzAgTQorKEZyZXF1ZW5jeSBcKEh6XCkpIENzaG93CisxLjAwMCBVUAorMS4wMDAgVUwKK0xUMAorTFRiCis2MzExIDQ3MzkgTQorKFNwZWVjaCBzaWduYWwpIFJzaG93CitMVDAKKzYzOTUgNDczOSBNCiszOTkgMCBWCis2MzAgMTgxNyBNCisxMiAtMTMyIFYKKzEzIC0yODcgVgorMTIgMjU2IFYKKzEyIDEzOSBWCisxMyAtMTI3IFYKKzEyIC0xOTMgVgorMTMgMjU2IFYKKzEyIDEwMSBWCisxMiAtMTg5IFYKKzEzIC0yNjkgVgorMTIgNDI5IFYKKzEyIDE1MiBWCisxMyAtMTAyIFYKKzEyIC0yNzYgVgorMTMgMTM5IFYKKzEyIDExNSBWCisxMiAtMjA1IFYKKzEzIC0xNzQgVgorMTIgNDg1IFYKKzEyIDE5MyBWCisxMyAzNyBWCisxMiAtMTcgVgorMTIgNDEgVgorMTMgMjMwIFYKKzEyIDI0MiBWCisxMyAxMDcgVgorMTIgMTkwIFYKKzEyIDUxMyBWCisxMyA0MzYgVgorMTIgMzIzIFYKKzEyIDIzNiBWCisxMyAxNjggVgorMTIgMTEwIFYKKzEyIDU4IFYKKzEzIDkgVgorMTIgLTQwIFYKKzEzIC05MCBWCisxMiAtMTQxIFYKKzEyIC0xOTcgVgorMTMgLTI1MSBWCisxMiAtMjg5IFYKKzEyIC0yODMgVgorMTMgLTI0NyBWCisxMiAtMjY1IFYKKzEzIC0zMjQgVgorMTIgLTMwMiBWCisxMiAtMjMxIFYKKzEzIC03NSBWCisxMiAxNTAgVgorMTIgMSBWCisxMyAtMjk4IFYKKzEyNzMgNzgyIEwKKzEyIDExMDMgVgorMTMgNzYgVgorMTIgLTMzOCBWCisxMyAyNTIgVgorMTIgMzU3IFYKKzEyIDg2IFYKKzEzIC0xMTggVgorMTIgLTM0MSBWCisxMiAtMjAgVgorMTMgMzY0IFYKKzEyIDI0MyBWCisxMiAyMTIgVgorMTMgMjE0IFYKKzEyIDIwOCBWCisxMyAxODAgVgorMTIgMTM2IFYKKzEyIDgyIFYKKzEzIDIzIFYKKzEyIC00MCBWCisxMiAtMTA3IFYKKzEzIC0xNzcgVgorMTIgLTI0MCBWCisxMyAtMjU5IFYKKzEyIC0yMTUgVgorMTIgLTIyMCBWCisxMyAtMjk3IFYKKzEyIC0xOTYgVgorMTIgLTEyOCBWCisxMyAtNzAxIFYKKzEyIDYzMiBWCisxMiAzMjkgVgorMTMgLTI1IFYKKzEyIC00NzAgVgorMTMgLTU0IFYKKzEyIDUzOCBWCisxMiA3MCBWCisxMyAtMjQ2IFYKKzE3NDMgNTUxIEwKKzEyIDExMTEgVgorMTMgMTg1IFYKKzEyIC0xNTkgVgorMTc5MyA2NTIgTAorMTIgODkzIFYKKzEyIDMyMSBWCisxMyAxMDMgVgorMTIgMTY0IFYKKzEyIDI2MiBWCisxMyAyMzkgVgorMTIgMTkwIFYKKzEyIDE0MSBWCitzdHJva2UKKzE4OTEgMjk2NSBNCisxMyA5MSBWCisxMiAzOSBWCisxMyAtMTMgVgorMTIgLTYyIFYKKzEyIC05NyBWCisxMyAtMTEwIFYKKzEyIC0xMjAgVgorMTIgLTE2MSBWCisxMyAtMjY1IFYKKzEyIC00NTMgVgorMTIgLTIxNSBWCisxMyAxMzkgVgorMTIgLTE5NSBWCisyMDYyIDQyMCBMCis1IDAgUgorMTAgOTYxIFYKKzEyIDEzNSBWCisxMyAtNDIyIFYKKzEyIDE2NyBWCisxMiA0OTEgVgorMTMgMTAxIFYKKzEyIC0xNjkgVgorMTMgLTczNyBWCisxMiA0ODIgVgorMTIgMjk5IFYKKzEzIC00OCBWCisxMiAtNDIxIFYKKzEyIC0xNTEgVgorMTMgNDM0IFYKKzEyIC0zIFYKKzEyIC0zNzggVgorMTMgLTEyIFYKKzEyIDI5OCBWCisxMyAtMTg3IFYKKzEyIC00NCBWCisxMiA2NTggVgorMTMgMjcyIFYKKzEyIDkwIFYKKzEyIC00OSBWCisxMyAtMTkxIFYKKzEyIC0zNzAgVgorMTMgLTU3OSBWCisxMiAtMzI5IFYKKzEyIDM4NSBWCisxMyA0NDQgVgorMTIgMTcyIFYKKzEyIC01NyBWCisxMyAtNDA3IFYKKzEyIC0zMTEgVgorMTIgNjE3IFYKKzEzIDk3IFYKKzEyIC0xOTggVgorMTMgLTQ2OSBWCisxMiA0NDYgVgorMTIgMTc3IFYKKzEzIC0xMTQgVgorMTIgLTQ4MyBWCisxMiAxOTYgVgorMTMgMjY5IFYKKzEyIC03NCBWCisxMiAtNDA0IFYKKzEzIDI2MyBWCisxMiAyNDggVgorMTMgLTM3IFYKKzEyIC02NiBWCisxMiAzMzkgVgorMTMgMzEyIFYKKzEyIDI0NCBWCisxMiAyMTUgVgorMTMgMTc2IFYKKzEyIDEyNSBWCisxMyA2OSBWCisxMiAxNSBWCisxMiAtMzAgVgorMTMgLTY0IFYKKzEyIC04NSBWCisxMiAtMTA0IFYKKzEzIC0xMzggVgorMTIgLTE5NSBWCisxMiAtMjc4IFYKKzEzIC0zNTQgVgorMTIgLTI1NyBWCisxMyAtNDMgVgorMTIgLTIwIFYKKzEyIC03MyBWCisxMyAtMjAyIFYKKzEyIC0yNSBWCisxMiAzMTggVgorMTMgMTMyIFYKKzEyIC03MyBWCisxMiAtMjQyIFYKKzEzIDEwNyBWCisxMiAyMjAgVgorMTMgNyBWCisxMiAtMjc3IFYKKzkgLTgxMSBWCis2IDAgUgorMTAgODg3IFYKKzEyIDI0MSBWCisxMiAyMCBWCisxMyAtMTQgVgorMTIgMjQxIFYKKzEzIDMyMyBWCisxMiAyNjIgVgorc3Ryb2tlCiszMTUzIDIzODAgTQorMTIgMTk3IFYKKzEzIDEzOCBWCisxMiA4NiBWCisxMiAzNiBWCisxMyAtMTAgVgorMTIgLTU0IFYKKzEyIC05MiBWCisxMyAtMTE2IFYKKzEyIC0xMDggVgorMTMgLTczIFYKKzEyIC02MyBWCisxMiAtMTA3IFYKKzEzIC0xOTUgVgorMTIgLTI2NyBWCisxMiAtODggVgorMTMgNTAgVgorMTIgLTk3IFYKKzEzIC0zNjcgVgorMTIgLTI4NSBWCisxMiAzNzQgVgorMTMgMyBWCisxMiAtMzUyIFYKKzEyIDg4IFYKKzEzIDM0NyBWCisxMiA0NyBWCisxMiAtMTkyIFYKKzEzIC0yNjQgVgorMTIgMjAwIFYKKzEzIDE2IFYKKzEyIC00MjEgVgorMTIgMjk2IFYKKzEzIDM5OCBWCisxMiA2NSBWCisxMiAtMjEyIFYKKzEzIDY5IFYKKzEyIDQ1MyBWCisxMiAyNDAgVgorMTMgMTA0IFYKKzEyIDEyIFYKKzEzIC01MiBWCisxMiAtODIgVgorMTIgLTY5IFYKKzEzIC0zNCBWCisxMiAtMjUgVgorMTIgLTY0IFYKKzEzIC0xNTggVgorMTIgLTM0NiBWCisxMyAtMTY2IFYKKzEyIDM3NSBWCisxMiAxMzkgVgorMTMgLTQ2IFYKKzEyIC0yMDcgVgorMTIgLTE4NyBWCisxMyAxMDIgVgorMTIgLTE0IFYKKzEyIC0zNTcgVgorMTMgLTI3MSBWCisxMiA2MDEgVgorMTMgMTE5IFYKKzEyIC0xNzIgVgorMTIgLTQ4NiBWCisxMyA1MjEgVgorMTIgMjU2IFYKKzEyIDEwIFYKKzEzIC0yMTkgVgorMTIgLTI5NCBWCisxMyA0NDYgVgorMTIgMjg1IFYKKzEyIDE2NyBWCisxMyAxMzcgVgorMTIgMTUyIFYKKzEyIDE2MSBWCisxMyAxNDQgVgorMTIgMTA2IFYKKzEyIDU4IFYKKzEzIDcgVgorMTIgLTQ0IFYKKzEzIC04NyBWCisxMiAtMTE2IFYKKzEyIC0xMTkgVgorMTMgLTExOCBWCisxMiAtMTUyIFYKKzEyIC0yNDEgVgorMTMgLTM2MyBWCisxMiAtMTA5IFYKKzEyIDE3MiBWCisxMyA0MyBWCisxMiAtNzUgVgorMTMgLTE3NiBWCisxMiAtMzEzIFYKKzEyIC0zNDQgVgorMTMgMjM2IFYKKzEyIDkzIFYKKzEyIC0xNjkgVgorMTMgLTEwMiBWCisxMiAzMjAgVgorMTMgMTIzIFYKKzEyIDE3IFYKKzEyIDIwNyBWCisxMyAyNzAgVgorMTIgMjAxIFYKKzEyIDE4NiBWCisxMyAyMTcgVgorMTIgMjEzIFYKK3N0cm9rZQorNDQzOSAyNTQzIE0KKzEyIDE3NCBWCisxMyAxMjUgVgorMTIgNzkgVgorMTMgNDIgVgorMTIgMTQgVgorMTIgLTMgVgorMTMgLTE3IFYKKzEyIC0zNCBWCisxMiAtNjIgVgorMTMgLTEwMiBWCisxMiAtMTQ5IFYKKzEyIC0xODIgVgorMTMgLTE1MSBWCisxMiAtNzAgVgorMTMgLTczIFYKKzEyIC0xNDYgVgorMTIgLTE1MCBWCisxMyA0MyBWCisxMiA4MSBWCisxMiAtMjcgVgorMTMgLTE0OCBWCisxMiAtMjEzIFYKKzEzIC0xNCBWCisxMiAyNDYgVgorMTIgMjYyIFYKKzEzIDE5MCBWCisxMiA5NCBWCisxMiAtNyBWCisxMyAtNTYgVgorMTIgMTQ5IFYKKzEyIDMxMiBWCisxMyAyNjkgVgorMTIgMjEyIFYKKzEzIDE2OSBWCisxMiAxMzYgVgorMTIgMTA1IFYKKzEzIDc2IFYKKzEyIDQ1IFYKKzEyIDE1IFYKKzEzIC0xNSBWCisxMiAtNDMgVgorMTMgLTY2IFYKKzEyIC04MCBWCisxMiAtODMgVgorMTMgLTc5IFYKKzEyIC04MCBWCisxMiAtOTkgVgorMTMgLTEzNiBWCisxMiAtMTkzIFYKKzEyIC0yNzQgVgorMTMgLTQwMCBWCisxMiAtNDYyIFYKKzEzIDE3MyBWCisxMiAxNDggVgorMTIgLTIxIFYKKzEzIC0xOTggVgorMTIgLTE0NiBWCisxMiAzOTEgVgorMTMgMjUzIFYKKzEyIDk5IFYKKzEyIC0zOCBWCisxMyAtMjA4IFYKKzEyIC0yNjAgVgorMTMgNDE4IFYKKzEyIDMzMCBWCisxMiAyMTAgVgorMTMgMTUzIFYKKzEyIDEyMyBWCisxMiAxMDUgVgorMTMgODggVgorMTIgNjggVgorMTMgNDcgVgorMTIgMjQgVgorMTIgMSBWCisxMyAtMTkgVgorMTIgLTM4IFYKKzEyIC01NCBWCisxMyAtNjcgVgorMTIgLTgwIFYKKzEyIC05MyBWCisxMyAtMTExIFYKKzEyIC0xMzIgVgorMTMgLTE1MiBWCisxMiAtMTY3IFYKKzEyIC0xODMgVgorMTMgLTIxMSBWCisxMiAtMjM2IFYKKzEyIC0xMzkgVgorMTMgMTUgVgorMTIgLTIyIFYKKzEzIC0xNjQgVgorMTIgLTQwNSBWCisxMiAtMjExIFYKKzEzIDQ0MCBWCisxMiAyMzAgVgorMTIgMTUyIFYKKzEzIDk2IFYKKzEyIDI5IFYKKzEyIC0yOCBWCisxMyAtMTAgVgorMTIgODEgVgorMTMgOTYgVgorMTIgMjkgVgorMTIgLTY5IFYKK3N0cm9rZQorNTcyNSAyMTA0IE0KKzEzIC0xODYgVgorMTIgLTIzOSBWCisxMiAxNDIgVgorMTMgMjQ5IFYKKzEyIDE1NSBWCisxMiA4OCBWCisxMyA0OSBWCisxMiAzNSBWCisxMyAzOSBWCisxMiAzOCBWCisxMiAxMyBWCisxMyAtMzQgVgorMTIgLTg3IFYKKzEyIC0xMTIgVgorMTMgLTcyIFYKKzEyIC0zNSBWCisxMyAtMTAwIFYKKzEyIC0yNjkgVgorMTIgLTQ1MiBWCisxMyAyOTYgVgorMTIgOTkgVgorMTIgLTMxMiBWCisxMyAyNDIgVgorMTIgNTEzIFYKKzEyIDIzNyBWCisxMyA4OCBWCisxMiAtMjEgVgorMTMgLTgyIFYKKzEyIC0xIFYKKzEyIDE1MyBWCisxMyAxNzcgVgorMTIgMTU2IFYKKzEyIDE0NSBWCisxMyAxMzQgVgorMTIgMTE0IFYKKzEyIDg3IFYKKzEzIDU2IFYKKzEyIDI2IFYKKzEzIC0zIFYKKzEyIC0zMCBWCisxMiAtNTIgVgorMTMgLTc0IFYKKzEyIC05MyBWCisxMiAtMTA4IFYKKzEzIC0xMjEgVgorMTIgLTEzMCBWCisxMyAtMTI5IFYKKzEyIC0xMTggVgorMTIgLTEwMCBWCisxMyAtOTIgVgorMTIgLTEwNSBWCisxMiAtMTM1IFYKKzEzIC0xNzIgVgorMTIgLTE5NSBWCisxMiAtMjIyIFYKKzEzIC0zNTMgVgorMTIgLTU0OCBWCisxMyA2ODIgVgorMTIgMjczIFYKKzEyIDc5IFYKKzEzIC01OSBWCisxMiAtMTg4IFYKKzEyIC0yMjUgVgorMTMgMzkgVgorMTIgODAgVgorMTMgLTQzIFYKKzEyIC00NCBWCisxMiAxODQgVgorMTMgMjEzIFYKKzEyIDEyNyBWCisxMiA0MiBWCisxMyAtMzcgVgorMTIgLTExNSBWCisxMiAtMTgyIFYKKzEzIC0xNzkgVgorMTIgLTUzIFYKKzEzIDEyIFYKKzEyIDYgVgorMTIgMjAgVgorMTMgMTAgVgorMTIgLTY1IFYKKzEyIC0xOTUgVgorMTMgLTI5NiBWCisxMiA1NiBWCisxMiAxMDAgVgorMTMgLTExOCBWCisxMiAtMTgyIFYKKzEzIDI1MyBWCisxMiAxNTUgVgorMTIgLTUwIFYKKzEzIC0yMjIgVgorMTIgMjEgVgorMTIgMTk3IFYKKzEzIDcgVgorMTIgLTE5NCBWCisxMyAtNzcgVgorMTIgMjQwIFYKKzEyIDczIFYKKzEzIC0xMzIgVgorMS4wMDAgVUwKK0xUMQorTFRiCis2MzExIDQ1OTkgTQorKExQQyBzeW50aGVzaXMgZmlsdGVyKSBSc2hvdworTFQxCis2Mzk1IDQ1OTkgTQorMzk5IDAgVgorNjMwIDQwMzQgTQorMTIgMCBWCisxMyAwIFYKKzEyIDEgVgorMTIgMSBWCisxMyAxIFYKKzEyIDEgVgorMTMgMSBWCisxMiAyIFYKKzEyIDIgVgorMTMgMyBWCisxMiAyIFYKKzEyIDQgVgorMTMgMyBWCisxMiA1IFYKKzEzIDQgVgorMTIgNiBWCisxMiA2IFYKKzEzIDcgVgorMTIgOCBWCisxMiA4IFYKKzEzIDEwIFYKKzEyIDExIFYKKzEyIDExIFYKKzEzIDEzIFYKKzEyIDE1IFYKKzEzIDE2IFYKKzEyIDE3IFYKKzEyIDE5IFYKKzEzIDIxIFYKKzEyIDIzIFYKKzEyIDI1IFYKKzEzIDI3IFYKKzEyIDI5IFYKKzEyIDMxIFYKKzEzIDMyIFYKKzEyIDMzIFYKKzEzIDMzIFYKKzEyIDMwIFYKKzEyIDI2IFYKKzEzIDE2IFYKKzEyIDQgVgorMTIgLTExIFYKKzEzIC0yNiBWCisxMiAtMzggVgorMTMgLTQ5IFYKKzEyIC01NCBWCisxMiAtNTYgVgorMTMgLTU4IFYKKzEyIC01NyBWCisxMiAtNTUgVgorMTMgLTUzIFYKKzEyIC01MiBWCisxMiAtNDkgVgorMTMgLTQ3IFYKKzEyIC00NSBWCisxMyAtNDQgVgorMTIgLTQxIFYKKzEyIC00MCBWCisxMyAtMzggVgorMTIgLTM3IFYKKzEyIC0zNSBWCisxMyAtMzUgVgorMTIgLTMzIFYKKzEyIC0zMSBWCisxMyAtMzEgVgorMTIgLTMwIFYKKzEzIC0yOSBWCisxMiAtMjggVgorMTIgLTI3IFYKKzEzIC0yNiBWCisxMiAtMjYgVgorMTIgLTI0IFYKKzEzIC0yNSBWCisxMiAtMjMgVgorMTMgLTIzIFYKKzEyIC0yMiBWCisxMiAtMjIgVgorMTMgLTIxIFYKKzEyIC0yMCBWCisxMiAtMjAgVgorMTMgLTIwIFYKKzEyIC0xOSBWCisxMiAtMTkgVgorMTMgLTE4IFYKKzEyIC0xNyBWCisxMyAtMTggVgorMTIgLTE3IFYKKzEyIC0xNiBWCisxMyAtMTYgVgorMTIgLTE2IFYKKzEyIC0xNSBWCisxMyAtMTUgVgorMTIgLTE1IFYKKzEzIC0xNCBWCisxMiAtMTQgVgorMTIgLTE0IFYKKzEzIC0xMyBWCisxMiAtMTMgVgorMTIgLTEzIFYKKzEzIC0xMiBWCisxMiAtMTMgVgorMTIgLTExIFYKK3N0cm9rZQorMTg5MSAyODIyIE0KKzEzIC0xMiBWCisxMiAtMTEgVgorMTMgLTExIFYKKzEyIC0xMSBWCisxMiAtMTEgVgorMTMgLTEwIFYKKzEyIC0xMCBWCisxMiAtMTAgVgorMTMgLTEwIFYKKzEyIC05IFYKKzEyIC05IFYKKzEzIC05IFYKKzEyIC04IFYKKzEzIC05IFYKKzEyIC04IFYKKzEyIC04IFYKKzEzIC04IFYKKzEyIC03IFYKKzEyIC04IFYKKzEzIC03IFYKKzEyIC03IFYKKzEzIC03IFYKKzEyIC02IFYKKzEyIC02IFYKKzEzIC03IFYKKzEyIC02IFYKKzEyIC01IFYKKzEzIC02IFYKKzEyIC01IFYKKzEyIC02IFYKKzEzIC01IFYKKzEyIC01IFYKKzEzIC00IFYKKzEyIC01IFYKKzEyIC00IFYKKzEzIC01IFYKKzEyIC00IFYKKzEyIC00IFYKKzEzIC0zIFYKKzEyIC00IFYKKzEzIC0zIFYKKzEyIC00IFYKKzEyIC0zIFYKKzEzIC0zIFYKKzEyIC0yIFYKKzEyIC0zIFYKKzEzIC0zIFYKKzEyIC0yIFYKKzEyIC0yIFYKKzEzIC0yIFYKKzEyIC0yIFYKKzEzIC0yIFYKKzEyIC0yIFYKKzEyIC0xIFYKKzEzIC0yIFYKKzEyIC0xIFYKKzEyIC0xIFYKKzEzIC0yIFYKKzEyIC0xIFYKKzEyIDAgVgorMTMgLTEgVgorMTIgLTEgVgorMTMgMCBWCisxMiAtMSBWCisxMiAwIFYKKzEzIDAgVgorMTIgLTEgVgorMTIgMCBWCisxMyAwIFYKKzEyIDAgVgorMTMgMCBWCisxMiAxIFYKKzEyIDAgVgorMTMgMCBWCisxMiAxIFYKKzEyIDAgVgorMTMgMSBWCisxMiAwIFYKKzEyIDEgVgorMTMgMSBWCisxMiAwIFYKKzEzIDEgVgorMTIgMSBWCisxMiAxIFYKKzEzIDAgVgorMTIgMSBWCisxMiAxIFYKKzEzIDEgVgorMTIgMSBWCisxMiAwIFYKKzEzIDEgVgorMTIgMSBWCisxMyAxIFYKKzEyIDAgVgorMTIgMSBWCisxMyAxIFYKKzEyIDAgVgorMTIgMSBWCisxMyAxIFYKKzEyIDAgVgorMTMgMSBWCisxMiAwIFYKKzEyIDAgVgorMTMgMSBWCitzdHJva2UKKzMxNzggMjUwOCBNCisxMiAwIFYKKzEyIDAgVgorMTMgMCBWCisxMiAwIFYKKzEyIDAgVgorMTMgMCBWCisxMiAwIFYKKzEzIDAgVgorMTIgMCBWCisxMiAtMSBWCisxMyAwIFYKKzEyIC0xIFYKKzEyIDAgVgorMTMgLTEgVgorMTIgMCBWCisxMyAtMSBWCisxMiAtMSBWCisxMiAwIFYKKzEzIC0xIFYKKzEyIC0xIFYKKzEyIC0xIFYKKzEzIC0xIFYKKzEyIC0xIFYKKzEyIDAgVgorMTMgLTEgVgorMTIgLTEgVgorMTMgLTEgVgorMTIgLTEgVgorMTIgLTEgVgorMTMgLTEgVgorMTIgLTEgVgorMTIgLTEgVgorMTMgLTEgVgorMTIgLTEgVgorMTIgMCBWCisxMyAtMSBWCisxMiAtMSBWCisxMyAtMSBWCisxMiAwIFYKKzEyIC0xIFYKKzEzIDAgVgorMTIgLTEgVgorMTIgMCBWCisxMyAwIFYKKzEyIDAgVgorMTMgMCBWCisxMiAwIFYKKzEyIDAgVgorMTMgMCBWCisxMiAwIFYKKzEyIDAgVgorMTMgMSBWCisxMiAxIFYKKzEyIDAgVgorMTMgMSBWCisxMiAxIFYKKzEzIDEgVgorMTIgMiBWCisxMiAxIFYKKzEzIDEgVgorMTIgMiBWCisxMiAyIFYKKzEzIDIgVgorMTIgMiBWCisxMyAyIFYKKzEyIDMgVgorMTIgMiBWCisxMyAzIFYKKzEyIDMgVgorMTIgMyBWCisxMyA0IFYKKzEyIDMgVgorMTIgNCBWCisxMyA0IFYKKzEyIDQgVgorMTMgNCBWCisxMiA0IFYKKzEyIDUgVgorMTMgNSBWCisxMiA1IFYKKzEyIDUgVgorMTMgNiBWCisxMiA2IFYKKzEyIDYgVgorMTMgNiBWCisxMiA2IFYKKzEzIDcgVgorMTIgNyBWCisxMiA3IFYKKzEzIDggVgorMTIgOCBWCisxMiA4IFYKKzEzIDggVgorMTIgOSBWCisxMyA5IFYKKzEyIDkgVgorMTIgOSBWCisxMyAxMCBWCisxMiAxMCBWCisxMiAxMSBWCisxMyAxMSBWCisxMiAxMSBWCisxMiAxMiBWCisxMyAxMiBWCitzdHJva2UKKzQ0NjQgMjc1OSBNCisxMiAxMiBWCisxMyAxMyBWCisxMiAxMyBWCisxMiAxNCBWCisxMyAxNCBWCisxMiAxNSBWCisxMiAxNSBWCisxMyAxNiBWCisxMiAxNiBWCisxMiAxNyBWCisxMyAxNyBWCisxMiAxOCBWCisxMyAxOCBWCisxMiAxOSBWCisxMiAyMCBWCisxMyAyMSBWCisxMiAyMSBWCisxMiAyMiBWCisxMyAyMyBWCisxMiAyMyBWCisxMyAyNCBWCisxMiAyNiBWCisxMiAyNiBWCisxMyAyNiBWCisxMiAyOCBWCisxMiAyOCBWCisxMyAzMCBWCisxMiAyOSBWCisxMiAzMSBWCisxMyAzMCBWCisxMiAzMSBWCisxMyAzMCBWCisxMiAyOSBWCisxMiAyNyBWCisxMyAyNiBWCisxMiAyMiBWCisxMiAxOCBWCisxMyAxMyBWCisxMiA4IFYKKzEzIDIgVgorMTIgLTMgVgorMTIgLTkgVgorMTMgLTEzIFYKKzEyIC0xNiBWCisxMiAtMjAgVgorMTMgLTIxIFYKKzEyIC0yMyBWCisxMiAtMjQgVgorMTMgLTIzIFYKKzEyIC0yNCBWCisxMyAtMjMgVgorMTIgLTIzIFYKKzEyIC0yMiBWCisxMyAtMjEgVgorMTIgLTIxIFYKKzEyIC0yMCBWCisxMyAtMTggVgorMTIgLTE4IFYKKzEyIC0xNyBWCisxMyAtMTYgVgorMTIgLTE2IFYKKzEzIC0xNCBWCisxMiAtMTQgVgorMTIgLTEzIFYKKzEzIC0xMyBWCisxMiAtMTEgVgorMTIgLTExIFYKKzEzIC0xMSBWCisxMiAtMTAgVgorMTMgLTkgVgorMTIgLTggVgorMTIgLTggVgorMTMgLTggVgorMTIgLTYgVgorMTIgLTcgVgorMTMgLTYgVgorMTIgLTUgVgorMTIgLTUgVgorMTMgLTQgVgorMTIgLTQgVgorMTMgLTQgVgorMTIgLTMgVgorMTIgLTMgVgorMTMgLTIgVgorMTIgLTIgVgorMTIgLTIgVgorMTMgLTEgVgorMTIgLTEgVgorMTMgMCBWCisxMiAwIFYKKzEyIDAgVgorMTMgMCBWCisxMiAxIFYKKzEyIDEgVgorMTMgMSBWCisxMiAyIFYKKzEyIDIgVgorMTMgMiBWCisxMiAyIFYKKzEzIDIgVgorMTIgMyBWCisxMiAzIFYKKzEzIDIgVgorMTIgMyBWCitzdHJva2UKKzU3NTAgMzAzOCBNCisxMiAzIFYKKzEzIDMgVgorMTIgMyBWCisxMiAzIFYKKzEzIDMgVgorMTIgMiBWCisxMyAzIFYKKzEyIDIgVgorMTIgMiBWCisxMyAyIFYKKzEyIDIgVgorMTIgMSBWCisxMyAwIFYKKzEyIDEgVgorMTMgMCBWCisxMiAtMSBWCisxMiAtMSBWCisxMyAtMiBWCisxMiAtMiBWCisxMiAtMyBWCisxMyAtNCBWCisxMiAtNCBWCisxMiAtNCBWCisxMyAtNiBWCisxMiAtNSBWCisxMyAtNyBWCisxMiAtNiBWCisxMiAtOCBWCisxMyAtNyBWCisxMiAtOSBWCisxMiAtOCBWCisxMyAtOSBWCisxMiAtOSBWCisxMiAtMTAgVgorMTMgLTkgVgorMTIgLTEwIFYKKzEzIC0xMCBWCisxMiAtMTAgVgorMTIgLTExIFYKKzEzIC0xMCBWCisxMiAtMTAgVgorMTIgLTExIFYKKzEzIC0xMCBWCisxMiAtMTAgVgorMTMgLTExIFYKKzEyIC0xMCBWCisxMiAtMTAgVgorMTMgLTEwIFYKKzEyIC0xMCBWCisxMiAtOSBWCisxMyAtMTAgVgorMTIgLTEwIFYKKzEyIC05IFYKKzEzIC05IFYKKzEyIC05IFYKKzEzIC05IFYKKzEyIC04IFYKKzEyIC04IFYKKzEzIC05IFYKKzEyIC04IFYKKzEyIC03IFYKKzEzIC04IFYKKzEyIC03IFYKKzEzIC03IFYKKzEyIC03IFYKKzEyIC03IFYKKzEzIC03IFYKKzEyIC02IFYKKzEyIC02IFYKKzEzIC02IFYKKzEyIC02IFYKKzEyIC01IFYKKzEzIC01IFYKKzEyIC01IFYKKzEzIC01IFYKKzEyIC01IFYKKzEyIC00IFYKKzEzIC00IFYKKzEyIC00IFYKKzEyIC00IFYKKzEzIC00IFYKKzEyIC0zIFYKKzEyIC0zIFYKKzEzIC0zIFYKKzEyIC0zIFYKKzEzIC0yIFYKKzEyIC0zIFYKKzEyIC0yIFYKKzEzIC0yIFYKKzEyIC0yIFYKKzEyIC0xIFYKKzEzIC0xIFYKKzEyIC0yIFYKKzEzIDAgVgorMTIgLTEgVgorMTIgLTEgVgorMTMgMCBWCisxLjAwMCBVTAorTFQyCitMVGIKKzYzMTEgNDQ1OSBNCisoUmVmZXJlbmNlIHNoYXBpbmcpIFJzaG93CitMVDIKKzYzOTUgNDQ1OSBNCiszOTkgMCBWCis2MzAgMzQ4NyBNCisxMiAwIFYKKzEzIDAgVgorMTIgMSBWCisxMiAwIFYKKzEzIDEgVgorMTIgMSBWCisxMyAxIFYKKzEyIDIgVgorMTIgMSBWCisxMyAyIFYKKzEyIDIgVgorMTIgMiBWCisxMyAyIFYKKzEyIDIgVgorMTMgMyBWCisxMiAyIFYKKzEyIDMgVgorMTMgMyBWCisxMiAzIFYKKzEyIDIgVgorMTMgNCBWCisxMiAzIFYKKzEyIDMgVgorMTMgMyBWCisxMiAzIFYKKzEzIDIgVgorMTIgMyBWCisxMiAzIFYKKzEzIDIgVgorMTIgMiBWCisxMiAxIFYKKzEzIDEgVgorMTIgMSBWCisxMiAwIFYKKzEzIDAgVgorMTIgLTIgVgorMTMgLTIgVgorMTIgLTIgVgorMTIgLTQgVgorMTMgLTQgVgorMTIgLTYgVgorMTIgLTYgVgorMTMgLTcgVgorMTIgLTggVgorMTMgLTggVgorMTIgLTEwIFYKKzEyIC0xMCBWCisxMyAtMTEgVgorMTIgLTEyIFYKKzEyIC0xMiBWCisxMyAtMTMgVgorMTIgLTEzIFYKKzEyIC0xNCBWCisxMyAtMTQgVgorMTIgLTE0IFYKKzEzIC0xNSBWCisxMiAtMTUgVgorMTIgLTE1IFYKKzEzIC0xNSBWCisxMiAtMTUgVgorMTIgLTE1IFYKKzEzIC0xNCBWCisxMiAtMTUgVgorMTIgLTE1IFYKKzEzIC0xNSBWCisxMiAtMTQgVgorMTMgLTE0IFYKKzEyIC0xNSBWCisxMiAtMTMgVgorMTMgLTE0IFYKKzEyIC0xNCBWCisxMiAtMTMgVgorMTMgLTEzIFYKKzEyIC0xMyBWCisxMyAtMTIgVgorMTIgLTEyIFYKKzEyIC0xMiBWCisxMyAtMTIgVgorMTIgLTEyIFYKKzEyIC0xMSBWCisxMyAtMTEgVgorMTIgLTExIFYKKzEyIC0xMCBWCisxMyAtMTAgVgorMTIgLTEwIFYKKzEzIC0xMCBWCisxMiAtMTAgVgorMTIgLTkgVgorMTMgLTkgVgorMTIgLTkgVgorMTIgLTkgVgorMTMgLTggVgorMTIgLTggVgorMTMgLTggVgorMTIgLTggVgorMTIgLTggVgorMTMgLTcgVgorMTIgLTcgVgorMTIgLTcgVgorMTMgLTcgVgorMTIgLTYgVgorMTIgLTcgVgorc3Ryb2tlCisxODkxIDI4NDcgTQorMTMgLTYgVgorMTIgLTYgVgorMTMgLTYgVgorMTIgLTUgVgorMTIgLTYgVgorMTMgLTUgVgorMTIgLTUgVgorMTIgLTUgVgorMTMgLTUgVgorMTIgLTUgVgorMTIgLTQgVgorMTMgLTUgVgorMTIgLTQgVgorMTMgLTQgVgorMTIgLTQgVgorMTIgLTQgVgorMTMgLTQgVgorMTIgLTMgVgorMTIgLTQgVgorMTMgLTMgVgorMTIgLTMgVgorMTMgLTMgVgorMTIgLTMgVgorMTIgLTMgVgorMTMgLTIgVgorMTIgLTMgVgorMTIgLTIgVgorMTMgLTMgVgorMTIgLTIgVgorMTIgLTIgVgorMTMgLTIgVgorMTIgLTIgVgorMTMgLTIgVgorMTIgLTEgVgorMTIgLTIgVgorMTMgLTEgVgorMTIgLTIgVgorMTIgLTEgVgorMTMgLTEgVgorMTIgLTEgVgorMTMgLTIgVgorMTIgMCBWCisxMiAtMSBWCisxMyAtMSBWCisxMiAtMSBWCisxMiAtMSBWCisxMyAwIFYKKzEyIC0xIFYKKzEyIDAgVgorMTMgMCBWCisxMiAtMSBWCisxMyAwIFYKKzEyIDAgVgorMTIgMCBWCisxMyAwIFYKKzEyIDAgVgorMTIgMCBWCisxMyAwIFYKKzEyIDAgVgorMTIgMSBWCisxMyAwIFYKKzEyIDAgVgorMTMgMSBWCisxMiAwIFYKKzEyIDAgVgorMTMgMSBWCisxMiAwIFYKKzEyIDEgVgorMTMgMSBWCisxMiAwIFYKKzEzIDEgVgorMTIgMSBWCisxMiAwIFYKKzEzIDEgVgorMTIgMSBWCisxMiAxIFYKKzEzIDAgVgorMTIgMSBWCisxMiAxIFYKKzEzIDEgVgorMTIgMSBWCisxMyAxIFYKKzEyIDAgVgorMTIgMSBWCisxMyAxIFYKKzEyIDEgVgorMTIgMSBWCisxMyAxIFYKKzEyIDEgVgorMTIgMCBWCisxMyAxIFYKKzEyIDEgVgorMTMgMSBWCisxMiAwIFYKKzEyIDEgVgorMTMgMSBWCisxMiAxIFYKKzEyIDAgVgorMTMgMSBWCisxMiAxIFYKKzEzIDAgVgorMTIgMSBWCisxMiAwIFYKKzEzIDEgVgorc3Ryb2tlCiszMTc4IDI3MzYgTQorMTIgMCBWCisxMiAxIFYKKzEzIDAgVgorMTIgMSBWCisxMiAwIFYKKzEzIDAgVgorMTIgMSBWCisxMyAwIFYKKzEyIDAgVgorMTIgMCBWCisxMyAxIFYKKzEyIDAgVgorMTIgMCBWCisxMyAwIFYKKzEyIDAgVgorMTMgMCBWCisxMiAwIFYKKzEyIDAgVgorMTMgMCBWCisxMiAwIFYKKzEyIDAgVgorMTMgMCBWCisxMiAwIFYKKzEyIDAgVgorMTMgMCBWCisxMiAwIFYKKzEzIDAgVgorMTIgMCBWCisxMiAwIFYKKzEzIDAgVgorMTIgMCBWCisxMiAwIFYKKzEzIDAgVgorMTIgLTEgVgorMTIgMCBWCisxMyAwIFYKKzEyIDAgVgorMTMgMCBWCisxMiAxIFYKKzEyIDAgVgorMTMgMCBWCisxMiAwIFYKKzEyIDAgVgorMTMgMCBWCisxMiAwIFYKKzEzIDEgVgorMTIgMCBWCisxMiAwIFYKKzEzIDEgVgorMTIgMCBWCisxMiAxIFYKKzEzIDEgVgorMTIgMCBWCisxMiAxIFYKKzEzIDEgVgorMTIgMSBWCisxMyAwIFYKKzEyIDEgVgorMTIgMiBWCisxMyAxIFYKKzEyIDEgVgorMTIgMSBWCisxMyAyIFYKKzEyIDEgVgorMTMgMiBWCisxMiAxIFYKKzEyIDIgVgorMTMgMiBWCisxMiAyIFYKKzEyIDIgVgorMTMgMiBWCisxMiAzIFYKKzEyIDIgVgorMTMgMyBWCisxMiAyIFYKKzEzIDMgVgorMTIgMyBWCisxMiAzIFYKKzEzIDMgVgorMTIgMyBWCisxMiA0IFYKKzEzIDMgVgorMTIgNCBWCisxMiA0IFYKKzEzIDQgVgorMTIgNCBWCisxMyA0IFYKKzEyIDUgVgorMTIgNCBWCisxMyA1IFYKKzEyIDUgVgorMTIgNSBWCisxMyA1IFYKKzEyIDUgVgorMTMgNiBWCisxMiA2IFYKKzEyIDYgVgorMTMgNiBWCisxMiA2IFYKKzEyIDYgVgorMTMgNyBWCisxMiA2IFYKKzEyIDcgVgorMTMgNyBWCitzdHJva2UKKzQ0NjQgMjkxOCBNCisxMiA4IFYKKzEzIDcgVgorMTIgOCBWCisxMiA3IFYKKzEzIDggVgorMTIgOCBWCisxMiA5IFYKKzEzIDggVgorMTIgOSBWCisxMiA4IFYKKzEzIDkgVgorMTIgOSBWCisxMyA5IFYKKzEyIDkgVgorMTIgOSBWCisxMyA5IFYKKzEyIDEwIFYKKzEyIDkgVgorMTMgOSBWCisxMiAxMCBWCisxMyA5IFYKKzEyIDkgVgorMTIgOSBWCisxMyA5IFYKKzEyIDkgVgorMTIgOCBWCisxMyA4IFYKKzEyIDggVgorMTIgOCBWCisxMyA3IFYKKzEyIDcgVgorMTMgNiBWCisxMiA2IFYKKzEyIDYgVgorMTMgNCBWCisxMiA1IFYKKzEyIDMgVgorMTMgMyBWCisxMiAzIFYKKzEzIDEgVgorMTIgMSBWCisxMiAxIFYKKzEzIDAgVgorMTIgLTEgVgorMTIgLTEgVgorMTMgLTIgVgorMTIgLTIgVgorMTIgLTMgVgorMTMgLTQgVgorMTIgLTMgVgorMTMgLTQgVgorMTIgLTUgVgorMTIgLTQgVgorMTMgLTUgVgorMTIgLTUgVgorMTIgLTUgVgorMTMgLTUgVgorMTIgLTYgVgorMTIgLTUgVgorMTMgLTYgVgorMTIgLTUgVgorMTMgLTYgVgorMTIgLTUgVgorMTIgLTUgVgorMTMgLTUgVgorMTIgLTYgVgorMTIgLTUgVgorMTMgLTUgVgorMTIgLTQgVgorMTMgLTUgVgorMTIgLTQgVgorMTIgLTUgVgorMTMgLTQgVgorMTIgLTQgVgorMTIgLTQgVgorMTMgLTMgVgorMTIgLTQgVgorMTIgLTMgVgorMTMgLTMgVgorMTIgLTMgVgorMTMgLTMgVgorMTIgLTMgVgorMTIgLTIgVgorMTMgLTIgVgorMTIgLTIgVgorMTIgLTIgVgorMTMgLTIgVgorMTIgLTIgVgorMTMgLTEgVgorMTIgLTIgVgorMTIgLTEgVgorMTMgLTEgVgorMTIgLTEgVgorMTIgLTEgVgorMTMgLTEgVgorMTIgMCBWCisxMiAtMSBWCisxMyAtMSBWCisxMiAwIFYKKzEzIC0xIFYKKzEyIDAgVgorMTIgMCBWCisxMyAtMSBWCisxMiAwIFYKK3N0cm9rZQorNTc1MCAzMDM2IE0KKzEyIDAgVgorMTMgLTEgVgorMTIgMCBWCisxMiAwIFYKKzEzIC0xIFYKKzEyIDAgVgorMTMgLTEgVgorMTIgMCBWCisxMiAtMSBWCisxMyAtMSBWCisxMiAwIFYKKzEyIC0xIFYKKzEzIC0xIFYKKzEyIC0yIFYKKzEzIC0xIFYKKzEyIC0xIFYKKzEyIC0yIFYKKzEzIC0xIFYKKzEyIC0yIFYKKzEyIC0yIFYKKzEzIC0yIFYKKzEyIC0zIFYKKzEyIC0yIFYKKzEzIC0zIFYKKzEyIC0yIFYKKzEzIC0zIFYKKzEyIC0zIFYKKzEyIC0zIFYKKzEzIC00IFYKKzEyIC0zIFYKKzEyIC00IFYKKzEzIC0zIFYKKzEyIC00IFYKKzEyIC00IFYKKzEzIC00IFYKKzEyIC00IFYKKzEzIC00IFYKKzEyIC00IFYKKzEyIC01IFYKKzEzIC00IFYKKzEyIC00IFYKKzEyIC01IFYKKzEzIC00IFYKKzEyIC01IFYKKzEzIC00IFYKKzEyIC01IFYKKzEyIC01IFYKKzEzIC00IFYKKzEyIC01IFYKKzEyIC00IFYKKzEzIC01IFYKKzEyIC00IFYKKzEyIC00IFYKKzEzIC01IFYKKzEyIC00IFYKKzEzIC00IFYKKzEyIC01IFYKKzEyIC00IFYKKzEzIC00IFYKKzEyIC00IFYKKzEyIC00IFYKKzEzIC00IFYKKzEyIC00IFYKKzEzIC0zIFYKKzEyIC00IFYKKzEyIC00IFYKKzEzIC0zIFYKKzEyIC0zIFYKKzEyIC00IFYKKzEzIC0zIFYKKzEyIC0zIFYKKzEyIC0zIFYKKzEzIC0zIFYKKzEyIC0zIFYKKzEzIC0yIFYKKzEyIC0zIFYKKzEyIC0yIFYKKzEzIC0zIFYKKzEyIC0yIFYKKzEyIC0yIFYKKzEzIC0yIFYKKzEyIC0yIFYKKzEyIC0yIFYKKzEzIC0xIFYKKzEyIC0yIFYKKzEzIC0xIFYKKzEyIC0yIFYKKzEyIC0xIFYKKzEzIC0xIFYKKzEyIC0xIFYKKzEyIC0xIFYKKzEzIC0xIFYKKzEyIDAgVgorMTMgLTEgVgorMTIgMCBWCisxMiAwIFYKKzEzIC0xIFYKKzEuMDAwIFVMCitMVGIKKzYzMCA0MjAgTQorNjMzMiAwIFYKKzAgNDQ1MiBWCistNjMzMiAwIFYKKzYzMCA0MjAgTAorMS4wMDAgVVAKK3N0cm9rZQorZ3Jlc3RvcmUKK2VuZAorc2hvd3BhZ2UKKyUlVHJhaWxlcgorJSVEb2N1bWVudEZvbnRzOiBIZWx2ZXRpY2EKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2RvYy9ydHAudHh0IGIvM3JkcGFydHkvc3BlZXgvZG9jL3J0cC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMyNTE1MwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2RvYy9ydHAudHh0CkBAIC0wLDAgKzEsNzYgQEAKK1RoZSBTcGVleCBSVFAgcGF5bG9hZCBpcyBkZWZpbmVkIGFzIGEgaGVhZGVyLCBmb2xsb3dlZCBieSBhbnkgbnVtYmVyIG9mCityZXF1ZXN0cyB0byB0aGUgcmVtb3RlIGVuY29kZXIgYW5kIGFsbCBlbmNvZGVkIHNwZWVjaCBmcmFtZXMuCisKKystLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCit8IEhlYWRlciB8IFJlcXVlc3RzIHwgU3BlZWNoIGRhdGEuLi4gfAorKy0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKworVGhlIGhlYWRlciBjb250YWlucyBvbmx5IHRoZSBudW1iZXIgb2YgZnJhbWVzIHNlbnQgCitlbmNvZGVkIGluIDYgYml0cworCisgMCAxIDIgMyA0IDUgCisrLSstKy0rLSstKy0rCit8IE5CIGZyYW1lcyB8CisrLSstKy0rLSstKy0rCisKK1RoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mIHJlcXVlc3RzIG9mIHRoZSBmb3JtCisKKyAwIDEgMiAzIDQgNSA2IDcgMCAxCisrLSstKy0rLSstKy0rLSstKy0rLSsKK3xSfCBSZXFJRCB8IFJlcVZhbCAgfAorKy0rLSstKy0rLSstKy0rLSstKy0rCisKK3doZXJlIFIgaXMgMSB3aGVuIGEgcmVxdWVzdCBpcyBmb2xsb3dpbmcgYW5kIDAgd2hlbiB0aGVyZSBpcyBubyBtb3JlCityZXF1ZXN0LiBFYWNoIHJlcXVlc3QgKGlmIFI9MSkgaXMgY29tcG9zZWQgb2YgYSA0LWJpdCByZXF1ZXN0IElEIChSZXFJRCkgYW5kCithIDUtYml0IHZhbHVlIChSZXFWYWwpCisKK1Bvc3NpYmxlIHZhbHVlcyBmb3IgUmVxSUQgYXJlOgorIDA6IFJFUV9QRVJTSVNUICAgUmVxVmFsPTEgZm9yIHBlcnNpc3RlbnQgcmVxdWVzdHMvbW9kZSBzZWxlY3Rpb24sIAorICAgICAgICAgICAgICAgICAgMCBvdGhlcndpc2UKKyAxOiBQRVJTSVNUX0FDSyAgIEFja25vd2xlZGdlIGEgUkVRX1BFUlNJU1QgZnJvbSB0aGUgb3RoZXIgZW5kLCAKKyAgICAgICAgICAgICAgICAgIFJlcVZhbCBlcXVhbHMgdGhlIHZhbHVlIHJlY2VpdmVkCisgMjogTU9ERSAgICAgICAgICBDaG9vc2UgdGhlIGVuY29kZXIgbW9kZSBkaXJlY3RseQorIDM6IFFVQUxJVFkgICAgICAgQ2hvb3NlIHRoZSBlbmNvZGVyIHF1YWxpdHkKKyA0OiBWQlIgICAgICAgICAgIFNldCBWQlIgb24gKFJlcVZhbD0xKSBvciBvZmYgKFJlcVZhbD0yKQorIDU6IFZCUl9RVUFMSVRZICAgU2V0IHRoZSBlbmNvZGVyIHF1YWxpdHkgZm9yIFZCUiBtb2RlCisgNjogTE9XX01PREUgICAgICBTZXQgdGhlIGVuY29kZXIgbW9kZSBmb3IgbG93LWJhbmQgKHdpZGViYW5kIG9ubHkpCisgNzogSElHSF9NT0RFICAgICBTZXQgdGhlIGVuY29kZXIgbW9kZSBmb3IgaGlnaC1iYW5kICh3aWRlYmFuZCBvbmx5KQorCitBbGwgcmVxdWVzdHMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYXQgdGhlIHJlY2VpdmVyIGFzIGEgc3VnZ2VzdGlvbiBhbmQKK2NvbXBsaWFuY2UgaXMgbm90IG1hbmRhdG9yeS4gVGhlIFBFUlNJU1RfQUNLIHNob3VsZCBiZSBzZW50IHVwb24gcmVjZWl2aW5nIGEKK1JFUV9QRVJTSVNUIHJlcXVlc3QgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcmVxdWVzdCBoYXMgYmVlbiByZWNlaXZlZC4KKworVGhlIHNwZWVjaCBkYXRhIHBhcnQgY29udGFpbnMgc3BlZWNoIGZyYW1lcyBvbmUgYWZ0ZXIgdGhlIG90aGVyLiBUaGUgc2l6ZSBvZgordGhlIGVuY29kZWQgZnJhbWVzIGNhbiBiZSBmb3VuZCBzaW5jZSB0aGUgbW9kZSBpcyBkaXJlY3RseSBlbmNvZGVkIGludG8gZWFjaAorZnJhbWUuCisKK0ZvciBleGFtcGxlLCBhIGZyYW1lIHdoZXJlIHdlIHJlcXVlc3QgVkJSIHRvIGJlIG9uIHdpdGggcXVhbGl0eSA4IGFuZCB3ZQordHJhbnNtaXQgdHdvIGZyYW1lcyBlbmNvZGVkIGF0IDguMzUga2JwcyAoMTY3IGJpdHMvZnJhbWUpIHdpbGwgYmU6CisKKyAwICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAzCisgMCAxIDIgMyA0IDUgNiA3IDAgMSAyIDMgNCA1IDYgNyAwIDEgMiAzIDQgNSA2IDcgMCAxIDIgMyA0IDUgNiA3CisrLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworfCAgIE5CPTIgICAgfDF8UmVxSUQ9MnwgUmVxVmFsPTB8MXxSZXFJRD0zfFJlcVZhbD04IHwwfCBmcmFtZSAxIHwKKystKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworfCAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworfGVuZHwgICAgICAgICAgICAgICAgICAgICBmcmFtZSAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworfCAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKK3wgICAgZW5kIGZyYW1lIDIgICAgfFB8UHxQfFB8UHxQfAorKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9kb2Mvc2FtcGxlZGVjLmMgYi8zcmRwYXJ0eS9zcGVleC9kb2Mvc2FtcGxlZGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3OGM0NwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2RvYy9zYW1wbGVkZWMuYwpAQCAtMCwwICsxLDY1IEBACisjaW5jbHVkZSA8c3BlZXgvc3BlZXguaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKlRoZSBmcmFtZSBzaXplIGluIGhhcmRjb2RlZCBmb3IgdGhpcyBzYW1wbGUgY29kZSBidXQgaXQgZG9lc24ndCBoYXZlIHRvIGJlKi8KKyNkZWZpbmUgRlJBTUVfU0laRSAxNjAKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgIGNoYXIgKm91dEZpbGU7CisgICBGSUxFICpmb3V0OworICAgLypIb2xkcyB0aGUgYXVkaW8gdGhhdCB3aWxsIGJlIHdyaXR0ZW4gdG8gZmlsZSAoMTYgYml0cyBwZXIgc2FtcGxlKSovCisgICBzaG9ydCBvdXRbRlJBTUVfU0laRV07CisgICAvKlNwZWV4IGhhbmRsZSBzYW1wbGVzIGFzIGZsb2F0LCBzbyB3ZSBuZWVkIGFuIGFycmF5IG9mIGZsb2F0cyovCisgICBmbG9hdCBvdXRwdXRbRlJBTUVfU0laRV07CisgICBjaGFyIGNiaXRzWzIwMF07CisgICBpbnQgbmJCeXRlczsKKyAgIC8qSG9sZHMgdGhlIHN0YXRlIG9mIHRoZSBkZWNvZGVyKi8KKyAgIHZvaWQgKnN0YXRlOworICAgLypIb2xkcyBiaXRzIHNvIHRoZXkgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4gdG8gYnkgdGhlIFNwZWV4IHJvdXRpbmVzKi8KKyAgIFNwZWV4Qml0cyBiaXRzOworICAgaW50IGksIHRtcDsKKworICAgLypDcmVhdGUgYSBuZXcgZGVjb2RlciBzdGF0ZSBpbiBuYXJyb3diYW5kIG1vZGUqLworICAgc3RhdGUgPSBzcGVleF9kZWNvZGVyX2luaXQoJnNwZWV4X25iX21vZGUpOworCisgICAvKlNldCB0aGUgcGVyY2VwdHVhbCBlbmhhbmNlbWVudCBvbiovCisgICB0bXA9MTsKKyAgIHNwZWV4X2RlY29kZXJfY3RsKHN0YXRlLCBTUEVFWF9TRVRfRU5ILCAmdG1wKTsKKworICAgb3V0RmlsZSA9IGFyZ3ZbMV07CisgICBmb3V0ID0gZm9wZW4ob3V0RmlsZSwgInciKTsKKworICAgLypJbml0aWFsaXphdGlvbiBvZiB0aGUgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIGJpdHMqLworICAgc3BlZXhfYml0c19pbml0KCZiaXRzKTsKKyAgIHdoaWxlICgxKQorICAgeworICAgICAgLypSZWFkIHRoZSBzaXplIGVuY29kZWQgYnkgc2FtcGxlZW5jLCB0aGlzIHBhcnQgd2lsbCBsaWtlbHkgYmUgCisgICAgICAgIGRpZmZlcmVudCBpbiB5b3VyIGFwcGxpY2F0aW9uKi8KKyAgICAgIGZyZWFkKCZuYkJ5dGVzLCBzaXplb2YoaW50KSwgMSwgc3RkaW4pOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAibmJCeXRlczogJWRcbiIsIG5iQnl0ZXMpOworICAgICAgaWYgKGZlb2Yoc3RkaW4pKQorICAgICAgICAgYnJlYWs7CisgICAgICAKKyAgICAgIC8qUmVhZCB0aGUgInBhY2tldCIgZW5jb2RlZCBieSBzYW1wbGVlbmMqLworICAgICAgZnJlYWQoY2JpdHMsIDEsIG5iQnl0ZXMsIHN0ZGluKTsKKyAgICAgIC8qQ29weSB0aGUgZGF0YSBpbnRvIHRoZSBiaXQtc3RyZWFtIHN0cnVjdCovCisgICAgICBzcGVleF9iaXRzX3JlYWRfZnJvbSgmYml0cywgY2JpdHMsIG5iQnl0ZXMpOworCisgICAgICAvKkRlY29kZSB0aGUgZGF0YSovCisgICAgICBzcGVleF9kZWNvZGUoc3RhdGUsICZiaXRzLCBvdXRwdXQpOworCisgICAgICAvKkNvcHkgZnJvbSBmbG9hdCB0byBzaG9ydCAoMTYgYml0cykgZm9yIG91dHB1dCovCisgICAgICBmb3IgKGk9MDtpPEZSQU1FX1NJWkU7aSsrKQorICAgICAgICAgb3V0W2ldPW91dHB1dFtpXTsKKworICAgICAgLypXcml0ZSB0aGUgZGVjb2RlZCBhdWRpbyB0byBmaWxlKi8KKyAgICAgIGZ3cml0ZShvdXQsIHNpemVvZihzaG9ydCksIEZSQU1FX1NJWkUsIGZvdXQpOworICAgfQorICAgCisgICAvKkRlc3Ryb3kgdGhlIGRlY29kZXIgc3RhdGUqLworICAgc3BlZXhfZGVjb2Rlcl9kZXN0cm95KHN0YXRlKTsKKyAgIC8qRGVzdHJveSB0aGUgYml0LXN0cmVhbSB0cnVjdCovCisgICBzcGVleF9iaXRzX2Rlc3Ryb3koJmJpdHMpOworICAgZmNsb3NlKGZvdXQpOworICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9kb2Mvc2FtcGxlZW5jLmMgYi8zcmRwYXJ0eS9zcGVleC9kb2Mvc2FtcGxlZW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwODE4MQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2RvYy9zYW1wbGVlbmMuYwpAQCAtMCwwICsxLDY0IEBACisjaW5jbHVkZSA8c3BlZXgvc3BlZXguaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKlRoZSBmcmFtZSBzaXplIGluIGhhcmRjb2RlZCBmb3IgdGhpcyBzYW1wbGUgY29kZSBidXQgaXQgZG9lc24ndCBoYXZlIHRvIGJlKi8KKyNkZWZpbmUgRlJBTUVfU0laRSAxNjAKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgIGNoYXIgKmluRmlsZTsKKyAgIEZJTEUgKmZpbjsKKyAgIHNob3J0IGluW0ZSQU1FX1NJWkVdOworICAgZmxvYXQgaW5wdXRbRlJBTUVfU0laRV07CisgICBjaGFyIGNiaXRzWzIwMF07CisgICBpbnQgbmJCeXRlczsKKyAgIC8qSG9sZHMgdGhlIHN0YXRlIG9mIHRoZSBlbmNvZGVyKi8KKyAgIHZvaWQgKnN0YXRlOworICAgLypIb2xkcyBiaXRzIHNvIHRoZXkgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4gdG8gYnkgdGhlIFNwZWV4IHJvdXRpbmVzKi8KKyAgIFNwZWV4Qml0cyBiaXRzOworICAgaW50IGksIHRtcDsKKworICAgLypDcmVhdGUgYSBuZXcgZW5jb2RlciBzdGF0ZSBpbiBuYXJyb3diYW5kIG1vZGUqLworICAgc3RhdGUgPSBzcGVleF9lbmNvZGVyX2luaXQoJnNwZWV4X25iX21vZGUpOworCisgICAvKlNldCB0aGUgcXVhbGl0eSB0byA4ICgxNSBrYnBzKSovCisgICB0bXA9ODsKKyAgIHNwZWV4X2VuY29kZXJfY3RsKHN0YXRlLCBTUEVFWF9TRVRfUVVBTElUWSwgJnRtcCk7CisKKyAgIGluRmlsZSA9IGFyZ3ZbMV07CisgICBmaW4gPSBmb3BlbihpbkZpbGUsICJyIik7CisKKyAgIC8qSW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSBiaXRzKi8KKyAgIHNwZWV4X2JpdHNfaW5pdCgmYml0cyk7CisgICB3aGlsZSAoMSkKKyAgIHsKKyAgICAgIC8qUmVhZCBhIDE2IGJpdHMvc2FtcGxlIGF1ZGlvIGZyYW1lKi8KKyAgICAgIGZyZWFkKGluLCBzaXplb2Yoc2hvcnQpLCBGUkFNRV9TSVpFLCBmaW4pOworICAgICAgaWYgKGZlb2YoZmluKSkKKyAgICAgICAgIGJyZWFrOworICAgICAgLypDb3B5IHRoZSAxNiBiaXRzIHZhbHVlcyB0byBmbG9hdCBzbyBTcGVleCBjYW4gd29yayBvbiB0aGVtKi8KKyAgICAgIGZvciAoaT0wO2k8RlJBTUVfU0laRTtpKyspCisgICAgICAgICBpbnB1dFtpXT1pbltpXTsKKworICAgICAgLypGbHVzaCBhbGwgdGhlIGJpdHMgaW4gdGhlIHN0cnVjdCBzbyB3ZSBjYW4gZW5jb2RlIGEgbmV3IGZyYW1lKi8KKyAgICAgIHNwZWV4X2JpdHNfcmVzZXQoJmJpdHMpOworCisgICAgICAvKkVuY29kZSB0aGUgZnJhbWUqLworICAgICAgc3BlZXhfZW5jb2RlKHN0YXRlLCBpbnB1dCwgJmJpdHMpOworICAgICAgLypDb3B5IHRoZSBiaXRzIHRvIGFuIGFycmF5IG9mIGNoYXIgdGhhdCBjYW4gYmUgd3JpdHRlbiovCisgICAgICBuYkJ5dGVzID0gc3BlZXhfYml0c193cml0ZSgmYml0cywgY2JpdHMsIDIwMCk7CisKKyAgICAgIC8qV3JpdGUgdGhlIHNpemUgb2YgdGhlIGZyYW1lIGZpcnN0LiBUaGlzIGlzIHdoYXQgc2FtcGxlZGVjIGV4cGVjdHMgYnV0CisgICAgICAgaXQncyBsaWtlbHkgdG8gYmUgZGlmZmVyZW50IGluIHlvdXIgb3duIGFwcGxpY2F0aW9uKi8KKyAgICAgIGZ3cml0ZSgmbmJCeXRlcywgc2l6ZW9mKGludCksIDEsIHN0ZG91dCk7CisgICAgICAvKldyaXRlIHRoZSBjb21wcmVzc2VkIGRhdGEqLworICAgICAgZndyaXRlKGNiaXRzLCAxLCBuYkJ5dGVzLCBzdGRvdXQpOworICAgICAgCisgICB9CisgICAKKyAgIC8qRGVzdHJveSB0aGUgZW5jb2RlciBzdGF0ZSovCisgICBzcGVleF9lbmNvZGVyX2Rlc3Ryb3koc3RhdGUpOworICAgLypEZXN0cm95IHRoZSBiaXQtcGFja2luZyBzdHJ1Y3QqLworICAgc3BlZXhfYml0c19kZXN0cm95KCZiaXRzKTsKKyAgIGZjbG9zZShmaW4pOworICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9kb2Mvc3BlZXhfYWJzLmVwcyBiLzNyZHBhcnR5L3NwZWV4L2RvYy9zcGVleF9hYnMuZXBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OWMwNzEKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9kb2Mvc3BlZXhfYWJzLmVwcwpAQCAtMCwwICsxLDMwMjIgQEAKKyUhUFMtQWRvYmUtMy4wIEVQU0YtMy4wIAorJSVCb3VuZGluZ0JveDogMCAwIDQzNyA2MjQKKyUlUGFnZXM6IDAKKyUlQ3JlYXRvcjogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorJSVUaXRsZTogbm9uZQorJSVDcmVhdGlvbkRhdGU6IG5vbmUKKyUlTGFuZ3VhZ2VMZXZlbDogMgorJSVFbmRDb21tZW50cworJSVCZWdpblByb2xvZworJSVCZWdpblJlc291cmNlOiBTRFJlcworL2I0X2luY19zdGF0ZSBzYXZlIGRlZgorL2RpY3RfY291bnQgY291bnRkaWN0c3RhY2sgZGVmCisvb3BfY291bnQgY291bnQgMSBzdWIgZGVmCit1c2VyZGljdCBiZWdpbgorMCBzZXRncmF5IDAgc2V0bGluZWNhcCAxIHNldGxpbmV3aWR0aCAwIHNldGxpbmVqb2luIDEwIHNldG1pdGVybGltaXRbXSAwIHNldGRhc2ggbmV3cGF0aAorL2xhbmd1YWdlbGV2ZWwgd2hlcmUge3BvcCBsYW5ndWFnZWxldmVsIDEgbmUge2ZhbHNlIHNldHN0cm9rZWFkanVzdCBmYWxzZSBzZXRvdmVycHJpbnR9IGlmfSBpZgorL2JkZWYge2JpbmQgZGVmfSBiaW5kIGRlZgorL2Mge3NldGdyYXl9IGJkZWYKKy9sIHtuZWcgbGluZXRvfSBiZGVmCisvcmwge25lZyBybGluZXRvfSBiZGVmCisvbGMge3NldGxpbmVjYXB9IGJkZWYKKy9saiB7c2V0bGluZWpvaW59IGJkZWYKKy9sdyB7c2V0bGluZXdpZHRofSBiZGVmCisvbWwge3NldG1pdGVybGltaXR9IGJkZWYKKy9sZCB7c2V0ZGFzaH0gYmRlZgorL20ge25lZyBtb3ZldG99IGJkZWYKKy9jdCB7NiAyIHJvbGwgbmVnIDYgMiByb2xsIG5lZyA2IDIgcm9sbCBuZWcgY3VydmV0b30gYmRlZgorL3Ige3JvdGF0ZX0gYmRlZgorL3Qge25lZyB0cmFuc2xhdGV9IGJkZWYKKy9zIHtzY2FsZX0gYmRlZgorL3N3IHtzaG93fSBiZGVmCisvZ3Mge2dzYXZlfSBiZGVmCisvZ3Ige2dyZXN0b3JlfSBiZGVmCisvZiB7ZmluZGZvbnQgZHVwIGxlbmd0aCBkaWN0IGJlZ2luCit7MSBpbmRleCAvRklEIG5lIHtkZWZ9IHtwb3AgcG9wfSBpZmVsc2V9IGZvcmFsbCAvRW5jb2RpbmcgSVNPTGF0aW4xRW5jb2RpbmcgZGVmCitjdXJyZW50ZGljdCBlbmQgL05Gb250IGV4Y2ggZGVmaW5lZm9udCBwb3AgL05Gb250IGZpbmRmb250fSBiZGVmCisvcCB7Y2xvc2VwYXRofSBiZGVmCisvc2Yge3NjYWxlZm9udCBzZXRmb250fSBiZGVmCisvZWYge2VvZmlsbH1iZGVmCisvcGMge2Nsb3NlcGF0aCBzdHJva2V9YmRlZgorL3BzIHtzdHJva2V9YmRlZgorL3B1bSB7bWF0cml4IGN1cnJlbnRtYXRyaXh9YmRlZgorL3BvbSB7c2V0bWF0cml4fWJkZWYKKy9icyB7L2FTdHJpbmcgZXhjaCBkZWYgL25YT2ZzIGV4Y2ggZGVmIC9uV2lkdGggZXhjaCBkZWYgY3VycmVudHBvaW50IG5YT2ZzIDAgcm1vdmV0byBwdW0gbldpZHRoIGFTdHJpbmcgc3RyaW5nd2lkdGggcG9wIGRpdiAxIHNjYWxlIGFTdHJpbmcgc2hvdyBwb20gbW92ZXRvfSBiZGVmCislJUVuZFJlc291cmNlCislJUVuZFByb2xvZworJSVCZWdpblNldHVwCislJUVuZFNldHVwCislJVBhZ2U6IDEgMQorJSVCZWdpblBhZ2VTZXR1cAorJSVFbmRQYWdlU2V0dXAKK3B1bQorMC4wMjgzNCAwLjAyODM0IHMgCiswIC0yMjAxMSB0CisvdG0gbWF0cml4IGN1cnJlbnRtYXRyaXggZGVmCit0bSBzZXRtYXRyaXgKKy0yNDM1IC0zMDM1IHQgCisxIDEgcyAKKzUwIGx3IDEgbGogMC4wMDAgYyA0Mzg1IDczMzUgbSAgMzEzNSA3MzM1IGwgIDMxMzUgNTgzNSBsICA1NjM1IDU4MzUgbCAgNTYzNSA3MzM1IGwgCis0Mzg1IDczMzUgbCAgcGMKKzQzODUgMTAxMzUgbSAgMzk3MSAxMDEzNSAzNjM1IDk3OTkgMzYzNSA5Mzg1IGN0IDM2MzUgODk3MSAzOTcxIDg2MzUgNDM4NSA4NjM1IGN0IAorNDc5OSA4NjM1IDUxMzUgODk3MSA1MTM1IDkzODUgY3QgNTEzNSA5Nzk5IDQ3OTkgMTAxMzUgNDM4NSAxMDEzNSBjdCBwYworZ3MKK2dzCitwdW0KKzQxMDIgOTcyMiB0CisyNDYgLTExNSBtICAyNDYgLTMwOSBsICA1NCAtMzA5IGwgIDU0IC0zOTAgbCAgMjQ2IC0zOTAgbCAgMjQ2IC01ODIgbCAgMzI4IC01ODIgbCAKKzMyOCAtMzkwIGwgIDUyMCAtMzkwIGwgIDUyMCAtMzA5IGwgIDMyOCAtMzA5IGwgIDMyOCAtMTE1IGwgIDI0NiAtMTE1IGwgCitwIGVmCitwb20KK2dyCitncgorZ3MKK2dzCitwdW0KKzM2MjYgMzY3MSB0CisxODEgLTI2MCBtICAxODEgLTI2MCAxODEgLTI2MCAxODEgLTE3NCBjdCAxODEgLTE3NCAxODEgLTE3NCAxNzEgLTE3NCBjdCAxNjQgLTIwMSAxNTUgLTIyMCAxNDUgLTIyOSBjdCAKKzEzNCAtMjM5IDEyMCAtMjQ0IDEwMyAtMjQ0IGN0IDkxIC0yNDQgODAgLTI0MSA3MyAtMjM0IGN0IDY1IC0yMjcgNjEgLTIxOSA2MSAtMjExIGN0IAorNjEgLTIwMSA2NCAtMTkyIDcwIC0xODUgY3QgNzUgLTE3NyA4NyAtMTY5IDEwNCAtMTYxIGN0IDEwNCAtMTYxIDEwNCAtMTYxIDE0NCAtMTQxIGN0IAorMTgxIC0xMjMgMjAwIC05OSAyMDAgLTY5IGN0IDIwMCAtNDcgMTkxIC0yOCAxNzQgLTE0IGN0IDE1NyAwIDEzOCA3IDExNiA3IGN0IDEwMSA3IDgzIDQgNjQgLTEgY3QgCis1OCAtMiA1MyAtMyA0OSAtMyBjdCA0NSAtMyA0MSAtMSAzOSAzIGN0IDM5IDMgMzkgMyAyOSAzIGN0IDI5IDMgMjkgMyAyOSAtODcgY3QgMjkgLTg3IDI5IC04NyAzOSAtODcgY3QgCis0NCAtNjEgNTQgLTQyIDY4IC0yOSBjdCA4MyAtMTYgOTkgLTkgMTE2IC05IGN0IDEyOSAtOSAxMzkgLTEzIDE0NyAtMjAgY3QgMTU1IC0yOCAxNTkgLTM3IDE1OSAtNDcgY3QgCisxNTkgLTYwIDE1NSAtNzAgMTQ2IC03OSBjdCAxMzcgLTg4IDExOSAtOTggOTMgLTExMSBjdCA2NiAtMTI0IDQ4IC0xMzYgNDAgLTE0NyBjdCAKKzMyIC0xNTcgMjggLTE3MSAyOCAtMTg3IGN0IDI4IC0yMDggMzUgLTIyNSA0OSAtMjM5IGN0IDYzIC0yNTMgODIgLTI2MCAxMDQgLTI2MCBjdCAKKzExNCAtMjYwIDEyNiAtMjU4IDE0MCAtMjU0IGN0IDE0OSAtMjUxIDE1NSAtMjUwIDE1OCAtMjUwIGN0IDE2MSAtMjUwIDE2NCAtMjUxIDE2NSAtMjUyIGN0IAorMTY3IC0yNTMgMTY5IC0yNTYgMTcxIC0yNjAgY3QgMTcxIC0yNjAgMTcxIC0yNjAgMTgxIC0yNjAgY3QgcCBlZgorMjIwIC0yMjggbSAgMjIwIC0yMjggMjIwIC0yMjggMjk4IC0yNTkgY3QgMjk4IC0yNTkgMjk4IC0yNTkgMzA5IC0yNTkgY3QgMzA5IC0yNTkgMzA5IC0yNTkgMzA5IC0yMDEgY3QgCiszMjIgLTIyMyAzMzUgLTIzOCAzNDggLTI0NyBjdCAzNjEgLTI1NiAzNzUgLTI2MCAzODkgLTI2MCBjdCA0MTQgLTI2MCA0MzUgLTI1MCA0NTIgLTIzMCBjdCAKKzQ3MyAtMjA2IDQ4MyAtMTc1IDQ4MyAtMTM2IGN0IDQ4MyAtOTIgNDcxIC01NiA0NDYgLTI4IGN0IDQyNSAtNSA0MDAgNyAzNjkgNyBjdCAKKzM1NSA3IDM0MyA1IDMzNCAxIGN0IDMyNiAtMiAzMTggLTcgMzA5IC0xNiBjdCAzMDkgLTE2IDMwOSAtMTYgMzA5IDYzIGN0IDMwOSA4MCAzMTAgOTEgMzEyIDk2IGN0IAorMzE0IDEwMCAzMTggMTA0IDMyMyAxMDcgY3QgMzI5IDExMCAzMzggMTExIDM1MiAxMTEgY3QgMzUyIDExMSAzNTIgMTExIDM1MiAxMjEgY3QgCiszNTIgMTIxIDM1MiAxMjEgMjE3IDEyMSBjdCAyMTcgMTIxIDIxNyAxMjEgMjE3IDExMSBjdCAyMTcgMTExIDIxNyAxMTEgMjI0IDExMSBjdCAKKzIzNCAxMTEgMjQzIDEwOSAyNTEgMTA1IGN0IDI1NCAxMDMgMjU3IDEwMCAyNTkgOTUgY3QgMjYxIDkxIDI2MiA3OSAyNjIgNjEgY3QgMjYyIDYxIDI2MiA2MSAyNjIgLTE3OSBjdCAKKzI2MiAtMTk1IDI2MSAtMjA1IDI2MCAtMjA5IGN0IDI1OCAtMjEzIDI1NiAtMjE2IDI1MyAtMjE5IGN0IDI1MCAtMjIxIDI0NSAtMjIyIDI0MCAtMjIyIGN0IAorMjM2IC0yMjIgMjMwIC0yMjEgMjIzIC0yMTggY3QgMjIzIC0yMTggMjIzIC0yMTggMjIwIC0yMjggY3QgcAorMzA5IC0xODUgbSAgMzA5IC0xODUgMzA5IC0xODUgMzA5IC05MCBjdCAzMDkgLTcwIDMxMCAtNTcgMzExIC01MCBjdCAzMTQgLTQwIDMyMCAtMzAgMzMwIC0yMiBjdCAKKzM0MCAtMTQgMzUzIC0xMCAzNjggLTEwIGN0IDM4NiAtMTAgNDAxIC0xNyA0MTIgLTMxIGN0IDQyNyAtNTAgNDM0IC03NyA0MzQgLTExMSBjdCAKKzQzNCAtMTQ5IDQyNiAtMTc5IDQwOSAtMjAwIGN0IDM5NyAtMjE0IDM4MyAtMjIxIDM2NyAtMjIxIGN0IDM1OSAtMjIxIDM1MCAtMjE5IDM0MSAtMjE0IGN0IAorMzM1IC0yMTEgMzI0IC0yMDEgMzA5IC0xODUgY3QgcCBlZgorNTY0IC0xNTggbSAgNTY0IC0xMjEgNTczIC05MiA1OTEgLTcxIGN0IDYwOSAtNTAgNjMwIC0zOSA2NTUgLTM5IGN0IDY3MSAtMzkgNjg2IC00MyA2OTggLTUyIGN0IAorNzEwIC02MSA3MjAgLTc3IDcyOCAtOTkgY3QgNzI4IC05OSA3MjggLTk5IDczNyAtOTQgY3QgNzMzIC02OCA3MjIgLTQ1IDcwMyAtMjQgY3QgCis2ODUgLTMgNjYyIDcgNjM0IDcgY3QgNjA0IDcgNTc4IC01IDU1NiAtMjggY3QgNTM1IC01MiA1MjQgLTgzIDUyNCAtMTIzIGN0IDUyNCAtMTY2IDUzNSAtMjAwIDU1NyAtMjI0IGN0IAorNTc5IC0yNDggNjA3IC0yNjAgNjQwIC0yNjAgY3QgNjY4IC0yNjAgNjkyIC0yNTEgNzEwIC0yMzIgY3QgNzI4IC0yMTQgNzM3IC0xODkgNzM3IC0xNTggY3QgCis3MzcgLTE1OCA3MzcgLTE1OCA1NjQgLTE1OCBjdCBwCis1NjQgLTE3NCBtICA1NjQgLTE3NCA1NjQgLTE3NCA2ODAgLTE3NCBjdCA2NzkgLTE5MCA2NzcgLTIwMSA2NzQgLTIwOCBjdCA2NzAgLTIxOCA2NjMgLTIyNiA2NTQgLTIzMSBjdCAKKzY0NSAtMjM3IDYzNSAtMjQwIDYyNiAtMjQwIGN0IDYxMCAtMjQwIDU5NyAtMjM0IDU4NSAtMjIzIGN0IDU3MyAtMjExIDU2NiAtMTk1IDU2NCAtMTc0IGN0IAorcCBlZgorODE0IC0xNTggbSAgODE0IC0xMjEgODIzIC05MiA4NDEgLTcxIGN0IDg1OSAtNTAgODgwIC0zOSA5MDUgLTM5IGN0IDkyMSAtMzkgOTM2IC00MyA5NDggLTUyIGN0IAorOTYwIC02MSA5NzAgLTc3IDk3OCAtOTkgY3QgOTc4IC05OSA5NzggLTk5IDk4NyAtOTQgY3QgOTgzIC02OCA5NzIgLTQ1IDk1MyAtMjQgY3QgCis5MzUgLTMgOTEyIDcgODg0IDcgY3QgODU0IDcgODI4IC01IDgwNiAtMjggY3QgNzg1IC01MiA3NzQgLTgzIDc3NCAtMTIzIGN0IDc3NCAtMTY2IDc4NSAtMjAwIDgwNyAtMjI0IGN0IAorODI5IC0yNDggODU3IC0yNjAgODkwIC0yNjAgY3QgOTE4IC0yNjAgOTQyIC0yNTEgOTYwIC0yMzIgY3QgOTc4IC0yMTQgOTg3IC0xODkgOTg3IC0xNTggY3QgCis5ODcgLTE1OCA5ODcgLTE1OCA4MTQgLTE1OCBjdCBwCis4MTQgLTE3NCBtICA4MTQgLTE3NCA4MTQgLTE3NCA5MzAgLTE3NCBjdCA5MjkgLTE5MCA5MjcgLTIwMSA5MjQgLTIwOCBjdCA5MjAgLTIxOCA5MTMgLTIyNiA5MDQgLTIzMSBjdCAKKzg5NSAtMjM3IDg4NSAtMjQwIDg3NiAtMjQwIGN0IDg2MCAtMjQwIDg0NyAtMjM0IDgzNSAtMjIzIGN0IDgyMyAtMjExIDgxNiAtMTk1IDgxNCAtMTc0IGN0IAorcCBlZgorMTIzNiAtOTUgbSAgMTIyOSAtNjIgMTIxNiAtMzcgMTE5NiAtMTkgY3QgMTE3NiAtMiAxMTU0IDcgMTEzMCA3IGN0IDExMDEgNyAxMDc2IC01IDEwNTUgLTI5IGN0IAorMTAzNCAtNTMgMTAyMyAtODUgMTAyMyAtMTI2IGN0IDEwMjMgLTE2NiAxMDM1IC0xOTggMTA1OCAtMjIzIGN0IDEwODIgLTI0OCAxMTExIC0yNjAgMTE0NCAtMjYwIGN0IAorMTE2OSAtMjYwIDExODkgLTI1MyAxMjA1IC0yNDAgY3QgMTIyMSAtMjI3IDEyMjkgLTIxNCAxMjI5IC0xOTkgY3QgMTIyOSAtMTkyIDEyMjcgLTE4NyAxMjIyIC0xODIgY3QgCisxMjE4IC0xNzggMTIxMSAtMTc2IDEyMDMgLTE3NiBjdCAxMTkzIC0xNzYgMTE4NSAtMTgwIDExNzkgLTE4NyBjdCAxMTc2IC0xOTAgMTE3NCAtMTk4IDExNzMgLTIwOSBjdCAKKzExNzIgLTIyMCAxMTY4IC0yMjggMTE2MSAtMjM0IGN0IDExNTUgLTIzOSAxMTQ2IC0yNDIgMTEzNSAtMjQyIGN0IDExMTYgLTI0MiAxMTAyIC0yMzUgMTA5MCAtMjIyIGN0IAorMTA3NSAtMjA0IDEwNjggLTE4MCAxMDY4IC0xNTAgY3QgMTA2OCAtMTIwIDEwNzUgLTk0IDEwOTAgLTcxIGN0IDExMDUgLTQ4IDExMjUgLTM2IDExNTAgLTM2IGN0IAorMTE2OCAtMzYgMTE4NCAtNDIgMTE5OSAtNTQgY3QgMTIwOSAtNjIgMTIxOCAtNzcgMTIyOCAtOTkgY3QgMTIyOCAtOTkgMTIyOCAtOTkgMTIzNiAtOTUgY3QgCitwIGVmCisxMzQ1IC0zOTIgbSAgMTM0NSAtMzkyIDEzNDUgLTM5MiAxMzQ1IC0yMDggY3QgMTM2NSAtMjMwIDEzODEgLTI0NCAxMzkzIC0yNTEgY3QgCisxNDA1IC0yNTcgMTQxNyAtMjYwIDE0MjkgLTI2MCBjdCAxNDQzIC0yNjAgMTQ1NiAtMjU2IDE0NjYgLTI0OCBjdCAxNDc2IC0yNDAgMTQ4NCAtMjI4IDE0ODkgLTIxMSBjdCAKKzE0OTIgLTE5OSAxNDk0IC0xNzggMTQ5NCAtMTQ2IGN0IDE0OTQgLTE0NiAxNDk0IC0xNDYgMTQ5NCAtNTcgY3QgMTQ5NCAtNDEgMTQ5NSAtMzAgMTQ5OCAtMjQgY3QgCisxNTAwIC0yMCAxNTAzIC0xNiAxNTA3IC0xNCBjdCAxNTExIC0xMSAxNTE5IC0xMCAxNTMxIC0xMCBjdCAxNTMxIC0xMCAxNTMxIC0xMCAxNTMxIDAgY3QgCisxNTMxIDAgMTUzMSAwIDE0MDcgMCBjdCAxNDA3IDAgMTQwNyAwIDE0MDcgLTEwIGN0IDE0MDcgLTEwIDE0MDcgLTEwIDE0MTMgLTEwIGN0IAorMTQyNSAtMTAgMTQzMyAtMTIgMTQzNyAtMTUgY3QgMTQ0MiAtMTkgMTQ0NSAtMjQgMTQ0NyAtMzEgY3QgMTQ0OCAtMzQgMTQ0OCAtNDMgMTQ0OCAtNTcgY3QgCisxNDQ4IC01NyAxNDQ4IC01NyAxNDQ4IC0xNDcgY3QgMTQ0OCAtMTc0IDE0NDcgLTE5MiAxNDQ0IC0yMDEgY3QgMTQ0MSAtMjEwIDE0MzYgLTIxNiAxNDMwIC0yMjEgY3QgCisxNDI0IC0yMjUgMTQxNyAtMjI3IDE0MDggLTIyNyBjdCAxMzk5IC0yMjcgMTM4OSAtMjI1IDEzODAgLTIyMCBjdCAxMzcwIC0yMTUgMTM1OSAtMjA1IDEzNDUgLTE5MSBjdCAKKzEzNDUgLTE5MSAxMzQ1IC0xOTEgMTM0NSAtNTcgY3QgMTM0NSAtNDAgMTM0NiAtMjkgMTM0OCAtMjUgY3QgMTM1MCAtMjEgMTM1MyAtMTcgMTM1OSAtMTQgY3QgCisxMzY0IC0xMSAxMzczIC0xMCAxMzg2IC0xMCBjdCAxMzg2IC0xMCAxMzg2IC0xMCAxMzg2IDAgY3QgMTM4NiAwIDEzODYgMCAxMjYyIDAgY3QgCisxMjYyIDAgMTI2MiAwIDEyNjIgLTEwIGN0IDEyNzMgLTEwIDEyODEgLTEyIDEyODcgLTE1IGN0IDEyOTEgLTE3IDEyOTQgLTIxIDEyOTYgLTI2IGN0IAorMTI5OCAtMzEgMTI5OSAtNDEgMTI5OSAtNTcgY3QgMTI5OSAtNTcgMTI5OSAtNTcgMTI5OSAtMjg2IGN0IDEyOTkgLTMxNCAxMjk4IC0zMzIgMTI5NyAtMzM4IGN0IAorMTI5NiAtMzQ1IDEyOTQgLTM0OSAxMjkxIC0zNTIgY3QgMTI4OCAtMzU0IDEyODQgLTM1NSAxMjc5IC0zNTUgY3QgMTI3NiAtMzU1IDEyNjkgLTM1NCAxMjYxIC0zNTEgY3QgCisxMjYxIC0zNTEgMTI2MSAtMzUxIDEyNTcgLTM2MSBjdCAxMjU3IC0zNjEgMTI1NyAtMzYxIDEzMzIgLTM5MiBjdCAxMzMyIC0zOTIgMTMzMiAtMzkyIDEzNDUgLTM5MiBjdCAKK3AgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzMyNTUgNDI5OCB0CisxODEgLTI2MCBtICAxODEgLTI2MCAxODEgLTI2MCAxODEgLTE3NCBjdCAxODEgLTE3NCAxODEgLTE3NCAxNzEgLTE3NCBjdCAxNjQgLTIwMSAxNTUgLTIyMCAxNDUgLTIyOSBjdCAKKzEzNCAtMjM5IDEyMCAtMjQ0IDEwMyAtMjQ0IGN0IDkxIC0yNDQgODAgLTI0MSA3MyAtMjM0IGN0IDY1IC0yMjcgNjEgLTIxOSA2MSAtMjExIGN0IAorNjEgLTIwMSA2NCAtMTkyIDcwIC0xODUgY3QgNzUgLTE3NyA4NyAtMTY5IDEwNCAtMTYxIGN0IDEwNCAtMTYxIDEwNCAtMTYxIDE0NCAtMTQxIGN0IAorMTgxIC0xMjMgMjAwIC05OSAyMDAgLTY5IGN0IDIwMCAtNDcgMTkxIC0yOCAxNzQgLTE0IGN0IDE1NyAwIDEzOCA3IDExNiA3IGN0IDEwMSA3IDgzIDQgNjQgLTEgY3QgCis1OCAtMiA1MyAtMyA0OSAtMyBjdCA0NSAtMyA0MSAtMSAzOSAzIGN0IDM5IDMgMzkgMyAyOSAzIGN0IDI5IDMgMjkgMyAyOSAtODcgY3QgMjkgLTg3IDI5IC04NyAzOSAtODcgY3QgCis0NCAtNjEgNTQgLTQyIDY4IC0yOSBjdCA4MyAtMTYgOTkgLTkgMTE2IC05IGN0IDEyOSAtOSAxMzkgLTEzIDE0NyAtMjAgY3QgMTU1IC0yOCAxNTkgLTM3IDE1OSAtNDcgY3QgCisxNTkgLTYwIDE1NSAtNzAgMTQ2IC03OSBjdCAxMzcgLTg4IDExOSAtOTggOTMgLTExMSBjdCA2NiAtMTI0IDQ4IC0xMzYgNDAgLTE0NyBjdCAKKzMyIC0xNTcgMjggLTE3MSAyOCAtMTg3IGN0IDI4IC0yMDggMzUgLTIyNSA0OSAtMjM5IGN0IDYzIC0yNTMgODIgLTI2MCAxMDQgLTI2MCBjdCAKKzExNCAtMjYwIDEyNiAtMjU4IDE0MCAtMjU0IGN0IDE0OSAtMjUxIDE1NSAtMjUwIDE1OCAtMjUwIGN0IDE2MSAtMjUwIDE2NCAtMjUxIDE2NSAtMjUyIGN0IAorMTY3IC0yNTMgMTY5IC0yNTYgMTcxIC0yNjAgY3QgMTcxIC0yNjAgMTcxIC0yNjAgMTgxIC0yNjAgY3QgcCBlZgorNDU5IC0yNTMgbSAgNDU5IC0yNTMgNDU5IC0yNTMgNDU5IC05OSBjdCA0NTkgLTcwIDQ2MCAtNTMgNDYxIC00NyBjdCA0NjIgLTQwIDQ2NSAtMzYgNDY4IC0zMyBjdCAKKzQ3MSAtMzEgNDc0IC0yOSA0NzggLTI5IGN0IDQ4NCAtMjkgNDkwIC0zMSA0OTcgLTM0IGN0IDQ5NyAtMzQgNDk3IC0zNCA1MDEgLTI0IGN0IAorNTAxIC0yNCA1MDEgLTI0IDQyNiA3IGN0IDQyNiA3IDQyNiA3IDQxNCA3IGN0IDQxNCA3IDQxNCA3IDQxNCAtNDYgY3QgMzkyIC0yMyAzNzYgLTggMzY0IC0yIGN0IAorMzUzIDQgMzQxIDcgMzI4IDcgY3QgMzE0IDcgMzAxIDMgMjkxIC01IGN0IDI4MCAtMTQgMjczIC0yNCAyNjkgLTM3IGN0IDI2NSAtNTAgMjYzIC02OCAyNjMgLTkyIGN0IAorMjYzIC05MiAyNjMgLTkyIDI2MyAtMjA1IGN0IDI2MyAtMjE3IDI2MiAtMjI1IDI1OSAtMjI5IGN0IDI1NyAtMjM0IDI1MyAtMjM3IDI0OCAtMjQwIGN0IAorMjQzIC0yNDIgMjMzIC0yNDMgMjIwIC0yNDMgY3QgMjIwIC0yNDMgMjIwIC0yNDMgMjIwIC0yNTMgY3QgMjIwIC0yNTMgMjIwIC0yNTMgMzA5IC0yNTMgY3QgCiszMDkgLTI1MyAzMDkgLTI1MyAzMDkgLTg0IGN0IDMwOSAtNjAgMzEzIC00NCAzMjEgLTM3IGN0IDMzMCAtMzAgMzM5IC0yNiAzNTEgLTI2IGN0IAorMzU5IC0yNiAzNjggLTI4IDM3OCAtMzMgY3QgMzg4IC0zOCA0MDAgLTQ4IDQxNCAtNjIgY3QgNDE0IC02MiA0MTQgLTYyIDQxNCAtMjA1IGN0IAorNDE0IC0yMjAgNDExIC0yMzAgNDA2IC0yMzUgY3QgNDAxIC0yNDAgMzkwIC0yNDMgMzczIC0yNDMgY3QgMzczIC0yNDMgMzczIC0yNDMgMzczIC0yNTMgY3QgCiszNzMgLTI1MyAzNzMgLTI1MyA0NTkgLTI1MyBjdCBwIGVmCis1OTEgLTIwOSBtICA2MTUgLTI0MyA2NDIgLTI2MCA2NzAgLTI2MCBjdCA2OTYgLTI2MCA3MTggLTI0OSA3MzcgLTIyNyBjdCA3NTYgLTIwNSA3NjYgLTE3NSA3NjYgLTEzNiBjdCAKKzc2NiAtOTIgNzUxIC01NiA3MjEgLTI4IGN0IDY5NiAtNSA2NjcgNyA2MzYgNyBjdCA2MjEgNyA2MDcgNCA1OTEgLTEgY3QgNTc2IC02IDU2MSAtMTQgNTQ1IC0yNSBjdCAKKzU0NSAtMjUgNTQ1IC0yNSA1NDUgLTI4NiBjdCA1NDUgLTMxNCA1NDQgLTMzMiA1NDMgLTMzOCBjdCA1NDIgLTM0NSA1MzkgLTM0OSA1MzYgLTM1MiBjdCAKKzUzMyAtMzU0IDUzMCAtMzU1IDUyNSAtMzU1IGN0IDUyMCAtMzU1IDUxNCAtMzU0IDUwNiAtMzUxIGN0IDUwNiAtMzUxIDUwNiAtMzUxIDUwMiAtMzYxIGN0IAorNTAyIC0zNjEgNTAyIC0zNjEgNTc4IC0zOTIgY3QgNTc4IC0zOTIgNTc4IC0zOTIgNTkxIC0zOTIgY3QgNTkxIC0zOTIgNTkxIC0zOTIgNTkxIC0yMDkgY3QgCitwCis1OTEgLTE5MiBtICA1OTEgLTE5MiA1OTEgLTE5MiA1OTEgLTQxIGN0IDYwMCAtMzIgNjEwIC0yNSA2MjAgLTIwIGN0IDYzMCAtMTUgNjQwIC0xMyA2NTAgLTEzIGN0IAorNjY3IC0xMyA2ODIgLTIyIDY5NyAtNDEgY3QgNzExIC01OSA3MTggLTg2IDcxOCAtMTIxIGN0IDcxOCAtMTUzIDcxMSAtMTc4IDY5NyAtMTk1IGN0IAorNjgyIC0yMTIgNjY2IC0yMjEgNjQ4IC0yMjEgY3QgNjM4IC0yMjEgNjI5IC0yMTkgNjE5IC0yMTQgY3QgNjEyIC0yMTAgNjAyIC0yMDMgNTkxIC0xOTIgY3QgCitwIGVmCis4MTAgLTE0OCBtICA5NTMgLTE0OCBsICA5NTMgLTEwNiBsICA4MTAgLTEwNiBsICA4MTAgLTE0OCBsICBwIGVmCisxMDkxIC0yMzMgbSAgMTA5MSAtMjMzIDEwOTEgLTIzMyAxMDkxIC02NyBjdCAxMDkxIC00MyAxMDk0IC0yOCAxMDk5IC0yMiBjdCAxMTA2IC0xNCAxMTE1IC0xMCAxMTI2IC0xMCBjdCAKKzExMjYgLTEwIDExMjYgLTEwIDExNDkgLTEwIGN0IDExNDkgLTEwIDExNDkgLTEwIDExNDkgMCBjdCAxMTQ5IDAgMTE0OSAwIDk5OCAwIGN0IAorOTk4IDAgOTk4IDAgOTk4IC0xMCBjdCA5OTggLTEwIDk5OCAtMTAgMTAwOSAtMTAgY3QgMTAxNyAtMTAgMTAyMyAtMTIgMTAyOSAtMTYgY3QgCisxMDM1IC0xOSAxMDM5IC0yNCAxMDQyIC0zMCBjdCAxMDQ0IC0zNyAxMDQ1IC00OSAxMDQ1IC02NyBjdCAxMDQ1IC02NyAxMDQ1IC02NyAxMDQ1IC0yMzMgY3QgCisxMDQ1IC0yMzMgMTA0NSAtMjMzIDk5NiAtMjMzIGN0IDk5NiAtMjMzIDk5NiAtMjMzIDk5NiAtMjUzIGN0IDk5NiAtMjUzIDk5NiAtMjUzIDEwNDUgLTI1MyBjdCAKKzEwNDUgLTI1MyAxMDQ1IC0yNTMgMTA0NSAtMjcwIGN0IDEwNDUgLTI5NSAxMDQ5IC0zMTYgMTA1NyAtMzM0IGN0IDEwNjUgLTM1MSAxMDc4IC0zNjUgMTA5NCAtMzc2IGN0IAorMTExMSAtMzg3IDExMzAgLTM5MiAxMTUxIC0zOTIgY3QgMTE3MCAtMzkyIDExODggLTM4NiAxMjA0IC0zNzMgY3QgMTIxNSAtMzY1IDEyMjAgLTM1NSAxMjIwIC0zNDUgY3QgCisxMjIwIC0zNDAgMTIxOCAtMzM0IDEyMTMgLTMyOSBjdCAxMjA4IC0zMjQgMTIwMyAtMzIyIDExOTcgLTMyMiBjdCAxMTkzIC0zMjIgMTE4OSAtMzI0IDExODQgLTMyNyBjdCAKKzExNzkgLTMzMCAxMTc0IC0zMzYgMTE2NyAtMzQ2IGN0IDExNjAgLTM1NiAxMTU0IC0zNjMgMTE0OCAtMzY3IGN0IDExNDIgLTM3MCAxMTM2IC0zNzIgMTEyOSAtMzcyIGN0IAorMTEyMSAtMzcyIDExMTMgLTM3MCAxMTA4IC0zNjUgY3QgMTEwMiAtMzYxIDEwOTcgLTM1NCAxMDk1IC0zNDQgY3QgMTA5MiAtMzM1IDEwOTEgLTMxMCAxMDkxIC0yNzEgY3QgCisxMDkxIC0yNzEgMTA5MSAtMjcxIDEwOTEgLTI1MyBjdCAxMDkxIC0yNTMgMTA5MSAtMjUzIDExNTYgLTI1MyBjdCAxMTU2IC0yNTMgMTE1NiAtMjUzIDExNTYgLTIzMyBjdCAKKzExNTYgLTIzMyAxMTU2IC0yMzMgMTA5MSAtMjMzIGN0IHAgZWYKKzEyNTYgLTI2MCBtICAxMjU2IC0yNjAgMTI1NiAtMjYwIDEyNTYgLTIwMyBjdCAxMjc3IC0yNDEgMTI5OSAtMjYwIDEzMjEgLTI2MCBjdCAKKzEzMzEgLTI2MCAxMzM5IC0yNTcgMTM0NiAtMjUxIGN0IDEzNTMgLTI0NSAxMzU2IC0yMzggMTM1NiAtMjMwIGN0IDEzNTYgLTIyMiAxMzU0IC0yMTYgMTM0OSAtMjExIGN0IAorMTM0NCAtMjA2IDEzMzggLTIwNCAxMzMyIC0yMDQgY3QgMTMyNSAtMjA0IDEzMTggLTIwNyAxMzEwIC0yMTQgY3QgMTMwMiAtMjIwIDEyOTYgLTIyMyAxMjkyIC0yMjMgY3QgCisxMjg5IC0yMjMgMTI4NSAtMjIxIDEyODIgLTIxNyBjdCAxMjczIC0yMTAgMTI2NSAtMTk4IDEyNTYgLTE4MCBjdCAxMjU2IC0xODAgMTI1NiAtMTgwIDEyNTYgLTU5IGN0IAorMTI1NiAtNDUgMTI1OCAtMzQgMTI2MSAtMjcgY3QgMTI2NCAtMjIgMTI2OCAtMTggMTI3NCAtMTUgY3QgMTI4MCAtMTIgMTI4OSAtMTAgMTMwMSAtMTAgY3QgCisxMzAxIC0xMCAxMzAxIC0xMCAxMzAxIDAgY3QgMTMwMSAwIDEzMDEgMCAxMTY5IDAgY3QgMTE2OSAwIDExNjkgMCAxMTY5IC0xMCBjdCAxMTgyIC0xMCAxMTkyIC0xMiAxMTk5IC0xNiBjdCAKKzEyMDMgLTE5IDEyMDcgLTI0IDEyMDkgLTMwIGN0IDEyMTAgLTMzIDEyMTAgLTQyIDEyMTAgLTU3IGN0IDEyMTAgLTU3IDEyMTAgLTU3IDEyMTAgLTE1NCBjdCAKKzEyMTAgLTE4NCAxMjA5IC0yMDEgMTIwOCAtMjA3IGN0IDEyMDcgLTIxMyAxMjA1IC0yMTcgMTIwMiAtMjE5IGN0IDExOTkgLTIyMiAxMTk1IC0yMjMgMTE5MCAtMjIzIGN0IAorMTE4NCAtMjIzIDExNzggLTIyMiAxMTcxIC0yMTkgY3QgMTE3MSAtMjE5IDExNzEgLTIxOSAxMTY4IC0yMjkgY3QgMTE2OCAtMjI5IDExNjggLTIyOSAxMjQ0IC0yNjAgY3QgCisxMjQ0IC0yNjAgMTI0NCAtMjYwIDEyNTYgLTI2MCBjdCBwIGVmCisxNTExIC0zNyBtICAxNDg1IC0xNyAxNDY5IC01IDE0NjIgLTIgY3QgMTQ1MiAzIDE0NDIgNSAxNDMwIDUgY3QgMTQxMyA1IDEzOTggLTEgMTM4NyAtMTMgY3QgCisxMzc2IC0yNSAxMzcwIC00MCAxMzcwIC02MCBjdCAxMzcwIC03MiAxMzczIC04MyAxMzc4IC05MiBjdCAxMzg2IC0xMDQgMTM5OSAtMTE2IDE0MTggLTEyNyBjdCAKKzE0MzYgLTEzOCAxNDY4IC0xNTEgMTUxMSAtMTY3IGN0IDE1MTEgLTE2NyAxNTExIC0xNjcgMTUxMSAtMTc3IGN0IDE1MTEgLTIwMiAxNTA3IC0yMTkgMTQ5OSAtMjI4IGN0IAorMTQ5MSAtMjM3IDE0ODAgLTI0MiAxNDY0IC0yNDIgY3QgMTQ1MyAtMjQyIDE0NDQgLTIzOSAxNDM3IC0yMzMgY3QgMTQzMCAtMjI2IDE0MjYgLTIxOSAxNDI2IC0yMTEgY3QgCisxNDI2IC0yMTEgMTQyNiAtMjExIDE0MjcgLTE5NSBjdCAxNDI3IC0xODcgMTQyNSAtMTgwIDE0MjAgLTE3NiBjdCAxNDE2IC0xNzEgMTQxMCAtMTY5IDE0MDMgLTE2OSBjdCAKKzEzOTcgLTE2OSAxMzkxIC0xNzEgMTM4NyAtMTc2IGN0IDEzODIgLTE4MSAxMzgwIC0xODggMTM4MCAtMTk2IGN0IDEzODAgLTIxMiAxMzg4IC0yMjcgMTQwNCAtMjQwIGN0IAorMTQyMCAtMjUzIDE0NDMgLTI2MCAxNDcyIC0yNjAgY3QgMTQ5NCAtMjYwIDE1MTMgLTI1NiAxNTI3IC0yNDkgY3QgMTUzOCAtMjQzIDE1NDYgLTIzNCAxNTUxIC0yMjIgY3QgCisxNTU0IC0yMTQgMTU1NiAtMTk4IDE1NTYgLTE3NCBjdCAxNTU2IC0xNzQgMTU1NiAtMTc0IDE1NTYgLTg5IGN0IDE1NTYgLTY1IDE1NTYgLTUwIDE1NTcgLTQ1IGN0IAorMTU1OCAtMzkgMTU2MCAtMzYgMTU2MiAtMzQgY3QgMTU2NCAtMzIgMTU2NiAtMzEgMTU2OSAtMzEgY3QgMTU3MiAtMzEgMTU3NSAtMzIgMTU3NyAtMzMgY3QgCisxNTgxIC0zNSAxNTg4IC00MiAxNTk5IC01MyBjdCAxNTk5IC01MyAxNTk5IC01MyAxNTk5IC0zOCBjdCAxNTc5IC0xMCAxNTU5IDQgMTU0MSA0IGN0IAorMTUzMiA0IDE1MjQgMSAxNTE5IC01IGN0IDE1MTQgLTExIDE1MTEgLTIyIDE1MTEgLTM3IGN0IHAKKzE1MTEgLTU0IG0gIDE1MTEgLTU0IDE1MTEgLTU0IDE1MTEgLTE0OSBjdCAxNDgzIC0xMzggMTQ2NSAtMTMwIDE0NTcgLTEyNiBjdCAKKzE0NDIgLTExOCAxNDMyIC0xMTAgMTQyNSAtMTAxIGN0IDE0MTkgLTkyIDE0MTYgLTgzIDE0MTYgLTcyIGN0IDE0MTYgLTU5IDE0MjAgLTQ5IDE0MjggLTQwIGN0IAorMTQzNiAtMzEgMTQ0NSAtMjcgMTQ1NSAtMjcgY3QgMTQ3MCAtMjcgMTQ4OCAtMzYgMTUxMSAtNTQgY3QgcCBlZgorMTY5MyAtMjA2IG0gIDE3MTEgLTIyNSAxNzIyIC0yMzUgMTcyNSAtMjM4IGN0IDE3MzQgLTI0NSAxNzQyIC0yNTAgMTc1MiAtMjU0IGN0IAorMTc2MiAtMjU4IDE3NzEgLTI2MCAxNzgwIC0yNjAgY3QgMTc5NiAtMjYwIDE4MTAgLTI1NSAxODIxIC0yNDYgY3QgMTgzMiAtMjM3IDE4NDAgLTIyNCAxODQ0IC0yMDYgY3QgCisxODYzIC0yMjggMTg3OSAtMjQzIDE4OTIgLTI1MCBjdCAxOTA1IC0yNTcgMTkxOCAtMjYwIDE5MzIgLTI2MCBjdCAxOTQ1IC0yNjAgMTk1NyAtMjU3IDE5NjcgLTI1MCBjdCAKKzE5NzggLTI0MyAxOTg2IC0yMzIgMTk5MiAtMjE2IGN0IDE5OTYgLTIwNSAxOTk4IC0xODggMTk5OCAtMTY2IGN0IDE5OTggLTE2NiAxOTk4IC0xNjYgMTk5OCAtNTcgY3QgCisxOTk4IC00MSAxOTk5IC0zMCAyMDAxIC0yNSBjdCAyMDAzIC0yMSAyMDA3IC0xNyAyMDExIC0xNCBjdCAyMDE2IC0xMSAyMDI0IC0xMCAyMDM1IC0xMCBjdCAKKzIwMzUgLTEwIDIwMzUgLTEwIDIwMzUgMCBjdCAyMDM1IDAgMjAzNSAwIDE5MTEgMCBjdCAxOTExIDAgMTkxMSAwIDE5MTEgLTEwIGN0IDE5MTEgLTEwIDE5MTEgLTEwIDE5MTYgLTEwIGN0IAorMTkyNyAtMTAgMTkzNiAtMTIgMTk0MiAtMTYgY3QgMTk0NiAtMTkgMTk0OSAtMjQgMTk1MSAtMzAgY3QgMTk1MiAtMzMgMTk1MiAtNDIgMTk1MiAtNTcgY3QgCisxOTUyIC01NyAxOTUyIC01NyAxOTUyIC0xNjYgY3QgMTk1MiAtMTg2IDE5NTAgLTIwMSAxOTQ1IC0yMDkgY3QgMTkzNyAtMjIxIDE5MjYgLTIyNyAxOTEwIC0yMjcgY3QgCisxOTAxIC0yMjcgMTg5MSAtMjI1IDE4ODEgLTIyMCBjdCAxODcxIC0yMTUgMTg1OSAtMjA2IDE4NDYgLTE5MyBjdCAxODQ2IC0xOTMgMTg0NiAtMTkzIDE4NDUgLTE4OSBjdCAKKzE4NDUgLTE4OSAxODQ1IC0xODkgMTg0NiAtMTc4IGN0IDE4NDYgLTE3OCAxODQ2IC0xNzggMTg0NiAtNTcgY3QgMTg0NiAtNDAgMTg0NyAtMjkgMTg0OSAtMjUgY3QgCisxODUxIC0yMSAxODU0IC0xNyAxODYwIC0xNCBjdCAxODY1IC0xMSAxODc0IC0xMCAxODg3IC0xMCBjdCAxODg3IC0xMCAxODg3IC0xMCAxODg3IDAgY3QgCisxODg3IDAgMTg4NyAwIDE3NTkgMCBjdCAxNzU5IDAgMTc1OSAwIDE3NTkgLTEwIGN0IDE3NzMgLTEwIDE3ODMgLTEyIDE3ODggLTE1IGN0IAorMTc5MyAtMTggMTc5NyAtMjMgMTc5OSAtMzAgY3QgMTgwMCAtMzMgMTgwMCAtNDIgMTgwMCAtNTcgY3QgMTgwMCAtNTcgMTgwMCAtNTcgMTgwMCAtMTY2IGN0IAorMTgwMCAtMTg2IDE3OTcgLTIwMSAxNzkxIC0yMTAgY3QgMTc4MyAtMjIxIDE3NzIgLTIyNyAxNzU3IC0yMjcgY3QgMTc0NyAtMjI3IDE3MzggLTIyNCAxNzI4IC0yMTkgY3QgCisxNzEzIC0yMTEgMTcwMSAtMjAyIDE2OTMgLTE5MyBjdCAxNjkzIC0xOTMgMTY5MyAtMTkzIDE2OTMgLTU3IGN0IDE2OTMgLTQxIDE2OTQgLTMwIDE2OTYgLTI1IGN0IAorMTY5OSAtMjAgMTcwMiAtMTYgMTcwNyAtMTQgY3QgMTcxMSAtMTEgMTcyMCAtMTAgMTczNCAtMTAgY3QgMTczNCAtMTAgMTczNCAtMTAgMTczNCAwIGN0IAorMTczNCAwIDE3MzQgMCAxNjEwIDAgY3QgMTYxMCAwIDE2MTAgMCAxNjEwIC0xMCBjdCAxNjIxIC0xMCAxNjI5IC0xMSAxNjMzIC0xNCBjdCAKKzE2MzggLTE2IDE2NDEgLTIwIDE2NDQgLTI2IGN0IDE2NDYgLTMxIDE2NDcgLTQxIDE2NDcgLTU3IGN0IDE2NDcgLTU3IDE2NDcgLTU3IDE2NDcgLTE1NCBjdCAKKzE2NDcgLTE4MiAxNjQ2IC0xOTkgMTY0NSAtMjA3IGN0IDE2NDMgLTIxMyAxNjQxIC0yMTcgMTYzOSAtMjIwIGN0IDE2MzYgLTIyMiAxNjMyIC0yMjMgMTYyNyAtMjIzIGN0IAorMTYyMiAtMjIzIDE2MTYgLTIyMiAxNjA5IC0yMTkgY3QgMTYwOSAtMjE5IDE2MDkgLTIxOSAxNjA1IC0yMjkgY3QgMTYwNSAtMjI5IDE2MDUgLTIyOSAxNjgxIC0yNjAgY3QgCisxNjgxIC0yNjAgMTY4MSAtMjYwIDE2OTMgLTI2MCBjdCAxNjkzIC0yNjAgMTY5MyAtMjYwIDE2OTMgLTIwNiBjdCBwIGVmCisyMDg4IC0xNTggbSAgMjA4OCAtMTIxIDIwOTcgLTkyIDIxMTUgLTcxIGN0IDIxMzMgLTUwIDIxNTQgLTM5IDIxNzkgLTM5IGN0IDIxOTUgLTM5IDIyMTAgLTQzIDIyMjIgLTUyIGN0IAorMjIzNCAtNjEgMjI0NCAtNzcgMjI1MiAtOTkgY3QgMjI1MiAtOTkgMjI1MiAtOTkgMjI2MSAtOTQgY3QgMjI1NyAtNjggMjI0NiAtNDUgMjIyNyAtMjQgY3QgCisyMjA5IC0zIDIxODYgNyAyMTU4IDcgY3QgMjEyOCA3IDIxMDIgLTUgMjA4MCAtMjggY3QgMjA1OSAtNTIgMjA0OCAtODMgMjA0OCAtMTIzIGN0IAorMjA0OCAtMTY2IDIwNTkgLTIwMCAyMDgxIC0yMjQgY3QgMjEwMyAtMjQ4IDIxMzEgLTI2MCAyMTY0IC0yNjAgY3QgMjE5MiAtMjYwIDIyMTYgLTI1MSAyMjM0IC0yMzIgY3QgCisyMjUyIC0yMTQgMjI2MSAtMTg5IDIyNjEgLTE1OCBjdCAyMjYxIC0xNTggMjI2MSAtMTU4IDIwODggLTE1OCBjdCBwCisyMDg4IC0xNzQgbSAgMjA4OCAtMTc0IDIwODggLTE3NCAyMjA0IC0xNzQgY3QgMjIwMyAtMTkwIDIyMDEgLTIwMSAyMTk4IC0yMDggY3QgCisyMTk0IC0yMTggMjE4NyAtMjI2IDIxNzggLTIzMSBjdCAyMTY5IC0yMzcgMjE1OSAtMjQwIDIxNTAgLTI0MCBjdCAyMTM0IC0yNDAgMjEyMSAtMjM0IDIxMDkgLTIyMyBjdCAKKzIwOTcgLTIxMSAyMDkwIC0xOTUgMjA4OCAtMTc0IGN0IHAgZWYKK3BvbQorZ3IKK2dyCis0Mzg1IDU4MzUgbSAgNDE5OCA1MjczIGwgIDQ1NzMgNTI3MyBsICA0Mzg1IDU4MzUgbCAgcCBlZgorNDQxMCA0NTM1IG0gIDQ0MTAgNTM4NSBsICA0MzYwIDUzODUgbCAgNDM2MCA0NTM1IGwgIDQ0MTAgNDUzNSBsICBwIGVmCis0Mzg0IDg2MzUgbSAgNDE5NyA4MDczIGwgIDQ1NzIgODA3MyBsICA0Mzg0IDg2MzUgbCAgcCBlZgorNDQxMCA3MzM1IG0gIDQ0MTAgNzk4NSBsICA0Mzg1IDc5ODUgbCAgNDM2MCA3OTg1IGwgIDQzNjAgNzMzNSBsICA0Mzg1IDczMzUgbCAKKzQ0MTAgNzMzNSBsICBwIGVmCis0Mzg1IDc5ODUgbSAgNDQxMCA3OTg1IGwgIDQ0MTAgNzk4OSBsICA0NDA4IDc5OTQgbCAgNDQwNyA3OTk3IGwgIDQ0MDQgODAwMSBsIAorNDQwMSA4MDA0IGwgIDQzOTggODAwNyBsICA0Mzk0IDgwMDggbCAgNDM4OSA4MDEwIGwgIDQzODUgODAxMCBsICA0Mzg1IDgwMTAgbCAKKzQzODUgNzk4NSBsICBwIGVmCis0Mzg1IDgwMTAgbSAgNDM4NCA4MDEwIGwgIDQzODQgNzk4NSBsICA0Mzg0IDc5NjAgbCAgNDM4NSA3OTYwIGwgIDQzODUgNzk4NSBsIAorNDM4NSA4MDEwIGwgIHAgZWYKKzQzODQgNzk4NSBtICA0MzU5IDc5ODUgbCAgNDM1OSA3OTgxIGwgIDQzNjEgNzk3NiBsICA0MzYyIDc5NzMgbCAgNDM2NSA3OTY5IGwgCis0MzY4IDc5NjYgbCAgNDM3MSA3OTYzIGwgIDQzNzUgNzk2MiBsICA0MzgwIDc5NjAgbCAgNDM4NCA3OTYwIGwgIDQzODQgNzk2MCBsIAorNDM4NCA3OTg1IGwgIHAgZWYKKzQ0MDkgNzk4NSBtICA0NDA5IDgxODUgbCAgNDM4NCA4MTg1IGwgIDQzNTkgODE4NSBsICA0MzU5IDc5ODUgbCAgNDM4NCA3OTg1IGwgCis0NDA5IDc5ODUgbCAgcCBlZgorZ3MKKzcxNzAgODY2NiBtIDg5NTQgODY2NiBsIDg5NTQgMTAyOTQgbCA3MTcwIDEwMjk0IGwgNzE3MCA4NjY2IGwgZW9jbGlwIG5ld3BhdGgKK2dzCit0bSBzZXRtYXRyaXgKKzQ3MzYgNTYzNiB0IAorMSAxIHMgCitncworZ3MKKzAgMCBtIDE3ODQgMCBsIDE3ODQgMTYyOCBsIDAgMTYyOCBsIDAgMCBsIGVvY2xpcCBuZXdwYXRoCitncworcHVtCisxNTkgNTU2IHQKKzg2IDkgbSAgODYgOSA4NiA5IDEyMiAtMzQxIGN0IDEyNCAtMzU1IDEyNCAtMzY1IDEyNCAtMzczIGN0IDEyNCAtMzg1IDEyMSAtMzk0IDExNCAtNDAwIGN0IAorMTA3IC00MDYgOTUgLTQxMCA3NyAtNDEwIGN0IDc3IC00MTAgNzcgLTQxMCA4MSAtNDIxIGN0IDgxIC00MjEgODEgLTQyMSAyMzcgLTQyMSBjdCAKKzIzNyAtNDIxIDIzNyAtNDIxIDIzNCAtNDEwIGN0IDIxMyAtNDEwIDE5OCAtNDA2IDE5MSAtMzk5IGN0IDE4MyAtMzkxIDE3NyAtMzcyIDE3NSAtMzQxIGN0IAorMTc1IC0zNDEgMTc1IC0zNDEgMTUxIC0xMTMgY3QgMTUxIC0xMTMgMTUxIC0xMTMgMzExIC0zNjEgY3QgMzExIC0zNjUgMzExIC0zNjkgMzExIC0zNzEgY3QgCiszMTEgLTM4MyAzMDggLTM5MiAzMDEgLTM5OCBjdCAyOTQgLTQwNSAyNzkgLTQwOSAyNTcgLTQxMCBjdCAyNTcgLTQxMCAyNTcgLTQxMCAyNTkgLTQyMSBjdCAKKzI1OSAtNDIxIDI1OSAtNDIxIDQzMCAtNDIxIGN0IDQzMCAtNDIxIDQzMCAtNDIxIDQyNiAtNDEwIGN0IDQwNyAtNDEwIDM5MyAtNDA4IDM4NyAtNDA1IGN0IAorMzgyIC00MDMgMzc3IC0zOTkgMzc0IC0zOTQgY3QgMzcxIC0zODkgMzY4IC0zODAgMzY2IC0zNjggY3QgMzY1IC0zNjQgMzYzIC0zNDAgMzU4IC0yOTYgY3QgCiszNTQgLTI1MSAzNDcgLTE5MCAzMzggLTExMyBjdCAzMzggLTExMyAzMzggLTExMyA0NzIgLTMxNyBjdCA0ODYgLTMzOSA0OTYgLTM1NCA0OTkgLTM2MyBjdCAKKzUwMyAtMzcyIDUwNSAtMzgwIDUwNSAtMzg2IGN0IDUwNSAtMzkyIDUwMiAtMzk3IDQ5NyAtNDAxIGN0IDQ5MiAtNDA2IDQ4NCAtNDA5IDQ3MiAtNDEwIGN0IAorNDcyIC00MTAgNDcyIC00MTAgNDc0IC00MjEgY3QgNDc0IC00MjEgNDc0IC00MjEgNTk5IC00MjEgY3QgNTk5IC00MjEgNTk5IC00MjEgNTk2IC00MTAgY3QgCis1ODUgLTQwOSA1NzUgLTQwNiA1NjcgLTQwMiBjdCA1NTggLTM5NyA1NDggLTM4OSA1MzcgLTM3NiBjdCA1MzAgLTM2OCA1MTYgLTM0OSA0OTYgLTMxNyBjdCAKKzQ5NiAtMzE3IDQ5NiAtMzE3IDI4NCA5IGN0IDI4NCA5IDI4NCA5IDI3MyA5IGN0IDI3MyA5IDI3MyA5IDMwNyAtMzE3IGN0IDMwNyAtMzE3IDMwNyAtMzE3IDk3IDkgY3QgCis5NyA5IDk3IDkgODYgOSBjdCBwIGVmCitwb20KK2dyCitncworcHVtCis4NDcgNTU2IHQKKzE2OCAxMzEgbSAgMTI3IDk4IDk2IDUwIDc1IC0xMiBjdCA1NiAtNjYgNDcgLTEyMyA0NyAtMTgzIGN0IDQ3IC0yNDEgNTYgLTI5OCA3NSAtMzU0IGN0IAorOTggLTQxOSAxMjggLTQ2NyAxNjggLTQ5NyBjdCAxNjggLTQ5NyAxNjggLTQ5NyAxNjggLTQ4MSBjdCAxMzkgLTQ1NCAxMTYgLTQwOCAxMDEgLTM0MiBjdCAKKzg5IC0yOTAgODMgLTIzNyA4MyAtMTgzIGN0IDgzIC0xMjkgODkgLTc2IDEwMSAtMjQgY3QgMTE2IDQzIDEzOSA4OSAxNjggMTE2IGN0IDE2OCAxMTYgMTY4IDExNiAxNjggMTMxIGN0IAorcCBlZgorcG9tCitncgorZ3MKK3B1bQorMTEzOCA1NTYgdAorNTQgLTI3MyBtICA1NCAtMjczIDU0IC0yNzMgMjQ5IC0yNzMgY3QgMjQ5IC0yNzMgMjQ5IC0yNzMgMjQ5IC0yNjUgY3QgMjQ5IC0yNjUgMjQ5IC0yNjUgMzUgLTQyIGN0IAorMzUgLTQyIDM1IC00MiAxMjUgLTQyIGN0IDE0NyAtNDIgMTYxIC00MyAxNjYgLTQ0IGN0IDE3MiAtNDYgMTc4IC01MCAxODMgLTU1IGN0IAorMTg3IC02MCAxOTMgLTcwIDE5OSAtODQgY3QgMTk5IC04NCAxOTkgLTg0IDIxMCAtODQgY3QgMjEwIC04NCAyMTAgLTg0IDE4MyAwIGN0IAorMTgzIDAgMTgzIDAgLTE4IDAgY3QgLTE4IDAgLTE4IDAgLTE4IC05IGN0IC0xOCAtOSAtMTggLTkgMTk2IC0yMzIgY3QgMTk2IC0yMzIgMTk2IC0yMzIgMTA5IC0yMzIgY3QgCis5MCAtMjMyIDc4IC0yMzIgNzQgLTIzMSBjdCA2OCAtMjI5IDYzIC0yMjYgNTcgLTIyMSBjdCA1MSAtMjE2IDQ1IC0yMDggMzkgLTE5NiBjdCAKKzM5IC0xOTYgMzkgLTE5NiAyOCAtMTk2IGN0IDI4IC0xOTYgMjggLTE5NiA1NCAtMjczIGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzE0MjkgNTU2IHQKKzMzIDExNiBtICA2MSA5MCA4MiA0NiA5NyAtMTggY3QgMTEwIC03MCAxMTcgLTEyMCAxMTcgLTE3MCBjdCAxMTcgLTIyOSAxMTEgLTI4NCAxMDAgLTMzNSBjdCAKKzg2IC00MDQgNjMgLTQ1MyAzMyAtNDgxIGN0IDMzIC00ODEgMzMgLTQ4MSAzMyAtNDk3IGN0IDcyIC00NjggMTAzIC00MjEgMTI1IC0zNTQgY3QgCisxNDMgLTI5OSAxNTMgLTI0MSAxNTMgLTE4MyBjdCAxNTMgLTEyMyAxNDQgLTY2IDEyNSAtMTEgY3QgMTAzIDU0IDcyIDEwMiAzMyAxMzEgY3QgCiszMyAxMzEgMzMgMTMxIDMzIDExNiBjdCBwIGVmCitwb20KK2dyCitncworMTMyIDc2NyBtICAxNTIxIDAgcmwgMCAzMSBybCAxNTIxIG5lZyAwIHJsIGVmIHAgZWYKKworZ3IKK2dzCitwdW0KKzM3MCAxMzIzIHQKKzIwOCAtMzQ1IG0gIDE5NyAtMzQ0IGwgIDExMyAtNDEwIGwgIDI1IC0zNDIgbCAgMTEgLTM0NSBsICAxMTMgLTQ2MiBsICAyMDggLTM0NSBsIAorcCBlZgorcG9tCitncgorZ3MKK3B1bQorMzE4IDE0NTUgdAorMzI4IC00MzAgbSAgMzI4IC00MzAgMzI4IC00MzAgMjk2IC04MCBjdCAyOTQgLTY0IDI5NCAtNTMgMjk0IC00OCBjdCAyOTQgLTQwIDI5NSAtMzMgMjk4IC0yOSBjdCAKKzMwMiAtMjMgMzA3IC0xOCAzMTQgLTE1IGN0IDMyMSAtMTIgMzMyIC0xMSAzNDggLTExIGN0IDM0OCAtMTEgMzQ4IC0xMSAzNDUgMCBjdCAKKzM0NSAwIDM0NSAwIDE4MCAwIGN0IDE4MCAwIDE4MCAwIDE4NCAtMTEgY3QgMTg0IC0xMSAxODQgLTExIDE5MSAtMTEgY3QgMjA0IC0xMSAyMTUgLTE0IDIyNCAtMjAgY3QgCisyMzAgLTI0IDIzNCAtMzAgMjM4IC0zOSBjdCAyNDAgLTQ2IDI0MiAtNjEgMjQ0IC04NSBjdCAyNDQgLTg1IDI0NCAtODUgMjQ5IC0xMzggY3QgCisyNDkgLTEzOCAyNDkgLTEzOCAxMjggLTEzOCBjdCAxMjggLTEzOCAxMjggLTEzOCA4NiAtODAgY3QgNzYgLTY3IDcwIC01NyA2NyAtNTIgY3QgCis2NSAtNDYgNjQgLTQxIDY0IC0zNiBjdCA2NCAtMjkgNjYgLTI0IDcyIC0xOSBjdCA3NyAtMTQgODYgLTExIDk4IC0xMSBjdCA5OCAtMTEgOTggLTExIDk1IDAgY3QgCis5NSAwIDk1IDAgLTMwIDAgY3QgLTMwIDAgLTMwIDAgLTI3IC0xMSBjdCAtMTIgLTEyIDIgLTE3IDE0IC0yNiBjdCAyNSAtMzYgNDMgLTU3IDY2IC04OCBjdCAKKzY2IC04OCA2NiAtODggMzE3IC00MzAgY3QgMzE3IC00MzAgMzE3IC00MzAgMzI4IC00MzAgY3QgcAorMjY4IC0zMjcgbSAgMTQ0IC0xNTkgbCAgMjUxIC0xNTkgbCAgMjY4IC0zMjcgbCAgcCBlZgorcG9tCitncgorZ3MKK3B1bQorNzY3IDE0NTUgdAorMTY4IDEzMSBtICAxMjcgOTggOTYgNTAgNzUgLTEyIGN0IDU2IC02NiA0NyAtMTIzIDQ3IC0xODMgY3QgNDcgLTI0MSA1NiAtMjk4IDc1IC0zNTQgY3QgCis5OCAtNDE5IDEyOCAtNDY3IDE2OCAtNDk3IGN0IDE2OCAtNDk3IDE2OCAtNDk3IDE2OCAtNDgxIGN0IDEzOSAtNDU0IDExNiAtNDA4IDEwMSAtMzQyIGN0IAorODkgLTI5MCA4MyAtMjM3IDgzIC0xODMgY3QgODMgLTEyOSA4OSAtNzYgMTAxIC0yNCBjdCAxMTYgNDMgMTM5IDg5IDE2OCAxMTYgY3QgMTY4IDExNiAxNjggMTE2IDE2OCAxMzEgY3QgCitwIGVmCitwb20KK2dyCitncworcHVtCisxMDMyIDE0NTUgdAorNTQgLTI3MyBtICA1NCAtMjczIDU0IC0yNzMgMjQ5IC0yNzMgY3QgMjQ5IC0yNzMgMjQ5IC0yNzMgMjQ5IC0yNjUgY3QgMjQ5IC0yNjUgMjQ5IC0yNjUgMzUgLTQyIGN0IAorMzUgLTQyIDM1IC00MiAxMjUgLTQyIGN0IDE0NyAtNDIgMTYxIC00MyAxNjYgLTQ0IGN0IDE3MiAtNDYgMTc4IC01MCAxODMgLTU1IGN0IAorMTg3IC02MCAxOTMgLTcwIDE5OSAtODQgY3QgMTk5IC04NCAxOTkgLTg0IDIxMCAtODQgY3QgMjEwIC04NCAyMTAgLTg0IDE4MyAwIGN0IAorMTgzIDAgMTgzIDAgLTE4IDAgY3QgLTE4IDAgLTE4IDAgLTE4IC05IGN0IC0xOCAtOSAtMTggLTkgMTk2IC0yMzIgY3QgMTk2IC0yMzIgMTk2IC0yMzIgMTA5IC0yMzIgY3QgCis5MCAtMjMyIDc4IC0yMzIgNzQgLTIzMSBjdCA2OCAtMjI5IDYzIC0yMjYgNTcgLTIyMSBjdCA1MSAtMjE2IDQ1IC0yMDggMzkgLTE5NiBjdCAKKzM5IC0xOTYgMzkgLTE5NiAyOCAtMTk2IGN0IDI4IC0xOTYgMjggLTE5NiA1NCAtMjczIGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzEzNDkgMTQ1NSB0CiszMyAxMTYgbSAgNjEgOTAgODIgNDYgOTcgLTE4IGN0IDExMCAtNzAgMTE3IC0xMjAgMTE3IC0xNzAgY3QgMTE3IC0yMjkgMTExIC0yODQgMTAwIC0zMzUgY3QgCis4NiAtNDA0IDYzIC00NTMgMzMgLTQ4MSBjdCAzMyAtNDgxIDMzIC00ODEgMzMgLTQ5NyBjdCA3MiAtNDY4IDEwMyAtNDIxIDEyNSAtMzU0IGN0IAorMTQzIC0yOTkgMTUzIC0yNDEgMTUzIC0xODMgY3QgMTUzIC0xMjMgMTQ0IC02NiAxMjUgLTExIGN0IDEwMyA1NCA3MiAxMDIgMzMgMTMxIGN0IAorMzMgMTMxIDMzIDEzMSAzMyAxMTYgY3QgcCBlZgorcG9tCitncgorZ3IKK2dyCitncgorZ3IKKzgwODUgMTAyODUgbSAgNzAzNSAxMDI4NSBsICA3MDM1IDg0ODUgbCAgOTEzNSA4NDg1IGwgIDkxMzUgMTAyODUgbCAgODA4NSAxMDI4NSBsIAorcGMKKzUxMzUgOTM4NCBtICA1Njk4IDkxOTcgbCAgNTY5OCA5NTcyIGwgIDUxMzUgOTM4NCBsICBwIGVmCis3MDM1IDk0MTAgbSAgNjA4NSA5NDEwIGwgIDYwODUgOTM4NSBsICA2MDg1IDkzNjAgbCAgNzAzNSA5MzYwIGwgIDcwMzUgOTM4NSBsIAorNzAzNSA5NDEwIGwgIHAgZWYKKzYwODUgOTM4NSBtICA2MDg1IDk0MTAgbCAgNjA4MSA5NDEwIGwgIDYwNzYgOTQwOCBsICA2MDczIDk0MDcgbCAgNjA2OSA5NDA0IGwgCis2MDY2IDk0MDEgbCAgNjA2MyA5Mzk4IGwgIDYwNjIgOTM5NCBsICA2MDYwIDkzODkgbCAgNjA2MCA5Mzg1IGwgIDYwNjAgOTM4NSBsIAorNjA4NSA5Mzg1IGwgIHAgZWYKKzYwNjAgOTM4NSBtICA2MDYwIDkzODQgbCAgNjA4NSA5Mzg0IGwgIDYxMTAgOTM4NCBsICA2MTEwIDkzODUgbCAgNjA4NSA5Mzg1IGwgCis2MDYwIDkzODUgbCAgcCBlZgorNjA4NSA5Mzg0IG0gIDYwODUgOTM1OSBsICA2MDg5IDkzNTkgbCAgNjA5NCA5MzYxIGwgIDYwOTcgOTM2MiBsICA2MTAxIDkzNjUgbCAKKzYxMDQgOTM2OCBsICA2MTA3IDkzNzEgbCAgNjEwOCA5Mzc1IGwgIDYxMTAgOTM4MCBsICA2MTEwIDkzODQgbCAgNjExMCA5Mzg0IGwgCis2MDg1IDkzODQgbCAgcCBlZgorNjA4NSA5NDA5IG0gIDU1ODUgOTQwOSBsICA1NTg1IDkzODQgbCAgNTU4NSA5MzU5IGwgIDYwODUgOTM1OSBsICA2MDg1IDkzODQgbCAKKzYwODUgOTQwOSBsICBwIGVmCis0Mzg1IDEyNTM2IG0gIDM5NzEgMTI1MzYgMzYzNSAxMjIwMCAzNjM1IDExNzg2IGN0IDM2MzUgMTEzNzIgMzk3MSAxMTAzNiA0Mzg1IDExMDM2IGN0IAorNDc5OSAxMTAzNiA1MTM1IDExMzcyIDUxMzUgMTE3ODYgY3QgNTEzNSAxMjIwMCA0Nzk5IDEyNTM2IDQzODUgMTI1MzYgY3QgcGMKK2dzCitncworcHVtCis0MTAyIDEyMTMwIHQKKzI0NiAtMTE1IG0gIDI0NiAtMzA5IGwgIDU0IC0zMDkgbCAgNTQgLTM5MCBsICAyNDYgLTM5MCBsICAyNDYgLTU4MiBsICAzMjggLTU4MiBsIAorMzI4IC0zOTAgbCAgNTIwIC0zOTAgbCAgNTIwIC0zMDkgbCAgMzI4IC0zMDkgbCAgMzI4IC0xMTUgbCAgMjQ2IC0xMTUgbCAKK3AgZWYKK3BvbQorZ3IKK2dyCitncworNzE3MCAxMTA2NyBtIDg5NTQgMTEwNjcgbCA4OTU0IDEyNjk1IGwgNzE3MCAxMjY5NSBsIDcxNzAgMTEwNjcgbCBlb2NsaXAgbmV3cGF0aAorZ3MKK3RtIHNldG1hdHJpeAorNDczNiA4MDQzIHQgCisxIDEgcyAKK2dzCitncworMCAwIG0gMTc4NCAwIGwgMTc4NCAxNjI4IGwgMCAxNjI4IGwgMCAwIGwgZW9jbGlwIG5ld3BhdGgKK2dzCitwdW0KKzE1OSA1NTYgdAorODYgOSBtICA4NiA5IDg2IDkgMTIyIC0zNDEgY3QgMTI0IC0zNTUgMTI0IC0zNjUgMTI0IC0zNzMgY3QgMTI0IC0zODUgMTIxIC0zOTQgMTE0IC00MDAgY3QgCisxMDcgLTQwNiA5NSAtNDEwIDc3IC00MTAgY3QgNzcgLTQxMCA3NyAtNDEwIDgxIC00MjEgY3QgODEgLTQyMSA4MSAtNDIxIDIzNyAtNDIxIGN0IAorMjM3IC00MjEgMjM3IC00MjEgMjM0IC00MTAgY3QgMjEzIC00MTAgMTk4IC00MDYgMTkxIC0zOTkgY3QgMTgzIC0zOTEgMTc3IC0zNzIgMTc1IC0zNDEgY3QgCisxNzUgLTM0MSAxNzUgLTM0MSAxNTEgLTExMyBjdCAxNTEgLTExMyAxNTEgLTExMyAzMTEgLTM2MSBjdCAzMTEgLTM2NSAzMTEgLTM2OSAzMTEgLTM3MSBjdCAKKzMxMSAtMzgzIDMwOCAtMzkyIDMwMSAtMzk4IGN0IDI5NCAtNDA1IDI3OSAtNDA5IDI1NyAtNDEwIGN0IDI1NyAtNDEwIDI1NyAtNDEwIDI1OSAtNDIxIGN0IAorMjU5IC00MjEgMjU5IC00MjEgNDMwIC00MjEgY3QgNDMwIC00MjEgNDMwIC00MjEgNDI2IC00MTAgY3QgNDA3IC00MTAgMzkzIC00MDggMzg3IC00MDUgY3QgCiszODIgLTQwMyAzNzcgLTM5OSAzNzQgLTM5NCBjdCAzNzEgLTM4OSAzNjggLTM4MCAzNjYgLTM2OCBjdCAzNjUgLTM2NCAzNjMgLTM0MCAzNTggLTI5NiBjdCAKKzM1NCAtMjUxIDM0NyAtMTkwIDMzOCAtMTEzIGN0IDMzOCAtMTEzIDMzOCAtMTEzIDQ3MiAtMzE3IGN0IDQ4NiAtMzM5IDQ5NiAtMzU0IDQ5OSAtMzYzIGN0IAorNTAzIC0zNzIgNTA1IC0zODAgNTA1IC0zODYgY3QgNTA1IC0zOTIgNTAyIC0zOTcgNDk3IC00MDEgY3QgNDkyIC00MDYgNDg0IC00MDkgNDcyIC00MTAgY3QgCis0NzIgLTQxMCA0NzIgLTQxMCA0NzQgLTQyMSBjdCA0NzQgLTQyMSA0NzQgLTQyMSA1OTkgLTQyMSBjdCA1OTkgLTQyMSA1OTkgLTQyMSA1OTYgLTQxMCBjdCAKKzU4NSAtNDA5IDU3NSAtNDA2IDU2NyAtNDAyIGN0IDU1OCAtMzk3IDU0OCAtMzg5IDUzNyAtMzc2IGN0IDUzMCAtMzY4IDUxNiAtMzQ5IDQ5NiAtMzE3IGN0IAorNDk2IC0zMTcgNDk2IC0zMTcgMjg0IDkgY3QgMjg0IDkgMjg0IDkgMjczIDkgY3QgMjczIDkgMjczIDkgMzA3IC0zMTcgY3QgMzA3IC0zMTcgMzA3IC0zMTcgOTcgOSBjdCAKKzk3IDkgOTcgOSA4NiA5IGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzg0NyA1NTYgdAorMTY4IDEzMSBtICAxMjcgOTggOTYgNTAgNzUgLTEyIGN0IDU2IC02NiA0NyAtMTIzIDQ3IC0xODMgY3QgNDcgLTI0MSA1NiAtMjk4IDc1IC0zNTQgY3QgCis5OCAtNDE5IDEyOCAtNDY3IDE2OCAtNDk3IGN0IDE2OCAtNDk3IDE2OCAtNDk3IDE2OCAtNDgxIGN0IDEzOSAtNDU0IDExNiAtNDA4IDEwMSAtMzQyIGN0IAorODkgLTI5MCA4MyAtMjM3IDgzIC0xODMgY3QgODMgLTEyOSA4OSAtNzYgMTAxIC0yNCBjdCAxMTYgNDMgMTM5IDg5IDE2OCAxMTYgY3QgMTY4IDExNiAxNjggMTE2IDE2OCAxMzEgY3QgCitwIGVmCitwb20KK2dyCitncworcHVtCisxMTM4IDU1NiB0Cis1NCAtMjczIG0gIDU0IC0yNzMgNTQgLTI3MyAyNDkgLTI3MyBjdCAyNDkgLTI3MyAyNDkgLTI3MyAyNDkgLTI2NSBjdCAyNDkgLTI2NSAyNDkgLTI2NSAzNSAtNDIgY3QgCiszNSAtNDIgMzUgLTQyIDEyNSAtNDIgY3QgMTQ3IC00MiAxNjEgLTQzIDE2NiAtNDQgY3QgMTcyIC00NiAxNzggLTUwIDE4MyAtNTUgY3QgCisxODcgLTYwIDE5MyAtNzAgMTk5IC04NCBjdCAxOTkgLTg0IDE5OSAtODQgMjEwIC04NCBjdCAyMTAgLTg0IDIxMCAtODQgMTgzIDAgY3QgCisxODMgMCAxODMgMCAtMTggMCBjdCAtMTggMCAtMTggMCAtMTggLTkgY3QgLTE4IC05IC0xOCAtOSAxOTYgLTIzMiBjdCAxOTYgLTIzMiAxOTYgLTIzMiAxMDkgLTIzMiBjdCAKKzkwIC0yMzIgNzggLTIzMiA3NCAtMjMxIGN0IDY4IC0yMjkgNjMgLTIyNiA1NyAtMjIxIGN0IDUxIC0yMTYgNDUgLTIwOCAzOSAtMTk2IGN0IAorMzkgLTE5NiAzOSAtMTk2IDI4IC0xOTYgY3QgMjggLTE5NiAyOCAtMTk2IDU0IC0yNzMgY3QgcCBlZgorcG9tCitncgorZ3MKK3B1bQorMTQyOSA1NTYgdAorMzMgMTE2IG0gIDYxIDkwIDgyIDQ2IDk3IC0xOCBjdCAxMTAgLTcwIDExNyAtMTIwIDExNyAtMTcwIGN0IDExNyAtMjI5IDExMSAtMjg0IDEwMCAtMzM1IGN0IAorODYgLTQwNCA2MyAtNDUzIDMzIC00ODEgY3QgMzMgLTQ4MSAzMyAtNDgxIDMzIC00OTcgY3QgNzIgLTQ2OCAxMDMgLTQyMSAxMjUgLTM1NCBjdCAKKzE0MyAtMjk5IDE1MyAtMjQxIDE1MyAtMTgzIGN0IDE1MyAtMTIzIDE0NCAtNjYgMTI1IC0xMSBjdCAxMDMgNTQgNzIgMTAyIDMzIDEzMSBjdCAKKzMzIDEzMSAzMyAxMzEgMzMgMTE2IGN0IHAgZWYKK3BvbQorZ3IKK2dzCisxMzIgNzY3IG0gIDE1MjEgMCBybCAwIDMxIHJsIDE1MjEgbmVnIDAgcmwgZWYgcCBlZgorCitncgorZ3MKK3B1bQorMzcwIDEzMjMgdAorMjA4IC0zNDUgbSAgMTk3IC0zNDQgbCAgMTEzIC00MTAgbCAgMjUgLTM0MiBsICAxMSAtMzQ1IGwgIDExMyAtNDYyIGwgIDIwOCAtMzQ1IGwgCitwIGVmCitwb20KK2dyCitncworcHVtCiszMTggMTQ1NSB0CiszMjggLTQzMCBtICAzMjggLTQzMCAzMjggLTQzMCAyOTYgLTgwIGN0IDI5NCAtNjQgMjk0IC01MyAyOTQgLTQ4IGN0IDI5NCAtNDAgMjk1IC0zMyAyOTggLTI5IGN0IAorMzAyIC0yMyAzMDcgLTE4IDMxNCAtMTUgY3QgMzIxIC0xMiAzMzIgLTExIDM0OCAtMTEgY3QgMzQ4IC0xMSAzNDggLTExIDM0NSAwIGN0IAorMzQ1IDAgMzQ1IDAgMTgwIDAgY3QgMTgwIDAgMTgwIDAgMTg0IC0xMSBjdCAxODQgLTExIDE4NCAtMTEgMTkxIC0xMSBjdCAyMDQgLTExIDIxNSAtMTQgMjI0IC0yMCBjdCAKKzIzMCAtMjQgMjM0IC0zMCAyMzggLTM5IGN0IDI0MCAtNDYgMjQyIC02MSAyNDQgLTg1IGN0IDI0NCAtODUgMjQ0IC04NSAyNDkgLTEzOCBjdCAKKzI0OSAtMTM4IDI0OSAtMTM4IDEyOCAtMTM4IGN0IDEyOCAtMTM4IDEyOCAtMTM4IDg2IC04MCBjdCA3NiAtNjcgNzAgLTU3IDY3IC01MiBjdCAKKzY1IC00NiA2NCAtNDEgNjQgLTM2IGN0IDY0IC0yOSA2NiAtMjQgNzIgLTE5IGN0IDc3IC0xNCA4NiAtMTEgOTggLTExIGN0IDk4IC0xMSA5OCAtMTEgOTUgMCBjdCAKKzk1IDAgOTUgMCAtMzAgMCBjdCAtMzAgMCAtMzAgMCAtMjcgLTExIGN0IC0xMiAtMTIgMiAtMTcgMTQgLTI2IGN0IDI1IC0zNiA0MyAtNTcgNjYgLTg4IGN0IAorNjYgLTg4IDY2IC04OCAzMTcgLTQzMCBjdCAzMTcgLTQzMCAzMTcgLTQzMCAzMjggLTQzMCBjdCBwCisyNjggLTMyNyBtICAxNDQgLTE1OSBsICAyNTEgLTE1OSBsICAyNjggLTMyNyBsICBwIGVmCitwb20KK2dyCitncworcHVtCis3NjcgMTQ1NSB0CisxNjggMTMxIG0gIDEyNyA5OCA5NiA1MCA3NSAtMTIgY3QgNTYgLTY2IDQ3IC0xMjMgNDcgLTE4MyBjdCA0NyAtMjQxIDU2IC0yOTggNzUgLTM1NCBjdCAKKzk4IC00MTkgMTI4IC00NjcgMTY4IC00OTcgY3QgMTY4IC00OTcgMTY4IC00OTcgMTY4IC00ODEgY3QgMTM5IC00NTQgMTE2IC00MDggMTAxIC0zNDIgY3QgCis4OSAtMjkwIDgzIC0yMzcgODMgLTE4MyBjdCA4MyAtMTI5IDg5IC03NiAxMDEgLTI0IGN0IDExNiA0MyAxMzkgODkgMTY4IDExNiBjdCAxNjggMTE2IDE2OCAxMTYgMTY4IDEzMSBjdCAKK3AgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzEwMzIgMTQ1NSB0Cis1NCAtMjczIG0gIDU0IC0yNzMgNTQgLTI3MyAyNDkgLTI3MyBjdCAyNDkgLTI3MyAyNDkgLTI3MyAyNDkgLTI2NSBjdCAyNDkgLTI2NSAyNDkgLTI2NSAzNSAtNDIgY3QgCiszNSAtNDIgMzUgLTQyIDEyNSAtNDIgY3QgMTQ3IC00MiAxNjEgLTQzIDE2NiAtNDQgY3QgMTcyIC00NiAxNzggLTUwIDE4MyAtNTUgY3QgCisxODcgLTYwIDE5MyAtNzAgMTk5IC04NCBjdCAxOTkgLTg0IDE5OSAtODQgMjEwIC04NCBjdCAyMTAgLTg0IDIxMCAtODQgMTgzIDAgY3QgCisxODMgMCAxODMgMCAtMTggMCBjdCAtMTggMCAtMTggMCAtMTggLTkgY3QgLTE4IC05IC0xOCAtOSAxOTYgLTIzMiBjdCAxOTYgLTIzMiAxOTYgLTIzMiAxMDkgLTIzMiBjdCAKKzkwIC0yMzIgNzggLTIzMiA3NCAtMjMxIGN0IDY4IC0yMjkgNjMgLTIyNiA1NyAtMjIxIGN0IDUxIC0yMTYgNDUgLTIwOCAzOSAtMTk2IGN0IAorMzkgLTE5NiAzOSAtMTk2IDI4IC0xOTYgY3QgMjggLTE5NiAyOCAtMTk2IDU0IC0yNzMgY3QgcCBlZgorcG9tCitncgorZ3MKK3B1bQorMTM0OSAxNDU1IHQKKzMzIDExNiBtICA2MSA5MCA4MiA0NiA5NyAtMTggY3QgMTEwIC03MCAxMTcgLTEyMCAxMTcgLTE3MCBjdCAxMTcgLTIyOSAxMTEgLTI4NCAxMDAgLTMzNSBjdCAKKzg2IC00MDQgNjMgLTQ1MyAzMyAtNDgxIGN0IDMzIC00ODEgMzMgLTQ4MSAzMyAtNDk3IGN0IDcyIC00NjggMTAzIC00MjEgMTI1IC0zNTQgY3QgCisxNDMgLTI5OSAxNTMgLTI0MSAxNTMgLTE4MyBjdCAxNTMgLTEyMyAxNDQgLTY2IDEyNSAtMTEgY3QgMTAzIDU0IDcyIDEwMiAzMyAxMzEgY3QgCiszMyAxMzEgMzMgMTMxIDMzIDExNiBjdCBwIGVmCitwb20KK2dyCitncgorZ3IKK2dyCitncgorODA4NSAxMjY4NiBtICA3MDM1IDEyNjg2IGwgIDcwMzUgMTA4ODYgbCAgOTEzNSAxMDg4NiBsICA5MTM1IDEyNjg2IGwgIDgwODUgMTI2ODYgbCAKK3BjCis1MTM1IDExNzg1IG0gIDU2OTggMTE1OTggbCAgNTY5OCAxMTk3MyBsICA1MTM1IDExNzg1IGwgIHAgZWYKKzcwMzUgMTE4MTEgbSAgNjA4NSAxMTgxMSBsICA2MDg1IDExNzg2IGwgIDYwODUgMTE3NjEgbCAgNzAzNSAxMTc2MSBsICA3MDM1IDExNzg2IGwgCis3MDM1IDExODExIGwgIHAgZWYKKzYwODUgMTE3ODYgbSAgNjA4NSAxMTgxMSBsICA2MDgxIDExODExIGwgIDYwNzYgMTE4MDkgbCAgNjA3MyAxMTgwOCBsICA2MDY5IDExODA1IGwgCis2MDY2IDExODAyIGwgIDYwNjMgMTE3OTkgbCAgNjA2MiAxMTc5NSBsICA2MDYwIDExNzkwIGwgIDYwNjAgMTE3ODYgbCAgNjA2MCAxMTc4NiBsIAorNjA4NSAxMTc4NiBsICBwIGVmCis2MDYwIDExNzg2IG0gIDYwNjAgMTE3ODUgbCAgNjA4NSAxMTc4NSBsICA2MTEwIDExNzg1IGwgIDYxMTAgMTE3ODYgbCAgNjA4NSAxMTc4NiBsIAorNjA2MCAxMTc4NiBsICBwIGVmCis2MDg1IDExNzg1IG0gIDYwODUgMTE3NjAgbCAgNjA4OSAxMTc2MCBsICA2MDk0IDExNzYyIGwgIDYwOTcgMTE3NjMgbCAgNjEwMSAxMTc2NiBsIAorNjEwNCAxMTc2OSBsICA2MTA3IDExNzcyIGwgIDYxMDggMTE3NzYgbCAgNjExMCAxMTc4MSBsICA2MTEwIDExNzg1IGwgIDYxMTAgMTE3ODUgbCAKKzYwODUgMTE3ODUgbCAgcCBlZgorNjA4NSAxMTgxMCBtICA1NTg1IDExODEwIGwgIDU1ODUgMTE3ODUgbCAgNTU4NSAxMTc2MCBsICA2MDg1IDExNzYwIGwgIDYwODUgMTE3ODUgbCAKKzYwODUgMTE4MTAgbCAgcCBlZgorNDM4NCAxMTAzNiBtICA0MTk3IDEwNDc0IGwgIDQ1NzIgMTA0NzQgbCAgNDM4NCAxMTAzNiBsICBwIGVmCis0NDA5IDEwMTM1IG0gIDQ0MDkgMTA1ODYgbCAgNDM1OSAxMDU4NiBsICA0MzU5IDEwMTM1IGwgIDQ0MDkgMTAxMzUgbCAgcCBlZgorMTU3MzUgMTI2ODUgbSAgMTQzMzUgMTI2ODUgbCAgMTQzMzUgMTA4ODUgbCAgMTcxMzUgMTA4ODUgbCAgMTcxMzUgMTI2ODUgbCAKKzE1NzM1IDEyNjg1IGwgIHBjCitncworZ3MKK3B1bQorMTQ2OTYgMTE2NjIgdAorMjU5IC0xMjUgbSAgMjU5IC0xMjUgMjU5IC0xMjUgMTE0IC0xMjUgY3QgMTE0IC0xMjUgMTE0IC0xMjUgODggLTY2IGN0IDgyIC01MiA3OSAtNDEgNzkgLTMzIGN0IAorNzkgLTI4IDgxIC0yMyA4NyAtMTggY3QgOTIgLTE0IDEwNCAtMTEgMTIyIC0xMCBjdCAxMjIgLTEwIDEyMiAtMTAgMTIyIDAgY3QgMTIyIDAgMTIyIDAgNCAwIGN0IAorNCAwIDQgMCA0IC0xMCBjdCAyMCAtMTMgMzAgLTE2IDM1IC0yMSBjdCA0NCAtMzAgNTQgLTQ4IDY2IC03NSBjdCA2NiAtNzUgNjYgLTc1IDIwMCAtMzgyIGN0IAorMjAwIC0zODIgMjAwIC0zODIgMjExIC0zODIgY3QgMjExIC0zODIgMjExIC0zODIgMzM4IC03MSBjdCAzNDggLTQ2IDM1OCAtMzAgMzY3IC0yMyBjdCAKKzM3NSAtMTUgMzg3IC0xMSA0MDIgLTEwIGN0IDQwMiAtMTAgNDAyIC0xMCA0MDIgMCBjdCA0MDIgMCA0MDIgMCAyNTQgMCBjdCAyNTQgMCAyNTQgMCAyNTQgLTEwIGN0IAorMjY5IC0xMSAyNzkgLTEzIDI4NCAtMTcgY3QgMjg5IC0yMiAyOTIgLTI3IDI5MiAtMzMgY3QgMjkyIC00MSAyODggLTUzIDI4MSAtNzEgY3QgCisyODEgLTcxIDI4MSAtNzEgMjU5IC0xMjUgY3QgcAorMjUwIC0xNDYgbSAgMTg5IC0yOTcgbCAgMTIzIC0xNDYgbCAgMjUwIC0xNDYgbCAgcCBlZgorNjA0IC0yOSBtICA1OTIgLTE2IDU4MCAtNyA1NjggLTEgY3QgNTU2IDQgNTQzIDcgNTMwIDcgY3QgNTAyIDcgNDc4IC00IDQ1NyAtMjcgY3QgCis0MzYgLTUwIDQyNiAtODAgNDI2IC0xMTYgY3QgNDI2IC0xNTIgNDM3IC0xODUgNDYwIC0yMTUgY3QgNDgzIC0yNDUgNTEzIC0yNjAgNTQ5IC0yNjAgY3QgCis1NzEgLTI2MCA1ODkgLTI1MiA2MDQgLTIzNyBjdCA2MDQgLTIzNyA2MDQgLTIzNyA2MDQgLTI4NiBjdCA2MDQgLTMxNCA2MDMgLTMzMiA2MDIgLTMzOCBjdCAKKzYwMSAtMzQ1IDU5OCAtMzQ5IDU5NSAtMzUyIGN0IDU5MyAtMzU0IDU4OSAtMzU1IDU4NSAtMzU1IGN0IDU4MCAtMzU1IDU3MyAtMzU0IDU2NiAtMzUxIGN0IAorNTY2IC0zNTEgNTY2IC0zNTEgNTYyIC0zNjEgY3QgNTYyIC0zNjEgNTYyIC0zNjEgNjM3IC0zOTIgY3QgNjM3IC0zOTIgNjM3IC0zOTIgNjQ5IC0zOTIgY3QgCis2NDkgLTM5MiA2NDkgLTM5MiA2NDkgLTk5IGN0IDY0OSAtNzAgNjUwIC01MyA2NTEgLTQ2IGN0IDY1MiAtNDAgNjU1IC0zNiA2NTggLTMzIGN0IAorNjYxIC0zMSA2NjQgLTI5IDY2OCAtMjkgY3QgNjczIC0yOSA2ODAgLTMxIDY4OCAtMzQgY3QgNjg4IC0zNCA2ODggLTM0IDY5MSAtMjQgY3QgCis2OTEgLTI0IDY5MSAtMjQgNjE3IDcgY3QgNjE3IDcgNjE3IDcgNjA0IDcgY3QgNjA0IDcgNjA0IDcgNjA0IC0yOSBjdCBwCis2MDQgLTQ4IG0gIDYwNCAtNDggNjA0IC00OCA2MDQgLTE3NyBjdCA2MDMgLTE4OSA2MDAgLTIwMSA1OTQgLTIxMSBjdCA1ODkgLTIyMSA1ODEgLTIyOSA1NzIgLTIzNCBjdCAKKzU2MyAtMjM5IDU1NCAtMjQyIDU0NSAtMjQyIGN0IDUyOSAtMjQyIDUxNSAtMjM1IDUwMiAtMjIwIGN0IDQ4NSAtMjAxIDQ3NyAtMTc0IDQ3NyAtMTM3IGN0IAorNDc3IC0xMDAgNDg1IC03MiA1MDEgLTUyIGN0IDUxOCAtMzMgNTM2IC0yMyA1NTUgLTIzIGN0IDU3MiAtMjMgNTg4IC0zMSA2MDQgLTQ4IGN0IAorcCBlZgorODUxIC0zNyBtICA4MjUgLTE3IDgwOSAtNSA4MDIgLTIgY3QgNzkyIDMgNzgyIDUgNzcwIDUgY3QgNzUzIDUgNzM4IC0xIDcyNyAtMTMgY3QgCis3MTYgLTI1IDcxMCAtNDAgNzEwIC02MCBjdCA3MTAgLTcyIDcxMyAtODMgNzE4IC05MiBjdCA3MjYgLTEwNCA3MzkgLTExNiA3NTggLTEyNyBjdCAKKzc3NiAtMTM4IDgwOCAtMTUxIDg1MSAtMTY3IGN0IDg1MSAtMTY3IDg1MSAtMTY3IDg1MSAtMTc3IGN0IDg1MSAtMjAyIDg0NyAtMjE5IDgzOSAtMjI4IGN0IAorODMxIC0yMzcgODIwIC0yNDIgODA0IC0yNDIgY3QgNzkzIC0yNDIgNzg0IC0yMzkgNzc3IC0yMzMgY3QgNzcwIC0yMjYgNzY2IC0yMTkgNzY2IC0yMTEgY3QgCis3NjYgLTIxMSA3NjYgLTIxMSA3NjcgLTE5NSBjdCA3NjcgLTE4NyA3NjUgLTE4MCA3NjAgLTE3NiBjdCA3NTYgLTE3MSA3NTAgLTE2OSA3NDMgLTE2OSBjdCAKKzczNyAtMTY5IDczMSAtMTcxIDcyNyAtMTc2IGN0IDcyMiAtMTgxIDcyMCAtMTg4IDcyMCAtMTk2IGN0IDcyMCAtMjEyIDcyOCAtMjI3IDc0NCAtMjQwIGN0IAorNzYwIC0yNTMgNzgzIC0yNjAgODEyIC0yNjAgY3QgODM0IC0yNjAgODUzIC0yNTYgODY3IC0yNDkgY3QgODc4IC0yNDMgODg2IC0yMzQgODkxIC0yMjIgY3QgCis4OTQgLTIxNCA4OTYgLTE5OCA4OTYgLTE3NCBjdCA4OTYgLTE3NCA4OTYgLTE3NCA4OTYgLTg5IGN0IDg5NiAtNjUgODk2IC01MCA4OTcgLTQ1IGN0IAorODk4IC0zOSA5MDAgLTM2IDkwMiAtMzQgY3QgOTA0IC0zMiA5MDYgLTMxIDkwOSAtMzEgY3QgOTEyIC0zMSA5MTUgLTMyIDkxNyAtMzMgY3QgCis5MjEgLTM1IDkyOCAtNDIgOTM5IC01MyBjdCA5MzkgLTUzIDkzOSAtNTMgOTM5IC0zOCBjdCA5MTkgLTEwIDg5OSA0IDg4MSA0IGN0IDg3MiA0IDg2NCAxIDg1OSAtNSBjdCAKKzg1NCAtMTEgODUxIC0yMiA4NTEgLTM3IGN0IHAKKzg1MSAtNTQgbSAgODUxIC01NCA4NTEgLTU0IDg1MSAtMTQ5IGN0IDgyMyAtMTM4IDgwNSAtMTMwIDc5NyAtMTI2IGN0IDc4MiAtMTE4IDc3MiAtMTEwIDc2NSAtMTAxIGN0IAorNzU5IC05MiA3NTYgLTgzIDc1NiAtNzIgY3QgNzU2IC01OSA3NjAgLTQ5IDc2OCAtNDAgY3QgNzc2IC0zMSA3ODUgLTI3IDc5NSAtMjcgY3QgCis4MTAgLTI3IDgyOCAtMzYgODUxIC01NCBjdCBwIGVmCis5NDAgLTIyOCBtICA5NDAgLTIyOCA5NDAgLTIyOCAxMDE4IC0yNTkgY3QgMTAxOCAtMjU5IDEwMTggLTI1OSAxMDI5IC0yNTkgY3QgCisxMDI5IC0yNTkgMTAyOSAtMjU5IDEwMjkgLTIwMSBjdCAxMDQyIC0yMjMgMTA1NSAtMjM4IDEwNjggLTI0NyBjdCAxMDgxIC0yNTYgMTA5NSAtMjYwIDExMDkgLTI2MCBjdCAKKzExMzQgLTI2MCAxMTU1IC0yNTAgMTE3MiAtMjMwIGN0IDExOTMgLTIwNiAxMjAzIC0xNzUgMTIwMyAtMTM2IGN0IDEyMDMgLTkyIDExOTEgLTU2IDExNjYgLTI4IGN0IAorMTE0NSAtNSAxMTIwIDcgMTA4OSA3IGN0IDEwNzUgNyAxMDYzIDUgMTA1NCAxIGN0IDEwNDYgLTIgMTAzOCAtNyAxMDI5IC0xNiBjdCAxMDI5IC0xNiAxMDI5IC0xNiAxMDI5IDYzIGN0IAorMTAyOSA4MCAxMDMwIDkxIDEwMzIgOTYgY3QgMTAzNCAxMDAgMTAzOCAxMDQgMTA0MyAxMDcgY3QgMTA0OSAxMTAgMTA1OCAxMTEgMTA3MiAxMTEgY3QgCisxMDcyIDExMSAxMDcyIDExMSAxMDcyIDEyMSBjdCAxMDcyIDEyMSAxMDcyIDEyMSA5MzcgMTIxIGN0IDkzNyAxMjEgOTM3IDEyMSA5MzcgMTExIGN0IAorOTM3IDExMSA5MzcgMTExIDk0NCAxMTEgY3QgOTU0IDExMSA5NjMgMTA5IDk3MSAxMDUgY3QgOTc0IDEwMyA5NzcgMTAwIDk3OSA5NSBjdCAKKzk4MSA5MSA5ODIgNzkgOTgyIDYxIGN0IDk4MiA2MSA5ODIgNjEgOTgyIC0xNzkgY3QgOTgyIC0xOTUgOTgxIC0yMDUgOTgwIC0yMDkgY3QgCis5NzggLTIxMyA5NzYgLTIxNiA5NzMgLTIxOSBjdCA5NzAgLTIyMSA5NjUgLTIyMiA5NjAgLTIyMiBjdCA5NTYgLTIyMiA5NTAgLTIyMSA5NDMgLTIxOCBjdCAKKzk0MyAtMjE4IDk0MyAtMjE4IDk0MCAtMjI4IGN0IHAKKzEwMjkgLTE4NSBtICAxMDI5IC0xODUgMTAyOSAtMTg1IDEwMjkgLTkwIGN0IDEwMjkgLTcwIDEwMzAgLTU3IDEwMzEgLTUwIGN0IDEwMzQgLTQwIDEwNDAgLTMwIDEwNTAgLTIyIGN0IAorMTA2MCAtMTQgMTA3MyAtMTAgMTA4OCAtMTAgY3QgMTEwNiAtMTAgMTEyMSAtMTcgMTEzMiAtMzEgY3QgMTE0NyAtNTAgMTE1NCAtNzcgMTE1NCAtMTExIGN0IAorMTE1NCAtMTQ5IDExNDYgLTE3OSAxMTI5IC0yMDAgY3QgMTExNyAtMjE0IDExMDMgLTIyMSAxMDg3IC0yMjEgY3QgMTA3OSAtMjIxIDEwNzAgLTIxOSAxMDYxIC0yMTQgY3QgCisxMDU1IC0yMTEgMTA0NCAtMjAxIDEwMjkgLTE4NSBjdCBwIGVmCisxMzE0IC0zMzcgbSAgMTMxNCAtMzM3IDEzMTQgLTMzNyAxMzE0IC0yNTMgY3QgMTMxNCAtMjUzIDEzMTQgLTI1MyAxMzczIC0yNTMgY3QgCisxMzczIC0yNTMgMTM3MyAtMjUzIDEzNzMgLTIzNCBjdCAxMzczIC0yMzQgMTM3MyAtMjM0IDEzMTQgLTIzNCBjdCAxMzE0IC0yMzQgMTMxNCAtMjM0IDEzMTQgLTcwIGN0IAorMTMxNCAtNTMgMTMxNiAtNDIgMTMyMSAtMzcgY3QgMTMyNiAtMzEgMTMzMiAtMjggMTMzOSAtMjggY3QgMTM0NSAtMjggMTM1MSAtMzAgMTM1NyAtMzQgY3QgCisxMzYyIC0zNyAxMzY3IC00MyAxMzcwIC01MCBjdCAxMzcwIC01MCAxMzcwIC01MCAxMzgxIC01MCBjdCAxMzc1IC0zMiAxMzY1IC0xOSAxMzU0IC0xMCBjdCAKKzEzNDIgLTEgMTMyOSA0IDEzMTcgNCBjdCAxMzA4IDQgMTMwMCAyIDEyOTIgLTMgY3QgMTI4NCAtOCAxMjc4IC0xNCAxMjc0IC0yMyBjdCAKKzEyNzAgLTMyIDEyNjggLTQ1IDEyNjggLTY0IGN0IDEyNjggLTY0IDEyNjggLTY0IDEyNjggLTIzNCBjdCAxMjY4IC0yMzQgMTI2OCAtMjM0IDEyMjggLTIzNCBjdCAKKzEyMjggLTIzNCAxMjI4IC0yMzQgMTIyOCAtMjQzIGN0IDEyMzggLTI0NyAxMjQ4IC0yNTQgMTI1OSAtMjY0IGN0IDEyNzAgLTI3MyAxMjc5IC0yODUgMTI4NyAtMjk4IGN0IAorMTI5MiAtMzA1IDEyOTcgLTMxOCAxMzA1IC0zMzcgY3QgMTMwNSAtMzM3IDEzMDUgLTMzNyAxMzE0IC0zMzcgY3QgcCBlZgorMTQ2MiAtMzkyIG0gIDE0NzAgLTM5MiAxNDc2IC0zODkgMTQ4MiAtMzg0IGN0IDE0ODcgLTM3OCAxNDkwIC0zNzIgMTQ5MCAtMzY0IGN0IAorMTQ5MCAtMzU2IDE0ODcgLTM1MCAxNDgyIC0zNDQgY3QgMTQ3NiAtMzM5IDE0NzAgLTMzNiAxNDYyIC0zMzYgY3QgMTQ1NCAtMzM2IDE0NDggLTMzOSAxNDQyIC0zNDQgY3QgCisxNDM3IC0zNTAgMTQzNCAtMzU2IDE0MzQgLTM2NCBjdCAxNDM0IC0zNzIgMTQzNyAtMzc4IDE0NDIgLTM4NCBjdCAxNDQ4IC0zODkgMTQ1NCAtMzkyIDE0NjIgLTM5MiBjdCAKK3AKKzE0ODUgLTI2MCBtICAxNDg1IC0yNjAgMTQ4NSAtMjYwIDE0ODUgLTU3IGN0IDE0ODUgLTQxIDE0ODYgLTMxIDE0ODggLTI2IGN0IDE0OTEgLTIwIDE0OTQgLTE2IDE0OTggLTE0IGN0IAorMTUwMyAtMTEgMTUxMCAtMTAgMTUyMiAtMTAgY3QgMTUyMiAtMTAgMTUyMiAtMTAgMTUyMiAwIGN0IDE1MjIgMCAxNTIyIDAgMTQwMiAwIGN0IAorMTQwMiAwIDE0MDIgMCAxNDAyIC0xMCBjdCAxNDE0IC0xMCAxNDIyIC0xMSAxNDI2IC0xNCBjdCAxNDMwIC0xNiAxNDMzIC0yMCAxNDM1IC0yNSBjdCAKKzE0MzggLTMxIDE0MzkgLTQxIDE0MzkgLTU3IGN0IDE0MzkgLTU3IDE0MzkgLTU3IDE0MzkgLTE1NCBjdCAxNDM5IC0xODEgMTQzOCAtMTk5IDE0MzcgLTIwNyBjdCAKKzE0MzUgLTIxMyAxNDMzIC0yMTcgMTQzMSAtMjIwIGN0IDE0MjggLTIyMiAxNDI0IC0yMjMgMTQxOSAtMjIzIGN0IDE0MTQgLTIyMyAxNDA4IC0yMjIgMTQwMSAtMjE5IGN0IAorMTQwMSAtMjE5IDE0MDEgLTIxOSAxMzk3IC0yMjkgY3QgMTM5NyAtMjI5IDEzOTcgLTIyOSAxNDczIC0yNjAgY3QgMTQ3MyAtMjYwIDE0NzMgLTI2MCAxNDg1IC0yNjAgY3QgCitwIGVmCisxNTQzIC0yNTMgbSAgMTU0MyAtMjUzIDE1NDMgLTI1MyAxNjYxIC0yNTMgY3QgMTY2MSAtMjUzIDE2NjEgLTI1MyAxNjYxIC0yNDMgY3QgCisxNjYxIC0yNDMgMTY2MSAtMjQzIDE2NTMgLTI0MyBjdCAxNjQ2IC0yNDMgMTY0MSAtMjQxIDE2MzcgLTIzOCBjdCAxNjMzIC0yMzQgMTYzMSAtMjMwIDE2MzEgLTIyNCBjdCAKKzE2MzEgLTIxNyAxNjMzIC0yMTAgMTYzNyAtMjAxIGN0IDE2MzcgLTIwMSAxNjM3IC0yMDEgMTY5NiAtNjIgY3QgMTY5NiAtNjIgMTY5NiAtNjIgMTc1NCAtMjA2IGN0IAorMTc1OCAtMjE2IDE3NjAgLTIyNCAxNzYwIC0yMzAgY3QgMTc2MCAtMjMyIDE3NjAgLTIzNCAxNzU4IC0yMzYgY3QgMTc1NiAtMjM5IDE3NTQgLTI0MCAxNzUwIC0yNDEgY3QgCisxNzQ3IC0yNDMgMTc0MSAtMjQzIDE3MzEgLTI0MyBjdCAxNzMxIC0yNDMgMTczMSAtMjQzIDE3MzEgLTI1MyBjdCAxNzMxIC0yNTMgMTczMSAtMjUzIDE4MTMgLTI1MyBjdCAKKzE4MTMgLTI1MyAxODEzIC0yNTMgMTgxMyAtMjQzIGN0IDE4MDQgLTI0MiAxNzk3IC0yNDAgMTc5MyAtMjM3IGN0IDE3ODcgLTIzMSAxNzgxIC0yMjIgMTc3NiAtMjA5IGN0IAorMTc3NiAtMjA5IDE3NzYgLTIwOSAxNjg3IDcgY3QgMTY4NyA3IDE2ODcgNyAxNjc2IDcgY3QgMTY3NiA3IDE2NzYgNyAxNTg3IC0yMDUgY3QgCisxNTgzIC0yMTYgMTU3OSAtMjIzIDE1NzUgLTIyNyBjdCAxNTcxIC0yMzIgMTU2NyAtMjM1IDE1NjEgLTIzOCBjdCAxNTU4IC0yNDAgMTU1MiAtMjQyIDE1NDMgLTI0MyBjdCAKKzE1NDMgLTI0MyAxNTQzIC0yNDMgMTU0MyAtMjUzIGN0IHAgZWYKKzE4ODAgLTE1OCBtICAxODgwIC0xMjEgMTg4OSAtOTIgMTkwNyAtNzEgY3QgMTkyNSAtNTAgMTk0NiAtMzkgMTk3MSAtMzkgY3QgMTk4NyAtMzkgMjAwMiAtNDMgMjAxNCAtNTIgY3QgCisyMDI2IC02MSAyMDM2IC03NyAyMDQ0IC05OSBjdCAyMDQ0IC05OSAyMDQ0IC05OSAyMDUzIC05NCBjdCAyMDQ5IC02OCAyMDM4IC00NSAyMDE5IC0yNCBjdCAKKzIwMDEgLTMgMTk3OCA3IDE5NTAgNyBjdCAxOTIwIDcgMTg5NCAtNSAxODcyIC0yOCBjdCAxODUxIC01MiAxODQwIC04MyAxODQwIC0xMjMgY3QgCisxODQwIC0xNjYgMTg1MSAtMjAwIDE4NzMgLTIyNCBjdCAxODk1IC0yNDggMTkyMyAtMjYwIDE5NTYgLTI2MCBjdCAxOTg0IC0yNjAgMjAwOCAtMjUxIDIwMjYgLTIzMiBjdCAKKzIwNDQgLTIxNCAyMDUzIC0xODkgMjA1MyAtMTU4IGN0IDIwNTMgLTE1OCAyMDUzIC0xNTggMTg4MCAtMTU4IGN0IHAKKzE4ODAgLTE3NCBtICAxODgwIC0xNzQgMTg4MCAtMTc0IDE5OTYgLTE3NCBjdCAxOTk1IC0xOTAgMTk5MyAtMjAxIDE5OTAgLTIwOCBjdCAKKzE5ODYgLTIxOCAxOTc5IC0yMjYgMTk3MCAtMjMxIGN0IDE5NjEgLTIzNyAxOTUxIC0yNDAgMTk0MiAtMjQwIGN0IDE5MjYgLTI0MCAxOTEzIC0yMzQgMTkwMSAtMjIzIGN0IAorMTg4OSAtMjExIDE4ODIgLTE5NSAxODgwIC0xNzQgY3QgcCBlZgorcG9tCitncgorZ3MKK3B1bQorMTQ2MzEgMTIyODkgdAorMjMzIC05NSBtICAyMjYgLTYyIDIxMyAtMzcgMTkzIC0xOSBjdCAxNzMgLTIgMTUxIDcgMTI3IDcgY3QgOTggNyA3MyAtNSA1MiAtMjkgY3QgCiszMSAtNTMgMjAgLTg1IDIwIC0xMjYgY3QgMjAgLTE2NiAzMiAtMTk4IDU1IC0yMjMgY3QgNzkgLTI0OCAxMDggLTI2MCAxNDEgLTI2MCBjdCAKKzE2NiAtMjYwIDE4NiAtMjUzIDIwMiAtMjQwIGN0IDIxOCAtMjI3IDIyNiAtMjE0IDIyNiAtMTk5IGN0IDIyNiAtMTkyIDIyNCAtMTg3IDIxOSAtMTgyIGN0IAorMjE1IC0xNzggMjA4IC0xNzYgMjAwIC0xNzYgY3QgMTkwIC0xNzYgMTgyIC0xODAgMTc2IC0xODcgY3QgMTczIC0xOTAgMTcxIC0xOTggMTcwIC0yMDkgY3QgCisxNjkgLTIyMCAxNjUgLTIyOCAxNTggLTIzNCBjdCAxNTIgLTIzOSAxNDMgLTI0MiAxMzIgLTI0MiBjdCAxMTMgLTI0MiA5OSAtMjM1IDg3IC0yMjIgY3QgCis3MiAtMjA0IDY1IC0xODAgNjUgLTE1MCBjdCA2NSAtMTIwIDcyIC05NCA4NyAtNzEgY3QgMTAyIC00OCAxMjIgLTM2IDE0NyAtMzYgY3QgCisxNjUgLTM2IDE4MSAtNDIgMTk2IC01NCBjdCAyMDYgLTYyIDIxNSAtNzcgMjI1IC05OSBjdCAyMjUgLTk5IDIyNSAtOTkgMjMzIC05NSBjdCAKK3AgZWYKKzM5MiAtMjYwIG0gIDQzMCAtMjYwIDQ2MSAtMjQ2IDQ4NCAtMjE3IGN0IDUwMyAtMTkyIDUxMyAtMTYzIDUxMyAtMTMxIGN0IDUxMyAtMTA5IDUwOCAtODYgNDk3IC02MyBjdCAKKzQ4NiAtNDAgNDcxIC0yMiA0NTIgLTExIGN0IDQzMyAxIDQxMiA3IDM4OSA3IGN0IDM1MSA3IDMyMSAtOCAyOTggLTM4IGN0IDI3OSAtNjQgMjcwIC05MiAyNzAgLTEyNCBjdCAKKzI3MCAtMTQ3IDI3NiAtMTcwIDI4NyAtMTkzIGN0IDI5OSAtMjE2IDMxNCAtMjMzIDMzMiAtMjQ0IGN0IDM1MSAtMjU1IDM3MSAtMjYwIDM5MiAtMjYwIGN0IAorcAorMzgzIC0yNDIgbSAgMzc0IC0yNDIgMzY0IC0yMzkgMzU0IC0yMzMgY3QgMzQ0IC0yMjggMzM2IC0yMTggMzMwIC0yMDMgY3QgMzI0IC0xODkgMzIxIC0xNzAgMzIxIC0xNDcgY3QgCiszMjEgLTExMSAzMjggLTc5IDM0MyAtNTMgY3QgMzU4IC0yNiAzNzcgLTEzIDQwMSAtMTMgY3QgNDE4IC0xMyA0MzMgLTIwIDQ0NSAtMzUgY3QgCis0NTYgLTUwIDQ2MiAtNzUgNDYyIC0xMTAgY3QgNDYyIC0xNTUgNDUyIC0xOTAgNDMzIC0yMTYgY3QgNDIwIC0yMzMgNDAzIC0yNDIgMzgzIC0yNDIgY3QgCitwIGVmCis3MzEgLTI5IG0gIDcxOSAtMTYgNzA3IC03IDY5NSAtMSBjdCA2ODMgNCA2NzAgNyA2NTcgNyBjdCA2MjkgNyA2MDUgLTQgNTg0IC0yNyBjdCAKKzU2MyAtNTAgNTUzIC04MCA1NTMgLTExNiBjdCA1NTMgLTE1MiA1NjQgLTE4NSA1ODcgLTIxNSBjdCA2MTAgLTI0NSA2NDAgLTI2MCA2NzYgLTI2MCBjdCAKKzY5OCAtMjYwIDcxNiAtMjUyIDczMSAtMjM3IGN0IDczMSAtMjM3IDczMSAtMjM3IDczMSAtMjg2IGN0IDczMSAtMzE0IDczMCAtMzMyIDcyOSAtMzM4IGN0IAorNzI4IC0zNDUgNzI1IC0zNDkgNzIyIC0zNTIgY3QgNzIwIC0zNTQgNzE2IC0zNTUgNzEyIC0zNTUgY3QgNzA3IC0zNTUgNzAwIC0zNTQgNjkzIC0zNTEgY3QgCis2OTMgLTM1MSA2OTMgLTM1MSA2ODkgLTM2MSBjdCA2ODkgLTM2MSA2ODkgLTM2MSA3NjQgLTM5MiBjdCA3NjQgLTM5MiA3NjQgLTM5MiA3NzYgLTM5MiBjdCAKKzc3NiAtMzkyIDc3NiAtMzkyIDc3NiAtOTkgY3QgNzc2IC03MCA3NzcgLTUzIDc3OCAtNDYgY3QgNzc5IC00MCA3ODIgLTM2IDc4NSAtMzMgY3QgCis3ODggLTMxIDc5MSAtMjkgNzk1IC0yOSBjdCA4MDAgLTI5IDgwNyAtMzEgODE1IC0zNCBjdCA4MTUgLTM0IDgxNSAtMzQgODE4IC0yNCBjdCAKKzgxOCAtMjQgODE4IC0yNCA3NDQgNyBjdCA3NDQgNyA3NDQgNyA3MzEgNyBjdCA3MzEgNyA3MzEgNyA3MzEgLTI5IGN0IHAKKzczMSAtNDggbSAgNzMxIC00OCA3MzEgLTQ4IDczMSAtMTc3IGN0IDczMCAtMTg5IDcyNyAtMjAxIDcyMSAtMjExIGN0IDcxNiAtMjIxIDcwOCAtMjI5IDY5OSAtMjM0IGN0IAorNjkwIC0yMzkgNjgxIC0yNDIgNjcyIC0yNDIgY3QgNjU2IC0yNDIgNjQyIC0yMzUgNjI5IC0yMjAgY3QgNjEyIC0yMDEgNjA0IC0xNzQgNjA0IC0xMzcgY3QgCis2MDQgLTEwMCA2MTIgLTcyIDYyOCAtNTIgY3QgNjQ1IC0zMyA2NjMgLTIzIDY4MiAtMjMgY3QgNjk5IC0yMyA3MTUgLTMxIDczMSAtNDggY3QgCitwIGVmCis4NzcgLTE1OCBtICA4NzcgLTEyMSA4ODYgLTkyIDkwNCAtNzEgY3QgOTIyIC01MCA5NDMgLTM5IDk2OCAtMzkgY3QgOTg0IC0zOSA5OTkgLTQzIDEwMTEgLTUyIGN0IAorMTAyMyAtNjEgMTAzMyAtNzcgMTA0MSAtOTkgY3QgMTA0MSAtOTkgMTA0MSAtOTkgMTA1MCAtOTQgY3QgMTA0NiAtNjggMTAzNSAtNDUgMTAxNiAtMjQgY3QgCis5OTggLTMgOTc1IDcgOTQ3IDcgY3QgOTE3IDcgODkxIC01IDg2OSAtMjggY3QgODQ4IC01MiA4MzcgLTgzIDgzNyAtMTIzIGN0IDgzNyAtMTY2IDg0OCAtMjAwIDg3MCAtMjI0IGN0IAorODkyIC0yNDggOTIwIC0yNjAgOTUzIC0yNjAgY3QgOTgxIC0yNjAgMTAwNSAtMjUxIDEwMjMgLTIzMiBjdCAxMDQxIC0yMTQgMTA1MCAtMTg5IDEwNTAgLTE1OCBjdCAKKzEwNTAgLTE1OCAxMDUwIC0xNTggODc3IC0xNTggY3QgcAorODc3IC0xNzQgbSAgODc3IC0xNzQgODc3IC0xNzQgOTkzIC0xNzQgY3QgOTkyIC0xOTAgOTkwIC0yMDEgOTg3IC0yMDggY3QgOTgzIC0yMTggOTc2IC0yMjYgOTY3IC0yMzEgY3QgCis5NTggLTIzNyA5NDggLTI0MCA5MzkgLTI0MCBjdCA5MjMgLTI0MCA5MTAgLTIzNCA4OTggLTIyMyBjdCA4ODYgLTIxMSA4NzkgLTE5NSA4NzcgLTE3NCBjdCAKK3AgZWYKKzExNTQgLTIwOSBtICAxMTc4IC0yNDMgMTIwNSAtMjYwIDEyMzMgLTI2MCBjdCAxMjU5IC0yNjAgMTI4MSAtMjQ5IDEzMDAgLTIyNyBjdCAKKzEzMTkgLTIwNSAxMzI5IC0xNzUgMTMyOSAtMTM2IGN0IDEzMjkgLTkyIDEzMTQgLTU2IDEyODQgLTI4IGN0IDEyNTkgLTUgMTIzMCA3IDExOTkgNyBjdCAKKzExODQgNyAxMTcwIDQgMTE1NCAtMSBjdCAxMTM5IC02IDExMjQgLTE0IDExMDggLTI1IGN0IDExMDggLTI1IDExMDggLTI1IDExMDggLTI4NiBjdCAKKzExMDggLTMxNCAxMTA3IC0zMzIgMTEwNiAtMzM4IGN0IDExMDUgLTM0NSAxMTAyIC0zNDkgMTA5OSAtMzUyIGN0IDEwOTYgLTM1NCAxMDkzIC0zNTUgMTA4OCAtMzU1IGN0IAorMTA4MyAtMzU1IDEwNzcgLTM1NCAxMDY5IC0zNTEgY3QgMTA2OSAtMzUxIDEwNjkgLTM1MSAxMDY1IC0zNjEgY3QgMTA2NSAtMzYxIDEwNjUgLTM2MSAxMTQxIC0zOTIgY3QgCisxMTQxIC0zOTIgMTE0MSAtMzkyIDExNTQgLTM5MiBjdCAxMTU0IC0zOTIgMTE1NCAtMzkyIDExNTQgLTIwOSBjdCBwCisxMTU0IC0xOTIgbSAgMTE1NCAtMTkyIDExNTQgLTE5MiAxMTU0IC00MSBjdCAxMTYzIC0zMiAxMTczIC0yNSAxMTgzIC0yMCBjdCAxMTkzIC0xNSAxMjAzIC0xMyAxMjEzIC0xMyBjdCAKKzEyMzAgLTEzIDEyNDUgLTIyIDEyNjAgLTQxIGN0IDEyNzQgLTU5IDEyODEgLTg2IDEyODEgLTEyMSBjdCAxMjgxIC0xNTMgMTI3NCAtMTc4IDEyNjAgLTE5NSBjdCAKKzEyNDUgLTIxMiAxMjI5IC0yMjEgMTIxMSAtMjIxIGN0IDEyMDEgLTIyMSAxMTkyIC0yMTkgMTE4MiAtMjE0IGN0IDExNzUgLTIxMCAxMTY1IC0yMDMgMTE1NCAtMTkyIGN0IAorcCBlZgorMTQ5MiAtMjYwIG0gIDE1MzAgLTI2MCAxNTYxIC0yNDYgMTU4NCAtMjE3IGN0IDE2MDMgLTE5MiAxNjEzIC0xNjMgMTYxMyAtMTMxIGN0IAorMTYxMyAtMTA5IDE2MDggLTg2IDE1OTcgLTYzIGN0IDE1ODYgLTQwIDE1NzEgLTIyIDE1NTIgLTExIGN0IDE1MzMgMSAxNTEyIDcgMTQ4OSA3IGN0IAorMTQ1MSA3IDE0MjEgLTggMTM5OCAtMzggY3QgMTM3OSAtNjQgMTM3MCAtOTIgMTM3MCAtMTI0IGN0IDEzNzAgLTE0NyAxMzc2IC0xNzAgMTM4NyAtMTkzIGN0IAorMTM5OSAtMjE2IDE0MTQgLTIzMyAxNDMyIC0yNDQgY3QgMTQ1MSAtMjU1IDE0NzEgLTI2MCAxNDkyIC0yNjAgY3QgcAorMTQ4MyAtMjQyIG0gIDE0NzQgLTI0MiAxNDY0IC0yMzkgMTQ1NCAtMjMzIGN0IDE0NDQgLTIyOCAxNDM2IC0yMTggMTQzMCAtMjAzIGN0IAorMTQyNCAtMTg5IDE0MjEgLTE3MCAxNDIxIC0xNDcgY3QgMTQyMSAtMTExIDE0MjggLTc5IDE0NDMgLTUzIGN0IDE0NTggLTI2IDE0NzcgLTEzIDE1MDEgLTEzIGN0IAorMTUxOCAtMTMgMTUzMyAtMjAgMTU0NSAtMzUgY3QgMTU1NiAtNTAgMTU2MiAtNzUgMTU2MiAtMTEwIGN0IDE1NjIgLTE1NSAxNTUyIC0xOTAgMTUzMyAtMjE2IGN0IAorMTUyMCAtMjMzIDE1MDMgLTI0MiAxNDgzIC0yNDIgY3QgcCBlZgorMTc3NiAtMjYwIG0gIDE4MTQgLTI2MCAxODQ1IC0yNDYgMTg2OCAtMjE3IGN0IDE4ODcgLTE5MiAxODk3IC0xNjMgMTg5NyAtMTMxIGN0IAorMTg5NyAtMTA5IDE4OTIgLTg2IDE4ODEgLTYzIGN0IDE4NzAgLTQwIDE4NTUgLTIyIDE4MzYgLTExIGN0IDE4MTcgMSAxNzk2IDcgMTc3MyA3IGN0IAorMTczNSA3IDE3MDUgLTggMTY4MiAtMzggY3QgMTY2MyAtNjQgMTY1NCAtOTIgMTY1NCAtMTI0IGN0IDE2NTQgLTE0NyAxNjYwIC0xNzAgMTY3MSAtMTkzIGN0IAorMTY4MyAtMjE2IDE2OTggLTIzMyAxNzE2IC0yNDQgY3QgMTczNSAtMjU1IDE3NTUgLTI2MCAxNzc2IC0yNjAgY3QgcAorMTc2NyAtMjQyIG0gIDE3NTggLTI0MiAxNzQ4IC0yMzkgMTczOCAtMjMzIGN0IDE3MjggLTIyOCAxNzIwIC0yMTggMTcxNCAtMjAzIGN0IAorMTcwOCAtMTg5IDE3MDUgLTE3MCAxNzA1IC0xNDcgY3QgMTcwNSAtMTExIDE3MTIgLTc5IDE3MjcgLTUzIGN0IDE3NDIgLTI2IDE3NjEgLTEzIDE3ODUgLTEzIGN0IAorMTgwMiAtMTMgMTgxNyAtMjAgMTgyOSAtMzUgY3QgMTg0MCAtNTAgMTg0NiAtNzUgMTg0NiAtMTEwIGN0IDE4NDYgLTE1NSAxODM2IC0xOTAgMTgxNyAtMjE2IGN0IAorMTgwNCAtMjMzIDE3ODcgLTI0MiAxNzY3IC0yNDIgY3QgcCBlZgorMjAxMSAtMzkyIG0gIDIwMTEgLTM5MiAyMDExIC0zOTIgMjAxMSAtMTQxIGN0IDIwMTEgLTE0MSAyMDExIC0xNDEgMjA3NCAtMjAwIGN0IAorMjA4OCAtMjEyIDIwOTYgLTIyMCAyMDk4IC0yMjMgY3QgMjEwMCAtMjI1IDIxMDAgLTIyNyAyMTAwIC0yMjkgY3QgMjEwMCAtMjMzIDIwOTkgLTIzNiAyMDk2IC0yMzkgY3QgCisyMDkzIC0yNDEgMjA4OCAtMjQzIDIwODEgLTI0MyBjdCAyMDgxIC0yNDMgMjA4MSAtMjQzIDIwODEgLTI1MyBjdCAyMDgxIC0yNTMgMjA4MSAtMjUzIDIxOTAgLTI1MyBjdCAKKzIxOTAgLTI1MyAyMTkwIC0yNTMgMjE5MCAtMjQ0IGN0IDIxNzUgLTI0NCAyMTYzIC0yNDEgMjE1MyAtMjM3IGN0IDIxNDMgLTIzMyAyMTMyIC0yMjUgMjEyMCAtMjE0IGN0IAorMjEyMCAtMjE0IDIxMjAgLTIxNCAyMDU2IC0xNTUgY3QgMjA1NiAtMTU1IDIwNTYgLTE1NSAyMTIwIC03MiBjdCAyMTM4IC01MCAyMTUwIC0zNSAyMTU1IC0yOSBjdCAKKzIxNjQgLTIxIDIxNzIgLTE1IDIxNzkgLTEzIGN0IDIxODMgLTExIDIxOTIgLTEwIDIyMDMgLTEwIGN0IDIyMDMgLTEwIDIyMDMgLTEwIDIyMDMgMCBjdCAKKzIyMDMgMCAyMjAzIDAgMjA4MSAwIGN0IDIwODEgMCAyMDgxIDAgMjA4MSAtMTAgY3QgMjA4OCAtMTAgMjA5MiAtMTEgMjA5NSAtMTMgY3QgCisyMDk3IC0xNSAyMDk5IC0xOCAyMDk5IC0yMSBjdCAyMDk5IC0yNiAyMDk1IC0zMiAyMDg4IC00MiBjdCAyMDg4IC00MiAyMDg4IC00MiAyMDExIC0xNDEgY3QgCisyMDExIC0xNDEgMjAxMSAtMTQxIDIwMTEgLTU3IGN0IDIwMTEgLTQxIDIwMTIgLTMwIDIwMTQgLTI1IGN0IDIwMTcgLTE5IDIwMjAgLTE2IDIwMjQgLTE0IGN0IAorMjAyOSAtMTEgMjAzOCAtMTAgMjA1MiAtMTAgY3QgMjA1MiAtMTAgMjA1MiAtMTAgMjA1MiAwIGN0IDIwNTIgMCAyMDUyIDAgMTkyNCAwIGN0IAorMTkyNCAwIDE5MjQgMCAxOTI0IC0xMCBjdCAxOTM3IC0xMCAxOTQ2IC0xMiAxOTUyIC0xNSBjdCAxOTU2IC0xNyAxOTU5IC0yMCAxOTYxIC0yNCBjdCAKKzE5NjQgLTMwIDE5NjUgLTQwIDE5NjUgLTU1IGN0IDE5NjUgLTU1IDE5NjUgLTU1IDE5NjUgLTI4NiBjdCAxOTY1IC0zMTUgMTk2NCAtMzMyIDE5NjMgLTMzOSBjdCAKKzE5NjIgLTM0NSAxOTYwIC0zNTAgMTk1NyAtMzUyIGN0IDE5NTQgLTM1NCAxOTUwIC0zNTYgMTk0NiAtMzU2IGN0IDE5NDIgLTM1NiAxOTM2IC0zNTQgMTkyOSAtMzUxIGN0IAorMTkyOSAtMzUxIDE5MjkgLTM1MSAxOTI0IC0zNjEgY3QgMTkyNCAtMzYxIDE5MjQgLTM2MSAxOTk4IC0zOTIgY3QgMTk5OCAtMzkyIDE5OTggLTM5MiAyMDExIC0zOTIgY3QgCitwIGVmCitwb20KK2dyCitncgorMTE2ODUgMTI2ODUgbSAgMTA0MzUgMTI2ODUgbCAgMTA0MzUgMTA4ODUgbCAgMTI5MzUgMTA4ODUgbCAgMTI5MzUgMTI2ODUgbCAKKzExNjg1IDEyNjg1IGwgIHBjCitncworZ3MKK3B1bQorMTExMTEgMTE2NjIgdAorMjcgLTMwMiBtICAzOCAtMzI3IDUxIC0zNDcgNjggLTM2MCBjdCA4NCAtMzc0IDEwNSAtMzgxIDEyOSAtMzgxIGN0IDE1OSAtMzgxIDE4MyAtMzcxIDE5OSAtMzUyIGN0IAorMjExIC0zMzcgMjE3IC0zMjIgMjE3IC0zMDUgY3QgMjE3IC0yNzggMjAwIC0yNTAgMTY1IC0yMjEgY3QgMTg4IC0yMTIgMjA1IC0yMDAgMjE3IC0xODMgY3QgCisyMjkgLTE2NiAyMzUgLTE0NyAyMzUgLTEyNCBjdCAyMzUgLTkyIDIyNSAtNjQgMjA0IC00MCBjdCAxNzcgLTkgMTM4IDYgODcgNiBjdCA2MiA2IDQ1IDMgMzYgLTMgY3QgCisyNyAtMTAgMjIgLTE3IDIyIC0yNCBjdCAyMiAtMjkgMjQgLTM0IDI4IC0zOCBjdCAzMyAtNDIgMzggLTQ0IDQ0IC00NCBjdCA0OSAtNDQgNTMgLTQzIDU4IC00MiBjdCAKKzYxIC00MSA2OCAtMzcgNzkgLTMyIGN0IDkwIC0yNiA5OCAtMjIgMTAyIC0yMSBjdCAxMDkgLTE5IDExNiAtMTggMTI0IC0xOCBjdCAxNDMgLTE4IDE1OSAtMjUgMTczIC00MCBjdCAKKzE4NyAtNTQgMTk0IC03MSAxOTQgLTkxIGN0IDE5NCAtMTA2IDE5MSAtMTIwIDE4NCAtMTM0IGN0IDE4MCAtMTQ0IDE3NCAtMTUyIDE2OSAtMTU3IGN0IAorMTYxIC0xNjQgMTUwIC0xNzEgMTM3IC0xNzcgY3QgMTIzIC0xODMgMTA5IC0xODYgOTUgLTE4NiBjdCA5NSAtMTg2IDk1IC0xODYgODYgLTE4NiBjdCAKKzg2IC0xODYgODYgLTE4NiA4NiAtMTk0IGN0IDEwMCAtMTk2IDExNSAtMjAxIDEyOSAtMjEwIGN0IDE0NCAtMjE4IDE1NSAtMjI5IDE2MSAtMjQxIGN0IAorMTY4IC0yNTMgMTcxIC0yNjYgMTcxIC0yODEgY3QgMTcxIC0zMDAgMTY1IC0zMTUgMTUzIC0zMjcgY3QgMTQxIC0zMzggMTI2IC0zNDQgMTA4IC0zNDQgY3QgCis4MCAtMzQ0IDU2IC0zMjkgMzYgLTI5OCBjdCAzNiAtMjk4IDM2IC0yOTggMjcgLTMwMiBjdCBwIGVmCiszMDcgLTE0OCBtICA0NTAgLTE0OCBsICA0NTAgLTEwNiBsICAzMDcgLTEwNiBsICAzMDcgLTE0OCBsICBwIGVmCis1NjEgLTMzNyBtICA1NjEgLTMzNyA1NjEgLTMzNyA1NjEgLTI1MyBjdCA1NjEgLTI1MyA1NjEgLTI1MyA2MjAgLTI1MyBjdCA2MjAgLTI1MyA2MjAgLTI1MyA2MjAgLTIzNCBjdCAKKzYyMCAtMjM0IDYyMCAtMjM0IDU2MSAtMjM0IGN0IDU2MSAtMjM0IDU2MSAtMjM0IDU2MSAtNzAgY3QgNTYxIC01MyA1NjMgLTQyIDU2OCAtMzcgY3QgCis1NzMgLTMxIDU3OSAtMjggNTg2IC0yOCBjdCA1OTIgLTI4IDU5OCAtMzAgNjA0IC0zNCBjdCA2MDkgLTM3IDYxNCAtNDMgNjE3IC01MCBjdCAKKzYxNyAtNTAgNjE3IC01MCA2MjggLTUwIGN0IDYyMiAtMzIgNjEyIC0xOSA2MDEgLTEwIGN0IDU4OSAtMSA1NzYgNCA1NjQgNCBjdCA1NTUgNCA1NDcgMiA1MzkgLTMgY3QgCis1MzEgLTggNTI1IC0xNCA1MjEgLTIzIGN0IDUxNyAtMzIgNTE1IC00NSA1MTUgLTY0IGN0IDUxNSAtNjQgNTE1IC02NCA1MTUgLTIzNCBjdCAKKzUxNSAtMjM0IDUxNSAtMjM0IDQ3NSAtMjM0IGN0IDQ3NSAtMjM0IDQ3NSAtMjM0IDQ3NSAtMjQzIGN0IDQ4NSAtMjQ3IDQ5NSAtMjU0IDUwNiAtMjY0IGN0IAorNTE3IC0yNzMgNTI2IC0yODUgNTM0IC0yOTggY3QgNTM5IC0zMDUgNTQ0IC0zMTggNTUyIC0zMzcgY3QgNTUyIC0zMzcgNTUyIC0zMzcgNTYxIC0zMzcgY3QgCitwIGVmCis3ODggLTM3IG0gIDc2MiAtMTcgNzQ2IC01IDczOSAtMiBjdCA3MjkgMyA3MTkgNSA3MDcgNSBjdCA2OTAgNSA2NzUgLTEgNjY0IC0xMyBjdCAKKzY1MyAtMjUgNjQ3IC00MCA2NDcgLTYwIGN0IDY0NyAtNzIgNjUwIC04MyA2NTUgLTkyIGN0IDY2MyAtMTA0IDY3NiAtMTE2IDY5NSAtMTI3IGN0IAorNzEzIC0xMzggNzQ1IC0xNTEgNzg4IC0xNjcgY3QgNzg4IC0xNjcgNzg4IC0xNjcgNzg4IC0xNzcgY3QgNzg4IC0yMDIgNzg0IC0yMTkgNzc2IC0yMjggY3QgCis3NjggLTIzNyA3NTcgLTI0MiA3NDEgLTI0MiBjdCA3MzAgLTI0MiA3MjEgLTIzOSA3MTQgLTIzMyBjdCA3MDcgLTIyNiA3MDMgLTIxOSA3MDMgLTIxMSBjdCAKKzcwMyAtMjExIDcwMyAtMjExIDcwNCAtMTk1IGN0IDcwNCAtMTg3IDcwMiAtMTgwIDY5NyAtMTc2IGN0IDY5MyAtMTcxIDY4NyAtMTY5IDY4MCAtMTY5IGN0IAorNjc0IC0xNjkgNjY4IC0xNzEgNjY0IC0xNzYgY3QgNjU5IC0xODEgNjU3IC0xODggNjU3IC0xOTYgY3QgNjU3IC0yMTIgNjY1IC0yMjcgNjgxIC0yNDAgY3QgCis2OTcgLTI1MyA3MjAgLTI2MCA3NDkgLTI2MCBjdCA3NzEgLTI2MCA3OTAgLTI1NiA4MDQgLTI0OSBjdCA4MTUgLTI0MyA4MjMgLTIzNCA4MjggLTIyMiBjdCAKKzgzMSAtMjE0IDgzMyAtMTk4IDgzMyAtMTc0IGN0IDgzMyAtMTc0IDgzMyAtMTc0IDgzMyAtODkgY3QgODMzIC02NSA4MzMgLTUwIDgzNCAtNDUgY3QgCis4MzUgLTM5IDgzNyAtMzYgODM5IC0zNCBjdCA4NDEgLTMyIDg0MyAtMzEgODQ2IC0zMSBjdCA4NDkgLTMxIDg1MiAtMzIgODU0IC0zMyBjdCAKKzg1OCAtMzUgODY1IC00MiA4NzYgLTUzIGN0IDg3NiAtNTMgODc2IC01MyA4NzYgLTM4IGN0IDg1NiAtMTAgODM2IDQgODE4IDQgY3QgODA5IDQgODAxIDEgNzk2IC01IGN0IAorNzkxIC0xMSA3ODggLTIyIDc4OCAtMzcgY3QgcAorNzg4IC01NCBtICA3ODggLTU0IDc4OCAtNTQgNzg4IC0xNDkgY3QgNzYwIC0xMzggNzQyIC0xMzAgNzM0IC0xMjYgY3QgNzE5IC0xMTggNzA5IC0xMTAgNzAyIC0xMDEgY3QgCis2OTYgLTkyIDY5MyAtODMgNjkzIC03MiBjdCA2OTMgLTU5IDY5NyAtNDkgNzA1IC00MCBjdCA3MTMgLTMxIDcyMiAtMjcgNzMyIC0yNyBjdCAKKzc0NyAtMjcgNzY1IC0zNiA3ODggLTU0IGN0IHAgZWYKKzg3NiAtMjI4IG0gIDg3NiAtMjI4IDg3NiAtMjI4IDk1NCAtMjU5IGN0IDk1NCAtMjU5IDk1NCAtMjU5IDk2NSAtMjU5IGN0IDk2NSAtMjU5IDk2NSAtMjU5IDk2NSAtMjAxIGN0IAorOTc4IC0yMjMgOTkxIC0yMzggMTAwNCAtMjQ3IGN0IDEwMTcgLTI1NiAxMDMxIC0yNjAgMTA0NSAtMjYwIGN0IDEwNzAgLTI2MCAxMDkxIC0yNTAgMTEwOCAtMjMwIGN0IAorMTEyOSAtMjA2IDExMzkgLTE3NSAxMTM5IC0xMzYgY3QgMTEzOSAtOTIgMTEyNyAtNTYgMTEwMiAtMjggY3QgMTA4MSAtNSAxMDU2IDcgMTAyNSA3IGN0IAorMTAxMSA3IDk5OSA1IDk5MCAxIGN0IDk4MiAtMiA5NzQgLTcgOTY1IC0xNiBjdCA5NjUgLTE2IDk2NSAtMTYgOTY1IDYzIGN0IDk2NSA4MCA5NjYgOTEgOTY4IDk2IGN0IAorOTcwIDEwMCA5NzQgMTA0IDk3OSAxMDcgY3QgOTg1IDExMCA5OTQgMTExIDEwMDggMTExIGN0IDEwMDggMTExIDEwMDggMTExIDEwMDggMTIxIGN0IAorMTAwOCAxMjEgMTAwOCAxMjEgODczIDEyMSBjdCA4NzMgMTIxIDg3MyAxMjEgODczIDExMSBjdCA4NzMgMTExIDg3MyAxMTEgODgwIDExMSBjdCAKKzg5MCAxMTEgODk5IDEwOSA5MDcgMTA1IGN0IDkxMCAxMDMgOTEzIDEwMCA5MTUgOTUgY3QgOTE3IDkxIDkxOCA3OSA5MTggNjEgY3QgOTE4IDYxIDkxOCA2MSA5MTggLTE3OSBjdCAKKzkxOCAtMTk1IDkxNyAtMjA1IDkxNiAtMjA5IGN0IDkxNCAtMjEzIDkxMiAtMjE2IDkwOSAtMjE5IGN0IDkwNiAtMjIxIDkwMSAtMjIyIDg5NiAtMjIyIGN0IAorODkyIC0yMjIgODg2IC0yMjEgODc5IC0yMTggY3QgODc5IC0yMTggODc5IC0yMTggODc2IC0yMjggY3QgcAorOTY1IC0xODUgbSAgOTY1IC0xODUgOTY1IC0xODUgOTY1IC05MCBjdCA5NjUgLTcwIDk2NiAtNTcgOTY3IC01MCBjdCA5NzAgLTQwIDk3NiAtMzAgOTg2IC0yMiBjdCAKKzk5NiAtMTQgMTAwOSAtMTAgMTAyNCAtMTAgY3QgMTA0MiAtMTAgMTA1NyAtMTcgMTA2OCAtMzEgY3QgMTA4MyAtNTAgMTA5MCAtNzcgMTA5MCAtMTExIGN0IAorMTA5MCAtMTQ5IDEwODIgLTE3OSAxMDY1IC0yMDAgY3QgMTA1MyAtMjE0IDEwMzkgLTIyMSAxMDIzIC0yMjEgY3QgMTAxNSAtMjIxIDEwMDYgLTIxOSA5OTcgLTIxNCBjdCAKKzk5MSAtMjExIDk4MCAtMjAxIDk2NSAtMTg1IGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzExMjA0IDEyMjg5IHQKKzg1IC05MyBtICA2OSAtMTAxIDU4IC0xMTEgNDkgLTEyNSBjdCA0MSAtMTM4IDM3IC0xNTMgMzcgLTE2OSBjdCAzNyAtMTk0IDQ2IC0yMTUgNjUgLTIzMyBjdCAKKzg0IC0yNTEgMTA4IC0yNjAgMTM4IC0yNjAgY3QgMTYyIC0yNjAgMTgzIC0yNTQgMjAwIC0yNDIgY3QgMjAwIC0yNDIgMjAwIC0yNDIgMjU0IC0yNDIgY3QgCisyNjIgLTI0MiAyNjYgLTI0MiAyNjggLTI0MSBjdCAyNjkgLTI0MSAyNzAgLTI0MCAyNzAgLTIzOSBjdCAyNzEgLTIzNyAyNzIgLTIzNCAyNzIgLTIzMCBjdCAKKzI3MiAtMjI1IDI3MiAtMjIyIDI3MSAtMjIwIGN0IDI3MCAtMjE5IDI2OSAtMjE4IDI2OCAtMjE4IGN0IDI2NiAtMjE3IDI2MiAtMjE3IDI1NCAtMjE3IGN0IAorMjU0IC0yMTcgMjU0IC0yMTcgMjIxIC0yMTcgY3QgMjMxIC0yMDQgMjM2IC0xODcgMjM2IC0xNjcgY3QgMjM2IC0xNDMgMjI3IC0xMjMgMjA5IC0xMDcgY3QgCisxOTEgLTkwIDE2NyAtODIgMTM3IC04MiBjdCAxMjQgLTgyIDExMSAtODQgOTggLTg4IGN0IDkwIC04MSA4NSAtNzQgODIgLTY5IGN0IDc5IC02NCA3OCAtNTkgNzggLTU2IGN0IAorNzggLTUyIDgwIC00OSA4MyAtNDYgY3QgODYgLTQzIDkxIC00MSAxMDAgLTQwIGN0IDEwNSAtMzkgMTE4IC0zOSAxMzkgLTM4IGN0IDE3NiAtMzcgMjAxIC0zNiAyMTIgLTM0IGN0IAorMjI5IC0zMiAyNDMgLTI1IDI1MyAtMTUgY3QgMjYzIC01IDI2OCA4IDI2OCAyMyBjdCAyNjggNDQgMjU4IDYzIDIzOSA4MiBjdCAyMTEgMTA5IDE3MyAxMjIgMTI4IDEyMiBjdCAKKzkyIDEyMiA2MyAxMTQgMzkgOTggY3QgMjUgODkgMTggNzkgMTggNjkgY3QgMTggNjUgMTkgNjAgMjEgNTYgY3QgMjQgNDkgMzAgNDAgNDAgMjggY3QgCis0MSAyNiA1MCAxNiA2NyAtMiBjdCA1OCAtOCA1MSAtMTMgNDcgLTE4IGN0IDQzIC0yMiA0MSAtMjcgNDEgLTMzIGN0IDQxIC00MCA0NCAtNDcgNDkgLTU2IGN0IAorNTQgLTY1IDY2IC03NyA4NSAtOTMgY3QgcAorMTMzIC0yNDYgbSAgMTE5IC0yNDYgMTA4IC0yNDEgOTkgLTIzMCBjdCA5MCAtMjE5IDg1IC0yMDMgODUgLTE4MSBjdCA4NSAtMTUyIDkxIC0xMzAgMTA0IC0xMTQgY3QgCisxMTMgLTEwMiAxMjUgLTk2IDE0MCAtOTYgY3QgMTU0IC05NiAxNjYgLTEwMSAxNzUgLTExMiBjdCAxODQgLTEyMiAxODggLTEzOCAxODggLTE2MCBjdCAKKzE4OCAtMTg5IDE4MiAtMjEyIDE2OSAtMjI4IGN0IDE2MCAtMjQwIDE0OCAtMjQ2IDEzMyAtMjQ2IGN0IHAKKzgyIDAgbSAgNzQgOSA2OCAxOCA2MyAyNiBjdCA1OSAzNCA1NyA0MiA1NyA0OSBjdCA1NyA1NyA2MiA2NSA3MyA3MiBjdCA5MSA4MyAxMTcgODkgMTUyIDg5IGN0IAorMTg1IDg5IDIwOSA4MyAyMjUgNzEgY3QgMjQwIDYwIDI0OCA0NyAyNDggMzQgY3QgMjQ4IDI0IDI0MyAxNyAyMzQgMTMgY3QgMjI0IDkgMjA2IDcgMTc3IDYgY3QgCisxMzYgNSAxMDQgMyA4MiAwIGN0IHAgZWYKKzQ0NSAtMzcgbSAgNDE5IC0xNyA0MDMgLTUgMzk2IC0yIGN0IDM4NiAzIDM3NiA1IDM2NCA1IGN0IDM0NyA1IDMzMiAtMSAzMjEgLTEzIGN0IAorMzEwIC0yNSAzMDQgLTQwIDMwNCAtNjAgY3QgMzA0IC03MiAzMDcgLTgzIDMxMiAtOTIgY3QgMzIwIC0xMDQgMzMzIC0xMTYgMzUyIC0xMjcgY3QgCiszNzAgLTEzOCA0MDIgLTE1MSA0NDUgLTE2NyBjdCA0NDUgLTE2NyA0NDUgLTE2NyA0NDUgLTE3NyBjdCA0NDUgLTIwMiA0NDEgLTIxOSA0MzMgLTIyOCBjdCAKKzQyNSAtMjM3IDQxNCAtMjQyIDM5OCAtMjQyIGN0IDM4NyAtMjQyIDM3OCAtMjM5IDM3MSAtMjMzIGN0IDM2NCAtMjI2IDM2MCAtMjE5IDM2MCAtMjExIGN0IAorMzYwIC0yMTEgMzYwIC0yMTEgMzYxIC0xOTUgY3QgMzYxIC0xODcgMzU5IC0xODAgMzU0IC0xNzYgY3QgMzUwIC0xNzEgMzQ0IC0xNjkgMzM3IC0xNjkgY3QgCiszMzEgLTE2OSAzMjUgLTE3MSAzMjEgLTE3NiBjdCAzMTYgLTE4MSAzMTQgLTE4OCAzMTQgLTE5NiBjdCAzMTQgLTIxMiAzMjIgLTIyNyAzMzggLTI0MCBjdCAKKzM1NCAtMjUzIDM3NyAtMjYwIDQwNiAtMjYwIGN0IDQyOCAtMjYwIDQ0NyAtMjU2IDQ2MSAtMjQ5IGN0IDQ3MiAtMjQzIDQ4MCAtMjM0IDQ4NSAtMjIyIGN0IAorNDg4IC0yMTQgNDkwIC0xOTggNDkwIC0xNzQgY3QgNDkwIC0xNzQgNDkwIC0xNzQgNDkwIC04OSBjdCA0OTAgLTY1IDQ5MCAtNTAgNDkxIC00NSBjdCAKKzQ5MiAtMzkgNDk0IC0zNiA0OTYgLTM0IGN0IDQ5OCAtMzIgNTAwIC0zMSA1MDMgLTMxIGN0IDUwNiAtMzEgNTA5IC0zMiA1MTEgLTMzIGN0IAorNTE1IC0zNSA1MjIgLTQyIDUzMyAtNTMgY3QgNTMzIC01MyA1MzMgLTUzIDUzMyAtMzggY3QgNTEzIC0xMCA0OTMgNCA0NzUgNCBjdCA0NjYgNCA0NTggMSA0NTMgLTUgY3QgCis0NDggLTExIDQ0NSAtMjIgNDQ1IC0zNyBjdCBwCis0NDUgLTU0IG0gIDQ0NSAtNTQgNDQ1IC01NCA0NDUgLTE0OSBjdCA0MTcgLTEzOCAzOTkgLTEzMCAzOTEgLTEyNiBjdCAzNzYgLTExOCAzNjYgLTExMCAzNTkgLTEwMSBjdCAKKzM1MyAtOTIgMzUwIC04MyAzNTAgLTcyIGN0IDM1MCAtNTkgMzU0IC00OSAzNjIgLTQwIGN0IDM3MCAtMzEgMzc5IC0yNyAzODkgLTI3IGN0IAorNDA0IC0yNyA0MjIgLTM2IDQ0NSAtNTQgY3QgcCBlZgorNjE1IC0zOTIgbSAgNjIzIC0zOTIgNjI5IC0zODkgNjM1IC0zODQgY3QgNjQwIC0zNzggNjQzIC0zNzIgNjQzIC0zNjQgY3QgNjQzIC0zNTYgNjQwIC0zNTAgNjM1IC0zNDQgY3QgCis2MjkgLTMzOSA2MjMgLTMzNiA2MTUgLTMzNiBjdCA2MDcgLTMzNiA2MDEgLTMzOSA1OTUgLTM0NCBjdCA1OTAgLTM1MCA1ODcgLTM1NiA1ODcgLTM2NCBjdCAKKzU4NyAtMzcyIDU5MCAtMzc4IDU5NSAtMzg0IGN0IDYwMSAtMzg5IDYwNyAtMzkyIDYxNSAtMzkyIGN0IHAKKzYzOCAtMjYwIG0gIDYzOCAtMjYwIDYzOCAtMjYwIDYzOCAtNTcgY3QgNjM4IC00MSA2MzkgLTMxIDY0MSAtMjYgY3QgNjQ0IC0yMCA2NDcgLTE2IDY1MSAtMTQgY3QgCis2NTYgLTExIDY2MyAtMTAgNjc1IC0xMCBjdCA2NzUgLTEwIDY3NSAtMTAgNjc1IDAgY3QgNjc1IDAgNjc1IDAgNTU1IDAgY3QgNTU1IDAgNTU1IDAgNTU1IC0xMCBjdCAKKzU2NyAtMTAgNTc1IC0xMSA1NzkgLTE0IGN0IDU4MyAtMTYgNTg2IC0yMCA1ODggLTI1IGN0IDU5MSAtMzEgNTkyIC00MSA1OTIgLTU3IGN0IAorNTkyIC01NyA1OTIgLTU3IDU5MiAtMTU0IGN0IDU5MiAtMTgxIDU5MSAtMTk5IDU5MCAtMjA3IGN0IDU4OCAtMjEzIDU4NiAtMjE3IDU4NCAtMjIwIGN0IAorNTgxIC0yMjIgNTc3IC0yMjMgNTcyIC0yMjMgY3QgNTY3IC0yMjMgNTYxIC0yMjIgNTU0IC0yMTkgY3QgNTU0IC0yMTkgNTU0IC0yMTkgNTUwIC0yMjkgY3QgCis1NTAgLTIyOSA1NTAgLTIyOSA2MjYgLTI2MCBjdCA2MjYgLTI2MCA2MjYgLTI2MCA2MzggLTI2MCBjdCBwIGVmCis3ODIgLTIwNyBtICA4MTEgLTI0MiA4MzkgLTI2MCA4NjYgLTI2MCBjdCA4ODAgLTI2MCA4OTIgLTI1NyA5MDEgLTI1MCBjdCA5MTEgLTI0MyA5MTkgLTIzMSA5MjUgLTIxNiBjdCAKKzkyOSAtMjA1IDkzMSAtMTg4IDkzMSAtMTY1IGN0IDkzMSAtMTY1IDkzMSAtMTY1IDkzMSAtNTcgY3QgOTMxIC00MSA5MzIgLTMwIDkzNSAtMjUgY3QgCis5MzcgLTIwIDk0MCAtMTYgOTQ0IC0xNCBjdCA5NDggLTExIDk1NiAtMTAgOTY4IC0xMCBjdCA5NjggLTEwIDk2OCAtMTAgOTY4IDAgY3QgCis5NjggMCA5NjggMCA4NDQgMCBjdCA4NDQgMCA4NDQgMCA4NDQgLTEwIGN0IDg0NCAtMTAgODQ0IC0xMCA4NDkgLTEwIGN0IDg2MSAtMTAgODY5IC0xMiA4NzQgLTE1IGN0IAorODc5IC0xOSA4ODIgLTI0IDg4NCAtMzEgY3QgODg1IC0zNCA4ODUgLTQzIDg4NSAtNTcgY3QgODg1IC01NyA4ODUgLTU3IDg4NSAtMTYxIGN0IAorODg1IC0xODQgODgyIC0yMDEgODc2IC0yMTEgY3QgODcwIC0yMjIgODYwIC0yMjcgODQ2IC0yMjcgY3QgODI1IC0yMjcgODAzIC0yMTUgNzgyIC0xOTEgY3QgCis3ODIgLTE5MSA3ODIgLTE5MSA3ODIgLTU3IGN0IDc4MiAtNDAgNzgzIC0yOSA3ODUgLTI1IGN0IDc4OCAtMjAgNzkxIC0xNiA3OTYgLTE0IGN0IAorODAwIC0xMSA4MDkgLTEwIDgyMyAtMTAgY3QgODIzIC0xMCA4MjMgLTEwIDgyMyAwIGN0IDgyMyAwIDgyMyAwIDY5OSAwIGN0IDY5OSAwIDY5OSAwIDY5OSAtMTAgY3QgCis2OTkgLTEwIDY5OSAtMTAgNzA0IC0xMCBjdCA3MTcgLTEwIDcyNSAtMTMgNzI5IC0yMCBjdCA3MzQgLTI2IDczNiAtMzkgNzM2IC01NyBjdCAKKzczNiAtNTcgNzM2IC01NyA3MzYgLTE1MSBjdCA3MzYgLTE4MSA3MzUgLTIwMCA3MzQgLTIwNiBjdCA3MzMgLTIxMyA3MzEgLTIxNyA3MjggLTIyMCBjdCAKKzcyNSAtMjIyIDcyMSAtMjIzIDcxNiAtMjIzIGN0IDcxMSAtMjIzIDcwNSAtMjIyIDY5OCAtMjE5IGN0IDY5OCAtMjE5IDY5OCAtMjE5IDY5NCAtMjI5IGN0IAorNjk0IC0yMjkgNjk0IC0yMjkgNzcwIC0yNjAgY3QgNzcwIC0yNjAgNzcwIC0yNjAgNzgyIC0yNjAgY3QgNzgyIC0yNjAgNzgyIC0yNjAgNzgyIC0yMDcgY3QgCitwIGVmCitwb20KK2dyCitncgorOTEzNSAxMTc4NiBtICA5Njk4IDExNTk5IGwgIDk2OTggMTE5NzQgbCAgOTEzNSAxMTc4NiBsICBwIGVmCisxMDQzNSAxMTgxMCBtICA5Nzg1IDExODEwIGwgIDk3ODUgMTE3ODUgbCAgOTc4NSAxMTc2MCBsICAxMDQzNSAxMTc2MCBsIAorMTA0MzUgMTE3ODUgbCAgMTA0MzUgMTE4MTAgbCAgcCBlZgorOTc4NSAxMTc4NSBtICA5NzYwIDExNzg1IGwgIDk3NjAgMTE3ODEgbCAgOTc2MiAxMTc3NiBsICA5NzYzIDExNzczIGwgIDk3NjYgMTE3NjkgbCAKKzk3NjkgMTE3NjYgbCAgOTc3MiAxMTc2MyBsICA5Nzc2IDExNzYyIGwgIDk3ODEgMTE3NjAgbCAgOTc4NSAxMTc2MCBsICA5Nzg1IDExNzYwIGwgCis5Nzg1IDExNzg1IGwgIHAgZWYKKzk4MTAgMTE3ODUgbSAgOTgxMCAxMTc4NiBsICA5Nzg1IDExNzg2IGwgIDk3NjAgMTE3ODYgbCAgOTc2MCAxMTc4NSBsICA5Nzg1IDExNzg1IGwgCis5ODEwIDExNzg1IGwgIHAgZWYKKzk3ODUgMTE3ODYgbSAgOTgxMCAxMTc4NiBsICA5ODEwIDExNzkwIGwgIDk4MDggMTE3OTUgbCAgOTgwNyAxMTc5OCBsICA5ODA0IDExODAyIGwgCis5ODAxIDExODA1IGwgIDk3OTggMTE4MDggbCAgOTc5NCAxMTgwOSBsICA5Nzg5IDExODExIGwgIDk3ODUgMTE4MTEgbCAgOTc4NSAxMTgxMSBsIAorOTc4NSAxMTc4NiBsICBwIGVmCis5Nzg1IDExODExIG0gIDk1ODUgMTE4MTEgbCAgOTU4NSAxMTc4NiBsICA5NTg1IDExNzYxIGwgIDk3ODUgMTE3NjEgbCAgOTc4NSAxMTc4NiBsIAorOTc4NSAxMTgxMSBsICBwIGVmCisxMjkzNSAxMTc4NSBtICAxMzQ5OCAxMTU5OCBsICAxMzQ5OCAxMTk3MyBsICAxMjkzNSAxMTc4NSBsICBwIGVmCisxNDMzNSAxMTgxMCBtICAxMzM4NSAxMTgxMCBsICAxMzM4NSAxMTc2MCBsICAxNDMzNSAxMTc2MCBsICAxNDMzNSAxMTgxMCBsIAorcCBlZgorZ3MKKzcxNzAgMTU4NjggbSA4OTU0IDE1ODY4IGwgODk1NCAxNzQ5NiBsIDcxNzAgMTc0OTYgbCA3MTcwIDE1ODY4IGwgZW9jbGlwIG5ld3BhdGgKK2dzCit0bSBzZXRtYXRyaXgKKzQ3MzYgMTI4MzIgdCAKKzEgMSBzIAorZ3MKK2dzCiswIDAgbSAxNzg0IDAgbCAxNzg0IDE2MjggbCAwIDE2MjggbCAwIDAgbCBlb2NsaXAgbmV3cGF0aAorZ3MKK3B1bQorMzcwIDUwMyB0CisyMDggLTM0NSBtICAxOTcgLTM0NCBsICAxMTMgLTQxMCBsICAyNSAtMzQyIGwgIDExIC0zNDUgbCAgMTEzIC00NjIgbCAgMjA4IC0zNDUgbCAKK3AgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzMxOCA2MzUgdAorMzI4IC00MzAgbSAgMzI4IC00MzAgMzI4IC00MzAgMjk2IC04MCBjdCAyOTQgLTY0IDI5NCAtNTMgMjk0IC00OCBjdCAyOTQgLTQwIDI5NSAtMzMgMjk4IC0yOSBjdCAKKzMwMiAtMjMgMzA3IC0xOCAzMTQgLTE1IGN0IDMyMSAtMTIgMzMyIC0xMSAzNDggLTExIGN0IDM0OCAtMTEgMzQ4IC0xMSAzNDUgMCBjdCAKKzM0NSAwIDM0NSAwIDE4MCAwIGN0IDE4MCAwIDE4MCAwIDE4NCAtMTEgY3QgMTg0IC0xMSAxODQgLTExIDE5MSAtMTEgY3QgMjA0IC0xMSAyMTUgLTE0IDIyNCAtMjAgY3QgCisyMzAgLTI0IDIzNCAtMzAgMjM4IC0zOSBjdCAyNDAgLTQ2IDI0MiAtNjEgMjQ0IC04NSBjdCAyNDQgLTg1IDI0NCAtODUgMjQ5IC0xMzggY3QgCisyNDkgLTEzOCAyNDkgLTEzOCAxMjggLTEzOCBjdCAxMjggLTEzOCAxMjggLTEzOCA4NiAtODAgY3QgNzYgLTY3IDcwIC01NyA2NyAtNTIgY3QgCis2NSAtNDYgNjQgLTQxIDY0IC0zNiBjdCA2NCAtMjkgNjYgLTI0IDcyIC0xOSBjdCA3NyAtMTQgODYgLTExIDk4IC0xMSBjdCA5OCAtMTEgOTggLTExIDk1IDAgY3QgCis5NSAwIDk1IDAgLTMwIDAgY3QgLTMwIDAgLTMwIDAgLTI3IC0xMSBjdCAtMTIgLTEyIDIgLTE3IDE0IC0yNiBjdCAyNSAtMzYgNDMgLTU3IDY2IC04OCBjdCAKKzY2IC04OCA2NiAtODggMzE3IC00MzAgY3QgMzE3IC00MzAgMzE3IC00MzAgMzI4IC00MzAgY3QgcAorMjY4IC0zMjcgbSAgMTQ0IC0xNTkgbCAgMjUxIC0xNTkgbCAgMjY4IC0zMjcgbCAgcCBlZgorcG9tCitncgorZ3MKK3B1bQorNzY3IDYzNSB0CisxNjggMTMxIG0gIDEyNyA5OCA5NiA1MCA3NSAtMTIgY3QgNTYgLTY2IDQ3IC0xMjMgNDcgLTE4MyBjdCA0NyAtMjQxIDU2IC0yOTggNzUgLTM1NCBjdCAKKzk4IC00MTkgMTI4IC00NjcgMTY4IC00OTcgY3QgMTY4IC00OTcgMTY4IC00OTcgMTY4IC00ODEgY3QgMTM5IC00NTQgMTE2IC00MDggMTAxIC0zNDIgY3QgCis4OSAtMjkwIDgzIC0yMzcgODMgLTE4MyBjdCA4MyAtMTI5IDg5IC03NiAxMDEgLTI0IGN0IDExNiA0MyAxMzkgODkgMTY4IDExNiBjdCAxNjggMTE2IDE2OCAxMTYgMTY4IDEzMSBjdCAKK3AgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzEwMzIgNjM1IHQKKzU0IC0yNzMgbSAgNTQgLTI3MyA1NCAtMjczIDI0OSAtMjczIGN0IDI0OSAtMjczIDI0OSAtMjczIDI0OSAtMjY1IGN0IDI0OSAtMjY1IDI0OSAtMjY1IDM1IC00MiBjdCAKKzM1IC00MiAzNSAtNDIgMTI1IC00MiBjdCAxNDcgLTQyIDE2MSAtNDMgMTY2IC00NCBjdCAxNzIgLTQ2IDE3OCAtNTAgMTgzIC01NSBjdCAKKzE4NyAtNjAgMTkzIC03MCAxOTkgLTg0IGN0IDE5OSAtODQgMTk5IC04NCAyMTAgLTg0IGN0IDIxMCAtODQgMjEwIC04NCAxODMgMCBjdCAKKzE4MyAwIDE4MyAwIC0xOCAwIGN0IC0xOCAwIC0xOCAwIC0xOCAtOSBjdCAtMTggLTkgLTE4IC05IDE5NiAtMjMyIGN0IDE5NiAtMjMyIDE5NiAtMjMyIDEwOSAtMjMyIGN0IAorOTAgLTIzMiA3OCAtMjMyIDc0IC0yMzEgY3QgNjggLTIyOSA2MyAtMjI2IDU3IC0yMjEgY3QgNTEgLTIxNiA0NSAtMjA4IDM5IC0xOTYgY3QgCiszOSAtMTk2IDM5IC0xOTYgMjggLTE5NiBjdCAyOCAtMTk2IDI4IC0xOTYgNTQgLTI3MyBjdCBwIGVmCitwb20KK2dyCitncworcHVtCisxMzQ5IDYzNSB0CiszMyAxMTYgbSAgNjEgOTAgODIgNDYgOTcgLTE4IGN0IDExMCAtNzAgMTE3IC0xMjAgMTE3IC0xNzAgY3QgMTE3IC0yMjkgMTExIC0yODQgMTAwIC0zMzUgY3QgCis4NiAtNDA0IDYzIC00NTMgMzMgLTQ4MSBjdCAzMyAtNDgxIDMzIC00ODEgMzMgLTQ5NyBjdCA3MiAtNDY4IDEwMyAtNDIxIDEyNSAtMzU0IGN0IAorMTQzIC0yOTkgMTUzIC0yNDEgMTUzIC0xODMgY3QgMTUzIC0xMjMgMTQ0IC02NiAxMjUgLTExIGN0IDEwMyA1NCA3MiAxMDIgMzMgMTMxIGN0IAorMzMgMTMxIDMzIDEzMSAzMyAxMTYgY3QgcCBlZgorcG9tCitncgorZ3MKKzEzMiA4NDcgbSAgMTUyMSAwIHJsIDAgMzEgcmwgMTUyMSBuZWcgMCBybCBlZiBwIGVmCisKK2dyCitncworcHVtCisxNTkgMTQ1NSB0Cis4NiA5IG0gIDg2IDkgODYgOSAxMjIgLTM0MSBjdCAxMjQgLTM1NSAxMjQgLTM2NSAxMjQgLTM3MyBjdCAxMjQgLTM4NSAxMjEgLTM5NCAxMTQgLTQwMCBjdCAKKzEwNyAtNDA2IDk1IC00MTAgNzcgLTQxMCBjdCA3NyAtNDEwIDc3IC00MTAgODEgLTQyMSBjdCA4MSAtNDIxIDgxIC00MjEgMjM3IC00MjEgY3QgCisyMzcgLTQyMSAyMzcgLTQyMSAyMzQgLTQxMCBjdCAyMTMgLTQxMCAxOTggLTQwNiAxOTEgLTM5OSBjdCAxODMgLTM5MSAxNzcgLTM3MiAxNzUgLTM0MSBjdCAKKzE3NSAtMzQxIDE3NSAtMzQxIDE1MSAtMTEzIGN0IDE1MSAtMTEzIDE1MSAtMTEzIDMxMSAtMzYxIGN0IDMxMSAtMzY1IDMxMSAtMzY5IDMxMSAtMzcxIGN0IAorMzExIC0zODMgMzA4IC0zOTIgMzAxIC0zOTggY3QgMjk0IC00MDUgMjc5IC00MDkgMjU3IC00MTAgY3QgMjU3IC00MTAgMjU3IC00MTAgMjU5IC00MjEgY3QgCisyNTkgLTQyMSAyNTkgLTQyMSA0MzAgLTQyMSBjdCA0MzAgLTQyMSA0MzAgLTQyMSA0MjYgLTQxMCBjdCA0MDcgLTQxMCAzOTMgLTQwOCAzODcgLTQwNSBjdCAKKzM4MiAtNDAzIDM3NyAtMzk5IDM3NCAtMzk0IGN0IDM3MSAtMzg5IDM2OCAtMzgwIDM2NiAtMzY4IGN0IDM2NSAtMzY0IDM2MyAtMzQwIDM1OCAtMjk2IGN0IAorMzU0IC0yNTEgMzQ3IC0xOTAgMzM4IC0xMTMgY3QgMzM4IC0xMTMgMzM4IC0xMTMgNDcyIC0zMTcgY3QgNDg2IC0zMzkgNDk2IC0zNTQgNDk5IC0zNjMgY3QgCis1MDMgLTM3MiA1MDUgLTM4MCA1MDUgLTM4NiBjdCA1MDUgLTM5MiA1MDIgLTM5NyA0OTcgLTQwMSBjdCA0OTIgLTQwNiA0ODQgLTQwOSA0NzIgLTQxMCBjdCAKKzQ3MiAtNDEwIDQ3MiAtNDEwIDQ3NCAtNDIxIGN0IDQ3NCAtNDIxIDQ3NCAtNDIxIDU5OSAtNDIxIGN0IDU5OSAtNDIxIDU5OSAtNDIxIDU5NiAtNDEwIGN0IAorNTg1IC00MDkgNTc1IC00MDYgNTY3IC00MDIgY3QgNTU4IC0zOTcgNTQ4IC0zODkgNTM3IC0zNzYgY3QgNTMwIC0zNjggNTE2IC0zNDkgNDk2IC0zMTcgY3QgCis0OTYgLTMxNyA0OTYgLTMxNyAyODQgOSBjdCAyODQgOSAyODQgOSAyNzMgOSBjdCAyNzMgOSAyNzMgOSAzMDcgLTMxNyBjdCAzMDcgLTMxNyAzMDcgLTMxNyA5NyA5IGN0IAorOTcgOSA5NyA5IDg2IDkgY3QgcCBlZgorcG9tCitncgorZ3MKK3B1bQorODQ3IDE0NTUgdAorMTY4IDEzMSBtICAxMjcgOTggOTYgNTAgNzUgLTEyIGN0IDU2IC02NiA0NyAtMTIzIDQ3IC0xODMgY3QgNDcgLTI0MSA1NiAtMjk4IDc1IC0zNTQgY3QgCis5OCAtNDE5IDEyOCAtNDY3IDE2OCAtNDk3IGN0IDE2OCAtNDk3IDE2OCAtNDk3IDE2OCAtNDgxIGN0IDEzOSAtNDU0IDExNiAtNDA4IDEwMSAtMzQyIGN0IAorODkgLTI5MCA4MyAtMjM3IDgzIC0xODMgY3QgODMgLTEyOSA4OSAtNzYgMTAxIC0yNCBjdCAxMTYgNDMgMTM5IDg5IDE2OCAxMTYgY3QgMTY4IDExNiAxNjggMTE2IDE2OCAxMzEgY3QgCitwIGVmCitwb20KK2dyCitncworcHVtCisxMTM4IDE0NTUgdAorNTQgLTI3MyBtICA1NCAtMjczIDU0IC0yNzMgMjQ5IC0yNzMgY3QgMjQ5IC0yNzMgMjQ5IC0yNzMgMjQ5IC0yNjUgY3QgMjQ5IC0yNjUgMjQ5IC0yNjUgMzUgLTQyIGN0IAorMzUgLTQyIDM1IC00MiAxMjUgLTQyIGN0IDE0NyAtNDIgMTYxIC00MyAxNjYgLTQ0IGN0IDE3MiAtNDYgMTc4IC01MCAxODMgLTU1IGN0IAorMTg3IC02MCAxOTMgLTcwIDE5OSAtODQgY3QgMTk5IC04NCAxOTkgLTg0IDIxMCAtODQgY3QgMjEwIC04NCAyMTAgLTg0IDE4MyAwIGN0IAorMTgzIDAgMTgzIDAgLTE4IDAgY3QgLTE4IDAgLTE4IDAgLTE4IC05IGN0IC0xOCAtOSAtMTggLTkgMTk2IC0yMzIgY3QgMTk2IC0yMzIgMTk2IC0yMzIgMTA5IC0yMzIgY3QgCis5MCAtMjMyIDc4IC0yMzIgNzQgLTIzMSBjdCA2OCAtMjI5IDYzIC0yMjYgNTcgLTIyMSBjdCA1MSAtMjE2IDQ1IC0yMDggMzkgLTE5NiBjdCAKKzM5IC0xOTYgMzkgLTE5NiAyOCAtMTk2IGN0IDI4IC0xOTYgMjggLTE5NiA1NCAtMjczIGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzE0MjkgMTQ1NSB0CiszMyAxMTYgbSAgNjEgOTAgODIgNDYgOTcgLTE4IGN0IDExMCAtNzAgMTE3IC0xMjAgMTE3IC0xNzAgY3QgMTE3IC0yMjkgMTExIC0yODQgMTAwIC0zMzUgY3QgCis4NiAtNDA0IDYzIC00NTMgMzMgLTQ4MSBjdCAzMyAtNDgxIDMzIC00ODEgMzMgLTQ5NyBjdCA3MiAtNDY4IDEwMyAtNDIxIDEyNSAtMzU0IGN0IAorMTQzIC0yOTkgMTUzIC0yNDEgMTUzIC0xODMgY3QgMTUzIC0xMjMgMTQ0IC02NiAxMjUgLTExIGN0IDEwMyA1NCA3MiAxMDIgMzMgMTMxIGN0IAorMzMgMTMxIDMzIDEzMSAzMyAxMTYgY3QgcCBlZgorcG9tCitncgorZ3IKK2dyCitncgorZ3IKKzgwODUgMTc0ODcgbSAgNzAzNSAxNzQ4NyBsICA3MDM1IDE1Njg3IGwgIDkxMzUgMTU2ODcgbCAgOTEzNSAxNzQ4NyBsICA4MDg1IDE3NDg3IGwgCitwYworZ3MKKzEwNDcwIDE1NzE2IG0gMTIyODggMTU3MTYgbCAxMjI4OCAxNzQ4MCBsIDEwNDcwIDE3NDgwIGwgMTA0NzAgMTU3MTYgbCBlb2NsaXAgbmV3cGF0aAorZ3MKK3RtIHNldG1hdHJpeAorODA0MyAxMjY3NCB0IAorMSAxIHMgCitncworZ3MKKzAgMCBtIDE4MTggMCBsIDE4MTggMTc2NCBsIDAgMTc2NCBsIDAgMCBsIGVvY2xpcCBuZXdwYXRoCitncworcHVtCisxNTkgNzQxIHQKKzY1MCA5MyBtICA2NTAgOTMgNjUwIDkzIDU2IDkzIGN0IDU2IDkzIDU2IDkzIDU2IDc2IGN0IDU2IDc2IDU2IDc2IDM1OSAtMzAxIGN0IDM1OSAtMzAxIDM1OSAtMzAxIDU2IC02NzAgY3QgCis1NiAtNjcwIDU2IC02NzAgNTYgLTY4NyBjdCA1NiAtNjg3IDU2IC02ODcgNjM0IC02ODcgY3QgNjM0IC02ODcgNjM0IC02ODcgNjQ2IC01MzQgY3QgCis2NDYgLTUzNCA2NDYgLTUzNCA2MjcgLTUzNCBjdCA2MjAgLTYxMSA1ODIgLTY1MCA1MTYgLTY1MCBjdCA1MTYgLTY1MCA1MTYgLTY1MCAxODEgLTY1MCBjdCAKKzE4MSAtNjUwIDE4MSAtNjUwIDQzNSAtMzM5IGN0IDQzNSAtMzM5IDQzNSAtMzM5IDE1MCAxMyBjdCAxNTAgMTMgMTUwIDEzIDUyMCAxMyBjdCAKKzU5NSAxMyA2NDIgLTI0IDY2MSAtOTggY3QgNjYxIC05OCA2NjEgLTk4IDY3OSAtOTYgY3QgNjc5IC05NiA2NzkgLTk2IDY1MCA5MyBjdCAKK3AgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzEwMDUgNjYxIHQKKzE2OCAxMzEgbSAgMTI3IDk4IDk2IDUwIDc1IC0xMiBjdCA1NiAtNjYgNDcgLTEyMyA0NyAtMTgzIGN0IDQ3IC0yNDEgNTYgLTI5OCA3NSAtMzU0IGN0IAorOTggLTQxOSAxMjggLTQ2NyAxNjggLTQ5NyBjdCAxNjggLTQ5NyAxNjggLTQ5NyAxNjggLTQ4MSBjdCAxMzkgLTQ1NCAxMTYgLTQwOCAxMDEgLTM0MiBjdCAKKzg5IC0yOTAgODMgLTIzNyA4MyAtMTgzIGN0IDgzIC0xMjkgODkgLTc2IDEwMSAtMjQgY3QgMTE2IDQzIDEzOSA4OSAxNjggMTE2IGN0IDE2OCAxMTYgMTY4IDExNiAxNjggMTMxIGN0IAorcCBlZgorcG9tCitncgorZ3MKK3B1bQorMTI3MCA2NjEgdAorMzMgMTE2IG0gIDYxIDkwIDgyIDQ2IDk3IC0xOCBjdCAxMTAgLTcwIDExNyAtMTIwIDExNyAtMTcwIGN0IDExNyAtMjI5IDExMSAtMjg0IDEwMCAtMzM1IGN0IAorODYgLTQwNCA2MyAtNDUzIDMzIC00ODEgY3QgMzMgLTQ4MSAzMyAtNDgxIDMzIC00OTcgY3QgNzIgLTQ2OCAxMDMgLTQyMSAxMjUgLTM1NCBjdCAKKzE0MyAtMjk5IDE1MyAtMjQxIDE1MyAtMTgzIGN0IDE1MyAtMTIzIDE0NCAtNjYgMTI1IC0xMSBjdCAxMDMgNTQgNzIgMTAyIDMzIDEzMSBjdCAKKzMzIDEzMSAzMyAxMzEgMzMgMTE2IGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzE0NTUgMzQ0IHQKKzE3NSAtNDggbSAgMTc1IC00OCAxNzUgLTQ4IDE1NyAwIGN0IDE1NyAwIDE1NyAwIDggMCBjdCA4IDAgOCAwIDggLTcgY3QgNTIgLTQ3IDgzIC03OSAxMDEgLTEwNSBjdCAKKzExOSAtMTMwIDEyOCAtMTUzIDEyOCAtMTc0IGN0IDEyOCAtMTkwIDEyMyAtMjA0IDExMyAtMjE0IGN0IDEwMyAtMjI1IDkxIC0yMzAgNzggLTIzMCBjdCAKKzY1IC0yMzAgNTQgLTIyNiA0NCAtMjE5IGN0IDM0IC0yMTIgMjcgLTIwMiAyMiAtMTg4IGN0IDIyIC0xODggMjIgLTE4OCAxNSAtMTg4IGN0IAorMTggLTIxMSAyNiAtMjI4IDM5IC0yNDAgY3QgNTIgLTI1MiA2OCAtMjU4IDg4IC0yNTggY3QgMTA4IC0yNTggMTI1IC0yNTEgMTM5IC0yMzggY3QgCisxNTMgLTIyNSAxNjAgLTIwOSAxNjAgLTE5MSBjdCAxNjAgLTE3OSAxNTcgLTE2NiAxNTEgLTE1MyBjdCAxNDIgLTEzMyAxMjcgLTExMiAxMDYgLTg5IGN0IAorNzUgLTU1IDU1IC0zNSA0OCAtMjggY3QgNDggLTI4IDQ4IC0yOCAxMTQgLTI4IGN0IDEyNyAtMjggMTM3IC0yOSAxNDIgLTI5IGN0IDE0NyAtMzAgMTUyIC0zMiAxNTcgLTM2IGN0IAorMTYxIC0zOSAxNjUgLTQzIDE2OCAtNDggY3QgMTY4IC00OCAxNjggLTQ4IDE3NSAtNDggY3QgcCBlZgorcG9tCitncgorZ3MKKzEzMiA5MDAgbSAgMTU1NSAwIHJsIDAgMzEgcmwgMTU1NSBuZWcgMCBybCBlZiBwIGVmCisKK2dyCitncworcHVtCiszMTggMTUzNSB0CisyMDggLTM0NSBtICAxOTcgLTM0NCBsICAxMTMgLTQxMCBsICAyNSAtMzQyIGwgIDExIC0zNDUgbCAgMTEzIC00NjIgbCAgMjA4IC0zNDUgbCAKK3AgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzI2NSAxNTM1IHQKKzMzMSAtMjYxIG0gIDMzMSAtMjYxIDMzMSAtMjYxIDMyMiAtMjI5IGN0IDMyMiAtMjI5IDMyMiAtMjI5IDI3MCAtMjI5IGN0IDI3NCAtMjE4IDI3NiAtMjA3IDI3NiAtMTk4IGN0IAorMjc2IC0xNzAgMjY0IC0xNDYgMjQxIC0xMjQgY3QgMjE3IC0xMDMgMTg1IC05MSAxNDQgLTg5IGN0IDEyMiAtODIgMTA2IC03NSA5NSAtNjUgY3QgCis5MSAtNjIgODkgLTU5IDg5IC01NSBjdCA4OSAtNTEgOTEgLTQ3IDk1IC00NCBjdCA5OCAtNDAgMTA4IC0zNyAxMjMgLTMzIGN0IDEyMyAtMzMgMTIzIC0zMyAxODMgLTIwIGN0IAorMjE2IC0xMiAyMzggLTMgMjQ4IDggY3QgMjU5IDE5IDI2NCAzMSAyNjQgNDYgY3QgMjY0IDYzIDI1OCA3OCAyNDUgOTIgY3QgMjMzIDEwNiAyMTUgMTE3IDE5MCAxMjUgY3QgCisxNjYgMTMzIDE0MCAxMzcgMTExIDEzNyBjdCA4NSAxMzcgNjIgMTM0IDQxIDEyOCBjdCAyMCAxMjIgNSAxMTQgLTQgMTAzIGN0IC0xMyA5MyAtMTggODIgLTE4IDcxIGN0IAorLTE4IDYzIC0xNSA1MyAtOSA0NCBjdCAtMyAzNCA0IDI2IDEzIDIwIGN0IDE5IDE2IDM1IDcgNjEgLTggY3QgNTIgLTE1IDQ3IC0yMyA0NyAtMzIgY3QgCis0NyAtNDAgNTEgLTQ5IDU5IC01OCBjdCA2NyAtNjggODUgLTc4IDExMSAtODkgY3QgODkgLTkzIDcxIC0xMDMgNTggLTExOCBjdCA0NSAtMTMyIDM5IC0xNDkgMzkgLTE2NyBjdCAKKzM5IC0xOTYgNTIgLTIyMiA3OCAtMjQ1IGN0IDEwNCAtMjY4IDEzOCAtMjgwIDE4MSAtMjgwIGN0IDE5NiAtMjgwIDIwOSAtMjc4IDIxOSAtMjc1IGN0IAorMjI5IC0yNzIgMjM5IC0yNjggMjQ4IC0yNjEgY3QgMjQ4IC0yNjEgMjQ4IC0yNjEgMzMxIC0yNjEgY3QgcAorMjI1IC0yMTEgbSAgMjI1IC0yMjggMjIwIC0yNDAgMjExIC0yNTAgY3QgMjAxIC0yNTkgMTg5IC0yNjQgMTczIC0yNjQgY3QgMTQ5IC0yNjQgMTI5IC0yNTIgMTE0IC0yMjkgY3QgCis5OCAtMjA2IDkwIC0xODIgOTAgLTE1NyBjdCA5MCAtMTQxIDk1IC0xMjggMTA1IC0xMTggY3QgMTE1IC0xMDggMTI3IC0xMDMgMTQyIC0xMDMgY3QgCisxNTMgLTEwMyAxNjQgLTEwNiAxNzQgLTExMiBjdCAxODUgLTExOCAxOTQgLTEyNiAyMDEgLTEzNiBjdCAyMDkgLTE0NyAyMTQgLTE2MCAyMTkgLTE3NiBjdCAKKzIyMyAtMTkyIDIyNSAtMjA0IDIyNSAtMjExIGN0IHAKKzc0IDAgbSAgNTcgOCA0NSAxOCAzNiAzMCBjdCAyNyA0MiAyMyA1MyAyMyA2NSBjdCAyMyA3OSAyOSA5MCA0MiA5OSBjdCA1OSAxMTIgODUgMTE4IDEyMCAxMTggY3QgCisxNDkgMTE4IDE3NSAxMTMgMTk2IDEwMyBjdCAyMTcgOTMgMjI3IDgwIDIyNyA2NCBjdCAyMjcgNTYgMjIzIDQ4IDIxNSA0MSBjdCAyMDggMzQgMTkzIDI4IDE3MCAyNCBjdCAKKzE1OCAyMSAxMjYgMTMgNzQgMCBjdCBwIGVmCitwb20KK2dyCitncworcHVtCis3MTQgMTY5MyB0CisxMTkgLTE2NCBtICAxMTkgLTE2NCAxMTkgLTE2NCAxMTYgLTE1MCBjdCAxMTYgLTE1MCAxMTYgLTE1MCA4OCAtMTUwIGN0IDg4IC0xNTAgODggLTE1MCA2NSAtNjkgY3QgCis1NSAtMzQgNDUgLTYgMzYgMTMgY3QgMjMgNDEgOSA2MCAtNiA3MCBjdCAtMTggNzggLTI5IDgyIC00MSA4MiBjdCAtNDkgODIgLTU1IDgwIC02MCA3NSBjdCAKKy02NCA3MiAtNjYgNjggLTY2IDYzIGN0IC02NiA1OSAtNjQgNTUgLTYxIDUyIGN0IC01OCA0OSAtNTQgNDggLTUwIDQ4IGN0IC00NiA0OCAtNDQgNDkgLTQxIDUxIGN0IAorLTM5IDUzIC0zOCA1NiAtMzggNTggY3QgLTM4IDYxIC0zOSA2NCAtNDEgNjYgY3QgLTQzIDY4IC00NCA2OSAtNDQgNzAgY3QgLTQ0IDcxIC00NCA3MiAtNDMgNzMgY3QgCistNDIgNzQgLTQwIDc0IC0zOCA3NCBjdCAtMzIgNzQgLTI3IDcyIC0yMSA2OSBjdCAtMTUgNjYgLTEwIDYxIC01IDU0IGN0IC0xIDQ4IDMgMzggOCAyNiBjdCAKKzkgMjEgMTQgNCAyMiAtMjUgY3QgMjIgLTI1IDIyIC0yNSA1OSAtMTUwIGN0IDU5IC0xNTAgNTkgLTE1MCAyMiAtMTUwIGN0IDIyIC0xNTAgMjIgLTE1MCAyNSAtMTY0IGN0IAorMzYgLTE2NCA0NCAtMTY1IDQ5IC0xNjYgY3QgNTMgLTE2OCA1NyAtMTcwIDYxIC0xNzQgY3QgNjUgLTE3OCA3MCAtMTg2IDc1IC0xOTcgY3QgCis4MiAtMjEyIDg5IC0yMjQgOTUgLTIzMiBjdCAxMDQgLTI0MyAxMTMgLTI1MSAxMjMgLTI1NyBjdCAxMzIgLTI2MiAxNDIgLTI2NSAxNTAgLTI2NSBjdCAKKzE1OSAtMjY1IDE2NiAtMjYzIDE3MiAtMjU4IGN0IDE3NyAtMjUzIDE4MCAtMjQ4IDE4MCAtMjQyIGN0IDE4MCAtMjM4IDE3OSAtMjM0IDE3NiAtMjMxIGN0IAorMTczIC0yMjggMTY5IC0yMjcgMTY1IC0yMjcgY3QgMTYxIC0yMjcgMTU4IC0yMjggMTU2IC0yMzAgY3QgMTUzIC0yMzMgMTUyIC0yMzUgMTUyIC0yMzggY3QgCisxNTIgLTI0MCAxNTMgLTI0MyAxNTUgLTI0NSBjdCAxNTcgLTI0OCAxNTggLTI1MCAxNTggLTI1MSBjdCAxNTggLTI1MyAxNTcgLTI1NCAxNTYgLTI1NSBjdCAKKzE1NSAtMjU2IDE1MyAtMjU3IDE1MCAtMjU3IGN0IDE0MyAtMjU3IDEzNiAtMjU0IDEzMCAtMjQ5IGN0IDEyMiAtMjQyIDExNSAtMjMyIDEwOSAtMjE3IGN0IAorMTA2IC0yMTAgMTAwIC0xOTIgOTIgLTE2NCBjdCA5MiAtMTY0IDkyIC0xNjQgMTE5IC0xNjQgY3QgcCBlZgorMTI1IC0xNTggbSAgMTI1IC0xNTggMTI1IC0xNTggMTg5IC0xNjggY3QgMTg5IC0xNjggMTg5IC0xNjggMTYzIC03OCBjdCAxODUgLTExNSAyMDQgLTE0MSAyMjIgLTE1NSBjdCAKKzIzMiAtMTY0IDI0MCAtMTY4IDI0NyAtMTY4IGN0IDI1MSAtMTY4IDI1NCAtMTY3IDI1NiAtMTY0IGN0IDI1OSAtMTYyIDI2MCAtMTU4IDI2MCAtMTU0IGN0IAorMjYwIC0xNDYgMjU4IC0xMzggMjU0IC0xMzAgY3QgMjUxIC0xMjUgMjQ3IC0xMjIgMjQxIC0xMjIgY3QgMjM4IC0xMjIgMjM2IC0xMjMgMjM0IC0xMjUgY3QgCisyMzIgLTEyNyAyMzAgLTEzMCAyMzAgLTEzNCBjdCAyMzAgLTEzNiAyMjkgLTEzOCAyMjggLTEzOCBjdCAyMjcgLTEzOSAyMjYgLTE0MCAyMjUgLTE0MCBjdCAKKzIyMyAtMTQwIDIyMSAtMTQwIDIxOSAtMTM5IGN0IDIxNiAtMTM3IDIxMSAtMTMyIDIwNCAtMTI0IGN0IDE5NCAtMTEyIDE4MyAtOTYgMTcxIC03NyBjdCAKKzE2NiAtNjggMTYxIC01OSAxNTggLTQ5IGN0IDE1MyAtMzUgMTUwIC0yNiAxNDkgLTIzIGN0IDE0OSAtMjMgMTQ5IC0yMyAxNDIgMCBjdCAKKzE0MiAwIDE0MiAwIDExNCAwIGN0IDExNCAwIDExNCAwIDE0NyAtMTE2IGN0IDE1MSAtMTI5IDE1MyAtMTM5IDE1MyAtMTQ0IGN0IDE1MyAtMTQ2IDE1MyAtMTQ4IDE1MSAtMTUwIGN0IAorMTQ4IC0xNTIgMTQ1IC0xNTMgMTQxIC0xNTMgY3QgMTM5IC0xNTMgMTM0IC0xNTIgMTI4IC0xNTEgY3QgMTI4IC0xNTEgMTI4IC0xNTEgMTI1IC0xNTggY3QgCitwIGVmCis0NDMgLTE2NiBtICA0NDMgLTE2NiA0NDMgLTE2NiA0MDYgLTQwIGN0IDQwNiAtNDAgNDA2IC00MCA0MDIgLTIzIGN0IDQwMiAtMjEgNDAxIC0yMCA0MDEgLTE5IGN0IAorNDAxIC0xNyA0MDIgLTE1IDQwMyAtMTQgY3QgNDAzIC0xMyA0MDQgLTEzIDQwNSAtMTMgY3QgNDA2IC0xMyA0MDggLTEzIDQwOSAtMTUgY3QgCis0MTMgLTE4IDQxNyAtMjYgNDIzIC0zNyBjdCA0MjMgLTM3IDQyMyAtMzcgNDI5IC0zMyBjdCA0MjIgLTIwIDQxNSAtMTEgNDA3IC01IGN0IAorMzk5IDEgMzkyIDQgMzg2IDQgY3QgMzgyIDQgMzc4IDMgMzc2IDAgY3QgMzczIC0zIDM3MiAtNiAzNzIgLTExIGN0IDM3MiAtMTcgMzczIC0yNSAzNzYgLTM1IGN0IAorMzc2IC0zNSAzNzYgLTM1IDM4MCAtNTAgY3QgMzYyIC0yOSAzNDYgLTE0IDMzMSAtNSBjdCAzMjAgMSAzMDkgNCAyOTkgNCBjdCAyODkgNCAyODAgMCAyNzMgLTcgY3QgCisyNjYgLTE0IDI2MiAtMjUgMjYyIC0zOCBjdCAyNjIgLTU3IDI2OCAtNzcgMjgxIC05OSBjdCAyOTQgLTEyMCAzMTEgLTEzOCAzMzEgLTE1MSBjdCAKKzM0NiAtMTYxIDM2MSAtMTY2IDM3NCAtMTY2IGN0IDM4MyAtMTY2IDM5MCAtMTY0IDM5NSAtMTYwIGN0IDQwMSAtMTU3IDQwNSAtMTUxIDQwOCAtMTQyIGN0IAorNDA4IC0xNDIgNDA4IC0xNDIgNDEzIC0xNjIgY3QgNDEzIC0xNjIgNDEzIC0xNjIgNDQzIC0xNjYgY3QgcAorMzczIC0xNTcgbSAgMzY1IC0xNTcgMzU2IC0xNTMgMzQ2IC0xNDYgY3QgMzMyIC0xMzYgMzIwIC0xMjAgMzA5IC0xMDAgY3QgMjk4IC04MCAyOTMgLTYxIDI5MyAtNDUgY3QgCisyOTMgLTM3IDI5NSAtMzAgMzAwIC0yNSBjdCAzMDUgLTIwIDMxMCAtMTggMzE3IC0xOCBjdCAzMzIgLTE4IDM0OSAtMjggMzY3IC00NyBjdCAKKzM4OSAtNzMgMzk5IC0xMDAgMzk4IC0xMjggY3QgMzk4IC0xMzggMzk2IC0xNDUgMzkyIC0xNTAgY3QgMzg3IC0xNTUgMzgxIC0xNTcgMzczIC0xNTcgY3QgCitwIGVmCis1MjggLTE2OCBtICA1MjggLTE2OCA1MjggLTE2OCA1MDQgLTg0IGN0IDUxNSAtMTA0IDUyNCAtMTE5IDUzMiAtMTI5IGN0IDU0NCAtMTQ0IDU1NSAtMTU1IDU2NyAtMTYyIGN0IAorNTczIC0xNjYgNTgwIC0xNjggNTg4IC0xNjggY3QgNTk0IC0xNjggNTk5IC0xNjYgNjAzIC0xNjIgY3QgNjA3IC0xNTggNjA5IC0xNTMgNjA5IC0xNDcgY3QgCis2MDkgLTE0MSA2MDggLTEzMyA2MDUgLTEyMyBjdCA2MDUgLTEyMyA2MDUgLTEyMyA1OTEgLTc2IGN0IDYxMiAtMTE0IDYzMiAtMTQwIDY1MiAtMTU1IGN0IAorNjYyIC0xNjQgNjczIC0xNjggNjgzIC0xNjggY3QgNjg5IC0xNjggNjk0IC0xNjYgNjk4IC0xNjIgY3QgNzAyIC0xNTggNzA0IC0xNTEgNzA0IC0xNDMgY3QgCis3MDQgLTEzNSA3MDMgLTEyOCA3MDAgLTEyMCBjdCA3MDAgLTEyMCA3MDAgLTEyMCA2NzcgLTQ4IGN0IDY3MiAtMzMgNjY5IC0yNCA2NjkgLTIyIGN0IAorNjY5IC0yMSA2NzAgLTE5IDY3MSAtMTggY3QgNjcyIC0xNyA2NzMgLTE3IDY3NCAtMTcgY3QgNjc1IC0xNyA2NzcgLTE4IDY4MCAtMjAgY3QgCis2ODYgLTI1IDY5MiAtMzMgNjk4IC00MiBjdCA2OTggLTQyIDY5OCAtNDIgNzA0IC0zOCBjdCA3MDEgLTMzIDY5NiAtMjYgNjg4IC0xOCBjdCAKKzY4MSAtOSA2NzQgLTMgNjY5IDAgY3QgNjYzIDMgNjU4IDQgNjU0IDQgY3QgNjUwIDQgNjQ2IDMgNjQzIDAgY3QgNjQxIC0zIDYzOSAtNyA2MzkgLTExIGN0IAorNjM5IC0xNyA2NDIgLTI5IDY0OCAtNDcgY3QgNjQ4IC00NyA2NDggLTQ3IDY2OCAtMTA2IGN0IDY3MiAtMTIwIDY3NCAtMTI4IDY3NSAtMTI5IGN0IAorNjc1IC0xMzIgNjc1IC0xMzQgNjc1IC0xMzYgY3QgNjc1IC0xMzkgNjc1IC0xNDIgNjczIC0xNDMgY3QgNjcxIC0xNDUgNjcwIC0xNDYgNjY4IC0xNDYgY3QgCis2NjIgLTE0NiA2NTYgLTE0MyA2NTAgLTEzOCBjdCA2MzEgLTEyMiA2MTMgLTEwMCA1OTcgLTcyIGN0IDU4NiAtNTMgNTc2IC0yOSA1NjcgMCBjdCAKKzU2NyAwIDU2NyAwIDU0MCAwIGN0IDU0MCAwIDU0MCAwIDU3NCAtMTEyIGN0IDU3OCAtMTI0IDU4MCAtMTMyIDU4MCAtMTM2IGN0IDU4MCAtMTQwIDU3OSAtMTQyIDU3NyAtMTQ0IGN0IAorNTc2IC0xNDUgNTc0IC0xNDYgNTcyIC0xNDYgY3QgNTY4IC0xNDYgNTY0IC0xNDUgNTU5IC0xNDIgY3QgNTUxIC0xMzcgNTQyIC0xMjYgNTMwIC0xMTEgY3QgCis1MTggLTk1IDUwOCAtODAgNTAyIC02NSBjdCA0OTkgLTU5IDQ5MSAtMzcgNDc5IDAgY3QgNDc5IDAgNDc5IDAgNDUyIDAgY3QgNDUyIDAgNDUyIDAgNDg3IC0xMjAgY3QgCis0ODcgLTEyMCA0ODcgLTEyMCA0OTEgLTEzNiBjdCA0OTIgLTEzOCA0OTMgLTE0MCA0OTMgLTE0MSBjdCA0OTMgLTE0NCA0OTEgLTE0NiA0ODkgLTE0OCBjdCAKKzQ4NiAtMTUwIDQ4MyAtMTUxIDQ3OSAtMTUxIGN0IDQ3OCAtMTUxIDQ3MyAtMTUwIDQ2NiAtMTQ5IGN0IDQ2NiAtMTQ5IDQ2NiAtMTQ5IDQ2NCAtMTU2IGN0IAorNDY0IC0xNTYgNDY0IC0xNTYgNTI4IC0xNjggY3QgcCBlZgorNzYzIC03MCBtICA3NjIgLTY0IDc2MiAtNTkgNzYyIC01NSBjdCA3NjIgLTQ0IDc2NiAtMzUgNzc0IC0yNyBjdCA3ODIgLTIwIDc5MiAtMTYgODAzIC0xNiBjdCAKKzgxMiAtMTYgODIxIC0xOCA4MzAgLTIxIGN0IDgzOCAtMjUgODUxIC0zMyA4NjcgLTQ1IGN0IDg2NyAtNDUgODY3IC00NSA4NzEgLTQwIGN0IAorODQxIC0xMSA4MTMgNCA3ODYgNCBjdCA3NjggNCA3NTQgLTIgNzQ1IC0xMyBjdCA3MzYgLTI0IDczMSAtMzcgNzMxIC01MSBjdCA3MzEgLTY5IDczNyAtODggNzQ4IC0xMDcgY3QgCis3NjAgLTEyNiA3NzQgLTE0MSA3OTIgLTE1MiBjdCA4MDkgLTE2MyA4MjcgLTE2OCA4NDUgLTE2OCBjdCA4NTggLTE2OCA4NjggLTE2NSA4NzQgLTE2MCBjdCAKKzg4MSAtMTU1IDg4NCAtMTQ4IDg4NCAtMTQxIGN0IDg4NCAtMTMxIDg4MCAtMTIxIDg3MSAtMTEyIGN0IDg2MCAtOTkgODQ0IC04OSA4MjMgLTgyIGN0IAorODA5IC03NyA3ODkgLTczIDc2MyAtNzAgY3QgcAorNzY0IC03OSBtICA3ODMgLTgxIDc5OSAtODUgODExIC05MCBjdCA4MjYgLTk3IDgzOCAtMTA1IDg0NiAtMTE0IGN0IDg1NCAtMTI0IDg1OCAtMTMzIDg1OCAtMTQxIGN0IAorODU4IC0xNDcgODU2IC0xNTEgODUzIC0xNTQgY3QgODUwIC0xNTcgODQ1IC0xNTkgODM4IC0xNTkgY3QgODI1IC0xNTkgODExIC0xNTIgNzk3IC0xMzkgY3QgCis3ODIgLTEyNSA3NzEgLTEwNSA3NjQgLTc5IGN0IHAgZWYKK3BvbQorZ3IKK2dyCitncgorZ3IKK2dyCisxMTI4NSAxNzc4MSBtICAxMDIzNSAxNzc4MSBsICAxMDIzNSAxNTM4NCBsICAxMjMzNSAxNTM4NCBsICAxMjMzNSAxNzc4MSBsIAorMTEyODUgMTc3ODEgbCAgcGMKK2dzCisyOTM1IDE4MDQ0IG0gNTg4NiAxODA0NCBsIDU4ODYgMTk2MzUgbCAyOTM1IDE5NjM1IGwgMjkzNSAxODA0NCBsIGVvY2xpcCBuZXdwYXRoCitncwordG0gc2V0bWF0cml4Cis1MDMgMTUwMDIgdCAKKzEgMSBzIAorZ3MKK2dzCiswIDAgbSAyOTU2IDAgbCAyOTU2IDE1OTEgbCAwIDE1OTEgbCAwIDAgbCBlb2NsaXAgbmV3cGF0aAorZ3MKK3B1bQorMTMyMyA1NTYgdAorNzQgLTM3OSBtICA3NCAtMzc5IDc0IC0zNzkgMTc2IC00MjkgY3QgMTc2IC00MjkgMTc2IC00MjkgMTg2IC00MjkgY3QgMTg2IC00MjkgMTg2IC00MjkgMTg2IC03NCBjdCAKKzE4NiAtNTAgMTg3IC0zNiAxODkgLTMwIGN0IDE5MSAtMjQgMTk1IC0xOSAyMDEgLTE2IGN0IDIwNyAtMTMgMjIwIC0xMSAyMzkgLTExIGN0IAorMjM5IC0xMSAyMzkgLTExIDIzOSAwIGN0IDIzOSAwIDIzOSAwIDgyIDAgY3QgODIgMCA4MiAwIDgyIC0xMSBjdCAxMDEgLTExIDExNCAtMTMgMTIwIC0xNiBjdCAKKzEyNSAtMTkgMTI5IC0yMyAxMzIgLTI4IGN0IDEzNCAtMzMgMTM1IC00OSAxMzUgLTc0IGN0IDEzNSAtNzQgMTM1IC03NCAxMzUgLTMwMSBjdCAKKzEzNSAtMzMxIDEzNCAtMzUxIDEzMiAtMzU5IGN0IDEzMCAtMzY2IDEyOCAtMzcxIDEyNCAtMzc0IGN0IDEyMCAtMzc3IDExNiAtMzc5IDExMCAtMzc5IGN0IAorMTAzIC0zNzkgOTIgLTM3NSA3OSAtMzY5IGN0IDc5IC0zNjkgNzkgLTM2OSA3NCAtMzc5IGN0IHAgZWYKK3BvbQorZ3IKK2dzCisxMzIgNzQxIG0gIDI2OTMgMCBybCAwIDMxIHJsIDI2OTMgbmVnIDAgcmwgZWYgcCBlZgorCitncgorZ3MKK3B1bQorMjY1IDEzNDkgdAorMjA4IC0zNDUgbSAgMTk3IC0zNDQgbCAgMTEzIC00MTAgbCAgMjUgLTM0MiBsICAxMSAtMzQ1IGwgIDExMyAtNDYyIGwgIDIwOCAtMzQ1IGwgCitwIGVmCitwb20KK2dyCitncworcHVtCisyMTIgMTM3NiB0CiszMzEgLTI2MSBtICAzMzEgLTI2MSAzMzEgLTI2MSAzMjIgLTIyOSBjdCAzMjIgLTIyOSAzMjIgLTIyOSAyNzAgLTIyOSBjdCAyNzQgLTIxOCAyNzYgLTIwNyAyNzYgLTE5OCBjdCAKKzI3NiAtMTcwIDI2NCAtMTQ2IDI0MSAtMTI0IGN0IDIxNyAtMTAzIDE4NSAtOTEgMTQ0IC04OSBjdCAxMjIgLTgyIDEwNiAtNzUgOTUgLTY1IGN0IAorOTEgLTYyIDg5IC01OSA4OSAtNTUgY3QgODkgLTUxIDkxIC00NyA5NSAtNDQgY3QgOTggLTQwIDEwOCAtMzcgMTIzIC0zMyBjdCAxMjMgLTMzIDEyMyAtMzMgMTgzIC0yMCBjdCAKKzIxNiAtMTIgMjM4IC0zIDI0OCA4IGN0IDI1OSAxOSAyNjQgMzEgMjY0IDQ2IGN0IDI2NCA2MyAyNTggNzggMjQ1IDkyIGN0IDIzMyAxMDYgMjE1IDExNyAxOTAgMTI1IGN0IAorMTY2IDEzMyAxNDAgMTM3IDExMSAxMzcgY3QgODUgMTM3IDYyIDEzNCA0MSAxMjggY3QgMjAgMTIyIDUgMTE0IC00IDEwMyBjdCAtMTMgOTMgLTE4IDgyIC0xOCA3MSBjdCAKKy0xOCA2MyAtMTUgNTMgLTkgNDQgY3QgLTMgMzQgNCAyNiAxMyAyMCBjdCAxOSAxNiAzNSA3IDYxIC04IGN0IDUyIC0xNSA0NyAtMjMgNDcgLTMyIGN0IAorNDcgLTQwIDUxIC00OSA1OSAtNTggY3QgNjcgLTY4IDg1IC03OCAxMTEgLTg5IGN0IDg5IC05MyA3MSAtMTAzIDU4IC0xMTggY3QgNDUgLTEzMiAzOSAtMTQ5IDM5IC0xNjcgY3QgCiszOSAtMTk2IDUyIC0yMjIgNzggLTI0NSBjdCAxMDQgLTI2OCAxMzggLTI4MCAxODEgLTI4MCBjdCAxOTYgLTI4MCAyMDkgLTI3OCAyMTkgLTI3NSBjdCAKKzIyOSAtMjcyIDIzOSAtMjY4IDI0OCAtMjYxIGN0IDI0OCAtMjYxIDI0OCAtMjYxIDMzMSAtMjYxIGN0IHAKKzIyNSAtMjExIG0gIDIyNSAtMjI4IDIyMCAtMjQwIDIxMSAtMjUwIGN0IDIwMSAtMjU5IDE4OSAtMjY0IDE3MyAtMjY0IGN0IDE0OSAtMjY0IDEyOSAtMjUyIDExNCAtMjI5IGN0IAorOTggLTIwNiA5MCAtMTgyIDkwIC0xNTcgY3QgOTAgLTE0MSA5NSAtMTI4IDEwNSAtMTE4IGN0IDExNSAtMTA4IDEyNyAtMTAzIDE0MiAtMTAzIGN0IAorMTUzIC0xMDMgMTY0IC0xMDYgMTc0IC0xMTIgY3QgMTg1IC0xMTggMTk0IC0xMjYgMjAxIC0xMzYgY3QgMjA5IC0xNDcgMjE0IC0xNjAgMjE5IC0xNzYgY3QgCisyMjMgLTE5MiAyMjUgLTIwNCAyMjUgLTIxMSBjdCBwCis3NCAwIG0gIDU3IDggNDUgMTggMzYgMzAgY3QgMjcgNDIgMjMgNTMgMjMgNjUgY3QgMjMgNzkgMjkgOTAgNDIgOTkgY3QgNTkgMTEyIDg1IDExOCAxMjAgMTE4IGN0IAorMTQ5IDExOCAxNzUgMTEzIDE5NiAxMDMgY3QgMjE3IDkzIDIyNyA4MCAyMjcgNjQgY3QgMjI3IDU2IDIyMyA0OCAyMTUgNDEgY3QgMjA4IDM0IDE5MyAyOCAxNzAgMjQgY3QgCisxNTggMjEgMTI2IDEzIDc0IDAgY3QgcCBlZgorcG9tCitncgorZ3MKK3B1bQorNjYxIDE1MDggdAorMTE5IC0xNjQgbSAgMTE5IC0xNjQgMTE5IC0xNjQgMTE2IC0xNTAgY3QgMTE2IC0xNTAgMTE2IC0xNTAgODggLTE1MCBjdCA4OCAtMTUwIDg4IC0xNTAgNjUgLTY5IGN0IAorNTUgLTM0IDQ1IC02IDM2IDEzIGN0IDIzIDQxIDkgNjAgLTYgNzAgY3QgLTE4IDc4IC0yOSA4MiAtNDEgODIgY3QgLTQ5IDgyIC01NSA4MCAtNjAgNzUgY3QgCistNjQgNzIgLTY2IDY4IC02NiA2MyBjdCAtNjYgNTkgLTY0IDU1IC02MSA1MiBjdCAtNTggNDkgLTU0IDQ4IC01MCA0OCBjdCAtNDYgNDggLTQ0IDQ5IC00MSA1MSBjdCAKKy0zOSA1MyAtMzggNTYgLTM4IDU4IGN0IC0zOCA2MSAtMzkgNjQgLTQxIDY2IGN0IC00MyA2OCAtNDQgNjkgLTQ0IDcwIGN0IC00NCA3MSAtNDQgNzIgLTQzIDczIGN0IAorLTQyIDc0IC00MCA3NCAtMzggNzQgY3QgLTMyIDc0IC0yNyA3MiAtMjEgNjkgY3QgLTE1IDY2IC0xMCA2MSAtNSA1NCBjdCAtMSA0OCAzIDM4IDggMjYgY3QgCis5IDIxIDE0IDQgMjIgLTI1IGN0IDIyIC0yNSAyMiAtMjUgNTkgLTE1MCBjdCA1OSAtMTUwIDU5IC0xNTAgMjIgLTE1MCBjdCAyMiAtMTUwIDIyIC0xNTAgMjUgLTE2NCBjdCAKKzM2IC0xNjQgNDQgLTE2NSA0OSAtMTY2IGN0IDUzIC0xNjggNTcgLTE3MCA2MSAtMTc0IGN0IDY1IC0xNzggNzAgLTE4NiA3NSAtMTk3IGN0IAorODIgLTIxMiA4OSAtMjI0IDk1IC0yMzIgY3QgMTA0IC0yNDMgMTEzIC0yNTEgMTIzIC0yNTcgY3QgMTMyIC0yNjIgMTQyIC0yNjUgMTUwIC0yNjUgY3QgCisxNTkgLTI2NSAxNjYgLTI2MyAxNzIgLTI1OCBjdCAxNzcgLTI1MyAxODAgLTI0OCAxODAgLTI0MiBjdCAxODAgLTIzOCAxNzkgLTIzNCAxNzYgLTIzMSBjdCAKKzE3MyAtMjI4IDE2OSAtMjI3IDE2NSAtMjI3IGN0IDE2MSAtMjI3IDE1OCAtMjI4IDE1NiAtMjMwIGN0IDE1MyAtMjMzIDE1MiAtMjM1IDE1MiAtMjM4IGN0IAorMTUyIC0yNDAgMTUzIC0yNDMgMTU1IC0yNDUgY3QgMTU3IC0yNDggMTU4IC0yNTAgMTU4IC0yNTEgY3QgMTU4IC0yNTMgMTU3IC0yNTQgMTU2IC0yNTUgY3QgCisxNTUgLTI1NiAxNTMgLTI1NyAxNTAgLTI1NyBjdCAxNDMgLTI1NyAxMzYgLTI1NCAxMzAgLTI0OSBjdCAxMjIgLTI0MiAxMTUgLTIzMiAxMDkgLTIxNyBjdCAKKzEwNiAtMjEwIDEwMCAtMTkyIDkyIC0xNjQgY3QgOTIgLTE2NCA5MiAtMTY0IDExOSAtMTY0IGN0IHAgZWYKKzEyNSAtMTU4IG0gIDEyNSAtMTU4IDEyNSAtMTU4IDE4OSAtMTY4IGN0IDE4OSAtMTY4IDE4OSAtMTY4IDE2MyAtNzggY3QgMTg1IC0xMTUgMjA0IC0xNDEgMjIyIC0xNTUgY3QgCisyMzIgLTE2NCAyNDAgLTE2OCAyNDcgLTE2OCBjdCAyNTEgLTE2OCAyNTQgLTE2NyAyNTYgLTE2NCBjdCAyNTkgLTE2MiAyNjAgLTE1OCAyNjAgLTE1NCBjdCAKKzI2MCAtMTQ2IDI1OCAtMTM4IDI1NCAtMTMwIGN0IDI1MSAtMTI1IDI0NyAtMTIyIDI0MSAtMTIyIGN0IDIzOCAtMTIyIDIzNiAtMTIzIDIzNCAtMTI1IGN0IAorMjMyIC0xMjcgMjMwIC0xMzAgMjMwIC0xMzQgY3QgMjMwIC0xMzYgMjI5IC0xMzggMjI4IC0xMzggY3QgMjI3IC0xMzkgMjI2IC0xNDAgMjI1IC0xNDAgY3QgCisyMjMgLTE0MCAyMjEgLTE0MCAyMTkgLTEzOSBjdCAyMTYgLTEzNyAyMTEgLTEzMiAyMDQgLTEyNCBjdCAxOTQgLTExMiAxODMgLTk2IDE3MSAtNzcgY3QgCisxNjYgLTY4IDE2MSAtNTkgMTU4IC00OSBjdCAxNTMgLTM1IDE1MCAtMjYgMTQ5IC0yMyBjdCAxNDkgLTIzIDE0OSAtMjMgMTQyIDAgY3QgCisxNDIgMCAxNDIgMCAxMTQgMCBjdCAxMTQgMCAxMTQgMCAxNDcgLTExNiBjdCAxNTEgLTEyOSAxNTMgLTEzOSAxNTMgLTE0NCBjdCAxNTMgLTE0NiAxNTMgLTE0OCAxNTEgLTE1MCBjdCAKKzE0OCAtMTUyIDE0NSAtMTUzIDE0MSAtMTUzIGN0IDEzOSAtMTUzIDEzNCAtMTUyIDEyOCAtMTUxIGN0IDEyOCAtMTUxIDEyOCAtMTUxIDEyNSAtMTU4IGN0IAorcCBlZgorNDQzIC0xNjYgbSAgNDQzIC0xNjYgNDQzIC0xNjYgNDA2IC00MCBjdCA0MDYgLTQwIDQwNiAtNDAgNDAyIC0yMyBjdCA0MDIgLTIxIDQwMSAtMjAgNDAxIC0xOSBjdCAKKzQwMSAtMTcgNDAyIC0xNSA0MDMgLTE0IGN0IDQwMyAtMTMgNDA0IC0xMyA0MDUgLTEzIGN0IDQwNiAtMTMgNDA4IC0xMyA0MDkgLTE1IGN0IAorNDEzIC0xOCA0MTcgLTI2IDQyMyAtMzcgY3QgNDIzIC0zNyA0MjMgLTM3IDQyOSAtMzMgY3QgNDIyIC0yMCA0MTUgLTExIDQwNyAtNSBjdCAKKzM5OSAxIDM5MiA0IDM4NiA0IGN0IDM4MiA0IDM3OCAzIDM3NiAwIGN0IDM3MyAtMyAzNzIgLTYgMzcyIC0xMSBjdCAzNzIgLTE3IDM3MyAtMjUgMzc2IC0zNSBjdCAKKzM3NiAtMzUgMzc2IC0zNSAzODAgLTUwIGN0IDM2MiAtMjkgMzQ2IC0xNCAzMzEgLTUgY3QgMzIwIDEgMzA5IDQgMjk5IDQgY3QgMjg5IDQgMjgwIDAgMjczIC03IGN0IAorMjY2IC0xNCAyNjIgLTI1IDI2MiAtMzggY3QgMjYyIC01NyAyNjggLTc3IDI4MSAtOTkgY3QgMjk0IC0xMjAgMzExIC0xMzggMzMxIC0xNTEgY3QgCiszNDYgLTE2MSAzNjEgLTE2NiAzNzQgLTE2NiBjdCAzODMgLTE2NiAzOTAgLTE2NCAzOTUgLTE2MCBjdCA0MDEgLTE1NyA0MDUgLTE1MSA0MDggLTE0MiBjdCAKKzQwOCAtMTQyIDQwOCAtMTQyIDQxMyAtMTYyIGN0IDQxMyAtMTYyIDQxMyAtMTYyIDQ0MyAtMTY2IGN0IHAKKzM3MyAtMTU3IG0gIDM2NSAtMTU3IDM1NiAtMTUzIDM0NiAtMTQ2IGN0IDMzMiAtMTM2IDMyMCAtMTIwIDMwOSAtMTAwIGN0IDI5OCAtODAgMjkzIC02MSAyOTMgLTQ1IGN0IAorMjkzIC0zNyAyOTUgLTMwIDMwMCAtMjUgY3QgMzA1IC0yMCAzMTAgLTE4IDMxNyAtMTggY3QgMzMyIC0xOCAzNDkgLTI4IDM2NyAtNDcgY3QgCiszODkgLTczIDM5OSAtMTAwIDM5OCAtMTI4IGN0IDM5OCAtMTM4IDM5NiAtMTQ1IDM5MiAtMTUwIGN0IDM4NyAtMTU1IDM4MSAtMTU3IDM3MyAtMTU3IGN0IAorcCBlZgorNTI4IC0xNjggbSAgNTI4IC0xNjggNTI4IC0xNjggNTA0IC04NCBjdCA1MTUgLTEwNCA1MjQgLTExOSA1MzIgLTEyOSBjdCA1NDQgLTE0NCA1NTUgLTE1NSA1NjcgLTE2MiBjdCAKKzU3MyAtMTY2IDU4MCAtMTY4IDU4OCAtMTY4IGN0IDU5NCAtMTY4IDU5OSAtMTY2IDYwMyAtMTYyIGN0IDYwNyAtMTU4IDYwOSAtMTUzIDYwOSAtMTQ3IGN0IAorNjA5IC0xNDEgNjA4IC0xMzMgNjA1IC0xMjMgY3QgNjA1IC0xMjMgNjA1IC0xMjMgNTkxIC03NiBjdCA2MTIgLTExNCA2MzIgLTE0MCA2NTIgLTE1NSBjdCAKKzY2MiAtMTY0IDY3MyAtMTY4IDY4MyAtMTY4IGN0IDY4OSAtMTY4IDY5NCAtMTY2IDY5OCAtMTYyIGN0IDcwMiAtMTU4IDcwNCAtMTUxIDcwNCAtMTQzIGN0IAorNzA0IC0xMzUgNzAzIC0xMjggNzAwIC0xMjAgY3QgNzAwIC0xMjAgNzAwIC0xMjAgNjc3IC00OCBjdCA2NzIgLTMzIDY2OSAtMjQgNjY5IC0yMiBjdCAKKzY2OSAtMjEgNjcwIC0xOSA2NzEgLTE4IGN0IDY3MiAtMTcgNjczIC0xNyA2NzQgLTE3IGN0IDY3NSAtMTcgNjc3IC0xOCA2ODAgLTIwIGN0IAorNjg2IC0yNSA2OTIgLTMzIDY5OCAtNDIgY3QgNjk4IC00MiA2OTggLTQyIDcwNCAtMzggY3QgNzAxIC0zMyA2OTYgLTI2IDY4OCAtMTggY3QgCis2ODEgLTkgNjc0IC0zIDY2OSAwIGN0IDY2MyAzIDY1OCA0IDY1NCA0IGN0IDY1MCA0IDY0NiAzIDY0MyAwIGN0IDY0MSAtMyA2MzkgLTcgNjM5IC0xMSBjdCAKKzYzOSAtMTcgNjQyIC0yOSA2NDggLTQ3IGN0IDY0OCAtNDcgNjQ4IC00NyA2NjggLTEwNiBjdCA2NzIgLTEyMCA2NzQgLTEyOCA2NzUgLTEyOSBjdCAKKzY3NSAtMTMyIDY3NSAtMTM0IDY3NSAtMTM2IGN0IDY3NSAtMTM5IDY3NSAtMTQyIDY3MyAtMTQzIGN0IDY3MSAtMTQ1IDY3MCAtMTQ2IDY2OCAtMTQ2IGN0IAorNjYyIC0xNDYgNjU2IC0xNDMgNjUwIC0xMzggY3QgNjMxIC0xMjIgNjEzIC0xMDAgNTk3IC03MiBjdCA1ODYgLTUzIDU3NiAtMjkgNTY3IDAgY3QgCis1NjcgMCA1NjcgMCA1NDAgMCBjdCA1NDAgMCA1NDAgMCA1NzQgLTExMiBjdCA1NzggLTEyNCA1ODAgLTEzMiA1ODAgLTEzNiBjdCA1ODAgLTE0MCA1NzkgLTE0MiA1NzcgLTE0NCBjdCAKKzU3NiAtMTQ1IDU3NCAtMTQ2IDU3MiAtMTQ2IGN0IDU2OCAtMTQ2IDU2NCAtMTQ1IDU1OSAtMTQyIGN0IDU1MSAtMTM3IDU0MiAtMTI2IDUzMCAtMTExIGN0IAorNTE4IC05NSA1MDggLTgwIDUwMiAtNjUgY3QgNDk5IC01OSA0OTEgLTM3IDQ3OSAwIGN0IDQ3OSAwIDQ3OSAwIDQ1MiAwIGN0IDQ1MiAwIDQ1MiAwIDQ4NyAtMTIwIGN0IAorNDg3IC0xMjAgNDg3IC0xMjAgNDkxIC0xMzYgY3QgNDkyIC0xMzggNDkzIC0xNDAgNDkzIC0xNDEgY3QgNDkzIC0xNDQgNDkxIC0xNDYgNDg5IC0xNDggY3QgCis0ODYgLTE1MCA0ODMgLTE1MSA0NzkgLTE1MSBjdCA0NzggLTE1MSA0NzMgLTE1MCA0NjYgLTE0OSBjdCA0NjYgLTE0OSA0NjYgLTE0OSA0NjQgLTE1NiBjdCAKKzQ2NCAtMTU2IDQ2NCAtMTU2IDUyOCAtMTY4IGN0IHAgZWYKKzc2MyAtNzAgbSAgNzYyIC02NCA3NjIgLTU5IDc2MiAtNTUgY3QgNzYyIC00NCA3NjYgLTM1IDc3NCAtMjcgY3QgNzgyIC0yMCA3OTIgLTE2IDgwMyAtMTYgY3QgCis4MTIgLTE2IDgyMSAtMTggODMwIC0yMSBjdCA4MzggLTI1IDg1MSAtMzMgODY3IC00NSBjdCA4NjcgLTQ1IDg2NyAtNDUgODcxIC00MCBjdCAKKzg0MSAtMTEgODEzIDQgNzg2IDQgY3QgNzY4IDQgNzU0IC0yIDc0NSAtMTMgY3QgNzM2IC0yNCA3MzEgLTM3IDczMSAtNTEgY3QgNzMxIC02OSA3MzcgLTg4IDc0OCAtMTA3IGN0IAorNzYwIC0xMjYgNzc0IC0xNDEgNzkyIC0xNTIgY3QgODA5IC0xNjMgODI3IC0xNjggODQ1IC0xNjggY3QgODU4IC0xNjggODY4IC0xNjUgODc0IC0xNjAgY3QgCis4ODEgLTE1NSA4ODQgLTE0OCA4ODQgLTE0MSBjdCA4ODQgLTEzMSA4ODAgLTEyMSA4NzEgLTExMiBjdCA4NjAgLTk5IDg0NCAtODkgODIzIC04MiBjdCAKKzgwOSAtNzcgNzg5IC03MyA3NjMgLTcwIGN0IHAKKzc2NCAtNzkgbSAgNzgzIC04MSA3OTkgLTg1IDgxMSAtOTAgY3QgODI2IC05NyA4MzggLTEwNSA4NDYgLTExNCBjdCA4NTQgLTEyNCA4NTggLTEzMyA4NTggLTE0MSBjdCAKKzg1OCAtMTQ3IDg1NiAtMTUxIDg1MyAtMTU0IGN0IDg1MCAtMTU3IDg0NSAtMTU5IDgzOCAtMTU5IGN0IDgyNSAtMTU5IDgxMSAtMTUyIDc5NyAtMTM5IGN0IAorNzgyIC0xMjUgNzcxIC0xMDUgNzY0IC03OSBjdCBwIGVmCitwb20KK2dyCitncworcHVtCisxNzIwIDEzNDkgdAorMjA4IC0zNDUgbSAgMTk3IC0zNDQgbCAgMTEzIC00MTAgbCAgMjUgLTM0MiBsICAxMSAtMzQ1IGwgIDExMyAtNDYyIGwgIDIwOCAtMzQ1IGwgCitwIGVmCitwb20KK2dyCitncworcHVtCisxNjY3IDEzNzYgdAorMzMxIC0yNjEgbSAgMzMxIC0yNjEgMzMxIC0yNjEgMzIyIC0yMjkgY3QgMzIyIC0yMjkgMzIyIC0yMjkgMjcwIC0yMjkgY3QgMjc0IC0yMTggMjc2IC0yMDcgMjc2IC0xOTggY3QgCisyNzYgLTE3MCAyNjQgLTE0NiAyNDEgLTEyNCBjdCAyMTcgLTEwMyAxODUgLTkxIDE0NCAtODkgY3QgMTIyIC04MiAxMDYgLTc1IDk1IC02NSBjdCAKKzkxIC02MiA4OSAtNTkgODkgLTU1IGN0IDg5IC01MSA5MSAtNDcgOTUgLTQ0IGN0IDk4IC00MCAxMDggLTM3IDEyMyAtMzMgY3QgMTIzIC0zMyAxMjMgLTMzIDE4MyAtMjAgY3QgCisyMTYgLTEyIDIzOCAtMyAyNDggOCBjdCAyNTkgMTkgMjY0IDMxIDI2NCA0NiBjdCAyNjQgNjMgMjU4IDc4IDI0NSA5MiBjdCAyMzMgMTA2IDIxNSAxMTcgMTkwIDEyNSBjdCAKKzE2NiAxMzMgMTQwIDEzNyAxMTEgMTM3IGN0IDg1IDEzNyA2MiAxMzQgNDEgMTI4IGN0IDIwIDEyMiA1IDExNCAtNCAxMDMgY3QgLTEzIDkzIC0xOCA4MiAtMTggNzEgY3QgCistMTggNjMgLTE1IDUzIC05IDQ0IGN0IC0zIDM0IDQgMjYgMTMgMjAgY3QgMTkgMTYgMzUgNyA2MSAtOCBjdCA1MiAtMTUgNDcgLTIzIDQ3IC0zMiBjdCAKKzQ3IC00MCA1MSAtNDkgNTkgLTU4IGN0IDY3IC02OCA4NSAtNzggMTExIC04OSBjdCA4OSAtOTMgNzEgLTEwMyA1OCAtMTE4IGN0IDQ1IC0xMzIgMzkgLTE0OSAzOSAtMTY3IGN0IAorMzkgLTE5NiA1MiAtMjIyIDc4IC0yNDUgY3QgMTA0IC0yNjggMTM4IC0yODAgMTgxIC0yODAgY3QgMTk2IC0yODAgMjA5IC0yNzggMjE5IC0yNzUgY3QgCisyMjkgLTI3MiAyMzkgLTI2OCAyNDggLTI2MSBjdCAyNDggLTI2MSAyNDggLTI2MSAzMzEgLTI2MSBjdCBwCisyMjUgLTIxMSBtICAyMjUgLTIyOCAyMjAgLTI0MCAyMTEgLTI1MCBjdCAyMDEgLTI1OSAxODkgLTI2NCAxNzMgLTI2NCBjdCAxNDkgLTI2NCAxMjkgLTI1MiAxMTQgLTIyOSBjdCAKKzk4IC0yMDYgOTAgLTE4MiA5MCAtMTU3IGN0IDkwIC0xNDEgOTUgLTEyOCAxMDUgLTExOCBjdCAxMTUgLTEwOCAxMjcgLTEwMyAxNDIgLTEwMyBjdCAKKzE1MyAtMTAzIDE2NCAtMTA2IDE3NCAtMTEyIGN0IDE4NSAtMTE4IDE5NCAtMTI2IDIwMSAtMTM2IGN0IDIwOSAtMTQ3IDIxNCAtMTYwIDIxOSAtMTc2IGN0IAorMjIzIC0xOTIgMjI1IC0yMDQgMjI1IC0yMTEgY3QgcAorNzQgMCBtICA1NyA4IDQ1IDE4IDM2IDMwIGN0IDI3IDQyIDIzIDUzIDIzIDY1IGN0IDIzIDc5IDI5IDkwIDQyIDk5IGN0IDU5IDExMiA4NSAxMTggMTIwIDExOCBjdCAKKzE0OSAxMTggMTc1IDExMyAxOTYgMTAzIGN0IDIxNyA5MyAyMjcgODAgMjI3IDY0IGN0IDIyNyA1NiAyMjMgNDggMjE1IDQxIGN0IDIwOCAzNCAxOTMgMjggMTcwIDI0IGN0IAorMTU4IDIxIDEyNiAxMyA3NCAwIGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzIwNjQgMTUwOCB0CisxMzQgLTE2OCBtICAxMzQgLTE2OCAxMzQgLTE2OCAxMjQgLTExMSBjdCAxMjQgLTExMSAxMjQgLTExMSAxMTcgLTExMSBjdCAxMTYgLTEyOCAxMTMgLTE0MCAxMDcgLTE0OCBjdCAKKzEwMSAtMTU1IDkzIC0xNTkgODQgLTE1OSBjdCA3NyAtMTU5IDcxIC0xNTcgNjYgLTE1MyBjdCA2MiAtMTQ4IDYwIC0xNDMgNjAgLTEzNyBjdCAKKzYwIC0xMzMgNjEgLTEyOSA2MyAtMTI2IGN0IDY0IC0xMjIgNjggLTExNyA3NCAtMTEwIGN0IDg5IC05MyA5OSAtNzkgMTAzIC03MCBjdCAKKzEwOCAtNjIgMTEwIC01MyAxMTAgLTQ1IGN0IDExMCAtMzIgMTA1IC0yMSA5NCAtMTEgY3QgODQgLTEgNzEgNCA1NSA0IGN0IDQ2IDQgMzYgMiAyNCAtMyBjdCAKKzIwIC00IDE3IC01IDE1IC01IGN0IDEwIC01IDYgLTIgMyA0IGN0IDMgNCAzIDQgLTQgNCBjdCAtNCA0IC00IDQgNiAtNTYgY3QgNiAtNTYgNiAtNTYgMTMgLTU2IGN0IAorMTQgLTM3IDE4IC0yNCAyNSAtMTcgY3QgMzIgLTkgNDEgLTUgNTMgLTUgY3QgNjMgLTUgNzAgLTggNzYgLTEzIGN0IDgxIC0xOCA4NCAtMjUgODQgLTMyIGN0IAorODQgLTM3IDgzIC00MiA4MSAtNDYgY3QgNzggLTUzIDcxIC02MyA2MCAtNzYgY3QgNDkgLTg5IDQyIC05OSAzOSAtMTA2IGN0IDM2IC0xMTIgMzQgLTExOSAzNCAtMTI1IGN0IAorMzQgLTEzNyAzOCAtMTQ3IDQ3IC0xNTYgY3QgNTUgLTE2NCA2NiAtMTY4IDgwIC0xNjggY3QgODMgLTE2OCA4NyAtMTY4IDkwIC0xNjcgY3QgCis5MiAtMTY3IDk2IC0xNjUgMTAyIC0xNjMgY3QgMTA4IC0xNjAgMTEyIC0xNTkgMTE0IC0xNTkgY3QgMTE5IC0xNTkgMTI0IC0xNjIgMTI3IC0xNjggY3QgCisxMjcgLTE2OCAxMjcgLTE2OCAxMzQgLTE2OCBjdCBwIGVmCiszMzEgLTE2NCBtICAzMzEgLTE2NCAzMzEgLTE2NCAyOTcgLTUyIGN0IDI5MiAtMzUgMjg5IC0yNCAyODkgLTIwIGN0IDI4OSAtMTggMjkwIC0xNiAyOTAgLTE1IGN0IAorMjkxIC0xNCAyOTIgLTE0IDI5MyAtMTQgY3QgMjk0IC0xNCAyOTYgLTE1IDI5OCAtMTcgY3QgMzAwIC0xOCAzMDYgLTI2IDMxNCAtMzkgY3QgCiszMTQgLTM5IDMxNCAtMzkgMzE5IC0zNSBjdCAzMTEgLTIwIDMwMiAtOSAyOTMgLTIgY3QgMjg3IDIgMjgxIDQgMjc2IDQgY3QgMjcxIDQgMjY4IDMgMjY2IDAgY3QgCisyNjMgLTMgMjYyIC02IDI2MiAtMTAgY3QgMjYyIC0xNSAyNjMgLTIwIDI2NCAtMjcgY3QgMjY3IC0zNSAyNzMgLTU1IDI4MiAtODYgY3QgCisyNjAgLTUxIDI0MiAtMjggMjI3IC0xNSBjdCAyMTIgLTIgMTk4IDQgMTg2IDQgY3QgMTgwIDQgMTc1IDIgMTcxIC0yIGN0IDE2NyAtNiAxNjUgLTExIDE2NSAtMTcgY3QgCisxNjUgLTI2IDE2OSAtNDAgMTc1IC01OSBjdCAxNzUgLTU5IDE3NSAtNTkgMTk0IC0xMTcgY3QgMTk5IC0xMzAgMjAyIC0xMzkgMjAyIC0xNDIgY3QgCisyMDIgLTE0NCAyMDEgLTE0NSAyMDAgLTE0NiBjdCAxOTggLTE0NyAxOTcgLTE0OCAxOTYgLTE0OCBjdCAxOTIgLTE0OCAxODkgLTE0NyAxODYgLTE0NSBjdCAKKzE4MyAtMTQzIDE3NiAtMTM2IDE2NSAtMTI0IGN0IDE2NSAtMTI0IDE2NSAtMTI0IDE1OSAtMTI4IGN0IDE2OSAtMTQzIDE4MCAtMTUzIDE5MSAtMTYwIGN0IAorMjAwIC0xNjUgMjA4IC0xNjggMjE1IC0xNjggY3QgMjIwIC0xNjggMjI0IC0xNjYgMjI3IC0xNjMgY3QgMjMwIC0xNjAgMjMyIC0xNTUgMjMyIC0xNTAgY3QgCisyMzIgLTE0MyAyMjkgLTEzMSAyMjMgLTExNCBjdCAyMjMgLTExNCAyMjMgLTExNCAyMDMgLTU1IGN0IDE5NyAtMzkgMTk0IC0yOSAxOTQgLTI0IGN0IAorMTk0IC0yMiAxOTUgLTIwIDE5NyAtMTkgY3QgMTk5IC0xNyAyMDEgLTE2IDIwMyAtMTYgY3QgMjA4IC0xNiAyMTMgLTE4IDIyMCAtMjMgY3QgCisyMjcgLTI3IDIzNiAtMzYgMjQ3IC01MCBjdCAyNTkgLTY0IDI2OCAtNzcgMjc1IC05MCBjdCAyODIgLTEwMiAyOTAgLTEyMiAyOTkgLTE0OSBjdCAKKzI5OSAtMTQ5IDI5OSAtMTQ5IDMwNCAtMTY0IGN0IDMwNCAtMTY0IDMwNCAtMTY0IDMzMSAtMTY0IGN0IHAgZWYKKzQ1MyAtMjY1IG0gIDQ1MyAtMjY1IDQ1MyAtMjY1IDQxNSAtMTM2IGN0IDQyNyAtMTQ4IDQzNyAtMTU3IDQ0NSAtMTYxIGN0IDQ1NCAtMTY2IDQ2MyAtMTY4IDQ3MiAtMTY4IGN0IAorNDg1IC0xNjggNDk2IC0xNjQgNTA0IC0xNTQgY3QgNTEzIC0xNDUgNTE3IC0xMzMgNTE3IC0xMTggY3QgNTE3IC05OCA1MTEgLTc4IDUwMCAtNTkgY3QgCis0ODkgLTM5IDQ3NSAtMjMgNDU5IC0xMiBjdCA0NDIgLTIgNDI1IDQgNDA5IDQgY3QgMzkxIDQgMzcyIC0zIDM1MyAtMTcgY3QgMzUzIC0xNyAzNTMgLTE3IDQwOSAtMjEzIGN0IAorNDE0IC0yMjggNDE2IC0yMzYgNDE2IC0yMzkgY3QgNDE2IC0yNDIgNDE1IC0yNDQgNDEzIC0yNDYgY3QgNDEwIC0yNDggNDA2IC0yNDkgNDAwIC0yNDkgY3QgCiszOTcgLTI0OSAzOTMgLTI0OSAzODcgLTI0OCBjdCAzODcgLTI0OCAzODcgLTI0OCAzODcgLTI1NSBjdCAzODcgLTI1NSAzODcgLTI1NSA0NTMgLTI2NSBjdCAKK3AKKzM4MCAtMTUgbSAgMzkyIC04IDQwMyAtNSA0MTIgLTUgY3QgNDIyIC01IDQzMyAtOSA0NDQgLTE3IGN0IDQ1NiAtMjUgNDY1IC0zOCA0NzQgLTU3IGN0IAorNDgyIC03NiA0ODYgLTk1IDQ4NiAtMTE0IGN0IDQ4NiAtMTI1IDQ4MyAtMTM0IDQ3OCAtMTQwIGN0IDQ3MyAtMTQ3IDQ2NiAtMTUwIDQ1OSAtMTUwIGN0IAorNDQ4IC0xNTAgNDM3IC0xNDUgNDI3IC0xMzYgY3QgNDE3IC0xMjcgNDA5IC0xMTQgNDA0IC05NyBjdCA0MDQgLTk3IDQwNCAtOTcgMzgwIC0xNSBjdCAKK3AgZWYKKzY0OCAtMTY0IG0gIDY0OCAtMTY0IDY0OCAtMTY0IDY0NSAtMTUwIGN0IDY0NSAtMTUwIDY0NSAtMTUwIDYxNyAtMTUwIGN0IDYxNyAtMTUwIDYxNyAtMTUwIDU5NCAtNjkgY3QgCis1ODQgLTM0IDU3NCAtNiA1NjUgMTMgY3QgNTUyIDQxIDUzOCA2MCA1MjMgNzAgY3QgNTExIDc4IDUwMCA4MiA0ODggODIgY3QgNDgxIDgyIDQ3NCA4MCA0NjkgNzUgY3QgCis0NjUgNzIgNDYzIDY4IDQ2MyA2MyBjdCA0NjMgNTkgNDY1IDU1IDQ2OCA1MiBjdCA0NzEgNDkgNDc1IDQ4IDQ3OSA0OCBjdCA0ODMgNDggNDg1IDQ5IDQ4OCA1MSBjdCAKKzQ5MCA1MyA0OTEgNTYgNDkxIDU4IGN0IDQ5MSA2MSA0OTAgNjQgNDg4IDY2IGN0IDQ4NiA2OCA0ODUgNjkgNDg1IDcwIGN0IDQ4NSA3MSA0ODUgNzIgNDg2IDczIGN0IAorNDg3IDc0IDQ4OSA3NCA0OTEgNzQgY3QgNDk3IDc0IDUwMiA3MiA1MDggNjkgY3QgNTE0IDY2IDUxOSA2MSA1MjQgNTQgY3QgNTI4IDQ4IDUzMiAzOCA1MzcgMjYgY3QgCis1MzggMjEgNTQzIDQgNTUxIC0yNSBjdCA1NTEgLTI1IDU1MSAtMjUgNTg4IC0xNTAgY3QgNTg4IC0xNTAgNTg4IC0xNTAgNTUxIC0xNTAgY3QgCis1NTEgLTE1MCA1NTEgLTE1MCA1NTQgLTE2NCBjdCA1NjUgLTE2NCA1NzMgLTE2NSA1NzggLTE2NiBjdCA1ODIgLTE2OCA1ODYgLTE3MCA1OTAgLTE3NCBjdCAKKzU5NCAtMTc4IDU5OSAtMTg2IDYwNCAtMTk3IGN0IDYxMSAtMjEyIDYxOCAtMjI0IDYyNCAtMjMyIGN0IDYzMyAtMjQzIDY0MiAtMjUxIDY1MiAtMjU3IGN0IAorNjYxIC0yNjIgNjcxIC0yNjUgNjc5IC0yNjUgY3QgNjg4IC0yNjUgNjk1IC0yNjMgNzAxIC0yNTggY3QgNzA2IC0yNTMgNzA5IC0yNDggNzA5IC0yNDIgY3QgCis3MDkgLTIzOCA3MDggLTIzNCA3MDUgLTIzMSBjdCA3MDIgLTIyOCA2OTggLTIyNyA2OTQgLTIyNyBjdCA2OTAgLTIyNyA2ODcgLTIyOCA2ODUgLTIzMCBjdCAKKzY4MiAtMjMzIDY4MSAtMjM1IDY4MSAtMjM4IGN0IDY4MSAtMjQwIDY4MiAtMjQzIDY4NCAtMjQ1IGN0IDY4NiAtMjQ4IDY4NyAtMjUwIDY4NyAtMjUxIGN0IAorNjg3IC0yNTMgNjg2IC0yNTQgNjg1IC0yNTUgY3QgNjg0IC0yNTYgNjgyIC0yNTcgNjc5IC0yNTcgY3QgNjcyIC0yNTcgNjY1IC0yNTQgNjU5IC0yNDkgY3QgCis2NTEgLTI0MiA2NDQgLTIzMiA2MzggLTIxNyBjdCA2MzUgLTIxMCA2MjkgLTE5MiA2MjEgLTE2NCBjdCA2MjEgLTE2NCA2MjEgLTE2NCA2NDggLTE2NCBjdCAKK3AgZWYKK3BvbQorZ3IKK2dyCitncgorZ3IKK2dyCis0Mzg1IDE5Njg4IG0gIDI2MzUgMTk2ODggbCAgMjYzNSAxNzg4OCBsICA2MTM1IDE3ODg4IGwgIDYxMzUgMTk2ODggbCAgNDM4NSAxOTY4OCBsIAorcGMKKzQzODUgMTc4ODggbSAgNDE5OCAxNzMyNiBsICA0NTczIDE3MzI2IGwgIDQzODUgMTc4ODggbCAgcCBlZgorNDQwOSAxMjUzNiBtICA0NDA5IDE1MjEyIGwgIDQzODQgMTUyMTIgbCAgNDM1OSAxNTIxMiBsICA0MzU5IDEyNTM2IGwgIDQzODQgMTI1MzYgbCAKKzQ0MDkgMTI1MzYgbCAgcCBlZgorNDM4NCAxNTIxMiBtICA0Mzg0IDE1MjM3IGwgIDQzODAgMTUyMzcgbCAgNDM3NSAxNTIzNSBsICA0MzcyIDE1MjM0IGwgIDQzNjggMTUyMzEgbCAKKzQzNjUgMTUyMjggbCAgNDM2MiAxNTIyNSBsICA0MzYxIDE1MjIxIGwgIDQzNTkgMTUyMTYgbCAgNDM1OSAxNTIxMiBsICA0MzU5IDE1MjEyIGwgCis0Mzg0IDE1MjEyIGwgIHAgZWYKKzQzODQgMTUxODcgbSAgNDM4NSAxNTE4NyBsICA0Mzg1IDE1MjEyIGwgIDQzODUgMTUyMzcgbCAgNDM4NCAxNTIzNyBsICA0Mzg0IDE1MjEyIGwgCis0Mzg0IDE1MTg3IGwgIHAgZWYKKzQzODUgMTUyMTIgbSAgNDM4NSAxNTE4NyBsICA0Mzg5IDE1MTg3IGwgIDQzOTQgMTUxODkgbCAgNDM5NyAxNTE5MCBsICA0NDAxIDE1MTkzIGwgCis0NDA0IDE1MTk2IGwgIDQ0MDcgMTUxOTkgbCAgNDQwOCAxNTIwMyBsICA0NDEwIDE1MjA4IGwgIDQ0MTAgMTUyMTIgbCAgNDQxMCAxNTIxMiBsIAorNDM4NSAxNTIxMiBsICBwIGVmCis0NDEwIDE1MjEyIG0gIDQ0MTAgMTc0MzggbCAgNDM4NSAxNzQzOCBsICA0MzYwIDE3NDM4IGwgIDQzNjAgMTUyMTIgbCAgNDM4NSAxNTIxMiBsIAorNDQxMCAxNTIxMiBsICBwIGVmCis3MDM1IDE2NTg3IG0gIDY0NzMgMTY3NzUgbCAgNjQ3MyAxNjQwMCBsICA3MDM1IDE2NTg3IGwgIHAgZWYKKzQ0MDkgMTI1MzYgbSAgNDQwOSAxNjU4NyBsICA0Mzg0IDE2NTg3IGwgIDQzNTkgMTY1ODcgbCAgNDM1OSAxMjUzNiBsICA0Mzg0IDEyNTM2IGwgCis0NDA5IDEyNTM2IGwgIHAgZWYKKzQzODQgMTY1ODcgbSAgNDM4NCAxNjYxMiBsICA0MzgwIDE2NjEyIGwgIDQzNzUgMTY2MTAgbCAgNDM3MiAxNjYwOSBsICA0MzY4IDE2NjA2IGwgCis0MzY1IDE2NjAzIGwgIDQzNjIgMTY2MDAgbCAgNDM2MSAxNjU5NiBsICA0MzU5IDE2NTkxIGwgIDQzNTkgMTY1ODcgbCAgNDM1OSAxNjU4NyBsIAorNDM4NCAxNjU4NyBsICBwIGVmCis0Mzg0IDE2NTYyIG0gIDY1ODUgMTY1NjIgbCAgNjU4NSAxNjU4NyBsICA2NTg1IDE2NjEyIGwgIDQzODQgMTY2MTIgbCAgNDM4NCAxNjU4NyBsIAorNDM4NCAxNjU2MiBsICBwIGVmCisxMDIzNSAxNjU4MyBtICA5Njc0IDE2Nzc1IGwgIDk2NzEgMTY0MDAgbCAgMTAyMzUgMTY1ODMgbCAgcCBlZgorOTEzNSAxNjU2MiBtICA5Njg1IDE2NTYyIGwgIDk2ODUgMTY1ODcgbCAgOTY4NSAxNjYxMiBsICA5MTM1IDE2NjEyIGwgIDkxMzUgMTY1ODcgbCAKKzkxMzUgMTY1NjIgbCAgcCBlZgorOTY4NSAxNjU4NyBtICA5NzEwIDE2NTg3IGwgIDk3MTAgMTY1OTEgbCAgOTcwOCAxNjU5NiBsICA5NzA3IDE2NTk5IGwgIDk3MDQgMTY2MDMgbCAKKzk3MDEgMTY2MDYgbCAgOTY5OCAxNjYwOSBsICA5Njk0IDE2NjEwIGwgIDk2ODkgMTY2MTIgbCAgOTY4NSAxNjYxMiBsICA5Njg1IDE2NjEyIGwgCis5Njg1IDE2NTg3IGwgIHAgZWYKKzk2NjAgMTY1ODcgbSAgOTY2MCAxNjU4MyBsICA5Njg1IDE2NTgzIGwgIDk3MTAgMTY1ODMgbCAgOTcxMCAxNjU4NyBsICA5Njg1IDE2NTg3IGwgCis5NjYwIDE2NTg3IGwgIHAgZWYKKzk2ODUgMTY1ODMgbSAgOTY2MCAxNjU4MyBsICA5NjYwIDE2NTc5IGwgIDk2NjIgMTY1NzQgbCAgOTY2MyAxNjU3MSBsICA5NjY2IDE2NTY3IGwgCis5NjY5IDE2NTY0IGwgIDk2NzIgMTY1NjEgbCAgOTY3NiAxNjU2MCBsICA5NjgxIDE2NTU4IGwgIDk2ODUgMTY1NTggbCAgOTY4NSAxNjU1OCBsIAorOTY4NSAxNjU4MyBsICBwIGVmCis5Njg1IDE2NTU4IG0gIDk3ODUgMTY1NTggbCAgOTc4NSAxNjU4MyBsICA5Nzg1IDE2NjA4IGwgIDk2ODUgMTY2MDggbCAgOTY4NSAxNjU4MyBsIAorOTY4NSAxNjU1OCBsICBwIGVmCis0Mzg1IDIyMzM3IG0gIDM5NzEgMjIzMzcgMzYzNSAyMjAwMSAzNjM1IDIxNTg3IGN0IDM2MzUgMjExNzMgMzk3MSAyMDgzNyA0Mzg1IDIwODM3IGN0IAorNDc5OSAyMDgzNyA1MTM1IDIxMTczIDUxMzUgMjE1ODcgY3QgNTEzNSAyMjAwMSA0Nzk5IDIyMzM3IDQzODUgMjIzMzcgY3QgcGMKK2dzCitncworcHVtCis0MTAyIDIxOTIwIHQKKzI0NiAtMTE1IG0gIDI0NiAtMzA5IGwgIDU0IC0zMDkgbCAgNTQgLTM5MCBsICAyNDYgLTM5MCBsICAyNDYgLTU4MiBsICAzMjggLTU4MiBsIAorMzI4IC0zOTAgbCAgNTIwIC0zOTAgbCAgNTIwIC0zMDkgbCAgMzI4IC0zMDkgbCAgMzI4IC0xMTUgbCAgMjQ2IC0xMTUgbCAKK3AgZWYKK3BvbQorZ3IKK2dyCitncworNzE3MCAyMDg2OCBtIDg5NTQgMjA4NjggbCA4OTU0IDIyNDk2IGwgNzE3MCAyMjQ5NiBsIDcxNzAgMjA4NjggbCBlb2NsaXAgbmV3cGF0aAorZ3MKK3RtIHNldG1hdHJpeAorNDczNiAxNzgzMyB0IAorMSAxIHMgCitncworZ3MKKzAgMCBtIDE3ODQgMCBsIDE3ODQgMTYyOCBsIDAgMTYyOCBsIDAgMCBsIGVvY2xpcCBuZXdwYXRoCitncworcHVtCisxNTkgNTU2IHQKKzg2IDkgbSAgODYgOSA4NiA5IDEyMiAtMzQxIGN0IDEyNCAtMzU1IDEyNCAtMzY1IDEyNCAtMzczIGN0IDEyNCAtMzg1IDEyMSAtMzk0IDExNCAtNDAwIGN0IAorMTA3IC00MDYgOTUgLTQxMCA3NyAtNDEwIGN0IDc3IC00MTAgNzcgLTQxMCA4MSAtNDIxIGN0IDgxIC00MjEgODEgLTQyMSAyMzcgLTQyMSBjdCAKKzIzNyAtNDIxIDIzNyAtNDIxIDIzNCAtNDEwIGN0IDIxMyAtNDEwIDE5OCAtNDA2IDE5MSAtMzk5IGN0IDE4MyAtMzkxIDE3NyAtMzcyIDE3NSAtMzQxIGN0IAorMTc1IC0zNDEgMTc1IC0zNDEgMTUxIC0xMTMgY3QgMTUxIC0xMTMgMTUxIC0xMTMgMzExIC0zNjEgY3QgMzExIC0zNjUgMzExIC0zNjkgMzExIC0zNzEgY3QgCiszMTEgLTM4MyAzMDggLTM5MiAzMDEgLTM5OCBjdCAyOTQgLTQwNSAyNzkgLTQwOSAyNTcgLTQxMCBjdCAyNTcgLTQxMCAyNTcgLTQxMCAyNTkgLTQyMSBjdCAKKzI1OSAtNDIxIDI1OSAtNDIxIDQzMCAtNDIxIGN0IDQzMCAtNDIxIDQzMCAtNDIxIDQyNiAtNDEwIGN0IDQwNyAtNDEwIDM5MyAtNDA4IDM4NyAtNDA1IGN0IAorMzgyIC00MDMgMzc3IC0zOTkgMzc0IC0zOTQgY3QgMzcxIC0zODkgMzY4IC0zODAgMzY2IC0zNjggY3QgMzY1IC0zNjQgMzYzIC0zNDAgMzU4IC0yOTYgY3QgCiszNTQgLTI1MSAzNDcgLTE5MCAzMzggLTExMyBjdCAzMzggLTExMyAzMzggLTExMyA0NzIgLTMxNyBjdCA0ODYgLTMzOSA0OTYgLTM1NCA0OTkgLTM2MyBjdCAKKzUwMyAtMzcyIDUwNSAtMzgwIDUwNSAtMzg2IGN0IDUwNSAtMzkyIDUwMiAtMzk3IDQ5NyAtNDAxIGN0IDQ5MiAtNDA2IDQ4NCAtNDA5IDQ3MiAtNDEwIGN0IAorNDcyIC00MTAgNDcyIC00MTAgNDc0IC00MjEgY3QgNDc0IC00MjEgNDc0IC00MjEgNTk5IC00MjEgY3QgNTk5IC00MjEgNTk5IC00MjEgNTk2IC00MTAgY3QgCis1ODUgLTQwOSA1NzUgLTQwNiA1NjcgLTQwMiBjdCA1NTggLTM5NyA1NDggLTM4OSA1MzcgLTM3NiBjdCA1MzAgLTM2OCA1MTYgLTM0OSA0OTYgLTMxNyBjdCAKKzQ5NiAtMzE3IDQ5NiAtMzE3IDI4NCA5IGN0IDI4NCA5IDI4NCA5IDI3MyA5IGN0IDI3MyA5IDI3MyA5IDMwNyAtMzE3IGN0IDMwNyAtMzE3IDMwNyAtMzE3IDk3IDkgY3QgCis5NyA5IDk3IDkgODYgOSBjdCBwIGVmCitwb20KK2dyCitncworcHVtCis4NDcgNTU2IHQKKzE2OCAxMzEgbSAgMTI3IDk4IDk2IDUwIDc1IC0xMiBjdCA1NiAtNjYgNDcgLTEyMyA0NyAtMTgzIGN0IDQ3IC0yNDEgNTYgLTI5OCA3NSAtMzU0IGN0IAorOTggLTQxOSAxMjggLTQ2NyAxNjggLTQ5NyBjdCAxNjggLTQ5NyAxNjggLTQ5NyAxNjggLTQ4MSBjdCAxMzkgLTQ1NCAxMTYgLTQwOCAxMDEgLTM0MiBjdCAKKzg5IC0yOTAgODMgLTIzNyA4MyAtMTgzIGN0IDgzIC0xMjkgODkgLTc2IDEwMSAtMjQgY3QgMTE2IDQzIDEzOSA4OSAxNjggMTE2IGN0IDE2OCAxMTYgMTY4IDExNiAxNjggMTMxIGN0IAorcCBlZgorcG9tCitncgorZ3MKK3B1bQorMTEzOCA1NTYgdAorNTQgLTI3MyBtICA1NCAtMjczIDU0IC0yNzMgMjQ5IC0yNzMgY3QgMjQ5IC0yNzMgMjQ5IC0yNzMgMjQ5IC0yNjUgY3QgMjQ5IC0yNjUgMjQ5IC0yNjUgMzUgLTQyIGN0IAorMzUgLTQyIDM1IC00MiAxMjUgLTQyIGN0IDE0NyAtNDIgMTYxIC00MyAxNjYgLTQ0IGN0IDE3MiAtNDYgMTc4IC01MCAxODMgLTU1IGN0IAorMTg3IC02MCAxOTMgLTcwIDE5OSAtODQgY3QgMTk5IC04NCAxOTkgLTg0IDIxMCAtODQgY3QgMjEwIC04NCAyMTAgLTg0IDE4MyAwIGN0IAorMTgzIDAgMTgzIDAgLTE4IDAgY3QgLTE4IDAgLTE4IDAgLTE4IC05IGN0IC0xOCAtOSAtMTggLTkgMTk2IC0yMzIgY3QgMTk2IC0yMzIgMTk2IC0yMzIgMTA5IC0yMzIgY3QgCis5MCAtMjMyIDc4IC0yMzIgNzQgLTIzMSBjdCA2OCAtMjI5IDYzIC0yMjYgNTcgLTIyMSBjdCA1MSAtMjE2IDQ1IC0yMDggMzkgLTE5NiBjdCAKKzM5IC0xOTYgMzkgLTE5NiAyOCAtMTk2IGN0IDI4IC0xOTYgMjggLTE5NiA1NCAtMjczIGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzE0MjkgNTU2IHQKKzMzIDExNiBtICA2MSA5MCA4MiA0NiA5NyAtMTggY3QgMTEwIC03MCAxMTcgLTEyMCAxMTcgLTE3MCBjdCAxMTcgLTIyOSAxMTEgLTI4NCAxMDAgLTMzNSBjdCAKKzg2IC00MDQgNjMgLTQ1MyAzMyAtNDgxIGN0IDMzIC00ODEgMzMgLTQ4MSAzMyAtNDk3IGN0IDcyIC00NjggMTAzIC00MjEgMTI1IC0zNTQgY3QgCisxNDMgLTI5OSAxNTMgLTI0MSAxNTMgLTE4MyBjdCAxNTMgLTEyMyAxNDQgLTY2IDEyNSAtMTEgY3QgMTAzIDU0IDcyIDEwMiAzMyAxMzEgY3QgCiszMyAxMzEgMzMgMTMxIDMzIDExNiBjdCBwIGVmCitwb20KK2dyCitncworMTMyIDc2NyBtICAxNTIxIDAgcmwgMCAzMSBybCAxNTIxIG5lZyAwIHJsIGVmIHAgZWYKKworZ3IKK2dzCitwdW0KKzM3MCAxMzIzIHQKKzIwOCAtMzQ1IG0gIDE5NyAtMzQ0IGwgIDExMyAtNDEwIGwgIDI1IC0zNDIgbCAgMTEgLTM0NSBsICAxMTMgLTQ2MiBsICAyMDggLTM0NSBsIAorcCBlZgorcG9tCitncgorZ3MKK3B1bQorMzE4IDE0NTUgdAorMzI4IC00MzAgbSAgMzI4IC00MzAgMzI4IC00MzAgMjk2IC04MCBjdCAyOTQgLTY0IDI5NCAtNTMgMjk0IC00OCBjdCAyOTQgLTQwIDI5NSAtMzMgMjk4IC0yOSBjdCAKKzMwMiAtMjMgMzA3IC0xOCAzMTQgLTE1IGN0IDMyMSAtMTIgMzMyIC0xMSAzNDggLTExIGN0IDM0OCAtMTEgMzQ4IC0xMSAzNDUgMCBjdCAKKzM0NSAwIDM0NSAwIDE4MCAwIGN0IDE4MCAwIDE4MCAwIDE4NCAtMTEgY3QgMTg0IC0xMSAxODQgLTExIDE5MSAtMTEgY3QgMjA0IC0xMSAyMTUgLTE0IDIyNCAtMjAgY3QgCisyMzAgLTI0IDIzNCAtMzAgMjM4IC0zOSBjdCAyNDAgLTQ2IDI0MiAtNjEgMjQ0IC04NSBjdCAyNDQgLTg1IDI0NCAtODUgMjQ5IC0xMzggY3QgCisyNDkgLTEzOCAyNDkgLTEzOCAxMjggLTEzOCBjdCAxMjggLTEzOCAxMjggLTEzOCA4NiAtODAgY3QgNzYgLTY3IDcwIC01NyA2NyAtNTIgY3QgCis2NSAtNDYgNjQgLTQxIDY0IC0zNiBjdCA2NCAtMjkgNjYgLTI0IDcyIC0xOSBjdCA3NyAtMTQgODYgLTExIDk4IC0xMSBjdCA5OCAtMTEgOTggLTExIDk1IDAgY3QgCis5NSAwIDk1IDAgLTMwIDAgY3QgLTMwIDAgLTMwIDAgLTI3IC0xMSBjdCAtMTIgLTEyIDIgLTE3IDE0IC0yNiBjdCAyNSAtMzYgNDMgLTU3IDY2IC04OCBjdCAKKzY2IC04OCA2NiAtODggMzE3IC00MzAgY3QgMzE3IC00MzAgMzE3IC00MzAgMzI4IC00MzAgY3QgcAorMjY4IC0zMjcgbSAgMTQ0IC0xNTkgbCAgMjUxIC0xNTkgbCAgMjY4IC0zMjcgbCAgcCBlZgorcG9tCitncgorZ3MKK3B1bQorNzY3IDE0NTUgdAorMTY4IDEzMSBtICAxMjcgOTggOTYgNTAgNzUgLTEyIGN0IDU2IC02NiA0NyAtMTIzIDQ3IC0xODMgY3QgNDcgLTI0MSA1NiAtMjk4IDc1IC0zNTQgY3QgCis5OCAtNDE5IDEyOCAtNDY3IDE2OCAtNDk3IGN0IDE2OCAtNDk3IDE2OCAtNDk3IDE2OCAtNDgxIGN0IDEzOSAtNDU0IDExNiAtNDA4IDEwMSAtMzQyIGN0IAorODkgLTI5MCA4MyAtMjM3IDgzIC0xODMgY3QgODMgLTEyOSA4OSAtNzYgMTAxIC0yNCBjdCAxMTYgNDMgMTM5IDg5IDE2OCAxMTYgY3QgMTY4IDExNiAxNjggMTE2IDE2OCAxMzEgY3QgCitwIGVmCitwb20KK2dyCitncworcHVtCisxMDMyIDE0NTUgdAorNTQgLTI3MyBtICA1NCAtMjczIDU0IC0yNzMgMjQ5IC0yNzMgY3QgMjQ5IC0yNzMgMjQ5IC0yNzMgMjQ5IC0yNjUgY3QgMjQ5IC0yNjUgMjQ5IC0yNjUgMzUgLTQyIGN0IAorMzUgLTQyIDM1IC00MiAxMjUgLTQyIGN0IDE0NyAtNDIgMTYxIC00MyAxNjYgLTQ0IGN0IDE3MiAtNDYgMTc4IC01MCAxODMgLTU1IGN0IAorMTg3IC02MCAxOTMgLTcwIDE5OSAtODQgY3QgMTk5IC04NCAxOTkgLTg0IDIxMCAtODQgY3QgMjEwIC04NCAyMTAgLTg0IDE4MyAwIGN0IAorMTgzIDAgMTgzIDAgLTE4IDAgY3QgLTE4IDAgLTE4IDAgLTE4IC05IGN0IC0xOCAtOSAtMTggLTkgMTk2IC0yMzIgY3QgMTk2IC0yMzIgMTk2IC0yMzIgMTA5IC0yMzIgY3QgCis5MCAtMjMyIDc4IC0yMzIgNzQgLTIzMSBjdCA2OCAtMjI5IDYzIC0yMjYgNTcgLTIyMSBjdCA1MSAtMjE2IDQ1IC0yMDggMzkgLTE5NiBjdCAKKzM5IC0xOTYgMzkgLTE5NiAyOCAtMTk2IGN0IDI4IC0xOTYgMjggLTE5NiA1NCAtMjczIGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzEzNDkgMTQ1NSB0CiszMyAxMTYgbSAgNjEgOTAgODIgNDYgOTcgLTE4IGN0IDExMCAtNzAgMTE3IC0xMjAgMTE3IC0xNzAgY3QgMTE3IC0yMjkgMTExIC0yODQgMTAwIC0zMzUgY3QgCis4NiAtNDA0IDYzIC00NTMgMzMgLTQ4MSBjdCAzMyAtNDgxIDMzIC00ODEgMzMgLTQ5NyBjdCA3MiAtNDY4IDEwMyAtNDIxIDEyNSAtMzU0IGN0IAorMTQzIC0yOTkgMTUzIC0yNDEgMTUzIC0xODMgY3QgMTUzIC0xMjMgMTQ0IC02NiAxMjUgLTExIGN0IDEwMyA1NCA3MiAxMDIgMzMgMTMxIGN0IAorMzMgMTMxIDMzIDEzMSAzMyAxMTYgY3QgcCBlZgorcG9tCitncgorZ3IKK2dyCitncgorZ3IKKzgwODUgMjI0ODcgbSAgNzAzNSAyMjQ4NyBsICA3MDM1IDIwNjg3IGwgIDkxMzUgMjA2ODcgbCAgOTEzNSAyMjQ4NyBsICA4MDg1IDIyNDg3IGwgCitwYworNTEzNSAyMTU4NiBtICA1Njk4IDIxMzk5IGwgIDU2OTggMjE3NzQgbCAgNTEzNSAyMTU4NiBsICBwIGVmCis3MDM1IDIxNjEyIG0gIDYwODUgMjE2MTIgbCAgNjA4NSAyMTU4NyBsICA2MDg1IDIxNTYyIGwgIDcwMzUgMjE1NjIgbCAgNzAzNSAyMTU4NyBsIAorNzAzNSAyMTYxMiBsICBwIGVmCis2MDg1IDIxNTg3IG0gIDYwODUgMjE2MTIgbCAgNjA4MSAyMTYxMiBsICA2MDc2IDIxNjEwIGwgIDYwNzMgMjE2MDkgbCAgNjA2OSAyMTYwNiBsIAorNjA2NiAyMTYwMyBsICA2MDYzIDIxNjAwIGwgIDYwNjIgMjE1OTYgbCAgNjA2MCAyMTU5MSBsICA2MDYwIDIxNTg3IGwgIDYwNjAgMjE1ODcgbCAKKzYwODUgMjE1ODcgbCAgcCBlZgorNjA2MCAyMTU4NyBtICA2MDYwIDIxNTg2IGwgIDYwODUgMjE1ODYgbCAgNjExMCAyMTU4NiBsICA2MTEwIDIxNTg3IGwgIDYwODUgMjE1ODcgbCAKKzYwNjAgMjE1ODcgbCAgcCBlZgorNjA4NSAyMTU4NiBtICA2MDg1IDIxNTYxIGwgIDYwODkgMjE1NjEgbCAgNjA5NCAyMTU2MyBsICA2MDk3IDIxNTY0IGwgIDYxMDEgMjE1NjcgbCAKKzYxMDQgMjE1NzAgbCAgNjEwNyAyMTU3MyBsICA2MTA4IDIxNTc3IGwgIDYxMTAgMjE1ODIgbCAgNjExMCAyMTU4NiBsICA2MTEwIDIxNTg2IGwgCis2MDg1IDIxNTg2IGwgIHAgZWYKKzYwODUgMjE2MTEgbSAgNTU4NSAyMTYxMSBsICA1NTg1IDIxNTg2IGwgIDU1ODUgMjE1NjEgbCAgNjA4NSAyMTU2MSBsICA2MDg1IDIxNTg2IGwgCis2MDg1IDIxNjExIGwgIHAgZWYKKzEyMTM1IDIyNDg1IG0gIDEwNjM1IDIyNDg1IGwgIDEwNjM1IDIwNjg1IGwgIDEzNjM1IDIwNjg1IGwgIDEzNjM1IDIyNDg1IGwgCisxMjEzNSAyMjQ4NSBsICBwYworZ3MKK2dzCitwdW0KKzExNDg0IDIxNDUxIHQKKzExNiAtMzU0IG0gIDExNiAtMzU0IDExNiAtMzU0IDExNiAtMjA3IGN0IDExNiAtMjA3IDExNiAtMjA3IDE4NCAtMjA3IGN0IDIwMCAtMjA3IDIxMSAtMjEwIDIxOCAtMjE3IGN0IAorMjI2IC0yMjQgMjMxIC0yMzggMjMzIC0yNTggY3QgMjMzIC0yNTggMjMzIC0yNTggMjQzIC0yNTggY3QgMjQzIC0yNTggMjQzIC0yNTggMjQzIC0xMzEgY3QgCisyNDMgLTEzMSAyNDMgLTEzMSAyMzMgLTEzMSBjdCAyMzMgLTE0NiAyMzEgLTE1NiAyMjcgLTE2MyBjdCAyMjQgLTE3MCAyMTkgLTE3NSAyMTIgLTE3OSBjdCAKKzIwNiAtMTgyIDE5NyAtMTg0IDE4NCAtMTg0IGN0IDE4NCAtMTg0IDE4NCAtMTg0IDExNiAtMTg0IGN0IDExNiAtMTg0IDExNiAtMTg0IDExNiAtNjYgY3QgCisxMTYgLTQ3IDExNyAtMzUgMTIwIC0yOCBjdCAxMjEgLTI0IDEyNSAtMjAgMTMxIC0xNyBjdCAxMzkgLTEyIDE0NyAtMTAgMTU2IC0xMCBjdCAKKzE1NiAtMTAgMTU2IC0xMCAxNjkgLTEwIGN0IDE2OSAtMTAgMTY5IC0xMCAxNjkgMCBjdCAxNjkgMCAxNjkgMCAxMCAwIGN0IDEwIDAgMTAgMCAxMCAtMTAgY3QgCisxMCAtMTAgMTAgLTEwIDIzIC0xMCBjdCAzOCAtMTAgNTAgLTE1IDU2IC0yNCBjdCA2MSAtMjkgNjMgLTQ0IDYzIC02NiBjdCA2MyAtNjYgNjMgLTY2IDYzIC0zMDggY3QgCis2MyAtMzI3IDYyIC0zMzkgNTkgLTM0NiBjdCA1OCAtMzUwIDU0IC0zNTQgNDggLTM1NyBjdCA0MCAtMzYyIDMyIC0zNjQgMjMgLTM2NCBjdCAKKzIzIC0zNjQgMjMgLTM2NCAxMCAtMzY0IGN0IDEwIC0zNjQgMTAgLTM2NCAxMCAtMzc0IGN0IDEwIC0zNzQgMTAgLTM3NCAyODYgLTM3NCBjdCAKKzI4NiAtMzc0IDI4NiAtMzc0IDI5MCAtMjkyIGN0IDI5MCAtMjkyIDI5MCAtMjkyIDI4MCAtMjkyIGN0IDI3NSAtMzEwIDI3MCAtMzIyIDI2NCAtMzMxIGN0IAorMjU4IC0zMzkgMjUwIC0zNDUgMjQxIC0zNDggY3QgMjMxIC0zNTIgMjE3IC0zNTQgMTk4IC0zNTQgY3QgMTk4IC0zNTQgMTk4IC0zNTQgMTE2IC0zNTQgY3QgCitwIGVmCiszOTUgLTM5MiBtICA0MDMgLTM5MiA0MDkgLTM4OSA0MTUgLTM4NCBjdCA0MjAgLTM3OCA0MjMgLTM3MiA0MjMgLTM2NCBjdCA0MjMgLTM1NiA0MjAgLTM1MCA0MTUgLTM0NCBjdCAKKzQwOSAtMzM5IDQwMyAtMzM2IDM5NSAtMzM2IGN0IDM4NyAtMzM2IDM4MSAtMzM5IDM3NSAtMzQ0IGN0IDM3MCAtMzUwIDM2NyAtMzU2IDM2NyAtMzY0IGN0IAorMzY3IC0zNzIgMzcwIC0zNzggMzc1IC0zODQgY3QgMzgxIC0zODkgMzg3IC0zOTIgMzk1IC0zOTIgY3QgcAorNDE4IC0yNjAgbSAgNDE4IC0yNjAgNDE4IC0yNjAgNDE4IC01NyBjdCA0MTggLTQxIDQxOSAtMzEgNDIxIC0yNiBjdCA0MjQgLTIwIDQyNyAtMTYgNDMxIC0xNCBjdCAKKzQzNiAtMTEgNDQzIC0xMCA0NTUgLTEwIGN0IDQ1NSAtMTAgNDU1IC0xMCA0NTUgMCBjdCA0NTUgMCA0NTUgMCAzMzUgMCBjdCAzMzUgMCAzMzUgMCAzMzUgLTEwIGN0IAorMzQ3IC0xMCAzNTUgLTExIDM1OSAtMTQgY3QgMzYzIC0xNiAzNjYgLTIwIDM2OCAtMjUgY3QgMzcxIC0zMSAzNzIgLTQxIDM3MiAtNTcgY3QgCiszNzIgLTU3IDM3MiAtNTcgMzcyIC0xNTQgY3QgMzcyIC0xODEgMzcxIC0xOTkgMzcwIC0yMDcgY3QgMzY4IC0yMTMgMzY2IC0yMTcgMzY0IC0yMjAgY3QgCiszNjEgLTIyMiAzNTcgLTIyMyAzNTIgLTIyMyBjdCAzNDcgLTIyMyAzNDEgLTIyMiAzMzQgLTIxOSBjdCAzMzQgLTIxOSAzMzQgLTIxOSAzMzAgLTIyOSBjdCAKKzMzMCAtMjI5IDMzMCAtMjI5IDQwNiAtMjYwIGN0IDQwNiAtMjYwIDQwNiAtMjYwIDQxOCAtMjYwIGN0IHAgZWYKKzQ3NyAtMjUzIG0gIDQ3NyAtMjUzIDQ3NyAtMjUzIDU5MyAtMjUzIGN0IDU5MyAtMjUzIDU5MyAtMjUzIDU5MyAtMjQzIGN0IDU4NiAtMjQzIDU4MSAtMjQyIDU3OCAtMjM5IGN0IAorNTc1IC0yMzYgNTc0IC0yMzMgNTc0IC0yMjkgY3QgNTc0IC0yMjQgNTc4IC0yMTcgNTg1IC0yMDggY3QgNTg3IC0yMDUgNTkwIC0yMDAgNTk0IC0xOTQgY3QgCis1OTQgLTE5NCA1OTQgLTE5NCA2MTIgLTE2NiBjdCA2MTIgLTE2NiA2MTIgLTE2NiA2MzMgLTE5NCBjdCA2NDYgLTIxMSA2NTMgLTIyMyA2NTMgLTIyOCBjdCAKKzY1MyAtMjMyIDY1MSAtMjM2IDY0OCAtMjM5IGN0IDY0NSAtMjQyIDY0MCAtMjQzIDYzMyAtMjQzIGN0IDYzMyAtMjQzIDYzMyAtMjQzIDYzMyAtMjUzIGN0IAorNjMzIC0yNTMgNjMzIC0yNTMgNzE2IC0yNTMgY3QgNzE2IC0yNTMgNzE2IC0yNTMgNzE2IC0yNDMgY3QgNzA3IC0yNDIgNzAwIC0yNDAgNjkzIC0yMzYgY3QgCis2ODQgLTIyOSA2NzIgLTIxNiA2NTcgLTE5NSBjdCA2NTcgLTE5NSA2NTcgLTE5NSA2MjMgLTE0OSBjdCA2MjMgLTE0OSA2MjMgLTE0OSA2ODUgLTU4IGN0IAorNzAxIC0zNiA3MTIgLTIyIDcxOCAtMTggY3QgNzI1IC0xMyA3MzMgLTExIDc0NCAtMTAgY3QgNzQ0IC0xMCA3NDQgLTEwIDc0NCAwIGN0IAorNzQ0IDAgNzQ0IDAgNjI0IDAgY3QgNjI0IDAgNjI0IDAgNjI0IC0xMCBjdCA2MzIgLTEwIDYzOSAtMTIgNjQ0IC0xNiBjdCA2NDcgLTE4IDY0OSAtMjIgNjQ5IC0yNiBjdCAKKzY0OSAtMzAgNjQzIC00MSA2MzEgLTU4IGN0IDYzMSAtNTggNjMxIC01OCA1OTQgLTExMiBjdCA1OTQgLTExMiA1OTQgLTExMiA1NTQgLTU5IGN0IAorNTQyIC00MiA1MzYgLTMyIDUzNiAtMjkgY3QgNTM2IC0yNCA1MzggLTIwIDU0MiAtMTYgY3QgNTQ2IC0xMiA1NTMgLTEwIDU2MSAtMTAgY3QgCis1NjEgLTEwIDU2MSAtMTAgNTYxIDAgY3QgNTYxIDAgNTYxIDAgNDc5IDAgY3QgNDc5IDAgNDc5IDAgNDc5IC0xMCBjdCA0ODYgLTExIDQ5MSAtMTMgNDk2IC0xNyBjdCAKKzUwMyAtMjIgNTE1IC0zNiA1MzEgLTU4IGN0IDUzMSAtNTggNTMxIC01OCA1ODQgLTEyOCBjdCA1ODQgLTEyOCA1ODQgLTEyOCA1MzYgLTE5OCBjdCAKKzUyMyAtMjE4IDUxMiAtMjMwIDUwNSAtMjM1IGN0IDQ5NyAtMjQwIDQ4OCAtMjQzIDQ3NyAtMjQzIGN0IDQ3NyAtMjQzIDQ3NyAtMjQzIDQ3NyAtMjUzIGN0IAorcCBlZgorODE0IC0xNTggbSAgODE0IC0xMjEgODIzIC05MiA4NDEgLTcxIGN0IDg1OSAtNTAgODgwIC0zOSA5MDUgLTM5IGN0IDkyMSAtMzkgOTM2IC00MyA5NDggLTUyIGN0IAorOTYwIC02MSA5NzAgLTc3IDk3OCAtOTkgY3QgOTc4IC05OSA5NzggLTk5IDk4NyAtOTQgY3QgOTgzIC02OCA5NzIgLTQ1IDk1MyAtMjQgY3QgCis5MzUgLTMgOTEyIDcgODg0IDcgY3QgODU0IDcgODI4IC01IDgwNiAtMjggY3QgNzg1IC01MiA3NzQgLTgzIDc3NCAtMTIzIGN0IDc3NCAtMTY2IDc4NSAtMjAwIDgwNyAtMjI0IGN0IAorODI5IC0yNDggODU3IC0yNjAgODkwIC0yNjAgY3QgOTE4IC0yNjAgOTQyIC0yNTEgOTYwIC0yMzIgY3QgOTc4IC0yMTQgOTg3IC0xODkgOTg3IC0xNTggY3QgCis5ODcgLTE1OCA5ODcgLTE1OCA4MTQgLTE1OCBjdCBwCis4MTQgLTE3NCBtICA4MTQgLTE3NCA4MTQgLTE3NCA5MzAgLTE3NCBjdCA5MjkgLTE5MCA5MjcgLTIwMSA5MjQgLTIwOCBjdCA5MjAgLTIxOCA5MTMgLTIyNiA5MDQgLTIzMSBjdCAKKzg5NSAtMjM3IDg4NSAtMjQwIDg3NiAtMjQwIGN0IDg2MCAtMjQwIDg0NyAtMjM0IDgzNSAtMjIzIGN0IDgyMyAtMjExIDgxNiAtMTk1IDgxNCAtMTc0IGN0IAorcCBlZgorMTIwMSAtMjkgbSAgMTE4OSAtMTYgMTE3NyAtNyAxMTY1IC0xIGN0IDExNTMgNCAxMTQwIDcgMTEyNyA3IGN0IDEwOTkgNyAxMDc1IC00IDEwNTQgLTI3IGN0IAorMTAzMyAtNTAgMTAyMyAtODAgMTAyMyAtMTE2IGN0IDEwMjMgLTE1MiAxMDM0IC0xODUgMTA1NyAtMjE1IGN0IDEwODAgLTI0NSAxMTEwIC0yNjAgMTE0NiAtMjYwIGN0IAorMTE2OCAtMjYwIDExODYgLTI1MiAxMjAxIC0yMzcgY3QgMTIwMSAtMjM3IDEyMDEgLTIzNyAxMjAxIC0yODYgY3QgMTIwMSAtMzE0IDEyMDAgLTMzMiAxMTk5IC0zMzggY3QgCisxMTk4IC0zNDUgMTE5NSAtMzQ5IDExOTIgLTM1MiBjdCAxMTkwIC0zNTQgMTE4NiAtMzU1IDExODIgLTM1NSBjdCAxMTc3IC0zNTUgMTE3MCAtMzU0IDExNjMgLTM1MSBjdCAKKzExNjMgLTM1MSAxMTYzIC0zNTEgMTE1OSAtMzYxIGN0IDExNTkgLTM2MSAxMTU5IC0zNjEgMTIzNCAtMzkyIGN0IDEyMzQgLTM5MiAxMjM0IC0zOTIgMTI0NiAtMzkyIGN0IAorMTI0NiAtMzkyIDEyNDYgLTM5MiAxMjQ2IC05OSBjdCAxMjQ2IC03MCAxMjQ3IC01MyAxMjQ4IC00NiBjdCAxMjQ5IC00MCAxMjUyIC0zNiAxMjU1IC0zMyBjdCAKKzEyNTggLTMxIDEyNjEgLTI5IDEyNjUgLTI5IGN0IDEyNzAgLTI5IDEyNzcgLTMxIDEyODUgLTM0IGN0IDEyODUgLTM0IDEyODUgLTM0IDEyODggLTI0IGN0IAorMTI4OCAtMjQgMTI4OCAtMjQgMTIxNCA3IGN0IDEyMTQgNyAxMjE0IDcgMTIwMSA3IGN0IDEyMDEgNyAxMjAxIDcgMTIwMSAtMjkgY3QgcAorMTIwMSAtNDggbSAgMTIwMSAtNDggMTIwMSAtNDggMTIwMSAtMTc3IGN0IDEyMDAgLTE4OSAxMTk3IC0yMDEgMTE5MSAtMjExIGN0IAorMTE4NiAtMjIxIDExNzggLTIyOSAxMTY5IC0yMzQgY3QgMTE2MCAtMjM5IDExNTEgLTI0MiAxMTQyIC0yNDIgY3QgMTEyNiAtMjQyIDExMTIgLTIzNSAxMDk5IC0yMjAgY3QgCisxMDgyIC0yMDEgMTA3NCAtMTc0IDEwNzQgLTEzNyBjdCAxMDc0IC0xMDAgMTA4MiAtNzIgMTA5OCAtNTIgY3QgMTExNSAtMzMgMTEzMyAtMjMgMTE1MiAtMjMgY3QgCisxMTY5IC0yMyAxMTg1IC0zMSAxMjAxIC00OCBjdCBwIGVmCitwb20KK2dyCitncworcHVtCisxMTAyNyAyMjA3OCB0CisyMzMgLTk1IG0gIDIyNiAtNjIgMjEzIC0zNyAxOTMgLTE5IGN0IDE3MyAtMiAxNTEgNyAxMjcgNyBjdCA5OCA3IDczIC01IDUyIC0yOSBjdCAKKzMxIC01MyAyMCAtODUgMjAgLTEyNiBjdCAyMCAtMTY2IDMyIC0xOTggNTUgLTIyMyBjdCA3OSAtMjQ4IDEwOCAtMjYwIDE0MSAtMjYwIGN0IAorMTY2IC0yNjAgMTg2IC0yNTMgMjAyIC0yNDAgY3QgMjE4IC0yMjcgMjI2IC0yMTQgMjI2IC0xOTkgY3QgMjI2IC0xOTIgMjI0IC0xODcgMjE5IC0xODIgY3QgCisyMTUgLTE3OCAyMDggLTE3NiAyMDAgLTE3NiBjdCAxOTAgLTE3NiAxODIgLTE4MCAxNzYgLTE4NyBjdCAxNzMgLTE5MCAxNzEgLTE5OCAxNzAgLTIwOSBjdCAKKzE2OSAtMjIwIDE2NSAtMjI4IDE1OCAtMjM0IGN0IDE1MiAtMjM5IDE0MyAtMjQyIDEzMiAtMjQyIGN0IDExMyAtMjQyIDk5IC0yMzUgODcgLTIyMiBjdCAKKzcyIC0yMDQgNjUgLTE4MCA2NSAtMTUwIGN0IDY1IC0xMjAgNzIgLTk0IDg3IC03MSBjdCAxMDIgLTQ4IDEyMiAtMzYgMTQ3IC0zNiBjdCAKKzE2NSAtMzYgMTgxIC00MiAxOTYgLTU0IGN0IDIwNiAtNjIgMjE1IC03NyAyMjUgLTk5IGN0IDIyNSAtOTkgMjI1IC05OSAyMzMgLTk1IGN0IAorcCBlZgorMzkyIC0yNjAgbSAgNDMwIC0yNjAgNDYxIC0yNDYgNDg0IC0yMTcgY3QgNTAzIC0xOTIgNTEzIC0xNjMgNTEzIC0xMzEgY3QgNTEzIC0xMDkgNTA4IC04NiA0OTcgLTYzIGN0IAorNDg2IC00MCA0NzEgLTIyIDQ1MiAtMTEgY3QgNDMzIDEgNDEyIDcgMzg5IDcgY3QgMzUxIDcgMzIxIC04IDI5OCAtMzggY3QgMjc5IC02NCAyNzAgLTkyIDI3MCAtMTI0IGN0IAorMjcwIC0xNDcgMjc2IC0xNzAgMjg3IC0xOTMgY3QgMjk5IC0yMTYgMzE0IC0yMzMgMzMyIC0yNDQgY3QgMzUxIC0yNTUgMzcxIC0yNjAgMzkyIC0yNjAgY3QgCitwCiszODMgLTI0MiBtICAzNzQgLTI0MiAzNjQgLTIzOSAzNTQgLTIzMyBjdCAzNDQgLTIyOCAzMzYgLTIxOCAzMzAgLTIwMyBjdCAzMjQgLTE4OSAzMjEgLTE3MCAzMjEgLTE0NyBjdCAKKzMyMSAtMTExIDMyOCAtNzkgMzQzIC01MyBjdCAzNTggLTI2IDM3NyAtMTMgNDAxIC0xMyBjdCA0MTggLTEzIDQzMyAtMjAgNDQ1IC0zNSBjdCAKKzQ1NiAtNTAgNDYyIC03NSA0NjIgLTExMCBjdCA0NjIgLTE1NSA0NTIgLTE5MCA0MzMgLTIxNiBjdCA0MjAgLTIzMyA0MDMgLTI0MiAzODMgLTI0MiBjdCAKK3AgZWYKKzczMSAtMjkgbSAgNzE5IC0xNiA3MDcgLTcgNjk1IC0xIGN0IDY4MyA0IDY3MCA3IDY1NyA3IGN0IDYyOSA3IDYwNSAtNCA1ODQgLTI3IGN0IAorNTYzIC01MCA1NTMgLTgwIDU1MyAtMTE2IGN0IDU1MyAtMTUyIDU2NCAtMTg1IDU4NyAtMjE1IGN0IDYxMCAtMjQ1IDY0MCAtMjYwIDY3NiAtMjYwIGN0IAorNjk4IC0yNjAgNzE2IC0yNTIgNzMxIC0yMzcgY3QgNzMxIC0yMzcgNzMxIC0yMzcgNzMxIC0yODYgY3QgNzMxIC0zMTQgNzMwIC0zMzIgNzI5IC0zMzggY3QgCis3MjggLTM0NSA3MjUgLTM0OSA3MjIgLTM1MiBjdCA3MjAgLTM1NCA3MTYgLTM1NSA3MTIgLTM1NSBjdCA3MDcgLTM1NSA3MDAgLTM1NCA2OTMgLTM1MSBjdCAKKzY5MyAtMzUxIDY5MyAtMzUxIDY4OSAtMzYxIGN0IDY4OSAtMzYxIDY4OSAtMzYxIDc2NCAtMzkyIGN0IDc2NCAtMzkyIDc2NCAtMzkyIDc3NiAtMzkyIGN0IAorNzc2IC0zOTIgNzc2IC0zOTIgNzc2IC05OSBjdCA3NzYgLTcwIDc3NyAtNTMgNzc4IC00NiBjdCA3NzkgLTQwIDc4MiAtMzYgNzg1IC0zMyBjdCAKKzc4OCAtMzEgNzkxIC0yOSA3OTUgLTI5IGN0IDgwMCAtMjkgODA3IC0zMSA4MTUgLTM0IGN0IDgxNSAtMzQgODE1IC0zNCA4MTggLTI0IGN0IAorODE4IC0yNCA4MTggLTI0IDc0NCA3IGN0IDc0NCA3IDc0NCA3IDczMSA3IGN0IDczMSA3IDczMSA3IDczMSAtMjkgY3QgcAorNzMxIC00OCBtICA3MzEgLTQ4IDczMSAtNDggNzMxIC0xNzcgY3QgNzMwIC0xODkgNzI3IC0yMDEgNzIxIC0yMTEgY3QgNzE2IC0yMjEgNzA4IC0yMjkgNjk5IC0yMzQgY3QgCis2OTAgLTIzOSA2ODEgLTI0MiA2NzIgLTI0MiBjdCA2NTYgLTI0MiA2NDIgLTIzNSA2MjkgLTIyMCBjdCA2MTIgLTIwMSA2MDQgLTE3NCA2MDQgLTEzNyBjdCAKKzYwNCAtMTAwIDYxMiAtNzIgNjI4IC01MiBjdCA2NDUgLTMzIDY2MyAtMjMgNjgyIC0yMyBjdCA2OTkgLTIzIDcxNSAtMzEgNzMxIC00OCBjdCAKK3AgZWYKKzg3NyAtMTU4IG0gIDg3NyAtMTIxIDg4NiAtOTIgOTA0IC03MSBjdCA5MjIgLTUwIDk0MyAtMzkgOTY4IC0zOSBjdCA5ODQgLTM5IDk5OSAtNDMgMTAxMSAtNTIgY3QgCisxMDIzIC02MSAxMDMzIC03NyAxMDQxIC05OSBjdCAxMDQxIC05OSAxMDQxIC05OSAxMDUwIC05NCBjdCAxMDQ2IC02OCAxMDM1IC00NSAxMDE2IC0yNCBjdCAKKzk5OCAtMyA5NzUgNyA5NDcgNyBjdCA5MTcgNyA4OTEgLTUgODY5IC0yOCBjdCA4NDggLTUyIDgzNyAtODMgODM3IC0xMjMgY3QgODM3IC0xNjYgODQ4IC0yMDAgODcwIC0yMjQgY3QgCis4OTIgLTI0OCA5MjAgLTI2MCA5NTMgLTI2MCBjdCA5ODEgLTI2MCAxMDA1IC0yNTEgMTAyMyAtMjMyIGN0IDEwNDEgLTIxNCAxMDUwIC0xODkgMTA1MCAtMTU4IGN0IAorMTA1MCAtMTU4IDEwNTAgLTE1OCA4NzcgLTE1OCBjdCBwCis4NzcgLTE3NCBtICA4NzcgLTE3NCA4NzcgLTE3NCA5OTMgLTE3NCBjdCA5OTIgLTE5MCA5OTAgLTIwMSA5ODcgLTIwOCBjdCA5ODMgLTIxOCA5NzYgLTIyNiA5NjcgLTIzMSBjdCAKKzk1OCAtMjM3IDk0OCAtMjQwIDkzOSAtMjQwIGN0IDkyMyAtMjQwIDkxMCAtMjM0IDg5OCAtMjIzIGN0IDg4NiAtMjExIDg3OSAtMTk1IDg3NyAtMTc0IGN0IAorcCBlZgorMTE1NCAtMjA5IG0gIDExNzggLTI0MyAxMjA1IC0yNjAgMTIzMyAtMjYwIGN0IDEyNTkgLTI2MCAxMjgxIC0yNDkgMTMwMCAtMjI3IGN0IAorMTMxOSAtMjA1IDEzMjkgLTE3NSAxMzI5IC0xMzYgY3QgMTMyOSAtOTIgMTMxNCAtNTYgMTI4NCAtMjggY3QgMTI1OSAtNSAxMjMwIDcgMTE5OSA3IGN0IAorMTE4NCA3IDExNzAgNCAxMTU0IC0xIGN0IDExMzkgLTYgMTEyNCAtMTQgMTEwOCAtMjUgY3QgMTEwOCAtMjUgMTEwOCAtMjUgMTEwOCAtMjg2IGN0IAorMTEwOCAtMzE0IDExMDcgLTMzMiAxMTA2IC0zMzggY3QgMTEwNSAtMzQ1IDExMDIgLTM0OSAxMDk5IC0zNTIgY3QgMTA5NiAtMzU0IDEwOTMgLTM1NSAxMDg4IC0zNTUgY3QgCisxMDgzIC0zNTUgMTA3NyAtMzU0IDEwNjkgLTM1MSBjdCAxMDY5IC0zNTEgMTA2OSAtMzUxIDEwNjUgLTM2MSBjdCAxMDY1IC0zNjEgMTA2NSAtMzYxIDExNDEgLTM5MiBjdCAKKzExNDEgLTM5MiAxMTQxIC0zOTIgMTE1NCAtMzkyIGN0IDExNTQgLTM5MiAxMTU0IC0zOTIgMTE1NCAtMjA5IGN0IHAKKzExNTQgLTE5MiBtICAxMTU0IC0xOTIgMTE1NCAtMTkyIDExNTQgLTQxIGN0IDExNjMgLTMyIDExNzMgLTI1IDExODMgLTIwIGN0IDExOTMgLTE1IDEyMDMgLTEzIDEyMTMgLTEzIGN0IAorMTIzMCAtMTMgMTI0NSAtMjIgMTI2MCAtNDEgY3QgMTI3NCAtNTkgMTI4MSAtODYgMTI4MSAtMTIxIGN0IDEyODEgLTE1MyAxMjc0IC0xNzggMTI2MCAtMTk1IGN0IAorMTI0NSAtMjEyIDEyMjkgLTIyMSAxMjExIC0yMjEgY3QgMTIwMSAtMjIxIDExOTIgLTIxOSAxMTgyIC0yMTQgY3QgMTE3NSAtMjEwIDExNjUgLTIwMyAxMTU0IC0xOTIgY3QgCitwIGVmCisxNDkyIC0yNjAgbSAgMTUzMCAtMjYwIDE1NjEgLTI0NiAxNTg0IC0yMTcgY3QgMTYwMyAtMTkyIDE2MTMgLTE2MyAxNjEzIC0xMzEgY3QgCisxNjEzIC0xMDkgMTYwOCAtODYgMTU5NyAtNjMgY3QgMTU4NiAtNDAgMTU3MSAtMjIgMTU1MiAtMTEgY3QgMTUzMyAxIDE1MTIgNyAxNDg5IDcgY3QgCisxNDUxIDcgMTQyMSAtOCAxMzk4IC0zOCBjdCAxMzc5IC02NCAxMzcwIC05MiAxMzcwIC0xMjQgY3QgMTM3MCAtMTQ3IDEzNzYgLTE3MCAxMzg3IC0xOTMgY3QgCisxMzk5IC0yMTYgMTQxNCAtMjMzIDE0MzIgLTI0NCBjdCAxNDUxIC0yNTUgMTQ3MSAtMjYwIDE0OTIgLTI2MCBjdCBwCisxNDgzIC0yNDIgbSAgMTQ3NCAtMjQyIDE0NjQgLTIzOSAxNDU0IC0yMzMgY3QgMTQ0NCAtMjI4IDE0MzYgLTIxOCAxNDMwIC0yMDMgY3QgCisxNDI0IC0xODkgMTQyMSAtMTcwIDE0MjEgLTE0NyBjdCAxNDIxIC0xMTEgMTQyOCAtNzkgMTQ0MyAtNTMgY3QgMTQ1OCAtMjYgMTQ3NyAtMTMgMTUwMSAtMTMgY3QgCisxNTE4IC0xMyAxNTMzIC0yMCAxNTQ1IC0zNSBjdCAxNTU2IC01MCAxNTYyIC03NSAxNTYyIC0xMTAgY3QgMTU2MiAtMTU1IDE1NTIgLTE5MCAxNTMzIC0yMTYgY3QgCisxNTIwIC0yMzMgMTUwMyAtMjQyIDE0ODMgLTI0MiBjdCBwIGVmCisxNzc2IC0yNjAgbSAgMTgxNCAtMjYwIDE4NDUgLTI0NiAxODY4IC0yMTcgY3QgMTg4NyAtMTkyIDE4OTcgLTE2MyAxODk3IC0xMzEgY3QgCisxODk3IC0xMDkgMTg5MiAtODYgMTg4MSAtNjMgY3QgMTg3MCAtNDAgMTg1NSAtMjIgMTgzNiAtMTEgY3QgMTgxNyAxIDE3OTYgNyAxNzczIDcgY3QgCisxNzM1IDcgMTcwNSAtOCAxNjgyIC0zOCBjdCAxNjYzIC02NCAxNjU0IC05MiAxNjU0IC0xMjQgY3QgMTY1NCAtMTQ3IDE2NjAgLTE3MCAxNjcxIC0xOTMgY3QgCisxNjgzIC0yMTYgMTY5OCAtMjMzIDE3MTYgLTI0NCBjdCAxNzM1IC0yNTUgMTc1NSAtMjYwIDE3NzYgLTI2MCBjdCBwCisxNzY3IC0yNDIgbSAgMTc1OCAtMjQyIDE3NDggLTIzOSAxNzM4IC0yMzMgY3QgMTcyOCAtMjI4IDE3MjAgLTIxOCAxNzE0IC0yMDMgY3QgCisxNzA4IC0xODkgMTcwNSAtMTcwIDE3MDUgLTE0NyBjdCAxNzA1IC0xMTEgMTcxMiAtNzkgMTcyNyAtNTMgY3QgMTc0MiAtMjYgMTc2MSAtMTMgMTc4NSAtMTMgY3QgCisxODAyIC0xMyAxODE3IC0yMCAxODI5IC0zNSBjdCAxODQwIC01MCAxODQ2IC03NSAxODQ2IC0xMTAgY3QgMTg0NiAtMTU1IDE4MzYgLTE5MCAxODE3IC0yMTYgY3QgCisxODA0IC0yMzMgMTc4NyAtMjQyIDE3NjcgLTI0MiBjdCBwIGVmCisyMDExIC0zOTIgbSAgMjAxMSAtMzkyIDIwMTEgLTM5MiAyMDExIC0xNDEgY3QgMjAxMSAtMTQxIDIwMTEgLTE0MSAyMDc0IC0yMDAgY3QgCisyMDg4IC0yMTIgMjA5NiAtMjIwIDIwOTggLTIyMyBjdCAyMTAwIC0yMjUgMjEwMCAtMjI3IDIxMDAgLTIyOSBjdCAyMTAwIC0yMzMgMjA5OSAtMjM2IDIwOTYgLTIzOSBjdCAKKzIwOTMgLTI0MSAyMDg4IC0yNDMgMjA4MSAtMjQzIGN0IDIwODEgLTI0MyAyMDgxIC0yNDMgMjA4MSAtMjUzIGN0IDIwODEgLTI1MyAyMDgxIC0yNTMgMjE5MCAtMjUzIGN0IAorMjE5MCAtMjUzIDIxOTAgLTI1MyAyMTkwIC0yNDQgY3QgMjE3NSAtMjQ0IDIxNjMgLTI0MSAyMTUzIC0yMzcgY3QgMjE0MyAtMjMzIDIxMzIgLTIyNSAyMTIwIC0yMTQgY3QgCisyMTIwIC0yMTQgMjEyMCAtMjE0IDIwNTYgLTE1NSBjdCAyMDU2IC0xNTUgMjA1NiAtMTU1IDIxMjAgLTcyIGN0IDIxMzggLTUwIDIxNTAgLTM1IDIxNTUgLTI5IGN0IAorMjE2NCAtMjEgMjE3MiAtMTUgMjE3OSAtMTMgY3QgMjE4MyAtMTEgMjE5MiAtMTAgMjIwMyAtMTAgY3QgMjIwMyAtMTAgMjIwMyAtMTAgMjIwMyAwIGN0IAorMjIwMyAwIDIyMDMgMCAyMDgxIDAgY3QgMjA4MSAwIDIwODEgMCAyMDgxIC0xMCBjdCAyMDg4IC0xMCAyMDkyIC0xMSAyMDk1IC0xMyBjdCAKKzIwOTcgLTE1IDIwOTkgLTE4IDIwOTkgLTIxIGN0IDIwOTkgLTI2IDIwOTUgLTMyIDIwODggLTQyIGN0IDIwODggLTQyIDIwODggLTQyIDIwMTEgLTE0MSBjdCAKKzIwMTEgLTE0MSAyMDExIC0xNDEgMjAxMSAtNTcgY3QgMjAxMSAtNDEgMjAxMiAtMzAgMjAxNCAtMjUgY3QgMjAxNyAtMTkgMjAyMCAtMTYgMjAyNCAtMTQgY3QgCisyMDI5IC0xMSAyMDM4IC0xMCAyMDUyIC0xMCBjdCAyMDUyIC0xMCAyMDUyIC0xMCAyMDUyIDAgY3QgMjA1MiAwIDIwNTIgMCAxOTI0IDAgY3QgCisxOTI0IDAgMTkyNCAwIDE5MjQgLTEwIGN0IDE5MzcgLTEwIDE5NDYgLTEyIDE5NTIgLTE1IGN0IDE5NTYgLTE3IDE5NTkgLTIwIDE5NjEgLTI0IGN0IAorMTk2NCAtMzAgMTk2NSAtNDAgMTk2NSAtNTUgY3QgMTk2NSAtNTUgMTk2NSAtNTUgMTk2NSAtMjg2IGN0IDE5NjUgLTMxNSAxOTY0IC0zMzIgMTk2MyAtMzM5IGN0IAorMTk2MiAtMzQ1IDE5NjAgLTM1MCAxOTU3IC0zNTIgY3QgMTk1NCAtMzU0IDE5NTAgLTM1NiAxOTQ2IC0zNTYgY3QgMTk0MiAtMzU2IDE5MzYgLTM1NCAxOTI5IC0zNTEgY3QgCisxOTI5IC0zNTEgMTkyOSAtMzUxIDE5MjQgLTM2MSBjdCAxOTI0IC0zNjEgMTkyNCAtMzYxIDE5OTggLTM5MiBjdCAxOTk4IC0zOTIgMTk5OCAtMzkyIDIwMTEgLTM5MiBjdCAKK3AgZWYKK3BvbQorZ3IKK2dyCis5MTM1IDIxNTg3IG0gIDk2OTggMjE0MDAgbCAgOTY5OCAyMTc3NSBsICA5MTM1IDIxNTg3IGwgIHAgZWYKKzEwNjM1IDIxNjEwIG0gIDk4ODUgMjE2MTAgbCAgOTg4NSAyMTU4NSBsICA5ODg1IDIxNTYwIGwgIDEwNjM1IDIxNTYwIGwgCisxMDYzNSAyMTU4NSBsICAxMDYzNSAyMTYxMCBsICBwIGVmCis5ODg1IDIxNTg1IG0gIDk4NjAgMjE1ODUgbCAgOTg2MCAyMTU4MSBsICA5ODYyIDIxNTc2IGwgIDk4NjMgMjE1NzMgbCAgOTg2NiAyMTU2OSBsIAorOTg2OSAyMTU2NiBsICA5ODcyIDIxNTYzIGwgIDk4NzYgMjE1NjIgbCAgOTg4MSAyMTU2MCBsICA5ODg1IDIxNTYwIGwgIDk4ODUgMjE1NjAgbCAKKzk4ODUgMjE1ODUgbCAgcCBlZgorOTkxMCAyMTU4NSBtICA5OTEwIDIxNTg3IGwgIDk4ODUgMjE1ODcgbCAgOTg2MCAyMTU4NyBsICA5ODYwIDIxNTg1IGwgIDk4ODUgMjE1ODUgbCAKKzk5MTAgMjE1ODUgbCAgcCBlZgorOTg4NSAyMTU4NyBtICA5OTEwIDIxNTg3IGwgIDk5MTAgMjE1OTEgbCAgOTkwOCAyMTU5NiBsICA5OTA3IDIxNTk5IGwgIDk5MDQgMjE2MDMgbCAKKzk5MDEgMjE2MDYgbCAgOTg5OCAyMTYwOSBsICA5ODk0IDIxNjEwIGwgIDk4ODkgMjE2MTIgbCAgOTg4NSAyMTYxMiBsICA5ODg1IDIxNjEyIGwgCis5ODg1IDIxNTg3IGwgIHAgZWYKKzk4ODUgMjE2MTIgbSAgOTU4NSAyMTYxMiBsICA5NTg1IDIxNTg3IGwgIDk1ODUgMjE1NjIgbCAgOTg4NSAyMTU2MiBsICA5ODg1IDIxNTg3IGwgCis5ODg1IDIxNjEyIGwgIHAgZWYKKzQzODQgMjA4MzcgbSAgNDE5NyAyMDI3NSBsICA0NTcyIDIwMjc1IGwgIDQzODQgMjA4MzcgbCAgcCBlZgorNDQxMCAxOTY4OCBtICA0NDEwIDIwMjYzIGwgIDQzODUgMjAyNjMgbCAgNDM2MCAyMDI2MyBsICA0MzYwIDE5Njg4IGwgIDQzODUgMTk2ODggbCAKKzQ0MTAgMTk2ODggbCAgcCBlZgorNDM4NSAyMDI2MyBtICA0NDEwIDIwMjYzIGwgIDQ0MTAgMjAyNjcgbCAgNDQwOCAyMDI3MiBsICA0NDA3IDIwMjc1IGwgIDQ0MDQgMjAyNzkgbCAKKzQ0MDEgMjAyODIgbCAgNDM5OCAyMDI4NSBsICA0Mzk0IDIwMjg2IGwgIDQzODkgMjAyODggbCAgNDM4NSAyMDI4OCBsICA0Mzg1IDIwMjg4IGwgCis0Mzg1IDIwMjYzIGwgIHAgZWYKKzQzODUgMjAyODggbSAgNDM4NCAyMDI4OCBsICA0Mzg0IDIwMjYzIGwgIDQzODQgMjAyMzggbCAgNDM4NSAyMDIzOCBsICA0Mzg1IDIwMjYzIGwgCis0Mzg1IDIwMjg4IGwgIHAgZWYKKzQzODQgMjAyNjMgbSAgNDM1OSAyMDI2MyBsICA0MzU5IDIwMjU5IGwgIDQzNjEgMjAyNTQgbCAgNDM2MiAyMDI1MSBsICA0MzY1IDIwMjQ3IGwgCis0MzY4IDIwMjQ0IGwgIDQzNzEgMjAyNDEgbCAgNDM3NSAyMDI0MCBsICA0MzgwIDIwMjM4IGwgIDQzODQgMjAyMzggbCAgNDM4NCAyMDIzOCBsIAorNDM4NCAyMDI2MyBsICBwIGVmCis0NDA5IDIwMjYzIG0gIDQ0MDkgMjAzODcgbCAgNDM4NCAyMDM4NyBsICA0MzU5IDIwMzg3IGwgIDQzNTkgMjAyNjMgbCAgNDM4NCAyMDI2MyBsIAorNDQwOSAyMDI2MyBsICBwIGVmCitncworNzI3MCAxMzYxNyBtIDg5NjUgMTM2MTcgbCA4OTY1IDE0NDkyIGwgNzI3MCAxNDQ5MiBsIDcyNzAgMTM2MTcgbCBlb2NsaXAgbmV3cGF0aAorZ3MKK3RtIHNldG1hdHJpeAorNDg0MiAxMDU4MyB0IAorMSAxIHMgCitncworZ3MKKzAgMCBtIDE2OTUgMCBsIDE2OTUgODc1IGwgMCA4NzUgbCAwIDAgbCBlb2NsaXAgbmV3cGF0aAorZ3MKK3B1bQorMTA2IDc0MSB0Cis2NTAgOTMgbSAgNjUwIDkzIDY1MCA5MyA1NiA5MyBjdCA1NiA5MyA1NiA5MyA1NiA3NiBjdCA1NiA3NiA1NiA3NiAzNTkgLTMwMSBjdCAzNTkgLTMwMSAzNTkgLTMwMSA1NiAtNjcwIGN0IAorNTYgLTY3MCA1NiAtNjcwIDU2IC02ODcgY3QgNTYgLTY4NyA1NiAtNjg3IDYzNCAtNjg3IGN0IDYzNCAtNjg3IDYzNCAtNjg3IDY0NiAtNTM0IGN0IAorNjQ2IC01MzQgNjQ2IC01MzQgNjI3IC01MzQgY3QgNjIwIC02MTEgNTgyIC02NTAgNTE2IC02NTAgY3QgNTE2IC02NTAgNTE2IC02NTAgMTgxIC02NTAgY3QgCisxODEgLTY1MCAxODEgLTY1MCA0MzUgLTMzOSBjdCA0MzUgLTMzOSA0MzUgLTMzOSAxNTAgMTMgY3QgMTUwIDEzIDE1MCAxMyA1MjAgMTMgY3QgCis1OTUgMTMgNjQyIC0yNCA2NjEgLTk4IGN0IDY2MSAtOTggNjYxIC05OCA2NzkgLTk2IGN0IDY3OSAtOTYgNjc5IC05NiA2NTAgOTMgY3QgCitwIGVmCitwb20KK2dyCitncworcHVtCis5NTMgNjYxIHQKKzE2OCAxMzEgbSAgMTI3IDk4IDk2IDUwIDc1IC0xMiBjdCA1NiAtNjYgNDcgLTEyMyA0NyAtMTgzIGN0IDQ3IC0yNDEgNTYgLTI5OCA3NSAtMzU0IGN0IAorOTggLTQxOSAxMjggLTQ2NyAxNjggLTQ5NyBjdCAxNjggLTQ5NyAxNjggLTQ5NyAxNjggLTQ4MSBjdCAxMzkgLTQ1NCAxMTYgLTQwOCAxMDEgLTM0MiBjdCAKKzg5IC0yOTAgODMgLTIzNyA4MyAtMTgzIGN0IDgzIC0xMjkgODkgLTc2IDEwMSAtMjQgY3QgMTE2IDQzIDEzOSA4OSAxNjggMTE2IGN0IDE2OCAxMTYgMTY4IDExNiAxNjggMTMxIGN0IAorcCBlZgorcG9tCitncgorZ3MKK3B1bQorMTIxNyA2NjEgdAorMzMgMTE2IG0gIDYxIDkwIDgyIDQ2IDk3IC0xOCBjdCAxMTAgLTcwIDExNyAtMTIwIDExNyAtMTcwIGN0IDExNyAtMjI5IDExMSAtMjg0IDEwMCAtMzM1IGN0IAorODYgLTQwNCA2MyAtNDUzIDMzIC00ODEgY3QgMzMgLTQ4MSAzMyAtNDgxIDMzIC00OTcgY3QgNzIgLTQ2OCAxMDMgLTQyMSAxMjUgLTM1NCBjdCAKKzE0MyAtMjk5IDE1MyAtMjQxIDE1MyAtMTgzIGN0IDE1MyAtMTIzIDE0NCAtNjYgMTI1IC0xMSBjdCAxMDMgNTQgNzIgMTAyIDMzIDEzMSBjdCAKKzMzIDEzMSAzMyAxMzEgMzMgMTE2IGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzE0MDIgMzQ0IHQKKzE3NSAtNDggbSAgMTc1IC00OCAxNzUgLTQ4IDE1NyAwIGN0IDE1NyAwIDE1NyAwIDggMCBjdCA4IDAgOCAwIDggLTcgY3QgNTIgLTQ3IDgzIC03OSAxMDEgLTEwNSBjdCAKKzExOSAtMTMwIDEyOCAtMTUzIDEyOCAtMTc0IGN0IDEyOCAtMTkwIDEyMyAtMjA0IDExMyAtMjE0IGN0IDEwMyAtMjI1IDkxIC0yMzAgNzggLTIzMCBjdCAKKzY1IC0yMzAgNTQgLTIyNiA0NCAtMjE5IGN0IDM0IC0yMTIgMjcgLTIwMiAyMiAtMTg4IGN0IDIyIC0xODggMjIgLTE4OCAxNSAtMTg4IGN0IAorMTggLTIxMSAyNiAtMjI4IDM5IC0yNDAgY3QgNTIgLTI1MiA2OCAtMjU4IDg4IC0yNTggY3QgMTA4IC0yNTggMTI1IC0yNTEgMTM5IC0yMzggY3QgCisxNTMgLTIyNSAxNjAgLTIwOSAxNjAgLTE5MSBjdCAxNjAgLTE3OSAxNTcgLTE2NiAxNTEgLTE1MyBjdCAxNDIgLTEzMyAxMjcgLTExMiAxMDYgLTg5IGN0IAorNzUgLTU1IDU1IC0zNSA0OCAtMjggY3QgNDggLTI4IDQ4IC0yOCAxMTQgLTI4IGN0IDEyNyAtMjggMTM3IC0yOSAxNDIgLTI5IGN0IDE0NyAtMzAgMTUyIC0zMiAxNTcgLTM2IGN0IAorMTYxIC0zOSAxNjUgLTQzIDE2OCAtNDggY3QgMTY4IC00OCAxNjggLTQ4IDE3NSAtNDggY3QgcCBlZgorcG9tCitncgorZ3IKK2dyCitncgorZ3IKKzgwODUgMTQ3MzQgbSAgNzAzNSAxNDczNCBsICA3MDM1IDEzMzg1IGwgIDkxMzUgMTMzODUgbCAgOTEzNSAxNDczNCBsICA4MDg1IDE0NzM0IGwgCitwYworNzAzNSAxNDA2MCBtICA2NDczIDE0MjQ4IGwgIDY0NzMgMTM4NzMgbCAgNzAzNSAxNDA2MCBsICBwIGVmCis0NDA5IDEyNTM2IG0gIDQ0MDkgMTMwNDQgbCAgNDM1OSAxMzA0NCBsICA0MzU5IDEyNTM2IGwgIDQ0MDkgMTI1MzYgbCAgcCBlZgorNDQwOSAxMzU1MiBtICA0NDA5IDE0MDYwIGwgIDQzNTkgMTQwNjAgbCAgNDM1OSAxMzU1MiBsICA0NDA5IDEzNTUyIGwgIHAgZWYKKzQ4OTIgMTQwMzUgbSAgNTQwMCAxNDAzNSBsICA1NDAwIDE0MDg1IGwgIDQ4OTIgMTQwODUgbCAgNDg5MiAxNDAzNSBsICBwIGVmCis1OTA4IDE0MDM1IG0gIDY0MTYgMTQwMzUgbCAgNjQxNiAxNDA4NSBsICA1OTA4IDE0MDg1IGwgIDU5MDggMTQwMzUgbCAgcCBlZgorMTE2ODUgMTI2ODUgbSAgMTE4NzMgMTMyNDggbCAgMTE0OTggMTMyNDggbCAgMTE2ODUgMTI2ODUgbCAgcCBlZgorOTEzNSAxNDAzNSBtICA5NjQzIDE0MDM1IGwgIDk2NDMgMTQwODUgbCAgOTEzNSAxNDA4NSBsICA5MTM1IDE0MDM1IGwgIHAgZWYKKzEwMTUxIDE0MDM1IG0gIDEwNjU5IDE0MDM1IGwgIDEwNjU5IDE0MDg1IGwgIDEwMTUxIDE0MDg1IGwgIDEwMTUxIDE0MDM1IGwgCitwIGVmCisxMTE2NyAxNDAzNSBtICAxMTY3NSAxNDAzNSBsICAxMTY3NSAxNDA4NSBsICAxMTE2NyAxNDA4NSBsICAxMTE2NyAxNDAzNSBsIAorcCBlZgorMTE2NjAgMTM1NjIgbSAgMTE2NjAgMTMxMzUgbCAgMTE3MTAgMTMxMzUgbCAgMTE3MTAgMTM1NjIgbCAgMTE2NjAgMTM1NjIgbCAKK3AgZWYKKzE1NzM1IDEyNjg1IG0gIDE1OTIzIDEzMjQ4IGwgIDE1NTQ4IDEzMjQ4IGwgIDE1NzM1IDEyNjg1IGwgIHAgZWYKKzkxMzUgMTQwMzUgbSAgOTY0MyAxNDAzNSBsICA5NjQzIDE0MDg1IGwgIDkxMzUgMTQwODUgbCAgOTEzNSAxNDAzNSBsICBwIGVmCisxMDE1MSAxNDAzNSBtICAxMDY1OSAxNDAzNSBsICAxMDY1OSAxNDA4NSBsICAxMDE1MSAxNDA4NSBsICAxMDE1MSAxNDAzNSBsIAorcCBlZgorMTExNjcgMTQwMzUgbSAgMTE2NzUgMTQwMzUgbCAgMTE2NzUgMTQwODUgbCAgMTExNjcgMTQwODUgbCAgMTExNjcgMTQwMzUgbCAKK3AgZWYKKzEyMTgzIDE0MDM1IG0gIDEyNjkxIDE0MDM1IGwgIDEyNjkxIDE0MDg1IGwgIDEyMTgzIDE0MDg1IGwgIDEyMTgzIDE0MDM1IGwgCitwIGVmCisxMzE5OSAxNDAzNSBtICAxMzcwNyAxNDAzNSBsICAxMzcwNyAxNDA4NSBsICAxMzE5OSAxNDA4NSBsICAxMzE5OSAxNDAzNSBsIAorcCBlZgorMTQyMTUgMTQwMzUgbSAgMTQ3MjMgMTQwMzUgbCAgMTQ3MjMgMTQwODUgbCAgMTQyMTUgMTQwODUgbCAgMTQyMTUgMTQwMzUgbCAKK3AgZWYKKzE1MjMxIDE0MDM1IG0gIDE1NzM1IDE0MDM1IGwgIDE1NzM1IDE0MDYwIGwgIDE1NzM1IDE0MDg1IGwgIDE1MjMxIDE0MDg1IGwgCisxNTIzMSAxNDA2MCBsICAxNTIzMSAxNDAzNSBsICBwIGVmCisxNTczNSAxNDA2MCBtICAxNTc2MCAxNDA2MCBsICAxNTc2MCAxNDA2NCBsICAxNTc1OCAxNDA2OSBsICAxNTc1NyAxNDA3MiBsIAorMTU3NTQgMTQwNzYgbCAgMTU3NTEgMTQwNzkgbCAgMTU3NDggMTQwODIgbCAgMTU3NDQgMTQwODMgbCAgMTU3MzkgMTQwODUgbCAKKzE1NzM1IDE0MDg1IGwgIDE1NzM1IDE0MDg1IGwgIDE1NzM1IDE0MDYwIGwgIHAgZWYKKzE1NzEwIDE0MDYwIG0gIDE1NzEwIDE0MDU2IGwgIDE1NzM1IDE0MDU2IGwgIDE1NzYwIDE0MDU2IGwgIDE1NzYwIDE0MDYwIGwgCisxNTczNSAxNDA2MCBsICAxNTcxMCAxNDA2MCBsICBwIGVmCisxNTcxMCAxMzU0OCBtICAxNTcxMCAxMzEzNSBsICAxNTc2MCAxMzEzNSBsICAxNTc2MCAxMzU0OCBsICAxNTcxMCAxMzU0OCBsIAorcCBlZgorZ3MKKzcyNzAgMjM3MTggbSA4OTY1IDIzNzE4IGwgODk2NSAyNDU5MyBsIDcyNzAgMjQ1OTMgbCA3MjcwIDIzNzE4IGwgZW9jbGlwIG5ld3BhdGgKK2dzCit0bSBzZXRtYXRyaXgKKzQ4NDIgMjA2OTAgdCAKKzEgMSBzIAorZ3MKK2dzCiswIDAgbSAxNjk1IDAgbCAxNjk1IDg3NSBsIDAgODc1IGwgMCAwIGwgZW9jbGlwIG5ld3BhdGgKK2dzCitwdW0KKzEwNiA3NDEgdAorNjUwIDkzIG0gIDY1MCA5MyA2NTAgOTMgNTYgOTMgY3QgNTYgOTMgNTYgOTMgNTYgNzYgY3QgNTYgNzYgNTYgNzYgMzU5IC0zMDEgY3QgMzU5IC0zMDEgMzU5IC0zMDEgNTYgLTY3MCBjdCAKKzU2IC02NzAgNTYgLTY3MCA1NiAtNjg3IGN0IDU2IC02ODcgNTYgLTY4NyA2MzQgLTY4NyBjdCA2MzQgLTY4NyA2MzQgLTY4NyA2NDYgLTUzNCBjdCAKKzY0NiAtNTM0IDY0NiAtNTM0IDYyNyAtNTM0IGN0IDYyMCAtNjExIDU4MiAtNjUwIDUxNiAtNjUwIGN0IDUxNiAtNjUwIDUxNiAtNjUwIDE4MSAtNjUwIGN0IAorMTgxIC02NTAgMTgxIC02NTAgNDM1IC0zMzkgY3QgNDM1IC0zMzkgNDM1IC0zMzkgMTUwIDEzIGN0IDE1MCAxMyAxNTAgMTMgNTIwIDEzIGN0IAorNTk1IDEzIDY0MiAtMjQgNjYxIC05OCBjdCA2NjEgLTk4IDY2MSAtOTggNjc5IC05NiBjdCA2NzkgLTk2IDY3OSAtOTYgNjUwIDkzIGN0IAorcCBlZgorcG9tCitncgorZ3MKK3B1bQorOTUzIDY2MSB0CisxNjggMTMxIG0gIDEyNyA5OCA5NiA1MCA3NSAtMTIgY3QgNTYgLTY2IDQ3IC0xMjMgNDcgLTE4MyBjdCA0NyAtMjQxIDU2IC0yOTggNzUgLTM1NCBjdCAKKzk4IC00MTkgMTI4IC00NjcgMTY4IC00OTcgY3QgMTY4IC00OTcgMTY4IC00OTcgMTY4IC00ODEgY3QgMTM5IC00NTQgMTE2IC00MDggMTAxIC0zNDIgY3QgCis4OSAtMjkwIDgzIC0yMzcgODMgLTE4MyBjdCA4MyAtMTI5IDg5IC03NiAxMDEgLTI0IGN0IDExNiA0MyAxMzkgODkgMTY4IDExNiBjdCAxNjggMTE2IDE2OCAxMTYgMTY4IDEzMSBjdCAKK3AgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzEyMTcgNjYxIHQKKzMzIDExNiBtICA2MSA5MCA4MiA0NiA5NyAtMTggY3QgMTEwIC03MCAxMTcgLTEyMCAxMTcgLTE3MCBjdCAxMTcgLTIyOSAxMTEgLTI4NCAxMDAgLTMzNSBjdCAKKzg2IC00MDQgNjMgLTQ1MyAzMyAtNDgxIGN0IDMzIC00ODEgMzMgLTQ4MSAzMyAtNDk3IGN0IDcyIC00NjggMTAzIC00MjEgMTI1IC0zNTQgY3QgCisxNDMgLTI5OSAxNTMgLTI0MSAxNTMgLTE4MyBjdCAxNTMgLTEyMyAxNDQgLTY2IDEyNSAtMTEgY3QgMTAzIDU0IDcyIDEwMiAzMyAxMzEgY3QgCiszMyAxMzEgMzMgMTMxIDMzIDExNiBjdCBwIGVmCitwb20KK2dyCitncworcHVtCisxNDAyIDM0NCB0CisxNzUgLTQ4IG0gIDE3NSAtNDggMTc1IC00OCAxNTcgMCBjdCAxNTcgMCAxNTcgMCA4IDAgY3QgOCAwIDggMCA4IC03IGN0IDUyIC00NyA4MyAtNzkgMTAxIC0xMDUgY3QgCisxMTkgLTEzMCAxMjggLTE1MyAxMjggLTE3NCBjdCAxMjggLTE5MCAxMjMgLTIwNCAxMTMgLTIxNCBjdCAxMDMgLTIyNSA5MSAtMjMwIDc4IC0yMzAgY3QgCis2NSAtMjMwIDU0IC0yMjYgNDQgLTIxOSBjdCAzNCAtMjEyIDI3IC0yMDIgMjIgLTE4OCBjdCAyMiAtMTg4IDIyIC0xODggMTUgLTE4OCBjdCAKKzE4IC0yMTEgMjYgLTIyOCAzOSAtMjQwIGN0IDUyIC0yNTIgNjggLTI1OCA4OCAtMjU4IGN0IDEwOCAtMjU4IDEyNSAtMjUxIDEzOSAtMjM4IGN0IAorMTUzIC0yMjUgMTYwIC0yMDkgMTYwIC0xOTEgY3QgMTYwIC0xNzkgMTU3IC0xNjYgMTUxIC0xNTMgY3QgMTQyIC0xMzMgMTI3IC0xMTIgMTA2IC04OSBjdCAKKzc1IC01NSA1NSAtMzUgNDggLTI4IGN0IDQ4IC0yOCA0OCAtMjggMTE0IC0yOCBjdCAxMjcgLTI4IDEzNyAtMjkgMTQyIC0yOSBjdCAxNDcgLTMwIDE1MiAtMzIgMTU3IC0zNiBjdCAKKzE2MSAtMzkgMTY1IC00MyAxNjggLTQ4IGN0IDE2OCAtNDggMTY4IC00OCAxNzUgLTQ4IGN0IHAgZWYKK3BvbQorZ3IKK2dyCitncgorZ3IKK2dyCis4MDg1IDI0ODM1IG0gIDcwMzUgMjQ4MzUgbCAgNzAzNSAyMzQ4NiBsICA5MTM1IDIzNDg2IGwgIDkxMzUgMjQ4MzUgbCAgODA4NSAyNDgzNSBsIAorcGMKKzcwMzUgMjQxNjEgbSAgNjQ3MyAyNDM0OSBsICA2NDczIDIzOTc0IGwgIDcwMzUgMjQxNjEgbCAgcCBlZgorNDQwOSAyMjMzNyBtICA0NDA5IDIyODQ1IGwgIDQzNTkgMjI4NDUgbCAgNDM1OSAyMjMzNyBsICA0NDA5IDIyMzM3IGwgIHAgZWYKKzQ0MDkgMjMzNTMgbSAgNDQwOSAyMzg2MSBsICA0MzU5IDIzODYxIGwgIDQzNTkgMjMzNTMgbCAgNDQwOSAyMzM1MyBsICBwIGVmCis0NTkyIDI0MTM2IG0gIDUxMDAgMjQxMzYgbCAgNTEwMCAyNDE4NiBsICA0NTkyIDI0MTg2IGwgIDQ1OTIgMjQxMzYgbCAgcCBlZgorNTYwOCAyNDEzNiBtICA2MTE2IDI0MTM2IGwgIDYxMTYgMjQxODYgbCAgNTYwOCAyNDE4NiBsICA1NjA4IDI0MTM2IGwgIHAgZWYKKzEyMTM1IDIyNDg1IG0gIDEyMzIzIDIzMDQ4IGwgIDExOTQ4IDIzMDQ4IGwgIDEyMTM1IDIyNDg1IGwgIHAgZWYKKzkxMzUgMjQxMzYgbSAgOTY0MyAyNDEzNiBsICA5NjQzIDI0MTg2IGwgIDkxMzUgMjQxODYgbCAgOTEzNSAyNDEzNiBsICBwIGVmCisxMDE1MSAyNDEzNiBtICAxMDY1OSAyNDEzNiBsICAxMDY1OSAyNDE4NiBsICAxMDE1MSAyNDE4NiBsICAxMDE1MSAyNDEzNiBsIAorcCBlZgorMTExNjcgMjQxMzYgbSAgMTE2NzUgMjQxMzYgbCAgMTE2NzUgMjQxODYgbCAgMTExNjcgMjQxODYgbCAgMTExNjcgMjQxMzYgbCAKK3AgZWYKKzEyMTEwIDI0MTEzIG0gIDEyMTEwIDIzNjA1IGwgIDEyMTYwIDIzNjA1IGwgIDEyMTYwIDI0MTEzIGwgIDEyMTEwIDI0MTEzIGwgCitwIGVmCisxMjExMCAyMzA5NyBtICAxMjExMCAyMjkzNSBsICAxMjE2MCAyMjkzNSBsICAxMjE2MCAyMzA5NyBsICAxMjExMCAyMzA5NyBsIAorcCBlZgorZ3MKK2dzCitwdW0KKzExMDg3IDE0NjUyIHQKKzAgLTIyOCBtICAwIC0yMjggMCAtMjI4IDc4IC0yNTkgY3QgNzggLTI1OSA3OCAtMjU5IDg5IC0yNTkgY3QgODkgLTI1OSA4OSAtMjU5IDg5IC0yMDEgY3QgCisxMDIgLTIyMyAxMTUgLTIzOCAxMjggLTI0NyBjdCAxNDEgLTI1NiAxNTUgLTI2MCAxNjkgLTI2MCBjdCAxOTQgLTI2MCAyMTUgLTI1MCAyMzIgLTIzMCBjdCAKKzI1MyAtMjA2IDI2MyAtMTc1IDI2MyAtMTM2IGN0IDI2MyAtOTIgMjUxIC01NiAyMjYgLTI4IGN0IDIwNSAtNSAxODAgNyAxNDkgNyBjdCAKKzEzNSA3IDEyMyA1IDExNCAxIGN0IDEwNiAtMiA5OCAtNyA4OSAtMTYgY3QgODkgLTE2IDg5IC0xNiA4OSA2MyBjdCA4OSA4MCA5MCA5MSA5MiA5NiBjdCAKKzk0IDEwMCA5OCAxMDQgMTAzIDEwNyBjdCAxMDkgMTEwIDExOCAxMTEgMTMyIDExMSBjdCAxMzIgMTExIDEzMiAxMTEgMTMyIDEyMSBjdCAKKzEzMiAxMjEgMTMyIDEyMSAtMyAxMjEgY3QgLTMgMTIxIC0zIDEyMSAtMyAxMTEgY3QgLTMgMTExIC0zIDExMSA0IDExMSBjdCAxNCAxMTEgMjMgMTA5IDMxIDEwNSBjdCAKKzM0IDEwMyAzNyAxMDAgMzkgOTUgY3QgNDEgOTEgNDIgNzkgNDIgNjEgY3QgNDIgNjEgNDIgNjEgNDIgLTE3OSBjdCA0MiAtMTk1IDQxIC0yMDUgNDAgLTIwOSBjdCAKKzM4IC0yMTMgMzYgLTIxNiAzMyAtMjE5IGN0IDMwIC0yMjEgMjUgLTIyMiAyMCAtMjIyIGN0IDE2IC0yMjIgMTAgLTIyMSAzIC0yMTggY3QgCiszIC0yMTggMyAtMjE4IDAgLTIyOCBjdCBwCis4OSAtMTg1IG0gIDg5IC0xODUgODkgLTE4NSA4OSAtOTAgY3QgODkgLTcwIDkwIC01NyA5MSAtNTAgY3QgOTQgLTQwIDEwMCAtMzAgMTEwIC0yMiBjdCAKKzEyMCAtMTQgMTMzIC0xMCAxNDggLTEwIGN0IDE2NiAtMTAgMTgxIC0xNyAxOTIgLTMxIGN0IDIwNyAtNTAgMjE0IC03NyAyMTQgLTExMSBjdCAKKzIxNCAtMTQ5IDIwNiAtMTc5IDE4OSAtMjAwIGN0IDE3NyAtMjE0IDE2MyAtMjIxIDE0NyAtMjIxIGN0IDEzOSAtMjIxIDEzMCAtMjE5IDEyMSAtMjE0IGN0IAorMTE1IC0yMTEgMTA0IC0yMDEgODkgLTE4NSBjdCBwIGVmCiszNjYgLTM5MiBtICAzNzQgLTM5MiAzODAgLTM4OSAzODYgLTM4NCBjdCAzOTEgLTM3OCAzOTQgLTM3MiAzOTQgLTM2NCBjdCAzOTQgLTM1NiAzOTEgLTM1MCAzODYgLTM0NCBjdCAKKzM4MCAtMzM5IDM3NCAtMzM2IDM2NiAtMzM2IGN0IDM1OCAtMzM2IDM1MiAtMzM5IDM0NiAtMzQ0IGN0IDM0MSAtMzUwIDMzOCAtMzU2IDMzOCAtMzY0IGN0IAorMzM4IC0zNzIgMzQxIC0zNzggMzQ2IC0zODQgY3QgMzUyIC0zODkgMzU4IC0zOTIgMzY2IC0zOTIgY3QgcAorMzg5IC0yNjAgbSAgMzg5IC0yNjAgMzg5IC0yNjAgMzg5IC01NyBjdCAzODkgLTQxIDM5MCAtMzEgMzkyIC0yNiBjdCAzOTUgLTIwIDM5OCAtMTYgNDAyIC0xNCBjdCAKKzQwNyAtMTEgNDE0IC0xMCA0MjYgLTEwIGN0IDQyNiAtMTAgNDI2IC0xMCA0MjYgMCBjdCA0MjYgMCA0MjYgMCAzMDYgMCBjdCAzMDYgMCAzMDYgMCAzMDYgLTEwIGN0IAorMzE4IC0xMCAzMjYgLTExIDMzMCAtMTQgY3QgMzM0IC0xNiAzMzcgLTIwIDMzOSAtMjUgY3QgMzQyIC0zMSAzNDMgLTQxIDM0MyAtNTcgY3QgCiszNDMgLTU3IDM0MyAtNTcgMzQzIC0xNTQgY3QgMzQzIC0xODEgMzQyIC0xOTkgMzQxIC0yMDcgY3QgMzM5IC0yMTMgMzM3IC0yMTcgMzM1IC0yMjAgY3QgCiszMzIgLTIyMiAzMjggLTIyMyAzMjMgLTIyMyBjdCAzMTggLTIyMyAzMTIgLTIyMiAzMDUgLTIxOSBjdCAzMDUgLTIxOSAzMDUgLTIxOSAzMDEgLTIyOSBjdCAKKzMwMSAtMjI5IDMwMSAtMjI5IDM3NyAtMjYwIGN0IDM3NyAtMjYwIDM3NyAtMjYwIDM4OSAtMjYwIGN0IHAgZWYKKzUzMSAtMzM3IG0gIDUzMSAtMzM3IDUzMSAtMzM3IDUzMSAtMjUzIGN0IDUzMSAtMjUzIDUzMSAtMjUzIDU5MCAtMjUzIGN0IDU5MCAtMjUzIDU5MCAtMjUzIDU5MCAtMjM0IGN0IAorNTkwIC0yMzQgNTkwIC0yMzQgNTMxIC0yMzQgY3QgNTMxIC0yMzQgNTMxIC0yMzQgNTMxIC03MCBjdCA1MzEgLTUzIDUzMyAtNDIgNTM4IC0zNyBjdCAKKzU0MyAtMzEgNTQ5IC0yOCA1NTYgLTI4IGN0IDU2MiAtMjggNTY4IC0zMCA1NzQgLTM0IGN0IDU3OSAtMzcgNTg0IC00MyA1ODcgLTUwIGN0IAorNTg3IC01MCA1ODcgLTUwIDU5OCAtNTAgY3QgNTkyIC0zMiA1ODIgLTE5IDU3MSAtMTAgY3QgNTU5IC0xIDU0NiA0IDUzNCA0IGN0IDUyNSA0IDUxNyAyIDUwOSAtMyBjdCAKKzUwMSAtOCA0OTUgLTE0IDQ5MSAtMjMgY3QgNDg3IC0zMiA0ODUgLTQ1IDQ4NSAtNjQgY3QgNDg1IC02NCA0ODUgLTY0IDQ4NSAtMjM0IGN0IAorNDg1IC0yMzQgNDg1IC0yMzQgNDQ1IC0yMzQgY3QgNDQ1IC0yMzQgNDQ1IC0yMzQgNDQ1IC0yNDMgY3QgNDU1IC0yNDcgNDY1IC0yNTQgNDc2IC0yNjQgY3QgCis0ODcgLTI3MyA0OTYgLTI4NSA1MDQgLTI5OCBjdCA1MDkgLTMwNSA1MTQgLTMxOCA1MjIgLTMzNyBjdCA1MjIgLTMzNyA1MjIgLTMzNyA1MzEgLTMzNyBjdCAKK3AgZWYKKzgzMCAtOTUgbSAgODIzIC02MiA4MTAgLTM3IDc5MCAtMTkgY3QgNzcwIC0yIDc0OCA3IDcyNCA3IGN0IDY5NSA3IDY3MCAtNSA2NDkgLTI5IGN0IAorNjI4IC01MyA2MTcgLTg1IDYxNyAtMTI2IGN0IDYxNyAtMTY2IDYyOSAtMTk4IDY1MiAtMjIzIGN0IDY3NiAtMjQ4IDcwNSAtMjYwIDczOCAtMjYwIGN0IAorNzYzIC0yNjAgNzgzIC0yNTMgNzk5IC0yNDAgY3QgODE1IC0yMjcgODIzIC0yMTQgODIzIC0xOTkgY3QgODIzIC0xOTIgODIxIC0xODcgODE2IC0xODIgY3QgCis4MTIgLTE3OCA4MDUgLTE3NiA3OTcgLTE3NiBjdCA3ODcgLTE3NiA3NzkgLTE4MCA3NzMgLTE4NyBjdCA3NzAgLTE5MCA3NjggLTE5OCA3NjcgLTIwOSBjdCAKKzc2NiAtMjIwIDc2MiAtMjI4IDc1NSAtMjM0IGN0IDc0OSAtMjM5IDc0MCAtMjQyIDcyOSAtMjQyIGN0IDcxMCAtMjQyIDY5NiAtMjM1IDY4NCAtMjIyIGN0IAorNjY5IC0yMDQgNjYyIC0xODAgNjYyIC0xNTAgY3QgNjYyIC0xMjAgNjY5IC05NCA2ODQgLTcxIGN0IDY5OSAtNDggNzE5IC0zNiA3NDQgLTM2IGN0IAorNzYyIC0zNiA3NzggLTQyIDc5MyAtNTQgY3QgODAzIC02MiA4MTIgLTc3IDgyMiAtOTkgY3QgODIyIC05OSA4MjIgLTk5IDgzMCAtOTUgY3QgCitwIGVmCis5MzkgLTM5MiBtICA5MzkgLTM5MiA5MzkgLTM5MiA5MzkgLTIwOCBjdCA5NTkgLTIzMCA5NzUgLTI0NCA5ODcgLTI1MSBjdCA5OTkgLTI1NyAxMDExIC0yNjAgMTAyMyAtMjYwIGN0IAorMTAzNyAtMjYwIDEwNTAgLTI1NiAxMDYwIC0yNDggY3QgMTA3MCAtMjQwIDEwNzggLTIyOCAxMDgzIC0yMTEgY3QgMTA4NiAtMTk5IDEwODggLTE3OCAxMDg4IC0xNDYgY3QgCisxMDg4IC0xNDYgMTA4OCAtMTQ2IDEwODggLTU3IGN0IDEwODggLTQxIDEwODkgLTMwIDEwOTIgLTI0IGN0IDEwOTQgLTIwIDEwOTcgLTE2IDExMDEgLTE0IGN0IAorMTEwNSAtMTEgMTExMyAtMTAgMTEyNSAtMTAgY3QgMTEyNSAtMTAgMTEyNSAtMTAgMTEyNSAwIGN0IDExMjUgMCAxMTI1IDAgMTAwMSAwIGN0IAorMTAwMSAwIDEwMDEgMCAxMDAxIC0xMCBjdCAxMDAxIC0xMCAxMDAxIC0xMCAxMDA3IC0xMCBjdCAxMDE5IC0xMCAxMDI3IC0xMiAxMDMxIC0xNSBjdCAKKzEwMzYgLTE5IDEwMzkgLTI0IDEwNDEgLTMxIGN0IDEwNDIgLTM0IDEwNDIgLTQzIDEwNDIgLTU3IGN0IDEwNDIgLTU3IDEwNDIgLTU3IDEwNDIgLTE0NyBjdCAKKzEwNDIgLTE3NCAxMDQxIC0xOTIgMTAzOCAtMjAxIGN0IDEwMzUgLTIxMCAxMDMwIC0yMTYgMTAyNCAtMjIxIGN0IDEwMTggLTIyNSAxMDExIC0yMjcgMTAwMiAtMjI3IGN0IAorOTkzIC0yMjcgOTgzIC0yMjUgOTc0IC0yMjAgY3QgOTY0IC0yMTUgOTUzIC0yMDUgOTM5IC0xOTEgY3QgOTM5IC0xOTEgOTM5IC0xOTEgOTM5IC01NyBjdCAKKzkzOSAtNDAgOTQwIC0yOSA5NDIgLTI1IGN0IDk0NCAtMjEgOTQ3IC0xNyA5NTMgLTE0IGN0IDk1OCAtMTEgOTY3IC0xMCA5ODAgLTEwIGN0IAorOTgwIC0xMCA5ODAgLTEwIDk4MCAwIGN0IDk4MCAwIDk4MCAwIDg1NiAwIGN0IDg1NiAwIDg1NiAwIDg1NiAtMTAgY3QgODY3IC0xMCA4NzUgLTEyIDg4MSAtMTUgY3QgCis4ODUgLTE3IDg4OCAtMjEgODkwIC0yNiBjdCA4OTIgLTMxIDg5MyAtNDEgODkzIC01NyBjdCA4OTMgLTU3IDg5MyAtNTcgODkzIC0yODYgY3QgCis4OTMgLTMxNCA4OTIgLTMzMiA4OTEgLTMzOCBjdCA4OTAgLTM0NSA4ODggLTM0OSA4ODUgLTM1MiBjdCA4ODIgLTM1NCA4NzggLTM1NSA4NzMgLTM1NSBjdCAKKzg3MCAtMzU1IDg2MyAtMzU0IDg1NSAtMzUxIGN0IDg1NSAtMzUxIDg1NSAtMzUxIDg1MSAtMzYxIGN0IDg1MSAtMzYxIDg1MSAtMzYxIDkyNiAtMzkyIGN0IAorOTI2IC0zOTIgOTI2IC0zOTIgOTM5IC0zOTIgY3QgcCBlZgorMTUyOSAtMTI1IG0gIDE1MjkgLTEyNSAxNTI5IC0xMjUgMTM4NCAtMTI1IGN0IDEzODQgLTEyNSAxMzg0IC0xMjUgMTM1OCAtNjYgY3QgCisxMzUyIC01MiAxMzQ5IC00MSAxMzQ5IC0zMyBjdCAxMzQ5IC0yOCAxMzUxIC0yMyAxMzU3IC0xOCBjdCAxMzYyIC0xNCAxMzc0IC0xMSAxMzkyIC0xMCBjdCAKKzEzOTIgLTEwIDEzOTIgLTEwIDEzOTIgMCBjdCAxMzkyIDAgMTM5MiAwIDEyNzQgMCBjdCAxMjc0IDAgMTI3NCAwIDEyNzQgLTEwIGN0IDEyOTAgLTEzIDEzMDAgLTE2IDEzMDUgLTIxIGN0IAorMTMxNCAtMzAgMTMyNCAtNDggMTMzNiAtNzUgY3QgMTMzNiAtNzUgMTMzNiAtNzUgMTQ3MCAtMzgyIGN0IDE0NzAgLTM4MiAxNDcwIC0zODIgMTQ4MSAtMzgyIGN0IAorMTQ4MSAtMzgyIDE0ODEgLTM4MiAxNjA4IC03MSBjdCAxNjE4IC00NiAxNjI4IC0zMCAxNjM3IC0yMyBjdCAxNjQ1IC0xNSAxNjU3IC0xMSAxNjcyIC0xMCBjdCAKKzE2NzIgLTEwIDE2NzIgLTEwIDE2NzIgMCBjdCAxNjcyIDAgMTY3MiAwIDE1MjQgMCBjdCAxNTI0IDAgMTUyNCAwIDE1MjQgLTEwIGN0IDE1MzkgLTExIDE1NDkgLTEzIDE1NTQgLTE3IGN0IAorMTU1OSAtMjIgMTU2MiAtMjcgMTU2MiAtMzMgY3QgMTU2MiAtNDEgMTU1OCAtNTMgMTU1MSAtNzEgY3QgMTU1MSAtNzEgMTU1MSAtNzEgMTUyOSAtMTI1IGN0IAorcAorMTUyMCAtMTQ2IG0gIDE0NTkgLTI5NyBsICAxMzkzIC0xNDYgbCAgMTUyMCAtMTQ2IGwgIHAgZWYKKzE3NjMgLTIwOSBtICAxNzg3IC0yNDMgMTgxNCAtMjYwIDE4NDIgLTI2MCBjdCAxODY4IC0yNjAgMTg5MCAtMjQ5IDE5MDkgLTIyNyBjdCAKKzE5MjggLTIwNSAxOTM4IC0xNzUgMTkzOCAtMTM2IGN0IDE5MzggLTkyIDE5MjMgLTU2IDE4OTMgLTI4IGN0IDE4NjggLTUgMTgzOSA3IDE4MDggNyBjdCAKKzE3OTMgNyAxNzc5IDQgMTc2MyAtMSBjdCAxNzQ4IC02IDE3MzMgLTE0IDE3MTcgLTI1IGN0IDE3MTcgLTI1IDE3MTcgLTI1IDE3MTcgLTI4NiBjdCAKKzE3MTcgLTMxNCAxNzE2IC0zMzIgMTcxNSAtMzM4IGN0IDE3MTQgLTM0NSAxNzExIC0zNDkgMTcwOCAtMzUyIGN0IDE3MDUgLTM1NCAxNzAyIC0zNTUgMTY5NyAtMzU1IGN0IAorMTY5MiAtMzU1IDE2ODYgLTM1NCAxNjc4IC0zNTEgY3QgMTY3OCAtMzUxIDE2NzggLTM1MSAxNjc0IC0zNjEgY3QgMTY3NCAtMzYxIDE2NzQgLTM2MSAxNzUwIC0zOTIgY3QgCisxNzUwIC0zOTIgMTc1MCAtMzkyIDE3NjMgLTM5MiBjdCAxNzYzIC0zOTIgMTc2MyAtMzkyIDE3NjMgLTIwOSBjdCBwCisxNzYzIC0xOTIgbSAgMTc2MyAtMTkyIDE3NjMgLTE5MiAxNzYzIC00MSBjdCAxNzcyIC0zMiAxNzgyIC0yNSAxNzkyIC0yMCBjdCAxODAyIC0xNSAxODEyIC0xMyAxODIyIC0xMyBjdCAKKzE4MzkgLTEzIDE4NTQgLTIyIDE4NjkgLTQxIGN0IDE4ODMgLTU5IDE4OTAgLTg2IDE4OTAgLTEyMSBjdCAxODkwIC0xNTMgMTg4MyAtMTc4IDE4NjkgLTE5NSBjdCAKKzE4NTQgLTIxMiAxODM4IC0yMjEgMTgyMCAtMjIxIGN0IDE4MTAgLTIyMSAxODAxIC0yMTkgMTc5MSAtMjE0IGN0IDE3ODQgLTIxMCAxNzc0IC0yMDMgMTc2MyAtMTkyIGN0IAorcCBlZgorMjIxOSAtMzgyIG0gIDIyMTkgLTM4MiAyMjE5IC0zODIgMjIxOSAtMjU0IGN0IDIyMTkgLTI1NCAyMjE5IC0yNTQgMjIwOSAtMjU0IGN0IAorMjIwNiAtMjc5IDIyMDAgLTI5OCAyMTkxIC0zMTMgY3QgMjE4MyAtMzI3IDIxNzAgLTMzOSAyMTU1IC0zNDcgY3QgMjEzOSAtMzU2IDIxMjIgLTM2MCAyMTA1IC0zNjAgY3QgCisyMDg2IC0zNjAgMjA3MCAtMzU0IDIwNTggLTM0MyBjdCAyMDQ1IC0zMzEgMjAzOSAtMzE4IDIwMzkgLTMwMyBjdCAyMDM5IC0yOTEgMjA0MyAtMjgxIDIwNTEgLTI3MiBjdCAKKzIwNjIgLTI1OCAyMDkwIC0yMzkgMjEzMyAtMjE3IGN0IDIxNjggLTE5OCAyMTkxIC0xODMgMjIwNCAtMTczIGN0IDIyMTcgLTE2MyAyMjI3IC0xNTIgMjIzNCAtMTM4IGN0IAorMjI0MSAtMTI1IDIyNDQgLTExMCAyMjQ0IC05NiBjdCAyMjQ0IC02NyAyMjMzIC00MyAyMjExIC0yMyBjdCAyMTg5IC0yIDIxNjEgOCAyMTI2IDggY3QgCisyMTE1IDggMjEwNSA3IDIwOTUgNiBjdCAyMDkwIDUgMjA3OCAxIDIwNjAgLTQgY3QgMjA0MiAtMTAgMjAzMSAtMTMgMjAyNiAtMTMgY3QgCisyMDIxIC0xMyAyMDE4IC0xMiAyMDE1IC05IGN0IDIwMTIgLTYgMjAxMCAtMSAyMDA5IDggY3QgMjAwOSA4IDIwMDkgOCAxOTk5IDggY3QgCisxOTk5IDggMTk5OSA4IDE5OTkgLTEyMCBjdCAxOTk5IC0xMjAgMTk5OSAtMTIwIDIwMDkgLTEyMCBjdCAyMDE0IC05MyAyMDIwIC03MyAyMDI4IC02MCBjdCAKKzIwMzYgLTQ2IDIwNDkgLTM1IDIwNjYgLTI2IGN0IDIwODIgLTE3IDIxMDAgLTEzIDIxMjAgLTEzIGN0IDIxNDMgLTEzIDIxNjIgLTE5IDIxNzUgLTMxIGN0IAorMjE4OCAtNDMgMjE5NSAtNTggMjE5NSAtNzQgY3QgMjE5NSAtODMgMjE5MiAtOTMgMjE4NyAtMTAyIGN0IDIxODIgLTExMSAyMTc0IC0xMjAgMjE2NCAtMTI4IGN0IAorMjE1NyAtMTM0IDIxMzcgLTE0NSAyMTA1IC0xNjMgY3QgMjA3MyAtMTgxIDIwNTAgLTE5NSAyMDM2IC0yMDYgY3QgMjAyMyAtMjE3IDIwMTMgLTIyOSAyMDA2IC0yNDEgY3QgCisxOTk5IC0yNTQgMTk5NSAtMjY4IDE5OTUgLTI4NCBjdCAxOTk1IC0zMTEgMjAwNSAtMzM0IDIwMjYgLTM1MyBjdCAyMDQ3IC0zNzIgMjA3MyAtMzgyIDIxMDUgLTM4MiBjdCAKKzIxMjUgLTM4MiAyMTQ2IC0zNzcgMjE2OCAtMzY4IGN0IDIxNzggLTM2MyAyMTg2IC0zNjEgMjE5MCAtMzYxIGN0IDIxOTUgLTM2MSAyMTk5IC0zNjIgMjIwMiAtMzY1IGN0IAorMjIwNSAtMzY4IDIyMDcgLTM3NCAyMjA5IC0zODIgY3QgMjIwOSAtMzgyIDIyMDkgLTM4MiAyMjE5IC0zODIgY3QgcCBlZgorMjUxOCAtMzkyIG0gIDI1MTggLTM5MiAyNTE4IC0zOTIgMjUxOCAtNTcgY3QgMjUxOCAtNDEgMjUxOSAtMzEgMjUyMSAtMjYgY3QgMjUyNCAtMjEgMjUyNyAtMTcgMjUzMiAtMTQgY3QgCisyNTM3IC0xMSAyNTQ2IC0xMCAyNTU5IC0xMCBjdCAyNTU5IC0xMCAyNTU5IC0xMCAyNTU5IDAgY3QgMjU1OSAwIDI1NTkgMCAyNDM1IDAgY3QgCisyNDM1IDAgMjQzNSAwIDI0MzUgLTEwIGN0IDI0NDcgLTEwIDI0NTQgLTExIDI0NTkgLTE0IGN0IDI0NjMgLTE2IDI0NjYgLTIwIDI0NjggLTI1IGN0IAorMjQ3MSAtMzEgMjQ3MiAtNDEgMjQ3MiAtNTcgY3QgMjQ3MiAtNTcgMjQ3MiAtNTcgMjQ3MiAtMjg2IGN0IDI0NzIgLTMxNCAyNDcxIC0zMzIgMjQ3MCAtMzM4IGN0IAorMjQ2OSAtMzQ1IDI0NjcgLTM0OSAyNDY0IC0zNTIgY3QgMjQ2MSAtMzU0IDI0NTggLTM1NSAyNDUzIC0zNTUgY3QgMjQ0OSAtMzU1IDI0NDMgLTM1NCAyNDM2IC0zNTEgY3QgCisyNDM2IC0zNTEgMjQzNiAtMzUxIDI0MzEgLTM2MSBjdCAyNDMxIC0zNjEgMjQzMSAtMzYxIDI1MDYgLTM5MiBjdCAyNTA2IC0zOTIgMjUwNiAtMzkyIDI1MTggLTM5MiBjdCAKK3AgZWYKKzI3MTIgLTI2MCBtICAyNzUwIC0yNjAgMjc4MSAtMjQ2IDI4MDQgLTIxNyBjdCAyODIzIC0xOTIgMjgzMyAtMTYzIDI4MzMgLTEzMSBjdCAKKzI4MzMgLTEwOSAyODI4IC04NiAyODE3IC02MyBjdCAyODA2IC00MCAyNzkxIC0yMiAyNzcyIC0xMSBjdCAyNzUzIDEgMjczMiA3IDI3MDkgNyBjdCAKKzI2NzEgNyAyNjQxIC04IDI2MTggLTM4IGN0IDI1OTkgLTY0IDI1OTAgLTkyIDI1OTAgLTEyNCBjdCAyNTkwIC0xNDcgMjU5NiAtMTcwIDI2MDcgLTE5MyBjdCAKKzI2MTkgLTIxNiAyNjM0IC0yMzMgMjY1MiAtMjQ0IGN0IDI2NzEgLTI1NSAyNjkxIC0yNjAgMjcxMiAtMjYwIGN0IHAKKzI3MDMgLTI0MiBtICAyNjk0IC0yNDIgMjY4NCAtMjM5IDI2NzQgLTIzMyBjdCAyNjY0IC0yMjggMjY1NiAtMjE4IDI2NTAgLTIwMyBjdCAKKzI2NDQgLTE4OSAyNjQxIC0xNzAgMjY0MSAtMTQ3IGN0IDI2NDEgLTExMSAyNjQ4IC03OSAyNjYzIC01MyBjdCAyNjc4IC0yNiAyNjk3IC0xMyAyNzIxIC0xMyBjdCAKKzI3MzggLTEzIDI3NTMgLTIwIDI3NjUgLTM1IGN0IDI3NzYgLTUwIDI3ODIgLTc1IDI3ODIgLTExMCBjdCAyNzgyIC0xNTUgMjc3MiAtMTkwIDI3NTMgLTIxNiBjdCAKKzI3NDAgLTIzMyAyNzIzIC0yNDIgMjcwMyAtMjQyIGN0IHAgZWYKKzI5OTUgLTI2MCBtICAzMDMzIC0yNjAgMzA2NCAtMjQ2IDMwODcgLTIxNyBjdCAzMTA2IC0xOTIgMzExNiAtMTYzIDMxMTYgLTEzMSBjdCAKKzMxMTYgLTEwOSAzMTExIC04NiAzMTAwIC02MyBjdCAzMDg5IC00MCAzMDc0IC0yMiAzMDU1IC0xMSBjdCAzMDM2IDEgMzAxNSA3IDI5OTIgNyBjdCAKKzI5NTQgNyAyOTI0IC04IDI5MDEgLTM4IGN0IDI4ODIgLTY0IDI4NzMgLTkyIDI4NzMgLTEyNCBjdCAyODczIC0xNDcgMjg3OSAtMTcwIDI4OTAgLTE5MyBjdCAKKzI5MDIgLTIxNiAyOTE3IC0yMzMgMjkzNSAtMjQ0IGN0IDI5NTQgLTI1NSAyOTc0IC0yNjAgMjk5NSAtMjYwIGN0IHAKKzI5ODYgLTI0MiBtICAyOTc3IC0yNDIgMjk2NyAtMjM5IDI5NTcgLTIzMyBjdCAyOTQ3IC0yMjggMjkzOSAtMjE4IDI5MzMgLTIwMyBjdCAKKzI5MjcgLTE4OSAyOTI0IC0xNzAgMjkyNCAtMTQ3IGN0IDI5MjQgLTExMSAyOTMxIC03OSAyOTQ2IC01MyBjdCAyOTYxIC0yNiAyOTgwIC0xMyAzMDA0IC0xMyBjdCAKKzMwMjEgLTEzIDMwMzYgLTIwIDMwNDggLTM1IGN0IDMwNTkgLTUwIDMwNjUgLTc1IDMwNjUgLTExMCBjdCAzMDY1IC0xNTUgMzA1NSAtMTkwIDMwMzYgLTIxNiBjdCAKKzMwMjMgLTIzMyAzMDA2IC0yNDIgMjk4NiAtMjQyIGN0IHAgZWYKKzMxMzcgLTIyOCBtICAzMTM3IC0yMjggMzEzNyAtMjI4IDMyMTUgLTI1OSBjdCAzMjE1IC0yNTkgMzIxNSAtMjU5IDMyMjYgLTI1OSBjdCAKKzMyMjYgLTI1OSAzMjI2IC0yNTkgMzIyNiAtMjAxIGN0IDMyMzkgLTIyMyAzMjUyIC0yMzggMzI2NSAtMjQ3IGN0IDMyNzggLTI1NiAzMjkyIC0yNjAgMzMwNiAtMjYwIGN0IAorMzMzMSAtMjYwIDMzNTIgLTI1MCAzMzY5IC0yMzAgY3QgMzM5MCAtMjA2IDM0MDAgLTE3NSAzNDAwIC0xMzYgY3QgMzQwMCAtOTIgMzM4OCAtNTYgMzM2MyAtMjggY3QgCiszMzQyIC01IDMzMTcgNyAzMjg2IDcgY3QgMzI3MiA3IDMyNjAgNSAzMjUxIDEgY3QgMzI0MyAtMiAzMjM1IC03IDMyMjYgLTE2IGN0IDMyMjYgLTE2IDMyMjYgLTE2IDMyMjYgNjMgY3QgCiszMjI2IDgwIDMyMjcgOTEgMzIyOSA5NiBjdCAzMjMxIDEwMCAzMjM1IDEwNCAzMjQwIDEwNyBjdCAzMjQ2IDExMCAzMjU1IDExMSAzMjY5IDExMSBjdCAKKzMyNjkgMTExIDMyNjkgMTExIDMyNjkgMTIxIGN0IDMyNjkgMTIxIDMyNjkgMTIxIDMxMzQgMTIxIGN0IDMxMzQgMTIxIDMxMzQgMTIxIDMxMzQgMTExIGN0IAorMzEzNCAxMTEgMzEzNCAxMTEgMzE0MSAxMTEgY3QgMzE1MSAxMTEgMzE2MCAxMDkgMzE2OCAxMDUgY3QgMzE3MSAxMDMgMzE3NCAxMDAgMzE3NiA5NSBjdCAKKzMxNzggOTEgMzE3OSA3OSAzMTc5IDYxIGN0IDMxNzkgNjEgMzE3OSA2MSAzMTc5IC0xNzkgY3QgMzE3OSAtMTk1IDMxNzggLTIwNSAzMTc3IC0yMDkgY3QgCiszMTc1IC0yMTMgMzE3MyAtMjE2IDMxNzAgLTIxOSBjdCAzMTY3IC0yMjEgMzE2MiAtMjIyIDMxNTcgLTIyMiBjdCAzMTUzIC0yMjIgMzE0NyAtMjIxIDMxNDAgLTIxOCBjdCAKKzMxNDAgLTIxOCAzMTQwIC0yMTggMzEzNyAtMjI4IGN0IHAKKzMyMjYgLTE4NSBtICAzMjI2IC0xODUgMzIyNiAtMTg1IDMyMjYgLTkwIGN0IDMyMjYgLTcwIDMyMjcgLTU3IDMyMjggLTUwIGN0IDMyMzEgLTQwIDMyMzcgLTMwIDMyNDcgLTIyIGN0IAorMzI1NyAtMTQgMzI3MCAtMTAgMzI4NSAtMTAgY3QgMzMwMyAtMTAgMzMxOCAtMTcgMzMyOSAtMzEgY3QgMzM0NCAtNTAgMzM1MSAtNzcgMzM1MSAtMTExIGN0IAorMzM1MSAtMTQ5IDMzNDMgLTE3OSAzMzI2IC0yMDAgY3QgMzMxNCAtMjE0IDMzMDAgLTIyMSAzMjg0IC0yMjEgY3QgMzI3NiAtMjIxIDMyNjcgLTIxOSAzMjU4IC0yMTQgY3QgCiszMjUyIC0yMTEgMzI0MSAtMjAxIDMyMjYgLTE4NSBjdCBwIGVmCitwb20KK2dyCitncgorZ3MKK2dzCitwdW0KKzk5NzYgMjQ3NTkgdAorODIgLTM5MiBtICA5MCAtMzkyIDk2IC0zODkgMTAyIC0zODQgY3QgMTA3IC0zNzggMTEwIC0zNzIgMTEwIC0zNjQgY3QgMTEwIC0zNTYgMTA3IC0zNTAgMTAyIC0zNDQgY3QgCis5NiAtMzM5IDkwIC0zMzYgODIgLTMzNiBjdCA3NCAtMzM2IDY4IC0zMzkgNjIgLTM0NCBjdCA1NyAtMzUwIDU0IC0zNTYgNTQgLTM2NCBjdCAKKzU0IC0zNzIgNTcgLTM3OCA2MiAtMzg0IGN0IDY4IC0zODkgNzQgLTM5MiA4MiAtMzkyIGN0IHAKKzEwNSAtMjYwIG0gIDEwNSAtMjYwIDEwNSAtMjYwIDEwNSAtNTcgY3QgMTA1IC00MSAxMDYgLTMxIDEwOCAtMjYgY3QgMTExIC0yMCAxMTQgLTE2IDExOCAtMTQgY3QgCisxMjMgLTExIDEzMCAtMTAgMTQyIC0xMCBjdCAxNDIgLTEwIDE0MiAtMTAgMTQyIDAgY3QgMTQyIDAgMTQyIDAgMjIgMCBjdCAyMiAwIDIyIDAgMjIgLTEwIGN0IAorMzQgLTEwIDQyIC0xMSA0NiAtMTQgY3QgNTAgLTE2IDUzIC0yMCA1NSAtMjUgY3QgNTggLTMxIDU5IC00MSA1OSAtNTcgY3QgNTkgLTU3IDU5IC01NyA1OSAtMTU0IGN0IAorNTkgLTE4MSA1OCAtMTk5IDU3IC0yMDcgY3QgNTUgLTIxMyA1MyAtMjE3IDUxIC0yMjAgY3QgNDggLTIyMiA0NCAtMjIzIDM5IC0yMjMgY3QgCiszNCAtMjIzIDI4IC0yMjIgMjEgLTIxOSBjdCAyMSAtMjE5IDIxIC0yMTkgMTcgLTIyOSBjdCAxNyAtMjI5IDE3IC0yMjkgOTMgLTI2MCBjdCAKKzkzIC0yNjAgOTMgLTI2MCAxMDUgLTI2MCBjdCBwIGVmCisyNDkgLTIwNyBtICAyNzggLTI0MiAzMDYgLTI2MCAzMzMgLTI2MCBjdCAzNDcgLTI2MCAzNTkgLTI1NyAzNjggLTI1MCBjdCAzNzggLTI0MyAzODYgLTIzMSAzOTIgLTIxNiBjdCAKKzM5NiAtMjA1IDM5OCAtMTg4IDM5OCAtMTY1IGN0IDM5OCAtMTY1IDM5OCAtMTY1IDM5OCAtNTcgY3QgMzk4IC00MSAzOTkgLTMwIDQwMiAtMjUgY3QgCis0MDQgLTIwIDQwNyAtMTYgNDExIC0xNCBjdCA0MTUgLTExIDQyMyAtMTAgNDM1IC0xMCBjdCA0MzUgLTEwIDQzNSAtMTAgNDM1IDAgY3QgCis0MzUgMCA0MzUgMCAzMTEgMCBjdCAzMTEgMCAzMTEgMCAzMTEgLTEwIGN0IDMxMSAtMTAgMzExIC0xMCAzMTYgLTEwIGN0IDMyOCAtMTAgMzM2IC0xMiAzNDEgLTE1IGN0IAorMzQ2IC0xOSAzNDkgLTI0IDM1MSAtMzEgY3QgMzUyIC0zNCAzNTIgLTQzIDM1MiAtNTcgY3QgMzUyIC01NyAzNTIgLTU3IDM1MiAtMTYxIGN0IAorMzUyIC0xODQgMzQ5IC0yMDEgMzQzIC0yMTEgY3QgMzM3IC0yMjIgMzI3IC0yMjcgMzEzIC0yMjcgY3QgMjkyIC0yMjcgMjcwIC0yMTUgMjQ5IC0xOTEgY3QgCisyNDkgLTE5MSAyNDkgLTE5MSAyNDkgLTU3IGN0IDI0OSAtNDAgMjUwIC0yOSAyNTIgLTI1IGN0IDI1NSAtMjAgMjU4IC0xNiAyNjMgLTE0IGN0IAorMjY3IC0xMSAyNzYgLTEwIDI5MCAtMTAgY3QgMjkwIC0xMCAyOTAgLTEwIDI5MCAwIGN0IDI5MCAwIDI5MCAwIDE2NiAwIGN0IDE2NiAwIDE2NiAwIDE2NiAtMTAgY3QgCisxNjYgLTEwIDE2NiAtMTAgMTcxIC0xMCBjdCAxODQgLTEwIDE5MiAtMTMgMTk2IC0yMCBjdCAyMDEgLTI2IDIwMyAtMzkgMjAzIC01NyBjdCAKKzIwMyAtNTcgMjAzIC01NyAyMDMgLTE1MSBjdCAyMDMgLTE4MSAyMDIgLTIwMCAyMDEgLTIwNiBjdCAyMDAgLTIxMyAxOTggLTIxNyAxOTUgLTIyMCBjdCAKKzE5MiAtMjIyIDE4OCAtMjIzIDE4MyAtMjIzIGN0IDE3OCAtMjIzIDE3MiAtMjIyIDE2NSAtMjE5IGN0IDE2NSAtMjE5IDE2NSAtMjE5IDE2MSAtMjI5IGN0IAorMTYxIC0yMjkgMTYxIC0yMjkgMjM3IC0yNjAgY3QgMjM3IC0yNjAgMjM3IC0yNjAgMjQ5IC0yNjAgY3QgMjQ5IC0yNjAgMjQ5IC0yNjAgMjQ5IC0yMDcgY3QgCitwIGVmCis1MzIgLTIwNyBtICA1NjEgLTI0MiA1ODkgLTI2MCA2MTYgLTI2MCBjdCA2MzAgLTI2MCA2NDIgLTI1NyA2NTEgLTI1MCBjdCA2NjEgLTI0MyA2NjkgLTIzMSA2NzUgLTIxNiBjdCAKKzY3OSAtMjA1IDY4MSAtMTg4IDY4MSAtMTY1IGN0IDY4MSAtMTY1IDY4MSAtMTY1IDY4MSAtNTcgY3QgNjgxIC00MSA2ODIgLTMwIDY4NSAtMjUgY3QgCis2ODcgLTIwIDY5MCAtMTYgNjk0IC0xNCBjdCA2OTggLTExIDcwNiAtMTAgNzE4IC0xMCBjdCA3MTggLTEwIDcxOCAtMTAgNzE4IDAgY3QgCis3MTggMCA3MTggMCA1OTQgMCBjdCA1OTQgMCA1OTQgMCA1OTQgLTEwIGN0IDU5NCAtMTAgNTk0IC0xMCA1OTkgLTEwIGN0IDYxMSAtMTAgNjE5IC0xMiA2MjQgLTE1IGN0IAorNjI5IC0xOSA2MzIgLTI0IDYzNCAtMzEgY3QgNjM1IC0zNCA2MzUgLTQzIDYzNSAtNTcgY3QgNjM1IC01NyA2MzUgLTU3IDYzNSAtMTYxIGN0IAorNjM1IC0xODQgNjMyIC0yMDEgNjI2IC0yMTEgY3QgNjIwIC0yMjIgNjEwIC0yMjcgNTk2IC0yMjcgY3QgNTc1IC0yMjcgNTUzIC0yMTUgNTMyIC0xOTEgY3QgCis1MzIgLTE5MSA1MzIgLTE5MSA1MzIgLTU3IGN0IDUzMiAtNDAgNTMzIC0yOSA1MzUgLTI1IGN0IDUzOCAtMjAgNTQxIC0xNiA1NDYgLTE0IGN0IAorNTUwIC0xMSA1NTkgLTEwIDU3MyAtMTAgY3QgNTczIC0xMCA1NzMgLTEwIDU3MyAwIGN0IDU3MyAwIDU3MyAwIDQ0OSAwIGN0IDQ0OSAwIDQ0OSAwIDQ0OSAtMTAgY3QgCis0NDkgLTEwIDQ0OSAtMTAgNDU0IC0xMCBjdCA0NjcgLTEwIDQ3NSAtMTMgNDc5IC0yMCBjdCA0ODQgLTI2IDQ4NiAtMzkgNDg2IC01NyBjdCAKKzQ4NiAtNTcgNDg2IC01NyA0ODYgLTE1MSBjdCA0ODYgLTE4MSA0ODUgLTIwMCA0ODQgLTIwNiBjdCA0ODMgLTIxMyA0ODEgLTIxNyA0NzggLTIyMCBjdCAKKzQ3NSAtMjIyIDQ3MSAtMjIzIDQ2NiAtMjIzIGN0IDQ2MSAtMjIzIDQ1NSAtMjIyIDQ0OCAtMjE5IGN0IDQ0OCAtMjE5IDQ0OCAtMjE5IDQ0NCAtMjI5IGN0IAorNDQ0IC0yMjkgNDQ0IC0yMjkgNTIwIC0yNjAgY3QgNTIwIC0yNjAgNTIwIC0yNjAgNTMyIC0yNjAgY3QgNTMyIC0yNjAgNTMyIC0yNjAgNTMyIC0yMDcgY3QgCitwIGVmCis4NjYgLTI2MCBtICA5MDQgLTI2MCA5MzUgLTI0NiA5NTggLTIxNyBjdCA5NzcgLTE5MiA5ODcgLTE2MyA5ODcgLTEzMSBjdCA5ODcgLTEwOSA5ODIgLTg2IDk3MSAtNjMgY3QgCis5NjAgLTQwIDk0NSAtMjIgOTI2IC0xMSBjdCA5MDcgMSA4ODYgNyA4NjMgNyBjdCA4MjUgNyA3OTUgLTggNzcyIC0zOCBjdCA3NTMgLTY0IDc0NCAtOTIgNzQ0IC0xMjQgY3QgCis3NDQgLTE0NyA3NTAgLTE3MCA3NjEgLTE5MyBjdCA3NzMgLTIxNiA3ODggLTIzMyA4MDYgLTI0NCBjdCA4MjUgLTI1NSA4NDUgLTI2MCA4NjYgLTI2MCBjdCAKK3AKKzg1NyAtMjQyIG0gIDg0OCAtMjQyIDgzOCAtMjM5IDgyOCAtMjMzIGN0IDgxOCAtMjI4IDgxMCAtMjE4IDgwNCAtMjAzIGN0IDc5OCAtMTg5IDc5NSAtMTcwIDc5NSAtMTQ3IGN0IAorNzk1IC0xMTEgODAyIC03OSA4MTcgLTUzIGN0IDgzMiAtMjYgODUxIC0xMyA4NzUgLTEzIGN0IDg5MiAtMTMgOTA3IC0yMCA5MTkgLTM1IGN0IAorOTMwIC01MCA5MzYgLTc1IDkzNiAtMTEwIGN0IDkzNiAtMTU1IDkyNiAtMTkwIDkwNyAtMjE2IGN0IDg5NCAtMjMzIDg3NyAtMjQyIDg1NyAtMjQyIGN0IAorcCBlZgorMTAxNCAtMjUzIG0gIDEwMTQgLTI1MyAxMDE0IC0yNTMgMTEzMiAtMjUzIGN0IDExMzIgLTI1MyAxMTMyIC0yNTMgMTEzMiAtMjQzIGN0IAorMTEzMiAtMjQzIDExMzIgLTI0MyAxMTI0IC0yNDMgY3QgMTExNyAtMjQzIDExMTIgLTI0MSAxMTA4IC0yMzggY3QgMTEwNCAtMjM0IDExMDIgLTIzMCAxMTAyIC0yMjQgY3QgCisxMTAyIC0yMTcgMTEwNCAtMjEwIDExMDggLTIwMSBjdCAxMTA4IC0yMDEgMTEwOCAtMjAxIDExNjcgLTYyIGN0IDExNjcgLTYyIDExNjcgLTYyIDEyMjUgLTIwNiBjdCAKKzEyMjkgLTIxNiAxMjMxIC0yMjQgMTIzMSAtMjMwIGN0IDEyMzEgLTIzMiAxMjMxIC0yMzQgMTIyOSAtMjM2IGN0IDEyMjcgLTIzOSAxMjI1IC0yNDAgMTIyMSAtMjQxIGN0IAorMTIxOCAtMjQzIDEyMTIgLTI0MyAxMjAyIC0yNDMgY3QgMTIwMiAtMjQzIDEyMDIgLTI0MyAxMjAyIC0yNTMgY3QgMTIwMiAtMjUzIDEyMDIgLTI1MyAxMjg0IC0yNTMgY3QgCisxMjg0IC0yNTMgMTI4NCAtMjUzIDEyODQgLTI0MyBjdCAxMjc1IC0yNDIgMTI2OCAtMjQwIDEyNjQgLTIzNyBjdCAxMjU4IC0yMzEgMTI1MiAtMjIyIDEyNDcgLTIwOSBjdCAKKzEyNDcgLTIwOSAxMjQ3IC0yMDkgMTE1OCA3IGN0IDExNTggNyAxMTU4IDcgMTE0NyA3IGN0IDExNDcgNyAxMTQ3IDcgMTA1OCAtMjA1IGN0IAorMTA1NCAtMjE2IDEwNTAgLTIyMyAxMDQ2IC0yMjcgY3QgMTA0MiAtMjMyIDEwMzggLTIzNSAxMDMyIC0yMzggY3QgMTAyOSAtMjQwIDEwMjMgLTI0MiAxMDE0IC0yNDMgY3QgCisxMDE0IC0yNDMgMTAxNCAtMjQzIDEwMTQgLTI1MyBjdCBwIGVmCisxNDUyIC0zNyBtICAxNDI2IC0xNyAxNDEwIC01IDE0MDMgLTIgY3QgMTM5MyAzIDEzODMgNSAxMzcxIDUgY3QgMTM1NCA1IDEzMzkgLTEgMTMyOCAtMTMgY3QgCisxMzE3IC0yNSAxMzExIC00MCAxMzExIC02MCBjdCAxMzExIC03MiAxMzE0IC04MyAxMzE5IC05MiBjdCAxMzI3IC0xMDQgMTM0MCAtMTE2IDEzNTkgLTEyNyBjdCAKKzEzNzcgLTEzOCAxNDA5IC0xNTEgMTQ1MiAtMTY3IGN0IDE0NTIgLTE2NyAxNDUyIC0xNjcgMTQ1MiAtMTc3IGN0IDE0NTIgLTIwMiAxNDQ4IC0yMTkgMTQ0MCAtMjI4IGN0IAorMTQzMiAtMjM3IDE0MjEgLTI0MiAxNDA1IC0yNDIgY3QgMTM5NCAtMjQyIDEzODUgLTIzOSAxMzc4IC0yMzMgY3QgMTM3MSAtMjI2IDEzNjcgLTIxOSAxMzY3IC0yMTEgY3QgCisxMzY3IC0yMTEgMTM2NyAtMjExIDEzNjggLTE5NSBjdCAxMzY4IC0xODcgMTM2NiAtMTgwIDEzNjEgLTE3NiBjdCAxMzU3IC0xNzEgMTM1MSAtMTY5IDEzNDQgLTE2OSBjdCAKKzEzMzggLTE2OSAxMzMyIC0xNzEgMTMyOCAtMTc2IGN0IDEzMjMgLTE4MSAxMzIxIC0xODggMTMyMSAtMTk2IGN0IDEzMjEgLTIxMiAxMzI5IC0yMjcgMTM0NSAtMjQwIGN0IAorMTM2MSAtMjUzIDEzODQgLTI2MCAxNDEzIC0yNjAgY3QgMTQzNSAtMjYwIDE0NTQgLTI1NiAxNDY4IC0yNDkgY3QgMTQ3OSAtMjQzIDE0ODcgLTIzNCAxNDkyIC0yMjIgY3QgCisxNDk1IC0yMTQgMTQ5NyAtMTk4IDE0OTcgLTE3NCBjdCAxNDk3IC0xNzQgMTQ5NyAtMTc0IDE0OTcgLTg5IGN0IDE0OTcgLTY1IDE0OTcgLTUwIDE0OTggLTQ1IGN0IAorMTQ5OSAtMzkgMTUwMSAtMzYgMTUwMyAtMzQgY3QgMTUwNSAtMzIgMTUwNyAtMzEgMTUxMCAtMzEgY3QgMTUxMyAtMzEgMTUxNiAtMzIgMTUxOCAtMzMgY3QgCisxNTIyIC0zNSAxNTI5IC00MiAxNTQwIC01MyBjdCAxNTQwIC01MyAxNTQwIC01MyAxNTQwIC0zOCBjdCAxNTIwIC0xMCAxNTAwIDQgMTQ4MiA0IGN0IAorMTQ3MyA0IDE0NjUgMSAxNDYwIC01IGN0IDE0NTUgLTExIDE0NTIgLTIyIDE0NTIgLTM3IGN0IHAKKzE0NTIgLTU0IG0gIDE0NTIgLTU0IDE0NTIgLTU0IDE0NTIgLTE0OSBjdCAxNDI0IC0xMzggMTQwNiAtMTMwIDEzOTggLTEyNiBjdCAKKzEzODMgLTExOCAxMzczIC0xMTAgMTM2NiAtMTAxIGN0IDEzNjAgLTkyIDEzNTcgLTgzIDEzNTcgLTcyIGN0IDEzNTcgLTU5IDEzNjEgLTQ5IDEzNjkgLTQwIGN0IAorMTM3NyAtMzEgMTM4NiAtMjcgMTM5NiAtMjcgY3QgMTQxMSAtMjcgMTQyOSAtMzYgMTQ1MiAtNTQgY3QgcCBlZgorMTYzMiAtMzM3IG0gIDE2MzIgLTMzNyAxNjMyIC0zMzcgMTYzMiAtMjUzIGN0IDE2MzIgLTI1MyAxNjMyIC0yNTMgMTY5MSAtMjUzIGN0IAorMTY5MSAtMjUzIDE2OTEgLTI1MyAxNjkxIC0yMzQgY3QgMTY5MSAtMjM0IDE2OTEgLTIzNCAxNjMyIC0yMzQgY3QgMTYzMiAtMjM0IDE2MzIgLTIzNCAxNjMyIC03MCBjdCAKKzE2MzIgLTUzIDE2MzQgLTQyIDE2MzkgLTM3IGN0IDE2NDQgLTMxIDE2NTAgLTI4IDE2NTcgLTI4IGN0IDE2NjMgLTI4IDE2NjkgLTMwIDE2NzUgLTM0IGN0IAorMTY4MCAtMzcgMTY4NSAtNDMgMTY4OCAtNTAgY3QgMTY4OCAtNTAgMTY4OCAtNTAgMTY5OSAtNTAgY3QgMTY5MyAtMzIgMTY4MyAtMTkgMTY3MiAtMTAgY3QgCisxNjYwIC0xIDE2NDcgNCAxNjM1IDQgY3QgMTYyNiA0IDE2MTggMiAxNjEwIC0zIGN0IDE2MDIgLTggMTU5NiAtMTQgMTU5MiAtMjMgY3QgCisxNTg4IC0zMiAxNTg2IC00NSAxNTg2IC02NCBjdCAxNTg2IC02NCAxNTg2IC02NCAxNTg2IC0yMzQgY3QgMTU4NiAtMjM0IDE1ODYgLTIzNCAxNTQ2IC0yMzQgY3QgCisxNTQ2IC0yMzQgMTU0NiAtMjM0IDE1NDYgLTI0MyBjdCAxNTU2IC0yNDcgMTU2NiAtMjU0IDE1NzcgLTI2NCBjdCAxNTg4IC0yNzMgMTU5NyAtMjg1IDE2MDUgLTI5OCBjdCAKKzE2MTAgLTMwNSAxNjE1IC0zMTggMTYyMyAtMzM3IGN0IDE2MjMgLTMzNyAxNjIzIC0zMzcgMTYzMiAtMzM3IGN0IHAgZWYKKzE3ODAgLTM5MiBtICAxNzg4IC0zOTIgMTc5NCAtMzg5IDE4MDAgLTM4NCBjdCAxODA1IC0zNzggMTgwOCAtMzcyIDE4MDggLTM2NCBjdCAKKzE4MDggLTM1NiAxODA1IC0zNTAgMTgwMCAtMzQ0IGN0IDE3OTQgLTMzOSAxNzg4IC0zMzYgMTc4MCAtMzM2IGN0IDE3NzIgLTMzNiAxNzY2IC0zMzkgMTc2MCAtMzQ0IGN0IAorMTc1NSAtMzUwIDE3NTIgLTM1NiAxNzUyIC0zNjQgY3QgMTc1MiAtMzcyIDE3NTUgLTM3OCAxNzYwIC0zODQgY3QgMTc2NiAtMzg5IDE3NzIgLTM5MiAxNzgwIC0zOTIgY3QgCitwCisxODAzIC0yNjAgbSAgMTgwMyAtMjYwIDE4MDMgLTI2MCAxODAzIC01NyBjdCAxODAzIC00MSAxODA0IC0zMSAxODA2IC0yNiBjdCAxODA5IC0yMCAxODEyIC0xNiAxODE2IC0xNCBjdCAKKzE4MjEgLTExIDE4MjggLTEwIDE4NDAgLTEwIGN0IDE4NDAgLTEwIDE4NDAgLTEwIDE4NDAgMCBjdCAxODQwIDAgMTg0MCAwIDE3MjAgMCBjdCAKKzE3MjAgMCAxNzIwIDAgMTcyMCAtMTAgY3QgMTczMiAtMTAgMTc0MCAtMTEgMTc0NCAtMTQgY3QgMTc0OCAtMTYgMTc1MSAtMjAgMTc1MyAtMjUgY3QgCisxNzU2IC0zMSAxNzU3IC00MSAxNzU3IC01NyBjdCAxNzU3IC01NyAxNzU3IC01NyAxNzU3IC0xNTQgY3QgMTc1NyAtMTgxIDE3NTYgLTE5OSAxNzU1IC0yMDcgY3QgCisxNzUzIC0yMTMgMTc1MSAtMjE3IDE3NDkgLTIyMCBjdCAxNzQ2IC0yMjIgMTc0MiAtMjIzIDE3MzcgLTIyMyBjdCAxNzMyIC0yMjMgMTcyNiAtMjIyIDE3MTkgLTIxOSBjdCAKKzE3MTkgLTIxOSAxNzE5IC0yMTkgMTcxNSAtMjI5IGN0IDE3MTUgLTIyOSAxNzE1IC0yMjkgMTc5MSAtMjYwIGN0IDE3OTEgLTI2MCAxNzkxIC0yNjAgMTgwMyAtMjYwIGN0IAorcCBlZgorMTk5NiAtMjYwIG0gIDIwMzQgLTI2MCAyMDY1IC0yNDYgMjA4OCAtMjE3IGN0IDIxMDcgLTE5MiAyMTE3IC0xNjMgMjExNyAtMTMxIGN0IAorMjExNyAtMTA5IDIxMTIgLTg2IDIxMDEgLTYzIGN0IDIwOTAgLTQwIDIwNzUgLTIyIDIwNTYgLTExIGN0IDIwMzcgMSAyMDE2IDcgMTk5MyA3IGN0IAorMTk1NSA3IDE5MjUgLTggMTkwMiAtMzggY3QgMTg4MyAtNjQgMTg3NCAtOTIgMTg3NCAtMTI0IGN0IDE4NzQgLTE0NyAxODgwIC0xNzAgMTg5MSAtMTkzIGN0IAorMTkwMyAtMjE2IDE5MTggLTIzMyAxOTM2IC0yNDQgY3QgMTk1NSAtMjU1IDE5NzUgLTI2MCAxOTk2IC0yNjAgY3QgcAorMTk4NyAtMjQyIG0gIDE5NzggLTI0MiAxOTY4IC0yMzkgMTk1OCAtMjMzIGN0IDE5NDggLTIyOCAxOTQwIC0yMTggMTkzNCAtMjAzIGN0IAorMTkyOCAtMTg5IDE5MjUgLTE3MCAxOTI1IC0xNDcgY3QgMTkyNSAtMTExIDE5MzIgLTc5IDE5NDcgLTUzIGN0IDE5NjIgLTI2IDE5ODEgLTEzIDIwMDUgLTEzIGN0IAorMjAyMiAtMTMgMjAzNyAtMjAgMjA0OSAtMzUgY3QgMjA2MCAtNTAgMjA2NiAtNzUgMjA2NiAtMTEwIGN0IDIwNjYgLTE1NSAyMDU2IC0xOTAgMjAzNyAtMjE2IGN0IAorMjAyNCAtMjMzIDIwMDcgLTI0MiAxOTg3IC0yNDIgY3QgcCBlZgorMjIzMCAtMjA3IG0gIDIyNTkgLTI0MiAyMjg3IC0yNjAgMjMxNCAtMjYwIGN0IDIzMjggLTI2MCAyMzQwIC0yNTcgMjM0OSAtMjUwIGN0IAorMjM1OSAtMjQzIDIzNjcgLTIzMSAyMzczIC0yMTYgY3QgMjM3NyAtMjA1IDIzNzkgLTE4OCAyMzc5IC0xNjUgY3QgMjM3OSAtMTY1IDIzNzkgLTE2NSAyMzc5IC01NyBjdCAKKzIzNzkgLTQxIDIzODAgLTMwIDIzODMgLTI1IGN0IDIzODUgLTIwIDIzODggLTE2IDIzOTIgLTE0IGN0IDIzOTYgLTExIDI0MDQgLTEwIDI0MTYgLTEwIGN0IAorMjQxNiAtMTAgMjQxNiAtMTAgMjQxNiAwIGN0IDI0MTYgMCAyNDE2IDAgMjI5MiAwIGN0IDIyOTIgMCAyMjkyIDAgMjI5MiAtMTAgY3QgMjI5MiAtMTAgMjI5MiAtMTAgMjI5NyAtMTAgY3QgCisyMzA5IC0xMCAyMzE3IC0xMiAyMzIyIC0xNSBjdCAyMzI3IC0xOSAyMzMwIC0yNCAyMzMyIC0zMSBjdCAyMzMzIC0zNCAyMzMzIC00MyAyMzMzIC01NyBjdCAKKzIzMzMgLTU3IDIzMzMgLTU3IDIzMzMgLTE2MSBjdCAyMzMzIC0xODQgMjMzMCAtMjAxIDIzMjQgLTIxMSBjdCAyMzE4IC0yMjIgMjMwOCAtMjI3IDIyOTQgLTIyNyBjdCAKKzIyNzMgLTIyNyAyMjUxIC0yMTUgMjIzMCAtMTkxIGN0IDIyMzAgLTE5MSAyMjMwIC0xOTEgMjIzMCAtNTcgY3QgMjIzMCAtNDAgMjIzMSAtMjkgMjIzMyAtMjUgY3QgCisyMjM2IC0yMCAyMjM5IC0xNiAyMjQ0IC0xNCBjdCAyMjQ4IC0xMSAyMjU3IC0xMCAyMjcxIC0xMCBjdCAyMjcxIC0xMCAyMjcxIC0xMCAyMjcxIDAgY3QgCisyMjcxIDAgMjI3MSAwIDIxNDcgMCBjdCAyMTQ3IDAgMjE0NyAwIDIxNDcgLTEwIGN0IDIxNDcgLTEwIDIxNDcgLTEwIDIxNTIgLTEwIGN0IAorMjE2NSAtMTAgMjE3MyAtMTMgMjE3NyAtMjAgY3QgMjE4MiAtMjYgMjE4NCAtMzkgMjE4NCAtNTcgY3QgMjE4NCAtNTcgMjE4NCAtNTcgMjE4NCAtMTUxIGN0IAorMjE4NCAtMTgxIDIxODMgLTIwMCAyMTgyIC0yMDYgY3QgMjE4MSAtMjEzIDIxNzkgLTIxNyAyMTc2IC0yMjAgY3QgMjE3MyAtMjIyIDIxNjkgLTIyMyAyMTY0IC0yMjMgY3QgCisyMTU5IC0yMjMgMjE1MyAtMjIyIDIxNDYgLTIxOSBjdCAyMTQ2IC0yMTkgMjE0NiAtMjE5IDIxNDIgLTIyOSBjdCAyMTQyIC0yMjkgMjE0MiAtMjI5IDIyMTggLTI2MCBjdCAKKzIyMTggLTI2MCAyMjE4IC0yNjAgMjIzMCAtMjYwIGN0IDIyMzAgLTI2MCAyMjMwIC0yNjAgMjIzMCAtMjA3IGN0IHAgZWYKKzI4MjAgLTEyNSBtICAyODIwIC0xMjUgMjgyMCAtMTI1IDI2NzUgLTEyNSBjdCAyNjc1IC0xMjUgMjY3NSAtMTI1IDI2NDkgLTY2IGN0IAorMjY0MyAtNTIgMjY0MCAtNDEgMjY0MCAtMzMgY3QgMjY0MCAtMjggMjY0MiAtMjMgMjY0OCAtMTggY3QgMjY1MyAtMTQgMjY2NSAtMTEgMjY4MyAtMTAgY3QgCisyNjgzIC0xMCAyNjgzIC0xMCAyNjgzIDAgY3QgMjY4MyAwIDI2ODMgMCAyNTY1IDAgY3QgMjU2NSAwIDI1NjUgMCAyNTY1IC0xMCBjdCAyNTgxIC0xMyAyNTkxIC0xNiAyNTk2IC0yMSBjdCAKKzI2MDUgLTMwIDI2MTUgLTQ4IDI2MjcgLTc1IGN0IDI2MjcgLTc1IDI2MjcgLTc1IDI3NjEgLTM4MiBjdCAyNzYxIC0zODIgMjc2MSAtMzgyIDI3NzIgLTM4MiBjdCAKKzI3NzIgLTM4MiAyNzcyIC0zODIgMjg5OSAtNzEgY3QgMjkwOSAtNDYgMjkxOSAtMzAgMjkyOCAtMjMgY3QgMjkzNiAtMTUgMjk0OCAtMTEgMjk2MyAtMTAgY3QgCisyOTYzIC0xMCAyOTYzIC0xMCAyOTYzIDAgY3QgMjk2MyAwIDI5NjMgMCAyODE1IDAgY3QgMjgxNSAwIDI4MTUgMCAyODE1IC0xMCBjdCAyODMwIC0xMSAyODQwIC0xMyAyODQ1IC0xNyBjdCAKKzI4NTAgLTIyIDI4NTMgLTI3IDI4NTMgLTMzIGN0IDI4NTMgLTQxIDI4NDkgLTUzIDI4NDIgLTcxIGN0IDI4NDIgLTcxIDI4NDIgLTcxIDI4MjAgLTEyNSBjdCAKK3AKKzI4MTEgLTE0NiBtICAyNzUwIC0yOTcgbCAgMjY4NCAtMTQ2IGwgIDI4MTEgLTE0NiBsICBwIGVmCiszMDU1IC0yMDkgbSAgMzA3OSAtMjQzIDMxMDYgLTI2MCAzMTM0IC0yNjAgY3QgMzE2MCAtMjYwIDMxODIgLTI0OSAzMjAxIC0yMjcgY3QgCiszMjIwIC0yMDUgMzIzMCAtMTc1IDMyMzAgLTEzNiBjdCAzMjMwIC05MiAzMjE1IC01NiAzMTg1IC0yOCBjdCAzMTYwIC01IDMxMzEgNyAzMTAwIDcgY3QgCiszMDg1IDcgMzA3MSA0IDMwNTUgLTEgY3QgMzA0MCAtNiAzMDI1IC0xNCAzMDA5IC0yNSBjdCAzMDA5IC0yNSAzMDA5IC0yNSAzMDA5IC0yODYgY3QgCiszMDA5IC0zMTQgMzAwOCAtMzMyIDMwMDcgLTMzOCBjdCAzMDA2IC0zNDUgMzAwMyAtMzQ5IDMwMDAgLTM1MiBjdCAyOTk3IC0zNTQgMjk5NCAtMzU1IDI5ODkgLTM1NSBjdCAKKzI5ODQgLTM1NSAyOTc4IC0zNTQgMjk3MCAtMzUxIGN0IDI5NzAgLTM1MSAyOTcwIC0zNTEgMjk2NiAtMzYxIGN0IDI5NjYgLTM2MSAyOTY2IC0zNjEgMzA0MiAtMzkyIGN0IAorMzA0MiAtMzkyIDMwNDIgLTM5MiAzMDU1IC0zOTIgY3QgMzA1NSAtMzkyIDMwNTUgLTM5MiAzMDU1IC0yMDkgY3QgcAorMzA1NSAtMTkyIG0gIDMwNTUgLTE5MiAzMDU1IC0xOTIgMzA1NSAtNDEgY3QgMzA2NCAtMzIgMzA3NCAtMjUgMzA4NCAtMjAgY3QgMzA5NCAtMTUgMzEwNCAtMTMgMzExNCAtMTMgY3QgCiszMTMxIC0xMyAzMTQ2IC0yMiAzMTYxIC00MSBjdCAzMTc1IC01OSAzMTgyIC04NiAzMTgyIC0xMjEgY3QgMzE4MiAtMTUzIDMxNzUgLTE3OCAzMTYxIC0xOTUgY3QgCiszMTQ2IC0yMTIgMzEzMCAtMjIxIDMxMTIgLTIyMSBjdCAzMTAyIC0yMjEgMzA5MyAtMjE5IDMwODMgLTIxNCBjdCAzMDc2IC0yMTAgMzA2NiAtMjAzIDMwNTUgLTE5MiBjdCAKK3AgZWYKKzM1MTAgLTM4MiBtICAzNTEwIC0zODIgMzUxMCAtMzgyIDM1MTAgLTI1NCBjdCAzNTEwIC0yNTQgMzUxMCAtMjU0IDM1MDAgLTI1NCBjdCAKKzM0OTcgLTI3OSAzNDkxIC0yOTggMzQ4MiAtMzEzIGN0IDM0NzQgLTMyNyAzNDYxIC0zMzkgMzQ0NiAtMzQ3IGN0IDM0MzAgLTM1NiAzNDEzIC0zNjAgMzM5NiAtMzYwIGN0IAorMzM3NyAtMzYwIDMzNjEgLTM1NCAzMzQ5IC0zNDMgY3QgMzMzNiAtMzMxIDMzMzAgLTMxOCAzMzMwIC0zMDMgY3QgMzMzMCAtMjkxIDMzMzQgLTI4MSAzMzQyIC0yNzIgY3QgCiszMzUzIC0yNTggMzM4MSAtMjM5IDM0MjQgLTIxNyBjdCAzNDU5IC0xOTggMzQ4MiAtMTgzIDM0OTUgLTE3MyBjdCAzNTA4IC0xNjMgMzUxOCAtMTUyIDM1MjUgLTEzOCBjdCAKKzM1MzIgLTEyNSAzNTM1IC0xMTAgMzUzNSAtOTYgY3QgMzUzNSAtNjcgMzUyNCAtNDMgMzUwMiAtMjMgY3QgMzQ4MCAtMiAzNDUyIDggMzQxNyA4IGN0IAorMzQwNiA4IDMzOTYgNyAzMzg2IDYgY3QgMzM4MSA1IDMzNjkgMSAzMzUxIC00IGN0IDMzMzMgLTEwIDMzMjIgLTEzIDMzMTcgLTEzIGN0IAorMzMxMiAtMTMgMzMwOSAtMTIgMzMwNiAtOSBjdCAzMzAzIC02IDMzMDEgLTEgMzMwMCA4IGN0IDMzMDAgOCAzMzAwIDggMzI5MCA4IGN0IAorMzI5MCA4IDMyOTAgOCAzMjkwIC0xMjAgY3QgMzI5MCAtMTIwIDMyOTAgLTEyMCAzMzAwIC0xMjAgY3QgMzMwNSAtOTMgMzMxMSAtNzMgMzMxOSAtNjAgY3QgCiszMzI3IC00NiAzMzQwIC0zNSAzMzU3IC0yNiBjdCAzMzczIC0xNyAzMzkxIC0xMyAzNDExIC0xMyBjdCAzNDM0IC0xMyAzNDUzIC0xOSAzNDY2IC0zMSBjdCAKKzM0NzkgLTQzIDM0ODYgLTU4IDM0ODYgLTc0IGN0IDM0ODYgLTgzIDM0ODMgLTkzIDM0NzggLTEwMiBjdCAzNDczIC0xMTEgMzQ2NSAtMTIwIDM0NTUgLTEyOCBjdCAKKzM0NDggLTEzNCAzNDI4IC0xNDUgMzM5NiAtMTYzIGN0IDMzNjQgLTE4MSAzMzQxIC0xOTUgMzMyNyAtMjA2IGN0IDMzMTQgLTIxNyAzMzA0IC0yMjkgMzI5NyAtMjQxIGN0IAorMzI5MCAtMjU0IDMyODYgLTI2OCAzMjg2IC0yODQgY3QgMzI4NiAtMzExIDMyOTYgLTMzNCAzMzE3IC0zNTMgY3QgMzMzOCAtMzcyIDMzNjQgLTM4MiAzMzk2IC0zODIgY3QgCiszNDE2IC0zODIgMzQzNyAtMzc3IDM0NTkgLTM2OCBjdCAzNDY5IC0zNjMgMzQ3NyAtMzYxIDM0ODEgLTM2MSBjdCAzNDg2IC0zNjEgMzQ5MCAtMzYyIDM0OTMgLTM2NSBjdCAKKzM0OTYgLTM2OCAzNDk4IC0zNzQgMzUwMCAtMzgyIGN0IDM1MDAgLTM4MiAzNTAwIC0zODIgMzUxMCAtMzgyIGN0IHAgZWYKKzM4MDkgLTM5MiBtICAzODA5IC0zOTIgMzgwOSAtMzkyIDM4MDkgLTU3IGN0IDM4MDkgLTQxIDM4MTAgLTMxIDM4MTIgLTI2IGN0IDM4MTUgLTIxIDM4MTggLTE3IDM4MjMgLTE0IGN0IAorMzgyOCAtMTEgMzgzNyAtMTAgMzg1MCAtMTAgY3QgMzg1MCAtMTAgMzg1MCAtMTAgMzg1MCAwIGN0IDM4NTAgMCAzODUwIDAgMzcyNiAwIGN0IAorMzcyNiAwIDM3MjYgMCAzNzI2IC0xMCBjdCAzNzM4IC0xMCAzNzQ1IC0xMSAzNzUwIC0xNCBjdCAzNzU0IC0xNiAzNzU3IC0yMCAzNzU5IC0yNSBjdCAKKzM3NjIgLTMxIDM3NjMgLTQxIDM3NjMgLTU3IGN0IDM3NjMgLTU3IDM3NjMgLTU3IDM3NjMgLTI4NiBjdCAzNzYzIC0zMTQgMzc2MiAtMzMyIDM3NjEgLTMzOCBjdCAKKzM3NjAgLTM0NSAzNzU4IC0zNDkgMzc1NSAtMzUyIGN0IDM3NTIgLTM1NCAzNzQ5IC0zNTUgMzc0NCAtMzU1IGN0IDM3NDAgLTM1NSAzNzM0IC0zNTQgMzcyNyAtMzUxIGN0IAorMzcyNyAtMzUxIDM3MjcgLTM1MSAzNzIyIC0zNjEgY3QgMzcyMiAtMzYxIDM3MjIgLTM2MSAzNzk3IC0zOTIgY3QgMzc5NyAtMzkyIDM3OTcgLTM5MiAzODA5IC0zOTIgY3QgCitwIGVmCis0MDAzIC0yNjAgbSAgNDA0MSAtMjYwIDQwNzIgLTI0NiA0MDk1IC0yMTcgY3QgNDExNCAtMTkyIDQxMjQgLTE2MyA0MTI0IC0xMzEgY3QgCis0MTI0IC0xMDkgNDExOSAtODYgNDEwOCAtNjMgY3QgNDA5NyAtNDAgNDA4MiAtMjIgNDA2MyAtMTEgY3QgNDA0NCAxIDQwMjMgNyA0MDAwIDcgY3QgCiszOTYyIDcgMzkzMiAtOCAzOTA5IC0zOCBjdCAzODkwIC02NCAzODgxIC05MiAzODgxIC0xMjQgY3QgMzg4MSAtMTQ3IDM4ODcgLTE3MCAzODk4IC0xOTMgY3QgCiszOTEwIC0yMTYgMzkyNSAtMjMzIDM5NDMgLTI0NCBjdCAzOTYyIC0yNTUgMzk4MiAtMjYwIDQwMDMgLTI2MCBjdCBwCiszOTk0IC0yNDIgbSAgMzk4NSAtMjQyIDM5NzUgLTIzOSAzOTY1IC0yMzMgY3QgMzk1NSAtMjI4IDM5NDcgLTIxOCAzOTQxIC0yMDMgY3QgCiszOTM1IC0xODkgMzkzMiAtMTcwIDM5MzIgLTE0NyBjdCAzOTMyIC0xMTEgMzkzOSAtNzkgMzk1NCAtNTMgY3QgMzk2OSAtMjYgMzk4OCAtMTMgNDAxMiAtMTMgY3QgCis0MDI5IC0xMyA0MDQ0IC0yMCA0MDU2IC0zNSBjdCA0MDY3IC01MCA0MDczIC03NSA0MDczIC0xMTAgY3QgNDA3MyAtMTU1IDQwNjMgLTE5MCA0MDQ0IC0yMTYgY3QgCis0MDMxIC0yMzMgNDAxNCAtMjQyIDM5OTQgLTI0MiBjdCBwIGVmCis0Mjg2IC0yNjAgbSAgNDMyNCAtMjYwIDQzNTUgLTI0NiA0Mzc4IC0yMTcgY3QgNDM5NyAtMTkyIDQ0MDcgLTE2MyA0NDA3IC0xMzEgY3QgCis0NDA3IC0xMDkgNDQwMiAtODYgNDM5MSAtNjMgY3QgNDM4MCAtNDAgNDM2NSAtMjIgNDM0NiAtMTEgY3QgNDMyNyAxIDQzMDYgNyA0MjgzIDcgY3QgCis0MjQ1IDcgNDIxNSAtOCA0MTkyIC0zOCBjdCA0MTczIC02NCA0MTY0IC05MiA0MTY0IC0xMjQgY3QgNDE2NCAtMTQ3IDQxNzAgLTE3MCA0MTgxIC0xOTMgY3QgCis0MTkzIC0yMTYgNDIwOCAtMjMzIDQyMjYgLTI0NCBjdCA0MjQ1IC0yNTUgNDI2NSAtMjYwIDQyODYgLTI2MCBjdCBwCis0Mjc3IC0yNDIgbSAgNDI2OCAtMjQyIDQyNTggLTIzOSA0MjQ4IC0yMzMgY3QgNDIzOCAtMjI4IDQyMzAgLTIxOCA0MjI0IC0yMDMgY3QgCis0MjE4IC0xODkgNDIxNSAtMTcwIDQyMTUgLTE0NyBjdCA0MjE1IC0xMTEgNDIyMiAtNzkgNDIzNyAtNTMgY3QgNDI1MiAtMjYgNDI3MSAtMTMgNDI5NSAtMTMgY3QgCis0MzEyIC0xMyA0MzI3IC0yMCA0MzM5IC0zNSBjdCA0MzUwIC01MCA0MzU2IC03NSA0MzU2IC0xMTAgY3QgNDM1NiAtMTU1IDQzNDYgLTE5MCA0MzI3IC0yMTYgY3QgCis0MzE0IC0yMzMgNDI5NyAtMjQyIDQyNzcgLTI0MiBjdCBwIGVmCis0NDI4IC0yMjggbSAgNDQyOCAtMjI4IDQ0MjggLTIyOCA0NTA2IC0yNTkgY3QgNDUwNiAtMjU5IDQ1MDYgLTI1OSA0NTE3IC0yNTkgY3QgCis0NTE3IC0yNTkgNDUxNyAtMjU5IDQ1MTcgLTIwMSBjdCA0NTMwIC0yMjMgNDU0MyAtMjM4IDQ1NTYgLTI0NyBjdCA0NTY5IC0yNTYgNDU4MyAtMjYwIDQ1OTcgLTI2MCBjdCAKKzQ2MjIgLTI2MCA0NjQzIC0yNTAgNDY2MCAtMjMwIGN0IDQ2ODEgLTIwNiA0NjkxIC0xNzUgNDY5MSAtMTM2IGN0IDQ2OTEgLTkyIDQ2NzkgLTU2IDQ2NTQgLTI4IGN0IAorNDYzMyAtNSA0NjA4IDcgNDU3NyA3IGN0IDQ1NjMgNyA0NTUxIDUgNDU0MiAxIGN0IDQ1MzQgLTIgNDUyNiAtNyA0NTE3IC0xNiBjdCA0NTE3IC0xNiA0NTE3IC0xNiA0NTE3IDYzIGN0IAorNDUxNyA4MCA0NTE4IDkxIDQ1MjAgOTYgY3QgNDUyMiAxMDAgNDUyNiAxMDQgNDUzMSAxMDcgY3QgNDUzNyAxMTAgNDU0NiAxMTEgNDU2MCAxMTEgY3QgCis0NTYwIDExMSA0NTYwIDExMSA0NTYwIDEyMSBjdCA0NTYwIDEyMSA0NTYwIDEyMSA0NDI1IDEyMSBjdCA0NDI1IDEyMSA0NDI1IDEyMSA0NDI1IDExMSBjdCAKKzQ0MjUgMTExIDQ0MjUgMTExIDQ0MzIgMTExIGN0IDQ0NDIgMTExIDQ0NTEgMTA5IDQ0NTkgMTA1IGN0IDQ0NjIgMTAzIDQ0NjUgMTAwIDQ0NjcgOTUgY3QgCis0NDY5IDkxIDQ0NzAgNzkgNDQ3MCA2MSBjdCA0NDcwIDYxIDQ0NzAgNjEgNDQ3MCAtMTc5IGN0IDQ0NzAgLTE5NSA0NDY5IC0yMDUgNDQ2OCAtMjA5IGN0IAorNDQ2NiAtMjEzIDQ0NjQgLTIxNiA0NDYxIC0yMTkgY3QgNDQ1OCAtMjIxIDQ0NTMgLTIyMiA0NDQ4IC0yMjIgY3QgNDQ0NCAtMjIyIDQ0MzggLTIyMSA0NDMxIC0yMTggY3QgCis0NDMxIC0yMTggNDQzMSAtMjE4IDQ0MjggLTIyOCBjdCBwCis0NTE3IC0xODUgbSAgNDUxNyAtMTg1IDQ1MTcgLTE4NSA0NTE3IC05MCBjdCA0NTE3IC03MCA0NTE4IC01NyA0NTE5IC01MCBjdCA0NTIyIC00MCA0NTI4IC0zMCA0NTM4IC0yMiBjdCAKKzQ1NDggLTE0IDQ1NjEgLTEwIDQ1NzYgLTEwIGN0IDQ1OTQgLTEwIDQ2MDkgLTE3IDQ2MjAgLTMxIGN0IDQ2MzUgLTUwIDQ2NDIgLTc3IDQ2NDIgLTExMSBjdCAKKzQ2NDIgLTE0OSA0NjM0IC0xNzkgNDYxNyAtMjAwIGN0IDQ2MDUgLTIxNCA0NTkxIC0yMjEgNDU3NSAtMjIxIGN0IDQ1NjcgLTIyMSA0NTU4IC0yMTkgNDU0OSAtMjE0IGN0IAorNDU0MyAtMjExIDQ1MzIgLTIwMSA0NTE3IC0xODUgY3QgcCBlZgorcG9tCitncgorZ3IKK2dzCiszNTM1IDYyMzUgbSA1MjA4IDYyMzUgbCA1MjA4IDY5NjQgbCAzNTM1IDY5NjQgbCAzNTM1IDYyMzUgbCBlb2NsaXAgbmV3cGF0aAorZ3MKK3RtIHNldG1hdHJpeAorMTExMSAzMjAxIHQgCisxIDEgcyAKK2dzCitncworMCAwIG0gMTY3MyAwIGwgMTY3MyA3MjkgbCAwIDcyOSBsIDAgMCBsIGVvY2xpcCBuZXdwYXRoCitncworcHVtCisxMDYgNTU2IHQKKzg2IDkgbSAgODYgOSA4NiA5IDEyMiAtMzQxIGN0IDEyNCAtMzU1IDEyNCAtMzY1IDEyNCAtMzczIGN0IDEyNCAtMzg1IDEyMSAtMzk0IDExNCAtNDAwIGN0IAorMTA3IC00MDYgOTUgLTQxMCA3NyAtNDEwIGN0IDc3IC00MTAgNzcgLTQxMCA4MSAtNDIxIGN0IDgxIC00MjEgODEgLTQyMSAyMzcgLTQyMSBjdCAKKzIzNyAtNDIxIDIzNyAtNDIxIDIzNCAtNDEwIGN0IDIxMyAtNDEwIDE5OCAtNDA2IDE5MSAtMzk5IGN0IDE4MyAtMzkxIDE3NyAtMzcyIDE3NSAtMzQxIGN0IAorMTc1IC0zNDEgMTc1IC0zNDEgMTUxIC0xMTMgY3QgMTUxIC0xMTMgMTUxIC0xMTMgMzExIC0zNjEgY3QgMzExIC0zNjUgMzExIC0zNjkgMzExIC0zNzEgY3QgCiszMTEgLTM4MyAzMDggLTM5MiAzMDEgLTM5OCBjdCAyOTQgLTQwNSAyNzkgLTQwOSAyNTcgLTQxMCBjdCAyNTcgLTQxMCAyNTcgLTQxMCAyNTkgLTQyMSBjdCAKKzI1OSAtNDIxIDI1OSAtNDIxIDQzMCAtNDIxIGN0IDQzMCAtNDIxIDQzMCAtNDIxIDQyNiAtNDEwIGN0IDQwNyAtNDEwIDM5MyAtNDA4IDM4NyAtNDA1IGN0IAorMzgyIC00MDMgMzc3IC0zOTkgMzc0IC0zOTQgY3QgMzcxIC0zODkgMzY4IC0zODAgMzY2IC0zNjggY3QgMzY1IC0zNjQgMzYzIC0zNDAgMzU4IC0yOTYgY3QgCiszNTQgLTI1MSAzNDcgLTE5MCAzMzggLTExMyBjdCAzMzggLTExMyAzMzggLTExMyA0NzIgLTMxNyBjdCA0ODYgLTMzOSA0OTYgLTM1NCA0OTkgLTM2MyBjdCAKKzUwMyAtMzcyIDUwNSAtMzgwIDUwNSAtMzg2IGN0IDUwNSAtMzkyIDUwMiAtMzk3IDQ5NyAtNDAxIGN0IDQ5MiAtNDA2IDQ4NCAtNDA5IDQ3MiAtNDEwIGN0IAorNDcyIC00MTAgNDcyIC00MTAgNDc0IC00MjEgY3QgNDc0IC00MjEgNDc0IC00MjEgNTk5IC00MjEgY3QgNTk5IC00MjEgNTk5IC00MjEgNTk2IC00MTAgY3QgCis1ODUgLTQwOSA1NzUgLTQwNiA1NjcgLTQwMiBjdCA1NTggLTM5NyA1NDggLTM4OSA1MzcgLTM3NiBjdCA1MzAgLTM2OCA1MTYgLTM0OSA0OTYgLTMxNyBjdCAKKzQ5NiAtMzE3IDQ5NiAtMzE3IDI4NCA5IGN0IDI4NCA5IDI4NCA5IDI3MyA5IGN0IDI3MyA5IDI3MyA5IDMwNyAtMzE3IGN0IDMwNyAtMzE3IDMwNyAtMzE3IDk3IDkgY3QgCis5NyA5IDk3IDkgODYgOSBjdCBwIGVmCitwb20KK2dyCitncworcHVtCis3NjcgNTU2IHQKKzE2OCAxMzEgbSAgMTI3IDk4IDk2IDUwIDc1IC0xMiBjdCA1NiAtNjYgNDcgLTEyMyA0NyAtMTgzIGN0IDQ3IC0yNDEgNTYgLTI5OCA3NSAtMzU0IGN0IAorOTggLTQxOSAxMjggLTQ2NyAxNjggLTQ5NyBjdCAxNjggLTQ5NyAxNjggLTQ5NyAxNjggLTQ4MSBjdCAxMzkgLTQ1NCAxMTYgLTQwOCAxMDEgLTM0MiBjdCAKKzg5IC0yOTAgODMgLTIzNyA4MyAtMTgzIGN0IDgzIC0xMjkgODkgLTc2IDEwMSAtMjQgY3QgMTE2IDQzIDEzOSA4OSAxNjggMTE2IGN0IDE2OCAxMTYgMTY4IDExNiAxNjggMTMxIGN0IAorcCBlZgorcG9tCitncgorZ3MKK3B1bQorMTA1OCA1NTYgdAorNTQgLTI3MyBtICA1NCAtMjczIDU0IC0yNzMgMjQ5IC0yNzMgY3QgMjQ5IC0yNzMgMjQ5IC0yNzMgMjQ5IC0yNjUgY3QgMjQ5IC0yNjUgMjQ5IC0yNjUgMzUgLTQyIGN0IAorMzUgLTQyIDM1IC00MiAxMjUgLTQyIGN0IDE0NyAtNDIgMTYxIC00MyAxNjYgLTQ0IGN0IDE3MiAtNDYgMTc4IC01MCAxODMgLTU1IGN0IAorMTg3IC02MCAxOTMgLTcwIDE5OSAtODQgY3QgMTk5IC04NCAxOTkgLTg0IDIxMCAtODQgY3QgMjEwIC04NCAyMTAgLTg0IDE4MyAwIGN0IAorMTgzIDAgMTgzIDAgLTE4IDAgY3QgLTE4IDAgLTE4IDAgLTE4IC05IGN0IC0xOCAtOSAtMTggLTkgMTk2IC0yMzIgY3QgMTk2IC0yMzIgMTk2IC0yMzIgMTA5IC0yMzIgY3QgCis5MCAtMjMyIDc4IC0yMzIgNzQgLTIzMSBjdCA2OCAtMjI5IDYzIC0yMjYgNTcgLTIyMSBjdCA1MSAtMjE2IDQ1IC0yMDggMzkgLTE5NiBjdCAKKzM5IC0xOTYgMzkgLTE5NiAyOCAtMTk2IGN0IDI4IC0xOTYgMjggLTE5NiA1NCAtMjczIGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzEzNzYgNTU2IHQKKzMzIDExNiBtICA2MSA5MCA4MiA0NiA5NyAtMTggY3QgMTEwIC03MCAxMTcgLTEyMCAxMTcgLTE3MCBjdCAxMTcgLTIyOSAxMTEgLTI4NCAxMDAgLTMzNSBjdCAKKzg2IC00MDQgNjMgLTQ1MyAzMyAtNDgxIGN0IDMzIC00ODEgMzMgLTQ4MSAzMyAtNDk3IGN0IDcyIC00NjggMTAzIC00MjEgMTI1IC0zNTQgY3QgCisxNDMgLTI5OSAxNTMgLTI0MSAxNTMgLTE4MyBjdCAxNTMgLTEyMyAxNDQgLTY2IDEyNSAtMTEgY3QgMTAzIDU0IDcyIDEwMiAzMyAxMzEgY3QgCiszMyAxMzEgMzMgMTMxIDMzIDExNiBjdCBwIGVmCitwb20KK2dyCitncgorZ3IKK2dyCitncgorZ3MKKzEyMzM1IDE1NjQwIG0gMTM2MDYgMTU2NDAgbCAxMzYwNiAxNjQzNSBsIDEyMzM1IDE2NDM1IGwgMTIzMzUgMTU2NDAgbCBlb2NsaXAgbmV3cGF0aAorZ3MKK3RtIHNldG1hdHJpeAorOTg5NSAxMjU5NCB0IAorMSAxIHMgCitncworZ3MKKzAgMCBtIDEyNzEgMCBsIDEyNzEgNzk1IGwgMCA3OTUgbCAwIDAgbCBlb2NsaXAgbmV3cGF0aAorZ3MKK3B1bQorMTU5IDU1NiB0CiszMzEgLTI2MSBtICAzMzEgLTI2MSAzMzEgLTI2MSAzMjIgLTIyOSBjdCAzMjIgLTIyOSAzMjIgLTIyOSAyNzAgLTIyOSBjdCAyNzQgLTIxOCAyNzYgLTIwNyAyNzYgLTE5OCBjdCAKKzI3NiAtMTcwIDI2NCAtMTQ2IDI0MSAtMTI0IGN0IDIxNyAtMTAzIDE4NSAtOTEgMTQ0IC04OSBjdCAxMjIgLTgyIDEwNiAtNzUgOTUgLTY1IGN0IAorOTEgLTYyIDg5IC01OSA4OSAtNTUgY3QgODkgLTUxIDkxIC00NyA5NSAtNDQgY3QgOTggLTQwIDEwOCAtMzcgMTIzIC0zMyBjdCAxMjMgLTMzIDEyMyAtMzMgMTgzIC0yMCBjdCAKKzIxNiAtMTIgMjM4IC0zIDI0OCA4IGN0IDI1OSAxOSAyNjQgMzEgMjY0IDQ2IGN0IDI2NCA2MyAyNTggNzggMjQ1IDkyIGN0IDIzMyAxMDYgMjE1IDExNyAxOTAgMTI1IGN0IAorMTY2IDEzMyAxNDAgMTM3IDExMSAxMzcgY3QgODUgMTM3IDYyIDEzNCA0MSAxMjggY3QgMjAgMTIyIDUgMTE0IC00IDEwMyBjdCAtMTMgOTMgLTE4IDgyIC0xOCA3MSBjdCAKKy0xOCA2MyAtMTUgNTMgLTkgNDQgY3QgLTMgMzQgNCAyNiAxMyAyMCBjdCAxOSAxNiAzNSA3IDYxIC04IGN0IDUyIC0xNSA0NyAtMjMgNDcgLTMyIGN0IAorNDcgLTQwIDUxIC00OSA1OSAtNTggY3QgNjcgLTY4IDg1IC03OCAxMTEgLTg5IGN0IDg5IC05MyA3MSAtMTAzIDU4IC0xMTggY3QgNDUgLTEzMiAzOSAtMTQ5IDM5IC0xNjcgY3QgCiszOSAtMTk2IDUyIC0yMjIgNzggLTI0NSBjdCAxMDQgLTI2OCAxMzggLTI4MCAxODEgLTI4MCBjdCAxOTYgLTI4MCAyMDkgLTI3OCAyMTkgLTI3NSBjdCAKKzIyOSAtMjcyIDIzOSAtMjY4IDI0OCAtMjYxIGN0IDI0OCAtMjYxIDI0OCAtMjYxIDMzMSAtMjYxIGN0IHAKKzIyNSAtMjExIG0gIDIyNSAtMjI4IDIyMCAtMjQwIDIxMSAtMjUwIGN0IDIwMSAtMjU5IDE4OSAtMjY0IDE3MyAtMjY0IGN0IDE0OSAtMjY0IDEyOSAtMjUyIDExNCAtMjI5IGN0IAorOTggLTIwNiA5MCAtMTgyIDkwIC0xNTcgY3QgOTAgLTE0MSA5NSAtMTI4IDEwNSAtMTE4IGN0IDExNSAtMTA4IDEyNyAtMTAzIDE0MiAtMTAzIGN0IAorMTUzIC0xMDMgMTY0IC0xMDYgMTc0IC0xMTIgY3QgMTg1IC0xMTggMTk0IC0xMjYgMjAxIC0xMzYgY3QgMjA5IC0xNDcgMjE0IC0xNjAgMjE5IC0xNzYgY3QgCisyMjMgLTE5MiAyMjUgLTIwNCAyMjUgLTIxMSBjdCBwCis3NCAwIG0gIDU3IDggNDUgMTggMzYgMzAgY3QgMjcgNDIgMjMgNTMgMjMgNjUgY3QgMjMgNzkgMjkgOTAgNDIgOTkgY3QgNTkgMTEyIDg1IDExOCAxMjAgMTE4IGN0IAorMTQ5IDExOCAxNzUgMTEzIDE5NiAxMDMgY3QgMjE3IDkzIDIyNyA4MCAyMjcgNjQgY3QgMjI3IDU2IDIyMyA0OCAyMTUgNDEgY3QgMjA4IDM0IDE5MyAyOCAxNzAgMjQgY3QgCisxNTggMjEgMTI2IDEzIDc0IDAgY3QgcCBlZgorcG9tCitncgorZ3MKK3B1bQorNTI5IDcxNCB0CisxMzQgLTE2OCBtICAxMzQgLTE2OCAxMzQgLTE2OCAxMjQgLTExMSBjdCAxMjQgLTExMSAxMjQgLTExMSAxMTcgLTExMSBjdCAxMTYgLTEyOCAxMTMgLTE0MCAxMDcgLTE0OCBjdCAKKzEwMSAtMTU1IDkzIC0xNTkgODQgLTE1OSBjdCA3NyAtMTU5IDcxIC0xNTcgNjYgLTE1MyBjdCA2MiAtMTQ4IDYwIC0xNDMgNjAgLTEzNyBjdCAKKzYwIC0xMzMgNjEgLTEyOSA2MyAtMTI2IGN0IDY0IC0xMjIgNjggLTExNyA3NCAtMTEwIGN0IDg5IC05MyA5OSAtNzkgMTAzIC03MCBjdCAKKzEwOCAtNjIgMTEwIC01MyAxMTAgLTQ1IGN0IDExMCAtMzIgMTA1IC0yMSA5NCAtMTEgY3QgODQgLTEgNzEgNCA1NSA0IGN0IDQ2IDQgMzYgMiAyNCAtMyBjdCAKKzIwIC00IDE3IC01IDE1IC01IGN0IDEwIC01IDYgLTIgMyA0IGN0IDMgNCAzIDQgLTQgNCBjdCAtNCA0IC00IDQgNiAtNTYgY3QgNiAtNTYgNiAtNTYgMTMgLTU2IGN0IAorMTQgLTM3IDE4IC0yNCAyNSAtMTcgY3QgMzIgLTkgNDEgLTUgNTMgLTUgY3QgNjMgLTUgNzAgLTggNzYgLTEzIGN0IDgxIC0xOCA4NCAtMjUgODQgLTMyIGN0IAorODQgLTM3IDgzIC00MiA4MSAtNDYgY3QgNzggLTUzIDcxIC02MyA2MCAtNzYgY3QgNDkgLTg5IDQyIC05OSAzOSAtMTA2IGN0IDM2IC0xMTIgMzQgLTExOSAzNCAtMTI1IGN0IAorMzQgLTEzNyAzOCAtMTQ3IDQ3IC0xNTYgY3QgNTUgLTE2NCA2NiAtMTY4IDgwIC0xNjggY3QgODMgLTE2OCA4NyAtMTY4IDkwIC0xNjcgY3QgCis5MiAtMTY3IDk2IC0xNjUgMTAyIC0xNjMgY3QgMTA4IC0xNjAgMTEyIC0xNTkgMTE0IC0xNTkgY3QgMTE5IC0xNTkgMTI0IC0xNjIgMTI3IC0xNjggY3QgCisxMjcgLTE2OCAxMjcgLTE2OCAxMzQgLTE2OCBjdCBwIGVmCiszMzEgLTE2NCBtICAzMzEgLTE2NCAzMzEgLTE2NCAyOTcgLTUyIGN0IDI5MiAtMzUgMjg5IC0yNCAyODkgLTIwIGN0IDI4OSAtMTggMjkwIC0xNiAyOTAgLTE1IGN0IAorMjkxIC0xNCAyOTIgLTE0IDI5MyAtMTQgY3QgMjk0IC0xNCAyOTYgLTE1IDI5OCAtMTcgY3QgMzAwIC0xOCAzMDYgLTI2IDMxNCAtMzkgY3QgCiszMTQgLTM5IDMxNCAtMzkgMzE5IC0zNSBjdCAzMTEgLTIwIDMwMiAtOSAyOTMgLTIgY3QgMjg3IDIgMjgxIDQgMjc2IDQgY3QgMjcxIDQgMjY4IDMgMjY2IDAgY3QgCisyNjMgLTMgMjYyIC02IDI2MiAtMTAgY3QgMjYyIC0xNSAyNjMgLTIwIDI2NCAtMjcgY3QgMjY3IC0zNSAyNzMgLTU1IDI4MiAtODYgY3QgCisyNjAgLTUxIDI0MiAtMjggMjI3IC0xNSBjdCAyMTIgLTIgMTk4IDQgMTg2IDQgY3QgMTgwIDQgMTc1IDIgMTcxIC0yIGN0IDE2NyAtNiAxNjUgLTExIDE2NSAtMTcgY3QgCisxNjUgLTI2IDE2OSAtNDAgMTc1IC01OSBjdCAxNzUgLTU5IDE3NSAtNTkgMTk0IC0xMTcgY3QgMTk5IC0xMzAgMjAyIC0xMzkgMjAyIC0xNDIgY3QgCisyMDIgLTE0NCAyMDEgLTE0NSAyMDAgLTE0NiBjdCAxOTggLTE0NyAxOTcgLTE0OCAxOTYgLTE0OCBjdCAxOTIgLTE0OCAxODkgLTE0NyAxODYgLTE0NSBjdCAKKzE4MyAtMTQzIDE3NiAtMTM2IDE2NSAtMTI0IGN0IDE2NSAtMTI0IDE2NSAtMTI0IDE1OSAtMTI4IGN0IDE2OSAtMTQzIDE4MCAtMTUzIDE5MSAtMTYwIGN0IAorMjAwIC0xNjUgMjA4IC0xNjggMjE1IC0xNjggY3QgMjIwIC0xNjggMjI0IC0xNjYgMjI3IC0xNjMgY3QgMjMwIC0xNjAgMjMyIC0xNTUgMjMyIC0xNTAgY3QgCisyMzIgLTE0MyAyMjkgLTEzMSAyMjMgLTExNCBjdCAyMjMgLTExNCAyMjMgLTExNCAyMDMgLTU1IGN0IDE5NyAtMzkgMTk0IC0yOSAxOTQgLTI0IGN0IAorMTk0IC0yMiAxOTUgLTIwIDE5NyAtMTkgY3QgMTk5IC0xNyAyMDEgLTE2IDIwMyAtMTYgY3QgMjA4IC0xNiAyMTMgLTE4IDIyMCAtMjMgY3QgCisyMjcgLTI3IDIzNiAtMzYgMjQ3IC01MCBjdCAyNTkgLTY0IDI2OCAtNzcgMjc1IC05MCBjdCAyODIgLTEwMiAyOTAgLTEyMiAyOTkgLTE0OSBjdCAKKzI5OSAtMTQ5IDI5OSAtMTQ5IDMwNCAtMTY0IGN0IDMwNCAtMTY0IDMwNCAtMTY0IDMzMSAtMTY0IGN0IHAgZWYKKzQ1MyAtMjY1IG0gIDQ1MyAtMjY1IDQ1MyAtMjY1IDQxNSAtMTM2IGN0IDQyNyAtMTQ4IDQzNyAtMTU3IDQ0NSAtMTYxIGN0IDQ1NCAtMTY2IDQ2MyAtMTY4IDQ3MiAtMTY4IGN0IAorNDg1IC0xNjggNDk2IC0xNjQgNTA0IC0xNTQgY3QgNTEzIC0xNDUgNTE3IC0xMzMgNTE3IC0xMTggY3QgNTE3IC05OCA1MTEgLTc4IDUwMCAtNTkgY3QgCis0ODkgLTM5IDQ3NSAtMjMgNDU5IC0xMiBjdCA0NDIgLTIgNDI1IDQgNDA5IDQgY3QgMzkxIDQgMzcyIC0zIDM1MyAtMTcgY3QgMzUzIC0xNyAzNTMgLTE3IDQwOSAtMjEzIGN0IAorNDE0IC0yMjggNDE2IC0yMzYgNDE2IC0yMzkgY3QgNDE2IC0yNDIgNDE1IC0yNDQgNDEzIC0yNDYgY3QgNDEwIC0yNDggNDA2IC0yNDkgNDAwIC0yNDkgY3QgCiszOTcgLTI0OSAzOTMgLTI0OSAzODcgLTI0OCBjdCAzODcgLTI0OCAzODcgLTI0OCAzODcgLTI1NSBjdCAzODcgLTI1NSAzODcgLTI1NSA0NTMgLTI2NSBjdCAKK3AKKzM4MCAtMTUgbSAgMzkyIC04IDQwMyAtNSA0MTIgLTUgY3QgNDIyIC01IDQzMyAtOSA0NDQgLTE3IGN0IDQ1NiAtMjUgNDY1IC0zOCA0NzQgLTU3IGN0IAorNDgyIC03NiA0ODYgLTk1IDQ4NiAtMTE0IGN0IDQ4NiAtMTI1IDQ4MyAtMTM0IDQ3OCAtMTQwIGN0IDQ3MyAtMTQ3IDQ2NiAtMTUwIDQ1OSAtMTUwIGN0IAorNDQ4IC0xNTAgNDM3IC0xNDUgNDI3IC0xMzYgY3QgNDE3IC0xMjcgNDA5IC0xMTQgNDA0IC05NyBjdCA0MDQgLTk3IDQwNCAtOTcgMzgwIC0xNSBjdCAKK3AgZWYKKzY0OCAtMTY0IG0gIDY0OCAtMTY0IDY0OCAtMTY0IDY0NSAtMTUwIGN0IDY0NSAtMTUwIDY0NSAtMTUwIDYxNyAtMTUwIGN0IDYxNyAtMTUwIDYxNyAtMTUwIDU5NCAtNjkgY3QgCis1ODQgLTM0IDU3NCAtNiA1NjUgMTMgY3QgNTUyIDQxIDUzOCA2MCA1MjMgNzAgY3QgNTExIDc4IDUwMCA4MiA0ODggODIgY3QgNDgxIDgyIDQ3NCA4MCA0NjkgNzUgY3QgCis0NjUgNzIgNDYzIDY4IDQ2MyA2MyBjdCA0NjMgNTkgNDY1IDU1IDQ2OCA1MiBjdCA0NzEgNDkgNDc1IDQ4IDQ3OSA0OCBjdCA0ODMgNDggNDg1IDQ5IDQ4OCA1MSBjdCAKKzQ5MCA1MyA0OTEgNTYgNDkxIDU4IGN0IDQ5MSA2MSA0OTAgNjQgNDg4IDY2IGN0IDQ4NiA2OCA0ODUgNjkgNDg1IDcwIGN0IDQ4NSA3MSA0ODUgNzIgNDg2IDczIGN0IAorNDg3IDc0IDQ4OSA3NCA0OTEgNzQgY3QgNDk3IDc0IDUwMiA3MiA1MDggNjkgY3QgNTE0IDY2IDUxOSA2MSA1MjQgNTQgY3QgNTI4IDQ4IDUzMiAzOCA1MzcgMjYgY3QgCis1MzggMjEgNTQzIDQgNTUxIC0yNSBjdCA1NTEgLTI1IDU1MSAtMjUgNTg4IC0xNTAgY3QgNTg4IC0xNTAgNTg4IC0xNTAgNTUxIC0xNTAgY3QgCis1NTEgLTE1MCA1NTEgLTE1MCA1NTQgLTE2NCBjdCA1NjUgLTE2NCA1NzMgLTE2NSA1NzggLTE2NiBjdCA1ODIgLTE2OCA1ODYgLTE3MCA1OTAgLTE3NCBjdCAKKzU5NCAtMTc4IDU5OSAtMTg2IDYwNCAtMTk3IGN0IDYxMSAtMjEyIDYxOCAtMjI0IDYyNCAtMjMyIGN0IDYzMyAtMjQzIDY0MiAtMjUxIDY1MiAtMjU3IGN0IAorNjYxIC0yNjIgNjcxIC0yNjUgNjc5IC0yNjUgY3QgNjg4IC0yNjUgNjk1IC0yNjMgNzAxIC0yNTggY3QgNzA2IC0yNTMgNzA5IC0yNDggNzA5IC0yNDIgY3QgCis3MDkgLTIzOCA3MDggLTIzNCA3MDUgLTIzMSBjdCA3MDIgLTIyOCA2OTggLTIyNyA2OTQgLTIyNyBjdCA2OTAgLTIyNyA2ODcgLTIyOCA2ODUgLTIzMCBjdCAKKzY4MiAtMjMzIDY4MSAtMjM1IDY4MSAtMjM4IGN0IDY4MSAtMjQwIDY4MiAtMjQzIDY4NCAtMjQ1IGN0IDY4NiAtMjQ4IDY4NyAtMjUwIDY4NyAtMjUxIGN0IAorNjg3IC0yNTMgNjg2IC0yNTQgNjg1IC0yNTUgY3QgNjg0IC0yNTYgNjgyIC0yNTcgNjc5IC0yNTcgY3QgNjcyIC0yNTcgNjY1IC0yNTQgNjU5IC0yNDkgY3QgCis2NTEgLTI0MiA2NDQgLTIzMiA2MzggLTIxNyBjdCA2MzUgLTIxMCA2MjkgLTE5MiA2MjEgLTE2NCBjdCA2MjEgLTE2NCA2MjEgLTE2NCA2NDggLTE2NCBjdCAKK3AgZWYKK3BvbQorZ3IKK2dyCitncgorZ3IKK2dyCisxMzgzNSAxNjYwNSBtICAxMzI3MyAxNjc5MyBsICAxMzI3MyAxNjQxOCBsICAxMzgzNSAxNjYwNSBsICBwIGVmCisxMjMzNSAxNjU1OCBtICAxMzA4NSAxNjU1OCBsICAxMzA4NSAxNjU4MyBsICAxMzA4NSAxNjYwOCBsICAxMjMzNSAxNjYwOCBsIAorMTIzMzUgMTY1ODMgbCAgMTIzMzUgMTY1NTggbCAgcCBlZgorMTMwODUgMTY1ODMgbSAgMTMwODUgMTY1NTggbCAgMTMwODkgMTY1NTggbCAgMTMwOTQgMTY1NjAgbCAgMTMwOTcgMTY1NjEgbCAKKzEzMTAxIDE2NTY0IGwgIDEzMTA0IDE2NTY3IGwgIDEzMTA3IDE2NTcwIGwgIDEzMTA4IDE2NTc0IGwgIDEzMTEwIDE2NTc5IGwgCisxMzExMCAxNjU4MyBsICAxMzExMCAxNjU4MyBsICAxMzA4NSAxNjU4MyBsICBwIGVmCisxMzExMCAxNjU4MyBtICAxMzExMCAxNjYwNSBsICAxMzA4NSAxNjYwNSBsICAxMzA2MCAxNjYwNSBsICAxMzA2MCAxNjU4MyBsIAorMTMwODUgMTY1ODMgbCAgMTMxMTAgMTY1ODMgbCAgcCBlZgorMTMwODUgMTY2MDUgbSAgMTMwODUgMTY2MzAgbCAgMTMwODEgMTY2MzAgbCAgMTMwNzYgMTY2MjggbCAgMTMwNzMgMTY2MjcgbCAKKzEzMDY5IDE2NjI0IGwgIDEzMDY2IDE2NjIxIGwgIDEzMDYzIDE2NjE4IGwgIDEzMDYyIDE2NjE0IGwgIDEzMDYwIDE2NjA5IGwgCisxMzA2MCAxNjYwNSBsICAxMzA2MCAxNjYwNSBsICAxMzA4NSAxNjYwNSBsICBwIGVmCisxMzA4NSAxNjU4MCBtICAxMzM4NSAxNjU4MCBsICAxMzM4NSAxNjYwNSBsICAxMzM4NSAxNjYzMCBsICAxMzA4NSAxNjYzMCBsIAorMTMwODUgMTY2MDUgbCAgMTMwODUgMTY1ODAgbCAgcCBlZgorZ3MKK2dzCitwdW0KKzUyNDAgOTA2OSB0CisyOSAtMjM0IG0gIDI5IC0yMzQgMjkgLTIzNCAxMjMgLTI0OSBjdCAxMjMgLTI0OSAxMjMgLTI0OSA4NCAtMTE1IGN0IDExNyAtMTcwIDE0NiAtMjA4IDE3MyAtMjMwIGN0IAorMTg4IC0yNDMgMjAwIC0yNDkgMjA5IC0yNDkgY3QgMjE1IC0yNDkgMjIwIC0yNDcgMjI0IC0yNDQgY3QgMjI3IC0yNDAgMjI5IC0yMzUgMjI5IC0yMjggY3QgCisyMjkgLTIxNiAyMjYgLTIwNCAyMjAgLTE5MyBjdCAyMTUgLTE4NSAyMDkgLTE4MSAyMDEgLTE4MSBjdCAxOTYgLTE4MSAxOTMgLTE4MiAxOTAgLTE4NSBjdCAKKzE4NyAtMTg4IDE4NSAtMTkyIDE4NCAtMTk4IGN0IDE4NCAtMjAxIDE4MyAtMjA0IDE4MSAtMjA1IGN0IDE4MCAtMjA2IDE3OCAtMjA3IDE3NiAtMjA3IGN0IAorMTczIC0yMDcgMTcwIC0yMDYgMTY3IC0yMDUgY3QgMTYzIC0yMDIgMTU1IC0xOTUgMTQ2IC0xODMgY3QgMTMwIC0xNjUgMTE0IC0xNDIgOTYgLTExMyBjdCAKKzg4IC0xMDEgODEgLTg4IDc2IC03MiBjdCA2OCAtNTEgNjQgLTM5IDYzIC0zNSBjdCA2MyAtMzUgNjMgLTM1IDU0IDAgY3QgNTQgMCA1NCAwIDEyIDAgY3QgCisxMiAwIDEyIDAgNjEgLTE3MSBjdCA2NyAtMTkxIDcwIC0yMDUgNzAgLTIxNCBjdCA3MCAtMjE3IDY5IC0yMjAgNjYgLTIyMiBjdCA2MiAtMjI1IDU4IC0yMjYgNTIgLTIyNiBjdCAKKzQ4IC0yMjYgNDIgLTIyNiAzMiAtMjI0IGN0IDMyIC0yMjQgMzIgLTIyNCAyOSAtMjM0IGN0IHAgZWYKKzM0NiAtMzU5IG0gIDM1MyAtMzU5IDM2MCAtMzU2IDM2NSAtMzUxIGN0IDM3MCAtMzQ2IDM3MyAtMzM5IDM3MyAtMzMyIGN0IDM3MyAtMzI0IDM3MCAtMzE4IDM2NSAtMzEyIGN0IAorMzU5IC0zMDcgMzUzIC0zMDQgMzQ2IC0zMDQgY3QgMzM4IC0zMDQgMzMyIC0zMDcgMzI2IC0zMTIgY3QgMzIxIC0zMTggMzE4IC0zMjQgMzE4IC0zMzIgY3QgCiszMTggLTMzOSAzMjEgLTM0NiAzMjYgLTM1MSBjdCAzMzEgLTM1NiAzMzggLTM1OSAzNDYgLTM1OSBjdCBwCiszNTggLTI1MSBtICAzNTggLTI1MSAzNTggLTI1MSAzMDAgLTU1IGN0IDI5NiAtNDIgMjk0IC0zNCAyOTQgLTMxIGN0IDI5NCAtMjkgMjk0IC0yNiAyOTYgLTI1IGN0IAorMjk4IC0yMyAyOTkgLTIyIDMwMiAtMjIgY3QgMzA0IC0yMiAzMDcgLTIzIDMxMSAtMjYgY3QgMzIwIC0zNCAzMzAgLTQ2IDMzOSAtNjEgY3QgCiszMzkgLTYxIDMzOSAtNjEgMzQ5IC01NSBjdCAzMzcgLTM2IDMyMyAtMjAgMzA3IC04IGN0IDI5NSAxIDI4NCA2IDI3MyA2IGN0IDI2NiA2IDI2MCA0IDI1NiAtMSBjdCAKKzI1MSAtNSAyNDkgLTEwIDI0OSAtMTcgY3QgMjQ5IC0yNCAyNTEgLTM1IDI1NiAtNTIgY3QgMjU2IC01MiAyNTYgLTUyIDI5NSAtMTc3IGN0IAorMzAxIC0xOTcgMzA0IC0yMTAgMzA0IC0yMTUgY3QgMzA0IC0yMTkgMzAzIC0yMjMgMzAwIC0yMjUgY3QgMjk3IC0yMjggMjkzIC0yMjkgMjg4IC0yMjkgY3QgCisyODQgLTIyOSAyNzYgLTIyOCAyNjMgLTIyNiBjdCAyNjMgLTIyNiAyNjMgLTIyNiAyNjMgLTIzNiBjdCAyNjMgLTIzNiAyNjMgLTIzNiAzNTggLTI1MSBjdCAKK3AgZWYKKzUwMCAtMjQ5IG0gIDUwMCAtMjQ5IDUwMCAtMjQ5IDQ2NCAtMTIzIGN0IDUwMSAtMTc0IDUyOSAtMjA4IDU0OSAtMjI1IGN0IDU2OCAtMjQxIDU4NyAtMjQ5IDYwNSAtMjQ5IGN0IAorNjE1IC0yNDkgNjIzIC0yNDYgNjMwIC0yMzkgY3QgNjM2IC0yMzMgNjM5IC0yMjQgNjM5IC0yMTQgY3QgNjM5IC0yMDMgNjM2IC0xODggNjMwIC0xNzAgY3QgCis2MzAgLTE3MCA2MzAgLTE3MCA1OTMgLTU1IGN0IDU4OSAtNDIgNTg2IC0zNCA1ODYgLTMxIGN0IDU4NiAtMjggNTg3IC0yNiA1ODggLTI1IGN0IAorNTkwIC0yMyA1OTEgLTIyIDU5MyAtMjIgY3QgNTk1IC0yMiA1OTcgLTIzIDYwMCAtMjUgY3QgNjA5IC0zMyA2MTkgLTQ1IDYyOSAtNjAgY3QgCis2MjkgLTYwIDYyOSAtNjAgNjM4IC01NSBjdCA2MjEgLTMxIDYwNiAtMTQgNTkxIC00IGN0IDU4MSAzIDU3MSA2IDU2MyA2IGN0IDU1NyA2IDU1MSA0IDU0OCAwIGN0IAorNTQ0IC00IDU0MiAtOSA1NDIgLTE2IGN0IDU0MiAtMjUgNTQ1IC00MCA1NTIgLTYxIGN0IDU1MiAtNjEgNTUyIC02MSA1ODkgLTE3MiBjdCAKKzU5NCAtMTg1IDU5NiAtMTk2IDU5NiAtMjA0IGN0IDU5NiAtMjA3IDU5NSAtMjEwIDU5MiAtMjEzIGN0IDU5MCAtMjE1IDU4NiAtMjE2IDU4MyAtMjE2IGN0IAorNTc3IC0yMTYgNTcwIC0yMTQgNTYyIC0yMDkgY3QgNTQ4IC0yMDEgNTMyIC0xODggNTE2IC0xNjkgY3QgNTAwIC0xNTAgNDgzIC0xMjYgNDY1IC05NyBjdCAKKzQ1NiAtODEgNDQ4IC02NCA0NDIgLTQ2IGN0IDQ0MiAtNDYgNDQyIC00NiA0MjkgMCBjdCA0MjkgMCA0MjkgMCAzODggMCBjdCAzODggMCAzODggMCA0MzggLTE3MyBjdCAKKzQ0NCAtMTkzIDQ0NyAtMjA2IDQ0NyAtMjEwIGN0IDQ0NyAtMjE0IDQ0NSAtMjE3IDQ0MiAtMjIwIGN0IDQzOSAtMjIzIDQzNSAtMjI1IDQzMCAtMjI1IGN0IAorNDI4IC0yMjUgNDI0IC0yMjQgNDE4IC0yMjQgY3QgNDE4IC0yMjQgNDE4IC0yMjQgNDA4IC0yMjIgY3QgNDA4IC0yMjIgNDA4IC0yMjIgNDA2IC0yMzIgY3QgCis0MDYgLTIzMiA0MDYgLTIzMiA1MDAgLTI0OSBjdCBwIGVmCis5NTQgLTIzMiBtICA5NTQgLTIzMiA5NTQgLTIzMiA5NDYgLTIwNCBjdCA5NDYgLTIwNCA5NDYgLTIwNCA5MDAgLTIwNCBjdCA5MDMgLTE5NCA5MDUgLTE4NSA5MDUgLTE3NiBjdCAKKzkwNSAtMTUyIDg5NSAtMTMwIDg3NCAtMTExIGN0IDg1MyAtOTIgODI0IC04MSA3ODggLTc5IGN0IDc2OCAtNzMgNzU0IC02NiA3NDQgLTU4IGN0IAorNzQxIC01NSA3MzkgLTUyIDczOSAtNDkgY3QgNzM5IC00NSA3NDEgLTQyIDc0NCAtMzkgY3QgNzQ3IC0zNiA3NTYgLTMzIDc3MCAtMjkgY3QgCis3NzAgLTI5IDc3MCAtMjkgODIyIC0xNyBjdCA4NTEgLTExIDg3MSAtMyA4ODAgNyBjdCA4ODkgMTcgODk0IDI4IDg5NCA0MSBjdCA4OTQgNTYgODg4IDcwIDg3NyA4MiBjdCAKKzg2NiA5NSA4NTAgMTA0IDgyOSAxMTEgY3QgODA3IDExOCA3ODQgMTIyIDc1OCAxMjIgY3QgNzM1IDEyMiA3MTQgMTE5IDY5NSAxMTQgY3QgCis2NzcgMTA4IDY2MyAxMDEgNjU1IDkyIGN0IDY0NyA4MyA2NDMgNzMgNjQzIDY0IGN0IDY0MyA1NiA2NDYgNDggNjUxIDM5IGN0IDY1NiAzMSA2NjMgMjQgNjcxIDE4IGN0IAorNjc2IDE1IDY5MCA2IDcxNCAtNyBjdCA3MDUgLTEzIDcwMSAtMjEgNzAxIC0yOCBjdCA3MDEgLTM2IDcwNSAtNDQgNzEyIC01MiBjdCA3MTkgLTYwIDczNCAtNjkgNzU4IC03OSBjdCAKKzczOCAtODMgNzIzIC05MSA3MTEgLTEwNCBjdCA3MDAgLTExNyA2OTQgLTEzMiA2OTQgLTE0OCBjdCA2OTQgLTE3NCA3MDYgLTE5NyA3MjkgLTIxOCBjdCAKKzc1MiAtMjM5IDc4MiAtMjQ5IDgyMCAtMjQ5IGN0IDgzNCAtMjQ5IDg0NiAtMjQ4IDg1NSAtMjQ1IGN0IDg2MyAtMjQyIDg3MiAtMjM4IDg4MCAtMjMyIGN0IAorODgwIC0yMzIgODgwIC0yMzIgOTU0IC0yMzIgY3QgcAorODYwIC0xODggbSAgODYwIC0yMDIgODU2IC0yMTQgODQ3IC0yMjIgY3QgODM5IC0yMzEgODI4IC0yMzUgODE0IC0yMzUgY3QgNzkyIC0yMzUgNzc0IC0yMjUgNzYwIC0yMDQgY3QgCis3NDYgLTE4MyA3MzkgLTE2MiA3MzkgLTEzOSBjdCA3MzkgLTEyNSA3NDQgLTExMyA3NTMgLTEwNCBjdCA3NjIgLTk1IDc3MiAtOTEgNzg1IC05MSBjdCAKKzc5NSAtOTEgODA1IC05NCA4MTUgLTk5IGN0IDgyNCAtMTA0IDgzMiAtMTEyIDgzOSAtMTIxIGN0IDg0NSAtMTMwIDg1MCAtMTQyIDg1NCAtMTU3IGN0IAorODU4IC0xNzEgODYwIC0xODEgODYwIC0xODggY3QgcAorNzI2IDAgbSAgNzEwIDcgNjk5IDE2IDY5MSAyNyBjdCA2ODMgMzcgNjc5IDQ4IDY3OSA1OCBjdCA2NzkgNzAgNjg1IDgwIDY5NiA4OCBjdCAKKzcxMSA5OSA3MzUgMTA1IDc2NSAxMDUgY3QgNzkyIDEwNSA4MTQgMTAxIDgzMyA5MiBjdCA4NTIgODMgODYxIDcxIDg2MSA1NyBjdCA4NjEgNTAgODU4IDQzIDg1MSAzNyBjdCAKKzg0NCAzMCA4MzEgMjUgODExIDIxIGN0IDgwMCAxOSA3NzIgMTIgNzI2IDAgY3QgcCBlZgorMTA3MCAtMzU5IG0gIDEwNzcgLTM1OSAxMDg0IC0zNTYgMTA4OSAtMzUxIGN0IDEwOTQgLTM0NiAxMDk3IC0zMzkgMTA5NyAtMzMyIGN0IAorMTA5NyAtMzI0IDEwOTQgLTMxOCAxMDg5IC0zMTIgY3QgMTA4MyAtMzA3IDEwNzcgLTMwNCAxMDcwIC0zMDQgY3QgMTA2MiAtMzA0IDEwNTYgLTMwNyAxMDUwIC0zMTIgY3QgCisxMDQ1IC0zMTggMTA0MiAtMzI0IDEwNDIgLTMzMiBjdCAxMDQyIC0zMzkgMTA0NSAtMzQ2IDEwNTAgLTM1MSBjdCAxMDU1IC0zNTYgMTA2MiAtMzU5IDEwNzAgLTM1OSBjdCAKK3AKKzEwODIgLTI1MSBtICAxMDgyIC0yNTEgMTA4MiAtMjUxIDEwMjQgLTU1IGN0IDEwMjAgLTQyIDEwMTggLTM0IDEwMTggLTMxIGN0IDEwMTggLTI5IDEwMTggLTI2IDEwMjAgLTI1IGN0IAorMTAyMiAtMjMgMTAyMyAtMjIgMTAyNiAtMjIgY3QgMTAyOCAtMjIgMTAzMSAtMjMgMTAzNSAtMjYgY3QgMTA0NCAtMzQgMTA1NCAtNDYgMTA2MyAtNjEgY3QgCisxMDYzIC02MSAxMDYzIC02MSAxMDczIC01NSBjdCAxMDYxIC0zNiAxMDQ3IC0yMCAxMDMxIC04IGN0IDEwMTkgMSAxMDA4IDYgOTk3IDYgY3QgCis5OTAgNiA5ODQgNCA5ODAgLTEgY3QgOTc1IC01IDk3MyAtMTAgOTczIC0xNyBjdCA5NzMgLTI0IDk3NSAtMzUgOTgwIC01MiBjdCA5ODAgLTUyIDk4MCAtNTIgMTAxOSAtMTc3IGN0IAorMTAyNSAtMTk3IDEwMjggLTIxMCAxMDI4IC0yMTUgY3QgMTAyOCAtMjE5IDEwMjcgLTIyMyAxMDI0IC0yMjUgY3QgMTAyMSAtMjI4IDEwMTcgLTIyOSAxMDEyIC0yMjkgY3QgCisxMDA4IC0yMjkgMTAwMCAtMjI4IDk4NyAtMjI2IGN0IDk4NyAtMjI2IDk4NyAtMjI2IDk4NyAtMjM2IGN0IDk4NyAtMjM2IDk4NyAtMjM2IDEwODIgLTI1MSBjdCAKK3AgZWYKKzEyMjQgLTI0OSBtICAxMjI0IC0yNDkgMTIyNCAtMjQ5IDExODggLTEyMyBjdCAxMjI1IC0xNzQgMTI1MyAtMjA4IDEyNzMgLTIyNSBjdCAKKzEyOTIgLTI0MSAxMzExIC0yNDkgMTMyOSAtMjQ5IGN0IDEzMzkgLTI0OSAxMzQ3IC0yNDYgMTM1NCAtMjM5IGN0IDEzNjAgLTIzMyAxMzYzIC0yMjQgMTM2MyAtMjE0IGN0IAorMTM2MyAtMjAzIDEzNjAgLTE4OCAxMzU0IC0xNzAgY3QgMTM1NCAtMTcwIDEzNTQgLTE3MCAxMzE3IC01NSBjdCAxMzEzIC00MiAxMzEwIC0zNCAxMzEwIC0zMSBjdCAKKzEzMTAgLTI4IDEzMTEgLTI2IDEzMTIgLTI1IGN0IDEzMTQgLTIzIDEzMTUgLTIyIDEzMTcgLTIyIGN0IDEzMTkgLTIyIDEzMjEgLTIzIDEzMjQgLTI1IGN0IAorMTMzMyAtMzMgMTM0MyAtNDUgMTM1MyAtNjAgY3QgMTM1MyAtNjAgMTM1MyAtNjAgMTM2MiAtNTUgY3QgMTM0NSAtMzEgMTMzMCAtMTQgMTMxNSAtNCBjdCAKKzEzMDUgMyAxMjk1IDYgMTI4NyA2IGN0IDEyODEgNiAxMjc1IDQgMTI3MiAwIGN0IDEyNjggLTQgMTI2NiAtOSAxMjY2IC0xNiBjdCAxMjY2IC0yNSAxMjY5IC00MCAxMjc2IC02MSBjdCAKKzEyNzYgLTYxIDEyNzYgLTYxIDEzMTMgLTE3MiBjdCAxMzE4IC0xODUgMTMyMCAtMTk2IDEzMjAgLTIwNCBjdCAxMzIwIC0yMDcgMTMxOSAtMjEwIDEzMTYgLTIxMyBjdCAKKzEzMTQgLTIxNSAxMzEwIC0yMTYgMTMwNyAtMjE2IGN0IDEzMDEgLTIxNiAxMjk0IC0yMTQgMTI4NiAtMjA5IGN0IDEyNzIgLTIwMSAxMjU2IC0xODggMTI0MCAtMTY5IGN0IAorMTIyNCAtMTUwIDEyMDcgLTEyNiAxMTg5IC05NyBjdCAxMTgwIC04MSAxMTcyIC02NCAxMTY2IC00NiBjdCAxMTY2IC00NiAxMTY2IC00NiAxMTUzIDAgY3QgCisxMTUzIDAgMTE1MyAwIDExMTIgMCBjdCAxMTEyIDAgMTExMiAwIDExNjIgLTE3MyBjdCAxMTY4IC0xOTMgMTE3MSAtMjA2IDExNzEgLTIxMCBjdCAKKzExNzEgLTIxNCAxMTY5IC0yMTcgMTE2NiAtMjIwIGN0IDExNjMgLTIyMyAxMTU5IC0yMjUgMTE1NCAtMjI1IGN0IDExNTIgLTIyNSAxMTQ4IC0yMjQgMTE0MiAtMjI0IGN0IAorMTE0MiAtMjI0IDExNDIgLTIyNCAxMTMyIC0yMjIgY3QgMTEzMiAtMjIyIDExMzIgLTIyMiAxMTMwIC0yMzIgY3QgMTEzMCAtMjMyIDExMzAgLTIzMiAxMjI0IC0yNDkgY3QgCitwIGVmCisxNjc4IC0yMzIgbSAgMTY3OCAtMjMyIDE2NzggLTIzMiAxNjcwIC0yMDQgY3QgMTY3MCAtMjA0IDE2NzAgLTIwNCAxNjI0IC0yMDQgY3QgCisxNjI3IC0xOTQgMTYyOSAtMTg1IDE2MjkgLTE3NiBjdCAxNjI5IC0xNTIgMTYxOSAtMTMwIDE1OTggLTExMSBjdCAxNTc3IC05MiAxNTQ4IC04MSAxNTEyIC03OSBjdCAKKzE0OTIgLTczIDE0NzggLTY2IDE0NjggLTU4IGN0IDE0NjUgLTU1IDE0NjMgLTUyIDE0NjMgLTQ5IGN0IDE0NjMgLTQ1IDE0NjUgLTQyIDE0NjggLTM5IGN0IAorMTQ3MSAtMzYgMTQ4MCAtMzMgMTQ5NCAtMjkgY3QgMTQ5NCAtMjkgMTQ5NCAtMjkgMTU0NiAtMTcgY3QgMTU3NSAtMTEgMTU5NSAtMyAxNjA0IDcgY3QgCisxNjEzIDE3IDE2MTggMjggMTYxOCA0MSBjdCAxNjE4IDU2IDE2MTIgNzAgMTYwMSA4MiBjdCAxNTkwIDk1IDE1NzQgMTA0IDE1NTMgMTExIGN0IAorMTUzMSAxMTggMTUwOCAxMjIgMTQ4MiAxMjIgY3QgMTQ1OSAxMjIgMTQzOCAxMTkgMTQxOSAxMTQgY3QgMTQwMSAxMDggMTM4NyAxMDEgMTM3OSA5MiBjdCAKKzEzNzEgODMgMTM2NyA3MyAxMzY3IDY0IGN0IDEzNjcgNTYgMTM3MCA0OCAxMzc1IDM5IGN0IDEzODAgMzEgMTM4NyAyNCAxMzk1IDE4IGN0IAorMTQwMCAxNSAxNDE0IDYgMTQzOCAtNyBjdCAxNDI5IC0xMyAxNDI1IC0yMSAxNDI1IC0yOCBjdCAxNDI1IC0zNiAxNDI5IC00NCAxNDM2IC01MiBjdCAKKzE0NDMgLTYwIDE0NTggLTY5IDE0ODIgLTc5IGN0IDE0NjIgLTgzIDE0NDcgLTkxIDE0MzUgLTEwNCBjdCAxNDI0IC0xMTcgMTQxOCAtMTMyIDE0MTggLTE0OCBjdCAKKzE0MTggLTE3NCAxNDMwIC0xOTcgMTQ1MyAtMjE4IGN0IDE0NzYgLTIzOSAxNTA2IC0yNDkgMTU0NCAtMjQ5IGN0IDE1NTggLTI0OSAxNTcwIC0yNDggMTU3OSAtMjQ1IGN0IAorMTU4NyAtMjQyIDE1OTYgLTIzOCAxNjA0IC0yMzIgY3QgMTYwNCAtMjMyIDE2MDQgLTIzMiAxNjc4IC0yMzIgY3QgcAorMTU4NCAtMTg4IG0gIDE1ODQgLTIwMiAxNTgwIC0yMTQgMTU3MSAtMjIyIGN0IDE1NjMgLTIzMSAxNTUyIC0yMzUgMTUzOCAtMjM1IGN0IAorMTUxNiAtMjM1IDE0OTggLTIyNSAxNDg0IC0yMDQgY3QgMTQ3MCAtMTgzIDE0NjMgLTE2MiAxNDYzIC0xMzkgY3QgMTQ2MyAtMTI1IDE0NjggLTExMyAxNDc3IC0xMDQgY3QgCisxNDg2IC05NSAxNDk2IC05MSAxNTA5IC05MSBjdCAxNTE5IC05MSAxNTI5IC05NCAxNTM5IC05OSBjdCAxNTQ4IC0xMDQgMTU1NiAtMTEyIDE1NjMgLTEyMSBjdCAKKzE1NjkgLTEzMCAxNTc0IC0xNDIgMTU3OCAtMTU3IGN0IDE1ODIgLTE3MSAxNTg0IC0xODEgMTU4NCAtMTg4IGN0IHAKKzE0NTAgMCBtICAxNDM0IDcgMTQyMyAxNiAxNDE1IDI3IGN0IDE0MDcgMzcgMTQwMyA0OCAxNDAzIDU4IGN0IDE0MDMgNzAgMTQwOSA4MCAxNDIwIDg4IGN0IAorMTQzNSA5OSAxNDU5IDEwNSAxNDg5IDEwNSBjdCAxNTE2IDEwNSAxNTM4IDEwMSAxNTU3IDkyIGN0IDE1NzYgODMgMTU4NSA3MSAxNTg1IDU3IGN0IAorMTU4NSA1MCAxNTgyIDQzIDE1NzUgMzcgY3QgMTU2OCAzMCAxNTU1IDI1IDE1MzUgMjEgY3QgMTUyNCAxOSAxNDk2IDEyIDE0NTAgMCBjdCAKK3AgZWYKK3BvbQorZ3IKK2dyCitncworZ3MKK3B1bQorMTE0NDIgOTI1NCB0Cis5MiAtMjA3IG0gIDEyMSAtMjQyIDE0OSAtMjYwIDE3NiAtMjYwIGN0IDE5MCAtMjYwIDIwMiAtMjU3IDIxMSAtMjUwIGN0IDIyMSAtMjQzIDIyOSAtMjMxIDIzNSAtMjE2IGN0IAorMjM5IC0yMDUgMjQxIC0xODggMjQxIC0xNjUgY3QgMjQxIC0xNjUgMjQxIC0xNjUgMjQxIC01NyBjdCAyNDEgLTQxIDI0MiAtMzAgMjQ1IC0yNSBjdCAKKzI0NyAtMjAgMjUwIC0xNiAyNTQgLTE0IGN0IDI1OCAtMTEgMjY2IC0xMCAyNzggLTEwIGN0IDI3OCAtMTAgMjc4IC0xMCAyNzggMCBjdCAKKzI3OCAwIDI3OCAwIDE1NCAwIGN0IDE1NCAwIDE1NCAwIDE1NCAtMTAgY3QgMTU0IC0xMCAxNTQgLTEwIDE1OSAtMTAgY3QgMTcxIC0xMCAxNzkgLTEyIDE4NCAtMTUgY3QgCisxODkgLTE5IDE5MiAtMjQgMTk0IC0zMSBjdCAxOTUgLTM0IDE5NSAtNDMgMTk1IC01NyBjdCAxOTUgLTU3IDE5NSAtNTcgMTk1IC0xNjEgY3QgCisxOTUgLTE4NCAxOTIgLTIwMSAxODYgLTIxMSBjdCAxODAgLTIyMiAxNzAgLTIyNyAxNTYgLTIyNyBjdCAxMzUgLTIyNyAxMTMgLTIxNSA5MiAtMTkxIGN0IAorOTIgLTE5MSA5MiAtMTkxIDkyIC01NyBjdCA5MiAtNDAgOTMgLTI5IDk1IC0yNSBjdCA5OCAtMjAgMTAxIC0xNiAxMDYgLTE0IGN0IDExMCAtMTEgMTE5IC0xMCAxMzMgLTEwIGN0IAorMTMzIC0xMCAxMzMgLTEwIDEzMyAwIGN0IDEzMyAwIDEzMyAwIDkgMCBjdCA5IDAgOSAwIDkgLTEwIGN0IDkgLTEwIDkgLTEwIDE0IC0xMCBjdCAKKzI3IC0xMCAzNSAtMTMgMzkgLTIwIGN0IDQ0IC0yNiA0NiAtMzkgNDYgLTU3IGN0IDQ2IC01NyA0NiAtNTcgNDYgLTE1MSBjdCA0NiAtMTgxIDQ1IC0yMDAgNDQgLTIwNiBjdCAKKzQzIC0yMTMgNDEgLTIxNyAzOCAtMjIwIGN0IDM1IC0yMjIgMzEgLTIyMyAyNiAtMjIzIGN0IDIxIC0yMjMgMTUgLTIyMiA4IC0yMTkgY3QgCis4IC0yMTkgOCAtMjE5IDQgLTIyOSBjdCA0IC0yMjkgNCAtMjI5IDgwIC0yNjAgY3QgODAgLTI2MCA4MCAtMjYwIDkyIC0yNjAgY3QgOTIgLTI2MCA5MiAtMjYwIDkyIC0yMDcgY3QgCitwIGVmCis1MjMgLTI1MyBtICA1MjMgLTI1MyA1MjMgLTI1MyA1MjMgLTk5IGN0IDUyMyAtNzAgNTI0IC01MyA1MjUgLTQ3IGN0IDUyNiAtNDAgNTI5IC0zNiA1MzIgLTMzIGN0IAorNTM1IC0zMSA1MzggLTI5IDU0MiAtMjkgY3QgNTQ4IC0yOSA1NTQgLTMxIDU2MSAtMzQgY3QgNTYxIC0zNCA1NjEgLTM0IDU2NSAtMjQgY3QgCis1NjUgLTI0IDU2NSAtMjQgNDkwIDcgY3QgNDkwIDcgNDkwIDcgNDc4IDcgY3QgNDc4IDcgNDc4IDcgNDc4IC00NiBjdCA0NTYgLTIzIDQ0MCAtOCA0MjggLTIgY3QgCis0MTcgNCA0MDUgNyAzOTIgNyBjdCAzNzggNyAzNjUgMyAzNTUgLTUgY3QgMzQ0IC0xNCAzMzcgLTI0IDMzMyAtMzcgY3QgMzI5IC01MCAzMjcgLTY4IDMyNyAtOTIgY3QgCiszMjcgLTkyIDMyNyAtOTIgMzI3IC0yMDUgY3QgMzI3IC0yMTcgMzI2IC0yMjUgMzIzIC0yMjkgY3QgMzIxIC0yMzQgMzE3IC0yMzcgMzEyIC0yNDAgY3QgCiszMDcgLTI0MiAyOTcgLTI0MyAyODQgLTI0MyBjdCAyODQgLTI0MyAyODQgLTI0MyAyODQgLTI1MyBjdCAyODQgLTI1MyAyODQgLTI1MyAzNzMgLTI1MyBjdCAKKzM3MyAtMjUzIDM3MyAtMjUzIDM3MyAtODQgY3QgMzczIC02MCAzNzcgLTQ0IDM4NSAtMzcgY3QgMzk0IC0zMCA0MDMgLTI2IDQxNSAtMjYgY3QgCis0MjMgLTI2IDQzMiAtMjggNDQyIC0zMyBjdCA0NTIgLTM4IDQ2NCAtNDggNDc4IC02MiBjdCA0NzggLTYyIDQ3OCAtNjIgNDc4IC0yMDUgY3QgCis0NzggLTIyMCA0NzUgLTIzMCA0NzAgLTIzNSBjdCA0NjUgLTI0MCA0NTQgLTI0MyA0MzcgLTI0MyBjdCA0MzcgLTI0MyA0MzcgLTI0MyA0MzcgLTI1MyBjdCAKKzQzNyAtMjUzIDQzNyAtMjUzIDUyMyAtMjUzIGN0IHAgZWYKKzY3MiAtMzkyIG0gIDY3MiAtMzkyIDY3MiAtMzkyIDY3MiAtNTcgY3QgNjcyIC00MSA2NzMgLTMxIDY3NSAtMjYgY3QgNjc4IC0yMSA2ODEgLTE3IDY4NiAtMTQgY3QgCis2OTEgLTExIDcwMCAtMTAgNzEzIC0xMCBjdCA3MTMgLTEwIDcxMyAtMTAgNzEzIDAgY3QgNzEzIDAgNzEzIDAgNTg5IDAgY3QgNTg5IDAgNTg5IDAgNTg5IC0xMCBjdCAKKzYwMSAtMTAgNjA4IC0xMSA2MTMgLTE0IGN0IDYxNyAtMTYgNjIwIC0yMCA2MjIgLTI1IGN0IDYyNSAtMzEgNjI2IC00MSA2MjYgLTU3IGN0IAorNjI2IC01NyA2MjYgLTU3IDYyNiAtMjg2IGN0IDYyNiAtMzE0IDYyNSAtMzMyIDYyNCAtMzM4IGN0IDYyMyAtMzQ1IDYyMSAtMzQ5IDYxOCAtMzUyIGN0IAorNjE1IC0zNTQgNjEyIC0zNTUgNjA3IC0zNTUgY3QgNjAzIC0zNTUgNTk3IC0zNTQgNTkwIC0zNTEgY3QgNTkwIC0zNTEgNTkwIC0zNTEgNTg1IC0zNjEgY3QgCis1ODUgLTM2MSA1ODUgLTM2MSA2NjAgLTM5MiBjdCA2NjAgLTM5MiA2NjAgLTM5MiA2NzIgLTM5MiBjdCBwIGVmCis4MjkgLTM5MiBtICA4MjkgLTM5MiA4MjkgLTM5MiA4MjkgLTU3IGN0IDgyOSAtNDEgODMwIC0zMSA4MzIgLTI2IGN0IDgzNSAtMjEgODM4IC0xNyA4NDMgLTE0IGN0IAorODQ4IC0xMSA4NTcgLTEwIDg3MCAtMTAgY3QgODcwIC0xMCA4NzAgLTEwIDg3MCAwIGN0IDg3MCAwIDg3MCAwIDc0NiAwIGN0IDc0NiAwIDc0NiAwIDc0NiAtMTAgY3QgCis3NTggLTEwIDc2NSAtMTEgNzcwIC0xNCBjdCA3NzQgLTE2IDc3NyAtMjAgNzc5IC0yNSBjdCA3ODIgLTMxIDc4MyAtNDEgNzgzIC01NyBjdCAKKzc4MyAtNTcgNzgzIC01NyA3ODMgLTI4NiBjdCA3ODMgLTMxNCA3ODIgLTMzMiA3ODEgLTMzOCBjdCA3ODAgLTM0NSA3NzggLTM0OSA3NzUgLTM1MiBjdCAKKzc3MiAtMzU0IDc2OSAtMzU1IDc2NCAtMzU1IGN0IDc2MCAtMzU1IDc1NCAtMzU0IDc0NyAtMzUxIGN0IDc0NyAtMzUxIDc0NyAtMzUxIDc0MiAtMzYxIGN0IAorNzQyIC0zNjEgNzQyIC0zNjEgODE3IC0zOTIgY3QgODE3IC0zOTIgODE3IC0zOTIgODI5IC0zOTIgY3QgcCBlZgorcG9tCitncgorZ3MKK3B1bQorMTA3NjkgOTg4MSB0Cis2MCAtMTU4IG0gIDYwIC0xMjEgNjkgLTkyIDg3IC03MSBjdCAxMDUgLTUwIDEyNiAtMzkgMTUxIC0zOSBjdCAxNjcgLTM5IDE4MiAtNDMgMTk0IC01MiBjdCAKKzIwNiAtNjEgMjE2IC03NyAyMjQgLTk5IGN0IDIyNCAtOTkgMjI0IC05OSAyMzMgLTk0IGN0IDIyOSAtNjggMjE4IC00NSAxOTkgLTI0IGN0IAorMTgxIC0zIDE1OCA3IDEzMCA3IGN0IDEwMCA3IDc0IC01IDUyIC0yOCBjdCAzMSAtNTIgMjAgLTgzIDIwIC0xMjMgY3QgMjAgLTE2NiAzMSAtMjAwIDUzIC0yMjQgY3QgCis3NSAtMjQ4IDEwMyAtMjYwIDEzNiAtMjYwIGN0IDE2NCAtMjYwIDE4OCAtMjUxIDIwNiAtMjMyIGN0IDIyNCAtMjE0IDIzMyAtMTg5IDIzMyAtMTU4IGN0IAorMjMzIC0xNTggMjMzIC0xNTggNjAgLTE1OCBjdCBwCis2MCAtMTc0IG0gIDYwIC0xNzQgNjAgLTE3NCAxNzYgLTE3NCBjdCAxNzUgLTE5MCAxNzMgLTIwMSAxNzAgLTIwOCBjdCAxNjYgLTIxOCAxNTkgLTIyNiAxNTAgLTIzMSBjdCAKKzE0MSAtMjM3IDEzMSAtMjQwIDEyMiAtMjQwIGN0IDEwNiAtMjQwIDkzIC0yMzQgODEgLTIyMyBjdCA2OSAtMjExIDYyIC0xOTUgNjAgLTE3NCBjdCAKK3AgZWYKKzI1NyAtMjUzIG0gIDI1NyAtMjUzIDI1NyAtMjUzIDM3MyAtMjUzIGN0IDM3MyAtMjUzIDM3MyAtMjUzIDM3MyAtMjQzIGN0IDM2NiAtMjQzIDM2MSAtMjQyIDM1OCAtMjM5IGN0IAorMzU1IC0yMzYgMzU0IC0yMzMgMzU0IC0yMjkgY3QgMzU0IC0yMjQgMzU4IC0yMTcgMzY1IC0yMDggY3QgMzY3IC0yMDUgMzcwIC0yMDAgMzc0IC0xOTQgY3QgCiszNzQgLTE5NCAzNzQgLTE5NCAzOTIgLTE2NiBjdCAzOTIgLTE2NiAzOTIgLTE2NiA0MTMgLTE5NCBjdCA0MjYgLTIxMSA0MzMgLTIyMyA0MzMgLTIyOCBjdCAKKzQzMyAtMjMyIDQzMSAtMjM2IDQyOCAtMjM5IGN0IDQyNSAtMjQyIDQyMCAtMjQzIDQxMyAtMjQzIGN0IDQxMyAtMjQzIDQxMyAtMjQzIDQxMyAtMjUzIGN0IAorNDEzIC0yNTMgNDEzIC0yNTMgNDk2IC0yNTMgY3QgNDk2IC0yNTMgNDk2IC0yNTMgNDk2IC0yNDMgY3QgNDg3IC0yNDIgNDgwIC0yNDAgNDczIC0yMzYgY3QgCis0NjQgLTIyOSA0NTIgLTIxNiA0MzcgLTE5NSBjdCA0MzcgLTE5NSA0MzcgLTE5NSA0MDMgLTE0OSBjdCA0MDMgLTE0OSA0MDMgLTE0OSA0NjUgLTU4IGN0IAorNDgxIC0zNiA0OTIgLTIyIDQ5OCAtMTggY3QgNTA1IC0xMyA1MTMgLTExIDUyNCAtMTAgY3QgNTI0IC0xMCA1MjQgLTEwIDUyNCAwIGN0IAorNTI0IDAgNTI0IDAgNDA0IDAgY3QgNDA0IDAgNDA0IDAgNDA0IC0xMCBjdCA0MTIgLTEwIDQxOSAtMTIgNDI0IC0xNiBjdCA0MjcgLTE4IDQyOSAtMjIgNDI5IC0yNiBjdCAKKzQyOSAtMzAgNDIzIC00MSA0MTEgLTU4IGN0IDQxMSAtNTggNDExIC01OCAzNzQgLTExMiBjdCAzNzQgLTExMiAzNzQgLTExMiAzMzQgLTU5IGN0IAorMzIyIC00MiAzMTYgLTMyIDMxNiAtMjkgY3QgMzE2IC0yNCAzMTggLTIwIDMyMiAtMTYgY3QgMzI2IC0xMiAzMzMgLTEwIDM0MSAtMTAgY3QgCiszNDEgLTEwIDM0MSAtMTAgMzQxIDAgY3QgMzQxIDAgMzQxIDAgMjU5IDAgY3QgMjU5IDAgMjU5IDAgMjU5IC0xMCBjdCAyNjYgLTExIDI3MSAtMTMgMjc2IC0xNyBjdCAKKzI4MyAtMjIgMjk1IC0zNiAzMTEgLTU4IGN0IDMxMSAtNTggMzExIC01OCAzNjQgLTEyOCBjdCAzNjQgLTEyOCAzNjQgLTEyOCAzMTYgLTE5OCBjdCAKKzMwMyAtMjE4IDI5MiAtMjMwIDI4NSAtMjM1IGN0IDI3NyAtMjQwIDI2OCAtMjQzIDI1NyAtMjQzIGN0IDI1NyAtMjQzIDI1NyAtMjQzIDI1NyAtMjUzIGN0IAorcCBlZgorNzY2IC05NSBtICA3NTkgLTYyIDc0NiAtMzcgNzI2IC0xOSBjdCA3MDYgLTIgNjg0IDcgNjYwIDcgY3QgNjMxIDcgNjA2IC01IDU4NSAtMjkgY3QgCis1NjQgLTUzIDU1MyAtODUgNTUzIC0xMjYgY3QgNTUzIC0xNjYgNTY1IC0xOTggNTg4IC0yMjMgY3QgNjEyIC0yNDggNjQxIC0yNjAgNjc0IC0yNjAgY3QgCis2OTkgLTI2MCA3MTkgLTI1MyA3MzUgLTI0MCBjdCA3NTEgLTIyNyA3NTkgLTIxNCA3NTkgLTE5OSBjdCA3NTkgLTE5MiA3NTcgLTE4NyA3NTIgLTE4MiBjdCAKKzc0OCAtMTc4IDc0MSAtMTc2IDczMyAtMTc2IGN0IDcyMyAtMTc2IDcxNSAtMTgwIDcwOSAtMTg3IGN0IDcwNiAtMTkwIDcwNCAtMTk4IDcwMyAtMjA5IGN0IAorNzAyIC0yMjAgNjk4IC0yMjggNjkxIC0yMzQgY3QgNjg1IC0yMzkgNjc2IC0yNDIgNjY1IC0yNDIgY3QgNjQ2IC0yNDIgNjMyIC0yMzUgNjIwIC0yMjIgY3QgCis2MDUgLTIwNCA1OTggLTE4MCA1OTggLTE1MCBjdCA1OTggLTEyMCA2MDUgLTk0IDYyMCAtNzEgY3QgNjM1IC00OCA2NTUgLTM2IDY4MCAtMzYgY3QgCis2OTggLTM2IDcxNCAtNDIgNzI5IC01NCBjdCA3MzkgLTYyIDc0OCAtNzcgNzU4IC05OSBjdCA3NTggLTk5IDc1OCAtOTkgNzY2IC05NSBjdCAKK3AgZWYKKzg2NSAtMzkyIG0gIDg3MyAtMzkyIDg3OSAtMzg5IDg4NSAtMzg0IGN0IDg5MCAtMzc4IDg5MyAtMzcyIDg5MyAtMzY0IGN0IDg5MyAtMzU2IDg5MCAtMzUwIDg4NSAtMzQ0IGN0IAorODc5IC0zMzkgODczIC0zMzYgODY1IC0zMzYgY3QgODU3IC0zMzYgODUxIC0zMzkgODQ1IC0zNDQgY3QgODQwIC0zNTAgODM3IC0zNTYgODM3IC0zNjQgY3QgCis4MzcgLTM3MiA4NDAgLTM3OCA4NDUgLTM4NCBjdCA4NTEgLTM4OSA4NTcgLTM5MiA4NjUgLTM5MiBjdCBwCis4ODggLTI2MCBtICA4ODggLTI2MCA4ODggLTI2MCA4ODggLTU3IGN0IDg4OCAtNDEgODg5IC0zMSA4OTEgLTI2IGN0IDg5NCAtMjAgODk3IC0xNiA5MDEgLTE0IGN0IAorOTA2IC0xMSA5MTMgLTEwIDkyNSAtMTAgY3QgOTI1IC0xMCA5MjUgLTEwIDkyNSAwIGN0IDkyNSAwIDkyNSAwIDgwNSAwIGN0IDgwNSAwIDgwNSAwIDgwNSAtMTAgY3QgCis4MTcgLTEwIDgyNSAtMTEgODI5IC0xNCBjdCA4MzMgLTE2IDgzNiAtMjAgODM4IC0yNSBjdCA4NDEgLTMxIDg0MiAtNDEgODQyIC01NyBjdCAKKzg0MiAtNTcgODQyIC01NyA4NDIgLTE1NCBjdCA4NDIgLTE4MSA4NDEgLTE5OSA4NDAgLTIwNyBjdCA4MzggLTIxMyA4MzYgLTIxNyA4MzQgLTIyMCBjdCAKKzgzMSAtMjIyIDgyNyAtMjIzIDgyMiAtMjIzIGN0IDgxNyAtMjIzIDgxMSAtMjIyIDgwNCAtMjE5IGN0IDgwNCAtMjE5IDgwNCAtMjE5IDgwMCAtMjI5IGN0IAorODAwIC0yMjkgODAwIC0yMjkgODc2IC0yNjAgY3QgODc2IC0yNjAgODc2IC0yNjAgODg4IC0yNjAgY3QgcCBlZgorMTAzMSAtMzM3IG0gIDEwMzEgLTMzNyAxMDMxIC0zMzcgMTAzMSAtMjUzIGN0IDEwMzEgLTI1MyAxMDMxIC0yNTMgMTA5MCAtMjUzIGN0IAorMTA5MCAtMjUzIDEwOTAgLTI1MyAxMDkwIC0yMzQgY3QgMTA5MCAtMjM0IDEwOTAgLTIzNCAxMDMxIC0yMzQgY3QgMTAzMSAtMjM0IDEwMzEgLTIzNCAxMDMxIC03MCBjdCAKKzEwMzEgLTUzIDEwMzMgLTQyIDEwMzggLTM3IGN0IDEwNDMgLTMxIDEwNDkgLTI4IDEwNTYgLTI4IGN0IDEwNjIgLTI4IDEwNjggLTMwIDEwNzQgLTM0IGN0IAorMTA3OSAtMzcgMTA4NCAtNDMgMTA4NyAtNTAgY3QgMTA4NyAtNTAgMTA4NyAtNTAgMTA5OCAtNTAgY3QgMTA5MiAtMzIgMTA4MiAtMTkgMTA3MSAtMTAgY3QgCisxMDU5IC0xIDEwNDYgNCAxMDM0IDQgY3QgMTAyNSA0IDEwMTcgMiAxMDA5IC0zIGN0IDEwMDEgLTggOTk1IC0xNCA5OTEgLTIzIGN0IDk4NyAtMzIgOTg1IC00NSA5ODUgLTY0IGN0IAorOTg1IC02NCA5ODUgLTY0IDk4NSAtMjM0IGN0IDk4NSAtMjM0IDk4NSAtMjM0IDk0NSAtMjM0IGN0IDk0NSAtMjM0IDk0NSAtMjM0IDk0NSAtMjQzIGN0IAorOTU1IC0yNDcgOTY1IC0yNTQgOTc2IC0yNjQgY3QgOTg3IC0yNzMgOTk2IC0yODUgMTAwNCAtMjk4IGN0IDEwMDkgLTMwNSAxMDE0IC0zMTggMTAyMiAtMzM3IGN0IAorMTAyMiAtMzM3IDEwMjIgLTMzNyAxMDMxIC0zMzcgY3QgcCBlZgorMTI1NyAtMzcgbSAgMTIzMSAtMTcgMTIxNSAtNSAxMjA4IC0yIGN0IDExOTggMyAxMTg4IDUgMTE3NiA1IGN0IDExNTkgNSAxMTQ0IC0xIDExMzMgLTEzIGN0IAorMTEyMiAtMjUgMTExNiAtNDAgMTExNiAtNjAgY3QgMTExNiAtNzIgMTExOSAtODMgMTEyNCAtOTIgY3QgMTEzMiAtMTA0IDExNDUgLTExNiAxMTY0IC0xMjcgY3QgCisxMTgyIC0xMzggMTIxNCAtMTUxIDEyNTcgLTE2NyBjdCAxMjU3IC0xNjcgMTI1NyAtMTY3IDEyNTcgLTE3NyBjdCAxMjU3IC0yMDIgMTI1MyAtMjE5IDEyNDUgLTIyOCBjdCAKKzEyMzcgLTIzNyAxMjI2IC0yNDIgMTIxMCAtMjQyIGN0IDExOTkgLTI0MiAxMTkwIC0yMzkgMTE4MyAtMjMzIGN0IDExNzYgLTIyNiAxMTcyIC0yMTkgMTE3MiAtMjExIGN0IAorMTE3MiAtMjExIDExNzIgLTIxMSAxMTczIC0xOTUgY3QgMTE3MyAtMTg3IDExNzEgLTE4MCAxMTY2IC0xNzYgY3QgMTE2MiAtMTcxIDExNTYgLTE2OSAxMTQ5IC0xNjkgY3QgCisxMTQzIC0xNjkgMTEzNyAtMTcxIDExMzMgLTE3NiBjdCAxMTI4IC0xODEgMTEyNiAtMTg4IDExMjYgLTE5NiBjdCAxMTI2IC0yMTIgMTEzNCAtMjI3IDExNTAgLTI0MCBjdCAKKzExNjYgLTI1MyAxMTg5IC0yNjAgMTIxOCAtMjYwIGN0IDEyNDAgLTI2MCAxMjU5IC0yNTYgMTI3MyAtMjQ5IGN0IDEyODQgLTI0MyAxMjkyIC0yMzQgMTI5NyAtMjIyIGN0IAorMTMwMCAtMjE0IDEzMDIgLTE5OCAxMzAyIC0xNzQgY3QgMTMwMiAtMTc0IDEzMDIgLTE3NCAxMzAyIC04OSBjdCAxMzAyIC02NSAxMzAyIC01MCAxMzAzIC00NSBjdCAKKzEzMDQgLTM5IDEzMDYgLTM2IDEzMDggLTM0IGN0IDEzMTAgLTMyIDEzMTIgLTMxIDEzMTUgLTMxIGN0IDEzMTggLTMxIDEzMjEgLTMyIDEzMjMgLTMzIGN0IAorMTMyNyAtMzUgMTMzNCAtNDIgMTM0NSAtNTMgY3QgMTM0NSAtNTMgMTM0NSAtNTMgMTM0NSAtMzggY3QgMTMyNSAtMTAgMTMwNSA0IDEyODcgNCBjdCAKKzEyNzggNCAxMjcwIDEgMTI2NSAtNSBjdCAxMjYwIC0xMSAxMjU3IC0yMiAxMjU3IC0zNyBjdCBwCisxMjU3IC01NCBtICAxMjU3IC01NCAxMjU3IC01NCAxMjU3IC0xNDkgY3QgMTIyOSAtMTM4IDEyMTEgLTEzMCAxMjAzIC0xMjYgY3QgCisxMTg4IC0xMTggMTE3OCAtMTEwIDExNzEgLTEwMSBjdCAxMTY1IC05MiAxMTYyIC04MyAxMTYyIC03MiBjdCAxMTYyIC01OSAxMTY2IC00OSAxMTc0IC00MCBjdCAKKzExODIgLTMxIDExOTEgLTI3IDEyMDEgLTI3IGN0IDEyMTYgLTI3IDEyMzQgLTM2IDEyNTcgLTU0IGN0IHAgZWYKKzE0MzcgLTMzNyBtICAxNDM3IC0zMzcgMTQzNyAtMzM3IDE0MzcgLTI1MyBjdCAxNDM3IC0yNTMgMTQzNyAtMjUzIDE0OTYgLTI1MyBjdCAKKzE0OTYgLTI1MyAxNDk2IC0yNTMgMTQ5NiAtMjM0IGN0IDE0OTYgLTIzNCAxNDk2IC0yMzQgMTQzNyAtMjM0IGN0IDE0MzcgLTIzNCAxNDM3IC0yMzQgMTQzNyAtNzAgY3QgCisxNDM3IC01MyAxNDM5IC00MiAxNDQ0IC0zNyBjdCAxNDQ5IC0zMSAxNDU1IC0yOCAxNDYyIC0yOCBjdCAxNDY4IC0yOCAxNDc0IC0zMCAxNDgwIC0zNCBjdCAKKzE0ODUgLTM3IDE0OTAgLTQzIDE0OTMgLTUwIGN0IDE0OTMgLTUwIDE0OTMgLTUwIDE1MDQgLTUwIGN0IDE0OTggLTMyIDE0ODggLTE5IDE0NzcgLTEwIGN0IAorMTQ2NSAtMSAxNDUyIDQgMTQ0MCA0IGN0IDE0MzEgNCAxNDIzIDIgMTQxNSAtMyBjdCAxNDA3IC04IDE0MDEgLTE0IDEzOTcgLTIzIGN0IAorMTM5MyAtMzIgMTM5MSAtNDUgMTM5MSAtNjQgY3QgMTM5MSAtNjQgMTM5MSAtNjQgMTM5MSAtMjM0IGN0IDEzOTEgLTIzNCAxMzkxIC0yMzQgMTM1MSAtMjM0IGN0IAorMTM1MSAtMjM0IDEzNTEgLTIzNCAxMzUxIC0yNDMgY3QgMTM2MSAtMjQ3IDEzNzEgLTI1NCAxMzgyIC0yNjQgY3QgMTM5MyAtMjczIDE0MDIgLTI4NSAxNDEwIC0yOTggY3QgCisxNDE1IC0zMDUgMTQyMCAtMzE4IDE0MjggLTMzNyBjdCAxNDI4IC0zMzcgMTQyOCAtMzM3IDE0MzcgLTMzNyBjdCBwIGVmCisxNTg1IC0zOTIgbSAgMTU5MyAtMzkyIDE1OTkgLTM4OSAxNjA1IC0zODQgY3QgMTYxMCAtMzc4IDE2MTMgLTM3MiAxNjEzIC0zNjQgY3QgCisxNjEzIC0zNTYgMTYxMCAtMzUwIDE2MDUgLTM0NCBjdCAxNTk5IC0zMzkgMTU5MyAtMzM2IDE1ODUgLTMzNiBjdCAxNTc3IC0zMzYgMTU3MSAtMzM5IDE1NjUgLTM0NCBjdCAKKzE1NjAgLTM1MCAxNTU3IC0zNTYgMTU1NyAtMzY0IGN0IDE1NTcgLTM3MiAxNTYwIC0zNzggMTU2NSAtMzg0IGN0IDE1NzEgLTM4OSAxNTc3IC0zOTIgMTU4NSAtMzkyIGN0IAorcAorMTYwOCAtMjYwIG0gIDE2MDggLTI2MCAxNjA4IC0yNjAgMTYwOCAtNTcgY3QgMTYwOCAtNDEgMTYwOSAtMzEgMTYxMSAtMjYgY3QgMTYxNCAtMjAgMTYxNyAtMTYgMTYyMSAtMTQgY3QgCisxNjI2IC0xMSAxNjMzIC0xMCAxNjQ1IC0xMCBjdCAxNjQ1IC0xMCAxNjQ1IC0xMCAxNjQ1IDAgY3QgMTY0NSAwIDE2NDUgMCAxNTI1IDAgY3QgCisxNTI1IDAgMTUyNSAwIDE1MjUgLTEwIGN0IDE1MzcgLTEwIDE1NDUgLTExIDE1NDkgLTE0IGN0IDE1NTMgLTE2IDE1NTYgLTIwIDE1NTggLTI1IGN0IAorMTU2MSAtMzEgMTU2MiAtNDEgMTU2MiAtNTcgY3QgMTU2MiAtNTcgMTU2MiAtNTcgMTU2MiAtMTU0IGN0IDE1NjIgLTE4MSAxNTYxIC0xOTkgMTU2MCAtMjA3IGN0IAorMTU1OCAtMjEzIDE1NTYgLTIxNyAxNTU0IC0yMjAgY3QgMTU1MSAtMjIyIDE1NDcgLTIyMyAxNTQyIC0yMjMgY3QgMTUzNyAtMjIzIDE1MzEgLTIyMiAxNTI0IC0yMTkgY3QgCisxNTI0IC0yMTkgMTUyNCAtMjE5IDE1MjAgLTIyOSBjdCAxNTIwIC0yMjkgMTUyMCAtMjI5IDE1OTYgLTI2MCBjdCAxNTk2IC0yNjAgMTU5NiAtMjYwIDE2MDggLTI2MCBjdCAKK3AgZWYKKzE4MDEgLTI2MCBtICAxODM5IC0yNjAgMTg3MCAtMjQ2IDE4OTMgLTIxNyBjdCAxOTEyIC0xOTIgMTkyMiAtMTYzIDE5MjIgLTEzMSBjdCAKKzE5MjIgLTEwOSAxOTE3IC04NiAxOTA2IC02MyBjdCAxODk1IC00MCAxODgwIC0yMiAxODYxIC0xMSBjdCAxODQyIDEgMTgyMSA3IDE3OTggNyBjdCAKKzE3NjAgNyAxNzMwIC04IDE3MDcgLTM4IGN0IDE2ODggLTY0IDE2NzkgLTkyIDE2NzkgLTEyNCBjdCAxNjc5IC0xNDcgMTY4NSAtMTcwIDE2OTYgLTE5MyBjdCAKKzE3MDggLTIxNiAxNzIzIC0yMzMgMTc0MSAtMjQ0IGN0IDE3NjAgLTI1NSAxNzgwIC0yNjAgMTgwMSAtMjYwIGN0IHAKKzE3OTIgLTI0MiBtICAxNzgzIC0yNDIgMTc3MyAtMjM5IDE3NjMgLTIzMyBjdCAxNzUzIC0yMjggMTc0NSAtMjE4IDE3MzkgLTIwMyBjdCAKKzE3MzMgLTE4OSAxNzMwIC0xNzAgMTczMCAtMTQ3IGN0IDE3MzAgLTExMSAxNzM3IC03OSAxNzUyIC01MyBjdCAxNzY3IC0yNiAxNzg2IC0xMyAxODEwIC0xMyBjdCAKKzE4MjcgLTEzIDE4NDIgLTIwIDE4NTQgLTM1IGN0IDE4NjUgLTUwIDE4NzEgLTc1IDE4NzEgLTExMCBjdCAxODcxIC0xNTUgMTg2MSAtMTkwIDE4NDIgLTIxNiBjdCAKKzE4MjkgLTIzMyAxODEyIC0yNDIgMTc5MiAtMjQyIGN0IHAgZWYKKzIwMzUgLTIwNyBtICAyMDY0IC0yNDIgMjA5MiAtMjYwIDIxMTkgLTI2MCBjdCAyMTMzIC0yNjAgMjE0NSAtMjU3IDIxNTQgLTI1MCBjdCAKKzIxNjQgLTI0MyAyMTcyIC0yMzEgMjE3OCAtMjE2IGN0IDIxODIgLTIwNSAyMTg0IC0xODggMjE4NCAtMTY1IGN0IDIxODQgLTE2NSAyMTg0IC0xNjUgMjE4NCAtNTcgY3QgCisyMTg0IC00MSAyMTg1IC0zMCAyMTg4IC0yNSBjdCAyMTkwIC0yMCAyMTkzIC0xNiAyMTk3IC0xNCBjdCAyMjAxIC0xMSAyMjA5IC0xMCAyMjIxIC0xMCBjdCAKKzIyMjEgLTEwIDIyMjEgLTEwIDIyMjEgMCBjdCAyMjIxIDAgMjIyMSAwIDIwOTcgMCBjdCAyMDk3IDAgMjA5NyAwIDIwOTcgLTEwIGN0IDIwOTcgLTEwIDIwOTcgLTEwIDIxMDIgLTEwIGN0IAorMjExNCAtMTAgMjEyMiAtMTIgMjEyNyAtMTUgY3QgMjEzMiAtMTkgMjEzNSAtMjQgMjEzNyAtMzEgY3QgMjEzOCAtMzQgMjEzOCAtNDMgMjEzOCAtNTcgY3QgCisyMTM4IC01NyAyMTM4IC01NyAyMTM4IC0xNjEgY3QgMjEzOCAtMTg0IDIxMzUgLTIwMSAyMTI5IC0yMTEgY3QgMjEyMyAtMjIyIDIxMTMgLTIyNyAyMDk5IC0yMjcgY3QgCisyMDc4IC0yMjcgMjA1NiAtMjE1IDIwMzUgLTE5MSBjdCAyMDM1IC0xOTEgMjAzNSAtMTkxIDIwMzUgLTU3IGN0IDIwMzUgLTQwIDIwMzYgLTI5IDIwMzggLTI1IGN0IAorMjA0MSAtMjAgMjA0NCAtMTYgMjA0OSAtMTQgY3QgMjA1MyAtMTEgMjA2MiAtMTAgMjA3NiAtMTAgY3QgMjA3NiAtMTAgMjA3NiAtMTAgMjA3NiAwIGN0IAorMjA3NiAwIDIwNzYgMCAxOTUyIDAgY3QgMTk1MiAwIDE5NTIgMCAxOTUyIC0xMCBjdCAxOTUyIC0xMCAxOTUyIC0xMCAxOTU3IC0xMCBjdCAKKzE5NzAgLTEwIDE5NzggLTEzIDE5ODIgLTIwIGN0IDE5ODcgLTI2IDE5ODkgLTM5IDE5ODkgLTU3IGN0IDE5ODkgLTU3IDE5ODkgLTU3IDE5ODkgLTE1MSBjdCAKKzE5ODkgLTE4MSAxOTg4IC0yMDAgMTk4NyAtMjA2IGN0IDE5ODYgLTIxMyAxOTg0IC0yMTcgMTk4MSAtMjIwIGN0IDE5NzggLTIyMiAxOTc0IC0yMjMgMTk2OSAtMjIzIGN0IAorMTk2NCAtMjIzIDE5NTggLTIyMiAxOTUxIC0yMTkgY3QgMTk1MSAtMjE5IDE5NTEgLTIxOSAxOTQ3IC0yMjkgY3QgMTk0NyAtMjI5IDE5NDcgLTIyOSAyMDIzIC0yNjAgY3QgCisyMDIzIC0yNjAgMjAyMyAtMjYwIDIwMzUgLTI2MCBjdCAyMDM1IC0yNjAgMjAzNSAtMjYwIDIwMzUgLTIwNyBjdCBwIGVmCitwb20KK2dyCitncgorOTEzNSA5Mzg1IG0gIDk2OTggOTE5OCBsICA5Njk4IDk1NzMgbCAgOTEzNSA5Mzg1IGwgIHAgZWYKKzEwNjM1IDk0MTAgbSAgOTU4NSA5NDEwIGwgIDk1ODUgOTM2MCBsICAxMDYzNSA5MzYwIGwgIDEwNjM1IDk0MTAgbCAgcCBlZgorZ3MKK2dzCitwdW0KKzUzNzIgMjEyODUgdAorMzEgLTIxMiBtICAzMSAtMjk5IGwgIDI5OCAtMjk5IGwgIDI5OCAtMjEyIGwgIDMxIC0yMTIgbCAgcCBlZgorcG9tCitncgorZ3IKK2dzCitncworcHVtCis1MzcyIDExNDk1IHQKKzMxIC0yMTIgbSAgMzEgLTI5OSBsICAyOTggLTI5OSBsICAyOTggLTIxMiBsICAzMSAtMjEyIGwgIHAgZWYKK3BvbQorZ3IKK2dyCitncworZ3MKK3B1bQorNTM3MiAxMDE5OSB0CiszMSAtMjEyIG0gIDMxIC0yOTkgbCAgMjk4IC0yOTkgbCAgMjk4IC0yMTIgbCAgMzEgLTIxMiBsICBwIGVmCitwb20KK2dyCitncgorZ3MKK2dzCitwdW0KKzI2NzMgMTA3NjIgdAorMTUzIC0zMTcgbSAgMTUzIC0zMTcgMTUzIC0zMTcgMTMxIC0yNDMgY3QgMTMxIC0yNDMgMTMxIC0yNDMgMTY5IC0yNDMgY3QgMTY5IC0yNDMgMTY5IC0yNDMgMTY0IC0yMjUgY3QgCisxNjQgLTIyNSAxNjQgLTIyNSAxMjUgLTIyNSBjdCAxMjUgLTIyNSAxMjUgLTIyNSA3NiAtNjMgY3QgNjkgLTQ0IDY2IC0zMyA2NiAtMjcgY3QgCis2NiAtMjQgNjcgLTIyIDY4IC0yMCBjdCA2OSAtMTkgNzEgLTE4IDczIC0xOCBjdCA3NyAtMTggODIgLTIxIDg5IC0yNyBjdCA5MyAtMzEgMTAxIC00MiAxMTUgLTYxIGN0IAorMTE1IC02MSAxMTUgLTYxIDEyNCAtNTQgY3QgMTA4IC0zMCA5MyAtMTMgNzkgLTQgY3QgNjkgMyA1OSA2IDQ5IDYgY3QgNDIgNiAzNiA0IDMxIC0xIGN0IAorMjYgLTYgMjQgLTEzIDI0IC0yMCBjdCAyNCAtMzAgMjcgLTQ1IDMzIC02NiBjdCAzMyAtNjYgMzMgLTY2IDgxIC0yMjUgY3QgODEgLTIyNSA4MSAtMjI1IDM5IC0yMjUgY3QgCiszOSAtMjI1IDM5IC0yMjUgNDIgLTIzNiBjdCA2MiAtMjQyIDc5IC0yNTAgOTMgLTI2MSBjdCAxMDcgLTI3MiAxMjMgLTI5MSAxNDEgLTMxNyBjdCAKKzE0MSAtMzE3IDE0MSAtMzE3IDE1MyAtMzE3IGN0IHAgZWYKKzQzNiAtMjQ1IG0gIDQzNiAtMjQ1IDQzNiAtMjQ1IDM4MyAtNTggY3QgMzgzIC01OCAzODMgLTU4IDM3NyAtMzMgY3QgMzc2IC0zMSAzNzUgLTI5IDM3NSAtMjggY3QgCiszNzUgLTI1IDM3NiAtMjMgMzc3IC0yMSBjdCAzNzggLTE5IDM3OSAtMTkgMzgxIC0xOSBjdCAzODMgLTE5IDM4NSAtMjAgMzg4IC0yMiBjdCAKKzM5MyAtMjcgMzk5IC0zOCA0MDggLTU1IGN0IDQwOCAtNTUgNDA4IC01NSA0MTcgLTQ4IGN0IDQwNiAtMzAgMzk1IC0xNiAzODQgLTcgY3QgCiszNzMgMiAzNjIgNiAzNTMgNiBjdCAzNDYgNiAzNDEgNCAzMzcgMCBjdCAzMzQgLTQgMzMyIC05IDMzMiAtMTcgY3QgMzMyIC0yNiAzMzQgLTM4IDMzOCAtNTIgY3QgCiszMzggLTUyIDMzOCAtNTIgMzQ0IC03MyBjdCAzMTggLTQyIDI5MyAtMjAgMjcxIC03IGN0IDI1NSAyIDI0MCA2IDIyNCA2IGN0IDIwOSA2IDE5NyAxIDE4NiAtMTAgY3QgCisxNzUgLTIxIDE3MCAtMzYgMTcwIC01NSBjdCAxNzAgLTg0IDE4MCAtMTE0IDE5OSAtMTQ2IGN0IDIxOCAtMTc4IDI0MiAtMjAzIDI3MSAtMjIyIGN0IAorMjk0IC0yMzcgMzE2IC0yNDUgMzM2IC0yNDUgY3QgMzQ4IC0yNDUgMzU4IC0yNDIgMzY2IC0yMzcgY3QgMzc1IC0yMzIgMzgxIC0yMjMgMzg1IC0yMTAgY3QgCiszODUgLTIxMCAzODUgLTIxMCAzOTMgLTIzOCBjdCAzOTMgLTIzOCAzOTMgLTIzOCA0MzYgLTI0NSBjdCBwCiszMzQgLTIzMSBtICAzMjEgLTIzMSAzMDggLTIyNiAyOTMgLTIxNSBjdCAyNzMgLTIwMCAyNTUgLTE3NyAyMzkgLTE0NyBjdCAyMjMgLTExNyAyMTUgLTkwIDIxNSAtNjYgY3QgCisyMTUgLTUzIDIxOSAtNDQgMjI2IC0zNyBjdCAyMzMgLTMwIDI0MSAtMjYgMjUwIC0yNiBjdCAyNzMgLTI2IDI5NyAtNDAgMzI0IC02OSBjdCAKKzM1NiAtMTA4IDM3MiAtMTQ3IDM3MSAtMTg4IGN0IDM3MSAtMjAzIDM2OCAtMjE0IDM2MSAtMjIxIGN0IDM1NSAtMjI4IDM0NiAtMjMxIDMzNCAtMjMxIGN0IAorcCBlZgorNDY5IC0yMzQgbSAgNDY5IC0yMzQgNDY5IC0yMzQgNTYzIC0yNDkgY3QgNTYzIC0yNDkgNTYzIC0yNDkgNTI0IC0xMTUgY3QgNTU3IC0xNzAgNTg2IC0yMDggNjEzIC0yMzAgY3QgCis2MjggLTI0MyA2NDAgLTI0OSA2NDkgLTI0OSBjdCA2NTUgLTI0OSA2NjAgLTI0NyA2NjQgLTI0NCBjdCA2NjcgLTI0MCA2NjkgLTIzNSA2NjkgLTIyOCBjdCAKKzY2OSAtMjE2IDY2NiAtMjA0IDY2MCAtMTkzIGN0IDY1NSAtMTg1IDY0OSAtMTgxIDY0MSAtMTgxIGN0IDYzNiAtMTgxIDYzMyAtMTgyIDYzMCAtMTg1IGN0IAorNjI3IC0xODggNjI1IC0xOTIgNjI0IC0xOTggY3QgNjI0IC0yMDEgNjIzIC0yMDQgNjIxIC0yMDUgY3QgNjIwIC0yMDYgNjE4IC0yMDcgNjE2IC0yMDcgY3QgCis2MTMgLTIwNyA2MTAgLTIwNiA2MDcgLTIwNSBjdCA2MDMgLTIwMiA1OTUgLTE5NSA1ODYgLTE4MyBjdCA1NzAgLTE2NSA1NTQgLTE0MiA1MzYgLTExMyBjdCAKKzUyOCAtMTAxIDUyMSAtODggNTE2IC03MiBjdCA1MDggLTUxIDUwNCAtMzkgNTAzIC0zNSBjdCA1MDMgLTM1IDUwMyAtMzUgNDk0IDAgY3QgCis0OTQgMCA0OTQgMCA0NTIgMCBjdCA0NTIgMCA0NTIgMCA1MDEgLTE3MSBjdCA1MDcgLTE5MSA1MTAgLTIwNSA1MTAgLTIxNCBjdCA1MTAgLTIxNyA1MDkgLTIyMCA1MDYgLTIyMiBjdCAKKzUwMiAtMjI1IDQ5OCAtMjI2IDQ5MiAtMjI2IGN0IDQ4OCAtMjI2IDQ4MiAtMjI2IDQ3MiAtMjI0IGN0IDQ3MiAtMjI0IDQ3MiAtMjI0IDQ2OSAtMjM0IGN0IAorcCBlZgorOTU0IC0yMzIgbSAgOTU0IC0yMzIgOTU0IC0yMzIgOTQ2IC0yMDQgY3QgOTQ2IC0yMDQgOTQ2IC0yMDQgOTAwIC0yMDQgY3QgOTAzIC0xOTQgOTA1IC0xODUgOTA1IC0xNzYgY3QgCis5MDUgLTE1MiA4OTUgLTEzMCA4NzQgLTExMSBjdCA4NTMgLTkyIDgyNCAtODEgNzg4IC03OSBjdCA3NjggLTczIDc1NCAtNjYgNzQ0IC01OCBjdCAKKzc0MSAtNTUgNzM5IC01MiA3MzkgLTQ5IGN0IDczOSAtNDUgNzQxIC00MiA3NDQgLTM5IGN0IDc0NyAtMzYgNzU2IC0zMyA3NzAgLTI5IGN0IAorNzcwIC0yOSA3NzAgLTI5IDgyMiAtMTcgY3QgODUxIC0xMSA4NzEgLTMgODgwIDcgY3QgODg5IDE3IDg5NCAyOCA4OTQgNDEgY3QgODk0IDU2IDg4OCA3MCA4NzcgODIgY3QgCis4NjYgOTUgODUwIDEwNCA4MjkgMTExIGN0IDgwNyAxMTggNzg0IDEyMiA3NTggMTIyIGN0IDczNSAxMjIgNzE0IDExOSA2OTUgMTE0IGN0IAorNjc3IDEwOCA2NjMgMTAxIDY1NSA5MiBjdCA2NDcgODMgNjQzIDczIDY0MyA2NCBjdCA2NDMgNTYgNjQ2IDQ4IDY1MSAzOSBjdCA2NTYgMzEgNjYzIDI0IDY3MSAxOCBjdCAKKzY3NiAxNSA2OTAgNiA3MTQgLTcgY3QgNzA1IC0xMyA3MDEgLTIxIDcwMSAtMjggY3QgNzAxIC0zNiA3MDUgLTQ0IDcxMiAtNTIgY3QgNzE5IC02MCA3MzQgLTY5IDc1OCAtNzkgY3QgCis3MzggLTgzIDcyMyAtOTEgNzExIC0xMDQgY3QgNzAwIC0xMTcgNjk0IC0xMzIgNjk0IC0xNDggY3QgNjk0IC0xNzQgNzA2IC0xOTcgNzI5IC0yMTggY3QgCis3NTIgLTIzOSA3ODIgLTI0OSA4MjAgLTI0OSBjdCA4MzQgLTI0OSA4NDYgLTI0OCA4NTUgLTI0NSBjdCA4NjMgLTI0MiA4NzIgLTIzOCA4ODAgLTIzMiBjdCAKKzg4MCAtMjMyIDg4MCAtMjMyIDk1NCAtMjMyIGN0IHAKKzg2MCAtMTg4IG0gIDg2MCAtMjAyIDg1NiAtMjE0IDg0NyAtMjIyIGN0IDgzOSAtMjMxIDgyOCAtMjM1IDgxNCAtMjM1IGN0IDc5MiAtMjM1IDc3NCAtMjI1IDc2MCAtMjA0IGN0IAorNzQ2IC0xODMgNzM5IC0xNjIgNzM5IC0xMzkgY3QgNzM5IC0xMjUgNzQ0IC0xMTMgNzUzIC0xMDQgY3QgNzYyIC05NSA3NzIgLTkxIDc4NSAtOTEgY3QgCis3OTUgLTkxIDgwNSAtOTQgODE1IC05OSBjdCA4MjQgLTEwNCA4MzIgLTExMiA4MzkgLTEyMSBjdCA4NDUgLTEzMCA4NTAgLTE0MiA4NTQgLTE1NyBjdCAKKzg1OCAtMTcxIDg2MCAtMTgxIDg2MCAtMTg4IGN0IHAKKzcyNiAwIG0gIDcxMCA3IDY5OSAxNiA2OTEgMjcgY3QgNjgzIDM3IDY3OSA0OCA2NzkgNTggY3QgNjc5IDcwIDY4NSA4MCA2OTYgODggY3QgCis3MTEgOTkgNzM1IDEwNSA3NjUgMTA1IGN0IDc5MiAxMDUgODE0IDEwMSA4MzMgOTIgY3QgODUyIDgzIDg2MSA3MSA4NjEgNTcgY3QgODYxIDUwIDg1OCA0MyA4NTEgMzcgY3QgCis4NDQgMzAgODMxIDI1IDgxMSAyMSBjdCA4MDAgMTkgNzcyIDEyIDcyNiAwIGN0IHAgZWYKKzEwMDggLTEwNiBtICAxMDA3IC05NyAxMDA2IC04OSAxMDA2IC04MyBjdCAxMDA2IC02NiAxMDEyIC01MiAxMDI0IC00MCBjdCAxMDM1IC0yOSAxMDUwIC0yMyAxMDY3IC0yMyBjdCAKKzEwODAgLTIzIDEwOTMgLTI2IDExMDUgLTMxIGN0IDExMTggLTM3IDExMzYgLTQ5IDExNjEgLTY4IGN0IDExNjEgLTY4IDExNjEgLTY4IDExNjcgLTYwIGN0IAorMTEyMyAtMTYgMTA4MiA2IDEwNDIgNiBjdCAxMDE1IDYgOTk1IC0yIDk4MSAtMTkgY3QgOTY4IC0zNiA5NjEgLTU1IDk2MSAtNzUgY3QgOTYxIC0xMDIgOTY5IC0xMzAgOTg2IC0xNTkgY3QgCisxMDAzIC0xODcgMTAyNCAtMjA5IDEwNTAgLTIyNSBjdCAxMDc1IC0yNDEgMTEwMiAtMjQ5IDExMjkgLTI0OSBjdCAxMTQ4IC0yNDkgMTE2MyAtMjQ1IDExNzIgLTIzNyBjdCAKKzExODEgLTIzMCAxMTg2IC0yMjAgMTE4NiAtMjEwIGN0IDExODYgLTE5NSAxMTgwIC0xODAgMTE2OCAtMTY3IGN0IDExNTEgLTE0OSAxMTI4IC0xMzQgMTA5NiAtMTIzIGN0IAorMTA3NSAtMTE2IDEwNDYgLTExMCAxMDA4IC0xMDYgY3QgcAorMTAxMCAtMTE4IG0gIDEwMzggLTEyMSAxMDYwIC0xMjYgMTA3OCAtMTM0IGN0IDExMDEgLTE0NCAxMTE4IC0xNTYgMTEzMCAtMTcwIGN0IAorMTE0MSAtMTg0IDExNDcgLTE5NyAxMTQ3IC0yMDkgY3QgMTE0NyAtMjE3IDExNDUgLTIyMyAxMTQwIC0yMjggY3QgMTEzNSAtMjMzIDExMjggLTIzNSAxMTE4IC0yMzUgY3QgCisxMDk5IC0yMzUgMTA3OSAtMjI1IDEwNTcgLTIwNSBjdCAxMDM2IC0xODYgMTAyMCAtMTU3IDEwMTAgLTExOCBjdCBwIGVmCisxMzQ3IC0zMTcgbSAgMTM0NyAtMzE3IDEzNDcgLTMxNyAxMzI1IC0yNDMgY3QgMTMyNSAtMjQzIDEzMjUgLTI0MyAxMzYzIC0yNDMgY3QgCisxMzYzIC0yNDMgMTM2MyAtMjQzIDEzNTggLTIyNSBjdCAxMzU4IC0yMjUgMTM1OCAtMjI1IDEzMTkgLTIyNSBjdCAxMzE5IC0yMjUgMTMxOSAtMjI1IDEyNzAgLTYzIGN0IAorMTI2MyAtNDQgMTI2MCAtMzMgMTI2MCAtMjcgY3QgMTI2MCAtMjQgMTI2MSAtMjIgMTI2MiAtMjAgY3QgMTI2MyAtMTkgMTI2NSAtMTggMTI2NyAtMTggY3QgCisxMjcxIC0xOCAxMjc2IC0yMSAxMjgzIC0yNyBjdCAxMjg3IC0zMSAxMjk1IC00MiAxMzA5IC02MSBjdCAxMzA5IC02MSAxMzA5IC02MSAxMzE4IC01NCBjdCAKKzEzMDIgLTMwIDEyODcgLTEzIDEyNzMgLTQgY3QgMTI2MyAzIDEyNTMgNiAxMjQzIDYgY3QgMTIzNiA2IDEyMzAgNCAxMjI1IC0xIGN0IDEyMjAgLTYgMTIxOCAtMTMgMTIxOCAtMjAgY3QgCisxMjE4IC0zMCAxMjIxIC00NSAxMjI3IC02NiBjdCAxMjI3IC02NiAxMjI3IC02NiAxMjc1IC0yMjUgY3QgMTI3NSAtMjI1IDEyNzUgLTIyNSAxMjMzIC0yMjUgY3QgCisxMjMzIC0yMjUgMTIzMyAtMjI1IDEyMzYgLTIzNiBjdCAxMjU2IC0yNDIgMTI3MyAtMjUwIDEyODcgLTI2MSBjdCAxMzAxIC0yNzIgMTMxNyAtMjkxIDEzMzUgLTMxNyBjdCAKKzEzMzUgLTMxNyAxMzM1IC0zMTcgMTM0NyAtMzE3IGN0IHAgZWYKK3BvbQorZ3IKK2dyCitncworZ3MKK3B1bQorNjQ4MyAxODk2NCB0Cis4NSAtOTMgbSAgNjkgLTEwMSA1OCAtMTExIDQ5IC0xMjUgY3QgNDEgLTEzOCAzNyAtMTUzIDM3IC0xNjkgY3QgMzcgLTE5NCA0NiAtMjE1IDY1IC0yMzMgY3QgCis4NCAtMjUxIDEwOCAtMjYwIDEzOCAtMjYwIGN0IDE2MiAtMjYwIDE4MyAtMjU0IDIwMCAtMjQyIGN0IDIwMCAtMjQyIDIwMCAtMjQyIDI1NCAtMjQyIGN0IAorMjYyIC0yNDIgMjY2IC0yNDIgMjY4IC0yNDEgY3QgMjY5IC0yNDEgMjcwIC0yNDAgMjcwIC0yMzkgY3QgMjcxIC0yMzcgMjcyIC0yMzQgMjcyIC0yMzAgY3QgCisyNzIgLTIyNSAyNzIgLTIyMiAyNzEgLTIyMCBjdCAyNzAgLTIxOSAyNjkgLTIxOCAyNjggLTIxOCBjdCAyNjYgLTIxNyAyNjIgLTIxNyAyNTQgLTIxNyBjdCAKKzI1NCAtMjE3IDI1NCAtMjE3IDIyMSAtMjE3IGN0IDIzMSAtMjA0IDIzNiAtMTg3IDIzNiAtMTY3IGN0IDIzNiAtMTQzIDIyNyAtMTIzIDIwOSAtMTA3IGN0IAorMTkxIC05MCAxNjcgLTgyIDEzNyAtODIgY3QgMTI0IC04MiAxMTEgLTg0IDk4IC04OCBjdCA5MCAtODEgODUgLTc0IDgyIC02OSBjdCA3OSAtNjQgNzggLTU5IDc4IC01NiBjdCAKKzc4IC01MiA4MCAtNDkgODMgLTQ2IGN0IDg2IC00MyA5MSAtNDEgMTAwIC00MCBjdCAxMDUgLTM5IDExOCAtMzkgMTM5IC0zOCBjdCAxNzYgLTM3IDIwMSAtMzYgMjEyIC0zNCBjdCAKKzIyOSAtMzIgMjQzIC0yNSAyNTMgLTE1IGN0IDI2MyAtNSAyNjggOCAyNjggMjMgY3QgMjY4IDQ0IDI1OCA2MyAyMzkgODIgY3QgMjExIDEwOSAxNzMgMTIyIDEyOCAxMjIgY3QgCis5MiAxMjIgNjMgMTE0IDM5IDk4IGN0IDI1IDg5IDE4IDc5IDE4IDY5IGN0IDE4IDY1IDE5IDYwIDIxIDU2IGN0IDI0IDQ5IDMwIDQwIDQwIDI4IGN0IAorNDEgMjYgNTAgMTYgNjcgLTIgY3QgNTggLTggNTEgLTEzIDQ3IC0xOCBjdCA0MyAtMjIgNDEgLTI3IDQxIC0zMyBjdCA0MSAtNDAgNDQgLTQ3IDQ5IC01NiBjdCAKKzU0IC02NSA2NiAtNzcgODUgLTkzIGN0IHAKKzEzMyAtMjQ2IG0gIDExOSAtMjQ2IDEwOCAtMjQxIDk5IC0yMzAgY3QgOTAgLTIxOSA4NSAtMjAzIDg1IC0xODEgY3QgODUgLTE1MiA5MSAtMTMwIDEwNCAtMTE0IGN0IAorMTEzIC0xMDIgMTI1IC05NiAxNDAgLTk2IGN0IDE1NCAtOTYgMTY2IC0xMDEgMTc1IC0xMTIgY3QgMTg0IC0xMjIgMTg4IC0xMzggMTg4IC0xNjAgY3QgCisxODggLTE4OSAxODIgLTIxMiAxNjkgLTIyOCBjdCAxNjAgLTI0MCAxNDggLTI0NiAxMzMgLTI0NiBjdCBwCis4MiAwIG0gIDc0IDkgNjggMTggNjMgMjYgY3QgNTkgMzQgNTcgNDIgNTcgNDkgY3QgNTcgNTcgNjIgNjUgNzMgNzIgY3QgOTEgODMgMTE3IDg5IDE1MiA4OSBjdCAKKzE4NSA4OSAyMDkgODMgMjI1IDcxIGN0IDI0MCA2MCAyNDggNDcgMjQ4IDM0IGN0IDI0OCAyNCAyNDMgMTcgMjM0IDEzIGN0IDIyNCA5IDIwNiA3IDE3NyA2IGN0IAorMTM2IDUgMTA0IDMgODIgMCBjdCBwIGVmCis0NDUgLTM3IG0gIDQxOSAtMTcgNDAzIC01IDM5NiAtMiBjdCAzODYgMyAzNzYgNSAzNjQgNSBjdCAzNDcgNSAzMzIgLTEgMzIxIC0xMyBjdCAKKzMxMCAtMjUgMzA0IC00MCAzMDQgLTYwIGN0IDMwNCAtNzIgMzA3IC04MyAzMTIgLTkyIGN0IDMyMCAtMTA0IDMzMyAtMTE2IDM1MiAtMTI3IGN0IAorMzcwIC0xMzggNDAyIC0xNTEgNDQ1IC0xNjcgY3QgNDQ1IC0xNjcgNDQ1IC0xNjcgNDQ1IC0xNzcgY3QgNDQ1IC0yMDIgNDQxIC0yMTkgNDMzIC0yMjggY3QgCis0MjUgLTIzNyA0MTQgLTI0MiAzOTggLTI0MiBjdCAzODcgLTI0MiAzNzggLTIzOSAzNzEgLTIzMyBjdCAzNjQgLTIyNiAzNjAgLTIxOSAzNjAgLTIxMSBjdCAKKzM2MCAtMjExIDM2MCAtMjExIDM2MSAtMTk1IGN0IDM2MSAtMTg3IDM1OSAtMTgwIDM1NCAtMTc2IGN0IDM1MCAtMTcxIDM0NCAtMTY5IDMzNyAtMTY5IGN0IAorMzMxIC0xNjkgMzI1IC0xNzEgMzIxIC0xNzYgY3QgMzE2IC0xODEgMzE0IC0xODggMzE0IC0xOTYgY3QgMzE0IC0yMTIgMzIyIC0yMjcgMzM4IC0yNDAgY3QgCiszNTQgLTI1MyAzNzcgLTI2MCA0MDYgLTI2MCBjdCA0MjggLTI2MCA0NDcgLTI1NiA0NjEgLTI0OSBjdCA0NzIgLTI0MyA0ODAgLTIzNCA0ODUgLTIyMiBjdCAKKzQ4OCAtMjE0IDQ5MCAtMTk4IDQ5MCAtMTc0IGN0IDQ5MCAtMTc0IDQ5MCAtMTc0IDQ5MCAtODkgY3QgNDkwIC02NSA0OTAgLTUwIDQ5MSAtNDUgY3QgCis0OTIgLTM5IDQ5NCAtMzYgNDk2IC0zNCBjdCA0OTggLTMyIDUwMCAtMzEgNTAzIC0zMSBjdCA1MDYgLTMxIDUwOSAtMzIgNTExIC0zMyBjdCAKKzUxNSAtMzUgNTIyIC00MiA1MzMgLTUzIGN0IDUzMyAtNTMgNTMzIC01MyA1MzMgLTM4IGN0IDUxMyAtMTAgNDkzIDQgNDc1IDQgY3QgNDY2IDQgNDU4IDEgNDUzIC01IGN0IAorNDQ4IC0xMSA0NDUgLTIyIDQ0NSAtMzcgY3QgcAorNDQ1IC01NCBtICA0NDUgLTU0IDQ0NSAtNTQgNDQ1IC0xNDkgY3QgNDE3IC0xMzggMzk5IC0xMzAgMzkxIC0xMjYgY3QgMzc2IC0xMTggMzY2IC0xMTAgMzU5IC0xMDEgY3QgCiszNTMgLTkyIDM1MCAtODMgMzUwIC03MiBjdCAzNTAgLTU5IDM1NCAtNDkgMzYyIC00MCBjdCAzNzAgLTMxIDM3OSAtMjcgMzg5IC0yNyBjdCAKKzQwNCAtMjcgNDIyIC0zNiA0NDUgLTU0IGN0IHAgZWYKKzYxNSAtMzkyIG0gIDYyMyAtMzkyIDYyOSAtMzg5IDYzNSAtMzg0IGN0IDY0MCAtMzc4IDY0MyAtMzcyIDY0MyAtMzY0IGN0IDY0MyAtMzU2IDY0MCAtMzUwIDYzNSAtMzQ0IGN0IAorNjI5IC0zMzkgNjIzIC0zMzYgNjE1IC0zMzYgY3QgNjA3IC0zMzYgNjAxIC0zMzkgNTk1IC0zNDQgY3QgNTkwIC0zNTAgNTg3IC0zNTYgNTg3IC0zNjQgY3QgCis1ODcgLTM3MiA1OTAgLTM3OCA1OTUgLTM4NCBjdCA2MDEgLTM4OSA2MDcgLTM5MiA2MTUgLTM5MiBjdCBwCis2MzggLTI2MCBtICA2MzggLTI2MCA2MzggLTI2MCA2MzggLTU3IGN0IDYzOCAtNDEgNjM5IC0zMSA2NDEgLTI2IGN0IDY0NCAtMjAgNjQ3IC0xNiA2NTEgLTE0IGN0IAorNjU2IC0xMSA2NjMgLTEwIDY3NSAtMTAgY3QgNjc1IC0xMCA2NzUgLTEwIDY3NSAwIGN0IDY3NSAwIDY3NSAwIDU1NSAwIGN0IDU1NSAwIDU1NSAwIDU1NSAtMTAgY3QgCis1NjcgLTEwIDU3NSAtMTEgNTc5IC0xNCBjdCA1ODMgLTE2IDU4NiAtMjAgNTg4IC0yNSBjdCA1OTEgLTMxIDU5MiAtNDEgNTkyIC01NyBjdCAKKzU5MiAtNTcgNTkyIC01NyA1OTIgLTE1NCBjdCA1OTIgLTE4MSA1OTEgLTE5OSA1OTAgLTIwNyBjdCA1ODggLTIxMyA1ODYgLTIxNyA1ODQgLTIyMCBjdCAKKzU4MSAtMjIyIDU3NyAtMjIzIDU3MiAtMjIzIGN0IDU2NyAtMjIzIDU2MSAtMjIyIDU1NCAtMjE5IGN0IDU1NCAtMjE5IDU1NCAtMjE5IDU1MCAtMjI5IGN0IAorNTUwIC0yMjkgNTUwIC0yMjkgNjI2IC0yNjAgY3QgNjI2IC0yNjAgNjI2IC0yNjAgNjM4IC0yNjAgY3QgcCBlZgorNzgyIC0yMDcgbSAgODExIC0yNDIgODM5IC0yNjAgODY2IC0yNjAgY3QgODgwIC0yNjAgODkyIC0yNTcgOTAxIC0yNTAgY3QgOTExIC0yNDMgOTE5IC0yMzEgOTI1IC0yMTYgY3QgCis5MjkgLTIwNSA5MzEgLTE4OCA5MzEgLTE2NSBjdCA5MzEgLTE2NSA5MzEgLTE2NSA5MzEgLTU3IGN0IDkzMSAtNDEgOTMyIC0zMCA5MzUgLTI1IGN0IAorOTM3IC0yMCA5NDAgLTE2IDk0NCAtMTQgY3QgOTQ4IC0xMSA5NTYgLTEwIDk2OCAtMTAgY3QgOTY4IC0xMCA5NjggLTEwIDk2OCAwIGN0IAorOTY4IDAgOTY4IDAgODQ0IDAgY3QgODQ0IDAgODQ0IDAgODQ0IC0xMCBjdCA4NDQgLTEwIDg0NCAtMTAgODQ5IC0xMCBjdCA4NjEgLTEwIDg2OSAtMTIgODc0IC0xNSBjdCAKKzg3OSAtMTkgODgyIC0yNCA4ODQgLTMxIGN0IDg4NSAtMzQgODg1IC00MyA4ODUgLTU3IGN0IDg4NSAtNTcgODg1IC01NyA4ODUgLTE2MSBjdCAKKzg4NSAtMTg0IDg4MiAtMjAxIDg3NiAtMjExIGN0IDg3MCAtMjIyIDg2MCAtMjI3IDg0NiAtMjI3IGN0IDgyNSAtMjI3IDgwMyAtMjE1IDc4MiAtMTkxIGN0IAorNzgyIC0xOTEgNzgyIC0xOTEgNzgyIC01NyBjdCA3ODIgLTQwIDc4MyAtMjkgNzg1IC0yNSBjdCA3ODggLTIwIDc5MSAtMTYgNzk2IC0xNCBjdCAKKzgwMCAtMTEgODA5IC0xMCA4MjMgLTEwIGN0IDgyMyAtMTAgODIzIC0xMCA4MjMgMCBjdCA4MjMgMCA4MjMgMCA2OTkgMCBjdCA2OTkgMCA2OTkgMCA2OTkgLTEwIGN0IAorNjk5IC0xMCA2OTkgLTEwIDcwNCAtMTAgY3QgNzE3IC0xMCA3MjUgLTEzIDcyOSAtMjAgY3QgNzM0IC0yNiA3MzYgLTM5IDczNiAtNTcgY3QgCis3MzYgLTU3IDczNiAtNTcgNzM2IC0xNTEgY3QgNzM2IC0xODEgNzM1IC0yMDAgNzM0IC0yMDYgY3QgNzMzIC0yMTMgNzMxIC0yMTcgNzI4IC0yMjAgY3QgCis3MjUgLTIyMiA3MjEgLTIyMyA3MTYgLTIyMyBjdCA3MTEgLTIyMyA3MDUgLTIyMiA2OTggLTIxOSBjdCA2OTggLTIxOSA2OTggLTIxOSA2OTQgLTIyOSBjdCAKKzY5NCAtMjI5IDY5NCAtMjI5IDc3MCAtMjYwIGN0IDc3MCAtMjYwIDc3MCAtMjYwIDc4MiAtMjYwIGN0IDc4MiAtMjYwIDc4MiAtMjYwIDc4MiAtMjA3IGN0IAorcCBlZgorMTIwNSAtMjA3IG0gIDEyMzQgLTI0MiAxMjYyIC0yNjAgMTI4OSAtMjYwIGN0IDEzMDMgLTI2MCAxMzE1IC0yNTcgMTMyNCAtMjUwIGN0IAorMTMzNCAtMjQzIDEzNDIgLTIzMSAxMzQ4IC0yMTYgY3QgMTM1MiAtMjA1IDEzNTQgLTE4OCAxMzU0IC0xNjUgY3QgMTM1NCAtMTY1IDEzNTQgLTE2NSAxMzU0IC01NyBjdCAKKzEzNTQgLTQxIDEzNTUgLTMwIDEzNTggLTI1IGN0IDEzNjAgLTIwIDEzNjMgLTE2IDEzNjcgLTE0IGN0IDEzNzEgLTExIDEzNzkgLTEwIDEzOTEgLTEwIGN0IAorMTM5MSAtMTAgMTM5MSAtMTAgMTM5MSAwIGN0IDEzOTEgMCAxMzkxIDAgMTI2NyAwIGN0IDEyNjcgMCAxMjY3IDAgMTI2NyAtMTAgY3QgMTI2NyAtMTAgMTI2NyAtMTAgMTI3MiAtMTAgY3QgCisxMjg0IC0xMCAxMjkyIC0xMiAxMjk3IC0xNSBjdCAxMzAyIC0xOSAxMzA1IC0yNCAxMzA3IC0zMSBjdCAxMzA4IC0zNCAxMzA4IC00MyAxMzA4IC01NyBjdCAKKzEzMDggLTU3IDEzMDggLTU3IDEzMDggLTE2MSBjdCAxMzA4IC0xODQgMTMwNSAtMjAxIDEyOTkgLTIxMSBjdCAxMjkzIC0yMjIgMTI4MyAtMjI3IDEyNjkgLTIyNyBjdCAKKzEyNDggLTIyNyAxMjI2IC0yMTUgMTIwNSAtMTkxIGN0IDEyMDUgLTE5MSAxMjA1IC0xOTEgMTIwNSAtNTcgY3QgMTIwNSAtNDAgMTIwNiAtMjkgMTIwOCAtMjUgY3QgCisxMjExIC0yMCAxMjE0IC0xNiAxMjE5IC0xNCBjdCAxMjIzIC0xMSAxMjMyIC0xMCAxMjQ2IC0xMCBjdCAxMjQ2IC0xMCAxMjQ2IC0xMCAxMjQ2IDAgY3QgCisxMjQ2IDAgMTI0NiAwIDExMjIgMCBjdCAxMTIyIDAgMTEyMiAwIDExMjIgLTEwIGN0IDExMjIgLTEwIDExMjIgLTEwIDExMjcgLTEwIGN0IAorMTE0MCAtMTAgMTE0OCAtMTMgMTE1MiAtMjAgY3QgMTE1NyAtMjYgMTE1OSAtMzkgMTE1OSAtNTcgY3QgMTE1OSAtNTcgMTE1OSAtNTcgMTE1OSAtMTUxIGN0IAorMTE1OSAtMTgxIDExNTggLTIwMCAxMTU3IC0yMDYgY3QgMTE1NiAtMjEzIDExNTQgLTIxNyAxMTUxIC0yMjAgY3QgMTE0OCAtMjIyIDExNDQgLTIyMyAxMTM5IC0yMjMgY3QgCisxMTM0IC0yMjMgMTEyOCAtMjIyIDExMjEgLTIxOSBjdCAxMTIxIC0yMTkgMTEyMSAtMjE5IDExMTcgLTIyOSBjdCAxMTE3IC0yMjkgMTExNyAtMjI5IDExOTMgLTI2MCBjdCAKKzExOTMgLTI2MCAxMTkzIC0yNjAgMTIwNSAtMjYwIGN0IDEyMDUgLTI2MCAxMjA1IC0yNjAgMTIwNSAtMjA3IGN0IHAgZWYKKzE1MzkgLTI2MCBtICAxNTc3IC0yNjAgMTYwOCAtMjQ2IDE2MzEgLTIxNyBjdCAxNjUwIC0xOTIgMTY2MCAtMTYzIDE2NjAgLTEzMSBjdCAKKzE2NjAgLTEwOSAxNjU1IC04NiAxNjQ0IC02MyBjdCAxNjMzIC00MCAxNjE4IC0yMiAxNTk5IC0xMSBjdCAxNTgwIDEgMTU1OSA3IDE1MzYgNyBjdCAKKzE0OTggNyAxNDY4IC04IDE0NDUgLTM4IGN0IDE0MjYgLTY0IDE0MTcgLTkyIDE0MTcgLTEyNCBjdCAxNDE3IC0xNDcgMTQyMyAtMTcwIDE0MzQgLTE5MyBjdCAKKzE0NDYgLTIxNiAxNDYxIC0yMzMgMTQ3OSAtMjQ0IGN0IDE0OTggLTI1NSAxNTE4IC0yNjAgMTUzOSAtMjYwIGN0IHAKKzE1MzAgLTI0MiBtICAxNTIxIC0yNDIgMTUxMSAtMjM5IDE1MDEgLTIzMyBjdCAxNDkxIC0yMjggMTQ4MyAtMjE4IDE0NzcgLTIwMyBjdCAKKzE0NzEgLTE4OSAxNDY4IC0xNzAgMTQ2OCAtMTQ3IGN0IDE0NjggLTExMSAxNDc1IC03OSAxNDkwIC01MyBjdCAxNTA1IC0yNiAxNTI0IC0xMyAxNTQ4IC0xMyBjdCAKKzE1NjUgLTEzIDE1ODAgLTIwIDE1OTIgLTM1IGN0IDE2MDMgLTUwIDE2MDkgLTc1IDE2MDkgLTExMCBjdCAxNjA5IC0xNTUgMTU5OSAtMTkwIDE1ODAgLTIxNiBjdCAKKzE1NjcgLTIzMyAxNTUwIC0yNDIgMTUzMCAtMjQyIGN0IHAgZWYKKzE3NzMgLTI2MCBtICAxNzczIC0yNjAgMTc3MyAtMjYwIDE3NzMgLTIwMyBjdCAxNzk0IC0yNDEgMTgxNiAtMjYwIDE4MzggLTI2MCBjdCAKKzE4NDggLTI2MCAxODU2IC0yNTcgMTg2MyAtMjUxIGN0IDE4NzAgLTI0NSAxODczIC0yMzggMTg3MyAtMjMwIGN0IDE4NzMgLTIyMiAxODcxIC0yMTYgMTg2NiAtMjExIGN0IAorMTg2MSAtMjA2IDE4NTUgLTIwNCAxODQ5IC0yMDQgY3QgMTg0MiAtMjA0IDE4MzUgLTIwNyAxODI3IC0yMTQgY3QgMTgxOSAtMjIwIDE4MTMgLTIyMyAxODA5IC0yMjMgY3QgCisxODA2IC0yMjMgMTgwMiAtMjIxIDE3OTkgLTIxNyBjdCAxNzkwIC0yMTAgMTc4MiAtMTk4IDE3NzMgLTE4MCBjdCAxNzczIC0xODAgMTc3MyAtMTgwIDE3NzMgLTU5IGN0IAorMTc3MyAtNDUgMTc3NSAtMzQgMTc3OCAtMjcgY3QgMTc4MSAtMjIgMTc4NSAtMTggMTc5MSAtMTUgY3QgMTc5NyAtMTIgMTgwNiAtMTAgMTgxOCAtMTAgY3QgCisxODE4IC0xMCAxODE4IC0xMCAxODE4IDAgY3QgMTgxOCAwIDE4MTggMCAxNjg2IDAgY3QgMTY4NiAwIDE2ODYgMCAxNjg2IC0xMCBjdCAxNjk5IC0xMCAxNzA5IC0xMiAxNzE2IC0xNiBjdCAKKzE3MjAgLTE5IDE3MjQgLTI0IDE3MjYgLTMwIGN0IDE3MjcgLTMzIDE3MjcgLTQyIDE3MjcgLTU3IGN0IDE3MjcgLTU3IDE3MjcgLTU3IDE3MjcgLTE1NCBjdCAKKzE3MjcgLTE4NCAxNzI2IC0yMDEgMTcyNSAtMjA3IGN0IDE3MjQgLTIxMyAxNzIyIC0yMTcgMTcxOSAtMjE5IGN0IDE3MTYgLTIyMiAxNzEyIC0yMjMgMTcwNyAtMjIzIGN0IAorMTcwMSAtMjIzIDE2OTUgLTIyMiAxNjg4IC0yMTkgY3QgMTY4OCAtMjE5IDE2ODggLTIxOSAxNjg1IC0yMjkgY3QgMTY4NSAtMjI5IDE2ODUgLTIyOSAxNzYxIC0yNjAgY3QgCisxNzYxIC0yNjAgMTc2MSAtMjYwIDE3NzMgLTI2MCBjdCBwIGVmCisxOTYwIC0yMDYgbSAgMTk3OCAtMjI1IDE5ODkgLTIzNSAxOTkyIC0yMzggY3QgMjAwMSAtMjQ1IDIwMDkgLTI1MCAyMDE5IC0yNTQgY3QgCisyMDI5IC0yNTggMjAzOCAtMjYwIDIwNDcgLTI2MCBjdCAyMDYzIC0yNjAgMjA3NyAtMjU1IDIwODggLTI0NiBjdCAyMDk5IC0yMzcgMjEwNyAtMjI0IDIxMTEgLTIwNiBjdCAKKzIxMzAgLTIyOCAyMTQ2IC0yNDMgMjE1OSAtMjUwIGN0IDIxNzIgLTI1NyAyMTg1IC0yNjAgMjE5OSAtMjYwIGN0IDIyMTIgLTI2MCAyMjI0IC0yNTcgMjIzNCAtMjUwIGN0IAorMjI0NSAtMjQzIDIyNTMgLTIzMiAyMjU5IC0yMTYgY3QgMjI2MyAtMjA1IDIyNjUgLTE4OCAyMjY1IC0xNjYgY3QgMjI2NSAtMTY2IDIyNjUgLTE2NiAyMjY1IC01NyBjdCAKKzIyNjUgLTQxIDIyNjYgLTMwIDIyNjggLTI1IGN0IDIyNzAgLTIxIDIyNzQgLTE3IDIyNzggLTE0IGN0IDIyODMgLTExIDIyOTEgLTEwIDIzMDIgLTEwIGN0IAorMjMwMiAtMTAgMjMwMiAtMTAgMjMwMiAwIGN0IDIzMDIgMCAyMzAyIDAgMjE3OCAwIGN0IDIxNzggMCAyMTc4IDAgMjE3OCAtMTAgY3QgMjE3OCAtMTAgMjE3OCAtMTAgMjE4MyAtMTAgY3QgCisyMTk0IC0xMCAyMjAzIC0xMiAyMjA5IC0xNiBjdCAyMjEzIC0xOSAyMjE2IC0yNCAyMjE4IC0zMCBjdCAyMjE5IC0zMyAyMjE5IC00MiAyMjE5IC01NyBjdCAKKzIyMTkgLTU3IDIyMTkgLTU3IDIyMTkgLTE2NiBjdCAyMjE5IC0xODYgMjIxNyAtMjAxIDIyMTIgLTIwOSBjdCAyMjA0IC0yMjEgMjE5MyAtMjI3IDIxNzcgLTIyNyBjdCAKKzIxNjggLTIyNyAyMTU4IC0yMjUgMjE0OCAtMjIwIGN0IDIxMzggLTIxNSAyMTI2IC0yMDYgMjExMyAtMTkzIGN0IDIxMTMgLTE5MyAyMTEzIC0xOTMgMjExMiAtMTg5IGN0IAorMjExMiAtMTg5IDIxMTIgLTE4OSAyMTEzIC0xNzggY3QgMjExMyAtMTc4IDIxMTMgLTE3OCAyMTEzIC01NyBjdCAyMTEzIC00MCAyMTE0IC0yOSAyMTE2IC0yNSBjdCAKKzIxMTggLTIxIDIxMjEgLTE3IDIxMjcgLTE0IGN0IDIxMzIgLTExIDIxNDEgLTEwIDIxNTQgLTEwIGN0IDIxNTQgLTEwIDIxNTQgLTEwIDIxNTQgMCBjdCAKKzIxNTQgMCAyMTU0IDAgMjAyNiAwIGN0IDIwMjYgMCAyMDI2IDAgMjAyNiAtMTAgY3QgMjA0MCAtMTAgMjA1MCAtMTIgMjA1NSAtMTUgY3QgCisyMDYwIC0xOCAyMDY0IC0yMyAyMDY2IC0zMCBjdCAyMDY3IC0zMyAyMDY3IC00MiAyMDY3IC01NyBjdCAyMDY3IC01NyAyMDY3IC01NyAyMDY3IC0xNjYgY3QgCisyMDY3IC0xODYgMjA2NCAtMjAxIDIwNTggLTIxMCBjdCAyMDUwIC0yMjEgMjAzOSAtMjI3IDIwMjQgLTIyNyBjdCAyMDE0IC0yMjcgMjAwNSAtMjI0IDE5OTUgLTIxOSBjdCAKKzE5ODAgLTIxMSAxOTY4IC0yMDIgMTk2MCAtMTkzIGN0IDE5NjAgLTE5MyAxOTYwIC0xOTMgMTk2MCAtNTcgY3QgMTk2MCAtNDEgMTk2MSAtMzAgMTk2MyAtMjUgY3QgCisxOTY2IC0yMCAxOTY5IC0xNiAxOTc0IC0xNCBjdCAxOTc4IC0xMSAxOTg3IC0xMCAyMDAxIC0xMCBjdCAyMDAxIC0xMCAyMDAxIC0xMCAyMDAxIDAgY3QgCisyMDAxIDAgMjAwMSAwIDE4NzcgMCBjdCAxODc3IDAgMTg3NyAwIDE4NzcgLTEwIGN0IDE4ODggLTEwIDE4OTYgLTExIDE5MDAgLTE0IGN0IAorMTkwNSAtMTYgMTkwOCAtMjAgMTkxMSAtMjYgY3QgMTkxMyAtMzEgMTkxNCAtNDEgMTkxNCAtNTcgY3QgMTkxNCAtNTcgMTkxNCAtNTcgMTkxNCAtMTU0IGN0IAorMTkxNCAtMTgyIDE5MTMgLTE5OSAxOTEyIC0yMDcgY3QgMTkxMCAtMjEzIDE5MDggLTIxNyAxOTA2IC0yMjAgY3QgMTkwMyAtMjIyIDE4OTkgLTIyMyAxODk0IC0yMjMgY3QgCisxODg5IC0yMjMgMTg4MyAtMjIyIDE4NzYgLTIxOSBjdCAxODc2IC0yMTkgMTg3NiAtMjE5IDE4NzIgLTIyOSBjdCAxODcyIC0yMjkgMTg3MiAtMjI5IDE5NDggLTI2MCBjdCAKKzE5NDggLTI2MCAxOTQ4IC0yNjAgMTk2MCAtMjYwIGN0IDE5NjAgLTI2MCAxOTYwIC0yNjAgMTk2MCAtMjA2IGN0IHAgZWYKKzI0NTUgLTM3IG0gIDI0MjkgLTE3IDI0MTMgLTUgMjQwNiAtMiBjdCAyMzk2IDMgMjM4NiA1IDIzNzQgNSBjdCAyMzU3IDUgMjM0MiAtMSAyMzMxIC0xMyBjdCAKKzIzMjAgLTI1IDIzMTQgLTQwIDIzMTQgLTYwIGN0IDIzMTQgLTcyIDIzMTcgLTgzIDIzMjIgLTkyIGN0IDIzMzAgLTEwNCAyMzQzIC0xMTYgMjM2MiAtMTI3IGN0IAorMjM4MCAtMTM4IDI0MTIgLTE1MSAyNDU1IC0xNjcgY3QgMjQ1NSAtMTY3IDI0NTUgLTE2NyAyNDU1IC0xNzcgY3QgMjQ1NSAtMjAyIDI0NTEgLTIxOSAyNDQzIC0yMjggY3QgCisyNDM1IC0yMzcgMjQyNCAtMjQyIDI0MDggLTI0MiBjdCAyMzk3IC0yNDIgMjM4OCAtMjM5IDIzODEgLTIzMyBjdCAyMzc0IC0yMjYgMjM3MCAtMjE5IDIzNzAgLTIxMSBjdCAKKzIzNzAgLTIxMSAyMzcwIC0yMTEgMjM3MSAtMTk1IGN0IDIzNzEgLTE4NyAyMzY5IC0xODAgMjM2NCAtMTc2IGN0IDIzNjAgLTE3MSAyMzU0IC0xNjkgMjM0NyAtMTY5IGN0IAorMjM0MSAtMTY5IDIzMzUgLTE3MSAyMzMxIC0xNzYgY3QgMjMyNiAtMTgxIDIzMjQgLTE4OCAyMzI0IC0xOTYgY3QgMjMyNCAtMjEyIDIzMzIgLTIyNyAyMzQ4IC0yNDAgY3QgCisyMzY0IC0yNTMgMjM4NyAtMjYwIDI0MTYgLTI2MCBjdCAyNDM4IC0yNjAgMjQ1NyAtMjU2IDI0NzEgLTI0OSBjdCAyNDgyIC0yNDMgMjQ5MCAtMjM0IDI0OTUgLTIyMiBjdCAKKzI0OTggLTIxNCAyNTAwIC0xOTggMjUwMCAtMTc0IGN0IDI1MDAgLTE3NCAyNTAwIC0xNzQgMjUwMCAtODkgY3QgMjUwMCAtNjUgMjUwMCAtNTAgMjUwMSAtNDUgY3QgCisyNTAyIC0zOSAyNTA0IC0zNiAyNTA2IC0zNCBjdCAyNTA4IC0zMiAyNTEwIC0zMSAyNTEzIC0zMSBjdCAyNTE2IC0zMSAyNTE5IC0zMiAyNTIxIC0zMyBjdCAKKzI1MjUgLTM1IDI1MzIgLTQyIDI1NDMgLTUzIGN0IDI1NDMgLTUzIDI1NDMgLTUzIDI1NDMgLTM4IGN0IDI1MjMgLTEwIDI1MDMgNCAyNDg1IDQgY3QgCisyNDc2IDQgMjQ2OCAxIDI0NjMgLTUgY3QgMjQ1OCAtMTEgMjQ1NSAtMjIgMjQ1NSAtMzcgY3QgcAorMjQ1NSAtNTQgbSAgMjQ1NSAtNTQgMjQ1NSAtNTQgMjQ1NSAtMTQ5IGN0IDI0MjcgLTEzOCAyNDA5IC0xMzAgMjQwMSAtMTI2IGN0IAorMjM4NiAtMTE4IDIzNzYgLTExMCAyMzY5IC0xMDEgY3QgMjM2MyAtOTIgMjM2MCAtODMgMjM2MCAtNzIgY3QgMjM2MCAtNTkgMjM2NCAtNDkgMjM3MiAtNDAgY3QgCisyMzgwIC0zMSAyMzg5IC0yNyAyMzk5IC0yNyBjdCAyNDE0IC0yNyAyNDMyIC0zNiAyNDU1IC01NCBjdCBwIGVmCisyNjQ5IC0zOTIgbSAgMjY0OSAtMzkyIDI2NDkgLTM5MiAyNjQ5IC01NyBjdCAyNjQ5IC00MSAyNjUwIC0zMSAyNjUyIC0yNiBjdCAyNjU1IC0yMSAyNjU4IC0xNyAyNjYzIC0xNCBjdCAKKzI2NjggLTExIDI2NzcgLTEwIDI2OTAgLTEwIGN0IDI2OTAgLTEwIDI2OTAgLTEwIDI2OTAgMCBjdCAyNjkwIDAgMjY5MCAwIDI1NjYgMCBjdCAKKzI1NjYgMCAyNTY2IDAgMjU2NiAtMTAgY3QgMjU3OCAtMTAgMjU4NSAtMTEgMjU5MCAtMTQgY3QgMjU5NCAtMTYgMjU5NyAtMjAgMjU5OSAtMjUgY3QgCisyNjAyIC0zMSAyNjAzIC00MSAyNjAzIC01NyBjdCAyNjAzIC01NyAyNjAzIC01NyAyNjAzIC0yODYgY3QgMjYwMyAtMzE0IDI2MDIgLTMzMiAyNjAxIC0zMzggY3QgCisyNjAwIC0zNDUgMjU5OCAtMzQ5IDI1OTUgLTM1MiBjdCAyNTkyIC0zNTQgMjU4OSAtMzU1IDI1ODQgLTM1NSBjdCAyNTgwIC0zNTUgMjU3NCAtMzU0IDI1NjcgLTM1MSBjdCAKKzI1NjcgLTM1MSAyNTY3IC0zNTEgMjU2MiAtMzYxIGN0IDI1NjIgLTM2MSAyNTYyIC0zNjEgMjYzNyAtMzkyIGN0IDI2MzcgLTM5MiAyNjM3IC0zOTIgMjY0OSAtMzkyIGN0IAorcCBlZgorMjc4MyAtMzkyIG0gIDI3OTEgLTM5MiAyNzk3IC0zODkgMjgwMyAtMzg0IGN0IDI4MDggLTM3OCAyODExIC0zNzIgMjgxMSAtMzY0IGN0IAorMjgxMSAtMzU2IDI4MDggLTM1MCAyODAzIC0zNDQgY3QgMjc5NyAtMzM5IDI3OTEgLTMzNiAyNzgzIC0zMzYgY3QgMjc3NSAtMzM2IDI3NjkgLTMzOSAyNzYzIC0zNDQgY3QgCisyNzU4IC0zNTAgMjc1NSAtMzU2IDI3NTUgLTM2NCBjdCAyNzU1IC0zNzIgMjc1OCAtMzc4IDI3NjMgLTM4NCBjdCAyNzY5IC0zODkgMjc3NSAtMzkyIDI3ODMgLTM5MiBjdCAKK3AKKzI4MDYgLTI2MCBtICAyODA2IC0yNjAgMjgwNiAtMjYwIDI4MDYgLTU3IGN0IDI4MDYgLTQxIDI4MDcgLTMxIDI4MDkgLTI2IGN0IDI4MTIgLTIwIDI4MTUgLTE2IDI4MTkgLTE0IGN0IAorMjgyNCAtMTEgMjgzMSAtMTAgMjg0MyAtMTAgY3QgMjg0MyAtMTAgMjg0MyAtMTAgMjg0MyAwIGN0IDI4NDMgMCAyODQzIDAgMjcyMyAwIGN0IAorMjcyMyAwIDI3MjMgMCAyNzIzIC0xMCBjdCAyNzM1IC0xMCAyNzQzIC0xMSAyNzQ3IC0xNCBjdCAyNzUxIC0xNiAyNzU0IC0yMCAyNzU2IC0yNSBjdCAKKzI3NTkgLTMxIDI3NjAgLTQxIDI3NjAgLTU3IGN0IDI3NjAgLTU3IDI3NjAgLTU3IDI3NjAgLTE1NCBjdCAyNzYwIC0xODEgMjc1OSAtMTk5IDI3NTggLTIwNyBjdCAKKzI3NTYgLTIxMyAyNzU0IC0yMTcgMjc1MiAtMjIwIGN0IDI3NDkgLTIyMiAyNzQ1IC0yMjMgMjc0MCAtMjIzIGN0IDI3MzUgLTIyMyAyNzI5IC0yMjIgMjcyMiAtMjE5IGN0IAorMjcyMiAtMjE5IDI3MjIgLTIxOSAyNzE4IC0yMjkgY3QgMjcxOCAtMjI5IDI3MTggLTIyOSAyNzk0IC0yNjAgY3QgMjc5NCAtMjYwIDI3OTQgLTI2MCAyODA2IC0yNjAgY3QgCitwIGVmCiszMDk1IC03NyBtICAzMDk1IC03NyAzMDk1IC03NyAzMDkyIDAgY3QgMzA5MiAwIDMwOTIgMCAyODY5IDAgY3QgMjg2OSAwIDI4NjkgMCAyODY5IC0xMCBjdCAKKzI4NjkgLTEwIDI4NjkgLTEwIDMwMzggLTIzNCBjdCAzMDM4IC0yMzQgMzAzOCAtMjM0IDI5NTMgLTIzNCBjdCAyOTM1IC0yMzQgMjkyNCAtMjMzIDI5MTggLTIzMSBjdCAKKzI5MTMgLTIyOCAyOTA4IC0yMjQgMjkwNSAtMjE3IGN0IDI5MDAgLTIwOCAyODk3IC0xOTcgMjg5NiAtMTgzIGN0IDI4OTYgLTE4MyAyODk2IC0xODMgMjg4NiAtMTgzIGN0IAorMjg4NiAtMTgzIDI4ODYgLTE4MyAyODg3IC0yNTMgY3QgMjg4NyAtMjUzIDI4ODcgLTI1MyAzMDk5IC0yNTMgY3QgMzA5OSAtMjUzIDMwOTkgLTI1MyAzMDk5IC0yNDMgY3QgCiszMDk5IC0yNDMgMzA5OSAtMjQzIDI5MzAgLTE4IGN0IDI5MzAgLTE4IDI5MzAgLTE4IDMwMjIgLTE4IGN0IDMwNDEgLTE4IDMwNTQgLTIwIDMwNjEgLTIzIGN0IAorMzA2OCAtMjYgMzA3MyAtMzIgMzA3OCAtNDAgY3QgMzA4MSAtNDYgMzA4MyAtNTggMzA4NSAtNzcgY3QgMzA4NSAtNzcgMzA4NSAtNzcgMzA5NSAtNzcgY3QgCitwIGVmCiszMjY4IC0zNyBtICAzMjQyIC0xNyAzMjI2IC01IDMyMTkgLTIgY3QgMzIwOSAzIDMxOTkgNSAzMTg3IDUgY3QgMzE3MCA1IDMxNTUgLTEgMzE0NCAtMTMgY3QgCiszMTMzIC0yNSAzMTI3IC00MCAzMTI3IC02MCBjdCAzMTI3IC03MiAzMTMwIC04MyAzMTM1IC05MiBjdCAzMTQzIC0xMDQgMzE1NiAtMTE2IDMxNzUgLTEyNyBjdCAKKzMxOTMgLTEzOCAzMjI1IC0xNTEgMzI2OCAtMTY3IGN0IDMyNjggLTE2NyAzMjY4IC0xNjcgMzI2OCAtMTc3IGN0IDMyNjggLTIwMiAzMjY0IC0yMTkgMzI1NiAtMjI4IGN0IAorMzI0OCAtMjM3IDMyMzcgLTI0MiAzMjIxIC0yNDIgY3QgMzIxMCAtMjQyIDMyMDEgLTIzOSAzMTk0IC0yMzMgY3QgMzE4NyAtMjI2IDMxODMgLTIxOSAzMTgzIC0yMTEgY3QgCiszMTgzIC0yMTEgMzE4MyAtMjExIDMxODQgLTE5NSBjdCAzMTg0IC0xODcgMzE4MiAtMTgwIDMxNzcgLTE3NiBjdCAzMTczIC0xNzEgMzE2NyAtMTY5IDMxNjAgLTE2OSBjdCAKKzMxNTQgLTE2OSAzMTQ4IC0xNzEgMzE0NCAtMTc2IGN0IDMxMzkgLTE4MSAzMTM3IC0xODggMzEzNyAtMTk2IGN0IDMxMzcgLTIxMiAzMTQ1IC0yMjcgMzE2MSAtMjQwIGN0IAorMzE3NyAtMjUzIDMyMDAgLTI2MCAzMjI5IC0yNjAgY3QgMzI1MSAtMjYwIDMyNzAgLTI1NiAzMjg0IC0yNDkgY3QgMzI5NSAtMjQzIDMzMDMgLTIzNCAzMzA4IC0yMjIgY3QgCiszMzExIC0yMTQgMzMxMyAtMTk4IDMzMTMgLTE3NCBjdCAzMzEzIC0xNzQgMzMxMyAtMTc0IDMzMTMgLTg5IGN0IDMzMTMgLTY1IDMzMTMgLTUwIDMzMTQgLTQ1IGN0IAorMzMxNSAtMzkgMzMxNyAtMzYgMzMxOSAtMzQgY3QgMzMyMSAtMzIgMzMyMyAtMzEgMzMyNiAtMzEgY3QgMzMyOSAtMzEgMzMzMiAtMzIgMzMzNCAtMzMgY3QgCiszMzM4IC0zNSAzMzQ1IC00MiAzMzU2IC01MyBjdCAzMzU2IC01MyAzMzU2IC01MyAzMzU2IC0zOCBjdCAzMzM2IC0xMCAzMzE2IDQgMzI5OCA0IGN0IAorMzI4OSA0IDMyODEgMSAzMjc2IC01IGN0IDMyNzEgLTExIDMyNjggLTIyIDMyNjggLTM3IGN0IHAKKzMyNjggLTU0IG0gIDMyNjggLTU0IDMyNjggLTU0IDMyNjggLTE0OSBjdCAzMjQwIC0xMzggMzIyMiAtMTMwIDMyMTQgLTEyNiBjdCAKKzMxOTkgLTExOCAzMTg5IC0xMTAgMzE4MiAtMTAxIGN0IDMxNzYgLTkyIDMxNzMgLTgzIDMxNzMgLTcyIGN0IDMxNzMgLTU5IDMxNzcgLTQ5IDMxODUgLTQwIGN0IAorMzE5MyAtMzEgMzIwMiAtMjcgMzIxMiAtMjcgY3QgMzIyNyAtMjcgMzI0NSAtMzYgMzI2OCAtNTQgY3QgcCBlZgorMzQ0OCAtMzM3IG0gIDM0NDggLTMzNyAzNDQ4IC0zMzcgMzQ0OCAtMjUzIGN0IDM0NDggLTI1MyAzNDQ4IC0yNTMgMzUwNyAtMjUzIGN0IAorMzUwNyAtMjUzIDM1MDcgLTI1MyAzNTA3IC0yMzQgY3QgMzUwNyAtMjM0IDM1MDcgLTIzNCAzNDQ4IC0yMzQgY3QgMzQ0OCAtMjM0IDM0NDggLTIzNCAzNDQ4IC03MCBjdCAKKzM0NDggLTUzIDM0NTAgLTQyIDM0NTUgLTM3IGN0IDM0NjAgLTMxIDM0NjYgLTI4IDM0NzMgLTI4IGN0IDM0NzkgLTI4IDM0ODUgLTMwIDM0OTEgLTM0IGN0IAorMzQ5NiAtMzcgMzUwMSAtNDMgMzUwNCAtNTAgY3QgMzUwNCAtNTAgMzUwNCAtNTAgMzUxNSAtNTAgY3QgMzUwOSAtMzIgMzQ5OSAtMTkgMzQ4OCAtMTAgY3QgCiszNDc2IC0xIDM0NjMgNCAzNDUxIDQgY3QgMzQ0MiA0IDM0MzQgMiAzNDI2IC0zIGN0IDM0MTggLTggMzQxMiAtMTQgMzQwOCAtMjMgY3QgCiszNDA0IC0zMiAzNDAyIC00NSAzNDAyIC02NCBjdCAzNDAyIC02NCAzNDAyIC02NCAzNDAyIC0yMzQgY3QgMzQwMiAtMjM0IDM0MDIgLTIzNCAzMzYyIC0yMzQgY3QgCiszMzYyIC0yMzQgMzM2MiAtMjM0IDMzNjIgLTI0MyBjdCAzMzcyIC0yNDcgMzM4MiAtMjU0IDMzOTMgLTI2NCBjdCAzNDA0IC0yNzMgMzQxMyAtMjg1IDM0MjEgLTI5OCBjdCAKKzM0MjYgLTMwNSAzNDMxIC0zMTggMzQzOSAtMzM3IGN0IDM0MzkgLTMzNyAzNDM5IC0zMzcgMzQ0OCAtMzM3IGN0IHAgZWYKKzM1OTYgLTM5MiBtICAzNjA0IC0zOTIgMzYxMCAtMzg5IDM2MTYgLTM4NCBjdCAzNjIxIC0zNzggMzYyNCAtMzcyIDM2MjQgLTM2NCBjdCAKKzM2MjQgLTM1NiAzNjIxIC0zNTAgMzYxNiAtMzQ0IGN0IDM2MTAgLTMzOSAzNjA0IC0zMzYgMzU5NiAtMzM2IGN0IDM1ODggLTMzNiAzNTgyIC0zMzkgMzU3NiAtMzQ0IGN0IAorMzU3MSAtMzUwIDM1NjggLTM1NiAzNTY4IC0zNjQgY3QgMzU2OCAtMzcyIDM1NzEgLTM3OCAzNTc2IC0zODQgY3QgMzU4MiAtMzg5IDM1ODggLTM5MiAzNTk2IC0zOTIgY3QgCitwCiszNjE5IC0yNjAgbSAgMzYxOSAtMjYwIDM2MTkgLTI2MCAzNjE5IC01NyBjdCAzNjE5IC00MSAzNjIwIC0zMSAzNjIyIC0yNiBjdCAzNjI1IC0yMCAzNjI4IC0xNiAzNjMyIC0xNCBjdCAKKzM2MzcgLTExIDM2NDQgLTEwIDM2NTYgLTEwIGN0IDM2NTYgLTEwIDM2NTYgLTEwIDM2NTYgMCBjdCAzNjU2IDAgMzY1NiAwIDM1MzYgMCBjdCAKKzM1MzYgMCAzNTM2IDAgMzUzNiAtMTAgY3QgMzU0OCAtMTAgMzU1NiAtMTEgMzU2MCAtMTQgY3QgMzU2NCAtMTYgMzU2NyAtMjAgMzU2OSAtMjUgY3QgCiszNTcyIC0zMSAzNTczIC00MSAzNTczIC01NyBjdCAzNTczIC01NyAzNTczIC01NyAzNTczIC0xNTQgY3QgMzU3MyAtMTgxIDM1NzIgLTE5OSAzNTcxIC0yMDcgY3QgCiszNTY5IC0yMTMgMzU2NyAtMjE3IDM1NjUgLTIyMCBjdCAzNTYyIC0yMjIgMzU1OCAtMjIzIDM1NTMgLTIyMyBjdCAzNTQ4IC0yMjMgMzU0MiAtMjIyIDM1MzUgLTIxOSBjdCAKKzM1MzUgLTIxOSAzNTM1IC0yMTkgMzUzMSAtMjI5IGN0IDM1MzEgLTIyOSAzNTMxIC0yMjkgMzYwNyAtMjYwIGN0IDM2MDcgLTI2MCAzNjA3IC0yNjAgMzYxOSAtMjYwIGN0IAorcCBlZgorMzgxMiAtMjYwIG0gIDM4NTAgLTI2MCAzODgxIC0yNDYgMzkwNCAtMjE3IGN0IDM5MjMgLTE5MiAzOTMzIC0xNjMgMzkzMyAtMTMxIGN0IAorMzkzMyAtMTA5IDM5MjggLTg2IDM5MTcgLTYzIGN0IDM5MDYgLTQwIDM4OTEgLTIyIDM4NzIgLTExIGN0IDM4NTMgMSAzODMyIDcgMzgwOSA3IGN0IAorMzc3MSA3IDM3NDEgLTggMzcxOCAtMzggY3QgMzY5OSAtNjQgMzY5MCAtOTIgMzY5MCAtMTI0IGN0IDM2OTAgLTE0NyAzNjk2IC0xNzAgMzcwNyAtMTkzIGN0IAorMzcxOSAtMjE2IDM3MzQgLTIzMyAzNzUyIC0yNDQgY3QgMzc3MSAtMjU1IDM3OTEgLTI2MCAzODEyIC0yNjAgY3QgcAorMzgwMyAtMjQyIG0gIDM3OTQgLTI0MiAzNzg0IC0yMzkgMzc3NCAtMjMzIGN0IDM3NjQgLTIyOCAzNzU2IC0yMTggMzc1MCAtMjAzIGN0IAorMzc0NCAtMTg5IDM3NDEgLTE3MCAzNzQxIC0xNDcgY3QgMzc0MSAtMTExIDM3NDggLTc5IDM3NjMgLTUzIGN0IDM3NzggLTI2IDM3OTcgLTEzIDM4MjEgLTEzIGN0IAorMzgzOCAtMTMgMzg1MyAtMjAgMzg2NSAtMzUgY3QgMzg3NiAtNTAgMzg4MiAtNzUgMzg4MiAtMTEwIGN0IDM4ODIgLTE1NSAzODcyIC0xOTAgMzg1MyAtMjE2IGN0IAorMzg0MCAtMjMzIDM4MjMgLTI0MiAzODAzIC0yNDIgY3QgcCBlZgorNDA0NiAtMjA3IG0gIDQwNzUgLTI0MiA0MTAzIC0yNjAgNDEzMCAtMjYwIGN0IDQxNDQgLTI2MCA0MTU2IC0yNTcgNDE2NSAtMjUwIGN0IAorNDE3NSAtMjQzIDQxODMgLTIzMSA0MTg5IC0yMTYgY3QgNDE5MyAtMjA1IDQxOTUgLTE4OCA0MTk1IC0xNjUgY3QgNDE5NSAtMTY1IDQxOTUgLTE2NSA0MTk1IC01NyBjdCAKKzQxOTUgLTQxIDQxOTYgLTMwIDQxOTkgLTI1IGN0IDQyMDEgLTIwIDQyMDQgLTE2IDQyMDggLTE0IGN0IDQyMTIgLTExIDQyMjAgLTEwIDQyMzIgLTEwIGN0IAorNDIzMiAtMTAgNDIzMiAtMTAgNDIzMiAwIGN0IDQyMzIgMCA0MjMyIDAgNDEwOCAwIGN0IDQxMDggMCA0MTA4IDAgNDEwOCAtMTAgY3QgNDEwOCAtMTAgNDEwOCAtMTAgNDExMyAtMTAgY3QgCis0MTI1IC0xMCA0MTMzIC0xMiA0MTM4IC0xNSBjdCA0MTQzIC0xOSA0MTQ2IC0yNCA0MTQ4IC0zMSBjdCA0MTQ5IC0zNCA0MTQ5IC00MyA0MTQ5IC01NyBjdCAKKzQxNDkgLTU3IDQxNDkgLTU3IDQxNDkgLTE2MSBjdCA0MTQ5IC0xODQgNDE0NiAtMjAxIDQxNDAgLTIxMSBjdCA0MTM0IC0yMjIgNDEyNCAtMjI3IDQxMTAgLTIyNyBjdCAKKzQwODkgLTIyNyA0MDY3IC0yMTUgNDA0NiAtMTkxIGN0IDQwNDYgLTE5MSA0MDQ2IC0xOTEgNDA0NiAtNTcgY3QgNDA0NiAtNDAgNDA0NyAtMjkgNDA0OSAtMjUgY3QgCis0MDUyIC0yMCA0MDU1IC0xNiA0MDYwIC0xNCBjdCA0MDY0IC0xMSA0MDczIC0xMCA0MDg3IC0xMCBjdCA0MDg3IC0xMCA0MDg3IC0xMCA0MDg3IDAgY3QgCis0MDg3IDAgNDA4NyAwIDM5NjMgMCBjdCAzOTYzIDAgMzk2MyAwIDM5NjMgLTEwIGN0IDM5NjMgLTEwIDM5NjMgLTEwIDM5NjggLTEwIGN0IAorMzk4MSAtMTAgMzk4OSAtMTMgMzk5MyAtMjAgY3QgMzk5OCAtMjYgNDAwMCAtMzkgNDAwMCAtNTcgY3QgNDAwMCAtNTcgNDAwMCAtNTcgNDAwMCAtMTUxIGN0IAorNDAwMCAtMTgxIDM5OTkgLTIwMCAzOTk4IC0yMDYgY3QgMzk5NyAtMjEzIDM5OTUgLTIxNyAzOTkyIC0yMjAgY3QgMzk4OSAtMjIyIDM5ODUgLTIyMyAzOTgwIC0yMjMgY3QgCiszOTc1IC0yMjMgMzk2OSAtMjIyIDM5NjIgLTIxOSBjdCAzOTYyIC0yMTkgMzk2MiAtMjE5IDM5NTggLTIyOSBjdCAzOTU4IC0yMjkgMzk1OCAtMjI5IDQwMzQgLTI2MCBjdCAKKzQwMzQgLTI2MCA0MDM0IC0yNjAgNDA0NiAtMjYwIGN0IDQwNDYgLTI2MCA0MDQ2IC0yNjAgNDA0NiAtMjA3IGN0IHAgZWYKK3BvbQorZ3IKK2dyCisxNDk4NSAxNzI1NSBtICAxMzgzNSAxNzI1NSBsICAxMzgzNSAxNTk1NSBsICAxNjEzNSAxNTk1NSBsICAxNjEzNSAxNzI1NSBsIAorMTQ5ODUgMTcyNTUgbCAgcGMKK2dzCitncworcHVtCisxMzk3MSAxNjc5NSB0CisyNDkgNCBtICAyNjggMzYgMjg4IDYwIDMxMCA3NSBjdCAzMzIgOTAgMzU2IDk5IDM4NCAxMDEgY3QgMzg0IDEwMSAzODQgMTAxIDM4NCAxMTAgY3QgCiszNTkgMTA5IDMzMiAxMDQgMzAzIDk1IGN0IDI3NCA4NSAyNDcgNzMgMjIxIDU2IGN0IDE5NSA0MCAxNzMgMjIgMTU0IDQgY3QgMTI4IC03IDEwNyAtMTggOTEgLTMwIGN0IAorNjkgLTQ4IDUyIC03MCA0MCAtOTYgY3QgMjcgLTEyMiAyMSAtMTUyIDIxIC0xODggY3QgMjEgLTI0MyAzOSAtMjkwIDc1IC0zMjcgY3QgMTExIC0zNjQgMTU1IC0zODIgMjA2IC0zODIgY3QgCisyNTUgLTM4MiAyOTcgLTM2NCAzMzMgLTMyNyBjdCAzNjggLTI5MCAzODYgLTI0MyAzODYgLTE4NyBjdCAzODYgLTE0MSAzNzMgLTEwMSAzNDggLTY2IGN0IAorMzIzIC0zMiAyOTAgLTggMjQ5IDQgY3QgcAorMjAzIC0zNjEgbSAgMTcwIC0zNjEgMTQzIC0zNDkgMTIyIC0zMjUgY3QgOTcgLTI5NSA4NCAtMjQ5IDg0IC0xODggY3QgODQgLTEyNyA5NyAtODEgMTIzIC00OCBjdCAKKzE0MyAtMjMgMTcwIC0xMCAyMDMgLTEwIGN0IDIzNyAtMTAgMjY1IC0yMyAyODYgLTQ4IGN0IDMxMSAtNzggMzIzIC0xMjEgMzIzIC0xODAgY3QgCiszMjMgLTIyNCAzMTYgLTI2MiAzMDMgLTI5MiBjdCAyOTIgLTMxNiAyNzggLTMzMyAyNjEgLTM0NCBjdCAyNDQgLTM1NSAyMjQgLTM2MSAyMDMgLTM2MSBjdCAKK3AgZWYKKzY0NSAtMjUzIG0gIDY0NSAtMjUzIDY0NSAtMjUzIDY0NSAtOTkgY3QgNjQ1IC03MCA2NDYgLTUzIDY0NyAtNDcgY3QgNjQ4IC00MCA2NTEgLTM2IDY1NCAtMzMgY3QgCis2NTcgLTMxIDY2MCAtMjkgNjY0IC0yOSBjdCA2NzAgLTI5IDY3NiAtMzEgNjgzIC0zNCBjdCA2ODMgLTM0IDY4MyAtMzQgNjg3IC0yNCBjdCAKKzY4NyAtMjQgNjg3IC0yNCA2MTIgNyBjdCA2MTIgNyA2MTIgNyA2MDAgNyBjdCA2MDAgNyA2MDAgNyA2MDAgLTQ2IGN0IDU3OCAtMjMgNTYyIC04IDU1MCAtMiBjdCAKKzUzOSA0IDUyNyA3IDUxNCA3IGN0IDUwMCA3IDQ4NyAzIDQ3NyAtNSBjdCA0NjYgLTE0IDQ1OSAtMjQgNDU1IC0zNyBjdCA0NTEgLTUwIDQ0OSAtNjggNDQ5IC05MiBjdCAKKzQ0OSAtOTIgNDQ5IC05MiA0NDkgLTIwNSBjdCA0NDkgLTIxNyA0NDggLTIyNSA0NDUgLTIyOSBjdCA0NDMgLTIzNCA0MzkgLTIzNyA0MzQgLTI0MCBjdCAKKzQyOSAtMjQyIDQxOSAtMjQzIDQwNiAtMjQzIGN0IDQwNiAtMjQzIDQwNiAtMjQzIDQwNiAtMjUzIGN0IDQwNiAtMjUzIDQwNiAtMjUzIDQ5NSAtMjUzIGN0IAorNDk1IC0yNTMgNDk1IC0yNTMgNDk1IC04NCBjdCA0OTUgLTYwIDQ5OSAtNDQgNTA3IC0zNyBjdCA1MTYgLTMwIDUyNSAtMjYgNTM3IC0yNiBjdCAKKzU0NSAtMjYgNTU0IC0yOCA1NjQgLTMzIGN0IDU3NCAtMzggNTg2IC00OCA2MDAgLTYyIGN0IDYwMCAtNjIgNjAwIC02MiA2MDAgLTIwNSBjdCAKKzYwMCAtMjIwIDU5NyAtMjMwIDU5MiAtMjM1IGN0IDU4NyAtMjQwIDU3NiAtMjQzIDU1OSAtMjQzIGN0IDU1OSAtMjQzIDU1OSAtMjQzIDU1OSAtMjUzIGN0IAorNTU5IC0yNTMgNTU5IC0yNTMgNjQ1IC0yNTMgY3QgcCBlZgorODUxIC0zNyBtICA4MjUgLTE3IDgwOSAtNSA4MDIgLTIgY3QgNzkyIDMgNzgyIDUgNzcwIDUgY3QgNzUzIDUgNzM4IC0xIDcyNyAtMTMgY3QgCis3MTYgLTI1IDcxMCAtNDAgNzEwIC02MCBjdCA3MTAgLTcyIDcxMyAtODMgNzE4IC05MiBjdCA3MjYgLTEwNCA3MzkgLTExNiA3NTggLTEyNyBjdCAKKzc3NiAtMTM4IDgwOCAtMTUxIDg1MSAtMTY3IGN0IDg1MSAtMTY3IDg1MSAtMTY3IDg1MSAtMTc3IGN0IDg1MSAtMjAyIDg0NyAtMjE5IDgzOSAtMjI4IGN0IAorODMxIC0yMzcgODIwIC0yNDIgODA0IC0yNDIgY3QgNzkzIC0yNDIgNzg0IC0yMzkgNzc3IC0yMzMgY3QgNzcwIC0yMjYgNzY2IC0yMTkgNzY2IC0yMTEgY3QgCis3NjYgLTIxMSA3NjYgLTIxMSA3NjcgLTE5NSBjdCA3NjcgLTE4NyA3NjUgLTE4MCA3NjAgLTE3NiBjdCA3NTYgLTE3MSA3NTAgLTE2OSA3NDMgLTE2OSBjdCAKKzczNyAtMTY5IDczMSAtMTcxIDcyNyAtMTc2IGN0IDcyMiAtMTgxIDcyMCAtMTg4IDcyMCAtMTk2IGN0IDcyMCAtMjEyIDcyOCAtMjI3IDc0NCAtMjQwIGN0IAorNzYwIC0yNTMgNzgzIC0yNjAgODEyIC0yNjAgY3QgODM0IC0yNjAgODUzIC0yNTYgODY3IC0yNDkgY3QgODc4IC0yNDMgODg2IC0yMzQgODkxIC0yMjIgY3QgCis4OTQgLTIxNCA4OTYgLTE5OCA4OTYgLTE3NCBjdCA4OTYgLTE3NCA4OTYgLTE3NCA4OTYgLTg5IGN0IDg5NiAtNjUgODk2IC01MCA4OTcgLTQ1IGN0IAorODk4IC0zOSA5MDAgLTM2IDkwMiAtMzQgY3QgOTA0IC0zMiA5MDYgLTMxIDkwOSAtMzEgY3QgOTEyIC0zMSA5MTUgLTMyIDkxNyAtMzMgY3QgCis5MjEgLTM1IDkyOCAtNDIgOTM5IC01MyBjdCA5MzkgLTUzIDkzOSAtNTMgOTM5IC0zOCBjdCA5MTkgLTEwIDg5OSA0IDg4MSA0IGN0IDg3MiA0IDg2NCAxIDg1OSAtNSBjdCAKKzg1NCAtMTEgODUxIC0yMiA4NTEgLTM3IGN0IHAKKzg1MSAtNTQgbSAgODUxIC01NCA4NTEgLTU0IDg1MSAtMTQ5IGN0IDgyMyAtMTM4IDgwNSAtMTMwIDc5NyAtMTI2IGN0IDc4MiAtMTE4IDc3MiAtMTEwIDc2NSAtMTAxIGN0IAorNzU5IC05MiA3NTYgLTgzIDc1NiAtNzIgY3QgNzU2IC01OSA3NjAgLTQ5IDc2OCAtNDAgY3QgNzc2IC0zMSA3ODUgLTI3IDc5NSAtMjcgY3QgCis4MTAgLTI3IDgyOCAtMzYgODUxIC01NCBjdCBwIGVmCisxMDMyIC0yMDcgbSAgMTA2MSAtMjQyIDEwODkgLTI2MCAxMTE2IC0yNjAgY3QgMTEzMCAtMjYwIDExNDIgLTI1NyAxMTUxIC0yNTAgY3QgCisxMTYxIC0yNDMgMTE2OSAtMjMxIDExNzUgLTIxNiBjdCAxMTc5IC0yMDUgMTE4MSAtMTg4IDExODEgLTE2NSBjdCAxMTgxIC0xNjUgMTE4MSAtMTY1IDExODEgLTU3IGN0IAorMTE4MSAtNDEgMTE4MiAtMzAgMTE4NSAtMjUgY3QgMTE4NyAtMjAgMTE5MCAtMTYgMTE5NCAtMTQgY3QgMTE5OCAtMTEgMTIwNiAtMTAgMTIxOCAtMTAgY3QgCisxMjE4IC0xMCAxMjE4IC0xMCAxMjE4IDAgY3QgMTIxOCAwIDEyMTggMCAxMDk0IDAgY3QgMTA5NCAwIDEwOTQgMCAxMDk0IC0xMCBjdCAxMDk0IC0xMCAxMDk0IC0xMCAxMDk5IC0xMCBjdCAKKzExMTEgLTEwIDExMTkgLTEyIDExMjQgLTE1IGN0IDExMjkgLTE5IDExMzIgLTI0IDExMzQgLTMxIGN0IDExMzUgLTM0IDExMzUgLTQzIDExMzUgLTU3IGN0IAorMTEzNSAtNTcgMTEzNSAtNTcgMTEzNSAtMTYxIGN0IDExMzUgLTE4NCAxMTMyIC0yMDEgMTEyNiAtMjExIGN0IDExMjAgLTIyMiAxMTEwIC0yMjcgMTA5NiAtMjI3IGN0IAorMTA3NSAtMjI3IDEwNTMgLTIxNSAxMDMyIC0xOTEgY3QgMTAzMiAtMTkxIDEwMzIgLTE5MSAxMDMyIC01NyBjdCAxMDMyIC00MCAxMDMzIC0yOSAxMDM1IC0yNSBjdCAKKzEwMzggLTIwIDEwNDEgLTE2IDEwNDYgLTE0IGN0IDEwNTAgLTExIDEwNTkgLTEwIDEwNzMgLTEwIGN0IDEwNzMgLTEwIDEwNzMgLTEwIDEwNzMgMCBjdCAKKzEwNzMgMCAxMDczIDAgOTQ5IDAgY3QgOTQ5IDAgOTQ5IDAgOTQ5IC0xMCBjdCA5NDkgLTEwIDk0OSAtMTAgOTU0IC0xMCBjdCA5NjcgLTEwIDk3NSAtMTMgOTc5IC0yMCBjdCAKKzk4NCAtMjYgOTg2IC0zOSA5ODYgLTU3IGN0IDk4NiAtNTcgOTg2IC01NyA5ODYgLTE1MSBjdCA5ODYgLTE4MSA5ODUgLTIwMCA5ODQgLTIwNiBjdCAKKzk4MyAtMjEzIDk4MSAtMjE3IDk3OCAtMjIwIGN0IDk3NSAtMjIyIDk3MSAtMjIzIDk2NiAtMjIzIGN0IDk2MSAtMjIzIDk1NSAtMjIyIDk0OCAtMjE5IGN0IAorOTQ4IC0yMTkgOTQ4IC0yMTkgOTQ0IC0yMjkgY3QgOTQ0IC0yMjkgOTQ0IC0yMjkgMTAyMCAtMjYwIGN0IDEwMjAgLTI2MCAxMDIwIC0yNjAgMTAzMiAtMjYwIGN0IAorMTAzMiAtMjYwIDEwMzIgLTI2MCAxMDMyIC0yMDcgY3QgcCBlZgorMTMxNCAtMzM3IG0gIDEzMTQgLTMzNyAxMzE0IC0zMzcgMTMxNCAtMjUzIGN0IDEzMTQgLTI1MyAxMzE0IC0yNTMgMTM3MyAtMjUzIGN0IAorMTM3MyAtMjUzIDEzNzMgLTI1MyAxMzczIC0yMzQgY3QgMTM3MyAtMjM0IDEzNzMgLTIzNCAxMzE0IC0yMzQgY3QgMTMxNCAtMjM0IDEzMTQgLTIzNCAxMzE0IC03MCBjdCAKKzEzMTQgLTUzIDEzMTYgLTQyIDEzMjEgLTM3IGN0IDEzMjYgLTMxIDEzMzIgLTI4IDEzMzkgLTI4IGN0IDEzNDUgLTI4IDEzNTEgLTMwIDEzNTcgLTM0IGN0IAorMTM2MiAtMzcgMTM2NyAtNDMgMTM3MCAtNTAgY3QgMTM3MCAtNTAgMTM3MCAtNTAgMTM4MSAtNTAgY3QgMTM3NSAtMzIgMTM2NSAtMTkgMTM1NCAtMTAgY3QgCisxMzQyIC0xIDEzMjkgNCAxMzE3IDQgY3QgMTMwOCA0IDEzMDAgMiAxMjkyIC0zIGN0IDEyODQgLTggMTI3OCAtMTQgMTI3NCAtMjMgY3QgCisxMjcwIC0zMiAxMjY4IC00NSAxMjY4IC02NCBjdCAxMjY4IC02NCAxMjY4IC02NCAxMjY4IC0yMzQgY3QgMTI2OCAtMjM0IDEyNjggLTIzNCAxMjI4IC0yMzQgY3QgCisxMjI4IC0yMzQgMTIyOCAtMjM0IDEyMjggLTI0MyBjdCAxMjM4IC0yNDcgMTI0OCAtMjU0IDEyNTkgLTI2NCBjdCAxMjcwIC0yNzMgMTI3OSAtMjg1IDEyODcgLTI5OCBjdCAKKzEyOTIgLTMwNSAxMjk3IC0zMTggMTMwNSAtMzM3IGN0IDEzMDUgLTMzNyAxMzA1IC0zMzcgMTMxNCAtMzM3IGN0IHAgZWYKKzE0NjIgLTM5MiBtICAxNDcwIC0zOTIgMTQ3NiAtMzg5IDE0ODIgLTM4NCBjdCAxNDg3IC0zNzggMTQ5MCAtMzcyIDE0OTAgLTM2NCBjdCAKKzE0OTAgLTM1NiAxNDg3IC0zNTAgMTQ4MiAtMzQ0IGN0IDE0NzYgLTMzOSAxNDcwIC0zMzYgMTQ2MiAtMzM2IGN0IDE0NTQgLTMzNiAxNDQ4IC0zMzkgMTQ0MiAtMzQ0IGN0IAorMTQzNyAtMzUwIDE0MzQgLTM1NiAxNDM0IC0zNjQgY3QgMTQzNCAtMzcyIDE0MzcgLTM3OCAxNDQyIC0zODQgY3QgMTQ0OCAtMzg5IDE0NTQgLTM5MiAxNDYyIC0zOTIgY3QgCitwCisxNDg1IC0yNjAgbSAgMTQ4NSAtMjYwIDE0ODUgLTI2MCAxNDg1IC01NyBjdCAxNDg1IC00MSAxNDg2IC0zMSAxNDg4IC0yNiBjdCAxNDkxIC0yMCAxNDk0IC0xNiAxNDk4IC0xNCBjdCAKKzE1MDMgLTExIDE1MTAgLTEwIDE1MjIgLTEwIGN0IDE1MjIgLTEwIDE1MjIgLTEwIDE1MjIgMCBjdCAxNTIyIDAgMTUyMiAwIDE0MDIgMCBjdCAKKzE0MDIgMCAxNDAyIDAgMTQwMiAtMTAgY3QgMTQxNCAtMTAgMTQyMiAtMTEgMTQyNiAtMTQgY3QgMTQzMCAtMTYgMTQzMyAtMjAgMTQzNSAtMjUgY3QgCisxNDM4IC0zMSAxNDM5IC00MSAxNDM5IC01NyBjdCAxNDM5IC01NyAxNDM5IC01NyAxNDM5IC0xNTQgY3QgMTQzOSAtMTgxIDE0MzggLTE5OSAxNDM3IC0yMDcgY3QgCisxNDM1IC0yMTMgMTQzMyAtMjE3IDE0MzEgLTIyMCBjdCAxNDI4IC0yMjIgMTQyNCAtMjIzIDE0MTkgLTIyMyBjdCAxNDE0IC0yMjMgMTQwOCAtMjIyIDE0MDEgLTIxOSBjdCAKKzE0MDEgLTIxOSAxNDAxIC0yMTkgMTM5NyAtMjI5IGN0IDEzOTcgLTIyOSAxMzk3IC0yMjkgMTQ3MyAtMjYwIGN0IDE0NzMgLTI2MCAxNDczIC0yNjAgMTQ4NSAtMjYwIGN0IAorcCBlZgorMTc3NCAtNzcgbSAgMTc3NCAtNzcgMTc3NCAtNzcgMTc3MSAwIGN0IDE3NzEgMCAxNzcxIDAgMTU0OCAwIGN0IDE1NDggMCAxNTQ4IDAgMTU0OCAtMTAgY3QgCisxNTQ4IC0xMCAxNTQ4IC0xMCAxNzE3IC0yMzQgY3QgMTcxNyAtMjM0IDE3MTcgLTIzNCAxNjMyIC0yMzQgY3QgMTYxNCAtMjM0IDE2MDMgLTIzMyAxNTk3IC0yMzEgY3QgCisxNTkyIC0yMjggMTU4NyAtMjI0IDE1ODQgLTIxNyBjdCAxNTc5IC0yMDggMTU3NiAtMTk3IDE1NzUgLTE4MyBjdCAxNTc1IC0xODMgMTU3NSAtMTgzIDE1NjUgLTE4MyBjdCAKKzE1NjUgLTE4MyAxNTY1IC0xODMgMTU2NiAtMjUzIGN0IDE1NjYgLTI1MyAxNTY2IC0yNTMgMTc3OCAtMjUzIGN0IDE3NzggLTI1MyAxNzc4IC0yNTMgMTc3OCAtMjQzIGN0IAorMTc3OCAtMjQzIDE3NzggLTI0MyAxNjA5IC0xOCBjdCAxNjA5IC0xOCAxNjA5IC0xOCAxNzAxIC0xOCBjdCAxNzIwIC0xOCAxNzMzIC0yMCAxNzQwIC0yMyBjdCAKKzE3NDcgLTI2IDE3NTIgLTMyIDE3NTcgLTQwIGN0IDE3NjAgLTQ2IDE3NjIgLTU4IDE3NjQgLTc3IGN0IDE3NjQgLTc3IDE3NjQgLTc3IDE3NzQgLTc3IGN0IAorcCBlZgorMTg0NiAtMTU4IG0gIDE4NDYgLTEyMSAxODU1IC05MiAxODczIC03MSBjdCAxODkxIC01MCAxOTEyIC0zOSAxOTM3IC0zOSBjdCAxOTUzIC0zOSAxOTY4IC00MyAxOTgwIC01MiBjdCAKKzE5OTIgLTYxIDIwMDIgLTc3IDIwMTAgLTk5IGN0IDIwMTAgLTk5IDIwMTAgLTk5IDIwMTkgLTk0IGN0IDIwMTUgLTY4IDIwMDQgLTQ1IDE5ODUgLTI0IGN0IAorMTk2NyAtMyAxOTQ0IDcgMTkxNiA3IGN0IDE4ODYgNyAxODYwIC01IDE4MzggLTI4IGN0IDE4MTcgLTUyIDE4MDYgLTgzIDE4MDYgLTEyMyBjdCAKKzE4MDYgLTE2NiAxODE3IC0yMDAgMTgzOSAtMjI0IGN0IDE4NjEgLTI0OCAxODg5IC0yNjAgMTkyMiAtMjYwIGN0IDE5NTAgLTI2MCAxOTc0IC0yNTEgMTk5MiAtMjMyIGN0IAorMjAxMCAtMjE0IDIwMTkgLTE4OSAyMDE5IC0xNTggY3QgMjAxOSAtMTU4IDIwMTkgLTE1OCAxODQ2IC0xNTggY3QgcAorMTg0NiAtMTc0IG0gIDE4NDYgLTE3NCAxODQ2IC0xNzQgMTk2MiAtMTc0IGN0IDE5NjEgLTE5MCAxOTU5IC0yMDEgMTk1NiAtMjA4IGN0IAorMTk1MiAtMjE4IDE5NDUgLTIyNiAxOTM2IC0yMzEgY3QgMTkyNyAtMjM3IDE5MTcgLTI0MCAxOTA4IC0yNDAgY3QgMTg5MiAtMjQwIDE4NzkgLTIzNCAxODY3IC0yMjMgY3QgCisxODU1IC0yMTEgMTg0OCAtMTk1IDE4NDYgLTE3NCBjdCBwIGVmCitwb20KK2dyCitncgorZ3MKKzE2MTM2IDE1NjQxIG0gMTc0MDcgMTU2NDEgbCAxNzQwNyAxNjQzNiBsIDE2MTM2IDE2NDM2IGwgMTYxMzYgMTU2NDEgbCBlb2NsaXAgbmV3cGF0aAorZ3MKK3RtIHNldG1hdHJpeAorMTM3MDUgMTI1OTQgdCAKKzEgMSBzIAorZ3MKK2dzCiswIDAgbSAxMjcyIDAgbCAxMjcyIDc5NSBsIDAgNzk1IGwgMCAwIGwgZW9jbGlwIG5ld3BhdGgKK2dzCitwdW0KKzIxMiA1NTYgdAorMjA4IC0zNDUgbSAgMTk3IC0zNDQgbCAgMTEzIC00MTAgbCAgMjUgLTM0MiBsICAxMSAtMzQ1IGwgIDExMyAtNDYyIGwgIDIwOCAtMzQ1IGwgCitwIGVmCitwb20KK2dyCitncworcHVtCisxNTkgNTU2IHQKKzMzMSAtMjYxIG0gIDMzMSAtMjYxIDMzMSAtMjYxIDMyMiAtMjI5IGN0IDMyMiAtMjI5IDMyMiAtMjI5IDI3MCAtMjI5IGN0IDI3NCAtMjE4IDI3NiAtMjA3IDI3NiAtMTk4IGN0IAorMjc2IC0xNzAgMjY0IC0xNDYgMjQxIC0xMjQgY3QgMjE3IC0xMDMgMTg1IC05MSAxNDQgLTg5IGN0IDEyMiAtODIgMTA2IC03NSA5NSAtNjUgY3QgCis5MSAtNjIgODkgLTU5IDg5IC01NSBjdCA4OSAtNTEgOTEgLTQ3IDk1IC00NCBjdCA5OCAtNDAgMTA4IC0zNyAxMjMgLTMzIGN0IDEyMyAtMzMgMTIzIC0zMyAxODMgLTIwIGN0IAorMjE2IC0xMiAyMzggLTMgMjQ4IDggY3QgMjU5IDE5IDI2NCAzMSAyNjQgNDYgY3QgMjY0IDYzIDI1OCA3OCAyNDUgOTIgY3QgMjMzIDEwNiAyMTUgMTE3IDE5MCAxMjUgY3QgCisxNjYgMTMzIDE0MCAxMzcgMTExIDEzNyBjdCA4NSAxMzcgNjIgMTM0IDQxIDEyOCBjdCAyMCAxMjIgNSAxMTQgLTQgMTAzIGN0IC0xMyA5MyAtMTggODIgLTE4IDcxIGN0IAorLTE4IDYzIC0xNSA1MyAtOSA0NCBjdCAtMyAzNCA0IDI2IDEzIDIwIGN0IDE5IDE2IDM1IDcgNjEgLTggY3QgNTIgLTE1IDQ3IC0yMyA0NyAtMzIgY3QgCis0NyAtNDAgNTEgLTQ5IDU5IC01OCBjdCA2NyAtNjggODUgLTc4IDExMSAtODkgY3QgODkgLTkzIDcxIC0xMDMgNTggLTExOCBjdCA0NSAtMTMyIDM5IC0xNDkgMzkgLTE2NyBjdCAKKzM5IC0xOTYgNTIgLTIyMiA3OCAtMjQ1IGN0IDEwNCAtMjY4IDEzOCAtMjgwIDE4MSAtMjgwIGN0IDE5NiAtMjgwIDIwOSAtMjc4IDIxOSAtMjc1IGN0IAorMjI5IC0yNzIgMjM5IC0yNjggMjQ4IC0yNjEgY3QgMjQ4IC0yNjEgMjQ4IC0yNjEgMzMxIC0yNjEgY3QgcAorMjI1IC0yMTEgbSAgMjI1IC0yMjggMjIwIC0yNDAgMjExIC0yNTAgY3QgMjAxIC0yNTkgMTg5IC0yNjQgMTczIC0yNjQgY3QgMTQ5IC0yNjQgMTI5IC0yNTIgMTE0IC0yMjkgY3QgCis5OCAtMjA2IDkwIC0xODIgOTAgLTE1NyBjdCA5MCAtMTQxIDk1IC0xMjggMTA1IC0xMTggY3QgMTE1IC0xMDggMTI3IC0xMDMgMTQyIC0xMDMgY3QgCisxNTMgLTEwMyAxNjQgLTEwNiAxNzQgLTExMiBjdCAxODUgLTExOCAxOTQgLTEyNiAyMDEgLTEzNiBjdCAyMDkgLTE0NyAyMTQgLTE2MCAyMTkgLTE3NiBjdCAKKzIyMyAtMTkyIDIyNSAtMjA0IDIyNSAtMjExIGN0IHAKKzc0IDAgbSAgNTcgOCA0NSAxOCAzNiAzMCBjdCAyNyA0MiAyMyA1MyAyMyA2NSBjdCAyMyA3OSAyOSA5MCA0MiA5OSBjdCA1OSAxMTIgODUgMTE4IDEyMCAxMTggY3QgCisxNDkgMTE4IDE3NSAxMTMgMTk2IDEwMyBjdCAyMTcgOTMgMjI3IDgwIDIyNyA2NCBjdCAyMjcgNTYgMjIzIDQ4IDIxNSA0MSBjdCAyMDggMzQgMTkzIDI4IDE3MCAyNCBjdCAKKzE1OCAyMSAxMjYgMTMgNzQgMCBjdCBwIGVmCitwb20KK2dyCitncworcHVtCis1MjkgNzE0IHQKKzEzNCAtMTY4IG0gIDEzNCAtMTY4IDEzNCAtMTY4IDEyNCAtMTExIGN0IDEyNCAtMTExIDEyNCAtMTExIDExNyAtMTExIGN0IDExNiAtMTI4IDExMyAtMTQwIDEwNyAtMTQ4IGN0IAorMTAxIC0xNTUgOTMgLTE1OSA4NCAtMTU5IGN0IDc3IC0xNTkgNzEgLTE1NyA2NiAtMTUzIGN0IDYyIC0xNDggNjAgLTE0MyA2MCAtMTM3IGN0IAorNjAgLTEzMyA2MSAtMTI5IDYzIC0xMjYgY3QgNjQgLTEyMiA2OCAtMTE3IDc0IC0xMTAgY3QgODkgLTkzIDk5IC03OSAxMDMgLTcwIGN0IAorMTA4IC02MiAxMTAgLTUzIDExMCAtNDUgY3QgMTEwIC0zMiAxMDUgLTIxIDk0IC0xMSBjdCA4NCAtMSA3MSA0IDU1IDQgY3QgNDYgNCAzNiAyIDI0IC0zIGN0IAorMjAgLTQgMTcgLTUgMTUgLTUgY3QgMTAgLTUgNiAtMiAzIDQgY3QgMyA0IDMgNCAtNCA0IGN0IC00IDQgLTQgNCA2IC01NiBjdCA2IC01NiA2IC01NiAxMyAtNTYgY3QgCisxNCAtMzcgMTggLTI0IDI1IC0xNyBjdCAzMiAtOSA0MSAtNSA1MyAtNSBjdCA2MyAtNSA3MCAtOCA3NiAtMTMgY3QgODEgLTE4IDg0IC0yNSA4NCAtMzIgY3QgCis4NCAtMzcgODMgLTQyIDgxIC00NiBjdCA3OCAtNTMgNzEgLTYzIDYwIC03NiBjdCA0OSAtODkgNDIgLTk5IDM5IC0xMDYgY3QgMzYgLTExMiAzNCAtMTE5IDM0IC0xMjUgY3QgCiszNCAtMTM3IDM4IC0xNDcgNDcgLTE1NiBjdCA1NSAtMTY0IDY2IC0xNjggODAgLTE2OCBjdCA4MyAtMTY4IDg3IC0xNjggOTAgLTE2NyBjdCAKKzkyIC0xNjcgOTYgLTE2NSAxMDIgLTE2MyBjdCAxMDggLTE2MCAxMTIgLTE1OSAxMTQgLTE1OSBjdCAxMTkgLTE1OSAxMjQgLTE2MiAxMjcgLTE2OCBjdCAKKzEyNyAtMTY4IDEyNyAtMTY4IDEzNCAtMTY4IGN0IHAgZWYKKzMzMSAtMTY0IG0gIDMzMSAtMTY0IDMzMSAtMTY0IDI5NyAtNTIgY3QgMjkyIC0zNSAyODkgLTI0IDI4OSAtMjAgY3QgMjg5IC0xOCAyOTAgLTE2IDI5MCAtMTUgY3QgCisyOTEgLTE0IDI5MiAtMTQgMjkzIC0xNCBjdCAyOTQgLTE0IDI5NiAtMTUgMjk4IC0xNyBjdCAzMDAgLTE4IDMwNiAtMjYgMzE0IC0zOSBjdCAKKzMxNCAtMzkgMzE0IC0zOSAzMTkgLTM1IGN0IDMxMSAtMjAgMzAyIC05IDI5MyAtMiBjdCAyODcgMiAyODEgNCAyNzYgNCBjdCAyNzEgNCAyNjggMyAyNjYgMCBjdCAKKzI2MyAtMyAyNjIgLTYgMjYyIC0xMCBjdCAyNjIgLTE1IDI2MyAtMjAgMjY0IC0yNyBjdCAyNjcgLTM1IDI3MyAtNTUgMjgyIC04NiBjdCAKKzI2MCAtNTEgMjQyIC0yOCAyMjcgLTE1IGN0IDIxMiAtMiAxOTggNCAxODYgNCBjdCAxODAgNCAxNzUgMiAxNzEgLTIgY3QgMTY3IC02IDE2NSAtMTEgMTY1IC0xNyBjdCAKKzE2NSAtMjYgMTY5IC00MCAxNzUgLTU5IGN0IDE3NSAtNTkgMTc1IC01OSAxOTQgLTExNyBjdCAxOTkgLTEzMCAyMDIgLTEzOSAyMDIgLTE0MiBjdCAKKzIwMiAtMTQ0IDIwMSAtMTQ1IDIwMCAtMTQ2IGN0IDE5OCAtMTQ3IDE5NyAtMTQ4IDE5NiAtMTQ4IGN0IDE5MiAtMTQ4IDE4OSAtMTQ3IDE4NiAtMTQ1IGN0IAorMTgzIC0xNDMgMTc2IC0xMzYgMTY1IC0xMjQgY3QgMTY1IC0xMjQgMTY1IC0xMjQgMTU5IC0xMjggY3QgMTY5IC0xNDMgMTgwIC0xNTMgMTkxIC0xNjAgY3QgCisyMDAgLTE2NSAyMDggLTE2OCAyMTUgLTE2OCBjdCAyMjAgLTE2OCAyMjQgLTE2NiAyMjcgLTE2MyBjdCAyMzAgLTE2MCAyMzIgLTE1NSAyMzIgLTE1MCBjdCAKKzIzMiAtMTQzIDIyOSAtMTMxIDIyMyAtMTE0IGN0IDIyMyAtMTE0IDIyMyAtMTE0IDIwMyAtNTUgY3QgMTk3IC0zOSAxOTQgLTI5IDE5NCAtMjQgY3QgCisxOTQgLTIyIDE5NSAtMjAgMTk3IC0xOSBjdCAxOTkgLTE3IDIwMSAtMTYgMjAzIC0xNiBjdCAyMDggLTE2IDIxMyAtMTggMjIwIC0yMyBjdCAKKzIyNyAtMjcgMjM2IC0zNiAyNDcgLTUwIGN0IDI1OSAtNjQgMjY4IC03NyAyNzUgLTkwIGN0IDI4MiAtMTAyIDI5MCAtMTIyIDI5OSAtMTQ5IGN0IAorMjk5IC0xNDkgMjk5IC0xNDkgMzA0IC0xNjQgY3QgMzA0IC0xNjQgMzA0IC0xNjQgMzMxIC0xNjQgY3QgcCBlZgorNDUzIC0yNjUgbSAgNDUzIC0yNjUgNDUzIC0yNjUgNDE1IC0xMzYgY3QgNDI3IC0xNDggNDM3IC0xNTcgNDQ1IC0xNjEgY3QgNDU0IC0xNjYgNDYzIC0xNjggNDcyIC0xNjggY3QgCis0ODUgLTE2OCA0OTYgLTE2NCA1MDQgLTE1NCBjdCA1MTMgLTE0NSA1MTcgLTEzMyA1MTcgLTExOCBjdCA1MTcgLTk4IDUxMSAtNzggNTAwIC01OSBjdCAKKzQ4OSAtMzkgNDc1IC0yMyA0NTkgLTEyIGN0IDQ0MiAtMiA0MjUgNCA0MDkgNCBjdCAzOTEgNCAzNzIgLTMgMzUzIC0xNyBjdCAzNTMgLTE3IDM1MyAtMTcgNDA5IC0yMTMgY3QgCis0MTQgLTIyOCA0MTYgLTIzNiA0MTYgLTIzOSBjdCA0MTYgLTI0MiA0MTUgLTI0NCA0MTMgLTI0NiBjdCA0MTAgLTI0OCA0MDYgLTI0OSA0MDAgLTI0OSBjdCAKKzM5NyAtMjQ5IDM5MyAtMjQ5IDM4NyAtMjQ4IGN0IDM4NyAtMjQ4IDM4NyAtMjQ4IDM4NyAtMjU1IGN0IDM4NyAtMjU1IDM4NyAtMjU1IDQ1MyAtMjY1IGN0IAorcAorMzgwIC0xNSBtICAzOTIgLTggNDAzIC01IDQxMiAtNSBjdCA0MjIgLTUgNDMzIC05IDQ0NCAtMTcgY3QgNDU2IC0yNSA0NjUgLTM4IDQ3NCAtNTcgY3QgCis0ODIgLTc2IDQ4NiAtOTUgNDg2IC0xMTQgY3QgNDg2IC0xMjUgNDgzIC0xMzQgNDc4IC0xNDAgY3QgNDczIC0xNDcgNDY2IC0xNTAgNDU5IC0xNTAgY3QgCis0NDggLTE1MCA0MzcgLTE0NSA0MjcgLTEzNiBjdCA0MTcgLTEyNyA0MDkgLTExNCA0MDQgLTk3IGN0IDQwNCAtOTcgNDA0IC05NyAzODAgLTE1IGN0IAorcCBlZgorNjQ4IC0xNjQgbSAgNjQ4IC0xNjQgNjQ4IC0xNjQgNjQ1IC0xNTAgY3QgNjQ1IC0xNTAgNjQ1IC0xNTAgNjE3IC0xNTAgY3QgNjE3IC0xNTAgNjE3IC0xNTAgNTk0IC02OSBjdCAKKzU4NCAtMzQgNTc0IC02IDU2NSAxMyBjdCA1NTIgNDEgNTM4IDYwIDUyMyA3MCBjdCA1MTEgNzggNTAwIDgyIDQ4OCA4MiBjdCA0ODEgODIgNDc0IDgwIDQ2OSA3NSBjdCAKKzQ2NSA3MiA0NjMgNjggNDYzIDYzIGN0IDQ2MyA1OSA0NjUgNTUgNDY4IDUyIGN0IDQ3MSA0OSA0NzUgNDggNDc5IDQ4IGN0IDQ4MyA0OCA0ODUgNDkgNDg4IDUxIGN0IAorNDkwIDUzIDQ5MSA1NiA0OTEgNTggY3QgNDkxIDYxIDQ5MCA2NCA0ODggNjYgY3QgNDg2IDY4IDQ4NSA2OSA0ODUgNzAgY3QgNDg1IDcxIDQ4NSA3MiA0ODYgNzMgY3QgCis0ODcgNzQgNDg5IDc0IDQ5MSA3NCBjdCA0OTcgNzQgNTAyIDcyIDUwOCA2OSBjdCA1MTQgNjYgNTE5IDYxIDUyNCA1NCBjdCA1MjggNDggNTMyIDM4IDUzNyAyNiBjdCAKKzUzOCAyMSA1NDMgNCA1NTEgLTI1IGN0IDU1MSAtMjUgNTUxIC0yNSA1ODggLTE1MCBjdCA1ODggLTE1MCA1ODggLTE1MCA1NTEgLTE1MCBjdCAKKzU1MSAtMTUwIDU1MSAtMTUwIDU1NCAtMTY0IGN0IDU2NSAtMTY0IDU3MyAtMTY1IDU3OCAtMTY2IGN0IDU4MiAtMTY4IDU4NiAtMTcwIDU5MCAtMTc0IGN0IAorNTk0IC0xNzggNTk5IC0xODYgNjA0IC0xOTcgY3QgNjExIC0yMTIgNjE4IC0yMjQgNjI0IC0yMzIgY3QgNjMzIC0yNDMgNjQyIC0yNTEgNjUyIC0yNTcgY3QgCis2NjEgLTI2MiA2NzEgLTI2NSA2NzkgLTI2NSBjdCA2ODggLTI2NSA2OTUgLTI2MyA3MDEgLTI1OCBjdCA3MDYgLTI1MyA3MDkgLTI0OCA3MDkgLTI0MiBjdCAKKzcwOSAtMjM4IDcwOCAtMjM0IDcwNSAtMjMxIGN0IDcwMiAtMjI4IDY5OCAtMjI3IDY5NCAtMjI3IGN0IDY5MCAtMjI3IDY4NyAtMjI4IDY4NSAtMjMwIGN0IAorNjgyIC0yMzMgNjgxIC0yMzUgNjgxIC0yMzggY3QgNjgxIC0yNDAgNjgyIC0yNDMgNjg0IC0yNDUgY3QgNjg2IC0yNDggNjg3IC0yNTAgNjg3IC0yNTEgY3QgCis2ODcgLTI1MyA2ODYgLTI1NCA2ODUgLTI1NSBjdCA2ODQgLTI1NiA2ODIgLTI1NyA2NzkgLTI1NyBjdCA2NzIgLTI1NyA2NjUgLTI1NCA2NTkgLTI0OSBjdCAKKzY1MSAtMjQyIDY0NCAtMjMyIDYzOCAtMjE3IGN0IDYzNSAtMjEwIDYyOSAtMTkyIDYyMSAtMTY0IGN0IDYyMSAtMTY0IDYyMSAtMTY0IDY0OCAtMTY0IGN0IAorcCBlZgorcG9tCitncgorZ3IKK2dyCitncgorZ3IKKzE3NTM1IDE2NjA1IG0gIDE2OTczIDE2NzkzIGwgIDE2OTczIDE2NDE4IGwgIDE3NTM1IDE2NjA1IGwgIHAgZWYKKzE2MTM1IDE2NTgwIG0gIDE3MDg1IDE2NTgwIGwgIDE3MDg1IDE2NjMwIGwgIDE2MTM1IDE2NjMwIGwgIDE2MTM1IDE2NTgwIGwgCitwIGVmCit0bSBzZXRtYXRyaXgKKzAgMCB0IAorMSAxIHMgCiswIDIyMDExIHQgCitwb20KK2NvdW50IG9wX2NvdW50IHN1YiB7cG9wfSByZXBlYXQgY291bnRkaWN0c3RhY2sgZGljdF9jb3VudCBzdWIge2VuZH0gcmVwZWF0IGI0X2luY19zdGF0ZSByZXN0b3JlCislJVBhZ2VUcmFpbGVyCislJVRyYWlsZXIKKyUlRU9GCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9kb2Mvc3BlZXhfYWJzLm9kZyBiLzNyZHBhcnR5L3NwZWV4L2RvYy9zcGVleF9hYnMub2RnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MzI5MWIKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9kb2Mvc3BlZXhfYWJzLm9kZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9kb2Mvc3BlZXhfYW5hbHlzaXMuZXBzIGIvM3JkcGFydHkvc3BlZXgvZG9jL3NwZWV4X2FuYWx5c2lzLmVwcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjM0ZmMyCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvZG9jL3NwZWV4X2FuYWx5c2lzLmVwcwpAQCAtMCwwICsxLDc0NCBAQAorJSFQUy1BZG9iZS0zLjAgRVBTRi0zLjAgCislJUJvdW5kaW5nQm94OiAwIDAgNDY1IDE4MAorJSVQYWdlczogMAorJSVDcmVhdG9yOiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCislJVRpdGxlOiBub25lCislJUNyZWF0aW9uRGF0ZTogbm9uZQorJSVMYW5ndWFnZUxldmVsOiAyCislJUVuZENvbW1lbnRzCislJUJlZ2luUHJvbG9nCislJUJlZ2luUmVzb3VyY2U6IFNEUmVzCisvYjRfaW5jX3N0YXRlIHNhdmUgZGVmCisvZGljdF9jb3VudCBjb3VudGRpY3RzdGFjayBkZWYKKy9vcF9jb3VudCBjb3VudCAxIHN1YiBkZWYKK3VzZXJkaWN0IGJlZ2luCiswIHNldGdyYXkgMCBzZXRsaW5lY2FwIDEgc2V0bGluZXdpZHRoIDAgc2V0bGluZWpvaW4gMTAgc2V0bWl0ZXJsaW1pdFtdIDAgc2V0ZGFzaCBuZXdwYXRoCisvbGFuZ3VhZ2VsZXZlbCB3aGVyZSB7cG9wIGxhbmd1YWdlbGV2ZWwgMSBuZSB7ZmFsc2Ugc2V0c3Ryb2tlYWRqdXN0IGZhbHNlIHNldG92ZXJwcmludH0gaWZ9IGlmCisvYmRlZiB7YmluZCBkZWZ9IGJpbmQgZGVmCisvYyB7c2V0Z3JheX0gYmRlZgorL2wge25lZyBsaW5ldG99IGJkZWYKKy9ybCB7bmVnIHJsaW5ldG99IGJkZWYKKy9sYyB7c2V0bGluZWNhcH0gYmRlZgorL2xqIHtzZXRsaW5lam9pbn0gYmRlZgorL2x3IHtzZXRsaW5ld2lkdGh9IGJkZWYKKy9tbCB7c2V0bWl0ZXJsaW1pdH0gYmRlZgorL2xkIHtzZXRkYXNofSBiZGVmCisvbSB7bmVnIG1vdmV0b30gYmRlZgorL2N0IHs2IDIgcm9sbCBuZWcgNiAyIHJvbGwgbmVnIDYgMiByb2xsIG5lZyBjdXJ2ZXRvfSBiZGVmCisvciB7cm90YXRlfSBiZGVmCisvdCB7bmVnIHRyYW5zbGF0ZX0gYmRlZgorL3Mge3NjYWxlfSBiZGVmCisvc3cge3Nob3d9IGJkZWYKKy9ncyB7Z3NhdmV9IGJkZWYKKy9nciB7Z3Jlc3RvcmV9IGJkZWYKKy9mIHtmaW5kZm9udCBkdXAgbGVuZ3RoIGRpY3QgYmVnaW4KK3sxIGluZGV4IC9GSUQgbmUge2RlZn0ge3BvcCBwb3B9IGlmZWxzZX0gZm9yYWxsIC9FbmNvZGluZyBJU09MYXRpbjFFbmNvZGluZyBkZWYKK2N1cnJlbnRkaWN0IGVuZCAvTkZvbnQgZXhjaCBkZWZpbmVmb250IHBvcCAvTkZvbnQgZmluZGZvbnR9IGJkZWYKKy9wIHtjbG9zZXBhdGh9IGJkZWYKKy9zZiB7c2NhbGVmb250IHNldGZvbnR9IGJkZWYKKy9lZiB7ZW9maWxsfWJkZWYKKy9wYyB7Y2xvc2VwYXRoIHN0cm9rZX1iZGVmCisvcHMge3N0cm9rZX1iZGVmCisvcHVtIHttYXRyaXggY3VycmVudG1hdHJpeH1iZGVmCisvcG9tIHtzZXRtYXRyaXh9YmRlZgorL2JzIHsvYVN0cmluZyBleGNoIGRlZiAvblhPZnMgZXhjaCBkZWYgL25XaWR0aCBleGNoIGRlZiBjdXJyZW50cG9pbnQgblhPZnMgMCBybW92ZXRvIHB1bSBuV2lkdGggYVN0cmluZyBzdHJpbmd3aWR0aCBwb3AgZGl2IDEgc2NhbGUgYVN0cmluZyBzaG93IHBvbSBtb3ZldG99IGJkZWYKKyUlRW5kUmVzb3VyY2UKKyUlRW5kUHJvbG9nCislJUJlZ2luU2V0dXAKKyUlRW5kU2V0dXAKKyUlUGFnZTogMSAxCislJUJlZ2luUGFnZVNldHVwCislJUVuZFBhZ2VTZXR1cAorcHVtCiswLjAyODMyIDAuMDI4MzEgcyAKKzAgLTYzNTggdAorL3RtIG1hdHJpeCBjdXJyZW50bWF0cml4IGRlZgordG0gc2V0bWF0cml4CistNzAwIC0zMDAwIHQgCisxIDEgcyAKKzUwIGx3IDEgbGogMC4wMDAgYyAzOTAwIDcwMDAgbSAgMzEwMCA3MDAwIGwgIDMxMDAgNTUwMCBsICA0NzAwIDU1MDAgbCAgNDcwMCA3MDAwIGwgCiszOTAwIDcwMDAgbCAgcGMKK2dzCitncworcHVtCiszMjkzIDY0NjAgdAorNDcgMCBtICA0NyAtNDU1IGwgIDEwNyAtNDU1IGwgIDEwNyAtNTQgbCAgMzMwIC01NCBsICAzMzAgMCBsICA0NyAwIGwgIHAgZWYKKzQwMCAwIG0gIDQwMCAwIDQwMCAwIDQwMCAtNDU1IGN0IDQwMCAtNDU1IDQwMCAtNDU1IDU3MSAtNDU1IGN0IDYwMiAtNDU1IDYyNSAtNDU0IDY0MSAtNDUxIGN0IAorNjYzIC00NDcgNjgyIC00NDAgNjk3IC00MjkgY3QgNzEyIC00MTkgNzI0IC00MDQgNzMzIC0zODUgY3QgNzQyIC0zNjcgNzQ3IC0zNDYgNzQ3IC0zMjMgY3QgCis3NDcgLTI4NSA3MzUgLTI1MiA3MTAgLTIyNSBjdCA2ODUgLTE5OCA2NDEgLTE4NSA1NzcgLTE4NSBjdCA1NzcgLTE4NSA1NzcgLTE4NSA0NjAgLTE4NSBjdCAKKzQ2MCAtMTg1IDQ2MCAtMTg1IDQ2MCAwIGN0IDQ2MCAwIDQ2MCAwIDQwMCAwIGN0IHAKKzQ2MCAtMjM5IG0gIDQ2MCAtMjM5IDQ2MCAtMjM5IDU3OCAtMjM5IGN0IDYxNyAtMjM5IDY0NCAtMjQ2IDY2MCAtMjYxIGN0IDY3NyAtMjc1IDY4NSAtMjk1IDY4NSAtMzIyIGN0IAorNjg1IC0zNDEgNjgwIC0zNTcgNjcxIC0zNzAgY3QgNjYxIC0zODQgNjQ4IC0zOTMgNjMzIC0zOTcgY3QgNjIyIC00MDAgNjA0IC00MDEgNTc2IC00MDEgY3QgCis1NzYgLTQwMSA1NzYgLTQwMSA0NjAgLTQwMSBjdCA0NjAgLTQwMSA0NjAgLTQwMSA0NjAgLTIzOSBjdCBwIGVmCisxMTQ5IC0xNTkgbSAgMTE0OSAtMTU5IDExNDkgLTE1OSAxMjA5IC0xNDQgY3QgMTE5NiAtOTUgMTE3NCAtNTcgMTE0MSAtMzEgY3QgCisxMTA4IC01IDEwNjggOCAxMDIxIDggY3QgOTcyIDggOTMyIC0yIDkwMSAtMjIgY3QgODcwIC00MiA4NDcgLTcxIDgzMSAtMTA5IGN0IDgxNSAtMTQ3IDgwNyAtMTg3IDgwNyAtMjMxIGN0IAorODA3IC0yNzggODE2IC0zMjAgODM0IC0zNTUgY3QgODUyIC0zOTAgODc4IC00MTcgOTExIC00MzYgY3QgOTQ1IC00NTQgOTgxIC00NjMgMTAyMiAtNDYzIGN0IAorMTA2NyAtNDYzIDExMDUgLTQ1MSAxMTM2IC00MjggY3QgMTE2NyAtNDA1IDExODkgLTM3MyAxMjAxIC0zMzEgY3QgMTIwMSAtMzMxIDEyMDEgLTMzMSAxMTQyIC0zMTcgY3QgCisxMTMxIC0zNTAgMTExNiAtMzc0IDEwOTYgLTM4OSBjdCAxMDc2IC00MDQgMTA1MSAtNDEyIDEwMjAgLTQxMiBjdCA5ODUgLTQxMiA5NTYgLTQwNCA5MzMgLTM4NyBjdCAKKzkwOSAtMzcwIDg5MyAtMzQ3IDg4MyAtMzE5IGN0IDg3NCAtMjkxIDg2OSAtMjYxIDg2OSAtMjMxIGN0IDg2OSAtMTkyIDg3NSAtMTU4IDg4NiAtMTI5IGN0IAorODk3IC0xMDEgOTE1IC03OSA5MzkgLTY1IGN0IDk2MiAtNTAgOTg4IC00MyAxMDE2IC00MyBjdCAxMDUwIC00MyAxMDc4IC01MyAxMTAyIC03MiBjdCAKKzExMjUgLTkyIDExNDEgLTEyMSAxMTQ5IC0xNTkgY3QgcCBlZgorcG9tCitncgorZ3IKK2dzCitncworcHVtCisxMTcwIDM2MzYgdAorMTgxIC0yNjAgbSAgMTgxIC0yNjAgMTgxIC0yNjAgMTgxIC0xNzQgY3QgMTgxIC0xNzQgMTgxIC0xNzQgMTcxIC0xNzQgY3QgMTY0IC0yMDEgMTU1IC0yMjAgMTQ1IC0yMjkgY3QgCisxMzQgLTIzOSAxMjAgLTI0NCAxMDMgLTI0NCBjdCA5MSAtMjQ0IDgwIC0yNDEgNzMgLTIzNCBjdCA2NSAtMjI3IDYxIC0yMTkgNjEgLTIxMSBjdCAKKzYxIC0yMDEgNjQgLTE5MiA3MCAtMTg1IGN0IDc1IC0xNzcgODcgLTE2OSAxMDQgLTE2MSBjdCAxMDQgLTE2MSAxMDQgLTE2MSAxNDQgLTE0MSBjdCAKKzE4MSAtMTIzIDIwMCAtOTkgMjAwIC02OSBjdCAyMDAgLTQ3IDE5MSAtMjggMTc0IC0xNCBjdCAxNTcgMCAxMzggNyAxMTYgNyBjdCAxMDEgNyA4MyA0IDY0IC0xIGN0IAorNTggLTIgNTMgLTMgNDkgLTMgY3QgNDUgLTMgNDEgLTEgMzkgMyBjdCAzOSAzIDM5IDMgMjkgMyBjdCAyOSAzIDI5IDMgMjkgLTg3IGN0IDI5IC04NyAyOSAtODcgMzkgLTg3IGN0IAorNDQgLTYxIDU0IC00MiA2OCAtMjkgY3QgODMgLTE2IDk5IC05IDExNiAtOSBjdCAxMjkgLTkgMTM5IC0xMyAxNDcgLTIwIGN0IDE1NSAtMjggMTU5IC0zNyAxNTkgLTQ3IGN0IAorMTU5IC02MCAxNTUgLTcwIDE0NiAtNzkgY3QgMTM3IC04OCAxMTkgLTk4IDkzIC0xMTEgY3QgNjYgLTEyNCA0OCAtMTM2IDQwIC0xNDcgY3QgCiszMiAtMTU3IDI4IC0xNzEgMjggLTE4NyBjdCAyOCAtMjA4IDM1IC0yMjUgNDkgLTIzOSBjdCA2MyAtMjUzIDgyIC0yNjAgMTA0IC0yNjAgY3QgCisxMTQgLTI2MCAxMjYgLTI1OCAxNDAgLTI1NCBjdCAxNDkgLTI1MSAxNTUgLTI1MCAxNTggLTI1MCBjdCAxNjEgLTI1MCAxNjQgLTI1MSAxNjUgLTI1MiBjdCAKKzE2NyAtMjUzIDE2OSAtMjU2IDE3MSAtMjYwIGN0IDE3MSAtMjYwIDE3MSAtMjYwIDE4MSAtMjYwIGN0IHAgZWYKKzIyMCAtMjI4IG0gIDIyMCAtMjI4IDIyMCAtMjI4IDI5OCAtMjU5IGN0IDI5OCAtMjU5IDI5OCAtMjU5IDMwOSAtMjU5IGN0IDMwOSAtMjU5IDMwOSAtMjU5IDMwOSAtMjAxIGN0IAorMzIyIC0yMjMgMzM1IC0yMzggMzQ4IC0yNDcgY3QgMzYxIC0yNTYgMzc1IC0yNjAgMzg5IC0yNjAgY3QgNDE0IC0yNjAgNDM1IC0yNTAgNDUyIC0yMzAgY3QgCis0NzMgLTIwNiA0ODMgLTE3NSA0ODMgLTEzNiBjdCA0ODMgLTkyIDQ3MSAtNTYgNDQ2IC0yOCBjdCA0MjUgLTUgNDAwIDcgMzY5IDcgY3QgCiszNTUgNyAzNDMgNSAzMzQgMSBjdCAzMjYgLTIgMzE4IC03IDMwOSAtMTYgY3QgMzA5IC0xNiAzMDkgLTE2IDMwOSA2MyBjdCAzMDkgODAgMzEwIDkxIDMxMiA5NiBjdCAKKzMxNCAxMDAgMzE4IDEwNCAzMjMgMTA3IGN0IDMyOSAxMTAgMzM4IDExMSAzNTIgMTExIGN0IDM1MiAxMTEgMzUyIDExMSAzNTIgMTIxIGN0IAorMzUyIDEyMSAzNTIgMTIxIDIxNyAxMjEgY3QgMjE3IDEyMSAyMTcgMTIxIDIxNyAxMTEgY3QgMjE3IDExMSAyMTcgMTExIDIyNCAxMTEgY3QgCisyMzQgMTExIDI0MyAxMDkgMjUxIDEwNSBjdCAyNTQgMTAzIDI1NyAxMDAgMjU5IDk1IGN0IDI2MSA5MSAyNjIgNzkgMjYyIDYxIGN0IDI2MiA2MSAyNjIgNjEgMjYyIC0xNzkgY3QgCisyNjIgLTE5NSAyNjEgLTIwNSAyNjAgLTIwOSBjdCAyNTggLTIxMyAyNTYgLTIxNiAyNTMgLTIxOSBjdCAyNTAgLTIyMSAyNDUgLTIyMiAyNDAgLTIyMiBjdCAKKzIzNiAtMjIyIDIzMCAtMjIxIDIyMyAtMjE4IGN0IDIyMyAtMjE4IDIyMyAtMjE4IDIyMCAtMjI4IGN0IHAKKzMwOSAtMTg1IG0gIDMwOSAtMTg1IDMwOSAtMTg1IDMwOSAtOTAgY3QgMzA5IC03MCAzMTAgLTU3IDMxMSAtNTAgY3QgMzE0IC00MCAzMjAgLTMwIDMzMCAtMjIgY3QgCiszNDAgLTE0IDM1MyAtMTAgMzY4IC0xMCBjdCAzODYgLTEwIDQwMSAtMTcgNDEyIC0zMSBjdCA0MjcgLTUwIDQzNCAtNzcgNDM0IC0xMTEgY3QgCis0MzQgLTE0OSA0MjYgLTE3OSA0MDkgLTIwMCBjdCAzOTcgLTIxNCAzODMgLTIyMSAzNjcgLTIyMSBjdCAzNTkgLTIyMSAzNTAgLTIxOSAzNDEgLTIxNCBjdCAKKzMzNSAtMjExIDMyNCAtMjAxIDMwOSAtMTg1IGN0IHAgZWYKKzU2NCAtMTU4IG0gIDU2NCAtMTIxIDU3MyAtOTIgNTkxIC03MSBjdCA2MDkgLTUwIDYzMCAtMzkgNjU1IC0zOSBjdCA2NzEgLTM5IDY4NiAtNDMgNjk4IC01MiBjdCAKKzcxMCAtNjEgNzIwIC03NyA3MjggLTk5IGN0IDcyOCAtOTkgNzI4IC05OSA3MzcgLTk0IGN0IDczMyAtNjggNzIyIC00NSA3MDMgLTI0IGN0IAorNjg1IC0zIDY2MiA3IDYzNCA3IGN0IDYwNCA3IDU3OCAtNSA1NTYgLTI4IGN0IDUzNSAtNTIgNTI0IC04MyA1MjQgLTEyMyBjdCA1MjQgLTE2NiA1MzUgLTIwMCA1NTcgLTIyNCBjdCAKKzU3OSAtMjQ4IDYwNyAtMjYwIDY0MCAtMjYwIGN0IDY2OCAtMjYwIDY5MiAtMjUxIDcxMCAtMjMyIGN0IDcyOCAtMjE0IDczNyAtMTg5IDczNyAtMTU4IGN0IAorNzM3IC0xNTggNzM3IC0xNTggNTY0IC0xNTggY3QgcAorNTY0IC0xNzQgbSAgNTY0IC0xNzQgNTY0IC0xNzQgNjgwIC0xNzQgY3QgNjc5IC0xOTAgNjc3IC0yMDEgNjc0IC0yMDggY3QgNjcwIC0yMTggNjYzIC0yMjYgNjU0IC0yMzEgY3QgCis2NDUgLTIzNyA2MzUgLTI0MCA2MjYgLTI0MCBjdCA2MTAgLTI0MCA1OTcgLTIzNCA1ODUgLTIyMyBjdCA1NzMgLTIxMSA1NjYgLTE5NSA1NjQgLTE3NCBjdCAKK3AgZWYKKzgxNCAtMTU4IG0gIDgxNCAtMTIxIDgyMyAtOTIgODQxIC03MSBjdCA4NTkgLTUwIDg4MCAtMzkgOTA1IC0zOSBjdCA5MjEgLTM5IDkzNiAtNDMgOTQ4IC01MiBjdCAKKzk2MCAtNjEgOTcwIC03NyA5NzggLTk5IGN0IDk3OCAtOTkgOTc4IC05OSA5ODcgLTk0IGN0IDk4MyAtNjggOTcyIC00NSA5NTMgLTI0IGN0IAorOTM1IC0zIDkxMiA3IDg4NCA3IGN0IDg1NCA3IDgyOCAtNSA4MDYgLTI4IGN0IDc4NSAtNTIgNzc0IC04MyA3NzQgLTEyMyBjdCA3NzQgLTE2NiA3ODUgLTIwMCA4MDcgLTIyNCBjdCAKKzgyOSAtMjQ4IDg1NyAtMjYwIDg5MCAtMjYwIGN0IDkxOCAtMjYwIDk0MiAtMjUxIDk2MCAtMjMyIGN0IDk3OCAtMjE0IDk4NyAtMTg5IDk4NyAtMTU4IGN0IAorOTg3IC0xNTggOTg3IC0xNTggODE0IC0xNTggY3QgcAorODE0IC0xNzQgbSAgODE0IC0xNzQgODE0IC0xNzQgOTMwIC0xNzQgY3QgOTI5IC0xOTAgOTI3IC0yMDEgOTI0IC0yMDggY3QgOTIwIC0yMTggOTEzIC0yMjYgOTA0IC0yMzEgY3QgCis4OTUgLTIzNyA4ODUgLTI0MCA4NzYgLTI0MCBjdCA4NjAgLTI0MCA4NDcgLTIzNCA4MzUgLTIyMyBjdCA4MjMgLTIxMSA4MTYgLTE5NSA4MTQgLTE3NCBjdCAKK3AgZWYKKzEyMzYgLTk1IG0gIDEyMjkgLTYyIDEyMTYgLTM3IDExOTYgLTE5IGN0IDExNzYgLTIgMTE1NCA3IDExMzAgNyBjdCAxMTAxIDcgMTA3NiAtNSAxMDU1IC0yOSBjdCAKKzEwMzQgLTUzIDEwMjMgLTg1IDEwMjMgLTEyNiBjdCAxMDIzIC0xNjYgMTAzNSAtMTk4IDEwNTggLTIyMyBjdCAxMDgyIC0yNDggMTExMSAtMjYwIDExNDQgLTI2MCBjdCAKKzExNjkgLTI2MCAxMTg5IC0yNTMgMTIwNSAtMjQwIGN0IDEyMjEgLTIyNyAxMjI5IC0yMTQgMTIyOSAtMTk5IGN0IDEyMjkgLTE5MiAxMjI3IC0xODcgMTIyMiAtMTgyIGN0IAorMTIxOCAtMTc4IDEyMTEgLTE3NiAxMjAzIC0xNzYgY3QgMTE5MyAtMTc2IDExODUgLTE4MCAxMTc5IC0xODcgY3QgMTE3NiAtMTkwIDExNzQgLTE5OCAxMTczIC0yMDkgY3QgCisxMTcyIC0yMjAgMTE2OCAtMjI4IDExNjEgLTIzNCBjdCAxMTU1IC0yMzkgMTE0NiAtMjQyIDExMzUgLTI0MiBjdCAxMTE2IC0yNDIgMTEwMiAtMjM1IDEwOTAgLTIyMiBjdCAKKzEwNzUgLTIwNCAxMDY4IC0xODAgMTA2OCAtMTUwIGN0IDEwNjggLTEyMCAxMDc1IC05NCAxMDkwIC03MSBjdCAxMTA1IC00OCAxMTI1IC0zNiAxMTUwIC0zNiBjdCAKKzExNjggLTM2IDExODQgLTQyIDExOTkgLTU0IGN0IDEyMDkgLTYyIDEyMTggLTc3IDEyMjggLTk5IGN0IDEyMjggLTk5IDEyMjggLTk5IDEyMzYgLTk1IGN0IAorcCBlZgorMTM0NSAtMzkyIG0gIDEzNDUgLTM5MiAxMzQ1IC0zOTIgMTM0NSAtMjA4IGN0IDEzNjUgLTIzMCAxMzgxIC0yNDQgMTM5MyAtMjUxIGN0IAorMTQwNSAtMjU3IDE0MTcgLTI2MCAxNDI5IC0yNjAgY3QgMTQ0MyAtMjYwIDE0NTYgLTI1NiAxNDY2IC0yNDggY3QgMTQ3NiAtMjQwIDE0ODQgLTIyOCAxNDg5IC0yMTEgY3QgCisxNDkyIC0xOTkgMTQ5NCAtMTc4IDE0OTQgLTE0NiBjdCAxNDk0IC0xNDYgMTQ5NCAtMTQ2IDE0OTQgLTU3IGN0IDE0OTQgLTQxIDE0OTUgLTMwIDE0OTggLTI0IGN0IAorMTUwMCAtMjAgMTUwMyAtMTYgMTUwNyAtMTQgY3QgMTUxMSAtMTEgMTUxOSAtMTAgMTUzMSAtMTAgY3QgMTUzMSAtMTAgMTUzMSAtMTAgMTUzMSAwIGN0IAorMTUzMSAwIDE1MzEgMCAxNDA3IDAgY3QgMTQwNyAwIDE0MDcgMCAxNDA3IC0xMCBjdCAxNDA3IC0xMCAxNDA3IC0xMCAxNDEzIC0xMCBjdCAKKzE0MjUgLTEwIDE0MzMgLTEyIDE0MzcgLTE1IGN0IDE0NDIgLTE5IDE0NDUgLTI0IDE0NDcgLTMxIGN0IDE0NDggLTM0IDE0NDggLTQzIDE0NDggLTU3IGN0IAorMTQ0OCAtNTcgMTQ0OCAtNTcgMTQ0OCAtMTQ3IGN0IDE0NDggLTE3NCAxNDQ3IC0xOTIgMTQ0NCAtMjAxIGN0IDE0NDEgLTIxMCAxNDM2IC0yMTYgMTQzMCAtMjIxIGN0IAorMTQyNCAtMjI1IDE0MTcgLTIyNyAxNDA4IC0yMjcgY3QgMTM5OSAtMjI3IDEzODkgLTIyNSAxMzgwIC0yMjAgY3QgMTM3MCAtMjE1IDEzNTkgLTIwNSAxMzQ1IC0xOTEgY3QgCisxMzQ1IC0xOTEgMTM0NSAtMTkxIDEzNDUgLTU3IGN0IDEzNDUgLTQwIDEzNDYgLTI5IDEzNDggLTI1IGN0IDEzNTAgLTIxIDEzNTMgLTE3IDEzNTkgLTE0IGN0IAorMTM2NCAtMTEgMTM3MyAtMTAgMTM4NiAtMTAgY3QgMTM4NiAtMTAgMTM4NiAtMTAgMTM4NiAwIGN0IDEzODYgMCAxMzg2IDAgMTI2MiAwIGN0IAorMTI2MiAwIDEyNjIgMCAxMjYyIC0xMCBjdCAxMjczIC0xMCAxMjgxIC0xMiAxMjg3IC0xNSBjdCAxMjkxIC0xNyAxMjk0IC0yMSAxMjk2IC0yNiBjdCAKKzEyOTggLTMxIDEyOTkgLTQxIDEyOTkgLTU3IGN0IDEyOTkgLTU3IDEyOTkgLTU3IDEyOTkgLTI4NiBjdCAxMjk5IC0zMTQgMTI5OCAtMzMyIDEyOTcgLTMzOCBjdCAKKzEyOTYgLTM0NSAxMjk0IC0zNDkgMTI5MSAtMzUyIGN0IDEyODggLTM1NCAxMjg0IC0zNTUgMTI3OSAtMzU1IGN0IDEyNzYgLTM1NSAxMjY5IC0zNTQgMTI2MSAtMzUxIGN0IAorMTI2MSAtMzUxIDEyNjEgLTM1MSAxMjU3IC0zNjEgY3QgMTI1NyAtMzYxIDEyNTcgLTM2MSAxMzMyIC0zOTIgY3QgMTMzMiAtMzkyIDEzMzIgLTM5MiAxMzQ1IC0zOTIgY3QgCitwIGVmCitwb20KK2dyCitncworcHVtCisxMjg2IDQyNjMgdAorMTE3IC0yMzMgbSAgMTE3IC0yMzMgMTE3IC0yMzMgMTE3IC02NyBjdCAxMTcgLTQzIDEyMCAtMjggMTI1IC0yMiBjdCAxMzIgLTE0IDE0MSAtMTAgMTUyIC0xMCBjdCAKKzE1MiAtMTAgMTUyIC0xMCAxNzUgLTEwIGN0IDE3NSAtMTAgMTc1IC0xMCAxNzUgMCBjdCAxNzUgMCAxNzUgMCAyNCAwIGN0IDI0IDAgMjQgMCAyNCAtMTAgY3QgCisyNCAtMTAgMjQgLTEwIDM1IC0xMCBjdCA0MyAtMTAgNDkgLTEyIDU1IC0xNiBjdCA2MSAtMTkgNjUgLTI0IDY4IC0zMCBjdCA3MCAtMzcgNzEgLTQ5IDcxIC02NyBjdCAKKzcxIC02NyA3MSAtNjcgNzEgLTIzMyBjdCA3MSAtMjMzIDcxIC0yMzMgMjIgLTIzMyBjdCAyMiAtMjMzIDIyIC0yMzMgMjIgLTI1MyBjdCAKKzIyIC0yNTMgMjIgLTI1MyA3MSAtMjUzIGN0IDcxIC0yNTMgNzEgLTI1MyA3MSAtMjcwIGN0IDcxIC0yOTUgNzUgLTMxNiA4MyAtMzM0IGN0IAorOTEgLTM1MSAxMDQgLTM2NSAxMjAgLTM3NiBjdCAxMzcgLTM4NyAxNTYgLTM5MiAxNzcgLTM5MiBjdCAxOTYgLTM5MiAyMTQgLTM4NiAyMzAgLTM3MyBjdCAKKzI0MSAtMzY1IDI0NiAtMzU1IDI0NiAtMzQ1IGN0IDI0NiAtMzQwIDI0NCAtMzM0IDIzOSAtMzI5IGN0IDIzNCAtMzI0IDIyOSAtMzIyIDIyMyAtMzIyIGN0IAorMjE5IC0zMjIgMjE1IC0zMjQgMjEwIC0zMjcgY3QgMjA1IC0zMzAgMjAwIC0zMzYgMTkzIC0zNDYgY3QgMTg2IC0zNTYgMTgwIC0zNjMgMTc0IC0zNjcgY3QgCisxNjggLTM3MCAxNjIgLTM3MiAxNTUgLTM3MiBjdCAxNDcgLTM3MiAxMzkgLTM3MCAxMzQgLTM2NSBjdCAxMjggLTM2MSAxMjMgLTM1NCAxMjEgLTM0NCBjdCAKKzExOCAtMzM1IDExNyAtMzEwIDExNyAtMjcxIGN0IDExNyAtMjcxIDExNyAtMjcxIDExNyAtMjUzIGN0IDExNyAtMjUzIDExNyAtMjUzIDE4MiAtMjUzIGN0IAorMTgyIC0yNTMgMTgyIC0yNTMgMTgyIC0yMzMgY3QgMTgyIC0yMzMgMTgyIC0yMzMgMTE3IC0yMzMgY3QgcCBlZgorMjgzIC0yNjAgbSAgMjgzIC0yNjAgMjgzIC0yNjAgMjgzIC0yMDMgY3QgMzA0IC0yNDEgMzI2IC0yNjAgMzQ4IC0yNjAgY3QgMzU4IC0yNjAgMzY2IC0yNTcgMzczIC0yNTEgY3QgCiszODAgLTI0NSAzODMgLTIzOCAzODMgLTIzMCBjdCAzODMgLTIyMiAzODEgLTIxNiAzNzYgLTIxMSBjdCAzNzEgLTIwNiAzNjUgLTIwNCAzNTkgLTIwNCBjdCAKKzM1MiAtMjA0IDM0NSAtMjA3IDMzNyAtMjE0IGN0IDMyOSAtMjIwIDMyMyAtMjIzIDMxOSAtMjIzIGN0IDMxNiAtMjIzIDMxMiAtMjIxIDMwOSAtMjE3IGN0IAorMzAwIC0yMTAgMjkyIC0xOTggMjgzIC0xODAgY3QgMjgzIC0xODAgMjgzIC0xODAgMjgzIC01OSBjdCAyODMgLTQ1IDI4NSAtMzQgMjg4IC0yNyBjdCAKKzI5MSAtMjIgMjk1IC0xOCAzMDEgLTE1IGN0IDMwNyAtMTIgMzE2IC0xMCAzMjggLTEwIGN0IDMyOCAtMTAgMzI4IC0xMCAzMjggMCBjdCAKKzMyOCAwIDMyOCAwIDE5NiAwIGN0IDE5NiAwIDE5NiAwIDE5NiAtMTAgY3QgMjA5IC0xMCAyMTkgLTEyIDIyNiAtMTYgY3QgMjMwIC0xOSAyMzQgLTI0IDIzNiAtMzAgY3QgCisyMzcgLTMzIDIzNyAtNDIgMjM3IC01NyBjdCAyMzcgLTU3IDIzNyAtNTcgMjM3IC0xNTQgY3QgMjM3IC0xODQgMjM2IC0yMDEgMjM1IC0yMDcgY3QgCisyMzQgLTIxMyAyMzIgLTIxNyAyMjkgLTIxOSBjdCAyMjYgLTIyMiAyMjIgLTIyMyAyMTcgLTIyMyBjdCAyMTEgLTIyMyAyMDUgLTIyMiAxOTggLTIxOSBjdCAKKzE5OCAtMjE5IDE5OCAtMjE5IDE5NSAtMjI5IGN0IDE5NSAtMjI5IDE5NSAtMjI5IDI3MSAtMjYwIGN0IDI3MSAtMjYwIDI3MSAtMjYwIDI4MyAtMjYwIGN0IAorcCBlZgorNTM4IC0zNyBtICA1MTIgLTE3IDQ5NiAtNSA0ODkgLTIgY3QgNDc5IDMgNDY5IDUgNDU3IDUgY3QgNDQwIDUgNDI1IC0xIDQxNCAtMTMgY3QgCis0MDMgLTI1IDM5NyAtNDAgMzk3IC02MCBjdCAzOTcgLTcyIDQwMCAtODMgNDA1IC05MiBjdCA0MTMgLTEwNCA0MjYgLTExNiA0NDUgLTEyNyBjdCAKKzQ2MyAtMTM4IDQ5NSAtMTUxIDUzOCAtMTY3IGN0IDUzOCAtMTY3IDUzOCAtMTY3IDUzOCAtMTc3IGN0IDUzOCAtMjAyIDUzNCAtMjE5IDUyNiAtMjI4IGN0IAorNTE4IC0yMzcgNTA3IC0yNDIgNDkxIC0yNDIgY3QgNDgwIC0yNDIgNDcxIC0yMzkgNDY0IC0yMzMgY3QgNDU3IC0yMjYgNDUzIC0yMTkgNDUzIC0yMTEgY3QgCis0NTMgLTIxMSA0NTMgLTIxMSA0NTQgLTE5NSBjdCA0NTQgLTE4NyA0NTIgLTE4MCA0NDcgLTE3NiBjdCA0NDMgLTE3MSA0MzcgLTE2OSA0MzAgLTE2OSBjdCAKKzQyNCAtMTY5IDQxOCAtMTcxIDQxNCAtMTc2IGN0IDQwOSAtMTgxIDQwNyAtMTg4IDQwNyAtMTk2IGN0IDQwNyAtMjEyIDQxNSAtMjI3IDQzMSAtMjQwIGN0IAorNDQ3IC0yNTMgNDcwIC0yNjAgNDk5IC0yNjAgY3QgNTIxIC0yNjAgNTQwIC0yNTYgNTU0IC0yNDkgY3QgNTY1IC0yNDMgNTczIC0yMzQgNTc4IC0yMjIgY3QgCis1ODEgLTIxNCA1ODMgLTE5OCA1ODMgLTE3NCBjdCA1ODMgLTE3NCA1ODMgLTE3NCA1ODMgLTg5IGN0IDU4MyAtNjUgNTgzIC01MCA1ODQgLTQ1IGN0IAorNTg1IC0zOSA1ODcgLTM2IDU4OSAtMzQgY3QgNTkxIC0zMiA1OTMgLTMxIDU5NiAtMzEgY3QgNTk5IC0zMSA2MDIgLTMyIDYwNCAtMzMgY3QgCis2MDggLTM1IDYxNSAtNDIgNjI2IC01MyBjdCA2MjYgLTUzIDYyNiAtNTMgNjI2IC0zOCBjdCA2MDYgLTEwIDU4NiA0IDU2OCA0IGN0IDU1OSA0IDU1MSAxIDU0NiAtNSBjdCAKKzU0MSAtMTEgNTM4IC0yMiA1MzggLTM3IGN0IHAKKzUzOCAtNTQgbSAgNTM4IC01NCA1MzggLTU0IDUzOCAtMTQ5IGN0IDUxMCAtMTM4IDQ5MiAtMTMwIDQ4NCAtMTI2IGN0IDQ2OSAtMTE4IDQ1OSAtMTEwIDQ1MiAtMTAxIGN0IAorNDQ2IC05MiA0NDMgLTgzIDQ0MyAtNzIgY3QgNDQzIC01OSA0NDcgLTQ5IDQ1NSAtNDAgY3QgNDYzIC0zMSA0NzIgLTI3IDQ4MiAtMjcgY3QgCis0OTcgLTI3IDUxNSAtMzYgNTM4IC01NCBjdCBwIGVmCis3MjAgLTIwNiBtICA3MzggLTIyNSA3NDkgLTIzNSA3NTIgLTIzOCBjdCA3NjEgLTI0NSA3NjkgLTI1MCA3NzkgLTI1NCBjdCA3ODkgLTI1OCA3OTggLTI2MCA4MDcgLTI2MCBjdCAKKzgyMyAtMjYwIDgzNyAtMjU1IDg0OCAtMjQ2IGN0IDg1OSAtMjM3IDg2NyAtMjI0IDg3MSAtMjA2IGN0IDg5MCAtMjI4IDkwNiAtMjQzIDkxOSAtMjUwIGN0IAorOTMyIC0yNTcgOTQ1IC0yNjAgOTU5IC0yNjAgY3QgOTcyIC0yNjAgOTg0IC0yNTcgOTk0IC0yNTAgY3QgMTAwNSAtMjQzIDEwMTMgLTIzMiAxMDE5IC0yMTYgY3QgCisxMDIzIC0yMDUgMTAyNSAtMTg4IDEwMjUgLTE2NiBjdCAxMDI1IC0xNjYgMTAyNSAtMTY2IDEwMjUgLTU3IGN0IDEwMjUgLTQxIDEwMjYgLTMwIDEwMjggLTI1IGN0IAorMTAzMCAtMjEgMTAzNCAtMTcgMTAzOCAtMTQgY3QgMTA0MyAtMTEgMTA1MSAtMTAgMTA2MiAtMTAgY3QgMTA2MiAtMTAgMTA2MiAtMTAgMTA2MiAwIGN0IAorMTA2MiAwIDEwNjIgMCA5MzggMCBjdCA5MzggMCA5MzggMCA5MzggLTEwIGN0IDkzOCAtMTAgOTM4IC0xMCA5NDMgLTEwIGN0IDk1NCAtMTAgOTYzIC0xMiA5NjkgLTE2IGN0IAorOTczIC0xOSA5NzYgLTI0IDk3OCAtMzAgY3QgOTc5IC0zMyA5NzkgLTQyIDk3OSAtNTcgY3QgOTc5IC01NyA5NzkgLTU3IDk3OSAtMTY2IGN0IAorOTc5IC0xODYgOTc3IC0yMDEgOTcyIC0yMDkgY3QgOTY0IC0yMjEgOTUzIC0yMjcgOTM3IC0yMjcgY3QgOTI4IC0yMjcgOTE4IC0yMjUgOTA4IC0yMjAgY3QgCis4OTggLTIxNSA4ODYgLTIwNiA4NzMgLTE5MyBjdCA4NzMgLTE5MyA4NzMgLTE5MyA4NzIgLTE4OSBjdCA4NzIgLTE4OSA4NzIgLTE4OSA4NzMgLTE3OCBjdCAKKzg3MyAtMTc4IDg3MyAtMTc4IDg3MyAtNTcgY3QgODczIC00MCA4NzQgLTI5IDg3NiAtMjUgY3QgODc4IC0yMSA4ODEgLTE3IDg4NyAtMTQgY3QgCis4OTIgLTExIDkwMSAtMTAgOTE0IC0xMCBjdCA5MTQgLTEwIDkxNCAtMTAgOTE0IDAgY3QgOTE0IDAgOTE0IDAgNzg2IDAgY3QgNzg2IDAgNzg2IDAgNzg2IC0xMCBjdCAKKzgwMCAtMTAgODEwIC0xMiA4MTUgLTE1IGN0IDgyMCAtMTggODI0IC0yMyA4MjYgLTMwIGN0IDgyNyAtMzMgODI3IC00MiA4MjcgLTU3IGN0IAorODI3IC01NyA4MjcgLTU3IDgyNyAtMTY2IGN0IDgyNyAtMTg2IDgyNCAtMjAxIDgxOCAtMjEwIGN0IDgxMCAtMjIxIDc5OSAtMjI3IDc4NCAtMjI3IGN0IAorNzc0IC0yMjcgNzY1IC0yMjQgNzU1IC0yMTkgY3QgNzQwIC0yMTEgNzI4IC0yMDIgNzIwIC0xOTMgY3QgNzIwIC0xOTMgNzIwIC0xOTMgNzIwIC01NyBjdCAKKzcyMCAtNDEgNzIxIC0zMCA3MjMgLTI1IGN0IDcyNiAtMjAgNzI5IC0xNiA3MzQgLTE0IGN0IDczOCAtMTEgNzQ3IC0xMCA3NjEgLTEwIGN0IAorNzYxIC0xMCA3NjEgLTEwIDc2MSAwIGN0IDc2MSAwIDc2MSAwIDYzNyAwIGN0IDYzNyAwIDYzNyAwIDYzNyAtMTAgY3QgNjQ4IC0xMCA2NTYgLTExIDY2MCAtMTQgY3QgCis2NjUgLTE2IDY2OCAtMjAgNjcxIC0yNiBjdCA2NzMgLTMxIDY3NCAtNDEgNjc0IC01NyBjdCA2NzQgLTU3IDY3NCAtNTcgNjc0IC0xNTQgY3QgCis2NzQgLTE4MiA2NzMgLTE5OSA2NzIgLTIwNyBjdCA2NzAgLTIxMyA2NjggLTIxNyA2NjYgLTIyMCBjdCA2NjMgLTIyMiA2NTkgLTIyMyA2NTQgLTIyMyBjdCAKKzY0OSAtMjIzIDY0MyAtMjIyIDYzNiAtMjE5IGN0IDYzNiAtMjE5IDYzNiAtMjE5IDYzMiAtMjI5IGN0IDYzMiAtMjI5IDYzMiAtMjI5IDcwOCAtMjYwIGN0IAorNzA4IC0yNjAgNzA4IC0yNjAgNzIwIC0yNjAgY3QgNzIwIC0yNjAgNzIwIC0yNjAgNzIwIC0yMDYgY3QgcCBlZgorMTExNCAtMTU4IG0gIDExMTQgLTEyMSAxMTIzIC05MiAxMTQxIC03MSBjdCAxMTU5IC01MCAxMTgwIC0zOSAxMjA1IC0zOSBjdCAxMjIxIC0zOSAxMjM2IC00MyAxMjQ4IC01MiBjdCAKKzEyNjAgLTYxIDEyNzAgLTc3IDEyNzggLTk5IGN0IDEyNzggLTk5IDEyNzggLTk5IDEyODcgLTk0IGN0IDEyODMgLTY4IDEyNzIgLTQ1IDEyNTMgLTI0IGN0IAorMTIzNSAtMyAxMjEyIDcgMTE4NCA3IGN0IDExNTQgNyAxMTI4IC01IDExMDYgLTI4IGN0IDEwODUgLTUyIDEwNzQgLTgzIDEwNzQgLTEyMyBjdCAKKzEwNzQgLTE2NiAxMDg1IC0yMDAgMTEwNyAtMjI0IGN0IDExMjkgLTI0OCAxMTU3IC0yNjAgMTE5MCAtMjYwIGN0IDEyMTggLTI2MCAxMjQyIC0yNTEgMTI2MCAtMjMyIGN0IAorMTI3OCAtMjE0IDEyODcgLTE4OSAxMjg3IC0xNTggY3QgMTI4NyAtMTU4IDEyODcgLTE1OCAxMTE0IC0xNTggY3QgcAorMTExNCAtMTc0IG0gIDExMTQgLTE3NCAxMTE0IC0xNzQgMTIzMCAtMTc0IGN0IDEyMjkgLTE5MCAxMjI3IC0yMDEgMTIyNCAtMjA4IGN0IAorMTIyMCAtMjE4IDEyMTMgLTIyNiAxMjA0IC0yMzEgY3QgMTE5NSAtMjM3IDExODUgLTI0MCAxMTc2IC0yNDAgY3QgMTE2MCAtMjQwIDExNDcgLTIzNCAxMTM1IC0yMjMgY3QgCisxMTIzIC0yMTEgMTExNiAtMTk1IDExMTQgLTE3NCBjdCBwIGVmCitwb20KK2dyCitncgorMzEwMCA2MjUwIG0gIDI1MzggNjQzOCBsICAyNTM4IDYwNjMgbCAgMzEwMCA2MjUwIGwgIHAgZWYKKzE5NzUgNDUwMCBtICAxOTc1IDYyNTAgbCAgMTk1MCA2MjUwIGwgIDE5MjUgNjI1MCBsICAxOTI1IDQ1MDAgbCAgMTk1MCA0NTAwIGwgCisxOTc1IDQ1MDAgbCAgcCBlZgorMTk1MCA2MjUwIG0gIDE5NTAgNjI3NSBsICAxOTQ2IDYyNzUgbCAgMTk0MSA2MjczIGwgIDE5MzggNjI3MiBsICAxOTM0IDYyNjkgbCAKKzE5MzEgNjI2NiBsICAxOTI4IDYyNjMgbCAgMTkyNyA2MjU5IGwgIDE5MjUgNjI1NCBsICAxOTI1IDYyNTAgbCAgMTkyNSA2MjUwIGwgCisxOTUwIDYyNTAgbCAgcCBlZgorMTk1MCA2MjI1IG0gIDI2NTAgNjIyNSBsICAyNjUwIDYyNTAgbCAgMjY1MCA2Mjc1IGwgIDE5NTAgNjI3NSBsICAxOTUwIDYyNTAgbCAKKzE5NTAgNjIyNSBsICBwIGVmCitncworNDYzNSA3NjgxIG0gNjI0OCA3NjgxIGwgNjI0OCA5MjA2IGwgNDYzNSA5MjA2IGwgNDYzNSA3NjgxIGwgZW9jbGlwIG5ld3BhdGgKK2dzCit0bSBzZXRtYXRyaXgKKzM5NDIgNDY4MyB0IAorMSAxIHMgCitncworZ3MKKzAgMCBtIDE2MTMgMCBsIDE2MTMgMTUyNSBsIDAgMTUyNSBsIDAgMCBsIGVvY2xpcCBuZXdwYXRoCitncworcHVtCis2NjEgNTU2IHQKKzc0IC0zNzkgbSAgNzQgLTM3OSA3NCAtMzc5IDE3NiAtNDI5IGN0IDE3NiAtNDI5IDE3NiAtNDI5IDE4NiAtNDI5IGN0IDE4NiAtNDI5IDE4NiAtNDI5IDE4NiAtNzQgY3QgCisxODYgLTUwIDE4NyAtMzYgMTg5IC0zMCBjdCAxOTEgLTI0IDE5NSAtMTkgMjAxIC0xNiBjdCAyMDcgLTEzIDIyMCAtMTEgMjM5IC0xMSBjdCAKKzIzOSAtMTEgMjM5IC0xMSAyMzkgMCBjdCAyMzkgMCAyMzkgMCA4MiAwIGN0IDgyIDAgODIgMCA4MiAtMTEgY3QgMTAxIC0xMSAxMTQgLTEzIDEyMCAtMTYgY3QgCisxMjUgLTE5IDEyOSAtMjMgMTMyIC0yOCBjdCAxMzQgLTMzIDEzNSAtNDkgMTM1IC03NCBjdCAxMzUgLTc0IDEzNSAtNzQgMTM1IC0zMDEgY3QgCisxMzUgLTMzMSAxMzQgLTM1MSAxMzIgLTM1OSBjdCAxMzAgLTM2NiAxMjggLTM3MSAxMjQgLTM3NCBjdCAxMjAgLTM3NyAxMTYgLTM3OSAxMTAgLTM3OSBjdCAKKzEwMyAtMzc5IDkyIC0zNzUgNzkgLTM2OSBjdCA3OSAtMzY5IDc5IC0zNjkgNzQgLTM3OSBjdCBwIGVmCitwb20KK2dyCitncworMTMyIDc0MSBtICAxMzUwIDAgcmwgMCAzMSBybCAxMzUwIG5lZyAwIHJsIGVmIHAgZWYKKworZ3IKK2dzCitwdW0KKzIzOCAxMzc2IHQKKzMyOCAtNDMwIG0gIDMyOCAtNDMwIDMyOCAtNDMwIDI5NiAtODAgY3QgMjk0IC02NCAyOTQgLTUzIDI5NCAtNDggY3QgMjk0IC00MCAyOTUgLTMzIDI5OCAtMjkgY3QgCiszMDIgLTIzIDMwNyAtMTggMzE0IC0xNSBjdCAzMjEgLTEyIDMzMiAtMTEgMzQ4IC0xMSBjdCAzNDggLTExIDM0OCAtMTEgMzQ1IDAgY3QgCiszNDUgMCAzNDUgMCAxODAgMCBjdCAxODAgMCAxODAgMCAxODQgLTExIGN0IDE4NCAtMTEgMTg0IC0xMSAxOTEgLTExIGN0IDIwNCAtMTEgMjE1IC0xNCAyMjQgLTIwIGN0IAorMjMwIC0yNCAyMzQgLTMwIDIzOCAtMzkgY3QgMjQwIC00NiAyNDIgLTYxIDI0NCAtODUgY3QgMjQ0IC04NSAyNDQgLTg1IDI0OSAtMTM4IGN0IAorMjQ5IC0xMzggMjQ5IC0xMzggMTI4IC0xMzggY3QgMTI4IC0xMzggMTI4IC0xMzggODYgLTgwIGN0IDc2IC02NyA3MCAtNTcgNjcgLTUyIGN0IAorNjUgLTQ2IDY0IC00MSA2NCAtMzYgY3QgNjQgLTI5IDY2IC0yNCA3MiAtMTkgY3QgNzcgLTE0IDg2IC0xMSA5OCAtMTEgY3QgOTggLTExIDk4IC0xMSA5NSAwIGN0IAorOTUgMCA5NSAwIC0zMCAwIGN0IC0zMCAwIC0zMCAwIC0yNyAtMTEgY3QgLTEyIC0xMiAyIC0xNyAxNCAtMjYgY3QgMjUgLTM2IDQzIC01NyA2NiAtODggY3QgCis2NiAtODggNjYgLTg4IDMxNyAtNDMwIGN0IDMxNyAtNDMwIDMxNyAtNDMwIDMyOCAtNDMwIGN0IHAKKzI2OCAtMzI3IG0gIDE0NCAtMTU5IGwgIDI1MSAtMTU5IGwgIDI2OCAtMzI3IGwgIHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzY2MSAxMzc2IHQKKzE2OCAxMzEgbSAgMTI3IDk4IDk2IDUwIDc1IC0xMiBjdCA1NiAtNjYgNDcgLTEyMyA0NyAtMTgzIGN0IDQ3IC0yNDEgNTYgLTI5OCA3NSAtMzU0IGN0IAorOTggLTQxOSAxMjggLTQ2NyAxNjggLTQ5NyBjdCAxNjggLTQ5NyAxNjggLTQ5NyAxNjggLTQ4MSBjdCAxMzkgLTQ1NCAxMTYgLTQwOCAxMDEgLTM0MiBjdCAKKzg5IC0yOTAgODMgLTIzNyA4MyAtMTgzIGN0IDgzIC0xMjkgODkgLTc2IDEwMSAtMjQgY3QgMTE2IDQzIDEzOSA4OSAxNjggMTE2IGN0IDE2OCAxMTYgMTY4IDExNiAxNjggMTMxIGN0IAorcCBlZgorcG9tCitncgorZ3MKK3B1bQorOTUzIDEzNzYgdAorNTQgLTI3MyBtICA1NCAtMjczIDU0IC0yNzMgMjQ5IC0yNzMgY3QgMjQ5IC0yNzMgMjQ5IC0yNzMgMjQ5IC0yNjUgY3QgMjQ5IC0yNjUgMjQ5IC0yNjUgMzUgLTQyIGN0IAorMzUgLTQyIDM1IC00MiAxMjUgLTQyIGN0IDE0NyAtNDIgMTYxIC00MyAxNjYgLTQ0IGN0IDE3MiAtNDYgMTc4IC01MCAxODMgLTU1IGN0IAorMTg3IC02MCAxOTMgLTcwIDE5OSAtODQgY3QgMTk5IC04NCAxOTkgLTg0IDIxMCAtODQgY3QgMjEwIC04NCAyMTAgLTg0IDE4MyAwIGN0IAorMTgzIDAgMTgzIDAgLTE4IDAgY3QgLTE4IDAgLTE4IDAgLTE4IC05IGN0IC0xOCAtOSAtMTggLTkgMTk2IC0yMzIgY3QgMTk2IC0yMzIgMTk2IC0yMzIgMTA5IC0yMzIgY3QgCis5MCAtMjMyIDc4IC0yMzIgNzQgLTIzMSBjdCA2OCAtMjI5IDYzIC0yMjYgNTcgLTIyMSBjdCA1MSAtMjE2IDQ1IC0yMDggMzkgLTE5NiBjdCAKKzM5IC0xOTYgMzkgLTE5NiAyOCAtMTk2IGN0IDI4IC0xOTYgMjggLTE5NiA1NCAtMjczIGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzEyNzAgMTM3NiB0CiszMyAxMTYgbSAgNjEgOTAgODIgNDYgOTcgLTE4IGN0IDExMCAtNzAgMTE3IC0xMjAgMTE3IC0xNzAgY3QgMTE3IC0yMjkgMTExIC0yODQgMTAwIC0zMzUgY3QgCis4NiAtNDA0IDYzIC00NTMgMzMgLTQ4MSBjdCAzMyAtNDgxIDMzIC00ODEgMzMgLTQ5NyBjdCA3MiAtNDY4IDEwMyAtNDIxIDEyNSAtMzU0IGN0IAorMTQzIC0yOTkgMTUzIC0yNDEgMTUzIC0xODMgY3QgMTUzIC0xMjMgMTQ0IC02NiAxMjUgLTExIGN0IDEwMyA1NCA3MiAxMDIgMzMgMTMxIGN0IAorMzMgMTMxIDMzIDEzMSAzMyAxMTYgY3QgcCBlZgorcG9tCitncgorZ3IKK2dyCitncgorZ3IKKzU0MDAgOTMwMCBtICA0NDAwIDkzMDAgbCAgNDQwMCA3NTAwIGwgIDY0MDAgNzUwMCBsICA2NDAwIDkzMDAgbCAgNTQwMCA5MzAwIGwgCitwYworNzcwMCA3MDAwIG0gIDY4MDAgNzAwMCBsICA2ODAwIDU1MDAgbCAgODYwMCA1NTAwIGwgIDg2MDAgNzAwMCBsICA3NzAwIDcwMDAgbCAKK3BjCitncworZ3MKK3B1bQorNzEwMiA2NDYwIHQKKzQ3IDAgbSAgNDcgLTQ1NSBsICAxMDcgLTQ1NSBsICAxMDcgLTU0IGwgIDMzMCAtNTQgbCAgMzMwIDAgbCAgNDcgMCBsICBwIGVmCiszODAgLTE0NiBtICAzODAgLTE0NiAzODAgLTE0NiA0MzcgLTE1MSBjdCA0NDAgLTEyOCA0NDYgLTExMCA0NTYgLTk1IGN0IDQ2NSAtODAgNDgxIC02OSA1MDEgLTYwIGN0IAorNTIyIC01MSA1NDUgLTQ2IDU3MSAtNDYgY3QgNTkzIC00NiA2MTQgLTQ5IDYzMSAtNTYgY3QgNjQ5IC02MyA2NjIgLTcyIDY3MCAtODQgY3QgCis2NzkgLTk2IDY4MyAtMTA5IDY4MyAtMTIzIGN0IDY4MyAtMTM4IDY3OSAtMTUwIDY3MCAtMTYxIGN0IDY2MiAtMTcxIDY0OCAtMTgwIDYyOSAtMTg3IGN0IAorNjE3IC0xOTIgNTkwIC0yMDAgNTQ5IC0yMTAgY3QgNTA3IC0yMjAgNDc4IC0yMjkgNDYxIC0yMzggY3QgNDQwIC0yNDkgNDI0IC0yNjQgNDEzIC0yODAgY3QgCis0MDIgLTI5NyAzOTcgLTMxNiAzOTcgLTMzNyBjdCAzOTcgLTM2MCA0MDQgLTM4MiA0MTYgLTQwMiBjdCA0MjkgLTQyMiA0NDggLTQzNyA0NzMgLTQ0NyBjdCAKKzQ5OCAtNDU4IDUyNiAtNDYzIDU1NyAtNDYzIGN0IDU5MCAtNDYzIDYyMCAtNDU4IDY0NiAtNDQ3IGN0IDY3MSAtNDM2IDY5MSAtNDIwIDcwNSAtMzk5IGN0IAorNzE5IC0zNzggNzI2IC0zNTQgNzI3IC0zMjcgY3QgNzI3IC0zMjcgNzI3IC0zMjcgNjY5IC0zMjMgY3QgNjY2IC0zNTEgNjU2IC0zNzMgNjM4IC0zODcgY3QgCis2MjAgLTQwMiA1OTQgLTQwOSA1NTkgLTQwOSBjdCA1MjMgLTQwOSA0OTYgLTQwMiA0ODAgLTM4OSBjdCA0NjMgLTM3NiA0NTUgLTM2MCA0NTUgLTM0MSBjdCAKKzQ1NSAtMzI0IDQ2MSAtMzExIDQ3MyAtMzAwIGN0IDQ4NCAtMjkwIDUxNCAtMjc5IDU2MyAtMjY4IGN0IDYxMSAtMjU3IDY0NSAtMjQ3IDY2MyAtMjM5IGN0IAorNjkwIC0yMjcgNzA5IC0yMTEgNzIyIC0xOTMgY3QgNzM1IC0xNzQgNzQxIC0xNTMgNzQxIC0xMjggY3QgNzQxIC0xMDQgNzM0IC04MSA3MjAgLTYwIGN0IAorNzA2IC0zOCA2ODcgLTIyIDY2MSAtMTAgY3QgNjM1IDIgNjA2IDggNTczIDggY3QgNTMyIDggNDk4IDIgNDcwIC0xMCBjdCA0NDIgLTIyIDQyMSAtNDAgNDA1IC02NCBjdCAKKzM4OSAtODggMzgxIC0xMTYgMzgwIC0xNDYgY3QgcCBlZgorODI0IDAgbSAgODI0IDAgODI0IDAgODI0IC00NTUgY3QgODI0IC00NTUgODI0IC00NTUgOTk1IC00NTUgY3QgMTAyNiAtNDU1IDEwNDkgLTQ1NCAxMDY1IC00NTEgY3QgCisxMDg3IC00NDcgMTEwNiAtNDQwIDExMjEgLTQyOSBjdCAxMTM2IC00MTkgMTE0OCAtNDA0IDExNTcgLTM4NSBjdCAxMTY2IC0zNjcgMTE3MSAtMzQ2IDExNzEgLTMyMyBjdCAKKzExNzEgLTI4NSAxMTU5IC0yNTIgMTEzNCAtMjI1IGN0IDExMDkgLTE5OCAxMDY1IC0xODUgMTAwMSAtMTg1IGN0IDEwMDEgLTE4NSAxMDAxIC0xODUgODg0IC0xODUgY3QgCis4ODQgLTE4NSA4ODQgLTE4NSA4ODQgMCBjdCA4ODQgMCA4ODQgMCA4MjQgMCBjdCBwCis4ODQgLTIzOSBtICA4ODQgLTIzOSA4ODQgLTIzOSAxMDAyIC0yMzkgY3QgMTA0MSAtMjM5IDEwNjggLTI0NiAxMDg0IC0yNjEgY3QgCisxMTAxIC0yNzUgMTEwOSAtMjk1IDExMDkgLTMyMiBjdCAxMTA5IC0zNDEgMTEwNCAtMzU3IDEwOTUgLTM3MCBjdCAxMDg1IC0zODQgMTA3MiAtMzkzIDEwNTcgLTM5NyBjdCAKKzEwNDYgLTQwMCAxMDI4IC00MDEgMTAwMCAtNDAxIGN0IDEwMDAgLTQwMSAxMDAwIC00MDEgODg0IC00MDEgY3QgODg0IC00MDEgODg0IC00MDEgODg0IC0yMzkgY3QgCitwIGVmCitwb20KK2dyCitncgorNjgwMCA2MjUwIG0gIDYyMzggNjQzOCBsICA2MjM4IDYwNjMgbCAgNjgwMCA2MjUwIGwgIHAgZWYKKzQ3MDAgNjIyNSBtICA2MzUwIDYyMjUgbCAgNjM1MCA2Mjc1IGwgIDQ3MDAgNjI3NSBsICA0NzAwIDYyMjUgbCAgcCBlZgorNDQwMCA4NDAwIG0gIDM5ODggODUzOCBsICAzOTg4IDgyNjMgbCAgNDQwMCA4NDAwIGwgIHAgZWYKKzQwNzAgODQyNSBtICAxOTUwIDg0MjUgbCAgMTk1MCA4NDAwIGwgIDE5NTAgODM3NSBsICA0MDcwIDgzNzUgbCAgNDA3MCA4NDAwIGwgCis0MDcwIDg0MjUgbCAgcCBlZgorMTk1MCA4NDAwIG0gIDE5NTAgODQyNSBsICAxOTQ2IDg0MjUgbCAgMTk0MSA4NDIzIGwgIDE5MzggODQyMiBsICAxOTM0IDg0MTkgbCAKKzE5MzEgODQxNiBsICAxOTI4IDg0MTMgbCAgMTkyNyA4NDA5IGwgIDE5MjUgODQwNCBsICAxOTI1IDg0MDAgbCAgMTkyNSA4NDAwIGwgCisxOTUwIDg0MDAgbCAgcCBlZgorMTkyNSA4NDAwIG0gIDE5MjUgNDUwMCBsICAxOTUwIDQ1MDAgbCAgMTk3NSA0NTAwIGwgIDE5NzUgODQwMCBsICAxOTUwIDg0MDAgbCAKKzE5MjUgODQwMCBsICBwIGVmCisxOTUwIDQ1MDAgbSAgMTk1MCA0NTAwIGwgIDE5NTAgNDUwMCBsICAxOTUwIDQ1MDAgbCAgMTk1MCA0NTAwIGwgIDE5NTAgNDUwMCBsIAorMTk1MCA0NTAwIGwgIHAgZWYKKzU0MDAgNzUwMCBtICA1MjEzIDY5MzggbCAgNTU4OCA2OTM4IGwgIDU0MDAgNzUwMCBsICBwIGVmCis0NzAwIDYyMjUgbSAgNTQwMCA2MjI1IGwgIDU0MDAgNjI1MCBsICA1NDAwIDYyNzUgbCAgNDcwMCA2Mjc1IGwgIDQ3MDAgNjI1MCBsIAorNDcwMCA2MjI1IGwgIHAgZWYKKzU0MDAgNjI1MCBtICA1NDAwIDYyMjUgbCAgNTQwNCA2MjI1IGwgIDU0MDkgNjIyNyBsICA1NDEyIDYyMjggbCAgNTQxNiA2MjMxIGwgCis1NDE5IDYyMzQgbCAgNTQyMiA2MjM3IGwgIDU0MjMgNjI0MSBsICA1NDI1IDYyNDYgbCAgNTQyNSA2MjUwIGwgIDU0MjUgNjI1MCBsIAorNTQwMCA2MjUwIGwgIHAgZWYKKzU0MjUgNjI1MCBtICA1NDI1IDcwNTAgbCAgNTQwMCA3MDUwIGwgIDUzNzUgNzA1MCBsICA1Mzc1IDYyNTAgbCAgNTQwMCA2MjUwIGwgCis1NDI1IDYyNTAgbCAgcCBlZgorMTA2MDAgNzAwMCBtICA5NzAwIDcwMDAgbCAgOTcwMCA1NTAwIGwgIDExNTAwIDU1MDAgbCAgMTE1MDAgNzAwMCBsICAxMDYwMCA3MDAwIGwgCitwYworZ3MKK2dzCitwdW0KKzEwMTUzIDY0NjAgdAorMTc4IDAgbSAgMTc4IDAgMTc4IDAgMiAtNDU1IGN0IDIgLTQ1NSAyIC00NTUgNjcgLTQ1NSBjdCA2NyAtNDU1IDY3IC00NTUgMTg2IC0xMjQgY3QgCisxOTUgLTk4IDIwMyAtNzMgMjEwIC01MCBjdCAyMTcgLTc0IDIyNSAtOTkgMjM0IC0xMjQgY3QgMjM0IC0xMjQgMjM0IC0xMjQgMzU3IC00NTUgY3QgCiszNTcgLTQ1NSAzNTcgLTQ1NSA0MTkgLTQ1NSBjdCA0MTkgLTQ1NSA0MTkgLTQ1NSAyNDEgMCBjdCAyNDEgMCAyNDEgMCAxNzggMCBjdCBwIGVmCis4MTcgLTQ4IG0gIDg0NSAtMjkgODcwIC0xNSA4OTQgLTYgY3QgODk0IC02IDg5NCAtNiA4NzYgMzYgY3QgODQzIDI0IDgxMSA1IDc3OCAtMjEgY3QgCis3NDUgLTIgNzA3IDggNjY3IDggY3QgNjI1IDggNTg4IC0yIDU1NSAtMjIgY3QgNTIxIC00MiA0OTUgLTcwIDQ3NyAtMTA2IGN0IDQ1OSAtMTQyIDQ1MCAtMTgyIDQ1MCAtMjI3IGN0IAorNDUwIC0yNzIgNDU5IC0zMTMgNDc3IC0zNTAgY3QgNDk2IC0zODcgNTIxIC00MTUgNTU1IC00MzQgY3QgNTg5IC00NTMgNjI2IC00NjMgNjY4IC00NjMgY3QgCis3MTAgLTQ2MyA3NDggLTQ1MyA3ODEgLTQzMyBjdCA4MTUgLTQxMyA4NDEgLTM4NSA4NTggLTM0OSBjdCA4NzYgLTMxMyA4ODUgLTI3MyA4ODUgLTIyNyBjdCAKKzg4NSAtMTkwIDg3OSAtMTU2IDg2OCAtMTI2IGN0IDg1NyAtOTYgODM5IC03MCA4MTcgLTQ4IGN0IHAKKzY4NCAtMTI1IG0gIDcxOSAtMTE1IDc0NyAtMTAxIDc3MCAtODIgY3QgODA1IC0xMTQgODIzIC0xNjIgODIzIC0yMjcgY3QgODIzIC0yNjQgODE3IC0yOTYgODA0IC0zMjQgY3QgCis3OTIgLTM1MiA3NzMgLTM3MyA3NDkgLTM4OCBjdCA3MjUgLTQwMyA2OTggLTQxMSA2NjggLTQxMSBjdCA2MjMgLTQxMSA1ODYgLTM5NiA1NTYgLTM2NSBjdCAKKzUyNyAtMzM0IDUxMiAtMjg4IDUxMiAtMjI3IGN0IDUxMiAtMTY4IDUyNyAtMTIyIDU1NiAtOTEgY3QgNTg1IC01OSA2MjMgLTQzIDY2OCAtNDMgY3QgCis2OTAgLTQzIDcxMCAtNDcgNzI5IC01NSBjdCA3MTAgLTY3IDY5MCAtNzYgNjY5IC04MSBjdCA2NjkgLTgxIDY2OSAtODEgNjg0IC0xMjUgY3QgCitwIGVmCitwb20KK2dyCitncgorOTcwMCA2MjUwIG0gIDkxMzggNjQzOCBsICA5MTM4IDYwNjMgbCAgOTcwMCA2MjUwIGwgIHAgZWYKKzg2MDAgNjIyNSBtICA5MjUwIDYyMjUgbCAgOTI1MCA2Mjc1IGwgIDg2MDAgNjI3NSBsICA4NjAwIDYyMjUgbCAgcCBlZgorZ3MKKzgxMzUgNzkzMSBtIDk4MzAgNzkzMSBsIDk4MzAgODgwNiBsIDgxMzUgODgwNiBsIDgxMzUgNzkzMSBsIGVvY2xpcCBuZXdwYXRoCitncwordG0gc2V0bWF0cml4Cis3NDM1IDQ5MjEgdCAKKzEgMSBzIAorZ3MKK2dzCiswIDAgbSAxNjk1IDAgbCAxNjk1IDg3NSBsIDAgODc1IGwgMCAwIGwgZW9jbGlwIG5ld3BhdGgKK2dzCitwdW0KKzEwNiA3NDEgdAorNjUwIDkzIG0gIDY1MCA5MyA2NTAgOTMgNTYgOTMgY3QgNTYgOTMgNTYgOTMgNTYgNzYgY3QgNTYgNzYgNTYgNzYgMzU5IC0zMDEgY3QgMzU5IC0zMDEgMzU5IC0zMDEgNTYgLTY3MCBjdCAKKzU2IC02NzAgNTYgLTY3MCA1NiAtNjg3IGN0IDU2IC02ODcgNTYgLTY4NyA2MzQgLTY4NyBjdCA2MzQgLTY4NyA2MzQgLTY4NyA2NDYgLTUzNCBjdCAKKzY0NiAtNTM0IDY0NiAtNTM0IDYyNyAtNTM0IGN0IDYyMCAtNjExIDU4MiAtNjUwIDUxNiAtNjUwIGN0IDUxNiAtNjUwIDUxNiAtNjUwIDE4MSAtNjUwIGN0IAorMTgxIC02NTAgMTgxIC02NTAgNDM1IC0zMzkgY3QgNDM1IC0zMzkgNDM1IC0zMzkgMTUwIDEzIGN0IDE1MCAxMyAxNTAgMTMgNTIwIDEzIGN0IAorNTk1IDEzIDY0MiAtMjQgNjYxIC05OCBjdCA2NjEgLTk4IDY2MSAtOTggNjc5IC05NiBjdCA2NzkgLTk2IDY3OSAtOTYgNjUwIDkzIGN0IAorcCBlZgorcG9tCitncgorZ3MKK3B1bQorOTUzIDY2MSB0CisxNjggMTMxIG0gIDEyNyA5OCA5NiA1MCA3NSAtMTIgY3QgNTYgLTY2IDQ3IC0xMjMgNDcgLTE4MyBjdCA0NyAtMjQxIDU2IC0yOTggNzUgLTM1NCBjdCAKKzk4IC00MTkgMTI4IC00NjcgMTY4IC00OTcgY3QgMTY4IC00OTcgMTY4IC00OTcgMTY4IC00ODEgY3QgMTM5IC00NTQgMTE2IC00MDggMTAxIC0zNDIgY3QgCis4OSAtMjkwIDgzIC0yMzcgODMgLTE4MyBjdCA4MyAtMTI5IDg5IC03NiAxMDEgLTI0IGN0IDExNiA0MyAxMzkgODkgMTY4IDExNiBjdCAxNjggMTE2IDE2OCAxMTYgMTY4IDEzMSBjdCAKK3AgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzEyMTcgNjYxIHQKKzMzIDExNiBtICA2MSA5MCA4MiA0NiA5NyAtMTggY3QgMTEwIC03MCAxMTcgLTEyMCAxMTcgLTE3MCBjdCAxMTcgLTIyOSAxMTEgLTI4NCAxMDAgLTMzNSBjdCAKKzg2IC00MDQgNjMgLTQ1MyAzMyAtNDgxIGN0IDMzIC00ODEgMzMgLTQ4MSAzMyAtNDk3IGN0IDcyIC00NjggMTAzIC00MjEgMTI1IC0zNTQgY3QgCisxNDMgLTI5OSAxNTMgLTI0MSAxNTMgLTE4MyBjdCAxNTMgLTEyMyAxNDQgLTY2IDEyNSAtMTEgY3QgMTAzIDU0IDcyIDEwMiAzMyAxMzEgY3QgCiszMyAxMzEgMzMgMTMxIDMzIDExNiBjdCBwIGVmCitwb20KK2dyCitncworcHVtCisxNDAyIDM0NCB0CisxNzUgLTQ4IG0gIDE3NSAtNDggMTc1IC00OCAxNTcgMCBjdCAxNTcgMCAxNTcgMCA4IDAgY3QgOCAwIDggMCA4IC03IGN0IDUyIC00NyA4MyAtNzkgMTAxIC0xMDUgY3QgCisxMTkgLTEzMCAxMjggLTE1MyAxMjggLTE3NCBjdCAxMjggLTE5MCAxMjMgLTIwNCAxMTMgLTIxNCBjdCAxMDMgLTIyNSA5MSAtMjMwIDc4IC0yMzAgY3QgCis2NSAtMjMwIDU0IC0yMjYgNDQgLTIxOSBjdCAzNCAtMjEyIDI3IC0yMDIgMjIgLTE4OCBjdCAyMiAtMTg4IDIyIC0xODggMTUgLTE4OCBjdCAKKzE4IC0yMTEgMjYgLTIyOCAzOSAtMjQwIGN0IDUyIC0yNTIgNjggLTI1OCA4OCAtMjU4IGN0IDEwOCAtMjU4IDEyNSAtMjUxIDEzOSAtMjM4IGN0IAorMTUzIC0yMjUgMTYwIC0yMDkgMTYwIC0xOTEgY3QgMTYwIC0xNzkgMTU3IC0xNjYgMTUxIC0xNTMgY3QgMTQyIC0xMzMgMTI3IC0xMTIgMTA2IC04OSBjdCAKKzc1IC01NSA1NSAtMzUgNDggLTI4IGN0IDQ4IC0yOCA0OCAtMjggMTE0IC0yOCBjdCAxMjcgLTI4IDEzNyAtMjkgMTQyIC0yOSBjdCAxNDcgLTMwIDE1MiAtMzIgMTU3IC0zNiBjdCAKKzE2MSAtMzkgMTY1IC00MyAxNjggLTQ4IGN0IDE2OCAtNDggMTY4IC00OCAxNzUgLTQ4IGN0IHAgZWYKK3BvbQorZ3IKK2dyCitncgorZ3IKK2dyCis4OTUwIDkxMDAgbSAgNzkwMCA5MTAwIGwgIDc5MDAgNzcwMCBsICAxMDAwMCA3NzAwIGwgIDEwMDAwIDkxMDAgbCAgODk1MCA5MTAwIGwgCitwYworNzkwMCA4NDAwIG0gIDczMzggODU4OCBsICA3MzM4IDgyMTMgbCAgNzkwMCA4NDAwIGwgIHAgZWYKKzY0MDAgODM3NSBtICA3NDUwIDgzNzUgbCAgNzQ1MCA4NDI1IGwgIDY0MDAgODQyNSBsICA2NDAwIDgzNzUgbCAgcCBlZgorMTMzNTAgOTEwMCBtICAxMjMwMCA5MTAwIGwgIDEyMzAwIDc3MDAgbCAgMTQ0MDAgNzcwMCBsICAxNDQwMCA5MTAwIGwgIDEzMzUwIDkxMDAgbCAKK3BjCitncworZ3MKK3B1bQorMTIzOTUgODU4NCB0CisyNDIgLTI2MCBtICAyNDIgLTI2MCAyNDIgLTI2MCAyNDIgNjQgY3QgMjQyIDgxIDI0MyA5MSAyNDUgOTYgY3QgMjQ4IDEwMSAyNTEgMTA0IDI1NiAxMDcgY3QgCisyNjAgMTEwIDI2OSAxMTEgMjgzIDExMSBjdCAyODMgMTExIDI4MyAxMTEgMjgzIDEyMSBjdCAyODMgMTIxIDI4MyAxMjEgMTU2IDEyMSBjdCAKKzE1NiAxMjEgMTU2IDEyMSAxNTYgMTExIGN0IDE1NiAxMTEgMTU2IDExMSAxNjEgMTExIGN0IDE3MiAxMTEgMTc5IDEwOSAxODUgMTA2IGN0IAorMTg5IDEwNCAxOTEgMTAxIDE5NCA5NSBjdCAxOTYgOTAgMTk3IDc5IDE5NyA2NCBjdCAxOTcgNjQgMTk3IDY0IDE5NyAtNDUgY3QgMTgwIC0yNSAxNjYgLTExIDE1MyAtNCBjdCAKKzE0MSAzIDEyOCA3IDExNCA3IGN0IDkwIDcgNjggLTQgNDkgLTI2IGN0IDMwIC00OCAyMCAtNzggMjAgLTExNSBjdCAyMCAtMTU4IDMzIC0xOTMgNTggLTIyMCBjdCAKKzgzIC0yNDcgMTE0IC0yNjAgMTQ5IC0yNjAgY3QgMTYwIC0yNjAgMTcwIC0yNTkgMTc4IC0yNTYgY3QgMTg3IC0yNTMgMTk1IC0yNDggMjAyIC0yNDMgY3QgCisyMTMgLTI0OCAyMjMgLTI1MyAyMzMgLTI2MCBjdCAyMzMgLTI2MCAyMzMgLTI2MCAyNDIgLTI2MCBjdCBwCisxOTcgLTYyIG0gIDE5NyAtNjIgMTk3IC02MiAxOTcgLTE4MCBjdCAxOTcgLTE5NCAxOTUgLTIwNSAxOTIgLTIxMyBjdCAxODggLTIyMSAxODIgLTIyNyAxNzIgLTIzMyBjdCAKKzE2MyAtMjM4IDE1MyAtMjQxIDE0MSAtMjQxIGN0IDEyMSAtMjQxIDEwMyAtMjMyIDg4IC0yMTUgY3QgNzMgLTE5NyA2NiAtMTcxIDY2IC0xMzYgY3QgCis2NiAtMTAyIDc0IC03NiA4OSAtNTggY3QgMTA0IC00MSAxMjIgLTMyIDE0MyAtMzIgY3QgMTU0IC0zMiAxNjMgLTM0IDE3MiAtMzkgY3QgCisxODEgLTQ0IDE4OSAtNTEgMTk3IC02MiBjdCBwIGVmCis1MjMgLTI1MyBtICA1MjMgLTI1MyA1MjMgLTI1MyA1MjMgLTk5IGN0IDUyMyAtNzAgNTI0IC01MyA1MjUgLTQ3IGN0IDUyNiAtNDAgNTI5IC0zNiA1MzIgLTMzIGN0IAorNTM1IC0zMSA1MzggLTI5IDU0MiAtMjkgY3QgNTQ4IC0yOSA1NTQgLTMxIDU2MSAtMzQgY3QgNTYxIC0zNCA1NjEgLTM0IDU2NSAtMjQgY3QgCis1NjUgLTI0IDU2NSAtMjQgNDkwIDcgY3QgNDkwIDcgNDkwIDcgNDc4IDcgY3QgNDc4IDcgNDc4IDcgNDc4IC00NiBjdCA0NTYgLTIzIDQ0MCAtOCA0MjggLTIgY3QgCis0MTcgNCA0MDUgNyAzOTIgNyBjdCAzNzggNyAzNjUgMyAzNTUgLTUgY3QgMzQ0IC0xNCAzMzcgLTI0IDMzMyAtMzcgY3QgMzI5IC01MCAzMjcgLTY4IDMyNyAtOTIgY3QgCiszMjcgLTkyIDMyNyAtOTIgMzI3IC0yMDUgY3QgMzI3IC0yMTcgMzI2IC0yMjUgMzIzIC0yMjkgY3QgMzIxIC0yMzQgMzE3IC0yMzcgMzEyIC0yNDAgY3QgCiszMDcgLTI0MiAyOTcgLTI0MyAyODQgLTI0MyBjdCAyODQgLTI0MyAyODQgLTI0MyAyODQgLTI1MyBjdCAyODQgLTI1MyAyODQgLTI1MyAzNzMgLTI1MyBjdCAKKzM3MyAtMjUzIDM3MyAtMjUzIDM3MyAtODQgY3QgMzczIC02MCAzNzcgLTQ0IDM4NSAtMzcgY3QgMzk0IC0zMCA0MDMgLTI2IDQxNSAtMjYgY3QgCis0MjMgLTI2IDQzMiAtMjggNDQyIC0zMyBjdCA0NTIgLTM4IDQ2NCAtNDggNDc4IC02MiBjdCA0NzggLTYyIDQ3OCAtNjIgNDc4IC0yMDUgY3QgCis0NzggLTIyMCA0NzUgLTIzMCA0NzAgLTIzNSBjdCA0NjUgLTI0MCA0NTQgLTI0MyA0MzcgLTI0MyBjdCA0MzcgLTI0MyA0MzcgLTI0MyA0MzcgLTI1MyBjdCAKKzQzNyAtMjUzIDQzNyAtMjUzIDUyMyAtMjUzIGN0IHAgZWYKKzcyOCAtMzcgbSAgNzAyIC0xNyA2ODYgLTUgNjc5IC0yIGN0IDY2OSAzIDY1OSA1IDY0NyA1IGN0IDYzMCA1IDYxNSAtMSA2MDQgLTEzIGN0IAorNTkzIC0yNSA1ODcgLTQwIDU4NyAtNjAgY3QgNTg3IC03MiA1OTAgLTgzIDU5NSAtOTIgY3QgNjAzIC0xMDQgNjE2IC0xMTYgNjM1IC0xMjcgY3QgCis2NTMgLTEzOCA2ODUgLTE1MSA3MjggLTE2NyBjdCA3MjggLTE2NyA3MjggLTE2NyA3MjggLTE3NyBjdCA3MjggLTIwMiA3MjQgLTIxOSA3MTYgLTIyOCBjdCAKKzcwOCAtMjM3IDY5NyAtMjQyIDY4MSAtMjQyIGN0IDY3MCAtMjQyIDY2MSAtMjM5IDY1NCAtMjMzIGN0IDY0NyAtMjI2IDY0MyAtMjE5IDY0MyAtMjExIGN0IAorNjQzIC0yMTEgNjQzIC0yMTEgNjQ0IC0xOTUgY3QgNjQ0IC0xODcgNjQyIC0xODAgNjM3IC0xNzYgY3QgNjMzIC0xNzEgNjI3IC0xNjkgNjIwIC0xNjkgY3QgCis2MTQgLTE2OSA2MDggLTE3MSA2MDQgLTE3NiBjdCA1OTkgLTE4MSA1OTcgLTE4OCA1OTcgLTE5NiBjdCA1OTcgLTIxMiA2MDUgLTIyNyA2MjEgLTI0MCBjdCAKKzYzNyAtMjUzIDY2MCAtMjYwIDY4OSAtMjYwIGN0IDcxMSAtMjYwIDczMCAtMjU2IDc0NCAtMjQ5IGN0IDc1NSAtMjQzIDc2MyAtMjM0IDc2OCAtMjIyIGN0IAorNzcxIC0yMTQgNzczIC0xOTggNzczIC0xNzQgY3QgNzczIC0xNzQgNzczIC0xNzQgNzczIC04OSBjdCA3NzMgLTY1IDc3MyAtNTAgNzc0IC00NSBjdCAKKzc3NSAtMzkgNzc3IC0zNiA3NzkgLTM0IGN0IDc4MSAtMzIgNzgzIC0zMSA3ODYgLTMxIGN0IDc4OSAtMzEgNzkyIC0zMiA3OTQgLTMzIGN0IAorNzk4IC0zNSA4MDUgLTQyIDgxNiAtNTMgY3QgODE2IC01MyA4MTYgLTUzIDgxNiAtMzggY3QgNzk2IC0xMCA3NzYgNCA3NTggNCBjdCA3NDkgNCA3NDEgMSA3MzYgLTUgY3QgCis3MzEgLTExIDcyOCAtMjIgNzI4IC0zNyBjdCBwCis3MjggLTU0IG0gIDcyOCAtNTQgNzI4IC01NCA3MjggLTE0OSBjdCA3MDAgLTEzOCA2ODIgLTEzMCA2NzQgLTEyNiBjdCA2NTkgLTExOCA2NDkgLTExMCA2NDIgLTEwMSBjdCAKKzYzNiAtOTIgNjMzIC04MyA2MzMgLTcyIGN0IDYzMyAtNTkgNjM3IC00OSA2NDUgLTQwIGN0IDY1MyAtMzEgNjYyIC0yNyA2NzIgLTI3IGN0IAorNjg3IC0yNyA3MDUgLTM2IDcyOCAtNTQgY3QgcCBlZgorOTA5IC0yMDcgbSAgOTM4IC0yNDIgOTY2IC0yNjAgOTkzIC0yNjAgY3QgMTAwNyAtMjYwIDEwMTkgLTI1NyAxMDI4IC0yNTAgY3QgMTAzOCAtMjQzIDEwNDYgLTIzMSAxMDUyIC0yMTYgY3QgCisxMDU2IC0yMDUgMTA1OCAtMTg4IDEwNTggLTE2NSBjdCAxMDU4IC0xNjUgMTA1OCAtMTY1IDEwNTggLTU3IGN0IDEwNTggLTQxIDEwNTkgLTMwIDEwNjIgLTI1IGN0IAorMTA2NCAtMjAgMTA2NyAtMTYgMTA3MSAtMTQgY3QgMTA3NSAtMTEgMTA4MyAtMTAgMTA5NSAtMTAgY3QgMTA5NSAtMTAgMTA5NSAtMTAgMTA5NSAwIGN0IAorMTA5NSAwIDEwOTUgMCA5NzEgMCBjdCA5NzEgMCA5NzEgMCA5NzEgLTEwIGN0IDk3MSAtMTAgOTcxIC0xMCA5NzYgLTEwIGN0IDk4OCAtMTAgOTk2IC0xMiAxMDAxIC0xNSBjdCAKKzEwMDYgLTE5IDEwMDkgLTI0IDEwMTEgLTMxIGN0IDEwMTIgLTM0IDEwMTIgLTQzIDEwMTIgLTU3IGN0IDEwMTIgLTU3IDEwMTIgLTU3IDEwMTIgLTE2MSBjdCAKKzEwMTIgLTE4NCAxMDA5IC0yMDEgMTAwMyAtMjExIGN0IDk5NyAtMjIyIDk4NyAtMjI3IDk3MyAtMjI3IGN0IDk1MiAtMjI3IDkzMCAtMjE1IDkwOSAtMTkxIGN0IAorOTA5IC0xOTEgOTA5IC0xOTEgOTA5IC01NyBjdCA5MDkgLTQwIDkxMCAtMjkgOTEyIC0yNSBjdCA5MTUgLTIwIDkxOCAtMTYgOTIzIC0xNCBjdCAKKzkyNyAtMTEgOTM2IC0xMCA5NTAgLTEwIGN0IDk1MCAtMTAgOTUwIC0xMCA5NTAgMCBjdCA5NTAgMCA5NTAgMCA4MjYgMCBjdCA4MjYgMCA4MjYgMCA4MjYgLTEwIGN0IAorODI2IC0xMCA4MjYgLTEwIDgzMSAtMTAgY3QgODQ0IC0xMCA4NTIgLTEzIDg1NiAtMjAgY3QgODYxIC0yNiA4NjMgLTM5IDg2MyAtNTcgY3QgCis4NjMgLTU3IDg2MyAtNTcgODYzIC0xNTEgY3QgODYzIC0xODEgODYyIC0yMDAgODYxIC0yMDYgY3QgODYwIC0yMTMgODU4IC0yMTcgODU1IC0yMjAgY3QgCis4NTIgLTIyMiA4NDggLTIyMyA4NDMgLTIyMyBjdCA4MzggLTIyMyA4MzIgLTIyMiA4MjUgLTIxOSBjdCA4MjUgLTIxOSA4MjUgLTIxOSA4MjEgLTIyOSBjdCAKKzgyMSAtMjI5IDgyMSAtMjI5IDg5NyAtMjYwIGN0IDg5NyAtMjYwIDg5NyAtMjYwIDkwOSAtMjYwIGN0IDkwOSAtMjYwIDkwOSAtMjYwIDkwOSAtMjA3IGN0IAorcCBlZgorMTE5MiAtMzM3IG0gIDExOTIgLTMzNyAxMTkyIC0zMzcgMTE5MiAtMjUzIGN0IDExOTIgLTI1MyAxMTkyIC0yNTMgMTI1MSAtMjUzIGN0IAorMTI1MSAtMjUzIDEyNTEgLTI1MyAxMjUxIC0yMzQgY3QgMTI1MSAtMjM0IDEyNTEgLTIzNCAxMTkyIC0yMzQgY3QgMTE5MiAtMjM0IDExOTIgLTIzNCAxMTkyIC03MCBjdCAKKzExOTIgLTUzIDExOTQgLTQyIDExOTkgLTM3IGN0IDEyMDQgLTMxIDEyMTAgLTI4IDEyMTcgLTI4IGN0IDEyMjMgLTI4IDEyMjkgLTMwIDEyMzUgLTM0IGN0IAorMTI0MCAtMzcgMTI0NSAtNDMgMTI0OCAtNTAgY3QgMTI0OCAtNTAgMTI0OCAtNTAgMTI1OSAtNTAgY3QgMTI1MyAtMzIgMTI0MyAtMTkgMTIzMiAtMTAgY3QgCisxMjIwIC0xIDEyMDcgNCAxMTk1IDQgY3QgMTE4NiA0IDExNzggMiAxMTcwIC0zIGN0IDExNjIgLTggMTE1NiAtMTQgMTE1MiAtMjMgY3QgCisxMTQ4IC0zMiAxMTQ2IC00NSAxMTQ2IC02NCBjdCAxMTQ2IC02NCAxMTQ2IC02NCAxMTQ2IC0yMzQgY3QgMTE0NiAtMjM0IDExNDYgLTIzNCAxMTA2IC0yMzQgY3QgCisxMTA2IC0yMzQgMTEwNiAtMjM0IDExMDYgLTI0MyBjdCAxMTE2IC0yNDcgMTEyNiAtMjU0IDExMzcgLTI2NCBjdCAxMTQ4IC0yNzMgMTE1NyAtMjg1IDExNjUgLTI5OCBjdCAKKzExNzAgLTMwNSAxMTc1IC0zMTggMTE4MyAtMzM3IGN0IDExODMgLTMzNyAxMTgzIC0zMzcgMTE5MiAtMzM3IGN0IHAgZWYKKzEzMzkgLTM5MiBtICAxMzQ3IC0zOTIgMTM1MyAtMzg5IDEzNTkgLTM4NCBjdCAxMzY0IC0zNzggMTM2NyAtMzcyIDEzNjcgLTM2NCBjdCAKKzEzNjcgLTM1NiAxMzY0IC0zNTAgMTM1OSAtMzQ0IGN0IDEzNTMgLTMzOSAxMzQ3IC0zMzYgMTMzOSAtMzM2IGN0IDEzMzEgLTMzNiAxMzI1IC0zMzkgMTMxOSAtMzQ0IGN0IAorMTMxNCAtMzUwIDEzMTEgLTM1NiAxMzExIC0zNjQgY3QgMTMxMSAtMzcyIDEzMTQgLTM3OCAxMzE5IC0zODQgY3QgMTMyNSAtMzg5IDEzMzEgLTM5MiAxMzM5IC0zOTIgY3QgCitwCisxMzYyIC0yNjAgbSAgMTM2MiAtMjYwIDEzNjIgLTI2MCAxMzYyIC01NyBjdCAxMzYyIC00MSAxMzYzIC0zMSAxMzY1IC0yNiBjdCAxMzY4IC0yMCAxMzcxIC0xNiAxMzc1IC0xNCBjdCAKKzEzODAgLTExIDEzODcgLTEwIDEzOTkgLTEwIGN0IDEzOTkgLTEwIDEzOTkgLTEwIDEzOTkgMCBjdCAxMzk5IDAgMTM5OSAwIDEyNzkgMCBjdCAKKzEyNzkgMCAxMjc5IDAgMTI3OSAtMTAgY3QgMTI5MSAtMTAgMTI5OSAtMTEgMTMwMyAtMTQgY3QgMTMwNyAtMTYgMTMxMCAtMjAgMTMxMiAtMjUgY3QgCisxMzE1IC0zMSAxMzE2IC00MSAxMzE2IC01NyBjdCAxMzE2IC01NyAxMzE2IC01NyAxMzE2IC0xNTQgY3QgMTMxNiAtMTgxIDEzMTUgLTE5OSAxMzE0IC0yMDcgY3QgCisxMzEyIC0yMTMgMTMxMCAtMjE3IDEzMDggLTIyMCBjdCAxMzA1IC0yMjIgMTMwMSAtMjIzIDEyOTYgLTIyMyBjdCAxMjkxIC0yMjMgMTI4NSAtMjIyIDEyNzggLTIxOSBjdCAKKzEyNzggLTIxOSAxMjc4IC0yMTkgMTI3NCAtMjI5IGN0IDEyNzQgLTIyOSAxMjc0IC0yMjkgMTM1MCAtMjYwIGN0IDEzNTAgLTI2MCAxMzUwIC0yNjAgMTM2MiAtMjYwIGN0IAorcCBlZgorMTY1MSAtNzcgbSAgMTY1MSAtNzcgMTY1MSAtNzcgMTY0OCAwIGN0IDE2NDggMCAxNjQ4IDAgMTQyNSAwIGN0IDE0MjUgMCAxNDI1IDAgMTQyNSAtMTAgY3QgCisxNDI1IC0xMCAxNDI1IC0xMCAxNTk0IC0yMzQgY3QgMTU5NCAtMjM0IDE1OTQgLTIzNCAxNTA5IC0yMzQgY3QgMTQ5MSAtMjM0IDE0ODAgLTIzMyAxNDc0IC0yMzEgY3QgCisxNDY5IC0yMjggMTQ2NCAtMjI0IDE0NjEgLTIxNyBjdCAxNDU2IC0yMDggMTQ1MyAtMTk3IDE0NTIgLTE4MyBjdCAxNDUyIC0xODMgMTQ1MiAtMTgzIDE0NDIgLTE4MyBjdCAKKzE0NDIgLTE4MyAxNDQyIC0xODMgMTQ0MyAtMjUzIGN0IDE0NDMgLTI1MyAxNDQzIC0yNTMgMTY1NSAtMjUzIGN0IDE2NTUgLTI1MyAxNjU1IC0yNTMgMTY1NSAtMjQzIGN0IAorMTY1NSAtMjQzIDE2NTUgLTI0MyAxNDg2IC0xOCBjdCAxNDg2IC0xOCAxNDg2IC0xOCAxNTc4IC0xOCBjdCAxNTk3IC0xOCAxNjEwIC0yMCAxNjE3IC0yMyBjdCAKKzE2MjQgLTI2IDE2MjkgLTMyIDE2MzQgLTQwIGN0IDE2MzcgLTQ2IDE2MzkgLTU4IDE2NDEgLTc3IGN0IDE2NDEgLTc3IDE2NDEgLTc3IDE2NTEgLTc3IGN0IAorcCBlZgorMTcyNCAtMTU4IG0gIDE3MjQgLTEyMSAxNzMzIC05MiAxNzUxIC03MSBjdCAxNzY5IC01MCAxNzkwIC0zOSAxODE1IC0zOSBjdCAxODMxIC0zOSAxODQ2IC00MyAxODU4IC01MiBjdCAKKzE4NzAgLTYxIDE4ODAgLTc3IDE4ODggLTk5IGN0IDE4ODggLTk5IDE4ODggLTk5IDE4OTcgLTk0IGN0IDE4OTMgLTY4IDE4ODIgLTQ1IDE4NjMgLTI0IGN0IAorMTg0NSAtMyAxODIyIDcgMTc5NCA3IGN0IDE3NjQgNyAxNzM4IC01IDE3MTYgLTI4IGN0IDE2OTUgLTUyIDE2ODQgLTgzIDE2ODQgLTEyMyBjdCAKKzE2ODQgLTE2NiAxNjk1IC0yMDAgMTcxNyAtMjI0IGN0IDE3MzkgLTI0OCAxNzY3IC0yNjAgMTgwMCAtMjYwIGN0IDE4MjggLTI2MCAxODUyIC0yNTEgMTg3MCAtMjMyIGN0IAorMTg4OCAtMjE0IDE4OTcgLTE4OSAxODk3IC0xNTggY3QgMTg5NyAtMTU4IDE4OTcgLTE1OCAxNzI0IC0xNTggY3QgcAorMTcyNCAtMTc0IG0gIDE3MjQgLTE3NCAxNzI0IC0xNzQgMTg0MCAtMTc0IGN0IDE4MzkgLTE5MCAxODM3IC0yMDEgMTgzNCAtMjA4IGN0IAorMTgzMCAtMjE4IDE4MjMgLTIyNiAxODE0IC0yMzEgY3QgMTgwNSAtMjM3IDE3OTUgLTI0MCAxNzg2IC0yNDAgY3QgMTc3MCAtMjQwIDE3NTcgLTIzNCAxNzQ1IC0yMjMgY3QgCisxNzMzIC0yMTEgMTcyNiAtMTk1IDE3MjQgLTE3NCBjdCBwIGVmCitwb20KK2dyCitncgorMTIzMDAgODQwMCBtICAxMTczOCA4NTg4IGwgIDExNzM4IDgyMTMgbCAgMTIzMDAgODQwMCBsICBwIGVmCisxMDAwMCA4Mzc1IG0gIDExODUwIDgzNzUgbCAgMTE4NTAgODQyNSBsICAxMDAwMCA4NDI1IGwgIDEwMDAwIDgzNzUgbCAgcCBlZgorZ3MKKzEwMTAwIDc1MDAgbSAxMTY4OSA3NTAwIGwgMTE2ODkgODI5NSBsIDEwMTAwIDgyOTUgbCAxMDEwMCA3NTAwIGwgZW9jbGlwIG5ld3BhdGgKK2dzCit0bSBzZXRtYXRyaXgKKzkzOTMgNDQ5OCB0IAorMSAxIHMgCitncworZ3MKKzAgMCBtIDE1ODkgMCBsIDE1ODkgNzk1IGwgMCA3OTUgbCAwIDAgbCBlb2NsaXAgbmV3cGF0aAorZ3MKK3B1bQorMTU5IDU1NiB0CiszMzEgLTI2MSBtICAzMzEgLTI2MSAzMzEgLTI2MSAzMjIgLTIyOSBjdCAzMjIgLTIyOSAzMjIgLTIyOSAyNzAgLTIyOSBjdCAyNzQgLTIxOCAyNzYgLTIwNyAyNzYgLTE5OCBjdCAKKzI3NiAtMTcwIDI2NCAtMTQ2IDI0MSAtMTI0IGN0IDIxNyAtMTAzIDE4NSAtOTEgMTQ0IC04OSBjdCAxMjIgLTgyIDEwNiAtNzUgOTUgLTY1IGN0IAorOTEgLTYyIDg5IC01OSA4OSAtNTUgY3QgODkgLTUxIDkxIC00NyA5NSAtNDQgY3QgOTggLTQwIDEwOCAtMzcgMTIzIC0zMyBjdCAxMjMgLTMzIDEyMyAtMzMgMTgzIC0yMCBjdCAKKzIxNiAtMTIgMjM4IC0zIDI0OCA4IGN0IDI1OSAxOSAyNjQgMzEgMjY0IDQ2IGN0IDI2NCA2MyAyNTggNzggMjQ1IDkyIGN0IDIzMyAxMDYgMjE1IDExNyAxOTAgMTI1IGN0IAorMTY2IDEzMyAxNDAgMTM3IDExMSAxMzcgY3QgODUgMTM3IDYyIDEzNCA0MSAxMjggY3QgMjAgMTIyIDUgMTE0IC00IDEwMyBjdCAtMTMgOTMgLTE4IDgyIC0xOCA3MSBjdCAKKy0xOCA2MyAtMTUgNTMgLTkgNDQgY3QgLTMgMzQgNCAyNiAxMyAyMCBjdCAxOSAxNiAzNSA3IDYxIC04IGN0IDUyIC0xNSA0NyAtMjMgNDcgLTMyIGN0IAorNDcgLTQwIDUxIC00OSA1OSAtNTggY3QgNjcgLTY4IDg1IC03OCAxMTEgLTg5IGN0IDg5IC05MyA3MSAtMTAzIDU4IC0xMTggY3QgNDUgLTEzMiAzOSAtMTQ5IDM5IC0xNjcgY3QgCiszOSAtMTk2IDUyIC0yMjIgNzggLTI0NSBjdCAxMDQgLTI2OCAxMzggLTI4MCAxODEgLTI4MCBjdCAxOTYgLTI4MCAyMDkgLTI3OCAyMTkgLTI3NSBjdCAKKzIyOSAtMjcyIDIzOSAtMjY4IDI0OCAtMjYxIGN0IDI0OCAtMjYxIDI0OCAtMjYxIDMzMSAtMjYxIGN0IHAKKzIyNSAtMjExIG0gIDIyNSAtMjI4IDIyMCAtMjQwIDIxMSAtMjUwIGN0IDIwMSAtMjU5IDE4OSAtMjY0IDE3MyAtMjY0IGN0IDE0OSAtMjY0IDEyOSAtMjUyIDExNCAtMjI5IGN0IAorOTggLTIwNiA5MCAtMTgyIDkwIC0xNTcgY3QgOTAgLTE0MSA5NSAtMTI4IDEwNSAtMTE4IGN0IDExNSAtMTA4IDEyNyAtMTAzIDE0MiAtMTAzIGN0IAorMTUzIC0xMDMgMTY0IC0xMDYgMTc0IC0xMTIgY3QgMTg1IC0xMTggMTk0IC0xMjYgMjAxIC0xMzYgY3QgMjA5IC0xNDcgMjE0IC0xNjAgMjE5IC0xNzYgY3QgCisyMjMgLTE5MiAyMjUgLTIwNCAyMjUgLTIxMSBjdCBwCis3NCAwIG0gIDU3IDggNDUgMTggMzYgMzAgY3QgMjcgNDIgMjMgNTMgMjMgNjUgY3QgMjMgNzkgMjkgOTAgNDIgOTkgY3QgNTkgMTEyIDg1IDExOCAxMjAgMTE4IGN0IAorMTQ5IDExOCAxNzUgMTEzIDE5NiAxMDMgY3QgMjE3IDkzIDIyNyA4MCAyMjcgNjQgY3QgMjI3IDU2IDIyMyA0OCAyMTUgNDEgY3QgMjA4IDM0IDE5MyAyOCAxNzAgMjQgY3QgCisxNTggMjEgMTI2IDEzIDc0IDAgY3QgcCBlZgorcG9tCitncgorZ3MKK3B1bQorNjA5IDcxNCB0CisxMTkgLTE2NCBtICAxMTkgLTE2NCAxMTkgLTE2NCAxMTYgLTE1MCBjdCAxMTYgLTE1MCAxMTYgLTE1MCA4OCAtMTUwIGN0IDg4IC0xNTAgODggLTE1MCA2NSAtNjkgY3QgCis1NSAtMzQgNDUgLTYgMzYgMTMgY3QgMjMgNDEgOSA2MCAtNiA3MCBjdCAtMTggNzggLTI5IDgyIC00MSA4MiBjdCAtNDkgODIgLTU1IDgwIC02MCA3NSBjdCAKKy02NCA3MiAtNjYgNjggLTY2IDYzIGN0IC02NiA1OSAtNjQgNTUgLTYxIDUyIGN0IC01OCA0OSAtNTQgNDggLTUwIDQ4IGN0IC00NiA0OCAtNDQgNDkgLTQxIDUxIGN0IAorLTM5IDUzIC0zOCA1NiAtMzggNTggY3QgLTM4IDYxIC0zOSA2NCAtNDEgNjYgY3QgLTQzIDY4IC00NCA2OSAtNDQgNzAgY3QgLTQ0IDcxIC00NCA3MiAtNDMgNzMgY3QgCistNDIgNzQgLTQwIDc0IC0zOCA3NCBjdCAtMzIgNzQgLTI3IDcyIC0yMSA2OSBjdCAtMTUgNjYgLTEwIDYxIC01IDU0IGN0IC0xIDQ4IDMgMzggOCAyNiBjdCAKKzkgMjEgMTQgNCAyMiAtMjUgY3QgMjIgLTI1IDIyIC0yNSA1OSAtMTUwIGN0IDU5IC0xNTAgNTkgLTE1MCAyMiAtMTUwIGN0IDIyIC0xNTAgMjIgLTE1MCAyNSAtMTY0IGN0IAorMzYgLTE2NCA0NCAtMTY1IDQ5IC0xNjYgY3QgNTMgLTE2OCA1NyAtMTcwIDYxIC0xNzQgY3QgNjUgLTE3OCA3MCAtMTg2IDc1IC0xOTcgY3QgCis4MiAtMjEyIDg5IC0yMjQgOTUgLTIzMiBjdCAxMDQgLTI0MyAxMTMgLTI1MSAxMjMgLTI1NyBjdCAxMzIgLTI2MiAxNDIgLTI2NSAxNTAgLTI2NSBjdCAKKzE1OSAtMjY1IDE2NiAtMjYzIDE3MiAtMjU4IGN0IDE3NyAtMjUzIDE4MCAtMjQ4IDE4MCAtMjQyIGN0IDE4MCAtMjM4IDE3OSAtMjM0IDE3NiAtMjMxIGN0IAorMTczIC0yMjggMTY5IC0yMjcgMTY1IC0yMjcgY3QgMTYxIC0yMjcgMTU4IC0yMjggMTU2IC0yMzAgY3QgMTUzIC0yMzMgMTUyIC0yMzUgMTUyIC0yMzggY3QgCisxNTIgLTI0MCAxNTMgLTI0MyAxNTUgLTI0NSBjdCAxNTcgLTI0OCAxNTggLTI1MCAxNTggLTI1MSBjdCAxNTggLTI1MyAxNTcgLTI1NCAxNTYgLTI1NSBjdCAKKzE1NSAtMjU2IDE1MyAtMjU3IDE1MCAtMjU3IGN0IDE0MyAtMjU3IDEzNiAtMjU0IDEzMCAtMjQ5IGN0IDEyMiAtMjQyIDExNSAtMjMyIDEwOSAtMjE3IGN0IAorMTA2IC0yMTAgMTAwIC0xOTIgOTIgLTE2NCBjdCA5MiAtMTY0IDkyIC0xNjQgMTE5IC0xNjQgY3QgcCBlZgorMTI1IC0xNTggbSAgMTI1IC0xNTggMTI1IC0xNTggMTg5IC0xNjggY3QgMTg5IC0xNjggMTg5IC0xNjggMTYzIC03OCBjdCAxODUgLTExNSAyMDQgLTE0MSAyMjIgLTE1NSBjdCAKKzIzMiAtMTY0IDI0MCAtMTY4IDI0NyAtMTY4IGN0IDI1MSAtMTY4IDI1NCAtMTY3IDI1NiAtMTY0IGN0IDI1OSAtMTYyIDI2MCAtMTU4IDI2MCAtMTU0IGN0IAorMjYwIC0xNDYgMjU4IC0xMzggMjU0IC0xMzAgY3QgMjUxIC0xMjUgMjQ3IC0xMjIgMjQxIC0xMjIgY3QgMjM4IC0xMjIgMjM2IC0xMjMgMjM0IC0xMjUgY3QgCisyMzIgLTEyNyAyMzAgLTEzMCAyMzAgLTEzNCBjdCAyMzAgLTEzNiAyMjkgLTEzOCAyMjggLTEzOCBjdCAyMjcgLTEzOSAyMjYgLTE0MCAyMjUgLTE0MCBjdCAKKzIyMyAtMTQwIDIyMSAtMTQwIDIxOSAtMTM5IGN0IDIxNiAtMTM3IDIxMSAtMTMyIDIwNCAtMTI0IGN0IDE5NCAtMTEyIDE4MyAtOTYgMTcxIC03NyBjdCAKKzE2NiAtNjggMTYxIC01OSAxNTggLTQ5IGN0IDE1MyAtMzUgMTUwIC0yNiAxNDkgLTIzIGN0IDE0OSAtMjMgMTQ5IC0yMyAxNDIgMCBjdCAKKzE0MiAwIDE0MiAwIDExNCAwIGN0IDExNCAwIDExNCAwIDE0NyAtMTE2IGN0IDE1MSAtMTI5IDE1MyAtMTM5IDE1MyAtMTQ0IGN0IDE1MyAtMTQ2IDE1MyAtMTQ4IDE1MSAtMTUwIGN0IAorMTQ4IC0xNTIgMTQ1IC0xNTMgMTQxIC0xNTMgY3QgMTM5IC0xNTMgMTM0IC0xNTIgMTI4IC0xNTEgY3QgMTI4IC0xNTEgMTI4IC0xNTEgMTI1IC0xNTggY3QgCitwIGVmCis0NDMgLTE2NiBtICA0NDMgLTE2NiA0NDMgLTE2NiA0MDYgLTQwIGN0IDQwNiAtNDAgNDA2IC00MCA0MDIgLTIzIGN0IDQwMiAtMjEgNDAxIC0yMCA0MDEgLTE5IGN0IAorNDAxIC0xNyA0MDIgLTE1IDQwMyAtMTQgY3QgNDAzIC0xMyA0MDQgLTEzIDQwNSAtMTMgY3QgNDA2IC0xMyA0MDggLTEzIDQwOSAtMTUgY3QgCis0MTMgLTE4IDQxNyAtMjYgNDIzIC0zNyBjdCA0MjMgLTM3IDQyMyAtMzcgNDI5IC0zMyBjdCA0MjIgLTIwIDQxNSAtMTEgNDA3IC01IGN0IAorMzk5IDEgMzkyIDQgMzg2IDQgY3QgMzgyIDQgMzc4IDMgMzc2IDAgY3QgMzczIC0zIDM3MiAtNiAzNzIgLTExIGN0IDM3MiAtMTcgMzczIC0yNSAzNzYgLTM1IGN0IAorMzc2IC0zNSAzNzYgLTM1IDM4MCAtNTAgY3QgMzYyIC0yOSAzNDYgLTE0IDMzMSAtNSBjdCAzMjAgMSAzMDkgNCAyOTkgNCBjdCAyODkgNCAyODAgMCAyNzMgLTcgY3QgCisyNjYgLTE0IDI2MiAtMjUgMjYyIC0zOCBjdCAyNjIgLTU3IDI2OCAtNzcgMjgxIC05OSBjdCAyOTQgLTEyMCAzMTEgLTEzOCAzMzEgLTE1MSBjdCAKKzM0NiAtMTYxIDM2MSAtMTY2IDM3NCAtMTY2IGN0IDM4MyAtMTY2IDM5MCAtMTY0IDM5NSAtMTYwIGN0IDQwMSAtMTU3IDQwNSAtMTUxIDQwOCAtMTQyIGN0IAorNDA4IC0xNDIgNDA4IC0xNDIgNDEzIC0xNjIgY3QgNDEzIC0xNjIgNDEzIC0xNjIgNDQzIC0xNjYgY3QgcAorMzczIC0xNTcgbSAgMzY1IC0xNTcgMzU2IC0xNTMgMzQ2IC0xNDYgY3QgMzMyIC0xMzYgMzIwIC0xMjAgMzA5IC0xMDAgY3QgMjk4IC04MCAyOTMgLTYxIDI5MyAtNDUgY3QgCisyOTMgLTM3IDI5NSAtMzAgMzAwIC0yNSBjdCAzMDUgLTIwIDMxMCAtMTggMzE3IC0xOCBjdCAzMzIgLTE4IDM0OSAtMjggMzY3IC00NyBjdCAKKzM4OSAtNzMgMzk5IC0xMDAgMzk4IC0xMjggY3QgMzk4IC0xMzggMzk2IC0xNDUgMzkyIC0xNTAgY3QgMzg3IC0xNTUgMzgxIC0xNTcgMzczIC0xNTcgY3QgCitwIGVmCis1MjggLTE2OCBtICA1MjggLTE2OCA1MjggLTE2OCA1MDQgLTg0IGN0IDUxNSAtMTA0IDUyNCAtMTE5IDUzMiAtMTI5IGN0IDU0NCAtMTQ0IDU1NSAtMTU1IDU2NyAtMTYyIGN0IAorNTczIC0xNjYgNTgwIC0xNjggNTg4IC0xNjggY3QgNTk0IC0xNjggNTk5IC0xNjYgNjAzIC0xNjIgY3QgNjA3IC0xNTggNjA5IC0xNTMgNjA5IC0xNDcgY3QgCis2MDkgLTE0MSA2MDggLTEzMyA2MDUgLTEyMyBjdCA2MDUgLTEyMyA2MDUgLTEyMyA1OTEgLTc2IGN0IDYxMiAtMTE0IDYzMiAtMTQwIDY1MiAtMTU1IGN0IAorNjYyIC0xNjQgNjczIC0xNjggNjgzIC0xNjggY3QgNjg5IC0xNjggNjk0IC0xNjYgNjk4IC0xNjIgY3QgNzAyIC0xNTggNzA0IC0xNTEgNzA0IC0xNDMgY3QgCis3MDQgLTEzNSA3MDMgLTEyOCA3MDAgLTEyMCBjdCA3MDAgLTEyMCA3MDAgLTEyMCA2NzcgLTQ4IGN0IDY3MiAtMzMgNjY5IC0yNCA2NjkgLTIyIGN0IAorNjY5IC0yMSA2NzAgLTE5IDY3MSAtMTggY3QgNjcyIC0xNyA2NzMgLTE3IDY3NCAtMTcgY3QgNjc1IC0xNyA2NzcgLTE4IDY4MCAtMjAgY3QgCis2ODYgLTI1IDY5MiAtMzMgNjk4IC00MiBjdCA2OTggLTQyIDY5OCAtNDIgNzA0IC0zOCBjdCA3MDEgLTMzIDY5NiAtMjYgNjg4IC0xOCBjdCAKKzY4MSAtOSA2NzQgLTMgNjY5IDAgY3QgNjYzIDMgNjU4IDQgNjU0IDQgY3QgNjUwIDQgNjQ2IDMgNjQzIDAgY3QgNjQxIC0zIDYzOSAtNyA2MzkgLTExIGN0IAorNjM5IC0xNyA2NDIgLTI5IDY0OCAtNDcgY3QgNjQ4IC00NyA2NDggLTQ3IDY2OCAtMTA2IGN0IDY3MiAtMTIwIDY3NCAtMTI4IDY3NSAtMTI5IGN0IAorNjc1IC0xMzIgNjc1IC0xMzQgNjc1IC0xMzYgY3QgNjc1IC0xMzkgNjc1IC0xNDIgNjczIC0xNDMgY3QgNjcxIC0xNDUgNjcwIC0xNDYgNjY4IC0xNDYgY3QgCis2NjIgLTE0NiA2NTYgLTE0MyA2NTAgLTEzOCBjdCA2MzEgLTEyMiA2MTMgLTEwMCA1OTcgLTcyIGN0IDU4NiAtNTMgNTc2IC0yOSA1NjcgMCBjdCAKKzU2NyAwIDU2NyAwIDU0MCAwIGN0IDU0MCAwIDU0MCAwIDU3NCAtMTEyIGN0IDU3OCAtMTI0IDU4MCAtMTMyIDU4MCAtMTM2IGN0IDU4MCAtMTQwIDU3OSAtMTQyIDU3NyAtMTQ0IGN0IAorNTc2IC0xNDUgNTc0IC0xNDYgNTcyIC0xNDYgY3QgNTY4IC0xNDYgNTY0IC0xNDUgNTU5IC0xNDIgY3QgNTUxIC0xMzcgNTQyIC0xMjYgNTMwIC0xMTEgY3QgCis1MTggLTk1IDUwOCAtODAgNTAyIC02NSBjdCA0OTkgLTU5IDQ5MSAtMzcgNDc5IDAgY3QgNDc5IDAgNDc5IDAgNDUyIDAgY3QgNDUyIDAgNDUyIDAgNDg3IC0xMjAgY3QgCis0ODcgLTEyMCA0ODcgLTEyMCA0OTEgLTEzNiBjdCA0OTIgLTEzOCA0OTMgLTE0MCA0OTMgLTE0MSBjdCA0OTMgLTE0NCA0OTEgLTE0NiA0ODkgLTE0OCBjdCAKKzQ4NiAtMTUwIDQ4MyAtMTUxIDQ3OSAtMTUxIGN0IDQ3OCAtMTUxIDQ3MyAtMTUwIDQ2NiAtMTQ5IGN0IDQ2NiAtMTQ5IDQ2NiAtMTQ5IDQ2NCAtMTU2IGN0IAorNDY0IC0xNTYgNDY0IC0xNTYgNTI4IC0xNjggY3QgcCBlZgorNzYzIC03MCBtICA3NjIgLTY0IDc2MiAtNTkgNzYyIC01NSBjdCA3NjIgLTQ0IDc2NiAtMzUgNzc0IC0yNyBjdCA3ODIgLTIwIDc5MiAtMTYgODAzIC0xNiBjdCAKKzgxMiAtMTYgODIxIC0xOCA4MzAgLTIxIGN0IDgzOCAtMjUgODUxIC0zMyA4NjcgLTQ1IGN0IDg2NyAtNDUgODY3IC00NSA4NzEgLTQwIGN0IAorODQxIC0xMSA4MTMgNCA3ODYgNCBjdCA3NjggNCA3NTQgLTIgNzQ1IC0xMyBjdCA3MzYgLTI0IDczMSAtMzcgNzMxIC01MSBjdCA3MzEgLTY5IDczNyAtODggNzQ4IC0xMDcgY3QgCis3NjAgLTEyNiA3NzQgLTE0MSA3OTIgLTE1MiBjdCA4MDkgLTE2MyA4MjcgLTE2OCA4NDUgLTE2OCBjdCA4NTggLTE2OCA4NjggLTE2NSA4NzQgLTE2MCBjdCAKKzg4MSAtMTU1IDg4NCAtMTQ4IDg4NCAtMTQxIGN0IDg4NCAtMTMxIDg4MCAtMTIxIDg3MSAtMTEyIGN0IDg2MCAtOTkgODQ0IC04OSA4MjMgLTgyIGN0IAorODA5IC03NyA3ODkgLTczIDc2MyAtNzAgY3QgcAorNzY0IC03OSBtICA3ODMgLTgxIDc5OSAtODUgODExIC05MCBjdCA4MjYgLTk3IDgzOCAtMTA1IDg0NiAtMTE0IGN0IDg1NCAtMTI0IDg1OCAtMTMzIDg1OCAtMTQxIGN0IAorODU4IC0xNDcgODU2IC0xNTEgODUzIC0xNTQgY3QgODUwIC0xNTcgODQ1IC0xNTkgODM4IC0xNTkgY3QgODI1IC0xNTkgODExIC0xNTIgNzk3IC0xMzkgY3QgCis3ODIgLTEyNSA3NzEgLTEwNSA3NjQgLTc5IGN0IHAgZWYKK3BvbQorZ3IKK2dyCitncgorZ3IKK2dyCitncworMTQ2MDEgNzUwMSBtIDE2MTkwIDc1MDEgbCAxNjE5MCA4Mjk2IGwgMTQ2MDEgODI5NiBsIDE0NjAxIDc1MDEgbCBlb2NsaXAgbmV3cGF0aAorZ3MKK3RtIHNldG1hdHJpeAorMTM4OTEgNDQ5OCB0IAorMSAxIHMgCitncworZ3MKKzAgMCBtIDE1OTAgMCBsIDE1OTAgNzk1IGwgMCA3OTUgbCAwIDAgbCBlb2NsaXAgbmV3cGF0aAorZ3MKK3B1bQorMjEyIDU1NiB0CisyMDggLTM0NSBtICAxOTcgLTM0NCBsICAxMTMgLTQxMCBsICAyNSAtMzQyIGwgIDExIC0zNDUgbCAgMTEzIC00NjIgbCAgMjA4IC0zNDUgbCAKK3AgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzE1OSA1NTYgdAorMzMxIC0yNjEgbSAgMzMxIC0yNjEgMzMxIC0yNjEgMzIyIC0yMjkgY3QgMzIyIC0yMjkgMzIyIC0yMjkgMjcwIC0yMjkgY3QgMjc0IC0yMTggMjc2IC0yMDcgMjc2IC0xOTggY3QgCisyNzYgLTE3MCAyNjQgLTE0NiAyNDEgLTEyNCBjdCAyMTcgLTEwMyAxODUgLTkxIDE0NCAtODkgY3QgMTIyIC04MiAxMDYgLTc1IDk1IC02NSBjdCAKKzkxIC02MiA4OSAtNTkgODkgLTU1IGN0IDg5IC01MSA5MSAtNDcgOTUgLTQ0IGN0IDk4IC00MCAxMDggLTM3IDEyMyAtMzMgY3QgMTIzIC0zMyAxMjMgLTMzIDE4MyAtMjAgY3QgCisyMTYgLTEyIDIzOCAtMyAyNDggOCBjdCAyNTkgMTkgMjY0IDMxIDI2NCA0NiBjdCAyNjQgNjMgMjU4IDc4IDI0NSA5MiBjdCAyMzMgMTA2IDIxNSAxMTcgMTkwIDEyNSBjdCAKKzE2NiAxMzMgMTQwIDEzNyAxMTEgMTM3IGN0IDg1IDEzNyA2MiAxMzQgNDEgMTI4IGN0IDIwIDEyMiA1IDExNCAtNCAxMDMgY3QgLTEzIDkzIC0xOCA4MiAtMTggNzEgY3QgCistMTggNjMgLTE1IDUzIC05IDQ0IGN0IC0zIDM0IDQgMjYgMTMgMjAgY3QgMTkgMTYgMzUgNyA2MSAtOCBjdCA1MiAtMTUgNDcgLTIzIDQ3IC0zMiBjdCAKKzQ3IC00MCA1MSAtNDkgNTkgLTU4IGN0IDY3IC02OCA4NSAtNzggMTExIC04OSBjdCA4OSAtOTMgNzEgLTEwMyA1OCAtMTE4IGN0IDQ1IC0xMzIgMzkgLTE0OSAzOSAtMTY3IGN0IAorMzkgLTE5NiA1MiAtMjIyIDc4IC0yNDUgY3QgMTA0IC0yNjggMTM4IC0yODAgMTgxIC0yODAgY3QgMTk2IC0yODAgMjA5IC0yNzggMjE5IC0yNzUgY3QgCisyMjkgLTI3MiAyMzkgLTI2OCAyNDggLTI2MSBjdCAyNDggLTI2MSAyNDggLTI2MSAzMzEgLTI2MSBjdCBwCisyMjUgLTIxMSBtICAyMjUgLTIyOCAyMjAgLTI0MCAyMTEgLTI1MCBjdCAyMDEgLTI1OSAxODkgLTI2NCAxNzMgLTI2NCBjdCAxNDkgLTI2NCAxMjkgLTI1MiAxMTQgLTIyOSBjdCAKKzk4IC0yMDYgOTAgLTE4MiA5MCAtMTU3IGN0IDkwIC0xNDEgOTUgLTEyOCAxMDUgLTExOCBjdCAxMTUgLTEwOCAxMjcgLTEwMyAxNDIgLTEwMyBjdCAKKzE1MyAtMTAzIDE2NCAtMTA2IDE3NCAtMTEyIGN0IDE4NSAtMTE4IDE5NCAtMTI2IDIwMSAtMTM2IGN0IDIwOSAtMTQ3IDIxNCAtMTYwIDIxOSAtMTc2IGN0IAorMjIzIC0xOTIgMjI1IC0yMDQgMjI1IC0yMTEgY3QgcAorNzQgMCBtICA1NyA4IDQ1IDE4IDM2IDMwIGN0IDI3IDQyIDIzIDUzIDIzIDY1IGN0IDIzIDc5IDI5IDkwIDQyIDk5IGN0IDU5IDExMiA4NSAxMTggMTIwIDExOCBjdCAKKzE0OSAxMTggMTc1IDExMyAxOTYgMTAzIGN0IDIxNyA5MyAyMjcgODAgMjI3IDY0IGN0IDIyNyA1NiAyMjMgNDggMjE1IDQxIGN0IDIwOCAzNCAxOTMgMjggMTcwIDI0IGN0IAorMTU4IDIxIDEyNiAxMyA3NCAwIGN0IHAgZWYKK3BvbQorZ3IKK2dzCitwdW0KKzYwOSA3MTQgdAorMTE5IC0xNjQgbSAgMTE5IC0xNjQgMTE5IC0xNjQgMTE2IC0xNTAgY3QgMTE2IC0xNTAgMTE2IC0xNTAgODggLTE1MCBjdCA4OCAtMTUwIDg4IC0xNTAgNjUgLTY5IGN0IAorNTUgLTM0IDQ1IC02IDM2IDEzIGN0IDIzIDQxIDkgNjAgLTYgNzAgY3QgLTE4IDc4IC0yOSA4MiAtNDEgODIgY3QgLTQ5IDgyIC01NSA4MCAtNjAgNzUgY3QgCistNjQgNzIgLTY2IDY4IC02NiA2MyBjdCAtNjYgNTkgLTY0IDU1IC02MSA1MiBjdCAtNTggNDkgLTU0IDQ4IC01MCA0OCBjdCAtNDYgNDggLTQ0IDQ5IC00MSA1MSBjdCAKKy0zOSA1MyAtMzggNTYgLTM4IDU4IGN0IC0zOCA2MSAtMzkgNjQgLTQxIDY2IGN0IC00MyA2OCAtNDQgNjkgLTQ0IDcwIGN0IC00NCA3MSAtNDQgNzIgLTQzIDczIGN0IAorLTQyIDc0IC00MCA3NCAtMzggNzQgY3QgLTMyIDc0IC0yNyA3MiAtMjEgNjkgY3QgLTE1IDY2IC0xMCA2MSAtNSA1NCBjdCAtMSA0OCAzIDM4IDggMjYgY3QgCis5IDIxIDE0IDQgMjIgLTI1IGN0IDIyIC0yNSAyMiAtMjUgNTkgLTE1MCBjdCA1OSAtMTUwIDU5IC0xNTAgMjIgLTE1MCBjdCAyMiAtMTUwIDIyIC0xNTAgMjUgLTE2NCBjdCAKKzM2IC0xNjQgNDQgLTE2NSA0OSAtMTY2IGN0IDUzIC0xNjggNTcgLTE3MCA2MSAtMTc0IGN0IDY1IC0xNzggNzAgLTE4NiA3NSAtMTk3IGN0IAorODIgLTIxMiA4OSAtMjI0IDk1IC0yMzIgY3QgMTA0IC0yNDMgMTEzIC0yNTEgMTIzIC0yNTcgY3QgMTMyIC0yNjIgMTQyIC0yNjUgMTUwIC0yNjUgY3QgCisxNTkgLTI2NSAxNjYgLTI2MyAxNzIgLTI1OCBjdCAxNzcgLTI1MyAxODAgLTI0OCAxODAgLTI0MiBjdCAxODAgLTIzOCAxNzkgLTIzNCAxNzYgLTIzMSBjdCAKKzE3MyAtMjI4IDE2OSAtMjI3IDE2NSAtMjI3IGN0IDE2MSAtMjI3IDE1OCAtMjI4IDE1NiAtMjMwIGN0IDE1MyAtMjMzIDE1MiAtMjM1IDE1MiAtMjM4IGN0IAorMTUyIC0yNDAgMTUzIC0yNDMgMTU1IC0yNDUgY3QgMTU3IC0yNDggMTU4IC0yNTAgMTU4IC0yNTEgY3QgMTU4IC0yNTMgMTU3IC0yNTQgMTU2IC0yNTUgY3QgCisxNTUgLTI1NiAxNTMgLTI1NyAxNTAgLTI1NyBjdCAxNDMgLTI1NyAxMzYgLTI1NCAxMzAgLTI0OSBjdCAxMjIgLTI0MiAxMTUgLTIzMiAxMDkgLTIxNyBjdCAKKzEwNiAtMjEwIDEwMCAtMTkyIDkyIC0xNjQgY3QgOTIgLTE2NCA5MiAtMTY0IDExOSAtMTY0IGN0IHAgZWYKKzEyNSAtMTU4IG0gIDEyNSAtMTU4IDEyNSAtMTU4IDE4OSAtMTY4IGN0IDE4OSAtMTY4IDE4OSAtMTY4IDE2MyAtNzggY3QgMTg1IC0xMTUgMjA0IC0xNDEgMjIyIC0xNTUgY3QgCisyMzIgLTE2NCAyNDAgLTE2OCAyNDcgLTE2OCBjdCAyNTEgLTE2OCAyNTQgLTE2NyAyNTYgLTE2NCBjdCAyNTkgLTE2MiAyNjAgLTE1OCAyNjAgLTE1NCBjdCAKKzI2MCAtMTQ2IDI1OCAtMTM4IDI1NCAtMTMwIGN0IDI1MSAtMTI1IDI0NyAtMTIyIDI0MSAtMTIyIGN0IDIzOCAtMTIyIDIzNiAtMTIzIDIzNCAtMTI1IGN0IAorMjMyIC0xMjcgMjMwIC0xMzAgMjMwIC0xMzQgY3QgMjMwIC0xMzYgMjI5IC0xMzggMjI4IC0xMzggY3QgMjI3IC0xMzkgMjI2IC0xNDAgMjI1IC0xNDAgY3QgCisyMjMgLTE0MCAyMjEgLTE0MCAyMTkgLTEzOSBjdCAyMTYgLTEzNyAyMTEgLTEzMiAyMDQgLTEyNCBjdCAxOTQgLTExMiAxODMgLTk2IDE3MSAtNzcgY3QgCisxNjYgLTY4IDE2MSAtNTkgMTU4IC00OSBjdCAxNTMgLTM1IDE1MCAtMjYgMTQ5IC0yMyBjdCAxNDkgLTIzIDE0OSAtMjMgMTQyIDAgY3QgCisxNDIgMCAxNDIgMCAxMTQgMCBjdCAxMTQgMCAxMTQgMCAxNDcgLTExNiBjdCAxNTEgLTEyOSAxNTMgLTEzOSAxNTMgLTE0NCBjdCAxNTMgLTE0NiAxNTMgLTE0OCAxNTEgLTE1MCBjdCAKKzE0OCAtMTUyIDE0NSAtMTUzIDE0MSAtMTUzIGN0IDEzOSAtMTUzIDEzNCAtMTUyIDEyOCAtMTUxIGN0IDEyOCAtMTUxIDEyOCAtMTUxIDEyNSAtMTU4IGN0IAorcCBlZgorNDQzIC0xNjYgbSAgNDQzIC0xNjYgNDQzIC0xNjYgNDA2IC00MCBjdCA0MDYgLTQwIDQwNiAtNDAgNDAyIC0yMyBjdCA0MDIgLTIxIDQwMSAtMjAgNDAxIC0xOSBjdCAKKzQwMSAtMTcgNDAyIC0xNSA0MDMgLTE0IGN0IDQwMyAtMTMgNDA0IC0xMyA0MDUgLTEzIGN0IDQwNiAtMTMgNDA4IC0xMyA0MDkgLTE1IGN0IAorNDEzIC0xOCA0MTcgLTI2IDQyMyAtMzcgY3QgNDIzIC0zNyA0MjMgLTM3IDQyOSAtMzMgY3QgNDIyIC0yMCA0MTUgLTExIDQwNyAtNSBjdCAKKzM5OSAxIDM5MiA0IDM4NiA0IGN0IDM4MiA0IDM3OCAzIDM3NiAwIGN0IDM3MyAtMyAzNzIgLTYgMzcyIC0xMSBjdCAzNzIgLTE3IDM3MyAtMjUgMzc2IC0zNSBjdCAKKzM3NiAtMzUgMzc2IC0zNSAzODAgLTUwIGN0IDM2MiAtMjkgMzQ2IC0xNCAzMzEgLTUgY3QgMzIwIDEgMzA5IDQgMjk5IDQgY3QgMjg5IDQgMjgwIDAgMjczIC03IGN0IAorMjY2IC0xNCAyNjIgLTI1IDI2MiAtMzggY3QgMjYyIC01NyAyNjggLTc3IDI4MSAtOTkgY3QgMjk0IC0xMjAgMzExIC0xMzggMzMxIC0xNTEgY3QgCiszNDYgLTE2MSAzNjEgLTE2NiAzNzQgLTE2NiBjdCAzODMgLTE2NiAzOTAgLTE2NCAzOTUgLTE2MCBjdCA0MDEgLTE1NyA0MDUgLTE1MSA0MDggLTE0MiBjdCAKKzQwOCAtMTQyIDQwOCAtMTQyIDQxMyAtMTYyIGN0IDQxMyAtMTYyIDQxMyAtMTYyIDQ0MyAtMTY2IGN0IHAKKzM3MyAtMTU3IG0gIDM2NSAtMTU3IDM1NiAtMTUzIDM0NiAtMTQ2IGN0IDMzMiAtMTM2IDMyMCAtMTIwIDMwOSAtMTAwIGN0IDI5OCAtODAgMjkzIC02MSAyOTMgLTQ1IGN0IAorMjkzIC0zNyAyOTUgLTMwIDMwMCAtMjUgY3QgMzA1IC0yMCAzMTAgLTE4IDMxNyAtMTggY3QgMzMyIC0xOCAzNDkgLTI4IDM2NyAtNDcgY3QgCiszODkgLTczIDM5OSAtMTAwIDM5OCAtMTI4IGN0IDM5OCAtMTM4IDM5NiAtMTQ1IDM5MiAtMTUwIGN0IDM4NyAtMTU1IDM4MSAtMTU3IDM3MyAtMTU3IGN0IAorcCBlZgorNTI4IC0xNjggbSAgNTI4IC0xNjggNTI4IC0xNjggNTA0IC04NCBjdCA1MTUgLTEwNCA1MjQgLTExOSA1MzIgLTEyOSBjdCA1NDQgLTE0NCA1NTUgLTE1NSA1NjcgLTE2MiBjdCAKKzU3MyAtMTY2IDU4MCAtMTY4IDU4OCAtMTY4IGN0IDU5NCAtMTY4IDU5OSAtMTY2IDYwMyAtMTYyIGN0IDYwNyAtMTU4IDYwOSAtMTUzIDYwOSAtMTQ3IGN0IAorNjA5IC0xNDEgNjA4IC0xMzMgNjA1IC0xMjMgY3QgNjA1IC0xMjMgNjA1IC0xMjMgNTkxIC03NiBjdCA2MTIgLTExNCA2MzIgLTE0MCA2NTIgLTE1NSBjdCAKKzY2MiAtMTY0IDY3MyAtMTY4IDY4MyAtMTY4IGN0IDY4OSAtMTY4IDY5NCAtMTY2IDY5OCAtMTYyIGN0IDcwMiAtMTU4IDcwNCAtMTUxIDcwNCAtMTQzIGN0IAorNzA0IC0xMzUgNzAzIC0xMjggNzAwIC0xMjAgY3QgNzAwIC0xMjAgNzAwIC0xMjAgNjc3IC00OCBjdCA2NzIgLTMzIDY2OSAtMjQgNjY5IC0yMiBjdCAKKzY2OSAtMjEgNjcwIC0xOSA2NzEgLTE4IGN0IDY3MiAtMTcgNjczIC0xNyA2NzQgLTE3IGN0IDY3NSAtMTcgNjc3IC0xOCA2ODAgLTIwIGN0IAorNjg2IC0yNSA2OTIgLTMzIDY5OCAtNDIgY3QgNjk4IC00MiA2OTggLTQyIDcwNCAtMzggY3QgNzAxIC0zMyA2OTYgLTI2IDY4OCAtMTggY3QgCis2ODEgLTkgNjc0IC0zIDY2OSAwIGN0IDY2MyAzIDY1OCA0IDY1NCA0IGN0IDY1MCA0IDY0NiAzIDY0MyAwIGN0IDY0MSAtMyA2MzkgLTcgNjM5IC0xMSBjdCAKKzYzOSAtMTcgNjQyIC0yOSA2NDggLTQ3IGN0IDY0OCAtNDcgNjQ4IC00NyA2NjggLTEwNiBjdCA2NzIgLTEyMCA2NzQgLTEyOCA2NzUgLTEyOSBjdCAKKzY3NSAtMTMyIDY3NSAtMTM0IDY3NSAtMTM2IGN0IDY3NSAtMTM5IDY3NSAtMTQyIDY3MyAtMTQzIGN0IDY3MSAtMTQ1IDY3MCAtMTQ2IDY2OCAtMTQ2IGN0IAorNjYyIC0xNDYgNjU2IC0xNDMgNjUwIC0xMzggY3QgNjMxIC0xMjIgNjEzIC0xMDAgNTk3IC03MiBjdCA1ODYgLTUzIDU3NiAtMjkgNTY3IDAgY3QgCis1NjcgMCA1NjcgMCA1NDAgMCBjdCA1NDAgMCA1NDAgMCA1NzQgLTExMiBjdCA1NzggLTEyNCA1ODAgLTEzMiA1ODAgLTEzNiBjdCA1ODAgLTE0MCA1NzkgLTE0MiA1NzcgLTE0NCBjdCAKKzU3NiAtMTQ1IDU3NCAtMTQ2IDU3MiAtMTQ2IGN0IDU2OCAtMTQ2IDU2NCAtMTQ1IDU1OSAtMTQyIGN0IDU1MSAtMTM3IDU0MiAtMTI2IDUzMCAtMTExIGN0IAorNTE4IC05NSA1MDggLTgwIDUwMiAtNjUgY3QgNDk5IC01OSA0OTEgLTM3IDQ3OSAwIGN0IDQ3OSAwIDQ3OSAwIDQ1MiAwIGN0IDQ1MiAwIDQ1MiAwIDQ4NyAtMTIwIGN0IAorNDg3IC0xMjAgNDg3IC0xMjAgNDkxIC0xMzYgY3QgNDkyIC0xMzggNDkzIC0xNDAgNDkzIC0xNDEgY3QgNDkzIC0xNDQgNDkxIC0xNDYgNDg5IC0xNDggY3QgCis0ODYgLTE1MCA0ODMgLTE1MSA0NzkgLTE1MSBjdCA0NzggLTE1MSA0NzMgLTE1MCA0NjYgLTE0OSBjdCA0NjYgLTE0OSA0NjYgLTE0OSA0NjQgLTE1NiBjdCAKKzQ2NCAtMTU2IDQ2NCAtMTU2IDUyOCAtMTY4IGN0IHAgZWYKKzc2MyAtNzAgbSAgNzYyIC02NCA3NjIgLTU5IDc2MiAtNTUgY3QgNzYyIC00NCA3NjYgLTM1IDc3NCAtMjcgY3QgNzgyIC0yMCA3OTIgLTE2IDgwMyAtMTYgY3QgCis4MTIgLTE2IDgyMSAtMTggODMwIC0yMSBjdCA4MzggLTI1IDg1MSAtMzMgODY3IC00NSBjdCA4NjcgLTQ1IDg2NyAtNDUgODcxIC00MCBjdCAKKzg0MSAtMTEgODEzIDQgNzg2IDQgY3QgNzY4IDQgNzU0IC0yIDc0NSAtMTMgY3QgNzM2IC0yNCA3MzEgLTM3IDczMSAtNTEgY3QgNzMxIC02OSA3MzcgLTg4IDc0OCAtMTA3IGN0IAorNzYwIC0xMjYgNzc0IC0xNDEgNzkyIC0xNTIgY3QgODA5IC0xNjMgODI3IC0xNjggODQ1IC0xNjggY3QgODU4IC0xNjggODY4IC0xNjUgODc0IC0xNjAgY3QgCis4ODEgLTE1NSA4ODQgLTE0OCA4ODQgLTE0MSBjdCA4ODQgLTEzMSA4ODAgLTEyMSA4NzEgLTExMiBjdCA4NjAgLTk5IDg0NCAtODkgODIzIC04MiBjdCAKKzgwOSAtNzcgNzg5IC03MyA3NjMgLTcwIGN0IHAKKzc2NCAtNzkgbSAgNzgzIC04MSA3OTkgLTg1IDgxMSAtOTAgY3QgODI2IC05NyA4MzggLTEwNSA4NDYgLTExNCBjdCA4NTQgLTEyNCA4NTggLTEzMyA4NTggLTE0MSBjdCAKKzg1OCAtMTQ3IDg1NiAtMTUxIDg1MyAtMTU0IGN0IDg1MCAtMTU3IDg0NSAtMTU5IDgzOCAtMTU5IGN0IDgyNSAtMTU5IDgxMSAtMTUyIDc5NyAtMTM5IGN0IAorNzgyIC0xMjUgNzcxIC0xMDUgNzY0IC03OSBjdCBwIGVmCitwb20KK2dyCitncgorZ3IKK2dyCitncgorMTY4MDAgODQwMCBtICAxNjIzOCA4NTg4IGwgIDE2MjM4IDgyMTMgbCAgMTY4MDAgODQwMCBsICBwIGVmCisxNDQwMCA4Mzc1IG0gIDE2MzUwIDgzNzUgbCAgMTYzNTAgODQyNSBsICAxNDQwMCA4NDI1IGwgIDE0NDAwIDgzNzUgbCAgcCBlZgorMTMwMjggNjI0OSBtICAxMjU3OCA2Mzk5IGwgIDEyNTc4IDYwOTkgbCAgMTMwMjggNjI0OSBsICBwIGVmCisxIGx3IDAgbGogMTE1MDAgNjI1MCBtICAxMjUyNyA2MjUwIGwgIDEyNTI3IDYyNDkgbCAgMTI2NjggNjI0OSBsICBwcwordG0gc2V0bWF0cml4CiswIDAgdCAKKzEgMSBzIAorMCA2MzU4IHQgCitwb20KK2NvdW50IG9wX2NvdW50IHN1YiB7cG9wfSByZXBlYXQgY291bnRkaWN0c3RhY2sgZGljdF9jb3VudCBzdWIge2VuZH0gcmVwZWF0IGI0X2luY19zdGF0ZSByZXN0b3JlCislJVBhZ2VUcmFpbGVyCislJVRyYWlsZXIKKyUlRU9GCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9kb2Mvc3BlZXhfYW5hbHlzaXMub2RnIGIvM3JkcGFydHkvc3BlZXgvZG9jL3NwZWV4X2FuYWx5c2lzLm9kZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTk5NDVkCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvZG9jL3NwZWV4X2FuYWx5c2lzLm9kZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9odG1sL2luZGV4Lmh0bWwgYi8zcmRwYXJ0eS9zcGVleC9odG1sL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5YTc5NgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2h0bWwvaW5kZXguaHRtbApAQCAtMCwwICsxLDIxNSBAQAorPCFET0NUWVBFIGRvY3R5cGUgUFVCTElDICItLy93M2MvL2R0ZCBodG1sIDQuMCB0cmFuc2l0aW9uYWwvL2VuIj48aHRtbD48aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgCisgIAorICAKKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIAorICAKKyAgCisgIDxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTW96aWxsYS80Ljc4IFtmcl0gKFgxMTsgVTsgTGludXggMi40LjE3IGk2ODYpIFtOZXRzY2FwZV0iPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAKKyAgCisgIAorICA8bWV0YSBuYW1lPSJBdXRob3IiIGNvbnRlbnQ9IkplYW4tTWFyYyBWYWxpbiI+CisgIDx0aXRsZT5UaGUgU3BlZXggU3BlZWNoIENvZGVjPC90aXRsZT4KKworICAKKworICAKKworICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2hlYWQ+CisKKzxib2R5IHRleHQ9IiMwMDAwMDAiIGJnY29sb3I9IiNmZmZmZmYiIGxpbms9IiMwMDAwZWYiIHZsaW5rPSIjNTkxODhlIiBhbGluaz0iI2ZmMDAwMCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIAorPGNlbnRlcj4gICAgICAgICAgICAgCis8aW1nIHNyYz0ic3BlZXgucG5nIiBhbHQ9IlNwZWV4Ij4KKzwvY2VudGVyPgorPGJyPgorPGJyPgorCisKKyAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3NwZWV4Ij5UaGUgU3BlZXggcHJvamVjdDwvYT4KKyAgICAgICAgICBhaW1zICB0byBidWlsZCBhbiBvcGVuLXNvdXJjZSAoTEdQTCkgPEEgaHJlZj0icGF0ZW50cy5odG1sIj5wYXRlbnQtZnJlZTwvQT4gdm9pY2UgY29kZWMuIFVubGlrZSAKKyAgb3RoZXIgY29kZWNzICAgbGlrZSAgTVAzIGFuZCA8YSBocmVmPSJodHRwOi8vd3d3LnZvcmJpcy5vcmcvIj5PZ2cgVm9yYmlzPC9hPiwgCitTcGVleCBpcyBzcGVjaWFsbHkgZGVzaWduZWQgZm9yIGNvbXByZXNzaW5nIHZvaWNlIGF0IGxvdyBiaXQtcmF0ZXMgaW4gdGhlIAorOC0zMiBrYnBzL2NoYW5uZWwgcmFuZ2UuIFBvc3NpYmxlIGFwcGxpY2F0aW9ucyBpbmNsdWRlIFZvaWNlIG92ZXIgSVAgKFZvSVApLCAKKyBJbnRlcm5ldCBhdWRpbyBzdHJlYW1pbmcsIGFyY2hpdmluZyBvZiBzcGVlY2ggZGF0YSAoZS5nLiB2b2ljZSBtYWlsKSwgYW5kCithdWRpbyBib29rcy4gSW4gc29tZSBzZW5zZSwgaXQgaXMgbWVhbnQgdG8gIGJlIGNvbXBsZW1lbnRhcnkgdG8gdGhlIAorT2dnIFZvcmJpcyBjb2RlYy4gICAgICAgICAgICAgCis8cD5JZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gcGFydGljaXBhdGluZyB0byB0aGUgcHJvamVjdCwgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c3BlZXgtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Ij4KKyAgICAgICAgICAgc3BlZXgtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PC9hPiAgb3IgPGEgaHJlZj0iaHR0cDovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9zcGVleC1kZXZlbCI+CisgICAgICAgICAgIGpvaW4gIG91ciBtYWlsaW5nIGxpc3Q8L2E+LiBSaWdodCBub3csIHdlIGFyZSBtb3N0bHkgbG9va2luZyBmb3IgCisgZGV2ZWxvcGVycyB3aXRoIHNpZ25hbCBwcm9jZXNzaW5nIGFuZCBzcGVlY2ggY29kaW5nIGtub3dsZWRnZSwgYXMgd2VsbCAKKyBhcyBwZW9wbGUgd2l0aCBrbm93bGVkZ2UgYWJvdXQgcGF0ZW50cyBpbiB0aGF0IGZpZWxkLiBTZWUgdGhlIAorPEEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wbS90YXNrLnBocD9ncm91cF9wcm9qZWN0X2lkPTE5NTU2Jmdyb3VwX2lkPTQ2NjUxJmZ1bmM9YnJvd3NlIj50YXNrIGxpc3Q8L0E+IGZvciBtb3JlIGRldGFpbHMgYWJvdXQgd2hhdCdzIGxlZnQgdG8gZG8gaW4gU3BlZXg8YnI+Cis8L3A+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgIAorPGgyPkRvd25sb2FkPC9oMj4KKworCisKKyAgICAgICAgICAgWW91IGNhbiBkb3dubG9hZCBTcGVleCBmcm9tIDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTQ2NjUxIj4KKyAgICAgICAgICAgaGVyZTwvYT4uPGJyPgorCisKKzxoMj5Eb2N1bWVudGF0aW9uPC9oMj4KK1RoaXMgU3BlZXggbWFudWFsIGluY2x1ZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZQorYWxnb3JpdGhtcyB1c2VkIGluIFNwZWV4LCB0aGUgYml0LXN0cmVhbSwgdGhlIEFQSSBhbmQgbW9yZS4KKzxicj4KKzxBIGhyZWY9Im1hbnVhbC5wZGYiPlNwZWV4IG1hbnVhbCAoUERGKTwvQT4gCis8YnI+Cis8QSBocmVmPSJtYW51YWwucHMiPlNwZWV4IG1hbnVhbCAoUG9zdHNjcmlwdCk8L0E+Cis8YnI+Cis8QSBocmVmPSJtYW51YWwvIj5TcGVleCBtYW51YWwgKEhUTUwgb25saW5lKTwvQT4KKzxicj4KKzxBIGhyZWY9Im1hbnVhbC50YXIuZ3oiPlNwZWV4IG1hbnVhbCAoSFRNTCB0YXJiYWxsKTwvQT4KKzxicj48YnI+CitUaGVyZSBpcyBhbHNvIHNvbWUgQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdGVkIGJ5IERveHlnZW4gZGlyZWN0bHkgZnJvbSB0aGUgaGVhZGVyIGZpbGVzCis8YnI+Cis8QSBocmVmPSJyZWZtYW4ucGRmIj5TcGVleCBBUEkgKFBERik8L0E+CisgICAgICAgICAgIAorPGgyPlNhbXBsZXM8L2gyPgorCitZb3UgY2FuIGxpc3RlbiB0byBzYW1wbGVzIGVuY29kZWQgd2l0aCBTcGVleCA8QSBocmVmPSIvYXVkaW8vc2FtcGxlcy8iPmhlcmU8L0E+CisKKzxoMj5XaG8gdXNlcyBTcGVleDwvaDI+CisKKzxBIGhyZWY9Imh0dHA6Ly93d3cubGlucGhvbmUub3JnIj5MaW5QaG9uZTwvYT46IEEgU0lQLWJhc2VkIFZvSVAgcGhvbmUgd3JpdHRlbiBmb3IgR05PTUUKKzxicj4KKzxBIGhyZWY9Imh0dHA6Ly9qemIucmFwYW5kZW4uZGsvc3BlZXgvIj5TcGVleCBYTU1TIHBsdWdpbjwvYT4gd3JpdHRlbiBieSA8YSBocmVmPSJtYWlsdG86anpiQHJhcGFuZGVuLmRrIj5KZW5zIEJ1cmthbDwvYT4KKzxicj4KKzxBIGhyZWY9Imh0dHA6Ly93d3cub3BlbmgzMjMub3JnIj5PcGVuSDMyMzwvYT46IEFuIG9wZW4tc291cmNlIEguMzIzIHN0YWNrCis8YnI+Cis8QSBocmVmPSJodHRwOi8vd3d3Lmdub21lbWVldGluZy5vcmciPkdub21lTWVldGluZzwvQT46IEEgSDMyMyBWaWRlbyBDb25mZXJlbmNpbmcgUHJvZ3JhbQorCis8YnI+PGJyPgorSW4gZGV2ZWxvcG1lbnQ6Cis8YnI+Cis8QSBocmVmPSJodHRwOi8vd3d3LmFzdGVyaXNrcGJ4Lm9yZyI+QXN0ZXJpc2s8L2E+OiBBbiBvcGVuLXNvdXJjZSBQQlgKKworPGgyPk5ld3M8L2gyPgorCis8aDM+MjAwMi8wOS8wNDwvaDM+CisKK1NwZWV4IDAuOC4xIHJlbGVhc2VkLiBUaGlzIHJlbGVhc2UgZml4ZXMgYSBidWcgaW4gdGhlIG5ldyAwLjggQVBJIChmdW5jdGlvbgorc3BlZXhfbW9kZV9xdWVyeSkuIEZvciB0aG9zZSB1c2luZyBvbmx5IHNwZWV4ZW5jL3NwZWV4ZGVjLCBubyBuZWVkIHRvIHVwZ3JhZGUKK2J1dCB0aG9zZSB1c2luZyBsaWJzcGVleCAoZGlyZWN0bHkgb3IgdGhyb3VnaCBhbm90aGVyIGFwcGxpY2F0aW9uKSBzaG91bGQuCisKKzxoMz4yMDAyLzA4LzI0PC9oMz4KKyAgU3BlZXggMC44LjAgcmVsZWFzZWQuIFRoZSBzcGVleF9kZWNvZGUoKSBmdW5jdGlvbiBubyBsb25nZXIgdXNlcyB0aGUKKydsb3N0JyBwYXJhbWV0ZXIuIEFwcGxpY2F0aW9ucyB3aWxsIG5lZWQKKyAgdG8gYmUgdXBkYXRlZC4KKworPGgzPjIwMDIvMDgvMDk8L2gzPgorICBTcGVleCAwLjcuMCByZWxlYXNlZC4gVGhlIGZvcm1hdCBvZiB0aGUgYml0IHN0cmVhbSBoYXMgY2hhbmdlZCBvbmNlIGFnYWluCithbmQgdGhlIGJhbmR3aWR0aCByZXF1aXJlZCBoYXMgYmVlbgorICByZWR1Y2VkIHNsaWdodGx5LgorCis8aDM+MjAwMi8wOC8wMTwvaDM+CisKK1NwZWV4IDAuNi4wIGhhcyBiZWVuIHJlbGVhc2VkLiBUaGlzIGlzIGEgbWFqb3IgcmVsZWFzZSB0aGF0IGNvbnRhaW5zIG1hbnkgaW1wcm92ZW1lbnRzIGFuZCBsb3RzIG9mIGJ1Zy1maXhpbmcuIFRoZSBwb3N0LWZpbHRlciB0aGF0IHdhcyBjYXVzaW5nIHByb2JsZW1zIHRocm91Z2hvdXQgMC41Lnggd2FzIHJlcGxhY2VkIHdpdGggYSBuZXcgcGVyY2VwdHVhbCBlbmhhbmNlbWVudCBzeXN0ZW0sIHdoaWNoIHNvdW5kcyBiZXR0ZXIgYW5kIGNvbnN1bWUgbXVjaCBsZXNzIENQVS4gQWxzbyBtYW55IGNoYW5nZXMgdG8gT2dnIGVuY29kZXIvZGVjb2RlciwgaW5jbHVkaW5nIHBvc3NpYmlsaXR5IHRvIHNlZSB0aGUgYml0LXJhdGUgYmVpbmcgcGxheWVkL2VuY29kZWQuIFRoZXJlIGlzIGFsc28gYSBkaXNjb250aW51b3VzIHRyYW5zbWlzc2lvbiAoRFRYKSBtb2RlLiBMYXN0IGJ1dCBub3QgbGVhc3QsIDAuNi4wIG5vdyByZXBvcnRzIG5vIGVycm9yIHdoZW4gYmVpbmcgcnVuIHdpdGggdGhlIHZhbGdyaW5kIG1lbW9yeSBkZWJ1Z2dlci4gCisKKzxoMz4yMDAyLzA3LzI2PC9oMz4KKworU3BlZXggMC41LjIgaXMgb3V0IGFuZCBicmluZ3MgYSBudW1iZXIgb2YgaW1wcm92ZW1lbnRzIGFuZCBidWcgZml4ZXMuIEZpcnN0LAordGhlIHNlYXJjaCBoYXMgYmVlbiBpbXByb3ZlZCBhbmQgaXQgaXMgbm93IHBvc3NpYmxlIHRvIGNob29zZSB0aGUgcmlnaHQKK3F1YWxpdHkvZW5jb2RpbmcgdGltZSB0cmFkZW9mZiAoLS1jb21wIG9wdGlvbikuIElzIGlzIGFsc28gcG9zc2libGUgdG8gcGFjaworbW9yZSB0aGF0IG9uZSBmcmFtZSBpbiBhbiBPZ2cgcGFja2V0ICgtLW5mcmFtZXMpLCByZWR1Y2luZyB0aGUgb3ZlcmhlYWQgZm9yCitsb3cgYml0LXJhdGVzLiBMYXN0IGJ1dCBub3QgbGVhc3Q6IHRoZXJlIGlzIG5vdyBzb21lIGRvY3VtZW50YXRpb24gYWJvdXQKK1NwZWV4IQorCisKKzxoMz4yMDAyLzA3LzE3PC9oMz4gCisKK1ZlcnNpb24gMC41LjEgaXMgcmVsZWFzZWQuIFRoaXMgcmVsZWFzZSBicmluZ3MgcXVhbGl0eSBpbXByb3ZlbWVudHMgYXQgdmVyeQorbG93IGJpdC1yYXRlICg1Ljcga2JwcykgYW5kIGEgbmV3IHBvc3QtZmlsdGVyLiBWQlIgc2hvdWxkIGFsc28gYmUgYSBiaXQKK2JldHRlciB0aG91Z2ggdGhlcmUncyBzdGlsbCBhIGxvdCB0byBkby4gTW9zdCBvZiB0aGUgbW9kZXMgYXJlIGJpdC1yYXRlCitjb21wYXRpYmxlIHdpdGggMC41LjAsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgdmVyeSBsb3cgYml0LXJhdGUgKHdoaWNoIGlzCitzb21ldGltZXMgdXNlZCBpbiBWQlIsIHNvIGV4cGVjdCBzb21lIGdsaXRjaGVzKS4gVGhlIHNvdXJjZSAoYW5kIHByb2JhYmx5CitiaW5hcnkpIGNvbXBhdGliaWxpdHkgd2l0aCAwLjUuMCBpcyBtYWludGFpbmVkLgorCis8aDM+MjAwMi8wNy8wODwvaDM+CisKK1NwZWV4IDAuNS4wIGlzIG91dC4gVGhlIG1vc3QgaW1wb3J0YW50IG5ldyBmZWF0dXJlIGlzIFZhcmlibGUgQml0LVJhdGUKKyhWQlIpLiBJdCBjYW4gYmUgZW5hYmxlZCBieSB1c2luZyB0aGUgLS12YnIgb3B0aW9uIHRvIHNwZWV4ZW5jLiBXaGVuCitlbmNvZGluZyBpbiBWQlIsIHRoZSAtLXF1YWxpdHkgb3B0aW9uIGNhbiBzdGlsbCBiZSB1c2VkLiBOb3RlIFZCUgoraW1wbGVtZW50YXRpb24gaW4gdGhpcyByZWxlYXNlIGlzIGV4cGVyaW1lbnRhbCBhbmQgc3RpbGwgcmVxdWlyZXMgbG90cyBvZgordHVuaW5nLgorCis8aDM+MjAwMi8wNi8yMzwvaDM+CisKK1NwZWV4IDAuNC4wIGlzIGhlcmUsIGFkZGluZyBtYW55IG1vcmUgYml0LXJhdGVzIHRvIGJvdGggbmFycm93YmFuZCBhbmQgd2lkZWJhbmQsIGFzCit3ZWxsIGFzIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSBiaXQtcmF0ZSBkeW5hbWljYWxseSBmcm9tIGZyYW1lIHRvIGZyYW1lLiBUaGUKK25hcnJvd2JhbmQgbW9kZXMgbm93IHJhbmdlIGZyb20gOCBrYnBzIHRvIDE4IGticHMsIHdoaWxlIHdpZGViYW5kIHJhbmdlIGZyb20KKzEwIGticHMgdG8gMjgga2Jwcy4gVGhlcmUgaXMgYWxzbyBhICJub2lzZSBjb2RpbmciIG1vZGUgYXQgMiBrYnBzIGZvcgorbmFycm93YmFuZCBhbmQgMyBrYnBzIGZvciB3aWRlYmFuZC4gQWxsIHRoaXMgd2lsbCBsZWFkIHRvIHJlYWwgVmFyaWFibGUKK0JpdC1SYXRlIChWQlIpIGluIHRoZSBmdXR1cmUuIEFsc28sIHdvcnRoIG1lbnRpb25pbmcgdGhlIGNvZGVjIGxhdGVuY3kgaGFzCitiZWVuIHJlZHVjZWQgZnJvbSA0MCBtcyB0byAzMCBtcyAoMjAgbXMgZnJhbWVzICsgMTAgbXMgbG9va2FoZWFkKS4KKworPGgzPjIwMDIvMDYvMTI8L2gzPgorCitTcGVleCAwLjMuMCBoYXMgYmVlbiByZWxlYXNlZC4gVGhlcmUgaXMgbm93IGEgbmV3ICJsb3cgYml0LXJhdGUiIG5hcnJvd2JhbmQKK21vZGUgZm9yIGNvZGluZyBzcGVlY2ggYXQgOCBrYnBzLiBUaGVyZSdzIGFsc28gc3VwcG9ydCBmb3IgYmlnLWVuZGlhbgorbWFjaGluZXMgKHVudGVzdGVkLCBwbGVhc2UgcmVwb3J0IGJ1Z3MpLiBTcGVleCBmaWxlcyBub3cgaGF2ZSByZWFsIGhlYWRlcgorY29udGFpbmluZyBpbmZvcm1hdGlvbiBsaWtlIGJpdC1zdHJlYW0gdmVyc2lvbiAocmV2ZW50cyBmcm9tIHBsYXlpbmcgYW4KK2luY29tcGF0aWJsZSBiaXQtc3RyZWFtKSwgc2FtcGxpbmcgcmF0ZSwgYml0LXJhdGUgYW5kIHVzZXIgY29tbWVudHMuIE9uIHRoZQorcXVhbGl0eSBzaWRlLCB0aGUgcG9zdC1maWx0ZXIgaGFzIGJlZW4gaW1wcm92ZWQgYW5kIHRoZXJlIGhhcyBiZWVuIG1vcmUKK2NvZGVib29rIG9wdGltaXphdGlvbi4gTm90ZSB0aGF0IHRoaXMgcmVsZWFzZSBicmVha3MgYml0LXN0cmVhbQorY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIHJlbGVhc2VzLgorCis8aDM+MjAwMi8wNi8wNzwvaDM+CisKK1NwZWV4IDAuMi4wIGlzIG91dC4gVGhpcyBpcyBhIG1ham9yIHJlbGVhc2Ugd2l0aCBsb3RzIG9mIGltcHJvdmVtZW50cyBhbmQKK2J1Z2ZpeGVzLiBGaXJzdCwgdGhlIGVuY29kZXIgYW5kIGRlY29kZXIgY2FuIHdvcmsgZGlyZWN0bHkgZnJvbSB3YXYgZmlsZXMKKyhtb25vIG9ubHkgZm9yIG5vdykgYW5kIHRoZSBkZWNvZGVyIGNhbiBwbGF5IGRpcmVjdGx5IHRvIHNvdW5kY2FyZC4gQWxzbywKK21vc3Qgb2YgdGhlIGNvZGVib29rcyBoYXZlIGJlZW4gcmUtdHJhaW5lZCBpbiBvcmRlciB0byBpbXByb3ZlIHF1YWxpdHkgKGJ1dAordGhpcyBhbHNvIGJyZWFrcyBmb3JtYXQgY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIHZlcnNpb25zKSwgd2hpbGUKK3NsaWdodGx5IGRlY3JlYXNpbmcgY29tcGxleGl0eS4gU3BlZXggaXMgbm93IGFibGUgdG8gZW5jb2RlIGJvdGggRFRNRiBhbmQKK211c2ljIChub3QgYXMgZ29vZCBhcyBWb3JiaXMgb2YgY291cnNlKSBhZnRlciBidWdzIHdlcmUgZml4ZWQgaW4gdGhlIHBpdGNoCitwcmVkaWN0aW9uIGFuZCBMU1AgcXVhbnRpemF0aW9uLiBMYXN0IGJ1dCBub3QgdGhlIGxlYXN0LCB0aGUgcGVyY2VwdHVhbAorcG9zdC1maWx0ZXIgaGFzIGJlZW4gaW1wcm92ZWQuCisKKzxoMz4yMDAyLzA2LzA0PC9oMz4KKworU3BlZXggMC4xLjIgaXMgb3V0LiBUaGlzIGFkZHMgYSBwZXJjZXB0dWFsIHBvc3QtZmlsdGVyIGF0IHRoZSBkZWNvZGVyIHRvIAorKGhvcGVmdWxseSkgaW5jcmVhc2UgcXVhbGl0eS4gSXQgY2FuIGJlIGVuYWJsZWQgd2l0aCB0aGUgLS1wZiBvcHRpb24gdG8gCitzcGVleGRlYy4gVGhlIFNwZWV4IGZvcm1hdCByZW1haW5zIHRoZSBzYW1lIGZvciBib3RoIG5hcnJvd2JhbmQgCithbmQgd2lkZWJhbmQuCisKKzxoMz4yMDAyLzA1LzE1PC9oMz4KKworU3BlZXggMC4xLjAgaGFzIGJlZW4gcmVsZWFzZWQuIFNwZWV4IG5vdyB1c2VzIHRoZSBPZ2cgYml0c3RyZWFtICh1c2luZworbGlib2dnKS4gVGhhdCBtZWFucyB0aGF0IHRoZXJlIGlzIG5vdyAobGltaXRlZCkgYml0c3RyZWFtIGVycm9yCityZWNvdmVyeS4gQWxzbywgdGhlIG5hcnJvd2JhbmQgYml0LXJhdGUgaGFzIGJlZW4gcmVkdWNlZCBmcm9tIDE1Ljcga2JwcyB0bworMTUuMSBrYnBzIGFuZCB0aGUgd2lkZWJhbmQgYml0LXJhdGUgaGFzIGJlZW4gcmVkdWNlZCBmcm9tIDMxLjMga2JwcyB0byAyNy43CitrYnBzLiAgVGhlIHF1YWxpdHkgcmVtYWlucyByb3VnaGx5IHRoZSBzYW1lIGZvciBib3RoIG5hcnJvd2JhbmQgYW5kCit3aWRlYmFuZC4gIE9uY2UgYWdhaW4sIHRoaXMgYnJlYWtzIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyB2ZXJzaW9ucy4KKworPGhyIHdpZHRoPSIxMDAlIiBzaXplPSIyIj4gICAgICAgICAgCis8ZGl2IGFsaWduPSJyaWdodCI+PGEgaHJlZj0iaHR0cDovL3VrLmV1cm9yaWdodHMub3JnL2lzc3Vlcy9jZC9xdWljay8iPjxpbWcgCitib3JkZXI9IjAiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHNyYz0iYmFkY2QwMDIucG5nIiAKK2FsdD0iU2F5IE5PIHRvIGNvcnJ1cHQgYXVkaW8gZGlzY3MiIC8+PC9hPgorPGJyPgorPGltZyBzcmM9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvc2Zsb2dvLnBocD9ncm91cF9pZD00NjY1MSZhbXA7YW1wO3R5cGU9NSIgYWx0PSJTb3VyY2VGb3JnZSBMb2dvIj4KKzxicj4KKworPGEgaHJlZj0ibWFpbHRvOmplYW4tbWFyYy52YWxpbkBoZXJtZXMudXNoZXJiLmNhIj5KZWFuLU1yYyBWYWxpbjwvYT4gICAgICAgPGJyPgorICAgICAgICAgICAgJERhdGU6IDIwMDIvMDkvMTYgMDA6NTk6MTAgJDwvZGl2PgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9odG1sL3BhdGVudHMuaHRtbCBiLzNyZHBhcnR5L3NwZWV4L2h0bWwvcGF0ZW50cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MWM5NjEKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9odG1sL3BhdGVudHMuaHRtbApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+CisgIDx0aXRsZT5TcGVleCBhbmQgcGF0ZW50czwvdGl0bGU+CisgICAgICAKKyAgPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJKZWFuLU1hcmMgVmFsaW4iPgorPC9oZWFkPgorICA8Ym9keT4KKyAKKzxkaXYgYWxpZ249ImNlbnRlciI+IAorPGgxPlBvc2l0aW9uIHJlZ2FyZGluZyBwYXRlbnRzPC9oMT4KKyAKKzxkaXYgYWxpZ249ImxlZnQiPlRoZSBnb2FsIG9mIFNwZWV4IGlzIHRvIHByb3ZpZGUgYSBjb2RlYyB0aGF0IGlzIG9wZW4tc291cmNlCisocmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwiPkxHUEw8L2E+KQorYW5kIHRoYXQgY2FuIGJlIHVzZWQgaW4gb3Blbi1zb3VyY2Ugc29mdHdhcmUuIFRoaXMgaW1wbGllcyB0aGF0IGl0IGFsc28gaGFzCit0byBiZSBmcmVlIGZyb20gcGF0ZW50IHJlc3RyaWN0aW9ucy4gVW5mb3J0dW5hdGVseSwgdGhlIGZpZWxkIG9mIHNwZWVjaCBjb2RpbmcKK2tub3duIHRvIGJlIGEgcmVhbCBwYXRlbnQgbWluZWZpZWxkIGFuZCB0byBtYWtlIHRoZSBtYXR0ZXIgd29yc2UsIGVhY2ggY291bnRyeQoraGFzIGl0cyBvd24gcGF0ZW50IGxhd3MgYW5kIGxpc3Qgb2YgZ3JhbnRlZCBwYXRlbnRzIHNvIHRyYWNraW5nIHRoZW0gYWxsCit3b3VsZCBiZSBuZXh0IHRvIGltcG9zc2libGUuIFRoaXMgaXMgd2h5IHdlIGNhbm5vdCBwcm92aWRlIGFuIGFic29sdXRlIHdhcnJhbnR5Cit0aGF0IFNwZWV4IGlzIGluZGVlZCBjb21wbGV0ZWx5IHBhdGVudC1mcmVlLjxicj4KKzxicj4KKyBUaGF0IGJlaW5nIHNhaWQsIHdlIGFyZSBkb2luZyBvdXIgYmVzdCB0byBrZWVwIGF3YXkgZnJvbSBrbm93biBwYXRlbnRzIGFuZCAKK3dlIGRvIG5vdCBwYXRlbnQgdGhlIGFsZ29yaXRobXMgd2UgdXNlLiBUaGF0J3MgYWJvdXQgYWxsIHdlIGNhbiBkbyBhYm91dCBpdC4KK0lmIHlvdSBhcmUgYXdhcmUgb2YgYSBwYXRlbnQgaXNzdWUgd2l0aCBTcGVleCwgcGxlYXNlIDxhCisgaHJlZj0ibWFpbHRvOnNwZWV4LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCI+bGV0IHVzIGtub3c8L2E+Ljxicj4KKyA8YnI+CitOb3JtYWxseSB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IHByb2JsZW0gd2hlbiB5b3UgdXNlIFNwZWV4LiBIb3dldmVyIGZvciB0aGUKK3JlYXNvbnMgZXhwbGFpbmVkIGFib3ZlLCBpZiB5b3UgYXJlIHRoaW5raW5nIGFib3V0IHVzaW5nIFNwZWV4IGNvbW1lcmNpYWxseSwKK3dlIHN0cm9uZ2x5IHN1Z2dlc3QgdGhhdCB5b3UgaGF2ZSBhIGNsb3NlciBsb29rIGF0IHBhdGVudCBpc3N1ZXMgd2l0aCByZXNwZWN0Cit0byB5b3VyIGNvdW50cnkuIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBzcGVjaWZpYyB0byBTcGVleCwgc2luY2UgbWFueSAic3RhbmRhcmRpemVkIgorY29kZWNzIGhhdmUgYW4gdW5jbGVhciBwYXRlbnQgc3RhdHVzIChsaWtlIDxhCisgaHJlZj0iaHR0cDovL3d3dy5tcDMtdGVjaC5vcmcvcGF0ZW50cy5odG1sIj5NUDM8L2E+LCA8YQorIGhyZWY9Imh0dHA6Ly9rYnMuY3MudHUtYmVybGluLmRlLyU3RWp1dHRhL3RvYXN0Lmh0bWwiPkdTTTwvYT4gYW5kIHByb2JhYmx5IAorb3RoZXJzKSwgbm90IHRvIG1lbnRpb24gdGhlIHJpc2tzIG9mIGEgcHJldmlvdXNseSB1bmtub3duIHBhdGVudCBob2xkZXIgY2xhaW1pbmcKK3JpZ2h0cyBvbiBhIHN0YW5kYXJkaXplZCBjb2RlYyBsb25nIGFmdGVyIHN0YW5kYXJkaXphdGlvbiAoPGEgaHJlZj0iaHR0cDovL2xwZi5haS5taXQuZWR1L1BhdGVudHMvR2lmL0dpZi5odG1sIj5HSUY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lml0d29ybGQuY29tL01hbi8yNjg3LzAyMDcxOWpwZWdwYXRlbnQvIj5KUEVHPC9hPikuPGJyPgorPC9kaXY+CisgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9odG1sL3NwZWV4LnBuZyBiLzNyZHBhcnR5L3NwZWV4L2h0bWwvc3BlZXgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYjI4NzMKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9odG1sL3NwZWV4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9odG1sL3NwZWV4LndlYnByaiBiLzNyZHBhcnR5L3NwZWV4L2h0bWwvc3BlZXgud2VicHJqCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMTM5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9odG1sL3NwZWV4LndlYnByagpAQCAtMCwwICsxLDcgQEAKKzwhRE9DVFlQRSB3ZWJwcm9qZWN0ID48d2VicHJvamVjdD4KKyA8cHJvamVjdCB1c2VQcmV2aWV3UHJlZml4PSIwIiBwcmV2aWV3UHJlZml4PSIiIHR5cGU9IkxvY2FsIiBuYW1lPSJzcGVleCIgPgorICA8dXBsb2FkLz4KKyAgPGF1dGhvcj48L2F1dGhvcj4KKyAgPGVtYWlsPjwvZW1haWw+CisgPC9wcm9qZWN0PgorPC93ZWJwcm9qZWN0PgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvaHRtbC9zcGVleC54Y2YgYi8zcmRwYXJ0eS9zcGVleC9odG1sL3NwZWV4LnhjZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTU0NzEyCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvaHRtbC9zcGVleC54Y2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvaW5jbHVkZS9NYWtlZmlsZS5hbSBiLzNyZHBhcnR5L3NwZWV4L2luY2x1ZGUvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk2MTNiNgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2luY2x1ZGUvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwyIEBACisKK1NVQkRJUlMgPSBzcGVleApkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvaW5jbHVkZS9zcGVleC9NYWtlZmlsZS5hbSBiLzNyZHBhcnR5L3NwZWV4L2luY2x1ZGUvc3BlZXgvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjZDg4YgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2luY2x1ZGUvc3BlZXgvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxNiBAQAorIyBEaXNhYmxlIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nIGlmIHVzaW5nIG90aGVyIHRvb2xzIHRoYW4gZ2NjIGFuZCBnbWFrZQorI0FVVE9NQUtFX09QVElPTlMgPSBuby1kZXBlbmRlbmNpZXMKKworbm9kaXN0X3BrZ2luY2x1ZGVfSEVBREVSUyA9IHNwZWV4X2NvbmZpZ190eXBlcy5oCisKK3BrZ2luY2x1ZGVfSEVBREVSUyA9ICBzcGVleC5oIFwKKwlzcGVleF90eXBlcy5oIFwKKwlzcGVleF9iaXRzLmggXAorCXNwZWV4X2hlYWRlci5oIFwKKwlzcGVleF9jYWxsYmFja3MuaCBcCisJc3BlZXhfc3RlcmVvLmggXAorCXNwZWV4X3ByZXByb2Nlc3MuaCBcCisJc3BlZXhfaml0dGVyLmggXAorCXNwZWV4X2VjaG8uaCBcCisJc3BlZXhfcmVzYW1wbGVyLmgKKwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvaW5jbHVkZS9zcGVleC9zcGVleC5oIGIvM3JkcGFydHkvc3BlZXgvaW5jbHVkZS9zcGVleC9zcGVleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxN2ZhMTkKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9pbmNsdWRlL3NwZWV4L3NwZWV4LmgKQEAgLTAsMCArMSw0MjUgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMi0yMDA2IEplYW4tTWFyYyBWYWxpbiovCisvKioKKyAgQGZpbGUgc3BlZXguaAorICBAYnJpZWYgRGVzY3JpYmVzIHRoZSBkaWZmZXJlbnQgbW9kZXMgb2YgdGhlIGNvZGVjCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjaWZuZGVmIFNQRUVYX0gKKyNkZWZpbmUgU1BFRVhfSAorLyoqIEBkZWZncm91cCBDb2RlYyBTcGVleCBlbmNvZGVyIGFuZCBkZWNvZGVyCisgKiAgVGhpcyBpcyB0aGUgU3BlZXggY29kZWMgaXRzZWxmLgorICogIEB7CisgKi8KKworI2luY2x1ZGUgInNwZWV4L3NwZWV4X2JpdHMuaCIKKyNpbmNsdWRlICJzcGVleC9zcGVleF90eXBlcy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIFZhbHVlcyBhbGxvd2VkIGZvciAqY3RsKCkgcmVxdWVzdHMgKi8KKworLyoqIFNldCBlbmhhbmNlbWVudCBvbi9vZmYgKGRlY29kZXIgb25seSkgKi8KKyNkZWZpbmUgU1BFRVhfU0VUX0VOSCAwCisvKiogR2V0IGVuaGFuY2VtZW50IHN0YXRlIChkZWNvZGVyIG9ubHkpICovCisjZGVmaW5lIFNQRUVYX0dFVF9FTkggMQorCisvKldvdWxkIGJlIFNQRUVYX1NFVF9GUkFNRV9TSVpFLCBidXQgaXQncyAoY3VycmVudGx5KSBpbnZhbGlkKi8KKy8qKiBPYnRhaW4gZnJhbWUgc2l6ZSB1c2VkIGJ5IGVuY29kZXIvZGVjb2RlciAqLworI2RlZmluZSBTUEVFWF9HRVRfRlJBTUVfU0laRSAzCisKKy8qKiBTZXQgcXVhbGl0eSB2YWx1ZSAqLworI2RlZmluZSBTUEVFWF9TRVRfUVVBTElUWSA0CisvKiogR2V0IGN1cnJlbnQgcXVhbGl0eSBzZXR0aW5nICovCisvKiAjZGVmaW5lIFNQRUVYX0dFVF9RVUFMSVRZIDUgLS0gRG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UsIGRvZXMgaXQ/ICovCisKKy8qKiBTZXQgc3ViLW1vZGUgdG8gdXNlICovCisjZGVmaW5lIFNQRUVYX1NFVF9NT0RFIDYKKy8qKiBHZXQgY3VycmVudCBzdWItbW9kZSBpbiB1c2UgKi8KKyNkZWZpbmUgU1BFRVhfR0VUX01PREUgNworCisvKiogU2V0IGxvdy1iYW5kIHN1Yi1tb2RlIHRvIHVzZSAod2lkZWJhbmQgb25seSkqLworI2RlZmluZSBTUEVFWF9TRVRfTE9XX01PREUgOAorLyoqIEdldCBjdXJyZW50IGxvdy1iYW5kIG1vZGUgaW4gdXNlICh3aWRlYmFuZCBvbmx5KSovCisjZGVmaW5lIFNQRUVYX0dFVF9MT1dfTU9ERSA5CisKKy8qKiBTZXQgaGlnaC1iYW5kIHN1Yi1tb2RlIHRvIHVzZSAod2lkZWJhbmQgb25seSkqLworI2RlZmluZSBTUEVFWF9TRVRfSElHSF9NT0RFIDEwCisvKiogR2V0IGN1cnJlbnQgaGlnaC1iYW5kIG1vZGUgaW4gdXNlICh3aWRlYmFuZCBvbmx5KSovCisjZGVmaW5lIFNQRUVYX0dFVF9ISUdIX01PREUgMTEKKworLyoqIFNldCBWQlIgb24gKDEpIG9yIG9mZiAoMCkgKi8KKyNkZWZpbmUgU1BFRVhfU0VUX1ZCUiAxMgorLyoqIEdldCBWQlIgc3RhdHVzICgxIGZvciBvbiwgMCBmb3Igb2ZmKSAqLworI2RlZmluZSBTUEVFWF9HRVRfVkJSIDEzCisKKy8qKiBTZXQgcXVhbGl0eSB2YWx1ZSBmb3IgVkJSIGVuY29kaW5nICgwLTEwKSAqLworI2RlZmluZSBTUEVFWF9TRVRfVkJSX1FVQUxJVFkgMTQKKy8qKiBHZXQgY3VycmVudCBxdWFsaXR5IHZhbHVlIGZvciBWQlIgZW5jb2RpbmcgKDAtMTApICovCisjZGVmaW5lIFNQRUVYX0dFVF9WQlJfUVVBTElUWSAxNQorCisvKiogU2V0IGNvbXBsZXhpdHkgb2YgdGhlIGVuY29kZXIgKDAtMTApICovCisjZGVmaW5lIFNQRUVYX1NFVF9DT01QTEVYSVRZIDE2CisvKiogR2V0IGN1cnJlbnQgY29tcGxleGl0eSBvZiB0aGUgZW5jb2RlciAoMC0xMCkgKi8KKyNkZWZpbmUgU1BFRVhfR0VUX0NPTVBMRVhJVFkgMTcKKworLyoqIFNldCBiaXQtcmF0ZSB1c2VkIGJ5IHRoZSBlbmNvZGVyIChvciBsb3dlcikgKi8KKyNkZWZpbmUgU1BFRVhfU0VUX0JJVFJBVEUgMTgKKy8qKiBHZXQgY3VycmVudCBiaXQtcmF0ZSB1c2VkIGJ5IHRoZSBlbmNvZGVyIG9yIGRlY29kZXIgKi8KKyNkZWZpbmUgU1BFRVhfR0VUX0JJVFJBVEUgMTkKKworLyoqIERlZmluZSBhIGhhbmRsZXIgZnVuY3Rpb24gZm9yIGluLWJhbmQgU3BlZXggcmVxdWVzdCovCisjZGVmaW5lIFNQRUVYX1NFVF9IQU5ETEVSIDIwCisKKy8qKiBEZWZpbmUgYSBoYW5kbGVyIGZ1bmN0aW9uIGZvciBpbi1iYW5kIHVzZXItZGVmaW5lZCByZXF1ZXN0Ki8KKyNkZWZpbmUgU1BFRVhfU0VUX1VTRVJfSEFORExFUiAyMgorCisvKiogU2V0IHNhbXBsaW5nIHJhdGUgdXNlZCBpbiBiaXQtcmF0ZSBjb21wdXRhdGlvbiAqLworI2RlZmluZSBTUEVFWF9TRVRfU0FNUExJTkdfUkFURSAyNAorLyoqIEdldCBzYW1wbGluZyByYXRlIHVzZWQgaW4gYml0LXJhdGUgY29tcHV0YXRpb24gKi8KKyNkZWZpbmUgU1BFRVhfR0VUX1NBTVBMSU5HX1JBVEUgMjUKKworLyoqIFJlc2V0IHRoZSBlbmNvZGVyL2RlY29kZXIgbWVtb3JpZXMgdG8gemVybyovCisjZGVmaW5lIFNQRUVYX1JFU0VUX1NUQVRFIDI2CisKKy8qKiBHZXQgVkJSIGluZm8gKG1vc3RseSB1c2VkIGludGVybmFsbHkpICovCisjZGVmaW5lIFNQRUVYX0dFVF9SRUxBVElWRV9RVUFMSVRZIDI5CisKKy8qKiBTZXQgVkFEIHN0YXR1cyAoMSBmb3Igb24sIDAgZm9yIG9mZikgKi8KKyNkZWZpbmUgU1BFRVhfU0VUX1ZBRCAzMAorCisvKiogR2V0IFZBRCBzdGF0dXMgKDEgZm9yIG9uLCAwIGZvciBvZmYpICovCisjZGVmaW5lIFNQRUVYX0dFVF9WQUQgMzEKKworLyoqIFNldCBBdmVyYWdlIEJpdC1SYXRlIChBQlIpIHRvIG4gYml0cyBwZXIgc2Vjb25kcyAqLworI2RlZmluZSBTUEVFWF9TRVRfQUJSIDMyCisvKiogR2V0IEF2ZXJhZ2UgQml0LVJhdGUgKEFCUikgc2V0dGluZyAoaW4gYnBzKSAqLworI2RlZmluZSBTUEVFWF9HRVRfQUJSIDMzCisKKy8qKiBTZXQgRFRYIHN0YXR1cyAoMSBmb3Igb24sIDAgZm9yIG9mZikgKi8KKyNkZWZpbmUgU1BFRVhfU0VUX0RUWCAzNAorLyoqIEdldCBEVFggc3RhdHVzICgxIGZvciBvbiwgMCBmb3Igb2ZmKSAqLworI2RlZmluZSBTUEVFWF9HRVRfRFRYIDM1CisKKy8qKiBTZXQgc3VibW9kZSBlbmNvZGluZyBpbiBlYWNoIGZyYW1lICgxIGZvciB5ZXMsIDAgZm9yIG5vLCBzZXR0aW5nIHRvIG5vIGJyZWFrcyB0aGUgc3RhbmRhcmQpICovCisjZGVmaW5lIFNQRUVYX1NFVF9TVUJNT0RFX0VOQ09ESU5HIDM2CisvKiogR2V0IHN1Ym1vZGUgZW5jb2RpbmcgaW4gZWFjaCBmcmFtZSAqLworI2RlZmluZSBTUEVFWF9HRVRfU1VCTU9ERV9FTkNPRElORyAzNworCisvKiNkZWZpbmUgU1BFRVhfU0VUX0xPT0tBSEVBRCAzOCovCisvKiogUmV0dXJucyB0aGUgbG9va2FoZWFkIHVzZWQgYnkgU3BlZXggKi8KKyNkZWZpbmUgU1BFRVhfR0VUX0xPT0tBSEVBRCAzOQorCisvKiogU2V0cyB0dW5pbmcgZm9yIHBhY2tldC1sb3NzIGNvbmNlYWxtZW50IChleHBlY3RlZCBsb3NzIHJhdGUpICovCisjZGVmaW5lIFNQRUVYX1NFVF9QTENfVFVOSU5HIDQwCisvKiogR2V0cyB0dW5pbmcgZm9yIFBMQyAqLworI2RlZmluZSBTUEVFWF9HRVRfUExDX1RVTklORyA0MQorCisvKiogU2V0cyB0aGUgbWF4IGJpdC1yYXRlIGFsbG93ZWQgaW4gVkJSIG1vZGUgKi8KKyNkZWZpbmUgU1BFRVhfU0VUX1ZCUl9NQVhfQklUUkFURSA0MgorLyoqIEdldHMgdGhlIG1heCBiaXQtcmF0ZSBhbGxvd2VkIGluIFZCUiBtb2RlICovCisjZGVmaW5lIFNQRUVYX0dFVF9WQlJfTUFYX0JJVFJBVEUgNDMKKworLyoqIFR1cm4gb24vb2ZmIGlucHV0L291dHB1dCBoaWdoLXBhc3MgZmlsdGVyaW5nICovCisjZGVmaW5lIFNQRUVYX1NFVF9ISUdIUEFTUyA0NAorLyoqIEdldCBzdGF0dXMgb2YgaW5wdXQvb3V0cHV0IGhpZ2gtcGFzcyBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUgU1BFRVhfR0VUX0hJR0hQQVNTIDQ1CisKKworLyogUHJlc2VydmluZyBjb21wYXRpYmlsaXR5OiovCisvKiogRXF1aXZhbGVudCB0byBTUEVFWF9TRVRfRU5IICovCisjZGVmaW5lIFNQRUVYX1NFVF9QRiAwCisvKiogRXF1aXZhbGVudCB0byBTUEVFWF9HRVRfRU5IICovCisjZGVmaW5lIFNQRUVYX0dFVF9QRiAxCisKKworCisKKy8qIFZhbHVlcyBhbGxvd2VkIGZvciBtb2RlIHF1ZXJpZXMgKi8KKy8qKiBRdWVyeSB0aGUgZnJhbWUgc2l6ZSBvZiBhIG1vZGUgKi8KKyNkZWZpbmUgU1BFRVhfTU9ERV9GUkFNRV9TSVpFIDAKKworLyoqIFF1ZXJ5IHRoZSBzaXplIG9mIGFuIGVuY29kZWQgZnJhbWUgZm9yIGEgcGFydGljdWxhciBzdWItbW9kZSAqLworI2RlZmluZSBTUEVFWF9TVUJNT0RFX0JJVFNfUEVSX0ZSQU1FIDEKKworCisKKy8qKiBHZXQgbWFqb3IgU3BlZXggdmVyc2lvbiAqLworI2RlZmluZSBTUEVFWF9MSUJfR0VUX01BSk9SX1ZFUlNJT04gMQorLyoqIEdldCBtaW5vciBTcGVleCB2ZXJzaW9uICovCisjZGVmaW5lIFNQRUVYX0xJQl9HRVRfTUlOT1JfVkVSU0lPTiAzCisvKiogR2V0IG1pY3JvIFNwZWV4IHZlcnNpb24gKi8KKyNkZWZpbmUgU1BFRVhfTElCX0dFVF9NSUNST19WRVJTSU9OIDUKKy8qKiBHZXQgZXh0cmEgU3BlZXggdmVyc2lvbiAqLworI2RlZmluZSBTUEVFWF9MSUJfR0VUX0VYVFJBX1ZFUlNJT04gNworLyoqIEdldCBTcGVleCB2ZXJzaW9uIHN0cmluZyAqLworI2RlZmluZSBTUEVFWF9MSUJfR0VUX1ZFUlNJT05fU1RSSU5HIDkKKworLyojZGVmaW5lIFNQRUVYX0xJQl9TRVRfQUxMT0NfRlVOQyAxMAorI2RlZmluZSBTUEVFWF9MSUJfR0VUX0FMTE9DX0ZVTkMgMTEKKyNkZWZpbmUgU1BFRVhfTElCX1NFVF9GUkVFX0ZVTkMgMTIKKyNkZWZpbmUgU1BFRVhfTElCX0dFVF9GUkVFX0ZVTkMgMTMKKworI2RlZmluZSBTUEVFWF9MSUJfU0VUX1dBUk5JTkdfRlVOQyAxNAorI2RlZmluZSBTUEVFWF9MSUJfR0VUX1dBUk5JTkdfRlVOQyAxNQorI2RlZmluZSBTUEVFWF9MSUJfU0VUX0VSUk9SX0ZVTkMgMTYKKyNkZWZpbmUgU1BFRVhfTElCX0dFVF9FUlJPUl9GVU5DIDE3CisqLworCisvKiogTnVtYmVyIG9mIGRlZmluZWQgbW9kZXMgaW4gU3BlZXggKi8KKyNkZWZpbmUgU1BFRVhfTkJfTU9ERVMgMworCisvKiogbW9kZUlEIGZvciB0aGUgZGVmaW5lZCBuYXJyb3diYW5kIG1vZGUgKi8KKyNkZWZpbmUgU1BFRVhfTU9ERUlEX05CIDAKKworLyoqIG1vZGVJRCBmb3IgdGhlIGRlZmluZWQgd2lkZWJhbmQgbW9kZSAqLworI2RlZmluZSBTUEVFWF9NT0RFSURfV0IgMQorCisvKiogbW9kZUlEIGZvciB0aGUgZGVmaW5lZCB1bHRyYS13aWRlYmFuZCBtb2RlICovCisjZGVmaW5lIFNQRUVYX01PREVJRF9VV0IgMgorCisjaWZkZWYgRVBJQ180OEsKKy8qKiBtb2RlSUQgZm9yIHRoZSBFcGljIDQ4SyBtb2RlICovCisjZGVmaW5lIFNQRUVYX01PREVJRF9OQl80OEsgMTAwMAorI2VuZGlmCisKK3N0cnVjdCBTcGVleE1vZGU7CisKKworLyogUHJvdG90eXBlcyBmb3IgbW9kZSBmdW5jdGlvbiBwb2ludGVycyAqLworCisvKiogRW5jb2RlciBzdGF0ZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAqLwordHlwZWRlZiB2b2lkICooKmVuY29kZXJfaW5pdF9mdW5jKShjb25zdCBzdHJ1Y3QgU3BlZXhNb2RlICptb2RlKTsKKworLyoqIEVuY29kZXIgc3RhdGUgZGVzdHJ1Y3Rpb24gZnVuY3Rpb24gKi8KK3R5cGVkZWYgdm9pZCAoKmVuY29kZXJfZGVzdHJveV9mdW5jKSh2b2lkICpzdCk7CisKKy8qKiBNYWluIGVuY29kaW5nIGZ1bmN0aW9uICovCit0eXBlZGVmIGludCAoKmVuY29kZV9mdW5jKSh2b2lkICpzdGF0ZSwgdm9pZCAqaW4sIFNwZWV4Qml0cyAqYml0cyk7CisKKy8qKiBGdW5jdGlvbiBmb3IgY29udHJvbGxpbmcgdGhlIGVuY29kZXIgb3B0aW9ucyAqLwordHlwZWRlZiBpbnQgKCplbmNvZGVyX2N0bF9mdW5jKSh2b2lkICpzdGF0ZSwgaW50IHJlcXVlc3QsIHZvaWQgKnB0cik7CisKKy8qKiBEZWNvZGVyIHN0YXRlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uICovCit0eXBlZGVmIHZvaWQgKigqZGVjb2Rlcl9pbml0X2Z1bmMpKGNvbnN0IHN0cnVjdCBTcGVleE1vZGUgKm1vZGUpOworCisvKiogRGVjb2RlciBzdGF0ZSBkZXN0cnVjdGlvbiBmdW5jdGlvbiAqLwordHlwZWRlZiB2b2lkICgqZGVjb2Rlcl9kZXN0cm95X2Z1bmMpKHZvaWQgKnN0KTsKKworLyoqIE1haW4gZGVjb2RpbmcgZnVuY3Rpb24gKi8KK3R5cGVkZWYgaW50ICAoKmRlY29kZV9mdW5jKSh2b2lkICpzdGF0ZSwgU3BlZXhCaXRzICpiaXRzLCB2b2lkICpvdXQpOworCisvKiogRnVuY3Rpb24gZm9yIGNvbnRyb2xsaW5nIHRoZSBkZWNvZGVyIG9wdGlvbnMgKi8KK3R5cGVkZWYgaW50ICgqZGVjb2Rlcl9jdGxfZnVuYykodm9pZCAqc3RhdGUsIGludCByZXF1ZXN0LCB2b2lkICpwdHIpOworCisKKy8qKiBRdWVyeSBmdW5jdGlvbiBmb3IgYSBtb2RlICovCit0eXBlZGVmIGludCAoKm1vZGVfcXVlcnlfZnVuYykoY29uc3Qgdm9pZCAqbW9kZSwgaW50IHJlcXVlc3QsIHZvaWQgKnB0cik7CisKKy8qKiBTdHJ1Y3QgZGVmaW5pbmcgYSBTcGVleCBtb2RlICovIAordHlwZWRlZiBzdHJ1Y3QgU3BlZXhNb2RlIHsKKyAgIC8qKiBQb2ludGVyIHRvIHRoZSBsb3ctbGV2ZWwgbW9kZSBkYXRhICovCisgICBjb25zdCB2b2lkICptb2RlOworCisgICAvKiogUG9pbnRlciB0byB0aGUgbW9kZSBxdWVyeSBmdW5jdGlvbiAqLworICAgbW9kZV9xdWVyeV9mdW5jIHF1ZXJ5OworICAgCisgICAvKiogVGhlIG5hbWUgb2YgdGhlIG1vZGUgKHlvdSBzaG91bGQgbm90IHJlbHkgb24gdGhpcyB0byBpZGVudGlmeSB0aGUgbW9kZSkqLworICAgY29uc3QgY2hhciAqbW9kZU5hbWU7CisKKyAgIC8qKklEIG9mIHRoZSBtb2RlKi8KKyAgIGludCBtb2RlSUQ7CisKKyAgIC8qKlZlcnNpb24gbnVtYmVyIG9mIHRoZSBiaXRzdHJlYW0gKGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgd2UgYnJlYWsKKyAgICBiaXRzdHJlYW0gY29tcGF0aWJpbGl0eSovCisgICBpbnQgYml0c3RyZWFtX3ZlcnNpb247CisKKyAgIC8qKiBQb2ludGVyIHRvIGVuY29kZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKi8KKyAgIGVuY29kZXJfaW5pdF9mdW5jIGVuY19pbml0OworCisgICAvKiogUG9pbnRlciB0byBlbmNvZGVyIGRlc3RydWN0aW9uIGZ1bmN0aW9uICovCisgICBlbmNvZGVyX2Rlc3Ryb3lfZnVuYyBlbmNfZGVzdHJveTsKKworICAgLyoqIFBvaW50ZXIgdG8gZnJhbWUgZW5jb2RpbmcgZnVuY3Rpb24gKi8KKyAgIGVuY29kZV9mdW5jIGVuYzsKKworICAgLyoqIFBvaW50ZXIgdG8gZGVjb2RlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAqLworICAgZGVjb2Rlcl9pbml0X2Z1bmMgZGVjX2luaXQ7CisKKyAgIC8qKiBQb2ludGVyIHRvIGRlY29kZXIgZGVzdHJ1Y3Rpb24gZnVuY3Rpb24gKi8KKyAgIGRlY29kZXJfZGVzdHJveV9mdW5jIGRlY19kZXN0cm95OworCisgICAvKiogUG9pbnRlciB0byBmcmFtZSBkZWNvZGluZyBmdW5jdGlvbiAqLworICAgZGVjb2RlX2Z1bmMgZGVjOworCisgICAvKiogaW9jdGwtbGlrZSByZXF1ZXN0cyBmb3IgZW5jb2RlciAqLworICAgZW5jb2Rlcl9jdGxfZnVuYyBlbmNfY3RsOworCisgICAvKiogaW9jdGwtbGlrZSByZXF1ZXN0cyBmb3IgZGVjb2RlciAqLworICAgZGVjb2Rlcl9jdGxfZnVuYyBkZWNfY3RsOworCit9IFNwZWV4TW9kZTsKKworLyoqCisgKiBSZXR1cm5zIGEgaGFuZGxlIHRvIGEgbmV3bHkgY3JlYXRlZCBTcGVleCBlbmNvZGVyIHN0YXRlIHN0cnVjdHVyZS4gRm9yIG5vdywgCisgKiB0aGUgIm1vZGUiIGFyZ3VtZW50IGNhbiBiZSAmbmJfbW9kZSBvciAmd2JfbW9kZSAuIEluIHRoZSBmdXR1cmUsIG1vcmUgbW9kZXMgCisgKiBtYXkgYmUgYWRkZWQuIE5vdGUgdGhhdCBmb3Igbm93IGlmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgY2hhbm5lbHMgdG8gCisgKiBlbmNvZGUsIHlvdSBuZWVkIG9uZSBzdGF0ZSBwZXIgY2hhbm5lbC4KKyAqCisgKiBAcGFyYW0gbW9kZSBUaGUgbW9kZSB0byB1c2UgKGVpdGhlciBzcGVleF9uYl9tb2RlIG9yIHNwZWV4X3diLm1vZGUpIAorICogQHJldHVybiBBIG5ld2x5IGNyZWF0ZWQgZW5jb2RlciBzdGF0ZSBvciBOVUxMIGlmIHN0YXRlIGFsbG9jYXRpb24gZmFpbHMKKyAqLwordm9pZCAqc3BlZXhfZW5jb2Rlcl9pbml0KGNvbnN0IFNwZWV4TW9kZSAqbW9kZSk7CisKKy8qKiBGcmVlcyBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgdG8gYW4gZXhpc3RpbmcgU3BlZXggZW5jb2RlciBzdGF0ZS4gCisgKiBAcGFyYW0gc3RhdGUgRW5jb2RlciBzdGF0ZSB0byBiZSBkZXN0cm95ZWQgKi8KK3ZvaWQgc3BlZXhfZW5jb2Rlcl9kZXN0cm95KHZvaWQgKnN0YXRlKTsKKworLyoqIFVzZXMgYW4gZXhpc3RpbmcgZW5jb2RlciBzdGF0ZSB0byBlbmNvZGUgb25lIGZyYW1lIG9mIHNwZWVjaCBwb2ludGVkIHRvIGJ5CisgICAgImluIi4gVGhlIGVuY29kZWQgYml0LXN0cmVhbSBpcyBzYXZlZCBpbiAiYml0cyIuCisgQHBhcmFtIHN0YXRlIEVuY29kZXIgc3RhdGUKKyBAcGFyYW0gaW4gRnJhbWUgdGhhdCB3aWxsIGJlIGVuY29kZWQgd2l0aCBhICstMl4xNSByYW5nZS4gVGhpcyBkYXRhIE1BWSBiZSAKKyAgICAgICAgb3ZlcndyaXR0ZW4gYnkgdGhlIGVuY29kZXIgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkIHVuaW5pdGlhbGlzZWQgCisgICAgICAgIGFmdGVyIHRoZSBjYWxsLgorIEBwYXJhbSBiaXRzIEJpdC1zdHJlYW0gd2hlcmUgdGhlIGRhdGEgd2lsbCBiZSB3cml0dGVuCisgQHJldHVybiAwIGlmIGZyYW1lIG5lZWRzIG5vdCBiZSB0cmFuc21pdHRlZCAoRFRYIG9ubHkpLCAxIG90aGVyd2lzZQorICovCitpbnQgc3BlZXhfZW5jb2RlKHZvaWQgKnN0YXRlLCBmbG9hdCAqaW4sIFNwZWV4Qml0cyAqYml0cyk7CisKKy8qKiBVc2VzIGFuIGV4aXN0aW5nIGVuY29kZXIgc3RhdGUgdG8gZW5jb2RlIG9uZSBmcmFtZSBvZiBzcGVlY2ggcG9pbnRlZCB0byBieQorICAgICJpbiIuIFRoZSBlbmNvZGVkIGJpdC1zdHJlYW0gaXMgc2F2ZWQgaW4gImJpdHMiLgorIEBwYXJhbSBzdGF0ZSBFbmNvZGVyIHN0YXRlCisgQHBhcmFtIGluIEZyYW1lIHRoYXQgd2lsbCBiZSBlbmNvZGVkIHdpdGggYSArLTJeMTUgcmFuZ2UKKyBAcGFyYW0gYml0cyBCaXQtc3RyZWFtIHdoZXJlIHRoZSBkYXRhIHdpbGwgYmUgd3JpdHRlbgorIEByZXR1cm4gMCBpZiBmcmFtZSBuZWVkcyBub3QgYmUgdHJhbnNtaXR0ZWQgKERUWCBvbmx5KSwgMSBvdGhlcndpc2UKKyAqLworaW50IHNwZWV4X2VuY29kZV9pbnQodm9pZCAqc3RhdGUsIHNweF9pbnQxNl90ICppbiwgU3BlZXhCaXRzICpiaXRzKTsKKworLyoqIFVzZWQgbGlrZSB0aGUgaW9jdGwgZnVuY3Rpb24gdG8gY29udHJvbCB0aGUgZW5jb2RlciBwYXJhbWV0ZXJzCisgKgorICogQHBhcmFtIHN0YXRlIEVuY29kZXIgc3RhdGUKKyAqIEBwYXJhbSByZXF1ZXN0IGlvY3RsLXR5cGUgcmVxdWVzdCAob25lIG9mIHRoZSBTUEVFWF8qIG1hY3JvcykKKyAqIEBwYXJhbSBwdHIgRGF0YSBleGNoYW5nZWQgdG8tZnJvbSBmdW5jdGlvbgorICogQHJldHVybiAwIGlmIG5vIGVycm9yLCAtMSBpZiByZXF1ZXN0IGluIHVua25vd24sIC0yIGZvciBpbnZhbGlkIHBhcmFtZXRlcgorICovCitpbnQgc3BlZXhfZW5jb2Rlcl9jdGwodm9pZCAqc3RhdGUsIGludCByZXF1ZXN0LCB2b2lkICpwdHIpOworCisKKy8qKiBSZXR1cm5zIGEgaGFuZGxlIHRvIGEgbmV3bHkgY3JlYXRlZCBkZWNvZGVyIHN0YXRlIHN0cnVjdHVyZS4gRm9yIG5vdywgCisgKiB0aGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgJm5iX21vZGUgb3IgJndiX21vZGUgLiBJbiB0aGUgZnV0dXJlLCBtb3JlIG1vZGVzCisgKiBtYXkgYmUgYWRkZWQuICBOb3RlIHRoYXQgZm9yIG5vdyBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIGNoYW5uZWxzIHRvCisgKiBkZWNvZGUsIHlvdSBuZWVkIG9uZSBzdGF0ZSBwZXIgY2hhbm5lbC4KKyAqCisgKiBAcGFyYW0gbW9kZSBTcGVleCBtb2RlIChvbmUgb2Ygc3BlZXhfbmJfbW9kZSBvciBzcGVleF93Yl9tb2RlKQorICogQHJldHVybiBBIG5ld2x5IGNyZWF0ZWQgZGVjb2RlciBzdGF0ZSBvciBOVUxMIGlmIHN0YXRlIGFsbG9jYXRpb24gZmFpbHMKKyAqLyAKK3ZvaWQgKnNwZWV4X2RlY29kZXJfaW5pdChjb25zdCBTcGVleE1vZGUgKm1vZGUpOworCisvKiogRnJlZXMgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHRvIGFuIGV4aXN0aW5nIGRlY29kZXIgc3RhdGUuCisgKgorICogQHBhcmFtIHN0YXRlIFN0YXRlIHRvIGJlIGRlc3Ryb3llZAorICovCit2b2lkIHNwZWV4X2RlY29kZXJfZGVzdHJveSh2b2lkICpzdGF0ZSk7CisKKy8qKiBVc2VzIGFuIGV4aXN0aW5nIGRlY29kZXIgc3RhdGUgdG8gZGVjb2RlIG9uZSBmcmFtZSBvZiBzcGVlY2ggZnJvbQorICogYml0LXN0cmVhbSBiaXRzLiBUaGUgb3V0cHV0IHNwZWVjaCBpcyBzYXZlZCB3cml0dGVuIHRvIG91dC4KKyAqCisgKiBAcGFyYW0gc3RhdGUgRGVjb2RlciBzdGF0ZQorICogQHBhcmFtIGJpdHMgQml0LXN0cmVhbSBmcm9tIHdoaWNoIHRvIGRlY29kZSB0aGUgZnJhbWUgKE5VTEwgaWYgdGhlIHBhY2tldCB3YXMgbG9zdCkKKyAqIEBwYXJhbSBvdXQgV2hlcmUgdG8gd3JpdGUgdGhlIGRlY29kZWQgZnJhbWUKKyAqIEByZXR1cm4gcmV0dXJuIHN0YXR1cyAoMCBmb3Igbm8gZXJyb3IsIC0xIGZvciBlbmQgb2Ygc3RyZWFtLCAtMiBjb3JydXB0IHN0cmVhbSkKKyAqLworaW50IHNwZWV4X2RlY29kZSh2b2lkICpzdGF0ZSwgU3BlZXhCaXRzICpiaXRzLCBmbG9hdCAqb3V0KTsKKworLyoqIFVzZXMgYW4gZXhpc3RpbmcgZGVjb2RlciBzdGF0ZSB0byBkZWNvZGUgb25lIGZyYW1lIG9mIHNwZWVjaCBmcm9tCisgKiBiaXQtc3RyZWFtIGJpdHMuIFRoZSBvdXRwdXQgc3BlZWNoIGlzIHNhdmVkIHdyaXR0ZW4gdG8gb3V0LgorICoKKyAqIEBwYXJhbSBzdGF0ZSBEZWNvZGVyIHN0YXRlCisgKiBAcGFyYW0gYml0cyBCaXQtc3RyZWFtIGZyb20gd2hpY2ggdG8gZGVjb2RlIHRoZSBmcmFtZSAoTlVMTCBpZiB0aGUgcGFja2V0IHdhcyBsb3N0KQorICogQHBhcmFtIG91dCBXaGVyZSB0byB3cml0ZSB0aGUgZGVjb2RlZCBmcmFtZQorICogQHJldHVybiByZXR1cm4gc3RhdHVzICgwIGZvciBubyBlcnJvciwgLTEgZm9yIGVuZCBvZiBzdHJlYW0sIC0yIGNvcnJ1cHQgc3RyZWFtKQorICovCitpbnQgc3BlZXhfZGVjb2RlX2ludCh2b2lkICpzdGF0ZSwgU3BlZXhCaXRzICpiaXRzLCBzcHhfaW50MTZfdCAqb3V0KTsKKworLyoqIFVzZWQgbGlrZSB0aGUgaW9jdGwgZnVuY3Rpb24gdG8gY29udHJvbCB0aGUgZW5jb2RlciBwYXJhbWV0ZXJzCisgKgorICogQHBhcmFtIHN0YXRlIERlY29kZXIgc3RhdGUKKyAqIEBwYXJhbSByZXF1ZXN0IGlvY3RsLXR5cGUgcmVxdWVzdCAob25lIG9mIHRoZSBTUEVFWF8qIG1hY3JvcykKKyAqIEBwYXJhbSBwdHIgRGF0YSBleGNoYW5nZWQgdG8tZnJvbSBmdW5jdGlvbgorICogQHJldHVybiAwIGlmIG5vIGVycm9yLCAtMSBpZiByZXF1ZXN0IGluIHVua25vd24sIC0yIGZvciBpbnZhbGlkIHBhcmFtZXRlcgorICovCitpbnQgc3BlZXhfZGVjb2Rlcl9jdGwodm9pZCAqc3RhdGUsIGludCByZXF1ZXN0LCB2b2lkICpwdHIpOworCisKKy8qKiBRdWVyeSBmdW5jdGlvbiBmb3IgbW9kZSBpbmZvcm1hdGlvbgorICoKKyAqIEBwYXJhbSBtb2RlIFNwZWV4IG1vZGUKKyAqIEBwYXJhbSByZXF1ZXN0IGlvY3RsLXR5cGUgcmVxdWVzdCAob25lIG9mIHRoZSBTUEVFWF8qIG1hY3JvcykKKyAqIEBwYXJhbSBwdHIgRGF0YSBleGNoYW5nZWQgdG8tZnJvbSBmdW5jdGlvbgorICogQHJldHVybiAwIGlmIG5vIGVycm9yLCAtMSBpZiByZXF1ZXN0IGluIHVua25vd24sIC0yIGZvciBpbnZhbGlkIHBhcmFtZXRlcgorICovCitpbnQgc3BlZXhfbW9kZV9xdWVyeShjb25zdCBTcGVleE1vZGUgKm1vZGUsIGludCByZXF1ZXN0LCB2b2lkICpwdHIpOworCisvKiogRnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB0aGUgYmVoYXZpb3Igb2YgbGlic3BlZXgKKyAqIEBwYXJhbSByZXF1ZXN0IGlvY3RsLXR5cGUgcmVxdWVzdCAob25lIG9mIHRoZSBTUEVFWF9MSUJfKiBtYWNyb3MpCisgKiBAcGFyYW0gcHRyIERhdGEgZXhjaGFuZ2VkIHRvLWZyb20gZnVuY3Rpb24KKyAqIEByZXR1cm4gMCBpZiBubyBlcnJvciwgLTEgaWYgcmVxdWVzdCBpbiB1bmtub3duLCAtMiBmb3IgaW52YWxpZCBwYXJhbWV0ZXIKKyAqLworaW50IHNwZWV4X2xpYl9jdGwoaW50IHJlcXVlc3QsIHZvaWQgKnB0cik7CisKKy8qKiBEZWZhdWx0IG5hcnJvd2JhbmQgbW9kZSAqLworZXh0ZXJuIGNvbnN0IFNwZWV4TW9kZSBzcGVleF9uYl9tb2RlOworCisvKiogRGVmYXVsdCB3aWRlYmFuZCBtb2RlICovCitleHRlcm4gY29uc3QgU3BlZXhNb2RlIHNwZWV4X3diX21vZGU7CisKKy8qKiBEZWZhdWx0ICJ1bHRyYS13aWRlYmFuZCIgbW9kZSAqLworZXh0ZXJuIGNvbnN0IFNwZWV4TW9kZSBzcGVleF91d2JfbW9kZTsKKworI2lmZGVmIEVQSUNfNDhLCisvKiogNC44IGticHMgbmFycm93YmFuZCBtb2RlICovCitleHRlcm4gY29uc3QgU3BlZXhNb2RlIHNwZWV4X25iXzQ4a19tb2RlOworI2VuZGlmCisKKy8qKiBMaXN0IG9mIGFsbCBtb2RlcyBhdmFpbGFibGUgKi8KK2V4dGVybiBjb25zdCBTcGVleE1vZGUgKiBjb25zdCBzcGVleF9tb2RlX2xpc3RbU1BFRVhfTkJfTU9ERVNdOworCisvKiogT2J0YWluIG9uZSBvZiB0aGUgbW9kZXMgYXZhaWxhYmxlICovCitjb25zdCBTcGVleE1vZGUgKiBzcGVleF9saWJfZ2V0X21vZGUgKGludCBtb2RlKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworLyoqIEB9Ki8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvaW5jbHVkZS9zcGVleC9zcGVleF9iaXRzLmggYi8zcmRwYXJ0eS9zcGVleC9pbmNsdWRlL3NwZWV4L3NwZWV4X2JpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODMzNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvaW5jbHVkZS9zcGVleC9zcGVleF9iaXRzLmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiBKZWFuLU1hcmMgVmFsaW4gKi8KKy8qKgorICAgQGZpbGUgc3BlZXhfYml0cy5oCisgICBAYnJpZWYgSGFuZGxlcyBiaXQgcGFja2luZy91bnBhY2tpbmcKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyovCisKKyNpZm5kZWYgQklUU19ICisjZGVmaW5lIEJJVFNfSAorLyoqIEBkZWZncm91cCBTcGVleEJpdHMgU3BlZXhCaXRzOiBCaXQtc3RyZWFtIG1hbmlwdWxhdGlvbnMKKyAqICBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCBob2xkcyB0aGUgYml0LXN0cmVhbSB3aGVuIGVuY29kaW5nIG9yIGRlY29kaW5nCisgKiB3aXRoIFNwZWV4LiBJdCBhbGxvd3Mgc29tZSBtYW5pcHVsYXRpb25zIGFzIHdlbGwuCisgKiAgQHsKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKiBCaXQtcGFja2luZyBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgKHBhcnQgb2YpIGEgYml0LXN0cmVhbS4gKi8KK3R5cGVkZWYgc3RydWN0IFNwZWV4Qml0cyB7CisgICBjaGFyICpjaGFyczsgICAvKio8ICJyYXciIGRhdGEgKi8KKyAgIGludCAgIG5iQml0czsgIC8qKjwgVG90YWwgbnVtYmVyIG9mIGJpdHMgc3RvcmVkIGluIHRoZSBzdHJlYW0qLworICAgaW50ICAgY2hhclB0cjsgLyoqPCBQb3NpdGlvbiBvZiB0aGUgYnl0ZSAiY3Vyc29yIiAqLworICAgaW50ICAgYml0UHRyOyAgLyoqPCBQb3NpdGlvbiBvZiB0aGUgYml0ICJjdXJzb3IiIHdpdGhpbiB0aGUgY3VycmVudCBjaGFyICovCisgICBpbnQgICBvd25lcjsgICAvKio8IERvZXMgdGhlIHN0cnVjdCAib3duIiB0aGUgInJhdyIgYnVmZmVyIChtZW1iZXIgImNoYXJzIikgKi8KKyAgIGludCAgIG92ZXJmbG93Oy8qKjwgU2V0IHRvIG9uZSBpZiB3ZSB0cnkgdG8gcmVhZCBwYXN0IHRoZSB2YWxpZCBkYXRhICovCisgICBpbnQgICBidWZfc2l6ZTsvKio8IEFsbG9jYXRlZCBzaXplIGZvciBidWZmZXIgKi8KKyAgIGludCAgIHJlc2VydmVkMTsgLyoqPCBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworICAgdm9pZCAqcmVzZXJ2ZWQyOyAvKio8IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCit9IFNwZWV4Qml0czsKKworLyoqIEluaXRpYWxpemVzIGFuZCBhbGxvY2F0ZXMgcmVzb3VyY2VzIGZvciBhIFNwZWV4Qml0cyBzdHJ1Y3QgKi8KK3ZvaWQgc3BlZXhfYml0c19pbml0KFNwZWV4Qml0cyAqYml0cyk7CisKKy8qKiBJbml0aWFsaXplcyBTcGVleEJpdHMgc3RydWN0IHVzaW5nIGEgcHJlLWFsbG9jYXRlZCBidWZmZXIqLwordm9pZCBzcGVleF9iaXRzX2luaXRfYnVmZmVyKFNwZWV4Qml0cyAqYml0cywgdm9pZCAqYnVmZiwgaW50IGJ1Zl9zaXplKTsKKworLyoqIEZyZWVzIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB0byBhIFNwZWV4Qml0cyBzdHJ1Y3QuIFJpZ2h0IG5vdyB0aGlzIGRvZXMgbm90aGluZyBzaW5jZSBubyByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCwgYnV0IHRoaXMgY291bGQgY2hhbmdlIGluIHRoZSBmdXR1cmUuKi8KK3ZvaWQgc3BlZXhfYml0c19kZXN0cm95KFNwZWV4Qml0cyAqYml0cyk7CisKKy8qKiBSZXNldHMgYml0cyB0byBpbml0aWFsIHZhbHVlIChqdXN0IGFmdGVyIGluaXRpYWxpemF0aW9uLCBlcmFzaW5nIGNvbnRlbnQpKi8KK3ZvaWQgc3BlZXhfYml0c19yZXNldChTcGVleEJpdHMgKmJpdHMpOworCisvKiogUmV3aW5kIHRoZSBiaXQtc3RyZWFtIHRvIHRoZSBiZWdpbm5pbmcgKHJlYWR5IGZvciByZWFkKSB3aXRob3V0IGVyYXNpbmcgdGhlIGNvbnRlbnQgKi8KK3ZvaWQgc3BlZXhfYml0c19yZXdpbmQoU3BlZXhCaXRzICpiaXRzKTsKKworLyoqIEluaXRpYWxpemVzIHRoZSBiaXQtc3RyZWFtIGZyb20gdGhlIGRhdGEgaW4gYW4gYXJlYSBvZiBtZW1vcnkgKi8KK3ZvaWQgc3BlZXhfYml0c19yZWFkX2Zyb20oU3BlZXhCaXRzICpiaXRzLCBjaGFyICpieXRlcywgaW50IGxlbik7CisKKy8qKiBBcHBlbmQgYnl0ZXMgdG8gdGhlIGJpdC1zdHJlYW0KKyAqIAorICogQHBhcmFtIGJpdHMgQml0LXN0cmVhbSB0byBvcGVyYXRlIG9uCisgKiBAcGFyYW0gYnl0ZXMgcG9pbnRlciB0byB0aGUgYnl0ZXMgd2hhdCB3aWxsIGJlIGFwcGVuZGVkCisgKiBAcGFyYW0gbGVuIE51bWJlciBvZiBieXRlcyBvZiBhcHBlbmQKKyAqLwordm9pZCBzcGVleF9iaXRzX3JlYWRfd2hvbGVfYnl0ZXMoU3BlZXhCaXRzICpiaXRzLCBjaGFyICpieXRlcywgaW50IGxlbik7CisKKy8qKiBXcml0ZSB0aGUgY29udGVudCBvZiBhIGJpdC1zdHJlYW0gdG8gYW4gYXJlYSBvZiBtZW1vcnkKKyAqIAorICogQHBhcmFtIGJpdHMgQml0LXN0cmVhbSB0byBvcGVyYXRlIG9uCisgKiBAcGFyYW0gYnl0ZXMgTWVtb3J5IGxvY2F0aW9uIHdoZXJlIHRvIHdyaXRlIHRoZSBiaXRzCisgKiBAcGFyYW0gbWF4X2xlbiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB3cml0ZSAoaS5lLiBzaXplIG9mIHRoZSAiYnl0ZXMiIGJ1ZmZlcikKKyAqIEByZXR1cm4gTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gdGhlICJieXRlcyIgYnVmZmVyCisqLworaW50IHNwZWV4X2JpdHNfd3JpdGUoU3BlZXhCaXRzICpiaXRzLCBjaGFyICpieXRlcywgaW50IG1heF9sZW4pOworCisvKiogTGlrZSBzcGVleF9iaXRzX3dyaXRlLCBidXQgd3JpdGVzIG9ubHkgdGhlIGNvbXBsZXRlIGJ5dGVzIGluIHRoZSBzdHJlYW0uIEFsc28gcmVtb3ZlcyB0aGUgd3JpdHRlbiBieXRlcyBmcm9tIHRoZSBzdHJlYW0gKi8KK2ludCBzcGVleF9iaXRzX3dyaXRlX3dob2xlX2J5dGVzKFNwZWV4Qml0cyAqYml0cywgY2hhciAqYnl0ZXMsIGludCBtYXhfbGVuKTsKKworLyoqIEFwcGVuZCBiaXRzIHRvIHRoZSBiaXQtc3RyZWFtCisgKiBAcGFyYW0gYml0cyBCaXQtc3RyZWFtIHRvIG9wZXJhdGUgb24KKyAqIEBwYXJhbSBkYXRhIFZhbHVlIHRvIGFwcGVuZCBhcyBpbnRlZ2VyCisgKiBAcGFyYW0gbmJCaXRzIG51bWJlciBvZiBiaXRzIHRvIGNvbnNpZGVyIGluICJkYXRhIgorICovCit2b2lkIHNwZWV4X2JpdHNfcGFjayhTcGVleEJpdHMgKmJpdHMsIGludCBkYXRhLCBpbnQgbmJCaXRzKTsKKworLyoqIEludGVycHJldCB0aGUgbmV4dCBiaXRzIGluIHRoZSBiaXQtc3RyZWFtIGFzIGEgc2lnbmVkIGludGVnZXIKKyAqCisgKiBAcGFyYW0gYml0cyBCaXQtc3RyZWFtIHRvIG9wZXJhdGUgb24KKyAqIEBwYXJhbSBuYkJpdHMgTnVtYmVyIG9mIGJpdHMgdG8gaW50ZXJwcmV0CisgKiBAcmV0dXJuIEEgc2lnbmVkIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGJpdHMgcmVhZAorICovCitpbnQgc3BlZXhfYml0c191bnBhY2tfc2lnbmVkKFNwZWV4Qml0cyAqYml0cywgaW50IG5iQml0cyk7CisKKy8qKiBJbnRlcnByZXQgdGhlIG5leHQgYml0cyBpbiB0aGUgYml0LXN0cmVhbSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyCisgKgorICogQHBhcmFtIGJpdHMgQml0LXN0cmVhbSB0byBvcGVyYXRlIG9uCisgKiBAcGFyYW0gbmJCaXRzIE51bWJlciBvZiBiaXRzIHRvIGludGVycHJldAorICogQHJldHVybiBBbiB1bnNpZ25lZCBpbnRlZ2VyIHJlcHJlc2VudGVkIGJ5IHRoZSBiaXRzIHJlYWQKKyAqLwordW5zaWduZWQgaW50IHNwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKFNwZWV4Qml0cyAqYml0cywgaW50IG5iQml0cyk7CisKKy8qKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJpdC1zdHJlYW0sIGluY2x1ZGluZyB0aGUgbGFzdCBvbmUgZXZlbiBpZiBpdCBpcyBub3QgImZ1bGwiCisgKgorICogQHBhcmFtIGJpdHMgQml0LXN0cmVhbSB0byBvcGVyYXRlIG9uCisgKiBAcmV0dXJuIE51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyZWFtCisgKi8KK2ludCBzcGVleF9iaXRzX25ieXRlcyhTcGVleEJpdHMgKmJpdHMpOworCisvKiogU2FtZSBhcyBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZCwgYnV0IHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBjdXJzb3IgcG9zaXRpb24gCisgKiAKKyAqIEBwYXJhbSBiaXRzIEJpdC1zdHJlYW0gdG8gb3BlcmF0ZSBvbgorICogQHBhcmFtIG5iQml0cyBOdW1iZXIgb2YgYml0cyB0byBsb29rIGZvcgorICogQHJldHVybiBWYWx1ZSBvZiB0aGUgYml0cyBwZWVrZWQsIGludGVycHJldGVkIGFzIHVuc2lnbmVkCisgKi8KK3Vuc2lnbmVkIGludCBzcGVleF9iaXRzX3BlZWtfdW5zaWduZWQoU3BlZXhCaXRzICpiaXRzLCBpbnQgbmJCaXRzKTsKKworLyoqIEdldCB0aGUgdmFsdWUgb2YgdGhlIG5leHQgYml0IGluIHRoZSBzdHJlYW0sIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZQorICogImN1cnNvciIgcG9zaXRpb24gCisgKiAKKyAqIEBwYXJhbSBiaXRzIEJpdC1zdHJlYW0gdG8gb3BlcmF0ZSBvbgorICogQHJldHVybiBWYWx1ZSBvZiB0aGUgYml0IHBlZWtlZCAob25lIGJpdCBvbmx5KQorICovCitpbnQgc3BlZXhfYml0c19wZWVrKFNwZWV4Qml0cyAqYml0cyk7CisKKy8qKiBBZHZhbmNlcyB0aGUgcG9zaXRpb24gb2YgdGhlICJiaXQgY3Vyc29yIiBpbiB0aGUgc3RyZWFtIAorICoKKyAqIEBwYXJhbSBiaXRzIEJpdC1zdHJlYW0gdG8gb3BlcmF0ZSBvbgorICogQHBhcmFtIG4gTnVtYmVyIG9mIGJpdHMgdG8gYWR2YW5jZQorICovCit2b2lkIHNwZWV4X2JpdHNfYWR2YW5jZShTcGVleEJpdHMgKmJpdHMsIGludCBuKTsKKworLyoqIFJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIHJlbWFpbmluZyB0byBiZSByZWFkIGluIGEgc3RyZWFtCisgKgorICogQHBhcmFtIGJpdHMgQml0LXN0cmVhbSB0byBvcGVyYXRlIG9uCisgKiBAcmV0dXJuIE51bWJlciBvZiBiaXRzIHRoYXQgY2FuIHN0aWxsIGJlIHJlYWQgZnJvbSB0aGUgc3RyZWFtCisgKi8KK2ludCBzcGVleF9iaXRzX3JlbWFpbmluZyhTcGVleEJpdHMgKmJpdHMpOworCisvKiogSW5zZXJ0IGEgdGVybWluYXRvciBzbyB0aGF0IHRoZSBkYXRhIGNhbiBiZSBzZW50IGFzIGEgcGFja2V0IHdoaWxlIGF1dG8tZGV0ZWN0aW5nIAorICogdGhlIG51bWJlciBvZiBmcmFtZXMgaW4gZWFjaCBwYWNrZXQgCisgKgorICogQHBhcmFtIGJpdHMgQml0LXN0cmVhbSB0byBvcGVyYXRlIG9uCisgKi8KK3ZvaWQgc3BlZXhfYml0c19pbnNlcnRfdGVybWluYXRvcihTcGVleEJpdHMgKmJpdHMpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisvKiBAfSAqLworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9pbmNsdWRlL3NwZWV4L3NwZWV4X2NhbGxiYWNrcy5oIGIvM3JkcGFydHkvc3BlZXgvaW5jbHVkZS9zcGVleC9zcGVleF9jYWxsYmFja3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODkyZTJmCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvaW5jbHVkZS9zcGVleC9zcGVleF9jYWxsYmFja3MuaApAQCAtMCwwICsxLDEzNCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiovCisvKioKKyAgQGZpbGUgc3BlZXhfY2FsbGJhY2tzLmgKKyAgQGJyaWVmIERlc2NyaWJlcyBjYWxsYmFjayBoYW5kbGluZyBhbmQgaW4tYmFuZCBzaWduYWxsaW5nCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjaWZuZGVmIFNQRUVYX0NBTExCQUNLU19ICisjZGVmaW5lIFNQRUVYX0NBTExCQUNLU19ICisvKiogQGRlZmdyb3VwIFNwZWV4Q2FsbGJhY2tzIFZhcmlvdXMgZGVmaW5pdGlvbnMgZm9yIFNwZWV4IGNhbGxiYWNrcyBzdXBwb3J0ZWQgYnkgdGhlIGRlY29kZXIuCisgKiAgQHsKKyAqLworCisjaW5jbHVkZSAic3BlZXguaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogVG90YWwgbnVtYmVyIG9mIGNhbGxiYWNrcyAqLworI2RlZmluZSBTUEVFWF9NQVhfQ0FMTEJBQ0tTIDE2CisKKy8qIERlc2NyaWJlcyBhbGwgdGhlIGluLWJhbmQgcmVxdWVzdHMgKi8KKworLypUaGVzZSBhcmUgMS1iaXQgcmVxdWVzdHMqLworLyoqIFJlcXVlc3QgZm9yIHBlcmNlcHR1YWwgZW5oYW5jZW1lbnQgKDEgZm9yIG9uLCAwIGZvciBvZmYpICovCisjZGVmaW5lIFNQRUVYX0lOQkFORF9FTkhfUkVRVUVTVCAgICAgICAgIDAKKy8qKiBSZXNlcnZlZCAqLworI2RlZmluZSBTUEVFWF9JTkJBTkRfUkVTRVJWRUQxICAgICAgICAgICAxCisKKy8qVGhlc2UgYXJlIDQtYml0IHJlcXVlc3RzKi8KKy8qKiBSZXF1ZXN0IGZvciBhIG1vZGUgY2hhbmdlICovCisjZGVmaW5lIFNQRUVYX0lOQkFORF9NT0RFX1JFUVVFU1QgICAgICAgIDIKKy8qKiBSZXF1ZXN0IGZvciBhIGxvdyBtb2RlIGNoYW5nZSAqLworI2RlZmluZSBTUEVFWF9JTkJBTkRfTE9XX01PREVfUkVRVUVTVCAgICAzCisvKiogUmVxdWVzdCBmb3IgYSBoaWdoIG1vZGUgY2hhbmdlICovCisjZGVmaW5lIFNQRUVYX0lOQkFORF9ISUdIX01PREVfUkVRVUVTVCAgIDQKKy8qKiBSZXF1ZXN0IGZvciBWQlIgKDEgb24sIDAgb2ZmKSAqLworI2RlZmluZSBTUEVFWF9JTkJBTkRfVkJSX1FVQUxJVFlfUkVRVUVTVCA1CisvKiogUmVxdWVzdCB0byBiZSBzZW50IGFja25vd2xlZGdlICovCisjZGVmaW5lIFNQRUVYX0lOQkFORF9BQ0tOT1dMRURHRV9SRVFVRVNUIDYKKy8qKiBSZXF1ZXN0IGZvciBWQlIgKDEgZm9yIG9uLCAwIGZvciBvZmYpICovCisjZGVmaW5lIFNQRUVYX0lOQkFORF9WQlJfUkVRVUVTVCAgICAgICAgIDcKKworLypUaGVzZSBhcmUgOC1iaXQgcmVxdWVzdHMqLworLyoqIFNlbmQgYSBjaGFyYWN0ZXIgaW4tYmFuZCAqLworI2RlZmluZSBTUEVFWF9JTkJBTkRfQ0hBUiAgICAgICAgICAgICAgICA4CisvKiogSW50ZW5zaXR5IHN0ZXJlbyBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBTUEVFWF9JTkJBTkRfU1RFUkVPICAgICAgICAgICAgICA5CisKKy8qVGhlc2UgYXJlIDE2LWJpdCByZXF1ZXN0cyovCisvKiogVHJhbnNtaXQgbWF4IGJpdC1yYXRlIGFsbG93ZWQgKi8KKyNkZWZpbmUgU1BFRVhfSU5CQU5EX01BWF9CSVRSQVRFICAgICAgICAgMTAKKworLypUaGVzZSBhcmUgMzItYml0IHJlcXVlc3RzKi8KKy8qKiBBY2tub3dsZWRnZSBwYWNrZXQgcmVjZXB0aW9uICovCisjZGVmaW5lIFNQRUVYX0lOQkFORF9BQ0tOT1dMRURHRSAgICAgICAgIDEyCisKKy8qKiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlICovCit0eXBlZGVmIGludCAoKnNwZWV4X2NhbGxiYWNrX2Z1bmMpKFNwZWV4Qml0cyAqYml0cywgdm9pZCAqc3RhdGUsIHZvaWQgKmRhdGEpOworCisvKiogQ2FsbGJhY2sgaW5mb3JtYXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IFNwZWV4Q2FsbGJhY2sgeworICAgaW50IGNhbGxiYWNrX2lkOyAgICAgICAgICAgICAvKio8IElEIGFzc29jaWF0ZWQgdG8gdGhlIGNhbGxiYWNrICovCisgICBzcGVleF9jYWxsYmFja19mdW5jIGZ1bmM7ICAgIC8qKjwgQ2FsbGJhY2sgaGFuZGxlciBmdW5jdGlvbiAqLworICAgdm9pZCAqZGF0YTsgICAgICAgICAgICAgICAgICAvKio8IERhdGEgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIGhhbmRsZXIgKi8KKyAgIHZvaWQgKnJlc2VydmVkMTsgICAgICAgICAgICAgLyoqPCBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworICAgaW50ICAgcmVzZXJ2ZWQyOyAgICAgICAgICAgICAvKio8IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCit9IFNwZWV4Q2FsbGJhY2s7CisKKy8qKiBIYW5kbGUgaW4tYmFuZCByZXF1ZXN0ICovCitpbnQgc3BlZXhfaW5iYW5kX2hhbmRsZXIoU3BlZXhCaXRzICpiaXRzLCBTcGVleENhbGxiYWNrICpjYWxsYmFja19saXN0LCB2b2lkICpzdGF0ZSk7CisKKy8qKiBTdGFuZGFyZCBoYW5kbGVyIGZvciBtb2RlIHJlcXVlc3QgKGNoYW5nZSBtb2RlLCBubyBxdWVzdGlvbnMgYXNrZWQpICovCitpbnQgc3BlZXhfc3RkX21vZGVfcmVxdWVzdF9oYW5kbGVyKFNwZWV4Qml0cyAqYml0cywgdm9pZCAqc3RhdGUsIHZvaWQgKmRhdGEpOworCisvKiogU3RhbmRhcmQgaGFuZGxlciBmb3IgaGlnaCBtb2RlIHJlcXVlc3QgKGNoYW5nZSBoaWdoIG1vZGUsIG5vIHF1ZXN0aW9ucyBhc2tlZCkgKi8KK2ludCBzcGVleF9zdGRfaGlnaF9tb2RlX3JlcXVlc3RfaGFuZGxlcihTcGVleEJpdHMgKmJpdHMsIHZvaWQgKnN0YXRlLCB2b2lkICpkYXRhKTsKKworLyoqIFN0YW5kYXJkIGhhbmRsZXIgZm9yIGluLWJhbmQgY2hhcmFjdGVycyAod3JpdGUgdG8gc3RkZXJyKSAqLworaW50IHNwZWV4X3N0ZF9jaGFyX2hhbmRsZXIoU3BlZXhCaXRzICpiaXRzLCB2b2lkICpzdGF0ZSwgdm9pZCAqZGF0YSk7CisKKy8qKiBEZWZhdWx0IGhhbmRsZXIgZm9yIHVzZXItZGVmaW5lZCByZXF1ZXN0czogaW4gdGhpcyBjYXNlLCBqdXN0IGlnbm9yZSAqLworaW50IHNwZWV4X2RlZmF1bHRfdXNlcl9oYW5kbGVyKFNwZWV4Qml0cyAqYml0cywgdm9pZCAqc3RhdGUsIHZvaWQgKmRhdGEpOworCisKKworLyoqIFN0YW5kYXJkIGhhbmRsZXIgZm9yIGxvdyBtb2RlIHJlcXVlc3QgKGNoYW5nZSBsb3cgbW9kZSwgbm8gcXVlc3Rpb25zIGFza2VkKSAqLworaW50IHNwZWV4X3N0ZF9sb3dfbW9kZV9yZXF1ZXN0X2hhbmRsZXIoU3BlZXhCaXRzICpiaXRzLCB2b2lkICpzdGF0ZSwgdm9pZCAqZGF0YSk7CisKKy8qKiBTdGFuZGFyZCBoYW5kbGVyIGZvciBWQlIgcmVxdWVzdCAoU2V0IFZCUiwgbm8gcXVlc3Rpb25zIGFza2VkKSAqLworaW50IHNwZWV4X3N0ZF92YnJfcmVxdWVzdF9oYW5kbGVyKFNwZWV4Qml0cyAqYml0cywgdm9pZCAqc3RhdGUsIHZvaWQgKmRhdGEpOworCisvKiogU3RhbmRhcmQgaGFuZGxlciBmb3IgZW5oYW5jZXIgcmVxdWVzdCAoVHVybiBlaG5hbmNlciBvbi9vZmYsIG5vIHF1ZXN0aW9ucyBhc2tlZCkgKi8KK2ludCBzcGVleF9zdGRfZW5oX3JlcXVlc3RfaGFuZGxlcihTcGVleEJpdHMgKmJpdHMsIHZvaWQgKnN0YXRlLCB2b2lkICpkYXRhKTsKKworLyoqIFN0YW5kYXJkIGhhbmRsZXIgZm9yIFZCUiBxdWFsaXR5IHJlcXVlc3QgKFNldCBWQlIgcXVhbGl0eSwgbm8gcXVlc3Rpb25zIGFza2VkKSAqLworaW50IHNwZWV4X3N0ZF92YnJfcXVhbGl0eV9yZXF1ZXN0X2hhbmRsZXIoU3BlZXhCaXRzICpiaXRzLCB2b2lkICpzdGF0ZSwgdm9pZCAqZGF0YSk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworLyoqIEB9ICovCisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2luY2x1ZGUvc3BlZXgvc3BlZXhfY29uZmlnX3R5cGVzLmguaW4gYi8zcmRwYXJ0eS9zcGVleC9pbmNsdWRlL3NwZWV4L3NwZWV4X2NvbmZpZ190eXBlcy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYWIyYWUKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9pbmNsdWRlL3NwZWV4L3NwZWV4X2NvbmZpZ190eXBlcy5oLmluCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX19TUEVFWF9UWVBFU19IX18KKyNkZWZpbmUgX19TUEVFWF9UWVBFU19IX18KKworLyogdGhlc2UgYXJlIGZpbGxlZCBpbiBieSBjb25maWd1cmUgKi8KK3R5cGVkZWYgQFNJWkUxNkAgc3B4X2ludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIEBTSVpFMTZAIHNweF91aW50MTZfdDsKK3R5cGVkZWYgQFNJWkUzMkAgc3B4X2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIEBTSVpFMzJAIHNweF91aW50MzJfdDsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2luY2x1ZGUvc3BlZXgvc3BlZXhfZWNoby5oIGIvM3JkcGFydHkvc3BlZXgvaW5jbHVkZS9zcGVleC9zcGVleF9lY2hvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQzNThjNwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2luY2x1ZGUvc3BlZXgvc3BlZXhfZWNoby5oCkBAIC0wLDAgKzEsMTIzIEBACisvKiBDb3B5cmlnaHQgKEMpIEplYW4tTWFyYyBWYWxpbiAqLworLyoqCisgICBAZmlsZSBzcGVleF9lY2hvLmgKKyAgIEBicmllZiBFY2hvIGNhbmNlbGxhdGlvbgorKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAgIG1ldDoKKworICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgICBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgICBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgICBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIFNQRUVYX0VDSE9fSAorI2RlZmluZSBTUEVFWF9FQ0hPX0gKKy8qKiBAZGVmZ3JvdXAgU3BlZXhFY2hvU3RhdGUgU3BlZXhFY2hvU3RhdGU6IEFjb3VzdGljIGVjaG8gY2FuY2VsbGVyCisgKiAgVGhpcyBpcyB0aGUgYWNvdXN0aWMgZWNobyBjYW5jZWxsZXIgbW9kdWxlLgorICogIEB7CisgKi8KKyNpbmNsdWRlICJzcGVleC9zcGVleF90eXBlcy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKiBPYnRhaW4gZnJhbWUgc2l6ZSB1c2VkIGJ5IHRoZSBBRUMgKi8KKyNkZWZpbmUgU1BFRVhfRUNIT19HRVRfRlJBTUVfU0laRSAzCisKKy8qKiBTZXQgc2FtcGxpbmcgcmF0ZSAqLworI2RlZmluZSBTUEVFWF9FQ0hPX1NFVF9TQU1QTElOR19SQVRFIDI0CisvKiogR2V0IHNhbXBsaW5nIHJhdGUgKi8KKyNkZWZpbmUgU1BFRVhfRUNIT19HRVRfU0FNUExJTkdfUkFURSAyNQorCisvKiogSW50ZXJuYWwgZWNobyBjYW5jZWxsZXIgc3RhdGUuIFNob3VsZCBuZXZlciBiZSBhY2Nlc3NlZCBkaXJlY3RseS4gKi8KK3N0cnVjdCBTcGVleEVjaG9TdGF0ZV87CisKKy8qKiBAY2xhc3MgU3BlZXhFY2hvU3RhdGUKKyAqIFRoaXMgaG9sZHMgdGhlIHN0YXRlIG9mIHRoZSBlY2hvIGNhbmNlbGxlci4gWW91IG5lZWQgb25lIHBlciBjaGFubmVsLiAKKyovCisKKy8qKiBJbnRlcm5hbCBlY2hvIGNhbmNlbGxlciBzdGF0ZS4gU2hvdWxkIG5ldmVyIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LiAqLwordHlwZWRlZiBzdHJ1Y3QgU3BlZXhFY2hvU3RhdGVfIFNwZWV4RWNob1N0YXRlOworCisvKiogQ3JlYXRlcyBhIG5ldyBlY2hvIGNhbmNlbGxlciBzdGF0ZQorICogQHBhcmFtIGZyYW1lX3NpemUgTnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcyBhdCBvbmUgdGltZSAoc2hvdWxkIGNvcnJlc3BvbmQgdG8gMTAtMjAgbXMpCisgKiBAcGFyYW0gZmlsdGVyX2xlbmd0aCBOdW1iZXIgb2Ygc2FtcGxlcyBvZiBlY2hvIHRvIGNhbmNlbCAoc2hvdWxkIGdlbmVyYWxseSBjb3JyZXNwb25kIHRvIDEwMC01MDAgbXMpCisgKiBAcmV0dXJuIE5ld2x5LWNyZWF0ZWQgZWNobyBjYW5jZWxsZXIgc3RhdGUKKyAqLworU3BlZXhFY2hvU3RhdGUgKnNwZWV4X2VjaG9fc3RhdGVfaW5pdChpbnQgZnJhbWVfc2l6ZSwgaW50IGZpbHRlcl9sZW5ndGgpOworCisvKiogRGVzdHJveXMgYW4gZWNobyBjYW5jZWxsZXIgc3RhdGUgCisgKiBAcGFyYW0gc3QgRWNobyBjYW5jZWxsZXIgc3RhdGUKKyovCit2b2lkIHNwZWV4X2VjaG9fc3RhdGVfZGVzdHJveShTcGVleEVjaG9TdGF0ZSAqc3QpOworCisvKiogUGVyZm9ybXMgZWNobyBjYW5jZWxsYXRpb24gYSBmcmFtZSwgYmFzZWQgb24gdGhlIGF1ZGlvIHNlbnQgdG8gdGhlIHNwZWFrZXIgKG5vIGRlbGF5IGlzIGFkZGVkCisgKiB0byBwbGF5YmFjayBuaSB0aGlzIGZvcm0pCisgKgorICogQHBhcmFtIHN0IEVjaG8gY2FuY2VsbGVyIHN0YXRlCisgKiBAcGFyYW0gcmVjIHNpZ25hbCBmcm9tIHRoZSBtaWNyb3Bob25lIChuZWFyIGVuZCArIGZhciBlbmQgZWNobykKKyAqIEBwYXJhbSBwbGF5IFNpZ25hbCBwbGF5ZWQgdG8gdGhlIHNwZWFrZXIgKHJlY2VpdmVkIGZyb20gZmFyIGVuZCkKKyAqIEBwYXJhbSBvdXQgUmV0dXJucyBuZWFyLWVuZCBzaWduYWwgd2l0aCBlY2hvIHJlbW92ZWQKKyAqLwordm9pZCBzcGVleF9lY2hvX2NhbmNlbGxhdGlvbihTcGVleEVjaG9TdGF0ZSAqc3QsIGNvbnN0IHNweF9pbnQxNl90ICpyZWMsIGNvbnN0IHNweF9pbnQxNl90ICpwbGF5LCBzcHhfaW50MTZfdCAqb3V0KTsKKworLyoqIFBlcmZvcm1zIGVjaG8gY2FuY2VsbGF0aW9uIGEgZnJhbWUgKGRlcHJlY2F0ZWQpICovCit2b2lkIHNwZWV4X2VjaG9fY2FuY2VsKFNwZWV4RWNob1N0YXRlICpzdCwgY29uc3Qgc3B4X2ludDE2X3QgKnJlYywgY29uc3Qgc3B4X2ludDE2X3QgKnBsYXksIHNweF9pbnQxNl90ICpvdXQsIHNweF9pbnQzMl90ICpZb3V0KTsKKworLyoqIFBlcmZvcm0gZWNobyBjYW5jZWxsYXRpb24gdXNpbmcgaW50ZXJuYWwgcGxheWJhY2sgYnVmZmVyLCB3aGljaCBpcyBkZWxheWVkIGJ5IHR3byBmcmFtZXMKKyAqIHRvIGFjY291bnQgZm9yIHRoZSBkZWxheSBpbnRyb2R1Y2VkIGJ5IG1vc3Qgc291bmRjYXJkcyAoYnV0IGl0IGNvdWxkIGJlIG9mZiEpCisgKiBAcGFyYW0gc3QgRWNobyBjYW5jZWxsZXIgc3RhdGUKKyAqIEBwYXJhbSByZWMgc2lnbmFsIGZyb20gdGhlIG1pY3JvcGhvbmUgKG5lYXIgZW5kICsgZmFyIGVuZCBlY2hvKQorICogQHBhcmFtIG91dCBSZXR1cm5zIG5lYXItZW5kIHNpZ25hbCB3aXRoIGVjaG8gcmVtb3ZlZAorKi8KK3ZvaWQgc3BlZXhfZWNob19jYXB0dXJlKFNwZWV4RWNob1N0YXRlICpzdCwgY29uc3Qgc3B4X2ludDE2X3QgKnJlYywgc3B4X2ludDE2X3QgKm91dCk7CisKKy8qKiBMZXQgdGhlIGVjaG8gY2FuY2VsbGVyIGtub3cgdGhhdCBhIGZyYW1lIHdhcyBqdXN0IHF1ZXVlZCB0byB0aGUgc291bmRjYXJkCisgKiBAcGFyYW0gc3QgRWNobyBjYW5jZWxsZXIgc3RhdGUKKyAqIEBwYXJhbSBwbGF5IFNpZ25hbCBwbGF5ZWQgdG8gdGhlIHNwZWFrZXIgKHJlY2VpdmVkIGZyb20gZmFyIGVuZCkKKyovCit2b2lkIHNwZWV4X2VjaG9fcGxheWJhY2soU3BlZXhFY2hvU3RhdGUgKnN0LCBjb25zdCBzcHhfaW50MTZfdCAqcGxheSk7CisKKy8qKiBSZXNldCB0aGUgZWNobyBjYW5jZWxsZXIgdG8gaXRzIG9yaWdpbmFsIHN0YXRlIAorICogQHBhcmFtIHN0IEVjaG8gY2FuY2VsbGVyIHN0YXRlCisgKi8KK3ZvaWQgc3BlZXhfZWNob19zdGF0ZV9yZXNldChTcGVleEVjaG9TdGF0ZSAqc3QpOworCisvKiogVXNlZCBsaWtlIHRoZSBpb2N0bCBmdW5jdGlvbiB0byBjb250cm9sIHRoZSBlY2hvIGNhbmNlbGxlciBwYXJhbWV0ZXJzCisgKgorICogQHBhcmFtIHN0IEVjaG8gY2FuY2VsbGVyIHN0YXRlCisgKiBAcGFyYW0gcmVxdWVzdCBpb2N0bC10eXBlIHJlcXVlc3QgKG9uZSBvZiB0aGUgU1BFRVhfRUNIT18qIG1hY3JvcykKKyAqIEBwYXJhbSBwdHIgRGF0YSBleGNoYW5nZWQgdG8tZnJvbSBmdW5jdGlvbgorICogQHJldHVybiAwIGlmIG5vIGVycm9yLCAtMSBpZiByZXF1ZXN0IGluIHVua25vd24KKyAqLworaW50IHNwZWV4X2VjaG9fY3RsKFNwZWV4RWNob1N0YXRlICpzdCwgaW50IHJlcXVlc3QsIHZvaWQgKnB0cik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworLyoqIEB9Ki8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvaW5jbHVkZS9zcGVleC9zcGVleF9oZWFkZXIuaCBiLzNyZHBhcnR5L3NwZWV4L2luY2x1ZGUvc3BlZXgvc3BlZXhfaGVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQxNjQ1OQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2luY2x1ZGUvc3BlZXgvc3BlZXhfaGVhZGVyLmgKQEAgLTAsMCArMSw5MSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAqLworLyoqCisgICBAZmlsZSBzcGVleF9oZWFkZXIuaAorICAgQGJyaWVmIERlc2NyaWJlcyB0aGUgU3BlZXggaGVhZGVyCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisKKyNpZm5kZWYgU1BFRVhfSEVBREVSX0gKKyNkZWZpbmUgU1BFRVhfSEVBREVSX0gKKy8qKiBAZGVmZ3JvdXAgU3BlZXhIZWFkZXIgU3BlZXhIZWFkZXI6IE1ha2VzIGl0IGVhc3kgdG8gd3JpdGUvcGFyc2UgYW4gT2dnL1NwZWV4IGhlYWRlcgorICogIFRoaXMgaXMgdGhlIFNwZWV4IGhlYWRlciBmb3IgdGhlIE9nZyBlbmNhcHN1bGF0aW9uLiBZb3UgZG9uJ3QgbmVlZCB0aGF0IGlmIHlvdSBqdXN0IHVzZSBSVFAuCisgKiAgQHsKKyAqLworCisjaW5jbHVkZSAic3BlZXgvc3BlZXhfdHlwZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitzdHJ1Y3QgU3BlZXhNb2RlOworCisvKiogTGVuZ3RoIG9mIHRoZSBTcGVleCBoZWFkZXIgaWRlbnRpZmllciAqLworI2RlZmluZSBTUEVFWF9IRUFERVJfU1RSSU5HX0xFTkdUSCA4CisKKy8qKiBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGZvciBlbmNvZGluZyB0aGUgU3BlZXggdmVyc2lvbiBudW1iZXIgaW4gdGhlIGhlYWRlciAqLworI2RlZmluZSBTUEVFWF9IRUFERVJfVkVSU0lPTl9MRU5HVEggMjAKKworLyoqIFNwZWV4IGhlYWRlciBpbmZvIGZvciBmaWxlLWJhc2VkIGZvcm1hdHMgKi8KK3R5cGVkZWYgc3RydWN0IFNwZWV4SGVhZGVyIHsKKyAgIGNoYXIgc3BlZXhfc3RyaW5nW1NQRUVYX0hFQURFUl9TVFJJTkdfTEVOR1RIXTsgICAvKio8IElkZW50aWZpZXMgYSBTcGVleCBiaXQtc3RyZWFtLCBhbHdheXMgc2V0IHRvICJTcGVleCAgICIgKi8KKyAgIGNoYXIgc3BlZXhfdmVyc2lvbltTUEVFWF9IRUFERVJfVkVSU0lPTl9MRU5HVEhdOyAvKio8IFNwZWV4IHZlcnNpb24gKi8gCisgICBzcHhfaW50MzJfdCBzcGVleF92ZXJzaW9uX2lkOyAgICAgICAvKio8IFZlcnNpb24gZm9yIFNwZWV4IChmb3IgY2hlY2tpbmcgY29tcGF0aWJpbGl0eSkgKi8KKyAgIHNweF9pbnQzMl90IGhlYWRlcl9zaXplOyAgICAgICAgICAgIC8qKjwgVG90YWwgc2l6ZSBvZiB0aGUgaGVhZGVyICggc2l6ZW9mKFNwZWV4SGVhZGVyKSApICovCisgICBzcHhfaW50MzJfdCByYXRlOyAgICAgICAgICAgICAgICAgICAvKio8IFNhbXBsaW5nIHJhdGUgdXNlZCAqLworICAgc3B4X2ludDMyX3QgbW9kZTsgICAgICAgICAgICAgICAgICAgLyoqPCBNb2RlIHVzZWQgKDAgZm9yIG5hcnJvd2JhbmQsIDEgZm9yIHdpZGViYW5kKSAqLworICAgc3B4X2ludDMyX3QgbW9kZV9iaXRzdHJlYW1fdmVyc2lvbjsgLyoqPCBWZXJzaW9uIElEIG9mIHRoZSBiaXQtc3RyZWFtICovCisgICBzcHhfaW50MzJfdCBuYl9jaGFubmVsczsgICAgICAgICAgICAvKio8IE51bWJlciBvZiBjaGFubmVscyBlbmNvZGVkICovCisgICBzcHhfaW50MzJfdCBiaXRyYXRlOyAgICAgICAgICAgICAgICAvKio8IEJpdC1yYXRlIHVzZWQgKi8KKyAgIHNweF9pbnQzMl90IGZyYW1lX3NpemU7ICAgICAgICAgICAgIC8qKjwgU2l6ZSBvZiBmcmFtZXMgKi8KKyAgIHNweF9pbnQzMl90IHZicjsgICAgICAgICAgICAgICAgICAgIC8qKjwgMSBmb3IgYSBWQlIgZW5jb2RpbmcsIDAgb3RoZXJ3aXNlICovCisgICBzcHhfaW50MzJfdCBmcmFtZXNfcGVyX3BhY2tldDsgICAgICAvKio8IE51bWJlciBvZiBmcmFtZXMgc3RvcmVkIHBlciBPZ2cgcGFja2V0ICovCisgICBzcHhfaW50MzJfdCBleHRyYV9oZWFkZXJzOyAgICAgICAgICAvKio8IE51bWJlciBvZiBhZGRpdGlvbmFsIGhlYWRlcnMgYWZ0ZXIgdGhlIGNvbW1lbnRzICovCisgICBzcHhfaW50MzJfdCByZXNlcnZlZDE7ICAgICAgICAgICAgICAvKio8IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIHplcm8gKi8KKyAgIHNweF9pbnQzMl90IHJlc2VydmVkMjsgICAgICAgICAgICAgIC8qKjwgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIG11c3QgYmUgemVybyAqLworfSBTcGVleEhlYWRlcjsKKworLyoqIEluaXRpYWxpemVzIGEgU3BlZXhIZWFkZXIgdXNpbmcgYmFzaWMgaW5mb3JtYXRpb24gKi8KK3ZvaWQgc3BlZXhfaW5pdF9oZWFkZXIoU3BlZXhIZWFkZXIgKmhlYWRlciwgaW50IHJhdGUsIGludCBuYl9jaGFubmVscywgY29uc3Qgc3RydWN0IFNwZWV4TW9kZSAqbSk7CisKKy8qKiBDcmVhdGVzIHRoZSBoZWFkZXIgcGFja2V0IGZyb20gdGhlIGhlYWRlciBpdHNlbGYgKG1vc3RseSBpbnZvbHZlcyBlbmRpYW5uZXNzIGNvbnZlcnNpb24pICovCitjaGFyICpzcGVleF9oZWFkZXJfdG9fcGFja2V0KFNwZWV4SGVhZGVyICpoZWFkZXIsIGludCAqc2l6ZSk7CisKKy8qKiBDcmVhdGVzIGEgU3BlZXhIZWFkZXIgZnJvbSBhIHBhY2tldCAqLworU3BlZXhIZWFkZXIgKnNwZWV4X3BhY2tldF90b19oZWFkZXIoY2hhciAqcGFja2V0LCBpbnQgc2l6ZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKy8qKiBAfSAqLworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9pbmNsdWRlL3NwZWV4L3NwZWV4X2ppdHRlci5oIGIvM3JkcGFydHkvc3BlZXgvaW5jbHVkZS9zcGVleC9zcGVleF9qaXR0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzBlMjJiCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvaW5jbHVkZS9zcGVleC9zcGVleF9qaXR0ZXIuaApAQCAtMCwwICsxLDE5MiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAqLworLyoqCisgICBAZmlsZSBzcGVleF9qaXR0ZXIuaAorICAgQGJyaWVmIEFkYXB0aXZlIGppdHRlciBidWZmZXIgZm9yIFNwZWV4CisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjaWZuZGVmIFNQRUVYX0pJVFRFUl9ICisjZGVmaW5lIFNQRUVYX0pJVFRFUl9ICisvKiogQGRlZmdyb3VwIEppdHRlckJ1ZmZlciBKaXR0ZXJCdWZmZXI6IEFkYXB0aXZlIGppdHRlciBidWZmZXIKKyAqICBUaGlzIGlzIHRoZSBqaXR0ZXIgYnVmZmVyIHRoYXQgcmVvcmRlcnMgVURQL1JUUCBwYWNrZXRzIGFuZCBhZGp1c3RzIHRoZSBidWZmZXIgc2l6ZQorICogdG8gbWFpbnRhaW4gZ29vZCBxdWFsaXR5IGFuZCBsb3cgbGF0ZW5jeS4KKyAqICBAeworICovCisKKyNpbmNsdWRlICJzcGVleC5oIgorI2luY2x1ZGUgInNwZWV4X2JpdHMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogR2VuZXJpYyBhZGFwdGl2ZSBqaXR0ZXIgYnVmZmVyIHN0YXRlICovCitzdHJ1Y3QgSml0dGVyQnVmZmVyXzsKKworLyoqIEdlbmVyaWMgYWRhcHRpdmUgaml0dGVyIGJ1ZmZlciBzdGF0ZSAqLwordHlwZWRlZiBzdHJ1Y3QgSml0dGVyQnVmZmVyXyBKaXR0ZXJCdWZmZXI7CisKKy8qKiBEZWZpbml0aW9uIG9mIGFuIGluY29taW5nIHBhY2tldCAqLwordHlwZWRlZiBzdHJ1Y3QgX0ppdHRlckJ1ZmZlclBhY2tldCBKaXR0ZXJCdWZmZXJQYWNrZXQ7CisKKy8qKiBEZWZpbml0aW9uIG9mIGFuIGluY29taW5nIHBhY2tldCAqLworc3RydWN0IF9KaXR0ZXJCdWZmZXJQYWNrZXQgeworICAgY2hhciAgICAgICAgKmRhdGE7ICAgICAgIC8qKjwgRGF0YSBieXRlcyBjb250YWluZWQgaW4gdGhlIHBhY2tldCAqLworICAgc3B4X3VpbnQzMl90IGxlbjsgICAgICAgIC8qKjwgTGVuZ3RoIG9mIHRoZSBwYWNrZXQgaW4gYnl0ZXMgKi8KKyAgIHNweF91aW50MzJfdCB0aW1lc3RhbXA7ICAvKio8IFRpbWVzdGFtcCBmb3IgdGhlIHBhY2tldCAqLworICAgc3B4X3VpbnQzMl90IHNwYW47ICAgICAgIC8qKjwgVGltZSBjb3ZlcmVkIGJ5IHRoZSBwYWNrZXQgKHNhbWUgdW5pdHMgYXMgdGltZXN0YW1wKSAqLworfTsKKworLyoqIFBhY2tldCBoYXMgYmVlbiByZXRyaWV2ZWQgKi8KKyNkZWZpbmUgSklUVEVSX0JVRkZFUl9PSyAwCisvKiogUGFja2V0IGlzIG1pc3NpbmcgKi8KKyNkZWZpbmUgSklUVEVSX0JVRkZFUl9NSVNTSU5HIDEKKy8qKiBQYWNrZXQgaXMgaW5jb21wbGV0ZSAoZG9lcyBub3QgY292ZXIgdGhlIGVudGl2ZSB0aWNrICovCisjZGVmaW5lIEpJVFRFUl9CVUZGRVJfSU5DT01QTEVURSAyCisvKiogVGhlcmUgd2FzIGFuIGVycm9yIGluIHRoZSBqaXR0ZXIgYnVmZmVyICovCisjZGVmaW5lIEpJVFRFUl9CVUZGRVJfSU5URVJOQUxfRVJST1IgLTEKKy8qKiBJbnZhbGlkIGFyZ3VtZW50ICovCisjZGVmaW5lIEpJVFRFUl9CVUZGRVJfQkFEX0FSR1VNRU5UIC0yCisKKworLyoqIFNldCBtaW5pbXVtIGFtb3VudCBvZiBleHRyYSBidWZmZXJpbmcgcmVxdWlyZWQgKG1hcmdpbikgKi8KKyNkZWZpbmUgSklUVEVSX0JVRkZFUl9TRVRfTUFSR0lOIDAKKy8qKiBHZXQgbWluaW11bSBhbW91bnQgb2YgZXh0cmEgYnVmZmVyaW5nIHJlcXVpcmVkIChtYXJnaW4pICovCisjZGVmaW5lIEpJVFRFUl9CVUZGRVJfR0VUX01BUkdJTiAxCisvKiBKSVRURVJfQlVGRkVSX1NFVF9BVkFMSUFCTEVfQ09VTlQgd291bGRuJ3QgbWFrZSBzZW5zZSAqLworLyoqIEdldCB0aGUgYW1vdW50IG9mIGF2YWxpYWJsZSBwYWNrZXRzIGN1cnJlbnRseSBidWZmZXJlZCAqLworI2RlZmluZSBKSVRURVJfQlVGRkVSX0dFVF9BVkFMSUFCTEVfQ09VTlQgMworCisjZGVmaW5lIEpJVFRFUl9CVUZGRVJfQURKVVNUX0lOVEVSUE9MQVRFIC0xCisjZGVmaW5lIEpJVFRFUl9CVUZGRVJfQURKVVNUX09LIDAKKyNkZWZpbmUgSklUVEVSX0JVRkZFUl9BREpVU1RfRFJPUCAxCisKKy8qKiBJbml0aWFsaXNlcyBqaXR0ZXIgYnVmZmVyIAorICogCisgKiBAcGFyYW0gdGljayBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgInRpY2siLCBpLmUuIHRoZSB0aW1lIHBlcmlvZCBvZiB0aGUgZWxlbWVudHMgdGhhdCB3aWxsIGJlIHJldHJpZXZlZAorICogQHJldHVybiBOZXdseSBjcmVhdGVkIGppdHRlciBidWZmZXIgc3RhdGUKKyAqLworSml0dGVyQnVmZmVyICpqaXR0ZXJfYnVmZmVyX2luaXQoaW50IHRpY2spOworCisvKiogUmVzdG9yZXMgaml0dGVyIGJ1ZmZlciB0byBpdHMgb3JpZ2luYWwgc3RhdGUgCisgKiAKKyAqIEBwYXJhbSBqaXR0ZXIgSml0dGVyIGJ1ZmZlciBzdGF0ZQorICovCit2b2lkIGppdHRlcl9idWZmZXJfcmVzZXQoSml0dGVyQnVmZmVyICpqaXR0ZXIpOworCisvKiogRGVzdHJveXMgaml0dGVyIGJ1ZmZlciAKKyAqIAorICogQHBhcmFtIGppdHRlciBKaXR0ZXIgYnVmZmVyIHN0YXRlCisgKi8KK3ZvaWQgaml0dGVyX2J1ZmZlcl9kZXN0cm95KEppdHRlckJ1ZmZlciAqaml0dGVyKTsKKworLyoqIFB1dCBvbmUgcGFja2V0IGludG8gdGhlIGppdHRlciBidWZmZXIKKyAqIAorICogQHBhcmFtIGppdHRlciBKaXR0ZXIgYnVmZmVyIHN0YXRlCisgKiBAcGFyYW0gcGFja2V0IEluY29taW5nIHBhY2tldAorKi8KK3ZvaWQgaml0dGVyX2J1ZmZlcl9wdXQoSml0dGVyQnVmZmVyICpqaXR0ZXIsIGNvbnN0IEppdHRlckJ1ZmZlclBhY2tldCAqcGFja2V0KTsKKworLyoqIEdldCBvbmUgcGFja2V0IGZyb20gdGhlIGppdHRlciBidWZmZXIKKyAqIAorICogQHBhcmFtIGppdHRlciBKaXR0ZXIgYnVmZmVyIHN0YXRlCisgKiBAcGFyYW0gcGFja2V0IFJldHVybmVkIHBhY2tldAorICogQHBhcmFtIGN1cnJlbnRfdGltZXN0YW1wIFRpbWVzdGFtcCBmb3IgdGhlIHJldHVybmVkIHBhY2tldCAKKyovCitpbnQgaml0dGVyX2J1ZmZlcl9nZXQoSml0dGVyQnVmZmVyICpqaXR0ZXIsIEppdHRlckJ1ZmZlclBhY2tldCAqcGFja2V0LCBzcHhfaW50MzJfdCAqc3RhcnRfb2Zmc2V0KTsKKworLyoqIEdldCBwb2ludGVyIHRpbWVzdGFtcCBvZiBqaXR0ZXIgYnVmZmVyCisgKiAKKyAqIEBwYXJhbSBqaXR0ZXIgSml0dGVyIGJ1ZmZlciBzdGF0ZQorKi8KK2ludCBqaXR0ZXJfYnVmZmVyX2dldF9wb2ludGVyX3RpbWVzdGFtcChKaXR0ZXJCdWZmZXIgKmppdHRlcik7CisKKy8qKiBBZHZhbmNlIGJ5IG9uZSB0aWNrCisgKiAKKyAqIEBwYXJhbSBqaXR0ZXIgSml0dGVyIGJ1ZmZlciBzdGF0ZQorKi8KK3ZvaWQgaml0dGVyX2J1ZmZlcl90aWNrKEppdHRlckJ1ZmZlciAqaml0dGVyKTsKKworLyoqIFVzZWQgbGlrZSB0aGUgaW9jdGwgZnVuY3Rpb24gdG8gY29udHJvbCB0aGUgaml0dGVyIGJ1ZmZlciBwYXJhbWV0ZXJzCisgKiAKKyAqIEBwYXJhbSBqaXR0ZXIgSml0dGVyIGJ1ZmZlciBzdGF0ZQorICogQHBhcmFtIHJlcXVlc3QgaW9jdGwtdHlwZSByZXF1ZXN0IChvbmUgb2YgdGhlIEpJVFRFUl9CVUZGRVJfKiBtYWNyb3MpCisgKiBAcGFyYW0gcHRyIERhdGEgZXhjaGFuZ2VkIHRvLWZyb20gZnVuY3Rpb24KKyAqIEByZXR1cm4gMCBpZiBubyBlcnJvciwgLTEgaWYgcmVxdWVzdCBpbiB1bmtub3duCisqLworaW50IGppdHRlcl9idWZmZXJfY3RsKEppdHRlckJ1ZmZlciAqaml0dGVyLCBpbnQgcmVxdWVzdCwgdm9pZCAqcHRyKTsKKworaW50IGppdHRlcl9idWZmZXJfdXBkYXRlX2RlbGF5KEppdHRlckJ1ZmZlciAqaml0dGVyLCBKaXR0ZXJCdWZmZXJQYWNrZXQgKnBhY2tldCwgc3B4X2ludDMyX3QgKnN0YXJ0X29mZnNldCk7CisKKy8qIEB9ICovCisKKy8qKiBAZGVmZ3JvdXAgU3BlZXhKaXR0ZXIgU3BlZXhKaXR0ZXI6IEFkYXB0aXZlIGppdHRlciBidWZmZXIgc3BlY2lmaWNhbGx5IGZvciBTcGVleAorICogIFRoaXMgaXMgdGhlIGppdHRlciBidWZmZXIgdGhhdCByZW9yZGVycyBVRFAvUlRQIHBhY2tldHMgYW5kIGFkanVzdHMgdGhlIGJ1ZmZlciBzaXplCisgKiB0byBtYWludGFpbiBnb29kIHF1YWxpdHkgYW5kIGxvdyBsYXRlbmN5LiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIHRoYXQgd29ya3Mgb25seQorICogd2l0aCBTcGVleCwgYnV0IGlzIG11Y2ggZWFzaWVyIHRvIHVzZS4KKyAqICBAeworKi8KKworLyoqIFNwZWV4IGppdHRlci1idWZmZXIgc3RhdGUuIE5ldmVyIHVzZSBpdCBkaXJlY3RseSEgKi8KK3R5cGVkZWYgc3RydWN0IFNwZWV4Sml0dGVyIHsKKyAgIFNwZWV4Qml0cyBjdXJyZW50X3BhY2tldDsgICAgICAgICAvKio8IEN1cnJlbnQgU3BlZXggcGFja2V0ICovCisgICBpbnQgdmFsaWRfYml0czsgICAgICAgICAgICAgICAgICAgLyoqPCBUcnVlIGlmIFNwZWV4IGJpdHMgYXJlIHZhbGlkICovCisgICBKaXR0ZXJCdWZmZXIgKnBhY2tldHM7ICAgICAgICAgICAgLyoqPCBHZW5lcmljIGppdHRlciBidWZmZXIgc3RhdGUgKi8KKyAgIHZvaWQgKmRlYzsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBvaW50ZXIgdG8gU3BlZXggZGVjb2RlciAqLworICAgc3B4X2ludDMyX3QgZnJhbWVfc2l6ZTsgICAgICAgICAgIC8qKjwgRnJhbWUgc2l6ZSBvZiBTcGVleCBkZWNvZGVyICovCit9IFNwZWV4Sml0dGVyOworCisvKiogSW5pdGlhbGlzZSBqaXR0ZXIgYnVmZmVyIAorICogCisgKiBAcGFyYW0gaml0dGVyIFN0YXRlIG9mIHRoZSBTcGVleCBqaXR0ZXIgYnVmZmVyCisgKiBAcGFyYW0gZGVjb2RlciBTcGVleCBkZWNvZGVyIHRvIGNhbGwKKyAqIEBwYXJhbSBzYW1wbGluZ19yYXRlIFNhbXBsaW5nIHJhdGUgdXNlZCBieSB0aGUgZGVjb2RlcgorKi8KK3ZvaWQgc3BlZXhfaml0dGVyX2luaXQoU3BlZXhKaXR0ZXIgKmppdHRlciwgdm9pZCAqZGVjb2RlciwgaW50IHNhbXBsaW5nX3JhdGUpOworCisvKiogRGVzdHJveSBqaXR0ZXIgYnVmZmVyICovCit2b2lkIHNwZWV4X2ppdHRlcl9kZXN0cm95KFNwZWV4Sml0dGVyICpqaXR0ZXIpOworCisvKiogUHV0IG9uZSBwYWNrZXQgaW50byB0aGUgaml0dGVyIGJ1ZmZlciAqLwordm9pZCBzcGVleF9qaXR0ZXJfcHV0KFNwZWV4Sml0dGVyICpqaXR0ZXIsIGNoYXIgKnBhY2tldCwgaW50IGxlbiwgaW50IHRpbWVzdGFtcCk7CisKKy8qKiBHZXQgb25lIHBhY2tldCBmcm9tIHRoZSBqaXR0ZXIgYnVmZmVyICovCit2b2lkIHNwZWV4X2ppdHRlcl9nZXQoU3BlZXhKaXR0ZXIgKmppdHRlciwgc3B4X2ludDE2X3QgKm91dCwgaW50ICpzdGFydF9vZmZzZXQpOworCisvKiogR2V0IHBvaW50ZXIgdGltZXN0YW1wIG9mIGppdHRlciBidWZmZXIgKi8KK2ludCBzcGVleF9qaXR0ZXJfZ2V0X3BvaW50ZXJfdGltZXN0YW1wKFNwZWV4Sml0dGVyICpqaXR0ZXIpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisvKiBAfSAqLworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9pbmNsdWRlL3NwZWV4L3NwZWV4X3ByZXByb2Nlc3MuaCBiLzNyZHBhcnR5L3NwZWV4L2luY2x1ZGUvc3BlZXgvc3BlZXhfcHJlcHJvY2Vzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YjBhYWIKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9pbmNsdWRlL3NwZWV4L3NwZWV4X3ByZXByb2Nlc3MuaApAQCAtMCwwICsxLDE4NiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAzIEVwaWMgR2FtZXMKKyAgIFdyaXR0ZW4gYnkgSmVhbi1NYXJjIFZhbGluICovCisvKioKKyAqICBAZmlsZSBzcGVleF9wcmVwcm9jZXNzLmgKKyAqICBAYnJpZWYgU3BlZXggcHJlcHJvY2Vzc29yLiBUaGUgcHJlcHJvY2VzcyBjYW4gZG8gbm9pc2Ugc3VwcHJlc3Npb24sIAorICogcmVzaWR1YWwgZWNobyBzdXBwcmVzc2lvbiAoYWZ0ZXIgdXNpbmcgdGhlIGVjaG8gY2FuY2VsbGVyKSwgYXV0b21hdGljCisgKiBnYWluIGNvbnRyb2wgKEFHQykgYW5kIHZvaWNlIGFjdGl2aXR5IGRldGVjdGlvbiAoVkFEKS4KKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgICBtZXQ6CisKKyAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICAgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICAgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAgIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgICBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBTUEVFWF9QUkVQUk9DRVNTX0gKKyNkZWZpbmUgU1BFRVhfUFJFUFJPQ0VTU19ICisvKiogQGRlZmdyb3VwIFNwZWV4UHJlcHJvY2Vzc1N0YXRlIFNwZWV4UHJlcHJvY2Vzc1N0YXRlOiBUaGUgU3BlZXggcHJlcHJvY2Vzc29yCisgKiAgVGhpcyBpcyB0aGUgU3BlZXggcHJlcHJvY2Vzc29yLiBUaGUgcHJlcHJvY2VzcyBjYW4gZG8gbm9pc2Ugc3VwcHJlc3Npb24sIAorICogcmVzaWR1YWwgZWNobyBzdXBwcmVzc2lvbiAoYWZ0ZXIgdXNpbmcgdGhlIGVjaG8gY2FuY2VsbGVyKSwgYXV0b21hdGljCisgKiBnYWluIGNvbnRyb2wgKEFHQykgYW5kIHZvaWNlIGFjdGl2aXR5IGRldGVjdGlvbiAoVkFEKS4KKyAqICBAeworICovCisKKyNpbmNsdWRlICJzcGVleC9zcGVleF90eXBlcy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisgICAKKy8qKiBTdGF0ZSBvZiB0aGUgcHJlcHJvY2Vzc29yIChvbmUgcGVyIGNoYW5uZWwpLiBTaG91bGQgbmV2ZXIgYmUgYWNjZXNzZWQgZGlyZWN0bHkuICovCitzdHJ1Y3QgU3BlZXhQcmVwcm9jZXNzU3RhdGVfOworCisvKiogU3RhdGUgb2YgdGhlIHByZXByb2Nlc3NvciAob25lIHBlciBjaGFubmVsKS4gU2hvdWxkIG5ldmVyIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LiAqLwordHlwZWRlZiBzdHJ1Y3QgU3BlZXhQcmVwcm9jZXNzU3RhdGVfIFNwZWV4UHJlcHJvY2Vzc1N0YXRlOworCisKKy8qKiBDcmVhdGVzIGEgbmV3IHByZXByb2Nlc3Npbmcgc3RhdGUuIFlvdSBNVVNUIGNyZWF0ZSBvbmUgc3RhdGUgcGVyIGNoYW5uZWwgcHJvY2Vzc2VkLgorICogQHBhcmFtIGZyYW1lX3NpemUgTnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcyBhdCBvbmUgdGltZSAoc2hvdWxkIGNvcnJlc3BvbmQgdG8gMTAtMjAgbXMpLiBNdXN0IGJlCisgKiB0aGUgc2FtZSB2YWx1ZSBhcyB0aGF0IHVzZWQgZm9yIHRoZSBlY2hvIGNhbmNlbGxlciBmb3IgcmVzaWR1YWwgZWNobyBjYW5jZWxsYXRpb24gdG8gd29yay4KKyAqIEBwYXJhbSBzYW1wbGluZ19yYXRlIFNhbXBsaW5nIHJhdGUgdXNlZCBmb3IgdGhlIGlucHV0LgorICogQHJldHVybiBOZXdseSBjcmVhdGVkIHByZXByb2Nlc3NvciBzdGF0ZQorKi8KK1NwZWV4UHJlcHJvY2Vzc1N0YXRlICpzcGVleF9wcmVwcm9jZXNzX3N0YXRlX2luaXQoaW50IGZyYW1lX3NpemUsIGludCBzYW1wbGluZ19yYXRlKTsKKworLyoqIERlc3Ryb3lzIGEgcHJlcHJvY2Vzc29yIHN0YXRlIAorICogQHBhcmFtIHN0IFByZXByb2Nlc3NvciBzdGF0ZSB0byBkZXN0cm95CisqLwordm9pZCBzcGVleF9wcmVwcm9jZXNzX3N0YXRlX2Rlc3Ryb3koU3BlZXhQcmVwcm9jZXNzU3RhdGUgKnN0KTsKKworLyoqIFByZXByb2Nlc3MgYSBmcmFtZSAKKyAqIEBwYXJhbSBzdCBQcmVwcm9jZXNzb3Igc3RhdGUKKyAqIEBwYXJhbSB4IEF1ZGlvIHNhbXBsZSB2ZWN0b3IgKGluIGFuZCBvdXQpLiBNdXN0IGJlIHNhbWUgc2l6ZSBhcyBzcGVjaWZpZWQgaW4gc3BlZXhfcHJlcHJvY2Vzc19zdGF0ZV9pbml0KCkuCisgKiBAcmV0dXJuIEJvb2wgdmFsdWUgZm9yIHZvaWNlIGFjdGl2aXR5ICgxIGZvciBzcGVlY2gsIDAgZm9yIG5vaXNlL3NpbGVuY2UpLCBPTkxZIGlmIFZBRCB0dXJuZWQgb24uCisqLworaW50IHNwZWV4X3ByZXByb2Nlc3NfcnVuKFNwZWV4UHJlcHJvY2Vzc1N0YXRlICpzdCwgc3B4X2ludDE2X3QgKngpOworCisvKiogUHJlcHJvY2VzcyBhIGZyYW1lIChkZXByZWNhdGVkLCB1c2Ugc3BlZXhfcHJlcHJvY2Vzc19ydW4oKSBpbnN0ZWFkKSovCitpbnQgc3BlZXhfcHJlcHJvY2VzcyhTcGVleFByZXByb2Nlc3NTdGF0ZSAqc3QsIHNweF9pbnQxNl90ICp4LCBzcHhfaW50MzJfdCAqZWNobyk7CisKKy8qKiBVcGRhdGUgcHJlcHJvY2Vzc29yIHN0YXRlLCBidXQgZG8gbm90IGNvbXB1dGUgdGhlIG91dHB1dAorICogQHBhcmFtIHN0IFByZXByb2Nlc3NvciBzdGF0ZQorICogQHBhcmFtIHggQXVkaW8gc2FtcGxlIHZlY3RvciAoaW4gb25seSkuIE11c3QgYmUgc2FtZSBzaXplIGFzIHNwZWNpZmllZCBpbiBzcGVleF9wcmVwcm9jZXNzX3N0YXRlX2luaXQoKS4KKyovCit2b2lkIHNwZWV4X3ByZXByb2Nlc3NfZXN0aW1hdGVfdXBkYXRlKFNwZWV4UHJlcHJvY2Vzc1N0YXRlICpzdCwgc3B4X2ludDE2X3QgKngpOworCisvKiogVXNlZCBsaWtlIHRoZSBpb2N0bCBmdW5jdGlvbiB0byBjb250cm9sIHRoZSBwcmVwcm9jZXNzb3IgcGFyYW1ldGVycyAKKyAqIEBwYXJhbSBzdCBQcmVwcm9jZXNzb3Igc3RhdGUKKyAqIEBwYXJhbSByZXF1ZXN0IGlvY3RsLXR5cGUgcmVxdWVzdCAob25lIG9mIHRoZSBTUEVFWF9QUkVQUk9DRVNTXyogbWFjcm9zKQorICogQHBhcmFtIHB0ciBEYXRhIGV4Y2hhbmdlZCB0by1mcm9tIGZ1bmN0aW9uCisgKiBAcmV0dXJuIDAgaWYgbm8gZXJyb3IsIC0xIGlmIHJlcXVlc3QgaW4gdW5rbm93bgorKi8KK2ludCBzcGVleF9wcmVwcm9jZXNzX2N0bChTcGVleFByZXByb2Nlc3NTdGF0ZSAqc3QsIGludCByZXF1ZXN0LCB2b2lkICpwdHIpOworCisKKworLyoqIFNldCBwcmVwcm9jZXNzb3IgZGVub2lzZXIgc3RhdGUgKi8KKyNkZWZpbmUgU1BFRVhfUFJFUFJPQ0VTU19TRVRfREVOT0lTRSAwCisvKiogR2V0IHByZXByb2Nlc3NvciBkZW5vaXNlciBzdGF0ZSAqLworI2RlZmluZSBTUEVFWF9QUkVQUk9DRVNTX0dFVF9ERU5PSVNFIDEKKworLyoqIFNldCBwcmVwcm9jZXNzb3IgQXV0b21hdGljIEdhaW4gQ29udHJvbCBzdGF0ZSAqLworI2RlZmluZSBTUEVFWF9QUkVQUk9DRVNTX1NFVF9BR0MgMgorLyoqIEdldCBwcmVwcm9jZXNzb3IgQXV0b21hdGljIEdhaW4gQ29udHJvbCBzdGF0ZSAqLworI2RlZmluZSBTUEVFWF9QUkVQUk9DRVNTX0dFVF9BR0MgMworCisvKiogU2V0IHByZXByb2Nlc3NvciBWb2ljZSBBY3Rpdml0eSBEZXRlY3Rpb24gc3RhdGUgKi8KKyNkZWZpbmUgU1BFRVhfUFJFUFJPQ0VTU19TRVRfVkFEIDQKKy8qKiBHZXQgcHJlcHJvY2Vzc29yIFZvaWNlIEFjdGl2aXR5IERldGVjdGlvbiBzdGF0ZSAqLworI2RlZmluZSBTUEVFWF9QUkVQUk9DRVNTX0dFVF9WQUQgNQorCisvKiogU2V0IHByZXByb2Nlc3NvciBBdXRvbWF0aWMgR2FpbiBDb250cm9sIGxldmVsICovCisjZGVmaW5lIFNQRUVYX1BSRVBST0NFU1NfU0VUX0FHQ19MRVZFTCA2CisvKiogR2V0IHByZXByb2Nlc3NvciBBdXRvbWF0aWMgR2FpbiBDb250cm9sIGxldmVsICovCisjZGVmaW5lIFNQRUVYX1BSRVBST0NFU1NfR0VUX0FHQ19MRVZFTCA3CisKKy8qKiBTZXQgcHJlcHJvY2Vzc29yIGRlcmV2ZXJiIHN0YXRlICovCisjZGVmaW5lIFNQRUVYX1BSRVBST0NFU1NfU0VUX0RFUkVWRVJCIDgKKy8qKiBHZXQgcHJlcHJvY2Vzc29yIGRlcmV2ZXJiIHN0YXRlICovCisjZGVmaW5lIFNQRUVYX1BSRVBST0NFU1NfR0VUX0RFUkVWRVJCIDkKKworLyoqIFNldCBwcmVwcm9jZXNzb3IgZGVyZXZlcmIgbGV2ZWwgKi8KKyNkZWZpbmUgU1BFRVhfUFJFUFJPQ0VTU19TRVRfREVSRVZFUkJfTEVWRUwgMTAKKy8qKiBHZXQgcHJlcHJvY2Vzc29yIGRlcmV2ZXJiIGxldmVsICovCisjZGVmaW5lIFNQRUVYX1BSRVBST0NFU1NfR0VUX0RFUkVWRVJCX0xFVkVMIDExCisKKy8qKiBTZXQgcHJlcHJvY2Vzc29yIGRlcmV2ZXJiIGRlY2F5ICovCisjZGVmaW5lIFNQRUVYX1BSRVBST0NFU1NfU0VUX0RFUkVWRVJCX0RFQ0FZIDEyCisvKiogR2V0IHByZXByb2Nlc3NvciBkZXJldmVyYiBkZWNheSAqLworI2RlZmluZSBTUEVFWF9QUkVQUk9DRVNTX0dFVF9ERVJFVkVSQl9ERUNBWSAxMworCisvKiogU2V0IHByb2JhYmlsaXR5IHJlcXVpcmVkIGZvciB0aGUgVkFEIHRvIGdvIGZyb20gc2lsZW5jZSB0byB2b2ljZSAqLworI2RlZmluZSBTUEVFWF9QUkVQUk9DRVNTX1NFVF9QUk9CX1NUQVJUIDE0CisvKiogR2V0IHByb2JhYmlsaXR5IHJlcXVpcmVkIGZvciB0aGUgVkFEIHRvIGdvIGZyb20gc2lsZW5jZSB0byB2b2ljZSAqLworI2RlZmluZSBTUEVFWF9QUkVQUk9DRVNTX0dFVF9QUk9CX1NUQVJUIDE1CisKKy8qKiBTZXQgcHJvYmFiaWxpdHkgcmVxdWlyZWQgZm9yIHRoZSBWQUQgdG8gc3RheSBpbiB0aGUgdm9pY2Ugc3RhdGUgKGludGVnZXIgcGVyY2VudCkgKi8KKyNkZWZpbmUgU1BFRVhfUFJFUFJPQ0VTU19TRVRfUFJPQl9DT05USU5VRSAxNgorLyoqIEdldCBwcm9iYWJpbGl0eSByZXF1aXJlZCBmb3IgdGhlIFZBRCB0byBzdGF5IGluIHRoZSB2b2ljZSBzdGF0ZSAoaW50ZWdlciBwZXJjZW50KSAqLworI2RlZmluZSBTUEVFWF9QUkVQUk9DRVNTX0dFVF9QUk9CX0NPTlRJTlVFIDE3CisKKy8qKiBTZXQgbWF4aW11bSBhdHRlbnVhdGlvbiBvZiB0aGUgbm9pc2UgaW4gZEIgKG5lZ2F0aXZlIG51bWJlcikgKi8KKyNkZWZpbmUgU1BFRVhfUFJFUFJPQ0VTU19TRVRfTk9JU0VfU1VQUFJFU1MgMTgKKy8qKiBHZXQgbWF4aW11bSBhdHRlbnVhdGlvbiBvZiB0aGUgbm9pc2UgaW4gZEIgKG5lZ2F0aXZlIG51bWJlcikgKi8KKyNkZWZpbmUgU1BFRVhfUFJFUFJPQ0VTU19HRVRfTk9JU0VfU1VQUFJFU1MgMTkKKworLyoqIFNldCBtYXhpbXVtIGF0dGVudWF0aW9uIG9mIHRoZSByZXNpZHVhbCBlY2hvIGluIGRCIChuZWdhdGl2ZSBudW1iZXIpICovCisjZGVmaW5lIFNQRUVYX1BSRVBST0NFU1NfU0VUX0VDSE9fU1VQUFJFU1MgMjAKKy8qKiBHZXQgbWF4aW11bSBhdHRlbnVhdGlvbiBvZiB0aGUgcmVzaWR1YWwgZWNobyBpbiBkQiAobmVnYXRpdmUgbnVtYmVyKSAqLworI2RlZmluZSBTUEVFWF9QUkVQUk9DRVNTX0dFVF9FQ0hPX1NVUFBSRVNTIDIxCisKKy8qKiBTZXQgbWF4aW11bSBhdHRlbnVhdGlvbiBvZiB0aGUgcmVzaWR1YWwgZWNobyBpbiBkQiB3aGVuIG5lYXIgZW5kIGlzIGFjdGl2ZSAobmVnYXRpdmUgbnVtYmVyKSAqLworI2RlZmluZSBTUEVFWF9QUkVQUk9DRVNTX1NFVF9FQ0hPX1NVUFBSRVNTX0FDVElWRSAyMgorLyoqIEdldCBtYXhpbXVtIGF0dGVudWF0aW9uIG9mIHRoZSByZXNpZHVhbCBlY2hvIGluIGRCIHdoZW4gbmVhciBlbmQgaXMgYWN0aXZlIChuZWdhdGl2ZSBudW1iZXIpICovCisjZGVmaW5lIFNQRUVYX1BSRVBST0NFU1NfR0VUX0VDSE9fU1VQUFJFU1NfQUNUSVZFIDIzCisKKy8qKiBTZXQgdGhlIGNvcnJlc3BvbmRpbmcgZWNobyBjYW5jZWxsZXIgc3RhdGUgc28gdGhhdCByZXNpZHVhbCBlY2hvIHN1cHByZXNzaW9uIGNhbiBiZSBwZXJmb3JtZWQgKE5VTEwgZm9yIG5vIHJlc2lkdWFsIGVjaG8gc3VwcHJlc3Npb24pICovCisjZGVmaW5lIFNQRUVYX1BSRVBST0NFU1NfU0VUX0VDSE9fU1RBVEUgMjQKKy8qKiBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgZWNobyBjYW5jZWxsZXIgc3RhdGUgKi8KKyNkZWZpbmUgU1BFRVhfUFJFUFJPQ0VTU19HRVRfRUNIT19TVEFURSAyNQorCisvKiogU2V0IG1heGltYWwgZ2FpbiBpbmNyZWFzZSBpbiBkQi9zZWNvbmQgKGludDMyKSAqLworI2RlZmluZSBTUEVFWF9QUkVQUk9DRVNTX1NFVF9BR0NfSU5DUkVNRU5UIDI2CisKKy8qKiBHZXQgbWF4aW1hbCBnYWluIGluY3JlYXNlIGluIGRCL3NlY29uZCAoaW50MzIpICovCisjZGVmaW5lIFNQRUVYX1BSRVBST0NFU1NfR0VUX0FHQ19JTkNSRU1FTlQgMjcKKworLyoqIFNldCBtYXhpbWFsIGdhaW4gZGVjcmVhc2UgaW4gZEIvc2Vjb25kIChpbnQzMikgKi8KKyNkZWZpbmUgU1BFRVhfUFJFUFJPQ0VTU19TRVRfQUdDX0RFQ1JFTUVOVCAyOAorCisvKiogR2V0IG1heGltYWwgZ2FpbiBkZWNyZWFzZSBpbiBkQi9zZWNvbmQgKGludDMyKSAqLworI2RlZmluZSBTUEVFWF9QUkVQUk9DRVNTX0dFVF9BR0NfREVDUkVNRU5UIDI5CisKKy8qKiBTZXQgbWF4aW1hbCBnYWluIGluIGRCIChpbnQzMikgKi8KKyNkZWZpbmUgU1BFRVhfUFJFUFJPQ0VTU19TRVRfQUdDX01BWF9HQUlOIDMwCisKKy8qKiBHZXQgbWF4aW1hbCBnYWluIGluIGRCIChpbnQzMikgKi8KKyNkZWZpbmUgU1BFRVhfUFJFUFJPQ0VTU19HRVRfQUdDX01BWF9HQUlOIDMxCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKy8qKiBAfSovCisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2luY2x1ZGUvc3BlZXgvc3BlZXhfcmVzYW1wbGVyLmggYi8zcmRwYXJ0eS9zcGVleC9pbmNsdWRlL3NwZWV4L3NwZWV4X3Jlc2FtcGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNTliZTgKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9pbmNsdWRlL3NwZWV4L3NwZWV4X3Jlc2FtcGxlci5oCkBAIC0wLDAgKzEsMzA5IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDcgSmVhbi1NYXJjIFZhbGluCisgICAgICAKKyAgIEZpbGU6IHNwZWV4X3Jlc2FtcGxlci5oCisgICBSZXNhbXBsaW5nIGNvZGUKKyAgICAgIAorICAgVGhlIGRlc2lnbiBnb2FscyBvZiB0aGlzIGNvZGUgYXJlOgorICAgICAgLSBWZXJ5IGZhc3QgYWxnb3JpdGhtCisgICAgICAtIExvdyBtZW1vcnkgcmVxdWlyZW1lbnQKKyAgICAgIC0gR29vZCAqcGVyY2VwdHVhbCogcXVhbGl0eSAoYW5kIG5vdCBiZXN0IFNOUikKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgICBtZXQ6CisKKyAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICAgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICAgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAgIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgICBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworCisjaWZuZGVmIFNQRUVYX1JFU0FNUExFUl9ICisjZGVmaW5lIFNQRUVYX1JFU0FNUExFUl9ICisKKyNpZmRlZiBPVVRTSURFX1NQRUVYCisKKy8qKioqKioqKiogV0FSTklORzogTUVOVEFMIFNBTklUWSBFTkRTIEhFUkUgKioqKioqKioqKioqKi8KKworLyogSWYgdGhlIHJlc2FtcGxlciBpcyBkZWZpbmVkIG91dHNpZGUgb2YgU3BlZXgsIHdlIGNoYW5nZSB0aGUgc3ltYm9sIG5hbWVzIHNvIHRoYXQgCisgICB0aGVyZSB3b24ndCBiZSBhbnkgY2xhc2ggaWYgbGlua2luZyB3aXRoIFNwZWV4IGxhdGVyIG9uLiAqLworCisvKiAjZGVmaW5lIFJBTkRPTV9QUkVGSVggeW91ciBzb2Z0d2FyZSBuYW1lIGhlcmUgKi8KKyNpZm5kZWYgUkFORE9NX1BSRUZJWAorI2Vycm9yICJQbGVhc2UgZGVmaW5lIFJBTkRPTV9QUkVGSVggKGFib3ZlKSB0byBzb21ldGhpbmcgc3BlY2lmaWMgdG8geW91ciBwcm9qZWN0IHRvIHByZXZlbnQgc3ltYm9sIG5hbWUgY2xhc2hlcyIKKyNlbmRpZgorCisjZGVmaW5lIENBVF9QUkVGSVgyKGEsYikgYSAjIyBiCisjZGVmaW5lIENBVF9QUkVGSVgoYSxiKSBDQVRfUFJFRklYMihhLCBiKQorICAgICAgCisjZGVmaW5lIHNwZWV4X3Jlc2FtcGxlcl9pbml0IENBVF9QUkVGSVgoUkFORE9NX1BSRUZJWCxfcmVzYW1wbGVyX2luaXQpCisjZGVmaW5lIHNwZWV4X3Jlc2FtcGxlcl9pbml0X2ZyYWMgQ0FUX1BSRUZJWChSQU5ET01fUFJFRklYLF9yZXNhbXBsZXJfaW5pdF9mcmFjKQorI2RlZmluZSBzcGVleF9yZXNhbXBsZXJfZGVzdHJveSBDQVRfUFJFRklYKFJBTkRPTV9QUkVGSVgsX3Jlc2FtcGxlcl9kZXN0cm95KQorI2RlZmluZSBzcGVleF9yZXNhbXBsZXJfcHJvY2Vzc19mbG9hdCBDQVRfUFJFRklYKFJBTkRPTV9QUkVGSVgsX3Jlc2FtcGxlcl9wcm9jZXNzX2Zsb2F0KQorI2RlZmluZSBzcGVleF9yZXNhbXBsZXJfcHJvY2Vzc19pbnQgQ0FUX1BSRUZJWChSQU5ET01fUFJFRklYLF9yZXNhbXBsZXJfcHJvY2Vzc19pbnQpCisjZGVmaW5lIHNwZWV4X3Jlc2FtcGxlcl9wcm9jZXNzX2ludGVybGVhdmVkX2Zsb2F0IENBVF9QUkVGSVgoUkFORE9NX1BSRUZJWCxfcmVzYW1wbGVyX3Byb2Nlc3NfaW50ZXJsZWF2ZWRfZmxvYXQpCisjZGVmaW5lIHNwZWV4X3Jlc2FtcGxlcl9wcm9jZXNzX2ludGVybGVhdmVkX2ludCBDQVRfUFJFRklYKFJBTkRPTV9QUkVGSVgsX3Jlc2FtcGxlcl9wcm9jZXNzX2ludGVybGVhdmVkX2ludCkKKyNkZWZpbmUgc3BlZXhfcmVzYW1wbGVyX3NldF9yYXRlIENBVF9QUkVGSVgoUkFORE9NX1BSRUZJWCxfcmVzYW1wbGVyX3NldF9yYXRlKQorI2RlZmluZSBzcGVleF9yZXNhbXBsZXJfZ2V0X3JhdGUgQ0FUX1BSRUZJWChSQU5ET01fUFJFRklYLF9yZXNhbXBsZXJfZ2V0X3JhdGUpCisjZGVmaW5lIHNwZWV4X3Jlc2FtcGxlcl9zZXRfcmF0ZV9mcmFjIENBVF9QUkVGSVgoUkFORE9NX1BSRUZJWCxfcmVzYW1wbGVyX3NldF9yYXRlX2ZyYWMpCisjZGVmaW5lIHNwZWV4X3Jlc2FtcGxlcl9nZXRfcmF0aW8gQ0FUX1BSRUZJWChSQU5ET01fUFJFRklYLF9yZXNhbXBsZXJfZ2V0X3JhdGlvKQorI2RlZmluZSBzcGVleF9yZXNhbXBsZXJfc2V0X3F1YWxpdHkgQ0FUX1BSRUZJWChSQU5ET01fUFJFRklYLF9yZXNhbXBsZXJfc2V0X3F1YWxpdHkpCisjZGVmaW5lIHNwZWV4X3Jlc2FtcGxlcl9nZXRfcXVhbGl0eSBDQVRfUFJFRklYKFJBTkRPTV9QUkVGSVgsX3Jlc2FtcGxlcl9nZXRfcXVhbGl0eSkKKyNkZWZpbmUgc3BlZXhfcmVzYW1wbGVyX3NldF9pbnB1dF9zdHJpZGUgQ0FUX1BSRUZJWChSQU5ET01fUFJFRklYLF9yZXNhbXBsZXJfc2V0X2lucHV0X3N0cmlkZSkKKyNkZWZpbmUgc3BlZXhfcmVzYW1wbGVyX2dldF9pbnB1dF9zdHJpZGUgQ0FUX1BSRUZJWChSQU5ET01fUFJFRklYLF9yZXNhbXBsZXJfZ2V0X2lucHV0X3N0cmlkZSkKKyNkZWZpbmUgc3BlZXhfcmVzYW1wbGVfc2V0X291dHB1dF9zdHJpZGUgQ0FUX1BSRUZJWChSQU5ET01fUFJFRklYLF9yZXNhbXBsZV9zZXRfb3V0cHV0X3N0cmlkZSkKKyNkZWZpbmUgc3BlZXhfcmVzYW1wbGVfZ2V0X291dHB1dF9zdHJpZGUgQ0FUX1BSRUZJWChSQU5ET01fUFJFRklYLF9yZXNhbXBsZV9nZXRfb3V0cHV0X3N0cmlkZSkKKyNkZWZpbmUgc3BlZXhfcmVzYW1wbGVyX3NraXBfemVyb3MgQ0FUX1BSRUZJWChSQU5ET01fUFJFRklYLF9yZXNhbXBsZXJfc2tpcF96ZXJvcykKKyNkZWZpbmUgc3BlZXhfcmVzYW1wbGVyX3Jlc2V0X21lbSBDQVRfUFJFRklYKFJBTkRPTV9QUkVGSVgsX3Jlc2FtcGxlcl9yZXNldF9tZW0pCisKKyNkZWZpbmUgc3B4X2ludDE2X3Qgc2hvcnQKKyNkZWZpbmUgc3B4X2ludDMyX3QgaW50CisjZGVmaW5lIHNweF91aW50MTZfdCB1bnNpZ25lZCBzaG9ydAorI2RlZmluZSBzcHhfdWludDMyX3QgdW5zaWduZWQgaW50CisgICAgICAKKyNlbHNlIC8qIE9VVFNJREVfU1BFRVggKi8KKworI2luY2x1ZGUgInNwZWV4L3NwZWV4X3R5cGVzLmgiCisKKyNlbmRpZiAvKiBPVVRTSURFX1NQRUVYICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2RlZmluZSBTUEVFWF9SRVNBTVBMRVJfUVVBTElUWV9NQVggMTAKKyNkZWZpbmUgU1BFRVhfUkVTQU1QTEVSX1FVQUxJVFlfTUlOIDAKKyNkZWZpbmUgU1BFRVhfUkVTQU1QTEVSX1FVQUxJVFlfREVGQVVMVCA0CisjZGVmaW5lIFNQRUVYX1JFU0FNUExFUl9RVUFMSVRZX1ZPSVAgMworI2RlZmluZSBTUEVFWF9SRVNBTVBMRVJfUVVBTElUWV9ERVNLVE9QIDUKKyAgIAorc3RydWN0IFNwZWV4UmVzYW1wbGVyU3RhdGVfOwordHlwZWRlZiBzdHJ1Y3QgU3BlZXhSZXNhbXBsZXJTdGF0ZV8gU3BlZXhSZXNhbXBsZXJTdGF0ZTsKKworLyoqIENyZWF0ZSBhIG5ldyByZXNhbXBsZXIgd2l0aCBpbnRlZ2VyIGlucHV0IGFuZCBvdXRwdXQgcmF0ZXMuCisgKiBAcGFyYW0gbmJfY2hhbm5lbHMgTnVtYmVyIG9mIGNoYW5uZWxzIHRvIGJlIHByb2Nlc3NlZAorICogQHBhcmFtIGluX3JhdGUgSW5wdXQgc2FtcGxpbmcgcmF0ZSAoaW50ZWdlciBudW1iZXIgb2YgSHopLgorICogQHBhcmFtIG91dF9yYXRlIE91dHB1dCBzYW1wbGluZyByYXRlIChpbnRlZ2VyIG51bWJlciBvZiBIeikuCisgKiBAcGFyYW0gcXVhbGl0eSBSZXNhbXBsaW5nIHF1YWxpdHkgYmV0d2VlbiAwIGFuZCAxMCwgd2hlcmUgMCBoYXMgcG9vciBxdWFsaXR5CisgKiBhbmQgMTAgaGFzIHZlcnkgaGlnaCBxdWFsaXR5LgorICogQHJldHVybiBOZXdseSBjcmVhdGVkIHJlc2FtcGxlciBzdGF0ZQorICogQHJldHZhbCBOVUxMIEVycm9yOiBub3QgZW5vdWdoIG1lbW9yeQorICovCitTcGVleFJlc2FtcGxlclN0YXRlICpzcGVleF9yZXNhbXBsZXJfaW5pdChzcHhfdWludDMyX3QgbmJfY2hhbm5lbHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3B4X3VpbnQzMl90IGluX3JhdGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3B4X3VpbnQzMl90IG91dF9yYXRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBxdWFsaXR5KTsKKworLyoqIENyZWF0ZSBhIG5ldyByZXNhbXBsZXIgd2l0aCBmcmFjdGlvbmFsIGlucHV0L291dHB1dCByYXRlcy4gVGhlIHNhbXBsaW5nIAorICogcmF0ZSByYXRpbyBpcyBhbiBhcmJpdHJhcnkgcmF0aW9uYWwgbnVtYmVyIHdpdGggYm90aCB0aGUgbnVtZXJhdG9yIGFuZCAKKyAqIGRlbm9taW5hdG9yIGJlaW5nIDMyLWJpdCBpbnRlZ2Vycy4KKyAqIEBwYXJhbSBuYl9jaGFubmVscyBOdW1iZXIgb2YgY2hhbm5lbHMgdG8gYmUgcHJvY2Vzc2VkCisgKiBAcGFyYW0gcmF0aW9fbnVtIE51bWVyYXRvciBvZiB0aGUgc2FtcGxpbmcgcmF0ZSByYXRpbworICogQHBhcmFtIHJhdGlvX2RlbiBEZW5vbWluYXRvciBvZiB0aGUgc2FtcGxpbmcgcmF0ZSByYXRpbworICogQHBhcmFtIGluX3JhdGUgSW5wdXQgc2FtcGxpbmcgcmF0ZSByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgKGluIEh6KS4KKyAqIEBwYXJhbSBvdXRfcmF0ZSBPdXRwdXQgc2FtcGxpbmcgcmF0ZSByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgKGluIEh6KS4KKyAqIEBwYXJhbSBxdWFsaXR5IFJlc2FtcGxpbmcgcXVhbGl0eSBiZXR3ZWVuIDAgYW5kIDEwLCB3aGVyZSAwIGhhcyBwb29yIHF1YWxpdHkKKyAqIGFuZCAxMCBoYXMgdmVyeSBoaWdoIHF1YWxpdHkuCisgKiBAcmV0dXJuIE5ld2x5IGNyZWF0ZWQgcmVzYW1wbGVyIHN0YXRlCisgKiBAcmV0dmFsIE5VTEwgRXJyb3I6IG5vdCBlbm91Z2ggbWVtb3J5CisgKi8KK1NwZWV4UmVzYW1wbGVyU3RhdGUgKnNwZWV4X3Jlc2FtcGxlcl9pbml0X2ZyYWMoc3B4X3VpbnQzMl90IG5iX2NoYW5uZWxzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3B4X3VpbnQzMl90IHJhdGlvX251bSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNweF91aW50MzJfdCByYXRpb19kZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHhfdWludDMyX3QgaW5fcmF0ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNweF91aW50MzJfdCBvdXRfcmF0ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBxdWFsaXR5KTsKKworLyoqIERlc3Ryb3kgYSByZXNhbXBsZXIgc3RhdGUuCisgKiBAcGFyYW0gc3QgUmVzYW1wbGVyIHN0YXRlCisgKi8KK3ZvaWQgc3BlZXhfcmVzYW1wbGVyX2Rlc3Ryb3koU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QpOworCisvKiogUmVzYW1wbGUgYSBmbG9hdCBhcnJheS4gVGhlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBtdXN0ICpub3QqIG92ZXJsYXAuCisgKiBAcGFyYW0gc3QgUmVzYW1wbGVyIHN0YXRlCisgKiBAcGFyYW0gY2hhbm5lbF9pbmRleCBJbmRleCBvZiB0aGUgY2hhbm5lbCB0byBwcm9jZXNzIGZvciB0aGUgbXVsdGktY2hhbm5lbCAKKyAqIGJhc2UgKDAgb3RoZXJ3aXNlKQorICogQHBhcmFtIGluIElucHV0IGJ1ZmZlcgorICogQHBhcmFtIGluX2xlbiBOdW1iZXIgb2YgaW5wdXQgc2FtcGxlcyBpbiB0aGUgaW5wdXQgYnVmZmVyLiBSZXR1cm5zIHRoZSAKKyAqIG51bWJlciBvZiBzYW1wbGVzIHByb2Nlc3NlZAorICogQHBhcmFtIG91dCBPdXRwdXQgYnVmZmVyCisgKiBAcGFyYW0gb3V0X2xlbiBTaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB3cml0dGVuCisgKi8KK3ZvaWQgc3BlZXhfcmVzYW1wbGVyX3Byb2Nlc3NfZmxvYXQoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHhfdWludDMyX3QgY2hhbm5lbF9pbmRleCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0ICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNweF91aW50MzJfdCAqaW5fbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNweF91aW50MzJfdCAqb3V0X2xlbik7CisKKy8qKiBSZXNhbXBsZSBhbiBpbnQgYXJyYXkuIFRoZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgbXVzdCAqbm90KiBvdmVybGFwLgorICogQHBhcmFtIHN0IFJlc2FtcGxlciBzdGF0ZQorICogQHBhcmFtIGNoYW5uZWxfaW5kZXggSW5kZXggb2YgdGhlIGNoYW5uZWwgdG8gcHJvY2VzcyBmb3IgdGhlIG11bHRpLWNoYW5uZWwgCisgKiBiYXNlICgwIG90aGVyd2lzZSkKKyAqIEBwYXJhbSBpbiBJbnB1dCBidWZmZXIKKyAqIEBwYXJhbSBpbl9sZW4gTnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgaW4gdGhlIGlucHV0IGJ1ZmZlci4gUmV0dXJucyB0aGUgbnVtYmVyCisgKiBvZiBzYW1wbGVzIHByb2Nlc3NlZAorICogQHBhcmFtIG91dCBPdXRwdXQgYnVmZmVyCisgKiBAcGFyYW0gb3V0X2xlbiBTaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB3cml0dGVuCisgKi8KK3ZvaWQgc3BlZXhfcmVzYW1wbGVyX3Byb2Nlc3NfaW50KFNwZWV4UmVzYW1wbGVyU3RhdGUgKnN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNweF91aW50MzJfdCBjaGFubmVsX2luZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNweF9pbnQxNl90ICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHhfdWludDMyX3QgKmluX2xlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHhfaW50MTZfdCAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNweF91aW50MzJfdCAqb3V0X2xlbik7CisKKy8qKiBSZXNhbXBsZSBhbiBpbnRlcmxlYXZlZCBmbG9hdCBhcnJheS4gVGhlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBtdXN0ICpub3QqIG92ZXJsYXAuCisgKiBAcGFyYW0gc3QgUmVzYW1wbGVyIHN0YXRlCisgKiBAcGFyYW0gaW4gSW5wdXQgYnVmZmVyCisgKiBAcGFyYW0gaW5fbGVuIE51bWJlciBvZiBpbnB1dCBzYW1wbGVzIGluIHRoZSBpbnB1dCBidWZmZXIuIFJldHVybnMgdGhlIG51bWJlcgorICogb2Ygc2FtcGxlcyBwcm9jZXNzZWQuIFRoaXMgaXMgYWxsIHBlci1jaGFubmVsLgorICogQHBhcmFtIG91dCBPdXRwdXQgYnVmZmVyCisgKiBAcGFyYW0gb3V0X2xlbiBTaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB3cml0dGVuLgorICogVGhpcyBpcyBhbGwgcGVyLWNoYW5uZWwuCisgKi8KK3ZvaWQgc3BlZXhfcmVzYW1wbGVyX3Byb2Nlc3NfaW50ZXJsZWF2ZWRfZmxvYXQoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHhfdWludDMyX3QgKmluX2xlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHhfdWludDMyX3QgKm91dF9sZW4pOworCisvKiogUmVzYW1wbGUgYW4gaW50ZXJsZWF2ZWQgaW50IGFycmF5LiBUaGUgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIG11c3QgKm5vdCogb3ZlcmxhcC4KKyAqIEBwYXJhbSBzdCBSZXNhbXBsZXIgc3RhdGUKKyAqIEBwYXJhbSBpbiBJbnB1dCBidWZmZXIKKyAqIEBwYXJhbSBpbl9sZW4gTnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgaW4gdGhlIGlucHV0IGJ1ZmZlci4gUmV0dXJucyB0aGUgbnVtYmVyCisgKiBvZiBzYW1wbGVzIHByb2Nlc3NlZC4gVGhpcyBpcyBhbGwgcGVyLWNoYW5uZWwuCisgKiBAcGFyYW0gb3V0IE91dHB1dCBidWZmZXIKKyAqIEBwYXJhbSBvdXRfbGVuIFNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIuIFJldHVybnMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHdyaXR0ZW4uCisgKiBUaGlzIGlzIGFsbCBwZXItY2hhbm5lbC4KKyAqLwordm9pZCBzcGVleF9yZXNhbXBsZXJfcHJvY2Vzc19pbnRlcmxlYXZlZF9pbnQoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3B4X2ludDE2X3QgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNweF91aW50MzJfdCAqaW5fbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNweF9pbnQxNl90ICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3B4X3VpbnQzMl90ICpvdXRfbGVuKTsKKworLyoqIFNldCAoY2hhbmdlKSB0aGUgaW5wdXQvb3V0cHV0IHNhbXBsaW5nIHJhdGVzIChpbnRlZ2VyIHZhbHVlKS4KKyAqIEBwYXJhbSBzdCBSZXNhbXBsZXIgc3RhdGUKKyAqIEBwYXJhbSBpbl9yYXRlIElucHV0IHNhbXBsaW5nIHJhdGUgKGludGVnZXIgbnVtYmVyIG9mIEh6KS4KKyAqIEBwYXJhbSBvdXRfcmF0ZSBPdXRwdXQgc2FtcGxpbmcgcmF0ZSAoaW50ZWdlciBudW1iZXIgb2YgSHopLgorICovCit2b2lkIHNwZWV4X3Jlc2FtcGxlcl9zZXRfcmF0ZShTcGVleFJlc2FtcGxlclN0YXRlICpzdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHhfdWludDMyX3QgaW5fcmF0ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHhfdWludDMyX3Qgb3V0X3JhdGUpOworCisvKiogR2V0IHRoZSBjdXJyZW50IGlucHV0L291dHB1dCBzYW1wbGluZyByYXRlcyAoaW50ZWdlciB2YWx1ZSkuCisgKiBAcGFyYW0gc3QgUmVzYW1wbGVyIHN0YXRlCisgKiBAcGFyYW0gaW5fcmF0ZSBJbnB1dCBzYW1wbGluZyByYXRlIChpbnRlZ2VyIG51bWJlciBvZiBIeikgY29waWVkLgorICogQHBhcmFtIG91dF9yYXRlIE91dHB1dCBzYW1wbGluZyByYXRlIChpbnRlZ2VyIG51bWJlciBvZiBIeikgY29waWVkLgorICovCit2b2lkIHNwZWV4X3Jlc2FtcGxlcl9nZXRfcmF0ZShTcGVleFJlc2FtcGxlclN0YXRlICpzdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHhfdWludDMyX3QgKmluX3JhdGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3B4X3VpbnQzMl90ICpvdXRfcmF0ZSk7CisKKy8qKiBTZXQgKGNoYW5nZSkgdGhlIGlucHV0L291dHB1dCBzYW1wbGluZyByYXRlcyBhbmQgcmVzYW1wbGluZyByYXRpbyAKKyAqIChmcmFjdGlvbmFsIHZhbHVlcyBpbiBIeiBzdXBwb3J0ZWQpLgorICogQHBhcmFtIHN0IFJlc2FtcGxlciBzdGF0ZQorICogQHBhcmFtIHJhdGlvX251bSBOdW1lcmF0b3Igb2YgdGhlIHNhbXBsaW5nIHJhdGUgcmF0aW8KKyAqIEBwYXJhbSByYXRpb19kZW4gRGVub21pbmF0b3Igb2YgdGhlIHNhbXBsaW5nIHJhdGUgcmF0aW8KKyAqIEBwYXJhbSBpbl9yYXRlIElucHV0IHNhbXBsaW5nIHJhdGUgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIChpbiBIeikuCisgKiBAcGFyYW0gb3V0X3JhdGUgT3V0cHV0IHNhbXBsaW5nIHJhdGUgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIChpbiBIeikuCisgKi8KK3ZvaWQgc3BlZXhfcmVzYW1wbGVyX3NldF9yYXRlX2ZyYWMoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHhfdWludDMyX3QgcmF0aW9fbnVtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3B4X3VpbnQzMl90IHJhdGlvX2RlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNweF91aW50MzJfdCBpbl9yYXRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3B4X3VpbnQzMl90IG91dF9yYXRlKTsKKworLyoqIEdldCB0aGUgY3VycmVudCByZXNhbXBsaW5nIHJhdGlvLiBUaGlzIHdpbGwgYmUgcmVkdWNlZCB0byB0aGUgbGVhc3QKKyAqIGNvbW1vbiBkZW5vbWluYXRvci4KKyAqIEBwYXJhbSBzdCBSZXNhbXBsZXIgc3RhdGUKKyAqIEBwYXJhbSByYXRpb19udW0gTnVtZXJhdG9yIG9mIHRoZSBzYW1wbGluZyByYXRlIHJhdGlvIGNvcGllZAorICogQHBhcmFtIHJhdGlvX2RlbiBEZW5vbWluYXRvciBvZiB0aGUgc2FtcGxpbmcgcmF0ZSByYXRpbyBjb3BpZWQKKyAqLwordm9pZCBzcGVleF9yZXNhbXBsZXJfZ2V0X3JhdGlvKFNwZWV4UmVzYW1wbGVyU3RhdGUgKnN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHhfdWludDMyX3QgKnJhdGlvX251bSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3B4X3VpbnQzMl90ICpyYXRpb19kZW4pOworCisvKiogU2V0IChjaGFuZ2UpIHRoZSBjb252ZXJzaW9uIHF1YWxpdHkuCisgKiBAcGFyYW0gc3QgUmVzYW1wbGVyIHN0YXRlCisgKiBAcGFyYW0gcXVhbGl0eSBSZXNhbXBsaW5nIHF1YWxpdHkgYmV0d2VlbiAwIGFuZCAxMCwgd2hlcmUgMCBoYXMgcG9vciAKKyAqIHF1YWxpdHkgYW5kIDEwIGhhcyB2ZXJ5IGhpZ2ggcXVhbGl0eS4KKyAqLwordm9pZCBzcGVleF9yZXNhbXBsZXJfc2V0X3F1YWxpdHkoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHF1YWxpdHkpOworCisvKiogR2V0IHRoZSBjb252ZXJzaW9uIHF1YWxpdHkuCisgKiBAcGFyYW0gc3QgUmVzYW1wbGVyIHN0YXRlCisgKiBAcGFyYW0gcXVhbGl0eSBSZXNhbXBsaW5nIHF1YWxpdHkgYmV0d2VlbiAwIGFuZCAxMCwgd2hlcmUgMCBoYXMgcG9vciAKKyAqIHF1YWxpdHkgYW5kIDEwIGhhcyB2ZXJ5IGhpZ2ggcXVhbGl0eS4KKyAqLwordm9pZCBzcGVleF9yZXNhbXBsZXJfZ2V0X3F1YWxpdHkoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpxdWFsaXR5KTsKKworLyoqIFNldCAoY2hhbmdlKSB0aGUgaW5wdXQgc3RyaWRlLgorICogQHBhcmFtIHN0IFJlc2FtcGxlciBzdGF0ZQorICogQHBhcmFtIHN0cmlkZSBJbnB1dCBzdHJpZGUKKyAqLwordm9pZCBzcGVleF9yZXNhbXBsZXJfc2V0X2lucHV0X3N0cmlkZShTcGVleFJlc2FtcGxlclN0YXRlICpzdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNweF91aW50MzJfdCBzdHJpZGUpOworCisvKiogR2V0IHRoZSBpbnB1dCBzdHJpZGUuCisgKiBAcGFyYW0gc3QgUmVzYW1wbGVyIHN0YXRlCisgKiBAcGFyYW0gc3RyaWRlIElucHV0IHN0cmlkZSBjb3BpZWQKKyAqLwordm9pZCBzcGVleF9yZXNhbXBsZXJfZ2V0X2lucHV0X3N0cmlkZShTcGVleFJlc2FtcGxlclN0YXRlICpzdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNweF91aW50MzJfdCAqc3RyaWRlKTsKKworLyoqIFNldCAoY2hhbmdlKSB0aGUgb3V0cHV0IHN0cmlkZS4KKyAqIEBwYXJhbSBzdCBSZXNhbXBsZXIgc3RhdGUKKyAqIEBwYXJhbSBzdHJpZGUgT3V0cHV0IHN0cmlkZQorICovCit2b2lkIHNwZWV4X3Jlc2FtcGxlX3NldF9vdXRwdXRfc3RyaWRlKFNwZWV4UmVzYW1wbGVyU3RhdGUgKnN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3B4X3VpbnQzMl90IHN0cmlkZSk7CisKKy8qKiBHZXQgdGhlIG91dHB1dCBzdHJpZGUuCisgKiBAcGFyYW0gc3QgUmVzYW1wbGVyIHN0YXRlIGNvcGllZAorICogQHBhcmFtIHN0cmlkZSBPdXRwdXQgc3RyaWRlCisgKi8KK3ZvaWQgc3BlZXhfcmVzYW1wbGVfZ2V0X291dHB1dF9zdHJpZGUoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHhfdWludDMyX3QgKnN0cmlkZSk7CisKKy8qKiBNYWtlIHN1cmUgdGhhdCB0aGUgZmlyc3Qgc2FtcGxlcyB0byBnbyBvdXQgb2YgdGhlIHJlc2FtcGxlcnMgZG9uJ3QgaGF2ZSAKKyAqIGxlYWRpbmcgemVyb3MuIFRoaXMgaXMgb25seSB1c2VmdWwgYmVmb3JlIHN0YXJ0aW5nIHRvIHVzZSBhIG5ld2x5IGNyZWF0ZWQgCisgKiByZXNhbXBsZXIuIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGF0IHdoZW4gcmVzYW1wbGluZyBhbiBhdWRpbyBmaWxlLCBhcworICogaXQgd2lsbCBnZW5lcmF0ZSBhIGZpbGUgd2l0aCB0aGUgc2FtZSBsZW5ndGguIEZvciByZWFsLXRpbWUgcHJvY2Vzc2luZywKKyAqIGl0IGlzIHByb2JhYmx5IGVhc2llciBub3QgdG8gdXNlIHRoaXMgY2FsbCAoc28gdGhhdCB0aGUgb3V0cHV0IGR1cmF0aW9uCisgKiBpcyB0aGUgc2FtZSBmb3IgdGhlIGZpcnN0IGZyYW1lKS4KKyAqIEBwYXJhbSBzdCBSZXNhbXBsZXIgc3RhdGUKKyAqLwordm9pZCBzcGVleF9yZXNhbXBsZXJfc2tpcF96ZXJvcyhTcGVleFJlc2FtcGxlclN0YXRlICpzdCk7CisKKy8qKiBSZXNldCBhIHJlc2FtcGxlciBzbyBhIG5ldyAodW5yZWxhdGVkKSBzdHJlYW0gY2FuIGJlIHByb2Nlc3NlZC4KKyAqIEBwYXJhbSBzdCBSZXNhbXBsZXIgc3RhdGUKKyAqLwordm9pZCBzcGVleF9yZXNhbXBsZXJfcmVzZXRfbWVtKFNwZWV4UmVzYW1wbGVyU3RhdGUgKnN0KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9pbmNsdWRlL3NwZWV4L3NwZWV4X3N0ZXJlby5oIGIvM3JkcGFydHkvc3BlZXgvaW5jbHVkZS9zcGVleC9zcGVleF9zdGVyZW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWRhMzM4Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvaW5jbHVkZS9zcGVleC9zcGVleF9zdGVyZW8uaApAQCAtMCwwICsxLDgyIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVhbi1NYXJjIFZhbGluKi8KKy8qKgorICAgQGZpbGUgc3BlZXhfc3RlcmVvLmgKKyAgIEBicmllZiBEZXNjcmliZXMgdGhlIGhhbmRsaW5nIGZvciBpbnRlbnNpdHkgc3RlcmVvCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBTVEVSRU9fSAorI2RlZmluZSBTVEVSRU9fSAorLyoqIEBkZWZncm91cCBTcGVleFN0ZXJlb1N0YXRlIFNwZWV4U3RlcmVvU3RhdGU6IEhhbmRsaW5nIFNwZWV4IHN0ZXJlbyBmaWxlcworICogIFRoaXMgZGVzY3JpYmVzIHRoZSBTcGVleCBpbnRlbnNpdHkgc3RlcmVvIGVuY29kaW5nL2RlY29kaW5nCisgKiAgQHsKKyAqLworCisjaW5jbHVkZSAic3BlZXgvc3BlZXhfdHlwZXMuaCIKKyNpbmNsdWRlICJzcGVleC9zcGVleF9iaXRzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIFN0YXRlIHVzZWQgZm9yIGRlY29kaW5nIChpbnRlbnNpdHkpIHN0ZXJlbyBpbmZvcm1hdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgU3BlZXhTdGVyZW9TdGF0ZSB7CisgICBmbG9hdCBiYWxhbmNlOyAgICAgIC8qKjwgTGVmdC9yaWdodCBiYWxhbmNlIGluZm8gKi8KKyAgIGZsb2F0IGVfcmF0aW87ICAgICAgLyoqPCBSYXRpbyBvZiBlbmVyZ2llczogRShsZWZ0K3JpZ2h0KS9bRShsZWZ0KStFKHJpZ2h0KV0gICovCisgICBmbG9hdCBzbW9vdGhfbGVmdDsgIC8qKjwgU21vb3RoZWQgbGVmdCBjaGFubmVsIGdhaW4gKi8KKyAgIGZsb2F0IHNtb290aF9yaWdodDsgLyoqPCBTbW9vdGhlZCByaWdodCBjaGFubmVsIGdhaW4gKi8KKyAgIGZsb2F0IHJlc2VydmVkMTsgICAgLyoqPCBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworICAgZmxvYXQgcmVzZXJ2ZWQyOyAgICAvKio8IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCit9IFNwZWV4U3RlcmVvU3RhdGU7CisKKy8qKiBJbml0aWFsaXphdGlvbiB2YWx1ZSBmb3IgYSBzdGVyZW8gc3RhdGUgKi8KKyNkZWZpbmUgU1BFRVhfU1RFUkVPX1NUQVRFX0lOSVQgezEsLjUsMSwxLDAsMH0KKworLyoqIFRyYW5zZm9ybXMgYSBzdGVyZW8gZnJhbWUgaW50byBhIG1vbm8gZnJhbWUgYW5kIHN0b3JlcyBpbnRlbnNpdHkgc3RlcmVvIGluZm8gaW4gJ2JpdHMnICovCit2b2lkIHNwZWV4X2VuY29kZV9zdGVyZW8oZmxvYXQgKmRhdGEsIGludCBmcmFtZV9zaXplLCBTcGVleEJpdHMgKmJpdHMpOworCisvKiogVHJhbnNmb3JtcyBhIHN0ZXJlbyBmcmFtZSBpbnRvIGEgbW9ubyBmcmFtZSBhbmQgc3RvcmVzIGludGVuc2l0eSBzdGVyZW8gaW5mbyBpbiAnYml0cycgKi8KK3ZvaWQgc3BlZXhfZW5jb2RlX3N0ZXJlb19pbnQoc3B4X2ludDE2X3QgKmRhdGEsIGludCBmcmFtZV9zaXplLCBTcGVleEJpdHMgKmJpdHMpOworCisvKiogVHJhbnNmb3JtcyBhIG1vbm8gZnJhbWUgaW50byBhIHN0ZXJlbyBmcmFtZSB1c2luZyBpbnRlbnNpdHkgc3RlcmVvIGluZm8gKi8KK3ZvaWQgc3BlZXhfZGVjb2RlX3N0ZXJlbyhmbG9hdCAqZGF0YSwgaW50IGZyYW1lX3NpemUsIFNwZWV4U3RlcmVvU3RhdGUgKnN0ZXJlbyk7CisKKy8qKiBUcmFuc2Zvcm1zIGEgbW9ubyBmcmFtZSBpbnRvIGEgc3RlcmVvIGZyYW1lIHVzaW5nIGludGVuc2l0eSBzdGVyZW8gaW5mbyAqLwordm9pZCBzcGVleF9kZWNvZGVfc3RlcmVvX2ludChzcHhfaW50MTZfdCAqZGF0YSwgaW50IGZyYW1lX3NpemUsIFNwZWV4U3RlcmVvU3RhdGUgKnN0ZXJlbyk7CisKKy8qKiBDYWxsYmFjayBoYW5kbGVyIGZvciBpbnRlbnNpdHkgc3RlcmVvIGluZm8gKi8KK2ludCBzcGVleF9zdGRfc3RlcmVvX3JlcXVlc3RfaGFuZGxlcihTcGVleEJpdHMgKmJpdHMsIHZvaWQgKnN0YXRlLCB2b2lkICpkYXRhKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworLyoqIEB9ICovCisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2luY2x1ZGUvc3BlZXgvc3BlZXhfdHlwZXMuaCBiLzNyZHBhcnR5L3NwZWV4L2luY2x1ZGUvc3BlZXgvc3BlZXhfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzQ2ZDRmCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvaW5jbHVkZS9zcGVleC9zcGVleF90eXBlcy5oCkBAIC0wLDAgKzEsMTI2IEBACisvKiBzcGVleF90eXBlcy5oIHRha2VuIGZyb20gbGlib2dnICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhJUyBGSUxFIElTIFBBUlQgT0YgVEhFIE9nZ1ZvcmJpcyBTT0ZUV0FSRSBDT0RFQyBTT1VSQ0UgQ09ERS4gICAqCisgKiBVU0UsIERJU1RSSUJVVElPTiBBTkQgUkVQUk9EVUNUSU9OIE9GIFRISVMgTElCUkFSWSBTT1VSQ0UgSVMgICAgICoKKyAqIEdPVkVSTkVEIEJZIEEgQlNELVNUWUxFIFNPVVJDRSBMSUNFTlNFIElOQ0xVREVEIFdJVEggVEhJUyBTT1VSQ0UgKgorICogSU4gJ0NPUFlJTkcnLiBQTEVBU0UgUkVBRCBUSEVTRSBURVJNUyBCRUZPUkUgRElTVFJJQlVUSU5HLiAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBPZ2dWb3JiaXMgU09VUkNFIENPREUgSVMgKEMpIENPUFlSSUdIVCAxOTk0LTIwMDIgICAgICAgICAgICAgKgorICogYnkgdGhlIFhpcGguT3JnIEZvdW5kYXRpb24gaHR0cDovL3d3dy54aXBoLm9yZy8gICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgZnVuY3Rpb246ICNpZmRlZiBqYWlsIHRvIHdoaXAgYSBmZXcgcGxhdGZvcm1zIGludG8gdGhlIFVOSVggaWRlYWwuCisgbGFzdCBtb2Q6ICRJZDogb3NfdHlwZXMuaCA3NTI0IDIwMDQtMDgtMTEgMDQ6MjA6MzZaIGNvbnJhZCAkCisKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICAgQGZpbGUgc3BlZXhfdHlwZXMuaAorICAgQGJyaWVmIFNwZWV4IHR5cGVzCisqLworI2lmbmRlZiBfU1BFRVhfVFlQRVNfSAorI2RlZmluZSBfU1BFRVhfVFlQRVNfSAorCisjaWYgZGVmaW5lZChfV0lOMzIpIAorCisjICBpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjICAgIGluY2x1ZGUgPF9HX2NvbmZpZy5oPgorICAgICB0eXBlZGVmIF9HX2ludDMyX3Qgc3B4X2ludDMyX3Q7CisgICAgIHR5cGVkZWYgX0dfdWludDMyX3Qgc3B4X3VpbnQzMl90OworICAgICB0eXBlZGVmIF9HX2ludDE2X3Qgc3B4X2ludDE2X3Q7CisgICAgIHR5cGVkZWYgX0dfdWludDE2X3Qgc3B4X3VpbnQxNl90OworIyAgZWxpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorICAgICB0eXBlZGVmIHNob3J0IHNweF9pbnQxNl90OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgc3B4X3VpbnQxNl90OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgdHlwZWRlZiBpbnQgc3B4X2ludDMyX3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBzcHhfdWludDMyX3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjICBlbGlmIGRlZmluZWQoX19NV0VSS1NfXykKKyAgICAgdHlwZWRlZiBpbnQgc3B4X2ludDMyX3Q7CisgICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IHNweF91aW50MzJfdDsKKyAgICAgdHlwZWRlZiBzaG9ydCBzcHhfaW50MTZfdDsKKyAgICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBzcHhfdWludDE2X3Q7CisjICBlbHNlCisgICAgIC8qIE1TVkMvQm9ybGFuZCAqLworICAgICB0eXBlZGVmIF9faW50MzIgc3B4X2ludDMyX3Q7CisgICAgIHR5cGVkZWYgdW5zaWduZWQgX19pbnQzMiBzcHhfdWludDMyX3Q7CisgICAgIHR5cGVkZWYgX19pbnQxNiBzcHhfaW50MTZfdDsKKyAgICAgdHlwZWRlZiB1bnNpZ25lZCBfX2ludDE2IHNweF91aW50MTZfdDsKKyMgIGVuZGlmCisKKyNlbGlmIGRlZmluZWQoX19NQUNPU19fKQorCisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgIHR5cGVkZWYgU0ludDE2IHNweF9pbnQxNl90OworICAgdHlwZWRlZiBVSW50MTYgc3B4X3VpbnQxNl90OworICAgdHlwZWRlZiBTSW50MzIgc3B4X2ludDMyX3Q7CisgICB0eXBlZGVmIFVJbnQzMiBzcHhfdWludDMyX3Q7CisKKyNlbGlmIGRlZmluZWQoX19NQUNPU1hfXykgLyogTWFjT1MgWCBGcmFtZXdvcmsgYnVpbGQgKi8KKworIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICB0eXBlZGVmIGludDE2X3Qgc3B4X2ludDE2X3Q7CisgICB0eXBlZGVmIHVfaW50MTZfdCBzcHhfdWludDE2X3Q7CisgICB0eXBlZGVmIGludDMyX3Qgc3B4X2ludDMyX3Q7CisgICB0eXBlZGVmIHVfaW50MzJfdCBzcHhfdWludDMyX3Q7CisKKyNlbGlmIGRlZmluZWQoX19CRU9TX18pCisKKyAgIC8qIEJlICovCisjICBpbmNsdWRlIDxpbnR0eXBlcy5oPgorICAgdHlwZWRlZiBpbnQxNl90IHNweF9pbnQxNl90OworICAgdHlwZWRlZiB1X2ludDE2X3Qgc3B4X3VpbnQxNl90OworICAgdHlwZWRlZiBpbnQzMl90IHNweF9pbnQzMl90OworICAgdHlwZWRlZiB1X2ludDMyX3Qgc3B4X3VpbnQzMl90OworCisjZWxpZiBkZWZpbmVkIChfX0VNWF9fKQorCisgICAvKiBPUy8yIEdDQyAqLworICAgdHlwZWRlZiBzaG9ydCBzcHhfaW50MTZfdDsKKyAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgc3B4X3VpbnQxNl90OworICAgdHlwZWRlZiBpbnQgc3B4X2ludDMyX3Q7CisgICB0eXBlZGVmIHVuc2lnbmVkIGludCBzcHhfdWludDMyX3Q7CisKKyNlbGlmIGRlZmluZWQgKERKR1BQKQorCisgICAvKiBESkdQUCAqLworICAgdHlwZWRlZiBzaG9ydCBzcHhfaW50MTZfdDsKKyAgIHR5cGVkZWYgaW50IHNweF9pbnQzMl90OworICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgc3B4X3VpbnQzMl90OworCisjZWxpZiBkZWZpbmVkKFI1OTAwKQorCisgICAvKiBQUzIgRUUgKi8KKyAgIHR5cGVkZWYgaW50IHNweF9pbnQzMl90OworICAgdHlwZWRlZiB1bnNpZ25lZCBzcHhfdWludDMyX3Q7CisgICB0eXBlZGVmIHNob3J0IHNweF9pbnQxNl90OworCisjZWxpZiBkZWZpbmVkKF9fU1lNQklBTjMyX18pCisKKyAgIC8qIFN5bWJpYW4gR0NDICovCisgICB0eXBlZGVmIHNpZ25lZCBzaG9ydCBzcHhfaW50MTZfdDsKKyAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgc3B4X3VpbnQxNl90OworICAgdHlwZWRlZiBzaWduZWQgaW50IHNweF9pbnQzMl90OworICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgc3B4X3VpbnQzMl90OworCisjZWxpZiBkZWZpbmVkKENPTkZJR19USV9DNTRYKSB8fCBkZWZpbmVkIChDT05GSUdfVElfQzU1WCkKKworICAgdHlwZWRlZiBzaG9ydCBzcHhfaW50MTZfdDsKKyAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgc3B4X3VpbnQxNl90OworICAgdHlwZWRlZiBsb25nIHNweF9pbnQzMl90OworICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHNweF91aW50MzJfdDsKKworI2VsaWYgZGVmaW5lZChDT05GSUdfVElfQzZYKQorCisgICB0eXBlZGVmIHNob3J0IHNweF9pbnQxNl90OworICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBzcHhfdWludDE2X3Q7CisgICB0eXBlZGVmIGludCBzcHhfaW50MzJfdDsKKyAgIHR5cGVkZWYgdW5zaWduZWQgaW50IHNweF91aW50MzJfdDsKKworI2Vsc2UKKworIyAgaW5jbHVkZSA8c3BlZXgvc3BlZXhfY29uZmlnX3R5cGVzLmg+CisKKyNlbmRpZgorCisjZW5kaWYgIC8qIF9TUEVFWF9UWVBFU19IICovCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC8uY3ZzaWdub3JlIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvLmN2c2lnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWE5MGFjCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvLmN2c2lnbm9yZQpAQCAtMCwwICsxLDExIEBACisuZGVwcworLmxpYnMKKyoubGEKKyoubG8KKyoubworTWFrZWZpbGUKK01ha2VmaWxlLmluCit0ZXN0ZGVub2lzZQordGVzdGVuYwordGVzdGVuY191d2IKK3Rlc3RlbmNfd2IKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L01ha2VmaWxlLmFtIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY2ZDRiYwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNDIgQEAKKyMgRGlzYWJsZSBhdXRvbWF0aWMgZGVwZW5kZW5jeSB0cmFja2luZyBpZiB1c2luZyBvdGhlciB0b29scyB0aGFuIGdjYyBhbmQgZ21ha2UKKyNBVVRPTUFLRV9PUFRJT05TID0gbm8tZGVwZW5kZW5jaWVzCisKKworRVhUUkFfRElTVD1lY2hvX2RpYWdub3N0aWMubQorCitJTkNMVURFUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUgLUkkKHRvcF9idWlsZGRpcikgQE9HR19DRkxBR1NACisKK2xpYl9MVExJQlJBUklFUyA9IGxpYnNwZWV4LmxhCisKKyMgU291cmNlcyBmb3IgY29tcGlsYXRpb24gaW4gdGhlIGxpYnJhcnkKK2xpYnNwZWV4X2xhX1NPVVJDRVMgPSBuYl9jZWxwLmMgCXNiX2NlbHAuYyAJbHBjLmMgCWx0cC5jIAlsc3AuYyAJcXVhbnRfbHNwLmMgXAorCQkJCWxzcF90YWJsZXNfbmIuYyAJZ2Fpbl90YWJsZS5jIAlnYWluX3RhYmxlX2xici5jIAljYl9zZWFyY2guYyAJZmlsdGVycy5jIAliaXRzLmMgXAorCQkJCW1vZGVzLmMgCXNwZWV4LmMgCXZxLmMgCWhpZ2hfbHNwX3RhYmxlcy5jIAl2YnIuYyAJaGV4Y190YWJsZS5jIFwKKwkJCQlleGNfNV8yNTZfdGFibGUuYyAJZXhjXzVfNjRfdGFibGUuYyAJZXhjXzhfMTI4X3RhYmxlLmMgCWV4Y18xMF8zMl90YWJsZS5jIFwKKwkJCQlleGNfMTBfMTZfdGFibGUuYyAJZXhjXzIwXzMyX3RhYmxlLmMgCWhleGNfMTBfMzJfdGFibGUuYyAJbWlzYy5jIAlzcGVleF9oZWFkZXIuYyBcCisJCQkJc3BlZXhfY2FsbGJhY2tzLmMgCW1hdGhfYXBwcm94LmMgCXN0ZXJlby5jIAlwcmVwcm9jZXNzLmMgCXNtYWxsZnQuYyAJbGJyXzQ4a190YWJsZXMuYyBcCisJCQkJaml0dGVyLmMgCW1kZi5jIHZvcmJpc19wc3kuYyBmZnR3cmFwLmMga2lzc19mZnQuYyBfa2lzc19mZnRfZ3V0cy5oIGtpc3NfZmZ0LmggXAorCWtpc3NfZmZ0ci5jIGtpc3NfZmZ0ci5oIHdpbmRvdy5jIGZpbHRlcmJhbmsuYyByZXNhbXBsZS5jCisKK25vaW5zdF9IRUFERVJTID0gbHNwLmggCW5iX2NlbHAuaCAJbHBjLmggCWxwY19iZmluLmggCWx0cC5oIAlxdWFudF9sc3AuaCBcCisJCQkJY2Jfc2VhcmNoLmggCWZpbHRlcnMuaCAJc3RhY2tfYWxsb2MuaCAJdnEuaCAJdnFfc3NlLmggCXZxX2FybTQuaCAJdnFfYmZpbi5oIFwKKwkJCQltb2Rlcy5oIAlzYl9jZWxwLmggCXZici5oIAltaXNjLmggCW1pc2NfYmZpbi5oIAlsdHBfc3NlLmggCWx0cF9hcm00LmggXAorCQkJCWx0cF9iZmluLmggCWZpbHRlcnNfc3NlLmggCWZpbHRlcnNfYXJtNC5oIAlmaWx0ZXJzX2JmaW4uaCAJbWF0aF9hcHByb3guaCBcCisJCQkJc21hbGxmdC5oIAlhcmNoLmggCWZpeGVkX2FybTQuaCAJZml4ZWRfYXJtNWUuaCAJZml4ZWRfYmZpbi5oIAlmaXhlZF9kZWJ1Zy5oIFwKKwkJCQlmaXhlZF9nZW5lcmljLmggCWNiX3NlYXJjaF9zc2UuaCAJY2Jfc2VhcmNoX2FybTQuaCAJY2Jfc2VhcmNoX2JmaW4uaCB2b3JiaXNfcHN5LmggXAorCQlmZnR3cmFwLmggcHNldWRvZmxvYXQuaCBsc3BfYmZpbi5oIHF1YW50X2xzcF9iZmluLmggZmlsdGVyYmFuay5oCisKKworbGlic3BlZXhfbGFfTERGTEFHUyA9IC1uby11bmRlZmluZWQgLXZlcnNpb24taW5mbyBAU1BFRVhfTFRfQ1VSUkVOVEA6QFNQRUVYX0xUX1JFVklTSU9OQDpAU1BFRVhfTFRfQUdFQAorCitub2luc3RfUFJPR1JBTVMgPSB0ZXN0ZW5jIHRlc3RlbmNfd2IgdGVzdGVuY191d2IgdGVzdGRlbm9pc2UgdGVzdGVjaG8KK3Rlc3RlbmNfU09VUkNFUyA9IHRlc3RlbmMuYwordGVzdGVuY19MREFERCA9IGxpYnNwZWV4LmxhCit0ZXN0ZW5jX3diX1NPVVJDRVMgPSB0ZXN0ZW5jX3diLmMKK3Rlc3RlbmNfd2JfTERBREQgPSBsaWJzcGVleC5sYQordGVzdGVuY191d2JfU09VUkNFUyA9IHRlc3RlbmNfdXdiLmMKK3Rlc3RlbmNfdXdiX0xEQUREID0gbGlic3BlZXgubGEKK3Rlc3RkZW5vaXNlX1NPVVJDRVMgPSB0ZXN0ZGVub2lzZS5jCit0ZXN0ZGVub2lzZV9MREFERCA9IGxpYnNwZWV4LmxhCit0ZXN0ZWNob19TT1VSQ0VTID0gdGVzdGVjaG8uYwordGVzdGVjaG9fTERBREQgPSBsaWJzcGVleC5sYQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvX2tpc3NfZmZ0X2d1dHMuaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L19raXNzX2ZmdF9ndXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI2YTczYgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L19raXNzX2ZmdF9ndXRzLmgKQEAgLTAsMCArMSwxNjAgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNCwgTWFyayBCb3JnZXJkaW5nCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNkZWZpbmUgTUlOKGEsYikgKChhKTwoYikgPyAoYSk6KGIpKQorI2RlZmluZSBNQVgoYSxiKSAoKGEpPihiKSA/IChhKTooYikpCisKKy8qIGtpc3NfZmZ0LmgKKyAgIGRlZmluZXMga2lzc19mZnRfc2NhbGFyIGFzIGVpdGhlciBzaG9ydCBvciBhIGZsb2F0IHR5cGUKKyAgIGFuZCBkZWZpbmVzCisgICB0eXBlZGVmIHN0cnVjdCB7IGtpc3NfZmZ0X3NjYWxhciByOyBraXNzX2ZmdF9zY2FsYXIgaTsgfWtpc3NfZmZ0X2NweDsgKi8KKyNpbmNsdWRlICJraXNzX2ZmdC5oIgorI2luY2x1ZGUgIm1hdGhfYXBwcm94LmgiCisKKyNkZWZpbmUgTUFYRkFDVE9SUyAzMgorLyogZS5nLiBhbiBmZnQgb2YgbGVuZ3RoIDEyOCBoYXMgNCBmYWN0b3JzIAorIGFzIGZhciBhcyBraXNzZmZ0IGlzIGNvbmNlcm5lZAorIDQqNCo0KjIKKyAqLworCitzdHJ1Y3Qga2lzc19mZnRfc3RhdGV7CisgICAgaW50IG5mZnQ7CisgICAgaW50IGludmVyc2U7CisgICAgaW50IGZhY3RvcnNbMipNQVhGQUNUT1JTXTsKKyAgICBraXNzX2ZmdF9jcHggdHdpZGRsZXNbMV07Cit9OworCisvKgorICBFeHBsYW5hdGlvbiBvZiBtYWNyb3MgZGVhbGluZyB3aXRoIGNvbXBsZXggbWF0aDoKKworICAgQ19NVUwobSxhLGIpICAgICAgICAgOiBtID0gYSpiCisgICBDX0ZJWERJViggYyAsIGRpdiApICA6IGlmIGEgZml4ZWQgcG9pbnQgaW1wbC4sIGMgLz0gZGl2LiBub29wIG90aGVyd2lzZQorICAgQ19TVUIoIHJlcywgYSxiKSAgICAgOiByZXMgPSBhIC0gYgorICAgQ19TVUJGUk9NKCByZXMgLCBhKSAgOiByZXMgLT0gYQorICAgQ19BRERUTyggcmVzICwgYSkgICAgOiByZXMgKz0gYQorICogKi8KKyNpZmRlZiBGSVhFRF9QT0lOVAorI2luY2x1ZGUgIm1pc2MuaCIKKyMgZGVmaW5lIEZSQUNCSVRTIDE1CisjIGRlZmluZSBTQU1QUFJPRCBzcHhfaW50MzJfdCAKKyNkZWZpbmUgU0FNUF9NQVggMzI3NjcKKworI2RlZmluZSBTQU1QX01JTiAtU0FNUF9NQVgKKworI2lmIGRlZmluZWQoQ0hFQ0tfT1ZFUkZMT1cpCisjICBkZWZpbmUgQ0hFQ0tfT1ZFUkZMT1dfT1AoYSxvcCxiKSAgXAorCWlmICggKFNBTVBQUk9EKShhKSBvcCAoU0FNUFBST0QpKGIpID4gU0FNUF9NQVggfHwgKFNBTVBQUk9EKShhKSBvcCAoU0FNUFBST0QpKGIpIDwgU0FNUF9NSU4gKSB7IFwKKwkJZnByaW50ZihzdGRlcnIsIldBUk5JTkc6b3ZlcmZsb3cgQCAiIF9fRklMRV9fICIoJWQpOiAoJWQgIiAjb3AiICVkKSA9ICVsZFxuIixfX0xJTkVfXywoYSksKGIpLChTQU1QUFJPRCkoYSkgb3AgKFNBTVBQUk9EKShiKSApOyAgfQorI2VuZGlmCisKKworIyAgIGRlZmluZSBzbXVsKGEsYikgKCAoU0FNUFBST0QpKGEpKihiKSApCisjICAgZGVmaW5lIHNyb3VuZCggeCApICAoa2lzc19mZnRfc2NhbGFyKSggKCAoeCkgKyAoMTw8KEZSQUNCSVRTLTEpKSApID4+IEZSQUNCSVRTICkKKworIyAgIGRlZmluZSBTX01VTChhLGIpIHNyb3VuZCggc211bChhLGIpICkKKworIyAgIGRlZmluZSBDX01VTChtLGEsYikgXAorICAgICAgZG97IChtKS5yID0gc3JvdW5kKCBzbXVsKChhKS5yLChiKS5yKSAtIHNtdWwoKGEpLmksKGIpLmkpICk7IFwKKyAgICAgICAgICAobSkuaSA9IHNyb3VuZCggc211bCgoYSkuciwoYikuaSkgKyBzbXVsKChhKS5pLChiKS5yKSApOyB9d2hpbGUoMCkKKworIyAgIGRlZmluZSBDX01VTDQobSxhLGIpIFwKKyAgICAgICAgICAgICAgIGRveyAobSkuciA9IFBTSFIzMiggc211bCgoYSkuciwoYikucikgLSBzbXVsKChhKS5pLChiKS5pKSwxNyApOyBcCisgICAgICAgICAgICAgICAobSkuaSA9IFBTSFIzMiggc211bCgoYSkuciwoYikuaSkgKyBzbXVsKChhKS5pLChiKS5yKSwxNyApOyB9d2hpbGUoMCkKKworIyAgIGRlZmluZSBESVZTQ0FMQVIoeCxrKSBcCisJKHgpID0gc3JvdW5kKCBzbXVsKCAgeCwgU0FNUF9NQVgvayApICkKKworIyAgIGRlZmluZSBDX0ZJWERJVihjLGRpdikgXAorCWRvIHsgICAgRElWU0NBTEFSKCAoYykuciAsIGRpdik7ICBcCisJCURJVlNDQUxBUiggKGMpLmkgICwgZGl2KTsgfXdoaWxlICgwKQorCisjICAgZGVmaW5lIENfTVVMQllTQ0FMQVIoIGMsIHMgKSBcCisgICAgZG97IChjKS5yID0gIHNyb3VuZCggc211bCggKGMpLnIgLCBzICkgKSA7XAorICAgICAgICAoYykuaSA9ICBzcm91bmQoIHNtdWwoIChjKS5pICwgcyApICkgOyB9d2hpbGUoMCkKKworI2Vsc2UgIC8qIG5vdCBGSVhFRF9QT0lOVCovCisKKyMgICBkZWZpbmUgU19NVUwoYSxiKSAoIChhKSooYikgKQorI2RlZmluZSBDX01VTChtLGEsYikgXAorICAgIGRveyAobSkuciA9IChhKS5yKihiKS5yIC0gKGEpLmkqKGIpLmk7XAorICAgICAgICAobSkuaSA9IChhKS5yKihiKS5pICsgKGEpLmkqKGIpLnI7IH13aGlsZSgwKQorCisjZGVmaW5lIENfTVVMNChtLGEsYikgQ19NVUwobSxhLGIpCisKKyMgICBkZWZpbmUgQ19GSVhESVYoYyxkaXYpIC8qIE5PT1AgKi8KKyMgICBkZWZpbmUgQ19NVUxCWVNDQUxBUiggYywgcyApIFwKKyAgICBkb3sgKGMpLnIgKj0gKHMpO1wKKyAgICAgICAgKGMpLmkgKj0gKHMpOyB9d2hpbGUoMCkKKyNlbmRpZgorCisjaWZuZGVmIENIRUNLX09WRVJGTE9XX09QCisjICBkZWZpbmUgQ0hFQ0tfT1ZFUkZMT1dfT1AoYSxvcCxiKSAvKiBub29wICovCisjZW5kaWYKKworI2RlZmluZSAgQ19BREQoIHJlcywgYSxiKVwKKyAgICBkbyB7IFwKKwkgICAgQ0hFQ0tfT1ZFUkZMT1dfT1AoKGEpLnIsKywoYikucilcCisJICAgIENIRUNLX09WRVJGTE9XX09QKChhKS5pLCssKGIpLmkpXAorCSAgICAocmVzKS5yPShhKS5yKyhiKS5yOyAgKHJlcykuaT0oYSkuaSsoYikuaTsgXAorICAgIH13aGlsZSgwKQorI2RlZmluZSAgQ19TVUIoIHJlcywgYSxiKVwKKyAgICBkbyB7IFwKKwkgICAgQ0hFQ0tfT1ZFUkZMT1dfT1AoKGEpLnIsLSwoYikucilcCisJICAgIENIRUNLX09WRVJGTE9XX09QKChhKS5pLC0sKGIpLmkpXAorCSAgICAocmVzKS5yPShhKS5yLShiKS5yOyAgKHJlcykuaT0oYSkuaS0oYikuaTsgXAorICAgIH13aGlsZSgwKQorI2RlZmluZSBDX0FERFRPKCByZXMgLCBhKVwKKyAgICBkbyB7IFwKKwkgICAgQ0hFQ0tfT1ZFUkZMT1dfT1AoKHJlcykuciwrLChhKS5yKVwKKwkgICAgQ0hFQ0tfT1ZFUkZMT1dfT1AoKHJlcykuaSwrLChhKS5pKVwKKwkgICAgKHJlcykuciArPSAoYSkucjsgIChyZXMpLmkgKz0gKGEpLmk7XAorICAgIH13aGlsZSgwKQorCisjZGVmaW5lIENfU1VCRlJPTSggcmVzICwgYSlcCisgICAgZG8ge1wKKwkgICAgQ0hFQ0tfT1ZFUkZMT1dfT1AoKHJlcykuciwtLChhKS5yKVwKKwkgICAgQ0hFQ0tfT1ZFUkZMT1dfT1AoKHJlcykuaSwtLChhKS5pKVwKKwkgICAgKHJlcykuciAtPSAoYSkucjsgIChyZXMpLmkgLT0gKGEpLmk7IFwKKyAgICB9d2hpbGUoMCkKKworCisjaWZkZWYgRklYRURfUE9JTlQKKyMgIGRlZmluZSBLSVNTX0ZGVF9DT1MocGhhc2UpICBmbG9vcihNSU4oMzI3NjcsTUFYKC0zMjc2NywuNSszMjc2OCAqIGNvcyAocGhhc2UpKSkpCisjICBkZWZpbmUgS0lTU19GRlRfU0lOKHBoYXNlKSAgZmxvb3IoTUlOKDMyNzY3LE1BWCgtMzI3NjcsLjUrMzI3NjggKiBzaW4gKHBoYXNlKSkpKQorIyAgZGVmaW5lIEhBTEZfT0YoeCkgKCh4KT4+MSkKKyNlbGlmIGRlZmluZWQoVVNFX1NJTUQpCisjICBkZWZpbmUgS0lTU19GRlRfQ09TKHBoYXNlKSBfbW1fc2V0MV9wcyggY29zKHBoYXNlKSApCisjICBkZWZpbmUgS0lTU19GRlRfU0lOKHBoYXNlKSBfbW1fc2V0MV9wcyggc2luKHBoYXNlKSApCisjICBkZWZpbmUgSEFMRl9PRih4KSAoKHgpKl9tbV9zZXQxX3BzKC41KSkKKyNlbHNlCisjICBkZWZpbmUgS0lTU19GRlRfQ09TKHBoYXNlKSAoa2lzc19mZnRfc2NhbGFyKSBjb3MocGhhc2UpCisjICBkZWZpbmUgS0lTU19GRlRfU0lOKHBoYXNlKSAoa2lzc19mZnRfc2NhbGFyKSBzaW4ocGhhc2UpCisjICBkZWZpbmUgSEFMRl9PRih4KSAoKHgpKi41KQorI2VuZGlmCisKKyNkZWZpbmUgIGtmX2NleHAoeCxwaGFzZSkgXAorCWRveyBcCisJCSh4KS0+ciA9IEtJU1NfRkZUX0NPUyhwaGFzZSk7XAorCQkoeCktPmkgPSBLSVNTX0ZGVF9TSU4ocGhhc2UpO1wKKwl9d2hpbGUoMCkKKyNkZWZpbmUgIGtmX2NleHAyKHgscGhhc2UpIFwKKyAgICAgICAgICAgICAgIGRveyBcCisgICAgICAgICAgICAgICAoeCktPnIgPSBzcHhfY29zX25vcm0oKHBoYXNlKSk7XAorICAgICAgICAgICAgICAgKHgpLT5pID0gc3B4X2Nvc19ub3JtKChwaGFzZSktMzI3NjgpO1wKK313aGlsZSgwKQorCisKKy8qIGEgZGVidWdnaW5nIGZ1bmN0aW9uICovCisjZGVmaW5lIHBjcHgoYylcCisgICAgZnByaW50ZihzdGRlcnIsIiVnICsgJWdpXG4iLChkb3VibGUpKChjKS0+ciksKGRvdWJsZSkoKGMpLT5pKSApCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9hcmNoLmggYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9hcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJkNzMxYQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2FyY2guaApAQCAtMCwwICsxLDE5NyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAzIEplYW4tTWFyYyBWYWxpbiAqLworLyoqCisgICBAZmlsZSBhcmNoLmgKKyAgIEBicmllZiBWYXJpb3VzIGFyY2hpdGVjdHVyZSBkZWZpbml0aW9ucyBTcGVleAorKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgQVJDSF9ICisjZGVmaW5lIEFSQ0hfSAorCisjaWZuZGVmIE9VVFNJREVfU1BFRVgKKyNpbmNsdWRlICJzcGVleC9zcGVleF90eXBlcy5oIgorI2VuZGlmCisKKyNkZWZpbmUgQUJTKHgpICgoeCkgPCAwID8gKC0oeCkpIDogKHgpKSAgICAgIC8qKjwgQWJzb2x1dGUgaW50ZWdlciB2YWx1ZS4gKi8KKyNkZWZpbmUgQUJTMTYoeCkgKCh4KSA8IDAgPyAoLSh4KSkgOiAoeCkpICAgIC8qKjwgQWJzb2x1dGUgMTYtYml0IHZhbHVlLiAgKi8KKyNkZWZpbmUgTUlOMTYoYSxiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKSAgIC8qKjwgTWF4aW11bSAxNi1iaXQgdmFsdWUuICAgKi8KKyNkZWZpbmUgTUFYMTYoYSxiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKSAgIC8qKjwgTWF4aW11bSAxNi1iaXQgdmFsdWUuICAgKi8KKyNkZWZpbmUgQUJTMzIoeCkgKCh4KSA8IDAgPyAoLSh4KSkgOiAoeCkpICAgIC8qKjwgQWJzb2x1dGUgMzItYml0IHZhbHVlLiAgKi8KKyNkZWZpbmUgTUlOMzIoYSxiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKSAgIC8qKjwgTWF4aW11bSAzMi1iaXQgdmFsdWUuICAgKi8KKyNkZWZpbmUgTUFYMzIoYSxiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKSAgIC8qKjwgTWF4aW11bSAzMi1iaXQgdmFsdWUuICAgKi8KKworI2lmZGVmIEZJWEVEX1BPSU5UCisKK3R5cGVkZWYgc3B4X2ludDE2X3Qgc3B4X3dvcmQxNl90OwordHlwZWRlZiBzcHhfaW50MzJfdCAgIHNweF93b3JkMzJfdDsKK3R5cGVkZWYgc3B4X3dvcmQzMl90IHNweF9tZW1fdDsKK3R5cGVkZWYgc3B4X3dvcmQxNl90IHNweF9jb2VmX3Q7Cit0eXBlZGVmIHNweF93b3JkMTZfdCBzcHhfbHNwX3Q7Cit0eXBlZGVmIHNweF93b3JkMzJfdCBzcHhfc2lnX3Q7CisKKyNkZWZpbmUgUTE1T05FIDMyNzY3CisKKyNkZWZpbmUgTFBDX1NDQUxJTkcgIDgxOTIKKyNkZWZpbmUgU0lHX1NDQUxJTkcgIDE2Mzg0CisjZGVmaW5lIExTUF9TQ0FMSU5HICA4MTkyLgorI2RlZmluZSBHQU1NQV9TQ0FMSU5HIDMyNzY4LgorI2RlZmluZSBHQUlOX1NDQUxJTkcgNjQKKyNkZWZpbmUgR0FJTl9TQ0FMSU5HXzEgMC4wMTU2MjUKKworI2RlZmluZSBMUENfU0hJRlQgICAgMTMKKyNkZWZpbmUgTFNQX1NISUZUICAgIDEzCisjZGVmaW5lIFNJR19TSElGVCAgICAxNAorCisjZGVmaW5lIFZFUllfU01BTEwgMAorI2RlZmluZSBWRVJZX0xBUkdFMzIgKChzcHhfd29yZDMyX3QpMjE0NzQ4MzY0NykKKyNkZWZpbmUgVkVSWV9MQVJHRTE2ICgoc3B4X3dvcmQxNl90KTMyNzY3KQorI2RlZmluZSBRMTVfT05FICgoc3B4X3dvcmQxNl90KTMyNzY3KQorCisKKyNpZmRlZiBGSVhFRF9ERUJVRworI2luY2x1ZGUgImZpeGVkX2RlYnVnLmgiCisjZWxzZQorCisjaW5jbHVkZSAiZml4ZWRfZ2VuZXJpYy5oIgorCisjaWZkZWYgQVJNNUVfQVNNCisjaW5jbHVkZSAiZml4ZWRfYXJtNWUuaCIKKyNlbGlmIGRlZmluZWQgKEFSTTRfQVNNKQorI2luY2x1ZGUgImZpeGVkX2FybTQuaCIKKyNlbGlmIGRlZmluZWQgKEFSTTVFX0FTTSkKKyNpbmNsdWRlICJmaXhlZF9hcm01ZS5oIgorI2VsaWYgZGVmaW5lZCAoQkZJTl9BU00pCisjaW5jbHVkZSAiZml4ZWRfYmZpbi5oIgorI2VuZGlmCisKKyNlbmRpZgorCisKKyNlbHNlCisKK3R5cGVkZWYgZmxvYXQgc3B4X21lbV90OwordHlwZWRlZiBmbG9hdCBzcHhfY29lZl90OwordHlwZWRlZiBmbG9hdCBzcHhfbHNwX3Q7Cit0eXBlZGVmIGZsb2F0IHNweF9zaWdfdDsKK3R5cGVkZWYgZmxvYXQgc3B4X3dvcmQxNl90OwordHlwZWRlZiBmbG9hdCBzcHhfd29yZDMyX3Q7CisKKyNkZWZpbmUgUTE1T05FIDEuMGYKKyNkZWZpbmUgTFBDX1NDQUxJTkcgIDEuZgorI2RlZmluZSBTSUdfU0NBTElORyAgMS5mCisjZGVmaW5lIExTUF9TQ0FMSU5HICAxLmYKKyNkZWZpbmUgR0FNTUFfU0NBTElORyAxLmYKKyNkZWZpbmUgR0FJTl9TQ0FMSU5HIDEuZgorI2RlZmluZSBHQUlOX1NDQUxJTkdfMSAxLmYKKworI2RlZmluZSBMUENfU0hJRlQgICAgMAorI2RlZmluZSBMU1BfU0hJRlQgICAgMAorI2RlZmluZSBTSUdfU0hJRlQgICAgMAorCisjZGVmaW5lIFZFUllfU01BTEwgMWUtMTVmCisjZGVmaW5lIFZFUllfTEFSR0UzMiAxZTE1ZgorI2RlZmluZSBWRVJZX0xBUkdFMTYgMWUxNWYKKyNkZWZpbmUgUTE1X09ORSAoKHNweF93b3JkMTZfdCkxLmYpCisKKyNkZWZpbmUgUUNPTlNUMTYoeCxiaXRzKSAoeCkKKyNkZWZpbmUgUUNPTlNUMzIoeCxiaXRzKSAoeCkKKworI2RlZmluZSBORUcxNih4KSAoLSh4KSkKKyNkZWZpbmUgTkVHMzIoeCkgKC0oeCkpCisjZGVmaW5lIEVYVFJBQ1QxNih4KSAoeCkKKyNkZWZpbmUgRVhURU5EMzIoeCkgKHgpCisjZGVmaW5lIFNIUjE2KGEsc2hpZnQpIChhKQorI2RlZmluZSBTSEwxNihhLHNoaWZ0KSAoYSkKKyNkZWZpbmUgU0hSMzIoYSxzaGlmdCkgKGEpCisjZGVmaW5lIFNITDMyKGEsc2hpZnQpIChhKQorI2RlZmluZSBQU0hSMTYoYSxzaGlmdCkgKGEpCisjZGVmaW5lIFBTSFIzMihhLHNoaWZ0KSAoYSkKKyNkZWZpbmUgVlNIUjMyKGEsc2hpZnQpIChhKQorI2RlZmluZSBTQVRVUkFURTE2KHgsYSkgKHgpCisjZGVmaW5lIFNBVFVSQVRFMzIoeCxhKSAoeCkKKworI2RlZmluZSBQU0hSKGEsc2hpZnQpICAgICAgIChhKQorI2RlZmluZSBTSFIoYSxzaGlmdCkgICAgICAgKGEpCisjZGVmaW5lIFNITChhLHNoaWZ0KSAgICAgICAoYSkKKyNkZWZpbmUgU0FUVVJBVEUoeCxhKSAoeCkKKworI2RlZmluZSBBREQxNihhLGIpICgoYSkrKGIpKQorI2RlZmluZSBTVUIxNihhLGIpICgoYSktKGIpKQorI2RlZmluZSBBREQzMihhLGIpICgoYSkrKGIpKQorI2RlZmluZSBTVUIzMihhLGIpICgoYSktKGIpKQorI2RlZmluZSBNVUxUMTZfMTZfMTYoYSxiKSAgICAgKChhKSooYikpCisjZGVmaW5lIE1VTFQxNl8xNihhLGIpICAgICAoKHNweF93b3JkMzJfdCkoYSkqKHNweF93b3JkMzJfdCkoYikpCisjZGVmaW5lIE1BQzE2XzE2KGMsYSxiKSAgICAgKChjKSsoc3B4X3dvcmQzMl90KShhKSooc3B4X3dvcmQzMl90KShiKSkKKworI2RlZmluZSBNVUxUMTZfMzJfUTExKGEsYikgICAgICgoYSkqKGIpKQorI2RlZmluZSBNVUxUMTZfMzJfUTEzKGEsYikgICAgICgoYSkqKGIpKQorI2RlZmluZSBNVUxUMTZfMzJfUTE0KGEsYikgICAgICgoYSkqKGIpKQorI2RlZmluZSBNVUxUMTZfMzJfUTE1KGEsYikgICAgICgoYSkqKGIpKQorI2RlZmluZSBNVUxUMTZfMzJfUDE1KGEsYikgICAgICgoYSkqKGIpKQorCisjZGVmaW5lIE1BQzE2XzMyX1ExMShjLGEsYikgICAgICgoYykrKGEpKihiKSkKKyNkZWZpbmUgTUFDMTZfMzJfUTE1KGMsYSxiKSAgICAgKChjKSsoYSkqKGIpKQorCisjZGVmaW5lIE1BQzE2XzE2X1ExMShjLGEsYikgICAgICgoYykrKGEpKihiKSkKKyNkZWZpbmUgTUFDMTZfMTZfUTEzKGMsYSxiKSAgICAgKChjKSsoYSkqKGIpKQorI2RlZmluZSBNQUMxNl8xNl9QMTMoYyxhLGIpICAgICAoKGMpKyhhKSooYikpCisjZGVmaW5lIE1VTFQxNl8xNl9RMTFfMzIoYSxiKSAgICAgKChhKSooYikpCisjZGVmaW5lIE1VTFQxNl8xNl9RMTMoYSxiKSAgICAgKChhKSooYikpCisjZGVmaW5lIE1VTFQxNl8xNl9RMTQoYSxiKSAgICAgKChhKSooYikpCisjZGVmaW5lIE1VTFQxNl8xNl9RMTUoYSxiKSAgICAgKChhKSooYikpCisjZGVmaW5lIE1VTFQxNl8xNl9QMTUoYSxiKSAgICAgKChhKSooYikpCisjZGVmaW5lIE1VTFQxNl8xNl9QMTMoYSxiKSAgICAgKChhKSooYikpCisjZGVmaW5lIE1VTFQxNl8xNl9QMTQoYSxiKSAgICAgKChhKSooYikpCisKKyNkZWZpbmUgRElWMzJfMTYoYSxiKSAgICAgKCgoc3B4X3dvcmQzMl90KShhKSkvKHNweF93b3JkMTZfdCkoYikpCisjZGVmaW5lIFBESVYzMl8xNihhLGIpICAgICAoKChzcHhfd29yZDMyX3QpKGEpKS8oc3B4X3dvcmQxNl90KShiKSkKKyNkZWZpbmUgRElWMzIoYSxiKSAgICAgKCgoc3B4X3dvcmQzMl90KShhKSkvKHNweF93b3JkMzJfdCkoYikpCisjZGVmaW5lIFBESVYzMihhLGIpICAgICAoKChzcHhfd29yZDMyX3QpKGEpKS8oc3B4X3dvcmQzMl90KShiKSkKKworCisjZW5kaWYKKworCisjaWYgZGVmaW5lZCAoQ09ORklHX1RJX0M1NFgpIHx8IGRlZmluZWQgKENPTkZJR19USV9DNTVYKQorCisvKiAyIG9uIFRJIEM1eCBEU1AgKi8KKyNkZWZpbmUgQllURVNfUEVSX0NIQVIgMiAKKyNkZWZpbmUgQklUU19QRVJfQ0hBUiAxNgorI2RlZmluZSBMT0cyX0JJVFNfUEVSX0NIQVIgNAorCisjZWxzZSAKKworI2RlZmluZSBCWVRFU19QRVJfQ0hBUiAxCisjZGVmaW5lIEJJVFNfUEVSX0NIQVIgOAorI2RlZmluZSBMT0cyX0JJVFNfUEVSX0NIQVIgMworCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9iaXRzLmMgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9iaXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0Y2IwZQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2JpdHMuYwpAQCAtMCwwICsxLDM2MyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAKKyAgIEZpbGU6IHNwZWV4X2JpdHMuYworCisgICBIYW5kbGVzIGJpdCBwYWNraW5nL3VucGFja2luZworCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3BlZXgvc3BlZXhfYml0cy5oPgorI2luY2x1ZGUgIm1pc2MuaCIKKworLyogTWF4aW11bSBzaXplIG9mIHRoZSBiaXQtc3RyZWFtIChmb3IgZml4ZWQtc2l6ZSBhbGxvY2F0aW9uKSAqLworI2lmbmRlZiBNQVhfQ0hBUlNfUEVSX0ZSQU1FCisjZGVmaW5lIE1BWF9DSEFSU19QRVJfRlJBTUUgKDIwMDAvQllURVNfUEVSX0NIQVIpCisjZW5kaWYKKwordm9pZCBzcGVleF9iaXRzX2luaXQoU3BlZXhCaXRzICpiaXRzKQoreworICAgYml0cy0+Y2hhcnMgPSAoY2hhciopc3BlZXhfYWxsb2MoTUFYX0NIQVJTX1BFUl9GUkFNRSk7CisgICBpZiAoIWJpdHMtPmNoYXJzKQorICAgICAgcmV0dXJuOworCisgICBiaXRzLT5idWZfc2l6ZSA9IE1BWF9DSEFSU19QRVJfRlJBTUU7CisKKyAgIGJpdHMtPm93bmVyPTE7CisKKyAgIHNwZWV4X2JpdHNfcmVzZXQoYml0cyk7Cit9CisKK3ZvaWQgc3BlZXhfYml0c19pbml0X2J1ZmZlcihTcGVleEJpdHMgKmJpdHMsIHZvaWQgKmJ1ZmYsIGludCBidWZfc2l6ZSkKK3sKKyAgIGJpdHMtPmNoYXJzID0gKGNoYXIqKWJ1ZmY7CisgICBiaXRzLT5idWZfc2l6ZSA9IGJ1Zl9zaXplOworCisgICBiaXRzLT5vd25lcj0wOworCisgICBzcGVleF9iaXRzX3Jlc2V0KGJpdHMpOworfQorCit2b2lkIHNwZWV4X2JpdHNfZGVzdHJveShTcGVleEJpdHMgKmJpdHMpCit7CisgICBpZiAoYml0cy0+b3duZXIpCisgICAgICBzcGVleF9mcmVlKGJpdHMtPmNoYXJzKTsKKyAgIC8qIFdpbGwgZG8gc29tZXRoaW5nIG9uY2UgdGhlIGFsbG9jYXRpb24gaXMgZHluYW1pYyAqLworfQorCit2b2lkIHNwZWV4X2JpdHNfcmVzZXQoU3BlZXhCaXRzICpiaXRzKQoreworICAgLyogV2Ugb25seSBuZWVkIHRvIGNsZWFyIHRoZSBmaXJzdCBieXRlIG5vdyAqLworICAgYml0cy0+Y2hhcnNbMF09MDsKKyAgIGJpdHMtPm5iQml0cz0wOworICAgYml0cy0+Y2hhclB0cj0wOworICAgYml0cy0+Yml0UHRyPTA7CisgICBiaXRzLT5vdmVyZmxvdz0wOworfQorCit2b2lkIHNwZWV4X2JpdHNfcmV3aW5kKFNwZWV4Qml0cyAqYml0cykKK3sKKyAgIGJpdHMtPmNoYXJQdHI9MDsKKyAgIGJpdHMtPmJpdFB0cj0wOworICAgYml0cy0+b3ZlcmZsb3c9MDsKK30KKwordm9pZCBzcGVleF9iaXRzX3JlYWRfZnJvbShTcGVleEJpdHMgKmJpdHMsIGNoYXIgKmNoYXJzLCBpbnQgbGVuKQoreworICAgaW50IGk7CisgICBpbnQgbmNoYXJzID0gbGVuIC8gQllURVNfUEVSX0NIQVI7CisgICBpZiAobmNoYXJzID4gYml0cy0+YnVmX3NpemUpCisgICB7CisgICAgICBzcGVleF9ub3RpZnkoIlBhY2tldCBpcyBsYXJnZXIgdGhhbiBhbGxvY2F0ZWQgYnVmZmVyIik7CisgICAgICBpZiAoYml0cy0+b3duZXIpCisgICAgICB7CisgICAgICAgICBjaGFyICp0bXAgPSAoY2hhciopc3BlZXhfcmVhbGxvYyhiaXRzLT5jaGFycywgbmNoYXJzKTsKKyAgICAgICAgIGlmICh0bXApCisgICAgICAgICB7CisgICAgICAgICAgICBiaXRzLT5idWZfc2l6ZT1uY2hhcnM7CisgICAgICAgICAgICBiaXRzLT5jaGFycz10bXA7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmNoYXJzPWJpdHMtPmJ1Zl9zaXplOworICAgICAgICAgICAgc3BlZXhfd2FybmluZygiQ291bGQgbm90IHJlc2l6ZSBpbnB1dCBidWZmZXI6IHRydW5jYXRpbmcgaW5wdXQiKTsKKyAgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgICBzcGVleF93YXJuaW5nKCJEbyBub3Qgb3duIGlucHV0IGJ1ZmZlcjogdHJ1bmNhdGluZyBvdmVyc2l6ZSBpbnB1dCIpOworICAgICAgICAgbmNoYXJzPWJpdHMtPmJ1Zl9zaXplOworICAgICAgfQorICAgfQorI2lmIChCWVRFU19QRVJfQ0hBUj09MikKKy8qIFN3YXAgYnl0ZXMgdG8gcHJvcGVyIGVuZGlhbiBvcmRlciAoY291bGQgYmUgZG9uZSBleHRlcm5hbGx5KSAqLworI2RlZmluZSBIVE9MUyhBKSAoKCgoQSkgPj4gOCkmMHhmZil8KCgoQSkgJiAweGZmKTw8OCkpCisjZWxzZQorI2RlZmluZSBIVE9MUyhBKSAoQSkKKyNlbmRpZgorICAgZm9yIChpPTA7aTxuY2hhcnM7aSsrKQorICAgICAgYml0cy0+Y2hhcnNbaV09SFRPTFMoY2hhcnNbaV0pOworCisgICBiaXRzLT5uYkJpdHM9bmNoYXJzPDxMT0cyX0JJVFNfUEVSX0NIQVI7CisgICBiaXRzLT5jaGFyUHRyPTA7CisgICBiaXRzLT5iaXRQdHI9MDsKKyAgIGJpdHMtPm92ZXJmbG93PTA7Cit9CisKK3N0YXRpYyB2b2lkIHNwZWV4X2JpdHNfZmx1c2goU3BlZXhCaXRzICpiaXRzKQoreworICAgaW50IGk7CisgICBpbnQgbmNoYXJzID0gKChiaXRzLT5uYkJpdHMrQklUU19QRVJfQ0hBUi0xKT4+TE9HMl9CSVRTX1BFUl9DSEFSKTsKKyAgIGlmIChiaXRzLT5jaGFyUHRyPjApCisgICB7CisgICAgIGZvciAoaT1iaXRzLT5jaGFyUHRyO2k8bmNoYXJzOyBpKyspIAorICAgICAgIGJpdHMtPmNoYXJzW2ktYml0cy0+Y2hhclB0cl09Yml0cy0+Y2hhcnNbaV07CisgICB9CisgICBiaXRzLT5uYkJpdHMgLT0gYml0cy0+Y2hhclB0cjw8TE9HMl9CSVRTX1BFUl9DSEFSOworICAgYml0cy0+Y2hhclB0cj0wOworfQorCit2b2lkIHNwZWV4X2JpdHNfcmVhZF93aG9sZV9ieXRlcyhTcGVleEJpdHMgKmJpdHMsIGNoYXIgKmNoYXJzLCBpbnQgbmJ5dGVzKQoreworICAgaW50IGkscG9zOworICAgaW50IG5jaGFycyA9IG5ieXRlcy9CWVRFU19QRVJfQ0hBUjsKKworICAgaWYgKCgoYml0cy0+bmJCaXRzK0JJVFNfUEVSX0NIQVItMSk+PkxPRzJfQklUU19QRVJfQ0hBUikrbmNoYXJzID4gYml0cy0+YnVmX3NpemUpCisgICB7CisgICAgICAvKiBQYWNrZXQgaXMgbGFyZ2VyIHRoYW4gYWxsb2NhdGVkIGJ1ZmZlciAqLworICAgICAgaWYgKGJpdHMtPm93bmVyKQorICAgICAgeworICAgICAgICAgY2hhciAqdG1wID0gKGNoYXIqKXNwZWV4X3JlYWxsb2MoYml0cy0+Y2hhcnMsIChiaXRzLT5uYkJpdHM+PkxPRzJfQklUU19QRVJfQ0hBUikrbmNoYXJzKzEpOworICAgICAgICAgaWYgKHRtcCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGJpdHMtPmJ1Zl9zaXplPShiaXRzLT5uYkJpdHM+PkxPRzJfQklUU19QRVJfQ0hBUikrbmNoYXJzKzE7CisgICAgICAgICAgICBiaXRzLT5jaGFycz10bXA7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmNoYXJzPWJpdHMtPmJ1Zl9zaXplLShiaXRzLT5uYkJpdHM+PkxPRzJfQklUU19QRVJfQ0hBUiktMTsKKyAgICAgICAgICAgIHNwZWV4X3dhcm5pbmcoIkNvdWxkIG5vdCByZXNpemUgaW5wdXQgYnVmZmVyOiB0cnVuY2F0aW5nIG92ZXJzaXplIGlucHV0Iik7CisgICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAgc3BlZXhfd2FybmluZygiRG8gbm90IG93biBpbnB1dCBidWZmZXI6IHRydW5jYXRpbmcgb3ZlcnNpemUgaW5wdXQiKTsKKyAgICAgICAgIG5jaGFycz1iaXRzLT5idWZfc2l6ZTsKKyAgICAgIH0KKyAgIH0KKworICAgc3BlZXhfYml0c19mbHVzaChiaXRzKTsKKyAgIHBvcz1iaXRzLT5uYkJpdHM+PkxPRzJfQklUU19QRVJfQ0hBUjsKKyAgIGZvciAoaT0wO2k8bmNoYXJzO2krKykKKyAgICAgIGJpdHMtPmNoYXJzW3BvcytpXT1IVE9MUyhjaGFyc1tpXSk7CisgICBiaXRzLT5uYkJpdHMrPW5jaGFyczw8TE9HMl9CSVRTX1BFUl9DSEFSOworfQorCitpbnQgc3BlZXhfYml0c193cml0ZShTcGVleEJpdHMgKmJpdHMsIGNoYXIgKmNoYXJzLCBpbnQgbWF4X25ieXRlcykKK3sKKyAgIGludCBpOworICAgaW50IG1heF9uY2hhcnMgPSBtYXhfbmJ5dGVzL0JZVEVTX1BFUl9DSEFSOworICAgaW50IGNoYXJQdHIsIGJpdFB0ciwgbmJCaXRzOworCisgICAvKiBJbnNlcnQgdGVybWluYXRvciwgYnV0IHNhdmUgdGhlIGRhdGEgc28gd2UgY2FuIHB1dCBpdCBiYWNrIGFmdGVyICovCisgICBiaXRQdHI9Yml0cy0+Yml0UHRyOworICAgY2hhclB0cj1iaXRzLT5jaGFyUHRyOworICAgbmJCaXRzPWJpdHMtPm5iQml0czsKKyAgIHNwZWV4X2JpdHNfaW5zZXJ0X3Rlcm1pbmF0b3IoYml0cyk7CisgICBiaXRzLT5iaXRQdHI9Yml0UHRyOworICAgYml0cy0+Y2hhclB0cj1jaGFyUHRyOworICAgYml0cy0+bmJCaXRzPW5iQml0czsKKworICAgaWYgKG1heF9uY2hhcnMgPiAoKGJpdHMtPm5iQml0cytCSVRTX1BFUl9DSEFSLTEpPj5MT0cyX0JJVFNfUEVSX0NIQVIpKQorICAgICAgbWF4X25jaGFycyA9ICgoYml0cy0+bmJCaXRzK0JJVFNfUEVSX0NIQVItMSk+PkxPRzJfQklUU19QRVJfQ0hBUik7CisKKyAgIGZvciAoaT0wO2k8bWF4X25jaGFycztpKyspCisgICAgICBjaGFyc1tpXT1IVE9MUyhiaXRzLT5jaGFyc1tpXSk7CisgICByZXR1cm4gbWF4X25jaGFycypCWVRFU19QRVJfQ0hBUjsKK30KKworaW50IHNwZWV4X2JpdHNfd3JpdGVfd2hvbGVfYnl0ZXMoU3BlZXhCaXRzICpiaXRzLCBjaGFyICpjaGFycywgaW50IG1heF9uYnl0ZXMpCit7CisgICBpbnQgbWF4X25jaGFycyA9IG1heF9uYnl0ZXMvQllURVNfUEVSX0NIQVI7CisgICBpbnQgaTsKKyAgIGlmIChtYXhfbmNoYXJzID4gKChiaXRzLT5uYkJpdHMpPj5MT0cyX0JJVFNfUEVSX0NIQVIpKQorICAgICAgbWF4X25jaGFycyA9ICgoYml0cy0+bmJCaXRzKT4+TE9HMl9CSVRTX1BFUl9DSEFSKTsKKyAgIGZvciAoaT0wO2k8bWF4X25jaGFycztpKyspCisgICAgICBjaGFyc1tpXT1IVE9MUyhiaXRzLT5jaGFyc1tpXSk7CisKKyAgIGlmIChiaXRzLT5iaXRQdHI+MCkKKyAgICAgIGJpdHMtPmNoYXJzWzBdPWJpdHMtPmNoYXJzW21heF9uY2hhcnNdOworICAgZWxzZQorICAgICAgYml0cy0+Y2hhcnNbMF09MDsKKyAgIGZvciAoaT0xO2k8KChiaXRzLT5uYkJpdHMpPj5MT0cyX0JJVFNfUEVSX0NIQVIpKzE7aSsrKQorICAgICAgYml0cy0+Y2hhcnNbaV09MDsKKyAgIGJpdHMtPmNoYXJQdHI9MDsKKyAgIGJpdHMtPm5iQml0cyAmPSAoQklUU19QRVJfQ0hBUi0xKTsKKyAgIHJldHVybiBtYXhfbmNoYXJzKkJZVEVTX1BFUl9DSEFSOworfQorCit2b2lkIHNwZWV4X2JpdHNfcGFjayhTcGVleEJpdHMgKmJpdHMsIGludCBkYXRhLCBpbnQgbmJCaXRzKQoreworICAgdW5zaWduZWQgaW50IGQ9ZGF0YTsKKworICAgaWYgKGJpdHMtPmNoYXJQdHIrKChuYkJpdHMrYml0cy0+Yml0UHRyKT4+TE9HMl9CSVRTX1BFUl9DSEFSKSA+PSBiaXRzLT5idWZfc2l6ZSkKKyAgIHsKKyAgICAgIHNwZWV4X25vdGlmeSgiQnVmZmVyIHRvbyBzbWFsbCB0byBwYWNrIGJpdHMiKTsKKyAgICAgIGlmIChiaXRzLT5vd25lcikKKyAgICAgIHsKKyAgICAgICAgIGludCBuZXdfbmNoYXJzID0gKChiaXRzLT5idWZfc2l6ZSs1KSozKT4+MTsKKyAgICAgICAgIGNoYXIgKnRtcCA9IChjaGFyKilzcGVleF9yZWFsbG9jKGJpdHMtPmNoYXJzLCBuZXdfbmNoYXJzKTsKKyAgICAgICAgIGlmICh0bXApCisgICAgICAgICB7CisgICAgICAgICAgICBiaXRzLT5idWZfc2l6ZT1uZXdfbmNoYXJzOworICAgICAgICAgICAgYml0cy0+Y2hhcnM9dG1wOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNwZWV4X3dhcm5pbmcoIkNvdWxkIG5vdCByZXNpemUgaW5wdXQgYnVmZmVyOiBub3QgcGFja2luZyIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgIHNwZWV4X3dhcm5pbmcoIkRvIG5vdCBvd24gaW5wdXQgYnVmZmVyOiBub3QgcGFja2luZyIpOworICAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgfQorCisgICB3aGlsZShuYkJpdHMpCisgICB7CisgICAgICBpbnQgYml0OworICAgICAgYml0ID0gKGQ+PihuYkJpdHMtMSkpJjE7CisgICAgICBiaXRzLT5jaGFyc1tiaXRzLT5jaGFyUHRyXSB8PSBiaXQ8PChCSVRTX1BFUl9DSEFSLTEtYml0cy0+Yml0UHRyKTsKKyAgICAgIGJpdHMtPmJpdFB0cisrOworCisgICAgICBpZiAoYml0cy0+Yml0UHRyPT1CSVRTX1BFUl9DSEFSKQorICAgICAgeworICAgICAgICAgYml0cy0+Yml0UHRyPTA7CisgICAgICAgICBiaXRzLT5jaGFyUHRyKys7CisgICAgICAgICBiaXRzLT5jaGFyc1tiaXRzLT5jaGFyUHRyXSA9IDA7CisgICAgICB9CisgICAgICBiaXRzLT5uYkJpdHMrKzsKKyAgICAgIG5iQml0cy0tOworICAgfQorfQorCitpbnQgc3BlZXhfYml0c191bnBhY2tfc2lnbmVkKFNwZWV4Qml0cyAqYml0cywgaW50IG5iQml0cykKK3sKKyAgIHVuc2lnbmVkIGludCBkPXNwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKGJpdHMsbmJCaXRzKTsKKyAgIC8qIElmIG51bWJlciBpcyBuZWdhdGl2ZSAqLworICAgaWYgKGQ+PihuYkJpdHMtMSkpCisgICB7CisgICAgICBkIHw9ICgtMSk8PG5iQml0czsKKyAgIH0KKyAgIHJldHVybiBkOworfQorCit1bnNpZ25lZCBpbnQgc3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoU3BlZXhCaXRzICpiaXRzLCBpbnQgbmJCaXRzKQoreworICAgdW5zaWduZWQgaW50IGQ9MDsKKyAgIGlmICgoYml0cy0+Y2hhclB0cjw8TE9HMl9CSVRTX1BFUl9DSEFSKStiaXRzLT5iaXRQdHIrbmJCaXRzPmJpdHMtPm5iQml0cykKKyAgICAgIGJpdHMtPm92ZXJmbG93PTE7CisgICBpZiAoYml0cy0+b3ZlcmZsb3cpCisgICAgICByZXR1cm4gMDsKKyAgIHdoaWxlKG5iQml0cykKKyAgIHsKKyAgICAgIGQ8PD0xOworICAgICAgZCB8PSAoYml0cy0+Y2hhcnNbYml0cy0+Y2hhclB0cl0+PihCSVRTX1BFUl9DSEFSLTEgLSBiaXRzLT5iaXRQdHIpKSYxOworICAgICAgYml0cy0+Yml0UHRyKys7CisgICAgICBpZiAoYml0cy0+Yml0UHRyPT1CSVRTX1BFUl9DSEFSKQorICAgICAgeworICAgICAgICAgYml0cy0+Yml0UHRyPTA7CisgICAgICAgICBiaXRzLT5jaGFyUHRyKys7CisgICAgICB9CisgICAgICBuYkJpdHMtLTsKKyAgIH0KKyAgIHJldHVybiBkOworfQorCit1bnNpZ25lZCBpbnQgc3BlZXhfYml0c19wZWVrX3Vuc2lnbmVkKFNwZWV4Qml0cyAqYml0cywgaW50IG5iQml0cykKK3sKKyAgIHVuc2lnbmVkIGludCBkPTA7CisgICBpbnQgYml0UHRyLCBjaGFyUHRyOworICAgY2hhciAqY2hhcnM7CisKKyAgIGlmICgoYml0cy0+Y2hhclB0cjw8TE9HMl9CSVRTX1BFUl9DSEFSKStiaXRzLT5iaXRQdHIrbmJCaXRzPmJpdHMtPm5iQml0cykKKyAgICAgYml0cy0+b3ZlcmZsb3c9MTsKKyAgIGlmIChiaXRzLT5vdmVyZmxvdykKKyAgICAgIHJldHVybiAwOworCisgICBiaXRQdHI9Yml0cy0+Yml0UHRyOworICAgY2hhclB0cj1iaXRzLT5jaGFyUHRyOworICAgY2hhcnMgPSBiaXRzLT5jaGFyczsKKyAgIHdoaWxlKG5iQml0cykKKyAgIHsKKyAgICAgIGQ8PD0xOworICAgICAgZCB8PSAoY2hhcnNbY2hhclB0cl0+PihCSVRTX1BFUl9DSEFSLTEgLSBiaXRQdHIpKSYxOworICAgICAgYml0UHRyKys7CisgICAgICBpZiAoYml0UHRyPT1CSVRTX1BFUl9DSEFSKQorICAgICAgeworICAgICAgICAgYml0UHRyPTA7CisgICAgICAgICBjaGFyUHRyKys7CisgICAgICB9CisgICAgICBuYkJpdHMtLTsKKyAgIH0KKyAgIHJldHVybiBkOworfQorCitpbnQgc3BlZXhfYml0c19wZWVrKFNwZWV4Qml0cyAqYml0cykKK3sKKyAgIGlmICgoYml0cy0+Y2hhclB0cjw8TE9HMl9CSVRTX1BFUl9DSEFSKStiaXRzLT5iaXRQdHIrMT5iaXRzLT5uYkJpdHMpCisgICAgICBiaXRzLT5vdmVyZmxvdz0xOworICAgaWYgKGJpdHMtPm92ZXJmbG93KQorICAgICAgcmV0dXJuIDA7CisgICByZXR1cm4gKGJpdHMtPmNoYXJzW2JpdHMtPmNoYXJQdHJdPj4oQklUU19QRVJfQ0hBUi0xIC0gYml0cy0+Yml0UHRyKSkmMTsKK30KKwordm9pZCBzcGVleF9iaXRzX2FkdmFuY2UoU3BlZXhCaXRzICpiaXRzLCBpbnQgbikKK3sKKyAgICBpZiAoKChiaXRzLT5jaGFyUHRyPDxMT0cyX0JJVFNfUEVSX0NIQVIpK2JpdHMtPmJpdFB0cituPmJpdHMtPm5iQml0cykgfHwgYml0cy0+b3ZlcmZsb3cpeworICAgICAgYml0cy0+b3ZlcmZsb3c9MTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICBiaXRzLT5jaGFyUHRyICs9IChiaXRzLT5iaXRQdHIrbikgPj4gTE9HMl9CSVRTX1BFUl9DSEFSOyAvKiBkaXZpZGUgYnkgQklUU19QRVJfQ0hBUiAqLworICAgYml0cy0+Yml0UHRyID0gKGJpdHMtPmJpdFB0cituKSAmIChCSVRTX1BFUl9DSEFSLTEpOyAgICAgICAvKiBtb2R1bG8gYnkgQklUU19QRVJfQ0hBUiAqLworfQorCitpbnQgc3BlZXhfYml0c19yZW1haW5pbmcoU3BlZXhCaXRzICpiaXRzKQoreworICAgaWYgKGJpdHMtPm92ZXJmbG93KQorICAgICAgcmV0dXJuIC0xOworICAgZWxzZQorICAgICAgcmV0dXJuIGJpdHMtPm5iQml0cy0oKGJpdHMtPmNoYXJQdHI8PExPRzJfQklUU19QRVJfQ0hBUikrYml0cy0+Yml0UHRyKTsKK30KKworaW50IHNwZWV4X2JpdHNfbmJ5dGVzKFNwZWV4Qml0cyAqYml0cykKK3sKKyAgIHJldHVybiAoKGJpdHMtPm5iQml0cytCSVRTX1BFUl9DSEFSLTEpPj5MT0cyX0JJVFNfUEVSX0NIQVIpOworfQorCit2b2lkIHNwZWV4X2JpdHNfaW5zZXJ0X3Rlcm1pbmF0b3IoU3BlZXhCaXRzICpiaXRzKQoreworICAgaWYgKGJpdHMtPmJpdFB0cikKKyAgICAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCAwLCAxKTsKKyAgIHdoaWxlIChiaXRzLT5iaXRQdHIpCisgICAgICBzcGVleF9iaXRzX3BhY2soYml0cywgMSwgMSk7Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9jYl9zZWFyY2guYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2NiX3NlYXJjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNGYwNjgKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9jYl9zZWFyY2guYwpAQCAtMCwwICsxLDYwOCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDYgSmVhbi1NYXJjIFZhbGluIAorICAgRmlsZTogY2Jfc2VhcmNoLmMKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJjYl9zZWFyY2guaCIKKyNpbmNsdWRlICJmaWx0ZXJzLmgiCisjaW5jbHVkZSAic3RhY2tfYWxsb2MuaCIKKyNpbmNsdWRlICJ2cS5oIgorI2luY2x1ZGUgIm1pc2MuaCIKKworI2lmZGVmIF9VU0VfU1NFCisjaW5jbHVkZSAiY2Jfc2VhcmNoX3NzZS5oIgorI2VsaWYgZGVmaW5lZChBUk00X0FTTSkgfHwgZGVmaW5lZChBUk01RV9BU00pCisjaW5jbHVkZSAiY2Jfc2VhcmNoX2FybTQuaCIKKyNlbGlmIGRlZmluZWQoQkZJTl9BU00pCisjaW5jbHVkZSAiY2Jfc2VhcmNoX2JmaW4uaCIKKyNlbmRpZgorCisjaWZuZGVmIE9WRVJSSURFX0NPTVBVVEVfV0VJR0hURURfQ09ERUJPT0sKK3N0YXRpYyB2b2lkIGNvbXB1dGVfd2VpZ2h0ZWRfY29kZWJvb2soY29uc3Qgc2lnbmVkIGNoYXIgKnNoYXBlX2NiLCBjb25zdCBzcHhfd29yZDE2X3QgKnIsIHNweF93b3JkMTZfdCAqcmVzcCwgc3B4X3dvcmQxNl90ICpyZXNwMiwgc3B4X3dvcmQzMl90ICpFLCBpbnQgc2hhcGVfY2Jfc2l6ZSwgaW50IHN1YnZlY3Rfc2l6ZSwgY2hhciAqc3RhY2spCit7CisgICBpbnQgaSwgaiwgazsKKyAgIFZBUkRFQ0woc3B4X3dvcmQxNl90ICpzaGFwZSk7CisgICBBTExPQyhzaGFwZSwgc3VidmVjdF9zaXplLCBzcHhfd29yZDE2X3QpOworICAgZm9yIChpPTA7aTxzaGFwZV9jYl9zaXplO2krKykKKyAgIHsKKyAgICAgIHNweF93b3JkMTZfdCAqcmVzOworICAgICAgCisgICAgICByZXMgPSByZXNwK2kqc3VidmVjdF9zaXplOworICAgICAgZm9yIChrPTA7azxzdWJ2ZWN0X3NpemU7aysrKQorICAgICAgICAgc2hhcGVba10gPSAoc3B4X3dvcmQxNl90KXNoYXBlX2NiW2kqc3VidmVjdF9zaXplK2tdOworICAgICAgRVtpXT0wOworCisgICAgICAvKiBDb21wdXRlIGNvZGV3b3JkIHJlc3BvbnNlIHVzaW5nIGNvbnZvbHV0aW9uIHdpdGggaW1wdWxzZSByZXNwb25zZSAqLworICAgICAgZm9yKGo9MDtqPHN1YnZlY3Rfc2l6ZTtqKyspCisgICAgICB7CisgICAgICAgICBzcHhfd29yZDMyX3QgcmVzaj0wOworICAgICAgICAgc3B4X3dvcmQxNl90IHJlczE2OworICAgICAgICAgZm9yIChrPTA7azw9ajtrKyspCisgICAgICAgICAgICByZXNqID0gTUFDMTZfMTYocmVzaixzaGFwZVtrXSxyW2ota10pOworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICAgICByZXMxNiA9IEVYVFJBQ1QxNihTSFIzMihyZXNqLCAxMykpOworI2Vsc2UKKyAgICAgICAgIHJlczE2ID0gMC4wMzEyNWYqcmVzajsKKyNlbmRpZgorICAgICAgICAgLyogQ29tcHV0ZSBjb2Rld29yZCBlbmVyZ3kgKi8KKyAgICAgICAgIEVbaV09TUFDMTZfMTYoRVtpXSxyZXMxNixyZXMxNik7CisgICAgICAgICByZXNbal0gPSByZXMxNjsKKyAgICAgICAgIC8qcHJpbnRmICgiJWRcbiIsIChpbnQpcmVzW2pdKTsqLworICAgICAgfQorICAgfQorCit9CisjZW5kaWYKKworI2lmbmRlZiBPVkVSUklERV9UQVJHRVRfVVBEQVRFCitzdGF0aWMgaW5saW5lIHZvaWQgdGFyZ2V0X3VwZGF0ZShzcHhfd29yZDE2X3QgKnQsIHNweF93b3JkMTZfdCBnLCBzcHhfd29yZDE2X3QgKnIsIGludCBsZW4pCit7CisgICBpbnQgbjsKKyAgIGZvciAobj0wO248bGVuO24rKykKKyAgICAgIHRbbl0gPSBTVUIxNih0W25dLFBTSFIzMihNVUxUMTZfMTYoZyxyW25dKSwxMykpOworfQorI2VuZGlmCisKKworCitzdGF0aWMgdm9pZCBzcGxpdF9jYl9zZWFyY2hfc2hhcGVfc2lnbl9OMSgKK3NweF93b3JkMTZfdCB0YXJnZXRbXSwJCQkvKiB0YXJnZXQgdmVjdG9yICovCitzcHhfY29lZl90IGFrW10sCQkJLyogTFBDcyBmb3IgdGhpcyBzdWJmcmFtZSAqLworc3B4X2NvZWZfdCBhd2sxW10sCQkJLyogV2VpZ2h0ZWQgTFBDcyBmb3IgdGhpcyBzdWJmcmFtZSAqLworc3B4X2NvZWZfdCBhd2syW10sCQkJLyogV2VpZ2h0ZWQgTFBDcyBmb3IgdGhpcyBzdWJmcmFtZSAqLworY29uc3Qgdm9pZCAqcGFyLCAgICAgICAgICAgICAgICAgICAgICAvKiBDb2RlYm9vay9zZWFyY2ggcGFyYW1ldGVycyovCitpbnQgICBwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBMUEMgY29lZmZzICovCitpbnQgICBuc2YsICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBzYW1wbGVzIGluIHN1YmZyYW1lICovCitzcHhfc2lnX3QgKmV4YywKK3NweF93b3JkMTZfdCAqciwKK1NwZWV4Qml0cyAqYml0cywKK2NoYXIgKnN0YWNrLAoraW50ICAgdXBkYXRlX3RhcmdldAorKQoreworICAgaW50IGksaixtLHE7CisgICBWQVJERUNMKHNweF93b3JkMTZfdCAqcmVzcCk7CisjaWZkZWYgX1VTRV9TU0UKKyAgIFZBUkRFQ0woX19tMTI4ICpyZXNwMik7CisgICBWQVJERUNMKF9fbTEyOCAqRSk7CisjZWxzZQorICAgc3B4X3dvcmQxNl90ICpyZXNwMjsKKyAgIFZBUkRFQ0woc3B4X3dvcmQzMl90ICpFKTsKKyNlbmRpZgorICAgVkFSREVDTChzcHhfd29yZDE2X3QgKnQpOworICAgVkFSREVDTChzcHhfc2lnX3QgKmUpOworICAgY29uc3Qgc2lnbmVkIGNoYXIgKnNoYXBlX2NiOworICAgaW50IHNoYXBlX2NiX3NpemUsIHN1YnZlY3Rfc2l6ZSwgbmJfc3VidmVjdDsKKyAgIGNvbnN0IHNwbGl0X2NiX3BhcmFtcyAqcGFyYW1zOworICAgaW50IGJlc3RfaW5kZXg7CisgICBzcHhfd29yZDMyX3QgYmVzdF9kaXN0OworICAgaW50IGhhdmVfc2lnbjsKKyAgIAorICAgcGFyYW1zID0gKGNvbnN0IHNwbGl0X2NiX3BhcmFtcyAqKSBwYXI7CisgICBzdWJ2ZWN0X3NpemUgPSBwYXJhbXMtPnN1YnZlY3Rfc2l6ZTsKKyAgIG5iX3N1YnZlY3QgPSBwYXJhbXMtPm5iX3N1YnZlY3Q7CisgICBzaGFwZV9jYl9zaXplID0gMTw8cGFyYW1zLT5zaGFwZV9iaXRzOworICAgc2hhcGVfY2IgPSBwYXJhbXMtPnNoYXBlX2NiOworICAgaGF2ZV9zaWduID0gcGFyYW1zLT5oYXZlX3NpZ247CisgICBBTExPQyhyZXNwLCBzaGFwZV9jYl9zaXplKnN1YnZlY3Rfc2l6ZSwgc3B4X3dvcmQxNl90KTsKKyNpZmRlZiBfVVNFX1NTRQorICAgQUxMT0MocmVzcDIsIChzaGFwZV9jYl9zaXplKnN1YnZlY3Rfc2l6ZSk+PjIsIF9fbTEyOCk7CisgICBBTExPQyhFLCBzaGFwZV9jYl9zaXplPj4yLCBfX20xMjgpOworI2Vsc2UKKyAgIHJlc3AyID0gcmVzcDsKKyAgIEFMTE9DKEUsIHNoYXBlX2NiX3NpemUsIHNweF93b3JkMzJfdCk7CisjZW5kaWYKKyAgIEFMTE9DKHQsIG5zZiwgc3B4X3dvcmQxNl90KTsKKyAgIEFMTE9DKGUsIG5zZiwgc3B4X3NpZ190KTsKKyAgIAorICAgLyogRklYTUU6IERvIHdlIHN0aWxsIG5lZWQgdG8gY29weSB0aGUgdGFyZ2V0PyAqLworICAgZm9yIChpPTA7aTxuc2Y7aSsrKQorICAgICAgdFtpXT10YXJnZXRbaV07CisKKyAgIGNvbXB1dGVfd2VpZ2h0ZWRfY29kZWJvb2soc2hhcGVfY2IsIHIsIHJlc3AsIHJlc3AyLCBFLCBzaGFwZV9jYl9zaXplLCBzdWJ2ZWN0X3NpemUsIHN0YWNrKTsKKworICAgZm9yIChpPTA7aTxuYl9zdWJ2ZWN0O2krKykKKyAgIHsKKyAgICAgIHNweF93b3JkMTZfdCAqeD10K3N1YnZlY3Rfc2l6ZSppOworICAgICAgLypGaW5kIG5ldyBuLWJlc3QgYmFzZWQgb24gcHJldmlvdXMgbi1iZXN0IGoqLworICAgICAgaWYgKGhhdmVfc2lnbikKKyAgICAgICAgIHZxX25iZXN0X3NpZ24oeCwgcmVzcDIsIHN1YnZlY3Rfc2l6ZSwgc2hhcGVfY2Jfc2l6ZSwgRSwgMSwgJmJlc3RfaW5kZXgsICZiZXN0X2Rpc3QsIHN0YWNrKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHZxX25iZXN0KHgsIHJlc3AyLCBzdWJ2ZWN0X3NpemUsIHNoYXBlX2NiX3NpemUsIEUsIDEsICZiZXN0X2luZGV4LCAmYmVzdF9kaXN0LCBzdGFjayk7CisgICAgICAKKyAgICAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLGJlc3RfaW5kZXgscGFyYW1zLT5zaGFwZV9iaXRzK2hhdmVfc2lnbik7CisgICAgICAKKyAgICAgIHsKKyAgICAgICAgIGludCByaW5kOworICAgICAgICAgc3B4X3dvcmQxNl90ICpyZXM7CisgICAgICAgICBzcHhfd29yZDE2X3Qgc2lnbj0xOworICAgICAgICAgcmluZCA9IGJlc3RfaW5kZXg7CisgICAgICAgICBpZiAocmluZD49c2hhcGVfY2Jfc2l6ZSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHNpZ249LTE7CisgICAgICAgICAgICByaW5kLT1zaGFwZV9jYl9zaXplOworICAgICAgICAgfQorICAgICAgICAgcmVzID0gcmVzcCtyaW5kKnN1YnZlY3Rfc2l6ZTsKKyAgICAgICAgIGlmIChzaWduPjApCisgICAgICAgICAgICBmb3IgKG09MDttPHN1YnZlY3Rfc2l6ZTttKyspCisgICAgICAgICAgICAgICB0W3N1YnZlY3Rfc2l6ZSppK21dID0gU1VCMTYodFtzdWJ2ZWN0X3NpemUqaSttXSwgcmVzW21dKTsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvciAobT0wO208c3VidmVjdF9zaXplO20rKykKKyAgICAgICAgICAgICAgIHRbc3VidmVjdF9zaXplKmkrbV0gPSBBREQxNih0W3N1YnZlY3Rfc2l6ZSppK21dLCByZXNbbV0pOworCisjaWZkZWYgRklYRURfUE9JTlQKKyAgICAgICAgIGlmIChzaWduKQorICAgICAgICAgeworICAgICAgICAgICAgZm9yIChqPTA7ajxzdWJ2ZWN0X3NpemU7aisrKQorICAgICAgICAgICAgICAgZVtzdWJ2ZWN0X3NpemUqaStqXT1TSEwzMihFWFRFTkQzMihzaGFwZV9jYltyaW5kKnN1YnZlY3Rfc2l6ZStqXSksU0lHX1NISUZULTUpOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaj0wO2o8c3VidmVjdF9zaXplO2orKykKKyAgICAgICAgICAgICAgIGVbc3VidmVjdF9zaXplKmkral09TkVHMzIoU0hMMzIoRVhURU5EMzIoc2hhcGVfY2JbcmluZCpzdWJ2ZWN0X3NpemUral0pLFNJR19TSElGVC01KSk7CisgICAgICAgICB9CisjZWxzZQorICAgICAgICAgZm9yIChqPTA7ajxzdWJ2ZWN0X3NpemU7aisrKQorICAgICAgICAgICAgZVtzdWJ2ZWN0X3NpemUqaStqXT1zaWduKjAuMDMxMjUqc2hhcGVfY2JbcmluZCpzdWJ2ZWN0X3NpemUral07CisjZW5kaWYKKyAgICAgIAorICAgICAgfQorICAgICAgICAgICAgCisgICAgICBmb3IgKG09MDttPHN1YnZlY3Rfc2l6ZTttKyspCisgICAgICB7CisgICAgICAgICBzcHhfd29yZDE2X3QgZzsKKyAgICAgICAgIGludCByaW5kOworICAgICAgICAgc3B4X3dvcmQxNl90IHNpZ249MTsKKyAgICAgICAgIHJpbmQgPSBiZXN0X2luZGV4OworICAgICAgICAgaWYgKHJpbmQ+PXNoYXBlX2NiX3NpemUpCisgICAgICAgICB7CisgICAgICAgICAgICBzaWduPS0xOworICAgICAgICAgICAgcmluZC09c2hhcGVfY2Jfc2l6ZTsKKyAgICAgICAgIH0KKyAgICAgICAgIAorICAgICAgICAgcT1zdWJ2ZWN0X3NpemUtbTsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgICAgICAgZz1zaWduKnNoYXBlX2NiW3JpbmQqc3VidmVjdF9zaXplK21dOworI2Vsc2UKKyAgICAgICAgIGc9c2lnbiowLjAzMTI1KnNoYXBlX2NiW3JpbmQqc3VidmVjdF9zaXplK21dOworI2VuZGlmCisgICAgICAgICB0YXJnZXRfdXBkYXRlKHQrc3VidmVjdF9zaXplKihpKzEpLCBnLCByK3EsIG5zZi1zdWJ2ZWN0X3NpemUqKGkrMSkpOworICAgICAgfQorICAgfQorCisgICAvKiBVcGRhdGUgZXhjaXRhdGlvbiAqLworICAgLyogRklYTUU6IFdlIGNvdWxkIHVwZGF0ZSB0aGUgZXhjaXRhdGlvbiBkaXJlY3RseSBhYm92ZSAqLworICAgZm9yIChqPTA7ajxuc2Y7aisrKQorICAgICAgZXhjW2pdPUFERDMyKGV4Y1tqXSxlW2pdKTsKKyAgIAorICAgLyogVXBkYXRlIHRhcmdldDogb25seSB1cGRhdGUgdGFyZ2V0IGlmIG5lY2Vzc2FyeSAqLworICAgaWYgKHVwZGF0ZV90YXJnZXQpCisgICB7CisgICAgICBWQVJERUNMKHNweF93b3JkMTZfdCAqcjIpOworICAgICAgQUxMT0MocjIsIG5zZiwgc3B4X3dvcmQxNl90KTsKKyAgICAgIGZvciAoaj0wO2o8bnNmO2orKykKKyAgICAgICAgIHIyW2pdID0gRVhUUkFDVDE2KFBTSFIzMihlW2pdICw2KSk7CisgICAgICBzeW5fcGVyY2VwX3plcm8xNihyMiwgYWssIGF3azEsIGF3azIsIHIyLCBuc2YscCwgc3RhY2spOworICAgICAgZm9yIChqPTA7ajxuc2Y7aisrKQorICAgICAgICAgdGFyZ2V0W2pdPVNVQjE2KHRhcmdldFtqXSxQU0hSMTYocjJbal0sMikpOworICAgfQorfQorCisKKwordm9pZCBzcGxpdF9jYl9zZWFyY2hfc2hhcGVfc2lnbigKK3NweF93b3JkMTZfdCB0YXJnZXRbXSwJCQkvKiB0YXJnZXQgdmVjdG9yICovCitzcHhfY29lZl90IGFrW10sCQkJLyogTFBDcyBmb3IgdGhpcyBzdWJmcmFtZSAqLworc3B4X2NvZWZfdCBhd2sxW10sCQkJLyogV2VpZ2h0ZWQgTFBDcyBmb3IgdGhpcyBzdWJmcmFtZSAqLworc3B4X2NvZWZfdCBhd2syW10sCQkJLyogV2VpZ2h0ZWQgTFBDcyBmb3IgdGhpcyBzdWJmcmFtZSAqLworY29uc3Qgdm9pZCAqcGFyLCAgICAgICAgICAgICAgICAgICAgICAvKiBDb2RlYm9vay9zZWFyY2ggcGFyYW1ldGVycyovCitpbnQgICBwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBMUEMgY29lZmZzICovCitpbnQgICBuc2YsICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBzYW1wbGVzIGluIHN1YmZyYW1lICovCitzcHhfc2lnX3QgKmV4YywKK3NweF93b3JkMTZfdCAqciwKK1NwZWV4Qml0cyAqYml0cywKK2NoYXIgKnN0YWNrLAoraW50ICAgY29tcGxleGl0eSwKK2ludCAgIHVwZGF0ZV90YXJnZXQKKykKK3sKKyAgIGludCBpLGosayxtLG4scTsKKyAgIFZBUkRFQ0woc3B4X3dvcmQxNl90ICpyZXNwKTsKKyNpZmRlZiBfVVNFX1NTRQorICAgVkFSREVDTChfX20xMjggKnJlc3AyKTsKKyAgIFZBUkRFQ0woX19tMTI4ICpFKTsKKyNlbHNlCisgICBzcHhfd29yZDE2X3QgKnJlc3AyOworICAgVkFSREVDTChzcHhfd29yZDMyX3QgKkUpOworI2VuZGlmCisgICBWQVJERUNMKHNweF93b3JkMTZfdCAqdCk7CisgICBWQVJERUNMKHNweF9zaWdfdCAqZSk7CisgICBWQVJERUNMKHNweF93b3JkMTZfdCAqdG1wKTsKKyAgIFZBUkRFQ0woc3B4X3dvcmQzMl90ICpuZGlzdCk7CisgICBWQVJERUNMKHNweF93b3JkMzJfdCAqb2Rpc3QpOworICAgVkFSREVDTChpbnQgKml0bXApOworICAgVkFSREVDTChzcHhfd29yZDE2X3QgKipvdDIpOworICAgVkFSREVDTChzcHhfd29yZDE2X3QgKipudDIpOworICAgc3B4X3dvcmQxNl90ICoqb3QsICoqbnQ7CisgICBWQVJERUNMKGludCAqKm5pbmQpOworICAgVkFSREVDTChpbnQgKipvaW5kKTsKKyAgIFZBUkRFQ0woaW50ICppbmQpOworICAgY29uc3Qgc2lnbmVkIGNoYXIgKnNoYXBlX2NiOworICAgaW50IHNoYXBlX2NiX3NpemUsIHN1YnZlY3Rfc2l6ZSwgbmJfc3VidmVjdDsKKyAgIGNvbnN0IHNwbGl0X2NiX3BhcmFtcyAqcGFyYW1zOworICAgaW50IE49MjsKKyAgIFZBUkRFQ0woaW50ICpiZXN0X2luZGV4KTsKKyAgIFZBUkRFQ0woc3B4X3dvcmQzMl90ICpiZXN0X2Rpc3QpOworICAgVkFSREVDTChpbnQgKmJlc3RfbmluZCk7CisgICBWQVJERUNMKGludCAqYmVzdF9udGFyZ2V0KTsKKyAgIGludCBoYXZlX3NpZ247CisgICBOPWNvbXBsZXhpdHk7CisgICBpZiAoTj4xMCkKKyAgICAgIE49MTA7CisgICAvKiBDb21wbGV4aXR5IGlzbid0IGFzIGltcG9ydGFudCBmb3IgdGhlIGNvZGVib29rcyBhcyBpdCBpcyBmb3IgdGhlIHBpdGNoICovCisgICBOPSgyKk4pLzM7CisgICBpZiAoTjwxKQorICAgICAgTj0xOworICAgaWYgKE49PTEpCisgICB7CisgICAgICBzcGxpdF9jYl9zZWFyY2hfc2hhcGVfc2lnbl9OMSh0YXJnZXQsYWssYXdrMSxhd2syLHBhcixwLG5zZixleGMscixiaXRzLHN0YWNrLHVwZGF0ZV90YXJnZXQpOworICAgICAgcmV0dXJuOworICAgfQorICAgQUxMT0Mob3QyLCBOLCBzcHhfd29yZDE2X3QqKTsKKyAgIEFMTE9DKG50MiwgTiwgc3B4X3dvcmQxNl90Kik7CisgICBBTExPQyhvaW5kLCBOLCBpbnQqKTsKKyAgIEFMTE9DKG5pbmQsIE4sIGludCopOworCisgICBwYXJhbXMgPSAoY29uc3Qgc3BsaXRfY2JfcGFyYW1zICopIHBhcjsKKyAgIHN1YnZlY3Rfc2l6ZSA9IHBhcmFtcy0+c3VidmVjdF9zaXplOworICAgbmJfc3VidmVjdCA9IHBhcmFtcy0+bmJfc3VidmVjdDsKKyAgIHNoYXBlX2NiX3NpemUgPSAxPDxwYXJhbXMtPnNoYXBlX2JpdHM7CisgICBzaGFwZV9jYiA9IHBhcmFtcy0+c2hhcGVfY2I7CisgICBoYXZlX3NpZ24gPSBwYXJhbXMtPmhhdmVfc2lnbjsKKyAgIEFMTE9DKHJlc3AsIHNoYXBlX2NiX3NpemUqc3VidmVjdF9zaXplLCBzcHhfd29yZDE2X3QpOworI2lmZGVmIF9VU0VfU1NFCisgICBBTExPQyhyZXNwMiwgKHNoYXBlX2NiX3NpemUqc3VidmVjdF9zaXplKT4+MiwgX19tMTI4KTsKKyAgIEFMTE9DKEUsIHNoYXBlX2NiX3NpemU+PjIsIF9fbTEyOCk7CisjZWxzZQorICAgcmVzcDIgPSByZXNwOworICAgQUxMT0MoRSwgc2hhcGVfY2Jfc2l6ZSwgc3B4X3dvcmQzMl90KTsKKyNlbmRpZgorICAgQUxMT0ModCwgbnNmLCBzcHhfd29yZDE2X3QpOworICAgQUxMT0MoZSwgbnNmLCBzcHhfc2lnX3QpOworICAgQUxMT0MoaW5kLCBuYl9zdWJ2ZWN0LCBpbnQpOworCisgICBBTExPQyh0bXAsIDIqTipuc2YsIHNweF93b3JkMTZfdCk7CisgICBmb3IgKGk9MDtpPE47aSsrKQorICAgeworICAgICAgb3QyW2ldPXRtcCsyKmkqbnNmOworICAgICAgbnQyW2ldPXRtcCsoMippKzEpKm5zZjsKKyAgIH0KKyAgIG90PW90MjsKKyAgIG50PW50MjsKKyAgIEFMTE9DKGJlc3RfaW5kZXgsIE4sIGludCk7CisgICBBTExPQyhiZXN0X2Rpc3QsIE4sIHNweF93b3JkMzJfdCk7CisgICBBTExPQyhiZXN0X25pbmQsIE4sIGludCk7CisgICBBTExPQyhiZXN0X250YXJnZXQsIE4sIGludCk7CisgICBBTExPQyhuZGlzdCwgTiwgc3B4X3dvcmQzMl90KTsKKyAgIEFMTE9DKG9kaXN0LCBOLCBzcHhfd29yZDMyX3QpOworICAgCisgICBBTExPQyhpdG1wLCAyKk4qbmJfc3VidmVjdCwgaW50KTsKKyAgIGZvciAoaT0wO2k8TjtpKyspCisgICB7CisgICAgICBuaW5kW2ldPWl0bXArMippKm5iX3N1YnZlY3Q7CisgICAgICBvaW5kW2ldPWl0bXArKDIqaSsxKSpuYl9zdWJ2ZWN0OworICAgfQorICAgCisgICBmb3IgKGk9MDtpPG5zZjtpKyspCisgICAgICB0W2ldPXRhcmdldFtpXTsKKworICAgZm9yIChqPTA7ajxOO2orKykKKyAgICAgIHNwZWV4X21vdmUoJm90W2pdWzBdLCB0LCBuc2Yqc2l6ZW9mKHNweF93b3JkMTZfdCkpOworCisgICAvKiBQcmUtY29tcHV0ZSBjb2Rld29yZHMgcmVzcG9uc2UgYW5kIGVuZXJneSAqLworICAgY29tcHV0ZV93ZWlnaHRlZF9jb2RlYm9vayhzaGFwZV9jYiwgciwgcmVzcCwgcmVzcDIsIEUsIHNoYXBlX2NiX3NpemUsIHN1YnZlY3Rfc2l6ZSwgc3RhY2spOworCisgICBmb3IgKGo9MDtqPE47aisrKQorICAgICAgb2Rpc3Rbal09MDsKKyAgIAorICAgLypGb3IgYWxsIHN1YnZlY3RvcnMqLworICAgZm9yIChpPTA7aTxuYl9zdWJ2ZWN0O2krKykKKyAgIHsKKyAgICAgIC8qImVyYXNlIiBuYmVzdCBsaXN0Ki8KKyAgICAgIGZvciAoaj0wO2o8TjtqKyspCisgICAgICAgICBuZGlzdFtqXT1WRVJZX0xBUkdFMzI7CisKKyAgICAgIC8qRm9yIGFsbCBuLWJlc3RzIG9mIHByZXZpb3VzIHN1YnZlY3RvciovCisgICAgICBmb3IgKGo9MDtqPE47aisrKQorICAgICAgeworICAgICAgICAgc3B4X3dvcmQxNl90ICp4PW90W2pdK3N1YnZlY3Rfc2l6ZSppOworICAgICAgICAgc3B4X3dvcmQzMl90IHRlbmVyID0gMDsKKyAgICAgICAgIGZvciAobT0wO208c3VidmVjdF9zaXplO20rKykKKyAgICAgICAgICAgIHRlbmVyID0gTUFDMTZfMTYodGVuZXIsIHhbbV0seFttXSk7CisjaWZkZWYgRklYRURfUE9JTlQKKyAgICAgICAgIHRlbmVyID0gU0hSMzIodGVuZXIsMSk7CisjZWxzZQorICAgICAgICAgdGVuZXIgKj0gLjU7CisjZW5kaWYKKyAgICAgICAgIC8qRmluZCBuZXcgbi1iZXN0IGJhc2VkIG9uIHByZXZpb3VzIG4tYmVzdCBqKi8KKyAgICAgICAgIGlmIChoYXZlX3NpZ24pCisgICAgICAgICAgICB2cV9uYmVzdF9zaWduKHgsIHJlc3AyLCBzdWJ2ZWN0X3NpemUsIHNoYXBlX2NiX3NpemUsIEUsIE4sIGJlc3RfaW5kZXgsIGJlc3RfZGlzdCwgc3RhY2spOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgdnFfbmJlc3QoeCwgcmVzcDIsIHN1YnZlY3Rfc2l6ZSwgc2hhcGVfY2Jfc2l6ZSwgRSwgTiwgYmVzdF9pbmRleCwgYmVzdF9kaXN0LCBzdGFjayk7CisKKyAgICAgICAgIC8qRm9yIGFsbCBuZXcgbi1iZXN0cyovCisgICAgICAgICBmb3IgKGs9MDtrPE47aysrKQorICAgICAgICAgeworICAgICAgICAgICAgLyogQ29tcHV0ZSB0b3RhbCBkaXN0YW5jZSAoaW5jbHVkaW5nIHByZXZpb3VzIHN1Yi12ZWN0b3JzICovCisgICAgICAgICAgICBzcHhfd29yZDMyX3QgZXJyID0gQUREMzIoQUREMzIob2Rpc3Rbal0sYmVzdF9kaXN0W2tdKSx0ZW5lcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qdXBkYXRlIG4tYmVzdCBsaXN0Ki8KKyAgICAgICAgICAgIGlmIChlcnI8bmRpc3RbTi0xXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGZvciAobT0wO208TjttKyspCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpZiAoZXJyIDwgbmRpc3RbbV0pCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBmb3IgKG49Ti0xO24+bTtuLS0pCisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZGlzdFtuXSA9IG5kaXN0W24tMV07CisgICAgICAgICAgICAgICAgICAgICAgICBiZXN0X25pbmRbbl0gPSBiZXN0X25pbmRbbi0xXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RfbnRhcmdldFtuXSA9IGJlc3RfbnRhcmdldFtuLTFdOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgbmRpc3RbbV0gPSBlcnI7CisgICAgICAgICAgICAgICAgICAgICBiZXN0X25pbmRbbl0gPSBiZXN0X2luZGV4W2tdOworICAgICAgICAgICAgICAgICAgICAgYmVzdF9udGFyZ2V0W25dID0gajsKKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgaWYgKGk9PTApCisgICAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGZvciAoaj0wO2o8TjtqKyspCisgICAgICB7CisgICAgICAgICAvKnByZXZpb3VzIHRhcmdldCAod2UgZG9uJ3QgY2FyZSB3aGF0IGhhcHBlbmVkIGJlZm9yZSovCisgICAgICAgICBmb3IgKG09KGkrMSkqc3VidmVjdF9zaXplO208bnNmO20rKykKKyAgICAgICAgICAgIG50W2pdW21dPW90W2Jlc3RfbnRhcmdldFtqXV1bbV07CisgICAgICAgICAKKyAgICAgICAgIC8qIE5ldyBjb2RlOiB1cGRhdGUgdGhlIHJlc3Qgb2YgdGhlIHRhcmdldCBvbmx5IGlmIGl0J3Mgd29ydGggaXQgKi8KKyAgICAgICAgIGZvciAobT0wO208c3VidmVjdF9zaXplO20rKykKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHNweF93b3JkMTZfdCBnOworICAgICAgICAgICAgaW50IHJpbmQ7CisgICAgICAgICAgICBzcHhfd29yZDE2X3Qgc2lnbj0xOworICAgICAgICAgICAgcmluZCA9IGJlc3RfbmluZFtqXTsKKyAgICAgICAgICAgIGlmIChyaW5kPj1zaGFwZV9jYl9zaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgc2lnbj0tMTsKKyAgICAgICAgICAgICAgIHJpbmQtPXNoYXBlX2NiX3NpemU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHE9c3VidmVjdF9zaXplLW07CisjaWZkZWYgRklYRURfUE9JTlQKKyAgICAgICAgICAgIGc9c2lnbipzaGFwZV9jYltyaW5kKnN1YnZlY3Rfc2l6ZSttXTsKKyNlbHNlCisgICAgICAgICAgICBnPXNpZ24qMC4wMzEyNSpzaGFwZV9jYltyaW5kKnN1YnZlY3Rfc2l6ZSttXTsKKyNlbmRpZgorICAgICAgICAgICAgdGFyZ2V0X3VwZGF0ZShudFtqXStzdWJ2ZWN0X3NpemUqKGkrMSksIGcsIHIrcSwgbnNmLXN1YnZlY3Rfc2l6ZSooaSsxKSk7CisgICAgICAgICB9CisKKyAgICAgICAgIGZvciAocT0wO3E8bmJfc3VidmVjdDtxKyspCisgICAgICAgICAgICBuaW5kW2pdW3FdPW9pbmRbYmVzdF9udGFyZ2V0W2pdXVtxXTsKKyAgICAgICAgIG5pbmRbal1baV09YmVzdF9uaW5kW2pdOworICAgICAgfQorCisgICAgICAvKnVwZGF0ZSBvbGQtbmV3IGRhdGEqLworICAgICAgLyoganVzdCBzd2FwIHBvaW50ZXJzIGluc3RlYWQgb2YgYSBsb25nIGNvcHkgKi8KKyAgICAgIHsKKyAgICAgICAgIHNweF93b3JkMTZfdCAqKnRtcDI7CisgICAgICAgICB0bXAyPW90OworICAgICAgICAgb3Q9bnQ7CisgICAgICAgICBudD10bXAyOworICAgICAgfQorICAgICAgZm9yIChqPTA7ajxOO2orKykKKyAgICAgICAgIGZvciAobT0wO208bmJfc3VidmVjdDttKyspCisgICAgICAgICAgICBvaW5kW2pdW21dPW5pbmRbal1bbV07CisgICAgICBmb3IgKGo9MDtqPE47aisrKQorICAgICAgICAgb2Rpc3Rbal09bmRpc3Rbal07CisgICB9CisKKyAgIC8qc2F2ZSBpbmRpY2VzKi8KKyAgIGZvciAoaT0wO2k8bmJfc3VidmVjdDtpKyspCisgICB7CisgICAgICBpbmRbaV09bmluZFswXVtpXTsKKyAgICAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLGluZFtpXSxwYXJhbXMtPnNoYXBlX2JpdHMraGF2ZV9zaWduKTsKKyAgIH0KKyAgIAorICAgLyogUHV0IGV2ZXJ5dGhpbmcgYmFjayB0b2dldGhlciAqLworICAgZm9yIChpPTA7aTxuYl9zdWJ2ZWN0O2krKykKKyAgIHsKKyAgICAgIGludCByaW5kOworICAgICAgc3B4X3dvcmQxNl90IHNpZ249MTsKKyAgICAgIHJpbmQgPSBpbmRbaV07CisgICAgICBpZiAocmluZD49c2hhcGVfY2Jfc2l6ZSkKKyAgICAgIHsKKyAgICAgICAgIHNpZ249LTE7CisgICAgICAgICByaW5kLT1zaGFwZV9jYl9zaXplOworICAgICAgfQorI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICBpZiAoc2lnbj09MSkKKyAgICAgIHsKKyAgICAgICAgIGZvciAoaj0wO2o8c3VidmVjdF9zaXplO2orKykKKyAgICAgICAgICAgIGVbc3VidmVjdF9zaXplKmkral09U0hMMzIoRVhURU5EMzIoc2hhcGVfY2JbcmluZCpzdWJ2ZWN0X3NpemUral0pLFNJR19TSElGVC01KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICBmb3IgKGo9MDtqPHN1YnZlY3Rfc2l6ZTtqKyspCisgICAgICAgICAgICBlW3N1YnZlY3Rfc2l6ZSppK2pdPU5FRzMyKFNITDMyKEVYVEVORDMyKHNoYXBlX2NiW3JpbmQqc3VidmVjdF9zaXplK2pdKSxTSUdfU0hJRlQtNSkpOworICAgICAgfQorI2Vsc2UKKyAgICAgIGZvciAoaj0wO2o8c3VidmVjdF9zaXplO2orKykKKyAgICAgICAgIGVbc3VidmVjdF9zaXplKmkral09c2lnbiowLjAzMTI1KnNoYXBlX2NiW3JpbmQqc3VidmVjdF9zaXplK2pdOworI2VuZGlmCisgICB9ICAgCisgICAvKiBVcGRhdGUgZXhjaXRhdGlvbiAqLworICAgZm9yIChqPTA7ajxuc2Y7aisrKQorICAgICAgZXhjW2pdPUFERDMyKGV4Y1tqXSxlW2pdKTsKKyAgIAorICAgLyogVXBkYXRlIHRhcmdldDogb25seSB1cGRhdGUgdGFyZ2V0IGlmIG5lY2Vzc2FyeSAqLworICAgaWYgKHVwZGF0ZV90YXJnZXQpCisgICB7CisgICAgICBWQVJERUNMKHNweF93b3JkMTZfdCAqcjIpOworICAgICAgQUxMT0MocjIsIG5zZiwgc3B4X3dvcmQxNl90KTsKKyAgICAgIGZvciAoaj0wO2o8bnNmO2orKykKKyAgICAgICAgIHIyW2pdID0gRVhUUkFDVDE2KFBTSFIzMihlW2pdICw2KSk7CisgICAgICBzeW5fcGVyY2VwX3plcm8xNihyMiwgYWssIGF3azEsIGF3azIsIHIyLCBuc2YscCwgc3RhY2spOworICAgICAgZm9yIChqPTA7ajxuc2Y7aisrKQorICAgICAgICAgdGFyZ2V0W2pdPVNVQjE2KHRhcmdldFtqXSxQU0hSMTYocjJbal0sMikpOworICAgfQorfQorCisKK3ZvaWQgc3BsaXRfY2Jfc2hhcGVfc2lnbl91bnF1YW50KAorc3B4X3NpZ190ICpleGMsCitjb25zdCB2b2lkICpwYXIsICAgICAgICAgICAgICAgICAgICAgIC8qIG5vbi1vdmVybGFwcGluZyBjb2RlYm9vayAqLworaW50ICAgbnNmLCAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2Ygc2FtcGxlcyBpbiBzdWJmcmFtZSAqLworU3BlZXhCaXRzICpiaXRzLAorY2hhciAqc3RhY2ssCitzcHhfaW50MzJfdCAqc2VlZAorKQoreworICAgaW50IGksajsKKyAgIFZBUkRFQ0woaW50ICppbmQpOworICAgVkFSREVDTChpbnQgKnNpZ25zKTsKKyAgIGNvbnN0IHNpZ25lZCBjaGFyICpzaGFwZV9jYjsKKyAgIGludCBzaGFwZV9jYl9zaXplLCBzdWJ2ZWN0X3NpemUsIG5iX3N1YnZlY3Q7CisgICBjb25zdCBzcGxpdF9jYl9wYXJhbXMgKnBhcmFtczsKKyAgIGludCBoYXZlX3NpZ247CisKKyAgIHBhcmFtcyA9IChjb25zdCBzcGxpdF9jYl9wYXJhbXMgKikgcGFyOworICAgc3VidmVjdF9zaXplID0gcGFyYW1zLT5zdWJ2ZWN0X3NpemU7CisgICBuYl9zdWJ2ZWN0ID0gcGFyYW1zLT5uYl9zdWJ2ZWN0OworICAgc2hhcGVfY2Jfc2l6ZSA9IDE8PHBhcmFtcy0+c2hhcGVfYml0czsKKyAgIHNoYXBlX2NiID0gcGFyYW1zLT5zaGFwZV9jYjsKKyAgIGhhdmVfc2lnbiA9IHBhcmFtcy0+aGF2ZV9zaWduOworCisgICBBTExPQyhpbmQsIG5iX3N1YnZlY3QsIGludCk7CisgICBBTExPQyhzaWducywgbmJfc3VidmVjdCwgaW50KTsKKworICAgLyogRGVjb2RlIGNvZGV3b3JkcyBhbmQgZ2FpbnMgKi8KKyAgIGZvciAoaT0wO2k8bmJfc3VidmVjdDtpKyspCisgICB7CisgICAgICBpZiAoaGF2ZV9zaWduKQorICAgICAgICAgc2lnbnNbaV0gPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCAxKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHNpZ25zW2ldID0gMDsKKyAgICAgIGluZFtpXSA9IHNwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKGJpdHMsIHBhcmFtcy0+c2hhcGVfYml0cyk7CisgICB9CisgICAvKiBDb21wdXRlIGRlY29kZWQgZXhjaXRhdGlvbiAqLworICAgZm9yIChpPTA7aTxuYl9zdWJ2ZWN0O2krKykKKyAgIHsKKyAgICAgIHNweF93b3JkMTZfdCBzPTE7CisgICAgICBpZiAoc2lnbnNbaV0pCisgICAgICAgICBzPS0xOworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICBpZiAocz09MSkKKyAgICAgIHsKKyAgICAgICAgIGZvciAoaj0wO2o8c3VidmVjdF9zaXplO2orKykKKyAgICAgICAgICAgIGV4Y1tzdWJ2ZWN0X3NpemUqaStqXT1TSEwzMihFWFRFTkQzMihzaGFwZV9jYltpbmRbaV0qc3VidmVjdF9zaXplK2pdKSxTSUdfU0hJRlQtNSk7CisgICAgICB9IGVsc2UgeworICAgICAgICAgZm9yIChqPTA7ajxzdWJ2ZWN0X3NpemU7aisrKQorICAgICAgICAgICAgZXhjW3N1YnZlY3Rfc2l6ZSppK2pdPU5FRzMyKFNITDMyKEVYVEVORDMyKHNoYXBlX2NiW2luZFtpXSpzdWJ2ZWN0X3NpemUral0pLFNJR19TSElGVC01KSk7CisgICAgICB9CisjZWxzZQorICAgICAgZm9yIChqPTA7ajxzdWJ2ZWN0X3NpemU7aisrKQorICAgICAgICAgZXhjW3N1YnZlY3Rfc2l6ZSppK2pdKz1zKjAuMDMxMjUqc2hhcGVfY2JbaW5kW2ldKnN1YnZlY3Rfc2l6ZStqXTsgICAgICAKKyNlbmRpZgorICAgfQorfQorCit2b2lkIG5vaXNlX2NvZGVib29rX3F1YW50KAorc3B4X3dvcmQxNl90IHRhcmdldFtdLAkJCS8qIHRhcmdldCB2ZWN0b3IgKi8KK3NweF9jb2VmX3QgYWtbXSwJCQkvKiBMUENzIGZvciB0aGlzIHN1YmZyYW1lICovCitzcHhfY29lZl90IGF3azFbXSwJCQkvKiBXZWlnaHRlZCBMUENzIGZvciB0aGlzIHN1YmZyYW1lICovCitzcHhfY29lZl90IGF3azJbXSwJCQkvKiBXZWlnaHRlZCBMUENzIGZvciB0aGlzIHN1YmZyYW1lICovCitjb25zdCB2b2lkICpwYXIsICAgICAgICAgICAgICAgICAgICAgIC8qIENvZGVib29rL3NlYXJjaCBwYXJhbWV0ZXJzKi8KK2ludCAgIHAsICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIExQQyBjb2VmZnMgKi8KK2ludCAgIG5zZiwgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHNhbXBsZXMgaW4gc3ViZnJhbWUgKi8KK3NweF9zaWdfdCAqZXhjLAorc3B4X3dvcmQxNl90ICpyLAorU3BlZXhCaXRzICpiaXRzLAorY2hhciAqc3RhY2ssCitpbnQgICBjb21wbGV4aXR5LAoraW50ICAgdXBkYXRlX3RhcmdldAorKQoreworICAgaW50IGk7CisgICBWQVJERUNMKHNweF93b3JkMTZfdCAqdG1wKTsKKyAgIEFMTE9DKHRtcCwgbnNmLCBzcHhfd29yZDE2X3QpOworICAgcmVzaWR1ZV9wZXJjZXBfemVybzE2KHRhcmdldCwgYWssIGF3azEsIGF3azIsIHRtcCwgbnNmLCBwLCBzdGFjayk7CisKKyAgIGZvciAoaT0wO2k8bnNmO2krKykKKyAgICAgIGV4Y1tpXSs9U0hMMzIoRVhURU5EMzIodG1wW2ldKSw4KTsKKyAgIGZvciAoaT0wO2k8bnNmO2krKykKKyAgICAgIHRhcmdldFtpXT0wOworfQorCisKK3ZvaWQgbm9pc2VfY29kZWJvb2tfdW5xdWFudCgKK3NweF9zaWdfdCAqZXhjLAorY29uc3Qgdm9pZCAqcGFyLCAgICAgICAgICAgICAgICAgICAgICAvKiBub24tb3ZlcmxhcHBpbmcgY29kZWJvb2sgKi8KK2ludCAgIG5zZiwgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHNhbXBsZXMgaW4gc3ViZnJhbWUgKi8KK1NwZWV4Qml0cyAqYml0cywKK2NoYXIgKnN0YWNrLAorc3B4X2ludDMyX3QgKnNlZWQKKykKK3sKKyAgIGludCBpOworICAgLyogRklYTUU6IFRoaXMgaXMgYmFkLCBidXQgSSBkb24ndCB0aGluayB0aGUgZnVuY3Rpb24gZXZlciBnZXRzIGNhbGxlZCBhbnl3YXkgKi8KKyAgIGZvciAoaT0wO2k8bnNmO2krKykKKyAgICAgIGV4Y1tpXT1TSEwzMihFWFRFTkQzMihzcGVleF9yYW5kKDEsIHNlZWQpKSxTSUdfU0hJRlQpOworfQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvY2Jfc2VhcmNoLmggYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9jYl9zZWFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDVjMTEwCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvY2Jfc2VhcmNoLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiBKZWFuLU1hcmMgVmFsaW4gJiBEYXZpZCBSb3dlICovCisvKioKKyAgIEBmaWxlIGNiX3NlYXJjaC5oCisgICBAYnJpZWYgT3ZlcmxhcHBlZCBjb2RlYm9vayBzZWFyY2gKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIENCX1NFQVJDSF9ICisjZGVmaW5lIENCX1NFQVJDSF9ICisKKyNpbmNsdWRlIDxzcGVleC9zcGVleF9iaXRzLmg+CisjaW5jbHVkZSAibWlzYy5oIgorCisvKiogU3BsaXQgY29kZWJvb2sgcGFyYW1ldGVycy4gKi8KK3R5cGVkZWYgc3RydWN0IHNwbGl0X2NiX3BhcmFtcyB7CisgICBpbnQgICAgIHN1YnZlY3Rfc2l6ZTsKKyAgIGludCAgICAgbmJfc3VidmVjdDsKKyAgIGNvbnN0IHNpZ25lZCBjaGFyICAqc2hhcGVfY2I7CisgICBpbnQgICAgIHNoYXBlX2JpdHM7CisgICBpbnQgICAgIGhhdmVfc2lnbjsKK30gc3BsaXRfY2JfcGFyYW1zOworCisKK3ZvaWQgc3BsaXRfY2Jfc2VhcmNoX3NoYXBlX3NpZ24oCitzcHhfd29yZDE2X3QgdGFyZ2V0W10sICAgICAgICAgICAgIC8qIHRhcmdldCB2ZWN0b3IgKi8KK3NweF9jb2VmX3QgYWtbXSwgICAgICAgICAgICAgICAgLyogTFBDcyBmb3IgdGhpcyBzdWJmcmFtZSAqLworc3B4X2NvZWZfdCBhd2sxW10sICAgICAgICAgICAgICAvKiBXZWlnaHRlZCBMUENzIGZvciB0aGlzIHN1YmZyYW1lICovCitzcHhfY29lZl90IGF3azJbXSwgICAgICAgICAgICAgIC8qIFdlaWdodGVkIExQQ3MgZm9yIHRoaXMgc3ViZnJhbWUgKi8KK2NvbnN0IHZvaWQgKnBhciwgICAgICAgICAgICAgICAgLyogQ29kZWJvb2svc2VhcmNoIHBhcmFtZXRlcnMgKi8KK2ludCAgIHAsICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIExQQyBjb2VmZnMgKi8KK2ludCAgIG5zZiwgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHNhbXBsZXMgaW4gc3ViZnJhbWUgKi8KK3NweF9zaWdfdCAqZXhjLAorc3B4X3dvcmQxNl90ICpyLAorU3BlZXhCaXRzICpiaXRzLAorY2hhciAqc3RhY2ssCitpbnQgICBjb21wbGV4aXR5LAoraW50ICAgdXBkYXRlX3RhcmdldAorKTsKKwordm9pZCBzcGxpdF9jYl9zaGFwZV9zaWduX3VucXVhbnQoCitzcHhfc2lnX3QgKmV4YywKK2NvbnN0IHZvaWQgKnBhciwgICAgICAgICAgICAgICAgLyogbm9uLW92ZXJsYXBwaW5nIGNvZGVib29rICovCitpbnQgICBuc2YsICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBzYW1wbGVzIGluIHN1YmZyYW1lICovCitTcGVleEJpdHMgKmJpdHMsCitjaGFyICpzdGFjaywKK3NweF9pbnQzMl90ICpzZWVkCispOworCisKK3ZvaWQgbm9pc2VfY29kZWJvb2tfcXVhbnQoCitzcHhfd29yZDE2X3QgdGFyZ2V0W10sICAgICAgICAgICAgIC8qIHRhcmdldCB2ZWN0b3IgKi8KK3NweF9jb2VmX3QgYWtbXSwgICAgICAgICAgICAgICAgLyogTFBDcyBmb3IgdGhpcyBzdWJmcmFtZSAqLworc3B4X2NvZWZfdCBhd2sxW10sICAgICAgICAgICAgICAvKiBXZWlnaHRlZCBMUENzIGZvciB0aGlzIHN1YmZyYW1lICovCitzcHhfY29lZl90IGF3azJbXSwgICAgICAgICAgICAgIC8qIFdlaWdodGVkIExQQ3MgZm9yIHRoaXMgc3ViZnJhbWUgKi8KK2NvbnN0IHZvaWQgKnBhciwgICAgICAgICAgICAgICAgLyogQ29kZWJvb2svc2VhcmNoIHBhcmFtZXRlcnMgKi8KK2ludCAgIHAsICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIExQQyBjb2VmZnMgKi8KK2ludCAgIG5zZiwgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHNhbXBsZXMgaW4gc3ViZnJhbWUgKi8KK3NweF9zaWdfdCAqZXhjLAorc3B4X3dvcmQxNl90ICpyLAorU3BlZXhCaXRzICpiaXRzLAorY2hhciAqc3RhY2ssCitpbnQgICBjb21wbGV4aXR5LAoraW50ICAgdXBkYXRlX3RhcmdldAorKTsKKworCit2b2lkIG5vaXNlX2NvZGVib29rX3VucXVhbnQoCitzcHhfc2lnX3QgKmV4YywKK2NvbnN0IHZvaWQgKnBhciwgICAgICAgICAgICAgICAgLyogbm9uLW92ZXJsYXBwaW5nIGNvZGVib29rICovCitpbnQgICBuc2YsICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBzYW1wbGVzIGluIHN1YmZyYW1lICovCitTcGVleEJpdHMgKmJpdHMsCitjaGFyICpzdGFjaywKK3NweF9pbnQzMl90ICpzZWVkCispOworCisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2NiX3NlYXJjaF9hcm00LmggYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9jYl9zZWFyY2hfYXJtNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Yjc1MmEKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9jYl9zZWFyY2hfYXJtNC5oCkBAIC0wLDAgKzEsMTM3IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDQgSmVhbi1NYXJjIFZhbGluICovCisvKioKKyAgIEBmaWxlIGNiX3NlYXJjaF9hcm00LmgKKyAgIEBicmllZiBGaXhlZCBjb2RlYm9vayBmdW5jdGlvbnMgKEFSTTQgdmVyc2lvbikKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisvKiBUaGlzIG9wdGltaXphdGlvbiBpcyB0ZW1wb3JhbHkgZGlzYWJsZWQgdW50aWwgaXQgaXMgZml4ZWQgdG8gYWNjb3VudCBmb3IgdGhlIGZhY3QgCisgICB0aGF0ICJyIiBpcyBub3cgYSAxNi1iaXQgYXJyYXkgKi8KKyNpZiAwCisjZGVmaW5lIE9WRVJSSURFX0NPTVBVVEVfV0VJR0hURURfQ09ERUJPT0sKK3N0YXRpYyB2b2lkIGNvbXB1dGVfd2VpZ2h0ZWRfY29kZWJvb2soY29uc3Qgc2lnbmVkIGNoYXIgKnNoYXBlX2NiLCBjb25zdCBzcHhfd29yZDE2X3QgKnIsIHNweF93b3JkMTZfdCAqcmVzcCwgc3B4X3dvcmQxNl90ICpyZXNwMiwgc3B4X3dvcmQzMl90ICpFLCBpbnQgc2hhcGVfY2Jfc2l6ZSwgaW50IHN1YnZlY3Rfc2l6ZSwgY2hhciAqc3RhY2spCit7CisgICBpbnQgaSwgaiwgazsKKyAgLy9jb25zdCBzaWduZWQgY2hhciAqc2hhcGU7CisgICBmb3IgKGk9MDtpPHNoYXBlX2NiX3NpemU7aSs9NCkKKyAgIHsKKworICAgICAgLy9zaGFwZSA9IHNoYXBlX2NiOworICAgICAgRVswXT0wOworICAgICAgRVsxXT0wOworICAgICAgRVsyXT0wOworICAgICAgRVszXT0wOworCisgICAgICAvKiBDb21wdXRlIGNvZGV3b3JkIHJlc3BvbnNlIHVzaW5nIGNvbnZvbHV0aW9uIHdpdGggaW1wdWxzZSByZXNwb25zZSAqLworICAgICAgZm9yKGo9MDtqPHN1YnZlY3Rfc2l6ZTtqKyspCisgICAgICB7CisjaWYgMQorICAgICAgICAgIHNweF93b3JkMTZfdCAqcmVzOworICAgICAgICAgIHJlcyA9IHJlc3ArajsKKyAgICAgICAgICBzcHhfd29yZDMyX3QgcmVzajAscmVzajEscmVzajIscmVzajM7CisgICAgICAgICAgc3B4X3dvcmQzMl90IGRlYWQxLCBkZWFkMiwgZGVhZDMsIGRlYWQ0LCBkZWFkNSwgZGVhZDYsIGRlYWQ3LCBkZWFkODsKKyAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICAgICAgICAgIm1vdiAlMCwgIzAgXG5cdCIKKyAgICAgICAgICAgICAgICAibW92ICUxLCAjMCBcblx0IgorICAgICAgICAgICAgICAgICJtb3YgJTIsICMwIFxuXHQiCisgICAgICAgICAgICAgICAgIm1vdiAlMywgIzAgXG5cdCIKKyAgICAgICAgICAgICAgICAiLndlaWdodGVkJT06IFxuXHQiCisgICAgICAgICAgICAgICAgImxkcnNiICU4LCBbJTZdIFxuXHQiCisgICAgICAgICAgICAgICAgImxkciAlMTAsIFslNV0sICMtNCBcblx0IgorICAgICAgICAgICAgICAgICJtb3YgJTksICU2IFxuXHQiCisgICAgICAgICAgICAgICAgImxkcnNiICUxMSwgWyU5LCAlN10hIFxuXHQiCisgICAgICAgICAgICAgICAgIm1sYSAlMCwgJTEwLCAlOCwgJTAgXG5cdCIKKyAgICAgICAgICAgICAgICAibGRyc2IgJTgsIFslOSwgJTddISBcblx0IgorICAgICAgICAgICAgICAgICJtbGEgJTEsICUxMCwgJTExLCAlMSBcblx0IgorICAgICAgICAgICAgICAgICJsZHJzYiAlMTEsIFslOSwgJTddISBcblx0IgorICAgICAgICAgICAgICAgICJtbGEgJTIsICUxMCwgJTgsICUyIFxuXHQiCisgICAgICAgICAgICAgICAgInN1YnMgJTQsICU0LCAjMSBcblx0IgorICAgICAgICAgICAgICAgICJtbGEgJTMsICUxMCwgJTExLCAlMyBcblx0IgorICAgICAgICAgICAgICAgICJhZGQgJTYsICU2LCAjMSBcblx0IgorICAgICAgICAgICAgICAgICJibmUgLndlaWdodGVkJT0gXG5cdCIKKyAgICAgICAgICAgIDogIj1yIiAocmVzajApLCAiPXIiIChyZXNqMSksICI9ciIgKHJlc2oyKSwgIj1yIiAocmVzajMpLAorICAgICAgICAgICI9ciIgKGRlYWQxKSwgIj1yIiAoZGVhZDIpLCAiPXIiIChkZWFkMyksICI9ciIgKGRlYWQ0KSwKKyAgICAgICAgICAiPXIiIChkZWFkNSksICI9ciIgKGRlYWQ2KSwgIj1yIiAoZGVhZDcpLCAiPXIiIChkZWFkOCkKKyAgICAgICAgICAgIDogIjQiIChqKzEpLCAiNSIgKHIraiksICI2IiAoc2hhcGVfY2IpLCAiNyIgKHN1YnZlY3Rfc2l6ZSkKKyAgICAgICAgICAgIDogImNjIiwgIm1lbW9yeSIpOworI2Vsc2UKKyAgICAgICAgICBzcHhfd29yZDE2X3QgKnJlczsKKyAgICAgICAgICByZXMgPSByZXNwK2o7CisgICAgICAgICAgc3B4X3dvcmQzMl90IHJlc2owPTA7CisgICAgICAgICAgc3B4X3dvcmQzMl90IHJlc2oxPTA7CisgICAgICAgICAgc3B4X3dvcmQzMl90IHJlc2oyPTA7CisgICAgICAgICAgc3B4X3dvcmQzMl90IHJlc2ozPTA7CisgICAgICAgICAgZm9yIChrPTA7azw9ajtrKyspCisgICAgICAgICAgeworICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyICpzaGFwZT1zaGFwZV9jYitrOworICAgICAgICAgICAgIHJlc2owID0gTUFDMTZfMTYocmVzajAsKnNoYXBlLHJbai1rXSk7CisgICAgICAgICAgICAgc2hhcGUgKz0gc3VidmVjdF9zaXplOworICAgICAgICAgICAgIHJlc2oxID0gTUFDMTZfMTYocmVzajEsKnNoYXBlLHJbai1rXSk7CisgICAgICAgICAgICAgc2hhcGUgKz0gc3VidmVjdF9zaXplOworICAgICAgICAgICAgIHJlc2oyID0gTUFDMTZfMTYocmVzajIsKnNoYXBlLHJbai1rXSk7CisgICAgICAgICAgICAgc2hhcGUgKz0gc3VidmVjdF9zaXplOworICAgICAgICAgICAgIHJlc2ozID0gTUFDMTZfMTYocmVzajMsKnNoYXBlLHJbai1rXSk7CisgICAgICAgICAgICAgc2hhcGUgKz0gc3VidmVjdF9zaXplOworICAgICAgICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRklYRURfUE9JTlQKKyAgICAgICAgICByZXNqMCA9IFNIUihyZXNqMCwgMTEpOworICAgICAgICAgIHJlc2oxID0gU0hSKHJlc2oxLCAxMSk7CisgICAgICAgICAgcmVzajIgPSBTSFIocmVzajIsIDExKTsKKyAgICAgICAgICByZXNqMyA9IFNIUihyZXNqMywgMTEpOworI2Vsc2UKKyAgICAgICAgICByZXNqMCAqPSAwLjAzMTI1OworICAgICAgICAgIHJlc2oxICo9IDAuMDMxMjU7CisgICAgICAgICAgcmVzajIgKj0gMC4wMzEyNTsKKyAgICAgICAgICByZXNqMyAqPSAwLjAzMTI1OworI2VuZGlmCisKKyAgICAgICAgICAvKiBDb21wdXRlIGNvZGV3b3JkIGVuZXJneSAqLworICAgICAgICAgIEVbMF09QUREMzIoRVswXSxNVUxUMTZfMTYocmVzajAscmVzajApKTsKKyAgICAgICAgICBFWzFdPUFERDMyKEVbMV0sTVVMVDE2XzE2KHJlc2oxLHJlc2oxKSk7CisgICAgICAgICAgRVsyXT1BREQzMihFWzJdLE1VTFQxNl8xNihyZXNqMixyZXNqMikpOworICAgICAgICAgIEVbM109QUREMzIoRVszXSxNVUxUMTZfMTYocmVzajMscmVzajMpKTsKKyAgICAgICAgICAqcmVzID0gcmVzajA7CisgICAgICAgICAgcmVzICs9IHN1YnZlY3Rfc2l6ZTsKKyAgICAgICAgICAqcmVzID0gcmVzajE7CisgICAgICAgICAgcmVzICs9IHN1YnZlY3Rfc2l6ZTsKKyAgICAgICAgICAqcmVzID0gcmVzajI7CisgICAgICAgICAgcmVzICs9IHN1YnZlY3Rfc2l6ZTsKKyAgICAgICAgICAqcmVzID0gcmVzajM7CisgICAgICAgICAgcmVzICs9IHN1YnZlY3Rfc2l6ZTsKKyAgICAgIH0KKyAgICAgIHJlc3AgKz0gc3VidmVjdF9zaXplPDwyOworICAgICAgc2hhcGVfY2IgKz0gc3VidmVjdF9zaXplPDwyOworICAgICAgRSs9NDsKKyAgIH0KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9jYl9zZWFyY2hfYmZpbi5oIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvY2Jfc2VhcmNoX2JmaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTljZjgzCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvY2Jfc2VhcmNoX2JmaW4uaApAQCAtMCwwICsxLDExMiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA1IEFuYWxvZyBEZXZpY2VzICovCisvKioKKyAgIEBhdXRob3IgSmVhbi1NYXJjIFZhbGluIAorICAgQGZpbGUgY2Jfc2VhcmNoX2JmaW4uaAorICAgQGJyaWVmIEZpeGVkIGNvZGVib29rIGZ1bmN0aW9ucyAoQmxhY2tmaW4gdmVyc2lvbikKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjZGVmaW5lIE9WRVJSSURFX0NPTVBVVEVfV0VJR0hURURfQ09ERUJPT0sgCit2b2lkIGNvbXB1dGVfd2VpZ2h0ZWRfY29kZWJvb2soY29uc3Qgc2lnbmVkIGNoYXIgKnNoYXBlX2NiLCBjb25zdCBzcHhfd29yZDE2X3QgKnIsIHNweF93b3JkMTZfdCAqcmVzcCwgc3B4X3dvcmQxNl90ICpyZXNwMiwgc3B4X3dvcmQzMl90ICpFLCBpbnQgc2hhcGVfY2Jfc2l6ZSwgaW50IHN1YnZlY3Rfc2l6ZSwgY2hhciAqc3RhY2spCit7CisgICBpbnQgaTsKKyAgIGZvciAoaT0wO2k8c2hhcGVfY2Jfc2l6ZTtpKyspCisgICB7CisgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICAiUDAgPSAlMDtcblx0IgorICAgICAgICAgIkxDMCA9IFAwO1xuXHQiCisgICAgICAgICAiUDEgPSAlMTtcblx0IgorICAgICAgICAgIlAyID0gJTI7XG5cdCIKKyAgICAgICAgICJQMyA9ICUzO1xuXHQiCisgICAgICAgICAiUDAgPSAxO1xuXHQiCisgICAgICAgICAiTDAgPSAwO1xuXHQiCisgICAgICAgICAiTDEgPSAwO1xuXHQiCisgICAgICAgICAiUjIgPSAwO1xuXHQiCisgICAgICAgICAiQTEgPSAwO1xuXHQiCisgICAgICAgICAiTE9PUCBvdXR0ZXIlPSBMQzA7XG5cdCIKKyAgICAgICAgICJMT09QX0JFR0lOIG91dHRlciU9O1xuXHQiCisgICAgICAgICAgICAiQTAgPSAwO1xuXHQiCisgICAgICAgICAgICAiUDQgPSBQMTtcblx0IgorICAgICAgICAgICAgIkkxID0gUDI7XG5cdCIKKyAgICAgICAgICAgICJSMCA9IEJbUDQrK10gKFgpIHx8IFIxLkwgPSBXW0kxLS1dO1xuXHQiCisgICAgICAgICAgICAiTE9PUCBpbm5lciU9IExDMSA9IFAwO1xuXHQiCisgICAgICAgICAgICAiTE9PUF9CRUdJTiBpbm5lciU9O1xuXHQiCisgICAgICAgICAgICAgICAiQTAgKz0gUjAuTCpSMS5MIChJUykgfHwgUjAgPSBCW1A0KytdIChYKSB8fCBSMS5MID0gV1tJMS0tXTtcblx0IgorICAgICAgICAgICAgIkxPT1BfRU5EIGlubmVyJT07XG5cdCIKKyAgICAgICAgICAgICJSMCA9IEEwO1xuXHQiCisgICAgICAgICAgICAiUjAgPj4+PSAxMztcblx0IgorICAgICAgICAgICAgIkExICs9IFIwLkwqUjAuTCAoSVMpO1xuXHQiCisgICAgICAgICAgICAiV1tQMysrXSA9IFIwO1xuXHQiCisgICAgICAgICAgICAiUDAgKz0gMTtcblx0IgorICAgICAgICAgICAgIlAyICs9IDI7XG5cdCIKKyAgICAgICAgICJMT09QX0VORCBvdXR0ZXIlPTtcblx0IgorICAgICAgICAgIlA0ID0gJTQ7XG5cdCIKKyAgICAgICAgICJSMSA9IEExO1xuXHQiCisgICAgICAgICAiW1A0XSA9IFIxO1xuXHQiCisgICAgICAgICA6CisgICAgICA6ICJtIiAoc3VidmVjdF9zaXplKSwgIm0iIChzaGFwZV9jYiksICJtIiAociksICJtIiAocmVzcCksICJtIiAoRSkKKyAgICAgIDogIkEwIiwgIlAwIiwgIlAxIiwgIlAyIiwgIlAzIiwgIlA0IiwgIlIwIiwgIlIxIiwgIlIyIiwgIkkwIiwgIkkxIiwgIkwwIiwgCisgICAgICAgICJMMSIsICJBMCIsICJBMSIsICJtZW1vcnkiCisjaWYgIShfX0dOVUNfXyA9PSAzKQorICAgICAgICAgLCAiTEMwIiwgIkxDMSIgLyogZ2NjIDMuNCBkb2Vzbid0IGtub3cgYWJvdXQgTEMgcmVnaXN0ZXJzICovCisjZW5kaWYKKyAgICAgICk7CisgICAgICBzaGFwZV9jYiArPSBzdWJ2ZWN0X3NpemU7CisgICAgICByZXNwICs9IHN1YnZlY3Rfc2l6ZTsKKyAgICAgIEUrKzsKKyAgIH0KK30KKworI2RlZmluZSBPVkVSUklERV9UQVJHRVRfVVBEQVRFCitzdGF0aWMgaW5saW5lIHZvaWQgdGFyZ2V0X3VwZGF0ZShzcHhfd29yZDE2X3QgKnQsIHNweF93b3JkMTZfdCBnLCBzcHhfd29yZDE2X3QgKnIsIGludCBsZW4pCit7CisgICBpZiAoIWxlbikKKyAgICAgIHJldHVybjsKKyAgIF9fYXNtX18gX192b2xhdGlsZV9fCisgICAgICAgICAoCisgICAgICAgICAiSTAgPSAlMDtcblx0IgorICAgICAgICAgIkkxID0gJTE7XG5cdCIKKyAgICAgICAgICJMMCA9IDA7XG5cdCIKKyAgICAgICAgICJMMSA9IDA7XG5cdCIKKyAgICAgICAgICJSMiA9IDQwOTY7XG5cdCIKKyAgICAgICAgICJMT09QIHR1cGRhdGUlPSBMQzAgPSAlMztcblx0IgorICAgICAgICAgIkxPT1BfQkVHSU4gdHVwZGF0ZSU9O1xuXHQiCisgICAgICAgICAgICAiUjAuTCA9IFdbSTBdIHx8IFIxLkwgPSBXW0kxKytdO1xuXHQiCisgICAgICAgICAgICAiUjEgPSAoQTEgPSBSMS5MKiUyLkwpIChJUyk7XG5cdCIKKyAgICAgICAgICAgICJSMSA9IFIxICsgUjI7XG5cdCIKKyAgICAgICAgICAgICJSMSA+Pj49IDEzO1xuXHQiCisgICAgICAgICAgICAiUjAuTCA9IFIwLkwgLSBSMS5MO1xuXHQiCisgICAgICAgICAgICAiV1tJMCsrXSA9IFIwLkw7XG5cdCIKKyAgICAgICAgICJMT09QX0VORCB0dXBkYXRlJT07XG5cdCIKKyAgIDoKKyAgIDogImEiICh0KSwgImEiIChyKSwgImQiIChnKSwgImEiIChsZW4pCisgICA6ICJSMCIsICJSMSIsICJSMiIsICJBMSIsICJJMCIsICJJMSIsICJMMCIsICJMMSIKKyAgICAgICAgICk7Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9jYl9zZWFyY2hfc3NlLmggYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9jYl9zZWFyY2hfc3NlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIwMzk2OAotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2NiX3NlYXJjaF9zc2UuaApAQCAtMCwwICsxLDg0IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDQgSmVhbi1NYXJjIFZhbGluICovCisvKioKKyAgIEBmaWxlIGNiX3NlYXJjaF9zc2UuaAorICAgQGJyaWVmIEZpeGVkIGNvZGVib29rIGZ1bmN0aW9ucyAoU1NFIHZlcnNpb24pCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgPHhtbWludHJpbi5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgX3NweF9tbV9nZXRyX3BzIChfX20xMjggVSwgZmxvYXQgKl9fWiwgZmxvYXQgKl9fWSwgZmxvYXQgKl9fWCwgZmxvYXQgKl9fVykKK3sKKyAgdW5pb24geworICAgIGZsb2F0IF9fYVs0XTsKKyAgICBfX20xMjggX192OworICB9IF9fdTsKKyAgCisgIF9fdS5fX3YgPSBVOworCisgICpfX1ogPSBfX3UuX19hWzBdOworICAqX19ZID0gX191Ll9fYVsxXTsKKyAgKl9fWCA9IF9fdS5fX2FbMl07CisgICpfX1cgPSBfX3UuX19hWzNdOworCit9CisKKyNkZWZpbmUgT1ZFUlJJREVfQ09NUFVURV9XRUlHSFRFRF9DT0RFQk9PSworc3RhdGljIHZvaWQgY29tcHV0ZV93ZWlnaHRlZF9jb2RlYm9vayhjb25zdCBzaWduZWQgY2hhciAqc2hhcGVfY2IsIGNvbnN0IHNweF9zaWdfdCAqX3IsIGZsb2F0ICpyZXNwLCBfX20xMjggKnJlc3AyLCBfX20xMjggKkUsIGludCBzaGFwZV9jYl9zaXplLCBpbnQgc3VidmVjdF9zaXplLCBjaGFyICpzdGFjaykKK3sKKyAgIGludCBpLCBqLCBrOworICAgX19tMTI4IHJlc2osIEVFOworICAgVkFSREVDTChfX20xMjggKnIpOworICAgVkFSREVDTChfX20xMjggKnNoYXBlKTsKKyAgIEFMTE9DKHIsIHN1YnZlY3Rfc2l6ZSwgX19tMTI4KTsKKyAgIEFMTE9DKHNoYXBlLCBzdWJ2ZWN0X3NpemUsIF9fbTEyOCk7CisgICBmb3Ioaj0wO2o8c3VidmVjdF9zaXplO2orKykKKyAgICAgIHJbal0gPSBfbW1fbG9hZF9wczEoX3Iraik7CisgICBmb3IgKGk9MDtpPHNoYXBlX2NiX3NpemU7aSs9NCkKKyAgIHsKKyAgICAgIGZsb2F0ICpfcmVzID0gcmVzcCtpKnN1YnZlY3Rfc2l6ZTsKKyAgICAgIGNvbnN0IHNpZ25lZCBjaGFyICpfc2hhcGUgPSBzaGFwZV9jYitpKnN1YnZlY3Rfc2l6ZTsKKyAgICAgIEVFID0gX21tX3NldHplcm9fcHMoKTsKKyAgICAgIGZvcihqPTA7ajxzdWJ2ZWN0X3NpemU7aisrKQorICAgICAgeworICAgICAgICAgc2hhcGVbal0gPSBfbW1fc2V0cl9wcygwLjAzMTI1Kl9zaGFwZVtqXSwgMC4wMzEyNSpfc2hhcGVbc3VidmVjdF9zaXplK2pdLCAwLjAzMTI1Kl9zaGFwZVsyKnN1YnZlY3Rfc2l6ZStqXSwgMC4wMzEyNSpfc2hhcGVbMypzdWJ2ZWN0X3NpemUral0pOworICAgICAgfQorICAgICAgZm9yKGo9MDtqPHN1YnZlY3Rfc2l6ZTtqKyspCisgICAgICB7CisgICAgICAgICByZXNqID0gX21tX3NldHplcm9fcHMoKTsKKyAgICAgICAgIGZvciAoaz0wO2s8PWo7aysrKQorICAgICAgICAgICAgcmVzaiA9IF9tbV9hZGRfcHMocmVzaiwgX21tX211bF9wcyhzaGFwZVtrXSxyW2ota10pKTsKKyAgICAgICAgIF9zcHhfbW1fZ2V0cl9wcyhyZXNqLCBfcmVzK2osIF9yZXMrc3VidmVjdF9zaXplK2osIF9yZXMrMipzdWJ2ZWN0X3NpemUraiwgX3JlcyszKnN1YnZlY3Rfc2l6ZStqKTsKKyAgICAgICAgICpyZXNwMisrID0gcmVzajsKKyAgICAgICAgIEVFID0gX21tX2FkZF9wcyhFRSwgX21tX211bF9wcyhyZXNqLCByZXNqKSk7CisgICAgICB9CisgICAgICBFW2k+PjJdID0gRUU7CisgICB9Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9lY2hvX2RpYWdub3N0aWMubSBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2VjaG9fZGlhZ25vc3RpYy5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYmYzOTAKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9lY2hvX2RpYWdub3N0aWMubQpAQCAtMCwwICsxLDcyIEBACislIEF0dGVtcHRzIHRvIGRpYWdub3NlIEFFQyBwcm9ibGVtcyBmcm9tIHJlY29yZGVkIHNhbXBsZXMKKyUKKyUgb3V0ID0gZWNob19kaWFnbm9zdGljKHJlY19maWxlLCBwbGF5X2ZpbGUsIG91dF9maWxlLCB0YWlsX2xlbmd0aCkKKyUKKyUgQ29tcHV0ZXMgdGhlIGZ1bGwgbWF0cml4IGludmVyc2lvbiB0byBjYW5jZWwgZWNobyBmcm9tIHRoZSAKKyUgcmVjb3JkaW5nICdyZWNfZmlsZScgdXNpbmcgdGhlIGZhciBlbmQgc2lnbmFsICdwbGF5X2ZpbGUnIHVzaW5nIAorJSBhIGZpbHRlciBsZW5ndGggb2YgJ3RhaWxfbGVuZ3RoJy4gVGhlIG91dHB1dCBpcyBzYXZlZCB0byAnb3V0X2ZpbGUnLgorZnVuY3Rpb24gb3V0ID0gZWNob19kaWFnbm9zdGljKHJlY19maWxlLCBwbGF5X2ZpbGUsIG91dF9maWxlLCB0YWlsX2xlbmd0aCkKKworRj1mb3BlbihyZWNfZmlsZSwncmInKTsKK3JlYz1mcmVhZChGLEluZiwnc2hvcnQnKTsKK2ZjbG9zZSAoRik7CitGPWZvcGVuKHBsYXlfZmlsZSwncmInKTsKK3BsYXk9ZnJlYWQoRixJbmYsJ3Nob3J0Jyk7CitmY2xvc2UgKEYpOworCityZWMgPSBbcmVjOyB6ZXJvcygxMDI0LDEpXTsKK3BsYXkgPSBbcGxheTsgemVyb3MoMTAyNCwxKV07CisKK04gPSBsZW5ndGgocmVjKTsKK2NvcnIgPSByZWFsKGlmZnQoZmZ0KHJlYykuKmNvbmooZmZ0KHBsYXkpKSkpOworYWNvcnIgPSByZWFsKGlmZnQoZmZ0KHBsYXkpLipjb25qKGZmdChwbGF5KSkpKTsKKworW2EsYl0gPSBtYXgoY29ycik7CisKK2lmIGIgPiBOLzIKKyAgICAgIGIgPSBiLU47CitlbmQKK3ByaW50ZiAoIkZhciBlbmQgdG8gbmVhciBlbmQgZGVsYXkgaXMgJWQgc2FtcGxlc1xuIiwgYik7CitpZiAoYiA+IC4zKnRhaWxfbGVuZ3RoKQorICAgICAgcHJpbnRmICgnVGhpcyBpcyB0b28gbXVjaCBkZWxheSwgdHJ5IGRlbGF5aW5nIHRoZSBmYXItZW5kIHNpZ25hbCBhIGJpdFxuJyk7CitlbHNlIGlmIChiIDwgMCkKKyAgICAgIHByaW50ZiAoJ1lvdSBoYXZlIGEgbmVnYXRpdmUgZGVsYXksIHRoZSBlY2hvIGNhbmNlbGxlciBoYXMgbm8gY2hhbmNlIHRvIGNhbmNlbCBhbnl0aGluZyFcbicpOworICAgZWxzZQorICAgICAgcHJpbnRmICgnRGVsYXkgbG9va3MgT0suXG4nKTsKKyAgICAgIGVuZAorICAgZW5kCitlbmQKK04yID0gcm91bmQoTi8yKTsKK2NvcnIxID0gcmVhbChpZmZ0KGZmdChyZWMoMTpOMikpLipjb25qKGZmdChwbGF5KDE6TjIpKSkpKTsKK2NvcnIyID0gcmVhbChpZmZ0KGZmdChyZWMoTjIrMTplbmQpKS4qY29uaihmZnQocGxheShOMisxOmVuZCkpKSkpOworCitbYSxiMV0gPSBtYXgoY29ycjEpOworaWYgYjEgPiBOMi8yCisgICAgICBiMSA9IGIxLU4yOworZW5kCitbYSxiMl0gPSBtYXgoY29ycjIpOworaWYgYjIgPiBOMi8yCisgICAgICBiMiA9IGIyLU4yOworZW5kCitkcmlmdCA9IChiMS1iMikvTjI7CitwcmludGYgKCdEcmlmdCBlc3RpbWF0ZSBpcyAlZiUlICglZCBzYW1wbGVzKVxuJywgMTAwKmRyaWZ0LCBiMS1iMik7CitpZiBhYnMoYjEtYjIpIDwgMTAKKyAgIHByaW50ZiAoJ0EgZHJpZnQgb2YgYSBmZXcgKCstMTApIHNhbXBsZXMgaXMgbm9ybWFsLlxuJyk7CitlbHNlCisgICBpZiBhYnMoYjEtYjIpIDwgMzAKKyAgICAgIHByaW50ZiAoJ1RoZXJlIG1heSBiZSAobm90IHN1cmUpIGV4Y2Vzc2l2ZSBjbG9jayBkcmlmdC4gSXMgdGhlIGNhcHR1cmUgYW5kIHBsYXliYWNrIGRvbmUgb24gdGhlIHNhbWUgc291bmRjYXJkP1xuJyk7CisgICBlbHNlCisgICAgICBwcmludGYgKCdZb3VyIGNsb2NrIGlzIGRyaWZ0aW5nISBObyB3YXkgdGhlIEFFQyB3aWxsIGJlIGFibGUgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGF0LiBNb3N0IGxpa2VseSwgeW91JydyZSBkb2luZyBjYXB0dXJlIGFuZCBwbGF5YmFjayBmcm9tIHR3byBkaWZmZXJlbnQgY2FyZHMuXG4nKTsKKyAgICAgIGVuZAorICAgZW5kCitlbmQKK2Fjb3JyKDEpID0gLjAwMSsxLjAwMDAxKmFjb3JyKDEpOworQXRBID0gdG9lcGxpdHooYWNvcnIoMTp0YWlsX2xlbmd0aCkpOworYmIgPSBjb3JyKDE6dGFpbF9sZW5ndGgpOworaCA9IEF0QVxiYjsKKworb3V0ID0gKHJlYyAtIGZpbHRlcihoLCAxLCBwbGF5KSk7CisKK0Y9Zm9wZW4ob3V0X2ZpbGUsJ3cnKTsKK2Z3cml0ZShGLG91dCwnc2hvcnQnKTsKK2ZjbG9zZSAoRik7CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9leGNfMTBfMTZfdGFibGUuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2V4Y18xMF8xNl90YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YWUzNTcKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9leGNfMTBfMTZfdGFibGUuYwpAQCAtMCwwICsxLDUwIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVhbi1NYXJjIFZhbGluIAorICAgRmlsZTogZXhjXzEwXzE2X3RhYmxlLmMKKyAgIENvZGVib29rIGZvciBleGNpdGF0aW9uIGluIG5hcnJvd2JhbmQgQ0VMUCBtb2RlICgzMjAwIGJwcykKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisKK2NvbnN0IHNpZ25lZCBjaGFyIGV4Y18xMF8xNl90YWJsZVsxNjBdID0geworMjIsMzksMTQsNDQsMTEsMzUsLTIsMjMsLTQsNiwKKzQ2LC0yOCwxMywtMjcsLTIzLDEyLDQsMjAsLTUsOSwKKzM3LC0xOCwtMjMsMjMsMCw5LC02LC0yMCw0LC0xLAorLTE3LC01LC00LDE3LDAsMSw5LC0yLDEsMiwKKzIsLTEyLDgsLTI1LDM5LDE1LDksMTYsLTU1LC0xMSwKKzksMTEsNSwxMCwtMiwtNjAsOCwxMywtNiwxMSwKKy0xNiwyNywtNDcsLTEyLDExLDEsMTYsLTcsOSwtMywKKy0yOSw5LC0xNCwyNSwtMTksMzQsMzYsMTIsNDAsLTEwLAorLTMsLTI0LC0xNCwtMzcsLTIxLC0zNSwtMiwtMzYsMywtNiwKKzY3LDI4LDYsLTE3LC0zLC0xMiwtMTYsLTE1LC0xNywtNywKKy01OSwtMzYsLTEzLDEsNywxLDIsMTAsMiwxMSwKKzEzLDEwLDgsLTIsNywzLDUsNCwyLDIsCistMywtOCw0LC01LDYsNywtNDIsMTUsMzUsLTIsCistNDYsMzgsMjgsLTIwLC05LDEsNywtMywwLC0yLAorMCwwLDAsMCwwLDAsMCwwLDAsMCwKKy0xNSwtMjgsNTIsMzIsNSwtNSwtMTcsLTIwLC0xMCwtMX07CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9leGNfMTBfMzJfdGFibGUuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2V4Y18xMF8zMl90YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZTU2YTIKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9leGNfMTBfMzJfdGFibGUuYwpAQCAtMCwwICsxLDY2IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVhbi1NYXJjIFZhbGluIAorICAgRmlsZTogZXhjXzEwXzMyX3RhYmxlLmMKKyAgIENvZGVib29rIGZvciBleGNpdGF0aW9uIGluIG5hcnJvd2JhbmQgQ0VMUCBtb2RlICg0MDAwIGJwcykKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisKK2NvbnN0IHNpZ25lZCBjaGFyIGV4Y18xMF8zMl90YWJsZVszMjBdID0geworNywxNywxNywyNywyNSwyMiwxMiw0LC0zLDAsCisyOCwtMzYsMzksLTI0LC0xNSwzLC05LDE1LC01LDEwLAorMzEsLTI4LDExLDMxLC0yMSw5LC0xMSwtMTEsLTIsLTcsCistMjUsMTQsLTIyLDMxLDQsLTE0LDE5LC0xMiwxNCwtNSwKKzQsLTcsNCwtNSw5LDAsLTIsNDIsLTQ3LC0xNiwKKzEsOCwwLDksMjMsLTU3LDAsMjgsLTExLDYsCistMzEsNTUsLTQ1LDMsLTUsNCwyLC0yLDQsLTcsCistMyw2LC0yLDcsLTMsMTIsNSw4LDU0LC0xMCwKKzgsLTcsLTgsLTI0LC0yNSwtMjcsLTE0LC01LDgsNSwKKzQ0LDIzLDUsLTksLTExLC0xMSwtMTMsLTksLTEyLC04LAorLTI5LC04LC0yMiw2LC0xNSwzLC0xMiwtMSwtNSwtMywKKzM0LC0xLDI5LC0xNiwxNywtNCwxMiwyLDEsNCwKKy0yLC00LDIsLTEsMTEsLTMsLTUyLDI4LDMwLC05LAorLTMyLDI1LDQ0LC0yMCwtMjQsNCw2LC0xLDAsMCwKKzAsMCwwLDAsMCwwLDAsMCwwLDAsCistMjUsLTEwLDIyLDI5LDEzLC0xMywtMjIsLTEzLC00LDAsCistNCwtMTYsMTAsMTUsLTM2LC0yNCwyOCwyNSwtMSwtMywKKzY2LC0zMywtMTEsLTE1LDYsMCwzLDQsLTIsNSwKKzI0LC0yMCwtNDcsMjksMTksLTIsLTQsLTEsMCwtMSwKKy0yLDMsMSw4LC0xMSw1LDUsLTU3LDI4LDI4LAorMCwtMTYsNCwtNCwxMiwtNiwtMSwyLC0yMCw2MSwKKy05LDI0LC0yMiwtNDIsMjksNiwxNyw4LDQsMiwKKy02NSwxNSw4LDEwLDUsNiw1LDMsMiwtMiwKKy0zLDUsLTksNCwtNSwyMywxMywyMywtMywtNjMsCiszLC01LC00LC02LDAsLTMsMjMsLTM2LC00Niw5LAorNSw1LDgsNCw5LC01LDEsLTMsMTAsMSwKKy02LDEwLC0xMSwyNCwtNDcsMzEsMjIsLTEyLDE0LC0xMCwKKzYsMTEsLTcsLTcsNywtMzEsNTEsLTEyLC02LDcsCis2LC0xNyw5LC0xMSwtMjAsNTIsLTE5LDMsLTYsLTYsCistOCwtNSwyMywtNDEsMzcsMSwtMjEsMTAsLTE0LDgsCis3LDUsLTE1LC0xNSwyMywzOSwtMjYsLTMzLDcsMiwKKy0zMiwtMzAsLTIxLC04LDQsMTIsMTcsMTUsMTQsMTF9OwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZXhjXzIwXzMyX3RhYmxlLmMgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9leGNfMjBfMzJfdGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDA5OGI4Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZXhjXzIwXzMyX3RhYmxlLmMKQEAgLTAsMCArMSw2NiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAKKyAgIEZpbGU6IGV4Y18yMF8zMl90YWJsZS5jCisgICBDb2RlYm9vayBmb3IgZXhjaXRhdGlvbiBpbiBuYXJyb3diYW5kIENFTFAgbW9kZSAoMjAwMCBicHMpCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworCitjb25zdCBzaWduZWQgY2hhciBleGNfMjBfMzJfdGFibGVbNjQwXSA9IHsKKzEyLDMyLDI1LDQ2LDM2LDMzLDksMTQsLTMsNiwxLC04LDAsLTEwLC01LC03LC03LC03LC01LC01LAorMzEsLTI3LDI0LC0zMiwtNCwxMCwtMTEsMjEsLTMsMTksMjMsLTksMjIsMjQsLTEwLC0xLC0xMCwtMTMsLTcsLTExLAorNDIsLTMzLDMxLDE5LC04LDAsLTEwLC0xNiwxLC0yMSwtMTcsMTAsLTgsMTQsOCw0LDExLC0yLDUsLTIsCistMzMsMTEsLTE2LDMzLDExLC00LDksLTQsMTEsMiw2LC01LDgsLTUsMTEsLTQsLTYsMjYsLTM2LC0xNiwKKzAsNCwtMiwtOCwxMiw2LC0xLDM0LC00NiwtMjIsOSw5LDIxLDksNSwtNjYsLTUsMjYsMiwxMCwKKzEzLDIsMTksOSwxMiwtODEsMywxMywxMywwLC0xNCwyMiwtMzUsNiwtNywtNCw2LC02LDEwLC02LAorLTMxLDM4LC0zMywwLC0xMCwtMTEsNSwtMTIsMTIsLTE3LDUsMCwtNiwxMywtOSwxMCw4LDI1LDMzLDIsCistMTIsOCwtNiwxMCwtMiwyMSw3LDE3LDQzLDUsMTEsLTcsLTksLTIwLC0zNiwtMjAsLTIzLC00LC00LC0zLAorMjcsLTksLTksLTQ5LC0zOSwtMzgsLTExLC05LDYsNSwyMywyNSw1LDMsMyw0LDEsMiwtMywtMSwKKzg3LDM5LDE3LC0yMSwtOSwtMTksLTksLTE1LC0xMywtMTQsLTE3LC0xMSwtMTAsLTExLC04LC02LC0xLC0zLC0zLC0xLAorLTU0LC0zNCwtMjcsLTgsLTExLC00LC01LDAsMCw0LDgsNiw5LDcsOSw3LDYsNSw1LDUsCis0OCwxMCwxOSwtMTAsMTIsLTEsOSwtMywyLDUsLTMsMiwtMiwtMiwwLC0yLC0yNiw2LDksLTcsCistMTYsLTksMiw3LDcsLTUsLTQzLDExLDIyLC0xMSwtOSwzNCwzNywtMTUsLTEzLC02LDEsLTEsMSwxLAorLTY0LDU2LDUyLC0xMSwtMjcsNSw0LDMsMSwyLDEsMywtMSwtNCwtNCwtMTAsLTcsLTQsLTQsMiwKKy0xLC03LC03LC0xMiwtMTAsLTE1LC05LC01LC01LC0xMSwtMTYsLTEzLDYsMTYsNCwtMTMsLTE2LC0xMCwtNCwyLAorLTQ3LC0xMywyNSw0NywxOSwtMTQsLTIwLC04LC0xNywwLC0zLC0xMywxLDYsLTE3LC0xNCwxNSwxLDEwLDYsCistMjQsMCwtMTAsMTksLTY5LC04LDE0LDQ5LDE3LC01LDMzLC0yOSwzLC00LDAsMiwtOCw1LC02LDIsCisxMjAsLTU2LC0xMiwtNDcsMjMsLTksNiwtNSwxLDIsLTUsMSwtMTAsNCwtMSwtMSw0LC0xLDAsLTMsCiszMCwtNTIsLTY3LDMwLDIyLDExLC0xLC00LDMsMCw3LDIsMCwxLC0xMCwtNCwtOCwtMTMsNSwxLAorMSwtMSw1LDEzLC05LC0zLC0xMCwtNjIsMjIsNDgsLTQsLTYsMiwzLDUsMSwxLDQsMSwxMywKKzMsLTIwLDEwLC05LDEzLC0yLC00LDksLTIwLDQ0LC0xLDIwLC0zMiwtNjcsMTksMCwyOCwxMSw4LDIsCistMTEsMTUsLTE5LC01MywzMSwyLDM0LDEwLDYsLTQsLTU4LDgsMTAsMTMsMTQsMSwxMiwyLDAsMCwKKy0xMjgsMzcsLTgsNDQsLTksMjYsLTMsMTgsMiw2LDExLC0xLDksMSw1LDMsMCwxLDEsMiwKKzEyLDMsLTIsLTMsNywyNSw5LDE4LC02LC0zNywzLC04LC0xNiwzLC0xMCwtNywxNywtMzQsLTQ0LDExLAorMTcsLTE1LC0zLC0xNiwtMSwtMTMsMTEsLTQ2LC02NSwtMiw4LDEzLDIsNCw0LDUsMTUsNSw5LDYsCiswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCistOSwxOSwtMTIsMTIsLTI4LDM4LDI5LC0xLDEyLDIsNSwyMywtMTAsMyw0LC0xNSwyMSwtNCwzLDMsCis2LDE3LC05LC00LC04LC0yMCwyNiw1LC0xMCw2LDEsLTE5LDE4LC0xNSwtMTIsNDcsLTYsLTIsLTcsLTksCistMSwtMTcsLTIsLTIsLTE0LDMwLC0xNCwyLC03LC00LC0xLC0xMiwxMSwtMjUsMTYsLTMsLTEyLDExLC03LDcsCistMTcsMSwxOSwtMjgsMzEsLTcsLTEwLDcsLTEwLDMsMTIsNSwtMTYsNiwyNCw0MSwtMjksLTU0LDAsMSwKKzcsLTEsNSwtNiwxMywxMCwtNCwtOCw4LC05LC0yNywtNTMsLTM4LC0xLDEwLDE5LDE3LDE2LDEyLDEyLAorMCwzLC03LC00LDEzLDEyLC0zMSwtMTQsNiwtNSwzLDUsMTcsNDMsNTAsMjUsMTAsMSwtNiwtMn07CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9leGNfNV8yNTZfdGFibGUuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2V4Y181XzI1Nl90YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMzc5OTYKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9leGNfNV8yNTZfdGFibGUuYwpAQCAtMCwwICsxLDI5MCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAKKyAgIEZpbGU6IGV4Y181XzI1Nl90YWJsZS5jCisgICBDb2RlYm9vayBmb3IgZXhjaXRhdGlvbiBpbiBuYXJyb3diYW5kIENFTFAgbW9kZSAoMTI4MDAgYnBzKQorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKworY29uc3Qgc2lnbmVkIGNoYXIgZXhjXzVfMjU2X3RhYmxlWzEyODBdID0geworLTgsLTM3LDUsLTQzLDUsCis3Myw2MSwzOSwxMiwtMywKKy02MSwtMzIsMiw0MiwzMCwKKy0zLDE3LC0yNyw5LDM0LAorMjAsLTEsLTUsMiwyMywKKy03LC00NiwyNiw1MywtNDcsCisyMCwtMiwtMzMsLTg5LC01MSwKKy02NCwyNywxMSwxNSwtMzQsCistNSwtNTYsMjUsLTksLTEsCistMjksMSw0MCw2NywtMjMsCistMTYsMTYsMzMsMTksNywKKzE0LDg1LDIyLC0xMCwtMTAsCistMTIsLTcsLTEsNTIsODksCisyOSwxMSwtMjAsLTM3LC00NiwKKy0xNSwxNywtMjQsLTI4LDI0LAorMiwxLDAsMjMsLTEwMSwKKzIzLDE0LC0xLC0yMywtMTgsCis5LDUsLTEzLDM4LDEsCistMjgsLTI4LDQsMjcsNTEsCistMjYsMzQsLTQwLDM1LDQ3LAorNTQsMzgsLTU0LC0yNiwtNiwKKzQyLC0yNSwxMywtMzAsLTM2LAorMTgsNDEsLTQsLTMzLDIzLAorLTMyLC03LC00LDUxLC0zLAorMTcsLTUyLDU2LC00NywzNiwKKy0yLC0yMSwzNiwxMCw4LAorLTMzLDMxLDE5LDksLTUsCistNDAsMTAsLTksLTIxLDE5LAorMTgsLTc4LC0xOCwtNSwwLAorLTI2LC0zNiwtNDcsLTUxLC00NCwKKzE4LDQwLDI3LC0yLDI5LAorNDksLTI2LDIsMzIsLTU0LAorMzAsLTczLDU0LDMsLTUsCiszNiwyMiw1MywxMCwtMSwKKy04NCwtNTMsLTI5LC01LDMsCistNDQsNTMsLTUxLDQsMjIsCis3MSwtMzUsLTEsMzMsLTUsCistMjcsLTcsMzYsMTcsLTIzLAorLTM5LDE2LC05LC01NSwtMTUsCistMjAsMzksLTM1LDYsLTM5LAorLTE0LDE4LDQ4LC02NCwtMTcsCistMTUsOSwzOSw4MSwzNywKKy02OCwzNyw0NywtMjEsLTYsCistMTA0LDEzLDYsOSwtMiwKKzM1LDgsLTIzLDE4LDQyLAorNDUsMjEsMzMsLTUsLTQ5LAorOSwtNiwtNDMsLTU2LDM5LAorMiwtMTYsLTI1LDg3LDEsCistMywtOSwxNywtMjUsLTExLAorLTksLTEsMTAsMiwtMTQsCistMTQsNCwtMSwtMTAsMjgsCistMjMsNDAsLTMyLDI2LC05LAorMjYsNCwtMjcsLTIzLDMsCis0MiwtNjAsMSw0OSwtMywKKzI3LDEwLC01MiwtNDAsLTIsCisxOCw0NSwtMjMsMTcsLTQ0LAorMywtMywxNywtNDYsNTIsCistNDAsLTQ3LDI1LDc1LDMxLAorLTQ5LDUzLDMwLC0zMCwtMzIsCistMzYsMzgsLTYsLTE1LC0xNiwKKzU0LC0yNywtNDgsMywzOCwKKy0yOSwtMzIsLTIyLC0xNCwtNCwKKy0yMywtMTMsMzIsLTM5LDksCis4LC00NSwtMTMsMzQsLTE2LAorNDksNDAsMzIsMzEsMjgsCisyMywyMywzMiw0Nyw1OSwKKy02OCw4LDYyLDQ0LDI1LAorLTE0LC0yNCwtNjUsLTE2LDM2LAorNjcsLTI1LC0zOCwtMjEsNCwKKy0zMywtMiw0Miw1LC02MywKKzQwLDExLDI2LC00MiwtMjMsCistNjEsNzksLTMxLDIzLC0yMCwKKzEwLC0zMiw1MywtMjUsLTM2LAorMTAsLTI2LC01LDMsMCwKKy03MSw1LC0xMCwtMzcsMSwKKy0yNCwyMSwtNTQsLTE3LDEsCistMjksLTI1LC0xNSwtMjcsMzIsCis2OCw0NSwtMTYsLTM3LC0xOCwKKy01LDEsMCwtNzcsNzEsCistNiwzLC0yMCw3MSwtNjcsCisyOSwtMzUsMTAsLTMwLDE5LAorNCwxNiwxNyw1LDAsCistMTQsMTksMiwyOCwyNiwKKzU5LDMsMiwyNCwzOSwKKzU1LC01MCwtNDUsLTE4LC0xNywKKzMzLC0zNSwxNCwtMSwxLAorOCw4NywtMzUsLTI5LDAsCistMjcsMTMsLTcsMjMsLTEzLAorMzcsLTQwLDUwLC0zNSwxNCwKKzE5LC03LC0xNCw0OSw1NCwKKy01LDIyLC0yLC0yOSwtOCwKKy0yNywzOCwxMywyNyw0OCwKKzEyLC00MSwtMjEsLTE1LDI4LAorNywtMTYsLTI0LC0xOSwtMjAsCisxMSwtMjAsOSwyLDEzLAorMjMsLTIwLDExLDI3LC0yNywKKzcxLC02OSw4LDIsLTYsCisyMiwxMiwxNiwxNiw5LAorLTE2LC04LC0xNywxLDI1LAorMSw0MCwtMzcsLTMzLDY2LAorOTQsNTMsNCwtMjIsLTI1LAorLTQxLC00MiwyNSwzNSwtMTYsCistMTUsNTcsMzEsLTI5LC0zMiwKKzIxLDE2LC02MCw0NSwxNSwKKy0xLDcsNTcsLTI2LC00NywKKy0yOSwxMSw4LDE1LDE5LAorLTEwNSwtOCw1NCwyNywxMCwKKy0xNyw2LC0xMiwtMSwtMTAsCis0LDAsMjMsLTEwLDMxLAorMTMsMTEsMTAsMTIsLTY0LAorMjMsLTMsLTgsLTE5LDE2LAorNTIsMjQsLTQwLDE2LDEwLAorNDAsNSw5LDAsLTEzLAorLTcsLTIxLC04LC02LC03LAorLTIxLDU5LDE2LC01MywxOCwKKy02MCwxMSwtNDcsMTQsLTE4LAorMjUsLTEzLC0yNCw0LC0zOSwKKzE2LC0yOCw1NCwyNiwtNjcsCiszMCwyNywtMjAsLTUyLDIwLAorLTEyLDU1LDEyLDE4LC0xNiwKKzM5LC0xNCwtNiwtMjYsNTYsCistODgsLTU1LDEyLDI1LDI2LAorLTM3LDYsNzUsMCwtMzQsCistODEsNTQsLTMwLDEsLTcsCis0OSwtMjMsLTE0LDIxLDEwLAorLTYyLC01OCwtNTcsLTQ3LC0zNCwKKzE1LC00LDM0LC03OCwzMSwKKzI1LC0xMSw3LDUwLC0xMCwKKzQyLC02MywxNCwtMzYsLTQsCis1Nyw1NSw1Nyw1Myw0MiwKKy00MiwtMSwxNSw0MCwzNywKKzE1LDI1LC0xMSw2LDEsCiszMSwtMiwtNiwtMSwtNywKKy02NCwzNCwyOCwzMCwtMSwKKzMsMjEsMCwtODgsLTEyLAorLTU2LDI1LC0yOCw0MCw4LAorLTI4LC0xNCw5LDEyLDIsCistNiwtMTcsMjIsNDksLTYsCistMjYsMTQsMjgsLTIwLDQsCistMTIsNTAsMzUsNDAsMTMsCistMzgsLTU4LC0yOSwxNywzMCwKKzIyLDYwLDI2LC01NCwtMzksCistMTIsNTgsLTI4LC02MywxMCwKKy0yMSwtOCwtMTIsMjYsLTYyLAorNiwtMTAsLTExLC0yMiwtNiwKKy03LDQsMSwxOCwyLAorLTcwLDExLDE0LDQsMTMsCisxOSwtMjQsLTM0LDI0LDY3LAorMTcsNTEsLTIxLDEzLDIzLAorNTQsLTMwLDQ4LDEsLTEzLAorODAsMjYsLTE2LC0yLDEzLAorLTQsNiwtMzAsMjksLTI0LAorNzMsLTU4LDMwLC0yNywyMCwKKy0yLC0yMSw0MSw0NSwzMCwKKy0yNywtMywtNSwtMTgsLTIwLAorLTQ5LC0zLC0zNSwxMCw0MiwKKy0xOSwtNjcsLTUzLC0xMSw5LAorMTMsLTE1LC0zMywtNTEsLTMwLAorMTUsNywyNSwtMzAsNCwKKzI4LC0yMiwtMzQsNTQsLTI5LAorMzksLTQ2LDIwLDE2LDM0LAorLTQsNDcsNzUsMSwtNDQsCistNTUsLTI0LDcsLTEsOSwKKy00Miw1MCwtOCwtMzYsNDEsCis2OCwwLC00LC0xMCwtMjMsCistMTUsLTUwLDY0LDM2LC05LAorLTI3LDEyLDI1LC0zOCwtNDcsCistMzcsMzIsLTQ5LDUxLC0zNiwKKzIsLTQsNjksLTI2LDE5LAorNyw0NSw2Nyw0NiwxMywKKy02Myw0NiwxNSwtNDcsNCwKKy00MSwxMywtNiw1LC0yMSwKKzM3LDI2LC01NSwtNywzMywKKy0xLC0yOCwxMCwtMTcsLTY0LAorLTE0LDAsLTM2LC0xNyw5MywKKy0zLC05LC02Niw0NCwtMjEsCiszLC0xMiwzOCwtNiwtMTMsCistMTIsMTksMTMsNDMsLTQzLAorLTEwLC0xMiw2LC01LDksCistNDksMzIsLTUsMiw0LAorNSwxNSwtMTYsMTAsLTIxLAorOCwtNjIsLTgsNjQsOCwKKzc5LC0xLC02NiwtNDksLTE4LAorNSw0MCwtNSwtMzAsLTQ1LAorMSwtNiwyMSwtMzIsOTMsCistMTgsLTMwLC0yMSwzMiwyMSwKKy0xOCwyMiw4LDUsLTQxLAorLTU0LDgwLDIyLC0xMCwtNywKKy04LC0yMywtNjQsNjYsNTYsCistMTQsLTMwLC00MSwtNDYsLTE0LAorLTI5LC0zNywyNywtMTQsNDIsCistMiwtOSwtMjksMzQsMTQsCiszMywtMTQsMjIsNCwxMCwKKzI2LDI2LDI4LDMyLDIzLAorLTcyLC0zMiwzLDAsLTE0LAorMzUsLTQyLC03OCwtMzIsNiwKKzI5LC0xOCwtNDUsLTUsNywKKy0zMywtNDUsLTMsLTIyLC0zNCwKKzgsLTgsNCwtNTEsLTI1LAorLTksNTksLTc4LDIxLC01LAorLTI1LC00OCw2NiwtMTUsLTE3LAorLTI0LC00OSwtMTMsMjUsLTIzLAorLTY0LC02LDQwLC0yNCwtMTksCistMTEsNTcsLTMzLC04LDEsCisxMCwtNTIsLTU0LDI4LDM5LAorNDksMzQsLTExLC02MSwtNDEsCistNDMsMTAsMTUsLTE1LDUxLAorMzAsMTUsLTUxLDMyLC0zNCwKKy0yLC0zNCwxNCwxOCwxNiwKKzEsMSwtMywtMywxLAorMSwtMTgsNiwxNiw0OCwKKzEyLC01LC00Miw3LDM2LAorNDgsNywtMjAsLTEwLDcsCisxMiwyLDU0LDM5LC0zOCwKKzM3LDU0LDQsLTExLC04LAorLTQ2LC0xMCw1LC0xMCwtMzQsCis0NiwtMTIsMjksLTM3LDM5LAorMzYsLTExLDI0LDU2LDE3LAorMTQsMjAsMjUsMCwtMjUsCistMjgsNTUsLTcsLTUsMjcsCiszLDksLTI2LC04LDYsCistMjQsLTEwLC0zMCwtMzEsLTM0LAorMTgsNCwyMiwyMSw0MCwKKy0xLC0yOSwtMzcsLTgsLTIxLAorOTIsLTI5LDExLC0zLDExLAorNzMsMjMsMjIsNyw0LAorLTQ0LC05LC0xMSwyMSwtMTMsCisxMSw5LC03OCwtMSw0NywKKzExNCwtMTIsLTM3LC0xOSwtNSwKKy0xMSwtMjIsMTksMTIsLTMwLAorNywzOCw0NSwtMjEsLTgsCistOSw1NSwtNDUsNTYsLTIxLAorNywxNyw0NiwtNTcsLTg3LAorLTYsMjcsMzEsMzEsNywKKy01NiwtMTIsNDYsMjEsLTUsCistMTIsMzYsMywzLC0yMSwKKzQzLDE5LDEyLC03LDksCistMTQsMCwtOSwtMzMsLTkxLAorNywyNiwzLC0xMSw2NCwKKzgzLC0zMSwtNDYsMjUsMiwKKzksNSwyLDIsLTEsCisyMCwtMTcsMTAsLTUsLTI3LAorLTgsMjAsOCwtMTksMTYsCistMjEsLTEzLC0zMSw1LDUsCis0MiwyNCw5LDM0LC0yMCwKKzI4LC02MSwyMiwxMSwtMzksCis2NCwtMjAsLTEsLTMwLC05LAorLTIwLDI0LC0yNSwtMjQsLTI5LAorMjIsLTYwLDYsLTUsNDEsCistOSwtODcsMTQsMzQsMTUsCistNTcsNTIsNjksMTUsLTMsCistMTAyLDU4LDE2LDMsNiwKKzYwLC03NSwtMzIsMjYsNywKKy01NywtMjcsLTMyLC0yNCwtMjEsCistMjksLTE2LDYyLC00NiwzMSwKKzMwLC0yNywtMTUsNywxNX07CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9leGNfNV82NF90YWJsZS5jIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZXhjXzVfNjRfdGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzY2ZDUxCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZXhjXzVfNjRfdGFibGUuYwpAQCAtMCwwICsxLDk4IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVhbi1NYXJjIFZhbGluIAorICAgRmlsZTogZXhjXzVfNjRfdGFibGUuYworICAgQ29kZWJvb2sgZm9yIGV4Y2l0YXRpb24gaW4gbmFycm93YmFuZCBDRUxQIG1vZGUgKDk2MDAgYnBzKQorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKworY29uc3Qgc2lnbmVkIGNoYXIgZXhjXzVfNjRfdGFibGVbMzIwXT17CisxLDUsLTE1LDQ5LC02NiwKKy00OCwtNCw1MCwtNDQsNywKKzM3LDE2LC0xOCwyNSwtMjYsCistMjYsLTE1LDE5LDE5LC0yNywKKy00NywyOCw1Nyw1LC0xNywKKy0zMiwtNDEsNjgsMjEsLTIsCis2NCw1Niw4LC0xNiwtMTMsCistMjYsLTksLTE2LDExLDYsCistMzksMjUsLTE5LDIyLC0zMSwKKzIwLC00NSw1NSwtNDMsMTAsCistMTYsNDcsLTQwLDQwLC0yMCwKKy01MSwzLC0xNywtMTQsLTE1LAorLTI0LDUzLC0yMCwtNDYsNDYsCisyNywtNjgsMzIsMywtMTgsCistNSw5LC0zMSwxNiwtOSwKKy0xMCwtMSwtMjMsNDgsOTUsCis0NywyNSwtNDEsLTMyLC0zLAorMTUsLTI1LC01NSwzNiw0MSwKKy0yNywyMCw1LDEzLDE0LAorLTIyLDUsMiwtMjMsMTgsCis0NiwtMTUsMTcsLTE4LC0zNCwKKy01LC04LDI3LC01NSw3MywKKzE2LDIsLTEsLTE3LDQwLAorLTc4LDMzLDAsMiwxOSwKKzQsNTMsLTE2LC0xNSwtMTYsCistMjgsLTMsLTEzLDQ5LDgsCistNywtMjksMjcsLTEzLDMyLAorMjAsMzIsLTYxLDE2LDE0LAorNDEsNDQsNDAsMjQsMjAsCis3LDQsNDgsLTYwLC03NywKKzE3LC02LC00OCw2NSwtMTUsCiszMiwtMzAsLTcxLC0xMCwtMywKKy02LDEwLC0yLC03LC0yOSwKKy01Niw2NywtMzAsNywtNSwKKzg2LC02LC0xMCwwLDUsCistMzEsNjAsMzQsLTM4LC0zLAorMjQsMTAsLTIsMzAsMjMsCisyNCwtNDEsMTIsNzAsLTQzLAorMTUsLTE3LDYsMTMsMTYsCistMTMsOCwzMCwtMTUsLTgsCis1LDIzLC0zNCwtOTgsLTQsCistMTMsMTMsLTQ4LC0zMSw3MCwKKzEyLDMxLDI1LDI0LC0yNCwKKzI2LC03LDMzLC0xNiw4LAorNSwtMTEsLTE0LC04LC02NSwKKzEzLDEwLC0yLC05LDAsCistMywtNjgsNSwzNSw3LAorMCwtMzEsLTEsLTE3LC05LAorLTksMTYsLTM3LC0xOCwtMSwKKzY5LC00OCwtMjgsMjIsLTIxLAorLTExLDUsNDksNTUsMjMsCistODYsLTM2LDE2LDIsMTMsCis2MywtNTEsMzAsLTExLDEzLAorMjQsLTE4LC02LDE0LC0xOSwKKzEsNDEsOSwtNSwyNywKKy0zNiwtNDQsLTM0LC0zNywtMjEsCistMjYsMzEsLTM5LDE1LDQzLAorNSwtOCwyOSwyMCwtOCwKKy0yMCwtNTIsLTI4LC0xLDEzLAorMjYsLTM0LC0xMCwtOSwyNywKKy04LDgsMjcsLTY2LDQsCisxMiwtMjIsNDksMTAsLTc3LAorMzIsLTE4LDMsLTM4LDEyLAorLTMsLTEsMiwyLDB9OwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZXhjXzhfMTI4X3RhYmxlLmMgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9leGNfOF8xMjhfdGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2VlNjRiCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZXhjXzhfMTI4X3RhYmxlLmMKQEAgLTAsMCArMSwxNjIgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiBKZWFuLU1hcmMgVmFsaW4gCisgICBGaWxlOiBleGNfOF8xMjhfdGFibGUuYworICAgQ29kZWJvb2sgZm9yIGV4Y2l0YXRpb24gaW4gbmFycm93YmFuZCBDRUxQIG1vZGUgKDcwMDAgYnBzKQorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKworY29uc3Qgc2lnbmVkIGNoYXIgZXhjXzhfMTI4X3RhYmxlWzEwMjRdID0geworLTE0LDksMTMsLTMyLDIsLTEwLDMxLC0xMCwKKy04LC04LDYsLTQsLTEsMTAsLTY0LDIzLAorNiwyMCwxMyw2LDgsLTIyLDE2LDM0LAorNyw0MiwtNDksLTI4LDUsMjYsNCwtMTUsCis0MSwzNCw0MSwzMiwzMywyNCwyMywxNCwKKzgsNDAsMzQsNCwtMjQsLTQxLC0xOSwtMTUsCisxMywtMTMsMzMsLTU0LDI0LDI3LC00NCwzMywKKzI3LC0xNSwtMTUsMjQsLTE5LDE0LC0zNiwxNCwKKy05LDI0LC0xMiwtNCwzNywtNSwxNiwtMzQsCis1LDEwLDMzLC0xNSwtNTQsLTE2LDEyLDI1LAorMTIsMSwyLDAsMywtMSwtNCwtNCwKKzExLDIsLTU2LDU0LDI3LC0yMCwxMywtNiwKKy00NiwtNDEsLTMzLC0xMSwtNSw3LDEyLDE0LAorLTE0LC01LDgsMjAsNiwzLDQsLTgsCistNSwtNDIsMTEsOCwtMTQsMjUsLTIsMiwKKzEzLDExLC0yMiwzOSwtOSw5LDUsLTQ1LAorLTksNywtOSwxMiwtNywzNCwtMTcsLTEwMiwKKzcsMiwtNDIsMTgsMzUsLTksLTM0LDExLAorLTUsLTIsMywyMiw0NiwtNTIsLTI1LC05LAorLTk0LDgsMTEsLTUsLTUsLTUsNCwtNywKKy0zNSwtNyw1NCw1LC0zMiwzLDI0LC05LAorLTIyLDgsNjUsMzcsLTEsLTEyLC0yMywtNiwKKy05LC0yOCw1NSwtMzMsMTQsLTMsMiwxOCwKKy02MCw0MSwtMTcsOCwtMTYsMTcsLTExLDAsCistMTEsMjksLTI4LDM3LDksLTUzLDMzLC0xNCwKKy05LDcsLTI1LC03LC0xMSwyNiwtMzIsLTgsCisyNCwtMjEsMjIsLTE5LDE5LC0xMCwyOSwtMTQsCiswLDAsMCwwLDAsMCwwLDAsCistNSwtNTIsMTAsNDEsNiwtMzAsLTQsMTYsCiszMiwyMiwtMjcsLTIyLDMyLC0zLC0yOCwtMywKKzMsLTM1LDYsMTcsMjMsMjEsOCwyLAorNCwtNDUsLTE3LDE0LDIzLC00LC0zMSwtMTEsCistMywxNCwxLDE5LC0xMSwyLDYxLC04LAorOSwtMTIsNywtMTAsMTIsLTMsLTI0LDk5LAorLTQ4LDIzLDUwLC0zNywtNSwtMjMsMCw4LAorLTE0LDM1LC02NCwtNSw0NiwtMjUsMTMsLTEsCistNDksLTE5LC0xNSw5LDM0LDUwLDI1LDExLAorLTYsLTksLTE2LC0yMCwtMzIsLTMzLC0zMiwtMjcsCisxMCwtOCwxMiwtMTUsNTYsLTE0LC0zMiwzMywKKzMsLTksMSw2NSwtOSwtOSwtMTAsLTIsCistNiwtMjMsOSwxNywzLC0yOCwxMywtMzIsCis0LC0yLC0xMCw0LC0xNiw3NiwxMiwtNTIsCis2LDEzLDMzLC02LDQsLTE0LC05LC0zLAorMSwtMTUsLTE2LDI4LDEsLTE1LDExLDE2LAorOSw0LC0yMSwtMzcsLTQwLC02LDIyLDEyLAorLTE1LC0yMywtMTQsLTE3LC0xNiwtOSwtMTAsLTksCisxMywtMzksNDEsNSwtOSwxNiwtMzgsMjUsCis0NiwtNDcsNCw0OSwtMTQsMTcsLTIsNiwKKzE4LDUsLTYsLTMzLC0yMiw0NCw1MCwtMiwKKzEsMywtNiw3LDcsLTMsLTIxLDM4LAorLTE4LDM0LC0xNCwtNDEsNjAsLTEzLDYsMTYsCistMjQsMzUsMTksLTEzLC0zNiwyNCwzLC0xNywKKy0xNCwtMTAsMzYsNDQsLTQ0LC0yOSwtMywzLAorLTU0LC04LDEyLDU1LDI2LDQsLTIsLTUsCisyLC0xMSwyMiwtMjMsMiwyMiwxLC0yNSwKKy0zOSw2NiwtNDksMjEsLTgsLTIsMTAsLTE0LAorLTYwLDI1LDYsMTAsMjcsLTI1LDE2LDUsCistMiwtOSwyNiwtMTMsLTIwLDU4LC0yLDcsCis1MiwtOSwyLDUsLTQsLTE1LDIzLC0xLAorLTM4LDIzLDgsMjcsLTYsMCwtMjcsLTcsCiszOSwtMTAsLTE0LDI2LDExLC00NSwtMTIsOSwKKy01LDM0LDQsLTM1LDEwLDQzLC0yMiwtMTEsCis1NiwtNywyMCwxLDEwLDEsLTI2LDksCis5NCwxMSwtMjcsLTE0LC0xMywxLC0xMSwwLAorMTQsLTUsLTYsLTEwLC00LC0xNSwtOCwtNDEsCisyMSwtNSwxLC0yOCwtOCwyMiwtOSwzMywKKy0yMywtNCwtNCwtMTIsMzksNCwtNywzLAorLTYwLDgwLDgsLTE3LDIsLTYsMTIsLTUsCisxLDksMTUsMjcsMzEsMzAsMjcsMjMsCis2MSw0NywyNiwxMCwtNSwtOCwtMTIsLTEzLAorNSwtMTgsMjUsLTE1LC00LC0xNSwtMTEsMTIsCistMiwtMiwtMTYsLTIsLTYsMjQsMTIsMTEsCistNCw5LDEsLTksMTQsLTQ1LDU3LDEyLAorMjAsLTM1LDI2LDExLC02NCwzMiwtMTAsLTEwLAorNDIsLTQsLTksLTE2LDMyLDI0LDcsMTAsCis1MiwtMTEsLTU3LDI5LDAsOCwwLC02LAorMTcsLTE3LC01NiwtNDAsNywyMCwxOCwxMiwKKy02LDE2LDUsNywtMSw5LDEsMTAsCisyOSwxMiwxNiwxMywtMiwyMyw3LDksCistMywtNCwtNSwxOCwtNjQsMTMsNTUsLTI1LAorOSwtOSwyNCwxNCwtMjUsMTUsLTExLC00MCwKKy0zMCwzNywxLC0xOSwyMiwtNSwtMzEsMTMsCistMiwwLDcsLTQsMTYsLTY3LDEyLDY2LAorLTM2LDI0LC04LDE4LC0xNSwtMjMsMTksMCwKKy00NSwtNyw0LDMsLTEzLDEzLDM1LDUsCisxMywzMywxMCwyNywyMywwLC03LC0xMSwKKzQzLC03NCwzNiwtMTIsMiw1LC04LDYsCistMzMsMTEsLTE2LC0xNCwtNSwtNywtMywxNywKKy0zNCwyNywtMTYsMTEsLTksMTUsMzMsLTMxLAorOCwtMTYsNywtNiwtNyw2MywtNTUsLTE3LAorMTEsLTEsMjAsLTQ2LDM0LC0zMCw2LDksCisxOSwyOCwtOSw1LC0yNCwtOCwtMjMsLTIsCiszMSwtMTksLTE2LC01LC0xNSwtMTgsMCwyNiwKKzE4LDM3LC01LC0xNSwtMiwxNyw1LC0yNywKKzIxLC0zMyw0NCwxMiwtMjcsLTksMTcsMTEsCisyNSwtMjEsLTMxLC03LDEzLDMzLC04LC0yNSwKKy03LDcsLTEwLDQsLTYsLTksNDgsLTgyLAorLTIzLC04LDYsMTEsLTIzLDMsLTMsNDksCistMjksMjUsMzEsNCwxNCwxNiw5LC00LAorLTE4LDEwLC0yNiwzLDUsLTQ0LC05LDksCistNDcsLTU1LDE1LDksMjgsMSw0LC0zLAorNDYsNiwtNiwtMzgsLTI5LC0zMSwtMTUsLTYsCiszLDAsMTQsLTYsOCwtNTQsLTUwLDMzLAorLTUsMSwtMTQsMzMsLTQ4LDI2LC00LC01LAorLTMsLTUsLTMsLTUsLTI4LC0yMiw3Nyw1NSwKKy0xLDIsMTAsMTAsLTksLTE0LC02NiwtNDksCisxMSwtMzYsLTYsLTIwLDEwLC0xMCwxNiwxMiwKKzQsLTEsLTE2LDQ1LC00NCwtNTAsMzEsLTIsCisyNSw0MiwyMywtMzIsLTIyLDAsMTEsMjAsCistNDAsLTM1LC00MCwtMzYsLTMyLC0yNiwtMjEsLTEzLAorNTIsLTIyLDYsLTI0LC0yMCwxNywtNSwtOCwKKzM2LC0yNSwtMTEsMjEsLTI2LDYsMzQsLTgsCis3LDIwLC0zLDUsLTI1LC04LDE4LC01LAorLTksLTQsMSwtOSwyMCwyMCwzOSw0OCwKKy0yNCw5LDUsLTY1LDIyLDI5LDQsMywKKy00MywtMTEsMzIsLTYsOSwxOSwtMjcsLTEwLAorLTQ3LC0xNCwyNCwxMCwtNywtMzYsLTcsLTEsCistNCwtNSwtNSwxNiw1MywyNSwtMjYsLTI5LAorLTQsLTEyLDQ1LC01OCwtMzQsMzMsLTUsMiwKKy0xLDI3LC00OCwzMSwtMTUsMjIsLTUsNCwKKzcsNywtMjUsLTMsMTEsLTIyLDE2LC0xMiwKKzgsLTMsNywtMTEsNDUsMTQsLTczLC0xOSwKKzU2LC00NiwyNCwtMjAsMjgsLTEyLC0yLC0xLAorLTM2LC0zLC0zMywxOSwtNiw3LDIsLTE1LAorNSwtMzEsLTQ1LDgsMzUsMTMsMjAsMCwKKy05LDQ4LC0xMywtNDMsLTMsLTEzLDIsLTUsCis3MiwtNjgsLTI3LDIsMSwtMiwtNyw1LAorMzYsMzMsLTQwLC0xMiwtNCwtNSwyMywxOX07CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9mZnR3cmFwLmMgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9mZnR3cmFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVlMmQwNQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2ZmdHdyYXAuYwpAQCAtMCwwICsxLDI4NyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSmVhbi1NYXJjIFZhbGluIAorICAgRmlsZTogZmZ0d3JhcC5jCisKKyAgIFdyYXBwZXIgZm9yIHZhcmlvdXMgRkZUcyAKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworLyojZGVmaW5lIFVTRV9TTUFMTEZUKi8KKyNkZWZpbmUgVVNFX0tJU1NfRkZUCisKKworI2luY2x1ZGUgIm1pc2MuaCIKKworI2RlZmluZSBNQVhfRkZUX1NJWkUgMjA0OAorCisjaWZkZWYgRklYRURfUE9JTlQKK3N0YXRpYyBpbnQgbWF4aW1pemVfcmFuZ2Uoc3B4X3dvcmQxNl90ICppbiwgc3B4X3dvcmQxNl90ICpvdXQsIHNweF93b3JkMTZfdCBib3VuZCwgaW50IGxlbikKK3sKKyAgIGludCBpLCBzaGlmdDsKKyAgIHNweF93b3JkMTZfdCBtYXhfdmFsID0gMDsKKyAgIGZvciAoaT0wO2k8bGVuO2krKykKKyAgIHsKKyAgICAgIGlmIChpbltpXT5tYXhfdmFsKQorICAgICAgICAgbWF4X3ZhbCA9IGluW2ldOworICAgICAgaWYgKC1pbltpXT5tYXhfdmFsKQorICAgICAgICAgbWF4X3ZhbCA9IC1pbltpXTsKKyAgIH0KKyAgIHNoaWZ0PTA7CisgICB3aGlsZSAobWF4X3ZhbCA8PSAoYm91bmQ+PjEpICYmIG1heF92YWwgIT0gMCkKKyAgIHsKKyAgICAgIG1heF92YWwgPDw9IDE7CisgICAgICBzaGlmdCsrOworICAgfQorICAgZm9yIChpPTA7aTxsZW47aSsrKQorICAgeworICAgICAgb3V0W2ldID0gU0hMMTYoaW5baV0sIHNoaWZ0KTsKKyAgIH0gICAKKyAgIHJldHVybiBzaGlmdDsKK30KKworc3RhdGljIHZvaWQgcmVub3JtX3JhbmdlKHNweF93b3JkMTZfdCAqaW4sIHNweF93b3JkMTZfdCAqb3V0LCBpbnQgc2hpZnQsIGludCBsZW4pCit7CisgICBpbnQgaTsKKyAgIGZvciAoaT0wO2k8bGVuO2krKykKKyAgIHsKKyAgICAgIG91dFtpXSA9IFBTSFIxNihpbltpXSwgc2hpZnQpOworICAgfQorfQorI2VuZGlmCisKKyNpZmRlZiBVU0VfU01BTExGVAorCisjaW5jbHVkZSAic21hbGxmdC5oIgorI2luY2x1ZGUgPG1hdGguaD4KKwordm9pZCAqc3B4X2ZmdF9pbml0KGludCBzaXplKQoreworICAgc3RydWN0IGRyZnRfbG9va3VwICp0YWJsZTsKKyAgIHRhYmxlID0gc3BlZXhfYWxsb2Moc2l6ZW9mKHN0cnVjdCBkcmZ0X2xvb2t1cCkpOworICAgc3B4X2RyZnRfaW5pdCgoc3RydWN0IGRyZnRfbG9va3VwICopdGFibGUsIHNpemUpOworICAgcmV0dXJuICh2b2lkKil0YWJsZTsKK30KKwordm9pZCBzcHhfZmZ0X2Rlc3Ryb3kodm9pZCAqdGFibGUpCit7CisgICBzcHhfZHJmdF9jbGVhcih0YWJsZSk7CisgICBzcGVleF9mcmVlKHRhYmxlKTsKK30KKwordm9pZCBzcHhfZmZ0KHZvaWQgKnRhYmxlLCBmbG9hdCAqaW4sIGZsb2F0ICpvdXQpCit7CisgICBpZiAoaW49PW91dCkKKyAgIHsKKyAgICAgIGludCBpOworICAgICAgZmxvYXQgc2NhbGUgPSAxLi8oKHN0cnVjdCBkcmZ0X2xvb2t1cCAqKXRhYmxlKS0+bjsKKyAgICAgIHNwZWV4X3dhcm5pbmcoIkZGVCBzaG91bGQgbm90IGJlIGRvbmUgaW4tcGxhY2UiKTsKKyAgICAgIGZvciAoaT0wO2k8KChzdHJ1Y3QgZHJmdF9sb29rdXAgKil0YWJsZSktPm47aSsrKQorICAgICAgICAgb3V0W2ldID0gc2NhbGUqaW5baV07CisgICB9IGVsc2UgeworICAgICAgaW50IGk7CisgICAgICBmbG9hdCBzY2FsZSA9IDEuLygoc3RydWN0IGRyZnRfbG9va3VwICopdGFibGUpLT5uOworICAgICAgZm9yIChpPTA7aTwoKHN0cnVjdCBkcmZ0X2xvb2t1cCAqKXRhYmxlKS0+bjtpKyspCisgICAgICAgICBvdXRbaV0gPSBzY2FsZSppbltpXTsKKyAgIH0KKyAgIHNweF9kcmZ0X2ZvcndhcmQoKHN0cnVjdCBkcmZ0X2xvb2t1cCAqKXRhYmxlLCBvdXQpOworfQorCit2b2lkIHNweF9pZmZ0KHZvaWQgKnRhYmxlLCBmbG9hdCAqaW4sIGZsb2F0ICpvdXQpCit7CisgICBpZiAoaW49PW91dCkKKyAgIHsKKyAgICAgIHNwZWV4X3dhcm5pbmcoIkZGVCBzaG91bGQgbm90IGJlIGRvbmUgaW4tcGxhY2UiKTsKKyAgIH0gZWxzZSB7CisgICAgICBpbnQgaTsKKyAgICAgIGZvciAoaT0wO2k8KChzdHJ1Y3QgZHJmdF9sb29rdXAgKil0YWJsZSktPm47aSsrKQorICAgICAgICAgb3V0W2ldID0gaW5baV07CisgICB9CisgICBzcHhfZHJmdF9iYWNrd2FyZCgoc3RydWN0IGRyZnRfbG9va3VwICopdGFibGUsIG91dCk7Cit9CisKKyNlbGlmIGRlZmluZWQoVVNFX0tJU1NfRkZUKQorCisjaW5jbHVkZSAia2lzc19mZnRyLmgiCisjaW5jbHVkZSAia2lzc19mZnQuaCIKKworc3RydWN0IGtpc3NfY29uZmlnIHsKKyAgIGtpc3NfZmZ0cl9jZmcgZm9yd2FyZDsKKyAgIGtpc3NfZmZ0cl9jZmcgYmFja3dhcmQ7CisgICBpbnQgTjsKK307CisKK3ZvaWQgKnNweF9mZnRfaW5pdChpbnQgc2l6ZSkKK3sKKyAgIHN0cnVjdCBraXNzX2NvbmZpZyAqdGFibGU7CisgICB0YWJsZSA9IChzdHJ1Y3Qga2lzc19jb25maWcqKXNwZWV4X2FsbG9jKHNpemVvZihzdHJ1Y3Qga2lzc19jb25maWcpKTsKKyAgIHRhYmxlLT5mb3J3YXJkID0ga2lzc19mZnRyX2FsbG9jKHNpemUsMCxOVUxMLE5VTEwpOworICAgdGFibGUtPmJhY2t3YXJkID0ga2lzc19mZnRyX2FsbG9jKHNpemUsMSxOVUxMLE5VTEwpOworICAgdGFibGUtPk4gPSBzaXplOworICAgcmV0dXJuIHRhYmxlOworfQorCit2b2lkIHNweF9mZnRfZGVzdHJveSh2b2lkICp0YWJsZSkKK3sKKyAgIHN0cnVjdCBraXNzX2NvbmZpZyAqdCA9IChzdHJ1Y3Qga2lzc19jb25maWcgKil0YWJsZTsKKyAgIGtpc3NfZmZ0cl9mcmVlKHQtPmZvcndhcmQpOworICAga2lzc19mZnRyX2ZyZWUodC0+YmFja3dhcmQpOworICAgc3BlZXhfZnJlZSh0YWJsZSk7Cit9CisKKyNpZmRlZiBGSVhFRF9QT0lOVAorCit2b2lkIHNweF9mZnQodm9pZCAqdGFibGUsIHNweF93b3JkMTZfdCAqaW4sIHNweF93b3JkMTZfdCAqb3V0KQoreworICAgaW50IHNoaWZ0OworICAgc3RydWN0IGtpc3NfY29uZmlnICp0ID0gKHN0cnVjdCBraXNzX2NvbmZpZyAqKXRhYmxlOworICAgc2hpZnQgPSBtYXhpbWl6ZV9yYW5nZShpbiwgaW4sIDMyMDAwLCB0LT5OKTsKKyAgIGtpc3NfZmZ0cjIodC0+Zm9yd2FyZCwgaW4sIG91dCk7CisgICByZW5vcm1fcmFuZ2UoaW4sIGluLCBzaGlmdCwgdC0+Tik7CisgICByZW5vcm1fcmFuZ2Uob3V0LCBvdXQsIHNoaWZ0LCB0LT5OKTsKK30KKworI2Vsc2UKKwordm9pZCBzcHhfZmZ0KHZvaWQgKnRhYmxlLCBzcHhfd29yZDE2X3QgKmluLCBzcHhfd29yZDE2X3QgKm91dCkKK3sKKyAgIGludCBpOworICAgZmxvYXQgc2NhbGU7CisgICBzdHJ1Y3Qga2lzc19jb25maWcgKnQgPSAoc3RydWN0IGtpc3NfY29uZmlnICopdGFibGU7CisgICBzY2FsZSA9IDEuL3QtPk47CisgICBraXNzX2ZmdHIyKHQtPmZvcndhcmQsIGluLCBvdXQpOworICAgZm9yIChpPTA7aTx0LT5OO2krKykKKyAgICAgIG91dFtpXSAqPSBzY2FsZTsKK30KKyNlbmRpZgorCit2b2lkIHNweF9pZmZ0KHZvaWQgKnRhYmxlLCBzcHhfd29yZDE2X3QgKmluLCBzcHhfd29yZDE2X3QgKm91dCkKK3sKKyAgIHN0cnVjdCBraXNzX2NvbmZpZyAqdCA9IChzdHJ1Y3Qga2lzc19jb25maWcgKil0YWJsZTsKKyAgIGtpc3NfZmZ0cmkyKHQtPmJhY2t3YXJkLCBpbiwgb3V0KTsKK30KKworCisjZWxzZQorCisjZXJyb3IgTm8gb3RoZXIgRkZUIGltcGxlbWVudGVkCisKKyNlbmRpZgorCisKKyNpZmRlZiBGSVhFRF9QT0lOVAorLyojaW5jbHVkZSAic21hbGxmdC5oIiovCisKKwordm9pZCBzcHhfZmZ0X2Zsb2F0KHZvaWQgKnRhYmxlLCBmbG9hdCAqaW4sIGZsb2F0ICpvdXQpCit7CisgICBpbnQgaTsKKyNpZmRlZiBVU0VfU01BTExGVAorICAgaW50IE4gPSAoKHN0cnVjdCBkcmZ0X2xvb2t1cCAqKXRhYmxlKS0+bjsKKyNlbGlmIGRlZmluZWQoVVNFX0tJU1NfRkZUKQorICAgaW50IE4gPSAoKHN0cnVjdCBraXNzX2NvbmZpZyAqKXRhYmxlKS0+TjsKKyNlbHNlCisjZW5kaWYKKyNpZmRlZiBWQVJfQVJSQVlTCisgICBzcHhfd29yZDE2X3QgX2luW05dOworICAgc3B4X3dvcmQxNl90IF9vdXRbTl07CisjZWxzZQorICAgc3B4X3dvcmQxNl90IF9pbltNQVhfRkZUX1NJWkVdOworICAgc3B4X3dvcmQxNl90IF9vdXRbTUFYX0ZGVF9TSVpFXTsKKyNlbmRpZgorICAgZm9yIChpPTA7aTxOO2krKykKKyAgICAgIF9pbltpXSA9IChpbnQpZmxvb3IoLjUraW5baV0pOworICAgc3B4X2ZmdCh0YWJsZSwgX2luLCBfb3V0KTsKKyAgIGZvciAoaT0wO2k8TjtpKyspCisgICAgICBvdXRbaV0gPSBfb3V0W2ldOworI2lmIDAKKyAgIGlmICghZml4ZWRfcG9pbnQpCisgICB7CisgICAgICBmbG9hdCBzY2FsZTsKKyAgICAgIHN0cnVjdCBkcmZ0X2xvb2t1cCB0OworICAgICAgc3B4X2RyZnRfaW5pdCgmdCwgKChzdHJ1Y3Qga2lzc19jb25maWcgKil0YWJsZSktPk4pOworICAgICAgc2NhbGUgPSAxLi8oKHN0cnVjdCBraXNzX2NvbmZpZyAqKXRhYmxlKS0+TjsKKyAgICAgIGZvciAoaT0wO2k8KChzdHJ1Y3Qga2lzc19jb25maWcgKil0YWJsZSktPk47aSsrKQorICAgICAgICAgb3V0W2ldID0gc2NhbGUqaW5baV07CisgICAgICBzcHhfZHJmdF9mb3J3YXJkKCZ0LCBvdXQpOworICAgICAgc3B4X2RyZnRfY2xlYXIoJnQpOworICAgfQorI2VuZGlmCit9CisKK3ZvaWQgc3B4X2lmZnRfZmxvYXQodm9pZCAqdGFibGUsIGZsb2F0ICppbiwgZmxvYXQgKm91dCkKK3sKKyAgIGludCBpOworI2lmZGVmIFVTRV9TTUFMTEZUCisgICBpbnQgTiA9ICgoc3RydWN0IGRyZnRfbG9va3VwICopdGFibGUpLT5uOworI2VsaWYgZGVmaW5lZChVU0VfS0lTU19GRlQpCisgICBpbnQgTiA9ICgoc3RydWN0IGtpc3NfY29uZmlnICopdGFibGUpLT5OOworI2Vsc2UKKyNlbmRpZgorI2lmZGVmIFZBUl9BUlJBWVMKKyAgIHNweF93b3JkMTZfdCBfaW5bTl07CisgICBzcHhfd29yZDE2X3QgX291dFtOXTsKKyNlbHNlCisgICBzcHhfd29yZDE2X3QgX2luW01BWF9GRlRfU0laRV07CisgICBzcHhfd29yZDE2X3QgX291dFtNQVhfRkZUX1NJWkVdOworI2VuZGlmCisgICBmb3IgKGk9MDtpPE47aSsrKQorICAgICAgX2luW2ldID0gKGludClmbG9vciguNStpbltpXSk7CisgICBzcHhfaWZmdCh0YWJsZSwgX2luLCBfb3V0KTsKKyAgIGZvciAoaT0wO2k8TjtpKyspCisgICAgICBvdXRbaV0gPSBfb3V0W2ldOworI2lmIDAKKyAgIGlmICghZml4ZWRfcG9pbnQpCisgICB7CisgICAgICBpbnQgaTsKKyAgICAgIHN0cnVjdCBkcmZ0X2xvb2t1cCB0OworICAgICAgc3B4X2RyZnRfaW5pdCgmdCwgKChzdHJ1Y3Qga2lzc19jb25maWcgKil0YWJsZSktPk4pOworICAgICAgZm9yIChpPTA7aTwoKHN0cnVjdCBraXNzX2NvbmZpZyAqKXRhYmxlKS0+TjtpKyspCisgICAgICAgICBvdXRbaV0gPSBpbltpXTsKKyAgICAgIHNweF9kcmZ0X2JhY2t3YXJkKCZ0LCBvdXQpOworICAgICAgc3B4X2RyZnRfY2xlYXIoJnQpOworICAgfQorI2VuZGlmCit9CisKKyNlbHNlCisKK3ZvaWQgc3B4X2ZmdF9mbG9hdCh2b2lkICp0YWJsZSwgZmxvYXQgKmluLCBmbG9hdCAqb3V0KQoreworICAgc3B4X2ZmdCh0YWJsZSwgaW4sIG91dCk7Cit9Cit2b2lkIHNweF9pZmZ0X2Zsb2F0KHZvaWQgKnRhYmxlLCBmbG9hdCAqaW4sIGZsb2F0ICpvdXQpCit7CisgICBzcHhfaWZmdCh0YWJsZSwgaW4sIG91dCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZmZ0d3JhcC5oIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZmZ0d3JhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNmIzOGUKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9mZnR3cmFwLmgKQEAgLTAsMCArMSw1OCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA1IEplYW4tTWFyYyBWYWxpbiAKKyAgIEZpbGU6IGZmdHdyYXAuaAorCisgICBXcmFwcGVyIGZvciB2YXJpb3VzIEZGVHMgCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjaWZuZGVmIEZGVFdSQVBfSAorI2RlZmluZSBGRlRXUkFQX0gKKworI2luY2x1ZGUgIm1pc2MuaCIKKworLyoqIENvbXB1dGUgdGFibGVzIGZvciBhbiBGRlQgKi8KK3ZvaWQgKnNweF9mZnRfaW5pdChpbnQgc2l6ZSk7CisKKy8qKiBEZXN0cm95IHRhYmxlcyBmb3IgYW4gRkZUICovCit2b2lkIHNweF9mZnRfZGVzdHJveSh2b2lkICp0YWJsZSk7CisKKy8qKiBGb3J3YXJkIChyZWFsIHRvIGhhbGYtY29tcGxleCkgdHJhbnNmb3JtICovCit2b2lkIHNweF9mZnQodm9pZCAqdGFibGUsIHNweF93b3JkMTZfdCAqaW4sIHNweF93b3JkMTZfdCAqb3V0KTsKKworLyoqIEJhY2t3YXJkIChoYWxmLWNvbXBsZXggdG8gcmVhbCkgdHJhbnNmb3JtICovCit2b2lkIHNweF9pZmZ0KHZvaWQgKnRhYmxlLCBzcHhfd29yZDE2X3QgKmluLCBzcHhfd29yZDE2X3QgKm91dCk7CisKKy8qKiBGb3J3YXJkIChyZWFsIHRvIGhhbGYtY29tcGxleCkgdHJhbnNmb3JtIG9mIGZsb2F0IGRhdGEgKi8KK3ZvaWQgc3B4X2ZmdF9mbG9hdCh2b2lkICp0YWJsZSwgZmxvYXQgKmluLCBmbG9hdCAqb3V0KTsKKworLyoqIEJhY2t3YXJkIChoYWxmLWNvbXBsZXggdG8gcmVhbCkgdHJhbnNmb3JtIG9mIGZsb2F0IGRhdGEgKi8KK3ZvaWQgc3B4X2lmZnRfZmxvYXQodm9pZCAqdGFibGUsIGZsb2F0ICppbiwgZmxvYXQgKm91dCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZmlsdGVyYmFuay5jIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZmlsdGVyYmFuay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4N2Q1ZWUKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9maWx0ZXJiYW5rLmMKQEAgLTAsMCArMSwyMjYgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNiBKZWFuLU1hcmMgVmFsaW4gKi8KKy8qKgorICAgQGZpbGUgZmlsdGVyYmFuay5jCisgICBAYnJpZWYgQ29udmVydGluZyBiZXR3ZWVuIHBzZCBhbmQgZmlsdGVyYmFuaworICovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgICBtZXQ6CisKKyAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICAgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICAgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAgIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgICBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiZmlsdGVyYmFuay5oIgorI2luY2x1ZGUgIm1pc2MuaCIKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSAibWF0aF9hcHByb3guaCIKKyAgICAgIAorI2lmZGVmIEZJWEVEX1BPSU5UCisKKyNkZWZpbmUgdG9CQVJLKG4pICAgKE1VTFQxNl8xNigyNjgyOSxzcHhfYXRhbihTSFIzMihNVUxUMTZfMTYoOTcsbiksMikpKSArIE1VTFQxNl8xNig0NTg4LHNweF9hdGFuKE1VTFQxNl8zMl9RMTUoMjAsTVVMVDE2XzE2KG4sbikpKSkgKyBNVUxUMTZfMTYoMzM1NSxuKSkKKyAgICAgIAorI2Vsc2UKKyNkZWZpbmUgdG9CQVJLKG4pICAgKDEzLjFmKmF0YW4oLjAwMDc0ZioobikpKzIuMjRmKmF0YW4oKG4pKihuKSoxLjg1ZS04ZikrMWUtNGYqKG4pKQorI2VuZGlmCisgICAgICAgCisjZGVmaW5lIHRvTUVMKG4pICAgICgyNTk1LmYqbG9nMTAoMS5mKyhuKS83MDAuZikpCisKK0ZpbHRlckJhbmsgKmZpbHRlcmJhbmtfbmV3KGludCBiYW5rcywgc3B4X3dvcmQzMl90IHNhbXBsaW5nLCBpbnQgbGVuLCBpbnQgdHlwZSkKK3sKKyAgIEZpbHRlckJhbmsgKmJhbms7CisgICBzcHhfd29yZDMyX3QgZGY7CisgICBzcHhfd29yZDMyX3QgbWF4X21lbCwgbWVsX2ludGVydmFsOworICAgaW50IGk7CisgICBpbnQgaWQxOworICAgaW50IGlkMjsKKyAgIGRmID0gRElWMzIoU0hMMzIoc2FtcGxpbmcsMTUpLE1VTFQxNl8xNigyLGxlbikpOworICAgbWF4X21lbCA9IHRvQkFSSyhFWFRSQUNUMTYoTVVMVDE2XzE2X1ExNShRQ09OU1QxNiguNWYsMTUpLHNhbXBsaW5nKSkpOworICAgbWVsX2ludGVydmFsID0gUERJVjMyKG1heF9tZWwsYmFua3MtMSk7CisgICAKKyAgIGJhbmsgPSAoRmlsdGVyQmFuayopc3BlZXhfYWxsb2Moc2l6ZW9mKEZpbHRlckJhbmspKTsKKyAgIGJhbmstPm5iX2JhbmtzID0gYmFua3M7CisgICBiYW5rLT5sZW4gPSBsZW47CisgICBiYW5rLT5iYW5rX2xlZnQgPSAoaW50KilzcGVleF9hbGxvYyhsZW4qc2l6ZW9mKGludCkpOworICAgYmFuay0+YmFua19yaWdodCA9IChpbnQqKXNwZWV4X2FsbG9jKGxlbipzaXplb2YoaW50KSk7CisgICBiYW5rLT5maWx0ZXJfbGVmdCA9IChzcHhfd29yZDE2X3QqKXNwZWV4X2FsbG9jKGxlbipzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisgICBiYW5rLT5maWx0ZXJfcmlnaHQgPSAoc3B4X3dvcmQxNl90KilzcGVleF9hbGxvYyhsZW4qc2l6ZW9mKHNweF93b3JkMTZfdCkpOworICAgLyogVGhpbmsgSSBjYW4gc2FmZWx5IGRpc2FibGUgbm9ybWFsaXNhdGlvbiB0aGF0IGZvciBmaXhlZC1wb2ludCAoYW5kIHByb2JhYmx5IGZsb2F0IGFzIHdlbGwpICovCisjaWZuZGVmIEZJWEVEX1BPSU5UCisgICBiYW5rLT5zY2FsaW5nID0gKGZsb2F0KilzcGVleF9hbGxvYyhiYW5rcypzaXplb2YoZmxvYXQpKTsKKyNlbmRpZgorICAgZm9yIChpPTA7aTxsZW47aSsrKQorICAgeworICAgICAgc3B4X3dvcmQxNl90IGN1cnJfZnJlcTsKKyAgICAgIHNweF93b3JkMzJfdCBtZWw7CisgICAgICBzcHhfd29yZDE2X3QgdmFsOworICAgICAgY3Vycl9mcmVxID0gRVhUUkFDVDE2KE1VTFQxNl8zMl9QMTUoaSxkZikpOworICAgICAgbWVsID0gdG9CQVJLKGN1cnJfZnJlcSk7CisgICAgICBpZiAobWVsID4gbWF4X21lbCkKKyAgICAgICAgIGJyZWFrOworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICBpZDEgPSBESVYzMihtZWwsbWVsX2ludGVydmFsKTsKKyNlbHNlICAgICAgCisgICAgICBpZDEgPSAoaW50KShmbG9vcihtZWwvbWVsX2ludGVydmFsKSk7CisjZW5kaWYKKyAgICAgIGlmIChpZDE+YmFua3MtMikKKyAgICAgIHsKKyAgICAgICAgIGlkMSA9IGJhbmtzLTI7CisgICAgICAgICB2YWwgPSBRMTVfT05FOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgIHZhbCA9IERJVjMyXzE2KG1lbCAtIGlkMSptZWxfaW50ZXJ2YWwsRVhUUkFDVDE2KFBTSFIzMihtZWxfaW50ZXJ2YWwsMTUpKSk7CisgICAgICB9CisgICAgICBpZDIgPSBpZDErMTsKKyAgICAgIGJhbmstPmJhbmtfbGVmdFtpXSA9IGlkMTsKKyAgICAgIGJhbmstPmZpbHRlcl9sZWZ0W2ldID0gU1VCMTYoUTE1X09ORSx2YWwpOworICAgICAgYmFuay0+YmFua19yaWdodFtpXSA9IGlkMjsKKyAgICAgIGJhbmstPmZpbHRlcl9yaWdodFtpXSA9IHZhbDsKKyAgIH0KKyAgIAorICAgLyogVGhpbmsgSSBjYW4gc2FmZWx5IGRpc2FibGUgbm9ybWFsaXNhdGlvbiBmb3IgZml4ZWQtcG9pbnQgKGFuZCBwcm9iYWJseSBmbG9hdCBhcyB3ZWxsKSAqLworI2lmbmRlZiBGSVhFRF9QT0lOVAorICAgZm9yIChpPTA7aTxiYW5rLT5uYl9iYW5rcztpKyspCisgICAgICBiYW5rLT5zY2FsaW5nW2ldID0gMDsKKyAgIGZvciAoaT0wO2k8YmFuay0+bGVuO2krKykKKyAgIHsKKyAgICAgIGludCBpZCA9IGJhbmstPmJhbmtfbGVmdFtpXTsKKyAgICAgIGJhbmstPnNjYWxpbmdbaWRdICs9IGJhbmstPmZpbHRlcl9sZWZ0W2ldOworICAgICAgaWQgPSBiYW5rLT5iYW5rX3JpZ2h0W2ldOworICAgICAgYmFuay0+c2NhbGluZ1tpZF0gKz0gYmFuay0+ZmlsdGVyX3JpZ2h0W2ldOworICAgfQorICAgZm9yIChpPTA7aTxiYW5rLT5uYl9iYW5rcztpKyspCisgICAgICBiYW5rLT5zY2FsaW5nW2ldID0gUTE1X09ORS8oYmFuay0+c2NhbGluZ1tpXSk7CisjZW5kaWYKKyAgIHJldHVybiBiYW5rOworfQorCit2b2lkIGZpbHRlcmJhbmtfZGVzdHJveShGaWx0ZXJCYW5rICpiYW5rKQoreworICAgc3BlZXhfZnJlZShiYW5rLT5iYW5rX2xlZnQpOworICAgc3BlZXhfZnJlZShiYW5rLT5iYW5rX3JpZ2h0KTsKKyAgIHNwZWV4X2ZyZWUoYmFuay0+ZmlsdGVyX2xlZnQpOworICAgc3BlZXhfZnJlZShiYW5rLT5maWx0ZXJfcmlnaHQpOworI2lmbmRlZiBGSVhFRF9QT0lOVAorICAgc3BlZXhfZnJlZShiYW5rLT5zY2FsaW5nKTsKKyNlbmRpZgorICAgc3BlZXhfZnJlZShiYW5rKTsKK30KKwordm9pZCBmaWx0ZXJiYW5rX2NvbXB1dGVfYmFuazMyKEZpbHRlckJhbmsgKmJhbmssIHNweF93b3JkMzJfdCAqcHMsIHNweF93b3JkMzJfdCAqbWVsKQoreworICAgaW50IGk7CisgICBmb3IgKGk9MDtpPGJhbmstPm5iX2JhbmtzO2krKykKKyAgICAgIG1lbFtpXSA9IDA7CisKKyAgIGZvciAoaT0wO2k8YmFuay0+bGVuO2krKykKKyAgIHsKKyAgICAgIGludCBpZDsKKyAgICAgIGlkID0gYmFuay0+YmFua19sZWZ0W2ldOworICAgICAgbWVsW2lkXSArPSBNVUxUMTZfMzJfUDE1KGJhbmstPmZpbHRlcl9sZWZ0W2ldLHBzW2ldKTsKKyAgICAgIGlkID0gYmFuay0+YmFua19yaWdodFtpXTsKKyAgICAgIG1lbFtpZF0gKz0gTVVMVDE2XzMyX1AxNShiYW5rLT5maWx0ZXJfcmlnaHRbaV0scHNbaV0pOworICAgfQorICAgLyogVGhpbmsgSSBjYW4gc2FmZWx5IGRpc2FibGUgbm9ybWFsaXNhdGlvbiB0aGF0IGZvciBmaXhlZC1wb2ludCAoYW5kIHByb2JhYmx5IGZsb2F0IGFzIHdlbGwpICovCisjaWZuZGVmIEZJWEVEX1BPSU5UCisgICAvKmZvciAoaT0wO2k8YmFuay0+bmJfYmFua3M7aSsrKQorICAgICAgbWVsW2ldID0gTVVMVDE2XzMyX1AxNShRMTUoYmFuay0+c2NhbGluZ1tpXSksbWVsW2ldKTsKKyAgICovCisjZW5kaWYKK30KKwordm9pZCBmaWx0ZXJiYW5rX2NvbXB1dGVfcHNkMTYoRmlsdGVyQmFuayAqYmFuaywgc3B4X3dvcmQxNl90ICptZWwsIHNweF93b3JkMTZfdCAqcHMpCit7CisgICBpbnQgaTsKKyAgIGZvciAoaT0wO2k8YmFuay0+bGVuO2krKykKKyAgIHsKKyAgICAgIHNweF93b3JkMzJfdCB0bXA7CisgICAgICBpbnQgaWQxLCBpZDI7CisgICAgICBpZDEgPSBiYW5rLT5iYW5rX2xlZnRbaV07CisgICAgICBpZDIgPSBiYW5rLT5iYW5rX3JpZ2h0W2ldOworICAgICAgdG1wID0gTVVMVDE2XzE2KG1lbFtpZDFdLGJhbmstPmZpbHRlcl9sZWZ0W2ldKTsKKyAgICAgIHRtcCArPSBNVUxUMTZfMTYobWVsW2lkMl0sYmFuay0+ZmlsdGVyX3JpZ2h0W2ldKTsKKyAgICAgIHBzW2ldID0gRVhUUkFDVDE2KFBTSFIzMih0bXAsMTUpKTsKKyAgIH0KK30KKworCisjaWZuZGVmIEZJWEVEX1BPSU5UCit2b2lkIGZpbHRlcmJhbmtfY29tcHV0ZV9iYW5rKEZpbHRlckJhbmsgKmJhbmssIGZsb2F0ICpwcywgZmxvYXQgKm1lbCkKK3sKKyAgIGludCBpOworICAgZm9yIChpPTA7aTxiYW5rLT5uYl9iYW5rcztpKyspCisgICAgICBtZWxbaV0gPSAwOworCisgICBmb3IgKGk9MDtpPGJhbmstPmxlbjtpKyspCisgICB7CisgICAgICBpbnQgaWQgPSBiYW5rLT5iYW5rX2xlZnRbaV07CisgICAgICBtZWxbaWRdICs9IGJhbmstPmZpbHRlcl9sZWZ0W2ldKnBzW2ldOworICAgICAgaWQgPSBiYW5rLT5iYW5rX3JpZ2h0W2ldOworICAgICAgbWVsW2lkXSArPSBiYW5rLT5maWx0ZXJfcmlnaHRbaV0qcHNbaV07CisgICB9CisgICBmb3IgKGk9MDtpPGJhbmstPm5iX2JhbmtzO2krKykKKyAgICAgIG1lbFtpXSAqPSBiYW5rLT5zY2FsaW5nW2ldOworfQorCit2b2lkIGZpbHRlcmJhbmtfY29tcHV0ZV9wc2QoRmlsdGVyQmFuayAqYmFuaywgZmxvYXQgKm1lbCwgZmxvYXQgKnBzKQoreworICAgaW50IGk7CisgICBmb3IgKGk9MDtpPGJhbmstPmxlbjtpKyspCisgICB7CisgICAgICBpbnQgaWQgPSBiYW5rLT5iYW5rX2xlZnRbaV07CisgICAgICBwc1tpXSA9IG1lbFtpZF0qYmFuay0+ZmlsdGVyX2xlZnRbaV07CisgICAgICBpZCA9IGJhbmstPmJhbmtfcmlnaHRbaV07CisgICAgICBwc1tpXSArPSBtZWxbaWRdKmJhbmstPmZpbHRlcl9yaWdodFtpXTsKKyAgIH0KK30KKwordm9pZCBmaWx0ZXJiYW5rX3BzeV9zbW9vdGgoRmlsdGVyQmFuayAqYmFuaywgZmxvYXQgKnBzLCBmbG9hdCAqbWFzaykKK3sKKyAgIC8qIExvdyBmcmVxIHNsb3BlOiAxNCBkQi9CYXJrKi8KKyAgIC8qIEhpZ2ggZnJlcSBzbG9wZTogOSBkQi9CYXJrKi8KKyAgIC8qIE5vaXNlIHZzIHRvbmU6IDUgZEIgZGlmZmVyZW5jZSAqLworICAgLyogRklYTUU6IFRlbXBvcmFyeSBrbHVkZ2UgKi8KKyAgIGZsb2F0IGJhcmtbMTAwXTsKKyAgIGludCBpOworICAgLyogQXNzdW1lcyAxLzMgQmFyayByZXNvbHV0aW9uICovCisgICBmbG9hdCBkZWNheV9sb3cgPSAwLjM0MTQ1ZjsKKyAgIGZsb2F0IGRlY2F5X2hpZ2ggPSAwLjUwMTE5ZjsKKyAgIGZpbHRlcmJhbmtfY29tcHV0ZV9iYW5rKGJhbmssIHBzLCBiYXJrKTsKKyAgIGZvciAoaT0xO2k8YmFuay0+bmJfYmFua3M7aSsrKQorICAgeworICAgICAgLypmbG9hdCBkZWNheV9oaWdoID0gMTMtMS42KmxvZzEwKGJhcmtbaS0xXSk7CisgICAgICBkZWNheV9oaWdoID0gcG93KDEwLCgtZGVjYXlfaGlnaC8zMC5mKSk7Ki8KKyAgICAgIGJhcmtbaV0gPSBiYXJrW2ldICsgZGVjYXlfaGlnaCpiYXJrW2ktMV07CisgICB9CisgICBmb3IgKGk9YmFuay0+bmJfYmFua3MtMjtpPj0wO2ktLSkKKyAgIHsKKyAgICAgIGJhcmtbaV0gPSBiYXJrW2ldICsgZGVjYXlfbG93KmJhcmtbaSsxXTsKKyAgIH0KKyAgIGZpbHRlcmJhbmtfY29tcHV0ZV9wc2QoYmFuaywgYmFyaywgbWFzayk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZmlsdGVyYmFuay5oIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZmlsdGVyYmFuay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZWQ2YjkKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9maWx0ZXJiYW5rLmgKQEAgLTAsMCArMSw2NiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA2IEplYW4tTWFyYyBWYWxpbiAqLworLyoqCisgICBAZmlsZSBmaWx0ZXJiYW5rLmgKKyAgIEBicmllZiBDb252ZXJ0aW5nIGJldHdlZW4gcHNkIGFuZCBmaWx0ZXJiYW5rCisgKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAgIG1ldDoKKworICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgICBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgICBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgICBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIEZJTFRFUkJBTktfSAorI2RlZmluZSBGSUxURVJCQU5LX0gKKworI2luY2x1ZGUgIm1pc2MuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgaW50ICpiYW5rX2xlZnQ7CisgICBpbnQgKmJhbmtfcmlnaHQ7CisgICBzcHhfd29yZDE2X3QgKmZpbHRlcl9sZWZ0OworICAgc3B4X3dvcmQxNl90ICpmaWx0ZXJfcmlnaHQ7CisjaWZuZGVmIEZJWEVEX1BPSU5UCisgICBmbG9hdCAqc2NhbGluZzsKKyNlbmRpZgorICAgaW50IG5iX2JhbmtzOworICAgaW50IGxlbjsKK30gRmlsdGVyQmFuazsKKworCitGaWx0ZXJCYW5rICpmaWx0ZXJiYW5rX25ldyhpbnQgYmFua3MsIHNweF93b3JkMzJfdCBzYW1wbGluZywgaW50IGxlbiwgaW50IHR5cGUpOworCit2b2lkIGZpbHRlcmJhbmtfZGVzdHJveShGaWx0ZXJCYW5rICpiYW5rKTsKKwordm9pZCBmaWx0ZXJiYW5rX2NvbXB1dGVfYmFuazMyKEZpbHRlckJhbmsgKmJhbmssIHNweF93b3JkMzJfdCAqcHMsIHNweF93b3JkMzJfdCAqbWVsKTsKKwordm9pZCBmaWx0ZXJiYW5rX2NvbXB1dGVfcHNkMTYoRmlsdGVyQmFuayAqYmFuaywgc3B4X3dvcmQxNl90ICptZWwsIHNweF93b3JkMTZfdCAqcHNkKTsKKworI2lmbmRlZiBGSVhFRF9QT0lOVAordm9pZCBmaWx0ZXJiYW5rX2NvbXB1dGVfYmFuayhGaWx0ZXJCYW5rICpiYW5rLCBmbG9hdCAqcHNkLCBmbG9hdCAqbWVsKTsKK3ZvaWQgZmlsdGVyYmFua19jb21wdXRlX3BzZChGaWx0ZXJCYW5rICpiYW5rLCBmbG9hdCAqbWVsLCBmbG9hdCAqcHNkKTsKKyNlbmRpZgorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZmlsdGVycy5jIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZmlsdGVycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YjQ3NTMKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9maWx0ZXJzLmMKQEAgLTAsMCArMSw4MjEgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMi0yMDA2IEplYW4tTWFyYyBWYWxpbiAKKyAgIEZpbGU6IGZpbHRlcnMuYworICAgVmFyaW91cyBhbmFseXNpcy9zeW50aGVzaXMgZmlsdGVycworCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgImZpbHRlcnMuaCIKKyNpbmNsdWRlICJzdGFja19hbGxvYy5oIgorI2luY2x1ZGUgIm1pc2MuaCIKKyNpbmNsdWRlICJtYXRoX2FwcHJveC5oIgorI2luY2x1ZGUgImx0cC5oIgorI2luY2x1ZGUgPG1hdGguaD4KKworI2lmZGVmIF9VU0VfU1NFCisjaW5jbHVkZSAiZmlsdGVyc19zc2UuaCIKKyNlbGlmIGRlZmluZWQgKEFSTTRfQVNNKSB8fCBkZWZpbmVkKEFSTTVFX0FTTSkKKyNpbmNsdWRlICJmaWx0ZXJzX2FybTQuaCIKKyNlbGlmIGRlZmluZWQgKEJGSU5fQVNNKQorI2luY2x1ZGUgImZpbHRlcnNfYmZpbi5oIgorI2VuZGlmCisKKworCit2b2lkIGJ3X2xwYyhzcHhfd29yZDE2X3QgZ2FtbWEsIGNvbnN0IHNweF9jb2VmX3QgKmxwY19pbiwgc3B4X2NvZWZfdCAqbHBjX291dCwgaW50IG9yZGVyKQoreworICAgaW50IGk7CisgICBzcHhfd29yZDE2X3QgdG1wPWdhbW1hOworICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICB7CisgICAgICBscGNfb3V0W2ldID0gTVVMVDE2XzE2X1AxNSh0bXAsbHBjX2luW2ldKTsKKyAgICAgIHRtcCA9IE1VTFQxNl8xNl9QMTUodG1wLCBnYW1tYSk7CisgICB9Cit9CisKK3ZvaWQgc2FuaXRpemVfdmFsdWVzMzIoc3B4X3dvcmQzMl90ICp2ZWMsIHNweF93b3JkMzJfdCBtaW5fdmFsLCBzcHhfd29yZDMyX3QgbWF4X3ZhbCwgaW50IGxlbikKK3sKKyAgIGludCBpOworICAgZm9yIChpPTA7aTxsZW47aSsrKQorICAgeworICAgICAgLyogSXQncyBpbXBvcnRhbnQgd2UgZG8gdGhlIHRlc3QgdGhhdCB3YXkgc28gd2UgY2FuIGNhdGNoIE5hTnMsIHdoaWNoIGFyZSBuZWl0aGVyIGdyZWF0ZXIgbm9yIHNtYWxsZXIgKi8KKyAgICAgIGlmICghKHZlY1tpXT49bWluX3ZhbCAmJiB2ZWNbaV0gPD0gbWF4X3ZhbCkpCisgICAgICB7CisgICAgICAgICBpZiAodmVjW2ldIDwgbWluX3ZhbCkKKyAgICAgICAgICAgIHZlY1tpXSA9IG1pbl92YWw7CisgICAgICAgICBlbHNlIGlmICh2ZWNbaV0gPiBtYXhfdmFsKQorICAgICAgICAgICAgdmVjW2ldID0gbWF4X3ZhbDsKKyAgICAgICAgIGVsc2UgLyogSGFzIHRvIGJlIE5hTiAqLworICAgICAgICAgICAgdmVjW2ldID0gMDsKKyAgICAgIH0KKyAgIH0KK30KKwordm9pZCBoaWdocGFzcyhjb25zdCBzcHhfd29yZDE2X3QgKngsIHNweF93b3JkMTZfdCAqeSwgaW50IGxlbiwgaW50IGZpbHRJRCwgc3B4X21lbV90ICptZW0pCit7CisgICBpbnQgaTsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgY29uc3Qgc3B4X3dvcmQxNl90IFBjb2VmWzVdWzNdID0ge3sxNjM4NCwgLTMxMzEzLCAxNDk5MX0sIHsxNjM4NCwgLTMxNTY5LCAxNTI0OX0sIHsxNjM4NCwgLTMxNjc3LCAxNTMyOH0sIHsxNjM4NCwgLTMyMzEzLCAxNTk0N30sIHsxNjM4NCwgLTIyNDQ2LCA2NTM3fX07CisgICBjb25zdCBzcHhfd29yZDE2X3QgWmNvZWZbNV1bM10gPSB7ezE1NjcyLCAtMzEzNDQsIDE1NjcyfSwgezE1ODAyLCAtMzE2MDEsIDE1ODAyfSwgezE1ODQ3LCAtMzE2OTQsIDE1ODQ3fSwgezE2MTYyLCAtMzIzMjIsIDE2MTYyfSwgezE0NDE4LCAtMjg4MzYsIDE0NDE4fX07CisjZWxzZQorICAgY29uc3Qgc3B4X3dvcmQxNl90IFBjb2VmWzVdWzNdID0ge3sxLjAwMDAwZiwgLTEuOTExMjBmLCAwLjkxNDk4Zn0sIHsxLjAwMDAwZiwgLTEuOTI2ODNmLCAwLjkzMDcxZn0sIHsxLjAwMDAwZiwgLTEuOTMzMzhmLCAwLjkzNTUzZn0sIHsxLjAwMDAwZiwgLTEuOTcyMjZmLCAwLjk3MzMyZn0sIHsxLjAwMDAwZiwgLTEuMzcwMDBmLCAwLjM5OTAwZn19OworICAgY29uc3Qgc3B4X3dvcmQxNl90IFpjb2VmWzVdWzNdID0ge3swLjk1NjU0ZiwgLTEuOTEzMDlmLCAwLjk1NjU0Zn0sIHswLjk2NDQ2ZiwgLTEuOTI4NzlmLCAwLjk2NDQ2Zn0sIHswLjk2NzIzZiwgLTEuOTM0NDVmLCAwLjk2NzIzZn0sIHswLjk4NjQ1ZiwgLTEuOTcyNzdmLCAwLjk4NjQ1Zn0sIHswLjg4MDAwZiwgLTEuNzYwMDBmLCAwLjg4MDAwZn19OworI2VuZGlmCisgICBjb25zdCBzcHhfd29yZDE2X3QgKmRlbiwgKm51bTsKKyAgIGlmIChmaWx0SUQ+NCkKKyAgICAgIGZpbHRJRD00OworICAgCisgICBkZW4gPSBQY29lZltmaWx0SURdOyBudW0gPSBaY29lZltmaWx0SURdOworICAgLypyZXR1cm47Ki8KKyAgIGZvciAoaT0wO2k8bGVuO2krKykKKyAgIHsKKyAgICAgIHNweF93b3JkMTZfdCB5aTsKKyAgICAgIHNweF93b3JkMzJfdCB2b3V0ID0gQUREMzIoTVVMVDE2XzE2KG51bVswXSwgeFtpXSksbWVtWzBdKTsKKyAgICAgIHlpID0gRVhUUkFDVDE2KFNBVFVSQVRFKFBTSFIzMih2b3V0LDE0KSwzMjc2NykpOworICAgICAgbWVtWzBdID0gQUREMzIoTUFDMTZfMTYobWVtWzFdLCBudW1bMV0seFtpXSksIFNITDMyKE1VTFQxNl8zMl9RMTUoLWRlblsxXSx2b3V0KSwxKSk7CisgICAgICBtZW1bMV0gPSBBREQzMihNVUxUMTZfMTYobnVtWzJdLHhbaV0pLCBTSEwzMihNVUxUMTZfMzJfUTE1KC1kZW5bMl0sdm91dCksMSkpOworICAgICAgeVtpXSA9IHlpOworICAgfQorfQorCisjaWZkZWYgRklYRURfUE9JTlQKKworLyogRklYTUU6IFRoZXNlIGZ1bmN0aW9ucyBhcmUgdWdseSBhbmQgcHJvYmFibHkgaW50cm9kdWNlIHRvbyBtdWNoIGVycm9yICovCit2b2lkIHNpZ25hbF9tdWwoY29uc3Qgc3B4X3NpZ190ICp4LCBzcHhfc2lnX3QgKnksIHNweF93b3JkMzJfdCBzY2FsZSwgaW50IGxlbikKK3sKKyAgIGludCBpOworICAgZm9yIChpPTA7aTxsZW47aSsrKQorICAgeworICAgICAgeVtpXSA9IFNITDMyKE1VTFQxNl8zMl9RMTQoRVhUUkFDVDE2KFNIUjMyKHhbaV0sNykpLHNjYWxlKSw3KTsKKyAgIH0KK30KKwordm9pZCBzaWduYWxfZGl2KGNvbnN0IHNweF93b3JkMTZfdCAqeCwgc3B4X3dvcmQxNl90ICp5LCBzcHhfd29yZDMyX3Qgc2NhbGUsIGludCBsZW4pCit7CisgICBpbnQgaTsKKyAgIGlmIChzY2FsZSA+IFNITDMyKEVYVEVORDMyKFNJR19TQ0FMSU5HKSwgOCkpCisgICB7CisgICAgICBzcHhfd29yZDE2X3Qgc2NhbGVfMTsKKyAgICAgIHNjYWxlID0gUFNIUjMyKHNjYWxlLCBTSUdfU0hJRlQpOworICAgICAgc2NhbGVfMSA9IEVYVFJBQ1QxNihQRElWMzJfMTYoU0hMMzIoRVhURU5EMzIoU0lHX1NDQUxJTkcpLDcpLHNjYWxlKSk7CisgICAgICBmb3IgKGk9MDtpPGxlbjtpKyspCisgICAgICB7CisgICAgICAgICB5W2ldID0gTVVMVDE2XzE2X1AxNShzY2FsZV8xLCB4W2ldKTsKKyAgICAgIH0KKyAgIH0gZWxzZSBpZiAoc2NhbGUgPiBTSFIzMihFWFRFTkQzMihTSUdfU0NBTElORyksIDIpKSB7CisgICAgICBzcHhfd29yZDE2X3Qgc2NhbGVfMTsKKyAgICAgIHNjYWxlID0gUFNIUjMyKHNjYWxlLCBTSUdfU0hJRlQtNSk7CisgICAgICBzY2FsZV8xID0gRElWMzJfMTYoU0hMMzIoRVhURU5EMzIoU0lHX1NDQUxJTkcpLDMpLHNjYWxlKTsKKyAgICAgIGZvciAoaT0wO2k8bGVuO2krKykKKyAgICAgIHsKKyAgICAgICAgIHlbaV0gPSBQU0hSMzIoTVVMVDE2XzE2KHNjYWxlXzEsIFNITDE2KHhbaV0sMikpLDgpOworICAgICAgfQorICAgfSBlbHNlIHsKKyAgICAgIHNweF93b3JkMTZfdCBzY2FsZV8xOworICAgICAgc2NhbGUgPSBQU0hSMzIoc2NhbGUsIFNJR19TSElGVC03KTsKKyAgICAgIGlmIChzY2FsZSA8IDUpCisgICAgICAgICBzY2FsZSA9IDU7CisgICAgICBzY2FsZV8xID0gRElWMzJfMTYoU0hMMzIoRVhURU5EMzIoU0lHX1NDQUxJTkcpLDMpLHNjYWxlKTsKKyAgICAgIGZvciAoaT0wO2k8bGVuO2krKykKKyAgICAgIHsKKyAgICAgICAgIHlbaV0gPSBQU0hSMzIoTVVMVDE2XzE2KHNjYWxlXzEsIFNITDE2KHhbaV0sMikpLDYpOworICAgICAgfQorICAgfQorfQorCisjZWxzZQorCit2b2lkIHNpZ25hbF9tdWwoY29uc3Qgc3B4X3NpZ190ICp4LCBzcHhfc2lnX3QgKnksIHNweF93b3JkMzJfdCBzY2FsZSwgaW50IGxlbikKK3sKKyAgIGludCBpOworICAgZm9yIChpPTA7aTxsZW47aSsrKQorICAgICAgeVtpXSA9IHNjYWxlKnhbaV07Cit9CisKK3ZvaWQgc2lnbmFsX2Rpdihjb25zdCBzcHhfc2lnX3QgKngsIHNweF9zaWdfdCAqeSwgc3B4X3dvcmQzMl90IHNjYWxlLCBpbnQgbGVuKQoreworICAgaW50IGk7CisgICBmbG9hdCBzY2FsZV8xID0gMS9zY2FsZTsKKyAgIGZvciAoaT0wO2k8bGVuO2krKykKKyAgICAgIHlbaV0gPSBzY2FsZV8xKnhbaV07Cit9CisjZW5kaWYKKworCisKKyNpZmRlZiBGSVhFRF9QT0lOVAorCisKKworc3B4X3dvcmQxNl90IGNvbXB1dGVfcm1zKGNvbnN0IHNweF9zaWdfdCAqeCwgaW50IGxlbikKK3sKKyAgIGludCBpOworICAgc3B4X3dvcmQzMl90IHN1bT0wOworICAgc3B4X3NpZ190IG1heF92YWw9MTsKKyAgIGludCBzaWdfc2hpZnQ7CisKKyAgIGZvciAoaT0wO2k8bGVuO2krKykKKyAgIHsKKyAgICAgIHNweF9zaWdfdCB0bXAgPSB4W2ldOworICAgICAgaWYgKHRtcDwwKQorICAgICAgICAgdG1wID0gLXRtcDsKKyAgICAgIGlmICh0bXAgPiBtYXhfdmFsKQorICAgICAgICAgbWF4X3ZhbCA9IHRtcDsKKyAgIH0KKworICAgc2lnX3NoaWZ0PTA7CisgICB3aGlsZSAobWF4X3ZhbD4xNjM4MykKKyAgIHsKKyAgICAgIHNpZ19zaGlmdCsrOworICAgICAgbWF4X3ZhbCA+Pj0gMTsKKyAgIH0KKworICAgZm9yIChpPTA7aTxsZW47aSs9NCkKKyAgIHsKKyAgICAgIHNweF93b3JkMzJfdCBzdW0yPTA7CisgICAgICBzcHhfd29yZDE2X3QgdG1wOworICAgICAgdG1wID0gRVhUUkFDVDE2KFNIUjMyKHhbaV0sc2lnX3NoaWZ0KSk7CisgICAgICBzdW0yID0gTUFDMTZfMTYoc3VtMix0bXAsdG1wKTsKKyAgICAgIHRtcCA9IEVYVFJBQ1QxNihTSFIzMih4W2krMV0sc2lnX3NoaWZ0KSk7CisgICAgICBzdW0yID0gTUFDMTZfMTYoc3VtMix0bXAsdG1wKTsKKyAgICAgIHRtcCA9IEVYVFJBQ1QxNihTSFIzMih4W2krMl0sc2lnX3NoaWZ0KSk7CisgICAgICBzdW0yID0gTUFDMTZfMTYoc3VtMix0bXAsdG1wKTsKKyAgICAgIHRtcCA9IEVYVFJBQ1QxNihTSFIzMih4W2krM10sc2lnX3NoaWZ0KSk7CisgICAgICBzdW0yID0gTUFDMTZfMTYoc3VtMix0bXAsdG1wKTsKKyAgICAgIHN1bSA9IEFERDMyKHN1bSxTSFIzMihzdW0yLDYpKTsKKyAgIH0KKyAgIAorICAgcmV0dXJuIEVYVFJBQ1QxNihQU0hSMzIoU0hMMzIoRVhURU5EMzIoc3B4X3NxcnQoRElWMzIoc3VtLGxlbikpKSwoc2lnX3NoaWZ0KzMpKSxTSUdfU0hJRlQpKTsKK30KKworc3B4X3dvcmQxNl90IGNvbXB1dGVfcm1zMTYoY29uc3Qgc3B4X3dvcmQxNl90ICp4LCBpbnQgbGVuKQoreworICAgaW50IGk7CisgICBzcHhfd29yZDE2X3QgbWF4X3ZhbD0xMDsgCisKKyAgIGZvciAoaT0wO2k8bGVuO2krKykKKyAgIHsKKyAgICAgIHNweF9zaWdfdCB0bXAgPSB4W2ldOworICAgICAgaWYgKHRtcDwwKQorICAgICAgICAgdG1wID0gLXRtcDsKKyAgICAgIGlmICh0bXAgPiBtYXhfdmFsKQorICAgICAgICAgbWF4X3ZhbCA9IHRtcDsKKyAgIH0KKyAgIGlmIChtYXhfdmFsPjE2MzgzKQorICAgeworICAgICAgc3B4X3dvcmQzMl90IHN1bT0wOworICAgICAgZm9yIChpPTA7aTxsZW47aSs9NCkKKyAgICAgIHsKKyAgICAgICAgIHNweF93b3JkMzJfdCBzdW0yPTA7CisgICAgICAgICBzdW0yID0gTUFDMTZfMTYoc3VtMixTSFIxNih4W2ldLDEpLFNIUjE2KHhbaV0sMSkpOworICAgICAgICAgc3VtMiA9IE1BQzE2XzE2KHN1bTIsU0hSMTYoeFtpKzFdLDEpLFNIUjE2KHhbaSsxXSwxKSk7CisgICAgICAgICBzdW0yID0gTUFDMTZfMTYoc3VtMixTSFIxNih4W2krMl0sMSksU0hSMTYoeFtpKzJdLDEpKTsKKyAgICAgICAgIHN1bTIgPSBNQUMxNl8xNihzdW0yLFNIUjE2KHhbaSszXSwxKSxTSFIxNih4W2krM10sMSkpOworICAgICAgICAgc3VtID0gQUREMzIoc3VtLFNIUjMyKHN1bTIsNikpOworICAgICAgfQorICAgICAgcmV0dXJuIFNITDE2KHNweF9zcXJ0KERJVjMyKHN1bSxsZW4pKSw0KTsKKyAgIH0gZWxzZSB7CisgICAgICBzcHhfd29yZDMyX3Qgc3VtPTA7CisgICAgICBpbnQgc2lnX3NoaWZ0PTA7CisgICAgICBpZiAobWF4X3ZhbCA8IDgxOTIpCisgICAgICAgICBzaWdfc2hpZnQ9MTsKKyAgICAgIGlmIChtYXhfdmFsIDwgNDA5NikKKyAgICAgICAgIHNpZ19zaGlmdD0yOworICAgICAgaWYgKG1heF92YWwgPCAyMDQ4KQorICAgICAgICAgc2lnX3NoaWZ0PTM7CisgICAgICBmb3IgKGk9MDtpPGxlbjtpKz00KQorICAgICAgeworICAgICAgICAgc3B4X3dvcmQzMl90IHN1bTI9MDsKKyAgICAgICAgIHN1bTIgPSBNQUMxNl8xNihzdW0yLFNITDE2KHhbaV0sc2lnX3NoaWZ0KSxTSEwxNih4W2ldLHNpZ19zaGlmdCkpOworICAgICAgICAgc3VtMiA9IE1BQzE2XzE2KHN1bTIsU0hMMTYoeFtpKzFdLHNpZ19zaGlmdCksU0hMMTYoeFtpKzFdLHNpZ19zaGlmdCkpOworICAgICAgICAgc3VtMiA9IE1BQzE2XzE2KHN1bTIsU0hMMTYoeFtpKzJdLHNpZ19zaGlmdCksU0hMMTYoeFtpKzJdLHNpZ19zaGlmdCkpOworICAgICAgICAgc3VtMiA9IE1BQzE2XzE2KHN1bTIsU0hMMTYoeFtpKzNdLHNpZ19zaGlmdCksU0hMMTYoeFtpKzNdLHNpZ19zaGlmdCkpOworICAgICAgICAgc3VtID0gQUREMzIoc3VtLFNIUjMyKHN1bTIsNikpOworICAgICAgfQorICAgICAgcmV0dXJuIFNITDE2KHNweF9zcXJ0KERJVjMyKHN1bSxsZW4pKSwzLXNpZ19zaGlmdCk7ICAgCisgICB9Cit9CisKKyNpZm5kZWYgT1ZFUlJJREVfTk9STUFMSVpFMTYKK2ludCBub3JtYWxpemUxNihjb25zdCBzcHhfc2lnX3QgKngsIHNweF93b3JkMTZfdCAqeSwgc3B4X3NpZ190IG1heF9zY2FsZSwgaW50IGxlbikKK3sKKyAgIGludCBpOworICAgc3B4X3NpZ190IG1heF92YWw9MTsKKyAgIGludCBzaWdfc2hpZnQ7CisgICAKKyAgIGZvciAoaT0wO2k8bGVuO2krKykKKyAgIHsKKyAgICAgIHNweF9zaWdfdCB0bXAgPSB4W2ldOworICAgICAgaWYgKHRtcDwwKQorICAgICAgICAgdG1wID0gTkVHMzIodG1wKTsKKyAgICAgIGlmICh0bXAgPj0gbWF4X3ZhbCkKKyAgICAgICAgIG1heF92YWwgPSB0bXA7CisgICB9CisKKyAgIHNpZ19zaGlmdD0wOworICAgd2hpbGUgKG1heF92YWw+bWF4X3NjYWxlKQorICAgeworICAgICAgc2lnX3NoaWZ0Kys7CisgICAgICBtYXhfdmFsID4+PSAxOworICAgfQorCisgICBmb3IgKGk9MDtpPGxlbjtpKyspCisgICAgICB5W2ldID0gRVhUUkFDVDE2KFNIUjMyKHhbaV0sIHNpZ19zaGlmdCkpOworICAgCisgICByZXR1cm4gc2lnX3NoaWZ0OworfQorI2VuZGlmCisKKyNlbHNlCisKK3NweF93b3JkMTZfdCBjb21wdXRlX3Jtcyhjb25zdCBzcHhfc2lnX3QgKngsIGludCBsZW4pCit7CisgICBpbnQgaTsKKyAgIGZsb2F0IHN1bT0wOworICAgZm9yIChpPTA7aTxsZW47aSsrKQorICAgeworICAgICAgc3VtICs9IHhbaV0qeFtpXTsKKyAgIH0KKyAgIHJldHVybiBzcXJ0KC4xK3N1bS9sZW4pOworfQorc3B4X3dvcmQxNl90IGNvbXB1dGVfcm1zMTYoY29uc3Qgc3B4X3dvcmQxNl90ICp4LCBpbnQgbGVuKQoreworICAgcmV0dXJuIGNvbXB1dGVfcm1zKHgsIGxlbik7Cit9CisjZW5kaWYKKworCisKKyNpZm5kZWYgT1ZFUlJJREVfRklMVEVSX01FTTE2Cit2b2lkIGZpbHRlcl9tZW0xNihjb25zdCBzcHhfd29yZDE2X3QgKngsIGNvbnN0IHNweF9jb2VmX3QgKm51bSwgY29uc3Qgc3B4X2NvZWZfdCAqZGVuLCBzcHhfd29yZDE2X3QgKnksIGludCBOLCBpbnQgb3JkLCBzcHhfbWVtX3QgKm1lbSwgY2hhciAqc3RhY2spCit7CisgICBpbnQgaSxqOworICAgc3B4X3dvcmQxNl90IHhpLHlpLG55aTsKKyAgIGZvciAoaT0wO2k8TjtpKyspCisgICB7CisgICAgICB4aT0geFtpXTsKKyAgICAgIHlpID0gRVhUUkFDVDE2KFNBVFVSQVRFKEFERDMyKEVYVEVORDMyKHhbaV0pLFBTSFIzMihtZW1bMF0sTFBDX1NISUZUKSksMzI3NjcpKTsKKyAgICAgIG55aSA9IE5FRzE2KHlpKTsKKyAgICAgIGZvciAoaj0wO2o8b3JkLTE7aisrKQorICAgICAgeworICAgICAgICAgbWVtW2pdID0gTUFDMTZfMTYoTUFDMTZfMTYobWVtW2orMV0sIG51bVtqXSx4aSksIGRlbltqXSxueWkpOworICAgICAgfQorICAgICAgbWVtW29yZC0xXSA9IEFERDMyKE1VTFQxNl8xNihudW1bb3JkLTFdLHhpKSwgTVVMVDE2XzE2KGRlbltvcmQtMV0sbnlpKSk7CisgICAgICB5W2ldID0geWk7CisgICB9Cit9CisjZW5kaWYKKworI2lmbmRlZiBPVkVSUklERV9JSVJfTUVNMTYKK3ZvaWQgaWlyX21lbTE2KGNvbnN0IHNweF93b3JkMTZfdCAqeCwgY29uc3Qgc3B4X2NvZWZfdCAqZGVuLCBzcHhfd29yZDE2X3QgKnksIGludCBOLCBpbnQgb3JkLCBzcHhfbWVtX3QgKm1lbSwgY2hhciAqc3RhY2spCit7CisgICBpbnQgaSxqOworICAgc3B4X3dvcmQxNl90IHlpLG55aTsKKworICAgZm9yIChpPTA7aTxOO2krKykKKyAgIHsKKyAgICAgIHlpID0gRVhUUkFDVDE2KFNBVFVSQVRFKEFERDMyKEVYVEVORDMyKHhbaV0pLFBTSFIzMihtZW1bMF0sTFBDX1NISUZUKSksMzI3NjcpKTsKKyAgICAgIG55aSA9IE5FRzE2KHlpKTsKKyAgICAgIGZvciAoaj0wO2o8b3JkLTE7aisrKQorICAgICAgeworICAgICAgICAgbWVtW2pdID0gTUFDMTZfMTYobWVtW2orMV0sZGVuW2pdLG55aSk7CisgICAgICB9CisgICAgICBtZW1bb3JkLTFdID0gTVVMVDE2XzE2KGRlbltvcmQtMV0sbnlpKTsKKyAgICAgIHlbaV0gPSB5aTsKKyAgIH0KK30KKyNlbmRpZgorCisjaWZuZGVmIE9WRVJSSURFX0ZJUl9NRU0xNgordm9pZCBmaXJfbWVtMTYoY29uc3Qgc3B4X3dvcmQxNl90ICp4LCBjb25zdCBzcHhfY29lZl90ICpudW0sIHNweF93b3JkMTZfdCAqeSwgaW50IE4sIGludCBvcmQsIHNweF9tZW1fdCAqbWVtLCBjaGFyICpzdGFjaykKK3sKKyAgIGludCBpLGo7CisgICBzcHhfd29yZDE2X3QgeGkseWk7CisKKyAgIGZvciAoaT0wO2k8TjtpKyspCisgICB7CisgICAgICB4aT14W2ldOworICAgICAgeWkgPSBFWFRSQUNUMTYoU0FUVVJBVEUoQUREMzIoRVhURU5EMzIoeFtpXSksUFNIUjMyKG1lbVswXSxMUENfU0hJRlQpKSwzMjc2NykpOworICAgICAgZm9yIChqPTA7ajxvcmQtMTtqKyspCisgICAgICB7CisgICAgICAgICBtZW1bal0gPSBNQUMxNl8xNihtZW1baisxXSwgbnVtW2pdLHhpKTsKKyAgICAgIH0KKyAgICAgIG1lbVtvcmQtMV0gPSBNVUxUMTZfMTYobnVtW29yZC0xXSx4aSk7CisgICAgICB5W2ldID0geWk7CisgICB9Cit9CisjZW5kaWYKKworCit2b2lkIHN5bl9wZXJjZXBfemVybzE2KGNvbnN0IHNweF93b3JkMTZfdCAqeHgsIGNvbnN0IHNweF9jb2VmX3QgKmFrLCBjb25zdCBzcHhfY29lZl90ICphd2sxLCBjb25zdCBzcHhfY29lZl90ICphd2syLCBzcHhfd29yZDE2X3QgKnksIGludCBOLCBpbnQgb3JkLCBjaGFyICpzdGFjaykKK3sKKyAgIGludCBpOworICAgVkFSREVDTChzcHhfbWVtX3QgKm1lbSk7CisgICBBTExPQyhtZW0sIG9yZCwgc3B4X21lbV90KTsKKyAgIGZvciAoaT0wO2k8b3JkO2krKykKKyAgICAgIG1lbVtpXT0wOworICAgaWlyX21lbTE2KHh4LCBhaywgeSwgTiwgb3JkLCBtZW0sIHN0YWNrKTsKKyAgIGZvciAoaT0wO2k8b3JkO2krKykKKyAgICAgIG1lbVtpXT0wOworICAgZmlsdGVyX21lbTE2KHksIGF3azEsIGF3azIsIHksIE4sIG9yZCwgbWVtLCBzdGFjayk7Cit9Cit2b2lkIHJlc2lkdWVfcGVyY2VwX3plcm8xNihjb25zdCBzcHhfd29yZDE2X3QgKnh4LCBjb25zdCBzcHhfY29lZl90ICphaywgY29uc3Qgc3B4X2NvZWZfdCAqYXdrMSwgY29uc3Qgc3B4X2NvZWZfdCAqYXdrMiwgc3B4X3dvcmQxNl90ICp5LCBpbnQgTiwgaW50IG9yZCwgY2hhciAqc3RhY2spCit7CisgICBpbnQgaTsKKyAgIFZBUkRFQ0woc3B4X21lbV90ICptZW0pOworICAgQUxMT0MobWVtLCBvcmQsIHNweF9tZW1fdCk7CisgICBmb3IgKGk9MDtpPG9yZDtpKyspCisgICAgICBtZW1baV09MDsKKyAgIGZpbHRlcl9tZW0xNih4eCwgYWssIGF3azEsIHksIE4sIG9yZCwgbWVtLCBzdGFjayk7CisgICBmb3IgKGk9MDtpPG9yZDtpKyspCisgICAgICBtZW1baV09MDsKKyAgIGZpcl9tZW0xNih5LCBhd2syLCB5LCBOLCBvcmQsIG1lbSwgc3RhY2spOworfQorCisKKyNpZm5kZWYgT1ZFUlJJREVfQ09NUFVURV9JTVBVTFNFX1JFU1BPTlNFCit2b2lkIGNvbXB1dGVfaW1wdWxzZV9yZXNwb25zZShjb25zdCBzcHhfY29lZl90ICphaywgY29uc3Qgc3B4X2NvZWZfdCAqYXdrMSwgY29uc3Qgc3B4X2NvZWZfdCAqYXdrMiwgc3B4X3dvcmQxNl90ICp5LCBpbnQgTiwgaW50IG9yZCwgY2hhciAqc3RhY2spCit7CisgICBpbnQgaSxqOworICAgc3B4X3dvcmQxNl90IHkxLCBueTFpLCBueTJpOworICAgVkFSREVDTChzcHhfbWVtX3QgKm1lbTEpOworICAgVkFSREVDTChzcHhfbWVtX3QgKm1lbTIpOworICAgQUxMT0MobWVtMSwgb3JkLCBzcHhfbWVtX3QpOworICAgQUxMT0MobWVtMiwgb3JkLCBzcHhfbWVtX3QpOworICAgCisgICB5WzBdID0gTFBDX1NDQUxJTkc7CisgICBmb3IgKGk9MDtpPG9yZDtpKyspCisgICAgICB5W2krMV0gPSBhd2sxW2ldOworICAgaSsrOworICAgZm9yICg7aTxOO2krKykKKyAgICAgIHlbaV0gPSBWRVJZX1NNQUxMOworICAgZm9yIChpPTA7aTxvcmQ7aSsrKQorICAgICAgbWVtMVtpXSA9IG1lbTJbaV0gPSAwOworICAgZm9yIChpPTA7aTxOO2krKykKKyAgIHsKKyAgICAgIHkxID0gQUREMTYoeVtpXSwgRVhUUkFDVDE2KFBTSFIzMihtZW0xWzBdLExQQ19TSElGVCkpKTsKKyAgICAgIG55MWkgPSBORUcxNih5MSk7CisgICAgICB5W2ldID0gUFNIUjMyKEFERDMyKFNITDMyKEVYVEVORDMyKHkxKSxMUENfU0hJRlQrMSksbWVtMlswXSksTFBDX1NISUZUKTsKKyAgICAgIG55MmkgPSBORUcxNih5W2ldKTsKKyAgICAgIGZvciAoaj0wO2o8b3JkLTE7aisrKQorICAgICAgeworICAgICAgICAgbWVtMVtqXSA9IE1BQzE2XzE2KG1lbTFbaisxXSwgYXdrMltqXSxueTFpKTsKKyAgICAgICAgIG1lbTJbal0gPSBNQUMxNl8xNihtZW0yW2orMV0sIGFrW2pdLG55MmkpOworICAgICAgfQorICAgICAgbWVtMVtvcmQtMV0gPSBNVUxUMTZfMTYoYXdrMltvcmQtMV0sbnkxaSk7CisgICAgICBtZW0yW29yZC0xXSA9IE1VTFQxNl8xNihha1tvcmQtMV0sbnkyaSk7CisgICB9Cit9CisjZW5kaWYKKworLyogRGVjb21wb3NlcyBhIHNpZ25hbCBpbnRvIGxvdy1iYW5kIGFuZCBoaWdoLWJhbmQgdXNpbmcgYSBRTUYgKi8KK3ZvaWQgcW1mX2RlY29tcChjb25zdCBzcHhfd29yZDE2X3QgKnh4LCBjb25zdCBzcHhfd29yZDE2X3QgKmFhLCBzcHhfd29yZDE2X3QgKnkxLCBzcHhfd29yZDE2X3QgKnkyLCBpbnQgTiwgaW50IE0sIHNweF93b3JkMTZfdCAqbWVtLCBjaGFyICpzdGFjaykKK3sKKyAgIGludCBpLGosayxNMjsKKyAgIFZBUkRFQ0woc3B4X3dvcmQxNl90ICphKTsKKyAgIFZBUkRFQ0woc3B4X3dvcmQxNl90ICp4KTsKKyAgIHNweF93b3JkMTZfdCAqeDI7CisgICAKKyAgIEFMTE9DKGEsIE0sIHNweF93b3JkMTZfdCk7CisgICBBTExPQyh4LCBOK00tMSwgc3B4X3dvcmQxNl90KTsKKyAgIHgyPXgrTS0xOworICAgTTI9TT4+MTsKKyAgIGZvciAoaT0wO2k8TTtpKyspCisgICAgICBhW00taS0xXT0gYWFbaV07CisgICBmb3IgKGk9MDtpPE0tMTtpKyspCisgICAgICB4W2ldPW1lbVtNLWktMl07CisgICBmb3IgKGk9MDtpPE47aSsrKQorICAgICAgeFtpK00tMV09U0hSMTYoeHhbaV0sMSk7CisgICBmb3IgKGk9MDtpPE0tMTtpKyspCisgICAgICBtZW1baV09U0hSMTYoeHhbTi1pLTFdLDEpOworICAgZm9yIChpPTAsaz0wO2k8TjtpKz0yLGsrKykKKyAgIHsKKyAgICAgIHNweF93b3JkMzJfdCB5MWs9MCwgeTJrPTA7CisgICAgICBmb3IgKGo9MDtqPE0yO2orKykKKyAgICAgIHsKKyAgICAgICAgIHkxaz1BREQzMih5MWssTVVMVDE2XzE2KGFbal0sQUREMTYoeFtpK2pdLHgyW2ktal0pKSk7CisgICAgICAgICB5Mms9U1VCMzIoeTJrLE1VTFQxNl8xNihhW2pdLFNVQjE2KHhbaStqXSx4MltpLWpdKSkpOworICAgICAgICAgaisrOworICAgICAgICAgeTFrPUFERDMyKHkxayxNVUxUMTZfMTYoYVtqXSxBREQxNih4W2kral0seDJbaS1qXSkpKTsKKyAgICAgICAgIHkyaz1BREQzMih5MmssTVVMVDE2XzE2KGFbal0sU1VCMTYoeFtpK2pdLHgyW2ktal0pKSk7CisgICAgICB9CisgICAgICB5MVtrXSA9IEVYVFJBQ1QxNihTQVRVUkFURShQU0hSMzIoeTFrLDE1KSwzMjc2NykpOworICAgICAgeTJba10gPSBFWFRSQUNUMTYoU0FUVVJBVEUoUFNIUjMyKHkyaywxNSksMzI3NjcpKTsKKyAgIH0KK30KKworLyogUmUtc3ludGhlc2lzZWQgYSBzaWduYWwgZnJvbSB0aGUgUU1GIGxvdy1iYW5kIGFuZCBoaWdoLWJhbmQgc2lnbmFscyAqLwordm9pZCBxbWZfc3ludGgoY29uc3Qgc3B4X3dvcmQxNl90ICp4MSwgY29uc3Qgc3B4X3dvcmQxNl90ICp4MiwgY29uc3Qgc3B4X3dvcmQxNl90ICphLCBzcHhfd29yZDE2X3QgKnksIGludCBOLCBpbnQgTSwgc3B4X3dvcmQzMl90ICptZW0xLCBzcHhfd29yZDMyX3QgKm1lbTIsIGNoYXIgKnN0YWNrKQorICAgLyogYXNzdW1wdGlvbnM6CisgICAgICBhbGwgb2RkIHhbaV0gYXJlIHplcm8gLS0gd2VsbCwgYWN0dWFsbHkgdGhleSBhcmUgbGVmdCBvdXQgb2YgdGhlIGFycmF5IG5vdworICAgICAgTiBhbmQgTSBhcmUgbXVsdGlwbGVzIG9mIDQgKi8KK3sKKyAgIGludCBpLCBqOworICAgaW50IE0yLCBOMjsKKyAgIFZBUkRFQ0woc3B4X3dvcmQxNl90ICp4eDEpOworICAgVkFSREVDTChzcHhfd29yZDE2X3QgKnh4Mik7CisgICAKKyAgIE0yID0gTT4+MTsKKyAgIE4yID0gTj4+MTsKKyAgIEFMTE9DKHh4MSwgTTIrTjIsIHNweF93b3JkMTZfdCk7CisgICBBTExPQyh4eDIsIE0yK04yLCBzcHhfd29yZDE2X3QpOworCisgICBmb3IgKGkgPSAwOyBpIDwgTjI7IGkrKykKKyAgICAgIHh4MVtpXSA9IHgxW04yLTEtaV07CisgICBmb3IgKGkgPSAwOyBpIDwgTTI7IGkrKykKKyAgICAgIHh4MVtOMitpXSA9IG1lbTFbMippKzFdOworICAgZm9yIChpID0gMDsgaSA8IE4yOyBpKyspCisgICAgICB4eDJbaV0gPSB4MltOMi0xLWldOworICAgZm9yIChpID0gMDsgaSA8IE0yOyBpKyspCisgICAgICB4eDJbTjIraV0gPSBtZW0yWzIqaSsxXTsKKworICAgZm9yIChpID0gMDsgaSA8IE4yOyBpICs9IDIpIHsKKyAgICAgIHNweF9zaWdfdCB5MCwgeTEsIHkyLCB5MzsKKyAgICAgIHNweF93b3JkMTZfdCB4MTAsIHgyMDsKKworICAgICAgeTAgPSB5MSA9IHkyID0geTMgPSAwOworICAgICAgeDEwID0geHgxW04yLTItaV07CisgICAgICB4MjAgPSB4eDJbTjItMi1pXTsKKworICAgICAgZm9yIChqID0gMDsgaiA8IE0yOyBqICs9IDIpIHsKKyAgICAgICAgIHNweF93b3JkMTZfdCB4MTEsIHgyMTsKKyAgICAgICAgIHNweF93b3JkMTZfdCBhMCwgYTE7CisKKyAgICAgICAgIGEwID0gYVsyKmpdOworICAgICAgICAgYTEgPSBhWzIqaisxXTsKKyAgICAgICAgIHgxMSA9IHh4MVtOMi0xK2otaV07CisgICAgICAgICB4MjEgPSB4eDJbTjItMStqLWldOworCisjaWZkZWYgRklYRURfUE9JTlQKKyAgICAgICAgIC8qIFdlIG11bHRpcGx5IHR3aWNlIGJ5IHRoZSBzYW1lIGNvZWYgdG8gYXZvaWQgb3ZlcmZsb3dzICovCisgICAgICAgICB5MCA9IE1BQzE2XzE2KE1BQzE2XzE2KHkwLCBhMCwgeDExKSwgTkVHMTYoYTApLCB4MjEpOworICAgICAgICAgeTEgPSBNQUMxNl8xNihNQUMxNl8xNih5MSwgYTEsIHgxMSksIGExLCB4MjEpOworICAgICAgICAgeTIgPSBNQUMxNl8xNihNQUMxNl8xNih5MiwgYTAsIHgxMCksIE5FRzE2KGEwKSwgeDIwKTsKKyAgICAgICAgIHkzID0gTUFDMTZfMTYoTUFDMTZfMTYoeTMsIGExLCB4MTApLCBhMSwgeDIwKTsKKyNlbHNlCisgICAgICAgICB5MCA9IEFERDMyKHkwLE1VTFQxNl8xNihhMCwgeDExLXgyMSkpOworICAgICAgICAgeTEgPSBBREQzMih5MSxNVUxUMTZfMTYoYTEsIHgxMSt4MjEpKTsKKyAgICAgICAgIHkyID0gQUREMzIoeTIsTVVMVDE2XzE2KGEwLCB4MTAteDIwKSk7CisgICAgICAgICB5MyA9IEFERDMyKHkzLE1VTFQxNl8xNihhMSwgeDEwK3gyMCkpOworI2VuZGlmCisgICAgICAgICBhMCA9IGFbMipqKzJdOworICAgICAgICAgYTEgPSBhWzIqaiszXTsKKyAgICAgICAgIHgxMCA9IHh4MVtOMitqLWldOworICAgICAgICAgeDIwID0geHgyW04yK2otaV07CisKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgICAgICAgLyogV2UgbXVsdGlwbHkgdHdpY2UgYnkgdGhlIHNhbWUgY29lZiB0byBhdm9pZCBvdmVyZmxvd3MgKi8KKyAgICAgICAgIHkwID0gTUFDMTZfMTYoTUFDMTZfMTYoeTAsIGEwLCB4MTApLCBORUcxNihhMCksIHgyMCk7CisgICAgICAgICB5MSA9IE1BQzE2XzE2KE1BQzE2XzE2KHkxLCBhMSwgeDEwKSwgYTEsIHgyMCk7CisgICAgICAgICB5MiA9IE1BQzE2XzE2KE1BQzE2XzE2KHkyLCBhMCwgeDExKSwgTkVHMTYoYTApLCB4MjEpOworICAgICAgICAgeTMgPSBNQUMxNl8xNihNQUMxNl8xNih5MywgYTEsIHgxMSksIGExLCB4MjEpOworI2Vsc2UKKyAgICAgICAgIHkwID0gQUREMzIoeTAsTVVMVDE2XzE2KGEwLCB4MTAteDIwKSk7CisgICAgICAgICB5MSA9IEFERDMyKHkxLE1VTFQxNl8xNihhMSwgeDEwK3gyMCkpOworICAgICAgICAgeTIgPSBBREQzMih5MixNVUxUMTZfMTYoYTAsIHgxMS14MjEpKTsKKyAgICAgICAgIHkzID0gQUREMzIoeTMsTVVMVDE2XzE2KGExLCB4MTEreDIxKSk7CisjZW5kaWYKKyAgICAgIH0KKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgICAgeVsyKmldID0gRVhUUkFDVDE2KFNBVFVSQVRFMzIoUFNIUjMyKHkwLDE1KSwzMjc2NykpOworICAgICAgeVsyKmkrMV0gPSBFWFRSQUNUMTYoU0FUVVJBVEUzMihQU0hSMzIoeTEsMTUpLDMyNzY3KSk7CisgICAgICB5WzIqaSsyXSA9IEVYVFJBQ1QxNihTQVRVUkFURTMyKFBTSFIzMih5MiwxNSksMzI3NjcpKTsKKyAgICAgIHlbMippKzNdID0gRVhUUkFDVDE2KFNBVFVSQVRFMzIoUFNIUjMyKHkzLDE1KSwzMjc2NykpOworI2Vsc2UKKyAgICAgIC8qIE5vcm1hbGl6ZSB1cCBleHBsaWNpdGx5IGlmIHdlJ3JlIGluIGZsb2F0ICovCisgICAgICB5WzIqaV0gPSAyLmYqeTA7CisgICAgICB5WzIqaSsxXSA9IDIuZip5MTsKKyAgICAgIHlbMippKzJdID0gMi5mKnkyOworICAgICAgeVsyKmkrM10gPSAyLmYqeTM7CisjZW5kaWYKKyAgIH0KKworICAgZm9yIChpID0gMDsgaSA8IE0yOyBpKyspCisgICAgICBtZW0xWzIqaSsxXSA9IHh4MVtpXTsKKyAgIGZvciAoaSA9IDA7IGkgPCBNMjsgaSsrKQorICAgICAgbWVtMlsyKmkrMV0gPSB4eDJbaV07Cit9CisKKyNpZmRlZiBGSVhFRF9QT0lOVAorI2lmIDAKK2NvbnN0IHNweF93b3JkMTZfdCBzaGlmdF9maWx0WzNdWzddID0ge3stMzMsICAgIDEwNDMsICAgLTQ1NTEsICAgMTk5NTksICAgMTk5NTksICAgLTQ1NTEsICAgIDEwNDN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey05OCwgICAgMTEzMywgICAtNDQyNSwgICAyOTE3OSwgICAgODg5NSwgICAtMjMyOCwgICAgIDQ0NH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7NDQ0LCAgIC0yMzI4LCAgICA4ODk1LCAgIDI5MTc5LCAgIC00NDI1LCAgICAxMTMzLCAgICAgLTk4fX07CisjZWxzZQorY29uc3Qgc3B4X3dvcmQxNl90IHNoaWZ0X2ZpbHRbM11bN10gPSB7ey0zOTAsICAgIDE1NDAsICAgLTQ5OTMsICAgMjAxMjMsICAgMjAxMjMsICAgLTQ5OTMsICAgIDE1NDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7LTEwNjQsICAgIDI4MTcsICAgLTY2OTQsICAgMzE1ODksICAgIDY4MzcsICAgIC05OTAsICAgIC0yMDl9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey0yMDksICAgIC05OTAsICAgIDY4MzcsICAgMzE1ODksICAgLTY2OTQsICAgIDI4MTcsICAgLTEwNjR9fTsKKyNlbmRpZgorI2Vsc2UKKyNpZiAwCitjb25zdCBmbG9hdCBzaGlmdF9maWx0WzNdWzddID0ge3stOS45MzY5ZS0wNCwgMy4xODMxZS0wMiwgLTEuMzg4OWUtMDEsIDYuMDkxMGUtMDEsIDYuMDkxMGUtMDEsIC0xLjM4ODllLTAxLCAzLjE4MzFlLTAyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgey0wLjAwMjk5MzcsIDAuMDM0NTYxMywgLTAuMTM1MDQ3NCwgMC44OTA0NzkzLCAwLjI3MTQ0NzksIC0wLjA3MTAzMDQsIDAuMDEzNTQwM30sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHswLjAxMzU0MDMsIC0wLjA3MTAzMDQsIDAuMjcxNDQ3OSwgMC44OTA0NzkzLCAtMC4xMzUwNDc0LCAwLjAzNDU2MTMsICAtMC4wMDI5OTM3fX07CisjZWxzZQorY29uc3QgZmxvYXQgc2hpZnRfZmlsdFszXVs3XSA9IHt7LTAuMDExOTE1ZiwgMC4wNDY5OTVmLCAtMC4xNTIzNzNmLCAwLjYxNDEwOGYsIDAuNjE0MTA4ZiwgLTAuMTUyMzczZiwgMC4wNDY5OTVmfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgey0wLjAzMjQ4NTVmLCAwLjA4NTk3NjhmLCAtMC4yMDQyOTg2ZiwgMC45NjQwMjk3ZiwgMC4yMDg2NDIwZiwgLTAuMDMwMjA1NGYsIC0wLjAwNjM2NDZmfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgey0wLjAwNjM2NDZmLCAtMC4wMzAyMDU0ZiwgMC4yMDg2NDIwZiwgMC45NjQwMjk3ZiwgLTAuMjA0Mjk4NmYsIDAuMDg1OTc2OGYsIC0wLjAzMjQ4NTVmfX07CisjZW5kaWYKKyNlbmRpZgorCitpbnQgaW50ZXJwX3BpdGNoKAorc3B4X3dvcmQxNl90ICpleGMsICAgICAgICAgIC8qZGVjb2RlZCBleGNpdGF0aW9uKi8KK3NweF93b3JkMTZfdCAqaW50ZXJwLCAgICAgICAgICAvKmRlY29kZWQgZXhjaXRhdGlvbiovCitpbnQgcGl0Y2gsICAgICAgICAgICAgICAgLypwaXRjaCBwZXJpb2QqLworaW50IGxlbgorKQoreworICAgaW50IGksaixrOworICAgc3B4X3dvcmQzMl90IGNvcnJbNF1bN107CisgICBzcHhfd29yZDMyX3QgbWF4Y29ycjsKKyAgIGludCBtYXhpLCBtYXhqOworICAgZm9yIChpPTA7aTw3O2krKykKKyAgIHsKKyAgICAgIGNvcnJbMF1baV0gPSBpbm5lcl9wcm9kKGV4YywgZXhjLXBpdGNoLTMraSwgbGVuKTsKKyAgIH0KKyAgIGZvciAoaT0wO2k8MztpKyspCisgICB7CisgICAgICBmb3IgKGo9MDtqPDc7aisrKQorICAgICAgeworICAgICAgICAgaW50IGkxLCBpMjsKKyAgICAgICAgIHNweF93b3JkMzJfdCB0bXA9MDsKKyAgICAgICAgIGkxID0gMy1qOworICAgICAgICAgaWYgKGkxPDApCisgICAgICAgICAgICBpMSA9IDA7CisgICAgICAgICBpMiA9IDEwLWo7CisgICAgICAgICBpZiAoaTI+NykKKyAgICAgICAgICAgIGkyID0gNzsKKyAgICAgICAgIGZvciAoaz1pMTtrPGkyO2srKykKKyAgICAgICAgICAgIHRtcCArPSBNVUxUMTZfMzJfUTE1KHNoaWZ0X2ZpbHRbaV1ba10sY29yclswXVtqK2stM10pOworICAgICAgICAgY29ycltpKzFdW2pdID0gdG1wOworICAgICAgfQorICAgfQorICAgbWF4aT1tYXhqPTA7CisgICBtYXhjb3JyID0gY29yclswXVswXTsKKyAgIGZvciAoaT0wO2k8NDtpKyspCisgICB7CisgICAgICBmb3IgKGo9MDtqPDc7aisrKQorICAgICAgeworICAgICAgICAgaWYgKGNvcnJbaV1bal0gPiBtYXhjb3JyKQorICAgICAgICAgeworICAgICAgICAgICAgbWF4Y29yciA9IGNvcnJbaV1bal07CisgICAgICAgICAgICBtYXhpPWk7CisgICAgICAgICAgICBtYXhqPWo7CisgICAgICAgICB9CisgICAgICB9CisgICB9CisgICBmb3IgKGk9MDtpPGxlbjtpKyspCisgICB7CisgICAgICBzcHhfd29yZDMyX3QgdG1wID0gMDsKKyAgICAgIGlmIChtYXhpPjApCisgICAgICB7CisgICAgICAgICBmb3IgKGs9MDtrPDc7aysrKQorICAgICAgICAgeworICAgICAgICAgICAgdG1wICs9IE1VTFQxNl8xNihleGNbaS0ocGl0Y2gtbWF4aiszKStrLTNdLHNoaWZ0X2ZpbHRbbWF4aS0xXVtrXSk7CisgICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAgdG1wID0gU0hMMzIoZXhjW2ktKHBpdGNoLW1heGorMyldLDE1KTsKKyAgICAgIH0KKyAgICAgIGludGVycFtpXSA9IFBTSFIzMih0bXAsMTUpOworICAgfQorICAgcmV0dXJuIHBpdGNoLW1heGorMzsKK30KKwordm9pZCBtdWx0aWNvbWIoCitzcHhfd29yZDE2X3QgKmV4YywgICAgICAgICAgLypkZWNvZGVkIGV4Y2l0YXRpb24qLworc3B4X3dvcmQxNl90ICpuZXdfZXhjLCAgICAgIC8qZW5oYW5jZWQgZXhjaXRhdGlvbiovCitzcHhfY29lZl90ICphaywgICAgICAgICAgIC8qTFBDIGZpbHRlciBjb2VmcyovCitpbnQgcCwgICAgICAgICAgICAgICAvKkxQQyBvcmRlciovCitpbnQgbnNmLCAgICAgICAgICAgICAvKnN1Yi1mcmFtZSBzaXplKi8KK2ludCBwaXRjaCwgICAgICAgICAgIC8qcGl0Y2ggcGVyaW9kKi8KK2ludCBtYXhfcGl0Y2gsCitzcHhfd29yZDE2X3QgIGNvbWJfZ2FpbiwgICAgLypnYWluIG9mIGNvbWIgZmlsdGVyKi8KK2NoYXIgKnN0YWNrCispCit7CisgICBpbnQgaTsgCisgICBWQVJERUNMKHNweF93b3JkMTZfdCAqaWV4Yyk7CisgICBzcHhfd29yZDE2X3Qgb2xkX2VuZXIsIG5ld19lbmVyOworICAgaW50IGNvcnJfcGl0Y2g7CisgICAKKyAgIHNweF93b3JkMTZfdCBpZXhjMF9tYWcsIGlleGMxX21hZywgZXhjX21hZzsKKyAgIHNweF93b3JkMzJfdCBjb3JyMCwgY29ycjE7CisgICBzcHhfd29yZDE2X3QgZ2FpbjAsIGdhaW4xOworICAgc3B4X3dvcmQxNl90IHBnYWluMSwgcGdhaW4yOworICAgc3B4X3dvcmQxNl90IGMxLCBjMjsKKyAgIHNweF93b3JkMTZfdCBnMSwgZzI7CisgICBzcHhfd29yZDE2X3QgbmdhaW47CisgICBzcHhfd29yZDE2X3QgZ2cxLCBnZzI7CisjaWZkZWYgRklYRURfUE9JTlQKKyAgIGludCBzY2FsZWRvd249MDsKKyNlbmRpZgorI2lmIDAgLyogU2V0IHRvIDEgdG8gZW5hYmxlIGZ1bGwgcGl0Y2ggc2VhcmNoICovCisgICBpbnQgbm9sX3BpdGNoWzZdOworICAgc3B4X3dvcmQxNl90IG5vbF9waXRjaF9jb2VmWzZdOworICAgc3B4X3dvcmQxNl90IG9sX3BpdGNoX2NvZWY7CisgICBvcGVuX2xvb3BfbmJlc3RfcGl0Y2goZXhjLCAyMCwgMTIwLCBuc2YsIAorICAgICAgICAgICAgICAgICAgICAgICAgIG5vbF9waXRjaCwgbm9sX3BpdGNoX2NvZWYsIDYsIHN0YWNrKTsKKyAgIGNvcnJfcGl0Y2g9bm9sX3BpdGNoWzBdOworICAgb2xfcGl0Y2hfY29lZiA9IG5vbF9waXRjaF9jb2VmWzBdOworICAgLypUcnkgdG8gcmVtb3ZlIHBpdGNoIG11bHRpcGxlcyovCisgICBmb3IgKGk9MTtpPDY7aSsrKQorICAgeworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICBpZiAoKG5vbF9waXRjaF9jb2VmW2ldPk1VTFQxNl8xNl9RMTUobm9sX3BpdGNoX2NvZWZbMF0sMTk2NjEpKSAmJiAKKyNlbHNlCisgICAgICBpZiAoKG5vbF9waXRjaF9jb2VmW2ldPi42Km5vbF9waXRjaF9jb2VmWzBdKSAmJiAKKyNlbmRpZgorICAgICAgICAgKEFCUygyKm5vbF9waXRjaFtpXS1jb3JyX3BpdGNoKTw9MiB8fCBBQlMoMypub2xfcGl0Y2hbaV0tY29ycl9waXRjaCk8PTMgfHwgCisgICAgICAgICBBQlMoNCpub2xfcGl0Y2hbaV0tY29ycl9waXRjaCk8PTQgfHwgQUJTKDUqbm9sX3BpdGNoW2ldLWNvcnJfcGl0Y2gpPD01KSkKKyAgICAgIHsKKyAgICAgICAgIGNvcnJfcGl0Y2ggPSBub2xfcGl0Y2hbaV07CisgICAgICB9CisgICB9CisjZWxzZQorICAgY29ycl9waXRjaCA9IHBpdGNoOworI2VuZGlmCisgICAKKyAgIEFMTE9DKGlleGMsIDIqbnNmLCBzcHhfd29yZDE2X3QpOworICAgCisgICBpbnRlcnBfcGl0Y2goZXhjLCBpZXhjLCBjb3JyX3BpdGNoLCA4MCk7CisgICBpZiAoY29ycl9waXRjaD5tYXhfcGl0Y2gpCisgICAgICBpbnRlcnBfcGl0Y2goZXhjLCBpZXhjK25zZiwgMipjb3JyX3BpdGNoLCA4MCk7CisgICBlbHNlCisgICAgICBpbnRlcnBfcGl0Y2goZXhjLCBpZXhjK25zZiwgLWNvcnJfcGl0Y2gsIDgwKTsKKworI2lmZGVmIEZJWEVEX1BPSU5UCisgICBmb3IgKGk9MDtpPG5zZjtpKyspCisgICB7CisgICAgICBpZiAoQUJTMTYoZXhjW2ldKT4xNjM4MykKKyAgICAgIHsKKyAgICAgICAgIHNjYWxlZG93biA9IDE7CisgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgIH0KKyAgIGlmIChzY2FsZWRvd24pCisgICB7CisgICAgICBmb3IgKGk9MDtpPG5zZjtpKyspCisgICAgICAgICBleGNbaV0gPSBTSFIxNihleGNbaV0sMSk7CisgICAgICBmb3IgKGk9MDtpPDIqbnNmO2krKykKKyAgICAgICAgIGlleGNbaV0gPSBTSFIxNihpZXhjW2ldLDEpOworICAgfQorI2VuZGlmCisgICAvKmludGVycF9waXRjaChleGMsIGlleGMrMipuc2YsIDIqY29ycl9waXRjaCwgODApOyovCisgICAKKyAgIC8qcHJpbnRmICgiJWQgJWQgJWZcbiIsIHBpdGNoLCBjb3JyX3BpdGNoLCBtYXhfY29yciplbmVyXzEpOyovCisgICBpZXhjMF9tYWcgPSBzcHhfc3FydCgxMDAwK2lubmVyX3Byb2QoaWV4YyxpZXhjLG5zZikpOworICAgaWV4YzFfbWFnID0gc3B4X3NxcnQoMTAwMCtpbm5lcl9wcm9kKGlleGMrbnNmLGlleGMrbnNmLG5zZikpOworICAgZXhjX21hZyA9IHNweF9zcXJ0KDEraW5uZXJfcHJvZChleGMsZXhjLG5zZikpOworICAgY29ycjAgID0gaW5uZXJfcHJvZChpZXhjLGV4Yyxuc2YpOworICAgaWYgKGNvcnIwPDApCisgICAgICBjb3JyMD0wOworICAgY29ycjEgPSBpbm5lcl9wcm9kKGlleGMrbnNmLGV4Yyxuc2YpOworICAgaWYgKGNvcnIxPDApCisgICAgICBjb3JyMT0wOworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAvKiBEb2Vzbid0IGNvc3QgbXVjaCB0byBsaW1pdCB0aGUgcmF0aW8gYW5kIGl0IG1ha2VzIHRoZSByZXN0IGVhc2llciAqLworICAgaWYgKFNITDMyKEVYVEVORDMyKGlleGMwX21hZyksNikgPCBFWFRFTkQzMihleGNfbWFnKSkKKyAgICAgIGlleGMwX21hZyA9IEFERDE2KDEsUFNIUjE2KGV4Y19tYWcsNikpOworICAgaWYgKFNITDMyKEVYVEVORDMyKGlleGMxX21hZyksNikgPCBFWFRFTkQzMihleGNfbWFnKSkKKyAgICAgIGlleGMxX21hZyA9IEFERDE2KDEsUFNIUjE2KGV4Y19tYWcsNikpOworI2VuZGlmCisgICBpZiAoY29ycjAgPiBNVUxUMTZfMTYoaWV4YzBfbWFnLGV4Y19tYWcpKQorICAgICAgcGdhaW4xID0gUUNPTlNUMTYoMS4sIDE0KTsKKyAgIGVsc2UKKyAgICAgIHBnYWluMSA9IFBESVYzMl8xNihTSEwzMihQRElWMzIoY29ycjAsIGV4Y19tYWcpLDE0KSxpZXhjMF9tYWcpOworICAgaWYgKGNvcnIxID4gTVVMVDE2XzE2KGlleGMxX21hZyxleGNfbWFnKSkKKyAgICAgIHBnYWluMiA9IFFDT05TVDE2KDEuLCAxNCk7CisgICBlbHNlCisgICAgICBwZ2FpbjIgPSBQRElWMzJfMTYoU0hMMzIoUERJVjMyKGNvcnIxLCBleGNfbWFnKSwxNCksaWV4YzFfbWFnKTsKKyAgIGdnMSA9IFBESVYzMl8xNihTSEwzMihFWFRFTkQzMihleGNfbWFnKSw4KSwgaWV4YzBfbWFnKTsKKyAgIGdnMiA9IFBESVYzMl8xNihTSEwzMihFWFRFTkQzMihleGNfbWFnKSw4KSwgaWV4YzFfbWFnKTsKKyAgIGlmIChjb21iX2dhaW4+MCkKKyAgIHsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgICAgYzEgPSAoTVVMVDE2XzE2X1ExNShRQ09OU1QxNiguNCwxNSksY29tYl9nYWluKStRQ09OU1QxNiguMDcsMTUpKTsKKyAgICAgIGMyID0gUUNPTlNUMTYoLjUsMTUpK01VTFQxNl8xNl9RMTQoUUNPTlNUMTYoMS43MiwxNCksKGMxLVFDT05TVDE2KC4wNywxNSkpKTsKKyNlbHNlCisgICAgICBjMSA9IC40KmNvbWJfZ2FpbisuMDc7CisgICAgICBjMiA9IC41KzEuNzIqKGMxLS4wNyk7CisjZW5kaWYKKyAgIH0gZWxzZSAKKyAgIHsKKyAgICAgIGMxPWMyPTA7CisgICB9CisjaWZkZWYgRklYRURfUE9JTlQKKyAgIGcxID0gMzI3NjcgLSBNVUxUMTZfMTZfUTEzKE1VTFQxNl8xNl9RMTUoYzIsIHBnYWluMSkscGdhaW4xKTsKKyAgIGcyID0gMzI3NjcgLSBNVUxUMTZfMTZfUTEzKE1VTFQxNl8xNl9RMTUoYzIsIHBnYWluMikscGdhaW4yKTsKKyNlbHNlCisgICBnMSA9IDEtYzIqcGdhaW4xKnBnYWluMTsKKyAgIGcyID0gMS1jMipwZ2FpbjIqcGdhaW4yOworI2VuZGlmCisgICBpZiAoZzE8YzEpCisgICAgICBnMSA9IGMxOworICAgaWYgKGcyPGMxKQorICAgICAgZzIgPSBjMTsKKyAgIGcxID0gKHNweF93b3JkMTZfdClQRElWMzJfMTYoU0hMMzIoRVhURU5EMzIoYzEpLDE0KSwoc3B4X3dvcmQxNl90KWcxKTsKKyAgIGcyID0gKHNweF93b3JkMTZfdClQRElWMzJfMTYoU0hMMzIoRVhURU5EMzIoYzEpLDE0KSwoc3B4X3dvcmQxNl90KWcyKTsKKyAgIGlmIChjb3JyX3BpdGNoPm1heF9waXRjaCkKKyAgIHsKKyAgICAgIGdhaW4wID0gTVVMVDE2XzE2X1ExNShRQ09OU1QxNiguNywxNSksTVVMVDE2XzE2X1ExNChnMSxnZzEpKTsKKyAgICAgIGdhaW4xID0gTVVMVDE2XzE2X1ExNShRQ09OU1QxNiguMywxNSksTVVMVDE2XzE2X1ExNChnMixnZzIpKTsKKyAgIH0gZWxzZSB7CisgICAgICBnYWluMCA9IE1VTFQxNl8xNl9RMTUoUUNPTlNUMTYoLjYsMTUpLE1VTFQxNl8xNl9RMTQoZzEsZ2cxKSk7CisgICAgICBnYWluMSA9IE1VTFQxNl8xNl9RMTUoUUNPTlNUMTYoLjYsMTUpLE1VTFQxNl8xNl9RMTQoZzIsZ2cyKSk7CisgICB9CisgICBmb3IgKGk9MDtpPG5zZjtpKyspCisgICAgICBuZXdfZXhjW2ldID0gQUREMTYoZXhjW2ldLCBFWFRSQUNUMTYoUFNIUjMyKEFERDMyKE1VTFQxNl8xNihnYWluMCxpZXhjW2ldKSwgTVVMVDE2XzE2KGdhaW4xLGlleGNbaStuc2ZdKSksOCkpKTsKKyAgIC8qIEZJWE1FOiBjb21wdXRlX3JtczE2IGlzIGN1cnJlbnRseSBub3QgcXVpdGUgYWNjdXJhdGUgZW5vdWdoIChidXQgY2xvc2UpICovCisgICBuZXdfZW5lciA9IGNvbXB1dGVfcm1zMTYobmV3X2V4YywgbnNmKTsKKyAgIG9sZF9lbmVyID0gY29tcHV0ZV9ybXMxNihleGMsIG5zZik7CisgICAKKyAgIGlmIChvbGRfZW5lciA8IDEpCisgICAgICBvbGRfZW5lciA9IDE7CisgICBpZiAobmV3X2VuZXIgPCAxKQorICAgICAgbmV3X2VuZXIgPSAxOworICAgaWYgKG9sZF9lbmVyID4gbmV3X2VuZXIpCisgICAgICBvbGRfZW5lciA9IG5ld19lbmVyOworICAgbmdhaW4gPSBQRElWMzJfMTYoU0hMMzIoRVhURU5EMzIob2xkX2VuZXIpLDE0KSxuZXdfZW5lcik7CisgICAKKyAgIGZvciAoaT0wO2k8bnNmO2krKykKKyAgICAgIG5ld19leGNbaV0gPSBNVUxUMTZfMTZfUTE0KG5nYWluLCBuZXdfZXhjW2ldKTsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgaWYgKHNjYWxlZG93bikKKyAgIHsKKyAgICAgIGZvciAoaT0wO2k8bnNmO2krKykKKyAgICAgICAgIGV4Y1tpXSA9IFNITDE2KGV4Y1tpXSwxKTsKKyAgICAgIGZvciAoaT0wO2k8bnNmO2krKykKKyAgICAgICAgIG5ld19leGNbaV0gPSBTSEwxNihTQVRVUkFURTE2KG5ld19leGNbaV0sMTYzODMpLDEpOworICAgfQorI2VuZGlmCit9CisKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2ZpbHRlcnMuaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2ZpbHRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzYzYTlhCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZmlsdGVycy5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiBKZWFuLU1hcmMgVmFsaW4gKi8KKy8qKgorICAgQGZpbGUgZmlsdGVycy5oCisgICBAYnJpZWYgVmFyaW91cyBhbmFseXNpcy9zeW50aGVzaXMgZmlsdGVycworKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgRklMVEVSU19ICisjZGVmaW5lIEZJTFRFUlNfSAorCisjaW5jbHVkZSAibWlzYy5oIgorCitzcHhfd29yZDE2X3QgY29tcHV0ZV9ybXMoY29uc3Qgc3B4X3NpZ190ICp4LCBpbnQgbGVuKTsKK3NweF93b3JkMTZfdCBjb21wdXRlX3JtczE2KGNvbnN0IHNweF93b3JkMTZfdCAqeCwgaW50IGxlbik7Cit2b2lkIHNpZ25hbF9tdWwoY29uc3Qgc3B4X3NpZ190ICp4LCBzcHhfc2lnX3QgKnksIHNweF93b3JkMzJfdCBzY2FsZSwgaW50IGxlbik7Cit2b2lkIHNpZ25hbF9kaXYoY29uc3Qgc3B4X3dvcmQxNl90ICp4LCBzcHhfd29yZDE2X3QgKnksIHNweF93b3JkMzJfdCBzY2FsZSwgaW50IGxlbik7CisKKyNpZmRlZiBGSVhFRF9QT0lOVAorCitpbnQgbm9ybWFsaXplMTYoY29uc3Qgc3B4X3NpZ190ICp4LCBzcHhfd29yZDE2X3QgKnksIHNweF9zaWdfdCBtYXhfc2NhbGUsIGludCBsZW4pOworCisjZW5kaWYKKworCisjZGVmaW5lIEhJR0hQQVNTX05BUlJPV0JBTkQgMAorI2RlZmluZSBISUdIUEFTU19XSURFQkFORCAyCisjZGVmaW5lIEhJR0hQQVNTX0lOUFVUIDAKKyNkZWZpbmUgSElHSFBBU1NfT1VUUFVUIDEKKyNkZWZpbmUgSElHSFBBU1NfSVJTIDQKKwordm9pZCBoaWdocGFzcyhjb25zdCBzcHhfd29yZDE2X3QgKngsIHNweF93b3JkMTZfdCAqeSwgaW50IGxlbiwgaW50IGZpbHRJRCwgc3B4X21lbV90ICptZW0pOworCisKK3ZvaWQgcW1mX2RlY29tcChjb25zdCBzcHhfd29yZDE2X3QgKnh4LCBjb25zdCBzcHhfd29yZDE2X3QgKmFhLCBzcHhfd29yZDE2X3QgKiwgc3B4X3dvcmQxNl90ICp5MiwgaW50IE4sIGludCBNLCBzcHhfd29yZDE2X3QgKm1lbSwgY2hhciAqc3RhY2spOwordm9pZCBxbWZfc3ludGgoY29uc3Qgc3B4X3dvcmQxNl90ICp4MSwgY29uc3Qgc3B4X3dvcmQxNl90ICp4MiwgY29uc3Qgc3B4X3dvcmQxNl90ICphLCBzcHhfd29yZDE2X3QgKnksIGludCBOLCBpbnQgTSwgc3B4X3dvcmQzMl90ICptZW0xLCBzcHhfd29yZDMyX3QgKm1lbTIsIGNoYXIgKnN0YWNrKTsKKwordm9pZCBmaWx0ZXJfbWVtMTYoY29uc3Qgc3B4X3dvcmQxNl90ICp4LCBjb25zdCBzcHhfY29lZl90ICpudW0sIGNvbnN0IHNweF9jb2VmX3QgKmRlbiwgc3B4X3dvcmQxNl90ICp5LCBpbnQgTiwgaW50IG9yZCwgc3B4X21lbV90ICptZW0sIGNoYXIgKnN0YWNrKTsKK3ZvaWQgaWlyX21lbTE2KGNvbnN0IHNweF93b3JkMTZfdCAqeCwgY29uc3Qgc3B4X2NvZWZfdCAqZGVuLCBzcHhfd29yZDE2X3QgKnksIGludCBOLCBpbnQgb3JkLCBzcHhfbWVtX3QgKm1lbSwgY2hhciAqc3RhY2spOwordm9pZCBmaXJfbWVtMTYoY29uc3Qgc3B4X3dvcmQxNl90ICp4LCBjb25zdCBzcHhfY29lZl90ICpudW0sIHNweF93b3JkMTZfdCAqeSwgaW50IE4sIGludCBvcmQsIHNweF9tZW1fdCAqbWVtLCBjaGFyICpzdGFjayk7CisKKy8qIEFwcGx5IGJhbmR3aWR0aCBleHBhbnNpb24gb24gTFBDIGNvZWYgKi8KK3ZvaWQgYndfbHBjKHNweF93b3JkMTZfdCAsIGNvbnN0IHNweF9jb2VmX3QgKmxwY19pbiwgc3B4X2NvZWZfdCAqbHBjX291dCwgaW50IG9yZGVyKTsKK3ZvaWQgc2FuaXRpemVfdmFsdWVzMzIoc3B4X3dvcmQzMl90ICp2ZWMsIHNweF93b3JkMzJfdCBtaW5fdmFsLCBzcHhfd29yZDMyX3QgbWF4X3ZhbCwgaW50IGxlbik7CisKKwordm9pZCBzeW5fcGVyY2VwX3plcm8xNihjb25zdCBzcHhfd29yZDE2X3QgKnh4LCBjb25zdCBzcHhfY29lZl90ICphaywgY29uc3Qgc3B4X2NvZWZfdCAqYXdrMSwgY29uc3Qgc3B4X2NvZWZfdCAqYXdrMiwgc3B4X3dvcmQxNl90ICp5LCBpbnQgTiwgaW50IG9yZCwgY2hhciAqc3RhY2spOwordm9pZCByZXNpZHVlX3BlcmNlcF96ZXJvMTYoY29uc3Qgc3B4X3dvcmQxNl90ICp4eCwgY29uc3Qgc3B4X2NvZWZfdCAqYWssIGNvbnN0IHNweF9jb2VmX3QgKmF3azEsIGNvbnN0IHNweF9jb2VmX3QgKmF3azIsIHNweF93b3JkMTZfdCAqeSwgaW50IE4sIGludCBvcmQsIGNoYXIgKnN0YWNrKTsKKwordm9pZCBjb21wdXRlX2ltcHVsc2VfcmVzcG9uc2UoY29uc3Qgc3B4X2NvZWZfdCAqYWssIGNvbnN0IHNweF9jb2VmX3QgKmF3azEsIGNvbnN0IHNweF9jb2VmX3QgKmF3azIsIHNweF93b3JkMTZfdCAqeSwgaW50IE4sIGludCBvcmQsIGNoYXIgKnN0YWNrKTsKKwordm9pZCBtdWx0aWNvbWIoCitzcHhfd29yZDE2X3QgKmV4YywgICAgICAgICAgLypkZWNvZGVkIGV4Y2l0YXRpb24qLworc3B4X3dvcmQxNl90ICpuZXdfZXhjLCAgICAgIC8qZW5oYW5jZWQgZXhjaXRhdGlvbiovCitzcHhfY29lZl90ICphaywgICAgICAgICAgIC8qTFBDIGZpbHRlciBjb2VmcyovCitpbnQgcCwgICAgICAgICAgICAgICAvKkxQQyBvcmRlciovCitpbnQgbnNmLCAgICAgICAgICAgICAvKnN1Yi1mcmFtZSBzaXplKi8KK2ludCBwaXRjaCwgICAgICAgICAgIC8qcGl0Y2ggcGVyaW9kKi8KK2ludCBtYXhfcGl0Y2gsICAgLypwaXRjaCBnYWluICgzLXRhcCkqLworc3B4X3dvcmQxNl90ICBjb21iX2dhaW4sICAgIC8qZ2FpbiBvZiBjb21iIGZpbHRlciovCitjaGFyICpzdGFjaworKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9maWx0ZXJzX2FybTQuaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2ZpbHRlcnNfYXJtNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMzg2MTAKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9maWx0ZXJzX2FybTQuaApAQCAtMCwwICsxLDk3IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDQgSmVhbi1NYXJjIFZhbGluICovCisvKioKKyAgIEBmaWxlIGZpbHRlcnNfYXJtNC5oCisgICBAYnJpZWYgVmFyaW91cyBhbmFseXNpcy9zeW50aGVzaXMgZmlsdGVycyAoQVJNNCB2ZXJzaW9uKQorKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNkZWZpbmUgT1ZFUlJJREVfTk9STUFMSVpFMTYKK2ludCBub3JtYWxpemUxNihjb25zdCBzcHhfc2lnX3QgKngsIHNweF93b3JkMTZfdCAqeSwgaW50IG1heF9zY2FsZSwgaW50IGxlbikKK3sKKyAgIGludCBpOworICAgc3B4X3NpZ190IG1heF92YWw9MTsKKyAgIGludCBzaWdfc2hpZnQ7CisgICBpbnQgZGVhZDEsIGRlYWQyLCBkZWFkMywgZGVhZDQsIGRlYWQ1LCBkZWFkNjsKKworICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICAgIlx0bW92ICUxLCAjMSBcbiIKKyAgICAgICAgICJcdG1vdiAlMywgIzAgXG4iCisKKyAgICAgICAgICIubm9ybWFsaXplMTZsb29wMSU9OiBcbiIKKworICAgICAgICAgIlx0bGRyICU0LCBbJTBdLCAjNCBcbiIKKyAgICAgICAgICJcdGNtcHMgJTQsICUxIFxuIgorICAgICAgICAgIlx0bW92Z3QgJTEsICU0IFxuIgorICAgICAgICAgIlx0Y21wcyAlNCwgJTMgXG4iCisgICAgICAgICAiXHRtb3ZsdCAlMywgJTQgXG4iCisKKyAgICAgICAgICJcdHN1YnMgJTIsICUyLCAjMSBcbiIKKyAgICAgICAgICJcdGJuZSAubm9ybWFsaXplMTZsb29wMSU9XG4iCisKKyAgICAgICAgICJcdHJzYiAlMywgJTMsICMwIFxuIgorICAgICAgICAgIlx0Y21wICUxLCAlMyBcbiIKKyAgICAgICAgICJcdG1vdmx0ICUxLCAlMyBcbiIKKyAgIDogIj1yIiAoZGVhZDEpLCAiPXIiIChtYXhfdmFsKSwgIj1yIiAoZGVhZDMpLCAiPXIiIChkZWFkNCksCisgICAiPXIiIChkZWFkNSksICI9ciIgKGRlYWQ2KQorICAgOiAiMCIgKHgpLCAiMiIgKGxlbikKKyAgIDogImNjIik7CisKKyAgIHNpZ19zaGlmdD0wOworICAgd2hpbGUgKG1heF92YWw+bWF4X3NjYWxlKQorICAgeworICAgICAgc2lnX3NoaWZ0Kys7CisgICAgICBtYXhfdmFsID4+PSAxOworICAgfQorICAgCisgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICAiLm5vcm1hbGl6ZTE2bG9vcCU9OiBcbiIKKworICAgICAgICAgIlx0bGRyICU0LCBbJTBdLCAjNCBcbiIKKyAgICAgICAgICJcdGxkciAlNSwgWyUwXSwgIzQgXG4iCisgICAgICAgICAiXHRtb3YgJTQsICU0LCBhc3IgJTMgXG4iCisgICAgICAgICAiXHRzdHJoICU0LCBbJTFdLCAjMiBcbiIKKyAgICAgICAgICJcdGxkciAlNCwgWyUwXSwgIzQgXG4iCisgICAgICAgICAiXHRtb3YgJTUsICU1LCBhc3IgJTMgXG4iCisgICAgICAgICAiXHRzdHJoICU1LCBbJTFdLCAjMiBcbiIKKyAgICAgICAgICJcdGxkciAlNSwgWyUwXSwgIzQgXG4iCisgICAgICAgICAiXHRtb3YgJTQsICU0LCBhc3IgJTMgXG4iCisgICAgICAgICAiXHRzdHJoICU0LCBbJTFdLCAjMiBcbiIKKyAgICAgICAgICJcdHN1YnMgJTIsICUyLCAjMSBcbiIKKyAgICAgICAgICJcdG1vdiAlNSwgJTUsIGFzciAlMyBcbiIKKyAgICAgICAgICJcdHN0cmggJTUsIFslMV0sICMyIFxuIgorCisgICAgICAgICAiXHRiZ2UgLm5vcm1hbGl6ZTE2bG9vcCU9XG4iCisgICA6ICI9ciIgKGRlYWQxKSwgIj1yIiAoZGVhZDIpLCAiPXIiIChkZWFkMyksICI9ciIgKGRlYWQ0KSwKKyAgICI9ciIgKGRlYWQ1KSwgIj1yIiAoZGVhZDYpCisgICA6ICIwIiAoeCksICIxIiAoeSksICIyIiAobGVuPj4yKSwgIjMiIChzaWdfc2hpZnQpCisgICA6ICJjYyIsICJtZW1vcnkiKTsKKyAgIHJldHVybiBzaWdfc2hpZnQ7Cit9CisKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2ZpbHRlcnNfYmZpbi5oIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZmlsdGVyc19iZmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0MzNlZQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2ZpbHRlcnNfYmZpbi5oCkBAIC0wLDAgKzEsNTE1IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDUgQW5hbG9nIERldmljZXMgKi8KKy8qKgorICAgQGZpbGUgZmlsdGVyc19iZmluLmgKKyAgIEBicmllZiBWYXJpb3VzIGFuYWx5c2lzL3N5bnRoZXNpcyBmaWx0ZXJzIChCbGFja2ZpbiB2ZXJzaW9uKQorKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNkZWZpbmUgT1ZFUlJJREVfTk9STUFMSVpFMTYKK2ludCBub3JtYWxpemUxNihjb25zdCBzcHhfc2lnX3QgKngsIHNweF93b3JkMTZfdCAqeSwgc3B4X3NpZ190IG1heF9zY2FsZSwgaW50IGxlbikKK3sKKyAgIHNweF9zaWdfdCBtYXhfdmFsPTE7CisgICBpbnQgc2lnX3NoaWZ0OworICAgX19hc21fXyAKKyAgICgKKyAgICIlMCA9IDA7XG5cdCIKKyAgICJJMCA9ICUxO1xuXHQiCisgICAiTDAgPSAwO1xuXHQiCisgICAiUjEgPSBbSTArK107XG5cdCIKKyAgICJMT09QIG5vcm1fbWF4JT0gTEMwID0gJTI7XG5cdCIKKyAgICJMT09QX0JFR0lOIG5vcm1fbWF4JT07XG5cdCIKKyAgICAgICJSMiA9IEFCUyBSMSB8fCBSMSA9IFtJMCsrXTtcblx0IgorICAgICAgIiUwID0gTUFYKCUwLCBSMik7XG5cdCIKKyAgICJMT09QX0VORCBub3JtX21heCU9O1xuXHQiCisgICA6ICI9JmQiIChtYXhfdmFsKQorICAgOiAiYSIgKHgpLCAiYSIgKGxlbikKKyAgIDogIlIxIiwgIlIyIgorICAgKTsKKworICAgc2lnX3NoaWZ0PTA7CisgICB3aGlsZSAobWF4X3ZhbD5tYXhfc2NhbGUpCisgICB7CisgICAgICBzaWdfc2hpZnQrKzsKKyAgICAgIG1heF92YWwgPj49IDE7CisgICB9CisKKyAgIF9fYXNtX18gX192b2xhdGlsZV9fIAorICAgKAorICAgIkkwID0gJTA7XG5cdCIKKyAgICJMMCA9IDA7XG5cdCIKKyAgICJQMSA9ICUxO1xuXHQiCisgICAiUjAgPSBbSTArK107XG5cdCIKKyAgICJMT09QIG5vcm1fc2hpZnQlPSBMQzAgPSAlMztcblx0IgorICAgIkxPT1BfQkVHSU4gbm9ybV9zaGlmdCU9O1xuXHQiCisgICAgICAiUjEgPSBBU0hJRlQgUjAgYnkgJTIuTCB8fCBSMCA9IFtJMCsrXTtcblx0IgorICAgICAgIldbUDErK10gPSBSMTtcblx0IgorICAgIkxPT1BfRU5EIG5vcm1fc2hpZnQlPTtcblx0IgorICAgIlIxID0gQVNISUZUIFIwIGJ5ICUyLkw7XG5cdCIKKyAgICJXW1AxKytdID0gUjE7XG5cdCIKKyAgIDogOiAiYSIgKHgpLCAiYSIgKHkpLCAiZCIgKC1zaWdfc2hpZnQpLCAiYSIgKGxlbi0xKQorICAgOiAiSTAiLCAiTDAiLCAiUDEiLCAiUjAiLCAiUjEiLCAibWVtb3J5IgorICAgKTsKKyAgIHJldHVybiBzaWdfc2hpZnQ7Cit9CisKKworCisjZGVmaW5lIE9WRVJSSURFX0ZJTFRFUl9NRU0xNgordm9pZCBmaWx0ZXJfbWVtMTYoY29uc3Qgc3B4X3dvcmQxNl90ICpfeCwgY29uc3Qgc3B4X2NvZWZfdCAqbnVtLCBjb25zdCBzcHhfY29lZl90ICpkZW4sIHNweF93b3JkMTZfdCAqX3ksIGludCBOLCBpbnQgb3JkLCBzcHhfbWVtX3QgKm1lbSwgY2hhciAqc3RhY2spCit7CisgICBWQVJERUNMKHNweF93b3JkMzJfdCAqeHkyKTsKKyAgIFZBUkRFQ0woc3B4X3dvcmQzMl90ICpudW1kZW5fYSk7CisgICBzcHhfd29yZDMyX3QgKnh5OworICAgc3B4X3dvcmQxNl90ICpudW1kZW47CisgICBpbnQgaTsKKworICAgQUxMT0MoeHkyLCAoTisxKSwgc3B4X3dvcmQzMl90KTsKKyAgIEFMTE9DKG51bWRlbl9hLCAoMipvcmQrMiksIHNweF93b3JkMzJfdCk7CisgICB4eSA9IHh5MisxOyAgCisgICBudW1kZW4gPSAoc3B4X3dvcmQxNl90KikgbnVtZGVuX2E7CisKKyAgIGZvciAoaT0wO2k8b3JkO2krKykKKyAgIHsKKyAgICAgIG51bWRlblsyKmldID0gbnVtW2ldOworICAgICAgbnVtZGVuWzIqaSsxXSA9IGRlbltpXTsKKyAgIH0KKyAgIF9fYXNtX18gX192b2xhdGlsZV9fCisgICAoCisgICAvKiBSZWdpc3RlciBzZXR1cCAqLworICAgIlIwID0gJTU7XG5cdCIgICAgICAvKm9yZCAqLworICAgCisgICAiUDAgPSAlMztcblx0IgorICAgIkkwID0gUDA7XG5cdCIKKyAgICJCMCA9IFAwO1xuXHQiIC8qIG51bWRlbiAqLworICAgIkwwID0gMDtcblx0IgorICAgICAgCisgICAiUDIgPSAlMDtcblx0IiAvKiBGdXNlZCB4eSAqLworICAgIkkyID0gUDI7XG5cdCIKKyAgICJMMiA9IDA7XG5cdCIKKyAgIAorICAgIlA0ID0gJTY7XG5cdCIgLyogbWVtICovCisgICAiUDAgPSAlMTtcblx0IiAvKiBfeCAqLworICAgIlAxID0gJTI7XG5cdCIgLyogX3kgKi8KKyAgIAorICAgLyogRmlyc3Qgc2FtcGxlICovCisgICAiUjEgPSBbUDQrK107XG5cdCIKKyAgICJSMSA8PD0gMztcblx0IiAvKiBzaGlmdCBtZW0gKi8KKyAgICJSMS5MID0gUjEgKFJORCk7XG5cdCIKKyAgICJSMiA9IFdbUDArK107XG5cdCIgLyogbG9hZCB4WzBdICovCisgICAiUjEuTCA9IFIxLkwgKyBSMi5MO1xuXHQiCisgICAiV1tQMSsrXSA9IFIxO1xuXHQiIC8qIHN0b3JlIHlbMF0gKi8KKyAgICJSMiA9IFBBQ0soUjEuTCwgUjIuTCk7XG5cdCIgLyogcGFjayB4MTYgYW5kIHkxNiAqLworICAgIltQMl0gPSBSMjtcblx0IgorICAgICAgICAgICAgICAgCisgICAvKiBTYW1wbGVzIDEgdG8gb3JkLTEgKHVzaW5nIG1lbW9yeSkgKi8KKyAgICJSMCArPSAtMTtcblx0IgorICAgIlIzID0gMDtcblx0IgorICAgIkxDMCA9IFIwO1xuXHQiCisgICAiTE9PUCBmaWx0ZXJfc3RhcnQlPSBMQzA7XG5cdCIKKyAgICJMT09QX0JFR0lOIGZpbHRlcl9zdGFydCU9O1xuXHQiCisgICAgICAiUjMgKz0gMTtcblx0IgorICAgICAgIkxDMSA9IFIzO1xuXHQiCisgICAgICAKKyAgICAgICJSMSA9IFtQNCsrXTtcblx0IgorICAgICAgIkExID0gUjE7XG5cdCIKKyAgICAgICJBMCA9IDA7XG5cdCIKKyAgICAgICJJMCA9IEIwO1xuXHQiCisgICAgICAiSTIgPSBQMjtcblx0IgorICAgICAgIlAyICs9IDQ7XG5cdCIKKyAgICAgICJSNCA9IFtJMCsrXSB8fCBSNSA9IFtJMi0tXTtcblx0IgorICAgICAgIkxPT1AgZmlsdGVyX3N0YXJ0X2lubmVyJT0gTEMxO1xuXHQiCisgICAgICAiTE9PUF9CRUdJTiBmaWx0ZXJfc3RhcnRfaW5uZXIlPTtcblx0IgorICAgICAgICAgIkExIC09IFI0LkgqUjUuSCwgQTAgKz0gUjQuTCpSNS5MIChJUykgfHwgUjQgPSBbSTArK10gfHwgUjUgPSBbSTItLV07XG5cdCIKKyAgICAgICJMT09QX0VORCBmaWx0ZXJfc3RhcnRfaW5uZXIlPTtcblx0IgorICAgICAgIkEwICs9IEExO1xuXHQiCisgICAgICAiUjQgPSBBMDtcblx0IgorICAgICAgIlI0IDw8PSAzO1xuXHQiIC8qIHNoaWZ0IG1lbSAqLworICAgICAgIlI0LkwgPSBSNCAoUk5EKTtcblx0IgorICAgICAgIlIyID0gV1tQMCsrXTtcblx0IiAvKiBsb2FkIHggKi8KKyAgICAgICJSNC5MID0gUjQuTCArIFIyLkw7XG5cdCIKKyAgICAgICJXW1AxKytdID0gUjQ7XG5cdCIgLyogc3RvcmUgeSAqLworICAgICAgLy8iUjQgPDw9IDI7XG5cdCIKKyAgICAgIC8vIlIyIDw8PSAyO1xuXHQiCisgICAgICAiUjIgPSBQQUNLKFI0LkwsIFIyLkwpO1xuXHQiIC8qIHBhY2sgeDE2IGFuZCB5MTYgKi8KKyAgICAgICJbUDJdID0gUjI7XG5cdCIKKworICAgIkxPT1BfRU5EIGZpbHRlcl9zdGFydCU9O1xuXHQiCisKKyAgIC8qIFNhbXBsZXMgb3JkIHRvIE4qLyAgIAorICAgIlIwID0gJTU7XG5cdCIKKyAgICJSMCA8PD0gMTtcblx0IgorICAgIkkwID0gQjA7XG5cdCIgLyogbnVtZGVuICovCisgICAiUjAgPDw9IDE7XG5cdCIgICAKKyAgICJMMCA9IFIwO1xuXHQiCisgICAKKyAgICJSMCA9ICU1O1xuXHQiIC8qIG9yZyAqLworICAgIlIyID0gJTQ7XG5cdCIgLyogTiAqLworICAgIlIyID0gUjIgLSBSMDtcblx0IgorICAgIlI0ID0gW0kwKytdO1xuXHQiIC8qIG51bWRlbiAqLworICAgIkxDMCA9IFIyO1xuXHQiCisgICAiUDMgPSBSMDtcblx0IgorICAgIlIwIDw8PSAyO1xuXHQiCisgICAiUjAgKz0gODtcblx0IgorICAgIkkyID0gUDI7XG5cdCIKKyAgICJNMCA9IFIwO1xuXHQiCisgICAiQTEgPSBBMCA9IDA7XG5cdCIKKyAgICJSNSA9IFtJMi0tXTtcblx0IiAvKiBsb2FkIHh5ICovCisgICAiTE9PUCBmaWx0ZXJfbWlkJT0gTEMwO1xuXHQiCisgICAiTE9PUF9CRUdJTiBmaWx0ZXJfbWlkJT07XG5cdCIKKyAgICAgICJMT09QIGZpbHRlcl9taWRfaW5uZXIlPSBMQzE9UDM7XG5cdCIKKyAgICAgICJMT09QX0JFR0lOIGZpbHRlcl9taWRfaW5uZXIlPTtcblx0IgorICAgICAgICAgIkExIC09IFI0LkgqUjUuSCwgQTAgKz0gUjQuTCpSNS5MIChJUykgfHwgUjQgPSBbSTArK10gfHwgUjUgPSBbSTItLV07XG5cdCIKKyAgICAgICJMT09QX0VORCBmaWx0ZXJfbWlkX2lubmVyJT07XG5cdCIKKyAgICAgICJSMCA9IChBMCArPSBBMSkgfHwgSTIgKz0gTTA7XG5cdCIKKyAgICAgICJSMCA9IFIwIDw8IDMgfHwgUjUgPSBXW1AwKytdO1xuXHQiIC8qIGxvYWQgeCAqLworICAgICAgIlIwLkwgPSBSMCAoUk5EKTtcblx0IgorICAgICAgIlIwLkwgPSBSMC5MICsgUjUuTDtcblx0IgorICAgICAgIlI1ID0gUEFDSyhSMC5MLCBSNS5MKSB8fCBXW1AxKytdID0gUjA7XG5cdCIgLyogc2hpZnQgeSB8IHN0b3JlIHkgKi8KKyAgICAgICJBMSA9IEEwID0gMCB8fCBbSTItLV0gPSBSNVxuXHQiCisgICAgICAiTE9PUF9FTkQgZmlsdGVyX21pZCU9O1xuXHQiCisgICAiSTIgKz0gNDtcblx0IgorICAgIlAyID0gSTI7XG5cdCIKKyAgIC8qIFVwZGF0ZSBtZW1vcnkgKi8KKyAgICJQNCA9ICU2O1xuXHQiCisgICAiUjAgPSAlNTtcblx0IgorICAgIkxDMCA9IFIwO1xuXHQiCisgICAiUDAgPSBCMDtcblx0IgorICAgIkExID0gQTAgPSAwO1xuXHQiCisgICAiTE9PUCBtZW1fdXBkYXRlJT0gTEMwO1xuXHQiCisgICAiTE9PUF9CRUdJTiBtZW1fdXBkYXRlJT07XG5cdCIKKyAgICAgICJJMiA9IFAyO1xuXHQiCisgICAgICAiSTAgPSBQMDtcblx0IgorICAgICAgIlAwICs9IDQ7XG5cdCIKKyAgICAgICJSMCA9IExDMDtcblx0IgorICAgICAgIkxDMSA9IFIwO1xuXHQiCisgICAgICAiUjUgPSBbSTItLV0gfHwgUjQgPSBbSTArK107XG5cdCIKKyAgICAgICJMT09QIG1lbV9hY2N1bSU9IExDMTtcblx0IgorICAgICAgIkxPT1BfQkVHSU4gbWVtX2FjY3VtJT07XG5cdCIKKyAgICAgICAgICJBMSAtPSBSNC5IKlI1LkgsIEEwICs9IFI0LkwqUjUuTCAoSVMpIHx8IFI0ID0gW0kwKytdIHx8IFI1ID0gW0kyLS1dO1xuXHQiCisgICAgICAiTE9PUF9FTkQgbWVtX2FjY3VtJT07XG5cdCIKKyAgICAgICJSMCA9IChBMCArPSBBMSk7XG5cdCIKKyAgICAgICJBMSA9IEEwID0gMCB8fCBbUDQrK10gPSBSMDtcblx0IgorICAgIkxPT1BfRU5EIG1lbV91cGRhdGUlPTtcblx0IgorICAgIkwwID0gMDtcblx0IgorICAgOiA6ICJtIiAoeHkpLCAibSIgKF94KSwgIm0iIChfeSksICJtIiAobnVtZGVuKSwgIm0iIChOKSwgIm0iIChvcmQpLCAibSIgKG1lbSkKKyAgIDogIkEwIiwgIkExIiwgIlIwIiwgIlIxIiwgIlIyIiwgIlIzIiwgIlI0IiwgIlI1IiwgIlAwIiwgIlAxIiwgIlAyIiwgIlAzIiwgIlA0IiwgIkIwIiwgIkkwIiwgIkkyIiwgIkwwIiwgIkwyIiwgIk0wIiwgIm1lbW9yeSIKKyAgICk7CisKK30KKworCisKKyNkZWZpbmUgT1ZFUlJJREVfSUlSX01FTTE2Cit2b2lkIGlpcl9tZW0xNihjb25zdCBzcHhfd29yZDE2X3QgKl94LCBjb25zdCBzcHhfY29lZl90ICpkZW4sIHNweF93b3JkMTZfdCAqX3ksIGludCBOLCBpbnQgb3JkLCBzcHhfbWVtX3QgKm1lbSwgY2hhciAqc3RhY2spCit7CisgICBWQVJERUNMKHNweF93b3JkMTZfdCAqeSk7CisgICBzcHhfd29yZDE2X3QgKnl5OworCisgICBBTExPQyh5LCAoTisyKSwgc3B4X3dvcmQxNl90KTsKKyAgIHl5ID0geSsyOworCisgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworICAgKAorICAgLyogUmVnaXN0ZXIgc2V0dXAgKi8KKyAgICJSMCA9ICU1O1xuXHQiICAgICAgLypvcmQgKi8KKyAgIAorICAgIlAxID0gJTM7XG5cdCIKKyAgICJJMSA9IFAxO1xuXHQiCisgICAiQjEgPSBQMTtcblx0IgorICAgIkwxID0gMDtcblx0IgorICAgCisgICAiUDMgPSAlMDtcblx0IgorICAgIkkzID0gUDM7XG5cdCIKKyAgICJMMyA9IDA7XG5cdCIKKyAgIAorICAgIlA0ID0gJTY7XG5cdCIKKyAgICJQMCA9ICUxO1xuXHQiCisgICAiUDEgPSAlMjtcblx0IgorICAgCisgICAvKiBGaXJzdCBzYW1wbGUgKi8KKyAgICJSMSA9IFtQNCsrXTtcblx0IgorICAgIlIxID0gUjEgPDwgMyAoUyk7XG5cdCIKKyAgICJSMS5MID0gUjEgKFJORCk7XG5cdCIKKyAgICJSMiA9IFdbUDArK107XG5cdCIKKyAgICJSMSA9IFIxICsgUjI7XG5cdCIKKyAgICJXW1AxKytdID0gUjE7XG5cdCIKKyAgICJXW1AzXSA9IFIxO1xuXHQiCisKKyAgIC8qIFNhbXBsZXMgMSB0byBvcmQtMSAodXNpbmcgbWVtb3J5KSAqLworICAgIlIwICs9IC0xO1xuXHQiCisgICAiUjMgPSAwO1xuXHQiCisgICAiTEMwID0gUjA7XG5cdCIKKyAgICJMT09QIGZpbHRlcl9zdGFydCU9IExDMDtcblx0IgorICAgIkxPT1BfQkVHSU4gZmlsdGVyX3N0YXJ0JT07XG5cdCIKKyAgICAgICJSMyArPSAxO1xuXHQiCisgICAgICAiTEMxID0gUjM7XG5cdCIKKyAgICAgIAorICAgICAgIlIxID0gW1A0KytdO1xuXHQiCisgICAgICAiQTEgPSBSMTtcblx0IgorICAgICAgIkkxID0gQjE7XG5cdCIKKyAgICAgICJJMyA9IFAzO1xuXHQiCisgICAgICAiUDMgKz0gMjtcblx0IgorICAgICAgIkxPT1AgZmlsdGVyX3N0YXJ0X2lubmVyJT0gTEMxO1xuXHQiCisgICAgICAiTE9PUF9CRUdJTiBmaWx0ZXJfc3RhcnRfaW5uZXIlPTtcblx0IgorICAgICAgICAgIlI0LkwgPSBXW0kxKytdO1xuXHQiCisgICAgICAgICAiUjUuTCA9IFdbSTMtLV07XG5cdCIKKyAgICAgICAgICJBMSAtPSBSNC5MKlI1LkwgKElTKTtcblx0IgorICAgICAgIkxPT1BfRU5EIGZpbHRlcl9zdGFydF9pbm5lciU9O1xuXHQiCisgICAKKyAgICAgICJSMSA9IEExO1xuXHQiCisgICAgICAiUjEgPDw9IDM7XG5cdCIKKyAgICAgICJSMS5MID0gUjEgKFJORCk7XG5cdCIKKyAgICAgICJSMiA9IFdbUDArK107XG5cdCIKKyAgICAgICJSMSA9IFIxICsgUjI7XG5cdCIKKyAgICAgICJXW1AxKytdID0gUjE7XG5cdCIKKyAgICAgICJXW1AzXSA9IFIxO1xuXHQiCisgICAiTE9PUF9FTkQgZmlsdGVyX3N0YXJ0JT07XG5cdCIKKworICAgLyogU2FtcGxlcyBvcmQgdG8gTiovICAgCisgICAiUjAgPSAlNTtcblx0IgorICAgIlIwIDw8PSAxO1xuXHQiCisgICAiSTEgPSBCMTtcblx0IgorICAgIkwxID0gUjA7XG5cdCIKKyAgIAorICAgIlIwID0gJTU7XG5cdCIKKyAgICJSMiA9ICU0O1xuXHQiCisgICAiUjIgPSBSMiAtIFIwO1xuXHQiCisgICAiUjQuTCA9IFdbSTErK107XG5cdCIKKyAgICJMQzAgPSBSMjtcblx0IgorICAgIkxPT1AgZmlsdGVyX21pZCU9IExDMDtcblx0IgorICAgIkxPT1BfQkVHSU4gZmlsdGVyX21pZCU9O1xuXHQiCisgICAgICAiTEMxID0gUjA7XG5cdCIKKyAgICAgICJBMSA9IDA7XG5cdCIKKyAgICAgICJJMyA9IFAzO1xuXHQiCisgICAgICAiUDMgKz0gMjtcblx0IgorICAgICAgIlI1LkwgPSBXW0kzLS1dO1xuXHQiCisgICAgICAiTE9PUCBmaWx0ZXJfbWlkX2lubmVyJT0gTEMxO1xuXHQiCisgICAgICAiTE9PUF9CRUdJTiBmaWx0ZXJfbWlkX2lubmVyJT07XG5cdCIKKyAgICAgICAgICJBMSAtPSBSNC5MKlI1LkwgKElTKSB8fCBSNC5MID0gV1tJMSsrXSB8fCBSNS5MID0gV1tJMy0tXTtcblx0IgorICAgICAgIkxPT1BfRU5EIGZpbHRlcl9taWRfaW5uZXIlPTtcblx0IgorICAgICAgIlIxID0gQTE7XG5cdCIKKyAgICAgICJSMSA9IFIxIDw8IDMgfHwgUjIgPSBXW1AwKytdO1xuXHQiCisgICAgICAiUjEuTCA9IFIxIChSTkQpO1xuXHQiCisgICAgICAiUjEgPSBSMSArIFIyO1xuXHQiCisgICAgICAiV1tQMSsrXSA9IFIxO1xuXHQiCisgICAgICAiV1tQM10gPSBSMTtcblx0IgorICAgIkxPT1BfRU5EIGZpbHRlcl9taWQlPTtcblx0IgorICAgICAKKyAgIC8qIFVwZGF0ZSBtZW1vcnkgKi8KKyAgICJQNCA9ICU2O1xuXHQiCisgICAiUjAgPSAlNTtcblx0IgorICAgIkxDMCA9IFIwO1xuXHQiCisgICAiUDEgPSBCMTtcblx0IgorICAgIkxPT1AgbWVtX3VwZGF0ZSU9IExDMDtcblx0IgorICAgIkxPT1BfQkVHSU4gbWVtX3VwZGF0ZSU9O1xuXHQiCisgICAgICAiQTAgPSAwO1xuXHQiCisgICAgICAiSTMgPSBQMztcblx0IgorICAgICAgIkkxID0gUDE7XG5cdCIKKyAgICAgICJQMSArPSAyO1xuXHQiCisgICAgICAiUjAgPSBMQzA7XG5cdCIKKyAgICAgICJMQzE9UjA7XG5cdCIKKyAgICAgICJSNS5MID0gV1tJMy0tXSB8fCBSNC5MID0gV1tJMSsrXTtcblx0IgorICAgICAgIkxPT1AgbWVtX2FjY3VtJT0gTEMxO1xuXHQiCisgICAgICAiTE9PUF9CRUdJTiBtZW1fYWNjdW0lPTtcblx0IgorICAgICAgICAgIkEwIC09IFI0LkwqUjUuTCAoSVMpIHx8IFI0LkwgPSBXW0kxKytdIHx8IFI1LkwgPSBXW0kzLS1dO1xuXHQiCisgICAgICAiTE9PUF9FTkQgbWVtX2FjY3VtJT07XG5cdCIKKyAgICAgICJSMCA9IEEwO1xuXHQiCisgICAgICAiW1A0KytdID0gUjA7XG5cdCIKKyAgICJMT09QX0VORCBtZW1fdXBkYXRlJT07XG5cdCIKKyAgICJMMSA9IDA7XG5cdCIKKyAgIDogOiAibSIgKHl5KSwgIm0iIChfeCksICJtIiAoX3kpLCAibSIgKGRlbiksICJtIiAoTiksICJtIiAob3JkKSwgIm0iIChtZW0pCisgICA6ICJBMCIsICJBMSIsICJSMCIsICJSMSIsICJSMiIsICJSMyIsICJSNCIsICJSNSIsICJQMCIsICJQMSIsICJQMiIsICJQMyIsICJQNCIsICJCMSIsICJJMSIsICJJMyIsICJMMSIsICJMMyIsICJtZW1vcnkiCisgICApOworCit9CisKKworI2RlZmluZSBPVkVSUklERV9GSVJfTUVNMTYKK3ZvaWQgZmlyX21lbTE2KGNvbnN0IHNweF93b3JkMTZfdCAqeCwgY29uc3Qgc3B4X2NvZWZfdCAqbnVtLCBzcHhfd29yZDE2X3QgKnksIGludCBOLCBpbnQgb3JkLCBzcHhfbWVtX3QgKm1lbSwgY2hhciAqc3RhY2spCit7CisgICBpbnQgaTsKKyAgIHNweF9jb2VmX3QgZGVuMlsxMl07CisgICBzcHhfY29lZl90ICpkZW47CisgICBkZW4gPSAoc3B4X2NvZWZfdCopKCgoKGludClkZW4yKSs0KSYweGZmZmZmZmZjKTsKKyAgIGZvciAoaT0wO2k8MTA7aSsrKQorICAgICAgZGVuW2ldID0gMDsKKyAgIGZpbHRlcl9tZW0xNih4LCBudW0sIGRlbiwgeSwgTiwgb3JkLCBtZW0sIHN0YWNrKTsKK30KKworCisjZGVmaW5lIE9WRVJSSURFX0NPTVBVVEVfSU1QVUxTRV9SRVNQT05TRQordm9pZCBjb21wdXRlX2ltcHVsc2VfcmVzcG9uc2UoY29uc3Qgc3B4X2NvZWZfdCAqYWssIGNvbnN0IHNweF9jb2VmX3QgKmF3azEsIGNvbnN0IHNweF9jb2VmX3QgKmF3azIsIHNweF93b3JkMTZfdCAqeSwgaW50IE4sIGludCBvcmQsIGNoYXIgKnN0YWNrKQoreworICAgaW50IGk7CisgICBWQVJERUNMKHNweF93b3JkMTZfdCAqeXRtcCk7CisgICBBTExPQyh5dG1wLCBOLCBzcHhfd29yZDE2X3QpOworICAgc3B4X3dvcmQxNl90ICp5dG1wMiA9IHl0bXA7CisgICB5WzBdID0gTFBDX1NDQUxJTkc7CisgICBmb3IgKGk9MDtpPG9yZDtpKyspCisgICAgICB5W2krMV0gPSBhd2sxW2ldOworICAgaSsrOworICAgZm9yICg7aTxOO2krKykKKyAgICAgIHlbaV0gPSAwOworCisgICBOLT0xOworICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKyAgICgKKyAgICAgICAgICJJMCA9ICUwO1xuXHQiCisgICAgICAgICAiSTEgPSAlMTtcblx0IgorICAgICAgICAgIkwwID0gMDtcblx0IgorICAgICAgICAgIkwxID0gMDtcblx0IgorICAgICAgICAgIkwyID0gMDtcblx0IgorICAgICAgICAgIkwzID0gMDtcblx0IgorICAgICAgICAgIlIwID0gMTtcblx0IgorICAgICAgICAgIlIwIDw8PSAxMztcblx0IgorICAgICAgICAgIldbSTBdID0gUjAuTDtcblx0IgorICAgICAgICAgIlIwIDw8PSAxO1xuXHQiCisgICAgICAgICAiV1tJMV0gPSBSMC5MO1xuXHQiCisgICAgICAgICAiUjAgPSAlNTtcblx0IgorICAgICAgICAgIkxDMCA9IFIwO1xuXHQiCisgICAgICAgICAiUjIgPSAwO1xuXHQiCisgICAgICAgICAiTE9PUCBzYW1wbGVzJT0gTEMwO1xuXHQiCisgICAgICAgICAiTE9PUF9CRUdJTiBzYW1wbGVzJT07XG5cdCIKKyAgICAgICAgICAgICJSMiArPSAxO1xuXHQiCisgICAgICAgICAgICAiUjIgPSBNSU4oUjIsICU0KTtcblx0IgorICAgICAgICAgICAgIkkwID0gJTA7XG5cdCIKKyAgICAgICAgICAgICJJMSA9ICUxO1xuXHQiCisgICAgICAgICAgICAiSTIgPSAlMjtcblx0IgorICAgICAgICAgICAgIkkzID0gJTM7XG5cdCIKKyAgICAgICAgICAgICIlMCArPSAyO1xuXHQiCisgICAgICAgICAgICAiJTEgKz0gMjtcblx0IgorICAgICAgICAgICAgIkExID0gQTAgPSAwO1xuXHQiCisgICAgICAgICAgICAiUjAuTCA9IFdbSTAtLV0gfHwgUjEuTCA9IFdbSTIrK107XG5cdCIKKyAgICAgICAgICAgICJMQzEgPSBSMjtcblx0IgorICAgICAgICAgICAgIkxPT1AgZmlsdGVyJT0gTEMxO1xuXHQiCisgICAgICAgICAgICAiTE9PUF9CRUdJTiBmaWx0ZXIlPTtcblx0IgorICAgICAgICAgICAgICAgIkEwIC09IFIwLkwqUjEuTCAoSVMpIHx8IFIwLkwgPSBXW0kxLS1dIHx8IFIxLkwgPSBXW0kzKytdO1xuXHQiCisgICAgICAgICAgICAgICAiQTEgLT0gUjAuTCpSMS5MIChJUykgfHwgUjAuTCA9IFdbSTAtLV0gfHwgUjEuTCA9IFdbSTIrK107XG5cdCIKKyAgICAgICAgICAgICJMT09QX0VORCBmaWx0ZXIlPTtcblx0IgorICAgICAgICAgICAgIlIwID0gQTAsIFIxID0gQTE7XG5cdCIKKyAgICAgICAgICAgICJSMyA9IFdbJTFdIChYKTtcblx0IgorICAgICAgICAgICAgIlIzIDw8PSAxMztcblx0IgorICAgICAgICAgICAgIlIwID0gUjAgKyBSMztcblx0IgorICAgICAgICAgICAgIlIzID0gUjAgPj4+IDEzO1xuXHQiCisgICAgICAgICAgICAiV1slMF0gPSBSMy5MO1xuXHQiCisgICAgICAgICAgICAiUjAgPDw9IDE7XG5cdCIKKyAgICAgICAgICAgICJSMSA9IFIxICsgUjA7XG5cdCIKKyAgICAgICAgICAgICJSMSA+Pj49IDEzO1xuXHQiCisgICAgICAgICAgICAiV1slMV0gPSBSMS5MO1xuXHQiCisgICAgICAgICAiTE9PUF9FTkQgc2FtcGxlcyU9O1xuXHQiCisgICA6ICI9YSIgKHl0bXAyKSwgIj1hIiAoeSkKKyAgIDogImEiIChhd2syKSwgImEiIChhayksICJkIiAob3JkKSwgIm0iIChOKSwgIjAiICh5dG1wMiksICIxIiAoeSkKKyAgIDogIkEwIiwgIkExIiwgIlIwIiwgIlIxIiwgIlIyIiwgIlIzIiwgIkkwIiwgIkkxIiwgIkkyIiwgIkkzIiwgIkwwIiwgIkwxIiwgIkwyIiwgIkwzIiwgIkEwIiwgIkExIgorICAgKTsKK30KKworCisKKyNpZiAwIC8qIEVxdWl2YWxlbnQgQyBmdW5jdGlvbiBmb3IgZmlsdGVyX21lbTIgYW5kIGNvbXB1dGVfaW1wdWxzZV9yZXNwb25zZSAqLworI2RlZmluZSBtaW4oYSxiKSAoKGEpPChiKSA/IChhKTooYikpCisKK3ZvaWQgY29tcHV0ZV9pbXB1bHNlX3Jlc3BvbnNlKGNvbnN0IHNweF9jb2VmX3QgKmFrLCBjb25zdCBzcHhfY29lZl90ICphd2sxLCBjb25zdCBzcHhfY29lZl90ICphd2syLCBzcHhfd29yZDE2X3QgKnksIGludCBOLCBpbnQgb3JkLCBjaGFyICpzdGFjaykKK3sKKyAgIGludCBpLGo7CisgICBWQVJERUNMKHNweF93b3JkMTZfdCAqeXRtcCk7CisgICBBTExPQyh5dG1wLCBOLCBzcHhfd29yZDE2X3QpOworICAgCisgICB5WzBdID0gTFBDX1NDQUxJTkc7CisgICBmb3IgKGk9MDtpPG9yZDtpKyspCisgICAgICB5W2krMV0gPSBhd2sxW2ldOworICAgaSsrOworICAgZm9yICg7aTxOO2krKykKKyAgICAgIHlbaV0gPSAwOworCisgICBmb3IgKGk9MDtpPE47aSsrKQorICAgeworICAgICAgc3B4X3dvcmQzMl90IHlpID0gU0hMMzIoRVhURU5EMzIoeVtpXSksTFBDX1NISUZUKTsKKyAgICAgIHNweF93b3JkMzJfdCB5aTIgPSAwOworICAgICAgZm9yIChqPTA7ajxtaW4oaSxvcmQpO2orKykKKyAgICAgIHsKKyAgICAgICAgIHlpID0gTUFDMTZfMTYoeWksIGF3azJbal0sIC15dG1wW2ktai0xXSk7CisgICAgICAgICB5aTIgPSBNQUMxNl8xNih5aTIsIGFrW2pdLCAteVtpLWotMV0pOworICAgICAgfQorICAgICAgeXRtcFtpXSA9IEVYVFJBQ1QxNihTSFIzMih5aSxMUENfU0hJRlQpKTsKKyAgICAgIHlpMiA9IEFERDMyKHlpMixTSEwzMih5aSwxKSk7CisgICAgICB5W2ldID0gRVhUUkFDVDE2KFNIUjMyKHlpMixMUENfU0hJRlQpKTsKKyAgIH0KKworfQorCisKK3ZvaWQgZmlsdGVyX21lbTIoY29uc3Qgc3B4X3NpZ190ICpfeCwgY29uc3Qgc3B4X2NvZWZfdCAqbnVtLCBjb25zdCBzcHhfY29lZl90ICpkZW4sIHNweF9zaWdfdCAqX3ksIGludCBOLCBpbnQgb3JkLCBzcHhfbWVtX3QgKm1lbSkKK3sKKyAgIGludCBpLGo7CisgICBzcHhfd29yZDE2X3QgeGkseWksbnlpOworICAgc3B4X3dvcmQxNl90IHhbTl0seVtOXTsKKyAgIHNweF93b3JkMTZfdCAqeHgsICp5eTsKKyAgIHh4ID0geDsKKyAgIHl5ID0geTsKKyAgIGZvciAoaT0wO2k8TjtpKyspCisgICB7CisgICAgICB4W2ldID0gRVhUUkFDVDE2KFNIUjMyKF94W2ldLFNJR19TSElGVCkpOworICAgfQorICAgCisgICBmb3IgKGk9MDtpPG9yZDtpKyspCisgICB7CisgICAgICBzcHhfd29yZDMyX3QgeWkgPSBtZW1baV07CisgICAgICBmb3IgKGo9MDtqPGk7aisrKQorICAgICAgeworICAgICAgICAgeWkgPSBNQUMxNl8xNih5aSwgbnVtW2pdLCB4W2ktai0xXSk7CisgICAgICAgICB5aSA9IE1BQzE2XzE2KHlpLCBkZW5bal0sIC15W2ktai0xXSk7CisgICAgICB9CisgICAgICBfeVtpXSA9IEFERDMyKF94W2ldLFNITDMyKHlpLDEpKTsKKyAgICAgIHlbaV0gPSBFWFRSQUNUMTYoU0hSMzIoX3lbaV0sU0lHX1NISUZUKSk7CisgICB9CisgICBmb3IgKGk9b3JkO2k8TjtpKyspCisgICB7CisgICAgICBzcHhfd29yZDMyX3QgeWkgPSAwOworICAgICAgZm9yIChqPTA7ajxvcmQ7aisrKQorICAgICAgeworICAgICAgICAgeWkgPSBNQUMxNl8xNih5aSwgbnVtW2pdLCB4W2ktai0xXSk7CisgICAgICAgICB5aSA9IE1BQzE2XzE2KHlpLCBkZW5bal0sIC15W2ktai0xXSk7CisgICAgICB9CisgICAgICBfeVtpXSA9IEFERDMyKF94W2ldLFNITDMyKHlpLDEpKTsKKyAgICAgIHlbaV0gPSBFWFRSQUNUMTYoU0hSMzIoX3lbaV0sU0lHX1NISUZUKSk7CisgICB9CisKKyAgIGZvciAoaT0wO2k8b3JkO2krKykKKyAgIHsKKyAgICAgIHNweF9tZW1fdCBtID0gMDsKKyAgICAgIGZvciAoaj0wO2o8b3JkLWk7aisrKQorICAgICAgeworICAgICAgICAgbSA9IE1BQzE2XzE2KG0sIHhbTi0xLWpdLCBudW1baitpXSk7CisgICAgICAgICBtID0gTUFDMTZfMTYobSwgLXlbTi0xLWpdLCBkZW5baitpXSk7CisgICAgICB9CisgICAgICBtZW1baV0gPSBtOworICAgfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9maWx0ZXJzX3NzZS5oIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZmlsdGVyc19zc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmIzMzNkCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZmlsdGVyc19zc2UuaApAQCAtMCwwICsxLDMzNiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAqLworLyoqCisgICBAZmlsZSBmaWx0ZXJzX3NzZS5oCisgICBAYnJpZWYgVmFyaW91cyBhbmFseXNpcy9zeW50aGVzaXMgZmlsdGVycyAoU1NFIHZlcnNpb24pCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgPHhtbWludHJpbi5oPgorCit2b2lkIGZpbHRlcl9tZW0xNl8xMChjb25zdCBmbG9hdCAqeCwgY29uc3QgZmxvYXQgKl9udW0sIGNvbnN0IGZsb2F0ICpfZGVuLCBmbG9hdCAqeSwgaW50IE4sIGludCBvcmQsIGZsb2F0ICpfbWVtKQoreworICAgX19tMTI4IG51bVszXSwgZGVuWzNdLCBtZW1bM107CisKKyAgIGludCBpOworCisgICAvKiBDb3B5IG51bWVyYXRvciwgZGVub21pbmF0b3IgYW5kIG1lbW9yeSB0byBhbGlnbmVkIHhtbSAqLworICAgZm9yIChpPTA7aTwyO2krKykKKyAgIHsKKyAgICAgIG1lbVtpXSA9IF9tbV9sb2FkdV9wcyhfbWVtKzQqaSk7CisgICAgICBudW1baV0gPSBfbW1fbG9hZHVfcHMoX251bSs0KmkpOworICAgICAgZGVuW2ldID0gX21tX2xvYWR1X3BzKF9kZW4rNCppKTsKKyAgIH0KKyAgIG1lbVsyXSA9IF9tbV9zZXRyX3BzKF9tZW1bOF0sIF9tZW1bOV0sIDAsIDApOworICAgbnVtWzJdID0gX21tX3NldHJfcHMoX251bVs4XSwgX251bVs5XSwgMCwgMCk7CisgICBkZW5bMl0gPSBfbW1fc2V0cl9wcyhfZGVuWzhdLCBfZGVuWzldLCAwLCAwKTsKKyAgIAorICAgZm9yIChpPTA7aTxOO2krKykKKyAgIHsKKyAgICAgIF9fbTEyOCB4eDsKKyAgICAgIF9fbTEyOCB5eTsKKyAgICAgIC8qIENvbXB1dGUgbmV4dCBmaWx0ZXIgcmVzdWx0ICovCisgICAgICB4eCA9IF9tbV9sb2FkX3BzMSh4K2kpOworICAgICAgeXkgPSBfbW1fYWRkX3NzKHh4LCBtZW1bMF0pOworICAgICAgX21tX3N0b3JlX3NzKHkraSwgeXkpOworICAgICAgeXkgPSBfbW1fc2h1ZmZsZV9wcyh5eSwgeXksIDApOworICAgICAgCisgICAgICAvKiBVcGRhdGUgbWVtb3J5ICovCisgICAgICBtZW1bMF0gPSBfbW1fbW92ZV9zcyhtZW1bMF0sIG1lbVsxXSk7CisgICAgICBtZW1bMF0gPSBfbW1fc2h1ZmZsZV9wcyhtZW1bMF0sIG1lbVswXSwgMHgzOSk7CisKKyAgICAgIG1lbVswXSA9IF9tbV9hZGRfcHMobWVtWzBdLCBfbW1fbXVsX3BzKHh4LCBudW1bMF0pKTsKKyAgICAgIG1lbVswXSA9IF9tbV9zdWJfcHMobWVtWzBdLCBfbW1fbXVsX3BzKHl5LCBkZW5bMF0pKTsKKworICAgICAgbWVtWzFdID0gX21tX21vdmVfc3MobWVtWzFdLCBtZW1bMl0pOworICAgICAgbWVtWzFdID0gX21tX3NodWZmbGVfcHMobWVtWzFdLCBtZW1bMV0sIDB4MzkpOworCisgICAgICBtZW1bMV0gPSBfbW1fYWRkX3BzKG1lbVsxXSwgX21tX211bF9wcyh4eCwgbnVtWzFdKSk7CisgICAgICBtZW1bMV0gPSBfbW1fc3ViX3BzKG1lbVsxXSwgX21tX211bF9wcyh5eSwgZGVuWzFdKSk7CisKKyAgICAgIG1lbVsyXSA9IF9tbV9zaHVmZmxlX3BzKG1lbVsyXSwgbWVtWzJdLCAweGZkKTsKKworICAgICAgbWVtWzJdID0gX21tX2FkZF9wcyhtZW1bMl0sIF9tbV9tdWxfcHMoeHgsIG51bVsyXSkpOworICAgICAgbWVtWzJdID0gX21tX3N1Yl9wcyhtZW1bMl0sIF9tbV9tdWxfcHMoeXksIGRlblsyXSkpOworICAgfQorICAgLyogUHV0IG1lbW9yeSBiYWNrIGluIGl0cyBwbGFjZSAqLworICAgX21tX3N0b3JldV9wcyhfbWVtLCBtZW1bMF0pOworICAgX21tX3N0b3JldV9wcyhfbWVtKzQsIG1lbVsxXSk7CisgICBfbW1fc3RvcmVfc3MoX21lbSs4LCBtZW1bMl0pOworICAgbWVtWzJdID0gX21tX3NodWZmbGVfcHMobWVtWzJdLCBtZW1bMl0sIDB4NTUpOworICAgX21tX3N0b3JlX3NzKF9tZW0rOSwgbWVtWzJdKTsKK30KKwordm9pZCBmaWx0ZXJfbWVtMTZfOChjb25zdCBmbG9hdCAqeCwgY29uc3QgZmxvYXQgKl9udW0sIGNvbnN0IGZsb2F0ICpfZGVuLCBmbG9hdCAqeSwgaW50IE4sIGludCBvcmQsIGZsb2F0ICpfbWVtKQoreworICAgX19tMTI4IG51bVsyXSwgZGVuWzJdLCBtZW1bMl07CisKKyAgIGludCBpOworCisgICAvKiBDb3B5IG51bWVyYXRvciwgZGVub21pbmF0b3IgYW5kIG1lbW9yeSB0byBhbGlnbmVkIHhtbSAqLworICAgZm9yIChpPTA7aTwyO2krKykKKyAgIHsKKyAgICAgIG1lbVtpXSA9IF9tbV9sb2FkdV9wcyhfbWVtKzQqaSk7CisgICAgICBudW1baV0gPSBfbW1fbG9hZHVfcHMoX251bSs0KmkpOworICAgICAgZGVuW2ldID0gX21tX2xvYWR1X3BzKF9kZW4rNCppKTsKKyAgIH0KKyAgIAorICAgZm9yIChpPTA7aTxOO2krKykKKyAgIHsKKyAgICAgIF9fbTEyOCB4eDsKKyAgICAgIF9fbTEyOCB5eTsKKyAgICAgIC8qIENvbXB1dGUgbmV4dCBmaWx0ZXIgcmVzdWx0ICovCisgICAgICB4eCA9IF9tbV9sb2FkX3BzMSh4K2kpOworICAgICAgeXkgPSBfbW1fYWRkX3NzKHh4LCBtZW1bMF0pOworICAgICAgX21tX3N0b3JlX3NzKHkraSwgeXkpOworICAgICAgeXkgPSBfbW1fc2h1ZmZsZV9wcyh5eSwgeXksIDApOworICAgICAgCisgICAgICAvKiBVcGRhdGUgbWVtb3J5ICovCisgICAgICBtZW1bMF0gPSBfbW1fbW92ZV9zcyhtZW1bMF0sIG1lbVsxXSk7CisgICAgICBtZW1bMF0gPSBfbW1fc2h1ZmZsZV9wcyhtZW1bMF0sIG1lbVswXSwgMHgzOSk7CisKKyAgICAgIG1lbVswXSA9IF9tbV9hZGRfcHMobWVtWzBdLCBfbW1fbXVsX3BzKHh4LCBudW1bMF0pKTsKKyAgICAgIG1lbVswXSA9IF9tbV9zdWJfcHMobWVtWzBdLCBfbW1fbXVsX3BzKHl5LCBkZW5bMF0pKTsKKworICAgICAgbWVtWzFdID0gX21tX3N1Yl9zcyhtZW1bMV0sIG1lbVsxXSk7CisgICAgICBtZW1bMV0gPSBfbW1fc2h1ZmZsZV9wcyhtZW1bMV0sIG1lbVsxXSwgMHgzOSk7CisKKyAgICAgIG1lbVsxXSA9IF9tbV9hZGRfcHMobWVtWzFdLCBfbW1fbXVsX3BzKHh4LCBudW1bMV0pKTsKKyAgICAgIG1lbVsxXSA9IF9tbV9zdWJfcHMobWVtWzFdLCBfbW1fbXVsX3BzKHl5LCBkZW5bMV0pKTsKKyAgIH0KKyAgIC8qIFB1dCBtZW1vcnkgYmFjayBpbiBpdHMgcGxhY2UgKi8KKyAgIF9tbV9zdG9yZXVfcHMoX21lbSwgbWVtWzBdKTsKKyAgIF9tbV9zdG9yZXVfcHMoX21lbSs0LCBtZW1bMV0pOworfQorCisKKyNkZWZpbmUgT1ZFUlJJREVfRklMVEVSX01FTTE2Cit2b2lkIGZpbHRlcl9tZW0xNihjb25zdCBmbG9hdCAqeCwgY29uc3QgZmxvYXQgKl9udW0sIGNvbnN0IGZsb2F0ICpfZGVuLCBmbG9hdCAqeSwgaW50IE4sIGludCBvcmQsIGZsb2F0ICpfbWVtLCBjaGFyICpzdGFjaykKK3sKKyAgIGlmKG9yZD09MTApCisgICAgICBmaWx0ZXJfbWVtMTZfMTAoeCwgX251bSwgX2RlbiwgeSwgTiwgb3JkLCBfbWVtKTsKKyAgIGVsc2UgaWYgKG9yZD09OCkKKyAgICAgIGZpbHRlcl9tZW0xNl84KHgsIF9udW0sIF9kZW4sIHksIE4sIG9yZCwgX21lbSk7Cit9CisKKworCit2b2lkIGlpcl9tZW0xNl8xMChjb25zdCBmbG9hdCAqeCwgY29uc3QgZmxvYXQgKl9kZW4sIGZsb2F0ICp5LCBpbnQgTiwgaW50IG9yZCwgZmxvYXQgKl9tZW0pCit7CisgICBfX20xMjggZGVuWzNdLCBtZW1bM107CisKKyAgIGludCBpOworCisgICAvKiBDb3B5IG51bWVyYXRvciwgZGVub21pbmF0b3IgYW5kIG1lbW9yeSB0byBhbGlnbmVkIHhtbSAqLworICAgZm9yIChpPTA7aTwyO2krKykKKyAgIHsKKyAgICAgIG1lbVtpXSA9IF9tbV9sb2FkdV9wcyhfbWVtKzQqaSk7CisgICAgICBkZW5baV0gPSBfbW1fbG9hZHVfcHMoX2Rlbis0KmkpOworICAgfQorICAgbWVtWzJdID0gX21tX3NldHJfcHMoX21lbVs4XSwgX21lbVs5XSwgMCwgMCk7CisgICBkZW5bMl0gPSBfbW1fc2V0cl9wcyhfZGVuWzhdLCBfZGVuWzldLCAwLCAwKTsKKyAgIAorICAgZm9yIChpPTA7aTxOO2krKykKKyAgIHsKKyAgICAgIF9fbTEyOCB4eDsKKyAgICAgIF9fbTEyOCB5eTsKKyAgICAgIC8qIENvbXB1dGUgbmV4dCBmaWx0ZXIgcmVzdWx0ICovCisgICAgICB4eCA9IF9tbV9sb2FkX3BzMSh4K2kpOworICAgICAgeXkgPSBfbW1fYWRkX3NzKHh4LCBtZW1bMF0pOworICAgICAgX21tX3N0b3JlX3NzKHkraSwgeXkpOworICAgICAgeXkgPSBfbW1fc2h1ZmZsZV9wcyh5eSwgeXksIDApOworICAgICAgCisgICAgICAvKiBVcGRhdGUgbWVtb3J5ICovCisgICAgICBtZW1bMF0gPSBfbW1fbW92ZV9zcyhtZW1bMF0sIG1lbVsxXSk7CisgICAgICBtZW1bMF0gPSBfbW1fc2h1ZmZsZV9wcyhtZW1bMF0sIG1lbVswXSwgMHgzOSk7CisKKyAgICAgIG1lbVswXSA9IF9tbV9zdWJfcHMobWVtWzBdLCBfbW1fbXVsX3BzKHl5LCBkZW5bMF0pKTsKKworICAgICAgbWVtWzFdID0gX21tX21vdmVfc3MobWVtWzFdLCBtZW1bMl0pOworICAgICAgbWVtWzFdID0gX21tX3NodWZmbGVfcHMobWVtWzFdLCBtZW1bMV0sIDB4MzkpOworCisgICAgICBtZW1bMV0gPSBfbW1fc3ViX3BzKG1lbVsxXSwgX21tX211bF9wcyh5eSwgZGVuWzFdKSk7CisKKyAgICAgIG1lbVsyXSA9IF9tbV9zaHVmZmxlX3BzKG1lbVsyXSwgbWVtWzJdLCAweGZkKTsKKworICAgICAgbWVtWzJdID0gX21tX3N1Yl9wcyhtZW1bMl0sIF9tbV9tdWxfcHMoeXksIGRlblsyXSkpOworICAgfQorICAgLyogUHV0IG1lbW9yeSBiYWNrIGluIGl0cyBwbGFjZSAqLworICAgX21tX3N0b3JldV9wcyhfbWVtLCBtZW1bMF0pOworICAgX21tX3N0b3JldV9wcyhfbWVtKzQsIG1lbVsxXSk7CisgICBfbW1fc3RvcmVfc3MoX21lbSs4LCBtZW1bMl0pOworICAgbWVtWzJdID0gX21tX3NodWZmbGVfcHMobWVtWzJdLCBtZW1bMl0sIDB4NTUpOworICAgX21tX3N0b3JlX3NzKF9tZW0rOSwgbWVtWzJdKTsKK30KKworCit2b2lkIGlpcl9tZW0xNl84KGNvbnN0IGZsb2F0ICp4LCBjb25zdCBmbG9hdCAqX2RlbiwgZmxvYXQgKnksIGludCBOLCBpbnQgb3JkLCBmbG9hdCAqX21lbSkKK3sKKyAgIF9fbTEyOCBkZW5bMl0sIG1lbVsyXTsKKworICAgaW50IGk7CisKKyAgIC8qIENvcHkgbnVtZXJhdG9yLCBkZW5vbWluYXRvciBhbmQgbWVtb3J5IHRvIGFsaWduZWQgeG1tICovCisgICBmb3IgKGk9MDtpPDI7aSsrKQorICAgeworICAgICAgbWVtW2ldID0gX21tX2xvYWR1X3BzKF9tZW0rNCppKTsKKyAgICAgIGRlbltpXSA9IF9tbV9sb2FkdV9wcyhfZGVuKzQqaSk7CisgICB9CisgICAKKyAgIGZvciAoaT0wO2k8TjtpKyspCisgICB7CisgICAgICBfX20xMjggeHg7CisgICAgICBfX20xMjggeXk7CisgICAgICAvKiBDb21wdXRlIG5leHQgZmlsdGVyIHJlc3VsdCAqLworICAgICAgeHggPSBfbW1fbG9hZF9wczEoeCtpKTsKKyAgICAgIHl5ID0gX21tX2FkZF9zcyh4eCwgbWVtWzBdKTsKKyAgICAgIF9tbV9zdG9yZV9zcyh5K2ksIHl5KTsKKyAgICAgIHl5ID0gX21tX3NodWZmbGVfcHMoeXksIHl5LCAwKTsKKyAgICAgIAorICAgICAgLyogVXBkYXRlIG1lbW9yeSAqLworICAgICAgbWVtWzBdID0gX21tX21vdmVfc3MobWVtWzBdLCBtZW1bMV0pOworICAgICAgbWVtWzBdID0gX21tX3NodWZmbGVfcHMobWVtWzBdLCBtZW1bMF0sIDB4MzkpOworCisgICAgICBtZW1bMF0gPSBfbW1fc3ViX3BzKG1lbVswXSwgX21tX211bF9wcyh5eSwgZGVuWzBdKSk7CisKKyAgICAgIG1lbVsxXSA9IF9tbV9zdWJfc3MobWVtWzFdLCBtZW1bMV0pOworICAgICAgbWVtWzFdID0gX21tX3NodWZmbGVfcHMobWVtWzFdLCBtZW1bMV0sIDB4MzkpOworCisgICAgICBtZW1bMV0gPSBfbW1fc3ViX3BzKG1lbVsxXSwgX21tX211bF9wcyh5eSwgZGVuWzFdKSk7CisgICB9CisgICAvKiBQdXQgbWVtb3J5IGJhY2sgaW4gaXRzIHBsYWNlICovCisgICBfbW1fc3RvcmV1X3BzKF9tZW0sIG1lbVswXSk7CisgICBfbW1fc3RvcmV1X3BzKF9tZW0rNCwgbWVtWzFdKTsKK30KKworI2RlZmluZSBPVkVSUklERV9JSVJfTUVNMTYKK3ZvaWQgaWlyX21lbTE2KGNvbnN0IGZsb2F0ICp4LCBjb25zdCBmbG9hdCAqX2RlbiwgZmxvYXQgKnksIGludCBOLCBpbnQgb3JkLCBmbG9hdCAqX21lbSwgY2hhciAqc3RhY2spCit7CisgICBpZihvcmQ9PTEwKQorICAgICAgaWlyX21lbTE2XzEwKHgsIF9kZW4sIHksIE4sIG9yZCwgX21lbSk7CisgICBlbHNlIGlmIChvcmQ9PTgpCisgICAgICBpaXJfbWVtMTZfOCh4LCBfZGVuLCB5LCBOLCBvcmQsIF9tZW0pOworfQorCisKK3ZvaWQgZmlyX21lbTE2XzEwKGNvbnN0IGZsb2F0ICp4LCBjb25zdCBmbG9hdCAqX251bSwgZmxvYXQgKnksIGludCBOLCBpbnQgb3JkLCBmbG9hdCAqX21lbSkKK3sKKyAgIF9fbTEyOCBudW1bM10sIG1lbVszXTsKKworICAgaW50IGk7CisKKyAgIC8qIENvcHkgbnVtZXJhdG9yLCBkZW5vbWluYXRvciBhbmQgbWVtb3J5IHRvIGFsaWduZWQgeG1tICovCisgICBmb3IgKGk9MDtpPDI7aSsrKQorICAgeworICAgICAgbWVtW2ldID0gX21tX2xvYWR1X3BzKF9tZW0rNCppKTsKKyAgICAgIG51bVtpXSA9IF9tbV9sb2FkdV9wcyhfbnVtKzQqaSk7CisgICB9CisgICBtZW1bMl0gPSBfbW1fc2V0cl9wcyhfbWVtWzhdLCBfbWVtWzldLCAwLCAwKTsKKyAgIG51bVsyXSA9IF9tbV9zZXRyX3BzKF9udW1bOF0sIF9udW1bOV0sIDAsIDApOworICAgCisgICBmb3IgKGk9MDtpPE47aSsrKQorICAgeworICAgICAgX19tMTI4IHh4OworICAgICAgX19tMTI4IHl5OworICAgICAgLyogQ29tcHV0ZSBuZXh0IGZpbHRlciByZXN1bHQgKi8KKyAgICAgIHh4ID0gX21tX2xvYWRfcHMxKHgraSk7CisgICAgICB5eSA9IF9tbV9hZGRfc3MoeHgsIG1lbVswXSk7CisgICAgICBfbW1fc3RvcmVfc3MoeStpLCB5eSk7CisgICAgICB5eSA9IF9tbV9zaHVmZmxlX3BzKHl5LCB5eSwgMCk7CisgICAgICAKKyAgICAgIC8qIFVwZGF0ZSBtZW1vcnkgKi8KKyAgICAgIG1lbVswXSA9IF9tbV9tb3ZlX3NzKG1lbVswXSwgbWVtWzFdKTsKKyAgICAgIG1lbVswXSA9IF9tbV9zaHVmZmxlX3BzKG1lbVswXSwgbWVtWzBdLCAweDM5KTsKKworICAgICAgbWVtWzBdID0gX21tX2FkZF9wcyhtZW1bMF0sIF9tbV9tdWxfcHMoeHgsIG51bVswXSkpOworCisgICAgICBtZW1bMV0gPSBfbW1fbW92ZV9zcyhtZW1bMV0sIG1lbVsyXSk7CisgICAgICBtZW1bMV0gPSBfbW1fc2h1ZmZsZV9wcyhtZW1bMV0sIG1lbVsxXSwgMHgzOSk7CisKKyAgICAgIG1lbVsxXSA9IF9tbV9hZGRfcHMobWVtWzFdLCBfbW1fbXVsX3BzKHh4LCBudW1bMV0pKTsKKworICAgICAgbWVtWzJdID0gX21tX3NodWZmbGVfcHMobWVtWzJdLCBtZW1bMl0sIDB4ZmQpOworCisgICAgICBtZW1bMl0gPSBfbW1fYWRkX3BzKG1lbVsyXSwgX21tX211bF9wcyh4eCwgbnVtWzJdKSk7CisgICB9CisgICAvKiBQdXQgbWVtb3J5IGJhY2sgaW4gaXRzIHBsYWNlICovCisgICBfbW1fc3RvcmV1X3BzKF9tZW0sIG1lbVswXSk7CisgICBfbW1fc3RvcmV1X3BzKF9tZW0rNCwgbWVtWzFdKTsKKyAgIF9tbV9zdG9yZV9zcyhfbWVtKzgsIG1lbVsyXSk7CisgICBtZW1bMl0gPSBfbW1fc2h1ZmZsZV9wcyhtZW1bMl0sIG1lbVsyXSwgMHg1NSk7CisgICBfbW1fc3RvcmVfc3MoX21lbSs5LCBtZW1bMl0pOworfQorCit2b2lkIGZpcl9tZW0xNl84KGNvbnN0IGZsb2F0ICp4LCBjb25zdCBmbG9hdCAqX251bSwgZmxvYXQgKnksIGludCBOLCBpbnQgb3JkLCBmbG9hdCAqX21lbSkKK3sKKyAgIF9fbTEyOCBudW1bMl0sIG1lbVsyXTsKKworICAgaW50IGk7CisKKyAgIC8qIENvcHkgbnVtZXJhdG9yLCBkZW5vbWluYXRvciBhbmQgbWVtb3J5IHRvIGFsaWduZWQgeG1tICovCisgICBmb3IgKGk9MDtpPDI7aSsrKQorICAgeworICAgICAgbWVtW2ldID0gX21tX2xvYWR1X3BzKF9tZW0rNCppKTsKKyAgICAgIG51bVtpXSA9IF9tbV9sb2FkdV9wcyhfbnVtKzQqaSk7CisgICB9CisgICAKKyAgIGZvciAoaT0wO2k8TjtpKyspCisgICB7CisgICAgICBfX20xMjggeHg7CisgICAgICBfX20xMjggeXk7CisgICAgICAvKiBDb21wdXRlIG5leHQgZmlsdGVyIHJlc3VsdCAqLworICAgICAgeHggPSBfbW1fbG9hZF9wczEoeCtpKTsKKyAgICAgIHl5ID0gX21tX2FkZF9zcyh4eCwgbWVtWzBdKTsKKyAgICAgIF9tbV9zdG9yZV9zcyh5K2ksIHl5KTsKKyAgICAgIHl5ID0gX21tX3NodWZmbGVfcHMoeXksIHl5LCAwKTsKKyAgICAgIAorICAgICAgLyogVXBkYXRlIG1lbW9yeSAqLworICAgICAgbWVtWzBdID0gX21tX21vdmVfc3MobWVtWzBdLCBtZW1bMV0pOworICAgICAgbWVtWzBdID0gX21tX3NodWZmbGVfcHMobWVtWzBdLCBtZW1bMF0sIDB4MzkpOworCisgICAgICBtZW1bMF0gPSBfbW1fYWRkX3BzKG1lbVswXSwgX21tX211bF9wcyh4eCwgbnVtWzBdKSk7CisKKyAgICAgIG1lbVsxXSA9IF9tbV9zdWJfc3MobWVtWzFdLCBtZW1bMV0pOworICAgICAgbWVtWzFdID0gX21tX3NodWZmbGVfcHMobWVtWzFdLCBtZW1bMV0sIDB4MzkpOworCisgICAgICBtZW1bMV0gPSBfbW1fYWRkX3BzKG1lbVsxXSwgX21tX211bF9wcyh4eCwgbnVtWzFdKSk7CisgICB9CisgICAvKiBQdXQgbWVtb3J5IGJhY2sgaW4gaXRzIHBsYWNlICovCisgICBfbW1fc3RvcmV1X3BzKF9tZW0sIG1lbVswXSk7CisgICBfbW1fc3RvcmV1X3BzKF9tZW0rNCwgbWVtWzFdKTsKK30KKworI2RlZmluZSBPVkVSUklERV9GSVJfTUVNMTYKK3ZvaWQgZmlyX21lbTE2KGNvbnN0IGZsb2F0ICp4LCBjb25zdCBmbG9hdCAqX251bSwgZmxvYXQgKnksIGludCBOLCBpbnQgb3JkLCBmbG9hdCAqX21lbSwgY2hhciAqc3RhY2spCit7CisgICBpZihvcmQ9PTEwKQorICAgICAgZmlyX21lbTE2XzEwKHgsIF9udW0sIHksIE4sIG9yZCwgX21lbSk7CisgICBlbHNlIGlmIChvcmQ9PTgpCisgICAgICBmaXJfbWVtMTZfOCh4LCBfbnVtLCB5LCBOLCBvcmQsIF9tZW0pOworfQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZml4ZWRfYXJtNC5oIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZml4ZWRfYXJtNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OTgxY2EKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9maXhlZF9hcm00LmgKQEAgLTAsMCArMSwxNDggQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNCBKZWFuLU1hcmMgVmFsaW4gKi8KKy8qKgorICAgQGZpbGUgZml4ZWRfYXJtNC5oCisgICBAYnJpZWYgQVJNNCBmaXhlZC1wb2ludCBvcGVyYXRpb25zCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBGSVhFRF9BUk00X0gKKyNkZWZpbmUgRklYRURfQVJNNF9ICisKKyN1bmRlZiBNVUxUMTZfMzJfUTE0CitzdGF0aWMgaW5saW5lIHNweF93b3JkMzJfdCBNVUxUMTZfMzJfUTE0KHNweF93b3JkMTZfdCB4LCBzcHhfd29yZDMyX3QgeSkgeworICBpbnQgcmVzOworICBpbnQgZHVtbXk7CisgIGFzbSAoCisgICAgICAgICJzbXVsbCAgJTAsJTEsJTIsJTMgXG5cdCIKKyAgICAgICAgIm1vdiAlMCwgJTAsIGxzciAjMTQgXG5cdCIKKyAgICAgICAgImFkZCAlMCwgJTAsICUxLCBsc2wgIzE4IFxuXHQiCisgICA6ICI9JnIiKHJlcyksICI9JnIiIChkdW1teSkKKyAgIDogInIiKHkpLCJyIigoaW50KXgpKTsKKyAgcmV0dXJuKHJlcyk7Cit9CisKKyN1bmRlZiBNVUxUMTZfMzJfUTE1CitzdGF0aWMgaW5saW5lIHNweF93b3JkMzJfdCBNVUxUMTZfMzJfUTE1KHNweF93b3JkMTZfdCB4LCBzcHhfd29yZDMyX3QgeSkgeworICBpbnQgcmVzOworICBpbnQgZHVtbXk7CisgIGFzbSAoCisgICAgICAgICJzbXVsbCAgJTAsJTEsJTIsJTMgXG5cdCIKKyAgICAgICAgIm1vdiAlMCwgJTAsIGxzciAjMTUgXG5cdCIKKyAgICAgICAgImFkZCAlMCwgJTAsICUxLCBsc2wgIzE3IFxuXHQiCisgICA6ICI9JnIiKHJlcyksICI9JnIiIChkdW1teSkKKyAgIDogInIiKHkpLCJyIigoaW50KXgpKTsKKyAgcmV0dXJuKHJlcyk7Cit9CisKKyN1bmRlZiBESVYzMl8xNgorc3RhdGljIGlubGluZSBzaG9ydCBESVYzMl8xNihpbnQgYSwgaW50IGIpCit7CisgICBpbnQgcmVzPTA7CisgICBpbnQgZGVhZDEsIGRlYWQyLCBkZWFkMywgZGVhZDQsIGRlYWQ1OworICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICAgIlx0ZW9yICU1LCAlMCwgJTFcbiIKKyAgICAgICAgICJcdG1vdnMgJTQsICUwXG4iCisgICAgICAgICAiXHRyc2JtaSAlMCwgJTAsICMwIFxuIgorICAgICAgICAgIlx0bW92cyAlNCwgJTFcbiIKKyAgICAgICAgICJcdHJzYm1pICUxLCAlMSwgIzAgXG4iCisgICAgICAgICAiXHRtb3YgJTQsICMxXG4iCisKKyAgICAgICAgICJcdHN1YnMgJTMsICUwLCAlMSwgYXNsICMxNCBcbiIKKyAgICAgICAgICJcdG1vdnBsICUwLCAlMyBcbiIKKyAgICAgICAgICJcdG9ycnBsICUyLCAlMiwgJTQsIGFzbCAjMTQgXG4iCisKKyAgICAgICAgICJcdHN1YnMgJTMsICUwLCAlMSwgYXNsICMxMyBcbiIKKyAgICAgICAgICJcdG1vdnBsICUwLCAlMyBcbiIKKyAgICAgICAgICJcdG9ycnBsICUyLCAlMiwgJTQsIGFzbCAjMTMgXG4iCisKKyAgICAgICAgICJcdHN1YnMgJTMsICUwLCAlMSwgYXNsICMxMiBcbiIKKyAgICAgICAgICJcdG1vdnBsICUwLCAlMyBcbiIKKyAgICAgICAgICJcdG9ycnBsICUyLCAlMiwgJTQsIGFzbCAjMTIgXG4iCisKKyAgICAgICAgICJcdHN1YnMgJTMsICUwLCAlMSwgYXNsICMxMSBcbiIKKyAgICAgICAgICJcdG1vdnBsICUwLCAlMyBcbiIKKyAgICAgICAgICJcdG9ycnBsICUyLCAlMiwgJTQsIGFzbCAjMTEgXG4iCisKKyAgICAgICAgICJcdHN1YnMgJTMsICUwLCAlMSwgYXNsICMxMCBcbiIKKyAgICAgICAgICJcdG1vdnBsICUwLCAlMyBcbiIKKyAgICAgICAgICJcdG9ycnBsICUyLCAlMiwgJTQsIGFzbCAjMTAgXG4iCisKKyAgICAgICAgICJcdHN1YnMgJTMsICUwLCAlMSwgYXNsICM5IFxuIgorICAgICAgICAgIlx0bW92cGwgJTAsICUzIFxuIgorICAgICAgICAgIlx0b3JycGwgJTIsICUyLCAlNCwgYXNsICM5IFxuIgorCisgICAgICAgICAiXHRzdWJzICUzLCAlMCwgJTEsIGFzbCAjOCBcbiIKKyAgICAgICAgICJcdG1vdnBsICUwLCAlMyBcbiIKKyAgICAgICAgICJcdG9ycnBsICUyLCAlMiwgJTQsIGFzbCAjOCBcbiIKKworICAgICAgICAgIlx0c3VicyAlMywgJTAsICUxLCBhc2wgIzcgXG4iCisgICAgICAgICAiXHRtb3ZwbCAlMCwgJTMgXG4iCisgICAgICAgICAiXHRvcnJwbCAlMiwgJTIsICU0LCBhc2wgIzcgXG4iCisKKyAgICAgICAgICJcdHN1YnMgJTMsICUwLCAlMSwgYXNsICM2IFxuIgorICAgICAgICAgIlx0bW92cGwgJTAsICUzIFxuIgorICAgICAgICAgIlx0b3JycGwgJTIsICUyLCAlNCwgYXNsICM2IFxuIgorICAgICAgICAgCisgICAgICAgICAiXHRzdWJzICUzLCAlMCwgJTEsIGFzbCAjNSBcbiIKKyAgICAgICAgICJcdG1vdnBsICUwLCAlMyBcbiIKKyAgICAgICAgICJcdG9ycnBsICUyLCAlMiwgJTQsIGFzbCAjNSBcbiIKKworICAgICAgICAgIlx0c3VicyAlMywgJTAsICUxLCBhc2wgIzQgXG4iCisgICAgICAgICAiXHRtb3ZwbCAlMCwgJTMgXG4iCisgICAgICAgICAiXHRvcnJwbCAlMiwgJTIsICU0LCBhc2wgIzQgXG4iCisKKyAgICAgICAgICJcdHN1YnMgJTMsICUwLCAlMSwgYXNsICMzIFxuIgorICAgICAgICAgIlx0bW92cGwgJTAsICUzIFxuIgorICAgICAgICAgIlx0b3JycGwgJTIsICUyLCAlNCwgYXNsICMzIFxuIgorCisgICAgICAgICAiXHRzdWJzICUzLCAlMCwgJTEsIGFzbCAjMiBcbiIKKyAgICAgICAgICJcdG1vdnBsICUwLCAlMyBcbiIKKyAgICAgICAgICJcdG9ycnBsICUyLCAlMiwgJTQsIGFzbCAjMiBcbiIKKworICAgICAgICAgIlx0c3VicyAlMywgJTAsICUxLCBhc2wgIzEgXG4iCisgICAgICAgICAiXHRtb3ZwbCAlMCwgJTMgXG4iCisgICAgICAgICAiXHRvcnJwbCAlMiwgJTIsICU0LCBhc2wgIzEgXG4iCisKKyAgICAgICAgICJcdHN1YnMgJTMsICUwLCAlMSBcbiIKKyAgICAgICAgICJcdG1vdnBsICUwLCAlMyBcbiIKKyAgICAgICAgICJcdG9ycnBsICUyLCAlMiwgJTQgXG4iCisKKyAgICAgICAgICJcdG1vdnMgJTUsICU1LCBsc3IgIzMxIFxuIgorICAgICAgICAgIlx0cnNibmUgJTIsICUyLCAjMCBcbiIKKyAgIDogIj1yIiAoZGVhZDEpLCAiPXIiIChkZWFkMiksICI9ciIgKHJlcyksCisgICAiPXIiIChkZWFkMyksICI9ciIgKGRlYWQ0KSwgIj1yIiAoZGVhZDUpCisgICA6ICIwIiAoYSksICIxIiAoYiksICIyIiAocmVzKQorICAgOiAiY2MiCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgcmV0dXJuIHJlczsKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2ZpeGVkX2FybTVlLmggYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9maXhlZF9hcm01ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNDg2MWMKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9maXhlZF9hcm01ZS5oCkBAIC0wLDAgKzEsMTc4IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDMgSmVhbi1NYXJjIFZhbGluICovCisvKioKKyAgIEBmaWxlIGZpeGVkX2FybTVlLmgKKyAgIEBicmllZiBBUk0tdHVuZWQgZml4ZWQtcG9pbnQgb3BlcmF0aW9ucworKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgRklYRURfQVJNNUVfSAorI2RlZmluZSBGSVhFRF9BUk01RV9ICisKKyN1bmRlZiBNVUxUMTZfMTYKK3N0YXRpYyBpbmxpbmUgc3B4X3dvcmQzMl90IE1VTFQxNl8xNihzcHhfd29yZDE2X3QgeCwgc3B4X3dvcmQxNl90IHkpIHsKKyAgaW50IHJlczsKKyAgYXNtICgic211bGJiICAlMCwlMSwlMjtcbiIKKyAgICAgICAgICAgICAgOiAiPSZyIihyZXMpCisgICAgICAgICAgICAgIDogIiVyIih4KSwiciIoeSkpOworICByZXR1cm4ocmVzKTsKK30KKworI3VuZGVmIE1BQzE2XzE2CitzdGF0aWMgaW5saW5lIHNweF93b3JkMzJfdCBNQUMxNl8xNihzcHhfd29yZDMyX3QgYSwgc3B4X3dvcmQxNl90IHgsIHNweF93b3JkMzJfdCB5KSB7CisgIGludCByZXM7CisgIGFzbSAoInNtbGFiYiAgJTAsJTEsJTIsJTM7XG4iCisgICAgICAgICAgICAgIDogIj0mciIocmVzKQorICAgICAgICAgICAgICAgOiAiJXIiKHgpLCJyIih5KSwiciIoYSkpOworICByZXR1cm4ocmVzKTsKK30KKworI3VuZGVmIE1VTFQxNl8zMl9RMTUKK3N0YXRpYyBpbmxpbmUgc3B4X3dvcmQzMl90IE1VTFQxNl8zMl9RMTUoc3B4X3dvcmQxNl90IHgsIHNweF93b3JkMzJfdCB5KSB7CisgIGludCByZXM7CisgIGFzbSAoInNtdWx3YiAgJTAsJTEsJTI7XG4iCisgICAgICAgICAgICAgIDogIj0mciIocmVzKQorICAgICAgICAgICAgICAgOiAiJXIiKHk8PDEpLCJyIih4KSk7CisgIHJldHVybihyZXMpOworfQorCisjdW5kZWYgTUFDMTZfMzJfUTE1CitzdGF0aWMgaW5saW5lIHNweF93b3JkMzJfdCBNQUMxNl8zMl9RMTUoc3B4X3dvcmQzMl90IGEsIHNweF93b3JkMTZfdCB4LCBzcHhfd29yZDMyX3QgeSkgeworICBpbnQgcmVzOworICBhc20gKCJzbWxhd2IgICUwLCUxLCUyLCUzO1xuIgorICAgICAgICAgICAgICA6ICI9JnIiKHJlcykKKyAgICAgICAgICAgICAgIDogIiVyIih5PDwxKSwiciIoeCksInIiKGEpKTsKKyAgcmV0dXJuKHJlcyk7Cit9CisKKyN1bmRlZiBNVUxUMTZfMzJfUTExCitzdGF0aWMgaW5saW5lIHNweF93b3JkMzJfdCBNVUxUMTZfMzJfUTExKHNweF93b3JkMTZfdCB4LCBzcHhfd29yZDMyX3QgeSkgeworICBpbnQgcmVzOworICBhc20gKCJzbXVsd2IgICUwLCUxLCUyO1xuIgorICAgICAgICAgICAgICA6ICI9JnIiKHJlcykKKyAgICAgICAgICAgICAgIDogIiVyIih5PDw1KSwiciIoeCkpOworICByZXR1cm4ocmVzKTsKK30KKworI3VuZGVmIE1BQzE2XzMyX1ExMQorc3RhdGljIGlubGluZSBzcHhfd29yZDMyX3QgTUFDMTZfMzJfUTExKHNweF93b3JkMzJfdCBhLCBzcHhfd29yZDE2X3QgeCwgc3B4X3dvcmQzMl90IHkpIHsKKyAgaW50IHJlczsKKyAgYXNtICgic21sYXdiICAlMCwlMSwlMiwlMztcbiIKKyAgICAgICAgICAgICAgOiAiPSZyIihyZXMpCisgICAgICAgICAgICAgICA6ICIlciIoeTw8NSksInIiKHgpLCJyIihhKSk7CisgIHJldHVybihyZXMpOworfQorCisjdW5kZWYgRElWMzJfMTYKK3N0YXRpYyBpbmxpbmUgc2hvcnQgRElWMzJfMTYoaW50IGEsIGludCBiKQoreworICAgaW50IHJlcz0wOworICAgaW50IGRlYWQxLCBkZWFkMiwgZGVhZDMsIGRlYWQ0LCBkZWFkNTsKKyAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgICJcdGVvciAlNSwgJTAsICUxXG4iCisgICAgICAgICAiXHRtb3ZzICU0LCAlMFxuIgorICAgICAgICAgIlx0cnNibWkgJTAsICUwLCAjMCBcbiIKKyAgICAgICAgICJcdG1vdnMgJTQsICUxXG4iCisgICAgICAgICAiXHRyc2JtaSAlMSwgJTEsICMwIFxuIgorICAgICAgICAgIlx0bW92ICU0LCAjMVxuIgorCisgICAgICAgICAiXHRzdWJzICUzLCAlMCwgJTEsIGFzbCAjMTQgXG4iCisgICAgICAgICAiXHRvcnJwbCAlMiwgJTIsICU0LCBhc2wgIzE0IFxuIgorICAgICAgICAgIlx0bW92cGwgJTAsICUzIFxuIgorCisgICAgICAgICAiXHRzdWJzICUzLCAlMCwgJTEsIGFzbCAjMTMgXG4iCisgICAgICAgICAiXHRvcnJwbCAlMiwgJTIsICU0LCBhc2wgIzEzIFxuIgorICAgICAgICAgIlx0bW92cGwgJTAsICUzIFxuIgorCisgICAgICAgICAiXHRzdWJzICUzLCAlMCwgJTEsIGFzbCAjMTIgXG4iCisgICAgICAgICAiXHRvcnJwbCAlMiwgJTIsICU0LCBhc2wgIzEyIFxuIgorICAgICAgICAgIlx0bW92cGwgJTAsICUzIFxuIgorCisgICAgICAgICAiXHRzdWJzICUzLCAlMCwgJTEsIGFzbCAjMTEgXG4iCisgICAgICAgICAiXHRvcnJwbCAlMiwgJTIsICU0LCBhc2wgIzExIFxuIgorICAgICAgICAgIlx0bW92cGwgJTAsICUzIFxuIgorCisgICAgICAgICAiXHRzdWJzICUzLCAlMCwgJTEsIGFzbCAjMTAgXG4iCisgICAgICAgICAiXHRvcnJwbCAlMiwgJTIsICU0LCBhc2wgIzEwIFxuIgorICAgICAgICAgIlx0bW92cGwgJTAsICUzIFxuIgorCisgICAgICAgICAiXHRzdWJzICUzLCAlMCwgJTEsIGFzbCAjOSBcbiIKKyAgICAgICAgICJcdG9ycnBsICUyLCAlMiwgJTQsIGFzbCAjOSBcbiIKKyAgICAgICAgICJcdG1vdnBsICUwLCAlMyBcbiIKKworICAgICAgICAgIlx0c3VicyAlMywgJTAsICUxLCBhc2wgIzggXG4iCisgICAgICAgICAiXHRvcnJwbCAlMiwgJTIsICU0LCBhc2wgIzggXG4iCisgICAgICAgICAiXHRtb3ZwbCAlMCwgJTMgXG4iCisKKyAgICAgICAgICJcdHN1YnMgJTMsICUwLCAlMSwgYXNsICM3IFxuIgorICAgICAgICAgIlx0b3JycGwgJTIsICUyLCAlNCwgYXNsICM3IFxuIgorICAgICAgICAgIlx0bW92cGwgJTAsICUzIFxuIgorCisgICAgICAgICAiXHRzdWJzICUzLCAlMCwgJTEsIGFzbCAjNiBcbiIKKyAgICAgICAgICJcdG9ycnBsICUyLCAlMiwgJTQsIGFzbCAjNiBcbiIKKyAgICAgICAgICJcdG1vdnBsICUwLCAlMyBcbiIKKworICAgICAgICAgIlx0c3VicyAlMywgJTAsICUxLCBhc2wgIzUgXG4iCisgICAgICAgICAiXHRvcnJwbCAlMiwgJTIsICU0LCBhc2wgIzUgXG4iCisgICAgICAgICAiXHRtb3ZwbCAlMCwgJTMgXG4iCisKKyAgICAgICAgICJcdHN1YnMgJTMsICUwLCAlMSwgYXNsICM0IFxuIgorICAgICAgICAgIlx0b3JycGwgJTIsICUyLCAlNCwgYXNsICM0IFxuIgorICAgICAgICAgIlx0bW92cGwgJTAsICUzIFxuIgorCisgICAgICAgICAiXHRzdWJzICUzLCAlMCwgJTEsIGFzbCAjMyBcbiIKKyAgICAgICAgICJcdG9ycnBsICUyLCAlMiwgJTQsIGFzbCAjMyBcbiIKKyAgICAgICAgICJcdG1vdnBsICUwLCAlMyBcbiIKKworICAgICAgICAgIlx0c3VicyAlMywgJTAsICUxLCBhc2wgIzIgXG4iCisgICAgICAgICAiXHRvcnJwbCAlMiwgJTIsICU0LCBhc2wgIzIgXG4iCisgICAgICAgICAiXHRtb3ZwbCAlMCwgJTMgXG4iCisKKyAgICAgICAgICJcdHN1YnMgJTMsICUwLCAlMSwgYXNsICMxIFxuIgorICAgICAgICAgIlx0b3JycGwgJTIsICUyLCAlNCwgYXNsICMxIFxuIgorICAgICAgICAgIlx0bW92cGwgJTAsICUzIFxuIgorCisgICAgICAgICAiXHRzdWJzICUzLCAlMCwgJTEgXG4iCisgICAgICAgICAiXHRvcnJwbCAlMiwgJTIsICU0IFxuIgorICAgICAgICAgIlx0bW92cGwgJTAsICUzIFxuIgorICAgICAgICAgCisgICAgICAgICAiXHRtb3ZzICU1LCAlNSwgbHNyICMzMSBcbiIKKyAgICAgICAgICJcdHJzYm5lICUyLCAlMiwgIzAgXG4iCisgICA6ICI9ciIgKGRlYWQxKSwgIj1yIiAoZGVhZDIpLCAiPXIiIChyZXMpLAorICAgIj1yIiAoZGVhZDMpLCAiPXIiIChkZWFkNCksICI9ciIgKGRlYWQ1KQorICAgOiAiMCIgKGEpLCAiMSIgKGIpLCAiMiIgKHJlcykKKyAgIDogIm1lbW9yeSIsICJjYyIKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICByZXR1cm4gcmVzOworfQorCisKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2ZpeGVkX2JmaW4uaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2ZpeGVkX2JmaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTI2ZjZhCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvZml4ZWRfYmZpbi5oCkBAIC0wLDAgKzEsMTczIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDUgQW5hbG9nIERldmljZXMKKyAgIEF1dGhvcjogSmVhbi1NYXJjIFZhbGluICovCisvKioKKyAgIEBmaWxlIGZpeGVkX2JmaW4uaAorICAgQGJyaWVmIEJsYWNrZmluIGZpeGVkLXBvaW50IG9wZXJhdGlvbnMKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIEZJWEVEX0JGSU5fSAorI2RlZmluZSBGSVhFRF9CRklOX0gKKworI3VuZGVmIFBESVYzMl8xNgorc3RhdGljIGlubGluZSBzcHhfd29yZDE2X3QgUERJVjMyXzE2KHNweF93b3JkMzJfdCBhLCBzcHhfd29yZDE2X3QgYikKK3sKKyAgIHNweF93b3JkMzJfdCByZXMsIGJiOworICAgYmIgPSBiOworICAgYSArPSBiPj4xOworICAgX19hc21fXyAgKAorICAgICAgICAgIlAwID0gMTU7XG5cdCIKKyAgICAgICAgICJSMCA9ICUxO1xuXHQiCisgICAgICAgICAiUjEgPSAlMjtcblx0IgorICAgICAgICAgLy8iUjAgPSBSMCArIFIxO1xuXHQiCisgICAgICAgICAiUjAgPDw9IDE7XG5cdCIKKyAgICAgICAgICJESVZTIChSMCwgUjEpO1xuXHQiCisgICAgICAgICAiTE9PUCBkaXZpZGUlPSBMQzAgPSBQMDtcblx0IgorICAgICAgICAgIkxPT1BfQkVHSU4gZGl2aWRlJT07XG5cdCIKKyAgICAgICAgICAgICJESVZRIChSMCwgUjEpO1xuXHQiCisgICAgICAgICAiTE9PUF9FTkQgZGl2aWRlJT07XG5cdCIKKyAgICAgICAgICJSMCA9IFIwLkw7XG5cdCIKKyAgICAgICAgICIlMCA9IFIwO1xuXHQiCisgICA6ICI9bSIgKHJlcykKKyAgIDogIm0iIChhKSwgIm0iIChiYikKKyAgIDogIlAwIiwgIlIwIiwgIlIxIiwgImNjIik7CisgICByZXR1cm4gcmVzOworfQorCisjdW5kZWYgRElWMzJfMTYKK3N0YXRpYyBpbmxpbmUgc3B4X3dvcmQxNl90IERJVjMyXzE2KHNweF93b3JkMzJfdCBhLCBzcHhfd29yZDE2X3QgYikKK3sKKyAgIHNweF93b3JkMzJfdCByZXMsIGJiOworICAgYmIgPSBiOworICAgLyogTWFrZSB0aGUgcm91bmRpbmYgY29uc2lzdGVudCB3aXRoIHRoZSBDIHZlcnNpb24gCisgICAgICAoZG8gd2UgbmVlZCB0byBkbyB0aGF0PykqLworICAgaWYgKGE8MCkgCisgICAgICBhICs9IChiLTEpOworICAgX19hc21fXyAgKAorICAgICAgICAgIlAwID0gMTU7XG5cdCIKKyAgICAgICAgICJSMCA9ICUxO1xuXHQiCisgICAgICAgICAiUjEgPSAlMjtcblx0IgorICAgICAgICAgIlIwIDw8PSAxO1xuXHQiCisgICAgICAgICAiRElWUyAoUjAsIFIxKTtcblx0IgorICAgICAgICAgIkxPT1AgZGl2aWRlJT0gTEMwID0gUDA7XG5cdCIKKyAgICAgICAgICJMT09QX0JFR0lOIGRpdmlkZSU9O1xuXHQiCisgICAgICAgICAgICAiRElWUSAoUjAsIFIxKTtcblx0IgorICAgICAgICAgIkxPT1BfRU5EIGRpdmlkZSU9O1xuXHQiCisgICAgICAgICAiUjAgPSBSMC5MO1xuXHQiCisgICAgICAgICAiJTAgPSBSMDtcblx0IgorICAgOiAiPW0iIChyZXMpCisgICA6ICJtIiAoYSksICJtIiAoYmIpCisgICA6ICJQMCIsICJSMCIsICJSMSIsICJjYyIpOworICAgcmV0dXJuIHJlczsKK30KKworI3VuZGVmIE1BWDE2CitzdGF0aWMgaW5saW5lIHNweF93b3JkMTZfdCBNQVgxNihzcHhfd29yZDE2X3QgYSwgc3B4X3dvcmQxNl90IGIpCit7CisgICBzcHhfd29yZDMyX3QgcmVzOworICAgX19hc21fXyAgKAorICAgICAgICAgIiUxID0gJTEuTCAoWCk7XG5cdCIKKyAgICAgICAgICIlMiA9ICUyLkwgKFgpO1xuXHQiCisgICAgICAgICAiJTAgPSBNQVgoJTEsJTIpOyIKKyAgIDogIj1kIiAocmVzKQorICAgOiAiJWQiIChhKSwgImQiIChiKQorICAgKTsKKyAgIHJldHVybiByZXM7Cit9CisKKyN1bmRlZiBNVUxUMTZfMzJfUTE1CitzdGF0aWMgaW5saW5lIHNweF93b3JkMzJfdCBNVUxUMTZfMzJfUTE1KHNweF93b3JkMTZfdCBhLCBzcHhfd29yZDMyX3QgYikKK3sKKyAgIHNweF93b3JkMzJfdCByZXM7CisgICBfX2FzbV9fCisgICAoCisgICAgICAgICAiQTEgPSAlMi5MKiUxLkwgKE0pO1xuXHQiCisgICAgICAgICAiQTEgPSBBMSA+Pj4gMTU7XG5cdCIKKyAgICAgICAgICIlMCA9IChBMSArPSAlMi5MKiUxLkgpIDtcblx0IgorICAgOiAiPSZXIiAocmVzKSwgIj0mZCIgKGIpCisgICA6ICJkIiAoYSksICIxIiAoYikKKyAgIDogIkExIgorICAgKTsKKyAgIHJldHVybiByZXM7Cit9CisKKyN1bmRlZiBNQUMxNl8zMl9RMTUKK3N0YXRpYyBpbmxpbmUgc3B4X3dvcmQzMl90IE1BQzE2XzMyX1ExNShzcHhfd29yZDMyX3QgYywgc3B4X3dvcmQxNl90IGEsIHNweF93b3JkMzJfdCBiKQoreworICAgc3B4X3dvcmQzMl90IHJlczsKKyAgIF9fYXNtX18KKyAgICAgICAgICgKKyAgICAgICAgICJBMSA9ICUyLkwqJTEuTCAoTSk7XG5cdCIKKyAgICAgICAgICJBMSA9IEExID4+PiAxNTtcblx0IgorICAgICAgICAgIiUwID0gKEExICs9ICUyLkwqJTEuSCk7XG5cdCIKKyAgICAgICAgICIlMCA9ICUwICsgJTQ7XG5cdCIKKyAgIDogIj0mVyIgKHJlcyksICI9JmQiIChiKQorICAgOiAiZCIgKGEpLCAiMSIgKGIpLCAiZCIgKGMpCisgICA6ICJBMSIKKyAgICAgICAgICk7CisgICByZXR1cm4gcmVzOworfQorCisjdW5kZWYgTVVMVDE2XzMyX1ExNAorc3RhdGljIGlubGluZSBzcHhfd29yZDMyX3QgTVVMVDE2XzMyX1ExNChzcHhfd29yZDE2X3QgYSwgc3B4X3dvcmQzMl90IGIpCit7CisgICBzcHhfd29yZDMyX3QgcmVzOworICAgX19hc21fXworICAgICAgICAgKAorICAgICAgICAgIiUyIDw8PSAxO1xuXHQiCisgICAgICAgICAiQTEgPSAlMS5MKiUyLkwgKE0pO1xuXHQiCisgICAgICAgICAiQTEgPSBBMSA+Pj4gMTU7XG5cdCIKKyAgICAgICAgICIlMCA9IChBMSArPSAlMS5MKiUyLkgpO1xuXHQiCisgICA6ICI9VyIgKHJlcyksICI9ZCIgKGEpLCAiPWQiIChiKQorICAgOiAiMSIgKGEpLCAiMiIgKGIpCisgICA6ICJBMSIKKyAgICAgICAgICk7CisgICByZXR1cm4gcmVzOworfQorCisjdW5kZWYgTUFDMTZfMzJfUTE0CitzdGF0aWMgaW5saW5lIHNweF93b3JkMzJfdCBNQUMxNl8zMl9RMTQoc3B4X3dvcmQzMl90IGMsIHNweF93b3JkMTZfdCBhLCBzcHhfd29yZDMyX3QgYikKK3sKKyAgIHNweF93b3JkMzJfdCByZXM7CisgICBfX2FzbV9fCisgICAgICAgICAoCisgICAgICAgICAiJTEgPDw9IDE7XG5cdCIKKyAgICAgICAgICJBMSA9ICUyLkwqJTEuTCAoTSk7XG5cdCIKKyAgICAgICAgICJBMSA9IEExID4+PiAxNTtcblx0IgorICAgICAgICAgIiUwID0gKEExICs9ICUyLkwqJTEuSCk7XG5cdCIKKyAgICAgICAgICIlMCA9ICUwICsgJTQ7XG5cdCIKKyAgIDogIj0mVyIgKHJlcyksICI9JmQiIChiKQorICAgOiAiZCIgKGEpLCAiMSIgKGIpLCAiZCIgKGMpCisgICA6ICJBMSIKKyAgICAgICAgICk7CisgICByZXR1cm4gcmVzOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2ZpeGVkX2RlYnVnLmggYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9maXhlZF9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YzQ0OWYKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9maXhlZF9kZWJ1Zy5oCkBAIC0wLDAgKzEsNDg3IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDMgSmVhbi1NYXJjIFZhbGluICovCisvKioKKyAgIEBmaWxlIGZpeGVkX2RlYnVnLmgKKyAgIEBicmllZiBGaXhlZC1wb2ludCBvcGVyYXRpb25zIHdpdGggZGVidWdnaW5nCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBGSVhFRF9ERUJVR19ICisjZGVmaW5lIEZJWEVEX0RFQlVHX0gKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2V4dGVybiBsb25nIGxvbmcgc3B4X21pcHM7CisjZGVmaW5lIE1JUFNfSU5DIHNweF9taXBzKyssCisKKyNkZWZpbmUgUUNPTlNUMTYoeCxiaXRzKSAoKHNweF93b3JkMTZfdCkoLjUrKHgpKigoKHNweF93b3JkMzJfdCkxKTw8KGJpdHMpKSkpCisjZGVmaW5lIFFDT05TVDMyKHgsYml0cykgKChzcHhfd29yZDMyX3QpKC41Kyh4KSooKChzcHhfd29yZDMyX3QpMSk8PChiaXRzKSkpKQorCisKKyNkZWZpbmUgVkVSSUZZX1NIT1JUKHgpICgoeCk8PTMyNzY3JiYoeCk+PS0zMjc2OCkKKyNkZWZpbmUgVkVSSUZZX0lOVCh4KSAoKHgpPD0yMTQ3NDgzNjQ3TEwmJih4KT49LTIxNDc0ODM2NDhMTCkKKworc3RhdGljIGlubGluZSBzaG9ydCBORUcxNihpbnQgeCkKK3sKKyAgIGludCByZXM7CisgICBpZiAoIVZFUklGWV9TSE9SVCh4KSkKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIk5FRzE2OiBpbnB1dCBpcyBub3Qgc2hvcnQ6ICVkXG4iLCAoaW50KXgpOworICAgfQorICAgcmVzID0gLXg7CisgICBpZiAoIVZFUklGWV9TSE9SVChyZXMpKQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTkVHMTY6IG91dHB1dCBpcyBub3Qgc2hvcnQ6ICVkXG4iLCAoaW50KXJlcyk7CisgICBzcHhfbWlwcysrOworICAgcmV0dXJuIHJlczsKK30KK3N0YXRpYyBpbmxpbmUgaW50IE5FRzMyKGxvbmcgbG9uZyB4KQoreworICAgbG9uZyBsb25nIHJlczsKKyAgIGlmICghVkVSSUZZX0lOVCh4KSkKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIk5FRzE2OiBpbnB1dCBpcyBub3QgaW50OiAlZFxuIiwgKGludCl4KTsKKyAgIH0KKyAgIHJlcyA9IC14OworICAgaWYgKCFWRVJJRllfSU5UKHJlcykpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJORUcxNjogb3V0cHV0IGlzIG5vdCBpbnQ6ICVkXG4iLCAoaW50KXJlcyk7CisgICBzcHhfbWlwcysrOworICAgcmV0dXJuIHJlczsKK30KKworI2RlZmluZSBFWFRSQUNUMTYoeCkgX0VYVFJBQ1QxNih4LCBfX0ZJTEVfXywgX19MSU5FX18pCitzdGF0aWMgaW5saW5lIHNob3J0IF9FWFRSQUNUMTYoaW50IHgsIGNoYXIgKmZpbGUsIGludCBsaW5lKQoreworICAgaW50IHJlczsKKyAgIGlmICghVkVSSUZZX1NIT1JUKHgpKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRVhUUkFDVDE2OiBpbnB1dCBpcyBub3Qgc2hvcnQ6ICVkIGluICVzOiBsaW5lICVkXG4iLCB4LCBmaWxlLCBsaW5lKTsKKyAgIH0KKyAgIHJlcyA9IHg7CisgICBzcHhfbWlwcysrOworICAgcmV0dXJuIHJlczsKK30KKworI2RlZmluZSBFWFRFTkQzMih4KSBfRVhURU5EMzIoeCwgX19GSUxFX18sIF9fTElORV9fKQorc3RhdGljIGlubGluZSBpbnQgX0VYVEVORDMyKGludCB4LCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKyAgIGludCByZXM7CisgICBpZiAoIVZFUklGWV9TSE9SVCh4KSkKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkVYVEVORDMyOiBpbnB1dCBpcyBub3Qgc2hvcnQ6ICVkIGluICVzOiBsaW5lICVkXG4iLCB4LCBmaWxlLCBsaW5lKTsKKyAgIH0KKyAgIHJlcyA9IHg7CisgICBzcHhfbWlwcysrOworICAgcmV0dXJuIHJlczsKK30KKworI2RlZmluZSBTSFIxNihhLCBzaGlmdCkgX1NIUjE2KGEsIHNoaWZ0LCBfX0ZJTEVfXywgX19MSU5FX18pCitzdGF0aWMgaW5saW5lIHNob3J0IF9TSFIxNihpbnQgYSwgaW50IHNoaWZ0LCBjaGFyICpmaWxlLCBpbnQgbGluZSkgCit7CisgICBpbnQgcmVzOworICAgaWYgKCFWRVJJRllfU0hPUlQoYSkgfHwgIVZFUklGWV9TSE9SVChzaGlmdCkpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJTSFIxNjogaW5wdXRzIGFyZSBub3Qgc2hvcnQ6ICVkID4+ICVkIGluICVzOiBsaW5lICVkXG4iLCBhLCBzaGlmdCwgZmlsZSwgbGluZSk7CisgICB9CisgICByZXMgPSBhPj5zaGlmdDsKKyAgIGlmICghVkVSSUZZX1NIT1JUKHJlcykpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJTSFIxNjogb3V0cHV0IGlzIG5vdCBzaG9ydDogJWQgaW4gJXM6IGxpbmUgJWRcbiIsIHJlcywgZmlsZSwgbGluZSk7CisgICBzcHhfbWlwcysrOworICAgcmV0dXJuIHJlczsKK30KKyNkZWZpbmUgU0hMMTYoYSwgc2hpZnQpIF9TSEwxNihhLCBzaGlmdCwgX19GSUxFX18sIF9fTElORV9fKQorc3RhdGljIGlubGluZSBzaG9ydCBfU0hMMTYoaW50IGEsIGludCBzaGlmdCwgY2hhciAqZmlsZSwgaW50IGxpbmUpIAoreworICAgaW50IHJlczsKKyAgIGlmICghVkVSSUZZX1NIT1JUKGEpIHx8ICFWRVJJRllfU0hPUlQoc2hpZnQpKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiU0hMMTY6IGlucHV0cyBhcmUgbm90IHNob3J0OiAlZCAlZCBpbiAlczogbGluZSAlZFxuIiwgYSwgc2hpZnQsIGZpbGUsIGxpbmUpOworICAgfQorICAgcmVzID0gYTw8c2hpZnQ7CisgICBpZiAoIVZFUklGWV9TSE9SVChyZXMpKQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiU0hMMTY6IG91dHB1dCBpcyBub3Qgc2hvcnQ6ICVkIGluICVzOiBsaW5lICVkXG4iLCByZXMsIGZpbGUsIGxpbmUpOworICAgc3B4X21pcHMrKzsKKyAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IFNIUjMyKGxvbmcgbG9uZyBhLCBpbnQgc2hpZnQpIAoreworICAgbG9uZyBsb25nICByZXM7CisgICBpZiAoIVZFUklGWV9JTlQoYSkgfHwgIVZFUklGWV9TSE9SVChzaGlmdCkpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJTSFIzMjogaW5wdXRzIGFyZSBub3QgaW50OiAlZCAlZFxuIiwgKGludClhLCBzaGlmdCk7CisgICB9CisgICByZXMgPSBhPj5zaGlmdDsKKyAgIGlmICghVkVSSUZZX0lOVChyZXMpKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiU0hSMzI6IG91dHB1dCBpcyBub3QgaW50OiAlZFxuIiwgKGludClyZXMpOworICAgfQorICAgc3B4X21pcHMrKzsKKyAgIHJldHVybiByZXM7Cit9CitzdGF0aWMgaW5saW5lIGludCBTSEwzMihsb25nIGxvbmcgYSwgaW50IHNoaWZ0KSAKK3sKKyAgIGxvbmcgbG9uZyAgcmVzOworICAgaWYgKCFWRVJJRllfSU5UKGEpIHx8ICFWRVJJRllfU0hPUlQoc2hpZnQpKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiU0hMMzI6IGlucHV0cyBhcmUgbm90IGludDogJWQgJWRcbiIsIChpbnQpYSwgc2hpZnQpOworICAgfQorICAgcmVzID0gYTw8c2hpZnQ7CisgICBpZiAoIVZFUklGWV9JTlQocmVzKSkKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlNITDMyOiBvdXRwdXQgaXMgbm90IGludDogJWRcbiIsIChpbnQpcmVzKTsKKyAgIH0KKyAgIHNweF9taXBzKys7CisgICByZXR1cm4gcmVzOworfQorCisjZGVmaW5lIFBTSFIxNihhLHNoaWZ0KSAoU0hSMTYoQUREMTYoKGEpLCgoMTw8KChzaGlmdCkpPj4xKSkpLHNoaWZ0KSkKKyNkZWZpbmUgUFNIUjMyKGEsc2hpZnQpIChTSFIzMihBREQzMigoYSksKCgxPDwoKHNoaWZ0KSk+PjEpKSksc2hpZnQpKQorI2RlZmluZSBWU0hSMzIoYSwgc2hpZnQpICgoKHNoaWZ0KT4wKSA/IFNIUjMyKGEsIHNoaWZ0KSA6IFNITDMyKGEsIC0oc2hpZnQpKSkKKworI2RlZmluZSBTQVRVUkFURTE2KHgsYSkgKCgoeCk+KGEpID8gKGEpIDogKHgpPC0oYSkgPyAtKGEpIDogKHgpKSkKKyNkZWZpbmUgU0FUVVJBVEUzMih4LGEpICgoKHgpPihhKSA/IChhKSA6ICh4KTwtKGEpID8gLShhKSA6ICh4KSkpCisKKy8vI2RlZmluZSBTSFIoYSxzaGlmdCkgKChhKSA+PiAoc2hpZnQpKQorLy8jZGVmaW5lIFNITChhLHNoaWZ0KSAoKGEpIDw8IChzaGlmdCkpCisKKyNkZWZpbmUgQUREMTYoYSwgYikgX0FERDE2KGEsIGIsIF9fRklMRV9fLCBfX0xJTkVfXykKK3N0YXRpYyBpbmxpbmUgc2hvcnQgX0FERDE2KGludCBhLCBpbnQgYiwgY2hhciAqZmlsZSwgaW50IGxpbmUpIAoreworICAgaW50IHJlczsKKyAgIGlmICghVkVSSUZZX1NIT1JUKGEpIHx8ICFWRVJJRllfU0hPUlQoYikpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJBREQxNjogaW5wdXRzIGFyZSBub3Qgc2hvcnQ6ICVkICVkIGluICVzOiBsaW5lICVkXG4iLCBhLCBiLCBmaWxlLCBsaW5lKTsKKyAgIH0KKyAgIHJlcyA9IGErYjsKKyAgIGlmICghVkVSSUZZX1NIT1JUKHJlcykpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJBREQxNjogb3V0cHV0IGlzIG5vdCBzaG9ydDogJWQrJWQ9JWQgaW4gJXM6IGxpbmUgJWRcbiIsIGEsYixyZXMsIGZpbGUsIGxpbmUpOworICAgfQorICAgc3B4X21pcHMrKzsKKyAgIHJldHVybiByZXM7Cit9CisKKyNkZWZpbmUgU1VCMTYoYSwgYikgX1NVQjE2KGEsIGIsIF9fRklMRV9fLCBfX0xJTkVfXykKK3N0YXRpYyBpbmxpbmUgc2hvcnQgX1NVQjE2KGludCBhLCBpbnQgYiwgY2hhciAqZmlsZSwgaW50IGxpbmUpIAoreworICAgaW50IHJlczsKKyAgIGlmICghVkVSSUZZX1NIT1JUKGEpIHx8ICFWRVJJRllfU0hPUlQoYikpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJTVUIxNjogaW5wdXRzIGFyZSBub3Qgc2hvcnQ6ICVkICVkIGluICVzOiBsaW5lICVkXG4iLCBhLCBiLCBmaWxlLCBsaW5lKTsKKyAgIH0KKyAgIHJlcyA9IGEtYjsKKyAgIGlmICghVkVSSUZZX1NIT1JUKHJlcykpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJTVUIxNjogb3V0cHV0IGlzIG5vdCBzaG9ydDogJWQgaW4gJXM6IGxpbmUgJWRcbiIsIHJlcywgZmlsZSwgbGluZSk7CisgICBzcHhfbWlwcysrOworICAgcmV0dXJuIHJlczsKK30KKworI2RlZmluZSBBREQzMihhLCBiKSBfQUREMzIoYSwgYiwgX19GSUxFX18sIF9fTElORV9fKQorc3RhdGljIGlubGluZSBpbnQgX0FERDMyKGxvbmcgbG9uZyBhLCBsb25nIGxvbmcgYiwgY2hhciAqZmlsZSwgaW50IGxpbmUpIAoreworICAgbG9uZyBsb25nIHJlczsKKyAgIGlmICghVkVSSUZZX0lOVChhKSB8fCAhVkVSSUZZX0lOVChiKSkKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkFERDMyOiBpbnB1dHMgYXJlIG5vdCBpbnQ6ICVkICVkIGluICVzOiBsaW5lICVkXG4iLCAoaW50KWEsIChpbnQpYiwgZmlsZSwgbGluZSk7CisgICB9CisgICByZXMgPSBhK2I7CisgICBpZiAoIVZFUklGWV9JTlQocmVzKSkKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkFERDMyOiBvdXRwdXQgaXMgbm90IGludDogJWQgaW4gJXM6IGxpbmUgJWRcbiIsIChpbnQpcmVzLCBmaWxlLCBsaW5lKTsKKyAgIH0KKyAgIHNweF9taXBzKys7CisgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW5saW5lIGludCBTVUIzMihsb25nIGxvbmcgYSwgbG9uZyBsb25nIGIpIAoreworICAgbG9uZyBsb25nIHJlczsKKyAgIGlmICghVkVSSUZZX0lOVChhKSB8fCAhVkVSSUZZX0lOVChiKSkKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlNVQjMyOiBpbnB1dHMgYXJlIG5vdCBpbnQ6ICVkICVkXG4iLCAoaW50KWEsIChpbnQpYik7CisgICB9CisgICByZXMgPSBhLWI7CisgICBpZiAoIVZFUklGWV9JTlQocmVzKSkKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlNVQjMyOiBvdXRwdXQgaXMgbm90IGludDogJWRcbiIsIChpbnQpcmVzKTsKKyAgIHNweF9taXBzKys7CisgICByZXR1cm4gcmVzOworfQorCisjZGVmaW5lIEFERDY0KGEsYikgKE1JUFNfSU5DKGEpKyhiKSkKKworLyogcmVzdWx0IGZpdHMgaW4gMTYgYml0cyAqLworc3RhdGljIGlubGluZSBzaG9ydCBNVUxUMTZfMTZfMTYoaW50IGEsIGludCBiKSAKK3sKKyAgIGludCByZXM7CisgICBpZiAoIVZFUklGWV9TSE9SVChhKSB8fCAhVkVSSUZZX1NIT1JUKGIpKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTVVMVDE2XzE2XzE2OiBpbnB1dHMgYXJlIG5vdCBzaG9ydDogJWQgJWRcbiIsIGEsIGIpOworICAgfQorICAgcmVzID0gYSpiOworICAgaWYgKCFWRVJJRllfU0hPUlQocmVzKSkKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIk1VTFQxNl8xNl8xNjogb3V0cHV0IGlzIG5vdCBzaG9ydDogJWRcbiIsIHJlcyk7CisgICBzcHhfbWlwcysrOworICAgcmV0dXJuIHJlczsKK30KKworI2RlZmluZSBNVUxUMTZfMTYoYSwgYikgX01VTFQxNl8xNihhLCBiLCBfX0ZJTEVfXywgX19MSU5FX18pCitzdGF0aWMgaW5saW5lIGludCBfTVVMVDE2XzE2KGludCBhLCBpbnQgYiwgY2hhciAqZmlsZSwgaW50IGxpbmUpIAoreworICAgbG9uZyBsb25nIHJlczsKKyAgIGlmICghVkVSSUZZX1NIT1JUKGEpIHx8ICFWRVJJRllfU0hPUlQoYikpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJNVUxUMTZfMTY6IGlucHV0cyBhcmUgbm90IHNob3J0OiAlZCAlZCBpbiAlczogbGluZSAlZFxuIiwgYSwgYiwgZmlsZSwgbGluZSk7CisgICB9CisgICByZXMgPSAoKGxvbmcgbG9uZylhKSpiOworICAgaWYgKCFWRVJJRllfSU5UKHJlcykpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJNVUxUMTZfMTY6IG91dHB1dCBpcyBub3QgaW50OiAlZCBpbiAlczogbGluZSAlZFxuIiwgKGludClyZXMsIGZpbGUsIGxpbmUpOworICAgc3B4X21pcHMrKzsKKyAgIHJldHVybiByZXM7Cit9CisKKyNkZWZpbmUgTUFDMTZfMTYoYyxhLGIpICAgICAoc3B4X21pcHMtLSxBREQzMigoYyksTVVMVDE2XzE2KChhKSwoYikpKSkKKyNkZWZpbmUgTUFDMTZfMTZfUTExKGMsYSxiKSAgICAgKEVYVFJBQ1QxNihBREQxNigoYyksRVhUUkFDVDE2KFNIUjMyKE1VTFQxNl8xNigoYSksKGIpKSwxMSkpKSkpCisjZGVmaW5lIE1BQzE2XzE2X1ExMyhjLGEsYikgICAgIChFWFRSQUNUMTYoQUREMTYoKGMpLEVYVFJBQ1QxNihTSFIzMihNVUxUMTZfMTYoKGEpLChiKSksMTMpKSkpKQorI2RlZmluZSBNQUMxNl8xNl9QMTMoYyxhLGIpICAgICAoRVhUUkFDVDE2KEFERDMyKChjKSxTSFIzMihBREQzMig0MDk2LE1VTFQxNl8xNigoYSksKGIpKSksMTMpKSkpCisKKworI2RlZmluZSBNVUxUMTZfMzJfUVgoYSwgYiwgUSkgX01VTFQxNl8zMl9RWChhLCBiLCBRLCBfX0ZJTEVfXywgX19MSU5FX18pCitzdGF0aWMgaW5saW5lIGludCBfTVVMVDE2XzMyX1FYKGludCBhLCBsb25nIGxvbmcgYiwgaW50IFEsIGNoYXIgKmZpbGUsIGludCBsaW5lKQoreworICAgbG9uZyBsb25nIHJlczsKKyAgIGlmICghVkVSSUZZX1NIT1JUKGEpIHx8ICFWRVJJRllfSU5UKGIpKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTVVMVDE2XzMyX1ElZDogaW5wdXRzIGFyZSBub3Qgc2hvcnQraW50OiAlZCAlZCBpbiAlczogbGluZSAlZFxuIiwgUSwgKGludClhLCAoaW50KWIsIGZpbGUsIGxpbmUpOworICAgfQorICAgaWYgKEFCUzMyKGIpPj0oMTw8KDE1K1EpKSkKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIk1VTFQxNl8zMl9RJWQ6IHNlY29uZCBvcGVyYW5kIHRvbyBsYXJnZTogJWQgJWQgaW4gJXM6IGxpbmUgJWRcbiIsIFEsIChpbnQpYSwgKGludCliLCBmaWxlLCBsaW5lKTsgICAgICAKKyAgIHJlcyA9ICgoKGxvbmcgbG9uZylhKSoobG9uZyBsb25nKWIpID4+IFE7CisgICBpZiAoIVZFUklGWV9JTlQocmVzKSkKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIk1VTFQxNl8zMl9RJWQ6IG91dHB1dCBpcyBub3QgaW50OiAlZColZD0lZCBpbiAlczogbGluZSAlZFxuIiwgUSwgKGludClhLCAoaW50KWIsKGludClyZXMsIGZpbGUsIGxpbmUpOworICAgc3B4X21pcHMrPTU7CisgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW5saW5lIGludCBNVUxUMTZfMzJfUFgoaW50IGEsIGxvbmcgbG9uZyBiLCBpbnQgUSkKK3sKKyAgIGxvbmcgbG9uZyByZXM7CisgICBpZiAoIVZFUklGWV9TSE9SVChhKSB8fCAhVkVSSUZZX0lOVChiKSkKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIk1VTFQxNl8zMl9QJWQ6IGlucHV0cyBhcmUgbm90IHNob3J0K2ludDogJWQgJWRcbiIsIFEsIChpbnQpYSwgKGludCliKTsKKyAgIH0KKyAgIGlmIChBQlMzMihiKT49KDE8PCgxNStRKSkpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJNVUxUMTZfMzJfUSVkOiBzZWNvbmQgb3BlcmFuZCB0b28gbGFyZ2U6ICVkICVkXG4iLCBRLCAoaW50KWEsIChpbnQpYik7ICAgICAgCisgICByZXMgPSAoKCgobG9uZyBsb25nKWEpKihsb25nIGxvbmcpYikgKyAoKDE8PFEpPj4xKSk+PiBROworICAgaWYgKCFWRVJJRllfSU5UKHJlcykpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJNVUxUMTZfMzJfUCVkOiBvdXRwdXQgaXMgbm90IGludDogJWQqJWQ9JWRcbiIsIFEsIChpbnQpYSwgKGludCliLChpbnQpcmVzKTsKKyAgIHNweF9taXBzKz01OworICAgcmV0dXJuIHJlczsKK30KKworCisjZGVmaW5lIE1VTFQxNl8zMl9RMTEoYSxiKSBNVUxUMTZfMzJfUVgoYSxiLDExKQorI2RlZmluZSBNQUMxNl8zMl9RMTEoYyxhLGIpIEFERDMyKChjKSxNVUxUMTZfMzJfUTExKChhKSwoYikpKQorI2RlZmluZSBNVUxUMTZfMzJfUTEyKGEsYikgTVVMVDE2XzMyX1FYKGEsYiwxMikKKyNkZWZpbmUgTVVMVDE2XzMyX1ExMyhhLGIpIE1VTFQxNl8zMl9RWChhLGIsMTMpCisjZGVmaW5lIE1VTFQxNl8zMl9RMTQoYSxiKSBNVUxUMTZfMzJfUVgoYSxiLDE0KQorI2RlZmluZSBNVUxUMTZfMzJfUTE1KGEsYikgTVVMVDE2XzMyX1FYKGEsYiwxNSkKKyNkZWZpbmUgTVVMVDE2XzMyX1AxNShhLGIpIE1VTFQxNl8zMl9QWChhLGIsMTUpCisjZGVmaW5lIE1BQzE2XzMyX1ExNShjLGEsYikgQUREMzIoKGMpLE1VTFQxNl8zMl9RMTUoKGEpLChiKSkpCisKK3N0YXRpYyBpbmxpbmUgaW50IFNBVFVSQVRFKGludCBhLCBpbnQgYikKK3sKKyAgIGlmIChhPmIpCisgICAgICBhPWI7CisgICBpZiAoYTwtYikKKyAgICAgIGEgPSAtYjsKKyAgIHJldHVybiBhOworfQorCitzdGF0aWMgaW5saW5lIGludCBNVUxUMTZfMTZfUTExXzMyKGludCBhLCBpbnQgYikgCit7CisgICBsb25nIGxvbmcgcmVzOworICAgaWYgKCFWRVJJRllfU0hPUlQoYSkgfHwgIVZFUklGWV9TSE9SVChiKSkKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIk1VTFQxNl8xNl9RMTE6IGlucHV0cyBhcmUgbm90IHNob3J0OiAlZCAlZFxuIiwgYSwgYik7CisgICB9CisgICByZXMgPSAoKGxvbmcgbG9uZylhKSpiOworICAgcmVzID4+PSAxMTsKKyAgIGlmICghVkVSSUZZX0lOVChyZXMpKQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTVVMVDE2XzE2X1ExMTogb3V0cHV0IGlzIG5vdCBzaG9ydDogJWQqJWQ9JWRcbiIsIChpbnQpYSwgKGludCliLCAoaW50KXJlcyk7CisgICBzcHhfbWlwcys9MzsKKyAgIHJldHVybiByZXM7Cit9CitzdGF0aWMgaW5saW5lIHNob3J0IE1VTFQxNl8xNl9RMTMoaW50IGEsIGludCBiKSAKK3sKKyAgIGxvbmcgbG9uZyByZXM7CisgICBpZiAoIVZFUklGWV9TSE9SVChhKSB8fCAhVkVSSUZZX1NIT1JUKGIpKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTVVMVDE2XzE2X1ExMzogaW5wdXRzIGFyZSBub3Qgc2hvcnQ6ICVkICVkXG4iLCBhLCBiKTsKKyAgIH0KKyAgIHJlcyA9ICgobG9uZyBsb25nKWEpKmI7CisgICByZXMgPj49IDEzOworICAgaWYgKCFWRVJJRllfU0hPUlQocmVzKSkKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIk1VTFQxNl8xNl9RMTM6IG91dHB1dCBpcyBub3Qgc2hvcnQ6ICVkKiVkPSVkXG4iLCBhLCBiLCAoaW50KXJlcyk7CisgICBzcHhfbWlwcys9MzsKKyAgIHJldHVybiByZXM7Cit9CitzdGF0aWMgaW5saW5lIHNob3J0IE1VTFQxNl8xNl9RMTQoaW50IGEsIGludCBiKSAKK3sKKyAgIGxvbmcgbG9uZyByZXM7CisgICBpZiAoIVZFUklGWV9TSE9SVChhKSB8fCAhVkVSSUZZX1NIT1JUKGIpKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTVVMVDE2XzE2X1ExNDogaW5wdXRzIGFyZSBub3Qgc2hvcnQ6ICVkICVkXG4iLCBhLCBiKTsKKyAgIH0KKyAgIHJlcyA9ICgobG9uZyBsb25nKWEpKmI7CisgICByZXMgPj49IDE0OworICAgaWYgKCFWRVJJRllfU0hPUlQocmVzKSkKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIk1VTFQxNl8xNl9RMTQ6IG91dHB1dCBpcyBub3Qgc2hvcnQ6ICVkXG4iLCAoaW50KXJlcyk7CisgICBzcHhfbWlwcys9MzsKKyAgIHJldHVybiByZXM7Cit9CitzdGF0aWMgaW5saW5lIHNob3J0IE1VTFQxNl8xNl9RMTUoaW50IGEsIGludCBiKSAKK3sKKyAgIGxvbmcgbG9uZyByZXM7CisgICBpZiAoIVZFUklGWV9TSE9SVChhKSB8fCAhVkVSSUZZX1NIT1JUKGIpKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTVVMVDE2XzE2X1ExNTogaW5wdXRzIGFyZSBub3Qgc2hvcnQ6ICVkICVkXG4iLCBhLCBiKTsKKyAgIH0KKyAgIHJlcyA9ICgobG9uZyBsb25nKWEpKmI7CisgICByZXMgPj49IDE1OworICAgaWYgKCFWRVJJRllfU0hPUlQocmVzKSkKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIk1VTFQxNl8xNl9RMTU6IG91dHB1dCBpcyBub3Qgc2hvcnQ6ICVkXG4iLCAoaW50KXJlcyk7CisgICB9CisgICBzcHhfbWlwcys9MzsKKyAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2hvcnQgTVVMVDE2XzE2X1AxMyhpbnQgYSwgaW50IGIpIAoreworICAgbG9uZyBsb25nIHJlczsKKyAgIGlmICghVkVSSUZZX1NIT1JUKGEpIHx8ICFWRVJJRllfU0hPUlQoYikpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJNVUxUMTZfMTZfUDEzOiBpbnB1dHMgYXJlIG5vdCBzaG9ydDogJWQgJWRcbiIsIGEsIGIpOworICAgfQorICAgcmVzID0gKChsb25nIGxvbmcpYSkqYjsKKyAgIHJlcyArPSA0MDk2OworICAgaWYgKCFWRVJJRllfSU5UKHJlcykpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJNVUxUMTZfMTZfUDEzOiBvdmVyZmxvdzogJWQqJWQ9JWRcbiIsIGEsIGIsIChpbnQpcmVzKTsKKyAgIHJlcyA+Pj0gMTM7CisgICBpZiAoIVZFUklGWV9TSE9SVChyZXMpKQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTVVMVDE2XzE2X1AxMzogb3V0cHV0IGlzIG5vdCBzaG9ydDogJWQqJWQ9JWRcbiIsIGEsIGIsIChpbnQpcmVzKTsKKyAgIHNweF9taXBzKz00OworICAgcmV0dXJuIHJlczsKK30KK3N0YXRpYyBpbmxpbmUgc2hvcnQgTVVMVDE2XzE2X1AxNChpbnQgYSwgaW50IGIpIAoreworICAgbG9uZyBsb25nIHJlczsKKyAgIGlmICghVkVSSUZZX1NIT1JUKGEpIHx8ICFWRVJJRllfU0hPUlQoYikpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJNVUxUMTZfMTZfUDE0OiBpbnB1dHMgYXJlIG5vdCBzaG9ydDogJWQgJWRcbiIsIGEsIGIpOworICAgfQorICAgcmVzID0gKChsb25nIGxvbmcpYSkqYjsKKyAgIHJlcyArPSA4MTkyOworICAgaWYgKCFWRVJJRllfSU5UKHJlcykpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJNVUxUMTZfMTZfUDE0OiBvdmVyZmxvdzogJWQqJWQ9JWRcbiIsIGEsIGIsIChpbnQpcmVzKTsKKyAgIHJlcyA+Pj0gMTQ7CisgICBpZiAoIVZFUklGWV9TSE9SVChyZXMpKQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTVVMVDE2XzE2X1AxNDogb3V0cHV0IGlzIG5vdCBzaG9ydDogJWQqJWQ9JWRcbiIsIGEsIGIsIChpbnQpcmVzKTsKKyAgIHNweF9taXBzKz00OworICAgcmV0dXJuIHJlczsKK30KK3N0YXRpYyBpbmxpbmUgc2hvcnQgTVVMVDE2XzE2X1AxNShpbnQgYSwgaW50IGIpIAoreworICAgbG9uZyBsb25nIHJlczsKKyAgIGlmICghVkVSSUZZX1NIT1JUKGEpIHx8ICFWRVJJRllfU0hPUlQoYikpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJNVUxUMTZfMTZfUDE1OiBpbnB1dHMgYXJlIG5vdCBzaG9ydDogJWQgJWRcbiIsIGEsIGIpOworICAgfQorICAgcmVzID0gKChsb25nIGxvbmcpYSkqYjsKKyAgIHJlcyArPSAxNjM4NDsKKyAgIGlmICghVkVSSUZZX0lOVChyZXMpKQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTVVMVDE2XzE2X1AxNTogb3ZlcmZsb3c6ICVkKiVkPSVkXG4iLCBhLCBiLCAoaW50KXJlcyk7CisgICByZXMgPj49IDE1OworICAgaWYgKCFWRVJJRllfU0hPUlQocmVzKSkKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIk1VTFQxNl8xNl9QMTU6IG91dHB1dCBpcyBub3Qgc2hvcnQ6ICVkKiVkPSVkXG4iLCBhLCBiLCAoaW50KXJlcyk7CisgICBzcHhfbWlwcys9NDsKKyAgIHJldHVybiByZXM7Cit9CisKKyNkZWZpbmUgRElWMzJfMTYoYSwgYikgX0RJVjMyXzE2KGEsIGIsIF9fRklMRV9fLCBfX0xJTkVfXykKKworc3RhdGljIGlubGluZSBpbnQgX0RJVjMyXzE2KGxvbmcgbG9uZyBhLCBsb25nIGxvbmcgYiwgY2hhciAqZmlsZSwgaW50IGxpbmUpIAoreworICAgbG9uZyBsb25nIHJlczsKKyAgIGlmIChiPT0wKQorICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICJESVYzMl8xNjogZGl2aWRlIGJ5IHplcm86ICVkLyVkIGluICVzOiBsaW5lICVkXG4iLCAoaW50KWEsIChpbnQpYiwgZmlsZSwgbGluZSk7CisgICAgICByZXR1cm4gMDsKKyAgIH0KKyAgIGlmICghVkVSSUZZX0lOVChhKSB8fCAhVkVSSUZZX1NIT1JUKGIpKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRElWMzJfMTY6IGlucHV0cyBhcmUgbm90IGludC9zaG9ydDogJWQgJWQgaW4gJXM6IGxpbmUgJWRcbiIsIChpbnQpYSwgKGludCliLCBmaWxlLCBsaW5lKTsKKyAgIH0KKyAgIHJlcyA9IGEvYjsKKyAgIGlmICghVkVSSUZZX1NIT1JUKHJlcykpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJESVYzMl8xNjogb3V0cHV0IGlzIG5vdCBzaG9ydDogJWQgLyAlZCA9ICVkIGluICVzOiBsaW5lICVkXG4iLCAoaW50KWEsKGludCliLChpbnQpcmVzLCBmaWxlLCBsaW5lKTsKKyAgICAgIGlmIChyZXM+MzI3NjcpCisgICAgICAgICByZXMgPSAzMjc2NzsKKyAgICAgIGlmIChyZXM8LTMyNzY4KQorICAgICAgICAgcmVzID0gLTMyNzY4OworICAgfQorICAgc3B4X21pcHMrPTIwOworICAgcmV0dXJuIHJlczsKK30KKworI2RlZmluZSBESVYzMihhLCBiKSBfRElWMzIoYSwgYiwgX19GSUxFX18sIF9fTElORV9fKQorc3RhdGljIGlubGluZSBpbnQgX0RJVjMyKGxvbmcgbG9uZyBhLCBsb25nIGxvbmcgYiwgY2hhciAqZmlsZSwgaW50IGxpbmUpIAoreworICAgbG9uZyBsb25nIHJlczsKKyAgIGlmIChiPT0wKQorICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICJESVYzMjogZGl2aWRlIGJ5IHplcm86ICVkLyVkIGluICVzOiBsaW5lICVkXG4iLCAoaW50KWEsIChpbnQpYiwgZmlsZSwgbGluZSk7CisgICAgICByZXR1cm4gMDsKKyAgIH0KKworICAgaWYgKCFWRVJJRllfSU5UKGEpIHx8ICFWRVJJRllfSU5UKGIpKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRElWMzI6IGlucHV0cyBhcmUgbm90IGludC9zaG9ydDogJWQgJWQgaW4gJXM6IGxpbmUgJWRcbiIsIChpbnQpYSwgKGludCliLCBmaWxlLCBsaW5lKTsKKyAgIH0KKyAgIHJlcyA9IGEvYjsKKyAgIGlmICghVkVSSUZZX0lOVChyZXMpKQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRElWMzI6IG91dHB1dCBpcyBub3QgaW50OiAlZCBpbiAlczogbGluZSAlZFxuIiwgKGludClyZXMsIGZpbGUsIGxpbmUpOworICAgc3B4X21pcHMrPTM2OworICAgcmV0dXJuIHJlczsKK30KKyNkZWZpbmUgUERJVjMyKGEsYikgRElWMzIoQUREMzIoKGEpLChiKT4+MSksYikKKyNkZWZpbmUgUERJVjMyXzE2KGEsYikgRElWMzJfMTYoQUREMzIoKGEpLChiKT4+MSksYikKKworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9maXhlZF9nZW5lcmljLmggYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9maXhlZF9nZW5lcmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0ODE3NwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2ZpeGVkX2dlbmVyaWMuaApAQCAtMCwwICsxLDEwNiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAzIEplYW4tTWFyYyBWYWxpbiAqLworLyoqCisgICBAZmlsZSBmaXhlZF9nZW5lcmljLmgKKyAgIEBicmllZiBHZW5lcmljIGZpeGVkLXBvaW50IG9wZXJhdGlvbnMKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIEZJWEVEX0dFTkVSSUNfSAorI2RlZmluZSBGSVhFRF9HRU5FUklDX0gKKworI2RlZmluZSBRQ09OU1QxNih4LGJpdHMpICgoc3B4X3dvcmQxNl90KSguNSsoeCkqKCgoc3B4X3dvcmQzMl90KTEpPDwoYml0cykpKSkKKyNkZWZpbmUgUUNPTlNUMzIoeCxiaXRzKSAoKHNweF93b3JkMzJfdCkoLjUrKHgpKigoKHNweF93b3JkMzJfdCkxKTw8KGJpdHMpKSkpCisKKyNkZWZpbmUgTkVHMTYoeCkgKC0oeCkpCisjZGVmaW5lIE5FRzMyKHgpICgtKHgpKQorI2RlZmluZSBFWFRSQUNUMTYoeCkgKChzcHhfd29yZDE2X3QpKHgpKQorI2RlZmluZSBFWFRFTkQzMih4KSAoKHNweF93b3JkMzJfdCkoeCkpCisjZGVmaW5lIFNIUjE2KGEsc2hpZnQpICgoYSkgPj4gKHNoaWZ0KSkKKyNkZWZpbmUgU0hMMTYoYSxzaGlmdCkgKChhKSA8PCAoc2hpZnQpKQorI2RlZmluZSBTSFIzMihhLHNoaWZ0KSAoKGEpID4+IChzaGlmdCkpCisjZGVmaW5lIFNITDMyKGEsc2hpZnQpICgoYSkgPDwgKHNoaWZ0KSkKKyNkZWZpbmUgUFNIUjE2KGEsc2hpZnQpIChTSFIxNigoYSkrKCgxPDwoKHNoaWZ0KSk+PjEpKSxzaGlmdCkpCisjZGVmaW5lIFBTSFIzMihhLHNoaWZ0KSAoU0hSMzIoKGEpKygoMTw8KChzaGlmdCkpPj4xKSksc2hpZnQpKQorI2RlZmluZSBWU0hSMzIoYSwgc2hpZnQpICgoKHNoaWZ0KT4wKSA/IFNIUjMyKGEsIHNoaWZ0KSA6IFNITDMyKGEsIC0oc2hpZnQpKSkKKyNkZWZpbmUgU0FUVVJBVEUxNih4LGEpICgoKHgpPihhKSA/IChhKSA6ICh4KTwtKGEpID8gLShhKSA6ICh4KSkpCisjZGVmaW5lIFNBVFVSQVRFMzIoeCxhKSAoKCh4KT4oYSkgPyAoYSkgOiAoeCk8LShhKSA/IC0oYSkgOiAoeCkpKQorCisjZGVmaW5lIFNIUihhLHNoaWZ0KSAoKGEpID4+IChzaGlmdCkpCisjZGVmaW5lIFNITChhLHNoaWZ0KSAoKHNweF93b3JkMzJfdCkoYSkgPDwgKHNoaWZ0KSkKKyNkZWZpbmUgUFNIUihhLHNoaWZ0KSAoU0hSKChhKSsoKDE8PCgoc2hpZnQpKT4+MSkpLHNoaWZ0KSkKKyNkZWZpbmUgU0FUVVJBVEUoeCxhKSAoKCh4KT4oYSkgPyAoYSkgOiAoeCk8LShhKSA/IC0oYSkgOiAoeCkpKQorCisKKyNkZWZpbmUgQUREMTYoYSxiKSAoKHNweF93b3JkMTZfdCkoKHNweF93b3JkMTZfdCkoYSkrKHNweF93b3JkMTZfdCkoYikpKQorI2RlZmluZSBTVUIxNihhLGIpICgoc3B4X3dvcmQxNl90KShhKS0oc3B4X3dvcmQxNl90KShiKSkKKyNkZWZpbmUgQUREMzIoYSxiKSAoKHNweF93b3JkMzJfdCkoYSkrKHNweF93b3JkMzJfdCkoYikpCisjZGVmaW5lIFNVQjMyKGEsYikgKChzcHhfd29yZDMyX3QpKGEpLShzcHhfd29yZDMyX3QpKGIpKQorCisKKy8qIHJlc3VsdCBmaXRzIGluIDE2IGJpdHMgKi8KKyNkZWZpbmUgTVVMVDE2XzE2XzE2KGEsYikgICAgICgoKChzcHhfd29yZDE2X3QpKGEpKSooKHNweF93b3JkMTZfdCkoYikpKSkKKworLyogKHNweF93b3JkMzJfdCkoc3B4X3dvcmQxNl90KSBnaXZlcyBUSSBjb21waWxlciBhIGhpbnQgdGhhdCBpdCdzIDE2eDE2LT4zMiBtdWx0aXBseSAqLworI2RlZmluZSBNVUxUMTZfMTYoYSxiKSAgICAgKCgoc3B4X3dvcmQzMl90KShzcHhfd29yZDE2X3QpKGEpKSooKHNweF93b3JkMzJfdCkoc3B4X3dvcmQxNl90KShiKSkpCisKKyNkZWZpbmUgTUFDMTZfMTYoYyxhLGIpIChBREQzMigoYyksTVVMVDE2XzE2KChhKSwoYikpKSkKKyNkZWZpbmUgTVVMVDE2XzMyX1ExMihhLGIpIEFERDMyKE1VTFQxNl8xNigoYSksU0hSKChiKSwxMikpLCBTSFIoTVVMVDE2XzE2KChhKSwoKGIpJjB4MDAwMDBmZmYpKSwxMikpCisjZGVmaW5lIE1VTFQxNl8zMl9RMTMoYSxiKSBBREQzMihNVUxUMTZfMTYoKGEpLFNIUigoYiksMTMpKSwgU0hSKE1VTFQxNl8xNigoYSksKChiKSYweDAwMDAxZmZmKSksMTMpKQorI2RlZmluZSBNVUxUMTZfMzJfUTE0KGEsYikgQUREMzIoTVVMVDE2XzE2KChhKSxTSFIoKGIpLDE0KSksIFNIUihNVUxUMTZfMTYoKGEpLCgoYikmMHgwMDAwM2ZmZikpLDE0KSkKKworI2RlZmluZSBNVUxUMTZfMzJfUTExKGEsYikgQUREMzIoTVVMVDE2XzE2KChhKSxTSFIoKGIpLDExKSksIFNIUihNVUxUMTZfMTYoKGEpLCgoYikmMHgwMDAwMDdmZikpLDExKSkKKyNkZWZpbmUgTUFDMTZfMzJfUTExKGMsYSxiKSBBREQzMihjLEFERDMyKE1VTFQxNl8xNigoYSksU0hSKChiKSwxMSkpLCBTSFIoTVVMVDE2XzE2KChhKSwoKGIpJjB4MDAwMDA3ZmYpKSwxMSkpKQorCisjZGVmaW5lIE1VTFQxNl8zMl9QMTUoYSxiKSBBREQzMihNVUxUMTZfMTYoKGEpLFNIUigoYiksMTUpKSwgUFNIUihNVUxUMTZfMTYoKGEpLCgoYikmMHgwMDAwN2ZmZikpLDE1KSkKKyNkZWZpbmUgTVVMVDE2XzMyX1ExNShhLGIpIEFERDMyKE1VTFQxNl8xNigoYSksU0hSKChiKSwxNSkpLCBTSFIoTVVMVDE2XzE2KChhKSwoKGIpJjB4MDAwMDdmZmYpKSwxNSkpCisjZGVmaW5lIE1BQzE2XzMyX1ExNShjLGEsYikgQUREMzIoYyxBREQzMihNVUxUMTZfMTYoKGEpLFNIUigoYiksMTUpKSwgU0hSKE1VTFQxNl8xNigoYSksKChiKSYweDAwMDA3ZmZmKSksMTUpKSkKKworCisjZGVmaW5lIE1BQzE2XzE2X1ExMShjLGEsYikgICAgIChBREQzMigoYyksU0hSKE1VTFQxNl8xNigoYSksKGIpKSwxMSkpKQorI2RlZmluZSBNQUMxNl8xNl9RMTMoYyxhLGIpICAgICAoQUREMzIoKGMpLFNIUihNVUxUMTZfMTYoKGEpLChiKSksMTMpKSkKKyNkZWZpbmUgTUFDMTZfMTZfUDEzKGMsYSxiKSAgICAgKEFERDMyKChjKSxTSFIoQUREMzIoNDA5NixNVUxUMTZfMTYoKGEpLChiKSkpLDEzKSkpCisKKyNkZWZpbmUgTVVMVDE2XzE2X1ExMV8zMihhLGIpIChTSFIoTVVMVDE2XzE2KChhKSwoYikpLDExKSkKKyNkZWZpbmUgTVVMVDE2XzE2X1ExMyhhLGIpIChTSFIoTVVMVDE2XzE2KChhKSwoYikpLDEzKSkKKyNkZWZpbmUgTVVMVDE2XzE2X1ExNChhLGIpIChTSFIoTVVMVDE2XzE2KChhKSwoYikpLDE0KSkKKyNkZWZpbmUgTVVMVDE2XzE2X1ExNShhLGIpIChTSFIoTVVMVDE2XzE2KChhKSwoYikpLDE1KSkKKworI2RlZmluZSBNVUxUMTZfMTZfUDEzKGEsYikgKFNIUihBREQzMig0MDk2LE1VTFQxNl8xNigoYSksKGIpKSksMTMpKQorI2RlZmluZSBNVUxUMTZfMTZfUDE0KGEsYikgKFNIUihBREQzMig4MTkyLE1VTFQxNl8xNigoYSksKGIpKSksMTQpKQorI2RlZmluZSBNVUxUMTZfMTZfUDE1KGEsYikgKFNIUihBREQzMigxNjM4NCxNVUxUMTZfMTYoKGEpLChiKSkpLDE1KSkKKworI2RlZmluZSBNVUxfMTZfMzJfUjE1KGEsYmgsYmwpIEFERDMyKE1VTFQxNl8xNigoYSksKGJoKSksIFNIUihNVUxUMTZfMTYoKGEpLChibCkpLDE1KSkKKworI2RlZmluZSBESVYzMl8xNihhLGIpICgoc3B4X3dvcmQxNl90KSgoKHNweF93b3JkMzJfdCkoYSkpLygoc3B4X3dvcmQxNl90KShiKSkpKQorI2RlZmluZSBQRElWMzJfMTYoYSxiKSAoKHNweF93b3JkMTZfdCkoKChzcHhfd29yZDMyX3QpKGEpKygoc3B4X3dvcmQxNl90KShiKT4+MSkpLygoc3B4X3dvcmQxNl90KShiKSkpKQorI2RlZmluZSBESVYzMihhLGIpICgoKHNweF93b3JkMzJfdCkoYSkpLygoc3B4X3dvcmQzMl90KShiKSkpCisjZGVmaW5lIFBESVYzMihhLGIpICgoKHNweF93b3JkMzJfdCkoYSkrKChzcHhfd29yZDE2X3QpKGIpPj4xKSkvKChzcHhfd29yZDMyX3QpKGIpKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9nYWluX3RhYmxlLmMgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9nYWluX3RhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBiODI0NAotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2dhaW5fdGFibGUuYwpAQCAtMCwwICsxLDE2MCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAKKyAgIEZpbGU6IGdhaW5fdGFibGUuYworICAgQ29kZWJvb2sgZm9yIDMtdGFwIHBpdGNoIHByZWRpY3Rpb24gZ2FpbiAoMTI4IGVudHJpZXMpCisgIAorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgICBtZXQ6CisKKyAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuICAKKworICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgICBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgICBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgICBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCitjb25zdCBzaWduZWQgY2hhciBnYWluX2NkYmtfbmJbNTEyXSA9IHsKKy0zMiwgLTMyLCAtMzIsIDAsCistMjgsIC02NywgLTUsIDMzLAorLTQyLCAtNiwgLTMyLCAxOCwKKy01NywgLTEwLCAtNTQsIDM1LAorLTE2LCAyNywgLTQxLCA0MiwKKzE5LCAtMTksIC00MCwgMzYsCistNDUsIDI0LCAtMjEsIDQwLAorLTgsIC0xNCwgLTE4LCAyOCwKKzEsIDE0LCAtNTgsIDUzLAorLTE4LCAtODgsIC0zOSwgMzksCistMzgsIDIxLCAtMTgsIDM3LAorLTE5LCAyMCwgLTQzLCAzOCwKKzEwLCAxNywgLTQ4LCA1NCwKKy01MiwgLTU4LCAtMTMsIDMzLAorLTQ0LCAtMSwgLTExLCAzMiwKKy0xMiwgLTExLCAtMzQsIDIyLAorMTQsIDAsIC00NiwgNDYsCistMzcsIC0zNSwgLTM0LCA1LAorLTI1LCA0NCwgLTMwLCA0MywKKzYsIC00LCAtNjMsIDQ5LAorLTMxLCA0MywgLTQxLCA0MywKKy0yMywgMzAsIC00MywgNDEsCistNDMsIDI2LCAtMTQsIDQ0LAorLTMzLCAxLCAtMTMsIDI3LAorLTEzLCAxOCwgLTM3LCAzNywKKy00NiwgLTczLCAtNDUsIDM0LAorLTM2LCAyNCwgLTI1LCAzNCwKKy0zNiwgLTExLCAtMjAsIDE5LAorLTI1LCAxMiwgLTE4LCAzMywKKy0zNiwgLTY5LCAtNTksIDM0LAorLTQ1LCA2LCA4LCA0NiwKKy0yMiwgLTE0LCAtMjQsIDE4LAorLTEsIDEzLCAtNDQsIDQ0LAorLTM5LCAtNDgsIC0yNiwgMTUsCistMzIsIDMxLCAtMzcsIDM0LAorLTMzLCAxNSwgLTQ2LCAzMSwKKy0yNCwgMzAsIC0zNiwgMzcsCistNDEsIDMxLCAtMjMsIDQxLAorLTUwLCAyMiwgLTQsIDUwLAorLTIyLCAyLCAtMjEsIDI4LAorLTE3LCAzMCwgLTM0LCA0MCwKKy03LCAtNjAsIC0yOCwgMjksCistMzgsIDQyLCAtMjgsIDQyLAorLTQ0LCAtMTEsIDIxLCA0MywKKy0xNiwgOCwgLTQ0LCAzNCwKKy0zOSwgLTU1LCAtNDMsIDIxLAorLTExLCAtMzUsIDI2LCA0MSwKKy05LCAwLCAtMzQsIDI5LAorLTgsIDEyMSwgLTgxLCAxMTMsCis3LCAtMTYsIC0yMiwgMzMsCistMzcsIDMzLCAtMzEsIDM2LAorLTI3LCAtNywgLTM2LCAxNywKKy0zNCwgNzAsIC01NywgNjUsCistMzcsIC0xMSwgLTQ4LCAyMSwKKy00MCwgMTcsIC0xLCA0NCwKKy0zMywgNiwgLTYsIDMzLAorLTksIDAsIC0yMCwgMzQsCistMjEsIDY5LCAtMzMsIDU3LAorLTI5LCAzMywgLTMxLCAzNSwKKy01NSwgMTIsIC0xLCA0OSwKKy0zMywgMjcsIC0yMiwgMzUsCistNTAsIC0zMywgLTQ3LCAxNywKKy01MCwgNTQsIDUxLCA5NCwKKy0xLCAtNSwgLTQ0LCAzNSwKKy00LCAyMiwgLTQwLCA0NSwKKy0zOSwgLTY2LCAtMjUsIDI0LAorLTMzLCAxLCAtMjYsIDIwLAorLTI0LCAtMjMsIC0yNSwgMTIsCistMTEsIDIxLCAtNDUsIDQ0LAorLTI1LCAtNDUsIC0xOSwgMTcsCistNDMsIDEwNSwgLTE2LCA4MiwKKzUsIC0yMSwgMSwgNDEsCistMTYsIDExLCAtMzMsIDMwLAorLTEzLCAtOTksIC00LCA1NywKKy0zNywgMzMsIC0xNSwgNDQsCistMjUsIDM3LCAtNjMsIDU0LAorLTM2LCAyNCwgLTMxLCAzMSwKKy01MywgLTU2LCAtMzgsIDI2LAorLTQxLCAtNCwgNCwgMzcsCistMzMsIDEzLCAtMzAsIDI0LAorNDksIDUyLCAtOTQsIDExNCwKKy01LCAtMzAsIC0xNSwgMjMsCisxLCAzOCwgLTQwLCA1NiwKKy0yMywgMTIsIC0zNiwgMjksCistMTcsIDQwLCAtNDcsIDUxLAorLTM3LCAtNDEsIC0zOSwgMTEsCistNDksIDM0LCAwLCA1OCwKKy0xOCwgLTcsIC00LCAzNCwKKy0xNiwgMTcsIC0yNywgMzUsCiszMCwgNSwgLTYyLCA2NSwKKzQsIDQ4LCAtNjgsIDc2LAorLTQzLCAxMSwgLTExLCAzOCwKKy0xOCwgMTksIC0xNSwgNDEsCistMjMsIC02MiwgLTM5LCAyMywKKy00MiwgMTAsIC0yLCA0MSwKKy0yMSwgLTEzLCAtMTMsIDI1LAorLTksIDEzLCAtNDcsIDQyLAorLTIzLCAtNjIsIC0yNCwgMjQsCistNDQsIDYwLCAtMjEsIDU4LAorLTE4LCAtMywgLTUyLCAzMiwKKy0yMiwgMjIsIC0zNiwgMzQsCistNzUsIDU3LCAxNiwgOTAsCistMTksIDMsIDEwLCA0NSwKKy0yOSwgMjMsIC0zOCwgMzIsCistNSwgLTYyLCAtNTEsIDM4LAorLTUxLCA0MCwgLTE4LCA1MywKKy00MiwgMTMsIC0yNCwgMzIsCistMzQsIDE0LCAtMjAsIDMwLAorLTU2LCAtNzUsIC0yNiwgMzcsCistMjYsIDMyLCAxNSwgNTksCistMjYsIDE3LCAtMjksIDI5LAorLTcsIDI4LCAtNTIsIDUzLAorLTEyLCAtMzAsIDUsIDMwLAorLTUsIC00OCwgLTUsIDM1LAorMiwgMiwgLTQzLCA0MCwKKzIxLCAxNiwgMTYsIDc1LAorLTI1LCAtNDUsIC0zMiwgMTAsCistNDMsIDE4LCAtMTAsIDQyLAorOSwgMCwgLTEsIDUyLAorLTEsIDcsIC0zMCwgMzYsCisxOSwgLTQ4LCAtNCwgNDgsCistMjgsIDI1LCAtMjksIDMyLAorLTIyLCAwLCAtMzEsIDIyLAorLTMyLCAxNywgLTEwLCAzNiwKKy02NCwgLTQxLCAtNjIsIDM2LAorLTUyLCAxNSwgMTYsIDU4LAorLTMwLCAtMjIsIC0zMiwgNiwKKy03LCA5LCAtMzgsIDM2fTsKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2dhaW5fdGFibGVfbGJyLmMgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9nYWluX3RhYmxlX2xici5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMWMzZGIKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9nYWluX3RhYmxlX2xici5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiBKZWFuLU1hcmMgVmFsaW4gCisgICBGaWxlOiBnYWluX3RhYmxlX2xici5jCisgICBDb2RlYm9vayBmb3IgMy10YXAgcGl0Y2ggcHJlZGljdGlvbiBnYWluICgzMiBlbnRyaWVzKQorICAKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICAgbWV0OgorCisgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAgCisKKyAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICAgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICAgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAgIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgICBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworY29uc3Qgc2lnbmVkIGNoYXIgZ2Fpbl9jZGJrX2xiclsxMjhdID0geworLTMyLCAtMzIsIC0zMiwgMCwKKy0zMSwgLTU4LCAtMTYsIDIyLAorLTQxLCAtMjQsIC00MywgMTQsCistNTYsIC0yMiwgLTU1LCAyOSwKKy0xMywgMzMsIC00MSwgNDcsCistNCwgLTM5LCAtOSwgMjksCistNDEsIDE1LCAtMTIsIDM4LAorLTgsIC0xNSwgLTEyLCAzMSwKKzEsIDIsIC00NCwgNDAsCistMjIsIC02NiwgLTQyLCAyNywKKy0zOCwgMjgsIC0yMywgMzgsCistMjEsIDE0LCAtMzcsIDMxLAorMCwgMjEsIC01MCwgNTIsCistNTMsIC03MSwgLTI3LCAzMywKKy0zNywgLTEsIC0xOSwgMjUsCistMTksIC01LCAtMjgsIDIyLAorNiwgNjUsIC00NCwgNzQsCistMzMsIC00OCwgLTMzLCA5LAorLTQwLCA1NywgLTE0LCA1OCwKKy0xNywgNCwgLTQ1LCAzMiwKKy0zMSwgMzgsIC0zMywgMzYsCistMjMsIDI4LCAtNDAsIDM5LAorLTQzLCAyOSwgLTEyLCA0NiwKKy0zNCwgMTMsIC0yMywgMjgsCistMTYsIDE1LCAtMjcsIDM0LAorLTE0LCAtODIsIC0xNSwgNDMsCistMzEsIDI1LCAtMzIsIDI5LAorLTIxLCA1LCAtNSwgMzgsCistNDcsIC02MywgLTUxLCAzMywKKy00NiwgMTIsIDMsIDQ3LAorLTI4LCAtMTcsIC0yOSwgMTEsCistMTAsIDE0LCAtNDAsIDM4fTsKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2hleGNfMTBfMzJfdGFibGUuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2hleGNfMTBfMzJfdGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQ0MDhmCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvaGV4Y18xMF8zMl90YWJsZS5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiBKZWFuLU1hcmMgVmFsaW4gCisgICBGaWxlOiBoZXhjXzEwXzMyX3RhYmxlLmMKKyAgIENvZGVib29rIGZvciBoaWdoLWJhbmQgZXhjaXRhdGlvbiBpbiBTQi1DRUxQIG1vZGUgKDQwMDAgYnBzKQorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKK2NvbnN0IHNpZ25lZCBjaGFyIGhleGNfMTBfMzJfdGFibGVbMzIwXSA9IHsKKy0zLCAtMiwgLTEsIDAsIC00LCA1LCAzNSwgLTQwLCAtOSwgMTMsIAorLTQ0LCA1LCAtMjcsIC0xLCAtNywgNiwgLTExLCA3LCAtOCwgNywgCisxOSwgLTE0LCAxNSwgLTQsIDksIC0xMCwgMTAsIC04LCAxMCwgLTksIAorLTEsIDEsIDAsIDAsIDIsIDUsIC0xOCwgMjIsIC01MywgNTAsIAorMSwgLTIzLCA1MCwgLTM2LCAxNSwgMywgLTEzLCAxNCwgLTEwLCA2LCAKKzEsIDUsIC0zLCA0LCAtMiwgNSwgLTMyLCAyNSwgNSwgLTIsIAorLTEsIC00LCAxLCAxMSwgLTI5LCAyNiwgLTYsIC0xNSwgMzAsIC0xOCwgCiswLCAxNSwgLTE3LCA0MCwgLTQxLCAzLCA5LCAtMiwgLTIsIDMsIAorLTMsIC0xLCAtNSwgMiwgMjEsIC02LCAtMTYsIC0yMSwgMjMsIDIsIAorNjAsIDE1LCAxNiwgLTE2LCAtOSwgMTQsIDksIC0xLCA3LCAtOSwgCiswLCAxLCAxLCAwLCAtMSwgLTYsIDE3LCAtMjgsIDU0LCAtNDUsIAorLTEsIDEsIC0xLCAtNiwgLTYsIDIsIDExLCAyNiwgLTI5LCAtMiwgCis0NiwgLTIxLCAzNCwgMTIsIC0yMywgMzIsIC0yMywgMTYsIC0xMCwgMywgCis2NiwgMTksIC0yMCwgMjQsIDcsIDExLCAtMywgMCwgLTMsIC0xLCAKKy01MCwgLTQ2LCAyLCAtMTgsIC0zLCA0LCAtMSwgLTIsIDMsIC0zLCAKKy0xOSwgNDEsIC0zNiwgOSwgMTEsIC0yNCwgMjEsIC0xNiwgOSwgLTMsIAorLTI1LCAtMywgMTAsIDE4LCAtOSwgLTIsIC01LCAtMSwgLTUsIDYsIAorLTQsIC0zLCAyLCAtMjYsIDIxLCAtMTksIDM1LCAtMTUsIDcsIC0xMywgCisxNywgLTE5LCAzOSwgLTQzLCA0OCwgLTMxLCAxNiwgLTksIDcsIC0yLCAKKy01LCAzLCAtNCwgOSwgLTE5LCAyNywgLTU1LCA2MywgLTM1LCAxMCwgCisyNiwgLTQ0LCAtMiwgOSwgNCwgMSwgLTYsIDgsIC05LCA1LCAKKy04LCAtMSwgLTMsIC0xNiwgNDUsIC00MiwgNSwgMTUsIC0xNiwgMTAsIAorMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCistMTYsIDI0LCAtNTUsIDQ3LCAtMzgsIDI3LCAtMTksIDcsIC0zLCAxLCAKKzE2LCAyNywgMjAsIC0xOSwgMTgsIDUsIC03LCAxLCAtNSwgMiwgCistNiwgOCwgLTIyLCAwLCAtMywgLTMsIDgsIC0xLCA3LCAtOCwgCisxLCAtMywgNSwgMCwgMTcsIC00OCwgNTgsIC01MiwgMjksIC03LCAKKy0yLCAzLCAtMTAsIDYsIC0yNiwgNTgsIC0zMSwgMSwgLTYsIDMsIAorOTMsIC0yOSwgMzksIDMsIDE3LCA1LCA2LCAtMSwgLTEsIC0xLCAKKzI3LCAxMywgMTAsIDE5LCAtNywgLTM0LCAxMiwgMTAsIC00LCA5LCAKKy03NiwgOSwgOCwgLTI4LCAtMiwgLTExLCAyLCAtMSwgMywgMSwgCistODMsIDM4LCAtMzksIDQsIC0xNiwgLTYsIC0yLCAtNSwgNSwgLTIsIAorfTsKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2hleGNfdGFibGUuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2hleGNfdGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjg0MDhhCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvaGV4Y190YWJsZS5jCkBAIC0wLDAgKzEsMTYyIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVhbi1NYXJjIFZhbGluIAorICAgRmlsZTogaGV4Y190YWJsZS5jCisgICBDb2RlYm9vayBmb3IgaGlnaC1iYW5kIGV4Y2l0YXRpb24gaW4gU0ItQ0VMUCBtb2RlICg4MDAwIGJwcyB3aXRoIHNpZ24pCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworY29uc3Qgc2lnbmVkIGNoYXIgaGV4Y190YWJsZVsxMDI0XSA9IHsKKy0yNCwgMjEsIC0yMCwgNSwgLTUsIC03LCAxNCwgLTEwLCAKKzIsIC0yNywgMTYsIC0yMCwgMCwgLTMyLCAyNiwgMTksIAorOCwgLTExLCAtNDEsIDMxLCAyOCwgLTI3LCAtMzIsIDM0LCAKKzQyLCAzNCwgLTE3LCAyMiwgLTEwLCAxMywgLTI5LCAxOCwgCistMTIsIC0yNiwgLTI0LCAxMSwgMjIsIDUsIC01LCAtNSwgCis1NCwgLTY4LCAtNDMsIDU3LCAtMjUsIDI0LCA0LCA0LCAKKzI2LCAtOCwgLTEyLCAtMTcsIDU0LCAzMCwgLTQ1LCAxLCAKKzEwLCAtMTUsIDE4LCAtNDEsIDExLCA2OCwgLTY3LCAzNywgCistMTYsIC0yNCwgLTE2LCAzOCwgLTIyLCA2LCAtMjksIDMwLCAKKzY2LCAtMjcsIDUsIDcsIC0xNiwgMTMsIDIsIC0xMiwgCistNywgLTMsIC0yMCwgMzYsIDQsIC0yOCwgOSwgMywgCiszMiwgNDgsIDI2LCAzOSwgMywgMCwgNywgLTIxLCAKKy0xMywgNSwgLTgyLCAtNywgNzMsIC0yMCwgMzQsIC05LCAKKy01LCAxLCAtMSwgMTAsIC01LCAtMTAsIC0xLCA5LCAKKzEsIC05LCAxMCwgMCwgLTE0LCAxMSwgLTEsIC0yLCAKKy0xLCAxMSwgMjAsIDk2LCAtODEsIC0yMiwgLTEyLCAtOSwgCistNTgsIDksIDI0LCAtMzAsIDI2LCAtMzUsIDI3LCAtMTIsIAorMTMsIC0xOCwgNTYsIC01OSwgMTUsIC03LCAyMywgLTE1LCAKKy0xLCA2LCAtMjUsIDE0LCAtMjIsIC0yMCwgNDcsIC0xMSwgCisxNiwgMiwgMzgsIC0yMywgLTE5LCAtMzAsIC05LCA0MCwgCistMTEsIDUsIDQsIC02LCA4LCAyNiwgLTIxLCAtMTEsIAorMTI3LCA0LCAxLCA2LCAtOSwgMiwgLTcsIC0yLCAKKy0zLCA3LCAtNSwgMTAsIC0xOSwgNywgLTEwNiwgOTEsIAorLTMsIDksIC00LCAyMSwgLTgsIDI2LCAtODAsIDgsIAorMSwgLTIsIC0xMCwgLTE3LCAtMTcsIC0yNywgMzIsIDcxLCAKKzYsIC0yOSwgMTEsIC0yMywgNTQsIC0zOCwgMjksIC0yMiwgCiszOSwgODcsIC0zMSwgLTEyLCAtMjAsIDMsIC0yLCAtMiwgCisyLCAyMCwgMCwgLTEsIC0zNSwgMjcsIDksIC02LCAKKy0xMiwgMywgLTEyLCAtNiwgMTMsIDEsIDE0LCAtMjIsIAorLTU5LCAtMTUsIC0xNywgLTI1LCAxMywgLTcsIDcsIDMsIAorMCwgMSwgLTcsIDYsIC0zLCA2MSwgLTM3LCAtMjMsIAorLTIzLCAtMjksIDM4LCAtMzEsIDI3LCAxLCAtOCwgMiwgCistMjcsIDIzLCAtMjYsIDM2LCAtMzQsIDUsIDI0LCAtMjQsIAorLTYsIDcsIDMsIC01OSwgNzgsIC02MiwgNDQsIC0xNiwgCisxLCA2LCAwLCAxNywgOCwgNDUsIDAsIC0xMTAsIAorNiwgMTQsIC0yLCAzMiwgLTc3LCAtNTYsIDYyLCAtMywgCiszLCAtMTMsIDQsIC0xNiwgMTAyLCAtMTUsIC0zNiwgLTEsIAorOSwgLTExMywgNiwgMjMsIDAsIDksIDksIDUsIAorLTgsIC0xLCAtMTQsIDUsIC0xMiwgMTIxLCAtNTMsIC0yNywgCistOCwgLTksIDIyLCAtMTMsIDMsIDIsIC0zLCAxLCAKKy0yLCAtNzEsIDk1LCAzOCwgLTE5LCAxNSwgLTE2LCAtNSwgCis3MSwgMTAsIDIsIC0zMiwgLTEzLCAtNSwgMTUsIC0xLCAKKy0yLCAtMTQsIC04NSwgMzAsIDI5LCA2LCAzLCAyLCAKKzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorMiwgLTY1LCAtNTYsIC05LCAxOCwgMTgsIDIzLCAtMTQsIAorLTIsIDAsIDEyLCAtMjksIDI2LCAtMTIsIDEsIDIsIAorLTEyLCAtNjQsIDkwLCAtNiwgNCwgMSwgNSwgLTUsIAorLTExMCwgLTMsIC0zMSwgMjIsIC0yOSwgOSwgMCwgOCwgCistNDAsIC01LCAyMSwgLTUsIC01LCAxMywgMTAsIC0xOCwgCis0MCwgMSwgMzUsIC0yMCwgMzAsIC0yOCwgMTEsIC02LCAKKzE5LCA3LCAxNCwgMTgsIC02NCwgOSwgLTYsIDE2LCAKKzUxLCA2OCwgOCwgMTYsIDEyLCAtOCwgMCwgLTksIAorMjAsIC0yMiwgMjUsIDcsIC00LCAtMTMsIDQxLCAtMzUsIAorOTMsIC0xOCwgLTU0LCAxMSwgLTEsIDEsIC05LCA0LCAKKy02NiwgNjYsIC0zMSwgMjAsIC0yMiwgMjUsIC0yMywgMTEsIAorMTAsIDksIDE5LCAxNSwgMTEsIC01LCAtMzEsIC0xMCwgCistMjMsIC0yOCwgLTYsIC02LCAtMywgLTQsIDUsIDMsIAorLTI4LCAyMiwgLTExLCAtNDIsIDI1LCAtMjUsIC0xNiwgNDEsIAorMzQsIDQ3LCAtNiwgMiwgNDIsIC0xOSwgLTIyLCA1LCAKKy0zOSwgMzIsIDYsIC0zNSwgMjIsIDE3LCAtMzAsIDgsIAorLTI2LCAtMTEsIC0xMSwgMywgLTEyLCAzMywgMzMsIC0zNywgCisyMSwgLTEsIDYsIC00LCAzLCAwLCAtNSwgNSwgCisxMiwgLTEyLCA1NywgMjcsIC02MSwgLTMsIDIwLCAtMTcsIAorMiwgMCwgNCwgMCwgLTIsIC0zMywgLTU4LCA4MSwgCistMjMsIDM5LCAtMTAsIC01LCAyLCA2LCAtNywgNSwgCis0LCAtMywgLTIsIC0xMywgLTIzLCAtNzIsIDEwNywgMTUsIAorLTUsIDAsIC03LCAtMywgLTYsIDUsIC00LCAxNSwgCis0NywgMTIsIC0zMSwgMjUsIC0xNiwgOCwgMjIsIC0yNSwgCistNjIsIC01NiwgLTE4LCAxNCwgMjgsIDEyLCAyLCAtMTEsIAorNzQsIC02NiwgNDEsIC0yMCwgLTcsIDE2LCAtMjAsIDE2LCAKKy04LCAwLCAtMTYsIDQsIC0xOSwgOTIsIDEyLCAtNTksIAorLTE0LCAtMzksIDQ5LCAtMjUsIC0xNiwgMjMsIC0yNywgMTksIAorLTMsIC0zMywgMTksIDg1LCAtMjksIDYsIC03LCAtMTAsIAorMTYsIC03LCAtMTIsIDEsIC02LCAyLCA0LCAtMiwgCis2NCwgMTAsIC0yNSwgNDEsIC0yLCAtMzEsIDE1LCAwLCAKKzExMCwgNTAsIDY5LCAzNSwgMjgsIDE5LCAtMTAsIDIsIAorLTQzLCAtNDksIC01NiwgLTE1LCAtMTYsIDEwLCAzLCAxMiwgCistMSwgLTgsIDEsIDI2LCAtMTIsIC0xLCA3LCAtMTEsIAorLTI3LCA0MSwgMjUsIDEsIC0xMSwgLTE4LCAyMiwgLTcsIAorLTEsIC00NywgLTgsIDIzLCAtMywgLTE3LCAtNywgMTgsIAorLTEyNSwgNTksIC01LCAzLCAxOCwgMSwgMiwgMywgCisyNywgLTM1LCA2NSwgLTUzLCA1MCwgLTQ2LCAzNywgLTIxLCAKKy0yOCwgNywgMTQsIC0zNywgLTUsIC01LCAxMiwgNSwgCistOCwgNzgsIC0xOSwgMjEsIC02LCAtMTYsIDgsIC03LCAKKzUsIDIsIDcsIDIsIDEwLCAtNiwgMTIsIC02MCwgCis0NCwgMTEsIC0zNiwgLTMyLCAzMSwgMCwgMiwgLTIsIAorMiwgMSwgLTMsIDcsIC0xMCwgMTcsIC0yMSwgMTAsIAorNiwgLTIsIDE5LCAtMiwgNTksIC0zOCwgLTg2LCAzOCwgCis4LCAtNDEsIC0zMCwgLTQ1LCAtMzMsIDcsIDE1LCAyOCwgCisyOSwgLTcsIDI0LCAtNDAsIDcsIDcsIDUsIC0yLCAKKzksIDI0LCAtMjMsIC0xOCwgNiwgLTI5LCAzMCwgMiwgCisyOCwgNDksIC0xMSwgLTQ2LCAxMCwgNDMsIC0xMywgLTksIAorLTEsIC0zLCAtNywgLTcsIC0xNywgLTYsIDk3LCAtMzMsIAorLTIxLCAzLCA1LCAxLCAxMiwgLTQzLCAtOCwgMjgsIAorNywgLTQzLCAtNywgMTcsIC0yMCwgMTksIC0xLCAyLCAKKy0xMywgOSwgNTQsIDM0LCA5LCAtMjgsIC0xMSwgLTksIAorLTE3LCAxMTAsIC01OSwgNDQsIC0yNiwgMCwgMywgLTEyLCAKKy00NywgNzMsIC0zNCwgLTQzLCAzOCwgLTMzLCAxNiwgLTUsIAorLTQ2LCAtNCwgLTYsIC0yLCAtMjUsIDE5LCAtMjksIDI4LCAKKy0xMywgNSwgMTQsIDI3LCAtNDAsIC00MywgNCwgMzIsIAorLTEzLCAtMiwgLTM1LCAtNCwgMTEyLCAtNDIsIDksIC0xMiwgCiszNywgLTI4LCAxNywgMTQsIC0xOSwgMzUsIC0zOSwgMjMsIAorMywgLTE0LCAtMSwgLTU3LCAtNSwgOTQsIC05LCAzLCAKKy0zOSwgNSwgMzAsIC0xMCwgLTMyLCA0MiwgLTEzLCAtMTQsIAorLTk3LCAtNjMsIDMwLCAtOSwgMSwgLTcsIDEyLCA1LCAKKzIwLCAxNywgLTksIC0zNiwgLTMwLCAyNSwgNDcsIC05LCAKKy0xNSwgMTIsIC0yMiwgOTgsIC04LCAtNTAsIDE1LCAtMjcsIAorMjEsIC0xNiwgLTExLCAyLCAxMiwgLTEwLCAxMCwgLTMsIAorMzMsIDM2LCAtOTYsIDAsIC0xNywgMzEsIC05LCA5LCAKKzMsIC0yMCwgMTMsIC0xMSwgOCwgLTQsIDEwLCAtMTAsIAorOSwgMSwgMTEyLCAtNzAsIC0yNywgNSwgLTIxLCAyLCAKKy01NywgLTMsIC0yOSwgMTAsIDE5LCAtMjEsIDIxLCAtMTAsIAorLTY2LCAtMywgOTEsIC0zNSwgMzAsIC0xMiwgMCwgLTcsIAorNTksIC0yOCwgMjYsIDIsIDE0LCAtMTgsIDEsIDEsIAorMTEsIDE3LCAyMCwgLTU0LCAtNTksIDI3LCA0LCAyOSwgCiszMiwgNSwgMTksIDEyLCAtNCwgMSwgNywgLTEwLCAKKzUsIC0yLCAxMCwgMCwgMjMsIC01LCAyOCwgLTEwNCwgCis0NiwgMTEsIDE2LCAzLCAyOSwgMSwgLTgsIC0xNCwgCisxLCA3LCAtNTAsIDg4LCAtNjIsIDI2LCA4LCAtMTcsIAorLTE0LCA1MCwgMCwgMzIsIC0xMiwgLTMsIC0yNywgMTgsIAorLTgsIC01LCA4LCAzLCAtMjAsIC0xMSwgMzcsIC0xMiwgCis5LCAzMywgNDYsIC0xMDEsIC0xLCAtNCwgMSwgNiwgCistMSwgMjgsIC00MiwgLTE1LCAxNiwgNSwgLTEsIC0yLCAKKy01NSwgODUsIDM4LCAtOSwgLTQsIDExLCAtMiwgLTksIAorLTYsIDMsIC0yMCwgLTEwLCAtNzcsIDg5LCAyNCwgLTMsIAorLTEwNCwgLTU3LCAtMjYsIC0zMSwgLTIwLCAtNiwgLTksIDE0LCAKKzIwLCAtMjMsIDQ2LCAtMTUsIC0zMSwgMjgsIDEsIC0xNSwgCistMiwgNiwgLTIsIDMxLCA0NSwgLTc2LCAyMywgLTI1LCAKK307CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9oaWdoX2xzcF90YWJsZXMuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2hpZ2hfbHNwX3RhYmxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MmU4NzUKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9oaWdoX2xzcF90YWJsZXMuYwpAQCAtMCwwICsxLDE2MyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAKKyAgIEZpbGU6IGhpZ2hfbHNwX3RhYmxlcy5jCisgICBDb2RlYm9va3MgZm9yIGhpZ2gtYmFuZCBMU1BzIGluIFNCLUNFTFAgbW9kZQorICAKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICAgbWV0OgorCisgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAgCisKKyAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICAgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICAgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAgIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgICBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKyAKK2NvbnN0IHNpZ25lZCBjaGFyIGhpZ2hfbHNwX2NkYmtbNTEyXT17CiszOSwxMiwtMTQsLTIwLC0yOSwtNjEsLTY3LC03NiwKKy0zMiwtNzEsLTY3LDY4LDc3LDQ2LDM0LDUsCistMTMsLTQ4LC00NiwtNzIsLTgxLC04NCwtNjAsLTU4LAorLTQwLC0yOCw4Miw5Myw2OCw0NSwyOSwzLAorLTE5LC00NywtMjgsLTQzLC0zNSwtMzAsLTgsLTEzLAorLTM5LC05MSwtOTEsLTEyMywtOTYsMTAsMTAsLTYsCistMTgsLTU1LC02MCwtOTEsLTU2LC0zNiwtMjcsLTE2LAorLTQ4LC03NSw0MCwyOCwtMTAsLTI4LDM1LDksCiszNywxOSwxLC0yMCwtMzEsLTQxLC0xOCwtMjUsCistMzUsLTY4LC04MCw0NSwyNywtMSw0NywxMywKKzAsLTI5LC0zNSwtNTcsLTUwLC03OSwtNzMsLTM4LAorLTE5LDUsMzUsMTQsLTEwLC0yMywxNiwtOCwKKzUsLTI0LC00MCwtNjIsLTIzLC0yNywtMjIsLTE2LAorLTE4LC00NiwtNzIsLTc3LDQzLDIxLDMzLDEsCistODAsLTcwLC03MCwtNjQsLTU2LC01MiwtMzksLTMzLAorLTMxLC0zOCwtMTksLTE5LC0xNSwzMiwzMywtMiwKKzcsLTE1LC0xNSwtMjQsLTIzLC0zMywtNDEsLTU2LAorLTI0LC01Nyw1LDg5LDY0LDQxLDI3LDUsCistOSwtNDcsLTYwLC05NywtOTcsLTEyNCwtMjAsLTksCistNDQsLTczLDMxLDI5LC00LDY0LDQ4LDcsCistMzUsLTU3LDAsLTMsLTI2LC00NywtMywtNiwKKy00MCwtNzYsLTc5LC00OCwxMiw4MSw1NSwxMCwKKzksLTI0LC00MywtNzMsLTU3LC02OSwxNiw1LAorLTI4LC01MywxOCwyOSwyMCwwLC00LC0xMSwKKzYsLTEzLDIzLDcsLTE3LC0zNSwtMzcsLTM3LAorLTMwLC02OCwtNjMsNiwyNCwtOSwtMTQsMywKKzIxLC0xMywtMjcsLTU3LC00OSwtODAsLTI0LC00MSwKKy01LC0xNiwtNSwxLDQ1LDI1LDEyLC03LAorMywtMTUsLTYsLTE2LC0xNSwtOCw2LC0xMywKKy00MiwtODEsLTgwLC04NywxNCwxLC0xMCwtMywKKy00MywtNjksLTQ2LC0yNCwtMjgsLTI5LDM2LDYsCistNDMsLTU2LC0xMiwxMiw1NCw3OSw0Myw5LAorNTQsMjIsMiw4LC0xMiwtNDMsLTQ2LC01MiwKKy0zOCwtNjksLTg5LC01LDc1LDM4LDMzLDUsCistMTMsLTUzLC02MiwtODcsLTg5LC0xMTMsLTk5LC01NSwKKy0zNCwtMzcsNjIsNTUsMzMsMTYsMjEsLTIsCistMTcsLTQ2LC0yOSwtMzgsLTM4LC00OCwtMzksLTQyLAorLTM2LC03NSwtNzIsLTg4LC00OCwtMzAsMjEsMiwKKy0xNSwtNTcsLTY0LC05OCwtODQsLTc2LDI1LDEsCistNDYsLTgwLC0xMiwxOCwtNywzLDM0LDYsCiszOCwzMSwyMyw0LC0xLDIwLDE0LC0xNSwKKy00MywtNzgsLTkxLC0yNCwxNCwtMyw1NCwxNiwKKzAsLTI3LC0yOCwtNDQsLTU2LC04MywtOTIsLTg5LAorLTMsMzQsNTYsNDEsMzYsMjIsMjAsLTgsCistNywtMzUsLTQyLC02MiwtNDksMywxMiwtMTAsCistNTAsLTg3LC05NiwtNjYsOTIsNzAsMzgsOSwKKy03MCwtNzEsLTYyLC00MiwtMzksLTQzLC0xMSwtNywKKy01MCwtNzksLTU4LC01MCwtMzEsMzIsMzEsLTYsCistNCwtMjUsNywtMTcsLTM4LC03MCwtNTgsLTI3LAorLTQzLC04MywtMjgsNTksMzYsMjAsMzEsMiwKKy0yNywtNzEsLTgwLC0xMDksLTk4LC03NSwtMzMsLTMyLAorLTMxLC0yLDMzLDE1LC02LDQzLDMzLC01LAorMCwtMjIsLTEwLC0yNywtMzQsLTQ5LC0xMSwtMjAsCistNDEsLTkxLC0xMDAsLTEyMSwtMzksNTcsNDEsMTAsCistMTksLTUwLC0zOCwtNTksLTYwLC03MCwtMTgsLTIwLAorLTgsLTMxLC04LC0xNSwxLC0xNCwtMjYsLTI1LAorMzMsMjEsMzIsMTcsMSwtMTksLTE5LC0yNiwKKy01OCwtODEsLTM1LC0yMiw0NSwzMCwxMSwtMTEsCiszLC0yNiwtNDgsLTg3LC02NywtODMsLTU4LDMsCistMSwtMjYsLTIwLDQ0LDEwLDI1LDM5LDUsCistOSwtMzUsLTI3LC0zOCw3LDEwLDQsLTksCistNDIsLTg1LC0xMDIsLTEyNyw1Miw0NCwyOCwxMCwKKy00NywtNjEsLTQwLC0zOSwtMTcsLTEsLTEwLC0zMywKKy00MiwtNzQsLTQ4LDIxLC00LDcwLDUyLDEwfTsKKworCitjb25zdCBzaWduZWQgY2hhciBoaWdoX2xzcF9jZGJrMls1MTJdPXsKKy0zNiwtNjIsNiwtOSwtMTAsLTE0LC01NiwyMywKKzEsLTI2LDIzLC00OCwtMTcsMTIsOCwtNywKKzIzLDI5LC0zNiwtMjgsLTYsLTI5LC0xNywtNSwKKzQwLDIzLDEwLDEwLC00NiwtMTMsMzYsNiwKKzQsLTMwLC0yOSw2MiwzMiwtMzIsLTEsMjIsCistMTQsMSwtNCwtMjIsLTQ1LDIsNTQsNCwKKy0zMCwtNTcsLTU5LC0xMiwyNywtMywtMzEsOCwKKy05LDUsMTAsLTE0LDMyLDY2LDE5LDksCisyLC0yNSwtMzcsMjMsLTE1LDE4LC0zOCwtMzEsCis1LC05LC0yMSwxNSwwLDIyLDYyLDMwLAorMTUsLTEyLC0xNCwtNDYsNzcsMjEsMzMsMywKKzM0LDI5LC0xOSw1MCwyLDExLDksLTM4LAorLTEyLC0zNyw2MiwxLC0xNSw1NCwzMiw2LAorMiwtMjQsMjAsMzUsLTIxLDIsMTksMjQsCistMTMsNTUsNCw5LDM5LC0xOSwzMCwtMSwKKy0yMSw3Myw1NCwzMyw4LDE4LDMsMTUsCis2LC0xOSwtNDcsNiwtMywtNDgsLTUwLDEsCisyNiwyMCw4LC0yMywtNTAsNjUsLTE0LC01NSwKKy0xNywtMzEsLTM3LC0yOCw1MywtMSwtMTcsLTUzLAorMSw1NywxMSwtOCwtMjUsLTMwLC0zNyw2NCwKKzUsLTUyLC00NSwxNSwyMywzMSwxNSwxNCwKKy0yNSwyNCwzMywtMiwtNDQsLTU2LC0xOCw2LAorLTIxLC00Myw0LC0xMiwxNywtMzcsMjAsLTEwLAorMzQsMTUsMiwxNSw1NSwyMSwtMTEsLTMxLAorLTYsNDYsMjUsMTYsLTksLTI1LC04LC02MiwKKzI4LDE3LDIwLC0zMiwtMjksMjYsMzAsMjUsCistMTksMiwtMTYsLTE3LDI2LC01MSwyLDUwLAorNDIsMTksLTY2LDIzLDI5LC0yLDMsMTksCistMTksLTM3LDMyLDE1LDYsMzAsLTM0LDEzLAorMTEsLTUsNDAsMzEsMTAsLTQyLDQsLTksCisyNiwtOSwtNzAsMTcsLTIsLTIzLDIwLC0yMiwKKy01NSw1MSwtMjQsLTMxLDIyLC0yMiwxNSwtMTMsCiszLC0xMCwtMjgsLTE2LDU2LDQsLTYzLDExLAorLTE4LC0xNSwtMTgsLTM4LC0zNSwxNiwtNywzNCwKKy0xLC0yMSwtNDksLTQ3LDksLTM3LDcsOCwKKzY5LDU1LDIwLDYsLTMzLC00NSwtMTAsLTksCis2LC05LDEyLDcxLDE1LC0zLC00MiwtNywKKy0yNCwzMiwtMzUsLTIsLTQyLC0xNywtNSwwLAorLTIsLTMzLC01NCwxMywtMTIsLTM0LDQ3LDIzLAorMTksNTUsNywtOCw3NCwzMSwxNCwxNiwKKy0yMywtMjYsMTksMTIsLTE4LC00OSwtMjgsLTMxLAorLTIwLDIsLTE0LC0yMCwtNDcsNzgsNDAsMTMsCistMjMsLTExLDIxLC02LDE4LDEsNDcsNSwKKzM4LDM1LDMyLDQ2LDIyLDgsMTMsMTYsCistMTQsMTgsNTEsMTksNDAsMzksMTEsLTI2LAorLTEsLTE3LDQ3LDIsLTUzLC0xNSwzMSwtMjIsCiszOCwyMSwtMTUsLTE2LDUsLTMzLDUzLDE1LAorLTM4LDg2LDExLC0zLC0yNCw0OSwxMywtNCwKKy0xMSwtMTgsMjgsMjAsLTEyLC0yNywtMjYsMzUsCistMjUsLTM1LC0zLC0yMCwtNjEsMzAsMTAsLTU1LAorLTEyLC0yMiwtNTIsLTU0LC0xNCwxOSwtMzIsLTEyLAorNDUsMTUsLTgsLTQ4LC05LDExLC0zMiw4LAorLTE2LC0zNCwtMTMsNTEsMTgsMzgsLTIsLTMyLAorLTE3LDIyLC0yLC0xOCwtMjgsLTcwLDU5LDI3LAorLTI4LC0xOSwtMTAsLTIwLC05LC05LC04LC0yMSwKKzIxLC04LDM1LC0yLDQ1LC0zLC05LDEyLAorMCwzMCw3LC0zOSw0MywyNywtMzgsLTkxLAorMzAsMjYsMTksLTU1LC00LDYzLDE0LC0xNywKKzEzLDksMTMsMiw3LDQsNiw2MSwKKzcyLC0xLC0xNywyOSwtMSwtMjIsLTE3LDgsCistMjgsLTM3LDYzLDQ0LDQxLDMsMiwxNCwKKzksLTYsNzUsLTgsLTcsLTEyLC0xNSwtMTIsCisxMyw5LC00LDMwLC0yMiwtNjUsMTUsMCwKKy00NSw0LC00LDEsNSwyMiwxMSwyM307CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9qaXR0ZXIuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2ppdHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNjQ0NTMKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9qaXR0ZXIuYwpAQCAtMCwwICsxLDYyNyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAKKyAgIEZpbGU6IHNwZWV4X2ppdHRlci5oCisKKyAgIEFkYXB0aXZlIGppdHRlciBidWZmZXIgZm9yIFNwZWV4CisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKworI2luY2x1ZGUgIm1pc2MuaCIKKyNpbmNsdWRlIDxzcGVleC9zcGVleC5oPgorI2luY2x1ZGUgPHNwZWV4L3NwZWV4X2JpdHMuaD4KKyNpbmNsdWRlIDxzcGVleC9zcGVleF9qaXR0ZXIuaD4KKworI2lmbmRlZiBOVUxMCisjZGVmaW5lIE5VTEwgMAorI2VuZGlmCisKKyNkZWZpbmUgTEFURV9CSU5TIDE1CisjZGVmaW5lIE1BWF9NQVJHSU4gMzAgICAgICAgICAgICAgICAgICAgICAvKio8IE51bWJlciBvZiBiaW5zIGluIG1hcmdpbiBoaXN0b2dyYW0gKi8KKworI2RlZmluZSBTUEVFWF9KSVRURVJfTUFYX0JVRkZFUl9TSVpFIDIwMCAgIC8qKjwgTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyBpbiBqaXR0ZXIgYnVmZmVyICovCisKKworCisjZGVmaW5lIEdUMzIoYSxiKSAoKChzcHhfaW50MzJfdCkoKGEpLShiKSkpPjApCisjZGVmaW5lIEdFMzIoYSxiKSAoKChzcHhfaW50MzJfdCkoKGEpLShiKSkpPj0wKQorI2RlZmluZSBMVDMyKGEsYikgKCgoc3B4X2ludDMyX3QpKChhKS0oYikpKTwwKQorI2RlZmluZSBMRTMyKGEsYikgKCgoc3B4X2ludDMyX3QpKChhKS0oYikpKTw9MCkKKworLyoqIEppdHRlciBidWZmZXIgc3RydWN0dXJlICovCitzdHJ1Y3QgSml0dGVyQnVmZmVyXyB7CisgICBzcHhfdWludDMyX3QgcG9pbnRlcl90aW1lc3RhbXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVGltZXN0YW1wIG9mIHdoYXQgd2Ugd2lsbCAqZ2V0KiBuZXh0ICovCisgICBzcHhfdWludDMyX3QgY3VycmVudF90aW1lc3RhbXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVGltZXN0YW1wIG9mIHRoZSBsb2NhbCBjbG9jayAod2hhdCB3ZSB3aWxsICpwbGF5KiBuZXh0KSAqLworCisgICBjaGFyICpidWZbU1BFRVhfSklUVEVSX01BWF9CVUZGRVJfU0laRV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQnVmZmVyIG9mIHBhY2tldHMgKE5VTEwgaWYgc2xvdCBpcyBmcmVlKSAqLworICAgc3B4X3VpbnQzMl90IHRpbWVzdGFtcFtTUEVFWF9KSVRURVJfTUFYX0JVRkZFUl9TSVpFXTsgICAgICAgICAgICAgICAgICAvKio8IFRpbWVzdGFtcCBvZiBwYWNrZXQgICAgICAgICAgICAgICAgICovCisgICBpbnQgc3BhbltTUEVFWF9KSVRURVJfTUFYX0JVRkZFUl9TSVpFXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVGltZXN0YW1wIG9mIHBhY2tldCAgICAgICAgICAgICAgICAgKi8KKyAgIGludCBsZW5bU1BFRVhfSklUVEVSX01BWF9CVUZGRVJfU0laRV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgYnl0ZXMgaW4gcGFja2V0ICAgICAgICAgICAqLworCisgICBpbnQgdGlja19zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgT3V0cHV0IGdyYW51bGFyaXR5ICAgICAgICAgICAgICAgICAgKi8KKyAgIGludCByZXNldF9zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUcnVlIGlmIHN0YXRlIHdhcyBqdXN0IHJlc2V0ICAgICAgICAqLworICAgaW50IGJ1ZmZlcl9tYXJnaW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEhvdyBtYW55IGZyYW1lcyB3ZSB3YW50IHRvIGtlZXAgaW4gdGhlIGJ1ZmZlciAobG93ZXIgYm91bmQpICovCisgICBpbnQgbGF0ZV9jdXRvZmY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSG93IGxhdGUgbXVzdCBhIHBhY2tldCBiZSBmb3IgaXQgbm90IHRvIGJlIGNvbnNpZGVyZWQgYXQgYWxsICovCisgICBpbnQgaW50ZXJwX3JlcXVlc3RlZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQW4gaW50ZXJwb2xhdGlvbiBpcyByZXF1ZXN0ZWQgYnkgc3BlZXhfaml0dGVyX3VwZGF0ZV9kZWxheSgpICovCisKKyAgIGludCBsb3N0X2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY29uc2VjdXRpdmUgbG9zdCBwYWNrZXRzICAqLworICAgZmxvYXQgc2hvcnR0ZXJtX21hcmdpbltNQVhfTUFSR0lOXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFNob3J0IHRlcm0gbWFyZ2luIGhpc3RvZ3JhbSAgICAgICAgICovCisgICBmbG9hdCBsb25ndGVybV9tYXJnaW5bTUFYX01BUkdJTl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTG9uZyB0ZXJtIG1hcmdpbiBoaXN0b2dyYW0gICAgICAgICAgKi8KKyAgIGZsb2F0IGxvc3NfcmF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBdmVyYWdlIGxvc3MgcmF0ZSAgICAgICAgICAgICAgICAgICAqLworfTsKKworLyoqIEluaXRpYWxpc2Ugaml0dGVyIGJ1ZmZlciAqLworSml0dGVyQnVmZmVyICpqaXR0ZXJfYnVmZmVyX2luaXQoaW50IHRpY2spCit7CisgICBKaXR0ZXJCdWZmZXIgKmppdHRlciA9IChKaXR0ZXJCdWZmZXIqKXNwZWV4X2FsbG9jKHNpemVvZihKaXR0ZXJCdWZmZXIpKTsKKyAgIGlmIChqaXR0ZXIpCisgICB7CisgICAgICBpbnQgaTsKKyAgICAgIGZvciAoaT0wO2k8U1BFRVhfSklUVEVSX01BWF9CVUZGRVJfU0laRTtpKyspCisgICAgICAgICBqaXR0ZXItPmJ1ZltpXT1OVUxMOworICAgICAgaml0dGVyLT50aWNrX3NpemUgPSB0aWNrOworICAgICAgaml0dGVyLT5idWZmZXJfbWFyZ2luID0gMTsKKyAgICAgIGppdHRlci0+bGF0ZV9jdXRvZmYgPSA1MDsKKyAgICAgIGppdHRlcl9idWZmZXJfcmVzZXQoaml0dGVyKTsKKyAgIH0KKyAgIHJldHVybiBqaXR0ZXI7Cit9CisKKy8qKiBSZXNldCBqaXR0ZXIgYnVmZmVyICovCit2b2lkIGppdHRlcl9idWZmZXJfcmVzZXQoSml0dGVyQnVmZmVyICpqaXR0ZXIpCit7CisgICBpbnQgaTsKKyAgIGZvciAoaT0wO2k8U1BFRVhfSklUVEVSX01BWF9CVUZGRVJfU0laRTtpKyspCisgICB7CisgICAgICBpZiAoaml0dGVyLT5idWZbaV0pCisgICAgICB7CisgICAgICAgICBzcGVleF9mcmVlKGppdHRlci0+YnVmW2ldKTsKKyAgICAgICAgIGppdHRlci0+YnVmW2ldID0gTlVMTDsKKyAgICAgIH0KKyAgIH0KKyAgIC8qIFRpbWVzdGFtcCBpcyBhY3R1YWxseSB1bmRlZmluZWQgYXQgdGhpcyBwb2ludCAqLworICAgaml0dGVyLT5wb2ludGVyX3RpbWVzdGFtcCA9IDA7CisgICBqaXR0ZXItPmN1cnJlbnRfdGltZXN0YW1wID0gMDsKKyAgIGppdHRlci0+cmVzZXRfc3RhdGUgPSAxOworICAgaml0dGVyLT5sb3N0X2NvdW50ID0gMDsKKyAgIGppdHRlci0+bG9zc19yYXRlID0gMDsKKyAgIGZvciAoaT0wO2k8TUFYX01BUkdJTjtpKyspCisgICB7CisgICAgICBqaXR0ZXItPnNob3J0dGVybV9tYXJnaW5baV0gPSAwOworICAgICAgaml0dGVyLT5sb25ndGVybV9tYXJnaW5baV0gPSAwOworICAgfQorICAgLypmcHJpbnRmIChzdGRlcnIsICJyZXNldFxuIik7Ki8KK30KKworLyoqIERlc3Ryb3kgaml0dGVyIGJ1ZmZlciAqLwordm9pZCBqaXR0ZXJfYnVmZmVyX2Rlc3Ryb3koSml0dGVyQnVmZmVyICpqaXR0ZXIpCit7CisgICBqaXR0ZXJfYnVmZmVyX3Jlc2V0KGppdHRlcik7CisgICBzcGVleF9mcmVlKGppdHRlcik7Cit9CisKKy8qKiBQdXQgb25lIHBhY2tldCBpbnRvIHRoZSBqaXR0ZXIgYnVmZmVyICovCit2b2lkIGppdHRlcl9idWZmZXJfcHV0KEppdHRlckJ1ZmZlciAqaml0dGVyLCBjb25zdCBKaXR0ZXJCdWZmZXJQYWNrZXQgKnBhY2tldCkKK3sKKyAgIGludCBpLGo7CisgICBzcHhfaW50MzJfdCBhcnJpdmFsX21hcmdpbjsKKyAgIC8qZnByaW50ZiAoc3RkZXJyLCAicHV0IHBhY2tldCAlZCAlZFxuIiwgdGltZXN0YW1wLCBzcGFuKTsqLworICAgaWYgKGppdHRlci0+cmVzZXRfc3RhdGUpCisgICB7CisgICAgICBqaXR0ZXItPnJlc2V0X3N0YXRlPTA7CisgICAgICBqaXR0ZXItPnBvaW50ZXJfdGltZXN0YW1wID0gcGFja2V0LT50aW1lc3RhbXA7CisgICAgICBqaXR0ZXItPmN1cnJlbnRfdGltZXN0YW1wID0gcGFja2V0LT50aW1lc3RhbXA7CisgICAgICAvKmZwcmludGYoc3RkZXJyLCAicmVzZXQgdG8gJWRcbiIsIHRpbWVzdGFtcCk7Ki8KKyAgIH0KKyAgIAorICAgLyogQ2xlYW51cCBidWZmZXIgKHJlbW92ZSBvbGQgcGFja2V0cyB0aGF0IHdlcmVuJ3QgcGxheWVkKSAqLworICAgZm9yIChpPTA7aTxTUEVFWF9KSVRURVJfTUFYX0JVRkZFUl9TSVpFO2krKykKKyAgIHsKKyAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBkaXNjYXJkIGEgImp1c3QtbGF0ZSIgcGFja2V0IGluIGNhc2Ugd2Ugd2FudCB0byBwbGF5IGl0IG5leHQgKGlmIHdlIGludGVycG9sYXRlKS4gKi8KKyAgICAgIGlmIChqaXR0ZXItPmJ1ZltpXSAmJiBMRTMyKGppdHRlci0+dGltZXN0YW1wW2ldICsgaml0dGVyLT5zcGFuW2ldLCBqaXR0ZXItPnBvaW50ZXJfdGltZXN0YW1wKSkKKyAgICAgIHsKKyAgICAgICAgIC8qZnByaW50ZiAoc3RkZXJyLCAiY2xlYW5lZCAobm90IHBsYXllZClcbiIpOyovCisgICAgICAgICBzcGVleF9mcmVlKGppdHRlci0+YnVmW2ldKTsKKyAgICAgICAgIGppdHRlci0+YnVmW2ldID0gTlVMTDsKKyAgICAgIH0KKyAgIH0KKworICAgLypGaW5kIGFuIGVtcHR5IHNsb3QgaW4gdGhlIGJ1ZmZlciovCisgICBmb3IgKGk9MDtpPFNQRUVYX0pJVFRFUl9NQVhfQlVGRkVSX1NJWkU7aSsrKQorICAgeworICAgICAgaWYgKGppdHRlci0+YnVmW2ldPT1OVUxMKQorICAgICAgICAgYnJlYWs7CisgICB9CisKKyAgIC8qZnByaW50ZihzdGRlcnIsICIlZCAlZCAlZlxuIiwgdGltZXN0YW1wLCBqaXR0ZXItPnBvaW50ZXJfdGltZXN0YW1wLCBqaXR0ZXItPmRyaWZ0X2F2ZXJhZ2UpOyovCisgICAvKk5vIHBsYWNlIGxlZnQgaW4gdGhlIGJ1ZmZlciovCisgICBpZiAoaT09U1BFRVhfSklUVEVSX01BWF9CVUZGRVJfU0laRSkKKyAgIHsKKyAgICAgIGludCBlYXJsaWVzdD1qaXR0ZXItPnRpbWVzdGFtcFswXTsKKyAgICAgIGk9MDsKKyAgICAgIGZvciAoaj0xO2o8U1BFRVhfSklUVEVSX01BWF9CVUZGRVJfU0laRTtqKyspCisgICAgICB7CisgICAgICAgICBpZiAoIWppdHRlci0+YnVmW2ldIHx8IExUMzIoaml0dGVyLT50aW1lc3RhbXBbal0sZWFybGllc3QpKQorICAgICAgICAgeworICAgICAgICAgICAgZWFybGllc3QgPSBqaXR0ZXItPnRpbWVzdGFtcFtqXTsKKyAgICAgICAgICAgIGk9ajsKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHNwZWV4X2ZyZWUoaml0dGVyLT5idWZbaV0pOworICAgICAgaml0dGVyLT5idWZbaV09TlVMTDsKKyAgICAgIGlmIChqaXR0ZXItPmxvc3RfY291bnQ+MjApCisgICAgICB7CisgICAgICAgICBqaXR0ZXJfYnVmZmVyX3Jlc2V0KGppdHRlcik7CisgICAgICB9CisgICAgICAvKmZwcmludGYgKHN0ZGVyciwgIkJ1ZmZlciBpcyBmdWxsLCBkaXNjYXJkaW5nIGVhcmxpZXN0IGZyYW1lICVkIChjdXJyZW50bHkgYXQgJWQpXG4iLCB0aW1lc3RhbXAsIGppdHRlci0+cG9pbnRlcl90aW1lc3RhbXApOyovICAgICAgCisgICB9CisgICAKKyAgIC8qIENvcHkgcGFja2V0IGluIGJ1ZmZlciAqLworICAgaml0dGVyLT5idWZbaV09KGNoYXIqKXNwZWV4X2FsbG9jKHBhY2tldC0+bGVuKTsKKyAgIGZvciAoaj0wO2o8cGFja2V0LT5sZW47aisrKQorICAgICAgaml0dGVyLT5idWZbaV1bal09cGFja2V0LT5kYXRhW2pdOworICAgaml0dGVyLT50aW1lc3RhbXBbaV09cGFja2V0LT50aW1lc3RhbXA7CisgICBqaXR0ZXItPnNwYW5baV09cGFja2V0LT5zcGFuOworICAgaml0dGVyLT5sZW5baV09cGFja2V0LT5sZW47CisgICAKKyAgIC8qIEFkanVzdCB0aGUgYnVmZmVyIHNpemUgZGVwZW5kaW5nIG9uIG5ldHdvcmsgY29uZGl0aW9ucy4KKyAgICAgIFRoZSBhcnJpdmFsIG1hcmdpbiBpcyBob3cgbXVjaCBpbiBhZHZhbmNlIChvciBsYXRlKSB0aGUgcGFja2V0IGl0ICovCisgICBhcnJpdmFsX21hcmdpbiA9ICgoKHNweF9pbnQzMl90KXBhY2tldC0+dGltZXN0YW1wKSAtICgoc3B4X2ludDMyX3Qpaml0dGVyLT5jdXJyZW50X3RpbWVzdGFtcCkpL2ppdHRlci0+dGlja19zaXplIC0gaml0dGVyLT5idWZmZXJfbWFyZ2luOworICAgCisgICBpZiAoYXJyaXZhbF9tYXJnaW4gPj0gLWppdHRlci0+bGF0ZV9jdXRvZmYpCisgICB7CisgICAgICAvKiBIZXJlIHdlIGNvbXB1dGUgdGhlIGhpc3RvZ3JhbSBiYXNlZCBvbiB0aGUgdGltZSBvZiBhcnJpdmFsIG9mIHRoZSBwYWNrZXQuCisgICAgICAgICBUaGlzIGlzIGJhc2VkIG9uIGEgKGZpcnN0LW9yZGVyKSByZWN1cnNpdmUgYXZlcmFnZS4gV2Uga2VlcCBib3RoIGEgc2hvcnQtdGVybQorICAgICAgICAgaGlzdG9ncmFtIGFuZCBhIGxvbmctdGVybSBoaXN0b2dyYW0gKi8KKyAgICAgIHNweF9pbnQzMl90IGludF9tYXJnaW47CisgICAgICAvKiBGaXJzdCwgYXBwbHkgdGhlICJkYW1waW5nIiBvZiB0aGUgcmVjdXJzaXZlIGF2ZXJhZ2UgdG8gYWxsIGJpbnMgKi8KKyAgICAgIGZvciAoaT0wO2k8TUFYX01BUkdJTjtpKyspCisgICAgICB7CisgICAgICAgICBqaXR0ZXItPnNob3J0dGVybV9tYXJnaW5baV0gKj0gLjk4OworICAgICAgICAgaml0dGVyLT5sb25ndGVybV9tYXJnaW5baV0gKj0gLjk5NTsKKyAgICAgIH0KKyAgICAgIC8qIFdoYXQgaGlzdG9ncmFtIGJpbiB0aGUgcGFja2V0IHNob3VsZCBiZSBjb3VudGVkIGluICovCisgICAgICBpbnRfbWFyZ2luID0gTEFURV9CSU5TICsgYXJyaXZhbF9tYXJnaW47CisgICAgICBpZiAoaW50X21hcmdpbj5NQVhfTUFSR0lOLTEpCisgICAgICAgICBpbnRfbWFyZ2luID0gTUFYX01BUkdJTi0xOworICAgICAgaWYgKGludF9tYXJnaW48MCkKKyAgICAgICAgIGludF9tYXJnaW4gPSAwOworICAgICAgLyogQWRkIHRoZSBwYWNrZXQgdG8gdGhlIHJpZ2h0IGJpbiAqLworICAgICAgaml0dGVyLT5zaG9ydHRlcm1fbWFyZ2luW2ludF9tYXJnaW5dICs9IC4wMjsKKyAgICAgIGppdHRlci0+bG9uZ3Rlcm1fbWFyZ2luW2ludF9tYXJnaW5dICs9IC4wMDU7CisgICB9IGVsc2UgeworICAgICAgLyogUGFja2V0IGhhcyBhcnJpdmVkICp3YXkqIHRvbyBsYXRlLCB3ZSBwcmV0dHkgbXVjaCBjb25zaWRlciBpdCBsb3N0IGFuZCBub3QgdGFrZSBpdCBpbnRvIGFjY291bnQgaW4gdGhlIGhpc3RvZ3JhbSAqLworICAgICAgLypmcHJpbnRmIChzdGRlcnIsICJ3YXkgdG9vIGxhdGUgPSAlZFxuIiwgYXJyaXZhbF9tYXJnaW4pOyovCisgICAgICBpZiAoaml0dGVyLT5sb3N0X2NvdW50PjIwKQorICAgICAgeworICAgICAgICAgaml0dGVyX2J1ZmZlcl9yZXNldChqaXR0ZXIpOworICAgICAgfQorICAgfQorI2lmIDAgLyogRW5hYmxlIHRvIGNoZWNrIGhvdyBtdWNoIGlzIGJlaW5nIGJ1ZmZlcmVkICovCisgICBpZiAocmFuZCgpJTEwMDA9PTApCisgICB7CisgICAgICBpbnQgY291bnQgPSAwOworICAgICAgZm9yIChqPTA7ajxTUEVFWF9KSVRURVJfTUFYX0JVRkZFUl9TSVpFO2orKykKKyAgICAgIHsKKyAgICAgICAgIGlmIChqaXR0ZXItPmJ1ZltqXSkKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICB9CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJidWZmZXJfc2l6ZSA9ICVkXG4iLCBjb3VudCk7CisgICB9CisjZW5kaWYKK30KKworLyoqIEdldCBvbmUgcGFja2V0IGZyb20gdGhlIGppdHRlciBidWZmZXIgKi8KK2ludCBqaXR0ZXJfYnVmZmVyX2dldChKaXR0ZXJCdWZmZXIgKmppdHRlciwgSml0dGVyQnVmZmVyUGFja2V0ICpwYWNrZXQsIHNweF9pbnQzMl90ICpzdGFydF9vZmZzZXQpCit7CisgICBpbnQgaTsKKyAgIHVuc2lnbmVkIGludCBqOworICAgZmxvYXQgbGF0ZV9yYXRpb19zaG9ydDsKKyAgIGZsb2F0IGxhdGVfcmF0aW9fbG9uZzsKKyAgIGZsb2F0IG9udGltZV9yYXRpb19zaG9ydDsKKyAgIGZsb2F0IG9udGltZV9yYXRpb19sb25nOworICAgZmxvYXQgZWFybHlfcmF0aW9fc2hvcnQ7CisgICBmbG9hdCBlYXJseV9yYXRpb19sb25nOworICAgaW50IGNodW5rX3NpemU7CisgICBpbnQgaW5jb21wbGV0ZSA9IDA7CisgICAKKyAgIGlmIChqaXR0ZXItPmludGVycF9yZXF1ZXN0ZWQpCisgICB7CisgICAgICBqaXR0ZXItPmludGVycF9yZXF1ZXN0ZWQgPSAwOworICAgICAgaWYgKHN0YXJ0X29mZnNldCkKKyAgICAgICAgICpzdGFydF9vZmZzZXQgPSAwOworICAgICAgcGFja2V0LT50aW1lc3RhbXAgPSBqaXR0ZXItPnBvaW50ZXJfdGltZXN0YW1wOworICAgICAgcGFja2V0LT5zcGFuID0gaml0dGVyLT50aWNrX3NpemU7CisgICAgICBqaXR0ZXItPnBvaW50ZXJfdGltZXN0YW1wICs9IGppdHRlci0+dGlja19zaXplOworICAgICAgcGFja2V0LT5sZW4gPSAwOworICAgICAgcmV0dXJuIEpJVFRFUl9CVUZGRVJfTUlTU0lORzsKKyAgIH0KKyAgIGlmIChMVDMyKGppdHRlci0+Y3VycmVudF90aW1lc3RhbXAraml0dGVyLT50aWNrX3NpemUsIGppdHRlci0+cG9pbnRlcl90aW1lc3RhbXApKQorICAgeworICAgICAgaml0dGVyLT5jdXJyZW50X3RpbWVzdGFtcCA9IGppdHRlci0+cG9pbnRlcl90aW1lc3RhbXA7CisgICAgICBzcGVleF93YXJuaW5nKCJkaWQgeW91IGZvcmdldCB0byBjYWxsIGppdHRlcl9idWZmZXJfdGljaygpIGJ5IGFueSBjaGFuY2U/Iik7CisgICB9CisgICAvKmZwcmludGYgKHN0ZGVyciwgImdldCBwYWNrZXQgJWQgJWRcbiIsIGppdHRlci0+cG9pbnRlcl90aW1lc3RhbXAsIGppdHRlci0+Y3VycmVudF90aW1lc3RhbXApOyovCisKKyAgIC8qIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBvbmx5IHdoYXQgcmVtYWluaW5nIG9mIHRoZSBjdXJyZW50IHRpY2sgKi8KKyAgIGNodW5rX3NpemUgPSBqaXR0ZXItPnRpY2tfc2l6ZTsKKyAgIAorICAgLyogQ29tcGlsaW5nIGFycml2YWwgc3RhdGlzdGljcyAqLworICAgCisgICBsYXRlX3JhdGlvX3Nob3J0ID0gMDsKKyAgIGxhdGVfcmF0aW9fbG9uZyA9IDA7CisgICAvKiBDb3VudCB0aGUgcHJvcG9ydGlvbiBvZiBwYWNrZXRzIHRoYXQgYXJlIGxhdGUgKi8KKyAgIGZvciAoaT0wO2k8TEFURV9CSU5TO2krKykKKyAgIHsKKyAgICAgIGxhdGVfcmF0aW9fc2hvcnQgKz0gaml0dGVyLT5zaG9ydHRlcm1fbWFyZ2luW2ldOworICAgICAgbGF0ZV9yYXRpb19sb25nICs9IGppdHRlci0+bG9uZ3Rlcm1fbWFyZ2luW2ldOworICAgfQorICAgLyogQ291bnQgdGhlIHByb3BvcnRpb24gb2YgcGFja2V0cyB0aGF0IGFyZSBqdXN0IG9uIHRpbWUgKi8KKyAgIG9udGltZV9yYXRpb19zaG9ydCA9IGppdHRlci0+c2hvcnR0ZXJtX21hcmdpbltMQVRFX0JJTlNdOworICAgb250aW1lX3JhdGlvX2xvbmcgPSBqaXR0ZXItPmxvbmd0ZXJtX21hcmdpbltMQVRFX0JJTlNdOworICAgZWFybHlfcmF0aW9fc2hvcnQgPSBlYXJseV9yYXRpb19sb25nID0gMDsKKyAgIC8qIENvdW50IHRoZSBwcm9wb3J0aW9uIG9mIHBhY2tldHMgdGhhdCBhcmUgZWFybHkgKi8KKyAgIGZvciAoaT1MQVRFX0JJTlMrMTtpPE1BWF9NQVJHSU47aSsrKQorICAgeworICAgICAgZWFybHlfcmF0aW9fc2hvcnQgKz0gaml0dGVyLT5zaG9ydHRlcm1fbWFyZ2luW2ldOworICAgICAgZWFybHlfcmF0aW9fbG9uZyArPSBqaXR0ZXItPmxvbmd0ZXJtX21hcmdpbltpXTsKKyAgIH0KKyAgIGlmICgwJiZqaXR0ZXItPnBvaW50ZXJfdGltZXN0YW1wJTEwMDA9PTApCisgICB7CisgICAgICAvKmZwcmludGYgKHN0ZGVyciwgIiVmICVmICVmICVmICVmICVmXG4iLCBlYXJseV9yYXRpb19zaG9ydCwgZWFybHlfcmF0aW9fbG9uZywgb250aW1lX3JhdGlvX3Nob3J0LCBvbnRpbWVfcmF0aW9fbG9uZywgbGF0ZV9yYXRpb19zaG9ydCwgbGF0ZV9yYXRpb19sb25nKTsqLworICAgICAgLypmcHJpbnRmIChzdGRlcnIsICIlZiAlZlxuIiwgZWFybHlfcmF0aW9fc2hvcnQgKyBvbnRpbWVfcmF0aW9fc2hvcnQgKyBsYXRlX3JhdGlvX3Nob3J0LCBlYXJseV9yYXRpb19sb25nICsgb250aW1lX3JhdGlvX2xvbmcgKyBsYXRlX3JhdGlvX2xvbmcpOyovCisgICB9CisgICAKKyAgIAorICAgLyogU2VhcmNoaW5nIGZvciB0aGUgcGFja2V0IHRoYXQgZml0cyBiZXN0ICovCisgICAKKyAgIC8qIFNlYXJjaCB0aGUgYnVmZmVyIGZvciBhIHBhY2tldCB3aXRoIHRoZSByaWdodCB0aW1lc3RhbXAgYW5kIHNwYW5uaW5nIHRoZSB3aG9sZSBjdXJyZW50IGNodW5rICovCisgICBmb3IgKGk9MDtpPFNQRUVYX0pJVFRFUl9NQVhfQlVGRkVSX1NJWkU7aSsrKQorICAgeworICAgICAgaWYgKGppdHRlci0+YnVmW2ldICYmIGppdHRlci0+dGltZXN0YW1wW2ldPT1qaXR0ZXItPnBvaW50ZXJfdGltZXN0YW1wICYmIEdFMzIoaml0dGVyLT50aW1lc3RhbXBbaV0raml0dGVyLT5zcGFuW2ldLGppdHRlci0+cG9pbnRlcl90aW1lc3RhbXArY2h1bmtfc2l6ZSkpCisgICAgICAgICBicmVhazsKKyAgIH0KKyAgIAorICAgLyogSWYgbm8gbWF0Y2gsIHRyeSBmb3IgYW4gIm9sZGVyIiBwYWNrZXQgdGhhdCBzdGlsbCBzcGFucyAoZnVsbHkpIHRoZSBjdXJyZW50IGNodW5rICovCisgICBpZiAoaT09U1BFRVhfSklUVEVSX01BWF9CVUZGRVJfU0laRSkKKyAgIHsKKyAgICAgIGZvciAoaT0wO2k8U1BFRVhfSklUVEVSX01BWF9CVUZGRVJfU0laRTtpKyspCisgICAgICB7CisgICAgICAgICBpZiAoaml0dGVyLT5idWZbaV0gJiYgTEUzMihqaXR0ZXItPnRpbWVzdGFtcFtpXSwgaml0dGVyLT5wb2ludGVyX3RpbWVzdGFtcCkgJiYgR0UzMihqaXR0ZXItPnRpbWVzdGFtcFtpXStqaXR0ZXItPnNwYW5baV0saml0dGVyLT5wb2ludGVyX3RpbWVzdGFtcCtjaHVua19zaXplKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgfQorICAgCisgICAvKiBJZiBzdGlsbCBubyBtYXRjaCwgdHJ5IGZvciBhbiAib2xkZXIiIHBhY2tldCB0aGF0IHNwYW5zIHBhcnQgb2YgdGhlIGN1cnJlbnQgY2h1bmsgKi8KKyAgIGlmIChpPT1TUEVFWF9KSVRURVJfTUFYX0JVRkZFUl9TSVpFKQorICAgeworICAgICAgZm9yIChpPTA7aTxTUEVFWF9KSVRURVJfTUFYX0JVRkZFUl9TSVpFO2krKykKKyAgICAgIHsKKyAgICAgICAgIGlmIChqaXR0ZXItPmJ1ZltpXSAmJiBMRTMyKGppdHRlci0+dGltZXN0YW1wW2ldLCBqaXR0ZXItPnBvaW50ZXJfdGltZXN0YW1wKSAmJiBHVDMyKGppdHRlci0+dGltZXN0YW1wW2ldK2ppdHRlci0+c3BhbltpXSxqaXR0ZXItPnBvaW50ZXJfdGltZXN0YW1wKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgfQorICAgCisgICAvKiBJZiBzdGlsbCBubyBtYXRjaCwgdHJ5IGZvciBlYXJsaWVzdCBwYWNrZXQgcG9zc2libGUgKi8KKyAgIGlmIChpPT1TUEVFWF9KSVRURVJfTUFYX0JVRkZFUl9TSVpFKQorICAgeworICAgICAgaW50IGZvdW5kID0gMDsKKyAgICAgIHNweF91aW50MzJfdCBiZXN0X3RpbWU9MDsKKyAgICAgIGludCBiZXN0X3NwYW49MDsKKyAgICAgIGludCBiZXN0aT0wOworICAgICAgZm9yIChpPTA7aTxTUEVFWF9KSVRURVJfTUFYX0JVRkZFUl9TSVpFO2krKykKKyAgICAgIHsKKyAgICAgICAgIC8qIGNoZWNrIGlmIHBhY2tldCBzdGFydHMgd2l0aGluIGN1cnJlbnQgY2h1bmsgKi8KKyAgICAgICAgIGlmIChqaXR0ZXItPmJ1ZltpXSAmJiBMVDMyKGppdHRlci0+dGltZXN0YW1wW2ldLGppdHRlci0+cG9pbnRlcl90aW1lc3RhbXArY2h1bmtfc2l6ZSkgJiYgR0UzMihqaXR0ZXItPnRpbWVzdGFtcFtpXSxqaXR0ZXItPnBvaW50ZXJfdGltZXN0YW1wKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghZm91bmQgfHwgTFQzMihqaXR0ZXItPnRpbWVzdGFtcFtpXSxiZXN0X3RpbWUpIHx8IChqaXR0ZXItPnRpbWVzdGFtcFtpXT09YmVzdF90aW1lICYmIEdUMzIoaml0dGVyLT5zcGFuW2ldLGJlc3Rfc3BhbikpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgYmVzdF90aW1lID0gaml0dGVyLT50aW1lc3RhbXBbaV07CisgICAgICAgICAgICAgICBiZXN0X3NwYW4gPSBqaXR0ZXItPnNwYW5baV07CisgICAgICAgICAgICAgICBiZXN0aSA9IGk7CisgICAgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoZm91bmQpCisgICAgICB7CisgICAgICAgICBpPWJlc3RpOworICAgICAgICAgaW5jb21wbGV0ZSA9IDE7CisgICAgICAgICAvKmZwcmludGYgKHN0ZGVyciwgImluY29tcGxldGU6ICVkICVkICVkICVkXG4iLCBqaXR0ZXItPnRpbWVzdGFtcFtpXSwgaml0dGVyLT5wb2ludGVyX3RpbWVzdGFtcCwgY2h1bmtfc2l6ZSwgaml0dGVyLT5zcGFuW2ldKTsqLworICAgICAgfQorICAgfQorCisgICAvKiBJZiB3ZSBmaW5kIHNvbWV0aGluZyAqLworICAgaWYgKGkhPVNQRUVYX0pJVFRFUl9NQVhfQlVGRkVSX1NJWkUpCisgICB7CisgICAgICAvKiBXZSAob2J2aW91c2x5KSBoYXZlbid0IGxvc3QgdGhpcyBwYWNrZXQgKi8KKyAgICAgIGppdHRlci0+bG9zdF9jb3VudCA9IDA7CisgICAgICBqaXR0ZXItPmxvc3NfcmF0ZSA9IC45OTkqaml0dGVyLT5sb3NzX3JhdGU7CisgICAgICAvKiBDaGVjayBmb3IgcG90ZW50aWFsIG92ZXJmbG93ICovCisgICAgICBwYWNrZXQtPmxlbiA9IGppdHRlci0+bGVuW2ldOworICAgICAgLyogQ29weSBwYWNrZXQgKi8KKyAgICAgIGZvciAoaj0wO2o8cGFja2V0LT5sZW47aisrKQorICAgICAgICAgcGFja2V0LT5kYXRhW2pdID0gaml0dGVyLT5idWZbaV1bal07CisgICAgICAvKiBSZW1vdmUgcGFja2V0ICovCisgICAgICBzcGVleF9mcmVlKGppdHRlci0+YnVmW2ldKTsKKyAgICAgIGppdHRlci0+YnVmW2ldID0gTlVMTDsKKyAgICAgIC8qIFNldCB0aW1lc3RhbXAgYW5kIHNwYW4gKGlmIHJlcXVlc3RlZCkgKi8KKyAgICAgIGlmIChzdGFydF9vZmZzZXQpCisgICAgICAgICAqc3RhcnRfb2Zmc2V0ID0gKHNweF9pbnQzMl90KWppdHRlci0+dGltZXN0YW1wW2ldLShzcHhfaW50MzJfdClqaXR0ZXItPnBvaW50ZXJfdGltZXN0YW1wOworICAgICAgcGFja2V0LT50aW1lc3RhbXAgPSBqaXR0ZXItPnRpbWVzdGFtcFtpXTsKKyAgICAgIHBhY2tldC0+c3BhbiA9IGppdHRlci0+c3BhbltpXTsKKyAgICAgIC8qIFBvaW50IGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgcGFja2V0ICovCisgICAgICBqaXR0ZXItPnBvaW50ZXJfdGltZXN0YW1wID0gaml0dGVyLT50aW1lc3RhbXBbaV0raml0dGVyLT5zcGFuW2ldOworICAgICAgaWYgKGluY29tcGxldGUpCisgICAgICAgICByZXR1cm4gSklUVEVSX0JVRkZFUl9JTkNPTVBMRVRFOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIEpJVFRFUl9CVUZGRVJfT0s7CisgICB9CisgICAKKyAgIAorICAgLyogSWYgd2UgaGF2ZW4ndCBmb3VuZCBhbnl0aGluZyB3b3J0aCByZXR1cm5pbmcgKi8KKyAgIC8qZnByaW50ZiAoc3RkZXJyLCAibm90IGZvdW5kXG4iKTsqLworICAgaml0dGVyLT5sb3N0X2NvdW50Kys7CisgICAvKmZwcmludGYgKHN0ZGVyciwgIm0iKTsqLworICAgLypmcHJpbnRmIChzdGRlcnIsICJsb3N0X2NvdW50ID0gJWRcbiIsIGppdHRlci0+bG9zdF9jb3VudCk7Ki8KKyAgIGppdHRlci0+bG9zc19yYXRlID0gLjk5OSpqaXR0ZXItPmxvc3NfcmF0ZSArIC4wMDE7CisgICBpZiAoc3RhcnRfb2Zmc2V0KQorICAgICAgKnN0YXJ0X29mZnNldCA9IDA7CisgICBwYWNrZXQtPnRpbWVzdGFtcCA9IGppdHRlci0+cG9pbnRlcl90aW1lc3RhbXA7CisgICBwYWNrZXQtPnNwYW4gPSBqaXR0ZXItPnRpY2tfc2l6ZTsKKyAgIGppdHRlci0+cG9pbnRlcl90aW1lc3RhbXAgKz0gY2h1bmtfc2l6ZTsKKyAgIHBhY2tldC0+bGVuID0gMDsKKyAgIAorICAgLyogQWRqdXN0aW5nIHRoZSBidWZmZXJpbmcgYnNzZWQgb24gdGhlIGFtb3VudCBvZiBwYWNrZXRzIHRoYXQgYXJlIGVhcmx5L29uIHRpbWUvbGF0ZSAqLyAgIAorICAgaWYgKGxhdGVfcmF0aW9fc2hvcnQgPiAuMSB8fCBsYXRlX3JhdGlvX2xvbmcgPiAuMDMpCisgICB7CisgICAgICAvKiBJZiB0b28gbWFueSBwYWNrZXRzIGFyZSBhcnJpdmluZyBsYXRlICovCisgICAgICBqaXR0ZXItPnNob3J0dGVybV9tYXJnaW5bTUFYX01BUkdJTi0xXSArPSBqaXR0ZXItPnNob3J0dGVybV9tYXJnaW5bTUFYX01BUkdJTi0yXTsKKyAgICAgIGppdHRlci0+bG9uZ3Rlcm1fbWFyZ2luW01BWF9NQVJHSU4tMV0gKz0gaml0dGVyLT5sb25ndGVybV9tYXJnaW5bTUFYX01BUkdJTi0yXTsKKyAgICAgIGZvciAoaT1NQVhfTUFSR0lOLTM7aT49MDtpLS0pCisgICAgICB7CisgICAgICAgICBqaXR0ZXItPnNob3J0dGVybV9tYXJnaW5baSsxXSA9IGppdHRlci0+c2hvcnR0ZXJtX21hcmdpbltpXTsKKyAgICAgICAgIGppdHRlci0+bG9uZ3Rlcm1fbWFyZ2luW2krMV0gPSBqaXR0ZXItPmxvbmd0ZXJtX21hcmdpbltpXTsgICAgICAgICAKKyAgICAgIH0KKyAgICAgIGppdHRlci0+c2hvcnR0ZXJtX21hcmdpblswXSA9IDA7CisgICAgICBqaXR0ZXItPmxvbmd0ZXJtX21hcmdpblswXSA9IDA7ICAgICAgICAgICAgCisgICAgICBqaXR0ZXItPnBvaW50ZXJfdGltZXN0YW1wIC09IGppdHRlci0+dGlja19zaXplOworICAgICAgaml0dGVyLT5jdXJyZW50X3RpbWVzdGFtcCAtPSBqaXR0ZXItPnRpY2tfc2l6ZTsKKyAgICAgIC8qZnByaW50ZiAoc3RkZXJyLCAiaSIpOyovCisgICAgICAvKmZwcmludGYgKHN0ZGVyciwgImludGVycG9sYXRlIChnZXR0aW5nIHNvbWUgc2xhY2spXG4iKTsqLworICAgfQorCisgICByZXR1cm4gSklUVEVSX0JVRkZFUl9NSVNTSU5HOworCit9CisKKy8qKiBHZXQgcG9pbnRlciB0aW1lc3RhbXAgb2Ygaml0dGVyIGJ1ZmZlciAqLworaW50IGppdHRlcl9idWZmZXJfZ2V0X3BvaW50ZXJfdGltZXN0YW1wKEppdHRlckJ1ZmZlciAqaml0dGVyKQoreworICAgcmV0dXJuIGppdHRlci0+cG9pbnRlcl90aW1lc3RhbXA7Cit9CisKK3ZvaWQgaml0dGVyX2J1ZmZlcl90aWNrKEppdHRlckJ1ZmZlciAqaml0dGVyKQoreworICAgaml0dGVyLT5jdXJyZW50X3RpbWVzdGFtcCArPSBqaXR0ZXItPnRpY2tfc2l6ZTsKK30KKworLyogTGV0IHRoZSBqaXR0ZXIgYnVmZmVyIGtub3cgaXQncyB0aGUgcmlnaHQgdGltZSB0byBhZGp1c3QgdGhlIGJ1ZmZlcmluZyBkZWxheSB0byB0aGUgbmV0d29yayBjb25kaXRpb25zICovCitpbnQgaml0dGVyX2J1ZmZlcl91cGRhdGVfZGVsYXkoSml0dGVyQnVmZmVyICpqaXR0ZXIsIEppdHRlckJ1ZmZlclBhY2tldCAqcGFja2V0LCBzcHhfaW50MzJfdCAqc3RhcnRfb2Zmc2V0KQoreworICAgaW50IGk7CisgICBmbG9hdCBsYXRlX3JhdGlvX3Nob3J0OworICAgZmxvYXQgbGF0ZV9yYXRpb19sb25nOworICAgZmxvYXQgb250aW1lX3JhdGlvX3Nob3J0OworICAgZmxvYXQgb250aW1lX3JhdGlvX2xvbmc7CisgICBmbG9hdCBlYXJseV9yYXRpb19zaG9ydDsKKyAgIGZsb2F0IGVhcmx5X3JhdGlvX2xvbmc7CisgICAKKyAgIGlmIChMVDMyKGppdHRlci0+Y3VycmVudF90aW1lc3RhbXAraml0dGVyLT50aWNrX3NpemUsIGppdHRlci0+cG9pbnRlcl90aW1lc3RhbXApKQorICAgeworICAgICAgaml0dGVyLT5jdXJyZW50X3RpbWVzdGFtcCA9IGppdHRlci0+cG9pbnRlcl90aW1lc3RhbXA7CisgICAgICBzcGVleF93YXJuaW5nKCJkaWQgeW91IGZvcmdldCB0byBjYWxsIGppdHRlcl9idWZmZXJfdGljaygpIGJ5IGFueSBjaGFuY2U/Iik7CisgICB9CisgICAvKmZwcmludGYgKHN0ZGVyciwgImdldCBwYWNrZXQgJWQgJWRcbiIsIGppdHRlci0+cG9pbnRlcl90aW1lc3RhbXAsIGppdHRlci0+Y3VycmVudF90aW1lc3RhbXApOyovCisKKyAgIC8qIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBvbmx5IHdoYXQgcmVtYWluaW5nIG9mIHRoZSBjdXJyZW50IHRpY2sgKi8KKyAgIGxhdGVfcmF0aW9fc2hvcnQgPSAwOworICAgbGF0ZV9yYXRpb19sb25nID0gMDsKKyAgIC8qIENvdW50IHRoZSBwcm9wb3J0aW9uIG9mIHBhY2tldHMgdGhhdCBhcmUgbGF0ZSAqLworICAgZm9yIChpPTA7aTxMQVRFX0JJTlM7aSsrKQorICAgeworICAgICAgbGF0ZV9yYXRpb19zaG9ydCArPSBqaXR0ZXItPnNob3J0dGVybV9tYXJnaW5baV07CisgICAgICBsYXRlX3JhdGlvX2xvbmcgKz0gaml0dGVyLT5sb25ndGVybV9tYXJnaW5baV07CisgICB9CisgICAvKiBDb3VudCB0aGUgcHJvcG9ydGlvbiBvZiBwYWNrZXRzIHRoYXQgYXJlIGp1c3Qgb24gdGltZSAqLworICAgb250aW1lX3JhdGlvX3Nob3J0ID0gaml0dGVyLT5zaG9ydHRlcm1fbWFyZ2luW0xBVEVfQklOU107CisgICBvbnRpbWVfcmF0aW9fbG9uZyA9IGppdHRlci0+bG9uZ3Rlcm1fbWFyZ2luW0xBVEVfQklOU107CisgICBlYXJseV9yYXRpb19zaG9ydCA9IGVhcmx5X3JhdGlvX2xvbmcgPSAwOworICAgLyogQ291bnQgdGhlIHByb3BvcnRpb24gb2YgcGFja2V0cyB0aGF0IGFyZSBlYXJseSAqLworICAgZm9yIChpPUxBVEVfQklOUysxO2k8TUFYX01BUkdJTjtpKyspCisgICB7CisgICAgICBlYXJseV9yYXRpb19zaG9ydCArPSBqaXR0ZXItPnNob3J0dGVybV9tYXJnaW5baV07CisgICAgICBlYXJseV9yYXRpb19sb25nICs9IGppdHRlci0+bG9uZ3Rlcm1fbWFyZ2luW2ldOworICAgfQorICAgCisgICAvKiBBZGp1c3RpbmcgdGhlIGJ1ZmZlcmluZyBic3NlZCBvbiB0aGUgYW1vdW50IG9mIHBhY2tldHMgdGhhdCBhcmUgZWFybHkvb24gdGltZS9sYXRlICovICAgCisgICBpZiAobGF0ZV9yYXRpb19zaG9ydCA+IC4xIHx8IGxhdGVfcmF0aW9fbG9uZyA+IC4wMykKKyAgIHsKKyAgICAgIC8qIElmIHRvbyBtYW55IHBhY2tldHMgYXJlIGFycml2aW5nIGxhdGUgKi8KKyAgICAgIGppdHRlci0+c2hvcnR0ZXJtX21hcmdpbltNQVhfTUFSR0lOLTFdICs9IGppdHRlci0+c2hvcnR0ZXJtX21hcmdpbltNQVhfTUFSR0lOLTJdOworICAgICAgaml0dGVyLT5sb25ndGVybV9tYXJnaW5bTUFYX01BUkdJTi0xXSArPSBqaXR0ZXItPmxvbmd0ZXJtX21hcmdpbltNQVhfTUFSR0lOLTJdOworICAgICAgZm9yIChpPU1BWF9NQVJHSU4tMztpPj0wO2ktLSkKKyAgICAgIHsKKyAgICAgICAgIGppdHRlci0+c2hvcnR0ZXJtX21hcmdpbltpKzFdID0gaml0dGVyLT5zaG9ydHRlcm1fbWFyZ2luW2ldOworICAgICAgICAgaml0dGVyLT5sb25ndGVybV9tYXJnaW5baSsxXSA9IGppdHRlci0+bG9uZ3Rlcm1fbWFyZ2luW2ldOyAgICAgICAgIAorICAgICAgfQorICAgICAgaml0dGVyLT5zaG9ydHRlcm1fbWFyZ2luWzBdID0gMDsKKyAgICAgIGppdHRlci0+bG9uZ3Rlcm1fbWFyZ2luWzBdID0gMDsgICAgICAgICAgICAKKyAgICAgIGppdHRlci0+cG9pbnRlcl90aW1lc3RhbXAgLT0gaml0dGVyLT50aWNrX3NpemU7CisgICAgICBqaXR0ZXItPmN1cnJlbnRfdGltZXN0YW1wIC09IGppdHRlci0+dGlja19zaXplOworICAgICAgaml0dGVyLT5pbnRlcnBfcmVxdWVzdGVkID0gMTsKKyAgICAgIHJldHVybiBKSVRURVJfQlVGRkVSX0FESlVTVF9JTlRFUlBPTEFURTsKKyAgIAorICAgfSBlbHNlIGlmIChsYXRlX3JhdGlvX3Nob3J0ICsgb250aW1lX3JhdGlvX3Nob3J0IDwgLjAwNSAmJiBsYXRlX3JhdGlvX2xvbmcgKyBvbnRpbWVfcmF0aW9fbG9uZyA8IC4wMSAmJiBlYXJseV9yYXRpb19zaG9ydCA+IC44KQorICAgeworICAgICAgLyogTWFueSBmcmFtZXMgYXJyaXZpbmcgZWFybHkgKi8KKyAgICAgIGppdHRlci0+c2hvcnR0ZXJtX21hcmdpblswXSArPSBqaXR0ZXItPnNob3J0dGVybV9tYXJnaW5bMV07CisgICAgICBqaXR0ZXItPmxvbmd0ZXJtX21hcmdpblswXSArPSBqaXR0ZXItPmxvbmd0ZXJtX21hcmdpblsxXTsKKyAgICAgIGZvciAoaT0xO2k8TUFYX01BUkdJTi0xO2krKykKKyAgICAgIHsKKyAgICAgICAgIGppdHRlci0+c2hvcnR0ZXJtX21hcmdpbltpXSA9IGppdHRlci0+c2hvcnR0ZXJtX21hcmdpbltpKzFdOworICAgICAgICAgaml0dGVyLT5sb25ndGVybV9tYXJnaW5baV0gPSBqaXR0ZXItPmxvbmd0ZXJtX21hcmdpbltpKzFdOyAgICAgICAgIAorICAgICAgfQorICAgICAgaml0dGVyLT5zaG9ydHRlcm1fbWFyZ2luW01BWF9NQVJHSU4tMV0gPSAwOworICAgICAgaml0dGVyLT5sb25ndGVybV9tYXJnaW5bTUFYX01BUkdJTi0xXSA9IDA7ICAgICAgCisgICAgICAvKmZwcmludGYgKHN0ZGVyciwgImRyb3AgZnJhbWVcbiIpOyovCisgICAgICAvKmZwcmludGYgKHN0ZGVyciwgImQiKTsqLworICAgICAgaml0dGVyLT5wb2ludGVyX3RpbWVzdGFtcCArPSBqaXR0ZXItPnRpY2tfc2l6ZTsKKyAgICAgIGppdHRlci0+Y3VycmVudF90aW1lc3RhbXAgKz0gaml0dGVyLT50aWNrX3NpemU7CisgICAgICByZXR1cm4gSklUVEVSX0JVRkZFUl9BREpVU1RfRFJPUDsKKyAgIH0KKyAgIAorICAgcmV0dXJuIEpJVFRFUl9CVUZGRVJfQURKVVNUX09LOworfQorCisvKiBVc2VkIGxpa2UgdGhlIGlvY3RsIGZ1bmN0aW9uIHRvIGNvbnRyb2wgdGhlIGppdHRlciBidWZmZXIgcGFyYW1ldGVycyAqLworaW50IGppdHRlcl9idWZmZXJfY3RsKEppdHRlckJ1ZmZlciAqaml0dGVyLCBpbnQgcmVxdWVzdCwgdm9pZCAqcHRyKQoreworICAgaW50IGNvdW50LCBpOworICAgc3dpdGNoKHJlcXVlc3QpCisgICB7CisgICAgICBjYXNlIEpJVFRFUl9CVUZGRVJfU0VUX01BUkdJTjoKKyAgICAgICAgIGppdHRlci0+YnVmZmVyX21hcmdpbiA9ICooc3B4X2ludDMyX3QqKXB0cjsKKyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBKSVRURVJfQlVGRkVSX0dFVF9NQVJHSU46CisgICAgICAgICAqKHNweF9pbnQzMl90KilwdHIgPSBqaXR0ZXItPmJ1ZmZlcl9tYXJnaW47CisgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSklUVEVSX0JVRkZFUl9HRVRfQVZBTElBQkxFX0NPVU5UOgorICAgICAgICAgY291bnQgPSAwOworICAgICAgICAgZm9yIChpPTA7aTxTUEVFWF9KSVRURVJfTUFYX0JVRkZFUl9TSVpFO2krKykKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChqaXR0ZXItPmJ1ZltpXSAmJiBMRTMyKGppdHRlci0+cG9pbnRlcl90aW1lc3RhbXAsIGppdHRlci0+dGltZXN0YW1wW2ldKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICAqKHNweF9pbnQzMl90KilwdHIgPSBjb3VudDsKKyAgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgIHNwZWV4X3dhcm5pbmdfaW50KCJVbmtub3duIGppdHRlcl9idWZmZXJfY3RsIHJlcXVlc3Q6ICIsIHJlcXVlc3QpOworICAgICAgICAgcmV0dXJuIC0xOworICAgfQorICAgcmV0dXJuIDA7Cit9CisKKworCit2b2lkIHNwZWV4X2ppdHRlcl9pbml0KFNwZWV4Sml0dGVyICpqaXR0ZXIsIHZvaWQgKmRlY29kZXIsIGludCBzYW1wbGluZ19yYXRlKQoreworICAgaml0dGVyLT5kZWMgPSBkZWNvZGVyOworICAgc3BlZXhfZGVjb2Rlcl9jdGwoZGVjb2RlciwgU1BFRVhfR0VUX0ZSQU1FX1NJWkUsICZqaXR0ZXItPmZyYW1lX3NpemUpOworCisgICBqaXR0ZXItPnBhY2tldHMgPSBqaXR0ZXJfYnVmZmVyX2luaXQoaml0dGVyLT5mcmFtZV9zaXplKTsKKworICAgc3BlZXhfYml0c19pbml0KCZqaXR0ZXItPmN1cnJlbnRfcGFja2V0KTsKKyAgIGppdHRlci0+dmFsaWRfYml0cyA9IDA7CisKK30KKwordm9pZCBzcGVleF9qaXR0ZXJfZGVzdHJveShTcGVleEppdHRlciAqaml0dGVyKQoreworICAgaml0dGVyX2J1ZmZlcl9kZXN0cm95KGppdHRlci0+cGFja2V0cyk7CisgICBzcGVleF9iaXRzX2Rlc3Ryb3koJmppdHRlci0+Y3VycmVudF9wYWNrZXQpOworfQorCit2b2lkIHNwZWV4X2ppdHRlcl9wdXQoU3BlZXhKaXR0ZXIgKmppdHRlciwgY2hhciAqcGFja2V0LCBpbnQgbGVuLCBpbnQgdGltZXN0YW1wKQoreworICAgSml0dGVyQnVmZmVyUGFja2V0IHA7CisgICBwLmRhdGEgPSBwYWNrZXQ7CisgICBwLmxlbiA9IGxlbjsKKyAgIHAudGltZXN0YW1wID0gdGltZXN0YW1wOworICAgcC5zcGFuID0gaml0dGVyLT5mcmFtZV9zaXplOworICAgaml0dGVyX2J1ZmZlcl9wdXQoaml0dGVyLT5wYWNrZXRzLCAmcCk7Cit9CisKK3ZvaWQgc3BlZXhfaml0dGVyX2dldChTcGVleEppdHRlciAqaml0dGVyLCBzaG9ydCAqb3V0LCBpbnQgKmN1cnJlbnRfdGltZXN0YW1wKQoreworICAgaW50IGk7CisgICBpbnQgcmV0OworICAgY2hhciBkYXRhWzIwNDhdOworICAgSml0dGVyQnVmZmVyUGFja2V0IHBhY2tldDsKKyAgIHBhY2tldC5kYXRhID0gZGF0YTsKKyAgIAorICAgaWYgKGppdHRlci0+dmFsaWRfYml0cykKKyAgIHsKKyAgICAgIC8qIFRyeSBkZWNvZGluZyBsYXN0IHJlY2VpdmVkIHBhY2tldCAqLworICAgICAgcmV0ID0gc3BlZXhfZGVjb2RlX2ludChqaXR0ZXItPmRlYywgJmppdHRlci0+Y3VycmVudF9wYWNrZXQsIG91dCk7CisgICAgICBpZiAocmV0ID09IDApCisgICAgICB7CisgICAgICAgICBqaXR0ZXJfYnVmZmVyX3RpY2soaml0dGVyLT5wYWNrZXRzKTsKKyAgICAgICAgIHJldHVybjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICBqaXR0ZXItPnZhbGlkX2JpdHMgPSAwOworICAgICAgfQorICAgfQorCisgICByZXQgPSBqaXR0ZXJfYnVmZmVyX2dldChqaXR0ZXItPnBhY2tldHMsICZwYWNrZXQsIE5VTEwpOworICAgCisgICBpZiAocmV0ICE9IEpJVFRFUl9CVUZGRVJfT0spCisgICB7CisgICAgICAvKiBObyBwYWNrZXQgZm91bmQgKi8KKworICAgICAgLypmcHJpbnRmIChzdGRlcnIsICJsb3N0L2xhdGUgZnJhbWVcbiIpOyovCisgICAgICAvKlBhY2tldCBpcyBsYXRlIG9yIGxvc3QqLworICAgICAgc3BlZXhfZGVjb2RlX2ludChqaXR0ZXItPmRlYywgTlVMTCwgb3V0KTsKKyAgIH0gZWxzZSB7CisgICAgICBzcGVleF9iaXRzX3JlYWRfZnJvbSgmaml0dGVyLT5jdXJyZW50X3BhY2tldCwgcGFja2V0LmRhdGEsIHBhY2tldC5sZW4pOworICAgICAgLyogRGVjb2RlIHBhY2tldCAqLworICAgICAgcmV0ID0gc3BlZXhfZGVjb2RlX2ludChqaXR0ZXItPmRlYywgJmppdHRlci0+Y3VycmVudF9wYWNrZXQsIG91dCk7CisgICAgICBpZiAocmV0ID09IDApCisgICAgICB7CisgICAgICAgICBqaXR0ZXItPnZhbGlkX2JpdHMgPSAxOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgIC8qIEVycm9yIHdoaWxlIGRlY29kaW5nICovCisgICAgICAgICBmb3IgKGk9MDtpPGppdHRlci0+ZnJhbWVfc2l6ZTtpKyspCisgICAgICAgICAgICBvdXRbaV09MDsKKyAgICAgIH0KKyAgIH0KKyAgIGppdHRlcl9idWZmZXJfdXBkYXRlX2RlbGF5KGppdHRlci0+cGFja2V0cywgJnBhY2tldCwgTlVMTCk7CisgICBqaXR0ZXJfYnVmZmVyX3RpY2soaml0dGVyLT5wYWNrZXRzKTsKK30KKworaW50IHNwZWV4X2ppdHRlcl9nZXRfcG9pbnRlcl90aW1lc3RhbXAoU3BlZXhKaXR0ZXIgKmppdHRlcikKK3sKKyAgIHJldHVybiBqaXR0ZXJfYnVmZmVyX2dldF9wb2ludGVyX3RpbWVzdGFtcChqaXR0ZXItPnBhY2tldHMpOworfQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgva2lzc19mZnQuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2tpc3NfZmZ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1YTI1NwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2tpc3NfZmZ0LmMKQEAgLTAsMCArMSw1MjIgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNCwgTWFyayBCb3JnZXJkaW5nCitDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNywgSmVhbi1NYXJjIFZhbGluCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiX2tpc3NfZmZ0X2d1dHMuaCIKKyNpbmNsdWRlICJtaXNjLmgiCisKKy8qIFRoZSBndXRzIGhlYWRlciBjb250YWlucyBhbGwgdGhlIG11bHRpcGxpY2F0aW9uIGFuZCBhZGRpdGlvbiBtYWNyb3MgdGhhdCBhcmUgZGVmaW5lZCBmb3IKKyBmaXhlZCBvciBmbG9hdGluZyBwb2ludCBjb21wbGV4IG51bWJlcnMuICBJdCBhbHNvIGRlbGFyZXMgdGhlIGtmXyBpbnRlcm5hbCBmdW5jdGlvbnMuCisgKi8KKworc3RhdGljIHZvaWQga2ZfYmZseTIoCisgICAgICAgIGtpc3NfZmZ0X2NweCAqIEZvdXQsCisgICAgICAgIGNvbnN0IHNpemVfdCBmc3RyaWRlLAorICAgICAgICBjb25zdCBraXNzX2ZmdF9jZmcgc3QsCisgICAgICAgIGludCBtLAorICAgICAgICBpbnQgTiwKKyAgICAgICAgaW50IG1tCisgICAgICAgICkKK3sKKyAgICBraXNzX2ZmdF9jcHggKiBGb3V0MjsKKyAgICBraXNzX2ZmdF9jcHggKiB0dzE7CisgICAga2lzc19mZnRfY3B4IHQ7CisgICAgaWYgKCFzdC0+aW52ZXJzZSkgeworICAgICAgIGludCBpLGo7CisgICAgICAga2lzc19mZnRfY3B4ICogRm91dF9iZWcgPSBGb3V0OworICAgICAgIGZvciAoaT0wO2k8TjtpKyspCisgICAgICAgeworICAgICAgICAgIEZvdXQgPSBGb3V0X2JlZyArIGkqbW07CisgICAgICAgICAgRm91dDIgPSBGb3V0ICsgbTsKKyAgICAgICAgICB0dzEgPSBzdC0+dHdpZGRsZXM7CisgICAgICAgICAgZm9yKGo9MDtqPG07aisrKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICAvKiBBbG1vc3QgdGhlIHNhbWUgYXMgdGhlIGNvZGUgcGF0aCBiZWxvdywgZXhjZXB0IHRoYXQgd2UgZGl2aWRlIHRoZSBpbnB1dCBieSB0d28KKyAgICAgICAgICAgICAgKHdoaWxlIGtlZXBpbmcgdGhlIGJlc3QgYWNjdXJhY3kgcG9zc2libGUpICovCisgICAgICAgICAgICAgc3B4X3dvcmQzMl90IHRyLCB0aTsKKyAgICAgICAgICAgICB0ciA9IFNIUjMyKFNVQjMyKE1VTFQxNl8xNihGb3V0Mi0+ciAsIHR3MS0+ciksTVVMVDE2XzE2KEZvdXQyLT5pICwgdHcxLT5pKSksIDEpOworICAgICAgICAgICAgIHRpID0gU0hSMzIoQUREMzIoTVVMVDE2XzE2KEZvdXQyLT5pICwgdHcxLT5yKSxNVUxUMTZfMTYoRm91dDItPnIgLCB0dzEtPmkpKSwgMSk7CisgICAgICAgICAgICAgdHcxICs9IGZzdHJpZGU7CisgICAgICAgICAgICAgRm91dDItPnIgPSBQU0hSMzIoU1VCMzIoU0hMMzIoRVhURU5EMzIoRm91dC0+ciksIDE0KSwgdHIpLCAxNSk7CisgICAgICAgICAgICAgRm91dDItPmkgPSBQU0hSMzIoU1VCMzIoU0hMMzIoRVhURU5EMzIoRm91dC0+aSksIDE0KSwgdGkpLCAxNSk7CisgICAgICAgICAgICAgRm91dC0+ciA9IFBTSFIzMihBREQzMihTSEwzMihFWFRFTkQzMihGb3V0LT5yKSwgMTQpLCB0ciksIDE1KTsKKyAgICAgICAgICAgICBGb3V0LT5pID0gUFNIUjMyKEFERDMyKFNITDMyKEVYVEVORDMyKEZvdXQtPmkpLCAxNCksIHRpKSwgMTUpOworICAgICAgICAgICAgICsrRm91dDI7CisgICAgICAgICAgICAgKytGb3V0OworICAgICAgICAgIH0KKyAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICBpbnQgaSxqOworICAgICAgIGtpc3NfZmZ0X2NweCAqIEZvdXRfYmVnID0gRm91dDsKKyAgICAgICBmb3IgKGk9MDtpPE47aSsrKQorICAgICAgIHsKKyAgICAgICAgICBGb3V0ID0gRm91dF9iZWcgKyBpKm1tOworICAgICAgICAgIEZvdXQyID0gRm91dCArIG07CisgICAgICAgICAgdHcxID0gc3QtPnR3aWRkbGVzOworICAgICAgICAgIGZvcihqPTA7ajxtO2orKykKKyAgICAgICAgICB7CisgICAgICAgICAgICAgQ19NVUwgKHQsICAqRm91dDIgLCAqdHcxKTsKKyAgICAgICAgICAgICB0dzEgKz0gZnN0cmlkZTsKKyAgICAgICAgICAgICBDX1NVQiggKkZvdXQyICwgICpGb3V0ICwgdCApOworICAgICAgICAgICAgIENfQUREVE8oICpGb3V0ICwgIHQgKTsKKyAgICAgICAgICAgICArK0ZvdXQyOworICAgICAgICAgICAgICsrRm91dDsKKyAgICAgICAgICB9CisgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQga2ZfYmZseTQoCisgICAgICAgIGtpc3NfZmZ0X2NweCAqIEZvdXQsCisgICAgICAgIGNvbnN0IHNpemVfdCBmc3RyaWRlLAorICAgICAgICBjb25zdCBraXNzX2ZmdF9jZmcgc3QsCisgICAgICAgIGNvbnN0IHNpemVfdCBtLAorICAgICAgICBpbnQgTiwKKyAgICAgICAgaW50IG1tCisgICAgICAgICkKK3sKKyAgICBraXNzX2ZmdF9jcHggKnR3MSwqdHcyLCp0dzM7CisgICAga2lzc19mZnRfY3B4IHNjcmF0Y2hbNl07CisgICAgY29uc3Qgc2l6ZV90IG0yPTIqbTsKKyAgICBjb25zdCBzaXplX3QgbTM9MyptOworICAgIGludCBpLCBqOworCisgICAgaWYgKHN0LT5pbnZlcnNlKQorICAgIHsKKyAgICAgICBraXNzX2ZmdF9jcHggKiBGb3V0X2JlZyA9IEZvdXQ7CisgICAgICAgZm9yIChpPTA7aTxOO2krKykKKyAgICAgICB7CisgICAgICAgICAgRm91dCA9IEZvdXRfYmVnICsgaSptbTsKKyAgICAgICAgICB0dzMgPSB0dzIgPSB0dzEgPSBzdC0+dHdpZGRsZXM7CisgICAgICAgICAgZm9yIChqPTA7ajxtO2orKykKKyAgICAgICAgICB7CisgICAgICAgICAgICAgQ19NVUwoc2NyYXRjaFswXSxGb3V0W21dICwgKnR3MSApOworICAgICAgICAgICAgIENfTVVMKHNjcmF0Y2hbMV0sRm91dFttMl0gLCAqdHcyICk7CisgICAgICAgICAgICAgQ19NVUwoc2NyYXRjaFsyXSxGb3V0W20zXSAsICp0dzMgKTsKKyAgICAgICAgICAgICAKKyAgICAgICAgICAgICBDX1NVQiggc2NyYXRjaFs1XSAsICpGb3V0LCBzY3JhdGNoWzFdICk7CisgICAgICAgICAgICAgQ19BRERUTygqRm91dCwgc2NyYXRjaFsxXSk7CisgICAgICAgICAgICAgQ19BREQoIHNjcmF0Y2hbM10gLCBzY3JhdGNoWzBdICwgc2NyYXRjaFsyXSApOworICAgICAgICAgICAgIENfU1VCKCBzY3JhdGNoWzRdICwgc2NyYXRjaFswXSAsIHNjcmF0Y2hbMl0gKTsKKyAgICAgICAgICAgICBDX1NVQiggRm91dFttMl0sICpGb3V0LCBzY3JhdGNoWzNdICk7CisgICAgICAgICAgICAgdHcxICs9IGZzdHJpZGU7CisgICAgICAgICAgICAgdHcyICs9IGZzdHJpZGUqMjsKKyAgICAgICAgICAgICB0dzMgKz0gZnN0cmlkZSozOworICAgICAgICAgICAgIENfQUREVE8oICpGb3V0ICwgc2NyYXRjaFszXSApOworICAgICAgICAgICAgIAorICAgICAgICAgICAgIEZvdXRbbV0uciA9IHNjcmF0Y2hbNV0uciAtIHNjcmF0Y2hbNF0uaTsKKyAgICAgICAgICAgICBGb3V0W21dLmkgPSBzY3JhdGNoWzVdLmkgKyBzY3JhdGNoWzRdLnI7CisgICAgICAgICAgICAgRm91dFttM10uciA9IHNjcmF0Y2hbNV0uciArIHNjcmF0Y2hbNF0uaTsKKyAgICAgICAgICAgICBGb3V0W20zXS5pID0gc2NyYXRjaFs1XS5pIC0gc2NyYXRjaFs0XS5yOworICAgICAgICAgICAgICsrRm91dDsKKyAgICAgICAgICB9CisgICAgICAgfQorICAgIH0gZWxzZQorICAgIHsKKyAgICAgICBraXNzX2ZmdF9jcHggKiBGb3V0X2JlZyA9IEZvdXQ7CisgICAgICAgZm9yIChpPTA7aTxOO2krKykKKyAgICAgICB7CisgICAgICAgICAgRm91dCA9IEZvdXRfYmVnICsgaSptbTsKKyAgICAgICAgICB0dzMgPSB0dzIgPSB0dzEgPSBzdC0+dHdpZGRsZXM7CisgICAgICAgICAgZm9yIChqPTA7ajxtO2orKykKKyAgICAgICAgICB7CisgICAgICAgICAgICAgQ19NVUw0KHNjcmF0Y2hbMF0sRm91dFttXSAsICp0dzEgKTsKKyAgICAgICAgICAgICBDX01VTDQoc2NyYXRjaFsxXSxGb3V0W20yXSAsICp0dzIgKTsKKyAgICAgICAgICAgICBDX01VTDQoc2NyYXRjaFsyXSxGb3V0W20zXSAsICp0dzMgKTsKKyAgICAgICAgICAgICAKKyAgICAgICAgICAgICBGb3V0LT5yID0gUFNIUjE2KEZvdXQtPnIsIDIpOworICAgICAgICAgICAgIEZvdXQtPmkgPSBQU0hSMTYoRm91dC0+aSwgMik7CisgICAgICAgICAgICAgQ19TVUIoIHNjcmF0Y2hbNV0gLCAqRm91dCwgc2NyYXRjaFsxXSApOworICAgICAgICAgICAgIENfQUREVE8oKkZvdXQsIHNjcmF0Y2hbMV0pOworICAgICAgICAgICAgIENfQUREKCBzY3JhdGNoWzNdICwgc2NyYXRjaFswXSAsIHNjcmF0Y2hbMl0gKTsKKyAgICAgICAgICAgICBDX1NVQiggc2NyYXRjaFs0XSAsIHNjcmF0Y2hbMF0gLCBzY3JhdGNoWzJdICk7CisgICAgICAgICAgICAgRm91dFttMl0uciA9IFBTSFIxNihGb3V0W20yXS5yLCAyKTsKKyAgICAgICAgICAgICBGb3V0W20yXS5pID0gUFNIUjE2KEZvdXRbbTJdLmksIDIpOworICAgICAgICAgICAgIENfU1VCKCBGb3V0W20yXSwgKkZvdXQsIHNjcmF0Y2hbM10gKTsKKyAgICAgICAgICAgICB0dzEgKz0gZnN0cmlkZTsKKyAgICAgICAgICAgICB0dzIgKz0gZnN0cmlkZSoyOworICAgICAgICAgICAgIHR3MyArPSBmc3RyaWRlKjM7CisgICAgICAgICAgICAgQ19BRERUTyggKkZvdXQgLCBzY3JhdGNoWzNdICk7CisgICAgICAgICAgICAgCisgICAgICAgICAgICAgRm91dFttXS5yID0gc2NyYXRjaFs1XS5yICsgc2NyYXRjaFs0XS5pOworICAgICAgICAgICAgIEZvdXRbbV0uaSA9IHNjcmF0Y2hbNV0uaSAtIHNjcmF0Y2hbNF0ucjsKKyAgICAgICAgICAgICBGb3V0W20zXS5yID0gc2NyYXRjaFs1XS5yIC0gc2NyYXRjaFs0XS5pOworICAgICAgICAgICAgIEZvdXRbbTNdLmkgPSBzY3JhdGNoWzVdLmkgKyBzY3JhdGNoWzRdLnI7CisgICAgICAgICAgICAgKytGb3V0OworICAgICAgICAgIH0KKyAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBrZl9iZmx5MygKKyAgICAgICAgIGtpc3NfZmZ0X2NweCAqIEZvdXQsCisgICAgICAgICBjb25zdCBzaXplX3QgZnN0cmlkZSwKKyAgICAgICAgIGNvbnN0IGtpc3NfZmZ0X2NmZyBzdCwKKyAgICAgICAgIHNpemVfdCBtCisgICAgICAgICApCit7CisgICAgIHNpemVfdCBrPW07CisgICAgIGNvbnN0IHNpemVfdCBtMiA9IDIqbTsKKyAgICAga2lzc19mZnRfY3B4ICp0dzEsKnR3MjsKKyAgICAga2lzc19mZnRfY3B4IHNjcmF0Y2hbNV07CisgICAgIGtpc3NfZmZ0X2NweCBlcGkzOworICAgICBlcGkzID0gc3QtPnR3aWRkbGVzW2ZzdHJpZGUqbV07CisKKyAgICAgdHcxPXR3Mj1zdC0+dHdpZGRsZXM7CisKKyAgICAgZG97CisgICAgICAgIGlmICghc3QtPmludmVyc2UpIHsKKyAgICAgICAgIENfRklYRElWKCpGb3V0LDMpOyBDX0ZJWERJVihGb3V0W21dLDMpOyBDX0ZJWERJVihGb3V0W20yXSwzKTsKKwl9CisKKyAgICAgICAgIENfTVVMKHNjcmF0Y2hbMV0sRm91dFttXSAsICp0dzEpOworICAgICAgICAgQ19NVUwoc2NyYXRjaFsyXSxGb3V0W20yXSAsICp0dzIpOworCisgICAgICAgICBDX0FERChzY3JhdGNoWzNdLHNjcmF0Y2hbMV0sc2NyYXRjaFsyXSk7CisgICAgICAgICBDX1NVQihzY3JhdGNoWzBdLHNjcmF0Y2hbMV0sc2NyYXRjaFsyXSk7CisgICAgICAgICB0dzEgKz0gZnN0cmlkZTsKKyAgICAgICAgIHR3MiArPSBmc3RyaWRlKjI7CisKKyAgICAgICAgIEZvdXRbbV0uciA9IEZvdXQtPnIgLSBIQUxGX09GKHNjcmF0Y2hbM10ucik7CisgICAgICAgICBGb3V0W21dLmkgPSBGb3V0LT5pIC0gSEFMRl9PRihzY3JhdGNoWzNdLmkpOworCisgICAgICAgICBDX01VTEJZU0NBTEFSKCBzY3JhdGNoWzBdICwgZXBpMy5pICk7CisKKyAgICAgICAgIENfQUREVE8oKkZvdXQsc2NyYXRjaFszXSk7CisKKyAgICAgICAgIEZvdXRbbTJdLnIgPSBGb3V0W21dLnIgKyBzY3JhdGNoWzBdLmk7CisgICAgICAgICBGb3V0W20yXS5pID0gRm91dFttXS5pIC0gc2NyYXRjaFswXS5yOworCisgICAgICAgICBGb3V0W21dLnIgLT0gc2NyYXRjaFswXS5pOworICAgICAgICAgRm91dFttXS5pICs9IHNjcmF0Y2hbMF0ucjsKKworICAgICAgICAgKytGb3V0OworICAgICB9d2hpbGUoLS1rKTsKK30KKworc3RhdGljIHZvaWQga2ZfYmZseTUoCisgICAgICAgIGtpc3NfZmZ0X2NweCAqIEZvdXQsCisgICAgICAgIGNvbnN0IHNpemVfdCBmc3RyaWRlLAorICAgICAgICBjb25zdCBraXNzX2ZmdF9jZmcgc3QsCisgICAgICAgIGludCBtCisgICAgICAgICkKK3sKKyAgICBraXNzX2ZmdF9jcHggKkZvdXQwLCpGb3V0MSwqRm91dDIsKkZvdXQzLCpGb3V0NDsKKyAgICBpbnQgdTsKKyAgICBraXNzX2ZmdF9jcHggc2NyYXRjaFsxM107CisgICAga2lzc19mZnRfY3B4ICogdHdpZGRsZXMgPSBzdC0+dHdpZGRsZXM7CisgICAga2lzc19mZnRfY3B4ICp0dzsKKyAgICBraXNzX2ZmdF9jcHggeWEseWI7CisgICAgeWEgPSB0d2lkZGxlc1tmc3RyaWRlKm1dOworICAgIHliID0gdHdpZGRsZXNbZnN0cmlkZSoyKm1dOworCisgICAgRm91dDA9Rm91dDsKKyAgICBGb3V0MT1Gb3V0MCttOworICAgIEZvdXQyPUZvdXQwKzIqbTsKKyAgICBGb3V0Mz1Gb3V0MCszKm07CisgICAgRm91dDQ9Rm91dDArNCptOworCisgICAgdHc9c3QtPnR3aWRkbGVzOworICAgIGZvciAoIHU9MDsgdTxtOyArK3UgKSB7CisgICAgICAgIGlmICghc3QtPmludmVyc2UpIHsKKyAgICAgICAgQ19GSVhESVYoICpGb3V0MCw1KTsgQ19GSVhESVYoICpGb3V0MSw1KTsgQ19GSVhESVYoICpGb3V0Miw1KTsgQ19GSVhESVYoICpGb3V0Myw1KTsgQ19GSVhESVYoICpGb3V0NCw1KTsKKwl9CisgICAgICAgIHNjcmF0Y2hbMF0gPSAqRm91dDA7CisKKyAgICAgICAgQ19NVUwoc2NyYXRjaFsxXSAsKkZvdXQxLCB0d1t1KmZzdHJpZGVdKTsKKyAgICAgICAgQ19NVUwoc2NyYXRjaFsyXSAsKkZvdXQyLCB0d1syKnUqZnN0cmlkZV0pOworICAgICAgICBDX01VTChzY3JhdGNoWzNdICwqRm91dDMsIHR3WzMqdSpmc3RyaWRlXSk7CisgICAgICAgIENfTVVMKHNjcmF0Y2hbNF0gLCpGb3V0NCwgdHdbNCp1KmZzdHJpZGVdKTsKKworICAgICAgICBDX0FERCggc2NyYXRjaFs3XSxzY3JhdGNoWzFdLHNjcmF0Y2hbNF0pOworICAgICAgICBDX1NVQiggc2NyYXRjaFsxMF0sc2NyYXRjaFsxXSxzY3JhdGNoWzRdKTsKKyAgICAgICAgQ19BREQoIHNjcmF0Y2hbOF0sc2NyYXRjaFsyXSxzY3JhdGNoWzNdKTsKKyAgICAgICAgQ19TVUIoIHNjcmF0Y2hbOV0sc2NyYXRjaFsyXSxzY3JhdGNoWzNdKTsKKworICAgICAgICBGb3V0MC0+ciArPSBzY3JhdGNoWzddLnIgKyBzY3JhdGNoWzhdLnI7CisgICAgICAgIEZvdXQwLT5pICs9IHNjcmF0Y2hbN10uaSArIHNjcmF0Y2hbOF0uaTsKKworICAgICAgICBzY3JhdGNoWzVdLnIgPSBzY3JhdGNoWzBdLnIgKyBTX01VTChzY3JhdGNoWzddLnIseWEucikgKyBTX01VTChzY3JhdGNoWzhdLnIseWIucik7CisgICAgICAgIHNjcmF0Y2hbNV0uaSA9IHNjcmF0Y2hbMF0uaSArIFNfTVVMKHNjcmF0Y2hbN10uaSx5YS5yKSArIFNfTVVMKHNjcmF0Y2hbOF0uaSx5Yi5yKTsKKworICAgICAgICBzY3JhdGNoWzZdLnIgPSAgU19NVUwoc2NyYXRjaFsxMF0uaSx5YS5pKSArIFNfTVVMKHNjcmF0Y2hbOV0uaSx5Yi5pKTsKKyAgICAgICAgc2NyYXRjaFs2XS5pID0gLVNfTVVMKHNjcmF0Y2hbMTBdLnIseWEuaSkgLSBTX01VTChzY3JhdGNoWzldLnIseWIuaSk7CisKKyAgICAgICAgQ19TVUIoKkZvdXQxLHNjcmF0Y2hbNV0sc2NyYXRjaFs2XSk7CisgICAgICAgIENfQUREKCpGb3V0NCxzY3JhdGNoWzVdLHNjcmF0Y2hbNl0pOworCisgICAgICAgIHNjcmF0Y2hbMTFdLnIgPSBzY3JhdGNoWzBdLnIgKyBTX01VTChzY3JhdGNoWzddLnIseWIucikgKyBTX01VTChzY3JhdGNoWzhdLnIseWEucik7CisgICAgICAgIHNjcmF0Y2hbMTFdLmkgPSBzY3JhdGNoWzBdLmkgKyBTX01VTChzY3JhdGNoWzddLmkseWIucikgKyBTX01VTChzY3JhdGNoWzhdLmkseWEucik7CisgICAgICAgIHNjcmF0Y2hbMTJdLnIgPSAtIFNfTVVMKHNjcmF0Y2hbMTBdLmkseWIuaSkgKyBTX01VTChzY3JhdGNoWzldLmkseWEuaSk7CisgICAgICAgIHNjcmF0Y2hbMTJdLmkgPSBTX01VTChzY3JhdGNoWzEwXS5yLHliLmkpIC0gU19NVUwoc2NyYXRjaFs5XS5yLHlhLmkpOworCisgICAgICAgIENfQUREKCpGb3V0MixzY3JhdGNoWzExXSxzY3JhdGNoWzEyXSk7CisgICAgICAgIENfU1VCKCpGb3V0MyxzY3JhdGNoWzExXSxzY3JhdGNoWzEyXSk7CisKKyAgICAgICAgKytGb3V0MDsrK0ZvdXQxOysrRm91dDI7KytGb3V0MzsrK0ZvdXQ0OworICAgIH0KK30KKworLyogcGVyZm9ybSB0aGUgYnV0dGVyZmx5IGZvciBvbmUgc3RhZ2Ugb2YgYSBtaXhlZCByYWRpeCBGRlQgKi8KK3N0YXRpYyB2b2lkIGtmX2JmbHlfZ2VuZXJpYygKKyAgICAgICAga2lzc19mZnRfY3B4ICogRm91dCwKKyAgICAgICAgY29uc3Qgc2l6ZV90IGZzdHJpZGUsCisgICAgICAgIGNvbnN0IGtpc3NfZmZ0X2NmZyBzdCwKKyAgICAgICAgaW50IG0sCisgICAgICAgIGludCBwCisgICAgICAgICkKK3sKKyAgICBpbnQgdSxrLHExLHE7CisgICAga2lzc19mZnRfY3B4ICogdHdpZGRsZXMgPSBzdC0+dHdpZGRsZXM7CisgICAga2lzc19mZnRfY3B4IHQ7CisgICAga2lzc19mZnRfY3B4IHNjcmF0Y2hidWZbMTddOworICAgIGludCBOb3JpZyA9IHN0LT5uZmZ0OworCisgICAgLypDSEVDS0JVRihzY3JhdGNoYnVmLG5zY3JhdGNoYnVmLHApOyovCisgICAgaWYgKHA+MTcpCisgICAgICAgc3BlZXhfZXJyb3IoIktpc3NGRlQ6IG1heCByYWRpeCBzdXBwb3J0ZWQgaXMgMTciKTsKKyAgICAKKyAgICBmb3IgKCB1PTA7IHU8bTsgKyt1ICkgeworICAgICAgICBrPXU7CisgICAgICAgIGZvciAoIHExPTAgOyBxMTxwIDsgKytxMSApIHsKKyAgICAgICAgICAgIHNjcmF0Y2hidWZbcTFdID0gRm91dFsgayAgXTsKKyAgICAgICAgaWYgKCFzdC0+aW52ZXJzZSkgeworICAgICAgICAgICAgQ19GSVhESVYoc2NyYXRjaGJ1ZltxMV0scCk7CisJfQorICAgICAgICAgICAgayArPSBtOworICAgICAgICB9CisKKyAgICAgICAgaz11OworICAgICAgICBmb3IgKCBxMT0wIDsgcTE8cCA7ICsrcTEgKSB7CisgICAgICAgICAgICBpbnQgdHdpZHg9MDsKKyAgICAgICAgICAgIEZvdXRbIGsgXSA9IHNjcmF0Y2hidWZbMF07CisgICAgICAgICAgICBmb3IgKHE9MTtxPHA7KytxICkgeworICAgICAgICAgICAgICAgIHR3aWR4ICs9IGZzdHJpZGUgKiBrOworICAgICAgICAgICAgICAgIGlmICh0d2lkeD49Tm9yaWcpIHR3aWR4LT1Ob3JpZzsKKyAgICAgICAgICAgICAgICBDX01VTCh0LHNjcmF0Y2hidWZbcV0gLCB0d2lkZGxlc1t0d2lkeF0gKTsKKyAgICAgICAgICAgICAgICBDX0FERFRPKCBGb3V0WyBrIF0gLHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgayArPSBtOworICAgICAgICB9CisgICAgfQorfQorICAgICAgICAgICAgICAgCitzdGF0aWMKK3ZvaWQga2Zfc2h1ZmZsZSgKKyAgICAgICAgIGtpc3NfZmZ0X2NweCAqIEZvdXQsCisgICAgICAgICBjb25zdCBraXNzX2ZmdF9jcHggKiBmLAorICAgICAgICAgY29uc3Qgc2l6ZV90IGZzdHJpZGUsCisgICAgICAgICBpbnQgaW5fc3RyaWRlLAorICAgICAgICAgaW50ICogZmFjdG9ycywKKyAgICAgICAgIGNvbnN0IGtpc3NfZmZ0X2NmZyBzdAorICAgICAgICAgICAgKQoreworICAgY29uc3QgaW50IHA9KmZhY3RvcnMrKzsgLyogdGhlIHJhZGl4ICAqLworICAgY29uc3QgaW50IG09KmZhY3RvcnMrKzsgLyogc3RhZ2UncyBmZnQgbGVuZ3RoL3AgKi8KKyAgIAorICAgIC8qcHJpbnRmICgiZmZ0ICVkICVkICVkICVkICVkICVkXG4iLCBwKm0sIG0sIHAsIHMyLCBmc3RyaWRlKmluX3N0cmlkZSwgTik7Ki8KKyAgIGlmIChtPT0xKQorICAgeworICAgICAgaW50IGo7CisgICAgICBmb3IgKGo9MDtqPHA7aisrKQorICAgICAgeworICAgICAgICAgRm91dFtqXSA9ICpmOworICAgICAgICAgZiArPSBmc3RyaWRlKmluX3N0cmlkZTsKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBpbnQgajsKKyAgICAgIGZvciAoaj0wO2o8cDtqKyspCisgICAgICB7CisgICAgICAgICBrZl9zaHVmZmxlKCBGb3V0ICwgZiwgZnN0cmlkZSpwLCBpbl9zdHJpZGUsIGZhY3RvcnMsc3QpOworICAgICAgICAgZiArPSBmc3RyaWRlKmluX3N0cmlkZTsKKyAgICAgICAgIEZvdXQgKz0gbTsKKyAgICAgIH0KKyAgIH0KK30KKworc3RhdGljCit2b2lkIGtmX3dvcmsoCisgICAgICAgIGtpc3NfZmZ0X2NweCAqIEZvdXQsCisgICAgICAgIGNvbnN0IGtpc3NfZmZ0X2NweCAqIGYsCisgICAgICAgIGNvbnN0IHNpemVfdCBmc3RyaWRlLAorICAgICAgICBpbnQgaW5fc3RyaWRlLAorICAgICAgICBpbnQgKiBmYWN0b3JzLAorICAgICAgICBjb25zdCBraXNzX2ZmdF9jZmcgc3QsCisgICAgICAgIGludCBOLAorICAgICAgICBpbnQgczIsCisgICAgICAgIGludCBtMgorICAgICAgICApCit7CisgICBpbnQgaTsKKyAgICBraXNzX2ZmdF9jcHggKiBGb3V0X2JlZz1Gb3V0OworICAgIGNvbnN0IGludCBwPSpmYWN0b3JzKys7IC8qIHRoZSByYWRpeCAgKi8KKyAgICBjb25zdCBpbnQgbT0qZmFjdG9ycysrOyAvKiBzdGFnZSdzIGZmdCBsZW5ndGgvcCAqLworI2lmIDAKKyAgICAvKnByaW50ZiAoImZmdCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwgcCptLCBtLCBwLCBzMiwgZnN0cmlkZSppbl9zdHJpZGUsIE4pOyovCisgICAgaWYgKG09PTEpCisgICAgeworICAgIC8qICAgaW50IGo7CisgICAgICAgZm9yIChqPTA7ajxwO2orKykKKyAgICAgICB7CisgICAgICAgICAgRm91dFtqXSA9ICpmOworICAgICAgICAgIGYgKz0gZnN0cmlkZSppbl9zdHJpZGU7CisgICAgICAgfSovCisgICAgfSBlbHNlIHsKKyAgICAgICBpbnQgajsKKyAgICAgICBmb3IgKGo9MDtqPHA7aisrKQorICAgICAgIHsKKyAgICAgICAgICBrZl93b3JrKCBGb3V0ICwgZiwgZnN0cmlkZSpwLCBpbl9zdHJpZGUsIGZhY3RvcnMsc3QsIE4qcCwgZnN0cmlkZSppbl9zdHJpZGUsIG0pOworICAgICAgICAgIGYgKz0gZnN0cmlkZSppbl9zdHJpZGU7CisgICAgICAgICAgRm91dCArPSBtOworICAgICAgIH0KKyAgICB9CisKKyAgICBGb3V0PUZvdXRfYmVnOworCisgICAgc3dpdGNoIChwKSB7CisgICAgICAgIGNhc2UgMjoga2ZfYmZseTIoRm91dCxmc3RyaWRlLHN0LG0pOyBicmVhazsKKyAgICAgICAgY2FzZSAzOiBrZl9iZmx5MyhGb3V0LGZzdHJpZGUsc3QsbSk7IGJyZWFrOyAKKyAgICAgICAgY2FzZSA0OiBrZl9iZmx5NChGb3V0LGZzdHJpZGUsc3QsbSk7IGJyZWFrOworICAgICAgICBjYXNlIDU6IGtmX2JmbHk1KEZvdXQsZnN0cmlkZSxzdCxtKTsgYnJlYWs7IAorICAgICAgICBkZWZhdWx0OiBrZl9iZmx5X2dlbmVyaWMoRm91dCxmc3RyaWRlLHN0LG0scCk7IGJyZWFrOworICAgIH0KKyNlbHNlCisgICAgLypwcmludGYgKCJmZnQgJWQgJWQgJWQgJWQgJWQgJWQgJWRcbiIsIHAqbSwgbSwgcCwgczIsIGZzdHJpZGUqaW5fc3RyaWRlLCBOLCBtMik7Ki8KKyAgICBpZiAobT09MSkgCisgICAgeworICAgICAgIC8qZm9yIChpPTA7aTxOO2krKykKKyAgICAgICB7CisgICAgICAgICAgaW50IGo7CisgICAgICAgICAgRm91dCA9IEZvdXRfYmVnK2kqbTI7CisgICAgICAgICAgY29uc3Qga2lzc19mZnRfY3B4ICogZjIgPSBmK2kqczI7CisgICAgICAgICAgZm9yIChqPTA7ajxwO2orKykKKyAgICAgICAgICB7CisgICAgICAgICAgICAgKkZvdXQrKyA9ICpmMjsKKyAgICAgICAgICAgICBmMiArPSBmc3RyaWRlKmluX3N0cmlkZTsKKyAgICAgICAgICB9CisgICAgICAgfSovCisgICAgfWVsc2V7CisgICAgICAga2Zfd29yayggRm91dCAsIGYsIGZzdHJpZGUqcCwgaW5fc3RyaWRlLCBmYWN0b3JzLHN0LCBOKnAsIGZzdHJpZGUqaW5fc3RyaWRlLCBtKTsKKyAgICB9CisKKyAgICAKKyAgICAgICAKKyAgICAgICAKKyAgICAgICBzd2l0Y2ggKHApIHsKKyAgICAgICAgICBjYXNlIDI6IGtmX2JmbHkyKEZvdXQsZnN0cmlkZSxzdCxtLCBOLCBtMik7IGJyZWFrOworICAgICAgICAgIGNhc2UgMzogZm9yIChpPTA7aTxOO2krKyl7Rm91dD1Gb3V0X2JlZytpKm0yOyBrZl9iZmx5MyhGb3V0LGZzdHJpZGUsc3QsbSk7fSBicmVhazsgCisgICAgICAgICAgY2FzZSA0OiBrZl9iZmx5NChGb3V0LGZzdHJpZGUsc3QsbSwgTiwgbTIpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDU6IGZvciAoaT0wO2k8TjtpKyspe0ZvdXQ9Rm91dF9iZWcraSptMjsga2ZfYmZseTUoRm91dCxmc3RyaWRlLHN0LG0pO30gYnJlYWs7IAorICAgICAgICAgIGRlZmF1bHQ6IGZvciAoaT0wO2k8TjtpKyspe0ZvdXQ9Rm91dF9iZWcraSptMjsga2ZfYmZseV9nZW5lcmljKEZvdXQsZnN0cmlkZSxzdCxtLHApO30gYnJlYWs7CisgICAgfSAgICAKKyNlbmRpZgorfQorCisvKiAgZmFjYnVmIGlzIHBvcHVsYXRlZCBieSBwMSxtMSxwMixtMiwgLi4uCisgICAgd2hlcmUgCisgICAgcFtpXSAqIG1baV0gPSBtW2ktMV0KKyAgICBtMCA9IG4gICAgICAgICAgICAgICAgICAqLworc3RhdGljIAordm9pZCBrZl9mYWN0b3IoaW50IG4saW50ICogZmFjYnVmKQoreworICAgIGludCBwPTQ7CisKKyAgICAvKmZhY3RvciBvdXQgcG93ZXJzIG9mIDQsIHBvd2VycyBvZiAyLCB0aGVuIGFueSByZW1haW5pbmcgcHJpbWVzICovCisgICAgZG8geworICAgICAgICB3aGlsZSAobiAlIHApIHsKKyAgICAgICAgICAgIHN3aXRjaCAocCkgeworICAgICAgICAgICAgICAgIGNhc2UgNDogcCA9IDI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogcCA9IDM7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHAgKz0gMjsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocD4zMjAwMCB8fCAoc3B4X2ludDMyX3QpcCooc3B4X2ludDMyX3QpcCA+IG4pCisgICAgICAgICAgICAgICAgcCA9IG47ICAgICAgICAgIC8qIG5vIG1vcmUgZmFjdG9ycywgc2tpcCB0byBlbmQgKi8KKyAgICAgICAgfQorICAgICAgICBuIC89IHA7CisgICAgICAgICpmYWNidWYrKyA9IHA7CisgICAgICAgICpmYWNidWYrKyA9IG47CisgICAgfSB3aGlsZSAobiA+IDEpOworfQorLyoKKyAqCisgKiBVc2VyLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGFsbG9jYXRlIGFsbCBuZWNlc3Nhcnkgc3RvcmFnZSBzcGFjZSBmb3IgdGhlIGZmdC4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgY29udGlndW91cyBibG9jayBvZiBtZW1vcnksIGFsbG9jYXRlZCB3aXRoIG1hbGxvYy4gIEFzIHN1Y2gsCisgKiBJdCBjYW4gYmUgZnJlZWQgd2l0aCBmcmVlKCksIHJhdGhlciB0aGFuIGEga2lzc19mZnQtc3BlY2lmaWMgZnVuY3Rpb24uCisgKiAqLwora2lzc19mZnRfY2ZnIGtpc3NfZmZ0X2FsbG9jKGludCBuZmZ0LGludCBpbnZlcnNlX2ZmdCx2b2lkICogbWVtLHNpemVfdCAqIGxlbm1lbSApCit7CisgICAga2lzc19mZnRfY2ZnIHN0PU5VTEw7CisgICAgc2l6ZV90IG1lbW5lZWRlZCA9IHNpemVvZihzdHJ1Y3Qga2lzc19mZnRfc3RhdGUpCisgICAgICAgICsgc2l6ZW9mKGtpc3NfZmZ0X2NweCkqKG5mZnQtMSk7IC8qIHR3aWRkbGUgZmFjdG9ycyovCisKKyAgICBpZiAoIGxlbm1lbT09TlVMTCApIHsKKyAgICAgICAgc3QgPSAoIGtpc3NfZmZ0X2NmZylLSVNTX0ZGVF9NQUxMT0MoIG1lbW5lZWRlZCApOworICAgIH1lbHNleworICAgICAgICBpZiAobWVtICE9IE5VTEwgJiYgKmxlbm1lbSA+PSBtZW1uZWVkZWQpCisgICAgICAgICAgICBzdCA9IChraXNzX2ZmdF9jZmcpbWVtOworICAgICAgICAqbGVubWVtID0gbWVtbmVlZGVkOworICAgIH0KKyAgICBpZiAoc3QpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIHN0LT5uZmZ0PW5mZnQ7CisgICAgICAgIHN0LT5pbnZlcnNlID0gaW52ZXJzZV9mZnQ7CisjaWZkZWYgRklYRURfUE9JTlQKKyAgICAgICAgZm9yIChpPTA7aTxuZmZ0OysraSkgeworICAgICAgICAgICAgc3B4X3dvcmQzMl90IHBoYXNlID0gaTsKKyAgICAgICAgICAgIGlmICghc3QtPmludmVyc2UpCisgICAgICAgICAgICAgICAgcGhhc2UgPSAtcGhhc2U7CisgICAgICAgICAgICBrZl9jZXhwMihzdC0+dHdpZGRsZXMraSwgRElWMzIoU0hMMzIocGhhc2UsMTcpLG5mZnQpKTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgZm9yIChpPTA7aTxuZmZ0OysraSkgeworICAgICAgICAgICBjb25zdCBkb3VibGUgcGk9My4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzsKKyAgICAgICAgICAgZG91YmxlIHBoYXNlID0gKCAtMipwaSAvbmZmdCApICogaTsKKyAgICAgICAgICAgaWYgKHN0LT5pbnZlcnNlKQorICAgICAgICAgICAgICBwaGFzZSAqPSAtMTsKKyAgICAgICAgICAga2ZfY2V4cChzdC0+dHdpZGRsZXMraSwgcGhhc2UgKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGtmX2ZhY3RvcihuZmZ0LHN0LT5mYWN0b3JzKTsKKyAgICB9CisgICAgcmV0dXJuIHN0OworfQorCisKKworICAgIAordm9pZCBraXNzX2ZmdF9zdHJpZGUoa2lzc19mZnRfY2ZnIHN0LGNvbnN0IGtpc3NfZmZ0X2NweCAqZmluLGtpc3NfZmZ0X2NweCAqZm91dCxpbnQgaW5fc3RyaWRlKQoreworICAgIGlmIChmaW4gPT0gZm91dCkgCisgICAgeworICAgICAgIHNwZWV4X2Vycm9yKCJJbi1wbGFjZSBGRlQgbm90IHN1cHBvcnRlZCIpOworICAgICAgIC8qQ0hFQ0tCVUYodG1wYnVmLG50bXBidWYsc3QtPm5mZnQpOworICAgICAgIGtmX3dvcmsodG1wYnVmLGZpbiwxLGluX3N0cmlkZSwgc3QtPmZhY3RvcnMsc3QpOworICAgICAgIHNwZWV4X21vdmUoZm91dCx0bXBidWYsc2l6ZW9mKGtpc3NfZmZ0X2NweCkqc3QtPm5mZnQpOyovCisgICAgfSBlbHNlIHsKKyAgICAgICBrZl9zaHVmZmxlKCBmb3V0LCBmaW4sIDEsaW5fc3RyaWRlLCBzdC0+ZmFjdG9ycyxzdCk7CisgICAgICAga2Zfd29yayggZm91dCwgZmluLCAxLGluX3N0cmlkZSwgc3QtPmZhY3RvcnMsc3QsIDEsIGluX3N0cmlkZSwgMSk7CisgICAgfQorfQorCit2b2lkIGtpc3NfZmZ0KGtpc3NfZmZ0X2NmZyBjZmcsY29uc3Qga2lzc19mZnRfY3B4ICpmaW4sa2lzc19mZnRfY3B4ICpmb3V0KQoreworICAgIGtpc3NfZmZ0X3N0cmlkZShjZmcsZmluLGZvdXQsMSk7Cit9CisKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2tpc3NfZmZ0LmggYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9raXNzX2ZmdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NjI3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9raXNzX2ZmdC5oCkBAIC0wLDAgKzEsMTA4IEBACisjaWZuZGVmIEtJU1NfRkZUX0gKKyNkZWZpbmUgS0lTU19GRlRfSAorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgIm1pc2MuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKgorIEFUVEVOVElPTiEKKyBJZiB5b3Ugd291bGQgbGlrZSBhIDoKKyAtLSBhIHV0aWxpdHkgdGhhdCB3aWxsIGhhbmRsZSB0aGUgY2FjaGluZyBvZiBmZnQgb2JqZWN0cworIC0tIHJlYWwtb25seSAobm8gaW1hZ2luYXJ5IHRpbWUgY29tcG9uZW50ICkgRkZUCisgLS0gYSBtdWx0aS1kaW1lbnNpb25hbCBGRlQKKyAtLSBhIGNvbW1hbmQtbGluZSB1dGlsaXR5IHRvIHBlcmZvcm0gZmZ0cworIC0tIGEgY29tbWFuZC1saW5lIHV0aWxpdHkgdG8gcGVyZm9ybSBmYXN0LWNvbnZvbHV0aW9uIGZpbHRlcmluZworCisgVGhlbiBzZWUga2ZjLmgga2lzc19mZnRyLmgga2lzc19mZnRuZC5oIGZmdHV0aWwuYyBraXNzX2Zhc3RmaXIuYworICBpbiB0aGUgdG9vbHMvIGRpcmVjdG9yeS4KKyovCisKKyNpZmRlZiBVU0VfU0lNRAorIyBpbmNsdWRlIDx4bW1pbnRyaW4uaD4KKyMgZGVmaW5lIGtpc3NfZmZ0X3NjYWxhciBfX20xMjgKKyNkZWZpbmUgS0lTU19GRlRfTUFMTE9DKG5ieXRlcykgbWVtYWxpZ24oMTYsbmJ5dGVzKQorI2Vsc2UJCisjZGVmaW5lIEtJU1NfRkZUX01BTExPQyBzcGVleF9hbGxvYworI2VuZGlmCQorCisKKyNpZmRlZiBGSVhFRF9QT0lOVAorI2luY2x1ZGUgIm1pc2MuaCIJCisjICBkZWZpbmUga2lzc19mZnRfc2NhbGFyIHNweF9pbnQxNl90CisjZWxzZQorIyBpZm5kZWYga2lzc19mZnRfc2NhbGFyCisvKiAgZGVmYXVsdCBpcyBmbG9hdCAqLworIyAgIGRlZmluZSBraXNzX2ZmdF9zY2FsYXIgZmxvYXQKKyMgZW5kaWYKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2lzc19mZnRfc2NhbGFyIHI7CisgICAga2lzc19mZnRfc2NhbGFyIGk7Cit9a2lzc19mZnRfY3B4OworCit0eXBlZGVmIHN0cnVjdCBraXNzX2ZmdF9zdGF0ZSoga2lzc19mZnRfY2ZnOworCisvKiAKKyAqICBraXNzX2ZmdF9hbGxvYworICogIAorICogIEluaXRpYWxpemUgYSBGRlQgKG9yIElGRlQpIGFsZ29yaXRobSdzIGNmZy9zdGF0ZSBidWZmZXIuCisgKgorICogIHR5cGljYWwgdXNhZ2U6ICAgICAga2lzc19mZnRfY2ZnIG15Y2ZnPWtpc3NfZmZ0X2FsbG9jKDEwMjQsMCxOVUxMLE5VTEwpOworICoKKyAqICBUaGUgcmV0dXJuIHZhbHVlIGZyb20gZmZ0X2FsbG9jIGlzIGEgY2ZnIGJ1ZmZlciB1c2VkIGludGVybmFsbHkKKyAqICBieSB0aGUgZmZ0IHJvdXRpbmUgb3IgTlVMTC4KKyAqCisgKiAgSWYgbGVubWVtIGlzIE5VTEwsIHRoZW4ga2lzc19mZnRfYWxsb2Mgd2lsbCBhbGxvY2F0ZSBhIGNmZyBidWZmZXIgdXNpbmcgbWFsbG9jLgorICogIFRoZSByZXR1cm5lZCB2YWx1ZSBzaG91bGQgYmUgZnJlZSgpZCB3aGVuIGRvbmUgdG8gYXZvaWQgbWVtb3J5IGxlYWtzLgorICogIAorICogIFRoZSBzdGF0ZSBjYW4gYmUgcGxhY2VkIGluIGEgdXNlciBzdXBwbGllZCBidWZmZXIgJ21lbSc6CisgKiAgSWYgbGVubWVtIGlzIG5vdCBOVUxMIGFuZCBtZW0gaXMgbm90IE5VTEwgYW5kICpsZW5tZW0gaXMgbGFyZ2UgZW5vdWdoLAorICogICAgICB0aGVuIHRoZSBmdW5jdGlvbiBwbGFjZXMgdGhlIGNmZyBpbiBtZW0gYW5kIHRoZSBzaXplIHVzZWQgaW4gKmxlbm1lbQorICogICAgICBhbmQgcmV0dXJucyBtZW0uCisgKiAgCisgKiAgSWYgbGVubWVtIGlzIG5vdCBOVUxMIGFuZCAoIG1lbSBpcyBOVUxMIG9yICpsZW5tZW0gaXMgbm90IGxhcmdlIGVub3VnaCksCisgKiAgICAgIHRoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgTlVMTCBhbmQgcGxhY2VzIHRoZSBtaW5pbXVtIGNmZyAKKyAqICAgICAgYnVmZmVyIHNpemUgaW4gKmxlbm1lbS4KKyAqICovCisKK2tpc3NfZmZ0X2NmZyBraXNzX2ZmdF9hbGxvYyhpbnQgbmZmdCxpbnQgaW52ZXJzZV9mZnQsdm9pZCAqIG1lbSxzaXplX3QgKiBsZW5tZW0pOyAKKworLyoKKyAqIGtpc3NfZmZ0KGNmZyxpbl9vdXRfYnVmKQorICoKKyAqIFBlcmZvcm0gYW4gRkZUIG9uIGEgY29tcGxleCBpbnB1dCBidWZmZXIuCisgKiBmb3IgYSBmb3J3YXJkIEZGVCwKKyAqIGZpbiBzaG91bGQgYmUgIGZbMF0gLCBmWzFdICwgLi4uICxmW25mZnQtMV0KKyAqIGZvdXQgd2lsbCBiZSAgIEZbMF0gLCBGWzFdICwgLi4uICxGW25mZnQtMV0KKyAqIE5vdGUgdGhhdCBlYWNoIGVsZW1lbnQgaXMgY29tcGxleCBhbmQgY2FuIGJlIGFjY2Vzc2VkIGxpa2UKKyAgICBmW2tdLnIgYW5kIGZba10uaQorICogKi8KK3ZvaWQga2lzc19mZnQoa2lzc19mZnRfY2ZnIGNmZyxjb25zdCBraXNzX2ZmdF9jcHggKmZpbixraXNzX2ZmdF9jcHggKmZvdXQpOworCisvKgorIEEgbW9yZSBnZW5lcmljIHZlcnNpb24gb2YgdGhlIGFib3ZlIGZ1bmN0aW9uLiBJdCByZWFkcyBpdHMgaW5wdXQgZnJvbSBldmVyeSBOdGggc2FtcGxlLgorICogKi8KK3ZvaWQga2lzc19mZnRfc3RyaWRlKGtpc3NfZmZ0X2NmZyBjZmcsY29uc3Qga2lzc19mZnRfY3B4ICpmaW4sa2lzc19mZnRfY3B4ICpmb3V0LGludCBmaW5fc3RyaWRlKTsKKworLyogSWYga2lzc19mZnRfYWxsb2MgYWxsb2NhdGVkIGEgYnVmZmVyLCBpdCBpcyBvbmUgY29udGlndW91cyAKKyAgIGJ1ZmZlciBhbmQgY2FuIGJlIHNpbXBseSBmcmVlKClkIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZCovCisjZGVmaW5lIGtpc3NfZmZ0X2ZyZWUgc3BlZXhfZnJlZQorCisvKgorIENsZWFucyB1cCBzb21lIG1lbW9yeSB0aGF0IGdldHMgbWFuYWdlZCBpbnRlcm5hbGx5LiBOb3QgbmVjZXNzYXJ5IHRvIGNhbGwsIGJ1dCBpdCBtaWdodCBjbGVhbiB1cCAKKyB5b3VyIGNvbXBpbGVyIG91dHB1dCB0byBjYWxsIHRoaXMgYmVmb3JlIHlvdSBleGl0LgorKi8KK3ZvaWQga2lzc19mZnRfY2xlYW51cCh2b2lkKTsKKwkKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgva2lzc19mZnRyLmMgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9raXNzX2ZmdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTI5NDVjCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgva2lzc19mZnRyLmMKQEAgLTAsMCArMSwyOTYgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNCwgTWFyayBCb3JnZXJkaW5nCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgImtpc3NfZmZ0ci5oIgorI2luY2x1ZGUgIl9raXNzX2ZmdF9ndXRzLmgiCisKK3N0cnVjdCBraXNzX2ZmdHJfc3RhdGV7CisgICAga2lzc19mZnRfY2ZnIHN1YnN0YXRlOworICAgIGtpc3NfZmZ0X2NweCAqIHRtcGJ1ZjsKKyAgICBraXNzX2ZmdF9jcHggKiBzdXBlcl90d2lkZGxlczsKKyNpZmRlZiBVU0VfU0lNRCAgICAKKyAgICBsb25nIHBhZDsKKyNlbmRpZiAgICAKK307CisKK2tpc3NfZmZ0cl9jZmcga2lzc19mZnRyX2FsbG9jKGludCBuZmZ0LGludCBpbnZlcnNlX2ZmdCx2b2lkICogbWVtLHNpemVfdCAqIGxlbm1lbSkKK3sKKyAgICBpbnQgaTsKKyAgICBraXNzX2ZmdHJfY2ZnIHN0ID0gTlVMTDsKKyAgICBzaXplX3Qgc3Vic2l6ZSwgbWVtbmVlZGVkOworCisgICAgaWYgKG5mZnQgJiAxKSB7CisgICAgICAgIHNwZWV4X3dhcm5pbmcoIlJlYWwgRkZUIG9wdGltaXphdGlvbiBtdXN0IGJlIGV2ZW4uXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG5mZnQgPj49IDE7CisKKyAgICBraXNzX2ZmdF9hbGxvYyAobmZmdCwgaW52ZXJzZV9mZnQsIE5VTEwsICZzdWJzaXplKTsKKyAgICBtZW1uZWVkZWQgPSBzaXplb2Yoc3RydWN0IGtpc3NfZmZ0cl9zdGF0ZSkgKyBzdWJzaXplICsgc2l6ZW9mKGtpc3NfZmZ0X2NweCkgKiAoIG5mZnQgKiAyKTsKKworICAgIGlmIChsZW5tZW0gPT0gTlVMTCkgeworICAgICAgICBzdCA9IChraXNzX2ZmdHJfY2ZnKSBLSVNTX0ZGVF9NQUxMT0MgKG1lbW5lZWRlZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCpsZW5tZW0gPj0gbWVtbmVlZGVkKQorICAgICAgICAgICAgc3QgPSAoa2lzc19mZnRyX2NmZykgbWVtOworICAgICAgICAqbGVubWVtID0gbWVtbmVlZGVkOworICAgIH0KKyAgICBpZiAoIXN0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHN0LT5zdWJzdGF0ZSA9IChraXNzX2ZmdF9jZmcpIChzdCArIDEpOyAvKmp1c3QgYmV5b25kIGtpc3NfZmZ0cl9zdGF0ZSBzdHJ1Y3QgKi8KKyAgICBzdC0+dG1wYnVmID0gKGtpc3NfZmZ0X2NweCAqKSAoKChjaGFyICopIHN0LT5zdWJzdGF0ZSkgKyBzdWJzaXplKTsKKyAgICBzdC0+c3VwZXJfdHdpZGRsZXMgPSBzdC0+dG1wYnVmICsgbmZmdDsKKyAgICBraXNzX2ZmdF9hbGxvYyhuZmZ0LCBpbnZlcnNlX2ZmdCwgc3QtPnN1YnN0YXRlLCAmc3Vic2l6ZSk7CisKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgIGZvciAoaT0wO2k8bmZmdDsrK2kpIHsKKyAgICAgICBzcHhfd29yZDMyX3QgcGhhc2UgPSBpKyhuZmZ0Pj4xKTsKKyAgICAgICBpZiAoIWludmVyc2VfZmZ0KQorICAgICAgICAgIHBoYXNlID0gLXBoYXNlOworICAgICAgIGtmX2NleHAyKHN0LT5zdXBlcl90d2lkZGxlcytpLCBESVYzMihTSEwzMihwaGFzZSwxNiksbmZmdCkpOworICAgIH0KKyNlbHNlCisgICAgZm9yIChpPTA7aTxuZmZ0OysraSkgeworICAgICAgIGNvbnN0IGRvdWJsZSBwaT0zLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OworICAgICAgIGRvdWJsZSBwaGFzZSA9IHBpKigoKGRvdWJsZSlpKSAvbmZmdCArIC41KTsKKyAgICAgICBpZiAoIWludmVyc2VfZmZ0KQorICAgICAgICAgIHBoYXNlID0gLXBoYXNlOworICAgICAgIGtmX2NleHAoc3QtPnN1cGVyX3R3aWRkbGVzK2ksIHBoYXNlICk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHN0OworfQorCit2b2lkIGtpc3NfZmZ0cihraXNzX2ZmdHJfY2ZnIHN0LGNvbnN0IGtpc3NfZmZ0X3NjYWxhciAqdGltZWRhdGEsa2lzc19mZnRfY3B4ICpmcmVxZGF0YSkKK3sKKyAgICAvKiBpbnB1dCBidWZmZXIgdGltZWRhdGEgaXMgc3RvcmVkIHJvdy13aXNlICovCisgICAgaW50IGssbmNmZnQ7CisgICAga2lzc19mZnRfY3B4IGZwbmssZnBrLGYxayxmMmssdHcsdGRjOworCisgICAgaWYgKCBzdC0+c3Vic3RhdGUtPmludmVyc2UpIHsKKyAgICAgICAgc3BlZXhfZXJyb3IoImtpc3MgZmZ0IHVzYWdlIGVycm9yOiBpbXByb3BlciBhbGxvY1xuIik7CisgICAgfQorCisgICAgbmNmZnQgPSBzdC0+c3Vic3RhdGUtPm5mZnQ7CisKKyAgICAvKnBlcmZvcm0gdGhlIHBhcmFsbGVsIGZmdCBvZiB0d28gcmVhbCBzaWduYWxzIHBhY2tlZCBpbiByZWFsLGltYWcqLworICAgIGtpc3NfZmZ0KCBzdC0+c3Vic3RhdGUgLCAoY29uc3Qga2lzc19mZnRfY3B4Kil0aW1lZGF0YSwgc3QtPnRtcGJ1ZiApOworICAgIC8qIFRoZSByZWFsIHBhcnQgb2YgdGhlIERDIGVsZW1lbnQgb2YgdGhlIGZyZXF1ZW5jeSBzcGVjdHJ1bSBpbiBzdC0+dG1wYnVmCisgICAgICogY29udGFpbnMgdGhlIHN1bSBvZiB0aGUgZXZlbi1udW1iZXJlZCBlbGVtZW50cyBvZiB0aGUgaW5wdXQgdGltZSBzZXF1ZW5jZQorICAgICAqIFRoZSBpbWFnIHBhcnQgaXMgdGhlIHN1bSBvZiB0aGUgb2RkLW51bWJlcmVkIGVsZW1lbnRzCisgICAgICoKKyAgICAgKiBUaGUgc3VtIG9mIHRkYy5yIGFuZCB0ZGMuaSBpcyB0aGUgc3VtIG9mIHRoZSBpbnB1dCB0aW1lIHNlcXVlbmNlLiAKKyAgICAgKiAgICAgIHlpZWxkaW5nIERDIG9mIGlucHV0IHRpbWUgc2VxdWVuY2UKKyAgICAgKiBUaGUgZGlmZmVyZW5jZSBvZiB0ZGMuciAtIHRkYy5pIGlzIHRoZSBzdW0gb2YgdGhlIGlucHV0IChkb3QgcHJvZHVjdCkgWzEsLTEsMSwtMS4uLiAKKyAgICAgKiAgICAgIHlpZWxkaW5nIE55cXVpc3QgYmluIG9mIGlucHV0IHRpbWUgc2VxdWVuY2UKKyAgICAgKi8KKyAKKyAgICB0ZGMuciA9IHN0LT50bXBidWZbMF0ucjsKKyAgICB0ZGMuaSA9IHN0LT50bXBidWZbMF0uaTsKKyAgICBDX0ZJWERJVih0ZGMsMik7CisgICAgQ0hFQ0tfT1ZFUkZMT1dfT1AodGRjLnIgLCssIHRkYy5pKTsKKyAgICBDSEVDS19PVkVSRkxPV19PUCh0ZGMuciAsLSwgdGRjLmkpOworICAgIGZyZXFkYXRhWzBdLnIgPSB0ZGMuciArIHRkYy5pOworICAgIGZyZXFkYXRhW25jZmZ0XS5yID0gdGRjLnIgLSB0ZGMuaTsKKyNpZmRlZiBVU0VfU0lNRCAgICAKKyAgICBmcmVxZGF0YVtuY2ZmdF0uaSA9IGZyZXFkYXRhWzBdLmkgPSBfbW1fc2V0MV9wcygwKTsKKyNlbHNlCisgICAgZnJlcWRhdGFbbmNmZnRdLmkgPSBmcmVxZGF0YVswXS5pID0gMDsKKyNlbmRpZgorCisgICAgZm9yICggaz0xO2sgPD0gbmNmZnQvMiA7ICsrayApIHsKKyAgICAgICAgZnBrICAgID0gc3QtPnRtcGJ1ZltrXTsgCisgICAgICAgIGZwbmsuciA9ICAgc3QtPnRtcGJ1ZltuY2ZmdC1rXS5yOworICAgICAgICBmcG5rLmkgPSAtIHN0LT50bXBidWZbbmNmZnQta10uaTsKKyAgICAgICAgQ19GSVhESVYoZnBrLDIpOworICAgICAgICBDX0ZJWERJVihmcG5rLDIpOworCisgICAgICAgIENfQUREKCBmMWssIGZwayAsIGZwbmsgKTsKKyAgICAgICAgQ19TVUIoIGYyaywgZnBrICwgZnBuayApOworICAgICAgICBDX01VTCggdHcgLCBmMmsgLCBzdC0+c3VwZXJfdHdpZGRsZXNba10pOworCisgICAgICAgIGZyZXFkYXRhW2tdLnIgPSBIQUxGX09GKGYxay5yICsgdHcucik7CisgICAgICAgIGZyZXFkYXRhW2tdLmkgPSBIQUxGX09GKGYxay5pICsgdHcuaSk7CisgICAgICAgIGZyZXFkYXRhW25jZmZ0LWtdLnIgPSBIQUxGX09GKGYxay5yIC0gdHcucik7CisgICAgICAgIGZyZXFkYXRhW25jZmZ0LWtdLmkgPSBIQUxGX09GKHR3LmkgLSBmMWsuaSk7CisgICAgfQorfQorCit2b2lkIGtpc3NfZmZ0cmkoa2lzc19mZnRyX2NmZyBzdCxjb25zdCBraXNzX2ZmdF9jcHggKmZyZXFkYXRhLCBraXNzX2ZmdF9zY2FsYXIgKnRpbWVkYXRhKQoreworICAgIC8qIGlucHV0IGJ1ZmZlciB0aW1lZGF0YSBpcyBzdG9yZWQgcm93LXdpc2UgKi8KKyAgICBpbnQgaywgbmNmZnQ7CisKKyAgICBpZiAoc3QtPnN1YnN0YXRlLT5pbnZlcnNlID09IDApIHsKKyAgICAgICAgc3BlZXhfZXJyb3IgKCJraXNzIGZmdCB1c2FnZSBlcnJvcjogaW1wcm9wZXIgYWxsb2NcbiIpOworICAgIH0KKworICAgIG5jZmZ0ID0gc3QtPnN1YnN0YXRlLT5uZmZ0OworCisgICAgc3QtPnRtcGJ1ZlswXS5yID0gZnJlcWRhdGFbMF0uciArIGZyZXFkYXRhW25jZmZ0XS5yOworICAgIHN0LT50bXBidWZbMF0uaSA9IGZyZXFkYXRhWzBdLnIgLSBmcmVxZGF0YVtuY2ZmdF0ucjsKKyAgICAvKkNfRklYRElWKHN0LT50bXBidWZbMF0sMik7Ki8KKworICAgIGZvciAoayA9IDE7IGsgPD0gbmNmZnQgLyAyOyArK2spIHsKKyAgICAgICAga2lzc19mZnRfY3B4IGZrLCBmbmtjLCBmZWssIGZvaywgdG1wOworICAgICAgICBmayA9IGZyZXFkYXRhW2tdOworICAgICAgICBmbmtjLnIgPSBmcmVxZGF0YVtuY2ZmdCAtIGtdLnI7CisgICAgICAgIGZua2MuaSA9IC1mcmVxZGF0YVtuY2ZmdCAtIGtdLmk7CisgICAgICAgIC8qQ19GSVhESVYoIGZrICwgMiApOworICAgICAgICBDX0ZJWERJViggZm5rYyAsIDIgKTsqLworCisgICAgICAgIENfQUREIChmZWssIGZrLCBmbmtjKTsKKyAgICAgICAgQ19TVUIgKHRtcCwgZmssIGZua2MpOworICAgICAgICBDX01VTCAoZm9rLCB0bXAsIHN0LT5zdXBlcl90d2lkZGxlc1trXSk7CisgICAgICAgIENfQUREIChzdC0+dG1wYnVmW2tdLCAgICAgZmVrLCBmb2spOworICAgICAgICBDX1NVQiAoc3QtPnRtcGJ1ZltuY2ZmdCAtIGtdLCBmZWssIGZvayk7CisjaWZkZWYgVVNFX1NJTUQgICAgICAgIAorICAgICAgICBzdC0+dG1wYnVmW25jZmZ0IC0ga10uaSAqPSBfbW1fc2V0MV9wcygtMS4wKTsKKyNlbHNlCisgICAgICAgIHN0LT50bXBidWZbbmNmZnQgLSBrXS5pICo9IC0xOworI2VuZGlmCisgICAgfQorICAgIGtpc3NfZmZ0IChzdC0+c3Vic3RhdGUsIHN0LT50bXBidWYsIChraXNzX2ZmdF9jcHggKikgdGltZWRhdGEpOworfQorCit2b2lkIGtpc3NfZmZ0cjIoa2lzc19mZnRyX2NmZyBzdCxjb25zdCBraXNzX2ZmdF9zY2FsYXIgKnRpbWVkYXRhLGtpc3NfZmZ0X3NjYWxhciAqZnJlcWRhdGEpCit7CisgICAvKiBpbnB1dCBidWZmZXIgdGltZWRhdGEgaXMgc3RvcmVkIHJvdy13aXNlICovCisgICBpbnQgayxuY2ZmdDsKKyAgIGtpc3NfZmZ0X2NweCBmMmssdGRjOworICAgc3B4X3dvcmQzMl90IGYxa3IsIGYxa2ksIHR3ciwgdHdpOworCisgICBpZiAoIHN0LT5zdWJzdGF0ZS0+aW52ZXJzZSkgeworICAgICAgc3BlZXhfZXJyb3IoImtpc3MgZmZ0IHVzYWdlIGVycm9yOiBpbXByb3BlciBhbGxvY1xuIik7CisgICB9CisKKyAgIG5jZmZ0ID0gc3QtPnN1YnN0YXRlLT5uZmZ0OworCisgICAvKnBlcmZvcm0gdGhlIHBhcmFsbGVsIGZmdCBvZiB0d28gcmVhbCBzaWduYWxzIHBhY2tlZCBpbiByZWFsLGltYWcqLworICAga2lzc19mZnQoIHN0LT5zdWJzdGF0ZSAsIChjb25zdCBraXNzX2ZmdF9jcHgqKXRpbWVkYXRhLCBzdC0+dG1wYnVmICk7CisgICAgLyogVGhlIHJlYWwgcGFydCBvZiB0aGUgREMgZWxlbWVudCBvZiB0aGUgZnJlcXVlbmN5IHNwZWN0cnVtIGluIHN0LT50bXBidWYKKyAgICogY29udGFpbnMgdGhlIHN1bSBvZiB0aGUgZXZlbi1udW1iZXJlZCBlbGVtZW50cyBvZiB0aGUgaW5wdXQgdGltZSBzZXF1ZW5jZQorICAgKiBUaGUgaW1hZyBwYXJ0IGlzIHRoZSBzdW0gb2YgdGhlIG9kZC1udW1iZXJlZCBlbGVtZW50cworICAgKgorICAgKiBUaGUgc3VtIG9mIHRkYy5yIGFuZCB0ZGMuaSBpcyB0aGUgc3VtIG9mIHRoZSBpbnB1dCB0aW1lIHNlcXVlbmNlLiAKKyAgICogICAgICB5aWVsZGluZyBEQyBvZiBpbnB1dCB0aW1lIHNlcXVlbmNlCisgICAqIFRoZSBkaWZmZXJlbmNlIG9mIHRkYy5yIC0gdGRjLmkgaXMgdGhlIHN1bSBvZiB0aGUgaW5wdXQgKGRvdCBwcm9kdWN0KSBbMSwtMSwxLC0xLi4uIAorICAgKiAgICAgIHlpZWxkaW5nIE55cXVpc3QgYmluIG9mIGlucHV0IHRpbWUgc2VxdWVuY2UKKyAgICAqLworIAorICAgdGRjLnIgPSBzdC0+dG1wYnVmWzBdLnI7CisgICB0ZGMuaSA9IHN0LT50bXBidWZbMF0uaTsKKyAgIENfRklYRElWKHRkYywyKTsKKyAgIENIRUNLX09WRVJGTE9XX09QKHRkYy5yICwrLCB0ZGMuaSk7CisgICBDSEVDS19PVkVSRkxPV19PUCh0ZGMuciAsLSwgdGRjLmkpOworICAgZnJlcWRhdGFbMF0gPSB0ZGMuciArIHRkYy5pOworICAgZnJlcWRhdGFbMipuY2ZmdC0xXSA9IHRkYy5yIC0gdGRjLmk7CisKKyAgIGZvciAoIGs9MTtrIDw9IG5jZmZ0LzIgOyArK2sgKQorICAgeworICAgICAgLypmcGsgICAgPSBzdC0+dG1wYnVmW2tdOyAKKyAgICAgIGZwbmsuciA9ICAgc3QtPnRtcGJ1ZltuY2ZmdC1rXS5yOworICAgICAgZnBuay5pID0gLSBzdC0+dG1wYnVmW25jZmZ0LWtdLmk7CisgICAgICBDX0ZJWERJVihmcGssMik7CisgICAgICBDX0ZJWERJVihmcG5rLDIpOworCisgICAgICBDX0FERCggZjFrLCBmcGsgLCBmcG5rICk7CisgICAgICBDX1NVQiggZjJrLCBmcGsgLCBmcG5rICk7CisgICAgICAKKyAgICAgIENfTVVMKCB0dyAsIGYyayAsIHN0LT5zdXBlcl90d2lkZGxlc1trXSk7CisKKyAgICAgIGZyZXFkYXRhWzIqay0xXSA9IEhBTEZfT0YoZjFrLnIgKyB0dy5yKTsKKyAgICAgIGZyZXFkYXRhWzIqa10gPSBIQUxGX09GKGYxay5pICsgdHcuaSk7CisgICAgICBmcmVxZGF0YVsyKihuY2ZmdC1rKS0xXSA9IEhBTEZfT0YoZjFrLnIgLSB0dy5yKTsKKyAgICAgIGZyZXFkYXRhWzIqKG5jZmZ0LWspXSA9IEhBTEZfT0YodHcuaSAtIGYxay5pKTsKKyAgICAgICovCisKKyAgICAgIC8qZjFrLnIgPSBQU0hSMzIoQUREMzIoRVhURU5EMzIoc3QtPnRtcGJ1ZltrXS5yKSwgRVhURU5EMzIoc3QtPnRtcGJ1ZltuY2ZmdC1rXS5yKSksMSk7CisgICAgICBmMWsuaSA9IFBTSFIzMihTVUIzMihFWFRFTkQzMihzdC0+dG1wYnVmW2tdLmkpLCBFWFRFTkQzMihzdC0+dG1wYnVmW25jZmZ0LWtdLmkpKSwxKTsKKyAgICAgIGYyay5yID0gUFNIUjMyKFNVQjMyKEVYVEVORDMyKHN0LT50bXBidWZba10uciksIEVYVEVORDMyKHN0LT50bXBidWZbbmNmZnQta10ucikpLDEpOworICAgICAgZjJrLmkgPSBTSFIzMihBREQzMihFWFRFTkQzMihzdC0+dG1wYnVmW2tdLmkpLCBFWFRFTkQzMihzdC0+dG1wYnVmW25jZmZ0LWtdLmkpKSwxKTsKKyAgICAgIAorICAgICAgQ19NVUwoIHR3ICwgZjJrICwgc3QtPnN1cGVyX3R3aWRkbGVzW2tdKTsKKworICAgICAgZnJlcWRhdGFbMiprLTFdID0gSEFMRl9PRihmMWsuciArIHR3LnIpOworICAgICAgZnJlcWRhdGFbMiprXSA9IEhBTEZfT0YoZjFrLmkgKyB0dy5pKTsKKyAgICAgIGZyZXFkYXRhWzIqKG5jZmZ0LWspLTFdID0gSEFMRl9PRihmMWsuciAtIHR3LnIpOworICAgICAgZnJlcWRhdGFbMioobmNmZnQtayldID0gSEFMRl9PRih0dy5pIC0gZjFrLmkpOworICAgKi8KKyAgICAgIGYyay5yID0gU0hSMzIoU1VCMzIoRVhURU5EMzIoc3QtPnRtcGJ1ZltrXS5yKSwgRVhURU5EMzIoc3QtPnRtcGJ1ZltuY2ZmdC1rXS5yKSksMSk7CisgICAgICBmMmsuaSA9IFBTSFIzMihBREQzMihFWFRFTkQzMihzdC0+dG1wYnVmW2tdLmkpLCBFWFRFTkQzMihzdC0+dG1wYnVmW25jZmZ0LWtdLmkpKSwxKTsKKyAgICAgIAorICAgICAgZjFrciA9IFNITDMyKEFERDMyKEVYVEVORDMyKHN0LT50bXBidWZba10uciksIEVYVEVORDMyKHN0LT50bXBidWZbbmNmZnQta10ucikpLDEzKTsKKyAgICAgIGYxa2kgPSBTSEwzMihTVUIzMihFWFRFTkQzMihzdC0+dG1wYnVmW2tdLmkpLCBFWFRFTkQzMihzdC0+dG1wYnVmW25jZmZ0LWtdLmkpKSwxMyk7CisgICAgICAKKyAgICAgIHR3ciA9IFNIUjMyKFNVQjMyKE1VTFQxNl8xNihmMmsucixzdC0+c3VwZXJfdHdpZGRsZXNba10uciksTVVMVDE2XzE2KGYyay5pLHN0LT5zdXBlcl90d2lkZGxlc1trXS5pKSksIDEpOworICAgICAgdHdpID0gU0hSMzIoQUREMzIoTVVMVDE2XzE2KGYyay5pLHN0LT5zdXBlcl90d2lkZGxlc1trXS5yKSxNVUxUMTZfMTYoZjJrLnIsc3QtPnN1cGVyX3R3aWRkbGVzW2tdLmkpKSwgMSk7CisgICAgICAKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgICAgZnJlcWRhdGFbMiprLTFdID0gUFNIUjMyKGYxa3IgKyB0d3IsIDE1KTsKKyAgICAgIGZyZXFkYXRhWzIqa10gPSBQU0hSMzIoZjFraSArIHR3aSwgMTUpOworICAgICAgZnJlcWRhdGFbMioobmNmZnQtayktMV0gPSBQU0hSMzIoZjFrciAtIHR3ciwgMTUpOworICAgICAgZnJlcWRhdGFbMioobmNmZnQtayldID0gUFNIUjMyKHR3aSAtIGYxa2ksIDE1KTsKKyNlbHNlCisgICAgICBmcmVxZGF0YVsyKmstMV0gPSAuNWYqKGYxa3IgKyB0d3IpOworICAgICAgZnJlcWRhdGFbMiprXSA9IC41ZiooZjFraSArIHR3aSk7CisgICAgICBmcmVxZGF0YVsyKihuY2ZmdC1rKS0xXSA9IC41ZiooZjFrciAtIHR3cik7CisgICAgICBmcmVxZGF0YVsyKihuY2ZmdC1rKV0gPSAuNWYqKHR3aSAtIGYxa2kpOworICAgICAgCisjZW5kaWYKKyAgIH0KK30KKwordm9pZCBraXNzX2ZmdHJpMihraXNzX2ZmdHJfY2ZnIHN0LGNvbnN0IGtpc3NfZmZ0X3NjYWxhciAqZnJlcWRhdGEsa2lzc19mZnRfc2NhbGFyICp0aW1lZGF0YSkKK3sKKyAgIC8qIGlucHV0IGJ1ZmZlciB0aW1lZGF0YSBpcyBzdG9yZWQgcm93LXdpc2UgKi8KKyAgIGludCBrLCBuY2ZmdDsKKworICAgaWYgKHN0LT5zdWJzdGF0ZS0+aW52ZXJzZSA9PSAwKSB7CisgICAgICBzcGVleF9lcnJvciAoImtpc3MgZmZ0IHVzYWdlIGVycm9yOiBpbXByb3BlciBhbGxvY1xuIik7CisgICB9CisKKyAgIG5jZmZ0ID0gc3QtPnN1YnN0YXRlLT5uZmZ0OworCisgICBzdC0+dG1wYnVmWzBdLnIgPSBmcmVxZGF0YVswXSArIGZyZXFkYXRhWzIqbmNmZnQtMV07CisgICBzdC0+dG1wYnVmWzBdLmkgPSBmcmVxZGF0YVswXSAtIGZyZXFkYXRhWzIqbmNmZnQtMV07CisgICAvKkNfRklYRElWKHN0LT50bXBidWZbMF0sMik7Ki8KKworICAgZm9yIChrID0gMTsgayA8PSBuY2ZmdCAvIDI7ICsraykgeworICAgICAga2lzc19mZnRfY3B4IGZrLCBmbmtjLCBmZWssIGZvaywgdG1wOworICAgICAgZmsuciA9IGZyZXFkYXRhWzIqay0xXTsKKyAgICAgIGZrLmkgPSBmcmVxZGF0YVsyKmtdOworICAgICAgZm5rYy5yID0gZnJlcWRhdGFbMioobmNmZnQgLSBrKS0xXTsKKyAgICAgIGZua2MuaSA9IC1mcmVxZGF0YVsyKihuY2ZmdCAtIGspXTsKKyAgICAgICAgLypDX0ZJWERJViggZmsgLCAyICk7CisgICAgICBDX0ZJWERJViggZm5rYyAsIDIgKTsqLworCisgICAgICBDX0FERCAoZmVrLCBmaywgZm5rYyk7CisgICAgICBDX1NVQiAodG1wLCBmaywgZm5rYyk7CisgICAgICBDX01VTCAoZm9rLCB0bXAsIHN0LT5zdXBlcl90d2lkZGxlc1trXSk7CisgICAgICBDX0FERCAoc3QtPnRtcGJ1ZltrXSwgICAgIGZlaywgZm9rKTsKKyAgICAgIENfU1VCIChzdC0+dG1wYnVmW25jZmZ0IC0ga10sIGZlaywgZm9rKTsKKyNpZmRlZiBVU0VfU0lNRCAgICAgICAgCisgICAgICBzdC0+dG1wYnVmW25jZmZ0IC0ga10uaSAqPSBfbW1fc2V0MV9wcygtMS4wKTsKKyNlbHNlCisgICAgICBzdC0+dG1wYnVmW25jZmZ0IC0ga10uaSAqPSAtMTsKKyNlbmRpZgorICAgfQorICAga2lzc19mZnQgKHN0LT5zdWJzdGF0ZSwgc3QtPnRtcGJ1ZiwgKGtpc3NfZmZ0X2NweCAqKSB0aW1lZGF0YSk7Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9raXNzX2ZmdHIuaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2tpc3NfZmZ0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZmI0MjMKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9raXNzX2ZmdHIuaApAQCAtMCwwICsxLDUxIEBACisjaWZuZGVmIEtJU1NfRlRSX0gKKyNkZWZpbmUgS0lTU19GVFJfSAorCisjaW5jbHVkZSAia2lzc19mZnQuaCIKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworICAgIAorLyogCisgCisgUmVhbCBvcHRpbWl6ZWQgdmVyc2lvbiBjYW4gc2F2ZSBhYm91dCA0NSUgY3B1IHRpbWUgdnMuIGNvbXBsZXggZmZ0IG9mIGEgcmVhbCBzZXEuCisKKyAKKyAKKyAqLworCit0eXBlZGVmIHN0cnVjdCBraXNzX2ZmdHJfc3RhdGUgKmtpc3NfZmZ0cl9jZmc7CisKKwora2lzc19mZnRyX2NmZyBraXNzX2ZmdHJfYWxsb2MoaW50IG5mZnQsaW50IGludmVyc2VfZmZ0LHZvaWQgKiBtZW0sIHNpemVfdCAqIGxlbm1lbSk7CisvKgorIG5mZnQgbXVzdCBiZSBldmVuCisKKyBJZiB5b3UgZG9uJ3QgY2FyZSB0byBhbGxvY2F0ZSBzcGFjZSwgdXNlIG1lbSA9IGxlbm1lbSA9IE5VTEwgCisqLworCisKK3ZvaWQga2lzc19mZnRyKGtpc3NfZmZ0cl9jZmcgY2ZnLGNvbnN0IGtpc3NfZmZ0X3NjYWxhciAqdGltZWRhdGEsa2lzc19mZnRfY3B4ICpmcmVxZGF0YSk7CisvKgorIGlucHV0IHRpbWVkYXRhIGhhcyBuZmZ0IHNjYWxhciBwb2ludHMKKyBvdXRwdXQgZnJlcWRhdGEgaGFzIG5mZnQvMisxIGNvbXBsZXggcG9pbnRzCisqLworCit2b2lkIGtpc3NfZmZ0cjIoa2lzc19mZnRyX2NmZyBzdCxjb25zdCBraXNzX2ZmdF9zY2FsYXIgKnRpbWVkYXRhLGtpc3NfZmZ0X3NjYWxhciAqZnJlcWRhdGEpOworCit2b2lkIGtpc3NfZmZ0cmkoa2lzc19mZnRyX2NmZyBjZmcsY29uc3Qga2lzc19mZnRfY3B4ICpmcmVxZGF0YSxraXNzX2ZmdF9zY2FsYXIgKnRpbWVkYXRhKTsKKwordm9pZCBraXNzX2ZmdHJpMihraXNzX2ZmdHJfY2ZnIHN0LGNvbnN0IGtpc3NfZmZ0X3NjYWxhciAqZnJlcWRhdGEsIGtpc3NfZmZ0X3NjYWxhciAqdGltZWRhdGEpOworCisvKgorIGlucHV0IGZyZXFkYXRhIGhhcyAgbmZmdC8yKzEgY29tcGxleCBwb2ludHMKKyBvdXRwdXQgdGltZWRhdGEgaGFzIG5mZnQgc2NhbGFyIHBvaW50cworKi8KKworI2RlZmluZSBraXNzX2ZmdHJfZnJlZSBzcGVleF9mcmVlCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2xicl80OGtfdGFibGVzLmMgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9sYnJfNDhrX3RhYmxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZDgwZGMKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9sYnJfNDhrX3RhYmxlcy5jCkBAIC0wLDAgKzEsNjc4IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVhbi1NYXJjIFZhbGluIAorICAgRmlsZTogbGJyXzQ4a190YWJsZXMuYworCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworCitjb25zdCBpbnQgZHVtbXlfZXBpY180OGtfdmFyaWFibGU9MDsKKyNpZmRlZiBFUElDXzQ4SworCitjb25zdCBzaWduZWQgY2hhciBnYWluX2NkYmtfdWxiclsyNTZdID0geworLTMxLCAtNDgsIC0zMCwgMTAsCistMTksIC0xMCwgLTE4LCAyNSwKKy0zMywgLTIyLCAtNDUsIDEyLAorLTUsIC01NiwgLTQzLCAzMSwKKy0zMCwgLTU2LCAtMywgMjgsCistNTksIC0xNywgLTUyLCAzMSwKKy00MSwgLTYwLCAtNTgsIDMyLAorLTY0LCAtNDcsIC0yMiwgMjksCistMzAsIC0zMSwgLTMxLCAyLAorLTI5LCAtMTQsIC0zMSwgMTEsCistMjIsIC0zNywgLTU4LCAyMSwKKy0zMSwgLTQ0LCAxMywgMjksCistMzcsIDAsIDEsIDM1LAorLTQ2LCAtNTUsIC0zNSwgMjAsIAorLTU2LCAtMTQsIC01MywgMzIsCistOCwgMSwgLTM2LCAzMSwKKy0yOSwgLTE1LCAtMjcsIDEzLAorLTI5LCAtMzksIC0yOCwgNywKKy00MywgLTUsIDMsIDM3LAorLTUxLCAtMjcsIC01NCwgMjMsCisxMCwgLTQ2LCAtMzYsIDMwLAorMywgLTMsIC00MiwgMzcsCistMjcsIDE2LCAtMjIsIDMyLAorLTM0LCAtNTIsIDEzLCAzNCwKKy0zMSwgLTIxLCAtMjgsIDgsCistMzQsIC00NSwgLTQwLCAxMiwKKy0yMCwgLTQ4LCA0LCAzMiwKKy00MCwgLTI3LCAxNiwgMzEsCistNiwgMTEsIC00NCwgNDEsCistMzUsIDEyLCAtNSwgMzcsCisxOSwgLTMzLCAtMzcsIDI5LAorLTI5LCAxOCwgLTMyLCAyNywKKy0yOSwgLTIzLCAtMTksIDEzLAorMTYsIC00NywgLTI4LCAzNCwKKy0zNCwgLTMwLCAxNywgMjcsCistMjAsIDIsIC0yNiwgMjYsCistMzgsIC00MCwgLTM2LCA5LAorMTUsIC0xNCwgLTQwLCAzNywKKy0zOSwgMTQsIC05LCAzOCwKKy0xNSwgMjUsIC0zOSwgNDEsCistMjYsIDE5LCAtMzIsIDI5LAorLTM5LCAxNywgLTE0LCAzNywKKzEwLCAtMzYsIC0yNiwgMjYsCisxNCwgLTEzLCAtNDAsIDM3LAorLTI5LCAtMjEsIC0xMiwgMTcsCistOCwgMTksIC0zOSwgNDEsCistMzYsIC0xOCwgMTUsIDMzLAorLTMyLCAtMzgsIC0zOCwgNiwKKy0xOSwgNCwgLTIzLCAyOSwKKy0zOCwgLTcsIDExLCAzNywKKzksIC0xMCwgLTM5LCAzNSwKKy0zNywgMjQsIC0xOSwgMzcsCistMzQsIC01LCAtOCwgMjcsCistMjAsIDIzLCAtNDEsIDM4LAorLTQsIDE3LCAtMzEsIDM5LAorLTE3LCAtMjYsIC0yNiwgMTQsCistMjQsIDI4LCAtMzYsIDM2LAorLTcsIDE1LCAtMzksIDQwLAorLTQyLCAxNiwgLTExLCA0MCwKKy0yOSwgMTQsIC02LCAzOCwKKy0zNiwgMjgsIC0yNywgMzUsCistMjEsIDUsIC0yNiwgMjcsCisxMSwgLTksIC0zOSwgMzcsCistMzgsIC03LCAxMywgMzgKK307CisKKworY29uc3Qgc2lnbmVkIGNoYXIgZXhjXzEyXzMyX3RhYmxlWzM4NF0gPSB7CiszNCwgNTUsIDksIDU1LCA0LCA0NCwgLTIsIDI1LCA0LCAtNiwgMTMsIC0yMiwgCisyMCwgMjYsIC0xMywgLTU2LCAtMzcsIDE4LCA1LCAyOCwgNCwgMTAsIDYsIC03LCAKKzM3LCAtMjQsIC0zMSwgMjIsIDEyLCAtNiwgLTQsIC03LCAyLCAwLCAtMywgLTIsIAorLTE2LCAtMTMsIC0xLCA5LCAtMiwgNCwgNiwgNSwgLTMsIDMsIDgsIC0xLCAKKy0xLCAtNiwgLTIsIC0xLCA4LCAyNCwgMTksIDMzLCAtNzMsIC01MywgNiwgLTE4LCAKKzE0LCA3LCAxMSwgOCwgLTMzLCAtOTQsIC01LCA3LCAwLCA0NCwgMSwgMTksIAorLTksIC03LCAtMzQsIC0xNiwgOCwgMiwgNSwgMCwgMywgMSwgLTIsIDMsIAorLTIyLCA2LCAtMiwgMTIsIDE2LCAzMCwgMzksIDI1LCAyNSwgMiwgMTAsIC0yLCAKKy0xLCAtNDAsIC02LCAtNTEsIC01LCAtNDgsIC05LCAtMzMsIC0xNCwgLTEsIC0yNCwgMTUsIAorMTA0LCAzOSwgMTIsIC05LCAtMjAsIC0xMiwgLTMwLCAtMTAsIC0zMSwgLTcsIC0zMCwgLTgsIAorLTcxLCAtNTMsIC00LCAtMTEsIDksIC0xMCwgNywgLTEwLCAxMCwgLTEsIDExLCA4LCAKKzI0LCAxNCwgNiwgLTMsIDEwLCA4LCA4LCAxMSwgLTYsIDExLCAwLCAtMiwgCistNiwgLTIsIDEsIC0xLCAtMywgOCwgLTQxLCAyNywgNTcsIC03LCAxMSwgLTE2LCAKKy02MSwgNTAsIDEwLCAtMTAsIDQsIC0xMywgMTQsIC03LCAxLCA1LCAtNCwgNCwgCiswLCAyLCAtMSwgLTIsIC0xLCAxLCAxLCAwLCAtMSwgLTEsIC0yLCAtMywgCistMywgLTE1LCA2OSwgNjAsIDEwLCAtMTAsIC0xMCwgLTI5LCAtMjEsIC03LCAtMTYsIDIsIAorMjQsIC0zMiwgMjQsIC0xOCwgLTE0LCAtMiwgLTExLCAxMSwgLTYsIDEwLCAxLCAzLCAKKzI0LCAtMTAsIDE0LCAxOCwgLTEzLCAxNywgLTE2LCA0LCAtMywgLTIxLCAtMywgLTExLCAKKy0xOSwgMTIsIC0xNCwgMjYsIDIwLCAtOSwgMjQsIC0xNSwgMTgsIDEsIC0zMiwgLTIsIAorLTEsIDgsIC0zLCA0LCAxMSwgLTQ3LCA3LCA0NiwgLTQsIC0xMCwgLTEwLCAtMiwgCistMjQsIDI5LCAtMzMsIDYsIC0yMCwgLTMsIDAsIC0xMiwgNSwgLTMwLCA4LCAtMTMsIAorMjgsIDksIDUsIC0xMSwgMCwgLTE0LCAtMTMsIC0yMiwgLTEyLCAtOCwgLTQsIDEsIAorLTYsIDI4LCA0NSwgLTE4LCAtMzEsIC01LCAxLCAyLCAxLCA1LCAwLCAtMywgCistMTksIC0xMCwgMTAsIDI3LCA4LCAtMTYsIC0yOCwgLTksIDIsIC01LCA4LCAtMSwgCisxMDAsIC00OSwgNCwgLTQzLCAyNSwgLTcsIDEsIDksIC0xMywgMTMsIC0xOCwgMTMsIAorLTEsIC0xLCAwLCAyLCAtMiwgLTgsIDksIC00NiwgLTcsIDcwLCAyMywgNywgCistMTAzLCAyMCwgOCwgNDIsIC01LCAyMSwgLTQsIDQsIDEsIC04LCAxNiwgLTgsIAorMywgMywgOCwgNCwgNywgLTMsIC0zLCAtNCwgOSwgNiwgMiwgMTMsIAorNiwgMywgLTE1LCAxMSwgLTQzLCAzMSwgNDAsIC0xMywgMTIsIC0yMSwgLTIsIC0zLCAKKy0xMCwgLTksIDE2LCAtMzUsIDMxLCAtMywgLTEyLCA4LCAtMzQsIDcsIDEyLCAyMiwgCistMywgLTQsIC03LCAtMTIsIDI0LCA1MywgLTE5LCAtNDMsIDQsIC0zLCAtNCwgNiwgCistMTgsIC0zMCwgLTU4LCAtMTcsIC0xMSwgMTcsIDIzLCAzNCwgMzAsIDI4LCAyOCwgMTUsIAorfTsKKworCitjb25zdCBzaWduZWQgY2hhciBjZGJrX2xzcF92bGJyWzUxMjBdPXsKKzIzLCAzNCwgMTA4LCAxMDAsIDEwMiwgODIsIDY5LCA0OCwgNTIsIDI1LAorMCwgLTM3LCAtNTUsIC03OCwgLTExMSwgLTc5LCA1OCwgNTcsIDQ1LCAzMiwKKzI3LCAtOSwgLTEyLCAtMTQsIC00MSwgLTI5LCAtMTcsIC00MSwgNDQsIDM1LAorLTI0LCAtNjgsIC03MiwgNjEsIDEwMCwgNzMsIDEwMCwgODAsIDcwLCAzNywKKzEyLCAtNSwgMjIsIDExLCAtMTAsIC00MCwgLTMzLCAtMTcsIDE5LCAxMiwKKy0yMCwgLTU3LCAtOTQsIC05MiwgNTYsIDcxLCA0OCwgMzEsIDIyLCAtNSwKKzQxLCAyOCwgNiwgLTYsIC0xMiwgLTM5LCAtMTgsIC0xNiwgLTMwLCAtMjMsCis2NSwgNTQsIDQxLCAyOCwgMjMsIDksIDI2LCAxOCwgMjIsIDYsCisxNywgLTE2LCAtMzMsIC01NCwgLTg3LCAtNzksIDgsIC04LCA0NCwgMzUsCistMjAsIC02MiwgLTc4LCAyMiwgNzgsIDQ3LCA0NCwgMzMsIDI2LCAxNCwKKzgsIDEsIDQ1LCA0NywgNzIsIDY4LCA1NSwgMzEsIDM2LCAxNywKKy0yNywgLTY4LCAtODYsIC02NSwgLTEwLCAyMywgOCwgLTIyLCAtMzEsIDI1LAorLTQsIC0zOCwgLTU1LCAtNjgsIC05NiwgLTExOCwgLTM5LCAzMCwgMjgsIDMxLAorLTIxLCAtNjYsIC00NywgOTksIDkxLCA2OCwgNzgsIDU2LCA2NCwgMzYsCiszMywgMjIsIDEzLCAtMTMsIC0zNiwgLTIyLCA0NCwgMzcsIDU0LCAzMywKKy0zMSwgLTc2LCAtMTA2LCAtMTAwLCAtNSwgMjEsIDcsIC0xNywgMTMsIDQ4LAorLTI2LCAtNjUsIC04NCwgLTg0LCAtNDYsIDY3LCA5NywgNjYsIDU4LCAzMSwKKy0yMCwgLTUyLCAtMzIsIC0yMCwgMywgMTYsIDI3LCA0MCwgNTQsIDI5LAorLTYsIC0zNSwgLTU2LCAtNjQsIC04LCAtMzEsIC0zNiwgMjEsIDI2LCAtMywKKzMyLCAyMywgMSwgLTIzLCAtMTksIC00NCwgLTQ1LCAtNywgMTAsIC0xMCwKKy0yNCwgLTU1LCAyLCA2NywgNzIsIDg1LCA5MCwgNzQsIDc3LCA0NSwKKy0yMSwgLTU4LCAtNDUsIC00OSwgMTYsIDM0LCAxMywgLTE1LCAtMTYsIDE2LAorOCwgLTMxLCAtMzQsIC02MSwgLTgzLCAxMCwgMjQsIDgsIDU2LCAyNSwKKy04LCAtNDksIC03NCwgLTk1LCAtMTIzLCAtNzcsIDYsIDQwLCA0NiwgNDIsCistMjEsIC02MCwgLTU5LCAtMzQsIC0xMiwgMjcsIDgsIC0xOSwgLTQ4LCAtMTcsCistMjUsIC02NiwgLTc4LCAtNzMsIC04MSwgLTE2LCAxNCwgMCwgLTIsIDMzLAorNzgsIDc5LCA2OSwgNDksIDQ0LCAzMiwgNTAsIDQ0LCA0NiwgMjIsCisyNCwgOSwgLTQsIC0xOCwgLTM3LCAtNTYsIDIyLCAzNCwgMjIsIDExLAorLTE5LCAtNTksIC04NSwgLTQxLCA0NiwgNzIsIDYwLCAzMywgMjksIC0zLAorLTIxLCAtNjYsIC03MCwgNjUsIDkyLCA1NywgNjEsIDQxLCA0MCwgMjMsCistNCwgLTQxLCAtNjAsIC03MiwgLTEwMiwgLTEwNiwgNCwgNTYsIDU3LCAzMSwKKy01LCAtNDgsIC02MiwgLTkxLCAtMTA5LCAxLCA3NiwgNTQsIDcyLCAzOSwKKy0yMSwgLTYxLCAtODYsIC00NiwgLTM0LCAtMzksIDQyLCAyNSwgMTUsIDEyLAorNSwgLTE2LCAtMzYsIC01NiwgNSwgMTgsIDExLCAxMywgNTIsIDIzLAorMTIsIC02LCAzMCwgNDAsIDU5LCA0MCwgMjcsIDgsIDE5LCA2LAorMjUsIDgsIC05LCAtMTksIC0yNSwgLTUzLCAtNDAsIC0zOCwgLTQ2LCAtNCwKKy0xNywgLTU5LCAtODMsIDIsIDU4LCAyOSwgMTgsIC0yLCAtMTcsIC01LAorLTM1LCAtODAsIC0xMTEsIC0xMTcsIC00MSwgLTksIDE0LCAyMywgMzYsIDU2LAorNDgsIDY3LCA5MywgNzEsIDc3LCA5MSwgMTEwLCA5NSwgODMsIDQ3LAorLTI1LCAtNjIsIC05NywgLTkzLCA3NiwgOTYsIDczLCA1MiwgNjEsIDI4LAorLTksIC01NSwgLTQ2LCA0OSwgMzMsIDgsIDEsIC0yNSwgMjgsIDIzLAorLTEwLCAtNDcsIC02MCwgLTQ1LCAtNjIsIC01OCwgNTYsIDU3LCA0OCwgMjgsCiszNCwgMTIsIC05LCAwLCAzNCwgNCwgNiwgMTEsIDMsIC0xOCwKKzIxLCAtOSwgLTE2LCAtMTMsIC0zOSwgLTQxLCAxNCwgLTgsIDMzLCAyOCwKKy03LCAtNDksIC02MSwgMTUsIDM0LCAzLCAyLCAtMTMsIC0yOCwgLTE3LAorLTE0LCAtNTAsIC00NiwgLTY1LCAtNzYsIC0xMywgLTEwLCAtMjksIC0zMCwgMjIsCistMjgsIC02OCwgLTk3LCAtOTgsIC04LCAzOCwgMzYsIDI2LCAyNSwgMTUsCis2LCAtMzMsIC05LCAxLCAtMjgsIC0xMSwgLTE5LCAtMjQsIDYxLCAzNiwKKy0xNSwgLTYwLCAtMTksIDgxLCA1OCwgNTIsIDQyLCAyOCwgNjYsIDM2LAorLTE1LCAtNTIsIC03MSwgLTE1LCAxMSwgLTEzLCAzOCwgMjgsIDExLCAtNCwKKzM0LCAxLCAtOSwgLTI3LCAtNTcsIC0xOSwgMzYsIDYsIDE0LCAwLAorLTEsIC00MywgLTE0LCAxNiwgLTEyLCAtNSwgLTE0LCAtMjksIC0zMywgLTMyLAorLTEzLCAtNTcsIC03NSwgLTEwMCwgLTExMSwgMSwgMiwgMTMsIDQ4LCAzMywKKzEyLCAxNiwgMTAwLCA4NSwgNjksIDQ5LCA0MCwgMjksIDQ2LCAyMywKKy00LCAtMjYsIC00MSwgLTQ0LCAtNywgLTI2LCAtMzksIC0yNywgMTgsIDAsCistNCwgLTQ3LCAtNTEsIDE3LCA3LCAtMTksIDEzLCAtMTAsIC0xNiwgOSwKKy0yNCwgLTYzLCAtOTMsIC01MywgMjUsIDE0LCA3MywgNTEsIDM1LCA4LAorLTM0LCAtNzcsIC0xMDYsIC04MywgLTUxLCAtNDcsIDIsIDEyLCA0MSwgNTMsCistMTMsIC00NywgLTY3LCAtNDQsIDQyLCAyMCwgMjQsIDMzLCAyMSwgLTMsCisxMSwgLTE1LCAtMjksIC01MSwgLTc5LCAtODgsIDIyLCA1NiwgNDMsIDIwLAorMTEsIC0yMiwgLTM3LCAtMSwgNjEsIDQwLCAyOCwgMjQsIDIyLCAtNiwKKy0zLCAtMzMsIC01MCwgLTY2LCAtOTMsIC0xMDAsIC0xNiwgLTE2LCAzLCA0MSwKKy0xOCwgLTU4LCAtODIsIC01LCA5NSwgNzgsIDU2LCAzOSwgMzAsIDEsCistNiwgLTQ3LCAtMjgsIC0yNiwgLTM2LCA0OSwgNTUsIDUxLCA3MSwgMzUsCistNiwgLTUwLCAtNDIsIC00LCAtMzIsIC0xLCAtMSwgLTE4LCA2NywgNDAsCistMjMsIC02MywgLTU2LCAtNDgsIC0zMiwgMCwgLTE0LCAtNDMsIC00NiwgMjUsCistMTcsIC02MSwgLTYzLCAxMywgLTEsIDI4LCAyMywgMTAsIDY3LCAzNiwKKzQ1LCA5MiwgMTI0LCAxMTEsIDEwOCwgODYsIDc3LCA1NiwgNTcsIDI4LAorNTAsIDM1LCAxMywgMywgLTIsIC0zMiwgMywgMTQsIDYsIC04LAorMTIsIC0xNywgLTI0LCAtNDIsIC02NywgLTIzLCA2NywgNDksIDY0LCAzOCwKKy0yMSwgLTYwLCAtOTAsIC00NSwgMzIsIDYsIDcsIC0zLCAtMTUsIDksCistMTYsIC02MiwgLTczLCA1MCwgNDYsIDE4LCA3LCAtMTMsIDYzLCAzOSwKKzE5LCAtMTYsIC0xOSwgMjAsIDUsIC0xNSwgMTYsIC05LCA1LCA4LAorLTExLCAtNDYsIC00MiwgLTM5LCAtNTUsIC02OCwgLTYyLCAtMjcsIC0xOCwgMjMsCistMjMsIC02MSwgLTY3LCAtNzEsIC0yOSwgNDQsIDMyLCAxMCwgLTE1LCAtMTIsCistNiwgLTQ1LCAtNDMsIC00MCwgLTY3LCAtMjIsIDQyLCAxOSwgNjEsIDM4LAorOSwgLTEzLCAtMzgsIC0zNywgNDAsIDMwLCAxNSwgOSwgMTEsIC0xNiwKKzAsIC0xOCwgLTI5LCAtMzQsIC0xNywgLTQ0LCAtNTAsIC0zLCA0NywgMTUsCistMywgLTQ2LCAtMjYsIDIwLCAtMTAsIDE2LCAyMCwgLTIsIDQzLCAxOCwKKy0yMywgLTQ2LCA0NiwgOTEsIDk5LCAxMDAsIDk5LCA3OSwgNzIsIDQyLAorLTEsIC00NCwgLTMzLCAtMzYsIC01NiwgMjIsIDE3LCA0LCA3MSwgMzcsCiswLCAtMzgsIC00OSwgMCwgLTEsIC0zMCwgLTIxLCAtMzUsIC00NCwgLTYsCistMzIsIC03NCwgLTEwMSwgLTk4LCAtMTQsIC0yMSwgLTIzLCA3LCAyNiwgNDUsCis4LCAtMjgsIC00NCwgLTYzLCAtOTYsIC04NCwgMzQsIDIxLCAxMywgMjMsCisxMCwgLTI0LCAtMzgsIC0xNywgLTI5LCAtNTMsIC0xNiwgLTQxLCAtMTQsIDIzLAorLTE5LCAtNjEsIC03NiwgLTEyLCA5NywgOTksIDc5LCA2MCwgNTksIDI1LAorNSwgLTExLCAtMjYsIC01NCwgLTI2LCAtOCwgLTEzLCAzLCAyNSwgNCwKKzE3LCAxNiwgNCwgLTI0LCAtMSwgNDIsIDYwLCA2MywgNzAsIDM3LAorMTAsIC0yNywgLTIyLCAtNDMsIC02MiwgLTcsIC0xNiwgMTAsIDc1LCA0MCwKKy0yNiwgLTY0LCAtOTYsIC0xMDYsIC0zLCA3MywgNzMsIDQ2LCA1NSwgMjksCistMiwgLTQ1LCAtNDMsIDQ1LCA0NiwgMTcsIDM3LCAxMCwgMzAsIDMyLAorMjEsIC0yLCAtMTgsIC0yOCwgLTQ3LCAtNjMsIC0zOCwgLTU2LCAtMywgMjcsCistMTcsIC00OCwgLTksIDksIDMsIDI4LCA1MCwgNTgsIDczLCA0NCwKKzgsIC0xNCwgLTMyLCAtNTYsIC04MSwgLTEwNiwgLTM1LCA0MSwgNTMsIDI2LAorMSwgLTM4LCAtNTEsIC02NiwgLTEwMCwgLTYxLCAzMiwgMTcsIDY2LCA0MiwKKzE3LCA1LCAtNiwgLTIxLCAtMjYsIC01MiwgLTM2LCAyMywgNTYsIDIyLAorNiwgLTIwLCAtMzEsIC0yMiwgLTE5LCAtNDgsIDE2LCAzOCwgMjIsIC0yLAorLTI1LCAtNjcsIC05MywgLTUxLCA4MiwgNjIsIDcxLCA2OSwgNjMsIDM1LAorLTEyLCAtNTEsIC03MSwgLTYwLCAtNzYsIC05MSwgLTE0LCA0MSwgMzUsIDIwLAorLTE2LCAtMzEsIDIyLCAzMiwgNTUsIDgwLCA5OCwgOTEsIDg1LCA0OSwKKy0yMSwgLTYzLCAtOTIsIC02LCA1NywgMjcsIDM2LCAxMSwgNjAsIDM5LAorLTcsIC00NSwgLTY3LCAtODEsIC0xMTQsIC0xMTAsIDAsIDI0LCAyMywgNDUsCistMTgsIC01NSwgLTYxLCAtNTYsIC02MCwgLTY0LCAtMzIsIC0yLCA1OCwgMzYsCistMywgLTMzLCAtNTEsIC0yNCwgMTksIC0xMCwgLTE5LCA0LCAxNCwgLTE1LAorLTE5LCAtNTksIC04MSwgLTEyLCA3LCAtMTIsIDM2LCAxNiwgNDgsIDM2LAorMTcsIC0xMywgLTMyLCAtNDksIC03OCwgLTk1LCAtMSwgLTMsIC0xMCwgMjUsCisxNSwgNSwgNDEsIDU5LCAxMDgsIDEwMSwgMTAzLCA4MSwgNzAsIDM1LAorLTE0LCAtNTIsIC0zNywgMTUsIDkzLCA4MywgNjYsIDUwLCA0NywgMTUsCistMywgLTMxLCAtNDksIC01MiwgLTksIC0zMSwgLTEwLCAzNywgNjIsIDI3LAorLTE1LCAtNTYsIC04MiwgLTE3LCA3NSwgNTYsIDM2LCAyMiwgNywgLTE2LAorLTI0LCAtNjMsIC05MywgLTg0LCAyNSwgOTQsIDk4LCA2NSwgNjAsIDMxLAorLTIsIC00NSwgLTM5LCAtNjEsIC02MSwgNDgsIDM1LCAzMiwgNTQsIDE4LAorLTE5LCAtNTEsIC00NSwgLTU3LCAtMjgsIC04LCAxMCwgMTQsIDM4LCAyNiwKKy0yLCAtNDYsIC0zOCwgNDUsIDI2LCAyMiwgNDgsIDIxLCA2MywgNDAsCistMjIsIC02MSwgLTczLCAtNzUsIC02NywgLTMxLCAxMywgMTgsIDUxLCAzNCwKKy0xMiwgLTIsIC0xLCAtMTcsIC0zLCAtMjcsIC0zLCA2LCAtMSwgLTE1LAorLTE2LCAtNTksIC03OCwgMTAsIDM2LCA5LCA0LCAtMTgsIDMzLCAyMiwKKy0yNSwgLTYyLCAtOTcsIC0xMDcsIDM5LCA4NywgNjksIDQ2LCA0MiwgMTIsCisxMSwgLTcsIC0zMCwgLTM2LCAxOSwgMiwgLTEwLCAtNywgLTQsIC0yNCwKKzExLCAtOCwgMjUsIDI4LCAyOCwgNSwgLTQsIC0xMCwgNSwgLTIsCistMTAsIC00OCwgLTM3LCAtMTcsIC0zOCwgLTksIC0yLCAtMTksIC0zMCwgLTIyLAorLTIzLCAtNjEsIC03OSwgLTgxLCAtMiwgMTUsIC00LCAxNywgMjAsIDIsCisyNSwgLTE0LCAtMywgLTEwLCAtMzgsIDEsIDE0LCAtMTQsIC05LCAtMjcsCisyLCAtMTgsIC0zOCwgLTM2LCAtMTEsIC0zOSwgLTM2LCAtMjgsIC0zNiwgLTExLAorMzIsIDU5LCAxMjcsIDEyNCwgMTI3LCAxMDgsIDkxLCA2OCwgNjQsIDM0LAorMywgLTMyLCAtMzcsIC0xMCwgLTI1LCAtNDYsIDEyLCAxLCAtMTcsIC0yNCwKKy0yOSwgLTY5LCAtMTAyLCAtMTAwLCAyLCAtNywgMTEsIDE0LCAxLCAzMSwKKzMwLCAtNiwgLTQsIC0xNiwgLTQ0LCAtNSwgMywgLTksIDY2LCA0MCwKKy05LCAtNDUsIC01MiwgLTUsIDM3LCAxOSwgMjYsIDYsIDUxLCAzMiwKKy0zMSwgLTczLCAtOTYsIC00NSwgLTI1LCAtMzcsIC0xNSwgLTE2LCAzMiwgMzksCiszLCAtMTUsIDE4LCAyMSwgMjgsIDMzLCA1OCwgNTgsIDY5LCA0MiwKKy0zMSwgLTczLCAtOTksIC05OSwgLTQ4LCAxNCwgMjEsIDUsIDIsIDM5LAorNywgLTM1LCAtMjAsIDI5LCAyLCAtOCwgLTgsIC0yOCwgMzgsIDI2LAorLTUsIC0zOSwgLTY0LCAtMzYsIDE1LCAtMTUsIC0xMSwgLTIxLCAtMjMsIDUsCistOCwgLTUxLCAtNTYsIDE1LCAtMSwgLTE0LCAtOCwgLTMxLCAzNiwgMjIsCistOCwgLTUzLCAtNjgsIC05OCwgLTEwMSwgNDIsIDQ5LCAzOCwgNDEsIDEyLAorMTAsIC0yNywgLTIyLCA0LCAtMjMsIC0yMSwgMzAsIC0xLCAyMiwgMjYsCistMTMsIC01NiwgLTQyLCAzMSwgOSwgLTEsIC0xMCwgLTIsIDIyLCAtNCwKKzE1LCA4LCA1NiwgNTcsIDQ1LCA1NSwgNTcsIDQ2LCA3MiwgNDQsCistNywgLTUzLCAtMjYsIDUzLCAyMSwgMTcsIDAsIDAsIDc0LCA0MSwKKzMsIC0xOCwgLTIsIDAsIDE5LCAxNywgNDIsIDM2LCA0NywgMjYsCisyNCwgLTcsIC0yMywgLTM0LCAtNjIsIC02MCwgNiwgLTIyLCAxOCwgMjUsCistMTEsIC00MiwgLTQ2LCAtNjEsIC04MywgLTk5LCAtNjcsIC0xMSwgMjgsIDM5LAorMzAsIC0zLCAtMTAsIC0xLCAtMjQsIC0zMCwgLTEsIC0yOCwgMTUsIDE4LAorMTksIC0xNSwgLTEwLCAtNiwgLTM1LCAtMjYsIDMzLCAxMCwgNTYsIDM5LAorLTEzLCAtNTMsIC04MiwgLTQyLCA1MywgMzcsIDE4LCAxMCwgLTMsIC0yMSwKKy0yMSwgLTYwLCAtODksIC00NiwgODksIDk0LCA3MSwgNDYsIDQyLCA5LAorLTIsIC0zNCwgLTQ0LCAtNDYsIC02NCwgLTg0LCAtMSwgMzcsIDE2LCAwLAorLTE3LCAtNTEsIC02NSwgLTY0LCAtNywgLTE3LCAtMjksIC0xMSwgNTIsIDI3LAorMjIsIC0xNSwgLTE2LCAtMzksIC01NSwgMjYsIDM2LCAyMSwgNjIsIDI4LAorLTIsIC0yNiwgLTM4LCAtNDksIC01NSwgLTgwLCAtNzUsIDgsIDIwLCA5LAorLTYsIC00NywgLTYxLCAtODIsIC0xMDMsIC0xNywgLTE1LCAtMjUsIDUzLCA0MCwKKy04LCAtNDcsIC02NiwgLTE4LCA1NiwgNDMsIDI1LCAyOSwgMzksIDMsCistMjcsIC02NiwgLTg2LCAtNjksIC01MCwgLTU5LCAtMzQsIC0xLCAxOSwgNDIsCiszLCAtMjAsIDIsIDIxLCA3MiwgNTcsIDUyLCAzNiwgMzEsIDcsCistMTIsIC00OSwgLTYxLCAtMTMsIC0xLCAtMzMsIDUsIDM3LCAyNiwgMiwKKy0yNywgLTY5LCAtOTIsIC02MiwgMiwgNDMsIDg4LCA2NywgNjQsIDM2LAorMCwgLTQwLCAtNCwgLTYsIC0yMCwgNDMsIDMzLCAyNSwgNTAsIDIwLAorMTQsIC0yMCwgLTMwLCAtNDQsIC03MywgLTM3LCAtMjQsIC00NywgMjYsIDIwLAorMzEsIDUzLCAxMTEsIDExOCwgMTI3LCAxMjYsIDEyMSwgOTksIDg1LCA0NiwKKy0xNCwgLTQ1LCAtNTEsIC0zOSwgMjQsIDUsIC02LCAxNywgNDYsIDE0LAorLTQsIC00MywgLTQ1LCAtNzAsIC02MywgOCwgMTQsIDU4LCA3OCwgMzksCistOCwgLTQ3LCAtNjYsIC04NCwgLTExNCwgLTU1LCAxMCwgLTgsIDMyLCA0MCwKKzI4LCAyMiwgNDIsIDI2LCA4LCAtMjEsIC0xNiwgLTYsIDIyLCAxMCwKKzI0LCAxMCwgMzQsIDMxLCAzNSwgMzEsIDQ2LCAzOSwgNTksIDM2LAorLTQsIC00MywgLTYyLCAtMTAsIDIwLCAtMTQsIDIsIDE0LCAtNiwgLTE5LAorLTIxLCAtNjIsIC04OSwgLTIyLCA2MiwgMzMsIDMwLCAxNiwgMTUsIDE1LAorMCwgLTIyLCAtMzEsIC00NSwgLTU4LCAtODAsIC02NiwgMTMsIDY4LCAzNCwKKy0xNiwgLTQ1LCAtNiwgNywgLTYsIC0xNywgLTE0LCAtMTUsIDIsIDIsCisxMCwgLTUsIC0yMiwgLTM4LCAtNDAsIC03MCwgLTYwLCAtMTUsIC0yMywgMCwKKzIyLCAtMTEsIC0yMiwgLTM5LCAtNjcsIC0yNSwgMzAsIDUsIDU4LCAzNywKKy0yMSwgLTQ3LCA2LCA0MywgMzcsIDQ1LCA2NSwgNjYsIDczLCA0MywKKzIsIC0yNSwgLTQwLCAtNTMsIC03MiwgLTk0LCAtMzUsIDI0LCA5LCA4LAorLTMsIDAsIC0zLCAtOSwgNCwgLTIzLCAtMTAsIDIwLCA0MywgMTQsCistMiwgLTQxLCAtNjAsIC05LCA1NywgMzIsIDE3LCAxNiwgNiwgLTE5LAorMSwgLTMxLCAtMzYsIC0zNiwgLTU0LCAtNjgsIC03NywgLTc1LCAyMSwgMzcsCistMTksIC0zMiwgNzksIDkwLCA5MiwgODEsIDY3LCA0NywgNTIsIDI4LAorLTYsIC0zNiwgLTU3LCAtNjIsIDI3LCA0MCwgMjEsIDExLCA5LCAtMTksCistMTAsIC00NywgLTQ5LCAtNTksIC03NCwgLTE4LCAtMTQsIC0zMCwgMjUsIDE4LAorLTIzLCAtNjksIC04MiwgNjAsIDY2LCA0MCwgNzUsIDU0LCA2NSwgMzgsCistMTksIC01NywgLTkyLCAtNjgsIDY2LCA1OCwgMzQsIDE4LCAxLCAtMTYsCistMjksIC02OCwgLTk5LCAtODgsIC0zNywgLTM4LCAxMywgOCwgNSwgNDAsCistMjIsIC02MywgLTc1LCAxNCwgMTUsIDcsIDc1LCA1OCwgNTksIDM0LAorLTIzLCAtNjIsIC04MiwgLTM5LCAtMzEsIC01MywgLTI3LCA1LCAtMywgMjAsCisxMywgLTI2LCAtMjAsIDIyLCAyLCAtMywgMzUsIDEzLCA1NCwgMzksCiszMiwgNSwgLTEzLCAtMjIsIC00NSwgLTU4LCAtMSwgLTIwLCAtMTksIDcsCiszMCwgNDYsIDcwLCA1NSwgODksIDg4LCA5MSwgNjcsIDU2LCAyOCwKKy0xMywgLTUwLCAtNjMsIC0yNSwgLTI4LCAtNTAsIC0yMywgLTMyLCAtMzQsIDE5LAorLTEzLCAtNTQsIC02NSwgLTksIC0yMCwgLTM3LCAyOSwgNiwgMTEsIDI1LAorMCwgLTQwLCAtNTUsIC03OCwgLTEwNywgLTI1LCA0NywgMjAsIDM0LCAxNiwKKy0yMCwgLTU4LCAtOTYsIC0xMDMsIDM4LCA0MywgMjcsIDMwLCAxNSwgLTEsCistMTYsIC00OSwgLTUyLCAtNjYsIC04MCwgLTU3LCAtNDQsIC0zOSwgNiwgMzgsCiswLCAtMzgsIDUsIDEzLCAtOCwgMjMsIDI0LCAxLCA3LCAtOSwKKy0xOCwgLTU2LCAtNjQsIC03LCAzOCwgMTMsIDExLCAzMiwgMjgsIDAsCisxNCwgLTMsIC0yMCwgLTE3LCA0LCAtMjYsIC0zNCwgLTgsIDE5LCAtOSwKKy0yMywgLTYwLCAtODMsIC0zOCwgLTgsIC0zMiwgMTEsIDE5LCAtMSwgLTUsCistNSwgLTQ3LCAtMTIsIDU2LCAzOCwgMjIsIDE4LCAtOCwgLTUsIC04LAorMTgsIC00LCAtMjQsIC0xNiwgMjcsIDIsIC02LCA1LCAyNSwgLTUsCisxMywgMCwgLTE5LCAtMzUsIC0yMywgLTQ1LCAtNTksIC0zMCwgMTksIDMsCisxOSwgLTEyLCAtMjMsIDEsIC03LCAtMzUsIC0xNCwgLTMyLCAtMjMsIDQsCistMjMsIC02NCwgLTY3LCAtMjIsIC0yNywgLTUsIC01LCAtMjAsIDIwLCA1LAorMjAsIDExLCA4MywgOTIsIDg1LCA4OSwgNjksIDUzLCA4MCwgNDgsCisxNSwgLTIsIC0yMSwgLTI5LCAtMTgsIC00OCwgLTUyLCAtMTIsIC0xMSwgLTIxLAorLTYsIC0zOCwgLTU1LCAtNjgsIC05LCAzMywgMjIsIDE5LCAyNSwgLTEsCistOCwgLTQ2LCAtNDksIC02NywgLTY0LCAxNiwgOCwgLTYsIDMyLCAxNSwKKzMsIC0yNSwgLTQ2LCAtNDYsIDM5LCA1MCwgMzQsIDIxLCA0NiwgMTQsCis4LCAtMzMsIC0zNywgLTY4LCAtODIsIDMxLCAzNCwgMTMsIDE5LCAtNiwKKzMzLCAwLCA1LCAtNywgLTMyLCAyLCAyMiwgLTMsIDM1LCAxNywKKy0yMywgLTYyLCAtOTEsIC02NCwgNiwgMywgMzYsIDI2LCA3LCAtMywKKy0xMiwgLTU0LCAtNjAsIDI2LCA0NiwgMTYsIDMwLCAyMiwgOCwgLTQsCistMjMsIC02MSwgLTQwLCAzMSwgNTgsIDczLCA4OCwgNzcsIDc0LCA0MSwKKy0yLCAtNDIsIC00OSwgMTMsIDUsIC0xNSwgMjIsIC00LCAyNiwgMjcsCistMTMsIC01NCwgLTM5LCAxOCwgMiwgLTgsIC0xMiwgMzQsIDU2LCAyMywKKy0yMCwgLTMxLCAyNywgMjMsIDI0LCAyOCwgMzksIDMzLCA0NywgMjcsCiszNiwgMTcsIC00LCAtMjAsIC0zMCwgLTYxLCAtOCwgMjAsIDAsIC0xNSwKKy0xMCwgLTUxLCAtNzIsIC04MiwgLTExMSwgLTczLCAzNCwgMjUsIDE5LCAzOCwKKy0xMCwgLTQ1LCAtNjMsIC01NSwgLTQ2LCAtNzUsIC00NSwgMzQsIDM0LCAxMiwKKzYsIC0xOCwgMjksIDI2LCA3LCAtOSwgMCwgNSwgMzgsIDIyLAorLTcsIC01MiwgLTE2LCA2OSwgNDMsIDI2LCAyMywgMiwgNTEsIDM0LAorLTEyLCAtNTEsIC01OSwgLTc4LCAtODgsIDE1LCAyMCwgMCwgLTE0LCAxMiwKKy0zLCAtMzYsIC01OSwgLTQ1LCA2MCwgNDksIDI4LCAyMCwgMTYsIC0xMywKKy0yOCwgLTcwLCAtOTAsIDksIDY3LCA0OCwgOTAsIDc3LCA3MCwgMzgsCistMTAsIC0zOSwgLTU4LCAtNTQsIDE1LCAtMTIsIDMsIDM1LCAyNywgLTMsCisxMiwgLTEsIDI4LCAyOSwgNTUsIDUzLCA4MCwgNjUsIDUxLCAyMywKKy0xNywgLTYxLCAtMzksIDc0LCA1NiwgNDMsIDc1LCA1MSwgNTgsIDM2LAorLTMwLCAtNzEsIC05MywgLTQzLCAtMjksIC0yNiwgNCwgLTE5LCAtMTQsIDM3LAorMywgLTEzLCAtMzEsIC0zOCwgMTEsIC01LCAtMjIsIC0xMSwgNDMsIDE0LAorLTI1LCAtNjUsIC04MCwgLTc5LCAtNzEsIDMsIDM3LCAzMiwgMjAsIDksCistMjAsIC02MCwgLTc3LCAtMjYsIDE4LCA0MywgNDQsIDI0LCAyMiwgLTMsCistNCwgLTQyLCAtMjIsIC0xOSwgLTQ1LCAtMzIsIC0zNSwgLTM5LCAtNDYsIDEsCistMjUsIC01OSwgLTI3LCAtMTAsIC03LCAtNCwgNywgMTMsIDI1LCAxMiwKKzgsIC0yNSwgLTMyLCAtNDcsIC03NCwgLTMyLCAyNywgNiwgMjUsIDcsCis0MSwgNDAsIDYyLCA2NCwgNjQsIDUwLCA1NCwgNDIsIDQ5LCAyNSwKKy0yMSwgLTYzLCAtODgsIC0yMSwgMTYsIC0zLCAtNCwgLTI2LCA1NywgMzgsCis4LCAtMjUsIC0zNCwgMiwgLTgsIC0yOCwgMiwgLTIyLCAxMiwgMjMsCistMTksIC00OSwgMTAsIDcxLCA4NCwgNzEsIDY2LCA0OCwgNDIsIDIyLAorLTIwLCAtNTgsIC04OSwgLTU3LCA2MiwgNDQsIDMzLCAzNiwgMjUsIC0xLAorLTIyLCAtNTUsIC0yNywgMSwgNDMsIDM3LCA0NiwgNTAsIDUxLCAyNiwKKzEsIC0zOCwgLTQ2LCAyMiwgMzQsIDQsIDIwLCAtMiwgMywgOSwKKy00LCAtNDIsIC00OSwgLTc1LCAtODksIC0yNCwgLTI1LCAxOSwgNzEsIDM5LAorNSwgLTI4LCAtNDUsIC00MywgLTYzLCAtNzUsIC0xNywgLTM4LCAxNCwgMzAsCistNCwgLTM2LCAtNjIsIC01OSwgLTI5LCAtNDMsIC00LCAtMTYsIDExLCAyMywKKy0xOSwgLTU3LCAtODIsIC0zOSwgMjYsIDIsIC0yLCAyMCwgMTEsIC0xMCwKKy0yOCwgLTY4LCAtOTIsIC03MCwgOSwgLTEsIC0xNSwgLTMwLCAxMSwgMzEsCisxLCAtMjIsIC00MSwgLTQ5LCAtMzAsIC01OCwgLTQ4LCA4LCA0LCAtOSwKKzM4LCA0MSwgMTA4LCAxMTUsIDk2LCA5OCwgMTAzLCA4NCwgODYsIDUxLAorMTUsIDEsIDU4LCA0NiwgMjYsIDYsIDE2LCAxOCwgNDEsIDI0LAorNCwgLTM0LCAtMTQsIC0yNywgLTQyLCAyMCwgMTgsIDIsIDIzLCAxLAorLTIyLCAtNTksIC04MywgLTcwLCAtMjIsIC00MiwgLTI2LCAyOSwgMjksIDE1LAorLTE0LCAtMzQsIDExLCAtMSwgLTIxLCAtMzUsIC0zLCAxLCAyOSwgMTYsCistMTYsIC01NywgLTc4LCAtNywgMTcsIC0xMywgOCwgLTEzLCAtNiwgMjIsCistMjIsIC0zMiwgLTIxLCAtMjAsIDIwLCAtNCwgMTAsIDEzLCAxMiwgLTQsCis4LCAtMzAsIC0zMCwgLTQ2LCAtNzEsIC00LCAzLCAtMTEsIDQsIC0xMSwKKzE2LCA1LCAtMTUsIC0yMSwgMywgLTIzLCAtMjUsIC0xOSwgLTI4LCAtMzIsCistMjgsIC02OCwgLTk4LCAtMTAxLCAtMzQsIDE5LCA3MSwgNTIsIDQ5LCAzMCwKKy0xOCwgLTU3LCAtODIsIC01NiwgLTU2LCAtNjYsIDE1LCAxMiwgMSwgMjksCistMjEsIC02MiwgLTc2LCAtMjcsIC0zMywgLTM4LCAxOCwgMzAsIDU0LCAzMiwKKzMsIC0zNiwgLTEwLCAtMTcsIC0zNCwgLTMsIC04LCAzMiwgNjMsIDI3LAorMSwgLTMwLCAtNDQsIC0yMCwgLTEzLCAtNDksIC0yNSwgMywgLTE0LCAtMTgsCistMjYsIC02OCwgLTgwLCAtNDYsIC0yOCwgMTcsIDQyLCAzNywgNTgsIDM0LAorMzAsIDI2LCA1NywgNTUsIDQ5LCAyNSwgMTYsIDMsIDI0LCAxMSwKKzM1LCAzNSwgNjcsIDU3LCA2MCwgODIsIDExNCwgMTAzLCA5MywgNTUsCisxOCwgLTgsIC0yMywgLTMyLCAtNTMsIC02OCwgMTUsIDExLCAtNiwgLTcsCistMiwgLTQzLCAtMjksIDAsIC0yOCwgLTUsIC01LCAtMTUsIDI1LCAtMSwKKzQsIC0xMywgLTM1LCAtNDUsIDE0LCAtNiwgLTIsIDE5LCAxNiwgLTksCistMzAsIC03MiwgLTkzLCAtOTMsIC03MywgLTEwLCAtMTUsIDYsIDMwLCA0NSwKKy0yMywgLTU4LCAtNTAsIC01NSwgLTc0LCAtNjAsIC0yMywgMCwgNiwgMjEsCistNCwgLTQwLCAtNjMsIC0yNCwgNywgLTE5LCA0LCAtMTgsIDI3LCAyOCwKKy0xMiwgMSwgODgsIDc2LCA3NCwgODgsIDkzLCA5MCwgODAsIDQ0LAorLTEzLCAtNTksIC00MywgNTIsIDI3LCAyMSwgMTUsIDEyLCA0MiwgMTEsCisyMiwgLTE0LCAtMTcsIC0zMywgLTU3LCAtNCwgNSwgLTE4LCA0MCwgMTgsCistMywgLTIzLCAtNDMsIC00NCwgOCwgLTE2LCAtMTQsIC00LCAtMjAsIC0yOSwKKzM1LCA0NSwgNzUsIDgyLCAxMTEsIDExNywgMTI1LCAxMDUsIDg5LCA1MSwKKy0zLCAtMzgsIC01NywgLTMwLCA3OSwgNzEsIDQ4LCAzMywgMzMsIDAsCistMTcsIC02MiwgLTU3LCA2NiwgNjcsIDM1LCAyOSwgNSwgMjIsIDE3LAorMywgLTMxLCAtMzQsIC0yMSwgLTQ0LCAtNDksIDQyLCAyMywgMjQsIDI2LAorLTIzLCAtNjIsIC03NCwgLTQ5LCAtMzAsIC0zMCwgLTM3LCAtNTAsIDksIDM1LAorLTE3LCAtNTcsIC03MSwgLTgxLCAtNDUsIDYxLCA1OCwgMzcsIDMxLCA5LAorMywgLTcsIDI4LCAxNCwgLTIsIDAsIDQwLCA0MSwgNTgsIDMzLAorLTExLCAtNTEsIC03NCwgLTE3LCA0MCwgMTIsIDgsIDEzLCAtNCwgLTIyLAorLTE2LCAtNDYsIC0zMSwgLTM1LCAtNDksIC00OSwgLTI2LCAtOSwgLTcsIC03LAorMTcsIC05LCAtMjQsIC00MSwgLTY4LCAtNzMsIDM4LCAzMywgMTksIDE2LAorLTE1LCAtNTAsIC00NywgLTE2LCAtMjQsIC0yMSwgNTksIDU2LCA1MywgMzAsCistMTQsIC01NCwgLTU3LCAyLCAtMTcsIC0zMywgLTM0LCAtMjEsIDQsIC00LAorLTIzLCAtNjIsIC05MywgLTcyLCA0OCwgMzEsIDIxLCA2LCAzLCAxNywKKy0xOCwgLTYzLCAtNzksIDQ0LCA2OCwgMzYsIDQ1LCAyMCwgNTcsIDM3LAorLTI5LCAtNzIsIC05OSwgLTExMSwgLTg2LCAtMzEsIDcsIDI1LCAzOSwgNTUsCistMTQsIC00OSwgLTUzLCAtNjMsIC04MCwgLTMxLCAyNCwgMTMsIDEsIC0xLAorLTksIC00NSwgLTU1LCAtMjcsIC0zMSwgLTYzLCAtMjMsIDI1LCAxMywgLTUsCistMjAsIC02MSwgLTgwLCA3LCA0NCwgMTYsIDU0LCA0MCwgMzIsIDE3LAorMjQsIDcsIC04LCAtNDMsIC02MiwgLTU0LCAtMTEsIDcsIDM1LCAyNywKKy0xMiwgLTU1LCAtNTksIC00OCwgLTY5LCAtNCwgLTEsIC0xMiwgNjgsIDM5LAorLTEyLCAtMzEsIDUyLCA2MywgNTMsIDM0LCAyOSwgMjIsIDM2LCAxOSwKKy0yNiwgLTY2LCAtOTcsIC03OSwgNTAsIDQxLCA0MCwgNDgsIDU0LCAyOCwKKy0yLCAtMzcsIC00MSwgLTIsIC0xMSwgLTMwLCAyOSwgMTYsIDQsIC0yLAorNDAsIDQ5LCA1NiwgMzcsIDM5LCA0MCwgNjQsIDU5LCA2NywgMzksCisxMSwgLTUsIDIwLCAxNCwgMjUsIDE2LCAyNSwgMjIsIDM3LCAxNywKKy0zLCAtNDMsIC00NiwgLTEwLCAtMzUsIC0zOCwgLTM1LCAtMzksIDY3LCA0MywKKy03LCAtNDcsIC0zMywgLTM5LCAtNjAsIC0xMiwgLTE4LCAxMSwgNDMsIDExLAorLTI1LCAtNjUsIC05MSwgLTc2LCAtOTEsIC04MSwgMCwgMTMsIDM0LCA1MCwKKy05LCAtNTAsIC01MiwgMTcsIDAsIC00LCA0MywgMTgsIDYzLCA0MiwKKy04LCAtMTUsIDE1LCA0MSwgNTYsIDM1LCA1MSwgNDUsIDUxLCAyOSwKKzAsIC0xNCwgLTI0LCAtMzYsIC00MywgLTcwLCAtMzksIDI3LCAzMywgNSwKKy0yNSwgLTYyLCAtODEsIC02NiwgLTEyLCAtMjYsIC0xNiwgLTQsIC0xMywgMjEsCistMjksIC02OCwgLTYwLCAtMjQsIC0zLCAxMSwgMTgsIDE5LCAzMCwgMjAsCisxLCAtMzUsIC00MiwgLTMwLCAtNTcsIC01MSwgMTMsIC0xNywgMywgMjIsCistOCwgLTI3LCAtMTIsIC0yLCAtNywgLTIxLCAzNiwgNDEsIDM0LCAxMiwKKy0xNywgLTU2LCAtNjIsIC03MiwgLTczLCAtMTcsIC0yNiwgOSwgMTYsIDEzLAorMTEsIC0yMSwgLTM3LCAtMywgMTYsIC0xNywgMSwgLTMsIC0xOCwgLTE5LAorMTUsIC0yMCwgLTE5LCAtMjIsIC00OSwgLTMwLCAtNywgLTI5LCAzLCAtMiwKKzE3LCAtNCwgMTEsIDYsIDUxLCA0MCwgMzYsIDM0LCA0OCwgMjIsCistMTksIC01NSwgLTI5LCAzNywgNjgsIDQ5LCA0NSwgMzMsIDQyLCAyMywKKzcsIC0zMCwgLTIyLCAzLCAtMjIsIC0zNiwgLTM2LCAtNTQsIDIwLCAyMiwKKzIwLCAyLCAtMTUsIC0zOSwgLTU5LCAtODUsIC0xMCwgMzcsIDIxLCAyLAorLTE1LCAtNTQsIC03NywgLTU0LCA3NCwgNzAsIDQ4LCAzMiwgNTEsIDIwLAorLTI1LCAtNjQsIC03MCwgLTc1LCAtNTIsIDE3LCA2LCAtMjAsIC0zMCwgMjYsCistMTMsIC01NSwgLTE1LCAzOSwgMTYsIDQyLCAzMCwgMzMsIDYyLCAyOCwKKy0yMSwgLTU2LCAtMzAsIC0zNSwgNiwgMTMsIC00LCAtMjksIDMzLCAyNywKKy0xNywgLTU1LCAtNzUsIC0zMSwgMywgLTI4LCAtMjYsIDE2LCAxOCwgLTQsCistMTMsIC00NCwgLTYwLCAtNTIsIC05LCAtMzYsIC0zOCwgMSwgLTksIC05LAorLTEyLCAtNTAsIC03NywgLTcwLCA0MywgNDcsIDI4LCAxMywgNDMsIDE2LAorLTEzLCAtNTcsIC04MCwgLTEwNCwgLTExMywgLTMwLCA0MywgNDUsIDUyLCAzOSwKKzMsIC0yOCwgLTQyLCAtMzcsIC01OCwgLTY3LCAyMywgNCwgMzgsIDMzLAorLTIxLCAtNjQsIC03NCwgLTIyLCA0MywgODMsIDgxLCA1NiwgNjIsIDMyLAorMzQsIDI2LCAyMywgOSwgMTQsIDE3LCAyNiwgMTYsIDM3LCAxOSwKKy01LCAtNDgsIC00OSwgLTc1LCAtNjUsIDksIC02LCA0MSwgNDUsIDE1LAorMzIsIDMwLCA2MywgODMsIDkwLCA5MSwgMTAwLCA4NCwgODUsIDUyLAorLTE5LCAtNTQsIC02OCwgLTcxLCAxMSwgMzAsIDEzLCAxLCA2MywgMzcsCis0NCwgNzYsIDk5LCA4NywgMTE3LCAxMTMsIDEwMywgNzcsIDY0LCAzMiwKKy0xNiwgLTQ1LCAtMTIsIDMwLCAyNywgMTUsIDU3LCA0OSwgNDIsIDIyLAorOSwgLTE1LCAtMzEsIC0yOCwgLTM2LCAtNjEsIC0xMywgLTE4LCAtMzMsIC01LAorLTEyLCAtNTUsIC04LCA4MiwgNjQsIDQ3LCA0MiwgMjEsIDI3LCA5LAorLTE1LCAtNTYsIC03NCwgLTEyLCAtMTksIC0yOCwgNywgLTE2LCA1MywgMzgsCistNywgLTQ1LCAtNjQsIC01NSwgLTc0LCAtODAsIDM1LCA0NSwgMjQsIDE1LAorLTI1LCAtNDgsIC0zNCwgLTQyLCAtNiwgLTI3LCAtOSwgOSwgMTMsIC03LAorLTI1LCAtNjUsIC04NCwgLTM1LCAzMCwgMTQsIDI0LCAzOSwgNDgsIDI4LAorLTIyLCAtNjIsIC04NiwgLTUxLCA2NCwgMTA0LCA5NCwgNjEsIDYyLCAzMSwKKzE2LCAtMTUsIC0yNSwgLTI4LCAtNTUsIC01NiwgLTEwLCAtMjMsIDUyLCAzNiwKKzEwLCAtMTAsIC0yMiwgLTQ2LCAtNzEsIC05MiwgLTQ1LCAtMTMsIDE2LCAyNiwKKy0yMiwgLTY1LCAtODQsIDE3LCA4NSwgNTUsIDY2LCA0OCwgNTUsIDMxLAorLTEsIC0zOCwgLTMzLCAtMjUsIC00OSwgLTE1LCAxOCwgLTEwLCA0MSwgMzAsCistMywgLTI0LCAtNDcsIC02MCwgLTMwLCAtNDYsIC0xNywgLTEzLCAtMjcsIDEsCistNywgLTQxLCAtNjEsIC01NCwgLTUwLCAtNzgsIC0yOCwgNSwgLTIsIDIwLAorMTcsIC0xMiwgLTI3LCAtNCwgOCwgLTI3LCAtNSwgMjMsIDE0LCAtMTIsCistMzYsIC04MSwgLTExMSwgLTc1LCAtMTcsIC05LCA5LCA5LCAzOSwgNDksCistMTMsIC01OSwgLTU0LCA2OCwgNTEsIDMyLCAzNSwgMTQsIDY0LCAzOCwKKy0xMSwgLTQ0LCAtNjksIC01NywgMTEsIC0xMSwgLTUsIDMsIC0xNiwgLTE1LAorMzQsIDM2LCA0MSwgMTYsIC04LCAtMjQsIDExLCAyMywgNDgsIDI4LAorLTE3LCAtNDIsIDgsIDE3LCA0NSwgNjksIDcxLCA1NSwgNDksIDIzLAorMywgLTMwLCAtNDYsIC02NCwgLTk1LCAtMTA5LCAyLCAzOSwgMTksIDE5LAorMjUsIC0xMywgLTcsIDE2LCAtMTEsIC01LCA4LCAtMTEsIDUyLCAzMywKKy04LCAtMzcsIC01NywgLTYwLCAxMywgNywgLTE0LCAtNCwgMjAsIC03LAorNywgLTMxLCA5LCA0NCwgMjAsIDIyLCAyOSwgMTAsIDUyLCAzMSwKKzMsIC0yMiwgLTM2LCAtNTMsIC04MCwgLTc3LCAtMzUsIC00MSwgNTQsIDQxLAorLTIxLCAtNTksIC04NywgLTgzLCAxMiwgNjksIDU3LCAzNiwgMzIsIDIsCis2LCAtMTQsIC0zNCwgLTQyLCAtNCwgLTMyLCAtMjcsIDEwLCA0LCAtMjAsCistMTEsIC01NiwgLTU5LCAyNSwgOCwgLTUsIC05LCAtMjYsIDY4LCA0MywKKzIyLCAxMywgNDAsIDM5LCA3MywgODEsIDk1LCA4OCwgODIsIDQ1LAorLTE4LCAtNjIsIC03OSwgMjgsIDYwLCAyOCwgMjksIDMsIDIzLCAyNSwKKzYsIC0zMSwgLTM5LCAtNTUsIC04NSwgLTMyLCA3LCAtMTcsIDQ4LCAzMCwKKzcsIC0yNCwgLTQyLCAtOCwgMzksIDEwLCA3LCAxMSwgMSwgLTIwLAorLTEsIC0zNiwgLTI2LCAtMzAsIC00OCwgMiwgNDYsIDI2LCAzNSwgMTQsCistMTcsIC01NywgLTU2LCAtMTAsIC00LCAyNiwgMjIsIDYsIC00LCAtMTYsCistMTgsIC01NSwgLTU5LCAtNjcsIC04NiwgLTUwLCAzLCAyOSwgMjksIDE2LAorLTI1LCAtNjEsIC0zMywgMiwgMjYsIDI1LCAyMywgMTAsIDI0LCAxNiwKKzI2LCAxNSwgLTgsIC0yMCwgNiwgLTIxLCAtMTYsIDMsIDAsIC0yMiwKKzEzLCAtMTcsIC0yNiwgLTEyLCAtMzEsIC00OCwgMTUsIC0zLCAxLCAxNCwKKzQsIC0yNywgLTMzLCAtMjEsIC0yOSwgLTUzLCAtNTIsIC02NCwgLTQyLCAyMiwKKy0xMSwgLTQxLCAtNDIsIC00MCwgLTQyLCAtNjQsIDAsIDQ4LCA1MCwgMTksCistMTMsIC00NywgLTQyLCAtNTYsIC01MCwgMTAsIDMsIC05LCAtMzAsIC0xNiwKKy00LCAtNDcsIC0xMiwgMTQsIC0xMywgMjEsIDEzLCA2LCA3MywgNDAsCistMTUsIC01MCwgLTYzLCAtNDEsIC0zMSwgLTU1LCAtNjAsIC0xMywgMjgsIDE1LAorLTYsIC01MCwgLTU2LCAtODEsIC05NSwgMzAsIDI5LCAyMSwgNzEsIDM1LAorLTE0LCAtNTgsIC02NSwgMzcsIDQwLCA5LCAxOCwgLTEwLCAtNCwgMjAsCiszMSwgMzMsIDc5LCAxMDYsIDExOSwgMTAzLCAxMDAsIDc3LCA2NCwgMzMsCisxNCwgNywgNTYsIDgxLCA5NywgODUsIDg1LCA2MSwgNDUsIDIwLAorLTI0LCAtNjYsIC03NCwgLTUxLCAtMTcsIDE2LCA1LCAtMjEsIDIyLCAyNiwKKy0xLCAtMjUsIC0zOCwgLTI0LCAtMiwgLTM1LCAtMjYsIDIxLCAzNCwgMSwKKzIwLCAxNSwgNzUsIDU5LCAzOSwgMjYsIDQ4LCA0MywgNTAsIDI5LAorMjYsIDEsIC0xNSwgLTQsIC05LCAtMzgsIDksIDIsIC05LCAtOCwKKzIwLCAxNCwgMTksIDEzLCAyLCAtMTYsIDI0LCAyNSwgMTksIDMsCistOCwgLTQxLCAtNTgsIC03OCwgLTEwOSwgLTEwNiwgLTI3LCA5LCA1MywgNDYsCisxNywgNSwgLTEzLCAtMjUsIC0yNCwgLTU0LCAtMjAsIDIsIC0yMSwgLTI1LAorLTExLCAtNTAsIC00OCwgMTksIDEwLCAtNywgNDYsIDI2LCAyNCwgMTcsCistMjgsIC02OCwgLTY5LCAtNTAsIC00OSwgLTMzLCAtNywgMTAsIDIwLCAyMSwKKzQsIC0zNiwgLTIxLCAzOCwgMTksIDEsIDI1LCAtMywgMjAsIDIyLAorLTE4LCAtNTgsIC04NywgLTQ0LCA4MiwgNzMsIDQ5LCAzMSwgMTksIC03LAorLTIxLCAtNjEsIC03OCwgLTQ0LCAtNTgsIC02NiwgLTksIC0yMywgMTAsIDQwLAorLTI1LCAtNjYsIC03NiwgLTMzLCAtMzMsIDYsIDE2LCAtNiwgLTIxLCA1LAorLTI3LCAtNjksIC03NywgNSwgLTIsIC03LCA2LCA5LCAyNCwgNiwKKzEsIC00MSwgLTQxLCAtNTgsIC03OSwgMjUsIDY5LCA0MywgNjgsIDM2LAorLTI4LCAtNjcsIC04NSwgLTcxLCAtMzQsIDAsIDE0LCAxMiwgLTIsIDQsCistMiwgLTMzLCAtNTUsIC0zNywgMzcsIDI1LCA2LCA2LCAyOSwgLTQsCistOCwgLTI1LCAtMTEsIC05LCA0MCwgMjMsIDE3LCAyNSwgMzcsIDEyLAorLTIxLCAtMjcsIDUyLCA2MCwgNDcsIDU4LCA3NiwgNzAsIDY5LCAzOCwKKzIzLCAxNSwgMjIsIC04LCAtMzIsIC01MCwgLTEwLCAzLCAzMSwgMjEsCistMTAsIC00NCwgLTY3LCAtNjEsIC0yOSwgLTU0LCA4LCAzOSwgMjEsIDQsCiszMSwgMTgsIDMwLCAzNiwgNDYsIDI4LCA1MCwgNDIsIDM1LCAxMywKKy0yMSwgLTU3LCAtMjQsIC0xNiwgLTE1LCAxNCwgMywgLTI1LCAtMTcsIDIwLAorMjMsIDYsIDI0LCAzNSwgOTAsIDcyLCA2NCwgNTUsIDU1LCAyMywKKzcsIC0yOCwgLTQyLCAtMTksIC0zNiwgLTUwLCAtMTUsIC00MCwgMjksIDI4LAorLTIxLCAtNTksIC02NiwgLTU5LCAtNiwgODUsIDgzLCA1MywgNTQsIDI2LAorMiwgLTIwLCAtNDIsIC01MiwgLTI3LCAtNDksIDUsIDksIC05LCAtOCwKKy0xOCwgLTU2LCAtODQsIC03MiwgMjQsIDUxLCAzMiwgMjAsIDEzLCAtMTAsCistMTMsIC01MywgLTY0LCAtMzksIC02MywgLTQwLCAyNCwgMCwgMzQsIDI5LAorMCwgLTMxLCAtNDUsIC02MywgLTkwLCAtNTMsIDMsIC0xOCwgLTksIDI0LAorLTEzLCAtNTcsIC03MSwgMjcsIDE5LCAtMywgMjUsIC0zLCA0NSwgMzUsCisxMiwgLTksIC0yNiwgLTQwLCAtNTEsIC03OCwgLTI0LCAxMSwgLTksIC02LAorLTEyLCAtNDksIC00NSwgLTMzLCAtNTAsIC00OCwgLTQ2LCAtNTIsIDIsIDI1LAorLTE0LCAtNTYsIC04NCwgLTEwOCwgLTEyMiwgLTUwLCA0LCAyMiwgNDIsIDUzLAorLTYsIC00NCwgLTU0LCAtMjgsIC00MSwgLTYxLCAxOSwgMjUsIDYsIDEsCistMzIsIC03NSwgLTk1LCAtMzgsIC0xLCAtMTUsIDcsIDE0LCAyMywgMjMsCisxMSwgMTIsIDM3LCAzMCwgMzgsIDUxLCA4MCwgODAsIDgyLCA0NywKKy0xOSwgLTU2LCAtNjksIC04MiwgLTk4LCAtNjQsIC0yOSwgMiwgMjgsIDQyLAorLTE4LCAtNDksIDMsIDM0LCA0MSwgMzksIDMyLCAxOCwgMjEsIDcsCistOCwgMjMsIDM5LCAzMCwgMzAsIDI3LCA0MSwgMzYsIDQ0LCAyMywKKy0xNiwgLTQ5LCAtNjksIC00NiwgMSwgLTI3LCA0MSwgNDgsIDM1LCAxNSwKKzYsIC0zMiwgLTM2LCA1LCAtMTcsIC0zMCwgMiwgLTE2LCA1MSwgMzUsCistMjMsIC02NCwgLTkxLCAtMjEsIDcxLCA0NCwgNTIsIDQ0LCA0MCwgMjEsCistMjIsIC01NSwgLTQwLCAtMjAsIDYyLCA1MiwgMzgsIDI5LCAyNywgNSwKKy0yNywgLTY5LCAtNzUsIC02LCAtOCwgMywgLTIsIC0zMCwgLTQyLCAxMywKKzIsIC0yOSwgLTQyLCAtMTAsIDI5LCAyLCAxNSwgMzAsIDI2LCAwLAorLTI3LCAtNjksIC04NSwgLTc1LCAtNTQsIC04LCAtMTQsIC0zMSwgMTYsIDQyLAorLTIsIC00NCwgLTU0LCAtNzUsIC0xMDEsIC02LCA0LCAtMywgMzIsIDEzLAorNywgLTMsIC0yMiwgLTQzLCAtMTQsIC0yNywgLTI0LCAtMTEsIC0xNCwgLTEyLAorLTE4LCAtNTcsIC04NSwgLTY2LCA0NywgODYsIDc1LCA0NSwgNDIsIDEwLAorMTgsIDMsIDM5LCA3NiwgODAsIDQ4LCA0OCwgNDEsIDQ0LCAyMSwKKy0xMywgLTUxLCAtNzMsIC0yMiwgLTE1LCAtNDEsIDMsIC00LCAtMjIsIDMsCistMTAsIC01MCwgLTYzLCAtOSwgLTIzLCAtNDIsIC02LCAtMzAsIDExLCAyOCwKKzE1LCAtMTEsIC0yOSwgLTM5LCAtNTcsIC03MSwgLTIzLCAtNDAsIC0zMywgMjAsCistMiwgLTQwLCAtNDgsIC01LCAtMjEsIC0yNSwgMzEsIDcsIDUzLCAzNSwKKy0xOSwgLTYzLCAtNzIsIDM5LCAzNCwgMTYsIDM3LCAxNywgNTQsIDMxLAorLTE4LCAtNDksIC0yOCwgLTI3LCAtNDAsIC0yOSwgNCwgNCwgMTksIDExLAorLTEsIC00MywgLTQxLCAyNCwgMTUsIC0xMiwgLTQsIC0zMSwgLTQsIDIzLAorLTExLCAtNDYsIC03OSwgLTc0LCAzNCwgMjEsIDksIDE1LCAzLCAtMTMsCistMTYsIC01MSwgLTU2LCAtNTUsIDgsIDYyLCA1MCwgMzAsIDQzLCAxNCwKKy0xLCAtMjUsIC0yNywgLTMyLCAtNDYsIC02MiwgLTY2LCAtMzYsIDUzLCAzMiwKKy0xMiwgLTQ5LCAtNzcsIC01MCwgMiwgLTIxLCAyMywgNiwgMTQsIDIxLAorLTUsIC00NywgLTU4LCAtNzcsIC0xMDUsIC0xNCwgMzAsIDksIDczLCA0NCwKKy0yNCwgLTUyLCAtNCwgMTAsIDEzLCAxMywgMjcsIDI3LCA0MiwgMjQsCistMTAsIC0zOCwgLTI3LCAtMTUsIC0yNCwgLTUyLCAtNTMsIDEsIDE0LCAtNiwKKy0xNywgLTQ1LCAtMTMsIDIsIDE5LCA1MywgODMsIDc5LCA3NiwgNDMsCistMjEsIC02MiwgLTg2LCAtNDgsIDQwLCAxNywgMTQsIC05LCA0MCwgMzAsCistMSwgLTMyLCAtNTEsIC0zMywgLTMsIC0zNSwgMiwgMTcsIC0yLCAtMTIsCistMjEsIC02MCwgLTg1LCAtNzAsIDMzLCA3MywgNTgsIDM3LCA2NywgMzYsCistMSwgLTQ1LCAtMzksIDM3LCAxNywgMywgMTgsIC04LCA1MywgMzUsCistOCwgLTQ3LCAtNjUsIC02MSwgLTg3LCAtOTMsIDksIDksIDIsIDMzLAorLTEzLCAtNTUsIC01NiwgLTE5LCAtMjksIDE0LCAxNywgNiwgNTUsIDI4LAorNSwgMSwgLTcsIC0yMywgLTI2LCAtNTYsIC0zOSwgMTQsIDExLCAtMTMsCistMjgsIC02OSwgLTg5LCAtNzQsIC04MywgLTQ1LCAxLCAwLCAxNiwgNDUsCistMywgNSwgOTEsIDEwNCwgMTE5LCAxMTEsIDk3LCA3NiwgNzIsIDM5LAorMTksIDUsIC0xMiwgLTM0LCAtNDEsIC03MiwgLTY3LCAxNCwgMjEsIDEsCistMTcsIC00OSwgMTUsIDI3LCAxMywgNiwgMiwgMTIsIDI3LCAxMCwKKy0xMCwgLTMwLCAxOCwgMzYsIDkzLCA4NywgODcsIDY5LCA1OCwgMjYsCiszNywgMzIsIDY0LCA1NCwgNTMsIDY3LCA3OCwgNzMsIDgwLCA0OCwKKzQ4LCA0NiwgMzgsIDksIC0xLCA4LCA0NywgNDQsIDU4LCAzMywKKy0yMywgLTYxLCAtODgsIC03NiwgMjcsIDE0LCA5LCAzNiwgMzYsIDEwLAorLTI0LCAtNjYsIC04OCwgLTk3LCAtNTUsIDIwLCAxOSwgMTYsIDUyLCAzMSwKKzQsIC0xNiwgLTEsIC04LCAyLCAwLCAxNSwgMTMsIDI5LCAxNCwKKy05LCAtNDQsIC02NiwgLTcyLCA4LCAzMiwgMzcsIDM4LCA0NiwgMTYsCistMjIsIC02NSwgLTYyLCAzMCwgMjIsIDUxLCA1NywgNDUsIDY4LCAzOCwKKy00LCAtNDIsIC01MywgLTMzLCAtNTQsIC01MywgLTQsIC0xOCwgNjIsIDQwLAorLTUsIC0zNywgLTYxLCAtNDEsIDM1LCAxNSwgLTIsIC0zLCAtMTIsIC0yOCwKKy0xOCwgLTY1LCAtNTUsIDkwLCA4MCwgNDksIDQ0LCAyMSwgNTksIDM2LAorNSwgLTE2LCAtMzEsIC0zMiwgLTM3LCAtNjIsIC0xOSwgLTExLCA5LCAxNiwKKy0yMiwgLTYwLCAtNjcsIC01MSwgLTYxLCAtMzUsIC01LCAtMTgsIC0yNywgMjQsCistMTgsIC01NSwgLTM5LCAtNDIsIC00MCwgMjAsIDI1LCA2LCA2LCA3LAorMCwgLTI1LCAtNDIsIC01MCwgLTU5LCAtODQsIC0zMSwgLTEzLCAtMjIsIDE3LAorLTMyLCAtNzMsIC0xMDAsIC04OSwgLTIxLCAtMTAsIDE4LCAzOCwgMzEsIDIzLAorLTE1LCAtNTQsIC01NywgLTEzLCAtMTgsIC00MSwgLTMyLCAxNywgNTAsIDIxLAorLTE2LCAtNTcsIC03MSwgLTEwLCAtOCwgLTI2LCAtMzgsIC00NywgNDIsIDI1LAorLTE3LCAtNTgsIC04MiwgLTcsIDMzLCAzLCAzMCwgMTEsIDEzLCAyNCwKKy0yMywgLTYxLCAtOTcsIC04MywgODIsIDgxLCA1NywgMzksIDMxLCAyLAorMjYsIDMyLCAxMDQsIDg2LCA2MiwgNTUsIDc3LCA3MCwgNzQsIDQzLAorLTgsIC0yOSwgLTMzLCAtNTIsIC03NCwgLTczLCAtMTcsIDE0LCAzOSwgMjUsCistMjEsIC02MCwgLTY4LCAtMjIsIDQzLCAzNywgNTEsIDU0LCA2NCwgMzYsCistNSwgLTMwLCAtNTAsIC01MiwgMjIsIDcsIDEwLCAxMywgMCwgLTIwLAorLTE1LCAtNTMsIC02MSwgLTM0LCAtNTAsIC0yNSwgMTUsIDYsIDAsIC0xNCwKKy0xMCwgLTUxLCAtNjAsIDIwLCA3NywgNTAsIDM0LCAyMiwgOCwgLTgsCistOCwgLTQ1LCAtNTIsIC01OSwgLTc2LCAtMzUsIC00MywgLTQ5LCA0NywgNDAsCis0MSwgNDQsIDUzLCA0MCwgNDEsIDMwLCAzOCwgMzEsIDQ2LCAyNCwKKzE5LCAzLCAtMTUsIC0yNiwgLTE2LCAtNDUsIC0xMywgMjQsIDE4LCAtNSwKKy0zLCAtMzksIC01NCwgLTM1LCAtNDksIC03MCwgMiwgLTYsIC0xOSwgMTUsCistMTMsIC01MywgLTM2LCA2LCAtMywgNDUsIDUwLCAzMCwgMzMsIDEwLAorMTUsIC0yNSwgLTE2LCAtNCwgLTMyLCA3LCAyMywgNiwgNjcsIDM2LAorLTIxLCAtNTgsIC04NywgLTcxLCAxMCwgLTEyLCAtMTYsIDE5LCAxMCwgMCwKKzksIC0xNSwgLTYsIDI1LCAzMSwgNywgMzAsIDI4LCAyMCwgMiwKKzIsIC0yOCwgLTQyLCAtNTAsIC02NywgLTc1LCAxMiwgMTIsIC00LCA4LAorLTE3LCAtNjMsIC01OCwgNTYsIDQ5LCAzNiwgNjAsIDM4LCAzNywgMTQsCistMTMsIC00OCwgLTM4LCAtMjksIC00NCwgLTI1LCAtMjAsIC0zMywgMzgsIDIwLAorMiwgLTM3LCAtNDIsIC0xLCAtMTgsIC00MiwgMywgLTE3LCAtMTksIDEyLAorLTIwLCAtNjAsIC03MywgLTcsIDEyLCAtMTMsIC0yMiwgLTM4LCA0LCAxMCwKKy04LCAtNDEsIC02MywgLTY1LCA0MiwgNjMsIDQ1LCAzMSwgMzEsIDAsCistNCwgLTQ2LCAtMzgsIC05LCAtMzUsIDE1LCA1MCwgMjcsIDY3LCAzOSwKKzMsIC03LCAtMTMsIC0zNCwgLTUxLCAtNDcsIDksIDM5LCA1NCwgMjksCistMjksIC03MSwgLTg5LCAtNTIsIC0zOSwgLTYsIDMsIDIsIDM4LCAyOCwKKy0xNCwgLTQyLCAtMTMsIC0xNSwgLTE5LCAwLCAyMCwgMTIsIDM3LCAyNSwKKzExLCAtMjYsIC0yNCwgLTQwLCAtNjUsIC0xMSwgLTEzLCAtMjcsIDY1LCAzNywKKzAsIC0zMSwgLTQ2LCAtMTcsIC0yMSwgLTQ1LCAxMSwgLTIsIDI1LCAyNCwKKzUxLCA5MSwgMTAyLCA4NywgODUsIDYzLCA1NywgNDIsIDQ4LCAyMywKKy00LCAtMzQsIC01NiwgLTcwLCAtMTAsIC0xNCwgNCwgMTgsIDMsIC04LAorLTIzLCAtNTksIC0zOSwgLTQ0LCAtNDIsIC0xNCwgLTEwLCAtMjMsIC00LCAxNywKKy0yLCA0LCAzNSwgNjMsIDY5LCA3NSwgODIsIDYzLCA3OCwgNDgsCistMTcsIC01NSwgLTYwLCAtMywgLTQsIC0xOSwgNCwgLTQsIC0xOCwgLTI5LAorMiwgLTIwLCAtMzYsIC01MCwgLTMyLCAtNTksIC0xNiwgMzAsIDE2LCAtNiwKKy0xMiwgLTQ3LCAyNCwgNjgsIDQ1LCA0NiwgNDEsIDMyLCA2NSwgMzcsCistNCwgLTQwLCAtNTQsIC02NywgLTk2LCAtNjYsIC05LCAtMjUsIDQyLCAzOCwKKy0xNSwgMTMsIDU4LCA1OCwgODQsIDEwNCwgMTE5LCAxMDQsIDg5LCA1MSwKKy0xNSwgLTI0LCAtOSwgLTI0LCAtMjcsIC01MCwgLTcsIDI4LCAyOSwgNiwKKy03LCAtMzMsIC0zNSwgLTQ5LCAtNjUsIC01MywgLTM3LCAtMTAsIDMzLCAxNCwKKzMxLCAxOSwgNDYsIDcyLCA2NywgNDUsIDgzLCA2OCwgNjMsIDQxLAorLTE0LCAtNTMsIC01OSwgLTE3LCA1NSwgNzksIDY0LCAzOSwgNDMsIDEwLAorfTsKKworY29uc3Qgc2lnbmVkIGNoYXIgY2Ria19sc3AyX3ZsYnJbMTYwXT17CistMjAsIC0zMCwgLTI0LCAxNywgNywgLTEzLCAtMjEsIDYxLCA1NiwgMTYsCisxMiwgMSwgMTAsIDc3LCAzMiwgMywgNywgMywgLTI1LCAtMzEsCistNCwgMiwgLTM2LCAtODMsIDE4LCA1LCAtNSwgNSwgMTEsIDIzLAorLTIsIC0xLCAtMTEsIC0xMiwgLTIwLCAtMjgsIDY4LCA1MCwgLTE3LCAtMjAsCis1LCAyLCAxLCAyMCwgMTcsIDQsIC01MiwgLTY2LCAzNiwgMjQsCistNCwgLTEwLCA3LCAtMTUsIC0zMiwgODAsIDM3LCA4LCAtMTMsIC0yOSwKKzMzLCAzNywgMjgsIDE1LCA4LCAxNCwgMzUsIDE4LCA1MCwgMzYsCistNCwgLTEsIDQsIC03LCAzLCAzLCAtMTEsIC01OCwgLTc1LCAxMywKKzEzLCAyMSwgMjQsIC0xMSwgLTEyLCAtMzgsIC03MiwgMzMsIDE1LCAtMTIsCistNDQsIC0xNywgODMsIDIxLCAyLCA3LCAwLCA0LCAwLCAtMSwKKy0yNSwgLTQyLCAtNTEsIDMzLCAyMCwgMTUsIDMwLCAtMTMsIDksIDMyLAorNiwgMiwgLTgsIDcsIC0zOCwgLTc3LCA2LCAtMTMsIC03LCAzMiwKKzQ4LCA1NywgMzIsIC0xMiwgLTEwLCAtNCwgMiwgLTE1LCAtMjksIC0yOSwKKzIsIDEwLCAtOSwgLTE2LCA3OSwgNDQsIDcsIDEyLCAtNSwgLTE4LAorLTIzLCAtMjksIC0zNSwgLTMsIC0zLCAtMTgsIC0zNCwgLTMsIC0zOSwgLTUwLAorLTUsIC0xMCwgLTgsIC0zNywgLTc2LCAxMSwgLTQsIC0xOSwgMzAsIDE2LAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9scGMuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2xwYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNWQzODIKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9scGMuYwpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAgQ29weXJpZ2h0IDE5OTIsIDE5OTMsIDE5OTQgYnkgSnV0dGEgRGVnZW5lciBhbmQgQ2Fyc3RlbiBCb3JtYW5uLAorICBUZWNobmlzY2hlIFVuaXZlcnNpdGFldCBCZXJsaW4KKworICBBbnkgdXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgaXMgbm90CisgIHJlbW92ZWQgYW5kIHRoYXQgbmVpdGhlciB0aGUgYXV0aG9ycyBub3IgdGhlIFRlY2huaXNjaGUgVW5pdmVyc2l0YWV0IEJlcmxpbgorICBhcmUgZGVlbWVkIHRvIGhhdmUgbWFkZSBhbnkgcmVwcmVzZW50YXRpb25zIGFzIHRvIHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzCisgIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSBub3IgYXJlIGhlbGQgcmVzcG9uc2libGUgZm9yIGFueSBkZWZlY3RzIG9mCisgIHRoaXMgc29mdHdhcmUuICBUSEVSRSBJUyBBQlNPTFVURUxZIE5PIFdBUlJBTlRZIEZPUiBUSElTIFNPRlRXQVJFLgorCisgIEFzIGEgbWF0dGVyIG9mIGNvdXJ0ZXN5LCB0aGUgYXV0aG9ycyByZXF1ZXN0IHRvIGJlIGluZm9ybWVkIGFib3V0IHVzZXMKKyAgdGhpcyBzb2Z0d2FyZSBoYXMgZm91bmQsIGFib3V0IGJ1Z3MgaW4gdGhpcyBzb2Z0d2FyZSwgYW5kIGFib3V0IGFueQorICBpbXByb3ZlbWVudHMgdGhhdCBtYXkgYmUgb2YgZ2VuZXJhbCBpbnRlcmVzdC4KKworICBCZXJsaW4sIDI4LjExLjE5OTQKKyAgSnV0dGEgRGVnZW5lcgorICBDYXJzdGVuIEJvcm1hbm4KKworCisgICBDb2RlIG1vZGlmaWVkIGJ5IEplYW4tTWFyYyBWYWxpbgorCisgICBTcGVleCBMaWNlbnNlOgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgImxwYy5oIgorCisjaWZkZWYgQkZJTl9BU00KKyNpbmNsdWRlICJscGNfYmZpbi5oIgorI2VuZGlmCisKKy8qIExQQyBhbmFseXNpcworICoKKyAqIFRoZSBuZXh0IHR3byBmdW5jdGlvbnMgY2FsY3VsYXRlIGxpbmVhciBwcmVkaWN0aW9uIGNvZWZmaWNpZW50cworICogYW5kL29yIHRoZSByZWxhdGVkIHJlZmxlY3Rpb24gY29lZmZpY2llbnRzIGZyb20gdGhlIGZpcnN0IFBfTUFYKzEKKyAqIHZhbHVlcyBvZiB0aGUgYXV0b2NvcnJlbGF0aW9uIGZ1bmN0aW9uLgorICovCisKKy8qIEludmVudGVkIGJ5IE4uIExldmluc29uIGluIDE5NDcsIG1vZGlmaWVkIGJ5IEouIER1cmJpbiBpbiAxOTU5LgorICovCisKKy8qIHJldHVybnMgbWluaW11bSBtZWFuIHNxdWFyZSBlcnJvciAgICAqLworc3B4X3dvcmQzMl90IF9zcHhfbHBjKAorc3B4X2NvZWZfdCAgICAgICAqbHBjLCAvKiBvdXQ6IFswLi4ucC0xXSBMUEMgY29lZmZpY2llbnRzICAgICAgKi8KK2NvbnN0IHNweF93b3JkMTZfdCAqYWMsICAvKiBpbjogIFswLi4ucF0gYXV0b2NvcnJlbGF0aW9uIHZhbHVlcyAgKi8KK2ludCAgICAgICAgICBwCispCit7CisgICBpbnQgaSwgajsgIAorICAgc3B4X3dvcmQxNl90IHI7CisgICBzcHhfd29yZDE2X3QgZXJyb3IgPSBhY1swXTsKKworICAgaWYgKGFjWzBdID09IDApCisgICB7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgcDsgaSsrKQorICAgICAgICAgbHBjW2ldID0gMDsKKyAgICAgIHJldHVybiAwOworICAgfQorCisgICBmb3IgKGkgPSAwOyBpIDwgcDsgaSsrKSB7CisKKyAgICAgIC8qIFN1bSB1cCB0aGlzIGl0ZXJhdGlvbidzIHJlZmxlY3Rpb24gY29lZmZpY2llbnQgKi8KKyAgICAgIHNweF93b3JkMzJfdCByciA9IE5FRzMyKFNITDMyKEVYVEVORDMyKGFjW2kgKyAxXSksMTMpKTsKKyAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspIAorICAgICAgICAgcnIgPSBTVUIzMihycixNVUxUMTZfMTYobHBjW2pdLGFjW2kgLSBqXSkpOworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICByID0gRElWMzJfMTYocnIrUFNIUjMyKGVycm9yLDEpLEFERDE2KGVycm9yLDgpKTsKKyNlbHNlCisgICAgICByID0gcnIvKGVycm9yKy4wMDMqYWNbMF0pOworI2VuZGlmCisgICAgICAvKiAgVXBkYXRlIExQQyBjb2VmZmljaWVudHMgYW5kIHRvdGFsIGVycm9yICovCisgICAgICBscGNbaV0gPSByOworICAgICAgZm9yIChqID0gMDsgaiA8IGk+PjE7IGorKykgCisgICAgICB7CisgICAgICAgICBzcHhfd29yZDE2X3QgdG1wICA9IGxwY1tqXTsKKyAgICAgICAgIGxwY1tqXSAgICAgPSBNQUMxNl8xNl9QMTMobHBjW2pdLHIsbHBjW2ktMS1qXSk7CisgICAgICAgICBscGNbaS0xLWpdID0gTUFDMTZfMTZfUDEzKGxwY1tpLTEtal0scix0bXApOworICAgICAgfQorICAgICAgaWYgKGkgJiAxKSAKKyAgICAgICAgIGxwY1tqXSA9IE1BQzE2XzE2X1AxMyhscGNbal0sbHBjW2pdLHIpOworCisgICAgICBlcnJvciA9IFNVQjE2KGVycm9yLE1VTFQxNl8xNl9RMTMocixNVUxUMTZfMTZfUTEzKGVycm9yLHIpKSk7CisgICB9CisgICByZXR1cm4gZXJyb3I7Cit9CisKKworI2lmZGVmIEZJWEVEX1BPSU5UCisKKy8qIENvbXB1dGUgdGhlIGF1dG9jb3JyZWxhdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgLC0tLAorICogICAgICAgICAgICAgIGFjKGkpID0gPiAgeChuKSAqIHgobi1pKSAgZm9yIGFsbCBuCisgKiAgICAgICAgICAgICAgICAgICAgICBgLS0nCisgKiBmb3IgbGFncyBiZXR3ZWVuIDAgYW5kIGxhZy0xLCBhbmQgeCA9PSAwIG91dHNpZGUgMC4uLm4tMQorICovCisKKyNpZm5kZWYgT1ZFUlJJREVfU1BFRVhfQVVUT0NPUlIKK3ZvaWQgX3NweF9hdXRvY29ycigKK2NvbnN0IHNweF93b3JkMTZfdCAqeCwgICAvKiAgaW46IFswLi4ubi0xXSBzYW1wbGVzIHggICAqLworc3B4X3dvcmQxNl90ICAgICAgICphYywgIC8qIG91dDogWzAuLi5sYWctMV0gYWMgdmFsdWVzICovCitpbnQgICAgICAgICAgbGFnLCAKK2ludCAgICAgICAgICBuCispCit7CisgICBzcHhfd29yZDMyX3QgZDsKKyAgIGludCBpLCBqOworICAgc3B4X3dvcmQzMl90IGFjMD0xOworICAgaW50IHNoaWZ0LCBhY19zaGlmdDsKKyAgIAorICAgZm9yIChqPTA7ajxuO2orKykKKyAgICAgIGFjMCA9IEFERDMyKGFjMCxTSFIzMihNVUxUMTZfMTYoeFtqXSx4W2pdKSw4KSk7CisgICBhYzAgPSBBREQzMihhYzAsbik7CisgICBzaGlmdCA9IDg7CisgICB3aGlsZSAoc2hpZnQgJiYgYWMwPDB4NDAwMDAwMDApCisgICB7CisgICAgICBzaGlmdC0tOworICAgICAgYWMwIDw8PSAxOworICAgfQorICAgYWNfc2hpZnQgPSAxODsKKyAgIHdoaWxlIChhY19zaGlmdCAmJiBhYzA8MHg0MDAwMDAwMCkKKyAgIHsKKyAgICAgIGFjX3NoaWZ0LS07CisgICAgICBhYzAgPDw9IDE7CisgICB9CisgICAKKyAgIAorICAgZm9yIChpPTA7aTxsYWc7aSsrKQorICAgeworICAgICAgZD0wOworICAgICAgZm9yIChqPWk7ajxuO2orKykKKyAgICAgIHsKKyAgICAgICAgIGQgPSBBREQzMihkLFNIUjMyKE1VTFQxNl8xNih4W2pdLHhbai1pXSksIHNoaWZ0KSk7CisgICAgICB9CisgICAgICAKKyAgICAgIGFjW2ldID0gU0hSMzIoZCwgYWNfc2hpZnQpOworICAgfQorfQorI2VuZGlmCisKKworI2Vsc2UKKworCisKKy8qIENvbXB1dGUgdGhlIGF1dG9jb3JyZWxhdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgLC0tLAorICogICAgICAgICAgICAgIGFjKGkpID0gPiAgeChuKSAqIHgobi1pKSAgZm9yIGFsbCBuCisgKiAgICAgICAgICAgICAgICAgICAgICBgLS0nCisgKiBmb3IgbGFncyBiZXR3ZWVuIDAgYW5kIGxhZy0xLCBhbmQgeCA9PSAwIG91dHNpZGUgMC4uLm4tMQorICovCit2b2lkIF9zcHhfYXV0b2NvcnIoCitjb25zdCBzcHhfd29yZDE2X3QgKngsICAgLyogIGluOiBbMC4uLm4tMV0gc2FtcGxlcyB4ICAgKi8KK2Zsb2F0ICAgICAgICphYywgIC8qIG91dDogWzAuLi5sYWctMV0gYWMgdmFsdWVzICovCitpbnQgICAgICAgICAgbGFnLCAKK2ludCAgICAgICAgICBuCispCit7CisgICBmbG9hdCBkOworICAgaW50IGk7CisgICB3aGlsZSAobGFnLS0pIAorICAgeworICAgICAgZm9yIChpID0gbGFnLCBkID0gMDsgaSA8IG47IGkrKykgCisgICAgICAgICBkICs9IHhbaV0gKiB4W2ktbGFnXTsKKyAgICAgIGFjW2xhZ10gPSBkOworICAgfQorICAgYWNbMF0gKz0gMTA7Cit9CisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2xwYy5oIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbHBjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0ZGY5NgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2xwYy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiBKZWFuLU1hcmMgVmFsaW4gKi8KKy8qKgorICAgQGZpbGUgbHBjLmgKKyAgIEBicmllZiBGdW5jdGlvbnMgZm9yIExQQyAoTGluZWFyIFByZWRpY3Rpb24gQ29lZmZpY2llbnRzKSBhbmFseXNpcworKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgTFBDX0gKKyNkZWZpbmUgTFBDX0gKKworI2luY2x1ZGUgIm1pc2MuaCIKKwordm9pZCBfc3B4X2F1dG9jb3JyKAorICAgICAgICAgICAgICBjb25zdCBzcHhfd29yZDE2X3QgKiB4LCAgIC8qICBpbjogWzAuLi5uLTFdIHNhbXBsZXMgeCAgICovCisgICAgICAgICAgICAgIHNweF93b3JkMTZfdCAqYWMsICAgLyogb3V0OiBbMC4uLmxhZy0xXSBhYyB2YWx1ZXMgKi8KKyAgICAgICAgICAgICAgaW50IGxhZywgaW50ICAgbik7CisKK3NweF93b3JkMzJfdCAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm5zIG1pbmltdW0gbWVhbiBzcXVhcmUgZXJyb3IgICAgKi8KK19zcHhfbHBjKAorICAgIHNweF9jb2VmX3QgICAgICAgKiBscGMsIC8qICAgICAgWzAuLi5wLTFdIExQQyBjb2VmZmljaWVudHMgICAgICAqLworICAgIGNvbnN0IHNweF93b3JkMTZfdCAqIGFjLCAgLyogIGluOiBbMC4uLnBdIGF1dG9jb3JyZWxhdGlvbiB2YWx1ZXMgICovCisgICAgaW50IHAKKyAgICApOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbHBjX2JmaW4uaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2xwY19iZmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMxMGZmYgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2xwY19iZmluLmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNSBBbmFsb2cgRGV2aWNlcyAqLworLyoqCisgICBAZmlsZSBscGNfYmZpbi5oCisgICBAYXV0aG9yIEplYW4tTWFyYyBWYWxpbiAKKyAgIEBicmllZiBGdW5jdGlvbnMgZm9yIExQQyAoTGluZWFyIFByZWRpY3Rpb24gQ29lZmZpY2llbnRzKSBhbmFseXNpcyAoQmxhY2tmaW4gdmVyc2lvbikKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjZGVmaW5lIE9WRVJSSURFX1NQRUVYX0FVVE9DT1JSCit2b2lkIF9zcHhfYXV0b2NvcnIoCitjb25zdCBzcHhfd29yZDE2X3QgKngsICAgLyogIGluOiBbMC4uLm4tMV0gc2FtcGxlcyB4ICAgKi8KK3NweF93b3JkMTZfdCAgICAgICAqYWMsICAvKiBvdXQ6IFswLi4ubGFnLTFdIGFjIHZhbHVlcyAqLworaW50ICAgICAgICAgIGxhZywgCitpbnQgICAgICAgICAgbgorICAgICAgICAgICAgICAgICAgKQoreworICAgc3B4X3dvcmQzMl90IGQ7CisgICBjb25zdCBzcHhfd29yZDE2X3QgKnhzOworICAgaW50IGksIGo7CisgICBzcHhfd29yZDMyX3QgYWMwPTE7CisgICBzcHhfd29yZDMyX3QgYWMzMlsxMV0sICphYzMydG9wOworICAgaW50IHNoaWZ0LCBhY19zaGlmdDsKKyAgIGFjMzJ0b3AgPSBhYzMyK2xhZy0xOworICAgaW50IGxhZ18xLCBOX2xhZzsKKyAgIGludCBuc2hpZnQ7CisgICBsYWdfMSA9IGxhZy0xOworICAgTl9sYWcgPSBuLWxhZ18xOworICAgZm9yIChqPTA7ajxuO2orKykKKyAgICAgIGFjMCA9IEFERDMyKGFjMCxTSFIzMihNVUxUMTZfMTYoeFtqXSx4W2pdKSw4KSk7CisgICBhYzAgPSBBREQzMihhYzAsbik7CisgICBzaGlmdCA9IDg7CisgICB3aGlsZSAoc2hpZnQgJiYgYWMwPDB4NDAwMDAwMDApCisgICB7CisgICAgICBzaGlmdC0tOworICAgICAgYWMwIDw8PSAxOworICAgfQorICAgYWNfc2hpZnQgPSAxODsKKyAgIHdoaWxlIChhY19zaGlmdCAmJiBhYzA8MHg0MDAwMDAwMCkKKyAgIHsKKyAgICAgIGFjX3NoaWZ0LS07CisgICAgICBhYzAgPDw9IDE7CisgICB9CisgICAKKyAgIHhzID0geCtsYWctMTsKKyAgIG5zaGlmdCA9IC1zaGlmdDsKKyAgIF9fYXNtX18gX192b2xhdGlsZV9fIAorICAgKAorICAgICAgICAgIlAyID0gJTA7XG5cdCIKKyAgICAgICAgICJJMCA9IFAyO1xuXHQiIC8qIHggaW4gSTAgKi8KKyAgICAgICAgICJCMCA9IFAyO1xuXHQiIC8qIHggaW4gQjAgKi8KKyAgICAgICAgICJSMCA9ICUzO1xuXHQiIC8qIGxlbiBpbiBSMCAqLworICAgICAgICAgIlAzID0gJTM7XG5cdCIgLyogbGVuIGluIFIwICovCisgICAgICAgICAiUDQgPSAlNDtcblx0IiAvKiBuYl9waXRjaCBpbiBSMCAqLworICAgICAgICAgIlIxID0gUjAgPDwgMTtcblx0IiAvKiBudW1iZXIgb2YgYnl0ZXMgaW4geCAqLworICAgICAgICAgIkwwID0gUjE7XG5cdCIKKyAgICAgICAgICJQMCA9ICUxO1xuXHQiCisgICAgICAgICAiUDEgPSAlMjtcblx0IgorICAgICAgICAgIkIxID0gUDE7XG5cdCIKKyAgICAgICAgICJSNCA9ICU1O1xuXHQiCisgICAgICAgICAiTDEgPSAwO1xuXHQiIC8qRGlzYWJsZSBsb29waW5nIG9uIEkxKi8KKworICAgICAgICAgInIwID0gW0kwKytdO1xuXHQiCisgICAgICAgICAiUjIgPSAwO1IzPTA7IgorICAgICAgICAgIkxPT1AgcGl0Y2glPSBMQzAgPSBQNCA+PiAxO1xuXHQiCisgICAgICAgICAiTE9PUF9CRUdJTiBwaXRjaCU9O1xuXHQiCisgICAgICAgICAgICAiSTEgPSBQMDtcblx0IgorICAgICAgICAgICAgIkExID0gQTAgPSAwO1xuXHQiCisgICAgICAgICAgICAiUjEgPSBbSTErK107XG5cdCIKKyAgICAgICAgICAgICJMT09QIGlubmVyX3Byb2QlPSBMQzEgPSBQMyA+PiAxO1xuXHQiCisgICAgICAgICAgICAiTE9PUF9CRUdJTiBpbm5lcl9wcm9kJT07XG5cdCIKKyAgICAgICAgICAgICAgICJBMSArPSBSMC5MKlIxLkgsIEEwICs9IFIwLkwqUjEuTCAoSVMpIHx8IFIxLkwgPSBXW0kxKytdO1xuXHQiCisgICAgICAgICAgICAgICAiQTEgKz0gUjAuSCpSMS5MLCBBMCArPSBSMC5IKlIxLkggKElTKSB8fCBSMS5IID0gV1tJMSsrXSB8fCBSMCA9IFtJMCsrXTtcblx0IgorICAgICAgICAgICAgIkxPT1BfRU5EIGlubmVyX3Byb2QlPTtcblx0IgorICAgICAgICAgICAgIkEwID0gQVNISUZUIEEwIGJ5IFI0Lkw7XG5cdCIKKyAgICAgICAgICAgICJBMSA9IEFTSElGVCBBMSBieSBSNC5MO1xuXHQiCisgICAKKyAgICAgICAgICAgICJSMiA9IEEwLCBSMyA9IEExO1xuXHQiCisgICAgICAgICAgICAiW1AxLS1dID0gUjI7XG5cdCIKKyAgICAgICAgICAgICJbUDEtLV0gPSBSMztcblx0IgorICAgICAgICAgICAgIlAwICs9IDQ7XG5cdCIKKyAgICAgICAgICJMT09QX0VORCBwaXRjaCU9O1xuXHQiCisgICA6IDogIm0iICh4cyksICJtIiAoeCksICJtIiAoYWMzMnRvcCksICJtIiAoTl9sYWcpLCAibSIgKGxhZ18xKSwgIm0iIChuc2hpZnQpCisgICA6ICJBMCIsICJBMSIsICJQMCIsICJQMSIsICJQMiIsICJQMyIsICJQNCIsICJSMCIsICJSMSIsICJSMiIsICJSMyIsICJSNCIsICJJMCIsICJJMSIsICJMMCIsICJMMSIsICJCMCIsICJCMSIsICJtZW1vcnkiCisgICApOworICAgZD0wOworICAgZm9yIChqPTA7ajxuO2orKykKKyAgIHsKKyAgICAgIGQgPSBBREQzMihkLFNIUjMyKE1VTFQxNl8xNih4W2pdLHhbal0pLCBzaGlmdCkpOworICAgfQorICAgYWMzMlswXSA9IGQ7CisgICAKKyAgIGZvciAoaT0wO2k8bGFnO2krKykKKyAgIHsKKyAgICAgIGQ9MDsKKyAgICAgIGZvciAoaj1pO2o8bGFnXzE7aisrKQorICAgICAgeworICAgICAgICAgZCA9IEFERDMyKGQsU0hSMzIoTVVMVDE2XzE2KHhbal0seFtqLWldKSwgc2hpZnQpKTsKKyAgICAgIH0KKyAgICAgIGlmIChpKQorICAgICAgICAgYWMzMltpXSArPSBkOworICAgICAgYWNbaV0gPSBTSFIzMihhYzMyW2ldLCBhY19zaGlmdCk7CisgICB9Cit9CisKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2xzcC5jIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbHNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTczZDg4MwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2xzcC5jCkBAIC0wLDAgKzEsNjU2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCitPcmlnaW5hbCBjb3B5cmlnaHQKKwlGSUxFLi4uLi4uLi46IGxzcC5jCisJQVVUSE9SLi4uLi4uOiBEYXZpZCBSb3dlCisJREFURSBDUkVBVEVEOiAyNC8yLzkzCisKK0hlYXZpbHkgbW9kaWZpZWQgYnkgSmVhbi1NYXJjIFZhbGluIChjKSAyMDAyLTIwMDYgKGZpeGVkLXBvaW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9ucywgYWRkaXRpb25hbCBmdW5jdGlvbnMsIC4uLikKKworICAgVGhpcyBmaWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3IgY29udmVydGluZyBMaW5lYXIgUHJlZGljdGlvbgorICAgQ29lZmZpY2llbnRzIChMUEMpIHRvIExpbmUgU3BlY3RyYWwgUGFpciAoTFNQKSBhbmQgYmFjay4gTm90ZSB0aGF0IHRoZQorICAgTFNQIGNvZWZmaWNpZW50cyBhcmUgbm90IGluIHJhZGlhbnMgZm9ybWF0IGJ1dCBpbiB0aGUgeCBkb21haW4gb2YgdGhlCisgICB1bml0IGNpcmNsZS4KKworICAgU3BlZXggTGljZW5zZToKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCisKKyAgSW50cm9kdWN0aW9uIHRvIExpbmUgU3BlY3RydW0gUGFpcnMgKExTUHMpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIExTUHMgYXJlIHVzZWQgdG8gZW5jb2RlIHRoZSBMUEMgZmlsdGVyIGNvZWZmaWNpZW50cyB7YWt9IGZvcgorICB0cmFuc21pc3Npb24gb3ZlciB0aGUgY2hhbm5lbC4gIExTUHMgaGF2ZSBzZXZlcmFsIHByb3BlcnRpZXMgKGxpa2UKKyAgbGVzcyBzZW5zaXRpdml0eSB0byBxdWFudGlzYXRpb24gbm9pc2UpIHRoYXQgbWFrZSB0aGVtIHN1cGVyaW9yIHRvCisgIGRpcmVjdCBxdWFudGlzYXRpb24gb2Yge2FrfS4KKworICBBKHopIGlzIGEgcG9seW5vbWlhbCBvZiBvcmRlciBscGNyZHIgd2l0aCB7YWt9IGFzIHRoZSBjb2VmZmljaWVudHMuCisKKyAgQSh6KSBpcyB0cmFuc2Zvcm1lZCB0byBQKHopIGFuZCBRKHopICh1c2luZyBhIHN1YnN0aXR1dGlvbiBhbmQgc29tZQorICBhbGdlYnJhKSwgdG8gb2J0YWluIHNvbWV0aGluZyBsaWtlOgorCisgICAgQSh6KSA9IDAuNVtQKHopKHorel4tMSkgKyBRKHopKHotel4tMSldICAoMSkKKworICBBcyB5b3UgY2FuIGltYWdpbmUgQSh6KSBoYXMgY29tcGxleCB6ZXJvcyBhbGwgb3ZlciB0aGUgei1wbGFuZS4gUCh6KQorICBhbmQgUSh6KSBoYXZlIHRoZSB2ZXJ5IG5lYXQgcHJvcGVydHkgb2Ygb25seSBoYXZpbmcgemVyb3MgX29uXyB0aGUKKyAgdW5pdCBjaXJjbGUuICBTbyB0byBmaW5kIHRoZW0gd2UgdGFrZSBhIHRlc3QgcG9pbnQgej1leHAoancpIGFuZAorICBldmFsdWF0ZSBQIChleHAoancpKSBhbmQgUShleHAoancpKSB1c2luZyBhIGdyaWQgb2YgcG9pbnRzIGJldHdlZW4gMAorICBhbmQgcGkuCisKKyAgVGhlIHplcm9zIChyb290cykgb2YgUCh6KSBhbHNvIGhhcHBlbiB0byBhbHRlcm5hdGUsIHdoaWNoIGlzIHdoeSB3ZQorICBzd2FwIGNvZWZmaWNpZW50cyBhcyB3ZSBmaW5kIHJvb3RzLiAgU28gdGhlIHByb2Nlc3Mgb2YgZmluZGluZyB0aGUKKyAgTFNQIGZyZXF1ZW5jaWVzIGlzIGJhc2ljYWxseSBmaW5kaW5nIHRoZSByb290cyBvZiA1dGggb3JkZXIKKyAgcG9seW5vbWlhbHMuCisKKyAgVGhlIHJvb3Qgc28gUCh6KSBhbmQgUSh6KSBvY2N1ciBpbiBzeW1tZXRyaWNhbCBwYWlycyBhdCArLy13LCBoZW5jZQorICB0aGUgbmFtZSBMaW5lIFNwZWN0cnVtIFBhaXJzIChMU1BzKS4KKworICBUbyBjb252ZXJ0IGJhY2sgdG8gYWsgd2UganVzdCBldmFsdWF0ZSAoMSksICJjbG9ja2luZyIgYW4gaW1wdWxzZQorICB0aHJ1IGl0IGxwY3JkciB0aW1lcyBnaXZlcyB1cyB0aGUgaW1wdWxzZSByZXNwb25zZSBvZiBBKHopIHdoaWNoIGlzCisgIHtha30uCisKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgImxzcC5oIgorI2luY2x1ZGUgInN0YWNrX2FsbG9jLmgiCisjaW5jbHVkZSAibWF0aF9hcHByb3guaCIKKworI2lmbmRlZiBNX1BJCisjZGVmaW5lIE1fUEkgICAgICAgICAgIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYgIC8qIHBpICovCisjZW5kaWYKKworI2lmbmRlZiBOVUxMCisjZGVmaW5lIE5VTEwgMAorI2VuZGlmCisKKyNpZmRlZiBGSVhFRF9QT0lOVAorCisjZGVmaW5lIEZSRVFfU0NBTEUgMTYzODQKKworLyojZGVmaW5lIEFOR0xFMlgoYSkgKDMyNzY4KmNvcygoKGEpLzgxOTIuKSkpKi8KKyNkZWZpbmUgQU5HTEUyWChhKSAoU0hMMTYoc3B4X2NvcyhhKSwyKSkKKworLyojZGVmaW5lIFgyQU5HTEUoeCkgKGFjb3MoLjAwMDA2MTAzNTE1NjI1Kih4KSkqTFNQX1NDQUxJTkcpKi8KKyNkZWZpbmUgWDJBTkdMRSh4KSAoc3B4X2Fjb3MoeCkpCisKKyNpZmRlZiBCRklOX0FTTQorI2luY2x1ZGUgImxzcF9iZmluLmgiCisjZW5kaWYKKworI2Vsc2UKKworLyojZGVmaW5lIEMxIDAuOTk5NDAzMDcKKyNkZWZpbmUgQzIgLTAuNDk1NTgwNzIKKyNkZWZpbmUgQzMgMC4wMzY3OTE2OCovCisKKyNkZWZpbmUgRlJFUV9TQ0FMRSAxLgorI2RlZmluZSBBTkdMRTJYKGEpIChzcHhfY29zKGEpKQorI2RlZmluZSBYMkFOR0xFKHgpIChhY29zKHgpKQorCisjZW5kaWYKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCisKKyAgIEZVTkNUSU9OLi4uLjogY2hlYl9wb2x5X2V2YSgpCisKKyAgIEFVVEhPUi4uLi4uLjogRGF2aWQgUm93ZQorICAgREFURSBDUkVBVEVEOiAyNC8yLzkzCisKKyAgIFRoaXMgZnVuY3Rpb24gZXZhbHVhdGVzIGEgc2VyaWVzIG9mIENoZWJ5c2hldiBwb2x5bm9taWFscworCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBGSVhFRF9QT0lOVAorCisjaWZuZGVmIE9WRVJSSURFX0NIRUJfUE9MWV9FVkEKK3N0YXRpYyBpbmxpbmUgc3B4X3dvcmQzMl90IGNoZWJfcG9seV9ldmEoCisgIHNweF93b3JkMTZfdCAqY29lZiwgLyogUCBvciBRIGNvZWZzIGluIFExMyBmb3JtYXQgICAgICAgICAgICAgICAqLworICBzcHhfd29yZDE2X3QgICAgIHgsIC8qIGNvcyBvZiBmcmVxICgtMS4wIHRvIDEuMCkgaW4gUTE0IGZvcm1hdCAgKi8KKyAgaW50ICAgICAgICAgICAgICBtLCAvKiBMUEMgb3JkZXIvMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIGNoYXIgICAgICAgICAqc3RhY2sKKykKK3sKKyAgICBpbnQgaTsKKyAgICBzcHhfd29yZDE2X3QgYjAsIGIxOworICAgIHNweF93b3JkMzJfdCBzdW07CisKKyAgICAvKlByZXZlbnRzIG92ZXJmbG93cyovCisgICAgaWYgKHg+MTYzODMpCisgICAgICAgeCA9IDE2MzgzOworICAgIGlmICh4PC0xNjM4MykKKyAgICAgICB4ID0gLTE2MzgzOworCisgICAgLyogSW5pdGlhbGlzZSB2YWx1ZXMgKi8KKyAgICBiMT0xNjM4NDsKKyAgICBiMD14OworCisgICAgLyogRXZhbHVhdGUgQ2hlYnlzaGV2IHNlcmllcyBmb3JtdWxhdGlvbiB1c2luIGcgaXRlcmF0aXZlIGFwcHJvYWNoICAqLworICAgIHN1bSA9IEFERDMyKEVYVEVORDMyKGNvZWZbbV0pLCBFWFRFTkQzMihNVUxUMTZfMTZfUDE0KGNvZWZbbS0xXSx4KSkpOworICAgIGZvcihpPTI7aTw9bTtpKyspCisgICAgeworICAgICAgIHNweF93b3JkMTZfdCB0bXA9YjA7CisgICAgICAgYjAgPSBTVUIxNihNVUxUMTZfMTZfUTEzKHgsYjApLCBiMSk7CisgICAgICAgYjEgPSB0bXA7CisgICAgICAgc3VtID0gQUREMzIoc3VtLCBFWFRFTkQzMihNVUxUMTZfMTZfUDE0KGNvZWZbbS1pXSxiMCkpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHN1bTsKK30KKyNlbmRpZgorCisjZWxzZQorCitzdGF0aWMgZmxvYXQgY2hlYl9wb2x5X2V2YShzcHhfd29yZDMyX3QgKmNvZWYsIHNweF93b3JkMTZfdCB4LCBpbnQgbSwgY2hhciAqc3RhY2spCit7CisgICBpbnQgazsKKyAgIGZsb2F0IGIwLCBiMSwgdG1wOworCisgICAvKiBJbml0aWFsIGNvbmRpdGlvbnMgKi8KKyAgIGIwPTA7IC8qIGJfKG0rMSkgKi8KKyAgIGIxPTA7IC8qIGJfKG0rMikgKi8KKworICAgeCo9MjsKKworICAgLyogQ2FsY3VsYXRlIHRoZSBiXyhrKSAqLworICAgZm9yKGs9bTtrPjA7ay0tKQorICAgeworICAgICAgdG1wPWIwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRtcCBob2xkcyB0aGUgcHJldmlvdXMgdmFsdWUgb2YgYjAgKi8KKyAgICAgIGIwPXgqYjAtYjErY29lZlttLWtdOyAgICAvKiBiMCBob2xkcyBpdHMgbmV3IHZhbHVlIGJhc2VkIG9uIGIwIGFuZCBiMSAqLworICAgICAgYjE9dG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGIxIGhvbGRzIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiBiMCAqLworICAgfQorCisgICByZXR1cm4oLWIxKy41KngqYjArY29lZlttXSk7Cit9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorCisgICAgRlVOQ1RJT04uLi4uOiBscGNfdG9fbHNwKCkKKworICAgIEFVVEhPUi4uLi4uLjogRGF2aWQgUm93ZQorICAgIERBVEUgQ1JFQVRFRDogMjQvMi85MworCisgICAgVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBMUEMgY29lZmZpY2llbnRzIHRvIExTUAorICAgIGNvZWZmaWNpZW50cy4KKworXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgRklYRURfUE9JTlQKKyNkZWZpbmUgU0lHTl9DSEFOR0UoYSxiKSAoKChhKSYweDcwMDAwMDAwKV4oKGIpJjB4NzAwMDAwMDApfHwoYj09MCkpCisjZWxzZQorI2RlZmluZSBTSUdOX0NIQU5HRShhLGIpICgoKGEpKihiKSk8MC4wKQorI2VuZGlmCisKKworaW50IGxwY190b19sc3AgKHNweF9jb2VmX3QgKmEsaW50IGxwY3JkcixzcHhfbHNwX3QgKmZyZXEsaW50IG5iLHNweF93b3JkMTZfdCBkZWx0YSwgY2hhciAqc3RhY2spCisvKiAgZmxvYXQgKmEgCQkgICAgIAlscGMgY29lZmZpY2llbnRzCQkJKi8KKy8qICBpbnQgbHBjcmRyCQkJb3JkZXIgb2YgTFBDIGNvZWZmaWNpZW50cyAoMTApIAkJKi8KKy8qICBmbG9hdCAqZnJlcSAJICAgICAgCUxTUCBmcmVxdWVuY2llcyBpbiB0aGUgeCBkb21haW4gICAgICAgCSovCisvKiAgaW50IG5iCQkJbnVtYmVyIG9mIHN1Yi1pbnRlcnZhbHMgKDQpIAkJKi8KKy8qICBmbG9hdCBkZWx0YQkJCWdyaWQgc3BhY2luZyBpbnRlcnZhbCAoMC4wMikgCQkqLworCisKK3sKKyAgICBzcHhfd29yZDE2X3QgdGVtcF94cix4bCx4cix4bT0wOworICAgIHNweF93b3JkMzJfdCBwc3VtbCxwc3Vtcixwc3VtbSx0ZW1wX3BzdW1yLyosdGVtcF9xc3VtciovOworICAgIGludCBpLGosbSxmbGFnLGs7CisgICAgVkFSREVDTChzcHhfd29yZDMyX3QgKlEpOyAgICAgICAgICAgICAgICAgCS8qIHB0cnMgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIAkJKi8KKyAgICBWQVJERUNMKHNweF93b3JkMzJfdCAqUCk7CisgICAgVkFSREVDTChzcHhfd29yZDE2X3QgKlExNik7ICAgICAgICAgLyogcHRycyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gCQkqLworICAgIFZBUkRFQ0woc3B4X3dvcmQxNl90ICpQMTYpOworICAgIHNweF93b3JkMzJfdCAqcHg7ICAgICAgICAgICAgICAgIAkvKiBwdHJzIG9mIHJlc3BlY3RpdmUgUCcoeikgJiBRJyh6KQkqLworICAgIHNweF93b3JkMzJfdCAqcXg7CisgICAgc3B4X3dvcmQzMl90ICpwOworICAgIHNweF93b3JkMzJfdCAqcTsKKyAgICBzcHhfd29yZDE2X3QgKnB0OyAgICAgICAgICAgICAgICAJLyogcHRyIHVzZWQgZm9yIGNoZWJfcG9seV9ldmFsKCkKKwkJCQl3aGV0aGVyIFAnIG9yIFEnIAkJCSovCisgICAgaW50IHJvb3RzPTA7ICAgICAgICAgICAgICAJLyogRFIgOC8yLzk0OiBudW1iZXIgb2Ygcm9vdHMgZm91bmQgCSovCisgICAgZmxhZyA9IDE7ICAgICAgICAgICAgICAgIAkvKiAgcHJvZ3JhbSBpcyBzZWFyY2hpbmcgZm9yIGEgcm9vdCB3aGVuLAorCQkJCTEgZWxzZSBoYXMgZm91bmQgb25lIAkJCSovCisgICAgbSA9IGxwY3Jkci8yOyAgICAgICAgICAgIAkvKiBvcmRlciBvZiBQJyh6KSAmIFEnKHopIHBvbHlub21pYWxzIAkqLworCisgICAgLyogQWxsb2NhdGUgbWVtb3J5IHNwYWNlIGZvciBwb2x5bm9taWFscyAqLworICAgIEFMTE9DKFEsIChtKzEpLCBzcHhfd29yZDMyX3QpOworICAgIEFMTE9DKFAsIChtKzEpLCBzcHhfd29yZDMyX3QpOworCisgICAgLyogZGV0ZXJtaW5lIFAnKHopJ3MgYW5kIFEnKHopJ3MgY29lZmZpY2llbnRzIHdoZXJlCisgICAgICBQJyh6KSA9IFAoeikvKDEgKyB6XigtMSkpIGFuZCBRJyh6KSA9IFEoeikvKDEtel4oLTEpKSAqLworCisgICAgcHggPSBQOyAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0aWFsaXNlIHB0cnMgCQkJKi8KKyAgICBxeCA9IFE7CisgICAgcCA9IHB4OworICAgIHEgPSBxeDsKKworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgKnB4KysgPSBMUENfU0NBTElORzsKKyAgICAqcXgrKyA9IExQQ19TQ0FMSU5HOworICAgIGZvcihpPTA7aTxtO2krKyl7CisgICAgICAgKnB4KysgPSBTVUIzMihBREQzMihFWFRFTkQzMihhW2ldKSxFWFRFTkQzMihhW2xwY3Jkci1pLTFdKSksICpwKyspOworICAgICAgICpxeCsrID0gQUREMzIoU1VCMzIoRVhURU5EMzIoYVtpXSksRVhURU5EMzIoYVtscGNyZHItaS0xXSkpLCAqcSsrKTsKKyAgICB9CisgICAgcHggPSBQOworICAgIHF4ID0gUTsKKyAgICBmb3IoaT0wO2k8bTtpKyspCisgICAgeworICAgICAgIC8qaWYgKGZhYnMoKnB4KT49MzI3NjgpCisgICAgICAgICAgc3BlZXhfd2FybmluZ19pbnQoInB4IiwgKnB4KTsKKyAgICAgICBpZiAoZmFicygqcXgpPj0zMjc2OCkKKyAgICAgICBzcGVleF93YXJuaW5nX2ludCgicXgiLCAqcXgpOyovCisgICAgICAgKnB4ID0gUFNIUjMyKCpweCwyKTsKKyAgICAgICAqcXggPSBQU0hSMzIoKnF4LDIpOworICAgICAgIHB4Kys7CisgICAgICAgcXgrKzsKKyAgICB9CisgICAgLyogVGhlIHJlYXNvbiBmb3IgdGhpcyBsaWVzIGluIHRoZSB3YXkgY2hlYl9wb2x5X2V2YSgpIGlzIGltcGxlbWVudGVkIGZvciBmaXhlZC1wb2ludCAqLworICAgIFBbbV0gPSBQU0hSMzIoUFttXSwzKTsKKyAgICBRW21dID0gUFNIUjMyKFFbbV0sMyk7CisjZWxzZQorICAgICpweCsrID0gTFBDX1NDQUxJTkc7CisgICAgKnF4KysgPSBMUENfU0NBTElORzsKKyAgICBmb3IoaT0wO2k8bTtpKyspeworICAgICAgICpweCsrID0gKGFbaV0rYVtscGNyZHItMS1pXSkgLSAqcCsrOworICAgICAgICpxeCsrID0gKGFbaV0tYVtscGNyZHItMS1pXSkgKyAqcSsrOworICAgIH0KKyAgICBweCA9IFA7CisgICAgcXggPSBROworICAgIGZvcihpPTA7aTxtO2krKyl7CisgICAgICAgKnB4ID0gMioqcHg7CisgICAgICAgKnF4ID0gMioqcXg7CisgICAgICAgcHgrKzsKKyAgICAgICBxeCsrOworICAgIH0KKyNlbmRpZgorCisgICAgcHggPSBQOyAgICAgICAgICAgICAJLyogcmUtaW5pdGlhbGlzZSBwdHJzIAkJCSovCisgICAgcXggPSBROworCisgICAgLyogbm93IHRoYXQgd2UgaGF2ZSBjb21wdXRlZCBQIGFuZCBRIGNvbnZlcnQgdG8gMTYgYml0cyB0bworICAgICAgIHNwZWVkIHVwIGNoZWJfcG9seV9ldmFsICovCisKKyAgICBBTExPQyhQMTYsIG0rMSwgc3B4X3dvcmQxNl90KTsKKyAgICBBTExPQyhRMTYsIG0rMSwgc3B4X3dvcmQxNl90KTsKKworICAgIGZvciAoaT0wO2k8bSsxO2krKykKKyAgICB7CisgICAgICAgUDE2W2ldID0gUFtpXTsKKyAgICAgICBRMTZbaV0gPSBRW2ldOworICAgIH0KKworICAgIC8qIFNlYXJjaCBmb3IgYSB6ZXJvIGluIFAnKHopIHBvbHlub21pYWwgZmlyc3QgYW5kIHRoZW4gYWx0ZXJuYXRlIHRvIFEnKHopLgorICAgIEtlZXAgYWx0ZXJuYXRpbmcgYmV0d2VlbiB0aGUgdHdvIHBvbHlub21pYWxzIGFzIGVhY2ggemVybyBpcyBmb3VuZCAJKi8KKworICAgIHhyID0gMDsgICAgICAgICAgICAgCS8qIGluaXRpYWxpc2UgeHIgdG8gemVybyAJCSovCisgICAgeGwgPSBGUkVRX1NDQUxFOyAgICAgICAgICAgICAgIAkvKiBzdGFydCBhdCBwb2ludCB4bCA9IDEgCQkqLworCisgICAgZm9yKGo9MDtqPGxwY3JkcjtqKyspeworCWlmKGomMSkgICAgICAgICAgICAJLyogZGV0ZXJtaW5lcyB3aGV0aGVyIFAnIG9yIFEnIGlzIGV2YWwuICovCisJICAgIHB0ID0gUTE2OworCWVsc2UKKwkgICAgcHQgPSBQMTY7CisKKwlwc3VtbCA9IGNoZWJfcG9seV9ldmEocHQseGwsbSxzdGFjayk7CS8qIGV2YWxzIHBvbHkuIGF0IHhsIAkqLworCWZsYWcgPSAxOworCXdoaWxlKGZsYWcgJiYgKHhyID49IC1GUkVRX1NDQUxFKSl7CisgICAgICAgICAgIHNweF93b3JkMTZfdCBkZDsKKyAgICAgICAgICAgLyogTW9kaWZpZWQgYnkgSk1WIHRvIHByb3ZpZGUgc21hbGxlciBzdGVwcyBhcm91bmQgeD0rLTEgKi8KKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgICAgICAgICBkZCA9IE1VTFQxNl8xNl9RMTUoZGVsdGEsU1VCMTYoRlJFUV9TQ0FMRSwgTVVMVDE2XzE2X1ExNChNVUxUMTZfMTZfUTE0KHhsLHhsKSwxNDAwMCkpKTsKKyAgICAgICAgICAgaWYgKHBzdW1sPDUxMiAmJiBwc3VtbD4tNTEyKQorICAgICAgICAgICAgICBkZCA9IFBTSFIxNihkZCwxKTsKKyNlbHNlCisgICAgICAgICAgIGRkPWRlbHRhKigxLS45KnhsKnhsKTsKKyAgICAgICAgICAgaWYgKGZhYnMocHN1bWwpPC4yKQorICAgICAgICAgICAgICBkZCAqPSAuNTsKKyNlbmRpZgorICAgICAgICAgICB4ciA9IFNVQjE2KHhsLCBkZCk7ICAgICAgICAgICAgICAgICAgICAgICAgCS8qIGludGVydmFsIHNwYWNpbmcgCSovCisJICAgIHBzdW1yID0gY2hlYl9wb2x5X2V2YShwdCx4cixtLHN0YWNrKTsvKiBwb2x5KHhsLWRlbHRhX3gpIAkqLworCSAgICB0ZW1wX3BzdW1yID0gcHN1bXI7CisJICAgIHRlbXBfeHIgPSB4cjsKKworICAgIC8qIGlmIG5vIHNpZ24gY2hhbmdlIGluY3JlbWVudCB4ciBhbmQgcmUtZXZhbHVhdGUgcG9seSh4cikuIFJlcGVhdCB0aWwKKyAgICBzaWduIGNoYW5nZS4KKyAgICBpZiBhIHNpZ24gY2hhbmdlIGhhcyBvY2N1cnJlZCB0aGUgaW50ZXJ2YWwgaXMgYmlzZWN0ZWQgYW5kIHRoZW4KKyAgICBjaGVja2VkIGFnYWluIGZvciBhIHNpZ24gY2hhbmdlIHdoaWNoIGRldGVybWluZXMgaW4gd2hpY2gKKyAgICBpbnRlcnZhbCB0aGUgemVybyBsaWVzIGluLgorICAgIElmIHRoZXJlIGlzIG5vIHNpZ24gY2hhbmdlIGJldHdlZW4gcG9seSh4bSkgYW5kIHBvbHkoeGwpIHNldCBpbnRlcnZhbAorICAgIGJldHdlZW4geG0gYW5kIHhyIGVsc2Ugc2V0IGludGVydmFsIGJldHdlZW4geGwgYW5kIHhyIGFuZCByZXBlYXQgdGlsbAorICAgIHJvb3QgaXMgbG9jYXRlZCB3aXRoaW4gdGhlIHNwZWNpZmllZCBsaW1pdHMgCQkJKi8KKworCSAgICBpZihTSUdOX0NIQU5HRShwc3Vtcixwc3VtbCkpCisgICAgICAgICAgICB7CisJCXJvb3RzKys7CisKKwkJcHN1bW09cHN1bWw7CisJCWZvcihrPTA7azw9bmI7aysrKXsKKyNpZmRlZiBGSVhFRF9QT0lOVAorCQkgICAgeG0gPSBBREQxNihQU0hSMTYoeGwsMSksUFNIUjE2KHhyLDEpKTsgICAgICAgIAkvKiBiaXNlY3QgdGhlIGludGVydmFsIAkqLworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgeG0gPSAuNSooeGwreHIpOyAgICAgICAgCS8qIGJpc2VjdCB0aGUgaW50ZXJ2YWwgCSovCisjZW5kaWYKKwkJICAgIHBzdW1tPWNoZWJfcG9seV9ldmEocHQseG0sbSxzdGFjayk7CisJCSAgICAvKmlmKHBzdW1tKnBzdW1sPjAuKSovCisJCSAgICBpZighU0lHTl9DSEFOR0UocHN1bW0scHN1bWwpKQorICAgICAgICAgICAgICAgICAgICB7CisJCQlwc3VtbD1wc3VtbTsKKwkJCXhsPXhtOworCQkgICAgfSBlbHNlIHsKKwkJCXBzdW1yPXBzdW1tOworCQkJeHI9eG07CisJCSAgICB9CisJCX0KKworCSAgICAgICAvKiBvbmNlIHplcm8gaXMgZm91bmQsIHJlc2V0IGluaXRpYWwgaW50ZXJ2YWwgdG8geHIgCSovCisJICAgICAgIGZyZXFbal0gPSBYMkFOR0xFKHhtKTsKKwkgICAgICAgeGwgPSB4bTsKKwkgICAgICAgZmxhZyA9IDA7ICAgICAgIAkJLyogcmVzZXQgZmxhZyBmb3IgbmV4dCBzZWFyY2ggCSovCisJICAgIH0KKwkgICAgZWxzZXsKKwkJcHN1bWw9dGVtcF9wc3VtcjsKKwkJeGw9dGVtcF94cjsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuKHJvb3RzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorCisJRlVOQ1RJT04uLi4uOiBsc3BfdG9fbHBjKCkKKworCUFVVEhPUi4uLi4uLjogRGF2aWQgUm93ZQorCURBVEUgQ1JFQVRFRDogMjQvMi85MworCisgICAgICAgIENvbnZlcnRzIExTUCBjb2VmZmljaWVudHMgdG8gTFBDIGNvZWZmaWNpZW50cy4KKworXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgRklYRURfUE9JTlQKKwordm9pZCBsc3BfdG9fbHBjKHNweF9sc3BfdCAqZnJlcSxzcHhfY29lZl90ICphayxpbnQgbHBjcmRyLCBjaGFyICpzdGFjaykKKy8qICBmbG9hdCAqZnJlcSAJYXJyYXkgb2YgTFNQIGZyZXF1ZW5jaWVzIGluIHRoZSB4IGRvbWFpbgkqLworLyogIGZsb2F0ICphayAJCWFycmF5IG9mIExQQyBjb2VmZmljaWVudHMgCQkJKi8KKy8qICBpbnQgbHBjcmRyICAJb3JkZXIgb2YgTFBDIGNvZWZmaWNpZW50cyAJCQkqLworeworICAgIGludCBpLGo7CisgICAgc3B4X3dvcmQzMl90IHhvdXQxLHhvdXQyLHhpbjsKKyAgICBzcHhfd29yZDMyX3QgbXVsdCwgYTsKKyAgICBWQVJERUNMKHNweF93b3JkMTZfdCAqZnJlcW4pOworICAgIFZBUkRFQ0woc3B4X3dvcmQzMl90ICoqeHApOworICAgIFZBUkRFQ0woc3B4X3dvcmQzMl90ICp4cG1lbSk7CisgICAgVkFSREVDTChzcHhfd29yZDMyX3QgKip4cSk7CisgICAgVkFSREVDTChzcHhfd29yZDMyX3QgKnhxbWVtKTsKKyAgICBpbnQgbSA9IGxwY3Jkcj4+MTsKKworICAgIC8qIAorICAgIAorICAgICAgIFJlY29uc3RydWN0IFAoeikgYW5kIFEoeikgYnkgY2FzY2FkaW5nIHNlY29uZCBvcmRlciBwb2x5bm9taWFscworICAgICAgIGluIGZvcm0gMSAtIDJjb3Modyl6KC0xKSArIHooLTIpLCB3aGVyZSB3IGlzIHRoZSBMU1AgZnJlcXVlbmN5LgorICAgICAgIEluIHRoZSB0aW1lIGRvbWFpbiB0aGlzIGlzOgorCisgICAgICAgeShuKSA9IHgobikgLSAyY29zKHcpeChuLTEpICsgeChuLTIpCisgICAgCisgICAgICAgVGhpcyBpcyB3aGF0IHRoZSBBTExPQ1MgYmVsb3cgYXJlIHRyeWluZyB0byBkbzoKKworICAgICAgICAgaW50IHhwW20rMV1bbHBjcmRyKzErMl07IC8vIFAgbWF0cml4IGluIFFJTVAKKyAgICAgICAgIGludCB4cVttKzFdW2xwY3JkcisxKzJdOyAvLyBRIG1hdHJpeCBpbiBRSU1QCisKKyAgICAgICBUaGVzZSBtYXRyaWNlcyBzdG9yZSB0aGUgb3V0cHV0IG9mIGVhY2ggc3RhZ2Ugb24gZWFjaCByb3cuICBUaGUKKyAgICAgICBmaW5hbCAobS10aCkgcm93IGhhcyB0aGUgb3V0cHV0IG9mIHRoZSBmaW5hbCAobS10aCkgY2FzY2FkZWQKKyAgICAgICAybmQgb3JkZXIgZmlsdGVyLiAgVGhlIGZpcnN0IHJvdyBpcyB0aGUgaW1wdWxzZSBpbnB1dCB0byB0aGUKKyAgICAgICBzeXN0ZW0gKG5vdCB3cml0dGVuIGFzIGl0IGlzIGtub3duKS4KKworICAgICAgIFRoZSB2ZXJzaW9uIGJlbG93IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IGEgbG90IG9mIHRoZQorICAgICAgIG91dHB1dHMgYXJlIHplcm8gb3Iga25vd24sIGZvciBleGFtcGxlIGlmIHdlIHB1dCBhbiBpbnB1bHNlCisgICAgICAgaW50byB0aGUgZmlyc3Qgc2VjdGlvbiB0aGUgImNsb2NrIiBpdCAxMCB0aW1lcyBvbmx5IHRoZSBmaXJzdCAzCisgICAgICAgb3V0cHV0cyBzYW1wbGVzIGFyZSBub24temVybyAoaXQncyBhbiBGSVIgZmlsdGVyKS4KKyAgICAqLworCisgICAgQUxMT0MoeHAsIChtKzEpLCBzcHhfd29yZDMyX3QqKTsKKyAgICBBTExPQyh4cG1lbSwgKG0rMSkqKGxwY3JkcisxKzIpLCBzcHhfd29yZDMyX3QpOworCisgICAgQUxMT0MoeHEsIChtKzEpLCBzcHhfd29yZDMyX3QqKTsKKyAgICBBTExPQyh4cW1lbSwgKG0rMSkqKGxwY3JkcisxKzIpLCBzcHhfd29yZDMyX3QpOworICAgIAorICAgIGZvcihpPTA7IGk8PW07IGkrKykgeworICAgICAgeHBbaV0gPSB4cG1lbSArIGkqKGxwY3JkcisxKzIpOworICAgICAgeHFbaV0gPSB4cW1lbSArIGkqKGxwY3JkcisxKzIpOworICAgIH0KKworICAgIC8qIHdvcmsgb3V0IDJjb3MgdGVybXMgaW4gUTE0ICovCisKKyAgICBBTExPQyhmcmVxbiwgbHBjcmRyLCBzcHhfd29yZDE2X3QpOworICAgIGZvciAoaT0wO2k8bHBjcmRyO2krKykgCisgICAgICAgZnJlcW5baV0gPSBBTkdMRTJYKGZyZXFbaV0pOworCisgICAgI2RlZmluZSBRSU1QICAyMSAgIC8qIHNjYWxpbmcgZm9yIGltcHVsc2UgKi8KKworICAgIHhpbiA9IFNITDMyKEVYVEVORDMyKDEpLCAoUUlNUC0xKSk7IC8qIDAuNSBpbiBRSU1QIGZvcm1hdCAqLworICAgCisgICAgLyogZmlyc3QgY29sIGFuZCBsYXN0IG5vbi16ZXJvIHZhbHVlcyBvZiBlYWNoIHJvdyBhcmUgdHJpdmlhbCAqLworICAgIAorICAgIGZvcihpPTA7aTw9bTtpKyspIHsKKyAgICAgeHBbaV1bMV0gPSAwOworICAgICB4cFtpXVsyXSA9IHhpbjsKKyAgICAgeHBbaV1bMisyKmldID0geGluOworICAgICB4cVtpXVsxXSA9IDA7CisgICAgIHhxW2ldWzJdID0geGluOworICAgICB4cVtpXVsyKzIqaV0gPSB4aW47CisgICAgfQorCisgICAgLyogMm5kIHJvdyAoZmlyc3Qgb3V0cHV0IHJvdykgaXMgdHJpdmlhbCAqLworCisgICAgeHBbMV1bM10gPSAtTVVMVDE2XzMyX1ExNChmcmVxblswXSx4cFswXVsyXSk7CisgICAgeHFbMV1bM10gPSAtTVVMVDE2XzMyX1ExNChmcmVxblsxXSx4cVswXVsyXSk7CisKKyAgICB4b3V0MSA9IHhvdXQyID0gMDsKKworICAgIC8qIG5vdyBnZW5lcmF0ZSByZW1haW5pbmcgcm93cyAqLworCisgICAgZm9yKGk9MTtpPG07aSsrKSB7CisKKyAgICAgIGZvcihqPTE7ajwyKihpKzEpLTE7aisrKSB7CisJbXVsdCA9IE1VTFQxNl8zMl9RMTQoZnJlcW5bMippXSx4cFtpXVtqKzFdKTsKKwl4cFtpKzFdW2orMl0gPSBBREQzMihTVUIzMih4cFtpXVtqKzJdLCBtdWx0KSwgeHBbaV1bal0pOworCW11bHQgPSBNVUxUMTZfMzJfUTE0KGZyZXFuWzIqaSsxXSx4cVtpXVtqKzFdKTsKKwl4cVtpKzFdW2orMl0gPSBBREQzMihTVUIzMih4cVtpXVtqKzJdLCBtdWx0KSwgeHFbaV1bal0pOworICAgICAgfQorCisgICAgICAvKiBmb3IgbGFzdCBjb2wgeHBbaV1baisyXSA9IHhxW2ldW2orMl0gPSAwICovCisKKyAgICAgIG11bHQgPSBNVUxUMTZfMzJfUTE0KGZyZXFuWzIqaV0seHBbaV1baisxXSk7CisgICAgICB4cFtpKzFdW2orMl0gPSBTVUIzMih4cFtpXVtqXSwgbXVsdCk7CisgICAgICBtdWx0ID0gTVVMVDE2XzMyX1ExNChmcmVxblsyKmkrMV0seHFbaV1baisxXSk7CisgICAgICB4cVtpKzFdW2orMl0gPSBTVUIzMih4cVtpXVtqXSwgbXVsdCk7CisgICAgfQorCisgICAgLyogcHJvY2VzcyBsYXN0IHJvdyB0byBleHRyYSBhe2t9ICovCisKKyAgICBmb3Ioaj0xO2o8PWxwY3JkcjtqKyspIHsKKyAgICAgIGludCBzaGlmdCA9IFFJTVAtMTM7CisKKyAgICAgIC8qIGZpbmFsIGZpbHRlciBzZWN0aW9ucyAqLworICAgICAgYSA9IFBTSFIzMih4cFttXVtqKzJdICsgeG91dDEgKyB4cVttXVtqKzJdIC0geG91dDIsIHNoaWZ0KTsgCisgICAgICB4b3V0MSA9IHhwW21dW2orMl07CisgICAgICB4b3V0MiA9IHhxW21dW2orMl07CisgICAgICAKKyAgICAgIC8qIGhhcmQgbGltaXQgYWsncyB0byArLy0gMzI3NjcgKi8KKworICAgICAgaWYgKGEgPCAtMzI3NjcpIGEgPSAtMzI3Njc7CisgICAgICBpZiAoYSA+IDMyNzY3KSBhID0gMzI3Njc7CisgICAgICBha1tqLTFdID0gKHNob3J0KWE7CisgICAgIAorICAgIH0KKworfQorCisjZWxzZQorCit2b2lkIGxzcF90b19scGMoc3B4X2xzcF90ICpmcmVxLHNweF9jb2VmX3QgKmFrLGludCBscGNyZHIsIGNoYXIgKnN0YWNrKQorLyogIGZsb2F0ICpmcmVxIAlhcnJheSBvZiBMU1AgZnJlcXVlbmNpZXMgaW4gdGhlIHggZG9tYWluCSovCisvKiAgZmxvYXQgKmFrIAkJYXJyYXkgb2YgTFBDIGNvZWZmaWNpZW50cyAJCQkqLworLyogIGludCBscGNyZHIgIAlvcmRlciBvZiBMUEMgY29lZmZpY2llbnRzIAkJCSovCisKKworeworICAgIGludCBpLGo7CisgICAgZmxvYXQgeG91dDEseG91dDIseGluMSx4aW4yOworICAgIFZBUkRFQ0woZmxvYXQgKldwKTsKKyAgICBmbG9hdCAqcHcsKm4xLCpuMiwqbjMsKm40PU5VTEw7CisgICAgVkFSREVDTChmbG9hdCAqeF9mcmVxKTsKKyAgICBpbnQgbSA9IGxwY3Jkcj4+MTsKKworICAgIEFMTE9DKFdwLCA0Km0rMiwgZmxvYXQpOworICAgIHB3ID0gV3A7CisKKyAgICAvKiBpbml0aWFsaXNlIGNvbnRlbnRzIG9mIGFycmF5ICovCisKKyAgICBmb3IoaT0wO2k8PTQqbSsxO2krKyl7ICAgICAgIAkvKiBzZXQgY29udGVudHMgb2YgYnVmZmVyIHRvIDAgKi8KKwkqcHcrKyA9IDAuMDsKKyAgICB9CisKKyAgICAvKiBTZXQgcG9pbnRlcnMgdXAgKi8KKworICAgIHB3ID0gV3A7CisgICAgeGluMSA9IDEuMDsKKyAgICB4aW4yID0gMS4wOworCisgICAgQUxMT0MoeF9mcmVxLCBscGNyZHIsIGZsb2F0KTsKKyAgICBmb3IgKGk9MDtpPGxwY3JkcjtpKyspCisgICAgICAgeF9mcmVxW2ldID0gQU5HTEUyWChmcmVxW2ldKTsKKworICAgIC8qIHJlY29uc3RydWN0IFAoeikgYW5kIFEoeikgYnkgIGNhc2NhZGluZyBzZWNvbmQgb3JkZXIKKyAgICAgIHBvbHlub21pYWxzIGluIGZvcm0gMSAtIDJ4eigtMSkgK3ooLTIpLCB3aGVyZSB4IGlzIHRoZQorICAgICAgTFNQIGNvZWZmaWNpZW50ICovCisKKyAgICBmb3Ioaj0wO2o8PWxwY3JkcjtqKyspeworICAgICAgIGludCBpMj0wOworCWZvcihpPTA7aTxtO2krKyxpMis9Mil7CisJICAgIG4xID0gcHcrKGkqNCk7CisJICAgIG4yID0gbjEgKyAxOworCSAgICBuMyA9IG4yICsgMTsKKwkgICAgbjQgPSBuMyArIDE7CisJICAgIHhvdXQxID0geGluMSAtIDIuZip4X2ZyZXFbaTJdICogKm4xICsgKm4yOworCSAgICB4b3V0MiA9IHhpbjIgLSAyLmYqeF9mcmVxW2kyKzFdICogKm4zICsgKm40OworCSAgICAqbjIgPSAqbjE7CisJICAgICpuNCA9ICpuMzsKKwkgICAgKm4xID0geGluMTsKKwkgICAgKm4zID0geGluMjsKKwkgICAgeGluMSA9IHhvdXQxOworCSAgICB4aW4yID0geG91dDI7CisJfQorCXhvdXQxID0geGluMSArICoobjQrMSk7CisJeG91dDIgPSB4aW4yIC0gKihuNCsyKTsKKwlpZiAoaj4wKQorCSAgIGFrW2otMV0gPSAoeG91dDEgKyB4b3V0MikqMC41ZjsKKwkqKG40KzEpID0geGluMTsKKwkqKG40KzIpID0geGluMjsKKworCXhpbjEgPSAwLjA7CisJeGluMiA9IDAuMDsKKyAgICB9CisKK30KKyNlbmRpZgorCisKKyNpZmRlZiBGSVhFRF9QT0lOVAorCisvKk1ha2VzIHN1cmUgdGhlIExTUHMgYXJlIHN0YWJsZSovCit2b2lkIGxzcF9lbmZvcmNlX21hcmdpbihzcHhfbHNwX3QgKmxzcCwgaW50IGxlbiwgc3B4X3dvcmQxNl90IG1hcmdpbikKK3sKKyAgIGludCBpOworICAgc3B4X3dvcmQxNl90IG0gPSBtYXJnaW47CisgICBzcHhfd29yZDE2X3QgbTIgPSAyNTczNi1tYXJnaW47CisgIAorICAgaWYgKGxzcFswXTxtKQorICAgICAgbHNwWzBdPW07CisgICBpZiAobHNwW2xlbi0xXT5tMikKKyAgICAgIGxzcFtsZW4tMV09bTI7CisgICBmb3IgKGk9MTtpPGxlbi0xO2krKykKKyAgIHsKKyAgICAgIGlmIChsc3BbaV08bHNwW2ktMV0rbSkKKyAgICAgICAgIGxzcFtpXT1sc3BbaS0xXSttOworCisgICAgICBpZiAobHNwW2ldPmxzcFtpKzFdLW0pCisgICAgICAgICBsc3BbaV09IFNIUjE2KGxzcFtpXSwxKSArIFNIUjE2KGxzcFtpKzFdLW0sMSk7CisgICB9Cit9CisKKwordm9pZCBsc3BfaW50ZXJwb2xhdGUoc3B4X2xzcF90ICpvbGRfbHNwLCBzcHhfbHNwX3QgKm5ld19sc3AsIHNweF9sc3BfdCAqaW50ZXJwX2xzcCwgaW50IGxlbiwgaW50IHN1YmZyYW1lLCBpbnQgbmJfc3ViZnJhbWVzKQoreworICAgaW50IGk7CisgICBzcHhfd29yZDE2X3QgdG1wID0gRElWMzJfMTYoU0hMMzIoRVhURU5EMzIoMSArIHN1YmZyYW1lKSwxNCksbmJfc3ViZnJhbWVzKTsKKyAgIHNweF93b3JkMTZfdCB0bXAyID0gMTYzODQtdG1wOworICAgZm9yIChpPTA7aTxsZW47aSsrKQorICAgeworICAgICAgaW50ZXJwX2xzcFtpXSA9IE1VTFQxNl8xNl9QMTQodG1wMixvbGRfbHNwW2ldKSArIE1VTFQxNl8xNl9QMTQodG1wLG5ld19sc3BbaV0pOworICAgfQorfQorCisjZWxzZQorCisvKk1ha2VzIHN1cmUgdGhlIExTUHMgYXJlIHN0YWJsZSovCit2b2lkIGxzcF9lbmZvcmNlX21hcmdpbihzcHhfbHNwX3QgKmxzcCwgaW50IGxlbiwgc3B4X3dvcmQxNl90IG1hcmdpbikKK3sKKyAgIGludCBpOworICAgaWYgKGxzcFswXTxMU1BfU0NBTElORyptYXJnaW4pCisgICAgICBsc3BbMF09TFNQX1NDQUxJTkcqbWFyZ2luOworICAgaWYgKGxzcFtsZW4tMV0+TFNQX1NDQUxJTkcqKE1fUEktbWFyZ2luKSkKKyAgICAgIGxzcFtsZW4tMV09TFNQX1NDQUxJTkcqKE1fUEktbWFyZ2luKTsKKyAgIGZvciAoaT0xO2k8bGVuLTE7aSsrKQorICAgeworICAgICAgaWYgKGxzcFtpXTxsc3BbaS0xXStMU1BfU0NBTElORyptYXJnaW4pCisgICAgICAgICBsc3BbaV09bHNwW2ktMV0rTFNQX1NDQUxJTkcqbWFyZ2luOworCisgICAgICBpZiAobHNwW2ldPmxzcFtpKzFdLUxTUF9TQ0FMSU5HKm1hcmdpbikKKyAgICAgICAgIGxzcFtpXT0gLjVmKiAobHNwW2ldICsgbHNwW2krMV0tTFNQX1NDQUxJTkcqbWFyZ2luKTsKKyAgIH0KK30KKworCit2b2lkIGxzcF9pbnRlcnBvbGF0ZShzcHhfbHNwX3QgKm9sZF9sc3AsIHNweF9sc3BfdCAqbmV3X2xzcCwgc3B4X2xzcF90ICppbnRlcnBfbHNwLCBpbnQgbGVuLCBpbnQgc3ViZnJhbWUsIGludCBuYl9zdWJmcmFtZXMpCit7CisgICBpbnQgaTsKKyAgIGZsb2F0IHRtcCA9ICgxLjBmICsgc3ViZnJhbWUpL25iX3N1YmZyYW1lczsKKyAgIGZvciAoaT0wO2k8bGVuO2krKykKKyAgIHsKKyAgICAgIGludGVycF9sc3BbaV0gPSAoMS10bXApKm9sZF9sc3BbaV0gKyB0bXAqbmV3X2xzcFtpXTsKKyAgIH0KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9sc3AuaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2xzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNjZmNDIKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9sc3AuaApAQCAtMCwwICsxLDY0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCitPcmlnaW5hbCBDb3B5cmlnaHQKKwlGSUxFLi4uLi4uLi46IEFLMkxTUEQuSAorCVRZUEUuLi4uLi4uLjogVHVyYm8gQyBoZWFkZXIgZmlsZQorCUNPTVBBTlkuLi4uLjogVm9pY2V0cm9uaXgKKwlBVVRIT1IuLi4uLi46IEphbWVzIFdoaXRlaGFsbAorCURBVEUgQ1JFQVRFRDogMjEvMTEvOTUKKworTW9kaWZpZWQgYnkgSmVhbi1NYXJjIFZhbGluCisKKyAgICBUaGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIGZvciBjb252ZXJ0aW5nIExpbmVhciBQcmVkaWN0aW9uCisgICAgQ29lZmZpY2llbnRzIChMUEMpIHRvIExpbmUgU3BlY3RyYWwgUGFpciAoTFNQKSBhbmQgYmFjay4gTm90ZSB0aGF0IHRoZQorICAgIExTUCBjb2VmZmljaWVudHMgYXJlIG5vdCBpbiByYWRpYW5zIGZvcm1hdCBidXQgaW4gdGhlIHggZG9tYWluIG9mIHRoZQorICAgIHVuaXQgY2lyY2xlLgorCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgIEBmaWxlIGxzcC5oCisgICBAYnJpZWYgTGluZSBTcGVjdHJhbCBQYWlyIChMU1ApIGZ1bmN0aW9ucy4KKyovCisvKiBTcGVleCBMaWNlbnNlOgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgX19BSzJMU1BEX18KKyNkZWZpbmUgX19BSzJMU1BEX18KKworI2luY2x1ZGUgIm1pc2MuaCIKKworaW50IGxwY190b19sc3AgKHNweF9jb2VmX3QgKmEsIGludCBscGNyZHIsIHNweF9sc3BfdCAqZnJlcSwgaW50IG5iLCBzcHhfd29yZDE2X3QgZGVsdGEsIGNoYXIgKnN0YWNrKTsKK3ZvaWQgbHNwX3RvX2xwYyhzcHhfbHNwX3QgKmZyZXEsIHNweF9jb2VmX3QgKmFrLCBpbnQgbHBjcmRyLCBjaGFyICpzdGFjayk7CisKKy8qQWRkZWQgYnkgSk1WKi8KK3ZvaWQgbHNwX2VuZm9yY2VfbWFyZ2luKHNweF9sc3BfdCAqbHNwLCBpbnQgbGVuLCBzcHhfd29yZDE2X3QgbWFyZ2luKTsKKwordm9pZCBsc3BfaW50ZXJwb2xhdGUoc3B4X2xzcF90ICpvbGRfbHNwLCBzcHhfbHNwX3QgKm5ld19sc3AsIHNweF9sc3BfdCAqaW50ZXJwX2xzcCwgaW50IGxlbiwgaW50IHN1YmZyYW1lLCBpbnQgbmJfc3ViZnJhbWVzKTsKKworI2VuZGlmCS8qIF9fQUsyTFNQRF9fICovCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9sc3BfYmZpbi5oIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbHNwX2JmaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGU1MDUyCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbHNwX2JmaW4uaApAQCAtMCwwICsxLDg5IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgUm93ZSAqLworLyoqCisgICBAZmlsZSBsc3BfYmZpbi5oCisgICBAYXV0aG9yIERhdmlkIFJvd2UKKyAgIEBicmllZiBMU1Agcm91dGluZXMgb3B0aW1pc2VkIGZvciB0aGUgQmxhY2tmaW4KKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjZGVmaW5lIE9WRVJSSURFX0NIRUJfUE9MWV9FVkEKKyNpZmRlZiBPVkVSUklERV9DSEVCX1BPTFlfRVZBCitzdGF0aWMgaW5saW5lIHNweF93b3JkMzJfdCBjaGViX3BvbHlfZXZhKAorICBzcHhfd29yZDE2X3QgKmNvZWYsIC8qIFAgb3IgUSBjb2VmcyBpbiBRMTMgZm9ybWF0ICAgICAgICAgICAgICAgKi8KKyAgc3B4X3dvcmQxNl90ICAgICB4LCAvKiBjb3Mgb2YgZnJlcSAoLTEuMCB0byAxLjApIGluIFExNCBmb3JtYXQgICovCisgIGludCAgICAgICAgICAgICAgbSwgLyogTFBDIG9yZGVyLzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBjaGFyICAgICAgICAgKnN0YWNrCispCit7CisgICAgc3B4X3dvcmQzMl90IHN1bTsKKworICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKyAgICAgKAorICAgICAgIlAwID0gJTI7XG5cdCIgICAgICAgICAgIC8qIFAwOiBjb2VmW21dLCBjb2VmW20tMV0sLi4uLCBjb2VmWzBdICovCisgICAgICAiUjQgPSA4MTkyO1xuXHQiICAgICAgICAgLyogUjQ6IHJvdW5kaW5nIGNvbnN0YW50ICAgICAgICAgICAgICAgKi8KKyAgICAgICJSMiA9ICUxO1xuXHQiICAgICAgICAgICAvKiBSMjogeCAgKi8KKworICAgICAgIlI1ID0gLTE2MzgzO1xuXHQiCisgICAgICAiUjIgPSBNQVgoUjIsUjUpO1xuXHQiCisgICAgICAiUjUgPSAxNjM4Mztcblx0IgorICAgICAgIlIyID0gTUlOKFIyLFI1KTtcblx0IgorCisgICAgICAiUjMgPSBXW1AwLS1dIChYKTtcblx0IiAgLyogUjM6IHN1bSAqLworICAgICAgIlI1ID0gV1tQMC0tXSAoWCk7XG5cdCIKKyAgICAgICJSNSA9IFI1LkwgKiBSMi5MIChJUyk7XG5cdCIKKyAgICAgICJSNSA9IFI1ICsgUjQ7XG5cdCIKKyAgICAgICJSNSA+Pj49IDE0O1xuXHQiCisgICAgICAiUjMgPSBSMyArIFI1O1xuXHQiIAorICAgICAgCisgICAgICAiUjAgPSBSMjtcblx0IiAgICAgICAgICAgLyogUjA6IGIwICovCisgICAgICAiUjEgPSAxNjM4NDtcblx0IiAgICAgICAgLyogUjE6IGIxICovCisgICAgICAiTE9PUCBjcGUlPSBMQzAgPSAlMztcblx0IgorICAgICAgIkxPT1BfQkVHSU4gY3BlJT07XG5cdCIKKyAgICAgICAgIlAxID0gUjA7XG5cdCIgCisgICAgICAgICJSMCA9IFIyLkwgKiBSMC5MIChJUykgfHwgUjUgPSBXW1AwLS1dIChYKTtcblx0IgorICAgICAgICAiUjAgPj4+PSAxMztcblx0IgorICAgICAgICAiUjAgPSBSMCAtIFIxO1xuXHQiCisgICAgICAgICJSMSA9IFAxO1xuXHQiCisgICAgICAgICJSNSA9IFI1LkwgKiBSMC5MIChJUyk7XG5cdCIKKyAgICAgICAgIlI1ID0gUjUgKyBSNDtcblx0IgorICAgICAgICAiUjUgPj4+PSAxNDtcblx0IgorICAgICAgICAiUjMgPSBSMyArIFI1O1xuXHQiCisgICAgICAiTE9PUF9FTkQgY3BlJT07XG5cdCIKKyAgICAgICIlMCA9IFIzO1xuXHQiCisgICAgICA6ICI9JmQiIChzdW0pCisgICAgICA6ICJhIiAoeCksICJhIiAoJmNvZWZbbV0pLCAiYSIgKG0tMSkKKyAgICAgIDogIlIwIiwgIlIxIiwgIlIzIiwgIlIyIiwgIlI0IiwgIlI1IiwgIlAwIiwgIlAxIgorICAgICAgKTsKKyAgICByZXR1cm4gc3VtOworfQorI2VuZGlmCisKKworCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9sc3BfdGFibGVzX25iLmMgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9sc3BfdGFibGVzX25iLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZmMmUxYgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2xzcF90YWJsZXNfbmIuYwpAQCAtMCwwICsxLDM2MCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAKKyAgIEZpbGU6IGxzcF90YWJsZXNfbmIuYworICAgQ29kZWJvb2tzIGZvciBMU1BzIGluIG5hcnJvd2JhbmQgQ0VMUCBtb2RlCisgIAorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgICBtZXQ6CisKKyAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuICAKKworICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgICBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgICBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgICBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCitjb25zdCBzaWduZWQgY2hhciBjZGJrX25iWzY0MF09eworMzAsMTksMzgsMzQsNDAsMzIsNDYsNDMsNTgsNDMsCis1LC0xOCwtMjUsLTQwLC0zMywtNTUsLTUyLDIwLDM0LDI4LAorLTIwLC02MywtOTcsLTkyLDYxLDUzLDQ3LDQ5LDUzLDc1LAorLTE0LC01MywtNzcsLTc5LDAsLTMsLTUsMTksMjIsMjYsCistOSwtNTMsLTU1LDY2LDkwLDcyLDg1LDY4LDc0LDUyLAorLTQsLTQxLC01OCwtMzEsLTE4LC0zMSwyNywzMiwzMCwxOCwKKzI0LDMsOCw1LC0xMiwtMywyNiwyOCw3NCw2MywKKy0yLC0zOSwtNjcsLTc3LC0xMDYsLTc0LDU5LDU5LDczLDY1LAorNDQsNDAsNzEsNzIsODIsODMsOTgsODgsODksNjAsCistNiwtMzEsLTQ3LC00OCwtMTMsLTM5LC05LDcsMiw3OSwKKy0xLC0zOSwtNjAsLTE3LDg3LDgxLDY1LDUwLDQ1LDE5LAorLTIxLC02NywtOTEsLTg3LC00MSwtNTAsNywxOCwzOSw3NCwKKzEwLC0zMSwtMjgsMzksMjQsMTMsMjMsNSw1Niw0NSwKKzI5LDEwLC01LC0xMywtMTEsLTM1LC0xOCwtOCwtMTAsLTgsCistMjUsLTcxLC03NywtMjEsMiwxNiw1MCw2Myw4Nyw4NywKKzUsLTMyLC00MCwtNTEsLTY4LDAsMTIsNiw1NCwzNCwKKzUsLTEyLDMyLDUyLDY4LDY0LDY5LDU5LDY1LDQ1LAorMTQsLTE2LC0zMSwtNDAsLTY1LC02Nyw0MSw0OSw0NywzNywKKy0xMSwtNTIsLTc1LC04NCwtNCw1Nyw0OCw0Miw0MiwzMywKKy0xMSwtNTEsLTY4LC02LDEzLDAsOCwtOCwyNiwzMiwKKy0yMywtNTMsMCwzNiw1Niw3Niw5NywxMDUsMTExLDk3LAorLTEsLTI4LC0zOSwtNDAsLTQzLC01NCwtNDQsLTQwLC0xOCwzNSwKKzE2LC0yMCwtMTksLTI4LC00MiwyOSw0NywzOCw3NCw0NSwKKzMsLTI5LC00OCwtNjIsLTgwLC0xMDQsLTMzLDU2LDU5LDU5LAorMTAsMTcsNDYsNzIsODQsMTAxLDExNywxMjMsMTIzLDEwNiwKKy03LC0zMywtNDksLTUxLC03MCwtNjcsLTI3LC0zMSw3MCw2NywKKy0xNiwtNjIsLTg1LC0yMCw4Miw3MSw4Niw4MCw4NSw3NCwKKy0xOSwtNTgsLTc1LC00NSwtMjksLTMzLC0xOCwtMjUsNDUsNTcsCistMTIsLTQyLC01LDEyLDI4LDM2LDUyLDY0LDgxLDgyLAorMTMsLTksLTI3LC0yOCwyMiwzLDIsMjIsMjYsNiwKKy02LC00NCwtNTEsMiwxNSwxMCw0OCw0Myw0OSwzNCwKKy0xOSwtNjIsLTg0LC04OSwtMTAyLC0yNCw4LDE3LDYxLDY4LAorMzksMjQsMjMsMTksMTYsLTUsMTIsMTUsMjcsMTUsCistOCwtNDQsLTQ5LC02MCwtMTgsLTMyLC0yOCw1Miw1NCw2MiwKKy04LC00OCwtNzcsLTcwLDY2LDEwMSw4Myw2Myw2MSwzNywKKy0xMiwtNTAsLTc1LC02NCwzMywxNywxMywyNSwxNSw3NywKKzEsLTQyLC0yOSw3Miw2NCw0Niw0OSwzMSw2MSw0NCwKKy04LC00NywtNTQsLTQ2LC0zMCwxOSwyMCwtMSwtMTYsMCwKKzE2LC0xMiwtMTgsLTksLTI2LC0yNywtMTAsLTIyLDUzLDQ1LAorLTEwLC00NywtNzUsLTgyLC0xMDUsLTEwOSw4LDI1LDQ5LDc3LAorNTAsNjUsMTE0LDExNywxMjQsMTE4LDExNSw5Niw5MCw2MSwKKy05LC00NSwtNjMsLTYwLC03NSwtNTcsOCwxMSwyMCwyOSwKKzAsLTM1LC00OSwtNDMsNDAsNDcsMzUsNDAsNTUsMzgsCistMjQsLTc2LC0xMDMsLTExMiwtMjcsMywyMywzNCw1Miw3NSwKKzgsLTI5LC00MywxMiw2MywzOCwzNSwyOSwyNCw4LAorMjUsMTEsMSwtMTUsLTE4LC00MywtNywzNyw0MCwyMSwKKy0yMCwtNTYsLTE5LC0xOSwtNCwtMiwxMSwyOSw1MSw2MywKKy0yLC00NCwtNjIsLTc1LC04OSwzMCw1Nyw1MSw3NCw1MSwKKzUwLDQ2LDY4LDY0LDY1LDUyLDYzLDU1LDY1LDQzLAorMTgsLTksLTI2LC0zNSwtNTUsLTY5LDMsNiw4LDE3LAorLTE1LC02MSwtODYsLTk3LDEsODYsOTMsNzQsNzgsNjcsCistMSwtMzgsLTY2LC00OCw0OCwzOSwyOSwyNSwxNywtMSwKKzEzLDEzLDI5LDM5LDUwLDUxLDY5LDgyLDk3LDk4LAorLTIsLTM2LC00NiwtMjcsLTE2LC0zMCwtMTMsLTQsLTcsLTQsCisyNSwtNSwtMTEsLTYsLTI1LC0yMSwzMywxMiwzMSwyOSwKKy04LC0zOCwtNTIsLTYzLC02OCwtODksLTMzLC0xLDEwLDc0LAorLTIsLTE1LDU5LDkxLDEwNSwxMDUsMTAxLDg3LDg0LDYyLAorLTcsLTMzLC01MCwtMzUsLTU0LC00NywyNSwxNyw4Miw4MSwKKy0xMywtNTYsLTgzLDIxLDU4LDMxLDQyLDI1LDcyLDY1LAorLTI0LC02NiwtOTEsLTU2LDksLTIsMjEsMTAsNjksNzUsCisyLC0yNCwxMSwyMiwyNSwyOCwzOCwzNCw0OCwzMywKKzcsLTI5LC0yNiwxNywxNSwtMSwxNCwwLC0yLDAsCistNiwtNDEsLTY3LDYsLTIsLTksMTksMiw4NSw3NCwKKy0yMiwtNjcsLTg0LC03MSwtNTAsMywxMSwtOSwyLDYyfTsKKworY29uc3Qgc2lnbmVkIGNoYXIgY2Ria19uYl9sb3cxWzMyMF09eworLTM0LC01MiwtMTUsNDUsMiwKKzIzLDIxLDUyLDI0LC0zMywKKy05LC0xLDksLTQ0LC00MSwKKy0xMywtMTcsNDQsMjIsLTE3LAorLTYsLTQsLTEsMjIsMzgsCisyNiwxNiwyLDUwLDI3LAorLTM1LC0zNCwtOSwtNDEsNiwKKzAsLTE2LC0zNCw1MSw4LAorLTE0LC0zMSwtNDksMTUsLTMzLAorNDUsNDksMzMsLTExLC0zNywKKy02MiwtNTQsNDUsMTEsLTUsCistNzIsMTEsLTEsLTEyLC0xMSwKKzI0LDI3LC0xMSwtNDMsNDYsCis0MywzMywtMTIsLTksLTEsCisxLC00LC0yMywtNTcsLTcxLAorMTEsOCwxNiwxNywtOCwKKy0yMCwtMzEsLTQxLDUzLDQ4LAorLTE2LDMsNjUsLTI0LC04LAorLTIzLC0zMiwtMzcsLTMyLC00OSwKKy0xMCwtMTcsNiwzOCw1LAorLTksLTE3LC00Niw4LDUyLAorMyw2LDQ1LDQwLDM5LAorLTcsLTYsLTM0LC03NCwzMSwKKzgsMSwtMTYsNDMsNjgsCistMTEsLTE5LC0zMSw0LDYsCiswLC02LC0xNywtMTYsLTM4LAorLTE2LC0zMCwyLDksLTM5LAorLTE2LC0xLDQzLC0xMCw0OCwKKzMsMywtMTYsLTMxLC0zLAorNjIsNjgsNDMsMTMsMywKKy0xMCw4LDIwLC01NiwxMiwKKzEyLC0yLC0xOCwyMiwtMTUsCistNDAsLTM2LDEsNyw0MSwKKzAsMSw0NiwtNiwtNjIsCistNCwtMTIsLTIsLTExLC04MywKKy0xMywtMiw5MSwzMywtMTAsCiswLDQsLTExLC0xNiw3OSwKKzMyLDM3LDE0LDksNTEsCistMjEsLTI4LC01NiwtMzQsMCwKKzIxLDksLTI2LDExLDI4LAorLTQyLC01NCwtMjMsLTIsLTE1LAorMzEsMzAsOCwtMzksLTY2LAorLTM5LC0zNiwzMSwtMjgsLTQwLAorLTQ2LDM1LDQwLDIyLDI0LAorMzMsNDgsMjMsLTM0LDE0LAorNDAsMzIsMTcsMjcsLTMsCisyNSwyNiwtMTMsLTYxLC0xNywKKzExLDQsMzEsNjAsLTYsCistMjYsLTQxLC02NCwxMywxNiwKKy0yNiw1NCwzMSwtMTEsLTIzLAorLTksLTExLC0zNCwtNzEsLTIxLAorLTM0LC0zNSw1NSw1MCwyOSwKKy0yMiwtMjcsLTUwLC0zOCw1NywKKzMzLDQyLDU3LDQ4LDI2LAorMTEsMCwtNDksLTMxLDI2LAorLTQsLTE0LDUsNzgsMzcsCisxNywwLC00OSwtMTIsLTIzLAorMjYsMTQsMiwyLC00MywKKy0xNywtMTIsMTAsLTgsLTQsCis4LDE4LDEyLC02LDIwLAorLTEyLC02LC0xMywtMjUsMzQsCisxNSw0MCw0OSw3LDgsCisxMywyMCwyMCwtMTksLTIyLAorLTIsLTgsMiw1MSwtNTF9OworCitjb25zdCBzaWduZWQgY2hhciBjZGJrX25iX2xvdzJbMzIwXT17CistNiw1MywtMjEsLTI0LDQsCisyNiwxNywtNCwtMzcsMjUsCisxNywtMzYsLTEzLDMxLDMsCistNiwyNywxNSwtMTAsMzEsCisyOCwyNiwtMTAsLTEwLC00MCwKKzE2LC03LDE1LDEzLDQxLAorLTksMCwtNCw1MCwtNiwKKy03LDE0LDM4LDIyLDAsCistNDgsMiwxLC0xMywtMTksCiszMiwtMywtNjAsMTEsLTE3LAorLTEsLTI0LC0zNCwtMSwzNSwKKy01LC0yNywyOCw0NCwxMywKKzI1LDE1LDQyLC0xMSwxNSwKKzUxLDM1LC0zNiwyMCw4LAorLTQsLTEyLC0yOSwxOSwtNDcsCis0OSwtMTUsLTQsMTYsLTI5LAorLTM5LDE0LC0zMCw0LDI1LAorLTksLTUsLTUxLC0xNCwtMywKKy00MCwtMzIsMzgsNSwtOSwKKy04LC00LC0xLC0yMiw3MSwKKy0zLDE0LDI2LC0xOCwtMjIsCisyNCwtNDEsLTI1LC0yNCw2LAorMjMsMTksLTEwLDM5LC0yNiwKKy0yNyw2NSw0NSwyLC03LAorLTI2LC04LDIyLC0xMiwxNiwKKzE1LDE2LC0zNSwtNSwzMywKKy0yMSwtOCwwLDIzLDMzLAorMzQsNiwyMSwzNiw2LAorLTcsLTIyLDgsLTM3LC0xNCwKKzMxLDM4LDExLC00LC0zLAorLTM5LC0zMiwtOCwzMiwtMjMsCistNiwtMTIsMTYsMjAsLTI4LAorLTQsMjMsMTMsLTUyLC0xLAorMjIsNiwtMzMsLTQwLC02LAorNCwtNjIsMTMsNSwtMjYsCiszNSwzOSwxMSwyLDU3LAorLTExLDksLTIwLC0yOCwtMzMsCis1MiwtNSwtNiwtMiwyMiwKKy0xNCwtMTYsLTQ4LDM1LDEsCistNTgsMjAsMTMsMzMsLTEsCistNzQsNTYsLTE4LC0yMiwtMzEsCisxMiw2LC0xNCw0LC0yLAorLTksLTQ3LDEwLC0zLDI5LAorLTE3LC01LDYxLDE0LDQ3LAorLTEyLDIsNzIsLTM5LC0xNywKKzkyLDY0LC01MywtNTEsLTE1LAorLTMwLC0zOCwtNDEsLTI5LC0yOCwKKzI3LDksMzYsOSwtMzUsCistNDIsODEsLTIxLDIwLDI1LAorLTE2LC01LC0xNywtMzUsMjEsCisxNSwtMjgsNDgsMiwtMiwKKzksLTE5LDI5LC00MCwzMCwKKy0xOCwtMTgsMTgsLTE2LC01NywKKzE1LC0yMCwtMTIsLTE1LC0zNywKKy0xNSwzMywtMzksMjEsLTIyLAorLTEzLDM1LDExLDEzLC0zOCwKKy02MywyOSwyMywtMjcsMzIsCisxOCwzLC0yNiw0MiwzMywKKy02NCwtNjYsLTE3LDE2LDU2LAorMiwzNiwzLDMxLDIxLAorLTQxLC0zOSw4LC01NywxNCwKKzM3LC0yLDE5LC0zNiwtMTksCistMjMsLTI5LC0xNiwxLC0zLAorLTgsLTEwLDMxLDY0LC02NX07CisKK2NvbnN0IHNpZ25lZCBjaGFyIGNkYmtfbmJfaGlnaDFbMzIwXT17CistMjYsLTgsMjksMjEsNCwKKzE5LC0zOSwzMywtNywtMzYsCis1Niw1NCw0OCw0MCwyOSwKKy00LC0yNCwtNDIsLTY2LC00MywKKy02MCwxOSwtMiwzNyw0MSwKKy0xMCwtMzcsLTYwLC02NCwxOCwKKy0yMiw3Nyw3Myw0MCwyNSwKKzQsMTksLTE5LC02NiwtMiwKKzExLDUsMjEsMTQsMjYsCistMjUsLTg2LC00LDE4LDEsCisyNiwtMzcsMTAsMzcsLTEsCisyNCwtMTIsLTU5LC0xMSwyMCwKKy02LDM0LC0xNiwtMTYsNDIsCisxOSwtMjgsLTUxLDUzLDMyLAorNCwxMCw2MiwyMSwtMTIsCistMzQsMjcsNCwtNDgsLTQ4LAorLTUwLC00OSwzMSwtNywtMjEsCistNDIsLTI1LC00LC00MywtMjIsCis1OSwyLDI3LDEyLC05LAorLTYsLTE2LC04LC0zMiwtNTgsCistMTYsLTI5LC01LDQxLDIzLAorLTMwLC0zMywtNDYsLTEzLC0xMCwKKy0zOCw1Miw1MiwxLC0xNywKKy05LDEwLDI2LC0yNSwtNiwKKzMzLC0yMCw1Myw1NSwyNSwKKy0zMiwtNSwtNDIsMjMsMjEsCis2Niw1LC0yOCwyMCw5LAorNzUsMjksLTcsLTQyLC0zOSwKKzE1LDMsLTIzLDIxLDYsCisxMSwxLC0yOSwxNCw2MywKKzEwLDU0LDI2LC0yNCwtNTEsCistNDksNywtMjMsLTUxLDE1LAorLTY2LDEsNjAsMjUsMTAsCiswLC0zMCwtNCwtMTUsMTcsCisxOSw1OSw0MCw0LC01LAorMzMsNiwtMjIsLTU4LC03MCwKKy01LDIzLC02LDYwLDQ0LAorLTI5LC0xNiwtNDcsLTI5LDUyLAorLTE5LDUwLDI4LDE2LDM1LAorMzEsMzYsMCwtMjEsNiwKKzIxLDI3LDIyLDQyLDcsCistNjYsLTQwLC04LDcsMTksCis0NiwwLC00LDYwLDM2LAorNDUsLTcsLTI5LC02LC0zMiwKKy0zOSwyLDYsLTksMzMsCisyMCwtNTEsLTM0LDE4LC02LAorMTksNiwxMSw1LC0xOSwKKy0yOSwtMiw0MiwtMTEsLTQ1LAorLTIxLC01NSw1NywzNywyLAorLTE0LC02NywtMTYsLTI3LC0zOCwKKzY5LDQ4LDE5LDIsLTE3LAorMjAsLTIwLC0xNiwtMzQsLTE3LAorLTI1LC02MSwxMCw3Myw0NSwKKzE2LC00MCwtNjQsLTE3LC0yOSwKKy0yMiw1NiwxNywtMzksOCwKKy0xMSw4LC0yNSwtMTgsLTEzLAorLTE5LDgsNTQsNTcsMzYsCistMTcsLTI2LC00LDYsLTIxLAorNDAsNDIsLTQsMjAsMzEsCis1MywxMCwtMzQsLTUzLDMxLAorLTE3LDM1LDAsMTUsLTYsCistMjAsLTYzLC03MywyMiwyNSwKKzI5LDE3LDgsLTI5LC0zOSwKKy02OSwxOCwxNSwtMTUsLTV9OworCitjb25zdCBzaWduZWQgY2hhciBjZGJrX25iX2hpZ2gyWzMyMF09eworMTEsNDcsMTYsLTksLTQ2LAorLTMyLDI2LC02NCwzNCwtNSwKKzM4LC03LDQ3LDIwLDIsCistNzMsLTk5LC0zLC00NSwyMCwKKzcwLC01MiwxNSwtNiwtNywKKy04MiwzMSwyMSw0Nyw1MSwKKzM5LC0zLDksMCwtNDEsCistNywtMTUsLTU0LDIsMCwKKzI3LC0zMSw5LC00NSwtMjIsCistMzgsLTI0LC0yNCw4LC0zMywKKzIzLDUsNTAsLTM2LC0xNywKKy0xOCwtNTEsLTIsMTMsMTksCis0MywxMiwtMTUsLTEyLDYxLAorMzgsMzgsNywxMywwLAorNiwtMSwzLDYyLDksCisyNywyMiwtMzMsMzgsLTM1LAorLTksMzAsLTQzLC05LC0zMiwKKy0xLDQsLTQsMSwtNSwKKy0xMSwtOCwzOCwzMSwxMSwKKy0xMCwtNDIsLTIxLC0zNywxLAorNDMsMTUsLTEzLC0zNSwtMTksCistMTgsMTUsMjMsLTI2LDU5LAorMSwtMjEsNTMsOCwtNDEsCistNTAsLTE0LC0yOCw0LDIxLAorMjUsLTI4LC00MCw1LC00MCwKKy00MSw0LDUxLC0zMywtOCwKKy04LDEsMTcsLTYwLDEyLAorMjUsLTQxLDE3LDM0LDQzLAorMTksNDUsNywtMzcsMjQsCistMTUsNTYsLTIsMzUsLTEwLAorNDgsNCwtNDcsLTIsNSwKKy01LC01NCw1LC0zLC0zMywKKy0xMCwzMCwtMiwtNDQsLTI0LAorLTM4LDksLTksNDIsNCwKKzYsLTU2LDQ0LC0xNiw5LAorLTQwLC0yNiwxOCwtMjAsMTAsCisyOCwtNDEsLTIxLC00LDEzLAorLTE4LDMyLC0zMCwtMywzNywKKzE1LDIyLDI4LDUwLC00MCwKKzMsLTI5LC02NCw3LDUxLAorLTE5LC0xMSwxNywtMjcsLTQwLAorLTY0LDI0LC0xMiwtNywtMjcsCiszLDM3LDQ4LC0xLDIsCistOSwtMzgsLTM0LDQ2LDEsCisyNywtNiwxOSwtMTMsMjYsCisxMCwzNCwyMCwyNSw0MCwKKzUwLC02LC03LDMwLDksCistMjQsMCwtMjMsNzEsLTYxLAorMjIsNTgsLTM0LC00LDIsCistNDksLTMzLDI1LDMwLC04LAorLTYsLTE2LDc3LDIsMzgsCistOCwtMzUsLTYsLTMwLDU2LAorNzgsMzEsMzMsLTIwLDEzLAorLTM5LDIwLDIyLDQsMjEsCistOCw0LC02LDEwLC04MywKKy00MSw5LC0yNSwtNDMsMTUsCistNywtMTIsLTM0LC0zOSwtMzcsCistMzMsMTksMzAsMTYsLTMzLAorNDIsLTI1LDI1LC02OCw0NCwKKy0xNSwtMTEsLTQsMjMsNTAsCisxNCw0LC0zOSwtNDMsMjAsCistMzAsNjAsOSwtMjAsNywKKzE2LDE5LC0zMywzNywyOSwKKzE2LC0zNSw3LDM4LC0yN307CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9sdHAuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2x0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNzdkYTIKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9sdHAuYwpAQCAtMCwwICsxLDg0NiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDYgSmVhbi1NYXJjIFZhbGluIAorICAgRmlsZTogbHRwLmMKKyAgIExvbmctVGVybSBQcmVkaWN0aW9uIGZ1bmN0aW9ucworCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlICJsdHAuaCIKKyNpbmNsdWRlICJzdGFja19hbGxvYy5oIgorI2luY2x1ZGUgImZpbHRlcnMuaCIKKyNpbmNsdWRlIDxzcGVleC9zcGVleF9iaXRzLmg+CisjaW5jbHVkZSAibWF0aF9hcHByb3guaCIKKworI2lmbmRlZiBOVUxMCisjZGVmaW5lIE5VTEwgMAorI2VuZGlmCisKKworI2lmZGVmIF9VU0VfU1NFCisjaW5jbHVkZSAibHRwX3NzZS5oIgorI2VsaWYgZGVmaW5lZCAoQVJNNF9BU00pIHx8IGRlZmluZWQoQVJNNUVfQVNNKQorI2luY2x1ZGUgImx0cF9hcm00LmgiCisjZWxpZiBkZWZpbmVkIChCRklOX0FTTSkKKyNpbmNsdWRlICJsdHBfYmZpbi5oIgorI2VuZGlmCisKKyNpZm5kZWYgT1ZFUlJJREVfSU5ORVJfUFJPRAorc3B4X3dvcmQzMl90IGlubmVyX3Byb2QoY29uc3Qgc3B4X3dvcmQxNl90ICp4LCBjb25zdCBzcHhfd29yZDE2X3QgKnksIGludCBsZW4pCit7CisgICBzcHhfd29yZDMyX3Qgc3VtPTA7CisgICBsZW4gPj49IDI7CisgICB3aGlsZShsZW4tLSkKKyAgIHsKKyAgICAgIHNweF93b3JkMzJfdCBwYXJ0PTA7CisgICAgICBwYXJ0ID0gTUFDMTZfMTYocGFydCwqeCsrLCp5KyspOworICAgICAgcGFydCA9IE1BQzE2XzE2KHBhcnQsKngrKywqeSsrKTsKKyAgICAgIHBhcnQgPSBNQUMxNl8xNihwYXJ0LCp4KyssKnkrKyk7CisgICAgICBwYXJ0ID0gTUFDMTZfMTYocGFydCwqeCsrLCp5KyspOworICAgICAgLyogSElOVDogSWYgeW91IGhhZCBhIDQwLWJpdCBhY2N1bXVsYXRvciwgeW91IGNvdWxkIHNoaWZ0IG9ubHkgYXQgdGhlIGVuZCAqLworICAgICAgc3VtID0gQUREMzIoc3VtLFNIUjMyKHBhcnQsNikpOworICAgfQorICAgcmV0dXJuIHN1bTsKK30KKyNlbmRpZgorCisjaWZuZGVmIE9WRVJSSURFX1BJVENIX1hDT1JSCisjaWYgMCAvKiBISU5UOiBFbmFibGUgdGhpcyBmb3IgbWFjaGluZXMgd2l0aCBlbm91Z2ggcmVnaXN0ZXJzIChpLmUuIG5vdCB4ODYpICovCit2b2lkIHBpdGNoX3hjb3JyKGNvbnN0IHNweF93b3JkMTZfdCAqX3gsIGNvbnN0IHNweF93b3JkMTZfdCAqX3ksIHNweF93b3JkMzJfdCAqY29yciwgaW50IGxlbiwgaW50IG5iX3BpdGNoLCBjaGFyICpzdGFjaykKK3sKKyAgIGludCBpLGo7CisgICBmb3IgKGk9MDtpPG5iX3BpdGNoO2krPTQpCisgICB7CisgICAgICAvKiBDb21wdXRlIGNvcnJlbGF0aW9uKi8KKyAgICAgIC8qY29ycltuYl9waXRjaC0xLWldPWlubmVyX3Byb2QoeCwgX3kraSwgbGVuKTsqLworICAgICAgc3B4X3dvcmQzMl90IHN1bTE9MDsKKyAgICAgIHNweF93b3JkMzJfdCBzdW0yPTA7CisgICAgICBzcHhfd29yZDMyX3Qgc3VtMz0wOworICAgICAgc3B4X3dvcmQzMl90IHN1bTQ9MDsKKyAgICAgIGNvbnN0IHNweF93b3JkMTZfdCAqeSA9IF95K2k7CisgICAgICBjb25zdCBzcHhfd29yZDE2X3QgKnggPSBfeDsKKyAgICAgIHNweF93b3JkMTZfdCB5MCwgeTEsIHkyLCB5MzsKKyAgICAgIC8qeTA9eVswXTt5MT15WzFdO3kyPXlbMl07eTM9eVszXTsqLworICAgICAgeTA9KnkrKzsKKyAgICAgIHkxPSp5Kys7CisgICAgICB5Mj0qeSsrOworICAgICAgeTM9KnkrKzsKKyAgICAgIGZvciAoaj0wO2o8bGVuO2orPTQpCisgICAgICB7CisgICAgICAgICBzcHhfd29yZDMyX3QgcGFydDE7CisgICAgICAgICBzcHhfd29yZDMyX3QgcGFydDI7CisgICAgICAgICBzcHhfd29yZDMyX3QgcGFydDM7CisgICAgICAgICBzcHhfd29yZDMyX3QgcGFydDQ7CisgICAgICAgICBwYXJ0MSA9IE1VTFQxNl8xNigqeCx5MCk7CisgICAgICAgICBwYXJ0MiA9IE1VTFQxNl8xNigqeCx5MSk7CisgICAgICAgICBwYXJ0MyA9IE1VTFQxNl8xNigqeCx5Mik7CisgICAgICAgICBwYXJ0NCA9IE1VTFQxNl8xNigqeCx5Myk7CisgICAgICAgICB4Kys7CisgICAgICAgICB5MD0qeSsrOworICAgICAgICAgcGFydDEgPSBNQUMxNl8xNihwYXJ0MSwqeCx5MSk7CisgICAgICAgICBwYXJ0MiA9IE1BQzE2XzE2KHBhcnQyLCp4LHkyKTsKKyAgICAgICAgIHBhcnQzID0gTUFDMTZfMTYocGFydDMsKngseTMpOworICAgICAgICAgcGFydDQgPSBNQUMxNl8xNihwYXJ0NCwqeCx5MCk7CisgICAgICAgICB4Kys7CisgICAgICAgICB5MT0qeSsrOworICAgICAgICAgcGFydDEgPSBNQUMxNl8xNihwYXJ0MSwqeCx5Mik7CisgICAgICAgICBwYXJ0MiA9IE1BQzE2XzE2KHBhcnQyLCp4LHkzKTsKKyAgICAgICAgIHBhcnQzID0gTUFDMTZfMTYocGFydDMsKngseTApOworICAgICAgICAgcGFydDQgPSBNQUMxNl8xNihwYXJ0NCwqeCx5MSk7CisgICAgICAgICB4Kys7CisgICAgICAgICB5Mj0qeSsrOworICAgICAgICAgcGFydDEgPSBNQUMxNl8xNihwYXJ0MSwqeCx5Myk7CisgICAgICAgICBwYXJ0MiA9IE1BQzE2XzE2KHBhcnQyLCp4LHkwKTsKKyAgICAgICAgIHBhcnQzID0gTUFDMTZfMTYocGFydDMsKngseTEpOworICAgICAgICAgcGFydDQgPSBNQUMxNl8xNihwYXJ0NCwqeCx5Mik7CisgICAgICAgICB4Kys7CisgICAgICAgICB5Mz0qeSsrOworICAgICAgICAgCisgICAgICAgICBzdW0xID0gQUREMzIoc3VtMSxTSFIzMihwYXJ0MSw2KSk7CisgICAgICAgICBzdW0yID0gQUREMzIoc3VtMixTSFIzMihwYXJ0Miw2KSk7CisgICAgICAgICBzdW0zID0gQUREMzIoc3VtMyxTSFIzMihwYXJ0Myw2KSk7CisgICAgICAgICBzdW00ID0gQUREMzIoc3VtNCxTSFIzMihwYXJ0NCw2KSk7CisgICAgICB9CisgICAgICBjb3JyW25iX3BpdGNoLTEtaV09c3VtMTsKKyAgICAgIGNvcnJbbmJfcGl0Y2gtMi1pXT1zdW0yOworICAgICAgY29ycltuYl9waXRjaC0zLWldPXN1bTM7CisgICAgICBjb3JyW25iX3BpdGNoLTQtaV09c3VtNDsKKyAgIH0KKworfQorI2Vsc2UKK3ZvaWQgcGl0Y2hfeGNvcnIoY29uc3Qgc3B4X3dvcmQxNl90ICpfeCwgY29uc3Qgc3B4X3dvcmQxNl90ICpfeSwgc3B4X3dvcmQzMl90ICpjb3JyLCBpbnQgbGVuLCBpbnQgbmJfcGl0Y2gsIGNoYXIgKnN0YWNrKQoreworICAgaW50IGk7CisgICBmb3IgKGk9MDtpPG5iX3BpdGNoO2krKykKKyAgIHsKKyAgICAgIC8qIENvbXB1dGUgY29ycmVsYXRpb24qLworICAgICAgY29ycltuYl9waXRjaC0xLWldPWlubmVyX3Byb2QoX3gsIF95K2ksIGxlbik7CisgICB9CisKK30KKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgT1ZFUlJJREVfQ09NUFVURV9QSVRDSF9FUlJPUgorc3RhdGljIGlubGluZSBzcHhfd29yZDMyX3QgY29tcHV0ZV9waXRjaF9lcnJvcihzcHhfd29yZDE2X3QgKkMsIHNweF93b3JkMTZfdCAqZywgc3B4X3dvcmQxNl90IHBpdGNoX2NvbnRyb2wpCit7CisgICBzcHhfd29yZDMyX3Qgc3VtID0gMDsKKyAgIHN1bSA9IEFERDMyKHN1bSxNVUxUMTZfMTYoTVVMVDE2XzE2XzE2KGdbMF0scGl0Y2hfY29udHJvbCksQ1swXSkpOworICAgc3VtID0gQUREMzIoc3VtLE1VTFQxNl8xNihNVUxUMTZfMTZfMTYoZ1sxXSxwaXRjaF9jb250cm9sKSxDWzFdKSk7CisgICBzdW0gPSBBREQzMihzdW0sTVVMVDE2XzE2KE1VTFQxNl8xNl8xNihnWzJdLHBpdGNoX2NvbnRyb2wpLENbMl0pKTsKKyAgIHN1bSA9IFNVQjMyKHN1bSxNVUxUMTZfMTYoTVVMVDE2XzE2XzE2KGdbMF0sZ1sxXSksQ1szXSkpOworICAgc3VtID0gU1VCMzIoc3VtLE1VTFQxNl8xNihNVUxUMTZfMTZfMTYoZ1syXSxnWzFdKSxDWzRdKSk7CisgICBzdW0gPSBTVUIzMihzdW0sTVVMVDE2XzE2KE1VTFQxNl8xNl8xNihnWzJdLGdbMF0pLENbNV0pKTsKKyAgIHN1bSA9IFNVQjMyKHN1bSxNVUxUMTZfMTYoTVVMVDE2XzE2XzE2KGdbMF0sZ1swXSksQ1s2XSkpOworICAgc3VtID0gU1VCMzIoc3VtLE1VTFQxNl8xNihNVUxUMTZfMTZfMTYoZ1sxXSxnWzFdKSxDWzddKSk7CisgICBzdW0gPSBTVUIzMihzdW0sTVVMVDE2XzE2KE1VTFQxNl8xNl8xNihnWzJdLGdbMl0pLENbOF0pKTsKKyAgIHJldHVybiBzdW07Cit9CisjZW5kaWYKKworI2lmbmRlZiBPVkVSUklERV9PUEVOX0xPT1BfTkJFU1RfUElUQ0gKK3ZvaWQgb3Blbl9sb29wX25iZXN0X3BpdGNoKHNweF93b3JkMTZfdCAqc3csIGludCBzdGFydCwgaW50IGVuZCwgaW50IGxlbiwgaW50ICpwaXRjaCwgc3B4X3dvcmQxNl90ICpnYWluLCBpbnQgTiwgY2hhciAqc3RhY2spCit7CisgICBpbnQgaSxqLGs7CisgICBWQVJERUNMKHNweF93b3JkMzJfdCAqYmVzdF9zY29yZSk7CisgICBWQVJERUNMKHNweF93b3JkMzJfdCAqYmVzdF9lbmVyKTsKKyAgIHNweF93b3JkMzJfdCBlMDsKKyAgIFZBUkRFQ0woc3B4X3dvcmQzMl90ICpjb3JyKTsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgLyogSW4gZml4ZWQtcG9pbnQsIHdlIG5lZWQgb25seSBvbmUgKHRlbXBvcmFyeSkgYXJyYXkgb2YgMzItYml0IHZhbHVlcyBhbmQgdHdvIChjb3JyMTYsIGVuZXIxNikgCisgICAgICBhcnJheXMgZm9yIChub3JtYWxpemVkKSAxNi1iaXQgdmFsdWVzICovCisgICBWQVJERUNMKHNweF93b3JkMTZfdCAqY29ycjE2KTsKKyAgIFZBUkRFQ0woc3B4X3dvcmQxNl90ICplbmVyMTYpOworICAgc3B4X3dvcmQzMl90ICplbmVyZ3k7CisgICBpbnQgY3NoaWZ0PTAsIGVzaGlmdD0wOworICAgaW50IHNjYWxlZG93biA9IDA7CisgICBBTExPQyhjb3JyMTYsIGVuZC1zdGFydCsxLCBzcHhfd29yZDE2X3QpOworICAgQUxMT0MoZW5lcjE2LCBlbmQtc3RhcnQrMSwgc3B4X3dvcmQxNl90KTsKKyAgIEFMTE9DKGNvcnIsIGVuZC1zdGFydCsxLCBzcHhfd29yZDMyX3QpOworICAgZW5lcmd5ID0gY29ycjsKKyNlbHNlCisgICAvKiBJbiBmbG9hdGluZy1wb2ludCwgd2UgbmVlZCB0byBmbG9hdCBhcnJheXMgYW5kIG5vIG5vcm1hbGl6ZWQgY29waWVzICovCisgICBWQVJERUNMKHNweF93b3JkMzJfdCAqZW5lcmd5KTsKKyAgIHNweF93b3JkMTZfdCAqY29ycjE2OworICAgc3B4X3dvcmQxNl90ICplbmVyMTY7CisgICBBTExPQyhlbmVyZ3ksIGVuZC1zdGFydCsyLCBzcHhfd29yZDMyX3QpOworICAgQUxMT0MoY29yciwgZW5kLXN0YXJ0KzEsIHNweF93b3JkMzJfdCk7CisgICBjb3JyMTYgPSBjb3JyOworICAgZW5lcjE2ID0gZW5lcmd5OworI2VuZGlmCisgICAKKyAgIEFMTE9DKGJlc3Rfc2NvcmUsIE4sIHNweF93b3JkMzJfdCk7CisgICBBTExPQyhiZXN0X2VuZXIsIE4sIHNweF93b3JkMzJfdCk7CisgICBmb3IgKGk9MDtpPE47aSsrKQorICAgeworICAgICAgICBiZXN0X3Njb3JlW2ldPS0xOworICAgICAgICBiZXN0X2VuZXJbaV09MDsKKyAgICAgICAgcGl0Y2hbaV09c3RhcnQ7CisgICB9CisgICAKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgZm9yIChpPS1lbmQ7aTxsZW47aSsrKQorICAgeworICAgICAgaWYgKEFCUzE2KHN3W2ldKT4xNjM4MykKKyAgICAgIHsKKyAgICAgICAgIHNjYWxlZG93bj0xOworICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICB9CisgICAvKiBJZiB0aGUgd2VpZ2h0ZWQgaW5wdXQgaXMgY2xvc2UgdG8gc2F0dXJhdGlvbiwgdGhlbiB3ZSBzY2FsZSBpdCBkb3duICovCisgICBpZiAoc2NhbGVkb3duKQorICAgeworICAgICAgZm9yIChpPS1lbmQ7aTxsZW47aSsrKQorICAgICAgeworICAgICAgICAgc3dbaV09U0hSMTYoc3dbaV0sMSk7CisgICAgICB9CisgICB9ICAgICAgCisjZW5kaWYKKyAgIGVuZXJneVswXT1pbm5lcl9wcm9kKHN3LXN0YXJ0LCBzdy1zdGFydCwgbGVuKTsKKyAgIGUwPWlubmVyX3Byb2Qoc3csIHN3LCBsZW4pOworICAgZm9yIChpPXN0YXJ0O2k8ZW5kO2krKykKKyAgIHsKKyAgICAgIC8qIFVwZGF0ZSBlbmVyZ3kgZm9yIG5leHQgcGl0Y2gqLworICAgICAgZW5lcmd5W2ktc3RhcnQrMV0gPSBTVUIzMihBREQzMihlbmVyZ3lbaS1zdGFydF0sU0hSMzIoTVVMVDE2XzE2KHN3Wy1pLTFdLHN3Wy1pLTFdKSw2KSksIFNIUjMyKE1VTFQxNl8xNihzd1staStsZW4tMV0sc3dbLWkrbGVuLTFdKSw2KSk7CisgICAgICBpZiAoZW5lcmd5W2ktc3RhcnQrMV0gPCAwKQorICAgICAgICAgZW5lcmd5W2ktc3RhcnQrMV0gPSAwOworICAgfQorICAgCisjaWZkZWYgRklYRURfUE9JTlQKKyAgIGVzaGlmdCA9IG5vcm1hbGl6ZTE2KGVuZXJneSwgZW5lcjE2LCAzMjc2NiwgZW5kLXN0YXJ0KzEpOworI2VuZGlmCisgICAKKyAgIC8qIEluIGZpeGVkLXBvaW50LCB0aGlzIGFjdHVhbGx5IG92ZXJyaXRlcyB0aGUgZW5lcmd5IGFycmF5IChhbGlhc2VkIHRvIGNvcnIpICovCisgICBwaXRjaF94Y29ycihzdywgc3ctZW5kLCBjb3JyLCBsZW4sIGVuZC1zdGFydCsxLCBzdGFjayk7CisgICAKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgLyogTm9ybWFsaXplIHRvIDE4MCBzbyB3ZSBjYW4gc3F1YXJlIGl0IGFuZCBpdCBzdGlsbCBmaXRzIGluIDE2IGJpdHMgKi8KKyAgIGNzaGlmdCA9IG5vcm1hbGl6ZTE2KGNvcnIsIGNvcnIxNiwgMTgwLCBlbmQtc3RhcnQrMSk7CisgICAvKiBJZiB3ZSBzY2FsZWQgd2VpZ2h0ZWQgaW5wdXQgZG93biwgd2UgbmVlZCB0byBzY2FsZSBpdCB1cCBhZ2FpbiAoT0ssIHNvIHdlJ3ZlIGp1c3QgbG9zdCB0aGUgTFNCLCB3aG8gY2FyZXM/KSAqLworICAgaWYgKHNjYWxlZG93bikKKyAgIHsKKyAgICAgIGZvciAoaT0tZW5kO2k8bGVuO2krKykKKyAgICAgIHsKKyAgICAgICAgIHN3W2ldPVNITDE2KHN3W2ldLDEpOworICAgICAgfQorICAgfSAgICAgIAorI2VuZGlmCisKKyAgIC8qIFNlYXJjaCBmb3IgdGhlIGJlc3QgcGl0Y2ggcHJlZGljdGlvbiBnYWluICovCisgICBmb3IgKGk9c3RhcnQ7aTw9ZW5kO2krKykKKyAgIHsKKyAgICAgIHNweF93b3JkMTZfdCB0bXAgPSBNVUxUMTZfMTZfMTYoY29ycjE2W2ktc3RhcnRdLGNvcnIxNltpLXN0YXJ0XSk7CisgICAgICAvKiBJbnN0ZWFkIG9mIGRpdmlkaW5nIHRoZSB0bXAgYnkgdGhlIGVuZXJneSwgd2UgbXVsdGlwbHkgb24gdGhlIG90aGVyIHNpZGUgKi8KKyAgICAgIGlmIChNVUxUMTZfMTYodG1wLGJlc3RfZW5lcltOLTFdKT5NVUxUMTZfMTYoYmVzdF9zY29yZVtOLTFdLEFERDE2KDEsZW5lcjE2W2ktc3RhcnRdKSkpCisgICAgICB7CisgICAgICAgICAvKiBXZSBjYW4gc2FmZWx5IHB1dCBpdCBsYXN0IGFuZCB0aGVuIGNoZWNrICovCisgICAgICAgICBiZXN0X3Njb3JlW04tMV09dG1wOworICAgICAgICAgYmVzdF9lbmVyW04tMV09ZW5lcjE2W2ktc3RhcnRdKzE7CisgICAgICAgICBwaXRjaFtOLTFdPWk7CisgICAgICAgICAvKiBDaGVjayBpZiBpdCBjb21lcyBpbiBmcm9udCBvZiBvdGhlcnMgKi8KKyAgICAgICAgIGZvciAoaj0wO2o8Ti0xO2orKykKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChNVUxUMTZfMTYodG1wLGJlc3RfZW5lcltqXSk+TVVMVDE2XzE2KGJlc3Rfc2NvcmVbal0sQUREMTYoMSxlbmVyMTZbaS1zdGFydF0pKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGZvciAoaz1OLTE7az5qO2stLSkKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGJlc3Rfc2NvcmVba109YmVzdF9zY29yZVtrLTFdOworICAgICAgICAgICAgICAgICAgYmVzdF9lbmVyW2tdPWJlc3RfZW5lcltrLTFdOworICAgICAgICAgICAgICAgICAgcGl0Y2hba109cGl0Y2hbay0xXTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGJlc3Rfc2NvcmVbal09dG1wOworICAgICAgICAgICAgICAgYmVzdF9lbmVyW2pdPWVuZXIxNltpLXN0YXJ0XSsxOworICAgICAgICAgICAgICAgcGl0Y2hbal09aTsKKyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgfQorICAgfQorICAgCisgICAvKiBDb21wdXRlIG9wZW4tbG9vcCBnYWluIGlmIG5lY2Vzc2FyeSAqLworICAgaWYgKGdhaW4pCisgICB7CisgICAgICBmb3IgKGo9MDtqPE47aisrKQorICAgICAgeworICAgICAgICAgc3B4X3dvcmQxNl90IGc7CisgICAgICAgICBpPXBpdGNoW2pdOworICAgICAgICAgZyA9IERJVjMyKFNITDMyKEVYVEVORDMyKGNvcnIxNltpLXN0YXJ0XSksY3NoaWZ0KSwgMTArU0hSMzIoTVVMVDE2XzE2KHNweF9zcXJ0KGUwKSxzcHhfc3FydChTSEwzMihFWFRFTkQzMihlbmVyMTZbaS1zdGFydF0pLGVzaGlmdCkpKSw2KSk7CisgICAgICAgICAvKiBGSVhNRTogZyA9IG1heChnLGNvcnIvZW5lcmd5KSAqLworICAgICAgICAgaWYgKGc8MCkKKyAgICAgICAgICAgIGcgPSAwOworICAgICAgICAgZ2FpbltqXT1nOworICAgICAgfQorICAgfQorCisKK30KKyNlbmRpZgorCisjaWZuZGVmIE9WRVJSSURFX1BJVENIX0dBSU5fU0VBUkNIXzNUQVBfVlEKK3N0YXRpYyBpbnQgcGl0Y2hfZ2Fpbl9zZWFyY2hfM3RhcF92cSgKKyAgY29uc3Qgc2lnbmVkIGNoYXIgKmdhaW5fY2RiaywKKyAgaW50ICAgICAgICAgICAgICAgIGdhaW5fY2Ria19zaXplLAorICBzcHhfd29yZDE2X3QgICAgICAqQzE2LAorICBzcHhfd29yZDE2X3QgICAgICAgbWF4X2dhaW4KKykKK3sKKyAgY29uc3Qgc2lnbmVkIGNoYXIgKnB0cj1nYWluX2NkYms7CisgIGludCAgICAgICAgICAgICAgICBiZXN0X2NkYms9MDsKKyAgc3B4X3dvcmQzMl90ICAgICAgIGJlc3Rfc3VtPS1WRVJZX0xBUkdFMzI7CisgIHNweF93b3JkMzJfdCAgICAgICBzdW09MDsKKyAgc3B4X3dvcmQxNl90ICAgICAgIGdbM107CisgIHNweF93b3JkMTZfdCAgICAgICBwaXRjaF9jb250cm9sPTY0OworICBzcHhfd29yZDE2X3QgICAgICAgZ2Fpbl9zdW07CisgIGludCAgICAgICAgICAgICAgICBpOworCisgIGZvciAoaT0wO2k8Z2Fpbl9jZGJrX3NpemU7aSsrKSB7CisgICAgICAgICAKKyAgICBwdHIgPSBnYWluX2NkYmsrNCppOworICAgIGdbMF09QUREMTYoKHNweF93b3JkMTZfdClwdHJbMF0sMzIpOworICAgIGdbMV09QUREMTYoKHNweF93b3JkMTZfdClwdHJbMV0sMzIpOworICAgIGdbMl09QUREMTYoKHNweF93b3JkMTZfdClwdHJbMl0sMzIpOworICAgIGdhaW5fc3VtID0gKHNweF93b3JkMTZfdClwdHJbM107CisgICAgICAgICAKKyAgICBzdW0gPSBjb21wdXRlX3BpdGNoX2Vycm9yKEMxNiwgZywgcGl0Y2hfY29udHJvbCk7CisgICAgICAgICAKKyAgICBpZiAoc3VtPmJlc3Rfc3VtICYmIGdhaW5fc3VtPD1tYXhfZ2FpbikgeworICAgICAgYmVzdF9zdW09c3VtOworICAgICAgYmVzdF9jZGJrPWk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGJlc3RfY2RiazsKK30KKyNlbmRpZgorCisvKiogRmluZHMgdGhlIGJlc3QgcXVhbnRpemVkIDMtdGFwIHBpdGNoIHByZWRpY3RvciBieSBhbmFseXNpcyBieSBzeW50aGVzaXMgKi8KK3N0YXRpYyBzcHhfd29yZDMyX3QgcGl0Y2hfZ2Fpbl9zZWFyY2hfM3RhcCgKK2NvbnN0IHNweF93b3JkMTZfdCB0YXJnZXRbXSwgICAgICAgLyogVGFyZ2V0IHZlY3RvciAqLworY29uc3Qgc3B4X2NvZWZfdCBha1tdLCAgICAgICAgICAvKiBMUENzIGZvciB0aGlzIHN1YmZyYW1lICovCitjb25zdCBzcHhfY29lZl90IGF3azFbXSwgICAgICAgIC8qIFdlaWdodGVkIExQQ3MgIzEgZm9yIHRoaXMgc3ViZnJhbWUgKi8KK2NvbnN0IHNweF9jb2VmX3QgYXdrMltdLCAgICAgICAgLyogV2VpZ2h0ZWQgTFBDcyAjMiBmb3IgdGhpcyBzdWJmcmFtZSAqLworc3B4X3NpZ190IGV4Y1tdLCAgICAgICAgICAgICAgICAvKiBFeGNpdGF0aW9uICovCitjb25zdCBzaWduZWQgY2hhciAqZ2Fpbl9jZGJrLAoraW50IGdhaW5fY2Ria19zaXplLAoraW50ICAgcGl0Y2gsICAgICAgICAgICAgICAgICAgICAvKiBQaXRjaCB2YWx1ZSAqLworaW50ICAgcCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgTFBDIGNvZWZmcyAqLworaW50ICAgbnNmLCAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2Ygc2FtcGxlcyBpbiBzdWJmcmFtZSAqLworU3BlZXhCaXRzICpiaXRzLAorY2hhciAqc3RhY2ssCitjb25zdCBzcHhfd29yZDE2X3QgKmV4YzIsCitjb25zdCBzcHhfd29yZDE2X3QgKnIsCitzcHhfd29yZDE2X3QgKm5ld190YXJnZXQsCitpbnQgICpjZGJrX2luZGV4LAoraW50IHBsY190dW5pbmcsCitzcHhfd29yZDMyX3QgY3VtdWxfZ2FpbiwKK2ludCBzY2FsZWRvd24KKykKK3sKKyAgIGludCBpLGo7CisgICBWQVJERUNMKHNweF93b3JkMTZfdCAqdG1wMSk7CisgICBWQVJERUNMKHNweF93b3JkMTZfdCAqZSk7CisgICBzcHhfd29yZDE2X3QgKnhbM107CisgICBzcHhfd29yZDMyX3QgY29yclszXTsKKyAgIHNweF93b3JkMzJfdCBBWzNdWzNdOworICAgc3B4X3dvcmQxNl90IGdhaW5bM107CisgICBzcHhfd29yZDMyX3QgZXJyOworICAgc3B4X3dvcmQxNl90IG1heF9nYWluPTEyODsKKyAgIGludCAgICAgICAgICBiZXN0X2NkYms9MDsKKworICAgQUxMT0ModG1wMSwgMypuc2YsIHNweF93b3JkMTZfdCk7CisgICBBTExPQyhlLCBuc2YsIHNweF93b3JkMTZfdCk7CisKKyAgIGlmIChjdW11bF9nYWluID4gMjYyMTQ0KQorICAgICAgbWF4X2dhaW4gPSAzMTsKKyAgIAorICAgeFswXT10bXAxOworICAgeFsxXT10bXAxK25zZjsKKyAgIHhbMl09dG1wMSsyKm5zZjsKKyAgIAorICAgZm9yIChqPTA7ajxuc2Y7aisrKQorICAgICAgbmV3X3RhcmdldFtqXSA9IHRhcmdldFtqXTsKKworICAgeworICAgICAgVkFSREVDTChzcHhfbWVtX3QgKm1tKTsKKyAgICAgIGludCBwcD1waXRjaC0xOworICAgICAgQUxMT0MobW0sIHAsIHNweF9tZW1fdCk7CisgICAgICBmb3IgKGo9MDtqPG5zZjtqKyspCisgICAgICB7CisgICAgICAgICBpZiAoai1wcDwwKQorICAgICAgICAgICAgZVtqXT1leGMyW2otcHBdOworICAgICAgICAgZWxzZSBpZiAoai1wcC1waXRjaDwwKQorICAgICAgICAgICAgZVtqXT1leGMyW2otcHAtcGl0Y2hdOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgZVtqXT0wOworICAgICAgfQorI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICAvKiBTY2FsZSB0YXJnZXQgYW5kIGV4Y2l0YXRpb24gZG93biBpZiBuZWVkZWQgKGF2b2lkaW5nIG92ZXJmbG93KSAqLworICAgICAgaWYgKHNjYWxlZG93bikKKyAgICAgIHsKKyAgICAgICAgIGZvciAoaj0wO2o8bnNmO2orKykKKyAgICAgICAgICAgIGVbal0gPSBTSFIxNihlW2pdLDEpOworICAgICAgICAgZm9yIChqPTA7ajxuc2Y7aisrKQorICAgICAgICAgICAgbmV3X3RhcmdldFtqXSA9IFNIUjE2KG5ld190YXJnZXRbal0sMSk7CisgICAgICB9CisjZW5kaWYKKyAgICAgIGZvciAoaj0wO2o8cDtqKyspCisgICAgICAgICBtbVtqXSA9IDA7CisgICAgICBpaXJfbWVtMTYoZSwgYWssIGUsIG5zZiwgcCwgbW0sIHN0YWNrKTsKKyAgICAgIGZvciAoaj0wO2o8cDtqKyspCisgICAgICAgICBtbVtqXSA9IDA7CisgICAgICBmaWx0ZXJfbWVtMTYoZSwgYXdrMSwgYXdrMiwgZSwgbnNmLCBwLCBtbSwgc3RhY2spOworICAgICAgZm9yIChqPTA7ajxuc2Y7aisrKQorICAgICAgICAgeFsyXVtqXSA9IGVbal07CisgICB9CisgICBmb3IgKGk9MTtpPj0wO2ktLSkKKyAgIHsKKyAgICAgIHNweF93b3JkMTZfdCBlMD1leGMyWy1waXRjaC0xK2ldOworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICAvKiBTY2FsZSBleGNpdGF0aW9uIGRvd24gaWYgbmVlZGVkIChhdm9pZGluZyBvdmVyZmxvdykgKi8KKyAgICAgIGlmIChzY2FsZWRvd24pCisgICAgICAgICBlMCA9IFNIUjE2KGUwLDEpOworI2VuZGlmCisgICAgICB4W2ldWzBdPU1VTFQxNl8xNl9RMTQoclswXSwgZTApOworICAgICAgZm9yIChqPTA7ajxuc2YtMTtqKyspCisgICAgICAgICB4W2ldW2orMV09QUREMzIoeFtpKzFdW2pdLE1VTFQxNl8xNl9QMTQocltqKzFdLCBlMCkpOworICAgfQorCisgICBmb3IgKGk9MDtpPDM7aSsrKQorICAgICAgY29ycltpXT1pbm5lcl9wcm9kKHhbaV0sbmV3X3RhcmdldCxuc2YpOworICAgZm9yIChpPTA7aTwzO2krKykKKyAgICAgIGZvciAoaj0wO2o8PWk7aisrKQorICAgICAgICAgQVtpXVtqXT1BW2pdW2ldPWlubmVyX3Byb2QoeFtpXSx4W2pdLG5zZik7CisKKyAgIHsKKyAgICAgIHNweF93b3JkMzJfdCBDWzldOworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICBzcHhfd29yZDE2X3QgQzE2WzldOworI2Vsc2UKKyAgICAgIHNweF93b3JkMTZfdCAqQzE2PUM7CisjZW5kaWYgICAgICAKKyAgICAgIENbMF09Y29yclsyXTsKKyAgICAgIENbMV09Y29yclsxXTsKKyAgICAgIENbMl09Y29yclswXTsKKyAgICAgIENbM109QVsxXVsyXTsKKyAgICAgIENbNF09QVswXVsxXTsKKyAgICAgIENbNV09QVswXVsyXTsgICAgICAKKyAgICAgIENbNl09QVsyXVsyXTsKKyAgICAgIENbN109QVsxXVsxXTsKKyAgICAgIENbOF09QVswXVswXTsKKyAgICAgIAorICAgICAgLypwbGNfdHVuaW5nICo9IDI7Ki8KKyAgICAgIGlmIChwbGNfdHVuaW5nPDIpCisgICAgICAgICBwbGNfdHVuaW5nPTI7CisgICAgICBpZiAocGxjX3R1bmluZz4zMCkKKyAgICAgICAgIHBsY190dW5pbmc9MzA7CisjaWZkZWYgRklYRURfUE9JTlQKKyAgICAgIENbMF0gPSBTSEwzMihDWzBdLDEpOworICAgICAgQ1sxXSA9IFNITDMyKENbMV0sMSk7CisgICAgICBDWzJdID0gU0hMMzIoQ1syXSwxKTsKKyAgICAgIENbM10gPSBTSEwzMihDWzNdLDEpOworICAgICAgQ1s0XSA9IFNITDMyKENbNF0sMSk7CisgICAgICBDWzVdID0gU0hMMzIoQ1s1XSwxKTsKKyAgICAgIENbNl0gPSBNQUMxNl8zMl9RMTUoQ1s2XSxNVUxUMTZfMTZfMTYocGxjX3R1bmluZyw2NTUpLENbNl0pOworICAgICAgQ1s3XSA9IE1BQzE2XzMyX1ExNShDWzddLE1VTFQxNl8xNl8xNihwbGNfdHVuaW5nLDY1NSksQ1s3XSk7CisgICAgICBDWzhdID0gTUFDMTZfMzJfUTE1KENbOF0sTVVMVDE2XzE2XzE2KHBsY190dW5pbmcsNjU1KSxDWzhdKTsKKyAgICAgIG5vcm1hbGl6ZTE2KEMsIEMxNiwgMzI3NjcsIDkpOworI2Vsc2UKKyAgICAgIENbNl0qPS41KigxKy4wMipwbGNfdHVuaW5nKTsKKyAgICAgIENbN10qPS41KigxKy4wMipwbGNfdHVuaW5nKTsKKyAgICAgIENbOF0qPS41KigxKy4wMipwbGNfdHVuaW5nKTsKKyNlbmRpZgorCisgICAgICBiZXN0X2NkYmsgPSBwaXRjaF9nYWluX3NlYXJjaF8zdGFwX3ZxKGdhaW5fY2RiaywgZ2Fpbl9jZGJrX3NpemUsIEMxNiwgbWF4X2dhaW4pOworCisjaWZkZWYgRklYRURfUE9JTlQKKyAgICAgIGdhaW5bMF0gPSBBREQxNigzMiwoc3B4X3dvcmQxNl90KWdhaW5fY2Ria1tiZXN0X2NkYmsqNF0pOworICAgICAgZ2FpblsxXSA9IEFERDE2KDMyLChzcHhfd29yZDE2X3QpZ2Fpbl9jZGJrW2Jlc3RfY2Riayo0KzFdKTsKKyAgICAgIGdhaW5bMl0gPSBBREQxNigzMiwoc3B4X3dvcmQxNl90KWdhaW5fY2Ria1tiZXN0X2NkYmsqNCsyXSk7CisgICAgICAvKnByaW50ZiAoIiVkICVkICVkICVkXG4iLGdhaW5bMF0sZ2FpblsxXSxnYWluWzJdLCBiZXN0X2NkYmspOyovCisjZWxzZQorICAgICAgZ2FpblswXSA9IDAuMDE1NjI1KmdhaW5fY2Ria1tiZXN0X2NkYmsqNF0gICsgLjU7CisgICAgICBnYWluWzFdID0gMC4wMTU2MjUqZ2Fpbl9jZGJrW2Jlc3RfY2Riayo0KzFdKyAuNTsKKyAgICAgIGdhaW5bMl0gPSAwLjAxNTYyNSpnYWluX2NkYmtbYmVzdF9jZGJrKjQrMl0rIC41OworI2VuZGlmCisgICAgICAqY2Ria19pbmRleD1iZXN0X2NkYms7CisgICB9CisKKyAgIGZvciAoaT0wO2k8bnNmO2krKykKKyAgICAgIGV4Y1tpXT0wOworICAgZm9yIChpPTA7aTwzO2krKykKKyAgIHsKKyAgICAgIGludCBqOworICAgICAgaW50IHRtcDEsIHRtcDM7CisgICAgICBpbnQgcHA9cGl0Y2grMS1pOworICAgICAgdG1wMT1uc2Y7CisgICAgICBpZiAodG1wMT5wcCkKKyAgICAgICAgIHRtcDE9cHA7CisgICAgICBmb3IgKGo9MDtqPHRtcDE7aisrKQorICAgICAgICAgZXhjW2pdPU1BQzE2XzE2KGV4Y1tqXSxTSEwxNihnYWluWzItaV0sNyksZXhjMltqLXBwXSk7CisgICAgICB0bXAzPW5zZjsKKyAgICAgIGlmICh0bXAzPnBwK3BpdGNoKQorICAgICAgICAgdG1wMz1wcCtwaXRjaDsKKyAgICAgIGZvciAoaj10bXAxO2o8dG1wMztqKyspCisgICAgICAgICBleGNbal09TUFDMTZfMTYoZXhjW2pdLFNITDE2KGdhaW5bMi1pXSw3KSxleGMyW2otcHAtcGl0Y2hdKTsKKyAgIH0KKyAgIGZvciAoaT0wO2k8bnNmO2krKykKKyAgIHsKKyAgICAgIHNweF93b3JkMzJfdCB0bXAgPSBBREQzMihBREQzMihNVUxUMTZfMTYoZ2FpblswXSx4WzJdW2ldKSxNVUxUMTZfMTYoZ2FpblsxXSx4WzFdW2ldKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVVMVDE2XzE2KGdhaW5bMl0seFswXVtpXSkpOworICAgICAgbmV3X3RhcmdldFtpXSA9IFNVQjE2KG5ld190YXJnZXRbaV0sIEVYVFJBQ1QxNihQU0hSMzIodG1wLDYpKSk7CisgICB9CisgICBlcnIgPSBpbm5lcl9wcm9kKG5ld190YXJnZXQsIG5ld190YXJnZXQsIG5zZik7CisKKyAgIHJldHVybiBlcnI7Cit9CisKKy8qKiBGaW5kcyB0aGUgYmVzdCBxdWFudGl6ZWQgMy10YXAgcGl0Y2ggcHJlZGljdG9yIGJ5IGFuYWx5c2lzIGJ5IHN5bnRoZXNpcyAqLworaW50IHBpdGNoX3NlYXJjaF8zdGFwKAorc3B4X3dvcmQxNl90IHRhcmdldFtdLCAgICAgICAgICAgICAgICAgLyogVGFyZ2V0IHZlY3RvciAqLworc3B4X3dvcmQxNl90ICpzdywKK3NweF9jb2VmX3QgYWtbXSwgICAgICAgICAgICAgICAgICAgICAvKiBMUENzIGZvciB0aGlzIHN1YmZyYW1lICovCitzcHhfY29lZl90IGF3azFbXSwgICAgICAgICAgICAgICAgICAgLyogV2VpZ2h0ZWQgTFBDcyAjMSBmb3IgdGhpcyBzdWJmcmFtZSAqLworc3B4X2NvZWZfdCBhd2syW10sICAgICAgICAgICAgICAgICAgIC8qIFdlaWdodGVkIExQQ3MgIzIgZm9yIHRoaXMgc3ViZnJhbWUgKi8KK3NweF9zaWdfdCBleGNbXSwgICAgICAgICAgICAgICAgICAgIC8qIEV4Y2l0YXRpb24gKi8KK2NvbnN0IHZvaWQgKnBhciwKK2ludCAgIHN0YXJ0LCAgICAgICAgICAgICAgICAgICAgLyogU21hbGxlc3QgcGl0Y2ggdmFsdWUgYWxsb3dlZCAqLworaW50ICAgZW5kLCAgICAgICAgICAgICAgICAgICAgICAvKiBMYXJnZXN0IHBpdGNoIHZhbHVlIGFsbG93ZWQgKi8KK3NweF93b3JkMTZfdCBwaXRjaF9jb2VmLCAgICAgICAgICAgICAgIC8qIFZvaWNpbmcgKHBpdGNoKSBjb2VmZmljaWVudCAqLworaW50ICAgcCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgTFBDIGNvZWZmcyAqLworaW50ICAgbnNmLCAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2Ygc2FtcGxlcyBpbiBzdWJmcmFtZSAqLworU3BlZXhCaXRzICpiaXRzLAorY2hhciAqc3RhY2ssCitzcHhfd29yZDE2X3QgKmV4YzIsCitzcHhfd29yZDE2X3QgKnIsCitpbnQgY29tcGxleGl0eSwKK2ludCBjZGJrX29mZnNldCwKK2ludCBwbGNfdHVuaW5nLAorc3B4X3dvcmQzMl90ICpjdW11bF9nYWluCispCit7CisgICBpbnQgaSxqOworICAgaW50IGNkYmtfaW5kZXgsIHBpdGNoPTAsIGJlc3RfZ2Fpbl9pbmRleD0wOworICAgVkFSREVDTChzcHhfc2lnX3QgKmJlc3RfZXhjKTsKKyAgIFZBUkRFQ0woc3B4X3dvcmQxNl90ICpuZXdfdGFyZ2V0KTsKKyAgIFZBUkRFQ0woc3B4X3dvcmQxNl90ICpiZXN0X3RhcmdldCk7CisgICBpbnQgYmVzdF9waXRjaD0wOworICAgc3B4X3dvcmQzMl90IGVyciwgYmVzdF9lcnI9LTE7CisgICBpbnQgTjsKKyAgIGNvbnN0IGx0cF9wYXJhbXMgKnBhcmFtczsKKyAgIGNvbnN0IHNpZ25lZCBjaGFyICpnYWluX2NkYms7CisgICBpbnQgICBnYWluX2NkYmtfc2l6ZTsKKyAgIGludCBzY2FsZWRvd249MDsKKyAgICAgICAgIAorICAgVkFSREVDTChpbnQgKm5iZXN0KTsKKyAgIAorICAgcGFyYW1zID0gKGNvbnN0IGx0cF9wYXJhbXMqKSBwYXI7CisgICBnYWluX2NkYmtfc2l6ZSA9IDE8PHBhcmFtcy0+Z2Fpbl9iaXRzOworICAgZ2Fpbl9jZGJrID0gcGFyYW1zLT5nYWluX2NkYmsgKyA0KmdhaW5fY2Ria19zaXplKmNkYmtfb2Zmc2V0OworICAgCisgICBOPWNvbXBsZXhpdHk7CisgICBpZiAoTj4xMCkKKyAgICAgIE49MTA7CisgICBpZiAoTjwxKQorICAgICAgTj0xOworCisgICBBTExPQyhuYmVzdCwgTiwgaW50KTsKKyAgIHBhcmFtcyA9IChjb25zdCBsdHBfcGFyYW1zKikgcGFyOworCisgICBpZiAoZW5kPHN0YXJ0KQorICAgeworICAgICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIDAsIHBhcmFtcy0+cGl0Y2hfYml0cyk7CisgICAgICBzcGVleF9iaXRzX3BhY2soYml0cywgMCwgcGFyYW1zLT5nYWluX2JpdHMpOworICAgICAgZm9yIChpPTA7aTxuc2Y7aSsrKQorICAgICAgICAgZXhjW2ldPTA7CisgICAgICByZXR1cm4gc3RhcnQ7CisgICB9CisgICAKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgLyogQ2hlY2sgaWYgd2UgbmVlZCB0byBzY2FsZSBldmVyeXRoaW5nIGRvd24gaW4gdGhlIHBpdGNoIHNlYXJjaCB0byBhdm9pZCBvdmVyZmxvd3MgKi8KKyAgIGZvciAoaT0wO2k8bnNmO2krKykKKyAgIHsKKyAgICAgIGlmIChBQlMxNih0YXJnZXRbaV0pPjE2MzgzKQorICAgICAgeworICAgICAgICAgc2NhbGVkb3duPTE7CisgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgIH0KKyAgIGZvciAoaT0tZW5kO2k8bnNmO2krKykKKyAgIHsKKyAgICAgIGlmIChBQlMxNihleGMyW2ldKT4xNjM4MykKKyAgICAgIHsKKyAgICAgICAgIHNjYWxlZG93bj0xOworICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICB9CisjZW5kaWYKKyAgIGlmIChOPmVuZC1zdGFydCsxKQorICAgICAgTj1lbmQtc3RhcnQrMTsKKyAgIGlmIChlbmQgIT0gc3RhcnQpCisgICAgICBvcGVuX2xvb3BfbmJlc3RfcGl0Y2goc3csIHN0YXJ0LCBlbmQsIG5zZiwgbmJlc3QsIE5VTEwsIE4sIHN0YWNrKTsKKyAgIGVsc2UKKyAgICAgIG5iZXN0WzBdID0gc3RhcnQ7CisgICAKKyAgIEFMTE9DKGJlc3RfZXhjLCBuc2YsIHNweF9zaWdfdCk7CisgICBBTExPQyhuZXdfdGFyZ2V0LCBuc2YsIHNweF93b3JkMTZfdCk7CisgICBBTExPQyhiZXN0X3RhcmdldCwgbnNmLCBzcHhfd29yZDE2X3QpOworICAgCisgICBmb3IgKGk9MDtpPE47aSsrKQorICAgeworICAgICAgcGl0Y2g9bmJlc3RbaV07CisgICAgICBmb3IgKGo9MDtqPG5zZjtqKyspCisgICAgICAgICBleGNbal09MDsKKyAgICAgIGVycj1waXRjaF9nYWluX3NlYXJjaF8zdGFwKHRhcmdldCwgYWssIGF3azEsIGF3azIsIGV4YywgZ2Fpbl9jZGJrLCBnYWluX2NkYmtfc2l6ZSwgcGl0Y2gsIHAsIG5zZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMsIHN0YWNrLCBleGMyLCByLCBuZXdfdGFyZ2V0LCAmY2Ria19pbmRleCwgcGxjX3R1bmluZywgKmN1bXVsX2dhaW4sIHNjYWxlZG93bik7CisgICAgICBpZiAoZXJyPGJlc3RfZXJyIHx8IGJlc3RfZXJyPDApCisgICAgICB7CisgICAgICAgICBmb3IgKGo9MDtqPG5zZjtqKyspCisgICAgICAgICAgICBiZXN0X2V4Y1tqXT1leGNbal07CisgICAgICAgICBmb3IgKGo9MDtqPG5zZjtqKyspCisgICAgICAgICAgICBiZXN0X3RhcmdldFtqXT1uZXdfdGFyZ2V0W2pdOworICAgICAgICAgYmVzdF9lcnI9ZXJyOworICAgICAgICAgYmVzdF9waXRjaD1waXRjaDsKKyAgICAgICAgIGJlc3RfZ2Fpbl9pbmRleD1jZGJrX2luZGV4OworICAgICAgfQorICAgfQorICAgLypwcmludGYgKCJwaXRjaDogJWQgJWRcbiIsIGJlc3RfcGl0Y2gsIGJlc3RfZ2Fpbl9pbmRleCk7Ki8KKyAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBiZXN0X3BpdGNoLXN0YXJ0LCBwYXJhbXMtPnBpdGNoX2JpdHMpOworICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIGJlc3RfZ2Fpbl9pbmRleCwgcGFyYW1zLT5nYWluX2JpdHMpOworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAqY3VtdWxfZ2FpbiA9IE1VTFQxNl8zMl9RMTMoU0hMMTYocGFyYW1zLT5nYWluX2NkYmtbNCpiZXN0X2dhaW5faW5kZXgrM10sOCksIE1BWDMyKDEwMjQsKmN1bXVsX2dhaW4pKTsKKyNlbHNlCisgICAqY3VtdWxfZ2FpbiA9IDAuMDMxMjUqTUFYMzIoMTAyNCwqY3VtdWxfZ2FpbikqcGFyYW1zLT5nYWluX2NkYmtbNCpiZXN0X2dhaW5faW5kZXgrM107CisjZW5kaWYKKyAgIC8qcHJpbnRmICgiJWZcbiIsIGN1bXVsX2dhaW4pOyovCisgICAvKnByaW50ZiAoImVuY29kZSBwaXRjaDogJWQgJWRcbiIsIGJlc3RfcGl0Y2gsIGJlc3RfZ2Fpbl9pbmRleCk7Ki8KKyAgIGZvciAoaT0wO2k8bnNmO2krKykKKyAgICAgIGV4Y1tpXT1iZXN0X2V4Y1tpXTsKKyAgIGZvciAoaT0wO2k8bnNmO2krKykKKyAgICAgIHRhcmdldFtpXT1iZXN0X3RhcmdldFtpXTsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgLyogU2NhbGUgdGFyZ2V0IGJhY2sgdXAgaWYgbmVlZGVkICovCisgICBpZiAoc2NhbGVkb3duKQorICAgeworICAgICAgZm9yIChpPTA7aTxuc2Y7aSsrKQorICAgICAgICAgdGFyZ2V0W2ldPVNITDE2KHRhcmdldFtpXSwxKTsKKyAgIH0KKyNlbmRpZgorICAgcmV0dXJuIHBpdGNoOworfQorCit2b2lkIHBpdGNoX3VucXVhbnRfM3RhcCgKK3NweF93b3JkMTZfdCBleGNbXSwgICAgICAgICAgICAgLyogSW5wdXQgZXhjaXRhdGlvbiAqLworc3B4X3dvcmQzMl90IGV4Y19vdXRbXSwgICAgICAgICAvKiBPdXRwdXQgZXhjaXRhdGlvbiAqLworaW50ICAgc3RhcnQsICAgICAgICAgICAgICAgICAgICAvKiBTbWFsbGVzdCBwaXRjaCB2YWx1ZSBhbGxvd2VkICovCitpbnQgICBlbmQsICAgICAgICAgICAgICAgICAgICAgIC8qIExhcmdlc3QgcGl0Y2ggdmFsdWUgYWxsb3dlZCAqLworc3B4X3dvcmQxNl90IHBpdGNoX2NvZWYsICAgICAgICAvKiBWb2ljaW5nIChwaXRjaCkgY29lZmZpY2llbnQgKi8KK2NvbnN0IHZvaWQgKnBhciwKK2ludCAgIG5zZiwgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHNhbXBsZXMgaW4gc3ViZnJhbWUgKi8KK2ludCAqcGl0Y2hfdmFsLAorc3B4X3dvcmQxNl90ICpnYWluX3ZhbCwKK1NwZWV4Qml0cyAqYml0cywKK2NoYXIgKnN0YWNrLAoraW50IGNvdW50X2xvc3QsCitpbnQgc3ViZnJhbWVfb2Zmc2V0LAorc3B4X3dvcmQxNl90IGxhc3RfcGl0Y2hfZ2FpbiwKK2ludCBjZGJrX29mZnNldAorKQoreworICAgaW50IGk7CisgICBpbnQgcGl0Y2g7CisgICBpbnQgZ2Fpbl9pbmRleDsKKyAgIHNweF93b3JkMTZfdCBnYWluWzNdOworICAgY29uc3Qgc2lnbmVkIGNoYXIgKmdhaW5fY2RiazsKKyAgIGludCBnYWluX2NkYmtfc2l6ZTsKKyAgIGNvbnN0IGx0cF9wYXJhbXMgKnBhcmFtczsKKworICAgcGFyYW1zID0gKGNvbnN0IGx0cF9wYXJhbXMqKSBwYXI7CisgICBnYWluX2NkYmtfc2l6ZSA9IDE8PHBhcmFtcy0+Z2Fpbl9iaXRzOworICAgZ2Fpbl9jZGJrID0gcGFyYW1zLT5nYWluX2NkYmsgKyA0KmdhaW5fY2Ria19zaXplKmNkYmtfb2Zmc2V0OworCisgICBwaXRjaCA9IHNwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKGJpdHMsIHBhcmFtcy0+cGl0Y2hfYml0cyk7CisgICBwaXRjaCArPSBzdGFydDsKKyAgIGdhaW5faW5kZXggPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCBwYXJhbXMtPmdhaW5fYml0cyk7CisgICAvKnByaW50ZiAoImRlY29kZSBwaXRjaDogJWQgJWRcbiIsIHBpdGNoLCBnYWluX2luZGV4KTsqLworI2lmZGVmIEZJWEVEX1BPSU5UCisgICBnYWluWzBdID0gQUREMTYoMzIsKHNweF93b3JkMTZfdClnYWluX2NkYmtbZ2Fpbl9pbmRleCo0XSk7CisgICBnYWluWzFdID0gQUREMTYoMzIsKHNweF93b3JkMTZfdClnYWluX2NkYmtbZ2Fpbl9pbmRleCo0KzFdKTsKKyAgIGdhaW5bMl0gPSBBREQxNigzMiwoc3B4X3dvcmQxNl90KWdhaW5fY2Ria1tnYWluX2luZGV4KjQrMl0pOworI2Vsc2UKKyAgIGdhaW5bMF0gPSAwLjAxNTYyNSpnYWluX2NkYmtbZ2Fpbl9pbmRleCo0XSsuNTsKKyAgIGdhaW5bMV0gPSAwLjAxNTYyNSpnYWluX2NkYmtbZ2Fpbl9pbmRleCo0KzFdKy41OworICAgZ2FpblsyXSA9IDAuMDE1NjI1KmdhaW5fY2Ria1tnYWluX2luZGV4KjQrMl0rLjU7CisjZW5kaWYKKworICAgaWYgKGNvdW50X2xvc3QgJiYgcGl0Y2ggPiBzdWJmcmFtZV9vZmZzZXQpCisgICB7CisgICAgICBzcHhfd29yZDE2X3QgZ2Fpbl9zdW07CisgICAgICBpZiAoMSkgeworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICAgICBzcHhfd29yZDE2X3QgdG1wID0gY291bnRfbG9zdCA8IDQgPyBsYXN0X3BpdGNoX2dhaW4gOiBTSFIxNihsYXN0X3BpdGNoX2dhaW4sMSk7CisgICAgICAgICBpZiAodG1wPjYyKQorICAgICAgICAgICAgdG1wPTYyOworI2Vsc2UKKyAgICAgICAgIHNweF93b3JkMTZfdCB0bXAgPSBjb3VudF9sb3N0IDwgNCA/IGxhc3RfcGl0Y2hfZ2FpbiA6IDAuNSAqIGxhc3RfcGl0Y2hfZ2FpbjsKKyAgICAgICAgIGlmICh0bXA+Ljk1KQorICAgICAgICAgICAgdG1wPS45NTsKKyNlbmRpZgorICAgICAgICAgZ2Fpbl9zdW0gPSBnYWluXzN0YXBfdG9fMXRhcChnYWluKTsKKworICAgICAgICAgaWYgKGdhaW5fc3VtID4gdG1wKQorICAgICAgICAgeworICAgICAgICAgICAgc3B4X3dvcmQxNl90IGZhY3QgPSBESVYzMl8xNihTSEwzMihFWFRFTkQzMih0bXApLDE0KSxnYWluX3N1bSk7CisgICAgICAgICAgICBmb3IgKGk9MDtpPDM7aSsrKQorICAgICAgICAgICAgICAgZ2FpbltpXT1NVUxUMTZfMTZfUTE0KGZhY3QsZ2FpbltpXSk7CisgICAgICAgICB9CisKKyAgICAgIH0KKworICAgfQorCisgICAqcGl0Y2hfdmFsID0gcGl0Y2g7CisgICBnYWluX3ZhbFswXT1nYWluWzBdOworICAgZ2Fpbl92YWxbMV09Z2FpblsxXTsKKyAgIGdhaW5fdmFsWzJdPWdhaW5bMl07CisgICBnYWluWzBdID0gU0hMMTYoZ2FpblswXSw3KTsKKyAgIGdhaW5bMV0gPSBTSEwxNihnYWluWzFdLDcpOworICAgZ2FpblsyXSA9IFNITDE2KGdhaW5bMl0sNyk7CisgICBmb3IgKGk9MDtpPG5zZjtpKyspCisgICAgICBleGNfb3V0W2ldPTA7CisgICBmb3IgKGk9MDtpPDM7aSsrKQorICAgeworICAgICAgaW50IGo7CisgICAgICBpbnQgdG1wMSwgdG1wMzsKKyAgICAgIGludCBwcD1waXRjaCsxLWk7CisgICAgICB0bXAxPW5zZjsKKyAgICAgIGlmICh0bXAxPnBwKQorICAgICAgICAgdG1wMT1wcDsKKyAgICAgIGZvciAoaj0wO2o8dG1wMTtqKyspCisgICAgICAgICBleGNfb3V0W2pdPU1BQzE2XzE2KGV4Y19vdXRbal0sZ2FpblsyLWldLGV4Y1tqLXBwXSk7CisgICAgICB0bXAzPW5zZjsKKyAgICAgIGlmICh0bXAzPnBwK3BpdGNoKQorICAgICAgICAgdG1wMz1wcCtwaXRjaDsKKyAgICAgIGZvciAoaj10bXAxO2o8dG1wMztqKyspCisgICAgICAgICBleGNfb3V0W2pdPU1BQzE2XzE2KGV4Y19vdXRbal0sZ2FpblsyLWldLGV4Y1tqLXBwLXBpdGNoXSk7CisgICB9CisgICAvKmZvciAoaT0wO2k8bnNmO2krKykKKyAgIGV4Y1tpXT1QU0hSMzIoZXhjMzJbaV0sMTMpOyovCit9CisKKworLyoqIEZvcmNlZCBwaXRjaCBkZWxheSBhbmQgZ2FpbiAqLworaW50IGZvcmNlZF9waXRjaF9xdWFudCgKK3NweF93b3JkMTZfdCB0YXJnZXRbXSwgICAgICAgICAgICAgICAgIC8qIFRhcmdldCB2ZWN0b3IgKi8KK3NweF93b3JkMTZfdCAqc3csCitzcHhfY29lZl90IGFrW10sICAgICAgICAgICAgICAgICAgICAgLyogTFBDcyBmb3IgdGhpcyBzdWJmcmFtZSAqLworc3B4X2NvZWZfdCBhd2sxW10sICAgICAgICAgICAgICAgICAgIC8qIFdlaWdodGVkIExQQ3MgIzEgZm9yIHRoaXMgc3ViZnJhbWUgKi8KK3NweF9jb2VmX3QgYXdrMltdLCAgICAgICAgICAgICAgICAgICAvKiBXZWlnaHRlZCBMUENzICMyIGZvciB0aGlzIHN1YmZyYW1lICovCitzcHhfc2lnX3QgZXhjW10sICAgICAgICAgICAgICAgICAgICAvKiBFeGNpdGF0aW9uICovCitjb25zdCB2b2lkICpwYXIsCitpbnQgICBzdGFydCwgICAgICAgICAgICAgICAgICAgIC8qIFNtYWxsZXN0IHBpdGNoIHZhbHVlIGFsbG93ZWQgKi8KK2ludCAgIGVuZCwgICAgICAgICAgICAgICAgICAgICAgLyogTGFyZ2VzdCBwaXRjaCB2YWx1ZSBhbGxvd2VkICovCitzcHhfd29yZDE2X3QgcGl0Y2hfY29lZiwgICAgICAgICAgICAgICAvKiBWb2ljaW5nIChwaXRjaCkgY29lZmZpY2llbnQgKi8KK2ludCAgIHAsICAgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIExQQyBjb2VmZnMgKi8KK2ludCAgIG5zZiwgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHNhbXBsZXMgaW4gc3ViZnJhbWUgKi8KK1NwZWV4Qml0cyAqYml0cywKK2NoYXIgKnN0YWNrLAorc3B4X3dvcmQxNl90ICpleGMyLAorc3B4X3dvcmQxNl90ICpyLAoraW50IGNvbXBsZXhpdHksCitpbnQgY2Ria19vZmZzZXQsCitpbnQgcGxjX3R1bmluZywKK3NweF93b3JkMzJfdCAqY3VtdWxfZ2FpbgorKQoreworICAgaW50IGk7CisgICBWQVJERUNMKHNweF93b3JkMTZfdCAqcmVzKTsKKyAgIEFMTE9DKHJlcywgbnNmLCBzcHhfd29yZDE2X3QpOworI2lmZGVmIEZJWEVEX1BPSU5UCisgICBpZiAocGl0Y2hfY29lZj42MykKKyAgICAgIHBpdGNoX2NvZWY9NjM7CisjZWxzZQorICAgaWYgKHBpdGNoX2NvZWY+Ljk5KQorICAgICAgcGl0Y2hfY29lZj0uOTk7CisjZW5kaWYKKyAgIGZvciAoaT0wO2k8bnNmJiZpPHN0YXJ0O2krKykKKyAgIHsKKyAgICAgIGV4Y1tpXT1NVUxUMTZfMTYoU0hMMTYocGl0Y2hfY29lZiwgNyksZXhjMltpLXN0YXJ0XSk7CisgICB9CisgICBmb3IgKDtpPG5zZjtpKyspCisgICB7CisgICAgICBleGNbaV09TVVMVDE2XzMyX1ExNShTSEwxNihwaXRjaF9jb2VmLCA5KSxleGNbaS1zdGFydF0pOworICAgfQorICAgZm9yIChpPTA7aTxuc2Y7aSsrKQorICAgICAgcmVzW2ldID0gRVhUUkFDVDE2KFBTSFIzMihleGNbaV0sIFNJR19TSElGVC0xKSk7CisgICBzeW5fcGVyY2VwX3plcm8xNihyZXMsIGFrLCBhd2sxLCBhd2syLCByZXMsIG5zZiwgcCwgc3RhY2spOworICAgZm9yIChpPTA7aTxuc2Y7aSsrKQorICAgICAgdGFyZ2V0W2ldPUVYVFJBQ1QxNihTQVRVUkFURShTVUIzMihFWFRFTkQzMih0YXJnZXRbaV0pLEVYVEVORDMyKHJlc1tpXSkpLDMyNzAwKSk7CisgICByZXR1cm4gc3RhcnQ7Cit9CisKKy8qKiBVbnF1YW50aXplIGZvcmNlZCBwaXRjaCBkZWxheSBhbmQgZ2FpbiAqLwordm9pZCBmb3JjZWRfcGl0Y2hfdW5xdWFudCgKK3NweF93b3JkMTZfdCBleGNbXSwgICAgICAgICAgICAgLyogSW5wdXQgZXhjaXRhdGlvbiAqLworc3B4X3dvcmQzMl90IGV4Y19vdXRbXSwgICAgICAgICAvKiBPdXRwdXQgZXhjaXRhdGlvbiAqLworaW50ICAgc3RhcnQsICAgICAgICAgICAgICAgICAgICAvKiBTbWFsbGVzdCBwaXRjaCB2YWx1ZSBhbGxvd2VkICovCitpbnQgICBlbmQsICAgICAgICAgICAgICAgICAgICAgIC8qIExhcmdlc3QgcGl0Y2ggdmFsdWUgYWxsb3dlZCAqLworc3B4X3dvcmQxNl90IHBpdGNoX2NvZWYsICAgICAgICAvKiBWb2ljaW5nIChwaXRjaCkgY29lZmZpY2llbnQgKi8KK2NvbnN0IHZvaWQgKnBhciwKK2ludCAgIG5zZiwgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHNhbXBsZXMgaW4gc3ViZnJhbWUgKi8KK2ludCAqcGl0Y2hfdmFsLAorc3B4X3dvcmQxNl90ICpnYWluX3ZhbCwKK1NwZWV4Qml0cyAqYml0cywKK2NoYXIgKnN0YWNrLAoraW50IGNvdW50X2xvc3QsCitpbnQgc3ViZnJhbWVfb2Zmc2V0LAorc3B4X3dvcmQxNl90IGxhc3RfcGl0Y2hfZ2FpbiwKK2ludCBjZGJrX29mZnNldAorKQoreworICAgaW50IGk7CisjaWZkZWYgRklYRURfUE9JTlQKKyAgIGlmIChwaXRjaF9jb2VmPjYzKQorICAgICAgcGl0Y2hfY29lZj02MzsKKyNlbHNlCisgICBpZiAocGl0Y2hfY29lZj4uOTkpCisgICAgICBwaXRjaF9jb2VmPS45OTsKKyNlbmRpZgorICAgZm9yIChpPTA7aTxuc2Y7aSsrKQorICAgeworICAgICAgZXhjX291dFtpXT1NVUxUMTZfMTYoZXhjW2ktc3RhcnRdLFNITDE2KHBpdGNoX2NvZWYsNykpOworICAgICAgZXhjW2ldID0gRVhUUkFDVDE2KFBTSFIzMihleGNfb3V0W2ldLDEzKSk7CisgICB9CisgICAqcGl0Y2hfdmFsID0gc3RhcnQ7CisgICBnYWluX3ZhbFswXT1nYWluX3ZhbFsyXT0wOworICAgZ2Fpbl92YWxbMV0gPSBwaXRjaF9jb2VmOworfQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbHRwLmggYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9sdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzA1MGM2Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbHRwLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiBKZWFuLU1hcmMgVmFsaW4gKi8KKy8qKgorICAgQGZpbGUgbHRwLmgKKyAgIEBicmllZiBMb25nLVRlcm0gUHJlZGljdGlvbiBmdW5jdGlvbnMKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSA8c3BlZXgvc3BlZXhfYml0cy5oPgorI2luY2x1ZGUgIm1pc2MuaCIKKworLyoqIExUUCBwYXJhbWV0ZXJzLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgY29uc3Qgc2lnbmVkIGNoYXIgKmdhaW5fY2RiazsKKyAgIGludCAgICAgZ2Fpbl9iaXRzOworICAgaW50ICAgICBwaXRjaF9iaXRzOworfSBsdHBfcGFyYW1zOworCisjaWZkZWYgRklYRURfUE9JTlQKKyNkZWZpbmUgZ2Fpbl8zdGFwX3RvXzF0YXAoZykgKEFCUyhnWzFdKSArIChnWzBdPjAgPyBnWzBdIDogLVNIUjE2KGdbMF0sMSkpICsgKGdbMl0+MCA/IGdbMl0gOiAtU0hSMTYoZ1syXSwxKSkpCisjZWxzZQorI2RlZmluZSBnYWluXzN0YXBfdG9fMXRhcChnKSAoQUJTKGdbMV0pICsgKGdbMF0+MCA/IGdbMF0gOiAtLjUqZ1swXSkgKyAoZ1syXT4wID8gZ1syXSA6IC0uNSpnWzJdKSkKKyNlbmRpZgorCitzcHhfd29yZDMyX3QgaW5uZXJfcHJvZChjb25zdCBzcHhfd29yZDE2X3QgKngsIGNvbnN0IHNweF93b3JkMTZfdCAqeSwgaW50IGxlbik7Cit2b2lkIHBpdGNoX3hjb3JyKGNvbnN0IHNweF93b3JkMTZfdCAqX3gsIGNvbnN0IHNweF93b3JkMTZfdCAqX3ksIHNweF93b3JkMzJfdCAqY29yciwgaW50IGxlbiwgaW50IG5iX3BpdGNoLCBjaGFyICpzdGFjayk7CisKK3ZvaWQgb3Blbl9sb29wX25iZXN0X3BpdGNoKHNweF93b3JkMTZfdCAqc3csIGludCBzdGFydCwgaW50IGVuZCwgaW50IGxlbiwgaW50ICpwaXRjaCwgc3B4X3dvcmQxNl90ICpnYWluLCBpbnQgTiwgY2hhciAqc3RhY2spOworCisKKy8qKiBGaW5kcyB0aGUgYmVzdCBxdWFudGl6ZWQgMy10YXAgcGl0Y2ggcHJlZGljdG9yIGJ5IGFuYWx5c2lzIGJ5IHN5bnRoZXNpcyAqLworaW50IHBpdGNoX3NlYXJjaF8zdGFwKAorc3B4X3dvcmQxNl90IHRhcmdldFtdLCAgICAgICAgICAgICAgICAgLyogVGFyZ2V0IHZlY3RvciAqLworc3B4X3dvcmQxNl90ICpzdywKK3NweF9jb2VmX3QgYWtbXSwgICAgICAgICAgICAgICAgICAgICAvKiBMUENzIGZvciB0aGlzIHN1YmZyYW1lICovCitzcHhfY29lZl90IGF3azFbXSwgICAgICAgICAgICAgICAgICAgLyogV2VpZ2h0ZWQgTFBDcyAjMSBmb3IgdGhpcyBzdWJmcmFtZSAqLworc3B4X2NvZWZfdCBhd2syW10sICAgICAgICAgICAgICAgICAgIC8qIFdlaWdodGVkIExQQ3MgIzIgZm9yIHRoaXMgc3ViZnJhbWUgKi8KK3NweF9zaWdfdCBleGNbXSwgICAgICAgICAgICAgICAgICAgIC8qIE92ZXJsYXBwaW5nIGNvZGVib29rICovCitjb25zdCB2b2lkICpwYXIsCitpbnQgICBzdGFydCwgICAgICAgICAgICAgICAgICAgIC8qIFNtYWxsZXN0IHBpdGNoIHZhbHVlIGFsbG93ZWQgKi8KK2ludCAgIGVuZCwgICAgICAgICAgICAgICAgICAgICAgLyogTGFyZ2VzdCBwaXRjaCB2YWx1ZSBhbGxvd2VkICovCitzcHhfd29yZDE2X3QgcGl0Y2hfY29lZiwgICAgICAgICAgICAgICAvKiBWb2ljaW5nIChwaXRjaCkgY29lZmZpY2llbnQgKi8KK2ludCAgIHAsICAgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIExQQyBjb2VmZnMgKi8KK2ludCAgIG5zZiwgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHNhbXBsZXMgaW4gc3ViZnJhbWUgKi8KK1NwZWV4Qml0cyAqYml0cywKK2NoYXIgKnN0YWNrLAorc3B4X3dvcmQxNl90ICpleGMyLAorc3B4X3dvcmQxNl90ICpyLAoraW50ICAgY29tcGxleGl0eSwKK2ludCAgIGNkYmtfb2Zmc2V0LAoraW50IHBsY190dW5pbmcsCitzcHhfd29yZDMyX3QgKmN1bXVsX2dhaW4KKyk7CisKKy8qVW5xdWFudGl6ZSBhZGFwdGl2ZSBjb2RlYm9vayBhbmQgdXBkYXRlIHBpdGNoIGNvbnRyaWJ1dGlvbiovCit2b2lkIHBpdGNoX3VucXVhbnRfM3RhcCgKK3NweF93b3JkMTZfdCBleGNbXSwgICAgICAgICAgICAgLyogSW5wdXQgZXhjaXRhdGlvbiAqLworc3B4X3dvcmQzMl90IGV4Y19vdXRbXSwgICAgICAgICAvKiBPdXRwdXQgZXhjaXRhdGlvbiAqLworaW50ICAgc3RhcnQsICAgICAgICAgICAgICAgICAgICAvKiBTbWFsbGVzdCBwaXRjaCB2YWx1ZSBhbGxvd2VkICovCitpbnQgICBlbmQsICAgICAgICAgICAgICAgICAgICAgIC8qIExhcmdlc3QgcGl0Y2ggdmFsdWUgYWxsb3dlZCAqLworc3B4X3dvcmQxNl90IHBpdGNoX2NvZWYsICAgICAgICAvKiBWb2ljaW5nIChwaXRjaCkgY29lZmZpY2llbnQgKi8KK2NvbnN0IHZvaWQgKnBhciwKK2ludCAgIG5zZiwgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHNhbXBsZXMgaW4gc3ViZnJhbWUgKi8KK2ludCAqcGl0Y2hfdmFsLAorc3B4X3dvcmQxNl90ICpnYWluX3ZhbCwKK1NwZWV4Qml0cyAqYml0cywKK2NoYXIgKnN0YWNrLAoraW50IGxvc3QsCitpbnQgc3ViZnJhbWVfb2Zmc2V0LAorc3B4X3dvcmQxNl90IGxhc3RfcGl0Y2hfZ2FpbiwKK2ludCBjZGJrX29mZnNldAorKTsKKworLyoqIEZvcmNlZCBwaXRjaCBkZWxheSBhbmQgZ2FpbiAqLworaW50IGZvcmNlZF9waXRjaF9xdWFudCgKK3NweF93b3JkMTZfdCB0YXJnZXRbXSwgICAgICAgICAgICAgICAgIC8qIFRhcmdldCB2ZWN0b3IgKi8KK3NweF93b3JkMTZfdCAqc3csCitzcHhfY29lZl90IGFrW10sICAgICAgICAgICAgICAgICAgICAgLyogTFBDcyBmb3IgdGhpcyBzdWJmcmFtZSAqLworc3B4X2NvZWZfdCBhd2sxW10sICAgICAgICAgICAgICAgICAgIC8qIFdlaWdodGVkIExQQ3MgIzEgZm9yIHRoaXMgc3ViZnJhbWUgKi8KK3NweF9jb2VmX3QgYXdrMltdLCAgICAgICAgICAgICAgICAgICAvKiBXZWlnaHRlZCBMUENzICMyIGZvciB0aGlzIHN1YmZyYW1lICovCitzcHhfc2lnX3QgZXhjW10sICAgICAgICAgICAgICAgICAgICAvKiBFeGNpdGF0aW9uICovCitjb25zdCB2b2lkICpwYXIsCitpbnQgICBzdGFydCwgICAgICAgICAgICAgICAgICAgIC8qIFNtYWxsZXN0IHBpdGNoIHZhbHVlIGFsbG93ZWQgKi8KK2ludCAgIGVuZCwgICAgICAgICAgICAgICAgICAgICAgLyogTGFyZ2VzdCBwaXRjaCB2YWx1ZSBhbGxvd2VkICovCitzcHhfd29yZDE2X3QgcGl0Y2hfY29lZiwgICAgICAgICAgICAgICAvKiBWb2ljaW5nIChwaXRjaCkgY29lZmZpY2llbnQgKi8KK2ludCAgIHAsICAgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIExQQyBjb2VmZnMgKi8KK2ludCAgIG5zZiwgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHNhbXBsZXMgaW4gc3ViZnJhbWUgKi8KK1NwZWV4Qml0cyAqYml0cywKK2NoYXIgKnN0YWNrLAorc3B4X3dvcmQxNl90ICpleGMyLAorc3B4X3dvcmQxNl90ICpyLAoraW50IGNvbXBsZXhpdHksCitpbnQgY2Ria19vZmZzZXQsCitpbnQgcGxjX3R1bmluZywKK3NweF93b3JkMzJfdCAqY3VtdWxfZ2FpbgorKTsKKworLyoqIFVucXVhbnRpemUgZm9yY2VkIHBpdGNoIGRlbGF5IGFuZCBnYWluICovCit2b2lkIGZvcmNlZF9waXRjaF91bnF1YW50KAorc3B4X3dvcmQxNl90IGV4Y1tdLCAgICAgICAgICAgICAvKiBJbnB1dCBleGNpdGF0aW9uICovCitzcHhfd29yZDMyX3QgZXhjX291dFtdLCAgICAgICAgIC8qIE91dHB1dCBleGNpdGF0aW9uICovCitpbnQgICBzdGFydCwgICAgICAgICAgICAgICAgICAgIC8qIFNtYWxsZXN0IHBpdGNoIHZhbHVlIGFsbG93ZWQgKi8KK2ludCAgIGVuZCwgICAgICAgICAgICAgICAgICAgICAgLyogTGFyZ2VzdCBwaXRjaCB2YWx1ZSBhbGxvd2VkICovCitzcHhfd29yZDE2X3QgcGl0Y2hfY29lZiwgICAgICAgIC8qIFZvaWNpbmcgKHBpdGNoKSBjb2VmZmljaWVudCAqLworY29uc3Qgdm9pZCAqcGFyLAoraW50ICAgbnNmLCAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2Ygc2FtcGxlcyBpbiBzdWJmcmFtZSAqLworaW50ICpwaXRjaF92YWwsCitzcHhfd29yZDE2X3QgKmdhaW5fdmFsLAorU3BlZXhCaXRzICpiaXRzLAorY2hhciAqc3RhY2ssCitpbnQgbG9zdCwKK2ludCBzdWJmcmFtZV9vZmZzZXQsCitzcHhfd29yZDE2X3QgbGFzdF9waXRjaF9nYWluLAoraW50IGNkYmtfb2Zmc2V0CispOwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbHRwX2FybTQuaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2x0cF9hcm00LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ3OWU4YgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2x0cF9hcm00LmgKQEAgLTAsMCArMSwxODggQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNCBKZWFuLU1hcmMgVmFsaW4gKi8KKy8qKgorICAgQGZpbGUgbHRwX2FybTQuaAorICAgQGJyaWVmIExvbmctVGVybSBQcmVkaWN0aW9uIGZ1bmN0aW9ucyAoQVJNNCB2ZXJzaW9uKQorKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNkZWZpbmUgT1ZFUlJJREVfSU5ORVJfUFJPRAorc3B4X3dvcmQzMl90IGlubmVyX3Byb2QoY29uc3Qgc3B4X3dvcmQxNl90ICp4LCBjb25zdCBzcHhfd29yZDE2X3QgKnksIGludCBsZW4pCit7CisgICBzcHhfd29yZDMyX3Qgc3VtMT0wLHN1bTI9MDsKKyAgIHNweF93b3JkMTZfdCAqZGVhZHgsICpkZWFkeTsKKyAgIGludCBkZWFkbGVuLCBkZWFkMSwgZGVhZDIsIGRlYWQzLCBkZWFkNCwgZGVhZDUsIGRlYWQ2OworICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICAgIlx0bGRyc2ggJTUsIFslMF0sICMyIFxuIgorICAgICAgICAgIlx0bGRyc2ggJTYsIFslMV0sICMyIFxuIgorICAgICAgICAgIi5pbm5lcl9wcm9kX2xvb3AlPTpcbiIKKyAgICAgICAgICJcdHN1YiAlNywgJTcsICU3XG4iCisgICAgICAgICAiXHRzdWIgJTEwLCAlMTAsICUxMFxuIgorCisgICAgICAgICAiXHRsZHJzaCAlOCwgWyUwXSwgIzIgXG4iCisgICAgICAgICAiXHRsZHJzaCAlOSwgWyUxXSwgIzIgXG4iCisgICAgICAgICAiXHRtbGEgJTcsICU1LCAlNiwgJTdcbiIKKyAgICAgICAgICJcdGxkcnNoICU1LCBbJTBdLCAjMiBcbiIKKyAgICAgICAgICJcdGxkcnNoICU2LCBbJTFdLCAjMiBcbiIKKyAgICAgICAgICJcdG1sYSAlMTAsICU4LCAlOSwgJTEwXG4iCisgICAgICAgICAiXHRsZHJzaCAlOCwgWyUwXSwgIzIgXG4iCisgICAgICAgICAiXHRsZHJzaCAlOSwgWyUxXSwgIzIgXG4iCisgICAgICAgICAiXHRtbGEgJTcsICU1LCAlNiwgJTdcbiIKKyAgICAgICAgICJcdGxkcnNoICU1LCBbJTBdLCAjMiBcbiIKKyAgICAgICAgICJcdGxkcnNoICU2LCBbJTFdLCAjMiBcbiIKKyAgICAgICAgICJcdG1sYSAlMTAsICU4LCAlOSwgJTEwXG4iCisKKyAgICAgICAgICJcdGxkcnNoICU4LCBbJTBdLCAjMiBcbiIKKyAgICAgICAgICJcdGxkcnNoICU5LCBbJTFdLCAjMiBcbiIKKyAgICAgICAgICJcdG1sYSAlNywgJTUsICU2LCAlN1xuIgorICAgICAgICAgIlx0bGRyc2ggJTUsIFslMF0sICMyIFxuIgorICAgICAgICAgIlx0bGRyc2ggJTYsIFslMV0sICMyIFxuIgorICAgICAgICAgIlx0bWxhICUxMCwgJTgsICU5LCAlMTBcbiIKKyAgICAgICAgICJcdGxkcnNoICU4LCBbJTBdLCAjMiBcbiIKKyAgICAgICAgICJcdGxkcnNoICU5LCBbJTFdLCAjMiBcbiIKKyAgICAgICAgICJcdG1sYSAlNywgJTUsICU2LCAlN1xuIgorICAgICAgICAgIlx0bGRyc2ggJTUsIFslMF0sICMyIFxuIgorICAgICAgICAgIlx0bGRyc2ggJTYsIFslMV0sICMyIFxuIgorICAgICAgICAgIlx0bWxhICUxMCwgJTgsICU5LCAlMTBcbiIKKworICAgICAgICAgIlx0c3VicyAlNCwgJTQsICMxXG4iCisgICAgICAgICAiXHRhZGQgJTIsICUyLCAlNywgYXNyICM1XG4iCisgICAgICAgICAiXHRhZGQgJTMsICUzLCAlMTAsIGFzciAjNVxuIgorICAgICAgICAgIlx0Ym5lIC5pbm5lcl9wcm9kX2xvb3AlPVxuIgorICAgOiAiPXIiIChkZWFkeCksICI9ciIgKGRlYWR5KSwgIj1yIiAoc3VtMSksICAiPXIiIChzdW0yKSwgIj1yIiAoZGVhZGxlbiksCisgICAiPXIiIChkZWFkMSksICI9ciIgKGRlYWQyKSwgIj1yIiAoZGVhZDMpLCAiPXIiIChkZWFkNCksICI9ciIgKGRlYWQ1KSwgIj1yIiAoZGVhZDYpCisgICA6ICIwIiAoeCksICIxIiAoeSksICIyIiAoc3VtMSksICIzIiAoc3VtMiksICI0IiAobGVuPj4zKQorICAgOiAiY2MiCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgcmV0dXJuIChzdW0xK3N1bTIpPj4xOworfQorCisjZGVmaW5lIE9WRVJSSURFX1BJVENIX1hDT1JSCit2b2lkIHBpdGNoX3hjb3JyKGNvbnN0IHNweF93b3JkMTZfdCAqX3gsIGNvbnN0IHNweF93b3JkMTZfdCAqX3ksIHNweF93b3JkMzJfdCAqY29yciwgaW50IGxlbiwgaW50IG5iX3BpdGNoLCBjaGFyICpzdGFjaykKK3sKKyAgIGludCBpLGo7CisgICBmb3IgKGk9MDtpPG5iX3BpdGNoO2krPTQpCisgICB7CisgICAgICAvKiBDb21wdXRlIGNvcnJlbGF0aW9uKi8KKyAgICAgIC8vY29ycltuYl9waXRjaC0xLWldPWlubmVyX3Byb2QoeCwgX3kraSwgbGVuKTsKKyAgICAgIHNweF93b3JkMzJfdCBzdW0xPTA7CisgICAgICBzcHhfd29yZDMyX3Qgc3VtMj0wOworICAgICAgc3B4X3dvcmQzMl90IHN1bTM9MDsKKyAgICAgIHNweF93b3JkMzJfdCBzdW00PTA7CisgICAgICBjb25zdCBzcHhfd29yZDE2X3QgKnkgPSBfeStpOworICAgICAgY29uc3Qgc3B4X3dvcmQxNl90ICp4ID0gX3g7CisgICAgICBzcHhfd29yZDMyX3QgeTAsIHkxLCB5MiwgeTM7CisgICAgICB5MD0qeSsrOworICAgICAgeTE9KnkrKzsKKyAgICAgIHkyPSp5Kys7CisgICAgICB5Mz0qeSsrOworICAgICAgZm9yIChqPTA7ajxsZW47ais9NCkKKyAgICAgIHsKKyAgICAgICAgIHNweF93b3JkMzJfdCBwYXJ0MSwgcGFydDIsIHBhcnQzLCBwYXJ0NCwgeDA7CisgICAgICAgICBzcHhfd29yZDMyX3QgZGVhZDE7CisgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisjaWZkZWYgU0hPUlRDVVRTCisgICAgICAgICAgICAgICAiXHRsZHJzaCAlMTAsIFslOF0sICM0IFxuIgorICAgICAgICAgICAgICAgIlx0bXVsICU0LCAlMTAsICUwIFxuIgorICAgICAgICAgICAgICAgIlx0bGRyc2ggJTE1LCBbJThdLCAjNCBcbiIKKyAgICAgICAgICAgICAgICJcdG11bCAlNSwgJTEwLCAlMSBcbiIKKyAgICAgICAgICAgICAgICJcdGxkcnNoICUwLCBbJTldLCAjMiBcbiIKKyAgICAgICAgICAgICAgICJcdG11bCAlNiwgJTEwLCAlMiBcbiIKKyAgICAgICAgICAgICAgICJcdGxkcnNoICUxLCBbJTldLCAjMiBcbiIKKyAgICAgICAgICAgICAgICJcdG11bCAlNywgJTEwLCAlMyBcbiIKKyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAiXHRtbGEgJTQsICUxNSwgJTIsICU0IFxuIgorICAgICAgICAgICAgICAgIlx0bGRyc2ggJTIsIFslOV0sICMyIFxuIgorICAgICAgICAgICAgICAgIlx0bWxhICU1LCAlMTUsICUzLCAlNSBcbiIKKyAgICAgICAgICAgICAgICJcdGxkcnNoICUzLCBbJTldLCAjMiBcbiIKKyAgICAgICAgICAgICAgICJcdG1sYSAlNiwgJTE1LCAlMCwgJTYgXG4iCisgICAgICAgICAgICAgICAiXHRtbGEgJTcsICUxNSwgJTEsICU3IFxuIgorCisjZWxzZQorICAgICAgICAgICAgICAgIlx0bGRyc2ggJTEwLCBbJThdLCAjMiBcbiIKKyAgICAgICAgICAgICAgICJcdG11bCAlNCwgJTEwLCAlMCBcbiIKKyAgICAgICAgICAgICAgICJcdG11bCAlNSwgJTEwLCAlMSBcbiIKKyAgICAgICAgICAgICAgICJcdG11bCAlNiwgJTEwLCAlMiBcbiIKKyAgICAgICAgICAgICAgICJcdG11bCAlNywgJTEwLCAlMyBcbiIKKworICAgICAgICAgICAgICAgIlx0bGRyc2ggJTEwLCBbJThdLCAjMiBcbiIKKyAgICAgICAgICAgICAgICJcdGxkcnNoICUwLCBbJTldLCAjMiBcbiIKKyAgICAgICAgICAgICAgICJcdG1sYSAlNCwgJTEwLCAlMSwgJTQgXG4iCisgICAgICAgICAgICAgICAiXHRtbGEgJTUsICUxMCwgJTIsICU1IFxuIgorICAgICAgICAgICAgICAgIlx0bWxhICU2LCAlMTAsICUzLCAlNiBcbiIKKyAgICAgICAgICAgICAgICJcdG1sYSAlNywgJTEwLCAlMCwgJTcgXG4iCisKKyAgICAgICAgICAgICAgICJcdGxkcnNoICUxMCwgWyU4XSwgIzIgXG4iCisgICAgICAgICAgICAgICAiXHRsZHJzaCAlMSwgWyU5XSwgIzIgXG4iCisgICAgICAgICAgICAgICAiXHRtbGEgJTQsICUxMCwgJTIsICU0IFxuIgorICAgICAgICAgICAgICAgIlx0bWxhICU1LCAlMTAsICUzLCAlNSBcbiIKKyAgICAgICAgICAgICAgICJcdG1sYSAlNiwgJTEwLCAlMCwgJTYgXG4iCisgICAgICAgICAgICAgICAiXHRtbGEgJTcsICUxMCwgJTEsICU3IFxuIgorCisgICAgICAgICAgICAgICAiXHRsZHJzaCAlMTAsIFslOF0sICMyIFxuIgorICAgICAgICAgICAgICAgIlx0bGRyc2ggJTIsIFslOV0sICMyIFxuIgorICAgICAgICAgICAgICAgIlx0bWxhICU0LCAlMTAsICUzLCAlNCBcbiIKKyAgICAgICAgICAgICAgICJcdG1sYSAlNSwgJTEwLCAlMCwgJTUgXG4iCisgICAgICAgICAgICAgICAiXHRtbGEgJTYsICUxMCwgJTEsICU2IFxuIgorICAgICAgICAgICAgICAgIlx0bWxhICU3LCAlMTAsICUyLCAlNyBcbiIKKworICAgICAgICAgICAgICAgIlx0bGRyc2ggJTMsIFslOV0sICMyIFxuIgorI2VuZGlmCisKKyAgICAgICAgICAgICAgICJcdGxkciAlMTAsICUxMSBcbiIKKyAgICAgICAgICAgICAgICJcdGxkciAlMTUsICUxMiBcbiIKKyAgICAgICAgICAgICAgICJcdGFkZCAlNCwgJTEwLCAlNCwgYXNyICM2IFxuIgorICAgICAgICAgICAgICAgIlx0c3RyICU0LCAlMTEgXG4iCisgICAgICAgICAgICAgICAiXHRsZHIgJTEwLCAlMTMgXG4iCisgICAgICAgICAgICAgICAiXHRhZGQgJTUsICUxNSwgJTUsIGFzciAjNiBcbiIKKyAgICAgICAgICAgICAgICJcdHN0ciAlNSwgJTEyIFxuIgorICAgICAgICAgICAgICAgIlx0bGRyICUxNSwgJTE0IFxuIgorICAgICAgICAgICAgICAgIlx0YWRkICU2LCAlMTAsICU2LCBhc3IgIzYgXG4iCisgICAgICAgICAgICAgICAiXHRhZGQgJTcsICUxNSwgJTcsIGFzciAjNiBcbiIKKyAgICAgICAgICAgICAgICJcdHN0ciAlNiwgJTEzIFxuIgorICAgICAgICAgICAgICAgIlx0c3RyICU3LCAlMTQgXG4iCisKKyAgICAgICAgICAgIDogIj1yIiAoeTApLCAiPXIiICh5MSksICI9ciIgKHkyKSwgIj1yIiAoeTMpLAorICAgICAgICAgIj1yIiAocGFydDEpLCAgIj1yIiAocGFydDIpLCAgIj1yIiAocGFydDMpLCAgIj1yIiAocGFydDQpLAorICAgICAgICAgIj1yIiAoeCksICI9ciIgKHkpLCAiPXIiICh4MCksCisgICAgICAgICAiPW0iIChzdW0xKSwgIj1tIiAoc3VtMiksICI9bSIgKHN1bTMpLCAiPW0iIChzdW00KSwgIj1yIiAoZGVhZDEpCisgICAgICAgICAgICA6ICIwIiAoeTApLCAiMSIgKHkxKSwgIjIiICh5MiksICIzIiAoeTMpLAorICAgICAgICAgICAgIjgiICh4KSwgIjkiICh5KSwKKyAgICAgICAgICAgICIxMSIgKHN1bTEpLCAiMTIiIChzdW0yKSwgIjEzIiAoc3VtMyksICIxNCIgKHN1bTQpCisgICAgICAgICAgICA6ICJjYyIsICJtZW1vcnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgfQorICAgICAgY29ycltuYl9waXRjaC0xLWldPXN1bTE7CisgICAgICBjb3JyW25iX3BpdGNoLTItaV09c3VtMjsKKyAgICAgIGNvcnJbbmJfcGl0Y2gtMy1pXT1zdW0zOworICAgICAgY29ycltuYl9waXRjaC00LWldPXN1bTQ7CisgICB9CisKK30KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2x0cF9iZmluLmggYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9sdHBfYmZpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NjY5MDIKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9sdHBfYmZpbi5oCkBAIC0wLDAgKzEsNDE5IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDUgQW5hbG9nIERldmljZXMgKi8KKy8qKgorICAgQGZpbGUgbHRwX2JmaW4uaAorICAgQGF1dGhvciBKZWFuLU1hcmMgVmFsaW4KKyAgIEBicmllZiBMb25nLVRlcm0gUHJlZGljdGlvbiBmdW5jdGlvbnMgKEJsYWNrZmluIHZlcnNpb24pCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2RlZmluZSBPVkVSUklERV9JTk5FUl9QUk9ECitzcHhfd29yZDMyX3QgaW5uZXJfcHJvZChjb25zdCBzcHhfd29yZDE2X3QgKngsIGNvbnN0IHNweF93b3JkMTZfdCAqeSwgaW50IGxlbikKK3sKKyAgIHNweF93b3JkMzJfdCBzdW09MDsKKyAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICJQMCA9ICUzO1xuXHQiCisgICAgICAiUDEgPSAlMTtcblx0IgorICAgICAgIlAyID0gJTI7XG5cdCIKKyAgICAgICJJMCA9IFAxO1xuXHQiCisgICAgICAiSTEgPSBQMjtcblx0IgorICAgICAgIkwwID0gMDtcblx0IgorICAgICAgIkwxID0gMDtcblx0IgorICAgICAgIkEwID0gMDtcblx0IgorICAgICAgIlIwLkwgPSBXW0kwKytdIHx8IFIxLkwgPSBXW0kxKytdO1xuXHQiCisgICAgICAiTE9PUCBpbm5lciU9IExDMCA9IFAwO1xuXHQiCisgICAgICAiTE9PUF9CRUdJTiBpbm5lciU9O1xuXHQiCisgICAgICAgICAiQTAgKz0gUjAuTCpSMS5MIChJUykgfHwgUjAuTCA9IFdbSTArK10gfHwgUjEuTCA9IFdbSTErK107XG5cdCIKKyAgICAgICJMT09QX0VORCBpbm5lciU9O1xuXHQiCisgICAgICAiQTAgKz0gUjAuTCpSMS5MIChJUyk7XG5cdCIKKyAgICAgICJBMCA9IEEwID4+PiA2O1xuXHQiCisgICAgICAiUjAgPSBBMDtcblx0IgorICAgICAgIiUwID0gUjA7XG5cdCIKKyAgIDogIj1tIiAoc3VtKQorICAgOiAibSIgKHgpLCAibSIgKHkpLCAiZCIgKGxlbi0xKQorICAgOiAiUDAiLCAiUDEiLCAiUDIiLCAiUjAiLCAiUjEiLCAiQTAiLCAiSTAiLCAiSTEiLCAiTDAiLCAiTDEiLCAiUjMiCisgICApOworICAgcmV0dXJuIHN1bTsKK30KKworI2RlZmluZSBPVkVSUklERV9QSVRDSF9YQ09SUgordm9pZCBwaXRjaF94Y29ycihjb25zdCBzcHhfd29yZDE2X3QgKl94LCBjb25zdCBzcHhfd29yZDE2X3QgKl95LCBzcHhfd29yZDMyX3QgKmNvcnIsIGludCBsZW4sIGludCBuYl9waXRjaCwgY2hhciAqc3RhY2spCit7CisgICBjb3JyICs9IG5iX3BpdGNoIC0gMTsKKyAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICJQMiA9ICUwO1xuXHQiCisgICAgICAiSTAgPSBQMjtcblx0IiAvKiB4IGluIEkwICovCisgICAgICAiQjAgPSBQMjtcblx0IiAvKiB4IGluIEIwICovCisgICAgICAiUjAgPSAlMztcblx0IiAvKiBsZW4gaW4gUjAgKi8KKyAgICAgICJQMyA9ICUzO1xuXHQiCisgICAgICAiUDMgKz0gLTI7XG5cdCIgLyogbGVuIGluIFIwICovCisgICAgICAiUDQgPSAlNDtcblx0IiAvKiBuYl9waXRjaCBpbiBSMCAqLworICAgICAgIlIxID0gUjAgPDwgMTtcblx0IiAvKiBudW1iZXIgb2YgYnl0ZXMgaW4geCAqLworICAgICAgIkwwID0gUjE7XG5cdCIKKyAgICAgICJQMCA9ICUxO1xuXHQiCisKKyAgICAgICJQMSA9ICUyO1xuXHQiCisgICAgICAiQjEgPSBQMTtcblx0IgorICAgICAgIkwxID0gMDtcblx0IiAvKkRpc2FibGUgbG9vcGluZyBvbiBJMSovCisKKyAgICAgICJyMCA9IFtJMCsrXTtcblx0IgorICAgICAgIkxPT1AgcGl0Y2glPSBMQzAgPSBQNCA+PiAxO1xuXHQiCisgICAgICAiTE9PUF9CRUdJTiBwaXRjaCU9O1xuXHQiCisgICAgICAgICAiSTEgPSBQMDtcblx0IgorICAgICAgICAgIkExID0gQTAgPSAwO1xuXHQiCisgICAgICAgICAiUjEgPSBbSTErK107XG5cdCIKKyAgICAgICAgICJMT09QIGlubmVyX3Byb2QlPSBMQzEgPSBQMyA+PiAxO1xuXHQiCisgICAgICAgICAiTE9PUF9CRUdJTiBpbm5lcl9wcm9kJT07XG5cdCIKKyAgICAgICAgICAgICJBMSArPSBSMC5MKlIxLkgsIEEwICs9IFIwLkwqUjEuTCAoSVMpIHx8IFIxLkwgPSBXW0kxKytdO1xuXHQiCisgICAgICAgICAgICAiQTEgKz0gUjAuSCpSMS5MLCBBMCArPSBSMC5IKlIxLkggKElTKSB8fCBSMS5IID0gV1tJMSsrXSB8fCBSMCA9IFtJMCsrXTtcblx0IgorICAgICAgICAgIkxPT1BfRU5EIGlubmVyX3Byb2QlPTtcblx0IgorICAgICAgICAgIkExICs9IFIwLkwqUjEuSCwgQTAgKz0gUjAuTCpSMS5MIChJUykgfHwgUjEuTCA9IFdbSTErK107XG5cdCIKKyAgICAgICAgICJBMSArPSBSMC5IKlIxLkwsIEEwICs9IFIwLkgqUjEuSCAoSVMpIHx8IFIwID0gW0kwKytdO1xuXHQiCisgICAgICAgICAiQTAgPSBBMCA+Pj4gNjtcblx0IgorICAgICAgICAgIkExID0gQTEgPj4+IDY7XG5cdCIKKyAgICAgICAgICJSMiA9IEEwLCBSMyA9IEExO1xuXHQiCisgICAgICAgICAiW1AxLS1dID0gcjI7XG5cdCIKKyAgICAgICAgICJbUDEtLV0gPSByMztcblx0IgorICAgICAgICAgIlAwICs9IDQ7XG5cdCIKKyAgICAgICJMT09QX0VORCBwaXRjaCU9O1xuXHQiCisgICAgICAiTDAgPSAwO1xuXHQiCisgICA6IDogIm0iIChfeCksICJtIiAoX3kpLCAibSIgKGNvcnIpLCAibSIgKGxlbiksICJtIiAobmJfcGl0Y2gpCisgICA6ICJBMCIsICJBMSIsICJQMCIsICJQMSIsICJQMiIsICJQMyIsICJQNCIsICJSMCIsICJSMSIsICJSMiIsICJSMyIsICJJMCIsICJJMSIsICJMMCIsICJMMSIsICJCMCIsICJCMSIsICJtZW1vcnkiCisgICApOworfQorCisjZGVmaW5lIE9WRVJSSURFX0NPTVBVVEVfUElUQ0hfRVJST1IKK3N0YXRpYyBpbmxpbmUgc3B4X3dvcmQzMl90IGNvbXB1dGVfcGl0Y2hfZXJyb3Ioc3B4X3dvcmQxNl90ICpDLCBzcHhfd29yZDE2X3QgKmcsIHNweF93b3JkMTZfdCBwaXRjaF9jb250cm9sKQoreworICAgc3B4X3dvcmQzMl90IHN1bTsKKyAgIF9fYXNtX18gX192b2xhdGlsZV9fCisgICAgICAgICAoCisgICAgICAgICAiQTAgPSAwO1xuXHQiCisgICAgICAgICAKKyAgICAgICAgICJSMCA9IFdbJTErK107XG5cdCIKKyAgICAgICAgICJSMS5MID0gJTIuTColNS5MIChJUyk7XG5cdCIKKyAgICAgICAgICJBMCArPSBSMS5MKlIwLkwgKElTKSB8fCBSMCA9IFdbJTErK107XG5cdCIKKyAgICAgICAgIAorICAgICAgICAgIlIxLkwgPSAlMy5MKiU1LkwgKElTKTtcblx0IgorICAgICAgICAgIkEwICs9IFIxLkwqUjAuTCAoSVMpIHx8IFIwID0gV1slMSsrXTtcblx0IgorICAgICAgICAgCisgICAgICAgICAiUjEuTCA9ICU0LkwqJTUuTCAoSVMpO1xuXHQiCisgICAgICAgICAiQTAgKz0gUjEuTCpSMC5MIChJUykgfHwgUjAgPSBXWyUxKytdO1xuXHQiCisgICAgICAgICAKKyAgICAgICAgICJSMS5MID0gJTIuTColMy5MIChJUyk7XG5cdCIKKyAgICAgICAgICJBMCAtPSBSMS5MKlIwLkwgKElTKSB8fCBSMCA9IFdbJTErK107XG5cdCIKKworICAgICAgICAgIlIxLkwgPSAlNC5MKiUzLkwgKElTKTtcblx0IgorICAgICAgICAgIkEwIC09IFIxLkwqUjAuTCAoSVMpIHx8IFIwID0gV1slMSsrXTtcblx0IgorICAgICAgICAgCisgICAgICAgICAiUjEuTCA9ICU0LkwqJTIuTCAoSVMpO1xuXHQiCisgICAgICAgICAiQTAgLT0gUjEuTCpSMC5MIChJUykgfHwgUjAgPSBXWyUxKytdO1xuXHQiCisgICAgICAgICAKKyAgICAgICAgICJSMS5MID0gJTIuTColMi5MIChJUyk7XG5cdCIKKyAgICAgICAgICJBMCAtPSBSMS5MKlIwLkwgKElTKSB8fCBSMCA9IFdbJTErK107XG5cdCIKKworICAgICAgICAgIlIxLkwgPSAlMy5MKiUzLkwgKElTKTtcblx0IgorICAgICAgICAgIkEwIC09IFIxLkwqUjAuTCAoSVMpIHx8IFIwID0gV1slMSsrXTtcblx0IgorICAgICAgICAgCisgICAgICAgICAiUjEuTCA9ICU0LkwqJTQuTCAoSVMpO1xuXHQiCisgICAgICAgICAiQTAgLT0gUjEuTCpSMC5MIChJUyk7XG5cdCIKKyAgICAgICAgIAorICAgICAgICAgIiUwID0gQTA7XG5cdCIKKyAgIDogIj0mRCIgKHN1bSksICI9YSIgKEMpCisgICA6ICJkIiAoZ1swXSksICJkIiAoZ1sxXSksICJkIiAoZ1syXSksICJkIiAocGl0Y2hfY29udHJvbCksICIxIiAoQykKKyAgIDogIlIwIiwgIlIxIiwgIlIyIiwgIkEwIgorICAgICAgICAgKTsKKyAgIHJldHVybiBzdW07Cit9CisKKyNkZWZpbmUgT1ZFUlJJREVfT1BFTl9MT09QX05CRVNUX1BJVENICisjaWZkZWYgT1ZFUlJJREVfT1BFTl9MT09QX05CRVNUX1BJVENICit2b2lkIG9wZW5fbG9vcF9uYmVzdF9waXRjaChzcHhfd29yZDE2X3QgKnN3LCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBsZW4sIGludCAqcGl0Y2gsIHNweF93b3JkMTZfdCAqZ2FpbiwgaW50IE4sIGNoYXIgKnN0YWNrKQoreworICAgaW50IGksaixrOworICAgVkFSREVDTChzcHhfd29yZDMyX3QgKmJlc3Rfc2NvcmUpOworICAgVkFSREVDTChzcHhfd29yZDMyX3QgKmJlc3RfZW5lcik7CisgICBzcHhfd29yZDMyX3QgZTA7CisgICBWQVJERUNMKHNweF93b3JkMzJfdCAqY29ycik7CisgICBWQVJERUNMKHNweF93b3JkMzJfdCAqZW5lcmd5KTsKKworICAgQUxMT0MoYmVzdF9zY29yZSwgTiwgc3B4X3dvcmQzMl90KTsKKyAgIEFMTE9DKGJlc3RfZW5lciwgTiwgc3B4X3dvcmQzMl90KTsKKyAgIEFMTE9DKGNvcnIsIGVuZC1zdGFydCsxLCBzcHhfd29yZDMyX3QpOworICAgQUxMT0MoZW5lcmd5LCBlbmQtc3RhcnQrMiwgc3B4X3dvcmQzMl90KTsKKworICAgZm9yIChpPTA7aTxOO2krKykKKyAgIHsKKyAgICAgICAgYmVzdF9zY29yZVtpXT0tMTsKKyAgICAgICAgYmVzdF9lbmVyW2ldPTA7CisgICAgICAgIHBpdGNoW2ldPXN0YXJ0OworICAgfQorCisgICBlbmVyZ3lbMF09aW5uZXJfcHJvZChzdy1zdGFydCwgc3ctc3RhcnQsIGxlbik7CisgICBlMD1pbm5lcl9wcm9kKHN3LCBzdywgbGVuKTsKKworICAgLyogZW5lcmd5IHVwZGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKyAgICAgICgKKyIgICAgICAgIFAwID0gJTA7XG5cdCIKKyIgICAgICAgIEkxID0gJTE7XG5cdCIKKyIgICAgICAgIEwxID0gMDtcblx0IgorIiAgICAgICAgSTIgPSAlMjtcblx0IgorIiAgICAgICAgTDIgPSAwO1xuXHQiCisiICAgICAgICBSMiA9IFtQMCsrXTtcblx0IgorIiAgICAgICAgUjMgPSAwO1xuXHQiCisiICAgICAgICBMU0VUVVAgKGV1MSwgZXUyKSBMQzEgPSAlMztcblx0IgorImV1MTogICAgICBSMS5MID0gVyBbSTEtLV0gfHwgUjAuTCA9IFcgW0kyLS1dIDtcblx0IgorIiAgICAgICAgICBSMSA9IFIxLkwgKiBSMS5MIChJUyk7XG5cdCIKKyIgICAgICAgICAgUjAgPSBSMC5MICogUjAuTCAoSVMpO1xuXHQiCisiICAgICAgICAgIFIxID4+Pj0gNjtcblx0IgorIiAgICAgICAgICBSMSA9IFIxICsgUjI7XG5cdCIKKyIgICAgICAgICAgUjAgPj4+PSA2O1xuXHQiCisiICAgICAgICAgIFIxID0gUjEgLSBSMDtcblx0IgorIiAgICAgICAgICBSMiA9IE1BWChSMSxSMyk7XG5cdCIKKyJldTI6ICAgICAgW1AwKytdID0gUjI7XG5cdCIKKyAgICAgICA6IDogImQiIChlbmVyZ3kpLCAiZCIgKCZzd1stc3RhcnQtMV0pLCAiZCIgKCZzd1stc3RhcnQrbGVuLTFdKSwKKyAgICAgICAgICAgImEiIChlbmQtc3RhcnQpICAKKyAgICAgICA6ICJQMCIsICJJMSIsICJJMiIsICJSMCIsICJSMSIsICJSMiIsICJSMyIKKyNpZiAoX19HTlVDX18gPT0gNCkKKyAgICAgICAgICwgIkxDMSIKKyNlbmRpZgorICAgICAgICk7CisKKyAgIHBpdGNoX3hjb3JyKHN3LCBzdy1lbmQsIGNvcnIsIGxlbiwgZW5kLXN0YXJ0KzEsIHN0YWNrKTsKKworICAgLyogRklYTUU6IEZpeGVkLXBvaW50IGFuZCBmbG9hdGluZy1wb2ludCBjb2RlIHNob3VsZCBiZSBtZXJnZWQgKi8KKyAgIHsKKyAgICAgIFZBUkRFQ0woc3B4X3dvcmQxNl90ICpjb3JyMTYpOworICAgICAgVkFSREVDTChzcHhfd29yZDE2X3QgKmVuZXIxNik7CisgICAgICBBTExPQyhjb3JyMTYsIGVuZC1zdGFydCsxLCBzcHhfd29yZDE2X3QpOworICAgICAgQUxMT0MoZW5lcjE2LCBlbmQtc3RhcnQrMSwgc3B4X3dvcmQxNl90KTsKKyAgICAgIC8qIE5vcm1hbGl6ZSB0byAxODAgc28gd2UgY2FuIHNxdWFyZSBpdCBhbmQgaXQgc3RpbGwgZml0cyBpbiAxNiBiaXRzICovCisgICAgICBub3JtYWxpemUxNihjb3JyLCBjb3JyMTYsIDE4MCwgZW5kLXN0YXJ0KzEpOworICAgICAgbm9ybWFsaXplMTYoZW5lcmd5LCBlbmVyMTYsIDE4MCwgZW5kLXN0YXJ0KzEpOworCisgICAgICBpZiAoTiA9PSAxKSB7CisJLyogb3B0aW1pc2VkIGFzbSB0byBoYW5kbGUgTj09MSBjYXNlICovCisgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworICAgICAgKAorIiAgICAgICAgSTAgPSAlMTtcblx0IiAgICAgICAgICAgICAgICAgICAgIC8qIEkwOiBjb3JyMTZbXSAgICAqLworIiAgICAgICAgTDAgPSAwO1xuXHQiCisiICAgICAgICBJMSA9ICUyO1xuXHQiICAgICAgICAgICAgICAgICAgICAgLyogSTE6IGVuZXJneSAgICAgICovCisiICAgICAgICBMMSA9IDA7XG5cdCIKKyIgICAgICAgIFIyID0gLTE7XG5cdCIgICAgICAgICAgICAgICAgICAgICAvKiBSMjogYmVzdCBzY29yZSAgKi8KKyIgICAgICAgIFIzID0gMDtcblx0IiAgICAgICAgICAgICAgICAgICAgICAvKiBSMzogYmVzdCBlbmVyZ3kgKi8KKyIgICAgICAgIFAwID0gJTQ7XG5cdCIgICAgICAgICAgICAgICAgICAgICAvKiBQMDogYmVzdCBwaXRjaCAgKi8KKyIgICAgICAgIFAxID0gJTQ7XG5cdCIgICAgICAgICAgICAgICAgICAgICAvKiBQMTogY291bnRlciAgICAgKi8KKyIgICAgICAgIExTRVRVUCAoc2wxLCBzbDIpIExDMSA9ICUzO1xuXHQiCisic2wxOiAgICAgIFIwLkwgPSBXIFtJMCsrXSB8fCBSMS5MID0gVyBbSTErK107XG5cdCIgICAgICAgICAKKyIgICAgICAgICAgUjAgPSBSMC5MICogUjAuTCAoSVMpO1xuXHQiCisiICAgICAgICAgIFIxICAgKz0gMTtcblx0IgorIiAgICAgICAgICBSNCAgID0gUjAuTCAqIFIzLkw7XG5cdCIKKyIgICAgICAgICAgUjUgICA9IFIyLkwgKiBSMS5MO1xuXHQiCisiICAgICAgICAgIGNjICAgPSBSNSA8IFI0O1xuXHQiCisiICAgICAgICAgIGlmIGNjIFIyID0gUjA7XG5cdCIKKyIgICAgICAgICAgaWYgY2MgUjMgPSBSMTtcblx0IgorIiAgICAgICAgICBpZiBjYyBQMCA9IFAxO1xuXHQiCisic2wyOiAgICAgIFAxICs9IDE7XG5cdCIKKyIgICAgICAgICUwID0gUDA7XG5cdCIKKyAgICAgICA6ICI9JmQiIChwaXRjaFswXSkKKyAgICAgICA6ICJhIiAoY29ycjE2KSwgImEiIChlbmVyMTYpLCAiYSIgKGVuZCsxLXN0YXJ0KSwgImQiIChzdGFydCkgCisgICAgICAgOiAiUDAiLCAiUDEiLCAiSTAiLCAiSTEiLCAiUjAiLCAiUjEiLCAiUjIiLCAiUjMiLCAiUjQiLCAiUjUiCisjaWYgKF9fR05VQ19fID09IDQpCisgICAgICAgICAsICJMQzEiCisjZW5kaWYKKyAgICAgICApOworCisgICAgICB9CisgICAgICBlbHNlIHsKKwlmb3IgKGk9c3RhcnQ7aTw9ZW5kO2krKykKKwkgIHsKKwkgICAgc3B4X3dvcmQxNl90IHRtcCA9IE1VTFQxNl8xNl8xNihjb3JyMTZbaS1zdGFydF0sY29ycjE2W2ktc3RhcnRdKTsKKwkgICAgLyogSW5zdGVhZCBvZiBkaXZpZGluZyB0aGUgdG1wIGJ5IHRoZSBlbmVyZ3ksIHdlIG11bHRpcGx5IG9uIHRoZSBvdGhlciBzaWRlICovCisJICAgIGlmIChNVUxUMTZfMTYodG1wLGJlc3RfZW5lcltOLTFdKT5NVUxUMTZfMTYoYmVzdF9zY29yZVtOLTFdLEFERDE2KDEsZW5lcjE2W2ktc3RhcnRdKSkpCisJICAgICAgeworCQkvKiBXZSBjYW4gc2FmZWx5IHB1dCBpdCBsYXN0IGFuZCB0aGVuIGNoZWNrICovCisJCWJlc3Rfc2NvcmVbTi0xXT10bXA7CisJCWJlc3RfZW5lcltOLTFdPWVuZXIxNltpLXN0YXJ0XSsxOworCQlwaXRjaFtOLTFdPWk7CisJCS8qIENoZWNrIGlmIGl0IGNvbWVzIGluIGZyb250IG9mIG90aGVycyAqLworCQlmb3IgKGo9MDtqPE4tMTtqKyspCisJCSAgeworCQkgICAgaWYgKE1VTFQxNl8xNih0bXAsYmVzdF9lbmVyW2pdKT5NVUxUMTZfMTYoYmVzdF9zY29yZVtqXSxBREQxNigxLGVuZXIxNltpLXN0YXJ0XSkpKQorCQkgICAgICB7CisJCQlmb3IgKGs9Ti0xO2s+ajtrLS0pCisJCQkgIHsKKwkJCSAgICBiZXN0X3Njb3JlW2tdPWJlc3Rfc2NvcmVbay0xXTsKKwkJCSAgICBiZXN0X2VuZXJba109YmVzdF9lbmVyW2stMV07CisJCQkgICAgcGl0Y2hba109cGl0Y2hbay0xXTsKKwkJCSAgfQorCQkJYmVzdF9zY29yZVtqXT10bXA7CisJCQliZXN0X2VuZXJbal09ZW5lcjE2W2ktc3RhcnRdKzE7CisJCQlwaXRjaFtqXT1pOworCQkJYnJlYWs7CisJCSAgICAgIH0KKwkJICB9CisJICAgICAgfQorCSAgfQorICAgICAgfQorICAgfQorCisgICAvKiBDb21wdXRlIG9wZW4tbG9vcCBnYWluICovCisgICBpZiAoZ2FpbikKKyAgIHsKKyAgICAgICBmb3IgKGo9MDtqPE47aisrKQorICAgICAgIHsKKyAgICAgICAgICBzcHhfd29yZDE2X3QgZzsKKyAgICAgICAgICBpPXBpdGNoW2pdOworICAgICAgICAgIGcgPSBESVYzMihjb3JyW2ktc3RhcnRdLCAxMCtTSFIzMihNVUxUMTZfMTYoc3B4X3NxcnQoZTApLHNweF9zcXJ0KGVuZXJneVtpLXN0YXJ0XSkpLDYpKTsKKyAgICAgICAgICAvKiBGSVhNRTogZyA9IG1heChnLGNvcnIvZW5lcmd5KSAqLworICAgICAgICAgICAgICAgICAgIGlmIChnPDApCisgICAgICAgICAgICAgICAgICAgZyA9IDA7CisgICAgICAgICAgICAgZ2FpbltqXT1nOworICAgICAgIH0KKyAgIH0KK30KKyNlbmRpZgorCisjZGVmaW5lIE9WRVJSSURFX1BJVENIX0dBSU5fU0VBUkNIXzNUQVBfVlEKKyNpZmRlZiBPVkVSUklERV9QSVRDSF9HQUlOX1NFQVJDSF8zVEFQX1ZRCitzdGF0aWMgaW50IHBpdGNoX2dhaW5fc2VhcmNoXzN0YXBfdnEoCisgIGNvbnN0IHNpZ25lZCBjaGFyICpnYWluX2NkYmssCisgIGludCAgICAgICAgICAgICAgICBnYWluX2NkYmtfc2l6ZSwKKyAgc3B4X3dvcmQxNl90ICAgICAgKkMxNiwKKyAgc3B4X3dvcmQxNl90ICAgICAgIG1heF9nYWluCispCit7CisgIGNvbnN0IHNpZ25lZCBjaGFyICpwdHI9Z2Fpbl9jZGJrOworICBpbnQgICAgICAgICAgICAgICAgYmVzdF9jZGJrPTA7CisgIHNweF93b3JkMzJfdCAgICAgICBiZXN0X3N1bT0tVkVSWV9MQVJHRTMyOworICBzcHhfd29yZDMyX3QgICAgICAgc3VtPTA7CisgIHNweF93b3JkMTZfdCAgICAgICBnWzNdOworICBzcHhfd29yZDE2X3QgICAgICAgcGl0Y2hfY29udHJvbD02NDsKKyAgc3B4X3dvcmQxNl90ICAgICAgIGdhaW5fc3VtOworICBpbnQgICAgICAgICAgICAgICAgaTsKKworICAgICAgLyogZmFzdCBhc20gdmVyc2lvbiBvZiBWUSBjb2RlYm9vayBzZWFyY2ggKi8KKworICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKyAgICAgICgKKworIiAgICAgICAgUDAgPSAlMjtcblx0IiAgICAgICAgICAgICAgICAgICAgIC8qIFAwOiBwdHIgdG8gZ2Fpbl9jZGJrICovCisiICAgICAgICBMMSA9IDA7XG5cdCIgICAgICAgICAgICAgICAgICAgICAgLyogbm8gY2lyYyBhZGRyIGZvciBMMSAgKi8KKyIgICAgICAgICUwID0gMDtcblx0IiAgICAgICAgICAgICAgICAgICAgICAvKiAlMDogYmVzdF9zdW0gICAgICAgICAqLworIiAgICAgICAgJTEgPSAwO1xuXHQiICAgICAgICAgICAgICAgICAgICAgIC8qICUxOiBiZXN0X2NiZGsgICAgICAgICovCisiICAgICAgICBQMSA9IDA7XG5cdCIgICAgICAgICAgICAgICAgICAgICAgLyogUDE6IGxvb3AgY291bnRlciAgICAgKi8KKyIgICAgICAgIFI1ID0gNjQ7XG5cdCIgICAgICAgICAgICAgICAgICAgICAvKiBSNTogcGl0Y2hfY29udHJvbCAgICAqLworCisiICAgICAgICBMU0VUVVAgKHBnczEsIHBnczIpIExDMSA9ICU0O1xuXHQiCisicGdzMTogICAgIFIyICA9IEIgW1AwKytdIChYKTtcblx0IiAgICAgICAgLyogUjI6IGdbMF0gICAgICAgICAgICAgKi8KKyIgICAgICAgICAgUjMgID0gQiBbUDArK10gKFgpO1xuXHQiICAgICAgICAvKiBSMzogZ1sxXSAgICAgICAgICAgICAqLworIiAgICAgICAgICBSNCAgPSBCIFtQMCsrXSAoWCk7XG5cdCIgICAgICAgIC8qIFI0OiBnWzJdICAgICAgICAgICAgICovCisiICAgICAgICAgIFIyICs9IDMyO1xuXHQiCisiICAgICAgICAgIFIzICs9IDMyO1xuXHQiCisiICAgICAgICAgIFI0ICs9IDMyO1xuXHQiCisKKyIgICAgICAgICAgUjAgID0gQiBbUDArK10gKFgpO1xuXHQiICAgICAgICAgICAgICAKKyIgICAgICAgICAgQjAgID0gUjA7XG5cdCIgICAgICAgICAgICAgICAgICAvKiBCTzogZ2Fpbl9zdW0gICAgICAgICAqLworICAgICAgICAgIAorICAgICAgICAgICAvKiBjb21wdXRlX3BpdGNoX2Vycm9yKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyIgICAgICAgICAgSTEgPSAlMztcblx0IiAgICAgICAgICAgICAgICAgICAvKiBJMTogcHRyIHRvIEMgICAgICAgICAqLworIiAgICAgICAgICBBMCA9IDA7XG5cdCIKKyAgICAgICAgIAorIiAgICAgICAgICBSMC5MID0gV1tJMSsrXTtcblx0IgorIiAgICAgICAgICBSMS5MID0gUjIuTCpSNS5MIChJUyk7XG5cdCIKKyIgICAgICAgICAgQTAgKz0gUjEuTCpSMC5MIChJUykgfHwgUjAuTCA9IFdbSTErK107XG5cdCIKKyAgICAgICAgIAorIiAgICAgICAgICBSMS5MID0gUjMuTCpSNS5MIChJUyk7XG5cdCIKKyIgICAgICAgICAgQTAgKz0gUjEuTCpSMC5MIChJUykgfHwgUjAuTCA9IFdbSTErK107XG5cdCIKKyAgICAgICAgIAorIiAgICAgICAgICBSMS5MID0gUjQuTCpSNS5MIChJUyk7XG5cdCIKKyIgICAgICAgICAgQTAgKz0gUjEuTCpSMC5MIChJUykgfHwgUjAuTCA9IFdbSTErK107XG5cdCIKKyAgICAgICAgIAorIiAgICAgICAgICBSMS5MID0gUjIuTCpSMy5MIChJUyk7XG5cdCIKKyIgICAgICAgICAgQTAgLT0gUjEuTCpSMC5MIChJUykgfHwgUjAuTCA9IFdbSTErK107XG5cdCIKKworIiAgICAgICAgICBSMS5MID0gUjQuTCpSMy5MIChJUyk7XG5cdCIKKyIgICAgICAgICAgQTAgLT0gUjEuTCpSMC5MIChJUykgfHwgUjAuTCA9IFdbSTErK107XG5cdCIKKyAgICAgICAgIAorIiAgICAgICAgICBSMS5MID0gUjQuTCpSMi5MIChJUyk7XG5cdCIKKyIgICAgICAgICAgQTAgLT0gUjEuTCpSMC5MIChJUykgfHwgUjAuTCA9IFdbSTErK107XG5cdCIKKyAgICAgICAgIAorIiAgICAgICAgICBSMS5MID0gUjIuTCpSMi5MIChJUyk7XG5cdCIKKyIgICAgICAgICAgQTAgLT0gUjEuTCpSMC5MIChJUykgfHwgUjAuTCA9IFdbSTErK107XG5cdCIKKworIiAgICAgICAgICBSMS5MID0gUjMuTCpSMy5MIChJUyk7XG5cdCIKKyIgICAgICAgICAgQTAgLT0gUjEuTCpSMC5MIChJUykgfHwgUjAuTCA9IFdbSTErK107XG5cdCIKKyAgICAgICAgIAorIiAgICAgICAgICBSMS5MID0gUjQuTCpSNC5MIChJUyk7XG5cdCIKKyIgICAgICAgICAgUjAgPSAoQTAgLT0gUjEuTCpSMC5MKSAoSVMpO1xuXHQiCisKKy8qCisgICAgUmUtYXJyYW5nZSB0aGUgaWYtdGhlbiB0byBjb2RlIGVmZmljaWVudGx5IG9uIHRoZSBCbGFja2ZpbjoKKworICAgICAgaWYgKHN1bT5iZXN0X3N1bSAmJiBnYWluX3N1bTw9bWF4X2dhaW4pICAgLS0tLS0tICgxKQorCisgICAgICBpZiAoc3VtPmJlc3Rfc3VtICYmICEoZ2Fpbl9zdW0+bWF4X2dhaW4pKSAtLS0tLS0gKDIpCisKKyAgICAgIGlmIChtYXhfZ2Fpbjw9Z2Fpbl9zdW0pIHsgICAgICAgICAgICAgICAgIC0tLS0tLSAoMykKKyAgICAgIHN1bSA9IC1WRVJZX0xBUkdFMzI7CisgICAgICB9CisgICAgICBpZiAoYmVzdF9zdW08PXN1bSkKKworICAgIFRoZSBibGFja2luIGNjIGluc3RydWN0aW9ucyBhcmUgYWxsIG9mIHRoZSBmb3JtOgorCisgICAgICBjYyA9IHggPCB5IChvciBjYyA9IHggPD0geSkKKyovCisiICAgICAgICAgIFIxID0gQjBcblx0IgorIiAgICAgICAgICBSMiA9ICU1XG5cdCIKKyIgICAgICAgICAgUjMgPSAlNlxuXHQiCisiICAgICAgICAgIGNjID0gUjIgPD0gUjE7XG5cdCIgCisiICAgICAgICAgIGlmIGNjIFIwID0gUjM7XG5cdCIKKyIgICAgICAgICAgY2MgPSAlMCA8PSBSMDtcblx0IgorIiAgICAgICAgICBpZiBjYyAlMCA9IFIwO1xuXHQiCisiICAgICAgICAgIGlmIGNjICUxID0gUDE7XG5cdCIKKworInBnczI6ICAgICBQMSArPSAxO1xuXHQiCisgICAKKyAgICAgICA6ICI9JmQiIChiZXN0X3N1bSksICI9JmQiIChiZXN0X2NkYmspIAorICAgICAgIDogImEiIChnYWluX2NkYmspLCAiYSIgKEMxNiksICJhIiAoZ2Fpbl9jZGJrX3NpemUpLCAiYSIgKG1heF9nYWluKSwKKyAgICAgICAgICJiIiAoLVZFUllfTEFSR0UzMikKKyAgICAgICA6ICJSMCIsICJSMSIsICJSMiIsICJSMyIsICJSNCIsICJSNSIsICJQMCIsIAorICAgICAgICAgIlAxIiwgIkkxIiwgIkwxIiwgIkEwIiwgIkIwIgorI2lmIChfX0dOVUNfXyA9PSA0KQorICAgICAgICAgLCAiTEMxIgorI2VuZGlmCisgICAgICAgKTsKKworICByZXR1cm4gYmVzdF9jZGJrOworfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2x0cF9zc2UuaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L2x0cF9zc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWQ2ZWFhCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbHRwX3NzZS5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiBKZWFuLU1hcmMgVmFsaW4gKi8KKy8qKgorICAgQGZpbGUgbHRwX3NzZS5oCisgICBAYnJpZWYgTG9uZy1UZXJtIFByZWRpY3Rpb24gZnVuY3Rpb25zIChTU0UgdmVyc2lvbikKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSA8eG1taW50cmluLmg+CisKKyNkZWZpbmUgT1ZFUlJJREVfSU5ORVJfUFJPRAorZmxvYXQgaW5uZXJfcHJvZChjb25zdCBmbG9hdCAqYSwgY29uc3QgZmxvYXQgKmIsIGludCBsZW4pCit7CisgICBpbnQgaTsKKyAgIGZsb2F0IHJldDsKKyAgIF9fbTEyOCBzdW0gPSBfbW1fc2V0emVyb19wcygpOworICAgZm9yIChpPTA7aTwobGVuPj4yKTtpKz0yKQorICAgeworICAgICAgc3VtID0gX21tX2FkZF9wcyhzdW0sIF9tbV9tdWxfcHMoX21tX2xvYWR1X3BzKGErMCksIF9tbV9sb2FkdV9wcyhiKzApKSk7CisgICAgICBzdW0gPSBfbW1fYWRkX3BzKHN1bSwgX21tX211bF9wcyhfbW1fbG9hZHVfcHMoYSs0KSwgX21tX2xvYWR1X3BzKGIrNCkpKTsKKyAgICAgIGEgKz0gODsKKyAgICAgIGIgKz0gODsKKyAgIH0KKyAgIHN1bSA9IF9tbV9hZGRfcHMoc3VtLCBfbW1fbW92ZWhsX3BzKHN1bSwgc3VtKSk7CisgICBzdW0gPSBfbW1fYWRkX3NzKHN1bSwgX21tX3NodWZmbGVfcHMoc3VtLCBzdW0sIDB4NTUpKTsKKyAgIF9tbV9zdG9yZV9zcygmcmV0LCBzdW0pOworICAgcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBPVkVSUklERV9QSVRDSF9YQ09SUgordm9pZCBwaXRjaF94Y29ycihjb25zdCBmbG9hdCAqX3gsIGNvbnN0IGZsb2F0ICpfeSwgZmxvYXQgKmNvcnIsIGludCBsZW4sIGludCBuYl9waXRjaCwgY2hhciAqc3RhY2spCit7CisgICBpbnQgaSwgb2Zmc2V0OworICAgVkFSREVDTChfX20xMjggKngpOworICAgVkFSREVDTChfX20xMjggKnkpOworICAgaW50IE4sIEw7CisgICBOID0gbGVuPj4yOworICAgTCA9IG5iX3BpdGNoPj4yOworICAgQUxMT0MoeCwgTiwgX19tMTI4KTsKKyAgIEFMTE9DKHksIE4rTCwgX19tMTI4KTsKKyAgIGZvciAoaT0wO2k8TjtpKyspCisgICAgICB4W2ldID0gX21tX2xvYWR1X3BzKF94KyhpPDwyKSk7CisgICBmb3IgKG9mZnNldD0wO29mZnNldDw0O29mZnNldCsrKQorICAgeworICAgICAgZm9yIChpPTA7aTxOK0w7aSsrKQorICAgICAgICAgeVtpXSA9IF9tbV9sb2FkdV9wcyhfeSsoaTw8Mikrb2Zmc2V0KTsKKyAgICAgIGZvciAoaT0wO2k8TDtpKyspCisgICAgICB7CisgICAgICAgICBpbnQgajsKKyAgICAgICAgIF9fbTEyOCBzdW0sICp4eCwgKnl5OworICAgICAgICAgc3VtID0gX21tX3NldHplcm9fcHMoKTsKKyAgICAgICAgIHl5ID0geStpOworICAgICAgICAgeHggPSB4OworICAgICAgICAgZm9yIChqPTA7ajxOO2orPTIpCisgICAgICAgICB7CisgICAgICAgICAgICBzdW0gPSBfbW1fYWRkX3BzKHN1bSwgX21tX211bF9wcyh4eFswXSwgeXlbMF0pKTsKKyAgICAgICAgICAgIHN1bSA9IF9tbV9hZGRfcHMoc3VtLCBfbW1fbXVsX3BzKHh4WzFdLCB5eVsxXSkpOworICAgICAgICAgICAgeHggKz0gMjsKKyAgICAgICAgICAgIHl5ICs9IDI7CisgICAgICAgICB9CisgICAgICAgICBzdW0gPSBfbW1fYWRkX3BzKHN1bSwgX21tX21vdmVobF9wcyhzdW0sIHN1bSkpOworICAgICAgICAgc3VtID0gX21tX2FkZF9zcyhzdW0sIF9tbV9zaHVmZmxlX3BzKHN1bSwgc3VtLCAweDU1KSk7CisgICAgICAgICBfbW1fc3RvcmVfc3MoY29ycituYl9waXRjaC0xLShpPDwyKS1vZmZzZXQsIHN1bSk7CisgICAgICB9CisgICB9Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9tYXRoX2FwcHJveC5jIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbWF0aF9hcHByb3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWFmNzY2Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbWF0aF9hcHByb3guYwpAQCAtMCwwICsxLDI5MSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAKKyAgIEZpbGU6IG1hdGhfYXBwcm94LmMKKyAgIFZhcmlvdXMgbWF0aCBhcHByb3hpbWF0aW9uIGZ1bmN0aW9ucyBmb3IgU3BlZXgKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJtYXRoX2FwcHJveC5oIgorI2luY2x1ZGUgIm1pc2MuaCIKKworc3B4X2ludDE2X3Qgc3B4X2lsb2cyKHNweF91aW50MzJfdCB4KQoreworICAgaW50IHI9MDsKKyAgIGlmICh4Pj0oc3B4X2ludDMyX3QpNjU1MzYpCisgICB7CisgICAgICB4ID4+PSAxNjsKKyAgICAgIHIgKz0gMTY7CisgICB9CisgICBpZiAoeD49MjU2KQorICAgeworICAgICAgeCA+Pj0gODsKKyAgICAgIHIgKz0gODsKKyAgIH0KKyAgIGlmICh4Pj0xNikKKyAgIHsKKyAgICAgIHggPj49IDQ7CisgICAgICByICs9IDQ7CisgICB9CisgICBpZiAoeD49NCkKKyAgIHsKKyAgICAgIHggPj49IDI7CisgICAgICByICs9IDI7CisgICB9CisgICBpZiAoeD49MikKKyAgIHsKKyAgICAgIHIgKz0gMTsKKyAgIH0KKyAgIHJldHVybiByOworfQorCitzcHhfaW50MTZfdCBzcHhfaWxvZzQoc3B4X3VpbnQzMl90IHgpCit7CisgICBpbnQgcj0wOworICAgaWYgKHg+PShzcHhfaW50MzJfdCk2NTUzNikKKyAgIHsKKyAgICAgIHggPj49IDE2OworICAgICAgciArPSA4OworICAgfQorICAgaWYgKHg+PTI1NikKKyAgIHsKKyAgICAgIHggPj49IDg7CisgICAgICByICs9IDQ7CisgICB9CisgICBpZiAoeD49MTYpCisgICB7CisgICAgICB4ID4+PSA0OworICAgICAgciArPSAyOworICAgfQorICAgaWYgKHg+PTQpCisgICB7CisgICAgICByICs9IDE7CisgICB9CisgICByZXR1cm4gcjsKK30KKworI2lmZGVmIEZJWEVEX1BPSU5UCisKKy8qIHNxcnQoeCkgfj0gMC4yMjE3OCArIDEuMjkyMjcqeCAtIDAuNzcwNzAqeF4yICsgMC4yNTcyMyp4XjMgKGZvciAuMjUgPCB4IDwgMSkgKi8KKy8qI2RlZmluZSBDMCAzNjM0CisjZGVmaW5lIEMxIDIxMTczCisjZGVmaW5lIEMyIC0xMjYyNworI2RlZmluZSBDMyA0MjE1Ki8KKworLyogc3FydCh4KSB+PSAwLjIyMTc4ICsgMS4yOTIyNyp4IC0gMC43NzA3MCp4XjIgKyAwLjI1NjU5KnheMyAoZm9yIC4yNSA8IHggPCAxKSAqLworI2RlZmluZSBDMCAzNjM0CisjZGVmaW5lIEMxIDIxMTczCisjZGVmaW5lIEMyIC0xMjYyNworI2RlZmluZSBDMyA0MjA0CisKK3NweF93b3JkMTZfdCBzcHhfc3FydChzcHhfd29yZDMyX3QgeCkKK3sKKyAgIGludCBrOworICAgc3B4X3dvcmQzMl90IHJ0OworICAgayA9IHNweF9pbG9nNCh4KS02OworICAgeCA9IFZTSFIzMih4LCAoazw8MSkpOworICAgcnQgPSBBREQxNihDMCwgTVVMVDE2XzE2X1ExNCh4LCBBREQxNihDMSwgTVVMVDE2XzE2X1ExNCh4LCBBREQxNihDMiwgTVVMVDE2XzE2X1ExNCh4LCAoQzMpKSkpKSkpOworICAgcnQgPSBWU0hSMzIocnQsNy1rKTsKKyAgIHJldHVybiBydDsKK30KKworLyogbG9nKHgpIH49IC0yLjE4MTUxICsgNC4yMDU5Mip4IC0gMi44ODkzOCp4XjIgKyAwLjg2NTM1KnheMyAoZm9yIC41IDwgeCA8IDEpICovCisKKworI2RlZmluZSBBMSAxNjQ2OQorI2RlZmluZSBBMiAyMjQyCisjZGVmaW5lIEEzIDE0ODYKKworc3B4X3dvcmQxNl90IHNweF9hY29zKHNweF93b3JkMTZfdCB4KQoreworICAgaW50IHM9MDsKKyAgIHNweF93b3JkMTZfdCByZXQ7CisgICBzcHhfd29yZDE2X3Qgc3E7CisgICBpZiAoeDwwKQorICAgeworICAgICAgcz0xOworICAgICAgeCA9IE5FRzE2KHgpOworICAgfQorICAgeCA9IFNVQjE2KDE2Mzg0LHgpOworICAgCisgICB4ID0geCA+PiAxOworICAgc3EgPSBNVUxUMTZfMTZfUTEzKHgsIEFERDE2KEExLCBNVUxUMTZfMTZfUTEzKHgsIEFERDE2KEEyLCBNVUxUMTZfMTZfUTEzKHgsIChBMykpKSkpKTsKKyAgIHJldCA9IHNweF9zcXJ0KFNITDMyKEVYVEVORDMyKHNxKSwxMykpOworICAgCisgICAvKnJldCA9IHNweF9zcXJ0KDY3MTA4ODY0KigtMS42MTI5ZS0wNCArIDIuMDEwNGUrMDAqZiArIDIuNzM3M2UtMDEqZipmICsgMS44MTM2ZS0wMSpmKmYqZikpOyovCisgICBpZiAocykKKyAgICAgIHJldCA9IFNVQjE2KDI1NzM2LHJldCk7CisgICByZXR1cm4gcmV0OworfQorCisKKyNkZWZpbmUgSzEgODE5MgorI2RlZmluZSBLMiAtNDA5NgorI2RlZmluZSBLMyAzNDAKKyNkZWZpbmUgSzQgLTEwCisKK3NweF93b3JkMTZfdCBzcHhfY29zKHNweF93b3JkMTZfdCB4KQoreworICAgc3B4X3dvcmQxNl90IHgyOworCisgICBpZiAoeDwxMjg2OCkKKyAgIHsKKyAgICAgIHgyID0gTVVMVDE2XzE2X1AxMyh4LHgpOworICAgICAgcmV0dXJuIEFERDMyKEsxLCBNVUxUMTZfMTZfUDEzKHgyLCBBREQzMihLMiwgTVVMVDE2XzE2X1AxMyh4MiwgQUREMzIoSzMsIE1VTFQxNl8xNl9QMTMoSzQsIHgyKSkpKSkpOworICAgfSBlbHNlIHsKKyAgICAgIHggPSBTVUIxNigyNTczNix4KTsKKyAgICAgIHgyID0gTVVMVDE2XzE2X1AxMyh4LHgpOworICAgICAgcmV0dXJuIFNVQjMyKC1LMSwgTVVMVDE2XzE2X1AxMyh4MiwgQUREMzIoSzIsIE1VTFQxNl8xNl9QMTMoeDIsIEFERDMyKEszLCBNVUxUMTZfMTZfUDEzKEs0LCB4MikpKSkpKTsKKyAgIH0KK30KKworI2RlZmluZSBMMSAzMjc2NworI2RlZmluZSBMMiAtNzY1MQorI2RlZmluZSBMMyA4Mjc3CisjZGVmaW5lIEw0IC02MjYKKworc3RhdGljIGlubGluZSBzcHhfd29yZDE2X3QgX3NweF9jb3NfcGlfMihzcHhfd29yZDE2X3QgeCkKK3sKKyAgIHNweF93b3JkMTZfdCB4MjsKKyAgIAorICAgeDIgPSBNVUxUMTZfMTZfUDE1KHgseCk7CisgICByZXR1cm4gQUREMTYoMSxNSU4xNigzMjc2NixBREQzMihTVUIxNihMMSx4MiksIE1VTFQxNl8xNl9QMTUoeDIsIEFERDMyKEwyLCBNVUxUMTZfMTZfUDE1KHgyLCBBREQzMihMMywgTVVMVDE2XzE2X1AxNShMNCwgeDIpKSkpKSkpKTsKK30KKworc3B4X3dvcmQxNl90IHNweF9jb3Nfbm9ybShzcHhfd29yZDMyX3QgeCkKK3sKKyAgIHggPSB4JjB4MDAwMWZmZmY7CisgICBpZiAoeD5TSEwzMihFWFRFTkQzMigxKSwgMTYpKQorICAgICAgeCA9IFNVQjMyKFNITDMyKEVYVEVORDMyKDEpLCAxNykseCk7CisgICBpZiAoeCYweDAwMDA3ZmZmKQorICAgeworICAgICAgaWYgKHg8U0hMMzIoRVhURU5EMzIoMSksIDE1KSkKKyAgICAgIHsKKyAgICAgICAgIHJldHVybiBfc3B4X2Nvc19waV8yKEVYVFJBQ1QxNih4KSk7CisgICAgICB9IGVsc2UgeworICAgICAgICAgcmV0dXJuIE5FRzMyKF9zcHhfY29zX3BpXzIoRVhUUkFDVDE2KDY1NTM2LXgpKSk7CisgICAgICB9CisgICB9IGVsc2UgeworICAgICAgaWYgKHgmMHgwMDAwZmZmZikKKyAgICAgICAgIHJldHVybiAwOworICAgICAgZWxzZSBpZiAoeCYweDAwMDFmZmZmKQorICAgICAgICAgcmV0dXJuIC0zMjc2NzsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiAzMjc2NzsKKyAgIH0KK30KKworLyoKKyBLMCA9IDEKKyBLMSA9IGxvZygyKQorIEsyID0gMy00KmxvZygyKQorIEszID0gMypsb2coMikgLSAyCisqLworI2RlZmluZSBEMCAxNjM4NAorI2RlZmluZSBEMSAxMTM1NgorI2RlZmluZSBEMiAzNzI2CisjZGVmaW5lIEQzIDEzMDEKKy8qIElucHV0IGluIFExMSBmb3JtYXQsIG91dHB1dCBpbiBRMTYgKi8KK3N0YXRpYyBzcHhfd29yZDMyX3Qgc3B4X2V4cDIoc3B4X3dvcmQxNl90IHgpCit7CisgICBpbnQgaW50ZWdlcjsKKyAgIHNweF93b3JkMTZfdCBmcmFjOworICAgaW50ZWdlciA9IFNIUjE2KHgsMTEpOworICAgaWYgKGludGVnZXI+MTQpCisgICAgICByZXR1cm4gMHg3ZmZmZmZmZjsKKyAgIGVsc2UgaWYgKGludGVnZXIgPCAtMTUpCisgICAgICByZXR1cm4gMDsKKyAgIGZyYWMgPSBTSEwxNih4LVNITDE2KGludGVnZXIsMTEpLDMpOworICAgZnJhYyA9IEFERDE2KEQwLCBNVUxUMTZfMTZfUTE0KGZyYWMsIEFERDE2KEQxLCBNVUxUMTZfMTZfUTE0KGZyYWMsIEFERDE2KEQyICwgTVVMVDE2XzE2X1ExNChEMyxmcmFjKSkpKSkpOworICAgcmV0dXJuIFZTSFIzMihFWFRFTkQzMihmcmFjKSwgLWludGVnZXItMik7Cit9CisKKy8qIElucHV0IGluIFExMSBmb3JtYXQsIG91dHB1dCBpbiBRMTYgKi8KK3NweF93b3JkMzJfdCBzcHhfZXhwKHNweF93b3JkMTZfdCB4KQoreworICAgaWYgKHg+MjEyOTApCisgICAgICByZXR1cm4gMHg3ZmZmZmZmZjsKKyAgIGVsc2UgaWYgKHg8LTIxMjkwKQorICAgICAgcmV0dXJuIDA7CisgICBlbHNlCisgICAgICByZXR1cm4gc3B4X2V4cDIoTVVMVDE2XzE2X1AxNCgyMzYzNyx4KSk7Cit9CisjZGVmaW5lIE0xIDMyNzY3CisjZGVmaW5lIE0yIC0yMQorI2RlZmluZSBNMyAtMTE5NDMKKyNkZWZpbmUgTTQgNDkzNgorCitzdGF0aWMgaW5saW5lIHNweF93b3JkMTZfdCBzcHhfYXRhbjAxKHNweF93b3JkMTZfdCB4KQoreworICAgcmV0dXJuIE1VTFQxNl8xNl9QMTUoeCwgQUREMzIoTTEsIE1VTFQxNl8xNl9QMTUoeCwgQUREMzIoTTIsIE1VTFQxNl8xNl9QMTUoeCwgQUREMzIoTTMsIE1VTFQxNl8xNl9QMTUoTTQsIHgpKSkpKSkpOworfQorCisvKiBJbnB1dCBpbiBRMTUsIG91dHB1dCBpbiBRMTQgKi8KK3NweF93b3JkMTZfdCBzcHhfYXRhbihzcHhfd29yZDMyX3QgeCkKK3sKKyAgIGlmICh4IDw9IDMyNzY3KQorICAgeworICAgICAgcmV0dXJuIFNIUjE2KHNweF9hdGFuMDEoeCksMSk7CisgICB9IGVsc2UgeworICAgICAgaW50IGUgPSBzcHhfaWxvZzIoeCk7CisgICAgICBpZiAoZT49MjkpCisgICAgICAgICByZXR1cm4gMjU3MzY7CisgICAgICB4ID0gRElWMzJfMTYoU0hMMzIoRVhURU5EMzIoMzI3NjcpLDI5LWUpLCBFWFRSQUNUMTYoU0hSMzIoeCwgZS0xNCkpKTsKKyAgICAgIHJldHVybiBTVUIxNigyNTczNiwgU0hSMTYoc3B4X2F0YW4wMSh4KSwxKSk7CisgICB9Cit9CisjZWxzZQorCisjaWZuZGVmIE1fUEkKKyNkZWZpbmUgTV9QSSAgICAgICAgICAgMy4xNDE1OTI2NTM1ODk3OTMyMzg0NiAgLyogcGkgKi8KKyNlbmRpZgorCisjZGVmaW5lIEMxIDAuOTk5OTkzMjk0NmYKKyNkZWZpbmUgQzIgLTAuNDk5OTEyNDM3NmYKKyNkZWZpbmUgQzMgMC4wNDE0ODc3NDcyZgorI2RlZmluZSBDNCAtMC4wMDEyNzEyMDk1ZgorCisKKyNkZWZpbmUgU1BYX1BJXzIgMS41NzA3OTYzMjY4CitzcHhfd29yZDE2X3Qgc3B4X2NvcyhzcHhfd29yZDE2X3QgeCkKK3sKKyAgIGlmICh4PFNQWF9QSV8yKQorICAgeworICAgICAgeCAqPSB4OworICAgICAgcmV0dXJuIEMxICsgeCooQzIreCooQzMrQzQqeCkpOworICAgfSBlbHNlIHsKKyAgICAgIHggPSBNX1BJLXg7CisgICAgICB4ICo9IHg7CisgICAgICByZXR1cm4gTkVHMTYoQzEgKyB4KihDMit4KihDMytDNCp4KSkpOworICAgfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L21hdGhfYXBwcm94LmggYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9tYXRoX2FwcHJveC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5Y2ZkYTYKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9tYXRoX2FwcHJveC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiBKZWFuLU1hcmMgVmFsaW4gKi8KKy8qKgorICAgQGZpbGUgbWF0aF9hcHByb3guaAorICAgQGJyaWVmIFZhcmlvdXMgbWF0aCBhcHByb3hpbWF0aW9uIGZ1bmN0aW9ucyBmb3IgU3BlZXgKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIE1BVEhfQVBQUk9YX0gKKyNkZWZpbmUgTUFUSF9BUFBST1hfSAorCisjaW5jbHVkZSAibWlzYy5oIgorCitzcHhfd29yZDE2X3Qgc3B4X2NvcyhzcHhfd29yZDE2X3QgeCk7CitzcHhfaW50MTZfdCBzcHhfaWxvZzIoc3B4X3VpbnQzMl90IHgpOworc3B4X2ludDE2X3Qgc3B4X2lsb2c0KHNweF91aW50MzJfdCB4KTsKKyNpZmRlZiBGSVhFRF9QT0lOVAorc3B4X3dvcmQxNl90IHNweF9zcXJ0KHNweF93b3JkMzJfdCB4KTsKK3NweF93b3JkMTZfdCBzcHhfYWNvcyhzcHhfd29yZDE2X3QgeCk7CitzcHhfd29yZDMyX3Qgc3B4X2V4cChzcHhfd29yZDE2X3QgeCk7CitzcHhfd29yZDE2X3Qgc3B4X2Nvc19ub3JtKHNweF93b3JkMzJfdCB4KTsKKworLyogSW5wdXQgaW4gUTE1LCBvdXRwdXQgaW4gUTE0ICovCitzcHhfd29yZDE2X3Qgc3B4X2F0YW4oc3B4X3dvcmQzMl90IHgpOworCisjZWxzZQorCisjZGVmaW5lIHNweF9zcXJ0IHNxcnQKKyNkZWZpbmUgc3B4X2Fjb3MgYWNvcworI2RlZmluZSBzcHhfZXhwIGV4cAorI2RlZmluZSBzcHhfY29zX25vcm0oeCkgKGNvcygoLjVmKk1fUEkpKih4KSkpCisjZGVmaW5lIHNweF9hdGFuIGF0YW4KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbWRmLmMgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9tZGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzY4ZjkxCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbWRmLmMKQEAgLTAsMCArMSwxMTc2IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiBKZWFuLU1hcmMgVmFsaW4KKworICAgRmlsZTogbWRmLmMKKyAgIEVjaG8gY2FuY2VsbGVyIGJhc2VkIG9uIHRoZSBNREYgYWxnb3JpdGhtIChzZWUgYmVsb3cpCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICAgbWV0OgorCisgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAgIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAgIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAgIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICAgQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qCisgICBUaGUgZWNobyBjYW5jZWxsZXIgaXMgYmFzZWQgb24gdGhlIE1ERiBhbGdvcml0aG0gZGVzY3JpYmVkIGluOgorCisgICBKLiBTLiBTb28sIEsuIEsuIFBhbmcgTXVsdGlkZWxheSBibG9jayBmcmVxdWVuY3kgYWRhcHRpdmUgZmlsdGVyLCAKKyAgIElFRUUgVHJhbnMuIEFjb3VzdC4gU3BlZWNoIFNpZ25hbCBQcm9jZXNzLiwgVm9sLiBBU1NQLTM4LCBOby4gMiwgCisgICBGZWJydWFyeSAxOTkwLgorICAgCisgICBXZSB1c2UgdGhlIEFsdGVybmF0aXZlbHkgVXBkYXRlZCBNREYgKEFVTURGKSB2YXJpYW50LiBSb2J1c3RuZXNzIHRvIAorICAgZG91YmxlLXRhbGsgaXMgYWNoaWV2ZWQgdXNpbmcgYSB2YXJpYWJsZSBsZWFybmluZyByYXRlIGFzIGRlc2NyaWJlZCBpbjoKKyAgIAorICAgVmFsaW4sIEouLU0uLCBPbiBBZGp1c3RpbmcgdGhlIExlYXJuaW5nIFJhdGUgaW4gRnJlcXVlbmN5IERvbWFpbiBFY2hvIAorICAgQ2FuY2VsbGF0aW9uIFdpdGggRG91YmxlLVRhbGsuIFRvIGFwcGVhciBpbiBJRUVFIFRyYW5zYWN0aW9ucyBvbiBBdWRpbywKKyAgIFNwZWVjaCBhbmQgTGFuZ3VhZ2UgUHJvY2Vzc2luZywgMjAwNi4KKyAgIGh0dHA6Ly9wZW9wbGUueGlwaC5vcmcvfmptL3BhcGVycy92YWxpbl90YXNscDIwMDYucGRmCisgICAKKyAgIFRoZXJlIGlzIG5vIGV4cGxpY2l0IGRvdWJsZS10YWxrIGRldGVjdGlvbiwgYnV0IGEgY29udGludW91cyB2YXJpYXRpb24KKyAgIGluIHRoZSBsZWFybmluZyByYXRlIGJhc2VkIG9uIHJlc2lkdWFsIGVjaG8sIGRvdWJsZS10YWxrIGFuZCBiYWNrZ3JvdW5kCisgICBub2lzZS4KKyAgIAorICAgQWJvdXQgdGhlIGZpeGVkLXBvaW50IHZlcnNpb246CisgICBBbGwgdGhlIHNpZ25hbHMgYXJlIHJlcHJlc2VudGVkIHdpdGggMTYtYml0IHdvcmRzLiBUaGUgZmlsdGVyIHdlaWdodHMgCisgICBhcmUgcmVwcmVzZW50ZWQgd2l0aCAzMi1iaXQgd29yZHMsIGJ1dCBvbmx5IHRoZSB0b3AgMTYgYml0cyBhcmUgdXNlZAorICAgaW4gbW9zdCBjYXNlcy4gVGhlIGxvd2VyIDE2IGJpdHMgYXJlIGNvbXBsZXRlbHkgdW5yZWxpYWJsZSAoZHVlIHRvIHRoZQorICAgZmFjdCB0aGF0IHRoZSB1cGRhdGUgaXMgZG9uZSBvbmx5IG9uIHRoZSB0b3AgYml0cyksIGJ1dCBoZWxwIGluIHRoZQorICAgYWRhcHRhdGlvbiAtLSBwcm9iYWJseSBieSByZW1vdmluZyBhICJ0aHJlc2hvbGQgZWZmZWN0IiBkdWUgdG8KKyAgIHF1YW50aXphdGlvbiAocm91bmRpbmcgZ29pbmcgdG8gemVybykgd2hlbiB0aGUgZ3JhZGllbnQgaXMgc21hbGwuCisgICAKKyAgIEFub3RoZXIga2x1ZGdlIHRoYXQgc2VlbXMgdG8gd29yayBnb29kOiB3aGVuIHBlcmZvcm1pbmcgdGhlIHdlaWdodAorICAgdXBkYXRlLCB3ZSBvbmx5IG1vdmUgaGFsZiB0aGUgd2F5IHRvd2FyZCB0aGUgImdvYWwiIHRoaXMgc2VlbXMgdG8KKyAgIHJlZHVjZSB0aGUgZWZmZWN0IG9mIHF1YW50aXphdGlvbiBub2lzZSBpbiB0aGUgdXBkYXRlIHBoYXNlLiBUaGlzCisgICBjYW4gYmUgc2VlbiBhcyBhcHBseWluZyBhIGdyYWRpZW50IGRlc2NlbnQgb24gYSAic29mdCBjb25zdHJhaW50IgorICAgaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkIGNvbnN0cmFpbnQuCisgICAKKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIm1pc2MuaCIKKyNpbmNsdWRlICJzcGVleC9zcGVleF9lY2hvLmgiCisjaW5jbHVkZSAiZmZ0d3JhcC5oIgorI2luY2x1ZGUgInBzZXVkb2Zsb2F0LmgiCisjaW5jbHVkZSAibWF0aF9hcHByb3guaCIKKworI2lmbmRlZiBNX1BJCisjZGVmaW5lIE1fUEkgMy4xNDE1OTI2NTM1ODk3OTMyMzg0NgorI2VuZGlmCisKKyNpZmRlZiBGSVhFRF9QT0lOVAorI2RlZmluZSBXRUlHSFRfU0hJRlQgMTEKKyNkZWZpbmUgTk9STUFMSVpFX1NDQUxFRE9XTiA1CisjZGVmaW5lIE5PUk1BTElaRV9TQ0FMRVVQIDMKKyNlbHNlCisjZGVmaW5lIFdFSUdIVF9TSElGVCAwCisjZW5kaWYKKworLyogSWYgZW5hYmxlZCwgdGhlIEFFQyB3aWxsIHVzZSBhIGZvcmVncm91bmQgZmlsdGVyIGFuZCBhIGJhY2tncm91bmQgZmlsdGVyIHRvIGJlIG1vcmUgcm9idXN0IHRvIGRvdWJsZS10YWxrCisgICBhbmQgZGlmZmljdWx0IHNpZ25hbHMgaW4gZ2VuZXJhbC4gVGhlIGNvc3QgaXMgYW4gZXh0cmEgRkZUIGFuZCBhIG1hdHJpeC12ZWN0b3IgbXVsdGlwbHkgKi8KKyNkZWZpbmUgVFdPX1BBVEgKKworI2lmZGVmIEZJWEVEX1BPSU5UCitzdGF0aWMgY29uc3Qgc3B4X2Zsb2F0X3QgTUlOX0xFQUsgPSB7MjA5NzIsIC0yMn07CisKKy8qIENvbnN0YW50cyBmb3IgdGhlIHR3by1wYXRoIGZpbHRlciAqLworc3RhdGljIGNvbnN0IHNweF9mbG9hdF90IFZBUjFfU01PT1RIID0gezIzNTkzLCAtMTZ9Oworc3RhdGljIGNvbnN0IHNweF9mbG9hdF90IFZBUjJfU01PT1RIID0gezIzNjc1LCAtMTV9Oworc3RhdGljIGNvbnN0IHNweF9mbG9hdF90IFZBUjFfVVBEQVRFID0gezE2Mzg0LCAtMTV9Oworc3RhdGljIGNvbnN0IHNweF9mbG9hdF90IFZBUjJfVVBEQVRFID0gezE2Mzg0LCAtMTZ9Oworc3RhdGljIGNvbnN0IHNweF9mbG9hdF90IFZBUl9CQUNLVFJBQ0sgPSB7MTYzODQsIC0xMn07CisjZGVmaW5lIFRPUDE2KHgpICgoeCk+PjE2KQorCisjZWxzZQorCitzdGF0aWMgY29uc3Qgc3B4X2Zsb2F0X3QgTUlOX0xFQUsgPSAuMDA1ZjsKKworLyogQ29uc3RhbnRzIGZvciB0aGUgdHdvLXBhdGggZmlsdGVyICovCitzdGF0aWMgY29uc3Qgc3B4X2Zsb2F0X3QgVkFSMV9TTU9PVEggPSAuMzZmOworc3RhdGljIGNvbnN0IHNweF9mbG9hdF90IFZBUjJfU01PT1RIID0gLjcyMjVmOworc3RhdGljIGNvbnN0IHNweF9mbG9hdF90IFZBUjFfVVBEQVRFID0gLjVmOworc3RhdGljIGNvbnN0IHNweF9mbG9hdF90IFZBUjJfVVBEQVRFID0gLjI1ZjsKK3N0YXRpYyBjb25zdCBzcHhfZmxvYXRfdCBWQVJfQkFDS1RSQUNLID0gNC5mOworI2RlZmluZSBUT1AxNih4KSAoeCkKKyNlbmRpZgorCisKKyNkZWZpbmUgUExBWUJBQ0tfREVMQVkgMgorCit2b2lkIHNwZWV4X2VjaG9fZ2V0X3Jlc2lkdWFsKFNwZWV4RWNob1N0YXRlICpzdCwgc3B4X3dvcmQzMl90ICpZb3V0LCBpbnQgbGVuKTsKKworCisvKiogU3BlZXggZWNobyBjYW5jZWxsYXRpb24gc3RhdGUuICovCitzdHJ1Y3QgU3BlZXhFY2hvU3RhdGVfIHsKKyAgIGludCBmcmFtZV9zaXplOyAgICAgICAgICAgLyoqPCBOdW1iZXIgb2Ygc2FtcGxlcyBwcm9jZXNzZWQgZWFjaCB0aW1lICovCisgICBpbnQgd2luZG93X3NpemU7CisgICBpbnQgTTsKKyAgIGludCBjYW5jZWxfY291bnQ7CisgICBpbnQgYWRhcHRlZDsKKyAgIGludCBzYXR1cmF0ZWQ7CisgICBpbnQgc2NyZXdlZF91cDsKKyAgIHNweF9pbnQzMl90IHNhbXBsaW5nX3JhdGU7CisgICBzcHhfd29yZDE2X3Qgc3BlY19hdmVyYWdlOworICAgc3B4X3dvcmQxNl90IGJldGEwOworICAgc3B4X3dvcmQxNl90IGJldGFfbWF4OworICAgc3B4X3dvcmQzMl90IHN1bV9hZGFwdDsKKyAgIHNweF93b3JkMTZfdCBsZWFrX2VzdGltYXRlOworICAgCisgICBzcHhfd29yZDE2X3QgKmU7ICAgICAgLyogc2NyYXRjaCAqLworICAgc3B4X3dvcmQxNl90ICp4OyAgICAgIC8qIEZhci1lbmQgaW5wdXQgYnVmZmVyICgyTikgKi8KKyAgIHNweF93b3JkMTZfdCAqWDsgICAgICAvKiBGYXItZW5kIGJ1ZmZlciAoTSsxIGZyYW1lcykgaW4gZnJlcXVlbmN5IGRvbWFpbiAqLworICAgc3B4X3dvcmQxNl90ICppbnB1dDsgIC8qIHNjcmF0Y2ggKi8KKyAgIHNweF93b3JkMTZfdCAqeTsgICAgICAvKiBzY3JhdGNoICovCisgICBzcHhfd29yZDE2X3QgKmxhc3RfeTsKKyAgIHNweF93b3JkMTZfdCAqWTsgICAgICAvKiBzY3JhdGNoICovCisgICBzcHhfd29yZDE2X3QgKkU7CisgICBzcHhfd29yZDMyX3QgKlBISTsgICAgLyogc2NyYXRjaCAqLworICAgc3B4X3dvcmQzMl90ICpXOyAgICAgIC8qIChCYWNrZ3JvdW5kKSBmaWx0ZXIgd2VpZ2h0cyAqLworI2lmZGVmIFRXT19QQVRICisgICBzcHhfd29yZDE2X3QgKmZvcmVncm91bmQ7IC8qIEZvcmVncm91bmQgZmlsdGVyIHdlaWdodHMgKi8KKyAgIHNweF93b3JkMzJfdCAgRGF2ZzE7ICAvKiAxc3QgcmVjdXJzaXZlIGF2ZXJhZ2Ugb2YgdGhlIHJlc2lkdWFsIHBvd2VyIGRpZmZlcmVuY2UgKi8KKyAgIHNweF93b3JkMzJfdCAgRGF2ZzI7ICAvKiAybmQgcmVjdXJzaXZlIGF2ZXJhZ2Ugb2YgdGhlIHJlc2lkdWFsIHBvd2VyIGRpZmZlcmVuY2UgKi8KKyAgIHNweF9mbG9hdF90ICAgRHZhcjE7ICAvKiBFc3RpbWF0ZWQgdmFyaWFuY2Ugb2YgMXN0IGVzdGltYXRvciAqLworICAgc3B4X2Zsb2F0X3QgICBEdmFyMjsgIC8qIEVzdGltYXRlZCB2YXJpYW5jZSBvZiAybmQgZXN0aW1hdG9yICovCisjZW5kaWYKKyAgIHNweF93b3JkMzJfdCAqcG93ZXI7ICAvKiBQb3dlciBvZiB0aGUgZmFyLWVuZCBzaWduYWwgKi8KKyAgIHNweF9mbG9hdF90ICAqcG93ZXJfMTsvKiBJbnZlcnNlIHBvd2VyIG9mIGZhci1lbmQgKi8KKyAgIHNweF93b3JkMTZfdCAqd3RtcDsgICAvKiBzY3JhdGNoICovCisjaWZkZWYgRklYRURfUE9JTlQKKyAgIHNweF93b3JkMTZfdCAqd3RtcDI7ICAvKiBzY3JhdGNoICovCisjZW5kaWYKKyAgIHNweF93b3JkMzJfdCAqUmY7ICAgICAvKiBzY3JhdGNoICovCisgICBzcHhfd29yZDMyX3QgKllmOyAgICAgLyogc2NyYXRjaCAqLworICAgc3B4X3dvcmQzMl90ICpYZjsgICAgIC8qIHNjcmF0Y2ggKi8KKyAgIHNweF93b3JkMzJfdCAqRWg7CisgICBzcHhfd29yZDMyX3QgKlloOworICAgc3B4X2Zsb2F0X3QgICBQZXk7CisgICBzcHhfZmxvYXRfdCAgIFB5eTsKKyAgIHNweF93b3JkMTZfdCAqd2luZG93OworICAgc3B4X3dvcmQxNl90ICpwcm9wOworICAgdm9pZCAqZmZ0X3RhYmxlOworICAgc3B4X3dvcmQxNl90IG1lbVgsIG1lbUQsIG1lbUU7CisgICBzcHhfd29yZDE2X3QgcHJlZW1waDsKKyAgIHNweF93b3JkMTZfdCBub3RjaF9yYWRpdXM7CisgICBzcHhfbWVtX3Qgbm90Y2hfbWVtWzJdOworCisgICAvKiBOT1RFOiBJZiB5b3Ugb25seSB1c2Ugc3BlZXhfZWNob19jYW5jZWwoKSBhbmQgd2FudCB0byBzYXZlIHNvbWUgbWVtb3J5LCByZW1vdmUgdGhpcyAqLworICAgc3B4X2ludDE2X3QgKnBsYXlfYnVmOworICAgaW50IHBsYXlfYnVmX3BvczsKKyAgIGludCBwbGF5X2J1Zl9zdGFydGVkOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGZpbHRlcl9kY19ub3RjaDE2KGNvbnN0IHNweF9pbnQxNl90ICppbiwgc3B4X3dvcmQxNl90IHJhZGl1cywgc3B4X3dvcmQxNl90ICpvdXQsIGludCBsZW4sIHNweF9tZW1fdCAqbWVtKQoreworICAgaW50IGk7CisgICBzcHhfd29yZDE2X3QgZGVuMjsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgZGVuMiA9IE1VTFQxNl8xNl9RMTUocmFkaXVzLHJhZGl1cykgKyBNVUxUMTZfMTZfUTE1KFFDT05TVDE2KC43LDE1KSxNVUxUMTZfMTZfUTE1KDMyNzY3LXJhZGl1cywzMjc2Ny1yYWRpdXMpKTsKKyNlbHNlCisgICBkZW4yID0gcmFkaXVzKnJhZGl1cyArIC43KigxLXJhZGl1cykqKDEtcmFkaXVzKTsKKyNlbmRpZiAgIAorICAgLypwcmludGYgKCIlZCAlZCAlZCAlZCAlZCAlZFxuIiwgbnVtWzBdLCBudW1bMV0sIG51bVsyXSwgZGVuWzBdLCBkZW5bMV0sIGRlblsyXSk7Ki8KKyAgIGZvciAoaT0wO2k8bGVuO2krKykKKyAgIHsKKyAgICAgIHNweF93b3JkMTZfdCB2aW4gPSBpbltpXTsKKyAgICAgIHNweF93b3JkMzJfdCB2b3V0ID0gbWVtWzBdICsgU0hMMzIoRVhURU5EMzIodmluKSwxNSk7CisjaWZkZWYgRklYRURfUE9JTlQKKyAgICAgIG1lbVswXSA9IG1lbVsxXSArIFNITDMyKFNITDMyKC1FWFRFTkQzMih2aW4pLDE1KSArIE1VTFQxNl8zMl9RMTUocmFkaXVzLHZvdXQpLDEpOworI2Vsc2UKKyAgICAgIG1lbVswXSA9IG1lbVsxXSArIDIqKC12aW4gKyByYWRpdXMqdm91dCk7CisjZW5kaWYKKyAgICAgIG1lbVsxXSA9IFNITDMyKEVYVEVORDMyKHZpbiksMTUpIC0gTVVMVDE2XzMyX1ExNShkZW4yLHZvdXQpOworICAgICAgb3V0W2ldID0gU0FUVVJBVEUzMihQU0hSMzIoTVVMVDE2XzMyX1ExNShyYWRpdXMsdm91dCksMTUpLDMyNzY3KTsKKyAgIH0KK30KKworLyogVGhpcyBpbm5lciBwcm9kdWN0IGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIHRoZSBjb2RlYyB2ZXJzaW9uIGJlY2F1c2Ugb2YgZml4ZWQtcG9pbnQgKi8KK3N0YXRpYyBpbmxpbmUgc3B4X3dvcmQzMl90IG1kZl9pbm5lcl9wcm9kKGNvbnN0IHNweF93b3JkMTZfdCAqeCwgY29uc3Qgc3B4X3dvcmQxNl90ICp5LCBpbnQgbGVuKQoreworICAgc3B4X3dvcmQzMl90IHN1bT0wOworICAgbGVuID4+PSAxOworICAgd2hpbGUobGVuLS0pCisgICB7CisgICAgICBzcHhfd29yZDMyX3QgcGFydD0wOworICAgICAgcGFydCA9IE1BQzE2XzE2KHBhcnQsKngrKywqeSsrKTsKKyAgICAgIHBhcnQgPSBNQUMxNl8xNihwYXJ0LCp4KyssKnkrKyk7CisgICAgICAvKiBISU5UOiBJZiB5b3UgaGFkIGEgNDAtYml0IGFjY3VtdWxhdG9yLCB5b3UgY291bGQgc2hpZnQgb25seSBhdCB0aGUgZW5kICovCisgICAgICBzdW0gPSBBREQzMihzdW0sU0hSMzIocGFydCw2KSk7CisgICB9CisgICByZXR1cm4gc3VtOworfQorCisvKiogQ29tcHV0ZSBwb3dlciBzcGVjdHJ1bSBvZiBhIGhhbGYtY29tcGxleCAocGFja2VkKSB2ZWN0b3IgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3dlcl9zcGVjdHJ1bShjb25zdCBzcHhfd29yZDE2X3QgKlgsIHNweF93b3JkMzJfdCAqcHMsIGludCBOKQoreworICAgaW50IGksIGo7CisgICBwc1swXT1NVUxUMTZfMTYoWFswXSxYWzBdKTsKKyAgIGZvciAoaT0xLGo9MTtpPE4tMTtpKz0yLGorKykKKyAgIHsKKyAgICAgIHBzW2pdID0gIE1VTFQxNl8xNihYW2ldLFhbaV0pICsgTVVMVDE2XzE2KFhbaSsxXSxYW2krMV0pOworICAgfQorICAgcHNbal09TVVMVDE2XzE2KFhbaV0sWFtpXSk7Cit9CisKKy8qKiBDb21wdXRlIGNyb3NzLXBvd2VyIHNwZWN0cnVtIG9mIGEgaGFsZi1jb21wbGV4IChwYWNrZWQpIHZlY3RvcnMgYW5kIGFkZCB0byBhY2MgKi8KKyNpZmRlZiBGSVhFRF9QT0lOVAorc3RhdGljIGlubGluZSB2b2lkIHNwZWN0cmFsX211bF9hY2N1bShjb25zdCBzcHhfd29yZDE2X3QgKlgsIGNvbnN0IHNweF93b3JkMzJfdCAqWSwgc3B4X3dvcmQxNl90ICphY2MsIGludCBOLCBpbnQgTSkKK3sKKyAgIGludCBpLGo7CisgICBzcHhfd29yZDMyX3QgdG1wMT0wLHRtcDI9MDsKKyAgIGZvciAoaj0wO2o8TTtqKyspCisgICB7CisgICAgICB0bXAxID0gTUFDMTZfMTYodG1wMSwgWFtqKk5dLFRPUDE2KFlbaipOXSkpOworICAgfQorICAgYWNjWzBdID0gUFNIUjMyKHRtcDEsV0VJR0hUX1NISUZUKTsKKyAgIGZvciAoaT0xO2k8Ti0xO2krPTIpCisgICB7CisgICAgICB0bXAxID0gdG1wMiA9IDA7CisgICAgICBmb3IgKGo9MDtqPE07aisrKQorICAgICAgeworICAgICAgICAgdG1wMSA9IFNVQjMyKE1BQzE2XzE2KHRtcDEsIFhbaipOK2ldLFRPUDE2KFlbaipOK2ldKSksIE1VTFQxNl8xNihYW2oqTitpKzFdLFRPUDE2KFlbaipOK2krMV0pKSk7CisgICAgICAgICB0bXAyID0gTUFDMTZfMTYoTUFDMTZfMTYodG1wMiwgWFtqKk4raSsxXSxUT1AxNihZW2oqTitpXSkpLCBYW2oqTitpXSwgVE9QMTYoWVtqKk4raSsxXSkpOworICAgICAgfQorICAgICAgYWNjW2ldID0gUFNIUjMyKHRtcDEsV0VJR0hUX1NISUZUKTsKKyAgICAgIGFjY1tpKzFdID0gUFNIUjMyKHRtcDIsV0VJR0hUX1NISUZUKTsKKyAgIH0KKyAgIHRtcDEgPSB0bXAyID0gMDsKKyAgIGZvciAoaj0wO2o8TTtqKyspCisgICB7CisgICAgICB0bXAxID0gTUFDMTZfMTYodG1wMSwgWFsoaisxKSpOLTFdLFRPUDE2KFlbKGorMSkqTi0xXSkpOworICAgfQorICAgYWNjW04tMV0gPSBQU0hSMzIodG1wMSxXRUlHSFRfU0hJRlQpOworfQorc3RhdGljIGlubGluZSB2b2lkIHNwZWN0cmFsX211bF9hY2N1bTE2KGNvbnN0IHNweF93b3JkMTZfdCAqWCwgY29uc3Qgc3B4X3dvcmQxNl90ICpZLCBzcHhfd29yZDE2X3QgKmFjYywgaW50IE4sIGludCBNKQoreworICAgaW50IGksajsKKyAgIHNweF93b3JkMzJfdCB0bXAxPTAsdG1wMj0wOworICAgZm9yIChqPTA7ajxNO2orKykKKyAgIHsKKyAgICAgIHRtcDEgPSBNQUMxNl8xNih0bXAxLCBYW2oqTl0sWVtqKk5dKTsKKyAgIH0KKyAgIGFjY1swXSA9IFBTSFIzMih0bXAxLFdFSUdIVF9TSElGVCk7CisgICBmb3IgKGk9MTtpPE4tMTtpKz0yKQorICAgeworICAgICAgdG1wMSA9IHRtcDIgPSAwOworICAgICAgZm9yIChqPTA7ajxNO2orKykKKyAgICAgIHsKKyAgICAgICAgIHRtcDEgPSBTVUIzMihNQUMxNl8xNih0bXAxLCBYW2oqTitpXSxZW2oqTitpXSksIE1VTFQxNl8xNihYW2oqTitpKzFdLFlbaipOK2krMV0pKTsKKyAgICAgICAgIHRtcDIgPSBNQUMxNl8xNihNQUMxNl8xNih0bXAyLCBYW2oqTitpKzFdLFlbaipOK2ldKSwgWFtqKk4raV0sIFlbaipOK2krMV0pOworICAgICAgfQorICAgICAgYWNjW2ldID0gUFNIUjMyKHRtcDEsV0VJR0hUX1NISUZUKTsKKyAgICAgIGFjY1tpKzFdID0gUFNIUjMyKHRtcDIsV0VJR0hUX1NISUZUKTsKKyAgIH0KKyAgIHRtcDEgPSB0bXAyID0gMDsKKyAgIGZvciAoaj0wO2o8TTtqKyspCisgICB7CisgICAgICB0bXAxID0gTUFDMTZfMTYodG1wMSwgWFsoaisxKSpOLTFdLFlbKGorMSkqTi0xXSk7CisgICB9CisgICBhY2NbTi0xXSA9IFBTSFIzMih0bXAxLFdFSUdIVF9TSElGVCk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc3BlY3RyYWxfbXVsX2FjY3VtKGNvbnN0IHNweF93b3JkMTZfdCAqWCwgY29uc3Qgc3B4X3dvcmQzMl90ICpZLCBzcHhfd29yZDE2X3QgKmFjYywgaW50IE4sIGludCBNKQoreworICAgaW50IGksajsKKyAgIGZvciAoaT0wO2k8TjtpKyspCisgICAgICBhY2NbaV0gPSAwOworICAgZm9yIChqPTA7ajxNO2orKykKKyAgIHsKKyAgICAgIGFjY1swXSArPSBYWzBdKllbMF07CisgICAgICBmb3IgKGk9MTtpPE4tMTtpKz0yKQorICAgICAgeworICAgICAgICAgYWNjW2ldICs9IChYW2ldKllbaV0gLSBYW2krMV0qWVtpKzFdKTsKKyAgICAgICAgIGFjY1tpKzFdICs9IChYW2krMV0qWVtpXSArIFhbaV0qWVtpKzFdKTsKKyAgICAgIH0KKyAgICAgIGFjY1tpXSArPSBYW2ldKllbaV07CisgICAgICBYICs9IE47CisgICAgICBZICs9IE47CisgICB9Cit9CisjZGVmaW5lIHNwZWN0cmFsX211bF9hY2N1bTE2IHNwZWN0cmFsX211bF9hY2N1bQorI2VuZGlmCisKKy8qKiBDb21wdXRlIHdlaWdodGVkIGNyb3NzLXBvd2VyIHNwZWN0cnVtIG9mIGEgaGFsZi1jb21wbGV4IChwYWNrZWQpIHZlY3RvciB3aXRoIGNvbmp1Z2F0ZSAqLworc3RhdGljIGlubGluZSB2b2lkIHdlaWdodGVkX3NwZWN0cmFsX211bF9jb25qKGNvbnN0IHNweF9mbG9hdF90ICp3LCBjb25zdCBzcHhfZmxvYXRfdCBwLCBjb25zdCBzcHhfd29yZDE2X3QgKlgsIGNvbnN0IHNweF93b3JkMTZfdCAqWSwgc3B4X3dvcmQzMl90ICpwcm9kLCBpbnQgTikKK3sKKyAgIGludCBpLCBqOworICAgc3B4X2Zsb2F0X3QgVzsKKyAgIFcgPSBGTE9BVF9BTVVMVChwLCB3WzBdKTsKKyAgIHByb2RbMF0gPSBGTE9BVF9NVUwzMihXLE1VTFQxNl8xNihYWzBdLFlbMF0pKTsKKyAgIGZvciAoaT0xLGo9MTtpPE4tMTtpKz0yLGorKykKKyAgIHsKKyAgICAgIFcgPSBGTE9BVF9BTVVMVChwLCB3W2pdKTsKKyAgICAgIHByb2RbaV0gPSBGTE9BVF9NVUwzMihXLE1BQzE2XzE2KE1VTFQxNl8xNihYW2ldLFlbaV0pLCBYW2krMV0sWVtpKzFdKSk7CisgICAgICBwcm9kW2krMV0gPSBGTE9BVF9NVUwzMihXLE1BQzE2XzE2KE1VTFQxNl8xNigtWFtpKzFdLFlbaV0pLCBYW2ldLFlbaSsxXSkpOworICAgfQorICAgVyA9IEZMT0FUX0FNVUxUKHAsIHdbal0pOworICAgcHJvZFtpXSA9IEZMT0FUX01VTDMyKFcsTVVMVDE2XzE2KFhbaV0sWVtpXSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWRmX2FkanVzdF9wcm9wKGNvbnN0IHNweF93b3JkMzJfdCAqVywgaW50IE4sIGludCBNLCBzcHhfd29yZDE2X3QgKnByb3ApCit7CisgICBpbnQgaSwgajsKKyAgIHNweF93b3JkMTZfdCBtYXhfc3VtID0gMTsKKyAgIHNweF93b3JkMzJfdCBwcm9wX3N1bSA9IDE7CisgICBmb3IgKGk9MDtpPE07aSsrKQorICAgeworICAgICAgc3B4X3dvcmQzMl90IHRtcCA9IDE7CisgICAgICBmb3IgKGo9MDtqPE47aisrKQorICAgICAgICAgdG1wICs9IE1VTFQxNl8xNihFWFRSQUNUMTYoU0hSMzIoV1tpKk4ral0sMTgpKSwgRVhUUkFDVDE2KFNIUjMyKFdbaSpOK2pdLDE4KSkpOworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICAvKiBKdXN0IGEgc2VjdXJpdHkgaW4gY2FzZSBhbiBvdmVyZmxvdyB3ZXJlIHRvIG9jY3VyICovCisgICAgICB0bXAgPSBNSU4zMihBQlMzMih0bXApLCA1MzY4NzA5MTIpOworI2VuZGlmCisgICAgICBwcm9wW2ldID0gc3B4X3NxcnQodG1wKTsKKyAgICAgIGlmIChwcm9wW2ldID4gbWF4X3N1bSkKKyAgICAgICAgIG1heF9zdW0gPSBwcm9wW2ldOworICAgfQorICAgZm9yIChpPTA7aTxNO2krKykKKyAgIHsKKyAgICAgIHByb3BbaV0gKz0gTVVMVDE2XzE2X1ExNShRQ09OU1QxNiguMWYsMTUpLG1heF9zdW0pOworICAgICAgcHJvcF9zdW0gKz0gRVhURU5EMzIocHJvcFtpXSk7CisgICB9CisgICBmb3IgKGk9MDtpPE07aSsrKQorICAgeworICAgICAgcHJvcFtpXSA9IERJVjMyKE1VTFQxNl8xNihRQ09OU1QxNiguOTlmLDE1KSwgcHJvcFtpXSkscHJvcF9zdW0pOworICAgICAgLypwcmludGYgKCIlZiAiLCBwcm9wW2ldKTsqLworICAgfQorICAgLypwcmludGYgKCJcbiIpOyovCit9CisKKyNpZmRlZiBEVU1QX0VDSE9fQ0FOQ0VMX0RBVEEKKyNpbmNsdWRlIDxzdGRpby5oPgorc3RhdGljIEZJTEUgKnJGaWxlPU5VTEwsICpwRmlsZT1OVUxMLCAqb0ZpbGU9TlVMTDsKKworc3RhdGljIHZvaWQgZHVtcF9hdWRpbyhjb25zdCBzcHhfaW50MTZfdCAqcmVjLCBjb25zdCBzcHhfaW50MTZfdCAqcGxheSwgY29uc3Qgc3B4X2ludDE2X3QgKm91dCwgaW50IGxlbikKK3sKKyAgIGlmICghKHJGaWxlICYmIHBGaWxlICYmIG9GaWxlKSkKKyAgIHsKKyAgICAgIHNwZWV4X2Vycm9yKCJEdW1wIGZpbGVzIG5vdCBvcGVuIik7CisgICB9CisgICBmd3JpdGUocmVjLCBzaXplb2Yoc3B4X2ludDE2X3QpLCBsZW4sIHJGaWxlKTsKKyAgIGZ3cml0ZShwbGF5LCBzaXplb2Yoc3B4X2ludDE2X3QpLCBsZW4sIHBGaWxlKTsKKyAgIGZ3cml0ZShvdXQsIHNpemVvZihzcHhfaW50MTZfdCksIGxlbiwgb0ZpbGUpOworfQorI2VuZGlmCisKKy8qKiBDcmVhdGVzIGEgbmV3IGVjaG8gY2FuY2VsbGVyIHN0YXRlICovCitTcGVleEVjaG9TdGF0ZSAqc3BlZXhfZWNob19zdGF0ZV9pbml0KGludCBmcmFtZV9zaXplLCBpbnQgZmlsdGVyX2xlbmd0aCkKK3sKKyAgIGludCBpLE4sTTsKKyAgIFNwZWV4RWNob1N0YXRlICpzdCA9IChTcGVleEVjaG9TdGF0ZSAqKXNwZWV4X2FsbG9jKHNpemVvZihTcGVleEVjaG9TdGF0ZSkpOworCisjaWZkZWYgRFVNUF9FQ0hPX0NBTkNFTF9EQVRBCisgICBpZiAockZpbGUgfHwgcEZpbGUgfHwgb0ZpbGUpCisgICAgICBzcGVleF9lcnJvcigiT3BlbmluZyBkdW1wIGZpbGVzIHR3aWNlIik7CisgICByRmlsZSA9IGZvcGVuKCJhZWNfcmVjLnN3IiwgInciKTsKKyAgIHBGaWxlID0gZm9wZW4oImFlY19wbGF5LnN3IiwgInciKTsKKyAgIG9GaWxlID0gZm9wZW4oImFlY19vdXQuc3ciLCAidyIpOworI2VuZGlmCisgICAKKyAgIHN0LT5mcmFtZV9zaXplID0gZnJhbWVfc2l6ZTsKKyAgIHN0LT53aW5kb3dfc2l6ZSA9IDIqZnJhbWVfc2l6ZTsKKyAgIE4gPSBzdC0+d2luZG93X3NpemU7CisgICBNID0gc3QtPk0gPSAoZmlsdGVyX2xlbmd0aCtzdC0+ZnJhbWVfc2l6ZS0xKS9mcmFtZV9zaXplOworICAgc3QtPmNhbmNlbF9jb3VudD0wOworICAgc3QtPnN1bV9hZGFwdCA9IDA7CisgICBzdC0+c2F0dXJhdGVkID0gMDsKKyAgIHN0LT5zY3Jld2VkX3VwID0gMDsKKyAgIC8qIFRoaXMgaXMgdGhlIGRlZmF1bHQgc2FtcGxpbmcgcmF0ZSAqLworICAgc3QtPnNhbXBsaW5nX3JhdGUgPSA4MDAwOworICAgc3QtPnNwZWNfYXZlcmFnZSA9IERJVjMyXzE2KFNITDMyKEVYVEVORDMyKHN0LT5mcmFtZV9zaXplKSwgMTUpLCBzdC0+c2FtcGxpbmdfcmF0ZSk7CisjaWZkZWYgRklYRURfUE9JTlQKKyAgIHN0LT5iZXRhMCA9IERJVjMyXzE2KFNITDMyKEVYVEVORDMyKHN0LT5mcmFtZV9zaXplKSwgMTYpLCBzdC0+c2FtcGxpbmdfcmF0ZSk7CisgICBzdC0+YmV0YV9tYXggPSBESVYzMl8xNihTSEwzMihFWFRFTkQzMihzdC0+ZnJhbWVfc2l6ZSksIDE0KSwgc3QtPnNhbXBsaW5nX3JhdGUpOworI2Vsc2UKKyAgIHN0LT5iZXRhMCA9ICgyLjBmKnN0LT5mcmFtZV9zaXplKS9zdC0+c2FtcGxpbmdfcmF0ZTsKKyAgIHN0LT5iZXRhX21heCA9ICguNWYqc3QtPmZyYW1lX3NpemUpL3N0LT5zYW1wbGluZ19yYXRlOworI2VuZGlmCisgICBzdC0+bGVha19lc3RpbWF0ZSA9IDA7CisKKyAgIHN0LT5mZnRfdGFibGUgPSBzcHhfZmZ0X2luaXQoTik7CisgICAKKyAgIHN0LT5lID0gKHNweF93b3JkMTZfdCopc3BlZXhfYWxsb2MoTipzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisgICBzdC0+eCA9IChzcHhfd29yZDE2X3QqKXNwZWV4X2FsbG9jKE4qc2l6ZW9mKHNweF93b3JkMTZfdCkpOworICAgc3QtPmlucHV0ID0gKHNweF93b3JkMTZfdCopc3BlZXhfYWxsb2Moc3QtPmZyYW1lX3NpemUqc2l6ZW9mKHNweF93b3JkMTZfdCkpOworICAgc3QtPnkgPSAoc3B4X3dvcmQxNl90KilzcGVleF9hbGxvYyhOKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgIHN0LT5sYXN0X3kgPSAoc3B4X3dvcmQxNl90KilzcGVleF9hbGxvYyhOKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgIHN0LT5ZZiA9IChzcHhfd29yZDMyX3QqKXNwZWV4X2FsbG9jKChzdC0+ZnJhbWVfc2l6ZSsxKSpzaXplb2Yoc3B4X3dvcmQzMl90KSk7CisgICBzdC0+UmYgPSAoc3B4X3dvcmQzMl90KilzcGVleF9hbGxvYygoc3QtPmZyYW1lX3NpemUrMSkqc2l6ZW9mKHNweF93b3JkMzJfdCkpOworICAgc3QtPlhmID0gKHNweF93b3JkMzJfdCopc3BlZXhfYWxsb2MoKHN0LT5mcmFtZV9zaXplKzEpKnNpemVvZihzcHhfd29yZDMyX3QpKTsKKyAgIHN0LT5ZaCA9IChzcHhfd29yZDMyX3QqKXNwZWV4X2FsbG9jKChzdC0+ZnJhbWVfc2l6ZSsxKSpzaXplb2Yoc3B4X3dvcmQzMl90KSk7CisgICBzdC0+RWggPSAoc3B4X3dvcmQzMl90KilzcGVleF9hbGxvYygoc3QtPmZyYW1lX3NpemUrMSkqc2l6ZW9mKHNweF93b3JkMzJfdCkpOworCisgICBzdC0+WCA9IChzcHhfd29yZDE2X3QqKXNwZWV4X2FsbG9jKChNKzEpKk4qc2l6ZW9mKHNweF93b3JkMTZfdCkpOworICAgc3QtPlkgPSAoc3B4X3dvcmQxNl90KilzcGVleF9hbGxvYyhOKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgIHN0LT5FID0gKHNweF93b3JkMTZfdCopc3BlZXhfYWxsb2MoTipzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisgICBzdC0+VyA9IChzcHhfd29yZDMyX3QqKXNwZWV4X2FsbG9jKE0qTipzaXplb2Yoc3B4X3dvcmQzMl90KSk7CisjaWZkZWYgVFdPX1BBVEgKKyAgIHN0LT5mb3JlZ3JvdW5kID0gKHNweF93b3JkMTZfdCopc3BlZXhfYWxsb2MoTSpOKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyNlbmRpZgorICAgc3QtPlBISSA9IChzcHhfd29yZDMyX3QqKXNwZWV4X2FsbG9jKE4qc2l6ZW9mKHNweF93b3JkMzJfdCkpOworICAgc3QtPnBvd2VyID0gKHNweF93b3JkMzJfdCopc3BlZXhfYWxsb2MoKGZyYW1lX3NpemUrMSkqc2l6ZW9mKHNweF93b3JkMzJfdCkpOworICAgc3QtPnBvd2VyXzEgPSAoc3B4X2Zsb2F0X3QqKXNwZWV4X2FsbG9jKChmcmFtZV9zaXplKzEpKnNpemVvZihzcHhfZmxvYXRfdCkpOworICAgc3QtPndpbmRvdyA9IChzcHhfd29yZDE2X3QqKXNwZWV4X2FsbG9jKE4qc2l6ZW9mKHNweF93b3JkMTZfdCkpOworICAgc3QtPnByb3AgPSAoc3B4X3dvcmQxNl90KilzcGVleF9hbGxvYyhNKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgIHN0LT53dG1wID0gKHNweF93b3JkMTZfdCopc3BlZXhfYWxsb2MoTipzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisjaWZkZWYgRklYRURfUE9JTlQKKyAgIHN0LT53dG1wMiA9IChzcHhfd29yZDE2X3QqKXNwZWV4X2FsbG9jKE4qc2l6ZW9mKHNweF93b3JkMTZfdCkpOworICAgZm9yIChpPTA7aTxOPj4xO2krKykKKyAgIHsKKyAgICAgIHN0LT53aW5kb3dbaV0gPSAoMTYzODMtU0hMMTYoc3B4X2NvcyhESVYzMl8xNihNVUxUMTZfMTYoMjU3MzYsaTw8MSksTikpLDEpKTsKKyAgICAgIHN0LT53aW5kb3dbTi1pLTFdID0gc3QtPndpbmRvd1tpXTsKKyAgIH0KKyNlbHNlCisgICBmb3IgKGk9MDtpPE47aSsrKQorICAgICAgc3QtPndpbmRvd1tpXSA9IC41LS41KmNvcygyKk1fUEkqaS9OKTsKKyNlbmRpZgorICAgZm9yIChpPTA7aTw9c3QtPmZyYW1lX3NpemU7aSsrKQorICAgICAgc3QtPnBvd2VyXzFbaV0gPSBGTE9BVF9PTkU7CisgICBmb3IgKGk9MDtpPE4qTTtpKyspCisgICAgICBzdC0+V1tpXSA9IDA7CisgICB7CisgICAgICBzcHhfd29yZDMyX3Qgc3VtID0gMDsKKyAgICAgIC8qIFJhdGlvIG9mIH4xMCBiZXR3ZWVuIGFkYXB0YXRpb24gcmF0ZSBvZiBmaXJzdCBhbmQgbGFzdCBibG9jayAqLworICAgICAgc3B4X3dvcmQxNl90IGRlY2F5ID0gU0hSMzIoc3B4X2V4cChORUcxNihESVYzMl8xNihRQ09OU1QxNigyLjQsMTEpLE0pKSksMSk7CisgICAgICBzdC0+cHJvcFswXSA9IFFDT05TVDE2KC43LCAxNSk7CisgICAgICBzdW0gPSBFWFRFTkQzMihzdC0+cHJvcFswXSk7CisgICAgICBmb3IgKGk9MTtpPE07aSsrKQorICAgICAgeworICAgICAgICAgc3QtPnByb3BbaV0gPSBNVUxUMTZfMTZfUTE1KHN0LT5wcm9wW2ktMV0sIGRlY2F5KTsKKyAgICAgICAgIHN1bSA9IEFERDMyKHN1bSwgRVhURU5EMzIoc3QtPnByb3BbaV0pKTsKKyAgICAgIH0KKyAgICAgIGZvciAoaT1NLTE7aT49MDtpLS0pCisgICAgICB7CisgICAgICAgICBzdC0+cHJvcFtpXSA9IERJVjMyKE1VTFQxNl8xNihRQ09OU1QxNiguOCwxNSksIHN0LT5wcm9wW2ldKSxzdW0pOworICAgICAgfQorICAgfQorICAgCisgICBzdC0+bWVtWD1zdC0+bWVtRD1zdC0+bWVtRT0wOworICAgc3QtPnByZWVtcGggPSBRQ09OU1QxNiguOSwxNSk7CisgICBpZiAoc3QtPnNhbXBsaW5nX3JhdGU8MTIwMDApCisgICAgICBzdC0+bm90Y2hfcmFkaXVzID0gUUNPTlNUMTYoLjksIDE1KTsKKyAgIGVsc2UgaWYgKHN0LT5zYW1wbGluZ19yYXRlPDI0MDAwKQorICAgICAgc3QtPm5vdGNoX3JhZGl1cyA9IFFDT05TVDE2KC45ODIsIDE1KTsKKyAgIGVsc2UKKyAgICAgIHN0LT5ub3RjaF9yYWRpdXMgPSBRQ09OU1QxNiguOTkyLCAxNSk7CisKKyAgIHN0LT5ub3RjaF9tZW1bMF0gPSBzdC0+bm90Y2hfbWVtWzFdID0gMDsKKyAgIHN0LT5hZGFwdGVkID0gMDsKKyAgIHN0LT5QZXkgPSBzdC0+UHl5ID0gRkxPQVRfT05FOworICAgCisjaWZkZWYgVFdPX1BBVEgKKyAgIHN0LT5EYXZnMSA9IHN0LT5EYXZnMiA9IDA7CisgICBzdC0+RHZhcjEgPSBzdC0+RHZhcjIgPSBGTE9BVF9aRVJPOworI2VuZGlmCisgICAKKyAgIHN0LT5wbGF5X2J1ZiA9IChzcHhfaW50MTZfdCopc3BlZXhfYWxsb2MoKFBMQVlCQUNLX0RFTEFZKzEpKnN0LT5mcmFtZV9zaXplKnNpemVvZihzcHhfaW50MTZfdCkpOworICAgc3QtPnBsYXlfYnVmX3BvcyA9IFBMQVlCQUNLX0RFTEFZKnN0LT5mcmFtZV9zaXplOworICAgc3QtPnBsYXlfYnVmX3N0YXJ0ZWQgPSAwOworICAgCisgICByZXR1cm4gc3Q7Cit9CisKKy8qKiBSZXNldHMgZWNobyBjYW5jZWxsZXIgc3RhdGUgKi8KK3ZvaWQgc3BlZXhfZWNob19zdGF0ZV9yZXNldChTcGVleEVjaG9TdGF0ZSAqc3QpCit7CisgICBpbnQgaSwgTSwgTjsKKyAgIHN0LT5jYW5jZWxfY291bnQ9MDsKKyAgIHN0LT5zY3Jld2VkX3VwID0gMDsKKyAgIE4gPSBzdC0+d2luZG93X3NpemU7CisgICBNID0gc3QtPk07CisgICBmb3IgKGk9MDtpPE4qTTtpKyspCisgICAgICBzdC0+V1tpXSA9IDA7CisjaWZkZWYgVFdPX1BBVEgKKyAgIGZvciAoaT0wO2k8TipNO2krKykKKyAgICAgIHN0LT5mb3JlZ3JvdW5kW2ldID0gMDsKKyNlbmRpZgorICAgZm9yIChpPTA7aTxOKihNKzEpO2krKykKKyAgICAgIHN0LT5YW2ldID0gMDsKKyAgIGZvciAoaT0wO2k8PXN0LT5mcmFtZV9zaXplO2krKykKKyAgIHsKKyAgICAgIHN0LT5wb3dlcltpXSA9IDA7CisgICAgICBzdC0+cG93ZXJfMVtpXSA9IEZMT0FUX09ORTsKKyAgICAgIHN0LT5FaFtpXSA9IDA7CisgICAgICBzdC0+WWhbaV0gPSAwOworICAgfQorICAgZm9yIChpPTA7aTxzdC0+ZnJhbWVfc2l6ZTtpKyspCisgICB7CisgICAgICBzdC0+bGFzdF95W2ldID0gMDsKKyAgIH0KKyAgIGZvciAoaT0wO2k8TjtpKyspCisgICB7CisgICAgICBzdC0+RVtpXSA9IDA7CisgICAgICBzdC0+eFtpXSA9IDA7CisgICB9CisgICBzdC0+bm90Y2hfbWVtWzBdID0gc3QtPm5vdGNoX21lbVsxXSA9IDA7CisgICBzdC0+bWVtWD1zdC0+bWVtRD1zdC0+bWVtRT0wOworCisgICBzdC0+c2F0dXJhdGVkID0gMDsKKyAgIHN0LT5hZGFwdGVkID0gMDsKKyAgIHN0LT5zdW1fYWRhcHQgPSAwOworICAgc3QtPlBleSA9IHN0LT5QeXkgPSBGTE9BVF9PTkU7CisjaWZkZWYgVFdPX1BBVEgKKyAgIHN0LT5EYXZnMSA9IHN0LT5EYXZnMiA9IDA7CisgICBzdC0+RHZhcjEgPSBzdC0+RHZhcjIgPSBGTE9BVF9aRVJPOworI2VuZGlmCisgICBmb3IgKGk9MDtpPDMqc3QtPmZyYW1lX3NpemU7aSsrKQorICAgICAgc3QtPnBsYXlfYnVmW2ldID0gMDsKKyAgIHN0LT5wbGF5X2J1Zl9wb3MgPSBQTEFZQkFDS19ERUxBWSpzdC0+ZnJhbWVfc2l6ZTsKKyAgIHN0LT5wbGF5X2J1Zl9zdGFydGVkID0gMDsKKworfQorCisvKiogRGVzdHJveXMgYW4gZWNobyBjYW5jZWxsZXIgc3RhdGUgKi8KK3ZvaWQgc3BlZXhfZWNob19zdGF0ZV9kZXN0cm95KFNwZWV4RWNob1N0YXRlICpzdCkKK3sKKyAgIHNweF9mZnRfZGVzdHJveShzdC0+ZmZ0X3RhYmxlKTsKKworICAgc3BlZXhfZnJlZShzdC0+ZSk7CisgICBzcGVleF9mcmVlKHN0LT54KTsKKyAgIHNwZWV4X2ZyZWUoc3QtPmlucHV0KTsKKyAgIHNwZWV4X2ZyZWUoc3QtPnkpOworICAgc3BlZXhfZnJlZShzdC0+bGFzdF95KTsKKyAgIHNwZWV4X2ZyZWUoc3QtPllmKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPlJmKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPlhmKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPlloKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPkVoKTsKKworICAgc3BlZXhfZnJlZShzdC0+WCk7CisgICBzcGVleF9mcmVlKHN0LT5ZKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPkUpOworICAgc3BlZXhfZnJlZShzdC0+Vyk7CisjaWZkZWYgVFdPX1BBVEgKKyAgIHNwZWV4X2ZyZWUoc3QtPmZvcmVncm91bmQpOworI2VuZGlmCisgICBzcGVleF9mcmVlKHN0LT5QSEkpOworICAgc3BlZXhfZnJlZShzdC0+cG93ZXIpOworICAgc3BlZXhfZnJlZShzdC0+cG93ZXJfMSk7CisgICBzcGVleF9mcmVlKHN0LT53aW5kb3cpOworICAgc3BlZXhfZnJlZShzdC0+cHJvcCk7CisgICBzcGVleF9mcmVlKHN0LT53dG1wKTsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgc3BlZXhfZnJlZShzdC0+d3RtcDIpOworI2VuZGlmCisgICBzcGVleF9mcmVlKHN0LT5wbGF5X2J1Zik7CisgICBzcGVleF9mcmVlKHN0KTsKKyAgIAorI2lmZGVmIERVTVBfRUNIT19DQU5DRUxfREFUQQorICAgZmNsb3NlKHJGaWxlKTsKKyAgIGZjbG9zZShwRmlsZSk7CisgICBmY2xvc2Uob0ZpbGUpOworICAgckZpbGUgPSBwRmlsZSA9IG9GaWxlID0gTlVMTDsKKyNlbmRpZgorfQorCit2b2lkIHNwZWV4X2VjaG9fY2FwdHVyZShTcGVleEVjaG9TdGF0ZSAqc3QsIGNvbnN0IHNweF9pbnQxNl90ICpyZWMsIHNweF9pbnQxNl90ICpvdXQpCit7CisgICBpbnQgaTsKKyAgIC8qc3BlZXhfd2FybmluZ19pbnQoImNhcHR1cmUgd2l0aCBmaWxsIGxldmVsICIsIHN0LT5wbGF5X2J1Zl9wb3Mvc3QtPmZyYW1lX3NpemUpOyovCisgICBzdC0+cGxheV9idWZfc3RhcnRlZCA9IDE7CisgICBpZiAoc3QtPnBsYXlfYnVmX3Bvcz49c3QtPmZyYW1lX3NpemUpCisgICB7CisgICAgICBzcGVleF9lY2hvX2NhbmNlbGxhdGlvbihzdCwgcmVjLCBzdC0+cGxheV9idWYsIG91dCk7CisgICAgICBzdC0+cGxheV9idWZfcG9zIC09IHN0LT5mcmFtZV9zaXplOworICAgICAgZm9yIChpPTA7aTxzdC0+cGxheV9idWZfcG9zO2krKykKKyAgICAgICAgIHN0LT5wbGF5X2J1ZltpXSA9IHN0LT5wbGF5X2J1ZltpK3N0LT5mcmFtZV9zaXplXTsKKyAgIH0gZWxzZSB7CisgICAgICBzcGVleF93YXJuaW5nKCJObyBwbGF5YmFjayBmcmFtZSBhdmFpbGFibGUgKHlvdXIgYXBwbGljYXRpb24gaXMgYnVnZ3kgYW5kL29yIGdvdCB4cnVucykiKTsKKyAgICAgIGlmIChzdC0+cGxheV9idWZfcG9zIT0wKQorICAgICAgeworICAgICAgICAgc3BlZXhfd2FybmluZygiaW50ZXJuYWwgcGxheWJhY2sgYnVmZmVyIGNvcnJ1cHRpb24/Iik7CisgICAgICAgICBzdC0+cGxheV9idWZfcG9zID0gMDsKKyAgICAgIH0KKyAgICAgIGZvciAoaT0wO2k8c3QtPmZyYW1lX3NpemU7aSsrKQorICAgICAgICAgb3V0W2ldID0gcmVjW2ldOworICAgfQorfQorCit2b2lkIHNwZWV4X2VjaG9fcGxheWJhY2soU3BlZXhFY2hvU3RhdGUgKnN0LCBjb25zdCBzcHhfaW50MTZfdCAqcGxheSkKK3sKKyAgIC8qc3BlZXhfd2FybmluZ19pbnQoInBsYXliYWNrIHdpdGggZmlsbCBsZXZlbCAiLCBzdC0+cGxheV9idWZfcG9zL3N0LT5mcmFtZV9zaXplKTsqLworICAgaWYgKCFzdC0+cGxheV9idWZfc3RhcnRlZCkKKyAgIHsKKyAgICAgIHNwZWV4X3dhcm5pbmcoImRpc2NhcmRlZCBmaXJzdCBwbGF5YmFjayBmcmFtZSIpOworICAgICAgcmV0dXJuOworICAgfQorICAgaWYgKHN0LT5wbGF5X2J1Zl9wb3M8PVBMQVlCQUNLX0RFTEFZKnN0LT5mcmFtZV9zaXplKQorICAgeworICAgICAgaW50IGk7CisgICAgICBmb3IgKGk9MDtpPHN0LT5mcmFtZV9zaXplO2krKykKKyAgICAgICAgIHN0LT5wbGF5X2J1ZltzdC0+cGxheV9idWZfcG9zK2ldID0gcGxheVtpXTsKKyAgICAgIHN0LT5wbGF5X2J1Zl9wb3MgKz0gc3QtPmZyYW1lX3NpemU7CisgICAgICBpZiAoc3QtPnBsYXlfYnVmX3BvcyA8PSAoUExBWUJBQ0tfREVMQVktMSkqc3QtPmZyYW1lX3NpemUpCisgICAgICB7CisgICAgICAgICBzcGVleF93YXJuaW5nKCJBdXRvLWZpbGxpbmcgdGhlIGJ1ZmZlciAoeW91ciBhcHBsaWNhdGlvbiBpcyBidWdneSBhbmQvb3IgZ290IHhydW5zKSIpOworICAgICAgICAgZm9yIChpPTA7aTxzdC0+ZnJhbWVfc2l6ZTtpKyspCisgICAgICAgICAgICBzdC0+cGxheV9idWZbc3QtPnBsYXlfYnVmX3BvcytpXSA9IHBsYXlbaV07CisgICAgICAgICBzdC0+cGxheV9idWZfcG9zICs9IHN0LT5mcmFtZV9zaXplOworICAgICAgfQorICAgfSBlbHNlIHsKKyAgICAgIHNwZWV4X3dhcm5pbmcoIkhhZCB0byBkaXNjYXJkIGEgcGxheWJhY2sgZnJhbWUgKHlvdXIgYXBwbGljYXRpb24gaXMgYnVnZ3kgYW5kL29yIGdvdCB4cnVucykiKTsKKyAgIH0KK30KKworLyoqIFBlcmZvcm1zIGVjaG8gY2FuY2VsbGF0aW9uIG9uIGEgZnJhbWUgKi8KK3ZvaWQgc3BlZXhfZWNob19jYW5jZWwoU3BlZXhFY2hvU3RhdGUgKnN0LCBjb25zdCBzcHhfaW50MTZfdCAqaW4sIGNvbnN0IHNweF9pbnQxNl90ICpmYXJfZW5kLCBzcHhfaW50MTZfdCAqb3V0LCBzcHhfaW50MzJfdCAqWW91dCkKK3sKKyAgIHNwZWV4X2VjaG9fY2FuY2VsbGF0aW9uKHN0LCBpbiwgZmFyX2VuZCwgb3V0KTsKK30KKworLyoqIFBlcmZvcm1zIGVjaG8gY2FuY2VsbGF0aW9uIG9uIGEgZnJhbWUgKGRlcHJlY2F0ZWQsIGxhc3QgYXJnIG5vdyBpZ25vcmVkKSAqLwordm9pZCBzcGVleF9lY2hvX2NhbmNlbGxhdGlvbihTcGVleEVjaG9TdGF0ZSAqc3QsIGNvbnN0IHNweF9pbnQxNl90ICppbiwgY29uc3Qgc3B4X2ludDE2X3QgKmZhcl9lbmQsIHNweF9pbnQxNl90ICpvdXQpCit7CisgICBpbnQgaSxqOworICAgaW50IE4sTTsKKyAgIHNweF93b3JkMzJfdCBTeXksU2VlLFN4eCxTZGQsIFNmZjsKKyNpZmRlZiBUV09fUEFUSAorICAgc3B4X3dvcmQzMl90IERiZjsKKyAgIGludCB1cGRhdGVfZm9yZWdyb3VuZDsKKyNlbmRpZgorICAgc3B4X3dvcmQzMl90IFNleTsKKyAgIHNweF93b3JkMTZfdCBzcywgc3NfMTsKKyAgIHNweF9mbG9hdF90IFBleSA9IEZMT0FUX09ORSwgUHl5PUZMT0FUX09ORTsKKyAgIHNweF9mbG9hdF90IGFscGhhLCBhbHBoYV8xOworICAgc3B4X3dvcmQxNl90IFJFUjsKKyAgIHNweF93b3JkMzJfdCB0bXAzMjsKKyAgIAorICAgTiA9IHN0LT53aW5kb3dfc2l6ZTsKKyAgIE0gPSBzdC0+TTsKKyAgIHN0LT5jYW5jZWxfY291bnQrKzsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgc3M9RElWMzJfMTYoMTE0NjksTSk7CisgICBzc18xID0gU1VCMTYoMzI3Njcsc3MpOworI2Vsc2UKKyAgIHNzPS4zNS9NOworICAgc3NfMSA9IDEtc3M7CisjZW5kaWYKKworICAgLyogQXBwbHkgYSBub3RjaCBmaWx0ZXIgdG8gbWFrZSBzdXJlIERDIGRvZXNuJ3QgZW5kIHVwIGNhdXNpbmcgcHJvYmxlbXMgKi8KKyAgIGZpbHRlcl9kY19ub3RjaDE2KGluLCBzdC0+bm90Y2hfcmFkaXVzLCBzdC0+aW5wdXQsIHN0LT5mcmFtZV9zaXplLCBzdC0+bm90Y2hfbWVtKTsKKyAgIC8qIENvcHkgaW5wdXQgZGF0YSB0byBidWZmZXIgYW5kIGFwcGx5IHByZS1lbXBoYXNpcyAqLworICAgZm9yIChpPTA7aTxzdC0+ZnJhbWVfc2l6ZTtpKyspCisgICB7CisgICAgICBzcHhfd29yZDMyX3QgdG1wMzI7CisgICAgICB0bXAzMiA9IFNVQjMyKEVYVEVORDMyKGZhcl9lbmRbaV0pLCBFWFRFTkQzMihNVUxUMTZfMTZfUDE1KHN0LT5wcmVlbXBoLCBzdC0+bWVtWCkpKTsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgICAgLyogSWYgc2F0dXJhdGlvbiBvY2N1cnMgaGVyZSwgd2UgbmVlZCB0byBmcmVlemUgYWRhcHRhdGlvbiBmb3IgTSsxIGZyYW1lcyAobm90IGp1c3Qgb25lKSAqLworICAgICAgaWYgKHRtcDMyID4gMzI3NjcpCisgICAgICB7CisgICAgICAgICB0bXAzMiA9IDMyNzY3OworICAgICAgICAgc3QtPnNhdHVyYXRlZCA9IE0rMTsKKyAgICAgIH0KKyAgICAgIGlmICh0bXAzMiA8IC0zMjc2NykKKyAgICAgIHsKKyAgICAgICAgIHRtcDMyID0gLTMyNzY3OworICAgICAgICAgc3QtPnNhdHVyYXRlZCA9IE0rMTsKKyAgICAgIH0gICAgICAKKyNlbmRpZgorICAgICAgc3QtPnhbaStzdC0+ZnJhbWVfc2l6ZV0gPSBFWFRSQUNUMTYodG1wMzIpOworICAgICAgc3QtPm1lbVggPSBmYXJfZW5kW2ldOworICAgICAgCisgICAgICB0bXAzMiA9IFNVQjMyKEVYVEVORDMyKHN0LT5pbnB1dFtpXSksIEVYVEVORDMyKE1VTFQxNl8xNl9QMTUoc3QtPnByZWVtcGgsIHN0LT5tZW1EKSkpOworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICBpZiAodG1wMzIgPiAzMjc2NykKKyAgICAgIHsKKyAgICAgICAgIHRtcDMyID0gMzI3Njc7CisgICAgICAgICBpZiAoc3QtPnNhdHVyYXRlZCA9PSAwKQorICAgICAgICAgICAgc3QtPnNhdHVyYXRlZCA9IDE7CisgICAgICB9ICAgICAgCisgICAgICBpZiAodG1wMzIgPCAtMzI3NjcpCisgICAgICB7CisgICAgICAgICB0bXAzMiA9IC0zMjc2NzsKKyAgICAgICAgIGlmIChzdC0+c2F0dXJhdGVkID09IDApCisgICAgICAgICAgICBzdC0+c2F0dXJhdGVkID0gMTsKKyAgICAgIH0KKyNlbmRpZgorICAgICAgc3QtPm1lbUQgPSBzdC0+aW5wdXRbaV07CisgICAgICBzdC0+aW5wdXRbaV0gPSB0bXAzMjsKKyAgIH0KKworICAgLyogU2hpZnQgbWVtb3J5OiB0aGlzIGNvdWxkIGJlIG9wdGltaXplZCBldmVudHVhbGx5Ki8KKyAgIGZvciAoaj1NLTE7aj49MDtqLS0pCisgICB7CisgICAgICBmb3IgKGk9MDtpPE47aSsrKQorICAgICAgICAgc3QtPlhbKGorMSkqTitpXSA9IHN0LT5YW2oqTitpXTsKKyAgIH0KKworICAgLyogQ29udmVydCB4IChmYXIgZW5kKSB0byBmcmVxdWVuY3kgZG9tYWluICovCisgICBzcHhfZmZ0KHN0LT5mZnRfdGFibGUsIHN0LT54LCAmc3QtPlhbMF0pOworICAgZm9yIChpPTA7aTxOO2krKykKKyAgICAgIHN0LT5sYXN0X3lbaV0gPSBzdC0+eFtpXTsKKyAgIFN4eCA9IG1kZl9pbm5lcl9wcm9kKHN0LT54K3N0LT5mcmFtZV9zaXplLCBzdC0+eCtzdC0+ZnJhbWVfc2l6ZSwgc3QtPmZyYW1lX3NpemUpOworICAgZm9yIChpPTA7aTxzdC0+ZnJhbWVfc2l6ZTtpKyspCisgICAgICBzdC0+eFtpXSA9IHN0LT54W2krc3QtPmZyYW1lX3NpemVdOworICAgLyogRnJvbSBoZXJlIG9uLCB0aGUgdG9wIHBhcnQgb2YgeCBpcyB1c2VkIGFzIHNjcmF0Y2ggc3BhY2UgKi8KKyAgIAorI2lmZGVmIFRXT19QQVRICisgICAvKiBDb21wdXRlIGZvcmVncm91bmQgZmlsdGVyICovCisgICBzcGVjdHJhbF9tdWxfYWNjdW0xNihzdC0+WCwgc3QtPmZvcmVncm91bmQsIHN0LT5ZLCBOLCBNKTsgICAKKyAgIHNweF9pZmZ0KHN0LT5mZnRfdGFibGUsIHN0LT5ZLCBzdC0+ZSk7CisgICBmb3IgKGk9MDtpPHN0LT5mcmFtZV9zaXplO2krKykKKyAgICAgIHN0LT54W2krc3QtPmZyYW1lX3NpemVdID0gU1VCMTYoc3QtPmlucHV0W2ldLCBzdC0+ZVtpK3N0LT5mcmFtZV9zaXplXSk7CisgICBTZmYgPSBtZGZfaW5uZXJfcHJvZChzdC0+eCtzdC0+ZnJhbWVfc2l6ZSwgc3QtPngrc3QtPmZyYW1lX3NpemUsIHN0LT5mcmFtZV9zaXplKTsKKyNlbmRpZgorICAgCisgICAvKiBBZGp1c3QgcHJvcG9ydGlvbmFsIGFkYXB0aW9uIHJhdGUgKi8KKyAgIG1kZl9hZGp1c3RfcHJvcCAoc3QtPlcsIE4sIE0sIHN0LT5wcm9wKTsKKyAgIC8qIENvbXB1dGUgd2VpZ2h0IGdyYWRpZW50ICovCisgICBpZiAoc3QtPnNhdHVyYXRlZCA9PSAwKQorICAgeworICAgICAgZm9yIChqPU0tMTtqPj0wO2otLSkKKyAgICAgIHsKKyAgICAgICAgIHdlaWdodGVkX3NwZWN0cmFsX211bF9jb25qKHN0LT5wb3dlcl8xLCBGTE9BVF9TSEwoUFNFVURPRkxPQVQoc3QtPnByb3Bbal0pLC0xNSksICZzdC0+WFsoaisxKSpOXSwgc3QtPkUsIHN0LT5QSEksIE4pOworICAgICAgICAgZm9yIChpPTA7aTxOO2krKykKKyAgICAgICAgICAgIHN0LT5XW2oqTitpXSA9IEFERDMyKHN0LT5XW2oqTitpXSwgc3QtPlBISVtpXSk7CisgICAgICAgICAKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBzdC0+c2F0dXJhdGVkLS07CisgICB9CisgICAKKyAgIC8qIFVwZGF0ZSB3ZWlnaHQgdG8gcHJldmVudCBjaXJjdWxhciBjb252b2x1dGlvbiAoTURGIC8gQVVNREYpICovCisgICBmb3IgKGo9MDtqPE07aisrKQorICAgeworICAgICAgLyogVGhpcyBpcyBhIHZhcmlhbnQgb2YgdGhlIEFsdGVybmF0aXZlbHkgVXBkYXRlZCBNREYgKEFVTURGKSAqLworICAgICAgLyogUmVtb3ZlIHRoZSAiaWYiIHRvIG1ha2UgdGhpcyBhbiBNREYgZmlsdGVyICovCisgICAgICBpZiAoaj09MCB8fCBzdC0+Y2FuY2VsX2NvdW50JShNLTEpID09IGotMSkKKyAgICAgIHsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgICAgICAgZm9yIChpPTA7aTxOO2krKykKKyAgICAgICAgICAgIHN0LT53dG1wMltpXSA9IEVYVFJBQ1QxNihQU0hSMzIoc3QtPldbaipOK2ldLE5PUk1BTElaRV9TQ0FMRURPV04rMTYpKTsKKyAgICAgICAgIHNweF9pZmZ0KHN0LT5mZnRfdGFibGUsIHN0LT53dG1wMiwgc3QtPnd0bXApOworICAgICAgICAgZm9yIChpPTA7aTxzdC0+ZnJhbWVfc2l6ZTtpKyspCisgICAgICAgICB7CisgICAgICAgICAgICBzdC0+d3RtcFtpXT0wOworICAgICAgICAgfQorICAgICAgICAgZm9yIChpPXN0LT5mcmFtZV9zaXplO2k8TjtpKyspCisgICAgICAgICB7CisgICAgICAgICAgICBzdC0+d3RtcFtpXT1TSEwxNihzdC0+d3RtcFtpXSxOT1JNQUxJWkVfU0NBTEVVUCk7CisgICAgICAgICB9CisgICAgICAgICBzcHhfZmZ0KHN0LT5mZnRfdGFibGUsIHN0LT53dG1wLCBzdC0+d3RtcDIpOworICAgICAgICAgLyogVGhlICItMSIgaW4gdGhlIHNoaWZ0IGlzIGEgc29ydCBvZiBrbHVkZ2UgdGhhdCB0cmFkZXMgbGVzcyBlZmZpY2llbnQgdXBkYXRlIHNwZWVkIGZvciBkZWNyZWFzZSBub2lzZSAqLworICAgICAgICAgZm9yIChpPTA7aTxOO2krKykKKyAgICAgICAgICAgIHN0LT5XW2oqTitpXSAtPSBTSEwzMihFWFRFTkQzMihzdC0+d3RtcDJbaV0pLDE2K05PUk1BTElaRV9TQ0FMRURPV04tTk9STUFMSVpFX1NDQUxFVVAtMSk7CisjZWxzZQorICAgICAgICAgc3B4X2lmZnQoc3QtPmZmdF90YWJsZSwgJnN0LT5XW2oqTl0sIHN0LT53dG1wKTsKKyAgICAgICAgIGZvciAoaT1zdC0+ZnJhbWVfc2l6ZTtpPE47aSsrKQorICAgICAgICAgeworICAgICAgICAgICAgc3QtPnd0bXBbaV09MDsKKyAgICAgICAgIH0KKyAgICAgICAgIHNweF9mZnQoc3QtPmZmdF90YWJsZSwgc3QtPnd0bXAsICZzdC0+V1tqKk5dKTsKKyNlbmRpZgorICAgICAgfQorICAgfQorCisgICAvKiBDb21wdXRlIGZpbHRlciByZXNwb25zZSBZICovCisgICBzcGVjdHJhbF9tdWxfYWNjdW0oc3QtPlgsIHN0LT5XLCBzdC0+WSwgTiwgTSk7CisgICBzcHhfaWZmdChzdC0+ZmZ0X3RhYmxlLCBzdC0+WSwgc3QtPnkpOworCisjaWZkZWYgVFdPX1BBVEgKKyAgIC8qIERpZmZlcmVuY2UgaW4gcmVzcG9uc2UsIHRoaXMgaXMgdXNlZCB0byBlc3RpbWF0ZSB0aGUgdmFyaWFuY2Ugb2Ygb3VyIHJlc2lkdWFsIHBvd2VyIGVzdGltYXRlICovCisgICBmb3IgKGk9MDtpPHN0LT5mcmFtZV9zaXplO2krKykKKyAgICAgIHN0LT54W2krc3QtPmZyYW1lX3NpemVdID0gU1VCMTYoc3QtPmVbaStzdC0+ZnJhbWVfc2l6ZV0sIHN0LT55W2krc3QtPmZyYW1lX3NpemVdKTsKKyAgIERiZiA9IDEwK21kZl9pbm5lcl9wcm9kKHN0LT54K3N0LT5mcmFtZV9zaXplLCBzdC0+eCtzdC0+ZnJhbWVfc2l6ZSwgc3QtPmZyYW1lX3NpemUpOworI2VuZGlmCisKKyAgIGZvciAoaT0wO2k8c3QtPmZyYW1lX3NpemU7aSsrKQorICAgICAgc3QtPnhbaStzdC0+ZnJhbWVfc2l6ZV0gPSBTVUIxNihzdC0+aW5wdXRbaV0sIHN0LT55W2krc3QtPmZyYW1lX3NpemVdKTsKKyAgIFNlZSA9IG1kZl9pbm5lcl9wcm9kKHN0LT54K3N0LT5mcmFtZV9zaXplLCBzdC0+eCtzdC0+ZnJhbWVfc2l6ZSwgc3QtPmZyYW1lX3NpemUpOworI2lmbmRlZiBUV09fUEFUSAorICAgU2ZmID0gU2VlOworI2VuZGlmCisKKyNpZmRlZiBUV09fUEFUSAorICAgLyogTG9naWMgZm9yIHVwZGF0aW5nIHRoZSBmb3JlZ3JvdW5kIGZpbHRlciAqLworICAgCisgICAvKiBGb3IgdHdvIHRpbWUgd2luZG93cywgY29tcHV0ZSB0aGUgbWVhbiBvZiB0aGUgZW5lcmd5IGRpZmZlcmVuY2UsIGFzIHdlbGwgYXMgdGhlIHZhcmlhbmNlICovCisgICBzdC0+RGF2ZzEgPSBBREQzMihNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC42ZiwxNSksc3QtPkRhdmcxKSwgTVVMVDE2XzMyX1ExNShRQ09OU1QxNiguNGYsMTUpLFNVQjMyKFNmZixTZWUpKSk7CisgICBzdC0+RGF2ZzIgPSBBREQzMihNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC44NWYsMTUpLHN0LT5EYXZnMiksIE1VTFQxNl8zMl9RMTUoUUNPTlNUMTYoLjE1ZiwxNSksU1VCMzIoU2ZmLFNlZSkpKTsKKyAgIHN0LT5EdmFyMSA9IEZMT0FUX0FERChGTE9BVF9NVUxUKFZBUjFfU01PT1RILCBzdC0+RHZhcjEpLCBGTE9BVF9NVUwzMlUoTVVMVDE2XzMyX1ExNShRQ09OU1QxNiguNGYsMTUpLFNmZiksIE1VTFQxNl8zMl9RMTUoUUNPTlNUMTYoLjRmLDE1KSxEYmYpKSk7CisgICBzdC0+RHZhcjIgPSBGTE9BVF9BREQoRkxPQVRfTVVMVChWQVIyX1NNT09USCwgc3QtPkR2YXIyKSwgRkxPQVRfTVVMMzJVKE1VTFQxNl8zMl9RMTUoUUNPTlNUMTYoLjE1ZiwxNSksU2ZmKSwgTVVMVDE2XzMyX1ExNShRQ09OU1QxNiguMTVmLDE1KSxEYmYpKSk7CisgICAKKyAgIC8qIEVxdWl2YWxlbnQgZmxvYXQgY29kZToKKyAgIHN0LT5EYXZnMSA9IC42KnN0LT5EYXZnMSArIC40KihTZmYtU2VlKTsKKyAgIHN0LT5EYXZnMiA9IC44NSpzdC0+RGF2ZzIgKyAuMTUqKFNmZi1TZWUpOworICAgc3QtPkR2YXIxID0gLjM2KnN0LT5EdmFyMSArIC4xNipTZmYqRGJmOworICAgc3QtPkR2YXIyID0gLjcyMjUqc3QtPkR2YXIyICsgLjAyMjUqU2ZmKkRiZjsKKyAgICovCisgICAKKyAgIHVwZGF0ZV9mb3JlZ3JvdW5kID0gMDsKKyAgIC8qIENoZWNrIGlmIHdlIGhhdmUgYSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IHJlZHVjdGlvbiBpbiB0aGUgcmVzaWR1YWwgZWNobyAqLworICAgLyogTm90ZSB0aGF0IHRoaXMgaXMgKm5vdCogR2F1c3NpYW4sIHNvIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB0aGUgbG9uZ2VyIHRhaWwgKi8KKyAgIGlmIChGTE9BVF9HVChGTE9BVF9NVUwzMlUoU1VCMzIoU2ZmLFNlZSksQUJTMzIoU1VCMzIoU2ZmLFNlZSkpKSwgRkxPQVRfTVVMMzJVKFNmZixEYmYpKSkKKyAgICAgIHVwZGF0ZV9mb3JlZ3JvdW5kID0gMTsKKyAgIGVsc2UgaWYgKEZMT0FUX0dUKEZMT0FUX01VTDMyVShzdC0+RGF2ZzEsIEFCUzMyKHN0LT5EYXZnMSkpLCBGTE9BVF9NVUxUKFZBUjFfVVBEQVRFLChzdC0+RHZhcjEpKSkpCisgICAgICB1cGRhdGVfZm9yZWdyb3VuZCA9IDE7CisgICBlbHNlIGlmIChGTE9BVF9HVChGTE9BVF9NVUwzMlUoc3QtPkRhdmcyLCBBQlMzMihzdC0+RGF2ZzIpKSwgRkxPQVRfTVVMVChWQVIyX1VQREFURSwoc3QtPkR2YXIyKSkpKQorICAgICAgdXBkYXRlX2ZvcmVncm91bmQgPSAxOworICAgCisgICAvKiBEbyB3ZSB1cGRhdGU/ICovCisgICBpZiAodXBkYXRlX2ZvcmVncm91bmQpCisgICB7CisgICAgICBzdC0+RGF2ZzEgPSBzdC0+RGF2ZzIgPSAwOworICAgICAgc3QtPkR2YXIxID0gc3QtPkR2YXIyID0gRkxPQVRfWkVSTzsKKyAgICAgIC8qIENvcHkgYmFja2dyb3VuZCBmaWx0ZXIgdG8gZm9yZWdyb3VuZCBmaWx0ZXIgKi8KKyAgICAgIGZvciAoaT0wO2k8TipNO2krKykKKyAgICAgICAgIHN0LT5mb3JlZ3JvdW5kW2ldID0gRVhUUkFDVDE2KFBTSFIzMihzdC0+V1tpXSwxNikpOworICAgICAgLyogQXBwbHkgYSBzbW9vdGggdHJhbnNpdGlvbiBzbyBhcyB0byBub3QgaW50cm9kdWNlIGJsb2NraW5nIGFydGlmYWN0cyAqLworICAgICAgZm9yIChpPTA7aTxzdC0+ZnJhbWVfc2l6ZTtpKyspCisgICAgICAgICBzdC0+ZVtpK3N0LT5mcmFtZV9zaXplXSA9IE1VTFQxNl8xNl9RMTUoc3QtPndpbmRvd1tpK3N0LT5mcmFtZV9zaXplXSxzdC0+ZVtpK3N0LT5mcmFtZV9zaXplXSkgKyBNVUxUMTZfMTZfUTE1KHN0LT53aW5kb3dbaV0sc3QtPnlbaStzdC0+ZnJhbWVfc2l6ZV0pOworICAgfSBlbHNlIHsKKyAgICAgIGludCByZXNldF9iYWNrZ3JvdW5kPTA7CisgICAgICAvKiBPdGhlcndpc2UsIGNoZWNrIGlmIHRoZSBiYWNrZ3JvdW5kIGZpbHRlciBpcyBzaWduaWZpY2FudGx5IHdvcnNlICovCisgICAgICBpZiAoRkxPQVRfR1QoRkxPQVRfTVVMMzJVKE5FRzMyKFNVQjMyKFNmZixTZWUpKSxBQlMzMihTVUIzMihTZmYsU2VlKSkpLCBGTE9BVF9NVUxUKFZBUl9CQUNLVFJBQ0ssRkxPQVRfTVVMMzJVKFNmZixEYmYpKSkpCisgICAgICAgICByZXNldF9iYWNrZ3JvdW5kID0gMTsKKyAgICAgIGlmIChGTE9BVF9HVChGTE9BVF9NVUwzMlUoTkVHMzIoc3QtPkRhdmcxKSwgQUJTMzIoc3QtPkRhdmcxKSksIEZMT0FUX01VTFQoVkFSX0JBQ0tUUkFDSyxzdC0+RHZhcjEpKSkKKyAgICAgICAgIHJlc2V0X2JhY2tncm91bmQgPSAxOworICAgICAgaWYgKEZMT0FUX0dUKEZMT0FUX01VTDMyVShORUczMihzdC0+RGF2ZzIpLCBBQlMzMihzdC0+RGF2ZzIpKSwgRkxPQVRfTVVMVChWQVJfQkFDS1RSQUNLLHN0LT5EdmFyMikpKQorICAgICAgICAgcmVzZXRfYmFja2dyb3VuZCA9IDE7CisgICAgICBpZiAocmVzZXRfYmFja2dyb3VuZCkKKyAgICAgIHsKKyAgICAgICAgIC8qIENvcHkgZm9yZWdyb3VuZCBmaWx0ZXIgdG8gYmFja2dyb3VuZCBmaWx0ZXIgKi8KKyAgICAgICAgIGZvciAoaT0wO2k8TipNO2krKykKKyAgICAgICAgICAgIHN0LT5XW2ldID0gU0hMMzIoRVhURU5EMzIoc3QtPmZvcmVncm91bmRbaV0pLDE2KTsKKyAgICAgICAgIC8qIFdlIGFsc28gbmVlZCB0byBjb3B5IHRoZSBvdXRwdXQgc28gYXMgdG8gZ2V0IGNvcnJlY3QgYWRhcHRhdGlvbiAqLworICAgICAgICAgZm9yIChpPTA7aTxzdC0+ZnJhbWVfc2l6ZTtpKyspCisgICAgICAgICAgICBzdC0+eVtpK3N0LT5mcmFtZV9zaXplXSA9IHN0LT5lW2krc3QtPmZyYW1lX3NpemVdOworICAgICAgICAgZm9yIChpPTA7aTxzdC0+ZnJhbWVfc2l6ZTtpKyspCisgICAgICAgICAgICBzdC0+eFtpK3N0LT5mcmFtZV9zaXplXSA9IFNVQjE2KHN0LT5pbnB1dFtpXSwgc3QtPnlbaStzdC0+ZnJhbWVfc2l6ZV0pOworICAgICAgICAgU2VlID0gU2ZmOworICAgICAgICAgc3QtPkRhdmcxID0gc3QtPkRhdmcyID0gMDsKKyAgICAgICAgIHN0LT5EdmFyMSA9IHN0LT5EdmFyMiA9IEZMT0FUX1pFUk87CisgICAgICB9CisgICB9CisjZW5kaWYKKworICAgLyogQ29tcHV0ZSBlcnJvciBzaWduYWwgKGZvciB0aGUgb3V0cHV0IHdpdGggZGUtZW1waGFzaXMpICovIAorICAgZm9yIChpPTA7aTxzdC0+ZnJhbWVfc2l6ZTtpKyspCisgICB7CisgICAgICBzcHhfd29yZDMyX3QgdG1wX291dDsKKyNpZmRlZiBUV09fUEFUSAorICAgICAgdG1wX291dCA9IFNVQjMyKEVYVEVORDMyKHN0LT5pbnB1dFtpXSksIEVYVEVORDMyKHN0LT5lW2krc3QtPmZyYW1lX3NpemVdKSk7CisjZWxzZQorICAgICAgdG1wX291dCA9IFNVQjMyKEVYVEVORDMyKHN0LT5pbnB1dFtpXSksIEVYVEVORDMyKHN0LT55W2krc3QtPmZyYW1lX3NpemVdKSk7CisjZW5kaWYKKyAgICAgIC8qIFNhdHVyYXRpb24gKi8KKyAgICAgIGlmICh0bXBfb3V0PjMyNzY3KQorICAgICAgICAgdG1wX291dCA9IDMyNzY3OworICAgICAgZWxzZSBpZiAodG1wX291dDwtMzI3NjgpCisgICAgICAgICB0bXBfb3V0ID0gLTMyNzY4OworICAgICAgdG1wX291dCA9IEFERDMyKHRtcF9vdXQsIEVYVEVORDMyKE1VTFQxNl8xNl9QMTUoc3QtPnByZWVtcGgsIHN0LT5tZW1FKSkpOworICAgICAgLyogVGhpcyBpcyBhbiBhcmJpdHJhcnkgdGVzdCBmb3Igc2F0dXJhdGlvbiBpbiB0aGUgbWljcm9waG9uZSBzaWduYWwgKi8KKyAgICAgIGlmIChpbltpXSA8PSAtMzIwMDAgfHwgaW5baV0gPj0gMzIwMDApCisgICAgICB7CisgICAgICAgICB0bXBfb3V0ID0gMDsKKyAgICAgICAgIGlmIChzdC0+c2F0dXJhdGVkID09IDApCisgICAgICAgICAgICBzdC0+c2F0dXJhdGVkID0gMTsKKyAgICAgIH0KKyAgICAgIG91dFtpXSA9IChzcHhfaW50MTZfdCl0bXBfb3V0OworICAgICAgc3QtPm1lbUUgPSB0bXBfb3V0OworICAgfQorICAgCisjaWZkZWYgRFVNUF9FQ0hPX0NBTkNFTF9EQVRBCisgICBkdW1wX2F1ZGlvKGluLCBmYXJfZW5kLCBvdXQsIHN0LT5mcmFtZV9zaXplKTsKKyNlbmRpZgorICAgCisgICAvKiBDb21wdXRlIGVycm9yIHNpZ25hbCAoZmlsdGVyIHVwZGF0ZSB2ZXJzaW9uKSAqLyAKKyAgIGZvciAoaT0wO2k8c3QtPmZyYW1lX3NpemU7aSsrKQorICAgeworICAgICAgc3QtPmVbaV0gPSAwOworICAgICAgc3QtPmVbaStzdC0+ZnJhbWVfc2l6ZV0gPSBzdC0+eFtpK3N0LT5mcmFtZV9zaXplXTsKKyAgIH0KKworICAgLyogQ29tcHV0ZSBhIGJ1bmNoIG9mIGNvcnJlbGF0aW9ucyAqLworICAgU2V5ID0gbWRmX2lubmVyX3Byb2Qoc3QtPmUrc3QtPmZyYW1lX3NpemUsIHN0LT55K3N0LT5mcmFtZV9zaXplLCBzdC0+ZnJhbWVfc2l6ZSk7CisgICBTeXkgPSBtZGZfaW5uZXJfcHJvZChzdC0+eStzdC0+ZnJhbWVfc2l6ZSwgc3QtPnkrc3QtPmZyYW1lX3NpemUsIHN0LT5mcmFtZV9zaXplKTsKKyAgIFNkZCA9IG1kZl9pbm5lcl9wcm9kKHN0LT5pbnB1dCwgc3QtPmlucHV0LCBzdC0+ZnJhbWVfc2l6ZSk7CisgICAKKyAgIC8qcHJpbnRmICgiJWYgJWYgJWYgJWZcbiIsIFNmZiwgU2VlLCBTeXksIFNkZCwgc3QtPnVwZGF0ZV9jb25kKTsqLworICAgCisgICAvKiBEbyBzb21lIHNhbml0eSBjaGVjayAqLworICAgaWYgKCEoU3l5Pj0wICYmIFN4eD49MCAmJiBTZWUgPj0gMCkKKyNpZm5kZWYgRklYRURfUE9JTlQKKyAgICAgICB8fCAhKFNmZiA8IE4qMWU5ICYmIFN5eSA8IE4qMWU5ICYmIFN4eCA8IE4qMWU5KQorI2VuZGlmCisgICAgICApCisgICB7CisgICAgICAvKiBUaGluZ3MgaGF2ZSBnb25lIHJlYWxseSBiYWQgKi8KKyAgICAgIHN0LT5zY3Jld2VkX3VwICs9IDUwOworICAgICAgZm9yIChpPTA7aTxzdC0+ZnJhbWVfc2l6ZTtpKyspCisgICAgICAgICBvdXRbaV0gPSAwOworICAgfSBlbHNlIGlmIChTSFIzMihTZmYsIDIpID4gQUREMzIoU2RkLCBTSFIzMihNVUxUMTZfMTYoTiwgMTAwMDApLDYpKSkKKyAgIHsKKyAgICAgIC8qIEFFQyBzZWVtcyB0byBhZGQgbG90cyBvZiBlY2hvIGluc3RlYWQgb2YgcmVtb3ZpbmcgaXQsIGxldCdzIHNlZSBpZiBpdCB3aWxsIGltcHJvdmUgKi8KKyAgICAgIHN0LT5zY3Jld2VkX3VwKys7CisgICB9IGVsc2UgeworICAgICAgLyogRXZlcnl0aGluZydzIGZpbmUgKi8KKyAgICAgIHN0LT5zY3Jld2VkX3VwPTA7CisgICB9CisgICBpZiAoc3QtPnNjcmV3ZWRfdXA+PTUwKQorICAgeworICAgICAgc3BlZXhfd2FybmluZygiVGhlIGVjaG8gY2FuY2VsbGVyIHN0YXJ0ZWQgYWN0aW5nIGZ1bm55IGFuZCBnb3Qgc2xhcHBlZCAocmVzZXQpLiBJdCBzd2VhcnMgaXQgd2lsbCBiZWhhdmUgbm93LiIpOworICAgICAgc3BlZXhfZWNob19zdGF0ZV9yZXNldChzdCk7CisgICAgICByZXR1cm47CisgICB9CisKKyAgIC8qIEFkZCBhIHNtYWxsIG5vaXNlIGZsb29yIHRvIG1ha2Ugc3VyZSBub3QgdG8gaGF2ZSBwcm9ibGVtcyB3aGVuIGRpdmlkaW5nICovCisgICBTZWUgPSBNQVgzMihTZWUsIFNIUjMyKE1VTFQxNl8xNihOLCAxMDApLDYpKTsKKworICAgLyogQ29udmVydCBlcnJvciB0byBmcmVxdWVuY3kgZG9tYWluICovCisgICBzcHhfZmZ0KHN0LT5mZnRfdGFibGUsIHN0LT5lLCBzdC0+RSk7CisgICBmb3IgKGk9MDtpPHN0LT5mcmFtZV9zaXplO2krKykKKyAgICAgIHN0LT55W2ldID0gMDsKKyAgIHNweF9mZnQoc3QtPmZmdF90YWJsZSwgc3QtPnksIHN0LT5ZKTsKKworICAgLyogQ29tcHV0ZSBwb3dlciBzcGVjdHJ1bSBvZiBmYXIgZW5kIChYKSwgZXJyb3IgKEUpIGFuZCBmaWx0ZXIgcmVzcG9uc2UgKFkpICovCisgICBwb3dlcl9zcGVjdHJ1bShzdC0+RSwgc3QtPlJmLCBOKTsKKyAgIHBvd2VyX3NwZWN0cnVtKHN0LT5ZLCBzdC0+WWYsIE4pOworICAgcG93ZXJfc3BlY3RydW0oc3QtPlgsIHN0LT5YZiwgTik7CisgICAKKyAgIC8qIFNtb290aCBmYXIgZW5kIGVuZXJneSBlc3RpbWF0ZSBvdmVyIHRpbWUgKi8KKyAgIGZvciAoaj0wO2o8PXN0LT5mcmFtZV9zaXplO2orKykKKyAgICAgIHN0LT5wb3dlcltqXSA9IE1VTFQxNl8zMl9RMTUoc3NfMSxzdC0+cG93ZXJbal0pICsgMSArIE1VTFQxNl8zMl9RMTUoc3Msc3QtPlhmW2pdKTsKKyAgIAorICAgLyogRW5hYmxlIHRoaXMgdG8gY29tcHV0ZSB0aGUgcG93ZXIgYmFzZWQgb25seSBvbiB0aGUgdGFpbCAod291bGQgbmVlZCB0byBjb21wdXRlIG1vcmUgCisgICAgICBlZmZpY2llbnRseSB0byBtYWtlIHRoaXMgcmVhbGx5IHVzZWZ1bCAqLworICAgaWYgKDApCisgICB7CisgICAgICBmbG9hdCBzY2FsZTIgPSAuNWYvTTsKKyAgICAgIGZvciAoaj0wO2o8PXN0LT5mcmFtZV9zaXplO2orKykKKyAgICAgICAgIHN0LT5wb3dlcltqXSA9IDEwMDsKKyAgICAgIGZvciAoaT0wO2k8TTtpKyspCisgICAgICB7CisgICAgICAgICBwb3dlcl9zcGVjdHJ1bSgmc3QtPlhbaSpOXSwgc3QtPlhmLCBOKTsKKyAgICAgICAgIGZvciAoaj0wO2o8PXN0LT5mcmFtZV9zaXplO2orKykKKyAgICAgICAgICAgIHN0LT5wb3dlcltqXSArPSBzY2FsZTIqc3QtPlhmW2pdOworICAgICAgfQorICAgfQorCisgICAvKiBDb21wdXRlIGZpbHRlcmVkIHNwZWN0cmEgYW5kIChjcm9zcy0pY29ycmVsYXRpb25zICovCisgICBmb3IgKGo9c3QtPmZyYW1lX3NpemU7aj49MDtqLS0pCisgICB7CisgICAgICBzcHhfZmxvYXRfdCBFaCwgWWg7CisgICAgICBFaCA9IFBTRVVET0ZMT0FUKHN0LT5SZltqXSAtIHN0LT5FaFtqXSk7CisgICAgICBZaCA9IFBTRVVET0ZMT0FUKHN0LT5ZZltqXSAtIHN0LT5ZaFtqXSk7CisgICAgICBQZXkgPSBGTE9BVF9BREQoUGV5LEZMT0FUX01VTFQoRWgsWWgpKTsKKyAgICAgIFB5eSA9IEZMT0FUX0FERChQeXksRkxPQVRfTVVMVChZaCxZaCkpOworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICBzdC0+RWhbal0gPSBNQUMxNl8zMl9RMTUoTVVMVDE2XzMyX1ExNShTVUIxNigzMjc2NyxzdC0+c3BlY19hdmVyYWdlKSxzdC0+RWhbal0pLCBzdC0+c3BlY19hdmVyYWdlLCBzdC0+UmZbal0pOworICAgICAgc3QtPlloW2pdID0gTUFDMTZfMzJfUTE1KE1VTFQxNl8zMl9RMTUoU1VCMTYoMzI3Njcsc3QtPnNwZWNfYXZlcmFnZSksc3QtPlloW2pdKSwgc3QtPnNwZWNfYXZlcmFnZSwgc3QtPllmW2pdKTsKKyNlbHNlCisgICAgICBzdC0+RWhbal0gPSAoMS1zdC0+c3BlY19hdmVyYWdlKSpzdC0+RWhbal0gKyBzdC0+c3BlY19hdmVyYWdlKnN0LT5SZltqXTsKKyAgICAgIHN0LT5ZaFtqXSA9ICgxLXN0LT5zcGVjX2F2ZXJhZ2UpKnN0LT5ZaFtqXSArIHN0LT5zcGVjX2F2ZXJhZ2Uqc3QtPllmW2pdOworI2VuZGlmCisgICB9CisgICAKKyAgIFB5eSA9IEZMT0FUX1NRUlQoUHl5KTsKKyAgIFBleSA9IEZMT0FUX0RJVlUoUGV5LFB5eSk7CisKKyAgIC8qIENvbXB1dGUgY29ycmVsYXRpb24gdXBkYXRldGUgcmF0ZSAqLworICAgdG1wMzIgPSBNVUxUMTZfMzJfUTE1KHN0LT5iZXRhMCxTeXkpOworICAgaWYgKHRtcDMyID4gTVVMVDE2XzMyX1ExNShzdC0+YmV0YV9tYXgsU2VlKSkKKyAgICAgIHRtcDMyID0gTVVMVDE2XzMyX1ExNShzdC0+YmV0YV9tYXgsU2VlKTsKKyAgIGFscGhhID0gRkxPQVRfRElWMzIodG1wMzIsIFNlZSk7CisgICBhbHBoYV8xID0gRkxPQVRfU1VCKEZMT0FUX09ORSwgYWxwaGEpOworICAgLyogVXBkYXRlIGNvcnJlbGF0aW9ucyAocmVjdXJzaXZlIGF2ZXJhZ2UpICovCisgICBzdC0+UGV5ID0gRkxPQVRfQUREKEZMT0FUX01VTFQoYWxwaGFfMSxzdC0+UGV5KSAsIEZMT0FUX01VTFQoYWxwaGEsUGV5KSk7CisgICBzdC0+UHl5ID0gRkxPQVRfQUREKEZMT0FUX01VTFQoYWxwaGFfMSxzdC0+UHl5KSAsIEZMT0FUX01VTFQoYWxwaGEsUHl5KSk7CisgICBpZiAoRkxPQVRfTFQoc3QtPlB5eSwgRkxPQVRfT05FKSkKKyAgICAgIHN0LT5QeXkgPSBGTE9BVF9PTkU7CisgICAvKiBXZSBkb24ndCByZWFsbHkgaG9wZSB0byBnZXQgYmV0dGVyIHRoYW4gMzMgZEIgKE1JTl9MRUFLLTNkQikgYXR0ZW51YXRpb24gYW55d2F5ICovCisgICBpZiAoRkxPQVRfTFQoc3QtPlBleSwgRkxPQVRfTVVMVChNSU5fTEVBSyxzdC0+UHl5KSkpCisgICAgICBzdC0+UGV5ID0gRkxPQVRfTVVMVChNSU5fTEVBSyxzdC0+UHl5KTsKKyAgIGlmIChGTE9BVF9HVChzdC0+UGV5LCBzdC0+UHl5KSkKKyAgICAgIHN0LT5QZXkgPSBzdC0+UHl5OworICAgLyogbGVha19lc3RpbWF0ZSBpcyB0aGUgbGluZWFyIHJlZ3Jlc3Npb24gcmVzdWx0ICovCisgICBzdC0+bGVha19lc3RpbWF0ZSA9IEZMT0FUX0VYVFJBQ1QxNihGTE9BVF9TSEwoRkxPQVRfRElWVShzdC0+UGV5LCBzdC0+UHl5KSwxNCkpOworICAgLyogVGhpcyBsb29rcyBsaWtlIGEgc3R1cGlkIGJ1ZywgYnV0IGl0J3MgcmlnaHQgKGJlY2F1c2Ugd2UgY29udmVydCBmcm9tIFExNCB0byBRMTUpICovCisgICBpZiAoc3QtPmxlYWtfZXN0aW1hdGUgPiAxNjM4MykKKyAgICAgIHN0LT5sZWFrX2VzdGltYXRlID0gMzI3Njc7CisgICBlbHNlCisgICAgICBzdC0+bGVha19lc3RpbWF0ZSA9IFNITDE2KHN0LT5sZWFrX2VzdGltYXRlLDEpOworICAgLypwcmludGYgKCIlZlxuIiwgc3QtPmxlYWtfZXN0aW1hdGUpOyovCisgICAKKyAgIC8qIENvbXB1dGUgUmVzaWR1YWwgdG8gRXJyb3IgUmF0aW8gKi8KKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgdG1wMzIgPSBNVUxUMTZfMzJfUTE1KHN0LT5sZWFrX2VzdGltYXRlLFN5eSk7CisgICB0bXAzMiA9IEFERDMyKFNIUjMyKFN4eCwxMyksIEFERDMyKHRtcDMyLCBTSEwzMih0bXAzMiwxKSkpOworICAgLyogQ2hlY2sgZm9yIHkgaW4gZSAobG93ZXIgYm91bmQgb24gUkVSKSAqLworICAgeworICAgICAgc3B4X2Zsb2F0X3QgYm91bmQgPSBQU0VVRE9GTE9BVChTZXkpOworICAgICAgYm91bmQgPSBGTE9BVF9ESVZVKEZMT0FUX01VTFQoYm91bmQsIGJvdW5kKSwgUFNFVURPRkxPQVQoQUREMzIoMSxTeXkpKSk7CisgICAgICBpZiAoRkxPQVRfR1QoYm91bmQsIFBTRVVET0ZMT0FUKFNlZSkpKQorICAgICAgICAgdG1wMzIgPSBTZWU7CisgICAgICBlbHNlIGlmICh0bXAzMiA8IEZMT0FUX0VYVFJBQ1QzMihib3VuZCkpCisgICAgICAgICB0bXAzMiA9IEZMT0FUX0VYVFJBQ1QzMihib3VuZCk7CisgICB9CisgICBpZiAodG1wMzIgPiBTSFIzMihTZWUsMSkpCisgICAgICB0bXAzMiA9IFNIUjMyKFNlZSwxKTsKKyAgIFJFUiA9IEZMT0FUX0VYVFJBQ1QxNihGTE9BVF9TSEwoRkxPQVRfRElWMzIodG1wMzIsU2VlKSwxNSkpOworI2Vsc2UKKyAgIFJFUiA9ICguMDAwMSpTeHggKyAzLipNVUxUMTZfMzJfUTE1KHN0LT5sZWFrX2VzdGltYXRlLFN5eSkpIC8gU2VlOworICAgLyogQ2hlY2sgZm9yIHkgaW4gZSAobG93ZXIgYm91bmQgb24gUkVSKSAqLworICAgaWYgKFJFUiA8IFNleSpTZXkvKDErU2VlKlN5eSkpCisgICAgICBSRVIgPSBTZXkqU2V5LygxK1NlZSpTeXkpOworICAgaWYgKFJFUiA+IC41KQorICAgICAgUkVSID0gLjU7CisjZW5kaWYKKworICAgLyogV2UgY29uc2lkZXIgdGhhdCB0aGUgZmlsdGVyIGhhcyBoYWQgbWluaW1hbCBhZGFwdGF0aW9uIGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZSovCisgICBpZiAoIXN0LT5hZGFwdGVkICYmIHN0LT5zdW1fYWRhcHQgPiBRQ09OU1QzMihNLDE1KSAmJiBNVUxUMTZfMzJfUTE1KHN0LT5sZWFrX2VzdGltYXRlLFN5eSkgPiBNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC4wM2YsMTUpLFN5eSkpCisgICB7CisgICAgICBzdC0+YWRhcHRlZCA9IDE7CisgICB9CisKKyAgIGlmIChzdC0+YWRhcHRlZCkKKyAgIHsKKyAgICAgIC8qIE5vcm1hbCBsZWFybmluZyByYXRlIGNhbGN1bGF0aW9uIG9uY2Ugd2UncmUgcGFzdCB0aGUgbWluaW1hbCBhZGFwdGF0aW9uIHBoYXNlICovCisgICAgICBmb3IgKGk9MDtpPD1zdC0+ZnJhbWVfc2l6ZTtpKyspCisgICAgICB7CisgICAgICAgICBzcHhfd29yZDMyX3QgciwgZTsKKyAgICAgICAgIC8qIENvbXB1dGUgZnJlcXVlbmN5LWRvbWFpbiBhZGFwdGF0aW9uIG1hc2sgKi8KKyAgICAgICAgIHIgPSBNVUxUMTZfMzJfUTE1KHN0LT5sZWFrX2VzdGltYXRlLFNITDMyKHN0LT5ZZltpXSwzKSk7CisgICAgICAgICBlID0gU0hMMzIoc3QtPlJmW2ldLDMpKzE7CisjaWZkZWYgRklYRURfUE9JTlQKKyAgICAgICAgIGlmIChyPlNIUjMyKGUsMSkpCisgICAgICAgICAgICByID0gU0hSMzIoZSwxKTsKKyNlbHNlCisgICAgICAgICBpZiAocj4uNSplKQorICAgICAgICAgICAgciA9IC41KmU7CisjZW5kaWYKKyAgICAgICAgIHIgPSBNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC43LDE1KSxyKSArIE1VTFQxNl8zMl9RMTUoUUNPTlNUMTYoLjMsMTUpLChzcHhfd29yZDMyX3QpKE1VTFQxNl8zMl9RMTUoUkVSLGUpKSk7CisgICAgICAgICAvKnN0LT5wb3dlcl8xW2ldID0gYWRhcHRfcmF0ZSpyLyhlKigxK3N0LT5wb3dlcltpXSkpOyovCisgICAgICAgICBzdC0+cG93ZXJfMVtpXSA9IEZMT0FUX1NITChGTE9BVF9ESVYzMl9GTE9BVChyLEZMT0FUX01VTDMyVShlLHN0LT5wb3dlcltpXSsxMCkpLFdFSUdIVF9TSElGVCsxNik7CisgICAgICB9CisgICB9IGVsc2UgeworICAgICAgLyogVGVtcG9yYXJ5IGFkYXB0aW9uIHJhdGUgaWYgZmlsdGVyIGlzIG5vdCB5ZXQgYWRhcHRlZCBlbm91Z2ggKi8KKyAgICAgIHNweF93b3JkMTZfdCBhZGFwdF9yYXRlPTA7CisKKyAgICAgIGlmIChTeHggPiBTSFIzMihNVUxUMTZfMTYoTiwgMTAwMCksNikpIAorICAgICAgeworICAgICAgICAgdG1wMzIgPSBNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC4yNWYsIDE1KSwgU3h4KTsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgICAgICAgaWYgKHRtcDMyID4gU0hSMzIoU2VlLDIpKQorICAgICAgICAgICAgdG1wMzIgPSBTSFIzMihTZWUsMik7CisjZWxzZQorICAgICAgICAgaWYgKHRtcDMyID4gLjI1KlNlZSkKKyAgICAgICAgICAgIHRtcDMyID0gLjI1KlNlZTsKKyNlbmRpZgorICAgICAgICAgYWRhcHRfcmF0ZSA9IEZMT0FUX0VYVFJBQ1QxNihGTE9BVF9TSEwoRkxPQVRfRElWMzIodG1wMzIsIFNlZSksMTUpKTsKKyAgICAgIH0KKyAgICAgIGZvciAoaT0wO2k8PXN0LT5mcmFtZV9zaXplO2krKykKKyAgICAgICAgIHN0LT5wb3dlcl8xW2ldID0gRkxPQVRfU0hMKEZMT0FUX0RJVjMyKEVYVEVORDMyKGFkYXB0X3JhdGUpLEFERDMyKHN0LT5wb3dlcltpXSwxMCkpLFdFSUdIVF9TSElGVCsxKTsKKworCisgICAgICAvKiBIb3cgbXVjaCBoYXZlIHdlIGFkYXB0ZWQgc28gZmFyPyAqLworICAgICAgc3QtPnN1bV9hZGFwdCA9IEFERDMyKHN0LT5zdW1fYWRhcHQsYWRhcHRfcmF0ZSk7CisgICB9CisKKyAgIC8qIFNhdmUgcmVzaWR1YWwgZWNobyBzbyBpdCBjYW4gYmUgdXNlZCBieSB0aGUgbm9ubGluZWFyIHByb2Nlc3NvciAqLworICAgaWYgKHN0LT5hZGFwdGVkKQorICAgeworICAgICAgLyogSWYgdGhlIGZpbHRlciBpcyBhZGFwdGVkLCB0YWtlIHRoZSBmaWx0ZXJlZCBlY2hvICovCisgICAgICBmb3IgKGk9MDtpPHN0LT5mcmFtZV9zaXplO2krKykKKyAgICAgICAgIHN0LT5sYXN0X3lbaV0gPSBzdC0+bGFzdF95W3N0LT5mcmFtZV9zaXplK2ldOworICAgICAgZm9yIChpPTA7aTxzdC0+ZnJhbWVfc2l6ZTtpKyspCisgICAgICAgICBzdC0+bGFzdF95W3N0LT5mcmFtZV9zaXplK2ldID0gaW5baV0tb3V0W2ldOworICAgfSBlbHNlIHsKKyAgICAgIC8qIElmIGZpbHRlciBpc24ndCBhZGFwdGVkIHlldCwgYWxsIHdlIGNhbiBkbyBpcyB0YWtlIHRoZSBmYXIgZW5kIHNpZ25hbCBkaXJlY3RseSAqLworICAgICAgLyogbW92ZWQgZWFybGllcjogZm9yIChpPTA7aTxOO2krKykKKyAgICAgIHN0LT5sYXN0X3lbaV0gPSBzdC0+eFtpXTsqLworICAgfQorCit9CisKKy8qIENvbXB1dGUgc3BlY3RydW0gb2YgZXN0aW1hdGVkIGVjaG8gZm9yIHVzZSBpbiBhbiBlY2hvIHBvc3QtZmlsdGVyICovCit2b2lkIHNwZWV4X2VjaG9fZ2V0X3Jlc2lkdWFsKFNwZWV4RWNob1N0YXRlICpzdCwgc3B4X3dvcmQzMl90ICpyZXNpZHVhbF9lY2hvLCBpbnQgbGVuKQoreworICAgaW50IGk7CisgICBzcHhfd29yZDE2X3QgbGVhazI7CisgICBpbnQgTjsKKyAgIAorICAgTiA9IHN0LT53aW5kb3dfc2l6ZTsKKworICAgLyogQXBwbHkgaGFubmluZyB3aW5kb3cgKHNob3VsZCBwcmUtY29tcHV0ZSBpdCkqLworICAgZm9yIChpPTA7aTxOO2krKykKKyAgICAgIHN0LT55W2ldID0gTVVMVDE2XzE2X1ExNShzdC0+d2luZG93W2ldLHN0LT5sYXN0X3lbaV0pOworICAgICAgCisgICAvKiBDb21wdXRlIHBvd2VyIHNwZWN0cnVtIG9mIHRoZSBlY2hvICovCisgICBzcHhfZmZ0KHN0LT5mZnRfdGFibGUsIHN0LT55LCBzdC0+WSk7CisgICBwb3dlcl9zcGVjdHJ1bShzdC0+WSwgcmVzaWR1YWxfZWNobywgTik7CisgICAgICAKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgaWYgKHN0LT5sZWFrX2VzdGltYXRlID4gMTYzODMpCisgICAgICBsZWFrMiA9IDMyNzY3OworICAgZWxzZQorICAgICAgbGVhazIgPSBTSEwxNihzdC0+bGVha19lc3RpbWF0ZSwgMSk7CisjZWxzZQorICAgaWYgKHN0LT5sZWFrX2VzdGltYXRlPi41KQorICAgICAgbGVhazIgPSAxOworICAgZWxzZQorICAgICAgbGVhazIgPSAyKnN0LT5sZWFrX2VzdGltYXRlOworI2VuZGlmCisgICAvKiBFc3RpbWF0ZSByZXNpZHVhbCBlY2hvICovCisgICBmb3IgKGk9MDtpPD1zdC0+ZnJhbWVfc2l6ZTtpKyspCisgICAgICByZXNpZHVhbF9lY2hvW2ldID0gKHNweF9pbnQzMl90KU1VTFQxNl8zMl9RMTUobGVhazIscmVzaWR1YWxfZWNob1tpXSk7CisgICAKK30KKworaW50IHNwZWV4X2VjaG9fY3RsKFNwZWV4RWNob1N0YXRlICpzdCwgaW50IHJlcXVlc3QsIHZvaWQgKnB0cikKK3sKKyAgIHN3aXRjaChyZXF1ZXN0KQorICAgeworICAgICAgCisgICAgICBjYXNlIFNQRUVYX0VDSE9fR0VUX0ZSQU1FX1NJWkU6CisgICAgICAgICAoKihpbnQqKXB0cikgPSBzdC0+ZnJhbWVfc2l6ZTsKKyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTUEVFWF9FQ0hPX1NFVF9TQU1QTElOR19SQVRFOgorICAgICAgICAgc3QtPnNhbXBsaW5nX3JhdGUgPSAoKihpbnQqKXB0cik7CisgICAgICAgICBzdC0+c3BlY19hdmVyYWdlID0gRElWMzJfMTYoU0hMMzIoRVhURU5EMzIoc3QtPmZyYW1lX3NpemUpLCAxNSksIHN0LT5zYW1wbGluZ19yYXRlKTsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgICAgICAgc3QtPmJldGEwID0gRElWMzJfMTYoU0hMMzIoRVhURU5EMzIoc3QtPmZyYW1lX3NpemUpLCAxNiksIHN0LT5zYW1wbGluZ19yYXRlKTsKKyAgICAgICAgIHN0LT5iZXRhX21heCA9IERJVjMyXzE2KFNITDMyKEVYVEVORDMyKHN0LT5mcmFtZV9zaXplKSwgMTQpLCBzdC0+c2FtcGxpbmdfcmF0ZSk7CisjZWxzZQorICAgICAgICAgc3QtPmJldGEwID0gKDIuMGYqc3QtPmZyYW1lX3NpemUpL3N0LT5zYW1wbGluZ19yYXRlOworICAgICAgICAgc3QtPmJldGFfbWF4ID0gKC41ZipzdC0+ZnJhbWVfc2l6ZSkvc3QtPnNhbXBsaW5nX3JhdGU7CisjZW5kaWYKKyAgICAgICAgIGlmIChzdC0+c2FtcGxpbmdfcmF0ZTwxMjAwMCkKKyAgICAgICAgICAgIHN0LT5ub3RjaF9yYWRpdXMgPSBRQ09OU1QxNiguOSwgMTUpOworICAgICAgICAgZWxzZSBpZiAoc3QtPnNhbXBsaW5nX3JhdGU8MjQwMDApCisgICAgICAgICAgICBzdC0+bm90Y2hfcmFkaXVzID0gUUNPTlNUMTYoLjk4MiwgMTUpOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgc3QtPm5vdGNoX3JhZGl1cyA9IFFDT05TVDE2KC45OTIsIDE1KTsKKyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTUEVFWF9FQ0hPX0dFVF9TQU1QTElOR19SQVRFOgorICAgICAgICAgKCooaW50KilwdHIpID0gc3QtPnNhbXBsaW5nX3JhdGU7CisgICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgICBzcGVleF93YXJuaW5nX2ludCgiVW5rbm93biBzcGVleF9lY2hvX2N0bCByZXF1ZXN0OiAiLCByZXF1ZXN0KTsKKyAgICAgICAgIHJldHVybiAtMTsKKyAgIH0KKyAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbWVkZmlsdGVyLmMgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9tZWRmaWx0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzg3MmU1Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbWVkZmlsdGVyLmMKQEAgLTAsMCArMSw5NyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA0IEplYW4tTWFyYyBWYWxpbgorICAgRmlsZSBtZWRmaWx0ZXIuYworICAgTWVkaWFuIGZpbHRlcgorCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjaW5jbHVkZSAibWVkZmlsdGVyLmgiCisjaW5jbHVkZSAibWlzYy5oIgorCitNZWRpYW5GaWx0ZXIgKm1lZGlhbl9maWx0ZXJfbmV3KGludCBOKQoreworICAgTWVkaWFuRmlsdGVyICpmID0gKE1lZGlhbkZpbHRlciopc3BlZXhfYWxsb2Moc2l6ZW9mKE1lZGlhbkZpbHRlcikpOworICAgZi0+TiA9IE47CisgICBmLT5pZHMgPSAoaW50KilzcGVleF9hbGxvYyhzaXplb2YoaW50KSpOKTsKKyAgIGYtPnZhbCA9IChmbG9hdCopc3BlZXhfYWxsb2Moc2l6ZW9mKGZsb2F0KSpOKTsKKyAgIGYtPmZpbGxlZCA9IDA7CisgICByZXR1cm4gZjsKK30KKwordm9pZCBtZWRpYW5fZmlsdGVyX3VwZGF0ZShNZWRpYW5GaWx0ZXIgKmYsIGZsb2F0IHZhbCkKK3sKKyAgIGludCBpPTA7CisgICBpbnQgaW5zZXJ0ID0gMDsKKyAgIHdoaWxlIChpbnNlcnQ8Zi0+ZmlsbGVkICYmIGYtPnZhbFtpbnNlcnRdIDwgdmFsKQorICAgeworICAgICAgaW5zZXJ0Kys7CisgICB9CisgICBpZiAoZi0+ZmlsbGVkID09IGYtPk4pCisgICB7CisgICAgICBpbnQgcmVtb3ZlOworICAgICAgZm9yIChyZW1vdmU9MDtyZW1vdmU8Zi0+TjtyZW1vdmUrKykKKyAgICAgICAgIGlmIChmLT5pZHNbcmVtb3ZlXSA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICBpZiAoaW5zZXJ0PnJlbW92ZSkKKyAgICAgICAgIGluc2VydC0tOworICAgICAgaWYgKGluc2VydCA+IHJlbW92ZSkKKyAgICAgIHsKKyAgICAgICAgIGZvciAoaT1yZW1vdmU7aTxpbnNlcnQ7aSsrKQorICAgICAgICAgeworICAgICAgICAgICAgZi0+dmFsW2ldID0gZi0+dmFsW2krMV07CisgICAgICAgICAgICBmLT5pZHNbaV0gPSBmLT5pZHNbaSsxXTsKKyAgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAoaW5zZXJ0IDwgcmVtb3ZlKQorICAgICAgeworICAgICAgICAgZm9yIChpPXJlbW92ZTtpPmluc2VydDtpLS0pCisgICAgICAgICB7CisgICAgICAgICAgICBmLT52YWxbaV0gPSBmLT52YWxbaS0xXTsKKyAgICAgICAgICAgIGYtPmlkc1tpXSA9IGYtPmlkc1tpLTFdOworICAgICAgICAgfQorICAgICAgfQorICAgICAgZm9yIChpPTA7aTxmLT5maWxsZWQ7aSsrKQorICAgICAgICAgZi0+aWRzW2ldLS07CisgICB9IGVsc2UgeworICAgICAgZm9yIChpPWYtPmZpbGxlZDtpPmluc2VydDtpLS0pCisgICAgICB7CisgICAgICAgICBmLT52YWxbaV0gPSBmLT52YWxbaS0xXTsKKyAgICAgICAgIGYtPmlkc1tpXSA9IGYtPmlkc1tpLTFdOworICAgICAgfQorICAgICAgZi0+ZmlsbGVkKys7CisgICB9CisgICBmLT52YWxbaW5zZXJ0XT12YWw7CisgICBmLT5pZHNbaW5zZXJ0XT1mLT5maWxsZWQtMTsKK30KKworZmxvYXQgbWVkaWFuX2ZpbHRlcl9nZXQoTWVkaWFuRmlsdGVyICpmKQoreworICAgcmV0dXJuIGYtPnZhbFtmLT5maWxsZWQ+PjFdOworfQorCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9tZWRmaWx0ZXIuaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L21lZGZpbHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxODg2OWMKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9tZWRmaWx0ZXIuaApAQCAtMCwwICsxLDUxIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDQgSmVhbi1NYXJjIFZhbGluICovCisvKioKKyAgIEBmaWxlIG1lZGZpbHRlci5oCisgICBAYnJpZWYgTWVkaWFuIGZpbHRlcgorKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworKi8KKworI2lmbmRlZiBNRURGSUxURVJfSAorI2RlZmluZSBNRURGSUxURVJfSAorCisvKiogTWVkaWFuIGZpbHRlci4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIGludCBOOworICAgaW50IGZpbGxlZDsKKyAgIGludCAqaWRzOworICAgZmxvYXQgKnZhbDsKK30gTWVkaWFuRmlsdGVyOworCitNZWRpYW5GaWx0ZXIgKm1lZGlhbl9maWx0ZXJfbmV3KGludCBOKTsKK3ZvaWQgbWVkaWFuX2ZpbHRlcl91cGRhdGUoTWVkaWFuRmlsdGVyICpmLCBmbG9hdCB2YWwpOworZmxvYXQgbWVkaWFuX2ZpbHRlcl9nZXQoTWVkaWFuRmlsdGVyICpmKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9taXNjLmMgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdjZTdhOAotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L21pc2MuYwpAQCAtMCwwICsxLDE5NCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgSmVhbi1NYXJjIFZhbGluIAorICAgRmlsZTogbWlzYy5jCisgICBWYXJpb3VzIHV0aWxpdHkgcm91dGluZXMgZm9yIFNwZWV4CisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJtaXNjLmgiCisKKyNpZmRlZiBVU0VSX01JU0MKKyNpbmNsdWRlICJ1c2VyX21pc2MuaCIKKyNlbmRpZgorCisjaWZkZWYgQkZJTl9BU00KKyNpbmNsdWRlICJtaXNjX2JmaW4uaCIKKyNlbmRpZgorCisjaWZuZGVmIFJFTEVBU0UKK3ZvaWQgcHJpbnRfdmVjKGZsb2F0ICp2ZWMsIGludCBsZW4sIGNoYXIgKm5hbWUpCit7CisgICBpbnQgaTsKKyAgIHByaW50ZiAoIiVzICIsIG5hbWUpOworICAgZm9yIChpPTA7aTxsZW47aSsrKQorICAgICAgcHJpbnRmICgiICVmIiwgdmVjW2ldKTsKKyAgIHByaW50ZiAoIlxuIik7Cit9CisjZW5kaWYKKworI2lmZGVmIEZJWEVEX0RFQlVHCitsb25nIGxvbmcgc3B4X21pcHM9MDsKKyNlbmRpZgorCisKK3NweF91aW50MzJfdCBiZV9pbnQoc3B4X3VpbnQzMl90IGkpCit7CisgICBzcHhfdWludDMyX3QgcmV0PWk7CisjaWZuZGVmIFdPUkRTX0JJR0VORElBTgorICAgcmV0ID0gIGk+PjI0OworICAgcmV0ICs9IChpPj44KSYweDAwMDBmZjAwOworICAgcmV0ICs9IChpPDw4KSYweDAwZmYwMDAwOworICAgcmV0ICs9IChpPDwyNCk7CisjZW5kaWYKKyAgIHJldHVybiByZXQ7Cit9CisKK3NweF91aW50MzJfdCBsZV9pbnQoc3B4X3VpbnQzMl90IGkpCit7CisgICBzcHhfdWludDMyX3QgcmV0PWk7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgICByZXQgPSAgaT4+MjQ7CisgICByZXQgKz0gKGk+PjgpJjB4MDAwMGZmMDA7CisgICByZXQgKz0gKGk8PDgpJjB4MDBmZjAwMDA7CisgICByZXQgKz0gKGk8PDI0KTsKKyNlbmRpZgorICAgcmV0dXJuIHJldDsKK30KKworI2lmbmRlZiBPVkVSUklERV9TUEVFWF9BTExPQwordm9pZCAqc3BlZXhfYWxsb2MgKGludCBzaXplKQoreworICAgcmV0dXJuIGNhbGxvYyhzaXplLDEpOworfQorI2VuZGlmCisKKyNpZm5kZWYgT1ZFUlJJREVfU1BFRVhfQUxMT0NfU0NSQVRDSAordm9pZCAqc3BlZXhfYWxsb2Nfc2NyYXRjaCAoaW50IHNpemUpCit7CisgICByZXR1cm4gY2FsbG9jKHNpemUsMSk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBPVkVSUklERV9TUEVFWF9SRUFMTE9DCit2b2lkICpzcGVleF9yZWFsbG9jICh2b2lkICpwdHIsIGludCBzaXplKQoreworICAgcmV0dXJuIHJlYWxsb2MocHRyLCBzaXplKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIE9WRVJSSURFX1NQRUVYX0ZSRUUKK3ZvaWQgc3BlZXhfZnJlZSAodm9pZCAqcHRyKQoreworICAgZnJlZShwdHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgT1ZFUlJJREVfU1BFRVhfRlJFRV9TQ1JBVENICit2b2lkIHNwZWV4X2ZyZWVfc2NyYXRjaCAodm9pZCAqcHRyKQoreworICAgZnJlZShwdHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgT1ZFUlJJREVfU1BFRVhfTU9WRQordm9pZCAqc3BlZXhfbW92ZSAodm9pZCAqZGVzdCwgdm9pZCAqc3JjLCBpbnQgbikKK3sKKyAgIHJldHVybiBtZW1tb3ZlKGRlc3Qsc3JjLG4pOworfQorI2VuZGlmCisKKyNpZm5kZWYgT1ZFUlJJREVfU1BFRVhfRVJST1IKK3ZvaWQgc3BlZXhfZXJyb3IoY29uc3QgY2hhciAqc3RyKQoreworICAgZnByaW50ZiAoc3RkZXJyLCAiRmF0YWwgKGludGVybmFsKSBlcnJvcjogJXNcbiIsIHN0cik7CisgICBleGl0KDEpOworfQorI2VuZGlmCisKKyNpZm5kZWYgT1ZFUlJJREVfU1BFRVhfV0FSTklORwordm9pZCBzcGVleF93YXJuaW5nKGNvbnN0IGNoYXIgKnN0cikKK3sKKyNpZm5kZWYgRElTQUJMRV9XQVJOSU5HUworICAgZnByaW50ZiAoc3RkZXJyLCAid2FybmluZzogJXNcbiIsIHN0cik7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZuZGVmIE9WRVJSSURFX1NQRUVYX1dBUk5JTkdfSU5UCit2b2lkIHNwZWV4X3dhcm5pbmdfaW50KGNvbnN0IGNoYXIgKnN0ciwgaW50IHZhbCkKK3sKKyNpZm5kZWYgRElTQUJMRV9XQVJOSU5HUworICAgZnByaW50ZiAoc3RkZXJyLCAid2FybmluZzogJXMgJWRcbiIsIHN0ciwgdmFsKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZm5kZWYgT1ZFUlJJREVfU1BFRVhfTk9USUZZCit2b2lkIHNwZWV4X25vdGlmeShjb25zdCBjaGFyICpzdHIpCit7CisjaWZuZGVmIERJU0FCTEVfTk9USUZJQ0FUSU9OUworICAgZnByaW50ZiAoc3RkZXJyLCAibm90aWZpY2F0aW9uOiAlc1xuIiwgc3RyKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBGSVhFRF9QT0lOVAorc3B4X3dvcmQxNl90IHNwZWV4X3JhbmQoc3B4X3dvcmQxNl90IHN0ZCwgc3B4X2ludDMyX3QgKnNlZWQpCit7CisgICBzcHhfd29yZDMyX3QgcmVzOworICAgKnNlZWQgPSAxNjY0NTI1ICogKnNlZWQgKyAxMDEzOTA0MjIzOworICAgcmVzID0gTVVMVDE2XzE2KEVYVFJBQ1QxNihTSFIzMigqc2VlZCwxNikpLHN0ZCk7CisgICByZXR1cm4gRVhUUkFDVDE2KFBTSFIzMihTVUIzMihyZXMsIFNIUjMyKHJlcywgMykpLDE0KSk7Cit9CisjZWxzZQorc3B4X3dvcmQxNl90IHNwZWV4X3JhbmQoc3B4X3dvcmQxNl90IHN0ZCwgc3B4X2ludDMyX3QgKnNlZWQpCit7CisgICBjb25zdCB1bnNpZ25lZCBpbnQgamZsb25lID0gMHgzZjgwMDAwMDsKKyAgIGNvbnN0IHVuc2lnbmVkIGludCBqZmxtc2sgPSAweDAwN2ZmZmZmOworICAgdW5pb24ge2ludCBpOyBmbG9hdCBmO30gcmFuOworICAgKnNlZWQgPSAxNjY0NTI1ICogKnNlZWQgKyAxMDEzOTA0MjIzOworICAgcmFuLmkgPSBqZmxvbmUgfCAoamZsbXNrICYgKnNlZWQpOworICAgcmFuLmYgLT0gMS41OworICAgcmV0dXJuIDMuNDY0MipzdGQqcmFuLmY7Cit9CisjZW5kaWYKKworI2lmbmRlZiBPVkVSUklERV9TUEVFWF9QVVRDCit2b2lkIF9zcGVleF9wdXRjKGludCBjaCwgdm9pZCAqZmlsZSkKK3sKKyAgIEZJTEUgKmYgPSAoRklMRSAqKWZpbGU7CisgICBmcHJpbnRmKGYsICIlYyIsIGNoKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbWlzYy5oIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbWlzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1Y2YxYzAKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9taXNjLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiBKZWFuLU1hcmMgVmFsaW4gKi8KKy8qKgorICAgQGZpbGUgbWlzYy5oCisgICBAYnJpZWYgVmFyaW91cyBjb21wYXRpYmlsaXR5IHJvdXRpbmVzIGZvciBTcGVleAorKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgTUlTQ19ICisjZGVmaW5lIE1JU0NfSAorCisjaWZuZGVmIFNQRUVYX1ZFUlNJT04KKyNkZWZpbmUgU1BFRVhfTUFKT1JfVkVSU0lPTiAxICAgICAgICAgLyoqPCBNYWpvciBTcGVleCB2ZXJzaW9uLiAqLworI2RlZmluZSBTUEVFWF9NSU5PUl9WRVJTSU9OIDEgICAgICAgICAvKio8IE1pbm9yIFNwZWV4IHZlcnNpb24uICovCisjZGVmaW5lIFNQRUVYX01JQ1JPX1ZFUlNJT04gMTMgICAgICAgIC8qKjwgTWljcm8gU3BlZXggdmVyc2lvbi4gKi8KKyNkZWZpbmUgU1BFRVhfRVhUUkFfVkVSU0lPTiAiIiAgICAgICAgLyoqPCBFeHRyYSBTcGVleCB2ZXJzaW9uLiAqLworI2RlZmluZSBTUEVFWF9WRVJTSU9OICJzcGVleC0xLjJiZXRhMSIgIC8qKjwgU3BlZXggdmVyc2lvbiBzdHJpbmcuICovCisjZW5kaWYKKworLyogQSBjb3VwbGUgdGVzdCB0byBjYXRjaCBzdHVwaWQgb3B0aW9uIGNvbWJpbmF0aW9ucyAqLworI2lmZGVmIEZJWEVEX1BPSU5UCisKKyNpZmRlZiBfVVNFX1NTRQorI2Vycm9yIFNTRSBpcyBvbmx5IGZvciBmbG9hdGluZy1wb2ludAorI2VuZGlmCisjaWYgKChkZWZpbmVkIChBUk00X0FTTSl8fGRlZmluZWQgKEFSTTRfQVNNKSkgJiYgZGVmaW5lZChCRklOX0FTTSkpIHx8IChkZWZpbmVkIChBUk00X0FTTSkmJmRlZmluZWQoQVJNNUVfQVNNKSkKKyNlcnJvciBNYWtlIHVwIHlvdXIgbWluZC4gV2hhdCBDUFUgZG8geW91IGhhdmU/CisjZW5kaWYKKyNpZmRlZiBWT1JCSVNfUFNZQ0hPCisjZXJyb3IgVm9yYmlzLXBzeSBtb2RlbCBjdXJyZW50bHkgbm90IGltcGxlbWVudGVkIGluIGZpeGVkLXBvaW50CisjZW5kaWYKKworI2Vsc2UKKworI2lmIGRlZmluZWQgKEFSTTRfQVNNKSB8fCBkZWZpbmVkKEFSTTVFX0FTTSkgfHwgZGVmaW5lZChCRklOX0FTTSkKKyNlcnJvciBJIHN1cHBvc2UgeW91IGNhbiBoYXZlIGEgW0FSTTQvQVJNNUUvQmxhY2tmaW5dIHRoYXQgaGFzIGZsb2F0IGluc3RydWN0aW9ucz8KKyNlbmRpZgorI2lmZGVmIEZJWEVEX1BPSU5UX0RFQlVHCisjZXJyb3IgIkRvbid0IHlvdSB0aGluayBlbmFibGluZyBmaXhlZC1wb2ludCBpcyBhIGdvb2QgdGhpbmcgdG8gZG8gaWYgeW91IHdhbnQgdG8gZGVidWcgdGhhdD8iCisjZW5kaWYKKworCisjZW5kaWYKKworI2luY2x1ZGUgImFyY2guaCIKKworI2lmbmRlZiBSRUxFQVNFCisvKiogUHJpbnQgYSBuYW1lZCB2ZWN0b3IgdG8gc3Rkb3V0ICovCit2b2lkIHByaW50X3ZlYyhmbG9hdCAqdmVjLCBpbnQgbGVuLCBjaGFyICpuYW1lKTsKKyNlbmRpZgorCisvKiogQ29udmVydCBiaWcgZW5kaWFuICovCitzcHhfdWludDMyX3QgYmVfaW50KHNweF91aW50MzJfdCBpKTsKKy8qKiBDb252ZXJ0IGxpdHRsZSBlbmRpYW4gKi8KK3NweF91aW50MzJfdCBsZV9pbnQoc3B4X3VpbnQzMl90IGkpOworCisvKiogU3BlZXggd3JhcHBlciBmb3IgY2FsbG9jLiBUbyBkbyB5b3VyIG93biBkeW5hbWljIGFsbG9jYXRpb24sIGFsbCB5b3UgbmVlZCB0byBkbyBpcyByZXBsYWNlIHRoaXMgZnVuY3Rpb24sIHNwZWV4X3JlYWxsb2MgYW5kIHNwZWV4X2ZyZWUgKi8KK3ZvaWQgKnNwZWV4X2FsbG9jIChpbnQgc2l6ZSk7CisKKy8qKiBTYW1lIGFzIHNwZWV4X2FsbG9jLCBleGNlcHQgdGhhdCB0aGUgYXJlYSBpcyBvbmx5IG5lZWRlZCBpbnNpZGUgYSBTcGVleCBjYWxsIChtaWdodCBjYXVzZSBwcm9ibGVtIHdpdGggd2lkZWJhbmQgdGhvdWdoKSAqLwordm9pZCAqc3BlZXhfYWxsb2Nfc2NyYXRjaCAoaW50IHNpemUpOworCisvKiogU3BlZXggd3JhcHBlciBmb3IgcmVhbGxvYy4gVG8gZG8geW91ciBvd24gZHluYW1pYyBhbGxvY2F0aW9uLCBhbGwgeW91IG5lZWQgdG8gZG8gaXMgcmVwbGFjZSB0aGlzIGZ1bmN0aW9uLCBzcGVleF9hbGxvYyBhbmQgc3BlZXhfZnJlZSAqLwordm9pZCAqc3BlZXhfcmVhbGxvYyAodm9pZCAqcHRyLCBpbnQgc2l6ZSk7CisKKy8qKiBTcGVleCB3cmFwcGVyIGZvciBjYWxsb2MuIFRvIGRvIHlvdXIgb3duIGR5bmFtaWMgYWxsb2NhdGlvbiwgYWxsIHlvdSBuZWVkIHRvIGRvIGlzIHJlcGxhY2UgdGhpcyBmdW5jdGlvbiwgc3BlZXhfcmVhbGxvYyBhbmQgc3BlZXhfYWxsb2MgKi8KK3ZvaWQgc3BlZXhfZnJlZSAodm9pZCAqcHRyKTsKKworLyoqIFNhbWUgYXMgc3BlZXhfYWxsb2MsIGV4Y2VwdCB0aGF0IHRoZSBhcmVhIGlzIG9ubHkgbmVlZGVkIGluc2lkZSBhIFNwZWV4IGNhbGwgKG1pZ2h0IGNhdXNlIHByb2JsZW0gd2l0aCB3aWRlYmFuZCB0aG91Z2gpICovCit2b2lkIHNwZWV4X2ZyZWVfc2NyYXRjaCAodm9pZCAqcHRyKTsKKworLyoqIFNwZWV4IHdyYXBwZXIgZm9yIG1lbV9tb3ZlICovCit2b2lkICpzcGVleF9tb3ZlICh2b2lkICpkZXN0LCB2b2lkICpzcmMsIGludCBuKTsKKworLyoqIEFib3J0IHdpdGggYW4gZXJyb3IgbWVzc2FnZSB0byBzdGRlcnIgKGludGVybmFsIFNwZWV4IGVycm9yKSAqLwordm9pZCBzcGVleF9lcnJvcihjb25zdCBjaGFyICpzdHIpOworCisvKiogUHJpbnQgd2FybmluZyBtZXNzYWdlIHRvIHN0ZGVyciAocHJvZ3JhbW1pbmcgZXJyb3IpICovCit2b2lkIHNwZWV4X3dhcm5pbmcoY29uc3QgY2hhciAqc3RyKTsKKworLyoqIFByaW50IHdhcm5pbmcgbWVzc2FnZSB3aXRoIGludGVnZXIgYXJndW1lbnQgdG8gc3RkZXJyICovCit2b2lkIHNwZWV4X3dhcm5pbmdfaW50KGNvbnN0IGNoYXIgKnN0ciwgaW50IHZhbCk7CisKKy8qKiBQcmludCBub3RpZmljYXRpb24gbWVzc2FnZSB0byBzdGRlcnIgKi8KK3ZvaWQgc3BlZXhfbm90aWZ5KGNvbnN0IGNoYXIgKnN0cik7CisKKy8qKiBHZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIgKi8KK3NweF93b3JkMTZfdCBzcGVleF9yYW5kKHNweF93b3JkMTZfdCBzdGQsIHNweF9pbnQzMl90ICpzZWVkKTsKKworLyoqIFNwZWV4IHdyYXBwZXIgZm9yIHB1dGMgKi8KK3ZvaWQgX3NwZWV4X3B1dGMoaW50IGNoLCB2b2lkICpmaWxlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9taXNjX2JmaW4uaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L21pc2NfYmZpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YjA4MmMKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9taXNjX2JmaW4uaApAQCAtMCwwICsxLDU0IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDUgQW5hbG9nIERldmljZXMgKi8KKy8qKgorICAgQGZpbGUgbWlzY19iZmluLmgKKyAgIEBhdXRob3IgSmVhbi1NYXJjIFZhbGluIAorICAgQGJyaWVmIFZhcmlvdXMgY29tcGF0aWJpbGl0eSByb3V0aW5lcyBmb3IgU3BlZXggKEJsYWNrZmluIHZlcnNpb24pCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2RlZmluZSBPVkVSUklERV9TUEVFWF9NT1ZFCit2b2lkICpzcGVleF9tb3ZlICh2b2lkICpkZXN0LCB2b2lkICpzcmMsIGludCBuKQoreworICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKyAgICAgICAgICgKKyAgICAgICAgICJMMCA9IDA7XG5cdCIKKyAgICAgICAgICJJMCA9ICUwO1xuXHQiCisgICAgICAgICAiUjAgPSBbSTArK107XG5cdCIKKyAgICAgICAgICJMT09QIG1vdmUlPSBMQzAgPSAlMjtcblx0IgorICAgICAgICAgIkxPT1BfQkVHSU4gbW92ZSU9O1xuXHQiCisgICAgICAgICAgICAiWyUxKytdID0gUjAgfHwgUjAgPSBbSTArK107XG5cdCIKKyAgICAgICAgICJMT09QX0VORCBtb3ZlJT07XG5cdCIKKyAgICAgICAgICJbJTErK10gPSBSMDtcblx0IgorICAgOiAiPWEiIChzcmMpLCAiPWEiIChkZXN0KQorICAgOiAiYSIgKChuPj4yKS0xKSwgIjAiIChzcmMpLCAiMSIgKGRlc3QpCisgICA6ICJSMCIsICJJMCIsICJMMCIsICJtZW1vcnkiCisgICAgICAgICApOworICAgcmV0dXJuIGRlc3Q7Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9tb2Rlcy5jIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbW9kZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjIxYWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbW9kZXMuYwpAQCAtMCwwICsxLDY2OCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDYgSmVhbi1NYXJjIFZhbGluIAorICAgRmlsZTogbW9kZXMuYworCisgICBEZXNjcmliZXMgdGhlIGRpZmZlcmVudCBtb2RlcyBvZiB0aGUgY29kZWMKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIm1vZGVzLmgiCisjaW5jbHVkZSAibHRwLmgiCisjaW5jbHVkZSAicXVhbnRfbHNwLmgiCisjaW5jbHVkZSAiY2Jfc2VhcmNoLmgiCisjaW5jbHVkZSAic2JfY2VscC5oIgorI2luY2x1ZGUgIm5iX2NlbHAuaCIKKyNpbmNsdWRlICJ2YnIuaCIKKyNpbmNsdWRlICJtaXNjLmgiCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaWZuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTCAwCisjZW5kaWYKKworI2RlZmluZSBNQVhfSU5fU0FNUExFUyA2NDAKKworY29uc3QgU3BlZXhNb2RlICogY29uc3Qgc3BlZXhfbW9kZV9saXN0W1NQRUVYX05CX01PREVTXSA9IHsmc3BlZXhfbmJfbW9kZSwgJnNwZWV4X3diX21vZGUsICZzcGVleF91d2JfbW9kZX07CisKKy8qIEV4dGVybiBkZWNsYXJhdGlvbnMgZm9yIGFsbCBjb2RlYm9va3Mgd2UgdXNlIGhlcmUgKi8KK2V4dGVybiBjb25zdCBzaWduZWQgY2hhciBnYWluX2NkYmtfbmJbXTsKK2V4dGVybiBjb25zdCBzaWduZWQgY2hhciBnYWluX2NkYmtfbGJyW107CitleHRlcm4gY29uc3Qgc2lnbmVkIGNoYXIgaGV4Y190YWJsZVtdOworZXh0ZXJuIGNvbnN0IHNpZ25lZCBjaGFyIGV4Y181XzI1Nl90YWJsZVtdOworZXh0ZXJuIGNvbnN0IHNpZ25lZCBjaGFyIGV4Y181XzY0X3RhYmxlW107CitleHRlcm4gY29uc3Qgc2lnbmVkIGNoYXIgZXhjXzhfMTI4X3RhYmxlW107CitleHRlcm4gY29uc3Qgc2lnbmVkIGNoYXIgZXhjXzEwXzMyX3RhYmxlW107CitleHRlcm4gY29uc3Qgc2lnbmVkIGNoYXIgZXhjXzEwXzE2X3RhYmxlW107CitleHRlcm4gY29uc3Qgc2lnbmVkIGNoYXIgZXhjXzIwXzMyX3RhYmxlW107CitleHRlcm4gY29uc3Qgc2lnbmVkIGNoYXIgaGV4Y18xMF8zMl90YWJsZVtdOworCisKKy8qIFBhcmFtZXRlcnMgZm9yIExvbmctVGVybSBQcmVkaWN0aW9uIChMVFApKi8KK3N0YXRpYyBjb25zdCBsdHBfcGFyYW1zIGx0cF9wYXJhbXNfbmIgPSB7CisgICBnYWluX2NkYmtfbmIsCisgICA3LAorICAgNworfTsKKworLyogUGFyYW1ldGVycyBmb3IgTG9uZy1UZXJtIFByZWRpY3Rpb24gKExUUCkqLworc3RhdGljIGNvbnN0IGx0cF9wYXJhbXMgbHRwX3BhcmFtc192bGJyID0geworICAgZ2Fpbl9jZGJrX2xiciwKKyAgIDUsCisgICAwCit9OworCisvKiBQYXJhbWV0ZXJzIGZvciBMb25nLVRlcm0gUHJlZGljdGlvbiAoTFRQKSovCitzdGF0aWMgY29uc3QgbHRwX3BhcmFtcyBsdHBfcGFyYW1zX2xiciA9IHsKKyAgIGdhaW5fY2Ria19sYnIsCisgICA1LAorICAgNworfTsKKworLyogUGFyYW1ldGVycyBmb3IgTG9uZy1UZXJtIFByZWRpY3Rpb24gKExUUCkqLworc3RhdGljIGNvbnN0IGx0cF9wYXJhbXMgbHRwX3BhcmFtc19tZWQgPSB7CisgICBnYWluX2NkYmtfbGJyLAorICAgNSwKKyAgIDcKK307CisKKy8qIFNwbGl0LVZRIGlubm92YXRpb24gcGFyYW1ldGVycyBmb3IgdmVyeSBsb3cgYml0LXJhdGUgbmFycm93YmFuZCAqLworc3RhdGljIGNvbnN0IHNwbGl0X2NiX3BhcmFtcyBzcGxpdF9jYl9uYl92bGJyID0geworICAgMTAsICAgICAgICAgICAgICAgLypzdWJ2ZWN0X3NpemUqLworICAgNCwgICAgICAgICAgICAgICAvKm5iX3N1YnZlY3QqLworICAgZXhjXzEwXzE2X3RhYmxlLCAvKnNoYXBlX2NiKi8KKyAgIDQsICAgICAgICAgICAgICAgLypzaGFwZV9iaXRzKi8KKyAgIDAsCit9OworCisvKiBTcGxpdC1WUSBpbm5vdmF0aW9uIHBhcmFtZXRlcnMgZm9yIHZlcnkgbG93IGJpdC1yYXRlIG5hcnJvd2JhbmQgKi8KK3N0YXRpYyBjb25zdCBzcGxpdF9jYl9wYXJhbXMgc3BsaXRfY2JfbmJfdWxiciA9IHsKKyAgIDIwLCAgICAgICAgICAgICAgIC8qc3VidmVjdF9zaXplKi8KKyAgIDIsICAgICAgICAgICAgICAgLypuYl9zdWJ2ZWN0Ki8KKyAgIGV4Y18yMF8zMl90YWJsZSwgLypzaGFwZV9jYiovCisgICA1LCAgICAgICAgICAgICAgIC8qc2hhcGVfYml0cyovCisgICAwLAorfTsKKworLyogU3BsaXQtVlEgaW5ub3ZhdGlvbiBwYXJhbWV0ZXJzIGZvciBsb3cgYml0LXJhdGUgbmFycm93YmFuZCAqLworc3RhdGljIGNvbnN0IHNwbGl0X2NiX3BhcmFtcyBzcGxpdF9jYl9uYl9sYnIgPSB7CisgICAxMCwgICAgICAgICAgICAgIC8qc3VidmVjdF9zaXplKi8KKyAgIDQsICAgICAgICAgICAgICAgLypuYl9zdWJ2ZWN0Ki8KKyAgIGV4Y18xMF8zMl90YWJsZSwgLypzaGFwZV9jYiovCisgICA1LCAgICAgICAgICAgICAgIC8qc2hhcGVfYml0cyovCisgICAwLAorfTsKKworCisvKiBTcGxpdC1WUSBpbm5vdmF0aW9uIHBhcmFtZXRlcnMgbmFycm93YmFuZCAqLworc3RhdGljIGNvbnN0IHNwbGl0X2NiX3BhcmFtcyBzcGxpdF9jYl9uYiA9IHsKKyAgIDUsICAgICAgICAgICAgICAgLypzdWJ2ZWN0X3NpemUqLworICAgOCwgICAgICAgICAgICAgICAvKm5iX3N1YnZlY3QqLworICAgZXhjXzVfNjRfdGFibGUsIC8qc2hhcGVfY2IqLworICAgNiwgICAgICAgICAgICAgICAvKnNoYXBlX2JpdHMqLworICAgMCwKK307CisKKy8qIFNwbGl0LVZRIGlubm92YXRpb24gcGFyYW1ldGVycyBuYXJyb3diYW5kICovCitzdGF0aWMgY29uc3Qgc3BsaXRfY2JfcGFyYW1zIHNwbGl0X2NiX25iX21lZCA9IHsKKyAgIDgsICAgICAgICAgICAgICAgLypzdWJ2ZWN0X3NpemUqLworICAgNSwgICAgICAgICAgICAgICAvKm5iX3N1YnZlY3QqLworICAgZXhjXzhfMTI4X3RhYmxlLCAvKnNoYXBlX2NiKi8KKyAgIDcsICAgICAgICAgICAgICAgLypzaGFwZV9iaXRzKi8KKyAgIDAsCit9OworCisvKiBTcGxpdC1WUSBpbm5vdmF0aW9uIGZvciBsb3ctYmFuZCB3aWRlYmFuZCAqLworc3RhdGljIGNvbnN0IHNwbGl0X2NiX3BhcmFtcyBzcGxpdF9jYl9zYiA9IHsKKyAgIDUsICAgICAgICAgICAgICAgLypzdWJ2ZWN0X3NpemUqLworICAgOCwgICAgICAgICAgICAgIC8qbmJfc3VidmVjdCovCisgICBleGNfNV8yNTZfdGFibGUsICAgIC8qc2hhcGVfY2IqLworICAgOCwgICAgICAgICAgICAgICAvKnNoYXBlX2JpdHMqLworICAgMCwKK307CisKKyNpZm5kZWYgRElTQUJMRV9XSURFQkFORAorCisvKiBTcGxpdC1WUSBpbm5vdmF0aW9uIGZvciBoaWdoLWJhbmQgd2lkZWJhbmQgKi8KK3N0YXRpYyBjb25zdCBzcGxpdF9jYl9wYXJhbXMgc3BsaXRfY2JfaGlnaCA9IHsKKyAgIDgsICAgICAgICAgICAgICAgLypzdWJ2ZWN0X3NpemUqLworICAgNSwgICAgICAgICAgICAgICAvKm5iX3N1YnZlY3QqLworICAgaGV4Y190YWJsZSwgICAgICAgLypzaGFwZV9jYiovCisgICA3LCAgICAgICAgICAgICAgIC8qc2hhcGVfYml0cyovCisgICAxLAorfTsKKworCisvKiBTcGxpdC1WUSBpbm5vdmF0aW9uIGZvciBoaWdoLWJhbmQgd2lkZWJhbmQgKi8KK3N0YXRpYyBjb25zdCBzcGxpdF9jYl9wYXJhbXMgc3BsaXRfY2JfaGlnaF9sYnIgPSB7CisgICAxMCwgICAgICAgICAgICAgICAvKnN1YnZlY3Rfc2l6ZSovCisgICA0LCAgICAgICAgICAgICAgIC8qbmJfc3VidmVjdCovCisgICBoZXhjXzEwXzMyX3RhYmxlLCAgICAgICAvKnNoYXBlX2NiKi8KKyAgIDUsICAgICAgICAgICAgICAgLypzaGFwZV9iaXRzKi8KKyAgIDAsCit9OworCisjZW5kaWYKKworLyogMjE1MCBicHMgInZvY29kZXItbGlrZSIgbW9kZSBmb3IgY29tZm9ydCBub2lzZSAqLworc3RhdGljIGNvbnN0IFNwZWV4U3VibW9kZSBuYl9zdWJtb2RlMSA9IHsKKyAgIDAsCisgICAxLAorICAgMCwKKyAgIDAsCisgICAvKiBMU1AgcXVhbnRpemF0aW9uICovCisgICBsc3BfcXVhbnRfbGJyLAorICAgbHNwX3VucXVhbnRfbGJyLAorICAgLyogTm8gcGl0Y2ggcXVhbnRpemF0aW9uICovCisgICBmb3JjZWRfcGl0Y2hfcXVhbnQsCisgICBmb3JjZWRfcGl0Y2hfdW5xdWFudCwKKyAgIE5VTEwsCisgICAvKiBObyBpbm5vdmF0aW9uIHF1YW50aXphdGlvbiAobm9pc2Ugb25seSkgKi8KKyAgIG5vaXNlX2NvZGVib29rX3F1YW50LAorICAgbm9pc2VfY29kZWJvb2tfdW5xdWFudCwKKyAgIE5VTEwsCisgICAtMSwKKyAgIDQzCit9OworCisvKiAzLjk1IGticHMgdmVyeSBsb3cgYml0LXJhdGUgbW9kZSAqLworc3RhdGljIGNvbnN0IFNwZWV4U3VibW9kZSBuYl9zdWJtb2RlOCA9IHsKKyAgIDAsCisgICAxLAorICAgMCwKKyAgIDAsCisgICAvKkxTUCBxdWFudGl6YXRpb24qLworICAgbHNwX3F1YW50X2xiciwKKyAgIGxzcF91bnF1YW50X2xiciwKKyAgIC8qTm8gcGl0Y2ggcXVhbnRpemF0aW9uKi8KKyAgIGZvcmNlZF9waXRjaF9xdWFudCwKKyAgIGZvcmNlZF9waXRjaF91bnF1YW50LAorICAgTlVMTCwKKyAgIC8qSW5ub3ZhdGlvbiBxdWFudGl6YXRpb24qLworICAgc3BsaXRfY2Jfc2VhcmNoX3NoYXBlX3NpZ24sCisgICBzcGxpdF9jYl9zaGFwZV9zaWduX3VucXVhbnQsCisgICAmc3BsaXRfY2JfbmJfdWxiciwKKyAgIFFDT05TVDE2KC41LDE1KSwKKyAgIDc5Cit9OworCisvKiA1Ljk1IGticHMgdmVyeSBsb3cgYml0LXJhdGUgbW9kZSAqLworc3RhdGljIGNvbnN0IFNwZWV4U3VibW9kZSBuYl9zdWJtb2RlMiA9IHsKKyAgIDAsCisgICAwLAorICAgMCwKKyAgIDAsCisgICAvKkxTUCBxdWFudGl6YXRpb24qLworICAgbHNwX3F1YW50X2xiciwKKyAgIGxzcF91bnF1YW50X2xiciwKKyAgIC8qTm8gcGl0Y2ggcXVhbnRpemF0aW9uKi8KKyAgIHBpdGNoX3NlYXJjaF8zdGFwLAorICAgcGl0Y2hfdW5xdWFudF8zdGFwLAorICAgJmx0cF9wYXJhbXNfdmxiciwKKyAgIC8qSW5ub3ZhdGlvbiBxdWFudGl6YXRpb24qLworICAgc3BsaXRfY2Jfc2VhcmNoX3NoYXBlX3NpZ24sCisgICBzcGxpdF9jYl9zaGFwZV9zaWduX3VucXVhbnQsCisgICAmc3BsaXRfY2JfbmJfdmxiciwKKyAgIFFDT05TVDE2KC42LDE1KSwKKyAgIDExOQorfTsKKworLyogOCBrYnBzIGxvdyBiaXQtcmF0ZSBtb2RlICovCitzdGF0aWMgY29uc3QgU3BlZXhTdWJtb2RlIG5iX3N1Ym1vZGUzID0geworICAgLTEsCisgICAwLAorICAgMSwKKyAgIDAsCisgICAvKkxTUCBxdWFudGl6YXRpb24qLworICAgbHNwX3F1YW50X2xiciwKKyAgIGxzcF91bnF1YW50X2xiciwKKyAgIC8qUGl0Y2ggcXVhbnRpemF0aW9uKi8KKyAgIHBpdGNoX3NlYXJjaF8zdGFwLAorICAgcGl0Y2hfdW5xdWFudF8zdGFwLAorICAgJmx0cF9wYXJhbXNfbGJyLAorICAgLypJbm5vdmF0aW9uIHF1YW50aXphdGlvbiovCisgICBzcGxpdF9jYl9zZWFyY2hfc2hhcGVfc2lnbiwKKyAgIHNwbGl0X2NiX3NoYXBlX3NpZ25fdW5xdWFudCwKKyAgICZzcGxpdF9jYl9uYl9sYnIsCisgICBRQ09OU1QxNiguNTUsMTUpLAorICAgMTYwCit9OworCisvKiAxMSBrYnBzIG1lZGl1bSBiaXQtcmF0ZSBtb2RlICovCitzdGF0aWMgY29uc3QgU3BlZXhTdWJtb2RlIG5iX3N1Ym1vZGU0ID0geworICAgLTEsCisgICAwLAorICAgMSwKKyAgIDAsCisgICAvKkxTUCBxdWFudGl6YXRpb24qLworICAgbHNwX3F1YW50X2xiciwKKyAgIGxzcF91bnF1YW50X2xiciwKKyAgIC8qUGl0Y2ggcXVhbnRpemF0aW9uKi8KKyAgIHBpdGNoX3NlYXJjaF8zdGFwLAorICAgcGl0Y2hfdW5xdWFudF8zdGFwLAorICAgJmx0cF9wYXJhbXNfbWVkLAorICAgLypJbm5vdmF0aW9uIHF1YW50aXphdGlvbiovCisgICBzcGxpdF9jYl9zZWFyY2hfc2hhcGVfc2lnbiwKKyAgIHNwbGl0X2NiX3NoYXBlX3NpZ25fdW5xdWFudCwKKyAgICZzcGxpdF9jYl9uYl9tZWQsCisgICBRQ09OU1QxNiguNDUsMTUpLAorICAgMjIwCit9OworCisvKiAxNSBrYnBzIGhpZ2ggYml0LXJhdGUgbW9kZSAqLworc3RhdGljIGNvbnN0IFNwZWV4U3VibW9kZSBuYl9zdWJtb2RlNSA9IHsKKyAgIC0xLAorICAgMCwKKyAgIDMsCisgICAwLAorICAgLypMU1AgcXVhbnRpemF0aW9uKi8KKyAgIGxzcF9xdWFudF9uYiwKKyAgIGxzcF91bnF1YW50X25iLAorICAgLypQaXRjaCBxdWFudGl6YXRpb24qLworICAgcGl0Y2hfc2VhcmNoXzN0YXAsCisgICBwaXRjaF91bnF1YW50XzN0YXAsCisgICAmbHRwX3BhcmFtc19uYiwKKyAgIC8qSW5ub3ZhdGlvbiBxdWFudGl6YXRpb24qLworICAgc3BsaXRfY2Jfc2VhcmNoX3NoYXBlX3NpZ24sCisgICBzcGxpdF9jYl9zaGFwZV9zaWduX3VucXVhbnQsCisgICAmc3BsaXRfY2JfbmIsCisgICBRQ09OU1QxNiguMywxNSksCisgICAzMDAKK307CisKKy8qIDE4LjIgaGlnaCBiaXQtcmF0ZSBtb2RlICovCitzdGF0aWMgY29uc3QgU3BlZXhTdWJtb2RlIG5iX3N1Ym1vZGU2ID0geworICAgLTEsCisgICAwLAorICAgMywKKyAgIDAsCisgICAvKkxTUCBxdWFudGl6YXRpb24qLworICAgbHNwX3F1YW50X25iLAorICAgbHNwX3VucXVhbnRfbmIsCisgICAvKlBpdGNoIHF1YW50aXphdGlvbiovCisgICBwaXRjaF9zZWFyY2hfM3RhcCwKKyAgIHBpdGNoX3VucXVhbnRfM3RhcCwKKyAgICZsdHBfcGFyYW1zX25iLAorICAgLypJbm5vdmF0aW9uIHF1YW50aXphdGlvbiovCisgICBzcGxpdF9jYl9zZWFyY2hfc2hhcGVfc2lnbiwKKyAgIHNwbGl0X2NiX3NoYXBlX3NpZ25fdW5xdWFudCwKKyAgICZzcGxpdF9jYl9zYiwKKyAgIFFDT05TVDE2KC4yLDE1KSwKKyAgIDM2NAorfTsKKworLyogMjQuNiBrYnBzIGhpZ2ggYml0LXJhdGUgbW9kZSAqLworc3RhdGljIGNvbnN0IFNwZWV4U3VibW9kZSBuYl9zdWJtb2RlNyA9IHsKKyAgIC0xLAorICAgMCwKKyAgIDMsCisgICAxLAorICAgLypMU1AgcXVhbnRpemF0aW9uKi8KKyAgIGxzcF9xdWFudF9uYiwKKyAgIGxzcF91bnF1YW50X25iLAorICAgLypQaXRjaCBxdWFudGl6YXRpb24qLworICAgcGl0Y2hfc2VhcmNoXzN0YXAsCisgICBwaXRjaF91bnF1YW50XzN0YXAsCisgICAmbHRwX3BhcmFtc19uYiwKKyAgIC8qSW5ub3ZhdGlvbiBxdWFudGl6YXRpb24qLworICAgc3BsaXRfY2Jfc2VhcmNoX3NoYXBlX3NpZ24sCisgICBzcGxpdF9jYl9zaGFwZV9zaWduX3VucXVhbnQsCisgICAmc3BsaXRfY2JfbmIsCisgICBRQ09OU1QxNiguMSwxNSksCisgICA0OTIKK307CisKKworLyogRGVmYXVsdCBtb2RlIGZvciBuYXJyb3diYW5kICovCitzdGF0aWMgY29uc3QgU3BlZXhOQk1vZGUgbmJfbW9kZSA9IHsKKyAgIDE2MCwgICAgLypmcmFtZVNpemUqLworICAgNDAsICAgICAvKnN1YmZyYW1lU2l6ZSovCisgICAxMCwgICAgIC8qbHBjU2l6ZSovCisgICAxNywgICAgIC8qcGl0Y2hTdGFydCovCisgICAxNDQsICAgIC8qcGl0Y2hFbmQqLworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAyOTQ5MSwgMTk2NjEsIC8qIGdhbW1hMSwgZ2FtbWEyICovCisjZWxzZQorICAgMC45LCAwLjYsIC8qIGdhbW1hMSwgZ2FtbWEyICovCisjZW5kaWYKKyAgIC4wMTIsICAgLypsYWdfZmFjdG9yKi8KKyAgIFFDT05TVDE2KC4wMDAyLDE1KSwgLypscGNfZmxvb3IqLworI2lmZGVmIEVQSUNfNDhLCisgICAwLAorI2VuZGlmCisgICB7TlVMTCwgJm5iX3N1Ym1vZGUxLCAmbmJfc3VibW9kZTIsICZuYl9zdWJtb2RlMywgJm5iX3N1Ym1vZGU0LCAmbmJfc3VibW9kZTUsICZuYl9zdWJtb2RlNiwgJm5iX3N1Ym1vZGU3LAorICAgJm5iX3N1Ym1vZGU4LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwKKyAgIDUsCisgICB7MSwgOCwgMiwgMywgMywgNCwgNCwgNSwgNSwgNiwgN30KK307CisKKworLyogRGVmYXVsdCBtb2RlIGZvciBuYXJyb3diYW5kICovCitjb25zdCBTcGVleE1vZGUgc3BlZXhfbmJfbW9kZSA9IHsKKyAgICZuYl9tb2RlLAorICAgbmJfbW9kZV9xdWVyeSwKKyAgICJuYXJyb3diYW5kIiwKKyAgIDAsCisgICA0LAorICAgJm5iX2VuY29kZXJfaW5pdCwKKyAgICZuYl9lbmNvZGVyX2Rlc3Ryb3ksCisgICAmbmJfZW5jb2RlLAorICAgJm5iX2RlY29kZXJfaW5pdCwKKyAgICZuYl9kZWNvZGVyX2Rlc3Ryb3ksCisgICAmbmJfZGVjb2RlLAorICAgJm5iX2VuY29kZXJfY3RsLAorICAgJm5iX2RlY29kZXJfY3RsLAorfTsKKworCisvKiBXaWRlYmFuZCBwYXJ0ICovCisKK3N0YXRpYyBjb25zdCBTcGVleFN1Ym1vZGUgd2Jfc3VibW9kZTEgPSB7CisgICAwLAorICAgMCwKKyAgIDEsCisgICAwLAorICAgLypMU1AgcXVhbnRpemF0aW9uKi8KKyAgIGxzcF9xdWFudF9oaWdoLAorICAgbHNwX3VucXVhbnRfaGlnaCwKKyAgIC8qUGl0Y2ggcXVhbnRpemF0aW9uKi8KKyAgIE5VTEwsCisgICBOVUxMLAorICAgTlVMTCwKKyAgIC8qTm8gaW5ub3ZhdGlvbiBxdWFudGl6YXRpb24qLworICAgTlVMTCwKKyAgIE5VTEwsCisgICBOVUxMLAorICAgLTEsCisgICAzNgorfTsKKworCitzdGF0aWMgY29uc3QgU3BlZXhTdWJtb2RlIHdiX3N1Ym1vZGUyID0geworICAgMCwKKyAgIDAsCisgICAxLAorICAgMCwKKyAgIC8qTFNQIHF1YW50aXphdGlvbiovCisgICBsc3BfcXVhbnRfaGlnaCwKKyAgIGxzcF91bnF1YW50X2hpZ2gsCisgICAvKlBpdGNoIHF1YW50aXphdGlvbiovCisgICBOVUxMLAorICAgTlVMTCwKKyAgIE5VTEwsCisgICAvKklubm92YXRpb24gcXVhbnRpemF0aW9uKi8KKyAgIHNwbGl0X2NiX3NlYXJjaF9zaGFwZV9zaWduLAorICAgc3BsaXRfY2Jfc2hhcGVfc2lnbl91bnF1YW50LAorI2lmZGVmIERJU0FCTEVfV0lERUJBTkQKKyAgIE5VTEwsCisjZWxzZQorICAgJnNwbGl0X2NiX2hpZ2hfbGJyLAorI2VuZGlmCisgICAtMSwKKyAgIDExMgorfTsKKworCitzdGF0aWMgY29uc3QgU3BlZXhTdWJtb2RlIHdiX3N1Ym1vZGUzID0geworICAgMCwKKyAgIDAsCisgICAxLAorICAgMCwKKyAgIC8qTFNQIHF1YW50aXphdGlvbiovCisgICBsc3BfcXVhbnRfaGlnaCwKKyAgIGxzcF91bnF1YW50X2hpZ2gsCisgICAvKlBpdGNoIHF1YW50aXphdGlvbiovCisgICBOVUxMLAorICAgTlVMTCwKKyAgIE5VTEwsCisgICAvKklubm92YXRpb24gcXVhbnRpemF0aW9uKi8KKyAgIHNwbGl0X2NiX3NlYXJjaF9zaGFwZV9zaWduLAorICAgc3BsaXRfY2Jfc2hhcGVfc2lnbl91bnF1YW50LAorI2lmZGVmIERJU0FCTEVfV0lERUJBTkQKKyAgIE5VTEwsCisjZWxzZQorICAgJnNwbGl0X2NiX2hpZ2gsCisjZW5kaWYKKyAgIC0xLAorICAgMTkyCit9OworCitzdGF0aWMgY29uc3QgU3BlZXhTdWJtb2RlIHdiX3N1Ym1vZGU0ID0geworICAgMCwKKyAgIDAsCisgICAxLAorICAgMSwKKyAgIC8qTFNQIHF1YW50aXphdGlvbiovCisgICBsc3BfcXVhbnRfaGlnaCwKKyAgIGxzcF91bnF1YW50X2hpZ2gsCisgICAvKlBpdGNoIHF1YW50aXphdGlvbiovCisgICBOVUxMLAorICAgTlVMTCwKKyAgIE5VTEwsCisgICAvKklubm92YXRpb24gcXVhbnRpemF0aW9uKi8KKyAgIHNwbGl0X2NiX3NlYXJjaF9zaGFwZV9zaWduLAorICAgc3BsaXRfY2Jfc2hhcGVfc2lnbl91bnF1YW50LAorI2lmZGVmIERJU0FCTEVfV0lERUJBTkQKKyAgIE5VTEwsCisjZWxzZQorICAgJnNwbGl0X2NiX2hpZ2gsCisjZW5kaWYKKyAgIC0xLAorICAgMzUyCit9OworCisKKy8qIFNwbGl0LWJhbmQgd2lkZWJhbmQgQ0VMUCBtb2RlKi8KK3N0YXRpYyBjb25zdCBTcGVleFNCTW9kZSBzYl93Yl9tb2RlID0geworICAgJnNwZWV4X25iX21vZGUsCisgICAxNjAsICAgIC8qZnJhbWVTaXplKi8KKyAgIDQwLCAgICAgLypzdWJmcmFtZVNpemUqLworICAgOCwgICAgIC8qbHBjU2l6ZSovCisgICA2NDAsICAgIC8qYnVmU2l6ZSovCisjaWZkZWYgRklYRURfUE9JTlQKKyAgIDI5NDkxLCAxOTY2MSwgLyogZ2FtbWExLCBnYW1tYTIgKi8KKyNlbHNlCisgICAwLjksIDAuNiwgLyogZ2FtbWExLCBnYW1tYTIgKi8KKyNlbmRpZgorICAgLjAxMiwgICAvKmxhZ19mYWN0b3IqLworICAgUUNPTlNUMTYoLjAwMDIsMTUpLCAvKmxwY19mbG9vciovCisgICBRQ09OU1QxNigwLjlmLDE1KSwKKyAgIHtOVUxMLCAmd2Jfc3VibW9kZTEsICZ3Yl9zdWJtb2RlMiwgJndiX3N1Ym1vZGUzLCAmd2Jfc3VibW9kZTQsIE5VTEwsIE5VTEwsIE5VTEx9LAorICAgMywKKyAgIHsxLCA4LCAyLCAzLCA0LCA1LCA1LCA2LCA2LCA3LCA3fSwKKyAgIHsxLCAxLCAxLCAxLCAxLCAxLCAyLCAyLCAzLCAzLCA0fSwKKyAgIHZicl9oYl90aHJlc2gsCisgICA1Cit9OworCisKK2NvbnN0IFNwZWV4TW9kZSBzcGVleF93Yl9tb2RlID0geworICAgJnNiX3diX21vZGUsCisgICB3Yl9tb2RlX3F1ZXJ5LAorICAgIndpZGViYW5kIChzdWItYmFuZCBDRUxQKSIsCisgICAxLAorICAgNCwKKyAgICZzYl9lbmNvZGVyX2luaXQsCisgICAmc2JfZW5jb2Rlcl9kZXN0cm95LAorICAgJnNiX2VuY29kZSwKKyAgICZzYl9kZWNvZGVyX2luaXQsCisgICAmc2JfZGVjb2Rlcl9kZXN0cm95LAorICAgJnNiX2RlY29kZSwKKyAgICZzYl9lbmNvZGVyX2N0bCwKKyAgICZzYl9kZWNvZGVyX2N0bCwKK307CisKKworCisvKiAiVWx0cmEtd2lkZWJhbmQiIG1vZGUgc3R1ZmYgKi8KKworCisKKy8qIFNwbGl0LWJhbmQgInVsdHJhLXdpZGViYW5kIiAoMzIga2JwcykgQ0VMUCBtb2RlKi8KK3N0YXRpYyBjb25zdCBTcGVleFNCTW9kZSBzYl91d2JfbW9kZSA9IHsKKyAgICZzcGVleF93Yl9tb2RlLAorICAgMzIwLCAgICAvKmZyYW1lU2l6ZSovCisgICA4MCwgICAgIC8qc3ViZnJhbWVTaXplKi8KKyAgIDgsICAgICAvKmxwY1NpemUqLworICAgMTI4MCwgICAgLypidWZTaXplKi8KKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgMjk0OTEsIDE5NjYxLCAvKiBnYW1tYTEsIGdhbW1hMiAqLworI2Vsc2UKKyAgIDAuOSwgMC42LCAvKiBnYW1tYTEsIGdhbW1hMiAqLworI2VuZGlmCisgICAuMDEyLCAgIC8qbGFnX2ZhY3RvciovCisgICBRQ09OU1QxNiguMDAwMiwxNSksIC8qbHBjX2Zsb29yKi8KKyAgIFFDT05TVDE2KDAuN2YsMTUpLAorICAge05VTEwsICZ3Yl9zdWJtb2RlMSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sCisgICAxLAorICAgezAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwfSwKKyAgIHswLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxfSwKKyAgIHZicl91aGJfdGhyZXNoLAorICAgMgorfTsKKworCitjb25zdCBTcGVleE1vZGUgc3BlZXhfdXdiX21vZGUgPSB7CisgICAmc2JfdXdiX21vZGUsCisgICB3Yl9tb2RlX3F1ZXJ5LAorICAgInVsdHJhLXdpZGViYW5kIChzdWItYmFuZCBDRUxQKSIsCisgICAyLAorICAgNCwKKyAgICZzYl9lbmNvZGVyX2luaXQsCisgICAmc2JfZW5jb2Rlcl9kZXN0cm95LAorICAgJnNiX2VuY29kZSwKKyAgICZzYl9kZWNvZGVyX2luaXQsCisgICAmc2JfZGVjb2Rlcl9kZXN0cm95LAorICAgJnNiX2RlY29kZSwKKyAgICZzYl9lbmNvZGVyX2N0bCwKKyAgICZzYl9kZWNvZGVyX2N0bCwKK307CisKKworCisKKyNpZmRlZiBFUElDXzQ4SworCitleHRlcm4gY29uc3Qgc2lnbmVkIGNoYXIgZ2Fpbl9jZGJrX3VsYnJbXTsKK2V4dGVybiBjb25zdCBzaWduZWQgY2hhciBleGNfMTJfMzJfdGFibGVbXTsKKworLyogUGFyYW1ldGVycyBmb3IgTG9uZy1UZXJtIFByZWRpY3Rpb24gKExUUCkqLworc3RhdGljIGNvbnN0IGx0cF9wYXJhbXMgbHRwX3BhcmFtc180OGsgPSB7CisgICBnYWluX2NkYmtfdWxiciwKKyAgIDMsCisgICAwCit9OworCitzdGF0aWMgY29uc3Qgc3BsaXRfY2JfcGFyYW1zIHNwbGl0X2NiX25iXzQ4ayA9IHsKKyAgIDEyLCAgICAgICAgICAgICAgIC8qc3VidmVjdF9zaXplKi8KKyAgIDQsICAgICAgICAgICAgICAgLypuYl9zdWJ2ZWN0Ki8KKyAgIGV4Y18xMl8zMl90YWJsZSwgLypzaGFwZV9jYiovCisgICA1LCAgICAgICAgICAgICAgIC8qc2hhcGVfYml0cyovCisgICAwLAorfTsKKworCisvKiA0Ljgga2JwcyB2ZXJ5IGxvdyBiaXQtcmF0ZSBtb2RlICovCitzdGF0aWMgY29uc3QgU3BlZXhTdWJtb2RlIG5iXzQ4a19zdWJtb2RlID0geworICAgMCwKKyAgIDAsCisgICAwLAorICAgMCwKKyAgIC8qTFNQIHF1YW50aXphdGlvbiovCisgICBsc3BfcXVhbnRfNDhrLAorICAgbHNwX3VucXVhbnRfNDhrLAorICAgLypObyBwaXRjaCBxdWFudGl6YXRpb24qLworICAgcGl0Y2hfc2VhcmNoXzN0YXAsCisgICBwaXRjaF91bnF1YW50XzN0YXAsCisgICAmbHRwX3BhcmFtc180OGssCisgICAvKklubm92YXRpb24gcXVhbnRpemF0aW9uKi8KKyAgIHNwbGl0X2NiX3NlYXJjaF9zaGFwZV9zaWduLAorICAgc3BsaXRfY2Jfc2hhcGVfc2lnbl91bnF1YW50LAorICAgJnNwbGl0X2NiX25iXzQ4aywKKyAgIFFDT05TVDE2KC43LDE1KSwKKyAgIDE0NAorfTsKKworCisvKiBTcGVjaWFsLCBub24tc3RhbmRhcmQgNC44IGticHMgbW9kZSAqLworc3RhdGljIGNvbnN0IFNwZWV4TkJNb2RlIG5iXzQ4a19tb2RlID0geworICAgMjQwLCAgICAvKmZyYW1lU2l6ZSovCisgICA0OCwgICAgIC8qc3ViZnJhbWVTaXplKi8KKyAgIDEwLCAgICAgLypscGNTaXplKi8KKyAgIDE3LCAgICAgLypwaXRjaFN0YXJ0Ki8KKyAgIDE0NCwgICAgLypwaXRjaEVuZCovCisgICAwLjksICAgIC8qZ2FtbWExKi8KKyAgIDAuNiwgICAgLypnYW1tYTIqLworICAgLjAxLCAgIC8qbGFnX2ZhY3RvciovCisgICBRQ09OU1QxNiguMDAwMywxNSksIC8qbHBjX2Zsb29yKi8KKyAgIDEsCisgICB7TlVMTCwgTlVMTCwgJm5iXzQ4a19zdWJtb2RlLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwKKyAgIDIsCisgICB7MiwyLDIsMiwyLDIsMiwyLDIsMiwyfQorfTsKKworCisvKiBEZWZhdWx0IG1vZGUgZm9yIG5hcnJvd2JhbmQgKi8KK2NvbnN0IFNwZWV4TW9kZSBzcGVleF9uYl80OGtfbW9kZSA9IHsKKyAgICZuYl80OGtfbW9kZSwKKyAgIG5iX21vZGVfcXVlcnksCisgICAibmFycm93YmFuZCA0Ljgga2JwcyIsCisgICAxMDAwLAorICAgNCwKKyAgICZuYl9lbmNvZGVyX2luaXQsCisgICAmbmJfZW5jb2Rlcl9kZXN0cm95LAorICAgJm5iX2VuY29kZSwKKyAgICZuYl9kZWNvZGVyX2luaXQsCisgICAmbmJfZGVjb2Rlcl9kZXN0cm95LAorICAgJm5iX2RlY29kZSwKKyAgICZuYl9lbmNvZGVyX2N0bCwKKyAgICZuYl9kZWNvZGVyX2N0bCwKK307CisKKworI2VuZGlmCisKK2ludCBzcGVleF9tb2RlX3F1ZXJ5KGNvbnN0IFNwZWV4TW9kZSAqbW9kZSwgaW50IHJlcXVlc3QsIHZvaWQgKnB0cikKK3sKKyAgIHJldHVybiBtb2RlLT5xdWVyeShtb2RlLT5tb2RlLCByZXF1ZXN0LCBwdHIpOworfQorCitjb25zdCBTcGVleE1vZGUgKiBzcGVleF9saWJfZ2V0X21vZGUgKGludCBtb2RlKQoreworI2lmZGVmIEVQSUNfNDhLCisgIGlmIChtb2RlID09IFNQRUVYX01PREVJRF9OQl80OEspIHJldHVybiAmc3BlZXhfbmJfNDhrX21vZGU7CisjZW5kaWYKKworICBpZiAobW9kZSA8IDAgfHwgbW9kZSA+IFNQRUVYX05CX01PREVTKSByZXR1cm4gTlVMTDsKKworICByZXR1cm4gc3BlZXhfbW9kZV9saXN0W21vZGVdOworfQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbW9kZXMuaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L21vZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmMTk3MQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L21vZGVzLmgKQEAgLTAsMCArMSwxNjYgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMi0yMDA2IEplYW4tTWFyYyBWYWxpbiAqLworLyoqCisgICBAZmlsZSBtb2Rlcy5oCisgICBAYnJpZWYgRGVzY3JpYmVzIHRoZSBkaWZmZXJlbnQgbW9kZXMgb2YgdGhlIGNvZGVjCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjaWZuZGVmIE1PREVTX0gKKyNkZWZpbmUgTU9ERVNfSAorCisjaW5jbHVkZSA8c3BlZXgvc3BlZXguaD4KKyNpbmNsdWRlIDxzcGVleC9zcGVleF9iaXRzLmg+CisjaW5jbHVkZSAibWlzYy5oIgorCisjZGVmaW5lIE5CX1NVQk1PREVTIDE2CisjZGVmaW5lIE5CX1NVQk1PREVfQklUUyA0CisKKyNkZWZpbmUgU0JfU1VCTU9ERVMgOAorI2RlZmluZSBTQl9TVUJNT0RFX0JJVFMgMworCisvKiBVc2VkIGludGVybmFsbHksIE5PVCBUTyBCRSBVU0VEIGluIGFwcGxpY2F0aW9ucyAqLworLyoqIFVzZWQgaW50ZXJuYWxseSovCisjZGVmaW5lIFNQRUVYX0dFVF9QSV9HQUlOIDEwMAorLyoqIFVzZWQgaW50ZXJuYWxseSovCisjZGVmaW5lIFNQRUVYX0dFVF9FWEMgICAgIDEwMQorLyoqIFVzZWQgaW50ZXJuYWxseSovCisjZGVmaW5lIFNQRUVYX0dFVF9JTk5PViAgIDEwMgorLyoqIFVzZWQgaW50ZXJuYWxseSovCisjZGVmaW5lIFNQRUVYX0dFVF9EVFhfU1RBVFVTICAgMTAzCisvKiogVXNlZCBpbnRlcm5hbGx5Ki8KKyNkZWZpbmUgU1BFRVhfU0VUX0lOTk9WQVRJT05fU0FWRSAgIDEwNAorLyoqIFVzZWQgaW50ZXJuYWxseSovCisjZGVmaW5lIFNQRUVYX1NFVF9XSURFQkFORCAgIDEwNQorCisvKiogVXNlZCBpbnRlcm5hbGx5Ki8KKyNkZWZpbmUgU1BFRVhfR0VUX1NUQUNLICAgMTA2CisKKworLyoqIFF1YW50aXplcyBMU1BzICovCit0eXBlZGVmIHZvaWQgKCpsc3BfcXVhbnRfZnVuYykoc3B4X2xzcF90ICosIHNweF9sc3BfdCAqLCBpbnQsIFNwZWV4Qml0cyAqKTsKKworLyoqIERlY29kZXMgcXVhbnRpemVkIExTUHMgKi8KK3R5cGVkZWYgdm9pZCAoKmxzcF91bnF1YW50X2Z1bmMpKHNweF9sc3BfdCAqLCBpbnQsIFNwZWV4Qml0cyAqKTsKKworCisvKiogTG9uZy10ZXJtIHByZWRpY3RvciBxdWFudGl6YXRpb24gKi8KK3R5cGVkZWYgaW50ICgqbHRwX3F1YW50X2Z1bmMpKHNweF93b3JkMTZfdCAqLCBzcHhfd29yZDE2X3QgKiwgc3B4X2NvZWZfdCAqLCBzcHhfY29lZl90ICosIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3B4X2NvZWZfdCAqLCBzcHhfc2lnX3QgKiwgY29uc3Qgdm9pZCAqLCBpbnQsIGludCwgc3B4X3dvcmQxNl90LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBTcGVleEJpdHMqLCBjaGFyICosIHNweF93b3JkMTZfdCAqLCBzcHhfd29yZDE2X3QgKiwgaW50LCBpbnQsIGludCwgc3B4X3dvcmQzMl90ICopOworCisvKiogTG9uZy10ZXJtIHVuLXF1YW50aXplICovCit0eXBlZGVmIHZvaWQgKCpsdHBfdW5xdWFudF9mdW5jKShzcHhfd29yZDE2X3QgKiwgc3B4X3dvcmQzMl90ICosIGludCwgaW50LCBzcHhfd29yZDE2X3QsIGNvbnN0IHZvaWQgKiwgaW50LCBpbnQgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNweF93b3JkMTZfdCAqLCBTcGVleEJpdHMqLCBjaGFyKiwgaW50LCBpbnQsIHNweF93b3JkMTZfdCwgaW50KTsKKworCisvKiogSW5ub3ZhdGlvbiBxdWFudGl6YXRpb24gZnVuY3Rpb24gKi8KK3R5cGVkZWYgdm9pZCAoKmlubm92YXRpb25fcXVhbnRfZnVuYykoc3B4X3dvcmQxNl90ICosIHNweF9jb2VmX3QgKiwgc3B4X2NvZWZfdCAqLCBzcHhfY29lZl90ICosIGNvbnN0IHZvaWQgKiwgaW50LCBpbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHhfc2lnX3QgKiwgc3B4X3dvcmQxNl90ICosIFNwZWV4Qml0cyAqLCBjaGFyICosIGludCwgaW50KTsKKworLyoqIElubm92YXRpb24gdW5xdWFudGl6YXRpb24gZnVuY3Rpb24gKi8KK3R5cGVkZWYgdm9pZCAoKmlubm92YXRpb25fdW5xdWFudF9mdW5jKShzcHhfc2lnX3QgKiwgY29uc3Qgdm9pZCAqLCBpbnQsIFNwZWV4Qml0cyosIGNoYXIgKiwgc3B4X2ludDMyX3QgKik7CisKKy8qKiBEZXNjcmlwdGlvbiBvZiBhIFNwZWV4IHN1Yi1tb2RlICh3aXRoZXIgbmFycm93YmFuZCBvciB3aWRlYmFuZCAqLwordHlwZWRlZiBzdHJ1Y3QgU3BlZXhTdWJtb2RlIHsKKyAgIGludCAgICAgbGJyX3BpdGNoOyAgICAgICAgICAvKio8IFNldCB0byAtMSBmb3IgIm5vcm1hbCIgbW9kZXMsIG90aGVyd2lzZSBlbmNvZGUgcGl0Y2ggdXNpbmcgYSBnbG9iYWwgcGl0Y2ggYW5kIGFsbG93aW5nIGEgKy0gbGJyX3BpdGNoIHZhcmlhdGlvbiAoZm9yIGxvdyBub3QtcmF0ZXMpKi8KKyAgIGludCAgICAgZm9yY2VkX3BpdGNoX2dhaW47ICAvKio8IFVzZSB0aGUgc2FtZSAoZm9yY2VkKSBwaXRjaCBnYWluIGZvciBhbGwgc3ViLWZyYW1lcyAqLworICAgaW50ICAgICBoYXZlX3N1YmZyYW1lX2dhaW47IC8qKjwgTnVtYmVyIG9mIGJpdHMgdG8gdXNlIGFzIHN1Yi1mcmFtZSBpbm5vdmF0aW9uIGdhaW4gKi8KKyAgIGludCAgICAgZG91YmxlX2NvZGVib29rOyAgICAvKio8IEFwcGx5IGlubm92YXRpb24gcXVhbnRpemF0aW9uIHR3aWNlIGZvciBoaWdoZXIgcXVhbGl0eSAoYW5kIGhpZ2hlciBiaXQtcmF0ZSkqLworICAgLypMU1AgZnVuY3Rpb25zKi8KKyAgIGxzcF9xdWFudF9mdW5jICAgIGxzcF9xdWFudDsgLyoqPCBMU1AgcXVhbnRpemF0aW9uIGZ1bmN0aW9uICovCisgICBsc3BfdW5xdWFudF9mdW5jICBsc3BfdW5xdWFudDsgLyoqPCBMU1AgdW5xdWFudGl6YXRpb24gZnVuY3Rpb24gKi8KKworICAgLypMb250LXRlcm0gcHJlZGljdG9yIGZ1bmN0aW9ucyovCisgICBsdHBfcXVhbnRfZnVuYyAgICBsdHBfcXVhbnQ7IC8qKjwgTG9uZy10ZXJtIHByZWRpY3RvciAocGl0Y2gpIHF1YW50aXplciAqLworICAgbHRwX3VucXVhbnRfZnVuYyAgbHRwX3VucXVhbnQ7IC8qKjwgTG9uZy10ZXJtIHByZWRpY3RvciAocGl0Y2gpIHVuLXF1YW50aXplciAqLworICAgY29uc3Qgdm9pZCAgICAgICAqbHRwX3BhcmFtczsgLyoqPCBQaXRjaCBwYXJhbWV0ZXJzIChvcHRpb25zKSAqLworCisgICAvKlF1YW50aXphdGlvbiBvZiBpbm5vdmF0aW9uKi8KKyAgIGlubm92YXRpb25fcXVhbnRfZnVuYyBpbm5vdmF0aW9uX3F1YW50OyAvKio8IElubm92YXRpb24gcXVhbnRpemF0aW9uICovCisgICBpbm5vdmF0aW9uX3VucXVhbnRfZnVuYyBpbm5vdmF0aW9uX3VucXVhbnQ7IC8qKjwgSW5ub3ZhdGlvbiB1bi1xdWFudGl6YXRpb24gKi8KKyAgIGNvbnN0IHZvaWQgICAgICAgICAgICAgKmlubm92YXRpb25fcGFyYW1zOyAvKio8IElubm92YXRpb24gcXVhbnRpemF0aW9uIHBhcmFtZXRlcnMqLworCisgICBzcHhfd29yZDE2X3QgICAgICBjb21iX2dhaW47ICAvKio8IEdhaW4gb2YgZW5oYW5jZXIgY29tYiBmaWx0ZXIgKi8KKworICAgaW50ICAgICAgICAgICAgICAgYml0c19wZXJfZnJhbWU7IC8qKjwgTnVtYmVyIG9mIGJpdHMgcGVyIGZyYW1lIGFmdGVyIGVuY29kaW5nKi8KK30gU3BlZXhTdWJtb2RlOworCisvKiogU3RydWN0IGRlZmluaW5nIHRoZSBlbmNvZGluZy9kZWNvZGluZyBtb2RlKi8KK3R5cGVkZWYgc3RydWN0IFNwZWV4TkJNb2RlIHsKKyAgIGludCAgICAgZnJhbWVTaXplOyAgICAgIC8qKjwgU2l6ZSBvZiBmcmFtZXMgdXNlZCBmb3IgZW5jb2RpbmcgKi8KKyAgIGludCAgICAgc3ViZnJhbWVTaXplOyAgIC8qKjwgU2l6ZSBvZiBzdWItZnJhbWVzIHVzZWQgZm9yIGVuY29kaW5nICovCisgICBpbnQgICAgIGxwY1NpemU7ICAgICAgICAvKio8IE9yZGVyIG9mIExQQyBmaWx0ZXIgKi8KKyAgIGludCAgICAgcGl0Y2hTdGFydDsgICAgIC8qKjwgU21hbGxlc3QgcGl0Y2ggdmFsdWUgYWxsb3dlZCAqLworICAgaW50ICAgICBwaXRjaEVuZDsgICAgICAgLyoqPCBMYXJnZXN0IHBpdGNoIHZhbHVlIGFsbG93ZWQgKi8KKworICAgc3B4X3dvcmQxNl90IGdhbW1hMTsgICAgLyoqPCBQZXJjZXB0dWFsIGZpbHRlciBwYXJhbWV0ZXIgIzEgKi8KKyAgIHNweF93b3JkMTZfdCBnYW1tYTI7ICAgIC8qKjwgUGVyY2VwdHVhbCBmaWx0ZXIgcGFyYW1ldGVyICMyICovCisgICBmbG9hdCAgIGxhZ19mYWN0b3I7ICAgICAvKio8IExhZy13aW5kb3dpbmcgcGFyYW1ldGVyICovCisgICBzcHhfd29yZDE2X3QgICBscGNfZmxvb3I7ICAgICAgLyoqPCBOb2lzZSBmbG9vciBmb3IgTFBDIGFuYWx5c2lzICovCisKKyNpZmRlZiBFUElDXzQ4SworICAgaW50ICAgICBsYnI0OGs7ICAgICAgICAgLyoqPCAxIGZvciB0aGUgc3BlY2lhbCA0Ljgga2JwcyBtb2RlICovCisjZW5kaWYKKworICAgY29uc3QgU3BlZXhTdWJtb2RlICpzdWJtb2Rlc1tOQl9TVUJNT0RFU107IC8qKjwgU3ViLW1vZGUgZGF0YSBmb3IgdGhlIG1vZGUgKi8KKyAgIGludCAgICAgZGVmYXVsdFN1Ym1vZGU7IC8qKjwgRGVmYXVsdCBzdWItbW9kZSB0byB1c2Ugd2hlbiBlbmNvZGluZyAqLworICAgaW50ICAgICBxdWFsaXR5X21hcFsxMV07IC8qKjwgTW9kZSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggcXVhbGl0eSBzZXR0aW5nICovCit9IFNwZWV4TkJNb2RlOworCisKKy8qKiBTdHJ1Y3QgZGVmaW5pbmcgdGhlIGVuY29kaW5nL2RlY29kaW5nIG1vZGUgZm9yIFNCLUNFTFAgKHdpZGViYW5kKSAqLwordHlwZWRlZiBzdHJ1Y3QgU3BlZXhTQk1vZGUgeworICAgY29uc3QgU3BlZXhNb2RlICpuYl9tb2RlOyAgICAvKio8IEVtYmVkZGVkIG5hcnJvd2JhbmQgbW9kZSAqLworICAgaW50ICAgICBmcmFtZVNpemU7ICAgICAvKio8IFNpemUgb2YgZnJhbWVzIHVzZWQgZm9yIGVuY29kaW5nICovCisgICBpbnQgICAgIHN1YmZyYW1lU2l6ZTsgIC8qKjwgU2l6ZSBvZiBzdWItZnJhbWVzIHVzZWQgZm9yIGVuY29kaW5nICovCisgICBpbnQgICAgIGxwY1NpemU7ICAgICAgIC8qKjwgT3JkZXIgb2YgTFBDIGZpbHRlciAqLworICAgaW50ICAgICBidWZTaXplOyAgICAgICAvKio8IFNpZ25hbCBidWZmZXIgc2l6ZSBpbiBlbmNvZGVyICovCisgICBzcHhfd29yZDE2X3QgZ2FtbWExOyAgIC8qKjwgUGVyY2VwdHVhbCBmaWx0ZXIgcGFyYW1ldGVyICMxICovCisgICBzcHhfd29yZDE2X3QgZ2FtbWEyOyAgIC8qKjwgUGVyY2VwdHVhbCBmaWx0ZXIgcGFyYW1ldGVyICMxICovCisgICBmbG9hdCAgIGxhZ19mYWN0b3I7ICAgIC8qKjwgTGFnLXdpbmRvd2luZyBwYXJhbWV0ZXIgKi8KKyAgIHNweF93b3JkMTZfdCAgIGxwY19mbG9vcjsgICAgIC8qKjwgTm9pc2UgZmxvb3IgZm9yIExQQyBhbmFseXNpcyAqLworICAgc3B4X3dvcmQxNl90ICAgZm9sZGluZ19nYWluOworCisgICBjb25zdCBTcGVleFN1Ym1vZGUgKnN1Ym1vZGVzW1NCX1NVQk1PREVTXTsgLyoqPCBTdWItbW9kZSBkYXRhIGZvciB0aGUgbW9kZSAqLworICAgaW50ICAgICBkZWZhdWx0U3VibW9kZTsgLyoqPCBEZWZhdWx0IHN1Yi1tb2RlIHRvIHVzZSB3aGVuIGVuY29kaW5nICovCisgICBpbnQgICAgIGxvd19xdWFsaXR5X21hcFsxMV07IC8qKjwgTW9kZSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggcXVhbGl0eSBzZXR0aW5nICovCisgICBpbnQgICAgIHF1YWxpdHlfbWFwWzExXTsgLyoqPCBNb2RlIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBxdWFsaXR5IHNldHRpbmcgKi8KKyAgIGNvbnN0IGZsb2F0ICgqdmJyX3RocmVzaClbMTFdOworICAgaW50ICAgICBuYl9tb2RlczsKK30gU3BlZXhTQk1vZGU7CisKK2ludCBzcGVleF9lbmNvZGVfbmF0aXZlKHZvaWQgKnN0YXRlLCBzcHhfd29yZDE2X3QgKmluLCBTcGVleEJpdHMgKmJpdHMpOworaW50IHNwZWV4X2RlY29kZV9uYXRpdmUodm9pZCAqc3RhdGUsIFNwZWV4Qml0cyAqYml0cywgc3B4X3dvcmQxNl90ICpvdXQpOworCitpbnQgbmJfbW9kZV9xdWVyeShjb25zdCB2b2lkICptb2RlLCBpbnQgcmVxdWVzdCwgdm9pZCAqcHRyKTsKK2ludCB3Yl9tb2RlX3F1ZXJ5KGNvbnN0IHZvaWQgKm1vZGUsIGludCByZXF1ZXN0LCB2b2lkICpwdHIpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L25iX2NlbHAuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L25iX2NlbHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODI4YWVkCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbmJfY2VscC5jCkBAIC0wLDAgKzEsMjA0OSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDYgSmVhbi1NYXJjIFZhbGluIAorICAgRmlsZTogbmJfY2VscC5jCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgIm5iX2NlbHAuaCIKKyNpbmNsdWRlICJscGMuaCIKKyNpbmNsdWRlICJsc3AuaCIKKyNpbmNsdWRlICJsdHAuaCIKKyNpbmNsdWRlICJxdWFudF9sc3AuaCIKKyNpbmNsdWRlICJjYl9zZWFyY2guaCIKKyNpbmNsdWRlICJmaWx0ZXJzLmgiCisjaW5jbHVkZSAic3RhY2tfYWxsb2MuaCIKKyNpbmNsdWRlICJ2cS5oIgorI2luY2x1ZGUgPHNwZWV4L3NwZWV4X2JpdHMuaD4KKyNpbmNsdWRlICJ2YnIuaCIKKyNpbmNsdWRlICJtaXNjLmgiCisjaW5jbHVkZSAibWF0aF9hcHByb3guaCIKKyNpbmNsdWRlIDxzcGVleC9zcGVleF9jYWxsYmFja3MuaD4KKworI2lmZGVmIFZPUkJJU19QU1lDSE8KKyNpbmNsdWRlICJ2b3JiaXNfcHN5LmgiCisjZW5kaWYKKworI2lmbmRlZiBNX1BJCisjZGVmaW5lIE1fUEkgICAgICAgICAgIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYgIC8qIHBpICovCisjZW5kaWYKKworI2lmbmRlZiBOVUxMCisjZGVmaW5lIE5VTEwgMAorI2VuZGlmCisKKyNkZWZpbmUgU1VCTU9ERSh4KSBzdC0+c3VibW9kZXNbc3QtPnN1Ym1vZGVJRF0tPngKKworLyogRGVmYXVsdCBzaXplIGZvciB0aGUgZW5jb2RlciBhbmQgZGVjb2RlciBzdGFjayAoY2FuIGJlIGNoYW5nZWQgYXQgY29tcGlsZSB0aW1lKS4KKyAgIFRoaXMgZG9lcyBub3QgYXBwbHkgd2hlbiB1c2luZyB2YXJpYWJsZS1zaXplIGFycmF5cyBvciBhbGxvY2EuICovCisjaWZuZGVmIE5CX0VOQ19TVEFDSworI2RlZmluZSBOQl9FTkNfU1RBQ0sgKDgwMDAqc2l6ZW9mKHNweF9zaWdfdCkpCisjZW5kaWYKKworI2lmbmRlZiBOQl9ERUNfU1RBQ0sKKyNkZWZpbmUgTkJfREVDX1NUQUNLICg0MDAwKnNpemVvZihzcHhfc2lnX3QpKQorI2VuZGlmCisKKworI2lmZGVmIEZJWEVEX1BPSU5UCitjb25zdCBzcHhfd29yZDMyX3Qgb2xfZ2Fpbl90YWJsZVszMl09ezE4OTAwLCAyNTE1MCwgMzM0NjgsIDQ0NTM2LCA1OTI2NSwgNzg4NjUsIDEwNDk0NiwgMTM5NjUzLCAxODU4MzgsIDI0NzI5NywgMzI5MDgxLCA0Mzc5MTMsIDU4MjczNiwgNzc1NDU0LCAxMDMxOTA2LCAxMzczMTY5LCAxODI3MjkzLCAyNDMxNjAxLCAzMjM1NzYxLCA0MzA1ODY3LCA1NzI5ODcwLCA3NjI0ODA4LCAxMDE0NjQyNSwgMTM1MDE5NzEsIDE3OTY3MjM4LCAyMzkwOTIyMiwgMzE4MTYyOTQsIDQyMzM4MzMwLCA1NjM0MDEzMiwgNzQ5NzI1MDEsIDk5NzY2ODIyLCAxMzI3NjA5Mjd9OworY29uc3Qgc3B4X3dvcmQxNl90IGV4Y19nYWluX3F1YW50X3NjYWwzX2JvdW5kWzddPXsxODQxLCAzODgzLCA2MDUxLCA4MDYyLCAxMDQ0NCwgMTM1ODAsIDE4NTYwfTsKK2NvbnN0IHNweF93b3JkMTZfdCBleGNfZ2Fpbl9xdWFudF9zY2FsM1s4XT17MTAwMiwgMjY4MCwgNTA4NiwgNzAxNiwgOTEwOCwgMTE3ODEsIDE1MzgwLCAyMTc0MH07Citjb25zdCBzcHhfd29yZDE2X3QgZXhjX2dhaW5fcXVhbnRfc2NhbDFfYm91bmRbMV09ezE0Mzg1fTsKK2NvbnN0IHNweF93b3JkMTZfdCBleGNfZ2Fpbl9xdWFudF9zY2FsMVsyXT17MTE1NDYsIDE3MjI0fTsKKworI2RlZmluZSBMU1BfTUFSR0lOIDE2CisjZGVmaW5lIExTUF9ERUxUQTEgNjU1MworI2RlZmluZSBMU1BfREVMVEEyIDE2MzgKKworI2Vsc2UKKworY29uc3QgZmxvYXQgZXhjX2dhaW5fcXVhbnRfc2NhbDNfYm91bmRbN109ezAuMTEyMzM4ZiwgMC4yMzY5ODBmLCAwLjM2OTMxNmYsIDAuNDkyMDU0ZiwgMC42Mzc0NzFmLCAwLjgyODg3NGYsIDEuMTMyNzg0Zn07Citjb25zdCBmbG9hdCBleGNfZ2Fpbl9xdWFudF9zY2FsM1s4XT17MC4wNjExMzBmLCAwLjE2MzU0NmYsIDAuMzEwNDEzZiwgMC40MjgyMjBmLCAwLjU1NTg4N2YsIDAuNzE5MDU1ZiwgMC45Mzg2OTRmLCAxLjMyNjg3NGZ9OworY29uc3QgZmxvYXQgZXhjX2dhaW5fcXVhbnRfc2NhbDFfYm91bmRbMV09ezAuODc3OThmfTsKK2NvbnN0IGZsb2F0IGV4Y19nYWluX3F1YW50X3NjYWwxWzJdPXswLjcwNDY5ZiwgMS4wNTEyN2Z9OworCisjZGVmaW5lIExTUF9NQVJHSU4gLjAwMmYKKyNkZWZpbmUgTFNQX0RFTFRBMSAuMmYKKyNkZWZpbmUgTFNQX0RFTFRBMiAuMDVmCisKKyNlbmRpZgorCisjaWZkZWYgVk9SQklTX1BTWUNITworI2RlZmluZSBFWFRSQV9CVUZGRVIgMTAwCisjZWxzZQorI2RlZmluZSBFWFRSQV9CVUZGRVIgMAorI2VuZGlmCisKKworI2RlZmluZSBzcXIoeCkgKCh4KSooeCkpCisKK2V4dGVybiBjb25zdCBzcHhfd29yZDE2X3QgbHBjX3dpbmRvd1tdOworCit2b2lkICpuYl9lbmNvZGVyX2luaXQoY29uc3QgU3BlZXhNb2RlICptKQoreworICAgRW5jU3RhdGUgKnN0OworICAgY29uc3QgU3BlZXhOQk1vZGUgKm1vZGU7CisgICBpbnQgaTsKKworICAgbW9kZT0oY29uc3QgU3BlZXhOQk1vZGUgKiltLT5tb2RlOworICAgc3QgPSAoRW5jU3RhdGUqKXNwZWV4X2FsbG9jKHNpemVvZihFbmNTdGF0ZSkpOworICAgaWYgKCFzdCkKKyAgICAgIHJldHVybiBOVUxMOworI2lmIGRlZmluZWQoVkFSX0FSUkFZUykgfHwgZGVmaW5lZCAoVVNFX0FMTE9DQSkKKyAgIHN0LT5zdGFjayA9IE5VTEw7CisjZWxzZQorICAgc3QtPnN0YWNrID0gKGNoYXIqKXNwZWV4X2FsbG9jX3NjcmF0Y2goTkJfRU5DX1NUQUNLKTsKKyNlbmRpZgorICAgCisgICBzdC0+bW9kZT1tOworCisgICBzdC0+ZnJhbWVTaXplID0gbW9kZS0+ZnJhbWVTaXplOworICAgc3QtPm5iU3ViZnJhbWVzPW1vZGUtPmZyYW1lU2l6ZS9tb2RlLT5zdWJmcmFtZVNpemU7CisgICBzdC0+c3ViZnJhbWVTaXplPW1vZGUtPnN1YmZyYW1lU2l6ZTsKKyAgIHN0LT53aW5kb3dTaXplID0gc3QtPmZyYW1lU2l6ZStzdC0+c3ViZnJhbWVTaXplOworICAgc3QtPmxwY1NpemUgPSBtb2RlLT5scGNTaXplOworICAgc3QtPmdhbW1hMT1tb2RlLT5nYW1tYTE7CisgICBzdC0+Z2FtbWEyPW1vZGUtPmdhbW1hMjsKKyAgIHN0LT5taW5fcGl0Y2g9bW9kZS0+cGl0Y2hTdGFydDsKKyAgIHN0LT5tYXhfcGl0Y2g9bW9kZS0+cGl0Y2hFbmQ7CisgICBzdC0+bGFnX2ZhY3Rvcj1tb2RlLT5sYWdfZmFjdG9yOworICAgc3QtPmxwY19mbG9vciA9IG1vZGUtPmxwY19mbG9vcjsKKyAgCisgICBzdC0+c3VibW9kZXM9bW9kZS0+c3VibW9kZXM7CisgICBzdC0+c3VibW9kZUlEPXN0LT5zdWJtb2RlU2VsZWN0PW1vZGUtPmRlZmF1bHRTdWJtb2RlOworICAgc3QtPmJvdW5kZWRfcGl0Y2ggPSAxOworCisgICBzdC0+ZW5jb2RlX3N1Ym1vZGUgPSAxOworI2lmZGVmIEVQSUNfNDhLCisgICBzdC0+bGJyXzQ4az1tb2RlLT5sYnI0OGs7CisjZW5kaWYKKworI2lmZGVmIFZPUkJJU19QU1lDSE8KKyAgIHN0LT5wc3kgPSB2b3JiaXNfcHN5X2luaXQoODAwMCwgMjU2KTsKKyAgIHN0LT5jdXJ2ZSA9IChmbG9hdCopc3BlZXhfYWxsb2MoMTI4KnNpemVvZihmbG9hdCkpOworICAgc3QtPm9sZF9jdXJ2ZSA9IChmbG9hdCopc3BlZXhfYWxsb2MoMTI4KnNpemVvZihmbG9hdCkpOworICAgc3QtPnBzeV93aW5kb3cgPSAoZmxvYXQqKXNwZWV4X2FsbG9jKDI1NipzaXplb2YoZmxvYXQpKTsKKyNlbmRpZgorCisgICBzdC0+Y3VtdWxfZ2FpbiA9IDEwMjQ7CisKKyAgIC8qIEFsbG9jYXRpbmcgaW5wdXQgYnVmZmVyICovCisgICBzdC0+d2luQnVmID0gKHNweF93b3JkMTZfdCopc3BlZXhfYWxsb2MoKHN0LT53aW5kb3dTaXplLXN0LT5mcmFtZVNpemUpKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgIC8qIEFsbG9jYXRpbmcgZXhjaXRhdGlvbiBidWZmZXIgKi8KKyAgIHN0LT5leGNCdWYgPSAoc3B4X3dvcmQxNl90KilzcGVleF9hbGxvYygobW9kZS0+ZnJhbWVTaXplK21vZGUtPnBpdGNoRW5kKzIpKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgIHN0LT5leGMgPSBzdC0+ZXhjQnVmICsgbW9kZS0+cGl0Y2hFbmQgKyAyOworICAgc3QtPnN3QnVmID0gKHNweF93b3JkMTZfdCopc3BlZXhfYWxsb2MoKG1vZGUtPmZyYW1lU2l6ZSttb2RlLT5waXRjaEVuZCsyKSpzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisgICBzdC0+c3cgPSBzdC0+c3dCdWYgKyBtb2RlLT5waXRjaEVuZCArIDI7CisKKyAgIHN0LT53aW5kb3c9IGxwY193aW5kb3c7CisgICAKKyAgIC8qIENyZWF0ZSB0aGUgd2luZG93IGZvciBhdXRvY29ycmVsYXRpb24gKGxhZy13aW5kb3dpbmcpICovCisgICBzdC0+bGFnV2luZG93ID0gKHNweF93b3JkMTZfdCopc3BlZXhfYWxsb2MoKHN0LT5scGNTaXplKzEpKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemUrMTtpKyspCisgICAgICBzdC0+bGFnV2luZG93W2ldPTE2Mzg0KmV4cCgtLjUqc3FyKDIqTV9QSSpzdC0+bGFnX2ZhY3RvcippKSk7CisKKyAgIHN0LT5vbGRfbHNwID0gKHNweF9sc3BfdCopc3BlZXhfYWxsb2MoKHN0LT5scGNTaXplKSpzaXplb2Yoc3B4X2xzcF90KSk7CisgICBzdC0+b2xkX3Fsc3AgPSAoc3B4X2xzcF90KilzcGVleF9hbGxvYygoc3QtPmxwY1NpemUpKnNpemVvZihzcHhfbHNwX3QpKTsKKyAgIHN0LT5maXJzdCA9IDE7CisgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgIHsKKyAgICAgIHN0LT5vbGRfbHNwW2ldPUxTUF9TQ0FMSU5HKihNX1BJKigoZmxvYXQpKGkrMSkpKS8oc3QtPmxwY1NpemUrMSk7CisgICB9CisKKyAgIHN0LT5tZW1fc3AgPSAoc3B4X21lbV90KilzcGVleF9hbGxvYygoc3QtPmxwY1NpemUpKnNpemVvZihzcHhfbWVtX3QpKTsKKyAgIHN0LT5tZW1fc3cgPSAoc3B4X21lbV90KilzcGVleF9hbGxvYygoc3QtPmxwY1NpemUpKnNpemVvZihzcHhfbWVtX3QpKTsKKyAgIHN0LT5tZW1fc3dfd2hvbGUgPSAoc3B4X21lbV90KilzcGVleF9hbGxvYygoc3QtPmxwY1NpemUpKnNpemVvZihzcHhfbWVtX3QpKTsKKyAgIHN0LT5tZW1fZXhjID0gKHNweF9tZW1fdCopc3BlZXhfYWxsb2MoKHN0LT5scGNTaXplKSpzaXplb2Yoc3B4X21lbV90KSk7CisgICBzdC0+bWVtX2V4YzIgPSAoc3B4X21lbV90KilzcGVleF9hbGxvYygoc3QtPmxwY1NpemUpKnNpemVvZihzcHhfbWVtX3QpKTsKKworICAgc3QtPnBpX2dhaW4gPSAoc3B4X3dvcmQzMl90KilzcGVleF9hbGxvYygoc3QtPm5iU3ViZnJhbWVzKSpzaXplb2Yoc3B4X3dvcmQzMl90KSk7CisgICBzdC0+aW5ub3Zfcm1zX3NhdmUgPSBOVUxMOworICAgCisgICBzdC0+cGl0Y2ggPSAoaW50KilzcGVleF9hbGxvYygoc3QtPm5iU3ViZnJhbWVzKSpzaXplb2YoaW50KSk7CisKKyAgIHN0LT52YnIgPSAoVkJSU3RhdGUqKXNwZWV4X2FsbG9jKHNpemVvZihWQlJTdGF0ZSkpOworICAgdmJyX2luaXQoc3QtPnZicik7CisgICBzdC0+dmJyX3F1YWxpdHkgPSA4OworICAgc3QtPnZicl9lbmFibGVkID0gMDsKKyAgIHN0LT52YnJfbWF4ID0gMDsKKyAgIHN0LT52YWRfZW5hYmxlZCA9IDA7CisgICBzdC0+ZHR4X2VuYWJsZWQgPSAwOworICAgc3QtPmFicl9lbmFibGVkID0gMDsKKyAgIHN0LT5hYnJfZHJpZnQgPSAwOworCisgICBzdC0+cGxjX3R1bmluZyA9IDI7CisgICBzdC0+Y29tcGxleGl0eT0yOworICAgc3QtPnNhbXBsaW5nX3JhdGU9ODAwMDsKKyAgIHN0LT5kdHhfY291bnQ9MDsKKyAgIHN0LT5pc1dpZGViYW5kID0gMDsKKyAgIHN0LT5oaWdocGFzc19lbmFibGVkID0gMTsKKyAgIAorI2lmZGVmIEVOQUJMRV9WQUxHUklORAorICAgVkFMR1JJTkRfTUFLRV9SRUFEQUJMRShzdCwgKHN0LT5zdGFjay0oY2hhciopc3QpKTsKKyNlbmRpZgorICAgcmV0dXJuIHN0OworfQorCit2b2lkIG5iX2VuY29kZXJfZGVzdHJveSh2b2lkICpzdGF0ZSkKK3sKKyAgIEVuY1N0YXRlICpzdD0oRW5jU3RhdGUgKilzdGF0ZTsKKyAgIC8qIEZyZWUgYWxsIGFsbG9jYXRlZCBtZW1vcnkgKi8KKyNpZiAhKGRlZmluZWQoVkFSX0FSUkFZUykgfHwgZGVmaW5lZCAoVVNFX0FMTE9DQSkpCisgICBzcGVleF9mcmVlX3NjcmF0Y2goc3QtPnN0YWNrKTsKKyNlbmRpZgorCisgICBzcGVleF9mcmVlIChzdC0+d2luQnVmKTsKKyAgIHNwZWV4X2ZyZWUgKHN0LT5leGNCdWYpOworICAgc3BlZXhfZnJlZSAoc3QtPm9sZF9xbHNwKTsKKyAgIHNwZWV4X2ZyZWUgKHN0LT5zd0J1Zik7CisKKyAgIHNwZWV4X2ZyZWUgKHN0LT5sYWdXaW5kb3cpOworCisgICBzcGVleF9mcmVlIChzdC0+b2xkX2xzcCk7CisgICBzcGVleF9mcmVlIChzdC0+bWVtX3NwKTsKKyAgIHNwZWV4X2ZyZWUgKHN0LT5tZW1fc3cpOworICAgc3BlZXhfZnJlZSAoc3QtPm1lbV9zd193aG9sZSk7CisgICBzcGVleF9mcmVlIChzdC0+bWVtX2V4Yyk7CisgICBzcGVleF9mcmVlIChzdC0+bWVtX2V4YzIpOworICAgc3BlZXhfZnJlZSAoc3QtPnBpX2dhaW4pOworICAgc3BlZXhfZnJlZSAoc3QtPnBpdGNoKTsKKworICAgdmJyX2Rlc3Ryb3koc3QtPnZicik7CisgICBzcGVleF9mcmVlIChzdC0+dmJyKTsKKworI2lmZGVmIFZPUkJJU19QU1lDSE8KKyAgIHZvcmJpc19wc3lfZGVzdHJveShzdC0+cHN5KTsKKyAgIHNwZWV4X2ZyZWUgKHN0LT5jdXJ2ZSk7CisgICBzcGVleF9mcmVlIChzdC0+b2xkX2N1cnZlKTsKKyAgIHNwZWV4X2ZyZWUgKHN0LT5wc3lfd2luZG93KTsKKyNlbmRpZgorCisgICAvKkZyZWUgc3RhdGUgbWVtb3J5Li4uIHNob3VsZCBiZSBsYXN0Ki8KKyAgIHNwZWV4X2ZyZWUoc3QpOworfQorCitpbnQgbmJfZW5jb2RlKHZvaWQgKnN0YXRlLCB2b2lkICp2aW4sIFNwZWV4Qml0cyAqYml0cykKK3sKKyAgIEVuY1N0YXRlICpzdDsKKyAgIGludCBpLCBzdWIsIHJvb3RzOworICAgaW50IG9sX3BpdGNoOworICAgc3B4X3dvcmQxNl90IG9sX3BpdGNoX2NvZWY7CisgICBzcHhfd29yZDMyX3Qgb2xfZ2FpbjsKKyAgIFZBUkRFQ0woc3B4X3dvcmQxNl90ICpyaW5naW5nKTsKKyAgIFZBUkRFQ0woc3B4X3dvcmQxNl90ICp0YXJnZXQpOworICAgVkFSREVDTChzcHhfc2lnX3QgKmlubm92KTsKKyAgIFZBUkRFQ0woc3B4X3dvcmQzMl90ICpleGMzMik7CisgICBWQVJERUNMKHNweF9tZW1fdCAqbWVtKTsKKyAgIFZBUkRFQ0woc3B4X2NvZWZfdCAqYndfbHBjMSk7CisgICBWQVJERUNMKHNweF9jb2VmX3QgKmJ3X2xwYzIpOworICAgVkFSREVDTChzcHhfY29lZl90ICpscGMpOworICAgVkFSREVDTChzcHhfbHNwX3QgKmxzcCk7CisgICBWQVJERUNMKHNweF9sc3BfdCAqcWxzcCk7CisgICBWQVJERUNMKHNweF9sc3BfdCAqaW50ZXJwX2xzcCk7CisgICBWQVJERUNMKHNweF9sc3BfdCAqaW50ZXJwX3Fsc3ApOworICAgVkFSREVDTChzcHhfY29lZl90ICppbnRlcnBfbHBjKTsKKyAgIFZBUkRFQ0woc3B4X2NvZWZfdCAqaW50ZXJwX3FscGMpOworICAgY2hhciAqc3RhY2s7CisgICBWQVJERUNMKHNweF93b3JkMTZfdCAqc3luX3Jlc3ApOworICAgVkFSREVDTChzcHhfd29yZDE2X3QgKnJlYWxfZXhjKTsKKyNpZmRlZiBFUElDXzQ4SworICAgaW50IHBpdGNoX2hhbGZbMl07CisgICBpbnQgb2xfcGl0Y2hfaWQ9MDsKKyNlbmRpZgorICAgc3B4X3dvcmQzMl90IGVuZXI9MDsKKyAgIHNweF93b3JkMTZfdCBmaW5lX2dhaW47CisgICBzcHhfd29yZDE2X3QgKmluID0gKHNweF93b3JkMTZfdCopdmluOworCisgICBzdD0oRW5jU3RhdGUgKilzdGF0ZTsKKyAgIHN0YWNrPXN0LT5zdGFjazsKKworICAgQUxMT0MobHBjLCBzdC0+bHBjU2l6ZSwgc3B4X2NvZWZfdCk7CisgICBBTExPQyhid19scGMxLCBzdC0+bHBjU2l6ZSwgc3B4X2NvZWZfdCk7CisgICBBTExPQyhid19scGMyLCBzdC0+bHBjU2l6ZSwgc3B4X2NvZWZfdCk7CisgICBBTExPQyhsc3AsIHN0LT5scGNTaXplLCBzcHhfbHNwX3QpOworICAgQUxMT0MocWxzcCwgc3QtPmxwY1NpemUsIHNweF9sc3BfdCk7CisgICBBTExPQyhpbnRlcnBfbHNwLCBzdC0+bHBjU2l6ZSwgc3B4X2xzcF90KTsKKyAgIEFMTE9DKGludGVycF9xbHNwLCBzdC0+bHBjU2l6ZSwgc3B4X2xzcF90KTsKKyAgIEFMTE9DKGludGVycF9scGMsIHN0LT5scGNTaXplLCBzcHhfY29lZl90KTsKKyAgIEFMTE9DKGludGVycF9xbHBjLCBzdC0+bHBjU2l6ZSwgc3B4X2NvZWZfdCk7CisKKyAgIC8qIE1vdmUgc2lnbmFscyAxIGZyYW1lIHRvd2FyZHMgdGhlIHBhc3QgKi8KKyAgIHNwZWV4X21vdmUoc3QtPmV4Y0J1Ziwgc3QtPmV4Y0J1ZitzdC0+ZnJhbWVTaXplLCAoc3QtPm1heF9waXRjaCsyKSpzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisgICBzcGVleF9tb3ZlKHN0LT5zd0J1Ziwgc3QtPnN3QnVmK3N0LT5mcmFtZVNpemUsIChzdC0+bWF4X3BpdGNoKzIpKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKworICAgaWYgKHN0LT5oaWdocGFzc19lbmFibGVkKQorICAgICAgaGlnaHBhc3MoaW4sIGluLCBzdC0+ZnJhbWVTaXplLCAoc3QtPmlzV2lkZWJhbmQ/SElHSFBBU1NfV0lERUJBTkQ6SElHSFBBU1NfTkFSUk9XQkFORCl8SElHSFBBU1NfSU5QVVQsIHN0LT5tZW1faHApOworICAgCisgICB7CisgICAgICBWQVJERUNMKHNweF93b3JkMTZfdCAqd19zaWcpOworICAgICAgVkFSREVDTChzcHhfd29yZDE2X3QgKmF1dG9jb3JyKTsKKyAgICAgIEFMTE9DKHdfc2lnLCBzdC0+d2luZG93U2l6ZSwgc3B4X3dvcmQxNl90KTsKKyAgICAgIEFMTE9DKGF1dG9jb3JyLCBzdC0+bHBjU2l6ZSsxLCBzcHhfd29yZDE2X3QpOworICAgICAgLyogV2luZG93IGZvciBhbmFseXNpcyAqLworICAgICAgZm9yIChpPTA7aTxzdC0+d2luZG93U2l6ZS1zdC0+ZnJhbWVTaXplO2krKykKKyAgICAgICAgIHdfc2lnW2ldID0gRVhUUkFDVDE2KFNIUjMyKE1VTFQxNl8xNihzdC0+d2luQnVmW2ldLHN0LT53aW5kb3dbaV0pLFNJR19TSElGVCkpOworICAgICAgZm9yICg7aTxzdC0+d2luZG93U2l6ZTtpKyspCisgICAgICAgICB3X3NpZ1tpXSA9IEVYVFJBQ1QxNihTSFIzMihNVUxUMTZfMTYoaW5baS1zdC0+d2luZG93U2l6ZStzdC0+ZnJhbWVTaXplXSxzdC0+d2luZG93W2ldKSxTSUdfU0hJRlQpKTsKKyAgICAgIC8qIENvbXB1dGUgYXV0by1jb3JyZWxhdGlvbiAqLworICAgICAgX3NweF9hdXRvY29ycih3X3NpZywgYXV0b2NvcnIsIHN0LT5scGNTaXplKzEsIHN0LT53aW5kb3dTaXplKTsKKyAgICAgIGF1dG9jb3JyWzBdID0gQUREMTYoYXV0b2NvcnJbMF0sTVVMVDE2XzE2X1ExNShhdXRvY29yclswXSxzdC0+bHBjX2Zsb29yKSk7IC8qIE5vaXNlIGZsb29yIGluIGF1dG8tY29ycmVsYXRpb24gZG9tYWluICovCisKKyAgICAgIC8qIExhZyB3aW5kb3dpbmc6IGVxdWl2YWxlbnQgdG8gZmlsdGVyaW5nIGluIHRoZSBwb3dlci1zcGVjdHJ1bSBkb21haW4gKi8KKyAgICAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemUrMTtpKyspCisgICAgICAgICBhdXRvY29ycltpXSA9IE1VTFQxNl8xNl9RMTQoYXV0b2NvcnJbaV0sc3QtPmxhZ1dpbmRvd1tpXSk7CisKKyAgICAgIC8qIExldmluc29uLUR1cmJpbiAqLworICAgICAgX3NweF9scGMobHBjLCBhdXRvY29yciwgc3QtPmxwY1NpemUpOworICAgICAgLyogTFBDIHRvIExTUHMgKHgtZG9tYWluKSB0cmFuc2Zvcm0gKi8KKyAgICAgIHJvb3RzPWxwY190b19sc3AgKGxwYywgc3QtPmxwY1NpemUsIGxzcCwgMTAsIExTUF9ERUxUQTEsIHN0YWNrKTsKKyAgICAgIC8qIENoZWNrIGlmIHdlIGZvdW5kIGFsbCB0aGUgcm9vdHMgKi8KKyAgICAgIGlmIChyb290cyE9c3QtPmxwY1NpemUpCisgICAgICB7CisgICAgICAgICAvKklmIHdlIGNhbid0IGZpbmQgYWxsIExTUCdzLCBkbyBzb21lIGRhbWFnZSBjb250cm9sIGFuZCB1c2UgcHJldmlvdXMgZmlsdGVyKi8KKyAgICAgICAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemU7aSsrKQorICAgICAgICAgeworICAgICAgICAgICAgbHNwW2ldPXN0LT5vbGRfbHNwW2ldOworICAgICAgICAgfQorICAgICAgfQorICAgfQorCisKKworCisgICAvKiBXaG9sZSBmcmFtZSBhbmFseXNpcyAob3Blbi1sb29wIGVzdGltYXRpb24gb2YgcGl0Y2ggYW5kIGV4Y2l0YXRpb24gZ2FpbikgKi8KKyAgIHsKKyAgICAgIGlmIChzdC0+Zmlyc3QpCisgICAgICAgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgICAgICAgIGludGVycF9sc3BbaV0gPSBsc3BbaV07CisgICAgICBlbHNlCisgICAgICAgICBsc3BfaW50ZXJwb2xhdGUoc3QtPm9sZF9sc3AsIGxzcCwgaW50ZXJwX2xzcCwgc3QtPmxwY1NpemUsIHN0LT5uYlN1YmZyYW1lcywgc3QtPm5iU3ViZnJhbWVzPDwxKTsKKworICAgICAgbHNwX2VuZm9yY2VfbWFyZ2luKGludGVycF9sc3AsIHN0LT5scGNTaXplLCBMU1BfTUFSR0lOKTsKKworICAgICAgLyogQ29tcHV0ZSBpbnRlcnBvbGF0ZWQgTFBDcyAodW5xdWFudGl6ZWQpIGZvciB3aG9sZSBmcmFtZSovCisgICAgICBsc3BfdG9fbHBjKGludGVycF9sc3AsIGludGVycF9scGMsIHN0LT5scGNTaXplLHN0YWNrKTsKKworCisgICAgICAvKk9wZW4tbG9vcCBwaXRjaCovCisgICAgICBpZiAoc3QtPmNvbXBsZXhpdHk+MiB8fCAhc3QtPnN1Ym1vZGVzW3N0LT5zdWJtb2RlSURdIHx8IHN0LT52YnJfZW5hYmxlZCB8fCBzdC0+dmFkX2VuYWJsZWQgfHwgU1VCTU9ERShmb3JjZWRfcGl0Y2hfZ2FpbikgfHwKKyAgICAgICAgICBTVUJNT0RFKGxicl9waXRjaCkgIT0gLTEpCisgICAgICB7CisgICAgICAgICBpbnQgbm9sX3BpdGNoWzZdOworICAgICAgICAgc3B4X3dvcmQxNl90IG5vbF9waXRjaF9jb2VmWzZdOworICAgICAgICAgCisgICAgICAgICBid19scGMoc3QtPmdhbW1hMSwgaW50ZXJwX2xwYywgYndfbHBjMSwgc3QtPmxwY1NpemUpOworICAgICAgICAgYndfbHBjKHN0LT5nYW1tYTIsIGludGVycF9scGMsIGJ3X2xwYzIsIHN0LT5scGNTaXplKTsKKyAgICAgICAgIAorICAgICAgICAgZm9yIChpPTA7aTxzdC0+d2luZG93U2l6ZS1zdC0+ZnJhbWVTaXplO2krKykKKyAgICAgICAgICAgIHN0LT5zd1tpXSA9IHN0LT53aW5CdWZbaV07CisgICAgICAgICBmb3IgKDtpPHN0LT5mcmFtZVNpemU7aSsrKQorICAgICAgICAgICAgc3QtPnN3W2ldID0gaW5baS1zdC0+d2luZG93U2l6ZStzdC0+ZnJhbWVTaXplXTsKKyAgICAgICAgIGZpbHRlcl9tZW0xNihzdC0+c3csIGJ3X2xwYzEsIGJ3X2xwYzIsIHN0LT5zdywgc3QtPmZyYW1lU2l6ZSwgc3QtPmxwY1NpemUsIHN0LT5tZW1fc3dfd2hvbGUsIHN0YWNrKTsKKworICAgICAgICAgb3Blbl9sb29wX25iZXN0X3BpdGNoKHN0LT5zdywgc3QtPm1pbl9waXRjaCwgc3QtPm1heF9waXRjaCwgc3QtPmZyYW1lU2l6ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9sX3BpdGNoLCBub2xfcGl0Y2hfY29lZiwgNiwgc3RhY2spOworICAgICAgICAgb2xfcGl0Y2g9bm9sX3BpdGNoWzBdOworICAgICAgICAgb2xfcGl0Y2hfY29lZiA9IG5vbF9waXRjaF9jb2VmWzBdOworICAgICAgICAgLypUcnkgdG8gcmVtb3ZlIHBpdGNoIG11bHRpcGxlcyovCisgICAgICAgICBmb3IgKGk9MTtpPDY7aSsrKQorICAgICAgICAgeworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICAgICAgICBpZiAoKG5vbF9waXRjaF9jb2VmW2ldPk1VTFQxNl8xNl9RMTUobm9sX3BpdGNoX2NvZWZbMF0sMjc4NTMpKSAmJiAKKyNlbHNlCisgICAgICAgICAgICBpZiAoKG5vbF9waXRjaF9jb2VmW2ldPi44NSpub2xfcGl0Y2hfY29lZlswXSkgJiYgCisjZW5kaWYKKyAgICAgICAgICAgICAgICAoQUJTKDIqbm9sX3BpdGNoW2ldLW9sX3BpdGNoKTw9MiB8fCBBQlMoMypub2xfcGl0Y2hbaV0tb2xfcGl0Y2gpPD0zIHx8IAorICAgICAgICAgICAgICAgICBBQlMoNCpub2xfcGl0Y2hbaV0tb2xfcGl0Y2gpPD00IHx8IEFCUyg1Km5vbF9waXRjaFtpXS1vbF9waXRjaCk8PTUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgLypvbF9waXRjaF9jb2VmPW5vbF9waXRjaF9jb2VmW2ldOyovCisgICAgICAgICAgICAgICBvbF9waXRjaCA9IG5vbF9waXRjaFtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIC8qaWYgKG9sX3BpdGNoPjUwKQorICAgICAgICAgICBvbF9waXRjaC89MjsqLworICAgICAgICAgLypvbF9waXRjaF9jb2VmID0gc3FydChvbF9waXRjaF9jb2VmKTsqLworCisjaWZkZWYgRVBJQ180OEsKKyAgICAgICAgIGlmIChzdC0+bGJyXzQ4aykKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvbF9waXRjaCA8IHN0LT5taW5fcGl0Y2grMikKKyAgICAgICAgICAgICAgIG9sX3BpdGNoID0gc3QtPm1pbl9waXRjaCsyOworICAgICAgICAgICAgaWYgKG9sX3BpdGNoID4gc3QtPm1heF9waXRjaC0yKQorICAgICAgICAgICAgICAgb2xfcGl0Y2ggPSBzdC0+bWF4X3BpdGNoLTI7CisgICAgICAgICAgICBvcGVuX2xvb3BfbmJlc3RfcGl0Y2goc3QtPnN3LCBvbF9waXRjaC0yLCBvbF9waXRjaCsyLCBzdC0+ZnJhbWVTaXplPj4xLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGl0Y2hfaGFsZlswXSwgbm9sX3BpdGNoX2NvZWYsIDEsIHN0YWNrKTsKKyAgICAgICAgICAgIG9wZW5fbG9vcF9uYmVzdF9waXRjaChzdC0+c3crKHN0LT5mcmFtZVNpemU+PjEpLCBwaXRjaF9oYWxmWzBdLTEsIHBpdGNoX2hhbGZbMF0rMiwgc3QtPmZyYW1lU2l6ZT4+MSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpdGNoX2hhbGZbMV0sIG5vbF9waXRjaF9jb2VmLCAxLCBzdGFjayk7CisgICAgICAgICB9CisjZW5kaWYKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICBvbF9waXRjaD0wOworICAgICAgICAgb2xfcGl0Y2hfY29lZj0wOworICAgICAgfQorICAgICAgCisgICAgICAvKkNvbXB1dGUgInJlYWwiIGV4Y2l0YXRpb24qLworICAgICAgZm9yIChpPTA7aTxzdC0+d2luZG93U2l6ZS1zdC0+ZnJhbWVTaXplO2krKykKKyAgICAgICAgIHN0LT5leGNbaV0gPSBzdC0+d2luQnVmW2ldOworICAgICAgZm9yICg7aTxzdC0+ZnJhbWVTaXplO2krKykKKyAgICAgICAgIHN0LT5leGNbaV0gPSBpbltpLXN0LT53aW5kb3dTaXplK3N0LT5mcmFtZVNpemVdOworICAgICAgZmlyX21lbTE2KHN0LT5leGMsIGludGVycF9scGMsIHN0LT5leGMsIHN0LT5mcmFtZVNpemUsIHN0LT5scGNTaXplLCBzdC0+bWVtX2V4Yywgc3RhY2spOworCisgICAgICAvKiBDb21wdXRlIG9wZW4tbG9vcCBleGNpdGF0aW9uIGdhaW4gKi8KKyNpZmRlZiBFUElDXzQ4SworICAgICAgaWYgKHN0LT5sYnJfNDhrKQorICAgICAgeworICAgICAgICAgZmxvYXQgb2wxPTAsb2wyPTA7CisgICAgICAgICBmbG9hdCBvbF9nYWluMjsKKyAgICAgICAgIG9sMSA9IGNvbXB1dGVfcm1zMTYoc3QtPmV4Yywgc3QtPmZyYW1lU2l6ZT4+MSk7CisgICAgICAgICBvbDIgPSBjb21wdXRlX3JtczE2KHN0LT5leGMrKHN0LT5mcmFtZVNpemU+PjEpLCBzdC0+ZnJhbWVTaXplPj4xKTsKKyAgICAgICAgIG9sMSAqPSBvbDEqKHN0LT5mcmFtZVNpemU+PjEpOworICAgICAgICAgb2wyICo9IG9sMiooc3QtPmZyYW1lU2l6ZT4+MSk7CisKKyAgICAgICAgIG9sX2dhaW4yPW9sMTsKKyAgICAgICAgIGlmIChvbDI+b2wxKQorICAgICAgICAgICAgb2xfZ2FpbjI9b2wyOworICAgICAgICAgb2xfZ2FpbjIgPSBzcXJ0KDIqb2xfZ2FpbjIqKG9sMStvbDIpKSoxLjMqKDEtLjUqR0FJTl9TQ0FMSU5HXzEqR0FJTl9TQ0FMSU5HXzEqb2xfcGl0Y2hfY29lZipvbF9waXRjaF9jb2VmKTsKKyAgICAgIAorICAgICAgICAgb2xfZ2Fpbj1TSFIzMihzcXJ0KDErb2xfZ2FpbjIvc3QtPmZyYW1lU2l6ZSksU0lHX1NISUZUKTsKKworICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgIHsKKyAgICAgICAgIHNweF93b3JkMTZfdCBnID0gY29tcHV0ZV9ybXMxNihzdC0+ZXhjLCBzdC0+ZnJhbWVTaXplKTsKKyAgICAgICAgIGlmIChvbF9waXRjaD4wKQorICAgICAgICAgICAgb2xfZ2FpbiA9IE1VTFQxNl8xNihnLCBNVUxUMTZfMTZfUTE0KFFDT05TVDE2KDEuMSwxNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNweF9zcXJ0KFFDT05TVDMyKDEuLDI4KS1NVUxUMTZfMzJfUTE1KFFDT05TVDE2KC44LDE1KSxTSEwzMihNVUxUMTZfMTYob2xfcGl0Y2hfY29lZixvbF9waXRjaF9jb2VmKSwxNikpKSkpOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgb2xfZ2FpbiA9IFNITDMyKEVYVEVORDMyKGcpLFNJR19TSElGVCk7CisgICAgICB9CisgICB9CisKKyNpZmRlZiBWT1JCSVNfUFNZQ0hPCisgICBmb3IoaT0wO2k8MjU2LXN0LT5mcmFtZVNpemU7aSsrKQorICAgICAgc3QtPnBzeV93aW5kb3dbaV0gPSBzdC0+cHN5X3dpbmRvd1tpK3N0LT5mcmFtZVNpemVdOworICAgZm9yKGk9MDtpPHN0LT5mcmFtZVNpemU7aSsrKQorICAgICAgc3QtPnBzeV93aW5kb3dbMjU2LXN0LT5mcmFtZVNpemUraV0gPSBpbltpXTsKKyAgIGNvbXB1dGVfY3VydmUoc3QtPnBzeSwgc3QtPnBzeV93aW5kb3csIHN0LT5jdXJ2ZSk7CisgICAvKnByaW50X3ZlYyhzdC0+Y3VydmUsIDEyOCwgImN1cnZlIik7Ki8KKyAgIGlmIChzdC0+Zmlyc3QpCisgICAgICBmb3IgKGk9MDtpPDEyODtpKyspCisgICAgICAgICBzdC0+b2xkX2N1cnZlW2ldID0gc3QtPmN1cnZlW2ldOworI2VuZGlmCisKKyAgIC8qVkJSIHN0dWZmKi8KKyAgIGlmIChzdC0+dmJyICYmIChzdC0+dmJyX2VuYWJsZWR8fHN0LT52YWRfZW5hYmxlZCkpCisgICB7CisgICAgICBmbG9hdCBsc3BfZGlzdD0wOworICAgICAgZm9yIChpPTA7aTxzdC0+bHBjU2l6ZTtpKyspCisgICAgICAgICBsc3BfZGlzdCArPSAoc3QtPm9sZF9sc3BbaV0gLSBsc3BbaV0pKihzdC0+b2xkX2xzcFtpXSAtIGxzcFtpXSk7CisgICAgICBsc3BfZGlzdCAvPSBMU1BfU0NBTElORypMU1BfU0NBTElORzsKKyAgICAgIAorICAgICAgaWYgKHN0LT5hYnJfZW5hYmxlZCkKKyAgICAgIHsKKyAgICAgICAgIGZsb2F0IHF1YWxfY2hhbmdlPTA7CisgICAgICAgICBpZiAoc3QtPmFicl9kcmlmdDIgKiBzdC0+YWJyX2RyaWZ0ID4gMCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE9ubHkgYWRhcHQgaWYgbG9uZy10ZXJtIGFuZCBzaG9ydC10ZXJtIGRyaWZ0IGFyZSB0aGUgc2FtZSBzaWduICovCisgICAgICAgICAgICBxdWFsX2NoYW5nZSA9IC0uMDAwMDEqc3QtPmFicl9kcmlmdC8oMStzdC0+YWJyX2NvdW50KTsKKyAgICAgICAgICAgIGlmIChxdWFsX2NoYW5nZT4uMDUpCisgICAgICAgICAgICAgICBxdWFsX2NoYW5nZT0uMDU7CisgICAgICAgICAgICBpZiAocXVhbF9jaGFuZ2U8LS4wNSkKKyAgICAgICAgICAgICAgIHF1YWxfY2hhbmdlPS0uMDU7CisgICAgICAgICB9CisgICAgICAgICBzdC0+dmJyX3F1YWxpdHkgKz0gcXVhbF9jaGFuZ2U7CisgICAgICAgICBpZiAoc3QtPnZicl9xdWFsaXR5PjEwKQorICAgICAgICAgICAgc3QtPnZicl9xdWFsaXR5PTEwOworICAgICAgICAgaWYgKHN0LT52YnJfcXVhbGl0eTwwKQorICAgICAgICAgICAgc3QtPnZicl9xdWFsaXR5PTA7CisgICAgICB9CisKKyAgICAgIHN0LT5yZWxhdGl2ZV9xdWFsaXR5ID0gdmJyX2FuYWx5c2lzKHN0LT52YnIsIGluLCBzdC0+ZnJhbWVTaXplLCBvbF9waXRjaCwgR0FJTl9TQ0FMSU5HXzEqb2xfcGl0Y2hfY29lZik7CisgICAgICAvKmlmIChkZWx0YV9xdWFsPDApKi8KKyAgICAgIC8qICBkZWx0YV9xdWFsKj0uMSooMytzdC0+dmJyX3F1YWxpdHkpOyovCisgICAgICBpZiAoc3QtPnZicl9lbmFibGVkKSAKKyAgICAgIHsKKyAgICAgICAgIHNweF9pbnQzMl90IG1vZGU7CisgICAgICAgICBpbnQgY2hvaWNlPTA7CisgICAgICAgICBmbG9hdCBtaW5fZGlmZj0xMDA7CisgICAgICAgICBtb2RlID0gODsKKyAgICAgICAgIHdoaWxlIChtb2RlKQorICAgICAgICAgeworICAgICAgICAgICAgaW50IHYxOworICAgICAgICAgICAgZmxvYXQgdGhyZXNoOworICAgICAgICAgICAgdjE9KGludClmbG9vcihzdC0+dmJyX3F1YWxpdHkpOworICAgICAgICAgICAgaWYgKHYxPT0xMCkKKyAgICAgICAgICAgICAgIHRocmVzaCA9IHZicl9uYl90aHJlc2hbbW9kZV1bdjFdOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgdGhyZXNoID0gKHN0LT52YnJfcXVhbGl0eS12MSkqdmJyX25iX3RocmVzaFttb2RlXVt2MSsxXSArICgxK3YxLXN0LT52YnJfcXVhbGl0eSkqdmJyX25iX3RocmVzaFttb2RlXVt2MV07CisgICAgICAgICAgICBpZiAoc3QtPnJlbGF0aXZlX3F1YWxpdHkgPiB0aHJlc2ggJiYgCisgICAgICAgICAgICAgICAgc3QtPnJlbGF0aXZlX3F1YWxpdHktdGhyZXNoPG1pbl9kaWZmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgY2hvaWNlID0gbW9kZTsKKyAgICAgICAgICAgICAgIG1pbl9kaWZmID0gc3QtPnJlbGF0aXZlX3F1YWxpdHktdGhyZXNoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW9kZS0tOworICAgICAgICAgfQorICAgICAgICAgbW9kZT1jaG9pY2U7CisgICAgICAgICBpZiAobW9kZT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzdC0+ZHR4X2NvdW50PT0wIHx8IGxzcF9kaXN0Pi4wNSB8fCAhc3QtPmR0eF9lbmFibGVkIHx8IHN0LT5kdHhfY291bnQ+MjApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBtb2RlPTE7CisgICAgICAgICAgICAgICBzdC0+ZHR4X2NvdW50PTE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgbW9kZT0wOworICAgICAgICAgICAgICAgc3QtPmR0eF9jb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0LT5kdHhfY291bnQ9MDsKKyAgICAgICAgIH0KKworICAgICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3RhdGUsIFNQRUVYX1NFVF9NT0RFLCAmbW9kZSk7CisgICAgICAgICBpZiAoc3QtPnZicl9tYXg+MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHNweF9pbnQzMl90IHJhdGU7CisgICAgICAgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdGF0ZSwgU1BFRVhfR0VUX0JJVFJBVEUsICZyYXRlKTsKKyAgICAgICAgICAgIGlmIChyYXRlID4gc3QtPnZicl9tYXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICByYXRlID0gc3QtPnZicl9tYXg7CisgICAgICAgICAgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdGF0ZSwgU1BFRVhfU0VUX0JJVFJBVEUsICZyYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIAorICAgICAgICAgaWYgKHN0LT5hYnJfZW5hYmxlZCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHNweF9pbnQzMl90IGJpdHJhdGU7CisgICAgICAgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdGF0ZSwgU1BFRVhfR0VUX0JJVFJBVEUsICZiaXRyYXRlKTsKKyAgICAgICAgICAgIHN0LT5hYnJfZHJpZnQrPShiaXRyYXRlLXN0LT5hYnJfZW5hYmxlZCk7CisgICAgICAgICAgICBzdC0+YWJyX2RyaWZ0MiA9IC45NSpzdC0+YWJyX2RyaWZ0MiArIC4wNSooYml0cmF0ZS1zdC0+YWJyX2VuYWJsZWQpOworICAgICAgICAgICAgc3QtPmFicl9jb3VudCArPSAxLjA7CisgICAgICAgICB9CisKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICAvKlZBRCBvbmx5IGNhc2UqLworICAgICAgICAgaW50IG1vZGU7CisgICAgICAgICBpZiAoc3QtPnJlbGF0aXZlX3F1YWxpdHk8MikKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzdC0+ZHR4X2NvdW50PT0wIHx8IGxzcF9kaXN0Pi4wNSB8fCAhc3QtPmR0eF9lbmFibGVkIHx8IHN0LT5kdHhfY291bnQ+MjApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBzdC0+ZHR4X2NvdW50PTE7CisgICAgICAgICAgICAgICBtb2RlPTE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgbW9kZT0wOworICAgICAgICAgICAgICAgc3QtPmR0eF9jb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0LT5kdHhfY291bnQgPSAwOworICAgICAgICAgICAgbW9kZT1zdC0+c3VibW9kZVNlbGVjdDsKKyAgICAgICAgIH0KKyAgICAgICAgIC8qc3BlZXhfZW5jb2Rlcl9jdGwoc3RhdGUsIFNQRUVYX1NFVF9NT0RFLCAmbW9kZSk7Ki8KKyAgICAgICAgIHN0LT5zdWJtb2RlSUQ9bW9kZTsKKyAgICAgIH0gCisgICB9IGVsc2UgeworICAgICAgc3QtPnJlbGF0aXZlX3F1YWxpdHkgPSAtMTsKKyAgIH0KKworICAgaWYgKHN0LT5lbmNvZGVfc3VibW9kZSkKKyAgIHsKKyNpZmRlZiBFUElDXzQ4SworICAgaWYgKCFzdC0+bGJyXzQ4aykgeworI2VuZGlmCisKKyAgIC8qIEZpcnN0LCB0cmFuc21pdCBhIHplcm8gZm9yIG5hcnJvd2JhbmQgKi8KKyAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCAwLCAxKTsKKworICAgLyogVHJhbnNtaXQgdGhlIHN1Yi1tb2RlIHdlIHVzZSBmb3IgdGhpcyBmcmFtZSAqLworICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIHN0LT5zdWJtb2RlSUQsIE5CX1NVQk1PREVfQklUUyk7CisKKyNpZmRlZiBFUElDXzQ4SworICAgfQorI2VuZGlmCisgICB9CisKKyAgIC8qIElmIG51bGwgbW9kZSAobm8gdHJhbnNtaXNzaW9uKSwganVzdCBzZXQgYSBjb3VwbGUgdGhpbmdzIHRvIHplcm8qLworICAgaWYgKHN0LT5zdWJtb2Rlc1tzdC0+c3VibW9kZUlEXSA9PSBOVUxMKQorICAgeworICAgICAgZm9yIChpPTA7aTxzdC0+ZnJhbWVTaXplO2krKykKKyAgICAgICAgIHN0LT5leGNbaV09c3QtPnN3W2ldPVZFUllfU01BTEw7CisKKyAgICAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemU7aSsrKQorICAgICAgICAgc3QtPm1lbV9zd1tpXT0wOworICAgICAgc3QtPmZpcnN0PTE7CisgICAgICBzdC0+Ym91bmRlZF9waXRjaCA9IDE7CisKKyAgICAgIHNwZWV4X21vdmUoc3QtPndpbkJ1ZiwgaW4rMipzdC0+ZnJhbWVTaXplLXN0LT53aW5kb3dTaXplLCAoc3QtPndpbmRvd1NpemUtc3QtPmZyYW1lU2l6ZSkqc2l6ZW9mKHNweF93b3JkMTZfdCkpOworCisgICAgICAvKiBDbGVhciBtZW1vcnkgKG5vIG5lZWQgdG8gcmVhbGx5IGNvbXB1dGUgaXQpICovCisgICAgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgICAgIHN0LT5tZW1fc3BbaV0gPSAwOworICAgICAgcmV0dXJuIDA7CisKKyAgIH0KKworICAgLyogTFNQIFF1YW50aXphdGlvbiAqLworICAgaWYgKHN0LT5maXJzdCkKKyAgIHsKKyAgICAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemU7aSsrKQorICAgICAgICAgc3QtPm9sZF9sc3BbaV0gPSBsc3BbaV07CisgICB9CisKKworICAgLypRdWFudGl6ZSBMU1BzKi8KKyNpZiAxIC8qMCBmb3IgdW5xdWFudGl6ZWQqLworICAgU1VCTU9ERShsc3BfcXVhbnQpKGxzcCwgcWxzcCwgc3QtPmxwY1NpemUsIGJpdHMpOworI2Vsc2UKKyAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemU7aSsrKQorICAgICBxbHNwW2ldPWxzcFtpXTsKKyNlbmRpZgorCisjaWZkZWYgRVBJQ180OEsKKyAgIGlmIChzdC0+bGJyXzQ4aykgeworICAgICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIHBpdGNoX2hhbGZbMF0tc3QtPm1pbl9waXRjaCwgNyk7CisgICAgICBzcGVleF9iaXRzX3BhY2soYml0cywgcGl0Y2hfaGFsZlsxXS1waXRjaF9oYWxmWzBdKzEsIDIpOworICAgICAgCisgICAgICB7CisgICAgICAgICBpbnQgcXVhbnQgPSAoaW50KWZsb29yKC41KzcuNCpHQUlOX1NDQUxJTkdfMSpvbF9waXRjaF9jb2VmKTsKKyAgICAgICAgIGlmIChxdWFudD43KQorICAgICAgICAgICAgcXVhbnQ9NzsKKyAgICAgICAgIGlmIChxdWFudDwwKQorICAgICAgICAgICAgcXVhbnQ9MDsKKyAgICAgICAgIG9sX3BpdGNoX2lkPXF1YW50OworICAgICAgICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIHF1YW50LCAzKTsKKyAgICAgICAgIG9sX3BpdGNoX2NvZWY9R0FJTl9TQ0FMSU5HKjAuMTM1MTQqcXVhbnQ7CisgICAgICAgICAKKyAgICAgIH0KKyAgICAgIHsKKyAgICAgICAgIGludCBxZSA9IChpbnQpKGZsb29yKC41KzIuMSpsb2cob2xfZ2FpbioxLjAvU0lHX1NDQUxJTkcpKSktMjsKKyAgICAgICAgIGlmIChxZTwwKQorICAgICAgICAgICAgcWU9MDsKKyAgICAgICAgIGlmIChxZT4xNSkKKyAgICAgICAgICAgIHFlPTE1OworICAgICAgICAgb2xfZ2FpbiA9IGV4cCgocWUrMikvMi4xKSpTSUdfU0NBTElORzsKKyAgICAgICAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBxZSwgNCk7CisgICAgICB9CisKKyAgIH0gZWxzZSB7CisjZW5kaWYKKworICAgLypJZiB3ZSB1c2UgbG93IGJpdC1yYXRlIHBpdGNoIG1vZGUsIHRyYW5zbWl0IG9wZW4tbG9vcCBwaXRjaCovCisgICBpZiAoU1VCTU9ERShsYnJfcGl0Y2gpIT0tMSkKKyAgIHsKKyAgICAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBvbF9waXRjaC1zdC0+bWluX3BpdGNoLCA3KTsKKyAgIH0gCisKKyAgIGlmIChTVUJNT0RFKGZvcmNlZF9waXRjaF9nYWluKSkKKyAgIHsKKyAgICAgIGludCBxdWFudDsKKyAgICAgIHF1YW50ID0gKGludClmbG9vciguNSsxNSpvbF9waXRjaF9jb2VmKkdBSU5fU0NBTElOR18xKTsKKyAgICAgIGlmIChxdWFudD4xNSkKKyAgICAgICAgIHF1YW50PTE1OworICAgICAgaWYgKHF1YW50PDApCisgICAgICAgICBxdWFudD0wOworICAgICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIHF1YW50LCA0KTsKKyAgICAgIG9sX3BpdGNoX2NvZWY9R0FJTl9TQ0FMSU5HKjAuMDY2NjY3KnF1YW50OworICAgfQorICAgCisgICAKKyAgIC8qUXVhbnRpemUgYW5kIHRyYW5zbWl0IG9wZW4tbG9vcCBleGNpdGF0aW9uIGdhaW4qLworI2lmZGVmIEZJWEVEX1BPSU5UCisgICB7CisgICAgICBpbnQgcWUgPSBzY2FsX3F1YW50MzIob2xfZ2Fpbiwgb2xfZ2Fpbl90YWJsZSwgMzIpOworICAgICAgLypvbF9nYWluID0gZXhwKHFlLzMuNSkqU0lHX1NDQUxJTkc7Ki8KKyAgICAgIG9sX2dhaW4gPSBNVUxUMTZfMzJfUTE1KDI4NDA2LG9sX2dhaW5fdGFibGVbcWVdKTsKKyAgICAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBxZSwgNSk7CisgICB9CisjZWxzZQorICAgeworICAgICAgaW50IHFlID0gKGludCkoZmxvb3IoLjUrMy41KmxvZyhvbF9nYWluKjEuMC9TSUdfU0NBTElORykpKTsKKyAgICAgIGlmIChxZTwwKQorICAgICAgICAgcWU9MDsKKyAgICAgIGlmIChxZT4zMSkKKyAgICAgICAgIHFlPTMxOworICAgICAgb2xfZ2FpbiA9IGV4cChxZS8zLjUpKlNJR19TQ0FMSU5HOworICAgICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIHFlLCA1KTsKKyAgIH0KKyNlbmRpZgorCisKKyNpZmRlZiBFUElDXzQ4SworICAgfQorI2VuZGlmCisKKworICAgLyogU3BlY2lhbCBjYXNlIGZvciBmaXJzdCBmcmFtZSAqLworICAgaWYgKHN0LT5maXJzdCkKKyAgIHsKKyAgICAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemU7aSsrKQorICAgICAgICAgc3QtPm9sZF9xbHNwW2ldID0gcWxzcFtpXTsKKyAgIH0KKworICAgLyogVGFyZ2V0IHNpZ25hbCAqLworICAgQUxMT0ModGFyZ2V0LCBzdC0+c3ViZnJhbWVTaXplLCBzcHhfd29yZDE2X3QpOworICAgQUxMT0MoaW5ub3YsIHN0LT5zdWJmcmFtZVNpemUsIHNweF9zaWdfdCk7CisgICBBTExPQyhleGMzMiwgc3QtPnN1YmZyYW1lU2l6ZSwgc3B4X3dvcmQzMl90KTsKKyAgIEFMTE9DKHJpbmdpbmcsIHN0LT5zdWJmcmFtZVNpemUsIHNweF93b3JkMTZfdCk7CisgICBBTExPQyhzeW5fcmVzcCwgc3QtPnN1YmZyYW1lU2l6ZSwgc3B4X3dvcmQxNl90KTsKKyAgIEFMTE9DKHJlYWxfZXhjLCBzdC0+c3ViZnJhbWVTaXplLCBzcHhfd29yZDE2X3QpOworICAgQUxMT0MobWVtLCBzdC0+bHBjU2l6ZSwgc3B4X21lbV90KTsKKworICAgLyogTG9vcCBvbiBzdWItZnJhbWVzICovCisgICBmb3IgKHN1Yj0wO3N1YjxzdC0+bmJTdWJmcmFtZXM7c3ViKyspCisgICB7CisgICAgICBpbnQgICBvZmZzZXQ7CisgICAgICBzcHhfd29yZDE2X3QgKnN3OworICAgICAgc3B4X3dvcmQxNl90ICpleGM7CisgICAgICBpbnQgcGl0Y2g7CisgICAgICBpbnQgcmVzcG9uc2VfYm91bmQgPSBzdC0+c3ViZnJhbWVTaXplOworI2lmZGVmIEVQSUNfNDhLCisgICAgICBpZiAoc3QtPmxicl80OGspCisgICAgICB7CisgICAgICAgICBpZiAoc3ViKjIgPCBzdC0+bmJTdWJmcmFtZXMpCisgICAgICAgICAgICBvbF9waXRjaCA9IHBpdGNoX2hhbGZbMF07CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBvbF9waXRjaCA9IHBpdGNoX2hhbGZbMV07CisgICAgICB9CisjZW5kaWYKKworICAgICAgLyogT2Zmc2V0IHJlbGF0aXZlIHRvIHN0YXJ0IG9mIGZyYW1lICovCisgICAgICBvZmZzZXQgPSBzdC0+c3ViZnJhbWVTaXplKnN1YjsKKyAgICAgIC8qIEV4Y2l0YXRpb24gKi8KKyAgICAgIGV4Yz1zdC0+ZXhjK29mZnNldDsKKyAgICAgIC8qIFdlaWdodGVkIHNpZ25hbCAqLworICAgICAgc3c9c3QtPnN3K29mZnNldDsKKyAgICAgIAorICAgICAgLyogTFNQIGludGVycG9sYXRpb24gKHF1YW50aXplZCBhbmQgdW5xdWFudGl6ZWQpICovCisgICAgICBsc3BfaW50ZXJwb2xhdGUoc3QtPm9sZF9sc3AsIGxzcCwgaW50ZXJwX2xzcCwgc3QtPmxwY1NpemUsIHN1Yiwgc3QtPm5iU3ViZnJhbWVzKTsKKyAgICAgIGxzcF9pbnRlcnBvbGF0ZShzdC0+b2xkX3Fsc3AsIHFsc3AsIGludGVycF9xbHNwLCBzdC0+bHBjU2l6ZSwgc3ViLCBzdC0+bmJTdWJmcmFtZXMpOworCisgICAgICAvKiBNYWtlIHN1cmUgdGhlIGZpbHRlcnMgYXJlIHN0YWJsZSAqLworICAgICAgbHNwX2VuZm9yY2VfbWFyZ2luKGludGVycF9sc3AsIHN0LT5scGNTaXplLCBMU1BfTUFSR0lOKTsKKyAgICAgIGxzcF9lbmZvcmNlX21hcmdpbihpbnRlcnBfcWxzcCwgc3QtPmxwY1NpemUsIExTUF9NQVJHSU4pOworCisgICAgICAvKiBDb21wdXRlIGludGVycG9sYXRlZCBMUENzIChxdWFudGl6ZWQgYW5kIHVucXVhbnRpemVkKSAqLworICAgICAgbHNwX3RvX2xwYyhpbnRlcnBfbHNwLCBpbnRlcnBfbHBjLCBzdC0+bHBjU2l6ZSxzdGFjayk7CisKKyAgICAgIGxzcF90b19scGMoaW50ZXJwX3Fsc3AsIGludGVycF9xbHBjLCBzdC0+bHBjU2l6ZSwgc3RhY2spOworCisgICAgICAvKiBDb21wdXRlIGFuYWx5c2lzIGZpbHRlciBnYWluIGF0IHc9cGkgKGZvciB1c2UgaW4gU0ItQ0VMUCkgKi8KKyAgICAgIHsKKyAgICAgICAgIHNweF93b3JkMzJfdCBwaV9nPUxQQ19TQ0FMSU5HOworICAgICAgICAgZm9yIChpPTA7aTxzdC0+bHBjU2l6ZTtpKz0yKQorICAgICAgICAgeworICAgICAgICAgICAgLypwaV9nICs9IC1zdC0+aW50ZXJwX3FscGNbaV0gKyAgc3QtPmludGVycF9xbHBjW2krMV07Ki8KKyAgICAgICAgICAgIHBpX2cgPSBBREQzMihwaV9nLCBTVUIzMihFWFRFTkQzMihpbnRlcnBfcWxwY1tpKzFdKSxFWFRFTkQzMihpbnRlcnBfcWxwY1tpXSkpKTsKKyAgICAgICAgIH0KKyAgICAgICAgIHN0LT5waV9nYWluW3N1Yl0gPSBwaV9nOworICAgICAgfQorCisjaWZkZWYgVk9SQklTX1BTWUNITworICAgICAgeworICAgICAgICAgZmxvYXQgY3Vycl9jdXJ2ZVsxMjhdOworICAgICAgICAgZmxvYXQgZmFjdCA9ICgoZmxvYXQpc3ViKzEuMGYpL3N0LT5uYlN1YmZyYW1lczsKKyAgICAgICAgIGZvciAoaT0wO2k8MTI4O2krKykKKyAgICAgICAgICAgIGN1cnJfY3VydmVbaV0gPSAoMS4wZi1mYWN0KSpzdC0+b2xkX2N1cnZlW2ldICsgZmFjdCpzdC0+Y3VydmVbaV07CisgICAgICAgICBjdXJ2ZV90b19scGMoc3QtPnBzeSwgY3Vycl9jdXJ2ZSwgYndfbHBjMSwgYndfbHBjMiwgMTApOworICAgICAgfQorI2Vsc2UKKyAgICAgIC8qIENvbXB1dGUgYmFuZHdpZHRoLWV4cGFuZGVkICh1bnF1YW50aXplZCkgTFBDcyBmb3IgcGVyY2VwdHVhbCB3ZWlnaHRpbmcgKi8KKyAgICAgIGJ3X2xwYyhzdC0+Z2FtbWExLCBpbnRlcnBfbHBjLCBid19scGMxLCBzdC0+bHBjU2l6ZSk7CisgICAgICBpZiAoc3QtPmdhbW1hMj49MCkKKyAgICAgICAgIGJ3X2xwYyhzdC0+Z2FtbWEyLCBpbnRlcnBfbHBjLCBid19scGMyLCBzdC0+bHBjU2l6ZSk7CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgICBid19scGMyWzBdPTE7CisgICAgICAgICBmb3IgKGk9MTtpPD1zdC0+bHBjU2l6ZTtpKyspCisgICAgICAgICAgICBid19scGMyW2ldPTA7CisgICAgICB9CisgICAgICAvKnByaW50X3ZlYyhzdC0+YndfbHBjMSwgMTAsICJid19scGMiKTsqLworI2VuZGlmCisKKyAgICAgIHsKKyAgICAgICAgIC8qRklYTUU6IFRoaXMgd2lsbCBicmVhayBpZiB3ZSBjaGFuZ2UgdGhlIHdpbmRvdyBzaXplICovCisgICAgICAgICBpZiAoc3QtPndpbmRvd1NpemUtc3QtPmZyYW1lU2l6ZSAhPSBzdC0+c3ViZnJhbWVTaXplKQorICAgICAgICAgICAgc3BlZXhfZXJyb3IoIndpbmRvd1NpemUtZnJhbWVTaXplICE9IHN1YmZyYW1lU2l6ZSIpOworICAgICAgICAgaWYgKHN1Yj09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaT0wO2k8c3QtPnN1YmZyYW1lU2l6ZTtpKyspCisgICAgICAgICAgICAgICByZWFsX2V4Y1tpXSA9IHN3W2ldID0gc3QtPndpbkJ1ZltpXTsKKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGk9MDtpPHN0LT5zdWJmcmFtZVNpemU7aSsrKQorICAgICAgICAgICAgICAgcmVhbF9leGNbaV0gPSBzd1tpXSA9IGluW2krKChzdWItMSkqc3QtPnN1YmZyYW1lU2l6ZSldOworICAgICAgICAgfQorICAgICAgfQorICAgICAgZmlyX21lbTE2KHJlYWxfZXhjLCBpbnRlcnBfcWxwYywgcmVhbF9leGMsIHN0LT5zdWJmcmFtZVNpemUsIHN0LT5scGNTaXplLCBzdC0+bWVtX2V4YzIsIHN0YWNrKTsKKyAgICAgIAorICAgICAgaWYgKHN0LT5jb21wbGV4aXR5PT0wKQorICAgICAgICAgcmVzcG9uc2VfYm91bmQgPj49IDE7CisgICAgICBjb21wdXRlX2ltcHVsc2VfcmVzcG9uc2UoaW50ZXJwX3FscGMsIGJ3X2xwYzEsIGJ3X2xwYzIsIHN5bl9yZXNwLCByZXNwb25zZV9ib3VuZCwgc3QtPmxwY1NpemUsIHN0YWNrKTsKKyAgICAgIGZvciAoaT1yZXNwb25zZV9ib3VuZDtpPHN0LT5zdWJmcmFtZVNpemU7aSsrKQorICAgICAgICAgc3luX3Jlc3BbaV09VkVSWV9TTUFMTDsKKyAgICAgIAorICAgICAgLyogQ29tcHV0ZSB6ZXJvIHJlc3BvbnNlIG9mIEEoei9nMSkgLyAoIEEoei9nMikgKiBBKHopICkgKi8KKyAgICAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemU7aSsrKQorICAgICAgICAgbWVtW2ldPVNITDMyKHN0LT5tZW1fc3BbaV0sMSk7CisgICAgICBmb3IgKGk9MDtpPHN0LT5zdWJmcmFtZVNpemU7aSsrKQorICAgICAgICAgcmluZ2luZ1tpXSA9IFZFUllfU01BTEw7CisjaWZkZWYgU0hPUlRDVVRTMgorICAgICAgaWlyX21lbTE2KHJpbmdpbmcsIGludGVycF9xbHBjLCByaW5naW5nLCByZXNwb25zZV9ib3VuZCwgc3QtPmxwY1NpemUsIG1lbSwgc3RhY2spOworICAgICAgZm9yIChpPTA7aTxzdC0+bHBjU2l6ZTtpKyspCisgICAgICAgICBtZW1baV09U0hMMzIoc3QtPm1lbV9zd1tpXSwxKTsKKyAgICAgIGZpbHRlcl9tZW0xNihyaW5naW5nLCBzdC0+YndfbHBjMSwgc3QtPmJ3X2xwYzIsIHJpbmdpbmcsIHJlc3BvbnNlX2JvdW5kLCBzdC0+bHBjU2l6ZSwgbWVtLCBzdGFjayk7CisgICAgICBmb3IgKGk9cmVzcG9uc2VfYm91bmQ7aTxzdC0+c3ViZnJhbWVTaXplO2krKykKKyAgICAgICAgIHJpbmdpbmdbaV09MDsKKyNlbHNlCisgICAgICBpaXJfbWVtMTYocmluZ2luZywgaW50ZXJwX3FscGMsIHJpbmdpbmcsIHN0LT5zdWJmcmFtZVNpemUsIHN0LT5scGNTaXplLCBtZW0sIHN0YWNrKTsKKyAgICAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemU7aSsrKQorICAgICAgICAgbWVtW2ldPVNITDMyKHN0LT5tZW1fc3dbaV0sMSk7CisgICAgICBmaWx0ZXJfbWVtMTYocmluZ2luZywgYndfbHBjMSwgYndfbHBjMiwgcmluZ2luZywgc3QtPnN1YmZyYW1lU2l6ZSwgc3QtPmxwY1NpemUsIG1lbSwgc3RhY2spOworI2VuZGlmCisgICAgICAKKyAgICAgIC8qIENvbXB1dGUgd2VpZ2h0ZWQgc2lnbmFsICovCisgICAgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgICAgIG1lbVtpXT1zdC0+bWVtX3N3W2ldOworICAgICAgZmlsdGVyX21lbTE2KHN3LCBid19scGMxLCBid19scGMyLCBzdywgc3QtPnN1YmZyYW1lU2l6ZSwgc3QtPmxwY1NpemUsIG1lbSwgc3RhY2spOworICAgICAgCisgICAgICBpZiAoc3QtPmNvbXBsZXhpdHk9PTApCisgICAgICAgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgICAgICAgIHN0LT5tZW1fc3dbaV09bWVtW2ldOworICAgICAgCisgICAgICAvKiBDb21wdXRlIHRhcmdldCBzaWduYWwgKHNhdHVyYXRpb24gcHJldmVudHMgb3ZlcmZsb3dzIG9uIGNsaXBwZWQgaW5wdXQgc3BlZWNoKSAqLworICAgICAgZm9yIChpPTA7aTxzdC0+c3ViZnJhbWVTaXplO2krKykKKyAgICAgICAgIHRhcmdldFtpXT1FWFRSQUNUMTYoU0FUVVJBVEUoU1VCMzIoc3dbaV0sUFNIUjMyKHJpbmdpbmdbaV0sMSkpLDMyNzY3KSk7CisKKyAgICAgIC8qIFJlc2V0IGV4Y2l0YXRpb24gKi8KKyAgICAgIGZvciAoaT0wO2k8c3QtPnN1YmZyYW1lU2l6ZTtpKyspCisgICAgICAgICBleGNbaV09MDsKKworICAgICAgLyogSWYgd2UgaGF2ZSBhIGxvbmctdGVybSBwcmVkaWN0b3IgKG90aGVyd2lzZSwgc29tZXRoaW5nJ3Mgd3JvbmcpICovCisgICAgICBpZiAoU1VCTU9ERShsdHBfcXVhbnQpKQorICAgICAgeworICAgICAgICAgaW50IHBpdF9taW4sIHBpdF9tYXg7CisgICAgICAgICAvKiBMb25nLXRlcm0gcHJlZGljdGlvbiAqLworICAgICAgICAgaWYgKFNVQk1PREUobGJyX3BpdGNoKSAhPSAtMSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIExvdyBiaXQtcmF0ZSBwaXRjaCBoYW5kbGluZyAqLworICAgICAgICAgICAgaW50IG1hcmdpbjsKKyAgICAgICAgICAgIG1hcmdpbiA9IFNVQk1PREUobGJyX3BpdGNoKTsKKyAgICAgICAgICAgIGlmIChtYXJnaW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBpZiAob2xfcGl0Y2ggPCBzdC0+bWluX3BpdGNoK21hcmdpbi0xKQorICAgICAgICAgICAgICAgICAgb2xfcGl0Y2g9c3QtPm1pbl9waXRjaCttYXJnaW4tMTsKKyAgICAgICAgICAgICAgIGlmIChvbF9waXRjaCA+IHN0LT5tYXhfcGl0Y2gtbWFyZ2luKQorICAgICAgICAgICAgICAgICAgb2xfcGl0Y2g9c3QtPm1heF9waXRjaC1tYXJnaW47CisgICAgICAgICAgICAgICBwaXRfbWluID0gb2xfcGl0Y2gtbWFyZ2luKzE7CisgICAgICAgICAgICAgICBwaXRfbWF4ID0gb2xfcGl0Y2grbWFyZ2luOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgIHBpdF9taW49cGl0X21heD1vbF9waXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwaXRfbWluID0gc3QtPm1pbl9waXRjaDsKKyAgICAgICAgICAgIHBpdF9tYXggPSBzdC0+bWF4X3BpdGNoOworICAgICAgICAgfQorICAgICAgICAgCisgICAgICAgICAvKiBGb3JjZSBwaXRjaCB0byB1c2Ugb25seSB0aGUgY3VycmVudCBmcmFtZSBpZiBuZWVkZWQgKi8KKyAgICAgICAgIGlmIChzdC0+Ym91bmRlZF9waXRjaCAmJiBwaXRfbWF4Pm9mZnNldCkKKyAgICAgICAgICAgIHBpdF9tYXg9b2Zmc2V0OworCisjaWZkZWYgRVBJQ180OEsKKyAgICAgICAgIGlmIChzdC0+bGJyXzQ4aykKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHBpdGNoID0gU1VCTU9ERShsdHBfcXVhbnQpKHRhcmdldCwgc3csIGludGVycF9xbHBjLCBid19scGMxLCBid19scGMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjMzIsIFNVQk1PREUobHRwX3BhcmFtcyksIHBpdF9taW4sIHBpdF9tYXgsIG9sX3BpdGNoX2NvZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+bHBjU2l6ZSwgc3QtPnN1YmZyYW1lU2l6ZSwgYml0cywgc3RhY2ssIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLCBzeW5fcmVzcCwgc3QtPmNvbXBsZXhpdHksIG9sX3BpdGNoX2lkLCBzdC0+cGxjX3R1bmluZywgJnN0LT5jdW11bF9nYWluKTsKKyAgICAgICAgIH0gZWxzZSB7CisjZW5kaWYKKworICAgICAgICAgLyogUGVyZm9ybSBwaXRjaCBzZWFyY2ggKi8KKyAgICAgICAgIHBpdGNoID0gU1VCTU9ERShsdHBfcXVhbnQpKHRhcmdldCwgc3csIGludGVycF9xbHBjLCBid19scGMxLCBid19scGMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjMzIsIFNVQk1PREUobHRwX3BhcmFtcyksIHBpdF9taW4sIHBpdF9tYXgsIG9sX3BpdGNoX2NvZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+bHBjU2l6ZSwgc3QtPnN1YmZyYW1lU2l6ZSwgYml0cywgc3RhY2ssIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLCBzeW5fcmVzcCwgc3QtPmNvbXBsZXhpdHksIDAsIHN0LT5wbGNfdHVuaW5nLCAmc3QtPmN1bXVsX2dhaW4pOworI2lmZGVmIEVQSUNfNDhLCisgICAgICAgICB9CisjZW5kaWYKKworICAgICAgICAgc3QtPnBpdGNoW3N1Yl09cGl0Y2g7CisgICAgICB9IGVsc2UgeworICAgICAgICAgc3BlZXhfZXJyb3IgKCJObyBwaXRjaCBwcmVkaWN0aW9uLCB3aGF0J3Mgd3JvbmciKTsKKyAgICAgIH0KKworICAgICAgLyogUXVhbnRpemF0aW9uIG9mIGlubm92YXRpb24gKi8KKyAgICAgIGZvciAoaT0wO2k8c3QtPnN1YmZyYW1lU2l6ZTtpKyspCisgICAgICAgICBpbm5vdltpXT0wOworICAgICAgCisgICAgICAvKiBGSVhNRTogTWFrZSBzdXJlIHRoaXMgaXMgc2F2ZSBmcm9tIG92ZXJmbG93cyAoc28gZmFyIHNvIGdvb2QpICovCisgICAgICBmb3IgKGk9MDtpPHN0LT5zdWJmcmFtZVNpemU7aSsrKQorICAgICAgICAgcmVhbF9leGNbaV0gPSBFWFRSQUNUMTYoU1VCMzIoRVhURU5EMzIocmVhbF9leGNbaV0pLCBQU0hSMzIoZXhjMzJbaV0sU0lHX1NISUZULTEpKSk7CisgICAgICAKKyAgICAgIGVuZXIgPSBTSEwzMihFWFRFTkQzMihjb21wdXRlX3JtczE2KHJlYWxfZXhjLCBzdC0+c3ViZnJhbWVTaXplKSksU0lHX1NISUZUKTsKKyAgICAgIAorICAgICAgLypGSVhNRTogU2hvdWxkIHVzZSBESVYzMl8xNiBhbmQgbWFrZSBzdXJlIHJlc3VsdCBmaXRzIGluIDE2IGJpdHMgKi8KKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgICAgeworICAgICAgICAgc3B4X3dvcmQzMl90IGYgPSBQRElWMzIoZW5lcixQU0hSMzIob2xfZ2FpbixTSUdfU0hJRlQpKTsKKyAgICAgICAgIGlmIChmPD0zMjc2NykKKyAgICAgICAgICAgIGZpbmVfZ2FpbiA9IGY7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBmaW5lX2dhaW4gPSAzMjc2NzsKKyAgICAgIH0KKyNlbHNlCisgICAgICBmaW5lX2dhaW4gPSBQRElWMzJfMTYoZW5lcixQU0hSMzIob2xfZ2FpbixTSUdfU0hJRlQpKTsKKyNlbmRpZgorICAgICAgLyogQ2FsY3VsYXRlIGdhaW4gY29ycmVjdGlvbiBmb3IgdGhlIHN1Yi1mcmFtZSAoaWYgYW55KSAqLworICAgICAgaWYgKFNVQk1PREUoaGF2ZV9zdWJmcmFtZV9nYWluKSkgCisgICAgICB7CisgICAgICAgICBpbnQgcWU7CisgICAgICAgICBpZiAoU1VCTU9ERShoYXZlX3N1YmZyYW1lX2dhaW4pPT0zKQorICAgICAgICAgeworICAgICAgICAgICAgcWUgPSBzY2FsX3F1YW50KGZpbmVfZ2FpbiwgZXhjX2dhaW5fcXVhbnRfc2NhbDNfYm91bmQsIDgpOworICAgICAgICAgICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIHFlLCAzKTsKKyAgICAgICAgICAgIGVuZXI9TVVMVDE2XzMyX1ExNChleGNfZ2Fpbl9xdWFudF9zY2FsM1txZV0sb2xfZ2Fpbik7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcWUgPSBzY2FsX3F1YW50KGZpbmVfZ2FpbiwgZXhjX2dhaW5fcXVhbnRfc2NhbDFfYm91bmQsIDIpOworICAgICAgICAgICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIHFlLCAxKTsKKyAgICAgICAgICAgIGVuZXI9TVVMVDE2XzMyX1ExNChleGNfZ2Fpbl9xdWFudF9zY2FsMVtxZV0sb2xfZ2Fpbik7ICAgICAgICAgICAgICAgCisgICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAgZW5lcj1vbF9nYWluOworICAgICAgfQorICAgICAgCisgICAgICAvKnByaW50ZiAoIiVmICVmXG4iLCBlbmVyLCBvbF9nYWluKTsqLworICAgICAgCisgICAgICAvKiBOb3JtYWxpemUgaW5ub3ZhdGlvbiAqLworICAgICAgc2lnbmFsX2Rpdih0YXJnZXQsIHRhcmdldCwgZW5lciwgc3QtPnN1YmZyYW1lU2l6ZSk7CisgICAgICAKKyAgICAgIC8qIFF1YW50aXplIGlubm92YXRpb24gKi8KKyAgICAgIGlmIChTVUJNT0RFKGlubm92YXRpb25fcXVhbnQpKQorICAgICAgeworICAgICAgICAgLyogQ29kZWJvb2sgc2VhcmNoICovCisgICAgICAgICBTVUJNT0RFKGlubm92YXRpb25fcXVhbnQpKHRhcmdldCwgaW50ZXJwX3FscGMsIGJ3X2xwYzEsIGJ3X2xwYzIsIAorICAgICAgICAgICAgICAgICAgU1VCTU9ERShpbm5vdmF0aW9uX3BhcmFtcyksIHN0LT5scGNTaXplLCBzdC0+c3ViZnJhbWVTaXplLCAKKyAgICAgICAgICAgICAgICAgIGlubm92LCBzeW5fcmVzcCwgYml0cywgc3RhY2ssIHN0LT5jb21wbGV4aXR5LCBTVUJNT0RFKGRvdWJsZV9jb2RlYm9vaykpOworICAgICAgICAgCisgICAgICAgICAvKiBEZS1ub3JtYWxpemUgaW5ub3ZhdGlvbiBhbmQgdXBkYXRlIGV4Y2l0YXRpb24gKi8KKyAgICAgICAgIHNpZ25hbF9tdWwoaW5ub3YsIGlubm92LCBlbmVyLCBzdC0+c3ViZnJhbWVTaXplKTsKKyAgICAgICAgIAorICAgICAgICAgZm9yIChpPTA7aTxzdC0+c3ViZnJhbWVTaXplO2krKykKKyAgICAgICAgICAgIGV4Y1tpXSA9IEVYVFJBQ1QxNihTQVRVUkFURTMyKFBTSFIzMihBREQzMihTSEwzMihleGMzMltpXSwxKSxpbm5vdltpXSksU0lHX1NISUZUKSwzMjc2NykpOworCisgICAgICAgICAvKiBJbiBzb21lIChyYXJlKSBtb2Rlcywgd2UgZG8gYSBzZWNvbmQgc2VhcmNoIChtb3JlIGJpdHMpIHRvIHJlZHVjZSBub2lzZSBldmVuIG1vcmUgKi8KKyAgICAgICAgIGlmIChTVUJNT0RFKGRvdWJsZV9jb2RlYm9vaykpIHsKKyAgICAgICAgICAgIGNoYXIgKnRtcF9zdGFjaz1zdGFjazsKKyAgICAgICAgICAgIFZBUkRFQ0woc3B4X3NpZ190ICppbm5vdjIpOworICAgICAgICAgICAgQUxMT0MoaW5ub3YyLCBzdC0+c3ViZnJhbWVTaXplLCBzcHhfc2lnX3QpOworICAgICAgICAgICAgZm9yIChpPTA7aTxzdC0+c3ViZnJhbWVTaXplO2krKykKKyAgICAgICAgICAgICAgIGlubm92MltpXT0wOworICAgICAgICAgICAgZm9yIChpPTA7aTxzdC0+c3ViZnJhbWVTaXplO2krKykKKyAgICAgICAgICAgICAgIHRhcmdldFtpXT1NVUxUMTZfMTZfUDEzKFFDT05TVDE2KDIuMmYsMTMpLCB0YXJnZXRbaV0pOworICAgICAgICAgICAgU1VCTU9ERShpbm5vdmF0aW9uX3F1YW50KSh0YXJnZXQsIGludGVycF9xbHBjLCBid19scGMxLCBid19scGMyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VCTU9ERShpbm5vdmF0aW9uX3BhcmFtcyksIHN0LT5scGNTaXplLCBzdC0+c3ViZnJhbWVTaXplLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5ub3YyLCBzeW5fcmVzcCwgYml0cywgc3RhY2ssIHN0LT5jb21wbGV4aXR5LCAwKTsKKyAgICAgICAgICAgIHNpZ25hbF9tdWwoaW5ub3YyLCBpbm5vdjIsIE1VTFQxNl8zMl9RMTUoUUNPTlNUMTYoMC40NTQ1NDVmLDE1KSxlbmVyKSwgc3QtPnN1YmZyYW1lU2l6ZSk7CisgICAgICAgICAgICBmb3IgKGk9MDtpPHN0LT5zdWJmcmFtZVNpemU7aSsrKQorICAgICAgICAgICAgICAgaW5ub3ZbaV0gPSBBREQzMihpbm5vdltpXSxpbm5vdjJbaV0pOworICAgICAgICAgICAgc3RhY2sgPSB0bXBfc3RhY2s7CisgICAgICAgICB9CisgICAgICAgICBmb3IgKGk9MDtpPHN0LT5zdWJmcmFtZVNpemU7aSsrKQorICAgICAgICAgICAgZXhjW2ldID0gRVhUUkFDVDE2KFNBVFVSQVRFMzIoUFNIUjMyKEFERDMyKFNITDMyKGV4YzMyW2ldLDEpLGlubm92W2ldKSxTSUdfU0hJRlQpLDMyNzY3KSk7CisgICAgICAgICBpZiAoc3QtPmlubm92X3Jtc19zYXZlKQorICAgICAgICAgeworICAgICAgICAgICAgc3QtPmlubm92X3Jtc19zYXZlW3N1Yl0gPSBjb21wdXRlX3Jtcyhpbm5vdiwgc3QtPnN1YmZyYW1lU2l6ZSk7CisgICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAgc3BlZXhfZXJyb3IoIk5vIGZpeGVkIGNvZGVib29rIik7CisgICAgICB9CisKKworICAgICAgZm9yIChpPTA7aTxzdC0+c3ViZnJhbWVTaXplO2krKykKKyAgICAgICAgIHN3W2ldID0gZXhjW2ldOworICAgICAgLyogRmluYWwgc2lnbmFsIHN5bnRoZXNpcyBmcm9tIGV4Y2l0YXRpb24gKi8KKyAgICAgIGlpcl9tZW0xNihzdywgaW50ZXJwX3FscGMsIHN3LCBzdC0+c3ViZnJhbWVTaXplLCBzdC0+bHBjU2l6ZSwgc3QtPm1lbV9zcCwgc3RhY2spOworCisgICAgICAvKiBDb21wdXRlIHdlaWdodGVkIHNpZ25hbCBhZ2FpbiwgZnJvbSBzeW50aGVzaXplZCBzcGVlY2ggKG5vdCBzdXJlIGl0J3MgdGhlIHJpZ2h0IHRoaW5nKSAqLworICAgICAgaWYgKHN0LT5jb21wbGV4aXR5IT0wKQorICAgICAgICAgZmlsdGVyX21lbTE2KHN3LCBid19scGMxLCBid19scGMyLCBzdywgc3QtPnN1YmZyYW1lU2l6ZSwgc3QtPmxwY1NpemUsIHN0LT5tZW1fc3csIHN0YWNrKTsKKyAgICAgIAorICAgfQorCisgICAvKiBTdG9yZSB0aGUgTFNQcyBmb3IgaW50ZXJwb2xhdGlvbiBpbiB0aGUgbmV4dCBmcmFtZSAqLworICAgaWYgKHN0LT5zdWJtb2RlSUQ+PTEpCisgICB7CisgICAgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgICAgIHN0LT5vbGRfbHNwW2ldID0gbHNwW2ldOworICAgICAgZm9yIChpPTA7aTxzdC0+bHBjU2l6ZTtpKyspCisgICAgICAgICBzdC0+b2xkX3Fsc3BbaV0gPSBxbHNwW2ldOworICAgfQorCisjaWZkZWYgVk9SQklTX1BTWUNITworICAgaWYgKHN0LT5zdWJtb2RlSUQ+PTEpCisgICB7CisgICAgICBmb3IgKGk9MDtpPDEyODtpKyspCisgICAgICAgICBzdC0+b2xkX2N1cnZlW2ldID0gc3QtPmN1cnZlW2ldOworICAgfQorI2VuZGlmCisKKyAgIGlmIChzdC0+c3VibW9kZUlEPT0xKQorICAgeworICAgICAgaWYgKHN0LT5kdHhfY291bnQpCisgICAgICAgICBzcGVleF9iaXRzX3BhY2soYml0cywgMTUsIDQpOworICAgICAgZWxzZQorICAgICAgICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIDAsIDQpOworICAgfQorCisgICAvKiBUaGUgbmV4dCBmcmFtZSB3aWxsIG5vdCBiZSB0aGUgZmlyc3QgKER1aCEpICovCisgICBzdC0+Zmlyc3QgPSAwOworICAgc3BlZXhfbW92ZShzdC0+d2luQnVmLCBpbisyKnN0LT5mcmFtZVNpemUtc3QtPndpbmRvd1NpemUsIChzdC0+d2luZG93U2l6ZS1zdC0+ZnJhbWVTaXplKSpzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisKKyAgIGlmIChTVUJNT0RFKGlubm92YXRpb25fcXVhbnQpID09IG5vaXNlX2NvZGVib29rX3F1YW50IHx8IHN0LT5zdWJtb2RlSUQ9PTApCisgICAgICBzdC0+Ym91bmRlZF9waXRjaCA9IDE7CisgICBlbHNlCisgICAgICBzdC0+Ym91bmRlZF9waXRjaCA9IDA7CisKKyAgIHJldHVybiAxOworfQorCit2b2lkICpuYl9kZWNvZGVyX2luaXQoY29uc3QgU3BlZXhNb2RlICptKQoreworICAgRGVjU3RhdGUgKnN0OworICAgY29uc3QgU3BlZXhOQk1vZGUgKm1vZGU7CisgICBpbnQgaTsKKworICAgbW9kZT0oY29uc3QgU3BlZXhOQk1vZGUqKW0tPm1vZGU7CisgICBzdCA9IChEZWNTdGF0ZSAqKXNwZWV4X2FsbG9jKHNpemVvZihEZWNTdGF0ZSkpOworICAgaWYgKCFzdCkKKyAgICAgIHJldHVybiBOVUxMOworI2lmIGRlZmluZWQoVkFSX0FSUkFZUykgfHwgZGVmaW5lZCAoVVNFX0FMTE9DQSkKKyAgIHN0LT5zdGFjayA9IE5VTEw7CisjZWxzZQorICAgc3QtPnN0YWNrID0gKGNoYXIqKXNwZWV4X2FsbG9jX3NjcmF0Y2goTkJfREVDX1NUQUNLKTsKKyNlbmRpZgorCisgICBzdC0+bW9kZT1tOworCisKKyAgIHN0LT5lbmNvZGVfc3VibW9kZSA9IDE7CisjaWZkZWYgRVBJQ180OEsKKyAgIHN0LT5sYnJfNDhrPW1vZGUtPmxicjQ4azsKKyNlbmRpZgorCisgICBzdC0+Zmlyc3Q9MTsKKyAgIC8qIENvZGVjIHBhcmFtZXRlcnMsIHNob3VsZCBldmVudHVhbGx5IGhhdmUgc2V2ZXJhbCAibW9kZXMiKi8KKyAgIHN0LT5mcmFtZVNpemUgPSBtb2RlLT5mcmFtZVNpemU7CisgICBzdC0+bmJTdWJmcmFtZXM9bW9kZS0+ZnJhbWVTaXplL21vZGUtPnN1YmZyYW1lU2l6ZTsKKyAgIHN0LT5zdWJmcmFtZVNpemU9bW9kZS0+c3ViZnJhbWVTaXplOworICAgc3QtPmxwY1NpemUgPSBtb2RlLT5scGNTaXplOworICAgc3QtPm1pbl9waXRjaD1tb2RlLT5waXRjaFN0YXJ0OworICAgc3QtPm1heF9waXRjaD1tb2RlLT5waXRjaEVuZDsKKworICAgc3QtPnN1Ym1vZGVzPW1vZGUtPnN1Ym1vZGVzOworICAgc3QtPnN1Ym1vZGVJRD1tb2RlLT5kZWZhdWx0U3VibW9kZTsKKworICAgc3QtPmxwY19lbmhfZW5hYmxlZD0xOworCisgICBzdC0+ZXhjQnVmID0gKHNweF93b3JkMTZfdCopc3BlZXhfYWxsb2MoKHN0LT5mcmFtZVNpemUgKyAyKnN0LT5tYXhfcGl0Y2ggKyBzdC0+c3ViZnJhbWVTaXplICsgMTIpKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgIHN0LT5leGMgPSBzdC0+ZXhjQnVmICsgMipzdC0+bWF4X3BpdGNoICsgc3QtPnN1YmZyYW1lU2l6ZSArIDY7CisgICBmb3IgKGk9MDtpPHN0LT5mcmFtZVNpemUgKyBzdC0+bWF4X3BpdGNoICsgMTtpKyspCisgICAgICBzdC0+ZXhjQnVmW2ldPTA7CisKKyAgIHN0LT5pbnRlcnBfcWxwYyA9IChzcHhfY29lZl90KilzcGVleF9hbGxvYyhzdC0+bHBjU2l6ZSpzaXplb2Yoc3B4X2NvZWZfdCkpOworICAgc3QtPm9sZF9xbHNwID0gKHNweF9sc3BfdCopc3BlZXhfYWxsb2Moc3QtPmxwY1NpemUqc2l6ZW9mKHNweF9sc3BfdCkpOworICAgc3QtPm1lbV9zcCA9IChzcHhfbWVtX3QqKXNwZWV4X2FsbG9jKHN0LT5scGNTaXplKnNpemVvZihzcHhfbWVtX3QpKTsKKyAgIHN0LT5waV9nYWluID0gKHNweF93b3JkMzJfdCopc3BlZXhfYWxsb2MoKHN0LT5uYlN1YmZyYW1lcykqc2l6ZW9mKHNweF93b3JkMzJfdCkpOworICAgc3QtPmxhc3RfcGl0Y2ggPSA0MDsKKyAgIHN0LT5jb3VudF9sb3N0PTA7CisgICBzdC0+cGl0Y2hfZ2Fpbl9idWZbMF0gPSBzdC0+cGl0Y2hfZ2Fpbl9idWZbMV0gPSBzdC0+cGl0Y2hfZ2Fpbl9idWZbMl0gPSAwOworICAgc3QtPnBpdGNoX2dhaW5fYnVmX2lkeCA9IDA7CisgICBzdC0+c2VlZCA9IDEwMDA7CisgICAKKyAgIHN0LT5zYW1wbGluZ19yYXRlPTgwMDA7CisgICBzdC0+bGFzdF9vbF9nYWluID0gMDsKKworICAgc3QtPnVzZXJfY2FsbGJhY2suZnVuYyA9ICZzcGVleF9kZWZhdWx0X3VzZXJfaGFuZGxlcjsKKyAgIHN0LT51c2VyX2NhbGxiYWNrLmRhdGEgPSBOVUxMOworICAgZm9yIChpPTA7aTwxNjtpKyspCisgICAgICBzdC0+c3BlZXhfY2FsbGJhY2tzW2ldLmZ1bmMgPSBOVUxMOworCisgICBzdC0+dm9jX20xPXN0LT52b2NfbTI9c3QtPnZvY19tZWFuPTA7CisgICBzdC0+dm9jX29mZnNldD0wOworICAgc3QtPmR0eF9lbmFibGVkPTA7CisgICBzdC0+aXNXaWRlYmFuZCA9IDA7CisgICBzdC0+aGlnaHBhc3NfZW5hYmxlZCA9IDE7CisKKyNpZmRlZiBFTkFCTEVfVkFMR1JJTkQKKyAgIFZBTEdSSU5EX01BS0VfUkVBREFCTEUoc3QsIChzdC0+c3RhY2stKGNoYXIqKXN0KSk7CisjZW5kaWYKKyAgIHJldHVybiBzdDsKK30KKwordm9pZCBuYl9kZWNvZGVyX2Rlc3Ryb3kodm9pZCAqc3RhdGUpCit7CisgICBEZWNTdGF0ZSAqc3Q7CisgICBzdD0oRGVjU3RhdGUqKXN0YXRlOworICAgCisjaWYgIShkZWZpbmVkKFZBUl9BUlJBWVMpIHx8IGRlZmluZWQgKFVTRV9BTExPQ0EpKQorICAgc3BlZXhfZnJlZV9zY3JhdGNoKHN0LT5zdGFjayk7CisjZW5kaWYKKworICAgc3BlZXhfZnJlZSAoc3QtPmV4Y0J1Zik7CisgICBzcGVleF9mcmVlIChzdC0+aW50ZXJwX3FscGMpOworICAgc3BlZXhfZnJlZSAoc3QtPm9sZF9xbHNwKTsKKyAgIHNwZWV4X2ZyZWUgKHN0LT5tZW1fc3ApOworICAgc3BlZXhfZnJlZSAoc3QtPnBpX2dhaW4pOworCisgICBzcGVleF9mcmVlKHN0YXRlKTsKK30KKworI2RlZmluZSBtZWRpYW4zKGEsIGIsIGMpCSgoYSkgPCAoYikgPyAoKGIpIDwgKGMpID8gKGIpIDogKChhKSA8IChjKSA/IChjKSA6IChhKSkpIDogKChjKSA8IChiKSA/IChiKSA6ICgoYykgPCAoYSkgPyAoYykgOiAoYSkpKSkKKworI2lmZGVmIEZJWEVEX1BPSU5UCitjb25zdCBzcHhfd29yZDE2X3QgYXR0ZW51YXRpb25bMTBdID0gezMyNzY3LCAzMTQ4MywgMjc5MjMsIDIyODYxLCAxNzI3OCwgMTIwNTUsIDc3NjQsIDQ2MTYsIDI1MzMsIDEyODN9OworI2Vsc2UKK2NvbnN0IHNweF93b3JkMTZfdCBhdHRlbnVhdGlvblsxMF0gPSB7MS4sIDAuOTYxLCAwLjg1MiwgMC42OTgsIDAuNTI3LCAwLjM2OCwgMC4yMzcsIDAuMTQxLCAwLjA3NywgMC4wMzl9OworCisjZW5kaWYKKworc3RhdGljIHZvaWQgbmJfZGVjb2RlX2xvc3QoRGVjU3RhdGUgKnN0LCBzcHhfd29yZDE2X3QgKm91dCwgY2hhciAqc3RhY2spCit7CisgICBpbnQgaTsKKyAgIGludCBwaXRjaF92YWw7CisgICBzcHhfd29yZDE2X3QgcGl0Y2hfZ2FpbjsKKyAgIHNweF93b3JkMTZfdCBmYWN0OworICAgc3B4X3dvcmQxNl90IGdhaW5fbWVkOworICAgc3B4X3dvcmQxNl90IGlubm92X2dhaW47CisgICBzcHhfd29yZDE2X3Qgbm9pc2VfZ2FpbjsKKyAgIAorICAgaWYgKHN0LT5jb3VudF9sb3N0PDEwKQorICAgICAgZmFjdCA9IGF0dGVudWF0aW9uW3N0LT5jb3VudF9sb3N0XTsKKyAgIGVsc2UKKyAgICAgIGZhY3QgPSAwOworCisgICBnYWluX21lZCA9IG1lZGlhbjMoc3QtPnBpdGNoX2dhaW5fYnVmWzBdLCBzdC0+cGl0Y2hfZ2Fpbl9idWZbMV0sIHN0LT5waXRjaF9nYWluX2J1ZlsyXSk7CisgICBpZiAoZ2Fpbl9tZWQgPCBzdC0+bGFzdF9waXRjaF9nYWluKQorICAgICAgc3QtPmxhc3RfcGl0Y2hfZ2FpbiA9IGdhaW5fbWVkOworICAgCisjaWZkZWYgRklYRURfUE9JTlQKKyAgIHBpdGNoX2dhaW4gPSBzdC0+bGFzdF9waXRjaF9nYWluOworICAgaWYgKHBpdGNoX2dhaW4+NTQpCisgICAgICBwaXRjaF9nYWluID0gNTQ7CisgICBwaXRjaF9nYWluID0gU0hMMTYocGl0Y2hfZ2FpbiwgOSk7CisjZWxzZSAgIAorICAgcGl0Y2hfZ2FpbiA9IEdBSU5fU0NBTElOR18xKnN0LT5sYXN0X3BpdGNoX2dhaW47CisgICBpZiAocGl0Y2hfZ2Fpbj4uODUpCisgICAgICBwaXRjaF9nYWluPS44NTsKKyNlbmRpZgorICAgcGl0Y2hfZ2FpbiA9IE1VTFQxNl8xNl9RMTUoZmFjdCxwaXRjaF9nYWluKSArIFZFUllfU01BTEw7CisgICAvKiBGSVhNRTogVGhpcyB3YXMgcm1zIG9mIGlubm92YXRpb24gKG5vdCBleGMpICovCisgICBpbm5vdl9nYWluID0gY29tcHV0ZV9ybXMxNihzdC0+ZXhjLCBzdC0+ZnJhbWVTaXplKTsKKyAgIG5vaXNlX2dhaW4gPSBNVUxUMTZfMTZfUTE1KGlubm92X2dhaW4sIE1VTFQxNl8xNl9RMTUoZmFjdCwgU1VCMTYoUTE1T05FLE1VTFQxNl8xNl9RMTUocGl0Y2hfZ2FpbixwaXRjaF9nYWluKSkpKTsKKyAgIC8qIFNoaWZ0IGFsbCBidWZmZXJzIGJ5IG9uZSBmcmFtZSAqLworICAgc3BlZXhfbW92ZShzdC0+ZXhjQnVmLCBzdC0+ZXhjQnVmK3N0LT5mcmFtZVNpemUsICgyKnN0LT5tYXhfcGl0Y2ggKyBzdC0+c3ViZnJhbWVTaXplICsgMTIpKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgIAorCisgICBwaXRjaF92YWwgPSBzdC0+bGFzdF9waXRjaCArIFNIUjMyKChzcHhfaW50MzJfdClzcGVleF9yYW5kKDErc3QtPmNvdW50X2xvc3QsICZzdC0+c2VlZCksU0lHX1NISUZUKTsKKyAgIGlmIChwaXRjaF92YWwgPiBzdC0+bWF4X3BpdGNoKQorICAgICAgcGl0Y2hfdmFsID0gc3QtPm1heF9waXRjaDsKKyAgIGlmIChwaXRjaF92YWwgPCBzdC0+bWluX3BpdGNoKQorICAgICAgcGl0Y2hfdmFsID0gc3QtPm1pbl9waXRjaDsKKyAgIGZvciAoaT0wO2k8c3QtPmZyYW1lU2l6ZTtpKyspCisgICB7CisgICAgICBzdC0+ZXhjW2ldPSBNVUxUMTZfMTZfUTE1KHBpdGNoX2dhaW4sIChzdC0+ZXhjW2ktcGl0Y2hfdmFsXStWRVJZX1NNQUxMKSkgKyAKKyAgICAgICAgICAgIHNwZWV4X3JhbmQobm9pc2VfZ2FpbiwgJnN0LT5zZWVkKTsKKyAgIH0KKworICAgZm9yIChpPTA7aTxzdC0+ZnJhbWVTaXplO2krKykKKyAgICAgIG91dFtpXT1zdC0+ZXhjW2ktc3QtPnN1YmZyYW1lU2l6ZV07CisgICBid19scGMoUUNPTlNUMTYoLjk4LDE1KSwgc3QtPmludGVycF9xbHBjLCBzdC0+aW50ZXJwX3FscGMsIHN0LT5scGNTaXplKTsKKyAgIGlpcl9tZW0xNihvdXQsIHN0LT5pbnRlcnBfcWxwYywgb3V0LCBzdC0+ZnJhbWVTaXplLCBzdC0+bHBjU2l6ZSwgCisgICAgICAgICAgICAgc3QtPm1lbV9zcCwgc3RhY2spOworICAgaGlnaHBhc3Mob3V0LCBvdXQsIHN0LT5mcmFtZVNpemUsIEhJR0hQQVNTX05BUlJPV0JBTkR8SElHSFBBU1NfT1VUUFVULCBzdC0+bWVtX2hwKTsKKyAgIAorICAgc3QtPmZpcnN0ID0gMDsKKyAgIHN0LT5jb3VudF9sb3N0Kys7CisgICBzdC0+cGl0Y2hfZ2Fpbl9idWZbc3QtPnBpdGNoX2dhaW5fYnVmX2lkeCsrXSA9IFBTSFIxNihwaXRjaF9nYWluLDkpOworICAgaWYgKHN0LT5waXRjaF9nYWluX2J1Zl9pZHggPiAyKSAvKiByb2xsb3ZlciAqLworICAgICAgc3QtPnBpdGNoX2dhaW5fYnVmX2lkeCA9IDA7Cit9CisKKworaW50IG5iX2RlY29kZSh2b2lkICpzdGF0ZSwgU3BlZXhCaXRzICpiaXRzLCB2b2lkICp2b3V0KQoreworICAgRGVjU3RhdGUgKnN0OworICAgaW50IGksIHN1YjsKKyAgIGludCBwaXRjaDsKKyAgIHNweF93b3JkMTZfdCBwaXRjaF9nYWluWzNdOworICAgc3B4X3dvcmQzMl90IG9sX2dhaW49MDsKKyAgIGludCBvbF9waXRjaD0wOworICAgc3B4X3dvcmQxNl90IG9sX3BpdGNoX2NvZWY9MDsKKyAgIGludCBiZXN0X3BpdGNoPTQwOworICAgc3B4X3dvcmQxNl90IGJlc3RfcGl0Y2hfZ2Fpbj0wOworICAgaW50IHdpZGViYW5kOworICAgaW50IG07CisgICBjaGFyICpzdGFjazsKKyAgIFZBUkRFQ0woc3B4X3NpZ190ICppbm5vdik7CisgICBWQVJERUNMKHNweF93b3JkMzJfdCAqZXhjMzIpOworICAgVkFSREVDTChzcHhfY29lZl90ICphayk7CisgICBWQVJERUNMKHNweF9sc3BfdCAqcWxzcCk7CisgICBzcHhfd29yZDE2X3QgcGl0Y2hfYXZlcmFnZT0wOworI2lmZGVmIEVQSUNfNDhLCisgICBpbnQgcGl0Y2hfaGFsZlsyXSA9IHswLCAwfTsKKyAgIGludCBvbF9waXRjaF9pZD0wOworI2VuZGlmCisgICBzcHhfd29yZDE2X3QgKm91dCA9IChzcHhfd29yZDE2X3QqKXZvdXQ7CisgICBWQVJERUNMKHNweF9sc3BfdCAqaW50ZXJwX3Fsc3ApOworCisgICBzdD0oRGVjU3RhdGUqKXN0YXRlOworICAgc3RhY2s9c3QtPnN0YWNrOworCisgICAvKiBDaGVjayBpZiB3ZSdyZSBpbiBEVFggbW9kZSovCisgICBpZiAoIWJpdHMgJiYgc3QtPmR0eF9lbmFibGVkKQorICAgeworICAgICAgc3QtPnN1Ym1vZGVJRD0wOworICAgfSBlbHNlIAorICAgeworICAgICAgLyogSWYgYml0cyBpcyBOVUxMLCBjb25zaWRlciB0aGUgcGFja2V0IHRvIGJlIGxvc3QgKHdoYXQgY291bGQgd2UgZG8gYW55d2F5KSAqLworICAgICAgaWYgKCFiaXRzKQorICAgICAgeworICAgICAgICAgbmJfZGVjb2RlX2xvc3Qoc3QsIG91dCwgc3RhY2spOworICAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIGlmIChzdC0+ZW5jb2RlX3N1Ym1vZGUpCisgICAgICB7CisjaWZkZWYgRVBJQ180OEsKKyAgICAgICAgIGlmICghc3QtPmxicl80OGspIHsKKyNlbmRpZgorCisgICAgICAvKiBTZWFyY2ggZm9yIG5leHQgbmFycm93YmFuZCBibG9jayAoaGFuZGxlIHJlcXVlc3RzLCBza2lwIHdpZGViYW5kIGJsb2NrcykgKi8KKyAgICAgIGRvIHsKKyAgICAgICAgIGlmIChzcGVleF9iaXRzX3JlbWFpbmluZyhiaXRzKTw1KQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgd2lkZWJhbmQgPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCAxKTsKKyAgICAgICAgIGlmICh3aWRlYmFuZCkgLyogU2tpcCB3aWRlYmFuZCBibG9jayAoZm9yIGNvbXBhdGliaWxpdHkpICovCisgICAgICAgICB7CisgICAgICAgICAgICBpbnQgc3VibW9kZTsKKyAgICAgICAgICAgIGludCBhZHZhbmNlOworICAgICAgICAgICAgYWR2YW5jZSA9IHN1Ym1vZGUgPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCBTQl9TVUJNT0RFX0JJVFMpOworICAgICAgICAgICAgc3BlZXhfbW9kZV9xdWVyeSgmc3BlZXhfd2JfbW9kZSwgU1BFRVhfU1VCTU9ERV9CSVRTX1BFUl9GUkFNRSwgJmFkdmFuY2UpOworICAgICAgICAgICAgaWYgKGFkdmFuY2UgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgc3BlZXhfbm90aWZ5KCJJbnZhbGlkIG1vZGUgZW5jb3VudGVyZWQuIFRoZSBzdHJlYW0gaXMgY29ycnVwdGVkLiIpOworICAgICAgICAgICAgICAgcmV0dXJuIC0yOworICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGFkdmFuY2UgLT0gKFNCX1NVQk1PREVfQklUUysxKTsKKyAgICAgICAgICAgIHNwZWV4X2JpdHNfYWR2YW5jZShiaXRzLCBhZHZhbmNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNwZWV4X2JpdHNfcmVtYWluaW5nKGJpdHMpPDUpCisgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB3aWRlYmFuZCA9IHNwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKGJpdHMsIDEpOworICAgICAgICAgICAgaWYgKHdpZGViYW5kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgYWR2YW5jZSA9IHN1Ym1vZGUgPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCBTQl9TVUJNT0RFX0JJVFMpOworICAgICAgICAgICAgICAgc3BlZXhfbW9kZV9xdWVyeSgmc3BlZXhfd2JfbW9kZSwgU1BFRVhfU1VCTU9ERV9CSVRTX1BFUl9GUkFNRSwgJmFkdmFuY2UpOworICAgICAgICAgICAgICAgaWYgKGFkdmFuY2UgPCAwKQorICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgc3BlZXhfbm90aWZ5KCJJbnZhbGlkIG1vZGUgZW5jb3VudGVyZWQuIFRoZSBzdHJlYW0gaXMgY29ycnVwdGVkLiIpOworICAgICAgICAgICAgICAgICAgcmV0dXJuIC0yOworICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgIGFkdmFuY2UgLT0gKFNCX1NVQk1PREVfQklUUysxKTsKKyAgICAgICAgICAgICAgIHNwZWV4X2JpdHNfYWR2YW5jZShiaXRzLCBhZHZhbmNlKTsKKyAgICAgICAgICAgICAgIHdpZGViYW5kID0gc3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgMSk7CisgICAgICAgICAgICAgICBpZiAod2lkZWJhbmQpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBzcGVleF9ub3RpZnkoIk1vcmUgdGhhbiB0d28gd2lkZWJhbmQgbGF5ZXJzIGZvdW5kLiBUaGUgc3RyZWFtIGlzIGNvcnJ1cHRlZC4iKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgaWYgKHNwZWV4X2JpdHNfcmVtYWluaW5nKGJpdHMpPDQpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAvKiBGSVhNRTogQ2hlY2sgZm9yIG92ZXJmbG93ICovCisgICAgICAgICBtID0gc3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgNCk7CisgICAgICAgICBpZiAobT09MTUpIC8qIFdlIGZvdW5kIGEgdGVybWluYXRvciAqLworICAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgfSBlbHNlIGlmIChtPT0xNCkgLyogU3BlZXggaW4tYmFuZCByZXF1ZXN0ICovCisgICAgICAgICB7CisgICAgICAgICAgICBpbnQgcmV0ID0gc3BlZXhfaW5iYW5kX2hhbmRsZXIoYml0cywgc3QtPnNwZWV4X2NhbGxiYWNrcywgc3RhdGUpOworICAgICAgICAgICAgaWYgKHJldCkKKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICB9IGVsc2UgaWYgKG09PTEzKSAvKiBVc2VyIGluLWJhbmQgcmVxdWVzdCAqLworICAgICAgICAgeworICAgICAgICAgICAgaW50IHJldCA9IHN0LT51c2VyX2NhbGxiYWNrLmZ1bmMoYml0cywgc3RhdGUsIHN0LT51c2VyX2NhbGxiYWNrLmRhdGEpOworICAgICAgICAgICAgaWYgKHJldCkKKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICB9IGVsc2UgaWYgKG0+OCkgLyogSW52YWxpZCBtb2RlICovCisgICAgICAgICB7CisgICAgICAgICAgICBzcGVleF9ub3RpZnkoIkludmFsaWQgbW9kZSBlbmNvdW50ZXJlZC4gVGhlIHN0cmVhbSBpcyBjb3JydXB0ZWQuIik7CisgICAgICAgICAgICByZXR1cm4gLTI7CisgICAgICAgICB9CisgICAgICAKKyAgICAgIH0gd2hpbGUgKG0+OCk7CisKKyAgICAgIC8qIEdldCB0aGUgc3ViLW1vZGUgdGhhdCB3YXMgdXNlZCAqLworICAgICAgc3QtPnN1Ym1vZGVJRCA9IG07CisjaWZkZWYgRVBJQ180OEsKKyAgICAgICAgIH0KKyNlbmRpZgorICAgICAgfQorCisgICB9CisKKyAgIC8qIFNoaWZ0IGFsbCBidWZmZXJzIGJ5IG9uZSBmcmFtZSAqLworICAgc3BlZXhfbW92ZShzdC0+ZXhjQnVmLCBzdC0+ZXhjQnVmK3N0LT5mcmFtZVNpemUsICgyKnN0LT5tYXhfcGl0Y2ggKyBzdC0+c3ViZnJhbWVTaXplICsgMTIpKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKworICAgLyogSWYgbnVsbCBtb2RlIChubyB0cmFuc21pc3Npb24pLCBqdXN0IHNldCBhIGNvdXBsZSB0aGluZ3MgdG8gemVybyovCisgICBpZiAoc3QtPnN1Ym1vZGVzW3N0LT5zdWJtb2RlSURdID09IE5VTEwpCisgICB7CisgICAgICBWQVJERUNMKHNweF9jb2VmX3QgKmxwYyk7CisgICAgICBBTExPQyhscGMsIHN0LT5scGNTaXplLCBzcHhfY29lZl90KTsKKyAgICAgIGJ3X2xwYyhRQ09OU1QxNigwLjkzZiwxNSksIHN0LT5pbnRlcnBfcWxwYywgbHBjLCBzdC0+bHBjU2l6ZSk7CisgICAgICB7CisgICAgICAgICBmbG9hdCBpbm5vdl9nYWluPTA7CisgICAgICAgICBmbG9hdCBwZ2Fpbj1HQUlOX1NDQUxJTkdfMSpzdC0+bGFzdF9waXRjaF9nYWluOworICAgICAgICAgaWYgKHBnYWluPi42KQorICAgICAgICAgICAgcGdhaW49LjY7CisgICAgICAgICAvKiBGSVhNRTogVGhpcyB3YXMgaW5ub3YsIG5vdCBleGMgKi8KKyAgICAgICAgIGlubm92X2dhaW4gPSBjb21wdXRlX3JtczE2KHN0LT5leGMsIHN0LT5mcmFtZVNpemUpOworICAgICAgICAgZm9yIChpPTA7aTxzdC0+ZnJhbWVTaXplO2krKykKKyAgICAgICAgICAgIHN0LT5leGNbaV09c3BlZXhfcmFuZChpbm5vdl9nYWluLCAmc3QtPnNlZWQpOworICAgICAgfQorCisKKyAgICAgIHN0LT5maXJzdD0xOworCisgICAgICBmb3IgKGk9MDtpPHN0LT5mcmFtZVNpemU7aSsrKQorICAgICAgICAgb3V0W2ldID0gc3QtPmV4Y1tpXTsKKyAgICAgIC8qIEZpbmFsIHNpZ25hbCBzeW50aGVzaXMgZnJvbSBleGNpdGF0aW9uICovCisgICAgICBpaXJfbWVtMTYob3V0LCBscGMsIG91dCwgc3QtPmZyYW1lU2l6ZSwgc3QtPmxwY1NpemUsIHN0LT5tZW1fc3AsIHN0YWNrKTsKKworICAgICAgc3QtPmNvdW50X2xvc3Q9MDsKKyAgICAgIHJldHVybiAwOworICAgfQorCisgICBBTExPQyhxbHNwLCBzdC0+bHBjU2l6ZSwgc3B4X2xzcF90KTsKKworICAgLyogVW5xdWFudGl6ZSBMU1BzICovCisgICBTVUJNT0RFKGxzcF91bnF1YW50KShxbHNwLCBzdC0+bHBjU2l6ZSwgYml0cyk7CisKKyAgIC8qRGFtcCBtZW1vcnkgaWYgYSBmcmFtZSB3YXMgbG9zdCBhbmQgdGhlIExTUCBjaGFuZ2VkIHRvbyBtdWNoKi8KKyAgIGlmIChzdC0+Y291bnRfbG9zdCkKKyAgIHsKKyAgICAgIHNweF93b3JkMTZfdCBmYWN0OworICAgICAgc3B4X3dvcmQzMl90IGxzcF9kaXN0PTA7CisgICAgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgICAgIGxzcF9kaXN0ID0gQUREMzIobHNwX2Rpc3QsIEVYVEVORDMyKEFCUyhzdC0+b2xkX3Fsc3BbaV0gLSBxbHNwW2ldKSkpOworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICBmYWN0ID0gU0hSMTYoMTk2NjEsU0hSMzIobHNwX2Rpc3QsTFNQX1NISUZUKzIpKTsgICAgICAKKyNlbHNlCisgICAgICBmYWN0ID0gLjYqZXhwKC0uMipsc3BfZGlzdCk7CisjZW5kaWYKKyAgICAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemU7aSsrKQorICAgICAgICAgc3QtPm1lbV9zcFtpXSA9IE1VTFQxNl8zMl9RMTUoZmFjdCxzdC0+bWVtX3NwW2ldKTsKKyAgIH0KKworCisgICAvKiBIYW5kbGUgZmlyc3QgZnJhbWUgYW5kIGxvc3QtcGFja2V0IGNhc2UgKi8KKyAgIGlmIChzdC0+Zmlyc3QgfHwgc3QtPmNvdW50X2xvc3QpCisgICB7CisgICAgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgICAgIHN0LT5vbGRfcWxzcFtpXSA9IHFsc3BbaV07CisgICB9CisKKyNpZmRlZiBFUElDXzQ4SworICAgaWYgKHN0LT5sYnJfNDhrKSB7CisgICAgICBwaXRjaF9oYWxmWzBdID0gc3QtPm1pbl9waXRjaCtzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCA3KTsKKyAgICAgIHBpdGNoX2hhbGZbMV0gPSBwaXRjaF9oYWxmWzBdK3NwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKGJpdHMsIDIpLTE7CisKKyAgICAgIG9sX3BpdGNoX2lkID0gc3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgMyk7CisgICAgICBvbF9waXRjaF9jb2VmPUdBSU5fU0NBTElORyowLjEzNTE0Km9sX3BpdGNoX2lkOworCisgICAgICB7CisgICAgICAgICBpbnQgcWU7CisgICAgICAgICBxZSA9IHNwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKGJpdHMsIDQpOworICAgICAgICAgb2xfZ2FpbiA9IFNJR19TQ0FMSU5HKmV4cCgocWUrMikvMi4xKSxTSUdfU0hJRlQ7CisgICAgICB9CisKKyAgIH0gZWxzZSB7CisjZW5kaWYKKworICAgLyogR2V0IG9wZW4tbG9vcCBwaXRjaCBlc3RpbWF0aW9uIGZvciBsb3cgYml0LXJhdGUgcGl0Y2ggY29kaW5nICovCisgICBpZiAoU1VCTU9ERShsYnJfcGl0Y2gpIT0tMSkKKyAgIHsKKyAgICAgIG9sX3BpdGNoID0gc3QtPm1pbl9waXRjaCtzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCA3KTsKKyAgIH0gCisgICAKKyAgIGlmIChTVUJNT0RFKGZvcmNlZF9waXRjaF9nYWluKSkKKyAgIHsKKyAgICAgIGludCBxdWFudDsKKyAgICAgIHF1YW50ID0gc3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgNCk7CisgICAgICBvbF9waXRjaF9jb2VmPUdBSU5fU0NBTElORyowLjA2NjY2NypxdWFudDsKKyAgIH0KKyAgIAorICAgLyogR2V0IGdsb2JhbCBleGNpdGF0aW9uIGdhaW4gKi8KKyAgIHsKKyAgICAgIGludCBxZTsKKyAgICAgIHFlID0gc3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgNSk7CisjaWZkZWYgRklYRURfUE9JTlQKKyAgICAgIC8qIEZJWE1FOiBQZXJoYXBzIHdlIGNvdWxkIHNsaWdodGx5IGxvd2VyIHRoZSBnYWluIGhlcmUgd2hlbiB0aGUgb3V0cHV0IGlzIGdvaW5nIHRvIHNhdHVyYXRlPyAqLworICAgICAgb2xfZ2FpbiA9IE1VTFQxNl8zMl9RMTUoMjg0MDYsb2xfZ2Fpbl90YWJsZVtxZV0pOworI2Vsc2UKKyAgICAgIG9sX2dhaW4gPSBTSUdfU0NBTElORypleHAocWUvMy41KTsKKyNlbmRpZgorICAgfQorI2lmZGVmIEVQSUNfNDhLCisgICB9CisjZW5kaWYKKworICAgQUxMT0MoYWssIHN0LT5scGNTaXplLCBzcHhfY29lZl90KTsKKyAgIEFMTE9DKGlubm92LCBzdC0+c3ViZnJhbWVTaXplLCBzcHhfc2lnX3QpOworICAgQUxMT0MoZXhjMzIsIHN0LT5zdWJmcmFtZVNpemUsIHNweF93b3JkMzJfdCk7CisKKyAgIGlmIChzdC0+c3VibW9kZUlEPT0xKQorICAgeworICAgICAgaW50IGV4dHJhOworICAgICAgZXh0cmEgPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCA0KTsKKworICAgICAgaWYgKGV4dHJhPT0xNSkKKyAgICAgICAgIHN0LT5kdHhfZW5hYmxlZD0xOworICAgICAgZWxzZQorICAgICAgICAgc3QtPmR0eF9lbmFibGVkPTA7CisgICB9CisgICBpZiAoc3QtPnN1Ym1vZGVJRD4xKQorICAgICAgc3QtPmR0eF9lbmFibGVkPTA7CisKKyAgIC8qTG9vcCBvbiBzdWJmcmFtZXMgKi8KKyAgIGZvciAoc3ViPTA7c3ViPHN0LT5uYlN1YmZyYW1lcztzdWIrKykKKyAgIHsKKyAgICAgIGludCBvZmZzZXQ7CisgICAgICBzcHhfd29yZDE2X3QgKmV4YzsKKyAgICAgIHNweF93b3JkMTZfdCAqc3A7CisgICAgICBzcHhfd29yZDE2X3QgKmlubm92X3NhdmUgPSBOVUxMOworICAgICAgc3B4X3dvcmQxNl90IHRtcDsKKworI2lmZGVmIEVQSUNfNDhLCisgICAgICBpZiAoc3QtPmxicl80OGspCisgICAgICB7CisgICAgICAgICBpZiAoc3ViKjIgPCBzdC0+bmJTdWJmcmFtZXMpCisgICAgICAgICAgICBvbF9waXRjaCA9IHBpdGNoX2hhbGZbMF07CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBvbF9waXRjaCA9IHBpdGNoX2hhbGZbMV07CisgICAgICB9CisjZW5kaWYKKworICAgICAgLyogT2Zmc2V0IHJlbGF0aXZlIHRvIHN0YXJ0IG9mIGZyYW1lICovCisgICAgICBvZmZzZXQgPSBzdC0+c3ViZnJhbWVTaXplKnN1YjsKKyAgICAgIC8qIEV4Y2l0YXRpb24gKi8KKyAgICAgIGV4Yz1zdC0+ZXhjK29mZnNldDsKKyAgICAgIC8qIE9yaWdpbmFsIHNpZ25hbCAqLworICAgICAgc3A9b3V0K29mZnNldDsKKyAgICAgIGlmIChzdC0+aW5ub3Zfc2F2ZSkKKyAgICAgICAgIGlubm92X3NhdmUgPSBzdC0+aW5ub3Zfc2F2ZStvZmZzZXQ7CisKKworICAgICAgLyogUmVzZXQgZXhjaXRhdGlvbiAqLworICAgICAgZm9yIChpPTA7aTxzdC0+c3ViZnJhbWVTaXplO2krKykKKyAgICAgICAgIGV4Y1tpXT0wOworCisgICAgICAvKkFkYXB0aXZlIGNvZGVib29rIGNvbnRyaWJ1dGlvbiovCisgICAgICBpZiAoU1VCTU9ERShsdHBfdW5xdWFudCkpCisgICAgICB7CisgICAgICAgICBpbnQgcGl0X21pbiwgcGl0X21heDsKKyAgICAgICAgIC8qIEhhbmRsZSBwaXRjaCBjb25zdHJhaW50cyBpZiBhbnkgKi8KKyAgICAgICAgIGlmIChTVUJNT0RFKGxicl9waXRjaCkgIT0gLTEpCisgICAgICAgICB7CisgICAgICAgICAgICBpbnQgbWFyZ2luOworICAgICAgICAgICAgbWFyZ2luID0gU1VCTU9ERShsYnJfcGl0Y2gpOworICAgICAgICAgICAgaWYgKG1hcmdpbikKKyAgICAgICAgICAgIHsKKy8qIEdUIC0gbmVlZCBvcHRpbWl6YXRpb24/CisgICAgICAgICAgICAgICBpZiAob2xfcGl0Y2ggPCBzdC0+bWluX3BpdGNoK21hcmdpbi0xKQorICAgICAgICAgICAgICAgICAgb2xfcGl0Y2g9c3QtPm1pbl9waXRjaCttYXJnaW4tMTsKKyAgICAgICAgICAgICAgIGlmIChvbF9waXRjaCA+IHN0LT5tYXhfcGl0Y2gtbWFyZ2luKQorICAgICAgICAgICAgICAgICAgb2xfcGl0Y2g9c3QtPm1heF9waXRjaC1tYXJnaW47CisgICAgICAgICAgICAgICBwaXRfbWluID0gb2xfcGl0Y2gtbWFyZ2luKzE7CisgICAgICAgICAgICAgICBwaXRfbWF4ID0gb2xfcGl0Y2grbWFyZ2luOworKi8KKyAgICAgICAgICAgICAgIHBpdF9taW4gPSBvbF9waXRjaC1tYXJnaW4rMTsKKyAgICAgICAgICAgICAgIGlmIChwaXRfbWluIDwgc3QtPm1pbl9waXRjaCkKKwkJICBwaXRfbWluID0gc3QtPm1pbl9waXRjaDsKKyAgICAgICAgICAgICAgIHBpdF9tYXggPSBvbF9waXRjaCttYXJnaW47CisgICAgICAgICAgICAgICBpZiAocGl0X21heCA+IHN0LT5tYXhfcGl0Y2gpCisJCSAgcGl0X21heCA9IHN0LT5tYXhfcGl0Y2g7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgcGl0X21pbiA9IHBpdF9tYXggPSBvbF9waXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwaXRfbWluID0gc3QtPm1pbl9waXRjaDsKKyAgICAgICAgICAgIHBpdF9tYXggPSBzdC0+bWF4X3BpdGNoOworICAgICAgICAgfQorCisKKyNpZmRlZiBFUElDXzQ4SworICAgICAgICAgaWYgKHN0LT5sYnJfNDhrKQorICAgICAgICAgeworICAgICAgICAgICAgIFNVQk1PREUobHRwX3VucXVhbnQpKGV4YywgZXhjMzIsIHBpdF9taW4sIHBpdF9tYXgsIG9sX3BpdGNoX2NvZWYsIFNVQk1PREUobHRwX3BhcmFtcyksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0LT5zdWJmcmFtZVNpemUsICZwaXRjaCwgJnBpdGNoX2dhaW5bMF0sIGJpdHMsIHN0YWNrLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+Y291bnRfbG9zdCwgb2Zmc2V0LCBzdC0+bGFzdF9waXRjaF9nYWluLCBvbF9waXRjaF9pZCk7CisgICAgICAgICB9IGVsc2UgeworI2VuZGlmCisKKyAgICAgICAgICAgICBTVUJNT0RFKGx0cF91bnF1YW50KShleGMsIGV4YzMyLCBwaXRfbWluLCBwaXRfbWF4LCBvbF9waXRjaF9jb2VmLCBTVUJNT0RFKGx0cF9wYXJhbXMpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3ViZnJhbWVTaXplLCAmcGl0Y2gsICZwaXRjaF9nYWluWzBdLCBiaXRzLCBzdGFjaywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPmNvdW50X2xvc3QsIG9mZnNldCwgc3QtPmxhc3RfcGl0Y2hfZ2FpbiwgMCk7CisKKyNpZmRlZiBFUElDXzQ4SworICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAvKiBFbnN1cmluZyB0aGF0IHRoaW5ncyBhcmVuJ3QgYmxvd2luZyB1cCBhcyB3b3VsZCBoYXBwZW4gaWYgZS5nLiBhbiBlbmNvZGVyIGlzIAorICAgICAgICAgY3JhZnRpbmcgcGFja2V0cyB0byBtYWtlIHVzIHByb2R1Y2UgTmFOcyBhbmQgc2xvdyBkb3duIHRoZSBkZWNvZGVyICh2YWd1ZSBEb1MgdGhyZWF0KS4KKyAgICAgICAgIFdlIGNhbiBwcm9iYWJseSBiZSBldmVuIG1vcmUgYWdncmVzc2l2ZSBhbmQgbGltaXQgdG8gMTUwMDAgb3Igc28uICovCisgICAgICAgICBzYW5pdGl6ZV92YWx1ZXMzMihleGMzMiwgTkVHMzIoUUNPTlNUMzIoMzIwMDAsU0lHX1NISUZULTEpKSwgUUNPTlNUMzIoMzIwMDAsU0lHX1NISUZULTEpLCBzdC0+c3ViZnJhbWVTaXplKTsKKyAgICAgICAgIAorICAgICAgICAgdG1wID0gZ2Fpbl8zdGFwX3RvXzF0YXAocGl0Y2hfZ2Fpbik7CisKKyAgICAgICAgIHBpdGNoX2F2ZXJhZ2UgKz0gdG1wOworICAgICAgICAgaWYgKCh0bXA+YmVzdF9waXRjaF9nYWluJiZBQlMoMipiZXN0X3BpdGNoLXBpdGNoKT49MyYmQUJTKDMqYmVzdF9waXRjaC1waXRjaCk+PTQmJkFCUyg0KmJlc3RfcGl0Y2gtcGl0Y2gpPj01KSAKKyAgICAgICAgICAgICAgfHwgKHRtcD5NVUxUMTZfMTZfUTE1KFFDT05TVDE2KC42LDE1KSxiZXN0X3BpdGNoX2dhaW4pJiYoQUJTKGJlc3RfcGl0Y2gtMipwaXRjaCk8M3x8QUJTKGJlc3RfcGl0Y2gtMypwaXRjaCk8NHx8QUJTKGJlc3RfcGl0Y2gtNCpwaXRjaCk8NSkpIAorICAgICAgICAgICAgICB8fCAoTVVMVDE2XzE2X1ExNShRQ09OU1QxNiguNjcsMTUpLHRtcCk+YmVzdF9waXRjaF9nYWluJiYoQUJTKDIqYmVzdF9waXRjaC1waXRjaCk8M3x8QUJTKDMqYmVzdF9waXRjaC1waXRjaCk8NHx8QUJTKDQqYmVzdF9waXRjaC1waXRjaCk8NSkpICkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGJlc3RfcGl0Y2ggPSBwaXRjaDsKKyAgICAgICAgICAgIGlmICh0bXAgPiBiZXN0X3BpdGNoX2dhaW4pCisgICAgICAgICAgICAgICBiZXN0X3BpdGNoX2dhaW4gPSB0bXA7CisgICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAgc3BlZXhfZXJyb3IoIk5vIHBpdGNoIHByZWRpY3Rpb24sIHdoYXQncyB3cm9uZyIpOworICAgICAgfQorICAgICAgCisgICAgICAvKiBVbnF1YW50aXplIHRoZSBpbm5vdmF0aW9uICovCisgICAgICB7CisgICAgICAgICBpbnQgcV9lbmVyZ3k7CisgICAgICAgICBzcHhfd29yZDMyX3QgZW5lcjsKKyAgICAgICAgIAorICAgICAgICAgZm9yIChpPTA7aTxzdC0+c3ViZnJhbWVTaXplO2krKykKKyAgICAgICAgICAgIGlubm92W2ldPTA7CisKKyAgICAgICAgIC8qIERlY29kZSBzdWItZnJhbWUgZ2FpbiBjb3JyZWN0aW9uICovCisgICAgICAgICBpZiAoU1VCTU9ERShoYXZlX3N1YmZyYW1lX2dhaW4pPT0zKQorICAgICAgICAgeworICAgICAgICAgICAgcV9lbmVyZ3kgPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCAzKTsKKyAgICAgICAgICAgIGVuZXIgPSBNVUxUMTZfMzJfUTE0KGV4Y19nYWluX3F1YW50X3NjYWwzW3FfZW5lcmd5XSxvbF9nYWluKTsKKyAgICAgICAgIH0gZWxzZSBpZiAoU1VCTU9ERShoYXZlX3N1YmZyYW1lX2dhaW4pPT0xKQorICAgICAgICAgeworICAgICAgICAgICAgcV9lbmVyZ3kgPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCAxKTsKKyAgICAgICAgICAgIGVuZXIgPSBNVUxUMTZfMzJfUTE0KGV4Y19nYWluX3F1YW50X3NjYWwxW3FfZW5lcmd5XSxvbF9nYWluKTsKKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbmVyID0gb2xfZ2FpbjsKKyAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgaWYgKFNVQk1PREUoaW5ub3ZhdGlvbl91bnF1YW50KSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIC8qRml4ZWQgY29kZWJvb2sgY29udHJpYnV0aW9uKi8KKyAgICAgICAgICAgIFNVQk1PREUoaW5ub3ZhdGlvbl91bnF1YW50KShpbm5vdiwgU1VCTU9ERShpbm5vdmF0aW9uX3BhcmFtcyksIHN0LT5zdWJmcmFtZVNpemUsIGJpdHMsIHN0YWNrLCAmc3QtPnNlZWQpOworICAgICAgICAgICAgLyogRGUtbm9ybWFsaXplIGlubm92YXRpb24gYW5kIHVwZGF0ZSBleGNpdGF0aW9uICovCisjaWZkZWYgRklYRURfUE9JTlQKKyAgICAgICAgICAgIHNpZ25hbF9tdWwoaW5ub3YsIGlubm92LCBlbmVyLCBzdC0+c3ViZnJhbWVTaXplKTsKKyNlbHNlCisgICAgICAgICAgICBzaWduYWxfbXVsKGlubm92LCBpbm5vdiwgZW5lciwgc3QtPnN1YmZyYW1lU2l6ZSk7CisjZW5kaWYKKyAgICAgICAgICAgIC8qIERlY29kZSBzZWNvbmQgY29kZWJvb2sgKG9ubHkgZm9yIHNvbWUgbW9kZXMpICovCisgICAgICAgICAgICBpZiAoU1VCTU9ERShkb3VibGVfY29kZWJvb2spKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgY2hhciAqdG1wX3N0YWNrPXN0YWNrOworICAgICAgICAgICAgICAgVkFSREVDTChzcHhfc2lnX3QgKmlubm92Mik7CisgICAgICAgICAgICAgICBBTExPQyhpbm5vdjIsIHN0LT5zdWJmcmFtZVNpemUsIHNweF9zaWdfdCk7CisgICAgICAgICAgICAgICBmb3IgKGk9MDtpPHN0LT5zdWJmcmFtZVNpemU7aSsrKQorICAgICAgICAgICAgICAgICAgaW5ub3YyW2ldPTA7CisgICAgICAgICAgICAgICBTVUJNT0RFKGlubm92YXRpb25fdW5xdWFudCkoaW5ub3YyLCBTVUJNT0RFKGlubm92YXRpb25fcGFyYW1zKSwgc3QtPnN1YmZyYW1lU2l6ZSwgYml0cywgc3RhY2ssICZzdC0+c2VlZCk7CisgICAgICAgICAgICAgICBzaWduYWxfbXVsKGlubm92MiwgaW5ub3YyLCBNVUxUMTZfMzJfUTE1KFFDT05TVDE2KDAuNDU0NTQ1ZiwxNSksZW5lciksIHN0LT5zdWJmcmFtZVNpemUpOworICAgICAgICAgICAgICAgZm9yIChpPTA7aTxzdC0+c3ViZnJhbWVTaXplO2krKykKKyAgICAgICAgICAgICAgICAgIGlubm92W2ldID0gQUREMzIoaW5ub3ZbaV0sIGlubm92MltpXSk7CisgICAgICAgICAgICAgICBzdGFjayA9IHRtcF9zdGFjazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaT0wO2k8c3QtPnN1YmZyYW1lU2l6ZTtpKyspCisgICAgICAgICAgICAgICBleGNbaV09RVhUUkFDVDE2KFNBVFVSQVRFMzIoUFNIUjMyKEFERDMyKFNITDMyKGV4YzMyW2ldLDEpLGlubm92W2ldKSxTSUdfU0hJRlQpLDMyNzY3KSk7CisgICAgICAgICAgICAvKnByaW50X3ZlYyhleGMsIDQwLCAiaW5ub3YiKTsqLworICAgICAgICAgICAgaWYgKGlubm92X3NhdmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBmb3IgKGk9MDtpPHN0LT5zdWJmcmFtZVNpemU7aSsrKQorICAgICAgICAgICAgICAgICAgaW5ub3Zfc2F2ZVtpXSA9IEVYVFJBQ1QxNihQU0hSMzIoaW5ub3ZbaV0sIFNJR19TSElGVCkpOworICAgICAgICAgICAgfQorICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNwZWV4X2Vycm9yKCJObyBmaXhlZCBjb2RlYm9vayIpOworICAgICAgICAgfQorCisgICAgICAgICAvKlZvY29kZXIgbW9kZSovCisgICAgICAgICBpZiAoc3QtPnN1Ym1vZGVJRD09MSkgCisgICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCBnPW9sX3BpdGNoX2NvZWYqR0FJTl9TQ0FMSU5HXzE7CisKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChpPTA7aTxzdC0+c3ViZnJhbWVTaXplO2krKykKKyAgICAgICAgICAgICAgIGV4Y1tpXT0wOworICAgICAgICAgICAgd2hpbGUgKHN0LT52b2Nfb2Zmc2V0PHN0LT5zdWJmcmFtZVNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBpZiAoc3QtPnZvY19vZmZzZXQ+PTApCisgICAgICAgICAgICAgICAgICBleGNbc3QtPnZvY19vZmZzZXRdPXNxcnQoMS4wKm9sX3BpdGNoKTsKKyAgICAgICAgICAgICAgIHN0LT52b2Nfb2Zmc2V0Kz1vbF9waXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0LT52b2Nfb2Zmc2V0IC09IHN0LT5zdWJmcmFtZVNpemU7CisKKyAgICAgICAgICAgIGc9LjUrMiooZy0uNik7CisgICAgICAgICAgICBpZiAoZzwwKQorICAgICAgICAgICAgICAgZz0wOworICAgICAgICAgICAgaWYgKGc+MSkKKyAgICAgICAgICAgICAgIGc9MTsKKyAgICAgICAgICAgIGZvciAoaT0wO2k8c3QtPnN1YmZyYW1lU2l6ZTtpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBzcHhfd29yZDE2X3QgZXhjaT1leGNbaV07CisgICAgICAgICAgICAgICAvKiBGSVhNRTogY2xlYW51cCB0aGUgaW5ub3ZbaV0vU0lHX1NDQUxJTkcgKi8KKyAgICAgICAgICAgICAgIGV4Y1tpXT0uOCpnKmV4Y1tpXSpQU0hSMzIob2xfZ2FpbixTSUdfU0hJRlQpICsgLjYqZypzdC0+dm9jX20xKlBTSFIzMihvbF9nYWluLFNJR19TSElGVCkgKyAoMS0uNSpnKSpQU0hSMzIoaW5ub3ZbaV0sU0lHX1NISUZUKSAtIC41KmcqUFNIUjMyKHN0LT52b2NfbTIsU0lHX1NISUZUKTsKKyAgICAgICAgICAgICAgIHN0LT52b2NfbTEgPSBleGNpOworICAgICAgICAgICAgICAgc3QtPnZvY19tMj1pbm5vdltpXTsKKyAgICAgICAgICAgICAgIHN0LT52b2NfbWVhbiA9IC45NSpzdC0+dm9jX21lYW4gKyAuMDUqZXhjW2ldOworICAgICAgICAgICAgICAgZXhjW2ldLT1zdC0+dm9jX21lYW47CisgICAgICAgICAgICB9CisgICAgICAgICB9CisKKyAgICAgIH0KKyAgIH0KKyAgIAorICAgQUxMT0MoaW50ZXJwX3Fsc3AsIHN0LT5scGNTaXplLCBzcHhfbHNwX3QpOworCisgICBpZiAoc3QtPmxwY19lbmhfZW5hYmxlZCAmJiBTVUJNT0RFKGNvbWJfZ2Fpbik+MCAmJiAhc3QtPmNvdW50X2xvc3QpCisgICB7CisgICAgICBtdWx0aWNvbWIoc3QtPmV4Yy1zdC0+c3ViZnJhbWVTaXplLCBvdXQsIHN0LT5pbnRlcnBfcWxwYywgc3QtPmxwY1NpemUsIDIqc3QtPnN1YmZyYW1lU2l6ZSwgYmVzdF9waXRjaCwgNDAsIFNVQk1PREUoY29tYl9nYWluKSwgc3RhY2spOworICAgICAgbXVsdGljb21iKHN0LT5leGMrc3QtPnN1YmZyYW1lU2l6ZSwgb3V0KzIqc3QtPnN1YmZyYW1lU2l6ZSwgc3QtPmludGVycF9xbHBjLCBzdC0+bHBjU2l6ZSwgMipzdC0+c3ViZnJhbWVTaXplLCBiZXN0X3BpdGNoLCA0MCwgU1VCTU9ERShjb21iX2dhaW4pLCBzdGFjayk7CisgICB9IGVsc2UgeworICAgICAgZm9yIChpPTA7aTxzdC0+ZnJhbWVTaXplO2krKykKKyAgICAgICAgIG91dFtpXT1zdC0+ZXhjW2ktc3QtPnN1YmZyYW1lU2l6ZV07CisgICB9CisgICAKKyAgIC8qIElmIHRoZSBsYXN0IHBhY2tldCB3YXMgbG9zdCwgcmUtc2NhbGUgdGhlIGV4Y2l0YXRpb24gdG8gb2J0YWluIHRoZSBzYW1lIGVuZXJneSBhcyBlbmNvZGVkIGluIG9sX2dhaW4gKi8KKyAgIGlmIChzdC0+Y291bnRfbG9zdCkgCisgICB7CisgICAgICBzcHhfd29yZDE2X3QgZXhjX2VuZXI7CisgICAgICBzcHhfd29yZDMyX3QgZ2FpbjMyOworICAgICAgc3B4X3dvcmQxNl90IGdhaW47CisgICAgICBleGNfZW5lciA9IGNvbXB1dGVfcm1zMTYgKHN0LT5leGMsIHN0LT5mcmFtZVNpemUpOworICAgICAgZ2FpbjMyID0gUERJVjMyKG9sX2dhaW4sIEFERDE2KGV4Y19lbmVyLDEpKTsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgICAgaWYgKGdhaW4zMiA+IDMyNzY3KQorICAgICAgICAgZ2FpbjMyID0gMzI3Njc7CisgICAgICBnYWluID0gRVhUUkFDVDE2KGdhaW4zMik7CisjZWxzZQorICAgICAgaWYgKGdhaW4zMiA+IDIpCisgICAgICAgICBnYWluMzI9MjsKKyAgICAgIGdhaW4gPSBnYWluMzI7CisjZW5kaWYKKyAgICAgIGZvciAoaT0wO2k8c3QtPmZyYW1lU2l6ZTtpKyspCisgICAgICB7CisgICAgICAgICBzdC0+ZXhjW2ldID0gTVVMVDE2XzE2X1ExNChnYWluLCBzdC0+ZXhjW2ldKTsKKyAgICAgICAgIG91dFtpXT1zdC0+ZXhjW2ktc3QtPnN1YmZyYW1lU2l6ZV07CisgICAgICB9CisgICB9CisKKyAgIC8qTG9vcCBvbiBzdWJmcmFtZXMgKi8KKyAgIGZvciAoc3ViPTA7c3ViPHN0LT5uYlN1YmZyYW1lcztzdWIrKykKKyAgIHsKKyAgICAgIGludCBvZmZzZXQ7CisgICAgICBzcHhfd29yZDE2X3QgKnNwOworICAgICAgc3B4X3dvcmQxNl90ICpleGM7CisgICAgICAvKiBPZmZzZXQgcmVsYXRpdmUgdG8gc3RhcnQgb2YgZnJhbWUgKi8KKyAgICAgIG9mZnNldCA9IHN0LT5zdWJmcmFtZVNpemUqc3ViOworICAgICAgLyogT3JpZ2luYWwgc2lnbmFsICovCisgICAgICBzcD1vdXQrb2Zmc2V0OworICAgICAgLyogRXhjaXRhdGlvbiAqLworICAgICAgZXhjPXN0LT5leGMrb2Zmc2V0OworCisgICAgICAvKiBMU1AgaW50ZXJwb2xhdGlvbiAocXVhbnRpemVkIGFuZCB1bnF1YW50aXplZCkgKi8KKyAgICAgIGxzcF9pbnRlcnBvbGF0ZShzdC0+b2xkX3Fsc3AsIHFsc3AsIGludGVycF9xbHNwLCBzdC0+bHBjU2l6ZSwgc3ViLCBzdC0+bmJTdWJmcmFtZXMpOworCisgICAgICAvKiBNYWtlIHN1cmUgdGhlIExTUCdzIGFyZSBzdGFibGUgKi8KKyAgICAgIGxzcF9lbmZvcmNlX21hcmdpbihpbnRlcnBfcWxzcCwgc3QtPmxwY1NpemUsIExTUF9NQVJHSU4pOworCisgICAgICAvKiBDb21wdXRlIGludGVycG9sYXRlZCBMUENzICh1bnF1YW50aXplZCkgKi8KKyAgICAgIGxzcF90b19scGMoaW50ZXJwX3Fsc3AsIGFrLCBzdC0+bHBjU2l6ZSwgc3RhY2spOworCisgICAgICAvKiBDb21wdXRlIGFuYWx5c2lzIGZpbHRlciBhdCB3PXBpICovCisgICAgICB7CisgICAgICAgICBzcHhfd29yZDMyX3QgcGlfZz1MUENfU0NBTElORzsKKyAgICAgICAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemU7aSs9MikKKyAgICAgICAgIHsKKyAgICAgICAgICAgIC8qcGlfZyArPSAtc3QtPmludGVycF9xbHBjW2ldICsgIHN0LT5pbnRlcnBfcWxwY1tpKzFdOyovCisgICAgICAgICAgICBwaV9nID0gQUREMzIocGlfZywgU1VCMzIoRVhURU5EMzIoYWtbaSsxXSksRVhURU5EMzIoYWtbaV0pKSk7CisgICAgICAgICB9CisgICAgICAgICBzdC0+cGlfZ2FpbltzdWJdID0gcGlfZzsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWlyX21lbTE2KHNwLCBzdC0+aW50ZXJwX3FscGMsIHNwLCBzdC0+c3ViZnJhbWVTaXplLCBzdC0+bHBjU2l6ZSwgCisgICAgICAgICAgICAgICAgc3QtPm1lbV9zcCwgc3RhY2spOworICAgICAgCisgICAgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgICAgIHN0LT5pbnRlcnBfcWxwY1tpXSA9IGFrW2ldOworCisgICB9CisKKyAgIGlmIChzdC0+aGlnaHBhc3NfZW5hYmxlZCkKKyAgICAgIGhpZ2hwYXNzKG91dCwgb3V0LCBzdC0+ZnJhbWVTaXplLCAoc3QtPmlzV2lkZWJhbmQ/SElHSFBBU1NfV0lERUJBTkQ6SElHSFBBU1NfTkFSUk9XQkFORCl8SElHSFBBU1NfT1VUUFVULCBzdC0+bWVtX2hwKTsKKyAgIC8qZm9yIChpPTA7aTxzdC0+ZnJhbWVTaXplO2krKykKKyAgICAgcHJpbnRmICgiJWRcbiIsIChpbnQpc3QtPmZyYW1lW2ldKTsqLworCisgICAvKiBTdG9yZSB0aGUgTFNQcyBmb3IgaW50ZXJwb2xhdGlvbiBpbiB0aGUgbmV4dCBmcmFtZSAqLworICAgZm9yIChpPTA7aTxzdC0+bHBjU2l6ZTtpKyspCisgICAgICBzdC0+b2xkX3Fsc3BbaV0gPSBxbHNwW2ldOworCisgICAvKiBUaGUgbmV4dCBmcmFtZSB3aWxsIG5vdCBiZSB0aGUgZmlyc3QgKER1aCEpICovCisgICBzdC0+Zmlyc3QgPSAwOworICAgc3QtPmNvdW50X2xvc3Q9MDsKKyAgIHN0LT5sYXN0X3BpdGNoID0gYmVzdF9waXRjaDsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgc3QtPmxhc3RfcGl0Y2hfZ2FpbiA9IFBTSFIxNihwaXRjaF9hdmVyYWdlLDIpOworI2Vsc2UKKyAgIHN0LT5sYXN0X3BpdGNoX2dhaW4gPSAuMjUqcGl0Y2hfYXZlcmFnZTsgICAKKyNlbmRpZgorICAgc3QtPnBpdGNoX2dhaW5fYnVmW3N0LT5waXRjaF9nYWluX2J1Zl9pZHgrK10gPSBzdC0+bGFzdF9waXRjaF9nYWluOworICAgaWYgKHN0LT5waXRjaF9nYWluX2J1Zl9pZHggPiAyKSAvKiByb2xsb3ZlciAqLworICAgICAgc3QtPnBpdGNoX2dhaW5fYnVmX2lkeCA9IDA7CisKKyAgIHN0LT5sYXN0X29sX2dhaW4gPSBvbF9nYWluOworCisgICByZXR1cm4gMDsKK30KKworaW50IG5iX2VuY29kZXJfY3RsKHZvaWQgKnN0YXRlLCBpbnQgcmVxdWVzdCwgdm9pZCAqcHRyKQoreworICAgRW5jU3RhdGUgKnN0OworICAgc3Q9KEVuY1N0YXRlKilzdGF0ZTsgICAgIAorICAgc3dpdGNoKHJlcXVlc3QpCisgICB7CisgICBjYXNlIFNQRUVYX0dFVF9GUkFNRV9TSVpFOgorICAgICAgKCooc3B4X2ludDMyX3QqKXB0cikgPSBzdC0+ZnJhbWVTaXplOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1NFVF9MT1dfTU9ERToKKyAgIGNhc2UgU1BFRVhfU0VUX01PREU6CisgICAgICBzdC0+c3VibW9kZVNlbGVjdCA9IHN0LT5zdWJtb2RlSUQgPSAoKihzcHhfaW50MzJfdCopcHRyKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9HRVRfTE9XX01PREU6CisgICBjYXNlIFNQRUVYX0dFVF9NT0RFOgorICAgICAgKCooc3B4X2ludDMyX3QqKXB0cikgPSBzdC0+c3VibW9kZUlEOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1NFVF9WQlI6CisgICAgICBzdC0+dmJyX2VuYWJsZWQgPSAoKihzcHhfaW50MzJfdCopcHRyKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9HRVRfVkJSOgorICAgICAgKCooc3B4X2ludDMyX3QqKXB0cikgPSBzdC0+dmJyX2VuYWJsZWQ7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfU0VUX1ZBRDoKKyAgICAgIHN0LT52YWRfZW5hYmxlZCA9ICgqKHNweF9pbnQzMl90KilwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9WQUQ6CisgICAgICAoKihzcHhfaW50MzJfdCopcHRyKSA9IHN0LT52YWRfZW5hYmxlZDsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfRFRYOgorICAgICAgc3QtPmR0eF9lbmFibGVkID0gKCooc3B4X2ludDMyX3QqKXB0cik7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfR0VUX0RUWDoKKyAgICAgICgqKHNweF9pbnQzMl90KilwdHIpID0gc3QtPmR0eF9lbmFibGVkOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1NFVF9BQlI6CisgICAgICBzdC0+YWJyX2VuYWJsZWQgPSAoKihzcHhfaW50MzJfdCopcHRyKTsKKyAgICAgIHN0LT52YnJfZW5hYmxlZCA9IHN0LT5hYnJfZW5hYmxlZCE9MDsKKyAgICAgIGlmIChzdC0+dmJyX2VuYWJsZWQpIAorICAgICAgeworICAgICAgICAgc3B4X2ludDMyX3QgaT0xMDsKKyAgICAgICAgIHNweF9pbnQzMl90IHJhdGUsIHRhcmdldDsKKyAgICAgICAgIGZsb2F0IHZicl9xdWFsOworICAgICAgICAgdGFyZ2V0ID0gKCooc3B4X2ludDMyX3QqKXB0cik7CisgICAgICAgICB3aGlsZSAoaT49MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LCBTUEVFWF9TRVRfUVVBTElUWSwgJmkpOworICAgICAgICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX0dFVF9CSVRSQVRFLCAmcmF0ZSk7CisgICAgICAgICAgICBpZiAocmF0ZSA8PSB0YXJnZXQpCisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGktLTsKKyAgICAgICAgIH0KKyAgICAgICAgIHZicl9xdWFsPWk7CisgICAgICAgICBpZiAodmJyX3F1YWw8MCkKKyAgICAgICAgICAgIHZicl9xdWFsPTA7CisgICAgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdCwgU1BFRVhfU0VUX1ZCUl9RVUFMSVRZLCAmdmJyX3F1YWwpOworICAgICAgICAgc3QtPmFicl9jb3VudD0wOworICAgICAgICAgc3QtPmFicl9kcmlmdD0wOworICAgICAgICAgc3QtPmFicl9kcmlmdDI9MDsKKyAgICAgIH0KKyAgICAgIAorICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9BQlI6CisgICAgICAoKihzcHhfaW50MzJfdCopcHRyKSA9IHN0LT5hYnJfZW5hYmxlZDsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfVkJSX1FVQUxJVFk6CisgICAgICBzdC0+dmJyX3F1YWxpdHkgPSAoKihmbG9hdCopcHRyKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9HRVRfVkJSX1FVQUxJVFk6CisgICAgICAoKihmbG9hdCopcHRyKSA9IHN0LT52YnJfcXVhbGl0eTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfUVVBTElUWToKKyAgICAgIHsKKyAgICAgICAgIGludCBxdWFsaXR5ID0gKCooc3B4X2ludDMyX3QqKXB0cik7CisgICAgICAgICBpZiAocXVhbGl0eSA8IDApCisgICAgICAgICAgICBxdWFsaXR5ID0gMDsKKyAgICAgICAgIGlmIChxdWFsaXR5ID4gMTApCisgICAgICAgICAgICBxdWFsaXR5ID0gMTA7CisgICAgICAgICBzdC0+c3VibW9kZVNlbGVjdCA9IHN0LT5zdWJtb2RlSUQgPSAoKGNvbnN0IFNwZWV4TkJNb2RlKikoc3QtPm1vZGUtPm1vZGUpKS0+cXVhbGl0eV9tYXBbcXVhbGl0eV07CisgICAgICB9CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfU0VUX0NPTVBMRVhJVFk6CisgICAgICBzdC0+Y29tcGxleGl0eSA9ICgqKHNweF9pbnQzMl90KilwdHIpOworICAgICAgaWYgKHN0LT5jb21wbGV4aXR5PDApCisgICAgICAgICBzdC0+Y29tcGxleGl0eT0wOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9DT01QTEVYSVRZOgorICAgICAgKCooc3B4X2ludDMyX3QqKXB0cikgPSBzdC0+Y29tcGxleGl0eTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfQklUUkFURToKKyAgICAgIHsKKyAgICAgICAgIHNweF9pbnQzMl90IGk9MTA7CisgICAgICAgICBzcHhfaW50MzJfdCByYXRlLCB0YXJnZXQ7CisgICAgICAgICB0YXJnZXQgPSAoKihzcHhfaW50MzJfdCopcHRyKTsKKyAgICAgICAgIHdoaWxlIChpPj0wKQorICAgICAgICAgeworICAgICAgICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX1NFVF9RVUFMSVRZLCAmaSk7CisgICAgICAgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdCwgU1BFRVhfR0VUX0JJVFJBVEUsICZyYXRlKTsKKyAgICAgICAgICAgIGlmIChyYXRlIDw9IHRhcmdldCkKKyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaS0tOworICAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9CSVRSQVRFOgorICAgICAgaWYgKHN0LT5zdWJtb2Rlc1tzdC0+c3VibW9kZUlEXSkKKyAgICAgICAgICgqKHNweF9pbnQzMl90KilwdHIpID0gc3QtPnNhbXBsaW5nX3JhdGUqU1VCTU9ERShiaXRzX3Blcl9mcmFtZSkvc3QtPmZyYW1lU2l6ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgICgqKHNweF9pbnQzMl90KilwdHIpID0gc3QtPnNhbXBsaW5nX3JhdGUqKE5CX1NVQk1PREVfQklUUysxKS9zdC0+ZnJhbWVTaXplOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1NFVF9TQU1QTElOR19SQVRFOgorICAgICAgc3QtPnNhbXBsaW5nX3JhdGUgPSAoKihzcHhfaW50MzJfdCopcHRyKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9HRVRfU0FNUExJTkdfUkFURToKKyAgICAgICgqKHNweF9pbnQzMl90KilwdHIpPXN0LT5zYW1wbGluZ19yYXRlOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1JFU0VUX1NUQVRFOgorICAgICAgeworICAgICAgICAgaW50IGk7CisgICAgICAgICBzdC0+Ym91bmRlZF9waXRjaCA9IDE7CisgICAgICAgICBzdC0+Zmlyc3QgPSAxOworICAgICAgICAgZm9yIChpPTA7aTxzdC0+bHBjU2l6ZTtpKyspCisgICAgICAgICAgICBzdC0+b2xkX2xzcFtpXT0oTV9QSSooKGZsb2F0KShpKzEpKSkvKHN0LT5scGNTaXplKzEpOworICAgICAgICAgZm9yIChpPTA7aTxzdC0+bHBjU2l6ZTtpKyspCisgICAgICAgICAgICBzdC0+bWVtX3N3W2ldPXN0LT5tZW1fc3dfd2hvbGVbaV09c3QtPm1lbV9zcFtpXT1zdC0+bWVtX2V4Y1tpXT0wOworICAgICAgICAgZm9yIChpPTA7aTxzdC0+ZnJhbWVTaXplK3N0LT5tYXhfcGl0Y2grMTtpKyspCisgICAgICAgICAgICBzdC0+ZXhjQnVmW2ldPXN0LT5zd0J1ZltpXT0wOworICAgICAgICAgZm9yIChpPTA7aTxzdC0+d2luZG93U2l6ZS1zdC0+ZnJhbWVTaXplO2krKykKKyAgICAgICAgICAgIHN0LT53aW5CdWZbaV09MDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfU1VCTU9ERV9FTkNPRElORzoKKyAgICAgIHN0LT5lbmNvZGVfc3VibW9kZSA9ICgqKHNweF9pbnQzMl90KilwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9TVUJNT0RFX0VOQ09ESU5HOgorICAgICAgKCooc3B4X2ludDMyX3QqKXB0cikgPSBzdC0+ZW5jb2RlX3N1Ym1vZGU7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfR0VUX0xPT0tBSEVBRDoKKyAgICAgICgqKHNweF9pbnQzMl90KilwdHIpPShzdC0+d2luZG93U2l6ZS1zdC0+ZnJhbWVTaXplKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfUExDX1RVTklORzoKKyAgICAgIHN0LT5wbGNfdHVuaW5nID0gKCooc3B4X2ludDMyX3QqKXB0cik7CisgICAgICBpZiAoc3QtPnBsY190dW5pbmc+MTAwKQorICAgICAgICAgc3QtPnBsY190dW5pbmc9MTAwOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9QTENfVFVOSU5HOgorICAgICAgKCooc3B4X2ludDMyX3QqKXB0cik9KHN0LT5wbGNfdHVuaW5nKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfVkJSX01BWF9CSVRSQVRFOgorICAgICAgc3QtPnZicl9tYXggPSAoKihzcHhfaW50MzJfdCopcHRyKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9HRVRfVkJSX01BWF9CSVRSQVRFOgorICAgICAgKCooc3B4X2ludDMyX3QqKXB0cikgPSBzdC0+dmJyX21heDsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfSElHSFBBU1M6CisgICAgICBzdC0+aGlnaHBhc3NfZW5hYmxlZCA9ICgqKHNweF9pbnQzMl90KilwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9ISUdIUEFTUzoKKyAgICAgICgqKHNweF9pbnQzMl90KilwdHIpID0gc3QtPmhpZ2hwYXNzX2VuYWJsZWQ7CisgICAgICBicmVhazsKKworICAgLyogVGhpcyBpcyBhbGwgaW50ZXJuYWwgc3R1ZmYgcGFzdCB0aGlzIHBvaW50ICovCisgICBjYXNlIFNQRUVYX0dFVF9QSV9HQUlOOgorICAgICAgeworICAgICAgICAgaW50IGk7CisgICAgICAgICBzcHhfd29yZDMyX3QgKmcgPSAoc3B4X3dvcmQzMl90KilwdHI7CisgICAgICAgICBmb3IgKGk9MDtpPHN0LT5uYlN1YmZyYW1lcztpKyspCisgICAgICAgICAgICBnW2ldPXN0LT5waV9nYWluW2ldOworICAgICAgfQorICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9FWEM6CisgICAgICB7CisgICAgICAgICBpbnQgaTsKKyAgICAgICAgIGZvciAoaT0wO2k8c3QtPm5iU3ViZnJhbWVzO2krKykKKyAgICAgICAgICAgICgoc3B4X3dvcmQxNl90KilwdHIpW2ldID0gY29tcHV0ZV9ybXMxNihzdC0+ZXhjK2kqc3QtPnN1YmZyYW1lU2l6ZSwgc3QtPnN1YmZyYW1lU2l6ZSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfR0VUX1JFTEFUSVZFX1FVQUxJVFk6CisgICAgICAoKihmbG9hdCopcHRyKT1zdC0+cmVsYXRpdmVfcXVhbGl0eTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfSU5OT1ZBVElPTl9TQVZFOgorICAgICAgc3QtPmlubm92X3Jtc19zYXZlID0gKHNweF93b3JkMTZfdCopcHRyOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1NFVF9XSURFQkFORDoKKyAgICAgIHN0LT5pc1dpZGViYW5kID0gKigoc3B4X2ludDMyX3QqKXB0cik7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfR0VUX1NUQUNLOgorICAgICAgKigoY2hhcioqKXB0cikgPSBzdC0+c3RhY2s7CisgICAgICBicmVhazsKKyAgIGRlZmF1bHQ6CisgICAgICBzcGVleF93YXJuaW5nX2ludCgiVW5rbm93biBuYl9jdGwgcmVxdWVzdDogIiwgcmVxdWVzdCk7CisgICAgICByZXR1cm4gLTE7CisgICB9CisgICByZXR1cm4gMDsKK30KKworaW50IG5iX2RlY29kZXJfY3RsKHZvaWQgKnN0YXRlLCBpbnQgcmVxdWVzdCwgdm9pZCAqcHRyKQoreworICAgRGVjU3RhdGUgKnN0OworICAgc3Q9KERlY1N0YXRlKilzdGF0ZTsKKyAgIHN3aXRjaChyZXF1ZXN0KQorICAgeworICAgY2FzZSBTUEVFWF9TRVRfTE9XX01PREU6CisgICBjYXNlIFNQRUVYX1NFVF9NT0RFOgorICAgICAgc3QtPnN1Ym1vZGVJRCA9ICgqKHNweF9pbnQzMl90KilwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9MT1dfTU9ERToKKyAgIGNhc2UgU1BFRVhfR0VUX01PREU6CisgICAgICAoKihzcHhfaW50MzJfdCopcHRyKSA9IHN0LT5zdWJtb2RlSUQ7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfU0VUX0VOSDoKKyAgICAgIHN0LT5scGNfZW5oX2VuYWJsZWQgPSAqKChzcHhfaW50MzJfdCopcHRyKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9HRVRfRU5IOgorICAgICAgKigoc3B4X2ludDMyX3QqKXB0cikgPSBzdC0+bHBjX2VuaF9lbmFibGVkOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9GUkFNRV9TSVpFOgorICAgICAgKCooc3B4X2ludDMyX3QqKXB0cikgPSBzdC0+ZnJhbWVTaXplOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9CSVRSQVRFOgorICAgICAgaWYgKHN0LT5zdWJtb2Rlc1tzdC0+c3VibW9kZUlEXSkKKyAgICAgICAgICgqKHNweF9pbnQzMl90KilwdHIpID0gc3QtPnNhbXBsaW5nX3JhdGUqU1VCTU9ERShiaXRzX3Blcl9mcmFtZSkvc3QtPmZyYW1lU2l6ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgICgqKHNweF9pbnQzMl90KilwdHIpID0gc3QtPnNhbXBsaW5nX3JhdGUqKE5CX1NVQk1PREVfQklUUysxKS9zdC0+ZnJhbWVTaXplOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1NFVF9TQU1QTElOR19SQVRFOgorICAgICAgc3QtPnNhbXBsaW5nX3JhdGUgPSAoKihzcHhfaW50MzJfdCopcHRyKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9HRVRfU0FNUExJTkdfUkFURToKKyAgICAgICgqKHNweF9pbnQzMl90KilwdHIpPXN0LT5zYW1wbGluZ19yYXRlOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1NFVF9IQU5ETEVSOgorICAgICAgeworICAgICAgICAgU3BlZXhDYWxsYmFjayAqYyA9IChTcGVleENhbGxiYWNrKilwdHI7CisgICAgICAgICBzdC0+c3BlZXhfY2FsbGJhY2tzW2MtPmNhbGxiYWNrX2lkXS5mdW5jPWMtPmZ1bmM7CisgICAgICAgICBzdC0+c3BlZXhfY2FsbGJhY2tzW2MtPmNhbGxiYWNrX2lkXS5kYXRhPWMtPmRhdGE7CisgICAgICAgICBzdC0+c3BlZXhfY2FsbGJhY2tzW2MtPmNhbGxiYWNrX2lkXS5jYWxsYmFja19pZD1jLT5jYWxsYmFja19pZDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfVVNFUl9IQU5ETEVSOgorICAgICAgeworICAgICAgICAgU3BlZXhDYWxsYmFjayAqYyA9IChTcGVleENhbGxiYWNrKilwdHI7CisgICAgICAgICBzdC0+dXNlcl9jYWxsYmFjay5mdW5jPWMtPmZ1bmM7CisgICAgICAgICBzdC0+dXNlcl9jYWxsYmFjay5kYXRhPWMtPmRhdGE7CisgICAgICAgICBzdC0+dXNlcl9jYWxsYmFjay5jYWxsYmFja19pZD1jLT5jYWxsYmFja19pZDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9SRVNFVF9TVEFURToKKyAgICAgIHsKKyAgICAgICAgIGludCBpOworICAgICAgICAgZm9yIChpPTA7aTxzdC0+bHBjU2l6ZTtpKyspCisgICAgICAgICAgICBzdC0+bWVtX3NwW2ldPTA7CisgICAgICAgICBmb3IgKGk9MDtpPHN0LT5mcmFtZVNpemUgKyBzdC0+bWF4X3BpdGNoICsgMTtpKyspCisgICAgICAgICAgICBzdC0+ZXhjQnVmW2ldPTA7CisgICAgICB9CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfU0VUX1NVQk1PREVfRU5DT0RJTkc6CisgICAgICBzdC0+ZW5jb2RlX3N1Ym1vZGUgPSAoKihzcHhfaW50MzJfdCopcHRyKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9HRVRfU1VCTU9ERV9FTkNPRElORzoKKyAgICAgICgqKHNweF9pbnQzMl90KilwdHIpID0gc3QtPmVuY29kZV9zdWJtb2RlOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9MT09LQUhFQUQ6CisgICAgICAoKihzcHhfaW50MzJfdCopcHRyKT1zdC0+c3ViZnJhbWVTaXplOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1NFVF9ISUdIUEFTUzoKKyAgICAgIHN0LT5oaWdocGFzc19lbmFibGVkID0gKCooc3B4X2ludDMyX3QqKXB0cik7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfR0VUX0hJR0hQQVNTOgorICAgICAgKCooc3B4X2ludDMyX3QqKXB0cikgPSBzdC0+aGlnaHBhc3NfZW5hYmxlZDsKKyAgICAgIGJyZWFrOworCisgICBjYXNlIFNQRUVYX0dFVF9QSV9HQUlOOgorICAgICAgeworICAgICAgICAgaW50IGk7CisgICAgICAgICBzcHhfd29yZDMyX3QgKmcgPSAoc3B4X3dvcmQzMl90KilwdHI7CisgICAgICAgICBmb3IgKGk9MDtpPHN0LT5uYlN1YmZyYW1lcztpKyspCisgICAgICAgICAgICBnW2ldPXN0LT5waV9nYWluW2ldOworICAgICAgfQorICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9FWEM6CisgICAgICB7CisgICAgICAgICBpbnQgaTsKKyAgICAgICAgIGZvciAoaT0wO2k8c3QtPm5iU3ViZnJhbWVzO2krKykKKyAgICAgICAgICAgICgoc3B4X3dvcmQxNl90KilwdHIpW2ldID0gY29tcHV0ZV9ybXMxNihzdC0+ZXhjK2kqc3QtPnN1YmZyYW1lU2l6ZSwgc3QtPnN1YmZyYW1lU2l6ZSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfR0VUX0RUWF9TVEFUVVM6CisgICAgICAqKChzcHhfaW50MzJfdCopcHRyKSA9IHN0LT5kdHhfZW5hYmxlZDsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfSU5OT1ZBVElPTl9TQVZFOgorICAgICAgc3QtPmlubm92X3NhdmUgPSAoc3B4X3dvcmQxNl90KilwdHI7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfU0VUX1dJREVCQU5EOgorICAgICAgc3QtPmlzV2lkZWJhbmQgPSAqKChzcHhfaW50MzJfdCopcHRyKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9HRVRfU1RBQ0s6CisgICAgICAqKChjaGFyKiopcHRyKSA9IHN0LT5zdGFjazsKKyAgICAgIGJyZWFrOworICAgZGVmYXVsdDoKKyAgICAgIHNwZWV4X3dhcm5pbmdfaW50KCJVbmtub3duIG5iX2N0bCByZXF1ZXN0OiAiLCByZXF1ZXN0KTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKyAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbmJfY2VscC5oIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvbmJfY2VscC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYmY3MTcKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9uYl9jZWxwLmgKQEAgLTAsMCArMSwyMDUgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMi0yMDA2IEplYW4tTWFyYyBWYWxpbiAqLworLyoqCisgICAgQGZpbGUgbmJfY2VscC5oCisgICAgQGJyaWVmIE5hcnJvd2JhbmQgQ0VMUCBlbmNvZGVyL2RlY29kZXIKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyovCisKKyNpZm5kZWYgTkJfQ0VMUF9ICisjZGVmaW5lIE5CX0NFTFBfSAorCisjaW5jbHVkZSAibW9kZXMuaCIKKyNpbmNsdWRlIDxzcGVleC9zcGVleF9iaXRzLmg+CisjaW5jbHVkZSA8c3BlZXgvc3BlZXhfY2FsbGJhY2tzLmg+CisjaW5jbHVkZSAidmJyLmgiCisjaW5jbHVkZSAiZmlsdGVycy5oIgorCisjaWZkZWYgVk9SQklTX1BTWUNITworI2luY2x1ZGUgInZvcmJpc19wc3kuaCIKKyNlbmRpZgorCisvKipTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBmdWxsIHN0YXRlIG9mIHRoZSBuYXJyb3diYW5kIGVuY29kZXIqLwordHlwZWRlZiBzdHJ1Y3QgRW5jU3RhdGUgeworICAgY29uc3QgU3BlZXhNb2RlICptb2RlOyAgICAgICAgLyoqPCBNb2RlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN0YXRlICovCisgICBpbnQgICAgZmlyc3Q7ICAgICAgICAgICAgICAgICAvKio8IElzIHRoaXMgdGhlIGZpcnN0IGZyYW1lPyAqLworICAgaW50ICAgIGZyYW1lU2l6ZTsgICAgICAgICAgICAgLyoqPCBTaXplIG9mIGZyYW1lcyAqLworICAgaW50ICAgIHN1YmZyYW1lU2l6ZTsgICAgICAgICAgLyoqPCBTaXplIG9mIHN1Yi1mcmFtZXMgKi8KKyAgIGludCAgICBuYlN1YmZyYW1lczsgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIHN1Yi1mcmFtZXMgKi8KKyAgIGludCAgICB3aW5kb3dTaXplOyAgICAgICAgICAgIC8qKjwgQW5hbHlzaXMgKExQQykgd2luZG93IGxlbmd0aCAqLworICAgaW50ICAgIGxwY1NpemU7ICAgICAgICAgICAgICAgLyoqPCBMUEMgb3JkZXIgKi8KKyAgIGludCAgICBtaW5fcGl0Y2g7ICAgICAgICAgICAgIC8qKjwgTWluaW11bSBwaXRjaCB2YWx1ZSBhbGxvd2VkICovCisgICBpbnQgICAgbWF4X3BpdGNoOyAgICAgICAgICAgICAvKio8IE1heGltdW0gcGl0Y2ggdmFsdWUgYWxsb3dlZCAqLworCisgICBzcHhfd29yZDMyX3QgY3VtdWxfZ2FpbjsgICAgICAvKio8IFByb2R1Y3Qgb2YgcHJldmlvdXNseSB1c2VkIHBpdGNoIGdhaW5zIChRMTApICovCisgICBpbnQgICAgYm91bmRlZF9waXRjaDsgICAgICAgICAvKio8IE5leHQgZnJhbWUgc2hvdWxkIG5vdCByZWx5IG9uIHByZXZpb3VzIGZyYW1lcyBmb3IgcGl0Y2ggKi8KKyAgIGludCAgICBvbF9waXRjaDsgICAgICAgICAgICAgIC8qKjwgT3Blbi1sb29wIHBpdGNoICovCisgICBpbnQgICAgb2xfdm9pY2VkOyAgICAgICAgICAgICAvKio8IE9wZW4tbG9vcCB2b2ljZWQvbm9uLXZvaWNlZCBkZWNpc2lvbiAqLworICAgaW50ICAgKnBpdGNoOworCisjaWZkZWYgRVBJQ180OEsKKyAgIGludCAgICBsYnJfNDhrOworI2VuZGlmCisKKyNpZmRlZiBWT1JCSVNfUFNZQ0hPCisgICBWb3JiaXNQc3kgKnBzeTsKKyAgIGZsb2F0ICpwc3lfd2luZG93OworICAgZmxvYXQgKmN1cnZlOworICAgZmxvYXQgKm9sZF9jdXJ2ZTsKKyNlbmRpZgorCisgICBzcHhfd29yZDE2X3QgIGdhbW1hMTsgICAgICAgICAvKio8IFBlcmNlcHR1YWwgZmlsdGVyOiBBKHovZ2FtbWExKSAqLworICAgc3B4X3dvcmQxNl90ICBnYW1tYTI7ICAgICAgICAgLyoqPCBQZXJjZXB0dWFsIGZpbHRlcjogQSh6L2dhbW1hMikgKi8KKyAgIGZsb2F0ICBsYWdfZmFjdG9yOyAgICAgICAgICAgIC8qKjwgTGFnIHdpbmRvd2luZyBHYXVzc2lhbiB3aWR0aCAqLworICAgc3B4X3dvcmQxNl90ICBscGNfZmxvb3I7ICAgICAgLyoqPCBOb2lzZSBmbG9vciBtdWx0aXBsaWVyIGZvciBBWzBdIGluIExQQyBhbmFseXNpcyovCisgICBjaGFyICAqc3RhY2s7ICAgICAgICAgICAgICAgICAvKio8IFBzZXVkby1zdGFjayBhbGxvY2F0aW9uIGZvciB0ZW1wb3JhcnkgbWVtb3J5ICovCisgICBzcHhfd29yZDE2X3QgKndpbkJ1ZjsgICAgICAgICAvKio8IElucHV0IGJ1ZmZlciAob3JpZ2luYWwgc2lnbmFsKSAqLworICAgc3B4X3dvcmQxNl90ICpleGNCdWY7ICAgICAgICAgLyoqPCBFeGNpdGF0aW9uIGJ1ZmZlciAqLworICAgc3B4X3dvcmQxNl90ICpleGM7ICAgICAgICAgICAgLyoqPCBTdGFydCBvZiBleGNpdGF0aW9uIGZyYW1lICovCisgICBzcHhfd29yZDE2X3QgKnN3QnVmOyAgICAgICAgICAvKio8IFdlaWdodGVkIHNpZ25hbCBidWZmZXIgKi8KKyAgIHNweF93b3JkMTZfdCAqc3c7ICAgICAgICAgICAgIC8qKjwgU3RhcnQgb2Ygd2VpZ2h0ZWQgc2lnbmFsIGZyYW1lICovCisgICBjb25zdCBzcHhfd29yZDE2X3QgKndpbmRvdzsgICAvKio8IFRlbXBvcmFyeSAoSGFubmluZykgd2luZG93ICovCisgICBzcHhfd29yZDE2X3QgKmxhZ1dpbmRvdzsgICAgICAvKio8IFdpbmRvdyBhcHBsaWVkIHRvIGF1dG8tY29ycmVsYXRpb24gKi8KKyAgIHNweF9sc3BfdCAqb2xkX2xzcDsgICAgICAgICAgIC8qKjwgTFNQcyBmb3IgcHJldmlvdXMgZnJhbWUgKi8KKyAgIHNweF9sc3BfdCAqb2xkX3Fsc3A7ICAgICAgICAgIC8qKjwgUXVhbnRpemVkIExTUHMgZm9yIHByZXZpb3VzIGZyYW1lICovCisgICBzcHhfbWVtX3QgKm1lbV9zcDsgICAgICAgICAgICAvKio8IEZpbHRlciBtZW1vcnkgZm9yIHNpZ25hbCBzeW50aGVzaXMgKi8KKyAgIHNweF9tZW1fdCAqbWVtX3N3OyAgICAgICAgICAgIC8qKjwgRmlsdGVyIG1lbW9yeSBmb3IgcGVyY2VwdHVhbGx5LXdlaWdodGVkIHNpZ25hbCAqLworICAgc3B4X21lbV90ICptZW1fc3dfd2hvbGU7ICAgICAgLyoqPCBGaWx0ZXIgbWVtb3J5IGZvciBwZXJjZXB0dWFsbHktd2VpZ2h0ZWQgc2lnbmFsICh3aG9sZSBmcmFtZSkqLworICAgc3B4X21lbV90ICptZW1fZXhjOyAgICAgICAgICAgLyoqPCBGaWx0ZXIgbWVtb3J5IGZvciBleGNpdGF0aW9uICh3aG9sZSBmcmFtZSkgKi8KKyAgIHNweF9tZW1fdCAqbWVtX2V4YzI7ICAgICAgICAgIC8qKjwgRmlsdGVyIG1lbW9yeSBmb3IgZXhjaXRhdGlvbiAod2hvbGUgZnJhbWUpICovCisgICBzcHhfbWVtX3QgbWVtX2hwWzJdOyAgICAgICAgICAvKio8IEhpZ2gtcGFzcyBmaWx0ZXIgbWVtb3J5ICovCisgICBzcHhfd29yZDMyX3QgKnBpX2dhaW47ICAgICAgICAvKio8IEdhaW4gb2YgTFBDIGZpbHRlciBhdCB0aGV0YT1waSAoZmUvMikgKi8KKyAgIHNweF93b3JkMTZfdCAqaW5ub3Zfcm1zX3NhdmU7IC8qKjwgSWYgbm9uLU5VTEwsIGlubm92YXRpb24gUk1TIGlzIGNvcGllZCBoZXJlICovCisgICAgICAgICAKKyAgIFZCUlN0YXRlICp2YnI7ICAgICAgICAgICAgICAgIC8qKjwgU3RhdGUgb2YgdGhlIFZCUiBkYXRhICovCisgICBmbG9hdCAgdmJyX3F1YWxpdHk7ICAgICAgICAgICAvKio8IFF1YWxpdHkgc2V0dGluZyBmb3IgVkJSIGVuY29kaW5nICovCisgICBmbG9hdCAgcmVsYXRpdmVfcXVhbGl0eTsgICAgICAvKio8IFJlbGF0aXZlIHF1YWxpdHkgdGhhdCB3aWxsIGJlIG5lZWRlZCBieSBWQlIgKi8KKyAgIHNweF9pbnQzMl90IHZicl9lbmFibGVkOyAgICAgIC8qKjwgMSBmb3IgZW5hYmxpbmcgVkJSLCAwIG90aGVyd2lzZSAqLworICAgc3B4X2ludDMyX3QgdmJyX21heDsgICAgICAgICAgLyoqPCBNYXggYml0LXJhdGUgYWxsb3dlZCBpbiBWQlIgbW9kZSAqLworICAgaW50ICAgIHZhZF9lbmFibGVkOyAgICAgICAgICAgLyoqPCAxIGZvciBlbmFibGluZyBWQUQsIDAgb3RoZXJ3aXNlICovCisgICBpbnQgICAgZHR4X2VuYWJsZWQ7ICAgICAgICAgICAvKio8IDEgZm9yIGVuYWJsaW5nIERUWCwgMCBvdGhlcndpc2UgKi8KKyAgIGludCAgICBkdHhfY291bnQ7ICAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNvbnNlY3V0aXZlIERUWCBmcmFtZXMgKi8KKyAgIHNweF9pbnQzMl90IGFicl9lbmFibGVkOyAgICAgIC8qKjwgQUJSIHNldHRpbmcgKGluIGJwcyksIDAgaWYgb2ZmICovCisgICBmbG9hdCAgYWJyX2RyaWZ0OworICAgZmxvYXQgIGFicl9kcmlmdDI7CisgICBmbG9hdCAgYWJyX2NvdW50OworICAgaW50ICAgIGNvbXBsZXhpdHk7ICAgICAgICAgICAgLyoqPCBDb21wbGV4aXR5IHNldHRpbmcgKDAtMTAgZnJvbSBsZWFzdCBjb21wbGV4IHRvIG1vc3QgY29tcGxleCkgKi8KKyAgIHNweF9pbnQzMl90IHNhbXBsaW5nX3JhdGU7CisgICBpbnQgICAgcGxjX3R1bmluZzsKKyAgIGludCAgICBlbmNvZGVfc3VibW9kZTsKKyAgIGNvbnN0IFNwZWV4U3VibW9kZSAqIGNvbnN0ICpzdWJtb2RlczsgLyoqPCBTdWItbW9kZSBkYXRhICovCisgICBpbnQgICAgc3VibW9kZUlEOyAgICAgICAgICAgICAvKio8IEFjdGl2YXRlZCBzdWItbW9kZSAqLworICAgaW50ICAgIHN1Ym1vZGVTZWxlY3Q7ICAgICAgICAgLyoqPCBNb2RlIGNob3NlbiBieSB0aGUgdXNlciAobWF5IGRpZmZlciBmcm9tIHN1Ym1vZGVJRCBpZiBWQUQgaXMgb24pICovCisgICBpbnQgICAgaXNXaWRlYmFuZDsgICAgICAgICAgICAvKio8IElzIHRoaXMgdXNlZCBhcyBwYXJ0IG9mIHRoZSBlbWJlZGRlZCB3aWRlYmFuZCBjb2RlYyAqLworICAgaW50ICAgIGhpZ2hwYXNzX2VuYWJsZWQ7ICAgICAgICAvKio8IElzIHRoZSBpbnB1dCBmaWx0ZXIgZW5hYmxlZCAqLworfSBFbmNTdGF0ZTsKKworLyoqU3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgZnVsbCBzdGF0ZSBvZiB0aGUgbmFycm93YmFuZCBkZWNvZGVyKi8KK3R5cGVkZWYgc3RydWN0IERlY1N0YXRlIHsKKyAgIGNvbnN0IFNwZWV4TW9kZSAqbW9kZTsgICAgICAgLyoqPCBNb2RlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN0YXRlICovCisgICBpbnQgICAgZmlyc3Q7ICAgICAgICAgICAgICAgIC8qKjwgSXMgdGhpcyB0aGUgZmlyc3QgZnJhbWU/ICovCisgICBpbnQgICAgY291bnRfbG9zdDsgICAgICAgICAgIC8qKjwgV2FzIHRoZSBsYXN0IGZyYW1lIGxvc3Q/ICovCisgICBpbnQgICAgZnJhbWVTaXplOyAgICAgICAgICAgIC8qKjwgU2l6ZSBvZiBmcmFtZXMgKi8KKyAgIGludCAgICBzdWJmcmFtZVNpemU7ICAgICAgICAgLyoqPCBTaXplIG9mIHN1Yi1mcmFtZXMgKi8KKyAgIGludCAgICBuYlN1YmZyYW1lczsgICAgICAgICAgLyoqPCBOdW1iZXIgb2Ygc3ViLWZyYW1lcyAqLworICAgaW50ICAgIGxwY1NpemU7ICAgICAgICAgICAgICAvKio8IExQQyBvcmRlciAqLworICAgaW50ICAgIG1pbl9waXRjaDsgICAgICAgICAgICAvKio8IE1pbmltdW0gcGl0Y2ggdmFsdWUgYWxsb3dlZCAqLworICAgaW50ICAgIG1heF9waXRjaDsgICAgICAgICAgICAvKio8IE1heGltdW0gcGl0Y2ggdmFsdWUgYWxsb3dlZCAqLworICAgc3B4X2ludDMyX3Qgc2FtcGxpbmdfcmF0ZTsKKworI2lmZGVmIEVQSUNfNDhLCisgICBpbnQgICAgbGJyXzQ4azsKKyNlbmRpZgorCisgICBzcHhfd29yZDE2X3QgIGxhc3Rfb2xfZ2FpbjsgIC8qKjwgT3Blbi1sb29wIGdhaW4gZm9yIHByZXZpb3VzIGZyYW1lICovCisKKyAgIGNoYXIgICpzdGFjazsgICAgICAgICAgICAgICAgLyoqPCBQc2V1ZG8tc3RhY2sgYWxsb2NhdGlvbiBmb3IgdGVtcG9yYXJ5IG1lbW9yeSAqLworICAgc3B4X3dvcmQxNl90ICpleGNCdWY7ICAgICAgICAvKio8IEV4Y2l0YXRpb24gYnVmZmVyICovCisgICBzcHhfd29yZDE2X3QgKmV4YzsgICAgICAgICAgIC8qKjwgU3RhcnQgb2YgZXhjaXRhdGlvbiBmcmFtZSAqLworICAgc3B4X2xzcF90ICpvbGRfcWxzcDsgICAgICAgICAvKio8IFF1YW50aXplZCBMU1BzIGZvciBwcmV2aW91cyBmcmFtZSAqLworICAgc3B4X2NvZWZfdCAqaW50ZXJwX3FscGM7ICAgICAvKio8IEludGVycG9sYXRlZCBxdWFudGl6ZWQgTFBDcyAqLworICAgc3B4X21lbV90ICptZW1fc3A7ICAgICAgICAgICAvKio8IEZpbHRlciBtZW1vcnkgZm9yIHN5bnRoZXNpcyBzaWduYWwgKi8KKyAgIHNweF9tZW1fdCBtZW1faHBbMl07ICAgICAgICAgLyoqPCBIaWdoLXBhc3MgZmlsdGVyIG1lbW9yeSAqLworICAgc3B4X3dvcmQzMl90ICpwaV9nYWluOyAgICAgICAvKio8IEdhaW4gb2YgTFBDIGZpbHRlciBhdCB0aGV0YT1waSAoZmUvMikgKi8KKyAgIHNweF93b3JkMTZfdCAqaW5ub3Zfc2F2ZTsgICAgICAgLyoqIElmIG5vbi1OVUxMLCBpbm5vdmF0aW9uIGlzIGNvcGllZCBoZXJlICovCisgICAKKyAgIC8qIFRoaXMgaXMgdXNlZCBpbiBwYWNrZXQgbG9zcyBjb25jZWFsbWVudCAqLworICAgaW50ICAgIGxhc3RfcGl0Y2g7ICAgICAgICAgICAvKio8IFBpdGNoIG9mIGxhc3QgY29ycmVjdGx5IGRlY29kZWQgZnJhbWUgKi8KKyAgIHNweF93b3JkMTZfdCAgbGFzdF9waXRjaF9nYWluOyAvKio8IFBpdGNoIGdhaW4gb2YgbGFzdCBjb3JyZWN0bHkgZGVjb2RlZCBmcmFtZSAqLworICAgc3B4X3dvcmQxNl90ICBwaXRjaF9nYWluX2J1ZlszXTsgLyoqPCBQaXRjaCBnYWluIG9mIGxhc3QgZGVjb2RlZCBmcmFtZXMgKi8KKyAgIGludCAgICBwaXRjaF9nYWluX2J1Zl9pZHg7ICAgLyoqPCBUYWlsIG9mIHRoZSBidWZmZXIgKi8KKyAgIHNweF9pbnQzMl90IHNlZWQ7ICAgICAgICAgICAgLyoqIFNlZWQgdXNlZCBmb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uICovCisgICAKKyAgIGludCAgICBlbmNvZGVfc3VibW9kZTsKKyAgIGNvbnN0IFNwZWV4U3VibW9kZSAqIGNvbnN0ICpzdWJtb2RlczsgLyoqPCBTdWItbW9kZSBkYXRhICovCisgICBpbnQgICAgc3VibW9kZUlEOyAgICAgICAgICAgIC8qKjwgQWN0aXZhdGVkIHN1Yi1tb2RlICovCisgICBpbnQgICAgbHBjX2VuaF9lbmFibGVkOyAgICAgIC8qKjwgMSB3aGVuIExQQyBlbmhhbmNlciBpcyBvbiwgMCBvdGhlcndpc2UgKi8KKyAgIFNwZWV4Q2FsbGJhY2sgc3BlZXhfY2FsbGJhY2tzW1NQRUVYX01BWF9DQUxMQkFDS1NdOworCisgICBTcGVleENhbGxiYWNrIHVzZXJfY2FsbGJhY2s7CisKKyAgIC8qVm9jb2RlciBkYXRhKi8KKyAgIHNweF93b3JkMTZfdCAgdm9jX20xOworICAgc3B4X3dvcmQzMl90ICB2b2NfbTI7CisgICBmbG9hdCAgdm9jX21lYW47CisgICBpbnQgICAgdm9jX29mZnNldDsKKworICAgaW50ICAgIGR0eF9lbmFibGVkOworICAgaW50ICAgIGlzV2lkZWJhbmQ7ICAgICAgICAgICAgLyoqPCBJcyB0aGlzIHVzZWQgYXMgcGFydCBvZiB0aGUgZW1iZWRkZWQgd2lkZWJhbmQgY29kZWMgKi8KKyAgIGludCAgICBoaWdocGFzc19lbmFibGVkOyAgICAgICAgLyoqPCBJcyB0aGUgaW5wdXQgZmlsdGVyIGVuYWJsZWQgKi8KK30gRGVjU3RhdGU7CisKKy8qKiBJbml0aWFsaXplcyBlbmNvZGVyIHN0YXRlKi8KK3ZvaWQgKm5iX2VuY29kZXJfaW5pdChjb25zdCBTcGVleE1vZGUgKm0pOworCisvKiogRGUtYWxsb2NhdGVzIGVuY29kZXIgc3RhdGUgcmVzb3VyY2VzKi8KK3ZvaWQgbmJfZW5jb2Rlcl9kZXN0cm95KHZvaWQgKnN0YXRlKTsKKworLyoqIEVuY29kZXMgb25lIGZyYW1lKi8KK2ludCBuYl9lbmNvZGUodm9pZCAqc3RhdGUsIHZvaWQgKmluLCBTcGVleEJpdHMgKmJpdHMpOworCisKKy8qKiBJbml0aWFsaXplcyBkZWNvZGVyIHN0YXRlKi8KK3ZvaWQgKm5iX2RlY29kZXJfaW5pdChjb25zdCBTcGVleE1vZGUgKm0pOworCisvKiogRGUtYWxsb2NhdGVzIGRlY29kZXIgc3RhdGUgcmVzb3VyY2VzKi8KK3ZvaWQgbmJfZGVjb2Rlcl9kZXN0cm95KHZvaWQgKnN0YXRlKTsKKworLyoqIERlY29kZXMgb25lIGZyYW1lKi8KK2ludCBuYl9kZWNvZGUodm9pZCAqc3RhdGUsIFNwZWV4Qml0cyAqYml0cywgdm9pZCAqb3V0KTsKKworLyoqIGlvY3RsLWxpa2UgZnVuY3Rpb24gZm9yIGNvbnRyb2xsaW5nIGEgbmFycm93YmFuZCBlbmNvZGVyICovCitpbnQgbmJfZW5jb2Rlcl9jdGwodm9pZCAqc3RhdGUsIGludCByZXF1ZXN0LCB2b2lkICpwdHIpOworCisvKiogaW9jdGwtbGlrZSBmdW5jdGlvbiBmb3IgY29udHJvbGxpbmcgYSBuYXJyb3diYW5kIGRlY29kZXIgKi8KK2ludCBuYl9kZWNvZGVyX2N0bCh2b2lkICpzdGF0ZSwgaW50IHJlcXVlc3QsIHZvaWQgKnB0cik7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9wcmVwcm9jZXNzLmMgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9wcmVwcm9jZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVjYWY0YgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3ByZXByb2Nlc3MuYwpAQCAtMCwwICsxLDExNzIgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMyBFcGljIEdhbWVzICh3cml0dGVuIGJ5IEplYW4tTWFyYyBWYWxpbikKKyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVwaWMgR2FtZXMgCisgICAKKyAgIEZpbGU6IHByZXByb2Nlc3MuYworICAgUHJlcHJvY2Vzc29yIHdpdGggZGVub2lzaW5nIGJhc2VkIG9uIHRoZSBhbGdvcml0aG0gYnkgRXBocmFpbSBhbmQgTWFsYWgKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgICBtZXQ6CisKKyAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICAgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICAgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAgIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgICBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworCisvKgorICAgUmVjb21tZW5kZWQgcGFwZXJzOgorICAgCisgICBZLiBFcGhyYWltIGFuZCBELiBNYWxhaCwgIlNwZWVjaCBlbmhhbmNlbWVudCB1c2luZyBtaW5pbXVtIG1lYW4tc3F1YXJlIGVycm9yCisgICBzaG9ydC10aW1lIHNwZWN0cmFsIGFtcGxpdHVkZSBlc3RpbWF0b3IiLiBJRUVFIFRyYW5zYWN0aW9ucyBvbiBBY291c3RpY3MsIAorICAgU3BlZWNoIGFuZCBTaWduYWwgUHJvY2Vzc2luZywgdm9sLiBBU1NQLTMyLCBuby4gNiwgcHAuIDExMDktMTEyMSwgMTk4NC4KKyAgIAorICAgWS4gRXBocmFpbSBhbmQgRC4gTWFsYWgsICJTcGVlY2ggZW5oYW5jZW1lbnQgdXNpbmcgbWluaW11bSBtZWFuLXNxdWFyZSBlcnJvcgorICAgbG9nLXNwZWN0cmFsIGFtcGxpdHVkZSBlc3RpbWF0b3IiLiBJRUVFIFRyYW5zYWN0aW9ucyBvbiBBY291c3RpY3MsIFNwZWVjaCBhbmQgCisgICBTaWduYWwgUHJvY2Vzc2luZywgdm9sLiBBU1NQLTMzLCBuby4gMiwgcHAuIDQ0My00NDUsIDE5ODUuCisgICAKKyAgIEkuIENvaGVuIGFuZCBCLiBCZXJkdWdvLCAiU3BlZWNoIGVuaGFuY2VtZW50IGZvciBub24tc3RhdGlvbmFyeSBub2lzZSBlbnZpcm9ubWVudHMiLgorICAgU2lnbmFsIFByb2Nlc3NpbmcsIHZvbC4gODEsIG5vLiAyLCBwcC4gMjQwMy0yNDE4LCAyMDAxLgorCisgICBTdGVmYW4gR3VzdGFmc3NvbiwgUmFpbmVyIE1hcnRpbiwgUGV0ZXIgSmF4LCBhbmQgUGV0ZXIgVmFyeS4gIkEgcHN5Y2hvYWNvdXN0aWMgCisgICBhcHByb2FjaCB0byBjb21iaW5lZCBhY291c3RpYyBlY2hvIGNhbmNlbGxhdGlvbiBhbmQgbm9pc2UgcmVkdWN0aW9uIi4gSUVFRSAKKyAgIFRyYW5zYWN0aW9ucyBvbiBTcGVlY2ggYW5kIEF1ZGlvIFByb2Nlc3NpbmcsIDIwMDIuCisgICAKKyAgIEouLU0uIFZhbGluLCBKLiBSb3VhdCwgYW5kIEYuIE1pY2hhdWQsICJNaWNyb3Bob25lIGFycmF5IHBvc3QtZmlsdGVyIGZvciBzZXBhcmF0aW9uCisgICBvZiBzaW11bHRhbmVvdXMgbm9uLXN0YXRpb25hcnkgc291cmNlcyIuIEluIFByb2NlZWRpbmdzIElFRUUgSW50ZXJuYXRpb25hbCAKKyAgIENvbmZlcmVuY2Ugb24gQWNvdXN0aWNzLCBTcGVlY2gsIGFuZCBTaWduYWwgUHJvY2Vzc2luZywgMjAwNC4KKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlICJzcGVleC9zcGVleF9wcmVwcm9jZXNzLmgiCisjaW5jbHVkZSAic3BlZXgvc3BlZXhfZWNoby5oIgorI2luY2x1ZGUgIm1pc2MuaCIKKyNpbmNsdWRlICJmZnR3cmFwLmgiCisjaW5jbHVkZSAiZmlsdGVyYmFuay5oIgorI2luY2x1ZGUgIm1hdGhfYXBwcm94LmgiCisKKyNpZm5kZWYgTV9QSQorI2RlZmluZSBNX1BJIDMuMTQxNTkyNjMKKyNlbmRpZgorCisjZGVmaW5lIExPVURORVNTX0VYUCA1LmYKKyNkZWZpbmUgQU1QX1NDQUxFIC4wMDFmCisjZGVmaW5lIEFNUF9TQ0FMRV8xIDEwMDAuZgorICAgICAgCisjZGVmaW5lIE5CX0JBTkRTIDI0CisKKyNkZWZpbmUgU1BFRUNIX1BST0JfU1RBUlRfREVGQVVMVCAgICAgICBRQ09OU1QxNigwLjM1ZiwxNSkKKyNkZWZpbmUgU1BFRUNIX1BST0JfQ09OVElOVUVfREVGQVVMVCAgICBRQ09OU1QxNigwLjIwZiwxNSkKKyNkZWZpbmUgTk9JU0VfU1VQUFJFU1NfREVGQVVMVCAgICAgICAtMTUKKyNkZWZpbmUgRUNIT19TVVBQUkVTU19ERUZBVUxUICAgICAgICAtNDAKKyNkZWZpbmUgRUNIT19TVVBQUkVTU19BQ1RJVkVfREVGQVVMVCAtMTUKKworI2lmbmRlZiBOVUxMCisjZGVmaW5lIE5VTEwgMAorI2VuZGlmCisKKyNkZWZpbmUgU1FSKHgpICgoeCkqKHgpKQorI2RlZmluZSBTUVIxNih4KSAoTVVMVDE2XzE2KCh4KSwoeCkpKQorI2RlZmluZSBTUVIxNl9RMTUoeCkgKE1VTFQxNl8xNl9RMTUoKHgpLCh4KSkpCisKKyNpZmRlZiBGSVhFRF9QT0lOVAorc3RhdGljIGlubGluZSBzcHhfd29yZDE2X3QgRElWMzJfMTZfUTgoc3B4X3dvcmQzMl90IGEsIHNweF93b3JkMzJfdCBiKQoreworICAgaWYgKFNIUjMyKGEsNykgPj0gYikKKyAgIHsKKyAgICAgIHJldHVybiAzMjc2NzsKKyAgIH0gZWxzZSB7CisgICAgICBpZiAoYj49UUNPTlNUMzIoMSwyMykpCisgICAgICB7CisgICAgICAgICBhID0gU0hSMzIoYSw4KTsKKyAgICAgICAgIGIgPSBTSFIzMihiLDgpOworICAgICAgfQorICAgICAgaWYgKGI+PVFDT05TVDMyKDEsMTkpKQorICAgICAgeworICAgICAgICAgYSA9IFNIUjMyKGEsNCk7CisgICAgICAgICBiID0gU0hSMzIoYiw0KTsKKyAgICAgIH0KKyAgICAgIGlmIChiPj1RQ09OU1QzMigxLDE1KSkKKyAgICAgIHsKKyAgICAgICAgIGEgPSBTSFIzMihhLDQpOworICAgICAgICAgYiA9IFNIUjMyKGIsNCk7CisgICAgICB9CisgICAgICBhID0gU0hMMzIoYSw4KTsKKyAgICAgIHJldHVybiBQRElWMzJfMTYoYSxiKTsKKyAgIH0KKyAgIAorfQorc3RhdGljIGlubGluZSBzcHhfd29yZDE2X3QgRElWMzJfMTZfUTE1KHNweF93b3JkMzJfdCBhLCBzcHhfd29yZDMyX3QgYikKK3sKKyAgIGlmIChTSFIzMihhLDE1KSA+PSBiKQorICAgeworICAgICAgcmV0dXJuIDMyNzY3OworICAgfSBlbHNlIHsKKyAgICAgIGlmIChiPj1RQ09OU1QzMigxLDIzKSkKKyAgICAgIHsKKyAgICAgICAgIGEgPSBTSFIzMihhLDgpOworICAgICAgICAgYiA9IFNIUjMyKGIsOCk7CisgICAgICB9CisgICAgICBpZiAoYj49UUNPTlNUMzIoMSwxOSkpCisgICAgICB7CisgICAgICAgICBhID0gU0hSMzIoYSw0KTsKKyAgICAgICAgIGIgPSBTSFIzMihiLDQpOworICAgICAgfQorICAgICAgaWYgKGI+PVFDT05TVDMyKDEsMTUpKQorICAgICAgeworICAgICAgICAgYSA9IFNIUjMyKGEsNCk7CisgICAgICAgICBiID0gU0hSMzIoYiw0KTsKKyAgICAgIH0KKyAgICAgIGEgPSBTSEwzMihhLDE1KS1hOworICAgICAgcmV0dXJuIERJVjMyXzE2KGEsYik7CisgICB9Cit9CisjZGVmaW5lIFNOUl9TQ0FMSU5HIDI1Ni5mCisjZGVmaW5lIFNOUl9TQ0FMSU5HXzEgMC4wMDM5MDYyZgorI2RlZmluZSBTTlJfU0hJRlQgOAorCisjZGVmaW5lIEZSQUNfU0NBTElORyAzMjc2Ny5mCisjZGVmaW5lIEZSQUNfU0NBTElOR18xIDMuMDUxOGUtMDUKKyNkZWZpbmUgRlJBQ19TSElGVCAxCisKKyNkZWZpbmUgRVhQSU5fU0NBTElORyAyMDQ4LmYKKyNkZWZpbmUgRVhQSU5fU0NBTElOR18xIDAuMDAwNDg4MjhmCisjZGVmaW5lIEVYUElOX1NISUZUIDExCisjZGVmaW5lIEVYUE9VVF9TQ0FMSU5HXzEgMS41MjU5ZS0wNQorCisjZGVmaW5lIE5PSVNFX1NISUZUIDcKKworI2Vsc2UKKworI2RlZmluZSBESVYzMl8xNl9ROChhLGIpICgoYSkvKGIpKQorI2RlZmluZSBESVYzMl8xNl9RMTUoYSxiKSAoKGEpLyhiKSkKKyNkZWZpbmUgU05SX1NDQUxJTkcgMS5mCisjZGVmaW5lIFNOUl9TQ0FMSU5HXzEgMS5mCisjZGVmaW5lIFNOUl9TSElGVCAwCisjZGVmaW5lIEZSQUNfU0NBTElORyAxLmYKKyNkZWZpbmUgRlJBQ19TQ0FMSU5HXzEgMS5mCisjZGVmaW5lIEZSQUNfU0hJRlQgMAorI2RlZmluZSBOT0lTRV9TSElGVCAwCisKKyNkZWZpbmUgRVhQSU5fU0NBTElORyAxLmYKKyNkZWZpbmUgRVhQSU5fU0NBTElOR18xIDEuZgorI2RlZmluZSBFWFBPVVRfU0NBTElOR18xIDEuZgorCisjZW5kaWYKKworLyoqIFNwZWV4IHByZS1wcm9jZXNzb3Igc3RhdGUuICovCitzdHJ1Y3QgU3BlZXhQcmVwcm9jZXNzU3RhdGVfIHsKKyAgIC8qIEJhc2ljIGluZm8gKi8KKyAgIGludCAgICBmcmFtZV9zaXplOyAgICAgICAgLyoqPCBOdW1iZXIgb2Ygc2FtcGxlcyBwcm9jZXNzZWQgZWFjaCB0aW1lICovCisgICBpbnQgICAgcHNfc2l6ZTsgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIHBvaW50cyBpbiB0aGUgcG93ZXIgc3BlY3RydW0gKi8KKyAgIGludCAgICBzYW1wbGluZ19yYXRlOyAgICAgLyoqPCBTYW1wbGluZyByYXRlIG9mIHRoZSBpbnB1dC9vdXRwdXQgKi8KKyAgIGludCAgICBuYmFuZHM7CisgICBGaWx0ZXJCYW5rICpiYW5rOworICAgCisgICAvKiBQYXJhbWV0ZXJzICovCisgICBpbnQgICAgZGVub2lzZV9lbmFibGVkOworICAgaW50ICAgIHZhZF9lbmFibGVkOworICAgaW50ICAgIGRlcmV2ZXJiX2VuYWJsZWQ7CisgICBzcHhfd29yZDE2X3QgIHJldmVyYl9kZWNheTsKKyAgIHNweF93b3JkMTZfdCAgcmV2ZXJiX2xldmVsOworICAgc3B4X3dvcmQxNl90IHNwZWVjaF9wcm9iX3N0YXJ0OworICAgc3B4X3dvcmQxNl90IHNwZWVjaF9wcm9iX2NvbnRpbnVlOworICAgaW50ICAgIG5vaXNlX3N1cHByZXNzOworICAgaW50ICAgIGVjaG9fc3VwcHJlc3M7CisgICBpbnQgICAgZWNob19zdXBwcmVzc19hY3RpdmU7CisgICBTcGVleEVjaG9TdGF0ZSAqZWNob19zdGF0ZTsKKyAgIAorICAgLyogRFNQLXJlbGF0ZWQgYXJyYXlzICovCisgICBzcHhfd29yZDE2X3QgKmZyYW1lOyAgICAgIC8qKjwgUHJvY2Vzc2luZyBmcmFtZSAoMipwc19zaXplKSAqLworICAgc3B4X3dvcmQxNl90ICpmdDsgICAgICAgICAvKio8IFByb2Nlc3NpbmcgZnJhbWUgaW4gZnJlcSBkb21haW4gKDIqcHNfc2l6ZSkgKi8KKyAgIHNweF93b3JkMzJfdCAqcHM7ICAgICAgICAgLyoqPCBDdXJyZW50IHBvd2VyIHNwZWN0cnVtICovCisgICBzcHhfd29yZDE2X3QgKmdhaW4yOyAgICAgIC8qKjwgQWRqdXN0ZWQgZ2FpbnMgKi8KKyAgIHNweF93b3JkMTZfdCAqZ2Fpbl9mbG9vcjsgLyoqPCBNaW5pbXVtIGdhaW4gYWxsb3dlZCAqLworICAgc3B4X3dvcmQxNl90ICp3aW5kb3c7ICAgICAvKio8IEFuYWx5c2lzL1N5bnRoZXNpcyB3aW5kb3cgKi8KKyAgIHNweF93b3JkMzJfdCAqbm9pc2U7ICAgICAgLyoqPCBOb2lzZSBlc3RpbWF0ZSAqLworICAgc3B4X3dvcmQzMl90ICpyZXZlcmJfZXN0aW1hdGU7IC8qKjwgRXN0aW1hdGUgb2YgcmV2ZXJiIGVuZXJneSAqLworICAgc3B4X3dvcmQzMl90ICpvbGRfcHM7ICAgICAvKio8IFBvd2VyIHNwZWN0cnVtIGZvciBsYXN0IGZyYW1lICovCisgICBzcHhfd29yZDE2X3QgKmdhaW47ICAgICAgIC8qKjwgRXBocmFpbSBNYWxhaCBnYWluICovCisgICBzcHhfd29yZDE2X3QgKnByaW9yOyAgICAgIC8qKjwgQS1wcmlvcmkgU05SICovCisgICBzcHhfd29yZDE2X3QgKnBvc3Q7ICAgICAgIC8qKjwgQS1wb3N0ZXJpb3JpIFNOUiAqLworCisgICBzcHhfd29yZDMyX3QgKlM7ICAgICAgICAgIC8qKjwgU21vb3RoZWQgcG93ZXIgc3BlY3RydW0gKi8KKyAgIHNweF93b3JkMzJfdCAqU21pbjsgICAgICAgLyoqPCBTZWUgQ29oZW4gcGFwZXIgKi8KKyAgIHNweF93b3JkMzJfdCAqU3RtcDsgICAgICAgLyoqPCBTZWUgQ29oZW4gcGFwZXIgKi8KKyAgIGludCAqdXBkYXRlX3Byb2I7ICAgICAgIC8qKjwgUHJvcGFiaWxpdHkgb2Ygc3BlZWNoIHByZXNlbmNlIGZvciBub2lzZSB1cGRhdGUgKi8KKworICAgc3B4X3dvcmQxNl90ICp6ZXRhOyAgICAgICAvKio8IFNtb290aGVkIGEgcHJpb3JpIFNOUiAqLworICAgc3B4X3dvcmQzMl90ICplY2hvX25vaXNlOworICAgc3B4X3dvcmQzMl90ICpyZXNpZHVhbF9lY2hvOworCisgICAvKiBNaXNjICovCisgICBzcHhfd29yZDE2X3QgKmluYnVmOyAgICAgIC8qKjwgSW5wdXQgYnVmZmVyIChvdmVybGFwcGVkIGFuYWx5c2lzKSAqLworICAgc3B4X3dvcmQxNl90ICpvdXRidWY7ICAgICAvKio8IE91dHB1dCBidWZmZXIgKGZvciBvdmVybGFwIGFuZCBhZGQpICovCisKKyAgIC8qIEFHQyBzdHVmZiwgb25seSBmb3IgZmxvYXRpbmcgcG9pbnQgZm9yIG5vdyAqLworI2lmbmRlZiBGSVhFRF9QT0lOVAorICAgaW50ICAgIGFnY19lbmFibGVkOworICAgZmxvYXQgIGFnY19sZXZlbDsKKyAgIGZsb2F0ICBsb3VkbmVzc19hY2N1bTsKKyAgIGZsb2F0ICpsb3VkbmVzc193ZWlnaHQ7ICAgLyoqPCBQZXJjZXB0dWFsIGxvdWRuZXNzIGN1cnZlICovCisgICBmbG9hdCAgbG91ZG5lc3M7ICAgICAgICAgIC8qKjwgTG91ZG5lc3MgZXN0aW1hdGUgKi8KKyAgIGZsb2F0ICBhZ2NfZ2FpbjsgICAgICAgICAgLyoqPCBDdXJyZW50IEFHQyBnYWluICovCisgICBpbnQgICAgbmJfbG91ZG5lc3NfYWRhcHQ7IC8qKjwgTnVtYmVyIG9mIGZyYW1lcyB1c2VkIGZvciBsb3VkbmVzcyBhZGFwdGF0aW9uIHNvIGZhciAqLworICAgZmxvYXQgIG1heF9nYWluOyAgICAgICAgICAvKio8IE1heGltdW0gZ2FpbiBhbGxvd2VkICovCisgICBmbG9hdCAgbWF4X2luY3JlYXNlX3N0ZXA7IC8qKjwgTWF4aW11bSBpbmNyZWFzZSBpbiBnYWluIGZyb20gb25lIGZyYW1lIHRvIGFub3RoZXIgKi8KKyAgIGZsb2F0ICBtYXhfZGVjcmVhc2Vfc3RlcDsgLyoqPCBNYXhpbXVtIGRlY3JlYXNlIGluIGdhaW4gZnJvbSBvbmUgZnJhbWUgdG8gYW5vdGhlciAqLworICAgZmxvYXQgIHByZXZfbG91ZG5lc3M7ICAgICAvKio8IExvdWRuZXNzIG9mIHByZXZpb3VzIGZyYW1lICovCisgICBmbG9hdCAgaW5pdF9tYXg7ICAgICAgICAgIC8qKjwgQ3VycmVudCBnYWluIGxpbWl0IGR1cmluZyBpbml0aWFsaXNhdGlvbiAqLworI2VuZGlmCisgICBpbnQgICAgbmJfYWRhcHQ7ICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGZyYW1lcyB1c2VkIGZvciBhZGFwdGF0aW9uIHNvIGZhciAqLworICAgaW50ICAgIHdhc19zcGVlY2g7CisgICBpbnQgICAgbWluX2NvdW50OyAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGZyYW1lcyBwcm9jZXNzZWQgc28gZmFyICovCisgICB2b2lkICAqZmZ0X2xvb2t1cDsgICAgICAgIC8qKjwgTG9va3VwIHRhYmxlIGZvciB0aGUgRkZUICovCisjaWZkZWYgRklYRURfUE9JTlQKKyAgIGludCAgICBmcmFtZV9zaGlmdDsKKyNlbmRpZgorfTsKKworCitzdGF0aWMgdm9pZCBjb25qX3dpbmRvdyhzcHhfd29yZDE2X3QgKncsIGludCBsZW4pCit7CisgICBpbnQgaTsKKyAgIGZvciAoaT0wO2k8bGVuO2krKykKKyAgIHsKKyAgICAgIHNweF93b3JkMTZfdCB0bXA7CisjaWZkZWYgRklYRURfUE9JTlQKKyAgICAgIHNweF93b3JkMTZfdCB4ID0gRElWMzJfMTYoTVVMVDE2XzE2KDMyNzY3LGkpLGxlbik7CisjZWxzZSAgICAgIAorICAgICAgc3B4X3dvcmQxNl90IHggPSBESVYzMl8xNihNVUxUMTZfMTYoUUNPTlNUMTYoNC5mLDEzKSxpKSxsZW4pOworI2VuZGlmCisgICAgICBpbnQgaW52PTA7CisgICAgICBpZiAoeDxRQ09OU1QxNigxLmYsMTMpKQorICAgICAgeworICAgICAgfSBlbHNlIGlmICh4PFFDT05TVDE2KDIuZiwxMykpCisgICAgICB7CisgICAgICAgICB4PVFDT05TVDE2KDIuZiwxMykteDsKKyAgICAgICAgIGludj0xOworICAgICAgfSBlbHNlIGlmICh4PFFDT05TVDE2KDMuZiwxMykpCisgICAgICB7CisgICAgICAgICB4PXgtUUNPTlNUMTYoMi5mLDEzKTsKKyAgICAgICAgIGludj0xOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgIHg9UUNPTlNUMTYoMi5mLDEzKS14K1FDT05TVDE2KDIuZiwxMyk7IC8qIDQgLSB4ICovCisgICAgICB9CisgICAgICB4ID0gTVVMVDE2XzE2X1ExNChRQ09OU1QxNigxLjI3MTkwM2YsMTQpLCB4KTsKKyAgICAgIHRtcCA9IFNRUjE2X1ExNShRQ09OU1QxNiguNWYsMTUpLU1VTFQxNl8xNl9QMTUoUUNPTlNUMTYoLjVmLDE1KSxzcHhfY29zX25vcm0oUUNPTlNUMzIoeCwyKSkpKTsKKyAgICAgIGlmIChpbnYpCisgICAgICAgICB0bXA9U1VCMTYoUTE1X09ORSx0bXApOworICAgICAgd1tpXT1zcHhfc3FydChTSEwzMihFWFRFTkQzMih0bXApLDE1KSk7CisgICB9Cit9CisKKyAgICAgIAorI2lmZGVmIEZJWEVEX1BPSU5UCisvKiBUaGlzIGZ1bmN0aW9uIGFwcHJveGltYXRlcyB0aGUgZ2FpbiBmdW5jdGlvbiAKKyAgIHkgPSBnYW1tYSgxLjI1KV4yICogTSgtLjI1OzE7LXgpIC8gc3FydCh4KSAgCisgICB3aGljaCBtdWx0aXBsaWVkIGJ5IHhpLygxK3hpKSBpcyB0aGUgb3B0aW1hbCBnYWluCisgICBpbiB0aGUgbG91ZG5lc3MgZG9tYWluICggc3FydFthbXBsaXR1ZGVdICkKKyAgIElucHV0IGluIFExMSBmb3JtYXQsIG91dHB1dCBpbiBRMTUKKyovCitzdGF0aWMgaW5saW5lIHNweF93b3JkMzJfdCBoeXBlcmdlb21fZ2FpbihzcHhfd29yZDMyX3QgeHgpCit7CisgICBpbnQgaW5kOworICAgc3B4X3dvcmQxNl90IGZyYWM7CisgICAvKiBRMTMgdGFibGUgKi8KKyAgIHN0YXRpYyBjb25zdCBzcHhfd29yZDE2X3QgdGFibGVbMjFdID0geworICAgICAgIDY3MzAsICA4MzU3LCAgOTg2OCwgMTEyNjcsIDEyNTYzLCAxMzc3MCwgMTQ4OTgsCisgICAgICAxNTk1OSwgMTY5NjEsIDE3OTExLCAxODgxNiwgMTk2ODIsIDIwNTEyLCAyMTMxMSwKKyAgICAgIDIyMDgyLCAyMjgyNywgMjM1NDksIDI0MjUwLCAyNDkzMSwgMjU1OTQsIDI2MjQxfTsKKyAgICAgIGluZCA9IFNIUjMyKHh4LDEwKTsKKyAgICAgIGlmIChpbmQ8MCkKKyAgICAgICAgIHJldHVybiBRMTVfT05FOworICAgICAgaWYgKGluZD4xOSkKKyAgICAgICAgIHJldHVybiBBREQzMihFWFRFTkQzMihRMTVfT05FKSxFWFRFTkQzMihESVYzMl8xNihRQ09OU1QzMiguMTI5NiwyMyksIFNIUjMyKHh4LEVYUElOX1NISUZULVNOUl9TSElGVCkpKSk7CisgICAgICBmcmFjID0gU0hMMzIoeHgtU0hMMzIoaW5kLDEwKSw1KTsKKyAgICAgIHJldHVybiBTSEwzMihESVYzMl8xNihQU0hSMzIoTVVMVDE2XzE2KFExNV9PTkUtZnJhYyx0YWJsZVtpbmRdKSArIE1VTFQxNl8xNihmcmFjLHRhYmxlW2luZCsxXSksNyksKHNweF9zcXJ0KFNITDMyKHh4LDE1KSs2NzExKSkpLDcpOworfQorCitzdGF0aWMgaW5saW5lIHNweF93b3JkMTZfdCBxY3VydmUoc3B4X3dvcmQxNl90IHgpCit7CisgICB4ID0gTUFYMTYoeCwgMSk7CisgICByZXR1cm4gRElWMzJfMTYoU0hMMzIoRVhURU5EMzIoMzI3NjcpLDkpLEFERDE2KDUxMixNVUxUMTZfMTZfUTE1KFFDT05TVDE2KC42MGYsMTUpLERJVjMyXzE2KDMyNzY3LHgpKSkpOworfQorCisvKiBDb21wdXRlIHRoZSBnYWluIGZsb29yIGJhc2VkIG9uIGRpZmZlcmVudCBmbG9vcnMgZm9yIHRoZSBiYWNrZ3JvdW5kIG5vaXNlIGFuZCByZXNpZHVhbCBlY2hvICovCitzdGF0aWMgdm9pZCBjb21wdXRlX2dhaW5fZmxvb3IoaW50IG5vaXNlX3N1cHByZXNzLCBpbnQgZWZmZWN0aXZlX2VjaG9fc3VwcHJlc3MsIHNweF93b3JkMzJfdCAqbm9pc2UsIHNweF93b3JkMzJfdCAqZWNobywgc3B4X3dvcmQxNl90ICpnYWluX2Zsb29yLCBpbnQgbGVuKQoreworICAgaW50IGk7CisgICAKKyAgIGlmIChub2lzZV9zdXBwcmVzcyA+IGVmZmVjdGl2ZV9lY2hvX3N1cHByZXNzKQorICAgeworICAgICAgc3B4X3dvcmQxNl90IG5vaXNlX2dhaW4sIGdhaW5fcmF0aW87CisgICAgICBub2lzZV9nYWluID0gRVhUUkFDVDE2KE1JTjMyKFExNV9PTkUsU0hSMzIoc3B4X2V4cChNVUxUMTZfMTYoUUNPTlNUMTYoMC4xMTUxMywxMSksbm9pc2Vfc3VwcHJlc3MpKSwxKSkpOworICAgICAgZ2Fpbl9yYXRpbyA9IEVYVFJBQ1QxNihNSU4zMihRMTVfT05FLFNIUjMyKHNweF9leHAoTVVMVDE2XzE2KFFDT05TVDE2KC4yMzAyNTg1ZiwxMSksZWZmZWN0aXZlX2VjaG9fc3VwcHJlc3Mtbm9pc2Vfc3VwcHJlc3MpKSwxKSkpOworCisgICAgICAvKiBnYWluX2Zsb29yID0gc3FydCBbIChub2lzZSpub2lzZV9mbG9vciArIGVjaG8qZWNob19mbG9vcikgLyAobm9pc2UrZWNobykgXSAqLworICAgICAgZm9yIChpPTA7aTxsZW47aSsrKQorICAgICAgICAgZ2Fpbl9mbG9vcltpXSA9IE1VTFQxNl8xNl9RMTUobm9pc2VfZ2FpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNweF9zcXJ0KFNITDMyKEVYVEVORDMyKERJVjMyXzE2X1ExNShQU0hSMzIobm9pc2VbaV0sTk9JU0VfU0hJRlQpICsgTVVMVDE2XzMyX1ExNShnYWluX3JhdGlvLGVjaG9baV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDErUFNIUjMyKG5vaXNlW2ldLE5PSVNFX1NISUZUKSArIGVjaG9baV0pICkpLDE1KSkpOworICAgfSBlbHNlIHsKKyAgICAgIHNweF93b3JkMTZfdCBlY2hvX2dhaW4sIGdhaW5fcmF0aW87CisgICAgICBlY2hvX2dhaW4gPSBFWFRSQUNUMTYoTUlOMzIoUTE1X09ORSxTSFIzMihzcHhfZXhwKE1VTFQxNl8xNihRQ09OU1QxNigwLjExNTEzLDExKSxlZmZlY3RpdmVfZWNob19zdXBwcmVzcykpLDEpKSk7CisgICAgICBnYWluX3JhdGlvID0gRVhUUkFDVDE2KE1JTjMyKFExNV9PTkUsU0hSMzIoc3B4X2V4cChNVUxUMTZfMTYoUUNPTlNUMTYoLjIzMDI1ODVmLDExKSxub2lzZV9zdXBwcmVzcy1lZmZlY3RpdmVfZWNob19zdXBwcmVzcykpLDEpKSk7CisKKyAgICAgIC8qIGdhaW5fZmxvb3IgPSBzcXJ0IFsgKG5vaXNlKm5vaXNlX2Zsb29yICsgZWNobyplY2hvX2Zsb29yKSAvIChub2lzZStlY2hvKSBdICovCisgICAgICBmb3IgKGk9MDtpPGxlbjtpKyspCisgICAgICAgICBnYWluX2Zsb29yW2ldID0gTVVMVDE2XzE2X1ExNShlY2hvX2dhaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHhfc3FydChTSEwzMihFWFRFTkQzMihESVYzMl8xNl9RMTUoTVVMVDE2XzMyX1ExNShnYWluX3JhdGlvLFBTSFIzMihub2lzZVtpXSxOT0lTRV9TSElGVCkpICsgZWNob1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxK1BTSFIzMihub2lzZVtpXSxOT0lTRV9TSElGVCkgKyBlY2hvW2ldKSApKSwxNSkpKTsKKyAgIH0KK30KKworI2Vsc2UKKy8qIFRoaXMgZnVuY3Rpb24gYXBwcm94aW1hdGVzIHRoZSBnYWluIGZ1bmN0aW9uIAorICAgeSA9IGdhbW1hKDEuMjUpXjIgKiBNKC0uMjU7MTsteCkgLyBzcXJ0KHgpICAKKyAgIHdoaWNoIG11bHRpcGxpZWQgYnkgeGkvKDEreGkpIGlzIHRoZSBvcHRpbWFsIGdhaW4KKyAgIGluIHRoZSBsb3VkbmVzcyBkb21haW4gKCBzcXJ0W2FtcGxpdHVkZV0gKQorKi8KK3N0YXRpYyBpbmxpbmUgc3B4X3dvcmQzMl90IGh5cGVyZ2VvbV9nYWluKHNweF93b3JkMzJfdCB4eCkKK3sKKyAgIGludCBpbmQ7CisgICBmbG9hdCBpbnRlZ2VyLCBmcmFjOworICAgZmxvYXQgeDsKKyAgIHN0YXRpYyBjb25zdCBmbG9hdCB0YWJsZVsyMV0gPSB7CisgICAgICAwLjgyMTU3ZiwgMS4wMjAxN2YsIDEuMjA0NjFmLCAxLjM3NTM0ZiwgMS41MzM2M2YsIDEuNjgwOTJmLCAxLjgxODY1ZiwKKyAgICAgIDEuOTQ4MTFmLCAyLjA3MDM4ZiwgMi4xODYzOGYsIDIuMjk2ODhmLCAyLjQwMjU1ZiwgMi41MDM5MWYsIDIuNjAxNDRmLAorICAgICAgMi42OTU1MWYsIDIuNzg2NDdmLCAyLjg3NDU4ZiwgMi45NjAxNWYsIDMuMDQzMzNmLCAzLjEyNDMxZiwgMy4yMDMyNmZ9OworICAgICAgeCA9IEVYUElOX1NDQUxJTkdfMSp4eDsKKyAgICAgIGludGVnZXIgPSBmbG9vcigyKngpOworICAgICAgaW5kID0gKGludClpbnRlZ2VyOworICAgICAgaWYgKGluZDwwKQorICAgICAgICAgcmV0dXJuIEZSQUNfU0NBTElORzsKKyAgICAgIGlmIChpbmQ+MTkpCisgICAgICAgICByZXR1cm4gRlJBQ19TQ0FMSU5HKigxKy4xMjk2L3gpOworICAgICAgZnJhYyA9IDIqeC1pbnRlZ2VyOworICAgICAgcmV0dXJuIEZSQUNfU0NBTElORyooKDEtZnJhYykqdGFibGVbaW5kXSArIGZyYWMqdGFibGVbaW5kKzFdKS9zcXJ0KHgrLjAwMDFmKTsKK30KKworc3RhdGljIGlubGluZSBzcHhfd29yZDE2X3QgcWN1cnZlKHNweF93b3JkMTZfdCB4KQoreworICAgcmV0dXJuIDEuZi8oMS5mKy4xNWYvKFNOUl9TQ0FMSU5HXzEqeCkpOworfQorCitzdGF0aWMgdm9pZCBjb21wdXRlX2dhaW5fZmxvb3IoaW50IG5vaXNlX3N1cHByZXNzLCBpbnQgZWZmZWN0aXZlX2VjaG9fc3VwcHJlc3MsIHNweF93b3JkMzJfdCAqbm9pc2UsIHNweF93b3JkMzJfdCAqZWNobywgc3B4X3dvcmQxNl90ICpnYWluX2Zsb29yLCBpbnQgbGVuKQoreworICAgaW50IGk7CisgICBmbG9hdCBlY2hvX2Zsb29yOworICAgZmxvYXQgbm9pc2VfZmxvb3I7CisKKyAgIG5vaXNlX2Zsb29yID0gZXhwKC4yMzAyNTg1Zipub2lzZV9zdXBwcmVzcyk7CisgICBlY2hvX2Zsb29yID0gZXhwKC4yMzAyNTg1ZiplZmZlY3RpdmVfZWNob19zdXBwcmVzcyk7CisKKyAgIC8qIENvbXB1dGUgdGhlIGdhaW4gZmxvb3IgYmFzZWQgb24gZGlmZmVyZW50IGZsb29ycyBmb3IgdGhlIGJhY2tncm91bmQgbm9pc2UgYW5kIHJlc2lkdWFsIGVjaG8gKi8KKyAgIGZvciAoaT0wO2k8bGVuO2krKykKKyAgICAgIGdhaW5fZmxvb3JbaV0gPSBGUkFDX1NDQUxJTkcqc3FydChub2lzZV9mbG9vcipQU0hSMzIobm9pc2VbaV0sTk9JU0VfU0hJRlQpICsgZWNob19mbG9vciplY2hvW2ldKS9zcXJ0KDErUFNIUjMyKG5vaXNlW2ldLE5PSVNFX1NISUZUKSArIGVjaG9baV0pOworfQorCisjZW5kaWYKK1NwZWV4UHJlcHJvY2Vzc1N0YXRlICpzcGVleF9wcmVwcm9jZXNzX3N0YXRlX2luaXQoaW50IGZyYW1lX3NpemUsIGludCBzYW1wbGluZ19yYXRlKQoreworICAgaW50IGk7CisgICBpbnQgTiwgTjMsIE40LCBNOworCisgICBTcGVleFByZXByb2Nlc3NTdGF0ZSAqc3QgPSAoU3BlZXhQcmVwcm9jZXNzU3RhdGUgKilzcGVleF9hbGxvYyhzaXplb2YoU3BlZXhQcmVwcm9jZXNzU3RhdGUpKTsKKyAgIHN0LT5mcmFtZV9zaXplID0gZnJhbWVfc2l6ZTsKKworICAgLyogUm91bmQgcHNfc2l6ZSBkb3duIHRvIHRoZSBuZWFyZXN0IHBvd2VyIG9mIHR3byAqLworI2lmIDAKKyAgIGk9MTsKKyAgIHN0LT5wc19zaXplID0gc3QtPmZyYW1lX3NpemU7CisgICB3aGlsZSgxKQorICAgeworICAgICAgaWYgKHN0LT5wc19zaXplICYgfmkpCisgICAgICB7CisgICAgICAgICBzdC0+cHNfc2l6ZSAmPSB+aTsKKyAgICAgICAgIGk8PD0xOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgfQorICAgCisgICAKKyAgIGlmIChzdC0+cHNfc2l6ZSA8IDMqc3QtPmZyYW1lX3NpemUvNCkKKyAgICAgIHN0LT5wc19zaXplID0gc3QtPnBzX3NpemUgKiAzIC8gMjsKKyNlbHNlCisgICBzdC0+cHNfc2l6ZSA9IHN0LT5mcmFtZV9zaXplOworI2VuZGlmCisKKyAgIE4gPSBzdC0+cHNfc2l6ZTsKKyAgIE4zID0gMipOIC0gc3QtPmZyYW1lX3NpemU7CisgICBONCA9IHN0LT5mcmFtZV9zaXplIC0gTjM7CisgICAKKyAgIHN0LT5zYW1wbGluZ19yYXRlID0gc2FtcGxpbmdfcmF0ZTsKKyAgIHN0LT5kZW5vaXNlX2VuYWJsZWQgPSAxOworICAgc3QtPnZhZF9lbmFibGVkID0gMDsKKyAgIHN0LT5kZXJldmVyYl9lbmFibGVkID0gMDsKKyAgIHN0LT5yZXZlcmJfZGVjYXkgPSAwOworICAgc3QtPnJldmVyYl9sZXZlbCA9IDA7CisgICBzdC0+bm9pc2Vfc3VwcHJlc3MgPSBOT0lTRV9TVVBQUkVTU19ERUZBVUxUOworICAgc3QtPmVjaG9fc3VwcHJlc3MgPSBFQ0hPX1NVUFBSRVNTX0RFRkFVTFQ7CisgICBzdC0+ZWNob19zdXBwcmVzc19hY3RpdmUgPSBFQ0hPX1NVUFBSRVNTX0FDVElWRV9ERUZBVUxUOworCisgICBzdC0+c3BlZWNoX3Byb2Jfc3RhcnQgPSBTUEVFQ0hfUFJPQl9TVEFSVF9ERUZBVUxUOworICAgc3QtPnNwZWVjaF9wcm9iX2NvbnRpbnVlID0gU1BFRUNIX1BST0JfQ09OVElOVUVfREVGQVVMVDsKKworICAgc3QtPmVjaG9fc3RhdGUgPSBOVUxMOworICAgCisgICBzdC0+bmJhbmRzID0gTkJfQkFORFM7CisgICBNID0gc3QtPm5iYW5kczsKKyAgIHN0LT5iYW5rID0gZmlsdGVyYmFua19uZXcoTSwgc2FtcGxpbmdfcmF0ZSwgTiwgMSk7CisgICAKKyAgIHN0LT5mcmFtZSA9IChzcHhfd29yZDE2X3QqKXNwZWV4X2FsbG9jKDIqTipzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisgICBzdC0+d2luZG93ID0gKHNweF93b3JkMTZfdCopc3BlZXhfYWxsb2MoMipOKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgIHN0LT5mdCA9IChzcHhfd29yZDE2X3QqKXNwZWV4X2FsbG9jKDIqTipzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisgICAKKyAgIHN0LT5wcyA9IChzcHhfd29yZDMyX3QqKXNwZWV4X2FsbG9jKChOK00pKnNpemVvZihzcHhfd29yZDMyX3QpKTsKKyAgIHN0LT5ub2lzZSA9IChzcHhfd29yZDMyX3QqKXNwZWV4X2FsbG9jKChOK00pKnNpemVvZihzcHhfd29yZDMyX3QpKTsKKyAgIHN0LT5lY2hvX25vaXNlID0gKHNweF93b3JkMzJfdCopc3BlZXhfYWxsb2MoKE4rTSkqc2l6ZW9mKHNweF93b3JkMzJfdCkpOworICAgc3QtPnJlc2lkdWFsX2VjaG8gPSAoc3B4X3dvcmQzMl90KilzcGVleF9hbGxvYygoTitNKSpzaXplb2Yoc3B4X3dvcmQzMl90KSk7CisgICBzdC0+cmV2ZXJiX2VzdGltYXRlID0gKHNweF93b3JkMzJfdCopc3BlZXhfYWxsb2MoKE4rTSkqc2l6ZW9mKHNweF93b3JkMzJfdCkpOworICAgc3QtPm9sZF9wcyA9IChzcHhfd29yZDMyX3QqKXNwZWV4X2FsbG9jKChOK00pKnNpemVvZihzcHhfd29yZDMyX3QpKTsKKyAgIHN0LT5wcmlvciA9IChzcHhfd29yZDE2X3QqKXNwZWV4X2FsbG9jKChOK00pKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgIHN0LT5wb3N0ID0gKHNweF93b3JkMTZfdCopc3BlZXhfYWxsb2MoKE4rTSkqc2l6ZW9mKHNweF93b3JkMTZfdCkpOworICAgc3QtPmdhaW4gPSAoc3B4X3dvcmQxNl90KilzcGVleF9hbGxvYygoTitNKSpzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisgICBzdC0+Z2FpbjIgPSAoc3B4X3dvcmQxNl90KilzcGVleF9hbGxvYygoTitNKSpzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisgICBzdC0+Z2Fpbl9mbG9vciA9IChzcHhfd29yZDE2X3QqKXNwZWV4X2FsbG9jKChOK00pKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgIHN0LT56ZXRhID0gKHNweF93b3JkMTZfdCopc3BlZXhfYWxsb2MoKE4rTSkqc2l6ZW9mKHNweF93b3JkMTZfdCkpOworICAgCisgICBzdC0+UyA9IChzcHhfd29yZDMyX3QqKXNwZWV4X2FsbG9jKE4qc2l6ZW9mKHNweF93b3JkMzJfdCkpOworICAgc3QtPlNtaW4gPSAoc3B4X3dvcmQzMl90KilzcGVleF9hbGxvYyhOKnNpemVvZihzcHhfd29yZDMyX3QpKTsKKyAgIHN0LT5TdG1wID0gKHNweF93b3JkMzJfdCopc3BlZXhfYWxsb2MoTipzaXplb2Yoc3B4X3dvcmQzMl90KSk7CisgICBzdC0+dXBkYXRlX3Byb2IgPSAoaW50KilzcGVleF9hbGxvYyhOKnNpemVvZihpbnQpKTsKKyAgIAorICAgc3QtPmluYnVmID0gKHNweF93b3JkMTZfdCopc3BlZXhfYWxsb2MoTjMqc2l6ZW9mKHNweF93b3JkMTZfdCkpOworICAgc3QtPm91dGJ1ZiA9IChzcHhfd29yZDE2X3QqKXNwZWV4X2FsbG9jKE4zKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKworICAgY29ual93aW5kb3coc3QtPndpbmRvdywgMipOMyk7CisgICBmb3IgKGk9MipOMztpPDIqc3QtPnBzX3NpemU7aSsrKQorICAgICAgc3QtPndpbmRvd1tpXT1RMTVfT05FOworICAgCisgICBpZiAoTjQ+MCkKKyAgIHsKKyAgICAgIGZvciAoaT1OMy0xO2k+PTA7aS0tKQorICAgICAgeworICAgICAgICAgc3QtPndpbmRvd1tpK04zK040XT1zdC0+d2luZG93W2krTjNdOworICAgICAgICAgc3QtPndpbmRvd1tpK04zXT0xOworICAgICAgfQorICAgfQorICAgZm9yIChpPTA7aTxOK007aSsrKQorICAgeworICAgICAgc3QtPm5vaXNlW2ldPVFDT05TVDMyKDEuZixOT0lTRV9TSElGVCk7CisgICAgICBzdC0+cmV2ZXJiX2VzdGltYXRlW2ldPTA7CisgICAgICBzdC0+b2xkX3BzW2ldPTE7CisgICAgICBzdC0+Z2FpbltpXT1RMTVfT05FOworICAgICAgc3QtPnBvc3RbaV09U0hMMTYoMSwgU05SX1NISUZUKTsKKyAgICAgIHN0LT5wcmlvcltpXT1TSEwxNigxLCBTTlJfU0hJRlQpOworICAgfQorCisgICBmb3IgKGk9MDtpPE47aSsrKQorICAgICAgc3QtPnVwZGF0ZV9wcm9iW2ldID0gMTsKKyAgIGZvciAoaT0wO2k8TjM7aSsrKQorICAgeworICAgICAgc3QtPmluYnVmW2ldPTA7CisgICAgICBzdC0+b3V0YnVmW2ldPTA7CisgICB9CisjaWZuZGVmIEZJWEVEX1BPSU5UCisgICBzdC0+YWdjX2VuYWJsZWQgPSAwOworICAgc3QtPmFnY19sZXZlbCA9IDgwMDA7CisgICBzdC0+bG91ZG5lc3Nfd2VpZ2h0ID0gKGZsb2F0KilzcGVleF9hbGxvYyhOKnNpemVvZihmbG9hdCkpOworICAgZm9yIChpPTA7aTxOO2krKykKKyAgIHsKKyAgICAgIGZsb2F0IGZmPSgoZmxvYXQpaSkqLjUqc2FtcGxpbmdfcmF0ZS8oKGZsb2F0KU4pOworICAgICAgLypzdC0+bG91ZG5lc3Nfd2VpZ2h0W2ldID0gLjVmKigxLmYvKDEuZitmZi84MDAwLmYpKSsxLmYqZXhwKC0uNWYqKGZmLTM4MDAuZikqKGZmLTM4MDAuZikvOWU1Zik7Ki8KKyAgICAgIHN0LT5sb3VkbmVzc193ZWlnaHRbaV0gPSAuMzVmLS4zNWYqZmYvMTYwMDAuZisuNzNmKmV4cCgtLjVmKihmZi0zODAwKSooZmYtMzgwMCkvOWU1Zik7CisgICAgICBpZiAoc3QtPmxvdWRuZXNzX3dlaWdodFtpXTwuMDFmKQorICAgICAgICAgc3QtPmxvdWRuZXNzX3dlaWdodFtpXT0uMDFmOworICAgICAgc3QtPmxvdWRuZXNzX3dlaWdodFtpXSAqPSBzdC0+bG91ZG5lc3Nfd2VpZ2h0W2ldOworICAgfQorICAgLypzdC0+bG91ZG5lc3MgPSBwb3coQU1QX1NDQUxFKnN0LT5hZ2NfbGV2ZWwsTE9VRE5FU1NfRVhQKTsqLworICAgc3QtPmxvdWRuZXNzID0gMWUtMTU7CisgICBzdC0+YWdjX2dhaW4gPSAxOworICAgc3QtPm5iX2xvdWRuZXNzX2FkYXB0ID0gMDsKKyAgIHN0LT5tYXhfZ2FpbiA9IDMwOworICAgc3QtPm1heF9pbmNyZWFzZV9zdGVwID0gZXhwKDAuMTE1MTNmICogMTIuKnN0LT5mcmFtZV9zaXplIC8gc3QtPnNhbXBsaW5nX3JhdGUpOworICAgc3QtPm1heF9kZWNyZWFzZV9zdGVwID0gZXhwKC0wLjExNTEzZiAqIDQwLipzdC0+ZnJhbWVfc2l6ZSAvIHN0LT5zYW1wbGluZ19yYXRlKTsKKyAgIHN0LT5wcmV2X2xvdWRuZXNzID0gMTsKKyAgIHN0LT5pbml0X21heCA9IDE7CisjZW5kaWYKKyAgIHN0LT53YXNfc3BlZWNoID0gMDsKKworICAgc3QtPmZmdF9sb29rdXAgPSBzcHhfZmZ0X2luaXQoMipOKTsKKworICAgc3QtPm5iX2FkYXB0PTA7CisgICBzdC0+bWluX2NvdW50PTA7CisgICByZXR1cm4gc3Q7Cit9CisKK3ZvaWQgc3BlZXhfcHJlcHJvY2Vzc19zdGF0ZV9kZXN0cm95KFNwZWV4UHJlcHJvY2Vzc1N0YXRlICpzdCkKK3sKKyAgIHNwZWV4X2ZyZWUoc3QtPmZyYW1lKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPmZ0KTsKKyAgIHNwZWV4X2ZyZWUoc3QtPnBzKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPmdhaW4yKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPmdhaW5fZmxvb3IpOworICAgc3BlZXhfZnJlZShzdC0+d2luZG93KTsKKyAgIHNwZWV4X2ZyZWUoc3QtPm5vaXNlKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPnJldmVyYl9lc3RpbWF0ZSk7CisgICBzcGVleF9mcmVlKHN0LT5vbGRfcHMpOworICAgc3BlZXhfZnJlZShzdC0+Z2Fpbik7CisgICBzcGVleF9mcmVlKHN0LT5wcmlvcik7CisgICBzcGVleF9mcmVlKHN0LT5wb3N0KTsKKyNpZm5kZWYgRklYRURfUE9JTlQKKyAgIHNwZWV4X2ZyZWUoc3QtPmxvdWRuZXNzX3dlaWdodCk7CisjZW5kaWYKKyAgIHNwZWV4X2ZyZWUoc3QtPmVjaG9fbm9pc2UpOworICAgc3BlZXhfZnJlZShzdC0+cmVzaWR1YWxfZWNobyk7CisKKyAgIHNwZWV4X2ZyZWUoc3QtPlMpOworICAgc3BlZXhfZnJlZShzdC0+U21pbik7CisgICBzcGVleF9mcmVlKHN0LT5TdG1wKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPnVwZGF0ZV9wcm9iKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPnpldGEpOworCisgICBzcGVleF9mcmVlKHN0LT5pbmJ1Zik7CisgICBzcGVleF9mcmVlKHN0LT5vdXRidWYpOworCisgICBzcHhfZmZ0X2Rlc3Ryb3koc3QtPmZmdF9sb29rdXApOworICAgZmlsdGVyYmFua19kZXN0cm95KHN0LT5iYW5rKTsKKyAgIHNwZWV4X2ZyZWUoc3QpOworfQorCisvKiBGSVhNRTogVGhlIEFHQyBkb2Vzbid0IHdvcmsgeWV0IHdpdGggZml4ZWQtcG9pbnQqLworI2lmbmRlZiBGSVhFRF9QT0lOVAorc3RhdGljIHZvaWQgc3BlZXhfY29tcHV0ZV9hZ2MoU3BlZXhQcmVwcm9jZXNzU3RhdGUgKnN0LCBzcHhfd29yZDE2X3QgUGZyYW1lLCBzcHhfd29yZDE2X3QgKmZ0KQoreworICAgaW50IGk7CisgICBpbnQgTiA9IHN0LT5wc19zaXplOworICAgZmxvYXQgdGFyZ2V0X2dhaW47CisgICBmbG9hdCBsb3VkbmVzcz0xLmY7CisgICBmbG9hdCByYXRlOworICAgCisgICBmb3IgKGk9MjtpPE47aSsrKQorICAgeworICAgICAgbG91ZG5lc3MgKz0gMi5mKk4qc3QtPnBzW2ldKiBzdC0+bG91ZG5lc3Nfd2VpZ2h0W2ldOworICAgfQorICAgbG91ZG5lc3M9c3FydChsb3VkbmVzcyk7CisgICAgICAvKmlmIChsb3VkbmVzcyA8IDIqcG93KHN0LT5sb3VkbmVzcywgMS4wL0xPVURORVNTX0VYUCkgJiYKKyAgIGxvdWRuZXNzKjIgPiBwb3coc3QtPmxvdWRuZXNzLCAxLjAvTE9VRE5FU1NfRVhQKSkqLworICAgaWYgKFBmcmFtZT4uM2YpCisgICB7CisgICAgICBzdC0+bmJfbG91ZG5lc3NfYWRhcHQrKzsKKyAgICAgIC8qcmF0ZT0yLjBmKlBmcmFtZSpQZnJhbWUvKDErc3QtPm5iX2xvdWRuZXNzX2FkYXB0KTsqLworICAgICAgcmF0ZSA9IC4wMypQZnJhbWUqUGZyYW1lOworICAgICAgc3QtPmxvdWRuZXNzID0gKDEtcmF0ZSkqc3QtPmxvdWRuZXNzICsgKHJhdGUpKnBvdyhBTVBfU0NBTEUqbG91ZG5lc3MsIExPVURORVNTX0VYUCk7CisgICAgICBzdC0+bG91ZG5lc3NfYWNjdW0gPSAoMS1yYXRlKSpzdC0+bG91ZG5lc3NfYWNjdW0gKyByYXRlOworICAgICAgaWYgKHN0LT5pbml0X21heCA8IHN0LT5tYXhfZ2FpbiAmJiBzdC0+bmJfYWRhcHQgPiAyMCkKKyAgICAgICAgIHN0LT5pbml0X21heCAqPSAxLmYgKyAuMWYqUGZyYW1lKlBmcmFtZTsKKyAgIH0KKyAgIC8qcHJpbnRmICgiJWYgJWYgJWYgJWZcbiIsIFBmcmFtZSwgbG91ZG5lc3MsIHBvdyhzdC0+bG91ZG5lc3MsIDEuMGYvTE9VRE5FU1NfRVhQKSwgc3QtPmxvdWRuZXNzMik7Ki8KKyAgIAorICAgdGFyZ2V0X2dhaW4gPSBBTVBfU0NBTEUqc3QtPmFnY19sZXZlbCpwb3coc3QtPmxvdWRuZXNzLygxZS00K3N0LT5sb3VkbmVzc19hY2N1bSksIC0xLjBmL0xPVURORVNTX0VYUCk7CisKKyAgIGlmICgoUGZyYW1lPi41ICAmJiBzdC0+bmJfYWRhcHQgPiAyMCkgfHwgdGFyZ2V0X2dhaW4gPCBzdC0+YWdjX2dhaW4pCisgICB7CisgICAgICBpZiAodGFyZ2V0X2dhaW4gPiBzdC0+bWF4X2luY3JlYXNlX3N0ZXAqc3QtPmFnY19nYWluKQorICAgICAgICAgdGFyZ2V0X2dhaW4gPSBzdC0+bWF4X2luY3JlYXNlX3N0ZXAqc3QtPmFnY19nYWluOworICAgICAgaWYgKHRhcmdldF9nYWluIDwgc3QtPm1heF9kZWNyZWFzZV9zdGVwKnN0LT5hZ2NfZ2FpbiAmJiBsb3VkbmVzcyA8IDEwKnN0LT5wcmV2X2xvdWRuZXNzKQorICAgICAgICAgdGFyZ2V0X2dhaW4gPSBzdC0+bWF4X2RlY3JlYXNlX3N0ZXAqc3QtPmFnY19nYWluOworICAgICAgaWYgKHRhcmdldF9nYWluID4gc3QtPm1heF9nYWluKQorICAgICAgICAgdGFyZ2V0X2dhaW4gPSBzdC0+bWF4X2dhaW47CisgICAgICBpZiAodGFyZ2V0X2dhaW4gPiBzdC0+aW5pdF9tYXgpCisgICAgICAgICB0YXJnZXRfZ2FpbiA9IHN0LT5pbml0X21heDsKKyAgIAorICAgICAgc3QtPmFnY19nYWluID0gdGFyZ2V0X2dhaW47CisgICB9CisgICAvKmZwcmludGYgKHN0ZGVyciwgIiVmICVmICVmXG4iLCBsb3VkbmVzcywgKGZsb2F0KUFNUF9TQ0FMRV8xKnBvdyhzdC0+bG91ZG5lc3MsIDEuMGYvTE9VRE5FU1NfRVhQKSwgc3QtPmFnY19nYWluKTsqLworICAgICAgCisgICBmb3IgKGk9MDtpPDIqTjtpKyspCisgICAgICBmdFtpXSAqPSBzdC0+YWdjX2dhaW47CisgICBzdC0+cHJldl9sb3VkbmVzcyA9IGxvdWRuZXNzOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHByZXByb2Nlc3NfYW5hbHlzaXMoU3BlZXhQcmVwcm9jZXNzU3RhdGUgKnN0LCBzcHhfaW50MTZfdCAqeCkKK3sKKyAgIGludCBpOworICAgaW50IE4gPSBzdC0+cHNfc2l6ZTsKKyAgIGludCBOMyA9IDIqTiAtIHN0LT5mcmFtZV9zaXplOworICAgaW50IE40ID0gc3QtPmZyYW1lX3NpemUgLSBOMzsKKyAgIHNweF93b3JkMzJfdCAqcHM9c3QtPnBzOworCisgICAvKiAnQnVpbGQnIGlucHV0IGZyYW1lICovCisgICBmb3IgKGk9MDtpPE4zO2krKykKKyAgICAgIHN0LT5mcmFtZVtpXT1zdC0+aW5idWZbaV07CisgICBmb3IgKGk9MDtpPHN0LT5mcmFtZV9zaXplO2krKykKKyAgICAgIHN0LT5mcmFtZVtOMytpXT14W2ldOworICAgCisgICAvKiBVcGRhdGUgaW5idWYgKi8KKyAgIGZvciAoaT0wO2k8TjM7aSsrKQorICAgICAgc3QtPmluYnVmW2ldPXhbTjQraV07CisKKyAgIC8qIFdpbmRvd2luZyAqLworICAgZm9yIChpPTA7aTwyKk47aSsrKQorICAgICAgc3QtPmZyYW1lW2ldID0gTVVMVDE2XzE2X1ExNShzdC0+ZnJhbWVbaV0sIHN0LT53aW5kb3dbaV0pOworCisjaWZkZWYgRklYRURfUE9JTlQKKyAgIHsKKyAgICAgIHNweF93b3JkMTZfdCBtYXhfdmFsPTA7CisgICAgICBmb3IgKGk9MDtpPDIqTjtpKyspCisgICAgICAgICBtYXhfdmFsID0gTUFYMTYobWF4X3ZhbCwgQUJTMTYoc3QtPmZyYW1lW2ldKSk7CisgICAgICBzdC0+ZnJhbWVfc2hpZnQgPSAxNC1zcHhfaWxvZzIoRVhURU5EMzIobWF4X3ZhbCkpOworICAgICAgZm9yIChpPTA7aTwyKk47aSsrKQorICAgICAgICAgc3QtPmZyYW1lW2ldID0gU0hMMTYoc3QtPmZyYW1lW2ldLCBzdC0+ZnJhbWVfc2hpZnQpOworICAgfQorI2VuZGlmCisgICAKKyAgIC8qIFBlcmZvcm0gRkZUICovCisgICBzcHhfZmZ0KHN0LT5mZnRfbG9va3VwLCBzdC0+ZnJhbWUsIHN0LT5mdCk7CisgICAgICAgICAKKyAgIC8qIFBvd2VyIHNwZWN0cnVtICovCisgICBwc1swXT1NVUxUMTZfMTYoc3QtPmZ0WzBdLHN0LT5mdFswXSk7CisgICBmb3IgKGk9MTtpPE47aSsrKQorICAgICAgcHNbaV09TVVMVDE2XzE2KHN0LT5mdFsyKmktMV0sc3QtPmZ0WzIqaS0xXSkgKyBNVUxUMTZfMTYoc3QtPmZ0WzIqaV0sc3QtPmZ0WzIqaV0pOworICAgZm9yIChpPTA7aTxOO2krKykKKyAgICAgIHN0LT5wc1tpXSA9IFBTSFIzMihzdC0+cHNbaV0sIDIqc3QtPmZyYW1lX3NoaWZ0KTsKKworICAgZmlsdGVyYmFua19jb21wdXRlX2JhbmszMihzdC0+YmFuaywgcHMsIHBzK04pOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfbm9pc2VfcHJvYihTcGVleFByZXByb2Nlc3NTdGF0ZSAqc3QpCit7CisgICBpbnQgaTsKKyAgIGludCBtaW5fcmFuZ2U7CisgICBpbnQgTiA9IHN0LT5wc19zaXplOworCisgICBmb3IgKGk9MTtpPE4tMTtpKyspCisgICAgICBzdC0+U1tpXSA9ICBNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC44ZiwxNSksc3QtPlNbaV0pICsgTVVMVDE2XzMyX1ExNShRQ09OU1QxNiguMDVmLDE1KSxzdC0+cHNbaS0xXSkgCisgICAgICAgICAgICAgICAgICAgICAgKyBNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC4xZiwxNSksc3QtPnBzW2ldKSArIE1VTFQxNl8zMl9RMTUoUUNPTlNUMTYoLjA1ZiwxNSksc3QtPnBzW2krMV0pOworICAgc3QtPlNbMF0gPSAgTVVMVDE2XzMyX1ExNShRQ09OU1QxNiguOGYsMTUpLHN0LT5TWzBdKSArIE1VTFQxNl8zMl9RMTUoUUNPTlNUMTYoLjJmLDE1KSxzdC0+cHNbMF0pOworICAgc3QtPlNbTi0xXSA9ICBNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC44ZiwxNSksc3QtPlNbTi0xXSkgKyBNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC4yZiwxNSksc3QtPnBzW04tMV0pOworICAgCisgICBpZiAoc3QtPm5iX2FkYXB0PT0xKQorICAgeworICAgICAgZm9yIChpPTA7aTxOO2krKykKKyAgICAgICAgIHN0LT5TbWluW2ldID0gc3QtPlN0bXBbaV0gPSAwOworICAgfQorCisgICBpZiAoc3QtPm5iX2FkYXB0IDwgMTAwKQorICAgICAgbWluX3JhbmdlID0gMTU7CisgICBlbHNlIGlmIChzdC0+bmJfYWRhcHQgPCAxMDAwKQorICAgICAgbWluX3JhbmdlID0gNTA7CisgICBlbHNlIGlmIChzdC0+bmJfYWRhcHQgPCAxMDAwMCkKKyAgICAgIG1pbl9yYW5nZSA9IDE1MDsKKyAgIGVsc2UKKyAgICAgIG1pbl9yYW5nZSA9IDMwMDsKKyAgIGlmIChzdC0+bWluX2NvdW50ID4gbWluX3JhbmdlKQorICAgeworICAgICAgc3QtPm1pbl9jb3VudCA9IDA7CisgICAgICBmb3IgKGk9MDtpPE47aSsrKQorICAgICAgeworICAgICAgICAgc3QtPlNtaW5baV0gPSBNSU4zMihzdC0+U3RtcFtpXSwgc3QtPlNbaV0pOworICAgICAgICAgc3QtPlN0bXBbaV0gPSBzdC0+U1tpXTsKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBmb3IgKGk9MDtpPE47aSsrKQorICAgICAgeworICAgICAgICAgc3QtPlNtaW5baV0gPSBNSU4zMihzdC0+U21pbltpXSwgc3QtPlNbaV0pOworICAgICAgICAgc3QtPlN0bXBbaV0gPSBNSU4zMihzdC0+U3RtcFtpXSwgc3QtPlNbaV0pOyAgICAgIAorICAgICAgfQorICAgfQorICAgZm9yIChpPTA7aTxOO2krKykKKyAgIHsKKyAgICAgIGlmIChNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC40ZiwxNSksc3QtPlNbaV0pID4gQUREMzIoc3QtPlNtaW5baV0sRVhURU5EMzIoMjApKSkKKyAgICAgICAgIHN0LT51cGRhdGVfcHJvYltpXSA9IDE7CisgICAgICBlbHNlCisgICAgICAgICBzdC0+dXBkYXRlX3Byb2JbaV0gPSAwOworICAgICAgLypmcHJpbnRmIChzdGRlcnIsICIlZiAiLCBzdC0+U1tpXS9zdC0+U21pbltpXSk7Ki8KKyAgICAgIC8qZnByaW50ZiAoc3RkZXJyLCAiJWYgIiwgc3QtPnVwZGF0ZV9wcm9iW2ldKTsqLworICAgfQorCit9CisKKyNkZWZpbmUgTk9JU0VfT1ZFUkNPTVBFTlMgMS4KKwordm9pZCBzcGVleF9lY2hvX2dldF9yZXNpZHVhbChTcGVleEVjaG9TdGF0ZSAqc3QsIHNweF93b3JkMzJfdCAqWW91dCwgaW50IGxlbik7CisKK2ludCBzcGVleF9wcmVwcm9jZXNzKFNwZWV4UHJlcHJvY2Vzc1N0YXRlICpzdCwgc3B4X2ludDE2X3QgKngsIHNweF9pbnQzMl90ICplY2hvKQoreworICAgcmV0dXJuIHNwZWV4X3ByZXByb2Nlc3NfcnVuKHN0LCB4KTsKK30KKworaW50IHNwZWV4X3ByZXByb2Nlc3NfcnVuKFNwZWV4UHJlcHJvY2Vzc1N0YXRlICpzdCwgc3B4X2ludDE2X3QgKngpCit7CisgICBpbnQgaTsKKyAgIGludCBNOworICAgaW50IE4gPSBzdC0+cHNfc2l6ZTsKKyAgIGludCBOMyA9IDIqTiAtIHN0LT5mcmFtZV9zaXplOworICAgaW50IE40ID0gc3QtPmZyYW1lX3NpemUgLSBOMzsKKyAgIHNweF93b3JkMzJfdCAqcHM9c3QtPnBzOworICAgc3B4X3dvcmQzMl90IFpmcmFtZTsKKyAgIHNweF93b3JkMTZfdCBQZnJhbWU7CisgICBzcHhfd29yZDE2X3QgYmV0YSwgYmV0YV8xOworICAgc3B4X3dvcmQxNl90IGVmZmVjdGl2ZV9lY2hvX3N1cHByZXNzOworICAgCisgICBzdC0+bmJfYWRhcHQrKzsKKyAgIHN0LT5taW5fY291bnQrKzsKKyAgIAorICAgYmV0YSA9IE1BWDE2KFFDT05TVDE2KC4wMywxNSksRElWMzJfMTYoUTE1X09ORSxzdC0+bmJfYWRhcHQpKTsKKyAgIGJldGFfMSA9IFExNV9PTkUtYmV0YTsKKyAgIE0gPSBzdC0+bmJhbmRzOworICAgLyogRGVhbCB3aXRoIHJlc2lkdWFsIGVjaG8gaWYgcHJvdmlkZWQgKi8KKyAgIGlmIChzdC0+ZWNob19zdGF0ZSkKKyAgIHsKKyAgICAgIHNwZWV4X2VjaG9fZ2V0X3Jlc2lkdWFsKHN0LT5lY2hvX3N0YXRlLCBzdC0+cmVzaWR1YWxfZWNobywgTik7CisjaWZuZGVmIEZJWEVEX1BPSU5UCisgICAgICAvKiBJZiB0aGVyZSBhcmUgTmFOcyBvciByaWRpY3Vsb3VzIHZhbHVlcywgaXQnbGwgc2hvdyB1cCBpbiB0aGUgREMgYW5kIHdlIGp1c3QgcmVzZXQgZXZlcnl0aGluZyB0byB6ZXJvICovCisgICAgICBpZiAoIShzdC0+cmVzaWR1YWxfZWNob1swXSA+PTAgJiYgc3QtPnJlc2lkdWFsX2VjaG9bMF08TioxZTlmKSkKKyAgICAgIHsKKyAgICAgICAgIGZvciAoaT0wO2k8TjtpKyspCisgICAgICAgICAgICBzdC0+cmVzaWR1YWxfZWNob1tpXSA9IDA7CisgICAgICB9CisjZW5kaWYKKyAgICAgIGZvciAoaT0wO2k8TjtpKyspCisgICAgICAgICBzdC0+ZWNob19ub2lzZVtpXSA9IE1BWDMyKE1VTFQxNl8zMl9RMTUoUUNPTlNUMTYoLjZmLDE1KSxzdC0+ZWNob19ub2lzZVtpXSksIHN0LT5yZXNpZHVhbF9lY2hvW2ldKTsKKyAgICAgIGZpbHRlcmJhbmtfY29tcHV0ZV9iYW5rMzIoc3QtPmJhbmssIHN0LT5lY2hvX25vaXNlLCBzdC0+ZWNob19ub2lzZStOKTsKKyAgIH0gZWxzZSB7CisgICAgICBmb3IgKGk9MDtpPE4rTTtpKyspCisgICAgICAgICBzdC0+ZWNob19ub2lzZVtpXSA9IDA7CisgICB9CisgICBwcmVwcm9jZXNzX2FuYWx5c2lzKHN0LCB4KTsKKworICAgdXBkYXRlX25vaXNlX3Byb2Ioc3QpOworCisgICAvKiBOb2lzZSBlc3RpbWF0aW9uIGFsd2F5cyB1cGRhdGVkIGZvciB0aGUgMTAgZmlyc3QgZnJhbWVzICovCisgICAvKmlmIChzdC0+bmJfYWRhcHQ8MTApCisgICB7CisgICAgICBmb3IgKGk9MTtpPE4tMTtpKyspCisgICAgICAgICBzdC0+dXBkYXRlX3Byb2JbaV0gPSAwOworICAgfQorICAgKi8KKyAgIAorICAgLyogVXBkYXRlIHRoZSBub2lzZSBlc3RpbWF0ZSBmb3IgdGhlIGZyZXF1ZW5jaWVzIHdoZXJlIGl0IGNhbiBiZSAqLworICAgZm9yIChpPTA7aTxOO2krKykKKyAgIHsKKyAgICAgIGlmICghc3QtPnVwZGF0ZV9wcm9iW2ldIHx8IHN0LT5wc1tpXSA8IFBTSFIzMihzdC0+bm9pc2VbaV0sIE5PSVNFX1NISUZUKSkKKyAgICAgICAgIHN0LT5ub2lzZVtpXSA9IE1BWDMyKEVYVEVORDMyKDApLE1VTFQxNl8zMl9RMTUoYmV0YV8xLHN0LT5ub2lzZVtpXSkgKyBNVUxUMTZfMzJfUTE1KGJldGEsU0hMMzIoc3QtPnBzW2ldLE5PSVNFX1NISUZUKSkpOworICAgfQorICAgZmlsdGVyYmFua19jb21wdXRlX2JhbmszMihzdC0+YmFuaywgc3QtPm5vaXNlLCBzdC0+bm9pc2UrTik7CisKKyAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgZmlyc3QgZnJhbWUgKi8KKyAgIGlmIChzdC0+bmJfYWRhcHQ9PTEpCisgICAgICBmb3IgKGk9MDtpPE4rTTtpKyspCisgICAgICAgICBzdC0+b2xkX3BzW2ldID0gcHNbaV07CisKKyAgIC8qIENvbXB1dGUgYSBwb3N0ZXJpb3JpIFNOUiAqLworICAgZm9yIChpPTA7aTxOK007aSsrKQorICAgeworICAgICAgc3B4X3dvcmQxNl90IGdhbW1hOworICAgICAgCisgICAgICAvKiBUb3RhbCBub2lzZSBlc3RpbWF0ZSBpbmNsdWRpbmcgcmVzaWR1YWwgZWNobyBhbmQgcmV2ZXJiZXJhdGlvbiAqLworICAgICAgc3B4X3dvcmQzMl90IHRvdF9ub2lzZSA9IEFERDMyKEFERDMyKEFERDMyKEVYVEVORDMyKDEpLCBQU0hSMzIoc3QtPm5vaXNlW2ldLE5PSVNFX1NISUZUKSkgLCBzdC0+ZWNob19ub2lzZVtpXSkgLCBzdC0+cmV2ZXJiX2VzdGltYXRlW2ldKTsKKyAgICAgIAorICAgICAgLyogQSBwb3N0ZXJpb3JpIFNOUiA9IHBzL25vaXNlIC0gMSovCisgICAgICBzdC0+cG9zdFtpXSA9IFNVQjE2KERJVjMyXzE2X1E4KHBzW2ldLHRvdF9ub2lzZSksIFFDT05TVDE2KDEuZixTTlJfU0hJRlQpKTsKKyAgICAgIHN0LT5wb3N0W2ldPU1JTjE2KHN0LT5wb3N0W2ldLCBRQ09OU1QxNigxMDAuZixTTlJfU0hJRlQpKTsKKyAgICAgIAorICAgICAgLyogQ29tcHV0aW5nIHVwZGF0ZSBnYW1tYSA9IC4xICsgLjkqKG9sZC8ob2xkK25vaXNlKSleMiAqLworICAgICAgZ2FtbWEgPSBRQ09OU1QxNiguMWYsMTUpK01VTFQxNl8xNl9RMTUoUUNPTlNUMTYoLjg5ZiwxNSksU1FSMTZfUTE1KERJVjMyXzE2X1ExNShzdC0+b2xkX3BzW2ldLEFERDMyKHN0LT5vbGRfcHNbaV0sdG90X25vaXNlKSkpKTsKKyAgICAgIAorICAgICAgLyogQSBwcmlvcmkgU05SIHVwZGF0ZSA9IGdhbW1hKm1heCgwLHBvc3QpICsgKDEtZ2FtbWEpKm9sZC9ub2lzZSAqLworICAgICAgc3QtPnByaW9yW2ldID0gRVhUUkFDVDE2KFBTSFIzMihBREQzMihNVUxUMTZfMTYoZ2FtbWEsTUFYMTYoMCxzdC0+cG9zdFtpXSkpLCBNVUxUMTZfMTYoUTE1X09ORS1nYW1tYSxESVYzMl8xNl9ROChzdC0+b2xkX3BzW2ldLHRvdF9ub2lzZSkpKSwgMTUpKTsKKyAgICAgIHN0LT5wcmlvcltpXT1NSU4xNihzdC0+cHJpb3JbaV0sIFFDT05TVDE2KDEwMC5mLFNOUl9TSElGVCkpOworICAgfQorCisgICAvKnByaW50X3ZlYyhzdC0+cG9zdCwgTitNLCAiIik7Ki8KKworICAgLyogUmVjdXJzaXZlIGF2ZXJhZ2Ugb2YgdGhlIGEgcHJpb3JpIFNOUi4gQSBiaXQgc21vb3RoZWQgZm9yIHRoZSBwc2QgY29tcG9uZW50cyAqLworICAgc3QtPnpldGFbMF0gPSBQU0hSMzIoQUREMzIoTVVMVDE2XzE2KFFDT05TVDE2KC43ZiwxNSksc3QtPnpldGFbMF0pLCBNVUxUMTZfMTYoUUNPTlNUMTYoLjNmLDE1KSxzdC0+cHJpb3JbMF0pKSwxNSk7CisgICBmb3IgKGk9MTtpPE4tMTtpKyspCisgICAgICBzdC0+emV0YVtpXSA9IFBTSFIzMihBREQzMihBREQzMihBREQzMihNVUxUMTZfMTYoUUNPTlNUMTYoLjdmLDE1KSxzdC0+emV0YVtpXSksIE1VTFQxNl8xNihRQ09OU1QxNiguMTVmLDE1KSxzdC0+cHJpb3JbaV0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1VTFQxNl8xNihRQ09OU1QxNiguMDc1ZiwxNSksc3QtPnByaW9yW2ktMV0pKSwgTVVMVDE2XzE2KFFDT05TVDE2KC4wNzVmLDE1KSxzdC0+cHJpb3JbaSsxXSkpLDE1KTsKKyAgIGZvciAoaT1OLTE7aTxOK007aSsrKQorICAgICAgc3QtPnpldGFbaV0gPSBQU0hSMzIoQUREMzIoTVVMVDE2XzE2KFFDT05TVDE2KC43ZiwxNSksc3QtPnpldGFbaV0pLCBNVUxUMTZfMTYoUUNPTlNUMTYoLjNmLDE1KSxzdC0+cHJpb3JbaV0pKSwxNSk7CisKKyAgIC8qIFNwZWVjaCBwcm9iYWJpbGl0eSBvZiBwcmVzZW5jZSBmb3IgdGhlIGVudGlyZSBmcmFtZSBpcyBiYXNlZCBvbiB0aGUgYXZlcmFnZSBmaWx0ZXJiYW5rIGEgcHJpb3JpIFNOUiAqLworICAgWmZyYW1lID0gMDsKKyAgIGZvciAoaT1OO2k8TitNO2krKykKKyAgICAgIFpmcmFtZSA9IEFERDMyKFpmcmFtZSwgRVhURU5EMzIoc3QtPnpldGFbaV0pKTsKKyAgIFBmcmFtZSA9IFFDT05TVDE2KC4xZiwxNSkrTVVMVDE2XzE2X1ExNShRQ09OU1QxNiguODk5ZiwxNSkscWN1cnZlKERJVjMyXzE2KFpmcmFtZSxzdC0+bmJhbmRzKSkpOworICAgCisgICBlZmZlY3RpdmVfZWNob19zdXBwcmVzcyA9IEVYVFJBQ1QxNihQU0hSMzIoQUREMzIoTVVMVDE2XzE2KFNVQjE2KFExNV9PTkUsUGZyYW1lKSwgc3QtPmVjaG9fc3VwcHJlc3MpLCBNVUxUMTZfMTYoUGZyYW1lLCBzdC0+ZWNob19zdXBwcmVzc19hY3RpdmUpKSwxNSkpOworICAgCisgICBjb21wdXRlX2dhaW5fZmxvb3Ioc3QtPm5vaXNlX3N1cHByZXNzLCBlZmZlY3RpdmVfZWNob19zdXBwcmVzcywgc3QtPm5vaXNlK04sIHN0LT5lY2hvX25vaXNlK04sIHN0LT5nYWluX2Zsb29yK04sIE0pOworICAgICAgICAgCisgICAvKiBDb21wdXRlIEVwaHJhaW0gJiBNYWxhaCBnYWluIHNwZWVjaCBwcm9iYWJpbGl0eSBvZiBwcmVzZW5jZSBmb3IgZWFjaCBjcml0aWNhbCBiYW5kIChCYXJrIHNjYWxlKSAKKyAgICAgIFRlY2huaWNhbGx5IHRoaXMgaXMgYWN0dWFsbHkgd3JvbmcgYmVjYXVzZSB0aGUgRU0gZ2FpbSBhc3N1bWVzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHByb2JhYmlsaXR5IAorICAgICAgZGlzdHJpYnV0aW9uICovCisgICBmb3IgKGk9TjtpPE4rTTtpKyspCisgICB7CisgICAgICAvKiBTZWUgRU0gYW5kIENvaGVuIHBhcGVycyovCisgICAgICBzcHhfd29yZDMyX3QgdGhldGE7CisgICAgICAvKiBHYWluIGZyb20gaHlwZXJnZW9tZXRyaWMgZnVuY3Rpb24gKi8KKyAgICAgIHNweF93b3JkMzJfdCBNTTsKKyAgICAgIC8qIFdlaW5lciBmaWx0ZXIgZ2FpbiAqLworICAgICAgc3B4X3dvcmQxNl90IHByaW9yX3JhdGlvOworICAgICAgLyogYSBwcmlvcml0eSBwcm9iYWJpbGl0eSBvZiBzcGVlY2ggcHJlc2VuY2UgYmFzZWQgb24gQmFyayBzdWItYmFuZCBhbG9uZSAqLworICAgICAgc3B4X3dvcmQxNl90IFAxOworICAgICAgLyogU3BlZWNoIGFic2VuY2UgYSBwcmlvcmkgcHJvYmFiaWxpdHkgKGNvbnNpZGVyaW5nIHN1Yi1iYW5kIGFuZCBmcmFtZSkgKi8KKyAgICAgIHNweF93b3JkMTZfdCBxOworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICBzcHhfd29yZDE2X3QgdG1wOworI2VuZGlmCisgICAgICAKKyAgICAgIHByaW9yX3JhdGlvID0gUERJVjMyXzE2KFNITDMyKEVYVEVORDMyKHN0LT5wcmlvcltpXSksIDE1KSwgQUREMTYoc3QtPnByaW9yW2ldLCBTSEwzMigxLFNOUl9TSElGVCkpKTsKKyAgICAgIHRoZXRhID0gTVVMVDE2XzMyX1AxNShwcmlvcl9yYXRpbywgUUNPTlNUMzIoMS5mLEVYUElOX1NISUZUKStTSEwzMihFWFRFTkQzMihzdC0+cG9zdFtpXSksRVhQSU5fU0hJRlQtU05SX1NISUZUKSk7CisKKyAgICAgIE1NID0gaHlwZXJnZW9tX2dhaW4odGhldGEpOworICAgICAgLyogR2FpbiB3aXRoIGJvdW5kICovCisgICAgICBzdC0+Z2FpbltpXSA9IEVYVFJBQ1QxNihNSU4zMihRMTVfT05FLCBNVUxUMTZfMzJfUTE1KHByaW9yX3JhdGlvLCBNTSkpKTsKKyAgICAgIC8qIFNhdmUgb2xkIEJhcmsgcG93ZXIgc3BlY3RydW0gKi8KKyAgICAgIHN0LT5vbGRfcHNbaV0gPSBNVUxUMTZfMzJfUDE1KFFDT05TVDE2KC4yZiwxNSksc3QtPm9sZF9wc1tpXSkgKyBNVUxUMTZfMzJfUDE1KE1VTFQxNl8xNl9QMTUoUUNPTlNUMTYoLjhmLDE1KSxTUVIxNl9RMTUoc3QtPmdhaW5baV0pKSxwc1tpXSk7CisKKyAgICAgIFAxID0gUUNPTlNUMTYoLjE5OWYsMTUpK01VTFQxNl8xNl9RMTUoUUNPTlNUMTYoLjhmLDE1KSxxY3VydmUgKHN0LT56ZXRhW2ldKSk7CisgICAgICBxID0gUTE1X09ORS1NVUxUMTZfMTZfUTE1KFBmcmFtZSxQMSk7CisjaWZkZWYgRklYRURfUE9JTlQKKyAgICAgIHRoZXRhID0gTUlOMzIodGhldGEsIEVYVEVORDMyKDMyNzY3KSk7CisvKlE4Ki90bXAgPSBNVUxUMTZfMTZfUTE1KChTSEwzMigxLFNOUl9TSElGVCkrc3QtPnByaW9yW2ldKSxFWFRSQUNUMTYoTUlOMzIoUTE1T05FLFNIUjMyKHNweF9leHAoLUVYVFJBQ1QxNih0aGV0YSkpLDEpKSkpOworICAgICAgdG1wID0gTUlOMTYoUUNPTlNUMTYoMy4sU05SX1NISUZUKSwgdG1wKTsgLyogUHJldmVudCBvdmVyZmxvd3MgaW4gdGhlIG5leHQgbGluZSovCisvKlE4Ki90bXAgPSBFWFRSQUNUMTYoUFNIUjMyKE1VTFQxNl8xNihQRElWMzJfMTYoU0hMMzIoRVhURU5EMzIocSksOCksKFExNV9PTkUtcSkpLHRtcCksOCkpOworICAgICAgc3QtPmdhaW4yW2ldPURJVjMyXzE2KFNITDMyKEVYVEVORDMyKDMyNzY3KSxTTlJfU0hJRlQpLCBBREQxNigyNTYsdG1wKSk7CisjZWxzZQorICAgICAgc3QtPmdhaW4yW2ldPTEvKDEuZiArIChxLygxLmYtcSkpKigxK3N0LT5wcmlvcltpXSkqZXhwKC10aGV0YSkpOworI2VuZGlmCisgICB9CisgICAvKiBDb252ZXJ0IHRoZSBFTSBnYWlucyBhbmQgc3BlZWNoIHByb2IgdG8gbGluZWFyIGZyZXF1ZW5jeSAqLworICAgZmlsdGVyYmFua19jb21wdXRlX3BzZDE2KHN0LT5iYW5rLHN0LT5nYWluMitOLCBzdC0+Z2FpbjIpOworICAgZmlsdGVyYmFua19jb21wdXRlX3BzZDE2KHN0LT5iYW5rLHN0LT5nYWluK04sIHN0LT5nYWluKTsKKyAgIAorICAgLyogVXNlIDEgZm9yIGxpbmVhciBnYWluIHJlc29sdXRpb24gKGJlc3QpIG9yIDAgZm9yIEJhcmsgZ2FpbiByZXNvbHV0aW9uIChmYXN0ZXIpICovCisgICBpZiAoMSkKKyAgIHsKKyAgICAgIGZpbHRlcmJhbmtfY29tcHV0ZV9wc2QxNihzdC0+YmFuayxzdC0+Z2Fpbl9mbG9vcitOLCBzdC0+Z2Fpbl9mbG9vcik7CisgICAKKyAgICAgIC8qIENvbXB1dGUgZ2FpbiBhY2NvcmRpbmcgdG8gdGhlIEVwaHJhaW0tTWFsYWggYWxnb3JpdGhtIC0tIGxpbmVhciBmcmVxdWVuY3kgKi8KKyAgICAgIGZvciAoaT0wO2k8TjtpKyspCisgICAgICB7CisgICAgICAgICBzcHhfd29yZDMyX3QgTU07CisgICAgICAgICBzcHhfd29yZDMyX3QgdGhldGE7CisgICAgICAgICBzcHhfd29yZDE2X3QgcHJpb3JfcmF0aW87CisgICAgICAgICBzcHhfd29yZDE2X3QgdG1wOworICAgICAgICAgc3B4X3dvcmQxNl90IHA7CisgICAgICAgICBzcHhfd29yZDE2X3QgZzsKKyAgICAgICAgIAorICAgICAgICAgLyogV2llbmVyIGZpbHRlciBnYWluICovCisgICAgICAgICBwcmlvcl9yYXRpbyA9IFBESVYzMl8xNihTSEwzMihFWFRFTkQzMihzdC0+cHJpb3JbaV0pLCAxNSksIEFERDE2KHN0LT5wcmlvcltpXSwgU0hMMzIoMSxTTlJfU0hJRlQpKSk7CisgICAgICAgICB0aGV0YSA9IE1VTFQxNl8zMl9QMTUocHJpb3JfcmF0aW8sIFFDT05TVDMyKDEuZixFWFBJTl9TSElGVCkrU0hMMzIoRVhURU5EMzIoc3QtPnBvc3RbaV0pLEVYUElOX1NISUZULVNOUl9TSElGVCkpOworCisgICAgICAgICAvKiBPcHRpbWFsIGVzdGltYXRvciBmb3IgbG91ZG5lc3MgZG9tYWluICovCisgICAgICAgICBNTSA9IGh5cGVyZ2VvbV9nYWluKHRoZXRhKTsKKyAgICAgICAgIC8qIEVNIGdhaW4gd2l0aCBib3VuZCAqLworICAgICAgICAgZyA9IEVYVFJBQ1QxNihNSU4zMihRMTVfT05FLCBNVUxUMTZfMzJfUTE1KHByaW9yX3JhdGlvLCBNTSkpKTsKKyAgICAgICAgIC8qIEludGVycG9sYXRlZCBzcGVlY2ggcHJvYmFiaWxpdHkgb2YgcHJlc2VuY2UgKi8KKyAgICAgICAgIHAgPSBzdC0+Z2FpbjJbaV07CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgIC8qIENvbnN0cmFpbiB0aGUgZ2FpbiB0byBiZSBjbG9zZSB0byB0aGUgQmFyayBzY2FsZSBnYWluICovCisgICAgICAgICBpZiAoTVVMVDE2XzE2X1ExNShRQ09OU1QxNiguMzMzZiwxNSksZykgPiBzdC0+Z2FpbltpXSkKKyAgICAgICAgICAgIGcgPSBNVUxUMTZfMTYoMyxzdC0+Z2FpbltpXSk7CisgICAgICAgICBzdC0+Z2FpbltpXSA9IGc7CisgICAgICAgICAKKyAgICAgICAgIC8qIFNhdmUgb2xkIHBvd2VyIHNwZWN0cnVtICovCisgICAgICAgICBzdC0+b2xkX3BzW2ldID0gTVVMVDE2XzMyX1AxNShRQ09OU1QxNiguMmYsMTUpLHN0LT5vbGRfcHNbaV0pICsgTVVMVDE2XzMyX1AxNShNVUxUMTZfMTZfUDE1KFFDT05TVDE2KC44ZiwxNSksU1FSMTZfUTE1KHN0LT5nYWluW2ldKSkscHNbaV0pOworICAgICAgICAgCisgICAgICAgICAvKiBBcHBseSBnYWluIGZsb29yICovCisgICAgICAgICBpZiAoc3QtPmdhaW5baV0gPCBzdC0+Z2Fpbl9mbG9vcltpXSkKKyAgICAgICAgICAgIHN0LT5nYWluW2ldID0gc3QtPmdhaW5fZmxvb3JbaV07CisKKyAgICAgICAgIC8qIEV4cG9uZW50aWFsIGRlY2F5IG1vZGVsIGZvciByZXZlcmJlcmF0aW9uICh1bnVzZWQpICovCisgICAgICAgICAvKnN0LT5yZXZlcmJfZXN0aW1hdGVbaV0gPSBzdC0+cmV2ZXJiX2RlY2F5KnN0LT5yZXZlcmJfZXN0aW1hdGVbaV0gKyBzdC0+cmV2ZXJiX2RlY2F5KnN0LT5yZXZlcmJfbGV2ZWwqc3QtPmdhaW5baV0qc3QtPmdhaW5baV0qc3QtPnBzW2ldOyovCisgICAgICAgICAKKyAgICAgICAgIC8qIFRha2UgaW50byBhY2NvdW50IHNwZWVjaCBwcm9iYWJpbGl0eSBvZiBwcmVzZW5jZSAobG91ZG5lc3MgZG9tYWluIE1NU0UgZXN0aW1hdG9yKSAqLworICAgICAgICAgLyogZ2FpbjIgPSBbcCpzcXJ0KGdhaW4pKygxLXApKnNxcnQoZ2FpbiBfZmxvb3IpIF1eMiAqLworICAgICAgICAgdG1wID0gTVVMVDE2XzE2X1AxNShwLHNweF9zcXJ0KFNITDMyKEVYVEVORDMyKHN0LT5nYWluW2ldKSwxNSkpKSArIE1VTFQxNl8xNl9QMTUoU1VCMTYoUTE1X09ORSxwKSxzcHhfc3FydChTSEwzMihFWFRFTkQzMihzdC0+Z2Fpbl9mbG9vcltpXSksMTUpKSk7CisgICAgICAgICBzdC0+Z2FpbjJbaV09U1FSMTZfUTE1KHRtcCk7CisKKyAgICAgICAgIC8qIFVzZSB0aGlzIGlmIHlvdSB3YW50IGEgbG9nLWRvbWFpbiBNTVNFIGVzdGltYXRvciBpbnN0ZWFkICovCisgICAgICAgICAvKnN0LT5nYWluMltpXSA9IHBvdyhzdC0+Z2FpbltpXSwgcCkgKiBwb3coc3QtPmdhaW5fZmxvb3JbaV0sMS5mLXApOyovCisgICAgICB9CisgICB9IGVsc2UgeworICAgICAgZm9yIChpPU47aTxOK007aSsrKQorICAgICAgeworICAgICAgICAgc3B4X3dvcmQxNl90IHRtcDsKKyAgICAgICAgIHNweF93b3JkMTZfdCBwID0gc3QtPmdhaW4yW2ldOworICAgICAgICAgc3QtPmdhaW5baV0gPSBNQVgxNihzdC0+Z2FpbltpXSwgc3QtPmdhaW5fZmxvb3JbaV0pOyAgICAgICAgIAorICAgICAgICAgdG1wID0gTVVMVDE2XzE2X1AxNShwLHNweF9zcXJ0KFNITDMyKEVYVEVORDMyKHN0LT5nYWluW2ldKSwxNSkpKSArIE1VTFQxNl8xNl9QMTUoU1VCMTYoUTE1X09ORSxwKSxzcHhfc3FydChTSEwzMihFWFRFTkQzMihzdC0+Z2Fpbl9mbG9vcltpXSksMTUpKSk7CisgICAgICAgICBzdC0+Z2FpbjJbaV09U1FSMTZfUTE1KHRtcCk7CisgICAgICB9CisgICAgICBmaWx0ZXJiYW5rX2NvbXB1dGVfcHNkMTYoc3QtPmJhbmssc3QtPmdhaW4yK04sIHN0LT5nYWluMik7CisgICB9CisgICAKKyAgIC8qIElmIG5vaXNlIHN1cHByZXNzaW9uIGlzIG9mZiwgZG9uJ3QgYXBwbHkgdGhlIGdhaW4gKGJ1dCB0aGVuIHdoeSBjYWxsIHRoaXMgaW4gdGhlIGZpcnN0IHBsYWNlISkgKi8KKyAgIGlmICghc3QtPmRlbm9pc2VfZW5hYmxlZCkKKyAgIHsKKyAgICAgIGZvciAoaT0wO2k8TitNO2krKykKKyAgICAgICAgIHN0LT5nYWluMltpXT1RMTVfT05FOworICAgfQorICAgICAgCisgICAvKiBBcHBseSBjb21wdXRlZCBnYWluICovCisgICBmb3IgKGk9MTtpPE47aSsrKQorICAgeworICAgICAgc3QtPmZ0WzIqaS0xXSA9IE1VTFQxNl8xNl9QMTUoc3QtPmdhaW4yW2ldLHN0LT5mdFsyKmktMV0pOworICAgICAgc3QtPmZ0WzIqaV0gPSBNVUxUMTZfMTZfUDE1KHN0LT5nYWluMltpXSxzdC0+ZnRbMippXSk7CisgICB9CisgICBzdC0+ZnRbMF0gPSBNVUxUMTZfMTZfUDE1KHN0LT5nYWluMlswXSxzdC0+ZnRbMF0pOworICAgc3QtPmZ0WzIqTi0xXSA9IE1VTFQxNl8xNl9QMTUoc3QtPmdhaW4yW04tMV0sc3QtPmZ0WzIqTi0xXSk7CisgICAKKyAgIC8qRklYTUU6IFRoaXMgKndpbGwqIG5vdCB3b3JrIGZvciBmaXhlZC1wb2ludCAqLworI2lmbmRlZiBGSVhFRF9QT0lOVAorICAgaWYgKHN0LT5hZ2NfZW5hYmxlZCkKKyAgICAgIHNwZWV4X2NvbXB1dGVfYWdjKHN0LCBQZnJhbWUsIHN0LT5mdCk7CisjZW5kaWYKKworICAgLyogSW52ZXJzZSBGRlQgd2l0aCAxL04gc2NhbGluZyAqLworICAgc3B4X2lmZnQoc3QtPmZmdF9sb29rdXAsIHN0LT5mdCwgc3QtPmZyYW1lKTsKKyAgIC8qIFNjYWxlIGJhY2sgdG8gb3JpZ2luYWwgKGxvd2VyKSBhbXBsaXR1ZGUgKi8KKyAgIGZvciAoaT0wO2k8MipOO2krKykKKyAgICAgIHN0LT5mcmFtZVtpXSA9IFBTSFIxNihzdC0+ZnJhbWVbaV0sIHN0LT5mcmFtZV9zaGlmdCk7CisKKyAgIC8qRklYTUU6IFRoaXMgKndpbGwqIG5vdCB3b3JrIGZvciBmaXhlZC1wb2ludCAqLworI2lmbmRlZiBGSVhFRF9QT0lOVAorICAgaWYgKHN0LT5hZ2NfZW5hYmxlZCkKKyAgIHsKKyAgICAgIGZsb2F0IG1heF9zYW1wbGU9MDsKKyAgICAgIGZvciAoaT0wO2k8MipOO2krKykKKyAgICAgICAgIGlmIChmYWJzKHN0LT5mcmFtZVtpXSk+bWF4X3NhbXBsZSkKKyAgICAgICAgICAgIG1heF9zYW1wbGUgPSBmYWJzKHN0LT5mcmFtZVtpXSk7CisgICAgICBpZiAobWF4X3NhbXBsZT4yODAwMC5mKQorICAgICAgeworICAgICAgICAgZmxvYXQgZGFtcCA9IDI4MDAwLmYvbWF4X3NhbXBsZTsKKyAgICAgICAgIGZvciAoaT0wO2k8MipOO2krKykKKyAgICAgICAgICAgIHN0LT5mcmFtZVtpXSAqPSBkYW1wOworICAgICAgfQorICAgfQorI2VuZGlmCisgICAKKyAgIC8qIFN5bnRoZXNpcyB3aW5kb3cgKGZvciBXT0xBKSAqLworICAgZm9yIChpPTA7aTwyKk47aSsrKQorICAgICAgc3QtPmZyYW1lW2ldID0gTVVMVDE2XzE2X1ExNShzdC0+ZnJhbWVbaV0sIHN0LT53aW5kb3dbaV0pOworCisgICAvKiBQZXJmb3JtIG92ZXJsYXAgYW5kIGFkZCAqLworICAgZm9yIChpPTA7aTxOMztpKyspCisgICAgICB4W2ldID0gc3QtPm91dGJ1ZltpXSArIHN0LT5mcmFtZVtpXTsKKyAgIGZvciAoaT0wO2k8TjQ7aSsrKQorICAgICAgeFtOMytpXSA9IHN0LT5mcmFtZVtOMytpXTsKKyAgIAorICAgLyogVXBkYXRlIG91dGJ1ZiAqLworICAgZm9yIChpPTA7aTxOMztpKyspCisgICAgICBzdC0+b3V0YnVmW2ldID0gc3QtPmZyYW1lW3N0LT5mcmFtZV9zaXplK2ldOworCisgICAvKiBGSVhNRTogVGhpcyBWQUQgaXMgYSBrbHVkZ2UgKi8KKyAgIGlmIChzdC0+dmFkX2VuYWJsZWQpCisgICB7CisgICAgICBpZiAoUGZyYW1lID4gc3QtPnNwZWVjaF9wcm9iX3N0YXJ0IHx8IChzdC0+d2FzX3NwZWVjaCAmJiBQZnJhbWUgPiBzdC0+c3BlZWNoX3Byb2JfY29udGludWUpKQorICAgICAgeworICAgICAgICAgc3QtPndhc19zcGVlY2g9MTsKKyAgICAgICAgIHJldHVybiAxOworICAgICAgfSBlbHNlCisgICAgICB7CisgICAgICAgICBzdC0+d2FzX3NwZWVjaD0wOworICAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIDE7CisgICB9Cit9CisKK3ZvaWQgc3BlZXhfcHJlcHJvY2Vzc19lc3RpbWF0ZV91cGRhdGUoU3BlZXhQcmVwcm9jZXNzU3RhdGUgKnN0LCBzcHhfaW50MTZfdCAqeCkKK3sKKyAgIGludCBpOworICAgaW50IE4gPSBzdC0+cHNfc2l6ZTsKKyAgIGludCBOMyA9IDIqTiAtIHN0LT5mcmFtZV9zaXplOworICAgaW50IE07CisgICBzcHhfd29yZDMyX3QgKnBzPXN0LT5wczsKKworICAgTSA9IHN0LT5uYmFuZHM7CisgICBzdC0+bWluX2NvdW50Kys7CisgICAKKyAgIHByZXByb2Nlc3NfYW5hbHlzaXMoc3QsIHgpOworCisgICB1cGRhdGVfbm9pc2VfcHJvYihzdCk7CisgICAKKyAgIGZvciAoaT0xO2k8Ti0xO2krKykKKyAgIHsKKyAgICAgIGlmICghc3QtPnVwZGF0ZV9wcm9iW2ldIHx8IHN0LT5wc1tpXSA8IFBTSFIzMihzdC0+bm9pc2VbaV0sTk9JU0VfU0hJRlQpKQorICAgICAgeworICAgICAgICAgc3QtPm5vaXNlW2ldID0gTVVMVDE2XzMyX1ExNShRQ09OU1QxNiguOTVmLDE1KSxzdC0+bm9pc2VbaV0pICsgTVVMVDE2XzMyX1ExNShRQ09OU1QxNiguMDVmLDE1KSxTSEwzMihzdC0+cHNbaV0sTk9JU0VfU0hJRlQpKTsKKyAgICAgIH0KKyAgIH0KKworICAgZm9yIChpPTA7aTxOMztpKyspCisgICAgICBzdC0+b3V0YnVmW2ldID0gTVVMVDE2XzE2X1ExNSh4W3N0LT5mcmFtZV9zaXplLU4zK2ldLHN0LT53aW5kb3dbc3QtPmZyYW1lX3NpemUraV0pOworCisgICAvKiBTYXZlIG9sZCBwb3dlciBzcGVjdHJ1bSAqLworICAgZm9yIChpPTA7aTxOK007aSsrKQorICAgICAgc3QtPm9sZF9wc1tpXSA9IHBzW2ldOworCisgICBmb3IgKGk9MDtpPE47aSsrKQorICAgICAgc3QtPnJldmVyYl9lc3RpbWF0ZVtpXSA9IE1VTFQxNl8zMl9RMTUoc3QtPnJldmVyYl9kZWNheSwgc3QtPnJldmVyYl9lc3RpbWF0ZVtpXSk7Cit9CisKKworaW50IHNwZWV4X3ByZXByb2Nlc3NfY3RsKFNwZWV4UHJlcHJvY2Vzc1N0YXRlICpzdGF0ZSwgaW50IHJlcXVlc3QsIHZvaWQgKnB0cikKK3sKKyAgIGludCBpOworICAgU3BlZXhQcmVwcm9jZXNzU3RhdGUgKnN0OworICAgc3Q9KFNwZWV4UHJlcHJvY2Vzc1N0YXRlKilzdGF0ZTsKKyAgIHN3aXRjaChyZXF1ZXN0KQorICAgeworICAgY2FzZSBTUEVFWF9QUkVQUk9DRVNTX1NFVF9ERU5PSVNFOgorICAgICAgc3QtPmRlbm9pc2VfZW5hYmxlZCA9ICgqKHNweF9pbnQzMl90KilwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1BSRVBST0NFU1NfR0VUX0RFTk9JU0U6CisgICAgICAoKihzcHhfaW50MzJfdCopcHRyKSA9IHN0LT5kZW5vaXNlX2VuYWJsZWQ7CisgICAgICBicmVhazsKKyNpZm5kZWYgRklYRURfUE9JTlQKKyAgIGNhc2UgU1BFRVhfUFJFUFJPQ0VTU19TRVRfQUdDOgorICAgICAgc3QtPmFnY19lbmFibGVkID0gKCooc3B4X2ludDMyX3QqKXB0cik7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfUFJFUFJPQ0VTU19HRVRfQUdDOgorICAgICAgKCooc3B4X2ludDMyX3QqKXB0cikgPSBzdC0+YWdjX2VuYWJsZWQ7CisgICAgICBicmVhazsKKworICAgY2FzZSBTUEVFWF9QUkVQUk9DRVNTX1NFVF9BR0NfTEVWRUw6CisgICAgICBzdC0+YWdjX2xldmVsID0gKCooZmxvYXQqKXB0cik7CisgICAgICBpZiAoc3QtPmFnY19sZXZlbDwxKQorICAgICAgICAgc3QtPmFnY19sZXZlbD0xOworICAgICAgaWYgKHN0LT5hZ2NfbGV2ZWw+MzI3NjgpCisgICAgICAgICBzdC0+YWdjX2xldmVsPTMyNzY4OworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1BSRVBST0NFU1NfR0VUX0FHQ19MRVZFTDoKKyAgICAgICgqKGZsb2F0KilwdHIpID0gc3QtPmFnY19sZXZlbDsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9QUkVQUk9DRVNTX1NFVF9BR0NfSU5DUkVNRU5UOgorICAgICAgc3QtPm1heF9pbmNyZWFzZV9zdGVwID0gZXhwKDAuMTE1MTNmICogKCooc3B4X2ludDMyX3QqKXB0cikqc3QtPmZyYW1lX3NpemUgLyBzdC0+c2FtcGxpbmdfcmF0ZSk7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfUFJFUFJPQ0VTU19HRVRfQUdDX0lOQ1JFTUVOVDoKKyAgICAgICgqKHNweF9pbnQzMl90KilwdHIpID0gZmxvb3IoLjUrOC42ODU4KmxvZyhzdC0+bWF4X2luY3JlYXNlX3N0ZXApKnN0LT5zYW1wbGluZ19yYXRlL3N0LT5mcmFtZV9zaXplKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9QUkVQUk9DRVNTX1NFVF9BR0NfREVDUkVNRU5UOgorICAgICAgc3QtPm1heF9kZWNyZWFzZV9zdGVwID0gZXhwKDAuMTE1MTNmICogKCooc3B4X2ludDMyX3QqKXB0cikqc3QtPmZyYW1lX3NpemUgLyBzdC0+c2FtcGxpbmdfcmF0ZSk7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfUFJFUFJPQ0VTU19HRVRfQUdDX0RFQ1JFTUVOVDoKKyAgICAgICgqKHNweF9pbnQzMl90KilwdHIpID0gZmxvb3IoLjUrOC42ODU4KmxvZyhzdC0+bWF4X2RlY3JlYXNlX3N0ZXApKnN0LT5zYW1wbGluZ19yYXRlL3N0LT5mcmFtZV9zaXplKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9QUkVQUk9DRVNTX1NFVF9BR0NfTUFYX0dBSU46CisgICAgICBzdC0+bWF4X2dhaW4gPSBleHAoMC4xMTUxM2YgKiAoKihzcHhfaW50MzJfdCopcHRyKSk7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfUFJFUFJPQ0VTU19HRVRfQUdDX01BWF9HQUlOOgorICAgICAgKCooc3B4X2ludDMyX3QqKXB0cikgPSBmbG9vciguNSs4LjY4NTgqbG9nKHN0LT5tYXhfZ2FpbikpOworICAgICAgYnJlYWs7CisjZW5kaWYKKyAgIGNhc2UgU1BFRVhfUFJFUFJPQ0VTU19TRVRfVkFEOgorICAgICAgc3BlZXhfd2FybmluZygiVGhlIFZBRCBoYXMgYmVlbiByZXBsYWNlZCBieSBhIGhhY2sgcGVuZGluZyBhIGNvbXBsZXRlIHJld3JpdGUiKTsKKyAgICAgIHN0LT52YWRfZW5hYmxlZCA9ICgqKHNweF9pbnQzMl90KilwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1BSRVBST0NFU1NfR0VUX1ZBRDoKKyAgICAgICgqKHNweF9pbnQzMl90KilwdHIpID0gc3QtPnZhZF9lbmFibGVkOworICAgICAgYnJlYWs7CisgICAKKyAgIGNhc2UgU1BFRVhfUFJFUFJPQ0VTU19TRVRfREVSRVZFUkI6CisgICAgICBzdC0+ZGVyZXZlcmJfZW5hYmxlZCA9ICgqKHNweF9pbnQzMl90KilwdHIpOworICAgICAgZm9yIChpPTA7aTxzdC0+cHNfc2l6ZTtpKyspCisgICAgICAgICBzdC0+cmV2ZXJiX2VzdGltYXRlW2ldPTA7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfUFJFUFJPQ0VTU19HRVRfREVSRVZFUkI6CisgICAgICAoKihzcHhfaW50MzJfdCopcHRyKSA9IHN0LT5kZXJldmVyYl9lbmFibGVkOworICAgICAgYnJlYWs7CisKKyAgIGNhc2UgU1BFRVhfUFJFUFJPQ0VTU19TRVRfREVSRVZFUkJfTEVWRUw6CisgICAgICBzdC0+cmV2ZXJiX2xldmVsID0gKCooZmxvYXQqKXB0cik7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfUFJFUFJPQ0VTU19HRVRfREVSRVZFUkJfTEVWRUw6CisgICAgICAoKihmbG9hdCopcHRyKSA9IHN0LT5yZXZlcmJfbGV2ZWw7CisgICAgICBicmVhazsKKyAgIAorICAgY2FzZSBTUEVFWF9QUkVQUk9DRVNTX1NFVF9ERVJFVkVSQl9ERUNBWToKKyAgICAgIHN0LT5yZXZlcmJfZGVjYXkgPSAoKihmbG9hdCopcHRyKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9QUkVQUk9DRVNTX0dFVF9ERVJFVkVSQl9ERUNBWToKKyAgICAgICgqKGZsb2F0KilwdHIpID0gc3QtPnJldmVyYl9kZWNheTsKKyAgICAgIGJyZWFrOworCisgICBjYXNlIFNQRUVYX1BSRVBST0NFU1NfU0VUX1BST0JfU1RBUlQ6CisgICAgICAqKHNweF9pbnQzMl90KilwdHIgPSBNSU4zMihRMTVfT05FLE1BWDMyKDAsICooc3B4X2ludDMyX3QqKXB0cikpOworICAgICAgc3QtPnNwZWVjaF9wcm9iX3N0YXJ0ID0gRElWMzJfMTYoTVVMVDE2XzE2KDMyNzY3LCooc3B4X2ludDMyX3QqKXB0ciksIDEwMCk7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfUFJFUFJPQ0VTU19HRVRfUFJPQl9TVEFSVDoKKyAgICAgICgqKHNweF9pbnQzMl90KilwdHIpID0gTVVMVDE2XzE2X1ExNShzdC0+c3BlZWNoX3Byb2Jfc3RhcnQsIDEwMCk7CisgICAgICBicmVhazsKKworICAgY2FzZSBTUEVFWF9QUkVQUk9DRVNTX1NFVF9QUk9CX0NPTlRJTlVFOgorICAgICAgKihzcHhfaW50MzJfdCopcHRyID0gTUlOMzIoUTE1X09ORSxNQVgzMigwLCAqKHNweF9pbnQzMl90KilwdHIpKTsKKyAgICAgIHN0LT5zcGVlY2hfcHJvYl9jb250aW51ZSA9IERJVjMyXzE2KE1VTFQxNl8xNigzMjc2NywqKHNweF9pbnQzMl90KilwdHIpLCAxMDApOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1BSRVBST0NFU1NfR0VUX1BST0JfQ09OVElOVUU6CisgICAgICAoKihzcHhfaW50MzJfdCopcHRyKSA9IE1VTFQxNl8xNl9RMTUoc3QtPnNwZWVjaF9wcm9iX2NvbnRpbnVlLCAxMDApOworICAgICAgYnJlYWs7CisKKyAgIGNhc2UgU1BFRVhfUFJFUFJPQ0VTU19TRVRfTk9JU0VfU1VQUFJFU1M6CisgICAgICBzdC0+bm9pc2Vfc3VwcHJlc3MgPSAtQUJTKCooc3B4X2ludDMyX3QqKXB0cik7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfUFJFUFJPQ0VTU19HRVRfTk9JU0VfU1VQUFJFU1M6CisgICAgICAoKihzcHhfaW50MzJfdCopcHRyKSA9IHN0LT5ub2lzZV9zdXBwcmVzczsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9QUkVQUk9DRVNTX1NFVF9FQ0hPX1NVUFBSRVNTOgorICAgICAgc3QtPmVjaG9fc3VwcHJlc3MgPSAtQUJTKCooc3B4X2ludDMyX3QqKXB0cik7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfUFJFUFJPQ0VTU19HRVRfRUNIT19TVVBQUkVTUzoKKyAgICAgICgqKHNweF9pbnQzMl90KilwdHIpID0gc3QtPmVjaG9fc3VwcHJlc3M7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfUFJFUFJPQ0VTU19TRVRfRUNIT19TVVBQUkVTU19BQ1RJVkU6CisgICAgICBzdC0+ZWNob19zdXBwcmVzc19hY3RpdmUgPSAtQUJTKCooc3B4X2ludDMyX3QqKXB0cik7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfUFJFUFJPQ0VTU19HRVRfRUNIT19TVVBQUkVTU19BQ1RJVkU6CisgICAgICAoKihzcHhfaW50MzJfdCopcHRyKSA9IHN0LT5lY2hvX3N1cHByZXNzX2FjdGl2ZTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9QUkVQUk9DRVNTX1NFVF9FQ0hPX1NUQVRFOgorICAgICAgc3QtPmVjaG9fc3RhdGUgPSAoU3BlZXhFY2hvU3RhdGUqKXB0cjsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9QUkVQUk9DRVNTX0dFVF9FQ0hPX1NUQVRFOgorICAgICAgcHRyID0gKHZvaWQqKXN0LT5lY2hvX3N0YXRlOworICAgICAgYnJlYWs7CisKKyAgIGRlZmF1bHQ6CisgICAgICBzcGVleF93YXJuaW5nX2ludCgiVW5rbm93biBzcGVleF9wcmVwcm9jZXNzX2N0bCByZXF1ZXN0OiAiLCByZXF1ZXN0KTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKyAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvcHNldWRvZmxvYXQuaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3BzZXVkb2Zsb2F0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjNDc2MgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3BzZXVkb2Zsb2F0LmgKQEAgLTAsMCArMSwzNzggQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNSBKZWFuLU1hcmMgVmFsaW4gKi8KKy8qKgorICAgQGZpbGUgcHNldWRvZmxvYXQuaAorICAgQGJyaWVmIFBzZXVkby1mbG9hdGluZyBwb2ludAorICogVGhpcyBoZWFkZXIgZmlsZSBwcm92aWRlcyBhIGxpZ2h0d2VpZ2h0IGZsb2F0aW5nIHBvaW50IHR5cGUgZm9yCisgKiB1c2Ugb24gZml4ZWQtcG9pbnQgcGxhdGZvcm1zIHdoZW4gYSBsYXJnZSBkeW5hbWljIHJhbmdlIGlzIAorICogcmVxdWlyZWQuIFRoZSBuZXcgdHlwZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSAzMi1iaXQgSUVFRSBmb3JtYXQsCisgKiBpdCBpcyBub3QgZXZlbiByZW1vdGVseSBhcyBhY2N1cmF0ZSBhcyAzMi1iaXQgZmxvYXRzLCBhbmQgaXMgbm90CisgKiBldmVuIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBldmVuIHJlbW90ZWx5IGNvcnJlY3QgcmVzdWx0cyBmb3IgY29kZQorICogb3RoZXIgdGhhbiBTcGVleC4gSXQgbWFrZXMgYWxsIGtpbmRzIG9mIHNob3J0Y3V0cyB0aGF0IGFyZSBhY2NlcHRhYmxlCisgKiBmb3IgU3BlZXgsIGJ1dCBtYXkgbm90IGJlIGFjY2VwdGFibGUgZm9yIHlvdXIgYXBwbGljYXRpb24uIFlvdSdyZQorICogcXVpdGUgd2VsY29tZSB0byByZXVzZSB0aGlzIGNvZGUgYW5kIGltcHJvdmUgaXQsIGJ1dCBkb24ndCBhc3N1bWUKKyAqIGl0IHdvcmtzIG91dCBvZiB0aGUgYm94LiBNb3N0IGxpa2VseSwgaXQgZG9lc24ndC4KKyAqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBQU0VVRE9GTE9BVF9ICisjZGVmaW5lIFBTRVVET0ZMT0FUX0gKKworI2luY2x1ZGUgIm1pc2MuaCIKKyNpbmNsdWRlICJtYXRoX2FwcHJveC5oIgorI2luY2x1ZGUgPG1hdGguaD4KKworI2lmZGVmIEZJWEVEX1BPSU5UCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIHNweF9pbnQxNl90IG07CisgICBzcHhfaW50MTZfdCBlOworfSBzcHhfZmxvYXRfdDsKKworc3RhdGljIGNvbnN0IHNweF9mbG9hdF90IEZMT0FUX1pFUk8gPSB7MCwwfTsKK3N0YXRpYyBjb25zdCBzcHhfZmxvYXRfdCBGTE9BVF9PTkUgPSB7MTYzODQsLTE0fTsKK3N0YXRpYyBjb25zdCBzcHhfZmxvYXRfdCBGTE9BVF9IQUxGID0gezE2Mzg0LC0xNX07CisKKyNkZWZpbmUgTUlOKGEsYikgKChhKTwoYik/KGEpOihiKSkKK3N0YXRpYyBpbmxpbmUgc3B4X2Zsb2F0X3QgUFNFVURPRkxPQVQoc3B4X2ludDMyX3QgeCkKK3sKKyAgIGludCBlPTA7CisgICBpbnQgc2lnbj0wOworICAgaWYgKHg8MCkKKyAgIHsKKyAgICAgIHNpZ24gPSAxOworICAgICAgeCA9IC14OworICAgfQorICAgaWYgKHg9PTApCisgICB7CisgICAgICBzcHhfZmxvYXRfdCByID0gezAsMH07CisgICAgICByZXR1cm4gcjsKKyAgIH0KKyAgIGUgPSBzcHhfaWxvZzIoQUJTMzIoeCkpLTE0OworICAgeCA9IFZTSFIzMih4LCBlKTsKKyAgIGlmIChzaWduKQorICAgeworICAgICAgc3B4X2Zsb2F0X3QgcjsKKyAgICAgIHIubSA9IC14OworICAgICAgci5lID0gZTsKKyAgICAgIHJldHVybiByOworICAgfQorICAgZWxzZSAgICAgIAorICAgeworICAgICAgc3B4X2Zsb2F0X3QgcjsKKyAgICAgIHIubSA9IHg7CisgICAgICByLmUgPSBlOworICAgICAgcmV0dXJuIHI7CisgICB9Cit9CisKKworc3RhdGljIGlubGluZSBzcHhfZmxvYXRfdCBGTE9BVF9BREQoc3B4X2Zsb2F0X3QgYSwgc3B4X2Zsb2F0X3QgYikKK3sKKyAgIHNweF9mbG9hdF90IHI7CisgICBpZiAoYS5tPT0wKQorICAgICAgcmV0dXJuIGI7CisgICBlbHNlIGlmIChiLm09PTApCisgICAgICByZXR1cm4gYTsKKyAgIGlmICgoYSkuZSA+IChiKS5lKSAKKyAgIHsKKyAgICAgIHIubSA9ICgoYSkubT4+MSkgKyAoKGIpLm0+Pk1JTigxNSwoYSkuZS0oYikuZSsxKSk7CisgICAgICByLmUgPSAoYSkuZSsxOworICAgfQorICAgZWxzZSAKKyAgIHsKKyAgICAgIHIubSA9ICgoYikubT4+MSkgKyAoKGEpLm0+Pk1JTigxNSwoYikuZS0oYSkuZSsxKSk7CisgICAgICByLmUgPSAoYikuZSsxOworICAgfQorICAgaWYgKHIubT4wKQorICAgeworICAgICAgaWYgKHIubTwxNjM4NCkKKyAgICAgIHsKKyAgICAgICAgIHIubTw8PTE7CisgICAgICAgICByLmUtPTE7CisgICAgICB9CisgICB9IGVsc2UgeworICAgICAgaWYgKHIubT4tMTYzODQpCisgICAgICB7CisgICAgICAgICByLm08PD0xOworICAgICAgICAgci5lLT0xOworICAgICAgfQorICAgfQorICAgLypwcmludGYgKCIlZiArICVmID0gJWZcbiIsIFJFQUxGTE9BVChhKSwgUkVBTEZMT0FUKGIpLCBSRUFMRkxPQVQocikpOyovCisgICByZXR1cm4gcjsKK30KKworc3RhdGljIGlubGluZSBzcHhfZmxvYXRfdCBGTE9BVF9TVUIoc3B4X2Zsb2F0X3QgYSwgc3B4X2Zsb2F0X3QgYikKK3sKKyAgIHNweF9mbG9hdF90IHI7CisgICBpZiAoYS5tPT0wKQorICAgICAgcmV0dXJuIGI7CisgICBlbHNlIGlmIChiLm09PTApCisgICAgICByZXR1cm4gYTsKKyAgIGlmICgoYSkuZSA+IChiKS5lKQorICAgeworICAgICAgci5tID0gKChhKS5tPj4xKSAtICgoYikubT4+TUlOKDE1LChhKS5lLShiKS5lKzEpKTsKKyAgICAgIHIuZSA9IChhKS5lKzE7CisgICB9CisgICBlbHNlIAorICAgeworICAgICAgci5tID0gKChhKS5tPj5NSU4oMTUsKGIpLmUtKGEpLmUrMSkpIC0gKChiKS5tPj4xKTsKKyAgICAgIHIuZSA9IChiKS5lKzE7CisgICB9CisgICBpZiAoci5tPjApCisgICB7CisgICAgICBpZiAoci5tPDE2Mzg0KQorICAgICAgeworICAgICAgICAgci5tPDw9MTsKKyAgICAgICAgIHIuZS09MTsKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBpZiAoci5tPi0xNjM4NCkKKyAgICAgIHsKKyAgICAgICAgIHIubTw8PTE7CisgICAgICAgICByLmUtPTE7CisgICAgICB9CisgICB9CisgICAvKnByaW50ZiAoIiVmICsgJWYgPSAlZlxuIiwgUkVBTEZMT0FUKGEpLCBSRUFMRkxPQVQoYiksIFJFQUxGTE9BVChyKSk7Ki8KKyAgIHJldHVybiByOworfQorCitzdGF0aWMgaW5saW5lIGludCBGTE9BVF9MVChzcHhfZmxvYXRfdCBhLCBzcHhfZmxvYXRfdCBiKQoreworICAgaWYgKGEubT09MCkKKyAgICAgIHJldHVybiBiLm0+MDsKKyAgIGVsc2UgaWYgKGIubT09MCkKKyAgICAgIHJldHVybiBhLm08MDsgICAKKyAgIGlmICgoYSkuZSA+IChiKS5lKQorICAgICAgcmV0dXJuICgoYSkubT4+MSkgPCAoKGIpLm0+Pk1JTigxNSwoYSkuZS0oYikuZSsxKSk7CisgICBlbHNlIAorICAgICAgcmV0dXJuICgoYikubT4+MSkgPiAoKGEpLm0+Pk1JTigxNSwoYikuZS0oYSkuZSsxKSk7CisKK30KKworc3RhdGljIGlubGluZSBpbnQgRkxPQVRfR1Qoc3B4X2Zsb2F0X3QgYSwgc3B4X2Zsb2F0X3QgYikKK3sKKyAgIHJldHVybiBGTE9BVF9MVChiLGEpOworfQorCitzdGF0aWMgaW5saW5lIHNweF9mbG9hdF90IEZMT0FUX01VTFQoc3B4X2Zsb2F0X3QgYSwgc3B4X2Zsb2F0X3QgYikKK3sKKyAgIHNweF9mbG9hdF90IHI7CisgICByLm0gPSAoc3B4X2ludDE2X3QpKChzcHhfaW50MzJfdCkoYSkubSooYikubT4+MTUpOworICAgci5lID0gKGEpLmUrKGIpLmUrMTU7CisgICBpZiAoci5tPjApCisgICB7CisgICAgICBpZiAoci5tPDE2Mzg0KQorICAgICAgeworICAgICAgICAgci5tPDw9MTsKKyAgICAgICAgIHIuZS09MTsKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBpZiAoci5tPi0xNjM4NCkKKyAgICAgIHsKKyAgICAgICAgIHIubTw8PTE7CisgICAgICAgICByLmUtPTE7CisgICAgICB9CisgICB9CisgICAvKnByaW50ZiAoIiVmICogJWYgPSAlZlxuIiwgUkVBTEZMT0FUKGEpLCBSRUFMRkxPQVQoYiksIFJFQUxGTE9BVChyKSk7Ki8KKyAgIHJldHVybiByOyAgIAorfQorCitzdGF0aWMgaW5saW5lIHNweF9mbG9hdF90IEZMT0FUX0FNVUxUKHNweF9mbG9hdF90IGEsIHNweF9mbG9hdF90IGIpCit7CisgICBzcHhfZmxvYXRfdCByOworICAgci5tID0gKHNweF9pbnQxNl90KSgoc3B4X2ludDMyX3QpKGEpLm0qKGIpLm0+PjE1KTsKKyAgIHIuZSA9IChhKS5lKyhiKS5lKzE1OworICAgcmV0dXJuIHI7ICAgCit9CisKKworc3RhdGljIGlubGluZSBzcHhfZmxvYXRfdCBGTE9BVF9TSEwoc3B4X2Zsb2F0X3QgYSwgaW50IGIpCit7CisgICBzcHhfZmxvYXRfdCByOworICAgci5tID0gYS5tOworICAgci5lID0gYS5lK2I7CisgICByZXR1cm4gcjsKK30KKworc3RhdGljIGlubGluZSBzcHhfaW50MTZfdCBGTE9BVF9FWFRSQUNUMTYoc3B4X2Zsb2F0X3QgYSkKK3sKKyAgIGlmIChhLmU8MCkKKyAgICAgIHJldHVybiBFWFRSQUNUMTYoKEVYVEVORDMyKGEubSkrKEVYVEVORDMyKDEpPDwoLWEuZS0xKSkpPj4tYS5lKTsKKyAgIGVsc2UKKyAgICAgIHJldHVybiBhLm08PGEuZTsKK30KKworc3RhdGljIGlubGluZSBzcHhfaW50MzJfdCBGTE9BVF9FWFRSQUNUMzIoc3B4X2Zsb2F0X3QgYSkKK3sKKyAgIGlmIChhLmU8MCkKKyAgICAgIHJldHVybiAoRVhURU5EMzIoYS5tKSsoRVhURU5EMzIoMSk8PCgtYS5lLTEpKSk+Pi1hLmU7CisgICBlbHNlCisgICAgICByZXR1cm4gRVhURU5EMzIoYS5tKTw8YS5lOworfQorCitzdGF0aWMgaW5saW5lIHNweF9pbnQzMl90IEZMT0FUX01VTDMyKHNweF9mbG9hdF90IGEsIHNweF93b3JkMzJfdCBiKQoreworICAgcmV0dXJuIFZTSFIzMihNVUxUMTZfMzJfUTE1KGEubSwgYiksLWEuZS0xNSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3B4X2Zsb2F0X3QgRkxPQVRfTVVMMzJVKHNweF93b3JkMzJfdCBhLCBzcHhfd29yZDMyX3QgYikKK3sKKyAgIGludCBlMSwgZTI7CisgICBzcHhfZmxvYXRfdCByOworICAgaWYgKGE9PTAgfHwgYj09MCkKKyAgIHsKKyAgICAgIHJldHVybiBGTE9BVF9aRVJPOworICAgfQorICAgZTEgPSBzcHhfaWxvZzIoQUJTMzIoYSkpOworICAgYSA9IFZTSFIzMihhLCBlMS0xNCk7CisgICBlMiA9IHNweF9pbG9nMihBQlMzMihiKSk7CisgICBiID0gVlNIUjMyKGIsIGUyLTE0KTsKKyAgIHIubSA9IE1VTFQxNl8xNl9RMTUoYSxiKTsKKyAgIHIuZSA9IGUxK2UyLTEzOworICAgcmV0dXJuIHI7Cit9CisKKy8qIERvIE5PVCBhdHRlbXB0IHRvIGRpdmlkZSBieSBhIG5lZ2F0aXZlIG51bWJlciAqLworc3RhdGljIGlubGluZSBzcHhfZmxvYXRfdCBGTE9BVF9ESVYzMl9GTE9BVChzcHhfd29yZDMyX3QgYSwgc3B4X2Zsb2F0X3QgYikKK3sKKyAgIGludCBlPTA7CisgICBzcHhfZmxvYXRfdCByOworICAgaWYgKGE9PTApCisgICB7CisgICAgICByZXR1cm4gRkxPQVRfWkVSTzsKKyAgIH0KKyAgIGUgPSBzcHhfaWxvZzIoQUJTMzIoYSkpLXNweF9pbG9nMihiLm0tMSktMTU7CisgICBhID0gVlNIUjMyKGEsIGUpOworICAgaWYgKEFCUzMyKGEpPj1TSEwzMihFWFRFTkQzMihiLm0tMSksMTUpKQorICAgeworICAgICAgYSA+Pj0gMTsKKyAgICAgIGUrKzsKKyAgIH0KKyAgIHIubSA9IERJVjMyXzE2KGEsYi5tKTsKKyAgIHIuZSA9IGUtYi5lOworICAgcmV0dXJuIHI7Cit9CisKKworLyogRG8gTk9UIGF0dGVtcHQgdG8gZGl2aWRlIGJ5IGEgbmVnYXRpdmUgbnVtYmVyICovCitzdGF0aWMgaW5saW5lIHNweF9mbG9hdF90IEZMT0FUX0RJVjMyKHNweF93b3JkMzJfdCBhLCBzcHhfd29yZDMyX3QgYikKK3sKKyAgIGludCBlMD0wLGU9MDsKKyAgIHNweF9mbG9hdF90IHI7CisgICBpZiAoYT09MCkKKyAgIHsKKyAgICAgIHJldHVybiBGTE9BVF9aRVJPOworICAgfQorICAgaWYgKGI+MzI3NjcpCisgICB7CisgICAgICBlMCA9IHNweF9pbG9nMihiKS0xNDsKKyAgICAgIGIgPSBWU0hSMzIoYiwgZTApOworICAgICAgZTAgPSAtZTA7CisgICB9CisgICBlID0gc3B4X2lsb2cyKEFCUzMyKGEpKS1zcHhfaWxvZzIoYi0xKS0xNTsKKyAgIGEgPSBWU0hSMzIoYSwgZSk7CisgICBpZiAoQUJTMzIoYSk+PVNITDMyKEVYVEVORDMyKGItMSksMTUpKQorICAgeworICAgICAgYSA+Pj0gMTsKKyAgICAgIGUrKzsKKyAgIH0KKyAgIGUgKz0gZTA7CisgICByLm0gPSBESVYzMl8xNihhLGIpOworICAgci5lID0gZTsKKyAgIHJldHVybiByOworfQorCisvKiBEbyBOT1QgYXR0ZW1wdCB0byBkaXZpZGUgYnkgYSBuZWdhdGl2ZSBudW1iZXIgKi8KK3N0YXRpYyBpbmxpbmUgc3B4X2Zsb2F0X3QgRkxPQVRfRElWVShzcHhfZmxvYXRfdCBhLCBzcHhfZmxvYXRfdCBiKQoreworICAgaW50IGU9MDsKKyAgIHNweF9pbnQzMl90IG51bTsKKyAgIHNweF9mbG9hdF90IHI7CisgICBpZiAoYi5tPD0wKQorICAgeworICAgICAgc3BlZXhfd2FybmluZ19pbnQoIkF0dGVtcHRlZCB0byBkaXZpZGUgYnkiLCBiLm0pOworICAgICAgcmV0dXJuIEZMT0FUX09ORTsKKyAgIH0KKyAgIG51bSA9IGEubTsKKyAgIGEubSA9IEFCUzE2KGEubSk7CisgICB3aGlsZSAoYS5tID49IGIubSkKKyAgIHsKKyAgICAgIGUrKzsKKyAgICAgIGEubSA+Pj0gMTsKKyAgIH0KKyAgIG51bSA9IG51bSA8PCAoMTUtZSk7CisgICByLm0gPSBESVYzMl8xNihudW0sYi5tKTsKKyAgIHIuZSA9IGEuZS1iLmUtMTUrZTsKKyAgIHJldHVybiByOworfQorCitzdGF0aWMgaW5saW5lIHNweF9mbG9hdF90IEZMT0FUX1NRUlQoc3B4X2Zsb2F0X3QgYSkKK3sKKyAgIHNweF9mbG9hdF90IHI7CisgICBzcHhfaW50MzJfdCBtOworICAgbSA9IFNITDMyKEVYVEVORDMyKGEubSksIDE0KTsKKyAgIHIuZSA9IGEuZSAtIDE0OworICAgaWYgKHIuZSAmIDEpCisgICB7CisgICAgICByLmUgLT0gMTsKKyAgICAgIG0gPDw9IDE7CisgICB9CisgICByLmUgPj49IDE7CisgICByLm0gPSBzcHhfc3FydChtKTsKKyAgIHJldHVybiByOworfQorCisjZWxzZQorCisjZGVmaW5lIHNweF9mbG9hdF90IGZsb2F0CisjZGVmaW5lIEZMT0FUX1pFUk8gMC5mCisjZGVmaW5lIEZMT0FUX09ORSAxLmYKKyNkZWZpbmUgRkxPQVRfSEFMRiAwLjVmCisjZGVmaW5lIFBTRVVET0ZMT0FUKHgpICh4KQorI2RlZmluZSBGTE9BVF9NVUxUKGEsYikgKChhKSooYikpCisjZGVmaW5lIEZMT0FUX0FNVUxUKGEsYikgKChhKSooYikpCisjZGVmaW5lIEZMT0FUX01VTDMyKGEsYikgKChhKSooYikpCisjZGVmaW5lIEZMT0FUX0RJVjMyKGEsYikgKChhKS8oYikpCisjZGVmaW5lIEZMT0FUX0VYVFJBQ1QxNihhKSAoYSkKKyNkZWZpbmUgRkxPQVRfRVhUUkFDVDMyKGEpIChhKQorI2RlZmluZSBGTE9BVF9BREQoYSxiKSAoKGEpKyhiKSkKKyNkZWZpbmUgRkxPQVRfU1VCKGEsYikgKChhKS0oYikpCisjZGVmaW5lIFJFQUxGTE9BVCh4KSAoeCkKKyNkZWZpbmUgRkxPQVRfRElWMzJfRkxPQVQoYSxiKSAoKGEpLyhiKSkKKyNkZWZpbmUgRkxPQVRfTVVMMzJVKGEsYikgKChhKSooYikpCisjZGVmaW5lIEZMT0FUX1NITChhLGIpIChhKQorI2RlZmluZSBGTE9BVF9MVChhLGIpICgoYSk8KGIpKQorI2RlZmluZSBGTE9BVF9HVChhLGIpICgoYSk+KGIpKQorI2RlZmluZSBGTE9BVF9ESVZVKGEsYikgKChhKS8oYikpCisjZGVmaW5lIEZMT0FUX1NRUlQoYSkgKHNweF9zcXJ0KGEpKQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9xdWFudF9sc3AuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3F1YW50X2xzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MDdiOTgKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9xdWFudF9sc3AuYwpAQCAtMCwwICsxLDQ0NyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAKKyAgIEZpbGU6IHF1YW50X2xzcC5jCisgICBMU1AgdmVjdG9yIHF1YW50aXphdGlvbgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInF1YW50X2xzcC5oIgorI2luY2x1ZGUgPG1hdGguaD4KKyNpZm5kZWYgTV9QSQorI2RlZmluZSBNX1BJIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYKKyNlbmRpZgorCisjaW5jbHVkZSAibWlzYy5oIgorCisjaWZkZWYgQkZJTl9BU00KKyNpbmNsdWRlICJxdWFudF9sc3BfYmZpbi5oIgorI2VuZGlmCisKKyNpZmRlZiBGSVhFRF9QT0lOVAorCisjZGVmaW5lIExTUF9MSU5FQVIoaSkgKFNITDE2KGkrMSwxMSkpCisjZGVmaW5lIExTUF9MSU5FQVJfSElHSChpKSAoQUREMTYoTVVMVDE2XzE2XzE2KGksMjU2MCksNjE0NCkpCisjZGVmaW5lIExTUF9ESVZfMjU2KHgpIChTSEwxNigoc3B4X3dvcmQxNl90KXgsIDUpKQorI2RlZmluZSBMU1BfRElWXzUxMih4KSAoU0hMMTYoKHNweF93b3JkMTZfdCl4LCA0KSkKKyNkZWZpbmUgTFNQX0RJVl8xMDI0KHgpIChTSEwxNigoc3B4X3dvcmQxNl90KXgsIDMpKQorI2RlZmluZSBMU1BfUEkgMjU3MzYKKworI2Vsc2UKKworI2RlZmluZSBMU1BfTElORUFSKGkpICguMjUqKGkpKy4yNSkKKyNkZWZpbmUgTFNQX0xJTkVBUl9ISUdIKGkpICguMzEyNSooaSkrLjc1KQorI2RlZmluZSBMU1BfU0NBTEUgMjU2LgorI2RlZmluZSBMU1BfRElWXzI1Nih4KSAoMC4wMDM5MDYyKih4KSkKKyNkZWZpbmUgTFNQX0RJVl81MTIoeCkgKDAuMDAxOTUzMSooeCkpCisjZGVmaW5lIExTUF9ESVZfMTAyNCh4KSAoMC4wMDA5NzY1NiooeCkpCisjZGVmaW5lIExTUF9QSSBNX1BJCisKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBjb21wdXRlX3F1YW50X3dlaWdodHMoc3B4X2xzcF90ICpxbHNwLCBzcHhfd29yZDE2X3QgKnF1YW50X3dlaWdodCwgaW50IG9yZGVyKQoreworICAgaW50IGk7CisgICBzcHhfd29yZDE2X3QgdG1wMSwgdG1wMjsKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgeworICAgICAgaWYgKGk9PTApCisgICAgICAgICB0bXAxID0gcWxzcFtpXTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHRtcDEgPSBxbHNwW2ldLXFsc3BbaS0xXTsKKyAgICAgIGlmIChpPT1vcmRlci0xKQorICAgICAgICAgdG1wMiA9IExTUF9QSS1xbHNwW2ldOworICAgICAgZWxzZQorICAgICAgICAgdG1wMiA9IHFsc3BbaSsxXS1xbHNwW2ldOworICAgICAgaWYgKHRtcDI8dG1wMSkKKyAgICAgICAgIHRtcDEgPSB0bXAyOworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICBxdWFudF93ZWlnaHRbaV0gPSBESVYzMl8xNig4MTkyMCxBREQxNigzMDAsdG1wMSkpOworI2Vsc2UKKyAgICAgIHF1YW50X3dlaWdodFtpXSA9IDEwLyguMDQrdG1wMSk7CisjZW5kaWYKKyAgIH0KKworfQorCisvKiBOb3RlOiB4IGlzIG1vZGlmaWVkKi8KKyNpZm5kZWYgT1ZFUlJJREVfTFNQX1FVQU5UCitzdGF0aWMgaW50IGxzcF9xdWFudChzcHhfd29yZDE2X3QgKngsIGNvbnN0IHNpZ25lZCBjaGFyICpjZGJrLCBpbnQgbmJWZWMsIGludCBuYkRpbSkKK3sKKyAgIGludCBpLGo7CisgICBzcHhfd29yZDMyX3QgZGlzdDsKKyAgIHNweF93b3JkMTZfdCB0bXA7CisgICBzcHhfd29yZDMyX3QgYmVzdF9kaXN0PVZFUllfTEFSR0UzMjsKKyAgIGludCBiZXN0X2lkPTA7CisgICBjb25zdCBzaWduZWQgY2hhciAqcHRyPWNkYms7CisgICBmb3IgKGk9MDtpPG5iVmVjO2krKykKKyAgIHsKKyAgICAgIGRpc3Q9MDsKKyAgICAgIGZvciAoaj0wO2o8bmJEaW07aisrKQorICAgICAgeworICAgICAgICAgdG1wPVNVQjE2KHhbal0sU0hMMTYoKHNweF93b3JkMTZfdCkqcHRyKyssNSkpOworICAgICAgICAgZGlzdD1NQUMxNl8xNihkaXN0LHRtcCx0bXApOworICAgICAgfSAKKyAgICAgIGlmIChkaXN0PGJlc3RfZGlzdCkKKyAgICAgIHsKKyAgICAgICAgIGJlc3RfZGlzdD1kaXN0OworICAgICAgICAgYmVzdF9pZD1pOworICAgICAgfQorICAgfQorCisgICBmb3IgKGo9MDtqPG5iRGltO2orKykKKyAgICAgIHhbal0gPSBTVUIxNih4W2pdLFNITDE2KChzcHhfd29yZDE2X3QpY2Ria1tiZXN0X2lkKm5iRGltK2pdLDUpKTsKKyAgICAKKyAgIHJldHVybiBiZXN0X2lkOworfQorI2VuZGlmCisKKy8qIE5vdGU6IHggaXMgbW9kaWZpZWQqLworI2lmbmRlZiBPVkVSUklERV9MU1BfV0VJR0hUX1FVQU5UCitzdGF0aWMgaW50IGxzcF93ZWlnaHRfcXVhbnQoc3B4X3dvcmQxNl90ICp4LCBzcHhfd29yZDE2X3QgKndlaWdodCwgY29uc3Qgc2lnbmVkIGNoYXIgKmNkYmssIGludCBuYlZlYywgaW50IG5iRGltKQoreworICAgaW50IGksajsKKyAgIHNweF93b3JkMzJfdCBkaXN0OworICAgc3B4X3dvcmQxNl90IHRtcDsKKyAgIHNweF93b3JkMzJfdCBiZXN0X2Rpc3Q9VkVSWV9MQVJHRTMyOworICAgaW50IGJlc3RfaWQ9MDsKKyAgIGNvbnN0IHNpZ25lZCBjaGFyICpwdHI9Y2RiazsKKyAgIGZvciAoaT0wO2k8bmJWZWM7aSsrKQorICAgeworICAgICAgZGlzdD0wOworICAgICAgZm9yIChqPTA7ajxuYkRpbTtqKyspCisgICAgICB7CisgICAgICAgICB0bXA9U1VCMTYoeFtqXSxTSEwxNigoc3B4X3dvcmQxNl90KSpwdHIrKyw1KSk7CisgICAgICAgICBkaXN0PU1BQzE2XzMyX1ExNShkaXN0LHdlaWdodFtqXSxNVUxUMTZfMTYodG1wLHRtcCkpOworICAgICAgfQorICAgICAgaWYgKGRpc3Q8YmVzdF9kaXN0KQorICAgICAgeworICAgICAgICAgYmVzdF9kaXN0PWRpc3Q7CisgICAgICAgICBiZXN0X2lkPWk7CisgICAgICB9CisgICB9CisgICAKKyAgIGZvciAoaj0wO2o8bmJEaW07aisrKQorICAgICAgeFtqXSA9IFNVQjE2KHhbal0sU0hMMTYoKHNweF93b3JkMTZfdCljZGJrW2Jlc3RfaWQqbmJEaW0ral0sNSkpOworICAgcmV0dXJuIGJlc3RfaWQ7Cit9CisjZW5kaWYKKwordm9pZCBsc3BfcXVhbnRfbmIoc3B4X2xzcF90ICpsc3AsIHNweF9sc3BfdCAqcWxzcCwgaW50IG9yZGVyLCBTcGVleEJpdHMgKmJpdHMpCit7CisgICBpbnQgaTsKKyAgIGludCBpZDsKKyAgIHNweF93b3JkMTZfdCBxdWFudF93ZWlnaHRbMTBdOworICAgCisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIHFsc3BbaV09bHNwW2ldOworCisgICBjb21wdXRlX3F1YW50X3dlaWdodHMocWxzcCwgcXVhbnRfd2VpZ2h0LCBvcmRlcik7CisKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgcWxzcFtpXT1TVUIxNihxbHNwW2ldLExTUF9MSU5FQVIoaSkpOworCisjaWZuZGVmIEZJWEVEX1BPSU5UCisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIHFsc3BbaV0gPSBMU1BfU0NBTEUqcWxzcFtpXTsKKyNlbmRpZgorICAgaWQgPSBsc3BfcXVhbnQocWxzcCwgY2Ria19uYiwgTkJfQ0RCS19TSVpFLCBvcmRlcik7CisgICBzcGVleF9iaXRzX3BhY2soYml0cywgaWQsIDYpOworCisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIHFsc3BbaV0qPTI7CisgCisgICBpZCA9IGxzcF93ZWlnaHRfcXVhbnQocWxzcCwgcXVhbnRfd2VpZ2h0LCBjZGJrX25iX2xvdzEsIE5CX0NEQktfU0laRV9MT1cxLCA1KTsKKyAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBpZCwgNik7CisKKyAgIGZvciAoaT0wO2k8NTtpKyspCisgICAgICBxbHNwW2ldKj0yOworCisgICBpZCA9IGxzcF93ZWlnaHRfcXVhbnQocWxzcCwgcXVhbnRfd2VpZ2h0LCBjZGJrX25iX2xvdzIsIE5CX0NEQktfU0laRV9MT1cyLCA1KTsKKyAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBpZCwgNik7CisKKyAgIGlkID0gbHNwX3dlaWdodF9xdWFudChxbHNwKzUsIHF1YW50X3dlaWdodCs1LCBjZGJrX25iX2hpZ2gxLCBOQl9DREJLX1NJWkVfSElHSDEsIDUpOworICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIGlkLCA2KTsKKworICAgZm9yIChpPTU7aTwxMDtpKyspCisgICAgICBxbHNwW2ldKj0yOworCisgICBpZCA9IGxzcF93ZWlnaHRfcXVhbnQocWxzcCs1LCBxdWFudF93ZWlnaHQrNSwgY2Ria19uYl9oaWdoMiwgTkJfQ0RCS19TSVpFX0hJR0gyLCA1KTsKKyAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBpZCwgNik7CisKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldPVBTSFIxNihxbHNwW2ldLDIpOworI2Vsc2UKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgcWxzcFtpXT1xbHNwW2ldICogLjAwMDk3NjU2OworI2VuZGlmCisKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgcWxzcFtpXT1sc3BbaV0tcWxzcFtpXTsKK30KKwordm9pZCBsc3BfdW5xdWFudF9uYihzcHhfbHNwX3QgKmxzcCwgaW50IG9yZGVyLCBTcGVleEJpdHMgKmJpdHMpCit7CisgICBpbnQgaSwgaWQ7CisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIGxzcFtpXT1MU1BfTElORUFSKGkpOworCisKKyAgIGlkPXNwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKGJpdHMsIDYpOworICAgZm9yIChpPTA7aTwxMDtpKyspCisgICAgICBsc3BbaV0gPSBBREQzMihsc3BbaV0sIExTUF9ESVZfMjU2KGNkYmtfbmJbaWQqMTAraV0pKTsKKworICAgaWQ9c3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgNik7CisgICBmb3IgKGk9MDtpPDU7aSsrKQorICAgICAgbHNwW2ldID0gQUREMTYobHNwW2ldLCBMU1BfRElWXzUxMihjZGJrX25iX2xvdzFbaWQqNStpXSkpOworCisgICBpZD1zcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCA2KTsKKyAgIGZvciAoaT0wO2k8NTtpKyspCisgICAgICBsc3BbaV0gPSBBREQzMihsc3BbaV0sIExTUF9ESVZfMTAyNChjZGJrX25iX2xvdzJbaWQqNStpXSkpOworCisgICBpZD1zcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCA2KTsKKyAgIGZvciAoaT0wO2k8NTtpKyspCisgICAgICBsc3BbaSs1XSA9IEFERDMyKGxzcFtpKzVdLCBMU1BfRElWXzUxMihjZGJrX25iX2hpZ2gxW2lkKjUraV0pKTsKKyAgIAorICAgaWQ9c3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgNik7CisgICBmb3IgKGk9MDtpPDU7aSsrKQorICAgICAgbHNwW2krNV0gPSBBREQzMihsc3BbaSs1XSwgTFNQX0RJVl8xMDI0KGNkYmtfbmJfaGlnaDJbaWQqNStpXSkpOworfQorCisKK3ZvaWQgbHNwX3F1YW50X2xicihzcHhfbHNwX3QgKmxzcCwgc3B4X2xzcF90ICpxbHNwLCBpbnQgb3JkZXIsIFNwZWV4Qml0cyAqYml0cykKK3sKKyAgIGludCBpOworICAgaW50IGlkOworICAgc3B4X3dvcmQxNl90IHF1YW50X3dlaWdodFsxMF07CisKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgcWxzcFtpXT1sc3BbaV07CisKKyAgIGNvbXB1dGVfcXVhbnRfd2VpZ2h0cyhxbHNwLCBxdWFudF93ZWlnaHQsIG9yZGVyKTsKKworICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldPVNVQjE2KHFsc3BbaV0sTFNQX0xJTkVBUihpKSk7CisjaWZuZGVmIEZJWEVEX1BPSU5UCisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIHFsc3BbaV09cWxzcFtpXSpMU1BfU0NBTEU7CisjZW5kaWYKKyAgIGlkID0gbHNwX3F1YW50KHFsc3AsIGNkYmtfbmIsIE5CX0NEQktfU0laRSwgb3JkZXIpOworICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIGlkLCA2KTsKKyAgIAorICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldKj0yOworICAgCisgICBpZCA9IGxzcF93ZWlnaHRfcXVhbnQocWxzcCwgcXVhbnRfd2VpZ2h0LCBjZGJrX25iX2xvdzEsIE5CX0NEQktfU0laRV9MT1cxLCA1KTsKKyAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBpZCwgNik7CisKKyAgIGlkID0gbHNwX3dlaWdodF9xdWFudChxbHNwKzUsIHF1YW50X3dlaWdodCs1LCBjZGJrX25iX2hpZ2gxLCBOQl9DREJLX1NJWkVfSElHSDEsIDUpOworICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIGlkLCA2KTsKKworI2lmZGVmIEZJWEVEX1BPSU5UCisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIHFsc3BbaV0gPSBQU0hSMTYocWxzcFtpXSwxKTsKKyNlbHNlCisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIHFsc3BbaV0gPSBxbHNwW2ldKjAuMDAxOTUzMTsKKyNlbmRpZgorCisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIHFsc3BbaV09bHNwW2ldLXFsc3BbaV07Cit9CisKK3ZvaWQgbHNwX3VucXVhbnRfbGJyKHNweF9sc3BfdCAqbHNwLCBpbnQgb3JkZXIsIFNwZWV4Qml0cyAqYml0cykKK3sKKyAgIGludCBpLCBpZDsKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgbHNwW2ldPUxTUF9MSU5FQVIoaSk7CisKKworICAgaWQ9c3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgNik7CisgICBmb3IgKGk9MDtpPDEwO2krKykKKyAgICAgIGxzcFtpXSArPSBMU1BfRElWXzI1NihjZGJrX25iW2lkKjEwK2ldKTsKKworICAgaWQ9c3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgNik7CisgICBmb3IgKGk9MDtpPDU7aSsrKQorICAgICAgbHNwW2ldICs9IExTUF9ESVZfNTEyKGNkYmtfbmJfbG93MVtpZCo1K2ldKTsKKworICAgaWQ9c3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgNik7CisgICBmb3IgKGk9MDtpPDU7aSsrKQorICAgICAgbHNwW2krNV0gKz0gTFNQX0RJVl81MTIoY2Ria19uYl9oaWdoMVtpZCo1K2ldKTsKKyAgIAorfQorCisKKyNpZmRlZiBESVNBQkxFX1dJREVCQU5ECit2b2lkIGxzcF9xdWFudF9oaWdoKHNweF9sc3BfdCAqbHNwLCBzcHhfbHNwX3QgKnFsc3AsIGludCBvcmRlciwgU3BlZXhCaXRzICpiaXRzKQoreworICAgc3BlZXhfZXJyb3IoIldpZGViYW5kIGFuZCBVbHRyYS13aWRlYmFuZCBhcmUgZGlzYWJsZWQiKTsKK30KK3ZvaWQgbHNwX3VucXVhbnRfaGlnaChzcHhfbHNwX3QgKmxzcCwgaW50IG9yZGVyLCBTcGVleEJpdHMgKmJpdHMpCit7CisgICBzcGVleF9lcnJvcigiV2lkZWJhbmQgYW5kIFVsdHJhLXdpZGViYW5kIGFyZSBkaXNhYmxlZCIpOworfQorI2Vsc2UKK2V4dGVybiBjb25zdCBzaWduZWQgY2hhciBoaWdoX2xzcF9jZGJrW107CitleHRlcm4gY29uc3Qgc2lnbmVkIGNoYXIgaGlnaF9sc3BfY2RiazJbXTsKKworCit2b2lkIGxzcF9xdWFudF9oaWdoKHNweF9sc3BfdCAqbHNwLCBzcHhfbHNwX3QgKnFsc3AsIGludCBvcmRlciwgU3BlZXhCaXRzICpiaXRzKQoreworICAgaW50IGk7CisgICBpbnQgaWQ7CisgICBzcHhfd29yZDE2X3QgcXVhbnRfd2VpZ2h0WzEwXTsKKworICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldPWxzcFtpXTsKKworICAgY29tcHV0ZV9xdWFudF93ZWlnaHRzKHFsc3AsIHF1YW50X3dlaWdodCwgb3JkZXIpOworCisgICAvKiAgIHF1YW50X3dlaWdodFswXSA9IDEwLyhxbHNwWzFdLXFsc3BbMF0pOworICAgcXVhbnRfd2VpZ2h0W29yZGVyLTFdID0gMTAvKHFsc3Bbb3JkZXItMV0tcWxzcFtvcmRlci0yXSk7CisgICBmb3IgKGk9MTtpPG9yZGVyLTE7aSsrKQorICAgeworICAgICAgdG1wMSA9IDEwLyhxbHNwW2ldLXFsc3BbaS0xXSk7CisgICAgICB0bXAyID0gMTAvKHFsc3BbaSsxXS1xbHNwW2ldKTsKKyAgICAgIHF1YW50X3dlaWdodFtpXSA9IHRtcDEgPiB0bXAyID8gdG1wMSA6IHRtcDI7CisgICAgICB9Ki8KKworICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldPVNVQjE2KHFsc3BbaV0sTFNQX0xJTkVBUl9ISUdIKGkpKTsKKyNpZm5kZWYgRklYRURfUE9JTlQKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgcWxzcFtpXSA9IHFsc3BbaV0qTFNQX1NDQUxFOworI2VuZGlmCisgICBpZCA9IGxzcF9xdWFudChxbHNwLCBoaWdoX2xzcF9jZGJrLCA2NCwgb3JkZXIpOworICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIGlkLCA2KTsKKworICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldKj0yOworCisgICBpZCA9IGxzcF93ZWlnaHRfcXVhbnQocWxzcCwgcXVhbnRfd2VpZ2h0LCBoaWdoX2xzcF9jZGJrMiwgNjQsIG9yZGVyKTsKKyAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBpZCwgNik7CisKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldID0gUFNIUjE2KHFsc3BbaV0sMSk7CisjZWxzZQorICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldID0gcWxzcFtpXSowLjAwMTk1MzE7CisjZW5kaWYKKworICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldPWxzcFtpXS1xbHNwW2ldOworfQorCit2b2lkIGxzcF91bnF1YW50X2hpZ2goc3B4X2xzcF90ICpsc3AsIGludCBvcmRlciwgU3BlZXhCaXRzICpiaXRzKQoreworCisgICBpbnQgaSwgaWQ7CisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIGxzcFtpXT1MU1BfTElORUFSX0hJR0goaSk7CisKKworICAgaWQ9c3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgNik7CisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIGxzcFtpXSArPSBMU1BfRElWXzI1NihoaWdoX2xzcF9jZGJrW2lkKm9yZGVyK2ldKTsKKworCisgICBpZD1zcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCA2KTsKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgbHNwW2ldICs9IExTUF9ESVZfNTEyKGhpZ2hfbHNwX2NkYmsyW2lkKm9yZGVyK2ldKTsKK30KKworI2VuZGlmCisKKworI2lmZGVmIEVQSUNfNDhLCisKK2V4dGVybiBjb25zdCBzaWduZWQgY2hhciBjZGJrX2xzcF92bGJyWzUxMjBdOworZXh0ZXJuIGNvbnN0IHNpZ25lZCBjaGFyIGNkYmtfbHNwMl92bGJyWzE2MF07CisKK3ZvaWQgbHNwX3F1YW50XzQ4ayhzcHhfbHNwX3QgKmxzcCwgc3B4X2xzcF90ICpxbHNwLCBpbnQgb3JkZXIsIFNwZWV4Qml0cyAqYml0cykKK3sKKyAgIGludCBpOworICAgaW50IGlkOworICAgc3B4X3dvcmQxNl90IHF1YW50X3dlaWdodFsxMF07CisKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgcWxzcFtpXT1sc3BbaV07CisKKyAgIGNvbXB1dGVfcXVhbnRfd2VpZ2h0cyhxbHNwLCBxdWFudF93ZWlnaHQsIG9yZGVyKTsKKworICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldPVNVQjE2KHFsc3BbaV0sTFNQX1NDQUxJTkcqKC4yNSppKy4zMTI1KSk7CisjaWZuZGVmIEZJWEVEX1BPSU5UCisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIHFsc3BbaV0gPSBxbHNwW2ldKkxTUF9TQ0FMRTsKKyNlbmRpZgorICAgCisgICBpZCA9IGxzcF9xdWFudChxbHNwLCBjZGJrX2xzcF92bGJyLCA1MTIsIG9yZGVyKTsKKyAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBpZCwgOSk7CisKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgcWxzcFtpXSo9NDsKKyAgIAorICAgaWQgPSBsc3Bfd2VpZ2h0X3F1YW50KHFsc3AsIHF1YW50X3dlaWdodCwgY2Ria19sc3AyX3ZsYnIsIDE2LCAxMCk7CisgICBzcGVleF9iaXRzX3BhY2soYml0cywgaWQsIDQpOworCisjaWZkZWYgRklYRURfUE9JTlQKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgcWxzcFtpXT1QU0hSMTYocWxzcFtpXSwyKTsKKyNlbHNlCisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIHFsc3BbaV09cWxzcFtpXSowLjAwMDk3NjU1OworI2VuZGlmCisKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgcWxzcFtpXT1sc3BbaV0tcWxzcFtpXTsKK30KKwordm9pZCBsc3BfdW5xdWFudF80OGsoc3B4X2xzcF90ICpsc3AsIGludCBvcmRlciwgU3BlZXhCaXRzICpiaXRzKQoreworICAgaW50IGksIGlkOworICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBsc3BbaV09TFNQX1NDQUxJTkcqKC4yNSppKy4zMTI1KTsKKworCisgICBpZD1zcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCA5KTsKKyAgIGZvciAoaT0wO2k8MTA7aSsrKQorICAgICAgbHNwW2ldICs9IExTUF9TQ0FMSU5HKjAuMDAzOTA2MipjZGJrX2xzcF92bGJyW2lkKjEwK2ldOworCisgICBpZD1zcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCA0KTsKKyAgIGZvciAoaT0wO2k8MTA7aSsrKQorICAgICAgbHNwW2ldICs9IExTUF9TQ0FMSU5HKjAuMDAwOTc2NTUqY2Ria19sc3AyX3ZsYnJbaWQqMTAraV07CisgICAKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9xdWFudF9sc3AuaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3F1YW50X2xzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZDViYjMKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9xdWFudF9sc3AuaApAQCAtMCwwICsxLDgzIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVhbi1NYXJjIFZhbGluICovCisvKioKKyAgIEBmaWxlIHF1YW50X2xzcC5oCisgICBAYnJpZWYgTFNQIHZlY3RvciBxdWFudGl6YXRpb24KKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIFFVQU5UX0xTUF9ICisjZGVmaW5lIFFVQU5UX0xTUF9ICisKKyNpbmNsdWRlIDxzcGVleC9zcGVleF9iaXRzLmg+CisjaW5jbHVkZSAibWlzYy5oIgorCisjZGVmaW5lIE1BWF9MU1BfU0laRSAyMAorCisjZGVmaW5lIE5CX0NEQktfU0laRSA2NAorI2RlZmluZSBOQl9DREJLX1NJWkVfTE9XMSA2NAorI2RlZmluZSBOQl9DREJLX1NJWkVfTE9XMiA2NAorI2RlZmluZSBOQl9DREJLX1NJWkVfSElHSDEgNjQKKyNkZWZpbmUgTkJfQ0RCS19TSVpFX0hJR0gyIDY0CisKKy8qTmFycm93YmFuZCBjb2RlYm9va3MqLworZXh0ZXJuIGNvbnN0IHNpZ25lZCBjaGFyIGNkYmtfbmJbXTsKK2V4dGVybiBjb25zdCBzaWduZWQgY2hhciBjZGJrX25iX2xvdzFbXTsKK2V4dGVybiBjb25zdCBzaWduZWQgY2hhciBjZGJrX25iX2xvdzJbXTsKK2V4dGVybiBjb25zdCBzaWduZWQgY2hhciBjZGJrX25iX2hpZ2gxW107CitleHRlcm4gY29uc3Qgc2lnbmVkIGNoYXIgY2Ria19uYl9oaWdoMltdOworCisvKiBRdWFudGl6ZXMgbmFycm93YmFuZCBMU1BzIHdpdGggMzAgYml0cyAqLwordm9pZCBsc3BfcXVhbnRfbmIoc3B4X2xzcF90ICpsc3AsIHNweF9sc3BfdCAqcWxzcCwgaW50IG9yZGVyLCBTcGVleEJpdHMgKmJpdHMpOworCisvKiBEZWNvZGVzIHF1YW50aXplZCBuYXJyb3diYW5kIExTUHMgKi8KK3ZvaWQgbHNwX3VucXVhbnRfbmIoc3B4X2xzcF90ICpsc3AsIGludCBvcmRlciwgU3BlZXhCaXRzICpiaXRzKTsKKworLyogUXVhbnRpemVzIGxvdyBiaXQtcmF0ZSBuYXJyb3diYW5kIExTUHMgd2l0aCAxOCBiaXRzICovCit2b2lkIGxzcF9xdWFudF9sYnIoc3B4X2xzcF90ICpsc3AsIHNweF9sc3BfdCAqcWxzcCwgaW50IG9yZGVyLCBTcGVleEJpdHMgKmJpdHMpOworCisvKiBEZWNvZGVzIHF1YW50aXplZCBsb3cgYml0LXJhdGUgbmFycm93YmFuZCBMU1BzICovCit2b2lkIGxzcF91bnF1YW50X2xicihzcHhfbHNwX3QgKmxzcCwgaW50IG9yZGVyLCBTcGVleEJpdHMgKmJpdHMpOworCisvKiBRdWFudGl6ZXMgaGlnaC1iYW5kIExTUHMgd2l0aCAxMiBiaXRzICovCit2b2lkIGxzcF9xdWFudF9oaWdoKHNweF9sc3BfdCAqbHNwLCBzcHhfbHNwX3QgKnFsc3AsIGludCBvcmRlciwgU3BlZXhCaXRzICpiaXRzKTsKKworLyogRGVjb2RlcyBoaWdoLWJhbmQgTFNQcyAqLwordm9pZCBsc3BfdW5xdWFudF9oaWdoKHNweF9sc3BfdCAqbHNwLCBpbnQgb3JkZXIsIFNwZWV4Qml0cyAqYml0cyk7CisKKyNpZmRlZiBFUElDXzQ4SworLyogUXVhbnRpemVzIG5hcnJvd2JhbmQgTFNQcyB3aXRoIDE0IGJpdHMgKi8KK3ZvaWQgbHNwX3F1YW50XzQ4ayhzcHhfbHNwX3QgKmxzcCwgc3B4X2xzcF90ICpxbHNwLCBpbnQgb3JkZXIsIFNwZWV4Qml0cyAqYml0cyk7CisKKy8qIERlY29kZXMgcXVhbnRpemVkIG5hcnJvd2JhbmQgTFNQcyAoMTQgYml0cykgKi8KK3ZvaWQgbHNwX3VucXVhbnRfNDhrKHNweF9sc3BfdCAqbHNwLCBpbnQgb3JkZXIsIFNwZWV4Qml0cyAqYml0cyk7CisjZW5kaWYKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3F1YW50X2xzcF9iZmluLmggYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9xdWFudF9sc3BfYmZpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ODQwNzgKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9xdWFudF9sc3BfYmZpbi5oCkBAIC0wLDAgKzEsMTY1IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgUm93ZSAqLworLyoqCisgICBAZmlsZSBxdWFudF9sc3BfYmZpbi5oCisgICBAYXV0aG9yIERhdmlkIFJvd2UKKyAgIEBicmllZiBWYXJpb3VzIGNvbXBhdGliaWxpdHkgcm91dGluZXMgZm9yIFNwZWV4IChCbGFja2ZpbiB2ZXJzaW9uKQorKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNkZWZpbmUgT1ZFUlJJREVfTFNQX1FVQU5UCisjaWZkZWYgT1ZFUlJJREVfTFNQX1FVQU5UCisKKy8qCisgIE5vdGUgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL01hY2hpbmUtQ29uc3RyYWludHMuaHRtbAorICB3ZWxsIHRlbGwgeW91IGFsbCB0aGUgbWFnaWMgcmVzZ2lzdGVyIGNvbnN0cmFpbnRzIHVzZWQgYmVsb3cKKyAgZm9yIGdjYyBpbi1saW5lIGFzbS4KKyovCisKK3N0YXRpYyBpbnQgbHNwX3F1YW50KAorICBzcHhfd29yZDE2X3QgICAgICAqeCwgCisgIGNvbnN0IHNpZ25lZCBjaGFyICpjZGJrLCAKKyAgaW50ICAgICAgICAgICAgICAgIG5iVmVjLCAKKyAgaW50ICAgICAgICAgICAgICAgIG5iRGltCispCit7CisgICBpbnQgICAgICAgICAgajsKKyAgIHNweF93b3JkMzJfdCBiZXN0X2Rpc3Q9MTw8MzA7CisgICBpbnQgICAgICAgICAgYmVzdF9pZD0wOworCisgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworICAgICAoCisiCSUwID0gMSAoWCk7XG5cdCIgICAgICAgICAgICAgICAgICAgICAgIC8qICUwOiBiZXN0X2Rpc3QgKi8gICAgCisiCSUwIDw8PSAzMDtcblx0IiAgICAgCisiCSUxID0gMCAoWCk7XG5cdCIgICAgICAgICAgICAgICAgICAgICAgIC8qICUxOiBiZXN0X2kgICAgICAgICAqLworIiAgICAgICBQMiA9ICUzXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQMjogcHRyIHRvIGNkYmsgICAgKi8KKyIgICAgICAgUjUgPSAwO1xuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUjU6IGJlc3QgY2IgZW50cnkgICovCisKKyIgICAgICAgUjAgPSAlNTtcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IHVwIGNpcmMgYWRkciAgICovCisiICAgICAgIFIwIDw8PSAxO1xuXHQiCisiICAgICAgIEwwID0gUjA7XG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgIAorIiAgICAgICBJMCA9ICUyO1xuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAlMjogJnhbMF0gICAgICAgICAgKi8KKyIgICAgICAgQjAgPSAlMjtcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgCisKKyIgICAgICAgUjIuTCA9IFcgW0kwKytdO1xuXHQiCisiCUxTRVRVUCAobHExLCBscTIpIExDMCA9ICU0O1xuXHQiCisibHExOgkgIFIzID0gMDtcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSMzogZGlzdCAgICAgICAgICAgKi8KKyIJICBMU0VUVVAgKGxxMywgbHE0KSBMQzEgPSAlNTtcblx0IgorImxxMzogICAgICAgUjEgPSBCIFtQMisrXSAoWCk7XG5cdCIgICAgICAgICAgICAKKyIJICAgIFIxIDw8PSA1O1xuXHQiCisiCSAgICBSMC5MID0gUjIuTCAtIFIxLkwgfHwgUjIuTCA9IFcgW0kwKytdO1xuXHQiCisiCSAgICBSMCA9IFIwLkwqUjAuTDtcblx0IgorImxxNDoJICAgIFIzID0gUjMgKyBSMDtcblx0IgorCisiCSAgY2MgPVIzPCUwO1xuXHQiCisiCSAgaWYgY2MgJTA9UjM7XG5cdCIKKyIJICBpZiBjYyAlMT1SNTtcblx0IgorImxxMjogICAgIFI1ICs9IDE7XG5cdCIKKyIgICAgICAgICBMMCA9IDA7XG5cdCIKKyAgIDogIj0mZCIgKGJlc3RfZGlzdCksICI9JmQiIChiZXN0X2lkKQorICAgOiAiYSIgKHgpLCAiYiIgKGNkYmspLCAiYSIgKG5iVmVjKSwgImEiIChuYkRpbSkKKyAgIDogIkkwIiwgIlAyIiwgIlIwIiwgIlIxIiwgIlIyIiwgIlIzIiwgIlI1IiwgIkwwIiwgIkIwIiwgIkEwIgorICAgKTsKKworICAgZm9yIChqPTA7ajxuYkRpbTtqKyspIHsKKyAgICAgIHhbal0gPSBTVUIxNih4W2pdLFNITDE2KChzcHhfd29yZDE2X3QpY2Ria1tiZXN0X2lkKm5iRGltK2pdLDUpKTsKKyAgIH0KKyAgIHJldHVybiBiZXN0X2lkOworfQorI2VuZGlmCisKKyNkZWZpbmUgT1ZFUlJJREVfTFNQX1dFSUdIVF9RVUFOVAorI2lmZGVmIE9WRVJSSURFX0xTUF9XRUlHSFRfUVVBTlQKKworLyoKKyAgTm90ZSBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvTWFjaGluZS1Db25zdHJhaW50cy5odG1sCisgIHdlbGwgdGVsbCB5b3UgYWxsIHRoZSBtYWdpYyByZXNnaXN0ZXIgY29uc3RyYWludHMgdXNlZCBiZWxvdworICBmb3IgZ2NjIGluLWxpbmUgYXNtLgorKi8KKworc3RhdGljIGludCBsc3Bfd2VpZ2h0X3F1YW50KAorICBzcHhfd29yZDE2X3QgICAgICAqeCwgCisgIHNweF93b3JkMTZfdCAgICAgICp3ZWlnaHQsIAorICBjb25zdCBzaWduZWQgY2hhciAqY2RiaywgCisgIGludCAgICAgICAgICAgICAgICBuYlZlYywgCisgIGludCAgICAgICAgICAgICAgICBuYkRpbQorKQoreworICAgaW50ICAgICAgICAgIGo7CisgICBzcHhfd29yZDMyX3QgYmVzdF9kaXN0PTE8PDMwOworICAgaW50ICAgICAgICAgIGJlc3RfaWQ9MDsKKworICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKyAgICAgKAorIgklMCA9IDEgKFgpO1xuXHQiICAgICAgICAgICAgICAgICAgICAgICAvKiAlMDogYmVzdF9kaXN0ICovICAgIAorIgklMCA8PD0gMzA7XG5cdCIgICAgIAorIgklMSA9IDAgKFgpO1xuXHQiICAgICAgICAgICAgICAgICAgICAgICAvKiAlMTogYmVzdF9pICAgICAgICAgKi8KKyIgICAgICAgUDIgPSAlNFxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUDI6IHB0ciB0byBjZGJrICAgICovCisiICAgICAgIFI1ID0gMDtcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFI1OiBiZXN0IGNiIGVudHJ5ICAqLworCisiICAgICAgIFIwID0gJTY7XG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCB1cCBjaXJjIGFkZHIgICAqLworIiAgICAgICBSMCA8PD0gMTtcblx0IgorIiAgICAgICBMMCA9IFIwO1xuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAKKyIgICAgICAgTDEgPSBSMDtcblx0IgorIiAgICAgICBJMCA9ICUyO1xuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAlMjogJnhbMF0gICAgICAgICAgKi8KKyIJSTEgPSAlMztcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJTM6ICZ3ZWlnaHRbMF0gICAgICovCisiICAgICAgIEIwID0gJTI7XG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgIAorIglCMSA9ICUzO1xuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAKKworIglMU0VUVVAgKGx3cTEsIGx3cTIpIExDMCA9ICU1O1xuXHQiCisibHdxMToJICBSMyA9IDAgKFgpO1xuXHQiICAgICAgICAgICAgICAgICAgICAgLyogUjM6IGRpc3QgICAgICAgICAgICovCisiCSAgTFNFVFVQIChsd3EzLCBsd3E0KSBMQzEgPSAlNjtcblx0IgorImx3cTM6CSAgICBSMC5MID0gVyBbSTArK10gfHwgUjIuTCA9IFcgW0kxKytdO1xuXHQiCisiICAgICAgICAgICBSMSA9IEIgW1AyKytdIChYKTtcblx0IiAgICAgICAgICAgIAorIgkgICAgUjEgPDw9IDU7XG5cdCIKKyIJICAgIFIwLkwgPSBSMC5MIC0gUjEuTDtcblx0IgorIiAgICAgICAgICAgUjAgPSBSMC5MKlIwLkw7XG5cdCIKKyIJICAgIEExID0gUjIuTCpSMC5MIChNLElTKTtcblx0IgorIgkgICAgQTEgPSBBMSA+Pj4gMTY7XG5cdCIKKyIJICAgIFIxID0gKEExICs9IFIyLkwqUjAuSCkgKElTKTtcblx0IgorImx3cTQ6CSAgICBSMyA9IFIzICsgUjE7XG5cdCIKKworIgkgIGNjID1SMzwlMDtcblx0IgorIgkgIGlmIGNjICUwPVIzO1xuXHQiCisiCSAgaWYgY2MgJTE9UjU7XG5cdCIKKyJsd3EyOiAgICBSNSArPSAxO1xuXHQiCisiICAgICAgICAgTDAgPSAwO1xuXHQiCisiICAgICAgICAgTDEgPSAwO1xuXHQiCisgICA6ICI9JmQiIChiZXN0X2Rpc3QpLCAiPSZkIiAoYmVzdF9pZCkKKyAgIDogImEiICh4KSwgImEiICh3ZWlnaHQpLCAiYiIgKGNkYmspLCAiYSIgKG5iVmVjKSwgImEiIChuYkRpbSkKKyAgIDogIkkwIiwgIkkxIiwgIlAyIiwgIlIwIiwgIlIxIiwgIlIyIiwgIlIzIiwgIlI1IiwgIkExIiwKKyAgICAgIkwwIiwgIkwxIiwgIkIwIiwgIkIxIgorICAgKTsKKworICAgZm9yIChqPTA7ajxuYkRpbTtqKyspIHsKKyAgICAgIHhbal0gPSBTVUIxNih4W2pdLFNITDE2KChzcHhfd29yZDE2X3QpY2Ria1tiZXN0X2lkKm5iRGltK2pdLDUpKTsKKyAgIH0KKyAgIHJldHVybiBiZXN0X2lkOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9yZXNhbXBsZS5jIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvcmVzYW1wbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWZhYzYwCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvcmVzYW1wbGUuYwpAQCAtMCwwICsxLDEwMTQgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNyBKZWFuLU1hcmMgVmFsaW4KKyAgICAgIAorICAgRmlsZTogcmVzYW1wbGUuYworICAgQXJiaXRyYXJ5IHJlc2FtcGxpbmcgY29kZQorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAgIG1ldDoKKworICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgICBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgICBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgICBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisvKgorICAgVGhlIGRlc2lnbiBnb2FscyBvZiB0aGlzIGNvZGUgYXJlOgorICAgICAgLSBWZXJ5IGZhc3QgYWxnb3JpdGhtCisgICAgICAtIFNJTUQtZnJpZW5kbHkgYWxnb3JpdGhtCisgICAgICAtIExvdyBtZW1vcnkgcmVxdWlyZW1lbnQKKyAgICAgIC0gR29vZCAqcGVyY2VwdHVhbCogcXVhbGl0eSAoYW5kIG5vdCBiZXN0IFNOUikKKworICAgVGhlIGNvZGUgaXMgd29ya2luZywgYnV0IGl0J3MgaW4gYSB2ZXJ5IGVhcmx5IHN0YWdlLCBzbyBpdCBtYXkgaGF2ZQorICAgYXJ0aWZhY3RzLCBub2lzZSBvciBzdWJsaW1pbmFsIG1lc3NhZ2VzIGZyb20gc2F0YW4uIEFsc28sIHRoZSBBUEkgCisgICBpc24ndCBzdGFibGUgYW5kIEkgY2FuIGFjdHVhbGx5IHByb21pc2UgdGhhdCBJICp3aWxsKiBjaGFuZ2UgdGhlIEFQSQorICAgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuCisKK1RPRE8gbGlzdDoKKyAgICAgIC0gVmFyaWFibGUgY2FsY3VsYXRpb24gcmVzb2x1dGlvbiBkZXBlbmRpbmcgb24gcXVhbGl0eSBzZXR0aW5nCisgICAgICAgICAtIFNpbmdsZSB2cyBkb3VibGUgaW4gZmxvYXQgbW9kZQorICAgICAgICAgLSAxNi1iaXQgdnMgMzItYml0IChzaW5jIG9ubHkpIGluIGZpeGVkLXBvaW50IG1vZGUKKyAgICAgIC0gTWFrZSBzdXJlIHRoZSBmaWx0ZXIgdXBkYXRlIHdvcmtzIGV2ZW4gd2hlbiBjaGFuZ2luZyBwYXJhbXMgCisgICAgICAgICAgICAgYWZ0ZXIgb25seSBhIGZldyBzYW1wbGVzIHByb2Nlc2VkCisqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpZmRlZiBPVVRTSURFX1NQRUVYCisjaW5jbHVkZSA8c3RkbGliLmg+Cit2b2lkICpzcGVleF9hbGxvYyAoaW50IHNpemUpIHtyZXR1cm4gY2FsbG9jKHNpemUsMSk7fQordm9pZCAqc3BlZXhfcmVhbGxvYyAodm9pZCAqcHRyLCBpbnQgc2l6ZSkge3JldHVybiByZWFsbG9jKHB0ciwgc2l6ZSk7fQordm9pZCBzcGVleF9mcmVlICh2b2lkICpwdHIpIHtmcmVlKHB0cik7fQorI2luY2x1ZGUgInNwZWV4X3Jlc2FtcGxlci5oIgorI2luY2x1ZGUgImFyY2guaCIKKyNlbHNlIC8qIE9VVFNJREVfU1BFRVggKi8KKyAgICAgICAgICAgICAgIAorI2luY2x1ZGUgInNwZWV4L3NwZWV4X3Jlc2FtcGxlci5oIgorI2luY2x1ZGUgIm1pc2MuaCIKKyNlbmRpZiAvKiBPVVRTSURFX1NQRUVYICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpZm5kZWYgTV9QSQorI2RlZmluZSBNX1BJIDMuMTQxNTkyNjMKKyNlbmRpZgorCisjaWZkZWYgRklYRURfUE9JTlQKKyNkZWZpbmUgV09SRDJJTlQoeCkgKCh4KSA8IC0zMjc2NyA/IC0zMjc2OCA6ICgoeCkgPiAzMjc2NiA/IDMyNzY3IDogKHgpKSkgIAorI2Vsc2UKKyNkZWZpbmUgV09SRDJJTlQoeCkgKCh4KSA8IC0zMjc2Ny41ZiA/IC0zMjc2OCA6ICgoeCkgPiAzMjc2Ni41ZiA/IDMyNzY3IDogZmxvb3IoLjUrKHgpKSkpICAKKyNlbmRpZgorICAgICAgICAgICAgICAgCisvKiNkZWZpbmUgZmxvYXQgZG91YmxlKi8KKyNkZWZpbmUgRklMVEVSX1NJWkUgNjQKKyNkZWZpbmUgT1ZFUlNBTVBMRSA4CisKKyNkZWZpbmUgSU1BWChhLGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCisKKwordHlwZWRlZiBpbnQgKCpyZXNhbXBsZXJfYmFzaWNfZnVuYykoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqLCBzcHhfdWludDMyX3QgLCBjb25zdCBzcHhfd29yZDE2X3QgKiwgc3B4X3VpbnQzMl90ICosIHNweF93b3JkMTZfdCAqLCBzcHhfdWludDMyX3QgKik7CisKK3N0cnVjdCBTcGVleFJlc2FtcGxlclN0YXRlXyB7CisgICBzcHhfdWludDMyX3QgaW5fcmF0ZTsKKyAgIHNweF91aW50MzJfdCBvdXRfcmF0ZTsKKyAgIHNweF91aW50MzJfdCBudW1fcmF0ZTsKKyAgIHNweF91aW50MzJfdCBkZW5fcmF0ZTsKKyAgIAorICAgaW50ICAgIHF1YWxpdHk7CisgICBzcHhfdWludDMyX3QgbmJfY2hhbm5lbHM7CisgICBzcHhfdWludDMyX3QgZmlsdF9sZW47CisgICBzcHhfdWludDMyX3QgbWVtX2FsbG9jX3NpemU7CisgICBpbnQgICAgICAgICAgaW50X2FkdmFuY2U7CisgICBpbnQgICAgICAgICAgZnJhY19hZHZhbmNlOworICAgZmxvYXQgIGN1dG9mZjsKKyAgIHNweF91aW50MzJfdCBvdmVyc2FtcGxlOworICAgaW50ICAgICAgICAgIGluaXRpYWxpc2VkOworICAgaW50ICAgICAgICAgIHN0YXJ0ZWQ7CisgICAKKyAgIC8qIFRoZXNlIGFyZSBwZXItY2hhbm5lbCAqLworICAgc3B4X2ludDMyX3QgICpsYXN0X3NhbXBsZTsKKyAgIHNweF91aW50MzJfdCAqc2FtcF9mcmFjX251bTsKKyAgIHNweF91aW50MzJfdCAqbWFnaWNfc2FtcGxlczsKKyAgIAorICAgc3B4X3dvcmQxNl90ICptZW07CisgICBzcHhfd29yZDE2X3QgKnNpbmNfdGFibGU7CisgICBzcHhfdWludDMyX3Qgc2luY190YWJsZV9sZW5ndGg7CisgICByZXNhbXBsZXJfYmFzaWNfZnVuYyByZXNhbXBsZXJfcHRyOworICAgICAgICAgCisgICBpbnQgICAgaW5fc3RyaWRlOworICAgaW50ICAgIG91dF9zdHJpZGU7Cit9IDsKKworc3RhdGljIGRvdWJsZSBrYWlzZXIxMl90YWJsZVs2OF0gPSB7CisgICAwLjk5ODU5ODQ5LCAxLjAwMDAwMDAwLCAwLjk5ODU5ODQ5LCAwLjk5NDQwNDc1LCAwLjk4NzQ1MTA1LCAwLjk3Nzc5MDc2LAorICAgMC45NjU0OTc3MCwgMC45NTA2NjUyOSwgMC45MzM0MDU0NywgMC45MTM4NDc0MSwgMC44OTIxMzU5OCwgMC44Njg0MzAxNCwKKyAgIDAuODQyOTAxMTYsIDAuODE1NzMwNjcsIDAuNzg3MTA4NjYsIDAuNzU3MjMxNDgsIDAuNzI2Mjk5NzAsIDAuNjk0NTE2MDEsCisgICAwLjY2MjA4MzIxLCAwLjYyOTIwMjE2LCAwLjU5NjA2OTg2LCAwLjU2Mjg3NzYyLCAwLjUyOTgwOTM4LCAwLjQ5NzA0MDE0LAorICAgMC40NjQ3MzQ1NSwgMC40MzMwNDU3NiwgMC40MDIxMTQzMSwgMC4zNzIwNjczNSwgMC4zNDMwMTgwMCwgMC4zMTUwNjQ5MCwKKyAgIDAuMjg4MjkxOTUsIDAuMjYyNzY4MzIsIDAuMjM4NTQ4NTEsIDAuMjE1NjcyNzQsIDAuMTk0MTY3MzYsIDAuMTc0MDQ1NDYsCisgICAwLjE1NTMwNzY2LCAwLjEzNzk0Mjk0LCAwLjEyMTkyOTU3LCAwLjEwNzIzNjE2LCAwLjA5MzgyMjcyLCAwLjA4MTY0MTc4LAorICAgMC4wNzA2Mzk1MCwgMC4wNjA3NTY4NSwgMC4wNTE5MzA2NCwgMC4wNDQwOTQ2NiwgMC4wMzcxODA2OSwgMC4wMzExMTk0NywKKyAgIDAuMDI1ODQxNjEsIDAuMDIxMjc4MzgsIDAuMDE3MzYyNTAsIDAuMDE0MDI4NzgsIDAuMDExMjE0NjMsIDAuMDA4ODYwNTgsCisgICAwLjAwNjkxMDY0LCAwLjAwNTMxMjU2LCAwLjAwNDAxODA1LCAwLjAwMjk4MjkxLCAwLjAwMjE2NzAyLCAwLjAwMTUzNDM4LAorICAgMC4wMDEwNTI5NywgMC4wMDA2OTQ2MywgMC4wMDA0MzQ4OSwgMC4wMDAyNTI3MiwgMC4wMDAxMzAzMSwgMC4wMDAwNTI3NzM0LAorICAgMC4wMDAwMTAwMCwgMC4wMDAwMDAwMH07CisvKgorc3RhdGljIGRvdWJsZSBrYWlzZXIxMl90YWJsZVszNl0gPSB7CisgICAwLjk5NDQwNDc1LCAxLjAwMDAwMDAwLCAwLjk5NDQwNDc1LCAwLjk3Nzc5MDc2LCAwLjk1MDY2NTI5LCAwLjkxMzg0NzQxLAorICAgMC44Njg0MzAxNCwgMC44MTU3MzA2NywgMC43NTcyMzE0OCwgMC42OTQ1MTYwMSwgMC42MjkyMDIxNiwgMC41NjI4Nzc2MiwKKyAgIDAuNDk3MDQwMTQsIDAuNDMzMDQ1NzYsIDAuMzcyMDY3MzUsIDAuMzE1MDY0OTAsIDAuMjYyNzY4MzIsIDAuMjE1NjcyNzQsCisgICAwLjE3NDA0NTQ2LCAwLjEzNzk0Mjk0LCAwLjEwNzIzNjE2LCAwLjA4MTY0MTc4LCAwLjA2MDc1Njg1LCAwLjA0NDA5NDY2LAorICAgMC4wMzExMTk0NywgMC4wMjEyNzgzOCwgMC4wMTQwMjg3OCwgMC4wMDg4NjA1OCwgMC4wMDUzMTI1NiwgMC4wMDI5ODI5MSwKKyAgIDAuMDAxNTM0MzgsIDAuMDAwNjk0NjMsIDAuMDAwMjUyNzIsIDAuMDAwMDUyNzczNCwgMC4wMDAwMDUwMCwgMC4wMDAwMDAwMH07CisqLworc3RhdGljIGRvdWJsZSBrYWlzZXIxMF90YWJsZVszNl0gPSB7CisgICAwLjk5NTM3NzgxLCAxLjAwMDAwMDAwLCAwLjk5NTM3NzgxLCAwLjk4MTYyNjQ0LCAwLjk1OTA4NzEyLCAwLjkyODMxNDQ2LAorICAgMC44OTAwNTU4MywgMC44NDUyMjQwMSwgMC43OTQ4NjQyNCwgMC43NDAxMTcxMywgMC42ODIxNzkzNCwgMC42MjIyNjM0NywKKyAgIDAuNTYxNTU5MTUsIDAuNTAxMTk2ODAsIDAuNDQyMjE1NDksIDAuMzg1NTM2MTksIDAuMzMxOTQxMDcsIDAuMjgyMDU5NjIsCisgICAwLjIzNjM2MTUyLCAwLjE5NTE1NjMzLCAwLjE1ODU5OTMyLCAwLjEyNjcwMjgwLCAwLjA5OTM1MjA1LCAwLjA3NjMyNDUxLAorICAgMC4wNTczMTEzMiwgMC4wNDE5Mzk4MCwgMC4wMjk3OTU4NCwgMC4wMjA0NDUxMCwgMC4wMTM0NTIyNCwgMC4wMDgzOTczOSwKKyAgIDAuMDA0ODg5NTEsIDAuMDAyNTc2MzYsIDAuMDAxMTUxMDEsIDAuMDAwMzU1MTUsIDAuMDAwMDAwMDAsIDAuMDAwMDAwMDB9OworCitzdGF0aWMgZG91YmxlIGthaXNlcjhfdGFibGVbMzZdID0geworICAgMC45OTYzNTI1OCwgMS4wMDAwMDAwMCwgMC45OTYzNTI1OCwgMC45ODU0ODAxMiwgMC45Njc1OTAxNCwgMC45NDMwMjIwMCwKKyAgIDAuOTEyMjM3NTEsIDAuODc1ODA4MTEsIDAuODM0Mzk5MjcsIDAuNzg4NzUyNDUsIDAuNzM5NjY1MzgsIDAuNjg3OTcxMjYsCisgICAwLjYzNDUxNzUwLCAwLjU4MDE0NDgyLCAwLjUyNTY2NzI1LCAwLjQ3MTg1MzY5LCAwLjQxOTQxMTUwLCAwLjM2ODk3MjcyLAorICAgMC4zMjEwODMwNCwgMC4yNzYxOTM4OCwgMC4yMzQ2NTc3NiwgMC4xOTY3MjY3MCwgMC4xNjI1NTM4MCwgMC4xMzIxOTc1OCwKKyAgIDAuMTA1NjI4ODcsIDAuMDgyNzM5ODIsIDAuMDYzMzU0NTEsIDAuMDQ3MjQwODgsIDAuMDM0MTIzMjEsIDAuMDIzNjk0OTAsCisgICAwLjAxNTYzMDkzLCAwLjAwOTU5OTY4LCAwLjAwNTI3MzYzLCAwLjAwMjMzODgzLCAwLjAwMDUwMDAwLCAwLjAwMDAwMDAwfTsKKyAgIAorc3RhdGljIGRvdWJsZSBrYWlzZXI2X3RhYmxlWzM2XSA9IHsKKyAgIDAuOTk3MzMwMDYsIDEuMDAwMDAwMDAsIDAuOTk3MzMwMDYsIDAuOTg5MzU1OTUsIDAuOTc2MTg0MTgsIDAuOTU3OTkwMDMsCisgICAwLjkzNTAxNDIzLCAwLjkwNzU1ODU1LCAwLjg3NTk4MDA5LCAwLjg0MDY4NDc1LCAwLjgwMjExOTc3LCAwLjc2MDc2NTY1LAorICAgMC43MTcxMjc1MiwgMC42NzE3MjYyMywgMC42MjUwODkzNywgMC41Nzc3NDIyNCwgMC41MzAxOTkyNSwgMC40ODI5NTU2MSwKKyAgIDAuNDM2NDc5NjksIDAuMzkxMjA2MTYsIDAuMzQ3NTI5OTcsIDAuMzA1ODAxMjcsIDAuMjY2MzIxNTIsIDAuMjI5MzQwNTgsCisgICAwLjE5NTA1NTAzLCAwLjE2MzYwNzU2LCAwLjEzNTA4NzU1LCAwLjEwOTUzMjYyLCAwLjA4NjkzMTIwLCAwLjA2NzIyNjAwLAorICAgMC4wNTAzMTgyMCwgMC4wMzYwNzIzMSwgMC4wMjQzMjE1MSwgMC4wMTQ4NzMzNCwgMC4wMDc1MjAwMCwgMC4wMDAwMDAwMH07CisKK3N0cnVjdCBGdW5jRGVmIHsKKyAgIGRvdWJsZSAqdGFibGU7CisgICBpbnQgb3ZlcnNhbXBsZTsKK307CisgICAgICAKK3N0YXRpYyBzdHJ1Y3QgRnVuY0RlZiBfS0FJU0VSMTIgPSB7a2Fpc2VyMTJfdGFibGUsIDY0fTsKKyNkZWZpbmUgS0FJU0VSMTIgKCZfS0FJU0VSMTIpCisvKnN0YXRpYyBzdHJ1Y3QgRnVuY0RlZiBfS0FJU0VSMTIgPSB7a2Fpc2VyMTJfdGFibGUsIDMyfTsKKyNkZWZpbmUgS0FJU0VSMTIgKCZfS0FJU0VSMTIpKi8KK3N0YXRpYyBzdHJ1Y3QgRnVuY0RlZiBfS0FJU0VSMTAgPSB7a2Fpc2VyMTBfdGFibGUsIDMyfTsKKyNkZWZpbmUgS0FJU0VSMTAgKCZfS0FJU0VSMTApCitzdGF0aWMgc3RydWN0IEZ1bmNEZWYgX0tBSVNFUjggPSB7a2Fpc2VyOF90YWJsZSwgMzJ9OworI2RlZmluZSBLQUlTRVI4ICgmX0tBSVNFUjgpCitzdGF0aWMgc3RydWN0IEZ1bmNEZWYgX0tBSVNFUjYgPSB7a2Fpc2VyNl90YWJsZSwgMzJ9OworI2RlZmluZSBLQUlTRVI2ICgmX0tBSVNFUjYpCisKK3N0cnVjdCBRdWFsaXR5TWFwcGluZyB7CisgICBpbnQgYmFzZV9sZW5ndGg7CisgICBpbnQgb3ZlcnNhbXBsZTsKKyAgIGZsb2F0IGRvd25zYW1wbGVfYmFuZHdpZHRoOworICAgZmxvYXQgdXBzYW1wbGVfYmFuZHdpZHRoOworICAgc3RydWN0IEZ1bmNEZWYgKndpbmRvd19mdW5jOworfTsKKworCisvKiBUaGlzIHRhYmxlIG1hcHMgY29udmVyc2lvbiBxdWFsaXR5IHRvIGludGVybmFsIHBhcmFtZXRlcnMuIFRoZXJlIGFyZSB0d28KKyAgIHJlYXNvbnMgdGhhdCBleHBsYWluIHdoeSB0aGUgdXAtc2FtcGxpbmcgYmFuZHdpZHRoIGlzIGxhcmdlciB0aGFuIHRoZSAKKyAgIGRvd24tc2FtcGxpbmcgYmFuZHdpZHRoOgorICAgMSkgV2hlbiB1cC1zYW1wbGluZywgd2UgY2FuIGFzc3VtZSB0aGF0IHRoZSBzcGVjdHJ1bSBpcyBhbHJlYWR5IGF0dGVudWF0ZWQKKyAgICAgIGNsb3NlIHRvIHRoZSBOeXF1aXN0IHJhdGUgKGZyb20gYW4gQS9EIG9yIGEgcHJldmlvdXMgcmVzYW1wbGluZyBmaWx0ZXIpCisgICAyKSBBbnkgYWxpYXNpbmcgdGhhdCBvY2N1cnMgdmVyeSBjbG9zZSB0byB0aGUgTnlxdWlzdCByYXRlIHdpbGwgYmUgbWFza2VkCisgICAgICBieSB0aGUgc2ludXNvaWRzL25vaXNlIGp1c3QgYmVsb3cgdGhlIE55cXVpc3QgcmF0ZSAoZ3VhcmFudGVlZCBvbmx5IGZvcgorICAgICAgdXAtc2FtcGxpbmcpLgorKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgUXVhbGl0eU1hcHBpbmcgcXVhbGl0eV9tYXBbMTFdID0geworICAgeyAgOCwgIDQsIDAuODMwZiwgMC44NjBmLCBLQUlTRVI2IH0sIC8qIFEwICovCisgICB7IDE2LCAgNCwgMC44NTBmLCAwLjg4MGYsIEtBSVNFUjYgfSwgLyogUTEgKi8KKyAgIHsgMzIsICA0LCAwLjg4MmYsIDAuOTEwZiwgS0FJU0VSNiB9LCAvKiBRMiAqLyAgLyogODIuMyUgY3V0b2ZmICggfjYwIGRCIHN0b3ApIDYgICovCisgICB7IDQ4LCAgOCwgMC44OTVmLCAwLjkxN2YsIEtBSVNFUjggfSwgLyogUTMgKi8gIC8qIDg0LjklIGN1dG9mZiAoIH44MCBkQiBzdG9wKSA4ICAqLworICAgeyA2NCwgIDgsIDAuOTIxZiwgMC45NDBmLCBLQUlTRVI4IH0sIC8qIFE0ICovICAvKiA4OC43JSBjdXRvZmYgKCB+ODAgZEIgc3RvcCkgOCAgKi8KKyAgIHsgODAsICA4LCAwLjkyMmYsIDAuOTQwZiwgS0FJU0VSMTB9LCAvKiBRNSAqLyAgLyogODkuMSUgY3V0b2ZmICh+MTAwIGRCIHN0b3ApIDEwICovCisgICB7IDk2LCAgOCwgMC45NDBmLCAwLjk0NWYsIEtBSVNFUjEwfSwgLyogUTYgKi8gIC8qIDkxLjUlIGN1dG9mZiAofjEwMCBkQiBzdG9wKSAxMCAqLworICAgezEyOCwgMTYsIDAuOTUwZiwgMC45NTBmLCBLQUlTRVIxMH0sIC8qIFE3ICovICAvKiA5My4xJSBjdXRvZmYgKH4xMDAgZEIgc3RvcCkgMTAgKi8KKyAgIHsxNjAsIDE2LCAwLjk2MGYsIDAuOTYwZiwgS0FJU0VSMTB9LCAvKiBROCAqLyAgLyogOTQuNSUgY3V0b2ZmICh+MTAwIGRCIHN0b3ApIDEwICovCisgICB7MTkyLCAxNiwgMC45NjhmLCAwLjk2OGYsIEtBSVNFUjEyfSwgLyogUTkgKi8gIC8qIDk1LjUlIGN1dG9mZiAofjEwMCBkQiBzdG9wKSAxMCAqLworICAgezI1NiwgMTYsIDAuOTc1ZiwgMC45NzVmLCBLQUlTRVIxMn0sIC8qIFExMCAqLyAvKiA5Ni42JSBjdXRvZmYgKH4xMDAgZEIgc3RvcCkgMTAgKi8KK307CisvKjgsMjQsNDAsNTYsODAsMTA0LDEyOCwxNjAsMjAwLDI1NiwzMjAqLworc3RhdGljIGRvdWJsZSBjb21wdXRlX2Z1bmMoZmxvYXQgeCwgc3RydWN0IEZ1bmNEZWYgKmZ1bmMpCit7CisgICBmbG9hdCB5LCBmcmFjOworICAgZG91YmxlIGludGVycFs0XTsKKyAgIGludCBpbmQ7IAorICAgeSA9IHgqZnVuYy0+b3ZlcnNhbXBsZTsKKyAgIGluZCA9IChpbnQpZmxvb3IoeSk7CisgICBmcmFjID0gKHktaW5kKTsKKyAgIC8qIENTRSB3aXRoIGhhbmRsZSB0aGUgcmVwZWF0ZWQgcG93ZXJzICovCisgICBpbnRlcnBbM10gPSAgLTAuMTY2NjY2NjY2NypmcmFjICsgMC4xNjY2NjY2NjY3KihmcmFjKmZyYWMqZnJhYyk7CisgICBpbnRlcnBbMl0gPSBmcmFjICsgMC41KihmcmFjKmZyYWMpIC0gMC41KihmcmFjKmZyYWMqZnJhYyk7CisgICAvKmludGVycFsyXSA9IDEuZiAtIDAuNWYqZnJhYyAtIGZyYWMqZnJhYyArIDAuNWYqZnJhYypmcmFjKmZyYWM7Ki8KKyAgIGludGVycFswXSA9IC0wLjMzMzMzMzMzMzMqZnJhYyArIDAuNSooZnJhYypmcmFjKSAtIDAuMTY2NjY2NjY2NyooZnJhYypmcmFjKmZyYWMpOworICAgLyogSnVzdCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSByb3VuZGluZyBwcm9ibGVtcyAqLworICAgaW50ZXJwWzFdID0gMS5mLWludGVycFszXS1pbnRlcnBbMl0taW50ZXJwWzBdOworICAgCisgICAvKnN1bSA9IGZyYWMqYWNjdW1bMV0gKyAoMS1mcmFjKSphY2N1bVsyXTsqLworICAgcmV0dXJuIGludGVycFswXSpmdW5jLT50YWJsZVtpbmRdICsgaW50ZXJwWzFdKmZ1bmMtPnRhYmxlW2luZCsxXSArIGludGVycFsyXSpmdW5jLT50YWJsZVtpbmQrMl0gKyBpbnRlcnBbM10qZnVuYy0+dGFibGVbaW5kKzNdOworfQorCisjaWYgMAorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICBpbnQgaTsKKyAgIGZvciAoaT0wO2k8MjU2O2krKykKKyAgIHsKKyAgICAgIHByaW50ZiAoIiVmXG4iLCBjb21wdXRlX2Z1bmMoaS8yNTYuLCBLQUlTRVIxMikpOworICAgfQorICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmZGVmIEZJWEVEX1BPSU5UCisvKiBUaGUgc2xvdyB3YXkgb2YgY29tcHV0aW5nIGEgc2luYyBmb3IgdGhlIHRhYmxlLiBTaG91bGQgaW1wcm92ZSB0aGF0IHNvbWUgZGF5ICovCitzdGF0aWMgc3B4X3dvcmQxNl90IHNpbmMoZmxvYXQgY3V0b2ZmLCBmbG9hdCB4LCBpbnQgTiwgc3RydWN0IEZ1bmNEZWYgKndpbmRvd19mdW5jKQoreworICAgLypmcHJpbnRmIChzdGRlcnIsICIlZiAiLCB4KTsqLworICAgZmxvYXQgeHggPSB4ICogY3V0b2ZmOworICAgaWYgKGZhYnMoeCk8MWUtNmYpCisgICAgICByZXR1cm4gV09SRDJJTlQoMzI3NjguKmN1dG9mZik7CisgICBlbHNlIGlmIChmYWJzKHgpID4gLjVmKk4pCisgICAgICByZXR1cm4gMDsKKyAgIC8qRklYTUU6IENhbiBpdCByZWFsbHkgYmUgYW55IHNsb3dlciB0aGFuIHRoaXM/ICovCisgICByZXR1cm4gV09SRDJJTlQoMzI3NjguKmN1dG9mZipzaW4oTV9QSSp4eCkvKE1fUEkqeHgpICogY29tcHV0ZV9mdW5jKGZhYnMoMi4qeC9OKSwgd2luZG93X2Z1bmMpKTsKK30KKyNlbHNlCisvKiBUaGUgc2xvdyB3YXkgb2YgY29tcHV0aW5nIGEgc2luYyBmb3IgdGhlIHRhYmxlLiBTaG91bGQgaW1wcm92ZSB0aGF0IHNvbWUgZGF5ICovCitzdGF0aWMgc3B4X3dvcmQxNl90IHNpbmMoZmxvYXQgY3V0b2ZmLCBmbG9hdCB4LCBpbnQgTiwgc3RydWN0IEZ1bmNEZWYgKndpbmRvd19mdW5jKQoreworICAgLypmcHJpbnRmIChzdGRlcnIsICIlZiAiLCB4KTsqLworICAgZmxvYXQgeHggPSB4ICogY3V0b2ZmOworICAgaWYgKGZhYnMoeCk8MWUtNikKKyAgICAgIHJldHVybiBjdXRvZmY7CisgICBlbHNlIGlmIChmYWJzKHgpID4gLjUqTikKKyAgICAgIHJldHVybiAwOworICAgLypGSVhNRTogQ2FuIGl0IHJlYWxseSBiZSBhbnkgc2xvd2VyIHRoYW4gdGhpcz8gKi8KKyAgIHJldHVybiBjdXRvZmYqc2luKE1fUEkqeHgpLyhNX1BJKnh4KSAqIGNvbXB1dGVfZnVuYyhmYWJzKDIuKngvTiksIHdpbmRvd19mdW5jKTsKK30KKyNlbmRpZgorCisjaWZkZWYgRklYRURfUE9JTlQKK3N0YXRpYyB2b2lkIGN1YmljX2NvZWYoc3B4X3dvcmQxNl90IHgsIHNweF93b3JkMTZfdCBpbnRlcnBbNF0pCit7CisgICAvKiBDb21wdXRlIGludGVycG9sYXRpb24gY29lZmZpY2llbnRzLiBJJ20gbm90IHN1cmUgd2hldGhlciB0aGlzIGNvcnJlc3BvbmRzIHRvIGN1YmljIGludGVycG9sYXRpb24KKyAgIGJ1dCBJIGtub3cgaXQncyBNTVNFLW9wdGltYWwgb24gYSBzaW5jICovCisgICBzcHhfd29yZDE2X3QgeDIsIHgzOworICAgeDIgPSBNVUxUMTZfMTZfUDE1KHgsIHgpOworICAgeDMgPSBNVUxUMTZfMTZfUDE1KHgsIHgyKTsKKyAgIGludGVycFswXSA9IFBTSFIzMihNVUxUMTZfMTYoUUNPTlNUMTYoLTAuMTY2NjdmLCAxNSkseCkgKyBNVUxUMTZfMTYoUUNPTlNUMTYoMC4xNjY2N2YsIDE1KSx4MyksMTUpOworICAgaW50ZXJwWzFdID0gRVhUUkFDVDE2KEVYVEVORDMyKHgpICsgU0hSMzIoU1VCMzIoRVhURU5EMzIoeDIpLEVYVEVORDMyKHgzKSksMSkpOworICAgaW50ZXJwWzNdID0gUFNIUjMyKE1VTFQxNl8xNihRQ09OU1QxNigtMC4zMzMzM2YsIDE1KSx4KSArIE1VTFQxNl8xNihRQ09OU1QxNiguNWYsMTUpLHgyKSAtIE1VTFQxNl8xNihRQ09OU1QxNigwLjE2NjY3ZiwgMTUpLHgzKSwxNSk7CisgICAvKiBKdXN0IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIHJvdW5kaW5nIHByb2JsZW1zICovCisgICBpbnRlcnBbMl0gPSBRMTVfT05FLWludGVycFswXS1pbnRlcnBbMV0taW50ZXJwWzNdOworICAgaWYgKGludGVycFsyXTwzMjc2NykKKyAgICAgIGludGVycFsyXSs9MTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBjdWJpY19jb2VmKHNweF93b3JkMTZfdCBmcmFjLCBzcHhfd29yZDE2X3QgaW50ZXJwWzRdKQoreworICAgLyogQ29tcHV0ZSBpbnRlcnBvbGF0aW9uIGNvZWZmaWNpZW50cy4gSSdtIG5vdCBzdXJlIHdoZXRoZXIgdGhpcyBjb3JyZXNwb25kcyB0byBjdWJpYyBpbnRlcnBvbGF0aW9uCisgICBidXQgSSBrbm93IGl0J3MgTU1TRS1vcHRpbWFsIG9uIGEgc2luYyAqLworICAgaW50ZXJwWzBdID0gIC0wLjE2NjY3ZipmcmFjICsgMC4xNjY2N2YqZnJhYypmcmFjKmZyYWM7CisgICBpbnRlcnBbMV0gPSBmcmFjICsgMC41ZipmcmFjKmZyYWMgLSAwLjVmKmZyYWMqZnJhYypmcmFjOworICAgLyppbnRlcnBbMl0gPSAxLmYgLSAwLjVmKmZyYWMgLSBmcmFjKmZyYWMgKyAwLjVmKmZyYWMqZnJhYypmcmFjOyovCisgICBpbnRlcnBbM10gPSAtMC4zMzMzM2YqZnJhYyArIDAuNWYqZnJhYypmcmFjIC0gMC4xNjY2N2YqZnJhYypmcmFjKmZyYWM7CisgICAvKiBKdXN0IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIHJvdW5kaW5nIHByb2JsZW1zICovCisgICBpbnRlcnBbMl0gPSAxLi1pbnRlcnBbMF0taW50ZXJwWzFdLWludGVycFszXTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHJlc2FtcGxlcl9iYXNpY19kaXJlY3Rfc2luZ2xlKFNwZWV4UmVzYW1wbGVyU3RhdGUgKnN0LCBzcHhfdWludDMyX3QgY2hhbm5lbF9pbmRleCwgY29uc3Qgc3B4X3dvcmQxNl90ICppbiwgc3B4X3VpbnQzMl90ICppbl9sZW4sIHNweF93b3JkMTZfdCAqb3V0LCBzcHhfdWludDMyX3QgKm91dF9sZW4pCit7CisgICBpbnQgTiA9IHN0LT5maWx0X2xlbjsKKyAgIGludCBvdXRfc2FtcGxlID0gMDsKKyAgIHNweF93b3JkMTZfdCAqbWVtOworICAgaW50IGxhc3Rfc2FtcGxlID0gc3QtPmxhc3Rfc2FtcGxlW2NoYW5uZWxfaW5kZXhdOworICAgc3B4X3VpbnQzMl90IHNhbXBfZnJhY19udW0gPSBzdC0+c2FtcF9mcmFjX251bVtjaGFubmVsX2luZGV4XTsKKyAgIG1lbSA9IHN0LT5tZW0gKyBjaGFubmVsX2luZGV4ICogc3QtPm1lbV9hbGxvY19zaXplOworICAgd2hpbGUgKCEobGFzdF9zYW1wbGUgPj0gKHNweF9pbnQzMl90KSppbl9sZW4gfHwgb3V0X3NhbXBsZSA+PSAoc3B4X2ludDMyX3QpKm91dF9sZW4pKQorICAgeworICAgICAgaW50IGo7CisgICAgICBzcHhfd29yZDMyX3Qgc3VtPTA7CisgICAgICAKKyAgICAgIC8qIFdlIGFscmVhZHkgaGF2ZSBhbGwgdGhlIGZpbHRlciBjb2VmZmljaWVudHMgcHJlLWNvbXB1dGVkIGluIHRoZSB0YWJsZSAqLworICAgICAgY29uc3Qgc3B4X3dvcmQxNl90ICpwdHI7CisgICAgICAvKiBEbyB0aGUgbWVtb3J5IHBhcnQgKi8KKyAgICAgIGZvciAoaj0wO2xhc3Rfc2FtcGxlLU4rMStqIDwgMDtqKyspCisgICAgICB7CisgICAgICAgICBzdW0gKz0gTVVMVDE2XzE2KG1lbVtsYXN0X3NhbXBsZStqXSxzdC0+c2luY190YWJsZVtzYW1wX2ZyYWNfbnVtKnN0LT5maWx0X2xlbitqXSk7CisgICAgICB9CisgICAgICAKKyAgICAgIC8qIERvIHRoZSBuZXcgcGFydCAqLworICAgICAgcHRyID0gaW4rc3QtPmluX3N0cmlkZSoobGFzdF9zYW1wbGUtTisxK2opOworICAgICAgZm9yICg7ajxOO2orKykKKyAgICAgIHsKKyAgICAgICAgIHN1bSArPSBNVUxUMTZfMTYoKnB0cixzdC0+c2luY190YWJsZVtzYW1wX2ZyYWNfbnVtKnN0LT5maWx0X2xlbitqXSk7CisgICAgICAgICBwdHIgKz0gc3QtPmluX3N0cmlkZTsKKyAgICAgIH0KKyAgIAorICAgICAgKm91dCA9IFBTSFIzMihzdW0sMTUpOworICAgICAgb3V0ICs9IHN0LT5vdXRfc3RyaWRlOworICAgICAgb3V0X3NhbXBsZSsrOworICAgICAgbGFzdF9zYW1wbGUgKz0gc3QtPmludF9hZHZhbmNlOworICAgICAgc2FtcF9mcmFjX251bSArPSBzdC0+ZnJhY19hZHZhbmNlOworICAgICAgaWYgKHNhbXBfZnJhY19udW0gPj0gc3QtPmRlbl9yYXRlKQorICAgICAgeworICAgICAgICAgc2FtcF9mcmFjX251bSAtPSBzdC0+ZGVuX3JhdGU7CisgICAgICAgICBsYXN0X3NhbXBsZSsrOworICAgICAgfQorICAgfQorICAgc3QtPmxhc3Rfc2FtcGxlW2NoYW5uZWxfaW5kZXhdID0gbGFzdF9zYW1wbGU7CisgICBzdC0+c2FtcF9mcmFjX251bVtjaGFubmVsX2luZGV4XSA9IHNhbXBfZnJhY19udW07CisgICByZXR1cm4gb3V0X3NhbXBsZTsKK30KKworI2lmZGVmIEZJWEVEX1BPSU5UCisjZWxzZQorLyogVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgZnVuY3Rpb24sIGV4Y2VwdCB3aXRoIGEgZG91YmxlLXByZWNpc2lvbiBhY2N1bXVsYXRvciAqLworc3RhdGljIGludCByZXNhbXBsZXJfYmFzaWNfZGlyZWN0X2RvdWJsZShTcGVleFJlc2FtcGxlclN0YXRlICpzdCwgc3B4X3VpbnQzMl90IGNoYW5uZWxfaW5kZXgsIGNvbnN0IHNweF93b3JkMTZfdCAqaW4sIHNweF91aW50MzJfdCAqaW5fbGVuLCBzcHhfd29yZDE2X3QgKm91dCwgc3B4X3VpbnQzMl90ICpvdXRfbGVuKQoreworICAgaW50IE4gPSBzdC0+ZmlsdF9sZW47CisgICBpbnQgb3V0X3NhbXBsZSA9IDA7CisgICBzcHhfd29yZDE2X3QgKm1lbTsKKyAgIGludCBsYXN0X3NhbXBsZSA9IHN0LT5sYXN0X3NhbXBsZVtjaGFubmVsX2luZGV4XTsKKyAgIHNweF91aW50MzJfdCBzYW1wX2ZyYWNfbnVtID0gc3QtPnNhbXBfZnJhY19udW1bY2hhbm5lbF9pbmRleF07CisgICBtZW0gPSBzdC0+bWVtICsgY2hhbm5lbF9pbmRleCAqIHN0LT5tZW1fYWxsb2Nfc2l6ZTsKKyAgIHdoaWxlICghKGxhc3Rfc2FtcGxlID49IChzcHhfaW50MzJfdCkqaW5fbGVuIHx8IG91dF9zYW1wbGUgPj0gKHNweF9pbnQzMl90KSpvdXRfbGVuKSkKKyAgIHsKKyAgICAgIGludCBqOworICAgICAgZG91YmxlIHN1bT0wOworICAgICAgCisgICAgICAvKiBXZSBhbHJlYWR5IGhhdmUgYWxsIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzIHByZS1jb21wdXRlZCBpbiB0aGUgdGFibGUgKi8KKyAgICAgIGNvbnN0IHNweF93b3JkMTZfdCAqcHRyOworICAgICAgLyogRG8gdGhlIG1lbW9yeSBwYXJ0ICovCisgICAgICBmb3IgKGo9MDtsYXN0X3NhbXBsZS1OKzEraiA8IDA7aisrKQorICAgICAgeworICAgICAgICAgc3VtICs9IE1VTFQxNl8xNihtZW1bbGFzdF9zYW1wbGUral0sKGRvdWJsZSlzdC0+c2luY190YWJsZVtzYW1wX2ZyYWNfbnVtKnN0LT5maWx0X2xlbitqXSk7CisgICAgICB9CisgICAgICAKKyAgICAgIC8qIERvIHRoZSBuZXcgcGFydCAqLworICAgICAgcHRyID0gaW4rc3QtPmluX3N0cmlkZSoobGFzdF9zYW1wbGUtTisxK2opOworICAgICAgZm9yICg7ajxOO2orKykKKyAgICAgIHsKKyAgICAgICAgIHN1bSArPSBNVUxUMTZfMTYoKnB0ciwoZG91YmxlKXN0LT5zaW5jX3RhYmxlW3NhbXBfZnJhY19udW0qc3QtPmZpbHRfbGVuK2pdKTsKKyAgICAgICAgIHB0ciArPSBzdC0+aW5fc3RyaWRlOworICAgICAgfQorICAgCisgICAgICAqb3V0ID0gc3VtOworICAgICAgb3V0ICs9IHN0LT5vdXRfc3RyaWRlOworICAgICAgb3V0X3NhbXBsZSsrOworICAgICAgbGFzdF9zYW1wbGUgKz0gc3QtPmludF9hZHZhbmNlOworICAgICAgc2FtcF9mcmFjX251bSArPSBzdC0+ZnJhY19hZHZhbmNlOworICAgICAgaWYgKHNhbXBfZnJhY19udW0gPj0gc3QtPmRlbl9yYXRlKQorICAgICAgeworICAgICAgICAgc2FtcF9mcmFjX251bSAtPSBzdC0+ZGVuX3JhdGU7CisgICAgICAgICBsYXN0X3NhbXBsZSsrOworICAgICAgfQorICAgfQorICAgc3QtPmxhc3Rfc2FtcGxlW2NoYW5uZWxfaW5kZXhdID0gbGFzdF9zYW1wbGU7CisgICBzdC0+c2FtcF9mcmFjX251bVtjaGFubmVsX2luZGV4XSA9IHNhbXBfZnJhY19udW07CisgICByZXR1cm4gb3V0X3NhbXBsZTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHJlc2FtcGxlcl9iYXNpY19pbnRlcnBvbGF0ZV9zaW5nbGUoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QsIHNweF91aW50MzJfdCBjaGFubmVsX2luZGV4LCBjb25zdCBzcHhfd29yZDE2X3QgKmluLCBzcHhfdWludDMyX3QgKmluX2xlbiwgc3B4X3dvcmQxNl90ICpvdXQsIHNweF91aW50MzJfdCAqb3V0X2xlbikKK3sKKyAgIGludCBOID0gc3QtPmZpbHRfbGVuOworICAgaW50IG91dF9zYW1wbGUgPSAwOworICAgc3B4X3dvcmQxNl90ICptZW07CisgICBpbnQgbGFzdF9zYW1wbGUgPSBzdC0+bGFzdF9zYW1wbGVbY2hhbm5lbF9pbmRleF07CisgICBzcHhfdWludDMyX3Qgc2FtcF9mcmFjX251bSA9IHN0LT5zYW1wX2ZyYWNfbnVtW2NoYW5uZWxfaW5kZXhdOworICAgbWVtID0gc3QtPm1lbSArIGNoYW5uZWxfaW5kZXggKiBzdC0+bWVtX2FsbG9jX3NpemU7CisgICB3aGlsZSAoIShsYXN0X3NhbXBsZSA+PSAoc3B4X2ludDMyX3QpKmluX2xlbiB8fCBvdXRfc2FtcGxlID49IChzcHhfaW50MzJfdCkqb3V0X2xlbikpCisgICB7CisgICAgICBpbnQgajsKKyAgICAgIHNweF93b3JkMzJfdCBzdW09MDsKKyAgICAgIAorICAgICAgLyogV2UgbmVlZCB0byBpbnRlcnBvbGF0ZSB0aGUgc2luYyBmaWx0ZXIgKi8KKyAgICAgIHNweF93b3JkMzJfdCBhY2N1bVs0XSA9IHswLmYsMC5mLCAwLmYsIDAuZn07CisgICAgICBzcHhfd29yZDE2X3QgaW50ZXJwWzRdOworICAgICAgY29uc3Qgc3B4X3dvcmQxNl90ICpwdHI7CisgICAgICBpbnQgb2Zmc2V0OworICAgICAgc3B4X3dvcmQxNl90IGZyYWM7CisgICAgICBvZmZzZXQgPSBzYW1wX2ZyYWNfbnVtKnN0LT5vdmVyc2FtcGxlL3N0LT5kZW5fcmF0ZTsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgICAgZnJhYyA9IFBESVYzMihTSEwzMigoc2FtcF9mcmFjX251bSpzdC0+b3ZlcnNhbXBsZSkgJSBzdC0+ZGVuX3JhdGUsMTUpLHN0LT5kZW5fcmF0ZSk7CisjZWxzZQorICAgICAgZnJhYyA9ICgoZmxvYXQpKChzYW1wX2ZyYWNfbnVtKnN0LT5vdmVyc2FtcGxlKSAlIHN0LT5kZW5fcmF0ZSkpL3N0LT5kZW5fcmF0ZTsKKyNlbmRpZgorICAgICAgICAgLyogVGhpcyBjb2RlIGlzIHdyaXR0ZW4gbGlrZSB0aGlzIHRvIG1ha2UgaXQgZWFzeSB0byBvcHRpbWlzZSB3aXRoIFNJTUQuCisgICAgICBGb3IgbW9zdCBEU1BzLCBpdCB3b3VsZCBiZSBiZXN0IHRvIHNwbGl0IHRoZSBsb29wcyBpbiB0d28gYmVjYXVzZSBtb3N0IERTUHMgCisgICAgICBoYXZlIG9ubHkgdHdvIGFjY3VtdWxhdG9ycyAqLworICAgICAgZm9yIChqPTA7bGFzdF9zYW1wbGUtTisxK2ogPCAwO2orKykKKyAgICAgIHsKKyAgICAgICAgIHNweF93b3JkMTZfdCBjdXJyX21lbSA9IG1lbVtsYXN0X3NhbXBsZStqXTsKKyAgICAgICAgIGFjY3VtWzBdICs9IE1VTFQxNl8xNihjdXJyX21lbSxzdC0+c2luY190YWJsZVs0KyhqKzEpKnN0LT5vdmVyc2FtcGxlLW9mZnNldC0yXSk7CisgICAgICAgICBhY2N1bVsxXSArPSBNVUxUMTZfMTYoY3Vycl9tZW0sc3QtPnNpbmNfdGFibGVbNCsoaisxKSpzdC0+b3ZlcnNhbXBsZS1vZmZzZXQtMV0pOworICAgICAgICAgYWNjdW1bMl0gKz0gTVVMVDE2XzE2KGN1cnJfbWVtLHN0LT5zaW5jX3RhYmxlWzQrKGorMSkqc3QtPm92ZXJzYW1wbGUtb2Zmc2V0XSk7CisgICAgICAgICBhY2N1bVszXSArPSBNVUxUMTZfMTYoY3Vycl9tZW0sc3QtPnNpbmNfdGFibGVbNCsoaisxKSpzdC0+b3ZlcnNhbXBsZS1vZmZzZXQrMV0pOworICAgICAgfQorICAgICAgcHRyID0gaW4rc3QtPmluX3N0cmlkZSoobGFzdF9zYW1wbGUtTisxK2opOworICAgICAgLyogRG8gdGhlIG5ldyBwYXJ0ICovCisgICAgICBmb3IgKDtqPE47aisrKQorICAgICAgeworICAgICAgICAgc3B4X3dvcmQxNl90IGN1cnJfaW4gPSAqcHRyOworICAgICAgICAgcHRyICs9IHN0LT5pbl9zdHJpZGU7CisgICAgICAgICBhY2N1bVswXSArPSBNVUxUMTZfMTYoY3Vycl9pbixzdC0+c2luY190YWJsZVs0KyhqKzEpKnN0LT5vdmVyc2FtcGxlLW9mZnNldC0yXSk7CisgICAgICAgICBhY2N1bVsxXSArPSBNVUxUMTZfMTYoY3Vycl9pbixzdC0+c2luY190YWJsZVs0KyhqKzEpKnN0LT5vdmVyc2FtcGxlLW9mZnNldC0xXSk7CisgICAgICAgICBhY2N1bVsyXSArPSBNVUxUMTZfMTYoY3Vycl9pbixzdC0+c2luY190YWJsZVs0KyhqKzEpKnN0LT5vdmVyc2FtcGxlLW9mZnNldF0pOworICAgICAgICAgYWNjdW1bM10gKz0gTVVMVDE2XzE2KGN1cnJfaW4sc3QtPnNpbmNfdGFibGVbNCsoaisxKSpzdC0+b3ZlcnNhbXBsZS1vZmZzZXQrMV0pOworICAgICAgfQorICAgICAgY3ViaWNfY29lZihmcmFjLCBpbnRlcnApOworICAgICAgc3VtID0gTVVMVDE2XzMyX1ExNShpbnRlcnBbMF0sYWNjdW1bMF0pICsgTVVMVDE2XzMyX1ExNShpbnRlcnBbMV0sYWNjdW1bMV0pICsgTVVMVDE2XzMyX1ExNShpbnRlcnBbMl0sYWNjdW1bMl0pICsgTVVMVDE2XzMyX1ExNShpbnRlcnBbM10sYWNjdW1bM10pOworICAgCisgICAgICAqb3V0ID0gUFNIUjMyKHN1bSwxNSk7CisgICAgICBvdXQgKz0gc3QtPm91dF9zdHJpZGU7CisgICAgICBvdXRfc2FtcGxlKys7CisgICAgICBsYXN0X3NhbXBsZSArPSBzdC0+aW50X2FkdmFuY2U7CisgICAgICBzYW1wX2ZyYWNfbnVtICs9IHN0LT5mcmFjX2FkdmFuY2U7CisgICAgICBpZiAoc2FtcF9mcmFjX251bSA+PSBzdC0+ZGVuX3JhdGUpCisgICAgICB7CisgICAgICAgICBzYW1wX2ZyYWNfbnVtIC09IHN0LT5kZW5fcmF0ZTsKKyAgICAgICAgIGxhc3Rfc2FtcGxlKys7CisgICAgICB9CisgICB9CisgICBzdC0+bGFzdF9zYW1wbGVbY2hhbm5lbF9pbmRleF0gPSBsYXN0X3NhbXBsZTsKKyAgIHN0LT5zYW1wX2ZyYWNfbnVtW2NoYW5uZWxfaW5kZXhdID0gc2FtcF9mcmFjX251bTsKKyAgIHJldHVybiBvdXRfc2FtcGxlOworfQorCisjaWZkZWYgRklYRURfUE9JTlQKKyNlbHNlCisvKiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBmdW5jdGlvbiwgZXhjZXB0IHdpdGggYSBkb3VibGUtcHJlY2lzaW9uIGFjY3VtdWxhdG9yICovCitzdGF0aWMgaW50IHJlc2FtcGxlcl9iYXNpY19pbnRlcnBvbGF0ZV9kb3VibGUoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QsIHNweF91aW50MzJfdCBjaGFubmVsX2luZGV4LCBjb25zdCBzcHhfd29yZDE2X3QgKmluLCBzcHhfdWludDMyX3QgKmluX2xlbiwgc3B4X3dvcmQxNl90ICpvdXQsIHNweF91aW50MzJfdCAqb3V0X2xlbikKK3sKKyAgIGludCBOID0gc3QtPmZpbHRfbGVuOworICAgaW50IG91dF9zYW1wbGUgPSAwOworICAgc3B4X3dvcmQxNl90ICptZW07CisgICBpbnQgbGFzdF9zYW1wbGUgPSBzdC0+bGFzdF9zYW1wbGVbY2hhbm5lbF9pbmRleF07CisgICBzcHhfdWludDMyX3Qgc2FtcF9mcmFjX251bSA9IHN0LT5zYW1wX2ZyYWNfbnVtW2NoYW5uZWxfaW5kZXhdOworICAgbWVtID0gc3QtPm1lbSArIGNoYW5uZWxfaW5kZXggKiBzdC0+bWVtX2FsbG9jX3NpemU7CisgICB3aGlsZSAoIShsYXN0X3NhbXBsZSA+PSAoc3B4X2ludDMyX3QpKmluX2xlbiB8fCBvdXRfc2FtcGxlID49IChzcHhfaW50MzJfdCkqb3V0X2xlbikpCisgICB7CisgICAgICBpbnQgajsKKyAgICAgIHNweF93b3JkMzJfdCBzdW09MDsKKyAgICAgIAorICAgICAgLyogV2UgbmVlZCB0byBpbnRlcnBvbGF0ZSB0aGUgc2luYyBmaWx0ZXIgKi8KKyAgICAgIGRvdWJsZSBhY2N1bVs0XSA9IHswLmYsMC5mLCAwLmYsIDAuZn07CisgICAgICBmbG9hdCBpbnRlcnBbNF07CisgICAgICBjb25zdCBzcHhfd29yZDE2X3QgKnB0cjsKKyAgICAgIGZsb2F0IGFscGhhID0gKChmbG9hdClzYW1wX2ZyYWNfbnVtKS9zdC0+ZGVuX3JhdGU7CisgICAgICBpbnQgb2Zmc2V0ID0gc2FtcF9mcmFjX251bSpzdC0+b3ZlcnNhbXBsZS9zdC0+ZGVuX3JhdGU7CisgICAgICBmbG9hdCBmcmFjID0gYWxwaGEqc3QtPm92ZXJzYW1wbGUgLSBvZmZzZXQ7CisgICAgICAgICAvKiBUaGlzIGNvZGUgaXMgd3JpdHRlbiBsaWtlIHRoaXMgdG8gbWFrZSBpdCBlYXN5IHRvIG9wdGltaXNlIHdpdGggU0lNRC4KKyAgICAgIEZvciBtb3N0IERTUHMsIGl0IHdvdWxkIGJlIGJlc3QgdG8gc3BsaXQgdGhlIGxvb3BzIGluIHR3byBiZWNhdXNlIG1vc3QgRFNQcyAKKyAgICAgIGhhdmUgb25seSB0d28gYWNjdW11bGF0b3JzICovCisgICAgICBmb3IgKGo9MDtsYXN0X3NhbXBsZS1OKzEraiA8IDA7aisrKQorICAgICAgeworICAgICAgICAgZG91YmxlIGN1cnJfbWVtID0gbWVtW2xhc3Rfc2FtcGxlK2pdOworICAgICAgICAgYWNjdW1bMF0gKz0gTVVMVDE2XzE2KGN1cnJfbWVtLHN0LT5zaW5jX3RhYmxlWzQrKGorMSkqc3QtPm92ZXJzYW1wbGUtb2Zmc2V0LTJdKTsKKyAgICAgICAgIGFjY3VtWzFdICs9IE1VTFQxNl8xNihjdXJyX21lbSxzdC0+c2luY190YWJsZVs0KyhqKzEpKnN0LT5vdmVyc2FtcGxlLW9mZnNldC0xXSk7CisgICAgICAgICBhY2N1bVsyXSArPSBNVUxUMTZfMTYoY3Vycl9tZW0sc3QtPnNpbmNfdGFibGVbNCsoaisxKSpzdC0+b3ZlcnNhbXBsZS1vZmZzZXRdKTsKKyAgICAgICAgIGFjY3VtWzNdICs9IE1VTFQxNl8xNihjdXJyX21lbSxzdC0+c2luY190YWJsZVs0KyhqKzEpKnN0LT5vdmVyc2FtcGxlLW9mZnNldCsxXSk7CisgICAgICB9CisgICAgICBwdHIgPSBpbitzdC0+aW5fc3RyaWRlKihsYXN0X3NhbXBsZS1OKzEraik7CisgICAgICAvKiBEbyB0aGUgbmV3IHBhcnQgKi8KKyAgICAgIGZvciAoO2o8TjtqKyspCisgICAgICB7CisgICAgICAgICBkb3VibGUgY3Vycl9pbiA9ICpwdHI7CisgICAgICAgICBwdHIgKz0gc3QtPmluX3N0cmlkZTsKKyAgICAgICAgIGFjY3VtWzBdICs9IE1VTFQxNl8xNihjdXJyX2luLHN0LT5zaW5jX3RhYmxlWzQrKGorMSkqc3QtPm92ZXJzYW1wbGUtb2Zmc2V0LTJdKTsKKyAgICAgICAgIGFjY3VtWzFdICs9IE1VTFQxNl8xNihjdXJyX2luLHN0LT5zaW5jX3RhYmxlWzQrKGorMSkqc3QtPm92ZXJzYW1wbGUtb2Zmc2V0LTFdKTsKKyAgICAgICAgIGFjY3VtWzJdICs9IE1VTFQxNl8xNihjdXJyX2luLHN0LT5zaW5jX3RhYmxlWzQrKGorMSkqc3QtPm92ZXJzYW1wbGUtb2Zmc2V0XSk7CisgICAgICAgICBhY2N1bVszXSArPSBNVUxUMTZfMTYoY3Vycl9pbixzdC0+c2luY190YWJsZVs0KyhqKzEpKnN0LT5vdmVyc2FtcGxlLW9mZnNldCsxXSk7CisgICAgICB9CisgICAgICBjdWJpY19jb2VmKGZyYWMsIGludGVycCk7CisgICAgICBzdW0gPSBpbnRlcnBbMF0qYWNjdW1bMF0gKyBpbnRlcnBbMV0qYWNjdW1bMV0gKyBpbnRlcnBbMl0qYWNjdW1bMl0gKyBpbnRlcnBbM10qYWNjdW1bM107CisgICAKKyAgICAgICpvdXQgPSBQU0hSMzIoc3VtLDE1KTsKKyAgICAgIG91dCArPSBzdC0+b3V0X3N0cmlkZTsKKyAgICAgIG91dF9zYW1wbGUrKzsKKyAgICAgIGxhc3Rfc2FtcGxlICs9IHN0LT5pbnRfYWR2YW5jZTsKKyAgICAgIHNhbXBfZnJhY19udW0gKz0gc3QtPmZyYWNfYWR2YW5jZTsKKyAgICAgIGlmIChzYW1wX2ZyYWNfbnVtID49IHN0LT5kZW5fcmF0ZSkKKyAgICAgIHsKKyAgICAgICAgIHNhbXBfZnJhY19udW0gLT0gc3QtPmRlbl9yYXRlOworICAgICAgICAgbGFzdF9zYW1wbGUrKzsKKyAgICAgIH0KKyAgIH0KKyAgIHN0LT5sYXN0X3NhbXBsZVtjaGFubmVsX2luZGV4XSA9IGxhc3Rfc2FtcGxlOworICAgc3QtPnNhbXBfZnJhY19udW1bY2hhbm5lbF9pbmRleF0gPSBzYW1wX2ZyYWNfbnVtOworICAgcmV0dXJuIG91dF9zYW1wbGU7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgdXBkYXRlX2ZpbHRlcihTcGVleFJlc2FtcGxlclN0YXRlICpzdCkKK3sKKyAgIHNweF91aW50MzJfdCBvbGRfbGVuZ3RoOworICAgCisgICBvbGRfbGVuZ3RoID0gc3QtPmZpbHRfbGVuOworICAgc3QtPm92ZXJzYW1wbGUgPSBxdWFsaXR5X21hcFtzdC0+cXVhbGl0eV0ub3ZlcnNhbXBsZTsKKyAgIHN0LT5maWx0X2xlbiA9IHF1YWxpdHlfbWFwW3N0LT5xdWFsaXR5XS5iYXNlX2xlbmd0aDsKKyAgIAorICAgaWYgKHN0LT5udW1fcmF0ZSA+IHN0LT5kZW5fcmF0ZSkKKyAgIHsKKyAgICAgIC8qIGRvd24tc2FtcGxpbmcgKi8KKyAgICAgIHN0LT5jdXRvZmYgPSBxdWFsaXR5X21hcFtzdC0+cXVhbGl0eV0uZG93bnNhbXBsZV9iYW5kd2lkdGggKiBzdC0+ZGVuX3JhdGUgLyBzdC0+bnVtX3JhdGU7CisgICAgICAvKiBGSVhNRTogZGl2aWRlIHRoZSBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yIGJ5IGEgY2VydGFpbiBhbW91bnQgaWYgdGhleSdyZSB0b28gbGFyZ2UgKi8KKyAgICAgIHN0LT5maWx0X2xlbiA9IHN0LT5maWx0X2xlbipzdC0+bnVtX3JhdGUgLyBzdC0+ZGVuX3JhdGU7CisgICAgICAvKiBSb3VuZCBkb3duIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgbXVsdGlwbGUgb2YgNCAqLworICAgICAgc3QtPmZpbHRfbGVuICY9ICh+MHgzKTsKKyAgIH0gZWxzZSB7CisgICAgICAvKiB1cC1zYW1wbGluZyAqLworICAgICAgc3QtPmN1dG9mZiA9IHF1YWxpdHlfbWFwW3N0LT5xdWFsaXR5XS51cHNhbXBsZV9iYW5kd2lkdGg7CisgICB9CisKKyAgIC8qIENob29zZSB0aGUgcmVzYW1wbGluZyB0eXBlIHRoYXQgcmVxdWlyZXMgdGhlIGxlYXN0IGFtb3VudCBvZiBtZW1vcnkgKi8KKyAgIGlmIChzdC0+ZGVuX3JhdGUgPD0gc3QtPm92ZXJzYW1wbGUpCisgICB7CisgICAgICBzcHhfdWludDMyX3QgaTsKKyAgICAgIGlmICghc3QtPnNpbmNfdGFibGUpCisgICAgICAgICBzdC0+c2luY190YWJsZSA9IChzcHhfd29yZDE2X3QgKilzcGVleF9hbGxvYyhzdC0+ZmlsdF9sZW4qc3QtPmRlbl9yYXRlKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgICAgIGVsc2UgaWYgKHN0LT5zaW5jX3RhYmxlX2xlbmd0aCA8IHN0LT5maWx0X2xlbipzdC0+ZGVuX3JhdGUpCisgICAgICB7CisgICAgICAgICBzdC0+c2luY190YWJsZSA9IChzcHhfd29yZDE2X3QgKilzcGVleF9yZWFsbG9jKHN0LT5zaW5jX3RhYmxlLHN0LT5maWx0X2xlbipzdC0+ZGVuX3JhdGUqc2l6ZW9mKHNweF93b3JkMTZfdCkpOworICAgICAgICAgc3QtPnNpbmNfdGFibGVfbGVuZ3RoID0gc3QtPmZpbHRfbGVuKnN0LT5kZW5fcmF0ZTsKKyAgICAgIH0KKyAgICAgIGZvciAoaT0wO2k8c3QtPmRlbl9yYXRlO2krKykKKyAgICAgIHsKKyAgICAgICAgIHNweF91aW50MzJfdCBqOworICAgICAgICAgZm9yIChqPTA7ajxzdC0+ZmlsdF9sZW47aisrKQorICAgICAgICAgeworICAgICAgICAgICAgc3QtPnNpbmNfdGFibGVbaSpzdC0+ZmlsdF9sZW4ral0gPSBzaW5jKHN0LT5jdXRvZmYsKChqLXN0LT5maWx0X2xlbi8yKzEpLSgoZmxvYXQpaSkvc3QtPmRlbl9yYXRlKSwgc3QtPmZpbHRfbGVuLCBxdWFsaXR5X21hcFtzdC0+cXVhbGl0eV0ud2luZG93X2Z1bmMpOworICAgICAgICAgfQorICAgICAgfQorI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICBzdC0+cmVzYW1wbGVyX3B0ciA9IHJlc2FtcGxlcl9iYXNpY19kaXJlY3Rfc2luZ2xlOworI2Vsc2UKKyAgICAgIGlmIChzdC0+cXVhbGl0eT44KQorICAgICAgICAgc3QtPnJlc2FtcGxlcl9wdHIgPSByZXNhbXBsZXJfYmFzaWNfZGlyZWN0X2RvdWJsZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHN0LT5yZXNhbXBsZXJfcHRyID0gcmVzYW1wbGVyX2Jhc2ljX2RpcmVjdF9zaW5nbGU7CisjZW5kaWYKKyAgICAgIC8qZnByaW50ZiAoc3RkZXJyLCAicmVzYW1wbGVyIHVzZXMgZGlyZWN0IHNpbmMgdGFibGUgYW5kIG5vcm1hbGlzZWQgY3V0b2ZmICVmXG4iLCBjdXRvZmYpOyovCisgICB9IGVsc2UgeworICAgICAgc3B4X2ludDMyX3QgaTsKKyAgICAgIGlmICghc3QtPnNpbmNfdGFibGUpCisgICAgICAgICBzdC0+c2luY190YWJsZSA9IChzcHhfd29yZDE2X3QgKilzcGVleF9hbGxvYygoc3QtPmZpbHRfbGVuKnN0LT5vdmVyc2FtcGxlKzgpKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgICAgIGVsc2UgaWYgKHN0LT5zaW5jX3RhYmxlX2xlbmd0aCA8IHN0LT5maWx0X2xlbipzdC0+b3ZlcnNhbXBsZSs4KQorICAgICAgeworICAgICAgICAgc3QtPnNpbmNfdGFibGUgPSAoc3B4X3dvcmQxNl90ICopc3BlZXhfcmVhbGxvYyhzdC0+c2luY190YWJsZSwoc3QtPmZpbHRfbGVuKnN0LT5vdmVyc2FtcGxlKzgpKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgICAgICAgIHN0LT5zaW5jX3RhYmxlX2xlbmd0aCA9IHN0LT5maWx0X2xlbipzdC0+b3ZlcnNhbXBsZSs4OworICAgICAgfQorICAgICAgZm9yIChpPS00O2k8KHNweF9pbnQzMl90KShzdC0+b3ZlcnNhbXBsZSpzdC0+ZmlsdF9sZW4rNCk7aSsrKQorICAgICAgICAgc3QtPnNpbmNfdGFibGVbaSs0XSA9IHNpbmMoc3QtPmN1dG9mZiwoaS8oZmxvYXQpc3QtPm92ZXJzYW1wbGUgLSBzdC0+ZmlsdF9sZW4vMiksIHN0LT5maWx0X2xlbiwgcXVhbGl0eV9tYXBbc3QtPnF1YWxpdHldLndpbmRvd19mdW5jKTsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgICAgc3QtPnJlc2FtcGxlcl9wdHIgPSByZXNhbXBsZXJfYmFzaWNfaW50ZXJwb2xhdGVfc2luZ2xlOworI2Vsc2UKKyAgICAgIGlmIChzdC0+cXVhbGl0eT44KQorICAgICAgICAgc3QtPnJlc2FtcGxlcl9wdHIgPSByZXNhbXBsZXJfYmFzaWNfaW50ZXJwb2xhdGVfZG91YmxlOworICAgICAgZWxzZQorICAgICAgICAgc3QtPnJlc2FtcGxlcl9wdHIgPSByZXNhbXBsZXJfYmFzaWNfaW50ZXJwb2xhdGVfc2luZ2xlOworI2VuZGlmCisgICAgICAvKmZwcmludGYgKHN0ZGVyciwgInJlc2FtcGxlciB1c2VzIGludGVycG9sYXRlZCBzaW5jIHRhYmxlIGFuZCBub3JtYWxpc2VkIGN1dG9mZiAlZlxuIiwgY3V0b2ZmKTsqLworICAgfQorICAgc3QtPmludF9hZHZhbmNlID0gc3QtPm51bV9yYXRlL3N0LT5kZW5fcmF0ZTsKKyAgIHN0LT5mcmFjX2FkdmFuY2UgPSBzdC0+bnVtX3JhdGUlc3QtPmRlbl9yYXRlOworCisgICBpZiAoIXN0LT5tZW0pCisgICB7CisgICAgICBzcHhfdWludDMyX3QgaTsKKyAgICAgIHN0LT5tZW0gPSAoc3B4X3dvcmQxNl90KilzcGVleF9hbGxvYyhzdC0+bmJfY2hhbm5lbHMqKHN0LT5maWx0X2xlbi0xKSAqIHNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgICAgIGZvciAoaT0wO2k8c3QtPm5iX2NoYW5uZWxzKihzdC0+ZmlsdF9sZW4tMSk7aSsrKQorICAgICAgICAgc3QtPm1lbVtpXSA9IDA7CisgICAgICBzdC0+bWVtX2FsbG9jX3NpemUgPSBzdC0+ZmlsdF9sZW4tMTsKKyAgICAgIC8qc3BlZXhfd2FybmluZygiaW5pdCBmaWx0ZXIiKTsqLworICAgfSBlbHNlIGlmICghc3QtPnN0YXJ0ZWQpCisgICB7CisgICAgICBzcHhfdWludDMyX3QgaTsKKyAgICAgIHN0LT5tZW0gPSAoc3B4X3dvcmQxNl90KilzcGVleF9yZWFsbG9jKHN0LT5tZW0sIHN0LT5uYl9jaGFubmVscyooc3QtPmZpbHRfbGVuLTEpICogc2l6ZW9mKHNweF93b3JkMTZfdCkpOworICAgICAgZm9yIChpPTA7aTxzdC0+bmJfY2hhbm5lbHMqKHN0LT5maWx0X2xlbi0xKTtpKyspCisgICAgICAgICBzdC0+bWVtW2ldID0gMDsKKyAgICAgIHN0LT5tZW1fYWxsb2Nfc2l6ZSA9IHN0LT5maWx0X2xlbi0xOworICAgICAgLypzcGVleF93YXJuaW5nKCJyZWluaXQgZmlsdGVyIik7Ki8KKyAgIH0gZWxzZSBpZiAoc3QtPmZpbHRfbGVuID4gb2xkX2xlbmd0aCkKKyAgIHsKKyAgICAgIHNweF91aW50MzJfdCBpOworICAgICAgLyogSW5jcmVhc2UgdGhlIGZpbHRlciBsZW5ndGggKi8KKyAgICAgIC8qc3BlZXhfd2FybmluZygiaW5jcmVhc2UgZmlsdGVyIHNpemUiKTsqLworICAgICAgaW50IG9sZF9hbGxvY19zaXplID0gc3QtPm1lbV9hbGxvY19zaXplOworICAgICAgaWYgKHN0LT5maWx0X2xlbi0xID4gc3QtPm1lbV9hbGxvY19zaXplKQorICAgICAgeworICAgICAgICAgc3QtPm1lbSA9IChzcHhfd29yZDE2X3QqKXNwZWV4X3JlYWxsb2Moc3QtPm1lbSwgc3QtPm5iX2NoYW5uZWxzKihzdC0+ZmlsdF9sZW4tMSkgKiBzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisgICAgICAgICBzdC0+bWVtX2FsbG9jX3NpemUgPSBzdC0+ZmlsdF9sZW4tMTsKKyAgICAgIH0KKyAgICAgIGZvciAoaT0wO2k8c3QtPm5iX2NoYW5uZWxzO2krKykKKyAgICAgIHsKKyAgICAgICAgIHNweF91aW50MzJfdCBqOworICAgICAgICAgLyogQ29weSBkYXRhIGdvaW5nIGJhY2t3YXJkICovCisgICAgICAgICBmb3IgKGo9MDtqPG9sZF9sZW5ndGgtMTtqKyspCisgICAgICAgICAgICBzdC0+bWVtW2kqc3QtPm1lbV9hbGxvY19zaXplKyhzdC0+ZmlsdF9sZW4tMi1qKV0gPSBzdC0+bWVtW2kqb2xkX2FsbG9jX3NpemUrKG9sZF9sZW5ndGgtMi1qKV07CisgICAgICAgICAvKiBUaGVuIHB1dCB6ZXJvcyBmb3IgbGFjayBvZiBhbnl0aGluZyBiZXR0ZXIgKi8KKyAgICAgICAgIGZvciAoO2o8c3QtPmZpbHRfbGVuLTE7aisrKQorICAgICAgICAgICAgc3QtPm1lbVtpKnN0LT5tZW1fYWxsb2Nfc2l6ZSsoc3QtPmZpbHRfbGVuLTItaildID0gMDsKKyAgICAgICAgIC8qIEFkanVzdCBsYXN0X3NhbXBsZSAqLworICAgICAgICAgc3QtPmxhc3Rfc2FtcGxlW2ldICs9IChzdC0+ZmlsdF9sZW4gLSBvbGRfbGVuZ3RoKS8yOworICAgICAgfQorICAgfSBlbHNlIGlmIChzdC0+ZmlsdF9sZW4gPCBvbGRfbGVuZ3RoKQorICAgeworICAgICAgc3B4X3VpbnQzMl90IGk7CisgICAgICAvKiBSZWR1Y2UgZmlsdGVyIGxlbmd0aCwgdGhpcyBhIGJpdCB0cmlja3kgKi8KKyAgICAgIC8qc3BlZXhfd2FybmluZygiZGVjcmVhc2UgZmlsdGVyIHNpemUgKHVuaW1wbGVtZW50ZWQpIik7Ki8KKyAgICAgIC8qIEFkanVzdCBsYXN0X3NhbXBsZSAod2hpY2ggd2lsbCBsaWtlbHkgZW5kIHVwIG5lZ2F0aXZlKSAqLworICAgICAgLypzdC0+bGFzdF9zYW1wbGUgKz0gKHN0LT5maWx0X2xlbiAtIG9sZF9sZW5ndGgpLzI7Ki8KKyAgICAgIGZvciAoaT0wO2k8c3QtPm5iX2NoYW5uZWxzO2krKykKKyAgICAgIHsKKyAgICAgICAgIHNweF91aW50MzJfdCBqOworICAgICAgICAgc3QtPm1hZ2ljX3NhbXBsZXNbaV0gPSAob2xkX2xlbmd0aCAtIHN0LT5maWx0X2xlbikvMjsKKyAgICAgICAgIC8qIENvcHkgZGF0YSBnb2luZyBiYWNrd2FyZCAqLworICAgICAgICAgZm9yIChqPTA7ajxzdC0+ZmlsdF9sZW4tMStzdC0+bWFnaWNfc2FtcGxlc1tpXTtqKyspCisgICAgICAgICAgICBzdC0+bWVtW2kqc3QtPm1lbV9hbGxvY19zaXplK2pdID0gc3QtPm1lbVtpKnN0LT5tZW1fYWxsb2Nfc2l6ZStqK3N0LT5tYWdpY19zYW1wbGVzW2ldXTsKKyAgICAgIH0KKyAgIH0KKworfQorCitTcGVleFJlc2FtcGxlclN0YXRlICpzcGVleF9yZXNhbXBsZXJfaW5pdChzcHhfdWludDMyX3QgbmJfY2hhbm5lbHMsIHNweF91aW50MzJfdCBpbl9yYXRlLCBzcHhfdWludDMyX3Qgb3V0X3JhdGUsIGludCBxdWFsaXR5KQoreworICAgcmV0dXJuIHNwZWV4X3Jlc2FtcGxlcl9pbml0X2ZyYWMobmJfY2hhbm5lbHMsIGluX3JhdGUsIG91dF9yYXRlLCBpbl9yYXRlLCBvdXRfcmF0ZSwgcXVhbGl0eSk7Cit9CisKK1NwZWV4UmVzYW1wbGVyU3RhdGUgKnNwZWV4X3Jlc2FtcGxlcl9pbml0X2ZyYWMoc3B4X3VpbnQzMl90IG5iX2NoYW5uZWxzLCBzcHhfdWludDMyX3QgcmF0aW9fbnVtLCBzcHhfdWludDMyX3QgcmF0aW9fZGVuLCBzcHhfdWludDMyX3QgaW5fcmF0ZSwgc3B4X3VpbnQzMl90IG91dF9yYXRlLCBpbnQgcXVhbGl0eSkKK3sKKyAgIHNweF91aW50MzJfdCBpOworICAgU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QgPSAoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqKXNwZWV4X2FsbG9jKHNpemVvZihTcGVleFJlc2FtcGxlclN0YXRlKSk7CisgICBzdC0+aW5pdGlhbGlzZWQgPSAwOworICAgc3QtPnN0YXJ0ZWQgPSAwOworICAgc3QtPmluX3JhdGUgPSAwOworICAgc3QtPm91dF9yYXRlID0gMDsKKyAgIHN0LT5udW1fcmF0ZSA9IDA7CisgICBzdC0+ZGVuX3JhdGUgPSAwOworICAgc3QtPnF1YWxpdHkgPSAtMTsKKyAgIHN0LT5zaW5jX3RhYmxlX2xlbmd0aCA9IDA7CisgICBzdC0+bWVtX2FsbG9jX3NpemUgPSAwOworICAgc3QtPmZpbHRfbGVuID0gMDsKKyAgIHN0LT5tZW0gPSAwOworICAgc3QtPnJlc2FtcGxlcl9wdHIgPSAwOworICAgICAgICAgCisgICBzdC0+Y3V0b2ZmID0gMS5mOworICAgc3QtPm5iX2NoYW5uZWxzID0gbmJfY2hhbm5lbHM7CisgICBzdC0+aW5fc3RyaWRlID0gMTsKKyAgIHN0LT5vdXRfc3RyaWRlID0gMTsKKyAgIAorICAgLyogUGVyIGNoYW5uZWwgZGF0YSAqLworICAgc3QtPmxhc3Rfc2FtcGxlID0gKHNweF9pbnQzMl90KilzcGVleF9hbGxvYyhuYl9jaGFubmVscypzaXplb2YoaW50KSk7CisgICBzdC0+bWFnaWNfc2FtcGxlcyA9IChzcHhfdWludDMyX3QqKXNwZWV4X2FsbG9jKG5iX2NoYW5uZWxzKnNpemVvZihpbnQpKTsKKyAgIHN0LT5zYW1wX2ZyYWNfbnVtID0gKHNweF91aW50MzJfdCopc3BlZXhfYWxsb2MobmJfY2hhbm5lbHMqc2l6ZW9mKGludCkpOworICAgZm9yIChpPTA7aTxuYl9jaGFubmVscztpKyspCisgICB7CisgICAgICBzdC0+bGFzdF9zYW1wbGVbaV0gPSAwOworICAgICAgc3QtPm1hZ2ljX3NhbXBsZXNbaV0gPSAwOworICAgICAgc3QtPnNhbXBfZnJhY19udW1baV0gPSAwOworICAgfQorCisgICBzcGVleF9yZXNhbXBsZXJfc2V0X3F1YWxpdHkoc3QsIHF1YWxpdHkpOworICAgc3BlZXhfcmVzYW1wbGVyX3NldF9yYXRlX2ZyYWMoc3QsIHJhdGlvX251bSwgcmF0aW9fZGVuLCBpbl9yYXRlLCBvdXRfcmF0ZSk7CisKKyAgIAorICAgdXBkYXRlX2ZpbHRlcihzdCk7CisgICAKKyAgIHN0LT5pbml0aWFsaXNlZCA9IDE7CisgICByZXR1cm4gc3Q7Cit9CisKK3ZvaWQgc3BlZXhfcmVzYW1wbGVyX2Rlc3Ryb3koU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QpCit7CisgICBzcGVleF9mcmVlKHN0LT5tZW0pOworICAgc3BlZXhfZnJlZShzdC0+c2luY190YWJsZSk7CisgICBzcGVleF9mcmVlKHN0LT5sYXN0X3NhbXBsZSk7CisgICBzcGVleF9mcmVlKHN0LT5tYWdpY19zYW1wbGVzKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPnNhbXBfZnJhY19udW0pOworICAgc3BlZXhfZnJlZShzdCk7Cit9CisKKworCitzdGF0aWMgdm9pZCBzcGVleF9yZXNhbXBsZXJfcHJvY2Vzc19uYXRpdmUoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QsIHNweF91aW50MzJfdCBjaGFubmVsX2luZGV4LCBjb25zdCBzcHhfd29yZDE2X3QgKmluLCBzcHhfdWludDMyX3QgKmluX2xlbiwgc3B4X3dvcmQxNl90ICpvdXQsIHNweF91aW50MzJfdCAqb3V0X2xlbikKK3sKKyAgIGludCBqPTA7CisgICBpbnQgTiA9IHN0LT5maWx0X2xlbjsKKyAgIGludCBvdXRfc2FtcGxlID0gMDsKKyAgIHNweF93b3JkMTZfdCAqbWVtOworICAgc3B4X3VpbnQzMl90IHRtcF9vdXRfbGVuID0gMDsKKyAgIG1lbSA9IHN0LT5tZW0gKyBjaGFubmVsX2luZGV4ICogc3QtPm1lbV9hbGxvY19zaXplOworICAgc3QtPnN0YXJ0ZWQgPSAxOworICAgCisgICAvKiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBzYW1wbGVzIGxlZnQgZnJvbSBhIHJlZHVjdGlvbiBpbiBmaWx0ZXIgbGVuZ3RoICovCisgICBpZiAoc3QtPm1hZ2ljX3NhbXBsZXNbY2hhbm5lbF9pbmRleF0pCisgICB7CisgICAgICBzcHhfdWludDMyX3QgdG1wX2luX2xlbjsKKyAgICAgIHNweF91aW50MzJfdCB0bXBfbWFnaWM7CisgICAgICB0bXBfaW5fbGVuID0gc3QtPm1hZ2ljX3NhbXBsZXNbY2hhbm5lbF9pbmRleF07CisgICAgICB0bXBfb3V0X2xlbiA9ICpvdXRfbGVuOworICAgICAgLyogRklYTUU6IE5lZWQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBvdXQgYXJyYXkgaXMgdG9vIHNtYWxsICovCisgICAgICAvKiBtYWdpY19zYW1wbGVzIG5lZWRzIHRvIGJlIHNldCB0byB6ZXJvIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiAqLworICAgICAgdG1wX21hZ2ljID0gc3QtPm1hZ2ljX3NhbXBsZXNbY2hhbm5lbF9pbmRleF07CisgICAgICBzdC0+bWFnaWNfc2FtcGxlc1tjaGFubmVsX2luZGV4XSA9IDA7CisgICAgICBzcGVleF9yZXNhbXBsZXJfcHJvY2Vzc19uYXRpdmUoc3QsIGNoYW5uZWxfaW5kZXgsIG1lbStOLTEsICZ0bXBfaW5fbGVuLCBvdXQsICZ0bXBfb3V0X2xlbik7CisgICAgICAvKnNwZWV4X3dhcm5pbmdfaW50KCJleHRyYSBzYW1wbGVzOiIsIHRtcF9vdXRfbGVuKTsqLworICAgICAgLyogSWYgd2UgY291bGRuJ3QgcHJvY2VzcyBhbGwgIm1hZ2ljIiBpbnB1dCBzYW1wbGVzLCBzYXZlIHRoZSByZXN0IGZvciBuZXh0IHRpbWUgKi8KKyAgICAgIGlmICh0bXBfaW5fbGVuIDwgdG1wX21hZ2ljKQorICAgICAgeworICAgICAgICAgc3B4X3VpbnQzMl90IGk7CisgICAgICAgICBzdC0+bWFnaWNfc2FtcGxlc1tjaGFubmVsX2luZGV4XSA9IHRtcF9tYWdpYy10bXBfaW5fbGVuOworICAgICAgICAgZm9yIChpPTA7aTxzdC0+bWFnaWNfc2FtcGxlc1tjaGFubmVsX2luZGV4XTtpKyspCisgICAgICAgICAgICBtZW1bTi0xK2ldPW1lbVtOLTEraSt0bXBfaW5fbGVuXTsKKyAgICAgIH0KKyAgICAgIG91dCArPSB0bXBfb3V0X2xlbjsKKyAgIH0KKyAgIAorICAgLyogQ2FsbCB0aGUgcmlnaHQgcmVzYW1wbGVyIHRocm91Z2ggdGhlIGZ1bmN0aW9uIHB0ciAqLworICAgb3V0X3NhbXBsZSA9IHN0LT5yZXNhbXBsZXJfcHRyKHN0LCBjaGFubmVsX2luZGV4LCBpbiwgaW5fbGVuLCBvdXQsIG91dF9sZW4pOworICAgCisgICBpZiAoc3QtPmxhc3Rfc2FtcGxlW2NoYW5uZWxfaW5kZXhdIDwgKHNweF9pbnQzMl90KSppbl9sZW4pCisgICAgICAqaW5fbGVuID0gc3QtPmxhc3Rfc2FtcGxlW2NoYW5uZWxfaW5kZXhdOworICAgKm91dF9sZW4gPSBvdXRfc2FtcGxlK3RtcF9vdXRfbGVuOworICAgc3QtPmxhc3Rfc2FtcGxlW2NoYW5uZWxfaW5kZXhdIC09ICppbl9sZW47CisgICAKKyAgIGZvciAoaj0wO2o8Ti0xLShzcHhfaW50MzJfdCkqaW5fbGVuO2orKykKKyAgICAgIG1lbVtqXSA9IG1lbVtqKyppbl9sZW5dOworICAgZm9yICg7ajxOLTE7aisrKQorICAgICAgbWVtW2pdID0gaW5bc3QtPmluX3N0cmlkZSooaisqaW5fbGVuLU4rMSldOworICAgCit9CisKKyNkZWZpbmUgRklYRURfU1RBQ0tfQUxMT0MgMTAyNAorCisjaWZkZWYgRklYRURfUE9JTlQKK3ZvaWQgc3BlZXhfcmVzYW1wbGVyX3Byb2Nlc3NfZmxvYXQoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QsIHNweF91aW50MzJfdCBjaGFubmVsX2luZGV4LCBjb25zdCBmbG9hdCAqaW4sIHNweF91aW50MzJfdCAqaW5fbGVuLCBmbG9hdCAqb3V0LCBzcHhfdWludDMyX3QgKm91dF9sZW4pCit7CisgICBzcHhfdWludDMyX3QgaTsKKyAgIGludCBpc3RyaWRlX3NhdmUsIG9zdHJpZGVfc2F2ZTsKKyNpZmRlZiBWQVJfQVJSQVlTCisgICBzcHhfd29yZDE2X3QgeFsqaW5fbGVuXTsKKyAgIHNweF93b3JkMTZfdCB5WypvdXRfbGVuXTsKKyAgIC8qVkFSREVDTChzcHhfd29yZDE2X3QgKngpOworICAgVkFSREVDTChzcHhfd29yZDE2X3QgKnkpOworICAgQUxMT0MoeCwgKmluX2xlbiwgc3B4X3dvcmQxNl90KTsKKyAgIEFMTE9DKHksICpvdXRfbGVuLCBzcHhfd29yZDE2X3QpOyovCisgICBpc3RyaWRlX3NhdmUgPSBzdC0+aW5fc3RyaWRlOworICAgb3N0cmlkZV9zYXZlID0gc3QtPm91dF9zdHJpZGU7CisgICBmb3IgKGk9MDtpPCppbl9sZW47aSsrKQorICAgICAgeFtpXSA9IFdPUkQySU5UKGluW2kqc3QtPmluX3N0cmlkZV0pOworICAgc3QtPmluX3N0cmlkZSA9IHN0LT5vdXRfc3RyaWRlID0gMTsKKyAgIHNwZWV4X3Jlc2FtcGxlcl9wcm9jZXNzX25hdGl2ZShzdCwgY2hhbm5lbF9pbmRleCwgeCwgaW5fbGVuLCB5LCBvdXRfbGVuKTsKKyAgIHN0LT5pbl9zdHJpZGUgPSBpc3RyaWRlX3NhdmU7CisgICBzdC0+b3V0X3N0cmlkZSA9IG9zdHJpZGVfc2F2ZTsKKyAgIGZvciAoaT0wO2k8Km91dF9sZW47aSsrKQorICAgICAgb3V0W2kqc3QtPm91dF9zdHJpZGVdID0geVtpXTsKKyNlbHNlCisgICBzcHhfd29yZDE2X3QgeFtGSVhFRF9TVEFDS19BTExPQ107CisgICBzcHhfd29yZDE2X3QgeVtGSVhFRF9TVEFDS19BTExPQ107CisgICBzcHhfdWludDMyX3QgaWxlbj0qaW5fbGVuLCBvbGVuPSpvdXRfbGVuOworICAgaXN0cmlkZV9zYXZlID0gc3QtPmluX3N0cmlkZTsKKyAgIG9zdHJpZGVfc2F2ZSA9IHN0LT5vdXRfc3RyaWRlOworICAgd2hpbGUgKGlsZW4gJiYgb2xlbikKKyAgIHsKKyAgICAgIHNweF91aW50MzJfdCBpY2h1bmssIG9jaHVuazsKKyAgICAgIGljaHVuayA9IGlsZW47CisgICAgICBvY2h1bmsgPSBvbGVuOworICAgICAgaWYgKGljaHVuaz5GSVhFRF9TVEFDS19BTExPQykKKyAgICAgICAgIGljaHVuaz1GSVhFRF9TVEFDS19BTExPQzsKKyAgICAgIGlmIChvY2h1bms+RklYRURfU1RBQ0tfQUxMT0MpCisgICAgICAgICBvY2h1bms9RklYRURfU1RBQ0tfQUxMT0M7CisgICAgICBmb3IgKGk9MDtpPGljaHVuaztpKyspCisgICAgICAgICB4W2ldID0gV09SRDJJTlQoaW5baSpzdC0+aW5fc3RyaWRlXSk7CisgICAgICBzdC0+aW5fc3RyaWRlID0gc3QtPm91dF9zdHJpZGUgPSAxOworICAgICAgc3BlZXhfcmVzYW1wbGVyX3Byb2Nlc3NfbmF0aXZlKHN0LCBjaGFubmVsX2luZGV4LCB4LCAmaWNodW5rLCB5LCAmb2NodW5rKTsKKyAgICAgIHN0LT5pbl9zdHJpZGUgPSBpc3RyaWRlX3NhdmU7CisgICAgICBzdC0+b3V0X3N0cmlkZSA9IG9zdHJpZGVfc2F2ZTsKKyAgICAgIGZvciAoaT0wO2k8b2NodW5rO2krKykKKyAgICAgICAgIG91dFtpKnN0LT5vdXRfc3RyaWRlXSA9IHlbaV07CisgICAgICBvdXQgKz0gb2NodW5rOworICAgICAgaW4gKz0gaWNodW5rOworICAgICAgaWxlbiAtPSBpY2h1bms7CisgICAgICBvbGVuIC09IG9jaHVuazsKKyAgIH0KKyAgICppbl9sZW4gLT0gaWxlbjsKKyAgICpvdXRfbGVuIC09IG9sZW47ICAgCisjZW5kaWYKK30KK3ZvaWQgc3BlZXhfcmVzYW1wbGVyX3Byb2Nlc3NfaW50KFNwZWV4UmVzYW1wbGVyU3RhdGUgKnN0LCBzcHhfdWludDMyX3QgY2hhbm5lbF9pbmRleCwgY29uc3Qgc3B4X2ludDE2X3QgKmluLCBzcHhfdWludDMyX3QgKmluX2xlbiwgc3B4X2ludDE2X3QgKm91dCwgc3B4X3VpbnQzMl90ICpvdXRfbGVuKQoreworICAgc3BlZXhfcmVzYW1wbGVyX3Byb2Nlc3NfbmF0aXZlKHN0LCBjaGFubmVsX2luZGV4LCBpbiwgaW5fbGVuLCBvdXQsIG91dF9sZW4pOworfQorI2Vsc2UKK3ZvaWQgc3BlZXhfcmVzYW1wbGVyX3Byb2Nlc3NfZmxvYXQoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QsIHNweF91aW50MzJfdCBjaGFubmVsX2luZGV4LCBjb25zdCBmbG9hdCAqaW4sIHNweF91aW50MzJfdCAqaW5fbGVuLCBmbG9hdCAqb3V0LCBzcHhfdWludDMyX3QgKm91dF9sZW4pCit7CisgICBzcGVleF9yZXNhbXBsZXJfcHJvY2Vzc19uYXRpdmUoc3QsIGNoYW5uZWxfaW5kZXgsIGluLCBpbl9sZW4sIG91dCwgb3V0X2xlbik7Cit9Cit2b2lkIHNwZWV4X3Jlc2FtcGxlcl9wcm9jZXNzX2ludChTcGVleFJlc2FtcGxlclN0YXRlICpzdCwgc3B4X3VpbnQzMl90IGNoYW5uZWxfaW5kZXgsIGNvbnN0IHNweF9pbnQxNl90ICppbiwgc3B4X3VpbnQzMl90ICppbl9sZW4sIHNweF9pbnQxNl90ICpvdXQsIHNweF91aW50MzJfdCAqb3V0X2xlbikKK3sKKyAgIHNweF91aW50MzJfdCBpOworICAgaW50IGlzdHJpZGVfc2F2ZSwgb3N0cmlkZV9zYXZlOworI2lmZGVmIFZBUl9BUlJBWVMKKyAgIHNweF93b3JkMTZfdCB4Wyppbl9sZW5dOworICAgc3B4X3dvcmQxNl90IHlbKm91dF9sZW5dOworICAgLypWQVJERUNMKHNweF93b3JkMTZfdCAqeCk7CisgICBWQVJERUNMKHNweF93b3JkMTZfdCAqeSk7CisgICBBTExPQyh4LCAqaW5fbGVuLCBzcHhfd29yZDE2X3QpOworICAgQUxMT0MoeSwgKm91dF9sZW4sIHNweF93b3JkMTZfdCk7Ki8KKyAgIGlzdHJpZGVfc2F2ZSA9IHN0LT5pbl9zdHJpZGU7CisgICBvc3RyaWRlX3NhdmUgPSBzdC0+b3V0X3N0cmlkZTsKKyAgIGZvciAoaT0wO2k8KmluX2xlbjtpKyspCisgICAgICB4W2ldID0gaW5baSpzdC0+aW5fc3RyaWRlXTsKKyAgIHN0LT5pbl9zdHJpZGUgPSBzdC0+b3V0X3N0cmlkZSA9IDE7CisgICBzcGVleF9yZXNhbXBsZXJfcHJvY2Vzc19uYXRpdmUoc3QsIGNoYW5uZWxfaW5kZXgsIHgsIGluX2xlbiwgeSwgb3V0X2xlbik7CisgICBzdC0+aW5fc3RyaWRlID0gaXN0cmlkZV9zYXZlOworICAgc3QtPm91dF9zdHJpZGUgPSBvc3RyaWRlX3NhdmU7CisgICBmb3IgKGk9MDtpPCpvdXRfbGVuO2krKykKKyAgICAgIG91dFtpKnN0LT5vdXRfc3RyaWRlXSA9IFdPUkQySU5UKHlbaV0pOworI2Vsc2UKKyAgIHNweF93b3JkMTZfdCB4W0ZJWEVEX1NUQUNLX0FMTE9DXTsKKyAgIHNweF93b3JkMTZfdCB5W0ZJWEVEX1NUQUNLX0FMTE9DXTsKKyAgIHNweF91aW50MzJfdCBpbGVuPSppbl9sZW4sIG9sZW49Km91dF9sZW47CisgICBpc3RyaWRlX3NhdmUgPSBzdC0+aW5fc3RyaWRlOworICAgb3N0cmlkZV9zYXZlID0gc3QtPm91dF9zdHJpZGU7CisgICB3aGlsZSAoaWxlbiAmJiBvbGVuKQorICAgeworICAgICAgc3B4X3VpbnQzMl90IGljaHVuaywgb2NodW5rOworICAgICAgaWNodW5rID0gaWxlbjsKKyAgICAgIG9jaHVuayA9IG9sZW47CisgICAgICBpZiAoaWNodW5rPkZJWEVEX1NUQUNLX0FMTE9DKQorICAgICAgICAgaWNodW5rPUZJWEVEX1NUQUNLX0FMTE9DOworICAgICAgaWYgKG9jaHVuaz5GSVhFRF9TVEFDS19BTExPQykKKyAgICAgICAgIG9jaHVuaz1GSVhFRF9TVEFDS19BTExPQzsKKyAgICAgIGZvciAoaT0wO2k8aWNodW5rO2krKykKKyAgICAgICAgIHhbaV0gPSBpbltpKnN0LT5pbl9zdHJpZGVdOworICAgICAgc3QtPmluX3N0cmlkZSA9IHN0LT5vdXRfc3RyaWRlID0gMTsKKyAgICAgIHNwZWV4X3Jlc2FtcGxlcl9wcm9jZXNzX25hdGl2ZShzdCwgY2hhbm5lbF9pbmRleCwgeCwgJmljaHVuaywgeSwgJm9jaHVuayk7CisgICAgICBzdC0+aW5fc3RyaWRlID0gaXN0cmlkZV9zYXZlOworICAgICAgc3QtPm91dF9zdHJpZGUgPSBvc3RyaWRlX3NhdmU7CisgICAgICBmb3IgKGk9MDtpPG9jaHVuaztpKyspCisgICAgICAgICBvdXRbaSpzdC0+b3V0X3N0cmlkZV0gPSBXT1JEMklOVCh5W2ldKTsKKyAgICAgIG91dCArPSBvY2h1bms7CisgICAgICBpbiArPSBpY2h1bms7CisgICAgICBpbGVuIC09IGljaHVuazsKKyAgICAgIG9sZW4gLT0gb2NodW5rOworICAgfQorICAgKmluX2xlbiAtPSBpbGVuOworICAgKm91dF9sZW4gLT0gb2xlbjsgICAKKyNlbmRpZgorfQorI2VuZGlmCisKK3ZvaWQgc3BlZXhfcmVzYW1wbGVyX3Byb2Nlc3NfaW50ZXJsZWF2ZWRfZmxvYXQoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QsIGNvbnN0IGZsb2F0ICppbiwgc3B4X3VpbnQzMl90ICppbl9sZW4sIGZsb2F0ICpvdXQsIHNweF91aW50MzJfdCAqb3V0X2xlbikKK3sKKyAgIHNweF91aW50MzJfdCBpOworICAgaW50IGlzdHJpZGVfc2F2ZSwgb3N0cmlkZV9zYXZlOworICAgaXN0cmlkZV9zYXZlID0gc3QtPmluX3N0cmlkZTsKKyAgIG9zdHJpZGVfc2F2ZSA9IHN0LT5vdXRfc3RyaWRlOworICAgc3QtPmluX3N0cmlkZSA9IHN0LT5vdXRfc3RyaWRlID0gc3QtPm5iX2NoYW5uZWxzOworICAgZm9yIChpPTA7aTxzdC0+bmJfY2hhbm5lbHM7aSsrKQorICAgeworICAgICAgc3BlZXhfcmVzYW1wbGVyX3Byb2Nlc3NfZmxvYXQoc3QsIGksIGluK2ksIGluX2xlbiwgb3V0K2ksIG91dF9sZW4pOworICAgfQorICAgc3QtPmluX3N0cmlkZSA9IGlzdHJpZGVfc2F2ZTsKKyAgIHN0LT5vdXRfc3RyaWRlID0gb3N0cmlkZV9zYXZlOworfQorCit2b2lkIHNwZWV4X3Jlc2FtcGxlcl9wcm9jZXNzX2ludGVybGVhdmVkX2ludChTcGVleFJlc2FtcGxlclN0YXRlICpzdCwgY29uc3Qgc3B4X2ludDE2X3QgKmluLCBzcHhfdWludDMyX3QgKmluX2xlbiwgc3B4X2ludDE2X3QgKm91dCwgc3B4X3VpbnQzMl90ICpvdXRfbGVuKQoreworICAgc3B4X3VpbnQzMl90IGk7CisgICBpbnQgaXN0cmlkZV9zYXZlLCBvc3RyaWRlX3NhdmU7CisgICBpc3RyaWRlX3NhdmUgPSBzdC0+aW5fc3RyaWRlOworICAgb3N0cmlkZV9zYXZlID0gc3QtPm91dF9zdHJpZGU7CisgICBzdC0+aW5fc3RyaWRlID0gc3QtPm91dF9zdHJpZGUgPSBzdC0+bmJfY2hhbm5lbHM7CisgICBmb3IgKGk9MDtpPHN0LT5uYl9jaGFubmVscztpKyspCisgICB7CisgICAgICBzcGVleF9yZXNhbXBsZXJfcHJvY2Vzc19pbnQoc3QsIGksIGluK2ksIGluX2xlbiwgb3V0K2ksIG91dF9sZW4pOworICAgfQorICAgc3QtPmluX3N0cmlkZSA9IGlzdHJpZGVfc2F2ZTsKKyAgIHN0LT5vdXRfc3RyaWRlID0gb3N0cmlkZV9zYXZlOworfQorCit2b2lkIHNwZWV4X3Jlc2FtcGxlcl9zZXRfcmF0ZShTcGVleFJlc2FtcGxlclN0YXRlICpzdCwgc3B4X3VpbnQzMl90IGluX3JhdGUsIHNweF91aW50MzJfdCBvdXRfcmF0ZSkKK3sKKyAgIHNwZWV4X3Jlc2FtcGxlcl9zZXRfcmF0ZV9mcmFjKHN0LCBpbl9yYXRlLCBvdXRfcmF0ZSwgaW5fcmF0ZSwgb3V0X3JhdGUpOworfQorCit2b2lkIHNwZWV4X3Jlc2FtcGxlcl9nZXRfcmF0ZShTcGVleFJlc2FtcGxlclN0YXRlICpzdCwgc3B4X3VpbnQzMl90ICppbl9yYXRlLCBzcHhfdWludDMyX3QgKm91dF9yYXRlKQoreworICAgKmluX3JhdGUgPSBzdC0+aW5fcmF0ZTsKKyAgICpvdXRfcmF0ZSA9IHN0LT5vdXRfcmF0ZTsKK30KKwordm9pZCBzcGVleF9yZXNhbXBsZXJfc2V0X3JhdGVfZnJhYyhTcGVleFJlc2FtcGxlclN0YXRlICpzdCwgc3B4X3VpbnQzMl90IHJhdGlvX251bSwgc3B4X3VpbnQzMl90IHJhdGlvX2Rlbiwgc3B4X3VpbnQzMl90IGluX3JhdGUsIHNweF91aW50MzJfdCBvdXRfcmF0ZSkKK3sKKyAgIGludCBmYWN0OworICAgaWYgKHN0LT5pbl9yYXRlID09IGluX3JhdGUgJiYgc3QtPm91dF9yYXRlID09IG91dF9yYXRlICYmIHN0LT5udW1fcmF0ZSA9PSByYXRpb19udW0gJiYgc3QtPmRlbl9yYXRlID09IHJhdGlvX2RlbikKKyAgICAgIHJldHVybjsKKyAgIAorICAgc3QtPmluX3JhdGUgPSBpbl9yYXRlOworICAgc3QtPm91dF9yYXRlID0gb3V0X3JhdGU7CisgICBzdC0+bnVtX3JhdGUgPSByYXRpb19udW07CisgICBzdC0+ZGVuX3JhdGUgPSByYXRpb19kZW47CisgICAvKiBGSVhNRTogVGhpcyBpcyB0ZXJyaWJseSBpbmVmZmljaWVudCwgYnV0IHdobyBjYXJlcyAoYXQgbGVhc3QgZm9yIG5vdyk/ICovCisgICBmb3IgKGZhY3Q9MjtmYWN0PD1zcXJ0KElNQVgoaW5fcmF0ZSwgb3V0X3JhdGUpKTtmYWN0KyspCisgICB7CisgICAgICB3aGlsZSAoKHN0LT5udW1fcmF0ZSAlIGZhY3QgPT0gMCkgJiYgKHN0LT5kZW5fcmF0ZSAlIGZhY3QgPT0gMCkpCisgICAgICB7CisgICAgICAgICBzdC0+bnVtX3JhdGUgLz0gZmFjdDsKKyAgICAgICAgIHN0LT5kZW5fcmF0ZSAvPSBmYWN0OworICAgICAgfQorICAgfQorICAgICAgCisgICBpZiAoc3QtPmluaXRpYWxpc2VkKQorICAgICAgdXBkYXRlX2ZpbHRlcihzdCk7Cit9CisKK3ZvaWQgc3BlZXhfcmVzYW1wbGVyX2dldF9yYXRpbyhTcGVleFJlc2FtcGxlclN0YXRlICpzdCwgc3B4X3VpbnQzMl90ICpyYXRpb19udW0sIHNweF91aW50MzJfdCAqcmF0aW9fZGVuKQoreworICAgKnJhdGlvX251bSA9IHN0LT5udW1fcmF0ZTsKKyAgICpyYXRpb19kZW4gPSBzdC0+ZGVuX3JhdGU7Cit9CisKK3ZvaWQgc3BlZXhfcmVzYW1wbGVyX3NldF9xdWFsaXR5KFNwZWV4UmVzYW1wbGVyU3RhdGUgKnN0LCBpbnQgcXVhbGl0eSkKK3sKKyAgIGlmIChxdWFsaXR5IDwgMCkKKyAgICAgIHF1YWxpdHkgPSAwOworICAgaWYgKHF1YWxpdHkgPiAxMCkKKyAgICAgIHF1YWxpdHkgPSAxMDsKKyAgIGlmIChzdC0+cXVhbGl0eSA9PSBxdWFsaXR5KQorICAgICAgcmV0dXJuOworICAgc3QtPnF1YWxpdHkgPSBxdWFsaXR5OworICAgaWYgKHN0LT5pbml0aWFsaXNlZCkKKyAgICAgIHVwZGF0ZV9maWx0ZXIoc3QpOworfQorCit2b2lkIHNwZWV4X3Jlc2FtcGxlcl9nZXRfcXVhbGl0eShTcGVleFJlc2FtcGxlclN0YXRlICpzdCwgaW50ICpxdWFsaXR5KQoreworICAgKnF1YWxpdHkgPSBzdC0+cXVhbGl0eTsKK30KKwordm9pZCBzcGVleF9yZXNhbXBsZXJfc2V0X2lucHV0X3N0cmlkZShTcGVleFJlc2FtcGxlclN0YXRlICpzdCwgc3B4X3VpbnQzMl90IHN0cmlkZSkKK3sKKyAgIHN0LT5pbl9zdHJpZGUgPSBzdHJpZGU7Cit9CisKK3ZvaWQgc3BlZXhfcmVzYW1wbGVyX2dldF9pbnB1dF9zdHJpZGUoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QsIHNweF91aW50MzJfdCAqc3RyaWRlKQoreworICAgKnN0cmlkZSA9IHN0LT5pbl9zdHJpZGU7Cit9CisKK3ZvaWQgc3BlZXhfcmVzYW1wbGVyX3NldF9vdXRwdXRfc3RyaWRlKFNwZWV4UmVzYW1wbGVyU3RhdGUgKnN0LCBzcHhfdWludDMyX3Qgc3RyaWRlKQoreworICAgc3QtPm91dF9zdHJpZGUgPSBzdHJpZGU7Cit9CisKK3ZvaWQgc3BlZXhfcmVzYW1wbGVyX2dldF9vdXRwdXRfc3RyaWRlKFNwZWV4UmVzYW1wbGVyU3RhdGUgKnN0LCBzcHhfdWludDMyX3QgKnN0cmlkZSkKK3sKKyAgICpzdHJpZGUgPSBzdC0+b3V0X3N0cmlkZTsKK30KKwordm9pZCBzcGVleF9yZXNhbXBsZXJfc2tpcF96ZXJvcyhTcGVleFJlc2FtcGxlclN0YXRlICpzdCkKK3sKKyAgIHNweF91aW50MzJfdCBpOworICAgZm9yIChpPTA7aTxzdC0+bmJfY2hhbm5lbHM7aSsrKQorICAgICAgc3QtPmxhc3Rfc2FtcGxlW2ldID0gc3QtPmZpbHRfbGVuLzI7Cit9CisKK3ZvaWQgc3BlZXhfcmVzYW1wbGVyX3Jlc2V0X21lbShTcGVleFJlc2FtcGxlclN0YXRlICpzdCkKK3sKKyAgIHNweF91aW50MzJfdCBpOworICAgZm9yIChpPTA7aTxzdC0+bmJfY2hhbm5lbHMqKHN0LT5maWx0X2xlbi0xKTtpKyspCisgICAgICBzdC0+bWVtW2ldID0gMDsKK30KKwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvc2JfY2VscC5jIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvc2JfY2VscC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYjk4MjQKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9zYl9jZWxwLmMKQEAgLTAsMCArMSwxNDgwIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiBKZWFuLU1hcmMgVmFsaW4gCisgICBGaWxlOiBzYl9jZWxwLmMKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSAic2JfY2VscC5oIgorI2luY2x1ZGUgInN0ZGxpYi5oIgorI2luY2x1ZGUgImZpbHRlcnMuaCIKKyNpbmNsdWRlICJscGMuaCIKKyNpbmNsdWRlICJsc3AuaCIKKyNpbmNsdWRlICJzdGFja19hbGxvYy5oIgorI2luY2x1ZGUgImNiX3NlYXJjaC5oIgorI2luY2x1ZGUgInF1YW50X2xzcC5oIgorI2luY2x1ZGUgInZxLmgiCisjaW5jbHVkZSAibHRwLmgiCisjaW5jbHVkZSAibWlzYy5oIgorI2luY2x1ZGUgIm1hdGhfYXBwcm94LmgiCisKKy8qIERlZmF1bHQgc2l6ZSBmb3IgdGhlIGVuY29kZXIgYW5kIGRlY29kZXIgc3RhY2sgKGNhbiBiZSBjaGFuZ2VkIGF0IGNvbXBpbGUgdGltZSkuCisgICBUaGlzIGRvZXMgbm90IGFwcGx5IHdoZW4gdXNpbmcgdmFyaWFibGUtc2l6ZSBhcnJheXMgb3IgYWxsb2NhLiAqLworI2lmbmRlZiBTQl9FTkNfU1RBQ0sKKyNkZWZpbmUgU0JfRU5DX1NUQUNLICgxMDAwMCpzaXplb2Yoc3B4X3NpZ190KSkKKyNlbmRpZgorCisjaWZuZGVmIFNCX0RFQ19TVEFDSworI2RlZmluZSBTQl9ERUNfU1RBQ0sgKDYwMDAqc2l6ZW9mKHNweF9zaWdfdCkpCisjZW5kaWYKKworCisjaWZkZWYgRElTQUJMRV9XSURFQkFORAordm9pZCAqc2JfZW5jb2Rlcl9pbml0KGNvbnN0IFNwZWV4TW9kZSAqbSkKK3sKKyAgIHNwZWV4X2Vycm9yKCJXaWRlYmFuZCBhbmQgVWx0cmEtd2lkZWJhbmQgYXJlIGRpc2FibGVkIik7CisgICByZXR1cm4gTlVMTDsKK30KK3ZvaWQgc2JfZW5jb2Rlcl9kZXN0cm95KHZvaWQgKnN0YXRlKQoreworICAgc3BlZXhfZXJyb3IoIldpZGViYW5kIGFuZCBVbHRyYS13aWRlYmFuZCBhcmUgZGlzYWJsZWQiKTsKK30KK2ludCBzYl9lbmNvZGUodm9pZCAqc3RhdGUsIHZvaWQgKnZpbiwgU3BlZXhCaXRzICpiaXRzKQoreworICAgc3BlZXhfZXJyb3IoIldpZGViYW5kIGFuZCBVbHRyYS13aWRlYmFuZCBhcmUgZGlzYWJsZWQiKTsKKyAgIHJldHVybiAtMjsKK30KK3ZvaWQgKnNiX2RlY29kZXJfaW5pdChjb25zdCBTcGVleE1vZGUgKm0pCit7CisgICBzcGVleF9lcnJvcigiV2lkZWJhbmQgYW5kIFVsdHJhLXdpZGViYW5kIGFyZSBkaXNhYmxlZCIpOworICAgcmV0dXJuIE5VTEw7Cit9Cit2b2lkIHNiX2RlY29kZXJfZGVzdHJveSh2b2lkICpzdGF0ZSkKK3sKKyAgIHNwZWV4X2Vycm9yKCJXaWRlYmFuZCBhbmQgVWx0cmEtd2lkZWJhbmQgYXJlIGRpc2FibGVkIik7Cit9CitpbnQgc2JfZGVjb2RlKHZvaWQgKnN0YXRlLCBTcGVleEJpdHMgKmJpdHMsIHZvaWQgKnZvdXQpCit7CisgICBzcGVleF9lcnJvcigiV2lkZWJhbmQgYW5kIFVsdHJhLXdpZGViYW5kIGFyZSBkaXNhYmxlZCIpOworICAgcmV0dXJuIC0yOworfQoraW50IHNiX2VuY29kZXJfY3RsKHZvaWQgKnN0YXRlLCBpbnQgcmVxdWVzdCwgdm9pZCAqcHRyKQoreworICAgc3BlZXhfZXJyb3IoIldpZGViYW5kIGFuZCBVbHRyYS13aWRlYmFuZCBhcmUgZGlzYWJsZWQiKTsKKyAgIHJldHVybiAtMjsKK30KK2ludCBzYl9kZWNvZGVyX2N0bCh2b2lkICpzdGF0ZSwgaW50IHJlcXVlc3QsIHZvaWQgKnB0cikKK3sKKyAgIHNwZWV4X2Vycm9yKCJXaWRlYmFuZCBhbmQgVWx0cmEtd2lkZWJhbmQgYXJlIGRpc2FibGVkIik7CisgICByZXR1cm4gLTI7Cit9CisjZWxzZQorCisKKyNpZm5kZWYgTV9QSQorI2RlZmluZSBNX1BJICAgICAgICAgICAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2ICAvKiBwaSAqLworI2VuZGlmCisKKyNkZWZpbmUgc3FyKHgpICgoeCkqKHgpKQorCisjZGVmaW5lIFNVQk1PREUoeCkgc3QtPnN1Ym1vZGVzW3N0LT5zdWJtb2RlSURdLT54CisKKyNpZmRlZiBGSVhFRF9QT0lOVAorc3RhdGljIGNvbnN0IHNweF93b3JkMTZfdCBnY19xdWFudF9ib3VuZFsxNl0gPSB7MTI1LCAxNjQsIDIxNSwgMjgyLCAzNzAsIDQ4NCwgNjM1LCA4MzIsIDEwOTAsIDE0MjgsIDE4NzEsIDI0NTIsIDMyMTMsIDQyMTAsIDU1MTYsIDcyMjh9Oworc3RhdGljIGNvbnN0IHNweF93b3JkMTZfdCBmb2xkX3F1YW50X2JvdW5kWzMyXSA9IHsKKyAgIDM5LCA0NCwgNTAsIDU3LCA2NCwgNzMsIDgzLCA5NCwKKyAgIDEwNiwgMTIwLCAxMzYsIDE1NCwgMTc1LCAxOTgsIDIyNSwgMjU1LAorICAgMjg4LCAzMjcsIDM3MCwgNDIwLCA0NzYsIDUzOSwgNjExLCA2OTIsCisgICA3ODQsIDg4OSwgMTAwNywgMTE0MSwgMTI5MywgMTQ2NSwgMTY2MCwgMTg4MX07CisjZGVmaW5lIExTUF9NQVJHSU4gNDEwCisjZGVmaW5lIExTUF9ERUxUQTEgNjU1MworI2RlZmluZSBMU1BfREVMVEEyIDE2MzgKKworI2Vsc2UKKworc3RhdGljIGNvbnN0IHNweF93b3JkMTZfdCBnY19xdWFudF9ib3VuZFsxNl0gPSB7CisgICAgICAwLjk3OTc5LCAxLjI4Mzg0LCAxLjY4MjIzLCAyLjIwNDI2LCAyLjg4ODI5LCAzLjc4NDU4LCA0Ljk1OTAwLCA2LjQ5Nzg3LCAKKyAgICAgIDguNTE0MjgsIDExLjE1NjQyLCAxNC42MTg0NiwgMTkuMTU0ODQsIDI1LjA5ODk1LCAzMi44ODc2MSwgNDMuMDkzMjUsIDU2LjQ2NTg4fTsKK3N0YXRpYyBjb25zdCBzcHhfd29yZDE2X3QgZm9sZF9xdWFudF9ib3VuZFszMl0gPSB7CisgICAwLjMwNDk4LCAwLjM0NTU5LCAwLjM5MTYxLCAwLjQ0Mzc1LCAwLjUwMjgzLCAwLjU2OTc5LCAwLjY0NTY1LCAwLjczMTYyLAorICAgMC44MjkwMywgMC45Mzk0MiwgMS4wNjQ1MCwgMS4yMDYyNCwgMS4zNjY4NSwgMS41NDg4NCwgMS43NTUwNiwgMS45ODg3NSwKKyAgIDIuMjUzNTUsIDIuNTUzNjAsIDIuODkzNjEsIDMuMjc4ODksIDMuNzE1NDcsIDQuMjEwMTgsIDQuNzcwNzYsIDUuNDA1OTgsCisgICA2LjEyNTc3LCA2Ljk0MTQxLCA3Ljg2NTY1LCA4LjkxMjk1LCAxMC4wOTk2OSwgMTEuNDQ0NDUsIDEyLjk2ODI2LCAxNC42OTQ5N307CisKKyNkZWZpbmUgTFNQX01BUkdJTiAuMDUKKyNkZWZpbmUgTFNQX0RFTFRBMSAuMgorI2RlZmluZSBMU1BfREVMVEEyIC4wNQorCisjZW5kaWYKKworI2RlZmluZSBRTUZfT1JERVIgNjQKKworI2lmZGVmIEZJWEVEX1BPSU5UCitzdGF0aWMgY29uc3Qgc3B4X3dvcmQxNl90IGgwWzY0XSA9IHsyLCAtNywgLTcsIDE4LCAxNSwgLTM5LCAtMjUsIDc1LCAzNSwgLTEzMCwgLTQxLCAyMTIsIDM4LCAtMzI3LCAtMTcsIDQ4MywgLTMyLCAtNjg5LCAxMjQsIDk1NiwgLTI4MywgLTEzMDcsIDU0MywgMTc4MCwgLTk3MywgLTI0NjcsIDE3MzMsIDM2MzMsIC0zMzM5LCAtNjQwOSwgOTA1OSwgMzAxNTMsIDMwMTUzLCA5MDU5LCAtNjQwOSwgLTMzMzksIDM2MzMsIDE3MzMsIC0yNDY3LCAtOTczLCAxNzgwLCA1NDMsIC0xMzA3LCAtMjgzLCA5NTYsIDEyNCwgLTY4OSwgLTMyLCA0ODMsIC0xNywgLTMyNywgMzgsIDIxMiwgLTQxLCAtMTMwLCAzNSwgNzUsIC0yNSwgLTM5LCAxNSwgMTgsIC03LCAtNywgMn07CisKKyNlbHNlCitzdGF0aWMgY29uc3QgZmxvYXQgaDBbNjRdID0geworICAgMy41OTYxODllLTA1ZiwgLTAuMDAwMTEyMzUxNWYsCisgICAtMC4wMDAxMTA0NTg3ZiwgMC4wMDAyNzkwMjc3ZiwKKyAgIDAuMDAwMjI5ODQzOGYsIC0wLjAwMDU5NTM1NjNmLAorICAgLTAuMDAwMzgyMzYzMWYsIDAuMDAxMTM4MjZmLAorICAgMC4wMDA1MzA4NTM5ZiwgLTAuMDAxOTg2MTc3ZiwKKyAgIC0wLjAwMDYyNDM3MjRmLCAwLjAwMzIzNTg3N2YsCisgICAwLjAwMDU3NDMxNTlmLCAtMC4wMDQ5ODkxNDdmLAorICAgLTAuMDAwMjU4NDc2N2YsIDAuMDA3MzY3MTcxZiwKKyAgIC0wLjAwMDQ4NTc5MzVmLCAtMC4wMTA1MDY4OWYsCisgICAwLjAwMTg5NDcxNGYsIDAuMDE0NTkzOTZmLAorICAgLTAuMDA0MzEzNjc0ZiwgLTAuMDE5OTQzNjVmLAorICAgMC4wMDgyODc1NmYsIDAuMDI3MTYwNTVmLAorICAgLTAuMDE0ODUzOTdmLCAtMC4wMzc2NDk3M2YsCisgICAwLjAyNjQ0N2YsIDAuMDU1NDMyNDVmLAorICAgLTAuMDUwOTU0ODdmLCAtMC4wOTc3OTA5NmYsCisgICAwLjEzODIzNjNmLCAwLjQ2MDA5ODFmLAorICAgMC40NjAwOTgxZiwgMC4xMzgyMzYzZiwKKyAgIC0wLjA5Nzc5MDk2ZiwgLTAuMDUwOTU0ODdmLAorICAgMC4wNTU0MzI0NWYsIDAuMDI2NDQ3ZiwKKyAgIC0wLjAzNzY0OTczZiwgLTAuMDE0ODUzOTdmLAorICAgMC4wMjcxNjA1NWYsIDAuMDA4Mjg3NTZmLAorICAgLTAuMDE5OTQzNjVmLCAtMC4wMDQzMTM2NzRmLAorICAgMC4wMTQ1OTM5NmYsIDAuMDAxODk0NzE0ZiwKKyAgIC0wLjAxMDUwNjg5ZiwgLTAuMDAwNDg1NzkzNWYsCisgICAwLjAwNzM2NzE3MWYsIC0wLjAwMDI1ODQ3NjdmLAorICAgLTAuMDA0OTg5MTQ3ZiwgMC4wMDA1NzQzMTU5ZiwKKyAgIDAuMDAzMjM1ODc3ZiwgLTAuMDAwNjI0MzcyNGYsCisgICAtMC4wMDE5ODYxNzdmLCAwLjAwMDUzMDg1MzlmLAorICAgMC4wMDExMzgyNmYsIC0wLjAwMDM4MjM2MzFmLAorICAgLTAuMDAwNTk1MzU2M2YsIDAuMDAwMjI5ODQzOGYsCisgICAwLjAwMDI3OTAyNzdmLCAtMC4wMDAxMTA0NTg3ZiwKKyAgIC0wLjAwMDExMjM1MTVmLCAzLjU5NjE4OWUtMDVmCit9OworCisjZW5kaWYKKworZXh0ZXJuIGNvbnN0IHNweF93b3JkMTZfdCBscGNfd2luZG93W107CisKKwordm9pZCAqc2JfZW5jb2Rlcl9pbml0KGNvbnN0IFNwZWV4TW9kZSAqbSkKK3sKKyAgIGludCBpOworICAgc3B4X2ludDMyX3QgdG1wOworICAgU0JFbmNTdGF0ZSAqc3Q7CisgICBjb25zdCBTcGVleFNCTW9kZSAqbW9kZTsKKworICAgc3QgPSAoU0JFbmNTdGF0ZSopc3BlZXhfYWxsb2Moc2l6ZW9mKFNCRW5jU3RhdGUpKTsKKyAgIGlmICghc3QpCisgICAgICByZXR1cm4gTlVMTDsKKyAgIHN0LT5tb2RlID0gbTsKKyAgIG1vZGUgPSAoY29uc3QgU3BlZXhTQk1vZGUqKW0tPm1vZGU7CisKKworICAgc3QtPnN0X2xvdyA9IHNwZWV4X2VuY29kZXJfaW5pdChtb2RlLT5uYl9tb2RlKTsKKyNpZiBkZWZpbmVkKFZBUl9BUlJBWVMpIHx8IGRlZmluZWQgKFVTRV9BTExPQ0EpCisgICBzdC0+c3RhY2sgPSBOVUxMOworI2Vsc2UKKyAgIC8qc3QtPnN0YWNrID0gKGNoYXIqKXNwZWV4X2FsbG9jX3NjcmF0Y2goU0JfRU5DX1NUQUNLKTsqLworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfR0VUX1NUQUNLLCAmc3QtPnN0YWNrKTsKKyNlbmRpZgorCisgICBzdC0+ZnVsbF9mcmFtZV9zaXplID0gMiptb2RlLT5mcmFtZVNpemU7CisgICBzdC0+ZnJhbWVfc2l6ZSA9IG1vZGUtPmZyYW1lU2l6ZTsKKyAgIHN0LT5zdWJmcmFtZVNpemUgPSBtb2RlLT5zdWJmcmFtZVNpemU7CisgICBzdC0+bmJTdWJmcmFtZXMgPSBtb2RlLT5mcmFtZVNpemUvbW9kZS0+c3ViZnJhbWVTaXplOworICAgc3QtPndpbmRvd1NpemUgPSBzdC0+ZnJhbWVfc2l6ZStzdC0+c3ViZnJhbWVTaXplOworICAgc3QtPmxwY1NpemU9bW9kZS0+bHBjU2l6ZTsKKyAgIHN0LT5idWZTaXplPW1vZGUtPmJ1ZlNpemU7CisKKyAgIHN0LT5lbmNvZGVfc3VibW9kZSA9IDE7CisgICBzdC0+c3VibW9kZXM9bW9kZS0+c3VibW9kZXM7CisgICBzdC0+c3VibW9kZVNlbGVjdCA9IHN0LT5zdWJtb2RlSUQ9bW9kZS0+ZGVmYXVsdFN1Ym1vZGU7CisgICAKKyAgIHRtcD05OworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfU0VUX1FVQUxJVFksICZ0bXApOworICAgdG1wPTE7CisgICBzcGVleF9lbmNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9TRVRfV0lERUJBTkQsICZ0bXApOworCisgICBzdC0+bGFnX2ZhY3RvciA9IG1vZGUtPmxhZ19mYWN0b3I7CisgICBzdC0+bHBjX2Zsb29yID0gbW9kZS0+bHBjX2Zsb29yOworICAgc3QtPmdhbW1hMT1tb2RlLT5nYW1tYTE7CisgICBzdC0+Z2FtbWEyPW1vZGUtPmdhbW1hMjsKKyAgIHN0LT5maXJzdD0xOworCisgICBzdC0+aGlnaD0oc3B4X3dvcmQxNl90KilzcGVleF9hbGxvYygoc3QtPndpbmRvd1NpemUtc3QtPmZyYW1lX3NpemUpKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKworICAgc3QtPmgwX21lbT0oc3B4X3dvcmQxNl90KilzcGVleF9hbGxvYygoUU1GX09SREVSKSpzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisgICBzdC0+aDFfbWVtPShzcHhfd29yZDE2X3QqKXNwZWV4X2FsbG9jKChRTUZfT1JERVIpKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKworICAgc3QtPndpbmRvdz0gbHBjX3dpbmRvdzsKKworICAgc3QtPmxhZ1dpbmRvdyA9IChzcHhfd29yZDE2X3QqKXNwZWV4X2FsbG9jKChzdC0+bHBjU2l6ZSsxKSpzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplKzE7aSsrKQorICAgICAgc3QtPmxhZ1dpbmRvd1tpXT0xNjM4NCpleHAoLS41KnNxcigyKk1fUEkqc3QtPmxhZ19mYWN0b3IqaSkpOworCisgICBzdC0+b2xkX2xzcCA9IChzcHhfbHNwX3QqKXNwZWV4X2FsbG9jKHN0LT5scGNTaXplKnNpemVvZihzcHhfbHNwX3QpKTsKKyAgIHN0LT5vbGRfcWxzcCA9IChzcHhfbHNwX3QqKXNwZWV4X2FsbG9jKHN0LT5scGNTaXplKnNpemVvZihzcHhfbHNwX3QpKTsKKyAgIHN0LT5pbnRlcnBfcWxwYyA9IChzcHhfY29lZl90KilzcGVleF9hbGxvYyhzdC0+bHBjU2l6ZSpzaXplb2Yoc3B4X2NvZWZfdCkpOworICAgc3QtPnBpX2dhaW4gPSAoc3B4X3dvcmQzMl90KilzcGVleF9hbGxvYygoc3QtPm5iU3ViZnJhbWVzKSpzaXplb2Yoc3B4X3dvcmQzMl90KSk7CisgICBzdC0+ZXhjX3JtcyA9IChzcHhfd29yZDE2X3QqKXNwZWV4X2FsbG9jKChzdC0+bmJTdWJmcmFtZXMpKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgIHN0LT5pbm5vdl9ybXNfc2F2ZSA9IE5VTEw7CisgICAKKyAgIHN0LT5tZW1fc3AgPSAoc3B4X21lbV90KilzcGVleF9hbGxvYygoc3QtPmxwY1NpemUpKnNpemVvZihzcHhfbWVtX3QpKTsKKyAgIHN0LT5tZW1fc3AyID0gKHNweF9tZW1fdCopc3BlZXhfYWxsb2MoKHN0LT5scGNTaXplKSpzaXplb2Yoc3B4X21lbV90KSk7CisgICBzdC0+bWVtX3N3ID0gKHNweF9tZW1fdCopc3BlZXhfYWxsb2MoKHN0LT5scGNTaXplKSpzaXplb2Yoc3B4X21lbV90KSk7CisKKyAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemU7aSsrKQorICAgeworICAgICAgc3QtPm9sZF9sc3BbaV09TFNQX1NDQUxJTkcqKE1fUEkqKChmbG9hdCkoaSsxKSkpLyhzdC0+bHBjU2l6ZSsxKTsKKyAgIH0KKworICAgc3QtPnZicl9xdWFsaXR5ID0gODsKKyAgIHN0LT52YnJfZW5hYmxlZCA9IDA7CisgICBzdC0+dmJyX21heCA9IDA7CisgICBzdC0+dmJyX21heF9oaWdoID0gMjAwMDA7ICAvKiBXZSBqdXN0IG5lZWQgYSBiaWcgdmFsdWUgaGVyZSAqLworICAgc3QtPnZhZF9lbmFibGVkID0gMDsKKyAgIHN0LT5hYnJfZW5hYmxlZCA9IDA7CisgICBzdC0+cmVsYXRpdmVfcXVhbGl0eT0wOworCisgICBzdC0+Y29tcGxleGl0eT0yOworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfR0VUX1NBTVBMSU5HX1JBVEUsICZzdC0+c2FtcGxpbmdfcmF0ZSk7CisgICBzdC0+c2FtcGxpbmdfcmF0ZSo9MjsKKyNpZmRlZiBFTkFCTEVfVkFMR1JJTkQKKyAgIFZBTEdSSU5EX01BS0VfUkVBREFCTEUoc3QsIChzdC0+c3RhY2stKGNoYXIqKXN0KSk7CisjZW5kaWYKKyAgIHJldHVybiBzdDsKK30KKwordm9pZCBzYl9lbmNvZGVyX2Rlc3Ryb3kodm9pZCAqc3RhdGUpCit7CisgICBTQkVuY1N0YXRlICpzdD0oU0JFbmNTdGF0ZSopc3RhdGU7CisKKyAgIHNwZWV4X2VuY29kZXJfZGVzdHJveShzdC0+c3RfbG93KTsKKyNpZiAhKGRlZmluZWQoVkFSX0FSUkFZUykgfHwgZGVmaW5lZCAoVVNFX0FMTE9DQSkpCisgICAvKnNwZWV4X2ZyZWVfc2NyYXRjaChzdC0+c3RhY2spOyovCisjZW5kaWYKKworICAgc3BlZXhfZnJlZShzdC0+aGlnaCk7CisKKyAgIHNwZWV4X2ZyZWUoc3QtPmgwX21lbSk7CisgICBzcGVleF9mcmVlKHN0LT5oMV9tZW0pOworCisgICBzcGVleF9mcmVlKHN0LT5sYWdXaW5kb3cpOworCisgICBzcGVleF9mcmVlKHN0LT5vbGRfbHNwKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPm9sZF9xbHNwKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPmludGVycF9xbHBjKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPnBpX2dhaW4pOworICAgc3BlZXhfZnJlZShzdC0+ZXhjX3Jtcyk7CisKKyAgIHNwZWV4X2ZyZWUoc3QtPm1lbV9zcCk7CisgICBzcGVleF9mcmVlKHN0LT5tZW1fc3AyKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPm1lbV9zdyk7CisKKyAgIAorICAgc3BlZXhfZnJlZShzdCk7Cit9CisKKworaW50IHNiX2VuY29kZSh2b2lkICpzdGF0ZSwgdm9pZCAqdmluLCBTcGVleEJpdHMgKmJpdHMpCit7CisgICBTQkVuY1N0YXRlICpzdDsKKyAgIGludCBpLCByb290cywgc3ViOworICAgY2hhciAqc3RhY2s7CisgICBWQVJERUNMKHNweF9tZW1fdCAqbWVtKTsKKyAgIFZBUkRFQ0woc3B4X3NpZ190ICppbm5vdik7CisgICBWQVJERUNMKHNweF93b3JkMTZfdCAqdGFyZ2V0KTsKKyAgIFZBUkRFQ0woc3B4X3dvcmQxNl90ICpzeW5fcmVzcCk7CisgICBWQVJERUNMKHNweF93b3JkMzJfdCAqbG93X3BpX2dhaW4pOworICAgc3B4X3dvcmQxNl90ICpsb3c7CisgICBzcHhfd29yZDE2X3QgKmhpZ2g7CisgICBWQVJERUNMKHNweF93b3JkMTZfdCAqbG93X2V4Y19ybXMpOworICAgVkFSREVDTChzcHhfd29yZDE2X3QgKmxvd19pbm5vdl9ybXMpOworICAgY29uc3QgU3BlZXhTQk1vZGUgKm1vZGU7CisgICBzcHhfaW50MzJfdCBkdHg7CisgICBzcHhfd29yZDE2X3QgKmluID0gKHNweF93b3JkMTZfdCopdmluOworICAgc3B4X3dvcmQxNl90IGVfbG93PTAsIGVfaGlnaD0wOworICAgVkFSREVDTChzcHhfY29lZl90ICpscGMpOworICAgVkFSREVDTChzcHhfY29lZl90ICppbnRlcnBfbHBjKTsKKyAgIFZBUkRFQ0woc3B4X2NvZWZfdCAqYndfbHBjMSk7CisgICBWQVJERUNMKHNweF9jb2VmX3QgKmJ3X2xwYzIpOworICAgVkFSREVDTChzcHhfbHNwX3QgKmxzcCk7CisgICBWQVJERUNMKHNweF9sc3BfdCAqcWxzcCk7CisgICBWQVJERUNMKHNweF9sc3BfdCAqaW50ZXJwX2xzcCk7CisgICBWQVJERUNMKHNweF9sc3BfdCAqaW50ZXJwX3Fsc3ApOworICAgICAgCisgICBzdCA9IChTQkVuY1N0YXRlKilzdGF0ZTsKKyAgIHN0YWNrPXN0LT5zdGFjazsKKyAgIG1vZGUgPSAoY29uc3QgU3BlZXhTQk1vZGUqKShzdC0+bW9kZS0+bW9kZSk7CisgICBsb3cgPSBpbjsKKyAgIGhpZ2ggPSBpbitzdC0+ZnJhbWVfc2l6ZTsKKyAgIAorICAgLyogSGlnaC1iYW5kIGJ1ZmZlcmluZyAvIHN5bmMgd2l0aCBsb3cgYmFuZCAqLworICAgLyogQ29tcHV0ZSB0aGUgdHdvIHN1Yi1iYW5kcyBieSBmaWx0ZXJpbmcgd2l0aCBRTUYgaDAqLworICAgcW1mX2RlY29tcChpbiwgaDAsIGxvdywgaGlnaCwgc3QtPmZ1bGxfZnJhbWVfc2l6ZSwgUU1GX09SREVSLCBzdC0+aDBfbWVtLCBzdGFjayk7CisgICAKKyAgIGlmIChzdC0+dmJyX2VuYWJsZWQgfHwgc3QtPnZhZF9lbmFibGVkKQorICAgeworICAgICAgLyogTmVlZCB0byBjb21wdXRlIHRoaW5ncyBoZXJlIGJlZm9yZSB0aGUgc2lnbmFsIGlzIHRyYXNoZWQgYnkgdGhlIGVuY29kZXIgKi8KKyAgICAgIC8qRklYTUU6IEFyZSB0aGUgdHdvIHNpZ25hbHMgKGxvdywgaGlnaCkgaW4gc3luYz8gKi8KKyAgICAgIGVfbG93ID0gY29tcHV0ZV9ybXMxNihsb3csIHN0LT5mcmFtZV9zaXplKTsKKyAgICAgIGVfaGlnaCA9IGNvbXB1dGVfcm1zMTYoaGlnaCwgc3QtPmZyYW1lX3NpemUpOworICAgfQorICAgQUxMT0MobG93X2lubm92X3Jtcywgc3QtPm5iU3ViZnJhbWVzLCBzcHhfd29yZDE2X3QpOworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfU0VUX0lOTk9WQVRJT05fU0FWRSwgbG93X2lubm92X3Jtcyk7CisgICAvKiBFbmNvZGUgdGhlIG5hcnJvd2JhbmQgcGFydCovCisgICBzcGVleF9lbmNvZGVfbmF0aXZlKHN0LT5zdF9sb3csIGxvdywgYml0cyk7CisKKyAgIGhpZ2ggPSBoaWdoIC0gKHN0LT53aW5kb3dTaXplLXN0LT5mcmFtZV9zaXplKTsKKyAgIGZvciAoaT0wO2k8c3QtPndpbmRvd1NpemUtc3QtPmZyYW1lX3NpemU7aSsrKQorICAgICAgaGlnaFtpXSA9IHN0LT5oaWdoW2ldOworICAgZm9yIChpPTA7aTxzdC0+d2luZG93U2l6ZS1zdC0+ZnJhbWVfc2l6ZTtpKyspCisgICAgICBzdC0+aGlnaFtpXSA9IGhpZ2hbaStzdC0+ZnJhbWVfc2l6ZV07CisgICAKKworICAgQUxMT0MobG93X3BpX2dhaW4sIHN0LT5uYlN1YmZyYW1lcywgc3B4X3dvcmQzMl90KTsKKyAgIEFMTE9DKGxvd19leGNfcm1zLCBzdC0+bmJTdWJmcmFtZXMsIHNweF93b3JkMTZfdCk7CisgICBzcGVleF9lbmNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9HRVRfUElfR0FJTiwgbG93X3BpX2dhaW4pOworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfR0VUX0VYQywgbG93X2V4Y19ybXMpOworICAgCisgICBzcGVleF9lbmNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9HRVRfTE9XX01PREUsICZkdHgpOworCisgICBpZiAoZHR4PT0wKQorICAgICAgZHR4PTE7CisgICBlbHNlCisgICAgICBkdHg9MDsKKworICAgQUxMT0MobHBjLCBzdC0+bHBjU2l6ZSwgc3B4X2NvZWZfdCk7CisgICBBTExPQyhpbnRlcnBfbHBjLCBzdC0+bHBjU2l6ZSwgc3B4X2NvZWZfdCk7CisgICBBTExPQyhid19scGMxLCBzdC0+bHBjU2l6ZSwgc3B4X2NvZWZfdCk7CisgICBBTExPQyhid19scGMyLCBzdC0+bHBjU2l6ZSwgc3B4X2NvZWZfdCk7CisgICAKKyAgIEFMTE9DKGxzcCwgc3QtPmxwY1NpemUsIHNweF9sc3BfdCk7CisgICBBTExPQyhxbHNwLCBzdC0+bHBjU2l6ZSwgc3B4X2xzcF90KTsKKyAgIEFMTE9DKGludGVycF9sc3AsIHN0LT5scGNTaXplLCBzcHhfbHNwX3QpOworICAgQUxMT0MoaW50ZXJwX3Fsc3AsIHN0LT5scGNTaXplLCBzcHhfbHNwX3QpOworICAgCisgICB7CisgICAgICBWQVJERUNMKHNweF93b3JkMTZfdCAqYXV0b2NvcnIpOworICAgICAgVkFSREVDTChzcHhfd29yZDE2X3QgKndfc2lnKTsKKyAgICAgIEFMTE9DKGF1dG9jb3JyLCBzdC0+bHBjU2l6ZSsxLCBzcHhfd29yZDE2X3QpOworICAgICAgQUxMT0Mod19zaWcsIHN0LT53aW5kb3dTaXplLCBzcHhfd29yZDE2X3QpOworICAgICAgLyogV2luZG93IGZvciBhbmFseXNpcyAqLworICAgICAgLyogRklYTUU6IFRoaXMgaXMgYSBrbHVkZ2UgKi8KKyAgICAgIGlmIChzdC0+c3ViZnJhbWVTaXplPT04MCkKKyAgICAgIHsKKyAgICAgICAgIGZvciAoaT0wO2k8c3QtPndpbmRvd1NpemU7aSsrKQorICAgICAgICAgICAgd19zaWdbaV0gPSBFWFRSQUNUMTYoU0hSMzIoTVVMVDE2XzE2KGhpZ2hbaV0sc3QtPndpbmRvd1tpPj4xXSksU0lHX1NISUZUKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICAgZm9yIChpPTA7aTxzdC0+d2luZG93U2l6ZTtpKyspCisgICAgICAgICAgICB3X3NpZ1tpXSA9IEVYVFJBQ1QxNihTSFIzMihNVUxUMTZfMTYoaGlnaFtpXSxzdC0+d2luZG93W2ldKSxTSUdfU0hJRlQpKTsKKyAgICAgIH0KKyAgICAgIC8qIENvbXB1dGUgYXV0by1jb3JyZWxhdGlvbiAqLworICAgICAgX3NweF9hdXRvY29ycih3X3NpZywgYXV0b2NvcnIsIHN0LT5scGNTaXplKzEsIHN0LT53aW5kb3dTaXplKTsKKyAgICAgIGF1dG9jb3JyWzBdID0gQUREMTYoYXV0b2NvcnJbMF0sTVVMVDE2XzE2X1ExNShhdXRvY29yclswXSxzdC0+bHBjX2Zsb29yKSk7IC8qIE5vaXNlIGZsb29yIGluIGF1dG8tY29ycmVsYXRpb24gZG9tYWluICovCisKKyAgICAgIC8qIExhZyB3aW5kb3dpbmc6IGVxdWl2YWxlbnQgdG8gZmlsdGVyaW5nIGluIHRoZSBwb3dlci1zcGVjdHJ1bSBkb21haW4gKi8KKyAgICAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemUrMTtpKyspCisgICAgICAgICBhdXRvY29ycltpXSA9IE1VTFQxNl8xNl9RMTQoYXV0b2NvcnJbaV0sc3QtPmxhZ1dpbmRvd1tpXSk7CisKKyAgICAgIC8qIExldmluc29uLUR1cmJpbiAqLworICAgICAgX3NweF9scGMobHBjLCBhdXRvY29yciwgc3QtPmxwY1NpemUpOworICAgfQorCisgICAvKiBMUEMgdG8gTFNQcyAoeC1kb21haW4pIHRyYW5zZm9ybSAqLworICAgcm9vdHM9bHBjX3RvX2xzcCAobHBjLCBzdC0+bHBjU2l6ZSwgbHNwLCAxMCwgTFNQX0RFTFRBMSwgc3RhY2spOworICAgaWYgKHJvb3RzIT1zdC0+bHBjU2l6ZSkKKyAgIHsKKyAgICAgIHJvb3RzID0gbHBjX3RvX2xzcCAobHBjLCBzdC0+bHBjU2l6ZSwgbHNwLCAxMCwgTFNQX0RFTFRBMiwgc3RhY2spOworICAgICAgaWYgKHJvb3RzIT1zdC0+bHBjU2l6ZSkgeworICAgICAgICAgLypJZiB3ZSBjYW4ndCBmaW5kIGFsbCBMU1AncywgZG8gc29tZSBkYW1hZ2UgY29udHJvbCBhbmQgdXNlIGEgZmxhdCBmaWx0ZXIqLworICAgICAgICAgZm9yIChpPTA7aTxzdC0+bHBjU2l6ZTtpKyspCisgICAgICAgICB7CisgICAgICAgICAgICBsc3BbaV09c3QtPm9sZF9sc3BbaV07CisgICAgICAgICB9CisgICAgICB9CisgICB9CisKKyAgIC8qIFZCUiBjb2RlICovCisgICBpZiAoKHN0LT52YnJfZW5hYmxlZCB8fCBzdC0+dmFkX2VuYWJsZWQpICYmICFkdHgpCisgICB7CisgICAgICBmbG9hdCByYXRpbzsKKyAgICAgIGlmIChzdC0+YWJyX2VuYWJsZWQpCisgICAgICB7CisgICAgICAgICBmbG9hdCBxdWFsX2NoYW5nZT0wOworICAgICAgICAgaWYgKHN0LT5hYnJfZHJpZnQyICogc3QtPmFicl9kcmlmdCA+IDApCisgICAgICAgICB7CisgICAgICAgICAgICAvKiBPbmx5IGFkYXB0IGlmIGxvbmctdGVybSBhbmQgc2hvcnQtdGVybSBkcmlmdCBhcmUgdGhlIHNhbWUgc2lnbiAqLworICAgICAgICAgICAgcXVhbF9jaGFuZ2UgPSAtLjAwMDAxKnN0LT5hYnJfZHJpZnQvKDErc3QtPmFicl9jb3VudCk7CisgICAgICAgICAgICBpZiAocXVhbF9jaGFuZ2U+LjEpCisgICAgICAgICAgICAgICBxdWFsX2NoYW5nZT0uMTsKKyAgICAgICAgICAgIGlmIChxdWFsX2NoYW5nZTwtLjEpCisgICAgICAgICAgICAgICBxdWFsX2NoYW5nZT0tLjE7CisgICAgICAgICB9CisgICAgICAgICBzdC0+dmJyX3F1YWxpdHkgKz0gcXVhbF9jaGFuZ2U7CisgICAgICAgICBpZiAoc3QtPnZicl9xdWFsaXR5PjEwKQorICAgICAgICAgICAgc3QtPnZicl9xdWFsaXR5PTEwOworICAgICAgICAgaWYgKHN0LT52YnJfcXVhbGl0eTwwKQorICAgICAgICAgICAgc3QtPnZicl9xdWFsaXR5PTA7CisgICAgICB9CisKKworICAgICAgcmF0aW8gPSAyKmxvZygoMS5mK2VfaGlnaCkvKDEuZitlX2xvdykpOworICAgICAgCisgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9HRVRfUkVMQVRJVkVfUVVBTElUWSwgJnN0LT5yZWxhdGl2ZV9xdWFsaXR5KTsKKyAgICAgIGlmIChyYXRpbzwtNCkKKyAgICAgICAgIHJhdGlvPS00OworICAgICAgaWYgKHJhdGlvPjIpCisgICAgICAgICByYXRpbz0yOworICAgICAgLyppZiAocmF0aW8+LTIpKi8KKyAgICAgIGlmIChzdC0+dmJyX2VuYWJsZWQpIAorICAgICAgeworICAgICAgICAgc3B4X2ludDMyX3QgbW9kZWlkOworICAgICAgICAgbW9kZWlkID0gbW9kZS0+bmJfbW9kZXMtMTsKKyAgICAgICAgIHN0LT5yZWxhdGl2ZV9xdWFsaXR5Kz0xLjAqKHJhdGlvKzIpOworCSBpZiAoc3QtPnJlbGF0aXZlX3F1YWxpdHk8LTEpCisgICAgICAgICAgICBzdC0+cmVsYXRpdmVfcXVhbGl0eT0tMTsKKyAgICAgICAgIHdoaWxlIChtb2RlaWQpCisgICAgICAgICB7CisgICAgICAgICAgICBpbnQgdjE7CisgICAgICAgICAgICBmbG9hdCB0aHJlc2g7CisgICAgICAgICAgICB2MT0oaW50KWZsb29yKHN0LT52YnJfcXVhbGl0eSk7CisgICAgICAgICAgICBpZiAodjE9PTEwKQorICAgICAgICAgICAgICAgdGhyZXNoID0gbW9kZS0+dmJyX3RocmVzaFttb2RlaWRdW3YxXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIHRocmVzaCA9IChzdC0+dmJyX3F1YWxpdHktdjEpICAgKiBtb2RlLT52YnJfdGhyZXNoW21vZGVpZF1bdjErMV0gKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICgxK3YxLXN0LT52YnJfcXVhbGl0eSkgKiBtb2RlLT52YnJfdGhyZXNoW21vZGVpZF1bdjFdOworICAgICAgICAgICAgaWYgKHN0LT5yZWxhdGl2ZV9xdWFsaXR5ID49IHRocmVzaCAmJiBzdC0+c2FtcGxpbmdfcmF0ZSpzdC0+c3VibW9kZXNbbW9kZWlkXS0+Yml0c19wZXJfZnJhbWUvc3QtPmZ1bGxfZnJhbWVfc2l6ZSA8PSBzdC0+dmJyX21heF9oaWdoKQorICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtb2RlaWQtLTsKKyAgICAgICAgIH0KKyAgICAgICAgIHNwZWV4X2VuY29kZXJfY3RsKHN0YXRlLCBTUEVFWF9TRVRfSElHSF9NT0RFLCAmbW9kZWlkKTsKKyAgICAgICAgIGlmIChzdC0+YWJyX2VuYWJsZWQpCisgICAgICAgICB7CisgICAgICAgICAgICBzcHhfaW50MzJfdCBiaXRyYXRlOworICAgICAgICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3RhdGUsIFNQRUVYX0dFVF9CSVRSQVRFLCAmYml0cmF0ZSk7CisgICAgICAgICAgICBzdC0+YWJyX2RyaWZ0Kz0oYml0cmF0ZS1zdC0+YWJyX2VuYWJsZWQpOworICAgICAgICAgICAgc3QtPmFicl9kcmlmdDIgPSAuOTUqc3QtPmFicl9kcmlmdDIgKyAuMDUqKGJpdHJhdGUtc3QtPmFicl9lbmFibGVkKTsKKyAgICAgICAgICAgIHN0LT5hYnJfY291bnQgKz0gMS4wOworICAgICAgICAgfQorCisgICAgICB9IGVsc2UgeworICAgICAgICAgLyogVkFEIG9ubHkgKi8KKyAgICAgICAgIGludCBtb2RlaWQ7CisgICAgICAgICBpZiAoc3QtPnJlbGF0aXZlX3F1YWxpdHk8Mi4wKQorICAgICAgICAgICAgbW9kZWlkPTE7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBtb2RlaWQ9c3QtPnN1Ym1vZGVTZWxlY3Q7CisgICAgICAgICAvKnNwZWV4X2VuY29kZXJfY3RsKHN0YXRlLCBTUEVFWF9TRVRfTU9ERSwgJm1vZGUpOyovCisgICAgICAgICBzdC0+c3VibW9kZUlEPW1vZGVpZDsKKworICAgICAgfQorICAgICAgLypmcHJpbnRmIChzdGRlcnIsICIlZiAlZlxuIiwgcmF0aW8sIGxvd19xdWFsKTsqLworICAgfQorCisgICBpZiAoc3QtPmVuY29kZV9zdWJtb2RlKQorICAgeworICAgICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIDEsIDEpOworICAgICAgaWYgKGR0eCkKKyAgICAgICAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCAwLCBTQl9TVUJNT0RFX0JJVFMpOworICAgICAgZWxzZQorICAgICAgICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIHN0LT5zdWJtb2RlSUQsIFNCX1NVQk1PREVfQklUUyk7CisgICB9CisKKyAgIC8qIElmIG51bGwgbW9kZSAobm8gdHJhbnNtaXNzaW9uKSwganVzdCBzZXQgYSBjb3VwbGUgdGhpbmdzIHRvIHplcm8qLworICAgaWYgKGR0eCB8fCBzdC0+c3VibW9kZXNbc3QtPnN1Ym1vZGVJRF0gPT0gTlVMTCkKKyAgIHsKKyAgICAgIGZvciAoaT0wO2k8c3QtPmZyYW1lX3NpemU7aSsrKQorICAgICAgICAgaGlnaFtpXT1WRVJZX1NNQUxMOworCisgICAgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgICAgIHN0LT5tZW1fc3dbaV09MDsKKyAgICAgIHN0LT5maXJzdD0xOworCisgICAgICAvKiBGaW5hbCBzaWduYWwgc3ludGhlc2lzIGZyb20gZXhjaXRhdGlvbiAqLworICAgICAgaWlyX21lbTE2KGhpZ2gsIHN0LT5pbnRlcnBfcWxwYywgaGlnaCwgc3QtPmZyYW1lX3NpemUsIHN0LT5scGNTaXplLCBzdC0+bWVtX3NwLCBzdGFjayk7CisKKyAgICAgIGlmIChkdHgpCisgICAgICAgICByZXR1cm4gMDsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiAxOworICAgfQorCisKKyAgIC8qIExTUCBxdWFudGl6YXRpb24gKi8KKyAgIFNVQk1PREUobHNwX3F1YW50KShsc3AsIHFsc3AsIHN0LT5scGNTaXplLCBiaXRzKTsgICAKKworICAgaWYgKHN0LT5maXJzdCkKKyAgIHsKKyAgICAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemU7aSsrKQorICAgICAgICAgc3QtPm9sZF9sc3BbaV0gPSBsc3BbaV07CisgICAgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgICAgIHN0LT5vbGRfcWxzcFtpXSA9IHFsc3BbaV07CisgICB9CisgICAKKyAgIEFMTE9DKG1lbSwgc3QtPmxwY1NpemUsIHNweF9tZW1fdCk7CisgICBBTExPQyhzeW5fcmVzcCwgc3QtPnN1YmZyYW1lU2l6ZSwgc3B4X3dvcmQxNl90KTsKKyAgIEFMTE9DKGlubm92LCBzdC0+c3ViZnJhbWVTaXplLCBzcHhfc2lnX3QpOworICAgQUxMT0ModGFyZ2V0LCBzdC0+c3ViZnJhbWVTaXplLCBzcHhfd29yZDE2X3QpOworCisgICBmb3IgKHN1Yj0wO3N1YjxzdC0+bmJTdWJmcmFtZXM7c3ViKyspCisgICB7CisgICAgICBWQVJERUNMKHNweF93b3JkMTZfdCAqZXhjKTsKKyAgICAgIFZBUkRFQ0woc3B4X3dvcmQxNl90ICpyZXMpOworICAgICAgVkFSREVDTChzcHhfd29yZDE2X3QgKnN3KTsKKyAgICAgIHNweF93b3JkMTZfdCAqc3A7CisgICAgICBzcHhfd29yZDE2X3QgZmlsdGVyX3JhdGlvOyAgICAgLypRNyovCisgICAgICBpbnQgb2Zmc2V0OworICAgICAgc3B4X3dvcmQzMl90IHJsLCByaDsgICAgICAgICAgIC8qUTEzKi8KKyAgICAgIHNweF93b3JkMTZfdCBlaD0wOworCisgICAgICBvZmZzZXQgPSBzdC0+c3ViZnJhbWVTaXplKnN1YjsKKyAgICAgIHNwPWhpZ2grb2Zmc2V0OworICAgICAgQUxMT0MoZXhjLCBzdC0+c3ViZnJhbWVTaXplLCBzcHhfd29yZDE2X3QpOworICAgICAgQUxMT0MocmVzLCBzdC0+c3ViZnJhbWVTaXplLCBzcHhfd29yZDE2X3QpOworICAgICAgQUxMT0Moc3csIHN0LT5zdWJmcmFtZVNpemUsIHNweF93b3JkMTZfdCk7CisgICAgICAKKyAgICAgIC8qIExTUCBpbnRlcnBvbGF0aW9uIChxdWFudGl6ZWQgYW5kIHVucXVhbnRpemVkKSAqLworICAgICAgbHNwX2ludGVycG9sYXRlKHN0LT5vbGRfbHNwLCBsc3AsIGludGVycF9sc3AsIHN0LT5scGNTaXplLCBzdWIsIHN0LT5uYlN1YmZyYW1lcyk7CisgICAgICBsc3BfaW50ZXJwb2xhdGUoc3QtPm9sZF9xbHNwLCBxbHNwLCBpbnRlcnBfcWxzcCwgc3QtPmxwY1NpemUsIHN1Yiwgc3QtPm5iU3ViZnJhbWVzKTsKKworICAgICAgbHNwX2VuZm9yY2VfbWFyZ2luKGludGVycF9sc3AsIHN0LT5scGNTaXplLCBMU1BfTUFSR0lOKTsKKyAgICAgIGxzcF9lbmZvcmNlX21hcmdpbihpbnRlcnBfcWxzcCwgc3QtPmxwY1NpemUsIExTUF9NQVJHSU4pOworCisgICAgICBsc3BfdG9fbHBjKGludGVycF9sc3AsIGludGVycF9scGMsIHN0LT5scGNTaXplLHN0YWNrKTsKKyAgICAgIGxzcF90b19scGMoaW50ZXJwX3Fsc3AsIHN0LT5pbnRlcnBfcWxwYywgc3QtPmxwY1NpemUsIHN0YWNrKTsKKworICAgICAgYndfbHBjKHN0LT5nYW1tYTEsIGludGVycF9scGMsIGJ3X2xwYzEsIHN0LT5scGNTaXplKTsKKyAgICAgIGJ3X2xwYyhzdC0+Z2FtbWEyLCBpbnRlcnBfbHBjLCBid19scGMyLCBzdC0+bHBjU2l6ZSk7CisKKyAgICAgIC8qIENvbXB1dGUgbWlkLWJhbmQgKDQwMDAgSHogZm9yIHdpZGViYW5kKSByZXNwb25zZSBvZiBsb3ctYmFuZCBhbmQgaGlnaC1iYW5kCisgICAgICAgICBmaWx0ZXJzICovCisgICAgICBzdC0+cGlfZ2FpbltzdWJdPUxQQ19TQ0FMSU5HOworICAgICAgcmggPSBMUENfU0NBTElORzsKKyAgICAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemU7aSs9MikKKyAgICAgIHsKKyAgICAgICAgIHJoICs9IHN0LT5pbnRlcnBfcWxwY1tpKzFdIC0gc3QtPmludGVycF9xbHBjW2ldOworICAgICAgICAgc3QtPnBpX2dhaW5bc3ViXSArPSBzdC0+aW50ZXJwX3FscGNbaV0gKyBzdC0+aW50ZXJwX3FscGNbaSsxXTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgcmwgPSBsb3dfcGlfZ2FpbltzdWJdOworI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICBmaWx0ZXJfcmF0aW89RVhUUkFDVDE2KFNBVFVSQVRFKFBESVYzMihTSEwzMihBREQzMihybCw4MiksNyksQUREMzIoODIscmgpKSwzMjc2NykpOworI2Vsc2UKKyAgICAgIGZpbHRlcl9yYXRpbz0ocmwrLjAxKS8ocmgrLjAxKTsKKyNlbmRpZgorICAgICAgCisgICAgICAvKiBDb21wdXRlICJyZWFsIGV4Y2l0YXRpb24iICovCisgICAgICBmaXJfbWVtMTYoc3AsIHN0LT5pbnRlcnBfcWxwYywgZXhjLCBzdC0+c3ViZnJhbWVTaXplLCBzdC0+bHBjU2l6ZSwgc3QtPm1lbV9zcDIsIHN0YWNrKTsKKyAgICAgIC8qIENvbXB1dGUgZW5lcmd5IG9mIGxvdy1iYW5kIGFuZCBoaWdoLWJhbmQgZXhjaXRhdGlvbiAqLworCisgICAgICBlaCA9IGNvbXB1dGVfcm1zMTYoZXhjLCBzdC0+c3ViZnJhbWVTaXplKTsKKworICAgICAgaWYgKCFTVUJNT0RFKGlubm92YXRpb25fcXVhbnQpKSB7LyogMSBmb3Igc3BlY3RyYWwgZm9sZGluZyBleGNpdGF0aW9uLCAwIGZvciBzdG9jaGFzdGljICovCisgICAgICAgICBzcHhfd29yZDMyX3QgZzsgICAvKlE3Ki8KKyAgICAgICAgIHNweF93b3JkMTZfdCBlbDsgIC8qUTAqLworICAgICAgICAgZWwgPSBsb3dfaW5ub3Zfcm1zW3N1Yl07CisKKyAgICAgICAgIC8qIEdhaW4gdG8gdXNlIGlmIHdlIHdhbnQgdG8gdXNlIHRoZSBsb3ctYmFuZCBleGNpdGF0aW9uIGZvciBoaWdoLWJhbmQgKi8KKyAgICAgICAgIGc9UERJVjMyKE1VTFQxNl8xNihmaWx0ZXJfcmF0aW8sZWgpLEVYVEVORDMyKEFERDE2KDEsZWwpKSk7CisgICAgICAgICAKKyNpZiAwCisgICAgICAgICB7CisgICAgICAgICAgICBjaGFyICp0bXBfc3RhY2s9c3RhY2s7CisgICAgICAgICAgICBmbG9hdCAqdG1wX3NpZzsKKyAgICAgICAgICAgIGZsb2F0IGcyOworICAgICAgICAgICAgQUxMT0ModG1wX3NpZywgc3QtPnN1YmZyYW1lU2l6ZSwgc3B4X3NpZ190KTsKKyAgICAgICAgICAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemU7aSsrKQorICAgICAgICAgICAgICAgbWVtW2ldPXN0LT5tZW1fc3BbaV07CisgICAgICAgICAgICBpaXJfbWVtMihzdC0+bG93X2lubm92K29mZnNldCwgc3QtPmludGVycF9xbHBjLCB0bXBfc2lnLCBzdC0+c3ViZnJhbWVTaXplLCBzdC0+bHBjU2l6ZSwgbWVtKTsKKyAgICAgICAgICAgIGcyID0gY29tcHV0ZV9ybXMoc3AsIHN0LT5zdWJmcmFtZVNpemUpLyguMDErY29tcHV0ZV9ybXModG1wX3NpZywgc3QtPnN1YmZyYW1lU2l6ZSkpOworICAgICAgICAgICAgLypmcHJpbnRmIChzdGRlcnIsICJnYWluczogJWYgJWZcbiIsIGcsIGcyKTsqLworICAgICAgICAgICAgZyA9IGcyOworICAgICAgICAgICAgc3RhY2sgPSB0bXBfc3RhY2s7CisgICAgICAgICB9CisjZW5kaWYKKworICAgICAgICAgLypwcmludF92ZWMoJmcsIDEsICJnYWluIGZhY3RvciIpOyovCisgICAgICAgICAvKiBHYWluIHF1YW50aXphdGlvbiAqLworICAgICAgICAgeworICAgICAgICAgICAgaW50IHF1YW50ID0gc2NhbF9xdWFudChnLCBmb2xkX3F1YW50X2JvdW5kLCAzMik7CisgICAgICAgICAgICAvKnNwZWV4X3dhcm5pbmdfaW50KCJ0YXRhIiwgcXVhbnQpOyovCisgICAgICAgICAgICBpZiAocXVhbnQ8MCkKKyAgICAgICAgICAgICAgIHF1YW50PTA7CisgICAgICAgICAgICBpZiAocXVhbnQ+MzEpCisgICAgICAgICAgICAgICBxdWFudD0zMTsKKyAgICAgICAgICAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBxdWFudCwgNSk7CisgICAgICAgICB9CisgICAgICAgICBpZiAoc3QtPmlubm92X3Jtc19zYXZlKQorICAgICAgICAgeworICAgICAgICAgICAgc3QtPmlubm92X3Jtc19zYXZlW3N1Yl0gPSBlaDsKKyAgICAgICAgIH0KKyAgICAgICAgIHN0LT5leGNfcm1zW3N1Yl0gPSBlaDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICBzcHhfd29yZDE2X3QgZ2M7ICAgICAgIC8qUTcqLworICAgICAgICAgc3B4X3dvcmQzMl90IHNjYWxlOyAgICAvKlExNCovCisgICAgICAgICBzcHhfd29yZDE2X3QgZWw7ICAgICAgIC8qUTAqLworICAgICAgICAgZWwgPSBsb3dfZXhjX3Jtc1tzdWJdOyAvKlEwKi8KKworICAgICAgICAgZ2MgPSBQRElWMzJfMTYoTVVMVDE2XzE2KGZpbHRlcl9yYXRpbywxK2VoKSwxK2VsKTsKKworICAgICAgICAgLyogVGhpcyBpcyBhIGtsdWRnZSB0aGF0IGNsZWFucyB1cCBhIGhpc3RvcmljYWwgYnVnICovCisgICAgICAgICBpZiAoc3QtPnN1YmZyYW1lU2l6ZT09ODApCisgICAgICAgICAgICBnYyA9IE1VTFQxNl8xNl9QMTUoUUNPTlNUMTYoMC43MDcxMWYsMTUpLGdjKTsKKyAgICAgICAgIC8qcHJpbnRmICgiJWYgJWYgJWYgJWZcbiIsIGVsLCBlaCwgZmlsdGVyX3JhdGlvLCBnYyk7Ki8KKyAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBxZ2MgPSBzY2FsX3F1YW50KGdjLCBnY19xdWFudF9ib3VuZCwgMTYpOworICAgICAgICAgICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIHFnYywgNCk7CisgICAgICAgICAgICBnYyA9IE1VTFQxNl8xNl9RMTUoUUNPTlNUMTYoMC44NzM2MCwxNSksZ2NfcXVhbnRfYm91bmRbcWdjXSk7CisgICAgICAgICB9CisgICAgICAgICBpZiAoc3QtPnN1YmZyYW1lU2l6ZT09ODApCisgICAgICAgICAgICBnYyA9IE1VTFQxNl8xNl9QMTQoUUNPTlNUMTYoMS40MTQyZiwxNCksIGdjKTsKKworICAgICAgICAgc2NhbGUgPSBTSEwzMihNVUxUMTZfMTYoUERJVjMyXzE2KFNITDMyKEVYVEVORDMyKGdjKSxTSUdfU0hJRlQtNiksZmlsdGVyX3JhdGlvKSwoMStlbCkpLDYpOworCisgICAgICAgICBjb21wdXRlX2ltcHVsc2VfcmVzcG9uc2Uoc3QtPmludGVycF9xbHBjLCBid19scGMxLCBid19scGMyLCBzeW5fcmVzcCwgc3QtPnN1YmZyYW1lU2l6ZSwgc3QtPmxwY1NpemUsIHN0YWNrKTsKKworICAgICAgICAgCisgICAgICAgICAvKiBSZXNldCBleGNpdGF0aW9uICovCisgICAgICAgICBmb3IgKGk9MDtpPHN0LT5zdWJmcmFtZVNpemU7aSsrKQorICAgICAgICAgICAgcmVzW2ldPVZFUllfU01BTEw7CisgICAgICAgICAKKyAgICAgICAgIC8qIENvbXB1dGUgemVybyByZXNwb25zZSAocmluZ2luZykgb2YgQSh6L2cxKSAvICggQSh6L2cyKSAqIEFxKHopICkgKi8KKyAgICAgICAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemU7aSsrKQorICAgICAgICAgICAgbWVtW2ldPXN0LT5tZW1fc3BbaV07CisgICAgICAgICBpaXJfbWVtMTYocmVzLCBzdC0+aW50ZXJwX3FscGMsIHJlcywgc3QtPnN1YmZyYW1lU2l6ZSwgc3QtPmxwY1NpemUsIG1lbSwgc3RhY2spOworCisgICAgICAgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgICAgICAgIG1lbVtpXT1zdC0+bWVtX3N3W2ldOworICAgICAgICAgZmlsdGVyX21lbTE2KHJlcywgYndfbHBjMSwgYndfbHBjMiwgcmVzLCBzdC0+c3ViZnJhbWVTaXplLCBzdC0+bHBjU2l6ZSwgbWVtLCBzdGFjayk7CisKKyAgICAgICAgIC8qIENvbXB1dGUgd2VpZ2h0ZWQgc2lnbmFsICovCisgICAgICAgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgICAgICAgIG1lbVtpXT1zdC0+bWVtX3N3W2ldOworICAgICAgICAgZmlsdGVyX21lbTE2KHNwLCBid19scGMxLCBid19scGMyLCBzdywgc3QtPnN1YmZyYW1lU2l6ZSwgc3QtPmxwY1NpemUsIG1lbSwgc3RhY2spOworCisgICAgICAgICAvKiBDb21wdXRlIHRhcmdldCBzaWduYWwgKi8KKyAgICAgICAgIGZvciAoaT0wO2k8c3QtPnN1YmZyYW1lU2l6ZTtpKyspCisgICAgICAgICAgICB0YXJnZXRbaV09U1VCMTYoc3dbaV0scmVzW2ldKTsKKworICAgICAgICAgc2lnbmFsX2Rpdih0YXJnZXQsIHRhcmdldCwgc2NhbGUsIHN0LT5zdWJmcmFtZVNpemUpOworCisgICAgICAgICAvKiBSZXNldCBleGNpdGF0aW9uICovCisgICAgICAgICBmb3IgKGk9MDtpPHN0LT5zdWJmcmFtZVNpemU7aSsrKQorICAgICAgICAgICAgaW5ub3ZbaV09MDsKKworICAgICAgICAgLypwcmludF92ZWModGFyZ2V0LCBzdC0+c3ViZnJhbWVTaXplLCAiXG50YXJnZXQiKTsqLworICAgICAgICAgU1VCTU9ERShpbm5vdmF0aW9uX3F1YW50KSh0YXJnZXQsIHN0LT5pbnRlcnBfcWxwYywgYndfbHBjMSwgYndfbHBjMiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQk1PREUoaW5ub3ZhdGlvbl9wYXJhbXMpLCBzdC0+bHBjU2l6ZSwgc3QtPnN1YmZyYW1lU2l6ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubm92LCBzeW5fcmVzcCwgYml0cywgc3RhY2ssIHN0LT5jb21wbGV4aXR5LCBTVUJNT0RFKGRvdWJsZV9jb2RlYm9vaykpOworICAgICAgICAgLypwcmludF92ZWModGFyZ2V0LCBzdC0+c3ViZnJhbWVTaXplLCAiYWZ0ZXIiKTsqLworCisgICAgICAgICBzaWduYWxfbXVsKGlubm92LCBpbm5vdiwgc2NhbGUsIHN0LT5zdWJmcmFtZVNpemUpOworCisgICAgICAgICBpZiAoU1VCTU9ERShkb3VibGVfY29kZWJvb2spKSB7CisgICAgICAgICAgICBjaGFyICp0bXBfc3RhY2s9c3RhY2s7CisgICAgICAgICAgICBWQVJERUNMKHNweF9zaWdfdCAqaW5ub3YyKTsKKyAgICAgICAgICAgIEFMTE9DKGlubm92Miwgc3QtPnN1YmZyYW1lU2l6ZSwgc3B4X3NpZ190KTsKKyAgICAgICAgICAgIGZvciAoaT0wO2k8c3QtPnN1YmZyYW1lU2l6ZTtpKyspCisgICAgICAgICAgICAgICBpbm5vdjJbaV09MDsKKyAgICAgICAgICAgIGZvciAoaT0wO2k8c3QtPnN1YmZyYW1lU2l6ZTtpKyspCisgICAgICAgICAgICAgICB0YXJnZXRbaV09TVVMVDE2XzE2X1AxMyhRQ09OU1QxNigyLjVmLDEzKSwgdGFyZ2V0W2ldKTsKKworICAgICAgICAgICAgU1VCTU9ERShpbm5vdmF0aW9uX3F1YW50KSh0YXJnZXQsIHN0LT5pbnRlcnBfcWxwYywgYndfbHBjMSwgYndfbHBjMiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQk1PREUoaW5ub3ZhdGlvbl9wYXJhbXMpLCBzdC0+bHBjU2l6ZSwgc3QtPnN1YmZyYW1lU2l6ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubm92Miwgc3luX3Jlc3AsIGJpdHMsIHN0YWNrLCBzdC0+Y29tcGxleGl0eSwgMCk7CisgICAgICAgICAgICBzaWduYWxfbXVsKGlubm92MiwgaW5ub3YyLCBNVUxUMTZfMzJfUDE1KFFDT05TVDE2KDAuNGYsMTUpLHNjYWxlKSwgc3QtPnN1YmZyYW1lU2l6ZSk7CisKKyAgICAgICAgICAgIGZvciAoaT0wO2k8c3QtPnN1YmZyYW1lU2l6ZTtpKyspCisgICAgICAgICAgICAgICBpbm5vdltpXSA9IEFERDMyKGlubm92W2ldLGlubm92MltpXSk7CisgICAgICAgICAgICBzdGFjayA9IHRtcF9zdGFjazsKKyAgICAgICAgIH0KKyAgICAgICAgIGZvciAoaT0wO2k8c3QtPnN1YmZyYW1lU2l6ZTtpKyspCisgICAgICAgICAgICBleGNbaV0gPSBQU0hSMzIoaW5ub3ZbaV0sU0lHX1NISUZUKTsKKworICAgICAgICAgaWYgKHN0LT5pbm5vdl9ybXNfc2F2ZSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHN0LT5pbm5vdl9ybXNfc2F2ZVtzdWJdID0gTVVMVDE2XzE2X1ExNShRQ09OU1QxNiguNzA3MTFmLCAxNSksIGNvbXB1dGVfcm1zKGlubm92LCBzdC0+c3ViZnJhbWVTaXplKSk7CisgICAgICAgICB9CisgICAgICAgICBzdC0+ZXhjX3Jtc1tzdWJdID0gY29tcHV0ZV9ybXMxNihleGMsIHN0LT5zdWJmcmFtZVNpemUpOworICAgICAgICAgCisKKyAgICAgIH0KKworICAgICAgCisgICAgICAvKktlZXAgdGhlIHByZXZpb3VzIG1lbW9yeSovCisgICAgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgICAgIG1lbVtpXT1zdC0+bWVtX3NwW2ldOworICAgICAgLyogRmluYWwgc2lnbmFsIHN5bnRoZXNpcyBmcm9tIGV4Y2l0YXRpb24gKi8KKyAgICAgIGlpcl9tZW0xNihleGMsIHN0LT5pbnRlcnBfcWxwYywgc3AsIHN0LT5zdWJmcmFtZVNpemUsIHN0LT5scGNTaXplLCBzdC0+bWVtX3NwLCBzdGFjayk7CisgICAgICAKKyAgICAgIC8qIENvbXB1dGUgd2VpZ2h0ZWQgc2lnbmFsIGFnYWluLCBmcm9tIHN5bnRoZXNpemVkIHNwZWVjaCAobm90IHN1cmUgaXQncyB0aGUgcmlnaHQgdGhpbmcpICovCisgICAgICBmaWx0ZXJfbWVtMTYoc3AsIGJ3X2xwYzEsIGJ3X2xwYzIsIHN3LCBzdC0+c3ViZnJhbWVTaXplLCBzdC0+bHBjU2l6ZSwgc3QtPm1lbV9zdywgc3RhY2spOworICAgfQorCisgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgIHN0LT5vbGRfbHNwW2ldID0gbHNwW2ldOworICAgZm9yIChpPTA7aTxzdC0+bHBjU2l6ZTtpKyspCisgICAgICBzdC0+b2xkX3Fsc3BbaV0gPSBxbHNwW2ldOworCisgICBzdC0+Zmlyc3Q9MDsKKworICAgcmV0dXJuIDE7Cit9CisKKworCisKKwordm9pZCAqc2JfZGVjb2Rlcl9pbml0KGNvbnN0IFNwZWV4TW9kZSAqbSkKK3sKKyAgIHNweF9pbnQzMl90IHRtcDsKKyAgIFNCRGVjU3RhdGUgKnN0OworICAgY29uc3QgU3BlZXhTQk1vZGUgKm1vZGU7CisgICBzdCA9IChTQkRlY1N0YXRlKilzcGVleF9hbGxvYyhzaXplb2YoU0JEZWNTdGF0ZSkpOworICAgaWYgKCFzdCkKKyAgICAgIHJldHVybiBOVUxMOworICAgc3QtPm1vZGUgPSBtOworICAgbW9kZT0oY29uc3QgU3BlZXhTQk1vZGUqKW0tPm1vZGU7CisgICBzdC0+ZW5jb2RlX3N1Ym1vZGUgPSAxOworCisgICBzdC0+c3RfbG93ID0gc3BlZXhfZGVjb2Rlcl9pbml0KG1vZGUtPm5iX21vZGUpOworI2lmIGRlZmluZWQoVkFSX0FSUkFZUykgfHwgZGVmaW5lZCAoVVNFX0FMTE9DQSkKKyAgIHN0LT5zdGFjayA9IE5VTEw7CisjZWxzZQorICAgLypzdC0+c3RhY2sgPSAoY2hhciopc3BlZXhfYWxsb2Nfc2NyYXRjaChTQl9ERUNfU1RBQ0spOyovCisgICBzcGVleF9kZWNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9HRVRfU1RBQ0ssICZzdC0+c3RhY2spOworI2VuZGlmCisKKyAgIHN0LT5mdWxsX2ZyYW1lX3NpemUgPSAyKm1vZGUtPmZyYW1lU2l6ZTsKKyAgIHN0LT5mcmFtZV9zaXplID0gbW9kZS0+ZnJhbWVTaXplOworICAgc3QtPnN1YmZyYW1lU2l6ZSA9IG1vZGUtPnN1YmZyYW1lU2l6ZTsKKyAgIHN0LT5uYlN1YmZyYW1lcyA9IG1vZGUtPmZyYW1lU2l6ZS9tb2RlLT5zdWJmcmFtZVNpemU7CisgICBzdC0+bHBjU2l6ZT1tb2RlLT5scGNTaXplOworICAgc3BlZXhfZGVjb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfR0VUX1NBTVBMSU5HX1JBVEUsICZzdC0+c2FtcGxpbmdfcmF0ZSk7CisgICBzdC0+c2FtcGxpbmdfcmF0ZSo9MjsKKyAgIHRtcD0xOworICAgc3BlZXhfZGVjb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfU0VUX1dJREVCQU5ELCAmdG1wKTsKKworICAgc3QtPnN1Ym1vZGVzPW1vZGUtPnN1Ym1vZGVzOworICAgc3QtPnN1Ym1vZGVJRD1tb2RlLT5kZWZhdWx0U3VibW9kZTsKKworICAgc3QtPmZpcnN0PTE7CisKKyAgIHN0LT5nMF9tZW0gPSAoc3B4X3dvcmQzMl90KilzcGVleF9hbGxvYygoUU1GX09SREVSKSpzaXplb2Yoc3B4X3dvcmQzMl90KSk7CisgICBzdC0+ZzFfbWVtID0gKHNweF93b3JkMzJfdCopc3BlZXhfYWxsb2MoKFFNRl9PUkRFUikqc2l6ZW9mKHNweF93b3JkMzJfdCkpOworCisgICBzdC0+ZXhjQnVmID0gKHNweF93b3JkMTZfdCopc3BlZXhfYWxsb2MoKHN0LT5zdWJmcmFtZVNpemUpKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKworICAgc3QtPm9sZF9xbHNwID0gKHNweF9sc3BfdCopc3BlZXhfYWxsb2MoKHN0LT5scGNTaXplKSpzaXplb2Yoc3B4X2xzcF90KSk7CisgICBzdC0+aW50ZXJwX3FscGMgPSAoc3B4X2NvZWZfdCopc3BlZXhfYWxsb2Moc3QtPmxwY1NpemUqc2l6ZW9mKHNweF9jb2VmX3QpKTsKKworICAgc3QtPnBpX2dhaW4gPSAoc3B4X3dvcmQzMl90KilzcGVleF9hbGxvYygoc3QtPm5iU3ViZnJhbWVzKSpzaXplb2Yoc3B4X3dvcmQzMl90KSk7CisgICBzdC0+ZXhjX3JtcyA9IChzcHhfd29yZDE2X3QqKXNwZWV4X2FsbG9jKChzdC0+bmJTdWJmcmFtZXMpKnNpemVvZihzcHhfd29yZDE2X3QpKTsKKyAgIHN0LT5tZW1fc3AgPSAoc3B4X21lbV90KilzcGVleF9hbGxvYygoMipzdC0+bHBjU2l6ZSkqc2l6ZW9mKHNweF9tZW1fdCkpOworICAgCisgICBzdC0+aW5ub3Zfc2F2ZSA9IE5VTEw7CisKKworICAgc3QtPmxwY19lbmhfZW5hYmxlZD0wOworICAgc3QtPnNlZWQgPSAxMDAwOworCisjaWZkZWYgRU5BQkxFX1ZBTEdSSU5ECisgICBWQUxHUklORF9NQUtFX1JFQURBQkxFKHN0LCAoc3QtPnN0YWNrLShjaGFyKilzdCkpOworI2VuZGlmCisgICByZXR1cm4gc3Q7Cit9CisKK3ZvaWQgc2JfZGVjb2Rlcl9kZXN0cm95KHZvaWQgKnN0YXRlKQoreworICAgU0JEZWNTdGF0ZSAqc3Q7CisgICBzdCA9IChTQkRlY1N0YXRlKilzdGF0ZTsKKyAgIHNwZWV4X2RlY29kZXJfZGVzdHJveShzdC0+c3RfbG93KTsKKyNpZiAhKGRlZmluZWQoVkFSX0FSUkFZUykgfHwgZGVmaW5lZCAoVVNFX0FMTE9DQSkpCisgICAvKnNwZWV4X2ZyZWVfc2NyYXRjaChzdC0+c3RhY2spOyovCisjZW5kaWYKKworICAgc3BlZXhfZnJlZShzdC0+ZzBfbWVtKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPmcxX21lbSk7CisgICBzcGVleF9mcmVlKHN0LT5leGNCdWYpOworICAgc3BlZXhfZnJlZShzdC0+b2xkX3Fsc3ApOworICAgc3BlZXhfZnJlZShzdC0+aW50ZXJwX3FscGMpOworICAgc3BlZXhfZnJlZShzdC0+cGlfZ2Fpbik7CisgICBzcGVleF9mcmVlKHN0LT5leGNfcm1zKTsKKyAgIHNwZWV4X2ZyZWUoc3QtPm1lbV9zcCk7CisKKyAgIHNwZWV4X2ZyZWUoc3RhdGUpOworfQorCitzdGF0aWMgdm9pZCBzYl9kZWNvZGVfbG9zdChTQkRlY1N0YXRlICpzdCwgc3B4X3dvcmQxNl90ICpvdXQsIGludCBkdHgsIGNoYXIgKnN0YWNrKQoreworICAgaW50IGk7CisgICBpbnQgc2F2ZWRfbW9kZWlkPTA7CisKKyAgIGlmIChkdHgpCisgICB7CisgICAgICBzYXZlZF9tb2RlaWQ9c3QtPnN1Ym1vZGVJRDsKKyAgICAgIHN0LT5zdWJtb2RlSUQ9MTsKKyAgIH0gZWxzZSB7CisgICAgICBid19scGMoUUNPTlNUMTYoMC45OWYsMTUpLCBzdC0+aW50ZXJwX3FscGMsIHN0LT5pbnRlcnBfcWxwYywgc3QtPmxwY1NpemUpOworICAgfQorCisgICBzdC0+Zmlyc3Q9MTsKKyAgIAorICAgCisgICAvKiBGaW5hbCBzaWduYWwgc3ludGhlc2lzIGZyb20gZXhjaXRhdGlvbiAqLworICAgaWYgKCFkdHgpCisgICB7CisgICAgICBzdC0+bGFzdF9lbmVyID0gIE1VTFQxNl8xNl9RMTUoUUNPTlNUMTYoLjlmLDE1KSxzdC0+bGFzdF9lbmVyKTsKKyAgIH0KKyAgIGZvciAoaT0wO2k8c3QtPmZyYW1lX3NpemU7aSsrKQorICAgICAgb3V0W2krc3QtPmZyYW1lX3NpemVdID0gc3BlZXhfcmFuZChzdC0+bGFzdF9lbmVyLCAmc3QtPnNlZWQpOworCisgICBpaXJfbWVtMTYob3V0K3N0LT5mcmFtZV9zaXplLCBzdC0+aW50ZXJwX3FscGMsIG91dCtzdC0+ZnJhbWVfc2l6ZSwgc3QtPmZyYW1lX3NpemUsIHN0LT5scGNTaXplLCAKKyAgICAgICAgICAgIHN0LT5tZW1fc3AsIHN0YWNrKTsKKyAgIAorICAgCisgICAvKiBSZWNvbnN0cnVjdCB0aGUgb3JpZ2luYWwgKi8KKyAgIHFtZl9zeW50aChvdXQsIG91dCtzdC0+ZnJhbWVfc2l6ZSwgaDAsIG91dCwgc3QtPmZ1bGxfZnJhbWVfc2l6ZSwgUU1GX09SREVSLCBzdC0+ZzBfbWVtLCBzdC0+ZzFfbWVtLCBzdGFjayk7CisgICBpZiAoZHR4KQorICAgeworICAgICAgc3QtPnN1Ym1vZGVJRD1zYXZlZF9tb2RlaWQ7CisgICB9CisKKyAgIHJldHVybjsKK30KKworaW50IHNiX2RlY29kZSh2b2lkICpzdGF0ZSwgU3BlZXhCaXRzICpiaXRzLCB2b2lkICp2b3V0KQoreworICAgaW50IGksIHN1YjsKKyAgIFNCRGVjU3RhdGUgKnN0OworICAgaW50IHdpZGViYW5kOworICAgaW50IHJldDsKKyAgIGNoYXIgKnN0YWNrOworICAgVkFSREVDTChzcHhfd29yZDMyX3QgKmxvd19waV9nYWluKTsKKyAgIFZBUkRFQ0woc3B4X3dvcmQxNl90ICpsb3dfZXhjX3Jtcyk7CisgICBWQVJERUNMKHNweF9jb2VmX3QgKmFrKTsKKyAgIFZBUkRFQ0woc3B4X2xzcF90ICpxbHNwKTsKKyAgIFZBUkRFQ0woc3B4X2xzcF90ICppbnRlcnBfcWxzcCk7CisgICBzcHhfaW50MzJfdCBkdHg7CisgICBjb25zdCBTcGVleFNCTW9kZSAqbW9kZTsKKyAgIHNweF93b3JkMTZfdCAqb3V0ID0gKHNweF93b3JkMTZfdCopdm91dDsKKyAgIHNweF93b3JkMTZfdCAqbG93X2lubm92X2FsaWFzOworICAgc3B4X3dvcmQzMl90IGV4Y19lbmVyX3N1bSA9IDA7CisgICAKKyAgIHN0ID0gKFNCRGVjU3RhdGUqKXN0YXRlOworICAgc3RhY2s9c3QtPnN0YWNrOworICAgbW9kZSA9IChjb25zdCBTcGVleFNCTW9kZSopKHN0LT5tb2RlLT5tb2RlKTsKKworICAgbG93X2lubm92X2FsaWFzID0gb3V0K3N0LT5mcmFtZV9zaXplOworICAgc3BlZXhfZGVjb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfU0VUX0lOTk9WQVRJT05fU0FWRSwgbG93X2lubm92X2FsaWFzKTsKKyAgIC8qIERlY29kZSB0aGUgbG93LWJhbmQgKi8KKyAgIHJldCA9IHNwZWV4X2RlY29kZV9uYXRpdmUoc3QtPnN0X2xvdywgYml0cywgb3V0KTsKKworICAgc3BlZXhfZGVjb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfR0VUX0RUWF9TVEFUVVMsICZkdHgpOworCisgICAvKiBJZiBlcnJvciBkZWNvZGluZyB0aGUgbmFycm93YmFuZCBwYXJ0LCBwcm9wYWdhdGUgZXJyb3IgKi8KKyAgIGlmIChyZXQhPTApCisgICB7CisgICAgICByZXR1cm4gcmV0OworICAgfQorCisgICBpZiAoIWJpdHMpCisgICB7CisgICAgICBzYl9kZWNvZGVfbG9zdChzdCwgb3V0LCBkdHgsIHN0YWNrKTsKKyAgICAgIHJldHVybiAwOworICAgfQorCisgICBpZiAoc3QtPmVuY29kZV9zdWJtb2RlKQorICAgeworCisgICAgICAvKkNoZWNrICJ3aWRlYmFuZCBiaXQiKi8KKyAgICAgIGlmIChzcGVleF9iaXRzX3JlbWFpbmluZyhiaXRzKT4wKQorICAgICAgICAgd2lkZWJhbmQgPSBzcGVleF9iaXRzX3BlZWsoYml0cyk7CisgICAgICBlbHNlCisgICAgICAgICB3aWRlYmFuZCA9IDA7CisgICAgICBpZiAod2lkZWJhbmQpCisgICAgICB7CisgICAgICAgICAvKlJlZ3VsYXIgd2lkZWJhbmQgZnJhbWUsIHJlYWQgdGhlIHN1Ym1vZGUqLworICAgICAgICAgd2lkZWJhbmQgPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCAxKTsKKyAgICAgICAgIHN0LT5zdWJtb2RlSUQgPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCBTQl9TVUJNT0RFX0JJVFMpOworICAgICAgfSBlbHNlCisgICAgICB7CisgICAgICAgICAvKldhcyBhIG5hcnJvd2JhbmQgZnJhbWUsIHNldCAibnVsbCBzdWJtb2RlIiovCisgICAgICAgICBzdC0+c3VibW9kZUlEID0gMDsKKyAgICAgIH0KKyAgICAgIGlmIChzdC0+c3VibW9kZUlEICE9IDAgJiYgc3QtPnN1Ym1vZGVzW3N0LT5zdWJtb2RlSURdID09IE5VTEwpCisgICAgICB7CisgICAgICAgICBzcGVleF9ub3RpZnkoIkludmFsaWQgbW9kZSBlbmNvdW50ZXJlZC4gVGhlIHN0cmVhbSBpcyBjb3JydXB0ZWQuIik7CisgICAgICAgICByZXR1cm4gLTI7CisgICAgICB9CisgICB9CisKKyAgIC8qIElmIG51bGwgbW9kZSAobm8gdHJhbnNtaXNzaW9uKSwganVzdCBzZXQgYSBjb3VwbGUgdGhpbmdzIHRvIHplcm8qLworICAgaWYgKHN0LT5zdWJtb2Rlc1tzdC0+c3VibW9kZUlEXSA9PSBOVUxMKQorICAgeworICAgICAgaWYgKGR0eCkKKyAgICAgIHsKKyAgICAgICAgIHNiX2RlY29kZV9sb3N0KHN0LCBvdXQsIDEsIHN0YWNrKTsKKyAgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBmb3IgKGk9MDtpPHN0LT5mcmFtZV9zaXplO2krKykKKyAgICAgICAgIG91dFtzdC0+ZnJhbWVfc2l6ZStpXT1WRVJZX1NNQUxMOworCisgICAgICBzdC0+Zmlyc3Q9MTsKKworICAgICAgLyogRmluYWwgc2lnbmFsIHN5bnRoZXNpcyBmcm9tIGV4Y2l0YXRpb24gKi8KKyAgICAgIGlpcl9tZW0xNihvdXQrc3QtPmZyYW1lX3NpemUsIHN0LT5pbnRlcnBfcWxwYywgb3V0K3N0LT5mcmFtZV9zaXplLCBzdC0+ZnJhbWVfc2l6ZSwgc3QtPmxwY1NpemUsIHN0LT5tZW1fc3AsIHN0YWNrKTsKKworICAgICAgcW1mX3N5bnRoKG91dCwgb3V0K3N0LT5mcmFtZV9zaXplLCBoMCwgb3V0LCBzdC0+ZnVsbF9mcmFtZV9zaXplLCBRTUZfT1JERVIsIHN0LT5nMF9tZW0sIHN0LT5nMV9tZW0sIHN0YWNrKTsKKworICAgICAgcmV0dXJuIDA7CisKKyAgIH0KKworICAgQUxMT0MobG93X3BpX2dhaW4sIHN0LT5uYlN1YmZyYW1lcywgc3B4X3dvcmQzMl90KTsKKyAgIEFMTE9DKGxvd19leGNfcm1zLCBzdC0+bmJTdWJmcmFtZXMsIHNweF93b3JkMTZfdCk7CisgICBzcGVleF9kZWNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9HRVRfUElfR0FJTiwgbG93X3BpX2dhaW4pOworICAgc3BlZXhfZGVjb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfR0VUX0VYQywgbG93X2V4Y19ybXMpOworCisgICBBTExPQyhxbHNwLCBzdC0+bHBjU2l6ZSwgc3B4X2xzcF90KTsKKyAgIEFMTE9DKGludGVycF9xbHNwLCBzdC0+bHBjU2l6ZSwgc3B4X2xzcF90KTsKKyAgIFNVQk1PREUobHNwX3VucXVhbnQpKHFsc3AsIHN0LT5scGNTaXplLCBiaXRzKTsKKyAgIAorICAgaWYgKHN0LT5maXJzdCkKKyAgIHsKKyAgICAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemU7aSsrKQorICAgICAgICAgc3QtPm9sZF9xbHNwW2ldID0gcWxzcFtpXTsKKyAgIH0KKyAgIAorICAgQUxMT0MoYWssIHN0LT5scGNTaXplLCBzcHhfY29lZl90KTsKKworICAgZm9yIChzdWI9MDtzdWI8c3QtPm5iU3ViZnJhbWVzO3N1YisrKQorICAgeworICAgICAgVkFSREVDTChzcHhfd29yZDMyX3QgKmV4Yyk7CisgICAgICBzcHhfd29yZDE2X3QgKmlubm92X3NhdmU9TlVMTDsKKyAgICAgIHNweF93b3JkMTZfdCAqc3A7CisgICAgICBzcHhfd29yZDE2X3QgZmlsdGVyX3JhdGlvOworICAgICAgc3B4X3dvcmQxNl90IGVsPTA7CisgICAgICBpbnQgb2Zmc2V0OworICAgICAgc3B4X3dvcmQzMl90IHJsPTAscmg9MDsKKyAgICAgIAorICAgICAgb2Zmc2V0ID0gc3QtPnN1YmZyYW1lU2l6ZSpzdWI7CisgICAgICBzcD1vdXQrc3QtPmZyYW1lX3NpemUrb2Zmc2V0OworICAgICAgQUxMT0MoZXhjLCBzdC0+c3ViZnJhbWVTaXplLCBzcHhfd29yZDMyX3QpOworICAgICAgLyogUG9pbnRlciBmb3Igc2F2aW5nIGlubm92YXRpb24gKi8KKyAgICAgIGlmIChzdC0+aW5ub3Zfc2F2ZSkKKyAgICAgIHsKKyAgICAgICAgIGlubm92X3NhdmUgPSBzdC0+aW5ub3Zfc2F2ZSsyKm9mZnNldDsKKyAgICAgICAgIGZvciAoaT0wO2k8MipzdC0+c3ViZnJhbWVTaXplO2krKykKKyAgICAgICAgICAgIGlubm92X3NhdmVbaV09MDsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLyogTFNQIGludGVycG9sYXRpb24gKi8KKyAgICAgIGxzcF9pbnRlcnBvbGF0ZShzdC0+b2xkX3Fsc3AsIHFsc3AsIGludGVycF9xbHNwLCBzdC0+bHBjU2l6ZSwgc3ViLCBzdC0+bmJTdWJmcmFtZXMpOworCisgICAgICBsc3BfZW5mb3JjZV9tYXJnaW4oaW50ZXJwX3Fsc3AsIHN0LT5scGNTaXplLCBMU1BfTUFSR0lOKTsKKworICAgICAgLyogTFNQIHRvIExQQyAqLworICAgICAgbHNwX3RvX2xwYyhpbnRlcnBfcWxzcCwgYWssIHN0LT5scGNTaXplLCBzdGFjayk7CisKKyAgICAgIC8qIENhbGN1bGF0ZSByZXBvbnNlIHJhdGlvIGJldHdlZW4gdGhlIGxvdyBhbmQgaGlnaCBmaWx0ZXIgaW4gdGhlIG1pZGRsZQorICAgICAgICAgb2YgdGhlIGJhbmQgKDQwMDAgSHopICovCisgICAgICAKKyAgICAgICAgIHN0LT5waV9nYWluW3N1Yl09TFBDX1NDQUxJTkc7CisgICAgICAgICByaCA9IExQQ19TQ0FMSU5HOworICAgICAgICAgZm9yIChpPTA7aTxzdC0+bHBjU2l6ZTtpKz0yKQorICAgICAgICAgeworICAgICAgICAgICAgcmggKz0gYWtbaSsxXSAtIGFrW2ldOworICAgICAgICAgICAgc3QtPnBpX2dhaW5bc3ViXSArPSBha1tpXSArIGFrW2krMV07CisgICAgICAgICB9CisKKyAgICAgICAgIHJsID0gbG93X3BpX2dhaW5bc3ViXTsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgICAgICAgZmlsdGVyX3JhdGlvPUVYVFJBQ1QxNihTQVRVUkFURShQRElWMzIoU0hMMzIoQUREMzIocmwsODIpLDcpLEFERDMyKDgyLHJoKSksMzI3NjcpKTsKKyNlbHNlCisgICAgICAgICBmaWx0ZXJfcmF0aW89KHJsKy4wMSkvKHJoKy4wMSk7CisjZW5kaWYKKyAgICAgIAorICAgICAgZm9yIChpPTA7aTxzdC0+c3ViZnJhbWVTaXplO2krKykKKyAgICAgICAgIGV4Y1tpXT0wOworICAgICAgaWYgKCFTVUJNT0RFKGlubm92YXRpb25fdW5xdWFudCkpCisgICAgICB7CisgICAgICAgICBzcHhfd29yZDMyX3QgZzsKKyAgICAgICAgIGludCBxdWFudDsKKworICAgICAgICAgcXVhbnQgPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCA1KTsKKyAgICAgICAgIGc9IHNweF9leHAoTVVMVDE2XzE2KFFDT05TVDE2KC4xMjVmLDExKSwocXVhbnQtMTApKSk7CisgICAgICAgICAKKyAgICAgICAgIGcgPSBQRElWMzIoZywgZmlsdGVyX3JhdGlvKTsKKyAgICAgICAgIAorICAgICAgICAgZm9yIChpPTA7aTxzdC0+c3ViZnJhbWVTaXplO2krPTIpCisgICAgICAgICB7CisgICAgICAgICAgICBleGNbaV09U0hMMzIoTVVMVDE2XzMyX1AxNShNVUxUMTZfMTZfUTE1KG1vZGUtPmZvbGRpbmdfZ2Fpbixsb3dfaW5ub3ZfYWxpYXNbb2Zmc2V0K2ldKSxTSEwzMihnLDYpKSxTSUdfU0hJRlQpOworICAgICAgICAgICAgZXhjW2krMV09TkVHMzIoU0hMMzIoTVVMVDE2XzMyX1AxNShNVUxUMTZfMTZfUTE1KG1vZGUtPmZvbGRpbmdfZ2Fpbixsb3dfaW5ub3ZfYWxpYXNbb2Zmc2V0K2krMV0pLFNITDMyKGcsNikpLFNJR19TSElGVCkpOworICAgICAgICAgfQorICAgICAgICAgCisgICAgICB9IGVsc2UgeworICAgICAgICAgc3B4X3dvcmQxNl90IGdjOworICAgICAgICAgc3B4X3dvcmQzMl90IHNjYWxlOworICAgICAgICAgaW50IHFnYyA9IHNwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKGJpdHMsIDQpOworICAgICAgICAgCisgICAgICAgICBlbCA9IGxvd19leGNfcm1zW3N1Yl07CisgICAgICAgICBnYyA9IE1VTFQxNl8xNl9RMTUoUUNPTlNUMTYoMC44NzM2MCwxNSksZ2NfcXVhbnRfYm91bmRbcWdjXSk7CisKKyAgICAgICAgIGlmIChzdC0+c3ViZnJhbWVTaXplPT04MCkKKyAgICAgICAgICAgIGdjID0gTVVMVDE2XzE2X1AxNChRQ09OU1QxNigxLjQxNDJmLDE0KSxnYyk7CisKKyAgICAgICAgIHNjYWxlID0gU0hMMzIoUERJVjMyKFNITDMyKE1VTFQxNl8xNihnYywgZWwpLDMpLCBmaWx0ZXJfcmF0aW8pLFNJR19TSElGVC0zKTsKKyAgICAgICAgIFNVQk1PREUoaW5ub3ZhdGlvbl91bnF1YW50KShleGMsIFNVQk1PREUoaW5ub3ZhdGlvbl9wYXJhbXMpLCBzdC0+c3ViZnJhbWVTaXplLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzLCBzdGFjaywgJnN0LT5zZWVkKTsKKworICAgICAgICAgc2lnbmFsX211bChleGMsZXhjLHNjYWxlLHN0LT5zdWJmcmFtZVNpemUpOworCisgICAgICAgICBpZiAoU1VCTU9ERShkb3VibGVfY29kZWJvb2spKSB7CisgICAgICAgICAgICBjaGFyICp0bXBfc3RhY2s9c3RhY2s7CisgICAgICAgICAgICBWQVJERUNMKHNweF9zaWdfdCAqaW5ub3YyKTsKKyAgICAgICAgICAgIEFMTE9DKGlubm92Miwgc3QtPnN1YmZyYW1lU2l6ZSwgc3B4X3NpZ190KTsKKyAgICAgICAgICAgIGZvciAoaT0wO2k8c3QtPnN1YmZyYW1lU2l6ZTtpKyspCisgICAgICAgICAgICAgICBpbm5vdjJbaV09MDsKKyAgICAgICAgICAgIFNVQk1PREUoaW5ub3ZhdGlvbl91bnF1YW50KShpbm5vdjIsIFNVQk1PREUoaW5ub3ZhdGlvbl9wYXJhbXMpLCBzdC0+c3ViZnJhbWVTaXplLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzLCBzdGFjaywgJnN0LT5zZWVkKTsKKyAgICAgICAgICAgIHNpZ25hbF9tdWwoaW5ub3YyLCBpbm5vdjIsIE1VTFQxNl8zMl9QMTUoUUNPTlNUMTYoMC40ZiwxNSksc2NhbGUpLCBzdC0+c3ViZnJhbWVTaXplKTsKKyAgICAgICAgICAgIGZvciAoaT0wO2k8c3QtPnN1YmZyYW1lU2l6ZTtpKyspCisgICAgICAgICAgICAgICBleGNbaV0gPSBBREQzMihleGNbaV0saW5ub3YyW2ldKTsKKyAgICAgICAgICAgIHN0YWNrID0gdG1wX3N0YWNrOworICAgICAgICAgfQorCisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChzdC0+aW5ub3Zfc2F2ZSkKKyAgICAgIHsKKyAgICAgICAgIGZvciAoaT0wO2k8c3QtPnN1YmZyYW1lU2l6ZTtpKyspCisgICAgICAgICAgICBpbm5vdl9zYXZlWzIqaV09RVhUUkFDVDE2KFBTSFIzMihleGNbaV0sU0lHX1NISUZUKSk7CisgICAgICB9CisgICAgICAKKyAgICAgIGZvciAoaT0wO2k8c3QtPnN1YmZyYW1lU2l6ZTtpKyspCisgICAgICAgICBzcFtpXT1zdC0+ZXhjQnVmW2ldOworICAgICAgaWlyX21lbTE2KHNwLCBzdC0+aW50ZXJwX3FscGMsIHNwLCBzdC0+c3ViZnJhbWVTaXplLCBzdC0+bHBjU2l6ZSwgCisgICAgICAgICAgICAgICBzdC0+bWVtX3NwLCBzdGFjayk7CisgICAgICBmb3IgKGk9MDtpPHN0LT5zdWJmcmFtZVNpemU7aSsrKQorICAgICAgICAgc3QtPmV4Y0J1ZltpXT1FWFRSQUNUMTYoUFNIUjMyKGV4Y1tpXSxTSUdfU0hJRlQpKTsKKyAgICAgIGZvciAoaT0wO2k8c3QtPmxwY1NpemU7aSsrKQorICAgICAgICAgc3QtPmludGVycF9xbHBjW2ldID0gYWtbaV07CisgICAgICBzdC0+ZXhjX3Jtc1tzdWJdID0gY29tcHV0ZV9ybXMxNihzdC0+ZXhjQnVmLCBzdC0+c3ViZnJhbWVTaXplKTsKKyAgICAgIGV4Y19lbmVyX3N1bSA9IEFERDMyKGV4Y19lbmVyX3N1bSwgRElWMzIoTVVMVDE2XzE2KHN0LT5leGNfcm1zW3N1Yl0sc3QtPmV4Y19ybXNbc3ViXSksIHN0LT5uYlN1YmZyYW1lcykpOworICAgfQorICAgc3QtPmxhc3RfZW5lciA9IHNweF9zcXJ0KGV4Y19lbmVyX3N1bSk7CisgICAKKyAgIHFtZl9zeW50aChvdXQsIG91dCtzdC0+ZnJhbWVfc2l6ZSwgaDAsIG91dCwgc3QtPmZ1bGxfZnJhbWVfc2l6ZSwgUU1GX09SREVSLCBzdC0+ZzBfbWVtLCBzdC0+ZzFfbWVtLCBzdGFjayk7CisgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgIHN0LT5vbGRfcWxzcFtpXSA9IHFsc3BbaV07CisKKyAgIHN0LT5maXJzdD0wOworCisgICByZXR1cm4gMDsKK30KKworCitpbnQgc2JfZW5jb2Rlcl9jdGwodm9pZCAqc3RhdGUsIGludCByZXF1ZXN0LCB2b2lkICpwdHIpCit7CisgICBTQkVuY1N0YXRlICpzdDsKKyAgIHN0PShTQkVuY1N0YXRlKilzdGF0ZTsKKyAgIHN3aXRjaChyZXF1ZXN0KQorICAgeworICAgY2FzZSBTUEVFWF9HRVRfRlJBTUVfU0laRToKKyAgICAgICgqKHNweF9pbnQzMl90KilwdHIpID0gc3QtPmZ1bGxfZnJhbWVfc2l6ZTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfSElHSF9NT0RFOgorICAgICAgc3QtPnN1Ym1vZGVTZWxlY3QgPSBzdC0+c3VibW9kZUlEID0gKCooc3B4X2ludDMyX3QqKXB0cik7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfU0VUX0xPV19NT0RFOgorICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfU0VUX0xPV19NT0RFLCBwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1NFVF9EVFg6CisgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9TRVRfRFRYLCBwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9EVFg6CisgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9HRVRfRFRYLCBwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9MT1dfTU9ERToKKyAgICAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LT5zdF9sb3csIFNQRUVYX0dFVF9MT1dfTU9ERSwgcHRyKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfTU9ERToKKyAgICAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LCBTUEVFWF9TRVRfUVVBTElUWSwgcHRyKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfVkJSOgorICAgICAgc3QtPnZicl9lbmFibGVkID0gKCooc3B4X2ludDMyX3QqKXB0cik7CisgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9TRVRfVkJSLCBwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9WQlI6CisgICAgICAoKihzcHhfaW50MzJfdCopcHRyKSA9IHN0LT52YnJfZW5hYmxlZDsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfVkFEOgorICAgICAgc3QtPnZhZF9lbmFibGVkID0gKCooc3B4X2ludDMyX3QqKXB0cik7CisgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9TRVRfVkFELCBwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9WQUQ6CisgICAgICAoKihzcHhfaW50MzJfdCopcHRyKSA9IHN0LT52YWRfZW5hYmxlZDsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfVkJSX1FVQUxJVFk6CisgICAgICB7CisgICAgICAgICBzcHhfaW50MzJfdCBxOworICAgICAgICAgZmxvYXQgcXVhbCA9ICgqKGZsb2F0KilwdHIpKy42OworICAgICAgICAgc3QtPnZicl9xdWFsaXR5ID0gKCooZmxvYXQqKXB0cik7CisgICAgICAgICBpZiAocXVhbD4xMCkKKyAgICAgICAgICAgIHF1YWw9MTA7CisgICAgICAgICBxPShpbnQpZmxvb3IoLjUrKihmbG9hdCopcHRyKTsKKyAgICAgICAgIGlmIChxPjEwKQorICAgICAgICAgICAgcT0xMDsKKyAgICAgICAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LT5zdF9sb3csIFNQRUVYX1NFVF9WQlJfUVVBTElUWSwgJnF1YWwpOworICAgICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3RhdGUsIFNQRUVYX1NFVF9RVUFMSVRZLCAmcSk7CisgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgIGNhc2UgU1BFRVhfR0VUX1ZCUl9RVUFMSVRZOgorICAgICAgKCooZmxvYXQqKXB0cikgPSBzdC0+dmJyX3F1YWxpdHk7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfU0VUX0FCUjoKKyAgICAgIHN0LT5hYnJfZW5hYmxlZCA9ICgqKHNweF9pbnQzMl90KilwdHIpOworICAgICAgc3QtPnZicl9lbmFibGVkID0gc3QtPmFicl9lbmFibGVkIT0wOworICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfU0VUX1ZCUiwgJnN0LT52YnJfZW5hYmxlZCk7CisgICAgICBpZiAoc3QtPnZicl9lbmFibGVkKSAKKyAgICAgIHsKKyAgICAgICAgIHNweF9pbnQzMl90IGk9MTAsIHJhdGUsIHRhcmdldDsKKyAgICAgICAgIGZsb2F0IHZicl9xdWFsOworICAgICAgICAgdGFyZ2V0ID0gKCooc3B4X2ludDMyX3QqKXB0cik7CisgICAgICAgICB3aGlsZSAoaT49MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LCBTUEVFWF9TRVRfUVVBTElUWSwgJmkpOworICAgICAgICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX0dFVF9CSVRSQVRFLCAmcmF0ZSk7CisgICAgICAgICAgICBpZiAocmF0ZSA8PSB0YXJnZXQpCisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGktLTsKKyAgICAgICAgIH0KKyAgICAgICAgIHZicl9xdWFsPWk7CisgICAgICAgICBpZiAodmJyX3F1YWw8MCkKKyAgICAgICAgICAgIHZicl9xdWFsPTA7CisgICAgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdCwgU1BFRVhfU0VUX1ZCUl9RVUFMSVRZLCAmdmJyX3F1YWwpOworICAgICAgICAgc3QtPmFicl9jb3VudD0wOworICAgICAgICAgc3QtPmFicl9kcmlmdD0wOworICAgICAgICAgc3QtPmFicl9kcmlmdDI9MDsKKyAgICAgIH0KKyAgICAgIAorICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9BQlI6CisgICAgICAoKihzcHhfaW50MzJfdCopcHRyKSA9IHN0LT5hYnJfZW5hYmxlZDsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfUVVBTElUWToKKyAgICAgIHsKKyAgICAgICAgIHNweF9pbnQzMl90IG5iX3F1YWw7CisgICAgICAgICBpbnQgcXVhbGl0eSA9ICgqKHNweF9pbnQzMl90KilwdHIpOworICAgICAgICAgaWYgKHF1YWxpdHkgPCAwKQorICAgICAgICAgICAgcXVhbGl0eSA9IDA7CisgICAgICAgICBpZiAocXVhbGl0eSA+IDEwKQorICAgICAgICAgICAgcXVhbGl0eSA9IDEwOworICAgICAgICAgc3QtPnN1Ym1vZGVTZWxlY3QgPSBzdC0+c3VibW9kZUlEID0gKChjb25zdCBTcGVleFNCTW9kZSopKHN0LT5tb2RlLT5tb2RlKSktPnF1YWxpdHlfbWFwW3F1YWxpdHldOworICAgICAgICAgbmJfcXVhbCA9ICgoY29uc3QgU3BlZXhTQk1vZGUqKShzdC0+bW9kZS0+bW9kZSkpLT5sb3dfcXVhbGl0eV9tYXBbcXVhbGl0eV07CisgICAgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9TRVRfTU9ERSwgJm5iX3F1YWwpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1NFVF9DT01QTEVYSVRZOgorICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfU0VUX0NPTVBMRVhJVFksIHB0cik7CisgICAgICBzdC0+Y29tcGxleGl0eSA9ICgqKHNweF9pbnQzMl90KilwdHIpOworICAgICAgaWYgKHN0LT5jb21wbGV4aXR5PDEpCisgICAgICAgICBzdC0+Y29tcGxleGl0eT0xOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9DT01QTEVYSVRZOgorICAgICAgKCooc3B4X2ludDMyX3QqKXB0cikgPSBzdC0+Y29tcGxleGl0eTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfQklUUkFURToKKyAgICAgIHsKKyAgICAgICAgIHNweF9pbnQzMl90IGk9MTA7CisgICAgICAgICBzcHhfaW50MzJfdCByYXRlLCB0YXJnZXQ7CisgICAgICAgICB0YXJnZXQgPSAoKihzcHhfaW50MzJfdCopcHRyKTsKKyAgICAgICAgIHdoaWxlIChpPj0wKQorICAgICAgICAgeworICAgICAgICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX1NFVF9RVUFMSVRZLCAmaSk7CisgICAgICAgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdCwgU1BFRVhfR0VUX0JJVFJBVEUsICZyYXRlKTsKKyAgICAgICAgICAgIGlmIChyYXRlIDw9IHRhcmdldCkKKyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaS0tOworICAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9CSVRSQVRFOgorICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QtPnN0X2xvdywgcmVxdWVzdCwgcHRyKTsKKyAgICAgIC8qZnByaW50ZiAoc3RkZXJyLCAiYmVmb3JlOiAlZFxuIiwgKCooaW50KilwdHIpKTsqLworICAgICAgaWYgKHN0LT5zdWJtb2Rlc1tzdC0+c3VibW9kZUlEXSkKKyAgICAgICAgICgqKHNweF9pbnQzMl90KilwdHIpICs9IHN0LT5zYW1wbGluZ19yYXRlKlNVQk1PREUoYml0c19wZXJfZnJhbWUpL3N0LT5mdWxsX2ZyYW1lX3NpemU7CisgICAgICBlbHNlCisgICAgICAgICAoKihzcHhfaW50MzJfdCopcHRyKSArPSBzdC0+c2FtcGxpbmdfcmF0ZSooU0JfU1VCTU9ERV9CSVRTKzEpL3N0LT5mdWxsX2ZyYW1lX3NpemU7CisgICAgICAvKmZwcmludGYgKHN0ZGVyciwgImFmdGVyOiAlZFxuIiwgKCooaW50KilwdHIpKTsqLworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1NFVF9TQU1QTElOR19SQVRFOgorICAgICAgeworICAgICAgICAgc3B4X2ludDMyX3QgdG1wPSgqKHNweF9pbnQzMl90KilwdHIpOworICAgICAgICAgc3QtPnNhbXBsaW5nX3JhdGUgPSB0bXA7CisgICAgICAgICB0bXA+Pj0xOworICAgICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfU0VUX1NBTVBMSU5HX1JBVEUsICZ0bXApOworICAgICAgfQorICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9TQU1QTElOR19SQVRFOgorICAgICAgKCooc3B4X2ludDMyX3QqKXB0cik9c3QtPnNhbXBsaW5nX3JhdGU7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfUkVTRVRfU1RBVEU6CisgICAgICB7CisgICAgICAgICBpbnQgaTsKKyAgICAgICAgIHN0LT5maXJzdCA9IDE7CisgICAgICAgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgICAgICAgIHN0LT5vbGRfbHNwW2ldPShNX1BJKigoZmxvYXQpKGkrMSkpKS8oc3QtPmxwY1NpemUrMSk7CisgICAgICAgICBmb3IgKGk9MDtpPHN0LT5scGNTaXplO2krKykKKyAgICAgICAgICAgIHN0LT5tZW1fc3dbaV09c3QtPm1lbV9zcFtpXT1zdC0+bWVtX3NwMltpXT0wOworICAgICAgICAgZm9yIChpPTA7aTxRTUZfT1JERVI7aSsrKQorICAgICAgICAgICAgc3QtPmgwX21lbVtpXT1zdC0+aDFfbWVtW2ldPTA7CisgICAgICB9CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfU0VUX1NVQk1PREVfRU5DT0RJTkc6CisgICAgICBzdC0+ZW5jb2RlX3N1Ym1vZGUgPSAoKihzcHhfaW50MzJfdCopcHRyKTsKKyAgICAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LT5zdF9sb3csIFNQRUVYX1NFVF9TVUJNT0RFX0VOQ09ESU5HLCBwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9TVUJNT0RFX0VOQ09ESU5HOgorICAgICAgKCooc3B4X2ludDMyX3QqKXB0cikgPSBzdC0+ZW5jb2RlX3N1Ym1vZGU7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfR0VUX0xPT0tBSEVBRDoKKyAgICAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LT5zdF9sb3csIFNQRUVYX0dFVF9MT09LQUhFQUQsIHB0cik7CisgICAgICAoKihzcHhfaW50MzJfdCopcHRyKSA9IDIqKCooc3B4X2ludDMyX3QqKXB0cikgKyBRTUZfT1JERVIgLSAxOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1NFVF9QTENfVFVOSU5HOgorICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfU0VUX1BMQ19UVU5JTkcsIHB0cik7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfR0VUX1BMQ19UVU5JTkc6CisgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9HRVRfUExDX1RVTklORywgcHRyKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfVkJSX01BWF9CSVRSQVRFOgorICAgICAgeworICAgICAgICAgc3QtPnZicl9tYXggPSAoKihzcHhfaW50MzJfdCopcHRyKTsKKyAgICAgICAgIGlmIChTUEVFWF9TRVRfVkJSX01BWF9CSVRSQVRFPDEpCisgICAgICAgICB7CisgICAgICAgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9TRVRfVkJSX01BWF9CSVRSQVRFLCAmc3QtPnZicl9tYXgpOworICAgICAgICAgICAgc3QtPnZicl9tYXhfaGlnaCA9IDE3NjAwOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNweF9pbnQzMl90IGxvd19yYXRlOworICAgICAgICAgICAgaWYgKHN0LT52YnJfbWF4ID49IDQyMjAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgc3QtPnZicl9tYXhfaGlnaCA9IDE3NjAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChzdC0+dmJyX21heCA+PSAyNzgwMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHN0LT52YnJfbWF4X2hpZ2ggPSA5NjAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChzdC0+dmJyX21heCA+IDIwNjAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgc3QtPnZicl9tYXhfaGlnaCA9IDU2MDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgc3QtPnZicl9tYXhfaGlnaCA9IDE4MDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3QtPnN1YmZyYW1lU2l6ZT09ODApCisgICAgICAgICAgICAgICBzdC0+dmJyX21heF9oaWdoID0gMTgwMDsKKyAgICAgICAgICAgIGxvd19yYXRlID0gc3QtPnZicl9tYXggLSBzdC0+dmJyX21heF9oaWdoOworICAgICAgICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfU0VUX1ZCUl9NQVhfQklUUkFURSwgJmxvd19yYXRlKTsKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9HRVRfVkJSX01BWF9CSVRSQVRFOgorICAgICAgKCooc3B4X2ludDMyX3QqKXB0cikgPSBzdC0+dmJyX21heDsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfSElHSFBBU1M6CisgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9TRVRfSElHSFBBU1MsIHB0cik7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfR0VUX0hJR0hQQVNTOgorICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfR0VUX0hJR0hQQVNTLCBwdHIpOworICAgICAgYnJlYWs7CisKKworICAgLyogVGhpcyBpcyBhbGwgaW50ZXJuYWwgc3R1ZmYgcGFzdCB0aGlzIHBvaW50ICovCisgICBjYXNlIFNQRUVYX0dFVF9QSV9HQUlOOgorICAgICAgeworICAgICAgICAgaW50IGk7CisgICAgICAgICBzcHhfd29yZDMyX3QgKmcgPSAoc3B4X3dvcmQzMl90KilwdHI7CisgICAgICAgICBmb3IgKGk9MDtpPHN0LT5uYlN1YmZyYW1lcztpKyspCisgICAgICAgICAgICBnW2ldPXN0LT5waV9nYWluW2ldOworICAgICAgfQorICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9FWEM6CisgICAgICB7CisgICAgICAgICBpbnQgaTsKKyAgICAgICAgIGZvciAoaT0wO2k8c3QtPm5iU3ViZnJhbWVzO2krKykKKyAgICAgICAgICAgICgoc3B4X3dvcmQxNl90KilwdHIpW2ldID0gc3QtPmV4Y19ybXNbaV07CisgICAgICB9CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfR0VUX1JFTEFUSVZFX1FVQUxJVFk6CisgICAgICAoKihmbG9hdCopcHRyKT1zdC0+cmVsYXRpdmVfcXVhbGl0eTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfSU5OT1ZBVElPTl9TQVZFOgorICAgICAgc3QtPmlubm92X3Jtc19zYXZlID0gKHNweF93b3JkMTZfdCopcHRyOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1NFVF9XSURFQkFORDoKKyAgICAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LT5zdF9sb3csIFNQRUVYX1NFVF9XSURFQkFORCwgcHRyKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9HRVRfU1RBQ0s6CisgICAgICAqKChjaGFyKiopcHRyKSA9IHN0LT5zdGFjazsKKyAgICAgIGJyZWFrOworICAgZGVmYXVsdDoKKyAgICAgIHNwZWV4X3dhcm5pbmdfaW50KCJVbmtub3duIG5iX2N0bCByZXF1ZXN0OiAiLCByZXF1ZXN0KTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKyAgIHJldHVybiAwOworfQorCitpbnQgc2JfZGVjb2Rlcl9jdGwodm9pZCAqc3RhdGUsIGludCByZXF1ZXN0LCB2b2lkICpwdHIpCit7CisgICBTQkRlY1N0YXRlICpzdDsKKyAgIHN0PShTQkRlY1N0YXRlKilzdGF0ZTsKKyAgIHN3aXRjaChyZXF1ZXN0KQorICAgeworICAgY2FzZSBTUEVFWF9TRVRfSElHSF9NT0RFOgorICAgICAgc3QtPnN1Ym1vZGVJRCA9ICgqKHNweF9pbnQzMl90KilwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1NFVF9MT1dfTU9ERToKKyAgICAgIHNwZWV4X2RlY29kZXJfY3RsKHN0LT5zdF9sb3csIFNQRUVYX1NFVF9MT1dfTU9ERSwgcHRyKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9HRVRfTE9XX01PREU6CisgICAgICBzcGVleF9kZWNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9HRVRfTE9XX01PREUsIHB0cik7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfR0VUX0ZSQU1FX1NJWkU6CisgICAgICAoKihzcHhfaW50MzJfdCopcHRyKSA9IHN0LT5mdWxsX2ZyYW1lX3NpemU7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfU0VUX0VOSDoKKyAgICAgIHNwZWV4X2RlY29kZXJfY3RsKHN0LT5zdF9sb3csIHJlcXVlc3QsIHB0cik7CisgICAgICBzdC0+bHBjX2VuaF9lbmFibGVkID0gKigoc3B4X2ludDMyX3QqKXB0cik7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfR0VUX0VOSDoKKyAgICAgICooKHNweF9pbnQzMl90KilwdHIpID0gc3QtPmxwY19lbmhfZW5hYmxlZDsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfTU9ERToKKyAgIGNhc2UgU1BFRVhfU0VUX1FVQUxJVFk6CisgICAgICB7CisgICAgICAgICBzcHhfaW50MzJfdCBuYl9xdWFsOworICAgICAgICAgaW50IHF1YWxpdHkgPSAoKihzcHhfaW50MzJfdCopcHRyKTsKKyAgICAgICAgIGlmIChxdWFsaXR5IDwgMCkKKyAgICAgICAgICAgIHF1YWxpdHkgPSAwOworICAgICAgICAgaWYgKHF1YWxpdHkgPiAxMCkKKyAgICAgICAgICAgIHF1YWxpdHkgPSAxMDsKKyAgICAgICAgIHN0LT5zdWJtb2RlSUQgPSAoKGNvbnN0IFNwZWV4U0JNb2RlKikoc3QtPm1vZGUtPm1vZGUpKS0+cXVhbGl0eV9tYXBbcXVhbGl0eV07CisgICAgICAgICBuYl9xdWFsID0gKChjb25zdCBTcGVleFNCTW9kZSopKHN0LT5tb2RlLT5tb2RlKSktPmxvd19xdWFsaXR5X21hcFtxdWFsaXR5XTsKKyAgICAgICAgIHNwZWV4X2RlY29kZXJfY3RsKHN0LT5zdF9sb3csIFNQRUVYX1NFVF9NT0RFLCAmbmJfcXVhbCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfR0VUX0JJVFJBVEU6CisgICAgICBzcGVleF9kZWNvZGVyX2N0bChzdC0+c3RfbG93LCByZXF1ZXN0LCBwdHIpOworICAgICAgaWYgKHN0LT5zdWJtb2Rlc1tzdC0+c3VibW9kZUlEXSkKKyAgICAgICAgICgqKHNweF9pbnQzMl90KilwdHIpICs9IHN0LT5zYW1wbGluZ19yYXRlKlNVQk1PREUoYml0c19wZXJfZnJhbWUpL3N0LT5mdWxsX2ZyYW1lX3NpemU7CisgICAgICBlbHNlCisgICAgICAgICAoKihzcHhfaW50MzJfdCopcHRyKSArPSBzdC0+c2FtcGxpbmdfcmF0ZSooU0JfU1VCTU9ERV9CSVRTKzEpL3N0LT5mdWxsX2ZyYW1lX3NpemU7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfU0VUX1NBTVBMSU5HX1JBVEU6CisgICAgICB7CisgICAgICAgICBzcHhfaW50MzJfdCB0bXA9KCooc3B4X2ludDMyX3QqKXB0cik7CisgICAgICAgICBzdC0+c2FtcGxpbmdfcmF0ZSA9IHRtcDsKKyAgICAgICAgIHRtcD4+PTE7CisgICAgICAgICBzcGVleF9kZWNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9TRVRfU0FNUExJTkdfUkFURSwgJnRtcCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfR0VUX1NBTVBMSU5HX1JBVEU6CisgICAgICAoKihzcHhfaW50MzJfdCopcHRyKT1zdC0+c2FtcGxpbmdfcmF0ZTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfSEFORExFUjoKKyAgICAgIHNwZWV4X2RlY29kZXJfY3RsKHN0LT5zdF9sb3csIFNQRUVYX1NFVF9IQU5ETEVSLCBwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1NFVF9VU0VSX0hBTkRMRVI6CisgICAgICBzcGVleF9kZWNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9TRVRfVVNFUl9IQU5ETEVSLCBwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1JFU0VUX1NUQVRFOgorICAgICAgeworICAgICAgICAgaW50IGk7CisgICAgICAgICBmb3IgKGk9MDtpPDIqc3QtPmxwY1NpemU7aSsrKQorICAgICAgICAgICAgc3QtPm1lbV9zcFtpXT0wOworICAgICAgICAgZm9yIChpPTA7aTxRTUZfT1JERVI7aSsrKQorICAgICAgICAgICAgc3QtPmcwX21lbVtpXT1zdC0+ZzFfbWVtW2ldPTA7CisgICAgICAgICBzdC0+bGFzdF9lbmVyPTA7CisgICAgICB9CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfU0VUX1NVQk1PREVfRU5DT0RJTkc6CisgICAgICBzdC0+ZW5jb2RlX3N1Ym1vZGUgPSAoKihzcHhfaW50MzJfdCopcHRyKTsKKyAgICAgIHNwZWV4X2RlY29kZXJfY3RsKHN0LT5zdF9sb3csIFNQRUVYX1NFVF9TVUJNT0RFX0VOQ09ESU5HLCBwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9TVUJNT0RFX0VOQ09ESU5HOgorICAgICAgKCooc3B4X2ludDMyX3QqKXB0cikgPSBzdC0+ZW5jb2RlX3N1Ym1vZGU7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfR0VUX0xPT0tBSEVBRDoKKyAgICAgIHNwZWV4X2RlY29kZXJfY3RsKHN0LT5zdF9sb3csIFNQRUVYX0dFVF9MT09LQUhFQUQsIHB0cik7CisgICAgICAoKihzcHhfaW50MzJfdCopcHRyKSA9IDIqKCooc3B4X2ludDMyX3QqKXB0cik7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfU0VUX0hJR0hQQVNTOgorICAgICAgc3BlZXhfZGVjb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfU0VUX0hJR0hQQVNTLCBwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9ISUdIUEFTUzoKKyAgICAgIHNwZWV4X2RlY29kZXJfY3RsKHN0LT5zdF9sb3csIFNQRUVYX0dFVF9ISUdIUEFTUywgcHRyKTsKKyAgICAgIGJyZWFrOworCisgICBjYXNlIFNQRUVYX0dFVF9QSV9HQUlOOgorICAgICAgeworICAgICAgICAgaW50IGk7CisgICAgICAgICBzcHhfd29yZDMyX3QgKmcgPSAoc3B4X3dvcmQzMl90KilwdHI7CisgICAgICAgICBmb3IgKGk9MDtpPHN0LT5uYlN1YmZyYW1lcztpKyspCisgICAgICAgICAgICBnW2ldPXN0LT5waV9nYWluW2ldOworICAgICAgfQorICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9FWEM6CisgICAgICB7CisgICAgICAgICBpbnQgaTsKKyAgICAgICAgIGZvciAoaT0wO2k8c3QtPm5iU3ViZnJhbWVzO2krKykKKyAgICAgICAgICAgICgoc3B4X3dvcmQxNl90KilwdHIpW2ldID0gc3QtPmV4Y19ybXNbaV07CisgICAgICB9CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfR0VUX0RUWF9TVEFUVVM6CisgICAgICBzcGVleF9kZWNvZGVyX2N0bChzdC0+c3RfbG93LCBTUEVFWF9HRVRfRFRYX1NUQVRVUywgcHRyKTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TRVRfSU5OT1ZBVElPTl9TQVZFOgorICAgICAgc3QtPmlubm92X3NhdmUgPSAoc3B4X3dvcmQxNl90KilwdHI7CisgICAgICBicmVhazsKKyAgIGNhc2UgU1BFRVhfU0VUX1dJREVCQU5EOgorICAgICAgc3BlZXhfZGVjb2Rlcl9jdGwoc3QtPnN0X2xvdywgU1BFRVhfU0VUX1dJREVCQU5ELCBwdHIpOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX0dFVF9TVEFDSzoKKyAgICAgICooKGNoYXIqKilwdHIpID0gc3QtPnN0YWNrOworICAgICAgYnJlYWs7CisgICBkZWZhdWx0OgorICAgICAgc3BlZXhfd2FybmluZ19pbnQoIlVua25vd24gbmJfY3RsIHJlcXVlc3Q6ICIsIHJlcXVlc3QpOworICAgICAgcmV0dXJuIC0xOworICAgfQorICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9zYl9jZWxwLmggYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9zYl9jZWxwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkYzNhZgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3NiX2NlbHAuaApAQCAtMCwwICsxLDE1NSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDYgSmVhbi1NYXJjIFZhbGluICovCisvKioKKyAgIEBmaWxlIHNiX2NlbHAuaAorICAgQGJyaWVmIFN1Yi1iYW5kIENFTFAgbW9kZSB1c2VkIGZvciB3aWRlYmFuZCBlbmNvZGluZworKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworKi8KKworI2lmbmRlZiBTQl9DRUxQX0gKKyNkZWZpbmUgU0JfQ0VMUF9ICisKKyNpbmNsdWRlICJtb2Rlcy5oIgorI2luY2x1ZGUgPHNwZWV4L3NwZWV4X2JpdHMuaD4KKyNpbmNsdWRlICJuYl9jZWxwLmgiCisKKy8qKlN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIGZ1bGwgc3RhdGUgb2YgdGhlIHN1Yi1iYW5kIGVuY29kZXIqLwordHlwZWRlZiBzdHJ1Y3QgU0JFbmNTdGF0ZSB7CisgICBjb25zdCBTcGVleE1vZGUgKm1vZGU7ICAgICAgICAgLyoqPCBQb2ludGVyIHRvIHRoZSBtb2RlIChjb250YWluaW5nIGZvciB2dGFibGUgaW5mbykgKi8KKyAgIHZvaWQgKnN0X2xvdzsgICAgICAgICAgICAgICAgICAvKio8IFN0YXRlIG9mIHRoZSBsb3ctYmFuZCAobmFycm93YmFuZCkgZW5jb2RlciAqLworICAgaW50ICAgIGZ1bGxfZnJhbWVfc2l6ZTsgICAgICAgIC8qKjwgTGVuZ3RoIG9mIGZ1bGwtYmFuZCBmcmFtZXMqLworICAgaW50ICAgIGZyYW1lX3NpemU7ICAgICAgICAgICAgIC8qKjwgTGVuZ3RoIG9mIGhpZ2gtYmFuZCBmcmFtZXMqLworICAgaW50ICAgIHN1YmZyYW1lU2l6ZTsgICAgICAgICAgIC8qKjwgTGVuZ3RoIG9mIGhpZ2gtYmFuZCBzdWItZnJhbWVzKi8KKyAgIGludCAgICBuYlN1YmZyYW1lczsgICAgICAgICAgICAvKio8IE51bWJlciBvZiBoaWdoLWJhbmQgc3ViLWZyYW1lcyovCisgICBpbnQgICAgd2luZG93U2l6ZTsgICAgICAgICAgICAgLyoqPCBMZW5ndGggb2YgaGlnaC1iYW5kIExQQyB3aW5kb3cqLworICAgaW50ICAgIGxwY1NpemU7ICAgICAgICAgICAgICAgIC8qKjwgT3JkZXIgb2YgaGlnaC1iYW5kIExQQyBhbmFseXNpcyAqLworICAgaW50ICAgIGJ1ZlNpemU7ICAgICAgICAgICAgICAgIC8qKjwgQnVmZmVyIHNpemUgKi8KKyAgIGludCAgICBmaXJzdDsgICAgICAgICAgICAgICAgICAvKio8IEZpcnN0IGZyYW1lPyAqLworICAgZmxvYXQgIGxhZ19mYWN0b3I7ICAgICAgICAgICAgIC8qKjwgTGFnLXdpbmRvd2luZyBjb250cm9sIHBhcmFtZXRlciAqLworICAgc3B4X3dvcmQxNl90ICBscGNfZmxvb3I7ICAgICAgIC8qKjwgQ29udHJvbHMgTFBDIGFuYWx5c2lzIG5vaXNlIGZsb29yICovCisgICBzcHhfd29yZDE2X3QgIGdhbW1hMTsgICAgICAgICAgLyoqPCBQZXJjZXB0dWFsIHdlaWdodGluZyBjb2VmIDEgKi8KKyAgIHNweF93b3JkMTZfdCAgZ2FtbWEyOyAgICAgICAgICAvKio8IFBlcmNlcHR1YWwgd2VpZ2h0aW5nIGNvZWYgMiAqLworCisgICBjaGFyICAqc3RhY2s7ICAgICAgICAgICAgICAgICAgLyoqPCBUZW1wb3JhcnkgYWxsb2NhdGlvbiBzdGFjayAqLworICAgc3B4X3dvcmQxNl90ICpoaWdoOyAgICAgICAgICAgICAgIC8qKjwgSGlnaC1iYW5kIHNpZ25hbCAoYnVmZmVyKSAqLworICAgc3B4X3dvcmQxNl90ICpoMF9tZW0sICpoMV9tZW07CisKKyAgIGNvbnN0IHNweF93b3JkMTZfdCAqd2luZG93OyAgICAvKio8IExQQyBhbmFseXNpcyB3aW5kb3cgKi8KKyAgIHNweF93b3JkMTZfdCAqbGFnV2luZG93OyAgICAgICAvKio8IEF1dG8tY29ycmVsYXRpb24gd2luZG93ICovCisgICBzcHhfbHNwX3QgKm9sZF9sc3A7ICAgICAgICAgICAgLyoqPCBMU1BzIG9mIHByZXZpb3VzIGZyYW1lICovCisgICBzcHhfbHNwX3QgKm9sZF9xbHNwOyAgICAgICAgICAgLyoqPCBRdWFudGl6ZWQgTFNQcyBvZiBwcmV2aW91cyBmcmFtZSAqLworICAgc3B4X2NvZWZfdCAqaW50ZXJwX3FscGM7ICAgICAgIC8qKjwgSW50ZXJwb2xhdGVkIHF1YW50aXplZCBMUENzIGZvciBjdXJyZW50IHN1Yi1mcmFtZSAqLworCisgICBzcHhfbWVtX3QgKm1lbV9zcDsgICAgICAgICAgICAgLyoqPCBTeW50aGVzaXMgc2lnbmFsIG1lbW9yeSAqLworICAgc3B4X21lbV90ICptZW1fc3AyOworICAgc3B4X21lbV90ICptZW1fc3c7ICAgICAgICAgICAgIC8qKjwgUGVyY2VwdHVhbCBzaWduYWwgbWVtb3J5ICovCisgICBzcHhfd29yZDMyX3QgKnBpX2dhaW47CisgICBzcHhfd29yZDE2X3QgKmV4Y19ybXM7CisgICBzcHhfd29yZDE2X3QgKmlubm92X3Jtc19zYXZlOyAgICAgICAgIC8qKjwgSWYgbm9uLU5VTEwsIGlubm92YXRpb24gaXMgY29waWVkIGhlcmUgKi8KKworICAgZmxvYXQgIHZicl9xdWFsaXR5OyAgICAgICAgICAgIC8qKjwgUXVhbGl0eSBzZXR0aW5nIGZvciBWQlIgZW5jb2RpbmcgKi8KKyAgIGludCAgICB2YnJfZW5hYmxlZDsgICAgICAgICAgICAvKio8IDEgZm9yIGVuYWJsaW5nIFZCUiwgMCBvdGhlcndpc2UgKi8KKyAgIHNweF9pbnQzMl90IHZicl9tYXg7ICAgICAgICAgICAvKio8IE1heCBiaXQtcmF0ZSBhbGxvd2VkIGluIFZCUiBtb2RlICh0b3RhbCkgKi8KKyAgIHNweF9pbnQzMl90IHZicl9tYXhfaGlnaDsgICAgICAvKio8IE1heCBiaXQtcmF0ZSBhbGxvd2VkIGluIFZCUiBtb2RlIGZvciB0aGUgaGlnaC1iYW5kICovCisgICBzcHhfaW50MzJfdCBhYnJfZW5hYmxlZDsgICAgICAgLyoqPCBBQlIgc2V0dGluZyAoaW4gYnBzKSwgMCBpZiBvZmYgKi8KKyAgIGZsb2F0ICBhYnJfZHJpZnQ7CisgICBmbG9hdCAgYWJyX2RyaWZ0MjsKKyAgIGZsb2F0ICBhYnJfY291bnQ7CisgICBpbnQgICAgdmFkX2VuYWJsZWQ7ICAgICAgICAgICAgLyoqPCAxIGZvciBlbmFibGluZyBWQUQsIDAgb3RoZXJ3aXNlICovCisgICBmbG9hdCAgcmVsYXRpdmVfcXVhbGl0eTsKKworICAgaW50ICAgIGVuY29kZV9zdWJtb2RlOworICAgY29uc3QgU3BlZXhTdWJtb2RlICogY29uc3QgKnN1Ym1vZGVzOworICAgaW50ICAgIHN1Ym1vZGVJRDsKKyAgIGludCAgICBzdWJtb2RlU2VsZWN0OworICAgaW50ICAgIGNvbXBsZXhpdHk7CisgICBzcHhfaW50MzJfdCBzYW1wbGluZ19yYXRlOworCit9IFNCRW5jU3RhdGU7CisKKworLyoqU3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgZnVsbCBzdGF0ZSBvZiB0aGUgc3ViLWJhbmQgZGVjb2RlciovCit0eXBlZGVmIHN0cnVjdCBTQkRlY1N0YXRlIHsKKyAgIGNvbnN0IFNwZWV4TW9kZSAqbW9kZTsgICAgICAgICAgICAvKio8IFBvaW50ZXIgdG8gdGhlIG1vZGUgKGNvbnRhaW5pbmcgZm9yIHZ0YWJsZSBpbmZvKSAqLworICAgdm9pZCAqc3RfbG93OyAgICAgICAgICAgICAgIC8qKjwgU3RhdGUgb2YgdGhlIGxvdy1iYW5kIChuYXJyb3diYW5kKSBlbmNvZGVyICovCisgICBpbnQgICAgZnVsbF9mcmFtZV9zaXplOworICAgaW50ICAgIGZyYW1lX3NpemU7CisgICBpbnQgICAgc3ViZnJhbWVTaXplOworICAgaW50ICAgIG5iU3ViZnJhbWVzOworICAgaW50ICAgIGxwY1NpemU7CisgICBpbnQgICAgZmlyc3Q7CisgICBzcHhfaW50MzJfdCBzYW1wbGluZ19yYXRlOworICAgaW50ICAgIGxwY19lbmhfZW5hYmxlZDsKKworICAgY2hhciAgKnN0YWNrOworICAgc3B4X3dvcmQzMl90ICpnMF9tZW0sICpnMV9tZW07CisKKyAgIHNweF93b3JkMTZfdCAqZXhjQnVmOworICAgc3B4X2xzcF90ICpvbGRfcWxzcDsKKyAgIHNweF9jb2VmX3QgKmludGVycF9xbHBjOworCisgICBzcHhfbWVtX3QgKm1lbV9zcDsKKyAgIHNweF93b3JkMzJfdCAqcGlfZ2FpbjsKKyAgIHNweF93b3JkMTZfdCAqZXhjX3JtczsKKyAgIHNweF93b3JkMTZfdCAqaW5ub3Zfc2F2ZTsgICAgICAvKiogSWYgbm9uLU5VTEwsIGlubm92YXRpb24gaXMgY29waWVkIGhlcmUgKi8KKyAgIAorICAgc3B4X3dvcmQxNl90IGxhc3RfZW5lcjsKKyAgIHNweF9pbnQzMl90IHNlZWQ7CisKKyAgIGludCAgICBlbmNvZGVfc3VibW9kZTsKKyAgIGNvbnN0IFNwZWV4U3VibW9kZSAqIGNvbnN0ICpzdWJtb2RlczsKKyAgIGludCAgICBzdWJtb2RlSUQ7Cit9IFNCRGVjU3RhdGU7CisKKworLyoqSW5pdGlhbGl6ZXMgZW5jb2RlciBzdGF0ZSovCit2b2lkICpzYl9lbmNvZGVyX2luaXQoY29uc3QgU3BlZXhNb2RlICptKTsKKworLyoqRGUtYWxsb2NhdGVzIGVuY29kZXIgc3RhdGUgcmVzb3VyY2VzKi8KK3ZvaWQgc2JfZW5jb2Rlcl9kZXN0cm95KHZvaWQgKnN0YXRlKTsKKworLyoqRW5jb2RlcyBvbmUgZnJhbWUqLworaW50IHNiX2VuY29kZSh2b2lkICpzdGF0ZSwgdm9pZCAqaW4sIFNwZWV4Qml0cyAqYml0cyk7CisKKworLyoqSW5pdGlhbGl6ZXMgZGVjb2RlciBzdGF0ZSovCit2b2lkICpzYl9kZWNvZGVyX2luaXQoY29uc3QgU3BlZXhNb2RlICptKTsKKworLyoqRGUtYWxsb2NhdGVzIGRlY29kZXIgc3RhdGUgcmVzb3VyY2VzKi8KK3ZvaWQgc2JfZGVjb2Rlcl9kZXN0cm95KHZvaWQgKnN0YXRlKTsKKworLyoqRGVjb2RlcyBvbmUgZnJhbWUqLworaW50IHNiX2RlY29kZSh2b2lkICpzdGF0ZSwgU3BlZXhCaXRzICpiaXRzLCB2b2lkICpvdXQpOworCitpbnQgc2JfZW5jb2Rlcl9jdGwodm9pZCAqc3RhdGUsIGludCByZXF1ZXN0LCB2b2lkICpwdHIpOworCitpbnQgc2JfZGVjb2Rlcl9jdGwodm9pZCAqc3RhdGUsIGludCByZXF1ZXN0LCB2b2lkICpwdHIpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3NtYWxsZnQuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3NtYWxsZnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjk1NDlkCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvc21hbGxmdC5jCkBAIC0wLDAgKzEsMTI2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRISVMgRklMRSBJUyBQQVJUIE9GIFRIRSBPZ2dWb3JiaXMgU09GVFdBUkUgQ09ERUMgU09VUkNFIENPREUuICAgKgorICogVVNFLCBESVNUUklCVVRJT04gQU5EIFJFUFJPRFVDVElPTiBPRiBUSElTIExJQlJBUlkgU09VUkNFIElTICAgICAqCisgKiBHT1ZFUk5FRCBCWSBBIEJTRC1TVFlMRSBTT1VSQ0UgTElDRU5TRSBJTkNMVURFRCBXSVRIIFRISVMgU09VUkNFICoKKyAqIElOICdDT1BZSU5HJy4gUExFQVNFIFJFQUQgVEhFU0UgVEVSTVMgQkVGT1JFIERJU1RSSUJVVElORy4gICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgT2dnVm9yYmlzIFNPVVJDRSBDT0RFIElTIChDKSBDT1BZUklHSFQgMTk5NC0yMDAxICAgICAgICAgICAgICoKKyAqIGJ5IHRoZSBYSVBIT1BIT1JVUyBDb21wYW55IGh0dHA6Ly93d3cueGlwaC5vcmcvICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIGZ1bmN0aW9uOiAqdW5ub3JtYWxpemVkKiBmZnQgdHJhbnNmb3JtCisgbGFzdCBtb2Q6ICRJZDogc21hbGxmdC5jLHYgMS4xOSAyMDAzLzEwLzA4IDA1OjEyOjM3IGptIEV4cCAkCisKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRkZUIGltcGxlbWVudGF0aW9uIGZyb20gT2dnU3F1aXNoLCBtaW51cyBjb3NpbmUgdHJhbnNmb3JtcywKKyAqIG1pbnVzIGFsbCBidXQgcmFkaXggMi80IGNhc2UuICBJbiBWb3JiaXMgd2Ugb25seSBuZWVkIHRoaXMKKyAqIGN1dC1kb3duIHZlcnNpb24uCisgKgorICogVG8gZG8gbW9yZSB0aGFuIGp1c3QgcG93ZXItb2YtdHdvIHNpemVkIHZlY3RvcnMsIHNlZSB0aGUgZnVsbAorICogdmVyc2lvbiBJIHdyb3RlIGZvciBOZXRMaWIuCisgKgorICogTm90ZSB0aGF0IHRoZSBwYWNraW5nIGlzIGEgbGl0dGxlIHN0cmFuZ2U7IHJhdGhlciB0aGFuIHRoZSBGRlQgci9pCisgKiBwYWNraW5nIGZvbGxvd2luZyBSXzAsIElfbiwgUl8xLCBJXzEsIFJfMiwgSV8yIC4uLiBSX24tMSwgSV9uLTEsCisgKiBpdCBmb2xsb3dzIFJfMCwgUl8xLCBJXzEsIFJfMiwgSV8yIC4uLiBSX24tMSwgSV9uLTEsIElfbiBsaWtlIHRoZQorICogRk9SVFJBTiB2ZXJzaW9uCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgInNtYWxsZnQuaCIKKyNpbmNsdWRlICJtaXNjLmgiCisKK3N0YXRpYyB2b2lkIGRyZnRpMShpbnQgbiwgZmxvYXQgKndhLCBpbnQgKmlmYWMpeworICBzdGF0aWMgaW50IG50cnloWzRdID0geyA0LDIsMyw1IH07CisgIHN0YXRpYyBmbG9hdCB0cGkgPSA2LjI4MzE4NTMwNzE3OTU4NjQ4ZjsKKyAgZmxvYXQgYXJnLGFyZ2gsYXJnbGQsZmk7CisgIGludCBudHJ5PTAsaSxqPS0xOworICBpbnQgazEsIGwxLCBsMiwgaWI7CisgIGludCBsZCwgaWksIGlwLCBpcywgbnEsIG5yOworICBpbnQgaWRvLCBpcG0sIG5mbTE7CisgIGludCBubD1uOworICBpbnQgbmY9MDsKKworIEwxMDE6CisgIGorKzsKKyAgaWYgKGogPCA0KQorICAgIG50cnk9bnRyeWhbal07CisgIGVsc2UKKyAgICBudHJ5Kz0yOworCisgTDEwNDoKKyAgbnE9bmwvbnRyeTsKKyAgbnI9bmwtbnRyeSpucTsKKyAgaWYgKG5yIT0wKSBnb3RvIEwxMDE7CisKKyAgbmYrKzsKKyAgaWZhY1tuZisxXT1udHJ5OworICBubD1ucTsKKyAgaWYobnRyeSE9Milnb3RvIEwxMDc7CisgIGlmKG5mPT0xKWdvdG8gTDEwNzsKKworICBmb3IgKGk9MTtpPG5mO2krKyl7CisgICAgaWI9bmYtaSsxOworICAgIGlmYWNbaWIrMV09aWZhY1tpYl07CisgIH0KKyAgaWZhY1syXSA9IDI7CisKKyBMMTA3OgorICBpZihubCE9MSlnb3RvIEwxMDQ7CisgIGlmYWNbMF09bjsKKyAgaWZhY1sxXT1uZjsKKyAgYXJnaD10cGkvbjsKKyAgaXM9MDsKKyAgbmZtMT1uZi0xOworICBsMT0xOworCisgIGlmKG5mbTE9PTApcmV0dXJuOworCisgIGZvciAoazE9MDtrMTxuZm0xO2sxKyspeworICAgIGlwPWlmYWNbazErMl07CisgICAgbGQ9MDsKKyAgICBsMj1sMSppcDsKKyAgICBpZG89bi9sMjsKKyAgICBpcG09aXAtMTsKKworICAgIGZvciAoaj0wO2o8aXBtO2orKyl7CisgICAgICBsZCs9bDE7CisgICAgICBpPWlzOworICAgICAgYXJnbGQ9KGZsb2F0KWxkKmFyZ2g7CisgICAgICBmaT0wLmY7CisgICAgICBmb3IgKGlpPTI7aWk8aWRvO2lpKz0yKXsKKwlmaSs9MS5mOworCWFyZz1maSphcmdsZDsKKwl3YVtpKytdPWNvcyhhcmcpOworCXdhW2krK109c2luKGFyZyk7CisgICAgICB9CisgICAgICBpcys9aWRvOworICAgIH0KKyAgICBsMT1sMjsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBmZHJmZnRpKGludCBuLCBmbG9hdCAqd3NhdmUsIGludCAqaWZhYyl7CisKKyAgaWYgKG4gPT0gMSkgcmV0dXJuOworICBkcmZ0aTEobiwgd3NhdmUrbiwgaWZhYyk7Cit9CisKK3N0YXRpYyB2b2lkIGRyYWRmMihpbnQgaWRvLGludCBsMSxmbG9hdCAqY2MsZmxvYXQgKmNoLGZsb2F0ICp3YTEpeworICBpbnQgaSxrOworICBmbG9hdCB0aTIsdHIyOworICBpbnQgdDAsdDEsdDIsdDMsdDQsdDUsdDY7CisKKyAgdDE9MDsKKyAgdDA9KHQyPWwxKmlkbyk7CisgIHQzPWlkbzw8MTsKKyAgZm9yKGs9MDtrPGwxO2srKyl7CisgICAgY2hbdDE8PDFdPWNjW3QxXStjY1t0Ml07CisgICAgY2hbKHQxPDwxKSt0My0xXT1jY1t0MV0tY2NbdDJdOworICAgIHQxKz1pZG87CisgICAgdDIrPWlkbzsKKyAgfQorICAgIAorICBpZihpZG88MilyZXR1cm47CisgIGlmKGlkbz09Milnb3RvIEwxMDU7CisKKyAgdDE9MDsKKyAgdDI9dDA7CisgIGZvcihrPTA7azxsMTtrKyspeworICAgIHQzPXQyOworICAgIHQ0PSh0MTw8MSkrKGlkbzw8MSk7CisgICAgdDU9dDE7CisgICAgdDY9dDErdDE7CisgICAgZm9yKGk9MjtpPGlkbztpKz0yKXsKKyAgICAgIHQzKz0yOworICAgICAgdDQtPTI7CisgICAgICB0NSs9MjsKKyAgICAgIHQ2Kz0yOworICAgICAgdHIyPXdhMVtpLTJdKmNjW3QzLTFdK3dhMVtpLTFdKmNjW3QzXTsKKyAgICAgIHRpMj13YTFbaS0yXSpjY1t0M10td2ExW2ktMV0qY2NbdDMtMV07CisgICAgICBjaFt0Nl09Y2NbdDVdK3RpMjsKKyAgICAgIGNoW3Q0XT10aTItY2NbdDVdOworICAgICAgY2hbdDYtMV09Y2NbdDUtMV0rdHIyOworICAgICAgY2hbdDQtMV09Y2NbdDUtMV0tdHIyOworICAgIH0KKyAgICB0MSs9aWRvOworICAgIHQyKz1pZG87CisgIH0KKworICBpZihpZG8lMj09MSlyZXR1cm47CisKKyBMMTA1OgorICB0Mz0odDI9KHQxPWlkbyktMSk7CisgIHQyKz10MDsKKyAgZm9yKGs9MDtrPGwxO2srKyl7CisgICAgY2hbdDFdPS1jY1t0Ml07CisgICAgY2hbdDEtMV09Y2NbdDNdOworICAgIHQxKz1pZG88PDE7CisgICAgdDIrPWlkbzsKKyAgICB0Mys9aWRvOworICB9Cit9CisKK3N0YXRpYyB2b2lkIGRyYWRmNChpbnQgaWRvLGludCBsMSxmbG9hdCAqY2MsZmxvYXQgKmNoLGZsb2F0ICp3YTEsCisJICAgIGZsb2F0ICp3YTIsZmxvYXQgKndhMyl7CisgIHN0YXRpYyBmbG9hdCBoc3F0MiA9IC43MDcxMDY3ODExODY1NDc1MmY7CisgIGludCBpLGssdDAsdDEsdDIsdDMsdDQsdDUsdDY7CisgIGZsb2F0IGNpMixjaTMsY2k0LGNyMixjcjMsY3I0LHRpMSx0aTIsdGkzLHRpNCx0cjEsdHIyLHRyMyx0cjQ7CisgIHQwPWwxKmlkbzsKKyAgCisgIHQxPXQwOworICB0ND10MTw8MTsKKyAgdDI9dDErKHQxPDwxKTsKKyAgdDM9MDsKKworICBmb3Ioaz0wO2s8bDE7aysrKXsKKyAgICB0cjE9Y2NbdDFdK2NjW3QyXTsKKyAgICB0cjI9Y2NbdDNdK2NjW3Q0XTsKKworICAgIGNoW3Q1PXQzPDwyXT10cjErdHIyOworICAgIGNoWyhpZG88PDIpK3Q1LTFdPXRyMi10cjE7CisgICAgY2hbKHQ1Kz0oaWRvPDwxKSktMV09Y2NbdDNdLWNjW3Q0XTsKKyAgICBjaFt0NV09Y2NbdDJdLWNjW3QxXTsKKworICAgIHQxKz1pZG87CisgICAgdDIrPWlkbzsKKyAgICB0Mys9aWRvOworICAgIHQ0Kz1pZG87CisgIH0KKworICBpZihpZG88MilyZXR1cm47CisgIGlmKGlkbz09Milnb3RvIEwxMDU7CisKKworICB0MT0wOworICBmb3Ioaz0wO2s8bDE7aysrKXsKKyAgICB0Mj10MTsKKyAgICB0ND10MTw8MjsKKyAgICB0NT0odDY9aWRvPDwxKSt0NDsKKyAgICBmb3IoaT0yO2k8aWRvO2krPTIpeworICAgICAgdDM9KHQyKz0yKTsKKyAgICAgIHQ0Kz0yOworICAgICAgdDUtPTI7CisKKyAgICAgIHQzKz10MDsKKyAgICAgIGNyMj13YTFbaS0yXSpjY1t0My0xXSt3YTFbaS0xXSpjY1t0M107CisgICAgICBjaTI9d2ExW2ktMl0qY2NbdDNdLXdhMVtpLTFdKmNjW3QzLTFdOworICAgICAgdDMrPXQwOworICAgICAgY3IzPXdhMltpLTJdKmNjW3QzLTFdK3dhMltpLTFdKmNjW3QzXTsKKyAgICAgIGNpMz13YTJbaS0yXSpjY1t0M10td2EyW2ktMV0qY2NbdDMtMV07CisgICAgICB0Mys9dDA7CisgICAgICBjcjQ9d2EzW2ktMl0qY2NbdDMtMV0rd2EzW2ktMV0qY2NbdDNdOworICAgICAgY2k0PXdhM1tpLTJdKmNjW3QzXS13YTNbaS0xXSpjY1t0My0xXTsKKworICAgICAgdHIxPWNyMitjcjQ7CisgICAgICB0cjQ9Y3I0LWNyMjsKKyAgICAgIHRpMT1jaTIrY2k0OworICAgICAgdGk0PWNpMi1jaTQ7CisKKyAgICAgIHRpMj1jY1t0Ml0rY2kzOworICAgICAgdGkzPWNjW3QyXS1jaTM7CisgICAgICB0cjI9Y2NbdDItMV0rY3IzOworICAgICAgdHIzPWNjW3QyLTFdLWNyMzsKKworICAgICAgY2hbdDQtMV09dHIxK3RyMjsKKyAgICAgIGNoW3Q0XT10aTErdGkyOworCisgICAgICBjaFt0NS0xXT10cjMtdGk0OworICAgICAgY2hbdDVdPXRyNC10aTM7CisKKyAgICAgIGNoW3Q0K3Q2LTFdPXRpNCt0cjM7CisgICAgICBjaFt0NCt0Nl09dHI0K3RpMzsKKworICAgICAgY2hbdDUrdDYtMV09dHIyLXRyMTsKKyAgICAgIGNoW3Q1K3Q2XT10aTEtdGkyOworICAgIH0KKyAgICB0MSs9aWRvOworICB9CisgIGlmKGlkbyYxKXJldHVybjsKKworIEwxMDU6CisgIAorICB0Mj0odDE9dDAraWRvLTEpKyh0MDw8MSk7CisgIHQzPWlkbzw8MjsKKyAgdDQ9aWRvOworICB0NT1pZG88PDE7CisgIHQ2PWlkbzsKKworICBmb3Ioaz0wO2s8bDE7aysrKXsKKyAgICB0aTE9LWhzcXQyKihjY1t0MV0rY2NbdDJdKTsKKyAgICB0cjE9aHNxdDIqKGNjW3QxXS1jY1t0Ml0pOworCisgICAgY2hbdDQtMV09dHIxK2NjW3Q2LTFdOworICAgIGNoW3Q0K3Q1LTFdPWNjW3Q2LTFdLXRyMTsKKworICAgIGNoW3Q0XT10aTEtY2NbdDErdDBdOworICAgIGNoW3Q0K3Q1XT10aTErY2NbdDErdDBdOworCisgICAgdDErPWlkbzsKKyAgICB0Mis9aWRvOworICAgIHQ0Kz10MzsKKyAgICB0Nis9aWRvOworICB9Cit9CisKK3N0YXRpYyB2b2lkIGRyYWRmZyhpbnQgaWRvLGludCBpcCxpbnQgbDEsaW50IGlkbDEsZmxvYXQgKmNjLGZsb2F0ICpjMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKmMyLGZsb2F0ICpjaCxmbG9hdCAqY2gyLGZsb2F0ICp3YSl7CisKKyAgc3RhdGljIGZsb2F0IHRwaT02LjI4MzE4NTMwNzE3OTU4NmY7CisgIGludCBpZGlqLGlwcGgsaSxqLGssbCxpYyxpayxpczsKKyAgaW50IHQwLHQxLHQyLHQzLHQ0LHQ1LHQ2LHQ3LHQ4LHQ5LHQxMDsKKyAgZmxvYXQgZGMyLGFpMSxhaTIsYXIxLGFyMixkczI7CisgIGludCBuYmQ7CisgIGZsb2F0IGRjcCxhcmcsZHNwLGFyMWgsYXIyaDsKKyAgaW50IGlkcDIsaXBwMjsKKyAgCisgIGFyZz10cGkvKGZsb2F0KWlwOworICBkY3A9Y29zKGFyZyk7CisgIGRzcD1zaW4oYXJnKTsKKyAgaXBwaD0oaXArMSk+PjE7CisgIGlwcDI9aXA7CisgIGlkcDI9aWRvOworICBuYmQ9KGlkby0xKT4+MTsKKyAgdDA9bDEqaWRvOworICB0MTA9aXAqaWRvOworCisgIGlmKGlkbz09MSlnb3RvIEwxMTk7CisgIGZvcihpaz0wO2lrPGlkbDE7aWsrKyljaDJbaWtdPWMyW2lrXTsKKworICB0MT0wOworICBmb3Ioaj0xO2o8aXA7aisrKXsKKyAgICB0MSs9dDA7CisgICAgdDI9dDE7CisgICAgZm9yKGs9MDtrPGwxO2srKyl7CisgICAgICBjaFt0Ml09YzFbdDJdOworICAgICAgdDIrPWlkbzsKKyAgICB9CisgIH0KKworICBpcz0taWRvOworICB0MT0wOworICBpZihuYmQ+bDEpeworICAgIGZvcihqPTE7ajxpcDtqKyspeworICAgICAgdDErPXQwOworICAgICAgaXMrPWlkbzsKKyAgICAgIHQyPSAtaWRvK3QxOworICAgICAgZm9yKGs9MDtrPGwxO2srKyl7CisgICAgICAgIGlkaWo9aXMtMTsKKyAgICAgICAgdDIrPWlkbzsKKyAgICAgICAgdDM9dDI7CisgICAgICAgIGZvcihpPTI7aTxpZG87aSs9Mil7CisgICAgICAgICAgaWRpais9MjsKKyAgICAgICAgICB0Mys9MjsKKyAgICAgICAgICBjaFt0My0xXT13YVtpZGlqLTFdKmMxW3QzLTFdK3dhW2lkaWpdKmMxW3QzXTsKKyAgICAgICAgICBjaFt0M109d2FbaWRpai0xXSpjMVt0M10td2FbaWRpal0qYzFbdDMtMV07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH1lbHNleworCisgICAgZm9yKGo9MTtqPGlwO2orKyl7CisgICAgICBpcys9aWRvOworICAgICAgaWRpaj1pcy0xOworICAgICAgdDErPXQwOworICAgICAgdDI9dDE7CisgICAgICBmb3IoaT0yO2k8aWRvO2krPTIpeworICAgICAgICBpZGlqKz0yOworICAgICAgICB0Mis9MjsKKyAgICAgICAgdDM9dDI7CisgICAgICAgIGZvcihrPTA7azxsMTtrKyspeworICAgICAgICAgIGNoW3QzLTFdPXdhW2lkaWotMV0qYzFbdDMtMV0rd2FbaWRpal0qYzFbdDNdOworICAgICAgICAgIGNoW3QzXT13YVtpZGlqLTFdKmMxW3QzXS13YVtpZGlqXSpjMVt0My0xXTsKKyAgICAgICAgICB0Mys9aWRvOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgdDE9MDsKKyAgdDI9aXBwMip0MDsKKyAgaWYobmJkPGwxKXsKKyAgICBmb3Ioaj0xO2o8aXBwaDtqKyspeworICAgICAgdDErPXQwOworICAgICAgdDItPXQwOworICAgICAgdDM9dDE7CisgICAgICB0ND10MjsKKyAgICAgIGZvcihpPTI7aTxpZG87aSs9Mil7CisgICAgICAgIHQzKz0yOworICAgICAgICB0NCs9MjsKKyAgICAgICAgdDU9dDMtaWRvOworICAgICAgICB0Nj10NC1pZG87CisgICAgICAgIGZvcihrPTA7azxsMTtrKyspeworICAgICAgICAgIHQ1Kz1pZG87CisgICAgICAgICAgdDYrPWlkbzsKKyAgICAgICAgICBjMVt0NS0xXT1jaFt0NS0xXStjaFt0Ni0xXTsKKyAgICAgICAgICBjMVt0Ni0xXT1jaFt0NV0tY2hbdDZdOworICAgICAgICAgIGMxW3Q1XT1jaFt0NV0rY2hbdDZdOworICAgICAgICAgIGMxW3Q2XT1jaFt0Ni0xXS1jaFt0NS0xXTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfWVsc2V7CisgICAgZm9yKGo9MTtqPGlwcGg7aisrKXsKKyAgICAgIHQxKz10MDsKKyAgICAgIHQyLT10MDsKKyAgICAgIHQzPXQxOworICAgICAgdDQ9dDI7CisgICAgICBmb3Ioaz0wO2s8bDE7aysrKXsKKyAgICAgICAgdDU9dDM7CisgICAgICAgIHQ2PXQ0OworICAgICAgICBmb3IoaT0yO2k8aWRvO2krPTIpeworICAgICAgICAgIHQ1Kz0yOworICAgICAgICAgIHQ2Kz0yOworICAgICAgICAgIGMxW3Q1LTFdPWNoW3Q1LTFdK2NoW3Q2LTFdOworICAgICAgICAgIGMxW3Q2LTFdPWNoW3Q1XS1jaFt0Nl07CisgICAgICAgICAgYzFbdDVdPWNoW3Q1XStjaFt0Nl07CisgICAgICAgICAgYzFbdDZdPWNoW3Q2LTFdLWNoW3Q1LTFdOworICAgICAgICB9CisgICAgICAgIHQzKz1pZG87CisgICAgICAgIHQ0Kz1pZG87CisgICAgICB9CisgICAgfQorICB9CisKK0wxMTk6CisgIGZvcihpaz0wO2lrPGlkbDE7aWsrKyljMltpa109Y2gyW2lrXTsKKworICB0MT0wOworICB0Mj1pcHAyKmlkbDE7CisgIGZvcihqPTE7ajxpcHBoO2orKyl7CisgICAgdDErPXQwOworICAgIHQyLT10MDsKKyAgICB0Mz10MS1pZG87CisgICAgdDQ9dDItaWRvOworICAgIGZvcihrPTA7azxsMTtrKyspeworICAgICAgdDMrPWlkbzsKKyAgICAgIHQ0Kz1pZG87CisgICAgICBjMVt0M109Y2hbdDNdK2NoW3Q0XTsKKyAgICAgIGMxW3Q0XT1jaFt0NF0tY2hbdDNdOworICAgIH0KKyAgfQorCisgIGFyMT0xLmY7CisgIGFpMT0wLmY7CisgIHQxPTA7CisgIHQyPWlwcDIqaWRsMTsKKyAgdDM9KGlwLTEpKmlkbDE7CisgIGZvcihsPTE7bDxpcHBoO2wrKyl7CisgICAgdDErPWlkbDE7CisgICAgdDItPWlkbDE7CisgICAgYXIxaD1kY3AqYXIxLWRzcCphaTE7CisgICAgYWkxPWRjcCphaTErZHNwKmFyMTsKKyAgICBhcjE9YXIxaDsKKyAgICB0ND10MTsKKyAgICB0NT10MjsKKyAgICB0Nj10MzsKKyAgICB0Nz1pZGwxOworCisgICAgZm9yKGlrPTA7aWs8aWRsMTtpaysrKXsKKyAgICAgIGNoMlt0NCsrXT1jMltpa10rYXIxKmMyW3Q3KytdOworICAgICAgY2gyW3Q1KytdPWFpMSpjMlt0NisrXTsKKyAgICB9CisKKyAgICBkYzI9YXIxOworICAgIGRzMj1haTE7CisgICAgYXIyPWFyMTsKKyAgICBhaTI9YWkxOworCisgICAgdDQ9aWRsMTsKKyAgICB0NT0oaXBwMi0xKSppZGwxOworICAgIGZvcihqPTI7ajxpcHBoO2orKyl7CisgICAgICB0NCs9aWRsMTsKKyAgICAgIHQ1LT1pZGwxOworCisgICAgICBhcjJoPWRjMiphcjItZHMyKmFpMjsKKyAgICAgIGFpMj1kYzIqYWkyK2RzMiphcjI7CisgICAgICBhcjI9YXIyaDsKKworICAgICAgdDY9dDE7CisgICAgICB0Nz10MjsKKyAgICAgIHQ4PXQ0OworICAgICAgdDk9dDU7CisgICAgICBmb3IoaWs9MDtpazxpZGwxO2lrKyspeworICAgICAgICBjaDJbdDYrK10rPWFyMipjMlt0OCsrXTsKKyAgICAgICAgY2gyW3Q3KytdKz1haTIqYzJbdDkrK107CisgICAgICB9CisgICAgfQorICB9CisKKyAgdDE9MDsKKyAgZm9yKGo9MTtqPGlwcGg7aisrKXsKKyAgICB0MSs9aWRsMTsKKyAgICB0Mj10MTsKKyAgICBmb3IoaWs9MDtpazxpZGwxO2lrKyspY2gyW2lrXSs9YzJbdDIrK107CisgIH0KKworICBpZihpZG88bDEpZ290byBMMTMyOworCisgIHQxPTA7CisgIHQyPTA7CisgIGZvcihrPTA7azxsMTtrKyspeworICAgIHQzPXQxOworICAgIHQ0PXQyOworICAgIGZvcihpPTA7aTxpZG87aSsrKWNjW3Q0KytdPWNoW3QzKytdOworICAgIHQxKz1pZG87CisgICAgdDIrPXQxMDsKKyAgfQorCisgIGdvdG8gTDEzNTsKKworIEwxMzI6CisgIGZvcihpPTA7aTxpZG87aSsrKXsKKyAgICB0MT1pOworICAgIHQyPWk7CisgICAgZm9yKGs9MDtrPGwxO2srKyl7CisgICAgICBjY1t0Ml09Y2hbdDFdOworICAgICAgdDErPWlkbzsKKyAgICAgIHQyKz10MTA7CisgICAgfQorICB9CisKKyBMMTM1OgorICB0MT0wOworICB0Mj1pZG88PDE7CisgIHQzPTA7CisgIHQ0PWlwcDIqdDA7CisgIGZvcihqPTE7ajxpcHBoO2orKyl7CisKKyAgICB0MSs9dDI7CisgICAgdDMrPXQwOworICAgIHQ0LT10MDsKKworICAgIHQ1PXQxOworICAgIHQ2PXQzOworICAgIHQ3PXQ0OworCisgICAgZm9yKGs9MDtrPGwxO2srKyl7CisgICAgICBjY1t0NS0xXT1jaFt0Nl07CisgICAgICBjY1t0NV09Y2hbdDddOworICAgICAgdDUrPXQxMDsKKyAgICAgIHQ2Kz1pZG87CisgICAgICB0Nys9aWRvOworICAgIH0KKyAgfQorCisgIGlmKGlkbz09MSlyZXR1cm47CisgIGlmKG5iZDxsMSlnb3RvIEwxNDE7CisKKyAgdDE9LWlkbzsKKyAgdDM9MDsKKyAgdDQ9MDsKKyAgdDU9aXBwMip0MDsKKyAgZm9yKGo9MTtqPGlwcGg7aisrKXsKKyAgICB0MSs9dDI7CisgICAgdDMrPXQyOworICAgIHQ0Kz10MDsKKyAgICB0NS09dDA7CisgICAgdDY9dDE7CisgICAgdDc9dDM7CisgICAgdDg9dDQ7CisgICAgdDk9dDU7CisgICAgZm9yKGs9MDtrPGwxO2srKyl7CisgICAgICBmb3IoaT0yO2k8aWRvO2krPTIpeworICAgICAgICBpYz1pZHAyLWk7CisgICAgICAgIGNjW2krdDctMV09Y2hbaSt0OC0xXStjaFtpK3Q5LTFdOworICAgICAgICBjY1tpYyt0Ni0xXT1jaFtpK3Q4LTFdLWNoW2krdDktMV07CisgICAgICAgIGNjW2krdDddPWNoW2krdDhdK2NoW2krdDldOworICAgICAgICBjY1tpYyt0Nl09Y2hbaSt0OV0tY2hbaSt0OF07CisgICAgICB9CisgICAgICB0Nis9dDEwOworICAgICAgdDcrPXQxMDsKKyAgICAgIHQ4Kz1pZG87CisgICAgICB0OSs9aWRvOworICAgIH0KKyAgfQorICByZXR1cm47CisKKyBMMTQxOgorCisgIHQxPS1pZG87CisgIHQzPTA7CisgIHQ0PTA7CisgIHQ1PWlwcDIqdDA7CisgIGZvcihqPTE7ajxpcHBoO2orKyl7CisgICAgdDErPXQyOworICAgIHQzKz10MjsKKyAgICB0NCs9dDA7CisgICAgdDUtPXQwOworICAgIGZvcihpPTI7aTxpZG87aSs9Mil7CisgICAgICB0Nj1pZHAyK3QxLWk7CisgICAgICB0Nz1pK3QzOworICAgICAgdDg9aSt0NDsKKyAgICAgIHQ5PWkrdDU7CisgICAgICBmb3Ioaz0wO2s8bDE7aysrKXsKKyAgICAgICAgY2NbdDctMV09Y2hbdDgtMV0rY2hbdDktMV07CisgICAgICAgIGNjW3Q2LTFdPWNoW3Q4LTFdLWNoW3Q5LTFdOworICAgICAgICBjY1t0N109Y2hbdDhdK2NoW3Q5XTsKKyAgICAgICAgY2NbdDZdPWNoW3Q5XS1jaFt0OF07CisgICAgICAgIHQ2Kz10MTA7CisgICAgICAgIHQ3Kz10MTA7CisgICAgICAgIHQ4Kz1pZG87CisgICAgICAgIHQ5Kz1pZG87CisgICAgICB9CisgICAgfQorICB9Cit9CisKK3N0YXRpYyB2b2lkIGRyZnRmMShpbnQgbixmbG9hdCAqYyxmbG9hdCAqY2gsZmxvYXQgKndhLGludCAqaWZhYyl7CisgIGludCBpLGsxLGwxLGwyOworICBpbnQgbmEsa2gsbmY7CisgIGludCBpcCxpdyxpZG8saWRsMSxpeDIsaXgzOworCisgIG5mPWlmYWNbMV07CisgIG5hPTE7CisgIGwyPW47CisgIGl3PW47CisKKyAgZm9yKGsxPTA7azE8bmY7azErKyl7CisgICAga2g9bmYtazE7CisgICAgaXA9aWZhY1traCsxXTsKKyAgICBsMT1sMi9pcDsKKyAgICBpZG89bi9sMjsKKyAgICBpZGwxPWlkbypsMTsKKyAgICBpdy09KGlwLTEpKmlkbzsKKyAgICBuYT0xLW5hOworCisgICAgaWYoaXAhPTQpZ290byBMMTAyOworCisgICAgaXgyPWl3K2lkbzsKKyAgICBpeDM9aXgyK2lkbzsKKyAgICBpZihuYSE9MCkKKyAgICAgIGRyYWRmNChpZG8sbDEsY2gsYyx3YStpdy0xLHdhK2l4Mi0xLHdhK2l4My0xKTsKKyAgICBlbHNlCisgICAgICBkcmFkZjQoaWRvLGwxLGMsY2gsd2EraXctMSx3YStpeDItMSx3YStpeDMtMSk7CisgICAgZ290byBMMTEwOworCisgTDEwMjoKKyAgICBpZihpcCE9Milnb3RvIEwxMDQ7CisgICAgaWYobmEhPTApZ290byBMMTAzOworCisgICAgZHJhZGYyKGlkbyxsMSxjLGNoLHdhK2l3LTEpOworICAgIGdvdG8gTDExMDsKKworICBMMTAzOgorICAgIGRyYWRmMihpZG8sbDEsY2gsYyx3YStpdy0xKTsKKyAgICBnb3RvIEwxMTA7CisKKyAgTDEwNDoKKyAgICBpZihpZG89PTEpbmE9MS1uYTsKKyAgICBpZihuYSE9MClnb3RvIEwxMDk7CisKKyAgICBkcmFkZmcoaWRvLGlwLGwxLGlkbDEsYyxjLGMsY2gsY2gsd2EraXctMSk7CisgICAgbmE9MTsKKyAgICBnb3RvIEwxMTA7CisKKyAgTDEwOToKKyAgICBkcmFkZmcoaWRvLGlwLGwxLGlkbDEsY2gsY2gsY2gsYyxjLHdhK2l3LTEpOworICAgIG5hPTA7CisKKyAgTDExMDoKKyAgICBsMj1sMTsKKyAgfQorCisgIGlmKG5hPT0xKXJldHVybjsKKworICBmb3IoaT0wO2k8bjtpKyspY1tpXT1jaFtpXTsKK30KKworc3RhdGljIHZvaWQgZHJhZGIyKGludCBpZG8saW50IGwxLGZsb2F0ICpjYyxmbG9hdCAqY2gsZmxvYXQgKndhMSl7CisgIGludCBpLGssdDAsdDEsdDIsdDMsdDQsdDUsdDY7CisgIGZsb2F0IHRpMix0cjI7CisKKyAgdDA9bDEqaWRvOworICAKKyAgdDE9MDsKKyAgdDI9MDsKKyAgdDM9KGlkbzw8MSktMTsKKyAgZm9yKGs9MDtrPGwxO2srKyl7CisgICAgY2hbdDFdPWNjW3QyXStjY1t0Myt0Ml07CisgICAgY2hbdDErdDBdPWNjW3QyXS1jY1t0Myt0Ml07CisgICAgdDI9KHQxKz1pZG8pPDwxOworICB9CisKKyAgaWYoaWRvPDIpcmV0dXJuOworICBpZihpZG89PTIpZ290byBMMTA1OworCisgIHQxPTA7CisgIHQyPTA7CisgIGZvcihrPTA7azxsMTtrKyspeworICAgIHQzPXQxOworICAgIHQ1PSh0ND10MikrKGlkbzw8MSk7CisgICAgdDY9dDArdDE7CisgICAgZm9yKGk9MjtpPGlkbztpKz0yKXsKKyAgICAgIHQzKz0yOworICAgICAgdDQrPTI7CisgICAgICB0NS09MjsKKyAgICAgIHQ2Kz0yOworICAgICAgY2hbdDMtMV09Y2NbdDQtMV0rY2NbdDUtMV07CisgICAgICB0cjI9Y2NbdDQtMV0tY2NbdDUtMV07CisgICAgICBjaFt0M109Y2NbdDRdLWNjW3Q1XTsKKyAgICAgIHRpMj1jY1t0NF0rY2NbdDVdOworICAgICAgY2hbdDYtMV09d2ExW2ktMl0qdHIyLXdhMVtpLTFdKnRpMjsKKyAgICAgIGNoW3Q2XT13YTFbaS0yXSp0aTIrd2ExW2ktMV0qdHIyOworICAgIH0KKyAgICB0Mj0odDErPWlkbyk8PDE7CisgIH0KKworICBpZihpZG8lMj09MSlyZXR1cm47CisKK0wxMDU6CisgIHQxPWlkby0xOworICB0Mj1pZG8tMTsKKyAgZm9yKGs9MDtrPGwxO2srKyl7CisgICAgY2hbdDFdPWNjW3QyXStjY1t0Ml07CisgICAgY2hbdDErdDBdPS0oY2NbdDIrMV0rY2NbdDIrMV0pOworICAgIHQxKz1pZG87CisgICAgdDIrPWlkbzw8MTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBkcmFkYjMoaW50IGlkbyxpbnQgbDEsZmxvYXQgKmNjLGZsb2F0ICpjaCxmbG9hdCAqd2ExLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAqd2EyKXsKKyAgc3RhdGljIGZsb2F0IHRhdXIgPSAtLjVmOworICBzdGF0aWMgZmxvYXQgdGF1aSA9IC44NjYwMjU0MDM3ODQ0Mzg2ZjsKKyAgaW50IGksayx0MCx0MSx0Mix0Myx0NCx0NSx0Nix0Nyx0OCx0OSx0MTA7CisgIGZsb2F0IGNpMixjaTMsZGkyLGRpMyxjcjIsY3IzLGRyMixkcjMsdGkyLHRyMjsKKyAgdDA9bDEqaWRvOworCisgIHQxPTA7CisgIHQyPXQwPDwxOworICB0Mz1pZG88PDE7CisgIHQ0PWlkbysoaWRvPDwxKTsKKyAgdDU9MDsKKyAgZm9yKGs9MDtrPGwxO2srKyl7CisgICAgdHIyPWNjW3QzLTFdK2NjW3QzLTFdOworICAgIGNyMj1jY1t0NV0rKHRhdXIqdHIyKTsKKyAgICBjaFt0MV09Y2NbdDVdK3RyMjsKKyAgICBjaTM9dGF1aSooY2NbdDNdK2NjW3QzXSk7CisgICAgY2hbdDErdDBdPWNyMi1jaTM7CisgICAgY2hbdDErdDJdPWNyMitjaTM7CisgICAgdDErPWlkbzsKKyAgICB0Mys9dDQ7CisgICAgdDUrPXQ0OworICB9CisKKyAgaWYoaWRvPT0xKXJldHVybjsKKworICB0MT0wOworICB0Mz1pZG88PDE7CisgIGZvcihrPTA7azxsMTtrKyspeworICAgIHQ3PXQxKyh0MTw8MSk7CisgICAgdDY9KHQ1PXQ3K3QzKTsKKyAgICB0OD10MTsKKyAgICB0MTA9KHQ5PXQxK3QwKSt0MDsKKworICAgIGZvcihpPTI7aTxpZG87aSs9Mil7CisgICAgICB0NSs9MjsKKyAgICAgIHQ2LT0yOworICAgICAgdDcrPTI7CisgICAgICB0OCs9MjsKKyAgICAgIHQ5Kz0yOworICAgICAgdDEwKz0yOworICAgICAgdHIyPWNjW3Q1LTFdK2NjW3Q2LTFdOworICAgICAgY3IyPWNjW3Q3LTFdKyh0YXVyKnRyMik7CisgICAgICBjaFt0OC0xXT1jY1t0Ny0xXSt0cjI7CisgICAgICB0aTI9Y2NbdDVdLWNjW3Q2XTsKKyAgICAgIGNpMj1jY1t0N10rKHRhdXIqdGkyKTsKKyAgICAgIGNoW3Q4XT1jY1t0N10rdGkyOworICAgICAgY3IzPXRhdWkqKGNjW3Q1LTFdLWNjW3Q2LTFdKTsKKyAgICAgIGNpMz10YXVpKihjY1t0NV0rY2NbdDZdKTsKKyAgICAgIGRyMj1jcjItY2kzOworICAgICAgZHIzPWNyMitjaTM7CisgICAgICBkaTI9Y2kyK2NyMzsKKyAgICAgIGRpMz1jaTItY3IzOworICAgICAgY2hbdDktMV09d2ExW2ktMl0qZHIyLXdhMVtpLTFdKmRpMjsKKyAgICAgIGNoW3Q5XT13YTFbaS0yXSpkaTIrd2ExW2ktMV0qZHIyOworICAgICAgY2hbdDEwLTFdPXdhMltpLTJdKmRyMy13YTJbaS0xXSpkaTM7CisgICAgICBjaFt0MTBdPXdhMltpLTJdKmRpMyt3YTJbaS0xXSpkcjM7CisgICAgfQorICAgIHQxKz1pZG87CisgIH0KK30KKworc3RhdGljIHZvaWQgZHJhZGI0KGludCBpZG8saW50IGwxLGZsb2F0ICpjYyxmbG9hdCAqY2gsZmxvYXQgKndhMSwKKwkJCSAgZmxvYXQgKndhMixmbG9hdCAqd2EzKXsKKyAgc3RhdGljIGZsb2F0IHNxcnQyPTEuNDE0MjEzNTYyMzczMDk1ZjsKKyAgaW50IGksayx0MCx0MSx0Mix0Myx0NCx0NSx0Nix0Nyx0ODsKKyAgZmxvYXQgY2kyLGNpMyxjaTQsY3IyLGNyMyxjcjQsdGkxLHRpMix0aTMsdGk0LHRyMSx0cjIsdHIzLHRyNDsKKyAgdDA9bDEqaWRvOworICAKKyAgdDE9MDsKKyAgdDI9aWRvPDwyOworICB0Mz0wOworICB0Nj1pZG88PDE7CisgIGZvcihrPTA7azxsMTtrKyspeworICAgIHQ0PXQzK3Q2OworICAgIHQ1PXQxOworICAgIHRyMz1jY1t0NC0xXStjY1t0NC0xXTsKKyAgICB0cjQ9Y2NbdDRdK2NjW3Q0XTsgCisgICAgdHIxPWNjW3QzXS1jY1sodDQrPXQ2KS0xXTsKKyAgICB0cjI9Y2NbdDNdK2NjW3Q0LTFdOworICAgIGNoW3Q1XT10cjIrdHIzOworICAgIGNoW3Q1Kz10MF09dHIxLXRyNDsKKyAgICBjaFt0NSs9dDBdPXRyMi10cjM7CisgICAgY2hbdDUrPXQwXT10cjErdHI0OworICAgIHQxKz1pZG87CisgICAgdDMrPXQyOworICB9CisKKyAgaWYoaWRvPDIpcmV0dXJuOworICBpZihpZG89PTIpZ290byBMMTA1OworCisgIHQxPTA7CisgIGZvcihrPTA7azxsMTtrKyspeworICAgIHQ1PSh0ND0odDM9KHQyPXQxPDwyKSt0NikpK3Q2OworICAgIHQ3PXQxOworICAgIGZvcihpPTI7aTxpZG87aSs9Mil7CisgICAgICB0Mis9MjsKKyAgICAgIHQzKz0yOworICAgICAgdDQtPTI7CisgICAgICB0NS09MjsKKyAgICAgIHQ3Kz0yOworICAgICAgdGkxPWNjW3QyXStjY1t0NV07CisgICAgICB0aTI9Y2NbdDJdLWNjW3Q1XTsKKyAgICAgIHRpMz1jY1t0M10tY2NbdDRdOworICAgICAgdHI0PWNjW3QzXStjY1t0NF07CisgICAgICB0cjE9Y2NbdDItMV0tY2NbdDUtMV07CisgICAgICB0cjI9Y2NbdDItMV0rY2NbdDUtMV07CisgICAgICB0aTQ9Y2NbdDMtMV0tY2NbdDQtMV07CisgICAgICB0cjM9Y2NbdDMtMV0rY2NbdDQtMV07CisgICAgICBjaFt0Ny0xXT10cjIrdHIzOworICAgICAgY3IzPXRyMi10cjM7CisgICAgICBjaFt0N109dGkyK3RpMzsKKyAgICAgIGNpMz10aTItdGkzOworICAgICAgY3IyPXRyMS10cjQ7CisgICAgICBjcjQ9dHIxK3RyNDsKKyAgICAgIGNpMj10aTErdGk0OworICAgICAgY2k0PXRpMS10aTQ7CisKKyAgICAgIGNoWyh0OD10Nyt0MCktMV09d2ExW2ktMl0qY3IyLXdhMVtpLTFdKmNpMjsKKyAgICAgIGNoW3Q4XT13YTFbaS0yXSpjaTIrd2ExW2ktMV0qY3IyOworICAgICAgY2hbKHQ4Kz10MCktMV09d2EyW2ktMl0qY3IzLXdhMltpLTFdKmNpMzsKKyAgICAgIGNoW3Q4XT13YTJbaS0yXSpjaTMrd2EyW2ktMV0qY3IzOworICAgICAgY2hbKHQ4Kz10MCktMV09d2EzW2ktMl0qY3I0LXdhM1tpLTFdKmNpNDsKKyAgICAgIGNoW3Q4XT13YTNbaS0yXSpjaTQrd2EzW2ktMV0qY3I0OworICAgIH0KKyAgICB0MSs9aWRvOworICB9CisKKyAgaWYoaWRvJTIgPT0gMSlyZXR1cm47CisKKyBMMTA1OgorCisgIHQxPWlkbzsKKyAgdDI9aWRvPDwyOworICB0Mz1pZG8tMTsKKyAgdDQ9aWRvKyhpZG88PDEpOworICBmb3Ioaz0wO2s8bDE7aysrKXsKKyAgICB0NT10MzsKKyAgICB0aTE9Y2NbdDFdK2NjW3Q0XTsKKyAgICB0aTI9Y2NbdDRdLWNjW3QxXTsKKyAgICB0cjE9Y2NbdDEtMV0tY2NbdDQtMV07CisgICAgdHIyPWNjW3QxLTFdK2NjW3Q0LTFdOworICAgIGNoW3Q1XT10cjIrdHIyOworICAgIGNoW3Q1Kz10MF09c3FydDIqKHRyMS10aTEpOworICAgIGNoW3Q1Kz10MF09dGkyK3RpMjsKKyAgICBjaFt0NSs9dDBdPS1zcXJ0MioodHIxK3RpMSk7CisKKyAgICB0Mys9aWRvOworICAgIHQxKz10MjsKKyAgICB0NCs9dDI7CisgIH0KK30KKworc3RhdGljIHZvaWQgZHJhZGJnKGludCBpZG8saW50IGlwLGludCBsMSxpbnQgaWRsMSxmbG9hdCAqY2MsZmxvYXQgKmMxLAorICAgICAgICAgICAgZmxvYXQgKmMyLGZsb2F0ICpjaCxmbG9hdCAqY2gyLGZsb2F0ICp3YSl7CisgIHN0YXRpYyBmbG9hdCB0cGk9Ni4yODMxODUzMDcxNzk1ODZmOworICBpbnQgaWRpaixpcHBoLGksaixrLGwsaWssaXMsdDAsdDEsdDIsdDMsdDQsdDUsdDYsdDcsdDgsdDksdDEwLAorICAgICAgdDExLHQxMjsKKyAgZmxvYXQgZGMyLGFpMSxhaTIsYXIxLGFyMixkczI7CisgIGludCBuYmQ7CisgIGZsb2F0IGRjcCxhcmcsZHNwLGFyMWgsYXIyaDsKKyAgaW50IGlwcDI7CisKKyAgdDEwPWlwKmlkbzsKKyAgdDA9bDEqaWRvOworICBhcmc9dHBpLyhmbG9hdClpcDsKKyAgZGNwPWNvcyhhcmcpOworICBkc3A9c2luKGFyZyk7CisgIG5iZD0oaWRvLTEpPj4xOworICBpcHAyPWlwOworICBpcHBoPShpcCsxKT4+MTsKKyAgaWYoaWRvPGwxKWdvdG8gTDEwMzsKKyAgCisgIHQxPTA7CisgIHQyPTA7CisgIGZvcihrPTA7azxsMTtrKyspeworICAgIHQzPXQxOworICAgIHQ0PXQyOworICAgIGZvcihpPTA7aTxpZG87aSsrKXsKKyAgICAgIGNoW3QzXT1jY1t0NF07CisgICAgICB0MysrOworICAgICAgdDQrKzsKKyAgICB9CisgICAgdDErPWlkbzsKKyAgICB0Mis9dDEwOworICB9CisgIGdvdG8gTDEwNjsKKworIEwxMDM6CisgIHQxPTA7CisgIGZvcihpPTA7aTxpZG87aSsrKXsKKyAgICB0Mj10MTsKKyAgICB0Mz10MTsKKyAgICBmb3Ioaz0wO2s8bDE7aysrKXsKKyAgICAgIGNoW3QyXT1jY1t0M107CisgICAgICB0Mis9aWRvOworICAgICAgdDMrPXQxMDsKKyAgICB9CisgICAgdDErKzsKKyAgfQorCisgTDEwNjoKKyAgdDE9MDsKKyAgdDI9aXBwMip0MDsKKyAgdDc9KHQ1PWlkbzw8MSk7CisgIGZvcihqPTE7ajxpcHBoO2orKyl7CisgICAgdDErPXQwOworICAgIHQyLT10MDsKKyAgICB0Mz10MTsKKyAgICB0ND10MjsKKyAgICB0Nj10NTsKKyAgICBmb3Ioaz0wO2s8bDE7aysrKXsKKyAgICAgIGNoW3QzXT1jY1t0Ni0xXStjY1t0Ni0xXTsKKyAgICAgIGNoW3Q0XT1jY1t0Nl0rY2NbdDZdOworICAgICAgdDMrPWlkbzsKKyAgICAgIHQ0Kz1pZG87CisgICAgICB0Nis9dDEwOworICAgIH0KKyAgICB0NSs9dDc7CisgIH0KKworICBpZiAoaWRvID09IDEpZ290byBMMTE2OworICBpZihuYmQ8bDEpZ290byBMMTEyOworCisgIHQxPTA7CisgIHQyPWlwcDIqdDA7CisgIHQ3PTA7CisgIGZvcihqPTE7ajxpcHBoO2orKyl7CisgICAgdDErPXQwOworICAgIHQyLT10MDsKKyAgICB0Mz10MTsKKyAgICB0ND10MjsKKworICAgIHQ3Kz0oaWRvPDwxKTsKKyAgICB0OD10NzsKKyAgICBmb3Ioaz0wO2s8bDE7aysrKXsKKyAgICAgIHQ1PXQzOworICAgICAgdDY9dDQ7CisgICAgICB0OT10ODsKKyAgICAgIHQxMT10ODsKKyAgICAgIGZvcihpPTI7aTxpZG87aSs9Mil7CisgICAgICAgIHQ1Kz0yOworICAgICAgICB0Nis9MjsKKyAgICAgICAgdDkrPTI7CisgICAgICAgIHQxMS09MjsKKyAgICAgICAgY2hbdDUtMV09Y2NbdDktMV0rY2NbdDExLTFdOworICAgICAgICBjaFt0Ni0xXT1jY1t0OS0xXS1jY1t0MTEtMV07CisgICAgICAgIGNoW3Q1XT1jY1t0OV0tY2NbdDExXTsKKyAgICAgICAgY2hbdDZdPWNjW3Q5XStjY1t0MTFdOworICAgICAgfQorICAgICAgdDMrPWlkbzsKKyAgICAgIHQ0Kz1pZG87CisgICAgICB0OCs9dDEwOworICAgIH0KKyAgfQorICBnb3RvIEwxMTY7CisKKyBMMTEyOgorICB0MT0wOworICB0Mj1pcHAyKnQwOworICB0Nz0wOworICBmb3Ioaj0xO2o8aXBwaDtqKyspeworICAgIHQxKz10MDsKKyAgICB0Mi09dDA7CisgICAgdDM9dDE7CisgICAgdDQ9dDI7CisgICAgdDcrPShpZG88PDEpOworICAgIHQ4PXQ3OworICAgIHQ5PXQ3OworICAgIGZvcihpPTI7aTxpZG87aSs9Mil7CisgICAgICB0Mys9MjsKKyAgICAgIHQ0Kz0yOworICAgICAgdDgrPTI7CisgICAgICB0OS09MjsKKyAgICAgIHQ1PXQzOworICAgICAgdDY9dDQ7CisgICAgICB0MTE9dDg7CisgICAgICB0MTI9dDk7CisgICAgICBmb3Ioaz0wO2s8bDE7aysrKXsKKyAgICAgICAgY2hbdDUtMV09Y2NbdDExLTFdK2NjW3QxMi0xXTsKKyAgICAgICAgY2hbdDYtMV09Y2NbdDExLTFdLWNjW3QxMi0xXTsKKyAgICAgICAgY2hbdDVdPWNjW3QxMV0tY2NbdDEyXTsKKyAgICAgICAgY2hbdDZdPWNjW3QxMV0rY2NbdDEyXTsKKyAgICAgICAgdDUrPWlkbzsKKyAgICAgICAgdDYrPWlkbzsKKyAgICAgICAgdDExKz10MTA7CisgICAgICAgIHQxMis9dDEwOworICAgICAgfQorICAgIH0KKyAgfQorCitMMTE2OgorICBhcjE9MS5mOworICBhaTE9MC5mOworICB0MT0wOworICB0OT0odDI9aXBwMippZGwxKTsKKyAgdDM9KGlwLTEpKmlkbDE7CisgIGZvcihsPTE7bDxpcHBoO2wrKyl7CisgICAgdDErPWlkbDE7CisgICAgdDItPWlkbDE7CisKKyAgICBhcjFoPWRjcCphcjEtZHNwKmFpMTsKKyAgICBhaTE9ZGNwKmFpMStkc3AqYXIxOworICAgIGFyMT1hcjFoOworICAgIHQ0PXQxOworICAgIHQ1PXQyOworICAgIHQ2PTA7CisgICAgdDc9aWRsMTsKKyAgICB0OD10MzsKKyAgICBmb3IoaWs9MDtpazxpZGwxO2lrKyspeworICAgICAgYzJbdDQrK109Y2gyW3Q2KytdK2FyMSpjaDJbdDcrK107CisgICAgICBjMlt0NSsrXT1haTEqY2gyW3Q4KytdOworICAgIH0KKyAgICBkYzI9YXIxOworICAgIGRzMj1haTE7CisgICAgYXIyPWFyMTsKKyAgICBhaTI9YWkxOworCisgICAgdDY9aWRsMTsKKyAgICB0Nz10OS1pZGwxOworICAgIGZvcihqPTI7ajxpcHBoO2orKyl7CisgICAgICB0Nis9aWRsMTsKKyAgICAgIHQ3LT1pZGwxOworICAgICAgYXIyaD1kYzIqYXIyLWRzMiphaTI7CisgICAgICBhaTI9ZGMyKmFpMitkczIqYXIyOworICAgICAgYXIyPWFyMmg7CisgICAgICB0ND10MTsKKyAgICAgIHQ1PXQyOworICAgICAgdDExPXQ2OworICAgICAgdDEyPXQ3OworICAgICAgZm9yKGlrPTA7aWs8aWRsMTtpaysrKXsKKyAgICAgICAgYzJbdDQrK10rPWFyMipjaDJbdDExKytdOworICAgICAgICBjMlt0NSsrXSs9YWkyKmNoMlt0MTIrK107CisgICAgICB9CisgICAgfQorICB9CisKKyAgdDE9MDsKKyAgZm9yKGo9MTtqPGlwcGg7aisrKXsKKyAgICB0MSs9aWRsMTsKKyAgICB0Mj10MTsKKyAgICBmb3IoaWs9MDtpazxpZGwxO2lrKyspY2gyW2lrXSs9Y2gyW3QyKytdOworICB9CisKKyAgdDE9MDsKKyAgdDI9aXBwMip0MDsKKyAgZm9yKGo9MTtqPGlwcGg7aisrKXsKKyAgICB0MSs9dDA7CisgICAgdDItPXQwOworICAgIHQzPXQxOworICAgIHQ0PXQyOworICAgIGZvcihrPTA7azxsMTtrKyspeworICAgICAgY2hbdDNdPWMxW3QzXS1jMVt0NF07CisgICAgICBjaFt0NF09YzFbdDNdK2MxW3Q0XTsKKyAgICAgIHQzKz1pZG87CisgICAgICB0NCs9aWRvOworICAgIH0KKyAgfQorCisgIGlmKGlkbz09MSlnb3RvIEwxMzI7CisgIGlmKG5iZDxsMSlnb3RvIEwxMjg7CisKKyAgdDE9MDsKKyAgdDI9aXBwMip0MDsKKyAgZm9yKGo9MTtqPGlwcGg7aisrKXsKKyAgICB0MSs9dDA7CisgICAgdDItPXQwOworICAgIHQzPXQxOworICAgIHQ0PXQyOworICAgIGZvcihrPTA7azxsMTtrKyspeworICAgICAgdDU9dDM7CisgICAgICB0Nj10NDsKKyAgICAgIGZvcihpPTI7aTxpZG87aSs9Mil7CisgICAgICAgIHQ1Kz0yOworICAgICAgICB0Nis9MjsKKyAgICAgICAgY2hbdDUtMV09YzFbdDUtMV0tYzFbdDZdOworICAgICAgICBjaFt0Ni0xXT1jMVt0NS0xXStjMVt0Nl07CisgICAgICAgIGNoW3Q1XT1jMVt0NV0rYzFbdDYtMV07CisgICAgICAgIGNoW3Q2XT1jMVt0NV0tYzFbdDYtMV07CisgICAgICB9CisgICAgICB0Mys9aWRvOworICAgICAgdDQrPWlkbzsKKyAgICB9CisgIH0KKyAgZ290byBMMTMyOworCisgTDEyODoKKyAgdDE9MDsKKyAgdDI9aXBwMip0MDsKKyAgZm9yKGo9MTtqPGlwcGg7aisrKXsKKyAgICB0MSs9dDA7CisgICAgdDItPXQwOworICAgIHQzPXQxOworICAgIHQ0PXQyOworICAgIGZvcihpPTI7aTxpZG87aSs9Mil7CisgICAgICB0Mys9MjsKKyAgICAgIHQ0Kz0yOworICAgICAgdDU9dDM7CisgICAgICB0Nj10NDsKKyAgICAgIGZvcihrPTA7azxsMTtrKyspeworICAgICAgICBjaFt0NS0xXT1jMVt0NS0xXS1jMVt0Nl07CisgICAgICAgIGNoW3Q2LTFdPWMxW3Q1LTFdK2MxW3Q2XTsKKyAgICAgICAgY2hbdDVdPWMxW3Q1XStjMVt0Ni0xXTsKKyAgICAgICAgY2hbdDZdPWMxW3Q1XS1jMVt0Ni0xXTsKKyAgICAgICAgdDUrPWlkbzsKKyAgICAgICAgdDYrPWlkbzsKKyAgICAgIH0KKyAgICB9CisgIH0KKworTDEzMjoKKyAgaWYoaWRvPT0xKXJldHVybjsKKworICBmb3IoaWs9MDtpazxpZGwxO2lrKyspYzJbaWtdPWNoMltpa107CisKKyAgdDE9MDsKKyAgZm9yKGo9MTtqPGlwO2orKyl7CisgICAgdDI9KHQxKz10MCk7CisgICAgZm9yKGs9MDtrPGwxO2srKyl7CisgICAgICBjMVt0Ml09Y2hbdDJdOworICAgICAgdDIrPWlkbzsKKyAgICB9CisgIH0KKworICBpZihuYmQ+bDEpZ290byBMMTM5OworCisgIGlzPSAtaWRvLTE7CisgIHQxPTA7CisgIGZvcihqPTE7ajxpcDtqKyspeworICAgIGlzKz1pZG87CisgICAgdDErPXQwOworICAgIGlkaWo9aXM7CisgICAgdDI9dDE7CisgICAgZm9yKGk9MjtpPGlkbztpKz0yKXsKKyAgICAgIHQyKz0yOworICAgICAgaWRpais9MjsKKyAgICAgIHQzPXQyOworICAgICAgZm9yKGs9MDtrPGwxO2srKyl7CisgICAgICAgIGMxW3QzLTFdPXdhW2lkaWotMV0qY2hbdDMtMV0td2FbaWRpal0qY2hbdDNdOworICAgICAgICBjMVt0M109d2FbaWRpai0xXSpjaFt0M10rd2FbaWRpal0qY2hbdDMtMV07CisgICAgICAgIHQzKz1pZG87CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybjsKKworIEwxMzk6CisgIGlzPSAtaWRvLTE7CisgIHQxPTA7CisgIGZvcihqPTE7ajxpcDtqKyspeworICAgIGlzKz1pZG87CisgICAgdDErPXQwOworICAgIHQyPXQxOworICAgIGZvcihrPTA7azxsMTtrKyspeworICAgICAgaWRpaj1pczsKKyAgICAgIHQzPXQyOworICAgICAgZm9yKGk9MjtpPGlkbztpKz0yKXsKKyAgICAgICAgaWRpais9MjsKKyAgICAgICAgdDMrPTI7CisgICAgICAgIGMxW3QzLTFdPXdhW2lkaWotMV0qY2hbdDMtMV0td2FbaWRpal0qY2hbdDNdOworICAgICAgICBjMVt0M109d2FbaWRpai0xXSpjaFt0M10rd2FbaWRpal0qY2hbdDMtMV07CisgICAgICB9CisgICAgICB0Mis9aWRvOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgdm9pZCBkcmZ0YjEoaW50IG4sIGZsb2F0ICpjLCBmbG9hdCAqY2gsIGZsb2F0ICp3YSwgaW50ICppZmFjKXsKKyAgaW50IGksazEsbDEsbDI7CisgIGludCBuYTsKKyAgaW50IG5mLGlwLGl3LGl4MixpeDMsaWRvLGlkbDE7CisKKyAgbmY9aWZhY1sxXTsKKyAgbmE9MDsKKyAgbDE9MTsKKyAgaXc9MTsKKworICBmb3IoazE9MDtrMTxuZjtrMSsrKXsKKyAgICBpcD1pZmFjW2sxICsgMl07CisgICAgbDI9aXAqbDE7CisgICAgaWRvPW4vbDI7CisgICAgaWRsMT1pZG8qbDE7CisgICAgaWYoaXAhPTQpZ290byBMMTAzOworICAgIGl4Mj1pdytpZG87CisgICAgaXgzPWl4MitpZG87CisKKyAgICBpZihuYSE9MCkKKyAgICAgIGRyYWRiNChpZG8sbDEsY2gsYyx3YStpdy0xLHdhK2l4Mi0xLHdhK2l4My0xKTsKKyAgICBlbHNlCisgICAgICBkcmFkYjQoaWRvLGwxLGMsY2gsd2EraXctMSx3YStpeDItMSx3YStpeDMtMSk7CisgICAgbmE9MS1uYTsKKyAgICBnb3RvIEwxMTU7CisKKyAgTDEwMzoKKyAgICBpZihpcCE9Milnb3RvIEwxMDY7CisKKyAgICBpZihuYSE9MCkKKyAgICAgIGRyYWRiMihpZG8sbDEsY2gsYyx3YStpdy0xKTsKKyAgICBlbHNlCisgICAgICBkcmFkYjIoaWRvLGwxLGMsY2gsd2EraXctMSk7CisgICAgbmE9MS1uYTsKKyAgICBnb3RvIEwxMTU7CisKKyAgTDEwNjoKKyAgICBpZihpcCE9Mylnb3RvIEwxMDk7CisKKyAgICBpeDI9aXcraWRvOworICAgIGlmKG5hIT0wKQorICAgICAgZHJhZGIzKGlkbyxsMSxjaCxjLHdhK2l3LTEsd2EraXgyLTEpOworICAgIGVsc2UKKyAgICAgIGRyYWRiMyhpZG8sbDEsYyxjaCx3YStpdy0xLHdhK2l4Mi0xKTsKKyAgICBuYT0xLW5hOworICAgIGdvdG8gTDExNTsKKworICBMMTA5OgorLyogICAgVGhlIHJhZGl4IGZpdmUgY2FzZSBjYW4gYmUgdHJhbnNsYXRlZCBsYXRlci4uLi4uICovCisvKiAgICBpZihpcCE9NSlnb3RvIEwxMTI7CisKKyAgICBpeDI9aXcraWRvOworICAgIGl4Mz1peDIraWRvOworICAgIGl4ND1peDMraWRvOworICAgIGlmKG5hIT0wKQorICAgICAgZHJhZGI1KGlkbyxsMSxjaCxjLHdhK2l3LTEsd2EraXgyLTEsd2EraXgzLTEsd2EraXg0LTEpOworICAgIGVsc2UKKyAgICAgIGRyYWRiNShpZG8sbDEsYyxjaCx3YStpdy0xLHdhK2l4Mi0xLHdhK2l4My0xLHdhK2l4NC0xKTsKKyAgICBuYT0xLW5hOworICAgIGdvdG8gTDExNTsKKworICBMMTEyOiovCisgICAgaWYobmEhPTApCisgICAgICBkcmFkYmcoaWRvLGlwLGwxLGlkbDEsY2gsY2gsY2gsYyxjLHdhK2l3LTEpOworICAgIGVsc2UKKyAgICAgIGRyYWRiZyhpZG8saXAsbDEsaWRsMSxjLGMsYyxjaCxjaCx3YStpdy0xKTsKKyAgICBpZihpZG89PTEpbmE9MS1uYTsKKworICBMMTE1OgorICAgIGwxPWwyOworICAgIGl3Kz0oaXAtMSkqaWRvOworICB9CisKKyAgaWYobmE9PTApcmV0dXJuOworCisgIGZvcihpPTA7aTxuO2krKyljW2ldPWNoW2ldOworfQorCit2b2lkIHNweF9kcmZ0X2ZvcndhcmQoc3RydWN0IGRyZnRfbG9va3VwICpsLGZsb2F0ICpkYXRhKXsKKyAgaWYobC0+bj09MSlyZXR1cm47CisgIGRyZnRmMShsLT5uLGRhdGEsbC0+dHJpZ2NhY2hlLGwtPnRyaWdjYWNoZStsLT5uLGwtPnNwbGl0Y2FjaGUpOworfQorCit2b2lkIHNweF9kcmZ0X2JhY2t3YXJkKHN0cnVjdCBkcmZ0X2xvb2t1cCAqbCxmbG9hdCAqZGF0YSl7CisgIGlmIChsLT5uPT0xKXJldHVybjsKKyAgZHJmdGIxKGwtPm4sZGF0YSxsLT50cmlnY2FjaGUsbC0+dHJpZ2NhY2hlK2wtPm4sbC0+c3BsaXRjYWNoZSk7Cit9CisKK3ZvaWQgc3B4X2RyZnRfaW5pdChzdHJ1Y3QgZHJmdF9sb29rdXAgKmwsaW50IG4pCit7CisgIGwtPm49bjsKKyAgbC0+dHJpZ2NhY2hlPShmbG9hdCopc3BlZXhfYWxsb2MoMypuKnNpemVvZigqbC0+dHJpZ2NhY2hlKSk7CisgIGwtPnNwbGl0Y2FjaGU9KGludCopc3BlZXhfYWxsb2MoMzIqc2l6ZW9mKCpsLT5zcGxpdGNhY2hlKSk7CisgIGZkcmZmdGkobiwgbC0+dHJpZ2NhY2hlLCBsLT5zcGxpdGNhY2hlKTsKK30KKwordm9pZCBzcHhfZHJmdF9jbGVhcihzdHJ1Y3QgZHJmdF9sb29rdXAgKmwpCit7CisgIGlmKGwpCisgIHsKKyAgICBpZihsLT50cmlnY2FjaGUpCisgICAgICBzcGVleF9mcmVlKGwtPnRyaWdjYWNoZSk7CisgICAgaWYobC0+c3BsaXRjYWNoZSkKKyAgICAgIHNwZWV4X2ZyZWUobC0+c3BsaXRjYWNoZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3NtYWxsZnQuaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3NtYWxsZnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDZlMmY2Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvc21hbGxmdC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSElTIEZJTEUgSVMgUEFSVCBPRiBUSEUgT2dnVm9yYmlzIFNPRlRXQVJFIENPREVDIFNPVVJDRSBDT0RFLiAgICoKKyAqIFVTRSwgRElTVFJJQlVUSU9OIEFORCBSRVBST0RVQ1RJT04gT0YgVEhJUyBMSUJSQVJZIFNPVVJDRSBJUyAgICAgKgorICogR09WRVJORUQgQlkgQSBCU0QtU1RZTEUgU09VUkNFIExJQ0VOU0UgSU5DTFVERUQgV0lUSCBUSElTIFNPVVJDRSAqCisgKiBJTiAnQ09QWUlORycuIFBMRUFTRSBSRUFEIFRIRVNFIFRFUk1TIEJFRk9SRSBESVNUUklCVVRJTkcuICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIE9nZ1ZvcmJpcyBTT1VSQ0UgQ09ERSBJUyAoQykgQ09QWVJJR0hUIDE5OTQtMjAwMSAgICAgICAgICAgICAqCisgKiBieSB0aGUgWElQSE9QSE9SVVMgQ29tcGFueSBodHRwOi8vd3d3LnhpcGgub3JnLyAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyBmdW5jdGlvbjogZmZ0IHRyYW5zZm9ybQorIGxhc3QgbW9kOiAkSWQ6IHNtYWxsZnQuaCx2IDEuMyAyMDAzLzA5LzE2IDE4OjM1OjQ1IGptIEV4cCAkCisKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICAgQGZpbGUgc21hbGxmdC5oCisgICBAYnJpZWYgRGlzY3JldGUgUm90YXRpb25hbCBGb3VyaWVyIFRyYW5zZm9ybSAoRFJGVCkKKyovCisKKyNpZm5kZWYgX1ZfU01GVF9IXworI2RlZmluZSBfVl9TTUZUX0hfCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogRGlzY3JldGUgUm90YXRpb25hbCBGb3VyaWVyIFRyYW5zZm9ybSBsb29rdXAgKi8KK3N0cnVjdCBkcmZ0X2xvb2t1cHsKKyAgaW50IG47CisgIGZsb2F0ICp0cmlnY2FjaGU7CisgIGludCAqc3BsaXRjYWNoZTsKK307CisKK2V4dGVybiB2b2lkIHNweF9kcmZ0X2ZvcndhcmQoc3RydWN0IGRyZnRfbG9va3VwICpsLGZsb2F0ICpkYXRhKTsKK2V4dGVybiB2b2lkIHNweF9kcmZ0X2JhY2t3YXJkKHN0cnVjdCBkcmZ0X2xvb2t1cCAqbCxmbG9hdCAqZGF0YSk7CitleHRlcm4gdm9pZCBzcHhfZHJmdF9pbml0KHN0cnVjdCBkcmZ0X2xvb2t1cCAqbCxpbnQgbik7CitleHRlcm4gdm9pZCBzcHhfZHJmdF9jbGVhcihzdHJ1Y3QgZHJmdF9sb29rdXAgKmwpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3NwZWV4LmMgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9zcGVleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NmUwMjEKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9zcGVleC5jCkBAIC0wLDAgKzEsMjY4IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVhbi1NYXJjIFZhbGluIAorICAgRmlsZTogc3BlZXguYworCisgICBCYXNpYyBTcGVleCBmdW5jdGlvbnMKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIm1vZGVzLmgiCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaWZuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTCAwCisjZW5kaWYKKworI2RlZmluZSBNQVhfSU5fU0FNUExFUyA2NDAKKworCisKK3ZvaWQgKnNwZWV4X2VuY29kZXJfaW5pdChjb25zdCBTcGVleE1vZGUgKm1vZGUpCit7CisgICByZXR1cm4gbW9kZS0+ZW5jX2luaXQobW9kZSk7Cit9CisKK3ZvaWQgKnNwZWV4X2RlY29kZXJfaW5pdChjb25zdCBTcGVleE1vZGUgKm1vZGUpCit7CisgICByZXR1cm4gbW9kZS0+ZGVjX2luaXQobW9kZSk7Cit9CisKK3ZvaWQgc3BlZXhfZW5jb2Rlcl9kZXN0cm95KHZvaWQgKnN0YXRlKQoreworICAgKCooKFNwZWV4TW9kZSoqKXN0YXRlKSktPmVuY19kZXN0cm95KHN0YXRlKTsKK30KKwordm9pZCBzcGVleF9kZWNvZGVyX2Rlc3Ryb3kodm9pZCAqc3RhdGUpCit7CisgICAoKigoU3BlZXhNb2RlKiopc3RhdGUpKS0+ZGVjX2Rlc3Ryb3koc3RhdGUpOworfQorCisKKworaW50IHNwZWV4X2VuY29kZV9uYXRpdmUodm9pZCAqc3RhdGUsIHNweF93b3JkMTZfdCAqaW4sIFNwZWV4Qml0cyAqYml0cykKK3sKKyAgIHJldHVybiAoKigoU3BlZXhNb2RlKiopc3RhdGUpKS0+ZW5jKHN0YXRlLCBpbiwgYml0cyk7Cit9CisKK2ludCBzcGVleF9kZWNvZGVfbmF0aXZlKHZvaWQgKnN0YXRlLCBTcGVleEJpdHMgKmJpdHMsIHNweF93b3JkMTZfdCAqb3V0KQoreworICAgcmV0dXJuICgqKChTcGVleE1vZGUqKilzdGF0ZSkpLT5kZWMoc3RhdGUsIGJpdHMsIG91dCk7Cit9CisKKworCisjaWZkZWYgRklYRURfUE9JTlQKKworaW50IHNwZWV4X2VuY29kZSh2b2lkICpzdGF0ZSwgZmxvYXQgKmluLCBTcGVleEJpdHMgKmJpdHMpCit7CisgICBpbnQgaTsKKyAgIHNweF9pbnQzMl90IE47CisgICBzcHhfaW50MTZfdCBzaG9ydF9pbltNQVhfSU5fU0FNUExFU107CisgICBzcGVleF9lbmNvZGVyX2N0bChzdGF0ZSwgU1BFRVhfR0VUX0ZSQU1FX1NJWkUsICZOKTsKKyAgIGZvciAoaT0wO2k8TjtpKyspCisgICB7CisgICAgICBpZiAoaW5baV0+MzI3NjcuZikKKyAgICAgICAgIHNob3J0X2luW2ldID0gMzI3Njc7CisgICAgICBlbHNlIGlmIChpbltpXTwtMzI3NjguZikKKyAgICAgICAgIHNob3J0X2luW2ldID0gLTMyNzY4OworICAgICAgZWxzZQorICAgICAgICAgc2hvcnRfaW5baV0gPSAoc3B4X2ludDE2X3QpZmxvb3IoLjUraW5baV0pOworICAgfQorICAgcmV0dXJuICgqKChTcGVleE1vZGUqKilzdGF0ZSkpLT5lbmMoc3RhdGUsIHNob3J0X2luLCBiaXRzKTsKK30KKworaW50IHNwZWV4X2VuY29kZV9pbnQodm9pZCAqc3RhdGUsIHNweF9pbnQxNl90ICppbiwgU3BlZXhCaXRzICpiaXRzKQoreworICAgU3BlZXhNb2RlICptb2RlOworICAgbW9kZSA9ICooU3BlZXhNb2RlKiopc3RhdGU7CisgICByZXR1cm4gKG1vZGUpLT5lbmMoc3RhdGUsIGluLCBiaXRzKTsKK30KKworaW50IHNwZWV4X2RlY29kZSh2b2lkICpzdGF0ZSwgU3BlZXhCaXRzICpiaXRzLCBmbG9hdCAqb3V0KQoreworICAgaW50IGksIHJldDsKKyAgIHNweF9pbnQzMl90IE47CisgICBzcHhfaW50MTZfdCBzaG9ydF9vdXRbTUFYX0lOX1NBTVBMRVNdOworICAgc3BlZXhfZGVjb2Rlcl9jdGwoc3RhdGUsIFNQRUVYX0dFVF9GUkFNRV9TSVpFLCAmTik7CisgICByZXQgPSAoKigoU3BlZXhNb2RlKiopc3RhdGUpKS0+ZGVjKHN0YXRlLCBiaXRzLCBzaG9ydF9vdXQpOworICAgZm9yIChpPTA7aTxOO2krKykKKyAgICAgIG91dFtpXSA9IHNob3J0X291dFtpXTsKKyAgIHJldHVybiByZXQ7Cit9CisKK2ludCBzcGVleF9kZWNvZGVfaW50KHZvaWQgKnN0YXRlLCBTcGVleEJpdHMgKmJpdHMsIHNweF9pbnQxNl90ICpvdXQpCit7CisgICBTcGVleE1vZGUgKm1vZGUgPSAqKFNwZWV4TW9kZSoqKXN0YXRlOworICAgcmV0dXJuIChtb2RlKS0+ZGVjKHN0YXRlLCBiaXRzLCBvdXQpOworfQorCisjZWxzZQorCitpbnQgc3BlZXhfZW5jb2RlKHZvaWQgKnN0YXRlLCBmbG9hdCAqaW4sIFNwZWV4Qml0cyAqYml0cykKK3sKKyAgIHJldHVybiAoKigoU3BlZXhNb2RlKiopc3RhdGUpKS0+ZW5jKHN0YXRlLCBpbiwgYml0cyk7Cit9CisKK2ludCBzcGVleF9lbmNvZGVfaW50KHZvaWQgKnN0YXRlLCBzcHhfaW50MTZfdCAqaW4sIFNwZWV4Qml0cyAqYml0cykKK3sKKyAgIGludCBpOworICAgc3B4X2ludDMyX3QgTjsKKyAgIGZsb2F0IGZsb2F0X2luW01BWF9JTl9TQU1QTEVTXTsKKyAgIHNwZWV4X2VuY29kZXJfY3RsKHN0YXRlLCBTUEVFWF9HRVRfRlJBTUVfU0laRSwgJk4pOworICAgZm9yIChpPTA7aTxOO2krKykKKyAgICAgIGZsb2F0X2luW2ldID0gaW5baV07CisgICByZXR1cm4gKCooKFNwZWV4TW9kZSoqKXN0YXRlKSktPmVuYyhzdGF0ZSwgZmxvYXRfaW4sIGJpdHMpOworfQorCitpbnQgc3BlZXhfZGVjb2RlKHZvaWQgKnN0YXRlLCBTcGVleEJpdHMgKmJpdHMsIGZsb2F0ICpvdXQpCit7CisgICByZXR1cm4gKCooKFNwZWV4TW9kZSoqKXN0YXRlKSktPmRlYyhzdGF0ZSwgYml0cywgb3V0KTsKK30KKworaW50IHNwZWV4X2RlY29kZV9pbnQodm9pZCAqc3RhdGUsIFNwZWV4Qml0cyAqYml0cywgc3B4X2ludDE2X3QgKm91dCkKK3sKKyAgIGludCBpOworICAgc3B4X2ludDMyX3QgTjsKKyAgIGZsb2F0IGZsb2F0X291dFtNQVhfSU5fU0FNUExFU107CisgICBpbnQgcmV0OworICAgc3BlZXhfZGVjb2Rlcl9jdGwoc3RhdGUsIFNQRUVYX0dFVF9GUkFNRV9TSVpFLCAmTik7CisgICByZXQgPSAoKigoU3BlZXhNb2RlKiopc3RhdGUpKS0+ZGVjKHN0YXRlLCBiaXRzLCBmbG9hdF9vdXQpOworICAgZm9yIChpPTA7aTxOO2krKykKKyAgIHsKKyAgICAgIGlmIChmbG9hdF9vdXRbaV0+MzI3NjcuZikKKyAgICAgICAgIG91dFtpXSA9IDMyNzY3OworICAgICAgZWxzZSBpZiAoZmxvYXRfb3V0W2ldPC0zMjc2OC5mKQorICAgICAgICAgb3V0W2ldID0gLTMyNzY4OworICAgICAgZWxzZQorICAgICAgICAgb3V0W2ldID0gKHNweF9pbnQxNl90KWZsb29yKC41K2Zsb2F0X291dFtpXSk7CisgICB9CisgICByZXR1cm4gcmV0OworfQorI2VuZGlmCisKKworCitpbnQgc3BlZXhfZW5jb2Rlcl9jdGwodm9pZCAqc3RhdGUsIGludCByZXF1ZXN0LCB2b2lkICpwdHIpCit7CisgICByZXR1cm4gKCooKFNwZWV4TW9kZSoqKXN0YXRlKSktPmVuY19jdGwoc3RhdGUsIHJlcXVlc3QsIHB0cik7Cit9CisKK2ludCBzcGVleF9kZWNvZGVyX2N0bCh2b2lkICpzdGF0ZSwgaW50IHJlcXVlc3QsIHZvaWQgKnB0cikKK3sKKyAgIHJldHVybiAoKigoU3BlZXhNb2RlKiopc3RhdGUpKS0+ZGVjX2N0bChzdGF0ZSwgcmVxdWVzdCwgcHRyKTsKK30KKworCisKK2ludCBuYl9tb2RlX3F1ZXJ5KGNvbnN0IHZvaWQgKm1vZGUsIGludCByZXF1ZXN0LCB2b2lkICpwdHIpCit7CisgICBjb25zdCBTcGVleE5CTW9kZSAqbSA9IChjb25zdCBTcGVleE5CTW9kZSopbW9kZTsKKyAgIAorICAgc3dpdGNoIChyZXF1ZXN0KQorICAgeworICAgY2FzZSBTUEVFWF9NT0RFX0ZSQU1FX1NJWkU6CisgICAgICAqKChpbnQqKXB0cik9bS0+ZnJhbWVTaXplOworICAgICAgYnJlYWs7CisgICBjYXNlIFNQRUVYX1NVQk1PREVfQklUU19QRVJfRlJBTUU6CisgICAgICBpZiAoKigoaW50KilwdHIpPT0wKQorICAgICAgICAgKigoaW50KilwdHIpID0gTkJfU1VCTU9ERV9CSVRTKzE7CisgICAgICBlbHNlIGlmIChtLT5zdWJtb2Rlc1sqKChpbnQqKXB0cildPT1OVUxMKQorICAgICAgICAgKigoaW50KilwdHIpID0gLTE7CisgICAgICBlbHNlCisgICAgICAgICAqKChpbnQqKXB0cikgPSBtLT5zdWJtb2Rlc1sqKChpbnQqKXB0cildLT5iaXRzX3Blcl9mcmFtZTsKKyAgICAgIGJyZWFrOworICAgZGVmYXVsdDoKKyAgICAgIHNwZWV4X3dhcm5pbmdfaW50KCJVbmtub3duIG5iX21vZGVfcXVlcnkgcmVxdWVzdDogIiwgcmVxdWVzdCk7CisgICAgICByZXR1cm4gLTE7CisgICB9CisgICByZXR1cm4gMDsKK30KKworaW50IHdiX21vZGVfcXVlcnkoY29uc3Qgdm9pZCAqbW9kZSwgaW50IHJlcXVlc3QsIHZvaWQgKnB0cikKK3sKKyAgIGNvbnN0IFNwZWV4U0JNb2RlICptID0gKGNvbnN0IFNwZWV4U0JNb2RlKiltb2RlOworCisgICBzd2l0Y2ggKHJlcXVlc3QpCisgICB7CisgICBjYXNlIFNQRUVYX01PREVfRlJBTUVfU0laRToKKyAgICAgICooKGludCopcHRyKT0yKm0tPmZyYW1lU2l6ZTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBTUEVFWF9TVUJNT0RFX0JJVFNfUEVSX0ZSQU1FOgorICAgICAgaWYgKCooKGludCopcHRyKT09MCkKKyAgICAgICAgICooKGludCopcHRyKSA9IFNCX1NVQk1PREVfQklUUysxOworICAgICAgZWxzZSBpZiAobS0+c3VibW9kZXNbKigoaW50KilwdHIpXT09TlVMTCkKKyAgICAgICAgICooKGludCopcHRyKSA9IC0xOworICAgICAgZWxzZQorICAgICAgICAgKigoaW50KilwdHIpID0gbS0+c3VibW9kZXNbKigoaW50KilwdHIpXS0+Yml0c19wZXJfZnJhbWU7CisgICAgICBicmVhazsKKyAgIGRlZmF1bHQ6CisgICAgICBzcGVleF93YXJuaW5nX2ludCgiVW5rbm93biB3Yl9tb2RlX3F1ZXJ5IHJlcXVlc3Q6ICIsIHJlcXVlc3QpOworICAgICAgcmV0dXJuIC0xOworICAgfQorICAgcmV0dXJuIDA7Cit9CisKKworaW50IHNwZWV4X2xpYl9jdGwoaW50IHJlcXVlc3QsIHZvaWQgKnB0cikKK3sKKyAgIHN3aXRjaCAocmVxdWVzdCkKKyAgIHsKKyAgICAgIGNhc2UgU1BFRVhfTElCX0dFVF9NQUpPUl9WRVJTSU9OOgorICAgICAgICAgKigoaW50KilwdHIpID0gU1BFRVhfTUFKT1JfVkVSU0lPTjsKKyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTUEVFWF9MSUJfR0VUX01JTk9SX1ZFUlNJT046CisgICAgICAgICAqKChpbnQqKXB0cikgPSBTUEVFWF9NSU5PUl9WRVJTSU9OOworICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNQRUVYX0xJQl9HRVRfTUlDUk9fVkVSU0lPTjoKKyAgICAgICAgICooKGludCopcHRyKSA9IFNQRUVYX01JQ1JPX1ZFUlNJT047CisgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU1BFRVhfTElCX0dFVF9FWFRSQV9WRVJTSU9OOgorICAgICAgICAgKigoY29uc3QgY2hhcioqKXB0cikgPSBTUEVFWF9FWFRSQV9WRVJTSU9OOworICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNQRUVYX0xJQl9HRVRfVkVSU0lPTl9TVFJJTkc6CisgICAgICAgICAqKChjb25zdCBjaGFyKiopcHRyKSA9IFNQRUVYX1ZFUlNJT047CisgICAgICAgICBicmVhazsKKyAgICAgIC8qY2FzZSBTUEVFWF9MSUJfU0VUX0FMTE9DX0ZVTkM6CisgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU1BFRVhfTElCX0dFVF9BTExPQ19GVU5DOgorICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNQRUVYX0xJQl9TRVRfRlJFRV9GVU5DOgorICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNQRUVYX0xJQl9HRVRfRlJFRV9GVU5DOgorICAgICAgICAgYnJlYWs7Ki8KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgICBzcGVleF93YXJuaW5nX2ludCgiVW5rbm93biB3Yl9tb2RlX3F1ZXJ5IHJlcXVlc3Q6ICIsIHJlcXVlc3QpOworICAgICAgICAgcmV0dXJuIC0xOworICAgfQorICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9zcGVleF9jYWxsYmFja3MuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3NwZWV4X2NhbGxiYWNrcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MjMyMmUKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9zcGVleF9jYWxsYmFja3MuYwpAQCAtMCwwICsxLDE0MCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbgorICAgRmlsZSBzcGVleF9jYWxsYmFja3MuYworICAgQ2FsbGJhY2sgaGFuZGxpbmcgYW5kIGluLWJhbmQgc2lnbmFsbGluZworCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzcGVleC9zcGVleF9jYWxsYmFja3MuaD4KKyNpbmNsdWRlICJtaXNjLmgiCisKK2ludCBzcGVleF9pbmJhbmRfaGFuZGxlcihTcGVleEJpdHMgKmJpdHMsIFNwZWV4Q2FsbGJhY2sgKmNhbGxiYWNrX2xpc3QsIHZvaWQgKnN0YXRlKQoreworICAgaW50IGlkOworICAgU3BlZXhDYWxsYmFjayAqY2FsbGJhY2s7CisgICAvKnNwZWV4X2JpdHNfYWR2YW5jZShiaXRzLCA1KTsqLworICAgaWQ9c3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgNCk7CisgICBjYWxsYmFjayA9IGNhbGxiYWNrX2xpc3QraWQ7CisKKyAgIGlmIChjYWxsYmFjay0+ZnVuYykKKyAgIHsKKyAgICAgIHJldHVybiBjYWxsYmFjay0+ZnVuYyhiaXRzLCBzdGF0ZSwgY2FsbGJhY2stPmRhdGEpOworICAgfSBlbHNlCisgICAgICAvKklmIGNhbGxiYWNrIGlzIG5vdCByZWdpc3RlcmVkLCBza2lwIHRoZSByaWdodCBudW1iZXIgb2YgYml0cyovCisgICB7CisgICAgICBpbnQgYWR2OworICAgICAgaWYgKGlkPDIpCisgICAgICAgICBhZHYgPSAxOworICAgICAgZWxzZSBpZiAoaWQ8OCkKKyAgICAgICAgIGFkdiA9IDQ7CisgICAgICBlbHNlIGlmIChpZDwxMCkKKyAgICAgICAgIGFkdiA9IDg7CisgICAgICBlbHNlIGlmIChpZDwxMikKKyAgICAgICAgIGFkdiA9IDE2OworICAgICAgZWxzZSBpZiAoaWQ8MTQpCisgICAgICAgICBhZHYgPSAzMjsKKyAgICAgIGVsc2UgCisgICAgICAgICBhZHYgPSA2NDsKKyAgICAgIHNwZWV4X2JpdHNfYWR2YW5jZShiaXRzLCBhZHYpOworICAgfQorICAgcmV0dXJuIDA7Cit9CisKK2ludCBzcGVleF9zdGRfbW9kZV9yZXF1ZXN0X2hhbmRsZXIoU3BlZXhCaXRzICpiaXRzLCB2b2lkICpzdGF0ZSwgdm9pZCAqZGF0YSkKK3sKKyAgIHNweF9pbnQzMl90IG07CisgICBtID0gc3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgNCk7CisgICBzcGVleF9lbmNvZGVyX2N0bChkYXRhLCBTUEVFWF9TRVRfTU9ERSwgJm0pOworICAgcmV0dXJuIDA7Cit9CisKK2ludCBzcGVleF9zdGRfbG93X21vZGVfcmVxdWVzdF9oYW5kbGVyKFNwZWV4Qml0cyAqYml0cywgdm9pZCAqc3RhdGUsIHZvaWQgKmRhdGEpCit7CisgICBzcHhfaW50MzJfdCBtOworICAgbSA9IHNwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKGJpdHMsIDQpOworICAgc3BlZXhfZW5jb2Rlcl9jdGwoZGF0YSwgU1BFRVhfU0VUX0xPV19NT0RFLCAmbSk7CisgICByZXR1cm4gMDsKK30KKworaW50IHNwZWV4X3N0ZF9oaWdoX21vZGVfcmVxdWVzdF9oYW5kbGVyKFNwZWV4Qml0cyAqYml0cywgdm9pZCAqc3RhdGUsIHZvaWQgKmRhdGEpCit7CisgICBzcHhfaW50MzJfdCBtOworICAgbSA9IHNwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKGJpdHMsIDQpOworICAgc3BlZXhfZW5jb2Rlcl9jdGwoZGF0YSwgU1BFRVhfU0VUX0hJR0hfTU9ERSwgJm0pOworICAgcmV0dXJuIDA7Cit9CisKK2ludCBzcGVleF9zdGRfdmJyX3JlcXVlc3RfaGFuZGxlcihTcGVleEJpdHMgKmJpdHMsIHZvaWQgKnN0YXRlLCB2b2lkICpkYXRhKQoreworICAgc3B4X2ludDMyX3QgdmJyOworICAgdmJyID0gc3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgMSk7CisgICBzcGVleF9lbmNvZGVyX2N0bChkYXRhLCBTUEVFWF9TRVRfVkJSLCAmdmJyKTsKKyAgIHJldHVybiAwOworfQorCitpbnQgc3BlZXhfc3RkX2VuaF9yZXF1ZXN0X2hhbmRsZXIoU3BlZXhCaXRzICpiaXRzLCB2b2lkICpzdGF0ZSwgdm9pZCAqZGF0YSkKK3sKKyAgIHNweF9pbnQzMl90IGVuaDsKKyAgIGVuaCA9IHNwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKGJpdHMsIDEpOworICAgc3BlZXhfZGVjb2Rlcl9jdGwoZGF0YSwgU1BFRVhfU0VUX0VOSCwgJmVuaCk7CisgICByZXR1cm4gMDsKK30KKworaW50IHNwZWV4X3N0ZF92YnJfcXVhbGl0eV9yZXF1ZXN0X2hhbmRsZXIoU3BlZXhCaXRzICpiaXRzLCB2b2lkICpzdGF0ZSwgdm9pZCAqZGF0YSkKK3sKKyAgIGZsb2F0IHF1YWw7CisgICBxdWFsID0gc3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgNCk7CisgICBzcGVleF9lbmNvZGVyX2N0bChkYXRhLCBTUEVFWF9TRVRfVkJSX1FVQUxJVFksICZxdWFsKTsKKyAgIHJldHVybiAwOworfQorCisKK2ludCBzcGVleF9zdGRfY2hhcl9oYW5kbGVyKFNwZWV4Qml0cyAqYml0cywgdm9pZCAqc3RhdGUsIHZvaWQgKmRhdGEpCit7CisgICB1bnNpZ25lZCBjaGFyIGNoOworICAgY2ggPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCA4KTsKKyAgIF9zcGVleF9wdXRjKGNoLCBkYXRhKTsKKyAgIC8qcHJpbnRmKCJzcGVleF9zdGRfY2hhcl9oYW5kbGVyIGNoPSV4XG4iLCBjaCk7Ki8KKyAgIHJldHVybiAwOworfQorCisKKworLyogRGVmYXVsdCBoYW5kbGVyIGZvciB1c2VyIGNhbGxiYWNrczogc2tpcCBpdCAqLworaW50IHNwZWV4X2RlZmF1bHRfdXNlcl9oYW5kbGVyKFNwZWV4Qml0cyAqYml0cywgdm9pZCAqc3RhdGUsIHZvaWQgKmRhdGEpCit7CisgICBpbnQgcmVxX3NpemUgPSBzcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCA0KTsKKyAgIHNwZWV4X2JpdHNfYWR2YW5jZShiaXRzLCA1KzgqcmVxX3NpemUpOworICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9zcGVleF9oZWFkZXIuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3NwZWV4X2hlYWRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMTA4NTEKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9zcGVleF9oZWFkZXIuYwpAQCAtMCwwICsxLDE2NiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAKKyAgIEZpbGU6IHNwZWV4X2hlYWRlci5jCisgICBEZXNjcmliZXMgdGhlIFNwZWV4IGhlYWRlcgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAibWlzYy5oIgorI2luY2x1ZGUgPHNwZWV4L3NwZWV4X2hlYWRlci5oPgorI2luY2x1ZGUgPHNwZWV4L3NwZWV4Lmg+CisKKyNpZm5kZWYgTlVMTAorI2RlZmluZSBOVUxMIDAKKyNlbmRpZgorCisjZGVmaW5lIEVORElBTl9TV0lUQ0goeCkge3g9bGVfaW50KHgpO30KKworCisvKgordHlwZWRlZiBzdHJ1Y3QgU3BlZXhIZWFkZXIgeworICAgY2hhciBzcGVleF9zdHJpbmdbOF07CisgICBjaGFyIHNwZWV4X3ZlcnNpb25bU1BFRVhfSEVBREVSX1ZFUlNJT05fTEVOR1RIXTsKKyAgIGludCBzcGVleF92ZXJzaW9uX2lkOworICAgaW50IGhlYWRlcl9zaXplOworICAgaW50IHJhdGU7CisgICBpbnQgbW9kZTsKKyAgIGludCBtb2RlX2JpdHN0cmVhbV92ZXJzaW9uOworICAgaW50IG5iX2NoYW5uZWxzOworICAgaW50IGJpdHJhdGU7CisgICBpbnQgZnJhbWVfc2l6ZTsKKyAgIGludCB2YnI7CisgICBpbnQgZnJhbWVzX3Blcl9wYWNrZXQ7CisgICBpbnQgZXh0cmFfaGVhZGVyczsKKyAgIGludCByZXNlcnZlZDE7CisgICBpbnQgcmVzZXJ2ZWQyOworfSBTcGVleEhlYWRlcjsKKyovCisKK3ZvaWQgc3BlZXhfaW5pdF9oZWFkZXIoU3BlZXhIZWFkZXIgKmhlYWRlciwgaW50IHJhdGUsIGludCBuYl9jaGFubmVscywgY29uc3QgU3BlZXhNb2RlICptKQoreworICAgaW50IGk7CisgICBjb25zdCBjaGFyICpoPSJTcGVleCAgICI7CisgICAvKgorICAgc3RybmNweShoZWFkZXItPnNwZWV4X3N0cmluZywgIlNwZWV4ICAgIiwgOCk7CisgICBzdHJuY3B5KGhlYWRlci0+c3BlZXhfdmVyc2lvbiwgU1BFRVhfVkVSU0lPTiwgU1BFRVhfSEVBREVSX1ZFUlNJT05fTEVOR1RILTEpOworICAgaGVhZGVyLT5zcGVleF92ZXJzaW9uW1NQRUVYX0hFQURFUl9WRVJTSU9OX0xFTkdUSC0xXT0wOworICAgKi8KKyAgIGZvciAoaT0wO2k8ODtpKyspCisgICAgICBoZWFkZXItPnNwZWV4X3N0cmluZ1tpXT1oW2ldOworICAgZm9yIChpPTA7aTxTUEVFWF9IRUFERVJfVkVSU0lPTl9MRU5HVEgtMSAmJiBTUEVFWF9WRVJTSU9OW2ldO2krKykKKyAgICAgIGhlYWRlci0+c3BlZXhfdmVyc2lvbltpXT1TUEVFWF9WRVJTSU9OW2ldOworICAgZm9yICg7aTxTUEVFWF9IRUFERVJfVkVSU0lPTl9MRU5HVEg7aSsrKQorICAgICAgaGVhZGVyLT5zcGVleF92ZXJzaW9uW2ldPTA7CisgICAKKyAgIGhlYWRlci0+c3BlZXhfdmVyc2lvbl9pZCA9IDE7CisgICBoZWFkZXItPmhlYWRlcl9zaXplID0gc2l6ZW9mKFNwZWV4SGVhZGVyKTsKKyAgIAorICAgaGVhZGVyLT5yYXRlID0gcmF0ZTsKKyAgIGhlYWRlci0+bW9kZSA9IG0tPm1vZGVJRDsKKyAgIGhlYWRlci0+bW9kZV9iaXRzdHJlYW1fdmVyc2lvbiA9IG0tPmJpdHN0cmVhbV92ZXJzaW9uOworICAgaWYgKG0tPm1vZGVJRDwwKQorICAgICAgc3BlZXhfd2FybmluZygiVGhpcyBtb2RlIGlzIG1lYW50IHRvIGJlIHVzZWQgYWxvbmUiKTsKKyAgIGhlYWRlci0+bmJfY2hhbm5lbHMgPSBuYl9jaGFubmVsczsKKyAgIGhlYWRlci0+Yml0cmF0ZSA9IC0xOworICAgc3BlZXhfbW9kZV9xdWVyeShtLCBTUEVFWF9NT0RFX0ZSQU1FX1NJWkUsICZoZWFkZXItPmZyYW1lX3NpemUpOworICAgaGVhZGVyLT52YnIgPSAwOworICAgCisgICBoZWFkZXItPmZyYW1lc19wZXJfcGFja2V0ID0gMDsKKyAgIGhlYWRlci0+ZXh0cmFfaGVhZGVycyA9IDA7CisgICBoZWFkZXItPnJlc2VydmVkMSA9IDA7CisgICBoZWFkZXItPnJlc2VydmVkMiA9IDA7Cit9CisKK2NoYXIgKnNwZWV4X2hlYWRlcl90b19wYWNrZXQoU3BlZXhIZWFkZXIgKmhlYWRlciwgaW50ICpzaXplKQoreworICAgU3BlZXhIZWFkZXIgKmxlX2hlYWRlcjsKKyAgIGxlX2hlYWRlciA9IChTcGVleEhlYWRlciopc3BlZXhfYWxsb2Moc2l6ZW9mKFNwZWV4SGVhZGVyKSk7CisgICAKKyAgIHNwZWV4X21vdmUobGVfaGVhZGVyLCBoZWFkZXIsIHNpemVvZihTcGVleEhlYWRlcikpOworICAgCisgICAvKk1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIG5vdyBsaXR0bGUtZW5kaWFuKi8KKyAgIEVORElBTl9TV0lUQ0gobGVfaGVhZGVyLT5zcGVleF92ZXJzaW9uX2lkKTsKKyAgIEVORElBTl9TV0lUQ0gobGVfaGVhZGVyLT5oZWFkZXJfc2l6ZSk7CisgICBFTkRJQU5fU1dJVENIKGxlX2hlYWRlci0+cmF0ZSk7CisgICBFTkRJQU5fU1dJVENIKGxlX2hlYWRlci0+bW9kZSk7CisgICBFTkRJQU5fU1dJVENIKGxlX2hlYWRlci0+bW9kZV9iaXRzdHJlYW1fdmVyc2lvbik7CisgICBFTkRJQU5fU1dJVENIKGxlX2hlYWRlci0+bmJfY2hhbm5lbHMpOworICAgRU5ESUFOX1NXSVRDSChsZV9oZWFkZXItPmJpdHJhdGUpOworICAgRU5ESUFOX1NXSVRDSChsZV9oZWFkZXItPmZyYW1lX3NpemUpOworICAgRU5ESUFOX1NXSVRDSChsZV9oZWFkZXItPnZicik7CisgICBFTkRJQU5fU1dJVENIKGxlX2hlYWRlci0+ZnJhbWVzX3Blcl9wYWNrZXQpOworICAgRU5ESUFOX1NXSVRDSChsZV9oZWFkZXItPmV4dHJhX2hlYWRlcnMpOworCisgICAqc2l6ZSA9IHNpemVvZihTcGVleEhlYWRlcik7CisgICByZXR1cm4gKGNoYXIgKilsZV9oZWFkZXI7Cit9CisKK1NwZWV4SGVhZGVyICpzcGVleF9wYWNrZXRfdG9faGVhZGVyKGNoYXIgKnBhY2tldCwgaW50IHNpemUpCit7CisgICBpbnQgaTsKKyAgIFNwZWV4SGVhZGVyICpsZV9oZWFkZXI7CisgICBjb25zdCBjaGFyICpoID0gIlNwZWV4ICAgIjsKKyAgIGZvciAoaT0wO2k8ODtpKyspCisgICAgICBpZiAocGFja2V0W2ldIT1oW2ldKQorICAgICAgeworICAgICAgICAgc3BlZXhfbm90aWZ5KCJUaGlzIGRvZXNuJ3QgbG9vayBsaWtlIGEgU3BlZXggZmlsZSIpOworICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAKKyAgIC8qRklYTUU6IERvIHdlIGFsbG93IGxhcmdlciBoZWFkZXJzPyovCisgICBpZiAoc2l6ZSA8IChpbnQpc2l6ZW9mKFNwZWV4SGVhZGVyKSkKKyAgIHsKKyAgICAgIHNwZWV4X25vdGlmeSgiU3BlZXggaGVhZGVyIHRvbyBzbWFsbCIpOworICAgICAgcmV0dXJuIE5VTEw7CisgICB9CisgICAKKyAgIGxlX2hlYWRlciA9IChTcGVleEhlYWRlciopc3BlZXhfYWxsb2Moc2l6ZW9mKFNwZWV4SGVhZGVyKSk7CisgICAKKyAgIHNwZWV4X21vdmUobGVfaGVhZGVyLCBwYWNrZXQsIHNpemVvZihTcGVleEhlYWRlcikpOworICAgCisgICAvKk1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNvbnZlcnRlZCBjb3JyZWN0bHkgZnJvbSBsaXR0bGUtZW5kaWFuKi8KKyAgIEVORElBTl9TV0lUQ0gobGVfaGVhZGVyLT5zcGVleF92ZXJzaW9uX2lkKTsKKyAgIEVORElBTl9TV0lUQ0gobGVfaGVhZGVyLT5oZWFkZXJfc2l6ZSk7CisgICBFTkRJQU5fU1dJVENIKGxlX2hlYWRlci0+cmF0ZSk7CisgICBFTkRJQU5fU1dJVENIKGxlX2hlYWRlci0+bW9kZSk7CisgICBFTkRJQU5fU1dJVENIKGxlX2hlYWRlci0+bW9kZV9iaXRzdHJlYW1fdmVyc2lvbik7CisgICBFTkRJQU5fU1dJVENIKGxlX2hlYWRlci0+bmJfY2hhbm5lbHMpOworICAgRU5ESUFOX1NXSVRDSChsZV9oZWFkZXItPmJpdHJhdGUpOworICAgRU5ESUFOX1NXSVRDSChsZV9oZWFkZXItPmZyYW1lX3NpemUpOworICAgRU5ESUFOX1NXSVRDSChsZV9oZWFkZXItPnZicik7CisgICBFTkRJQU5fU1dJVENIKGxlX2hlYWRlci0+ZnJhbWVzX3Blcl9wYWNrZXQpOworICAgRU5ESUFOX1NXSVRDSChsZV9oZWFkZXItPmV4dHJhX2hlYWRlcnMpOworCisgICByZXR1cm4gbGVfaGVhZGVyOworCit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9zdGFja19hbGxvYy5oIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvc3RhY2tfYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjA0OGZhCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvc3RhY2tfYWxsb2MuaApAQCAtMCwwICsxLDEyNCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAqLworLyoqCisgICBAZmlsZSBzdGFja19hbGxvYy5oCisgICBAYnJpZWYgVGVtcG9yYXJ5IG1lbW9yeSBhbGxvY2F0aW9uIG9uIHN0YWNrCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBTVEFDS19BTExPQ19ICisjZGVmaW5lIFNUQUNLX0FMTE9DX0gKKworI2lmZGVmIFVTRV9BTExPQ0EKKyNpZmRlZiBXSU4zMgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhbGxvY2EuaD4KKyNlbmRpZgorI2VuZGlmCisKKy8qKgorICogQGRlZiBBTElHTihzdGFjaywgc2l6ZSkKKyAqCisgKiBBbGlnbnMgdGhlIHN0YWNrIHRvIGEgJ3NpemUnIGJvdW5kYXJ5CisgKgorICogQHBhcmFtIHN0YWNrIFN0YWNrCisgKiBAcGFyYW0gc2l6ZSAgTmV3IHNpemUgYm91bmRhcnkKKyAqLworCisvKioKKyAqIEBkZWYgUFVTSChzdGFjaywgc2l6ZSwgdHlwZSkKKyAqCisgKiBBbGxvY2F0ZXMgJ3NpemUnIGVsZW1lbnRzIG9mIHR5cGUgJ3R5cGUnIG9uIHRoZSBzdGFjaworICoKKyAqIEBwYXJhbSBzdGFjayBTdGFjaworICogQHBhcmFtIHNpemUgIE51bWJlciBvZiBlbGVtZW50cworICogQHBhcmFtIHR5cGUgIFR5cGUgb2YgZWxlbWVudAorICovCisKKy8qKgorICogQGRlZiBQVVNIUyhzdGFjaywgdHlwZSkKKyAqCisgKiBBbGxvY2F0ZXMgYSBzdHJ1Y3Qgc3RhY2sgCisgKgorICogQHBhcmFtIHN0YWNrIFN0YWNrCisgKiBAcGFyYW0gdHlwZSAgU3RydWN0IHR5cGUKKyAqLworCisvKioKKyAqIEBkZWYgVkFSREVDTCh2YXIpCisgKgorICogRGVjbGFyZSB2YXJpYWJsZSBvbiBzdGFjaworICoKKyAqIEBwYXJhbSB2YXIgVmFyaWFibGUgdG8gZGVjbGFyZQorICovCisKKy8qKgorICogQGRlZiBBTExPQyh2YXIsIHNpemUsIHR5cGUpCisgKgorICogQWxsb2NhdGUgJ3NpemUnIGVsZW1lbnRzIG9mICd0eXBlJyBvbiBzdGFjaworICoKKyAqIEBwYXJhbSB2YXIgIE5hbWUgb2YgdmFyaWFibGUgdG8gYWxsb2NhdGUKKyAqIEBwYXJhbSBzaXplIE51bWJlciBvZiBlbGVtZW50cworICogQHBhcmFtIHR5cGUgVHlwZSBvZiBlbGVtZW50CisgKi8KKworI2lmZGVmIEVOQUJMRV9WQUxHUklORAorCisjaW5jbHVkZSA8dmFsZ3JpbmQvbWVtY2hlY2suaD4KKworI2RlZmluZSBBTElHTihzdGFjaywgc2l6ZSkgKChzdGFjaykgKz0gKChzaXplKSAtIChsb25nKShzdGFjaykpICYgKChzaXplKSAtIDEpKQorCisjZGVmaW5lIFBVU0goc3RhY2ssIHNpemUsIHR5cGUpIChWQUxHUklORF9NQUtFX05PQUNDRVNTKHN0YWNrLCAxMDAwKSxBTElHTigoc3RhY2spLHNpemVvZih0eXBlKSksVkFMR1JJTkRfTUFLRV9XUklUQUJMRShzdGFjaywgKChzaXplKSpzaXplb2YodHlwZSkpKSwoc3RhY2spKz0oKHNpemUpKnNpemVvZih0eXBlKSksKHR5cGUqKSgoc3RhY2spLSgoc2l6ZSkqc2l6ZW9mKHR5cGUpKSkpCisKKyNkZWZpbmUgUFVTSFMoc3RhY2ssIHR5cGUpIChWQUxHUklORF9NQUtFX05PQUNDRVNTKHN0YWNrLCAxMDAwKSxBTElHTigoc3RhY2spLHNpemVvZihsb25nKSksVkFMR1JJTkRfTUFLRV9XUklUQUJMRShzdGFjaywgKHNpemVvZih0eXBlKSkpLChzdGFjaykrPShzaXplb2YodHlwZSkpLCh0eXBlKikoKHN0YWNrKS0oc2l6ZW9mKHR5cGUpKSkpCisKKyNlbHNlCisKKyNkZWZpbmUgQUxJR04oc3RhY2ssIHNpemUpICgoc3RhY2spICs9ICgoc2l6ZSkgLSAobG9uZykoc3RhY2spKSAmICgoc2l6ZSkgLSAxKSkKKworI2RlZmluZSBQVVNIKHN0YWNrLCBzaXplLCB0eXBlKSAoQUxJR04oKHN0YWNrKSxzaXplb2YodHlwZSkpLChzdGFjaykrPSgoc2l6ZSkqc2l6ZW9mKHR5cGUpKSwodHlwZSopKChzdGFjayktKChzaXplKSpzaXplb2YodHlwZSkpKSkKKworI2RlZmluZSBQVVNIUyhzdGFjaywgdHlwZSkgKEFMSUdOKChzdGFjayksc2l6ZW9mKGxvbmcpKSwoc3RhY2spKz0oc2l6ZW9mKHR5cGUpKSwodHlwZSopKChzdGFjayktKHNpemVvZih0eXBlKSkpKQorCisjZW5kaWYKKworI2lmIGRlZmluZWQoVkFSX0FSUkFZUykKKyNkZWZpbmUgVkFSREVDTCh2YXIpIAorI2RlZmluZSBBTExPQyh2YXIsIHNpemUsIHR5cGUpIHR5cGUgdmFyW3NpemVdCisjZWxpZiBkZWZpbmVkKFVTRV9BTExPQ0EpCisjZGVmaW5lIFZBUkRFQ0wodmFyKSB2YXIKKyNkZWZpbmUgQUxMT0ModmFyLCBzaXplLCB0eXBlKSB2YXIgPSBhbGxvY2Eoc2l6ZW9mKHR5cGUpKihzaXplKSkKKyNlbHNlCisjZGVmaW5lIFZBUkRFQ0wodmFyKSB2YXIKKyNkZWZpbmUgQUxMT0ModmFyLCBzaXplLCB0eXBlKSB2YXIgPSBQVVNIKHN0YWNrLCBzaXplLCB0eXBlKQorI2VuZGlmCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9zdGVyZW8uYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3N0ZXJlby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxODM4N2UKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC9zdGVyZW8uYwpAQCAtMCwwICsxLDE5MiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAKKyAgIEZpbGU6IHN0ZXJlby5jCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3BlZXgvc3BlZXhfc3RlcmVvLmg+CisjaW5jbHVkZSA8c3BlZXgvc3BlZXhfY2FsbGJhY2tzLmg+CisjaW5jbHVkZSAidnEuaCIKKyNpbmNsdWRlIDxtYXRoLmg+CisKKy8qZmxvYXQgZV9yYXRpb19xdWFudFs0XSA9IHsxLCAxLjI2LCAxLjU4NywgMn07Ki8KK3N0YXRpYyBjb25zdCBmbG9hdCBlX3JhdGlvX3F1YW50WzRdID0gey4yNWYsIC4zMTVmLCAuMzk3ZiwgLjVmfTsKKwordm9pZCBzcGVleF9lbmNvZGVfc3RlcmVvKGZsb2F0ICpkYXRhLCBpbnQgZnJhbWVfc2l6ZSwgU3BlZXhCaXRzICpiaXRzKQoreworICAgaW50IGksIHRtcDsKKyAgIGZsb2F0IGVfbGVmdD0wLCBlX3JpZ2h0PTAsIGVfdG90PTA7CisgICBmbG9hdCBiYWxhbmNlLCBlX3JhdGlvOworICAgZm9yIChpPTA7aTxmcmFtZV9zaXplO2krKykKKyAgIHsKKyAgICAgIGVfbGVmdCAgKz0gKChmbG9hdClkYXRhWzIqaV0pKmRhdGFbMippXTsKKyAgICAgIGVfcmlnaHQgKz0gKChmbG9hdClkYXRhWzIqaSsxXSkqZGF0YVsyKmkrMV07CisgICAgICBkYXRhW2ldID0gIC41KigoKGZsb2F0KWRhdGFbMippXSkrZGF0YVsyKmkrMV0pOworICAgICAgZV90b3QgICArPSAoKGZsb2F0KWRhdGFbaV0pKmRhdGFbaV07CisgICB9CisgICBiYWxhbmNlPShlX2xlZnQrMSkvKGVfcmlnaHQrMSk7CisgICBlX3JhdGlvID0gZV90b3QvKDErZV9sZWZ0K2VfcmlnaHQpOworCisgICAvKlF1YW50aXphdGlvbiovCisgICBzcGVleF9iaXRzX3BhY2soYml0cywgMTQsIDUpOworICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIFNQRUVYX0lOQkFORF9TVEVSRU8sIDQpOworICAgCisgICBiYWxhbmNlPTQqbG9nKGJhbGFuY2UpOworCisgICAvKlBhY2sgc2lnbiovCisgICBpZiAoYmFsYW5jZT4wKQorICAgICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIDAsIDEpOworICAgZWxzZQorICAgICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIDEsIDEpOworICAgYmFsYW5jZT1mbG9vciguNStmYWJzKGJhbGFuY2UpKTsKKyAgIGlmIChiYWxhbmNlPjMwKQorICAgICAgYmFsYW5jZT0zMTsKKyAgIAorICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIChpbnQpYmFsYW5jZSwgNSk7CisgICAKKyAgIC8qUXVhbnRpemUgZW5lcmd5IHJhdGlvKi8KKyAgIHRtcD12cV9pbmRleCgmZV9yYXRpbywgZV9yYXRpb19xdWFudCwgMSwgNCk7CisgICBzcGVleF9iaXRzX3BhY2soYml0cywgdG1wLCAyKTsKK30KKwordm9pZCBzcGVleF9lbmNvZGVfc3RlcmVvX2ludChzcHhfaW50MTZfdCAqZGF0YSwgaW50IGZyYW1lX3NpemUsIFNwZWV4Qml0cyAqYml0cykKK3sKKyAgIGludCBpLCB0bXA7CisgICBmbG9hdCBlX2xlZnQ9MCwgZV9yaWdodD0wLCBlX3RvdD0wOworICAgZmxvYXQgYmFsYW5jZSwgZV9yYXRpbzsKKyAgIGZvciAoaT0wO2k8ZnJhbWVfc2l6ZTtpKyspCisgICB7CisgICAgICBlX2xlZnQgICs9ICgoZmxvYXQpZGF0YVsyKmldKSpkYXRhWzIqaV07CisgICAgICBlX3JpZ2h0ICs9ICgoZmxvYXQpZGF0YVsyKmkrMV0pKmRhdGFbMippKzFdOworICAgICAgZGF0YVtpXSA9ICAuNSooKChmbG9hdClkYXRhWzIqaV0pK2RhdGFbMippKzFdKTsKKyAgICAgIGVfdG90ICAgKz0gKChmbG9hdClkYXRhW2ldKSpkYXRhW2ldOworICAgfQorICAgYmFsYW5jZT0oZV9sZWZ0KzEpLyhlX3JpZ2h0KzEpOworICAgZV9yYXRpbyA9IGVfdG90LygxK2VfbGVmdCtlX3JpZ2h0KTsKKworICAgLypRdWFudGl6YXRpb24qLworICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIDE0LCA1KTsKKyAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBTUEVFWF9JTkJBTkRfU1RFUkVPLCA0KTsKKyAgIAorICAgYmFsYW5jZT00KmxvZyhiYWxhbmNlKTsKKworICAgLypQYWNrIHNpZ24qLworICAgaWYgKGJhbGFuY2U+MCkKKyAgICAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCAwLCAxKTsKKyAgIGVsc2UKKyAgICAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCAxLCAxKTsKKyAgIGJhbGFuY2U9Zmxvb3IoLjUrZmFicyhiYWxhbmNlKSk7CisgICBpZiAoYmFsYW5jZT4zMCkKKyAgICAgIGJhbGFuY2U9MzE7CisgICAKKyAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCAoaW50KWJhbGFuY2UsIDUpOworICAgCisgICAvKlF1YW50aXplIGVuZXJneSByYXRpbyovCisgICB0bXA9dnFfaW5kZXgoJmVfcmF0aW8sIGVfcmF0aW9fcXVhbnQsIDEsIDQpOworICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIHRtcCwgMik7Cit9CisKK3ZvaWQgc3BlZXhfZGVjb2RlX3N0ZXJlbyhmbG9hdCAqZGF0YSwgaW50IGZyYW1lX3NpemUsIFNwZWV4U3RlcmVvU3RhdGUgKnN0ZXJlbykKK3sKKyAgIGZsb2F0IGJhbGFuY2UsIGVfcmF0aW87CisgICBpbnQgaTsKKyAgIGZsb2F0IGVfdG90PTAsIGVfbGVmdCwgZV9yaWdodCwgZV9zdW07CisKKyAgIGJhbGFuY2U9c3RlcmVvLT5iYWxhbmNlOworICAgZV9yYXRpbz1zdGVyZW8tPmVfcmF0aW87CisgICBmb3IgKGk9ZnJhbWVfc2l6ZS0xO2k+PTA7aS0tKQorICAgeworICAgICAgZV90b3QgKz0gKChmbG9hdClkYXRhW2ldKSpkYXRhW2ldOworICAgfQorICAgZV9zdW09ZV90b3QvZV9yYXRpbzsKKyAgIGVfbGVmdCAgPSBlX3N1bSpiYWxhbmNlIC8gKDErYmFsYW5jZSk7CisgICBlX3JpZ2h0ID0gZV9zdW0tZV9sZWZ0OworCisgICBlX2xlZnQgID0gc3FydChlX2xlZnQvKGVfdG90Ky4wMSkpOworICAgZV9yaWdodCA9IHNxcnQoZV9yaWdodC8oZV90b3QrLjAxKSk7CisKKyAgIGZvciAoaT1mcmFtZV9zaXplLTE7aT49MDtpLS0pCisgICB7CisgICAgICBmbG9hdCBmdG1wPWRhdGFbaV07CisgICAgICBzdGVyZW8tPnNtb290aF9sZWZ0ICA9IC45OCpzdGVyZW8tPnNtb290aF9sZWZ0ICArIC4wMiplX2xlZnQ7CisgICAgICBzdGVyZW8tPnNtb290aF9yaWdodCA9IC45OCpzdGVyZW8tPnNtb290aF9yaWdodCArIC4wMiplX3JpZ2h0OworICAgICAgZGF0YVsyKmldID0gc3RlcmVvLT5zbW9vdGhfbGVmdCpmdG1wOworICAgICAgZGF0YVsyKmkrMV0gPSBzdGVyZW8tPnNtb290aF9yaWdodCpmdG1wOworICAgfQorfQorCit2b2lkIHNwZWV4X2RlY29kZV9zdGVyZW9faW50KHNweF9pbnQxNl90ICpkYXRhLCBpbnQgZnJhbWVfc2l6ZSwgU3BlZXhTdGVyZW9TdGF0ZSAqc3RlcmVvKQoreworICAgZmxvYXQgYmFsYW5jZSwgZV9yYXRpbzsKKyAgIGludCBpOworICAgZmxvYXQgZV90b3Q9MCwgZV9sZWZ0LCBlX3JpZ2h0LCBlX3N1bTsKKworICAgYmFsYW5jZT1zdGVyZW8tPmJhbGFuY2U7CisgICBlX3JhdGlvPXN0ZXJlby0+ZV9yYXRpbzsKKyAgIGZvciAoaT1mcmFtZV9zaXplLTE7aT49MDtpLS0pCisgICB7CisgICAgICBlX3RvdCArPSAoKGZsb2F0KWRhdGFbaV0pKmRhdGFbaV07CisgICB9CisgICBlX3N1bT1lX3RvdC9lX3JhdGlvOworICAgZV9sZWZ0ICA9IGVfc3VtKmJhbGFuY2UgLyAoMStiYWxhbmNlKTsKKyAgIGVfcmlnaHQgPSBlX3N1bS1lX2xlZnQ7CisKKyAgIGVfbGVmdCAgPSBzcXJ0KGVfbGVmdC8oZV90b3QrLjAxKSk7CisgICBlX3JpZ2h0ID0gc3FydChlX3JpZ2h0LyhlX3RvdCsuMDEpKTsKKworICAgZm9yIChpPWZyYW1lX3NpemUtMTtpPj0wO2ktLSkKKyAgIHsKKyAgICAgIGZsb2F0IGZ0bXA9ZGF0YVtpXTsKKyAgICAgIHN0ZXJlby0+c21vb3RoX2xlZnQgID0gLjk4KnN0ZXJlby0+c21vb3RoX2xlZnQgICsgLjAyKmVfbGVmdDsKKyAgICAgIHN0ZXJlby0+c21vb3RoX3JpZ2h0ID0gLjk4KnN0ZXJlby0+c21vb3RoX3JpZ2h0ICsgLjAyKmVfcmlnaHQ7CisgICAgICBkYXRhWzIqaV0gPSBzdGVyZW8tPnNtb290aF9sZWZ0KmZ0bXA7CisgICAgICBkYXRhWzIqaSsxXSA9IHN0ZXJlby0+c21vb3RoX3JpZ2h0KmZ0bXA7CisgICB9Cit9CisKK2ludCBzcGVleF9zdGRfc3RlcmVvX3JlcXVlc3RfaGFuZGxlcihTcGVleEJpdHMgKmJpdHMsIHZvaWQgKnN0YXRlLCB2b2lkICpkYXRhKQoreworICAgU3BlZXhTdGVyZW9TdGF0ZSAqc3RlcmVvOworICAgZmxvYXQgc2lnbj0xOworICAgaW50IHRtcDsKKworICAgc3RlcmVvID0gKFNwZWV4U3RlcmVvU3RhdGUqKWRhdGE7CisgICBpZiAoc3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgMSkpCisgICAgICBzaWduPS0xOworICAgdG1wID0gc3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgNSk7CisgICBzdGVyZW8tPmJhbGFuY2UgPSBleHAoc2lnbiouMjUqdG1wKTsKKworICAgdG1wID0gc3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgMik7CisgICBzdGVyZW8tPmVfcmF0aW8gPSBlX3JhdGlvX3F1YW50W3RtcF07CisKKyAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvdGVzdGRlbm9pc2UuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3Rlc3RkZW5vaXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2NDRjYgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3Rlc3RkZW5vaXNlLmMKQEAgLTAsMCArMSw0NCBAQAorI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3BlZXgvc3BlZXhfcHJlcHJvY2Vzcy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNkZWZpbmUgTk4gMTYwCisKK2ludCBtYWluKCkKK3sKKyAgIHNob3J0IGluW05OXTsKKyAgIGludCBpOworICAgU3BlZXhQcmVwcm9jZXNzU3RhdGUgKnN0OworICAgaW50IGNvdW50PTA7CisgICBmbG9hdCBmOworCisgICBzdCA9IHNwZWV4X3ByZXByb2Nlc3Nfc3RhdGVfaW5pdChOTiwgODAwMCk7CisgICBpPTE7CisgICBzcGVleF9wcmVwcm9jZXNzX2N0bChzdCwgU1BFRVhfUFJFUFJPQ0VTU19TRVRfREVOT0lTRSwgJmkpOworICAgaT0wOworICAgc3BlZXhfcHJlcHJvY2Vzc19jdGwoc3QsIFNQRUVYX1BSRVBST0NFU1NfU0VUX0FHQywgJmkpOworICAgZj04MDAwOworICAgc3BlZXhfcHJlcHJvY2Vzc19jdGwoc3QsIFNQRUVYX1BSRVBST0NFU1NfU0VUX0FHQ19MRVZFTCwgJmYpOworICAgaT0wOworICAgc3BlZXhfcHJlcHJvY2Vzc19jdGwoc3QsIFNQRUVYX1BSRVBST0NFU1NfU0VUX0RFUkVWRVJCLCAmaSk7CisgICBmPS4wOworICAgc3BlZXhfcHJlcHJvY2Vzc19jdGwoc3QsIFNQRUVYX1BSRVBST0NFU1NfU0VUX0RFUkVWRVJCX0RFQ0FZLCAmZik7CisgICBmPS4wOworICAgc3BlZXhfcHJlcHJvY2Vzc19jdGwoc3QsIFNQRUVYX1BSRVBST0NFU1NfU0VUX0RFUkVWRVJCX0xFVkVMLCAmZik7CisgICB3aGlsZSAoMSkKKyAgIHsKKyAgICAgIGludCB2YWQ7CisgICAgICBmcmVhZChpbiwgc2l6ZW9mKHNob3J0KSwgTk4sIHN0ZGluKTsKKyAgICAgIGlmIChmZW9mKHN0ZGluKSkKKyAgICAgICAgIGJyZWFrOworICAgICAgdmFkID0gc3BlZXhfcHJlcHJvY2Vzc19ydW4oc3QsIGluKTsKKyAgICAgIC8qZnByaW50ZiAoc3RkZXJyLCAiJWRcbiIsIHZhZCk7Ki8KKyAgICAgIGZ3cml0ZShpbiwgc2l6ZW9mKHNob3J0KSwgTk4sIHN0ZG91dCk7CisgICAgICBjb3VudCsrOworICAgfQorICAgc3BlZXhfcHJlcHJvY2Vzc19zdGF0ZV9kZXN0cm95KHN0KTsKKyAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvdGVzdGVjaG8uYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3Rlc3RlY2hvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MzMmM4ZgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3Rlc3RlY2hvLmMKQEAgLTAsMCArMSw1MyBAQAorI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAic3BlZXgvc3BlZXhfZWNoby5oIgorI2luY2x1ZGUgInNwZWV4L3NwZWV4X3ByZXByb2Nlc3MuaCIKKworCisjZGVmaW5lIE5OIDEyOAorI2RlZmluZSBUQUlMIDEwMjQKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgaW50IGVjaG9fZmQsIHJlZl9mZCwgZV9mZDsKKyAgIHNob3J0IGVjaG9fYnVmW05OXSwgcmVmX2J1ZltOTl0sIGVfYnVmW05OXTsKKyAgIFNwZWV4RWNob1N0YXRlICpzdDsKKyAgIFNwZWV4UHJlcHJvY2Vzc1N0YXRlICpkZW47CisKKyAgIGlmIChhcmdjICE9IDQpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJ0ZXN0ZWNobyBtaWNfc2lnbmFsLnN3IHNwZWFrZXJfc2lnbmFsLnN3IG91dHB1dC5zd1xuIik7CisgICAgICBleGl0KDEpOworICAgfQorICAgZWNob19mZCA9IG9wZW4gKGFyZ3ZbMl0sIE9fUkRPTkxZKTsKKyAgIHJlZl9mZCAgPSBvcGVuIChhcmd2WzFdLCAgT19SRE9OTFkpOworICAgZV9mZCAgICA9IG9wZW4gKGFyZ3ZbM10sIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NDQpOworCisgICBzdCA9IHNwZWV4X2VjaG9fc3RhdGVfaW5pdChOTiwgVEFJTCk7CisgICBkZW4gPSBzcGVleF9wcmVwcm9jZXNzX3N0YXRlX2luaXQoTk4sIDgwMDApOworICAgaW50IHRtcCA9IDgwMDA7CisgICBzcGVleF9lY2hvX2N0bChzdCwgU1BFRVhfRUNIT19TRVRfU0FNUExJTkdfUkFURSwgJnRtcCk7CisgICBzcGVleF9wcmVwcm9jZXNzX2N0bChkZW4sIFNQRUVYX1BSRVBST0NFU1NfU0VUX0VDSE9fU1RBVEUsIHN0KTsKKworICAgd2hpbGUgKHJlYWQocmVmX2ZkLCByZWZfYnVmLCBOTioyKSkKKyAgIHsKKyAgICAgIHJlYWQoZWNob19mZCwgZWNob19idWYsIE5OKjIpOworICAgICAgc3BlZXhfZWNob19jYW5jZWxsYXRpb24oc3QsIHJlZl9idWYsIGVjaG9fYnVmLCBlX2J1Zik7CisgICAgICBzcGVleF9wcmVwcm9jZXNzX3J1bihkZW4sIGVfYnVmKTsKKyAgICAgIHdyaXRlKGVfZmQsIGVfYnVmLCBOTioyKTsKKyAgIH0KKyAgIHNwZWV4X2VjaG9fc3RhdGVfZGVzdHJveShzdCk7CisgICBzcGVleF9wcmVwcm9jZXNzX3N0YXRlX2Rlc3Ryb3koZGVuKTsKKyAgIGNsb3NlKGVfZmQpOworICAgY2xvc2UoZWNob19mZCk7CisgICBjbG9zZShyZWZfZmQpOworICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC90ZXN0ZW5jLmMgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC90ZXN0ZW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiZDAyYwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3Rlc3RlbmMuYwpAQCAtMCwwICsxLDE0MiBAQAorI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3BlZXgvc3BlZXguaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHNwZWV4L3NwZWV4X2NhbGxiYWNrcy5oPgorCisjaWZkZWYgRklYRURfREVCVUcKK2V4dGVybiBsb25nIGxvbmcgc3B4X21pcHM7CisjZW5kaWYKKworI2RlZmluZSBGUkFNRV9TSVpFIDE2MAorI2luY2x1ZGUgPG1hdGguaD4KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgIGNoYXIgKmluRmlsZSwgKm91dEZpbGUsICpiaXRzRmlsZTsKKyAgIEZJTEUgKmZpbiwgKmZvdXQsICpmYml0cz1OVUxMOworICAgc2hvcnQgaW5fc2hvcnRbRlJBTUVfU0laRV07CisgICBzaG9ydCBvdXRfc2hvcnRbRlJBTUVfU0laRV07CisgICBmbG9hdCBzaWdwb3csZXJycG93LHNuciwgc2VnX3Nucj0wOworICAgaW50IHNucl9mcmFtZXMgPSAwOworICAgY2hhciBjYml0c1syMDBdOworICAgaW50IG5iQml0czsKKyAgIGludCBpOworICAgdm9pZCAqc3Q7CisgICB2b2lkICpkZWM7CisgICBTcGVleEJpdHMgYml0czsKKyAgIHNweF9pbnQzMl90IHRtcDsKKyAgIGludCBiaXRDb3VudD0wOworICAgc3B4X2ludDMyX3Qgc2tpcF9ncm91cF9kZWxheTsKKyAgIFNwZWV4Q2FsbGJhY2sgY2FsbGJhY2s7CisKKyAgIHNpZ3BvdyA9IDA7CisgICBlcnJwb3cgPSAwOworCisgICBzdCA9IHNwZWV4X2VuY29kZXJfaW5pdCgmc3BlZXhfbmJfbW9kZSk7CisgICBkZWMgPSBzcGVleF9kZWNvZGVyX2luaXQoJnNwZWV4X25iX21vZGUpOworCisgICAvKiBCRUdJTjogWW91IHByb2JhYmx5IGRvbid0IG5lZWQgdGhlIGZvbGxvd2luZyBpbiBhIHJlYWwgYXBwbGljYXRpb24gKi8KKyAgIGNhbGxiYWNrLmNhbGxiYWNrX2lkID0gU1BFRVhfSU5CQU5EX0NIQVI7CisgICBjYWxsYmFjay5mdW5jID0gc3BlZXhfc3RkX2NoYXJfaGFuZGxlcjsKKyAgIGNhbGxiYWNrLmRhdGEgPSBzdGRlcnI7CisgICBzcGVleF9kZWNvZGVyX2N0bChkZWMsIFNQRUVYX1NFVF9IQU5ETEVSLCAmY2FsbGJhY2spOworCisgICBjYWxsYmFjay5jYWxsYmFja19pZCA9IFNQRUVYX0lOQkFORF9NT0RFX1JFUVVFU1Q7CisgICBjYWxsYmFjay5mdW5jID0gc3BlZXhfc3RkX21vZGVfcmVxdWVzdF9oYW5kbGVyOworICAgY2FsbGJhY2suZGF0YSA9IHN0OworICAgc3BlZXhfZGVjb2Rlcl9jdGwoZGVjLCBTUEVFWF9TRVRfSEFORExFUiwgJmNhbGxiYWNrKTsKKyAgIC8qIEVORCBvZiB1bm5lY2Vzc2FyeSBzdHVmZiAqLworCisgICB0bXA9MTsKKyAgIHNwZWV4X2RlY29kZXJfY3RsKGRlYywgU1BFRVhfU0VUX0VOSCwgJnRtcCk7CisgICB0bXA9MDsKKyAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LCBTUEVFWF9TRVRfVkJSLCAmdG1wKTsKKyAgIHRtcD04OworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX1NFVF9RVUFMSVRZLCAmdG1wKTsKKyAgIHRtcD0xOworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX1NFVF9DT01QTEVYSVRZLCAmdG1wKTsKKworICAgLyogVHVybiB0aGlzIG9mZiBpZiB5b3Ugd2FudCB0byBtZWFzdXJlIFNOUiAob24gYnkgZGVmYXVsdCkgKi8KKyAgIHRtcD0xOworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX1NFVF9ISUdIUEFTUywgJnRtcCk7CisgICBzcGVleF9kZWNvZGVyX2N0bChkZWMsIFNQRUVYX1NFVF9ISUdIUEFTUywgJnRtcCk7CisKKyAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LCBTUEVFWF9HRVRfTE9PS0FIRUFELCAmc2tpcF9ncm91cF9kZWxheSk7CisgICBzcGVleF9kZWNvZGVyX2N0bChkZWMsIFNQRUVYX0dFVF9MT09LQUhFQUQsICZ0bXApOworICAgc2tpcF9ncm91cF9kZWxheSArPSB0bXA7CisKKyAgIGlmIChhcmdjICE9IDQgJiYgYXJnYyAhPSAzKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiVXNhZ2U6IGVuY29kZSBbaW4gZmlsZV0gW291dCBmaWxlXSBbYml0cyBmaWxlXVxuYXJnYyA9ICVkIiwgYXJnYyk7CisgICAgICBleGl0KDEpOworICAgfQorICAgaW5GaWxlID0gYXJndlsxXTsKKyAgIGZpbiA9IGZvcGVuKGluRmlsZSwgInIiKTsKKyAgIG91dEZpbGUgPSBhcmd2WzJdOworICAgZm91dCA9IGZvcGVuKG91dEZpbGUsICJ3KyIpOworICAgaWYgKGFyZ2M9PTQpCisgICB7CisgICAgICBiaXRzRmlsZSA9IGFyZ3ZbM107CisgICAgICBmYml0cyA9IGZvcGVuKGJpdHNGaWxlLCAidyIpOworICAgfQorICAgc3BlZXhfYml0c19pbml0KCZiaXRzKTsKKyAgIHdoaWxlICghZmVvZihmaW4pKQorICAgeworICAgICAgZnJlYWQoaW5fc2hvcnQsIHNpemVvZihzaG9ydCksIEZSQU1FX1NJWkUsIGZpbik7CisgICAgICBpZiAoZmVvZihmaW4pKQorICAgICAgICAgYnJlYWs7CisgICAgICBzcGVleF9iaXRzX3Jlc2V0KCZiaXRzKTsKKworICAgICAgc3BlZXhfZW5jb2RlX2ludChzdCwgaW5fc2hvcnQsICZiaXRzKTsKKyAgICAgIG5iQml0cyA9IHNwZWV4X2JpdHNfd3JpdGUoJmJpdHMsIGNiaXRzLCAyMDApOworICAgICAgYml0Q291bnQrPWJpdHMubmJCaXRzOworCisgICAgICBpZiAoYXJnYz09NCkKKyAgICAgICAgIGZ3cml0ZShjYml0cywgMSwgbmJCaXRzLCBmYml0cyk7CisgICAgICBzcGVleF9iaXRzX3Jld2luZCgmYml0cyk7CisKKyAgICAgIHNwZWV4X2RlY29kZV9pbnQoZGVjLCAmYml0cywgb3V0X3Nob3J0KTsKKyAgICAgIHNwZWV4X2JpdHNfcmVzZXQoJmJpdHMpOworCisgICAgICBmd3JpdGUoJm91dF9zaG9ydFtza2lwX2dyb3VwX2RlbGF5XSwgc2l6ZW9mKHNob3J0KSwgRlJBTUVfU0laRS1za2lwX2dyb3VwX2RlbGF5LCBmb3V0KTsKKyAgICAgIHNraXBfZ3JvdXBfZGVsYXkgPSAwOworICAgfQorICAgZnByaW50ZiAoc3RkZXJyLCAiVG90YWwgZW5jb2RlZCBzaXplOiAlZCBiaXRzXG4iLCBiaXRDb3VudCk7CisgICBzcGVleF9lbmNvZGVyX2Rlc3Ryb3koc3QpOworICAgc3BlZXhfZGVjb2Rlcl9kZXN0cm95KGRlYyk7CisgICBzcGVleF9iaXRzX2Rlc3Ryb3koJmJpdHMpOworCisgICAvKiBUaGlzIGNvZGUganVzdCBjb21wdXRlcyBTTlIsIHNvIHlvdSBkb24ndCBuZWVkIGl0IGVpdGhlciAqLworICAgcmV3aW5kKGZpbik7CisgICByZXdpbmQoZm91dCk7CisKKyAgIHdoaWxlICggRlJBTUVfU0laRSA9PSBmcmVhZChpbl9zaG9ydCwgc2l6ZW9mKHNob3J0KSwgRlJBTUVfU0laRSwgZmluKSAKKyAgICAgICAgICAgJiYKKyAgICAgICAgICAgRlJBTUVfU0laRSA9PSAgZnJlYWQob3V0X3Nob3J0LCBzaXplb2Yoc2hvcnQpLCBGUkFNRV9TSVpFLGZvdXQpICkKKyAgIHsKKwlmbG9hdCBzPTAsIGU9MDsKKyAgICAgICAgZm9yIChpPTA7aTxGUkFNRV9TSVpFOysraSkgeworICAgICAgICAgICAgcyArPSAoZmxvYXQpaW5fc2hvcnRbaV0gKiBpbl9zaG9ydFtpXTsKKyAgICAgICAgICAgIGUgKz0gKChmbG9hdClpbl9zaG9ydFtpXS1vdXRfc2hvcnRbaV0pICogKChmbG9hdClpbl9zaG9ydFtpXS1vdXRfc2hvcnRbaV0pOworICAgICAgICB9CisJc2VnX3NuciArPSAxMCpsb2cxMCgocysxNjApLyhlKzE2MCkpOworCXNpZ3BvdyArPSBzOworCWVycnBvdyArPSBlOworCXNucl9mcmFtZXMrKzsKKyAgIH0KKyAgIGZjbG9zZShmaW4pOworICAgZmNsb3NlKGZvdXQpOworCisgICBzbnIgPSAxMCAqIGxvZzEwKCBzaWdwb3cgLyBlcnJwb3cgKTsKKyAgIHNlZ19zbnIgLz0gc25yX2ZyYW1lczsKKyAgIGZwcmludGYoc3RkZXJyLCJTTlIgPSAlZlxuc2VnbWVudGFsIFNOUiA9ICVmXG4iLHNuciwgc2VnX3Nucik7CisKKyNpZmRlZiBGSVhFRF9ERUJVRworICAgcHJpbnRmICgiVG90YWw6ICVmIE1JUFNcbiIsIChmbG9hdCkoMWUtNio1MCpzcHhfbWlwcy9zbnJfZnJhbWVzKSk7CisjZW5kaWYKKyAgIAorICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC90ZXN0ZW5jX3V3Yi5jIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvdGVzdGVuY191d2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWJmMThhCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvdGVzdGVuY191d2IuYwpAQCAtMCwwICsxLDEzNyBAQAorI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3BlZXgvc3BlZXguaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHNwZWV4L3NwZWV4X2NhbGxiYWNrcy5oPgorCisjaWZkZWYgRklYRURfREVCVUcKK2V4dGVybiBsb25nIGxvbmcgc3B4X21pcHM7CisjZW5kaWYKKworI2RlZmluZSBGUkFNRV9TSVpFIDY0MAorI2luY2x1ZGUgPG1hdGguaD4KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgIGNoYXIgKmluRmlsZSwgKm91dEZpbGUsICpiaXRzRmlsZTsKKyAgIEZJTEUgKmZpbiwgKmZvdXQsICpmYml0cz1OVUxMOworICAgc2hvcnQgaW5fc2hvcnRbRlJBTUVfU0laRV07CisgICBzaG9ydCBvdXRfc2hvcnRbRlJBTUVfU0laRV07CisgICBmbG9hdCBpbl9mbG9hdFtGUkFNRV9TSVpFXTsKKyAgIGZsb2F0IHNpZ3BvdyxlcnJwb3csc25yLCBzZWdfc25yPTA7CisgICBpbnQgc25yX2ZyYW1lcyA9IDA7CisgICBjaGFyIGNiaXRzWzIwMF07CisgICBpbnQgbmJCaXRzOworICAgaW50IGk7CisgICB2b2lkICpzdDsKKyAgIHZvaWQgKmRlYzsKKyAgIFNwZWV4Qml0cyBiaXRzOworICAgc3B4X2ludDMyX3QgdG1wOworICAgaW50IGJpdENvdW50PTA7CisgICBzcHhfaW50MzJfdCBza2lwX2dyb3VwX2RlbGF5OworICAgU3BlZXhDYWxsYmFjayBjYWxsYmFjazsKKworICAgc2lncG93ID0gMDsKKyAgIGVycnBvdyA9IDA7CisKKyAgIHN0ID0gc3BlZXhfZW5jb2Rlcl9pbml0KCZzcGVleF91d2JfbW9kZSk7CisgICBkZWMgPSBzcGVleF9kZWNvZGVyX2luaXQoJnNwZWV4X3V3Yl9tb2RlKTsKKworICAgY2FsbGJhY2suY2FsbGJhY2tfaWQgPSBTUEVFWF9JTkJBTkRfQ0hBUjsKKyAgIGNhbGxiYWNrLmZ1bmMgPSBzcGVleF9zdGRfY2hhcl9oYW5kbGVyOworICAgY2FsbGJhY2suZGF0YSA9IHN0ZGVycjsKKyAgIHNwZWV4X2RlY29kZXJfY3RsKGRlYywgU1BFRVhfU0VUX0hBTkRMRVIsICZjYWxsYmFjayk7CisKKyAgIGNhbGxiYWNrLmNhbGxiYWNrX2lkID0gU1BFRVhfSU5CQU5EX01PREVfUkVRVUVTVDsKKyAgIGNhbGxiYWNrLmZ1bmMgPSBzcGVleF9zdGRfbW9kZV9yZXF1ZXN0X2hhbmRsZXI7CisgICBjYWxsYmFjay5kYXRhID0gc3Q7CisgICBzcGVleF9kZWNvZGVyX2N0bChkZWMsIFNQRUVYX1NFVF9IQU5ETEVSLCAmY2FsbGJhY2spOworCisgICB0bXA9MDsKKyAgIHNwZWV4X2RlY29kZXJfY3RsKGRlYywgU1BFRVhfU0VUX0VOSCwgJnRtcCk7CisgICB0bXA9MDsKKyAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LCBTUEVFWF9TRVRfVkJSLCAmdG1wKTsKKyAgIHRtcD03OworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX1NFVF9RVUFMSVRZLCAmdG1wKTsKKyAgIHRtcD0xOworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX1NFVF9DT01QTEVYSVRZLCAmdG1wKTsKKworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX0dFVF9MT09LQUhFQUQsICZza2lwX2dyb3VwX2RlbGF5KTsKKyAgIHNwZWV4X2RlY29kZXJfY3RsKGRlYywgU1BFRVhfR0VUX0xPT0tBSEVBRCwgJnRtcCk7CisgICBza2lwX2dyb3VwX2RlbGF5ICs9IHRtcDsKKworCisgICBpZiAoYXJnYyAhPSA0ICYmIGFyZ2MgIT0gMykKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlVzYWdlOiBlbmNvZGUgW2luIGZpbGVdIFtvdXQgZmlsZV0gW2JpdHMgZmlsZV1cbmFyZ2MgPSAlZCIsIGFyZ2MpOworICAgICAgZXhpdCgxKTsKKyAgIH0KKyAgIGluRmlsZSA9IGFyZ3ZbMV07CisgICBmaW4gPSBmb3BlbihpbkZpbGUsICJyIik7CisgICBvdXRGaWxlID0gYXJndlsyXTsKKyAgIGZvdXQgPSBmb3BlbihvdXRGaWxlLCAidysiKTsKKyAgIGlmIChhcmdjPT00KQorICAgeworICAgICAgYml0c0ZpbGUgPSBhcmd2WzNdOworICAgICAgZmJpdHMgPSBmb3BlbihiaXRzRmlsZSwgInciKTsKKyAgIH0KKyAgIHNwZWV4X2JpdHNfaW5pdCgmYml0cyk7CisgICB3aGlsZSAoIWZlb2YoZmluKSkKKyAgIHsKKyAgICAgIGZyZWFkKGluX3Nob3J0LCBzaXplb2Yoc2hvcnQpLCBGUkFNRV9TSVpFLCBmaW4pOworICAgICAgaWYgKGZlb2YoZmluKSkKKyAgICAgICAgIGJyZWFrOworICAgICAgZm9yIChpPTA7aTxGUkFNRV9TSVpFO2krKykKKyAgICAgICAgIGluX2Zsb2F0W2ldPWluX3Nob3J0W2ldOworICAgICAgc3BlZXhfYml0c19yZXNldCgmYml0cyk7CisKKyAgICAgIHNwZWV4X2VuY29kZV9pbnQoc3QsIGluX3Nob3J0LCAmYml0cyk7CisgICAgICBuYkJpdHMgPSBzcGVleF9iaXRzX3dyaXRlKCZiaXRzLCBjYml0cywgMjAwKTsKKyAgICAgIGJpdENvdW50Kz1iaXRzLm5iQml0czsKKworICAgICAgaWYgKGFyZ2M9PTQpCisgICAgICAgICBmd3JpdGUoY2JpdHMsIDEsIG5iQml0cywgZmJpdHMpOworICAgICAgc3BlZXhfYml0c19yZXdpbmQoJmJpdHMpOworCisgICAgICBzcGVleF9kZWNvZGVfaW50KGRlYywgJmJpdHMsIG91dF9zaG9ydCk7CisgICAgICBzcGVleF9iaXRzX3Jlc2V0KCZiaXRzKTsKKworICAgICAgZndyaXRlKCZvdXRfc2hvcnRbc2tpcF9ncm91cF9kZWxheV0sIHNpemVvZihzaG9ydCksIEZSQU1FX1NJWkUtc2tpcF9ncm91cF9kZWxheSwgZm91dCk7CisgICAgICBza2lwX2dyb3VwX2RlbGF5ID0gMDsKKyAgIH0KKyAgIGZwcmludGYgKHN0ZGVyciwgIlRvdGFsIGVuY29kZWQgc2l6ZTogJWQgYml0c1xuIiwgYml0Q291bnQpOworICAgc3BlZXhfZW5jb2Rlcl9kZXN0cm95KHN0KTsKKyAgIHNwZWV4X2RlY29kZXJfZGVzdHJveShkZWMpOworCisgICByZXdpbmQoZmluKTsKKyAgIHJld2luZChmb3V0KTsKKworICAgd2hpbGUgKCBGUkFNRV9TSVpFID09IGZyZWFkKGluX3Nob3J0LCBzaXplb2Yoc2hvcnQpLCBGUkFNRV9TSVpFLCBmaW4pIAorICAgICAgICAgICAmJgorICAgICAgICAgICBGUkFNRV9TSVpFID09ICBmcmVhZChvdXRfc2hvcnQsIHNpemVvZihzaG9ydCksIEZSQU1FX1NJWkUsZm91dCkgKQorICAgeworCWZsb2F0IHM9MCwgZT0wOworICAgICAgICBmb3IgKGk9MDtpPEZSQU1FX1NJWkU7KytpKSB7CisgICAgICAgICAgICBzICs9IChmbG9hdClpbl9zaG9ydFtpXSAqIGluX3Nob3J0W2ldOworICAgICAgICAgICAgZSArPSAoKGZsb2F0KWluX3Nob3J0W2ldLW91dF9zaG9ydFtpXSkgKiAoKGZsb2F0KWluX3Nob3J0W2ldLW91dF9zaG9ydFtpXSk7CisgICAgICAgIH0KKwlzZWdfc25yICs9IDEwKmxvZzEwKChzKzEpLyhlKzEpKTsKKwlzaWdwb3cgKz0gczsKKwllcnJwb3cgKz0gZTsKKwlzbnJfZnJhbWVzKys7CisgICB9CisgICBmY2xvc2UoZmluKTsKKyAgIGZjbG9zZShmb3V0KTsKKworICAgc25yID0gMTAgKiBsb2cxMCggc2lncG93IC8gZXJycG93ICk7CisgICBzZWdfc25yIC89IHNucl9mcmFtZXM7CisgICBmcHJpbnRmKHN0ZGVyciwiU05SID0gJWZcbnNlZ21lbnRhbCBTTlIgPSAlZlxuIixzbnIsIHNlZ19zbnIpOworCisjaWZkZWYgRklYRURfREVCVUcKKyAgIHByaW50ZiAoIlRvdGFsOiAlZiBNSVBTXG4iLCAoZmxvYXQpKDFlLTYqNTAqc3B4X21pcHMvc25yX2ZyYW1lcykpOworI2VuZGlmCisgICAKKyAgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvdGVzdGVuY193Yi5jIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvdGVzdGVuY193Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTE1Y2IKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC90ZXN0ZW5jX3diLmMKQEAgLTAsMCArMSwxNDMgQEAKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHNwZWV4L3NwZWV4Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzcGVleC9zcGVleF9jYWxsYmFja3MuaD4KKworI2lmZGVmIEZJWEVEX0RFQlVHCitleHRlcm4gbG9uZyBsb25nIHNweF9taXBzOworI2VuZGlmCisKKyNkZWZpbmUgRlJBTUVfU0laRSAzMjAKKyNpbmNsdWRlIDxtYXRoLmg+CitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICBjaGFyICppbkZpbGUsICpvdXRGaWxlLCAqYml0c0ZpbGU7CisgICBGSUxFICpmaW4sICpmb3V0LCAqZmJpdHM9TlVMTDsKKyAgIHNob3J0IGluX3Nob3J0W0ZSQU1FX1NJWkVdOworICAgc2hvcnQgb3V0X3Nob3J0W0ZSQU1FX1NJWkVdOworICAgZmxvYXQgaW5fZmxvYXRbRlJBTUVfU0laRV07CisgICBmbG9hdCBzaWdwb3csZXJycG93LHNuciwgc2VnX3Nucj0wOworICAgaW50IHNucl9mcmFtZXMgPSAwOworICAgY2hhciBjYml0c1syMDBdOworICAgaW50IG5iQml0czsKKyAgIGludCBpOworICAgdm9pZCAqc3Q7CisgICB2b2lkICpkZWM7CisgICBTcGVleEJpdHMgYml0czsKKyAgIHNweF9pbnQzMl90IHRtcDsKKyAgIGludCBiaXRDb3VudD0wOworICAgc3B4X2ludDMyX3Qgc2tpcF9ncm91cF9kZWxheTsKKyAgIFNwZWV4Q2FsbGJhY2sgY2FsbGJhY2s7CisKKyAgIHNpZ3BvdyA9IDA7CisgICBlcnJwb3cgPSAwOworCisgICBzdCA9IHNwZWV4X2VuY29kZXJfaW5pdCgmc3BlZXhfd2JfbW9kZSk7CisgICBkZWMgPSBzcGVleF9kZWNvZGVyX2luaXQoJnNwZWV4X3diX21vZGUpOworCisgICBjYWxsYmFjay5jYWxsYmFja19pZCA9IFNQRUVYX0lOQkFORF9DSEFSOworICAgY2FsbGJhY2suZnVuYyA9IHNwZWV4X3N0ZF9jaGFyX2hhbmRsZXI7CisgICBjYWxsYmFjay5kYXRhID0gc3RkZXJyOworICAgc3BlZXhfZGVjb2Rlcl9jdGwoZGVjLCBTUEVFWF9TRVRfSEFORExFUiwgJmNhbGxiYWNrKTsKKworICAgY2FsbGJhY2suY2FsbGJhY2tfaWQgPSBTUEVFWF9JTkJBTkRfTU9ERV9SRVFVRVNUOworICAgY2FsbGJhY2suZnVuYyA9IHNwZWV4X3N0ZF9tb2RlX3JlcXVlc3RfaGFuZGxlcjsKKyAgIGNhbGxiYWNrLmRhdGEgPSBzdDsKKyAgIHNwZWV4X2RlY29kZXJfY3RsKGRlYywgU1BFRVhfU0VUX0hBTkRMRVIsICZjYWxsYmFjayk7CisKKyAgIHRtcD0xOworICAgc3BlZXhfZGVjb2Rlcl9jdGwoZGVjLCBTUEVFWF9TRVRfRU5ILCAmdG1wKTsKKyAgIHRtcD0wOworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX1NFVF9WQlIsICZ0bXApOworICAgdG1wPTg7CisgICBzcGVleF9lbmNvZGVyX2N0bChzdCwgU1BFRVhfU0VUX1FVQUxJVFksICZ0bXApOworICAgdG1wPTM7CisgICBzcGVleF9lbmNvZGVyX2N0bChzdCwgU1BFRVhfU0VUX0NPTVBMRVhJVFksICZ0bXApOworICAgLyp0bXA9MzsKKyAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LCBTUEVFWF9TRVRfSElHSF9NT0RFLCAmdG1wKTsKKyAgIHRtcD02OworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX1NFVF9MT1dfTU9ERSwgJnRtcCk7CisqLworCisgICBzcGVleF9lbmNvZGVyX2N0bChzdCwgU1BFRVhfR0VUX0xPT0tBSEVBRCwgJnNraXBfZ3JvdXBfZGVsYXkpOworICAgc3BlZXhfZGVjb2Rlcl9jdGwoZGVjLCBTUEVFWF9HRVRfTE9PS0FIRUFELCAmdG1wKTsKKyAgIHNraXBfZ3JvdXBfZGVsYXkgKz0gdG1wOworCisKKyAgIGlmIChhcmdjICE9IDQgJiYgYXJnYyAhPSAzKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiVXNhZ2U6IGVuY29kZSBbaW4gZmlsZV0gW291dCBmaWxlXSBbYml0cyBmaWxlXVxuYXJnYyA9ICVkIiwgYXJnYyk7CisgICAgICBleGl0KDEpOworICAgfQorICAgaW5GaWxlID0gYXJndlsxXTsKKyAgIGZpbiA9IGZvcGVuKGluRmlsZSwgInIiKTsKKyAgIG91dEZpbGUgPSBhcmd2WzJdOworICAgZm91dCA9IGZvcGVuKG91dEZpbGUsICJ3KyIpOworICAgaWYgKGFyZ2M9PTQpCisgICB7CisgICAgICBiaXRzRmlsZSA9IGFyZ3ZbM107CisgICAgICBmYml0cyA9IGZvcGVuKGJpdHNGaWxlLCAidyIpOworICAgfQorICAgc3BlZXhfYml0c19pbml0KCZiaXRzKTsKKyAgIHdoaWxlICghZmVvZihmaW4pKQorICAgeworICAgICAgZnJlYWQoaW5fc2hvcnQsIHNpemVvZihzaG9ydCksIEZSQU1FX1NJWkUsIGZpbik7CisgICAgICBpZiAoZmVvZihmaW4pKQorICAgICAgICAgYnJlYWs7CisgICAgICBmb3IgKGk9MDtpPEZSQU1FX1NJWkU7aSsrKQorICAgICAgICAgaW5fZmxvYXRbaV09aW5fc2hvcnRbaV07CisgICAgICBzcGVleF9iaXRzX3Jlc2V0KCZiaXRzKTsKKworICAgICAgc3BlZXhfZW5jb2RlX2ludChzdCwgaW5fc2hvcnQsICZiaXRzKTsKKyAgICAgIG5iQml0cyA9IHNwZWV4X2JpdHNfd3JpdGUoJmJpdHMsIGNiaXRzLCAyMDApOworICAgICAgYml0Q291bnQrPWJpdHMubmJCaXRzOworCisgICAgICBpZiAoYXJnYz09NCkKKyAgICAgICAgIGZ3cml0ZShjYml0cywgMSwgbmJCaXRzLCBmYml0cyk7CisgICAgICBzcGVleF9iaXRzX3Jld2luZCgmYml0cyk7CisKKyAgICAgIHNwZWV4X2RlY29kZV9pbnQoZGVjLCAmYml0cywgb3V0X3Nob3J0KTsKKyAgICAgIHNwZWV4X2JpdHNfcmVzZXQoJmJpdHMpOworCisgICAgICBmd3JpdGUoJm91dF9zaG9ydFtza2lwX2dyb3VwX2RlbGF5XSwgc2l6ZW9mKHNob3J0KSwgRlJBTUVfU0laRS1za2lwX2dyb3VwX2RlbGF5LCBmb3V0KTsKKyAgICAgIHNraXBfZ3JvdXBfZGVsYXkgPSAwOworICAgfQorICAgZnByaW50ZiAoc3RkZXJyLCAiVG90YWwgZW5jb2RlZCBzaXplOiAlZCBiaXRzXG4iLCBiaXRDb3VudCk7CisgICBzcGVleF9lbmNvZGVyX2Rlc3Ryb3koc3QpOworICAgc3BlZXhfZGVjb2Rlcl9kZXN0cm95KGRlYyk7CisgICBzcGVleF9iaXRzX2Rlc3Ryb3koJmJpdHMpOworCisgICByZXdpbmQoZmluKTsKKyAgIHJld2luZChmb3V0KTsKKworICAgd2hpbGUgKCBGUkFNRV9TSVpFID09IGZyZWFkKGluX3Nob3J0LCBzaXplb2Yoc2hvcnQpLCBGUkFNRV9TSVpFLCBmaW4pIAorICAgICAgICAgICAmJgorICAgICAgICAgICBGUkFNRV9TSVpFID09ICBmcmVhZChvdXRfc2hvcnQsIHNpemVvZihzaG9ydCksIEZSQU1FX1NJWkUsZm91dCkgKQorICAgeworCWZsb2F0IHM9MCwgZT0wOworICAgICAgICBmb3IgKGk9MDtpPEZSQU1FX1NJWkU7KytpKSB7CisgICAgICAgICAgICBzICs9IChmbG9hdClpbl9zaG9ydFtpXSAqIGluX3Nob3J0W2ldOworICAgICAgICAgICAgZSArPSAoKGZsb2F0KWluX3Nob3J0W2ldLW91dF9zaG9ydFtpXSkgKiAoKGZsb2F0KWluX3Nob3J0W2ldLW91dF9zaG9ydFtpXSk7CisgICAgICAgIH0KKwlzZWdfc25yICs9IDEwKmxvZzEwKChzKzE2MCkvKGUrMTYwKSk7CisJc2lncG93ICs9IHM7CisJZXJycG93ICs9IGU7CisJc25yX2ZyYW1lcysrOworICAgfQorICAgZmNsb3NlKGZpbik7CisgICBmY2xvc2UoZm91dCk7CisKKyAgIHNuciA9IDEwICogbG9nMTAoIHNpZ3BvdyAvIGVycnBvdyApOworICAgc2VnX3NuciAvPSBzbnJfZnJhbWVzOworICAgZnByaW50ZihzdGRlcnIsIlNOUiA9ICVmXG5zZWdtZW50YWwgU05SID0gJWZcbiIsc25yLCBzZWdfc25yKTsKKworI2lmZGVmIEZJWEVEX0RFQlVHCisgICBwcmludGYgKCJUb3RhbDogJWYgTUlQU1xuIiwgKGZsb2F0KSgxZS02KjUwKnNweF9taXBzL3Nucl9mcmFtZXMpKTsKKyNlbmRpZgorICAgCisgICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3Rlc3RyZXNhbXBsZS5jIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvdGVzdHJlc2FtcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUwMjQ3OQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3Rlc3RyZXNhbXBsZS5jCkBAIC0wLDAgKzEsODYgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNyBKZWFuLU1hcmMgVmFsaW4KKyAgICAgIAorICAgRmlsZTogdGVzdHJlc2FtcGxlLmMKKyAgIFRlc3RpbmcgdGhlIHJlc2FtcGxpbmcgY29kZQorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAgIG1ldDoKKworICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgICBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgICBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgICBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInNwZWV4L3NwZWV4X3Jlc2FtcGxlci5oIgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBOTiAyNTYKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgaW50IGk7CisgICBzaG9ydCAqaW47CisgICBzaG9ydCAqb3V0OworICAgZmxvYXQgKmZpbiwgKmZvdXQ7CisgICBpbnQgY291bnQgPSAwOworICAgU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QgPSBzcGVleF9yZXNhbXBsZXJfaW5pdCgxLCA4MDAwLCAxMjAwMCwgMTApOworICAgc3BlZXhfcmVzYW1wbGVyX3NldF9yYXRlKHN0LCA4MDAwLCAxNTk5OSk7CisgICBzcGVleF9yZXNhbXBsZXJfc2tpcF96ZXJvcyhzdCk7CisgICAKKyAgIGluID0gbWFsbG9jKE5OKnNpemVvZihzaG9ydCkpOworICAgb3V0ID0gbWFsbG9jKDIqTk4qc2l6ZW9mKHNob3J0KSk7CisgICBmaW4gPSBtYWxsb2MoTk4qc2l6ZW9mKGZsb2F0KSk7CisgICBmb3V0ID0gbWFsbG9jKDIqTk4qc2l6ZW9mKGZsb2F0KSk7CisgICB3aGlsZSAoMSkKKyAgIHsKKyAgICAgIGludCBpbl9sZW47CisgICAgICBpbnQgb3V0X2xlbjsKKyAgICAgIGZyZWFkKGluLCBzaXplb2Yoc2hvcnQpLCBOTiwgc3RkaW4pOworICAgICAgaWYgKGZlb2Yoc3RkaW4pKQorICAgICAgICAgYnJlYWs7CisgICAgICBmb3IgKGk9MDtpPE5OO2krKykKKyAgICAgICAgIGZpbltpXT1pbltpXTsKKyAgICAgIGluX2xlbiA9IE5OOworICAgICAgb3V0X2xlbiA9IDIqTk47CisgICAgICAvKmlmIChjb3VudD09MikKKyAgICAgICAgIHNwZWV4X3Jlc2FtcGxlcl9zZXRfcXVhbGl0eShzdCwgMTApOyovCisgICAgICBzcGVleF9yZXNhbXBsZXJfcHJvY2Vzc19mbG9hdChzdCwgMCwgZmluLCAmaW5fbGVuLCBmb3V0LCAmb3V0X2xlbik7CisgICAgICBmb3IgKGk9MDtpPG91dF9sZW47aSsrKQorICAgICAgICAgb3V0W2ldPWZsb29yKC41K2ZvdXRbaV0pOworICAgICAgLypzcGVleF93YXJuaW5nX2ludCgid3JpdGluZyIsIG91dF9sZW4pOyovCisgICAgICBmd3JpdGUob3V0LCBzaXplb2Yoc2hvcnQpLCBvdXRfbGVuLCBzdGRvdXQpOworICAgICAgY291bnQrKzsKKyAgIH0KKyAgIHNwZWV4X3Jlc2FtcGxlcl9kZXN0cm95KHN0KTsKKyAgIGZyZWUoaW4pOworICAgZnJlZShvdXQpOworICAgZnJlZShmaW4pOworICAgZnJlZShmb3V0KTsKKyAgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC92YnIuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3Zici5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNGVjMGYKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC92YnIuYwpAQCAtMCwwICsxLDI3MiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAKKyAgIEZpbGU6IHZici5jCisKKyAgIFZCUi1yZWxhdGVkIHJvdXRpbmVzCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ2YnIuaCIKKyNpbmNsdWRlIDxtYXRoLmg+CisKKworI2RlZmluZSBzcXIoeCkgKCh4KSooeCkpCisKKyNkZWZpbmUgTUlOX0VORVJHWSA2MDAwCisjZGVmaW5lIE5PSVNFX1BPVyAuMworCisKK2NvbnN0IGZsb2F0IHZicl9uYl90aHJlc2hbOV1bMTFdPXsKKyAgIHstMS4wZiwgLTEuMGYsIC0xLjBmLCAtMS4wZiwgLTEuMGYsIC0xLjBmLCAtMS4wZiwgLTEuMGYsIC0xLjBmLCAtMS4wZiwgLTEuMGZ9LCAvKiAgIENORyAgICovCisgICB7IDMuNWYsICAyLjVmLCAgMi4wZiwgIDEuMmYsICAwLjVmLCAgMC4wZiwgLTAuNWYsIC0wLjdmLCAtMC44ZiwgLTAuOWYsIC0xLjBmfSwgLyogIDIga2JwcyAqLworICAgezEwLjBmLCAgNi41ZiwgIDUuMmYsICA0LjVmLCAgMy45ZiwgIDMuNWYsICAzLjBmLCAgMi41ZiwgIDIuM2YsICAxLjhmLCAgMS4wZn0sIC8qICA2IGticHMgKi8KKyAgIHsxMS4wZiwgIDguOGYsICA3LjVmLCAgNi41ZiwgIDUuMGYsICAzLjlmLCAgMy45ZiwgIDMuOWYsICAzLjVmLCAgMy4wZiwgIDEuMGZ9LCAvKiAgOCBrYnBzICovCisgICB7MTEuMGYsIDExLjBmLCAgOS45ZiwgIDkuMGYsICA4LjBmLCAgNy4wZiwgIDYuNWYsICA2LjBmLCAgNS4wZiwgIDQuMGYsICAyLjBmfSwgLyogMTEga2JwcyAqLworICAgezExLjBmLCAxMS4wZiwgMTEuMGYsIDExLjBmLCAgOS41ZiwgIDkuMGYsICA4LjBmLCAgNy4wZiwgIDYuNWYsICA1LjBmLCAgMy4wZn0sIC8qIDE1IGticHMgKi8KKyAgIHsxMS4wZiwgMTEuMGYsIDExLjBmLCAxMS4wZiwgMTEuMGYsIDExLjBmLCAgOS41ZiwgIDguNWYsICA4LjBmLCAgNi41ZiwgIDQuMGZ9LCAvKiAxOCBrYnBzICovCisgICB7MTEuMGYsIDExLjBmLCAxMS4wZiwgMTEuMGYsIDExLjBmLCAxMS4wZiwgMTEuMGYsIDExLjBmLCAgOS44ZiwgIDcuNWYsICA1LjVmfSwgLyogMjQga2JwcyAqLyAKKyAgIHsgOC4wZiwgIDUuMGYsICAzLjdmLCAgMy4wZiwgIDIuNWYsICAyLjBmLCAgMS44ZiwgIDEuNWYsICAxLjBmLCAgMC4wZiwgIDAuMGZ9ICAvKiAgNCBrYnBzICovCit9OworCisKK2NvbnN0IGZsb2F0IHZicl9oYl90aHJlc2hbNV1bMTFdPXsKKyAgIHstMS4wZiwgLTEuMGYsIC0xLjBmLCAtMS4wZiwgLTEuMGYsIC0xLjBmLCAtMS4wZiwgLTEuMGYsIC0xLjBmLCAtMS4wZiwgLTEuMGZ9LCAvKiBzaWxlbmNlICovCisgICB7LTEuMGYsIC0xLjBmLCAtMS4wZiwgLTEuMGYsIC0xLjBmLCAtMS4wZiwgLTEuMGYsIC0xLjBmLCAtMS4wZiwgLTEuMGYsIC0xLjBmfSwgLyogIDIga2JwcyAqLworICAgezExLjBmLCAxMS4wZiwgIDkuNWYsICA4LjVmLCAgNy41ZiwgIDYuMGYsICA1LjBmLCAgMy45ZiwgIDMuMGYsICAyLjBmLCAgMS4wZn0sIC8qICA2IGticHMgKi8KKyAgIHsxMS4wZiwgMTEuMGYsIDExLjBmLCAxMS4wZiwgMTEuMGYsICA5LjVmLCAgOC43ZiwgIDcuOGYsICA3LjBmLCAgNi41ZiwgIDQuMGZ9LCAvKiAxMCBrYnBzICovCisgICB7MTEuMGYsIDExLjBmLCAxMS4wZiwgMTEuMGYsIDExLjBmLCAxMS4wZiwgMTEuMGYsIDExLjBmLCAgOS44ZiwgIDcuNWYsICA1LjVmfSAgLyogMTgga2JwcyAqLyAKK307CisKK2NvbnN0IGZsb2F0IHZicl91aGJfdGhyZXNoWzJdWzExXT17CisgICB7LTEuMGYsIC0xLjBmLCAtMS4wZiwgLTEuMGYsIC0xLjBmLCAtMS4wZiwgLTEuMGYsIC0xLjBmLCAtMS4wZiwgLTEuMGYsIC0xLjBmfSwgLyogc2lsZW5jZSAqLworICAgeyAzLjlmLCAgMi41ZiwgIDAuMGYsICAwLjBmLCAgMC4wZiwgIDAuMGYsICAwLjBmLCAgMC4wZiwgIDAuMGYsICAwLjBmLCAtMS4wZn0gIC8qICAyIGticHMgKi8KK307CisKK3ZvaWQgdmJyX2luaXQoVkJSU3RhdGUgKnZicikKK3sKKyAgIGludCBpOworCisgICB2YnItPmF2ZXJhZ2VfZW5lcmd5PTA7CisgICB2YnItPmxhc3RfZW5lcmd5PTE7CisgICB2YnItPmFjY3VtX3N1bT0wOworICAgdmJyLT5lbmVyZ3lfYWxwaGE9LjE7CisgICB2YnItPnNvZnRfcGl0Y2g9MDsKKyAgIHZici0+bGFzdF9waXRjaF9jb2VmPTA7CisgICB2YnItPmxhc3RfcXVhbGl0eT0wOworCisgICB2YnItPm5vaXNlX2FjY3VtID0gLjA1KnBvdyhNSU5fRU5FUkdZLCBOT0lTRV9QT1cpOworICAgdmJyLT5ub2lzZV9hY2N1bV9jb3VudD0uMDU7CisgICB2YnItPm5vaXNlX2xldmVsPXZici0+bm9pc2VfYWNjdW0vdmJyLT5ub2lzZV9hY2N1bV9jb3VudDsKKyAgIHZici0+Y29uc2VjX25vaXNlPTA7CisKKworICAgZm9yIChpPTA7aTxWQlJfTUVNT1JZX1NJWkU7aSsrKQorICAgICAgdmJyLT5sYXN0X2xvZ19lbmVyZ3lbaV0gPSBsb2coTUlOX0VORVJHWSk7Cit9CisKKworLyoKKyAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYW5hbHlzZSB0aGUgc2lnbmFsIGFuZCBkZWNpZGUgaG93IGNyaXRpY2FsIHRoZQorICBjb2RpbmcgZXJyb3Igd2lsbCBiZSBwZXJjZXB0dWFsbHkuIFRoZSBmb2xsb3dpbmcgZmFjdG9ycyBzaG91bGQgYmUKKyAgdGFrZW4gaW50byBhY2NvdW50OgorCisgIC1BdHRhY2tzIChwb3NpdGl2ZSBlbmVyZ3kgZGVyaXZhdGl2ZSkgc2hvdWxkIGJlIGNvZGVkIHdpdGggbW9yZSBiaXRzCisKKyAgLVN0YXRpb25hcnkgdm9pY2VkIHNlZ21lbnRzIHNob3VsZCByZWNlaXZlIG1vcmUgYml0cworCisgIC1TZWdtZW50cyB3aXRoICh2ZXJ5KSBsb3cgYWJzb2x1dGUgZW5lcmd5IHNob3VsZCByZWNlaXZlIGxlc3MgYml0cyAobWF5YmUKKyAgb25seSBzaGFwZWQgbm9pc2U/KQorCisgIC1EVFggZm9yIG5lYXItemVybyBlbmVyZ3k/CisKKyAgLVN0YXRpb25hcnkgZnJpY2F0aXZlIHNlZ21lbnRzIHNob3VsZCBoYXZlIGxlc3MgYml0cworCisgIC1UZW1wb3JhbCBtYXNraW5nOiB3aGVuIGVuZXJneSBzbG9wZSBpcyBkZWNyZWFzaW5nLCBkZWNyZWFzZSB0aGUgYml0LXJhdGUKKworICAtRGVjcmVhc2UgYml0LXJhdGUgZm9yIG1hbGVzIChsb3cgcGl0Y2gpPworCisgIC0od2lkZWJhbmQgb25seSkgbGVzcyBiaXRzIGluIHRoZSBoaWdoLWJhbmQgd2hlbiBzaWduYWwgaXMgdmVyeSAKKyAgbm9uLXN0YXRpb25hcnkgKGhhcmRlciB0byBub3RpY2UgaGlnaC1mcmVxdWVuY3kgbm9pc2UpPz8/CisKKyovCisKK2Zsb2F0IHZicl9hbmFseXNpcyhWQlJTdGF0ZSAqdmJyLCBzcHhfd29yZDE2X3QgKnNpZywgaW50IGxlbiwgaW50IHBpdGNoLCBmbG9hdCBwaXRjaF9jb2VmKQoreworICAgaW50IGk7CisgICBmbG9hdCBlbmVyPTAsIGVuZXIxPTAsIGVuZXIyPTA7CisgICBmbG9hdCBxdWFsPTc7CisgICBpbnQgdmE7CisgICBmbG9hdCBsb2dfZW5lcmd5OworICAgZmxvYXQgbm9uX3N0PTA7CisgICBmbG9hdCB2b2ljaW5nOworICAgZmxvYXQgcG93X2VuZXI7CisKKyAgIGZvciAoaT0wO2k8bGVuPj4xO2krKykKKyAgICAgIGVuZXIxICs9ICgoZmxvYXQpc2lnW2ldKSpzaWdbaV07CisKKyAgIGZvciAoaT1sZW4+PjE7aTxsZW47aSsrKQorICAgICAgZW5lcjIgKz0gKChmbG9hdClzaWdbaV0pKnNpZ1tpXTsKKyAgIGVuZXI9ZW5lcjErZW5lcjI7CisKKyAgIGxvZ19lbmVyZ3kgPSBsb2coZW5lcitNSU5fRU5FUkdZKTsKKyAgIGZvciAoaT0wO2k8VkJSX01FTU9SWV9TSVpFO2krKykKKyAgICAgIG5vbl9zdCArPSBzcXIobG9nX2VuZXJneS12YnItPmxhc3RfbG9nX2VuZXJneVtpXSk7CisgICBub25fc3QgPSAgbm9uX3N0LygzMCpWQlJfTUVNT1JZX1NJWkUpOworICAgaWYgKG5vbl9zdD4xKQorICAgICAgbm9uX3N0PTE7CisKKyAgIHZvaWNpbmcgPSAzKihwaXRjaF9jb2VmLS40KSpmYWJzKHBpdGNoX2NvZWYtLjQpOworICAgdmJyLT5hdmVyYWdlX2VuZXJneSA9ICgxLXZici0+ZW5lcmd5X2FscGhhKSp2YnItPmF2ZXJhZ2VfZW5lcmd5ICsgdmJyLT5lbmVyZ3lfYWxwaGEqZW5lcjsKKyAgIHZici0+bm9pc2VfbGV2ZWw9dmJyLT5ub2lzZV9hY2N1bS92YnItPm5vaXNlX2FjY3VtX2NvdW50OworICAgcG93X2VuZXIgPSBwb3coZW5lcixOT0lTRV9QT1cpOworICAgaWYgKHZici0+bm9pc2VfYWNjdW1fY291bnQ8LjA2ICYmIGVuZXI+TUlOX0VORVJHWSkKKyAgICAgIHZici0+bm9pc2VfYWNjdW0gPSAuMDUqcG93X2VuZXI7CisKKyAgIGlmICgodm9pY2luZzwuMyAmJiBub25fc3QgPCAuMiAmJiBwb3dfZW5lciA8IDEuMip2YnItPm5vaXNlX2xldmVsKQorICAgICAgIHx8ICh2b2ljaW5nPC4zICYmIG5vbl9zdCA8IC4wNSAmJiBwb3dfZW5lciA8IDEuNSp2YnItPm5vaXNlX2xldmVsKQorICAgICAgIHx8ICh2b2ljaW5nPC40ICYmIG5vbl9zdCA8IC4wNSAmJiBwb3dfZW5lciA8IDEuMip2YnItPm5vaXNlX2xldmVsKQorICAgICAgIHx8ICh2b2ljaW5nPDAgJiYgbm9uX3N0IDwgLjA1KSkKKyAgIHsKKyAgICAgIGZsb2F0IHRtcDsKKyAgICAgIHZhID0gMDsKKyAgICAgIHZici0+Y29uc2VjX25vaXNlKys7CisgICAgICBpZiAocG93X2VuZXIgPiAzKnZici0+bm9pc2VfbGV2ZWwpCisgICAgICAgICB0bXAgPSAzKnZici0+bm9pc2VfbGV2ZWw7CisgICAgICBlbHNlIAorICAgICAgICAgdG1wID0gcG93X2VuZXI7CisgICAgICBpZiAodmJyLT5jb25zZWNfbm9pc2U+PTQpCisgICAgICB7CisgICAgICAgICB2YnItPm5vaXNlX2FjY3VtID0gLjk1KnZici0+bm9pc2VfYWNjdW0gKyAuMDUqdG1wOworICAgICAgICAgdmJyLT5ub2lzZV9hY2N1bV9jb3VudCA9IC45NSp2YnItPm5vaXNlX2FjY3VtX2NvdW50ICsgLjA1OworICAgICAgfQorICAgfSBlbHNlIHsKKyAgICAgIHZhID0gMTsKKyAgICAgIHZici0+Y29uc2VjX25vaXNlPTA7CisgICB9CisKKyAgIGlmIChwb3dfZW5lciA8IHZici0+bm9pc2VfbGV2ZWwgJiYgZW5lcj5NSU5fRU5FUkdZKQorICAgeworICAgICAgdmJyLT5ub2lzZV9hY2N1bSA9IC45NSp2YnItPm5vaXNlX2FjY3VtICsgLjA1KnBvd19lbmVyOworICAgICAgdmJyLT5ub2lzZV9hY2N1bV9jb3VudCA9IC45NSp2YnItPm5vaXNlX2FjY3VtX2NvdW50ICsgLjA1OyAgICAgIAorICAgfQorCisgICAvKiBDaGVja2luZyBmb3IgdmVyeSBsb3cgYWJzb2x1dGUgZW5lcmd5ICovCisgICBpZiAoZW5lciA8IDMwMDAwKQorICAgeworICAgICAgcXVhbCAtPSAuNzsKKyAgICAgIGlmIChlbmVyIDwgMTAwMDApCisgICAgICAgICBxdWFsLT0uNzsKKyAgICAgIGlmIChlbmVyIDwgMzAwMCkKKyAgICAgICAgIHF1YWwtPS43OworICAgfSBlbHNlIHsKKyAgICAgIGZsb2F0IHNob3J0X2RpZmYsIGxvbmdfZGlmZjsKKyAgICAgIHNob3J0X2RpZmYgPSBsb2coKGVuZXIrMSkvKDErdmJyLT5sYXN0X2VuZXJneSkpOworICAgICAgbG9uZ19kaWZmID0gbG9nKChlbmVyKzEpLygxK3Zici0+YXZlcmFnZV9lbmVyZ3kpKTsKKyAgICAgIC8qZnByaW50ZiAoc3RkZXJyLCAiJWYgJWZcbiIsIHNob3J0X2RpZmYsIGxvbmdfZGlmZik7Ki8KKworICAgICAgaWYgKGxvbmdfZGlmZjwtNSkKKyAgICAgICAgIGxvbmdfZGlmZj0tNTsKKyAgICAgIGlmIChsb25nX2RpZmY+MikKKyAgICAgICAgIGxvbmdfZGlmZj0yOworCisgICAgICBpZiAobG9uZ19kaWZmPjApCisgICAgICAgICBxdWFsICs9IC42KmxvbmdfZGlmZjsKKyAgICAgIGlmIChsb25nX2RpZmY8MCkKKyAgICAgICAgIHF1YWwgKz0gLjUqbG9uZ19kaWZmOworICAgICAgaWYgKHNob3J0X2RpZmY+MCkKKyAgICAgIHsKKyAgICAgICAgIGlmIChzaG9ydF9kaWZmPjUpCisgICAgICAgICAgICBzaG9ydF9kaWZmPTU7CisgICAgICAgICBxdWFsICs9IC41KnNob3J0X2RpZmY7CisgICAgICB9CisgICAgICAvKiBDaGVja2luZyBmb3IgZW5lcmd5IGluY3JlYXNlcyAqLworICAgICAgaWYgKGVuZXIyID4gMS42KmVuZXIxKQorICAgICAgICAgcXVhbCArPSAuNTsKKyAgIH0KKyAgIHZici0+bGFzdF9lbmVyZ3kgPSBlbmVyOworICAgdmJyLT5zb2Z0X3BpdGNoID0gLjYqdmJyLT5zb2Z0X3BpdGNoICsgLjQqcGl0Y2hfY29lZjsKKyAgIHF1YWwgKz0gMi4yKigocGl0Y2hfY29lZi0uNCkgKyAodmJyLT5zb2Z0X3BpdGNoLS40KSk7CisKKyAgIGlmIChxdWFsIDwgdmJyLT5sYXN0X3F1YWxpdHkpCisgICAgICBxdWFsID0gLjUqcXVhbCArIC41KnZici0+bGFzdF9xdWFsaXR5OworICAgaWYgKHF1YWw8NCkKKyAgICAgIHF1YWw9NDsKKyAgIGlmIChxdWFsPjEwKQorICAgICAgcXVhbD0xMDsKKyAgIAorICAgLyoKKyAgIGlmICh2YnItPmNvbnNlY19ub2lzZT49MikKKyAgICAgIHF1YWwtPTEuMzsKKyAgIGlmICh2YnItPmNvbnNlY19ub2lzZT49NSkKKyAgICAgIHF1YWwtPTEuMzsKKyAgIGlmICh2YnItPmNvbnNlY19ub2lzZT49MTIpCisgICAgICBxdWFsLT0xLjM7CisgICAqLworICAgaWYgKHZici0+Y29uc2VjX25vaXNlPj0zKQorICAgICAgcXVhbD00OworCisgICBpZiAodmJyLT5jb25zZWNfbm9pc2UpCisgICAgICBxdWFsIC09IDEuMCAqIChsb2coMy4wICsgdmJyLT5jb25zZWNfbm9pc2UpLWxvZygzKSk7CisgICBpZiAocXVhbDwwKQorICAgICAgcXVhbD0wOworICAgCisgICBpZiAoZW5lcjw2MDAwMCkKKyAgIHsKKyAgICAgIGlmICh2YnItPmNvbnNlY19ub2lzZT4yKQorICAgICAgICAgcXVhbC09MC41Kihsb2coMy4wICsgdmJyLT5jb25zZWNfbm9pc2UpLWxvZygzKSk7CisgICAgICBpZiAoZW5lcjwxMDAwMCYmdmJyLT5jb25zZWNfbm9pc2U+MikKKyAgICAgICAgIHF1YWwtPTAuNSoobG9nKDMuMCArIHZici0+Y29uc2VjX25vaXNlKS1sb2coMykpOworICAgICAgaWYgKHF1YWw8MCkKKyAgICAgICAgIHF1YWw9MDsKKyAgICAgIHF1YWwgKz0gLjMqbG9nKC4wMDAxK2VuZXIvNjAwMDAuMCk7CisgICB9CisgICBpZiAocXVhbDwtMSkKKyAgICAgIHF1YWw9LTE7CisKKyAgIC8qcHJpbnRmICgiJWYgJWYgJWYgJWYgJWRcbiIsIHF1YWwsIHZvaWNpbmcsIG5vbl9zdCwgcG93X2VuZXIvKC4wMSt2YnItPm5vaXNlX2xldmVsKSwgdmEpOyovCisKKyAgIHZici0+bGFzdF9waXRjaF9jb2VmID0gcGl0Y2hfY29lZjsKKyAgIHZici0+bGFzdF9xdWFsaXR5ID0gcXVhbDsKKworICAgZm9yIChpPVZCUl9NRU1PUllfU0laRS0xO2k+MDtpLS0pCisgICAgICB2YnItPmxhc3RfbG9nX2VuZXJneVtpXSA9IHZici0+bGFzdF9sb2dfZW5lcmd5W2ktMV07CisgICB2YnItPmxhc3RfbG9nX2VuZXJneVswXSA9IGxvZ19lbmVyZ3k7CisKKyAgIC8qcHJpbnRmICgiVkJSOiAlZiAlZiAlZiAlZCAlZlxuIiwgKGZsb2F0KShsb2dfZW5lcmd5LWxvZyh2YnItPmF2ZXJhZ2VfZW5lcmd5K01JTl9FTkVSR1kpKSwgbm9uX3N0LCB2b2ljaW5nLCB2YSwgdmJyLT5ub2lzZV9sZXZlbCk7Ki8KKworICAgcmV0dXJuIHF1YWw7Cit9CisKK3ZvaWQgdmJyX2Rlc3Ryb3koVkJSU3RhdGUgKnZicikKK3sKK30KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3Zici5oIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvdmJyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRlMWQ0YwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3Zici5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiBKZWFuLU1hcmMgVmFsaW4gKi8KKy8qKgorICAgQGZpbGUgdmJyLmgKKyAgIEBicmllZiBWYXJpYWJsZSBCaXQtUmF0ZSAoVkJSKSByZWxhdGVkIHJvdXRpbmVzCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisKKyNpZm5kZWYgVkJSX0gKKyNkZWZpbmUgVkJSX0gKKworI2luY2x1ZGUgIm1pc2MuaCIKKworI2RlZmluZSBWQlJfTUVNT1JZX1NJWkUgNQorCitleHRlcm4gY29uc3QgZmxvYXQgdmJyX25iX3RocmVzaFs5XVsxMV07CitleHRlcm4gY29uc3QgZmxvYXQgdmJyX2hiX3RocmVzaFs1XVsxMV07CitleHRlcm4gY29uc3QgZmxvYXQgdmJyX3VoYl90aHJlc2hbMl1bMTFdOworCisvKiogVkJSIHN0YXRlLiAqLwordHlwZWRlZiBzdHJ1Y3QgVkJSU3RhdGUgeworICAgZmxvYXQgZW5lcmd5X2FscGhhOworICAgZmxvYXQgYXZlcmFnZV9lbmVyZ3k7CisgICBmbG9hdCBsYXN0X2VuZXJneTsKKyAgIGZsb2F0IGxhc3RfbG9nX2VuZXJneVtWQlJfTUVNT1JZX1NJWkVdOworICAgZmxvYXQgYWNjdW1fc3VtOworICAgZmxvYXQgbGFzdF9waXRjaF9jb2VmOworICAgZmxvYXQgc29mdF9waXRjaDsKKyAgIGZsb2F0IGxhc3RfcXVhbGl0eTsKKyAgIGZsb2F0IG5vaXNlX2xldmVsOworICAgZmxvYXQgbm9pc2VfYWNjdW07CisgICBmbG9hdCBub2lzZV9hY2N1bV9jb3VudDsKKyAgIGludCAgIGNvbnNlY19ub2lzZTsKK30gVkJSU3RhdGU7CisKK3ZvaWQgdmJyX2luaXQoVkJSU3RhdGUgKnZicik7CisKK2Zsb2F0IHZicl9hbmFseXNpcyhWQlJTdGF0ZSAqdmJyLCBzcHhfd29yZDE2X3QgKnNpZywgaW50IGxlbiwgaW50IHBpdGNoLCBmbG9hdCBwaXRjaF9jb2VmKTsKKwordm9pZCB2YnJfZGVzdHJveShWQlJTdGF0ZSAqdmJyKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC92b3JiaXNfcHN5LmMgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC92b3JiaXNfcHN5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFhYzU2ZgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3ZvcmJpc19wc3kuYwpAQCAtMCwwICsxLDUwOCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA1IEplYW4tTWFyYyBWYWxpbiwgQ1NJUk8sIENocmlzdG9waGVyIE1vbnRnb21lcnkKKyAgIEZpbGU6IHZvcmJpc19wc3kuYworCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2lmZGVmIFZPUkJJU19QU1lDSE8KKworI2luY2x1ZGUgIm1pc2MuaCIKKyNpbmNsdWRlICJzbWFsbGZ0LmgiCisjaW5jbHVkZSAibHBjLmgiCisjaW5jbHVkZSAidm9yYmlzX3BzeS5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBwc3ljaG9hY291c3RpYyBzZXR1cCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIFZvcmJpc1BzeUluZm8gZXhhbXBsZV90dW5pbmcgPSB7CisgIAorICAuNSwuNSwgIAorICAzLDMsMjUsCisgIAorICAvKjYzICAgICAxMjUgICAgIDI1MCAgICAgNTAwICAgICAgMWsgICAgICAyayAgICAgIDRrICAgICAgOGsgICAgIDE2ayovCisgIC8vIHZvcmJpcyBtb2RlIDQgc3R5bGUKKyAgLy97LTMyLC0zMiwtMzIsLTMyLC0yOCwtMjQsLTIyLC0yMCwtMjAsIC0yMCwgLTIwLCAtOCwgLTYsIC02LCAtNiwgLTYsIC02fSwKKyAgeyAtNCwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC04LCAtOCwtMTAsLTEwLCAtOCwgLTYsIC00LCAtNCwgLTJ9LAorICAKKyAgeworICAgIDAsIDEsIDIsIDMsIDQsIDUsIDUsICA1LCAgICAgLyogN2RCICovCisgICAgNiwgNiwgNiwgNSwgNCwgNCwgNCwgIDQsICAgICAvKiAxNWRCICovCisgICAgNCwgNCwgNSwgNSwgNSwgNiwgNiwgIDYsICAgICAvKiAyM2RCICovCisgICAgNywgNywgNywgOCwgOCwgOCwgOSwgMTAsICAgICAvKiAzMWRCICovCisgICAgMTEsMTIsMTMsMTQsMTUsMTYsMTcsIDE4LCAgICAgLyogMzlkQiAqLworICB9CisKK307CisKKworCisvKiB0aGVyZSB3YXMgbm8gZ3JlYXQgcGxhY2UgdG8gcHV0IHRoaXMuLi4uICovCisjaW5jbHVkZSA8c3RkaW8uaD4KK3N0YXRpYyB2b2lkIF9hbmFseXNpc19vdXRwdXQoY2hhciAqYmFzZSxpbnQgaSxmbG9hdCAqdixpbnQgbixpbnQgYmFyayxpbnQgZEIpeworICBpbnQgajsKKyAgRklMRSAqb2Y7CisgIGNoYXIgYnVmZmVyWzgwXTsKKworICBzcHJpbnRmKGJ1ZmZlciwiJXNfJWQubSIsYmFzZSxpKTsKKyAgb2Y9Zm9wZW4oYnVmZmVyLCJ3Iik7CisgIAorICBpZighb2YpcGVycm9yKCJmYWlsZWQgdG8gb3BlbiBkYXRhIGR1bXAgZmlsZSIpOworICAKKyAgZm9yKGo9MDtqPG47aisrKXsKKyAgICBpZihiYXJrKXsKKyAgICAgIGZsb2F0IGI9dG9CQVJLKCg0MDAwLmYqai9uKSsuMjUpOworICAgICAgZnByaW50ZihvZiwiJWYgIixiKTsKKyAgICB9ZWxzZQorICAgICAgZnByaW50ZihvZiwiJWYgIiwoZG91YmxlKWopOworICAgIAorICAgIGlmKGRCKXsKKyAgICAgIGZsb2F0IHZhbDsKKyAgICAgIGlmKHZbal09PTAuKQorCXZhbD0tMTQwLjsKKyAgICAgIGVsc2UKKwl2YWw9dG9kQih2W2pdKTsKKyAgICAgIGZwcmludGYob2YsIiVmXG4iLHZhbCk7CisgICAgfWVsc2V7CisgICAgICBmcHJpbnRmKG9mLCIlZlxuIix2W2pdKTsKKyAgICB9CisgIH0KKyAgZmNsb3NlKG9mKTsKK30KKworc3RhdGljIHZvaWQgYmFya19ub2lzZV9oeWJyaWRtcChpbnQgbixjb25zdCBsb25nICpiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKm5vaXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBmaXhlZCl7CisgIAorICBmbG9hdCAqTj1hbGxvY2EobipzaXplb2YoKk4pKTsKKyAgZmxvYXQgKlg9YWxsb2NhKG4qc2l6ZW9mKCpOKSk7CisgIGZsb2F0ICpYWD1hbGxvY2EobipzaXplb2YoKk4pKTsKKyAgZmxvYXQgKlk9YWxsb2NhKG4qc2l6ZW9mKCpOKSk7CisgIGZsb2F0ICpYWT1hbGxvY2EobipzaXplb2YoKk4pKTsKKworICBmbG9hdCB0TiwgdFgsIHRYWCwgdFksIHRYWTsKKyAgaW50IGk7CisKKyAgaW50IGxvLCBoaTsKKyAgZmxvYXQgUiwgQSwgQiwgRDsKKyAgZmxvYXQgdywgeCwgeTsKKworICB0TiA9IHRYID0gdFhYID0gdFkgPSB0WFkgPSAwLmY7CisKKyAgeSA9IGZbMF0gKyBvZmZzZXQ7CisgIGlmICh5IDwgMS5mKSB5ID0gMS5mOworCisgIHcgPSB5ICogeSAqIC41OworICAgIAorICB0TiArPSB3OworICB0WCArPSB3OworICB0WSArPSB3ICogeTsKKworICBOWzBdID0gdE47CisgIFhbMF0gPSB0WDsKKyAgWFhbMF0gPSB0WFg7CisgIFlbMF0gPSB0WTsKKyAgWFlbMF0gPSB0WFk7CisKKyAgZm9yIChpID0gMSwgeCA9IDEuZjsgaSA8IG47IGkrKywgeCArPSAxLmYpIHsKKyAgICAKKyAgICB5ID0gZltpXSArIG9mZnNldDsKKyAgICBpZiAoeSA8IDEuZikgeSA9IDEuZjsKKworICAgIHcgPSB5ICogeTsKKyAgICAKKyAgICB0TiArPSB3OworICAgIHRYICs9IHcgKiB4OworICAgIHRYWCArPSB3ICogeCAqIHg7CisgICAgdFkgKz0gdyAqIHk7CisgICAgdFhZICs9IHcgKiB4ICogeTsKKworICAgIE5baV0gPSB0TjsKKyAgICBYW2ldID0gdFg7CisgICAgWFhbaV0gPSB0WFg7CisgICAgWVtpXSA9IHRZOworICAgIFhZW2ldID0gdFhZOworICB9CisgIAorICBmb3IgKGkgPSAwLCB4ID0gMC5mOzsgaSsrLCB4ICs9IDEuZikgeworICAgIAorICAgIGxvID0gYltpXSA+PiAxNjsKKyAgICBpZiggbG8+PTAgKSBicmVhazsKKyAgICBoaSA9IGJbaV0gJiAweGZmZmY7CisgICAgCisgICAgdE4gPSBOW2hpXSArIE5bLWxvXTsKKyAgICB0WCA9IFhbaGldIC0gWFstbG9dOworICAgIHRYWCA9IFhYW2hpXSArIFhYWy1sb107CisgICAgdFkgPSBZW2hpXSArIFlbLWxvXTsgICAgCisgICAgdFhZID0gWFlbaGldIC0gWFlbLWxvXTsKKyAgICAKKyAgICBBID0gdFkgKiB0WFggLSB0WCAqIHRYWTsKKyAgICBCID0gdE4gKiB0WFkgLSB0WCAqIHRZOworICAgIEQgPSB0TiAqIHRYWCAtIHRYICogdFg7CisgICAgUiA9IChBICsgeCAqIEIpIC8gRDsKKyAgICBpZiAoUiA8IDAuZikKKyAgICAgIFIgPSAwLmY7CisgICAgCisgICAgbm9pc2VbaV0gPSBSIC0gb2Zmc2V0OworICB9CisgIAorICBmb3IgKCA7OyBpKyssIHggKz0gMS5mKSB7CisgICAgCisgICAgbG8gPSBiW2ldID4+IDE2OworICAgIGhpID0gYltpXSAmIDB4ZmZmZjsKKyAgICBpZihoaT49bilicmVhazsKKyAgICAKKyAgICB0TiA9IE5baGldIC0gTltsb107CisgICAgdFggPSBYW2hpXSAtIFhbbG9dOworICAgIHRYWCA9IFhYW2hpXSAtIFhYW2xvXTsKKyAgICB0WSA9IFlbaGldIC0gWVtsb107CisgICAgdFhZID0gWFlbaGldIC0gWFlbbG9dOworICAgIAorICAgIEEgPSB0WSAqIHRYWCAtIHRYICogdFhZOworICAgIEIgPSB0TiAqIHRYWSAtIHRYICogdFk7CisgICAgRCA9IHROICogdFhYIC0gdFggKiB0WDsKKyAgICBSID0gKEEgKyB4ICogQikgLyBEOworICAgIGlmIChSIDwgMC5mKSBSID0gMC5mOworICAgIAorICAgIG5vaXNlW2ldID0gUiAtIG9mZnNldDsKKyAgfQorICBmb3IgKCA7IGkgPCBuOyBpKyssIHggKz0gMS5mKSB7CisgICAgCisgICAgUiA9IChBICsgeCAqIEIpIC8gRDsKKyAgICBpZiAoUiA8IDAuZikgUiA9IDAuZjsKKyAgICAKKyAgICBub2lzZVtpXSA9IFIgLSBvZmZzZXQ7CisgIH0KKyAgCisgIGlmIChmaXhlZCA8PSAwKSByZXR1cm47CisgIAorICBmb3IgKGkgPSAwLCB4ID0gMC5mOzsgaSsrLCB4ICs9IDEuZikgeworICAgIGhpID0gaSArIGZpeGVkIC8gMjsKKyAgICBsbyA9IGhpIC0gZml4ZWQ7CisgICAgaWYobG8+PTApYnJlYWs7CisKKyAgICB0TiA9IE5baGldICsgTlstbG9dOworICAgIHRYID0gWFtoaV0gLSBYWy1sb107CisgICAgdFhYID0gWFhbaGldICsgWFhbLWxvXTsKKyAgICB0WSA9IFlbaGldICsgWVstbG9dOworICAgIHRYWSA9IFhZW2hpXSAtIFhZWy1sb107CisgICAgCisgICAgCisgICAgQSA9IHRZICogdFhYIC0gdFggKiB0WFk7CisgICAgQiA9IHROICogdFhZIC0gdFggKiB0WTsKKyAgICBEID0gdE4gKiB0WFggLSB0WCAqIHRYOworICAgIFIgPSAoQSArIHggKiBCKSAvIEQ7CisKKyAgICBpZiAoUiAtIG9mZnNldCA8IG5vaXNlW2ldKSBub2lzZVtpXSA9IFIgLSBvZmZzZXQ7CisgIH0KKyAgZm9yICggOzsgaSsrLCB4ICs9IDEuZikgeworICAgIAorICAgIGhpID0gaSArIGZpeGVkIC8gMjsKKyAgICBsbyA9IGhpIC0gZml4ZWQ7CisgICAgaWYoaGk+PW4pYnJlYWs7CisgICAgCisgICAgdE4gPSBOW2hpXSAtIE5bbG9dOworICAgIHRYID0gWFtoaV0gLSBYW2xvXTsKKyAgICB0WFggPSBYWFtoaV0gLSBYWFtsb107CisgICAgdFkgPSBZW2hpXSAtIFlbbG9dOworICAgIHRYWSA9IFhZW2hpXSAtIFhZW2xvXTsKKyAgICAKKyAgICBBID0gdFkgKiB0WFggLSB0WCAqIHRYWTsKKyAgICBCID0gdE4gKiB0WFkgLSB0WCAqIHRZOworICAgIEQgPSB0TiAqIHRYWCAtIHRYICogdFg7CisgICAgUiA9IChBICsgeCAqIEIpIC8gRDsKKyAgICAKKyAgICBpZiAoUiAtIG9mZnNldCA8IG5vaXNlW2ldKSBub2lzZVtpXSA9IFIgLSBvZmZzZXQ7CisgIH0KKyAgZm9yICggOyBpIDwgbjsgaSsrLCB4ICs9IDEuZikgeworICAgIFIgPSAoQSArIHggKiBCKSAvIEQ7CisgICAgaWYgKFIgLSBvZmZzZXQgPCBub2lzZVtpXSkgbm9pc2VbaV0gPSBSIC0gb2Zmc2V0OworICB9Cit9CisKK3N0YXRpYyB2b2lkIF92cF9ub2lzZW1hc2soVm9yYmlzUHN5ICpwLAorCQkJICBmbG9hdCAqbG9nZnJlcSwgCisJCQkgIGZsb2F0ICpsb2dtYXNrKXsKKworICBpbnQgaSxuPXAtPm4vMjsKKyAgZmxvYXQgKndvcms9YWxsb2NhKG4qc2l6ZW9mKCp3b3JrKSk7CisKKyAgYmFya19ub2lzZV9oeWJyaWRtcChuLHAtPmJhcmssbG9nZnJlcSxsb2dtYXNrLAorCQkgICAgICAxNDAuLC0xKTsKKworICBmb3IoaT0wO2k8bjtpKyspd29ya1tpXT1sb2dmcmVxW2ldLWxvZ21hc2tbaV07CisKKyAgYmFya19ub2lzZV9oeWJyaWRtcChuLHAtPmJhcmssd29yayxsb2dtYXNrLDAuLAorCQkgICAgICBwLT52aS0+bm9pc2V3aW5kb3dmaXhlZCk7CisKKyAgZm9yKGk9MDtpPG47aSsrKXdvcmtbaV09bG9nZnJlcVtpXS13b3JrW2ldOworICAKKyAgeworICAgIHN0YXRpYyBpbnQgc2VxPTA7CisgICAgCisgICAgZmxvYXQgd29yazJbbl07CisgICAgZm9yKGk9MDtpPG47aSsrKXsKKyAgICAgIHdvcmsyW2ldPWxvZ21hc2tbaV0rd29ya1tpXTsKKyAgICB9CisgICAgCisgICAgLy9fYW5hbHlzaXNfb3V0cHV0KCJsb2dmcmVxIixzZXEsbG9nZnJlcSxuLDAsMCk7CisgICAgLy9fYW5hbHlzaXNfb3V0cHV0KCJtZWRpYW4iLHNlcSx3b3JrLG4sMCwwKTsKKyAgICAvL19hbmFseXNpc19vdXRwdXQoImVudmVsb3BlIixzZXEsd29yazIsbiwwLDApOworICAgIHNlcSsrOworICB9CisKKyAgZm9yKGk9MDtpPG47aSsrKXsKKyAgICBpbnQgZEI9bG9nbWFza1tpXSsuNTsKKyAgICBpZihkQj49Tk9JU0VfQ09NUEFORF9MRVZFTFMpZEI9Tk9JU0VfQ09NUEFORF9MRVZFTFMtMTsKKyAgICBpZihkQjwwKWRCPTA7CisgICAgbG9nbWFza1tpXT0gd29ya1tpXStwLT52aS0+bm9pc2Vjb21wYW5kW2RCXStwLT5ub2lzZW9mZnNldFtpXTsKKyAgfQorCit9CisKK1ZvcmJpc1BzeSAqdm9yYmlzX3BzeV9pbml0KGludCByYXRlLCBpbnQgbikKK3sKKyAgbG9uZyBpLGosbG89LTk5LGhpPTE7CisgIFZvcmJpc1BzeSAqcCA9IHNwZWV4X2FsbG9jKHNpemVvZihWb3JiaXNQc3kpKTsKKyAgbWVtc2V0KHAsMCxzaXplb2YoKnApKTsKKyAgCisgIHAtPm4gPSBuOworICBzcHhfZHJmdF9pbml0KCZwLT5sb29rdXAsIG4pOworICBwLT5iYXJrID0gc3BlZXhfYWxsb2MobipzaXplb2YoKnAtPmJhcmspKTsKKyAgcC0+cmF0ZT1yYXRlOworICBwLT52aSA9ICZleGFtcGxlX3R1bmluZzsKKworICAvKiBCSDQgd2luZG93ICovCisgIHAtPndpbmRvdyA9IHNwZWV4X2FsbG9jKHNpemVvZigqcC0+d2luZG93KSpuKTsKKyAgZmxvYXQgYTAgPSAuMzU4NzVmOworICBmbG9hdCBhMSA9IC40ODgyOWY7CisgIGZsb2F0IGEyID0gLjE0MTI4ZjsKKyAgZmxvYXQgYTMgPSAuMDExNjhmOworICBmb3IoaT0wO2k8bjtpKyspCisgICAgcC0+d2luZG93W2ldID0gLy9hMCAtIGExKmNvcygyLipNX1BJL24qKGkrLjUpKSArIGEyKmNvcyg0LipNX1BJL24qKGkrLjUpKSAtIGEzKmNvcyg2LipNX1BJL24qKGkrLjUpKTsKKyAgICAgIHNpbigoaSsuNSkvbiAqIE1fUEkpKnNpbigoaSsuNSkvbiAqIE1fUEkpOworICAvKiBiYXJrIHNjYWxlIGxvb2t1cHMgKi8KKyAgZm9yKGk9MDtpPG47aSsrKXsKKyAgICBmbG9hdCBiYXJrPXRvQkFSSyhyYXRlLygyKm4pKmkpOyAKKyAgICAKKyAgICBmb3IoO2xvK3AtPnZpLT5ub2lzZXdpbmRvd2xvbWluPGkgJiYgCisJICB0b0JBUksocmF0ZS8oMipuKSpsbyk8KGJhcmstcC0+dmktPm5vaXNld2luZG93bG8pO2xvKyspOworICAgIAorICAgIGZvcig7aGk8PW4gJiYgKGhpPGkrcC0+dmktPm5vaXNld2luZG93aGltaW4gfHwKKwkgIHRvQkFSSyhyYXRlLygyKm4pKmhpKTwoYmFyaytwLT52aS0+bm9pc2V3aW5kb3doaSkpO2hpKyspOworICAgIAorICAgIHAtPmJhcmtbaV09KChsby0xKTw8MTYpKyhoaS0xKTsKKworICB9CisKKyAgLyogc2V0IHVwIHJvbGxpbmcgbm9pc2UgbWVkaWFuICovCisgIHAtPm5vaXNlb2Zmc2V0PXNwZWV4X2FsbG9jKG4qc2l6ZW9mKCpwLT5ub2lzZW9mZnNldCkpOworICAKKyAgZm9yKGk9MDtpPG47aSsrKXsKKyAgICBmbG9hdCBoYWxmb2M9dG9PQygoaSsuNSkqcmF0ZS8oMi4qbikpKjIuOworICAgIGludCBpbnRoYWxmb2M7CisgICAgZmxvYXQgZGVsOworICAgIAorICAgIGlmKGhhbGZvYzwwKWhhbGZvYz0wOworICAgIGlmKGhhbGZvYz49UF9CQU5EUy0xKWhhbGZvYz1QX0JBTkRTLTE7CisgICAgaW50aGFsZm9jPShpbnQpaGFsZm9jOworICAgIGRlbD1oYWxmb2MtaW50aGFsZm9jOworICAgIAorICAgIHAtPm5vaXNlb2Zmc2V0W2ldPQorICAgICAgcC0+dmktPm5vaXNlb2ZmW2ludGhhbGZvY10qKDEuLWRlbCkgKyAKKyAgICAgIHAtPnZpLT5ub2lzZW9mZltpbnRoYWxmb2MrMV0qZGVsOworICAgIAorICB9CisjaWYgMAorICBfYW5hbHlzaXNfb3V0cHV0X2Fsd2F5cygibm9pc2VvZmYwIixscyxwLT5ub2lzZW9mZnNldCxuLDEsMCwwKTsKKyNlbmRpZgorCisgICByZXR1cm4gcDsKK30KKwordm9pZCB2b3JiaXNfcHN5X2Rlc3Ryb3koVm9yYmlzUHN5ICpwKQoreworICBpZihwKXsKKyAgICBzcHhfZHJmdF9jbGVhcigmcC0+bG9va3VwKTsKKyAgICBpZihwLT5iYXJrKQorICAgICAgc3BlZXhfZnJlZShwLT5iYXJrKTsKKyAgICBpZihwLT5ub2lzZW9mZnNldCkKKyAgICAgIHNwZWV4X2ZyZWUocC0+bm9pc2VvZmZzZXQpOworICAgIGlmKHAtPndpbmRvdykKKyAgICAgIHNwZWV4X2ZyZWUocC0+d2luZG93KTsKKyAgICBtZW1zZXQocCwwLHNpemVvZigqcCkpOworICAgIHNwZWV4X2ZyZWUocCk7CisgIH0KK30KKwordm9pZCBjb21wdXRlX2N1cnZlKFZvcmJpc1BzeSAqcHN5LCBmbG9hdCAqYXVkaW8sIGZsb2F0ICpjdXJ2ZSkKK3sKKyAgIGludCBpOworICAgZmxvYXQgd29ya1twc3ktPm5dOworCisgICBmbG9hdCBzY2FsZT00LmYvcHN5LT5uOworICAgZmxvYXQgc2NhbGVfZEI7CisKKyAgIHNjYWxlX2RCPXRvZEIoc2NhbGUpOworICAKKyAgIC8qIHdpbmRvdyB0aGUgUENNIGRhdGE7IHVzZSBhIEJINCB3aW5kb3csIG5vdCB2b3JiaXMgKi8KKyAgIGZvcihpPTA7aTxwc3ktPm47aSsrKQorICAgICB3b3JrW2ldPWF1ZGlvW2ldICogcHN5LT53aW5kb3dbaV07CisKKyAgIHsKKyAgICAgc3RhdGljIGludCBzZXE9MDsKKyAgICAgCisgICAgIC8vX2FuYWx5c2lzX291dHB1dCgid2luIixzZXEsd29yayxwc3ktPm4sMCwwKTsKKworICAgICBzZXErKzsKKyAgIH0KKworICAgIC8qIEZGVCB5aWVsZHMgbW9yZSBhY2N1cmF0ZSB0b25hbCBlc3RpbWF0aW9uIChub3QgcGhhc2Ugc2Vuc2l0aXZlKSAqLworICAgIHNweF9kcmZ0X2ZvcndhcmQoJnBzeS0+bG9va3VwLHdvcmspOworCisgICAgLyogbWFnbml0dWRlcyAqLworICAgIHdvcmtbMF09c2NhbGVfZEIrdG9kQih3b3JrWzBdKTsKKyAgICBmb3IoaT0xO2k8cHN5LT5uLTE7aSs9Mil7CisgICAgICBmbG9hdCB0ZW1wID0gd29ya1tpXSp3b3JrW2ldICsgd29ya1tpKzFdKndvcmtbaSsxXTsKKyAgICAgIHdvcmtbKGkrMSk+PjFdID0gc2NhbGVfZEIrLjVmICogdG9kQih0ZW1wKTsKKyAgICB9CisKKyAgICAvKiBkZXJpdmUgYSBub2lzZSBjdXJ2ZSAqLworICAgIF92cF9ub2lzZW1hc2socHN5LHdvcmssY3VydmUpOworI2RlZmluZSBTSURFTCAxMgorICAgIGZvciAoaT0wO2k8U0lERUw7aSsrKQorICAgIHsKKyAgICAgICBjdXJ2ZVtpXT1jdXJ2ZVtTSURFTF07CisgICAgfQorI2RlZmluZSBTSURFSCAxMgorICAgIGZvciAoaT0wO2k8U0lERUg7aSsrKQorICAgIHsKKyAgICAgICBjdXJ2ZVsocHN5LT5uPj4xKS1pLTFdPWN1cnZlWyhwc3ktPm4+PjEpLVNJREVIXTsKKyAgICB9CisgICAgZm9yKGk9MDtpPCgocHN5LT5uKT4+MSk7aSsrKQorICAgICAgIGN1cnZlW2ldID0gZnJvbWRCKDEuMipjdXJ2ZVtpXSsuMippKTsKKyAgICAgICAvL2N1cnZlW2ldID0gZnJvbWRCKDAuOCpjdXJ2ZVtpXSsuMzUqaSk7CisgICAgICAgLy9jdXJ2ZVtpXSA9IGZyb21kQigwLjkqY3VydmVbaV0pKnBvdygxLjAqaSs0NSwxLjMpOworfQorCisvKiBUcmFuc2Zvcm0gYSBtYXNraW5nIGN1cnZlIChwb3dlciBzcGVjdHJ1bSkgaW50byBhIHBvbGUtemVybyBmaWx0ZXIgKi8KK3ZvaWQgY3VydmVfdG9fbHBjKFZvcmJpc1BzeSAqcHN5LCBmbG9hdCAqY3VydmUsIGZsb2F0ICphd2sxLCBmbG9hdCAqYXdrMiwgaW50IG9yZCkKK3sKKyAgIGludCBpOworICAgZmxvYXQgYWNbcHN5LT5uXTsKKyAgIGZsb2F0IHRtcDsKKyAgIGludCBsZW4gPSBwc3ktPm4gPj4gMTsKKyAgIGZvciAoaT0wO2k8MipsZW47aSsrKQorICAgICAgYWNbaV0gPSAwOworICAgZm9yIChpPTE7aTxsZW47aSsrKQorICAgICAgYWNbMippLTFdID0gY3VydmVbaV07CisgICBhY1swXSA9IGN1cnZlWzBdOworICAgYWNbMipsZW4tMV0gPSBjdXJ2ZVtsZW4tMV07CisgICAKKyAgIHNweF9kcmZ0X2JhY2t3YXJkKCZwc3ktPmxvb2t1cCwgYWMpOworICAgX3NweF9scGMoYXdrMSwgYWMsIG9yZCk7CisgICB0bXAgPSAxLjsKKyAgIGZvciAoaT0wO2k8b3JkO2krKykKKyAgIHsKKyAgICAgIHRtcCAqPSAuOTk7CisgICAgICBhd2sxW2ldICo9IHRtcDsKKyAgIH0KKyNpZiAwCisgICBmb3IgKGk9MDtpPG9yZDtpKyspCisgICAgICBhd2syW2ldID0gMDsKKyNlbHNlCisgICAvKiBVc2UgdGhlIHNlY29uZCAoYXdrMikgZmlsdGVyIHRvIGNvcnJlY3QgdGhlIGZpcnN0IG9uZSAqLworICAgZm9yIChpPTA7aTwyKmxlbjtpKyspCisgICAgICBhY1tpXSA9IDA7ICAgCisgICBmb3IgKGk9MDtpPG9yZDtpKyspCisgICAgICBhY1tpKzFdID0gYXdrMVtpXTsKKyAgIGFjWzBdID0gMTsKKyAgIHNweF9kcmZ0X2ZvcndhcmQoJnBzeS0+bG9va3VwLCBhYyk7CisgICAvKiBDb21wdXRlIChwb3dlcikgcmVzcG9uc2Ugb2YgYXdrMSAoYWxsIHplcm8pICovCisgICBhY1swXSAqPSBhY1swXTsKKyAgIGZvciAoaT0xO2k8bGVuO2krKykKKyAgICAgIGFjW2ldID0gYWNbMippLTFdKmFjWzIqaS0xXSArIGFjWzIqaV0qYWNbMippXTsKKyAgIGFjW2xlbl0gPSBhY1syKmxlbi0xXSphY1syKmxlbi0xXTsKKyAgIC8qIENvbXB1dGUgY29ycmVjdGlvbiByZXF1aXJlZCAqLworICAgZm9yIChpPTA7aTxsZW47aSsrKQorICAgICAgY3VydmVbaV0gPSAxLiAvICgxZS02ZitjdXJ2ZVtpXSphY1tpXSk7CisKKyAgIGZvciAoaT0wO2k8MipsZW47aSsrKQorICAgICAgYWNbaV0gPSAwOworICAgZm9yIChpPTE7aTxsZW47aSsrKQorICAgICAgYWNbMippLTFdID0gY3VydmVbaV07CisgICBhY1swXSA9IGN1cnZlWzBdOworICAgYWNbMipsZW4tMV0gPSBjdXJ2ZVtsZW4tMV07CisgICAKKyAgIHNweF9kcmZ0X2JhY2t3YXJkKCZwc3ktPmxvb2t1cCwgYWMpOworICAgX3NweF9scGMoYXdrMiwgYWMsIG9yZCk7CisgICB0bXAgPSAxOworICAgZm9yIChpPTA7aTxvcmQ7aSsrKQorICAgeworICAgICAgdG1wICo9IC45OTsKKyAgICAgIGF3azJbaV0gKj0gdG1wOworICAgfQorI2VuZGlmCit9CisKKyNpZiAwCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNkZWZpbmUgT1JERVIgMTAKKyNkZWZpbmUgQ1VSVkVfU0laRSAyNAorCitpbnQgbWFpbigpCit7CisgICBpbnQgaTsKKyAgIGZsb2F0IGN1cnZlW0NVUlZFX1NJWkVdOworICAgZmxvYXQgYXdrMVtPUkRFUl0sIGF3azJbT1JERVJdOworICAgZm9yIChpPTA7aTxDVVJWRV9TSVpFO2krKykKKyAgICAgIHNjYW5mKCIlZiAiLCAmY3VydmVbaV0pOworICAgZm9yIChpPTA7aTxDVVJWRV9TSVpFO2krKykKKyAgICAgIGN1cnZlW2ldID0gcG93KDEwLmYsIC4xKmN1cnZlW2ldKTsKKyAgIGN1cnZlX3RvX2xwYyhjdXJ2ZSwgQ1VSVkVfU0laRSwgYXdrMSwgYXdrMiwgT1JERVIpOworICAgZm9yIChpPTA7aTxPUkRFUjtpKyspCisgICAgICBwcmludGYoIiVmICIsIGF3azFbaV0pOworICAgcHJpbnRmICgiXG4iKTsKKyAgIGZvciAoaT0wO2k8T1JERVI7aSsrKQorICAgICAgcHJpbnRmKCIlZiAiLCBhd2syW2ldKTsKKyAgIHByaW50ZiAoIlxuIik7CisgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3ZvcmJpc19wc3kuaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3ZvcmJpc19wc3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmRiN2M1Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvdm9yYmlzX3BzeS5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNSBKZWFuLU1hcmMgVmFsaW4sIENTSVJPLCBDaHJpc3RvcGhlciBNb250Z29tZXJ5CisgICBGaWxlOiB2b3JiaXNfcHN5LmgKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIFZPUkJJU19QU1lfSAorI2RlZmluZSBWT1JCSVNfUFNZX0gKKworI2lmZGVmIFZPUkJJU19QU1lDSE8KKworI2luY2x1ZGUgInNtYWxsZnQuaCIKKyNkZWZpbmUgUF9CQU5EUyAxNyAgICAgIC8qIDYySHogdG8gMTZrSHogKi8KKyNkZWZpbmUgTk9JU0VfQ09NUEFORF9MRVZFTFMgNDAKKworCisjZGVmaW5lIHRvZEIoeCkgICAoKHgpPT0wPy00MDAuZjpsb2coKHgpKih4KSkqNC4zNDI5NDQ4MGYpCisjZGVmaW5lIGZyb21kQih4KSAoZXhwKCh4KSouMTE1MTI5MjVmKSkgIAorCisvKiBUaGUgYmFyayBzY2FsZSBlcXVhdGlvbnMgYXJlIGFwcHJveGltYXRpb25zLCBzaW5jZSB0aGUgb3JpZ2luYWwKKyAgIHRhYmxlIHdhcyBzb21ld2hhdCBoYW5kIHJvbGxlZC4gIFRoZSBiZWxvdyBhcmUgY2hvc2VuIHRvIGhhdmUgdGhlCisgICBiZXN0IHBvc3NpYmxlIGZpdCB0byB0aGUgcm9sbGVkIHRhYmxlcywgdGh1cyB0aGVpciBzb21ld2hhdCBvZGQKKyAgIGFwcGVhcmFuY2UgKHRoZXNlIGFyZSBtb3JlIGFjY3VyYXRlIGFuZCBvdmVyIGEgbG9uZ2VyIHJhbmdlIHRoYW4KKyAgIHRoZSBvZnQtcXVvdGVkIGJhcmsgZXF1YXRpb25zIGZvdW5kIGluIHRoZSB0ZXh0cyBJIGhhdmUpLiAgVGhlCisgICBhcHByb3hpbWF0aW9ucyBhcmUgdmFsaWQgZnJvbSAwIC0gMzBrSHogKG55cXVpc3QpIG9yIHNvLgorCisgICBhbGwgZiBpbiBIeiwgeiBpbiBCYXJrICovCisKKyNkZWZpbmUgdG9CQVJLKG4pICAgKDEzLjFmKmF0YW4oLjAwMDc0ZioobikpKzIuMjRmKmF0YW4oKG4pKihuKSoxLjg1ZS04ZikrMWUtNGYqKG4pKQorI2RlZmluZSBmcm9tQkFSSyh6KSAoMTAyLmYqKHopLTIuZipwb3coeiwyLmYpKy40Zipwb3coeiwzLmYpK3BvdygxLjQ2Zix6KS0xLmYpCisKKy8qIEZyZXF1ZW5jeSB0byBvY3RhdmUuICBXZSBhcmJpdHJhcmlseSBkZWNsYXJlIDYzLjUgSHogdG8gYmUgb2N0YXZlCisgICAwLjAgKi8KKworI2RlZmluZSB0b09DKG4pICAgICAobG9nKG4pKjEuNDQyNjk1Zi01Ljk2NTc4NGYpCisjZGVmaW5lIGZyb21PQyhvKSAgIChleHAoKChvKSs1Ljk2NTc4NGYpKi42OTMxNDdmKSkKKworCit0eXBlZGVmIHN0cnVjdCB7CisKKyAgZmxvYXQgbm9pc2V3aW5kb3dsbzsKKyAgZmxvYXQgbm9pc2V3aW5kb3doaTsKKyAgaW50ICAgbm9pc2V3aW5kb3dsb21pbjsKKyAgaW50ICAgbm9pc2V3aW5kb3doaW1pbjsKKyAgaW50ICAgbm9pc2V3aW5kb3dmaXhlZDsKKyAgZmxvYXQgbm9pc2VvZmZbUF9CQU5EU107CisgIGZsb2F0IG5vaXNlY29tcGFuZFtOT0lTRV9DT01QQU5EX0xFVkVMU107CisKK30gVm9yYmlzUHN5SW5mbzsKKworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IG47CisgIGludCByYXRlOworICBzdHJ1Y3QgZHJmdF9sb29rdXAgbG9va3VwOworICBWb3JiaXNQc3lJbmZvICp2aTsKKworICBmbG9hdCAqd2luZG93OworICBmbG9hdCAqbm9pc2VvZmZzZXQ7CisgIGxvbmcgICpiYXJrOworCit9IFZvcmJpc1BzeTsKKworCitWb3JiaXNQc3kgKnZvcmJpc19wc3lfaW5pdChpbnQgcmF0ZSwgaW50IHNpemUpOwordm9pZCB2b3JiaXNfcHN5X2Rlc3Ryb3koVm9yYmlzUHN5ICpwc3kpOwordm9pZCBjb21wdXRlX2N1cnZlKFZvcmJpc1BzeSAqcHN5LCBmbG9hdCAqYXVkaW8sIGZsb2F0ICpjdXJ2ZSk7Cit2b2lkIGN1cnZlX3RvX2xwYyhWb3JiaXNQc3kgKnBzeSwgZmxvYXQgKmN1cnZlLCBmbG9hdCAqYXdrMSwgZmxvYXQgKmF3azIsIGludCBvcmQpOworCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvdnEuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3ZxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQwMTMzZgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3ZxLmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiBKZWFuLU1hcmMgVmFsaW4KKyAgIEZpbGU6IHZxLmMKKyAgIFZlY3RvciBxdWFudGl6YXRpb24KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ2cS5oIgorI2luY2x1ZGUgInN0YWNrX2FsbG9jLmgiCisjaW5jbHVkZSAibWlzYy5oIgorCisjaWZkZWYgX1VTRV9TU0UKKyNpbmNsdWRlIDx4bW1pbnRyaW4uaD4KKyNpbmNsdWRlICJ2cV9zc2UuaCIKKyNlbGlmIGRlZmluZWQoU0hPUlRDVVRTKSAmJiAoZGVmaW5lZChBUk00X0FTTSkgfHwgZGVmaW5lZChBUk01RV9BU00pKQorI2luY2x1ZGUgInZxX2FybTQuaCIKKyNlbGlmIGRlZmluZWQoQkZJTl9BU00pCisjaW5jbHVkZSAidnFfYmZpbi5oIgorI2VuZGlmCisKKworaW50IHNjYWxfcXVhbnQoc3B4X3dvcmQxNl90IGluLCBjb25zdCBzcHhfd29yZDE2X3QgKmJvdW5kYXJ5LCBpbnQgZW50cmllcykKK3sKKyAgIGludCBpPTA7CisgICB3aGlsZSAoaTxlbnRyaWVzLTEgJiYgaW4+Ym91bmRhcnlbMF0pCisgICB7CisgICAgICBib3VuZGFyeSsrOworICAgICAgaSsrOworICAgfQorICAgcmV0dXJuIGk7Cit9CisKK2ludCBzY2FsX3F1YW50MzIoc3B4X3dvcmQzMl90IGluLCBjb25zdCBzcHhfd29yZDMyX3QgKmJvdW5kYXJ5LCBpbnQgZW50cmllcykKK3sKKyAgIGludCBpPTA7CisgICB3aGlsZSAoaTxlbnRyaWVzLTEgJiYgaW4+Ym91bmRhcnlbMF0pCisgICB7CisgICAgICBib3VuZGFyeSsrOworICAgICAgaSsrOworICAgfQorICAgcmV0dXJuIGk7Cit9CisKKy8qRmluZHMgdGhlIGluZGV4IG9mIHRoZSBlbnRyeSBpbiBhIGNvZGVib29rIHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBpbnB1dCovCitpbnQgdnFfaW5kZXgoZmxvYXQgKmluLCBjb25zdCBmbG9hdCAqY29kZWJvb2ssIGludCBsZW4sIGludCBlbnRyaWVzKQoreworICAgaW50IGksajsKKyAgIGZsb2F0IG1pbl9kaXN0PTA7CisgICBpbnQgYmVzdF9pbmRleD0wOworICAgZm9yIChpPTA7aTxlbnRyaWVzO2krKykKKyAgIHsKKyAgICAgIGZsb2F0IGRpc3Q9MDsKKyAgICAgIGZvciAoaj0wO2o8bGVuO2orKykKKyAgICAgIHsKKyAgICAgICAgIGZsb2F0IHRtcCA9IGluW2pdLSpjb2RlYm9vaysrOworICAgICAgICAgZGlzdCArPSB0bXAqdG1wOworICAgICAgfQorICAgICAgaWYgKGk9PTAgfHwgZGlzdDxtaW5fZGlzdCkKKyAgICAgIHsKKyAgICAgICAgIG1pbl9kaXN0PWRpc3Q7CisgICAgICAgICBiZXN0X2luZGV4PWk7CisgICAgICB9CisgICB9CisgICByZXR1cm4gYmVzdF9pbmRleDsKK30KKworCisjaWZuZGVmIE9WRVJSSURFX1ZRX05CRVNUCisvKkZpbmRzIHRoZSBpbmRpY2VzIG9mIHRoZSBuLWJlc3QgZW50cmllcyBpbiBhIGNvZGVib29rKi8KK3ZvaWQgdnFfbmJlc3Qoc3B4X3dvcmQxNl90ICppbiwgY29uc3Qgc3B4X3dvcmQxNl90ICpjb2RlYm9vaywgaW50IGxlbiwgaW50IGVudHJpZXMsIHNweF93b3JkMzJfdCAqRSwgaW50IE4sIGludCAqbmJlc3QsIHNweF93b3JkMzJfdCAqYmVzdF9kaXN0LCBjaGFyICpzdGFjaykKK3sKKyAgIGludCBpLGosayx1c2VkOworICAgdXNlZCA9IDA7CisgICBmb3IgKGk9MDtpPGVudHJpZXM7aSsrKQorICAgeworICAgICAgc3B4X3dvcmQzMl90IGRpc3Q9MDsKKyAgICAgIGZvciAoaj0wO2o8bGVuO2orKykKKyAgICAgICAgIGRpc3QgPSBNQUMxNl8xNihkaXN0LGluW2pdLCpjb2RlYm9vaysrKTsKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgICAgZGlzdD1TVUIzMihTSFIzMihFW2ldLDEpLGRpc3QpOworI2Vsc2UKKyAgICAgIGRpc3Q9LjVmKkVbaV0tZGlzdDsKKyNlbmRpZgorICAgICAgaWYgKGk8TiB8fCBkaXN0PGJlc3RfZGlzdFtOLTFdKQorICAgICAgeworICAgICAgICAgZm9yIChrPU4tMTsgKGsgPj0gMSkgJiYgKGsgPiB1c2VkIHx8IGRpc3QgPCBiZXN0X2Rpc3Rbay0xXSk7IGstLSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGJlc3RfZGlzdFtrXT1iZXN0X2Rpc3Rbay0xXTsKKyAgICAgICAgICAgIG5iZXN0W2tdID0gbmJlc3Rbay0xXTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJlc3RfZGlzdFtrXT1kaXN0OworICAgICAgICAgbmJlc3Rba109aTsKKyAgICAgICAgIHVzZWQrKzsKKyAgICAgIH0KKyAgIH0KK30KKyNlbmRpZgorCisKKworCisjaWZuZGVmIE9WRVJSSURFX1ZRX05CRVNUX1NJR04KKy8qRmluZHMgdGhlIGluZGljZXMgb2YgdGhlIG4tYmVzdCBlbnRyaWVzIGluIGEgY29kZWJvb2sgd2l0aCBzaWduKi8KK3ZvaWQgdnFfbmJlc3Rfc2lnbihzcHhfd29yZDE2X3QgKmluLCBjb25zdCBzcHhfd29yZDE2X3QgKmNvZGVib29rLCBpbnQgbGVuLCBpbnQgZW50cmllcywgc3B4X3dvcmQzMl90ICpFLCBpbnQgTiwgaW50ICpuYmVzdCwgc3B4X3dvcmQzMl90ICpiZXN0X2Rpc3QsIGNoYXIgKnN0YWNrKQoreworICAgaW50IGksaixrLCBzaWduLCB1c2VkOworICAgdXNlZD0wOworICAgZm9yIChpPTA7aTxlbnRyaWVzO2krKykKKyAgIHsKKyAgICAgIHNweF93b3JkMzJfdCBkaXN0PTA7CisgICAgICBmb3IgKGo9MDtqPGxlbjtqKyspCisgICAgICAgICBkaXN0ID0gTUFDMTZfMTYoZGlzdCxpbltqXSwqY29kZWJvb2srKyk7CisgICAgICBpZiAoZGlzdD4wKQorICAgICAgeworICAgICAgICAgc2lnbj0wOworICAgICAgICAgZGlzdD0tZGlzdDsKKyAgICAgIH0gZWxzZQorICAgICAgeworICAgICAgICAgc2lnbj0xOworICAgICAgfQorI2lmZGVmIEZJWEVEX1BPSU5UCisgICAgICBkaXN0ID0gQUREMzIoZGlzdCxTSFIzMihFW2ldLDEpKTsKKyNlbHNlCisgICAgICBkaXN0ID0gQUREMzIoZGlzdCwuNWYqRVtpXSk7CisjZW5kaWYKKyAgICAgIGlmIChpPE4gfHwgZGlzdDxiZXN0X2Rpc3RbTi0xXSkKKyAgICAgIHsKKyAgICAgICAgIGZvciAoaz1OLTE7IChrID49IDEpICYmIChrID4gdXNlZCB8fCBkaXN0IDwgYmVzdF9kaXN0W2stMV0pOyBrLS0pCisgICAgICAgICB7CisgICAgICAgICAgICBiZXN0X2Rpc3Rba109YmVzdF9kaXN0W2stMV07CisgICAgICAgICAgICBuYmVzdFtrXSA9IG5iZXN0W2stMV07CisgICAgICAgICB9CisgICAgICAgICBiZXN0X2Rpc3Rba109ZGlzdDsKKyAgICAgICAgIG5iZXN0W2tdPWk7CisgICAgICAgICB1c2VkKys7CisgICAgICAgICBpZiAoc2lnbikKKyAgICAgICAgICAgIG5iZXN0W2tdKz1lbnRyaWVzOworICAgICAgfQorICAgfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC92cS5oIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvdnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2E4MTk3Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvdnEuaApAQCAtMCwwICsxLDU1IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVhbi1NYXJjIFZhbGluICovCisvKioKKyAgIEBmaWxlIHZxLmgKKyAgIEBicmllZiBWZWN0b3IgcXVhbnRpemF0aW9uCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBWUV9ICisjZGVmaW5lIFZRX0gKKworI2luY2x1ZGUgIm1pc2MuaCIKKworaW50IHNjYWxfcXVhbnQoc3B4X3dvcmQxNl90IGluLCBjb25zdCBzcHhfd29yZDE2X3QgKmJvdW5kYXJ5LCBpbnQgZW50cmllcyk7CitpbnQgc2NhbF9xdWFudDMyKHNweF93b3JkMzJfdCBpbiwgY29uc3Qgc3B4X3dvcmQzMl90ICpib3VuZGFyeSwgaW50IGVudHJpZXMpOworCitpbnQgdnFfaW5kZXgoZmxvYXQgKmluLCBjb25zdCBmbG9hdCAqY29kZWJvb2ssIGludCBsZW4sIGludCBlbnRyaWVzKTsKKyNpZmRlZiBfVVNFX1NTRQorI2luY2x1ZGUgPHhtbWludHJpbi5oPgordm9pZCB2cV9uYmVzdChzcHhfd29yZDE2X3QgKmluLCBjb25zdCBfX20xMjggKmNvZGVib29rLCBpbnQgbGVuLCBpbnQgZW50cmllcywgX19tMTI4ICpFLCBpbnQgTiwgaW50ICpuYmVzdCwgc3B4X3dvcmQzMl90ICpiZXN0X2Rpc3QsIGNoYXIgKnN0YWNrKTsKKwordm9pZCB2cV9uYmVzdF9zaWduKHNweF93b3JkMTZfdCAqaW4sIGNvbnN0IF9fbTEyOCAqY29kZWJvb2ssIGludCBsZW4sIGludCBlbnRyaWVzLCBfX20xMjggKkUsIGludCBOLCBpbnQgKm5iZXN0LCBzcHhfd29yZDMyX3QgKmJlc3RfZGlzdCwgY2hhciAqc3RhY2spOworI2Vsc2UKK3ZvaWQgdnFfbmJlc3Qoc3B4X3dvcmQxNl90ICppbiwgY29uc3Qgc3B4X3dvcmQxNl90ICpjb2RlYm9vaywgaW50IGxlbiwgaW50IGVudHJpZXMsIHNweF93b3JkMzJfdCAqRSwgaW50IE4sIGludCAqbmJlc3QsIHNweF93b3JkMzJfdCAqYmVzdF9kaXN0LCBjaGFyICpzdGFjayk7CisKK3ZvaWQgdnFfbmJlc3Rfc2lnbihzcHhfd29yZDE2X3QgKmluLCBjb25zdCBzcHhfd29yZDE2X3QgKmNvZGVib29rLCBpbnQgbGVuLCBpbnQgZW50cmllcywgc3B4X3dvcmQzMl90ICpFLCBpbnQgTiwgaW50ICpuYmVzdCwgc3B4X3dvcmQzMl90ICpiZXN0X2Rpc3QsIGNoYXIgKnN0YWNrKTsKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3ZxX2FybTQuaCBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3ZxX2FybTQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODViODYxCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvdnFfYXJtNC5oCkBAIC0wLDAgKzEsMTE1IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDQgSmVhbi1NYXJjIFZhbGluICovCisvKioKKyAgIEBmaWxlIHZxX2FybTQuaAorICAgQGJyaWVmIEFSTTQtb3B0aW1pemVkIHZxIHJvdXRpbmUKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjZGVmaW5lIE9WRVJSSURFX1ZRX05CRVNUCit2b2lkIHZxX25iZXN0KHNweF93b3JkMTZfdCAqaW4sIGNvbnN0IHNweF93b3JkMTZfdCAqY29kZWJvb2ssIGludCBsZW4sIGludCBlbnRyaWVzLCBzcHhfd29yZDMyX3QgKkUsIGludCBOLCBpbnQgKm5iZXN0LCBzcHhfd29yZDMyX3QgKmJlc3RfZGlzdCwgY2hhciAqc3RhY2spCit7CisgICBpbnQgaSxqOworICAgZm9yIChpPTA7aTxlbnRyaWVzO2krPTQpCisgICB7CisjaWYgMQorICAgICAgc3B4X3dvcmQzMl90IGRpc3QxLCBkaXN0MiwgZGlzdDMsIGRpc3Q0OworICAgICAgaW50IGRlYWQxLCBkZWFkMiwgZGVhZDMsIGRlYWQ0LCBkZWFkNSwgZGVhZDYsIGRlYWQ3LCBkZWFkODsKKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgICAgICJtb3YgJTAsICMwIFxuXHQiCisgICAgICAgICAgICAibW92ICUxLCAjMCBcblx0IgorICAgICAgICAgICAgIm1vdiAlMiwgIzAgXG5cdCIKKyAgICAgICAgICAgICJtb3YgJTMsICMwIFxuXHQiCisgICAgICAgICAgICAibW92ICUxMCwgJTQgXG5cdCIKKyAgICAgICAgICAgICJhZGQgJTQsICU0LCAlNFxuXHQiCisgICAgICAgICAgICAiLnZxbG9vcCU9OlxuXHQiCisgICAgICAgICAgICAibGRyc2ggJTcsIFslNV0sICMyIFxuXHQiCisgICAgICAgICAgICAibGRyc2ggJTgsIFslNl0gXG5cdCIKKyAgICAgICAgICAgICJtb3YgJTksICU2IFxuXHQiCisgICAgICAgICAgICAibWxhICUwLCAlNywgJTgsICUwIFxuXHQiCisgICAgICAgICAgICAibGRyc2ggJTgsIFslOSwgJTRdISBcblx0IgorICAgICAgICAgICAgIm1sYSAlMSwgJTcsICU4LCAlMSBcblx0IgorICAgICAgICAgICAgImxkcnNoICU4LCBbJTksICU0XSFcblx0IgorICAgICAgICAgICAgIm1sYSAlMiwgJTcsICU4LCAlMiBcblx0IgorICAgICAgICAgICAgImxkcnNoICU4LCBbJTksICU0XSEgXG5cdCIKKyAgICAgICAgICAgICJtbGEgJTMsICU3LCAlOCwgJTMgXG5cdCIKKyAgICAgICAgICAgICJzdWJzICUxMCwgJTEwLCAjMSBcblx0IgorICAgICAgICAgICAgImFkZCAlNiwgJTYsICMyIFxuXHQiCisgICAgICAgICAgICAiYm5lIC52cWxvb3AlPSIKKyAgICAgICAgIDogIj1yIiAoZGlzdDEpLCAiPXIiIChkaXN0MiksICI9ciIgKGRpc3QzKSwgIj1yIiAoZGlzdDQpLAorICAgICAgIj1yIiAoZGVhZDEpLCAiPXIiIChkZWFkMiksICI9ciIgKGNvZGVib29rKSwgIj1yIiAoZGVhZDQpLAorICAgICAgIj1yIiAoZGVhZDUpLCAiPXIiIChkZWFkNiksICI9ciIgKGRlYWQ3KQorICAgICAgICAgOiAiNCIgKGxlbiksICI1IiAoaW4pLCAiNiIgKGNvZGVib29rKQorICAgICAgICAgOiAiY2MiKTsKKyNlbHNlCitkaXN0MT1kaXN0Mj1kaXN0Mz1kaXN0ND0wOworICAgLyogICBzcHhfd29yZDMyX3QgZGlzdDE9MDsKKyAgICAgIHNweF93b3JkMzJfdCBkaXN0Mj0wOworICAgICAgc3B4X3dvcmQzMl90IGRpc3QzPTA7CisgICAgICBzcHhfd29yZDMyX3QgZGlzdDQ9MDsqLworICAgICAgZm9yIChqPTA7ajwyO2orKykKKyAgICAgIHsKKyAgICAgICAgIGNvbnN0IHNweF93b3JkMTZfdCAqY29kZSA9IGNvZGVib29rOworICAgICAgICAgZGlzdDEgPSBNQUMxNl8xNihkaXN0MSxpbltqXSwqY29kZSk7CisgICAgICAgICBjb2RlICs9IGxlbjsKKyAgICAgICAgIGRpc3QyID0gTUFDMTZfMTYoZGlzdDIsaW5bal0sKmNvZGUpOworICAgICAgICAgY29kZSArPSBsZW47CisgICAgICAgICBkaXN0MyA9IE1BQzE2XzE2KGRpc3QzLGluW2pdLCpjb2RlKTsKKyAgICAgICAgIGNvZGUgKz0gbGVuOworICAgICAgICAgZGlzdDQgPSBNQUMxNl8xNihkaXN0NCxpbltqXSwqY29kZSk7CisgICAgICAgICBjb2RlYm9vaysrOworICAgICAgfQorI2VuZGlmCisgICAgICBkaXN0MT1TVUIzMihTSFIoKkUrKywxKSxkaXN0MSk7CisgICAgICBpZiAoZGlzdDE8KmJlc3RfZGlzdCB8fCBpPT0wKQorICAgICAgeworICAgICAgICAgKmJlc3RfZGlzdD1kaXN0MTsKKyAgICAgICAgICpuYmVzdD1pOworICAgICAgfQorICAgICAgZGlzdDI9U1VCMzIoU0hSKCpFKyssMSksZGlzdDIpOworICAgICAgaWYgKGRpc3QyPCpiZXN0X2Rpc3QpCisgICAgICB7CisgICAgICAgICAqYmVzdF9kaXN0PWRpc3QyOworICAgICAgICAgKm5iZXN0PWkrMTsKKyAgICAgIH0KKyAgICAgIGRpc3QzPVNVQjMyKFNIUigqRSsrLDEpLGRpc3QzKTsKKyAgICAgIGlmIChkaXN0MzwqYmVzdF9kaXN0KQorICAgICAgeworICAgICAgICAgKmJlc3RfZGlzdD1kaXN0MzsKKyAgICAgICAgICpuYmVzdD1pKzI7CisgICAgICB9CisgICAgICBkaXN0ND1TVUIzMihTSFIoKkUrKywxKSxkaXN0NCk7CisgICAgICBpZiAoZGlzdDQ8KmJlc3RfZGlzdCkKKyAgICAgIHsKKyAgICAgICAgICpiZXN0X2Rpc3Q9ZGlzdDQ7CisgICAgICAgICAqbmJlc3Q9aSszOworICAgICAgfQorICAgICAgY29kZWJvb2sgKz0gMypsZW47CisgICB9Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC92cV9iZmluLmggYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC92cV9iZmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNjOWVhNQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3ZxX2JmaW4uaApAQCAtMCwwICsxLDEwNyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA1IEFuYWxvZyBEZXZpY2VzICovCisvKioKKyAgIEBmaWxlIHZxX2JmaW4uaAorICAgQGF1dGhvciBKZWFuLU1hcmMgVmFsaW4gCisgICBAYnJpZWYgQmxhY2tmaW4tb3B0aW1pemVkIHZxIHJvdXRpbmUKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjZGVmaW5lIE9WRVJSSURFX1ZRX05CRVNUCit2b2lkIHZxX25iZXN0KHNweF93b3JkMTZfdCAqaW4sIGNvbnN0IHNweF93b3JkMTZfdCAqY29kZWJvb2ssIGludCBsZW4sIGludCBlbnRyaWVzLCBzcHhfd29yZDMyX3QgKkUsIGludCBOLCBpbnQgKm5iZXN0LCBzcHhfd29yZDMyX3QgKmJlc3RfZGlzdCwgY2hhciAqc3RhY2spCit7CisgICBpZiAoTj09MSkKKyAgIHsKKyAgICAgIGJlc3RfZGlzdFswXSA9IDIxNDc0ODM2NDc7CisgICAgICB7CisgICAgICAgICBzcHhfd29yZDMyX3QgZGlzdDsKKyAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fCisgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAiTEMwID0gJTg7XG5cdCIKKyAgICAgICAgICAgICJSMiA9IDA7XG5cdCIKKyAgICAgICAgICAgICJJMCA9ICU2O1xuXHQiCisgICAgICAgICAgICAiQjAgPSAlNjtcblx0IgorICAgICAgICAgICAgIkwwID0gJTk7XG5cdCIKKyAgICAgICAgICAgICJMT09QIGVudHJpZXNfbG9vcCU9IExDMDtcblx0IgorICAgICAgICAgICAgIkxPT1BfQkVHSU4gZW50cmllc19sb29wJT07XG5cdCIKKyAgICAgICAgICAgICAgICIlMCA9IFslNCsrXTtcblx0IgorICAgICAgICAgICAgICAgIiUwID4+PSAxO1xuXHQiCisgICAgICAgICAgICAgICAiQTAgPSAlMDtcblx0IgorICAgICAgICAgICAgICAgIlIwLkwgPSBXWyUxKyslN10gfHwgUjEuTCA9IFdbSTArK107XG5cdCIKKyAgICAgICAgICAgICAgICJMT09QIHZxX2xvb3AlPSBMQzEgPSAlNTtcblx0IgorICAgICAgICAgICAgICAgIkxPT1BfQkVHSU4gdnFfbG9vcCU9O1xuXHQiCisgICAgICAgICAgICAgICAgICAiJTAgPSAoQTAgLT0gUjAuTCpSMS5MKSAoSVMpIHx8IFIwLkwgPSBXWyUxKyslN10gfHwgUjEuTCA9IFdbSTArK107XG5cdCIKKyAgICAgICAgICAgICAgICJMT09QX0VORCB2cV9sb29wJT07XG5cdCIKKyAgICAgICAgICAgICAgICIlMCA9IChBMCAtPSBSMC5MKlIxLkwpIChJUyk7XG5cdCIKKyAgICAgICAgICAgICAgICJjYyA9ICUwIDwgJTI7XG5cdCIKKyAgICAgICAgICAgICAgICJpZiBjYyAlMiA9ICUwO1xuXHQiCisgICAgICAgICAgICAgICAiaWYgY2MgJTMgPSBSMjtcblx0IgorICAgICAgICAgICAgICAgIlIyICs9IDE7XG5cdCIKKyAgICAgICAgICAgICJMT09QX0VORCBlbnRyaWVzX2xvb3AlPTtcblx0IgorICAgICAgICAgICAgOiAiPSZEIiAoZGlzdCksICI9JmEiIChjb2RlYm9vayksICI9JmQiIChiZXN0X2Rpc3RbMF0pLCAiPSZkIiAobmJlc3RbMF0pLCAiPSZhIiAoRSkKKyAgICAgICAgICAgIDogImEiIChsZW4tMSksICJhIiAoaW4pLCAiYSIgKDIpLCAiZCIgKGVudHJpZXMpLCAiZCIgKGxlbjw8MSksICIxIiAoY29kZWJvb2spLCAiNCIgKEUpLCAiMiIgKGJlc3RfZGlzdFswXSksICIzIiAobmJlc3RbMF0pCisgICAgICAgICAgICA6ICJSMCIsICJSMSIsICJSMiIsICJJMCIsICJMMCIsICJCMCIsICJBMCIsICJjYyIsICJtZW1vcnkiCisgICAgICAgICAgICAgICApOworICAgICAgfQorICAgfSBlbHNlIHsKKyAgIGludCBpLGssdXNlZDsKKyAgIHVzZWQgPSAwOworICAgZm9yIChpPTA7aTxlbnRyaWVzO2krKykKKyAgIHsKKyAgICAgIHNweF93b3JkMzJfdCBkaXN0OworICAgICAgX19hc21fXworICAgICAgICAgICAgKAorICAgICAgICAgICAgIiUwID4+PSAxO1xuXHQiCisgICAgICAgICAgICAiQTAgPSAlMDtcblx0IgorICAgICAgICAgICAgIkkwID0gJTM7XG5cdCIKKyAgICAgICAgICAgICJMMCA9IDA7XG5cdCIKKyAgICAgICAgICAgICJSMC5MID0gV1slMSsrJTRdIHx8IFIxLkwgPSBXW0kwKytdO1xuXHQiCisgICAgICAgICAgICAiTE9PUCB2cV9sb29wJT0gTEMwID0gJTI7XG5cdCIKKyAgICAgICAgICAgICJMT09QX0JFR0lOIHZxX2xvb3AlPTtcblx0IgorICAgICAgICAgICAgICAgIiUwID0gKEEwIC09IFIwLkwqUjEuTCkgKElTKSB8fCBSMC5MID0gV1slMSsrJTRdIHx8IFIxLkwgPSBXW0kwKytdO1xuXHQiCisgICAgICAgICAgICAiTE9PUF9FTkQgdnFfbG9vcCU9O1xuXHQiCisgICAgICAgICAgICAiJTAgPSAoQTAgLT0gUjAuTCpSMS5MKSAoSVMpO1xuXHQiCisgICAgICAgICA6ICI9RCIgKGRpc3QpLCAiPWEiIChjb2RlYm9vaykKKyAgICAgICAgIDogImEiIChsZW4tMSksICJhIiAoaW4pLCAiYSIgKDIpLCAiMSIgKGNvZGVib29rKSwgIjAiIChFW2ldKQorICAgICAgICAgOiAiUjAiLCAiUjEiLCAiSTAiLCAiTDAiLCAiQTAiCisgICAgICAgICAgICApOworICAgICAgaWYgKGk8TiB8fCBkaXN0PGJlc3RfZGlzdFtOLTFdKQorICAgICAgeworICAgICAgICAgZm9yIChrPU4tMTsgKGsgPj0gMSkgJiYgKGsgPiB1c2VkIHx8IGRpc3QgPCBiZXN0X2Rpc3Rbay0xXSk7IGstLSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGJlc3RfZGlzdFtrXT1iZXN0X2Rpc3Rbay0xXTsKKyAgICAgICAgICAgIG5iZXN0W2tdID0gbmJlc3Rbay0xXTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJlc3RfZGlzdFtrXT1kaXN0OworICAgICAgICAgbmJlc3Rba109aTsKKyAgICAgICAgIHVzZWQrKzsKKyAgICAgIH0KKyAgIH0KKyAgIH0KK30KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3ZxX3NzZS5oIGIvM3JkcGFydHkvc3BlZXgvbGlic3BlZXgvdnFfc3NlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBhNDJjZQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3ZxX3NzZS5oCkBAIC0wLDAgKzEsMTIwIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDQgSmVhbi1NYXJjIFZhbGluICovCisvKioKKyAgIEBmaWxlIHZxX3NzZS5oCisgICBAYnJpZWYgU1NFLW9wdGltaXplZCB2cSByb3V0aW5lCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2RlZmluZSBPVkVSUklERV9WUV9OQkVTVAordm9pZCB2cV9uYmVzdChzcHhfd29yZDE2X3QgKl9pbiwgY29uc3QgX19tMTI4ICpjb2RlYm9vaywgaW50IGxlbiwgaW50IGVudHJpZXMsIF9fbTEyOCAqRSwgaW50IE4sIGludCAqbmJlc3QsIHNweF93b3JkMzJfdCAqYmVzdF9kaXN0LCBjaGFyICpzdGFjaykKK3sKKyAgIGludCBpLGosayx1c2VkOworICAgVkFSREVDTChmbG9hdCAqZGlzdCk7CisgICBWQVJERUNMKF9fbTEyOCAqaW4pOworICAgX19tMTI4IGhhbGY7CisgICB1c2VkID0gMDsKKyAgIEFMTE9DKGRpc3QsIGVudHJpZXMsIGZsb2F0KTsKKyAgIGhhbGYgPSBfbW1fc2V0X3BzMSguNWYpOworICAgQUxMT0MoaW4sIGxlbiwgX19tMTI4KTsKKyAgIGZvciAoaT0wO2k8bGVuO2krKykKKyAgICAgIGluW2ldID0gX21tX3NldF9wczEoX2luW2ldKTsKKyAgIGZvciAoaT0wO2k8ZW50cmllcz4+MjtpKyspCisgICB7CisgICAgICBfX20xMjggZCA9IF9tbV9tdWxfcHMoRVtpXSwgaGFsZik7CisgICAgICBmb3IgKGo9MDtqPGxlbjtqKyspCisgICAgICAgICBkID0gX21tX3N1Yl9wcyhkLCBfbW1fbXVsX3BzKGluW2pdLCAqY29kZWJvb2srKykpOworICAgICAgX21tX3N0b3JldV9wcyhkaXN0KzQqaSwgZCk7CisgICB9CisgICBmb3IgKGk9MDtpPGVudHJpZXM7aSsrKQorICAgeworICAgICAgaWYgKGk8TiB8fCBkaXN0W2ldPGJlc3RfZGlzdFtOLTFdKQorICAgICAgeworICAgICAgICAgZm9yIChrPU4tMTsgKGsgPj0gMSkgJiYgKGsgPiB1c2VkIHx8IGRpc3RbaV0gPCBiZXN0X2Rpc3Rbay0xXSk7IGstLSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGJlc3RfZGlzdFtrXT1iZXN0X2Rpc3Rbay0xXTsKKyAgICAgICAgICAgIG5iZXN0W2tdID0gbmJlc3Rbay0xXTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJlc3RfZGlzdFtrXT1kaXN0W2ldOworICAgICAgICAgbmJlc3Rba109aTsKKyAgICAgICAgIHVzZWQrKzsKKyAgICAgIH0KKyAgIH0KK30KKworCisKKworI2RlZmluZSBPVkVSUklERV9WUV9OQkVTVF9TSUdOCit2b2lkIHZxX25iZXN0X3NpZ24oc3B4X3dvcmQxNl90ICpfaW4sIGNvbnN0IF9fbTEyOCAqY29kZWJvb2ssIGludCBsZW4sIGludCBlbnRyaWVzLCBfX20xMjggKkUsIGludCBOLCBpbnQgKm5iZXN0LCBzcHhfd29yZDMyX3QgKmJlc3RfZGlzdCwgY2hhciAqc3RhY2spCit7CisgICBpbnQgaSxqLGssdXNlZDsKKyAgIFZBUkRFQ0woZmxvYXQgKmRpc3QpOworICAgVkFSREVDTChfX20xMjggKmluKTsKKyAgIF9fbTEyOCBoYWxmOworICAgdXNlZCA9IDA7CisgICBBTExPQyhkaXN0LCBlbnRyaWVzLCBmbG9hdCk7CisgICBoYWxmID0gX21tX3NldF9wczEoLjVmKTsKKyAgIEFMTE9DKGluLCBsZW4sIF9fbTEyOCk7CisgICBmb3IgKGk9MDtpPGxlbjtpKyspCisgICAgICBpbltpXSA9IF9tbV9zZXRfcHMxKF9pbltpXSk7CisgICBmb3IgKGk9MDtpPGVudHJpZXM+PjI7aSsrKQorICAgeworICAgICAgX19tMTI4IGQgPSBfbW1fc2V0emVyb19wcygpOworICAgICAgZm9yIChqPTA7ajxsZW47aisrKQorICAgICAgICAgZCA9IF9tbV9hZGRfcHMoZCwgX21tX211bF9wcyhpbltqXSwgKmNvZGVib29rKyspKTsKKyAgICAgIF9tbV9zdG9yZXVfcHMoZGlzdCs0KmksIGQpOworICAgfQorICAgZm9yIChpPTA7aTxlbnRyaWVzO2krKykKKyAgIHsKKyAgICAgIGludCBzaWduOworICAgICAgaWYgKGRpc3RbaV0+MCkKKyAgICAgIHsKKyAgICAgICAgIHNpZ249MDsKKyAgICAgICAgIGRpc3RbaV09LWRpc3RbaV07CisgICAgICB9IGVsc2UKKyAgICAgIHsKKyAgICAgICAgIHNpZ249MTsKKyAgICAgIH0KKyAgICAgIGRpc3RbaV0gKz0gLjVmKigoZmxvYXQqKUUpW2ldOworICAgICAgaWYgKGk8TiB8fCBkaXN0W2ldPGJlc3RfZGlzdFtOLTFdKQorICAgICAgeworICAgICAgICAgZm9yIChrPU4tMTsgKGsgPj0gMSkgJiYgKGsgPiB1c2VkIHx8IGRpc3RbaV0gPCBiZXN0X2Rpc3Rbay0xXSk7IGstLSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGJlc3RfZGlzdFtrXT1iZXN0X2Rpc3Rbay0xXTsKKyAgICAgICAgICAgIG5iZXN0W2tdID0gbmJlc3Rbay0xXTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJlc3RfZGlzdFtrXT1kaXN0W2ldOworICAgICAgICAgbmJlc3Rba109aTsKKyAgICAgICAgIHVzZWQrKzsKKyAgICAgICAgIGlmIChzaWduKQorICAgICAgICAgICAgbmJlc3Rba10rPWVudHJpZXM7CisgICAgICB9CisgICB9Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC93aW5kb3cuYyBiLzNyZHBhcnR5L3NwZWV4L2xpYnNwZWV4L3dpbmRvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YjE5MTcKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9saWJzcGVleC93aW5kb3cuYwpAQCAtMCwwICsxLDk0IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmVhbi1NYXJjIFZhbGluIAorICAgRmlsZTogd2luZG93LmMKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJtaXNjLmgiCisKKyNpZmRlZiBGSVhFRF9QT0lOVAorY29uc3Qgc3B4X3dvcmQxNl90IGxwY193aW5kb3dbMjAwXSA9IHsKKzEzMTAsIDEzMTMsIDEzMjEsIDEzMzMsIDEzNTIsIDEzNzUsIDE0MDMsIDE0MzYsCisxNDc1LCAxNTE4LCAxNTY3LCAxNjIxLCAxNjc5LCAxNzQzLCAxODExLCAxODg0LAorMTk2MiwgMjA0NCwgMjEzMiwgMjIyNCwgMjMyMCwgMjQyMSwgMjUyNiwgMjYzNiwKKzI3NTAsIDI4NjgsIDI5OTAsIDMxMTYsIDMyNDYsIDMzODAsIDM1MTgsIDM2NTksCiszODA0LCAzOTUyLCA0MTA0LCA0MjU5LCA0NDE3LCA0NTc4LCA0NzQyLCA0OTA5LAorNTA3OSwgNTI1MSwgNTQyNSwgNTYwMiwgNTc4MSwgNTk2MywgNjE0NiwgNjMzMSwKKzY1MTgsIDY3MDYsIDY4OTYsIDcwODcsIDcyODAsIDc0NzMsIDc2NjgsIDc4NjMsCis4MDU5LCA4MjU2LCA4NDUyLCA4NjUwLCA4ODQ3LCA5MDQ0LCA5MjQxLCA5NDM4LAorOTYzNSwgOTgzMSwgMTAwMjYsIDEwMjIwLCAxMDQxNCwgMTA2MDYsIDEwNzk3LCAxMDk4NywKKzExMTc2LCAxMTM2MywgMTE1NDgsIDExNzMxLCAxMTkxMiwgMTIwOTEsIDEyMjY4LCAxMjQ0MywKKzEyNjE1LCAxMjc4NSwgMTI5NTIsIDEzMTE2LCAxMzI3NywgMTM0MzUsIDEzNTkwLCAxMzc0MiwKKzEzODkwLCAxNDAzNSwgMTQxNzYsIDE0MzE0LCAxNDQ0OCwgMTQ1NzgsIDE0NzA0LCAxNDgyNiwKKzE0OTQ0LCAxNTA1OCwgMTUxNjgsIDE1MjczLCAxNTM3NCwgMTU0NzAsIDE1NTYyLCAxNTY0OSwKKzE1NzMyLCAxNTgxMCwgMTU4ODMsIDE1OTUxLCAxNjAxNSwgMTYwNzMsIDE2MTI3LCAxNjE3NSwKKzE2MjE5LCAxNjI1NywgMTYyOTEsIDE2MzE5LCAxNjM0MiwgMTYzNjAsIDE2MzczLCAxNjM4MSwKKzE2Mzg0LCAxNjM4NCwgMTYzODQsIDE2Mzg0LCAxNjM4NCwgMTYzODQsIDE2Mzg0LCAxNjM4NCwKKzE2Mzg0LCAxNjM4NCwgMTYzODQsIDE2Mzg0LCAxNjM4NCwgMTYzODQsIDE2Mzg0LCAxNjM4NCwKKzE2Mzg0LCAxNjM4NCwgMTYzODQsIDE2Mzg0LCAxNjM4NCwgMTYzODQsIDE2Mzg0LCAxNjM4NCwKKzE2Mzg0LCAxNjM4NCwgMTYzODQsIDE2Mzg0LCAxNjM4NCwgMTYzODQsIDE2Mzg0LCAxNjM4NCwKKzE2Mzg0LCAxNjM4NCwgMTYzODQsIDE2Mzg0LCAxNjM4NCwgMTYzODQsIDE2Mzg0LCAxNjM4NCwKKzE2Mzg0LCAxNjM4NCwgMTYzODQsIDE2Mzg0LCAxNjM4NCwgMTYzODQsIDE2Mzg0LCAxNjM4NCwKKzE2Mzg0LCAxNjM4NCwgMTYzODQsIDE2MzYxLCAxNjI5NCwgMTYxODMsIDE2MDI4LCAxNTgzMCwKKzE1NTg4LCAxNTMwNCwgMTQ5NzksIDE0NjEzLCAxNDIwNywgMTM3NjMsIDEzMjgyLCAxMjc2NiwKKzEyMjE1LCAxMTYzMSwgMTEwMTYsIDEwMzczLCA5NzAyLCA5MDA3LCA4Mjg5LCA3NTUxLAorNjc5NywgNjAyOCwgNTI1MSwgNDQ3MCwgMzY5NSwgMjk0MywgMjI0OCwgMTY5NgorfTsKKyNlbHNlCitjb25zdCBzcHhfd29yZDE2X3QgbHBjX3dpbmRvd1syMDBdID0geworICAgMC4wODAwMDBmLCAwLjA4MDE1OGYsIDAuMDgwNjMwZiwgMC4wODE0MThmLCAwLjA4MjUyMGYsIDAuMDgzOTM1ZiwgMC4wODU2NjNmLCAwLjA4NzcwM2YsCisgICAwLjA5MDA1MmYsIDAuMDkyNzEwZiwgMC4wOTU2NzRmLCAwLjA5ODk0M2YsIDAuMTAyNTE0ZiwgMC4xMDYzODVmLCAwLjExMDU1M2YsIDAuMTE1MDE1ZiwKKyAgIDAuMTE5NzY5ZiwgMC4xMjQ4MTFmLCAwLjEzMDEzN2YsIDAuMTM1NzQ0ZiwgMC4xNDE2MjhmLCAwLjE0Nzc4NmYsIDAuMTU0MjEyZiwgMC4xNjA5MDJmLAorICAgMC4xNjc4NTJmLCAwLjE3NTA1N2YsIDAuMTgyNTEzZiwgMC4xOTAyMTNmLCAwLjE5ODE1M2YsIDAuMjA2MzI4ZiwgMC4yMTQ3MzFmLCAwLjIyMzM1N2YsCisgICAwLjIzMjIwMGYsIDAuMjQxMjU0ZiwgMC4yNTA1MTNmLCAwLjI1OTk3MGYsIDAuMjY5NjE5ZiwgMC4yNzk0NTNmLCAwLjI4OTQ2NmYsIDAuMjk5NjUxZiwKKyAgIDAuMzEwMDAwZiwgMC4zMjA1MDdmLCAwLjMzMTE2NGYsIDAuMzQxOTY1ZiwgMC4zNTI5MDFmLCAwLjM2Mzk2NmYsIDAuMzc1MTUxZiwgMC4zODY0NDlmLAorICAgMC4zOTc4NTJmLCAwLjQwOTM1M2YsIDAuNDIwOTQzZiwgMC40MzI2MTVmLCAwLjQ0NDM2MWYsIDAuNDU2MTcyZiwgMC40NjgwNDBmLCAwLjQ3OTk1OGYsCisgICAwLjQ5MTkxN2YsIDAuNTAzOTA5ZiwgMC41MTU5MjVmLCAwLjUyNzk1OWYsIDAuNTQwMDAwZiwgMC41NTIwNDFmLCAwLjU2NDA3NWYsIDAuNTc2MDkxZiwKKyAgIDAuNTg4MDgzZiwgMC42MDAwNDJmLCAwLjYxMTk2MGYsIDAuNjIzODI4ZiwgMC42MzU2MzlmLCAwLjY0NzM4NWYsIDAuNjU5MDU3ZiwgMC42NzA2NDdmLAorICAgMC42ODIxNDhmLCAwLjY5MzU1MWYsIDAuNzA0ODQ5ZiwgMC43MTYwMzRmLCAwLjcyNzA5OWYsIDAuNzM4MDM1ZiwgMC43NDg4MzZmLCAwLjc1OTQ5M2YsCisgICAwLjc3MDAwMGYsIDAuNzgwMzQ5ZiwgMC43OTA1MzRmLCAwLjgwMDU0N2YsIDAuODEwMzgxZiwgMC44MjAwMzBmLCAwLjgyOTQ4N2YsIDAuODM4NzQ2ZiwKKyAgIDAuODQ3ODAwZiwgMC44NTY2NDNmLCAwLjg2NTI2OWYsIDAuODczNjcyZiwgMC44ODE4NDdmLCAwLjg4OTc4N2YsIDAuODk3NDg3ZiwgMC45MDQ5NDNmLAorICAgMC45MTIxNDhmLCAwLjkxOTA5OGYsIDAuOTI1Nzg4ZiwgMC45MzIyMTRmLCAwLjkzODM3MmYsIDAuOTQ0MjU2ZiwgMC45NDk4NjNmLCAwLjk1NTE4OWYsCisgICAwLjk2MDIzMWYsIDAuOTY0OTg1ZiwgMC45Njk0NDdmLCAwLjk3MzYxNWYsIDAuOTc3NDg2ZiwgMC45ODEwNTdmLCAwLjk4NDMyNmYsIDAuOTg3MjkwZiwKKyAgIDAuOTg5OTQ4ZiwgMC45OTIyOTdmLCAwLjk5NDMzN2YsIDAuOTk2MDY1ZiwgMC45OTc0ODBmLCAwLjk5ODU4MmYsIDAuOTk5MzcwZiwgMC45OTk4NDJmLAorICAgMS4wMDAwMDBmLCAxLjAwMDAwMGYsIDEuMDAwMDAwZiwgMS4wMDAwMDBmLCAxLjAwMDAwMGYsIDEuMDAwMDAwZiwgMS4wMDAwMDBmLCAxLjAwMDAwMGYsCisgICAxLjAwMDAwMGYsIDEuMDAwMDAwZiwgMS4wMDAwMDBmLCAxLjAwMDAwMGYsIDEuMDAwMDAwZiwgMS4wMDAwMDBmLCAxLjAwMDAwMGYsIDEuMDAwMDAwZiwKKyAgIDEuMDAwMDAwZiwgMS4wMDAwMDBmLCAxLjAwMDAwMGYsIDEuMDAwMDAwZiwgMS4wMDAwMDBmLCAxLjAwMDAwMGYsIDEuMDAwMDAwZiwgMS4wMDAwMDBmLAorICAgMS4wMDAwMDBmLCAxLjAwMDAwMGYsIDEuMDAwMDAwZiwgMS4wMDAwMDBmLCAxLjAwMDAwMGYsIDEuMDAwMDAwZiwgMS4wMDAwMDBmLCAxLjAwMDAwMGYsCisgICAxLjAwMDAwMGYsIDEuMDAwMDAwZiwgMS4wMDAwMDBmLCAxLjAwMDAwMGYsIDEuMDAwMDAwZiwgMS4wMDAwMDBmLCAxLjAwMDAwMGYsIDEuMDAwMDAwZiwKKyAgIDEuMDAwMDAwZiwgMS4wMDAwMDBmLCAxLjAwMDAwMGYsIDEuMDAwMDAwZiwgMS4wMDAwMDBmLCAxLjAwMDAwMGYsIDEuMDAwMDAwZiwgMS4wMDAwMDBmLAorICAgMS4wMDAwMDBmLCAxLjAwMDAwMGYsIDEuMDAwMDAwZiwgMC45OTg2NDBmLCAwLjk5NDU2NmYsIDAuOTg3Nzg3ZiwgMC45NzgzMjRmLCAwLjk2NjIwM2YsCisgICAwLjk1MTQ1OGYsIDAuOTM0MTMxZiwgMC45MTQyNzBmLCAwLjg5MTkzMWYsIDAuODY3MTc5ZiwgMC44NDAwODRmLCAwLjgxMDcyM2YsIDAuNzc5MTgyZiwKKyAgIDAuNzQ1NTUxZiwgMC43MDk5MzBmLCAwLjY3MjQyNGYsIDAuNjMzMTQ4ZiwgMC41OTIyMjNmLCAwLjU0OTc4MWYsIDAuNTA1OTY0ZiwgMC40NjA5MzJmLAorICAgMC40MTQ4NjNmLCAwLjM2Nzk2OGYsIDAuMzIwNTExZiwgMC4yNzI4NThmLCAwLjIyNTU2OWYsIDAuMTc5NjU1ZiwgMC4xMzcyNTRmLCAwLjEwMzUyNGYKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L21hY29zeC9FbmdsaXNoLmxwcm9qL0luZm9QbGlzdC5zdHJpbmdzIGIvM3JkcGFydHkvc3BlZXgvbWFjb3N4L0VuZ2xpc2gubHByb2ovSW5mb1BsaXN0LnN0cmluZ3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2NTEzZAotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L21hY29zeC9FbmdsaXNoLmxwcm9qL0luZm9QbGlzdC5zdHJpbmdzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L21hY29zeC9JbmZvLnBsaXN0IGIvM3JkcGFydHkvc3BlZXgvbWFjb3N4L0luZm8ucGxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQxYzQ3YwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L21hY29zeC9JbmZvLnBsaXN0CkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZSBDb21wdXRlci8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KKzxwbGlzdCB2ZXJzaW9uPSIxLjAiPgorPGRpY3Q+CisJPGtleT5DRkJ1bmRsZURldmVsb3BtZW50UmVnaW9uPC9rZXk+CisJPHN0cmluZz5FbmdsaXNoPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZUV4ZWN1dGFibGU8L2tleT4KKwk8c3RyaW5nPlNwZWV4PC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZUdldEluZm9TdHJpbmc8L2tleT4KKwk8c3RyaW5nPlNwZWV4IGZyYW1ld29yayAxLjEuMTJzdm4sIENvcHlyaWdodCDCqSAyMDAyLTIwMDYgWGlwaC5PcmcgRm91bmRhdGlvbjwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVJY29uRmlsZTwva2V5PgorCTxzdHJpbmc+PC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZUlkZW50aWZpZXI8L2tleT4KKwk8c3RyaW5nPm9yZy54aXBoLnNwZWV4PC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZUluZm9EaWN0aW9uYXJ5VmVyc2lvbjwva2V5PgorCTxzdHJpbmc+Ni4wPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVBhY2thZ2VUeXBlPC9rZXk+CisJPHN0cmluZz5GTVdLPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZzwva2V5PgorCTxzdHJpbmc+MS4xLjEyc3ZuPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVNpZ25hdHVyZTwva2V5PgorCTxzdHJpbmc+Pz8/Pzwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVWZXJzaW9uPC9rZXk+CisJPHN0cmluZz4xLjEuMTJkMTwvc3RyaW5nPgorCTxrZXk+TlNIdW1hblJlYWRhYmxlQ29weXJpZ2h0PC9rZXk+CisJPHN0cmluZz5TcGVleCBmcmFtZXdvcmsgMS4xLjEyc3ZuLCBDb3B5cmlnaHQgwqkgMjAwMi0yMDA2IFhpcGguT3JnIEZvdW5kYXRpb248L3N0cmluZz4KKwk8a2V5PkNTUmVzb3VyY2VzRmlsZU1hcHBlZDwva2V5PgorCTx0cnVlLz4KKzwvZGljdD4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9tYWNvc3gvU3BlZXgueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiLzNyZHBhcnR5L3NwZWV4L21hY29zeC9TcGVleC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMTExYTYKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9tYWNvc3gvU3BlZXgueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMCwwICsxLDc1MyBAQAorLy8gISQqVVRGOCokIQoreworCWFyY2hpdmVWZXJzaW9uID0gMTsKKwljbGFzc2VzID0geworCX07CisJb2JqZWN0VmVyc2lvbiA9IDQyOworCW9iamVjdHMgPSB7CisKKy8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisJCTczODE0QUZGMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9lY2hvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEFGMzA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfZWNoby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJNzM4MTRCMDAwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X2hlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRBRjQwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X2hlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJNzM4MTRCMDEwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X2ppdHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRBRjUwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X2ppdHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJNzM4MTRCMDIwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X3ByZXByb2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QUY2MDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9wcmVwcm9jZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQk3MzgxNEIwMzA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfc3RlcmVvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEFGNzA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfc3RlcmVvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQk3MzgxNEIwNDA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfdHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QUY4MDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF90eXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJNzM4MTRCMDYwOTA3RkJBQjAwQzQ3OEZDIC8qIHNwZWV4X2NhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRBRjEwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X2NhbGxiYWNrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJNzM4MTRCMDcwOTA3RkJBRDAwQzQ3OEZDIC8qIHNwZWV4X2JpdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QUYwMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9iaXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQk3MzgxNEIwODA5MDdGQkFFMDBDNDc4RkMgLyogc3BlZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QUVGMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJNzM4MTRCNUEwOTA3RkM5OTAwQzQ3OEZDIC8qIGJpdHMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjBEMDkwN0ZDOTkwMEM0NzhGQyAvKiBiaXRzLmMgKi87IH07CisJCTczODE0QjVFMDkwN0ZDOTkwMEM0NzhGQyAvKiBjYl9zZWFyY2guYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjExMDkwN0ZDOTkwMEM0NzhGQyAvKiBjYl9zZWFyY2guYyAqLzsgfTsKKwkJNzM4MTRCNjAwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y181XzY0X3RhYmxlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIxMzA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzVfNjRfdGFibGUuYyAqLzsgfTsKKwkJNzM4MTRCNjEwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y181XzI1Nl90YWJsZS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMTQwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y181XzI1Nl90YWJsZS5jICovOyB9OworCQk3MzgxNEI2MjA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzhfMTI4X3RhYmxlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIxNTA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzhfMTI4X3RhYmxlLmMgKi87IH07CisJCTczODE0QjYzMDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfMTBfMTZfdGFibGUuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjE2MDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfMTBfMTZfdGFibGUuYyAqLzsgfTsKKwkJNzM4MTRCNjQwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y18xMF8zMl90YWJsZS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMTcwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y18xMF8zMl90YWJsZS5jICovOyB9OworCQk3MzgxNEI2NTA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzIwXzMyX3RhYmxlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIxODA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzIwXzMyX3RhYmxlLmMgKi87IH07CisJCTczODE0QjY5MDkwN0ZDOTkwMEM0NzhGQyAvKiBmaWx0ZXJzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIxQzA5MDdGQzk5MDBDNDc4RkMgLyogZmlsdGVycy5jICovOyB9OworCQk3MzgxNEI3MDA5MDdGQzk5MDBDNDc4RkMgLyogZ2Fpbl90YWJsZV9sYnIuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjIzMDkwN0ZDOTkwMEM0NzhGQyAvKiBnYWluX3RhYmxlX2xici5jICovOyB9OworCQk3MzgxNEI3MTA5MDdGQzk5MDBDNDc4RkMgLyogZ2Fpbl90YWJsZS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMjQwOTA3RkM5OTAwQzQ3OEZDIC8qIGdhaW5fdGFibGUuYyAqLzsgfTsKKwkJNzM4MTRCNzIwOTA3RkM5OTAwQzQ3OEZDIC8qIGhleGNfMTBfMzJfdGFibGUuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjI1MDkwN0ZDOTkwMEM0NzhGQyAvKiBoZXhjXzEwXzMyX3RhYmxlLmMgKi87IH07CisJCTczODE0QjczMDkwN0ZDOTkwMEM0NzhGQyAvKiBoZXhjX3RhYmxlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIyNjA5MDdGQzk5MDBDNDc4RkMgLyogaGV4Y190YWJsZS5jICovOyB9OworCQk3MzgxNEI3NDA5MDdGQzk5MDBDNDc4RkMgLyogaGlnaF9sc3BfdGFibGVzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIyNzA5MDdGQzk5MDBDNDc4RkMgLyogaGlnaF9sc3BfdGFibGVzLmMgKi87IH07CisJCTczODE0Qjc1MDkwN0ZDOTkwMEM0NzhGQyAvKiBqaXR0ZXIuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjI4MDkwN0ZDOTkwMEM0NzhGQyAvKiBqaXR0ZXIuYyAqLzsgfTsKKwkJNzM4MTRCNzYwOTA3RkM5OTAwQzQ3OEZDIC8qIGxicl80OGtfdGFibGVzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIyOTA5MDdGQzk5MDBDNDc4RkMgLyogbGJyXzQ4a190YWJsZXMuYyAqLzsgfTsKKwkJNzM4MTRCNzgwOTA3RkM5OTAwQzQ3OEZDIC8qIGxwYy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMkIwOTA3RkM5OTAwQzQ3OEZDIC8qIGxwYy5jICovOyB9OworCQk3MzgxNEI3QTA5MDdGQzk5MDBDNDc4RkMgLyogbHNwX3RhYmxlc19uYi5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMkQwOTA3RkM5OTAwQzQ3OEZDIC8qIGxzcF90YWJsZXNfbmIuYyAqLzsgfTsKKwkJNzM4MTRCN0IwOTA3RkM5OTAwQzQ3OEZDIC8qIGxzcC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMkUwOTA3RkM5OTAwQzQ3OEZDIC8qIGxzcC5jICovOyB9OworCQk3MzgxNEI4MDA5MDdGQzk5MDBDNDc4RkMgLyogbHRwLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIzMzA5MDdGQzk5MDBDNDc4RkMgLyogbHRwLmMgKi87IH07CisJCTczODE0Qjg0MDkwN0ZDOTkwMEM0NzhGQyAvKiBtYXRoX2FwcHJveC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMzcwOTA3RkM5OTAwQzQ3OEZDIC8qIG1hdGhfYXBwcm94LmMgKi87IH07CisJCTczODE0Qjg4MDkwN0ZDOTkwMEM0NzhGQyAvKiBtaXNjLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIzQjA5MDdGQzk5MDBDNDc4RkMgLyogbWlzYy5jICovOyB9OworCQk3MzgxNEI4QTA5MDdGQzk5MDBDNDc4RkMgLyogbW9kZXMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjNEMDkwN0ZDOTkwMEM0NzhGQyAvKiBtb2Rlcy5jICovOyB9OworCQk3MzgxNEI4QzA5MDdGQzk5MDBDNDc4RkMgLyogbmJfY2VscC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCM0YwOTA3RkM5OTAwQzQ3OEZDIC8qIG5iX2NlbHAuYyAqLzsgfTsKKwkJNzM4MTRCOEUwOTA3RkM5OTAwQzQ3OEZDIC8qIHByZXByb2Nlc3MuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjQxMDkwN0ZDOTkwMEM0NzhGQyAvKiBwcmVwcm9jZXNzLmMgKi87IH07CisJCTczODE0QjhGMDkwN0ZDOTkwMEM0NzhGQyAvKiBxdWFudF9sc3AuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjQyMDkwN0ZDOTkwMEM0NzhGQyAvKiBxdWFudF9sc3AuYyAqLzsgfTsKKwkJNzM4MTRCOTEwOTA3RkM5OTAwQzQ3OEZDIC8qIHNiX2NlbHAuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjQ0MDkwN0ZDOTkwMEM0NzhGQyAvKiBzYl9jZWxwLmMgKi87IH07CisJCTczODE0QjkzMDkwN0ZDOTkwMEM0NzhGQyAvKiBzbWFsbGZ0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEI0NjA5MDdGQzk5MDBDNDc4RkMgLyogc21hbGxmdC5jICovOyB9OworCQk3MzgxNEI5NTA5MDdGQzk5MDBDNDc4RkMgLyogc3BlZXhfY2FsbGJhY2tzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEI0ODA5MDdGQzk5MDBDNDc4RkMgLyogc3BlZXhfY2FsbGJhY2tzLmMgKi87IH07CisJCTczODE0Qjk2MDkwN0ZDOTkwMEM0NzhGQyAvKiBzcGVleF9oZWFkZXIuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjQ5MDkwN0ZDOTkwMEM0NzhGQyAvKiBzcGVleF9oZWFkZXIuYyAqLzsgfTsKKwkJNzM4MTRCOTcwOTA3RkM5OTAwQzQ3OEZDIC8qIHNwZWV4LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEI0QTA5MDdGQzk5MDBDNDc4RkMgLyogc3BlZXguYyAqLzsgfTsKKwkJNzM4MTRCOTkwOTA3RkM5OTAwQzQ3OEZDIC8qIHN0ZXJlby5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCNEMwOTA3RkM5OTAwQzQ3OEZDIC8qIHN0ZXJlby5jICovOyB9OworCQk3MzgxNEI5RjA5MDdGQzk5MDBDNDc4RkMgLyogdmJyLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEI1MjA5MDdGQzk5MDBDNDc4RkMgLyogdmJyLmMgKi87IH07CisJCTczODE0QkE0MDkwN0ZDOTkwMEM0NzhGQyAvKiB2cS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCNTcwOTA3RkM5OTAwQzQ3OEZDIC8qIHZxLmMgKi87IH07CisJCTczODgzNzQ0MEIxOTM0RDAwMDVDN0E2OSAvKiBtZGYuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjM5MDkwN0ZDOTkwMEM0NzhGQyAvKiBtZGYuYyAqLzsgfTsKKwkJNzM4ODM3NTQwQjE5MzU4MTAwNUM3QTY5IC8qIF9raXNzX2ZmdF9ndXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mzg4Mzc0NjBCMTkzNTgxMDA1QzdBNjkgLyogX2tpc3NfZmZ0X2d1dHMuaCAqLzsgfTsKKwkJNzM4ODM3NTUwQjE5MzU4MTAwNUM3QTY5IC8qIGZmdHdyYXAuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODgzNzQ3MEIxOTM1ODEwMDVDN0E2OSAvKiBmZnR3cmFwLmMgKi87IH07CisJCTczODgzNzU2MEIxOTM1ODEwMDVDN0E2OSAvKiBmZnR3cmFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mzg4Mzc0ODBCMTkzNTgxMDA1QzdBNjkgLyogZmZ0d3JhcC5oICovOyB9OworCQk3Mzg4Mzc1NzBCMTkzNTgxMDA1QzdBNjkgLyogZmlsdGVyYmFuay5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4ODM3NDkwQjE5MzU4MTAwNUM3QTY5IC8qIGZpbHRlcmJhbmsuYyAqLzsgfTsKKwkJNzM4ODM3NTgwQjE5MzU4MTAwNUM3QTY5IC8qIGZpbHRlcmJhbmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODgzNzRBMEIxOTM1ODEwMDVDN0E2OSAvKiBmaWx0ZXJiYW5rLmggKi87IH07CisJCTczODgzNzU5MEIxOTM1ODEwMDVDN0E2OSAvKiBraXNzX2ZmdC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4ODM3NEIwQjE5MzU4MTAwNUM3QTY5IC8qIGtpc3NfZmZ0LmMgKi87IH07CisJCTczODgzNzVBMEIxOTM1ODEwMDVDN0E2OSAvKiBraXNzX2ZmdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4ODM3NEMwQjE5MzU4MTAwNUM3QTY5IC8qIGtpc3NfZmZ0LmggKi87IH07CisJCTczODgzNzVCMEIxOTM1ODEwMDVDN0E2OSAvKiBraXNzX2ZmdHIuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODgzNzREMEIxOTM1ODEwMDVDN0E2OSAvKiBraXNzX2ZmdHIuYyAqLzsgfTsKKwkJNzM4ODM3NUMwQjE5MzU4MTAwNUM3QTY5IC8qIGtpc3NfZmZ0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4ODM3NEUwQjE5MzU4MTAwNUM3QTY5IC8qIGtpc3NfZmZ0ci5oICovOyB9OworCQk3Mzg4Mzc1RDBCMTkzNTgxMDA1QzdBNjkgLyogbHNwX2JmaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODgzNzRGMEIxOTM1ODEwMDVDN0E2OSAvKiBsc3BfYmZpbi5oICovOyB9OworCQk3Mzg4Mzc1RTBCMTkzNTgxMDA1QzdBNjkgLyogcHNldWRvZmxvYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODgzNzUwMEIxOTM1ODEwMDVDN0E2OSAvKiBwc2V1ZG9mbG9hdC5oICovOyB9OworCQk3Mzg4Mzc1RjBCMTkzNTgxMDA1QzdBNjkgLyogcXVhbnRfbHNwX2JmaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODgzNzUxMEIxOTM1ODEwMDVDN0E2OSAvKiBxdWFudF9sc3BfYmZpbi5oICovOyB9OworCQk3Mzg4Mzc2MDBCMTkzNTgxMDA1QzdBNjkgLyogdm9yYmlzX3BzeS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4ODM3NTIwQjE5MzU4MTAwNUM3QTY5IC8qIHZvcmJpc19wc3kuYyAqLzsgfTsKKwkJNzM4ODM3NjEwQjE5MzU4MTAwNUM3QTY5IC8qIHZvcmJpc19wc3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODgzNzUzMEIxOTM1ODEwMDVDN0E2OSAvKiB2b3JiaXNfcHN5LmggKi87IH07CisJCTczODgzNzdCMEIxOTM3ODQwMDVDN0E2OSAvKiBiaXRzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIwRDA5MDdGQzk5MDBDNDc4RkMgLyogYml0cy5jICovOyB9OworCQk3Mzg4Mzc3QzBCMTkzNzg1MDA1QzdBNjkgLyogY2Jfc2VhcmNoLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIxMTA5MDdGQzk5MDBDNDc4RkMgLyogY2Jfc2VhcmNoLmMgKi87IH07CisJCTczODgzNzdEMEIxOTM3ODgwMDVDN0E2OSAvKiBleGNfMTBfMTZfdGFibGUuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjE2MDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfMTBfMTZfdGFibGUuYyAqLzsgfTsKKwkJNzM4ODM3N0UwQjE5Mzc4OTAwNUM3QTY5IC8qIGV4Y18xMF8zMl90YWJsZS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMTcwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y18xMF8zMl90YWJsZS5jICovOyB9OworCQk3Mzg4Mzc3RjBCMTkzNzhBMDA1QzdBNjkgLyogZXhjXzIwXzMyX3RhYmxlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIxODA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzIwXzMyX3RhYmxlLmMgKi87IH07CisJCTczODgzNzgwMEIxOTM3OEEwMDVDN0E2OSAvKiBleGNfNV8yNTZfdGFibGUuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjE0MDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfNV8yNTZfdGFibGUuYyAqLzsgfTsKKwkJNzM4ODM3ODEwQjE5Mzc4QzAwNUM3QTY5IC8qIGV4Y181XzY0X3RhYmxlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIxMzA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzVfNjRfdGFibGUuYyAqLzsgfTsKKwkJNzM4ODM3ODIwQjE5Mzc4RTAwNUM3QTY5IC8qIGV4Y184XzEyOF90YWJsZS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMTUwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y184XzEyOF90YWJsZS5jICovOyB9OworCQk3Mzg4Mzc4MzBCMTkzNzkxMDA1QzdBNjkgLyogZmZ0d3JhcC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4ODM3NDcwQjE5MzU4MTAwNUM3QTY5IC8qIGZmdHdyYXAuYyAqLzsgfTsKKwkJNzM4ODM3ODQwQjE5Mzc5MjAwNUM3QTY5IC8qIGZpbHRlcmJhbmsuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODgzNzQ5MEIxOTM1ODEwMDVDN0E2OSAvKiBmaWx0ZXJiYW5rLmMgKi87IH07CisJCTczODgzNzg1MEIxOTM3OTMwMDVDN0E2OSAvKiBmaWx0ZXJzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIxQzA5MDdGQzk5MDBDNDc4RkMgLyogZmlsdGVycy5jICovOyB9OworCQk3Mzg4Mzc4NjBCMTkzNzk1MDA1QzdBNjkgLyogZ2Fpbl90YWJsZS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMjQwOTA3RkM5OTAwQzQ3OEZDIC8qIGdhaW5fdGFibGUuYyAqLzsgfTsKKwkJNzM4ODM3ODcwQjE5Mzc5NjAwNUM3QTY5IC8qIGdhaW5fdGFibGVfbGJyLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIyMzA5MDdGQzk5MDBDNDc4RkMgLyogZ2Fpbl90YWJsZV9sYnIuYyAqLzsgfTsKKwkJNzM4ODM3ODgwQjE5Mzc5OTAwNUM3QTY5IC8qIGhleGNfMTBfMzJfdGFibGUuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjI1MDkwN0ZDOTkwMEM0NzhGQyAvKiBoZXhjXzEwXzMyX3RhYmxlLmMgKi87IH07CisJCTczODgzNzg5MEIxOTM3OUIwMDVDN0E2OSAvKiBoZXhjX3RhYmxlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIyNjA5MDdGQzk5MDBDNDc4RkMgLyogaGV4Y190YWJsZS5jICovOyB9OworCQk3Mzg4Mzc4QTBCMTkzNzlFMDA1QzdBNjkgLyogaGlnaF9sc3BfdGFibGVzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIyNzA5MDdGQzk5MDBDNDc4RkMgLyogaGlnaF9sc3BfdGFibGVzLmMgKi87IH07CisJCTczODgzNzhCMEIxOTM3QTAwMDVDN0E2OSAvKiBqaXR0ZXIuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjI4MDkwN0ZDOTkwMEM0NzhGQyAvKiBqaXR0ZXIuYyAqLzsgfTsKKwkJNzM4ODM3OEMwQjE5MzdBNDAwNUM3QTY5IC8qIGtpc3NfZmZ0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mzg4Mzc0QjBCMTkzNTgxMDA1QzdBNjkgLyoga2lzc19mZnQuYyAqLzsgfTsKKwkJNzM4ODM3OEQwQjE5MzdBOTAwNUM3QTY5IC8qIGtpc3NfZmZ0ci5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4ODM3NEQwQjE5MzU4MTAwNUM3QTY5IC8qIGtpc3NfZmZ0ci5jICovOyB9OworCQk3Mzg4Mzc4RTBCMTkzN0FFMDA1QzdBNjkgLyogbGJyXzQ4a190YWJsZXMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjI5MDkwN0ZDOTkwMEM0NzhGQyAvKiBsYnJfNDhrX3RhYmxlcy5jICovOyB9OworCQk3Mzg4Mzc4RjBCMTkzN0IwMDA1QzdBNjkgLyogbHBjLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIyQjA5MDdGQzk5MDBDNDc4RkMgLyogbHBjLmMgKi87IH07CisJCTczODgzNzkwMEIxOTM3QjAwMDVDN0E2OSAvKiBsc3AuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjJFMDkwN0ZDOTkwMEM0NzhGQyAvKiBsc3AuYyAqLzsgfTsKKwkJNzM4ODM3OTEwQjE5MzdCNTAwNUM3QTY5IC8qIGxzcF90YWJsZXNfbmIuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjJEMDkwN0ZDOTkwMEM0NzhGQyAvKiBsc3BfdGFibGVzX25iLmMgKi87IH07CisJCTczODgzNzkyMEIxOTM3QjcwMDVDN0E2OSAvKiBsdHAuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjMzMDkwN0ZDOTkwMEM0NzhGQyAvKiBsdHAuYyAqLzsgfTsKKwkJNzM4ODM3OTMwQjE5MzdCOTAwNUM3QTY5IC8qIG1hdGhfYXBwcm94LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIzNzA5MDdGQzk5MDBDNDc4RkMgLyogbWF0aF9hcHByb3guYyAqLzsgfTsKKwkJNzM4ODM3OTQwQjE5MzdCQjAwNUM3QTY5IC8qIG1kZi5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMzkwOTA3RkM5OTAwQzQ3OEZDIC8qIG1kZi5jICovOyB9OworCQk3Mzg4Mzc5NTBCMTkzN0JEMDA1QzdBNjkgLyogbWlzYy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCM0IwOTA3RkM5OTAwQzQ3OEZDIC8qIG1pc2MuYyAqLzsgfTsKKwkJNzM4ODM3OTYwQjE5MzdCRTAwNUM3QTY5IC8qIG1vZGVzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIzRDA5MDdGQzk5MDBDNDc4RkMgLyogbW9kZXMuYyAqLzsgfTsKKwkJNzM4ODM3OTcwQjE5MzdDMDAwNUM3QTY5IC8qIG5iX2NlbHAuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjNGMDkwN0ZDOTkwMEM0NzhGQyAvKiBuYl9jZWxwLmMgKi87IH07CisJCTczODgzNzk4MEIxOTM3QzIwMDVDN0E2OSAvKiBwcmVwcm9jZXNzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEI0MTA5MDdGQzk5MDBDNDc4RkMgLyogcHJlcHJvY2Vzcy5jICovOyB9OworCQk3Mzg4Mzc5OTBCMTkzN0M0MDA1QzdBNjkgLyogcXVhbnRfbHNwLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEI0MjA5MDdGQzk5MDBDNDc4RkMgLyogcXVhbnRfbHNwLmMgKi87IH07CisJCTczODgzNzlBMEIxOTM3QzYwMDVDN0E2OSAvKiBzYl9jZWxwLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEI0NDA5MDdGQzk5MDBDNDc4RkMgLyogc2JfY2VscC5jICovOyB9OworCQk3Mzg4Mzc5QjBCMTkzN0M5MDA1QzdBNjkgLyogc21hbGxmdC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCNDYwOTA3RkM5OTAwQzQ3OEZDIC8qIHNtYWxsZnQuYyAqLzsgfTsKKwkJNzM4ODM3OUMwQjE5MzdDQjAwNUM3QTY5IC8qIHNwZWV4LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEI0QTA5MDdGQzk5MDBDNDc4RkMgLyogc3BlZXguYyAqLzsgfTsKKwkJNzM4ODM3OUQwQjE5MzdDRTAwNUM3QTY5IC8qIHNwZWV4X2NhbGxiYWNrcy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCNDgwOTA3RkM5OTAwQzQ3OEZDIC8qIHNwZWV4X2NhbGxiYWNrcy5jICovOyB9OworCQk3Mzg4Mzc5RTBCMTkzN0QwMDA1QzdBNjkgLyogc3BlZXhfaGVhZGVyLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEI0OTA5MDdGQzk5MDBDNDc4RkMgLyogc3BlZXhfaGVhZGVyLmMgKi87IH07CisJCTczODgzNzlGMEIxOTM3RDEwMDVDN0E2OSAvKiBzdGVyZW8uYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjRDMDkwN0ZDOTkwMEM0NzhGQyAvKiBzdGVyZW8uYyAqLzsgfTsKKwkJNzM4ODM3QTAwQjE5MzdEQTAwNUM3QTY5IC8qIHZici5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCNTIwOTA3RkM5OTAwQzQ3OEZDIC8qIHZici5jICovOyB9OworCQk3Mzg4MzdBMTBCMTkzN0REMDA1QzdBNjkgLyogdm9yYmlzX3BzeS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4ODM3NTIwQjE5MzU4MTAwNUM3QTY5IC8qIHZvcmJpc19wc3kuYyAqLzsgfTsKKwkJNzM4ODM3QTIwQjE5MzdERjAwNUM3QTY5IC8qIHZxLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEI1NzA5MDdGQzk5MDBDNDc4RkMgLyogdnEuYyAqLzsgfTsKKwkJNzM4ODM3QTMwQjE5MzdFMTAwNUM3QTY5IC8qIHdpbmRvdy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkZGNzNEQ0YwQTc4QUExNzAwNzhBNEE4IC8qIHdpbmRvdy5jICovOyB9OworCQk4RDA3RjJDMDA0ODZDQzdBMDA3Q0QxRDAgLyogSW5mb1BsaXN0LnN0cmluZ3MgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4OUMxNjY2RkU4NDExNThDMDJBQUMwNyAvKiBJbmZvUGxpc3Quc3RyaW5ncyAqLzsgfTsKKwkJQkZGNzNERDAwQTc4QUExNzAwNzhBNEE4IC8qIHdpbmRvdy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkZGNzNEQ0YwQTc4QUExNzAwNzhBNEE4IC8qIHdpbmRvdy5jICovOyB9OworLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQkwODlDMTY2N0ZFODQxMTU4QzAyQUFDMDcgLyogRW5nbGlzaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAxMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnN0cmluZ3M7IG5hbWUgPSBFbmdsaXNoOyBwYXRoID0gRW5nbGlzaC5scHJvai9JbmZvUGxpc3Quc3RyaW5nczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzJCQUUwQjcwMzcxQTc0QjAwQzkxNzgzIC8qIFNwZWV4X1ByZWZpeC5wY2ggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwZWV4X1ByZWZpeC5wY2g7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTczODE0QUVGMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc3BlZXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzM4MTRBRjAwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X2JpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNwZWV4X2JpdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzM4MTRBRjEwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X2NhbGxiYWNrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc3BlZXhfY2FsbGJhY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTczODE0QUYzMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9lY2hvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzcGVleF9lY2hvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTczODE0QUY0MDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9oZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNwZWV4X2hlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MzgxNEFGNTA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfaml0dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzcGVleF9qaXR0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzM4MTRBRjYwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X3ByZXByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNwZWV4X3ByZXByb2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzM4MTRBRjcwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X3N0ZXJlby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc3BlZXhfc3RlcmVvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTczODE0QUY4MDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF90eXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc3BlZXhfdHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzM4MTRCMEMwOTA3RkM5OTAwQzQ3OEZDIC8qIGFyY2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGFyY2guaDsgcGF0aCA9IC4uL2xpYnNwZWV4L2FyY2guaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIwRDA5MDdGQzk5MDBDNDc4RkMgLyogYml0cy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gYml0cy5jOyBwYXRoID0gLi4vbGlic3BlZXgvYml0cy5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjBFMDkwN0ZDOTkwMEM0NzhGQyAvKiBjYl9zZWFyY2hfYXJtNC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gY2Jfc2VhcmNoX2FybTQuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L2NiX3NlYXJjaF9hcm00Lmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMEYwOTA3RkM5OTAwQzQ3OEZDIC8qIGNiX3NlYXJjaF9iZmluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBjYl9zZWFyY2hfYmZpbi5oOyBwYXRoID0gLi4vbGlic3BlZXgvY2Jfc2VhcmNoX2JmaW4uaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIxMDA5MDdGQzk5MDBDNDc4RkMgLyogY2Jfc2VhcmNoX3NzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gY2Jfc2VhcmNoX3NzZS5oOyBwYXRoID0gLi4vbGlic3BlZXgvY2Jfc2VhcmNoX3NzZS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjExMDkwN0ZDOTkwMEM0NzhGQyAvKiBjYl9zZWFyY2guYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGNiX3NlYXJjaC5jOyBwYXRoID0gLi4vbGlic3BlZXgvY2Jfc2VhcmNoLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMTIwOTA3RkM5OTAwQzQ3OEZDIC8qIGNiX3NlYXJjaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gY2Jfc2VhcmNoLmg7IHBhdGggPSAuLi9saWJzcGVleC9jYl9zZWFyY2guaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIxMzA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzVfNjRfdGFibGUuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGV4Y181XzY0X3RhYmxlLmM7IHBhdGggPSAuLi9saWJzcGVleC9leGNfNV82NF90YWJsZS5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjE0MDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfNV8yNTZfdGFibGUuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGV4Y181XzI1Nl90YWJsZS5jOyBwYXRoID0gLi4vbGlic3BlZXgvZXhjXzVfMjU2X3RhYmxlLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMTUwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y184XzEyOF90YWJsZS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gZXhjXzhfMTI4X3RhYmxlLmM7IHBhdGggPSAuLi9saWJzcGVleC9leGNfOF8xMjhfdGFibGUuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIxNjA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzEwXzE2X3RhYmxlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBleGNfMTBfMTZfdGFibGUuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2V4Y18xMF8xNl90YWJsZS5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjE3MDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfMTBfMzJfdGFibGUuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGV4Y18xMF8zMl90YWJsZS5jOyBwYXRoID0gLi4vbGlic3BlZXgvZXhjXzEwXzMyX3RhYmxlLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMTgwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y18yMF8zMl90YWJsZS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gZXhjXzIwXzMyX3RhYmxlLmM7IHBhdGggPSAuLi9saWJzcGVleC9leGNfMjBfMzJfdGFibGUuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIxOTA5MDdGQzk5MDBDNDc4RkMgLyogZmlsdGVyc19hcm00LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBmaWx0ZXJzX2FybTQuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L2ZpbHRlcnNfYXJtNC5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjFBMDkwN0ZDOTkwMEM0NzhGQyAvKiBmaWx0ZXJzX2JmaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGZpbHRlcnNfYmZpbi5oOyBwYXRoID0gLi4vbGlic3BlZXgvZmlsdGVyc19iZmluLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMUIwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpbHRlcnNfc3NlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBmaWx0ZXJzX3NzZS5oOyBwYXRoID0gLi4vbGlic3BlZXgvZmlsdGVyc19zc2UuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIxQzA5MDdGQzk5MDBDNDc4RkMgLyogZmlsdGVycy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gZmlsdGVycy5jOyBwYXRoID0gLi4vbGlic3BlZXgvZmlsdGVycy5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjFEMDkwN0ZDOTkwMEM0NzhGQyAvKiBmaWx0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBmaWx0ZXJzLmg7IHBhdGggPSAuLi9saWJzcGVleC9maWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMUUwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpeGVkX2FybTQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGZpeGVkX2FybTQuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L2ZpeGVkX2FybTQuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIxRjA5MDdGQzk5MDBDNDc4RkMgLyogZml4ZWRfYXJtNWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGZpeGVkX2FybTVlLmg7IHBhdGggPSAuLi9saWJzcGVleC9maXhlZF9hcm01ZS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjIwMDkwN0ZDOTkwMEM0NzhGQyAvKiBmaXhlZF9iZmluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBmaXhlZF9iZmluLmg7IHBhdGggPSAuLi9saWJzcGVleC9maXhlZF9iZmluLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMjEwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpeGVkX2RlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBmaXhlZF9kZWJ1Zy5oOyBwYXRoID0gLi4vbGlic3BlZXgvZml4ZWRfZGVidWcuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIyMjA5MDdGQzk5MDBDNDc4RkMgLyogZml4ZWRfZ2VuZXJpYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZml4ZWRfZ2VuZXJpYy5oOyBwYXRoID0gLi4vbGlic3BlZXgvZml4ZWRfZ2VuZXJpYy5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjIzMDkwN0ZDOTkwMEM0NzhGQyAvKiBnYWluX3RhYmxlX2xici5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gZ2Fpbl90YWJsZV9sYnIuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2dhaW5fdGFibGVfbGJyLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMjQwOTA3RkM5OTAwQzQ3OEZDIC8qIGdhaW5fdGFibGUuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGdhaW5fdGFibGUuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2dhaW5fdGFibGUuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIyNTA5MDdGQzk5MDBDNDc4RkMgLyogaGV4Y18xMF8zMl90YWJsZS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gaGV4Y18xMF8zMl90YWJsZS5jOyBwYXRoID0gLi4vbGlic3BlZXgvaGV4Y18xMF8zMl90YWJsZS5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjI2MDkwN0ZDOTkwMEM0NzhGQyAvKiBoZXhjX3RhYmxlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBoZXhjX3RhYmxlLmM7IHBhdGggPSAuLi9saWJzcGVleC9oZXhjX3RhYmxlLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMjcwOTA3RkM5OTAwQzQ3OEZDIC8qIGhpZ2hfbHNwX3RhYmxlcy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gaGlnaF9sc3BfdGFibGVzLmM7IHBhdGggPSAuLi9saWJzcGVleC9oaWdoX2xzcF90YWJsZXMuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIyODA5MDdGQzk5MDBDNDc4RkMgLyogaml0dGVyLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBqaXR0ZXIuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2ppdHRlci5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjI5MDkwN0ZDOTkwMEM0NzhGQyAvKiBsYnJfNDhrX3RhYmxlcy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gbGJyXzQ4a190YWJsZXMuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2xicl80OGtfdGFibGVzLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMkEwOTA3RkM5OTAwQzQ3OEZDIC8qIGxwY19iZmluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBscGNfYmZpbi5oOyBwYXRoID0gLi4vbGlic3BlZXgvbHBjX2JmaW4uaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIyQjA5MDdGQzk5MDBDNDc4RkMgLyogbHBjLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBscGMuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2xwYy5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjJDMDkwN0ZDOTkwMEM0NzhGQyAvKiBscGMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGxwYy5oOyBwYXRoID0gLi4vbGlic3BlZXgvbHBjLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMkQwOTA3RkM5OTAwQzQ3OEZDIC8qIGxzcF90YWJsZXNfbmIuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGxzcF90YWJsZXNfbmIuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2xzcF90YWJsZXNfbmIuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIyRTA5MDdGQzk5MDBDNDc4RkMgLyogbHNwLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBsc3AuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2xzcC5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjJGMDkwN0ZDOTkwMEM0NzhGQyAvKiBsc3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGxzcC5oOyBwYXRoID0gLi4vbGlic3BlZXgvbHNwLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMzAwOTA3RkM5OTAwQzQ3OEZDIC8qIGx0cF9hcm00LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBsdHBfYXJtNC5oOyBwYXRoID0gLi4vbGlic3BlZXgvbHRwX2FybTQuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIzMTA5MDdGQzk5MDBDNDc4RkMgLyogbHRwX2JmaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGx0cF9iZmluLmg7IHBhdGggPSAuLi9saWJzcGVleC9sdHBfYmZpbi5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjMyMDkwN0ZDOTkwMEM0NzhGQyAvKiBsdHBfc3NlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBsdHBfc3NlLmg7IHBhdGggPSAuLi9saWJzcGVleC9sdHBfc3NlLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMzMwOTA3RkM5OTAwQzQ3OEZDIC8qIGx0cC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gbHRwLmM7IHBhdGggPSAuLi9saWJzcGVleC9sdHAuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIzNDA5MDdGQzk5MDBDNDc4RkMgLyogbHRwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBsdHAuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L2x0cC5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjM3MDkwN0ZDOTkwMEM0NzhGQyAvKiBtYXRoX2FwcHJveC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gbWF0aF9hcHByb3guYzsgcGF0aCA9IC4uL2xpYnNwZWV4L21hdGhfYXBwcm94LmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMzgwOTA3RkM5OTAwQzQ3OEZDIC8qIG1hdGhfYXBwcm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBtYXRoX2FwcHJveC5oOyBwYXRoID0gLi4vbGlic3BlZXgvbWF0aF9hcHByb3guaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIzOTA5MDdGQzk5MDBDNDc4RkMgLyogbWRmLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBtZGYuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L21kZi5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjNBMDkwN0ZDOTkwMEM0NzhGQyAvKiBtaXNjX2JmaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IG1pc2NfYmZpbi5oOyBwYXRoID0gLi4vbGlic3BlZXgvbWlzY19iZmluLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCM0IwOTA3RkM5OTAwQzQ3OEZDIC8qIG1pc2MuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IG1pc2MuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L21pc2MuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIzQzA5MDdGQzk5MDBDNDc4RkMgLyogbWlzYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gbWlzYy5oOyBwYXRoID0gLi4vbGlic3BlZXgvbWlzYy5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjNEMDkwN0ZDOTkwMEM0NzhGQyAvKiBtb2Rlcy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gbW9kZXMuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L21vZGVzLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCM0UwOTA3RkM5OTAwQzQ3OEZDIC8qIG1vZGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBtb2Rlcy5oOyBwYXRoID0gLi4vbGlic3BlZXgvbW9kZXMuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIzRjA5MDdGQzk5MDBDNDc4RkMgLyogbmJfY2VscC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gbmJfY2VscC5jOyBwYXRoID0gLi4vbGlic3BlZXgvbmJfY2VscC5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjQwMDkwN0ZDOTkwMEM0NzhGQyAvKiBuYl9jZWxwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBuYl9jZWxwLmg7IHBhdGggPSAuLi9saWJzcGVleC9uYl9jZWxwLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCNDEwOTA3RkM5OTAwQzQ3OEZDIC8qIHByZXByb2Nlc3MuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHByZXByb2Nlc3MuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L3ByZXByb2Nlc3MuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI0MjA5MDdGQzk5MDBDNDc4RkMgLyogcXVhbnRfbHNwLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBxdWFudF9sc3AuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L3F1YW50X2xzcC5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjQzMDkwN0ZDOTkwMEM0NzhGQyAvKiBxdWFudF9sc3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHF1YW50X2xzcC5oOyBwYXRoID0gLi4vbGlic3BlZXgvcXVhbnRfbHNwLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCNDQwOTA3RkM5OTAwQzQ3OEZDIC8qIHNiX2NlbHAuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHNiX2NlbHAuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L3NiX2NlbHAuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI0NTA5MDdGQzk5MDBDNDc4RkMgLyogc2JfY2VscC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gc2JfY2VscC5oOyBwYXRoID0gLi4vbGlic3BlZXgvc2JfY2VscC5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjQ2MDkwN0ZDOTkwMEM0NzhGQyAvKiBzbWFsbGZ0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBzbWFsbGZ0LmM7IHBhdGggPSAuLi9saWJzcGVleC9zbWFsbGZ0LmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCNDcwOTA3RkM5OTAwQzQ3OEZDIC8qIHNtYWxsZnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHNtYWxsZnQuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L3NtYWxsZnQuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI0ODA5MDdGQzk5MDBDNDc4RkMgLyogc3BlZXhfY2FsbGJhY2tzLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBzcGVleF9jYWxsYmFja3MuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L3NwZWV4X2NhbGxiYWNrcy5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjQ5MDkwN0ZDOTkwMEM0NzhGQyAvKiBzcGVleF9oZWFkZXIuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHNwZWV4X2hlYWRlci5jOyBwYXRoID0gLi4vbGlic3BlZXgvc3BlZXhfaGVhZGVyLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCNEEwOTA3RkM5OTAwQzQ3OEZDIC8qIHNwZWV4LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBzcGVleC5jOyBwYXRoID0gLi4vbGlic3BlZXgvc3BlZXguYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI0QjA5MDdGQzk5MDBDNDc4RkMgLyogc3RhY2tfYWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHN0YWNrX2FsbG9jLmg7IHBhdGggPSAuLi9saWJzcGVleC9zdGFja19hbGxvYy5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjRDMDkwN0ZDOTkwMEM0NzhGQyAvKiBzdGVyZW8uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHN0ZXJlby5jOyBwYXRoID0gLi4vbGlic3BlZXgvc3RlcmVvLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCNEQwOTA3RkM5OTAwQzQ3OEZDIC8qIHRlc3RkZW5vaXNlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB0ZXN0ZGVub2lzZS5jOyBwYXRoID0gLi4vbGlic3BlZXgvdGVzdGRlbm9pc2UuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI0RTA5MDdGQzk5MDBDNDc4RkMgLyogdGVzdGVjaG8uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHRlc3RlY2hvLmM7IHBhdGggPSAuLi9saWJzcGVleC90ZXN0ZWNoby5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjRGMDkwN0ZDOTkwMEM0NzhGQyAvKiB0ZXN0ZW5jX3V3Yi5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gdGVzdGVuY191d2IuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L3Rlc3RlbmNfdXdiLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCNTAwOTA3RkM5OTAwQzQ3OEZDIC8qIHRlc3RlbmNfd2IuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHRlc3RlbmNfd2IuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L3Rlc3RlbmNfd2IuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI1MTA5MDdGQzk5MDBDNDc4RkMgLyogdGVzdGVuYy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gdGVzdGVuYy5jOyBwYXRoID0gLi4vbGlic3BlZXgvdGVzdGVuYy5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjUyMDkwN0ZDOTkwMEM0NzhGQyAvKiB2YnIuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHZici5jOyBwYXRoID0gLi4vbGlic3BlZXgvdmJyLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCNTMwOTA3RkM5OTAwQzQ3OEZDIC8qIHZici5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gdmJyLmg7IHBhdGggPSAuLi9saWJzcGVleC92YnIuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI1NDA5MDdGQzk5MDBDNDc4RkMgLyogdnFfYXJtNC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gdnFfYXJtNC5oOyBwYXRoID0gLi4vbGlic3BlZXgvdnFfYXJtNC5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjU1MDkwN0ZDOTkwMEM0NzhGQyAvKiB2cV9iZmluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB2cV9iZmluLmg7IHBhdGggPSAuLi9saWJzcGVleC92cV9iZmluLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCNTYwOTA3RkM5OTAwQzQ3OEZDIC8qIHZxX3NzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gdnFfc3NlLmg7IHBhdGggPSAuLi9saWJzcGVleC92cV9zc2UuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI1NzA5MDdGQzk5MDBDNDc4RkMgLyogdnEuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHZxLmM7IHBhdGggPSAuLi9saWJzcGVleC92cS5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjU4MDkwN0ZDOTkwMEM0NzhGQyAvKiB2cS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gdnEuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L3ZxLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4ODM3NDYwQjE5MzU4MTAwNUM3QTY5IC8qIF9raXNzX2ZmdF9ndXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBfa2lzc19mZnRfZ3V0cy5oOyBwYXRoID0gLi4vbGlic3BlZXgvX2tpc3NfZmZ0X2d1dHMuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3Mzg4Mzc0NzBCMTkzNTgxMDA1QzdBNjkgLyogZmZ0d3JhcC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gZmZ0d3JhcC5jOyBwYXRoID0gLi4vbGlic3BlZXgvZmZ0d3JhcC5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODgzNzQ4MEIxOTM1ODEwMDVDN0E2OSAvKiBmZnR3cmFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBmZnR3cmFwLmg7IHBhdGggPSAuLi9saWJzcGVleC9mZnR3cmFwLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4ODM3NDkwQjE5MzU4MTAwNUM3QTY5IC8qIGZpbHRlcmJhbmsuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGZpbHRlcmJhbmsuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2ZpbHRlcmJhbmsuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3Mzg4Mzc0QTBCMTkzNTgxMDA1QzdBNjkgLyogZmlsdGVyYmFuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZmlsdGVyYmFuay5oOyBwYXRoID0gLi4vbGlic3BlZXgvZmlsdGVyYmFuay5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODgzNzRCMEIxOTM1ODEwMDVDN0E2OSAvKiBraXNzX2ZmdC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0ga2lzc19mZnQuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2tpc3NfZmZ0LmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4ODM3NEMwQjE5MzU4MTAwNUM3QTY5IC8qIGtpc3NfZmZ0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBraXNzX2ZmdC5oOyBwYXRoID0gLi4vbGlic3BlZXgva2lzc19mZnQuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3Mzg4Mzc0RDBCMTkzNTgxMDA1QzdBNjkgLyoga2lzc19mZnRyLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBraXNzX2ZmdHIuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2tpc3NfZmZ0ci5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODgzNzRFMEIxOTM1ODEwMDVDN0E2OSAvKiBraXNzX2ZmdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGtpc3NfZmZ0ci5oOyBwYXRoID0gLi4vbGlic3BlZXgva2lzc19mZnRyLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4ODM3NEYwQjE5MzU4MTAwNUM3QTY5IC8qIGxzcF9iZmluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBsc3BfYmZpbi5oOyBwYXRoID0gLi4vbGlic3BlZXgvbHNwX2JmaW4uaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3Mzg4Mzc1MDBCMTkzNTgxMDA1QzdBNjkgLyogcHNldWRvZmxvYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHBzZXVkb2Zsb2F0Lmg7IHBhdGggPSAuLi9saWJzcGVleC9wc2V1ZG9mbG9hdC5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODgzNzUxMEIxOTM1ODEwMDVDN0E2OSAvKiBxdWFudF9sc3BfYmZpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gcXVhbnRfbHNwX2JmaW4uaDsgcGF0aCA9IC4uL2xpYnNwZWV4L3F1YW50X2xzcF9iZmluLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4ODM3NTIwQjE5MzU4MTAwNUM3QTY5IC8qIHZvcmJpc19wc3kuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHZvcmJpc19wc3kuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L3ZvcmJpc19wc3kuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3Mzg4Mzc1MzBCMTkzNTgxMDA1QzdBNjkgLyogdm9yYmlzX3BzeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gdm9yYmlzX3BzeS5oOyBwYXRoID0gLi4vbGlic3BlZXgvdm9yYmlzX3BzeS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODgzNzc3MEIxOTM2NjcwMDVDN0E2OSAvKiBsaWJzcGVleC5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJzcGVleC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQk4RDA3RjJDNzA0ODZDQzdBMDA3Q0QxRDAgLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3Q7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4RDA3RjJDODA0ODZDQzdBMDA3Q0QxRDAgLyogU3BlZXguZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gU3BlZXguZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlCRkY3M0RDRjBBNzhBQTE3MDA3OEE0QTggLyogd2luZG93LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB3aW5kb3cuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L3dpbmRvdy5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJNzM4ODM3NzUwQjE5MzY2NzAwNUM3QTY5IC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJOEQwN0YyQzMwNDg2Q0M3QTAwN0NEMUQwIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEdyb3VwIHNlY3Rpb24gKi8KKwkJMDM0NzY4RERGRjM4QTQ1QTExREI5QzhCIC8qIFByb2R1Y3RzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk4RDA3RjJDODA0ODZDQzdBMDA3Q0QxRDAgLyogU3BlZXguZnJhbWV3b3JrICovLAorCQkJCTczODgzNzc3MEIxOTM2NjcwMDVDN0E2OSAvKiBsaWJzcGVleC5hICovLAorCQkJKTsKKwkJCW5hbWUgPSBQcm9kdWN0czsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTA4NjdENjkxRkU4NDAyOEZDMDJBQUMwNyAvKiBTcGVleCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMDhGQjc3QUNGRTg0MTcwN0MwMkFBQzA3IC8qIFNvdXJjZSAqLywKKwkJCQk3MzgxNEFFQjA5MDdGQjY0MDBDNDc4RkMgLyogSGVhZGVycyAqLywKKwkJCQkwODlDMTY2NUZFODQxMTU4QzAyQUFDMDcgLyogUmVzb3VyY2VzICovLAorCQkJCTA4NjdENjlBRkU4NDAyOEZDMDJBQUMwNyAvKiBFeHRlcm5hbCBGcmFtZXdvcmtzIGFuZCBMaWJyYXJpZXMgKi8sCisJCQkJMDM0NzY4RERGRjM4QTQ1QTExREI5QzhCIC8qIFByb2R1Y3RzICovLAorCQkJKTsKKwkJCW5hbWUgPSBTcGVleDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTA4NjdENjlBRkU4NDAyOEZDMDJBQUMwNyAvKiBFeHRlcm5hbCBGcmFtZXdvcmtzIGFuZCBMaWJyYXJpZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJKTsKKwkJCW5hbWUgPSAiRXh0ZXJuYWwgRnJhbWV3b3JrcyBhbmQgTGlicmFyaWVzIjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTA4OUMxNjY1RkU4NDExNThDMDJBQUMwNyAvKiBSZXNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCThEMDdGMkM3MDQ4NkNDN0EwMDdDRDFEMCAvKiBJbmZvLnBsaXN0ICovLAorCQkJCTA4OUMxNjY2RkU4NDExNThDMDJBQUMwNyAvKiBJbmZvUGxpc3Quc3RyaW5ncyAqLywKKwkJCSk7CisJCQluYW1lID0gUmVzb3VyY2VzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMDhGQjc3QUNGRTg0MTcwN0MwMkFBQzA3IC8qIFNvdXJjZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzM4ODM3NDYwQjE5MzU4MTAwNUM3QTY5IC8qIF9raXNzX2ZmdF9ndXRzLmggKi8sCisJCQkJNzM4ODM3NDcwQjE5MzU4MTAwNUM3QTY5IC8qIGZmdHdyYXAuYyAqLywKKwkJCQk3Mzg4Mzc0ODBCMTkzNTgxMDA1QzdBNjkgLyogZmZ0d3JhcC5oICovLAorCQkJCTczODgzNzQ5MEIxOTM1ODEwMDVDN0E2OSAvKiBmaWx0ZXJiYW5rLmMgKi8sCisJCQkJNzM4ODM3NEEwQjE5MzU4MTAwNUM3QTY5IC8qIGZpbHRlcmJhbmsuaCAqLywKKwkJCQk3Mzg4Mzc0QjBCMTkzNTgxMDA1QzdBNjkgLyoga2lzc19mZnQuYyAqLywKKwkJCQk3Mzg4Mzc0QzBCMTkzNTgxMDA1QzdBNjkgLyoga2lzc19mZnQuaCAqLywKKwkJCQk3Mzg4Mzc0RDBCMTkzNTgxMDA1QzdBNjkgLyoga2lzc19mZnRyLmMgKi8sCisJCQkJNzM4ODM3NEUwQjE5MzU4MTAwNUM3QTY5IC8qIGtpc3NfZmZ0ci5oICovLAorCQkJCTczODgzNzRGMEIxOTM1ODEwMDVDN0E2OSAvKiBsc3BfYmZpbi5oICovLAorCQkJCTczODgzNzUwMEIxOTM1ODEwMDVDN0E2OSAvKiBwc2V1ZG9mbG9hdC5oICovLAorCQkJCTczODgzNzUxMEIxOTM1ODEwMDVDN0E2OSAvKiBxdWFudF9sc3BfYmZpbi5oICovLAorCQkJCTczODgzNzUyMEIxOTM1ODEwMDVDN0E2OSAvKiB2b3JiaXNfcHN5LmMgKi8sCisJCQkJNzM4ODM3NTMwQjE5MzU4MTAwNUM3QTY5IC8qIHZvcmJpc19wc3kuaCAqLywKKwkJCQk3MzgxNEIwQzA5MDdGQzk5MDBDNDc4RkMgLyogYXJjaC5oICovLAorCQkJCTczODE0QjBEMDkwN0ZDOTkwMEM0NzhGQyAvKiBiaXRzLmMgKi8sCisJCQkJNzM4MTRCMEUwOTA3RkM5OTAwQzQ3OEZDIC8qIGNiX3NlYXJjaF9hcm00LmggKi8sCisJCQkJNzM4MTRCMEYwOTA3RkM5OTAwQzQ3OEZDIC8qIGNiX3NlYXJjaF9iZmluLmggKi8sCisJCQkJNzM4MTRCMTAwOTA3RkM5OTAwQzQ3OEZDIC8qIGNiX3NlYXJjaF9zc2UuaCAqLywKKwkJCQlCRkY3M0RDRjBBNzhBQTE3MDA3OEE0QTggLyogd2luZG93LmMgKi8sCisJCQkJNzM4MTRCMTEwOTA3RkM5OTAwQzQ3OEZDIC8qIGNiX3NlYXJjaC5jICovLAorCQkJCTczODE0QjEyMDkwN0ZDOTkwMEM0NzhGQyAvKiBjYl9zZWFyY2guaCAqLywKKwkJCQk3MzgxNEIxMzA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzVfNjRfdGFibGUuYyAqLywKKwkJCQk3MzgxNEIxNDA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzVfMjU2X3RhYmxlLmMgKi8sCisJCQkJNzM4MTRCMTUwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y184XzEyOF90YWJsZS5jICovLAorCQkJCTczODE0QjE2MDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfMTBfMTZfdGFibGUuYyAqLywKKwkJCQk3MzgxNEIxNzA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzEwXzMyX3RhYmxlLmMgKi8sCisJCQkJNzM4MTRCMTgwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y18yMF8zMl90YWJsZS5jICovLAorCQkJCTczODE0QjE5MDkwN0ZDOTkwMEM0NzhGQyAvKiBmaWx0ZXJzX2FybTQuaCAqLywKKwkJCQk3MzgxNEIxQTA5MDdGQzk5MDBDNDc4RkMgLyogZmlsdGVyc19iZmluLmggKi8sCisJCQkJNzM4MTRCMUIwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpbHRlcnNfc3NlLmggKi8sCisJCQkJNzM4MTRCMUMwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpbHRlcnMuYyAqLywKKwkJCQk3MzgxNEIxRDA5MDdGQzk5MDBDNDc4RkMgLyogZmlsdGVycy5oICovLAorCQkJCTczODE0QjFFMDkwN0ZDOTkwMEM0NzhGQyAvKiBmaXhlZF9hcm00LmggKi8sCisJCQkJNzM4MTRCMUYwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpeGVkX2FybTVlLmggKi8sCisJCQkJNzM4MTRCMjAwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpeGVkX2JmaW4uaCAqLywKKwkJCQk3MzgxNEIyMTA5MDdGQzk5MDBDNDc4RkMgLyogZml4ZWRfZGVidWcuaCAqLywKKwkJCQk3MzgxNEIyMjA5MDdGQzk5MDBDNDc4RkMgLyogZml4ZWRfZ2VuZXJpYy5oICovLAorCQkJCTczODE0QjIzMDkwN0ZDOTkwMEM0NzhGQyAvKiBnYWluX3RhYmxlX2xici5jICovLAorCQkJCTczODE0QjI0MDkwN0ZDOTkwMEM0NzhGQyAvKiBnYWluX3RhYmxlLmMgKi8sCisJCQkJNzM4MTRCMjUwOTA3RkM5OTAwQzQ3OEZDIC8qIGhleGNfMTBfMzJfdGFibGUuYyAqLywKKwkJCQk3MzgxNEIyNjA5MDdGQzk5MDBDNDc4RkMgLyogaGV4Y190YWJsZS5jICovLAorCQkJCTczODE0QjI3MDkwN0ZDOTkwMEM0NzhGQyAvKiBoaWdoX2xzcF90YWJsZXMuYyAqLywKKwkJCQk3MzgxNEIyODA5MDdGQzk5MDBDNDc4RkMgLyogaml0dGVyLmMgKi8sCisJCQkJNzM4MTRCMjkwOTA3RkM5OTAwQzQ3OEZDIC8qIGxicl80OGtfdGFibGVzLmMgKi8sCisJCQkJNzM4MTRCMkEwOTA3RkM5OTAwQzQ3OEZDIC8qIGxwY19iZmluLmggKi8sCisJCQkJNzM4MTRCMkIwOTA3RkM5OTAwQzQ3OEZDIC8qIGxwYy5jICovLAorCQkJCTczODE0QjJDMDkwN0ZDOTkwMEM0NzhGQyAvKiBscGMuaCAqLywKKwkJCQk3MzgxNEIyRDA5MDdGQzk5MDBDNDc4RkMgLyogbHNwX3RhYmxlc19uYi5jICovLAorCQkJCTczODE0QjJFMDkwN0ZDOTkwMEM0NzhGQyAvKiBsc3AuYyAqLywKKwkJCQk3MzgxNEIyRjA5MDdGQzk5MDBDNDc4RkMgLyogbHNwLmggKi8sCisJCQkJNzM4MTRCMzAwOTA3RkM5OTAwQzQ3OEZDIC8qIGx0cF9hcm00LmggKi8sCisJCQkJNzM4MTRCMzEwOTA3RkM5OTAwQzQ3OEZDIC8qIGx0cF9iZmluLmggKi8sCisJCQkJNzM4MTRCMzIwOTA3RkM5OTAwQzQ3OEZDIC8qIGx0cF9zc2UuaCAqLywKKwkJCQk3MzgxNEIzMzA5MDdGQzk5MDBDNDc4RkMgLyogbHRwLmMgKi8sCisJCQkJNzM4MTRCMzQwOTA3RkM5OTAwQzQ3OEZDIC8qIGx0cC5oICovLAorCQkJCTczODE0QjM3MDkwN0ZDOTkwMEM0NzhGQyAvKiBtYXRoX2FwcHJveC5jICovLAorCQkJCTczODE0QjM4MDkwN0ZDOTkwMEM0NzhGQyAvKiBtYXRoX2FwcHJveC5oICovLAorCQkJCTczODE0QjM5MDkwN0ZDOTkwMEM0NzhGQyAvKiBtZGYuYyAqLywKKwkJCQk3MzgxNEIzQTA5MDdGQzk5MDBDNDc4RkMgLyogbWlzY19iZmluLmggKi8sCisJCQkJNzM4MTRCM0IwOTA3RkM5OTAwQzQ3OEZDIC8qIG1pc2MuYyAqLywKKwkJCQk3MzgxNEIzQzA5MDdGQzk5MDBDNDc4RkMgLyogbWlzYy5oICovLAorCQkJCTczODE0QjNEMDkwN0ZDOTkwMEM0NzhGQyAvKiBtb2Rlcy5jICovLAorCQkJCTczODE0QjNFMDkwN0ZDOTkwMEM0NzhGQyAvKiBtb2Rlcy5oICovLAorCQkJCTczODE0QjNGMDkwN0ZDOTkwMEM0NzhGQyAvKiBuYl9jZWxwLmMgKi8sCisJCQkJNzM4MTRCNDAwOTA3RkM5OTAwQzQ3OEZDIC8qIG5iX2NlbHAuaCAqLywKKwkJCQk3MzgxNEI0MTA5MDdGQzk5MDBDNDc4RkMgLyogcHJlcHJvY2Vzcy5jICovLAorCQkJCTczODE0QjQyMDkwN0ZDOTkwMEM0NzhGQyAvKiBxdWFudF9sc3AuYyAqLywKKwkJCQk3MzgxNEI0MzA5MDdGQzk5MDBDNDc4RkMgLyogcXVhbnRfbHNwLmggKi8sCisJCQkJNzM4MTRCNDQwOTA3RkM5OTAwQzQ3OEZDIC8qIHNiX2NlbHAuYyAqLywKKwkJCQk3MzgxNEI0NTA5MDdGQzk5MDBDNDc4RkMgLyogc2JfY2VscC5oICovLAorCQkJCTczODE0QjQ2MDkwN0ZDOTkwMEM0NzhGQyAvKiBzbWFsbGZ0LmMgKi8sCisJCQkJNzM4MTRCNDcwOTA3RkM5OTAwQzQ3OEZDIC8qIHNtYWxsZnQuaCAqLywKKwkJCQk3MzgxNEI0ODA5MDdGQzk5MDBDNDc4RkMgLyogc3BlZXhfY2FsbGJhY2tzLmMgKi8sCisJCQkJNzM4MTRCNDkwOTA3RkM5OTAwQzQ3OEZDIC8qIHNwZWV4X2hlYWRlci5jICovLAorCQkJCTczODE0QjRBMDkwN0ZDOTkwMEM0NzhGQyAvKiBzcGVleC5jICovLAorCQkJCTczODE0QjRCMDkwN0ZDOTkwMEM0NzhGQyAvKiBzdGFja19hbGxvYy5oICovLAorCQkJCTczODE0QjRDMDkwN0ZDOTkwMEM0NzhGQyAvKiBzdGVyZW8uYyAqLywKKwkJCQk3MzgxNEI0RDA5MDdGQzk5MDBDNDc4RkMgLyogdGVzdGRlbm9pc2UuYyAqLywKKwkJCQk3MzgxNEI0RTA5MDdGQzk5MDBDNDc4RkMgLyogdGVzdGVjaG8uYyAqLywKKwkJCQk3MzgxNEI0RjA5MDdGQzk5MDBDNDc4RkMgLyogdGVzdGVuY191d2IuYyAqLywKKwkJCQk3MzgxNEI1MDA5MDdGQzk5MDBDNDc4RkMgLyogdGVzdGVuY193Yi5jICovLAorCQkJCTczODE0QjUxMDkwN0ZDOTkwMEM0NzhGQyAvKiB0ZXN0ZW5jLmMgKi8sCisJCQkJNzM4MTRCNTIwOTA3RkM5OTAwQzQ3OEZDIC8qIHZici5jICovLAorCQkJCTczODE0QjUzMDkwN0ZDOTkwMEM0NzhGQyAvKiB2YnIuaCAqLywKKwkJCQk3MzgxNEI1NDA5MDdGQzk5MDBDNDc4RkMgLyogdnFfYXJtNC5oICovLAorCQkJCTczODE0QjU1MDkwN0ZDOTkwMEM0NzhGQyAvKiB2cV9iZmluLmggKi8sCisJCQkJNzM4MTRCNTYwOTA3RkM5OTAwQzQ3OEZDIC8qIHZxX3NzZS5oICovLAorCQkJCTczODE0QjU3MDkwN0ZDOTkwMEM0NzhGQyAvKiB2cS5jICovLAorCQkJCTczODE0QjU4MDkwN0ZDOTkwMEM0NzhGQyAvKiB2cS5oICovLAorCQkJCTMyQkFFMEI3MDM3MUE3NEIwMEM5MTc4MyAvKiBTcGVleF9QcmVmaXgucGNoICovLAorCQkJKTsKKwkJCW5hbWUgPSBTb3VyY2U7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk3MzgxNEFFQjA5MDdGQjY0MDBDNDc4RkMgLyogSGVhZGVycyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzM4MTRBRUMwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4ICovLAorCQkJKTsKKwkJCW5hbWUgPSBIZWFkZXJzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNzM4MTRBRUMwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MzgxNEFFRjA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXguaCAqLywKKwkJCQk3MzgxNEFGMDA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfYml0cy5oICovLAorCQkJCTczODE0QUYxMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9jYWxsYmFja3MuaCAqLywKKwkJCQk3MzgxNEFGMzA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfZWNoby5oICovLAorCQkJCTczODE0QUY0MDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9oZWFkZXIuaCAqLywKKwkJCQk3MzgxNEFGNTA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfaml0dGVyLmggKi8sCisJCQkJNzM4MTRBRjYwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X3ByZXByb2Nlc3MuaCAqLywKKwkJCQk3MzgxNEFGNzA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfc3RlcmVvLmggKi8sCisJCQkJNzM4MTRBRjgwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X3R5cGVzLmggKi8sCisJCQkpOworCQkJbmFtZSA9IHNwZWV4OworCQkJcGF0aCA9IC4uL2luY2x1ZGUvc3BlZXg7CisJCQlzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7CisJCX07CisvKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTczODgzNzczMEIxOTM2NjcwMDVDN0E2OSAvKiBIZWFkZXJzICovID0geworCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCThEMDdGMkJEMDQ4NkNDN0EwMDdDRDFEMCAvKiBIZWFkZXJzICovID0geworCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJNzM4MTRBRkYwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X2VjaG8uaCBpbiBIZWFkZXJzICovLAorCQkJCTczODE0QjAwMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9oZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTczODE0QjAxMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9qaXR0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTczODE0QjAyMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9wcmVwcm9jZXNzLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MzgxNEIwMzA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfc3RlcmVvLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MzgxNEIwNDA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfdHlwZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTczODE0QjA2MDkwN0ZCQUIwMEM0NzhGQyAvKiBzcGVleF9jYWxsYmFja3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTczODE0QjA3MDkwN0ZCQUQwMEM0NzhGQyAvKiBzcGVleF9iaXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MzgxNEIwODA5MDdGQkFFMDBDNDc4RkMgLyogc3BlZXguaCBpbiBIZWFkZXJzICovLAorCQkJCTczODgzNzU0MEIxOTM1ODEwMDVDN0E2OSAvKiBfa2lzc19mZnRfZ3V0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzM4ODM3NTYwQjE5MzU4MTAwNUM3QTY5IC8qIGZmdHdyYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTczODgzNzU4MEIxOTM1ODEwMDVDN0E2OSAvKiBmaWx0ZXJiYW5rLmggaW4gSGVhZGVycyAqLywKKwkJCQk3Mzg4Mzc1QTBCMTkzNTgxMDA1QzdBNjkgLyoga2lzc19mZnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTczODgzNzVDMEIxOTM1ODEwMDVDN0E2OSAvKiBraXNzX2ZmdHIuaCBpbiBIZWFkZXJzICovLAorCQkJCTczODgzNzVEMEIxOTM1ODEwMDVDN0E2OSAvKiBsc3BfYmZpbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzM4ODM3NUUwQjE5MzU4MTAwNUM3QTY5IC8qIHBzZXVkb2Zsb2F0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3Mzg4Mzc1RjBCMTkzNTgxMDA1QzdBNjkgLyogcXVhbnRfbHNwX2JmaW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTczODgzNzYxMEIxOTM1ODEwMDVDN0E2OSAvKiB2b3JiaXNfcHN5LmggaW4gSGVhZGVycyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCisJCTczODgzNzc2MEIxOTM2NjcwMDVDN0E2OSAvKiBsaWJzcGVleCAoc3RhdGljKSAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSA3Mzg4Mzc3ODBCMTkzNjg3MDA1QzdBNjkgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImxpYnNwZWV4IChzdGF0aWMpIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTczODgzNzczMEIxOTM2NjcwMDVDN0E2OSAvKiBIZWFkZXJzICovLAorCQkJCTczODgzNzc0MEIxOTM2NjcwMDVDN0E2OSAvKiBTb3VyY2VzICovLAorCQkJCTczODgzNzc1MEIxOTM2NjcwMDVDN0E2OSAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSAibGlic3BlZXggKHN0YXRpYykiOworCQkJcHJvZHVjdE5hbWUgPSBzcGVleDsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSA3Mzg4Mzc3NzBCMTkzNjY3MDA1QzdBNjkgLyogbGlic3BlZXguYSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOworCQl9OworCQk4RDA3RjJCQzA0ODZDQzdBMDA3Q0QxRDAgLyogU3BlZXggKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gNzM4MTRBREYwOTA3RkIxRTAwQzQ3OEZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJTcGVleCIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQk4RDA3RjJCRDA0ODZDQzdBMDA3Q0QxRDAgLyogSGVhZGVycyAqLywKKwkJCQk4RDA3RjJCRjA0ODZDQzdBMDA3Q0QxRDAgLyogUmVzb3VyY2VzICovLAorCQkJCThEMDdGMkMxMDQ4NkNDN0EwMDdDRDFEMCAvKiBTb3VyY2VzICovLAorCQkJCThEMDdGMkMzMDQ4NkNDN0EwMDdDRDFEMCAvKiBGcmFtZXdvcmtzICovLAorCQkJCThEMDdGMkM1MDQ4NkNDN0EwMDdDRDFEMCAvKiBSZXogKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9IFNwZWV4OworCQkJcHJvZHVjdEluc3RhbGxQYXRoID0gIiQoSE9NRSkvTGlicmFyeS9GcmFtZXdvcmtzIjsKKwkJCXByb2R1Y3ROYW1lID0gU3BlZXg7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gOEQwN0YyQzgwNDg2Q0M3QTAwN0NEMUQwIC8qIFNwZWV4LmZyYW1ld29yayAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUuZnJhbWV3b3JrIjsKKwkJfTsKKy8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KKwkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0geworCQkJaXNhID0gUEJYUHJvamVjdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSA3MzgxNEFFMzA5MDdGQjFFMDBDNDc4RkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJTcGVleCIgKi87CisJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKKwkJCW1haW5Hcm91cCA9IDA4NjdENjkxRkU4NDAyOEZDMDJBQUMwNyAvKiBTcGVleCAqLzsKKwkJCXByb2R1Y3RSZWZHcm91cCA9IDAzNDc2OERERkYzOEE0NUExMURCOUM4QiAvKiBQcm9kdWN0cyAqLzsKKwkJCXByb2plY3REaXJQYXRoID0gIiI7CisJCQl0YXJnZXRzID0gKAorCQkJCThEMDdGMkJDMDQ4NkNDN0EwMDdDRDFEMCAvKiBTcGVleCAqLywKKwkJCQk3Mzg4Mzc3NjBCMTkzNjY3MDA1QzdBNjkgLyogbGlic3BlZXggKHN0YXRpYykgKi8sCisJCQkpOworCQl9OworLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJOEQwN0YyQkYwNDg2Q0M3QTAwN0NEMUQwIC8qIFJlc291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFJlc291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJOEQwN0YyQzAwNDg2Q0M3QTAwN0NEMUQwIC8qIEluZm9QbGlzdC5zdHJpbmdzIGluIFJlc291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYUmV6QnVpbGRQaGFzZSBzZWN0aW9uICovCisJCThEMDdGMkM1MDQ4NkNDN0EwMDdDRDFEMCAvKiBSZXogKi8gPSB7CisJCQlpc2EgPSBQQlhSZXpCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWFJlekJ1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTczODgzNzc0MEIxOTM2NjcwMDVDN0E2OSAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJNzM4ODM3N0IwQjE5Mzc4NDAwNUM3QTY5IC8qIGJpdHMuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzdDMEIxOTM3ODUwMDVDN0E2OSAvKiBjYl9zZWFyY2guYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzdEMEIxOTM3ODgwMDVDN0E2OSAvKiBleGNfMTBfMTZfdGFibGUuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzdFMEIxOTM3ODkwMDVDN0E2OSAvKiBleGNfMTBfMzJfdGFibGUuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzdGMEIxOTM3OEEwMDVDN0E2OSAvKiBleGNfMjBfMzJfdGFibGUuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzgwMEIxOTM3OEEwMDVDN0E2OSAvKiBleGNfNV8yNTZfdGFibGUuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzgxMEIxOTM3OEMwMDVDN0E2OSAvKiBleGNfNV82NF90YWJsZS5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3ODIwQjE5Mzc4RTAwNUM3QTY5IC8qIGV4Y184XzEyOF90YWJsZS5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3ODMwQjE5Mzc5MTAwNUM3QTY5IC8qIGZmdHdyYXAuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzg0MEIxOTM3OTIwMDVDN0E2OSAvKiBmaWx0ZXJiYW5rLmMgaW4gU291cmNlcyAqLywKKwkJCQk3Mzg4Mzc4NTBCMTkzNzkzMDA1QzdBNjkgLyogZmlsdGVycy5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3ODYwQjE5Mzc5NTAwNUM3QTY5IC8qIGdhaW5fdGFibGUuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzg3MEIxOTM3OTYwMDVDN0E2OSAvKiBnYWluX3RhYmxlX2xici5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3ODgwQjE5Mzc5OTAwNUM3QTY5IC8qIGhleGNfMTBfMzJfdGFibGUuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzg5MEIxOTM3OUIwMDVDN0E2OSAvKiBoZXhjX3RhYmxlLmMgaW4gU291cmNlcyAqLywKKwkJCQk3Mzg4Mzc4QTBCMTkzNzlFMDA1QzdBNjkgLyogaGlnaF9sc3BfdGFibGVzLmMgaW4gU291cmNlcyAqLywKKwkJCQk3Mzg4Mzc4QjBCMTkzN0EwMDA1QzdBNjkgLyogaml0dGVyLmMgaW4gU291cmNlcyAqLywKKwkJCQk3Mzg4Mzc4QzBCMTkzN0E0MDA1QzdBNjkgLyoga2lzc19mZnQuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzhEMEIxOTM3QTkwMDVDN0E2OSAvKiBraXNzX2ZmdHIuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzhFMEIxOTM3QUUwMDVDN0E2OSAvKiBsYnJfNDhrX3RhYmxlcy5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3OEYwQjE5MzdCMDAwNUM3QTY5IC8qIGxwYy5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3OTAwQjE5MzdCMDAwNUM3QTY5IC8qIGxzcC5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3OTEwQjE5MzdCNTAwNUM3QTY5IC8qIGxzcF90YWJsZXNfbmIuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzkyMEIxOTM3QjcwMDVDN0E2OSAvKiBsdHAuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzkzMEIxOTM3QjkwMDVDN0E2OSAvKiBtYXRoX2FwcHJveC5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3OTQwQjE5MzdCQjAwNUM3QTY5IC8qIG1kZi5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3OTUwQjE5MzdCRDAwNUM3QTY5IC8qIG1pc2MuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzk2MEIxOTM3QkUwMDVDN0E2OSAvKiBtb2Rlcy5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3OTcwQjE5MzdDMDAwNUM3QTY5IC8qIG5iX2NlbHAuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzk4MEIxOTM3QzIwMDVDN0E2OSAvKiBwcmVwcm9jZXNzLmMgaW4gU291cmNlcyAqLywKKwkJCQk3Mzg4Mzc5OTBCMTkzN0M0MDA1QzdBNjkgLyogcXVhbnRfbHNwLmMgaW4gU291cmNlcyAqLywKKwkJCQk3Mzg4Mzc5QTBCMTkzN0M2MDA1QzdBNjkgLyogc2JfY2VscC5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3OUIwQjE5MzdDOTAwNUM3QTY5IC8qIHNtYWxsZnQuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzlDMEIxOTM3Q0IwMDVDN0E2OSAvKiBzcGVleC5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3OUQwQjE5MzdDRTAwNUM3QTY5IC8qIHNwZWV4X2NhbGxiYWNrcy5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3OUUwQjE5MzdEMDAwNUM3QTY5IC8qIHNwZWV4X2hlYWRlci5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3OUYwQjE5MzdEMTAwNUM3QTY5IC8qIHN0ZXJlby5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3QTAwQjE5MzdEQTAwNUM3QTY5IC8qIHZici5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3QTEwQjE5MzdERDAwNUM3QTY5IC8qIHZvcmJpc19wc3kuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzN0EyMEIxOTM3REYwMDVDN0E2OSAvKiB2cS5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3QTMwQjE5MzdFMTAwNUM3QTY5IC8qIHdpbmRvdy5jIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCThEMDdGMkMxMDQ4NkNDN0EwMDdDRDFEMCAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJNzM4MTRCNUEwOTA3RkM5OTAwQzQ3OEZDIC8qIGJpdHMuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjVFMDkwN0ZDOTkwMEM0NzhGQyAvKiBjYl9zZWFyY2guYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjYwMDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfNV82NF90YWJsZS5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCNjEwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y181XzI1Nl90YWJsZS5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCNjIwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y184XzEyOF90YWJsZS5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCNjMwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y18xMF8xNl90YWJsZS5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCNjQwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y18xMF8zMl90YWJsZS5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCNjUwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y18yMF8zMl90YWJsZS5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCNjkwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpbHRlcnMuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjcwMDkwN0ZDOTkwMEM0NzhGQyAvKiBnYWluX3RhYmxlX2xici5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCNzEwOTA3RkM5OTAwQzQ3OEZDIC8qIGdhaW5fdGFibGUuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjcyMDkwN0ZDOTkwMEM0NzhGQyAvKiBoZXhjXzEwXzMyX3RhYmxlLmMgaW4gU291cmNlcyAqLywKKwkJCQk3MzgxNEI3MzA5MDdGQzk5MDBDNDc4RkMgLyogaGV4Y190YWJsZS5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCNzQwOTA3RkM5OTAwQzQ3OEZDIC8qIGhpZ2hfbHNwX3RhYmxlcy5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCNzUwOTA3RkM5OTAwQzQ3OEZDIC8qIGppdHRlci5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCNzYwOTA3RkM5OTAwQzQ3OEZDIC8qIGxicl80OGtfdGFibGVzLmMgaW4gU291cmNlcyAqLywKKwkJCQk3MzgxNEI3ODA5MDdGQzk5MDBDNDc4RkMgLyogbHBjLmMgaW4gU291cmNlcyAqLywKKwkJCQk3MzgxNEI3QTA5MDdGQzk5MDBDNDc4RkMgLyogbHNwX3RhYmxlc19uYi5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCN0IwOTA3RkM5OTAwQzQ3OEZDIC8qIGxzcC5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCODAwOTA3RkM5OTAwQzQ3OEZDIC8qIGx0cC5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCODQwOTA3RkM5OTAwQzQ3OEZDIC8qIG1hdGhfYXBwcm94LmMgaW4gU291cmNlcyAqLywKKwkJCQk3MzgxNEI4ODA5MDdGQzk5MDBDNDc4RkMgLyogbWlzYy5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCOEEwOTA3RkM5OTAwQzQ3OEZDIC8qIG1vZGVzLmMgaW4gU291cmNlcyAqLywKKwkJCQk3MzgxNEI4QzA5MDdGQzk5MDBDNDc4RkMgLyogbmJfY2VscC5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCOEUwOTA3RkM5OTAwQzQ3OEZDIC8qIHByZXByb2Nlc3MuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjhGMDkwN0ZDOTkwMEM0NzhGQyAvKiBxdWFudF9sc3AuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjkxMDkwN0ZDOTkwMEM0NzhGQyAvKiBzYl9jZWxwLmMgaW4gU291cmNlcyAqLywKKwkJCQk3MzgxNEI5MzA5MDdGQzk5MDBDNDc4RkMgLyogc21hbGxmdC5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCOTUwOTA3RkM5OTAwQzQ3OEZDIC8qIHNwZWV4X2NhbGxiYWNrcy5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCOTYwOTA3RkM5OTAwQzQ3OEZDIC8qIHNwZWV4X2hlYWRlci5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCOTcwOTA3RkM5OTAwQzQ3OEZDIC8qIHNwZWV4LmMgaW4gU291cmNlcyAqLywKKwkJCQk3MzgxNEI5OTA5MDdGQzk5MDBDNDc4RkMgLyogc3RlcmVvLmMgaW4gU291cmNlcyAqLywKKwkJCQk3MzgxNEI5RjA5MDdGQzk5MDBDNDc4RkMgLyogdmJyLmMgaW4gU291cmNlcyAqLywKKwkJCQk3MzgxNEJBNDA5MDdGQzk5MDBDNDc4RkMgLyogdnEuYyBpbiBTb3VyY2VzICovLAorCQkJCUJGRjczREQwMEE3OEFBMTcwMDc4QTRBOCAvKiB3aW5kb3cuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzQ0MEIxOTM0RDAwMDVDN0E2OSAvKiBtZGYuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODgzNzU1MEIxOTM1ODEwMDVDN0E2OSAvKiBmZnR3cmFwLmMgaW4gU291cmNlcyAqLywKKwkJCQk3Mzg4Mzc1NzBCMTkzNTgxMDA1QzdBNjkgLyogZmlsdGVyYmFuay5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4ODM3NTkwQjE5MzU4MTAwNUM3QTY5IC8qIGtpc3NfZmZ0LmMgaW4gU291cmNlcyAqLywKKwkJCQk3Mzg4Mzc1QjBCMTkzNTgxMDA1QzdBNjkgLyoga2lzc19mZnRyLmMgaW4gU291cmNlcyAqLywKKwkJCQk3Mzg4Mzc2MDBCMTkzNTgxMDA1QzdBNjkgLyogdm9yYmlzX3BzeS5jIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisvKiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhWYXJpYW50R3JvdXAgc2VjdGlvbiAqLworCQkwODlDMTY2NkZFODQxMTU4QzAyQUFDMDcgLyogSW5mb1BsaXN0LnN0cmluZ3MgKi8gPSB7CisJCQlpc2EgPSBQQlhWYXJpYW50R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwODlDMTY2N0ZFODQxMTU4QzAyQUFDMDcgLyogRW5nbGlzaCAqLywKKwkJCSk7CisJCQluYW1lID0gSW5mb1BsaXN0LnN0cmluZ3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworLyogRW5kIFBCWFZhcmlhbnRHcm91cCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KKwkJNzM4MTRBRTAwOTA3RkIxRTAwQzQ3OEZDIC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlEWUxJQl9DT01QQVRJQklMSVRZX1ZFUlNJT04gPSAxOworCQkJCURZTElCX0NVUlJFTlRfVkVSU0lPTiA9IDE7CisJCQkJRlJBTUVXT1JLX1ZFUlNJT04gPSBBOworCQkJCUdDQ19EWU5BTUlDX05PX1BJQyA9IE5POworCQkJCUdDQ19FTkFCTEVfRklYX0FORF9DT05USU5VRSA9IFlFUzsKKwkJCQlHQ0NfR0VORVJBVEVfREVCVUdHSU5HX1NZTUJPTFMgPSBZRVM7CisJCQkJR0NDX09QVElNSVpBVElPTl9MRVZFTCA9IDA7CisJCQkJR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUzsKKwkJCQlHQ0NfUFJFRklYX0hFQURFUiA9IFNwZWV4X1ByZWZpeC5wY2g7CisJCQkJSU5GT1BMSVNUX0ZJTEUgPSBJbmZvLnBsaXN0OworCQkJCUlOU1RBTExfUEFUSCA9IC9MaWJyYXJ5L0ZyYW1ld29ya3M7CisJCQkJTElCUkFSWV9TVFlMRSA9IERZTkFNSUM7CisJCQkJTUFDSF9PX1RZUEUgPSBtaF9keWxpYjsKKwkJCQlQUk9EVUNUX05BTUUgPSBTcGVleDsKKwkJCQlXUkFQUEVSX0VYVEVOU0lPTiA9IGZyYW1ld29yazsKKwkJCQlaRVJPX0xJTksgPSBZRVM7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQk3MzgxNEFFMTA5MDdGQjFFMDBDNDc4RkMgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gWUVTOworCQkJCURZTElCX0NPTVBBVElCSUxJVFlfVkVSU0lPTiA9IDE7CisJCQkJRFlMSUJfQ1VSUkVOVF9WRVJTSU9OID0gMTsKKwkJCQlGUkFNRVdPUktfVkVSU0lPTiA9IEE7CisJCQkJR0NDX0VOQUJMRV9GSVhfQU5EX0NPTlRJTlVFID0gTk87CisJCQkJR0NDX0dFTkVSQVRFX0RFQlVHR0lOR19TWU1CT0xTID0gTk87CisJCQkJR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUzsKKwkJCQlHQ0NfUFJFRklYX0hFQURFUiA9IFNwZWV4X1ByZWZpeC5wY2g7CisJCQkJSU5GT1BMSVNUX0ZJTEUgPSBJbmZvLnBsaXN0OworCQkJCUlOU1RBTExfUEFUSCA9IC9MaWJyYXJ5L0ZyYW1ld29ya3M7CisJCQkJTElCUkFSWV9TVFlMRSA9IERZTkFNSUM7CisJCQkJTUFDSF9PX1RZUEUgPSBtaF9keWxpYjsKKwkJCQlQUk9EVUNUX05BTUUgPSBTcGVleDsKKwkJCQlXUkFQUEVSX0VYVEVOU0lPTiA9IGZyYW1ld29yazsKKwkJCQlaRVJPX0xJTksgPSBOTzsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJNzM4MTRBRTQwOTA3RkIxRTAwQzQ3OEZDIC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAwOworCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSBfX01BQ09TWF9fOworCQkJCVNES1JPT1QgPSAvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrOworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJNzM4MTRBRTUwOTA3RkIxRTAwQzQ3OEZDIC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQVJDSFMgPSAoCisJCQkJCXBwYywKKwkJCQkJaTM4NiwKKwkJCQkpOworCQkJCUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAzOworCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSBfX01BQ09TWF9fOworCQkJCU9USEVSX0NGTEFHUyA9ICgKKwkJCQkJIiQoT1RIRVJfQ0ZMQUdTKSIsCisJCQkJCSItZmFsaWduLWxvb3BzPTE2IiwKKwkJCQkpOworCQkJCVNES1JPT1QgPSAvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrOworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQk3Mzg4Mzc3OTBCMTkzNjg3MDA1QzdBNjkgLyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POworCQkJCUdDQ19EWU5BTUlDX05PX1BJQyA9IE5POworCQkJCUdDQ19FTkFCTEVfRklYX0FORF9DT05USU5VRSA9IFlFUzsKKwkJCQlHQ0NfR0VORVJBVEVfREVCVUdHSU5HX1NZTUJPTFMgPSBZRVM7CisJCQkJR0NDX09QVElNSVpBVElPTl9MRVZFTCA9IDA7CisJCQkJSU5TVEFMTF9QQVRIID0gL3Vzci9sb2NhbC9saWI7CisJCQkJUFJFQklORElORyA9IE5POworCQkJCVBST0RVQ1RfTkFNRSA9IHNwZWV4OworCQkJCVpFUk9fTElOSyA9IFlFUzsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTczODgzNzdBMEIxOTM2ODcwMDVDN0E2OSAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZRVM7CisJCQkJR0NDX0VOQUJMRV9GSVhfQU5EX0NPTlRJTlVFID0gTk87CisJCQkJR0NDX0dFTkVSQVRFX0RFQlVHR0lOR19TWU1CT0xTID0gTk87CisJCQkJSU5TVEFMTF9QQVRIID0gL3Vzci9sb2NhbC9saWI7CisJCQkJUFJFQklORElORyA9IE5POworCQkJCVBST0RVQ1RfTkFNRSA9IHNwZWV4OworCQkJCVpFUk9fTElOSyA9IE5POworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworLyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KKworLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCisJCTczODE0QURGMDkwN0ZCMUUwMEM0NzhGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiU3BlZXgiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJNzM4MTRBRTAwOTA3RkIxRTAwQzQ3OEZDIC8qIERlYnVnICovLAorCQkJCTczODE0QUUxMDkwN0ZCMUUwMEM0NzhGQyAvKiBSZWxlYXNlICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTczODE0QUUzMDkwN0ZCMUUwMEM0NzhGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIlNwZWV4IiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTczODE0QUU0MDkwN0ZCMUUwMEM0NzhGQyAvKiBEZWJ1ZyAqLywKKwkJCQk3MzgxNEFFNTA5MDdGQjFFMDBDNDc4RkMgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OworCQk3Mzg4Mzc3ODBCMTkzNjg3MDA1QzdBNjkgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImxpYnNwZWV4IChzdGF0aWMpIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTczODgzNzc5MEIxOTM2ODcwMDVDN0E2OSAvKiBEZWJ1ZyAqLywKKwkJCQk3Mzg4Mzc3QTBCMTkzNjg3MDA1QzdBNjkgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OworLyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLworCX07CisJcm9vdE9iamVjdCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKK30KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L21hY29zeC9TcGVleF9QcmVmaXgucGNoIGIvM3JkcGFydHkvc3BlZXgvbWFjb3N4L1NwZWV4X1ByZWZpeC5wY2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNhYmY1ZQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L21hY29zeC9TcGVleF9QcmVmaXgucGNoCkBAIC0wLDAgKzEsNSBAQAorLy8KKy8vIFByZWZpeCBoZWFkZXIgZm9yIGFsbCBzb3VyY2UgZmlsZXMgb2YgdGhlICdTcGVleCcgdGFyZ2V0IGluIHRoZSAnU3BlZXgnIHByb2plY3QuCisvLworCisjaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvbWFjb3N4L1NwZWV4X1VCLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi8zcmRwYXJ0eS9zcGVleC9tYWNvc3gvU3BlZXhfVUIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGFmMDM1Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvbWFjb3N4L1NwZWV4X1VCLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTAsMCArMSw2MDQgQEAKKy8vICEkKlVURjgqJCEKK3sKKwlhcmNoaXZlVmVyc2lvbiA9IDE7CisJY2xhc3NlcyA9IHsKKwl9OworCW9iamVjdFZlcnNpb24gPSA0MjsKKwlvYmplY3RzID0geworCisvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCQk3MzgxNEFGRjA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfZWNoby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRBRjMwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X2VjaG8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTczODE0QjAwMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9oZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QUY0MDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9oZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTczODE0QjAxMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9qaXR0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QUY1MDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9qaXR0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTczODE0QjAyMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9wcmVwcm9jZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEFGNjA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfcHJlcHJvY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJNzM4MTRCMDMwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X3N0ZXJlby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRBRjcwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X3N0ZXJlby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJNzM4MTRCMDQwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X3R5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEFGODA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfdHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTczODE0QjA2MDkwN0ZCQUIwMEM0NzhGQyAvKiBzcGVleF9jYWxsYmFja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QUYxMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9jYWxsYmFja3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTczODE0QjA3MDkwN0ZCQUQwMEM0NzhGQyAvKiBzcGVleF9iaXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEFGMDA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfYml0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJNzM4MTRCMDgwOTA3RkJBRTAwQzQ3OEZDIC8qIHNwZWV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEFFRjA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTczODE0QjVBMDkwN0ZDOTkwMEM0NzhGQyAvKiBiaXRzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIwRDA5MDdGQzk5MDBDNDc4RkMgLyogYml0cy5jICovOyB9OworCQk3MzgxNEI1RTA5MDdGQzk5MDBDNDc4RkMgLyogY2Jfc2VhcmNoLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIxMTA5MDdGQzk5MDBDNDc4RkMgLyogY2Jfc2VhcmNoLmMgKi87IH07CisJCTczODE0QjYwMDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfNV82NF90YWJsZS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMTMwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y181XzY0X3RhYmxlLmMgKi87IH07CisJCTczODE0QjYxMDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfNV8yNTZfdGFibGUuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjE0MDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfNV8yNTZfdGFibGUuYyAqLzsgfTsKKwkJNzM4MTRCNjIwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y184XzEyOF90YWJsZS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMTUwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y184XzEyOF90YWJsZS5jICovOyB9OworCQk3MzgxNEI2MzA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzEwXzE2X3RhYmxlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIxNjA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzEwXzE2X3RhYmxlLmMgKi87IH07CisJCTczODE0QjY0MDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfMTBfMzJfdGFibGUuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjE3MDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfMTBfMzJfdGFibGUuYyAqLzsgfTsKKwkJNzM4MTRCNjUwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y18yMF8zMl90YWJsZS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMTgwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y18yMF8zMl90YWJsZS5jICovOyB9OworCQk3MzgxNEI2OTA5MDdGQzk5MDBDNDc4RkMgLyogZmlsdGVycy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMUMwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpbHRlcnMuYyAqLzsgfTsKKwkJNzM4MTRCNzAwOTA3RkM5OTAwQzQ3OEZDIC8qIGdhaW5fdGFibGVfbGJyLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIyMzA5MDdGQzk5MDBDNDc4RkMgLyogZ2Fpbl90YWJsZV9sYnIuYyAqLzsgfTsKKwkJNzM4MTRCNzEwOTA3RkM5OTAwQzQ3OEZDIC8qIGdhaW5fdGFibGUuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjI0MDkwN0ZDOTkwMEM0NzhGQyAvKiBnYWluX3RhYmxlLmMgKi87IH07CisJCTczODE0QjcyMDkwN0ZDOTkwMEM0NzhGQyAvKiBoZXhjXzEwXzMyX3RhYmxlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIyNTA5MDdGQzk5MDBDNDc4RkMgLyogaGV4Y18xMF8zMl90YWJsZS5jICovOyB9OworCQk3MzgxNEI3MzA5MDdGQzk5MDBDNDc4RkMgLyogaGV4Y190YWJsZS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMjYwOTA3RkM5OTAwQzQ3OEZDIC8qIGhleGNfdGFibGUuYyAqLzsgfTsKKwkJNzM4MTRCNzQwOTA3RkM5OTAwQzQ3OEZDIC8qIGhpZ2hfbHNwX3RhYmxlcy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMjcwOTA3RkM5OTAwQzQ3OEZDIC8qIGhpZ2hfbHNwX3RhYmxlcy5jICovOyB9OworCQk3MzgxNEI3NTA5MDdGQzk5MDBDNDc4RkMgLyogaml0dGVyLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIyODA5MDdGQzk5MDBDNDc4RkMgLyogaml0dGVyLmMgKi87IH07CisJCTczODE0Qjc2MDkwN0ZDOTkwMEM0NzhGQyAvKiBsYnJfNDhrX3RhYmxlcy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMjkwOTA3RkM5OTAwQzQ3OEZDIC8qIGxicl80OGtfdGFibGVzLmMgKi87IH07CisJCTczODE0Qjc4MDkwN0ZDOTkwMEM0NzhGQyAvKiBscGMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjJCMDkwN0ZDOTkwMEM0NzhGQyAvKiBscGMuYyAqLzsgfTsKKwkJNzM4MTRCN0EwOTA3RkM5OTAwQzQ3OEZDIC8qIGxzcF90YWJsZXNfbmIuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjJEMDkwN0ZDOTkwMEM0NzhGQyAvKiBsc3BfdGFibGVzX25iLmMgKi87IH07CisJCTczODE0QjdCMDkwN0ZDOTkwMEM0NzhGQyAvKiBsc3AuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjJFMDkwN0ZDOTkwMEM0NzhGQyAvKiBsc3AuYyAqLzsgfTsKKwkJNzM4MTRCODAwOTA3RkM5OTAwQzQ3OEZDIC8qIGx0cC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCMzMwOTA3RkM5OTAwQzQ3OEZDIC8qIGx0cC5jICovOyB9OworCQk3MzgxNEI4NDA5MDdGQzk5MDBDNDc4RkMgLyogbWF0aF9hcHByb3guYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjM3MDkwN0ZDOTkwMEM0NzhGQyAvKiBtYXRoX2FwcHJveC5jICovOyB9OworCQk3MzgxNEI4ODA5MDdGQzk5MDBDNDc4RkMgLyogbWlzYy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCM0IwOTA3RkM5OTAwQzQ3OEZDIC8qIG1pc2MuYyAqLzsgfTsKKwkJNzM4MTRCOEEwOTA3RkM5OTAwQzQ3OEZDIC8qIG1vZGVzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEIzRDA5MDdGQzk5MDBDNDc4RkMgLyogbW9kZXMuYyAqLzsgfTsKKwkJNzM4MTRCOEMwOTA3RkM5OTAwQzQ3OEZDIC8qIG5iX2NlbHAuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjNGMDkwN0ZDOTkwMEM0NzhGQyAvKiBuYl9jZWxwLmMgKi87IH07CisJCTczODE0QjhFMDkwN0ZDOTkwMEM0NzhGQyAvKiBwcmVwcm9jZXNzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEI0MTA5MDdGQzk5MDBDNDc4RkMgLyogcHJlcHJvY2Vzcy5jICovOyB9OworCQk3MzgxNEI4RjA5MDdGQzk5MDBDNDc4RkMgLyogcXVhbnRfbHNwLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEI0MjA5MDdGQzk5MDBDNDc4RkMgLyogcXVhbnRfbHNwLmMgKi87IH07CisJCTczODE0QjkxMDkwN0ZDOTkwMEM0NzhGQyAvKiBzYl9jZWxwLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEI0NDA5MDdGQzk5MDBDNDc4RkMgLyogc2JfY2VscC5jICovOyB9OworCQk3MzgxNEI5MzA5MDdGQzk5MDBDNDc4RkMgLyogc21hbGxmdC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCNDYwOTA3RkM5OTAwQzQ3OEZDIC8qIHNtYWxsZnQuYyAqLzsgfTsKKwkJNzM4MTRCOTUwOTA3RkM5OTAwQzQ3OEZDIC8qIHNwZWV4X2NhbGxiYWNrcy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCNDgwOTA3RkM5OTAwQzQ3OEZDIC8qIHNwZWV4X2NhbGxiYWNrcy5jICovOyB9OworCQk3MzgxNEI5NjA5MDdGQzk5MDBDNDc4RkMgLyogc3BlZXhfaGVhZGVyLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzgxNEI0OTA5MDdGQzk5MDBDNDc4RkMgLyogc3BlZXhfaGVhZGVyLmMgKi87IH07CisJCTczODE0Qjk3MDkwN0ZDOTkwMEM0NzhGQyAvKiBzcGVleC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCNEEwOTA3RkM5OTAwQzQ3OEZDIC8qIHNwZWV4LmMgKi87IH07CisJCTczODE0Qjk5MDkwN0ZDOTkwMEM0NzhGQyAvKiBzdGVyZW8uYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjRDMDkwN0ZDOTkwMEM0NzhGQyAvKiBzdGVyZW8uYyAqLzsgfTsKKwkJNzM4MTRCOUYwOTA3RkM5OTAwQzQ3OEZDIC8qIHZici5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM4MTRCNTIwOTA3RkM5OTAwQzQ3OEZDIC8qIHZici5jICovOyB9OworCQk3MzgxNEJBNDA5MDdGQzk5MDBDNDc4RkMgLyogdnEuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczODE0QjU3MDkwN0ZDOTkwMEM0NzhGQyAvKiB2cS5jICovOyB9OworCQk4RDA3RjJDMDA0ODZDQzdBMDA3Q0QxRDAgLyogSW5mb1BsaXN0LnN0cmluZ3MgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4OUMxNjY2RkU4NDExNThDMDJBQUMwNyAvKiBJbmZvUGxpc3Quc3RyaW5ncyAqLzsgfTsKKy8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhCdWlsZFN0eWxlIHNlY3Rpb24gKi8KKwkJNEYwQkI3RUMwMTFGNDBFOTA0Q0EwRTUwIC8qIERldmVsb3BtZW50ICovID0geworCQkJaXNhID0gUEJYQnVpbGRTdHlsZTsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POworCQkJCUdDQ19EWU5BTUlDX05PX1BJQyA9IE5POworCQkJCUdDQ19FTkFCTEVfRklYX0FORF9DT05USU5VRSA9IFlFUzsKKwkJCQlHQ0NfR0VORVJBVEVfREVCVUdHSU5HX1NZTUJPTFMgPSBZRVM7CisJCQkJR0NDX09QVElNSVpBVElPTl9MRVZFTCA9IDA7CisJCQkJWkVST19MSU5LID0gWUVTOworCQkJfTsKKwkJCW5hbWUgPSBEZXZlbG9wbWVudDsKKwkJfTsKKwkJNEYwQkI3RUQwMTFGNDBFOTA0Q0EwRTUwIC8qIERlcGxveW1lbnQgKi8gPSB7CisJCQlpc2EgPSBQQlhCdWlsZFN0eWxlOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gWUVTOworCQkJCUdDQ19FTkFCTEVfRklYX0FORF9DT05USU5VRSA9IE5POworCQkJCVpFUk9fTElOSyA9IE5POworCQkJfTsKKwkJCW5hbWUgPSBEZXBsb3ltZW50OworCQl9OworLyogRW5kIFBCWEJ1aWxkU3R5bGUgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKwkJMDg5QzE2NjdGRTg0MTE1OEMwMkFBQzA3IC8qIEVuZ2xpc2ggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMTA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC5zdHJpbmdzOyBuYW1lID0gRW5nbGlzaDsgcGF0aCA9IEVuZ2xpc2gubHByb2ovSW5mb1BsaXN0LnN0cmluZ3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMyQkFFMEI3MDM3MUE3NEIwMEM5MTc4MyAvKiBTcGVleF9QcmVmaXgucGNoICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVleF9QcmVmaXgucGNoOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MzgxNEFFRjA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNwZWV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTczODE0QUYwMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9iaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzcGVleF9iaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTczODE0QUYxMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9jYWxsYmFja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNwZWV4X2NhbGxiYWNrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MzgxNEFGMzA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfZWNoby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc3BlZXhfZWNoby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MzgxNEFGNDA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfaGVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzcGVleF9oZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzM4MTRBRjUwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X2ppdHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc3BlZXhfaml0dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTczODE0QUY2MDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9wcmVwcm9jZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzcGVleF9wcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTczODE0QUY3MDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9zdGVyZW8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNwZWV4X3N0ZXJlby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MzgxNEFGODA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfdHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNwZWV4X3R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTczODE0QjBDMDkwN0ZDOTkwMEM0NzhGQyAvKiBhcmNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBhcmNoLmg7IHBhdGggPSAuLi9saWJzcGVleC9hcmNoLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMEQwOTA3RkM5OTAwQzQ3OEZDIC8qIGJpdHMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGJpdHMuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2JpdHMuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIwRTA5MDdGQzk5MDBDNDc4RkMgLyogY2Jfc2VhcmNoX2FybTQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGNiX3NlYXJjaF9hcm00Lmg7IHBhdGggPSAuLi9saWJzcGVleC9jYl9zZWFyY2hfYXJtNC5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjBGMDkwN0ZDOTkwMEM0NzhGQyAvKiBjYl9zZWFyY2hfYmZpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gY2Jfc2VhcmNoX2JmaW4uaDsgcGF0aCA9IC4uL2xpYnNwZWV4L2NiX3NlYXJjaF9iZmluLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMTAwOTA3RkM5OTAwQzQ3OEZDIC8qIGNiX3NlYXJjaF9zc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGNiX3NlYXJjaF9zc2UuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L2NiX3NlYXJjaF9zc2UuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIxMTA5MDdGQzk5MDBDNDc4RkMgLyogY2Jfc2VhcmNoLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBjYl9zZWFyY2guYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2NiX3NlYXJjaC5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjEyMDkwN0ZDOTkwMEM0NzhGQyAvKiBjYl9zZWFyY2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGNiX3NlYXJjaC5oOyBwYXRoID0gLi4vbGlic3BlZXgvY2Jfc2VhcmNoLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMTMwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y181XzY0X3RhYmxlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBleGNfNV82NF90YWJsZS5jOyBwYXRoID0gLi4vbGlic3BlZXgvZXhjXzVfNjRfdGFibGUuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIxNDA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzVfMjU2X3RhYmxlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBleGNfNV8yNTZfdGFibGUuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2V4Y181XzI1Nl90YWJsZS5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjE1MDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfOF8xMjhfdGFibGUuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGV4Y184XzEyOF90YWJsZS5jOyBwYXRoID0gLi4vbGlic3BlZXgvZXhjXzhfMTI4X3RhYmxlLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMTYwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y18xMF8xNl90YWJsZS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gZXhjXzEwXzE2X3RhYmxlLmM7IHBhdGggPSAuLi9saWJzcGVleC9leGNfMTBfMTZfdGFibGUuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIxNzA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzEwXzMyX3RhYmxlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBleGNfMTBfMzJfdGFibGUuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2V4Y18xMF8zMl90YWJsZS5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjE4MDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfMjBfMzJfdGFibGUuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGV4Y18yMF8zMl90YWJsZS5jOyBwYXRoID0gLi4vbGlic3BlZXgvZXhjXzIwXzMyX3RhYmxlLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMTkwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpbHRlcnNfYXJtNC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZmlsdGVyc19hcm00Lmg7IHBhdGggPSAuLi9saWJzcGVleC9maWx0ZXJzX2FybTQuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIxQTA5MDdGQzk5MDBDNDc4RkMgLyogZmlsdGVyc19iZmluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBmaWx0ZXJzX2JmaW4uaDsgcGF0aCA9IC4uL2xpYnNwZWV4L2ZpbHRlcnNfYmZpbi5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjFCMDkwN0ZDOTkwMEM0NzhGQyAvKiBmaWx0ZXJzX3NzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZmlsdGVyc19zc2UuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L2ZpbHRlcnNfc3NlLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMUMwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpbHRlcnMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGZpbHRlcnMuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2ZpbHRlcnMuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIxRDA5MDdGQzk5MDBDNDc4RkMgLyogZmlsdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZmlsdGVycy5oOyBwYXRoID0gLi4vbGlic3BlZXgvZmlsdGVycy5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjFFMDkwN0ZDOTkwMEM0NzhGQyAvKiBmaXhlZF9hcm00LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBmaXhlZF9hcm00Lmg7IHBhdGggPSAuLi9saWJzcGVleC9maXhlZF9hcm00Lmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMUYwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpeGVkX2FybTVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBmaXhlZF9hcm01ZS5oOyBwYXRoID0gLi4vbGlic3BlZXgvZml4ZWRfYXJtNWUuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIyMDA5MDdGQzk5MDBDNDc4RkMgLyogZml4ZWRfYmZpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZml4ZWRfYmZpbi5oOyBwYXRoID0gLi4vbGlic3BlZXgvZml4ZWRfYmZpbi5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjIxMDkwN0ZDOTkwMEM0NzhGQyAvKiBmaXhlZF9kZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZml4ZWRfZGVidWcuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L2ZpeGVkX2RlYnVnLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMjIwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpeGVkX2dlbmVyaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGZpeGVkX2dlbmVyaWMuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L2ZpeGVkX2dlbmVyaWMuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIyMzA5MDdGQzk5MDBDNDc4RkMgLyogZ2Fpbl90YWJsZV9sYnIuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGdhaW5fdGFibGVfbGJyLmM7IHBhdGggPSAuLi9saWJzcGVleC9nYWluX3RhYmxlX2xici5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjI0MDkwN0ZDOTkwMEM0NzhGQyAvKiBnYWluX3RhYmxlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBnYWluX3RhYmxlLmM7IHBhdGggPSAuLi9saWJzcGVleC9nYWluX3RhYmxlLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMjUwOTA3RkM5OTAwQzQ3OEZDIC8qIGhleGNfMTBfMzJfdGFibGUuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGhleGNfMTBfMzJfdGFibGUuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L2hleGNfMTBfMzJfdGFibGUuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIyNjA5MDdGQzk5MDBDNDc4RkMgLyogaGV4Y190YWJsZS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gaGV4Y190YWJsZS5jOyBwYXRoID0gLi4vbGlic3BlZXgvaGV4Y190YWJsZS5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjI3MDkwN0ZDOTkwMEM0NzhGQyAvKiBoaWdoX2xzcF90YWJsZXMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGhpZ2hfbHNwX3RhYmxlcy5jOyBwYXRoID0gLi4vbGlic3BlZXgvaGlnaF9sc3BfdGFibGVzLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMjgwOTA3RkM5OTAwQzQ3OEZDIC8qIGppdHRlci5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gaml0dGVyLmM7IHBhdGggPSAuLi9saWJzcGVleC9qaXR0ZXIuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIyOTA5MDdGQzk5MDBDNDc4RkMgLyogbGJyXzQ4a190YWJsZXMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGxicl80OGtfdGFibGVzLmM7IHBhdGggPSAuLi9saWJzcGVleC9sYnJfNDhrX3RhYmxlcy5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjJBMDkwN0ZDOTkwMEM0NzhGQyAvKiBscGNfYmZpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gbHBjX2JmaW4uaDsgcGF0aCA9IC4uL2xpYnNwZWV4L2xwY19iZmluLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMkIwOTA3RkM5OTAwQzQ3OEZDIC8qIGxwYy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gbHBjLmM7IHBhdGggPSAuLi9saWJzcGVleC9scGMuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIyQzA5MDdGQzk5MDBDNDc4RkMgLyogbHBjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBscGMuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L2xwYy5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjJEMDkwN0ZDOTkwMEM0NzhGQyAvKiBsc3BfdGFibGVzX25iLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBsc3BfdGFibGVzX25iLmM7IHBhdGggPSAuLi9saWJzcGVleC9sc3BfdGFibGVzX25iLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMkUwOTA3RkM5OTAwQzQ3OEZDIC8qIGxzcC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gbHNwLmM7IHBhdGggPSAuLi9saWJzcGVleC9sc3AuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIyRjA5MDdGQzk5MDBDNDc4RkMgLyogbHNwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBsc3AuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L2xzcC5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjMwMDkwN0ZDOTkwMEM0NzhGQyAvKiBsdHBfYXJtNC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gbHRwX2FybTQuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L2x0cF9hcm00Lmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMzEwOTA3RkM5OTAwQzQ3OEZDIC8qIGx0cF9iZmluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBsdHBfYmZpbi5oOyBwYXRoID0gLi4vbGlic3BlZXgvbHRwX2JmaW4uaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIzMjA5MDdGQzk5MDBDNDc4RkMgLyogbHRwX3NzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gbHRwX3NzZS5oOyBwYXRoID0gLi4vbGlic3BlZXgvbHRwX3NzZS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjMzMDkwN0ZDOTkwMEM0NzhGQyAvKiBsdHAuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGx0cC5jOyBwYXRoID0gLi4vbGlic3BlZXgvbHRwLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMzQwOTA3RkM5OTAwQzQ3OEZDIC8qIGx0cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gbHRwLmg7IHBhdGggPSAuLi9saWJzcGVleC9sdHAuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIzNzA5MDdGQzk5MDBDNDc4RkMgLyogbWF0aF9hcHByb3guYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IG1hdGhfYXBwcm94LmM7IHBhdGggPSAuLi9saWJzcGVleC9tYXRoX2FwcHJveC5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjM4MDkwN0ZDOTkwMEM0NzhGQyAvKiBtYXRoX2FwcHJveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gbWF0aF9hcHByb3guaDsgcGF0aCA9IC4uL2xpYnNwZWV4L21hdGhfYXBwcm94Lmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCMzkwOTA3RkM5OTAwQzQ3OEZDIC8qIG1kZi5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gbWRmLmM7IHBhdGggPSAuLi9saWJzcGVleC9tZGYuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIzQTA5MDdGQzk5MDBDNDc4RkMgLyogbWlzY19iZmluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBtaXNjX2JmaW4uaDsgcGF0aCA9IC4uL2xpYnNwZWV4L21pc2NfYmZpbi5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjNCMDkwN0ZDOTkwMEM0NzhGQyAvKiBtaXNjLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBtaXNjLmM7IHBhdGggPSAuLi9saWJzcGVleC9taXNjLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCM0MwOTA3RkM5OTAwQzQ3OEZDIC8qIG1pc2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IG1pc2MuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L21pc2MuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEIzRDA5MDdGQzk5MDBDNDc4RkMgLyogbW9kZXMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IG1vZGVzLmM7IHBhdGggPSAuLi9saWJzcGVleC9tb2Rlcy5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjNFMDkwN0ZDOTkwMEM0NzhGQyAvKiBtb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gbW9kZXMuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L21vZGVzLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCM0YwOTA3RkM5OTAwQzQ3OEZDIC8qIG5iX2NlbHAuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IG5iX2NlbHAuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L25iX2NlbHAuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI0MDA5MDdGQzk5MDBDNDc4RkMgLyogbmJfY2VscC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gbmJfY2VscC5oOyBwYXRoID0gLi4vbGlic3BlZXgvbmJfY2VscC5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjQxMDkwN0ZDOTkwMEM0NzhGQyAvKiBwcmVwcm9jZXNzLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBwcmVwcm9jZXNzLmM7IHBhdGggPSAuLi9saWJzcGVleC9wcmVwcm9jZXNzLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCNDIwOTA3RkM5OTAwQzQ3OEZDIC8qIHF1YW50X2xzcC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gcXVhbnRfbHNwLmM7IHBhdGggPSAuLi9saWJzcGVleC9xdWFudF9sc3AuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI0MzA5MDdGQzk5MDBDNDc4RkMgLyogcXVhbnRfbHNwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBxdWFudF9sc3AuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L3F1YW50X2xzcC5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjQ0MDkwN0ZDOTkwMEM0NzhGQyAvKiBzYl9jZWxwLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBzYl9jZWxwLmM7IHBhdGggPSAuLi9saWJzcGVleC9zYl9jZWxwLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCNDUwOTA3RkM5OTAwQzQ3OEZDIC8qIHNiX2NlbHAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHNiX2NlbHAuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L3NiX2NlbHAuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI0NjA5MDdGQzk5MDBDNDc4RkMgLyogc21hbGxmdC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gc21hbGxmdC5jOyBwYXRoID0gLi4vbGlic3BlZXgvc21hbGxmdC5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjQ3MDkwN0ZDOTkwMEM0NzhGQyAvKiBzbWFsbGZ0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBzbWFsbGZ0Lmg7IHBhdGggPSAuLi9saWJzcGVleC9zbWFsbGZ0Lmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCNDgwOTA3RkM5OTAwQzQ3OEZDIC8qIHNwZWV4X2NhbGxiYWNrcy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gc3BlZXhfY2FsbGJhY2tzLmM7IHBhdGggPSAuLi9saWJzcGVleC9zcGVleF9jYWxsYmFja3MuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI0OTA5MDdGQzk5MDBDNDc4RkMgLyogc3BlZXhfaGVhZGVyLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBzcGVleF9oZWFkZXIuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L3NwZWV4X2hlYWRlci5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjRBMDkwN0ZDOTkwMEM0NzhGQyAvKiBzcGVleC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gc3BlZXguYzsgcGF0aCA9IC4uL2xpYnNwZWV4L3NwZWV4LmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCNEIwOTA3RkM5OTAwQzQ3OEZDIC8qIHN0YWNrX2FsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBzdGFja19hbGxvYy5oOyBwYXRoID0gLi4vbGlic3BlZXgvc3RhY2tfYWxsb2MuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI0QzA5MDdGQzk5MDBDNDc4RkMgLyogc3RlcmVvLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBzdGVyZW8uYzsgcGF0aCA9IC4uL2xpYnNwZWV4L3N0ZXJlby5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjREMDkwN0ZDOTkwMEM0NzhGQyAvKiB0ZXN0ZGVub2lzZS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gdGVzdGRlbm9pc2UuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L3Rlc3RkZW5vaXNlLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCNEUwOTA3RkM5OTAwQzQ3OEZDIC8qIHRlc3RlY2hvLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB0ZXN0ZWNoby5jOyBwYXRoID0gLi4vbGlic3BlZXgvdGVzdGVjaG8uYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI0RjA5MDdGQzk5MDBDNDc4RkMgLyogdGVzdGVuY191d2IuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHRlc3RlbmNfdXdiLmM7IHBhdGggPSAuLi9saWJzcGVleC90ZXN0ZW5jX3V3Yi5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjUwMDkwN0ZDOTkwMEM0NzhGQyAvKiB0ZXN0ZW5jX3diLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB0ZXN0ZW5jX3diLmM7IHBhdGggPSAuLi9saWJzcGVleC90ZXN0ZW5jX3diLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCNTEwOTA3RkM5OTAwQzQ3OEZDIC8qIHRlc3RlbmMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHRlc3RlbmMuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L3Rlc3RlbmMuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI1MjA5MDdGQzk5MDBDNDc4RkMgLyogdmJyLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB2YnIuYzsgcGF0aCA9IC4uL2xpYnNwZWV4L3Zici5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjUzMDkwN0ZDOTkwMEM0NzhGQyAvKiB2YnIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHZici5oOyBwYXRoID0gLi4vbGlic3BlZXgvdmJyLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCNTQwOTA3RkM5OTAwQzQ3OEZDIC8qIHZxX2FybTQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHZxX2FybTQuaDsgcGF0aCA9IC4uL2xpYnNwZWV4L3ZxX2FybTQuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI1NTA5MDdGQzk5MDBDNDc4RkMgLyogdnFfYmZpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gdnFfYmZpbi5oOyBwYXRoID0gLi4vbGlic3BlZXgvdnFfYmZpbi5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTczODE0QjU2MDkwN0ZDOTkwMEM0NzhGQyAvKiB2cV9zc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHZxX3NzZS5oOyBwYXRoID0gLi4vbGlic3BlZXgvdnFfc3NlLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNzM4MTRCNTcwOTA3RkM5OTAwQzQ3OEZDIC8qIHZxLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB2cS5jOyBwYXRoID0gLi4vbGlic3BlZXgvdnEuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3MzgxNEI1ODA5MDdGQzk5MDBDNDc4RkMgLyogdnEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHZxLmg7IHBhdGggPSAuLi9saWJzcGVleC92cS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCThEMDdGMkM3MDQ4NkNDN0EwMDdDRDFEMCAvKiBJbmZvLnBsaXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdDsgcGF0aCA9IEluZm8ucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCThEMDdGMkM4MDQ4NkNDN0EwMDdDRDFEMCAvKiBTcGVleC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBTcGVleC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJOEQwN0YyQzMwNDg2Q0M3QTAwN0NEMUQwIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEdyb3VwIHNlY3Rpb24gKi8KKwkJMDM0NzY4RERGRjM4QTQ1QTExREI5QzhCIC8qIFByb2R1Y3RzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk4RDA3RjJDODA0ODZDQzdBMDA3Q0QxRDAgLyogU3BlZXguZnJhbWV3b3JrICovLAorCQkJKTsKKwkJCW5hbWUgPSBQcm9kdWN0czsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTA4NjdENjkxRkU4NDAyOEZDMDJBQUMwNyAvKiBTcGVleCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMDhGQjc3QUNGRTg0MTcwN0MwMkFBQzA3IC8qIFNvdXJjZSAqLywKKwkJCQk3MzgxNEFFQjA5MDdGQjY0MDBDNDc4RkMgLyogSGVhZGVycyAqLywKKwkJCQkwODlDMTY2NUZFODQxMTU4QzAyQUFDMDcgLyogUmVzb3VyY2VzICovLAorCQkJCTA4NjdENjlBRkU4NDAyOEZDMDJBQUMwNyAvKiBFeHRlcm5hbCBGcmFtZXdvcmtzIGFuZCBMaWJyYXJpZXMgKi8sCisJCQkJMDM0NzY4RERGRjM4QTQ1QTExREI5QzhCIC8qIFByb2R1Y3RzICovLAorCQkJKTsKKwkJCW5hbWUgPSBTcGVleDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTA4NjdENjlBRkU4NDAyOEZDMDJBQUMwNyAvKiBFeHRlcm5hbCBGcmFtZXdvcmtzIGFuZCBMaWJyYXJpZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJKTsKKwkJCW5hbWUgPSAiRXh0ZXJuYWwgRnJhbWV3b3JrcyBhbmQgTGlicmFyaWVzIjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTA4OUMxNjY1RkU4NDExNThDMDJBQUMwNyAvKiBSZXNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCThEMDdGMkM3MDQ4NkNDN0EwMDdDRDFEMCAvKiBJbmZvLnBsaXN0ICovLAorCQkJCTA4OUMxNjY2RkU4NDExNThDMDJBQUMwNyAvKiBJbmZvUGxpc3Quc3RyaW5ncyAqLywKKwkJCSk7CisJCQluYW1lID0gUmVzb3VyY2VzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMDhGQjc3QUNGRTg0MTcwN0MwMkFBQzA3IC8qIFNvdXJjZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzM4MTRCMEMwOTA3RkM5OTAwQzQ3OEZDIC8qIGFyY2guaCAqLywKKwkJCQk3MzgxNEIwRDA5MDdGQzk5MDBDNDc4RkMgLyogYml0cy5jICovLAorCQkJCTczODE0QjBFMDkwN0ZDOTkwMEM0NzhGQyAvKiBjYl9zZWFyY2hfYXJtNC5oICovLAorCQkJCTczODE0QjBGMDkwN0ZDOTkwMEM0NzhGQyAvKiBjYl9zZWFyY2hfYmZpbi5oICovLAorCQkJCTczODE0QjEwMDkwN0ZDOTkwMEM0NzhGQyAvKiBjYl9zZWFyY2hfc3NlLmggKi8sCisJCQkJNzM4MTRCMTEwOTA3RkM5OTAwQzQ3OEZDIC8qIGNiX3NlYXJjaC5jICovLAorCQkJCTczODE0QjEyMDkwN0ZDOTkwMEM0NzhGQyAvKiBjYl9zZWFyY2guaCAqLywKKwkJCQk3MzgxNEIxMzA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzVfNjRfdGFibGUuYyAqLywKKwkJCQk3MzgxNEIxNDA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzVfMjU2X3RhYmxlLmMgKi8sCisJCQkJNzM4MTRCMTUwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y184XzEyOF90YWJsZS5jICovLAorCQkJCTczODE0QjE2MDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfMTBfMTZfdGFibGUuYyAqLywKKwkJCQk3MzgxNEIxNzA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzEwXzMyX3RhYmxlLmMgKi8sCisJCQkJNzM4MTRCMTgwOTA3RkM5OTAwQzQ3OEZDIC8qIGV4Y18yMF8zMl90YWJsZS5jICovLAorCQkJCTczODE0QjE5MDkwN0ZDOTkwMEM0NzhGQyAvKiBmaWx0ZXJzX2FybTQuaCAqLywKKwkJCQk3MzgxNEIxQTA5MDdGQzk5MDBDNDc4RkMgLyogZmlsdGVyc19iZmluLmggKi8sCisJCQkJNzM4MTRCMUIwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpbHRlcnNfc3NlLmggKi8sCisJCQkJNzM4MTRCMUMwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpbHRlcnMuYyAqLywKKwkJCQk3MzgxNEIxRDA5MDdGQzk5MDBDNDc4RkMgLyogZmlsdGVycy5oICovLAorCQkJCTczODE0QjFFMDkwN0ZDOTkwMEM0NzhGQyAvKiBmaXhlZF9hcm00LmggKi8sCisJCQkJNzM4MTRCMUYwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpeGVkX2FybTVlLmggKi8sCisJCQkJNzM4MTRCMjAwOTA3RkM5OTAwQzQ3OEZDIC8qIGZpeGVkX2JmaW4uaCAqLywKKwkJCQk3MzgxNEIyMTA5MDdGQzk5MDBDNDc4RkMgLyogZml4ZWRfZGVidWcuaCAqLywKKwkJCQk3MzgxNEIyMjA5MDdGQzk5MDBDNDc4RkMgLyogZml4ZWRfZ2VuZXJpYy5oICovLAorCQkJCTczODE0QjIzMDkwN0ZDOTkwMEM0NzhGQyAvKiBnYWluX3RhYmxlX2xici5jICovLAorCQkJCTczODE0QjI0MDkwN0ZDOTkwMEM0NzhGQyAvKiBnYWluX3RhYmxlLmMgKi8sCisJCQkJNzM4MTRCMjUwOTA3RkM5OTAwQzQ3OEZDIC8qIGhleGNfMTBfMzJfdGFibGUuYyAqLywKKwkJCQk3MzgxNEIyNjA5MDdGQzk5MDBDNDc4RkMgLyogaGV4Y190YWJsZS5jICovLAorCQkJCTczODE0QjI3MDkwN0ZDOTkwMEM0NzhGQyAvKiBoaWdoX2xzcF90YWJsZXMuYyAqLywKKwkJCQk3MzgxNEIyODA5MDdGQzk5MDBDNDc4RkMgLyogaml0dGVyLmMgKi8sCisJCQkJNzM4MTRCMjkwOTA3RkM5OTAwQzQ3OEZDIC8qIGxicl80OGtfdGFibGVzLmMgKi8sCisJCQkJNzM4MTRCMkEwOTA3RkM5OTAwQzQ3OEZDIC8qIGxwY19iZmluLmggKi8sCisJCQkJNzM4MTRCMkIwOTA3RkM5OTAwQzQ3OEZDIC8qIGxwYy5jICovLAorCQkJCTczODE0QjJDMDkwN0ZDOTkwMEM0NzhGQyAvKiBscGMuaCAqLywKKwkJCQk3MzgxNEIyRDA5MDdGQzk5MDBDNDc4RkMgLyogbHNwX3RhYmxlc19uYi5jICovLAorCQkJCTczODE0QjJFMDkwN0ZDOTkwMEM0NzhGQyAvKiBsc3AuYyAqLywKKwkJCQk3MzgxNEIyRjA5MDdGQzk5MDBDNDc4RkMgLyogbHNwLmggKi8sCisJCQkJNzM4MTRCMzAwOTA3RkM5OTAwQzQ3OEZDIC8qIGx0cF9hcm00LmggKi8sCisJCQkJNzM4MTRCMzEwOTA3RkM5OTAwQzQ3OEZDIC8qIGx0cF9iZmluLmggKi8sCisJCQkJNzM4MTRCMzIwOTA3RkM5OTAwQzQ3OEZDIC8qIGx0cF9zc2UuaCAqLywKKwkJCQk3MzgxNEIzMzA5MDdGQzk5MDBDNDc4RkMgLyogbHRwLmMgKi8sCisJCQkJNzM4MTRCMzQwOTA3RkM5OTAwQzQ3OEZDIC8qIGx0cC5oICovLAorCQkJCTczODE0QjM3MDkwN0ZDOTkwMEM0NzhGQyAvKiBtYXRoX2FwcHJveC5jICovLAorCQkJCTczODE0QjM4MDkwN0ZDOTkwMEM0NzhGQyAvKiBtYXRoX2FwcHJveC5oICovLAorCQkJCTczODE0QjM5MDkwN0ZDOTkwMEM0NzhGQyAvKiBtZGYuYyAqLywKKwkJCQk3MzgxNEIzQTA5MDdGQzk5MDBDNDc4RkMgLyogbWlzY19iZmluLmggKi8sCisJCQkJNzM4MTRCM0IwOTA3RkM5OTAwQzQ3OEZDIC8qIG1pc2MuYyAqLywKKwkJCQk3MzgxNEIzQzA5MDdGQzk5MDBDNDc4RkMgLyogbWlzYy5oICovLAorCQkJCTczODE0QjNEMDkwN0ZDOTkwMEM0NzhGQyAvKiBtb2Rlcy5jICovLAorCQkJCTczODE0QjNFMDkwN0ZDOTkwMEM0NzhGQyAvKiBtb2Rlcy5oICovLAorCQkJCTczODE0QjNGMDkwN0ZDOTkwMEM0NzhGQyAvKiBuYl9jZWxwLmMgKi8sCisJCQkJNzM4MTRCNDAwOTA3RkM5OTAwQzQ3OEZDIC8qIG5iX2NlbHAuaCAqLywKKwkJCQk3MzgxNEI0MTA5MDdGQzk5MDBDNDc4RkMgLyogcHJlcHJvY2Vzcy5jICovLAorCQkJCTczODE0QjQyMDkwN0ZDOTkwMEM0NzhGQyAvKiBxdWFudF9sc3AuYyAqLywKKwkJCQk3MzgxNEI0MzA5MDdGQzk5MDBDNDc4RkMgLyogcXVhbnRfbHNwLmggKi8sCisJCQkJNzM4MTRCNDQwOTA3RkM5OTAwQzQ3OEZDIC8qIHNiX2NlbHAuYyAqLywKKwkJCQk3MzgxNEI0NTA5MDdGQzk5MDBDNDc4RkMgLyogc2JfY2VscC5oICovLAorCQkJCTczODE0QjQ2MDkwN0ZDOTkwMEM0NzhGQyAvKiBzbWFsbGZ0LmMgKi8sCisJCQkJNzM4MTRCNDcwOTA3RkM5OTAwQzQ3OEZDIC8qIHNtYWxsZnQuaCAqLywKKwkJCQk3MzgxNEI0ODA5MDdGQzk5MDBDNDc4RkMgLyogc3BlZXhfY2FsbGJhY2tzLmMgKi8sCisJCQkJNzM4MTRCNDkwOTA3RkM5OTAwQzQ3OEZDIC8qIHNwZWV4X2hlYWRlci5jICovLAorCQkJCTczODE0QjRBMDkwN0ZDOTkwMEM0NzhGQyAvKiBzcGVleC5jICovLAorCQkJCTczODE0QjRCMDkwN0ZDOTkwMEM0NzhGQyAvKiBzdGFja19hbGxvYy5oICovLAorCQkJCTczODE0QjRDMDkwN0ZDOTkwMEM0NzhGQyAvKiBzdGVyZW8uYyAqLywKKwkJCQk3MzgxNEI0RDA5MDdGQzk5MDBDNDc4RkMgLyogdGVzdGRlbm9pc2UuYyAqLywKKwkJCQk3MzgxNEI0RTA5MDdGQzk5MDBDNDc4RkMgLyogdGVzdGVjaG8uYyAqLywKKwkJCQk3MzgxNEI0RjA5MDdGQzk5MDBDNDc4RkMgLyogdGVzdGVuY191d2IuYyAqLywKKwkJCQk3MzgxNEI1MDA5MDdGQzk5MDBDNDc4RkMgLyogdGVzdGVuY193Yi5jICovLAorCQkJCTczODE0QjUxMDkwN0ZDOTkwMEM0NzhGQyAvKiB0ZXN0ZW5jLmMgKi8sCisJCQkJNzM4MTRCNTIwOTA3RkM5OTAwQzQ3OEZDIC8qIHZici5jICovLAorCQkJCTczODE0QjUzMDkwN0ZDOTkwMEM0NzhGQyAvKiB2YnIuaCAqLywKKwkJCQk3MzgxNEI1NDA5MDdGQzk5MDBDNDc4RkMgLyogdnFfYXJtNC5oICovLAorCQkJCTczODE0QjU1MDkwN0ZDOTkwMEM0NzhGQyAvKiB2cV9iZmluLmggKi8sCisJCQkJNzM4MTRCNTYwOTA3RkM5OTAwQzQ3OEZDIC8qIHZxX3NzZS5oICovLAorCQkJCTczODE0QjU3MDkwN0ZDOTkwMEM0NzhGQyAvKiB2cS5jICovLAorCQkJCTczODE0QjU4MDkwN0ZDOTkwMEM0NzhGQyAvKiB2cS5oICovLAorCQkJCTMyQkFFMEI3MDM3MUE3NEIwMEM5MTc4MyAvKiBTcGVleF9QcmVmaXgucGNoICovLAorCQkJKTsKKwkJCW5hbWUgPSBTb3VyY2U7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk3MzgxNEFFQjA5MDdGQjY0MDBDNDc4RkMgLyogSGVhZGVycyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzM4MTRBRUMwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4ICovLAorCQkJKTsKKwkJCW5hbWUgPSBIZWFkZXJzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNzM4MTRBRUMwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MzgxNEFFRjA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXguaCAqLywKKwkJCQk3MzgxNEFGMDA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfYml0cy5oICovLAorCQkJCTczODE0QUYxMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9jYWxsYmFja3MuaCAqLywKKwkJCQk3MzgxNEFGMzA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfZWNoby5oICovLAorCQkJCTczODE0QUY0MDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9oZWFkZXIuaCAqLywKKwkJCQk3MzgxNEFGNTA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfaml0dGVyLmggKi8sCisJCQkJNzM4MTRBRjYwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X3ByZXByb2Nlc3MuaCAqLywKKwkJCQk3MzgxNEFGNzA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfc3RlcmVvLmggKi8sCisJCQkJNzM4MTRBRjgwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X3R5cGVzLmggKi8sCisJCQkpOworCQkJbmFtZSA9IHNwZWV4OworCQkJcGF0aCA9IC4uL2luY2x1ZGUvc3BlZXg7CisJCQlzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7CisJCX07CisvKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCThEMDdGMkJEMDQ4NkNDN0EwMDdDRDFEMCAvKiBIZWFkZXJzICovID0geworCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJNzM4MTRBRkYwOTA3RkI4MjAwQzQ3OEZDIC8qIHNwZWV4X2VjaG8uaCBpbiBIZWFkZXJzICovLAorCQkJCTczODE0QjAwMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9oZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTczODE0QjAxMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9qaXR0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTczODE0QjAyMDkwN0ZCODIwMEM0NzhGQyAvKiBzcGVleF9wcmVwcm9jZXNzLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MzgxNEIwMzA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfc3RlcmVvLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MzgxNEIwNDA5MDdGQjgyMDBDNDc4RkMgLyogc3BlZXhfdHlwZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTczODE0QjA2MDkwN0ZCQUIwMEM0NzhGQyAvKiBzcGVleF9jYWxsYmFja3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTczODE0QjA3MDkwN0ZCQUQwMEM0NzhGQyAvKiBzcGVleF9iaXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MzgxNEIwODA5MDdGQkFFMDBDNDc4RkMgLyogc3BlZXguaCBpbiBIZWFkZXJzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWEhlYWRlcnNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KKwkJOEQwN0YyQkMwNDg2Q0M3QTAwN0NEMUQwIC8qIFNwZWV4ICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDczODE0QURGMDkwN0ZCMUUwMEM0NzhGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiU3BlZXgiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJOEQwN0YyQkQwNDg2Q0M3QTAwN0NEMUQwIC8qIEhlYWRlcnMgKi8sCisJCQkJOEQwN0YyQkYwNDg2Q0M3QTAwN0NEMUQwIC8qIFJlc291cmNlcyAqLywKKwkJCQk4RDA3RjJDMTA0ODZDQzdBMDA3Q0QxRDAgLyogU291cmNlcyAqLywKKwkJCQk4RDA3RjJDMzA0ODZDQzdBMDA3Q0QxRDAgLyogRnJhbWV3b3JrcyAqLywKKwkJCQk4RDA3RjJDNTA0ODZDQzdBMDA3Q0QxRDAgLyogUmV6ICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlEWUxJQl9DT01QQVRJQklMSVRZX1ZFUlNJT04gPSAxOworCQkJCURZTElCX0NVUlJFTlRfVkVSU0lPTiA9IDE7CisJCQkJRlJBTUVXT1JLX1ZFUlNJT04gPSBBOworCQkJCUdDQ19HRU5FUkFURV9ERUJVR0dJTkdfU1lNQk9MUyA9IE5POworCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVM7CisJCQkJR0NDX1BSRUZJWF9IRUFERVIgPSBTcGVleF9QcmVmaXgucGNoOworCQkJCUlORk9QTElTVF9GSUxFID0gSW5mby5wbGlzdDsKKwkJCQlJTlNUQUxMX1BBVEggPSAiJChIT01FKS9MaWJyYXJ5L0ZyYW1ld29ya3MiOworCQkJCUxJQlJBUllfU1RZTEUgPSBEWU5BTUlDOworCQkJCVBST0RVQ1RfTkFNRSA9IFNwZWV4OworCQkJCVdSQVBQRVJfRVhURU5TSU9OID0gZnJhbWV3b3JrOworCQkJfTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCSk7CisJCQluYW1lID0gU3BlZXg7CisJCQlwcm9kdWN0SW5zdGFsbFBhdGggPSAiJChIT01FKS9MaWJyYXJ5L0ZyYW1ld29ya3MiOworCQkJcHJvZHVjdE5hbWUgPSBTcGVleDsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSA4RDA3RjJDODA0ODZDQzdBMDA3Q0QxRDAgLyogU3BlZXguZnJhbWV3b3JrICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5mcmFtZXdvcmsiOworCQl9OworLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLworCQkwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CisJCQlpc2EgPSBQQlhQcm9qZWN0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDczODE0QUUzMDkwN0ZCMUUwMEM0NzhGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIlNwZWV4X1VCIiAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQl9OworCQkJYnVpbGRTdHlsZXMgPSAoCisJCQkJNEYwQkI3RUMwMTFGNDBFOTA0Q0EwRTUwIC8qIERldmVsb3BtZW50ICovLAorCQkJCTRGMEJCN0VEMDExRjQwRTkwNENBMEU1MCAvKiBEZXBsb3ltZW50ICovLAorCQkJKTsKKwkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOworCQkJbWFpbkdyb3VwID0gMDg2N0Q2OTFGRTg0MDI4RkMwMkFBQzA3IC8qIFNwZWV4ICovOworCQkJcHJvZHVjdFJlZkdyb3VwID0gMDM0NzY4RERGRjM4QTQ1QTExREI5QzhCIC8qIFByb2R1Y3RzICovOworCQkJcHJvamVjdERpclBhdGggPSAiIjsKKwkJCXRhcmdldHMgPSAoCisJCQkJOEQwN0YyQkMwNDg2Q0M3QTAwN0NEMUQwIC8qIFNwZWV4ICovLAorCQkJKTsKKwkJfTsKKy8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYUmVzb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCThEMDdGMkJGMDQ4NkNDN0EwMDdDRDFEMCAvKiBSZXNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCThEMDdGMkMwMDQ4NkNDN0EwMDdDRDFEMCAvKiBJbmZvUGxpc3Quc3RyaW5ncyBpbiBSZXNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisvKiBFbmQgUEJYUmVzb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWFJlekJ1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQk4RDA3RjJDNTA0ODZDQzdBMDA3Q0QxRDAgLyogUmV6ICovID0geworCQkJaXNhID0gUEJYUmV6QnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhSZXpCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQk4RDA3RjJDMTA0ODZDQzdBMDA3Q0QxRDAgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTczODE0QjVBMDkwN0ZDOTkwMEM0NzhGQyAvKiBiaXRzLmMgaW4gU291cmNlcyAqLywKKwkJCQk3MzgxNEI1RTA5MDdGQzk5MDBDNDc4RkMgLyogY2Jfc2VhcmNoLmMgaW4gU291cmNlcyAqLywKKwkJCQk3MzgxNEI2MDA5MDdGQzk5MDBDNDc4RkMgLyogZXhjXzVfNjRfdGFibGUuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjYxMDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfNV8yNTZfdGFibGUuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjYyMDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfOF8xMjhfdGFibGUuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjYzMDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfMTBfMTZfdGFibGUuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjY0MDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfMTBfMzJfdGFibGUuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjY1MDkwN0ZDOTkwMEM0NzhGQyAvKiBleGNfMjBfMzJfdGFibGUuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjY5MDkwN0ZDOTkwMEM0NzhGQyAvKiBmaWx0ZXJzLmMgaW4gU291cmNlcyAqLywKKwkJCQk3MzgxNEI3MDA5MDdGQzk5MDBDNDc4RkMgLyogZ2Fpbl90YWJsZV9sYnIuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjcxMDkwN0ZDOTkwMEM0NzhGQyAvKiBnYWluX3RhYmxlLmMgaW4gU291cmNlcyAqLywKKwkJCQk3MzgxNEI3MjA5MDdGQzk5MDBDNDc4RkMgLyogaGV4Y18xMF8zMl90YWJsZS5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCNzMwOTA3RkM5OTAwQzQ3OEZDIC8qIGhleGNfdGFibGUuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0Qjc0MDkwN0ZDOTkwMEM0NzhGQyAvKiBoaWdoX2xzcF90YWJsZXMuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0Qjc1MDkwN0ZDOTkwMEM0NzhGQyAvKiBqaXR0ZXIuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0Qjc2MDkwN0ZDOTkwMEM0NzhGQyAvKiBsYnJfNDhrX3RhYmxlcy5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCNzgwOTA3RkM5OTAwQzQ3OEZDIC8qIGxwYy5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCN0EwOTA3RkM5OTAwQzQ3OEZDIC8qIGxzcF90YWJsZXNfbmIuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjdCMDkwN0ZDOTkwMEM0NzhGQyAvKiBsc3AuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjgwMDkwN0ZDOTkwMEM0NzhGQyAvKiBsdHAuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0Qjg0MDkwN0ZDOTkwMEM0NzhGQyAvKiBtYXRoX2FwcHJveC5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCODgwOTA3RkM5OTAwQzQ3OEZDIC8qIG1pc2MuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjhBMDkwN0ZDOTkwMEM0NzhGQyAvKiBtb2Rlcy5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCOEMwOTA3RkM5OTAwQzQ3OEZDIC8qIG5iX2NlbHAuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0QjhFMDkwN0ZDOTkwMEM0NzhGQyAvKiBwcmVwcm9jZXNzLmMgaW4gU291cmNlcyAqLywKKwkJCQk3MzgxNEI4RjA5MDdGQzk5MDBDNDc4RkMgLyogcXVhbnRfbHNwLmMgaW4gU291cmNlcyAqLywKKwkJCQk3MzgxNEI5MTA5MDdGQzk5MDBDNDc4RkMgLyogc2JfY2VscC5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCOTMwOTA3RkM5OTAwQzQ3OEZDIC8qIHNtYWxsZnQuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0Qjk1MDkwN0ZDOTkwMEM0NzhGQyAvKiBzcGVleF9jYWxsYmFja3MuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0Qjk2MDkwN0ZDOTkwMEM0NzhGQyAvKiBzcGVleF9oZWFkZXIuYyBpbiBTb3VyY2VzICovLAorCQkJCTczODE0Qjk3MDkwN0ZDOTkwMEM0NzhGQyAvKiBzcGVleC5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCOTkwOTA3RkM5OTAwQzQ3OEZDIC8qIHN0ZXJlby5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCOUYwOTA3RkM5OTAwQzQ3OEZDIC8qIHZici5jIGluIFNvdXJjZXMgKi8sCisJCQkJNzM4MTRCQTQwOTA3RkM5OTAwQzQ3OEZDIC8qIHZxLmMgaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWFZhcmlhbnRHcm91cCBzZWN0aW9uICovCisJCTA4OUMxNjY2RkU4NDExNThDMDJBQUMwNyAvKiBJbmZvUGxpc3Quc3RyaW5ncyAqLyA9IHsKKwkJCWlzYSA9IFBCWFZhcmlhbnRHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTA4OUMxNjY3RkU4NDExNThDMDJBQUMwNyAvKiBFbmdsaXNoICovLAorCQkJKTsKKwkJCW5hbWUgPSBJbmZvUGxpc3Quc3RyaW5nczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisvKiBFbmQgUEJYVmFyaWFudEdyb3VwIHNlY3Rpb24gKi8KKworLyogQmVnaW4gWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLworCQk3MzgxNEFFMDA5MDdGQjFFMDBDNDc4RkMgLyogRGV2ZWxvcG1lbnQgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POworCQkJCURZTElCX0NPTVBBVElCSUxJVFlfVkVSU0lPTiA9IDE7CisJCQkJRFlMSUJfQ1VSUkVOVF9WRVJTSU9OID0gMTsKKwkJCQlGUkFNRVdPUktfVkVSU0lPTiA9IEE7CisJCQkJR0NDX0RZTkFNSUNfTk9fUElDID0gTk87CisJCQkJR0NDX0VOQUJMRV9GSVhfQU5EX0NPTlRJTlVFID0gWUVTOworCQkJCUdDQ19HRU5FUkFURV9ERUJVR0dJTkdfU1lNQk9MUyA9IFlFUzsKKwkJCQlHQ0NfT1BUSU1JWkFUSU9OX0xFVkVMID0gMDsKKwkJCQlHQ0NfUFJFQ09NUElMRV9QUkVGSVhfSEVBREVSID0gWUVTOworCQkJCUdDQ19QUkVGSVhfSEVBREVSID0gU3BlZXhfUHJlZml4LnBjaDsKKwkJCQlJTkZPUExJU1RfRklMRSA9IEluZm8ucGxpc3Q7CisJCQkJSU5TVEFMTF9QQVRIID0gL0xpYnJhcnkvRnJhbWV3b3JrczsKKwkJCQlMSUJSQVJZX1NUWUxFID0gRFlOQU1JQzsKKwkJCQlNQUNIX09fVFlQRSA9IG1oX2R5bGliOworCQkJCVBST0RVQ1RfTkFNRSA9IFNwZWV4OworCQkJCVdSQVBQRVJfRVhURU5TSU9OID0gZnJhbWV3b3JrOworCQkJCVpFUk9fTElOSyA9IFlFUzsKKwkJCX07CisJCQluYW1lID0gRGV2ZWxvcG1lbnQ7CisJCX07CisJCTczODE0QUUxMDkwN0ZCMUUwMEM0NzhGQyAvKiBEZXBsb3ltZW50ICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZRVM7CisJCQkJRFlMSUJfQ09NUEFUSUJJTElUWV9WRVJTSU9OID0gMTsKKwkJCQlEWUxJQl9DVVJSRU5UX1ZFUlNJT04gPSAxOworCQkJCUZSQU1FV09SS19WRVJTSU9OID0gQTsKKwkJCQlHQ0NfRU5BQkxFX0ZJWF9BTkRfQ09OVElOVUUgPSBOTzsKKwkJCQlHQ0NfR0VORVJBVEVfREVCVUdHSU5HX1NZTUJPTFMgPSBOTzsKKwkJCQlHQ0NfUFJFQ09NUElMRV9QUkVGSVhfSEVBREVSID0gWUVTOworCQkJCUdDQ19QUkVGSVhfSEVBREVSID0gU3BlZXhfUHJlZml4LnBjaDsKKwkJCQlJTkZPUExJU1RfRklMRSA9IEluZm8ucGxpc3Q7CisJCQkJSU5TVEFMTF9QQVRIID0gL0xpYnJhcnkvRnJhbWV3b3JrczsKKwkJCQlMSUJSQVJZX1NUWUxFID0gRFlOQU1JQzsKKwkJCQlNQUNIX09fVFlQRSA9IG1oX2R5bGliOworCQkJCVBST0RVQ1RfTkFNRSA9IFNwZWV4OworCQkJCVdSQVBQRVJfRVhURU5TSU9OID0gZnJhbWV3b3JrOworCQkJCVpFUk9fTElOSyA9IE5POworCQkJfTsKKwkJCW5hbWUgPSBEZXBsb3ltZW50OworCQl9OworCQk3MzgxNEFFMjA5MDdGQjFFMDBDNDc4RkMgLyogRGVmYXVsdCAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlEWUxJQl9DT01QQVRJQklMSVRZX1ZFUlNJT04gPSAxOworCQkJCURZTElCX0NVUlJFTlRfVkVSU0lPTiA9IDE7CisJCQkJRlJBTUVXT1JLX1ZFUlNJT04gPSBBOworCQkJCUdDQ19HRU5FUkFURV9ERUJVR0dJTkdfU1lNQk9MUyA9IE5POworCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVM7CisJCQkJR0NDX1BSRUZJWF9IRUFERVIgPSBTcGVleF9QcmVmaXgucGNoOworCQkJCUlORk9QTElTVF9GSUxFID0gSW5mby5wbGlzdDsKKwkJCQlJTlNUQUxMX1BBVEggPSAvTGlicmFyeS9GcmFtZXdvcmtzOworCQkJCUxJQlJBUllfU1RZTEUgPSBEWU5BTUlDOworCQkJCU1BQ0hfT19UWVBFID0gbWhfZHlsaWI7CisJCQkJUFJPRFVDVF9OQU1FID0gU3BlZXg7CisJCQkJV1JBUFBFUl9FWFRFTlNJT04gPSBmcmFtZXdvcms7CisJCQl9OworCQkJbmFtZSA9IERlZmF1bHQ7CisJCX07CisJCTczODE0QUU0MDkwN0ZCMUUwMEM0NzhGQyAvKiBEZXZlbG9wbWVudCAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlBUkNIUyA9ICgKKwkJCQkJcHBjLAorCQkJCQlpMzg2LAorCQkJCSk7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9IF9fTUFDT1NYX187CisJCQkJU0RLUk9PVCA9IC9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGs7CisJCQl9OworCQkJbmFtZSA9IERldmVsb3BtZW50OworCQl9OworCQk3MzgxNEFFNTA5MDdGQjFFMDBDNDc4RkMgLyogRGVwbG95bWVudCAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlBUkNIUyA9ICgKKwkJCQkJcHBjLAorCQkJCQlpMzg2LAorCQkJCSk7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9IF9fTUFDT1NYX187CisJCQkJU0RLUk9PVCA9IC9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGs7CisJCQl9OworCQkJbmFtZSA9IERlcGxveW1lbnQ7CisJCX07CisJCTczODE0QUU2MDkwN0ZCMUUwMEM0NzhGQyAvKiBEZWZhdWx0ICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUFSQ0hTID0gKAorCQkJCQlwcGMsCisJCQkJCWkzODYsCisJCQkJKTsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gX19NQUNPU1hfXzsKKwkJCQlTREtST09UID0gL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkazsKKwkJCX07CisJCQluYW1lID0gRGVmYXVsdDsKKwkJfTsKKy8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCisKKy8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLworCQk3MzgxNEFERjA5MDdGQjFFMDBDNDc4RkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIlNwZWV4IiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTczODE0QUUwMDkwN0ZCMUUwMEM0NzhGQyAvKiBEZXZlbG9wbWVudCAqLywKKwkJCQk3MzgxNEFFMTA5MDdGQjFFMDBDNDc4RkMgLyogRGVwbG95bWVudCAqLywKKwkJCQk3MzgxNEFFMjA5MDdGQjFFMDBDNDc4RkMgLyogRGVmYXVsdCAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWZhdWx0OworCQl9OworCQk3MzgxNEFFMzA5MDdGQjFFMDBDNDc4RkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJTcGVleF9VQiIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQk3MzgxNEFFNDA5MDdGQjFFMDBDNDc4RkMgLyogRGV2ZWxvcG1lbnQgKi8sCisJCQkJNzM4MTRBRTUwOTA3RkIxRTAwQzQ3OEZDIC8qIERlcGxveW1lbnQgKi8sCisJCQkJNzM4MTRBRTYwOTA3RkIxRTAwQzQ3OEZDIC8qIERlZmF1bHQgKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVmYXVsdDsKKwkJfTsKKy8qIEVuZCBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KKwl9OworCXJvb3RPYmplY3QgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9zcGVleC5tNCBiLzNyZHBhcnR5L3NwZWV4L3NwZWV4Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMTQ0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9zcGVleC5tNApAQCAtMCwwICsxLDEwNCBAQAorIyBDb25maWd1cmUgcGF0aHMgZm9yIGxpYnNwZWV4CisjIEplYW4tTWFyYyBWYWxpbiA8amVhbi1tYXJjLnZhbGluQHVzaGVyYnJvb2tlLmNhPgorIyBTaGFtZWxlc3NseSBzdG9sZW4gZnJvbToKKyMgSmFjayBNb2ZmaXR0IDxqYWNrQGljZWNhc3Qub3JnPiAxMC0yMS0yMDAwCisjIFNoYW1lbGVzc2x5IHN0b2xlbiBmcm9tIE93ZW4gVGF5bG9yIGFuZCBNYW5pc2ggU2luZ2gKKworZG5sIFhJUEhfUEFUSF9TUEVFWChbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXSkKK2RubCBUZXN0IGZvciBsaWJzcGVleCwgYW5kIGRlZmluZSBTUEVFWF9DRkxBR1MgYW5kIFNQRUVYX0xJQlMKK2RubAorQUNfREVGVU4oW1hJUEhfUEFUSF9TUEVFWF0sCitbZG5sIAorZG5sIEdldCB0aGUgY2ZsYWdzIGFuZCBsaWJyYXJpZXMKK2RubAorQUNfQVJHX1dJVEgoc3BlZXgsWyAgLS13aXRoLXNwZWV4PVBGWCAgIFByZWZpeCB3aGVyZSBsaWJzcGVleCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sIHNwZWV4X3ByZWZpeD0iJHdpdGh2YWwiLCBzcGVleF9wcmVmaXg9IiIpCitBQ19BUkdfV0lUSChzcGVleC1saWJyYXJpZXMsWyAgLS13aXRoLXNwZWV4LWxpYnJhcmllcz1ESVIgICBEaXJlY3Rvcnkgd2hlcmUgbGlic3BlZXggbGlicmFyeSBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sIHNwZWV4X2xpYnJhcmllcz0iJHdpdGh2YWwiLCBzcGVleF9saWJyYXJpZXM9IiIpCitBQ19BUkdfV0lUSChzcGVleC1pbmNsdWRlcyxbICAtLXdpdGgtc3BlZXgtaW5jbHVkZXM9RElSICAgRGlyZWN0b3J5IHdoZXJlIGxpYnNwZWV4IGhlYWRlciBmaWxlcyBhcmUgaW5zdGFsbGVkIChvcHRpb25hbCldLCBzcGVleF9pbmNsdWRlcz0iJHdpdGh2YWwiLCBzcGVleF9pbmNsdWRlcz0iIikKK0FDX0FSR19FTkFCTEUoc3BlZXh0ZXN0LCBbICAtLWRpc2FibGUtc3BlZXh0ZXN0ICAgICAgIERvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBTcGVleCBwcm9ncmFtXSwsIGVuYWJsZV9zcGVleHRlc3Q9eWVzKQorCisgIGlmIHRlc3QgIngkc3BlZXhfbGlicmFyaWVzIiAhPSAieCIgOyB0aGVuCisgICAgU1BFRVhfTElCUz0iLUwkc3BlZXhfbGlicmFyaWVzIgorICBlbGlmIHRlc3QgIngkc3BlZXhfcHJlZml4IiAhPSAieCIgOyB0aGVuCisgICAgU1BFRVhfTElCUz0iLUwkc3BlZXhfcHJlZml4L2xpYiIKKyAgZWxpZiB0ZXN0ICJ4JHByZWZpeCIgIT0gInhOT05FIiA7IHRoZW4KKyAgICBTUEVFWF9MSUJTPSItTCRwcmVmaXgvbGliIgorICBmaQorCisgIFNQRUVYX0xJQlM9IiRTUEVFWF9MSUJTIC1sc3BlZXgiCisKKyAgaWYgdGVzdCAieCRzcGVleF9pbmNsdWRlcyIgIT0gIngiIDsgdGhlbgorICAgIFNQRUVYX0NGTEFHUz0iLUkkc3BlZXhfaW5jbHVkZXMiCisgIGVsaWYgdGVzdCAieCRzcGVleF9wcmVmaXgiICE9ICJ4IiA7IHRoZW4KKyAgICBTUEVFWF9DRkxBR1M9Ii1JJHNwZWV4X3ByZWZpeC9pbmNsdWRlIgorICBlbGlmIHRlc3QgIngkcHJlZml4IiAhPSAieE5PTkUiOyB0aGVuCisgICAgU1BFRVhfQ0ZMQUdTPSItSSRwcmVmaXgvaW5jbHVkZSIKKyAgZmkKKworICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIFNwZWV4KQorICBub19zcGVleD0iIgorCisKKyAgaWYgdGVzdCAieCRlbmFibGVfc3BlZXh0ZXN0IiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorICAgIENGTEFHUz0iJENGTEFHUyAkU1BFRVhfQ0ZMQUdTIgorICAgIExJQlM9IiRMSUJTICRTUEVFWF9MSUJTIgorZG5sCitkbmwgTm93IGNoZWNrIGlmIHRoZSBpbnN0YWxsZWQgU3BlZXggaXMgc3VmZmljaWVudGx5IG5ldy4KK2RubAorICAgICAgcm0gLWYgY29uZi5zcGVleHRlc3QKKyAgICAgIEFDX1RSWV9SVU4oWworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3BlZXgvc3BlZXguaD4KKworaW50IG1haW4gKCkKK3sKKyAgc3lzdGVtKCJ0b3VjaCBjb25mLnNwZWV4dGVzdCIpOworICByZXR1cm4gMDsKK30KKworXSwsIG5vX3NwZWV4PXllcyxbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCisgICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCisgICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKyAgZmkKKworICBpZiB0ZXN0ICJ4JG5vX3NwZWV4IiA9ICJ4IiA7IHRoZW4KKyAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgIGlmZWxzZShbJDFdLCAsIDosIFskMV0pICAgICAKKyAgZWxzZQorICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBpZiB0ZXN0IC1mIGNvbmYuc3BlZXh0ZXN0IDsgdGhlbgorICAgICAgIDoKKyAgICAgZWxzZQorICAgICAgIGVjaG8gIioqKiBDb3VsZCBub3QgcnVuIFNwZWV4IHRlc3QgcHJvZ3JhbSwgY2hlY2tpbmcgd2h5Li4uIgorICAgICAgIENGTEFHUz0iJENGTEFHUyAkU1BFRVhfQ0ZMQUdTIgorICAgICAgIExJQlM9IiRMSUJTICRTUEVFWF9MSUJTIgorICAgICAgIEFDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHNwZWV4L3NwZWV4Lmg+CitdLCAgICAgWyByZXR1cm4gMDsgXSwKKyAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGNvbXBpbGVkLCBidXQgZGlkIG5vdCBydW4uIFRoaXMgdXN1YWxseSBtZWFucyIKKyAgICAgICBlY2hvICIqKiogdGhhdCB0aGUgcnVuLXRpbWUgbGlua2VyIGlzIG5vdCBmaW5kaW5nIFNwZWV4IG9yIGZpbmRpbmcgdGhlIHdyb25nIgorICAgICAgIGVjaG8gIioqKiB2ZXJzaW9uIG9mIFNwZWV4LiBJZiBpdCBpcyBub3QgZmluZGluZyBTcGVleCwgeW91J2xsIG5lZWQgdG8gc2V0IHlvdXIiCisgICAgICAgZWNobyAiKioqIExEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmYgdG8gcG9pbnQiCisgICAgICAgZWNobyAiKioqIHRvIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24gIEFsc28sIG1ha2Ugc3VyZSB5b3UgaGF2ZSBydW4gbGRjb25maWcgaWYgdGhhdCIKKyAgICAgICBlY2hvICIqKiogaXMgcmVxdWlyZWQgb24geW91ciBzeXN0ZW0iCisgICAgICAgZWNobyAiKioqIgorICAgICAgIGVjaG8gIioqKiBJZiB5b3UgaGF2ZSBhbiBvbGQgdmVyc2lvbiBpbnN0YWxsZWQsIGl0IGlzIGJlc3QgdG8gcmVtb3ZlIGl0LCBhbHRob3VnaCIKKyAgICAgICBlY2hvICIqKiogeW91IG1heSBhbHNvIGJlIGFibGUgdG8gZ2V0IHRoaW5ncyB0byB3b3JrIGJ5IG1vZGlmeWluZyBMRF9MSUJSQVJZX1BBVEgiXSwKKyAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGZhaWxlZCB0byBjb21waWxlIG9yIGxpbmsuIFNlZSB0aGUgZmlsZSBjb25maWcubG9nIGZvciB0aGUiCisgICAgICAgZWNobyAiKioqIGV4YWN0IGVycm9yIHRoYXQgb2NjdXJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIFNwZWV4IHdhcyBpbmNvcnJlY3RseSBpbnN0YWxsZWQiCisgICAgICAgZWNobyAiKioqIG9yIHRoYXQgeW91IGhhdmUgbW92ZWQgU3BlZXggc2luY2UgaXQgd2FzIGluc3RhbGxlZC4iIF0pCisgICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCisgICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKyAgICAgZmkKKyAgICAgU1BFRVhfQ0ZMQUdTPSIiCisgICAgIFNQRUVYX0xJQlM9IiIKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKyAgZmkKKyAgQUNfU1VCU1QoU1BFRVhfQ0ZMQUdTKQorICBBQ19TVUJTVChTUEVFWF9MSUJTKQorICBybSAtZiBjb25mLnNwZWV4dGVzdAorXSkKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3NwZWV4LnBjLmluIGIvM3JkcGFydHkvc3BlZXgvc3BlZXgucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZmZTAyMwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3NwZWV4LnBjLmluCkBAIC0wLDAgKzEsMTQgQEAKKyMgbGlic3BlZXggcGtnLWNvbmZpZyBzb3VyY2UgZmlsZQorCitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKK2xpYmRpcj1AbGliZGlyQAoraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKworTmFtZTogc3BlZXgKK0Rlc2NyaXB0aW9uOiBTcGVleCBpcyBhbiBhdWRpbyBjb2RlYyB0dW5lZCBmb3Igc3BlZWNoCitWZXJzaW9uOiBAU1BFRVhfVkVSU0lPTkAKK1JlcXVpcmVzOgorQ29uZmxpY3RzOgorTGliczogLUwke2xpYmRpcn0gLWxzcGVleCAtbG0KK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9zcGVleGNsaWVudC9SRUFETUUgYi8zcmRwYXJ0eS9zcGVleC9zcGVleGNsaWVudC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxNDBkMwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3NwZWV4Y2xpZW50L1JFQURNRQpAQCAtMCwwICsxLDE4IEBACitUaGlzIGlzIGEgVkVSWSBTSU1QTEUgU3BlZXggVm9JUCBjbGllbnQuIEl0IGlzIG5vdCBhIGNvbXBsZXRlIFZvSVAgYXBwbGljYXRpb24sCitpc24ndCBjb21wYXRpYmxlIHdpdGggYW55dGhpbmcgZWxzZSAoaW5jbHVkaW5nIHByb2JhYmx5IGZ1dHVyZSB2ZXJzaW9ucyBvZiAKK2l0c2VsZikgYW5kIGRvZXMgbm90IHN1cHBvcnQgYW55IGZvcm0gb2Ygc3RhbmRhcmQgcHJvdG9jb2xzLiBJdCBpcyBpbnRlbmRlZAorb25seSBhcyBhIHdheSB0byBzaG93IGhvdyB0byB1c2UgU3BlZXggaW4gYSBWb0lQIGFwcGxpY2F0aW9uLgorCitUbyB1c2UgaXQ6CisKK09uIEFsaWNlcyBtYWNoaW5lOgorJSBzcGVleGNsaWVudCBwbHVnaHc6MCwwIGJvYi5zb21ld2hlcmUubmV0IGFsaWNlX3BvcnQgYm9iX3BvcnQKKworT24gQm9iJ3MgbWFjaGluZToKKyUgc3BlZXhjbGllbnQgcGx1Z2h3OjAsMCBhbGljZS5zb21ld2hlcmUubmV0IGJvYl9wb3J0IGFsaWNlX3BvcnQKKword2hlcmUgYm9iX3BvcnQgaXMgdGhlIFVEUCBwb3J0IG9uIHdoaWNoIGJvYiByZWNlaXZlcyBhbmQgYWxpY2VfcG9ydCBpcyB0aGUKK1VEUCBwb3J0IG9uIHdoaWNoIGFsaWNlIHJlY2VpdmVzLiBJbiBtb3N0IGNhc2VzLCB0aGUgdHdvIHBvcnRzIGNhbiBiZSB0aGUgc2FtZS4KKworTm90ZSB0aGF0IHRoZSBjbGllbnRzIGRvIG5vdCBldmVuIGtub3cgd2hldGhlciB0aGV5IGFyZSBjb25uZWN0ZWQgb3Igbm90LiBBbGwKK3RoZXkgZG8gaXMgc2VuZC9yZWNlaXZlIHRoZSBhdWRpbyB0by9mcm9tIGEgc3BlY2lmaWMgcG9ydC4gCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9zcGVleGNsaWVudC9hbHNhX2RldmljZS5jIGIvM3JkcGFydHkvc3BlZXgvc3BlZXhjbGllbnQvYWxzYV9kZXZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2E0YWJiCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvc3BlZXhjbGllbnQvYWxzYV9kZXZpY2UuYwpAQCAtMCwwICsxLDQzMSBAQAorLyoKKyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEplYW4tTWFyYyBWYWxpbgorICAgQ29weXJpZ2h0IChDKSAyMDA2IENvbW1vbndlYWx0aCBTY2llbnRpZmljIGFuZCBJbmR1c3RyaWFsIFJlc2VhcmNoCisgICAgICAgICAgICAgICAgICAgICAgT3JnYW5pc2F0aW9uIChDU0lSTykgQXVzdHJhbGlhCisgICAKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICAgbWV0OgorCisgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAgIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAgIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAgIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICAgQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJhbHNhX2RldmljZS5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGFsc2EvYXNvdW5kbGliLmg+CisKK3N0cnVjdCBBbHNhRGV2aWNlXyB7CisgICBjaGFyICpkZXZpY2VfbmFtZTsKKyAgIGludCBjaGFubmVsczsKKyAgIGludCBwZXJpb2Q7CisgICBzbmRfcGNtX3QgKmNhcHR1cmVfaGFuZGxlOworICAgc25kX3BjbV90ICpwbGF5YmFja19oYW5kbGU7CisgICBpbnQgcmVhZE4sIHdyaXRlTjsKKyAgIHN0cnVjdCBwb2xsZmQgKnJlYWRfZmQsICp3cml0ZV9mZDsKK307CisKK0Fsc2FEZXZpY2UgKmFsc2FfZGV2aWNlX29wZW4oY2hhciAqZGV2aWNlX25hbWUsIHVuc2lnbmVkIGludCByYXRlLCBpbnQgY2hhbm5lbHMsIGludCBwZXJpb2QpCit7CisgICBpbnQgZGlyOworICAgaW50IGVycjsKKyAgIHNuZF9wY21faHdfcGFyYW1zX3QgKmh3X3BhcmFtczsKKyAgIHNuZF9wY21fc3dfcGFyYW1zX3QgKnN3X3BhcmFtczsKKyAgIHNuZF9wY21fdWZyYW1lc190IHBlcmlvZF9zaXplID0gcGVyaW9kOworICAgc25kX3BjbV91ZnJhbWVzX3QgYnVmZmVyX3NpemUgPSAyKnBlcmlvZDsKKyAgIHN0YXRpYyBzbmRfb3V0cHV0X3QgKmpjZF9vdXQ7CisgICBBbHNhRGV2aWNlICpkZXYgPSBtYWxsb2Moc2l6ZW9mKCpkZXYpKTsKKyAgIGlmICghZGV2KQorICAgICAgcmV0dXJuIE5VTEw7CisgICBkZXYtPmRldmljZV9uYW1lID0gbWFsbG9jKDErc3RybGVuKGRldmljZV9uYW1lKSk7CisgICBpZiAoIWRldi0+ZGV2aWNlX25hbWUpCisgICB7CisgICAgICBmcmVlKGRldik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgIH0KKyAgIHN0cmNweShkZXYtPmRldmljZV9uYW1lLCBkZXZpY2VfbmFtZSk7CisgICBkZXYtPmNoYW5uZWxzID0gY2hhbm5lbHM7CisgICBkZXYtPnBlcmlvZCA9IHBlcmlvZDsKKyAgIGVyciA9IHNuZF9vdXRwdXRfc3RkaW9fYXR0YWNoKCZqY2Rfb3V0LCBzdGRvdXQsIDApOworICAgCisgICBpZiAoKGVyciA9IHNuZF9wY21fb3BlbiAoJmRldi0+Y2FwdHVyZV9oYW5kbGUsIGRldi0+ZGV2aWNlX25hbWUsIFNORF9QQ01fU1RSRUFNX0NBUFRVUkUsIDApKSA8IDApIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbm5vdCBvcGVuIGF1ZGlvIGRldmljZSAlcyAoJXMpXG4iLAorICAgICAgICAgICAgICAgZGV2LT5kZXZpY2VfbmFtZSwKKyAgICAgICAgICAgICAgIHNuZF9zdHJlcnJvciAoZXJyKSk7CisgICAgICBhc3NlcnQoMCk7CisgICB9CisKKyAgIGlmICgoZXJyID0gc25kX3BjbV9od19wYXJhbXNfbWFsbG9jICgmaHdfcGFyYW1zKSkgPCAwKSB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYW5ub3QgYWxsb2NhdGUgaGFyZHdhcmUgcGFyYW1ldGVyIHN0cnVjdHVyZSAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKworICAgaWYgKChlcnIgPSBzbmRfcGNtX2h3X3BhcmFtc19hbnkgKGRldi0+Y2FwdHVyZV9oYW5kbGUsIGh3X3BhcmFtcykpIDwgMCkgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2Fubm90IGluaXRpYWxpemUgaGFyZHdhcmUgcGFyYW1ldGVyIHN0cnVjdHVyZSAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKworICAgaWYgKChlcnIgPSBzbmRfcGNtX2h3X3BhcmFtc19zZXRfYWNjZXNzIChkZXYtPmNhcHR1cmVfaGFuZGxlLCBod19wYXJhbXMsIFNORF9QQ01fQUNDRVNTX1JXX0lOVEVSTEVBVkVEKSkgPCAwKSB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYW5ub3Qgc2V0IGFjY2VzcyB0eXBlICglcylcbiIsCisgICAgICAgICAgICAgICBzbmRfc3RyZXJyb3IgKGVycikpOworICAgICAgYXNzZXJ0KDApOworICAgfQorCisgICBpZiAoKGVyciA9IHNuZF9wY21faHdfcGFyYW1zX3NldF9mb3JtYXQgKGRldi0+Y2FwdHVyZV9oYW5kbGUsIGh3X3BhcmFtcywgU05EX1BDTV9GT1JNQVRfUzE2X0xFKSkgPCAwKSB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYW5ub3Qgc2V0IHNhbXBsZSBmb3JtYXQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgIHNuZF9zdHJlcnJvciAoZXJyKSk7CisgICAgICBhc3NlcnQoMCk7CisgICB9CisKKyAgIGlmICgoZXJyID0gc25kX3BjbV9od19wYXJhbXNfc2V0X3JhdGVfbmVhciAoZGV2LT5jYXB0dXJlX2hhbmRsZSwgaHdfcGFyYW1zLCAmcmF0ZSwgMCkpIDwgMCkgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2Fubm90IHNldCBzYW1wbGUgcmF0ZSAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKyAgIC8qZnByaW50ZiAoc3RkZXJyLCAicmF0ZSA9ICVkXG4iLCByYXRlKTsqLworCisgICBpZiAoKGVyciA9IHNuZF9wY21faHdfcGFyYW1zX3NldF9jaGFubmVscyAoZGV2LT5jYXB0dXJlX2hhbmRsZSwgaHdfcGFyYW1zLCBjaGFubmVscykpIDwgMCkgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2Fubm90IHNldCBjaGFubmVsIGNvdW50ICglcylcbiIsCisgICAgICAgICAgICAgICBzbmRfc3RyZXJyb3IgKGVycikpOworICAgICAgYXNzZXJ0KDApOworICAgfQorICAgCisgICBwZXJpb2Rfc2l6ZSA9IHBlcmlvZDsKKyAgIGRpciA9IDA7CisgICBpZiAoKGVyciA9IHNuZF9wY21faHdfcGFyYW1zX3NldF9wZXJpb2Rfc2l6ZV9uZWFyIChkZXYtPmNhcHR1cmVfaGFuZGxlLCBod19wYXJhbXMsICZwZXJpb2Rfc2l6ZSwgJmRpcikpIDwgMCkgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2Fubm90IHNldCBwZXJpb2Qgc2l6ZSAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKyAgIAorICAgaWYgKChlcnIgPSBzbmRfcGNtX2h3X3BhcmFtc19zZXRfcGVyaW9kcyAoZGV2LT5jYXB0dXJlX2hhbmRsZSwgaHdfcGFyYW1zLCAyLCAwKSkgPCAwKSB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYW5ub3Qgc2V0IG51bWJlciBvZiBwZXJpb2RzICglcylcbiIsCisgICAgICAgICAgICAgICBzbmRfc3RyZXJyb3IgKGVycikpOworICAgICAgYXNzZXJ0KDApOworICAgfQorICAgCisgICBidWZmZXJfc2l6ZSA9IHBlcmlvZF9zaXplICogMjsKKyAgIGRpcj0wOworICAgaWYgKChlcnIgPSBzbmRfcGNtX2h3X3BhcmFtc19zZXRfYnVmZmVyX3NpemVfbmVhciAoZGV2LT5jYXB0dXJlX2hhbmRsZSwgaHdfcGFyYW1zLCAmYnVmZmVyX3NpemUpKSA8IDApIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbm5vdCBzZXQgYnVmZmVyIHRpbWUgKCVzKVxuIiwKKyAgICAgICAgICAgICAgIHNuZF9zdHJlcnJvciAoZXJyKSk7CisgICAgICBhc3NlcnQoMCk7CisgICB9CisgICAKKyAgIGlmICgoZXJyID0gc25kX3BjbV9od19wYXJhbXMgKGRldi0+Y2FwdHVyZV9oYW5kbGUsIGh3X3BhcmFtcykpIDwgMCkgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2Fubm90IHNldCBjYXB0dXJlIHBhcmFtZXRlcnMgKCVzKVxuIiwKKyAgICAgICAgICAgICAgIHNuZF9zdHJlcnJvciAoZXJyKSk7CisgICAgICBhc3NlcnQoMCk7CisgICB9CisgICAvKnNuZF9wY21fZHVtcF9zZXR1cChkZXYtPmNhcHR1cmVfaGFuZGxlLCBqY2Rfb3V0KTsqLworICAgc25kX3BjbV9od19wYXJhbXNfZnJlZSAoaHdfcGFyYW1zKTsKKworICAgaWYgKChlcnIgPSBzbmRfcGNtX3N3X3BhcmFtc19tYWxsb2MgKCZzd19wYXJhbXMpKSA8IDApIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbm5vdCBhbGxvY2F0ZSBzb2Z0d2FyZSBwYXJhbWV0ZXJzIHN0cnVjdHVyZSAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKyAgIGlmICgoZXJyID0gc25kX3BjbV9zd19wYXJhbXNfY3VycmVudCAoZGV2LT5jYXB0dXJlX2hhbmRsZSwgc3dfcGFyYW1zKSkgPCAwKSB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYW5ub3QgaW5pdGlhbGl6ZSBzb2Z0d2FyZSBwYXJhbWV0ZXJzIHN0cnVjdHVyZSAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKyAgIGlmICgoZXJyID0gc25kX3BjbV9zd19wYXJhbXNfc2V0X2F2YWlsX21pbiAoZGV2LT5jYXB0dXJlX2hhbmRsZSwgc3dfcGFyYW1zLCBwZXJpb2QpKSA8IDApIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbm5vdCBzZXQgbWluaW11bSBhdmFpbGFibGUgY291bnQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgIHNuZF9zdHJlcnJvciAoZXJyKSk7CisgICAgICBhc3NlcnQoMCk7CisgICB9CisgICBpZiAoKGVyciA9IHNuZF9wY21fc3dfcGFyYW1zIChkZXYtPmNhcHR1cmVfaGFuZGxlLCBzd19wYXJhbXMpKSA8IDApIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbm5vdCBzZXQgc29mdHdhcmUgcGFyYW1ldGVycyAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0gICAKKyAgIAorICAgCisgICBpZiAoKGVyciA9IHNuZF9wY21fb3BlbiAoJmRldi0+cGxheWJhY2tfaGFuZGxlLCBkZXYtPmRldmljZV9uYW1lLCBTTkRfUENNX1NUUkVBTV9QTEFZQkFDSywgMCkpIDwgMCkgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2Fubm90IG9wZW4gYXVkaW8gZGV2aWNlICVzICglcylcbiIsCisgICAgICAgICAgICAgICBkZXYtPmRldmljZV9uYW1lLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKyAgIAorICAgaWYgKChlcnIgPSBzbmRfcGNtX2h3X3BhcmFtc19tYWxsb2MgKCZod19wYXJhbXMpKSA8IDApIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbm5vdCBhbGxvY2F0ZSBoYXJkd2FyZSBwYXJhbWV0ZXIgc3RydWN0dXJlICglcylcbiIsCisgICAgICAgICAgICAgICBzbmRfc3RyZXJyb3IgKGVycikpOworICAgICAgYXNzZXJ0KDApOworICAgfQorCisgICBpZiAoKGVyciA9IHNuZF9wY21faHdfcGFyYW1zX2FueSAoZGV2LT5wbGF5YmFja19oYW5kbGUsIGh3X3BhcmFtcykpIDwgMCkgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2Fubm90IGluaXRpYWxpemUgaGFyZHdhcmUgcGFyYW1ldGVyIHN0cnVjdHVyZSAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKworICAgaWYgKChlcnIgPSBzbmRfcGNtX2h3X3BhcmFtc19zZXRfYWNjZXNzIChkZXYtPnBsYXliYWNrX2hhbmRsZSwgaHdfcGFyYW1zLCBTTkRfUENNX0FDQ0VTU19SV19JTlRFUkxFQVZFRCkpIDwgMCkgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2Fubm90IHNldCBhY2Nlc3MgdHlwZSAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKworICAgaWYgKChlcnIgPSBzbmRfcGNtX2h3X3BhcmFtc19zZXRfZm9ybWF0IChkZXYtPnBsYXliYWNrX2hhbmRsZSwgaHdfcGFyYW1zLCBTTkRfUENNX0ZPUk1BVF9TMTZfTEUpKSA8IDApIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbm5vdCBzZXQgc2FtcGxlIGZvcm1hdCAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKworICAgaWYgKChlcnIgPSBzbmRfcGNtX2h3X3BhcmFtc19zZXRfcmF0ZV9uZWFyIChkZXYtPnBsYXliYWNrX2hhbmRsZSwgaHdfcGFyYW1zLCAmcmF0ZSwgMCkpIDwgMCkgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2Fubm90IHNldCBzYW1wbGUgcmF0ZSAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKyAgIC8qZnByaW50ZiAoc3RkZXJyLCAicmF0ZSA9ICVkXG4iLCByYXRlKTsqLworCisgICBpZiAoKGVyciA9IHNuZF9wY21faHdfcGFyYW1zX3NldF9jaGFubmVscyAoZGV2LT5wbGF5YmFja19oYW5kbGUsIGh3X3BhcmFtcywgY2hhbm5lbHMpKSA8IDApIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbm5vdCBzZXQgY2hhbm5lbCBjb3VudCAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKyAgIAorICAgcGVyaW9kX3NpemUgPSBwZXJpb2Q7CisgICBkaXIgPSAwOworICAgaWYgKChlcnIgPSBzbmRfcGNtX2h3X3BhcmFtc19zZXRfcGVyaW9kX3NpemVfbmVhciAoZGV2LT5wbGF5YmFja19oYW5kbGUsIGh3X3BhcmFtcywgJnBlcmlvZF9zaXplLCAmZGlyKSkgPCAwKSB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYW5ub3Qgc2V0IHBlcmlvZCBzaXplICglcylcbiIsCisgICAgICAgICAgICAgICBzbmRfc3RyZXJyb3IgKGVycikpOworICAgICAgYXNzZXJ0KDApOworICAgfQorICAgaWYgKChlcnIgPSBzbmRfcGNtX2h3X3BhcmFtc19zZXRfcGVyaW9kcyAoZGV2LT5wbGF5YmFja19oYW5kbGUsIGh3X3BhcmFtcywgMiwgMCkpIDwgMCkgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2Fubm90IHNldCBudW1iZXIgb2YgcGVyaW9kcyAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKyAgIGJ1ZmZlcl9zaXplID0gcGVyaW9kX3NpemUgKiAyOworICAgZGlyPTA7CisgICBpZiAoKGVyciA9IHNuZF9wY21faHdfcGFyYW1zX3NldF9idWZmZXJfc2l6ZV9uZWFyIChkZXYtPnBsYXliYWNrX2hhbmRsZSwgaHdfcGFyYW1zLCAmYnVmZmVyX3NpemUpKSA8IDApIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbm5vdCBzZXQgYnVmZmVyIHRpbWUgKCVzKVxuIiwKKyAgICAgICAgICAgICAgIHNuZF9zdHJlcnJvciAoZXJyKSk7CisgICAgICBhc3NlcnQoMCk7CisgICB9CisKKworICAgaWYgKChlcnIgPSBzbmRfcGNtX2h3X3BhcmFtcyAoZGV2LT5wbGF5YmFja19oYW5kbGUsIGh3X3BhcmFtcykpIDwgMCkgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2Fubm90IHNldCBwbGF5YmFjayBwYXJhbWV0ZXJzICglcylcbiIsCisgICAgICAgICAgICAgICBzbmRfc3RyZXJyb3IgKGVycikpOworICAgICAgYXNzZXJ0KDApOworICAgfQorCisgICAvKnNuZF9wY21fZHVtcF9zZXR1cChkZXYtPnBsYXliYWNrX2hhbmRsZSwgamNkX291dCk7Ki8KKyAgIHNuZF9wY21faHdfcGFyYW1zX2ZyZWUgKGh3X3BhcmFtcyk7CisKKyAgIAorICAgaWYgKChlcnIgPSBzbmRfcGNtX3N3X3BhcmFtc19tYWxsb2MgKCZzd19wYXJhbXMpKSA8IDApIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbm5vdCBhbGxvY2F0ZSBzb2Z0d2FyZSBwYXJhbWV0ZXJzIHN0cnVjdHVyZSAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKyAgIGlmICgoZXJyID0gc25kX3BjbV9zd19wYXJhbXNfY3VycmVudCAoZGV2LT5wbGF5YmFja19oYW5kbGUsIHN3X3BhcmFtcykpIDwgMCkgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2Fubm90IGluaXRpYWxpemUgc29mdHdhcmUgcGFyYW1ldGVycyBzdHJ1Y3R1cmUgKCVzKVxuIiwKKyAgICAgICAgICAgICAgIHNuZF9zdHJlcnJvciAoZXJyKSk7CisgICAgICBhc3NlcnQoMCk7CisgICB9CisgICBpZiAoKGVyciA9IHNuZF9wY21fc3dfcGFyYW1zX3NldF9hdmFpbF9taW4gKGRldi0+cGxheWJhY2tfaGFuZGxlLCBzd19wYXJhbXMsIHBlcmlvZCkpIDwgMCkgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2Fubm90IHNldCBtaW5pbXVtIGF2YWlsYWJsZSBjb3VudCAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKyAgIGlmICgoZXJyID0gc25kX3BjbV9zd19wYXJhbXNfc2V0X3N0YXJ0X3RocmVzaG9sZCAoZGV2LT5wbGF5YmFja19oYW5kbGUsIHN3X3BhcmFtcywgcGVyaW9kKSkgPCAwKSB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYW5ub3Qgc2V0IHN0YXJ0IG1vZGUgKCVzKVxuIiwKKyAgICAgICAgICAgICAgIHNuZF9zdHJlcnJvciAoZXJyKSk7CisgICAgICBhc3NlcnQoMCk7CisgICB9CisgICBpZiAoKGVyciA9IHNuZF9wY21fc3dfcGFyYW1zIChkZXYtPnBsYXliYWNrX2hhbmRsZSwgc3dfcGFyYW1zKSkgPCAwKSB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYW5ub3Qgc2V0IHNvZnR3YXJlIHBhcmFtZXRlcnMgKCVzKVxuIiwKKyAgICAgICAgICAgICAgIHNuZF9zdHJlcnJvciAoZXJyKSk7CisgICAgICBhc3NlcnQoMCk7CisgICB9CisgIAorICAgCisgICBzbmRfcGNtX2xpbmsoZGV2LT5jYXB0dXJlX2hhbmRsZSwgZGV2LT5wbGF5YmFja19oYW5kbGUpOworICAgaWYgKChlcnIgPSBzbmRfcGNtX3ByZXBhcmUgKGRldi0+Y2FwdHVyZV9oYW5kbGUpKSA8IDApIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbm5vdCBwcmVwYXJlIGF1ZGlvIGludGVyZmFjZSBmb3IgdXNlICglcylcbiIsCisgICAgICAgICAgICAgICBzbmRfc3RyZXJyb3IgKGVycikpOworICAgICAgYXNzZXJ0KDApOworICAgfQorICAgaWYgKChlcnIgPSBzbmRfcGNtX3ByZXBhcmUgKGRldi0+cGxheWJhY2tfaGFuZGxlKSkgPCAwKSB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYW5ub3QgcHJlcGFyZSBhdWRpbyBpbnRlcmZhY2UgZm9yIHVzZSAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKyAgIAorICAgZGV2LT5yZWFkTiA9IHNuZF9wY21fcG9sbF9kZXNjcmlwdG9yc19jb3VudChkZXYtPmNhcHR1cmVfaGFuZGxlKTsKKyAgIGRldi0+d3JpdGVOID0gc25kX3BjbV9wb2xsX2Rlc2NyaXB0b3JzX2NvdW50KGRldi0+cGxheWJhY2tfaGFuZGxlKTsKKworICAgZGV2LT5yZWFkX2ZkID0gbWFsbG9jKGRldi0+cmVhZE4qc2l6ZW9mKCpkZXYtPnJlYWRfZmQpKTsKKyAgIC8qcHJpbnRmICgiZGVzY3JpcHRvcnM6ICVkICVkXG4iLCBkZXYtPnJlYWROLCBkZXYtPndyaXRlTik7Ki8KKyAgIGlmIChzbmRfcGNtX3BvbGxfZGVzY3JpcHRvcnMoZGV2LT5jYXB0dXJlX2hhbmRsZSwgZGV2LT5yZWFkX2ZkLCBkZXYtPnJlYWROKSAhPSBkZXYtPnJlYWROKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2Fubm90IG9idGFpbiBjYXB0dXJlIGZpbGUgZGVzY3JpcHRvcnMgKCVzKVxuIiwKKyAgICAgICAgICAgICAgIHNuZF9zdHJlcnJvciAoZXJyKSk7CisgICAgICBhc3NlcnQoMCk7CisgICB9CisgICAKKyAgIGRldi0+d3JpdGVfZmQgPSBtYWxsb2MoZGV2LT53cml0ZU4qc2l6ZW9mKCpkZXYtPnJlYWRfZmQpKTsKKyAgIGlmIChzbmRfcGNtX3BvbGxfZGVzY3JpcHRvcnMoZGV2LT5wbGF5YmFja19oYW5kbGUsIGRldi0+d3JpdGVfZmQsIGRldi0+d3JpdGVOKSAhPSBkZXYtPndyaXRlTikKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbm5vdCBvYnRhaW4gcGxheWJhY2sgZmlsZSBkZXNjcmlwdG9ycyAoJXMpXG4iLAorICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgIH0KKyAgIHJldHVybiBkZXY7Cit9CisKK3ZvaWQgYWxzYV9kZXZpY2VfY2xvc2UoQWxzYURldmljZSAqZGV2KQoreworICAgc25kX3BjbV9jbG9zZShkZXYtPmNhcHR1cmVfaGFuZGxlKTsKKyAgIHNuZF9wY21fY2xvc2UoZGV2LT5wbGF5YmFja19oYW5kbGUpOworICAgZnJlZShkZXYtPmRldmljZV9uYW1lKTsKKyAgIGZyZWUoZGV2KTsKK30KKworaW50IGFsc2FfZGV2aWNlX3JlYWQoQWxzYURldmljZSAqZGV2LCBzaG9ydCAqcGNtLCBpbnQgbGVuKQoreworICAgaW50IGVycjsKKyAgIC8qZnByaW50ZiAoc3RkZXJyLCAiLSIpOyovCisgICBpZiAoKGVyciA9IHNuZF9wY21fcmVhZGkgKGRldi0+Y2FwdHVyZV9oYW5kbGUsIHBjbSwgbGVuKSkgIT0gbGVuKQorICAgeworICAgICAgaWYgKGVycjwwKQorICAgICAgeworICAgICAgICAgLy9mcHJpbnRmKHN0ZGVyciwgImVycm9yICVkLCBFUElQRSA9ICVkXG4iLCBlcnIsIEVQSVBFKTsKKyAgICAgICAgIGlmIChlcnIgPT0gLUVQSVBFKQorICAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiQW4gb3ZlcnJ1biBoYXMgb2NjdXJlZCwgcmVzZXRpbmcgY2FwdHVyZVxuIik7CisgICAgICAgICB9IGVsc2UKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgInJlYWQgZnJvbSBhdWRpbyBpbnRlcmZhY2UgZmFpbGVkICglcylcbiIsCisgICAgICAgICAgICAgICAgICAgICBzbmRfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgfQorICAgICAgICAgaWYgKChlcnIgPSBzbmRfcGNtX3ByZXBhcmUgKGRldi0+Y2FwdHVyZV9oYW5kbGUpKSA8IDApCisgICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYW5ub3QgcHJlcGFyZSBhdWRpbyBpbnRlcmZhY2UgZm9yIHVzZSAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmICgoZXJyID0gc25kX3BjbV9zdGFydCAoZGV2LT5jYXB0dXJlX2hhbmRsZSkpIDwgMCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbm5vdCBwcmVwYXJlIGF1ZGlvIGludGVyZmFjZSBmb3IgdXNlICglcylcbiIsCisgICAgICAgICAgICAgICAgICAgICBzbmRfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgfQorICAgICAgICAgLyphbHNhX2RldmljZV9yZWFkKGRldixwY20sbGVuKTsqLworICAgICAgfSBlbHNlIHsKKyAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkNvdWxkbid0IHJlYWQgYXMgbWFueSBzYW1wbGVzIGFzIEkgd2FudGVkICglZCBpbnN0ZWFkIG9mICVkKVxuIiwgZXJyLCBsZW4pOworICAgICAgfQorICAgICAgcmV0dXJuIDE7CisgICB9CisgICByZXR1cm4gMDsKK30KKworaW50IGFsc2FfZGV2aWNlX3dyaXRlKEFsc2FEZXZpY2UgKmRldiwgY29uc3Qgc2hvcnQgKnBjbSwgaW50IGxlbikKK3sKKyAgIGludCBlcnI7CisgICAvKmZwcmludGYgKHN0ZGVyciwgIisiKTsqLworICAgaWYgKChlcnIgPSBzbmRfcGNtX3dyaXRlaSAoZGV2LT5wbGF5YmFja19oYW5kbGUsIHBjbSwgbGVuKSkgIT0gbGVuKQorICAgeworICAgICAgaWYgKGVycjwwKQorICAgICAgeworICAgICAgICAgaWYgKGVyciA9PSAtRVBJUEUpCisgICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJBbiB1bmRlcnJ1biBoYXMgb2NjdXJlZCwgcmVzZXRpbmcgcGxheWJhY2ssIGxlbj0lZFxuIiwgbGVuKTsKKyAgICAgICAgIH0gZWxzZQorICAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAid3JpdGUgdG8gYXVkaW8gaW50ZXJmYWNlIGZhaWxlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgICAgc25kX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmICgoZXJyID0gc25kX3BjbV9wcmVwYXJlIChkZXYtPnBsYXliYWNrX2hhbmRsZSkpIDwgMCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbm5vdCBwcmVwYXJlIGF1ZGlvIGludGVyZmFjZSBmb3IgdXNlICglcylcbiIsCisgICAgICAgICAgICAgICAgICAgICBzbmRfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkNvdWxkbid0IHdyaXRlIGFzIG1hbnkgc2FtcGxlcyBhcyBJIHdhbnRlZCAoJWQgaW5zdGVhZCBvZiAlZClcbiIsIGVyciwgbGVuKTsKKyAgICAgIH0KKyAgICAgIC8qYWxzYV9kZXZpY2Vfd3JpdGUoZGV2LHBjbSxsZW4pOyovCisgICAgICByZXR1cm4gMTsKKyAgIH0KKyAgIHJldHVybiAwOworfQorCitpbnQgYWxzYV9kZXZpY2VfY2FwdHVyZV9yZWFkeShBbHNhRGV2aWNlICpkZXYsIHN0cnVjdCBwb2xsZmQgKnBmZHMsIHVuc2lnbmVkIGludCBuZmRzKQoreworICAgdW5zaWduZWQgc2hvcnQgcmV2ZW50cz0wOworICAgaW50IGVycjsKKyAgIGlmICgoZXJyID0gc25kX3BjbV9wb2xsX2Rlc2NyaXB0b3JzX3JldmVudHMoZGV2LT5jYXB0dXJlX2hhbmRsZSwgcGZkcywgZGV2LT5yZWFkTiwgJnJldmVudHMpKSA8IDApCisgICB7CisgICAgICAvL2NlcnIgPDwgImVycm9yIGluIHNuZF9wY21fcG9sbF9kZXNjcmlwdG9yc19yZXZlbnRzIGZvciBjYXB0dXJlOiAiIDw8IHNuZF9zdHJlcnJvciAoZXJyKSA8PCBlbmRsOworICAgICAgLy9GSVhNRTogVGhpcyBpcyBhIGtsdWRnZQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiZXJyb3IgaW4gYWxzYV9kZXZpY2VfY2FwdHVyZV9yZWFkeTogJXNcbiIsIHNuZF9zdHJlcnJvciAoZXJyKSk7CisgICAgICByZXR1cm4gcGZkc1swXS5yZXZlbnRzICYgUE9MTElOOworICAgfQorICAgLy9jZXJyIDw8IChyZXZlbnRzICYgUE9MTEVSUikgPDwgZW5kbDsKKyAgIHJldHVybiByZXZlbnRzICYgUE9MTElOOworfQorCitpbnQgYWxzYV9kZXZpY2VfcGxheWJhY2tfcmVhZHkoQWxzYURldmljZSAqZGV2LCBzdHJ1Y3QgcG9sbGZkICpwZmRzLCB1bnNpZ25lZCBpbnQgbmZkcykKK3sKKyAgIHVuc2lnbmVkIHNob3J0IHJldmVudHM9MDsKKyAgIGludCBlcnI7CisgICBpZiAoKGVyciA9IHNuZF9wY21fcG9sbF9kZXNjcmlwdG9yc19yZXZlbnRzKGRldi0+cGxheWJhY2tfaGFuZGxlLCBwZmRzK2Rldi0+cmVhZE4sIGRldi0+d3JpdGVOLCAmcmV2ZW50cykpIDwgMCkKKyAgIHsKKyAgICAgIC8vY2VyciA8PCAiZXJyb3IgaW4gc25kX3BjbV9wb2xsX2Rlc2NyaXB0b3JzX3JldmVudHMgZm9yIHBsYXliYWNrOiAiIDw8IHNuZF9zdHJlcnJvciAoZXJyKSA8PCBlbmRsOworICAgICAgLy9GSVhNRTogVGhpcyBpcyBhIGtsdWRnZQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiZXJyb3IgaW4gYWxzYV9kZXZpY2VfcGxheWJhY2tfcmVhZHk6ICVzXG4iLCBzbmRfc3RyZXJyb3IgKGVycikpOworICAgICAgcmV0dXJuIHBmZHNbMV0ucmV2ZW50cyAmIFBPTExPVVQ7CisgICB9CisgICAvL2NlcnIgPDwgKHJldmVudHMgJiBQT0xMRVJSKSA8PCBlbmRsOworICAgcmV0dXJuIHJldmVudHMgJiBQT0xMT1VUOworfQorCit2b2lkIGFsc2FfZGV2aWNlX3N0YXJ0KEFsc2FEZXZpY2UgKmRldikKK3sKKyAgIGludCBpOworICAgc2hvcnQgcGNtW2Rldi0+cGVyaW9kKmRldi0+Y2hhbm5lbHNdOworICAgZm9yIChpPTA7aTxkZXYtPnBlcmlvZCpkZXYtPmNoYW5uZWxzO2krKykKKyAgICAgIHBjbVtpXSA9IDA7CisgICBhbHNhX2RldmljZV93cml0ZShkZXYsIHBjbSwgZGV2LT5wZXJpb2QpOworICAgYWxzYV9kZXZpY2Vfd3JpdGUoZGV2LCBwY20sIGRldi0+cGVyaW9kKTsKKyAgIHNuZF9wY21fc3RhcnQoZGV2LT5jYXB0dXJlX2hhbmRsZSk7CisgICBzbmRfcGNtX3N0YXJ0KGRldi0+cGxheWJhY2tfaGFuZGxlKTsKK30KKworaW50IGFsc2FfZGV2aWNlX25mZHMoQWxzYURldmljZSAqZGV2KQoreworICAgcmV0dXJuIGRldi0+d3JpdGVOK2Rldi0+cmVhZE47Cit9CisKK3ZvaWQgYWxzYV9kZXZpY2VfZ2V0ZmRzKEFsc2FEZXZpY2UgKmRldiwgc3RydWN0IHBvbGxmZCAqcGZkcywgdW5zaWduZWQgaW50IG5mZHMpCit7CisgICBpbnQgaTsKKyAgIGFzc2VydCAobmZkcyA+PSBkZXYtPndyaXRlTitkZXYtPnJlYWROKTsKKyAgIGZvciAoaT0wO2k8ZGV2LT5yZWFkTjtpKyspCisgICAgICBwZmRzW2ldID0gZGV2LT5yZWFkX2ZkW2ldOworICAgZm9yIChpPTA7aTxkZXYtPndyaXRlTjtpKyspCisgICAgICBwZmRzW2krZGV2LT5yZWFkTl0gPSBkZXYtPndyaXRlX2ZkW2ldOworfQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvc3BlZXhjbGllbnQvYWxzYV9kZXZpY2UuaCBiLzNyZHBhcnR5L3NwZWV4L3NwZWV4Y2xpZW50L2Fsc2FfZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTViMzc4NwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3NwZWV4Y2xpZW50L2Fsc2FfZGV2aWNlLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEplYW4tTWFyYyBWYWxpbgorICAgQ29weXJpZ2h0IChDKSAyMDA2IENvbW1vbndlYWx0aCBTY2llbnRpZmljIGFuZCBJbmR1c3RyaWFsIFJlc2VhcmNoCisgICAgICAgICAgICAgICAgICAgICAgT3JnYW5pc2F0aW9uIChDU0lSTykgQXVzdHJhbGlhCisgICAKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICAgbWV0OgorCisgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAgIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAgIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAgIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICAgQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAKKyovCisKKyNpZm5kZWYgQUxTQV9ERVZJQ0VfSAorI2RlZmluZSBBTFNBX0RFVklDRV9ICisKKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3N0cnVjdCBBbHNhRGV2aWNlXzsKKwordHlwZWRlZiBzdHJ1Y3QgQWxzYURldmljZV8gQWxzYURldmljZTsKKworQWxzYURldmljZSAqYWxzYV9kZXZpY2Vfb3BlbihjaGFyICpkZXZpY2VfbmFtZSwgdW5zaWduZWQgaW50IHJhdGUsIGludCBjaGFubmVscywgaW50IHBlcmlvZCk7CisKK3ZvaWQgYWxzYV9kZXZpY2VfY2xvc2UoQWxzYURldmljZSAqZGV2KTsKKworaW50IGFsc2FfZGV2aWNlX3JlYWQoQWxzYURldmljZSAqZGV2LCBzaG9ydCAqcGNtLCBpbnQgbGVuKTsKKworaW50IGFsc2FfZGV2aWNlX3dyaXRlKEFsc2FEZXZpY2UgKmRldiwgY29uc3Qgc2hvcnQgKnBjbSwgaW50IGxlbik7CisKK2ludCBhbHNhX2RldmljZV9jYXB0dXJlX3JlYWR5KEFsc2FEZXZpY2UgKmRldiwgc3RydWN0IHBvbGxmZCAqcGZkcywgdW5zaWduZWQgaW50IG5mZHMpOworCitpbnQgYWxzYV9kZXZpY2VfcGxheWJhY2tfcmVhZHkoQWxzYURldmljZSAqZGV2LCBzdHJ1Y3QgcG9sbGZkICpwZmRzLCB1bnNpZ25lZCBpbnQgbmZkcyk7CisKK3ZvaWQgYWxzYV9kZXZpY2Vfc3RhcnQoQWxzYURldmljZSAqZGV2KTsKKworaW50IGFsc2FfZGV2aWNlX25mZHMoQWxzYURldmljZSAqZGV2KTsKKwordm9pZCBhbHNhX2RldmljZV9nZXRmZHMoQWxzYURldmljZSAqZGV2LCBzdHJ1Y3QgcG9sbGZkICpwZmRzLCB1bnNpZ25lZCBpbnQgbmZkcyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvc3BlZXhjbGllbnQvY29tcGlsZS5zaCBiLzNyZHBhcnR5L3NwZWV4L3NwZWV4Y2xpZW50L2NvbXBpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTRlMTZmYwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3NwZWV4Y2xpZW50L2NvbXBpbGUuc2gKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKK2VjaG8gZ2NjIC1XYWxsIHNwZWV4Y2xpZW50LmMgYWxzYV9kZXZpY2UuYyAtbyBzcGVleGNsaWVudCAtbHNwZWV4IC1sYXNvdW5kIC1sbQorZ2NjIC1XYWxsIHNwZWV4Y2xpZW50LmMgYWxzYV9kZXZpY2UuYyAtbyBzcGVleGNsaWVudCAtbHNwZWV4IC1sYXNvdW5kIC1sbQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvc3BlZXhjbGllbnQvc3BlZXhjbGllbnQuYyBiLzNyZHBhcnR5L3NwZWV4L3NwZWV4Y2xpZW50L3NwZWV4Y2xpZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBkNTc2NAotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3NwZWV4Y2xpZW50L3NwZWV4Y2xpZW50LmMKQEAgLTAsMCArMSwyNDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IGJ5IEplYW4tTWFyYyBWYWxpbgorICAgQ29weXJpZ2h0IChDKSAyMDA2IENvbW1vbndlYWx0aCBTY2llbnRpZmljIGFuZCBJbmR1c3RyaWFsIFJlc2VhcmNoCisgICAgICAgICAgICAgICAgICAgICAgT3JnYW5pc2F0aW9uIChDU0lSTykgQXVzdHJhbGlhCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+IC8qIGNsb3NlKCkgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4gLyogbWVtc2V0KCkgKi8KKworI2luY2x1ZGUgImFsc2FfZGV2aWNlLmgiCisjaW5jbHVkZSA8c3BlZXgvc3BlZXguaD4KKyNpbmNsdWRlIDxzcGVleC9zcGVleF9qaXR0ZXIuaD4KKyNpbmNsdWRlIDxzcGVleC9zcGVleF9wcmVwcm9jZXNzLmg+CisjaW5jbHVkZSA8c3BlZXgvc3BlZXhfZWNoby5oPgorCisjaW5jbHVkZSA8c2NoZWQuaD4KKworI2RlZmluZSBNQVhfTVNHIDE1MDAKKworI2RlZmluZSBTQU1QTElOR19SQVRFIDE2MDAwCisjZGVmaW5lIEZSQU1FX1NJWkUgMzIwCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAKKyAgIGludCBzZCwgcmMsIG47CisgICBpbnQgaTsKKyAgIHN0cnVjdCBzb2NrYWRkcl9pbiBjbGlBZGRyLCByZW1vdGVBZGRyOworICAgY2hhciBtc2dbTUFYX01TR107CisgICBzdHJ1Y3QgaG9zdGVudCAqaDsKKyAgIGludCBsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDsKKyAgIGludCBuZmRzOworICAgc3RydWN0IHBvbGxmZCAqcGZkczsKKyAgIFNwZWV4UHJlcHJvY2Vzc1N0YXRlICpwcmVwcm9jZXNzOworICAgQWxzYURldmljZSAqYXVkaW9fZGV2OworICAgaW50IHRtcDsKKworICAgaWYgKGFyZ2MgIT0gNSkKKyAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAid3Jvbmcgb3B0aW9uc1xuIik7CisgICAgICBleGl0KDEpOworICAgfQorICAKKyAgIGggPSBnZXRob3N0YnluYW1lKGFyZ3ZbMl0pOworICAgaWYoaD09TlVMTCkgeworICAgICAgZnByaW50ZihzdGRlcnIsICIlczogdW5rbm93biBob3N0ICclcycgXG4iLCBhcmd2WzBdLCBhcmd2WzFdKTsKKyAgICAgIGV4aXQoMSk7CisgICB9CisKKyAgIGxvY2FsX3BvcnQgPSBhdG9pKGFyZ3ZbM10pOworICAgcmVtb3RlX3BvcnQgPSBhdG9pKGFyZ3ZbNF0pOworICAgCisgICBwcmludGYoIiVzOiBzZW5kaW5nIGRhdGEgdG8gJyVzJyAoSVAgOiAlcykgXG4iLCBhcmd2WzBdLCBoLT5oX25hbWUsCisgICAgICAgICAgaW5ldF9udG9hKCooc3RydWN0IGluX2FkZHIgKiloLT5oX2FkZHJfbGlzdFswXSkpOworCisgICB7CisgICAgICByZW1vdGVBZGRyLnNpbl9mYW1pbHkgPSBoLT5oX2FkZHJ0eXBlOworICAgICAgbWVtY3B5KChjaGFyICopICZyZW1vdGVBZGRyLnNpbl9hZGRyLnNfYWRkciwKKyAgICAgICAgICAgIGgtPmhfYWRkcl9saXN0WzBdLCBoLT5oX2xlbmd0aCk7CisgICAgICByZW1vdGVBZGRyLnNpbl9wb3J0ID0gaHRvbnMocmVtb3RlX3BvcnQpOworICAgfQorICAgLyogc29ja2V0IGNyZWF0aW9uICovCisgICBzZD1zb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CisgICBpZihzZDwwKSB7CisgICAgICBwcmludGYoIiVzOiBjYW5ub3Qgb3BlbiBzb2NrZXQgXG4iLGFyZ3ZbMF0pOworICAgICAgZXhpdCgxKTsKKyAgIH0KKworICAgLyogYmluZCBhbnkgcG9ydCAqLworICAgY2xpQWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgIGNsaUFkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisgICBjbGlBZGRyLnNpbl9wb3J0ID0gaHRvbnMobG9jYWxfcG9ydCk7CisKKyAgIHJjID0gYmluZChzZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmY2xpQWRkciwgc2l6ZW9mKGNsaUFkZHIpKTsKKyAgIGlmKHJjPDApIHsKKyAgICAgIHByaW50ZigiJXM6IGNhbm5vdCBiaW5kIHBvcnRcbiIsIGFyZ3ZbMF0pOworICAgICAgZXhpdCgxKTsKKyAgIH0KKworICAgLyogU2V0dXAgYXVkaW8gZGV2aWNlICovCisgICBhdWRpb19kZXYgPSBhbHNhX2RldmljZV9vcGVuKGFyZ3ZbMV0sIFNBTVBMSU5HX1JBVEUsIDEsIEZSQU1FX1NJWkUpOworICAgCisgICAvKiBTZXR1cCB0aGUgZW5jb2RlciBhbmQgZGVjb2RlciBpbiB3aWRlYmFuZCAqLworICAgdm9pZCAqZW5jX3N0YXRlLCAqZGVjX3N0YXRlOworICAgZW5jX3N0YXRlID0gc3BlZXhfZW5jb2Rlcl9pbml0KCZzcGVleF93Yl9tb2RlKTsKKyAgIHRtcCA9IDg7CisgICBzcGVleF9lbmNvZGVyX2N0bChlbmNfc3RhdGUsIFNQRUVYX1NFVF9RVUFMSVRZLCAmdG1wKTsKKyAgIHRtcCA9IDI7CisgICBzcGVleF9lbmNvZGVyX2N0bChlbmNfc3RhdGUsIFNQRUVYX1NFVF9DT01QTEVYSVRZLCAmdG1wKTsKKyAgIGRlY19zdGF0ZSA9IHNwZWV4X2RlY29kZXJfaW5pdCgmc3BlZXhfd2JfbW9kZSk7CisgICB0bXAgPSAxOworICAgc3BlZXhfZGVjb2Rlcl9jdGwoZGVjX3N0YXRlLCBTUEVFWF9TRVRfRU5ILCAmdG1wKTsKKyAgIFNwZWV4Qml0cyBlbmNfYml0cywgZGVjX2JpdHM7CisgICBzcGVleF9iaXRzX2luaXQoJmVuY19iaXRzKTsKKyAgIHNwZWV4X2JpdHNfaW5pdCgmZGVjX2JpdHMpOworICAgCisgICAKKyAgIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKKyAgIC8qcGFyYW0uc2NoZWRfcHJpb3JpdHkgPSA0MDsgKi8KKyAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5ID0gc2NoZWRfZ2V0X3ByaW9yaXR5X21pbihTQ0hFRF9GSUZPKTsKKyAgIGlmIChzY2hlZF9zZXRzY2hlZHVsZXIoMCxTQ0hFRF9GSUZPLCZwYXJhbSkpCisgICAgICBwZXJyb3IoInNjaGVkX3NldHNjaGVkdWxlciIpOworCisgICBpbnQgc2VuZF90aW1lc3RhbXAgPSAwOworICAgaW50IHJlY3Zfc3RhcnRlZD0wOworICAgCisgICAvKiBTZXR1cCBhbGwgZmlsZSBkZXNjcmlwdG9ycyBmb3IgcG9sbCgpaW5nICovCisgICBuZmRzID0gYWxzYV9kZXZpY2VfbmZkcyhhdWRpb19kZXYpOworICAgcGZkcyA9IG1hbGxvYyhzaXplb2YoKnBmZHMpKihuZmRzKzEpKTsKKyAgIGFsc2FfZGV2aWNlX2dldGZkcyhhdWRpb19kZXYsIHBmZHMsIG5mZHMpOworICAgcGZkc1tuZmRzXS5mZCA9IHNkOworICAgcGZkc1tuZmRzXS5ldmVudHMgPSBQT0xMSU47CisKKyAgIC8qIFNldHVwIGppdHRlciBidWZmZXIgdXNpbmcgZGVjb2RlciAqLworICAgU3BlZXhKaXR0ZXIgaml0dGVyOworICAgc3BlZXhfaml0dGVyX2luaXQoJmppdHRlciwgZGVjX3N0YXRlLCBTQU1QTElOR19SQVRFKTsKKyAgIAorICAgLyogRWNobyBjYW5jZWxsZXIgd2l0aCAyMDAgbXMgdGFpbCBsZW5ndGggKi8KKyAgIFNwZWV4RWNob1N0YXRlICplY2hvX3N0YXRlID0gc3BlZXhfZWNob19zdGF0ZV9pbml0KEZSQU1FX1NJWkUsIDEwKkZSQU1FX1NJWkUpOworICAgdG1wID0gU0FNUExJTkdfUkFURTsKKyAgIHNwZWV4X2VjaG9fY3RsKGVjaG9fc3RhdGUsIFNQRUVYX0VDSE9fU0VUX1NBTVBMSU5HX1JBVEUsICZ0bXApOworCisgICAvKiBTZXR1cCBwcmVwcm9jZXNzb3IgYW5kIGFzc29jaWF0ZSB3aXRoIGVjaG8gY2FuY2VsbGVyIGZvciByZXNpZHVhbCBlY2hvIHN1cHByZXNzaW9uICovCisgICBwcmVwcm9jZXNzID0gc3BlZXhfcHJlcHJvY2Vzc19zdGF0ZV9pbml0KEZSQU1FX1NJWkUsIFNBTVBMSU5HX1JBVEUpOworICAgc3BlZXhfcHJlcHJvY2Vzc19jdGwocHJlcHJvY2VzcywgU1BFRVhfUFJFUFJPQ0VTU19TRVRfRUNIT19TVEFURSwgZWNob19zdGF0ZSk7CisgICAKKyAgIGFsc2FfZGV2aWNlX3N0YXJ0KGF1ZGlvX2Rldik7CisgICAKKyAgIC8qIEluZmluaXRlIGxvb3Agb24gY2FwdHVyZSwgcGxheWJhY2sgYW5kIHJlY2VpdmluZyBwYWNrZXRzICovCisgICB3aGlsZSAoMSkKKyAgIHsKKyAgICAgIC8qIFdhaXQgZm9yIGVpdGhlciAxKSBjYXB0dXJlIDIpIHBsYXliYWNrIDMpIHNvY2tldCBkYXRhICovCisgICAgICBwb2xsKHBmZHMsIG5mZHMrMSwgLTEpOworICAgICAgLyogUmVjZWl2ZWQgcGFja2V0cyAqLworICAgICAgaWYgKHBmZHNbbmZkc10ucmV2ZW50cyAmIFBPTExJTikKKyAgICAgIHsKKyAgICAgICAgIC8qZnByaW50ZiAoc3RkZXJyLCAieCIpOyovCisgICAgICAgICBuID0gcmVjdihzZCwgbXNnLCBNQVhfTVNHLCAwKTsKKyAgICAgICAgIGludCByZWN2X3RpbWVzdGFtcCA9ICgoaW50Kiltc2cpWzFdOworICAgICAgICAgaW50IHBheWxvYWQgPSAoKGludCopbXNnKVswXTsKKyAgIAorICAgICAgICAgaWYgKChwYXlsb2FkICYgMHg4MDAwMDAwMCkgPT0gMCkgCisgICAgICAgICB7CisgICAgICAgICAgICAvKiBQdXQgY29udGVudCBvZiB0aGUgcGFja2V0IGludG8gdGhlIGppdHRlciBidWZmZXIsIGV4Y2VwdCBmb3IgdGhlIHBzZXVkby1oZWFkZXIgKi8KKyAgICAgICAgICAgIHNwZWV4X2ppdHRlcl9wdXQoJmppdHRlciwgbXNnKzgsIG4tOCwgcmVjdl90aW1lc3RhbXApOworICAgICAgICAgICAgcmVjdl9zdGFydGVkID0gMTsKKyAgICAgICAgIH0KKworICAgICAgfQorICAgICAgLyogUmVhZHkgdG8gcGxheSBhIGZyYW1lIChwbGF5YmFjaykgKi8KKyAgICAgIGlmIChhbHNhX2RldmljZV9wbGF5YmFja19yZWFkeShhdWRpb19kZXYsIHBmZHMsIG5mZHMpKQorICAgICAgeworICAgICAgICAgc2hvcnQgcGNtW0ZSQU1FX1NJWkVdOworICAgICAgICAgaWYgKHJlY3Zfc3RhcnRlZCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEdldCBhdWRpbyBmcm9tIHRoZSBqaXR0ZXIgYnVmZmVyICovCisgICAgICAgICAgICBzcGVleF9qaXR0ZXJfZ2V0KCZqaXR0ZXIsIHBjbSwgTlVMTCk7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChpPTA7aTxGUkFNRV9TSVpFO2krKykKKyAgICAgICAgICAgICAgIHBjbVtpXSA9IDA7CisgICAgICAgICB9CisgICAgICAgICAvKiBQbGF5YmFjayB0aGUgYXVkaW8gYW5kIHJlc2V0IHRoZSBlY2hvIGNhbmNlbGxlciBpZiB3ZSBnb3QgYW4gdW5kZXJydW4gKi8KKyAgICAgICAgIGlmIChhbHNhX2RldmljZV93cml0ZShhdWRpb19kZXYsIHBjbSwgRlJBTUVfU0laRSkpCisgICAgICAgICAgICBzcGVleF9lY2hvX3N0YXRlX3Jlc2V0KGVjaG9fc3RhdGUpOworICAgICAgICAgLyogUHV0IGZyYW1lIGludG8gcGxheWJhY2sgYnVmZmVyICovCisgICAgICAgICBzcGVleF9lY2hvX3BsYXliYWNrKGVjaG9fc3RhdGUsIHBjbSk7CisgICAgICB9CisgICAgICAvKiBBdWRpbyBhdmFpbGFibGUgZnJvbSB0aGUgc291bmRjYXJkIChjYXB0dXJlKSAqLworICAgICAgaWYgKGFsc2FfZGV2aWNlX2NhcHR1cmVfcmVhZHkoYXVkaW9fZGV2LCBwZmRzLCBuZmRzKSkKKyAgICAgIHsKKyAgICAgICAgIHNob3J0IHBjbVtGUkFNRV9TSVpFXSwgcGNtMltGUkFNRV9TSVpFXTsKKyAgICAgICAgIGNoYXIgb3V0cGFja2V0W01BWF9NU0ddOworICAgICAgICAgLyogR2V0IGF1ZGlvIGZyb20gdGhlIHNvdW5kY2FyZCAqLworICAgICAgICAgYWxzYV9kZXZpY2VfcmVhZChhdWRpb19kZXYsIHBjbSwgRlJBTUVfU0laRSk7CisgICAgICAgICAKKyAgICAgICAgIC8qIFBlcmZvcm0gZWNobyBjYW5jZWxsYXRpb24gKi8KKyAgICAgICAgIHNwZWV4X2VjaG9fY2FwdHVyZShlY2hvX3N0YXRlLCBwY20sIHBjbTIpOworICAgICAgICAgZm9yIChpPTA7aTxGUkFNRV9TSVpFO2krKykKKyAgICAgICAgICAgIHBjbVtpXSA9IHBjbTJbaV07CisgICAgICAgICAKKyAgICAgICAgIHNwZWV4X2JpdHNfcmVzZXQoJmVuY19iaXRzKTsKKyAgICAgICAgIAorICAgICAgICAgLyogQXBwbHkgbm9pc2UvZWNobyBzdXBwcmVzc2lvbiAqLworICAgICAgICAgc3BlZXhfcHJlcHJvY2Vzc19ydW4ocHJlcHJvY2VzcywgcGNtKTsKKyAgICAgICAgIAorICAgICAgICAgLyogRW5jb2RlICovCisgICAgICAgICBzcGVleF9lbmNvZGVfaW50KGVuY19zdGF0ZSwgcGNtLCAmZW5jX2JpdHMpOworICAgICAgICAgaW50IHBhY2tldFNpemUgPSBzcGVleF9iaXRzX3dyaXRlKCZlbmNfYml0cywgb3V0cGFja2V0KzgsIE1BWF9NU0cpOworICAgICAgICAgCisgICAgICAgICAvKiBQc2V1ZG8gaGVhZGVyOiBmb3VyIG51bGwgYnl0ZXMgYW5kIGEgMzItYml0IHRpbWVzdGFtcCAqLworICAgICAgICAgKChpbnQqKW91dHBhY2tldClbMF0gPSBodG9ubCgwKTsKKyAgICAgICAgICgoaW50KilvdXRwYWNrZXQpWzFdID0gc2VuZF90aW1lc3RhbXA7CisgICAgICAgICBzZW5kX3RpbWVzdGFtcCArPSBGUkFNRV9TSVpFOworICAgICAgICAgcmMgPSBzZW5kdG8oc2QsIG91dHBhY2tldCwgcGFja2V0U2l6ZSs4LCAwLAorICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJlbW90ZUFkZHIsCisgICAgICAgICAgICAgICAgc2l6ZW9mKHJlbW90ZUFkZHIpKTsKKyAgICAgICAgIAorICAgICAgICAgaWYocmM8MCkgeworICAgICAgICAgICAgcHJpbnRmKCJjYW5ub3Qgc2VuZCBhdWRpbyBkYXRhXG4iKTsKKyAgICAgICAgICAgIGNsb3NlKHNkKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICB9CisgICAgICB9CisgICAgICAKKworICAgfQorCisKKyAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvc3JjLy5jdnNpZ25vcmUgYi8zcmRwYXJ0eS9zcGVleC9zcmMvLmN2c2lnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTk1NTg4Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvc3JjLy5jdnNpZ25vcmUKQEAgLTAsMCArMSwzIEBACisuZGVwcworTWFrZWZpbGUKK01ha2VmaWxlLmluCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9zcmMvTWFrZWZpbGUuYW0gYi8zcmRwYXJ0eS9zcGVleC9zcmMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVmNjFiMgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3NyYy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDI2IEBACisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4uIC0qLU1ha2VmaWxlLSotCisKKyMgJElkOiBNYWtlZmlsZS5hbSx2IDEuMTEgMjAwNC8wMi8xOCAwNjo1OTo0MCBqbSBFeHAgJAorCisjIERpc2FibGUgYXV0b21hdGljIGRlcGVuZGVuY3kgdHJhY2tpbmcgaWYgdXNpbmcgb3RoZXIgdG9vbHMgdGhhbiBnY2MgYW5kIGdtYWtlCisjQVVUT01BS0VfT1BUSU9OUyA9IG5vLWRlcGVuZGVuY2llcworCitJTkNMVURFUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUgLUkkKHRvcF9idWlsZGRpcikgQE9HR19DRkxBR1NACisKK21hbmRpciA9ICQocHJlZml4KS9zaGFyZS9tYW4KK21hbl9NQU5TID0gc3BlZXhlbmMuMSBzcGVleGRlYy4xCisKK0VYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKSBnZXRvcHRfd2luLmggZ2V0b3B0LmMgZ2V0b3B0MS5jIHdhdmVfb3V0LmMgd2F2ZV9vdXQuaCBza2VsZXRvbi5oCisKK2luY2x1ZGVfSEVBREVSUyA9IAorbm9pbnN0X0hFQURFUlMgPSB3YXZfaW8uaAorCitiaW5fUFJPR1JBTVMgPSBzcGVleGVuYyBzcGVleGRlYworCitzcGVleGVuY19TT1VSQ0VTID0gc3BlZXhlbmMuYyB3YXZfaW8uYyBza2VsZXRvbi5jCitzcGVleGVuY19MREFERCA9ICQodG9wX2J1aWxkZGlyKS9saWJzcGVleC9saWJzcGVleC5sYSBcCisJJChPR0dfTElCUykKKworc3BlZXhkZWNfU09VUkNFUyA9IHNwZWV4ZGVjLmMgd2F2X2lvLmMKK3NwZWV4ZGVjX0xEQUREID0gJCh0b3BfYnVpbGRkaXIpL2xpYnNwZWV4L2xpYnNwZWV4LmxhIFwKKwkkKE9HR19MSUJTKQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvc3JjL2dldG9wdC5jIGIvM3JkcGFydHkvc3BlZXgvc3JjL2dldG9wdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZDI1YjYKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9zcmMvZ2V0b3B0LmMKQEAgLTAsMCArMSwxMDQ3IEBACisvKiBHZXRvcHQgZm9yIEdOVS4KKyAgIE5PVEU6IGdldG9wdCBpcyBub3cgcGFydCBvZiB0aGUgQyBsaWJyYXJ5LCBzbyBpZiB5b3UgZG9uJ3Qga25vdyB3aGF0CisgICAiS2VlcCB0aGlzIGZpbGUgbmFtZS1zcGFjZSBjbGVhbiIgbWVhbnMsIHRhbGsgdG8gZHJlcHBlckBnbnUub3JnCisgICBiZWZvcmUgY2hhbmdpbmcgaXQhCisKKyAgIENvcHlyaWdodCAoQykgMTk4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTcsIDk4LCA5OQorICAgCUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKyAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworLyogVGhpcyB0ZWxscyBBbHBoYSBPU0YvMSBub3QgdG8gZGVmaW5lIGEgZ2V0b3B0IHByb3RvdHlwZSBpbiA8c3RkaW8uaD4uCisgICBEaXR0byBmb3IgQUlYIDMuMiBhbmQgPHN0ZGxpYi5oPi4gICovCisjaWZuZGVmIF9OT19QUk9UTworIyBkZWZpbmUgX05PX1BST1RPCisjZW5kaWYKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2lmICFkZWZpbmVkIF9fU1REQ19fIHx8ICFfX1NURENfXworLyogVGhpcyBpcyBhIHNlcGFyYXRlIGNvbmRpdGlvbmFsIHNpbmNlIHNvbWUgc3RkYyBzeXN0ZW1zCisgICByZWplY3QgYGRlZmluZWQgKGNvbnN0KScuICAqLworIyBpZm5kZWYgY29uc3QKKyMgIGRlZmluZSBjb25zdAorIyBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKiBDb21tZW50IG91dCBhbGwgdGhpcyBjb2RlIGlmIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgTGlicmFyeSwgYW5kIGFyZSBub3QKKyAgIGFjdHVhbGx5IGNvbXBpbGluZyB0aGUgbGlicmFyeSBpdHNlbGYuICBUaGlzIGNvZGUgaXMgcGFydCBvZiB0aGUgR05VIEMKKyAgIExpYnJhcnksIGJ1dCBhbHNvIGluY2x1ZGVkIGluIG1hbnkgb3RoZXIgR05VIGRpc3RyaWJ1dGlvbnMuICBDb21waWxpbmcKKyAgIGFuZCBsaW5raW5nIGluIHRoaXMgY29kZSBpcyBhIHdhc3RlIHdoZW4gdXNpbmcgdGhlIEdOVSBDIGxpYnJhcnkKKyAgIChlc3BlY2lhbGx5IGlmIGl0IGlzIGEgc2hhcmVkIGxpYnJhcnkpLiAgUmF0aGVyIHRoYW4gaGF2aW5nIGV2ZXJ5IEdOVQorICAgcHJvZ3JhbSB1bmRlcnN0YW5kIGBjb25maWd1cmUgLS13aXRoLWdudS1saWJjJyBhbmQgb21pdCB0aGUgb2JqZWN0IGZpbGVzLAorICAgaXQgaXMgc2ltcGxlciB0byBqdXN0IGRvIHRoaXMgaW4gdGhlIHNvdXJjZSBmb3IgZWFjaCBzdWNoIGZpbGUuICAqLworCisjZGVmaW5lIEdFVE9QVF9JTlRFUkZBQ0VfVkVSU0lPTiAyCisjaWYgIWRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBfX0dMSUJDX18gJiYgX19HTElCQ19fID49IDIKKyMgaW5jbHVkZSA8Z251LXZlcnNpb25zLmg+CisjIGlmIF9HTlVfR0VUT1BUX0lOVEVSRkFDRV9WRVJTSU9OID09IEdFVE9QVF9JTlRFUkZBQ0VfVkVSU0lPTgorIyAgZGVmaW5lIEVMSURFX0NPREUKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIEVMSURFX0NPREUKKworCisvKiBUaGlzIG5lZWRzIHRvIGNvbWUgYWZ0ZXIgc29tZSBsaWJyYXJ5ICNpbmNsdWRlCisgICB0byBnZXQgX19HTlVfTElCUkFSWV9fIGRlZmluZWQuICAqLworI2lmZGVmCV9fR05VX0xJQlJBUllfXworLyogRG9uJ3QgaW5jbHVkZSBzdGRsaWIuaCBmb3Igbm9uLUdOVSBDIGxpYnJhcmllcyBiZWNhdXNlIHNvbWUgb2YgdGhlbQorICAgY29udGFpbiBjb25mbGljdGluZyBwcm90b3R5cGVzIGZvciBnZXRvcHQuICAqLworIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYJLyogR05VIEMgbGlicmFyeS4gICovCisKKyNpZmRlZiBWTVMKKyMgaW5jbHVkZSA8dW5peGxpYi5oPgorIyBpZiBIQVZFX1NUUklOR19IIC0gMAorIyAgaW5jbHVkZSA8c3RyaW5nLmg+CisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBfCisvKiBUaGlzIGlzIGZvciBvdGhlciBHTlUgZGlzdHJpYnV0aW9ucyB3aXRoIGludGVybmF0aW9uYWxpemVkIG1lc3NhZ2VzLgorICAgV2hlbiBjb21waWxpbmcgbGliYywgdGhlIF8gbWFjcm8gaXMgcHJlZGVmaW5lZC4gICovCisjIGlmZGVmIEhBVkVfTElCSU5UTF9ICisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBkZWZpbmUgXyhtc2dpZCkJZ2V0dGV4dCAobXNnaWQpCisjIGVsc2UKKyMgIGRlZmluZSBfKG1zZ2lkKQkobXNnaWQpCisjIGVuZGlmCisjZW5kaWYKKworLyogVGhpcyB2ZXJzaW9uIG9mIGBnZXRvcHQnIGFwcGVhcnMgdG8gdGhlIGNhbGxlciBsaWtlIHN0YW5kYXJkIFVuaXggYGdldG9wdCcKKyAgIGJ1dCBpdCBiZWhhdmVzIGRpZmZlcmVudGx5IGZvciB0aGUgdXNlciwgc2luY2UgaXQgYWxsb3dzIHRoZSB1c2VyCisgICB0byBpbnRlcnNwZXJzZSB0aGUgb3B0aW9ucyB3aXRoIHRoZSBvdGhlciBhcmd1bWVudHMuCisKKyAgIEFzIGBnZXRvcHQnIHdvcmtzLCBpdCBwZXJtdXRlcyB0aGUgZWxlbWVudHMgb2YgQVJHViBzbyB0aGF0LAorICAgd2hlbiBpdCBpcyBkb25lLCBhbGwgdGhlIG9wdGlvbnMgcHJlY2VkZSBldmVyeXRoaW5nIGVsc2UuICBUaHVzCisgICBhbGwgYXBwbGljYXRpb24gcHJvZ3JhbXMgYXJlIGV4dGVuZGVkIHRvIGhhbmRsZSBmbGV4aWJsZSBhcmd1bWVudCBvcmRlci4KKworICAgU2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUE9TSVhMWV9DT1JSRUNUIGRpc2FibGVzIHBlcm11dGF0aW9uLgorICAgVGhlbiB0aGUgYmVoYXZpb3IgaXMgY29tcGxldGVseSBzdGFuZGFyZC4KKworICAgR05VIGFwcGxpY2F0aW9uIHByb2dyYW1zIGNhbiB1c2UgYSB0aGlyZCBhbHRlcm5hdGl2ZSBtb2RlIGluIHdoaWNoCisgICB0aGV5IGNhbiBkaXN0aW5ndWlzaCB0aGUgcmVsYXRpdmUgb3JkZXIgb2Ygb3B0aW9ucyBhbmQgb3RoZXIgYXJndW1lbnRzLiAgKi8KKworI2luY2x1ZGUgImdldG9wdF93aW4uaCIKKworLyogRm9yIGNvbW11bmljYXRpb24gZnJvbSBgZ2V0b3B0JyB0byB0aGUgY2FsbGVyLgorICAgV2hlbiBgZ2V0b3B0JyBmaW5kcyBhbiBvcHRpb24gdGhhdCB0YWtlcyBhbiBhcmd1bWVudCwKKyAgIHRoZSBhcmd1bWVudCB2YWx1ZSBpcyByZXR1cm5lZCBoZXJlLgorICAgQWxzbywgd2hlbiBgb3JkZXJpbmcnIGlzIFJFVFVSTl9JTl9PUkRFUiwKKyAgIGVhY2ggbm9uLW9wdGlvbiBBUkdWLWVsZW1lbnQgaXMgcmV0dXJuZWQgaGVyZS4gICovCisKK2NoYXIgKm9wdGFyZzsKKworLyogSW5kZXggaW4gQVJHViBvZiB0aGUgbmV4dCBlbGVtZW50IHRvIGJlIHNjYW5uZWQuCisgICBUaGlzIGlzIHVzZWQgZm9yIGNvbW11bmljYXRpb24gdG8gYW5kIGZyb20gdGhlIGNhbGxlcgorICAgYW5kIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gc3VjY2Vzc2l2ZSBjYWxscyB0byBgZ2V0b3B0Jy4KKworICAgT24gZW50cnkgdG8gYGdldG9wdCcsIHplcm8gbWVhbnMgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbDsgaW5pdGlhbGl6ZS4KKworICAgV2hlbiBgZ2V0b3B0JyByZXR1cm5zIC0xLCB0aGlzIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb2YgdGhlCisgICBub24tb3B0aW9uIGVsZW1lbnRzIHRoYXQgdGhlIGNhbGxlciBzaG91bGQgaXRzZWxmIHNjYW4uCisKKyAgIE90aGVyd2lzZSwgYG9wdGluZCcgY29tbXVuaWNhdGVzIGZyb20gb25lIGNhbGwgdG8gdGhlIG5leHQKKyAgIGhvdyBtdWNoIG9mIEFSR1YgaGFzIGJlZW4gc2Nhbm5lZCBzbyBmYXIuICAqLworCisvKiAxMDAzLjIgc2F5cyB0aGlzIG11c3QgYmUgMSBiZWZvcmUgYW55IGNhbGwuICAqLworaW50IG9wdGluZCA9IDE7CisKKy8qIEZvcm1lcmx5LCBpbml0aWFsaXphdGlvbiBvZiBnZXRvcHQgZGVwZW5kZWQgb24gb3B0aW5kPT0wLCB3aGljaAorICAgY2F1c2VzIHByb2JsZW1zIHdpdGggcmUtY2FsbGluZyBnZXRvcHQgYXMgcHJvZ3JhbXMgZ2VuZXJhbGx5IGRvbid0CisgICBrbm93IHRoYXQuICovCisKK2ludCBfX2dldG9wdF9pbml0aWFsaXplZDsKKworLyogVGhlIG5leHQgY2hhciB0byBiZSBzY2FubmVkIGluIHRoZSBvcHRpb24tZWxlbWVudAorICAgaW4gd2hpY2ggdGhlIGxhc3Qgb3B0aW9uIGNoYXJhY3RlciB3ZSByZXR1cm5lZCB3YXMgZm91bmQuCisgICBUaGlzIGFsbG93cyB1cyB0byBwaWNrIHVwIHRoZSBzY2FuIHdoZXJlIHdlIGxlZnQgb2ZmLgorCisgICBJZiB0aGlzIGlzIHplcm8sIG9yIGEgbnVsbCBzdHJpbmcsIGl0IG1lYW5zIHJlc3VtZSB0aGUgc2NhbgorICAgYnkgYWR2YW5jaW5nIHRvIHRoZSBuZXh0IEFSR1YtZWxlbWVudC4gICovCisKK3N0YXRpYyBjaGFyICpuZXh0Y2hhcjsKKworLyogQ2FsbGVycyBzdG9yZSB6ZXJvIGhlcmUgdG8gaW5oaWJpdCB0aGUgZXJyb3IgbWVzc2FnZQorICAgZm9yIHVucmVjb2duaXplZCBvcHRpb25zLiAgKi8KKworaW50IG9wdGVyciA9IDE7CisKKy8qIFNldCB0byBhbiBvcHRpb24gY2hhcmFjdGVyIHdoaWNoIHdhcyB1bnJlY29nbml6ZWQuCisgICBUaGlzIG11c3QgYmUgaW5pdGlhbGl6ZWQgb24gc29tZSBzeXN0ZW1zIHRvIGF2b2lkIGxpbmtpbmcgaW4gdGhlCisgICBzeXN0ZW0ncyBvd24gZ2V0b3B0IGltcGxlbWVudGF0aW9uLiAgKi8KKworaW50IG9wdG9wdCA9ICc/JzsKKworLyogRGVzY3JpYmUgaG93IHRvIGRlYWwgd2l0aCBvcHRpb25zIHRoYXQgZm9sbG93IG5vbi1vcHRpb24gQVJHVi1lbGVtZW50cy4KKworICAgSWYgdGhlIGNhbGxlciBkaWQgbm90IHNwZWNpZnkgYW55dGhpbmcsCisgICB0aGUgZGVmYXVsdCBpcyBSRVFVSVJFX09SREVSIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgUE9TSVhMWV9DT1JSRUNUIGlzIGRlZmluZWQsIFBFUk1VVEUgb3RoZXJ3aXNlLgorCisgICBSRVFVSVJFX09SREVSIG1lYW5zIGRvbid0IHJlY29nbml6ZSB0aGVtIGFzIG9wdGlvbnM7CisgICBzdG9wIG9wdGlvbiBwcm9jZXNzaW5nIHdoZW4gdGhlIGZpcnN0IG5vbi1vcHRpb24gaXMgc2Vlbi4KKyAgIFRoaXMgaXMgd2hhdCBVbml4IGRvZXMuCisgICBUaGlzIG1vZGUgb2Ygb3BlcmF0aW9uIGlzIHNlbGVjdGVkIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudAorICAgdmFyaWFibGUgUE9TSVhMWV9DT1JSRUNULCBvciB1c2luZyBgKycgYXMgdGhlIGZpcnN0IGNoYXJhY3RlcgorICAgb2YgdGhlIGxpc3Qgb2Ygb3B0aW9uIGNoYXJhY3RlcnMuCisKKyAgIFBFUk1VVEUgaXMgdGhlIGRlZmF1bHQuICBXZSBwZXJtdXRlIHRoZSBjb250ZW50cyBvZiBBUkdWIGFzIHdlIHNjYW4sCisgICBzbyB0aGF0IGV2ZW50dWFsbHkgYWxsIHRoZSBub24tb3B0aW9ucyBhcmUgYXQgdGhlIGVuZC4gIFRoaXMgYWxsb3dzIG9wdGlvbnMKKyAgIHRvIGJlIGdpdmVuIGluIGFueSBvcmRlciwgZXZlbiB3aXRoIHByb2dyYW1zIHRoYXQgd2VyZSBub3Qgd3JpdHRlbiB0bworICAgZXhwZWN0IHRoaXMuCisKKyAgIFJFVFVSTl9JTl9PUkRFUiBpcyBhbiBvcHRpb24gYXZhaWxhYmxlIHRvIHByb2dyYW1zIHRoYXQgd2VyZSB3cml0dGVuCisgICB0byBleHBlY3Qgb3B0aW9ucyBhbmQgb3RoZXIgQVJHVi1lbGVtZW50cyBpbiBhbnkgb3JkZXIgYW5kIHRoYXQgY2FyZSBhYm91dAorICAgdGhlIG9yZGVyaW5nIG9mIHRoZSB0d28uICBXZSBkZXNjcmliZSBlYWNoIG5vbi1vcHRpb24gQVJHVi1lbGVtZW50CisgICBhcyBpZiBpdCB3ZXJlIHRoZSBhcmd1bWVudCBvZiBhbiBvcHRpb24gd2l0aCBjaGFyYWN0ZXIgY29kZSAxLgorICAgVXNpbmcgYC0nIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGxpc3Qgb2Ygb3B0aW9uIGNoYXJhY3RlcnMKKyAgIHNlbGVjdHMgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbi4KKworICAgVGhlIHNwZWNpYWwgYXJndW1lbnQgYC0tJyBmb3JjZXMgYW4gZW5kIG9mIG9wdGlvbi1zY2FubmluZyByZWdhcmRsZXNzCisgICBvZiB0aGUgdmFsdWUgb2YgYG9yZGVyaW5nJy4gIEluIHRoZSBjYXNlIG9mIFJFVFVSTl9JTl9PUkRFUiwgb25seQorICAgYC0tJyBjYW4gY2F1c2UgYGdldG9wdCcgdG8gcmV0dXJuIC0xIHdpdGggYG9wdGluZCcgIT0gQVJHQy4gICovCisKK3N0YXRpYyBlbnVtCit7CisgIFJFUVVJUkVfT1JERVIsIFBFUk1VVEUsIFJFVFVSTl9JTl9PUkRFUgorfSBvcmRlcmluZzsKKworLyogVmFsdWUgb2YgUE9TSVhMWV9DT1JSRUNUIGVudmlyb25tZW50IHZhcmlhYmxlLiAgKi8KK3N0YXRpYyBjaGFyICpwb3NpeGx5X2NvcnJlY3Q7CisMCisjaWZkZWYJX19HTlVfTElCUkFSWV9fCisvKiBXZSB3YW50IHRvIGF2b2lkIGluY2x1c2lvbiBvZiBzdHJpbmcuaCB3aXRoIG5vbi1HTlUgbGlicmFyaWVzCisgICBiZWNhdXNlIHRoZXJlIGFyZSBtYW55IHdheXMgaXQgY2FuIGNhdXNlIHRyb3VibGUuCisgICBPbiBzb21lIHN5c3RlbXMsIGl0IGNvbnRhaW5zIHNwZWNpYWwgbWFnaWMgbWFjcm9zIHRoYXQgZG9uJ3Qgd29yaworICAgaW4gR0NDLiAgKi8KKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisjIGRlZmluZSBteV9pbmRleAlzdHJjaHIKKyNlbHNlCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogQXZvaWQgZGVwZW5kaW5nIG9uIGxpYnJhcnkgZnVuY3Rpb25zIG9yIGZpbGVzCisgICB3aG9zZSBuYW1lcyBhcmUgaW5jb25zaXN0ZW50LiAgKi8KKworI2lmbmRlZiBnZXRlbnYKK2V4dGVybiBjaGFyICpnZXRlbnYgKCk7CisjZW5kaWYKKworc3RhdGljIGNoYXIgKgorbXlfaW5kZXggKHN0ciwgY2hyKQorICAgICBjb25zdCBjaGFyICpzdHI7CisgICAgIGludCBjaHI7Cit7CisgIHdoaWxlICgqc3RyKQorICAgIHsKKyAgICAgIGlmICgqc3RyID09IGNocikKKwlyZXR1cm4gKGNoYXIgKikgc3RyOworICAgICAgc3RyKys7CisgICAgfQorICByZXR1cm4gMDsKK30KKworLyogSWYgdXNpbmcgR0NDLCB3ZSBjYW4gc2FmZWx5IGRlY2xhcmUgc3RybGVuIHRoaXMgd2F5LgorICAgSWYgbm90IHVzaW5nIEdDQywgaXQgaXMgb2sgbm90IHRvIGRlY2xhcmUgaXQuICAqLworI2lmZGVmIF9fR05VQ19fCisvKiBOb3RlIHRoYXQgTW90b3JvbGEgRGVsdGEgNjhrIFIzVjcgY29tZXMgd2l0aCBHQ0MgYnV0IG5vdCBzdGRkZWYuaC4KKyAgIFRoYXQgd2FzIHJlbGV2YW50IHRvIGNvZGUgdGhhdCB3YXMgaGVyZSBiZWZvcmUuICAqLworIyBpZiAoIWRlZmluZWQgX19TVERDX18gfHwgIV9fU1REQ19fKSAmJiAhZGVmaW5lZCBzdHJsZW4KKy8qIGdjYyB3aXRoIC10cmFkaXRpb25hbCBkZWNsYXJlcyB0aGUgYnVpbHQtaW4gc3RybGVuIHRvIHJldHVybiBpbnQsCisgICBhbmQgaGFzIGRvbmUgc28gYXQgbGVhc3Qgc2luY2UgdmVyc2lvbiAyLjQuNS4gLS0gcm1zLiAgKi8KK2V4dGVybiBpbnQgc3RybGVuIChjb25zdCBjaGFyICopOworIyBlbmRpZiAvKiBub3QgX19TVERDX18gKi8KKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworCisjZW5kaWYgLyogbm90IF9fR05VX0xJQlJBUllfXyAqLworDAorLyogSGFuZGxlIHBlcm11dGF0aW9uIG9mIGFyZ3VtZW50cy4gICovCisKKy8qIERlc2NyaWJlIHRoZSBwYXJ0IG9mIEFSR1YgdGhhdCBjb250YWlucyBub24tb3B0aW9ucyB0aGF0IGhhdmUKKyAgIGJlZW4gc2tpcHBlZC4gIGBmaXJzdF9ub25vcHQnIGlzIHRoZSBpbmRleCBpbiBBUkdWIG9mIHRoZSBmaXJzdCBvZiB0aGVtOworICAgYGxhc3Rfbm9ub3B0JyBpcyB0aGUgaW5kZXggYWZ0ZXIgdGhlIGxhc3Qgb2YgdGhlbS4gICovCisKK3N0YXRpYyBpbnQgZmlyc3Rfbm9ub3B0Oworc3RhdGljIGludCBsYXN0X25vbm9wdDsKKworI2lmZGVmIF9MSUJDCisvKiBCYXNoIDIuMCBnaXZlcyB1cyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb250YWluaW5nIGZsYWdzCisgICBpbmRpY2F0aW5nIEFSR1YgZWxlbWVudHMgdGhhdCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgYXJndW1lbnRzLiAgKi8KKworLyogRGVmaW5lZCBpbiBnZXRvcHRfaW5pdC5jICAqLworZXh0ZXJuIGNoYXIgKl9fZ2V0b3B0X25vbm9wdGlvbl9mbGFnczsKKworc3RhdGljIGludCBub25vcHRpb25fZmxhZ3NfbWF4X2xlbjsKK3N0YXRpYyBpbnQgbm9ub3B0aW9uX2ZsYWdzX2xlbjsKKworc3RhdGljIGludCBvcmlnaW5hbF9hcmdjOworc3RhdGljIGNoYXIgKmNvbnN0ICpvcmlnaW5hbF9hcmd2OworCisvKiBNYWtlIHN1cmUgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGJhc2ggMi4wIHB1dHMgaW4gdGhlIGVudmlyb25tZW50CisgICBpcyB2YWxpZCBmb3IgdGhlIGdldG9wdCBjYWxsIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIEFSR1YgcGFzc2VkCisgICB0byBnZXRvcHQgaXMgdGhhdCBvbmUgcGFzc2VkIHRvIHRoZSBwcm9jZXNzLiAgKi8KK3N0YXRpYyB2b2lkCitfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKK3N0b3JlX2FyZ3NfYW5kX2VudiAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2KQoreworICAvKiBYWFggVGhpcyBpcyBubyBnb29kIHNvbHV0aW9uLiAgV2Ugc2hvdWxkIHJhdGhlciBjb3B5IHRoZSBhcmdzIHNvCisgICAgIHRoYXQgd2UgY2FuIGNvbXBhcmUgdGhlbSBsYXRlci4gIEJ1dCB3ZSBtdXN0IG5vdCB1c2UgbWFsbG9jKDMpLiAgKi8KKyAgb3JpZ2luYWxfYXJnYyA9IGFyZ2M7CisgIG9yaWdpbmFsX2FyZ3YgPSBhcmd2OworfQorIyBpZmRlZiB0ZXh0X3NldF9lbGVtZW50Cit0ZXh0X3NldF9lbGVtZW50IChfX2xpYmNfc3ViaW5pdCwgc3RvcmVfYXJnc19hbmRfZW52KTsKKyMgZW5kaWYgLyogdGV4dF9zZXRfZWxlbWVudCAqLworCisjIGRlZmluZSBTV0FQX0ZMQUdTKGNoMSwgY2gyKSBcCisgIGlmIChub25vcHRpb25fZmxhZ3NfbGVuID4gMCkJCQkJCQkgICAgICBcCisgICAgewkJCQkJCQkJCSAgICAgIFwKKyAgICAgIGNoYXIgX190bXAgPSBfX2dldG9wdF9ub25vcHRpb25fZmxhZ3NbY2gxXTsJCQkgICAgICBcCisgICAgICBfX2dldG9wdF9ub25vcHRpb25fZmxhZ3NbY2gxXSA9IF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFnc1tjaDJdOwkgICAgICBcCisgICAgICBfX2dldG9wdF9ub25vcHRpb25fZmxhZ3NbY2gyXSA9IF9fdG1wOwkJCQkgICAgICBcCisgICAgfQorI2Vsc2UJLyogIV9MSUJDICovCisjIGRlZmluZSBTV0FQX0ZMQUdTKGNoMSwgY2gyKQorI2VuZGlmCS8qIF9MSUJDICovCisKKy8qIEV4Y2hhbmdlIHR3byBhZGphY2VudCBzdWJzZXF1ZW5jZXMgb2YgQVJHVi4KKyAgIE9uZSBzdWJzZXF1ZW5jZSBpcyBlbGVtZW50cyBbZmlyc3Rfbm9ub3B0LGxhc3Rfbm9ub3B0KQorICAgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBub24tb3B0aW9ucyB0aGF0IGhhdmUgYmVlbiBza2lwcGVkIHNvIGZhci4KKyAgIFRoZSBvdGhlciBpcyBlbGVtZW50cyBbbGFzdF9ub25vcHQsb3B0aW5kKSwgd2hpY2ggY29udGFpbnMgYWxsCisgICB0aGUgb3B0aW9ucyBwcm9jZXNzZWQgc2luY2UgdGhvc2Ugbm9uLW9wdGlvbnMgd2VyZSBza2lwcGVkLgorCisgICBgZmlyc3Rfbm9ub3B0JyBhbmQgYGxhc3Rfbm9ub3B0JyBhcmUgcmVsb2NhdGVkIHNvIHRoYXQgdGhleSBkZXNjcmliZQorICAgdGhlIG5ldyBpbmRpY2VzIG9mIHRoZSBub24tb3B0aW9ucyBpbiBBUkdWIGFmdGVyIHRoZXkgYXJlIG1vdmVkLiAgKi8KKworI2lmIGRlZmluZWQgX19TVERDX18gJiYgX19TVERDX18KK3N0YXRpYyB2b2lkIGV4Y2hhbmdlIChjaGFyICoqKTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZAorZXhjaGFuZ2UgKGFyZ3YpCisgICAgIGNoYXIgKiphcmd2OworeworICBpbnQgYm90dG9tID0gZmlyc3Rfbm9ub3B0OworICBpbnQgbWlkZGxlID0gbGFzdF9ub25vcHQ7CisgIGludCB0b3AgPSBvcHRpbmQ7CisgIGNoYXIgKnRlbTsKKworICAvKiBFeGNoYW5nZSB0aGUgc2hvcnRlciBzZWdtZW50IHdpdGggdGhlIGZhciBlbmQgb2YgdGhlIGxvbmdlciBzZWdtZW50LgorICAgICBUaGF0IHB1dHMgdGhlIHNob3J0ZXIgc2VnbWVudCBpbnRvIHRoZSByaWdodCBwbGFjZS4KKyAgICAgSXQgbGVhdmVzIHRoZSBsb25nZXIgc2VnbWVudCBpbiB0aGUgcmlnaHQgcGxhY2Ugb3ZlcmFsbCwKKyAgICAgYnV0IGl0IGNvbnNpc3RzIG9mIHR3byBwYXJ0cyB0aGF0IG5lZWQgdG8gYmUgc3dhcHBlZCBuZXh0LiAgKi8KKworI2lmZGVmIF9MSUJDCisgIC8qIEZpcnN0IG1ha2Ugc3VyZSB0aGUgaGFuZGxpbmcgb2YgdGhlIGBfX2dldG9wdF9ub25vcHRpb25fZmxhZ3MnCisgICAgIHN0cmluZyBjYW4gd29yayBub3JtYWxseS4gIE91ciB0b3AgYXJndW1lbnQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UKKyAgICAgb2YgdGhlIHN0cmluZy4gICovCisgIGlmIChub25vcHRpb25fZmxhZ3NfbGVuID4gMCAmJiB0b3AgPj0gbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4pCisgICAgeworICAgICAgLyogV2UgbXVzdCBleHRlbmQgdGhlIGFycmF5LiAgVGhlIHVzZXIgcGxheXMgZ2FtZXMgd2l0aCB1cyBhbmQKKwkgcHJlc2VudHMgbmV3IGFyZ3VtZW50cy4gICovCisgICAgICBjaGFyICpuZXdfc3RyID0gbWFsbG9jICh0b3AgKyAxKTsKKyAgICAgIGlmIChuZXdfc3RyID09IE5VTEwpCisJbm9ub3B0aW9uX2ZsYWdzX2xlbiA9IG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gMDsKKyAgICAgIGVsc2UKKwl7CisJICBtZW1zZXQgKF9fbWVtcGNweSAobmV3X3N0ciwgX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzLAorCQkJICAgICBub25vcHRpb25fZmxhZ3NfbWF4X2xlbiksCisJCSAgJ1wwJywgdG9wICsgMSAtIG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuKTsKKwkgIG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gdG9wICsgMTsKKwkgIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncyA9IG5ld19zdHI7CisJfQorICAgIH0KKyNlbmRpZgorCisgIHdoaWxlICh0b3AgPiBtaWRkbGUgJiYgbWlkZGxlID4gYm90dG9tKQorICAgIHsKKyAgICAgIGlmICh0b3AgLSBtaWRkbGUgPiBtaWRkbGUgLSBib3R0b20pCisJeworCSAgLyogQm90dG9tIHNlZ21lbnQgaXMgdGhlIHNob3J0IG9uZS4gICovCisJICBpbnQgbGVuID0gbWlkZGxlIC0gYm90dG9tOworCSAgcmVnaXN0ZXIgaW50IGk7CisKKwkgIC8qIFN3YXAgaXQgd2l0aCB0aGUgdG9wIHBhcnQgb2YgdGhlIHRvcCBzZWdtZW50LiAgKi8KKwkgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkgICAgeworCSAgICAgIHRlbSA9IGFyZ3ZbYm90dG9tICsgaV07CisJICAgICAgYXJndltib3R0b20gKyBpXSA9IGFyZ3ZbdG9wIC0gKG1pZGRsZSAtIGJvdHRvbSkgKyBpXTsKKwkgICAgICBhcmd2W3RvcCAtIChtaWRkbGUgLSBib3R0b20pICsgaV0gPSB0ZW07CisJICAgICAgU1dBUF9GTEFHUyAoYm90dG9tICsgaSwgdG9wIC0gKG1pZGRsZSAtIGJvdHRvbSkgKyBpKTsKKwkgICAgfQorCSAgLyogRXhjbHVkZSB0aGUgbW92ZWQgYm90dG9tIHNlZ21lbnQgZnJvbSBmdXJ0aGVyIHN3YXBwaW5nLiAgKi8KKwkgIHRvcCAtPSBsZW47CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIFRvcCBzZWdtZW50IGlzIHRoZSBzaG9ydCBvbmUuICAqLworCSAgaW50IGxlbiA9IHRvcCAtIG1pZGRsZTsKKwkgIHJlZ2lzdGVyIGludCBpOworCisJICAvKiBTd2FwIGl0IHdpdGggdGhlIGJvdHRvbSBwYXJ0IG9mIHRoZSBib3R0b20gc2VnbWVudC4gICovCisJICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJICAgIHsKKwkgICAgICB0ZW0gPSBhcmd2W2JvdHRvbSArIGldOworCSAgICAgIGFyZ3ZbYm90dG9tICsgaV0gPSBhcmd2W21pZGRsZSArIGldOworCSAgICAgIGFyZ3ZbbWlkZGxlICsgaV0gPSB0ZW07CisJICAgICAgU1dBUF9GTEFHUyAoYm90dG9tICsgaSwgbWlkZGxlICsgaSk7CisJICAgIH0KKwkgIC8qIEV4Y2x1ZGUgdGhlIG1vdmVkIHRvcCBzZWdtZW50IGZyb20gZnVydGhlciBzd2FwcGluZy4gICovCisJICBib3R0b20gKz0gbGVuOworCX0KKyAgICB9CisKKyAgLyogVXBkYXRlIHJlY29yZHMgZm9yIHRoZSBzbG90cyB0aGUgbm9uLW9wdGlvbnMgbm93IG9jY3VweS4gICovCisKKyAgZmlyc3Rfbm9ub3B0ICs9IChvcHRpbmQgLSBsYXN0X25vbm9wdCk7CisgIGxhc3Rfbm9ub3B0ID0gb3B0aW5kOworfQorCisvKiBJbml0aWFsaXplIHRoZSBpbnRlcm5hbCBkYXRhIHdoZW4gdGhlIGZpcnN0IGNhbGwgaXMgbWFkZS4gICovCisKKyNpZiBkZWZpbmVkIF9fU1REQ19fICYmIF9fU1REQ19fCitzdGF0aWMgY29uc3QgY2hhciAqX2dldG9wdF9pbml0aWFsaXplIChpbnQsIGNoYXIgKmNvbnN0ICosIGNvbnN0IGNoYXIgKik7CisjZW5kaWYKK3N0YXRpYyBjb25zdCBjaGFyICoKK19nZXRvcHRfaW5pdGlhbGl6ZSAoYXJnYywgYXJndiwgb3B0c3RyaW5nKQorICAgICBpbnQgYXJnYzsKKyAgICAgY2hhciAqY29uc3QgKmFyZ3Y7CisgICAgIGNvbnN0IGNoYXIgKm9wdHN0cmluZzsKK3sKKyAgLyogU3RhcnQgcHJvY2Vzc2luZyBvcHRpb25zIHdpdGggQVJHVi1lbGVtZW50IDEgKHNpbmNlIEFSR1YtZWxlbWVudCAwCisgICAgIGlzIHRoZSBwcm9ncmFtIG5hbWUpOyB0aGUgc2VxdWVuY2Ugb2YgcHJldmlvdXNseSBza2lwcGVkCisgICAgIG5vbi1vcHRpb24gQVJHVi1lbGVtZW50cyBpcyBlbXB0eS4gICovCisKKyAgZmlyc3Rfbm9ub3B0ID0gbGFzdF9ub25vcHQgPSBvcHRpbmQ7CisKKyAgbmV4dGNoYXIgPSBOVUxMOworCisgIHBvc2l4bHlfY29ycmVjdCA9IGdldGVudiAoIlBPU0lYTFlfQ09SUkVDVCIpOworCisgIC8qIERldGVybWluZSBob3cgdG8gaGFuZGxlIHRoZSBvcmRlcmluZyBvZiBvcHRpb25zIGFuZCBub25vcHRpb25zLiAgKi8KKworICBpZiAob3B0c3RyaW5nWzBdID09ICctJykKKyAgICB7CisgICAgICBvcmRlcmluZyA9IFJFVFVSTl9JTl9PUkRFUjsKKyAgICAgICsrb3B0c3RyaW5nOworICAgIH0KKyAgZWxzZSBpZiAob3B0c3RyaW5nWzBdID09ICcrJykKKyAgICB7CisgICAgICBvcmRlcmluZyA9IFJFUVVJUkVfT1JERVI7CisgICAgICArK29wdHN0cmluZzsKKyAgICB9CisgIGVsc2UgaWYgKHBvc2l4bHlfY29ycmVjdCAhPSBOVUxMKQorICAgIG9yZGVyaW5nID0gUkVRVUlSRV9PUkRFUjsKKyAgZWxzZQorICAgIG9yZGVyaW5nID0gUEVSTVVURTsKKworI2lmZGVmIF9MSUJDCisgIGlmIChwb3NpeGx5X2NvcnJlY3QgPT0gTlVMTAorICAgICAgJiYgYXJnYyA9PSBvcmlnaW5hbF9hcmdjICYmIGFyZ3YgPT0gb3JpZ2luYWxfYXJndikKKyAgICB7CisgICAgICBpZiAobm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gPT0gMCkKKwl7CisJICBpZiAoX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzID09IE5VTEwKKwkgICAgICB8fCBfX2dldG9wdF9ub25vcHRpb25fZmxhZ3NbMF0gPT0gJ1wwJykKKwkgICAgbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gPSAtMTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGNvbnN0IGNoYXIgKm9yaWdfc3RyID0gX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzOworCSAgICAgIGludCBsZW4gPSBub25vcHRpb25fZmxhZ3NfbWF4X2xlbiA9IHN0cmxlbiAob3JpZ19zdHIpOworCSAgICAgIGlmIChub25vcHRpb25fZmxhZ3NfbWF4X2xlbiA8IGFyZ2MpCisJCW5vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gYXJnYzsKKwkgICAgICBfX2dldG9wdF9ub25vcHRpb25fZmxhZ3MgPQorCQkoY2hhciAqKSBtYWxsb2MgKG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuKTsKKwkgICAgICBpZiAoX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzID09IE5VTEwpCisJCW5vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gLTE7CisJICAgICAgZWxzZQorCQltZW1zZXQgKF9fbWVtcGNweSAoX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzLCBvcmlnX3N0ciwgbGVuKSwKKwkJCSdcMCcsIG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuIC0gbGVuKTsKKwkgICAgfQorCX0KKyAgICAgIG5vbm9wdGlvbl9mbGFnc19sZW4gPSBub25vcHRpb25fZmxhZ3NfbWF4X2xlbjsKKyAgICB9CisgIGVsc2UKKyAgICBub25vcHRpb25fZmxhZ3NfbGVuID0gMDsKKyNlbmRpZgorCisgIHJldHVybiBvcHRzdHJpbmc7Cit9CisMCisvKiBTY2FuIGVsZW1lbnRzIG9mIEFSR1YgKHdob3NlIGxlbmd0aCBpcyBBUkdDKSBmb3Igb3B0aW9uIGNoYXJhY3RlcnMKKyAgIGdpdmVuIGluIE9QVFNUUklORy4KKworICAgSWYgYW4gZWxlbWVudCBvZiBBUkdWIHN0YXJ0cyB3aXRoICctJywgYW5kIGlzIG5vdCBleGFjdGx5ICItIiBvciAiLS0iLAorICAgdGhlbiBpdCBpcyBhbiBvcHRpb24gZWxlbWVudC4gIFRoZSBjaGFyYWN0ZXJzIG9mIHRoaXMgZWxlbWVudAorICAgKGFzaWRlIGZyb20gdGhlIGluaXRpYWwgJy0nKSBhcmUgb3B0aW9uIGNoYXJhY3RlcnMuICBJZiBgZ2V0b3B0JworICAgaXMgY2FsbGVkIHJlcGVhdGVkbHksIGl0IHJldHVybnMgc3VjY2Vzc2l2ZWx5IGVhY2ggb2YgdGhlIG9wdGlvbiBjaGFyYWN0ZXJzCisgICBmcm9tIGVhY2ggb2YgdGhlIG9wdGlvbiBlbGVtZW50cy4KKworICAgSWYgYGdldG9wdCcgZmluZHMgYW5vdGhlciBvcHRpb24gY2hhcmFjdGVyLCBpdCByZXR1cm5zIHRoYXQgY2hhcmFjdGVyLAorICAgdXBkYXRpbmcgYG9wdGluZCcgYW5kIGBuZXh0Y2hhcicgc28gdGhhdCB0aGUgbmV4dCBjYWxsIHRvIGBnZXRvcHQnIGNhbgorICAgcmVzdW1lIHRoZSBzY2FuIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb24gY2hhcmFjdGVyIG9yIEFSR1YtZWxlbWVudC4KKworICAgSWYgdGhlcmUgYXJlIG5vIG1vcmUgb3B0aW9uIGNoYXJhY3RlcnMsIGBnZXRvcHQnIHJldHVybnMgLTEuCisgICBUaGVuIGBvcHRpbmQnIGlzIHRoZSBpbmRleCBpbiBBUkdWIG9mIHRoZSBmaXJzdCBBUkdWLWVsZW1lbnQKKyAgIHRoYXQgaXMgbm90IGFuIG9wdGlvbi4gIChUaGUgQVJHVi1lbGVtZW50cyBoYXZlIGJlZW4gcGVybXV0ZWQKKyAgIHNvIHRoYXQgdGhvc2UgdGhhdCBhcmUgbm90IG9wdGlvbnMgbm93IGNvbWUgbGFzdC4pCisKKyAgIE9QVFNUUklORyBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBsZWdpdGltYXRlIG9wdGlvbiBjaGFyYWN0ZXJzLgorICAgSWYgYW4gb3B0aW9uIGNoYXJhY3RlciBpcyBzZWVuIHRoYXQgaXMgbm90IGxpc3RlZCBpbiBPUFRTVFJJTkcsCisgICByZXR1cm4gJz8nIGFmdGVyIHByaW50aW5nIGFuIGVycm9yIG1lc3NhZ2UuICBJZiB5b3Ugc2V0IGBvcHRlcnInIHRvCisgICB6ZXJvLCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBzdXBwcmVzc2VkIGJ1dCB3ZSBzdGlsbCByZXR1cm4gJz8nLgorCisgICBJZiBhIGNoYXIgaW4gT1BUU1RSSU5HIGlzIGZvbGxvd2VkIGJ5IGEgY29sb24sIHRoYXQgbWVhbnMgaXQgd2FudHMgYW4gYXJnLAorICAgc28gdGhlIGZvbGxvd2luZyB0ZXh0IGluIHRoZSBzYW1lIEFSR1YtZWxlbWVudCwgb3IgdGhlIHRleHQgb2YgdGhlIGZvbGxvd2luZworICAgQVJHVi1lbGVtZW50LCBpcyByZXR1cm5lZCBpbiBgb3B0YXJnJy4gIFR3byBjb2xvbnMgbWVhbiBhbiBvcHRpb24gdGhhdAorICAgd2FudHMgYW4gb3B0aW9uYWwgYXJnOyBpZiB0aGVyZSBpcyB0ZXh0IGluIHRoZSBjdXJyZW50IEFSR1YtZWxlbWVudCwKKyAgIGl0IGlzIHJldHVybmVkIGluIGBvcHRhcmcnLCBvdGhlcndpc2UgYG9wdGFyZycgaXMgc2V0IHRvIHplcm8uCisKKyAgIElmIE9QVFNUUklORyBzdGFydHMgd2l0aCBgLScgb3IgYCsnLCBpdCByZXF1ZXN0cyBkaWZmZXJlbnQgbWV0aG9kcyBvZgorICAgaGFuZGxpbmcgdGhlIG5vbi1vcHRpb24gQVJHVi1lbGVtZW50cy4KKyAgIFNlZSB0aGUgY29tbWVudHMgYWJvdXQgUkVUVVJOX0lOX09SREVSIGFuZCBSRVFVSVJFX09SREVSLCBhYm92ZS4KKworICAgTG9uZy1uYW1lZCBvcHRpb25zIGJlZ2luIHdpdGggYC0tJyBpbnN0ZWFkIG9mIGAtJy4KKyAgIFRoZWlyIG5hbWVzIG1heSBiZSBhYmJyZXZpYXRlZCBhcyBsb25nIGFzIHRoZSBhYmJyZXZpYXRpb24gaXMgdW5pcXVlCisgICBvciBpcyBhbiBleGFjdCBtYXRjaCBmb3Igc29tZSBkZWZpbmVkIG9wdGlvbi4gIElmIHRoZXkgaGF2ZSBhbgorICAgYXJndW1lbnQsIGl0IGZvbGxvd3MgdGhlIG9wdGlvbiBuYW1lIGluIHRoZSBzYW1lIEFSR1YtZWxlbWVudCwgc2VwYXJhdGVkCisgICBmcm9tIHRoZSBvcHRpb24gbmFtZSBieSBhIGA9Jywgb3IgZWxzZSB0aGUgaW4gbmV4dCBBUkdWLWVsZW1lbnQuCisgICBXaGVuIGBnZXRvcHQnIGZpbmRzIGEgbG9uZy1uYW1lZCBvcHRpb24sIGl0IHJldHVybnMgMCBpZiB0aGF0IG9wdGlvbidzCisgICBgZmxhZycgZmllbGQgaXMgbm9uemVybywgdGhlIHZhbHVlIG9mIHRoZSBvcHRpb24ncyBgdmFsJyBmaWVsZAorICAgaWYgdGhlIGBmbGFnJyBmaWVsZCBpcyB6ZXJvLgorCisgICBUaGUgZWxlbWVudHMgb2YgQVJHViBhcmVuJ3QgcmVhbGx5IGNvbnN0LCBiZWNhdXNlIHdlIHBlcm11dGUgdGhlbS4KKyAgIEJ1dCB3ZSBwcmV0ZW5kIHRoZXkncmUgY29uc3QgaW4gdGhlIHByb3RvdHlwZSB0byBiZSBjb21wYXRpYmxlCisgICB3aXRoIG90aGVyIHN5c3RlbXMuCisKKyAgIExPTkdPUFRTIGlzIGEgdmVjdG9yIG9mIGBzdHJ1Y3Qgb3B0aW9uJyB0ZXJtaW5hdGVkIGJ5IGFuCisgICBlbGVtZW50IGNvbnRhaW5pbmcgYSBuYW1lIHdoaWNoIGlzIHplcm8uCisKKyAgIExPTkdJTkQgcmV0dXJucyB0aGUgaW5kZXggaW4gTE9OR09QVCBvZiB0aGUgbG9uZy1uYW1lZCBvcHRpb24gZm91bmQuCisgICBJdCBpcyBvbmx5IHZhbGlkIHdoZW4gYSBsb25nLW5hbWVkIG9wdGlvbiBoYXMgYmVlbiBmb3VuZCBieSB0aGUgbW9zdAorICAgcmVjZW50IGNhbGwuCisKKyAgIElmIExPTkdfT05MWSBpcyBub256ZXJvLCAnLScgYXMgd2VsbCBhcyAnLS0nIGNhbiBpbnRyb2R1Y2UKKyAgIGxvbmctbmFtZWQgb3B0aW9ucy4gICovCisKK2ludAorX2dldG9wdF9pbnRlcm5hbCAoYXJnYywgYXJndiwgb3B0c3RyaW5nLCBsb25nb3B0cywgbG9uZ2luZCwgbG9uZ19vbmx5KQorICAgICBpbnQgYXJnYzsKKyAgICAgY2hhciAqY29uc3QgKmFyZ3Y7CisgICAgIGNvbnN0IGNoYXIgKm9wdHN0cmluZzsKKyAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHM7CisgICAgIGludCAqbG9uZ2luZDsKKyAgICAgaW50IGxvbmdfb25seTsKK3sKKyAgb3B0YXJnID0gTlVMTDsKKworICBpZiAob3B0aW5kID09IDAgfHwgIV9fZ2V0b3B0X2luaXRpYWxpemVkKQorICAgIHsKKyAgICAgIGlmIChvcHRpbmQgPT0gMCkKKwlvcHRpbmQgPSAxOwkvKiBEb24ndCBzY2FuIEFSR1ZbMF0sIHRoZSBwcm9ncmFtIG5hbWUuICAqLworICAgICAgb3B0c3RyaW5nID0gX2dldG9wdF9pbml0aWFsaXplIChhcmdjLCBhcmd2LCBvcHRzdHJpbmcpOworICAgICAgX19nZXRvcHRfaW5pdGlhbGl6ZWQgPSAxOworICAgIH0KKworICAvKiBUZXN0IHdoZXRoZXIgQVJHVltvcHRpbmRdIHBvaW50cyB0byBhIG5vbi1vcHRpb24gYXJndW1lbnQuCisgICAgIEVpdGhlciBpdCBkb2VzIG5vdCBoYXZlIG9wdGlvbiBzeW50YXgsIG9yIHRoZXJlIGlzIGFuIGVudmlyb25tZW50IGZsYWcKKyAgICAgZnJvbSB0aGUgc2hlbGwgaW5kaWNhdGluZyBpdCBpcyBub3QgYW4gb3B0aW9uLiAgVGhlIGxhdGVyIGluZm9ybWF0aW9uCisgICAgIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSB1c2VkIGluIHRoZSBHTlUgbGliYy4gICovCisjaWZkZWYgX0xJQkMKKyMgZGVmaW5lIE5PTk9QVElPTl9QIChhcmd2W29wdGluZF1bMF0gIT0gJy0nIHx8IGFyZ3Zbb3B0aW5kXVsxXSA9PSAnXDAnCSAgICAgIFwKKwkJICAgICAgfHwgKG9wdGluZCA8IG5vbm9wdGlvbl9mbGFnc19sZW4JCQkgICAgICBcCisJCQkgICYmIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFnc1tvcHRpbmRdID09ICcxJykpCisjZWxzZQorIyBkZWZpbmUgTk9OT1BUSU9OX1AgKGFyZ3Zbb3B0aW5kXVswXSAhPSAnLScgfHwgYXJndltvcHRpbmRdWzFdID09ICdcMCcpCisjZW5kaWYKKworICBpZiAobmV4dGNoYXIgPT0gTlVMTCB8fCAqbmV4dGNoYXIgPT0gJ1wwJykKKyAgICB7CisgICAgICAvKiBBZHZhbmNlIHRvIHRoZSBuZXh0IEFSR1YtZWxlbWVudC4gICovCisKKyAgICAgIC8qIEdpdmUgRklSU1RfTk9OT1BUICYgTEFTVF9OT05PUFQgcmF0aW9uYWwgdmFsdWVzIGlmIE9QVElORCBoYXMgYmVlbgorCSBtb3ZlZCBiYWNrIGJ5IHRoZSB1c2VyICh3aG8gbWF5IGFsc28gaGF2ZSBjaGFuZ2VkIHRoZSBhcmd1bWVudHMpLiAgKi8KKyAgICAgIGlmIChsYXN0X25vbm9wdCA+IG9wdGluZCkKKwlsYXN0X25vbm9wdCA9IG9wdGluZDsKKyAgICAgIGlmIChmaXJzdF9ub25vcHQgPiBvcHRpbmQpCisJZmlyc3Rfbm9ub3B0ID0gb3B0aW5kOworCisgICAgICBpZiAob3JkZXJpbmcgPT0gUEVSTVVURSkKKwl7CisJICAvKiBJZiB3ZSBoYXZlIGp1c3QgcHJvY2Vzc2VkIHNvbWUgb3B0aW9ucyBmb2xsb3dpbmcgc29tZSBub24tb3B0aW9ucywKKwkgICAgIGV4Y2hhbmdlIHRoZW0gc28gdGhhdCB0aGUgb3B0aW9ucyBjb21lIGZpcnN0LiAgKi8KKworCSAgaWYgKGZpcnN0X25vbm9wdCAhPSBsYXN0X25vbm9wdCAmJiBsYXN0X25vbm9wdCAhPSBvcHRpbmQpCisJICAgIGV4Y2hhbmdlICgoY2hhciAqKikgYXJndik7CisJICBlbHNlIGlmIChsYXN0X25vbm9wdCAhPSBvcHRpbmQpCisJICAgIGZpcnN0X25vbm9wdCA9IG9wdGluZDsKKworCSAgLyogU2tpcCBhbnkgYWRkaXRpb25hbCBub24tb3B0aW9ucworCSAgICAgYW5kIGV4dGVuZCB0aGUgcmFuZ2Ugb2Ygbm9uLW9wdGlvbnMgcHJldmlvdXNseSBza2lwcGVkLiAgKi8KKworCSAgd2hpbGUgKG9wdGluZCA8IGFyZ2MgJiYgTk9OT1BUSU9OX1ApCisJICAgIG9wdGluZCsrOworCSAgbGFzdF9ub25vcHQgPSBvcHRpbmQ7CisJfQorCisgICAgICAvKiBUaGUgc3BlY2lhbCBBUkdWLWVsZW1lbnQgYC0tJyBtZWFucyBwcmVtYXR1cmUgZW5kIG9mIG9wdGlvbnMuCisJIFNraXAgaXQgbGlrZSBhIG51bGwgb3B0aW9uLAorCSB0aGVuIGV4Y2hhbmdlIHdpdGggcHJldmlvdXMgbm9uLW9wdGlvbnMgYXMgaWYgaXQgd2VyZSBhbiBvcHRpb24sCisJIHRoZW4gc2tpcCBldmVyeXRoaW5nIGVsc2UgbGlrZSBhIG5vbi1vcHRpb24uICAqLworCisgICAgICBpZiAob3B0aW5kICE9IGFyZ2MgJiYgIXN0cmNtcCAoYXJndltvcHRpbmRdLCAiLS0iKSkKKwl7CisJICBvcHRpbmQrKzsKKworCSAgaWYgKGZpcnN0X25vbm9wdCAhPSBsYXN0X25vbm9wdCAmJiBsYXN0X25vbm9wdCAhPSBvcHRpbmQpCisJICAgIGV4Y2hhbmdlICgoY2hhciAqKikgYXJndik7CisJICBlbHNlIGlmIChmaXJzdF9ub25vcHQgPT0gbGFzdF9ub25vcHQpCisJICAgIGZpcnN0X25vbm9wdCA9IG9wdGluZDsKKwkgIGxhc3Rfbm9ub3B0ID0gYXJnYzsKKworCSAgb3B0aW5kID0gYXJnYzsKKwl9CisKKyAgICAgIC8qIElmIHdlIGhhdmUgZG9uZSBhbGwgdGhlIEFSR1YtZWxlbWVudHMsIHN0b3AgdGhlIHNjYW4KKwkgYW5kIGJhY2sgb3ZlciBhbnkgbm9uLW9wdGlvbnMgdGhhdCB3ZSBza2lwcGVkIGFuZCBwZXJtdXRlZC4gICovCisKKyAgICAgIGlmIChvcHRpbmQgPT0gYXJnYykKKwl7CisJICAvKiBTZXQgdGhlIG5leHQtYXJnLWluZGV4IHRvIHBvaW50IGF0IHRoZSBub24tb3B0aW9ucworCSAgICAgdGhhdCB3ZSBwcmV2aW91c2x5IHNraXBwZWQsIHNvIHRoZSBjYWxsZXIgd2lsbCBkaWdlc3QgdGhlbS4gICovCisJICBpZiAoZmlyc3Rfbm9ub3B0ICE9IGxhc3Rfbm9ub3B0KQorCSAgICBvcHRpbmQgPSBmaXJzdF9ub25vcHQ7CisJICByZXR1cm4gLTE7CisJfQorCisgICAgICAvKiBJZiB3ZSBoYXZlIGNvbWUgdG8gYSBub24tb3B0aW9uIGFuZCBkaWQgbm90IHBlcm11dGUgaXQsCisJIGVpdGhlciBzdG9wIHRoZSBzY2FuIG9yIGRlc2NyaWJlIGl0IHRvIHRoZSBjYWxsZXIgYW5kIHBhc3MgaXQgYnkuICAqLworCisgICAgICBpZiAoTk9OT1BUSU9OX1ApCisJeworCSAgaWYgKG9yZGVyaW5nID09IFJFUVVJUkVfT1JERVIpCisJICAgIHJldHVybiAtMTsKKwkgIG9wdGFyZyA9IGFyZ3Zbb3B0aW5kKytdOworCSAgcmV0dXJuIDE7CisJfQorCisgICAgICAvKiBXZSBoYXZlIGZvdW5kIGFub3RoZXIgb3B0aW9uLUFSR1YtZWxlbWVudC4KKwkgU2tpcCB0aGUgaW5pdGlhbCBwdW5jdHVhdGlvbi4gICovCisKKyAgICAgIG5leHRjaGFyID0gKGFyZ3Zbb3B0aW5kXSArIDEKKwkJICArIChsb25nb3B0cyAhPSBOVUxMICYmIGFyZ3Zbb3B0aW5kXVsxXSA9PSAnLScpKTsKKyAgICB9CisKKyAgLyogRGVjb2RlIHRoZSBjdXJyZW50IG9wdGlvbi1BUkdWLWVsZW1lbnQuICAqLworCisgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEFSR1YtZWxlbWVudCBpcyBhIGxvbmcgb3B0aW9uLgorCisgICAgIElmIGxvbmdfb25seSBhbmQgdGhlIEFSR1YtZWxlbWVudCBoYXMgdGhlIGZvcm0gIi1mIiwgd2hlcmUgZiBpcworICAgICBhIHZhbGlkIHNob3J0IG9wdGlvbiwgZG9uJ3QgY29uc2lkZXIgaXQgYW4gYWJicmV2aWF0ZWQgZm9ybSBvZgorICAgICBhIGxvbmcgb3B0aW9uIHRoYXQgc3RhcnRzIHdpdGggZi4gIE90aGVyd2lzZSB0aGVyZSB3b3VsZCBiZSBubworICAgICB3YXkgdG8gZ2l2ZSB0aGUgLWYgc2hvcnQgb3B0aW9uLgorCisgICAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGVyZSdzIGEgbG9uZyBvcHRpb24gImZ1YmFyIiBhbmQKKyAgICAgdGhlIEFSR1YtZWxlbWVudCBpcyAiLWZ1IiwgZG8gY29uc2lkZXIgdGhhdCBhbiBhYmJyZXZpYXRpb24gb2YKKyAgICAgdGhlIGxvbmcgb3B0aW9uLCBqdXN0IGxpa2UgIi0tZnUiLCBhbmQgbm90ICItZiIgd2l0aCBhcmcgInUiLgorCisgICAgIFRoaXMgZGlzdGluY3Rpb24gc2VlbXMgdG8gYmUgdGhlIG1vc3QgdXNlZnVsIGFwcHJvYWNoLiAgKi8KKworICBpZiAobG9uZ29wdHMgIT0gTlVMTAorICAgICAgJiYgKGFyZ3Zbb3B0aW5kXVsxXSA9PSAnLScKKwkgIHx8IChsb25nX29ubHkgJiYgKGFyZ3Zbb3B0aW5kXVsyXSB8fCAhbXlfaW5kZXggKG9wdHN0cmluZywgYXJndltvcHRpbmRdWzFdKSkpKSkKKyAgICB7CisgICAgICBjaGFyICpuYW1lZW5kOworICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqcDsKKyAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKnBmb3VuZCA9IE5VTEw7CisgICAgICBpbnQgZXhhY3QgPSAwOworICAgICAgaW50IGFtYmlnID0gMDsKKyAgICAgIGludCBpbmRmb3VuZCA9IC0xOworICAgICAgaW50IG9wdGlvbl9pbmRleDsKKworICAgICAgZm9yIChuYW1lZW5kID0gbmV4dGNoYXI7ICpuYW1lZW5kICYmICpuYW1lZW5kICE9ICc9JzsgbmFtZWVuZCsrKQorCS8qIERvIG5vdGhpbmcuICAqLyA7CisKKyAgICAgIC8qIFRlc3QgYWxsIGxvbmcgb3B0aW9ucyBmb3IgZWl0aGVyIGV4YWN0IG1hdGNoCisJIG9yIGFiYnJldmlhdGVkIG1hdGNoZXMuICAqLworICAgICAgZm9yIChwID0gbG9uZ29wdHMsIG9wdGlvbl9pbmRleCA9IDA7IHAtPm5hbWU7IHArKywgb3B0aW9uX2luZGV4KyspCisJaWYgKCFzdHJuY21wIChwLT5uYW1lLCBuZXh0Y2hhciwgbmFtZWVuZCAtIG5leHRjaGFyKSkKKwkgIHsKKwkgICAgaWYgKCh1bnNpZ25lZCBpbnQpIChuYW1lZW5kIC0gbmV4dGNoYXIpCisJCT09ICh1bnNpZ25lZCBpbnQpIHN0cmxlbiAocC0+bmFtZSkpCisJICAgICAgeworCQkvKiBFeGFjdCBtYXRjaCBmb3VuZC4gICovCisJCXBmb3VuZCA9IHA7CisJCWluZGZvdW5kID0gb3B0aW9uX2luZGV4OworCQlleGFjdCA9IDE7CisJCWJyZWFrOworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAocGZvdW5kID09IE5VTEwpCisJICAgICAgeworCQkvKiBGaXJzdCBub25leGFjdCBtYXRjaCBmb3VuZC4gICovCisJCXBmb3VuZCA9IHA7CisJCWluZGZvdW5kID0gb3B0aW9uX2luZGV4OworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIC8qIFNlY29uZCBvciBsYXRlciBub25leGFjdCBtYXRjaCBmb3VuZC4gICovCisJICAgICAgYW1iaWcgPSAxOworCSAgfQorCisgICAgICBpZiAoYW1iaWcgJiYgIWV4YWN0KQorCXsKKwkgIGlmIChvcHRlcnIpCisJICAgIGZwcmludGYgKHN0ZGVyciwgXygiJXM6IG9wdGlvbiBgJXMnIGlzIGFtYmlndW91c1xuIiksCisJCSAgICAgYXJndlswXSwgYXJndltvcHRpbmRdKTsKKwkgIG5leHRjaGFyICs9IHN0cmxlbiAobmV4dGNoYXIpOworCSAgb3B0aW5kKys7CisJICBvcHRvcHQgPSAwOworCSAgcmV0dXJuICc/JzsKKwl9CisKKyAgICAgIGlmIChwZm91bmQgIT0gTlVMTCkKKwl7CisJICBvcHRpb25faW5kZXggPSBpbmRmb3VuZDsKKwkgIG9wdGluZCsrOworCSAgaWYgKCpuYW1lZW5kKQorCSAgICB7CisJICAgICAgLyogRG9uJ3QgdGVzdCBoYXNfYXJnIHdpdGggPiwgYmVjYXVzZSBzb21lIEMgY29tcGlsZXJzIGRvbid0CisJCSBhbGxvdyBpdCB0byBiZSB1c2VkIG9uIGVudW1zLiAgKi8KKwkgICAgICBpZiAocGZvdW5kLT5oYXNfYXJnKQorCQlvcHRhcmcgPSBuYW1lZW5kICsgMTsKKwkgICAgICBlbHNlCisJCXsKKwkJICBpZiAob3B0ZXJyKQorCQkgICAgeworCQkgICAgICBpZiAoYXJndltvcHRpbmQgLSAxXVsxXSA9PSAnLScpCisJCQkvKiAtLW9wdGlvbiAqLworCQkJZnByaW50ZiAoc3RkZXJyLAorCQkJCSBfKCIlczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iKSwKKwkJCQkgYXJndlswXSwgcGZvdW5kLT5uYW1lKTsKKwkJICAgICAgZWxzZQorCQkJLyogK29wdGlvbiBvciAtb3B0aW9uICovCisJCQlmcHJpbnRmIChzdGRlcnIsCisJCQkJIF8oIiVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIpLAorCQkJCSBhcmd2WzBdLCBhcmd2W29wdGluZCAtIDFdWzBdLCBwZm91bmQtPm5hbWUpOworCQkgICAgfQorCisJCSAgbmV4dGNoYXIgKz0gc3RybGVuIChuZXh0Y2hhcik7CisKKwkJICBvcHRvcHQgPSBwZm91bmQtPnZhbDsKKwkJICByZXR1cm4gJz8nOworCQl9CisJICAgIH0KKwkgIGVsc2UgaWYgKHBmb3VuZC0+aGFzX2FyZyA9PSAxKQorCSAgICB7CisJICAgICAgaWYgKG9wdGluZCA8IGFyZ2MpCisJCW9wdGFyZyA9IGFyZ3Zbb3B0aW5kKytdOworCSAgICAgIGVsc2UKKwkJeworCQkgIGlmIChvcHRlcnIpCisJCSAgICBmcHJpbnRmIChzdGRlcnIsCisJCQkgICBfKCIlczogb3B0aW9uIGAlcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpLAorCQkJICAgYXJndlswXSwgYXJndltvcHRpbmQgLSAxXSk7CisJCSAgbmV4dGNoYXIgKz0gc3RybGVuIChuZXh0Y2hhcik7CisJCSAgb3B0b3B0ID0gcGZvdW5kLT52YWw7CisJCSAgcmV0dXJuIG9wdHN0cmluZ1swXSA9PSAnOicgPyAnOicgOiAnPyc7CisJCX0KKwkgICAgfQorCSAgbmV4dGNoYXIgKz0gc3RybGVuIChuZXh0Y2hhcik7CisJICBpZiAobG9uZ2luZCAhPSBOVUxMKQorCSAgICAqbG9uZ2luZCA9IG9wdGlvbl9pbmRleDsKKwkgIGlmIChwZm91bmQtPmZsYWcpCisJICAgIHsKKwkgICAgICAqKHBmb3VuZC0+ZmxhZykgPSBwZm91bmQtPnZhbDsKKwkgICAgICByZXR1cm4gMDsKKwkgICAgfQorCSAgcmV0dXJuIHBmb3VuZC0+dmFsOworCX0KKworICAgICAgLyogQ2FuJ3QgZmluZCBpdCBhcyBhIGxvbmcgb3B0aW9uLiAgSWYgdGhpcyBpcyBub3QgZ2V0b3B0X2xvbmdfb25seSwKKwkgb3IgdGhlIG9wdGlvbiBzdGFydHMgd2l0aCAnLS0nIG9yIGlzIG5vdCBhIHZhbGlkIHNob3J0CisJIG9wdGlvbiwgdGhlbiBpdCdzIGFuIGVycm9yLgorCSBPdGhlcndpc2UgaW50ZXJwcmV0IGl0IGFzIGEgc2hvcnQgb3B0aW9uLiAgKi8KKyAgICAgIGlmICghbG9uZ19vbmx5IHx8IGFyZ3Zbb3B0aW5kXVsxXSA9PSAnLScKKwkgIHx8IG15X2luZGV4IChvcHRzdHJpbmcsICpuZXh0Y2hhcikgPT0gTlVMTCkKKwl7CisJICBpZiAob3B0ZXJyKQorCSAgICB7CisJICAgICAgaWYgKGFyZ3Zbb3B0aW5kXVsxXSA9PSAnLScpCisJCS8qIC0tb3B0aW9uICovCisJCWZwcmludGYgKHN0ZGVyciwgXygiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYC0tJXMnXG4iKSwKKwkJCSBhcmd2WzBdLCBuZXh0Y2hhcik7CisJICAgICAgZWxzZQorCQkvKiArb3B0aW9uIG9yIC1vcHRpb24gKi8KKwkJZnByaW50ZiAoc3RkZXJyLCBfKCIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgJWMlcydcbiIpLAorCQkJIGFyZ3ZbMF0sIGFyZ3Zbb3B0aW5kXVswXSwgbmV4dGNoYXIpOworCSAgICB9CisJICBuZXh0Y2hhciA9IChjaGFyICopICIiOworCSAgb3B0aW5kKys7CisJICBvcHRvcHQgPSAwOworCSAgcmV0dXJuICc/JzsKKwl9CisgICAgfQorCisgIC8qIExvb2sgYXQgYW5kIGhhbmRsZSB0aGUgbmV4dCBzaG9ydCBvcHRpb24tY2hhcmFjdGVyLiAgKi8KKworICB7CisgICAgY2hhciBjID0gKm5leHRjaGFyKys7CisgICAgY2hhciAqdGVtcCA9IG15X2luZGV4IChvcHRzdHJpbmcsIGMpOworCisgICAgLyogSW5jcmVtZW50IGBvcHRpbmQnIHdoZW4gd2Ugc3RhcnQgdG8gcHJvY2VzcyBpdHMgbGFzdCBjaGFyYWN0ZXIuICAqLworICAgIGlmICgqbmV4dGNoYXIgPT0gJ1wwJykKKyAgICAgICsrb3B0aW5kOworCisgICAgaWYgKHRlbXAgPT0gTlVMTCB8fCBjID09ICc6JykKKyAgICAgIHsKKwlpZiAob3B0ZXJyKQorCSAgeworCSAgICBpZiAocG9zaXhseV9jb3JyZWN0KQorCSAgICAgIC8qIDEwMDMuMiBzcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiB0aGlzIG1lc3NhZ2UuICAqLworCSAgICAgIGZwcmludGYgKHN0ZGVyciwgXygiJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjXG4iKSwKKwkJICAgICAgIGFyZ3ZbMF0sIGMpOworCSAgICBlbHNlCisJICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCIlczogaW52YWxpZCBvcHRpb24gLS0gJWNcbiIpLAorCQkgICAgICAgYXJndlswXSwgYyk7CisJICB9CisJb3B0b3B0ID0gYzsKKwlyZXR1cm4gJz8nOworICAgICAgfQorICAgIC8qIENvbnZlbmllbmNlLiBUcmVhdCBQT1NJWCAtVyBmb28gc2FtZSBhcyBsb25nIG9wdGlvbiAtLWZvbyAqLworICAgIGlmICh0ZW1wWzBdID09ICdXJyAmJiB0ZW1wWzFdID09ICc7JykKKyAgICAgIHsKKwljaGFyICpuYW1lZW5kOworCWNvbnN0IHN0cnVjdCBvcHRpb24gKnA7CisJY29uc3Qgc3RydWN0IG9wdGlvbiAqcGZvdW5kID0gTlVMTDsKKwlpbnQgZXhhY3QgPSAwOworCWludCBhbWJpZyA9IDA7CisJaW50IGluZGZvdW5kID0gMDsKKwlpbnQgb3B0aW9uX2luZGV4OworCisJLyogVGhpcyBpcyBhbiBvcHRpb24gdGhhdCByZXF1aXJlcyBhbiBhcmd1bWVudC4gICovCisJaWYgKCpuZXh0Y2hhciAhPSAnXDAnKQorCSAgeworCSAgICBvcHRhcmcgPSBuZXh0Y2hhcjsKKwkgICAgLyogSWYgd2UgZW5kIHRoaXMgQVJHVi1lbGVtZW50IGJ5IHRha2luZyB0aGUgcmVzdCBhcyBhbiBhcmcsCisJICAgICAgIHdlIG11c3QgYWR2YW5jZSB0byB0aGUgbmV4dCBlbGVtZW50IG5vdy4gICovCisJICAgIG9wdGluZCsrOworCSAgfQorCWVsc2UgaWYgKG9wdGluZCA9PSBhcmdjKQorCSAgeworCSAgICBpZiAob3B0ZXJyKQorCSAgICAgIHsKKwkJLyogMTAwMy4yIHNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIHRoaXMgbWVzc2FnZS4gICovCisJCWZwcmludGYgKHN0ZGVyciwgXygiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIiksCisJCQkgYXJndlswXSwgYyk7CisJICAgICAgfQorCSAgICBvcHRvcHQgPSBjOworCSAgICBpZiAob3B0c3RyaW5nWzBdID09ICc6JykKKwkgICAgICBjID0gJzonOworCSAgICBlbHNlCisJICAgICAgYyA9ICc/JzsKKwkgICAgcmV0dXJuIGM7CisJICB9CisJZWxzZQorCSAgLyogV2UgYWxyZWFkeSBpbmNyZW1lbnRlZCBgb3B0aW5kJyBvbmNlOworCSAgICAgaW5jcmVtZW50IGl0IGFnYWluIHdoZW4gdGFraW5nIG5leHQgQVJHVi1lbHQgYXMgYXJndW1lbnQuICAqLworCSAgb3B0YXJnID0gYXJndltvcHRpbmQrK107CisKKwkvKiBvcHRhcmcgaXMgbm93IHRoZSBhcmd1bWVudCwgc2VlIGlmIGl0J3MgaW4gdGhlCisJICAgdGFibGUgb2YgbG9uZ29wdHMuICAqLworCisJZm9yIChuZXh0Y2hhciA9IG5hbWVlbmQgPSBvcHRhcmc7ICpuYW1lZW5kICYmICpuYW1lZW5kICE9ICc9JzsgbmFtZWVuZCsrKQorCSAgLyogRG8gbm90aGluZy4gICovIDsKKworCS8qIFRlc3QgYWxsIGxvbmcgb3B0aW9ucyBmb3IgZWl0aGVyIGV4YWN0IG1hdGNoCisJICAgb3IgYWJicmV2aWF0ZWQgbWF0Y2hlcy4gICovCisJZm9yIChwID0gbG9uZ29wdHMsIG9wdGlvbl9pbmRleCA9IDA7IHAtPm5hbWU7IHArKywgb3B0aW9uX2luZGV4KyspCisJICBpZiAoIXN0cm5jbXAgKHAtPm5hbWUsIG5leHRjaGFyLCBuYW1lZW5kIC0gbmV4dGNoYXIpKQorCSAgICB7CisJICAgICAgaWYgKCh1bnNpZ25lZCBpbnQpIChuYW1lZW5kIC0gbmV4dGNoYXIpID09IHN0cmxlbiAocC0+bmFtZSkpCisJCXsKKwkJICAvKiBFeGFjdCBtYXRjaCBmb3VuZC4gICovCisJCSAgcGZvdW5kID0gcDsKKwkJICBpbmRmb3VuZCA9IG9wdGlvbl9pbmRleDsKKwkJICBleGFjdCA9IDE7CisJCSAgYnJlYWs7CisJCX0KKwkgICAgICBlbHNlIGlmIChwZm91bmQgPT0gTlVMTCkKKwkJeworCQkgIC8qIEZpcnN0IG5vbmV4YWN0IG1hdGNoIGZvdW5kLiAgKi8KKwkJICBwZm91bmQgPSBwOworCQkgIGluZGZvdW5kID0gb3B0aW9uX2luZGV4OworCQl9CisJICAgICAgZWxzZQorCQkvKiBTZWNvbmQgb3IgbGF0ZXIgbm9uZXhhY3QgbWF0Y2ggZm91bmQuICAqLworCQlhbWJpZyA9IDE7CisJICAgIH0KKwlpZiAoYW1iaWcgJiYgIWV4YWN0KQorCSAgeworCSAgICBpZiAob3B0ZXJyKQorCSAgICAgIGZwcmludGYgKHN0ZGVyciwgXygiJXM6IG9wdGlvbiBgLVcgJXMnIGlzIGFtYmlndW91c1xuIiksCisJCSAgICAgICBhcmd2WzBdLCBhcmd2W29wdGluZF0pOworCSAgICBuZXh0Y2hhciArPSBzdHJsZW4gKG5leHRjaGFyKTsKKwkgICAgb3B0aW5kKys7CisJICAgIHJldHVybiAnPyc7CisJICB9CisJaWYgKHBmb3VuZCAhPSBOVUxMKQorCSAgeworCSAgICBvcHRpb25faW5kZXggPSBpbmRmb3VuZDsKKwkgICAgaWYgKCpuYW1lZW5kKQorCSAgICAgIHsKKwkJLyogRG9uJ3QgdGVzdCBoYXNfYXJnIHdpdGggPiwgYmVjYXVzZSBzb21lIEMgY29tcGlsZXJzIGRvbid0CisJCSAgIGFsbG93IGl0IHRvIGJlIHVzZWQgb24gZW51bXMuICAqLworCQlpZiAocGZvdW5kLT5oYXNfYXJnKQorCQkgIG9wdGFyZyA9IG5hbWVlbmQgKyAxOworCQllbHNlCisJCSAgeworCQkgICAgaWYgKG9wdGVycikKKwkJICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJcCislczogb3B0aW9uIGAtVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIiksCisJCQkgICAgICAgYXJndlswXSwgcGZvdW5kLT5uYW1lKTsKKworCQkgICAgbmV4dGNoYXIgKz0gc3RybGVuIChuZXh0Y2hhcik7CisJCSAgICByZXR1cm4gJz8nOworCQkgIH0KKwkgICAgICB9CisJICAgIGVsc2UgaWYgKHBmb3VuZC0+aGFzX2FyZyA9PSAxKQorCSAgICAgIHsKKwkJaWYgKG9wdGluZCA8IGFyZ2MpCisJCSAgb3B0YXJnID0gYXJndltvcHRpbmQrK107CisJCWVsc2UKKwkJICB7CisJCSAgICBpZiAob3B0ZXJyKQorCQkgICAgICBmcHJpbnRmIChzdGRlcnIsCisJCQkgICAgICAgXygiJXM6IG9wdGlvbiBgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKSwKKwkJCSAgICAgICBhcmd2WzBdLCBhcmd2W29wdGluZCAtIDFdKTsKKwkJICAgIG5leHRjaGFyICs9IHN0cmxlbiAobmV4dGNoYXIpOworCQkgICAgcmV0dXJuIG9wdHN0cmluZ1swXSA9PSAnOicgPyAnOicgOiAnPyc7CisJCSAgfQorCSAgICAgIH0KKwkgICAgbmV4dGNoYXIgKz0gc3RybGVuIChuZXh0Y2hhcik7CisJICAgIGlmIChsb25naW5kICE9IE5VTEwpCisJICAgICAgKmxvbmdpbmQgPSBvcHRpb25faW5kZXg7CisJICAgIGlmIChwZm91bmQtPmZsYWcpCisJICAgICAgeworCQkqKHBmb3VuZC0+ZmxhZykgPSBwZm91bmQtPnZhbDsKKwkJcmV0dXJuIDA7CisJICAgICAgfQorCSAgICByZXR1cm4gcGZvdW5kLT52YWw7CisJICB9CisJICBuZXh0Y2hhciA9IE5VTEw7CisJICByZXR1cm4gJ1cnOwkvKiBMZXQgdGhlIGFwcGxpY2F0aW9uIGhhbmRsZSBpdC4gICAqLworICAgICAgfQorICAgIGlmICh0ZW1wWzFdID09ICc6JykKKyAgICAgIHsKKwlpZiAodGVtcFsyXSA9PSAnOicpCisJICB7CisJICAgIC8qIFRoaXMgaXMgYW4gb3B0aW9uIHRoYXQgYWNjZXB0cyBhbiBhcmd1bWVudCBvcHRpb25hbGx5LiAgKi8KKwkgICAgaWYgKCpuZXh0Y2hhciAhPSAnXDAnKQorCSAgICAgIHsKKwkJb3B0YXJnID0gbmV4dGNoYXI7CisJCW9wdGluZCsrOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIG9wdGFyZyA9IE5VTEw7CisJICAgIG5leHRjaGFyID0gTlVMTDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIC8qIFRoaXMgaXMgYW4gb3B0aW9uIHRoYXQgcmVxdWlyZXMgYW4gYXJndW1lbnQuICAqLworCSAgICBpZiAoKm5leHRjaGFyICE9ICdcMCcpCisJICAgICAgeworCQlvcHRhcmcgPSBuZXh0Y2hhcjsKKwkJLyogSWYgd2UgZW5kIHRoaXMgQVJHVi1lbGVtZW50IGJ5IHRha2luZyB0aGUgcmVzdCBhcyBhbiBhcmcsCisJCSAgIHdlIG11c3QgYWR2YW5jZSB0byB0aGUgbmV4dCBlbGVtZW50IG5vdy4gICovCisJCW9wdGluZCsrOworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAob3B0aW5kID09IGFyZ2MpCisJICAgICAgeworCQlpZiAob3B0ZXJyKQorCQkgIHsKKwkJICAgIC8qIDEwMDMuMiBzcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiB0aGlzIG1lc3NhZ2UuICAqLworCQkgICAgZnByaW50ZiAoc3RkZXJyLAorCQkJICAgXygiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIiksCisJCQkgICBhcmd2WzBdLCBjKTsKKwkJICB9CisJCW9wdG9wdCA9IGM7CisJCWlmIChvcHRzdHJpbmdbMF0gPT0gJzonKQorCQkgIGMgPSAnOic7CisJCWVsc2UKKwkJICBjID0gJz8nOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIC8qIFdlIGFscmVhZHkgaW5jcmVtZW50ZWQgYG9wdGluZCcgb25jZTsKKwkJIGluY3JlbWVudCBpdCBhZ2FpbiB3aGVuIHRha2luZyBuZXh0IEFSR1YtZWx0IGFzIGFyZ3VtZW50LiAgKi8KKwkgICAgICBvcHRhcmcgPSBhcmd2W29wdGluZCsrXTsKKwkgICAgbmV4dGNoYXIgPSBOVUxMOworCSAgfQorICAgICAgfQorICAgIHJldHVybiBjOworICB9Cit9CisKK2ludAorZ2V0b3B0IChhcmdjLCBhcmd2LCBvcHRzdHJpbmcpCisgICAgIGludCBhcmdjOworICAgICBjaGFyICpjb25zdCAqYXJndjsKKyAgICAgY29uc3QgY2hhciAqb3B0c3RyaW5nOworeworICByZXR1cm4gX2dldG9wdF9pbnRlcm5hbCAoYXJnYywgYXJndiwgb3B0c3RyaW5nLAorCQkJICAgKGNvbnN0IHN0cnVjdCBvcHRpb24gKikgMCwKKwkJCSAgIChpbnQgKikgMCwKKwkJCSAgIDApOworfQorCisjZW5kaWYJLyogTm90IEVMSURFX0NPREUuICAqLworDAorI2lmZGVmIFRFU1QKKworLyogQ29tcGlsZSB3aXRoIC1EVEVTVCB0byBtYWtlIGFuIGV4ZWN1dGFibGUgZm9yIHVzZSBpbiB0ZXN0aW5nCisgICB0aGUgYWJvdmUgZGVmaW5pdGlvbiBvZiBgZ2V0b3B0Jy4gICovCisKK2ludAorbWFpbiAoYXJnYywgYXJndikKKyAgICAgaW50IGFyZ2M7CisgICAgIGNoYXIgKiphcmd2OworeworICBpbnQgYzsKKyAgaW50IGRpZ2l0X29wdGluZCA9IDA7CisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaW50IHRoaXNfb3B0aW9uX29wdGluZCA9IG9wdGluZCA/IG9wdGluZCA6IDE7CisKKyAgICAgIGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJhYmM6ZDowMTIzNDU2Nzg5Iik7CisgICAgICBpZiAoYyA9PSAtMSkKKwlicmVhazsKKworICAgICAgc3dpdGNoIChjKQorCXsKKwljYXNlICcwJzoKKwljYXNlICcxJzoKKwljYXNlICcyJzoKKwljYXNlICczJzoKKwljYXNlICc0JzoKKwljYXNlICc1JzoKKwljYXNlICc2JzoKKwljYXNlICc3JzoKKwljYXNlICc4JzoKKwljYXNlICc5JzoKKwkgIGlmIChkaWdpdF9vcHRpbmQgIT0gMCAmJiBkaWdpdF9vcHRpbmQgIT0gdGhpc19vcHRpb25fb3B0aW5kKQorCSAgICBwcmludGYgKCJkaWdpdHMgb2NjdXIgaW4gdHdvIGRpZmZlcmVudCBhcmd2LWVsZW1lbnRzLlxuIik7CisJICBkaWdpdF9vcHRpbmQgPSB0aGlzX29wdGlvbl9vcHRpbmQ7CisJICBwcmludGYgKCJvcHRpb24gJWNcbiIsIGMpOworCSAgYnJlYWs7CisKKwljYXNlICdhJzoKKwkgIHByaW50ZiAoIm9wdGlvbiBhXG4iKTsKKwkgIGJyZWFrOworCisJY2FzZSAnYic6CisJICBwcmludGYgKCJvcHRpb24gYlxuIik7CisJICBicmVhazsKKworCWNhc2UgJ2MnOgorCSAgcHJpbnRmICgib3B0aW9uIGMgd2l0aCB2YWx1ZSBgJXMnXG4iLCBvcHRhcmcpOworCSAgYnJlYWs7CisKKwljYXNlICc/JzoKKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgIHByaW50ZiAoIj8/IGdldG9wdCByZXR1cm5lZCBjaGFyYWN0ZXIgY29kZSAwJW8gPz9cbiIsIGMpOworCX0KKyAgICB9CisKKyAgaWYgKG9wdGluZCA8IGFyZ2MpCisgICAgeworICAgICAgcHJpbnRmICgibm9uLW9wdGlvbiBBUkdWLWVsZW1lbnRzOiAiKTsKKyAgICAgIHdoaWxlIChvcHRpbmQgPCBhcmdjKQorCXByaW50ZiAoIiVzICIsIGFyZ3Zbb3B0aW5kKytdKTsKKyAgICAgIHByaW50ZiAoIlxuIik7CisgICAgfQorCisgIGV4aXQgKDApOworfQorCisjZW5kaWYgLyogVEVTVCAqLwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvc3JjL2dldG9wdDEuYyBiLzNyZHBhcnR5L3NwZWV4L3NyYy9nZXRvcHQxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVlNjMyNQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3NyYy9nZXRvcHQxLmMKQEAgLTAsMCArMSwxODggQEAKKy8qIGdldG9wdF9sb25nIGFuZCBnZXRvcHRfbG9uZ19vbmx5IGVudHJ5IHBvaW50cyBmb3IgR05VIGdldG9wdC4KKyAgIENvcHlyaWdodCAoQykgMTk4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Niw5Nyw5OAorICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKyAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiZ2V0b3B0X3dpbi5oIgorCisjaWYgIWRlZmluZWQgX19TVERDX18gfHwgIV9fU1REQ19fCisvKiBUaGlzIGlzIGEgc2VwYXJhdGUgY29uZGl0aW9uYWwgc2luY2Ugc29tZSBzdGRjIHN5c3RlbXMKKyAgIHJlamVjdCBgZGVmaW5lZCAoY29uc3QpJy4gICovCisjaWZuZGVmIGNvbnN0CisjZGVmaW5lIGNvbnN0CisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyogQ29tbWVudCBvdXQgYWxsIHRoaXMgY29kZSBpZiB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIExpYnJhcnksIGFuZCBhcmUgbm90CisgICBhY3R1YWxseSBjb21waWxpbmcgdGhlIGxpYnJhcnkgaXRzZWxmLiAgVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIEdOVSBDCisgICBMaWJyYXJ5LCBidXQgYWxzbyBpbmNsdWRlZCBpbiBtYW55IG90aGVyIEdOVSBkaXN0cmlidXRpb25zLiAgQ29tcGlsaW5nCisgICBhbmQgbGlua2luZyBpbiB0aGlzIGNvZGUgaXMgYSB3YXN0ZSB3aGVuIHVzaW5nIHRoZSBHTlUgQyBsaWJyYXJ5CisgICAoZXNwZWNpYWxseSBpZiBpdCBpcyBhIHNoYXJlZCBsaWJyYXJ5KS4gIFJhdGhlciB0aGFuIGhhdmluZyBldmVyeSBHTlUKKyAgIHByb2dyYW0gdW5kZXJzdGFuZCBgY29uZmlndXJlIC0td2l0aC1nbnUtbGliYycgYW5kIG9taXQgdGhlIG9iamVjdCBmaWxlcywKKyAgIGl0IGlzIHNpbXBsZXIgdG8ganVzdCBkbyB0aGlzIGluIHRoZSBzb3VyY2UgZm9yIGVhY2ggc3VjaCBmaWxlLiAgKi8KKworI2RlZmluZSBHRVRPUFRfSU5URVJGQUNFX1ZFUlNJT04gMgorI2lmICFkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgX19HTElCQ19fICYmIF9fR0xJQkNfXyA+PSAyCisjaW5jbHVkZSA8Z251LXZlcnNpb25zLmg+CisjaWYgX0dOVV9HRVRPUFRfSU5URVJGQUNFX1ZFUlNJT04gPT0gR0VUT1BUX0lOVEVSRkFDRV9WRVJTSU9OCisjZGVmaW5lIEVMSURFX0NPREUKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRUxJREVfQ09ERQorCisKKy8qIFRoaXMgbmVlZHMgdG8gY29tZSBhZnRlciBzb21lIGxpYnJhcnkgI2luY2x1ZGUKKyAgIHRvIGdldCBfX0dOVV9MSUJSQVJZX18gZGVmaW5lZC4gICovCisjaWZkZWYgX19HTlVfTElCUkFSWV9fCisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworI2lmbmRlZglOVUxMCisjZGVmaW5lIE5VTEwgMAorI2VuZGlmCisKK2ludAorZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGxvbmdfb3B0aW9ucywgb3B0X2luZGV4KQorICAgICBpbnQgYXJnYzsKKyAgICAgY2hhciAqY29uc3QgKmFyZ3Y7CisgICAgIGNvbnN0IGNoYXIgKm9wdGlvbnM7CisgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0aW9uczsKKyAgICAgaW50ICpvcHRfaW5kZXg7Cit7CisgIHJldHVybiBfZ2V0b3B0X2ludGVybmFsIChhcmdjLCBhcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsIG9wdF9pbmRleCwgMCk7Cit9CisKKy8qIExpa2UgZ2V0b3B0X2xvbmcsIGJ1dCAnLScgYXMgd2VsbCBhcyAnLS0nIGNhbiBpbmRpY2F0ZSBhIGxvbmcgb3B0aW9uLgorICAgSWYgYW4gb3B0aW9uIHRoYXQgc3RhcnRzIHdpdGggJy0nIChub3QgJy0tJykgZG9lc24ndCBtYXRjaCBhIGxvbmcgb3B0aW9uLAorICAgYnV0IGRvZXMgbWF0Y2ggYSBzaG9ydCBvcHRpb24sIGl0IGlzIHBhcnNlZCBhcyBhIHNob3J0IG9wdGlvbgorICAgaW5zdGVhZC4gICovCisKK2ludAorZ2V0b3B0X2xvbmdfb25seSAoYXJnYywgYXJndiwgb3B0aW9ucywgbG9uZ19vcHRpb25zLCBvcHRfaW5kZXgpCisgICAgIGludCBhcmdjOworICAgICBjaGFyICpjb25zdCAqYXJndjsKKyAgICAgY29uc3QgY2hhciAqb3B0aW9uczsKKyAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zOworICAgICBpbnQgKm9wdF9pbmRleDsKK3sKKyAgcmV0dXJuIF9nZXRvcHRfaW50ZXJuYWwgKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGxvbmdfb3B0aW9ucywgb3B0X2luZGV4LCAxKTsKK30KKworCisjZW5kaWYJLyogTm90IEVMSURFX0NPREUuICAqLworDAorI2lmZGVmIFRFU1QKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludAorbWFpbiAoYXJnYywgYXJndikKKyAgICAgaW50IGFyZ2M7CisgICAgIGNoYXIgKiphcmd2OworeworICBpbnQgYzsKKyAgaW50IGRpZ2l0X29wdGluZCA9IDA7CisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaW50IHRoaXNfb3B0aW9uX29wdGluZCA9IG9wdGluZCA/IG9wdGluZCA6IDE7CisgICAgICBpbnQgb3B0aW9uX2luZGV4ID0gMDsKKyAgICAgIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0KKyAgICAgIHsKKwl7ImFkZCIsIDEsIDAsIDB9LAorCXsiYXBwZW5kIiwgMCwgMCwgMH0sCisJeyJkZWxldGUiLCAxLCAwLCAwfSwKKwl7InZlcmJvc2UiLCAwLCAwLCAwfSwKKwl7ImNyZWF0ZSIsIDAsIDAsIDB9LAorCXsiZmlsZSIsIDEsIDAsIDB9LAorCXswLCAwLCAwLCAwfQorICAgICAgfTsKKworICAgICAgYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiYWJjOmQ6MDEyMzQ1Njc4OSIsCisJCSAgICAgICBsb25nX29wdGlvbnMsICZvcHRpb25faW5kZXgpOworICAgICAgaWYgKGMgPT0gLTEpCisJYnJlYWs7CisKKyAgICAgIHN3aXRjaCAoYykKKwl7CisJY2FzZSAwOgorCSAgcHJpbnRmICgib3B0aW9uICVzIiwgbG9uZ19vcHRpb25zW29wdGlvbl9pbmRleF0ubmFtZSk7CisJICBpZiAob3B0YXJnKQorCSAgICBwcmludGYgKCIgd2l0aCBhcmcgJXMiLCBvcHRhcmcpOworCSAgcHJpbnRmICgiXG4iKTsKKwkgIGJyZWFrOworCisJY2FzZSAnMCc6CisJY2FzZSAnMSc6CisJY2FzZSAnMic6CisJY2FzZSAnMyc6CisJY2FzZSAnNCc6CisJY2FzZSAnNSc6CisJY2FzZSAnNic6CisJY2FzZSAnNyc6CisJY2FzZSAnOCc6CisJY2FzZSAnOSc6CisJICBpZiAoZGlnaXRfb3B0aW5kICE9IDAgJiYgZGlnaXRfb3B0aW5kICE9IHRoaXNfb3B0aW9uX29wdGluZCkKKwkgICAgcHJpbnRmICgiZGlnaXRzIG9jY3VyIGluIHR3byBkaWZmZXJlbnQgYXJndi1lbGVtZW50cy5cbiIpOworCSAgZGlnaXRfb3B0aW5kID0gdGhpc19vcHRpb25fb3B0aW5kOworCSAgcHJpbnRmICgib3B0aW9uICVjXG4iLCBjKTsKKwkgIGJyZWFrOworCisJY2FzZSAnYSc6CisJICBwcmludGYgKCJvcHRpb24gYVxuIik7CisJICBicmVhazsKKworCWNhc2UgJ2InOgorCSAgcHJpbnRmICgib3B0aW9uIGJcbiIpOworCSAgYnJlYWs7CisKKwljYXNlICdjJzoKKwkgIHByaW50ZiAoIm9wdGlvbiBjIHdpdGggdmFsdWUgYCVzJ1xuIiwgb3B0YXJnKTsKKwkgIGJyZWFrOworCisJY2FzZSAnZCc6CisJICBwcmludGYgKCJvcHRpb24gZCB3aXRoIHZhbHVlIGAlcydcbiIsIG9wdGFyZyk7CisJICBicmVhazsKKworCWNhc2UgJz8nOgorCSAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgcHJpbnRmICgiPz8gZ2V0b3B0IHJldHVybmVkIGNoYXJhY3RlciBjb2RlIDAlbyA/P1xuIiwgYyk7CisJfQorICAgIH0KKworICBpZiAob3B0aW5kIDwgYXJnYykKKyAgICB7CisgICAgICBwcmludGYgKCJub24tb3B0aW9uIEFSR1YtZWxlbWVudHM6ICIpOworICAgICAgd2hpbGUgKG9wdGluZCA8IGFyZ2MpCisJcHJpbnRmICgiJXMgIiwgYXJndltvcHRpbmQrK10pOworICAgICAgcHJpbnRmICgiXG4iKTsKKyAgICB9CisKKyAgZXhpdCAoMCk7Cit9CisKKyNlbmRpZiAvKiBURVNUICovCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9zcmMvZ2V0b3B0X3dpbi5oIGIvM3JkcGFydHkvc3BlZXgvc3JjL2dldG9wdF93aW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDE0N2U5Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvc3JjL2dldG9wdF93aW4uaApAQCAtMCwwICsxLDE2OSBAQAorLyogRGVjbGFyYXRpb25zIGZvciBnZXRvcHQuCisgICBDb3B5cmlnaHQgKEMpIDE5ODksOTAsOTEsOTIsOTMsOTQsOTYsOTcsOTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCisgICB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNpZm5kZWYgX0dFVE9QVF9ICisKKyNpZm5kZWYgX19uZWVkX2dldG9wdAorIyBkZWZpbmUgX0dFVE9QVF9IIDEKKyNlbmRpZgorCisjaWZkZWYJX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEZvciBjb21tdW5pY2F0aW9uIGZyb20gYGdldG9wdCcgdG8gdGhlIGNhbGxlci4KKyAgIFdoZW4gYGdldG9wdCcgZmluZHMgYW4gb3B0aW9uIHRoYXQgdGFrZXMgYW4gYXJndW1lbnQsCisgICB0aGUgYXJndW1lbnQgdmFsdWUgaXMgcmV0dXJuZWQgaGVyZS4KKyAgIEFsc28sIHdoZW4gYG9yZGVyaW5nJyBpcyBSRVRVUk5fSU5fT1JERVIsCisgICBlYWNoIG5vbi1vcHRpb24gQVJHVi1lbGVtZW50IGlzIHJldHVybmVkIGhlcmUuICAqLworCitleHRlcm4gY2hhciAqb3B0YXJnOworCisvKiBJbmRleCBpbiBBUkdWIG9mIHRoZSBuZXh0IGVsZW1lbnQgdG8gYmUgc2Nhbm5lZC4KKyAgIFRoaXMgaXMgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB0byBhbmQgZnJvbSB0aGUgY2FsbGVyCisgICBhbmQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiBzdWNjZXNzaXZlIGNhbGxzIHRvIGBnZXRvcHQnLgorCisgICBPbiBlbnRyeSB0byBgZ2V0b3B0JywgemVybyBtZWFucyB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsOyBpbml0aWFsaXplLgorCisgICBXaGVuIGBnZXRvcHQnIHJldHVybnMgLTEsIHRoaXMgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvZiB0aGUKKyAgIG5vbi1vcHRpb24gZWxlbWVudHMgdGhhdCB0aGUgY2FsbGVyIHNob3VsZCBpdHNlbGYgc2Nhbi4KKworICAgT3RoZXJ3aXNlLCBgb3B0aW5kJyBjb21tdW5pY2F0ZXMgZnJvbSBvbmUgY2FsbCB0byB0aGUgbmV4dAorICAgaG93IG11Y2ggb2YgQVJHViBoYXMgYmVlbiBzY2FubmVkIHNvIGZhci4gICovCisKK2V4dGVybiBpbnQgb3B0aW5kOworCisvKiBDYWxsZXJzIHN0b3JlIHplcm8gaGVyZSB0byBpbmhpYml0IHRoZSBlcnJvciBtZXNzYWdlIGBnZXRvcHQnIHByaW50cworICAgZm9yIHVucmVjb2duaXplZCBvcHRpb25zLiAgKi8KKworZXh0ZXJuIGludCBvcHRlcnI7CisKKy8qIFNldCB0byBhbiBvcHRpb24gY2hhcmFjdGVyIHdoaWNoIHdhcyB1bnJlY29nbml6ZWQuICAqLworCitleHRlcm4gaW50IG9wdG9wdDsKKworI2lmbmRlZiBfX25lZWRfZ2V0b3B0CisvKiBEZXNjcmliZSB0aGUgbG9uZy1uYW1lZCBvcHRpb25zIHJlcXVlc3RlZCBieSB0aGUgYXBwbGljYXRpb24uCisgICBUaGUgTE9OR19PUFRJT05TIGFyZ3VtZW50IHRvIGdldG9wdF9sb25nIG9yIGdldG9wdF9sb25nX29ubHkgaXMgYSB2ZWN0b3IKKyAgIG9mIGBzdHJ1Y3Qgb3B0aW9uJyB0ZXJtaW5hdGVkIGJ5IGFuIGVsZW1lbnQgY29udGFpbmluZyBhIG5hbWUgd2hpY2ggaXMKKyAgIHplcm8uCisKKyAgIFRoZSBmaWVsZCBgaGFzX2FyZycgaXM6CisgICBub19hcmd1bWVudAkJKG9yIDApIGlmIHRoZSBvcHRpb24gZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudCwKKyAgIHJlcXVpcmVkX2FyZ3VtZW50CShvciAxKSBpZiB0aGUgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50LAorICAgb3B0aW9uYWxfYXJndW1lbnQgCShvciAyKSBpZiB0aGUgb3B0aW9uIHRha2VzIGFuIG9wdGlvbmFsIGFyZ3VtZW50LgorCisgICBJZiB0aGUgZmllbGQgYGZsYWcnIGlzIG5vdCBOVUxMLCBpdCBwb2ludHMgdG8gYSB2YXJpYWJsZSB0aGF0IGlzIHNldAorICAgdG8gdGhlIHZhbHVlIGdpdmVuIGluIHRoZSBmaWVsZCBgdmFsJyB3aGVuIHRoZSBvcHRpb24gaXMgZm91bmQsIGJ1dAorICAgbGVmdCB1bmNoYW5nZWQgaWYgdGhlIG9wdGlvbiBpcyBub3QgZm91bmQuCisKKyAgIFRvIGhhdmUgYSBsb25nLW5hbWVkIG9wdGlvbiBkbyBzb21ldGhpbmcgb3RoZXIgdGhhbiBzZXQgYW4gYGludCcgdG8KKyAgIGEgY29tcGlsZWQtaW4gY29uc3RhbnQsIHN1Y2ggYXMgc2V0IGEgdmFsdWUgZnJvbSBgb3B0YXJnJywgc2V0IHRoZQorICAgb3B0aW9uJ3MgYGZsYWcnIGZpZWxkIHRvIHplcm8gYW5kIGl0cyBgdmFsJyBmaWVsZCB0byBhIG5vbnplcm8KKyAgIHZhbHVlICh0aGUgZXF1aXZhbGVudCBzaW5nbGUtbGV0dGVyIG9wdGlvbiBjaGFyYWN0ZXIsIGlmIHRoZXJlIGlzCisgICBvbmUpLiAgRm9yIGxvbmcgb3B0aW9ucyB0aGF0IGhhdmUgYSB6ZXJvIGBmbGFnJyBmaWVsZCwgYGdldG9wdCcKKyAgIHJldHVybnMgdGhlIGNvbnRlbnRzIG9mIHRoZSBgdmFsJyBmaWVsZC4gICovCisKK3N0cnVjdCBvcHRpb24KK3sKKyMgaWYgZGVmaW5lZCBfX1NURENfXyAmJiBfX1NURENfXworICBjb25zdCBjaGFyICpuYW1lOworIyBlbHNlCisgIGNoYXIgKm5hbWU7CisjIGVuZGlmCisgIC8qIGhhc19hcmcgY2FuJ3QgYmUgYW4gZW51bSBiZWNhdXNlIHNvbWUgY29tcGlsZXJzIGNvbXBsYWluIGFib3V0CisgICAgIHR5cGUgbWlzbWF0Y2hlcyBpbiBhbGwgdGhlIGNvZGUgdGhhdCBhc3N1bWVzIGl0IGlzIGFuIGludC4gICovCisgIGludCBoYXNfYXJnOworICBpbnQgKmZsYWc7CisgIGludCB2YWw7Cit9OworCisvKiBOYW1lcyBmb3IgdGhlIHZhbHVlcyBvZiB0aGUgYGhhc19hcmcnIGZpZWxkIG9mIGBzdHJ1Y3Qgb3B0aW9uJy4gICovCisKKyMgZGVmaW5lIG5vX2FyZ3VtZW50CQkwCisjIGRlZmluZSByZXF1aXJlZF9hcmd1bWVudAkxCisjIGRlZmluZSBvcHRpb25hbF9hcmd1bWVudAkyCisjZW5kaWYJLyogbmVlZCBnZXRvcHQgKi8KKworCisvKiBHZXQgZGVmaW5pdGlvbnMgYW5kIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyB0byBwcm9jZXNzIHRoZQorICAgYXJndW1lbnRzIGluIEFSR1YgKEFSR0Mgb2YgdGhlbSwgbWludXMgdGhlIHByb2dyYW0gbmFtZSkgZm9yCisgICBvcHRpb25zIGdpdmVuIGluIE9QVFMuCisKKyAgIFJldHVybiB0aGUgb3B0aW9uIGNoYXJhY3RlciBmcm9tIE9QVFMganVzdCByZWFkLiAgUmV0dXJuIC0xIHdoZW4KKyAgIHRoZXJlIGFyZSBubyBtb3JlIG9wdGlvbnMuICBGb3IgdW5yZWNvZ25pemVkIG9wdGlvbnMsIG9yIG9wdGlvbnMKKyAgIG1pc3NpbmcgYXJndW1lbnRzLCBgb3B0b3B0JyBpcyBzZXQgdG8gdGhlIG9wdGlvbiBsZXR0ZXIsIGFuZCAnPycgaXMKKyAgIHJldHVybmVkLgorCisgICBUaGUgT1BUUyBzdHJpbmcgaXMgYSBsaXN0IG9mIGNoYXJhY3RlcnMgd2hpY2ggYXJlIHJlY29nbml6ZWQgb3B0aW9uCisgICBsZXR0ZXJzLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGNvbG9ucywgc3BlY2lmeWluZyB0aGF0IHRoYXQgbGV0dGVyCisgICB0YWtlcyBhbiBhcmd1bWVudCwgdG8gYmUgcGxhY2VkIGluIGBvcHRhcmcnLgorCisgICBJZiBhIGxldHRlciBpbiBPUFRTIGlzIGZvbGxvd2VkIGJ5IHR3byBjb2xvbnMsIGl0cyBhcmd1bWVudCBpcworICAgb3B0aW9uYWwuICBUaGlzIGJlaGF2aW9yIGlzIHNwZWNpZmljIHRvIHRoZSBHTlUgYGdldG9wdCcuCisKKyAgIFRoZSBhcmd1bWVudCBgLS0nIGNhdXNlcyBwcmVtYXR1cmUgdGVybWluYXRpb24gb2YgYXJndW1lbnQKKyAgIHNjYW5uaW5nLCBleHBsaWNpdGx5IHRlbGxpbmcgYGdldG9wdCcgdGhhdCB0aGVyZSBhcmUgbm8gbW9yZQorICAgb3B0aW9ucy4KKworICAgSWYgT1BUUyBiZWdpbnMgd2l0aCBgLS0nLCB0aGVuIG5vbi1vcHRpb24gYXJndW1lbnRzIGFyZSB0cmVhdGVkIGFzCisgICBhcmd1bWVudHMgdG8gdGhlIG9wdGlvbiAnXDAnLiAgVGhpcyBiZWhhdmlvciBpcyBzcGVjaWZpYyB0byB0aGUgR05VCisgICBgZ2V0b3B0Jy4gICovCisKKyNpZiBkZWZpbmVkIF9fU1REQ19fICYmIF9fU1REQ19fCisjIGlmZGVmIF9fR05VX0xJQlJBUllfXworLyogTWFueSBvdGhlciBsaWJyYXJpZXMgaGF2ZSBjb25mbGljdGluZyBwcm90b3R5cGVzIGZvciBnZXRvcHQsIHdpdGgKKyAgIGRpZmZlcmVuY2VzIGluIHRoZSBjb25zdHMsIGluIHN0ZGxpYi5oLiAgVG8gYXZvaWQgY29tcGlsYXRpb24KKyAgIGVycm9ycywgb25seSBwcm90b3R5cGUgZ2V0b3B0IGZvciB0aGUgR05VIEMgbGlicmFyeS4gICovCitleHRlcm4gaW50IGdldG9wdCAoaW50IF9fYXJnYywgY2hhciAqY29uc3QgKl9fYXJndiwgY29uc3QgY2hhciAqX19zaG9ydG9wdHMpOworIyBlbHNlIC8qIG5vdCBfX0dOVV9MSUJSQVJZX18gKi8KK2V4dGVybiBpbnQgZ2V0b3B0ICgpOworIyBlbmRpZiAvKiBfX0dOVV9MSUJSQVJZX18gKi8KKworIyBpZm5kZWYgX19uZWVkX2dldG9wdAorZXh0ZXJuIGludCBnZXRvcHRfbG9uZyAoaW50IF9fYXJnYywgY2hhciAqY29uc3QgKl9fYXJndiwgY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCisJCSAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqX19sb25nb3B0cywgaW50ICpfX2xvbmdpbmQpOworZXh0ZXJuIGludCBnZXRvcHRfbG9uZ19vbmx5IChpbnQgX19hcmdjLCBjaGFyICpjb25zdCAqX19hcmd2LAorCQkJICAgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKwkJICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKl9fbG9uZ29wdHMsIGludCAqX19sb25naW5kKTsKKworLyogSW50ZXJuYWwgb25seS4gIFVzZXJzIHNob3VsZCBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LiAgKi8KK2V4dGVybiBpbnQgX2dldG9wdF9pbnRlcm5hbCAoaW50IF9fYXJnYywgY2hhciAqY29uc3QgKl9fYXJndiwKKwkJCSAgICAgY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCisJCSAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLCBpbnQgKl9fbG9uZ2luZCwKKwkJCSAgICAgaW50IF9fbG9uZ19vbmx5KTsKKyMgZW5kaWYKKyNlbHNlIC8qIG5vdCBfX1NURENfXyAqLworZXh0ZXJuIGludCBnZXRvcHQgKCk7CisjIGlmbmRlZiBfX25lZWRfZ2V0b3B0CitleHRlcm4gaW50IGdldG9wdF9sb25nICgpOworZXh0ZXJuIGludCBnZXRvcHRfbG9uZ19vbmx5ICgpOworCitleHRlcm4gaW50IF9nZXRvcHRfaW50ZXJuYWwgKCk7CisjIGVuZGlmCisjZW5kaWYgLyogX19TVERDX18gKi8KKworI2lmZGVmCV9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworLyogTWFrZSBzdXJlIHdlIGxhdGVyIGNhbiBnZXQgYWxsIHRoZSBkZWZpbml0aW9ucyBhbmQgZGVjbGFyYXRpb25zLiAgKi8KKyN1bmRlZiBfX25lZWRfZ2V0b3B0CisKKyNlbmRpZiAvKiBnZXRvcHQuaCAqLwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvc3JjL3NrZWxldG9uLmMgYi8zcmRwYXJ0eS9zcGVleC9zcmMvc2tlbGV0b24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjE1OWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvc3JjL3NrZWxldG9uLmMKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBza2VsZXRvbi5jCisgKiBhdXRob3I6IFRhaHNlZW4gTW9oYW1tYWQKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPG9nZy9vZ2cuaD4KKworI2luY2x1ZGUgInNrZWxldG9uLmgiCisKKy8qIHdyaXRlIGFuIG9nZ19wYWdlIHRvIGEgZmlsZSBwb2ludGVyICovCitpbnQgd3JpdGVfb2dnX3BhZ2VfdG9fZmlsZShvZ2dfcGFnZSAqb2csIEZJTEUgKm91dCkgeworICAgaW50IHdyaXR0ZW47CisgICAKKyAgIHdyaXR0ZW4gPSBmd3JpdGUob2ctPmhlYWRlciwxLCBvZy0+aGVhZGVyX2xlbiwgb3V0KTsKKyAgIHdyaXR0ZW4gKz0gZndyaXRlKG9nLT5ib2R5LDEsIG9nLT5ib2R5X2xlbiwgb3V0KTsKKworICAgcmV0dXJuIHdyaXR0ZW47Cit9CisKK2ludCBhZGRfbWVzc2FnZV9oZWFkZXJfZmllbGQoZmlzYm9uZV9wYWNrZXQgKmZwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZWFkZXJfa2V5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZWFkZXJfdmFsdWUpIHsKKworICAgIC8qIHNpemUgb2YgYm90aCBrZXkgYW5kIHZhbHVlICsgJzogJyArIENSTEYgKi8KKyAgICBpbnQgdGhpc19tZXNzYWdlX3NpemUgPSBzdHJsZW4oaGVhZGVyX2tleSkgKyBzdHJsZW4oaGVhZGVyX3ZhbHVlKSArIDQ7CisgICAgaWYgKGZwLT5tZXNzYWdlX2hlYWRlcl9maWVsZHMgPT0gTlVMTCkgeworICAgICAgICBmcC0+bWVzc2FnZV9oZWFkZXJfZmllbGRzID0gX29nZ19jYWxsb2ModGhpc19tZXNzYWdlX3NpemUsIHNpemVvZihjaGFyKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IG5ld19zaXplID0gKGZwLT5jdXJyZW50X2hlYWRlcl9zaXplICsgdGhpc19tZXNzYWdlX3NpemUpICogc2l6ZW9mKGNoYXIpOworICAgICAgICBmcC0+bWVzc2FnZV9oZWFkZXJfZmllbGRzID0gX29nZ19yZWFsbG9jKGZwLT5tZXNzYWdlX2hlYWRlcl9maWVsZHMsIG5ld19zaXplKTsKKyAgICB9CisgICAgc25wcmludGYoZnAtPm1lc3NhZ2VfaGVhZGVyX2ZpZWxkcyArIGZwLT5jdXJyZW50X2hlYWRlcl9zaXplLCAKKyAgICAgICAgICAgICAgICB0aGlzX21lc3NhZ2Vfc2l6ZSsxLCAKKyAgICAgICAgICAgICAgICAiJXM6ICVzXHJcbiIsIAorICAgICAgICAgICAgICAgIGhlYWRlcl9rZXksIAorICAgICAgICAgICAgICAgIGhlYWRlcl92YWx1ZSk7CisgICAgZnAtPmN1cnJlbnRfaGVhZGVyX3NpemUgKz0gdGhpc19tZXNzYWdlX3NpemU7CisKKyAgICByZXR1cm4gMDsKK30KKworLyogY3JlYXRlIGEgb2dnX3BhY2tldCBmcm9tIGEgZmlzaGVhZF9wYWNrZXQgc3RydWN0dXJlICovCitvZ2dfcGFja2V0IG9nZ19mcm9tX2Zpc2hlYWQoZmlzaGVhZF9wYWNrZXQgKmZwKSB7CisKKyAgICBvZ2dfcGFja2V0IG9wOworCisgICAgbWVtc2V0KCZvcCwgMCwgc2l6ZW9mKG9wKSk7CisgICAgb3AucGFja2V0ID0gX29nZ19jYWxsb2MoRklTSEVBRF9TSVpFLCBzaXplb2YodW5zaWduZWQgY2hhcikpOworICAgIG1lbXNldChvcC5wYWNrZXQsIDAsIEZJU0hFQURfU0laRSk7CisKKyAgICBtZW1jcHkgKG9wLnBhY2tldCwgRklTSEVBRF9JREVOVElGSUVSLCA4KTsgLyogaWRlbnRpZmllciAqLworICAgICooKG9nZ191aW50MTZfdCopKG9wLnBhY2tldCs4KSkgPSBTS0VMRVRPTl9WRVJTSU9OX01BSk9SOyAvKiB2ZXJzaW9uIG1ham9yICovCisgICAgKigob2dnX3VpbnQxNl90Kikob3AucGFja2V0KzEwKSkgPSBTS0VMRVRPTl9WRVJTSU9OX01JTk9SOyAvKiB2ZXJzaW9uIG1pbm9yICovCisgICAgKigob2dnX2ludDY0X3QqKShvcC5wYWNrZXQrMTIpKSA9IChvZ2dfaW50NjRfdClmcC0+cHRpbWVfbjsgLyogcHJlc2VudGF0aW9udGltZSBudW1lcmF0b3IgKi8KKyAgICAqKChvZ2dfaW50NjRfdCopKG9wLnBhY2tldCsyMCkpID0gKG9nZ19pbnQ2NF90KWZwLT5wdGltZV9kOyAvKiBwcmVzZW50YXRpb250aW1lIGRlbm9taW5hdG9yICovCisgICAgKigob2dnX2ludDY0X3QqKShvcC5wYWNrZXQrMjgpKSA9IChvZ2dfaW50NjRfdClmcC0+YnRpbWVfbjsgLyogYmFzZXRpbWUgbnVtZXJhdG9yICovCisgICAgKigob2dnX2ludDY0X3QqKShvcC5wYWNrZXQrMzYpKSA9IChvZ2dfaW50NjRfdClmcC0+YnRpbWVfZDsgLyogYmFzZXRpbWUgZGVub21pbmF0b3IgKi8KKyAgICAvKiBUT0RPOiBVVEMgdGltZSwgc2V0IHRvIHplcm8gZm9yIG5vdyAqLworCisgICAgb3AuYl9vX3MgPSAxOyAgIC8qIGl0cyB0aGUgZmlyc3QgcGFja2V0IG9mIHRoZSBzdHJlYW0gKi8KKyAgICBvcC5lX29fcyA9IDA7ICAgLyogaXRzIG5vdCB0aGUgbGFzdCBwYWNrZXQgb2YgdGhlIHN0cmVhbSAqLworICAgIG9wLmJ5dGVzID0gRklTSEVBRF9TSVpFOyAgLyogbGVuZ3RoIG9mIHRoZSBwYWNrZXQgaW4gYnl0ZXMgKi8KKworICAgIHJldHVybiBvcDsKK30KKworLyogY3JlYXRlIGEgb2dnX3BhY2tldCBmcm9tIGEgZmlzYm9uZV9wYWNrZXQgc3RydWN0dXJlLiAKKyAqIGNhbGwgdGhpcyBtZXRob2QgYWZ0ZXIgdGhlIGZpc2JvbmVfcGFja2V0IGlzIGZpbGxlZCBhbmQgYWxsIG1lc3NhZ2UgaGVhZGVyIGZpZWxkcyBhcmUgYWRkZWQKKyAqIGJ5IGNhbGxpbmcgYWRkX21lc3NhZ2VfaGVhZGVyX2ZpZWxkIG1ldGhvZC4KKyAqLworb2dnX3BhY2tldCBvZ2dfZnJvbV9maXNib25lKGZpc2JvbmVfcGFja2V0ICpmcCkgeworICAgIAorICAgIG9nZ19wYWNrZXQgb3A7CisgICAgaW50IHBhY2tldF9zaXplID0gRklTQk9ORV9TSVpFICsgZnAtPmN1cnJlbnRfaGVhZGVyX3NpemU7CisKKyAgICBtZW1zZXQgKCZvcCwgMCwgc2l6ZW9mIChvcCkpOyAgICAgICAKKyAgICBvcC5wYWNrZXQgPSBfb2dnX2NhbGxvYyAocGFja2V0X3NpemUsIHNpemVvZih1bnNpZ25lZCBjaGFyKSk7CisgICAgbWVtc2V0IChvcC5wYWNrZXQsIDAsIHBhY2tldF9zaXplKTsKKyAgICBtZW1jcHkgKG9wLnBhY2tldCwgRklTQk9ORV9JREVOVElGSUVSLCA4KTsgLyogaWRlbnRpZmllciAqLworICAgICooKG9nZ191aW50MzJfdCopKG9wLnBhY2tldCs4KSkgPSBGSVNCT05FX01FU1NBR0VfSEVBREVSX09GRlNFVDsgLyogb2Zmc2V0IG9mIHRoZSBtZXNzYWdlIGhlYWRlciBmaWVsZHMgKi8KKyAgICAqKChvZ2dfdWludDMyX3QqKShvcC5wYWNrZXQrMTIpKSA9IGZwLT5zZXJpYWxfbm87IC8qIHNlcmlhbG5vIG9mIHRoZSByZXNwZWN0aXZlIHN0cmVhbSAqLworICAgICooKG9nZ191aW50MzJfdCopKG9wLnBhY2tldCsxNikpID0gZnAtPm5yX2hlYWRlcl9wYWNrZXQ7IC8qIG51bWJlciBvZiBoZWFkZXIgcGFja2V0cyAqLworICAgICooKG9nZ19pbnQ2NF90Kikob3AucGFja2V0KzIwKSkgPSBmcC0+Z3JhbnVsZV9yYXRlX247IC8qIGdyYW51bHJhdGUgbnVtZXJhdG9yICovCisgICAgKigob2dnX2ludDY0X3QqKShvcC5wYWNrZXQrMjgpKSA9IGZwLT5ncmFudWxlX3JhdGVfZDsgLyogZ3JhbnVscmF0ZSBkZW5vbWluYXRvciAqLworICAgICooKG9nZ19pbnQ2NF90Kikob3AucGFja2V0KzM2KSkgPSBmcC0+c3RhcnRfZ3JhbnVsZTsgLyogc3RhcnQgZ3JhbnVsZSAqLworICAgICooKG9nZ191aW50MzJfdCopKG9wLnBhY2tldCs0NCkpID0gZnAtPnByZXJvbGw7IC8qIHByZXJvbGwsIGZvciB0aGVvcmEgaXRzIDAgKi8KKyAgICAqKG9wLnBhY2tldCs0OCkgPSBmcC0+Z3JhbnVsZV9zaGlmdDsgLyogZ3JhbnVsZSBzaGlmdCAqLworICAgIG1lbWNweSgob3AucGFja2V0K0ZJU0JPTkVfU0laRSksIGZwLT5tZXNzYWdlX2hlYWRlcl9maWVsZHMsIGZwLT5jdXJyZW50X2hlYWRlcl9zaXplKTsKKworICAgIG9wLmJfb19zID0gMDsKKyAgICBvcC5lX29fcyA9IDA7CisgICAgb3AuYnl0ZXMgPSBwYWNrZXRfc2l6ZTsgLyogc2l6ZSBvZiB0aGUgcGFja2V0IGluIGJ5dGVzICovCisKKyAgICByZXR1cm4gb3A7Cit9CisKKy8qIGZpbGxzIHVwIGEgZmlzaGVhZF9wYWNrZXQgZnJvbSBhIGZpc2hlYWQgb2dnX3BhY2tldCBvZiBhIHNrZWxldG9uIGJpc3RyZWFtICovCitmaXNoZWFkX3BhY2tldCBmaXNoZWFkX2Zyb21fb2dnKG9nZ19wYWNrZXQgKm9wKSB7CisJCisgICAgZmlzaGVhZF9wYWNrZXQgZnA7CisKKyAgICBpZiAobWVtY21wKG9wLT5wYWNrZXQsIEZJU0hFQURfSURFTlRJRklFUiwgOCkpCisJOyAvKiBpbnZhbGlkIHBhY2tldCB3aGF0IGRvIHdlIGRvPyAqLworCisgICAgZnAudmVyc2lvbl9tYWpvciA9ICooKG9nZ191aW50MTZfdCopKG9wLT5wYWNrZXQrOCkpOyAvKiB2ZXJzaW9uIG1ham9yICovCisgICAgZnAudmVyc2lvbl9taW5vciA9ICooKG9nZ191aW50MTZfdCopKG9wLT5wYWNrZXQrMTApKTsgLyogdmVyc2lvbiBtaW5vciAqLworICAgIGZwLnB0aW1lX24gPSAqKChvZ2dfaW50NjRfdCopKG9wLT5wYWNrZXQrMTIpKTsgLyogcHJlc2VudGF0aW9udGltZSBudW1lcmF0b3IgKi8KKyAgICBmcC5wdGltZV9kID0gKigob2dnX2ludDY0X3QqKShvcC0+cGFja2V0KzIwKSk7IC8qIHByZXNlbnRhdGlvbnRpbWUgZGVub21pbmF0b3IgKi8KKyAgICBmcC5idGltZV9uID0gKigob2dnX2ludDY0X3QqKShvcC0+cGFja2V0KzI4KSk7IC8qIGJhc2V0aW1lIG51bWVyYXRvciAqLworICAgIGZwLmJ0aW1lX2QgPSAqKChvZ2dfaW50NjRfdCopKG9wLT5wYWNrZXQrMzYpKTsgLyogYmFzZXRpbWUgZGVub21pbmF0b3IgKi8KKyAgICBtZW1jcHkoZnAuVVRDLCBvcC0+cGFja2V0KzQ0LCAyMCk7CisKKyAgICByZXR1cm4gZnA7Cit9CisKKy8qIGZpbGxzIHVwIGEgZmlzYm9uZV9wYWNrZXQgZnJvbSBhIGZpc2JvbmUgb2dnX3BhY2tldCBvZiBhIHNrZWxldG9uIGJpdHN0cmVhbSAqLworZmlzYm9uZV9wYWNrZXQgZmlzYm9uZV9mcm9tX29nZyhvZ2dfcGFja2V0ICpvcCkgeworCisgICAgZmlzYm9uZV9wYWNrZXQgZnA7CisgICAgCisgICAgaWYgKG1lbWNtcChvcC0+cGFja2V0LCBGSVNCT05FX0lERU5USUZJRVIsIDgpKQorCTsgLyogaW52YWxpZCB2YWx1ZSwgd2hhdCBkbyB3ZSBkbz8gKi8KKyAgICBmcC5zZXJpYWxfbm8gPSAqKChvZ2dfdWludDMyX3QqKShvcC0+cGFja2V0KzEyKSk7IC8qIHNlcmlhbG5vIG9mIHRoZSBzdHJlYW0gcmVwcmVzZW50ZWQgYnkgdGhpcyBmaXNib25lIHBhY2tldCAqLworICAgIGZwLm5yX2hlYWRlcl9wYWNrZXQgPSAqKChvZ2dfdWludDMyX3QqKShvcC0+cGFja2V0KzE2KSk7IC8qIG51bWJlciBvZiBoZWFkZXIgcGFja2V0cyAqLworICAgIGZwLmdyYW51bGVfcmF0ZV9uID0gKigob2dnX2ludDY0X3QqKShvcC0+cGFja2V0KzIwKSk7IC8qIGdyYW51bHJhdGUgbnVtZXJhdG9yICovCisgICAgZnAuZ3JhbnVsZV9yYXRlX2QgPSAqKChvZ2dfaW50NjRfdCopKG9wLT5wYWNrZXQrMjgpKTsgLyogZ3JhbnVscmF0ZSBkZW5vbWluYXRvciAqLworICAgIGZwLnN0YXJ0X2dyYW51bGUgPSAqKChvZ2dfaW50NjRfdCopKG9wLT5wYWNrZXQrMzYpKTsgLyogc3RhcnQgZ3JhbnVsZSAqLworICAgIGZwLnByZXJvbGwgPSAqKChvZ2dfdWludDMyX3QqKShvcC0+cGFja2V0KzQ0KSk7IC8qIHByZXJvbGwsIGZvciB0aGVvcmEgaXRzIDAgKi8KKyAgICBmcC5ncmFudWxlX3NoaWZ0ID0gKihvcC0+cGFja2V0KzQ4KTsgLyogZ3JhbnVsZSBzaGlmdCAqLworICAgIGZwLmN1cnJlbnRfaGVhZGVyX3NpemUgPSBvcC0+Ynl0ZXMgLSBGSVNCT05FX1NJWkU7CisgICAgZnAubWVzc2FnZV9oZWFkZXJfZmllbGRzID0gX29nZ19jYWxsb2MoZnAuY3VycmVudF9oZWFkZXJfc2l6ZSsxLCBzaXplb2YoY2hhcikpOworICAgIG1lbWNweShmcC5tZXNzYWdlX2hlYWRlcl9maWVsZHMsIG9wLT5wYWNrZXQrRklTQk9ORV9TSVpFLCBmcC5jdXJyZW50X2hlYWRlcl9zaXplKTsKKworICAgIHJldHVybiBmcDsKK30KKworaW50IGFkZF9maXNoZWFkX3RvX3N0cmVhbShvZ2dfc3RyZWFtX3N0YXRlICpvcywgZmlzaGVhZF9wYWNrZXQgKmZwKSB7CisKKyAgICBvZ2dfcGFja2V0IG9wOworCisgICAgb3AgPSBvZ2dfZnJvbV9maXNoZWFkKGZwKTsKKyAgICBvZ2dfc3RyZWFtX3BhY2tldGluKG9zLCAmb3ApOworICAgIF9vZ2dfZnJlZShvcC5wYWNrZXQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBhZGRfZmlzYm9uZV90b19zdHJlYW0ob2dnX3N0cmVhbV9zdGF0ZSAqb3MsIGZpc2JvbmVfcGFja2V0ICpmcCkgeworCisgICAgb2dnX3BhY2tldCBvcDsKKworICAgIG9wID0gb2dnX2Zyb21fZmlzYm9uZShmcCk7CisgICAgb2dnX3N0cmVhbV9wYWNrZXRpbihvcywgJm9wKTsKKyAgICBfb2dnX2ZyZWUob3AucGFja2V0KTsKKworICAgIHJldHVybiAwOworfQorCitpbnQgYWRkX2Vvc19wYWNrZXRfdG9fc3RyZWFtKG9nZ19zdHJlYW1fc3RhdGUgKm9zKSB7CisKKyAgICBvZ2dfcGFja2V0IG9wOworCisgICAgbWVtc2V0ICgmb3AsIDAsIHNpemVvZihvcCkpOworICAgIG9wLmVfb19zID0gMTsKKyAgICBvZ2dfc3RyZWFtX3BhY2tldGluKG9zLCAmb3ApOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmbHVzaF9vZ2dfc3RyZWFtX3RvX2ZpbGUob2dnX3N0cmVhbV9zdGF0ZSAqb3MsIEZJTEUgKm91dCkgeworCisgICAgb2dnX3BhZ2Ugb2c7CisgICAgaW50IHJlc3VsdDsKKworICAgIHdoaWxlKChyZXN1bHQgPSBvZ2dfc3RyZWFtX2ZsdXNoKG9zLCAmb2cpKSkKKyAgICB7CisgICAgICAgIGlmKCFyZXN1bHQpIGJyZWFrOworICAgICAgICByZXN1bHQgPSB3cml0ZV9vZ2dfcGFnZV90b19maWxlKCZvZywgb3V0KTsKKyAgICAgICAgaWYocmVzdWx0ICE9IG9nLmhlYWRlcl9sZW4gKyBvZy5ib2R5X2xlbikKKyAgICAgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvc3JjL3NrZWxldG9uLmggYi8zcmRwYXJ0eS9zcGVleC9zcmMvc2tlbGV0b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDdkN2EzCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvc3JjL3NrZWxldG9uLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIHNrZWxldG9uLmgKKyAqIGF1dGhvcjogVGFoc2VlbiBNb2hhbW1hZAorICovCisKKyNpZm5kZWYgX1NLRUxFVE9OX0gKKyNkZWZpbmUgX1NLRUxFVE9OX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgV0lOMzIKKyNkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCisjZW5kaWYKKworI2luY2x1ZGUgPG9nZy9vZ2cuaD4KKworI2RlZmluZSBTS0VMRVRPTl9WRVJTSU9OX01BSk9SIDMKKyNkZWZpbmUgU0tFTEVUT05fVkVSU0lPTl9NSU5PUiAwCisjZGVmaW5lIEZJU0hFQURfSURFTlRJRklFUiAiZmlzaGVhZFwwIgorI2RlZmluZSBGSVNCT05FX0lERU5USUZJRVIgImZpc2JvbmVcMCIKKyNkZWZpbmUgRklTSEVBRF9TSVpFIDY0CisjZGVmaW5lIEZJU0JPTkVfU0laRSA1MgorI2RlZmluZSBGSVNCT05FX01FU1NBR0VfSEVBREVSX09GRlNFVCA0NAorCisvKiBmaXNoZWFkX3BhY2tldCBob2xkcyBhIGZpc2hlYWQgaGVhZGVyIHBhY2tldC4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBvZ2dfdWludDE2X3QgdmVyc2lvbl9tYWpvcjsJCQkJICAgIC8qIHNrZWxldG9uIHZlcnNpb24gbWFqb3IgKi8KKyAgICBvZ2dfdWludDE2X3QgdmVyc2lvbl9taW5vcjsJCQkJICAgIC8qIHNrZWxldG9uIHZlcnNpb24gbWlub3IgKi8KKyAgICAvKiBTdGFydCB0aW1lIG9mIHRoZSBwcmVzZW50YXRpb24KKyAgICAgKiBGb3IgYSBuZXcgc3RyZWFtIHByZXNlbnRhdGlvbnRpbWUgJiBiYXNldGltZSBpcyBzYW1lLiAqLworICAgIG9nZ19pbnQ2NF90IHB0aW1lX247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJlc2VudGF0aW9uIHRpbWUgbnVtZXJhdG9yICovCisgICAgb2dnX2ludDY0X3QgcHRpbWVfZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmVzZW50YXRpb24gdGltZSBkZW5vbWluYXRvciAqLworICAgIG9nZ19pbnQ2NF90IGJ0aW1lX247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmFzZXRpbWUgbnVtZXJhdG9yICovCisgICAgb2dnX2ludDY0X3QgYnRpbWVfZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiYXNldGltZSBkZW5vbWluYXRvciAqLworICAgIC8qIHdpbGwgaG9sZHMgdGhlIHRpbWUgb2Ygb3JpZ2luIG9mIHRoZSBzdHJlYW0sIGEgMjAgYml0IGZpZWxkLiAqLworICAgIHVuc2lnbmVkIGNoYXIgVVRDWzIwXTsKK30gZmlzaGVhZF9wYWNrZXQ7CisKKy8qIGZpc2JvbmVfcGFja2V0IGhvbGRzIGEgZmlzYm9uZSBoZWFkZXIgcGFja2V0LiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIG9nZ191aW50MzJfdCBzZXJpYWxfbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VyaWFsIG5vIG9mIHRoZSBjb3JyZXNwb25kaW5nIHN0cmVhbSAqLworICAgIG9nZ191aW50MzJfdCBucl9oZWFkZXJfcGFja2V0OyAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgaGVhZGVyIHBhY2tldHMgKi8KKyAgICAvKiBncmFudWxlIHJhdGUgaXMgdGhlIHRlbXBvcmFsIHJlc29sdXRpb24gb2YgdGhlIGxvZ2ljYWwgYml0c3RyZWFtICovCisgICAgb2dnX2ludDY0X3QgZ3JhbnVsZV9yYXRlX247ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdyYW51bGUgcmF0ZSBudW1lcmF0b3IgKi8KKyAgICBvZ2dfaW50NjRfdCBncmFudWxlX3JhdGVfZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ3JhbnVsZSByYXRlIGRlbm9taW5hdG9yICovCisgICAgb2dnX2ludDY0X3Qgc3RhcnRfZ3JhbnVsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0IGdyYW51bGUgdmFsdWUgKi8KKyAgICBvZ2dfdWludDMyX3QgcHJlcm9sbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByZXJvbGwgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGdyYW51bGVfc2hpZnQ7CQkgICAgICAgICAgICAvKiAxIGJ5dGUgdmFsdWUgaG9sZGluZyB0aGUgZ3JhbnVsZSBzaGlmdCAqLworICAgIGNoYXIgKm1lc3NhZ2VfaGVhZGVyX2ZpZWxkczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaG9sZHMgYWxsIHRoZSBtZXNzYWdlIGhlYWRlciBmaWVsZHMgKi8KKyAgICAvKiBjdXJyZW50IHRvdGFsIHNpemUgb2YgdGhlIG1lc3NhZ2UgaGVhZGVyIGZpZWxkcywgZm9yIHJlYWxsb2MgcHVycG9zZSwgaW5pdGlhbGx5IHplcm8gKi8KKyAgICBvZ2dfdWludDMyX3QgY3VycmVudF9oZWFkZXJfc2l6ZTsKK30gZmlzYm9uZV9wYWNrZXQ7CisKK2V4dGVybiBpbnQgd3JpdGVfb2dnX3BhZ2VfdG9fZmlsZShvZ2dfcGFnZSAqb2csIEZJTEUgKm91dCk7CitleHRlcm4gaW50IGFkZF9tZXNzYWdlX2hlYWRlcl9maWVsZChmaXNib25lX3BhY2tldCAqZnAsIGNoYXIgKmhlYWRlcl9rZXksIGNoYXIgKmhlYWRlcl92YWx1ZSk7CisvKiByZW1lbWJlciB0byBkZWFsbG9jYXRlIHRoZSByZXR1cm5lZCBvZ2dfcGFja2V0IHByb3Blcmx5ICovCitleHRlcm4gb2dnX3BhY2tldCBvZ2dfZnJvbV9maXNoZWFkKGZpc2hlYWRfcGFja2V0ICpmcCk7CitleHRlcm4gb2dnX3BhY2tldCBvZ2dfZnJvbV9maXNib25lKGZpc2JvbmVfcGFja2V0ICpmcCk7CitleHRlcm4gZmlzaGVhZF9wYWNrZXQgZmlzaGVhZF9mcm9tX29nZyhvZ2dfcGFja2V0ICpvcCk7CitleHRlcm4gZmlzYm9uZV9wYWNrZXQgZmlzYm9uZV9mcm9tX29nZyhvZ2dfcGFja2V0ICpvcCk7CitleHRlcm4gaW50IGFkZF9maXNoZWFkX3RvX3N0cmVhbShvZ2dfc3RyZWFtX3N0YXRlICpvcywgZmlzaGVhZF9wYWNrZXQgKmZwKTsKK2V4dGVybiBpbnQgYWRkX2Zpc2JvbmVfdG9fc3RyZWFtKG9nZ19zdHJlYW1fc3RhdGUgKm9zLCBmaXNib25lX3BhY2tldCAqZnApOworZXh0ZXJuIGludCBhZGRfZW9zX3BhY2tldF90b19zdHJlYW0ob2dnX3N0cmVhbV9zdGF0ZSAqb3MpOworZXh0ZXJuIGludCBmbHVzaF9vZ2dfc3RyZWFtX3RvX2ZpbGUob2dnX3N0cmVhbV9zdGF0ZSAqb3MsIEZJTEUgKm91dCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAgLyogX1NLRUxFVE9OX0ggKi8KKworCisKKworCisKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3NyYy9zcGVleGRlYy4xIGIvM3JkcGFydHkvc3BlZXgvc3JjL3NwZWV4ZGVjLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NmZDcyMwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3NyYy9zcGVleGRlYy4xCkBAIC0wLDAgKzEsNzggQEAKKy5cIiBETyBOT1QgTU9ESUZZIFRISVMgRklMRSEgIEl0IHdhcyBnZW5lcmF0ZWQgYnkgaGVscDJtYW4gMS4yOS4KKy5USCBTUEVFWERFQyAiMSIgIlNlcHRlbWJlciAyMDAzIiAic3BlZXhkZWMgdmVyc2lvbiAxLjEiICJVc2VyIENvbW1hbmRzIgorLlNIIE5BTUUKK3NwZWV4ZGVjIFwtIG1hbnVhbCBwYWdlIGZvciBzcGVleGRlYyB2ZXJzaW9uIDEuMQorLlNIIFNZTk9QU0lTCisuQiBzcGVleGRlYworW1xmSW9wdGlvbnNcZlJdIFxmSWlucHV0X2ZpbGUuc3B4IFxmUltcZklvdXRwdXRfZmlsZVxmUl0KKy5TSCBERVNDUklQVElPTgorRGVjb2RlcyBhIFNwZWV4IGZpbGUgYW5kIHByb2R1Y2UgYSBXQVYgZmlsZSBvciByYXcgZmlsZQorLlNTICJpbnB1dF9maWxlIGNhbiBiZToiCisuVFAKK2ZpbGVuYW1lLnNweAorcmVndWxhciBTcGVleCBmaWxlCisuVFAKKy0KK3N0ZGluCisuU1MgIm91dHB1dF9maWxlIGNhbiBiZToiCisuVFAKK2ZpbGVuYW1lLndhdgorV2F2IGZpbGUKKy5UUAorZmlsZW5hbWUuKgorUmF3IFBDTSBmaWxlIChhbnkgZXh0ZW5zaW9uIG90aGVyIHRoYXQgLndhdikKKy5UUAorLQorc3Rkb3V0CisuVFAKKyhub3RoaW5nKQorV2lsbCBiZSBwbGF5ZWQgdG8gc291bmRjYXJkCisuU0ggT1BUSU9OUworLlRQCitcZkJcLVwtZW5oXGZSCitFbmFibGUgcGVyY2VwdHVhbCBlbmhhbmNlbWVudCAoZGVmYXVsdCkKKy5UUAorXGZCXC1cLW5vXC1lbmhcZlIKK0Rpc2FibGUgcGVyY2VwdHVhbCBlbmhhbmNlbWVudAorLlRQCitcZkJcLVwtZm9yY2VcLW5iXGZSCitGb3JjZSBkZWNvZGluZyBpbiBuYXJyb3diYW5kCisuVFAKK1xmQlwtXC1mb3JjZVwtd2JcZlIKK0ZvcmNlIGRlY29kaW5nIGluIHdpZGViYW5kCisuVFAKK1xmQlwtXC1mb3JjZVwtdXdiXGZSCitGb3JjZSBkZWNvZGluZyBpbiB1bHRyYS13aWRlYmFuZAorLlRQCitcZkJcLVwtbW9ub1xmUgorRm9yY2UgZGVjb2RpbmcgaW4gbW9ubworLlRQCitcZkJcLVwtc3RlcmVvXGZSCitGb3JjZSBkZWNvZGluZyBpbiBzdGVyZW8KKy5UUAorXGZCXC1cLXJhdGVcZlIgbgorRm9yY2UgZGVjb2RpbmcgYXQgc2FtcGxpbmcgcmF0ZSBuIEh6CisuVFAKK1xmQlwtXC1wYWNrZXRcLWxvc3NcZlIgbgorU2ltdWxhdGUgbiAlIHJhbmRvbSBwYWNrZXQgbG9zcworLlRQCitcZkJcLVZcZlIKK1ZlcmJvc2UgbW9kZSAoc2hvdyBiaXQtcmF0ZSkKKy5UUAorXGZCXC1oXGZSLCBcZkJcLVwtaGVscFxmUgorVGhpcyBoZWxwCisuVFAKK1xmQlwtdlxmUiwgXGZCXC1cLXZlcnNpb25cZlIKK1ZlcnNpb24gaW5mb3JtYXRpb24KKy5UUAorXGZCXC1cLXBmXGZSCitEZXByZWNhdGVkLCB1c2UgXGZCXC1cLWVuaFxmUiBpbnN0ZWFkCisuVFAKK1xmQlwtXC1ub1wtcGZcZlIKK0RlcHJlY2F0ZWQsIHVzZSBcZkJcLVwtbm9cLWVuaFxmUiBpbnN0ZWFkCisuUFAKK01vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGZyb20gdGhlIFNwZWV4IHNpdGU6IGh0dHA6Ly93d3cuc3BlZXgub3JnCisuUFAKK1BsZWFzZSByZXBvcnQgYnVncyB0byB0aGUgbWFpbGluZyBsaXN0IGBzcGVleC1kZXZAeGlwaC5vcmcnLgorLlNIIENPUFlSSUdIVAorQ29weXJpZ2h0IFwoY28gMjAwMiBKZWFuLU1hcmMgVmFsaW4KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3NyYy9zcGVleGRlYy5jIGIvM3JkcGFydHkvc3BlZXgvc3JjL3NwZWV4ZGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRhNjNjMQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3NyYy9zcGVleGRlYy5jCkBAIC0wLDAgKzEsNzk2IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiBKZWFuLU1hcmMgVmFsaW4gCisgICBGaWxlOiBzcGVleGRlYy5jCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgIWRlZmluZWQgV0lOMzIgJiYgIWRlZmluZWQgX1dJTjMyCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZW5kaWYKKyNpZm5kZWYgSEFWRV9HRVRPUFRfTE9ORworI2luY2x1ZGUgImdldG9wdF93aW4uaCIKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8c3BlZXgvc3BlZXguaD4KKyNpbmNsdWRlIDxvZ2cvb2dnLmg+CisKKyNpZiBkZWZpbmVkIFdJTjMyIHx8IGRlZmluZWQgX1dJTjMyCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgImdldG9wdF93aW4uaCIKKyNpbmNsdWRlICJ3YXZlX291dC5oIgorLyogV2UgbmVlZCB0aGUgZm9sbG93aW5nIHR3byB0byBzZXQgc3Rkb3V0IHRvIGJpbmFyeSAqLworI2luY2x1ZGUgPGlvLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG1hdGguaD4KKworI2lmZGVmIF9fTUlOR1czMl9fCisjaW5jbHVkZSAid2F2ZV9vdXQuYyIKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfU09VTkRDQVJEX0gKKyNpbmNsdWRlIDxzeXMvc291bmRjYXJkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCisjZWxpZiBkZWZpbmVkIEhBVkVfU1lTX0FVRElPSU9fSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL2F1ZGlvaW8uaD4KKyNpZm5kZWYgQVVESU9fRU5DT0RJTkdfU0xJTkVBUgorI2RlZmluZSBBVURJT19FTkNPRElOR19TTElORUFSIEFVRElPX0VOQ09ESU5HX0xJTkVBUiAvKiBTb2xhcmlzICovCisjZW5kaWYKKworI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJ3YXZfaW8uaCIKKyNpbmNsdWRlIDxzcGVleC9zcGVleF9oZWFkZXIuaD4KKyNpbmNsdWRlIDxzcGVleC9zcGVleF9zdGVyZW8uaD4KKyNpbmNsdWRlIDxzcGVleC9zcGVleF9jYWxsYmFja3MuaD4KKyNpbmNsdWRlICJ3YXZfaW8uaCIKKworI2RlZmluZSBNQVhfRlJBTUVfU0laRSAyMDAwCisKKyNkZWZpbmUgcmVhZGludChidWYsIGJhc2UpICgoKGJ1ZltiYXNlKzNdPDwyNCkmMHhmZjAwMDAwMCl8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYnVmW2Jhc2UrMl08PDE2KSYweGZmMDAwMCl8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYnVmW2Jhc2UrMV08PDgpJjB4ZmYwMCl8IFwKKyAgCSAgICAgICAgICAgCSAgICAoYnVmW2Jhc2VdJjB4ZmYpKQorCitzdGF0aWMgdm9pZCBwcmludF9jb21tZW50cyhjaGFyICpjb21tZW50cywgaW50IGxlbmd0aCkKK3sKKyAgIGNoYXIgKmM9Y29tbWVudHM7CisgICBpbnQgbGVuLCBpLCBuYl9maWVsZHM7CisgICBjaGFyICplbmQ7CisgICAKKyAgIGlmIChsZW5ndGg8OCkKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkludmFsaWQvY29ycnVwdGVkIGNvbW1lbnRzXG4iKTsKKyAgICAgIHJldHVybjsKKyAgIH0KKyAgIGVuZCA9IGMrbGVuZ3RoOworICAgbGVuPXJlYWRpbnQoYywgMCk7CisgICBjKz00OworICAgaWYgKGMrbGVuPmVuZCkKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkludmFsaWQvY29ycnVwdGVkIGNvbW1lbnRzXG4iKTsKKyAgICAgIHJldHVybjsKKyAgIH0KKyAgIGZ3cml0ZShjLCAxLCBsZW4sIHN0ZGVycik7CisgICBjKz1sZW47CisgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgaWYgKGMrND5lbmQpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJJbnZhbGlkL2NvcnJ1cHRlZCBjb21tZW50c1xuIik7CisgICAgICByZXR1cm47CisgICB9CisgICBuYl9maWVsZHM9cmVhZGludChjLCAwKTsKKyAgIGMrPTQ7CisgICBmb3IgKGk9MDtpPG5iX2ZpZWxkcztpKyspCisgICB7CisgICAgICBpZiAoYys0PmVuZCkKKyAgICAgIHsKKyAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkludmFsaWQvY29ycnVwdGVkIGNvbW1lbnRzXG4iKTsKKyAgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGxlbj1yZWFkaW50KGMsIDApOworICAgICAgYys9NDsKKyAgICAgIGlmIChjK2xlbj5lbmQpCisgICAgICB7CisgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJJbnZhbGlkL2NvcnJ1cHRlZCBjb21tZW50c1xuIik7CisgICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBmd3JpdGUoYywgMSwgbGVuLCBzdGRlcnIpOworICAgICAgYys9bGVuOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgIH0KK30KKworRklMRSAqb3V0X2ZpbGVfb3BlbihjaGFyICpvdXRGaWxlLCBpbnQgcmF0ZSwgaW50ICpjaGFubmVscykKK3sKKyAgIEZJTEUgKmZvdXQ9TlVMTDsKKyAgIC8qT3BlbiBvdXRwdXQgZmlsZSovCisgICBpZiAoc3RybGVuKG91dEZpbGUpPT0wKQorICAgeworI2lmIGRlZmluZWQgSEFWRV9TWVNfU09VTkRDQVJEX0gKKyAgICAgIGludCBhdWRpb19mZCwgZm9ybWF0LCBzdGVyZW87CisgICAgICBhdWRpb19mZD1vcGVuKCIvZGV2L2RzcCIsIE9fV1JPTkxZKTsKKyAgICAgIGlmIChhdWRpb19mZDwwKQorICAgICAgeworICAgICAgICAgcGVycm9yKCJDYW5ub3Qgb3BlbiAvZGV2L2RzcCIpOworICAgICAgICAgZXhpdCgxKTsgICAgICAgICAKKyAgICAgIH0KKworICAgICAgZm9ybWF0PUFGTVRfUzE2X05FOworICAgICAgaWYgKGlvY3RsKGF1ZGlvX2ZkLCBTTkRDVExfRFNQX1NFVEZNVCwgJmZvcm1hdCk9PS0xKQorICAgICAgeworICAgICAgICAgcGVycm9yKCJTTkRDVExfRFNQX1NFVEZNVCIpOworICAgICAgICAgY2xvc2UoYXVkaW9fZmQpOworICAgICAgICAgZXhpdCgxKTsKKyAgICAgIH0KKworICAgICAgc3RlcmVvPTA7CisgICAgICBpZiAoKmNoYW5uZWxzPT0yKQorICAgICAgICAgc3RlcmVvPTE7CisgICAgICBpZiAoaW9jdGwoYXVkaW9fZmQsIFNORENUTF9EU1BfU1RFUkVPLCAmc3RlcmVvKT09LTEpCisgICAgICB7CisgICAgICAgICBwZXJyb3IoIlNORENUTF9EU1BfU1RFUkVPIik7CisgICAgICAgICBjbG9zZShhdWRpb19mZCk7CisgICAgICAgICBleGl0KDEpOworICAgICAgfQorICAgICAgaWYgKHN0ZXJlbyE9MCkKKyAgICAgIHsKKyAgICAgICAgIGlmICgqY2hhbm5lbHM9PTEpCisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJDYW5ub3Qgc2V0IG1vbm8gbW9kZSwgd2lsbCBkZWNvZGUgaW4gc3RlcmVvXG4iKTsKKyAgICAgICAgICpjaGFubmVscz0yOworICAgICAgfQorCisgICAgICBpZiAoaW9jdGwoYXVkaW9fZmQsIFNORENUTF9EU1BfU1BFRUQsICZyYXRlKT09LTEpCisgICAgICB7CisgICAgICAgICBwZXJyb3IoIlNORENUTF9EU1BfU1BFRUQiKTsKKyAgICAgICAgIGNsb3NlKGF1ZGlvX2ZkKTsKKyAgICAgICAgIGV4aXQoMSk7CisgICAgICB9CisgICAgICBmb3V0ID0gZmRvcGVuKGF1ZGlvX2ZkLCAidyIpOworI2VsaWYgZGVmaW5lZCBIQVZFX1NZU19BVURJT0lPX0gKKyAgICAgIGF1ZGlvX2luZm9fdCBpbmZvOworICAgICAgaW50IGF1ZGlvX2ZkOworICAgICAgCisgICAgICBhdWRpb19mZCA9IG9wZW4oIi9kZXYvYXVkaW8iLCBPX1dST05MWSk7CisgICAgICBpZiAoYXVkaW9fZmQ8MCkKKyAgICAgIHsKKyAgICAgICAgIHBlcnJvcigiQ2Fubm90IG9wZW4gL2Rldi9hdWRpbyIpOworICAgICAgICAgZXhpdCgxKTsKKyAgICAgIH0KKworICAgICAgQVVESU9fSU5JVElORk8oJmluZm8pOworI2lmZGVmIEFVTU9ERV9QTEFZICAgIC8qIE5ldEJTRC9PcGVuQlNEICovCisgICAgICBpbmZvLm1vZGUgPSBBVU1PREVfUExBWTsKKyNlbmRpZgorICAgICAgaW5mby5wbGF5LmVuY29kaW5nID0gQVVESU9fRU5DT0RJTkdfU0xJTkVBUjsKKyAgICAgIGluZm8ucGxheS5wcmVjaXNpb24gPSAxNjsKKyAgICAgIGluZm8ucGxheS5zYW1wbGVfcmF0ZSA9IHJhdGU7CisgICAgICBpbmZvLnBsYXkuY2hhbm5lbHMgPSAqY2hhbm5lbHM7CisgICAgICAKKyAgICAgIGlmIChpb2N0bChhdWRpb19mZCwgQVVESU9fU0VUSU5GTywgJmluZm8pIDwgMCkKKyAgICAgIHsKKyAgICAgICAgIHBlcnJvciAoIkFVRElPX1NFVElORk8iKTsKKyAgICAgICAgIGV4aXQoMSk7CisgICAgICB9CisgICAgICBmb3V0ID0gZmRvcGVuKGF1ZGlvX2ZkLCAidyIpOworI2VsaWYgZGVmaW5lZCBXSU4zMiB8fCBkZWZpbmVkIF9XSU4zMgorICAgICAgeworICAgICAgICAgdW5zaWduZWQgaW50IHNwZWV4X2NoYW5uZWxzID0gKmNoYW5uZWxzOworICAgICAgICAgaWYgKFNldF9XSU5fUGFyYW1zIChJTlZBTElEX0ZJTEVERVNDLCByYXRlLCBTQU1QTEVfU0laRSwgc3BlZXhfY2hhbm5lbHMpKQorICAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiQ2FuJ3QgYWNjZXNzICVzXG4iLCAiV0FWRSBPVVQiKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICB9CisgICAgICB9CisjZWxzZQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTm8gc291bmRjYXJkIHN1cHBvcnRcbiIpOworICAgICAgZXhpdCgxKTsKKyNlbmRpZgorICAgfSBlbHNlIHsKKyAgICAgIGlmIChzdHJjbXAob3V0RmlsZSwiLSIpPT0wKQorICAgICAgeworI2lmIGRlZmluZWQgV0lOMzIgfHwgZGVmaW5lZCBfV0lOMzIKKyAgICAgICAgIF9zZXRtb2RlKF9maWxlbm8oc3Rkb3V0KSwgX09fQklOQVJZKTsKKyNlbmRpZgorICAgICAgICAgZm91dD1zdGRvdXQ7CisgICAgICB9CisgICAgICBlbHNlIAorICAgICAgeworICAgICAgICAgZm91dCA9IGZvcGVuKG91dEZpbGUsICJ3YiIpOworICAgICAgICAgaWYgKCFmb3V0KQorICAgICAgICAgeworICAgICAgICAgICAgcGVycm9yKG91dEZpbGUpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmIChzdHJjbXAob3V0RmlsZStzdHJsZW4ob3V0RmlsZSktNCwiLndhdiIpPT0wIHx8IHN0cmNtcChvdXRGaWxlK3N0cmxlbihvdXRGaWxlKS00LCIuV0FWIik9PTApCisgICAgICAgICAgICB3cml0ZV93YXZfaGVhZGVyKGZvdXQsIHJhdGUsICpjaGFubmVscywgMCwgMCk7CisgICAgICB9CisgICB9CisgICByZXR1cm4gZm91dDsKK30KKwordm9pZCB1c2FnZSgpCit7CisgICBwcmludGYgKCJVc2FnZTogc3BlZXhkZWMgW29wdGlvbnNdIGlucHV0X2ZpbGUuc3B4IFtvdXRwdXRfZmlsZV1cbiIpOworICAgcHJpbnRmICgiXG4iKTsKKyAgIHByaW50ZiAoIkRlY29kZXMgYSBTcGVleCBmaWxlIGFuZCBwcm9kdWNlIGEgV0FWIGZpbGUgb3IgcmF3IGZpbGVcbiIpOworICAgcHJpbnRmICgiXG4iKTsKKyAgIHByaW50ZiAoImlucHV0X2ZpbGUgY2FuIGJlOlxuIik7CisgICBwcmludGYgKCIgIGZpbGVuYW1lLnNweCAgICAgICAgIHJlZ3VsYXIgU3BlZXggZmlsZVxuIik7CisgICBwcmludGYgKCIgIC0gICAgICAgICAgICAgICAgICAgIHN0ZGluXG4iKTsKKyAgIHByaW50ZiAoIlxuIik7ICAKKyAgIHByaW50ZiAoIm91dHB1dF9maWxlIGNhbiBiZTpcbiIpOworICAgcHJpbnRmICgiICBmaWxlbmFtZS53YXYgICAgICAgICBXYXYgZmlsZVxuIik7CisgICBwcmludGYgKCIgIGZpbGVuYW1lLiogICAgICAgICAgIFJhdyBQQ00gZmlsZSAoYW55IGV4dGVuc2lvbiBvdGhlciB0aGF0IC53YXYpXG4iKTsKKyAgIHByaW50ZiAoIiAgLSAgICAgICAgICAgICAgICAgICAgc3Rkb3V0XG4iKTsKKyAgIHByaW50ZiAoIiAgKG5vdGhpbmcpICAgICAgICAgICAgV2lsbCBiZSBwbGF5ZWQgdG8gc291bmRjYXJkXG4iKTsKKyAgIHByaW50ZiAoIlxuIik7ICAKKyAgIHByaW50ZiAoIk9wdGlvbnM6XG4iKTsKKyAgIHByaW50ZiAoIiAtLWVuaCAgICAgICAgICAgICAgICAgRW5hYmxlIHBlcmNlcHR1YWwgZW5oYW5jZW1lbnQgKGRlZmF1bHQpXG4iKTsKKyAgIHByaW50ZiAoIiAtLW5vLWVuaCAgICAgICAgICAgICAgRGlzYWJsZSBwZXJjZXB0dWFsIGVuaGFuY2VtZW50XG4iKTsKKyAgIHByaW50ZiAoIiAtLWZvcmNlLW5iICAgICAgICAgICAgRm9yY2UgZGVjb2RpbmcgaW4gbmFycm93YmFuZFxuIik7CisgICBwcmludGYgKCIgLS1mb3JjZS13YiAgICAgICAgICAgIEZvcmNlIGRlY29kaW5nIGluIHdpZGViYW5kXG4iKTsKKyAgIHByaW50ZiAoIiAtLWZvcmNlLXV3YiAgICAgICAgICAgRm9yY2UgZGVjb2RpbmcgaW4gdWx0cmEtd2lkZWJhbmRcbiIpOworICAgcHJpbnRmICgiIC0tbW9ubyAgICAgICAgICAgICAgICBGb3JjZSBkZWNvZGluZyBpbiBtb25vXG4iKTsKKyAgIHByaW50ZiAoIiAtLXN0ZXJlbyAgICAgICAgICAgICAgRm9yY2UgZGVjb2RpbmcgaW4gc3RlcmVvXG4iKTsKKyAgIHByaW50ZiAoIiAtLXJhdGUgbiAgICAgICAgICAgICAgRm9yY2UgZGVjb2RpbmcgYXQgc2FtcGxpbmcgcmF0ZSBuIEh6XG4iKTsKKyAgIHByaW50ZiAoIiAtLXBhY2tldC1sb3NzIG4gICAgICAgU2ltdWxhdGUgbiAlJSByYW5kb20gcGFja2V0IGxvc3NcbiIpOworICAgcHJpbnRmICgiIC1WICAgICAgICAgICAgICAgICAgICBWZXJib3NlIG1vZGUgKHNob3cgYml0LXJhdGUpXG4iKTsgCisgICBwcmludGYgKCIgLWgsIC0taGVscCAgICAgICAgICAgIFRoaXMgaGVscFxuIik7CisgICBwcmludGYgKCIgLXYsIC0tdmVyc2lvbiAgICAgICAgIFZlcnNpb24gaW5mb3JtYXRpb25cbiIpOworICAgcHJpbnRmICgiIC0tcGYgICAgICAgICAgICAgICAgICBEZXByZWNhdGVkLCB1c2UgLS1lbmggaW5zdGVhZFxuIik7CisgICBwcmludGYgKCIgLS1uby1wZiAgICAgICAgICAgICAgIERlcHJlY2F0ZWQsIHVzZSAtLW5vLWVuaCBpbnN0ZWFkXG4iKTsKKyAgIHByaW50ZiAoIlxuIik7CisgICBwcmludGYgKCJNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBTcGVleCBzaXRlOiBodHRwOi8vd3d3LnNwZWV4Lm9yZ1xuIik7CisgICBwcmludGYgKCJcbiIpOworICAgcHJpbnRmICgiUGxlYXNlIHJlcG9ydCBidWdzIHRvIHRoZSBtYWlsaW5nIGxpc3QgYHNwZWV4LWRldkB4aXBoLm9yZycuXG4iKTsKK30KKwordm9pZCB2ZXJzaW9uKCkKK3sKKyAgIHByaW50ZiAoInNwZWV4ZGVjIChTcGVleCBkZWNvZGVyKSB2ZXJzaW9uICIgU1BFRVhfVkVSU0lPTiAiIChjb21waWxlZCAiIF9fREFURV9fICIpXG4iKTsKKyAgIHByaW50ZiAoIkNvcHlyaWdodCAoQykgMjAwMi0yMDA2IEplYW4tTWFyYyBWYWxpblxuIik7Cit9CisKK3ZvaWQgdmVyc2lvbl9zaG9ydCgpCit7CisgICBwcmludGYgKCJzcGVleGRlYyB2ZXJzaW9uICIgU1BFRVhfVkVSU0lPTiAiXG4iKTsKKyAgIHByaW50ZiAoIkNvcHlyaWdodCAoQykgMjAwMi0yMDA2IEplYW4tTWFyYyBWYWxpblxuIik7Cit9CisKK3N0YXRpYyB2b2lkICpwcm9jZXNzX2hlYWRlcihvZ2dfcGFja2V0ICpvcCwgc3B4X2ludDMyX3QgZW5oX2VuYWJsZWQsIHNweF9pbnQzMl90ICpmcmFtZV9zaXplLCBpbnQgKmdyYW51bGVfZnJhbWVfc2l6ZSwgc3B4X2ludDMyX3QgKnJhdGUsIGludCAqbmZyYW1lcywgaW50IGZvcmNlTW9kZSwgaW50ICpjaGFubmVscywgU3BlZXhTdGVyZW9TdGF0ZSAqc3RlcmVvLCBpbnQgKmV4dHJhX2hlYWRlcnMsIGludCBxdWlldCkKK3sKKyAgIHZvaWQgKnN0OworICAgY29uc3QgU3BlZXhNb2RlICptb2RlOworICAgU3BlZXhIZWFkZXIgKmhlYWRlcjsKKyAgIGludCBtb2RlSUQ7CisgICBTcGVleENhbGxiYWNrIGNhbGxiYWNrOworICAgICAgCisgICBoZWFkZXIgPSBzcGVleF9wYWNrZXRfdG9faGVhZGVyKChjaGFyKilvcC0+cGFja2V0LCBvcC0+Ynl0ZXMpOworICAgaWYgKCFoZWFkZXIpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJDYW5ub3QgcmVhZCBoZWFkZXJcbiIpOworICAgICAgcmV0dXJuIE5VTEw7CisgICB9CisgICBpZiAoaGVhZGVyLT5tb2RlID49IFNQRUVYX05CX01PREVTIHx8IGhlYWRlci0+bW9kZTwwKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTW9kZSBudW1iZXIgJWQgZG9lcyBub3QgKHlldC9hbnkgbG9uZ2VyKSBleGlzdCBpbiB0aGlzIHZlcnNpb25cbiIsIAorICAgICAgICAgICAgICAgaGVhZGVyLT5tb2RlKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgfQorICAgICAgCisgICBtb2RlSUQgPSBoZWFkZXItPm1vZGU7CisgICBpZiAoZm9yY2VNb2RlIT0tMSkKKyAgICAgIG1vZGVJRCA9IGZvcmNlTW9kZTsKKworICAgbW9kZSA9IHNwZWV4X2xpYl9nZXRfbW9kZSAobW9kZUlEKTsKKyAgIAorICAgaWYgKGhlYWRlci0+c3BlZXhfdmVyc2lvbl9pZCA+IDEpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJUaGlzIGZpbGUgd2FzIGVuY29kZWQgd2l0aCBTcGVleCBiaXQtc3RyZWFtIHZlcnNpb24gJWQsIHdoaWNoIEkgZG9uJ3Qga25vdyBob3cgdG8gZGVjb2RlXG4iLCBoZWFkZXItPnNwZWV4X3ZlcnNpb25faWQpOworICAgICAgcmV0dXJuIE5VTEw7CisgICB9CisKKyAgIGlmIChtb2RlLT5iaXRzdHJlYW1fdmVyc2lvbiA8IGhlYWRlci0+bW9kZV9iaXRzdHJlYW1fdmVyc2lvbikKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlRoZSBmaWxlIHdhcyBlbmNvZGVkIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9mIFNwZWV4LiBZb3UgbmVlZCB0byB1cGdyYWRlIGluIG9yZGVyIHRvIHBsYXkgaXQuXG4iKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgfQorICAgaWYgKG1vZGUtPmJpdHN0cmVhbV92ZXJzaW9uID4gaGVhZGVyLT5tb2RlX2JpdHN0cmVhbV92ZXJzaW9uKSAKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlRoZSBmaWxlIHdhcyBlbmNvZGVkIHdpdGggYW4gb2xkZXIgdmVyc2lvbiBvZiBTcGVleC4gWW91IHdvdWxkIG5lZWQgdG8gZG93bmdyYWRlIHRoZSB2ZXJzaW9uIGluIG9yZGVyIHRvIHBsYXkgaXQuXG4iKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgfQorICAgCisgICBzdCA9IHNwZWV4X2RlY29kZXJfaW5pdChtb2RlKTsKKyAgIGlmICghc3QpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJEZWNvZGVyIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworICAgICAgcmV0dXJuIE5VTEw7CisgICB9CisgICBzcGVleF9kZWNvZGVyX2N0bChzdCwgU1BFRVhfU0VUX0VOSCwgJmVuaF9lbmFibGVkKTsKKyAgIHNwZWV4X2RlY29kZXJfY3RsKHN0LCBTUEVFWF9HRVRfRlJBTUVfU0laRSwgZnJhbWVfc2l6ZSk7CisgICAqZ3JhbnVsZV9mcmFtZV9zaXplID0gKmZyYW1lX3NpemU7CisKKyAgIGlmICghKCpjaGFubmVscz09MSkpCisgICB7CisgICAgICBjYWxsYmFjay5jYWxsYmFja19pZCA9IFNQRUVYX0lOQkFORF9TVEVSRU87CisgICAgICBjYWxsYmFjay5mdW5jID0gc3BlZXhfc3RkX3N0ZXJlb19yZXF1ZXN0X2hhbmRsZXI7CisgICAgICBjYWxsYmFjay5kYXRhID0gc3RlcmVvOworICAgICAgc3BlZXhfZGVjb2Rlcl9jdGwoc3QsIFNQRUVYX1NFVF9IQU5ETEVSLCAmY2FsbGJhY2spOworICAgfQorICAgaWYgKCEqcmF0ZSkKKyAgICAgICpyYXRlID0gaGVhZGVyLT5yYXRlOworICAgLyogQWRqdXN0IHJhdGUgaWYgLS1mb3JjZS0qIG9wdGlvbnMgYXJlIHVzZWQgKi8KKyAgIGlmIChmb3JjZU1vZGUhPS0xKQorICAgeworICAgICAgaWYgKGhlYWRlci0+bW9kZSA8IGZvcmNlTW9kZSkKKyAgICAgIHsKKyAgICAgICAgICpyYXRlIDw8PSAoZm9yY2VNb2RlIC0gaGVhZGVyLT5tb2RlKTsKKyAgICAgICAgICpncmFudWxlX2ZyYW1lX3NpemUgPj49IChmb3JjZU1vZGUgLSBoZWFkZXItPm1vZGUpOworICAgICAgfQorICAgICAgaWYgKGhlYWRlci0+bW9kZSA+IGZvcmNlTW9kZSkKKyAgICAgIHsKKyAgICAgICAgICpyYXRlID4+PSAoaGVhZGVyLT5tb2RlIC0gZm9yY2VNb2RlKTsKKyAgICAgICAgICpncmFudWxlX2ZyYW1lX3NpemUgPDw9IChoZWFkZXItPm1vZGUgLSBmb3JjZU1vZGUpOworICAgICAgfQorICAgfQorCisKKyAgIHNwZWV4X2RlY29kZXJfY3RsKHN0LCBTUEVFWF9TRVRfU0FNUExJTkdfUkFURSwgcmF0ZSk7CisKKyAgICpuZnJhbWVzID0gaGVhZGVyLT5mcmFtZXNfcGVyX3BhY2tldDsKKworICAgaWYgKCpjaGFubmVscz09LTEpCisgICAgICAqY2hhbm5lbHMgPSBoZWFkZXItPm5iX2NoYW5uZWxzOworICAgCisgICBpZiAoIXF1aWV0KQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRGVjb2RpbmcgJWQgSHogYXVkaW8gdXNpbmcgJXMgbW9kZSIsIAorICAgICAgICAgICAgICAgKnJhdGUsIG1vZGUtPm1vZGVOYW1lKTsKKworICAgICAgaWYgKCpjaGFubmVscz09MSkKKyAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAobW9ubyIpOworICAgICAgZWxzZQorICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiIChzdGVyZW8iKTsKKyAgICAgIAorICAgICAgaWYgKGhlYWRlci0+dmJyKQorICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiLCBWQlIpXG4iKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKVxuIik7CisgICAgICAvKmZwcmludGYgKHN0ZGVyciwgIkRlY29kaW5nICVkIEh6IGF1ZGlvIGF0ICVkIGJwcyB1c2luZyAlcyBtb2RlXG4iLCAKKyAgICAgICAqcmF0ZSwgbW9kZS0+Yml0cmF0ZSwgbW9kZS0+bW9kZU5hbWUpOyovCisgICB9CisKKyAgICpleHRyYV9oZWFkZXJzID0gaGVhZGVyLT5leHRyYV9oZWFkZXJzOworCisgICBmcmVlKGhlYWRlcik7CisgICByZXR1cm4gc3Q7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgIGludCBjOworICAgaW50IG9wdGlvbl9pbmRleCA9IDA7CisgICBjaGFyICppbkZpbGUsICpvdXRGaWxlOworICAgRklMRSAqZmluLCAqZm91dD1OVUxMOworICAgc2hvcnQgb3V0W01BWF9GUkFNRV9TSVpFXTsKKyAgIHNob3J0IG91dHB1dFtNQVhfRlJBTUVfU0laRV07CisgICBpbnQgZnJhbWVfc2l6ZT0wLCBncmFudWxlX2ZyYW1lX3NpemU9MDsKKyAgIHZvaWQgKnN0PU5VTEw7CisgICBTcGVleEJpdHMgYml0czsKKyAgIGludCBwYWNrZXRfY291bnQ9MDsKKyAgIGludCBzdHJlYW1faW5pdCA9IDA7CisgICBpbnQgcXVpZXQgPSAwOworICAgb2dnX2ludDY0X3QgcGFnZV9ncmFudWxlPTAsIGxhc3RfZ3JhbnVsZT0wOworICAgaW50IHNraXBfc2FtcGxlcz0wLCBwYWdlX25iX3BhY2tldHM7CisgICBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0KKyAgIHsKKyAgICAgIHsiaGVscCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfSwKKyAgICAgIHsicXVpZXQiLCBub19hcmd1bWVudCwgTlVMTCwgMH0sCisgICAgICB7InZlcnNpb24iLCBub19hcmd1bWVudCwgTlVMTCwgMH0sCisgICAgICB7InZlcnNpb24tc2hvcnQiLCBub19hcmd1bWVudCwgTlVMTCwgMH0sCisgICAgICB7ImVuaCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfSwKKyAgICAgIHsibm8tZW5oIiwgbm9fYXJndW1lbnQsIE5VTEwsIDB9LAorICAgICAgeyJwZiIsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfSwKKyAgICAgIHsibm8tcGYiLCBub19hcmd1bWVudCwgTlVMTCwgMH0sCisgICAgICB7ImZvcmNlLW5iIiwgbm9fYXJndW1lbnQsIE5VTEwsIDB9LAorICAgICAgeyJmb3JjZS13YiIsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfSwKKyAgICAgIHsiZm9yY2UtdXdiIiwgbm9fYXJndW1lbnQsIE5VTEwsIDB9LAorICAgICAgeyJyYXRlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDB9LAorICAgICAgeyJtb25vIiwgbm9fYXJndW1lbnQsIE5VTEwsIDB9LAorICAgICAgeyJzdGVyZW8iLCBub19hcmd1bWVudCwgTlVMTCwgMH0sCisgICAgICB7InBhY2tldC1sb3NzIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDB9LAorICAgICAgezAsIDAsIDAsIDB9CisgICB9OworICAgb2dnX3N5bmNfc3RhdGUgb3k7CisgICBvZ2dfcGFnZSAgICAgICBvZzsKKyAgIG9nZ19wYWNrZXQgICAgIG9wOworICAgb2dnX3N0cmVhbV9zdGF0ZSBvczsKKyAgIGludCBlbmhfZW5hYmxlZDsKKyAgIGludCBuZnJhbWVzPTI7CisgICBpbnQgcHJpbnRfYml0cmF0ZT0wOworICAgaW50IGNsb3NlX2luPTA7CisgICBpbnQgZW9zPTA7CisgICBpbnQgZm9yY2VNb2RlPS0xOworICAgaW50IGF1ZGlvX3NpemU9MDsKKyAgIGZsb2F0IGxvc3NfcGVyY2VudD0tMTsKKyAgIFNwZWV4U3RlcmVvU3RhdGUgc3RlcmVvID0gU1BFRVhfU1RFUkVPX1NUQVRFX0lOSVQ7CisgICBpbnQgY2hhbm5lbHM9LTE7CisgICBpbnQgcmF0ZT0wOworICAgaW50IGV4dHJhX2hlYWRlcnM9MDsKKyAgIGludCB3YXZfZm9ybWF0PTA7CisgICBpbnQgbG9va2FoZWFkOworICAgaW50IHNwZWV4X3NlcmlhbG5vID0gLTE7CisKKyAgIGVuaF9lbmFibGVkID0gMTsKKworICAgLypQcm9jZXNzIG9wdGlvbnMqLworICAgd2hpbGUoMSkKKyAgIHsKKyAgICAgIGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgImh2ViIsCisgICAgICAgICAgICAgICAgICAgICAgIGxvbmdfb3B0aW9ucywgJm9wdGlvbl9pbmRleCk7CisgICAgICBpZiAoYz09LTEpCisgICAgICAgICBicmVhazsKKyAgICAgIAorICAgICAgc3dpdGNoKGMpCisgICAgICB7CisgICAgICBjYXNlIDA6CisgICAgICAgICBpZiAoc3RyY21wKGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUsImhlbHAiKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgICBleGl0KDApOworICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAobG9uZ19vcHRpb25zW29wdGlvbl9pbmRleF0ubmFtZSwicXVpZXQiKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHF1aWV0ID0gMTsKKyAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUsInZlcnNpb24iKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHZlcnNpb24oKTsKKyAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lLCJ2ZXJzaW9uLXNob3J0Iik9PTApCisgICAgICAgICB7CisgICAgICAgICAgICB2ZXJzaW9uX3Nob3J0KCk7CisgICAgICAgICAgICBleGl0KDApOworICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAobG9uZ19vcHRpb25zW29wdGlvbl9pbmRleF0ubmFtZSwiZW5oIik9PTApCisgICAgICAgICB7CisgICAgICAgICAgICBlbmhfZW5hYmxlZD0xOworICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAobG9uZ19vcHRpb25zW29wdGlvbl9pbmRleF0ubmFtZSwibm8tZW5oIik9PTApCisgICAgICAgICB7CisgICAgICAgICAgICBlbmhfZW5hYmxlZD0wOworICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAobG9uZ19vcHRpb25zW29wdGlvbl9pbmRleF0ubmFtZSwicGYiKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIi0tcGYgaXMgZGVwcmVjYXRlZCwgdXNlIC0tZW5oIGluc3RlYWRcbiIpOworICAgICAgICAgICAgZW5oX2VuYWJsZWQ9MTsKKyAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUsIm5vLXBmIik9PTApCisgICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICItLW5vLXBmIGlzIGRlcHJlY2F0ZWQsIHVzZSAtLW5vLWVuaCBpbnN0ZWFkXG4iKTsKKyAgICAgICAgICAgIGVuaF9lbmFibGVkPTA7CisgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lLCJmb3JjZS1uYiIpPT0wKQorICAgICAgICAgeworICAgICAgICAgICAgZm9yY2VNb2RlPTA7CisgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lLCJmb3JjZS13YiIpPT0wKQorICAgICAgICAgeworICAgICAgICAgICAgZm9yY2VNb2RlPTE7CisgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lLCJmb3JjZS11d2IiKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGZvcmNlTW9kZT0yOworICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAobG9uZ19vcHRpb25zW29wdGlvbl9pbmRleF0ubmFtZSwibW9ubyIpPT0wKQorICAgICAgICAgeworICAgICAgICAgICAgY2hhbm5lbHM9MTsKKyAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUsInN0ZXJlbyIpPT0wKQorICAgICAgICAgeworICAgICAgICAgICAgY2hhbm5lbHM9MjsKKyAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUsInJhdGUiKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHJhdGU9YXRvaSAob3B0YXJnKTsKKyAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUsInBhY2tldC1sb3NzIik9PTApCisgICAgICAgICB7CisgICAgICAgICAgICBsb3NzX3BlcmNlbnQgPSBhdG9mKG9wdGFyZyk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgIGV4aXQoMCk7CisgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgdmVyc2lvbigpOworICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnVic6CisgICAgICAgICBwcmludF9iaXRyYXRlPTE7CisgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJz8nOgorICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgIH0KKyAgIGlmIChhcmdjLW9wdGluZCE9MiAmJiBhcmdjLW9wdGluZCE9MSkKKyAgIHsKKyAgICAgIHVzYWdlKCk7CisgICAgICBleGl0KDEpOworICAgfQorICAgaW5GaWxlPWFyZ3Zbb3B0aW5kXTsKKworICAgaWYgKGFyZ2Mtb3B0aW5kPT0yKQorICAgICAgb3V0RmlsZT1hcmd2W29wdGluZCsxXTsKKyAgIGVsc2UKKyAgICAgIG91dEZpbGUgPSAiIjsKKyAgIHdhdl9mb3JtYXQgPSBzdHJsZW4ob3V0RmlsZSk+PTQgJiYgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY21wKG91dEZpbGUrc3RybGVuKG91dEZpbGUpLTQsIi53YXYiKT09MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgc3RyY21wKG91dEZpbGUrc3RybGVuKG91dEZpbGUpLTQsIi5XQVYiKT09MCk7CisgICAvKk9wZW4gaW5wdXQgZmlsZSovCisgICBpZiAoc3RyY21wKGluRmlsZSwgIi0iKT09MCkKKyAgIHsKKyNpZiBkZWZpbmVkIFdJTjMyIHx8IGRlZmluZWQgX1dJTjMyCisgICAgICBfc2V0bW9kZShfZmlsZW5vKHN0ZGluKSwgX09fQklOQVJZKTsKKyNlbmRpZgorICAgICAgZmluPXN0ZGluOworICAgfQorICAgZWxzZSAKKyAgIHsKKyAgICAgIGZpbiA9IGZvcGVuKGluRmlsZSwgInJiIik7CisgICAgICBpZiAoIWZpbikKKyAgICAgIHsKKyAgICAgICAgIHBlcnJvcihpbkZpbGUpOworICAgICAgICAgZXhpdCgxKTsKKyAgICAgIH0KKyAgICAgIGNsb3NlX2luPTE7CisgICB9CisKKworICAgLypJbml0IE9nZyBkYXRhIHN0cnVjdCovCisgICBvZ2dfc3luY19pbml0KCZveSk7CisgICAKKyAgIHNwZWV4X2JpdHNfaW5pdCgmYml0cyk7CisgICAvKk1haW4gZGVjb2RpbmcgbG9vcCovCisgICAKKyAgIHdoaWxlICgxKQorICAgeworICAgICAgY2hhciAqZGF0YTsKKyAgICAgIGludCBpLCBqLCBuYl9yZWFkOworICAgICAgLypHZXQgdGhlIG9nZyBidWZmZXIgZm9yIHdyaXRpbmcqLworICAgICAgZGF0YSA9IG9nZ19zeW5jX2J1ZmZlcigmb3ksIDIwMCk7CisgICAgICAvKlJlYWQgYml0c3RyZWFtIGZyb20gaW5wdXQgZmlsZSovCisgICAgICBuYl9yZWFkID0gZnJlYWQoZGF0YSwgc2l6ZW9mKGNoYXIpLCAyMDAsIGZpbik7ICAgICAgCisgICAgICBvZ2dfc3luY193cm90ZSgmb3ksIG5iX3JlYWQpOworCisgICAgICAvKkxvb3AgZm9yIGFsbCBjb21wbGV0ZSBwYWdlcyB3ZSBnb3QgKG1vc3QgbGlrZWx5IG9ubHkgb25lKSovCisgICAgICB3aGlsZSAob2dnX3N5bmNfcGFnZW91dCgmb3ksICZvZyk9PTEpCisgICAgICB7CisgICAgICAgICBpbnQgcGFja2V0X25vOworICAgICAgICAgaWYgKHN0cmVhbV9pbml0ID09IDApIHsKKyAgICAgICAgICAgIG9nZ19zdHJlYW1faW5pdCgmb3MsIG9nZ19wYWdlX3NlcmlhbG5vKCZvZykpOworICAgICAgICAgICAgc3RyZWFtX2luaXQgPSAxOworICAgICAgICAgfQorCSBpZiAob2dnX3BhZ2Vfc2VyaWFsbm8oJm9nKSAhPSBvcy5zZXJpYWxubykgeworCSAgICAvKiBzbyBhbGwgc3RyZWFtcyBhcmUgcmVhZC4gKi8KKwkgICAgb2dnX3N0cmVhbV9yZXNldF9zZXJpYWxubygmb3MsIG9nZ19wYWdlX3NlcmlhbG5vKCZvZykpOworCSB9CisgICAgICAgICAvKkFkZCBwYWdlIHRvIHRoZSBiaXRzdHJlYW0qLworICAgICAgICAgb2dnX3N0cmVhbV9wYWdlaW4oJm9zLCAmb2cpOworICAgICAgICAgcGFnZV9ncmFudWxlID0gb2dnX3BhZ2VfZ3JhbnVsZXBvcygmb2cpOworICAgICAgICAgcGFnZV9uYl9wYWNrZXRzID0gb2dnX3BhZ2VfcGFja2V0cygmb2cpOworICAgICAgICAgaWYgKHBhZ2VfZ3JhbnVsZT4wICYmIGZyYW1lX3NpemUpCisgICAgICAgICB7CisgICAgICAgICAgICAvKiBGSVhNRTogc2hpZnQgdGhlIGdyYW51bGUgdmFsdWVzIGlmIC0tZm9yY2UtKiBpcyBzcGVjaWZpZWQgKi8KKyAgICAgICAgICAgIHNraXBfc2FtcGxlcyA9IGZyYW1lX3NpemUqKHBhZ2VfbmJfcGFja2V0cypncmFudWxlX2ZyYW1lX3NpemUqbmZyYW1lcyAtIChwYWdlX2dyYW51bGUtbGFzdF9ncmFudWxlKSkvZ3JhbnVsZV9mcmFtZV9zaXplOworICAgICAgICAgICAgaWYgKG9nZ19wYWdlX2Vvcygmb2cpKQorICAgICAgICAgICAgICAgc2tpcF9zYW1wbGVzID0gLXNraXBfc2FtcGxlczsKKyAgICAgICAgICAgIC8qZWxzZSBpZiAoIW9nZ19wYWdlX2Jvcygmb2cpKQorICAgICAgICAgICAgICAgc2tpcF9zYW1wbGVzID0gMDsqLworICAgICAgICAgfSBlbHNlCisgICAgICAgICB7CisgICAgICAgICAgICBza2lwX3NhbXBsZXMgPSAwOworICAgICAgICAgfQorICAgICAgICAgLypwcmludGYgKCJwYWdlIGdyYW51bGVwb3M6ICVkICVkICVkXG4iLCBza2lwX3NhbXBsZXMsIHBhZ2VfbmJfcGFja2V0cywgKGludClwYWdlX2dyYW51bGUpOyovCisgICAgICAgICBsYXN0X2dyYW51bGUgPSBwYWdlX2dyYW51bGU7CisgICAgICAgICAvKkV4dHJhY3QgYWxsIGF2YWlsYWJsZSBwYWNrZXRzKi8KKyAgICAgICAgIHBhY2tldF9ubz0wOworICAgICAgICAgd2hpbGUgKCFlb3MgJiYgb2dnX3N0cmVhbV9wYWNrZXRvdXQoJm9zLCAmb3ApID09IDEpCisgICAgICAgICB7CisJICAgIGlmICghbWVtY21wKG9wLnBhY2tldCwgIlNwZWV4IiwgNSkpIHsKKwkgICAgICAgc3BlZXhfc2VyaWFsbm8gPSBvcy5zZXJpYWxubzsKKwkgICAgfQorCSAgICBpZiAoc3BlZXhfc2VyaWFsbm8gPT0gLTEgfHwgb3Muc2VyaWFsbm8gIT0gc3BlZXhfc2VyaWFsbm8pCisJICAgICAgIGJyZWFrOworICAgICAgICAgICAgLypJZiBmaXJzdCBwYWNrZXQsIHByb2Nlc3MgYXMgU3BlZXggaGVhZGVyKi8KKyAgICAgICAgICAgIGlmIChwYWNrZXRfY291bnQ9PTApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBzdCA9IHByb2Nlc3NfaGVhZGVyKCZvcCwgZW5oX2VuYWJsZWQsICZmcmFtZV9zaXplLCAmZ3JhbnVsZV9mcmFtZV9zaXplLCAmcmF0ZSwgJm5mcmFtZXMsIGZvcmNlTW9kZSwgJmNoYW5uZWxzLCAmc3RlcmVvLCAmZXh0cmFfaGVhZGVycywgcXVpZXQpOworICAgICAgICAgICAgICAgaWYgKCFzdCkKKyAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICBzcGVleF9kZWNvZGVyX2N0bChzdCwgU1BFRVhfR0VUX0xPT0tBSEVBRCwgJmxvb2thaGVhZCk7CisgICAgICAgICAgICAgICBpZiAoIW5mcmFtZXMpCisgICAgICAgICAgICAgICAgICBuZnJhbWVzPTE7CisgICAgICAgICAgICAgICBmb3V0ID0gb3V0X2ZpbGVfb3BlbihvdXRGaWxlLCByYXRlLCAmY2hhbm5lbHMpOworCisgICAgICAgICAgICB9IGVsc2UgaWYgKHBhY2tldF9jb3VudD09MSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGlmICghcXVpZXQpCisgICAgICAgICAgICAgICAgICBwcmludF9jb21tZW50cygoY2hhciopb3AucGFja2V0LCBvcC5ieXRlcyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBhY2tldF9jb3VudDw9MStleHRyYV9oZWFkZXJzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgLyogSWdub3JlIGV4dHJhIGhlYWRlcnMgKi8KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICBpbnQgbG9zdD0wOworICAgICAgICAgICAgICAgcGFja2V0X25vKys7CisgICAgICAgICAgICAgICBpZiAobG9zc19wZXJjZW50PjAgJiYgMTAwKigoZmxvYXQpcmFuZCgpKS9SQU5EX01BWDxsb3NzX3BlcmNlbnQpCisgICAgICAgICAgICAgICAgICBsb3N0PTE7CisKKyAgICAgICAgICAgICAgIC8qRW5kIG9mIHN0cmVhbSBjb25kaXRpb24qLworICAgICAgICAgICAgICAgaWYgKG9wLmVfb19zICYmIG9zLnNlcmlhbG5vID09IHNwZWV4X3NlcmlhbG5vKSAvKiBkb24ndCBjYXJlIGZvciBhbnl0aGluZyBleGNlcHQgc3BlZXggZW9zICovCisgICAgICAgICAgICAgICAgICBlb3M9MTsKKwkgICAgICAgCisgICAgICAgICAgICAgICAvKkNvcHkgT2dnIHBhY2tldCB0byBTcGVleCBiaXRzdHJlYW0qLworICAgICAgICAgICAgICAgc3BlZXhfYml0c19yZWFkX2Zyb20oJmJpdHMsIChjaGFyKilvcC5wYWNrZXQsIG9wLmJ5dGVzKTsKKyAgICAgICAgICAgICAgIGZvciAoaj0wO2ohPW5mcmFtZXM7aisrKQorICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaW50IHJldDsKKyAgICAgICAgICAgICAgICAgIC8qRGVjb2RlIGZyYW1lKi8KKyAgICAgICAgICAgICAgICAgIGlmICghbG9zdCkKKyAgICAgICAgICAgICAgICAgICAgIHJldCA9IHNwZWV4X2RlY29kZV9pbnQoc3QsICZiaXRzLCBvdXRwdXQpOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgcmV0ID0gc3BlZXhfZGVjb2RlX2ludChzdCwgTlVMTCwgb3V0cHV0KTsKKworICAgICAgICAgICAgICAgICAgLypmb3IgKGk9MDtpPGZyYW1lX3NpemUqY2hhbm5lbHM7aSsrKQorICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIlZFxuIiwgKGludClvdXRwdXRbaV0pOyovCisKKyAgICAgICAgICAgICAgICAgIGlmIChyZXQ9PS0xKQorICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBpZiAocmV0PT0tMikKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkRlY29kaW5nIGVycm9yOiBjb3JydXB0ZWQgc3RyZWFtP1xuIik7CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGlmIChzcGVleF9iaXRzX3JlbWFpbmluZygmYml0cyk8MCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkRlY29kaW5nIG92ZXJmbG93OiBjb3JydXB0ZWQgc3RyZWFtP1xuIik7CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGlmIChjaGFubmVscz09MikKKyAgICAgICAgICAgICAgICAgICAgIHNwZWV4X2RlY29kZV9zdGVyZW9faW50KG91dHB1dCwgZnJhbWVfc2l6ZSwgJnN0ZXJlbyk7CisKKyAgICAgICAgICAgICAgICAgIGlmIChwcmludF9iaXRyYXRlKSB7CisgICAgICAgICAgICAgICAgICAgICBzcHhfaW50MzJfdCB0bXA7CisgICAgICAgICAgICAgICAgICAgICBjaGFyIGNoPTEzOworICAgICAgICAgICAgICAgICAgICAgc3BlZXhfZGVjb2Rlcl9jdGwoc3QsIFNQRUVYX0dFVF9CSVRSQVRFLCAmdG1wKTsKKyAgICAgICAgICAgICAgICAgICAgIGZwdXRjIChjaCwgc3RkZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkJpdHJhdGUgaXMgdXNlOiAlZCBicHMgICAgICIsIHRtcCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAvKkNvbnZlcnQgdG8gc2hvcnQgYW5kIHNhdmUgdG8gb3V0cHV0IGZpbGUqLworCQkgIGlmIChzdHJsZW4ob3V0RmlsZSkhPTApCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDtpPGZyYW1lX3NpemUqY2hhbm5lbHM7aSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0W2ldPWxlX3Nob3J0KG91dHB1dFtpXSk7CisJCSAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wO2k8ZnJhbWVfc2l6ZSpjaGFubmVscztpKyspCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRbaV09b3V0cHV0W2ldOworCQkgIH0KKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGludCBmcmFtZV9vZmZzZXQgPSAwOworICAgICAgICAgICAgICAgICAgICAgaW50IG5ld19mcmFtZV9zaXplID0gZnJhbWVfc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgIC8qcHJpbnRmICgicGFja2V0ICVkICVkXG4iLCBwYWNrZXRfbm8sIHNraXBfc2FtcGxlcyk7Ki8KKyAgICAgICAgICAgICAgICAgICAgIC8qZnByaW50ZiAoc3RkZXJyLCAicGFja2V0ICVkICVkICVkXG4iLCBwYWNrZXRfbm8sIHNraXBfc2FtcGxlcywgbG9va2FoZWFkKTsqLworICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tldF9ubyA9PSAxICYmIGo9PTAgJiYgc2tpcF9zYW1wbGVzID4gMCkKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qcHJpbnRmICgiY2hvcHBpbmcgZmlyc3QgcGFja2V0XG4iKTsqLworICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2ZyYW1lX3NpemUgLT0gc2tpcF9zYW1wbGVzK2xvb2thaGVhZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lX29mZnNldCA9IHNraXBfc2FtcGxlcytsb29rYWhlYWQ7CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2V0X25vID09IHBhZ2VfbmJfcGFja2V0cyAmJiBza2lwX3NhbXBsZXMgPCAwKQorICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhY2tldF9sZW5ndGggPSBuZnJhbWVzKmZyYW1lX3NpemUrc2tpcF9zYW1wbGVzK2xvb2thaGVhZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld19mcmFtZV9zaXplID0gcGFja2V0X2xlbmd0aCAtIGoqZnJhbWVfc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdfZnJhbWVfc2l6ZTwwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2ZyYW1lX3NpemUgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld19mcmFtZV9zaXplPmZyYW1lX3NpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfZnJhbWVfc2l6ZSA9IGZyYW1lX3NpemU7CisgICAgICAgICAgICAgICAgICAgICAgICAvKnByaW50ZiAoImNob3BwaW5nIGVuZDogJWQgJWQgJWRcbiIsIG5ld19mcmFtZV9zaXplLCBwYWNrZXRfbGVuZ3RoLCBwYWNrZXRfbm8pOyovCisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBpZiAobmV3X2ZyYW1lX3NpemU+MCkKKyAgICAgICAgICAgICAgICAgICAgIHsgIAorI2lmIGRlZmluZWQgV0lOMzIgfHwgZGVmaW5lZCBfV0lOMzIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJsZW4ob3V0RmlsZSk9PTApCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXSU5fUGxheV9TYW1wbGVzIChvdXQrZnJhbWVfb2Zmc2V0KmNoYW5uZWxzLCBzaXplb2Yoc2hvcnQpICogbmV3X2ZyYW1lX3NpemUqY2hhbm5lbHMpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUob3V0K2ZyYW1lX29mZnNldCpjaGFubmVscywgc2l6ZW9mKHNob3J0KSwgbmV3X2ZyYW1lX3NpemUqY2hhbm5lbHMsIGZvdXQpOworICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zaXplKz1zaXplb2Yoc2hvcnQpKm5ld19mcmFtZV9zaXplKmNoYW5uZWxzOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFja2V0X2NvdW50Kys7CisgICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoZmVvZihmaW4pKQorICAgICAgICAgYnJlYWs7CisKKyAgIH0KKworICAgaWYgKGZvdXQgJiYgd2F2X2Zvcm1hdCkKKyAgIHsKKyAgICAgIGlmIChmc2Vlayhmb3V0LDQsU0VFS19TRVQpPT0wKQorICAgICAgeworICAgICAgICAgaW50IHRtcDsKKyAgICAgICAgIHRtcCA9IGxlX2ludChhdWRpb19zaXplKzM2KTsKKyAgICAgICAgIGZ3cml0ZSgmdG1wLDQsMSxmb3V0KTsKKyAgICAgICAgIGlmIChmc2Vlayhmb3V0LDMyLFNFRUtfQ1VSKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHRtcCA9IGxlX2ludChhdWRpb19zaXplKTsKKyAgICAgICAgICAgIGZ3cml0ZSgmdG1wLDQsMSxmb3V0KTsKKyAgICAgICAgIH0gZWxzZQorICAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRmlyc3Qgc2VlayB3b3JrZWQsIHNlY29uZCBkaWRuJ3RcbiIpOworICAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkNhbm5vdCBzZWVrIG9uIHdhdmUgZmlsZSwgc2l6ZSB3aWxsIGJlIGluY29ycmVjdFxuIik7CisgICAgICB9CisgICB9CisKKyAgIGlmIChzdCkKKyAgICAgIHNwZWV4X2RlY29kZXJfZGVzdHJveShzdCk7CisgICBlbHNlIAorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiVGhpcyBkb2Vzbid0IGxvb2sgbGlrZSBhIFNwZWV4IGZpbGVcbiIpOworICAgfQorICAgc3BlZXhfYml0c19kZXN0cm95KCZiaXRzKTsKKyAgIGlmIChzdHJlYW1faW5pdCkKKyAgICAgIG9nZ19zdHJlYW1fY2xlYXIoJm9zKTsKKyAgIG9nZ19zeW5jX2NsZWFyKCZveSk7CisKKyNpZiBkZWZpbmVkIFdJTjMyIHx8IGRlZmluZWQgX1dJTjMyCisgICBpZiAoc3RybGVuKG91dEZpbGUpPT0wKQorICAgICAgV0lOX0F1ZGlvX2Nsb3NlICgpOworI2VuZGlmCisKKyAgIGlmIChjbG9zZV9pbikKKyAgICAgIGZjbG9zZShmaW4pOworICAgaWYgKGZvdXQgIT0gTlVMTCkKKyAgICAgIGZjbG9zZShmb3V0KTsgICAKKworICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9zcmMvc3BlZXhlbmMuMSBiLzNyZHBhcnR5L3NwZWV4L3NyYy9zcGVleGVuYy4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDExNjEKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9zcmMvc3BlZXhlbmMuMQpAQCAtMCwwICsxLDEwNSBAQAorLlwiIERPIE5PVCBNT0RJRlkgVEhJUyBGSUxFISAgSXQgd2FzIGdlbmVyYXRlZCBieSBoZWxwMm1hbiAxLjI5LgorLlRIIFNQRUVYRU5DICIxIiAiU2VwdGVtYmVyIDIwMDMiICJzcGVleGVuYyB2ZXJzaW9uIDEuMSIgIlVzZXIgQ29tbWFuZHMiCisuU0ggTkFNRQorc3BlZXhlbmMgXC0gbWFudWFsIHBhZ2UgZm9yIHNwZWV4ZW5jIHZlcnNpb24gMS4xCisuU0ggU1lOT1BTSVMKKy5CIHNwZWV4ZW5jCitbXGZJb3B0aW9uc1xmUl0gXGZJaW5wdXRfZmlsZSBvdXRwdXRfZmlsZVxmUgorLlNIIERFU0NSSVBUSU9OCitFbmNvZGVzIGlucHV0X2ZpbGUgdXNpbmcgU3BlZXguIEl0IGNhbiByZWFkIHRoZSBXQVYgb3IgcmF3IGZpbGVzLgorLlNTICJpbnB1dF9maWxlIGNhbiBiZToiCisuVFAKK2ZpbGVuYW1lLndhdgord2F2IGZpbGUKKy5UUAorZmlsZW5hbWUuKgorUmF3IFBDTSBmaWxlIChhbnkgZXh0ZW5zaW9uIG90aGVyIHRoYW4gLndhdikKKy5UUAorLQorc3RkaW4KKy5TUyAib3V0cHV0X2ZpbGUgY2FuIGJlOiIKKy5UUAorZmlsZW5hbWUuc3B4CitTcGVleCBmaWxlCisuVFAKKy0KK3N0ZG91dAorLlNIIE9QVElPTlMKKy5UUAorXGZCXC1uXGZSLCBcZkJcLVwtbmFycm93YmFuZFxmUgorTmFycm93YmFuZCAoOCBrSHopIGlucHV0IGZpbGUKKy5UUAorXGZCXC13XGZSLCBcZkJcLVwtd2lkZWJhbmRcZlIKK1dpZGViYW5kICgxNiBrSHopIGlucHV0IGZpbGUKKy5IUAorXGZCXC11XGZSLCBcZkJcLVwtdWx0cmFcLXdpZGViYW5kXGZSICJVbHRyYS13aWRlYmFuZCIgKDMyIGtIeikgaW5wdXQgZmlsZQorLlRQCitcZkJcLVwtcXVhbGl0eVxmUiBuCitFbmNvZGluZyBxdWFsaXR5ICgwLTEwKSwgZGVmYXVsdCA4CisuVFAKK1xmQlwtXC1iaXRyYXRlXGZSIG4KK0VuY29kaW5nIGJpdC1yYXRlICh1c2UgYml0LXJhdGUgbiBvciBsb3dlcikKKy5UUAorXGZCXC1cLXZiclxmUgorRW5hYmxlIHZhcmlhYmxlIGJpdC1yYXRlIChWQlIpCisuVFAKK1xmQlwtXC1hYnJcZlIgcmF0ZQorRW5hYmxlIGF2ZXJhZ2UgYml0LXJhdGUgKEFCUikgYXQgcmF0ZSBicHMKKy5UUAorXGZCXC1cLXZhZFxmUgorRW5hYmxlIHZvaWNlIGFjdGl2aXR5IGRldGVjdGlvbiAoVkFEKQorLlRQCitcZkJcLVwtZHR4XGZSCitFbmFibGUgZmlsZS1iYXNlZCBkaXNjb250aW51b3VzIHRyYW5zbWlzc2lvbiAoRFRYKQorLlRQCitcZkJcLVwtY29tcFxmUiBuCitTZXQgZW5jb2RpbmcgY29tcGxleGl0eSAoMC0xMCksIGRlZmF1bHQgMworLlRQCitcZkJcLVwtbmZyYW1lc1xmUiBuCitOdW1iZXIgb2YgZnJhbWVzIHBlciBPZ2cgcGFja2V0ICgxLTEwKSwgZGVmYXVsdCAxCisuVFAKK1xmQlwtXC1jb21tZW50XGZSCitBZGQgdGhlIGdpdmVuIHN0cmluZyBhcyBhbiBleHRyYSBjb21tZW50LiBUaGlzIG1heSBiZQordXNlZCBtdWx0aXBsZSB0aW1lcworLlRQCitcZkJcLVwtYXV0aG9yXGZSCitBdXRob3Igb2YgdGhpcyB0cmFjaworLlRQCitcZkJcLVwtdGl0bGVcZlIKK1RpdGxlIGZvciB0aGlzIHRyYWNrCisuVFAKK1xmQlwtaFxmUiwgXGZCXC1cLWhlbHBcZlIKK1RoaXMgaGVscAorLlRQCitcZkJcLXZcZlIsIFxmQlwtXC12ZXJzaW9uXGZSCitWZXJzaW9uIGluZm9ybWF0aW9uCisuVFAKK1xmQlwtVlxmUgorVmVyYm9zZSBtb2RlIChzaG93IGJpdC1yYXRlKQorLlNTICJSYXcgaW5wdXQgb3B0aW9uczoiCisuVFAKK1xmQlwtXC1yYXRlXGZSIG4KK1NhbXBsaW5nIHJhdGUgZm9yIHJhdyBpbnB1dAorLlRQCitcZkJcLVwtc3RlcmVvXGZSCitDb25zaWRlciByYXcgaW5wdXQgYXMgc3RlcmVvCisuVFAKK1xmQlwtXC1sZVxmUgorUmF3IGlucHV0IGlzIGxpdHRsZS1lbmRpYW4KKy5UUAorXGZCXC1cLWJlXGZSCitSYXcgaW5wdXQgaXMgYmlnLWVuZGlhbgorLlRQCitcZkJcLVwtOGJpdFxmUgorUmF3IGlucHV0IGlzIDgtYml0IHVuc2lnbmVkCisuVFAKK1xmQlwtXC0xNmJpdFxmUgorUmF3IGlucHV0IGlzIDE2LWJpdCBzaWduZWQKKy5QUAorRGVmYXVsdCByYXcgUENNIGlucHV0IGlzIDE2LWJpdCwgbGl0dGxlLWVuZGlhbiwgbW9ubworLlBQCitNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBTcGVleCBzaXRlOiBodHRwOi8vd3d3LnNwZWV4Lm9yZworLlBQCitQbGVhc2UgcmVwb3J0IGJ1Z3MgdG8gdGhlIG1haWxpbmcgbGlzdCBgc3BlZXgtZGV2QHhpcGgub3JnJy4KKy5TSCBDT1BZUklHSFQKK0NvcHlyaWdodCBcKGNvIDIwMDIgSmVhbi1NYXJjIFZhbGluCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9zcmMvc3BlZXhlbmMuYyBiLzNyZHBhcnR5L3NwZWV4L3NyYy9zcGVleGVuYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNTFiOWIKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9zcmMvc3BlZXhlbmMuYwpAQCAtMCwwICsxLDk4MSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDYgSmVhbi1NYXJjIFZhbGluIAorICAgRmlsZTogc3BlZXhlbmMuYworCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmICFkZWZpbmVkIFdJTjMyICYmICFkZWZpbmVkIF9XSU4zMgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2VuZGlmCisjaWZuZGVmIEhBVkVfR0VUT1BUX0xPTkcKKyNpbmNsdWRlICJnZXRvcHRfd2luLmgiCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlIDxzcGVleC9zcGVleC5oPgorI2luY2x1ZGUgPG9nZy9vZ2cuaD4KKyNpbmNsdWRlICJ3YXZfaW8uaCIKKyNpbmNsdWRlIDxzcGVleC9zcGVleF9oZWFkZXIuaD4KKyNpbmNsdWRlIDxzcGVleC9zcGVleF9zdGVyZW8uaD4KKyNpbmNsdWRlIDxzcGVleC9zcGVleF9wcmVwcm9jZXNzLmg+CisKKyNpZiBkZWZpbmVkIFdJTjMyIHx8IGRlZmluZWQgX1dJTjMyCisjaW5jbHVkZSAiZ2V0b3B0X3dpbi5oIgorLyogV2UgbmVlZCB0aGUgZm9sbG93aW5nIHR3byB0byBzZXQgc3Rkb3V0IHRvIGJpbmFyeSAqLworI2luY2x1ZGUgPGlvLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAic2tlbGV0b24uaCIKKworCit2b2lkIGNvbW1lbnRfaW5pdChjaGFyICoqY29tbWVudHMsIGludCogbGVuZ3RoLCBjaGFyICp2ZW5kb3Jfc3RyaW5nKTsKK3ZvaWQgY29tbWVudF9hZGQoY2hhciAqKmNvbW1lbnRzLCBpbnQqIGxlbmd0aCwgY2hhciAqdGFnLCBjaGFyICp2YWwpOworCisKKy8qV3JpdGUgYW4gT2dnIHBhZ2UgdG8gYSBmaWxlIHBvaW50ZXIqLworaW50IG9lX3dyaXRlX3BhZ2Uob2dnX3BhZ2UgKnBhZ2UsIEZJTEUgKmZwKQoreworICAgaW50IHdyaXR0ZW47CisgICB3cml0dGVuID0gZndyaXRlKHBhZ2UtPmhlYWRlciwxLHBhZ2UtPmhlYWRlcl9sZW4sIGZwKTsKKyAgIHdyaXR0ZW4gKz0gZndyaXRlKHBhZ2UtPmJvZHksMSxwYWdlLT5ib2R5X2xlbiwgZnApOworICAgCisgICByZXR1cm4gd3JpdHRlbjsKK30KKworI2RlZmluZSBNQVhfRlJBTUVfU0laRSAyMDAwCisjZGVmaW5lIE1BWF9GUkFNRV9CWVRFUyAyMDAwCisKKy8qIENvbnZlcnQgaW5wdXQgYXVkaW8gYml0cywgZW5kaWFucyBhbmQgY2hhbm5lbHMgKi8KK3N0YXRpYyBpbnQgcmVhZF9zYW1wbGVzKEZJTEUgKmZpbixpbnQgZnJhbWVfc2l6ZSwgaW50IGJpdHMsIGludCBjaGFubmVscywgaW50IGxzYiwgc2hvcnQgKiBpbnB1dCwgY2hhciAqYnVmZiwgc3B4X2ludDMyX3QgKnNpemUpCit7ICAgCisgICB1bnNpZ25lZCBjaGFyIGluW01BWF9GUkFNRV9CWVRFUyoyXTsKKyAgIGludCBpOworICAgc2hvcnQgKnM7CisgICBpbnQgbmJfcmVhZDsKKworICAgaWYgKHNpemUgJiYgKnNpemU8PTApCisgICB7CisgICAgICByZXR1cm4gMDsKKyAgIH0KKyAgIC8qUmVhZCBpbnB1dCBhdWRpbyovCisgICBpZiAoc2l6ZSkKKyAgICAgICpzaXplIC09IGJpdHMvOCpjaGFubmVscypmcmFtZV9zaXplOworICAgaWYgKGJ1ZmYpCisgICB7CisgICAgICBmb3IgKGk9MDtpPDEyO2krKykKKyAgICAgICAgIGluW2ldPWJ1ZmZbaV07CisgICAgICBuYl9yZWFkID0gZnJlYWQoaW4rMTIsMSxiaXRzLzgqY2hhbm5lbHMqZnJhbWVfc2l6ZS0xMiwgZmluKSArIDEyOworICAgICAgaWYgKHNpemUpCisgICAgICAgICAqc2l6ZSArPSAxMjsKKyAgIH0gZWxzZSB7CisgICAgICBuYl9yZWFkID0gZnJlYWQoaW4sMSxiaXRzLzgqY2hhbm5lbHMqIGZyYW1lX3NpemUsIGZpbik7CisgICB9CisgICBuYl9yZWFkIC89IGJpdHMvOCpjaGFubmVsczsKKworICAgLypmcHJpbnRmIChzdGRlcnIsICIlZFxuIiwgbmJfcmVhZCk7Ki8KKyAgIGlmIChuYl9yZWFkPT0wKQorICAgICAgcmV0dXJuIDA7CisKKyAgIHM9KHNob3J0KilpbjsKKyAgIGlmKGJpdHM9PTgpCisgICB7CisgICAgICAvKiBDb252ZXJ0IDgtPjE2IGJpdHMgKi8KKyAgICAgIGZvcihpPWZyYW1lX3NpemUqY2hhbm5lbHMtMTtpPj0wO2ktLSkKKyAgICAgIHsKKyAgICAgICAgIHNbaV09KGluW2ldPDw4KV4weDgwMDA7CisgICAgICB9CisgICB9IGVsc2UKKyAgIHsKKyAgICAgIC8qIGNvbnZlcnQgdG8gb3VyIGVuZGlhbiBmb3JtYXQgKi8KKyAgICAgIGZvcihpPTA7aTxmcmFtZV9zaXplKmNoYW5uZWxzO2krKykKKyAgICAgIHsKKyAgICAgICAgIGlmKGxzYikgCisgICAgICAgICAgICBzW2ldPWxlX3Nob3J0KHNbaV0pOyAKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNbaV09YmVfc2hvcnQoc1tpXSk7CisgICAgICB9CisgICB9CisKKyAgIC8qIEZJWE1FOiBUaGlzIGlzIHByb2JhYmx5IHJlZHVuZGVudCBub3cgKi8KKyAgIC8qIGNvcHkgdG8gZmxvYXQgaW5wdXQgYnVmZmVyICovCisgICBmb3IgKGk9MDtpPGZyYW1lX3NpemUqY2hhbm5lbHM7aSsrKQorICAgeworICAgICAgaW5wdXRbaV09KHNob3J0KXNbaV07CisgICB9CisKKyAgIGZvciAoaT1uYl9yZWFkKmNoYW5uZWxzO2k8ZnJhbWVfc2l6ZSpjaGFubmVscztpKyspCisgICB7CisgICAgICBpbnB1dFtpXT0wOworICAgfQorCisKKyAgIHJldHVybiBuYl9yZWFkOworfQorCit2b2lkIGFkZF9maXNoZWFkX3BhY2tldCAob2dnX3N0cmVhbV9zdGF0ZSAqb3MpIHsKKworICAgZmlzaGVhZF9wYWNrZXQgZnA7CisKKyAgIG1lbXNldCgmZnAsIDAsIHNpemVvZihmcCkpOworICAgZnAucHRpbWVfbiA9IDA7CisgICBmcC5wdGltZV9kID0gMTAwMDsKKyAgIGZwLmJ0aW1lX24gPSAwOworICAgZnAuYnRpbWVfZCA9IDEwMDA7CisKKyAgIGFkZF9maXNoZWFkX3RvX3N0cmVhbShvcywgJmZwKTsKK30KKworLyoKKyAqIEFkZHMgdGhlIGZpc2hlYWQgcGFja2V0cyBpbiB0aGUgc2tlbGV0b24gb3V0cHV0IHN0cmVhbSBhbG9uZyB3aXRoIHRoZSBlX29fcyBwYWNrZXQKKyAqLwordm9pZCBhZGRfZmlzYm9uZV9wYWNrZXQgKG9nZ19zdHJlYW1fc3RhdGUgKm9zLCBzcHhfaW50MzJfdCBzZXJpYWxubywgU3BlZXhIZWFkZXIgKmhlYWRlcikgeworCisgICBmaXNib25lX3BhY2tldCBmcDsKKworICAgbWVtc2V0KCZmcCwgMCwgc2l6ZW9mKGZwKSk7CisgICBmcC5zZXJpYWxfbm8gPSBzZXJpYWxubzsKKyAgIGZwLm5yX2hlYWRlcl9wYWNrZXQgPSAyICsgaGVhZGVyLT5leHRyYV9oZWFkZXJzOworICAgZnAuZ3JhbnVsZV9yYXRlX24gPSBoZWFkZXItPnJhdGU7CisgICBmcC5ncmFudWxlX3JhdGVfZCA9IDE7CisgICBmcC5zdGFydF9ncmFudWxlID0gMDsKKyAgIGZwLnByZXJvbGwgPSAzOworICAgZnAuZ3JhbnVsZV9zaGlmdCA9IDA7CisKKyAgIGFkZF9tZXNzYWdlX2hlYWRlcl9maWVsZCgmZnAsICJDb250ZW50LVR5cGUiLCAiYXVkaW8veC1zcGVleCIpOworCisgICBhZGRfZmlzYm9uZV90b19zdHJlYW0ob3MsICZmcCk7Cit9CisKK3ZvaWQgdmVyc2lvbigpCit7CisgICBwcmludGYgKCJzcGVleGVuYyAoU3BlZXggZW5jb2RlcikgdmVyc2lvbiAiIFNQRUVYX1ZFUlNJT04gIiAoY29tcGlsZWQgIiBfX0RBVEVfXyAiKVxuIik7CisgICBwcmludGYgKCJDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiBKZWFuLU1hcmMgVmFsaW5cbiIpOworfQorCit2b2lkIHZlcnNpb25fc2hvcnQoKQoreworICAgcHJpbnRmICgic3BlZXhlbmMgdmVyc2lvbiAiIFNQRUVYX1ZFUlNJT04gIlxuIik7CisgICBwcmludGYgKCJDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiBKZWFuLU1hcmMgVmFsaW5cbiIpOworfQorCit2b2lkIHVzYWdlKCkKK3sKKyAgIHByaW50ZiAoIlVzYWdlOiBzcGVleGVuYyBbb3B0aW9uc10gaW5wdXRfZmlsZSBvdXRwdXRfZmlsZVxuIik7CisgICBwcmludGYgKCJcbiIpOworICAgcHJpbnRmICgiRW5jb2RlcyBpbnB1dF9maWxlIHVzaW5nIFNwZWV4LiBJdCBjYW4gcmVhZCB0aGUgV0FWIG9yIHJhdyBmaWxlcy5cbiIpOworICAgcHJpbnRmICgiXG4iKTsKKyAgIHByaW50ZiAoImlucHV0X2ZpbGUgY2FuIGJlOlxuIik7CisgICBwcmludGYgKCIgIGZpbGVuYW1lLndhdiAgICAgIHdhdiBmaWxlXG4iKTsKKyAgIHByaW50ZiAoIiAgZmlsZW5hbWUuKiAgICAgICAgUmF3IFBDTSBmaWxlIChhbnkgZXh0ZW5zaW9uIG90aGVyIHRoYW4gLndhdilcbiIpOworICAgcHJpbnRmICgiICAtICAgICAgICAgICAgICAgICBzdGRpblxuIik7CisgICBwcmludGYgKCJcbiIpOyAgCisgICBwcmludGYgKCJvdXRwdXRfZmlsZSBjYW4gYmU6XG4iKTsKKyAgIHByaW50ZiAoIiAgZmlsZW5hbWUuc3B4ICAgICAgU3BlZXggZmlsZVxuIik7CisgICBwcmludGYgKCIgIC0gICAgICAgICAgICAgICAgIHN0ZG91dFxuIik7CisgICBwcmludGYgKCJcbiIpOyAgCisgICBwcmludGYgKCJPcHRpb25zOlxuIik7CisgICBwcmludGYgKCIgLW4sIC0tbmFycm93YmFuZCAgIE5hcnJvd2JhbmQgKDgga0h6KSBpbnB1dCBmaWxlXG4iKTsgCisgICBwcmludGYgKCIgLXcsIC0td2lkZWJhbmQgICAgIFdpZGViYW5kICgxNiBrSHopIGlucHV0IGZpbGVcbiIpOyAKKyAgIHByaW50ZiAoIiAtdSwgLS11bHRyYS13aWRlYmFuZCBcIlVsdHJhLXdpZGViYW5kXCIgKDMyIGtIeikgaW5wdXQgZmlsZVxuIik7IAorICAgcHJpbnRmICgiIC0tcXVhbGl0eSBuICAgICAgICBFbmNvZGluZyBxdWFsaXR5ICgwLTEwKSwgZGVmYXVsdCA4XG4iKTsgCisgICBwcmludGYgKCIgLS1iaXRyYXRlIG4gICAgICAgIEVuY29kaW5nIGJpdC1yYXRlICh1c2UgYml0LXJhdGUgbiBvciBsb3dlcilcbiIpOyAKKyAgIHByaW50ZiAoIiAtLXZiciAgICAgICAgICAgICAgRW5hYmxlIHZhcmlhYmxlIGJpdC1yYXRlIChWQlIpXG4iKTsgCisgICBwcmludGYgKCIgLS12YnItbWF4LWJpdHJhdGUgIFNldCBtYXggVkJSIGJpdC1yYXRlIGFsbG93ZWRcbiIpOyAKKyAgIHByaW50ZiAoIiAtLWFiciByYXRlICAgICAgICAgRW5hYmxlIGF2ZXJhZ2UgYml0LXJhdGUgKEFCUikgYXQgcmF0ZSBicHNcbiIpOyAKKyAgIHByaW50ZiAoIiAtLXZhZCAgICAgICAgICAgICAgRW5hYmxlIHZvaWNlIGFjdGl2aXR5IGRldGVjdGlvbiAoVkFEKVxuIik7IAorICAgcHJpbnRmICgiIC0tZHR4ICAgICAgICAgICAgICBFbmFibGUgZmlsZS1iYXNlZCBkaXNjb250aW51b3VzIHRyYW5zbWlzc2lvbiAoRFRYKVxuIik7IAorICAgcHJpbnRmICgiIC0tY29tcCBuICAgICAgICAgICBTZXQgZW5jb2RpbmcgY29tcGxleGl0eSAoMC0xMCksIGRlZmF1bHQgM1xuIik7IAorICAgcHJpbnRmICgiIC0tbmZyYW1lcyBuICAgICAgICBOdW1iZXIgb2YgZnJhbWVzIHBlciBPZ2cgcGFja2V0ICgxLTEwKSwgZGVmYXVsdCAxXG4iKTsgCisgICBwcmludGYgKCIgLS1kZW5vaXNlICAgICAgICAgIERlbm9pc2UgdGhlIGlucHV0IGJlZm9yZSBlbmNvZGluZ1xuIik7IAorICAgcHJpbnRmICgiIC0tYWdjICAgICAgICAgICAgICBBcHBseSBhZGFwdGl2ZSBnYWluIGNvbnRyb2wgKEFHQykgYmVmb3JlIGVuY29kaW5nXG4iKTsgCisgICBwcmludGYgKCIgLS1za2VsZXRvbiAgICAgICAgIE91dHB1dHMgb2dnIHNrZWxldG9uIG1ldGFkYXRhIChtYXkgY2F1c2UgaW5jb21wYXRpYmlsaXRpZXMpXG4iKTsKKyAgIHByaW50ZiAoIiAtLWNvbW1lbnQgICAgICAgICAgQWRkIHRoZSBnaXZlbiBzdHJpbmcgYXMgYW4gZXh0cmEgY29tbWVudC4gVGhpcyBtYXkgYmVcbiIpOworICAgcHJpbnRmICgiICAgICAgICAgICAgICAgICAgICAgdXNlZCBtdWx0aXBsZSB0aW1lc1xuIik7CisgICBwcmludGYgKCIgLS1hdXRob3IgICAgICAgICAgIEF1dGhvciBvZiB0aGlzIHRyYWNrXG4iKTsKKyAgIHByaW50ZiAoIiAtLXRpdGxlICAgICAgICAgICAgVGl0bGUgZm9yIHRoaXMgdHJhY2tcbiIpOworICAgcHJpbnRmICgiIC1oLCAtLWhlbHAgICAgICAgICBUaGlzIGhlbHBcbiIpOyAKKyAgIHByaW50ZiAoIiAtdiwgLS12ZXJzaW9uICAgICAgVmVyc2lvbiBpbmZvcm1hdGlvblxuIik7IAorICAgcHJpbnRmICgiIC1WICAgICAgICAgICAgICAgICBWZXJib3NlIG1vZGUgKHNob3cgYml0LXJhdGUpXG4iKTsgCisgICBwcmludGYgKCJSYXcgaW5wdXQgb3B0aW9uczpcbiIpOworICAgcHJpbnRmICgiIC0tcmF0ZSBuICAgICAgICAgICBTYW1wbGluZyByYXRlIGZvciByYXcgaW5wdXRcbiIpOyAKKyAgIHByaW50ZiAoIiAtLXN0ZXJlbyAgICAgICAgICAgQ29uc2lkZXIgcmF3IGlucHV0IGFzIHN0ZXJlb1xuIik7IAorICAgcHJpbnRmICgiIC0tbGUgICAgICAgICAgICAgICBSYXcgaW5wdXQgaXMgbGl0dGxlLWVuZGlhblxuIik7IAorICAgcHJpbnRmICgiIC0tYmUgICAgICAgICAgICAgICBSYXcgaW5wdXQgaXMgYmlnLWVuZGlhblxuIik7IAorICAgcHJpbnRmICgiIC0tOGJpdCAgICAgICAgICAgICBSYXcgaW5wdXQgaXMgOC1iaXQgdW5zaWduZWRcbiIpOyAKKyAgIHByaW50ZiAoIiAtLTE2Yml0ICAgICAgICAgICAgUmF3IGlucHV0IGlzIDE2LWJpdCBzaWduZWRcbiIpOyAKKyAgIHByaW50ZiAoIkRlZmF1bHQgcmF3IFBDTSBpbnB1dCBpcyAxNi1iaXQsIGxpdHRsZS1lbmRpYW4sIG1vbm9cbiIpOyAKKyAgIHByaW50ZiAoIlxuIik7CisgICBwcmludGYgKCJNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBTcGVleCBzaXRlOiBodHRwOi8vd3d3LnNwZWV4Lm9yZ1xuIik7CisgICBwcmludGYgKCJcbiIpOworICAgcHJpbnRmICgiUGxlYXNlIHJlcG9ydCBidWdzIHRvIHRoZSBtYWlsaW5nIGxpc3QgYHNwZWV4LWRldkB4aXBoLm9yZycuXG4iKTsKK30KKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICBpbnQgbmJfc2FtcGxlcywgdG90YWxfc2FtcGxlcz0wLCBuYl9lbmNvZGVkOworICAgaW50IGM7CisgICBpbnQgb3B0aW9uX2luZGV4ID0gMDsKKyAgIGNoYXIgKmluRmlsZSwgKm91dEZpbGU7CisgICBGSUxFICpmaW4sICpmb3V0OworICAgc2hvcnQgaW5wdXRbTUFYX0ZSQU1FX1NJWkVdOworICAgc3B4X2ludDMyX3QgZnJhbWVfc2l6ZTsKKyAgIGludCBxdWlldD0wOworICAgc3B4X2ludDMyX3QgdmJyX2VuYWJsZWQ9MDsKKyAgIHNweF9pbnQzMl90IHZicl9tYXg9MDsKKyAgIGludCBhYnJfZW5hYmxlZD0wOworICAgc3B4X2ludDMyX3QgdmFkX2VuYWJsZWQ9MDsKKyAgIHNweF9pbnQzMl90IGR0eF9lbmFibGVkPTA7CisgICBpbnQgbmJCeXRlczsKKyAgIGNvbnN0IFNwZWV4TW9kZSAqbW9kZT1OVUxMOworICAgaW50IG1vZGVJRCA9IC0xOworICAgdm9pZCAqc3Q7CisgICBTcGVleEJpdHMgYml0czsKKyAgIGNoYXIgY2JpdHNbTUFYX0ZSQU1FX0JZVEVTXTsKKyAgIGludCB3aXRoX3NrZWxldG9uID0gMDsKKyAgIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPQorICAgeworICAgICAgeyJ3aWRlYmFuZCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfSwKKyAgICAgIHsidWx0cmEtd2lkZWJhbmQiLCBub19hcmd1bWVudCwgTlVMTCwgMH0sCisgICAgICB7Im5hcnJvd2JhbmQiLCBub19hcmd1bWVudCwgTlVMTCwgMH0sCisgICAgICB7InZiciIsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfSwKKyAgICAgIHsidmJyLW1heC1iaXRyYXRlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDB9LAorICAgICAgeyJhYnIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMH0sCisgICAgICB7InZhZCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfSwKKyAgICAgIHsiZHR4Iiwgbm9fYXJndW1lbnQsIE5VTEwsIDB9LAorICAgICAgeyJxdWFsaXR5IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDB9LAorICAgICAgeyJiaXRyYXRlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDB9LAorICAgICAgeyJuZnJhbWVzIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDB9LAorICAgICAgeyJjb21wIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDB9LAorICAgICAgeyJkZW5vaXNlIiwgbm9fYXJndW1lbnQsIE5VTEwsIDB9LAorICAgICAgeyJhZ2MiLCBub19hcmd1bWVudCwgTlVMTCwgMH0sCisgICAgICB7InNrZWxldG9uIixub19hcmd1bWVudCxOVUxMLCAwfSwKKyAgICAgIHsiaGVscCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfSwKKyAgICAgIHsicXVpZXQiLCBub19hcmd1bWVudCwgTlVMTCwgMH0sCisgICAgICB7ImxlIiwgbm9fYXJndW1lbnQsIE5VTEwsIDB9LAorICAgICAgeyJiZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfSwKKyAgICAgIHsiOGJpdCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfSwKKyAgICAgIHsiMTZiaXQiLCBub19hcmd1bWVudCwgTlVMTCwgMH0sCisgICAgICB7InN0ZXJlbyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfSwKKyAgICAgIHsicmF0ZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAwfSwKKyAgICAgIHsidmVyc2lvbiIsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfSwKKyAgICAgIHsidmVyc2lvbi1zaG9ydCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfSwKKyAgICAgIHsiY29tbWVudCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAwfSwKKyAgICAgIHsiYXV0aG9yIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDB9LAorICAgICAgeyJ0aXRsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAwfSwKKyAgICAgIHswLCAwLCAwLCAwfQorICAgfTsKKyAgIGludCBwcmludF9iaXRyYXRlPTA7CisgICBzcHhfaW50MzJfdCByYXRlPTA7CisgICBzcHhfaW50MzJfdCBzaXplOworICAgaW50IGNoYW49MTsKKyAgIGludCBmbXQ9MTY7CisgICBzcHhfaW50MzJfdCBxdWFsaXR5PS0xOworICAgZmxvYXQgdmJyX3F1YWxpdHk9LTE7CisgICBpbnQgbHNiPTE7CisgICBvZ2dfc3RyZWFtX3N0YXRlIG9zOworICAgb2dnX3N0cmVhbV9zdGF0ZSBzbzsgLyogb2dnIHN0cmVhbSBmb3Igc2tlbGV0b24gYml0c3RyZWFtICovCisgICBvZ2dfcGFnZSAJCSBvZzsKKyAgIG9nZ19wYWNrZXQgCQkgb3A7CisgICBpbnQgYnl0ZXNfd3JpdHRlbj0wLCByZXQsIHJlc3VsdDsKKyAgIGludCBpZD0tMTsKKyAgIFNwZWV4SGVhZGVyIGhlYWRlcjsKKyAgIGludCBuZnJhbWVzPTE7CisgICBzcHhfaW50MzJfdCBjb21wbGV4aXR5PTM7CisgICBjaGFyICp2ZW5kb3Jfc3RyaW5nID0gIkVuY29kZWQgd2l0aCBTcGVleCAiIFNQRUVYX1ZFUlNJT047CisgICBjaGFyICpjb21tZW50czsKKyAgIGludCBjb21tZW50c19sZW5ndGg7CisgICBpbnQgY2xvc2VfaW49MCwgY2xvc2Vfb3V0PTA7CisgICBpbnQgZW9zPTA7CisgICBzcHhfaW50MzJfdCBiaXRyYXRlPTA7CisgICBkb3VibGUgY3VtdWxfYml0cz0wLCBlbmNfZnJhbWVzPTA7CisgICBjaGFyIGZpcnN0X2J5dGVzWzEyXTsKKyAgIGludCB3YXZlX2lucHV0PTA7CisgICBzcHhfaW50MzJfdCB0bXA7CisgICBTcGVleFByZXByb2Nlc3NTdGF0ZSAqcHJlcHJvY2VzcyA9IE5VTEw7CisgICBpbnQgZGVub2lzZV9lbmFibGVkPTAsIGFnY19lbmFibGVkPTA7CisgICBzcHhfaW50MzJfdCBsb29rYWhlYWQgPSAwOworICAgCisgICBjb21tZW50X2luaXQoJmNvbW1lbnRzLCAmY29tbWVudHNfbGVuZ3RoLCB2ZW5kb3Jfc3RyaW5nKTsKKworICAgLypQcm9jZXNzIGNvbW1hbmQtbGluZSBvcHRpb25zKi8KKyAgIHdoaWxlKDEpCisgICB7CisgICAgICBjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJud3VodlYiLAorICAgICAgICAgICAgICAgICAgICAgICBsb25nX29wdGlvbnMsICZvcHRpb25faW5kZXgpOworICAgICAgaWYgKGM9PS0xKQorICAgICAgICAgYnJlYWs7CisgICAgICAKKyAgICAgIHN3aXRjaChjKQorICAgICAgeworICAgICAgY2FzZSAwOgorICAgICAgICAgaWYgKHN0cmNtcChsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lLCJuYXJyb3diYW5kIik9PTApCisgICAgICAgICB7CisgICAgICAgICAgICBtb2RlSUQgPSBTUEVFWF9NT0RFSURfTkI7CisgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lLCJ3aWRlYmFuZCIpPT0wKQorICAgICAgICAgeworICAgICAgICAgICAgbW9kZUlEID0gU1BFRVhfTU9ERUlEX1dCOworICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAobG9uZ19vcHRpb25zW29wdGlvbl9pbmRleF0ubmFtZSwidWx0cmEtd2lkZWJhbmQiKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIG1vZGVJRCA9IFNQRUVYX01PREVJRF9VV0I7CisgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lLCJ2YnIiKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHZicl9lbmFibGVkPTE7CisgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lLCJ2YnItbWF4LWJpdHJhdGUiKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHZicl9tYXg9YXRvaShvcHRhcmcpOworICAgICAgICAgICAgaWYgKHZicl9tYXg8MSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkludmFsaWQgVkJSIG1heCBiaXQtcmF0ZSB2YWx1ZTogJWRcbiIsIHZicl9tYXgpOworICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUsImFiciIpPT0wKQorICAgICAgICAgeworICAgICAgICAgICAgYWJyX2VuYWJsZWQ9YXRvaShvcHRhcmcpOworICAgICAgICAgICAgaWYgKCFhYnJfZW5hYmxlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkludmFsaWQgQUJSIHZhbHVlOiAlZFxuIiwgYWJyX2VuYWJsZWQpOworICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUsInZhZCIpPT0wKQorICAgICAgICAgeworICAgICAgICAgICAgdmFkX2VuYWJsZWQ9MTsKKyAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUsImR0eCIpPT0wKQorICAgICAgICAgeworICAgICAgICAgICAgZHR4X2VuYWJsZWQ9MTsKKyAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUsInF1YWxpdHkiKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHF1YWxpdHkgPSBhdG9pIChvcHRhcmcpOworICAgICAgICAgICAgdmJyX3F1YWxpdHk9YXRvZihvcHRhcmcpOworICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAobG9uZ19vcHRpb25zW29wdGlvbl9pbmRleF0ubmFtZSwiYml0cmF0ZSIpPT0wKQorICAgICAgICAgeworICAgICAgICAgICAgYml0cmF0ZSA9IGF0b2kgKG9wdGFyZyk7CisgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lLCJuZnJhbWVzIik9PTApCisgICAgICAgICB7CisgICAgICAgICAgICBuZnJhbWVzID0gYXRvaSAob3B0YXJnKTsKKyAgICAgICAgICAgIGlmIChuZnJhbWVzPDEpCisgICAgICAgICAgICAgICBuZnJhbWVzPTE7CisgICAgICAgICAgICBpZiAobmZyYW1lcz4xMCkKKyAgICAgICAgICAgICAgIG5mcmFtZXM9MTA7CisgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lLCJjb21wIik9PTApCisgICAgICAgICB7CisgICAgICAgICAgICBjb21wbGV4aXR5ID0gYXRvaSAob3B0YXJnKTsKKyAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUsImRlbm9pc2UiKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGRlbm9pc2VfZW5hYmxlZD0xOworICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAobG9uZ19vcHRpb25zW29wdGlvbl9pbmRleF0ubmFtZSwiYWdjIik9PTApCisgICAgICAgICB7CisgICAgICAgICAgICBhZ2NfZW5hYmxlZD0xOworICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAobG9uZ19vcHRpb25zW29wdGlvbl9pbmRleF0ubmFtZSwic2tlbGV0b24iKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHdpdGhfc2tlbGV0b249MTsKKyAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUsImhlbHAiKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgICBleGl0KDApOworICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAobG9uZ19vcHRpb25zW29wdGlvbl9pbmRleF0ubmFtZSwicXVpZXQiKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHF1aWV0ID0gMTsKKyAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUsInZlcnNpb24iKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHZlcnNpb24oKTsKKyAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lLCJ2ZXJzaW9uLXNob3J0Iik9PTApCisgICAgICAgICB7CisgICAgICAgICAgICB2ZXJzaW9uX3Nob3J0KCk7CisgICAgICAgICAgICBleGl0KDApOworICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAobG9uZ19vcHRpb25zW29wdGlvbl9pbmRleF0ubmFtZSwibGUiKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGxzYj0xOworICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAobG9uZ19vcHRpb25zW29wdGlvbl9pbmRleF0ubmFtZSwiYmUiKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGxzYj0wOworICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAobG9uZ19vcHRpb25zW29wdGlvbl9pbmRleF0ubmFtZSwiOGJpdCIpPT0wKQorICAgICAgICAgeworICAgICAgICAgICAgZm10PTg7CisgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lLCIxNmJpdCIpPT0wKQorICAgICAgICAgeworICAgICAgICAgICAgZm10PTE2OworICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAobG9uZ19vcHRpb25zW29wdGlvbl9pbmRleF0ubmFtZSwic3RlcmVvIik9PTApCisgICAgICAgICB7CisgICAgICAgICAgICBjaGFuPTI7CisgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lLCJyYXRlIik9PTApCisgICAgICAgICB7CisgICAgICAgICAgICByYXRlPWF0b2kgKG9wdGFyZyk7CisgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lLCJjb21tZW50Iik9PTApCisgICAgICAgICB7CisJICAgaWYgKCFzdHJjaHIob3B0YXJnLCAnPScpKQorCSAgIHsKKwkgICAgIGZwcmludGYgKHN0ZGVyciwgIkludmFsaWQgY29tbWVudDogJXNcbiIsIG9wdGFyZyk7CisJICAgICBmcHJpbnRmIChzdGRlcnIsICJDb21tZW50cyBtdXN0IGJlIG9mIHRoZSBmb3JtIG5hbWU9dmFsdWVcbiIpOworCSAgICAgZXhpdCgxKTsKKwkgICB9CisgICAgICAgICAgIGNvbW1lbnRfYWRkKCZjb21tZW50cywgJmNvbW1lbnRzX2xlbmd0aCwgTlVMTCwgb3B0YXJnKTsgCisgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lLCJhdXRob3IiKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgY29tbWVudF9hZGQoJmNvbW1lbnRzLCAmY29tbWVudHNfbGVuZ3RoLCAiYXV0aG9yPSIsIG9wdGFyZyk7IAorICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAobG9uZ19vcHRpb25zW29wdGlvbl9pbmRleF0ubmFtZSwidGl0bGUiKT09MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgY29tbWVudF9hZGQoJmNvbW1lbnRzLCAmY29tbWVudHNfbGVuZ3RoLCAidGl0bGU9Iiwgb3B0YXJnKTsgCisgICAgICAgICB9CisKKyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnbic6CisgICAgICAgICBtb2RlSUQgPSBTUEVFWF9NT0RFSURfTkI7CisgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgIGV4aXQoMCk7CisgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgdmVyc2lvbigpOworICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnVic6CisgICAgICAgICBwcmludF9iaXRyYXRlPTE7CisgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ3cnOgorICAgICAgICAgbW9kZUlEID0gU1BFRVhfTU9ERUlEX1dCOworICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICd1JzoKKyAgICAgICAgIG1vZGVJRCA9IFNQRUVYX01PREVJRF9VV0I7CisgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJz8nOgorICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgIH0KKyAgIGlmIChhcmdjLW9wdGluZCE9MikKKyAgIHsKKyAgICAgIHVzYWdlKCk7CisgICAgICBleGl0KDEpOworICAgfQorICAgaW5GaWxlPWFyZ3Zbb3B0aW5kXTsKKyAgIG91dEZpbGU9YXJndltvcHRpbmQrMV07CisKKyAgIC8qSW5pdGlhbGl6ZSBPZ2cgc3RyZWFtIHN0cnVjdCovCisgICBzcmFuZCh0aW1lKE5VTEwpKTsKKyAgIGlmIChvZ2dfc3RyZWFtX2luaXQoJm9zLCByYW5kKCkpPT0tMSkKKyAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCJFcnJvcjogc3RyZWFtIGluaXQgZmFpbGVkXG4iKTsKKyAgICAgIGV4aXQoMSk7CisgICB9CisgICBpZiAod2l0aF9za2VsZXRvbiAmJiBvZ2dfc3RyZWFtX2luaXQoJnNvLCByYW5kKCkpPT0tMSkKKyAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCJFcnJvcjogc3RyZWFtIGluaXQgZmFpbGVkXG4iKTsKKyAgICAgIGV4aXQoMSk7CisgICB9CisKKyAgIGlmIChzdHJjbXAoaW5GaWxlLCAiLSIpPT0wKQorICAgeworI2lmIGRlZmluZWQgV0lOMzIgfHwgZGVmaW5lZCBfV0lOMzIKKyAgICAgICAgIF9zZXRtb2RlKF9maWxlbm8oc3RkaW4pLCBfT19CSU5BUlkpOworI2VuZGlmCisgICAgICBmaW49c3RkaW47CisgICB9CisgICBlbHNlIAorICAgeworICAgICAgZmluID0gZm9wZW4oaW5GaWxlLCAicmIiKTsKKyAgICAgIGlmICghZmluKQorICAgICAgeworICAgICAgICAgcGVycm9yKGluRmlsZSk7CisgICAgICAgICBleGl0KDEpOworICAgICAgfQorICAgICAgY2xvc2VfaW49MTsKKyAgIH0KKworICAgeworICAgICAgZnJlYWQoZmlyc3RfYnl0ZXMsIDEsIDEyLCBmaW4pOworICAgICAgaWYgKHN0cm5jbXAoZmlyc3RfYnl0ZXMsIlJJRkYiLDQpPT0wICYmIHN0cm5jbXAoZmlyc3RfYnl0ZXMsIlJJRkYiLDQpPT0wKQorICAgICAgeworICAgICAgICAgaWYgKHJlYWRfd2F2X2hlYWRlcihmaW4sICZyYXRlLCAmY2hhbiwgJmZtdCwgJnNpemUpPT0tMSkKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICB3YXZlX2lucHV0PTE7CisgICAgICAgICBsc2I9MTsgLyogQ0hFQ0s6IGV4aXN0cyBiaWctZW5kaWFuIC53YXYgPz8gKi8KKyAgICAgIH0KKyAgIH0KKworICAgaWYgKG1vZGVJRD09LTEgJiYgIXJhdGUpCisgICB7CisgICAgICAvKiBCeSBkZWZhdWx0LCB1c2UgbmFycm93YmFuZC84IGtIeiAqLworICAgICAgbW9kZUlEID0gU1BFRVhfTU9ERUlEX05COworICAgICAgcmF0ZT04MDAwOworICAgfSBlbHNlIGlmIChtb2RlSUQhPS0xICYmIHJhdGUpCisgICB7CisgICAgICBtb2RlID0gc3BlZXhfbGliX2dldF9tb2RlIChtb2RlSUQpOworICAgICAgaWYgKHJhdGU+NDgwMDApCisgICAgICB7CisgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJFcnJvcjogc2FtcGxpbmcgcmF0ZSB0b28gaGlnaDogJWQgSHosIHRyeSBkb3duLXNhbXBsaW5nXG4iLCByYXRlKTsKKyAgICAgICAgIGV4aXQoMSk7CisgICAgICB9IGVsc2UgaWYgKHJhdGU+MjUwMDApCisgICAgICB7CisgICAgICAgICBpZiAobW9kZUlEICE9IFNQRUVYX01PREVJRF9VV0IpCisgICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJXYXJuaW5nOiBUcnlpbmcgdG8gZW5jb2RlIGluICVzIGF0ICVkIEh6LiBJJ2xsIGRvIGl0IGJ1dCBJIHN1Z2dlc3QgeW91IHRyeSB1bHRyYS13aWRlYmFuZCBpbnN0ZWFkXG4iLCBtb2RlLT5tb2RlTmFtZSAsIHJhdGUpOworICAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChyYXRlPjEyNTAwKQorICAgICAgeworICAgICAgICAgaWYgKG1vZGVJRCAhPSBTUEVFWF9NT0RFSURfV0IpCisgICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJXYXJuaW5nOiBUcnlpbmcgdG8gZW5jb2RlIGluICVzIGF0ICVkIEh6LiBJJ2xsIGRvIGl0IGJ1dCBJIHN1Z2dlc3QgeW91IHRyeSB3aWRlYmFuZCBpbnN0ZWFkXG4iLCBtb2RlLT5tb2RlTmFtZSAsIHJhdGUpOworICAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChyYXRlPj02MDAwKQorICAgICAgeworICAgICAgICAgaWYgKG1vZGVJRCAhPSBTUEVFWF9NT0RFSURfTkIpCisgICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJXYXJuaW5nOiBUcnlpbmcgdG8gZW5jb2RlIGluICVzIGF0ICVkIEh6LiBJJ2xsIGRvIGl0IGJ1dCBJIHN1Z2dlc3QgeW91IHRyeSBuYXJyb3diYW5kIGluc3RlYWRcbiIsIG1vZGUtPm1vZGVOYW1lICwgcmF0ZSk7CisgICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRXJyb3I6IHNhbXBsaW5nIHJhdGUgdG9vIGxvdzogJWQgSHpcbiIsIHJhdGUpOworICAgICAgICAgZXhpdCgxKTsKKyAgICAgIH0KKyAgIH0gZWxzZSBpZiAobW9kZUlEPT0tMSkKKyAgIHsKKyAgICAgIGlmIChyYXRlPjQ4MDAwKQorICAgICAgeworICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRXJyb3I6IHNhbXBsaW5nIHJhdGUgdG9vIGhpZ2g6ICVkIEh6LCB0cnkgZG93bi1zYW1wbGluZ1xuIiwgcmF0ZSk7CisgICAgICAgICBleGl0KDEpOworICAgICAgfSBlbHNlIGlmIChyYXRlPjI1MDAwKQorICAgICAgeworICAgICAgICAgbW9kZUlEID0gU1BFRVhfTU9ERUlEX1VXQjsKKyAgICAgIH0gZWxzZSBpZiAocmF0ZT4xMjUwMCkKKyAgICAgIHsKKyAgICAgICAgIG1vZGVJRCA9IFNQRUVYX01PREVJRF9XQjsKKyAgICAgIH0gZWxzZSBpZiAocmF0ZT49NjAwMCkKKyAgICAgIHsKKyAgICAgICAgIG1vZGVJRCA9IFNQRUVYX01PREVJRF9OQjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJFcnJvcjogU2FtcGxpbmcgcmF0ZSB0b28gbG93OiAlZCBIelxuIiwgcmF0ZSk7CisgICAgICAgICBleGl0KDEpOworICAgICAgfQorICAgfSBlbHNlIGlmICghcmF0ZSkKKyAgIHsKKyAgICAgIGlmIChtb2RlSUQgPT0gU1BFRVhfTU9ERUlEX05CKQorICAgICAgICAgcmF0ZT04MDAwOworICAgICAgZWxzZSBpZiAobW9kZUlEID09IFNQRUVYX01PREVJRF9XQikKKyAgICAgICAgIHJhdGU9MTYwMDA7CisgICAgICBlbHNlIGlmIChtb2RlSUQgPT0gU1BFRVhfTU9ERUlEX1VXQikKKyAgICAgICAgIHJhdGU9MzIwMDA7CisgICB9CisKKyAgIGlmICghcXVpZXQpCisgICAgICBpZiAocmF0ZSE9ODAwMCAmJiByYXRlIT0xNjAwMCAmJiByYXRlIT0zMjAwMCkKKyAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIldhcm5pbmc6IFNwZWV4IGlzIG9ubHkgb3B0aW1pemVkIGZvciA4LCAxNiBhbmQgMzIga0h6LiBJdCB3aWxsIHN0aWxsIHdvcmsgYXQgJWQgSHogYnV0IHlvdXIgbWlsZWFnZSBtYXkgdmFyeVxuIiwgcmF0ZSk7IAorCisgICBpZiAoIW1vZGUpCisgICAgICBtb2RlID0gc3BlZXhfbGliX2dldF9tb2RlIChtb2RlSUQpOworCisgICBzcGVleF9pbml0X2hlYWRlcigmaGVhZGVyLCByYXRlLCAxLCBtb2RlKTsKKyAgIGhlYWRlci5mcmFtZXNfcGVyX3BhY2tldD1uZnJhbWVzOworICAgaGVhZGVyLnZicj12YnJfZW5hYmxlZDsKKyAgIGhlYWRlci5uYl9jaGFubmVscyA9IGNoYW47CisKKyAgIHsKKyAgICAgIGNoYXIgKnN0X3N0cmluZz0ibW9ubyI7CisgICAgICBpZiAoY2hhbj09MikKKyAgICAgICAgIHN0X3N0cmluZz0ic3RlcmVvIjsKKyAgICAgIGlmICghcXVpZXQpCisgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJFbmNvZGluZyAlZCBIeiBhdWRpbyB1c2luZyAlcyBtb2RlICglcylcbiIsIAorICAgICAgICAgICAgICAgaGVhZGVyLnJhdGUsIG1vZGUtPm1vZGVOYW1lLCBzdF9zdHJpbmcpOworICAgfQorICAgLypmcHJpbnRmIChzdGRlcnIsICJFbmNvZGluZyAlZCBIeiBhdWRpbyBhdCAlZCBicHMgdXNpbmcgJXMgbW9kZVxuIiwgCisgICAgIGhlYWRlci5yYXRlLCBtb2RlLT5iaXRyYXRlLCBtb2RlLT5tb2RlTmFtZSk7Ki8KKworICAgLypJbml0aWFsaXplIFNwZWV4IGVuY29kZXIqLworICAgc3QgPSBzcGVleF9lbmNvZGVyX2luaXQobW9kZSk7CisKKyAgIGlmIChzdHJjbXAob3V0RmlsZSwiLSIpPT0wKQorICAgeworI2lmIGRlZmluZWQgV0lOMzIgfHwgZGVmaW5lZCBfV0lOMzIKKyAgICAgIF9zZXRtb2RlKF9maWxlbm8oc3Rkb3V0KSwgX09fQklOQVJZKTsKKyNlbmRpZgorICAgICAgZm91dD1zdGRvdXQ7CisgICB9CisgICBlbHNlIAorICAgeworICAgICAgZm91dCA9IGZvcGVuKG91dEZpbGUsICJ3YiIpOworICAgICAgaWYgKCFmb3V0KQorICAgICAgeworICAgICAgICAgcGVycm9yKG91dEZpbGUpOworICAgICAgICAgZXhpdCgxKTsKKyAgICAgIH0KKyAgICAgIGNsb3NlX291dD0xOworICAgfQorCisgICBzcGVleF9lbmNvZGVyX2N0bChzdCwgU1BFRVhfR0VUX0ZSQU1FX1NJWkUsICZmcmFtZV9zaXplKTsKKyAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LCBTUEVFWF9TRVRfQ09NUExFWElUWSwgJmNvbXBsZXhpdHkpOworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX1NFVF9TQU1QTElOR19SQVRFLCAmcmF0ZSk7CisKKyAgIGlmIChxdWFsaXR5ID49IDApCisgICB7CisgICAgICBpZiAodmJyX2VuYWJsZWQpCisgICAgICB7CisgICAgICAgICBpZiAodmJyX21heD4wKQorICAgICAgICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX1NFVF9WQlJfTUFYX0JJVFJBVEUsICZ2YnJfbWF4KTsKKyAgICAgICAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LCBTUEVFWF9TRVRfVkJSX1FVQUxJVFksICZ2YnJfcXVhbGl0eSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdCwgU1BFRVhfU0VUX1FVQUxJVFksICZxdWFsaXR5KTsKKyAgIH0KKyAgIGlmIChiaXRyYXRlKQorICAgeworICAgICAgaWYgKHF1YWxpdHkgPj0gMCAmJiB2YnJfZW5hYmxlZCkKKyAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIldhcm5pbmc6IC0tYml0cmF0ZSBvcHRpb24gaXMgb3ZlcnJpZGluZyAtLXF1YWxpdHlcbiIpOworICAgICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX1NFVF9CSVRSQVRFLCAmYml0cmF0ZSk7CisgICB9CisgICBpZiAodmJyX2VuYWJsZWQpCisgICB7CisgICAgICB0bXA9MTsKKyAgICAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LCBTUEVFWF9TRVRfVkJSLCAmdG1wKTsKKyAgIH0gZWxzZSBpZiAodmFkX2VuYWJsZWQpCisgICB7CisgICAgICB0bXA9MTsKKyAgICAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LCBTUEVFWF9TRVRfVkFELCAmdG1wKTsKKyAgIH0KKyAgIGlmIChkdHhfZW5hYmxlZCkKKyAgICAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LCBTUEVFWF9TRVRfRFRYLCAmdG1wKTsKKyAgIGlmIChkdHhfZW5hYmxlZCAmJiAhKHZicl9lbmFibGVkIHx8IGFicl9lbmFibGVkIHx8IHZhZF9lbmFibGVkKSkKKyAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIldhcm5pbmc6IC0tZHR4IGlzIHVzZWxlc3Mgd2l0aG91dCAtLXZhZCwgLS12YnIgb3IgLS1hYnJcbiIpOworICAgfSBlbHNlIGlmICgodmJyX2VuYWJsZWQgfHwgYWJyX2VuYWJsZWQpICYmICh2YWRfZW5hYmxlZCkpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJXYXJuaW5nOiAtLXZhZCBpcyBhbHJlYWR5IGltcGxpZWQgYnkgLS12YnIgb3IgLS1hYnJcbiIpOworICAgfQorICAgaWYgKHdpdGhfc2tlbGV0b24pIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIldhcm5pbmc6IEVuYWJsaW5nIHNrZWxldG9uIG91dHB1dCBtYXkgY2F1c2Ugc29tZSBkZWNvZGVycyB0byBmYWlsLlxuIik7CisgICB9CisKKyAgIGlmIChhYnJfZW5hYmxlZCkKKyAgIHsKKyAgICAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LCBTUEVFWF9TRVRfQUJSLCAmYWJyX2VuYWJsZWQpOworICAgfQorCisgICBzcGVleF9lbmNvZGVyX2N0bChzdCwgU1BFRVhfR0VUX0xPT0tBSEVBRCwgJmxvb2thaGVhZCk7CisgICAKKyAgIGlmIChkZW5vaXNlX2VuYWJsZWQgfHwgYWdjX2VuYWJsZWQpCisgICB7CisgICAgICBwcmVwcm9jZXNzID0gc3BlZXhfcHJlcHJvY2Vzc19zdGF0ZV9pbml0KGZyYW1lX3NpemUsIHJhdGUpOworICAgICAgc3BlZXhfcHJlcHJvY2Vzc19jdGwocHJlcHJvY2VzcywgU1BFRVhfUFJFUFJPQ0VTU19TRVRfREVOT0lTRSwgJmRlbm9pc2VfZW5hYmxlZCk7CisgICAgICBzcGVleF9wcmVwcm9jZXNzX2N0bChwcmVwcm9jZXNzLCBTUEVFWF9QUkVQUk9DRVNTX1NFVF9BR0MsICZhZ2NfZW5hYmxlZCk7CisgICAgICBsb29rYWhlYWQgKz0gZnJhbWVfc2l6ZTsKKyAgIH0KKworICAgLyogZmlyc3QgcGFja2V0IHNob3VsZCBiZSB0aGUgc2tlbGV0b24gaGVhZGVyLiAqLworCisgICBpZiAod2l0aF9za2VsZXRvbikgeworICAgICAgYWRkX2Zpc2hlYWRfcGFja2V0KCZzbyk7CisgICAgICBpZiAoKHJldCA9IGZsdXNoX29nZ19zdHJlYW1fdG9fZmlsZSgmc28sIGZvdXQpKSkgeworCSBmcHJpbnRmIChzdGRlcnIsIkVycm9yOiBmYWlsZWQgc2tlbGV0b24gKGZpc2hlYWQpIGhlYWRlciB0byBvdXRwdXQgc3RyZWFtXG4iKTsKKyAgICAgICAgIGV4aXQoMSk7CisgICAgICB9IGVsc2UKKwkgYnl0ZXNfd3JpdHRlbiArPSByZXQ7CisgICB9CisKKyAgIC8qV3JpdGUgaGVhZGVyKi8KKyAgIHsKKyAgICAgIGludCBwYWNrZXRfc2l6ZTsKKyAgICAgIG9wLnBhY2tldCA9ICh1bnNpZ25lZCBjaGFyICopc3BlZXhfaGVhZGVyX3RvX3BhY2tldCgmaGVhZGVyLCAmcGFja2V0X3NpemUpOworICAgICAgb3AuYnl0ZXMgPSBwYWNrZXRfc2l6ZTsKKyAgICAgIG9wLmJfb19zID0gMTsKKyAgICAgIG9wLmVfb19zID0gMDsKKyAgICAgIG9wLmdyYW51bGVwb3MgPSAwOworICAgICAgb3AucGFja2V0bm8gPSAwOworICAgICAgb2dnX3N0cmVhbV9wYWNrZXRpbigmb3MsICZvcCk7CisgICAgICBmcmVlKG9wLnBhY2tldCk7CisKKyAgICAgIHdoaWxlKChyZXN1bHQgPSBvZ2dfc3RyZWFtX2ZsdXNoKCZvcywgJm9nKSkpCisgICAgICB7CisgICAgICAgICBpZighcmVzdWx0KSBicmVhazsKKyAgICAgICAgIHJldCA9IG9lX3dyaXRlX3BhZ2UoJm9nLCBmb3V0KTsKKyAgICAgICAgIGlmKHJldCAhPSBvZy5oZWFkZXJfbGVuICsgb2cuYm9keV9sZW4pCisgICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsIkVycm9yOiBmYWlsZWQgd3JpdGluZyBoZWFkZXIgdG8gb3V0cHV0IHN0cmVhbVxuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgfQorICAgICAgICAgZWxzZQorICAgICAgICAgICAgYnl0ZXNfd3JpdHRlbiArPSByZXQ7CisgICAgICB9CisKKyAgICAgIG9wLnBhY2tldCA9ICh1bnNpZ25lZCBjaGFyICopY29tbWVudHM7CisgICAgICBvcC5ieXRlcyA9IGNvbW1lbnRzX2xlbmd0aDsKKyAgICAgIG9wLmJfb19zID0gMDsKKyAgICAgIG9wLmVfb19zID0gMDsKKyAgICAgIG9wLmdyYW51bGVwb3MgPSAwOworICAgICAgb3AucGFja2V0bm8gPSAxOworICAgICAgb2dnX3N0cmVhbV9wYWNrZXRpbigmb3MsICZvcCk7CisgICB9CisKKyAgIC8qIGZpc2JvbmUgcGFja2V0IHNob3VsZCBiZSB3cml0ZSBhZnRlciBhbGwgYm9zIHBhZ2VzICovCisgICBpZiAod2l0aF9za2VsZXRvbikgeworICAgICAgYWRkX2Zpc2JvbmVfcGFja2V0KCZzbywgb3Muc2VyaWFsbm8sICZoZWFkZXIpOworICAgICAgaWYgKChyZXQgPSBmbHVzaF9vZ2dfc3RyZWFtX3RvX2ZpbGUoJnNvLCBmb3V0KSkpIHsKKwkgZnByaW50ZiAoc3RkZXJyLCJFcnJvcjogZmFpbGVkIHdyaXRpbmcgc2tlbGV0b24gKGZpc2JvbmUgKWhlYWRlciB0byBvdXRwdXQgc3RyZWFtXG4iKTsKKyAgICAgICAgIGV4aXQoMSk7CisgICAgICB9IGVsc2UKKwkgYnl0ZXNfd3JpdHRlbiArPSByZXQ7CisgICB9CisKKyAgIC8qIHdyaXRpbmcgdGhlIHJlc3Qgb2YgdGhlIHNwZWV4IGhlYWRlciBwYWNrZXRzICovCisgICB3aGlsZSgocmVzdWx0ID0gb2dnX3N0cmVhbV9mbHVzaCgmb3MsICZvZykpKQorICAgeworICAgICAgaWYoIXJlc3VsdCkgYnJlYWs7CisgICAgICByZXQgPSBvZV93cml0ZV9wYWdlKCZvZywgZm91dCk7CisgICAgICBpZihyZXQgIT0gb2cuaGVhZGVyX2xlbiArIG9nLmJvZHlfbGVuKQorICAgICAgeworICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCJFcnJvcjogZmFpbGVkIHdyaXRpbmcgaGVhZGVyIHRvIG91dHB1dCBzdHJlYW1cbiIpOworICAgICAgICAgZXhpdCgxKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgIGJ5dGVzX3dyaXR0ZW4gKz0gcmV0OworICAgfQorCisgICBmcmVlKGNvbW1lbnRzKTsKKworICAgLyogd3JpdGUgdGhlIHNrZWxldG9uIGVvcyBwYWNrZXQgKi8KKyAgIGlmICh3aXRoX3NrZWxldG9uKSB7CisgICAgICBhZGRfZW9zX3BhY2tldF90b19zdHJlYW0oJnNvKTsKKyAgICAgIGlmICgocmV0ID0gZmx1c2hfb2dnX3N0cmVhbV90b19maWxlKCZzbywgZm91dCkpKSB7CisgICAgICAgICBmcHJpbnRmIChzdGRlcnIsIkVycm9yOiBmYWlsZWQgd3JpdGluZyBza2VsZXRvbiBoZWFkZXIgdG8gb3V0cHV0IHN0cmVhbVxuIik7CisgICAgICAgICBleGl0KDEpOworICAgICAgfSBlbHNlCisJIGJ5dGVzX3dyaXR0ZW4gKz0gcmV0OworICAgfQorCisKKyAgIHNwZWV4X2JpdHNfaW5pdCgmYml0cyk7CisKKyAgIGlmICghd2F2ZV9pbnB1dCkKKyAgIHsKKyAgICAgIG5iX3NhbXBsZXMgPSByZWFkX3NhbXBsZXMoZmluLGZyYW1lX3NpemUsZm10LGNoYW4sbHNiLGlucHV0LCBmaXJzdF9ieXRlcywgTlVMTCk7CisgICB9IGVsc2UgeworICAgICAgbmJfc2FtcGxlcyA9IHJlYWRfc2FtcGxlcyhmaW4sZnJhbWVfc2l6ZSxmbXQsY2hhbixsc2IsaW5wdXQsIE5VTEwsICZzaXplKTsKKyAgIH0KKyAgIGlmIChuYl9zYW1wbGVzPT0wKQorICAgICAgZW9zPTE7CisgICB0b3RhbF9zYW1wbGVzICs9IG5iX3NhbXBsZXM7CisgICBuYl9lbmNvZGVkID0gLWxvb2thaGVhZDsKKyAgIC8qTWFpbiBlbmNvZGluZyBsb29wIChvbmUgZnJhbWUgcGVyIGl0ZXJhdGlvbikqLworICAgd2hpbGUgKCFlb3MgfHwgdG90YWxfc2FtcGxlcz5uYl9lbmNvZGVkKQorICAgeworICAgICAgaWQrKzsKKyAgICAgIC8qRW5jb2RlIGN1cnJlbnQgZnJhbWUqLworICAgICAgaWYgKGNoYW49PTIpCisgICAgICAgICBzcGVleF9lbmNvZGVfc3RlcmVvX2ludChpbnB1dCwgZnJhbWVfc2l6ZSwgJmJpdHMpOworCisgICAgICBpZiAocHJlcHJvY2VzcykKKyAgICAgICAgIHNwZWV4X3ByZXByb2Nlc3MocHJlcHJvY2VzcywgaW5wdXQsIE5VTEwpOworCisgICAgICBzcGVleF9lbmNvZGVfaW50KHN0LCBpbnB1dCwgJmJpdHMpOworICAgICAgCisgICAgICBuYl9lbmNvZGVkICs9IGZyYW1lX3NpemU7CisgICAgICBpZiAocHJpbnRfYml0cmF0ZSkgeworICAgICAgICAgaW50IHRtcDsKKyAgICAgICAgIGNoYXIgY2g9MTM7CisgICAgICAgICBzcGVleF9lbmNvZGVyX2N0bChzdCwgU1BFRVhfR0VUX0JJVFJBVEUsICZ0bXApOworICAgICAgICAgZnB1dGMgKGNoLCBzdGRlcnIpOworICAgICAgICAgY3VtdWxfYml0cyArPSB0bXA7CisgICAgICAgICBlbmNfZnJhbWVzICs9IDE7CisgICAgICAgICBpZiAoIXF1aWV0KQorICAgICAgICAgeworICAgICAgICAgICAgaWYgKHZhZF9lbmFibGVkIHx8IHZicl9lbmFibGVkIHx8IGFicl9lbmFibGVkKQorICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiQml0cmF0ZSBpcyB1c2U6ICVkIGJwcyAgKGF2ZXJhZ2UgJWQgYnBzKSAgICIsIHRtcCwgKGludCkoY3VtdWxfYml0cy9lbmNfZnJhbWVzKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJCaXRyYXRlIGlzIHVzZTogJWQgYnBzICAgICAiLCB0bXApOworICAgICAgICAgfQorICAgICAgICAgCisgICAgICB9CisKKyAgICAgIGlmICh3YXZlX2lucHV0KQorICAgICAgeworICAgICAgICAgbmJfc2FtcGxlcyA9IHJlYWRfc2FtcGxlcyhmaW4sZnJhbWVfc2l6ZSxmbXQsY2hhbixsc2IsaW5wdXQsIE5VTEwsICZzaXplKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICBuYl9zYW1wbGVzID0gcmVhZF9zYW1wbGVzKGZpbixmcmFtZV9zaXplLGZtdCxjaGFuLGxzYixpbnB1dCwgTlVMTCwgTlVMTCk7CisgICAgICB9CisgICAgICBpZiAobmJfc2FtcGxlcz09MCkKKyAgICAgIHsKKyAgICAgICAgIGVvcz0xOworICAgICAgfQorICAgICAgaWYgKGVvcyAmJiB0b3RhbF9zYW1wbGVzPD1uYl9lbmNvZGVkKQorICAgICAgICAgb3AuZV9vX3MgPSAxOworICAgICAgZWxzZQorICAgICAgICAgb3AuZV9vX3MgPSAwOworICAgICAgdG90YWxfc2FtcGxlcyArPSBuYl9zYW1wbGVzOworCisgICAgICBpZiAoKGlkKzEpJW5mcmFtZXMhPTApCisgICAgICAgICBjb250aW51ZTsKKyAgICAgIHNwZWV4X2JpdHNfaW5zZXJ0X3Rlcm1pbmF0b3IoJmJpdHMpOworICAgICAgbmJCeXRlcyA9IHNwZWV4X2JpdHNfd3JpdGUoJmJpdHMsIGNiaXRzLCBNQVhfRlJBTUVfQllURVMpOworICAgICAgc3BlZXhfYml0c19yZXNldCgmYml0cyk7CisgICAgICBvcC5wYWNrZXQgPSAodW5zaWduZWQgY2hhciAqKWNiaXRzOworICAgICAgb3AuYnl0ZXMgPSBuYkJ5dGVzOworICAgICAgb3AuYl9vX3MgPSAwOworICAgICAgLypJcyB0aGlzIHJlZHVuZGVudD8qLworICAgICAgaWYgKGVvcyAmJiB0b3RhbF9zYW1wbGVzPD1uYl9lbmNvZGVkKQorICAgICAgICAgb3AuZV9vX3MgPSAxOworICAgICAgZWxzZQorICAgICAgICAgb3AuZV9vX3MgPSAwOworICAgICAgb3AuZ3JhbnVsZXBvcyA9IChpZCsxKSpmcmFtZV9zaXplLWxvb2thaGVhZDsKKyAgICAgIGlmIChvcC5ncmFudWxlcG9zPnRvdGFsX3NhbXBsZXMpCisgICAgICAgICBvcC5ncmFudWxlcG9zID0gdG90YWxfc2FtcGxlczsKKyAgICAgIC8qcHJpbnRmICgiZ3JhbnVsZXBvczogJWQgJWQgJWQgJWQgJWQgJWRcbiIsIChpbnQpb3AuZ3JhbnVsZXBvcywgaWQsIG5mcmFtZXMsIGxvb2thaGVhZCwgNSwgNik7Ki8KKyAgICAgIG9wLnBhY2tldG5vID0gMitpZC9uZnJhbWVzOworICAgICAgb2dnX3N0cmVhbV9wYWNrZXRpbigmb3MsICZvcCk7CisKKyAgICAgIC8qV3JpdGUgYWxsIG5ldyBwYWdlcyAobW9zdCBsaWtlbHkgMCBvciAxKSovCisgICAgICB3aGlsZSAob2dnX3N0cmVhbV9wYWdlb3V0KCZvcywmb2cpKQorICAgICAgeworICAgICAgICAgcmV0ID0gb2Vfd3JpdGVfcGFnZSgmb2csIGZvdXQpOworICAgICAgICAgaWYocmV0ICE9IG9nLmhlYWRlcl9sZW4gKyBvZy5ib2R5X2xlbikKKyAgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwiRXJyb3I6IGZhaWxlZCB3cml0aW5nIGhlYWRlciB0byBvdXRwdXQgc3RyZWFtXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICB9CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBieXRlc193cml0dGVuICs9IHJldDsKKyAgICAgIH0KKyAgIH0KKyAgIGlmICgoaWQrMSklbmZyYW1lcyE9MCkKKyAgIHsKKyAgICAgIHdoaWxlICgoaWQrMSklbmZyYW1lcyE9MCkKKyAgICAgIHsKKyAgICAgICAgIGlkKys7CisgICAgICAgICBzcGVleF9iaXRzX3BhY2soJmJpdHMsIDE1LCA1KTsKKyAgICAgIH0KKyAgICAgIG5iQnl0ZXMgPSBzcGVleF9iaXRzX3dyaXRlKCZiaXRzLCBjYml0cywgTUFYX0ZSQU1FX0JZVEVTKTsKKyAgICAgIG9wLnBhY2tldCA9ICh1bnNpZ25lZCBjaGFyICopY2JpdHM7CisgICAgICBvcC5ieXRlcyA9IG5iQnl0ZXM7CisgICAgICBvcC5iX29fcyA9IDA7CisgICAgICBvcC5lX29fcyA9IDE7CisgICAgICBvcC5ncmFudWxlcG9zID0gKGlkKzEpKmZyYW1lX3NpemUtbG9va2FoZWFkOworICAgICAgaWYgKG9wLmdyYW51bGVwb3M+dG90YWxfc2FtcGxlcykKKyAgICAgICAgIG9wLmdyYW51bGVwb3MgPSB0b3RhbF9zYW1wbGVzOworCisgICAgICBvcC5wYWNrZXRubyA9IDIraWQvbmZyYW1lczsKKyAgICAgIG9nZ19zdHJlYW1fcGFja2V0aW4oJm9zLCAmb3ApOworICAgfQorICAgLypGbHVzaCBhbGwgcGFnZXMgbGVmdCB0byBiZSB3cml0dGVuKi8KKyAgIHdoaWxlIChvZ2dfc3RyZWFtX2ZsdXNoKCZvcywgJm9nKSkKKyAgIHsKKyAgICAgIHJldCA9IG9lX3dyaXRlX3BhZ2UoJm9nLCBmb3V0KTsKKyAgICAgIGlmKHJldCAhPSBvZy5oZWFkZXJfbGVuICsgb2cuYm9keV9sZW4pCisgICAgICB7CisgICAgICAgICBmcHJpbnRmIChzdGRlcnIsIkVycm9yOiBmYWlsZWQgd3JpdGluZyBoZWFkZXIgdG8gb3V0cHV0IHN0cmVhbVxuIik7CisgICAgICAgICBleGl0KDEpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICAgYnl0ZXNfd3JpdHRlbiArPSByZXQ7CisgICB9CisKKyAgIHNwZWV4X2VuY29kZXJfZGVzdHJveShzdCk7CisgICBzcGVleF9iaXRzX2Rlc3Ryb3koJmJpdHMpOworICAgb2dnX3N0cmVhbV9jbGVhcigmb3MpOworCisgICBpZiAoY2xvc2VfaW4pCisgICAgICBmY2xvc2UoZmluKTsKKyAgIGlmIChjbG9zZV9vdXQpCisgICAgICBmY2xvc2UoZm91dCk7CisgICByZXR1cm4gMDsKK30KKworLyogICAgICAgICAgICAgICAgIAorIENvbW1lbnRzIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBWb3JiaXMgc3R5bGUuICAgICAgICAgICAgCisgSXQgaXMgZGVzY3JpYmxlZCBpbiB0aGUgIlN0cnVjdHVyZSIgc2VjdGlvbiBvZgorICAgIGh0dHA6Ly93d3cueGlwaC5vcmcvb2dnL3ZvcmJpcy9kb2Mvdi1jb21tZW50Lmh0bWwKKworVGhlIGNvbW1lbnQgaGVhZGVyIGlzIGRlY29kZWQgYXMgZm9sbG93czoKKyAgMSkgW3ZlbmRvcl9sZW5ndGhdID0gcmVhZCBhbiB1bnNpZ25lZCBpbnRlZ2VyIG9mIDMyIGJpdHMKKyAgMikgW3ZlbmRvcl9zdHJpbmddID0gcmVhZCBhIFVURi04IHZlY3RvciBhcyBbdmVuZG9yX2xlbmd0aF0gb2N0ZXRzCisgIDMpIFt1c2VyX2NvbW1lbnRfbGlzdF9sZW5ndGhdID0gcmVhZCBhbiB1bnNpZ25lZCBpbnRlZ2VyIG9mIDMyIGJpdHMKKyAgNCkgaXRlcmF0ZSBbdXNlcl9jb21tZW50X2xpc3RfbGVuZ3RoXSB0aW1lcyB7CisgICAgIDUpIFtsZW5ndGhdID0gcmVhZCBhbiB1bnNpZ25lZCBpbnRlZ2VyIG9mIDMyIGJpdHMKKyAgICAgNikgdGhpcyBpdGVyYXRpb24ncyB1c2VyIGNvbW1lbnQgPSByZWFkIGEgVVRGLTggdmVjdG9yIGFzIFtsZW5ndGhdIG9jdGV0cworICAgICB9CisgIDcpIFtmcmFtaW5nX2JpdF0gPSByZWFkIGEgc2luZ2xlIGJpdCBhcyBib29sZWFuCisgIDgpIGlmICggW2ZyYW1pbmdfYml0XSAgdW5zZXQgb3IgZW5kIG9mIHBhY2tldCApIHRoZW4gRVJST1IKKyAgOSkgZG9uZS4KKworICBJZiB5b3UgaGF2ZSB0cm91YmxlcywgcGxlYXNlIHdyaXRlIHRvIHltbmtAamNyYWZ0LmNvbS4KKyAqLworCisjZGVmaW5lIHJlYWRpbnQoYnVmLCBiYXNlKSAoKChidWZbYmFzZSszXTw8MjQpJjB4ZmYwMDAwMDApfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGJ1ZltiYXNlKzJdPDwxNikmMHhmZjAwMDApfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGJ1ZltiYXNlKzFdPDw4KSYweGZmMDApfCBcCisgIAkgICAgICAgICAgIAkgICAgKGJ1ZltiYXNlXSYweGZmKSkKKyNkZWZpbmUgd3JpdGVpbnQoYnVmLCBiYXNlLCB2YWwpIGRveyBidWZbYmFzZSszXT0oKHZhbCk+PjI0KSYweGZmOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmW2Jhc2UrMl09KCh2YWwpPj4xNikmMHhmZjsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZltiYXNlKzFdPSgodmFsKT4+OCkmMHhmZjsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZltiYXNlXT0odmFsKSYweGZmOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9d2hpbGUoMCkKKwordm9pZCBjb21tZW50X2luaXQoY2hhciAqKmNvbW1lbnRzLCBpbnQqIGxlbmd0aCwgY2hhciAqdmVuZG9yX3N0cmluZykKK3sKKyAgaW50IHZlbmRvcl9sZW5ndGg9c3RybGVuKHZlbmRvcl9zdHJpbmcpOworICBpbnQgdXNlcl9jb21tZW50X2xpc3RfbGVuZ3RoPTA7CisgIGludCBsZW49NCt2ZW5kb3JfbGVuZ3RoKzQ7CisgIGNoYXIgKnA9KGNoYXIqKW1hbGxvYyhsZW4pOworICBpZihwPT1OVUxMKXsKKyAgfQorICB3cml0ZWludChwLCAwLCB2ZW5kb3JfbGVuZ3RoKTsKKyAgbWVtY3B5KHArNCwgdmVuZG9yX3N0cmluZywgdmVuZG9yX2xlbmd0aCk7CisgIHdyaXRlaW50KHAsIDQrdmVuZG9yX2xlbmd0aCwgdXNlcl9jb21tZW50X2xpc3RfbGVuZ3RoKTsKKyAgKmxlbmd0aD1sZW47CisgICpjb21tZW50cz1wOworfQordm9pZCBjb21tZW50X2FkZChjaGFyICoqY29tbWVudHMsIGludCogbGVuZ3RoLCBjaGFyICp0YWcsIGNoYXIgKnZhbCkKK3sKKyAgY2hhciogcD0qY29tbWVudHM7CisgIGludCB2ZW5kb3JfbGVuZ3RoPXJlYWRpbnQocCwgMCk7CisgIGludCB1c2VyX2NvbW1lbnRfbGlzdF9sZW5ndGg9cmVhZGludChwLCA0K3ZlbmRvcl9sZW5ndGgpOworICBpbnQgdGFnX2xlbj0odGFnP3N0cmxlbih0YWcpOjApOworICBpbnQgdmFsX2xlbj1zdHJsZW4odmFsKTsKKyAgaW50IGxlbj0oKmxlbmd0aCkrNCt0YWdfbGVuK3ZhbF9sZW47CisKKyAgcD0oY2hhciopcmVhbGxvYyhwLCBsZW4pOworICBpZihwPT1OVUxMKXsKKyAgfQorCisgIHdyaXRlaW50KHAsICpsZW5ndGgsIHRhZ19sZW4rdmFsX2xlbik7ICAgICAgLyogbGVuZ3RoIG9mIGNvbW1lbnQgKi8KKyAgaWYodGFnKSBtZW1jcHkocCsqbGVuZ3RoKzQsIHRhZywgdGFnX2xlbik7ICAvKiBjb21tZW50ICovCisgIG1lbWNweShwKypsZW5ndGgrNCt0YWdfbGVuLCB2YWwsIHZhbF9sZW4pOyAgLyogY29tbWVudCAqLworICB3cml0ZWludChwLCA0K3ZlbmRvcl9sZW5ndGgsIHVzZXJfY29tbWVudF9saXN0X2xlbmd0aCsxKTsKKworICAqY29tbWVudHM9cDsKKyAgKmxlbmd0aD1sZW47Cit9CisjdW5kZWYgcmVhZGludAorI3VuZGVmIHdyaXRlaW50CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9zcmMvd2F2X2lvLmMgYi8zcmRwYXJ0eS9zcGVleC9zcmMvd2F2X2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY4YTkxYQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3NyYy93YXZfaW8uYwpAQCAtMCwwICsxLDI2MyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEplYW4tTWFyYyBWYWxpbiAKKyAgIEZpbGU6IHdhdl9pby5jCisgICBSb3V0aW5lcyB0byBoYW5kbGUgd2F2IChSSUZGKSBoZWFkZXJzCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAic3BlZXgvc3BlZXhfdHlwZXMuaCIKKworc3RhdGljIHNweF91aW50MzJfdCBsZV9pbnQoc3B4X3VpbnQzMl90IGkpCit7CisgICBzcHhfdWludDMyX3QgcmV0PWk7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgICByZXQgPSAgaT4+MjQ7CisgICByZXQgKz0gKGk+PjgpJjB4MDAwMGZmMDA7CisgICByZXQgKz0gKGk8PDgpJjB4MDBmZjAwMDA7CisgICByZXQgKz0gKGk8PDI0KTsKKyNlbmRpZgorICAgcmV0dXJuIHJldDsKK30KKwordW5zaWduZWQgc2hvcnQgYmVfc2hvcnQodW5zaWduZWQgc2hvcnQgcykKK3sKKyAgIHVuc2lnbmVkIHNob3J0IHJldD1zOworI2lmbmRlZiBXT1JEU19CSUdFTkRJQU4KKyAgIHJldCA9ICBzPj44OworICAgcmV0ICs9IHM8PDg7CisjZW5kaWYKKyAgIHJldHVybiByZXQ7Cit9CisKK3Vuc2lnbmVkIHNob3J0IGxlX3Nob3J0KHVuc2lnbmVkIHNob3J0IHMpCit7CisgICB1bnNpZ25lZCBzaG9ydCByZXQ9czsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyAgIHJldCA9ICBzPj44OworICAgcmV0ICs9IHM8PDg7CisjZW5kaWYKKyAgIHJldHVybiByZXQ7Cit9CisKKworaW50IHJlYWRfd2F2X2hlYWRlcihGSUxFICpmaWxlLCBpbnQgKnJhdGUsIGludCAqY2hhbm5lbHMsIGludCAqZm9ybWF0LCBzcHhfaW50MzJfdCAqc2l6ZSkKK3sKKyAgIGNoYXIgY2hbNV07CisgICBzcHhfaW50MzJfdCBpdG1wOworICAgc3B4X2ludDE2X3Qgc3RtcDsKKyAgIHNweF9pbnQzMl90IGJwZXJzZWM7CisgICBzcHhfaW50MTZfdCBiYWxpZ247CisgICBpbnQgc2tpcF9ieXRlczsKKyAgIGludCBpOworCisgICBjaFs0XT0wOworI2lmIDAKKyAgIGZyZWFkKGNoLCAxLCA0LCBmaWxlKTsKKyAgIGlmIChzdHJjbXAoY2gsICJSSUZGIikhPTApCisgICB7CisgICAgICBmc2VlayhmaWxlLCAwLCBTRUVLX1NFVCk7CisgICAgICByZXR1cm4gMDsKKyAgIH0KKworICAgZnJlYWQoJml0bXAsIDQsIDEsIGZpbGUpOworICAgKnNpemUgPSBsZV9pbnQoaXRtcC0zNik7CisKKyAgIGZyZWFkKGNoLCAxLCA0LCBmaWxlKTsKKyAgIGlmIChzdHJjbXAoY2gsICJXQVZFIikhPTApCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJSSUZGIGZpbGUgaXMgbm90IGEgV0FWRSBmaWxlXG4iKTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKyNlbmRpZgorICAgZnJlYWQoY2gsIDEsIDQsIGZpbGUpOworICAgd2hpbGUgKHN0cmNtcChjaCwgImZtdCAiKSE9MCkKKyAgIHsKKyAgICAgIGZyZWFkKCZpdG1wLCA0LCAxLCBmaWxlKTsKKyAgICAgIGl0bXAgPSBsZV9pbnQoaXRtcCk7CisgICAgICAvKmZwcmludGYgKHN0ZGVyciwgInNraXA9JWRcbiIsIGl0bXApOyovCisgICAgICAvKnN0cmFuZ2Ugd2F5IG9mIHNlZWtpbmcsIGJ1dCBpdCB3b3JrcyBldmVuIGZvciBwaXBlcyovCisgICAgICBmb3IgKGk9MDtpPGl0bXA7aSsrKQorICAgICAgICAgZmdldGMoZmlsZSk7CisgICAgICAvKmZzZWVrKGZpbGUsIGl0bXAsIFNFRUtfQ1VSKTsqLworICAgICAgZnJlYWQoY2gsIDEsIDQsIGZpbGUpOworICAgICAgaWYgKGZlb2YoZmlsZSkpCisgICAgICB7CisgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJDb3JydXB0ZWQgV0FWRSBmaWxlOiBubyBcImZtdCBcIlxuIik7CisgICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisgICB9CisgICAvKmlmIChzdHJjbXAoY2gsICJmbXQgIikhPTApCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJDb3JydXB0ZWQgV0FWRSBmaWxlOiBubyBcImZtdCBcIlxuIik7CisgICAgICByZXR1cm4gLTE7CisgICAgICB9Ki8KKyAgIAorICAgZnJlYWQoJml0bXAsIDQsIDEsIGZpbGUpOworICAgaXRtcCA9IGxlX2ludChpdG1wKTsKKyAgIHNraXBfYnl0ZXM9aXRtcC0xNjsKKyAgIC8qZnByaW50ZiAoc3RkZXJyLCAic2tpcD0lZFxuIiwgc2tpcF9ieXRlcyk7Ki8KKyAgIAorICAgZnJlYWQoJnN0bXAsIDIsIDEsIGZpbGUpOworICAgc3RtcCA9IGxlX3Nob3J0KHN0bXApOworICAgaWYgKHN0bXAhPTEpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJPbmx5IFBDTSBlbmNvZGluZyBpcyBzdXBwb3J0ZWRcbiIpOworICAgICAgcmV0dXJuIC0xOworICAgfQorCisgICBmcmVhZCgmc3RtcCwgMiwgMSwgZmlsZSk7CisgICBzdG1wID0gbGVfc2hvcnQoc3RtcCk7CisgICAqY2hhbm5lbHMgPSBzdG1wOworICAgCisgICBpZiAoc3RtcD4yKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiT25seSBtb25vIGFuZCAoaW50ZW5zaXR5KSBzdGVyZW8gc3VwcG9ydGVkXG4iKTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKworICAgZnJlYWQoJml0bXAsIDQsIDEsIGZpbGUpOworICAgaXRtcCA9IGxlX2ludChpdG1wKTsKKyAgICpyYXRlID0gaXRtcDsKKyAgIGlmICgqcmF0ZSAhPSA4MDAwICYmICpyYXRlICE9IDE2MDAwICYmICpyYXRlICE9IDExMDI1ICYmICpyYXRlICE9IDIyMDUwICYmICpyYXRlICE9IDMyMDAwICYmICpyYXRlICE9IDQ0MTAwICYmICpyYXRlICE9IDQ4MDAwKQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiT25seSA4IGtIeiAobmFycm93YmFuZCkgYW5kIDE2IGtIeiAod2lkZWJhbmQpIHN1cHBvcnRlZCAocGx1cyAxMS4wMjUga0h6IGFuZCAyMi4wNSBrSHosIGJ1dCB5b3VyIG1pbGVhZ2UgbWF5IHZhcnkpXG4iKTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKworICAgZnJlYWQoJml0bXAsIDQsIDEsIGZpbGUpOworICAgYnBlcnNlYyA9IGxlX2ludChpdG1wKTsKKworICAgZnJlYWQoJnN0bXAsIDIsIDEsIGZpbGUpOworICAgYmFsaWduID0gbGVfc2hvcnQoc3RtcCk7CisKKyAgIGZyZWFkKCZzdG1wLCAyLCAxLCBmaWxlKTsKKyAgIHN0bXAgPSBsZV9zaG9ydChzdG1wKTsKKyAgIGlmIChzdG1wIT0xNiAmJiBzdG1wIT04KQorICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiT25seSA4LzE2LWJpdCBsaW5lYXIgc3VwcG9ydGVkXG4iKTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKyAgICpmb3JtYXQ9c3RtcDsKKworICAgaWYgKGJwZXJzZWMhPSpyYXRlKipjaGFubmVscypzdG1wLzgpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJDb3JydXB0ZWQgaGVhZGVyOiBCeXRlUmF0ZSBtaXNtYXRjaFxuIik7CisgICAgICByZXR1cm4gLTE7CisgICB9CisKKyAgIGlmIChiYWxpZ24hPSpjaGFubmVscypzdG1wLzgpCisgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJDb3JydXB0ZWQgaGVhZGVyOiBCbG9ja0FsaWduIG1pc21hdGNoXG4iKTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKworICAgCisgICAvKnN0cmFuZ2Ugd2F5IG9mIHNlZWtpbmcsIGJ1dCBpdCB3b3JrcyBldmVuIGZvciBwaXBlcyovCisgICBpZiAoc2tpcF9ieXRlcz4wKQorICAgICAgZm9yIChpPTA7aTxza2lwX2J5dGVzO2krKykKKyAgICAgICAgIGZnZXRjKGZpbGUpOworCisgICAvKmZzZWVrKGZpbGUsIHNraXBfYnl0ZXMsIFNFRUtfQ1VSKTsqLworCisgICBmcmVhZChjaCwgMSwgNCwgZmlsZSk7CisgICB3aGlsZSAoc3RyY21wKGNoLCAiZGF0YSIpIT0wKQorICAgeworICAgICAgZnJlYWQoJml0bXAsIDQsIDEsIGZpbGUpOworICAgICAgaXRtcCA9IGxlX2ludChpdG1wKTsKKyAgICAgIC8qc3RyYW5nZSB3YXkgb2Ygc2Vla2luZywgYnV0IGl0IHdvcmtzIGV2ZW4gZm9yIHBpcGVzKi8KKyAgICAgIGZvciAoaT0wO2k8aXRtcDtpKyspCisgICAgICAgICBmZ2V0YyhmaWxlKTsKKyAgICAgIC8qZnNlZWsoZmlsZSwgaXRtcCwgU0VFS19DVVIpOyovCisgICAgICBmcmVhZChjaCwgMSwgNCwgZmlsZSk7CisgICAgICBpZiAoZmVvZihmaWxlKSkKKyAgICAgIHsKKyAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkNvcnJ1cHRlZCBXQVZFIGZpbGU6IG5vIFwiZGF0YVwiXG4iKTsKKyAgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKyAgIH0KKworICAgLypJZ25vcmUgdGhpcyBmb3Igbm93Ki8KKyAgIGZyZWFkKCZpdG1wLCA0LCAxLCBmaWxlKTsKKyAgIGl0bXAgPSBsZV9pbnQoaXRtcCk7CisKKyAgICpzaXplPWl0bXA7CisKKyAgIHJldHVybiAxOworfQorCisKKwordm9pZCB3cml0ZV93YXZfaGVhZGVyKEZJTEUgKmZpbGUsIGludCByYXRlLCBpbnQgY2hhbm5lbHMsIGludCBmb3JtYXQsIGludCBzaXplKQoreworICAgY2hhciBjaFs1XTsKKyAgIHNweF9pbnQzMl90IGl0bXA7CisgICBzcHhfaW50MTZfdCBzdG1wOworCisgICBjaFs0XT0wOworCisgICBmcHJpbnRmIChmaWxlLCAiUklGRiIpOworCisgICBpdG1wID0gMHg3ZmZmZmZmZjsKKyAgIGZ3cml0ZSgmaXRtcCwgNCwgMSwgZmlsZSk7CisKKyAgIGZwcmludGYgKGZpbGUsICJXQVZFZm10ICIpOworCisgICBpdG1wID0gbGVfaW50KDE2KTsKKyAgIGZ3cml0ZSgmaXRtcCwgNCwgMSwgZmlsZSk7CisKKyAgIHN0bXAgPSBsZV9zaG9ydCgxKTsKKyAgIGZ3cml0ZSgmc3RtcCwgMiwgMSwgZmlsZSk7CisKKyAgIHN0bXAgPSBsZV9zaG9ydChjaGFubmVscyk7CisgICBmd3JpdGUoJnN0bXAsIDIsIDEsIGZpbGUpOworCisgICBpdG1wID0gbGVfaW50KHJhdGUpOworICAgZndyaXRlKCZpdG1wLCA0LCAxLCBmaWxlKTsKKworICAgaXRtcCA9IGxlX2ludChyYXRlKmNoYW5uZWxzKjIpOworICAgZndyaXRlKCZpdG1wLCA0LCAxLCBmaWxlKTsKKworICAgc3RtcCA9IGxlX3Nob3J0KDIqY2hhbm5lbHMpOworICAgZndyaXRlKCZzdG1wLCAyLCAxLCBmaWxlKTsKKworICAgc3RtcCA9IGxlX3Nob3J0KDE2KTsKKyAgIGZ3cml0ZSgmc3RtcCwgMiwgMSwgZmlsZSk7CisKKyAgIGZwcmludGYgKGZpbGUsICJkYXRhIik7CisKKyAgIGl0bXAgPSBsZV9pbnQoMHg3ZmZmZmZmZik7CisgICBmd3JpdGUoJml0bXAsIDQsIDEsIGZpbGUpOworCisKK30KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3NyYy93YXZfaW8uaCBiLzNyZHBhcnR5L3NwZWV4L3NyYy93YXZfaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTVmZTdhCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvc3JjL3dhdl9pby5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiBKZWFuLU1hcmMgVmFsaW4gCisgICBGaWxlOiB3YXZfaW8uaAorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgV0FWX0lPX0gKKyNkZWZpbmUgV0FWX0lPX0gKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAic3BlZXgvc3BlZXhfdHlwZXMuaCIKKwordW5zaWduZWQgc2hvcnQgYmVfc2hvcnQodW5zaWduZWQgc2hvcnQgcyk7Cit1bnNpZ25lZCBzaG9ydCBsZV9zaG9ydCh1bnNpZ25lZCBzaG9ydCBzKTsKK3NweF91aW50MzJfdCBsZV9pbnQoc3B4X3VpbnQzMl90IGkpOworCitpbnQgcmVhZF93YXZfaGVhZGVyKEZJTEUgKmZpbGUsIGludCAqcmF0ZSwgaW50ICpjaGFubmVscywgaW50ICpmb3JtYXQsIHNweF9pbnQzMl90ICpzaXplKTsKKwordm9pZCB3cml0ZV93YXZfaGVhZGVyKEZJTEUgKmZpbGUsIGludCByYXRlLCBpbnQgY2hhbm5lbHMsIGludCBmb3JtYXQsIGludCBzaXplKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9zcmMvd2F2ZV9vdXQuYyBiLzNyZHBhcnR5L3NwZWV4L3NyYy93YXZlX291dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YjU3MDMKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC9zcmMvd2F2ZV9vdXQuYwpAQCAtMCwwICsxLDIyMCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDAyLCBKb2huIEVkd2FyZHMKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisvKiBTZXQgVEFCUyA9IDQgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgZnVuY3Rpb246IFRvIHByb3ZpZGUgcGxheWJhY2sgb2YgMTYgYml0IFBDTSB3YXZlIGRhdGEgaW4gV2luMzIKKyAgICAgICAgICAgZW52aXJvbm1lbnRzIGZyb20gZGVjb2RlZCBjb21wcmVzc2VkIGZpbGVzLgorCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkIFdJTjMyIHx8IGRlZmluZWQgX1dJTjMyCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgIndhdmVfb3V0LmgiCisKKyNkZWZpbmUgTUFYV0FWRVNJWkUgICAgIDQyOTQ5NjcwNDBMVQorI2RlZmluZSBNQVhfV0FWRUJMT0NLUyAgICAzMgorCisvLyBUaGlzIGlzIG1vZGlmaWVkIGZvciBVU0VfV0lOX0FVRElPIC0gT05MWSAyMDAyLTAyLTI3CisKKworc3RhdGljIENSSVRJQ0FMX1NFQ1RJT04gIGNzOworc3RhdGljIEhXQVZFT1VUICAgICAgICAgIGRldiAgICAgICAgICAgICAgICAgICAgPSBOVUxMOworc3RhdGljIGludCAgICAgICAgICAgICAgIFNjaGVkdWxlZEJsb2NrcyAgICAgICAgPSAwOworc3RhdGljIGludCAgICAgICAgICAgICAgIFBsYXllZFdhdmVIZWFkZXJzQ291bnQgPSAwOyAgICAgICAgICAvLyBmcmVlIGluZGV4CitzdGF0aWMgV0FWRUhEUiogICAgICAgICAgUGxheWVkV2F2ZUhlYWRlcnMgW01BWF9XQVZFQkxPQ0tTXTsKKworc3RhdGljIGludAorQm94ICggY29uc3QgY2hhciogbXNnICkKK3sKKwlNZXNzYWdlQm94ICggTlVMTCwgbXNnLCAiICJWRVJTSU9OX1NUUklORyI6IEVycm9yIE1lc3NhZ2UgLiAuIC4iLCBNQl9PSyB8IE1CX0lDT05FWENMQU1BVElPTiApOworCXJldHVybiAtMTsKK30KKworCisvKgorICogIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGFscmVhZHkgcGxheWVkIFdBVkUgY2h1bmtzLiBGcmVlaW5nIGlzIGRvbmUgYnkgZnJlZV9tZW1vcnkoKSwKKyAqLworCitzdGF0aWMgdm9pZCBDQUxMQkFDSword2F2ZV9jYWxsYmFjayAoIEhXQVZFIGhXYXZlLCBVSU5UIHVNc2csIERXT1JEIGR3SW5zdGFuY2UsIERXT1JEIGR3UGFyYW0xLCBEV09SRCBkd1BhcmFtMiApCit7CisJaWYgKCB1TXNnID09IFdPTV9ET05FICkgeworCQlFbnRlckNyaXRpY2FsU2VjdGlvbiAoICZjcyApOworCQlQbGF5ZWRXYXZlSGVhZGVycyBbUGxheWVkV2F2ZUhlYWRlcnNDb3VudCsrXSA9IChXQVZFSERSKikgZHdQYXJhbTE7CisJCUxlYXZlQ3JpdGljYWxTZWN0aW9uICggJmNzICk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitmcmVlX21lbW9yeSAoIHZvaWQgKQoreworCVdBVkVIRFIqICB3aDsKKwlIR0xPQkFMICAgaGc7CisKKwlFbnRlckNyaXRpY2FsU2VjdGlvbiAoICZjcyApOworCXdoID0gUGxheWVkV2F2ZUhlYWRlcnMgWy0tUGxheWVkV2F2ZUhlYWRlcnNDb3VudF07CisJU2NoZWR1bGVkQmxvY2tzLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlY3JlYXNlIHRoZSBudW1iZXIgb2YgVVNFRCBibG9ja3MKKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbiAoICZjcyApOworCisJd2F2ZU91dFVucHJlcGFyZUhlYWRlciAoIGRldiwgd2gsIHNpemVvZiAoV0FWRUhEUikgKTsKKworCWhnID0gR2xvYmFsSGFuZGxlICggd2ggLT4gbHBEYXRhICk7ICAgICAgIC8vIERlYWxsb2NhdGUgdGhlIGJ1ZmZlciBtZW1vcnkKKwlHbG9iYWxVbmxvY2sgKGhnKTsKKwlHbG9iYWxGcmVlICAgKGhnKTsKKworCWhnID0gR2xvYmFsSGFuZGxlICggd2ggKTsgICAgICAgICAgICAgICAgIC8vIERlYWxsb2NhdGUgdGhlIGhlYWRlciBtZW1vcnkKKwlHbG9iYWxVbmxvY2sgKGhnKTsKKwlHbG9iYWxGcmVlICAgKGhnKTsKK30KKworCitJbnQKK1NldF9XSU5fUGFyYW1zICggRklMRV9UICAgZHVtbXlGaWxlICwKKyAgICAgICAgICAgICAgICAgTGRvdWJsZSAgU2FtcGxlRnJlcSwKKyAgICAgICAgICAgICAgICAgVWludCAgICAgQml0c1BlclNhbXBsZSwKKyAgICAgICAgICAgICAgICAgVWludCAgICAgQ2hhbm5lbHMgKQoreworCVdBVkVGT1JNQVRFWCAgb3V0Rm9ybWF0OworCVVJTlQgICAgICAgICAgZGV2aWNlSUQgPSBXQVZFX01BUFBFUjsKKworCSh2b2lkKSBkdW1teUZpbGU7CisKKwlpZiAoIHdhdmVPdXRHZXROdW1EZXZzICgpID09IDAgKQorCQlyZXR1cm4gQm94ICggIk5vIGF1ZGlvIGRldmljZSBwcmVzZW50LiIgKTsKKworCW91dEZvcm1hdC53Rm9ybWF0VGFnICAgICAgPSBXQVZFX0ZPUk1BVF9QQ007CisJb3V0Rm9ybWF0LndCaXRzUGVyU2FtcGxlICA9IEJpdHNQZXJTYW1wbGU7CisJb3V0Rm9ybWF0Lm5DaGFubmVscyAgICAgICA9IENoYW5uZWxzOworCW91dEZvcm1hdC5uU2FtcGxlc1BlclNlYyAgPSAodW5zaWduZWQgbG9uZykoU2FtcGxlRnJlcSArIDAuNSk7CisJb3V0Rm9ybWF0Lm5CbG9ja0FsaWduICAgICA9IChvdXRGb3JtYXQud0JpdHNQZXJTYW1wbGUgKyA3KSAvIDggKiBvdXRGb3JtYXQubkNoYW5uZWxzOworCW91dEZvcm1hdC5uQXZnQnl0ZXNQZXJTZWMgPSBvdXRGb3JtYXQublNhbXBsZXNQZXJTZWMgKiBvdXRGb3JtYXQubkJsb2NrQWxpZ247CisKKwlzd2l0Y2ggKCB3YXZlT3V0T3BlbiAoICZkZXYsIGRldmljZUlELCAmb3V0Rm9ybWF0LCAoRFdPUkQpd2F2ZV9jYWxsYmFjaywgMCwgQ0FMTEJBQ0tfRlVOQ1RJT04gKSApCisJeworCQljYXNlIE1NU1lTRVJSX0FMTE9DQVRFRDogICByZXR1cm4gQm94ICggIkRldmljZSBpcyBhbHJlYWR5IG9wZW4uIiApOworCQljYXNlIE1NU1lTRVJSX0JBRERFVklDRUlEOiByZXR1cm4gQm94ICggIlRoZSBzcGVjaWZpZWQgZGV2aWNlIGlzIG91dCBvZiByYW5nZS4iICk7CisJCWNhc2UgTU1TWVNFUlJfTk9EUklWRVI6ICAgIHJldHVybiBCb3ggKCAiVGhlcmUgaXMgbm8gYXVkaW8gZHJpdmVyIGluIHRoaXMgc3lzdGVtLiIgKTsKKwkJY2FzZSBNTVNZU0VSUl9OT01FTTogICAgICAgcmV0dXJuIEJveCAoICJVbmFibGUgdG8gYWxsb2NhdGUgc291bmQgbWVtb3J5LiIgKTsKKwkJY2FzZSBXQVZFUlJfQkFERk9STUFUOiAgICAgcmV0dXJuIEJveCAoICJUaGlzIGF1ZGlvIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiIgKTsKKwkJY2FzZSBXQVZFUlJfU1lOQzogICAgICAgICAgcmV0dXJuIEJveCAoICJUaGUgZGV2aWNlIGlzIHN5bmNocm9ub3VzLiIgKTsKKwkJZGVmYXVsdDogICAgICAgICAgICAgICAgICAgcmV0dXJuIEJveCAoICJVbmtub3duIG1lZGlhIGVycm9yLiIgKTsKKwkJY2FzZSBNTVNZU0VSUl9OT0VSUk9SOiAgICAgYnJlYWs7CisJfQorCisJd2F2ZU91dFJlc2V0ICggZGV2ICk7CisJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbiAoICZjcyApOworCVNldFByaW9yaXR5Q2xhc3MgKCBHZXRDdXJyZW50UHJvY2VzcyAoKSwgSElHSF9QUklPUklUWV9DTEFTUyApOworCXJldHVybiAwOworfQorCisKK2ludAorV0lOX1BsYXlfU2FtcGxlcyAoIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBsZW4gKQoreworCUhHTE9CQUwgICAgaGc7CisJSEdMT0JBTCAgICBoZzI7CisJTFBXQVZFSERSICB3aDsKKwl2b2lkKiAgICAgIGFsbG9jcHRyOworCisJZG8geworCQl3aGlsZSAoIFBsYXllZFdhdmVIZWFkZXJzQ291bnQgPiAwICkgICAgICAgICAgICAgICAgLy8gZnJlZSB1c2VkIGJsb2NrcyAuLi4KKwkJCWZyZWVfbWVtb3J5ICgpOworCisJCWlmICggU2NoZWR1bGVkQmxvY2tzIDwgc2l6ZW9mKFBsYXllZFdhdmVIZWFkZXJzKS9zaXplb2YoKlBsYXllZFdhdmVIZWFkZXJzKSApIC8vIHdhaXQgZm9yIGEgZnJlZSBibG9jayAuLi4KKwkJCWJyZWFrOworCQlTbGVlcCAoMjYpOworCX0gd2hpbGUgKDEpOworCisJaWYgKCAoaGcyID0gR2xvYmFsQWxsb2MgKCBHTUVNX01PVkVBQkxFLCBsZW4gKSkgPT0gTlVMTCApICAgLy8gYWxsb2NhdGUgc29tZSBtZW1vcnkgZm9yIGEgY29weSBvZiB0aGUgYnVmZmVyCisJCXJldHVybiBCb3ggKCAiR2xvYmFsQWxsb2MgZmFpbGVkLiIgKTsKKworCWFsbG9jcHRyID0gR2xvYmFsTG9jayAoaGcyKTsKKwlDb3B5TWVtb3J5ICggYWxsb2NwdHIsIGRhdGEsIGxlbiApOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIZXJlIHdlIGNhbiBjYWxsIGFueSBtb2RpZmljYXRpb24gb3V0cHV0IGZ1bmN0aW9ucyB3ZSB3YW50Li4uLgorCisJaWYgKCAoaGcgPSBHbG9iYWxBbGxvYyAoR01FTV9NT1ZFQUJMRSB8IEdNRU1fWkVST0lOSVQsIHNpemVvZiAoV0FWRUhEUikpKSA9PSBOVUxMICkgLy8gbm93IG1ha2UgYSBoZWFkZXIgYW5kIFdSSVRFIElUIQorCQlyZXR1cm4gLTE7CisKKwl3aCAgICAgICAgICAgICAgICAgICA9IEdsb2JhbExvY2sgKGhnKTsKKwl3aCAtPiBkd0J1ZmZlckxlbmd0aCA9IGxlbjsKKwl3aCAtPiBscERhdGEgICAgICAgICA9IGFsbG9jcHRyOworCisJaWYgKCB3YXZlT3V0UHJlcGFyZUhlYWRlciAoIGRldiwgd2gsIHNpemVvZiAoV0FWRUhEUikpICE9IE1NU1lTRVJSX05PRVJST1IgKSB7CisJCUdsb2JhbFVubG9jayAoaGcpOworCQlHbG9iYWxGcmVlICAgKGhnKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICggd2F2ZU91dFdyaXRlICggZGV2LCB3aCwgc2l6ZW9mIChXQVZFSERSKSkgIT0gTU1TWVNFUlJfTk9FUlJPUiApIHsKKwkJR2xvYmFsVW5sb2NrIChoZyk7CisJCUdsb2JhbEZyZWUgICAoaGcpOworCQlyZXR1cm4gLTE7CisJfQorCisJRW50ZXJDcml0aWNhbFNlY3Rpb24gKCAmY3MgKTsKKwlTY2hlZHVsZWRCbG9ja3MrKzsKKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbiAoICZjcyApOworCisJcmV0dXJuIGxlbjsKK30KKworCitpbnQKK1dJTl9BdWRpb19jbG9zZSAoIHZvaWQgKQoreworCWlmICggZGV2ICE9IE5VTEwgKSB7CisKKwkJd2hpbGUgKCBTY2hlZHVsZWRCbG9ja3MgPiAwICkgeworCQkJU2xlZXAgKFNjaGVkdWxlZEJsb2Nrcyk7CisJCQl3aGlsZSAoIFBsYXllZFdhdmVIZWFkZXJzQ291bnQgPiAwICkgICAgICAgICAvLyBmcmVlIHVzZWQgYmxvY2tzIC4uLgorCQkJCWZyZWVfbWVtb3J5ICgpOworCQl9CisKKwkJd2F2ZU91dFJlc2V0IChkZXYpOyAgICAgIC8vIHJlc2V0IHRoZSBkZXZpY2UKKwkJd2F2ZU91dENsb3NlIChkZXYpOyAgICAgIC8vIGNsb3NlIHRoZSBkZXZpY2UKKwkJZGV2ID0gTlVMTDsKKwl9CisKKwlEZWxldGVDcml0aWNhbFNlY3Rpb24gKCAmY3MgKTsKKwlTY2hlZHVsZWRCbG9ja3MgPSAwOworCXJldHVybiAwOworfQorCisjZW5kaWYKKworLyogZW5kIG9mIHdhdmVfb3V0LmMgKi8KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3NyYy93YXZlX291dC5oIGIvM3JkcGFydHkvc3BlZXgvc3JjL3dhdmVfb3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhYTNjMQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3NyYy93YXZlX291dC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qIENvcHlyaWdodCAoYykgMjAwMiwgSm9obiBFZHdhcmRzCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworLy8gICAgV0FWRV9PVVQuSCAtIE5lY2Vzc2FyeSBzdHVmZiBmb3IgV0lOX0FVRElPCisKKyNpZm5kZWYgV0FWRV9PVVRfSAorI2RlZmluZSBXQVZFX09VVF9ICisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBfX01JTkdXMzJfXworI2luY2x1ZGUgPG1tc3lzdGVtLmg+CisjZW5kaWYKKworI2RlZmluZSBWRVJTSU9OX1NUUklORyAiXG4gMC43LjBcbiIKKworI2RlZmluZSBDZGVjbCAgICAgICAgICAgICAgIF9fY2RlY2wKKyNkZWZpbmUgX19hdHRyaWJ1dGVfXyh4KQorI2RlZmluZSBzbGVlcChfX3NlYykgICAgICAgIFNsZWVwICgoX19zZWMpICogMTAwMCkKKyNkZWZpbmUgaW5saW5lICAgICAgICAgICAgICBfX2lubGluZQorI2RlZmluZSByZXN0cmljdAorCisvLy8vIGNvbnN0YW50cyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIENEX1NBTVBMRV9GUkVRICAgICAgICAgNDQuMWUzCisjZGVmaW5lIFNBTVBMRV9TSVpFICAgICAgICAgICAgMTYKKyNkZWZpbmUgU0FNUExFX1NJWkVfU1RSSU5HICAgICAiIgorI2RlZmluZSBXSU5BVURJT19GRCAgICAgICAgICAgICgoRklMRV9UKS0xMjgpCisjZGVmaW5lIEZJTEVfVCAgICAgICAgICAgICAgICAgRklMRSoKKyNkZWZpbmUgSU5WQUxJRF9GSUxFREVTQyAgICAgICBOVUxMCisKKy8vLy8gU2ltcGxlIHR5cGVzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3R5cGVkZWYgc2lnbmVkICAgaW50ICAgICAgICBJbnQ7ICAgICAgICAvLyBhdCBsZWFzdCAtMzI3NjcuLi4rMzI3NjcsIGZhc3QgdHlwZQordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgIFVpbnQ7ICAgICAgIC8vIGF0IGxlYXN0IDAuLi42NTUzNSwgZmFzdCB0eXBlCit0eXBlZGVmIGxvbmcgZG91YmxlICAgICAgICAgTGRvdWJsZTsgICAgLy8gbW9zdCBleGFjdCBmbG9hdGluZyBwb2ludCBmb3JtYXQKKworLy8vLyBwcm9jZWR1cmVzL2Z1bmN0aW9ucyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIHdhdmVfb3V0LmMKK0ludCAgICAgICAgU2V0X1dJTl9QYXJhbXMgICAgICAgICAgICAgKCBGSUxFX1QgZHVtbXlGaWxlICwgTGRvdWJsZSBTYW1wbGVGcmVxLCBVaW50IEJpdHNQZXJTYW1wbGUsIFVpbnQgQ2hhbm5lbHMpOworaW50ICAgICAgICBXSU5fUGxheV9TYW1wbGVzICAgICAgICAgICAoIGNvbnN0IHZvaWQqIGJ1ZmYsIHNpemVfdCBsZW4gKTsKK2ludCAgICAgICAgV0lOX0F1ZGlvX2Nsb3NlICAgICAgICAgICAgKCB2b2lkICk7CisKKyNlbmRpZiAvKiBXQVZFX09VVF9IICovCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC9zeW1iaWFuL01ha2VmaWxlLmFtIGIvM3JkcGFydHkvc3BlZXgvc3ltYmlhbi9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2RhZjI0Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvc3ltYmlhbi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDYgQEAKKyMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbi4gLSotTWFrZWZpbGUtKi0KKworIyBEaXNhYmxlIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nIGlmIHVzaW5nIG90aGVyIHRvb2xzIHRoYW4gZ2NjIGFuZCBnbWFrZQorI0FVVE9NQUtFX09QVElPTlMgPSBuby1kZXBlbmRlbmNpZXMKKworRVhUUkFfRElTVCA9IGJsZC5pbmYgIGNvbmZpZy5oICBzcGVleC5tbXAKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3N5bWJpYW4vYmxkLmluZiBiLzNyZHBhcnR5L3NwZWV4L3N5bWJpYW4vYmxkLmluZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDNhMzMzCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvc3ltYmlhbi9ibGQuaW5mCkBAIC0wLDAgKzEsNDkgQEAKKy8qDQorICAgQ29weXJpZ2h0IChDKSAyMDAzIENvbW1vbndlYWx0aCBTY2llbnRpZmljIGFuZCBJbmR1c3RyaWFsIFJlc2VhcmNoDQorICAgT3JnYW5pc2F0aW9uIChDU0lSTykgQXVzdHJhbGlhDQorDQorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQorICAgYXJlIG1ldDoNCisNCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQ1NJUk8gQXVzdHJhbGlhIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMNCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEENCisgICBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT1JHQU5JU0FUSU9OIE9SDQorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsDQorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLA0KKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUg0KKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YNCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORw0KKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyovDQorDQorUFJKX0VYUE9SVFMNCisNCisuLlxpbmNsdWRlXHNwZWV4XHNwZWV4X2JpdHMuaCAgICAgICAgICBcZXBvYzMyXGluY2x1ZGVcc3BlZXhcc3BlZXhfYml0cy5oDQorLi5caW5jbHVkZVxzcGVleFxzcGVleF9jYWxsYmFja3MuaCAgICAgXGVwb2MzMlxpbmNsdWRlXHNwZWV4XHNwZWV4X2NhbGxiYWNrcy5oDQorLi5caW5jbHVkZVxzcGVleFxzcGVleF9jb25maWdfdHlwZXMuaCAgXGVwb2MzMlxpbmNsdWRlXHNwZWV4XHNwZWV4X2NvbmZpZ190eXBlcy5oDQorLi5caW5jbHVkZVxzcGVleFxzcGVleF9lY2hvLmggICAgICAgICAgXGVwb2MzMlxpbmNsdWRlXHNwZWV4XHNwZWV4X2VjaG8uaA0KKy4uXGluY2x1ZGVcc3BlZXhcc3BlZXguaCAgICAgICAgICAgICAgIFxlcG9jMzJcaW5jbHVkZVxzcGVleFxzcGVleC5oDQorLi5caW5jbHVkZVxzcGVleFxzcGVleF9oZWFkZXIuaCAgICAgICAgXGVwb2MzMlxpbmNsdWRlXHNwZWV4XHNwZWV4X2hlYWRlci5oDQorLi5caW5jbHVkZVxzcGVleFxzcGVleF9qaXR0ZXIuaCAgICAgICAgXGVwb2MzMlxpbmNsdWRlXHNwZWV4XHNwZWV4X2ppdHRlci5oDQorLi5caW5jbHVkZVxzcGVleFxzcGVleF9wcmVwcm9jZXNzLmggICAgXGVwb2MzMlxpbmNsdWRlXHNwZWV4XHNwZWV4X3ByZXByb2Nlc3MuaA0KKy4uXGluY2x1ZGVcc3BlZXhcc3BlZXhfc3RlcmVvLmggICAgICAgIFxlcG9jMzJcaW5jbHVkZVxzcGVleFxzcGVleF9zdGVyZW8uaA0KKy4uXGluY2x1ZGVcc3BlZXhcc3BlZXhfdHlwZXMuaCAgICAgICAgIFxlcG9jMzJcaW5jbHVkZVxzcGVleFxzcGVleF90eXBlcy5oDQorDQorDQorUFJKX01NUEZJTEVTDQorDQorc3BlZXgubW1wDQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvc3ltYmlhbi9jb25maWcuaCBiLzNyZHBhcnR5L3NwZWV4L3N5bWJpYW4vY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjYTA4YgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3N5bWJpYW4vY29uZmlnLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAgIENvcHlyaWdodCAoQykgMjAwMyBDb21tb253ZWFsdGggU2NpZW50aWZpYyBhbmQgSW5kdXN0cmlhbCBSZXNlYXJjaAorICAgT3JnYW5pc2F0aW9uIChDU0lSTykgQXVzdHJhbGlhCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBDU0lSTyBBdXN0cmFsaWEgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICAgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9SR0FOSVNBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBDT05GSUdfSAorI2RlZmluZSBDT05GSUdfSAorCisvKiBBbiBpbmxpbmUgbWFjcm8gaXMgcmVxdWlyZWQgZm9yIHVzZSBvZiB0aGUgaW5saW5lIGtleXdvcmQgYXMgbm90IGFsbCBDIGNvbXBpbGVycyBzdXBwb3J0ICovCisvKiBpbmxpbmUuICBJdCBpcyBvZmZpY2lhbGx5IEM5OSBhbmQgQysrIG9ubHkgKi8KKworI2lmZGVmIF9fV0lOU19fCisKKyNkZWZpbmUgaW5saW5lIF9faW5saW5lCisKKy8qIERpc2FibGUgc29tZSBwb2ludGxlc3Mvc3R1cGlkIHdhcm5pbmdzICovCisKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTAwKSAvKiB1bnJlZmVyZW5jZWQgZm9ybWFsIHBhcmFtZXRlciAqLworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQxMjcpIC8qIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgY29uc3RhbnQgKi8KKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MzA1KSAvKiB0cnVuY2F0aW9uIGZyb20gJy4uLicgdG8gJy4uLicgKi8KKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjQ0KSAvKiBjb252ZXJzaW9uIGZyb20gJy4uLicgdG8gJy4uLicsIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YSAqLworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpIC8qIGxvY2FsIHZhcmlhYmxlIG1heSBiZSBiZSB1c2VkIHdpdGhvdXQgaGF2aW5nIGJlZW4gaW5pdGlhbGl6ZWQgKi8KKworI2VuZGlmIC8qICEgX19XSU5TX18gKi8KKworLyogVXNlIG9ubHkgZml4ZWQgcG9pbnQgYXJpdGhtZXRpYyAqLworCisjZGVmaW5lIEZJWEVEX1BPSU5UIDEKKworI2VuZGlmIC8qICEgQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3N5bWJpYW4vc3BlZXgubW1wIGIvM3JkcGFydHkvc3BlZXgvc3ltYmlhbi9zcGVleC5tbXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdiMDk2ZQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3N5bWJpYW4vc3BlZXgubW1wCkBAIC0wLDAgKzEsNDUgQEAKKy8qDQorICAgQ29weXJpZ2h0IChDKSAyMDAzIENvbW1vbndlYWx0aCBTY2llbnRpZmljIGFuZCBJbmR1c3RyaWFsIFJlc2VhcmNoDQorICAgT3JnYW5pc2F0aW9uIChDU0lSTykgQXVzdHJhbGlhDQorDQorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQorICAgYXJlIG1ldDoNCisNCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQ1NJUk8gQXVzdHJhbGlhIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMNCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEENCisgICBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT1JHQU5JU0FUSU9OIE9SDQorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsDQorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLA0KKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUg0KKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YNCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORw0KKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyovDQorDQorVEFSR0VUICAgICAgICBzcGVleC5saWINCitUQVJHRVRUWVBFICAgIGxpYg0KK1VJRCAgICAgICAgICAgMA0KK01BQ1JPICAgICAgICAgSEFWRV9DT05GSUdfSA0KK1NPVVJDRVBBVEggICAgLi5cbGlic3BlZXgNCitTT1VSQ0UgICAgICAgIGJpdHMuYyBjYl9zZWFyY2guYyBleGNfNV82NF90YWJsZS5jIGV4Y181XzI1Nl90YWJsZS5jIGV4Y184XzEyOF90YWJsZS5jDQorU09VUkNFICAgICAgICBleGNfMTBfMTZfdGFibGUuYyBleGNfMTBfMzJfdGFibGUuYyBleGNfMjBfMzJfdGFibGUuYyBmZnR3cmFwLmMga2lzc19mZnQuYyBraXNzX2ZmdHIuYyBmaWx0ZXJiYW5rLmMgZmlsdGVycy5jIGdhaW5fdGFibGUuYw0KK1NPVVJDRSAgICAgICAgZ2Fpbl90YWJsZV9sYnIuYyBoZXhjXzEwXzMyX3RhYmxlLmMgaGV4Y190YWJsZS5jIGhpZ2hfbHNwX3RhYmxlcy5jIGppdHRlci5jDQorU09VUkNFICAgICAgICBsYnJfNDhrX3RhYmxlcy5jIGxwYy5jIGxzcC5jIGxzcF90YWJsZXNfbmIuYyBsdHAuYyBtYXRoX2FwcHJveC5jIG1kZi5jIG1pc2MuYw0KK1NPVVJDRSAgICAgICAgbW9kZXMuYyBuYl9jZWxwLmMgcHJlcHJvY2Vzcy5jIHF1YW50X2xzcC5jIHNiX2NlbHAuYyBzbWFsbGZ0LmMNCitTT1VSQ0UgICAgICAgIHNwZWV4LmMgc3BlZXhfY2FsbGJhY2tzLmMgc3BlZXhfaGVhZGVyLmMgc3RlcmVvLmMgdmJyLmMgdnEuYyB3aW5kb3cuYw0KK1VTRVJJTkNMVURFICAgLiAuLlxpbmNsdWRlXHNwZWV4DQorU1lTVEVNSU5DTFVERSBcZXBvYzMyXGluY2x1ZGUgXGVwb2MzMlxpbmNsdWRlXGxpYmMgLi5caW5jbHVkZQ0KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3RpL01ha2VmaWxlLmFtIGIvM3JkcGFydHkvc3BlZXgvdGkvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIzYmM2OAotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3RpL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsOSBAQAorIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluLiAtKi1NYWtlZmlsZS0qLQorCisjIERpc2FibGUgYXV0b21hdGljIGRlcGVuZGVuY3kgdHJhY2tpbmcgaWYgdXNpbmcgb3RoZXIgdG9vbHMgdGhhbiBnY2MgYW5kIGdtYWtlCisjQVVUT01BS0VfT1BUSU9OUyA9IG5vLWRlcGVuZGVuY2llcworCitTVUJESVJTID0gc3BlZXhfQzU0X3Rlc3Qgc3BlZXhfQzU1X3Rlc3Qgc3BlZXhfQzY0X3Rlc3QKKworRVhUUkFfRElTVCA9IGNvbmZpZy5oIHRlc3RlbmMtVEktQzV4LmMgdXNlcl9taXNjLmggdGVzdGVuYy1USS1DNjR4LmMKKwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvdGkvY29uZmlnLmggYi8zcmRwYXJ0eS9zcGVleC90aS9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDZkNjViCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvdGkvY29uZmlnLmgKQEAgLTAsMCArMSw3MyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA1IFBzaSBTeXN0ZW1zLCBJbmMuCisgICBGaWxlOiBjb25maWcuaAorICAgTWFpbiBTcGVleCBvcHRpb24gaW5jbHVkZSBmaWxlIGZvciBUSSBDNjR4eCwgQzU0eHggYW5kIEM1NXh4IHByb2Nlc3NvcnMNCisgICBmb3IgdXNlIHdpdGggVEkgQ29kZSBDb21wb3NlciAoVE0pIERTUCBkZXZlbG9wbWVudCB0b29scy4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworDQorI2RlZmluZSBGSVhFRF9QT0lOVA0KKyNkZWZpbmUgRlJBTUVfU0laRSAxNjANCisjZGVmaW5lIERJU0FCTEVfV0lERUJBTkQNCisNCisvKiBBbGxvdyBmb3IgMiAyMG1zIG5hcnJvd2JhbmQgYmxvY2tzIHBlciBmcmFtZSwgcGx1cyBhIGNvdXBsZSBvZiBieXRlcyAqLw0KKyNkZWZpbmUgTUFYX0NIQVJTX1BFUl9GUkFNRSAoNDIvQllURVNfUEVSX0NIQVIpDQorDQorLyogZm9yIGRlYnVnICovDQorI3VuZGVmIERFQ09ERV9PTkxZDQorDQorLyogRUlUSEVSICAgIEFsbG9jYXRlIGZyb20gZml4ZWQgYXJyYXkgKEMgaGVhcCBub3QgdXNlZCkgKi8NCisvKiAgICAgICAgICAgRW5hYmxlIFZFUkJPU0VfQUxMT0MgdG8gc2VlIGhvdyBtdWNoIGlzIHVzZWQgKi8NCisjZGVmaW5lIE1BTlVBTF9BTExPQw0KKyNkZWZpbmUgVVNFUl9NSVNDDQorI2RlZmluZSBWRVJCT1NFX0FMTE9DDQorLyogT1IgICAgICAgIFVzZSBDQUxMT0MgKGhlYXAgc2l6ZSBtdXN0IGJlIGluY3JlYXNlZCBpbiBsaW5rZXIgY29tbWFuZCBmaWxlKSAqLw0KKy8vI3VuZGVmIE1BTlVBTF9BTExPQw0KKy8vI3VuZGVmIFVTRVJfTUlTQw0KKw0KKyNpZiBkZWZpbmVkIChDT05GSUdfVElfQzU0WCkgfHwgZGVmaW5lZCAoQ09ORklHX1RJX0M1NVgpIA0KKy8vI2RlZmluZSBQUkVDSVNJT04xNg0KKw0KKy8vIFRoZXNlIHZhbHVlcyBkZXRlcm1pbmVkIGJ5IGFuYWx5c2lzIGZvciA4a2JwcyBuYXJyb3diYW5kDQorI2RlZmluZSBTUEVFWEVOQ19QRVJTSVNUX1NUQUNLX1NJWkUgNTAwMA0KKyNkZWZpbmUgU1BFRVhFTkNfU0NSQVRDSF9TVEFDS19TSVpFIDMwMDANCisjZGVmaW5lIFNQRUVYREVDX1BFUlNJU1RfU1RBQ0tfU0laRSAyNTAwDQorI2RlZmluZSBTUEVFWERFQ19TQ1JBVENIX1NUQUNLX1NJWkUgMTAwMA0KKyNlbHNlIC8qIEM2WCAqLw0KKyNkZWZpbmUgTk9fTE9OR0xPTkcNCisNCisjZGVmaW5lIFNQRUVYRU5DX1BFUlNJU1RfU1RBQ0tfU0laRSAxMDAwMA0KKyNkZWZpbmUgU1BFRVhFTkNfU0NSQVRDSF9TVEFDS19TSVpFIDYwMDANCisjZGVmaW5lIFNQRUVYREVDX1BFUlNJU1RfU1RBQ0tfU0laRSA1MDAwDQorI2RlZmluZSBTUEVFWERFQ19TQ1JBVENIX1NUQUNLX1NJWkUgMjAwMA0KKyNlbmRpZg0KKyNkZWZpbmUgU1BFRVhfUEVSU0lTVF9TVEFDS19TSVpFIChTUEVFWEVOQ19QRVJTSVNUX1NUQUNLX1NJWkUgKyBTUEVFWERFQ19QRVJTSVNUX1NUQUNLX1NJWkUpDQorI2RlZmluZSBTUEVFWF9TQ1JBVENIX1NUQUNLX1NJWkUgU1BFRVhFTkNfU0NSQVRDSF9TVEFDS19TSVpFDQorI2RlZmluZSBOQl9FTkNfU1RBQ0sgU1BFRVhFTkNfU0NSQVRDSF9TVEFDS19TSVpFDQorI2RlZmluZSBOQl9ERUNfU1RBQ0sgU1BFRVhERUNfU0NSQVRDSF9TVEFDS19TSVpFDQorDQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvdGkvc3BlZXhfQzU0X3Rlc3QvTWFrZWZpbGUuYW0gYi8zcmRwYXJ0eS9zcGVleC90aS9zcGVleF9DNTRfdGVzdC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2IxMGJjCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvdGkvc3BlZXhfQzU0X3Rlc3QvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw4IEBACisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4uIC0qLU1ha2VmaWxlLSotCisKKyMgRGlzYWJsZSBhdXRvbWF0aWMgZGVwZW5kZW5jeSB0cmFja2luZyBpZiB1c2luZyBvdGhlciB0b29scyB0aGFuIGdjYyBhbmQgZ21ha2UKKyNBVVRPTUFLRV9PUFRJT05TID0gbm8tZGVwZW5kZW5jaWVzCisKK0VYVFJBX0RJU1QgPSBzcGVleF9DNTRfdGVzdC5jbWQgIHNwZWV4X0M1NF90ZXN0LnBqdAorCisKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3RpL3NwZWV4X0M1NF90ZXN0L3NwZWV4X0M1NF90ZXN0LmNtZCBiLzNyZHBhcnR5L3NwZWV4L3RpL3NwZWV4X0M1NF90ZXN0L3NwZWV4X0M1NF90ZXN0LmNtZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGQ0YzE4Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvdGkvc3BlZXhfQzU0X3Rlc3Qvc3BlZXhfQzU0X3Rlc3QuY21kCkBAIC0wLDAgKzEsNzEgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNSBQc2kgU3lzdGVtcywgSW5jLgorICAgRmlsZTogc3BlZXhfQzU0X3Rlc3QuY21kCisgICBMaW5rZXIgY29tbWFuZCBmaWxlIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gZm9yIFRJIFRNUzMyMFZDNTQxNiBwcm9jZXNzb3INCisgICBmb3IgdXNlIHdpdGggVEkgQ29kZSBDb21wb3NlciAoVE0pIERTUCBkZXZlbG9wbWVudCB0b29scy4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworDQorLWMNCistc3RhY2sgMHgyMDAwDQorLWhlYXAgMHgxMDAwCS8qIElmIHByaXZhdGUgbWVtb3J5IGFsbG9jYXRpb24gaXMgdXNlZCBmb3IgU3BlZXggKi8NCisvKi1oZWFwIDB4NjAwMAkvKiBJZiBjYWxsb2MgaXMgdXNlZCBmb3IgU3BlZXggKi8NCistbHJ0c19leHQubGliDQorDQorTUVNT1JZDQorew0KKy8qICAgUEFHRSAwOiAgIFBfREFSQU0wMzogIG9yaWdpbiA9IDB4ODAsICAgICAgICAgIGxlbiA9IDB4N2YwMCovDQorICAgUEFHRSAwOiAgIFBfREFSQU0wMzogIG9yaWdpbiA9IDB4NTAwMCwgICAgICAgICAgbGVuID0gMHgyZjgwDQorICAgUEFHRSAwOiAgIFZFQ1Q6ICAgICAgIG9yaWdpbiA9IDB4N2Y4MCwgICAgICAgIGxlbiA9IDB4ODANCisgICBQQUdFIDA6ICAgUF9EQVJBTTQ3OiAgb3JpZ2luID0gMHgxODAwMCwgICAgICAgbGVuID0gMHg4MDAwDQorICAgUEFHRSAwOiAgIFNBUkFNMDM6ICAgIG9yaWdpbiA9IDB4MjgwMDAsICAgICAgIGxlbiA9IDB4ODAwMA0KKyAgIFBBR0UgMDogICBTQVJBTTQ3OiAgICBvcmlnaW4gPSAweDM4MDAwLCAgICAgICBsZW4gPSAweDgwMDANCisNCisgICBQQUdFIDE6ICAgVVNFUlJFR1M6ICAgb3JpZ2luID0gMHg2MCwgICAgICAgICAgbGVuID0gMHgxYQ0KKyAgIFBBR0UgMTogICBCSU9TUkVHUzogICBvcmlnaW4gPSAweDdjLCAgICAgICAgICBsZW4gPSAweDQNCisgICBQQUdFIDE6ICAgQ1NMUkVHUzogICAgb3JpZ2luID0gMHg3YSwgICAgICAgICAgbGVuID0gMHgyDQorICAgICAgICAgICAgRF9EQVJBTTAzOiAgb3JpZ2luID0gMHg4MCwgICAgICAgICAgbGVuID0gMHg0ZjgwDQorICAgICAgICAgICAgRF9EQVJBTTQ3OiAgb3JpZ2luID0gMHg4MDAwLCAgICAgICAgbGVuID0gMHg4MDAwDQorfQ0KKw0KK1NFQ1RJT05TDQorew0KKyAgICAudmVjdG9yczoge30gPiBWRUNUIFBBR0UgMA0KKyAgICAuYm9vdG1lbToge3J0c19leHQubGliICgudGV4dCl9ID4gUF9EQVJBTTAzIFBBR0UgMCANCisvKiAgICAuYm9vdG1lbToge30gPiBQX0RBUkFNMDMgUEFHRSAwICovDQorICAgIC50ZXh0OiAgICB7fSA+IFNBUkFNMDMgUEFHRSAwDQorICAgIC5jaW5pdDogICB7fSA+IFNBUkFNMDMgUEFHRSAwDQorICAgIC5zd2l0Y2g6ICB7fSA+IFNBUkFNMDMgUEFHRSAwDQorICAgIC5ic3M6ICAgICB7fSA+IERfREFSQU0wMyB8IERfREFSQU00NyBQQUdFIDENCisgICAgLmZhcjogICAgIHt9ID4gRF9EQVJBTTAzIHwgRF9EQVJBTTQ3ICBQQUdFIDENCisgICAgLmNvbnN0OiAgIHt9ID4gRF9EQVJBTTAzIHwgRF9EQVJBTTQ3ICBQQUdFIDENCisgICAgLnN5c21lbTogIHt9ID4gRF9EQVJBTTQ3IFBBR0UgMQ0KKyAgICAuY2lvOiAgICAge30gPiBEX0RBUkFNMDMgfCBEX0RBUkFNNDcgIFBBR0UgMQ0KKyAgICAuc3RhY2s6ICAge30gPiBEX0RBUkFNMDMgfCBEX0RBUkFNNDcgIFBBR0UgMQ0KKyAgICAubXloZWFwOiAgIHt9ID4gRF9EQVJBTTQ3IFBBR0UgMQ0KK30NCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC90aS9zcGVleF9DNTRfdGVzdC9zcGVleF9DNTRfdGVzdC5wanQgYi8zcmRwYXJ0eS9zcGVleC90aS9zcGVleF9DNTRfdGVzdC9zcGVleF9DNTRfdGVzdC5wanQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdmNjQ2ZAotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3RpL3NwZWV4X0M1NF90ZXN0L3NwZWV4X0M1NF90ZXN0LnBqdApAQCAtMCwwICsxLDYxIEBACis7IENvZGUgQ29tcG9zZXIgUHJvamVjdCBGaWxlLCBWZXJzaW9uIDIuMCAoZG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhpcyBsaW5lKQ0KKw0KK1tQcm9qZWN0IFNldHRpbmdzXQ0KK1Byb2plY3REaXI9IkM6XHNwZWV4XzExMjM0XHRpXHNwZWV4X0M1NF90ZXN0XCINCitQcm9qZWN0VHlwZT1FeGVjdXRhYmxlDQorQ1BVRmFtaWx5PVRNUzMyMEM1NFhYDQorVG9vbD0iQ29tcGlsZXIiDQorVG9vbD0iQ3VzdG9tQnVpbGRlciINCitUb29sPSJEc3BCaW9zQnVpbGRlciINCitUb29sPSJMaW5rZXIiDQorQ29uZmlnPSJEZWJ1ZyINCitDb25maWc9IlJlbGVhc2UiDQorDQorW1NvdXJjZSBGaWxlc10NCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XGJpdHMuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XGNiX3NlYXJjaC5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcZXhjXzEwXzE2X3RhYmxlLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxleGNfMTBfMzJfdGFibGUuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XGV4Y18yMF8zMl90YWJsZS5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcZXhjXzVfMjU2X3RhYmxlLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxleGNfNV82NF90YWJsZS5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcZXhjXzhfMTI4X3RhYmxlLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxmaWx0ZXJzLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxnYWluX3RhYmxlLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxnYWluX3RhYmxlX2xici5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcbHBjLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxsc3AuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XGxzcF90YWJsZXNfbmIuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XGx0cC5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcbWF0aF9hcHByb3guYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XG1pc2MuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XG1vZGVzLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxuYl9jZWxwLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxxdWFudF9sc3AuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XHNiX2NlbHAuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XHNwZWV4LmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxzcGVleF9jYWxsYmFja3MuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XHZici5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcdnEuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XHdpbmRvdy5jIg0KK1NvdXJjZT0iLi5cLi5cdGlcdGVzdGVuYy1USS1DNXguYyINCitTb3VyY2U9InNwZWV4X0M1NF90ZXN0LmNtZCINCisNCitbIkNvbXBpbGVyIiBTZXR0aW5nczogIkRlYnVnIl0NCitPcHRpb25zPS1nIC1xIC1vMyAtZnIiLi5cdGlcc3BlZXhfQzU0X3Rlc3RcRGVidWciIC1pIi4uXHRpIiAtaSIuLlxpbmNsdWRlIiAtZCJfREVCVUciIC1kIkNPTkZJR19USV9DNTRYIiAtZCJIQVZFX0NPTkZJR19IIiAtZCJOT19MT05HTE9ORyIgLW1mIC1tcw0KKw0KK1siQ29tcGlsZXIiIFNldHRpbmdzOiAiUmVsZWFzZSJdDQorT3B0aW9ucz0tcSAtbzIgLWZyIi4uXHRpXHNwZWV4X0M1NF90ZXN0XFJlbGVhc2UiIC1pIi4uXHRpIiAtaSIuLlxpbmNsdWRlIiAtZCJDT05GSUdfVElfQzU0WCIgLWQiSEFWRV9DT05GSUdfSCIgLWQiTk9fTE9OR0xPTkciIC1tZiAtbXMNCisNCitbIkRzcEJpb3NCdWlsZGVyIiBTZXR0aW5nczogIkRlYnVnIl0NCitPcHRpb25zPS12NTQNCisNCitbIkRzcEJpb3NCdWlsZGVyIiBTZXR0aW5nczogIlJlbGVhc2UiXQ0KK09wdGlvbnM9LXY1NA0KKw0KK1siTGlua2VyIiBTZXR0aW5nczogIkRlYnVnIl0NCitPcHRpb25zPS1xIC1jIC1oZWFwNDA5NiAtbSIuXERlYnVnXHNwZWV4X0M1NF90ZXN0Lm1hcCIgLW8iLlxEZWJ1Z1xzcGVleF9DNTRfdGVzdC5vdXQiIC1zdGFjazQwOTYgLXcgLXgNCisNCitbIkxpbmtlciIgU2V0dGluZ3M6ICJSZWxlYXNlIl0NCitPcHRpb25zPS1xIC1jIC1tIi5cUmVsZWFzZVxzcGVleF9DNTRfdGVzdC5tYXAiIC1vIi5cUmVsZWFzZVxzcGVleF9DNTRfdGVzdC5vdXQiIC13IC14DQorDQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvdGkvc3BlZXhfQzU1X3Rlc3QvTWFrZWZpbGUuYW0gYi8zcmRwYXJ0eS9zcGVleC90aS9zcGVleF9DNTVfdGVzdC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzg5ZWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvdGkvc3BlZXhfQzU1X3Rlc3QvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw2IEBACisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4uIC0qLU1ha2VmaWxlLSotCisKKyMgRGlzYWJsZSBhdXRvbWF0aWMgZGVwZW5kZW5jeSB0cmFja2luZyBpZiB1c2luZyBvdGhlciB0b29scyB0aGFuIGdjYyBhbmQgZ21ha2UKKyNBVVRPTUFLRV9PUFRJT05TID0gbm8tZGVwZW5kZW5jaWVzCisKK0VYVFJBX0RJU1QgPSBzcGVleF9DNTVfdGVzdC5jbWQgIHNwZWV4X0M1NV90ZXN0LnBqdApkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvdGkvc3BlZXhfQzU1X3Rlc3Qvc3BlZXhfQzU1X3Rlc3QuY21kIGIvM3JkcGFydHkvc3BlZXgvdGkvc3BlZXhfQzU1X3Rlc3Qvc3BlZXhfQzU1X3Rlc3QuY21kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZTc5MjMKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC90aS9zcGVleF9DNTVfdGVzdC9zcGVleF9DNTVfdGVzdC5jbWQKQEAgLTAsMCArMSw2NSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA1IFBzaSBTeXN0ZW1zLCBJbmMuCisgICBGaWxlOiBzcGVleF9DNTVfdGVzdC5jbWQKKyAgIExpbmtlciBjb21tYW5kIGZpbGUgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgVEkgVE1TMzIwVkM1NTA5QSBwcm9jZXNzb3INCisgICBmb3IgdXNlIHdpdGggVEkgQ29kZSBDb21wb3NlciAoVE0pIERTUCBkZXZlbG9wbWVudCB0b29scy4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworDQorLWMNCistc3RhY2sgMHgxYzAwDQorLWhlYXAgMHgxMDAwCS8qIElmIHByaXZhdGUgbWVtb3J5IGFsbG9jYXRpb24gaXMgdXNlZCBmb3IgU3BlZXggKi8NCisvKi1oZWFwIDB4NjAwMAkvICogSWYgY2FsbG9jIGlzIHVzZWQgZm9yIFNwZWV4ICovDQorLXN5c3N0YWNrIDB4MjAwDQorLWxydHM1NS5saWINCisNCitNRU1PUlkNCit7DQorICAgREFSQU06ICAgICAgb3JpZ2luID0gMHgyMDAsICAgICAgICAgbGVuID0gMHg3ZTAwDQorICAgREFSQU1fQjogICAgb3JpZ2luID0gMHg4MDAwLCAgICAgICAgbGVuID0gMHg4MDAwDQorICAgVkVDVDogICAgICAgb3JpZ2luID0gMHgxMDAsICAgICAgICAgbGVuID0gMHgxMDANCisgICBTQVJBTV9BOiAgICBvcmlnaW4gPSAweDEwMDAwLCAgICAgICBsZW4gPSAweDEwMDAwDQorICAgU0FSQU1fQjogICAgb3JpZ2luID0gMHgyMDAwMCwgICAgICAgbGVuID0gMHgyMDAwMA0KK30NCisNCitTRUNUSU9OUw0KK3sNCisgICAgLnZlY3RvcnM6IHt9ID4gVkVDVA0KKyAgICAuYm9vdG1lbToge30gPiBEQVJBTQ0KKyAgICAudGV4dDogICAge30gPiBTQVJBTV9CDQorICAgIC5jaW5pdDogICB7fSA+IFNBUkFNX0INCisgICAgLnN3aXRjaDogIHt9ID4gU0FSQU1fQg0KKyAgICAuYnNzOiAgICAge30gPiBEQVJBTQ0KKy8qICAgIC5mYXI6ICAgICB7fSA+IERBUkFNKi8NCisgICAgLmNvbnN0OiAgIHt9ID4gREFSQU0NCisgICAgLnN5c21lbTogIHt9ID4gREFSQU1fQg0KKyAgICAuY2lvOiAgICAge30gPiBEQVJBTQ0KKyAgICAuc3RhY2s6ICAge30gPiBEQVJBTQ0KKyAgICAuc3lzc3RhY2s6ICAge30gPiBEQVJBTQ0KKyAgICAubXloZWFwOiAgIHt9ID4gU0FSQU1fQQ0KK30NCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC90aS9zcGVleF9DNTVfdGVzdC9zcGVleF9DNTVfdGVzdC5wanQgYi8zcmRwYXJ0eS9zcGVleC90aS9zcGVleF9DNTVfdGVzdC9zcGVleF9DNTVfdGVzdC5wanQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAzNTA0ZgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3RpL3NwZWV4X0M1NV90ZXN0L3NwZWV4X0M1NV90ZXN0LnBqdApAQCAtMCwwICsxLDYxIEBACis7IENvZGUgQ29tcG9zZXIgUHJvamVjdCBGaWxlLCBWZXJzaW9uIDIuMCAoZG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhpcyBsaW5lKQ0KKw0KK1tQcm9qZWN0IFNldHRpbmdzXQ0KK1Byb2plY3REaXI9IkM6XHNwZWV4XzExMjM0XHRpXHNwZWV4X0M1NV90ZXN0XCINCitQcm9qZWN0VHlwZT1FeGVjdXRhYmxlDQorQ1BVRmFtaWx5PVRNUzMyMEM1NVhYDQorVG9vbD0iQ29tcGlsZXIiDQorVG9vbD0iQ3VzdG9tQnVpbGRlciINCitUb29sPSJEc3BCaW9zQnVpbGRlciINCitUb29sPSJMaW5rZXIiDQorQ29uZmlnPSJEZWJ1ZyINCitDb25maWc9IlJlbGVhc2UiDQorDQorW1NvdXJjZSBGaWxlc10NCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XGJpdHMuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XGNiX3NlYXJjaC5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcZXhjXzEwXzE2X3RhYmxlLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxleGNfMTBfMzJfdGFibGUuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XGV4Y18yMF8zMl90YWJsZS5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcZXhjXzVfMjU2X3RhYmxlLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxleGNfNV82NF90YWJsZS5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcZXhjXzhfMTI4X3RhYmxlLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxmaWx0ZXJzLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxnYWluX3RhYmxlLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxnYWluX3RhYmxlX2xici5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcbHBjLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxsc3AuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XGxzcF90YWJsZXNfbmIuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XGx0cC5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcbWF0aF9hcHByb3guYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XG1pc2MuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XG1vZGVzLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxuYl9jZWxwLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxxdWFudF9sc3AuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XHNiX2NlbHAuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XHNwZWV4LmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxzcGVleF9jYWxsYmFja3MuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XHZici5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcdnEuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XHdpbmRvdy5jIg0KK1NvdXJjZT0iLi5cLi5cdGlcdGVzdGVuYy1USS1DNXguYyINCitTb3VyY2U9InNwZWV4X0M1NV90ZXN0LmNtZCINCisNCitbIkNvbXBpbGVyIiBTZXR0aW5nczogIkRlYnVnIl0NCitPcHRpb25zPS1nIC1xIC1vMyAtZnIiLi5cdGlcc3BlZXhfQzU1X3Rlc3RcRGVidWciIC1pIi4uXHRpIiAtaSIuLlxpbmNsdWRlIiAtZCJfREVCVUciIC1kIkNPTkZJR19USV9DNTVYIiAtZCJIQVZFX0NPTkZJR19IIiAtbW4NCisNCitbIkNvbXBpbGVyIiBTZXR0aW5nczogIlJlbGVhc2UiXQ0KK09wdGlvbnM9LXEgLW8yIC1mciIuLlx0aVxzcGVleF9DNTVfdGVzdFxSZWxlYXNlIiAtaSIuLlx0aSIgLWkiLi5caW5jbHVkZSIgLWQiQ09ORklHX1RJX0M1NVgiIC1kIkhBVkVfQ09ORklHX0giIC1tbg0KKw0KK1siRHNwQmlvc0J1aWxkZXIiIFNldHRpbmdzOiAiRGVidWciXQ0KK09wdGlvbnM9LXY1NQ0KKw0KK1siRHNwQmlvc0J1aWxkZXIiIFNldHRpbmdzOiAiUmVsZWFzZSJdDQorT3B0aW9ucz0tdjU1DQorDQorWyJMaW5rZXIiIFNldHRpbmdzOiAiRGVidWciXQ0KK09wdGlvbnM9LXEgLWMgLW0iLlxEZWJ1Z1xzcGVleF9DNTVfdGVzdC5tYXAiIC1vIi5cRGVidWdcc3BlZXhfQzU1X3Rlc3Qub3V0IiAtdyAteA0KKw0KK1siTGlua2VyIiBTZXR0aW5nczogIlJlbGVhc2UiXQ0KK09wdGlvbnM9LXEgLWMgLW0iLlxSZWxlYXNlXHNwZWV4X0M1NV90ZXN0Lm1hcCIgLW8iLlxSZWxlYXNlXHNwZWV4X0M1NV90ZXN0Lm91dCIgLXcgLXgNCisNCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC90aS9zcGVleF9DNjRfdGVzdC9NYWtlZmlsZS5hbSBiLzNyZHBhcnR5L3NwZWV4L3RpL3NwZWV4X0M2NF90ZXN0L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZWEyYmEKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC90aS9zcGVleF9DNjRfdGVzdC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDYgQEAKKyMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbi4gLSotTWFrZWZpbGUtKi0KKworIyBEaXNhYmxlIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nIGlmIHVzaW5nIG90aGVyIHRvb2xzIHRoYW4gZ2NjIGFuZCBnbWFrZQorI0FVVE9NQUtFX09QVElPTlMgPSBuby1kZXBlbmRlbmNpZXMKKworRVhUUkFfRElTVCA9IHNwZWV4X0M2NF90ZXN0LmNtZCAgc3BlZXhfQzY0X3Rlc3QucGp0CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC90aS9zcGVleF9DNjRfdGVzdC9zcGVleF9DNjRfdGVzdC5jbWQgYi8zcmRwYXJ0eS9zcGVleC90aS9zcGVleF9DNjRfdGVzdC9zcGVleF9DNjRfdGVzdC5jbWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1ZTdiNAotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3RpL3NwZWV4X0M2NF90ZXN0L3NwZWV4X0M2NF90ZXN0LmNtZApAQCAtMCwwICsxLDU5IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDUgUHNpIFN5c3RlbXMsIEluYy4KKyAgIEZpbGU6IHNwZWV4X0M2NF90ZXN0LmNtZAorICAgTGlua2VyIGNvbW1hbmQgZmlsZSB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBUSSBUTVMzMjBDNjQxNSBwcm9jZXNzb3INCisgICBmb3IgdXNlIHdpdGggVEkgQ29kZSBDb21wb3NlciAoVE0pIERTUCBkZXZlbG9wbWVudCB0b29scy4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworDQorLXN0YWNrIDB4MTAwMDANCistaGVhcCAweDEwMDAwDQorDQorDQorTUVNT1JZIA0KK3sNCisgICBWRUNSQU0gICAgICAgOiBvcmlnaW4gPSAweDAsICAgICAgICAgbGVuID0gMHgyMDANCisgICBJUFJBTSAgICAgICA6IG9yaWdpbiA9IDB4MjAwLCAgICAgICAgIGxlbiA9IDB4NDAwMDANCisgICBJRFJBTSAgICAgICA6IG9yaWdpbiA9IDB4ODAwMDAsICBsZW4gPSAweDcwMDAwDQorfQ0KKw0KK1NFQ1RJT05TDQorew0KKyAgICAgICAgLnZlY3RvcnMgPiBWRUNSQU0NCisgICAgICAgIC50ZXh0ICAgID4gSVBSQU0NCisNCisgICAgICAgIC5ic3MgICAgID4gSURSQU0NCisgICAgICAgIC5jaW5pdCAgID4gSURSQU0NCisgICAgICAgIC5jb25zdCAgID4gSURSQU0NCisgICAgICAgIC5mYXIgICAgID4gSURSQU0NCisgICAgICAgIC5zdGFjayAgID4gSURSQU0NCisgICAgICAgIC5jaW8gICAgID4gSURSQU0NCisgICAgICAgIC5zeXNtZW0gID4gSURSQU0NCisgICAgICAgIC5zd2l0Y2ggID4gSURSQU0NCisgICAgICAgIC5teWhlYXAgID4gSURSQU0NCit9DQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvdGkvc3BlZXhfQzY0X3Rlc3Qvc3BlZXhfQzY0X3Rlc3QucGp0IGIvM3JkcGFydHkvc3BlZXgvdGkvc3BlZXhfQzY0X3Rlc3Qvc3BlZXhfQzY0X3Rlc3QucGp0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OWY2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC90aS9zcGVleF9DNjRfdGVzdC9zcGVleF9DNjRfdGVzdC5wanQKQEAgLTAsMCArMSw2MiBAQAorOyBDb2RlIENvbXBvc2VyIFByb2plY3QgRmlsZSwgVmVyc2lvbiAyLjAgKGRvIG5vdCBtb2RpZnkgb3IgcmVtb3ZlIHRoaXMgbGluZSkNCisNCitbUHJvamVjdCBTZXR0aW5nc10NCitQcm9qZWN0RGlyPSJDOlxzcGVleF8xMTIzNFx0aVxzcGVleF9DNjRfdGVzdFwiDQorUHJvamVjdFR5cGU9RXhlY3V0YWJsZQ0KK0NQVUZhbWlseT1UTVMzMjBDNjRYWA0KK1Rvb2w9IkNvbXBpbGVyIg0KK1Rvb2w9IkN1c3RvbUJ1aWxkZXIiDQorVG9vbD0iRHNwQmlvc0J1aWxkZXIiDQorVG9vbD0iTGlua2VyIg0KK0NvbmZpZz0iRGVidWciDQorQ29uZmlnPSJSZWxlYXNlIg0KKw0KK1tTb3VyY2UgRmlsZXNdDQorU291cmNlPSIuLlwuLlwuLlxDQ1N0dWRpb192My4xXEM2MDAwXGNndG9vbHNcbGliXHJ0czY0MDAubGliIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcYml0cy5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcY2Jfc2VhcmNoLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxleGNfMTBfMTZfdGFibGUuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XGV4Y18xMF8zMl90YWJsZS5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcZXhjXzIwXzMyX3RhYmxlLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxleGNfNV8yNTZfdGFibGUuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XGV4Y181XzY0X3RhYmxlLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxleGNfOF8xMjhfdGFibGUuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XGZpbHRlcnMuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XGdhaW5fdGFibGUuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XGdhaW5fdGFibGVfbGJyLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxscGMuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XGxzcC5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcbHNwX3RhYmxlc19uYi5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcbHRwLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFxtYXRoX2FwcHJveC5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcbWlzYy5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcbW9kZXMuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XG5iX2NlbHAuYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XHF1YW50X2xzcC5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcc2JfY2VscC5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcc3BlZXguYyINCitTb3VyY2U9Ii4uXC4uXGxpYnNwZWV4XHNwZWV4X2NhbGxiYWNrcy5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcdmJyLmMiDQorU291cmNlPSIuLlwuLlxsaWJzcGVleFx2cS5jIg0KK1NvdXJjZT0iLi5cLi5cbGlic3BlZXhcd2luZG93LmMiDQorU291cmNlPSIuLlx0ZXN0ZW5jLVRJLUM2NHguYyINCitTb3VyY2U9InNwZWV4X0M2NF90ZXN0LmNtZCINCisNCitbIkNvbXBpbGVyIiBTZXR0aW5nczogIkRlYnVnIl0NCitPcHRpb25zPS1nIC1vMyAtZnIiJChQcm9qX2RpcilcRGVidWciIC1pIi4uXHRpIiAtaSIuLlxpbmNsdWRlIiAtZCJfREVCVUciIC1kIkNPTkZJR19USV9DNlgiIC1kIkhBVkVfQ09ORklHX0giIC1tdjY0MDANCisNCitbIkNvbXBpbGVyIiBTZXR0aW5nczogIlJlbGVhc2UiXQ0KK09wdGlvbnM9LW8zIC1mciIkKFByb2pfZGlyKVxSZWxlYXNlIiAtaSIuLlx0aSIgLWkiLi5caW5jbHVkZSIgLWQiSEFWRV9DT05GSUdfSCIgLW12NjQwMA0KKw0KK1siRHNwQmlvc0J1aWxkZXIiIFNldHRpbmdzOiAiRGVidWciXQ0KK09wdGlvbnM9LXY2eA0KKw0KK1siRHNwQmlvc0J1aWxkZXIiIFNldHRpbmdzOiAiUmVsZWFzZSJdDQorT3B0aW9ucz0tdjZ4DQorDQorWyJMaW5rZXIiIFNldHRpbmdzOiAiRGVidWciXQ0KK09wdGlvbnM9LWMgLW0iLlxEZWJ1Z1xzcGVleF9DNjRfdGVzdC5tYXAiIC1vIi5cRGVidWdcc3BlZXhfQzY0X3Rlc3Qub3V0IiAtdyAteA0KKw0KK1siTGlua2VyIiBTZXR0aW5nczogIlJlbGVhc2UiXQ0KK09wdGlvbnM9LWMgLW0iLlxSZWxlYXNlXHNwZWV4X0M2NF90ZXN0Lm1hcCIgLW8iLlxSZWxlYXNlXHNwZWV4X0M2NF90ZXN0Lm91dCIgLXcgLXgNCisNCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC90aS90ZXN0ZW5jLVRJLUM1eC5jIGIvM3JkcGFydHkvc3BlZXgvdGkvdGVzdGVuYy1USS1DNXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZThiZTY4Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvdGkvdGVzdGVuYy1USS1DNXguYwpAQCAtMCwwICsxLDI4NyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA1IFBzaSBTeXN0ZW1zLCBJbmMuCisgICBGaWxlOiB0ZXN0ZW5jLVRJLUM1eC5jCisgICBFbmNvZGVyL0RlY29kZXIgTG9vcCBNYWluIGZpbGUgZm9yIFRJIEM1NHh4IGFuZCBDNTV4eCBwcm9jZXNzb3JzCisgICBmb3IgdXNlIHdpdGggVEkgQ29kZSBDb21wb3NlciAoVE0pIERTUCBkZXZlbG9wbWVudCB0b29scy4KKyAgIE1vZGlmaWVkIGZyb20gc3BlZXhsaWIvdGVzdGVuYy5jCisKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKy8qIE1vZGlmaWVkIGZyb20gc3BlZXhsaWIvdGVzdGVuYy5jIGZvciBDb2RlIENvbXBvc2VyIHNpbXVsYXRvciAqLworCisjaW5jbHVkZSA8c3BlZXgvc3BlZXguaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHNwZWV4L3NwZWV4X2NhbGxiYWNrcy5oPgorI2luY2x1ZGUgPC4uXGxpYnNwZWV4XGFyY2guaD4KKworI3VuZGVmIERFQ09ERV9PTkxZCisjZGVmaW5lIENIRUNLX1JFU1VMVCAgLyogQ29tcGFyZXMgb3JpZ2luYWwgZmlsZSB3aXRoIGVuY29kZWQvZGVjb2RlciBmaWxlICovCisjZGVmaW5lIFRFU1RFTkNfQllURVNfUEVSX0ZSQU1FIDIwICAvKiA4a2JwcyAqLworI2RlZmluZSBURVNURU5DX1FVQUxJVFkgNCAvKiA4a2JwcyAqLworLy8jZGVmaW5lIFRFU1RFTkNfQllURVNfUEVSX0ZSQU1FIDI4ICAvKiAxMWticHMgKi8KKy8vI2RlZmluZSBURVNURU5DX1FVQUxJVFkgNQkgICAgICAvKiAxMSBrYnBzICovCisKKy8qIEZvciBuYXJyb3diYW5kLCBRVUFMSVRZIG1hcHMgdG8gdGhlc2UgYml0IHJhdGVzIChzZWUgbW9kZXMuYywgbWFudWFsLnBkZikgCisgKiAgIHsxLCA4LCAyLCAzLCAzLCA0LCA0LCA1LCA1LCA2LCA3fQorICogMCAtPiAyMTUwCisgKiAxIC0+IDM5NTAKKyAqIDIgLT4gNTk1MAorICogMyAtPiA4MDAwCisgKiA0IC0+IDgwMDAKKyAqIDUgLT4gMTEwMDAKKyAqIDYgLT4gMTEwMDAKKyAqIDcgLT4gMTUwMDAKKyAqIDggLT4gMTUwMDAKKyAqIDkgLT4gMTgyMDAKKyAqMTAgLT4gMjY0MDAgICovCisKKyNpZmRlZiBGSVhFRF9ERUJVRworZXh0ZXJuIGxvbmcgbG9uZyBzcHhfbWlwczsKKyNlbmRpZgorI2luY2x1ZGUgPG1hdGguaD4KKworI2lmZGVmIE1BTlVBTF9BTExPQworLyogVGFrZSBhbGwgU3BlZXggc3BhY2UgZnJvbSB0aGlzIHByaXZhdGUgaGVhcCAqLyAKKy8qIFRoaXMgaXMgdXNlZnVsIGZvciBtdWx0aWNoYW5uZWwgYXBwbGljYXRpb25zICovCisjcHJhZ21hIERBVEFfU0VDVElPTihzcHhIZWFwLCAiLm15aGVhcCIpOyAKK3N0YXRpYyBjaGFyIHNweEhlYXBbU1BFRVhfUEVSU0lTVF9TVEFDS19TSVpFXTsKKworI3ByYWdtYSBEQVRBX1NFQ1RJT04oc3B4U2NyYXRjaCwgIi5teWhlYXAiKTsgCitzdGF0aWMgY2hhciBzcHhTY3JhdGNoW1NQRUVYX1NDUkFUQ0hfU1RBQ0tfU0laRV07CisKK2NoYXIgKnNweEdsb2JhbEhlYXBQdHIsICpzcHhHbG9iYWxIZWFwRW5kOworY2hhciAqc3B4R2xvYmFsU2NyYXRjaFB0ciwgKnNweEdsb2JhbFNjcmF0Y2hFbmQ7CisjZW5kaWYKKwordm9pZCBieXRlMndvcmQoc2hvcnQqIHBJbkJ1Ziwgc2hvcnQqIHBPdXRCdWYsIGludCBuV29yZHMpCit7CisgICBzaG9ydCAqcEluLCAqcE91dCwgc05leHQ7CisgICBpbnQgaTsKKyAgIAorICAgcEluID0gcEluQnVmOworICAgcE91dCA9IHBPdXRCdWY7CisgICBmb3IoaT0wO2k8bldvcmRzO2krKykKKyAgIHsKKyAgICAgIHNOZXh0ID0gKnBJbisrOwkJCS8vIEdldCBsb3cgYnl0ZQorICAgICAgKnBPdXQrKyA9IChzTmV4dCAmIDB4MDBmZikgfCAoKnBJbisrIDw8IDgpOwkvLyBpbnNlcnQgaGlnaCBieXRlCisgICB9Cit9CisgICAKK3ZvaWQgd29yZDJieXRlKHNob3J0KiBwSW5CdWYsIHNob3J0KiBwT3V0QnVmLCBpbnQgbldvcmRzKQoreworICAgc2hvcnQgKnBJbiwgKnBPdXQ7CisgICBpbnQgaTsKKyAgIAorICAgcEluID0gcEluQnVmOworICAgcE91dCA9IHBPdXRCdWY7CisgICBmb3IoaT0wO2k8bldvcmRzO2krKykKKyAgIHsKKyAgICAgICpwT3V0KysgPSAqcEluICYgMHgwMGZmOwkvLyBHZXQgbG93IGJ5dGUKKyAgICAgICpwT3V0KysgPSAoc2hvcnQpICgodW5zaWduZWQgc2hvcnQpICpwSW4rKyA+PiA4KTsKKyAgIH0KK30KKyAgIAordm9pZCBtYWluKCkKK3sKKyAgIGNoYXIgKm91dEZpbGUsICpiaXRzRmlsZTsKKyAgIEZJTEUgKmZvdXQsICpmYml0cz1OVUxMOworI2lmICFkZWZpbmVkKERFQ09ERV9PTkxZKSB8fCBkZWZpbmVkKENIRUNLX1JFU1VMVCkKKyAgIGNoYXIgKmluRmlsZTsKKyAgIEZJTEUgKmZpbjsKKyAgIHNob3J0IGluX3Nob3J0W0ZSQU1FX1NJWkVdOworI2VuZGlmCisgICBzaG9ydCBvdXRfc2hvcnRbRlJBTUVfU0laRV07CisgICBzaG9ydCBpbm91dF9ieXRlWzIqRlJBTUVfU0laRV07CisjaWZuZGVmIERFQ09ERV9PTkxZCisgICBpbnQgbmJDaGFyczsKKyNlbmRpZgorI2lmZGVmIENIRUNLX1JFU1VMVAorICAgZmxvYXQgc2lncG93LGVycnBvdyxzbnIsIHNlZ19zbnI9MDsKKyAgIGludCBzbnJfZnJhbWVzID0gMDsKKyAgIGludCBpOworI2VuZGlmCisgICBjaGFyIGNiaXRzW1RFU1RFTkNfQllURVNfUEVSX0ZSQU1FLzIgKyAyXTsgIC8qIHRlbXAgc3RvcmUgZm9yIGVuY29kZWQgZGF0YSAqLworICAgdm9pZCAqc3Q7CisgICB2b2lkICpkZWM7CisgICBTcGVleEJpdHMgYml0czsKKyAgIHNweF9pbnQzMl90IHRtcDsKKyAgIHVuc2lnbmVkIGxvbmcgYml0Q291bnQ9MDsKKyAgIHNweF9pbnQzMl90IHNraXBfZ3JvdXBfZGVsYXk7CisgICBTcGVleENhbGxiYWNrIGNhbGxiYWNrOworCisgICAvKiBDNTR4eCBkZWZhdWx0cyB0byBtYXggd2FpdCBzdGF0ZXMsIGV2ZW4gZm9yIHBhcnRzIGxpa2UgQzU0MTYgd2l0aCAKKyAgICAgIGxhcmdlciBpbnRlcm5hbCBtZW1vcnkuICBOZWVkIHRvIGZvcmNlIHRoZSB3YWl0IHN0YXRlIHJlZ2lzdGVyIHRvIHplcm8gKi8KKworI2lmZGVmIENPTkZJR19USV9DNTRYCisgICBhc20oIglTVE0JIzAsU1dXU1IiKTsKKyNlbmRpZgorCisjaWZkZWYgQ0hFQ0tfUkVTVUxUCisgICBzaWdwb3cgPSAwOworICAgZXJycG93ID0gMDsKKyNlbmRpZgorCisjaWZkZWYgTUFOVUFMX0FMTE9DCisJc3B4R2xvYmFsSGVhcFB0ciA9IHNweEhlYXA7CisJc3B4R2xvYmFsSGVhcEVuZCA9IHNweEhlYXAgKyBzaXplb2Yoc3B4SGVhcCk7CisKKwlzcHhHbG9iYWxTY3JhdGNoUHRyID0gc3B4U2NyYXRjaDsKKwlzcHhHbG9iYWxTY3JhdGNoRW5kID0gc3B4U2NyYXRjaCArIHNpemVvZihzcHhTY3JhdGNoKTsKKyNlbmRpZgorICAgc3QgPSBzcGVleF9lbmNvZGVyX2luaXQoJnNwZWV4X25iX21vZGUpOworI2lmZGVmIE1BTlVBTF9BTExPQworCXNweEdsb2JhbFNjcmF0Y2hQdHIgPSBzcHhTY3JhdGNoOwkJLyogUmV1c2Ugc2NyYXRjaCBmb3IgZGVjb2RlciAqLworI2VuZGlmCisgICBkZWMgPSBzcGVleF9kZWNvZGVyX2luaXQoJnNwZWV4X25iX21vZGUpOworCisgICBjYWxsYmFjay5jYWxsYmFja19pZCA9IFNQRUVYX0lOQkFORF9DSEFSOworICAgY2FsbGJhY2suZnVuYyA9IHNwZWV4X3N0ZF9jaGFyX2hhbmRsZXI7CisgICBjYWxsYmFjay5kYXRhID0gc3RkZXJyOworICAgc3BlZXhfZGVjb2Rlcl9jdGwoZGVjLCBTUEVFWF9TRVRfSEFORExFUiwgJmNhbGxiYWNrKTsKKworICAgY2FsbGJhY2suY2FsbGJhY2tfaWQgPSBTUEVFWF9JTkJBTkRfTU9ERV9SRVFVRVNUOworICAgY2FsbGJhY2suZnVuYyA9IHNwZWV4X3N0ZF9tb2RlX3JlcXVlc3RfaGFuZGxlcjsKKyAgIGNhbGxiYWNrLmRhdGEgPSBzdDsKKyAgIHNwZWV4X2RlY29kZXJfY3RsKGRlYywgU1BFRVhfU0VUX0hBTkRMRVIsICZjYWxsYmFjayk7CisKKyAgIHRtcD0wOworICAgc3BlZXhfZGVjb2Rlcl9jdGwoZGVjLCBTUEVFWF9TRVRfRU5ILCAmdG1wKTsKKyAgIHRtcD0wOworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX1NFVF9WQlIsICZ0bXApOworICAgdG1wPVRFU1RFTkNfUVVBTElUWTsKKyAgIHNwZWV4X2VuY29kZXJfY3RsKHN0LCBTUEVFWF9TRVRfUVVBTElUWSwgJnRtcCk7CisgICB0bXA9MTsgIC8qIExvd2VzdCAqLworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX1NFVF9DT01QTEVYSVRZLCAmdG1wKTsKKworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX0dFVF9MT09LQUhFQUQsICZza2lwX2dyb3VwX2RlbGF5KTsKKyAgIHNwZWV4X2RlY29kZXJfY3RsKGRlYywgU1BFRVhfR0VUX0xPT0tBSEVBRCwgJnRtcCk7CisgICBza2lwX2dyb3VwX2RlbGF5ICs9IHRtcDsKKyAgIGZwcmludGYgKHN0ZGVyciwgImRlY29kZXIgbG9va2FoZWFkID0gJWRcbiIsIHNraXBfZ3JvdXBfZGVsYXkpOworCisjaWZkZWYgREVDT0RFX09OTFkKKyAgIGJpdHNGaWxlID0gImM6XFxzcGVleHRydW5rdGVzdFxcc2FtcGxlc1xcbWFsZWJpdHNpbi5kYXQiOworICAgZmJpdHMgPSBmb3BlbihiaXRzRmlsZSwgInJiIik7CisjZWxzZQorICAgYml0c0ZpbGUgPSAiYzpcXHNwZWV4dHJ1bmt0ZXN0XFxzYW1wbGVzXFxtYWxlYml0czV4LmRhdCI7CisgICBmYml0cyA9IGZvcGVuKGJpdHNGaWxlLCAid2IiKTsKKyNlbmRpZgorI2lmICFkZWZpbmVkKERFQ09ERV9PTkxZKSB8fCBkZWZpbmVkKENIRUNLX1JFU1VMVCkKKyAgIGluRmlsZSA9ICJjOlxcc3BlZXh0cnVua3Rlc3RcXHNhbXBsZXNcXG1hbGUuc25kIjsKKyAgIGZpbiA9IGZvcGVuKGluRmlsZSwgInJiIik7CisjZW5kaWYKKyAgIG91dEZpbGUgPSAiYzpcXHNwZWV4dHJ1bmt0ZXN0XFxzYW1wbGVzXFxtYWxlb3V0NXguc25kIjsKKyAgIGZvdXQgPSBmb3BlbihvdXRGaWxlLCAid2IrIik7CisgCisgICBzcGVleF9iaXRzX2luaXQoJmJpdHMpOworI2lmbmRlZiBERUNPREVfT05MWQorICAgd2hpbGUgKCFmZW9mKGZpbikpCisgICB7CisgICAgICBmcmVhZChpbm91dF9ieXRlLCAyLCBGUkFNRV9TSVpFLCBmaW4pOworICAgICAgYnl0ZTJ3b3JkKGlub3V0X2J5dGUsIGluX3Nob3J0LCBGUkFNRV9TSVpFKTsgIC8qIEM1eCBoYXMgMTYtYml0IGNoYXIgKi8KKworICAgICAgaWYgKGZlb2YoZmluKSkKKyAgICAgICAgIGJyZWFrOworICAgICAgc3BlZXhfYml0c19yZXNldCgmYml0cyk7CisKKyAgICAgIHNwZWV4X2VuY29kZV9pbnQoc3QsIGluX3Nob3J0LCAmYml0cyk7CisgICAgICBuYkNoYXJzID0gc3BlZXhfYml0c193cml0ZSgmYml0cywgY2JpdHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjYml0cykqQllURVNfUEVSX0NIQVIpIC9CWVRFU19QRVJfQ0hBUjsKKyAgICAgIGJpdENvdW50Kz1iaXRzLm5iQml0czsKKworICAgICAgd29yZDJieXRlKChzaG9ydCAqKSBjYml0cywgaW5vdXRfYnl0ZSwgbmJDaGFycyk7CisgICAgICBmd3JpdGUoaW5vdXRfYnl0ZSwgMiwgbmJDaGFycywgZmJpdHMpOworICAgICAgc3BlZXhfYml0c19yZXdpbmQoJmJpdHMpOworCisjZWxzZSAvKiBERUNPREVfT05MWSAqLworICAgd2hpbGUgKCFmZW9mKGZiaXRzKSkKKyAgIHsKKyAgICAgIGZyZWFkKGlub3V0X2J5dGUsIDEsIFRFU1RFTkNfQllURVNfUEVSX0ZSQU1FLCBmYml0cyk7CisKKyAgICAgIGlmIChmZW9mKGZiaXRzKSkKKyAgICAgICAgIGJyZWFrOworCisgICAgICBieXRlMndvcmQoaW5vdXRfYnl0ZSwgKHNob3J0ICopY2JpdHMsIFRFU1RFTkNfQllURVNfUEVSX0ZSQU1FLzIpOworICAgICAgc3BlZXhfYml0c19yZWFkX2Zyb20oJmJpdHMsIGNiaXRzLCBURVNURU5DX0JZVEVTX1BFUl9GUkFNRSk7CisgICAgICBiaXRDb3VudCs9MTYwOworI2VuZGlmCisgICAgICBzcGVleF9kZWNvZGVfaW50KGRlYywgJmJpdHMsIG91dF9zaG9ydCk7CisgICAgICBzcGVleF9iaXRzX3Jlc2V0KCZiaXRzKTsKKworICAgICAgd29yZDJieXRlKCZvdXRfc2hvcnRbc2tpcF9ncm91cF9kZWxheV0sIGlub3V0X2J5dGUsIEZSQU1FX1NJWkUtc2tpcF9ncm91cF9kZWxheSk7CisgICAgICBmd3JpdGUoaW5vdXRfYnl0ZSwgMiwgRlJBTUVfU0laRS1za2lwX2dyb3VwX2RlbGF5LCBmb3V0KTsKKyAgICAgIHNraXBfZ3JvdXBfZGVsYXkgPSAwOworI2lmIDEKKyAgIGZwcmludGYgKHN0ZGVyciwgIkJpdHMgc28gZmFyOiAlbHUgXG4iLCBiaXRDb3VudCk7CisjZW5kaWYKKyAgIH0KKyAgIGZwcmludGYgKHN0ZGVyciwgIlRvdGFsIGVuY29kZWQgc2l6ZTogJWx1IGJpdHNcbiIsIGJpdENvdW50KTsKKyAgIHNwZWV4X2VuY29kZXJfZGVzdHJveShzdCk7CisgICBzcGVleF9kZWNvZGVyX2Rlc3Ryb3koZGVjKTsKKworI2lmZGVmIENIRUNLX1JFU1VMVAorICAgcmV3aW5kKGZpbik7CisgICByZXdpbmQoZm91dCk7CisKKyAgIHdoaWxlICggRlJBTUVfU0laRSA9PSBmcmVhZChpbm91dF9ieXRlLCAyLCBGUkFNRV9TSVpFLCBmaW4pKSAKKyAgIHsKKwlmbG9hdCBzPTAsIGU9MDsKKworICAgIGJ5dGUyd29yZChpbm91dF9ieXRlLCBpbl9zaG9ydCwgRlJBTUVfU0laRSk7CisgICAgZnJlYWQoaW5vdXRfYnl0ZSwgMiwgRlJBTUVfU0laRSwgZm91dCk7CisgICAgYnl0ZTJ3b3JkKGlub3V0X2J5dGUsIG91dF9zaG9ydCwgRlJBTUVfU0laRSk7CisKKyAgICAgICAgZm9yIChpPTA7aTxGUkFNRV9TSVpFOysraSkgeworICAgICAgICAgICAgcyArPSAoZmxvYXQpaW5fc2hvcnRbaV0gKiBpbl9zaG9ydFtpXTsKKyAgICAgICAgICAgIGUgKz0gKChmbG9hdClpbl9zaG9ydFtpXS1vdXRfc2hvcnRbaV0pICogKChmbG9hdClpbl9zaG9ydFtpXS1vdXRfc2hvcnRbaV0pOworICAgICAgICB9CisJc2VnX3NuciArPSAxMCpsb2cxMCgocysxNjApLyhlKzE2MCkpOworCXNpZ3BvdyArPSBzOworCWVycnBvdyArPSBlOworCXNucl9mcmFtZXMrKzsKKyAgIH0KKworICAgc25yID0gMTAgKiBsb2cxMCggc2lncG93IC8gZXJycG93ICk7CisgICBzZWdfc25yIC89IHNucl9mcmFtZXM7CisgICBmcHJpbnRmKHN0ZGVyciwiU05SID0gJWZcbnNlZ21lbnRhbCBTTlIgPSAlZlxuIixzbnIsIHNlZ19zbnIpOworCisjaWZkZWYgRklYRURfREVCVUcKKyAgIHByaW50ZiAoIlRvdGFsOiAlZiBNSVBTXG4iLCAoZmxvYXQpKDFlLTYqNTAqc3B4X21pcHMvc25yX2ZyYW1lcykpOworI2VuZGlmCisjZW5kaWYgLyogQ0hFQ0tfUkVTVUxUICovCisjaWYgIWRlZmluZWQoREVDT0RFX09OTFkpIHx8IGRlZmluZWQoQ0hFQ0tfUkVTVUxUKQorICAgZmNsb3NlKGZpbik7CisjZW5kaWYKKyAgIGZjbG9zZShmb3V0KTsKKyAgIGZjbG9zZShmYml0cyk7Cit9CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC90aS90ZXN0ZW5jLVRJLUM2NHguYyBiLzNyZHBhcnR5L3NwZWV4L3RpL3Rlc3RlbmMtVEktQzY0eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMGJlMjgKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC90aS90ZXN0ZW5jLVRJLUM2NHguYwpAQCAtMCwwICsxLDI0MiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA1IFBzaSBTeXN0ZW1zLCBJbmMuCisgICBBdXRob3I6ICBKZWFuLU1hcmMgVmFsaW4gCisgICBGaWxlOiB0ZXN0ZW5jLVRJLUM2NHguYworICAgRW5jb2Rlci9EZWNvZGVyIExvb3AgTWFpbiBmaWxlIGZvciBUSSBUTVMzMjBDNjR4eCBwcm9jZXNzb3IKKyAgIGZvciB1c2Ugd2l0aCBUSSBDb2RlIENvbXBvc2VyIChUTSkgRFNQIGRldmVsb3BtZW50IHRvb2xzLgorICAgTW9kaWZpZWQgZnJvbSBzcGVleGxpYi90ZXN0ZW5jLmMKKworCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHNwZWV4L3NwZWV4Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzcGVleC9zcGVleF9jYWxsYmFja3MuaD4KKworI3VuZGVmIERFQ09ERV9PTkxZCisjZGVmaW5lIENIRUNLX1JFU1VMVCAgLyogQ29tcGFyZXMgb3JpZ2luYWwgZmlsZSB3aXRoIGVuY29kZWQvZGVjb2RlciBmaWxlICovCisjZGVmaW5lIFRFU1RFTkNfQllURVNfUEVSX0ZSQU1FIDIwICAvKiA4a2JwcyAqLworI2RlZmluZSBURVNURU5DX1FVQUxJVFkgNCAvKiA4a2JwcyAqLworLy8jZGVmaW5lIFRFU1RFTkNfQllURVNfUEVSX0ZSQU1FIDI4ICAvKiAxMWticHMgKi8KKy8vI2RlZmluZSBURVNURU5DX1FVQUxJVFkgNQkgICAgICAvKiAxMSBrYnBzICovCisKKy8qIEZvciBuYXJyb3diYW5kLCBRVUFMSVRZIG1hcHMgdG8gdGhlc2UgYml0IHJhdGVzIChzZWUgbW9kZXMuYywgbWFudWFsLnBkZikgCisgKiAgIHsxLCA4LCAyLCAzLCAzLCA0LCA0LCA1LCA1LCA2LCA3fQorICogMCAtPiAyMTUwCisgKiAxIC0+IDM5NTAKKyAqIDIgLT4gNTk1MAorICogMyAtPiA4MDAwCisgKiA0IC0+IDgwMDAKKyAqIDUgLT4gMTEwMDAKKyAqIDYgLT4gMTEwMDAKKyAqIDcgLT4gMTUwMDAKKyAqIDggLT4gMTUwMDAKKyAqIDkgLT4gMTgyMDAKKyAqMTAgLT4gMjY0MDAgICovCisKKyNpZmRlZiBGSVhFRF9ERUJVRworZXh0ZXJuIGxvbmcgbG9uZyBzcHhfbWlwczsKKyNlbmRpZgorCisjaWZkZWYgTUFOVUFMX0FMTE9DCisvKiBUYWtlIGFsbCBTcGVleCBzcGFjZSBmcm9tIHRoaXMgcHJpdmF0ZSBoZWFwICovIAorLyogVGhpcyBpcyB1c2VmdWwgZm9yIG11bHRpY2hhbm5lbCBhcHBsaWNhdGlvbnMgKi8KKyNwcmFnbWEgREFUQV9TRUNUSU9OKHNweEhlYXAsICIubXloZWFwIik7IAorc3RhdGljIGNoYXIgc3B4SGVhcFtTUEVFWF9QRVJTSVNUX1NUQUNLX1NJWkVdOworCisjcHJhZ21hIERBVEFfU0VDVElPTihzcHhTY3JhdGNoLCAiLm15aGVhcCIpOyAKK3N0YXRpYyBjaGFyIHNweFNjcmF0Y2hbU1BFRVhfU0NSQVRDSF9TVEFDS19TSVpFXTsKKworY2hhciAqc3B4R2xvYmFsSGVhcFB0ciwgKnNweEdsb2JhbEhlYXBFbmQ7CitjaGFyICpzcHhHbG9iYWxTY3JhdGNoUHRyLCAqc3B4R2xvYmFsU2NyYXRjaEVuZDsKKyNlbmRpZiAgICAvKiBNQU5VQUxfQUxMT0MgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KK3ZvaWQgbWFpbigpCit7CisgICBjaGFyICpvdXRGaWxlLCAqYml0c0ZpbGU7CisgICBGSUxFICpmb3V0LCAqZmJpdHM9TlVMTDsKKyNpZiAhZGVmaW5lZChERUNPREVfT05MWSkgfHwgZGVmaW5lZChDSEVDS19SRVNVTFQpCisgICBjaGFyICppbkZpbGU7CisgICBGSUxFICpmaW47CisgICBzaG9ydCBpbl9zaG9ydFtGUkFNRV9TSVpFXTsKKyNlbmRpZgorICAgc2hvcnQgb3V0X3Nob3J0W0ZSQU1FX1NJWkVdOworI2lmbmRlZiBERUNPREVfT05MWQorICAgaW50IG5iQml0czsKKyNlbmRpZgorI2lmZGVmIENIRUNLX1JFU1VMVAorICAgZmxvYXQgc2lncG93LGVycnBvdyxzbnIsIHNlZ19zbnI9MDsKKyAgIGludCBzbnJfZnJhbWVzID0gMDsKKyAgIGludCBpOworI2VuZGlmCisgICBjaGFyIGNiaXRzWzIwMF07CisgICB2b2lkICpzdDsKKyAgIHZvaWQgKmRlYzsKKyAgIFNwZWV4Qml0cyBiaXRzOworICAgc3B4X2ludDMyX3QgdG1wOworICAgdW5zaWduZWQgbG9uZyBiaXRDb3VudD0wOworICAgc3B4X2ludDMyX3Qgc2tpcF9ncm91cF9kZWxheTsKKyAgIFNwZWV4Q2FsbGJhY2sgY2FsbGJhY2s7CisKKyNpZmRlZiBDSEVDS19SRVNVTFQKKyAgIHNpZ3BvdyA9IDA7CisgICBlcnJwb3cgPSAwOworI2VuZGlmCisKKyNpZmRlZiBNQU5VQUxfQUxMT0MKKwlzcHhHbG9iYWxIZWFwUHRyID0gc3B4SGVhcDsKKwlzcHhHbG9iYWxIZWFwRW5kID0gc3B4SGVhcCArIHNpemVvZihzcHhIZWFwKTsKKworCXNweEdsb2JhbFNjcmF0Y2hQdHIgPSBzcHhTY3JhdGNoOworCXNweEdsb2JhbFNjcmF0Y2hFbmQgPSBzcHhTY3JhdGNoICsgc2l6ZW9mKHNweFNjcmF0Y2gpOworI2VuZGlmCisgICBzdCA9IHNwZWV4X2VuY29kZXJfaW5pdCgmc3BlZXhfbmJfbW9kZSk7CisjaWZkZWYgTUFOVUFMX0FMTE9DCisJc3B4R2xvYmFsU2NyYXRjaFB0ciA9IHNweFNjcmF0Y2g7CQkvKiBSZXVzZSBzY3JhdGNoIGZvciBkZWNvZGVyICovCisjZW5kaWYKKyAgIGRlYyA9IHNwZWV4X2RlY29kZXJfaW5pdCgmc3BlZXhfbmJfbW9kZSk7CisKKyAgIGNhbGxiYWNrLmNhbGxiYWNrX2lkID0gU1BFRVhfSU5CQU5EX0NIQVI7CisgICBjYWxsYmFjay5mdW5jID0gc3BlZXhfc3RkX2NoYXJfaGFuZGxlcjsKKyAgIGNhbGxiYWNrLmRhdGEgPSBzdGRlcnI7CisgICBzcGVleF9kZWNvZGVyX2N0bChkZWMsIFNQRUVYX1NFVF9IQU5ETEVSLCAmY2FsbGJhY2spOworCisgICBjYWxsYmFjay5jYWxsYmFja19pZCA9IFNQRUVYX0lOQkFORF9NT0RFX1JFUVVFU1Q7CisgICBjYWxsYmFjay5mdW5jID0gc3BlZXhfc3RkX21vZGVfcmVxdWVzdF9oYW5kbGVyOworICAgY2FsbGJhY2suZGF0YSA9IHN0OworICAgc3BlZXhfZGVjb2Rlcl9jdGwoZGVjLCBTUEVFWF9TRVRfSEFORExFUiwgJmNhbGxiYWNrKTsKKworICAgdG1wPTA7CisgICBzcGVleF9kZWNvZGVyX2N0bChkZWMsIFNQRUVYX1NFVF9FTkgsICZ0bXApOworICAgdG1wPTA7CisgICBzcGVleF9lbmNvZGVyX2N0bChzdCwgU1BFRVhfU0VUX1ZCUiwgJnRtcCk7CisgICB0bXA9VEVTVEVOQ19RVUFMSVRZOworICAgc3BlZXhfZW5jb2Rlcl9jdGwoc3QsIFNQRUVYX1NFVF9RVUFMSVRZLCAmdG1wKTsKKyAgIHRtcD0xOyAgLyogTG93ZXN0ICovCisgICBzcGVleF9lbmNvZGVyX2N0bChzdCwgU1BFRVhfU0VUX0NPTVBMRVhJVFksICZ0bXApOworCisgICBzcGVleF9lbmNvZGVyX2N0bChzdCwgU1BFRVhfR0VUX0xPT0tBSEVBRCwgJnNraXBfZ3JvdXBfZGVsYXkpOworICAgc3BlZXhfZGVjb2Rlcl9jdGwoZGVjLCBTUEVFWF9HRVRfTE9PS0FIRUFELCAmdG1wKTsKKyAgIHNraXBfZ3JvdXBfZGVsYXkgKz0gdG1wOworICAgZnByaW50ZiAoc3RkZXJyLCAiZGVjb2RlciBsb29rYWhlYWQgPSAlZFxuIiwgc2tpcF9ncm91cF9kZWxheSk7CisKKyNpZmRlZiBERUNPREVfT05MWQorICAgYml0c0ZpbGUgPSAiYzpcXHNwZWV4dHJ1bmt0ZXN0XFxzYW1wbGVzXFxtYWxlYml0c2luLmRhdCI7CisgICBmYml0cyA9IGZvcGVuKGJpdHNGaWxlLCAicmIiKTsKKyNlbHNlCisgICBiaXRzRmlsZSA9ICJjOlxcc3BlZXh0cnVua3Rlc3RcXHNhbXBsZXNcXG1hbGViaXRzNnguZGF0IjsKKyAgIGZiaXRzID0gZm9wZW4oYml0c0ZpbGUsICJ3YiIpOworI2VuZGlmCisjaWYgIWRlZmluZWQoREVDT0RFX09OTFkpIHx8IGRlZmluZWQoQ0hFQ0tfUkVTVUxUKQorICAgaW5GaWxlID0gImM6XFxzcGVleHRydW5rdGVzdFxcc2FtcGxlc1xcbWFsZS5zbmQiOworICAgZmluID0gZm9wZW4oaW5GaWxlLCAicmIiKTsKKyNlbmRpZgorICAgb3V0RmlsZSA9ICJjOlxcc3BlZXh0cnVua3Rlc3RcXHNhbXBsZXNcXG1hbGVvdXQ2eC5zbmQiOworICAgZm91dCA9IGZvcGVuKG91dEZpbGUsICJ3YisiKTsKKyAKKyAgIHNwZWV4X2JpdHNfaW5pdCgmYml0cyk7CisjaWZuZGVmIERFQ09ERV9PTkxZCisgICB3aGlsZSAoIWZlb2YoZmluKSkKKyAgIHsKKyAgICAgIGZyZWFkKGluX3Nob3J0LCBzaXplb2Yoc2hvcnQpLCBGUkFNRV9TSVpFLCBmaW4pOworICAgICAgaWYgKGZlb2YoZmluKSkKKyAgICAgICAgIGJyZWFrOworICAgICAgc3BlZXhfYml0c19yZXNldCgmYml0cyk7CisKKyAgICAgIHNwZWV4X2VuY29kZV9pbnQoc3QsIGluX3Nob3J0LCAmYml0cyk7CisgICAgICBuYkJpdHMgPSBzcGVleF9iaXRzX3dyaXRlKCZiaXRzLCBjYml0cywgMjAwKTsKKyAgICAgIGJpdENvdW50Kz1iaXRzLm5iQml0czsKKworICAgICAgZndyaXRlKGNiaXRzLCAxLCBuYkJpdHMsIGZiaXRzKTsKKyAgICAgIHNwZWV4X2JpdHNfcmV3aW5kKCZiaXRzKTsKKworI2Vsc2UgLyogREVDT0RFX09OTFkgKi8KKyAgIHdoaWxlICghZmVvZihmYml0cykpCisgICB7CisgICAgICBmcmVhZChjYml0cywgMSwgVEVTVEVOQ19CWVRFU19QRVJfRlJBTUUsIGZiaXRzKTsKKworICAgICAgaWYgKGZlb2YoZmJpdHMpKQorICAgICAgICAgYnJlYWs7CisKKyAgICAgIHNwZWV4X2JpdHNfcmVhZF9mcm9tKCZiaXRzLCBjYml0cywgVEVTVEVOQ19CWVRFU19QRVJfRlJBTUUpOworLy8gICAgICBiaXRDb3VudCs9MTYwOyAgLyogb25seSBjb3JyZWN0IGZvciA4a2JwcywgYnV0IGp1c3QgZm9yIHRoZSBwcmludGYgKi8KKyAgICAgIGJpdENvdW50Kz1iaXRzLm5iQml0czsKKyNlbmRpZgorICAgICAgCisgICAgICBzcGVleF9kZWNvZGVfaW50KGRlYywgJmJpdHMsIG91dF9zaG9ydCk7CisgICAgICBzcGVleF9iaXRzX3Jlc2V0KCZiaXRzKTsKKworICAgICAgZndyaXRlKCZvdXRfc2hvcnRbc2tpcF9ncm91cF9kZWxheV0sIHNpemVvZihzaG9ydCksIEZSQU1FX1NJWkUtc2tpcF9ncm91cF9kZWxheSwgZm91dCk7CisgICAgICBza2lwX2dyb3VwX2RlbGF5ID0gMDsKKyNpZiAxCisgICBmcHJpbnRmIChzdGRlcnIsICJCaXRzIHNvIGZhcjogJWx1IFxuIiwgYml0Q291bnQpOworI2VuZGlmCisgICB9CisgICBmcHJpbnRmIChzdGRlcnIsICJUb3RhbCBlbmNvZGVkIHNpemU6ICVsdSBiaXRzXG4iLCBiaXRDb3VudCk7CisgICBzcGVleF9lbmNvZGVyX2Rlc3Ryb3koc3QpOworICAgc3BlZXhfZGVjb2Rlcl9kZXN0cm95KGRlYyk7CisKKyNpZmRlZiBDSEVDS19SRVNVTFQgCisgICByZXdpbmQoZmluKTsKKyAgIHJld2luZChmb3V0KTsKKworICAgd2hpbGUgKCBGUkFNRV9TSVpFID09IGZyZWFkKGluX3Nob3J0LCBzaXplb2Yoc2hvcnQpLCBGUkFNRV9TSVpFLCBmaW4pIAorICAgICAgICAgICAmJgorICAgICAgICAgICBGUkFNRV9TSVpFID09ICBmcmVhZChvdXRfc2hvcnQsIHNpemVvZihzaG9ydCksIEZSQU1FX1NJWkUsZm91dCkgKQorICAgeworCWZsb2F0IHM9MCwgZT0wOworICAgICAgICBmb3IgKGk9MDtpPEZSQU1FX1NJWkU7KytpKSB7CisgICAgICAgICAgICBzICs9IChmbG9hdClpbl9zaG9ydFtpXSAqIGluX3Nob3J0W2ldOworICAgICAgICAgICAgZSArPSAoKGZsb2F0KWluX3Nob3J0W2ldLW91dF9zaG9ydFtpXSkgKiAoKGZsb2F0KWluX3Nob3J0W2ldLW91dF9zaG9ydFtpXSk7CisgICAgICAgIH0KKwlzZWdfc25yICs9IDEwKmxvZzEwKChzKzE2MCkvKGUrMTYwKSk7CisJc2lncG93ICs9IHM7CisJZXJycG93ICs9IGU7CisJc25yX2ZyYW1lcysrOworICAgfQorCisgICBzbnIgPSAxMCAqIGxvZzEwKCBzaWdwb3cgLyBlcnJwb3cgKTsKKyAgIHNlZ19zbnIgLz0gc25yX2ZyYW1lczsKKyAgIGZwcmludGYoc3RkZXJyLCJTTlIgPSAlZlxuc2VnbWVudGFsIFNOUiA9ICVmXG4iLHNuciwgc2VnX3Nucik7CisKKyNpZmRlZiBGSVhFRF9ERUJVRworICAgcHJpbnRmICgiVG90YWw6ICVmIE1JUFNcbiIsIChmbG9hdCkoMWUtNio1MCpzcHhfbWlwcy9zbnJfZnJhbWVzKSk7CisjZW5kaWYKKyNlbmRpZiAvKiBDSEVDS19SRVNVTFQgKi8KKyNpZiAhZGVmaW5lZChERUNPREVfT05MWSkgfHwgZGVmaW5lZChDSEVDS19SRVNVTFQpCisgICBmY2xvc2UoZmluKTsKKyNlbmRpZgorICAgZmNsb3NlKGZvdXQpOworICAgZmNsb3NlKGZiaXRzKTsKK30KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3RpL3VzZXJfbWlzYy5oIGIvM3JkcGFydHkvc3BlZXgvdGkvdXNlcl9taXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5NjQ5NAotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3RpL3VzZXJfbWlzYy5oCkBAIC0wLDAgKzEsMTI3IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDUgUHNpIFN5c3RlbXMsIEluYy4KKyAgIEF1dGhvcjogIEplYW4tTWFyYyBWYWxpbiAKKyAgIEZpbGU6IHVzZXJfbWlzYy5oCisgICBNZW1vcnkgQWxsb2NhdGlvbiBvdmVycmlkZXMgdG8gYWxsb3cgdXNlciBjb250cm9sIHJhdGhlciB0aGFuIEMgYWxsb2MvZnJlZS4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZkZWYgTUFOVUFMX0FMTE9DCisKKy8qIFRvIGF2b2lkIGNoYW5naW5nIHRoZSBTcGVleCBjYWxsIG1vZGVsLCB0aGlzIGZpbGUgcmVsaWVzIG9uIGZvdXIgc3RhdGljIHZhcmlhYmxlcyAKKyAgIFRoZSB1c2VyIG1haW4gY3JlYXRlcyB0d28gbGluZWFyIGJ1ZmZlcnMsIGFuZCBpbml0aWFsaXplcyBzcHhHbG9iYWxIZWFwL1NjcmF0Y2hQdHIgCisgICB0byBwb2ludCB0byB0aGUgc3RhcnQgb2YgdGhlIHR3byBidWZmZXJzLCBhbmQgaW5pdGlhbGl6ZXMgc3B4R2xvYmFsSGVhcC9TY3JhdGNoRW5kIAorICAgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IGFkZHJlc3MgZm9sbG93aW5nIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIHR3byBidWZmZXJzLgorICAgCisgICBUaGlzIG1lY2hhbmlzbSBhbGxvd3MsIGZvciBleGFtcGxlLCBkYXRhIGNhY2hpbmcgZm9yIG11bHRpY2hhbm5lbCBhcHBsaWNhdGlvbnMsIAorICAgd2hlcmUgdGhlIFNwZWV4IHN0YXRlIGlzIHN3YXBwZWQgZnJvbSBhIGxhcmdlIHNsb3cgbWVtb3J5IHRvIGEgc21hbGwgZmFzdCBtZW1vcnkgCisgICBlYWNoIHRpbWUgdGhlIGNvZGVjIHJ1bnMuCisgICAKKyAgIFBlcnNpc3RlbnQgZGF0YSBpcyBhbGxvY2F0ZWQgaW4gc3B4R2xvYmFsSGVhcCAoaW5zdGVhZCBvZiBjYWxsb2MpLCB3aGlsZSBzY3JhdGNoCisgICBkYXRhIGlzIGFsbG9jYXRlZCBpbiBzcHhHbG9iYWxTY3JhdGNoLgorKi8KKworZXh0ZXJuIGNoYXIgKnNweEdsb2JhbEhlYXBQdHIsICpzcHhHbG9iYWxIZWFwRW5kOyAKK2V4dGVybiBjaGFyICpzcHhHbG9iYWxTY3JhdGNoUHRyLCAqc3B4R2xvYmFsU2NyYXRjaEVuZDsKKworLyogTWFrZSBzdXJlIHRoYXQgYWxsIHN0cnVjdHVyZXMgYXJlIGFsaWduZWQgdG8gbGFyZ2VzdCB0eXBlICovCisjZGVmaW5lIEJMT0NLX01BU0sgICAgICAoc2l6ZW9mKGxvbmcgZG91YmxlKS0xKQorCisjZGVmaW5lIE9WRVJSSURFX1NQRUVYX0FMTE9DCit2b2lkICpzcGVleF9hbGxvYyAoaW50IHNpemUpCit7CisgICAgdm9pZCAqcHRyOworICAgIAorICAgIHB0ciA9ICh2b2lkICopICgoKGludClzcHhHbG9iYWxIZWFwUHRyICsgQkxPQ0tfTUFTSykgJiB+QkxPQ0tfTUFTSyk7ICAvL1N0YXJ0IG9uIDggYm91bmRhcnkKKworICAgIHNweEdsb2JhbEhlYXBQdHIgPSAoY2hhciAqKSgoaW50KXB0ciArIHNpemUpOwkvLyBVcGRhdGUgcG9pbnRlciB0byBuZXh0IGZyZWUgbG9jYXRpb24KKworICAgIGlmIChzcHhHbG9iYWxIZWFwUHRyID4gc3B4R2xvYmFsSGVhcEVuZCApIAorICAgIHsKKyNpZmRlZiBWRVJCT1NFX0FMTE9DCisJICAgIGZwcmludGYgKHN0ZGVyciwgImluc3VmZmljaWVudCBzcGFjZSBmb3IgcGVyc2lzdGVudCBhbGxvYyByZXF1ZXN0ICVkIGJ5dGVzXG4iLCBzaXplKTsKKyNlbmRpZgorICAgICAgIHJldHVybiAwOworICAgIH0KKyAgIAorI2lmZGVmIFZFUkJPU0VfQUxMT0MKKyAgICBmcHJpbnRmIChzdGRlcnIsICJQZXJzaXN0IEFsbG9jYXRlZCAlZCBjaGFycyBhdCAleCwgJWQgcmVtYWluaW5nXG4iLCBzaXplLCBwdHIsICgoaW50KXNweEdsb2JhbEhlYXBFbmQgLSAoaW50KXNweEdsb2JhbEhlYXBQdHIpKTsKKyNlbmRpZgorICAgIG1lbXNldChwdHIsIDAsIHNpemUpOworICAgIHJldHVybiBwdHI7Cit9CisKKyNkZWZpbmUgT1ZFUlJJREVfU1BFRVhfQUxMT0NfU0NSQVRDSAordm9pZCAqc3BlZXhfYWxsb2Nfc2NyYXRjaCAoaW50IHNpemUpCit7CisgICAgdm9pZCAqcHRyOworCisgICAgcHRyID0gKHZvaWQgKikgKCgoaW50KXNweEdsb2JhbFNjcmF0Y2hQdHIgKyBCTE9DS19NQVNLKSAmIH5CTE9DS19NQVNLKTsgIC8vU3RhcnQgb24gOCBib3VuZGFyeQorCisgICAgc3B4R2xvYmFsU2NyYXRjaFB0ciA9IChjaGFyICopKChpbnQpcHRyICsgc2l6ZSk7CS8vIFVwZGF0ZSBwb2ludGVyIHRvIG5leHQgZnJlZSBsb2NhdGlvbgorCisgICAgaWYgKHNweEdsb2JhbFNjcmF0Y2hQdHIgPiBzcHhHbG9iYWxTY3JhdGNoRW5kICkgCisgICAgeworI2lmZGVmIFZFUkJPU0VfQUxMT0MKKwkgICAgZnByaW50ZiAoc3RkZXJyLCAiaW5zdWZmaWNpZW50IHNwYWNlIGZvciBzY3JhdGNoIGFsbG9jIHJlcXVlc3QgJWQgYnl0ZXNcbiIsIHNpemUpOworI2VuZGlmCisgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgCisjaWZkZWYgVkVSQk9TRV9BTExPQworICAgIGZwcmludGYgKHN0ZGVyciwgIlNjcmF0Y2ggQWxsb2NhdGVkICVkIGNoYXJzIGF0ICV4LCAlZCByZW1haW5pbmdcbiIsIHNpemUsIHB0ciwgKChpbnQpc3B4R2xvYmFsU2NyYXRjaEVuZCAtIChpbnQpc3B4R2xvYmFsU2NyYXRjaFB0cikpOworI2VuZGlmCisgICAgbWVtc2V0KHB0ciwgMCwgc2l6ZSk7CisgICAgcmV0dXJuIHB0cjsKK30KKworI2RlZmluZSBPVkVSUklERV9TUEVFWF9SRUFMTE9DCit2b2lkICpzcGVleF9yZWFsbG9jICh2b2lkICpwdHIsIGludCBzaXplKQoreworI2lmZGVmIFZFUkJPU0VfQUxMT0MKKyAgIHNwZWV4X3dhcm5pbmcoInJlYWxsb2MgYXR0ZW1wdGVkLCBub3QgYWxsb3dlZCIpOworI2VuZGlmCisgICByZXR1cm4gMDsKK30KKworI2RlZmluZSBPVkVSUklERV9TUEVFWF9GUkVFCit2b2lkIHNwZWV4X2ZyZWUgKHZvaWQgKnB0cikKK3sKKyNpZmRlZiBWRVJCT1NFX0FMTE9DCisgICBzcGVleF93YXJuaW5nKCJhdCBzcGVleF9mcmVlIik7CisjZW5kaWYKK30KKyNkZWZpbmUgT1ZFUlJJREVfU1BFRVhfRlJFRV9TQ1JBVENICit2b2lkIHNwZWV4X2ZyZWVfc2NyYXRjaCAodm9pZCAqcHRyKQoreworI2lmZGVmIFZFUkJPU0VfQUxMT0MKKyAgIHNwZWV4X3dhcm5pbmcoImF0IHNwZWV4X2ZyZWVfc2NyYXRjaCIpOworI2VuZGlmCit9CisKKyNlbmRpZiAgICAvKiAhTUFOVUFMX0FMTE9DICovCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC90bXYvX2tpc3NfZmZ0X2d1dHNfdG0uaCBiLzNyZHBhcnR5L3NwZWV4L3Rtdi9fa2lzc19mZnRfZ3V0c190bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZjI4NjQKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC90bXYvX2tpc3NfZmZ0X2d1dHNfdG0uaApAQCAtMCwwICsxLDE4OCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA3IEhvbmcgWmhpcWlhbiAqLworLyoqCisgICBAZmlsZSBfa2lzc19mZnRfZ3V0c190bS5oCisgICBAYXV0aG9yIEhvbmcgWmhpcWlhbgorICAgQGJyaWVmIFZhcmlvdXMgY29tcGF0aWJpbGl0eSByb3V0aW5lcyBmb3IgU3BlZXggKFRyaU1lZGlhIHZlcnNpb24pCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBfS0lTU19GRlRfR1VUU19UTV8KKyNkZWZpbmUgX0tJU1NfRkZUX0dVVFNfVE1fCisKKyNpZmRlZiBUTV9BU00KKworI2luY2x1ZGUgPG9wcy9jdXN0b21fZGVmcy5oPgorCisjaWZkZWYgRklYRURfUE9JTlQKKworI3VuZGVmCXNyb3VuZAorI2RlZmluZSBzcm91bmQoeCkJc2V4MTYoKCh4KSArICgxPDwoRlJBQ0JJVFMtMSkpICkgPj4gRlJBQ0JJVFMpCisKKyN1bmRlZglNSU4KKyN1bmRlZglNQVgKKyNkZWZpbmUgTUlOKGEsYikJaW1pbihhLGIpCisjZGVmaW5lCU1BWChhLGIpCWltYXgoYSxiKQorCisjZGVmaW5lIFRNX01VTChyZXMsYSxiKQkJCQkJCQkJCQkJCQkJCQlcCisJewlyZWdpc3RlciBpbnQgYTAsIGExLCBiMCwgYjE7CQkJCQkJCQkJCQkJXAorCQkJCQkJCQkJCQkJCQkJCQkJCQkJXAorCQlhMAkgPSBzZXgxNigoYSkpOwkJCQkJCQkJCQkJCQkJCVwKKwkJYTEJID0gYXNyaSgxNiwoYSkpOwkJCQkJCQkJCQkJCQkJXAorCQliMAkgPSBzZXgxNigoYikpOwkJCQkJCQkJCQkJCQkJCVwKKwkJYjEJID0gYXNyaSgxNiwoYikpOwkJCQkJCQkJCQkJCQkJXAorCQkocmVzKT0gcGFjazE2bHNiKAkJCQkJCQkJCQkJCQkJCVwKKwkJCXNyb3VuZChpZmlyMTYoKGEpLGZ1bnNoaWZ0MigoYiksKGIpKSkpLAkJCQkJCQkJCVwKKwkJCXNyb3VuZChhMCpiMC1hMSpiMSkpOwkJCQkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJCQkJXAorCisjZGVmaW5lIFRNX0FERChyZXMsYSxiKQkJCQkJCQkJCQkJCQkJCQlcCisJewkocmVzKT1kc3BpZHVhbGFkZCgoYSksKGIpKTsJCQkJCQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCQkJCVwKKworI2RlZmluZSBUTV9TVUIocmVzLGEsYikJCQkJCQkJCQkJCQkJCQkJXAorCXsJKHJlcyk9ZHNwaWR1YWxzdWIoKGEpLChiKSk7CQkJCQkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCQkJCQlcCisKKyNkZWZpbmUgVE1fU0hSKHJlcyxhLHNoaWZ0KQkJCQkJCQkJCQkJCQkJCVwKKwl7CShyZXMpPWR1YWxhc3IoKGEpLChzaGlmdCkpOwkJCQkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJCQkJXAorCisjZGVmaW5lIFRNX0RJVihyZXMsYyxmcmFjKQkJCQkJCQkJCQkJCQkJCVwKKwl7CXJlZ2lzdGVyIGludCBjMSwgYzA7CQkJCQkJCQkJCQkJCQlcCisJCQkJCQkJCQkJCQkJCQkJCQkJCQlcCisJCWMxID0gYXNyaSgxNiwoYykpOwkJCQkJCQkJCQkJCQkJCVwKKwkJYzAgPSBzZXgxNigoYykpOwkJCQkJCQkJCQkJCQkJCVwKKwkJKHJlcykgPSBwYWNrMTZsc2Ioc3JvdW5kKGMxICogKDMyNzY3LyhmcmFjKSkpLCBzcm91bmQoYzAgKiAoMzI3NjcvKGZyYWMpKSkpO1wKKwl9CQkJCQkJCQkJCQkJCQkJCQkJCQlcCisKKyNkZWZpbmUgVE1fTkVHTVNCKHJlcywgYSkJCQkJCQkJCQkJCQkJCQlcCisJewkocmVzKSA9IHBhY2sxNmxzYigoaW5lZyhhc3JpKDE2LChhKSkpKSwgKGEpKTsJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCQkJCQlcCisKKyNlbHNlCisKKyN1bmRlZglNSU4KKyN1bmRlZglNQVgKKyNkZWZpbmUgTUlOKGEsYikJZm1pbihhLGIpCisjZGVmaW5lIE1BWChhLGIpCWZtYXgoYSxiKQorCisjZW5kaWYKKyNlbmRpZgorCisjdW5kZWYJQ0hFQ0tCVUYKKyNkZWZpbmUgQ0hFQ0tCVUYoYnVmLG5idWYsbikJCQkJCQkJCQkJCQkJXAorICAgIHsJCQkJCQkJCQkJCQkJCQkJCQkJXAorICAgICAgICBpZiAoIG5idWYgPCAoc2l6ZV90KShuKSApIHsJCQkJCQkJCQkJCQlcCisgICAgICAgICAgICBzcGVleF9mcmVlKGJ1Zik7CQkJCQkJCQkJCQkJCVwKKyAgICAgICAgICAgIGJ1ZiA9IChraXNzX2ZmdF9jcHgqKUtJU1NfRkZUX01BTExPQyhzaXplb2Yoa2lzc19mZnRfY3B4KSoobikpOyAJXAorICAgICAgICAgICAgbmJ1ZiA9IChzaXplX3QpKG4pOwkJCQkJCQkJCQkJCQlcCisgICAgICAgIH0JCQkJCQkJCQkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJCQlcCisKKyN1bmRlZgkgQ19BREQKKyNkZWZpbmUgIENfQUREKCByZXMsIGEsYikJCQkJCQkJCQkJCQkJCVwKKyAgIHsJCQkJCQkJCQkJCQkJCQkJCQkJXAorCSAgICBDSEVDS19PVkVSRkxPV19PUCgoYSkuciwrLChiKS5yKQkJCQkJCQkJCQlcCisJICAgIENIRUNLX09WRVJGTE9XX09QKChhKS5pLCssKGIpLmkpCQkJCQkJCQkJCVwKKwkgICAgKHJlcykucj0oYSkucisoYikucjsgIChyZXMpLmk9KGEpLmkrKGIpLmk7CQkJCQkJCQlcCisgICAgfQkJCQkJCQkJCQkJCQkJCQkJCQlcCisKKworI3VuZGVmCSBDX1NVQgorI2RlZmluZSAgQ19TVUIoIHJlcywgYSxiKQkJCQkJCQkJCQkJCQkJXAorICAgIHsJCQkJCQkJCQkJCQkJCQkJCQkJXAorCSAgICBDSEVDS19PVkVSRkxPV19PUCgoYSkuciwtLChiKS5yKQkJCQkJCQkJCQlcCisJICAgIENIRUNLX09WRVJGTE9XX09QKChhKS5pLC0sKGIpLmkpCQkJCQkJCQkJCVwKKwkgICAgKHJlcykucj0oYSkuci0oYikucjsgIChyZXMpLmk9KGEpLmktKGIpLmk7CQkJCQkJCQlcCisgICAgfQkJCQkJCQkJCQkJCQkJCQkJCQlcCisKKyN1bmRlZglDX0FERFRPCisjZGVmaW5lIENfQUREVE8oIHJlcyAsIGEpCQkJCQkJCQkJCQkJCQlcCisgICAgewkJCQkJCQkJCQkJCQkJCQkJCQlcCisJICAgIENIRUNLX09WRVJGTE9XX09QKChyZXMpLnIsKywoYSkucikJCQkJCQkJCQkJXAorCSAgICBDSEVDS19PVkVSRkxPV19PUCgocmVzKS5pLCssKGEpLmkpCQkJCQkJCQkJCVwKKwkgICAgKHJlcykuciArPSAoYSkucjsgIChyZXMpLmkgKz0gKGEpLmk7CQkJCQkJCQkJXAorICAgIH0JCQkJCQkJCQkJCQkJCQkJCQkJXAorCisjdW5kZWYJQ19TVUJGUk9NCisjZGVmaW5lIENfU1VCRlJPTSggcmVzLCBhKQkJCQkJCQkJCQkJCQkJXAorICAgIHsJCQkJCQkJCQkJCQkJCQkJCQkJXAorCSAgICBDSEVDS19PVkVSRkxPV19PUCgocmVzKS5yLC0sKGEpLnIpCQkJCQkJCQkJCVwKKwkgICAgQ0hFQ0tfT1ZFUkZMT1dfT1AoKHJlcykuaSwtLChhKS5pKQkJCQkJCQkJCQlcCisJICAgIChyZXMpLnIgLT0gKGEpLnI7ICAocmVzKS5pIC09IChhKS5pOwkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCQkJCVwKKworI3VuZGVmCSBrZl9jZXhwCisjZGVmaW5lICBrZl9jZXhwKHgscGhhc2UpCQkJCQkJCQkJCQkJCQlcCisJewkoeCktPnIgPSBLSVNTX0ZGVF9DT1MocGhhc2UpOwkJCQkJCQkJCQkJXAorCQkoeCktPmkgPSBLSVNTX0ZGVF9TSU4ocGhhc2UpOyB9CQkJCQkJCQkJCQlcCisKKyN1bmRlZgkga2ZfY2V4cDIKKyNkZWZpbmUgIGtmX2NleHAyKHgscGhhc2UpCQkJCQkJCQkJCQkJCQlcCisgICAgewkoeCktPnIgPSBzcHhfY29zX25vcm0oKHBoYXNlKSk7CQkJCQkJCQkJCQlcCisJCSh4KS0+aSA9IHNweF9jb3Nfbm9ybSgocGhhc2UpLTMyNzY4KTsgfQkJCQkJCQkJCVwKKworCisjaWZkZWYgRklYRURfUE9JTlQKKworI3VuZGVmCUNfTVVMCisjZGVmaW5lIENfTVVMKG0sYSxiKQkJCQkJCQkJCQkJCQkJCVwKKwl7CShtKS5yID0gc3JvdW5kKCBzbXVsKChhKS5yLChiKS5yKSAtIHNtdWwoKGEpLmksKGIpLmkpICk7CQkJCVwKKwkJKG0pLmkgPSBzcm91bmQoIHNtdWwoKGEpLnIsKGIpLmkpICsgc211bCgoYSkuaSwoYikucikgKTsgfQkJCQlcCisKKyN1bmRlZglDX0ZJWERJVgorI2RlZmluZSBDX0ZJWERJVihjLGRpdikJCQkJCQkJCQkJCQkJCQlcCisJeyAgIERJVlNDQUxBUiggKGMpLnIgLCBkaXYpOwkJCQkJCQkJCQkJCVwKKwkJRElWU0NBTEFSKCAoYykuaSAgLCBkaXYpOyB9CQkJCQkJCQkJCQkJXAorCisjdW5kZWYJQ19NVUxCWVNDQUxBUgorI2RlZmluZSBDX01VTEJZU0NBTEFSKCBjLCBzICkJCQkJCQkJCQkJCQkJXAorICAgIHsJKGMpLnIgPSAgc3JvdW5kKCBzbXVsKCAoYykuciAsIHMgKSApIDsJCQkJCQkJCQlcCisgICAgICAgIChjKS5pID0gIHNyb3VuZCggc211bCggKGMpLmkgLCBzICkgKSA7IH0JCQkJCQkJCVwKKworI2Vsc2UKKworI3VuZGVmCUNfTVVMCisjZGVmaW5lIENfTVVMKG0sYSxiKQkJCQkJCQkJCQkJCQkJCVwKKwl7CShtKS5yID0gKGEpLnIqKGIpLnIgLSAoYSkuaSooYikuaTsJCQkJCQkJCQkJXAorICAgICAgICAobSkuaSA9IChhKS5yKihiKS5pICsgKGEpLmkqKGIpLnI7IH0JCQkJCQkJCQlcCisKKworI3VuZGVmCUNfTVVMQllTQ0FMQVIKKyNkZWZpbmUgQ19NVUxCWVNDQUxBUiggYywgcyApCQkJCQkJCQkJCQkJCVwKKyAgICB7CShjKS5yICo9IChzKTsJCQkJCQkJCQkJCQkJCQlcCisgICAgICAgIChjKS5pICo9IChzKTsgfQkJCQkJCQkJCQkJCQkJCVwKKworCisKKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvdG12L2NiX3NlYXJjaF90bS5oIGIvM3JkcGFydHkvc3BlZXgvdG12L2NiX3NlYXJjaF90bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZWM3MTEKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC90bXYvY2Jfc2VhcmNoX3RtLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNyBIb25nIFpoaXFpYW4gKi8KKy8qKgorICAgQGZpbGUgY2Jfc2VhcmNoX3RtLmgKKyAgIEBhdXRob3IgSG9uZyBaaGlxaWFuCisgICBAYnJpZWYgVmFyaW91cyBjb21wYXRpYmlsaXR5IHJvdXRpbmVzIGZvciBTcGVleCAoVHJpTWVkaWEgdmVyc2lvbikKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSA8b3BzL2N1c3RvbV9kZWZzLmg+CisjaW5jbHVkZSAicHJvZmlsZV90bS5oIgorCisjaWZkZWYgRklYRURfUE9JTlQKKworI2RlZmluZSBPVkVSUklERV9DT01QVVRFX1dFSUdIVEVEX0NPREVCT09LCitzdGF0aWMgdm9pZCBjb21wdXRlX3dlaWdodGVkX2NvZGVib29rKAorCWNvbnN0IHNpZ25lZCBjaGFyICogcmVzdHJpY3Qgc2hhcGVfY2IsIAorCWNvbnN0IEludDE2ICogcmVzdHJpY3QgciwgCisJSW50MTYgKiByZXN0cmljdCByZXNwLCAKKwlJbnQxNiAqIHJlc3RyaWN0IHJlc3AyLCAKKwlJbnQzMiAqIHJlc3RyaWN0IEUsIAorCWludCBzaGFwZV9jYl9zaXplLCBpbnQgc3VidmVjdF9zaXplLCBjaGFyICpzdGFjaykKK3sKKwlyZWdpc3RlciBpbnQgaSwgajsKKwlyZWdpc3RlciBpbnQgcXVhZHNpemU7CisKKwlUTURFQlVHX0FMSUdOTUVNKHIpOworCVRNREVCVUdfQUxJR05NRU0ocmVzcCk7CisJVE1ERUJVR19BTElHTk1FTShyZXNwMik7CisKKwlDT01QVVRFV0VJR0hURURDT0RFQk9PS19TVEFSVCgpOworCisJcXVhZHNpemUgPSBzdWJ2ZWN0X3NpemUgPDwgMjsKKworCWZvciAoIGk9MCA7IGk8c2hhcGVfY2Jfc2l6ZSA7IGkrPTQgKQorCXsJcmVnaXN0ZXIgaW50IGUwLCBlMSwgZTIsIGUzOworCQkKKwkJZTAgPSBlMSA9IGUyID0gZTMgPSAwOworCQlmb3IoIGo9MCA7IGo8c3VidmVjdF9zaXplIDsgKytqICkKKwkJeworCQkJcmVnaXN0ZXIgaW50IGssIHJyOworCQkJcmVnaXN0ZXIgaW50IHJlc2owLCByZXNqMSwgcmVzajIsIHJlc2ozOworCQkJCisJCQlyZXNqMCA9IHJlc2oxID0gcmVzajIgPSByZXNqMyA9IDA7CisKKwkJCWZvciAoIGs9MCA7IGs8PWogOyArK2sgKQorCQkJewlyciA9IHJbai1rXTsKKwkJCQkKKwkJCQlyZXNqMCArPSBzaGFwZV9jYltrXSAqIHJyOworCQkJCXJlc2oxICs9IHNoYXBlX2NiW2src3VidmVjdF9zaXplXSAqIHJyOworCQkJCXJlc2oyICs9IHNoYXBlX2NiW2srMipzdWJ2ZWN0X3NpemVdICogcnI7CisJCQkJcmVzajMgKz0gc2hhcGVfY2JbayszKnN1YnZlY3Rfc2l6ZV0gKiBycjsKKwkJCX0KKworCQkJcmVzajAgPj49IDEzOworCQkJcmVzajEgPj49IDEzOworCQkJcmVzajIgPj49IDEzOworCQkJcmVzajMgPj49IDEzOworCisJCQllMCArPSByZXNqMCAqIHJlc2owOworCQkJZTEgKz0gcmVzajEgKiByZXNqMTsKKwkJCWUyICs9IHJlc2oyICogcmVzajI7CisJCQllMyArPSByZXNqMyAqIHJlc2ozOworCQkJCisJCQlyZXNwW2pdCQkJCQk9IHJlc2owOworCQkJcmVzcFtqK3N1YnZlY3Rfc2l6ZV0JPSByZXNqMTsKKwkJCXJlc3BbaisyKnN1YnZlY3Rfc2l6ZV0JPSByZXNqMjsKKwkJCXJlc3BbaiszKnN1YnZlY3Rfc2l6ZV0JPSByZXNqMzsKKwkJfQorCisJCUVbaV0JCT0gZTA7CisJCUVbaSsxXQkJPSBlMTsKKwkJRVtpKzJdCQk9IGUyOworCQlFW2krM10JCT0gZTM7CisKKwkJcmVzcAkJKz0gcXVhZHNpemU7CisJCXNoYXBlX2NiCSs9IHF1YWRzaXplOworCX0KKwkKKyNpZm5kZWYJUkVNQVJLX09OCisJKHZvaWQpcmVzcDI7CisJKHZvaWQpc3RhY2s7CisjZW5kaWYKKworCUNPTVBVVEVXRUlHSFRFRENPREVCT09LX1NUT1AoKTsKK30KKworI2RlZmluZSBPVkVSUklERV9UQVJHRVRfVVBEQVRFCitzdGF0aWMgaW5saW5lIHZvaWQgdGFyZ2V0X3VwZGF0ZShJbnQxNiAqIHJlc3RyaWN0IHQsIEludDE2IGcsIEludDE2ICogcmVzdHJpY3QgciwgaW50IGxlbikKK3sKKwlyZWdpc3RlciBpbnQgbjsKKwlyZWdpc3RlciBpbnQgZ3IxLCBncjIsIHQxLCB0MiwgcjEsIHIyOworCXJlZ2lzdGVyIGludCBxdWFkc2l6ZTsKKworCVRBUkdFVFVQREFURV9TVEFSVCgpOworCisJcXVhZHNpemUgPSBsZW4gJiAweEZGRkZGRkZDOworCQorCWZvciAoIG49MDsgbjxxdWFkc2l6ZSA7IG4rPTQgKQorCXsJZ3IxID0gcGFjazE2bHNiKFBTSFIzMigoZyAqIHJbbl0pLDEzKSAgLCBQU0hSMzIoKGcgKiByW24rMV0pLDEzKSk7CisJCWdyMiA9IHBhY2sxNmxzYihQU0hSMzIoKGcgKiByW24rMl0pLDEzKSwgUFNIUjMyKChnICogcltuKzNdKSwxMykpOworCQkKKwkJdDEJPSBwYWNrMTZsc2IodFtuXSwgIHRbbisxXSk7CisJCXQyCT0gcGFjazE2bHNiKHRbbisyXSx0W24rM10pOworCisJCXIxCT0gZHNwaWR1YWxzdWIodDEsIGdyMSk7CisJCXIyCT0gZHNwaWR1YWxzdWIodDIsIGdyMik7CisKKwkJdFtuXSAJPSBhc3JpKDE2LHIxKTsKKwkJdFtuKzFdCT0gc2V4MTYocjEpOworCQl0W24rMl0JPSBhc3JpKDE2LHIyKTsKKwkJdFtuKzNdCT0gc2V4MTYocjIpOworCX0KKworCWZvciAoIG49cXVhZHNpemUgOyBuPGxlbiA7ICsrbiApCisJewl0W25dID0gU1VCMTYodFtuXSxQU0hSMzIoTVVMVDE2XzE2KGcscltuXSksMTMpKTsKKwl9CisKKwlUQVJHRVRVUERBVEVfU1RPUCgpOworfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvdG12L2NvbmZpZy5oIGIvM3JkcGFydHkvc3BlZXgvdG12L2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMWU2OGUKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC90bXYvY29uZmlnLmgKQEAgLTAsMCArMSw5OCBAQAorI2lmbmRlZiBfQ09ORklHX0hfCisjZGVmaW5lIF9DT05GSUdfSF8KKworI2RlZmluZSBVU0VfQ09NUEFDVF9LSVNTX0ZGVAorLy8jZGVmaW5lIFVTRV9LSVNTX0ZGVAorCisjaWZkZWYgV0lOMzIKKworLy8jZGVmaW5lCQlGSVhFRF9QT0lOVAorCisjZGVmaW5lIAlpbmxpbmUgX19pbmxpbmUKKyNkZWZpbmUgCXJlc3RyaWN0CisKKyNlbGlmIGRlZmluZWQgKF9fVENTX18pCisKKyNkZWZpbmUJCUZJWEVEX1BPSU5UCisjZGVmaW5lCQlQUkVQUk9DRVNTX01ERl9GTE9BVAorI2RlZmluZQkJVE1fQVNNCisKKyNkZWZpbmUJCVRNX0RFQlVHTUVNX0FMSUdOTk1FTlQJCQkJCQkxCisKKyNkZWZpbmUJCVRNX1BST0ZJTEUJCQkJCQkJCQkxCQorI2RlZmluZQkJVE1fUFJPRklMRV9GSVJNRU0xNgkJCQkJCQkwCQorI2RlZmluZQkJVE1fUFJPRklMRV9JSVJNRU0xNgkJCQkJCQkwCQorI2RlZmluZQkJVE1fUFJPRklMRV9GSUxURVJNRU0xNgkJCQkJCTAJCisjZGVmaW5lCQlUTV9QUk9GSUxFX1ZRTkJFU1QJCQkJCQkJMAkKKyNkZWZpbmUJCVRNX1BST0ZJTEVfVlFOQkVTVFNJR04JCQkJCQkwCQorI2RlZmluZQkJVE1fUFJPRklMRV9DT01QVVRFUVVBTlRXRUlHSFRTCQkJCTAJCisjZGVmaW5lCQlUTV9QUk9GSUxFX0xTUFFVQU5UCQkJCQkJCTAJCisjZGVmaW5lCQlUTV9QUk9GSUxFX0xTUFdFSUdIVFFVQU5UCQkJCQkwCisjZGVmaW5lCQlUTV9QUk9GSUxFX0xTUEVORk9SQ0VNQVJHSU4JCQkJCTAKKyNkZWZpbmUJCVRNX1BST0ZJTEVfTFNQVE9MUEMJCQkJCQkJMAorI2RlZmluZQkJVE1fUFJPRklMRV9JTk5FUlBST0QJCQkJCQkwCQorI2RlZmluZQkJVE1fUFJPRklMRV9QSVRDSFhDT1JSCQkJCQkJMAkKKyNkZWZpbmUJCVRNX1BST0ZJTEVfTFNQX0lOVEVSUE9MQVRFCQkJCQkwCQorI2RlZmluZQkJVE1fUFJPRklMRV9DSEVCUE9MWUVWQQkJCQkJCTAJCisjZGVmaW5lCQlUTV9QUk9GSUxFX0NPTVBVVEVXRUlHSFRFRENPREVCT09LCQkJMAkKKyNkZWZpbmUJCVRNX1BST0ZJTEVfVEFSR0VUVVBEQVRFCQkJCQkJMAkKKyNkZWZpbmUJCVRNX1BST0ZJTEVfU1BYQVVUT0NPUlIJCQkJCQkwCisjZGVmaW5lCQlUTV9QUk9GSUxFX0NPTVBVVEVQSVRDSEVSUk9SCQkJCTAKKyNkZWZpbmUJCVRNX1BST0ZJTEVfQ09NUFVURVJNUzE2CQkJCQkJMAorI2RlZmluZQkJVE1fUFJPRklMRV9OT1JNQUxJWkUxNgkJCQkJCTAKKyNkZWZpbmUJCVRNX1BST0ZJTEVfQldMUEMJCQkJCQkJMAorI2RlZmluZQkJVE1fUFJPRklMRV9ISUdIUEFTUwkJCQkJCQkwCisjZGVmaW5lCQlUTV9QUk9GSUxFX1NJR05BTE1VTAkJCQkJCTAKKyNkZWZpbmUJCVRNX1BST0ZJTEVfU0lHTkFMRElWCQkJCQkJMAorI2RlZmluZQkJVE1fUFJPRklMRV9DT01QVVRFSU1QVUxTRVJFU1BPTlNFCQkJMAorI2RlZmluZQkJVE1fUFJPRklMRV9QSVRDSEdBSU5TRUFSQ0gzVEFQVlEJCQkwCisjZGVmaW5lCQlUTV9QUk9GSUxFX09QRU5MT09QTkJFU1RQSVRDSAkJCQkwCisjZGVmaW5lCQlUTV9QUk9GSUxFX1BSRVBST0NFU1NBTkFMWVNJUwkJCQkwCisjZGVmaW5lCQlUTV9QUk9GSUxFX1VQREFURU5PSVNFUFJPQgkJCQkJMAorI2RlZmluZQkJVE1fUFJPRklMRV9DT01QVVRFR0FJTkZMT09SCQkJCQkwCisjZGVmaW5lCQlUTV9QUk9GSUxFX0ZJTFRFUkRDTk9UQ0gxNgkJCQkJMAorI2RlZmluZQkJVE1fUFJPRklMRV9NREZJTk5FUlBST0QJCQkJCQkwCisjZGVmaW5lCQlUTV9QUk9GSUxFX1NQRUNUUkFMTVVMQUNDVU0JCQkJCTAKKyNkZWZpbmUJCVRNX1BST0ZJTEVfV0VJR0hURURTUEVDVFJBTE1VTENPTkoJCQkwCisjZGVmaW5lCQlUTV9QUk9GSUxFX01ERkFESlVTVFBST1AJCQkJCTAKKyNkZWZpbmUJCVRNX1BST0ZJTEVfU1BFRVhFQ0hPR0VUUkVTSURVQUwJCQkJMAorI2RlZmluZQkJVE1fUFJPRklMRV9NQVhJTUlaRVJBTkdFCQkJCQkwCisjZGVmaW5lCQlUTV9QUk9GSUxFX1JFTk9STVJBTkdFCQkJCQkJMAorI2RlZmluZQkJVE1fUFJPRklMRV9QT1dFUlNQRUNUUlVNCQkJCQkwCisjZGVmaW5lCQlUTV9QUk9GSUxFX1FNRlNZTlRICQkJCQkJCTAKKyNkZWZpbmUJCVRNX1BST0ZJTEVfUU1GREVDT01QCQkJCQkJMAorI2RlZmluZQkJVE1fUFJPRklMRV9GSUxURVJCQU5LQ09NUFVURUJBTkszMgkJCTAKKyNkZWZpbmUJCVRNX1BST0ZJTEVfRklMVEVSQkFOS0NPTVBVVEVQU0QxNgkJCTAKKworI2RlZmluZQkJVE1fVU5ST0xMCQkJCQkJCQkJMQorI2RlZmluZQkJVE1fVU5ST0xMX0ZJTFRFUgkJCQkJCQkxCisjZGVmaW5lCQlUTV9VTlJPTExfSUlSCQkJCQkJCQkxCisjZGVmaW5lCQlUTV9VTlJPTExfRklSCQkJCQkJCQkxCisjZGVmaW5lCQlUTV9VTlJPTExfSElHSFBBU1MJCQkJCQkJMQorI2RlZmluZQkJVE1fVU5ST0xMX1NJR05BTE1VTAkJCQkJCQkxCisjZGVmaW5lCQlUTV9VTlJPTExfU0lHTkFMRElWCQkJCQkJCTEKKyNkZWZpbmUJCVRNX1VOUk9MTF9WUU5CRVNUCQkJCQkJCTEKKyNkZWZpbmUJCVRNX1VOUk9MTF9WUVNJR05OQkVTVAkJCQkJCTEKKyNkZWZpbmUJCVRNX1VOUk9MTF9fU1BYQVVUT0NPUlIJCQkJCQkxCisjZGVmaW5lCQlUTV9VTlJPTExfQ09NUFVURVJNUzE2CQkJCQkJMQorI2RlZmluZQkJVE1fVU5ST0xMX0NPTVBVVEVJTVBVTFNFUkVTUE9OU0UJCQkxCisjZGVmaW5lCQlUTV9VTlJPTExfUU1GU1lOVEgJCQkJCQkJMQorI2RlZmluZQkJVE1fVU5ST0xMX1BJVENIR0FJTlNFQVJDSDNUQVBWUQkJCQkxCisjZGVmaW5lCQlUTV9VTlJPTExfT1BFTkxPT1BOQkVTVFBJVENICQkJCTEKKyNkZWZpbmUJCVRNX1VOUk9MTF9GSUxURVJCQU5LQ09NUFVURUJBTkszMgkJCTEKKyNkZWZpbmUJCVRNX1VOUk9MTF9GSUxURVJCQU5LQ09NUFVURVBTRDE2CQkJMQorI2RlZmluZQkJVE1fVU5ST0xMX1NQRUVYUFJFUFJPQ0VTU1JVTgkJCQkxCisjZGVmaW5lCQlUTV9VTlJPTExfUFJFUFJPQ0VTU0FOQUxZU0lTCQkJCTEKKyNkZWZpbmUJCVRNX1VOUk9MTF9VUERBVEVOT0lTRVBST0IJCQkJCTEKKyNkZWZpbmUJCVRNX1VOUk9MTF9DT01QVVRFR0FJTkZMT09SCQkJCQkxCisjZGVmaW5lCQlUTV9VTlJPTExfU1BFRVhFQ0hPR0VUUkVTSURVQUwJCQkJMQorI2RlZmluZQkJVE1fVU5ST0xMX1NQRUVYRUNIT0NBTkNFTExBVElPTgkJCQkxCisjZGVmaW5lCQlUTV9VTlJPTExfRklMVEVSRENOT1RDSDE2CQkJCQkxCisjZGVmaW5lCQlUTV9VTlJPTExfTURGSU5ORVJQUk9EVUNUCQkJCQkxCisjZGVmaW5lCQlUTV9VTlJPTExfU1BFQ1RSQUxNVUxBQ0NVTQkJCQkJMQorI2RlZmluZQkJVE1fVU5ST0xMX01ERkFESlVTVFBST1AJCQkJCQkxCisKKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvdG12L2ZmdHdyYXBfdG0uaCBiLzNyZHBhcnR5L3NwZWV4L3Rtdi9mZnR3cmFwX3RtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA2Mzg2NQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3Rtdi9mZnR3cmFwX3RtLmgKQEAgLTAsMCArMSwyMzMgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNyBIb25nIFpoaXFpYW4gKi8KKy8qKgorICAgQGZpbGUgZmZ0d3JhcF90bS5oCisgICBAYXV0aG9yIEhvbmcgWmhpcWlhbgorICAgQGJyaWVmIFZhcmlvdXMgY29tcGF0aWJpbGl0eSByb3V0aW5lcyBmb3IgU3BlZXggKFRyaU1lZGlhIHZlcnNpb24pCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKyNpbmNsdWRlIDxvcHMvY3VzdG9tX2RlZnMuaD4KKyNpbmNsdWRlICJwcm9maWxlX3RtLmgiCisKKyNpZmRlZiBGSVhFRF9QT0lOVAorCisjZGVmaW5lIE9WRVJSSURFX01BWElNSVpFX1JBTkdFCitzdGF0aWMgaW50IG1heGltaXplX3JhbmdlKEludDE2ICppbiwgSW50MTYgKm91dCwgaW50IGJvdW5kLCBpbnQgbGVuKQoreworICAgCXJlZ2lzdGVyIGludCBtYXhfdmFsPTA7CisJcmVnaXN0ZXIgaW50IHNoaWZ0PTA7CisJcmVnaXN0ZXIgaW50IGksIGo7CisKKwlUTURFQlVHX0FMSUdOTUVNKGluKTsKKwlUTURFQlVHX0FMSUdOTUVNKG91dCk7CisKKwlNQVhJTUlaRVJBTkdFX1NUQVJUKCk7CisKKwlsZW4gPj49IDE7CisKKwlmb3IgKCBpPTAgOyBpPGxlbiA7IGkrPTQgKQorCXsKKwkJcmVnaXN0ZXIgaW50IHgxMCwgeDMyLCB4NTQsIHg3NjsKKworCQl4MTAgPSBsZDMyeChpbixpKTsKKwkJeDMyID0gbGQzMngoaW4saSsxKTsKKwkJeDU0ID0gbGQzMngoaW4saSsyKTsKKwkJeDc2ID0gbGQzMngoaW4saSszKTsKKwkJCisJCXgxMCA9IGRzcGlkdWFsYWJzKHgxMCk7CisJCXgzMiA9IGRzcGlkdWFsYWJzKHgzMik7CisJCXg1NCA9IGRzcGlkdWFsYWJzKHg1NCk7CisJCXg3NiA9IGRzcGlkdWFsYWJzKHg3Nik7CisJCQorCQl4MTAgPSBpbWF4KHNleDE2KHgxMCksIGFzcmkoMTYseDEwKSk7CisJCXgzMiA9IGltYXgoc2V4MTYoeDMyKSwgYXNyaSgxNix4MzIpKTsKKwkJeDU0ID0gaW1heChzZXgxNih4NTQpLCBhc3JpKDE2LHg1NCkpOworCQl4NzYgPSBpbWF4KHNleDE2KHg3NiksIGFzcmkoMTYseDc2KSk7CisKKwkJbWF4X3ZhbCA9IGltYXgobWF4X3ZhbCx4MTApOworCQltYXhfdmFsID0gaW1heChtYXhfdmFsLHgzMik7CisJCW1heF92YWwgPSBpbWF4KG1heF92YWwseDU0KTsKKwkJbWF4X3ZhbCA9IGltYXgobWF4X3ZhbCx4NzYpOworCX0KKworCXdoaWxlICggbWF4X3ZhbCA8PSAoYm91bmQ+PjEpICYmIG1heF92YWwgIT0gMCApCisJewltYXhfdmFsIDw8PSAxOworCQlzaGlmdCsrOworCX0KKworCWlmICggc2hpZnQgIT0gMCApCisJeworCQlmb3IgKCBpPTAsaj0wIDsgaTxsZW4gOyBpKz00LGorPTE2ICkKKwkJeworCQkJcmVnaXN0ZXIgaW50IHgxMCwgeDMyLCB4NTQsIHg3NjsKKworCQkJeDEwID0gbGQzMngoaW4saSk7CisJCQl4MzIgPSBsZDMyeChpbixpKzEpOworCQkJeDU0ID0gbGQzMngoaW4saSsyKTsKKwkJCXg3NiA9IGxkMzJ4KGluLGkrMyk7CisKKwkJCXgxMCA9IGR1YWxhc2woeDEwLCBzaGlmdCk7CisJCQl4MzIgPSBkdWFsYXNsKHgzMiwgc2hpZnQpOworCQkJeDU0ID0gZHVhbGFzbCh4NTQsIHNoaWZ0KTsKKwkJCXg3NiA9IGR1YWxhc2woeDc2LCBzaGlmdCk7CisKKwkJCXN0MzJkKGosb3V0LHgxMCk7CisJCQlzdDMyZChqKzQsb3V0LHgzMik7CisJCQlzdDMyZChqKzgsb3V0LHg1NCk7CisJCQlzdDMyZChqKzEyLG91dCx4NzYpOworCQl9ICAgCisJfQorCisJTUFYSU1JWkVSQU5HRV9TVE9QKCk7CisKKwlyZXR1cm4gc2hpZnQ7Cit9CisKKyNkZWZpbmUgT1ZFUlJJREVfUkVOT1JNX1JBTkdFCitzdGF0aWMgdm9pZCByZW5vcm1fcmFuZ2UoSW50MTYgKmluLCBJbnQxNiAqb3V0LCBpbnQgc2hpZnQsIGludCBsZW4pCit7CisJcmVnaXN0ZXIgaW50IGksIGosIHMsIGw7CisKKwlUTURFQlVHX0FMSUdOTUVNKGluKTsKKwlUTURFQlVHX0FMSUdOTUVNKG91dCk7CisKKwlSRU5PUk1SQU5HRV9TVEFSVCgpOworCisJcyA9ICgxPDwoKHNoaWZ0KSk+PjEpOworCXMgPSBwYWNrMTZsc2IocyxzKTsKKworCWxlbiA+Pj0gMTsKKwlsID0gbGVuICYgKGludCkweEZGRkZGRkZFOworCisgICAJZm9yICggaT0wLGo9MCA7IGk8bDsgaSs9MixqKz04ICkKKwl7CisJCXJlZ2lzdGVyIGludCB4MTAsIHgzMjsKKworCQl4MTAgPSBsZDMyeChpbixpKTsKKwkJeDMyID0gbGQzMngoaW4saSsxKTsKKworCQl4MTAgPSBkc3BpZHVhbGFkZCh4MTAsIHMpOworCQl4MzIgPSBkc3BpZHVhbGFkZCh4MzIsIHMpOworCisJCXgxMCA9IGR1YWxhc3IoeDEwLCBzaGlmdCk7CisJCXgzMiA9IGR1YWxhc3IoeDMyLCBzaGlmdCk7CisKKwkJc3QzMmQoaixvdXQseDEwKTsKKwkJc3QzMmQoais0LG91dCx4MzIpOworCX0KKworCWlmICggbGVuICYgKGludCkweDAxICkKKwl7CisJCXJlZ2lzdGVyIGludCB4MTA7CisKKwkJeDEwID0gbGQzMngoaW4saSk7CisJCXgxMCA9IGRzcGlkdWFsYWRkKHgxMCwgcyk7CisJCXgxMCA9IGR1YWxhc3IoeDEwLCBzaGlmdCk7CisJCXN0MzJkKGosb3V0LHgxMCk7CisJfQorCisJUkVOT1JNUkFOR0VfU1RPUCgpOworfQorCisjZW5kaWYKKworI2lmZGVmIFVTRV9DT01QQUNUX0tJU1NfRkZUIAorI2lmZGVmIEZJWEVEX1BPSU5UCisKKyNkZWZpbmUgT1ZFUlJJREVfUE9XRVJfU1BFQ1RSVU0KK3ZvaWQgcG93ZXJfc3BlY3RydW0oY29uc3Qgc3B4X3dvcmQxNl90ICpYLCBzcHhfd29yZDMyX3QgKnBzLCBpbnQgTikKK3sKKwlyZWdpc3RlciBpbnQgeDEwLCB4MzIsIHg1NCwgeDc2LCAqeDsKKwlyZWdpc3RlciBpbnQgaTsKKworCXggPSAoaW50KikoWC0xKTsKKworCVRNREVCVUdfQUxJR05NRU0oeCk7CisKKwlQT1dFUlNQRUNUUlVNX1NUQVJUKCk7CisKKwl4NzYgPSAwOworCXBzWzBdID0gTVVMVDE2XzE2KFhbMF0sWFswXSk7CisJTiA+Pj0gMTsKKyAgIAorCWZvciggaT0xIDsgaTxOIDsgaSs9NCApCisJewkKKwkJeDEwID0gbGQzMngoeCwgaSk7CisJCXgzMiA9IGxkMzJ4KHgsIGkrMSk7CisJCXg1NCA9IGxkMzJ4KHgsIGkrMik7CisJCXg3NiA9IGxkMzJ4KHgsIGkrMyk7CisKKwkJcHNbaV0JPSBpZmlyMTYoeDEwLHgxMCk7CisJCXBzW2krMV0gPSBpZmlyMTYoeDMyLHgzMik7CisJCXBzW2krMl0gPSBpZmlyMTYoeDU0LHg1NCk7CisJCXBzW2krM10gPSBpZmlyMTYoeDc2LHg3Nik7CisJfQorCisJeDc2ID0gc2V4MTYoeDc2KTsKKwlwc1tOXSA9IHg3NiAqIHg3NjsKKworCVBPV0VSU1BFQ1RSVU1fU1RPUCgpOworfQorCisjZWxzZQorCisjZGVmaW5lIE9WRVJSSURFX1BPV0VSX1NQRUNUUlVNCit2b2lkIHBvd2VyX3NwZWN0cnVtKGNvbnN0IGZsb2F0ICogcmVzdHJpY3QgWCwgZmxvYXQgKiByZXN0cmljdCBwcywgaW50IE4pCit7CisJcmVnaXN0ZXIgaW50IGksIGo7CisJcmVnaXN0ZXIgZmxvYXQgeHg7CisgICAKKwlQT1dFUlNQRUNUUlVNX1NUQVJUKCk7CisKKwl4eCA9IFhbMF07CisKKwlwc1swXT1NVUxUMTZfMTYoeHgseHgpOworCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorICAgZm9yIChpPTEsaj0xO2k8Ti0xO2krPTIsaisrKQorICAgewlyZWdpc3RlciBmbG9hdCB4aSwgeGlpOworCisJCXhpID0gWFtpXTsKKwkJeGlpID0gWFtpKzFdOworICAgICAgCisJCXBzW2pdID0gIE1VTFQxNl8xNih4aSx4aSkgKyBNVUxUMTZfMTYoeGlpLHhpaSk7CisgICB9CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorCisgICB4eCA9IFhbaV07CisgICBwc1tqXT1NVUxUMTZfMTYoeHgseHgpOworCisgICBQT1dFUlNQRUNUUlVNX1NUT1AoKTsKK30KKworI2VuZGlmCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvdG12L2ZpbHRlcmJhbmtfdG0uaCBiLzNyZHBhcnR5L3NwZWV4L3Rtdi9maWx0ZXJiYW5rX3RtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNjZGFjOQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3Rtdi9maWx0ZXJiYW5rX3RtLmgKQEAgLTAsMCArMSwyODkgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNyBIb25nIFpoaXFpYW4gKi8KKy8qKgorICAgQGZpbGUgZmlsdGVyYmFua190bS5oCisgICBAYXV0aG9yIEhvbmcgWmhpcWlhbgorICAgQGJyaWVmIFZhcmlvdXMgY29tcGF0aWJpbGl0eSByb3V0aW5lcyBmb3IgU3BlZXggKFRyaU1lZGlhIHZlcnNpb24pCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKyNpbmNsdWRlIDxvcHMvY3VzdG9tX2RlZnMuaD4KKyNpbmNsdWRlICJwcm9maWxlX3RtLmgiCisKKyNpZmRlZiBGSVhFRF9QT0lOVAorCisjZGVmaW5lIE9WRVJSSURFX0ZJTFRFUkJBTktfQ09NUFVURV9CQU5LMzIKK3ZvaWQgZmlsdGVyYmFua19jb21wdXRlX2JhbmszMihGaWx0ZXJCYW5rICogcmVzdHJpY3QgYmFuaywgc3B4X3dvcmQzMl90ICogcmVzdHJpY3QgcHMsIHNweF93b3JkMzJfdCAqIHJlc3RyaWN0IG1lbCkKK3sKKwlyZWdpc3RlciBpbnQgaSwgaiwgaywgYmFua3MsIGxlbiwgemVybywgczsKKwlyZWdpc3RlciBpbnQgKiByZXN0cmljdCBsZWZ0OworCXJlZ2lzdGVyIGludCAqIHJlc3RyaWN0IHJpZ2h0OyAKKwlyZWdpc3RlciBpbnQgKiByZXN0cmljdCBibGVmdDsKKwlyZWdpc3RlciBpbnQgKiByZXN0cmljdCBicmlnaHQ7CisKKwlsZWZ0ID0gKGludCopYmFuay0+ZmlsdGVyX2xlZnQ7CisJcmlnaHQgPSAoaW50KiliYW5rLT5maWx0ZXJfcmlnaHQ7CisJYmxlZnQgPSAoaW50KiliYW5rLT5iYW5rX2xlZnQ7CisJYnJpZ2h0ID0gKGludCopYmFuay0+YmFua19yaWdodDsKKworICAgCVRNREVCVUdfQUxJR05NRU0ocHMpOworCVRNREVCVUdfQUxJR05NRU0obWVsKTsKKwlUTURFQlVHX0FMSUdOTUVNKGxlZnQpOworCVRNREVCVUdfQUxJR05NRU0ocmlnaHQpOworCVRNREVCVUdfQUxJR05NRU0oYmxlZnQpOworCVRNREVCVUdfQUxJR05NRU0oYnJpZ2h0KTsKKworCUZJTFRFUkJBTktDT01QVVRFQkFOSzMyX1NUQVJUKCk7CisKKwliYW5rcyA9IGJhbmstPm5iX2JhbmtzIDw8IDI7CisJemVybyA9IDA7CisJbGVuID0gYmFuay0+bGVuOworCXMgPSAoMTw8KCgxNSkpPj4xKTsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX0ZJTFRFUkJBTktDT01QVVRFQkFOSzMyKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTIKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCWZvciAoIGk9MCA7IGk8YmFua3MgOyBpKz00ICkKKwl7CXN0MzJkKGksIG1lbCwgemVybyk7CisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX0ZJTFRFUkJBTktDT01QVVRFQkFOSzMyKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfRklMVEVSQkFOS0NPTVBVVEVCQU5LMzIpCisjcHJhZ21hIFRDU191bnJvbGw9MgorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisgICBmb3IgKCBpPTAsaj0xLGs9MCA7IGk8bGVuIDsgaSs9MixqKz0yLCsrayApCisgICB7CXJlZ2lzdGVyIGludCBwczEsIHBzMCwgX21lbCwgcHMwX21zYiwgcHMwX2xzYiwgcHMxX21zYiwgcHMxX2xzYjsgCisJCXJlZ2lzdGVyIGludCBsZWZ0MTAsIHJpZ2h0MTAsIGxlZnQxLCBsZWZ0MCwgcmlnaHQxLCByaWdodDA7CisJCXJlZ2lzdGVyIGludCBpbDEsIGlyMSwgaWwwLCBpcjA7CisKKwkJcHMwCQk9IGxkMzJ4KHBzLGkpOworCQlpbDAJCT0gbGQzMngoYmxlZnQsaSk7CisJCV9tZWwJPSBsZDMyeChtZWwsaWwwKTsKKwkJbGVmdDEwCT0gbGQzMngobGVmdCxrKTsJCQorCQlpcjAJCT0gbGQzMngoYnJpZ2h0LGkpOworCQlyaWdodDEwCT0gbGQzMngocmlnaHQsayk7CisKKwkJcHMwX21zYgk9IHBzMCA+PiAxNTsKKwkJcHMwX2xzYiA9IHBzMCAmIDB4MDAwMDdmZmY7CisJCWxlZnQwCT0gc2V4MTYobGVmdDEwKTsKKwkJcmlnaHQwCT0gc2V4MTYocmlnaHQxMCk7CisKKwkJX21lbAkrPSBsZWZ0MCAqIHBzMF9tc2IgKyAoKGxlZnQwICogcHMwX2xzYiArIHMgKSA+PiAxNSk7CisJCW1lbFtpbDBdPSBfbWVsOworCQlfbWVsCT0gbGQzMngobWVsLGlyMCk7CisJCV9tZWwJKz0gcmlnaHQwICogcHMwX21zYiArICgocmlnaHQwICogcHMwX2xzYiArIHMgKSA+PiAxNSk7CisJCW1lbFtpcjBdPSBfbWVsOworCisJCXBzMQkJPSBsZDMyeChwcyxqKTsKKwkJaWwxCQk9IGxkMzJ4KGJsZWZ0LGopOworCQlfbWVsCT0gbGQzMngobWVsLGlsMSk7CisJCWlyMQkJPSBsZDMyeChicmlnaHQsaik7CisKKwkJbGVmdDEJPSBhc3JpKDE2LGxlZnQxMCk7CisJCXJpZ2h0MQk9IGFzcmkoMTYscmlnaHQxMCk7CisJCXBzMV9tc2IJPSBwczEgPj4gMTU7CisJCXBzMV9sc2IJPSBwczEgJiAweDAwMDA3ZmZmOworCisJCV9tZWwJKz0gbGVmdDEgKiBwczFfbXNiICsgKChsZWZ0MSAqIHBzMV9sc2IgKyBzICkgPj4gMTUpOworCQltZWxbaWwxXT0gX21lbDsKKwkJX21lbAk9IGxkMzJ4KG1lbCxpcjEpOworCQlfbWVsCSs9IHJpZ2h0MSAqIHBzMV9tc2IgKyAoKHJpZ2h0MSAqIHBzMV9sc2IgKyBzICkgPj4gMTUpOworCQltZWxbaXIxXT0gX21lbDsKKyAgIH0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9GSUxURVJCQU5LQ09NUFVURUJBTkszMikKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKworICAgRklMVEVSQkFOS0NPTVBVVEVCQU5LMzJfU1RPUCgpOworfQorCisjZGVmaW5lIE9WRVJSSURFX0ZJTFRFUkJBTktfQ09NUFVURV9QU0QxNgordm9pZCBmaWx0ZXJiYW5rX2NvbXB1dGVfcHNkMTYoRmlsdGVyQmFuayAqIHJlc3RyaWN0IGJhbmssIHNweF93b3JkMTZfdCAqIHJlc3RyaWN0IG1lbCwgc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgcHMpCit7CisJcmVnaXN0ZXIgaW50IGksIGosIGssIGxlbiwgczsKKwlyZWdpc3RlciBpbnQgKiByZXN0cmljdCBsZWZ0OworCXJlZ2lzdGVyIGludCAqIHJlc3RyaWN0IHJpZ2h0OyAKKwlyZWdpc3RlciBpbnQgKiByZXN0cmljdCBibGVmdDsKKwlyZWdpc3RlciBpbnQgKiByZXN0cmljdCBicmlnaHQ7CisKKwlsZWZ0ID0gKGludCopYmFuay0+ZmlsdGVyX2xlZnQ7CisJcmlnaHQgPSAoaW50KiliYW5rLT5maWx0ZXJfcmlnaHQ7CisJYmxlZnQgPSAoaW50KiliYW5rLT5iYW5rX2xlZnQ7CisJYnJpZ2h0ID0gKGludCopYmFuay0+YmFua19yaWdodDsKKworICAgCVRNREVCVUdfQUxJR05NRU0ocHMpOworCVRNREVCVUdfQUxJR05NRU0obWVsKTsKKwlUTURFQlVHX0FMSUdOTUVNKGxlZnQpOworCVRNREVCVUdfQUxJR05NRU0ocmlnaHQpOworCVRNREVCVUdfQUxJR05NRU0oYmxlZnQpOworCVRNREVCVUdfQUxJR05NRU0oYnJpZ2h0KTsKKworCUZJTFRFUkJBTktDT01QVVRFUFNEMTZfU1RBUlQoKTsKKworCWxlbiA9IGJhbmstPmxlbjsKKwlzID0gKDE8PCgoMTUpKT4+MSk7CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9GSUxURVJCQU5LQ09NUFVURVBTRDE2KQorI3ByYWdtYSBUQ1NfdW5yb2xsPTIKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCWZvciAoIGk9MCxqPTAsaz0wIDsgaTxsZW4gOyBpKz0yLGorPTQsKytrICkKKwl7CisJCXJlZ2lzdGVyIGludCBtZWxsMCwgbWVscjAsIG1lbDEsIG1lbDAsIG1lbGwxLCBtZWxyMTsKKwkJcmVnaXN0ZXIgaW50IGlsMSwgaXIxLCBpbDAsIGlyMDsKKwkJcmVnaXN0ZXIgaW50IGxlZnQxMCwgcmlnaHQxMCwgbHIxLCBscjA7CisJCXJlZ2lzdGVyIGludCBhY2MwLCBhY2MxLCBwczEwOworCisJCWFjYzAgPSBhY2MxID0gczsKKworCQlpbDAJCT0gbGQzMngoYmxlZnQsIGkpOworCQlpcjAJCT0gbGQzMngoYnJpZ2h0LGkpOworCQltZWxsMAk9IG1lbFtpbDBdOyAKKwkJbWVscjAJPSBtZWxbaXIwXTsKKwkJbGVmdDEwCT0gbGQzMngobGVmdCwgIGspOworCQlyaWdodDEwID0gbGQzMngocmlnaHQsIGspOworCQltZWwwCT0gcGFjazE2bHNiKG1lbGwwLCBtZWxyMCk7CisJCWxyMAkJPSBwYWNrMTZsc2IobGVmdDEwLCByaWdodDEwKTsKKwkJCisJCWFjYzAJKz0gaWZpcjE2KG1lbDAsIGxyMCk7CisJCWFjYzAJPj49IDE1OworCQkKKwkJaWwxCQk9IGxkMzJ4KGJsZWZ0LCBpKzEpOworCQlpcjEJCT0gbGQzMngoYnJpZ2h0LGkrMSk7CisJCW1lbGwxCT0gbWVsW2lsMV07CisJCW1lbHIxCT0gbWVsW2lyMV07CisJCW1lbDEJPSBwYWNrMTZsc2IobWVsbDEsIG1lbHIxKTsKKwkJbHIxCQk9IHBhY2sxNm1zYihsZWZ0MTAsIHJpZ2h0MTApOworCQkJCisJCWFjYzEJKz0gaWZpcjE2KG1lbDEsIGxyMSk7CisJCWFjYzEJPj49IDE1OworCisJCXBzMTAJPSBwYWNrMTZsc2IoYWNjMSwgYWNjMCk7CisJCQorCQlzdDMyZChqLCBwcywgcHMxMCk7CisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX0ZJTFRFUkJBTktDT01QVVRFUFNEMTYpCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisKKwlGSUxURVJCQU5LQ09NUFVURVBTRDE2X1NUT1AoKTsKK30KKworI2Vsc2UKKworI2RlZmluZSBPVkVSUklERV9GSUxURVJCQU5LX0NPTVBVVEVfQkFOSzMyCit2b2lkIGZpbHRlcmJhbmtfY29tcHV0ZV9iYW5rMzIoRmlsdGVyQmFuayAqIHJlc3RyaWN0IGJhbmssIGZsb2F0ICogcmVzdHJpY3QgcHMsIGZsb2F0ICogcmVzdHJpY3QgbWVsKQoreworCXJlZ2lzdGVyIGludCBpLCBiYW5rcywgbGVuOworCXJlZ2lzdGVyIGludCAqIHJlc3RyaWN0IGJsZWZ0LCAqIHJlc3RyaWN0IGJyaWdodDsKKwlyZWdpc3RlciBmbG9hdCAqIHJlc3RyaWN0IGxlZnQsICogcmVzdHJpY3QgcmlnaHQ7CisKKwliYW5rcyA9IGJhbmstPm5iX2JhbmtzOworCWxlbgkgPSBiYW5rLT5sZW47CisJYmxlZnQgPSBiYW5rLT5iYW5rX2xlZnQ7CisJYnJpZ2h0PSBiYW5rLT5iYW5rX3JpZ2h0OworCWxlZnQJID0gYmFuay0+ZmlsdGVyX2xlZnQ7CisJcmlnaHQgPSBiYW5rLT5maWx0ZXJfcmlnaHQ7CisKKwlGSUxURVJCQU5LQ09NUFVURUJBTkszMl9TVEFSVCgpOworCisJbWVtc2V0KG1lbCwgMCwgYmFua3MgKiBzaXplb2YoZmxvYXQpKTsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX0ZJTFRFUkJBTktDT01QVVRFQkFOSzMyKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTQKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorICAgZm9yICggaT0wIDsgaTxsZW4gOyArK2kpCisgICB7CisgICAgICByZWdpc3RlciBpbnQgaWQxLCBpZDI7CisJICByZWdpc3RlciBmbG9hdCBwc2k7CisKKyAgICAgIGlkMSA9IGJsZWZ0W2ldOworICAgICAgaWQyID0gYnJpZ2h0W2ldOworICAgICAgcHNpID0gcHNbaV07CisJICAKKwkgIG1lbFtpZDFdICs9IGxlZnRbaV0gKiBwc2k7CisgICAgICBtZWxbaWQyXSArPSByaWdodFtpXSAqIHBzaTsKKyAgIH0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9GSUxURVJCQU5LQ09NUFVURUJBTkszMikKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKworICAgRklMVEVSQkFOS0NPTVBVVEVCQU5LMzJfU1RPUCgpOworfQorCisjZGVmaW5lIE9WRVJSSURFX0ZJTFRFUkJBTktfQ09NUFVURV9QU0QxNgordm9pZCBmaWx0ZXJiYW5rX2NvbXB1dGVfcHNkMTYoRmlsdGVyQmFuayAqIHJlc3RyaWN0IGJhbmssIGZsb2F0ICogcmVzdHJpY3QgbWVsLCBmbG9hdCAqIHJlc3RyaWN0IHBzKQoreworCXJlZ2lzdGVyIGludCBpLCBsZW47CisJcmVnaXN0ZXIgaW50ICogcmVzdHJpY3QgYmxlZnQsICogcmVzdHJpY3QgYnJpZ2h0OworCXJlZ2lzdGVyIGZsb2F0ICogcmVzdHJpY3QgbGVmdCwgKiByZXN0cmljdCByaWdodDsKKworCWxlbgkgID0gYmFuay0+bGVuOworCWJsZWZ0ID0gYmFuay0+YmFua19sZWZ0OworCWJyaWdodD0gYmFuay0+YmFua19yaWdodDsKKwlsZWZ0ICA9IGJhbmstPmZpbHRlcl9sZWZ0OworCXJpZ2h0ID0gYmFuay0+ZmlsdGVyX3JpZ2h0OworCisJRklMVEVSQkFOS0NPTVBVVEVQU0QxNl9TVEFSVCgpOworCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfRklMVEVSQkFOS0NPTVBVVEVQU0QxNikKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwlmb3IgKCBpPTAgOyBpPGxlbiA7ICsraSApCisJeworCQlyZWdpc3RlciBmbG9hdCBhY2M7CisJCXJlZ2lzdGVyIGludCBpZDEsIGlkMjsKKworCQlpZDEgPSBibGVmdFtpXTsKKwkJaWQyID0gYnJpZ2h0W2ldOworCisJCWFjYyA9IG1lbFtpZDFdICogbGVmdFtpXTsKKwkJYWNjICs9IG1lbFtpZDJdICogcmlnaHRbaV07CisJCQorCQlwc1tpXSA9IGFjYzsKKwl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfRklMVEVSQkFOS0NPTVBVVEVQU0QxNikKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKworCSBGSUxURVJCQU5LQ09NUFVURVBTRDE2X1NUT1AoKTsKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3Rtdi9maWx0ZXJzX3RtLmggYi8zcmRwYXJ0eS9zcGVleC90bXYvZmlsdGVyc190bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YTgwNjkKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC90bXYvZmlsdGVyc190bS5oCkBAIC0wLDAgKzEsMTUyMSBAQAorI2luY2x1ZGUgPG9wcy9jdXN0b21fZGVmcy5oPgorI2luY2x1ZGUgInByb2ZpbGVfdG0uaCIKKworI2lmZGVmIEZJWEVEX1BPSU5UCisKKyNkZWZpbmUgaWFkZChhLGIpCSgoYSkgKyAoYikpCisKKyNkZWZpbmUgT1ZFUlJJREVfQldfTFBDCit2b2lkIGJ3X2xwYyhJbnQxNiBnYW1tYSwgY29uc3QgSW50MTYgKmxwY19pbiwgSW50MTYgKmxwY19vdXQsIGludCBvcmRlcikKK3sKKwlyZWdpc3RlciBpbnQgdG1wLCBnLCBpOworCQorCVRNREVCVUdfQUxJR05NRU0obHBjX2luKTsKKwlUTURFQlVHX0FMSUdOTUVNKGxwY19vdXQpOworCisJQldMUENfU1RBUlQoKTsKKworCXRtcCA9IGcgPSBnYW1tYTsKKwlmb3IgKCBpPTAgOyBpPDQgOyBpKz0yLGxwY19vdXQrPTQgKQorCXsJcmVnaXN0ZXIgaW50IGluMTAsIHkxLCB5MCwgeTEwOworCQlyZWdpc3RlciBpbnQgaW4zMiwgeTMsIHkyLCB5MzI7CisKKwkJaW4xMCA9IGxkMzJ4KGxwY19pbixpKTsKKwkJeTAJID0gKCh0bXAgKiBzZXgxNihpbjEwKSkgKyAxNjM4NCkgPj4gMTU7CisJCXRtcCAgPSAoKHRtcCAqIGcpICsgMTYzODQpID4+IDE1OworCQl5MQkgPSAoKHRtcCAqIGFzcmkoMTYsaW4xMCkpICsgMTYzODQpID4+IDE1OworCQl0bXAgID0gKCh0bXAgKiBnKSArIDE2Mzg0KSA+PiAxNTsKKwkJeTEwICA9ICBwYWNrMTZsc2IoeTEseTApOworCQlzdDMyKGxwY19vdXQseTEwKTsKKworCQlpbjMyID0gbGQzMngobHBjX2luLGkrMSk7CisJCXkyCSA9ICgodG1wICogc2V4MTYoaW4zMikpICsgMTYzODQpID4+IDE1OworCQl0bXAgID0gKCh0bXAgKiBnKSArIDE2Mzg0KSA+PiAxNTsKKwkJeTMJID0gKCh0bXAgKiBhc3JpKDE2LGluMzIpKSArIDE2Mzg0KSA+PiAxNTsKKwkJdG1wICA9ICgodG1wICogZykgKyAxNjM4NCkgPj4gMTU7CisJCXkzMiAgPSAgcGFjazE2bHNiKHkzLHkyKTsKKwkJc3QzMmQoNCxscGNfb3V0LHkzMik7CisJfQorCisJaWYgKCBvcmRlciA9PSAxMCApCisJewlyZWdpc3RlciBpbnQgaW4xMCwgeTEsIHkwLCB5MTA7CisJCQorCQlpbjEwID0gbGQzMngobHBjX2luLGkpOworCQl5MAkgPSAoKHRtcCAqIHNleDE2KGluMTApKSArIDE2Mzg0KSA+PiAxNTsKKwkJdG1wICA9ICgodG1wICogZykgKyAxNjM4NCkgPj4gMTU7CisJCXkxCSA9ICgodG1wICogYXNyaSgxNixpbjEwKSkgKyAxNjM4NCkgPj4gMTU7CisJCXRtcCAgPSAoKHRtcCAqIGcpICsgMTYzODQpID4+IDE1OworCQl5MTAgID0gIHBhY2sxNmxzYih5MSx5MCk7CisJCXN0MzIobHBjX291dCx5MTApOworCX0KKworCUJXTFBDX1NUT1AoKTsKK30KKworCisjZGVmaW5lIE9WRVJSSURFX0hJR0hQQVNTCit2b2lkIGhpZ2hwYXNzKGNvbnN0IEludDE2ICp4LCBJbnQxNiAqeSwgaW50IGxlbiwgaW50IGZpbHRJRCwgSW50MzIgKm1lbSkKK3sKKyAgIAljb25zdCBJbnQxNiBQY29lZls1XVszXSA9IHt7MTYzODQsIC0zMTMxMywgMTQ5OTF9LCB7MTYzODQsIC0zMTU2OSwgMTUyNDl9LCB7MTYzODQsIC0zMTY3NywgMTUzMjh9LCB7MTYzODQsIC0zMjMxMywgMTU5NDd9LCB7MTYzODQsIC0yMjQ0NiwgNjUzN319OworCWNvbnN0IEludDE2IFpjb2VmWzVdWzNdID0ge3sxNTY3MiwgLTMxMzQ0LCAxNTY3Mn0sIHsxNTgwMiwgLTMxNjAxLCAxNTgwMn0sIHsxNTg0NywgLTMxNjk0LCAxNTg0N30sIHsxNjE2MiwgLTMyMzIyLCAxNjE2Mn0sIHsxNDQxOCwgLTI4ODM2LCAxNDQxOH19OworCXJlZ2lzdGVyIGludCBpOworCXJlZ2lzdGVyIGludCBkZW4xLCBkZW4yLCBudW0wLCBudW0xLCBudW0yLCBkZW4xMSwgZGVuMjIsIG1lbTAsIG1lbTE7CisgICAKKwlUTURFQlVHX0FMSUdOTUVNKG1lbSk7CisKKwlISUdIUEFTU19TVEFSVCgpOworCisJZmlsdElEID0gaW1pbig0LCBmaWx0SUQpOworCisJZGVuMSA9IC1QY29lZltmaWx0SURdWzFdOworCWRlbjIgPSAtUGNvZWZbZmlsdElEXVsyXTsKKwludW0wID0gWmNvZWZbZmlsdElEXVswXTsKKwludW0xID0gWmNvZWZbZmlsdElEXVsxXTsKKwludW0yID0gWmNvZWZbZmlsdElEXVsyXTsKKwlkZW4xMSA9IGRlbjEgPDwgMTsKKwlkZW4yMiA9IGRlbjIgPDwgMTsKKwltZW0wID0gbWVtWzBdOworCW1lbTEgPSBtZW1bMV07CisJCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfSElHSFBBU1MpCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisJZm9yICggaT0wIDsgaTxsZW4gOyArK2kgKQorCXsKKwkJcmVnaXN0ZXIgaW50IHlpOworCQlyZWdpc3RlciBpbnQgdm91dCwgeGksIHZvdXRfaSwgdm91dF9kOworCQkJCisJCXhpID0geFtpXTsKKworCQl2b3V0CT0gbnVtMCAqIHhpICsgbWVtMDsKKwkJdm91dF9pCT0gdm91dCA+PiAxNTsKKwkJdm91dF9kCT0gdm91dCAmIDB4N0ZGRjsKKwkJeWkJCT0gaWNsaXBpKFBTSFIzMih2b3V0LDE0KSwzMjc2Nyk7CisJCW1lbTAJPSAobWVtMSArIG51bTEgKiB4aSkgKyAoZGVuMTEgKiB2b3V0X2kpICsgKCgoZGVuMSAqIHZvdXRfZCkgPj4gMTUpIDw8IDEpOworCQltZW0xCT0gKG51bTIgKiB4aSkgKyAoZGVuMjIgKiB2b3V0X2kpICsgKCgoZGVuMiAqICB2b3V0X2QpID4+IDE1KSA8PCAxKTsKKwkJCisJCXlbaV0gPSB5aTsKKwl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfSElHSFBBU1MpCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisKKwltZW1bMF0gPSBtZW0wOworCW1lbVsxXSA9IG1lbTE7CisKKwlISUdIUEFTU19TVE9QKCk7Cit9CisKKworI2RlZmluZSBPVkVSUklERV9TSUdOQUxNVUwKK3ZvaWQgc2lnbmFsX211bChjb25zdCBJbnQzMiAqeCwgSW50MzIgKnksIEludDMyIHNjYWxlLCBpbnQgbGVuKQoreworCXJlZ2lzdGVyIGludCBpLCBzY2FsZV9pLCBzY2FsZV9kOworICAgCisJU0lHTkFMTVVMX1NUQVJUKCk7CisKKwlzY2FsZV9pID0gc2NhbGUgPj4gMTQ7CisJc2NhbGVfZCA9IHNjYWxlICYgMHgzRkZGOworCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfU0lHTkFMTVVMKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTQKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCWZvciAoIGk9MCA7IGk8bGVuIDsgKytpKQorCXsKKwkJcmVnaXN0ZXIgaW50IHhpOworCisJCXhpID0geFtpXSA+PiA3OworCisJCXlbaV0gPSAoKHhpICogc2NhbGVfaSArICgoeGkgKiBzY2FsZV9kKSA+PiAxNCkpIDw8IDcpOworCQkJCisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NJR05BTE1VTCkKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKworCVNJR05BTE1VTF9TVE9QKCk7Cit9CisKKyNkZWZpbmUgT1ZFUlJJREVfU0lHTkFMRElWCit2b2lkIHNpZ25hbF9kaXYoY29uc3QgSW50MTYgKngsIEludDE2ICp5LCBJbnQzMiBzY2FsZSwgaW50IGxlbikKK3sKKwlyZWdpc3RlciBpbnQgaTsKKyAgIAorCVNJR05BTERJVl9TVEFSVCgpOworCisJaWYgKHNjYWxlID4gU0hMMzIoRVhURU5EMzIoU0lHX1NDQUxJTkcpLCA4KSkKKwl7CisJCXJlZ2lzdGVyIGludCBzY2FsZV8xOworCQlzY2FsZQk9IFBTSFIzMihzY2FsZSwgU0lHX1NISUZUKTsKKwkJc2NhbGVfMSA9IERJVjMyXzE2KFNITDMyKEVYVEVORDMyKFNJR19TQ0FMSU5HKSw3KSxzY2FsZSk7CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfU0lHTkFMRElWKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTQKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCQlmb3IgKCBpPTAgOyBpPGxlbiA7ICsraSkKKwkJeworCQkJeVtpXSA9IE1VTFQxNl8xNl9QMTUoc2NhbGVfMSwgeFtpXSk7CisJCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TSUdOQUxESVYpCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisJfSBlbHNlIGlmIChzY2FsZSA+IFNIUjMyKEVYVEVORDMyKFNJR19TQ0FMSU5HKSwgMikpIHsKKyAgICAgIAorCQlyZWdpc3RlciBpbnQgc2NhbGVfMTsKKwkJc2NhbGUJPSBQU0hSMzIoc2NhbGUsIFNJR19TSElGVC01KTsKKwkJc2NhbGVfMSA9IERJVjMyXzE2KFNITDMyKEVYVEVORDMyKFNJR19TQ0FMSU5HKSwzKSxzY2FsZSk7CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfU0lHTkFMRElWKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTQKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCQlmb3IgKGk9MDtpPGxlbjtpKyspCisJCXsKKwkJCXlbaV0gPSBQU0hSMzIoTVVMVDE2XzE2KHNjYWxlXzEsIFNITDE2KHhbaV0sMikpLDgpOworCQl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfU0lHTkFMRElWKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorCX0gZWxzZSB7CisJCQorCQlyZWdpc3RlciBpbnQgc2NhbGVfMTsKKwkJc2NhbGUgPSBQU0hSMzIoc2NhbGUsIFNJR19TSElGVC03KTsKKwkJc2NhbGUgPSBpbWF4KDUsc2NhbGUpOworCQlzY2FsZV8xID0gRElWMzJfMTYoU0hMMzIoRVhURU5EMzIoU0lHX1NDQUxJTkcpLDMpLHNjYWxlKTsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NJR05BTERJVikKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwkJZm9yIChpPTA7aTxsZW47aSsrKQorCQl7CisJCQkgeVtpXSA9IFBTSFIzMihNVUxUMTZfMTYoc2NhbGVfMSwgU0hMMTYoeFtpXSwyKSksNik7CisJCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TSUdOQUxESVYpCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisJfQorCisJU0lHTkFMTVVMX1NUT1AoKTsKK30KKworCisjZGVmaW5lIE9WRVJSSURFX0NPTVBVVEVfUk1TCitJbnQxNiBjb21wdXRlX3Jtcyhjb25zdCBJbnQzMiAqeCwgaW50IGxlbikKK3sKKwlyZWdpc3RlciBpbnQgaTsKKwlyZWdpc3RlciBpbnQgc3VtPTA7CisJcmVnaXN0ZXIgaW50IG1heF92YWw9MTsKKwlyZWdpc3RlciBpbnQgc2lnX3NoaWZ0OworCQorCVRNREVCVUdfQUxJR05NRU0oeCk7CisKKwlmb3IgKCBpPTAgOyBpPGxlbiA7IGkrPTQgKQorCXsKKwkJcmVnaXN0ZXIgaW50IHRtcDAsIHRtcDEsIHRtcDIsIHRtcDM7CisKKwkJdG1wMCA9IGxkMzJ4KHgsaSk7CisJCXRtcDEgPSBsZDMyeCh4LGkrMSk7CisKKwkJdG1wMCA9IGlhYnModG1wMCk7CisJCXRtcDEgPSBpYWJzKHRtcDEpOworCisJCXRtcDIgPSBsZDMyeCh4LGkrMik7CisJCXRtcDMgPSBsZDMyeCh4LGkrMyk7CisKKwkJdG1wMiA9IGlhYnModG1wMik7CisJCXRtcDMgPSBpYWJzKHRtcDMpOworCisJCXRtcDAgPSBpbWF4KHRtcDAsIHRtcDEpOworCQltYXhfdmFsID0gaW1heChtYXhfdmFsLCB0bXAwKTsgCisJCXRtcDIgPSBpbWF4KHRtcDIsIHRtcDMpOwkJCisJCW1heF92YWwgPSBpbWF4KG1heF92YWwsIHRtcDIpOworCX0KKworCXNpZ19zaGlmdCA9IDA7CisJd2hpbGUgKCBtYXhfdmFsPjE2MzgzICkKKwl7CXNpZ19zaGlmdCsrOworCQltYXhfdmFsID4+PSAxOworCX0KKworCisJZm9yICggaT0wIDsgaTxsZW4gOyBpKz00ICkKKwl7CisJCXJlZ2lzdGVyIGludCBhY2MwLCBhY2MxLCBhY2MyOworCisJCWFjYzAgPSAgcGFjazE2bHNiKGxkMzJ4KHgsaSkgPj4gc2lnX3NoaWZ0LCBsZDMyeCh4LGkrMSkgPj4gc2lnX3NoaWZ0KTsKKwkJYWNjMSA9ICBwYWNrMTZsc2IobGQzMngoeCxpKzIpID4+IHNpZ19zaGlmdCwgbGQzMngoeCxpKzMpID4+IHNpZ19zaGlmdCk7CisJCWFjYzIgPSAgaWZpcjE2KGFjYzAsYWNjMCkgKyBpZmlyMTYoYWNjMSwgYWNjMSk7CisJCXN1bQkgKz0gYWNjMiA+PiA2OworCX0KKyAgIAorICAgcmV0dXJuIEVYVFJBQ1QxNihQU0hSMzIoU0hMMzIoRVhURU5EMzIoc3B4X3NxcnQoRElWMzIoc3VtLGxlbikpKSwoc2lnX3NoaWZ0KzMpKSxTSUdfU0hJRlQpKTsKK30KKworI2RlZmluZSBPVkVSUklERV9DT01QVVRFX1JNUzE2CitJbnQxNiBjb21wdXRlX3JtczE2KGNvbnN0IEludDE2ICp4LCBpbnQgbGVuKQoreworCXJlZ2lzdGVyIGludCBtYXhfdmFsLCBpOworCQorCUNPTVBVVEVSTVMxNl9TVEFSVCgpOworCQorCW1heF92YWwgPSAxMDsKKworI2lmIDAKKworCXsKKwkJcmVnaXN0ZXIgaW50IGxlbjIgPSBsZW4gPj4gMTsKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9DT01QVVRFUk1TMTYpCisjcHJhZ21hIFRDU191bnJvbGw9MgorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisJCWZvciAoIGk9MCA7IGk8bGVuMiA7IGkrPTIgKQorCQl7CisJCQlyZWdpc3RlciBpbnQgeDEwLCB4MzI7CisKKwkJCXgxMCA9IGxkMzJ4KHgsaSk7CisJCQl4MzIgPSBsZDMyeCh4LGkrMSk7CisJCQkgCisJCQl4MTAgPSBkc3BpZHVhbGFicyh4MTApOworCQkJeDMyID0gZHNwaWR1YWxhYnMoeDMyKTsKKwkJCQorCQkJeDEwID0gaW1heChzZXgxNih4MTApLCBhc3JpKDE2LHgxMCkpOworCQkJeDMyID0gaW1heChzZXgxNih4MzIpLCBhc3JpKDE2LHgzMikpOworCQkJCisJCQltYXhfdmFsID0gaW1heChtYXhfdmFsLHgxMCk7CisJCQltYXhfdmFsID0gaW1heChtYXhfdmFsLHgzMik7CisJCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9DT01QVVRFUk1TMTYpCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisJCWlmIChtYXhfdmFsPjE2MzgzKQorCQl7CisJCQlyZWdpc3RlciBpbnQgc3VtID0gMDsKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9DT01QVVRFUk1TMTYpCisjcHJhZ21hIFRDU191bnJvbGw9MgorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisJCQlmb3IgKCBpPTAgOyBpPGxlbl8yOyBpKz0yICkKKwkJCXsKKwkJCQlyZWdpc3RlciBpbnQgeDEwLCB4MzI7CisJCQkJcmVnaXN0ZXIgaW50IGFjYzAsIGFjYzE7CisKKwkJCQl4MTAgPSBsZDMyeCh4LGkpOworCQkJCXgzMiA9IGxkMzJ4KHgsaSsxKTsKKwkJCQkKKwkJCQl4MTAgPSBkdWFsYXNyKHgxMCwxKTsKKwkJCQl4MzIgPSBkdWFsYXNyKHgzMiwxKTsKKworCQkJCWFjYzAgPSBpZmlyMTYoeDEwLHgxMCk7CisJCQkJYWNjMSA9IGlmaXIxNih4MzIseDMyKTsKKwkJCQlzdW0gICs9IChhY2MwICsgYWNjMSkgPj4gNjsKKwkJCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9DT01QVVRFUk1TMTYpCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisJCQlDT01QVVRFUk1TMTZfU1RPUCgpOworCQkJcmV0dXJuIHNweF9zcXJ0KHN1bS9sZW4pIDw8IDQ7CisJCX0gZWxzZSAKKwkJeworCQkJcmVnaXN0ZXIgaW50IHNpZ19zaGlmdDsKKwkJCXJlZ2lzdGVyIGludCBzdW09MDsKKworCQkJc2lnX3NoaWZ0ID0gbXV4KG1heF92YWwgPCA4MTkyLCAxLCAwKTsKKwkJCXNpZ19zaGlmdCA9IG11eChtYXhfdmFsIDwgNDA5NiwgMiwgc2lnX3NoaWZ0KTsKKwkJCXNpZ19zaGlmdCA9IG11eChtYXhfdmFsIDwgMjA0OCwgMywgc2lnX3NoaWZ0KTsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX0NPTVBVVEVSTVMxNikKKyNwcmFnbWEgVENTX3Vucm9sbD0yCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwkJCWZvciAoIGk9MCA7IGk8bGVuXzIgOyBpKz0yICkKKwkJCXsKKwkJCQlyZWdpc3RlciBpbnQgeDEwLCB4MzI7CisJCQkJcmVnaXN0ZXIgaW50IGFjYzAsIGFjYzE7CisKKwkJCQl4MTAgPSBsZDMyeCh4LGkpOworCQkJCXgzMiA9IGxkMzJ4KHgsaSsxKTsKKworCQkJCXgxMCA9IGR1YWxhc2woeDEwLHNpZ19zaGlmdCk7CisJCQkJeDMyID0gZHVhbGFzbCh4MzIsc2lnX3NoaWZ0KTsKKwkJCQkKKwkJCQlhY2MwID0gaWZpcjE2KHgxMCx4MTApOworCQkJCWFjYzEgPSBpZmlyMTYoeDMyLHgzMik7CisJCQkJc3VtICArPSAoYWNjMCArIGFjYzEpID4+IDY7CisJCQl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfQ09NUFVURVJNUzE2KQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorCQkJQ09NUFVURVJNUzE2X1NUT1AoKTsKKwkJCXJldHVybiBzcHhfc3FydChzdW0vbGVuKSA8PCAoMyAtIHNpZ19zaGlmdCk7ICAKKwkJfQorCX0KKworI2Vsc2UKKwl7CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfQ09NUFVURVJNUzE2KQorI3ByYWdtYSBUQ1NfdW5yb2xsPTQKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCQlmb3IgKCBpPTAgOyBpPGxlbiA7ICsraSApCisJCXsKKwkJCXJlZ2lzdGVyIGludCB4aTsKKworCQkJeGkgPSB4W2ldOworCQkJeGkgPSBpYWJzKHhpKTsKKwkJCW1heF92YWwgPSBpbWF4KHhpLG1heF92YWwpOworCQl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfQ09NUFVURVJNUzE2KQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorCQlpZiAobWF4X3ZhbD4xNjM4MykKKwkJeworCQkJcmVnaXN0ZXIgaW50IHN1bSA9IDA7CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfQ09NUFVURVJNUzE2KQorI3ByYWdtYSBUQ1NfdW5yb2xsPTIKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCQkJZm9yICggaT0wIDsgaTxsZW4gOyBpKz00ICkKKwkJCXsKKwkJCQlyZWdpc3RlciBpbnQgeDEwLCB4MzI7CisJCQkJcmVnaXN0ZXIgaW50IGFjYzAsIGFjYzE7CisKKwkJCQl4MTAgPSBwYWNrMTZsc2IoeFtpKzFdLHhbaV0pOworCQkJCXgzMiA9IHBhY2sxNmxzYih4W2krM10seFtpKzJdKTsKKwkJCQkKKwkJCQl4MTAgPSBkdWFsYXNyKHgxMCwxKTsKKwkJCQl4MzIgPSBkdWFsYXNyKHgzMiwxKTsKKworCQkJCWFjYzAgPSBpZmlyMTYoeDEwLHgxMCk7CisJCQkJYWNjMSA9IGlmaXIxNih4MzIseDMyKTsKKwkJCQlzdW0gICs9IChhY2MwICsgYWNjMSkgPj4gNjsKKwkJCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9DT01QVVRFUk1TMTYpCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisJCQlDT01QVVRFUk1TMTZfU1RPUCgpOworCQkJcmV0dXJuIHNweF9zcXJ0KHN1bS9sZW4pIDw8IDQ7CisJCX0gZWxzZSB7CisJCQlyZWdpc3RlciBpbnQgc2lnX3NoaWZ0OworCQkJcmVnaXN0ZXIgaW50IHN1bT0wOworCisJCQlzaWdfc2hpZnQgPSBtdXgobWF4X3ZhbCA8IDgxOTIsIDEsIDApOworCQkJc2lnX3NoaWZ0ID0gbXV4KG1heF92YWwgPCA0MDk2LCAyLCBzaWdfc2hpZnQpOworCQkJc2lnX3NoaWZ0ID0gbXV4KG1heF92YWwgPCAyMDQ4LCAzLCBzaWdfc2hpZnQpOworCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfQ09NUFVURVJNUzE2KQorI3ByYWdtYSBUQ1NfdW5yb2xsPTIKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCQkJZm9yICggaT0wIDsgaTxsZW4gOyBpKz00ICkKKwkJCXsKKwkJCQlyZWdpc3RlciBpbnQgeDEwLCB4MzI7CisJCQkJcmVnaXN0ZXIgaW50IGFjYzAsIGFjYzE7CisKKwkJCQl4MTAgPSBwYWNrMTZsc2IoeFtpKzFdLHhbaV0pOworCQkJCXgzMiA9IHBhY2sxNmxzYih4W2krM10seFtpKzJdKTsKKworCQkJCXgxMCA9IGR1YWxhc2woeDEwLHNpZ19zaGlmdCk7CisJCQkJeDMyID0gZHVhbGFzbCh4MzIsc2lnX3NoaWZ0KTsKKwkJCQkKKwkJCQlhY2MwID0gaWZpcjE2KHgxMCx4MTApOworCQkJCWFjYzEgPSBpZmlyMTYoeDMyLHgzMik7CisJCQkJc3VtICArPSAoYWNjMCArIGFjYzEpID4+IDY7CisJCQl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfQ09NUFVURVJNUzE2KQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorCQkJQ09NUFVURVJNUzE2X1NUT1AoKTsKKwkJCXJldHVybiBzcHhfc3FydChzdW0vbGVuKSA8PCAoMyAtIHNpZ19zaGlmdCk7ICAKKwkJfQorCX0KKyNlbmRpZgorfQorCitpbnQgbm9ybWFsaXplMTZfOShjb25zdCBJbnQzMiogcmVzdHJpY3QgeCwgSW50MTYgKiByZXN0cmljdCB5LCBJbnQzMiBtYXhfc2NhbGUpCit7CisJcmVnaXN0ZXIgaW50IHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeDg7CisJcmVnaXN0ZXIgaW50IG1heF92YWwsIG0wLCBtMSwgbTIsIG0zLCBtNDsKKwlyZWdpc3RlciBpbnQgc2lnX3NoaWZ0OworCXJlZ2lzdGVyIGludCB5MTAsIHkzMiwgeTU0LCB5NzY7CisKKwlUTURFQlVHX0FMSUdOTUVNKHgpOworCisJeDAgPSBsZDMyKHgpOyAKKwl4MSA9IGxkMzJ4KHgsMSk7IHgyID0gbGQzMngoeCwyKTsgeDMgPSBsZDMyeCh4LDMpOyB4NCA9IGxkMzJ4KHgsNCk7IAorCXg1ID0gbGQzMngoeCw1KTsgeDYgPSBsZDMyeCh4LDYpOyB4NyA9IGxkMzJ4KHgsNyk7IHg4ID0gbGQzMngoeCw4KTsKKworCW0wID0gaW1heChpYWJzKHgwKSwgaWFicyh4MSkpOworCW0xID0gaW1heChpYWJzKHgyKSwgaWFicyh4MykpOworCW0yID0gaW1heChpYWJzKHg0KSwgaWFicyh4NSkpOworCW0zID0gaW1heChpYWJzKHg2KSwgaWFicyh4NykpOworCW00ID0gaW1heChtMCwgaWFicyh4OCkpOworCW0xID0gaW1heChtMSwgbTIpOworCW0zID0gaW1heChtMywgbTQpOworCW1heF92YWwgPSBpbWF4KDEsaW1heChtMSxtMykpOworCisJc2lnX3NoaWZ0PTA7CisJd2hpbGUgKG1heF92YWw+bWF4X3NjYWxlKQorCXsJc2lnX3NoaWZ0Kys7CisJCW1heF92YWwgPj49IDE7CisJfQorCisJaWYgKCBzaWdfc2hpZnQgIT0gMCApCisJeworCQl5MTAgPSBwYWNrMTZsc2IoeDEgPj4gc2lnX3NoaWZ0LCB4MCA+PiBzaWdfc2hpZnQpOworCQl5MzIgPSBwYWNrMTZsc2IoeDMgPj4gc2lnX3NoaWZ0LCB4MiA+PiBzaWdfc2hpZnQpOworCQl5NTQgPSBwYWNrMTZsc2IoeDUgPj4gc2lnX3NoaWZ0LCB4NCA+PiBzaWdfc2hpZnQpOworCQl5NzYgPSBwYWNrMTZsc2IoeDcgPj4gc2lnX3NoaWZ0LCB4NiA+PiBzaWdfc2hpZnQpOworCisJCXlbOF0gPSB4OCA+PiBzaWdfc2hpZnQ7CisJCXN0MzIoeSx5MTApOworCQlzdDMyZCg0LHkseTMyKTsKKwkJc3QzMmQoOCx5LHk1NCk7CisJCXN0MzJkKDEyLHkseTc2KTsKKwl9CisJcmV0dXJuIHNpZ19zaGlmdDsKK30KKworaW50IG5vcm1hbGl6ZTE2X21vZDgoY29uc3QgSW50MzIgKiByZXN0cmljdCB4LCBJbnQxNiAqIHJlc3RyaWN0IHksIEludDMyIG1heF9zY2FsZSxpbnQgbGVuKQoreworCXJlZ2lzdGVyIGludCBpLCBtYXhfdmFsLCBzaWdfc2hpZnQ7CisJCisJVE1ERUJVR19BTElHTk1FTSh4KTsKKworCW1heF92YWwgPSAxOworCisJZm9yICggaT0wIDsgaTxsZW4gOyBpKz00ICkKKwl7CisJCXJlZ2lzdGVyIGludCB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzOworCisJCXRtcDAgPSBsZDMyeCh4LGkpOworCQl0bXAxID0gbGQzMngoeCxpKzEpOworCisJCXRtcDAgPSBpYWJzKHRtcDApOworCQl0bXAxID0gaWFicyh0bXAxKTsKKworCQl0bXAyID0gbGQzMngoeCxpKzIpOworCQl0bXAzID0gbGQzMngoeCxpKzMpOworCisJCXRtcDIgPSBpYWJzKHRtcDIpOworCQl0bXAzID0gaWFicyh0bXAzKTsKKworCQl0bXAwID0gaW1heCh0bXAwLCB0bXAxKTsKKwkJbWF4X3ZhbCA9IGltYXgobWF4X3ZhbCwgdG1wMCk7IAorCQl0bXAyID0gaW1heCh0bXAyLCB0bXAzKTsJCQorCQltYXhfdmFsID0gaW1heChtYXhfdmFsLCB0bXAyKTsKKwl9CisKKwlzaWdfc2hpZnQ9MDsKKwl3aGlsZSAobWF4X3ZhbD5tYXhfc2NhbGUpCisJewlzaWdfc2hpZnQrKzsKKwkJbWF4X3ZhbCA+Pj0gMTsKKwl9CisKKwlpZiAoIHNpZ19zaGlmdCAhPSAwICkKKwl7CisJCWZvciAoIGk9MCA7IGk8bGVuIDsgaSs9OCwgeSs9OCApCisJCXsKKwkJCXJlZ2lzdGVyIGludCB4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDc7CisJCQlyZWdpc3RlciBpbnQgeTEwLCB5MzIsIHk1NCwgeTc2OworCisJCQl4MCA9IGxkMzJ4KHgsaSk7ICAgeDEgPSBsZDMyeCh4LGkrMSk7IHgyID0gbGQzMngoeCxpKzIpOyB4MyA9IGxkMzJ4KHgsaSszKTsgCisJCQl4NCA9IGxkMzJ4KHgsaSs0KTsgeDUgPSBsZDMyeCh4LGkrNSk7IHg2ID0gbGQzMngoeCxpKzYpOyB4NyA9IGxkMzJ4KHgsaSs3KTsKKworCQkJeTEwID0gcGFjazE2bHNiKHgxID4+IHNpZ19zaGlmdCwgeDAgPj4gc2lnX3NoaWZ0KTsKKwkJCXkzMiA9IHBhY2sxNmxzYih4MyA+PiBzaWdfc2hpZnQsIHgyID4+IHNpZ19zaGlmdCk7CisJCQl5NTQgPSBwYWNrMTZsc2IoeDUgPj4gc2lnX3NoaWZ0LCB4NCA+PiBzaWdfc2hpZnQpOworCQkJeTc2ID0gcGFjazE2bHNiKHg3ID4+IHNpZ19zaGlmdCwgeDYgPj4gc2lnX3NoaWZ0KTsKKworCQkJc3QzMih5LHkxMCk7CisJCQlzdDMyZCg0LHkseTMyKTsKKwkJCXN0MzJkKDgseSx5NTQpOworCQkJc3QzMmQoMTIseSx5NzYpOworCQl9CisJfQorCXJldHVybiBzaWdfc2hpZnQ7Cit9CisKKworI2RlZmluZSBPVkVSUklERV9OT1JNQUxJWkUxNgoraW50IG5vcm1hbGl6ZTE2KGNvbnN0IEludDMyICp4LCBJbnQxNiAqeSwgSW50MzIgbWF4X3NjYWxlLCBpbnQgbGVuKQoreworCVRNREVCVUdfQUxJR05NRU0oeCk7CisJVE1ERUJVR19BTElHTk1FTSh5KTsKKworCU5PUk1BTElaRTE2X1NUQVJUKCk7CisKKwlpZiAoIGxlbiA9PSA5ICkKKwl7CU5PUk1BTElaRTE2X1NUT1AoKTsKKwkJcmV0dXJuIG5vcm1hbGl6ZTE2XzkoeCx5LG1heF9zY2FsZSk7CisJfSBlbHNlCisJewlOT1JNQUxJWkUxNl9TVE9QKCk7CisJCXJldHVybiBub3JtYWxpemUxNl9tb2Q4KHgseSxtYXhfc2NhbGUsbGVuKTsKKwl9Cit9CisKKwordm9pZCBmaWx0ZXJfbWVtMTZfMTAoY29uc3QgSW50MTYgKngsIGNvbnN0IEludDE2ICpudW0sIGNvbnN0IEludDE2ICpkZW4sIEludDE2ICp5LCBpbnQgTiwgSW50MzIgKm1lbSkKK3sKKwlyZWdpc3RlciBpbnQgaTsKKwlyZWdpc3RlciBpbnQgYzksIGM4LCBjNywgYzYsIGM1OworCXJlZ2lzdGVyIGludCBjNCwgYzMsIGMyLCBjMSwgYzA7CisJcmVnaXN0ZXIgaW50IGlucHV0OworCXJlZ2lzdGVyIGludCBvdXRwdXRfMCwgb3V0cHV0XzEsIG91dHB1dF8yLCBvdXRwdXRfMywgb3V0cHV0XzQ7CisJcmVnaXN0ZXIgaW50IG91dHB1dF81LCBvdXRwdXRfNiwgb3V0cHV0XzcsIG91dHB1dF84LCBvdXRwdXRfOTsKKyAgICByZWdpc3RlciBJbnQxNiB4aSwgeWk7CisKKwljOSA9IHBhY2sxNmxzYigtZGVuWzldLG51bVs5XSk7CisJYzggPSBwYWNrMTZsc2IoLWRlbls4XSxudW1bOF0pOworCWM3ID0gcGFjazE2bHNiKC1kZW5bN10sbnVtWzddKTsKKwljNiA9IHBhY2sxNmxzYigtZGVuWzZdLG51bVs2XSk7CisJYzUgPSBwYWNrMTZsc2IoLWRlbls1XSxudW1bNV0pOworCWM0ID0gcGFjazE2bHNiKC1kZW5bNF0sbnVtWzRdKTsKKwljMyA9IHBhY2sxNmxzYigtZGVuWzNdLG51bVszXSk7CisJYzIgPSBwYWNrMTZsc2IoLWRlblsyXSxudW1bMl0pOworCWMxID0gcGFjazE2bHNiKC1kZW5bMV0sbnVtWzFdKTsKKwljMCA9IHBhY2sxNmxzYigtZGVuWzBdLG51bVswXSk7CisKKwlvdXRwdXRfMCA9IG1lbVswXTsKKwlvdXRwdXRfMSA9IG1lbVsxXTsKKwlvdXRwdXRfMiA9IG1lbVsyXTsKKwlvdXRwdXRfMyA9IG1lbVszXTsKKwlvdXRwdXRfNCA9IG1lbVs0XTsKKwlvdXRwdXRfNSA9IG1lbVs1XTsKKwlvdXRwdXRfNiA9IG1lbVs2XTsKKwlvdXRwdXRfNyA9IG1lbVs3XTsKKwlvdXRwdXRfOCA9IG1lbVs4XTsKKwlvdXRwdXRfOSA9IG1lbVs5XTsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX0ZJTFRFUikKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKworCWZvciAoIGk9MCA7IGk8TiA7IGkrKyApCisgICAgeworCQl4aSA9IChpbnQpKHhbaV0pOworCQl5aSA9IGljbGlwaShpYWRkKHhpLFBTSFIzMihvdXRwdXRfMCxMUENfU0hJRlQpKSwzMjc2Nyk7CisKKwkJaW5wdXQJPSBwYWNrMTZsc2IoeWkseGkpOworCQlvdXRwdXRfMD0gaWFkZChpZmlyMTYoYzAsaW5wdXQpLG91dHB1dF8xKTsKKwkJb3V0cHV0XzE9IGlhZGQoaWZpcjE2KGMxLGlucHV0KSxvdXRwdXRfMik7CisJCW91dHB1dF8yPSBpYWRkKGlmaXIxNihjMixpbnB1dCksb3V0cHV0XzMpOworCQlvdXRwdXRfMz0gaWFkZChpZmlyMTYoYzMsaW5wdXQpLG91dHB1dF80KTsKKwkJb3V0cHV0XzQ9IGlhZGQoaWZpcjE2KGM0LGlucHV0KSxvdXRwdXRfNSk7CisJCW91dHB1dF81PSBpYWRkKGlmaXIxNihjNSxpbnB1dCksb3V0cHV0XzYpOworCQlvdXRwdXRfNj0gaWFkZChpZmlyMTYoYzYsaW5wdXQpLG91dHB1dF83KTsKKwkJb3V0cHV0Xzc9IGlhZGQoaWZpcjE2KGM3LGlucHV0KSxvdXRwdXRfOCk7CisJCW91dHB1dF84PSBpYWRkKGlmaXIxNihjOCxpbnB1dCksb3V0cHV0XzkpOworCQlvdXRwdXRfOT0gaWZpcjE2KGM5LGlucHV0KTsKKworCQl5W2ldID0geWk7CisgICB9CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9GSUxURVIpCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisKKwltZW1bMF0gPSBvdXRwdXRfMDsKKwltZW1bMV0gPSBvdXRwdXRfMTsKKwltZW1bMl0gPSBvdXRwdXRfMjsKKwltZW1bM10gPSBvdXRwdXRfMzsKKwltZW1bNF0gPSBvdXRwdXRfNDsKKwltZW1bNV0gPSBvdXRwdXRfNTsKKwltZW1bNl0gPSBvdXRwdXRfNjsKKwltZW1bN10gPSBvdXRwdXRfNzsKKwltZW1bOF0gPSBvdXRwdXRfODsKKwltZW1bOV0gPSBvdXRwdXRfOTsKK30KKwordm9pZCBmaWx0ZXJfbWVtMTZfOChjb25zdCBJbnQxNiAqeCwgY29uc3QgSW50MTYgKm51bSwgY29uc3QgSW50MTYgKmRlbiwgSW50MTYgKnksIGludCBOLCBJbnQzMiAqbWVtKQoreworCXJlZ2lzdGVyIGludCBpOworCXJlZ2lzdGVyIGludCBjNywgYzYsIGM1LCBjNCwgYzMsIGMyLCBjMSwgYzA7CisJcmVnaXN0ZXIgaW50IG91dHB1dF8wLCBvdXRwdXRfMSwgb3V0cHV0XzIsIG91dHB1dF8zLCBvdXRwdXRfNCwgb3V0cHV0XzUsIG91dHB1dF82LCBvdXRwdXRfNzsKKwlyZWdpc3RlciBpbnQgaW5wdXQ7CisgICAgcmVnaXN0ZXIgSW50MTYgeGksIHlpOworCisJYzcgPSBwYWNrMTZsc2IoLWRlbls3XSxudW1bN10pOworCWM2ID0gcGFjazE2bHNiKC1kZW5bNl0sbnVtWzZdKTsKKwljNSA9IHBhY2sxNmxzYigtZGVuWzVdLG51bVs1XSk7CisJYzQgPSBwYWNrMTZsc2IoLWRlbls0XSxudW1bNF0pOworCWMzID0gcGFjazE2bHNiKC1kZW5bM10sbnVtWzNdKTsKKwljMiA9IHBhY2sxNmxzYigtZGVuWzJdLG51bVsyXSk7CisJYzEgPSBwYWNrMTZsc2IoLWRlblsxXSxudW1bMV0pOworCWMwID0gcGFjazE2bHNiKC1kZW5bMF0sbnVtWzBdKTsKKworCW91dHB1dF8wID0gbWVtWzBdOworCW91dHB1dF8xID0gbWVtWzFdOworCW91dHB1dF8yID0gbWVtWzJdOworCW91dHB1dF8zID0gbWVtWzNdOworCW91dHB1dF80ID0gbWVtWzRdOworCW91dHB1dF81ID0gbWVtWzVdOworCW91dHB1dF82ID0gbWVtWzZdOworCW91dHB1dF83ID0gbWVtWzddOworCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfRklMVEVSKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTQKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCisJZm9yICggaT0wIDsgaTxOIDsgaSsrICkKKyAgICB7CisJCXhpID0geFtpXTsKKwkJeWkgPSBpY2xpcGkoaWFkZCgoaW50KSh4aSksUFNIUjMyKG91dHB1dF8wLExQQ19TSElGVCkpLDMyNzY3KTsKKworCQlpbnB1dAk9IHBhY2sxNmxzYih5aSx4aSk7CisJCW91dHB1dF8wPSBpYWRkKGlmaXIxNihjMCxpbnB1dCksb3V0cHV0XzEpOworCQlvdXRwdXRfMT0gaWFkZChpZmlyMTYoYzEsaW5wdXQpLG91dHB1dF8yKTsKKwkJb3V0cHV0XzI9IGlhZGQoaWZpcjE2KGMyLGlucHV0KSxvdXRwdXRfMyk7CisJCW91dHB1dF8zPSBpYWRkKGlmaXIxNihjMyxpbnB1dCksb3V0cHV0XzQpOworCQlvdXRwdXRfND0gaWFkZChpZmlyMTYoYzQsaW5wdXQpLG91dHB1dF81KTsKKwkJb3V0cHV0XzU9IGlhZGQoaWZpcjE2KGM1LGlucHV0KSxvdXRwdXRfNik7CisJCW91dHB1dF82PSBpYWRkKGlmaXIxNihjNixpbnB1dCksb3V0cHV0XzcpOworCQlvdXRwdXRfNz0gaWZpcjE2KGM3LGlucHV0KTsKKworCQl5W2ldID0geWk7CisgICB9CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9GSUxURVIpCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisKKworCW1lbVswXSA9IG91dHB1dF8wOworCW1lbVsxXSA9IG91dHB1dF8xOworCW1lbVsyXSA9IG91dHB1dF8yOworCW1lbVszXSA9IG91dHB1dF8zOworCW1lbVs0XSA9IG91dHB1dF80OworCW1lbVs1XSA9IG91dHB1dF81OworCW1lbVs2XSA9IG91dHB1dF82OworCW1lbVs3XSA9IG91dHB1dF83OworfQorCisjZGVmaW5lIE9WRVJSSURFX0ZJTFRFUl9NRU0xNgordm9pZCBmaWx0ZXJfbWVtMTYoY29uc3QgSW50MTYgKngsIGNvbnN0IEludDE2ICpudW0sIGNvbnN0IEludDE2ICpkZW4sIEludDE2ICp5LCBpbnQgTiwgaW50IG9yZCwgSW50MzIgKm1lbSwgY2hhciAqc3RhY2spCit7CisJVE1ERUJVR19BTElHTk1FTSh4KTsKKwlUTURFQlVHX0FMSUdOTUVNKHkpOworCVRNREVCVUdfQUxJR05NRU0obnVtKTsKKwlUTURFQlVHX0FMSUdOTUVNKGRlbik7CisKKwlGSUxURVJNRU0xNl9TVEFSVCgpOworCisJaWYob3JkPT0xMCkKKwkJZmlsdGVyX21lbTE2XzEwKHgsIG51bSwgZGVuLCB5LCBOLCBtZW0pOworCWVsc2UgaWYgKG9yZD09OCkKKwkJZmlsdGVyX21lbTE2XzgoeCwgbnVtLCBkZW4sIHksIE4sIG1lbSk7CisKKyNpZm5kZWYgUkVNQVJLX09OCisJKHZvaWQpc3RhY2s7CisjZW5kaWYKKworCUZJTFRFUk1FTTE2X1NUT1AoKTsKK30KKwordm9pZCBpaXJfbWVtMTZfOChjb25zdCBJbnQxNiAqeCwgY29uc3QgSW50MTYgKmRlbiwgSW50MTYgKnksIGludCBOLCBJbnQzMiAqbWVtKQoreworCXJlZ2lzdGVyIGludCBpOworCXJlZ2lzdGVyIGludCBjNjcsIGM0NSwgYzIzLCBjMDE7CisJcmVnaXN0ZXIgaW50IHIxLCByMiwgcjM7CisJcmVnaXN0ZXIgaW50IHkxMCwgeTMyLCB5NTQsIHk3NiwgeWk7CisJCisJYzY3ID0gcGFjazE2bHNiKC1kZW5bNl0sLWRlbls3XSk7CisJYzQ1ID0gcGFjazE2bHNiKC1kZW5bNF0sLWRlbls1XSk7CisJYzIzID0gcGFjazE2bHNiKC1kZW5bMl0sLWRlblszXSk7CisJYzAxID0gcGFjazE2bHNiKC1kZW5bMF0sLWRlblsxXSk7CisKKwl5MTAgPSBtZW1bMF07CisJeTMyID0gbWVtWzFdOworCXk1NCA9IG1lbVsyXTsKKwl5NzYgPSBtZW1bM107CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9JSVIpCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisKKwlmb3IgKCBpPTAgOyBpIDwgTiA7ICsraSApCisJewkJCisJCXIyID0gaWFkZChpZmlyMTYoeTEwLGM2NyksaWZpcjE2KHkzMixjNDUpKTsKKwkJcjMgPSBpYWRkKGlmaXIxNih5NTQsYzIzKSxpZmlyMTYoeTc2LGMwMSkpOworCQlyMSA9IGlhZGQocjIscjMpOworCisJCXkxMCA9IGZ1bnNoaWZ0Mih5MzIsIHkxMCk7CisJCXkzMiA9IGZ1bnNoaWZ0Mih5NTQsIHkzMik7CisJCXk1NCA9IGZ1bnNoaWZ0Mih5NzYsIHk1NCk7CisJCQorCQl5aQk9IGljbGlwaShpYWRkKChpbnQpKHhbaV0pLFBTSFIzMihyMSxMUENfU0hJRlQpKSwzMjc2Nyk7CisJCXlbaV09IHlpOworCQl5NzYgPSBmdW5zaGlmdDIoeWksIHk3Nik7CisJfQorCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfSUlSKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorCisJbWVtWzBdID0geTEwOworCW1lbVsxXSA9IHkzMjsKKwltZW1bMl0gPSB5NTQ7CisJbWVtWzNdID0geTc2OworCit9CisKK3ZvaWQgaWlyX21lbTE2XzEwKGNvbnN0IEludDE2ICp4LCBjb25zdCBJbnQxNiAqZGVuLCBJbnQxNiAqeSwgaW50IE4sIEludDMyICptZW0pCit7CisJcmVnaXN0ZXIgaW50IGk7CisJcmVnaXN0ZXIgaW50IGM4OSwgYzY3LCBjNDUsIGMyMywgYzAxOworCXJlZ2lzdGVyIGludCByMSwgcjIsIHIzLCByNCwgcjU7CisJcmVnaXN0ZXIgaW50IHkxMCwgeTMyLCB5NTQsIHk3NiwgeTk4LCB5aTsKKwkKKwljODkgPSBwYWNrMTZsc2IoLWRlbls4XSwtZGVuWzldKTsKKwljNjcgPSBwYWNrMTZsc2IoLWRlbls2XSwtZGVuWzddKTsKKwljNDUgPSBwYWNrMTZsc2IoLWRlbls0XSwtZGVuWzVdKTsKKwljMjMgPSBwYWNrMTZsc2IoLWRlblsyXSwtZGVuWzNdKTsKKwljMDEgPSBwYWNrMTZsc2IoLWRlblswXSwtZGVuWzFdKTsKKworCXkxMCA9IG1lbVswXTsKKwl5MzIgPSBtZW1bMV07CisJeTU0ID0gbWVtWzJdOworCXk3NiA9IG1lbVszXTsKKwl5OTggPSBtZW1bNF07CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9JSVIpCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisKKwlmb3IgKCBpPTAgOyBpIDwgTiA7ICsraSApCisJewkJCisJCXIyID0gaWFkZChpZmlyMTYoeTEwLGM4OSksaWZpcjE2KHkzMixjNjcpKTsKKwkJcjMgPSBpYWRkKGlmaXIxNih5NTQsYzQ1KSxpZmlyMTYoeTc2LGMyMykpOworCQlyNCA9IGlmaXIxNih5OTgsYzAxKTsKKwkJcjUgPSBpYWRkKHIyLHIzKTsKKwkJcjEgPSBpYWRkKHI0LHI1KTsKKworCQl5MTAgPSBmdW5zaGlmdDIoeTMyLCB5MTApOworCQl5MzIgPSBmdW5zaGlmdDIoeTU0LCB5MzIpOworCQl5NTQgPSBmdW5zaGlmdDIoeTc2LCB5NTQpOworCQl5NzYgPSBmdW5zaGlmdDIoeTk4LCB5NzYpOworCQkKKwkJeWkJPSBpY2xpcGkoaWFkZCgoaW50KSh4W2ldKSxQU0hSMzIocjEsTFBDX1NISUZUKSksMzI3NjcpOworCQl5W2ldPSB5aTsKKwkJeTk4ID0gZnVuc2hpZnQyKHlpLCB5OTgpOwkJCisJfQorCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfSUlSKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorCisJbWVtWzBdID0geTEwOworCW1lbVsxXSA9IHkzMjsKKwltZW1bMl0gPSB5NTQ7CisJbWVtWzNdID0geTc2OworCW1lbVs0XSA9IHk5ODsKK30KKworI2RlZmluZSBPVkVSUklERV9JSVJfTUVNMTYKK3ZvaWQgaWlyX21lbTE2KGNvbnN0IEludDE2ICp4LCBjb25zdCBJbnQxNiAqZGVuLCBJbnQxNiAqeSwgaW50IE4sIGludCBvcmQsIEludDMyICptZW0sIGNoYXIgKnN0YWNrKQoreworCVRNREVCVUdfQUxJR05NRU0oZGVuKTsKKworCUlJUk1FTTE2X1NUQVJUKCk7CisKKwlpZihvcmQ9PTEwKQorCQlpaXJfbWVtMTZfMTAoeCwgZGVuLCB5LCBOLCBtZW0pOworCWVsc2UgaWYgKG9yZD09OCkKKwkJaWlyX21lbTE2XzgoeCwgZGVuLCB5LCBOLCBtZW0pOworCisjaWZuZGVmIFJFTUFSS19PTgorCSh2b2lkKXN0YWNrOworI2VuZGlmCisKKwlJSVJNRU0xNl9TVE9QKCk7Cit9CisKK3ZvaWQgZmlyX21lbTE2XzgoY29uc3QgSW50MTYgKngsIGNvbnN0IEludDE2ICpudW0sIEludDE2ICp5LCBpbnQgTiwgSW50MzIgKm1lbSkKK3sKKwlyZWdpc3RlciBpbnQgaSwgTl8yOworCXJlZ2lzdGVyIGludCBjNjcsIGM0NSwgYzIzLCBjMDE7CisJcmVnaXN0ZXIgaW50IGIwLCBiMSwgYjIsIGIzOworCXJlZ2lzdGVyIGludCByMSwgcjIsIHIzOworCXJlZ2lzdGVyIGludCB4MTAsIHgzMiwgeDU0LCB4NzYsIHhpOworCXJlZ2lzdGVyIEludDE2ICphOyAKKworCU5fMiA9IE4gPj4gMTsKKworCWM2NyA9IGxkMzJ4KG51bSwzKTsKKwljNDUgPSBsZDMyeChudW0sMik7CisJYzIzID0gbGQzMngobnVtLDEpOworCWMwMSA9IGxkMzJ4KG51bSwwKTsKKworCWM2NyA9IGZ1bnNoaWZ0MihjNjcsYzY3KTsKKwljNDUgPSBmdW5zaGlmdDIoYzQ1LGM0NSk7CisJYzIzID0gZnVuc2hpZnQyKGMyMyxjMjMpOworCWMwMSA9IGZ1bnNoaWZ0MihjMDEsYzAxKTsKKworCWIzID0geDc2ID0gbGQzMngoeCxOXzItMSk7CisJYjIgPSB4NTQgPSBsZDMyeCh4LE5fMi0yKTsKKwliMSA9IHgzMiA9IGxkMzJ4KHgsTl8yLTMpOworCWIwID0geDEwID0gbGQzMngoeCxOXzItNCk7CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9GSUxURVIgPiAwKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTQKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCisJZm9yICggaT1OLTEgOyBpID49IDggOyAtLWkgKQorCXsKKwkJeGkgID0gYXNyaSgxNix4NzYpOworCQl4NzYgPSBmdW5zaGlmdDIoeDc2LCB4NTQpOworCQl4NTQgPSBmdW5zaGlmdDIoeDU0LCB4MzIpOworCQl4MzIgPSBmdW5zaGlmdDIoeDMyLCB4MTApOworCQl4MTAgPSBwYWNrMTZsc2IoeDEwLCAoaW50KXhbaS04XSk7CisKKwkJcjIgPSBpYWRkKGlmaXIxNih4MTAsYzY3KSxpZmlyMTYoeDMyLGM0NSkpOworCQlyMyA9IGlhZGQoaWZpcjE2KHg1NCxjMjMpLGlmaXIxNih4NzYsYzAxKSk7CisJCXIxID0gaWFkZChyMixyMyk7CisJCQorCQl5W2ldID0gaWNsaXBpKGlhZGQoeGksUFNIUjMyKHIxLExQQ19TSElGVCkpLDMyNzY3KTsKKwl9CisJZm9yICggaT03LCBhPShJbnQxNiopbWVtIDsgaT49MCA7IC0taSApCisJeworCQl4aSAgPSBhc3JpKDE2LHg3Nik7CisJCXg3NiA9IGZ1bnNoaWZ0Mih4NzYsIHg1NCk7CisJCXg1NCA9IGZ1bnNoaWZ0Mih4NTQsIHgzMik7CisJCXgzMiA9IGZ1bnNoaWZ0Mih4MzIsIHgxMCk7CisJCXgxMCA9IHBhY2sxNmxzYih4MTAsIChpbnQpYVtpXSk7CisJCisJCXIyID0gaWFkZChpZmlyMTYoeDEwLGM2NyksaWZpcjE2KHgzMixjNDUpKTsKKwkJcjMgPSBpYWRkKGlmaXIxNih4NTQsYzIzKSxpZmlyMTYoeDc2LGMwMSkpOworCQlyMSA9IGlhZGQocjIscjMpOworCQkKKwkJeVtpXSA9IGljbGlwaShpYWRkKHhpLFBTSFIzMihyMSxMUENfU0hJRlQpKSwzMjc2Nyk7CisJfQorCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfRklMVEVSID4gMCkKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKworCW1lbVswXSA9IGIwOworCW1lbVsxXSA9IGIxOworCW1lbVsyXSA9IGIyOworCW1lbVszXSA9IGIzOworfQorCit2b2lkIGZpcl9tZW0xNl8xMChjb25zdCBJbnQxNiAgKngsIGNvbnN0IEludDE2ICpudW0sIEludDE2ICAqeSwgaW50IE4sIEludDMyICAqbWVtKQoreworCXJlZ2lzdGVyIGludCBOXzIsIGk7CisJcmVnaXN0ZXIgaW50IGM4OSwgYzY3LCBjNDUsIGMyMywgYzAxOworCXJlZ2lzdGVyIGludCBiMCwgYjEsIGIyLCBiMywgYjQ7CisJcmVnaXN0ZXIgaW50IHIxLCByMiwgcjMsIHI0LCByNTsKKwlyZWdpc3RlciBpbnQgeDEwLCB4MzIsIHg1NCwgeDc2LCB4OTgsIHhpOworCXJlZ2lzdGVyIEludDE2ICphOyAKKworCU5fMiA9IE4gPj4gMTsKKworCWM4OSA9IGxkMzJ4KG51bSw0KTsKKwljNjcgPSBsZDMyeChudW0sMyk7CisJYzQ1ID0gbGQzMngobnVtLDIpOworCWMyMyA9IGxkMzJ4KG51bSwxKTsKKwljMDEgPSBsZDMyeChudW0sMCk7CisKKwljODkgPSBmdW5zaGlmdDIoYzg5LGM4OSk7CisJYzY3ID0gZnVuc2hpZnQyKGM2NyxjNjcpOworCWM0NSA9IGZ1bnNoaWZ0MihjNDUsYzQ1KTsKKwljMjMgPSBmdW5zaGlmdDIoYzIzLGMyMyk7CisJYzAxID0gZnVuc2hpZnQyKGMwMSxjMDEpOworCisJYjQgPSB4OTggPSBsZDMyeCh4LE5fMi0xKTsKKwliMyA9IHg3NiA9IGxkMzJ4KHgsTl8yLTIpOworCWIyID0geDU0ID0gbGQzMngoeCxOXzItMyk7CisJYjEgPSB4MzIgPSBsZDMyeCh4LE5fMi00KTsKKwliMCA9IHgxMCA9IGxkMzJ4KHgsTl8yLTUpOworCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfRklSID4gMCkKKyNwcmFnbWEgVENTX3Vucm9sbD01CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKworCWZvciAoIGk9Ti0xIDsgaSA+PSAxMCA7IC0taSApCisJeworCQl4aSAgPSBhc3JpKDE2LHg5OCk7CisJCXg5OCA9IGZ1bnNoaWZ0Mih4OTgsIHg3Nik7CisJCXg3NiA9IGZ1bnNoaWZ0Mih4NzYsIHg1NCk7CisJCXg1NCA9IGZ1bnNoaWZ0Mih4NTQsIHgzMik7CisJCXgzMiA9IGZ1bnNoaWZ0Mih4MzIsIHgxMCk7CisJCXgxMCA9IHBhY2sxNmxzYih4MTAsIChpbnQpKHhbaS0xMF0pKTsKKworCQlyMiA9IGlhZGQoaWZpcjE2KHgxMCxjODkpLGlmaXIxNih4MzIsYzY3KSk7CisJCXIzID0gaWFkZChpZmlyMTYoeDU0LGM0NSksaWZpcjE2KHg3NixjMjMpKTsKKwkJcjQgPSBpZmlyMTYoeDk4LGMwMSk7CisJCXI1ID0gaWFkZChyMixyMyk7CisJCXIxID0gaWFkZChyNCxyNSk7CisJCQorCQl5W2ldID0gaWNsaXBpKGlhZGQoeGksUFNIUjMyKHIxLExQQ19TSElGVCkpLDMyNzY3KTsKKwl9CisKKwlmb3IgKCBpPTksYSA9KEludDE2KiltZW0gOyBpPj0wIDsgLS1pICkKKwl7CisJCXhpICA9IGFzcmkoMTYseDk4KTsKKwkJeDk4ID0gZnVuc2hpZnQyKHg5OCwgeDc2KTsKKwkJeDc2ID0gZnVuc2hpZnQyKHg3NiwgeDU0KTsKKwkJeDU0ID0gZnVuc2hpZnQyKHg1NCwgeDMyKTsKKwkJeDMyID0gZnVuc2hpZnQyKHgzMiwgeDEwKTsKKwkJeDEwID0gcGFjazE2bHNiKHgxMCwgKGludCkoYVtpXSkpOworCisJCXIyID0gaWFkZChpZmlyMTYoeDEwLGM4OSksaWZpcjE2KHgzMixjNjcpKTsKKwkJcjMgPSBpYWRkKGlmaXIxNih4NTQsYzQ1KSxpZmlyMTYoeDc2LGMyMykpOworCQlyNCA9IGlmaXIxNih4OTgsYzAxKTsKKwkJcjUgPSBpYWRkKHIyLHIzKTsKKwkJcjEgPSBpYWRkKHI0LHI1KTsKKwkJCisJCXlbaV0gPSBpY2xpcGkoaWFkZCh4aSxQU0hSMzIocjEsTFBDX1NISUZUKSksMzI3NjcpOworCX0KKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX0ZJUiA+IDApCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisKKwltZW1bMF0gPSBiMDsKKwltZW1bMV0gPSBiMTsKKwltZW1bMl0gPSBiMjsKKwltZW1bM10gPSBiMzsKKwltZW1bNF0gPSBiNDsKKworCit9CisKKyNkZWZpbmUgT1ZFUlJJREVfRklSX01FTTE2Cit2b2lkIGZpcl9tZW0xNihjb25zdCBzcHhfd29yZDE2X3QgKngsIGNvbnN0IEludDE2ICpudW0sIHNweF93b3JkMTZfdCAqeSwgaW50IE4sIGludCBvcmQsIEludDMyICptZW0sIGNoYXIgKnN0YWNrKQoreworCVRNREVCVUdfQUxJR05NRU0oeCk7CisJVE1ERUJVR19BTElHTk1FTSh5KTsKKwlUTURFQlVHX0FMSUdOTUVNKG51bSk7CisKKwlGSVJNRU0xNl9TVEFSVCgpOworCisJaWYob3JkPT0xMCkKKwkJZmlyX21lbTE2XzEwKHgsIG51bSwgeSwgTiwgbWVtKTsKKwllbHNlIGlmIChvcmQ9PTgpCisJCWZpcl9tZW0xNl84KHgsIG51bSwgeSwgTiwgbWVtKTsKKworI2lmbmRlZiBSRU1BUktfT04KKyAgIAkodm9pZClzdGFjazsKKyNlbmRpZgorCisJRklSTUVNMTZfU1RPUCgpOworfQorCisKKworI2RlZmluZSBPVkVSUklERV9TWU5fUEVSQ0VQX1pFUk8xNgordm9pZCBzeW5fcGVyY2VwX3plcm8xNihjb25zdCBJbnQxNiAqeHgsIGNvbnN0IEludDE2ICphaywgY29uc3QgSW50MTYgKmF3azEsIGNvbnN0IEludDE2ICphd2syLCBJbnQxNiAqeSwgaW50IE4sIGludCBvcmQsIGNoYXIgKnN0YWNrKQoreworCXJlZ2lzdGVyIGludCBpLGo7CisJVkFSREVDTChJbnQzMiAqbWVtKTsKKwlBTExPQyhtZW0sIG9yZCwgSW50MzIpOworCQorCVRNREVCVUdfQUxJR05NRU0obWVtKTsKKworCWZvciAoIGk9MCxqPTAgOyBpPG9yZCA7ICsraSxqKz00ICkKKwkJc3QzMmQoaixtZW0sMCk7CisJaWlyX21lbTE2KHh4LCBhaywgeSwgTiwgb3JkLCBtZW0sIHN0YWNrKTsKKwlmb3IgKCBpPTAsaj0wIDsgaTxvcmQgOyArK2ksais9NCApCisJCXN0MzJkKGosbWVtLDApOworCWZpbHRlcl9tZW0xNih5LCBhd2sxLCBhd2syLCB5LCBOLCBvcmQsIG1lbSwgc3RhY2spOworfQorCisKKyNkZWZpbmUgT1ZFUlJJREVfUkVTSURVRV9QRVJDRVBfWkVSMDE2Cit2b2lkIHJlc2lkdWVfcGVyY2VwX3plcm8xNihjb25zdCBJbnQxNiAqeHgsIGNvbnN0IEludDE2ICphaywgY29uc3QgSW50MTYgKmF3azEsIGNvbnN0IEludDE2ICphd2syLCBJbnQxNiAqeSwgaW50IE4sIGludCBvcmQsIGNoYXIgKnN0YWNrKQoreworCXJlZ2lzdGVyIGludCBpLGo7CisJVkFSREVDTChJbnQzMiAqbWVtKTsKKwlBTExPQyhtZW0sIG9yZCwgSW50MzIpOworCisJVE1ERUJVR19BTElHTk1FTShtZW0pOworCisJZm9yICggaT0wLGo9MCA7IGk8b3JkIDsgKytpLGorPTQgKQorCQlzdDMyZChqLG1lbSwwKTsKKwlmaWx0ZXJfbWVtMTYoeHgsIGFrLCBhd2sxLCB5LCBOLCBvcmQsIG1lbSwgc3RhY2spOworCWZvciAoIGk9MCxqPTAgOyBpPG9yZCA7ICsraSxqKz00ICkKKwkJc3QzMmQoaixtZW0sMCk7CisJZmlyX21lbTE2KHksIGF3azIsIHksIE4sIG9yZCwgbWVtLCBzdGFjayk7Cit9CisKKworCit2b2lkIGNvbXB1dGVfaW1wdWxzZV9yZXNwb25zZV8xMChjb25zdCBJbnQxNiAqYWssIGNvbnN0IEludDE2ICphd2sxLCBjb25zdCBJbnQxNiAqYXdrMiwgSW50MTYgKnksIGludCBOKQoreworCXJlZ2lzdGVyIGludCBhd2tfMDEsIGF3a18yMywgYXdrXzQ1LCBhd2tfNjcsIGF3a184OTsKKwlyZWdpc3RlciBpbnQgeTEwLCB5MzIsIHk1NCwgeTc2LCB5OTgsIHlpOworCXJlZ2lzdGVyIGludCBpLCBhY2MwLCBhY2MxLCBOXzI7CisKKwlOXzIJCT0gTiA8PCAxOworCisJYXdrXzAxID0gbGQzMihhd2sxKTsgCisJYXdrXzIzID0gbGQzMngoYXdrMSwxKTsgCisJYXdrXzQ1ID0gbGQzMngoYXdrMSwyKTsgCisJYXdrXzY3ID0gbGQzMngoYXdrMSwzKTsgCisJYXdrXzg5ID0gbGQzMngoYXdrMSw0KTsKKworCXkxMCA9IGZ1bnNoaWZ0Mihhd2tfMDEsIExQQ19TQ0FMSU5HIDw8IDE2KTsKKwlzdDMyZCgwLCB5LCB5MTApOworCXkzMiA9IGZ1bnNoaWZ0Mihhd2tfMjMsIGF3a18wMSk7CisJc3QzMmQoNCwgeSwgeTMyKTsKKwl5NTQgPSBmdW5zaGlmdDIoYXdrXzQ1LCBhd2tfMjMpOworCXN0MzJkKDgsIHksIHk1NCk7CisJeTc2ID0gZnVuc2hpZnQyKGF3a182NywgYXdrXzQ1KTsKKwlzdDMyZCgxMiwgeSwgeTc2KTsKKwl5OTggPSBmdW5zaGlmdDIoYXdrXzg5LCBhd2tfNjcpOworCXN0MzJkKDE2LCB5LCB5OTgpOworCXkxMCA9IGZ1bnNoaWZ0MigwLCBhd2tfODkpOworCXN0MzJkKDIwLCB5LCB5MTApOworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX0NPTVBVVEVJTVBVTFNFUkVTUE9OU0UgPiAwKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTIKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCWZvciAoIGk9MjQgOyBpPE5fMiA7IGkrPTQgKQorCXsJc3QzMmQoaSwgeSwgMCk7CisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX0NPTVBVVEVJTVBVTFNFUkVTUE9OU0UgPiAwKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorCXkxMCA9IHkzMiA9IHk1NCA9IHk3NiA9IHk5OCA9IDA7CisJYXdrXzAxID0gbGQzMihhd2syKTsgCisJYXdrXzIzID0gbGQzMngoYXdrMiwxKTsgCisJYXdrXzQ1ID0gbGQzMngoYXdrMiwyKTsgCisJYXdrXzY3ID0gbGQzMngoYXdrMiwzKTsgCisJYXdrXzg5ID0gbGQzMngoYXdrMiw0KTsJCisJCisJYXdrXzAxID0gZnVuc2hpZnQyKGF3a18wMSwgYXdrXzAxKTsKKwlhd2tfMjMgPSBmdW5zaGlmdDIoYXdrXzIzLCBhd2tfMjMpOworCWF3a180NSA9IGZ1bnNoaWZ0Mihhd2tfNDUsIGF3a180NSk7CisJYXdrXzY3ID0gZnVuc2hpZnQyKGF3a182NywgYXdrXzY3KTsKKwlhd2tfODkgPSBmdW5zaGlmdDIoYXdrXzg5LCBhd2tfODkpOworCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfQ09NUFVURUlNUFVMU0VSRVNQT05TRSA+IDApCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisJZm9yICggaT0wIDsgaTxOIDsgKytpICkKKwl7CisJCXlpCT0geVtpXTsKKworCQlhY2MwID0gaWZpcjE2KHkxMCwgYXdrXzg5KSArIGlmaXIxNih5MzIsIGF3a182Nyk7CisJCWFjYzEgPSBpZmlyMTYoeTU0LCBhd2tfNDUpICsgaWZpcjE2KHk3NiwgYXdrXzIzKTsKKwkJeWkgICArPSBQU0hSMzIoYWNjMCArIGFjYzEgKyBpZmlyMTYoeTk4LCBhd2tfMDEpLExQQ19TSElGVCk7CisJCXlbaV0gPSB5aTsKKworCQl5MTAgPSBmdW5zaGlmdDIoeTMyLCB5MTApOworCQl5MzIgPSBmdW5zaGlmdDIoeTU0LCB5MzIpOworCQl5NTQgPSBmdW5zaGlmdDIoeTc2LCB5NTQpOworCQl5NzYgPSBmdW5zaGlmdDIoeTk4LCB5NzYpOworCQl5OTggPSBmdW5zaGlmdDIoaW5lZyh5aSksIHk5OCk7CisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX0NPTVBVVEVJTVBVTFNFUkVTUE9OU0UgPiAwKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorCXkxMCA9IHkzMiA9IHk1NCA9IHk3NiA9IHk5OCA9IDA7CisJYXdrXzAxID0gbGQzMihhayk7IAorCWF3a18yMyA9IGxkMzJ4KGFrLDEpOyAKKwlhd2tfNDUgPSBsZDMyeChhaywyKTsgCisJYXdrXzY3ID0gbGQzMngoYWssMyk7IAorCWF3a184OSA9IGxkMzJ4KGFrLDQpOworCWF3a18wMSA9IGZ1bnNoaWZ0Mihhd2tfMDEsIGF3a18wMSk7CisJYXdrXzIzID0gZnVuc2hpZnQyKGF3a18yMywgYXdrXzIzKTsKKwlhd2tfNDUgPSBmdW5zaGlmdDIoYXdrXzQ1LCBhd2tfNDUpOworCWF3a182NyA9IGZ1bnNoaWZ0Mihhd2tfNjcsIGF3a182Nyk7CisJYXdrXzg5ID0gZnVuc2hpZnQyKGF3a184OSwgYXdrXzg5KTsKKwkKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9DT01QVVRFSU1QVUxTRVJFU1BPTlNFID4gMCkKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwlmb3IgKCBpPTAgOyBpPE4gOyArK2kgKQorCXsKKwkJeWkJPSB5W2ldOworCisJCWFjYzAgPSBpZmlyMTYoeTEwLCBhd2tfODkpICsgaWZpcjE2KHkzMiwgYXdrXzY3KTsKKwkJYWNjMSA9IGlmaXIxNih5NTQsIGF3a180NSkgKyBpZmlyMTYoeTc2LCBhd2tfMjMpOworCQl5aSAgID0gUFNIUjMyKFNITDMyKHlpLExQQ19TSElGVCsxKSArIGFjYzAgKyBhY2MxICsgaWZpcjE2KHk5OCwgYXdrXzAxKSxMUENfU0hJRlQpOworCQl5W2ldID0geWk7CisKKwkJeTEwID0gZnVuc2hpZnQyKHkzMiwgeTEwKTsKKwkJeTMyID0gZnVuc2hpZnQyKHk1NCwgeTMyKTsKKwkJeTU0ID0gZnVuc2hpZnQyKHk3NiwgeTU0KTsKKwkJeTc2ID0gZnVuc2hpZnQyKHk5OCwgeTc2KTsKKwkJeTk4ID0gZnVuc2hpZnQyKGluZWcoeWkpLCB5OTgpOworCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9DT01QVVRFSU1QVUxTRVJFU1BPTlNFID4gMCkKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKK30KKwordm9pZCBjb21wdXRlX2ltcHVsc2VfcmVzcG9uc2VfOChjb25zdCBJbnQxNiAqYWssIGNvbnN0IEludDE2ICphd2sxLCBjb25zdCBJbnQxNiAqYXdrMiwgSW50MTYgKnksIGludCBOKQoreworCXJlZ2lzdGVyIGludCBhd2tfMDEsIGF3a18yMywgYXdrXzQ1LCBhd2tfNjc7CisJcmVnaXN0ZXIgaW50IHkxMCwgeTMyLCB5NTQsIHk3NiwgeWk7CisJcmVnaXN0ZXIgaW50IGksIGFjYzAsIGFjYzEsIE5fMjsKKworCU5fMgkJPSBOIDw8IDE7CisKKwlhd2tfMDEgPSBsZDMyKGF3azEpOyAKKwlhd2tfMjMgPSBsZDMyeChhd2sxLDEpOyAKKwlhd2tfNDUgPSBsZDMyeChhd2sxLDIpOyAKKwlhd2tfNjcgPSBsZDMyeChhd2sxLDMpOworCisJeTEwID0gZnVuc2hpZnQyKGF3a18wMSwgTFBDX1NDQUxJTkcgPDwgMTYpOworCXN0MzJkKDAsIHksIHkxMCk7CisJeTMyID0gZnVuc2hpZnQyKGF3a18yMywgYXdrXzAxKTsKKwlzdDMyZCg0LCB5LCB5MzIpOworCXk1NCA9IGZ1bnNoaWZ0Mihhd2tfNDUsIGF3a18yMyk7CisJc3QzMmQoOCwgeSwgeTU0KTsKKwl5NzYgPSBmdW5zaGlmdDIoYXdrXzY3LCBhd2tfNDUpOworCXN0MzJkKDEyLCB5LCB5NzYpOworCXkxMCA9IGZ1bnNoaWZ0MigwLCBhd2tfNjcpOworCXN0MzJkKDE2LCB5LCB5MTApOworCXN0MzJkKDIwLCB5LCAwKTsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX0NPTVBVVEVJTVBVTFNFUkVTUE9OU0UgPiAwKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTIKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCWZvciAoIGk9MjQgOyBpPE5fMiA7IGkrPTQgKQorCXsJc3QzMmQoaSwgeSwgMCk7CisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX0NPTVBVVEVJTVBVTFNFUkVTUE9OU0UgPiAwKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorCXkxMCA9IHkzMiA9IHk1NCA9IHk3NiA9IDA7CisJYXdrXzAxID0gbGQzMihhd2syKTsgCisJYXdrXzIzID0gbGQzMngoYXdrMiwxKTsgCisJYXdrXzQ1ID0gbGQzMngoYXdrMiwyKTsgCisJYXdrXzY3ID0gbGQzMngoYXdrMiwzKTsgCisJCisJYXdrXzAxID0gZnVuc2hpZnQyKGF3a18wMSwgYXdrXzAxKTsKKwlhd2tfMjMgPSBmdW5zaGlmdDIoYXdrXzIzLCBhd2tfMjMpOworCWF3a180NSA9IGZ1bnNoaWZ0Mihhd2tfNDUsIGF3a180NSk7CisJYXdrXzY3ID0gZnVuc2hpZnQyKGF3a182NywgYXdrXzY3KTsKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9DT01QVVRFSU1QVUxTRVJFU1BPTlNFID4gMCkKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwlmb3IgKCBpPTAgOyBpPE4gOyArK2kgKQorCXsKKwkJeWkJPSB5W2ldOworCisJCWFjYzAgPSBpZmlyMTYoeTEwLCBhd2tfNjcpICsgaWZpcjE2KHkzMiwgYXdrXzQ1KTsKKwkJYWNjMSA9IGlmaXIxNih5NTQsIGF3a18yMykgKyBpZmlyMTYoeTc2LCBhd2tfMDEpOworCQl5aSAgICs9IFBTSFIzMihhY2MwICsgYWNjMSxMUENfU0hJRlQpOworCQl5W2ldID0geWk7CisKKwkJeTEwID0gZnVuc2hpZnQyKHkzMiwgeTEwKTsKKwkJeTMyID0gZnVuc2hpZnQyKHk1NCwgeTMyKTsKKwkJeTU0ID0gZnVuc2hpZnQyKHk3NiwgeTU0KTsKKwkJeTc2ID0gZnVuc2hpZnQyKGluZWcoeWkpLCB5NzYpOworCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9DT01QVVRFSU1QVUxTRVJFU1BPTlNFID4gMCkKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKwl5MTAgPSB5MzIgPSB5NTQgPSB5NzYgPSAwOworCWF3a18wMSA9IGxkMzIoYWspOyAKKwlhd2tfMjMgPSBsZDMyeChhaywxKTsgCisJYXdrXzQ1ID0gbGQzMngoYWssMik7IAorCWF3a182NyA9IGxkMzJ4KGFrLDMpOworCWF3a18wMSA9IGZ1bnNoaWZ0Mihhd2tfMDEsIGF3a18wMSk7CisJYXdrXzIzID0gZnVuc2hpZnQyKGF3a18yMywgYXdrXzIzKTsKKwlhd2tfNDUgPSBmdW5zaGlmdDIoYXdrXzQ1LCBhd2tfNDUpOworCWF3a182NyA9IGZ1bnNoaWZ0Mihhd2tfNjcsIGF3a182Nyk7CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfQ09NUFVURUlNUFVMU0VSRVNQT05TRSA+IDApCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCQorCWZvciAoIGk9MCA7IGk8TiA7ICsraSApCisJeworCQl5aQk9IHlbaV07CisKKwkJYWNjMCA9IGlmaXIxNih5MTAsIGF3a182NykgKyBpZmlyMTYoeTMyLCBhd2tfNDUpOworCQlhY2MxID0gaWZpcjE2KHk1NCwgYXdrXzIzKSArIGlmaXIxNih5NzYsIGF3a18wMSk7CisJCXlpICAgPSBQU0hSMzIoU0hMMzIoeWksTFBDX1NISUZUKzEpICsgYWNjMCArIGFjYzEsTFBDX1NISUZUKTsKKwkJeVtpXSA9IHlpOworCisJCXkxMCA9IGZ1bnNoaWZ0Mih5MzIsIHkxMCk7CisJCXkzMiA9IGZ1bnNoaWZ0Mih5NTQsIHkzMik7CisJCXk1NCA9IGZ1bnNoaWZ0Mih5NzYsIHk1NCk7CisJCXk3NiA9IGZ1bnNoaWZ0MihpbmVnKHlpKSwgeTc2KTsKKwl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfQ09NUFVURUlNUFVMU0VSRVNQT05TRSA+IDApCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCit9CisKKworI2RlZmluZSBPVkVSUklERV9DT01QVVRFX0lNUFVMU0VfUkVTUE9OU0UKK3ZvaWQgY29tcHV0ZV9pbXB1bHNlX3Jlc3BvbnNlKGNvbnN0IEludDE2ICphaywgY29uc3QgSW50MTYgKmF3azEsIGNvbnN0IEludDE2ICphd2syLCBJbnQxNiAqeSwgaW50IE4sIGludCBvcmQsIGNoYXIgKnN0YWNrKQoreworCVRNREVCVUdfQUxJR05NRU0oYWspOworCVRNREVCVUdfQUxJR05NRU0oYXdrMSk7CisJVE1ERUJVR19BTElHTk1FTShhd2syKTsKKwlUTURFQlVHX0FMSUdOTUVNKHkpOworCisJQ09NUFVURUlNUFVMU0VSRVNQT05TRV9TVEFSVCgpOworCWlmICggb3JkID09IDEwICkKKwkJY29tcHV0ZV9pbXB1bHNlX3Jlc3BvbnNlXzEwKGFrLGF3azEsYXdrMix5LE4pOworCWVsc2UKKwkJY29tcHV0ZV9pbXB1bHNlX3Jlc3BvbnNlXzgoYWssYXdrMSxhd2syLHksTik7CisKKwkodm9pZClzdGFjazsKKworCUNPTVBVVEVJTVBVTFNFUkVTUE9OU0VfU1RPUCgpOworfQorCisKKyNkZWZpbmUgT1ZFUlJJREVfUU1GU1lOVEgKK3ZvaWQgcW1mX3N5bnRoKGNvbnN0IEludDE2ICp4MSwgY29uc3QgSW50MTYgKngyLCBjb25zdCBJbnQxNiAqYSwgSW50MTYgKnksIGludCBOLCBpbnQgTSwgSW50MzIgKm1lbTEsIEludDMyICptZW0yLCBjaGFyICpzdGFjaykKKyAgIC8qIGFzc3VtcHRpb25zOgorICAgICAgYWxsIG9kZCB4W2ldIGFyZSB6ZXJvIC0tIHdlbGwsIGFjdHVhbGx5IHRoZXkgYXJlIGxlZnQgb3V0IG9mIHRoZSBhcnJheSBub3cKKyAgICAgIE4gYW5kIE0gYXJlIG11bHRpcGxlcyBvZiA0ICovCit7CisJcmVnaXN0ZXIgaW50IGksIGo7CisJcmVnaXN0ZXIgaW50IE0yLCBOMjsKKwlWQVJERUNMKGludCAqeDEyKTsKKwlNMiA9IE0+PjE7CisJTjIgPSBOPj4xOworCUFMTE9DKHgxMiwgTTIrTjIsIGludCk7CisKKworCVRNREVCVUdfQUxJR05NRU0oYSk7CisJVE1ERUJVR19BTElHTk1FTSh4MTIpOworCVRNREVCVUdfQUxJR05NRU0obWVtMSk7CisJVE1ERUJVR19BTElHTk1FTShtZW0yKTsKKworCVFNRlNZTlRIX1NUQVJUKCk7CisgICAKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9RTUZTWU5USCA+IDApCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCQorCWZvciAoIGk9MCA7IGk8TjIgOyArK2kgKQorCXsJcmVnaXN0ZXIgaW50IGluZGV4ID0gTjItMS1pOworCQl4MTJbaV0gPSBwYWNrMTZsc2IoeDFbaW5kZXhdLHgyW2luZGV4XSk7CisJfQorCisJZm9yICggaj0gMDsgajxNMiA7ICsraikKKwl7CXJlZ2lzdGVyIGludCBpbmRleCA9IChqIDw8IDEpICsgMTsKKwkJeDEyW04yK2pdID0gcGFjazE2bHNiKG1lbTFbaW5kZXhdLG1lbTJbaW5kZXhdKTsKKwl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfUU1GU1lOVEggPiAwKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgkgCisJZm9yIChpID0gMDsgaSA8IE4yOyBpICs9IDIpIAorCXsKKwkJcmVnaXN0ZXIgaW50IHkwLCB5MSwgeTIsIHkzOworCQlyZWdpc3RlciBpbnQgeDEyXzA7CisKKwkJeTAgPSB5MSA9IHkyID0geTMgPSAwOworCQl4MTJfMCA9IHgxMltOMi0yLWldOworCisJCWZvciAoaiA9IDA7IGogPCBNMjsgaiArPSAyKSAKKwkJeworCQkJcmVnaXN0ZXIgaW50IHgxMl8xOworCQkJcmVnaXN0ZXIgaW50IGExMCwgYTExLCBhMF8wOworCQkJcmVnaXN0ZXIgaW50IF9hMTAsIF9hMTEsIF9hMF8wOworCisJCQlhMTAgPSBsZDMyeChhLGopOworCQkJYTExID0gcGFjazE2bXNiKGExMCxhMTApOworCQkJYTBfMD0gcGFjazE2bHNiKGExMCxpbmVnKHNleDE2KGExMCkpKTsKKwkJCXgxMl8xID0geDEyW04yLTErai1pXTsKKworCQkJeTAgKz0gaWZpcjE2KGEwXzAseDEyXzEpOworCQkJeTEgKz0gaWZpcjE2KGExMSwgeDEyXzEpOworCQkJeTIgKz0gaWZpcjE2KGEwXzAseDEyXzApOworCQkJeTMgKz0gaWZpcjE2KGExMSAseDEyXzApOworCisKKwkJCV9hMTAgICA9IGxkMzJ4KGEsaisxKTsKKwkJCV9hMTEgICA9IHBhY2sxNm1zYihfYTEwLF9hMTApOworCQkJX2EwXzAgID0gcGFjazE2bHNiKF9hMTAsaW5lZyhzZXgxNihfYTEwKSkpOworCQkJeDEyXzAgID0geDEyW04yK2otaV07CisJCQkKKwkJCXkwICs9IGlmaXIxNihfYTBfMCx4MTJfMCk7CisJCQl5MSArPSBpZmlyMTYoX2ExMSwgeDEyXzApOworCQkJeTIgKz0gaWZpcjE2KF9hMF8wLHgxMl8xKTsKKwkJCXkzICs9IGlmaXIxNihfYTExICx4MTJfMSk7CisKKwkJfQorCQl5WzIqaV0gICA9IEVYVFJBQ1QxNihTQVRVUkFURTMyKFBTSFIzMih5MCwxNSksMzI3NjcpKTsKKwkJeVsyKmkrMV0gPSBFWFRSQUNUMTYoU0FUVVJBVEUzMihQU0hSMzIoeTEsMTUpLDMyNzY3KSk7CisJCXlbMippKzJdID0gRVhUUkFDVDE2KFNBVFVSQVRFMzIoUFNIUjMyKHkyLDE1KSwzMjc2NykpOworCQl5WzIqaSszXSA9IEVYVFJBQ1QxNihTQVRVUkFURTMyKFBTSFIzMih5MywxNSksMzI3NjcpKTsKKwl9CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9RTUZTWU5USCA+IDApCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCQorCWZvciAoaSA9IDA7IGkgPCBNMjsgKytpKQorCXsJbWVtMVsyKmkrMV0gPSBhc3JpKDE2LHgxMltpXSk7CisJCW1lbTJbMippKzFdID0gc2V4MTYoeDEyW2ldKTsKKwl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfUU1GU1lOVEggPiAwKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgkgCisKKwlRTUZTWU5USF9TVE9QKCk7Cit9CisKKworI2RlZmluZSBPVkVSUklERV9RTUZERUNPTVAKK3ZvaWQgcW1mX2RlY29tcChjb25zdCBJbnQxNiAqeHgsIGNvbnN0IEludDE2ICphYSwgSW50MTYgKnkxLCBJbnQxNiAqeTIsIGludCBOLCBpbnQgTSwgSW50MTYgKm1lbSwgY2hhciAqc3RhY2spCit7CisJVkFSREVDTChpbnQgKl9hKTsKKwlWQVJERUNMKGludCAqX3gpOworCXJlZ2lzdGVyIGludCBpLCBqLCBrLCBNTSwgTTIsIE4yOyAgCisJcmVnaXN0ZXIgaW50IF94eDEwLCBfbW0xMDsKKwlyZWdpc3RlciBpbnQgKl94MjsKKworCU0yPU0+PjE7CisJTjI9Tj4+MTsKKwlNTT0oTS0yKTw8MTsKKworCUFMTE9DKF9hLCBNMiwgaW50KTsKKwlBTExPQyhfeCwgTjIrTTIsIGludCk7CisJX3gyID0gX3ggKyBNMiAtIDE7CisKKwlUTURFQlVHX0FMSUdOTUVNKHh4KTsKKwlUTURFQlVHX0FMSUdOTUVNKGFhKTsKKwlUTURFQlVHX0FMSUdOTUVNKHkxKTsKKwlUTURFQlVHX0FMSUdOTUVNKHkyKTsKKwlUTURFQlVHX0FMSUdOTUVNKG1lbSk7CisJVE1ERUJVR19BTElHTk1FTShfYSk7CisJVE1ERUJVR19BTElHTk1FTShfeCk7CisKKwlRTUZERUNPTVBfU1RBUlQoKTsKKworCV94eDEwID0gbGQzMih4eCk7CisJX3h4MTAgPSBkdWFsYXNyKF94eDEwLDEpOworCV9tbTEwID0gbGQzMihtZW0pOworCV94MlswXSA9IHBhY2sxNmxzYihfeHgxMCxfbW0xMCk7CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9RTUZTWU5USCA+IDApCisjcHJhZ21hIFRDU191bnJvbGw9MgorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCQorCWZvciAoIGk9MCA7IGk8TTIgOyArK2kgKQorCXsJcmVnaXN0ZXIgaW50IGExMDsKKwkJCisJCWExMCA9IGxkMzJ4KGFhLGkpOworCQlhMTAgPSBmdW5zaGlmdDIoYTEwLCBhMTApOworCQlfYVtNMi1pLTFdID0gYTEwOwkJCisJfQorCisJZm9yICggaj0xIDsgajxOMiA7ICsraiApCisJewlyZWdpc3RlciBpbnQgX3h4MzI7CisKKwkJX3h4MzIgICA9IGxkMzJ4KHh4LGopOworCQlfeHgzMiAgID0gZHVhbGFzcihfeHgzMiwxKTsKKwkJX3gyW2pdICA9IGZ1bnNoaWZ0MihfeHgzMiwgX3h4MTApOworCQlfeHgxMCAgID0gX3h4MzI7CisJfQorCisJZm9yICggaz0xIDsgazxNMjsgKytrICkKKwl7CXJlZ2lzdGVyIGludCBfbW0zMjsKKworCQlfbW0zMiAgID0gbGQzMngobWVtLGspOworCQlfbW0xMCAgID0gZnVuc2hpZnQyKF9tbTEwLF9tbTEwKTsKKwkJX3gyWy1rXSA9IHBhY2sxNmxzYihfbW0xMCxfbW0zMik7CisJCV9tbTEwID0gX21tMzI7CisJfQorCisKKwlmb3IgKCBpPU4yLTEsaj0wIDsgajxNTSA7IC0taSxqKz00ICkKKwl7CXJlZ2lzdGVyIGludCBfeHg7CisKKwkJX3h4ID0gbGQzMngoeHgsaSk7CisJCV94eCA9IGR1YWxhc3IoX3h4LDEpOworCQlfeHggPSBmdW5zaGlmdDIoX3h4LF94eCk7CisJCXN0MzJkKGosIG1lbSwgX3h4KTsKKwl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfUU1GU1lOVEggPiAwKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorCW1lbVtNLTJdID0geHhbTi1NKzFdID4+IDE7CisKKworCU0yID4+PSAxOworCWZvciAoIGk9MCA7IGk8TjIgOyArK2kgKQorCXsJcmVnaXN0ZXIgaW50IHkxaywgeTJrOworCisJCXkxayA9IHkyayA9IDA7CisKKwkJZm9yICggaj0wIDsgajxNMiA7IGorPTIgKQorCQl7CXJlZ2lzdGVyIGludCBfYWEsIF9hY2MwLCBfYWNjMTsKKwkJCXJlZ2lzdGVyIGludCBfX3h4MTAsIF9fbW0xMCwgX19hY2MwLCBfX2FjYzEsIF9fYWE7CisJCQlyZWdpc3RlciBpbnQgX3RtcDAsIF90bXAxLCBfdG1wMiwgX3RtcDM7CisKKwkJCV94eDEwID0gbGQzMngoX3gsIGkraik7CisJCQlfbW0xMCA9IGxkMzJ4KF94MixpLWopOworCQkJX2FhCSAgPSBsZDMyeChfYSwgaik7CisJCQlfbW0xMCA9IGZ1bnNoaWZ0MihfbW0xMCxfbW0xMCk7CisJCQlfYWNjMCA9IGRzcGlkdWFsYWRkKF94eDEwLCBfbW0xMCk7CisJCQlfYWNjMSA9IGRzcGlkdWFsc3ViKF94eDEwLCBfbW0xMCk7CisKKwkJCV9feHgxMCA9IGxkMzJ4KF94LCBpK2orMSk7CisJCQlfX21tMTAgPSBsZDMyeChfeDIsaS1qLTEpOworCQkJX19hYSAgID0gbGQzMngoX2EsIGorMSk7CisJCQlfX21tMTAgPSBmdW5zaGlmdDIoX19tbTEwLF9fbW0xMCk7CisJCQlfX2FjYzAgPSBkc3BpZHVhbGFkZChfX3h4MTAsIF9fbW0xMCk7CisJCQlfX2FjYzEgPSBkc3BpZHVhbHN1YihfX3h4MTAsIF9fbW0xMCk7CisKKwkJCXkxayAgICs9IGlmaXIxNihfYWEsIF9hY2MwKTsKKwkJCXkxayAgICs9IGlmaXIxNihfX2FhLCBfX2FjYzApOworCisJCQlfdG1wMCA9IHBhY2sxNmxzYihfYWEsX19hYSk7CisJCQlfdG1wMSA9IHBhY2sxNm1zYihfYWEsX19hYSk7CisJCQlfdG1wMiA9IHBhY2sxNmxzYihfYWNjMSwgX19hY2MxKTsKKwkJCV90bXAzID0gcGFjazE2bXNiKF9hY2MxLCBfX2FjYzEpOworCisJCQl5MmsJICAtPSBpZmlyMTYoX3RtcDAsIF90bXAyKTsKKwkJCXkyawkgICs9IGlmaXIxNihfdG1wMSwgX3RtcDMpOworCisJCX0KKworCQl5MVtpXSA9IGljbGlwaShQU0hSMzIoeTFrLDE1KSwzMjc2Nyk7CisJCXkyW2ldID0gaWNsaXBpKFBTSFIzMih5MmssMTUpLDMyNzY3KTsKKwl9CisKKwlRTUZERUNPTVBfU1RPUCgpOworfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvdG12L2ZpeGVkX3RtLmggYi8zcmRwYXJ0eS9zcGVleC90bXYvZml4ZWRfdG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzBhNDIwCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvdG12L2ZpeGVkX3RtLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNyBIb25nIFpoaXFpYW4gKi8KKy8qKgorICAgQGZpbGUgZml4ZWRfdG0uaAorICAgQGF1dGhvciBIb25nIFpoaXFpYW4KKyAgIEBicmllZiBWYXJpb3VzIGNvbXBhdGliaWxpdHkgcm91dGluZXMgZm9yIFNwZWV4IChUcmlNZWRpYSB2ZXJzaW9uKQorKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisjaWZuZGVmIEZJWEVEX1RNX0gKKyNkZWZpbmUgRklYRURfVE1fSAorCisjaW5jbHVkZSA8b3BzL2N1c3RvbV9kZWZzLmg+CisKKworI3VuZGVmCVNBVFVSQVRFCisjdW5kZWYJU0FUVVJBVEUxNgorI3VuZGVmCVNBVFVSQVRFMzIKKyNkZWZpbmUgU0FUVVJBVEUoeCxhKQkJCWljbGlwaSh4LGEpCisjZGVmaW5lIFNBVFVSQVRFMTYoeCxhKSAJCWljbGlwaSh4LGEpCisjZGVmaW5lIFNBVFVSQVRFMzIoeCxhKSAJCWljbGlwaSh4LGEpCisKKyN1bmRlZglFWFRFTkQzMgorI2RlZmluZQlFWFRFTkQzMih4KQkJCQlzZXgxNih4KQorCisjdW5kZWYJTkVHMTYKKyN1bmRlZglORUczMgorI2RlZmluZSBORUcxNih4KQkJCQlpbmVnKChpbnQpKHgpKQorI2RlZmluZSBORUczMih4KQkJCQlpbmVnKHgpCisKKyN1bmRlZglBQlMKKyN1bmRlZglBQlMxNgorI3VuZGVmCUFCUzMyCisjZGVmaW5lCUFCUyh4KQkJCQkJaWFicyh4KQorI2RlZmluZQlBQlMzMih4KQkJCQlpYWJzKHgpCisjZGVmaW5lCUFCUzE2KHgpCQkJCWlhYnMoKGludCkoeCkpCisKKyN1bmRlZglNSU4xNgorI3VuZGVmCU1JTjMyCisjZGVmaW5lCU1JTjE2KGEsYikJCQkJaW1pbigoaW50KShhKSwoaW50KShiKSkKKyNkZWZpbmUJTUlOMzIoYSxiKQkJCQlpbWluKGEsYikKKworI3VuZGVmCU1BWDE2CisjdW5kZWYJTUFYMzIKKyNkZWZpbmUJTUFYMTYoYSxiKQkJCQlpbWF4KChpbnQpKGEpLChpbnQpKGIpKQorI2RlZmluZQlNQVgzMihhLGIpCQkJCWltYXgoYSxiKQorCisjdW5kZWYJQUREMTYKKyN1bmRlZglTVUIxNgorI3VuZGVmCUFERDMyCisjdW5kZWYJU1VCMzIKKyN1bmRlZglNVUxUMTZfMTYKKyN1bmRlZglNVUxUMTZfMTZfMTYJCQorCisjZGVmaW5lIEFERDE2KGEsYikJCQkJKChpbnQpKGEpICsgKGludCkoYikpCisjZGVmaW5lIFNVQjE2KGEsYikJCQkJKChpbnQpKGEpIC0gKGludCkoYikpCisjZGVmaW5lIEFERDMyKGEsYikJCQkJKChpbnQpKGEpICsgKGludCkoYikpCisjZGVmaW5lIFNVQjMyKGEsYikJCQkJKChpbnQpKGEpIC0gKGludCkoYikpCisjZGVmaW5lIE1VTFQxNl8xNl8xNihhLGIpCQkoKGludCkoYSkgKiAoaW50KShiKSkKKyNkZWZpbmUgTVVMVDE2XzE2KGEsYikJCQkoKGludCkoYSkgKiAoaW50KShiKSkKKworI2lmIFRNX0RFQlVHTUVNX0FMSUdOTk1FTlQKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBUTURFQlVHX0FMSUdOTUVNKHgpCQkJCQkJCQkJCQkJCQkJCQlcCisJCXsJaWYoICgoaW50KSh4KSAmIChpbnQpKDB4MDAwMDAwMDMpKSAhPSAwICkJCQkJCQkJCQkJXAorCQkJewlwcmludGYoIm1lbW9yeSBub3QgYWxpZ24uIGZpbGU6ICVzLCBsaW5lOiAlZFxuIiwgIF9fRklMRV9fLCBfX0xJTkVfXyk7CQlcCisJCQl9CQkJCQkJCQkJCQkJCQkJCQkJCQlcCisJCX0KKworI2Vsc2UKKyNkZWZpbmUgVE1ERUJVR19BTElHTk1FTSh4KQorI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC90bXYva2lzc19mZnRfdG0uaCBiLzNyZHBhcnR5L3NwZWV4L3Rtdi9raXNzX2ZmdF90bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmOGI5ODUKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC90bXYva2lzc19mZnRfdG0uaApAQCAtMCwwICsxLDU5OSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA3IEhvbmcgWmhpcWlhbiAqLworLyoqCisgICBAZmlsZSBraXNzX2ZmdF90bS5oCisgICBAYXV0aG9yIEhvbmcgWmhpcWlhbgorICAgQGJyaWVmIFZhcmlvdXMgY29tcGF0aWJpbGl0eSByb3V0aW5lcyBmb3IgU3BlZXggKFRyaU1lZGlhIHZlcnNpb24pCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgIl9raXNzX2ZmdF9ndXRzX3RtLmgiCisKKyNpZmRlZiBUTV9BU00KKworI2luY2x1ZGUgInByb2ZpbGVfdG0uaCIKKworI2lmZGVmIEZJWEVEX1BPSU5UCisKKyNkZWZpbmUgT1ZFUlJJREVfS0ZCRkxZMgorc3RhdGljIHZvaWQga2ZfYmZseTIoCisJCWtpc3NfZmZ0X2NweAkJKkZvdXQsCisgICAgICAgIGNvbnN0IGludAkJCWZzdHJpZGUsCisgICAgICAgIGNvbnN0IGtpc3NfZmZ0X2NmZwlzdCwKKyAgICAgICAgaW50CQkJCQltCisgICAgICAgICkKK3sKKwlyZWdpc3RlciBpbnQgKiByZXN0cmljdCBGb3V0MjsKKyAgICByZWdpc3RlciBpbnQgKiByZXN0cmljdCB0dzEgPSAoaW50KilzdC0+dHdpZGRsZXM7CisgICAgcmVnaXN0ZXIgaW50IGksIGo7CisJcmVnaXN0ZXIgaW50IF9pbnYgPSAhc3QtPmludmVyc2U7CisgICAgCisJRm91dDIgPSAoaW50KilGb3V0ICsgbTsKKwkKKwlmb3IgKCBpPTAsaj0wIDsgaTxtIDsgKytpLGorPTQsdHcxKz1mc3RyaWRlICkKKwl7CXJlZ2lzdGVyIGludCB0d18xMCwgZmZfMTAsIGYyXzEwOworCisJCWZmXzEwCT0gbGQzMngoRm91dCwgaSk7CisJCWYyXzEwCT0gbGQzMngoRm91dDIsIGkpOworCQl0d18xMAk9IGxkMzIodHcxKTsKKwkJCisJCWlmICggX2ludiApIAorCQl7CVRNX1NIUihmMl8xMCwgZjJfMTAsIDEpOworCQkJVE1fU0hSKGZmXzEwLCBmZl8xMCwgMSk7CisJCX0KKworCQlUTV9NVUwodHdfMTAsIHR3XzEwLCBmMl8xMCk7CisJCVRNX1NVQihmMl8xMCwgZmZfMTAsIHR3XzEwKTsKKwkJVE1fQUREKGZmXzEwLCBmZl8xMCwgdHdfMTApOworCisJCXN0MzJkKGosIEZvdXQyLCBmMl8xMCk7CisJCXN0MzJkKGosICBGb3V0LCBmZl8xMCk7CisJfQorfQorCisjZGVmaW5lIE9WRVJSSURFX0tGQkZMWTQKK3N0YXRpYyB2b2lkIGtmX2JmbHk0KAorICAgICAgICBraXNzX2ZmdF9jcHgJCSpGb3V0LAorICAgICAgICBjb25zdCBpbnQJCQlmc3RyaWRlLAorICAgICAgICBjb25zdCBraXNzX2ZmdF9jZmcJc3QsCisgICAgICAgIGNvbnN0IGludAkJCW0KKyAgICAgICAgKQoreworICAgIHJlZ2lzdGVyIGludCAqIHJlc3RyaWN0IHR3MTsKKwlyZWdpc3RlciBpbnQgKiByZXN0cmljdCB0dzI7CisJcmVnaXN0ZXIgaW50ICogcmVzdHJpY3QgdHczOworCXJlZ2lzdGVyIGludCAqIHJlc3RyaWN0IEZvdXQxOworCXJlZ2lzdGVyIGludCAqIHJlc3RyaWN0IEZvdXQyOworCXJlZ2lzdGVyIGludCAqIHJlc3RyaWN0IEZvdXQzOworCXJlZ2lzdGVyIGludCBpLCBqOworCXJlZ2lzdGVyIGludCBmc3RyaWRlMiwgZnN0cmlkZTM7CisJcmVnaXN0ZXIgaW50IF9pbnYgPSAhc3QtPmludmVyc2U7CisKKwl0dzMgID0gdHcyID0gdHcxID0gKGludCopc3QtPnR3aWRkbGVzOworCWZzdHJpZGUyID0gZnN0cmlkZSA8PCAxOworCWZzdHJpZGUzID0gZnN0cmlkZSAqIDM7CisKKwlGb3V0MSA9IChpbnQqKUZvdXQgKyBtOworCUZvdXQyID0gKGludCopRm91dCArIChtIDw8IDEpOworCUZvdXQzID0gKGludCopRm91dCArIChtICogIDMpOworCisKKwlmb3IgKCBpPTAsaj0wIDsgaTxtIDsgKytpLGorPTQsdHcxKz1mc3RyaWRlLHR3Mis9ZnN0cmlkZTIsdHczKz1mc3RyaWRlMyApCisJewlyZWdpc3RlciBpbnQgc2MwLCBzYzEsIHNjMiwgc2MzLCBzYzQsIHNjNTsKKwkJcmVnaXN0ZXIgaW50IGZmMDsKKworCQlzYzAgICA9IGxkMzJ4KEZvdXQxLGkpOworCQlzYzMgICA9IGxkMzIodHcxKTsKKwkJc2MxICAgPSBsZDMyeChGb3V0MiwgaSk7CisJCXNjNCAgID0gbGQzMih0dzIpOwkJCQorCQlzYzIgICA9IGxkMzJ4KEZvdXQzLCBpKTsKKwkJc2M1ICAgPSBsZDMyKHR3Myk7CisJCWZmMCAgID0gbGQzMngoRm91dCxpKTsKKwkJCisJCWlmICggX2ludiApCisJCXsKKwkJCVRNX0FERChzYzAsIHNjMCwgMHgwMDAyMDAwMik7CisJCQlUTV9BREQoc2MxLCBzYzEsIDB4MDAwMjAwMDIpOworCQkJVE1fQUREKHNjMiwgc2MyLCAweDAwMDIwMDAyKTsKKwkJCVRNX0FERChmZjAsIGZmMCwgMHgwMDAyMDAwMik7CisJCQlUTV9TSFIoc2MwLCBzYzAsIDIpOworCQkJVE1fU0hSKHNjMSwgc2MxLCAyKTsKKwkJCVRNX1NIUihzYzIsIHNjMiwgMik7CisJCQlUTV9TSFIoZmYwLCBmZjAsIDIpOworCQl9CisKKwkJVE1fTVVMKHNjMCwgc2MwLCBzYzMpOworCQlUTV9NVUwoc2MxLCBzYzEsIHNjNCk7CisJCVRNX01VTChzYzIsIHNjMiwgc2M1KTsKKwkJVE1fU1VCKHNjNSwgZmYwLCBzYzEpOworCQlUTV9BREQoZmYwLCBmZjAsIHNjMSk7CisJCVRNX0FERChzYzMsIHNjMCwgc2MyKTsKKwkJVE1fU1VCKHNjNCwgc2MwLCBzYzIpOworCQlUTV9TVUIoc2MxLCBmZjAsIHNjMyk7CisJCVRNX0FERChmZjAsIGZmMCwgc2MzKTsKKwkJCisJCXN0MzJkKGosIEZvdXQyLCBzYzEpOworCQlzdDMyZChqLCBGb3V0LCAgZmYwKTsKKworCQlzYzUgPSBmdW5zaGlmdDIoc2M1LCBzYzUpOworCQkKKwkJaWYgKCBfaW52ICkKKwkJewlUTV9BREQoZmYwLCBzYzUsIHNjNCk7CisJCQlUTV9TVUIoc2MxLCBzYzUsIHNjNCk7CisJCX0gZWxzZQorCQl7CVRNX0FERChzYzEsIHNjNSwgc2M0KTsKKwkJCVRNX1NVQihmZjAsIHNjNSwgc2M0KTsKKwkJfQorCisJCXNjMCA9IGZ1bnNoaWZ0MihzYzEsIGZmMCk7CisJCXNjMiA9IGZ1bnNoaWZ0MihmZjAsIHNjMSk7CisKKwkJc3QzMmQoaiwgRm91dDEsIHNjMCk7CisJCXN0MzJkKGosIEZvdXQzLCBzYzIpOworCX0KK30KKworCisjZGVmaW5lIE9WRVJSSURFX0tGQkZMWTMKK3N0YXRpYyB2b2lkIGtmX2JmbHkzKAorICAgICAgICAga2lzc19mZnRfY3B4CSpGb3V0LAorICAgICAgICAgY29uc3QgaW50CQlmc3RyaWRlLAorICAgICAgICAgY29uc3QJCQlraXNzX2ZmdF9jZmcgc3QsCisgICAgICAgICBpbnQJCQltCisgICAgICAgICApCit7CisgICAgcmVnaXN0ZXIgaW50ICogcmVzdHJpY3QgdHcxOworCXJlZ2lzdGVyIGludCAqIHJlc3RyaWN0IHR3MjsKKwlyZWdpc3RlciBpbnQgKiByZXN0cmljdCBGb3V0MTsKKwlyZWdpc3RlciBpbnQgKiByZXN0cmljdCBGb3V0MjsKKyAgICByZWdpc3RlciBpbnQgZXBpOworCXJlZ2lzdGVyIGludCBpLCBqOworCXJlZ2lzdGVyIGludCBmc3RyaWRlMjsKKwlyZWdpc3RlciBpbnQgX2ludiA9ICFzdC0+aW52ZXJzZTsKKworICAgIHR3MSAgPSB0dzIgPSAoaW50KilzdC0+dHdpZGRsZXM7CisJRm91dDEgPSAoaW50KilGb3V0ICsgbTsKKwlGb3V0MiA9IChpbnQqKUZvdXQgKyAobSA8PCAxKTsKKwllcGkgPSB0dzFbZnN0cmlkZSptXTsKKyAgICBlcGkgPSBwYWNrMTZsc2IoZXBpLGVwaSk7CisJZnN0cmlkZTIgPSBmc3RyaWRlIDw8IDE7CisKKwkgZm9yICggaT0wLGo9MCA7IGk8bSA7ICsraSxqKz00LHR3MSs9ZnN0cmlkZSx0dzIrPWZzdHJpZGUyICkKKwkgewlyZWdpc3RlciBpbnQgc2MwLCBzYzEsIHNjMiwgc2MzLCBzYzQsIHNjNTsKKwkJcmVnaXN0ZXIgaW50IGZmMDsKKworCQlzYzEgPSBsZDMyeChGb3V0MSxpKTsKKwkJc2MyID0gbGQzMngoRm91dDIsaSk7CisJCXNjMyA9IGxkMzIodHcxKTsKKwkJc2M0ID0gbGQzMih0dzIpOworCQlmZjAgPSBsZDMyeChGb3V0LGkpOworCQkKKwkJaWYgKCBfaW52ICkKKwkJeworCQkJVE1fRElWKHNjMSwgc2MxLCAzKTsKKwkJCVRNX0RJVihzYzIsIHNjMiwgMyk7CisJCQlUTV9ESVYoZmYwLCBmZjAsIDMpOworCQl9CisKKwkJVE1fTVVMKHNjMSwgc2MxLCAgc2MzKTsKKwkJVE1fTVVMKHNjMiwgc2MyLCAgc2M0KTsKKwkJVE1fQUREKHNjMywgc2MxLCAgc2MyKTsKKwkJVE1fU1VCKHNjMCwgc2MxLCAgc2MyKTsKKwkJVE1fU0hSKHNjNCwgc2MzLCAgICAxKTsKKwkJVE1fU1VCKHNjMSwgZmYwLCAgc2M0KTsKKworCQlzYzAgPSBkc3BpZHVhbG11bChzYzAsIGVwaSk7CisJCXNjMCA9IGZ1bnNoaWZ0MihzYzAsIHNjMCk7CisKKwkJVE1fQUREKGZmMCwgZmYwLCBzYzMpOworCQlUTV9BREQoc2M0LCBzYzEsIHNjMCk7CisJCVRNX1NVQihzYzUsIHNjMSwgc2MwKTsKKworCQlzYzEgPSBmdW5zaGlmdDIoc2M0LCBzYzUpOworCQlzYzIgPSBmdW5zaGlmdDIoc2M1LCBzYzQpOworCQlzYzIgPSBmdW5zaGlmdDIoc2MyLCBzYzIpOworCisJCXN0MzJkKGosIEZvdXQxLCBzYzEpOworCQlzdDMyZChqLCBGb3V0LCAgZmYwKTsKKwkJc3QzMmQoaiwgRm91dDIsIHNjMik7CisJIH0KK30KKworCisjZGVmaW5lIE9WRVJSSURFX0tGQkZMWTUKK3N0YXRpYyB2b2lkIGtmX2JmbHk1KAorICAgICAgICBraXNzX2ZmdF9jcHgJCSpGb3V0LAorICAgICAgICBjb25zdCBpbnQJCQlmc3RyaWRlLAorICAgICAgICBjb25zdCBraXNzX2ZmdF9jZmcJc3QsCisgICAgICAgIGludCBtCisgICAgICAgICkKK3sgICAKKyAgICByZWdpc3RlciBpbnQgKiByZXN0cmljdCB0dzE7CisJcmVnaXN0ZXIgaW50ICogcmVzdHJpY3QgdHcyOworCXJlZ2lzdGVyIGludCAqIHJlc3RyaWN0IHR3MzsKKwlyZWdpc3RlciBpbnQgKiByZXN0cmljdCB0dzQ7CisJcmVnaXN0ZXIgaW50ICogcmVzdHJpY3QgRm91dDE7CisJcmVnaXN0ZXIgaW50ICogcmVzdHJpY3QgRm91dDI7CisJcmVnaXN0ZXIgaW50ICogcmVzdHJpY3QgRm91dDM7CisJcmVnaXN0ZXIgaW50ICogcmVzdHJpY3QgRm91dDQ7CisJcmVnaXN0ZXIgaW50IGZzdHJpZGUyLCBmc3RyaWRlMywgZnN0cmlkZTQ7CisJcmVnaXN0ZXIgaW50IGksIGo7CisJcmVnaXN0ZXIgaW50IHlhYl9tc2IsIHlhYl9sc2IsIHliYV9tc2IsIHliYV9sc2I7CisJcmVnaXN0ZXIgaW50IF9pbnYgPSAhc3QtPmludmVyc2U7CisKKworICAgIEZvdXQxPShpbnQqKUZvdXQrbTsKKyAgICBGb3V0Mj0oaW50KilGb3V0KyhtPDwxKTsKKyAgICBGb3V0Mz0oaW50KilGb3V0KygzICptKTsKKyAgICBGb3V0ND0oaW50KilGb3V0KyhtPDwyKTsKKworICAgIHR3MSA9IHR3MiA9IHR3MyA9IHR3NCA9IChpbnQqKXN0LT50d2lkZGxlczsKKworCWkgPSB0dzFbZnN0cmlkZSptXTsKKyAgICB5YWJfbHNiID0gdHcxW2ZzdHJpZGUqKG08PDEpXTsKKwl5YWJfbXNiID0gcGFjazE2bXNiKGksIHlhYl9sc2IpOworCXlhYl9sc2IgPSBwYWNrMTZsc2IoaSwgeWFiX2xzYik7CisJeWJhX21zYiA9IGZ1bnNoaWZ0Migtc2V4MTYoeWFiX21zYiksIHlhYl9tc2IpOworCXliYV9sc2IgPSBmdW5zaGlmdDIoeWFiX2xzYiwgeWFiX2xzYik7CisKKwlmc3RyaWRlMiA9IGZzdHJpZGUgPDwgMTsKKwlmc3RyaWRlMyA9IGZzdHJpZGUgKiAgMzsKKwlmc3RyaWRlNCA9IGZzdHJpZGUgPDwgMjsKKworCWZvciAoIGk9MCxqPTAgOyBpPG0gOyArK2ksais9NCx0dzErPWZzdHJpZGUsdHcyKz1mc3RyaWRlMix0dzMrPWZzdHJpZGUzLHR3NCs9ZnN0cmlkZTQgKQorCXsJcmVnaXN0ZXIgaW50IHNjMCwgc2MxLCBzYzIsIHNjMywgc2M0LCBzYzUsIHNjNjsKKwkJcmVnaXN0ZXIgaW50IHNjNywgc2M4LCBzYzksIHNjMTAsIHNjMTEsIHNjMTI7CisJCXJlZ2lzdGVyIGludCBmZjAsIHNjNzhfbXNiLCBzYzc4X2xzYiwgc2M5MF9tc2IsIHNjOTBfbHNiOworCisJCXNjMCA9IGxkMzJ4KEZvdXQsaSk7CisJCXNjMSA9IGxkMzJ4KEZvdXQxLGkpOworCQlzYzIgPSBsZDMyeChGb3V0MixpKTsKKwkJc2MzID0gbGQzMngoRm91dDMsaSk7CisJCXNjNCA9IGxkMzJ4KEZvdXQ0LGkpOworCQlzYzUgPSBsZDMyKHR3MSk7CisJCXNjNiA9IGxkMzIodHcyKTsKKwkJc2M3ID0gbGQzMih0dzMpOworCQlzYzggPSBsZDMyKHR3NCk7CisKKwkJaWYgKCBfaW52ICkKKwkJeworCQkJVE1fRElWKHNjMCwgc2MwLCA1KTsKKwkJCVRNX0RJVihzYzEsIHNjMSwgNSk7CisJCQlUTV9ESVYoc2MyLCBzYzIsIDUpOworCQkJVE1fRElWKHNjMywgc2MzLCA1KTsKKwkJCVRNX0RJVihzYzQsIHNjNCwgNSk7CisJCX0KKworCQlmZjAgPSBzYzA7CisKKwkJVE1fTVVMKHNjMSwgc2MxLCBzYzUpOworCQlUTV9NVUwoc2MyLCBzYzIsIHNjNik7CisJCVRNX01VTChzYzMsIHNjMywgc2M3KTsKKwkJVE1fTVVMKHNjNCwgc2M0LCBzYzgpOworCQlUTV9BREQoc2M3LCBzYzEsIHNjNCk7CisJCVRNX1NVQihzYzEwLHNjMSwgc2M0KTsKKwkJVE1fQUREKHNjOCwgc2MyLCBzYzMpOworCQlUTV9TVUIoc2M5LCBzYzIsIHNjMyk7CisKKwkJVE1fQUREKGZmMCwgZmYwLCBzYzcpOworCQlUTV9BREQoZmYwLCBmZjAsIHNjOCk7CisJCXN0MzJkKGosIEZvdXQsICBmZjApOworCisJCXNjNzhfbXNiID0gcGFjazE2bXNiKHNjNyxzYzgpOworCQlzYzc4X2xzYiA9IHBhY2sxNmxzYihzYzcsc2M4KTsKKwkJc2M5MF9tc2IgPSBwYWNrMTZtc2Ioc2MxMCxzYzkpOworCQlzYzkwX2xzYiA9IHBhY2sxNmxzYihzYzEwLHNjOSk7CisJCQorCQlzYzUgPSBwYWNrMTZsc2IoIHNyb3VuZChpZmlyMTYoc2M3OF9tc2IseWFiX2xzYikpLCBzcm91bmQoaWZpcjE2KHNjNzhfbHNiLHlhYl9sc2IpKSk7CisJCXNjNiA9IHBhY2sxNmxzYigtc3JvdW5kKGlmaXIxNihzYzkwX2xzYix5YWJfbXNiKSksIHNyb3VuZChpZmlyMTYoc2M5MF9tc2IseWFiX21zYikpKTsKKworCQlUTV9BREQoc2M1LCBzYzUsIHNjMCk7CisJCVRNX1NVQihzYzEsIHNjNSwgc2M2KTsKKwkJVE1fQUREKHNjNCwgc2M1LCBzYzYpOworCQlzdDMyZChqLCBGb3V0MSwgc2MxKTsKKwkJc3QzMmQoaiwgRm91dDQsIHNjNCk7CisKKwkJc2MxMSA9IHBhY2sxNmxzYiggc3JvdW5kKGlmaXIxNihzYzc4X21zYix5YmFfbHNiKSksIHNyb3VuZChpZmlyMTYoc2M3OF9sc2IseWJhX2xzYikpKTsKKwkJc2MxMiA9IHBhY2sxNmxzYigtc3JvdW5kKGlmaXIxNihzYzkwX2xzYix5YmFfbXNiKSksIHNyb3VuZChpZmlyMTYoc2M5MF9tc2IseWJhX21zYikpKTsKKworCQlUTV9BREQoc2MxMSwgc2MxMSwgc2MwKTsKKwkJVE1fQUREKHNjMiwgc2MxMSwgc2MxMik7CisJCVRNX1NVQihzYzMsIHNjMTEsIHNjMTIpOworCQlzdDMyZChqLCBGb3V0Miwgc2MyKTsKKwkJc3QzMmQoaiwgRm91dDMsIHNjMyk7CisKKwl9Cit9CisKKworI2RlZmluZSBPVkVSUklERV9LRl9CRkxZX0dFTkVSSUMKK3N0YXRpYyB2b2lkIGtmX2JmbHlfZ2VuZXJpYygKKyAgICAgICAga2lzc19mZnRfY3B4ICogcmVzdHJpY3QgRm91dCwKKyAgICAgICAgY29uc3Qgc2l6ZV90IGZzdHJpZGUsCisgICAgICAgIGNvbnN0IGtpc3NfZmZ0X2NmZyBzdCwKKyAgICAgICAgaW50IG0sCisgICAgICAgIGludCBwCisgICAgICAgICkKK3sKKwlyZWdpc3RlciBpbnQgX2ludiA9ICFzdC0+aW52ZXJzZTsKKwlyZWdpc3RlciBpbnQgaSwgaiwgaywgbDsKKyAgICByZWdpc3RlciBpbnQgKiByZXN0cmljdCB0d2lkZGxlcyA9IChpbnQqKXN0LT50d2lkZGxlczsKKyAgICByZWdpc3RlciBpbnQgTm9yaWcgPSBzdC0+bmZmdDsKKworICAgIENIRUNLQlVGKHNjcmF0Y2hidWYsbnNjcmF0Y2hidWYscCk7CisKKyAgICBmb3IgKCBpPTA7IGk8bTsgKytpICkgCisJewlyZWdpc3RlciBpbnQgc2MxMDsKKworICAgICAgICBmb3IgKCBqPTAsaz1pIDsgajxwIDsgKytqLGsrPW0gKSAKKwkJewlyZWdpc3RlciBpbnQgZjEwOworCisJCQlmMTAgPSBsZDMyeChGb3V0LGspOworCisJCQlpZiAoIF9pbnYgKSAKKwkJCXsJVE1fRElWKGYxMCwgZjEwLCBwKTsKKwkJCX0KKworCQkJc3QzMmQoajw8Miwgc2NyYXRjaGJ1ZiwgZjEwKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoIGo9MCxrPWksc2MxMD1sZDMyKHNjcmF0Y2hidWYpIDsgajxwIDsgKytqLGsrPW0gKSAKKwkJeworICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHR3aWR4ID0gMDsKKwkJCXJlZ2lzdGVyIGludCBmMTA7CisKKyAgICAgICAgICAgIGZvciAoIGw9MSxmMTAgPSBzYzEwIDsgbDxwIDsgKytsICkgCisJCQl7CXJlZ2lzdGVyIGludCB0dywgc2M7CisKKyAgICAgICAgICAgICAgICB0d2lkeCArPSBmc3RyaWRlICogazsKKwkJCQlpZiAoIHR3aWR4Pj1Ob3JpZyApIAorCQkJCXsJdHdpZHggLT0gTm9yaWc7CisJCQkJfQorCQkJCQorCQkJCXNjID0gbGQzMngoc2NyYXRjaGJ1ZixsKTsKKwkJCQl0dyA9IGxkMzJ4KHR3aWRkbGVzLHR3aWR4KTsKKyAgICAgICAgICAgICAgICAKKwkJCQlUTV9NVUwoc2MsIHNjLCB0dyk7CisJCQkJVE1fQUREKGYxMCwgZjEwLCBzYyk7CisJCQl9CisJCQlzdDMyZChrPDwyLCBGb3V0LCBmMTApOyAKKwkJfQorCX0KK30KKworI2Vsc2UKKworI2RlZmluZSBPVkVSUklERV9LRkJGTFkyCitzdGF0aWMgdm9pZCBrZl9iZmx5MigKKyAgICAgICAga2lzc19mZnRfY3B4ICogRm91dCwKKyAgICAgICAgY29uc3Qgc2l6ZV90IGZzdHJpZGUsCisgICAgICAgIGNvbnN0IGtpc3NfZmZ0X2NmZyBzdCwKKyAgICAgICAgaW50IG0KKyAgICAgICAgKQoreworICAgIHJlZ2lzdGVyIGtpc3NfZmZ0X2NweCAqIHJlc3RyaWN0IEZvdXQyOworICAgIHJlZ2lzdGVyIGtpc3NfZmZ0X2NweCAqIHJlc3RyaWN0IHR3MSA9IHN0LT50d2lkZGxlczsKKworICAgIEZvdXQyID0gRm91dCArIG07CisKKyAgICBkbworCXsKKwkJcmVnaXN0ZXIga2lzc19mZnRfY3B4IF9mb3V0MiwgX2ZvdXQsIHQ7CisJCQorCQlfZm91dDIgPSAqRm91dDI7CisJCV9mb3V0ICA9ICpGb3V0OworCQkKKyAgICAgICAgQ19NVUwJKAkgIHQsICBfZm91dDIsICAgKnR3MSk7CisgICAgICAgIENfU1VCCShfZm91dDIsICAgX2ZvdXQsCSAgIHQpOworICAgICAgICBDX0FERAkoX2ZvdXQsICAgIF9mb3V0LAkgICB0KTsKKwkJCisJCSpGb3V0MiA9IF9mb3V0MjsKKwkJKkZvdXQgID0gX2ZvdXQ7CisJCQorCQl0dzEJKz0gZnN0cmlkZTsKKyAgICAgICAgKytGb3V0MjsKKyAgICAgICAgKytGb3V0OworCisgICAgfSB3aGlsZSAoIC0tbSApOworfQorCisjZGVmaW5lIE9WRVJSSURFX0tGQkZMWTQKK3N0YXRpYyB2b2lkIGtmX2JmbHk0KAorICAgICAgICBraXNzX2ZmdF9jcHggKiBGb3V0LAorICAgICAgICBjb25zdCBpbnQgZnN0cmlkZSwKKyAgICAgICAgY29uc3Qga2lzc19mZnRfY2ZnIHN0LAorICAgICAgICBpbnQgbQorICAgICAgICApCit7CisgICAgcmVnaXN0ZXIga2lzc19mZnRfY3B4ICogcmVzdHJpY3QgdHcxLCogcmVzdHJpY3QgdHcyLCogcmVzdHJpY3QgdHczOworCXJlZ2lzdGVyIGtpc3NfZmZ0X2NweCAqIHJlc3RyaWN0IEZvdXQxLCAqIHJlc3RyaWN0IEZvdXQyLCAqIHJlc3RyaWN0IEZvdXQzOyAKKwlyZWdpc3RlciBpbnQgX2ludiA9ICFzdC0+aW52ZXJzZTsKKwkKKyAgICB0dzMgPSB0dzIgPSB0dzEgPSBzdC0+dHdpZGRsZXM7CisJCisJRm91dDEgPSBGb3V0ICsgbTsKKwlGb3V0MiA9IEZvdXQgKyAobSA8PCAxKTsKKwlGb3V0MyA9IEZvdXQgKyAobSAqIDMpOworCisJZG8geworCSAgIAorCQlyZWdpc3RlciBraXNzX2ZmdF9jcHggX2ZvdXQ7CisJCXJlZ2lzdGVyIGtpc3NfZmZ0X2NweCBzYzAsIHNjMSwgc2MyLCBzYzMsIHNjNCwgc2M1OworCQkKKwkJX2ZvdXQgPSAqRm91dDsKKwkJCisJCUNfTVVMKCAgIHNjMCwqRm91dDEsICp0dzEpOworCQlDX01VTCggICBzYzEsKkZvdXQyLCAqdHcyKTsKKwkJQ19NVUwoICAgc2MyLCpGb3V0MywgKnR3Myk7CisJCUNfU1VCKCAgIHNjNSwgX2ZvdXQsICBzYzEpOworCQlDX0FERCggX2ZvdXQsIF9mb3V0LCAgc2MxKTsKKwkJQ19BREQoICAgc2MzLCAgIHNjMCwgIHNjMik7CisJCUNfU1VCKCAgIHNjNCwgICBzYzAsICBzYzIpOworCQlDX1NVQigqRm91dDIsIF9mb3V0LCAgc2MzKTsKKwkJQ19BREQoICpGb3V0LCBfZm91dCwgIHNjMyk7CisKKwkJdHcxICs9IGZzdHJpZGU7CQkKKwkJdHcyICs9IChmc3RyaWRlIDw8IDEpOworCQl0dzMgKz0gKGZzdHJpZGUgKiAgMyk7CisJCQorCQlpZiAoIF9pbnYgKQorCQl7CisJCQlGb3V0MS0+ciA9IHNjNS5yICsgc2M0Lmk7CisJCQlGb3V0MS0+aSA9IHNjNS5pIC0gc2M0LnI7CisJCQlGb3V0My0+ciA9IHNjNS5yIC0gc2M0Lmk7CisJCQlGb3V0My0+aSA9IHNjNS5pICsgc2M0LnI7CisJCX0KKwkJZWxzZQorCQl7CUZvdXQxLT5yID0gc2M1LnIgLSBzYzQuaTsKKwkJCUZvdXQxLT5pID0gc2M1LmkgKyBzYzQucjsKKwkJCUZvdXQzLT5yID0gc2M1LnIgKyBzYzQuaTsKKwkJCUZvdXQzLT5pID0gc2M1LmkgLSBzYzQucjsKKwkJfQorCQkgIAorCQkgIAorICAgICAgICArK0ZvdXQ7ICsrRm91dDE7ICsrRm91dDI7ICsrRm91dDM7CisJCQorICAgIH0gd2hpbGUoLS1tKTsKK30KKworI2RlZmluZSBPVkVSUklERV9LRkJGTFkzCitzdGF0aWMgdm9pZCBrZl9iZmx5MygKKyAgICAgICAgIGtpc3NfZmZ0X2NweCAqIEZvdXQsCisgICAgICAgICBjb25zdCBpbnQgZnN0cmlkZSwKKyAgICAgICAgIGNvbnN0IGtpc3NfZmZ0X2NmZyBzdCwKKyAgICAgICAgIGludCBtCisgICAgICAgICApCit7CisJcmVnaXN0ZXIga2lzc19mZnRfY3B4ICogcmVzdHJpY3QgRm91dDEsICogcmVzdHJpY3QgRm91dDI7CisJcmVnaXN0ZXIga2lzc19mZnRfY3B4ICogcmVzdHJpY3QgdHcxLCogcmVzdHJpY3QgdHcyOworCXJlZ2lzdGVyIGZsb2F0IGVwaTsKKwkKKyAgICB0dzEgPSB0dzIgPSBzdC0+dHdpZGRsZXM7CisgICAgZXBpID0gc3QtPnR3aWRkbGVzW2ZzdHJpZGUqbV0uaTsKKwlGb3V0MSA9IEZvdXQgKyBtOworCUZvdXQyID0gRm91dCArIChtIDw8IDEpOworCisgICAgZG8geworICAgICAgICAKKwkJcmVnaXN0ZXIga2lzc19mZnRfY3B4IF9mb3V0OworCQlyZWdpc3RlciBraXNzX2ZmdF9jcHggc2MwLCBzYzEsIHNjMiwgc2MzOworCQkKKwkJX2ZvdXQgPSAqRm91dDsKKwkJCisgICAgICAgIENfTVVMKCAgIHNjMSwgKkZvdXQxLCAgKnR3MSk7CisgICAgICAgIENfTVVMKCAgIHNjMiwgKkZvdXQyLCAgKnR3Mik7CisgICAgICAgIENfQUREKAkgc2MzLCAgICBzYzEsICAgc2MyKTsKKyAgICAgICAgQ19TVUIoICAgc2MwLCAgICBzYzEsICAgc2MyKTsKKyAgICAgICAgdHcxICs9IGZzdHJpZGU7CisgICAgICAgIHR3MiArPSAoZnN0cmlkZSA8PCAxKTsKKwkJCisgICAgICAgIHNjMS5yID0gX2ZvdXQuciAtIEhBTEZfT0Yoc2MzLnIpOworICAgICAgICBzYzEuaSA9IF9mb3V0LmkgLSBIQUxGX09GKHNjMy5pKTsKKwkJCisgICAgICAgIENfTVVMQllTQ0FMQVIoc2MwLCAgZXBpKTsKKyAgICAgICAgQ19BREQoKkZvdXQsIF9mb3V0LCBzYzMpOworCQkKKyAgICAgICAgRm91dDItPnIgPSBzYzEuciArIHNjMC5pOworICAgICAgICBGb3V0Mi0+aSA9IHNjMS5pIC0gc2MwLnI7CisJCQorICAgICAgICBGb3V0MS0+ciA9IHNjMS5pIC0gc2MwLmk7CisgICAgICAgIEZvdXQxLT5pID0gc2MxLnIgKyBzYzAucjsKKwkJCisgICAgICAgICsrRm91dDsgKytGb3V0MTsgKytGb3V0MjsKKwkJCisJfSB3aGlsZSgtLW0pOworfQorCisjZGVmaW5lIE9WRVJSSURFX0tGQkZMWTUKK3N0YXRpYyB2b2lkIGtmX2JmbHk1KAorICAgICAgICBraXNzX2ZmdF9jcHggKiBGb3V0LAorICAgICAgICBjb25zdCBzaXplX3QgZnN0cmlkZSwKKyAgICAgICAgY29uc3Qga2lzc19mZnRfY2ZnIHN0LAorICAgICAgICBpbnQgbQorICAgICAgICApCit7CisgICAgcmVnaXN0ZXIga2lzc19mZnRfY3B4ICogcmVzdHJpY3QgRm91dDEsKiByZXN0cmljdCBGb3V0MiwqIHJlc3RyaWN0IEZvdXQzLCogcmVzdHJpY3QgRm91dDQ7CisJcmVnaXN0ZXIgaW50IHU7CisgICAgcmVnaXN0ZXIga2lzc19mZnRfY3B4ICp0dzsKKyAgICByZWdpc3RlciBmbG9hdCB5YXIsIHlhaSwgeWJyLCB5Ymk7CisKKyAgICBGb3V0MT1Gb3V0K207CisgICAgRm91dDI9Rm91dCsobTw8MSk7CisgICAgRm91dDM9Rm91dCsobSozKTsKKyAgICBGb3V0ND1Gb3V0KyhtPDwyKTsKKworICAgIHR3ID0gc3QtPnR3aWRkbGVzOworICAgIHlhciA9IHR3W2ZzdHJpZGUqbV0ucjsKKwl5YWkgPSB0d1tmc3RyaWRlKm1dLmk7CisgICAgeWJyID0gdHdbZnN0cmlkZSoyKm1dLnI7CisJeWJpID0gdHdbZnN0cmlkZSoyKm1dLmk7CisgICAKKwlmb3IgKCB1PTA7IHU8bTsgKyt1ICkKKwl7CisJCXJlZ2lzdGVyIGtpc3NfZmZ0X2NweCBzYzAsIHNjMSwgc2MyLCBzYzMsIHNjNCwgc2M1LCBzYzYsIHNjNywgc2M4LCBzYzksIHNjMTAsIHNjMTEsIHNjMTI7CisJCQorCQlzYzAgPSAqRm91dDsKKwkJCisgICAgICAgIENfTVVMKCAgIHNjMSwqRm91dDEsICAgdHdbdSpmc3RyaWRlXSk7CisgICAgICAgIENfTVVMKCAgIHNjMiwqRm91dDIsIHR3WzIqdSpmc3RyaWRlXSk7CisgICAgICAgIENfTVVMKCAgIHNjMywqRm91dDMsIHR3WzMqdSpmc3RyaWRlXSk7CisgICAgICAgIENfTVVMKCAgIHNjNCwqRm91dDQsIHR3WzQqdSpmc3RyaWRlXSk7CisJCQorICAgICAgICBDX0FERCggICBzYzcsICAgc2MxLCAgIHNjNCk7CisgICAgICAgIENfU1VCKCAgc2MxMCwgICBzYzEsICAgc2M0KTsKKyAgICAgICAgQ19BREQoICAgc2M4LCAgIHNjMiwgICBzYzMpOworICAgICAgICBDX1NVQiggICBzYzksICAgc2MyLCAgIHNjMyk7CisJCQorICAgICAgICBGb3V0LT5yID0gc2MwLnIgKyBzYzcuciArIHNjOC5yOworICAgICAgICBGb3V0LT5pID0gc2MwLmkgKyBzYzcuaSArIHNjOC5pOworCQkKKyAgICAgICAgc2M1LnIgPSBzYzAuciArIFNfTVVMKHNjNy5yLHlhcikgKyBTX01VTChzYzgucix5YnIpOworICAgICAgICBzYzUuaSA9IHNjMC5pICsgU19NVUwoc2M3LmkseWFyKSArIFNfTVVMKHNjOC5pLHlicik7CisJCQorICAgICAgICBzYzYuciA9ICBTX01VTChzYzEwLmkseWFpKSArIFNfTVVMKHNjOS5pLHliaSk7CisgICAgICAgIHNjNi5pID0gLVNfTVVMKHNjMTAucix5YWkpIC0gU19NVUwoc2M5LnIseWJpKTsKKwkJCisgICAgICAgIENfU1VCKCpGb3V0MSxzYzUsc2M2KTsKKyAgICAgICAgQ19BREQoKkZvdXQ0LHNjNSxzYzYpOworCQkKKyAgICAgICAgc2MxMS5yID0gc2MwLnIgKyBTX01VTChzYzcucix5YnIpICsgU19NVUwoc2M4LnIseWFyKTsKKyAgICAgICAgc2MxMS5pID0gc2MwLmkgKyBTX01VTChzYzcuaSx5YnIpICsgU19NVUwoc2M4LmkseWFyKTsKKyAgICAgICAgc2MxMi5yID0gLSBTX01VTChzYzEwLmkseWJpKSArIFNfTVVMKHNjOS5pLHlhaSk7CisgICAgICAgIHNjMTIuaSA9IFNfTVVMKHNjMTAucix5YmkpIC0gU19NVUwoc2M5LnIseWFpKTsKKyAgICAgICAgQ19BREQoKkZvdXQyLHNjMTEsc2MxMik7CisgICAgICAgIENfU1VCKCpGb3V0MyxzYzExLHNjMTIpOworCQkKKyAgICAgICAgKytGb3V0MTsgKytGb3V0MjsgKytGb3V0MzsgKytGb3V0NDsKKwl9Cit9CisKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvdG12L2tpc3NfZmZ0cl90bS5oIGIvM3JkcGFydHkvc3BlZXgvdG12L2tpc3NfZmZ0cl90bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMDViMjIKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC90bXYva2lzc19mZnRyX3RtLmgKQEAgLTAsMCArMSwyMzUgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNyBIb25nIFpoaXFpYW4gKi8KKy8qKgorICAgQGZpbGUga2lzc19mZnRyX3RtLmgKKyAgIEBhdXRob3IgSG9uZyBaaGlxaWFuCisgICBAYnJpZWYgVmFyaW91cyBjb21wYXRpYmlsaXR5IHJvdXRpbmVzIGZvciBTcGVleCAoVHJpTWVkaWEgdmVyc2lvbikKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworI2luY2x1ZGUgIl9raXNzX2ZmdF9ndXRzX3RtLmgiCisKKyNpZmRlZiBUTV9BU00KKworI2luY2x1ZGUgInByb2ZpbGVfdG0uaCIKKworI2lmZGVmIEZJWEVEX1BPSU5UCisKKyNkZWZpbmUgVE1fTkRJVihyZXMsYyxmcmFjKQkJCQkJCQkJCQkJCQkJCVwKKwl7CXJlZ2lzdGVyIGludCBjMSwgYzA7CQkJCQkJCQkJCQkJCQlcCisJCQkJCQkJCQkJCQkJCQkJCQkJCQlcCisJCWMxID0gLWFzcmkoMTYsKGMpKTsJCQkJCQkJCQkJCQkJCQlcCisJCWMwID0gc2V4MTYoKGMpKTsJCQkJCQkJCQkJCQkJCQlcCisJCShyZXMpID0gcGFjazE2bHNiKHNyb3VuZChjMSAqICgzMjc2Ny8oZnJhYykpKSwgc3JvdW5kKGMwICogKDMyNzY3LyhmcmFjKSkpKTtcCisJfQkKKworCisjZGVmaW5lIE9WRVJSSURFX0tJU1NfRkZUUgordm9pZCBraXNzX2ZmdHIoa2lzc19mZnRyX2NmZyBzdCxjb25zdCBraXNzX2ZmdF9zY2FsYXIgKiByZXN0cmljdCB0aW1lZGF0YSwga2lzc19mZnRfY3B4ICogcmVzdHJpY3QgZnJlcWRhdGEpCit7CisJcmVnaXN0ZXIgaW50IG5jZmZ0LCBuY2ZmdDIsIGs7CisJcmVnaXN0ZXIgaW50ICogcmVzdHJpY3QgdG1wYnVmOworCXJlZ2lzdGVyIGludCAqIHJlc3RyaWN0IHR3aWRkbGVzOworCisJbmNmZnQgPSBzdC0+c3Vic3RhdGUtPm5mZnQ7CisJbmNmZnQyID0gbmNmZnQgPj4gMTsKKwl0bXBidWYgPSAoaW50KilzdC0+dG1wYnVmOworCXR3aWRkbGVzID0gKGludCopc3QtPnN1cGVyX3R3aWRkbGVzOworCisJVE1ERUJVR19BTElHTk1FTSh0aW1lZGF0YSk7CisJVE1ERUJVR19BTElHTk1FTShmcmVxZGF0YSk7CisJVE1ERUJVR19BTElHTk1FTSh0bXBidWYpOworCVRNREVCVUdfQUxJR05NRU0odHdpZGRsZXMpOworCisJa2lzc19mZnQoc3QtPnN1YnN0YXRlICwgKGNvbnN0IGtpc3NfZmZ0X2NweCopdGltZWRhdGEsIHN0LT50bXBidWYpOworCisJIHsKKwkJcmVnaXN0ZXIgaW50IHRkY3IsIHRkY2k7CisJCXRkY3IgPSBzcm91bmQoc3QtPnRtcGJ1ZlswXS5yICogKDMyNzY3LzIpKTsKKwkJdGRjaSA9IHNyb3VuZChzdC0+dG1wYnVmWzBdLmkgKiAoMzI3NjcvMikpOworCisJCWZyZXFkYXRhWzBdLnIgPSB0ZGNyICsgdGRjaTsKKwkJZnJlcWRhdGFbbmNmZnRdLnIgPSB0ZGNyIC0gdGRjaTsKKwkJZnJlcWRhdGFbbmNmZnRdLmkgPSBmcmVxZGF0YVswXS5pID0gMDsKKwkgfQorCisJIGZvciAoIGs9MSA7IGsgPD0gbmNmZnQyIDsgKytrICkgCisJIHsJCisJCXJlZ2lzdGVyIGludCBmcGssIGZwbmssIGksIHR3LCBmMWssIGYyazsKKwkJcmVnaXN0ZXIgaW50IGZxMSwgZnEyOworCisJCWkgPSBuY2ZmdC1rOworCisJCWZwayAgPSBsZDMyeCh0bXBidWYsayk7CisJCXR3ICAgPSBsZDMyeCh0d2lkZGxlcyxrKTsKKwkJZnBuayA9IGxkMzJ4KHRtcGJ1ZixpKTsKKworCQlUTV9ESVYoZnBrLCBmcGssIDIpOworCQlUTV9ORElWKGZwbmssZnBuaywyKTsKKyAKKyAgICAgICAgVE1fQUREKCBmMWssIGZwayAsIGZwbmsgKTsKKyAgICAgICAgVE1fU1VCKCBmMmssIGZwayAsIGZwbmsgKTsKKwkJVE1fTVVMKCB0dyAsIGYyaywgdHcgKTsKKwkJVE1fQUREKCBmcTEsIGYxaywgdHcgKTsKKwkJVE1fU0hSKCBmcTEsIGZxMSwgMSAgKTsKKwkJVE1fU1VCKCBmcTIsIGYxaywgdHcgKTsKKwkJVE1fTkVHTVNCKCBmcTIsIGZxMiApOworCQlUTV9TSFIoIGZxMiwgZnEyLCAxICk7CisKKworCQlzdDMyZCggazw8MiwgZnJlcWRhdGEsIGZxMSApOworCQlzdDMyZCggaTw8MiwgZnJlcWRhdGEsIGZxMiApOworICAgIH0KK30KKworI2RlZmluZSBPVkVSUklERV9LSVNTX0ZGVFJJCit2b2lkIGtpc3NfZmZ0cmkoa2lzc19mZnRyX2NmZyBzdCxjb25zdCBraXNzX2ZmdF9jcHggKiByZXN0cmljdCBmcmVxZGF0YSxraXNzX2ZmdF9zY2FsYXIgKiByZXN0cmljdCB0aW1lZGF0YSkKK3sKKwlyZWdpc3RlciBpbnQgaywgbmNmZnQsIG5jZmZ0MjsKKwlyZWdpc3RlciBpbnQgKiByZXN0cmljdCB0bXBidWY7CisJcmVnaXN0ZXIgaW50ICogcmVzdHJpY3QgdHdpZGRsZXM7CisKKyAgICBuY2ZmdCA9IHN0LT5zdWJzdGF0ZS0+bmZmdDsKKwluY2ZmdDIgPSBuY2ZmdCA+PiAxOworCXRtcGJ1ZiA9IChpbnQqKXN0LT50bXBidWY7CisJdHdpZGRsZXMgPSAoaW50KilzdC0+c3VwZXJfdHdpZGRsZXM7CisKKwlUTURFQlVHX0FMSUdOTUVNKGZyZXFkYXRhKTsKKwlUTURFQlVHX0FMSUdOTUVNKHRpbWVkYXRhKTsKKwlUTURFQlVHX0FMSUdOTUVNKHRtcGJ1Zik7CisJVE1ERUJVR19BTElHTk1FTSh0d2lkZGxlcyk7CisKKwl7CisJCXJlZ2lzdGVyIGludCBmcXIsIGZxbnI7CisKKwkJZnFyICA9IGZyZXFkYXRhWzBdLnI7CisJCWZxbnIgPSBmcmVxZGF0YVtuY2ZmdF0ucjsKKworCQlzdC0+dG1wYnVmWzBdLnIgPSBmcXIgKyBmcW5yOworCQlzdC0+dG1wYnVmWzBdLmkgPSBmcXIgLSBmcW5yOworCX0KKworICAgIGZvciAoIGs9MSA7IGsgPD0gbmNmZnQyIDsgKytrICkgCisJeworCQlyZWdpc3RlciBpbnQgZmssIGZua2MsIGksIHR3LCBmZWssIGZvaywgdG1wOworCQlyZWdpc3RlciBpbnQgdGJrLCB0Ym47CisKKwkJaSA9IG5jZmZ0LWs7CisKKwkJZmsgPSBsZDMyeChmcmVxZGF0YSxrKTsKKwkJdHcgPSBsZDMyeCh0d2lkZGxlcyxrKTsKKwkJZm5rYyA9IHBhY2sxNmxzYigtZnJlcWRhdGFbaV0uaSwgZnJlcWRhdGFbaV0ucik7CisJCisgICAgICAgIFRNX0FERCAoZmVrLCBmaywgZm5rYyk7CisgICAgICAgIFRNX1NVQiAodG1wLCBmaywgZm5rYyk7CisgICAgICAgIFRNX01VTCAoZm9rLCB0bXAsIHR3ICk7CisJCVRNX0FERCAodGJrLCBmZWssIGZvayk7CisJCVRNX1NVQiAodGJuLCBmZWssIGZvayk7CisJCVRNX05FR01TQih0Ym4sIHRibik7CisKKwkJc3QzMmQoazw8MiwgdG1wYnVmLCB0YmspOworCQlzdDMyZChpPDwyLCB0bXBidWYsIHRibik7CisgICAgfQorICAgIGtpc3NfZmZ0IChzdC0+c3Vic3RhdGUsIHN0LT50bXBidWYsIChraXNzX2ZmdF9jcHggKikgdGltZWRhdGEpOworfQorCisjZWxzZQorCisjZGVmaW5lIE9WRVJSSURFX0tJU1NfRkZUUgordm9pZCBraXNzX2ZmdHIoa2lzc19mZnRyX2NmZyBzdCxjb25zdCBraXNzX2ZmdF9zY2FsYXIgKiByZXN0cmljdCB0aW1lZGF0YSxraXNzX2ZmdF9jcHggKiByZXN0cmljdCBmcmVxZGF0YSkKK3sKKyAgICByZWdpc3RlciBraXNzX2ZmdF9jcHggZnBuaywgZnBrLCBmMWssIGYyaywgdHdrOworICAgIHJlZ2lzdGVyIGludCBrLCBuY2ZmdDsKKwlyZWdpc3RlciBraXNzX2ZmdF9jcHggKiByZXN0cmljdCB0bXBidWYsICogcmVzdHJpY3QgdHc7CisJcmVnaXN0ZXIgZmxvYXQgdGRjciwgdGRjaTsKKworICAgIG5jZmZ0ID0gc3QtPnN1YnN0YXRlLT5uZmZ0OworCXRtcGJ1Zj0gc3QtPnRtcGJ1ZjsKKwl0dwkgID0gc3QtPnN1cGVyX3R3aWRkbGVzOworCisJa2lzc19mZnQoIHN0LT5zdWJzdGF0ZSAsIChjb25zdCBraXNzX2ZmdF9jcHgqKXRpbWVkYXRhLCB0bXBidWYgKTsKKworCXRkY3IgPSB0bXBidWZbMF0ucjsKKyAgICB0ZGNpID0gdG1wYnVmWzBdLmk7CisgICAgCisJZnJlcWRhdGFbMF0uciA9IHRkY3IgKyB0ZGNpOworICAgIGZyZXFkYXRhW25jZmZ0XS5yID0gdGRjciAtIHRkY2k7CisgICAgZnJlcWRhdGFbbmNmZnRdLmkgPSBmcmVxZGF0YVswXS5pID0gMDsKKworICAgIGZvciAoIGs9MTtrIDw9IG5jZmZ0LzIgOyArK2sgKSAKKwl7CisgICAgICAgIGZwayAgICA9IHRtcGJ1ZltrXTsgCisgICAgICAgIGZwbmsuciA9IHRtcGJ1ZltuY2ZmdC1rXS5yOworICAgICAgICBmcG5rLmkgPSAtdG1wYnVmW25jZmZ0LWtdLmk7CisKKyAgICAgICAgQ19BREQoIGYxaywgZnBrICwgZnBuayApOworICAgICAgICBDX1NVQiggZjJrLCBmcGsgLCBmcG5rICk7CisgICAgICAgIENfTVVMKCB0d2ssIGYyayAsIHR3W2tdKTsKKworICAgICAgICBmcmVxZGF0YVtrXS5yID0gSEFMRl9PRihmMWsuciArIHR3ay5yKTsKKyAgICAgICAgZnJlcWRhdGFba10uaSA9IEhBTEZfT0YoZjFrLmkgKyB0d2suaSk7CisgICAgICAgIGZyZXFkYXRhW25jZmZ0LWtdLnIgPSBIQUxGX09GKGYxay5yIC0gdHdrLnIpOworICAgICAgICBmcmVxZGF0YVtuY2ZmdC1rXS5pID0gSEFMRl9PRih0d2suaSAtIGYxay5pKTsKKyAgICB9Cit9CisKKyNkZWZpbmUgT1ZFUlJJREVfS0lTU19GRlRSSQordm9pZCBraXNzX2ZmdHJpKGtpc3NfZmZ0cl9jZmcgc3QsY29uc3Qga2lzc19mZnRfY3B4ICogcmVzdHJpY3QgZnJlcWRhdGEsa2lzc19mZnRfc2NhbGFyICogcmVzdHJpY3QgdGltZWRhdGEpCit7CisgICAgcmVnaXN0ZXIgaW50IGssIG5jZmZ0OworCXJlZ2lzdGVyIGtpc3NfZmZ0X2NweCAqIHJlc3RyaWN0IHRtcGJ1ZiwgKiByZXN0cmljdCB0dzsKKwkKKwkJCisgICAgbmNmZnQgPSBzdC0+c3Vic3RhdGUtPm5mZnQ7CisJdG1wYnVmPSBzdC0+dG1wYnVmOworCXR3CSAgPSBzdC0+c3VwZXJfdHdpZGRsZXM7CisJCQorICAgIHRtcGJ1ZlswXS5yID0gZnJlcWRhdGFbMF0uciArIGZyZXFkYXRhW25jZmZ0XS5yOworICAgIHRtcGJ1ZlswXS5pID0gZnJlcWRhdGFbMF0uciAtIGZyZXFkYXRhW25jZmZ0XS5yOworCisgICAgZm9yIChrID0gMTsgayA8PSBuY2ZmdCAvIDI7ICsraykgCisJeworICAgICAgICByZWdpc3RlciBraXNzX2ZmdF9jcHggZmssIGZua2MsIGZlaywgZm9rLCB0bXA7CisgICAgICAgIGZrID0gZnJlcWRhdGFba107CisgICAgICAgIGZua2MuciA9IGZyZXFkYXRhW25jZmZ0IC0ga10ucjsKKyAgICAgICAgZm5rYy5pID0gLWZyZXFkYXRhW25jZmZ0IC0ga10uaTsKKworICAgICAgICBDX0FERCAoZmVrLCBmaywgZm5rYyk7CisgICAgICAgIENfU1VCICh0bXAsIGZrLCBmbmtjKTsKKyAgICAgICAgQ19NVUwgKGZvayx0bXAsdHdba10pOworICAgICAgICBDX0FERCAodG1wYnVmW2tdLGZlaywgZm9rKTsKKyAgICAgICAgQ19TVUIgKHRtcCwgZmVrLCBmb2spOworCQl0bXBidWZbbmNmZnQgLSBrXS5yID0gdG1wLnI7CisgICAgICAgIHRtcGJ1ZltuY2ZmdCAtIGtdLmkgPSAtdG1wLmk7CisJfQorICAgIGtpc3NfZmZ0IChzdC0+c3Vic3RhdGUsIHN0LT50bXBidWYsIChraXNzX2ZmdF9jcHggKikgdGltZWRhdGEpOworfQorCisjZW5kaWYKKyNlbmRpZgorCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC90bXYvbHBjX3RtLmggYi8zcmRwYXJ0eS9zcGVleC90bXYvbHBjX3RtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDViMDk4OAotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3Rtdi9scGNfdG0uaApAQCAtMCwwICsxLDE1MCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA3IEhvbmcgWmhpcWlhbiAqLworLyoqCisgICBAZmlsZSBscGNfdG0uaAorICAgQGF1dGhvciBIb25nIFpoaXFpYW4KKyAgIEBicmllZiBWYXJpb3VzIGNvbXBhdGliaWxpdHkgcm91dGluZXMgZm9yIFNwZWV4IChUcmlNZWRpYSB2ZXJzaW9uKQorKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlIDxvcHMvY3VzdG9tX2RlZnMuaD4KKyNpbmNsdWRlICJwcm9maWxlX3RtLmgiCisKKyNpZmRlZiBGSVhFRF9QT0lOVAorCisjZGVmaW5lIE9WRVJSSURFX1NQRUVYX0FVVE9DT1JSCit2b2lkIF9zcHhfYXV0b2NvcnIoY29uc3QgSW50MTYgKngsIEludDE2ICphYywgaW50IGxhZywgaW50IG4pCit7CisJcmVnaXN0ZXIgaW50IGksIGo7CisJcmVnaXN0ZXIgaW50IHNoaWZ0LCBhY19zaGlmdDsKKwlyZWdpc3RlciBpbnQgbl8yOwkKKwlyZWdpc3RlciBpbnQgYWMwOworCisJVE1ERUJVR19BTElHTk1FTSh4KTsKKwlUTURFQlVHX0FMSUdOTUVNKGFjKTsKKworCV9TUFhfQVVUT0NPUlJfU1RBUlQoKTsKKworCW5fMgkJPSBuID4+IDE7CisJYWMwCQk9IG4gKyAxOworCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfX1NQWEFVVE9DT1JSKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTUKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCWZvciAoIGo9MCA7IGo8bl8yIDsgais9NCApCisJewlyZWdpc3RlciBpbnQgeDEwLCB4MzIsIHg1NCwgeDc2OworCQkKKwkJeDEwID0gbGQzMngoeCxqKTsKKwkJeDMyID0gbGQzMngoeCxqKzEpOworCQl4NTQgPSBsZDMyeCh4LGorMik7CisJCXg3NiA9IGxkMzJ4KHgsaiszKTsKKworCQlhYzAgKz0gaWZpcjE2KHgxMCwgeDEwKSA+PiA4OworCQlhYzAJKz0gaWZpcjE2KHgzMiwgeDMyKSA+PiA4OworCQlhYzAgKz0gaWZpcjE2KHg1NCwgeDU0KSA+PiA4OworCQlhYzAgKz0gaWZpcjE2KHg3NiwgeDc2KSA+PiA4OworCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9fU1BYQVVUT0NPUlIpCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisKKwlzaGlmdCA9IDg7CisJd2hpbGUgKHNoaWZ0ICYmIGFjMDwweDQwMDAwMDAwKQorCXsJc2hpZnQtLTsKKwkJYWMwIDw8PSAxOworCX0KKworCWFjX3NoaWZ0ID0gMTg7CisJd2hpbGUgKGFjX3NoaWZ0ICYmIGFjMDwweDQwMDAwMDAwKQorCXsJYWNfc2hpZnQtLTsKKwkJYWMwIDw8PSAxOworCX0KKworCWlmICggc2hpZnQgPT0gMCApCisJeworCQlmb3IgKCBpPTAgOyBpPGxhZyA7ICsraSApCisJCXsKKwkJCXJlZ2lzdGVyIGludCBhY2MwLCBhY2MxLCBhY2MyOworCQkJcmVnaXN0ZXIgaW50IGssIGwsIG07IAorCQkJcmVnaXN0ZXIgaW50IHgxMCwgeDMyLCB5MTAsIHkzMjsKKwkJCQorCQkJYWNjMiA9IGFjYzEgPSBhY2MwID0gMDsKKworCQkJZm9yICggaj1pIDsgajwxNiA7ICsraiApCisJCQl7CWFjYzAgKz0gKHhbal0gKiB4W2otaV0pOworCQkJfQorCisJCQlmb3IgKCBrPTE2LGw9OCxtPTE2LWkgOyBrPG4gOyBrKz00LGwrPTIsbSs9NCApCisJCQl7CQorCQkJCXgxMCAgPSBsZDMyeCh4LGwpOworCQkJCXkxMCAgPSBwYWNrMTZsc2IoeFttKzFdLHhbbV0pOworCQkJCXgzMiAgPSBsZDMyeCh4LGwrMSk7CisJCQkJeTMyICA9IHBhY2sxNmxzYih4W20rM10seFttKzJdKTsKKwkJCQkKKwkJCQlhY2MxICs9IGlmaXIxNih4MTAseTEwKTsKKwkJCQlhY2MyICs9IGlmaXIxNih4MzIseTMyKTsKKwkJCX0KKworCQkJYWNbaV0gPSAoYWNjMCArIGFjYzEgKyBhY2MyKSA+PiBhY19zaGlmdDsKKwkJfQorCX0gZWxzZQorCXsKKwkJZm9yICggaT0wIDsgaTxsYWcgOyArK2kgKQorCQl7CisJCQlyZWdpc3RlciBpbnQgYWNjMCwgYWNjMSwgYWNjMjsKKwkJCXJlZ2lzdGVyIGludCBrLCBsLCBtOyAKKwkJCXJlZ2lzdGVyIGludCB4MTAsIHgzMiwgeTEwLCB5MzI7CisJCQkKKwkJCWFjYzIgPSBhY2MxID0gYWNjMCA9IDA7CisKKwkJCWZvciAoIGo9aSA7IGo8MTYgOyArK2ogKQorCQkJewlhY2MwICs9ICh4W2pdICogeFtqLWldKSA+PiBzaGlmdDsKKwkJCX0KKworCQkJZm9yICggaz0xNixsPTgsbT0xNi1pIDsgazxuIDsgays9NCxsKz0yLG0rPTQgKQorCQkJewkKKwkJCQl4MTAgID0gbGQzMngoeCxsKTsKKwkJCQl5MTAgID0gcGFjazE2bHNiKHhbbSsxXSx4W21dKTsKKwkJCQl4MzIgID0gbGQzMngoeCxsKzEpOworCQkJCXkzMiAgPSBwYWNrMTZsc2IoeFttKzNdLHhbbSsyXSk7CisJCQkJCisJCQkJYWNjMSArPSBpZmlyMTYoeDEwLHkxMCkgPj4gc2hpZnQ7CisJCQkJYWNjMiArPSBpZmlyMTYoeDMyLHkzMikgPj4gc2hpZnQ7CisJCQl9CisKKwkJCWFjW2ldID0gKGFjYzAgKyBhY2MxICsgYWNjMikgPj4gYWNfc2hpZnQ7CisJCX0KKwl9CisJCisJX1NQWF9BVVRPQ09SUl9TVE9QKCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvdG12L2xzcF90bS5oIGIvM3JkcGFydHkvc3BlZXgvdG12L2xzcF90bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3OWQzN2UKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC90bXYvbHNwX3RtLmgKQEAgLTAsMCArMSwzMTAgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNyBIb25nIFpoaXFpYW4gKi8KKy8qKgorICAgQGZpbGUgbHNwX3RtLmgKKyAgIEBhdXRob3IgSG9uZyBaaGlxaWFuCisgICBAYnJpZWYgVmFyaW91cyBjb21wYXRpYmlsaXR5IHJvdXRpbmVzIGZvciBTcGVleCAoVHJpTWVkaWEgdmVyc2lvbikKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSA8b3BzL2N1c3RvbV9kZWZzLmg+CisjaW5jbHVkZSAicHJvZmlsZV90bS5oIgorCisKKyNpZmRlZiBGSVhFRF9QT0lOVAorCisjZGVmaW5lIE9WRVJSSURFX0xTUF9JTlRFUlBPTEFURQordm9pZCBsc3BfaW50ZXJwb2xhdGUoSW50MTYgKm9sZF9sc3AsIEludDE2ICpuZXdfbHNwLCBJbnQxNiAqaW50ZXJwX2xzcCwgaW50IGxlbiwgaW50IHN1YmZyYW1lLCBpbnQgbmJfc3ViZnJhbWVzKQoreworCXJlZ2lzdGVyIGludCB0bXAgID0gIERJVjMyXzE2KFNITDMyKEVYVEVORDMyKDEgKyBzdWJmcmFtZSksMTQpLG5iX3N1YmZyYW1lcyk7CisJcmVnaXN0ZXIgaW50IHRtcDIgPSAgMTYzODQtdG1wOworCXJlZ2lzdGVyIGludCBpbl8wLCBpbl8xLCBmYWN0b3IsIG91dF8xLCBvdXRfMiwgb2xzcCwgbmxzcCwgaWxzcDsKKwlyZWdpc3RlciBpbnQgaTsKKworCVRNREVCVUdfQUxJR05NRU0ob2xkX2xzcCk7CisJVE1ERUJVR19BTElHTk1FTShuZXdfbHNwKTsKKwlUTURFQlVHX0FMSUdOTUVNKGludGVycF9sc3ApOworCisJTFNQSU5URVJQT0xBVEVfU1RBUlQoKTsKKworCWZhY3RvciA9IHBhY2sxNmxzYih0bXAsdG1wMik7CisKKwlsZW4gPj49IDE7CisJZm9yICggaT0wIDsgaTxsZW4gOyArK2kgKQorCXsJCisJCW9sc3AgPSBsZDMyeChvbGRfbHNwLGkpOwkJCQkJCQkvLyBvbHNwW2krMV0sb2xzcFtpXQorCQlubHNwID0gbGQzMngobmV3X2xzcCxpKTsJCQkJCQkJLy8gbmxzcFtpKzFdLG5sc3BbaV0KKworCQlpbl8wID0gcGFjazE2bHNiKG5sc3Asb2xzcCk7CisJCWluXzEgPSBwYWNrMTZtc2IobmxzcCxvbHNwKTsKKwkgIAorCQlvdXRfMSA9IDgxOTIgKyBpZmlyMTYoaW5fMCxmYWN0b3IpOworCQlvdXRfMiA9IDgxOTIgKyBpZmlyMTYoaW5fMSxmYWN0b3IpOworCisJCWlsc3AgPSBwYWNrMTZsc2Iob3V0XzIgPj4gMTQsIG91dF8xID4+IDE0KTsKKwkJc3QzMmQoaSA8PCAyLCBpbnRlcnBfbHNwLCBpbHNwKTsKKworCX0KKworCUxTUElOVEVSUE9MQVRFX1NUT1AoKTsKK30KKworCisjZGVmaW5lIE9WRVJSSURFX0NIRUJfUE9MWV9FVkEKK3N0YXRpYyBpbmxpbmUgSW50MzIgY2hlYl9wb2x5X2V2YShJbnQxNiAqY29lZiwgSW50MTYgeCwgaW50IG0sIGNoYXIgKnN0YWNrKQoreworCXJlZ2lzdGVyIGludAljMTAsIGMzMiwgYzU0OworICAgIHJlZ2lzdGVyIGludAlzdW0sIGIwLCBmMCwgZjEsIGYyLCBmMzsKKwlyZWdpc3RlciBpbnQJeHgsIGYzMiwgZjEwOworCisJQ0hFQlBPTFlFVkFfU1RBUlQoKTsKKworCXh4ID0gc2V4MTYoeCk7CisJYjAgPSBpY2xpcGkoeHgsMTYzODMpOworCisjaWYgMAorCWMxMCA9IGxkMzIoY29lZik7CisJYzMyID0gbGQzMngoY29lZiwxKTsKKwljNTQgPSBsZDMyeChjb2VmLDIpOworI2Vsc2UJCisJYzEwID0gcGFjazE2bHNiKGNvZWZbMV0sY29lZlswXSk7CisJYzMyID0gcGFjazE2bHNiKGNvZWZbM10sY29lZlsyXSk7CisJYzU0ID0gcGFjazE2bHNiKGNvZWZbNV0sY29lZls0XSk7CisjZW5kaWYKKworCWYwICAgPSAoKHh4ICogYjApID4+IDEzKSAtIDE2Mzg0OworCWYxICAgPSAoKHh4ICogZjApID4+IDEzKSAtIGIwOworCWYyICAgPSAoKHh4ICogZjEpID4+IDEzKSAtIGYwOworCisJaWYgKCBtID09IDQgKQorCXsJc3VtID0gc2V4MTYoYzU0KTsKKwkJZjMyID0gcGFjazE2bHNiKHh4LGYwKTsKKwkJZjEwID0gcGFjazE2bHNiKGYxLGYyKTsKKworCX0gZWxzZQorCXsJc3VtID0gIGFzcmkoMTYsYzU0KTsKKwkJc3VtICs9ICgoc2V4MTYoYzU0KSAqIHh4KSArIDgxOTIpID4+IDE0OworCisJCWYzICAgPSAoKHh4ICogZjIpID4+IDEzKSAtIGYxOworCQlmMzIgPSBwYWNrMTZsc2IoZjAsZjEpOworCQlmMTAgPSBwYWNrMTZsc2IoZjIsZjMpOworCX0KKworCXN1bSArPSAoaWZpcjE2KGMzMixmMzIpICsgODE5MikgPj4gMTQ7CisJc3VtICs9IChpZmlyMTYoYzEwLGYxMCkgKyA4MTkyKSA+PiAxNDsKKworI2lmbmRlZiBSRU1BUktfT04KKyAgICh2b2lkKXN0YWNrOworI2VuZGlmCisKKwlDSEVCUE9MWUVWQV9TVE9QKCk7CisgICAgcmV0dXJuIHN1bTsKK30KKworCisjZGVmaW5lIE9WRVJSSURFX0xTUF9FTkZPUkNFX01BUkdJTgordm9pZCBsc3BfZW5mb3JjZV9tYXJnaW4oSW50MTYgKmxzcCwgaW50IGxlbiwgSW50MTYgbWFyZ2luKQoreworCXJlZ2lzdGVyIGludCBpOworCXJlZ2lzdGVyIGludCBtID0gbWFyZ2luOworCXJlZ2lzdGVyIGludCBtMiA9IDI1NzM2LW1hcmdpbjsKKwlyZWdpc3RlciBpbnQgbHNwMCwgbHNwMSwgbHNwMjsKKworCVRNREVCVUdfQUxJR05NRU0obHNwKTsKKworCUxTUEVORk9SQ0VNQVJHSU5fU1RBUlQoKTsKKworCWxzcDAgPSBsZDMyKGxzcCk7CisJbHNwMSA9IGFzcmkoMTYsbHNwMCk7CisJbHNwMCA9IHNleDE2KGxzcDApOworCWxzcDIgPSBsc3BbbGVuLTFdOworCisJaWYgKCBsc3AwIDwgbSApCisJewlsc3AwID0gbTsKKwkJbHNwWzBdID0gbTsKKwl9CisKKwlpZiAoIGxzcDIgPiBtMiApCisJewlsc3AyID0gbTI7CisJCWxzcFtsZW4tMV0gPSBtMjsKKwl9CisKKwlmb3IgKCBpPTEgOyBpPGxlbi0xIDsgKytpICkKKwl7CQorCQlsc3AwICs9IG07CisJCWxzcDIgPSBsc3BbaSsxXTsKKwkJbTIgICA9IGxzcDIgLSBtOworCisJCWlmICggbHNwMSA8IGxzcDAgKQorCQl7CWxzcDEgICA9IGxzcDA7CisJCQlsc3BbaV0gPSBsc3AwOworCQl9CisKKwkJaWYgKCBsc3AxID4gbTIgKQorCQl7CWxzcDEJPSAobHNwMSA+PiAxKSArIChtMiA+PiAxKTsKKwkJCWxzcFtpXQk9IGxzcDE7CQkJCisJCX0KKworCQlsc3AwID0gbHNwMTsKKwkJbHNwMSA9IGxzcDI7CisJfQorCisJTFNQRU5GT1JDRU1BUkdJTl9TVE9QKCk7Cit9CisKKworI2RlZmluZSBPVkVSUklERV9MU1BfVE9fTFBDCit2b2lkIGxzcF90b19scGMoSW50MTYgKmZyZXEsIEludDE2ICphayxpbnQgbHBjcmRyLCBjaGFyICpzdGFjaykKK3sKKyAgICBWQVJERUNMKEludDE2ICpmcmVxbik7CisgICAgVkFSREVDTChpbnQgKip4cCk7CisgICAgVkFSREVDTChpbnQgKnhwbWVtKTsKKyAgICBWQVJERUNMKGludCAqKnhxKTsKKyAgICBWQVJERUNMKGludCAqeHFtZW0pOworCisgICAgcmVnaXN0ZXIgaW50IGksIGosIGs7CisgICAgcmVnaXN0ZXIgaW50IHhvdXQxLHhvdXQyLHhpbjsKKyAgICByZWdpc3RlciBpbnQgbTsKKyAgICAKKwlMU1BUT0xQQ19TVEFSVCgpOworCisJbSA9IGxwY3Jkcj4+MTsKKworCS8qIAorICAgIAorICAgICAgIFJlY29uc3RydWN0IFAoeikgYW5kIFEoeikgYnkgY2FzY2FkaW5nIHNlY29uZCBvcmRlciBwb2x5bm9taWFscworICAgICAgIGluIGZvcm0gMSAtIDJjb3Modyl6KC0xKSArIHooLTIpLCB3aGVyZSB3IGlzIHRoZSBMU1AgZnJlcXVlbmN5LgorICAgICAgIEluIHRoZSB0aW1lIGRvbWFpbiB0aGlzIGlzOgorCisgICAgICAgeShuKSA9IHgobikgLSAyY29zKHcpeChuLTEpICsgeChuLTIpCisgICAgCisgICAgICAgVGhpcyBpcyB3aGF0IHRoZSBBTExPQ1MgYmVsb3cgYXJlIHRyeWluZyB0byBkbzoKKworICAgICAgICAgaW50IHhwW20rMV1bbHBjcmRyKzErMl07IC8vIFAgbWF0cml4IGluIFFJTVAKKyAgICAgICAgIGludCB4cVttKzFdW2xwY3JkcisxKzJdOyAvLyBRIG1hdHJpeCBpbiBRSU1QCisKKyAgICAgICBUaGVzZSBtYXRyaWNlcyBzdG9yZSB0aGUgb3V0cHV0IG9mIGVhY2ggc3RhZ2Ugb24gZWFjaCByb3cuICBUaGUKKyAgICAgICBmaW5hbCAobS10aCkgcm93IGhhcyB0aGUgb3V0cHV0IG9mIHRoZSBmaW5hbCAobS10aCkgY2FzY2FkZWQKKyAgICAgICAybmQgb3JkZXIgZmlsdGVyLiAgVGhlIGZpcnN0IHJvdyBpcyB0aGUgaW1wdWxzZSBpbnB1dCB0byB0aGUKKyAgICAgICBzeXN0ZW0gKG5vdCB3cml0dGVuIGFzIGl0IGlzIGtub3duKS4KKworICAgICAgIFRoZSB2ZXJzaW9uIGJlbG93IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IGEgbG90IG9mIHRoZQorICAgICAgIG91dHB1dHMgYXJlIHplcm8gb3Iga25vd24sIGZvciBleGFtcGxlIGlmIHdlIHB1dCBhbiBpbnB1bHNlCisgICAgICAgaW50byB0aGUgZmlyc3Qgc2VjdGlvbiB0aGUgImNsb2NrIiBpdCAxMCB0aW1lcyBvbmx5IHRoZSBmaXJzdCAzCisgICAgICAgb3V0cHV0cyBzYW1wbGVzIGFyZSBub24temVybyAoaXQncyBhbiBGSVIgZmlsdGVyKS4KKyAgICAqLworCisgICAgQUxMT0MoeHAsIChtKzEpLCBpbnQqKTsKKyAgICBBTExPQyh4cG1lbSwgKG0rMSkqKGxwY3JkcisxKzIpLCBpbnQpOworCisgICAgQUxMT0MoeHEsIChtKzEpLCBpbnQqKTsKKyAgICBBTExPQyh4cW1lbSwgKG0rMSkqKGxwY3JkcisxKzIpLCBpbnQpOworICAgIAorICAgIGZvciAoIGk9MDsgaTw9bTsgaSsrICkgCisJewl4cFtpXSA9IHhwbWVtICsgaSoobHBjcmRyKzErMik7CisJCXhxW2ldID0geHFtZW0gKyBpKihscGNyZHIrMSsyKTsKKyAgICB9CisKKyAgICAvKiB3b3JrIG91dCAyY29zIHRlcm1zIGluIFExNCAqLworCisgICAgQUxMT0MoZnJlcW4sIGxwY3JkciwgSW50MTYpOworICAgIGZvciAoIGo9MCxrPTAgOyBqPG0gOyArK2osays9MiApCisJewlyZWdpc3RlciBpbnQgZjsKKworCQlmID0gbGQzMngoZnJlcSxqKTsKKworCQlmcmVxbltrXSA9IEFOR0xFMlgoc2V4MTYoZikpOworCQlmcmVxbltrKzFdID0gQU5HTEUyWChhc3JpKDE2LGYpKTsKKwl9CisgICAgCisJI2RlZmluZSBRSU1QICAyMSAgIC8qIHNjYWxpbmcgZm9yIGltcHVsc2UgKi8KKyAgICB4aW4gPSBTSEwzMihFWFRFTkQzMigxKSwgKFFJTVAtMSkpOyAvKiAwLjUgaW4gUUlNUCBmb3JtYXQgKi8KKyAgIAorICAgIC8qIGZpcnN0IGNvbCBhbmQgbGFzdCBub24temVybyB2YWx1ZXMgb2YgZWFjaCByb3cgYXJlIHRyaXZpYWwgKi8KKyAgICAKKyAgICBmb3IoaT0wO2k8PW07aSsrKSAKKwl7CXhwW2ldWzFdID0gMDsKKwkJeHBbaV1bMl0gPSB4aW47CisJCXhwW2ldWzIrMippXSA9IHhpbjsKKwkJeHFbaV1bMV0gPSAwOworCQl4cVtpXVsyXSA9IHhpbjsKKwkJeHFbaV1bMisyKmldID0geGluOworICAgIH0KKworICAgIC8qIDJuZCByb3cgKGZpcnN0IG91dHB1dCByb3cpIGlzIHRyaXZpYWwgKi8KKworICAgIHhwWzFdWzNdID0gLU1VTFQxNl8zMl9RMTQoZnJlcW5bMF0seHBbMF1bMl0pOworICAgIHhxWzFdWzNdID0gLU1VTFQxNl8zMl9RMTQoZnJlcW5bMV0seHFbMF1bMl0pOworCisgICAgeG91dDEgPSB4b3V0MiA9IDA7CisKKyAgICBmb3IoIGk9MSA7IGk8bSA7ICsraSkgCisJewlyZWdpc3RlciBpbnQgZiwgZjAsIGYxLCBtMCwgbTE7CisJCQorCQlrICA9IDIqKGkrMSktMTsKKwkJZiAgPSBsZDMyeChmcmVxbixpKTsKKwkJZjAgPSBzZXgxNihmKTsKKwkJZjEgPSBhc3JpKDE2LGYpOworCisJCWZvciggaj0xIDsgajxrIDsgKytqKSAKKwkJewlyZWdpc3RlciBpbnQgX20wLCBfbTE7CQorCisJCQlfbTAgPSBNVUxUMTZfMzJfUTE0KGYwLHhwW2ldW2orMV0pOworCQkJeHBbaSsxXVtqKzJdID0gQUREMzIoU1VCMzIoeHBbaV1baisyXSwgX20wKSwgeHBbaV1bal0pOworCQorCQkJX20xID0gTVVMVDE2XzMyX1ExNChmMSx4cVtpXVtqKzFdKTsKKwkJCXhxW2krMV1baisyXSA9IEFERDMyKFNVQjMyKHhxW2ldW2orMl0sIF9tMSksIHhxW2ldW2pdKTsKKwkJfQorCisgICAgICAKKwkJbTAgPSBNVUxUMTZfMzJfUTE0KGYwLHhwW2ldW2orMV0pOworCQl4cFtpKzFdW2orMl0gPSBTVUIzMih4cFtpXVtqXSwgbTApOworCQltMSA9IE1VTFQxNl8zMl9RMTQoZjEseHFbaV1baisxXSk7CisJCXhxW2krMV1baisyXSA9IFNVQjMyKHhxW2ldW2pdLCBtMSk7CisgICAgfQorCisKKyAgICBmb3IoIGk9MCxqPTMgOyBpPGxwY3JkciA7ICsraiwrK2kgKSAKKwl7CXJlZ2lzdGVyIGludCBfYTAsIF94cDAsIF94cTA7CisKKwkJX3hwMCA9IHhwW21dW2pdOworCQlfeHEwID0geHFbbV1bal07CisKKyAgICAgIAlfYTAgPSBQU0hSMzIoX3hwMCArIHhvdXQxICsgX3hxMCAtIHhvdXQyLCBRSU1QLTEzKTsgCisJCXhvdXQxID0gX3hwMDsKKwkJeG91dDIgPSBfeHEwOworICAgICAKKwkJYWtbaV0gPSBpY2xpcGkoX2EwLDMyNzY3KTsgCisgICAgfQorCisJTFNQVE9MUENfU1RPUCgpOworfQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvdG12L2x0cF90bS5oIGIvM3JkcGFydHkvc3BlZXgvdG12L2x0cF90bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MWEyNTYKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC90bXYvbHRwX3RtLmgKQEAgLTAsMCArMSw0NzkgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNyBIb25nIFpoaXFpYW4gKi8KKy8qKgorICAgQGZpbGUgbHRwX3RtLmgKKyAgIEBhdXRob3IgSG9uZyBaaGlxaWFuCisgICBAYnJpZWYgVmFyaW91cyBjb21wYXRpYmlsaXR5IHJvdXRpbmVzIGZvciBTcGVleCAoVHJpTWVkaWEgdmVyc2lvbikKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworI2luY2x1ZGUgPG9wcy9jdXN0b21fZGVmcy5oPgorI2luY2x1ZGUgInByb2ZpbGVfdG0uaCIKKworI2lmZGVmIEZJWEVEX1BPSU5UCisKKyNkZWZpbmUgT1ZFUlJJREVfSU5ORVJfUFJPRAorSW50MzIgaW5uZXJfcHJvZChjb25zdCBJbnQxNiAqIHJlc3RyaWN0IHgsIGNvbnN0IEludDE2ICogcmVzdHJpY3QgeSwgaW50IGxlbikKK3sKKwlyZWdpc3RlciBpbnQgc3VtID0gMDsKKworCUlOTkVSUFJPRF9TVEFSVCgpOworCisJaWYgKCAoaW50KXggJiAweDAzID09IDAgJiYgKGludCl5ICYgMHgwMyA9PSAwICkKKwl7CisJCXJlZ2lzdGVyIGludCBpOworCisJCWxlbiA+Pj0gMTsKKwkJZm9yICggaT0wIDsgaTxsZW4gOyBpKz00ICkKKwkJeworCQkJcmVnaXN0ZXIgaW50IHgwLCB4MSwgeTAsIHkxLCB4MiwgeDMsIHkyLCB5MzsKKworCQkJeDAgPSBsZDMyeCh4LGkpOworCQkJeTAgPSBsZDMyeCh4LGkpOworCQkJeDEgPSBsZDMyeCh4LGkrMSk7CisJCQl5MSA9IGxkMzJ4KHksaSsxKTsKKwkJCXN1bSArPSAoaWZpcjE2KHgwLHkwKSArIGlmaXIxNih4MSx5MSkpID4+IDY7CisKKwkJCXgyID0gbGQzMngoeCxpKzIpOworCQkJeTIgPSBsZDMyeCh4LGkrMik7CisJCQl4MyA9IGxkMzJ4KHgsaSszKTsKKwkJCXkzID0gbGQzMngoeCxpKzMpOworCQkJc3VtICs9IChpZmlyMTYoeDIseTIpICsgaWZpcjE2KHgzLHkzKSkgPj4gNjsKKworCQl9CisJfSBlbHNlCisJeworCQlsZW4gPj49IDM7CisJCXdoaWxlKCBsZW4tLSApCisJCXsKKwkJCXJlZ2lzdGVyIGludCB4MCwgeDEsIHgyLCB4MywgeTAsIHkxLCB5MiwgeTM7CisKKwkJCXgwID0JcGFjazE2bHNiKHhbMF0seFsxXSk7CisJCQl5MCA9CXBhY2sxNmxzYih5WzBdLHlbMV0pOworCQkJeDEgPQlwYWNrMTZsc2IoeFsyXSx4WzNdKTsKKwkJCXkxID0JcGFjazE2bHNiKHlbMl0seVszXSk7CisJCQlzdW0JKz0JKGlmaXIxNih4MCx5MCkgKyBpZmlyMTYoeDEseTEpKSA+PiA2OworCisJCQl4MiA9CXBhY2sxNmxzYih4WzRdLHhbNV0pOworCQkJeTIgPQlwYWNrMTZsc2IoeVs0XSx5WzVdKTsKKwkJCXgzID0JcGFjazE2bHNiKHhbNl0seFs3XSk7CisJCQl5MyA9CXBhY2sxNmxzYih5WzZdLHlbN10pOworCQkJc3VtCSs9CShpZmlyMTYoeDIseTIpICsgaWZpcjE2KHgzLHkzKSkgPj4gNjsKKworCQkJeCArPSA4OworCQkJeSArPSA4OworCQl9CisJfQorCisJSU5ORVJQUk9EX1NUT1AoKTsKKwlyZXR1cm4gc3VtOworfQorCisjZGVmaW5lIE9WRVJSSURFX1BJVENIX1hDT1JSCit2b2lkIHBpdGNoX3hjb3JyKGNvbnN0IEludDE2ICpfeCwgY29uc3QgSW50MTYgKl95LCBJbnQzMiAqY29yciwgaW50IGxlbiwgaW50IG5iX3BpdGNoLCBjaGFyICpzdGFjaykKK3sKKwlyZWdpc3RlciBpbnQgc3VtXzEsIHN1bV8yLCBzdW1fMywgc3VtXzQ7CisJcmVnaXN0ZXIgaW50IHkxMCwgeTMyLCB5NTQsIHk3NiwgeTIxLCB5NDMsIHk2NTsKKwlyZWdpc3RlciBpbnQgeDEwLCB4MzI7CisJcmVnaXN0ZXIgaW50IGksIGosIGssIGxpbWl0OworCQorCVRNREVCVUdfQUxJR05NRU0oX3gpOworCVRNREVCVUdfQUxJR05NRU0oX3kpOworCisJUElUQ0hYQ09SUl9TVEFSVCgpOworCisJbGltaXQJPSBuYl9waXRjaCA+PiAxOworCWxlbgkJPj49IDE7CisKKwlmb3IgKGk9MCA7IGk8bGltaXQgOyBpKz0yICkKKwl7CisJCXN1bV8xID0gc3VtXzIgPSBzdW1fMyA9IHN1bV80ID0gMDsKKwkJCisJCXkxMAk9IGxkMzJ4KF95LGkpOworCQl5MzIJPSBsZDMyeChfeSxpKzEpOworCQkKKwkJZm9yICggaj0wIDsgajxsZW4gOyBqKz0yICkKKwkJeworCQkJeDEwID0gbGQzMngoX3gsaik7CisJCQl4MzIgPSBsZDMyeChfeCxqKzEpOworCQkJeTU0ID0gbGQzMngoX3ksaStqKzIpOworCQkJeTc2ID0gbGQzMngoX3ksaStqKzMpOworCQkJCisJCQlzdW1fMSArPSAoaWZpcjE2KHgxMCx5MTApICsgaWZpcjE2KHgzMix5MzIpKSA+PiA2OworCQkJc3VtXzMgKz0gKGlmaXIxNih4MTAseTMyKSArIGlmaXIxNih4MzIseTU0KSkgPj4gNjsKKworCQkJeTIxID0gZnVuc2hpZnQyKHkzMix5MTApOworCQkJeTQzID0gZnVuc2hpZnQyKHk1NCx5MzIpOworCQkJeTY1ID0gZnVuc2hpZnQyKHk3Nix5NTQpOworCisJCQlzdW1fMiArPSAoaWZpcjE2KHgxMCx5MjEpICsgaWZpcjE2KHgzMix5NDMpKSA+PiA2OworCQkJc3VtXzQgKz0gKGlmaXIxNih4MTAseTQzKSArIGlmaXIxNih4MzIseTY1KSkgPj4gNjsKKworCQkJeTEwID0geTU0OworCQkJeTMyID0geTc2OworCisJCX0KKworCQlrID0gaSA8PCAxOworCQljb3JyW25iX3BpdGNoLTEta109c3VtXzE7CisJCWNvcnJbbmJfcGl0Y2gtMi1rXT1zdW1fMjsKKwkJY29ycltuYl9waXRjaC0zLWtdPXN1bV8zOworCQljb3JyW25iX3BpdGNoLTQta109c3VtXzQ7CisJfQorCisjaWZuZGVmIFJFTUFSS19PTgorCSh2b2lkKXN0YWNrOworI2VuZGlmCisKKwlQSVRDSFhDT1JSX1NUT1AoKTsKK30KKworI2lmbmRlZiB0dGlzaW0KKyNkZWZpbmUgT1ZFUlJJREVfUElUQ0hfR0FJTl9TRUFSQ0hfM1RBUF9WUQorc3RhdGljIGludCBwaXRjaF9nYWluX3NlYXJjaF8zdGFwX3ZxCisoCisJY29uc3Qgc2lnbmVkIGNoYXIJKmdhaW5fY2RiaywKKwlpbnQJCQkJCWdhaW5fY2Ria19zaXplLAorCUludDE2CQkJCSpDMTYsCisJSW50MTYJCQkJbWF4X2dhaW4KKykKK3sKKwlyZWdpc3RlciBpbnQJcHAgPSAweDAwNDAwMDQwLCBwPTY0OworCXJlZ2lzdGVyIGludAlnMTAsIGcyLCBnMjAsIGcyMSwgZzAyLCBnMjIsIGcwMTsKKwlyZWdpc3RlciBpbnQJY2IwLCBjYjEsIGNiMiwgY2I1NDMyOworCXJlZ2lzdGVyIGludAlDMTAsIEMzMiwgQzU0LCBDNzYsIEM5OCwgQzgzLCBDMjsKKwlyZWdpc3RlciBpbnQJYWNjMCwgYWNjMSwgYWNjMiwgYWNjMywgc3VtLCBnc3VtLCBic3VtPS1WRVJZX0xBUkdFMzI7CisJcmVnaXN0ZXIgaW50ICAgIGksIGJlc3RfY2Riaz0wOworCXJlZ2lzdGVyIEludDE2CXRtcDsKKworCVRNREVCVUdfQUxJR05NRU0oQzE2KTsKKwlUTURFQlVHX0FMSUdOTUVNKGdhaW5fY2RiaysyKTsKKworCVBJVENIR0FJTlNFQVJDSDNUQVBWUV9TVEFSVCgpOworCisJdG1wICA9IGlsZDE2KGdhaW5fY2Riayk7CisJQzk4CSA9IGxkMzJ4KEMxNiw0KTsKKwlDMzIJID0gbGQzMngoQzE2LDEpOworCUMxMCAgPSBsZDMyKEMxNik7CisJQzU0CSA9IGxkMzJ4KEMxNiwyKTsKKwlDNzYJID0gbGQzMngoQzE2LDMpOworCisJY2IwICA9IHNleDgodG1wKTsKKwljYjEJID0gc2V4OCh0bXA+PjgpOworCUM4MwkgPSBmdW5zaGlmdDIoQzk4LEMzMik7CisJQzIJID0gc2V4MTYoQzMyKTsKKwlnYWluX2NkYmsgKz0gMjsKKworCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfUElUQ0hHQUlOU0VBUkNIM1RBUFZRID4gMCkKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwlmb3IgKCBpPTAgOyBpPGdhaW5fY2Ria19zaXplIDsgKytpICkgCisJeworICAgICAgICAgY2I1NDMyID0gbGQzMngoZ2Fpbl9jZGJrLGkpOworCQkgY2IyCT0gc2V4OChjYjU0MzIpOworCQkgZ3N1bQk9IHNleDgoY2I1NDMyPj44KTsKKwkJIHN1bQk9IDA7CisJCSAKKwkJIGcxMAk9ICBwYWNrMTZsc2IoY2IxICsgMzIsIGNiMCArIDMyKTsKKwkJIGcyCQk9ICBjYjIgKyAzMjsKKwkJIGcwMgk9ICBwYWNrMTZsc2IoZzEwLCBnMik7CisJCSBhY2MwCT0gIGRzcGlkdWFsbXVsKGcxMCxwcCk7CisJCSBzdW0JKz0gaWZpcjE2KGFjYzAsQzEwKTsKKwkJIHN1bQkrPSBwICogZzIgKiBDMjsKKworCQkgZzIyCT0gIHBhY2sxNmxzYihnMDIsIGcwMik7CisJCSBnMDEJPSAgZnVuc2hpZnQyKGcxMCwgZzEwKTsKKworCQkgYWNjMQk9ICBkc3BpZHVhbG11bChnMjIsIGcwMSk7CisJCSBzdW0JLT0gaWZpcjE2KGFjYzEsIEM1NCk7CisJCSBhY2MyCT0gIGRzcGlkdWFsbXVsKGcxMCwgZzEwKTsKKwkJIHN1bQktPSBpZmlyMTYoYWNjMiwgQzc2KTsKKworCQkgZzIwCT0gIHBhY2sxNmxzYihnMiwgZzEwKTsKKwkJIGcyMQk9ICBmdW5zaGlmdDIoZzIsIGcxMCk7CisJCSBhY2MzCT0gIGRzcGlkdWFsbXVsKGcyMCwgZzIxKTsKKwkJIHN1bQktPSBpZmlyMTYoYWNjMywgQzgzKTsKKwkKKworCQlpZiAoIHN1bT5ic3VtICYmIGdzdW08PW1heF9nYWluICkgCisJCXsJYnN1bSA9IHN1bTsKKwkJCWJlc3RfY2Riaz1pOworCQl9CisKKwkJY2IwCT0gc2V4OChjYjU0MzIgPj4gMTYpOworCQljYjEJPSBhc3JpKDI0LGNiNTQzMik7CisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1BJVENIR0FJTlNFQVJDSDNUQVBWUSA+IDApCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisKKwlQSVRDSEdBSU5TRUFSQ0gzVEFQVlFfU1RPUCgpOworCXJldHVybiBiZXN0X2NkYms7Cit9CisjZW5kaWYKKworI2RlZmluZSBPVkVSUklERV9DT01QVVRFX1BJVENIX0VSUk9SCisjaWZuZGVmIE9WRVJSSURFX1BJVENIX0dBSU5fU0VBUkNIXzNUQVBfVlEKK2lubGluZSBJbnQzMiBjb21wdXRlX3BpdGNoX2Vycm9yKEludDE2ICpDLCBJbnQxNiAqZywgSW50MTYgcGl0Y2hfY29udHJvbCkKK3sKKwlyZWdpc3RlciBpbnQgYzEwLCBjMzIsIGM1NCwgYzc2LCBjOTgsIGM4MzsKKwlyZWdpc3RlciBpbnQgZzEwLCBnMzIsIGcwMiwgZzIyLCBnMDEsIGcyMSwgZzIwOworCXJlZ2lzdGVyIGludCBwcCwgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMzsKKwlyZWdpc3RlciBpbnQgc3VtID0gMDsKKworCQorCUNPTVBVVEVQSVRDSEVSUk9SX1NUQVJUKCk7CisKKwlnMTAgID0gIGxkMzIoZyk7CisJZzMyICA9ICBsZDMyeChnLDEpOworCXBwICAgPSAgcGFjazE2bHNiKHBpdGNoX2NvbnRyb2wscGl0Y2hfY29udHJvbCk7CisJYzEwICA9ICBsZDMyKEMpOworCWMzMiAgPSAgbGQzMngoQywxKTsKKwlnMDIgID0gIHBhY2sxNmxzYihnMTAsZzMyKTsKKwlnMjIJID0gIHBhY2sxNmxzYihnMzIsZzMyKTsKKwlnMDEgID0gIGZ1bnNoaWZ0MihnMTAsZzEwKTsKKwl0bXAwID0gIGRzcGlkdWFsbXVsKGcxMCxwcCk7CisJc3VtICArPSBpZmlyMTYodG1wMCwgYzEwKTsKKwlzdW0gICs9IHBpdGNoX2NvbnRyb2wgKiBzZXgxNihnMzIpICogc2V4MTYoYzMyKTsKKwljNTQgID0gIGxkMzJ4KEMsMik7CisJYzc2ICA9ICBsZDMyeChDLDMpOworCWM5OCAgPSAgbGQzMngoQyw0KTsKKwl0bXAxID0gIGRzcGlkdWFsbXVsKGcyMixnMDEpOworCXN1bSAgLT0gaWZpcjE2KHRtcDEsIGM1NCk7CisJdG1wMiA9ICBkc3BpZHVhbG11bChnMTAsZzEwKTsKKwlzdW0gIC09IGlmaXIxNih0bXAyLGM3Nik7CisJYzgzICA9ICBmdW5zaGlmdDIoYzk4LGMzMik7CisJZzIwCSA9ICBmdW5zaGlmdDIoZzAyLGcwMik7CisJZzIxICA9ICBmdW5zaGlmdDIoZzAyLGcxMCk7CisJdG1wMyA9ICBkc3BpZHVhbG11bChnMjAsZzIxKTsKKwlzdW0JIC09IGlmaXIxNih0bXAzLGM4Myk7CisKKwlDT01QVVRFUElUQ0hFUlJPUl9TVE9QKCk7CisgICAgcmV0dXJuIHN1bTsKK30KKyNlbmRpZgorCisjZGVmaW5lIE9WRVJSSURFX09QRU5fTE9PUF9OQkVTVF9QSVRDSAordm9pZCBvcGVuX2xvb3BfbmJlc3RfcGl0Y2goSW50MTYgKnN3LCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBsZW4sIGludCAqcGl0Y2gsIEludDE2ICpnYWluLCBpbnQgTiwgY2hhciAqc3RhY2spCit7CisJVkFSREVDTChpbnQgKmJlc3Rfc2NvcmUpOworCVZBUkRFQ0woaW50ICpiZXN0X2VuZXIpOworCVZBUkRFQ0woSW50MzIgKmNvcnIpOworCVZBUkRFQ0woSW50MTYgKmNvcnIxNik7CisJVkFSREVDTChJbnQxNiAqZW5lcjE2KTsKKwlyZWdpc3RlciBpbnQgaSwgaiwgaywgbCwgTjQsIE4yOworCXJlZ2lzdGVyIGludCBfc3cxMCwgX3N3MzIsIF9zMCwgX3MyLCBsaW1pdDsKKwlyZWdpc3RlciBpbnQgKmVuZXJneTsKKwlyZWdpc3RlciBpbnQgY3NoaWZ0PTAsIGVzaGlmdD0wOworCXJlZ2lzdGVyIGludCBzY2FsZWRvd24gPSAwOworCXJlZ2lzdGVyIGludCBlMCwgX2VuZXJneTA7CisKKwlBTExPQyhjb3JyMTYsIGVuZC1zdGFydCsxLCBJbnQxNik7CisJQUxMT0MoZW5lcjE2LCBlbmQtc3RhcnQrMSwgSW50MTYpOworCUFMTE9DKGNvcnIsIGVuZC1zdGFydCsxLCBJbnQzMik7CisJQUxMT0MoYmVzdF9zY29yZSwgTiwgaW50KTsKKwlBTExPQyhiZXN0X2VuZXIsIE4sIGludCk7CisJZW5lcmd5ID0gY29ycjsKKwlONCA9IE4gPDwgMjsKKwlOMiA9IE4gPj4gMTsKKworCVRNREVCVUdfQUxJR05NRU0oc3cpOworCVRNREVCVUdfQUxJR05NRU0ocGl0Y2gpOworCVRNREVCVUdfQUxJR05NRU0oZ2Fpbik7CisJVE1ERUJVR19BTElHTk1FTShiZXN0X3Njb3JlKTsKKwlUTURFQlVHX0FMSUdOTUVNKGJlc3RfZW5lcik7CisJVE1ERUJVR19BTElHTk1FTShjb3JyMTYpOworCVRNREVCVUdfQUxJR05NRU0oZW5lcjE2KTsKKworCU9QRU5MT09QTkJFU1RQSVRDSF9TVEFSVCgpOworCisJZm9yICggaT0wIDsgaTxONCA7IGkrPTQgKQorCXsJc3QzMmQoaSxiZXN0X3Njb3JlLC0xKTsKKwkJc3QzMmQoaSxiZXN0X2VuZXIsMCk7CisJCXN0MzJkKGkscGl0Y2gsc3RhcnQpOworCX0KKworCWZvciAoIGo9YXNyaSgxLC1lbmQpIDsgajxOMiA7ICsraiApCisJewlyZWdpc3RlciBpbnQgX3N3MTA7CisKKwkJX3N3MTAgPSBsZDMyeChzdyxqKTsKKwkJX3N3MTAgPSBkc3BpZHVhbGFicyhfc3cxMCk7CisKKwkJaWYgKCBfc3cxMCAmIDB4QzAwMEMwMDAgKQorCQl7CXNjYWxlZG93biA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICggc2NhbGVkb3duICkKKwl7CisJCWZvciAoIGo9YXNyaSgxLC1lbmQpLGs9YXNsaSgxLC1lbmQpIDsgajxOMiA7ICsraixrKz00ICkKKwkJewlyZWdpc3RlciBpbnQgX3N3MTA7CisJCQorCQkJX3N3MTAgPSBsZDMyeChzdyxqKTsKKwkJCV9zdzEwID0gZHVhbGFzcihfc3cxMCwxKTsKKwkJCXN0MzJkKGssIHN3LCBfc3cxMCk7CisJCX0KKwl9ICAgICAgCisKKwllbmVyZ3lbMF0gPSBfZW5lcmd5MCA9IGlubmVyX3Byb2Qoc3ctc3RhcnQsIHN3LXN0YXJ0LCBsZW4pOworCWUwID0gaW5uZXJfcHJvZChzdywgc3csIGxlbik7CisKKwlqPWFzcmkoMSwtc3RhcnQtMSk7IGs9aisyMDsKKwlfc3cxMCA9IGxkMzJ4KHN3LGopOworCV9zdzMyID0gbGQzMngoc3csayk7CisJbGltaXQgPSBlbmQtMS1zdGFydDsKKworCWZvciAoIGk9MSwtLWosLS1rIDsgaTxsaW1pdCA7IGkrPTIsLS1qLC0tayApCisJewlyZWdpc3RlciBpbnQgX2VuZXJneTEsIF9fc3cxMCwgX19zdzMyLCBfX3MwLCBfX3MyOworICAgICAgCisJCV9zMCAgICA9IHNleDE2KF9zdzEwKTsKKwkJX3MyCSAgID0gc2V4MTYoX3N3MzIpOworCQlfZW5lcmd5MSA9IChfZW5lcmd5MCArICgoX3MwICogX3MwKSA+PiA2KSkgLSAgKChfczIgKiBfczIpID4+IDYpOworCQlfZW5lcmd5MCA9IGltYXgoMCxfZW5lcmd5MSk7CisJCWVuZXJneVtpXSA9IF9lbmVyZ3kwOworCQlfX3N3MTAgPSBsZDMyeChzdyxqKTsKKwkJX19zdzMyID0gbGQzMngoc3csayk7CisJCV9fczAgICA9IGFzcmkoMTYsX19zdzEwKTsKKwkJX19zMiAgID0gYXNyaSgxNixfX3N3MzIpOworCQlfZW5lcmd5MSA9IChfZW5lcmd5MCArICgoX19zMCAqIF9fczApID4+IDYpKSAtICAoKF9fczIgKiBfX3MyKSA+PiA2KTsKKwkJX2VuZXJneTAgPSBpbWF4KDAsX2VuZXJneTEpOworCQllbmVyZ3lbaSsxXSA9IF9lbmVyZ3kwOworCQlfc3cxMCA9IF9fc3cxMDsKKwkJX3N3MzIgPSBfX3N3MzI7CisJfQorCisJX3MwICAgID0gc2V4MTYoX3N3MTApOworCV9zMgkgICA9IHNleDE2KF9zdzMyKTsKKwlfZW5lcmd5MCA9IGltYXgoMCwoX2VuZXJneTAgKyAoKF9zMCAqIF9zMCkgPj4gNikpIC0gICgoX3MyICogX3MyKSA+PiA2KSk7CisJZW5lcmd5W2ldID0gX2VuZXJneTA7CisKKworCWVzaGlmdCA9IG5vcm1hbGl6ZTE2KGVuZXJneSwgZW5lcjE2LCAzMjc2NiwgZW5kLXN0YXJ0KzEpOyAKKwkvKiBJbiBmaXhlZC1wb2ludCwgdGhpcyBhY3R1YWxseSBvdmVycml0ZXMgdGhlIGVuZXJneSBhcnJheSAoYWxpYXNlZCB0byBjb3JyKSAqLworCXBpdGNoX3hjb3JyKHN3LCBzdy1lbmQsIGNvcnIsIGxlbiwgZW5kLXN0YXJ0KzEsIHN0YWNrKTsKKwkvKiBOb3JtYWxpemUgdG8gMTgwIHNvIHdlIGNhbiBzcXVhcmUgaXQgYW5kIGl0IHN0aWxsIGZpdHMgaW4gMTYgYml0cyAqLworCWNzaGlmdCA9IG5vcm1hbGl6ZTE2KGNvcnIsIGNvcnIxNiwgMTgwLCBlbmQtc3RhcnQrMSk7CisJLyogSWYgd2Ugc2NhbGVkIHdlaWdodGVkIGlucHV0IGRvd24sIHdlIG5lZWQgdG8gc2NhbGUgaXQgdXAgYWdhaW4gKE9LLCBzbyB3ZSd2ZSBqdXN0IGxvc3QgdGhlIExTQiwgd2hvIGNhcmVzPykgKi8KKyAgIAorCWlmICggc2NhbGVkb3duICkKKwl7CisJCWZvciAoIGo9YXNyaSgxLC1lbmQpLGs9YXNsaSgxLC1lbmQpIDsgajxOMiA7ICsraixrKz00ICkKKwkJewlyZWdpc3RlciBpbnQgX3N3MTA7CisJCQkKKwkJCV9zdzEwID0gbGQzMngoc3csaik7CisJCQlfc3cxMCA9IGR1YWxhc2woX3N3MTAsMSk7CisJCQlzdDMyZChrLCBzdywgX3N3MTApOworCQl9CisJfSAgICAgIAorCisJLyogU2VhcmNoIGZvciB0aGUgYmVzdCBwaXRjaCBwcmVkaWN0aW9uIGdhaW4gKi8KKwlmb3IgKCBpPXN0YXJ0LGw9MCA7IGk8ZW5kIDsgaSs9MiwrK2wgKQorCXsJcmVnaXN0ZXIgaW50IF9jb3JyMTYsIF9jMCwgX2MxOworCQlyZWdpc3RlciBpbnQgX2VuZXIxNiwgX2UwLCBfZTE7CisKKwkJX2NvcnIxNiA9IGxkMzJ4KGNvcnIxNixsKTsKKwkJX2NvcnIxNiA9IGRzcGlkdWFsbXVsKF9jb3JyMTYsX2NvcnIxNik7CisJCV9jMCAgICAgPSBzZXgxNihfY29ycjE2KTsKKwkJX2MxICAgICA9IGFzcmkoMTYsX2NvcnIxNik7CisKKwkJX2VuZXIxNiA9IGxkMzJ4KGVuZXIxNixsKTsKKwkJX2VuZXIxNiA9IGRzcGlkdWFsYWRkKF9lbmVyMTYsMHgwMDAxMDAwMSk7CisJCV9lMAkgICAgPSBzZXgxNihfZW5lcjE2KTsKKwkJX2UxICAgICA9IGFzcmkoMTYsX2VuZXIxNik7CisKKyAgICAgIC8qIEluc3RlYWQgb2YgZGl2aWRpbmcgdGhlIHRtcCBieSB0aGUgZW5lcmd5LCB3ZSBtdWx0aXBseSBvbiB0aGUgb3RoZXIgc2lkZSAqLworICAgICAgCisJCWlmICggKF9jMCAqIGJlc3RfZW5lcltOLTFdKSA+IChiZXN0X3Njb3JlW04tMV0gKiBfZTApICkKKwkJewkKKwkJCWJlc3Rfc2NvcmVbTi0xXSA9IF9jMDsKKwkJCWJlc3RfZW5lcltOLTFdID0gX2UwOworCQkJcGl0Y2hbTi0xXSA9IGk7CisKKwkJCWZvciggaj0wIDsgajxOLTEgOyArK2ogKQorCQkJewlpZiAoIChfYzAgKiBiZXN0X2VuZXJbal0pID4gYmVzdF9zY29yZVtqXSAqIF9lMCApCisJCQkJewlmb3IoIGs9Ti0xIDsgaz5qIDsgLS1rICkKKwkJCQkJeworCQkJCQkJYmVzdF9zY29yZVtrXT1iZXN0X3Njb3JlW2stMV07CisJCQkJCQliZXN0X2VuZXJba109YmVzdF9lbmVyW2stMV07CisJCQkJCQlwaXRjaFtrXT1waXRjaFtrLTFdOworCQkJCQl9CisKKwkJCSAgICAgICAgYmVzdF9zY29yZVtqXT1fYzA7CisJCQkJCWJlc3RfZW5lcltqXT1fZTA7CisJCQkJCXBpdGNoW2pdPWk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmICggKF9jMSAqIGJlc3RfZW5lcltOLTFdKSA+IChiZXN0X3Njb3JlW04tMV0gKiBfZTEpICkKKwkJewkKKwkJCWJlc3Rfc2NvcmVbTi0xXSA9IF9jMTsKKwkJCWJlc3RfZW5lcltOLTFdID0gX2UxOworCQkJcGl0Y2hbTi0xXSA9IGkrMTsKKworCQkJZm9yKCBqPTAgOyBqPE4tMSA7ICsraiApCisJCQl7CWlmICggKF9jMSAqIGJlc3RfZW5lcltqXSkgPiBiZXN0X3Njb3JlW2pdICogX2UxICkKKwkJCQl7CWZvciggaz1OLTEgOyBrPmogOyAtLWsgKQorCQkJCQl7CisJCQkJCQliZXN0X3Njb3JlW2tdPWJlc3Rfc2NvcmVbay0xXTsKKwkJCQkJCWJlc3RfZW5lcltrXT1iZXN0X2VuZXJbay0xXTsKKwkJCQkJCXBpdGNoW2tdPXBpdGNoW2stMV07CisJCQkJCX0KKworCQkJICAgICAgICBiZXN0X3Njb3JlW2pdPV9jMTsKKwkJCQkJYmVzdF9lbmVyW2pdPV9lMTsKKwkJCQkJcGl0Y2hbal09aSsxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKyAgIH0KKyAgIAorICAgLyogQ29tcHV0ZSBvcGVuLWxvb3AgZ2FpbiBpZiBuZWNlc3NhcnkgKi8KKyAgIGlmIChnYWluKQorICAgeworCQlmb3IgKGo9MDtqPE47aisrKQorCQl7CisJCQlzcHhfd29yZDE2X3QgZzsKKwkJCWk9cGl0Y2hbal07CisJCQlnID0gRElWMzIoU0hMMzIoRVhURU5EMzIoY29ycjE2W2ktc3RhcnRdKSxjc2hpZnQpLCAxMCtTSFIzMihNVUxUMTZfMTYoc3B4X3NxcnQoZTApLHNweF9zcXJ0KFNITDMyKEVYVEVORDMyKGVuZXIxNltpLXN0YXJ0XSksZXNoaWZ0KSkpLDYpKTsKKwkJIAlnYWluW2pdID0gaW1heCgwLGcpOworCQl9CisJfQorCisJT1BFTkxPT1BOQkVTVFBJVENIX1NUT1AoKTsKK30KKworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvdG12L21kZl90bS5oIGIvM3JkcGFydHkvc3BlZXgvdG12L21kZl90bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjEyOGUKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC90bXYvbWRmX3RtLmgKQEAgLTAsMCArMSwxMTkyIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9uZyBaaGlxaWFuICovCisvKioKKyAgIEBmaWxlIG1kZl90bS5oCisgICBAYXV0aG9yIEhvbmcgWmhpcWlhbgorICAgQGJyaWVmIFZhcmlvdXMgY29tcGF0aWJpbGl0eSByb3V0aW5lcyBmb3IgU3BlZXggKFRyaU1lZGlhIHZlcnNpb24pCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKyNpbmNsdWRlIDxvcHMvY3VzdG9tX2RlZnMuaD4KKyNpbmNsdWRlICJwcm9maWxlX3RtLmgiCisKKy8vIHNoaWZ0ZWQgcG93ZXIgc3BlY3RydW0gdG8gZmZ0d3JhcC5jIHNvIHRoYXQgb3B0aW1pc2F0aW9uIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBtZGYuYyBhbmQgcHJlcHJvY2Vzcy5jCisjZGVmaW5lIE9WRVJSSURFX1BPV0VSX1NQRUNUUlVNCQkJCQkKKworI2lmZGVmIEZJWEVEX1BPSU5UCisKKyNlbHNlCisKKyNkZWZpbmUgT1ZFUlJJREVfRklMVEVSX0RDX05PVENIMTYKK3ZvaWQgZmlsdGVyX2RjX25vdGNoMTYoCisJY29uc3Qgc3B4X2ludDE2X3QgKiByZXN0cmljdCBpbiwgCisJZmxvYXQgcmFkaXVzLCAKKwlmbG9hdCAqIHJlc3RyaWN0IG91dCwgCisJaW50IGxlbiwgCisJZmxvYXQgKiByZXN0cmljdCBtZW0KKykKK3sKKwlyZWdpc3RlciBpbnQgaTsKKwlyZWdpc3RlciBmbG9hdCBkZW4yLCByMTsKKwlyZWdpc3RlciBmbG9hdCBtZW0wLCBtZW0xOworCisJRklMVEVSRENOT1RDSDE2X1NUQVJUKCk7CisKKwlyMSA9IDEgLSByYWRpdXM7CisJZGVuMiA9IChyYWRpdXMgKiByYWRpdXMpICsgKDAuNyAqIHIxICogcjEpOworCW1lbTAgPSBtZW1bMF07CisJbWVtMSA9IG1lbVsxXTsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX0ZJTFRFUkRDTk9UQ0gxNikKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwlmb3IgKCBpPTAgOyBpPGxlbiA7ICsraSApCisJeworCQlyZWdpc3RlciBmbG9hdCB2aW4gID0gaW5baV07CisJCXJlZ2lzdGVyIGZsb2F0IHZvdXQgPSBtZW0wICsgdmluOworCQlyZWdpc3RlciBmbG9hdCBydm91dCA9IHJhZGl1cyAqIHZvdXQ7CisKKwkJbWVtMCA9IG1lbTEgKyAyICogKC12aW4gKyBydm91dCk7CisJCW1lbTEgPSB2aW4gLSAoZGVuMiAqIHZvdXQpOworCQkKKwkJb3V0W2ldID0gcnZvdXQ7CisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX0ZJTFRFUkRDTk9UQ0gxNikKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKworCW1lbVswXSA9IG1lbTA7CisJbWVtWzFdID0gbWVtMTsKKworCUZJTFRFUkRDTk9UQ0gxNl9TVE9QKCk7Cit9CisKKyNkZWZpbmUgT1ZFUlJJREVfTURGX0lOTkVSX1BST0QKK2Zsb2F0IG1kZl9pbm5lcl9wcm9kKAorCWNvbnN0IGZsb2F0ICogcmVzdHJpY3QgeCwgCisJY29uc3QgZmxvYXQgKiByZXN0cmljdCB5LCAKKwlpbnQgbGVuCispCit7CisJcmVnaXN0ZXIgZmxvYXQgc3VtID0gMDsKKyAgIAorCU1ERklOTkVSUFJPRF9TVEFSVCgpOworCisJbGVuID4+PSAxOworICAKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9NREZJTk5FUlBST0RVQ1QpCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisJd2hpbGUobGVuLS0pCisJeworCQlyZWdpc3RlciBmbG9hdCBhY2MwLCBhY2MxOworCisJCWFjYzAgPSAoKngrKykgKiAoKnkrKyk7CisJCWFjYzEgPSAoKngrKykgKiAoKnkrKyk7CisKKwkJc3VtCSArPSBhY2MwICsgYWNjMTsKKwl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfTURGSU5ORVJQUk9EVUNUKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorCisJTURGSU5ORVJQUk9EX1NUT1AoKTsKKworCXJldHVybiBzdW07Cit9CisKKyNkZWZpbmUgT1ZFUlJJREVfU1BFQ1RSQUxfTVVMX0FDQ1VNCit2b2lkIHNwZWN0cmFsX211bF9hY2N1bSgKKwljb25zdCBmbG9hdCAqIHJlc3RyaWN0IFgsIAorCWNvbnN0IGZsb2F0ICogcmVzdHJpY3QgWSwgCisJZmxvYXQgKiByZXN0cmljdCBhY2MsIAorCWludCBOLCBpbnQgTQorKQoreworCXJlZ2lzdGVyIGludCBpLCBqOworCXJlZ2lzdGVyIGZsb2F0IFhpLCBZaSwgWGlpLCBZaWk7CisJcmVnaXN0ZXIgaW50IF9OOworCisJU1BFQ1RSQUxNVUxBQ0NVTV9TVEFSVCgpOworCisJYWNjWzBdID0gWFswXSAqIFlbMF07CisJX04gPSBOLTE7CisKKwlmb3IgKCBpPTEgOyBpPF9OIDsgaSs9MiApCisJeworCQlYaSA9IFhbaV07CisJCVlpID0gWVtpXTsKKwkJWGlpID0gWFtpKzFdOworCQlZaWkgPSBZW2krMV07CisKKwkJYWNjW2ldCT0gKFhpICAqIFlpIC0gWGlpICogWWlpKTsKKwkJYWNjW2krMV09IChYaWkgKiBZaSArIFhpICAqIFlpaSk7CisJfQorICAgICAgCisJYWNjW19OXSA9IFhbX05dICogWVtfTl07CisKKwlmb3IgKCBqPTEsWCs9TixZKz1OIDsgajxNIDsgaisrICkKKwl7CQorCQlhY2NbMF0gKz0gWFswXSAqIFlbMF07CisKKwkJZm9yICggaT0xIDsgaTxOLTEgOyBpKz0yICkKKwkJeworCQkJWGkgPSBYW2ldOworCQkJWWkgPSBZW2ldOworCQkJWGlpID0gWFtpKzFdOworCQkJWWlpID0gWVtpKzFdOworCisJCQlhY2NbaV0JKz0gKFhpICAqIFlpIC0gWGlpICogWWlpKTsKKwkJCWFjY1tpKzFdKz0gKFhpaSAqIFlpICsgWGkgICogWWlpKTsKKwkJfQorICAgICAgCisJCWFjY1tfTl0gKz0gWFtfTl0gKiBZW19OXTsKKwkJWCArPSBOOworCQlZICs9IE47CisJfQorCisJU1BFQ1RSQUxNVUxBQ0NVTV9TVE9QKCk7Cit9CisKKyNkZWZpbmUgT1ZFUlJJREVfV0VJR0hURURfU1BFQ1RSQUxfTVVMX0NPTkoKK3ZvaWQgd2VpZ2h0ZWRfc3BlY3RyYWxfbXVsX2NvbmooCisJY29uc3QgZmxvYXQgKiByZXN0cmljdCB3LCAKKwljb25zdCBmbG9hdCBwLCAKKwljb25zdCBmbG9hdCAqIHJlc3RyaWN0IFgsIAorCWNvbnN0IGZsb2F0ICogcmVzdHJpY3QgWSwgCisJZmxvYXQgKiByZXN0cmljdCBwcm9kLCAKKwlpbnQgTgorKQoreworCXJlZ2lzdGVyIGludCBpLCBqOworICAgCXJlZ2lzdGVyIGludCBfTjsKKworCVdFSUdIVEVEU1BFQ1RSQUxNVUxDT05KX1NUQVJUKCk7CisKKwlwcm9kWzBdID0gcCAqIHdbMF0gKiBYWzBdICogWVswXTsgCisJX04gPSBOLTE7CisKKwlmb3IgKGk9MSxqPTE7aTxfTjtpKz0yLGorKykKKwl7CisJCXJlZ2lzdGVyIGZsb2F0IFc7CisJCXJlZ2lzdGVyIGZsb2F0IFhpLCBZaSwgWGlpLCBZaWk7CisKKwkJWGkgPSBYW2ldOworCQlZaSA9IFlbaV07CisJCVhpaSA9IFhbaSsxXTsKKwkJWWlpID0gWVtpKzFdOworCQlXID0gcCAqIHdbal07CisKKworCQlwcm9kW2ldCSA9IFcgKiAoWGkgICogWWkgKyBYaWkgKiBZaWkpOworCQlwcm9kW2krMV09IFcgKiAoWGkgICogWWlpIC0gWGlpICogWWkpOworCX0KKyAgIAorCXByb2RbX05dID0gcCAqIHdbal0gKiBYW19OXSAqIFlbX05dOworCisJV0VJR0hURURTUEVDVFJBTE1VTENPTkpfU1RPUCgpOworfQorCisjZGVmaW5lIE9WRVJSSURFX01ERl9BREpVU1RfUFJPUAordm9pZCBtZGZfYWRqdXN0X3Byb3AoCisJY29uc3QgZmxvYXQgKiByZXN0cmljdCBXLCAKKwlpbnQgTiwgCisJaW50IE0sIAorCWZsb2F0ICogcmVzdHJpY3QgcHJvcAorKQoreworCXJlZ2lzdGVyIGludCBpLCBqOworCXJlZ2lzdGVyIGZsb2F0IG1heF9zdW0gPSAxOworCXJlZ2lzdGVyIGZsb2F0IHByb3Bfc3VtID0gMTsKKworCU1ERkFESlVTVFBST1BfU1RBUlQoKTsKKworCWZvciAoIGk9MCA7IGk8TSA7ICsraSApCisJeworCQlyZWdpc3RlciBmbG9hdCB0bXAgPSAxOworCQlyZWdpc3RlciBpbnQgayA9IGkgKiBOOworCQlyZWdpc3RlciBpbnQgbCA9IGsgKyBOOworCQlyZWdpc3RlciBmbG9hdCBwcm9waTsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX01ERkFESlVTVFBST1ApCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisJCWZvciAoIGo9ayA7IGo8bCA7ICsraiApCisJCXsJCisJCQlyZWdpc3RlciBmbG9hdCB3aSA9IFdbal07CisJCQkKKwkJCXRtcCArPSB3aSAqIHdpOworCQl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfTURGQURKVVNUUFJPUCkKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKworCQlwcm9waSAgPSBzcHhfc3FydCh0bXApOworCQlwcm9wW2ldPSBwcm9waTsKKwkJbWF4X3N1bT0gZm11eChwcm9waSA+IG1heF9zdW0sIHByb3BpLCBtYXhfc3VtKTsKKwl9CisKKwlmb3IgKCBpPTAgOyBpPE0gOyArK2kgKQorCXsKKwkJcmVnaXN0ZXIgZmxvYXQgcHJvcGkgPSBwcm9wW2ldOworCisJCXByb3BpICs9IC4xZiAqIG1heF9zdW07CisJCXByb3Bfc3VtICs9IHByb3BpOworCQlwcm9wW2ldID0gcHJvcGk7CisJfQorCisJcHJvcF9zdW0gPSAwLjk5ZiAvIHByb3Bfc3VtOworCWZvciAoIGk9MCA7IGk8TSA7ICsraSApCisJewlwcm9wW2ldID0gcHJvcF9zdW0gKiBwcm9wW2ldOworCX0KKworCU1ERkFESlVTVFBST1BfU1RPUCgpOworfQorCisKKyNkZWZpbmUgT1ZFUlJJREVfU1BFRVhfRUNIT19HRVRfUkVTSURVQUwKK3ZvaWQgc3BlZXhfZWNob19nZXRfcmVzaWR1YWwoCisJU3BlZXhFY2hvU3RhdGUgKiByZXN0cmljdCBzdCwgCisJZmxvYXQgKiByZXN0cmljdCByZXNpZHVhbF9lY2hvLCAKKwlpbnQgbGVuCispCit7CisJcmVnaXN0ZXIgaW50IGk7CisJcmVnaXN0ZXIgZmxvYXQgbGVhazIsIGxlYWtlOworCXJlZ2lzdGVyIGludCBOOworCXJlZ2lzdGVyIGZsb2F0ICogcmVzdHJpY3Qgd2luZG93OworCXJlZ2lzdGVyIGZsb2F0ICogcmVzdHJpY3QgbGFzdF95OworCXJlZ2lzdGVyIGZsb2F0ICogcmVzdHJpY3QgeTsKKworCVNQRUVYRUNIT0dFVFJFU0lEVUFMX1NUQVJUKCk7CisKKwl3aW5kb3cgPSBzdC0+d2luZG93OworCWxhc3RfeSA9IHN0LT5sYXN0X3k7CisJeSA9IHN0LT55OworCU4gPSBzdC0+d2luZG93X3NpemU7CisKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYRUNIT0dFVFJFU0lEVUFMKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTQKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCWZvciAoaT0wO2k8TjtpKyspCisJewl5W2ldID0gd2luZG93W2ldICogbGFzdF95W2ldOwkKKwl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfU1BFRVhFQ0hPR0VUUkVTSURVQUwpCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisgICAgICAKKwlzcHhfZmZ0KHN0LT5mZnRfdGFibGUsIHN0LT55LCBzdC0+WSk7CisJcG93ZXJfc3BlY3RydW0oc3QtPlksIHJlc2lkdWFsX2VjaG8sIE4pOworICAgICAgCisJbGVha2UgPSBzdC0+bGVha19lc3RpbWF0ZTsKKwlsZWFrMiA9IGZtdXgobGVha2UgPiAuNSwgMSwgMiAqIGxlYWtlKTsKKwlOID0gc3QtPmZyYW1lX3NpemU7CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWEVDSE9HRVRSRVNJRFVBTCkKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwlmb3IgKCBpPTAgOyBpPE4gOyArK2kgKQorCXsJcmVzaWR1YWxfZWNob1tpXSAqPSBsZWFrMjsKKwl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfU1BFRVhFQ0hPR0VUUkVTSURVQUwpCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisKKwlyZXNpZHVhbF9lY2hvW05dICo9IGxlYWsyOworCisjaWZuZGVmIE5PX1JFTUFSSworICAgKHZvaWQpbGVuOworI2VuZGlmCisKKyAgIFNQRUVYRUNIT0dFVFJFU0lEVUFMX1NUT1AoKTsKK30KKyNlbmRpZgorCisKK3ZvaWQgbWRmX3ByZWVtcGgoCisJU3BlZXhFY2hvU3RhdGUgKiByZXN0cmljdCBzdCwgCisJc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgeCwKKwljb25zdCBzcHhfaW50MTZfdCAqIHJlc3RyaWN0IGZhcl9lbmQsCisJaW50IGZyYW1lc2l6ZQorKQoreworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCBwcmVlbXBoID0gc3QtPnByZWVtcGg7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IG1lbVggPSBzdC0+bWVtWDsKKwlyZWdpc3RlciBzcHhfd29yZDE2X3QgbWVtRCA9IHN0LT5tZW1EOworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCAqIHJlc3RyaWN0IGlucHV0ID0gc3QtPmlucHV0OworCXJlZ2lzdGVyIGludCBpOworI2lmZGVmIEZJWEVEX1BPSU5UCisJcmVnaXN0ZXIgaW50IHNhdHVyYXRlZCA9IHN0LT5zYXR1cmF0ZWQ7CisjZW5kaWYKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYRUNIT0NBTkNFTExBVElPTikKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwlmb3IgKCBpPTAgOyBpPGZyYW1lc2l6ZSA7ICsraSApCisJeworCQlyZWdpc3RlciBzcHhfaW50MTZfdCBmYXJfZW5kaSA9IGZhcl9lbmRbaV07CisJCXJlZ2lzdGVyIHNweF93b3JkMzJfdCB0bXAzMjsKKwkJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IGlucHV0aSA9IGlucHV0W2ldOworCisJCXRtcDMyID0gU1VCMzIoRVhURU5EMzIoZmFyX2VuZGkpLCBFWFRFTkQzMihNVUxUMTZfMTZfUDE1KHByZWVtcGgsbWVtWCkpKTsKKworI2lmZGVmIEZJWEVEX1BPSU5UCisJCXNhdHVyYXRlZCA9IG11eChpYWJzKHRtcDMyKSA+IDMyNzY3LCBNKzEsIHNhdHVyYXRlZCk7CisJCXRtcDMyID0gaWNsaXBpKHRtcDMyLDMyNzY3KTsKKyNlbmRpZgorCisJCXhbaV0gPSBFWFRSQUNUMTYodG1wMzIpOworCQltZW1YID0gZmFyX2VuZGk7CisJCXRtcDMyID0gU1VCMzIoRVhURU5EMzIoaW5wdXRpKSwgRVhURU5EMzIoTVVMVDE2XzE2X1AxNShwcmVlbXBoLCBtZW1EKSkpOworCisjaWZkZWYgRklYRURfUE9JTlQKKwkJc2F0dXJhdGVkID0gbXV4KCAoKHRtcDMyID4gMzI3NjcpICYmIChzYXR1cmF0ZWQgPT0gMCkpLCAxLAorCQkJCQltdXgoICgodG1wMzIgPC0zMjc2NykgJiYgKHNhdHVyYXRlZCA9PSAwKSksIDEsIHNhdHVyYXRlZCApKTsKKwkJdG1wMzIgPSBpY2xpcGkodG1wMzIsMzI3NjcpOworI2VuZGlmCisJCW1lbUQgPSBpbnB1dGk7CisJCWlucHV0W2ldID0gdG1wMzI7CisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYRUNIT0NBTkNFTExBVElPTikKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKworCXN0LT5tZW1EID0gbWVtRDsKKwlzdC0+bWVtWCA9IG1lbVg7CisKKyNpZmRlZiBGSVhFRF9QT0lOVAorCXN0LT5zYXR1cmF0ZWQgPSBzYXR1cmF0ZWQ7CisjZW5kaWYKK30KKwordm9pZCBtZGZfc3ViKAorCXNweF93b3JkMTZfdCAqIHJlc3RyaWN0IGRlc3QsCisJY29uc3Qgc3B4X3dvcmQxNl90ICogcmVzdHJpY3Qgc3JjMSwKKwljb25zdCBzcHhfd29yZDE2X3QgKiByZXN0cmljdCBzcmMyLAorCWludCBmcmFtZXNpemUKKykKK3sKKwlyZWdpc3RlciBpbnQgaTsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYRUNIT0NBTkNFTExBVElPTikKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKworI2lmZGVmIEZJWEVEX1BPSU5UCisJZm9yICggaT0wLGZyYW1lc2l6ZTw8PTEgOyBpPGZyYW1lc2l6ZSA7IGkrPTQgKQorCXsJcmVnaXN0ZXIgaW50IHNyYzFpLCBzcmMyaSwgZGVzdGk7CisKKwkJc3JjMWkgPSBsZDMyZChzcmMxLGkpOworCQlzcmMyaSA9IGxkMzJkKHNyYzIsaSk7CisJCWRlc3RpID0gZHNwaWR1YWxzdWIoc3JjMWksc3JjMmkpOworCQlzdDMyZChpLCBkZXN0LCBkZXN0aSk7CisJfQorI2Vsc2UKKwlmb3IgKCBpPTAgOyBpPGZyYW1lc2l6ZSA7ICsraSApCisJewlkZXN0W2ldID0gc3JjMVtpXSAtIHNyYzJbaV07CisJfQorI2VuZGlmCisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWEVDSE9DQU5DRUxMQVRJT04pCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmICAgCit9CisKK3ZvaWQgbWRmX3N1Yl9pbnQoCisJc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgZGVzdCwKKwljb25zdCBzcHhfaW50MTZfdCAqIHJlc3RyaWN0IHNyYzEsCisJY29uc3Qgc3B4X2ludDE2X3QgKiByZXN0cmljdCBzcmMyLAorCWludCBmcmFtZXNpemUKKykKK3sKKwlyZWdpc3RlciBpbnQgaSwgajsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYRUNIT0NBTkNFTExBVElPTikKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKworI2lmZGVmIEZJWEVEX1BPSU5UCisJZm9yICggaT0wLGZyYW1lc2l6ZTw8PTEgOyBpPGZyYW1lc2l6ZSA7IGkrPTQgKQorCXsJcmVnaXN0ZXIgaW50IHNyYzFpLCBzcmMyaSwgZGVzdGk7CisKKwkJc3JjMWkgPSBsZDMyZChzcmMxLGkpOworCQlzcmMyaSA9IGxkMzJkKHNyYzIsaSk7CisJCWRlc3RpID0gZHNwaWR1YWxzdWIoc3JjMWksc3JjMmkpOworCQlzdDMyZChpLCBkZXN0LCBkZXN0aSk7CisJfQorI2Vsc2UKKwlmb3IgKCBpPTAsaj0wIDsgaTxmcmFtZXNpemUgOyBpKz0yLCsraiApCisJewlyZWdpc3RlciBpbnQgc3JjMWksIHNyYzJpLCBkZXN0aTsKKwkJCisJCQorCQlzcmMxaSA9IGxkMzJkKHNyYzEsaik7CisJCXNyYzJpID0gbGQzMmQoc3JjMixqKTsKKwkJZGVzdGkgPSBkc3BpZHVhbHN1YihzcmMxaSxzcmMyaSk7CisKKwkJZGVzdFtpXSA9IHNleDE2KGRlc3RpKTsKKwkJZGVzdFtpKzFdID0gYXNyaSgxNixkZXN0aSk7CisJfQorI2VuZGlmCisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWEVDSE9DQU5DRUxMQVRJT04pCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmICAgCit9CisKK3ZvaWQgbWRmX2NvbXB1dGVfd2VpZ2h0X2dyYWRpZW50KAorCVNwZWV4RWNob1N0YXRlICogcmVzdHJpY3Qgc3QsCisJc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgWCwKKwlpbnQgTiwKKwlpbnQgTQorKQoreworCXJlZ2lzdGVyIGludCBpLCBqOworCXJlZ2lzdGVyIHNweF93b3JkMzJfdCAqIHJlc3RyaWN0IFBISSA9IHN0LT5QSEk7CisKKwlmb3IgKGo9TS0xO2o+PTA7ai0tKQorCXsKKwkJcmVnaXN0ZXIgc3B4X3dvcmQzMl90ICogcmVzdHJpY3QgVyA9ICYoc3QtPldbaipOXSk7CisKKwkJd2VpZ2h0ZWRfc3BlY3RyYWxfbXVsX2NvbmooCisJCQlzdC0+cG93ZXJfMSwgCisJCQlGTE9BVF9TSEwoUFNFVURPRkxPQVQoc3QtPnByb3Bbal0pLC0xNSksIAorCQkJJlhbKGorMSkqTl0sIAorCQkJc3QtPkUsIAorCQkJc3QtPlBISSwgCisJCQlOKTsKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWEVDSE9DQU5DRUxMQVRJT04pCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisJCWZvciAoaT0wO2k8TjtpKyspCisJCXsJV1tpXSA9IEFERDMyKFdbaV0sUEhJW2ldKTsKKwkJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYRUNIT0NBTkNFTExBVElPTikKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYgICAgICAgICAKKwl9Cit9CisKK3ZvaWQgbWRmX3VwZGF0ZV93ZWlnaHQoCisJU3BlZXhFY2hvU3RhdGUgKiByZXN0cmljdCBzdCwKKwlpbnQgTiwKKwlpbnQgTSwKKwlpbnQgZnJhbWVzaXplCispCit7CisJcmVnaXN0ZXIgaW50IGo7CisJcmVnaXN0ZXIgaW50IGNhbmNlbF9jb3VudCA9IHN0LT5jYW5jZWxfY291bnQ7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3Qgd3RtcCA9IHN0LT53dG1wOworI2lmZGVmIEZJWEVEX1BPSU5UCisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3Qgd3RtcDIgPSBzdC0+d3RtcDI7CisJcmVnaXN0ZXIgaW50IGk7CisjZW5kaWYKKworCWZvciAoIGo9MCA7IGo8TSA7IGorKyApCisJeworCQlyZWdpc3RlciBzcHhfd29yZDMyX3QgKiByZXN0cmljdCBXID0gJihzdC0+V1tqKk5dKTsKKyAgICAKKwkJaWYgKGo9PTAgfHwgY2FuY2VsX2NvdW50JShNLTEpID09IGotMSkKKwkJeworI2lmZGVmIEZJWEVEX1BPSU5UCisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWEVDSE9DQU5DRUxMQVRJT04pCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisJCQlmb3IgKCBpPTAgOyBpPE4gOyBpKysgKQorCQkJCXd0bXAyW2ldID0gRVhUUkFDVDE2KFBTSFIzMihXW2ldLE5PUk1BTElaRV9TQ0FMRURPV04rMTYpKTsKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWEVDSE9DQU5DRUxMQVRJT04pCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmICAgICAgICAgCisJCQlzcHhfaWZmdChzdC0+ZmZ0X3RhYmxlLCB3dG1wMiwgd3RtcCk7CisJCQltZW1zZXQod3RtcCwgMCwgZnJhbWVzaXplICogc2l6ZW9mKHNweF93b3JkMTZfdCkpOworCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfU1BFRVhFQ0hPQ0FOQ0VMTEFUSU9OKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTQKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCQkJZm9yIChqPWZyYW1lc2l6ZTsgajxOIDsgKytqKQorCQkJewl3dG1wW2pdPVNITDE2KHd0bXBbal0sTk9STUFMSVpFX1NDQUxFVVApOworCQkJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYRUNIT0NBTkNFTExBVElPTikKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYgICAgCisKKwkJCXNweF9mZnQoc3QtPmZmdF90YWJsZSwgd3RtcCwgd3RtcDIpOworCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfU1BFRVhFQ0hPQ0FOQ0VMTEFUSU9OKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTQKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCQkJZm9yIChpPTA7aTxOO2krKykKKwkJCXsJV1tpXSAtPSBTSEwzMihFWFRFTkQzMih3dG1wMltpXSksMTYrTk9STUFMSVpFX1NDQUxFRE9XTi1OT1JNQUxJWkVfU0NBTEVVUC0xKTsKKwkJCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWEVDSE9DQU5DRUxMQVRJT04pCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmICAgIAorCisjZWxzZQorCQkJc3B4X2lmZnQoc3QtPmZmdF90YWJsZSwgVywgd3RtcCk7CisJCQltZW1zZXQoJnd0bXBbZnJhbWVzaXplXSwgMCwgKE4tZnJhbWVzaXplKSAqIHNpemVvZihzcHhfd29yZDE2X3QpKTsKKwkJCXNweF9mZnQoc3QtPmZmdF90YWJsZSwgd3RtcCwgVyk7CisjZW5kaWYgIAorCQl9CisJfQorfQorCisjaWZkZWYgVFdPX1BBVEgKKy8vIGZpcnN0IGZvdXIgcGFyYW1ldGVycyBpcyBwYXNzZWQgYnkgcmVnaXN0ZXJzCisvLyBnZW5lcmF0ZSBmYXN0ZXIgcGVyZm9ybWFuY2Ugd2l0aCA0IHBhcmFtZXRlcnMgZnVuY3Rpb25zCitzcHhfd29yZDMyX3QgbWRmX3VwZGF0ZV9mb3JlZ3JvdW5kKAorCVNwZWV4RWNob1N0YXRlICogcmVzdHJpY3Qgc3QsCisJc3B4X3dvcmQzMl90IERiZiwKKwlzcHhfd29yZDMyX3QgU2ZmLAorCXNweF93b3JkMzJfdCBTZWUKKykJCQkJCQkJCQkJCit7CQkJCQkJCQkKKwlyZWdpc3RlciBzcHhfd29yZDMyX3QgRGF2ZzEgPSBzdC0+RGF2ZzE7CQkJCQkJCQkJCQkJCQkJCQkKKwlyZWdpc3RlciBzcHhfd29yZDMyX3QgRGF2ZzIgPSBzdC0+RGF2ZzI7CQkJCQkJCQkJCQkJCQkJCQkKKwlyZWdpc3RlciBzcHhfd29yZDMyX3QgRHZhcjEgPSBzdC0+RHZhcjE7CQkJCQkJCQkJCQkJCQkJCQkKKwlyZWdpc3RlciBzcHhfd29yZDMyX3QgRHZhcjIgPSBzdC0+RHZhcjI7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgaW5wdXQgPSBzdC0+aW5wdXQ7CisgICAJcmVnaXN0ZXIgaW50IGZyYW1lc2l6ZSA9IHN0LT5mcmFtZV9zaXplOworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCAqIHJlc3RyaWN0IHh4ID0gc3QtPnggKyBmcmFtZXNpemU7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgeSA9IHN0LT55ICsgZnJhbWVzaXplOworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCAqIHJlc3RyaWN0IGVlID0gc3QtPmUgKyBmcmFtZXNpemU7CisJcmVnaXN0ZXIgaW50IHVwZGF0ZV9mb3JlZ3JvdW5kOworCXJlZ2lzdGVyIGludCBpOworICAgIHJlZ2lzdGVyIGludCBOID0gc3QtPndpbmRvd19zaXplOworCXJlZ2lzdGVyIGludCBNID0gc3QtPk07CisJCQkJCQkJCQkJCQkJCQkJCQkJCisjaWZkZWYgRklYRURfUE9JTlQJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKKwlyZWdpc3RlciBzcHhfd29yZDMyX3Qgc2MwID0gU1VCMzIoU2ZmLFNlZSk7CQkJCQkJCQkJCQkJCQkJCQkKKwlyZWdpc3RlciBzcHhfZmxvYXRfdCBzYzEgPSBGTE9BVF9NVUwzMlUoU2ZmLERiZik7CQkJCQkJCQkJCQkJCQkJCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCisJRGF2ZzEgPSBBREQzMihNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC42ZiwxNSksRGF2ZzEpLCBNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC40ZiwxNSksc2MwKSk7CQkJCQkKKwlEYXZnMiA9IEFERDMyKE1VTFQxNl8zMl9RMTUoUUNPTlNUMTYoLjg1ZiwxNSksRGF2ZzIpLCBNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC4xNWYsMTUpLHNjMCkpOwkJCQkKKwlEdmFyMSA9IEZMT0FUX0FERCgJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQorCQkJCUZMT0FUX01VTFQoVkFSMV9TTU9PVEgsRHZhcjEpLAkJCQkJCQkJCQkJCQkJCQkJCisJCQkJRkxPQVRfTVVMMzJVKE1VTFQxNl8zMl9RMTUoUUNPTlNUMTYoLjRmLDE1KSxTZmYpLAkJCQkJCQkJCQkJCQorCQkJCU1VTFQxNl8zMl9RMTUoUUNPTlNUMTYoLjRmLDE1KSxEYmYpKSk7CQkJCQkJCQkJCQkJCQkJCisJRHZhcjIgPSBGTE9BVF9BREQoCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKKwkJCQlGTE9BVF9NVUxUKFZBUjJfU01PT1RILER2YXIyKSwJCQkJCQkJCQkJCQkJCQkJCQorCQkJCUZMT0FUX01VTDMyVShNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC4xNWYsMTUpLFNmZiksCQkJCQkJCQkJCQkJCisJCQkJTVVMVDE2XzMyX1ExNShRQ09OU1QxNiguMTVmLDE1KSxEYmYpKSk7CQkJCQkJCQkJCQkJCQkJCisjZWxzZQorCXJlZ2lzdGVyIHNweF93b3JkMzJfdCBzYzAgPSBTZmYgLSBTZWU7CQkJCQkJCQkJCQkJCQkJCQkJCisJcmVnaXN0ZXIgc3B4X3dvcmQzMl90IHNjMSA9IFNmZiAqIERiZjsJCQkJCQkJCQkJCQkJCQkJCQkKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKKwlEYXZnMSA9IC42KkRhdmcxICsgLjQqc2MwOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQorCURhdmcyID0gLjg1KkRhdmcyICsgLjE1KnNjMDsJCQkJCQkJCQkJCQkJCQkJCQkJCQorCUR2YXIxID0gVkFSMV9TTU9PVEgqRHZhcjEgKyAuMTYqc2MxOwkJCQkJCQkJCQkJCQkJCQkJCQorCUR2YXIyID0gVkFSMl9TTU9PVEgqRHZhcjIgKyAuMDIyNSpzYzE7CQkJCQkJCQkJCQkJCQkJCQkJCisjZW5kaWYKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKKwl1cGRhdGVfZm9yZWdyb3VuZCA9CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKKwkgICBtdXgoIEZMT0FUX0dUKEZMT0FUX01VTDMyVShzYzAsIFZBQlMoc2MwKSksIHNjMSksIDEsCQkJCQkJCQkJCQkJCQkKKwkgICBtdXgoIEZMT0FUX0dUKEZMT0FUX01VTDMyVShEYXZnMSwgVkFCUyhEYXZnMSkpLCBGTE9BVF9NVUxUKFZBUjFfVVBEQVRFLChEdmFyMSkpKSwgMSwJCQkJCQorCSAgIG11eCggRkxPQVRfR1QoRkxPQVRfTVVMMzJVKERhdmcyLCBWQUJTKERhdmcyKSksIEZMT0FUX01VTFQoVkFSMl9VUERBVEUsKER2YXIyKSkpLCAxLCAwKSkpOwkJCQkKKworCWlmICggdXBkYXRlX2ZvcmVncm91bmQgKQkJCQkJCQkJCQkJCQkJCQkJCQkJCQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKKwkJcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3Qgd2luZG93ZiA9IHN0LT53aW5kb3cgKyBmcmFtZXNpemU7CQkJCQkJCQkJCQorCQlyZWdpc3RlciBzcHhfd29yZDE2X3QgKiByZXN0cmljdCB3aW5kb3cgPSBzdC0+d2luZG93OwkJCQkJCQkJCQkJCQkKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKKwkJc3QtPkRhdmcxID0gc3QtPkRhdmcyID0gMDsJCQkJCQkJCQkJCQkJCQkJCQkJCQorCQlzdC0+RHZhcjEgPSBzdC0+RHZhcjIgPSBGTE9BVF9aRVJPOwkJCQkJCQkJCQkJCQkJCQkJCQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQorCQltZW1jcHkoc3QtPmZvcmVncm91bmQsIHN0LT5XLCBOKk0qc2l6ZW9mKHNweF93b3JkMzJfdCkpOwkJCQkJCQkJCQkJCQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYRUNIT0NBTkNFTExBVElPTikJCQkJCQkJCQkJCQkJCQkJCisjcHJhZ21hIFRDU191bnJvbGw9NAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQorI2VuZGlmCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCisJCWZvciAoIGk9MCA7IGk8ZnJhbWVzaXplIDsgKytpKQkJCQkJCQkJCQkJCQkJCQkJCQkKKwkJewlyZWdpc3RlciBzcHhfd29yZDE2X3Qgd2kgPSB3aW5kb3dbaV07CQkJCQkJCQkJCQkJCQkJCQorCQkJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IHdmaSA9IHdpbmRvd2ZbaV07CQkJCQkJCQkJCQkJCQkJCQorCQkJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IGVpID0gZWVbaV07CQkJCQkJCQkJCQkJCQkJCQkKKwkJCXJlZ2lzdGVyIHNweF93b3JkMTZfdCB5aSA9IHlbaV07CQkJCQkJCQkJCQkJCQkJCQkKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKKwkJCWVlW2ldID0gTVVMVDE2XzE2X1ExNSh3ZmksZWkpICsJTVVMVDE2XzE2X1ExNSh3aSx5aSk7CQkJCQkJCQkJCQkJCisJCX0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYRUNIT0NBTkNFTExBVElPTikJCQkJCQkJCQkJCQkJCQkJCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQorI3ByYWdtYSBUQ1NfdW5yb2xsPTAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQorI2VuZGlmCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCisJfSBlbHNlCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKKwl7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCisJCXJlZ2lzdGVyIGludCByZXNldF9iYWNrZ3JvdW5kOwkJCQkJCQkJCQkJCQkJCQkJCQkKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKKwkJcmVzZXRfYmFja2dyb3VuZCA9CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQorCQkJbXV4KCBGTE9BVF9HVChGTE9BVF9NVUwzMlUoLShzYzApLFZBQlMoc2MwKSksIEZMT0FUX01VTFQoVkFSX0JBQ0tUUkFDSyxzYzEpKSwgMSwJCQkJCisJCQltdXgoIEZMT0FUX0dUKEZMT0FUX01VTDMyVSgtKERhdmcxKSwgVkFCUyhEYXZnMSkpLCBGTE9BVF9NVUxUKFZBUl9CQUNLVFJBQ0ssRHZhcjEpKSwgMSwJCQkKKwkJCW11eCggRkxPQVRfR1QoRkxPQVRfTVVMMzJVKC0oRGF2ZzIpLCBWQUJTKERhdmcyKSksIEZMT0FUX01VTFQoVkFSX0JBQ0tUUkFDSyxEdmFyMikpLCAxLCAwKSkpOwkKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKKwkJaWYgKCByZXNldF9iYWNrZ3JvdW5kICkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKKwkJewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCisJCQltZW1jcHkoc3QtPlcsIHN0LT5mb3JlZ3JvdW5kLCBOKk0qc2l6ZW9mKHNweF93b3JkMzJfdCkpOwkJCQkJCQkJCQkJCisJCQltZW1jcHkoeSwgZWUsIGZyYW1lc2l6ZSAqIHNpemVvZihzcHhfd29yZDE2X3QpKTsJCQkJCQkJCQkJCQkJCisJCQltZGZfc3ViKHh4LGlucHV0LHksZnJhbWVzaXplKTsJCQkJCQkJCQkJCQkJCQkJCQkKKwkJCVNlZSA9IFNmZjsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQorCQkJc3QtPkRhdmcxID0gc3QtPkRhdmcyID0gMDsJCQkJCQkJCQkJCQkJCQkJCQkJCisJCQlzdC0+RHZhcjEgPSBzdC0+RHZhcjIgPSBGTE9BVF9aRVJPOwkJCQkJCQkJCQkJCQkJCQkJCisJCX0gZWxzZQorCQl7CisJCQlzdC0+RGF2ZzEgPSBEYXZnMTsKKwkJCXN0LT5EYXZnMiA9IERhdmcyOworCQkJc3QtPkR2YXIxID0gRHZhcjE7CisJCQlzdC0+RHZhcjIgPSBEdmFyMjsKKwkJfQorCX0KKworCXJldHVybiBTZWU7Cit9CQorI2VuZGlmCisJCQkJCQkJCQkJCQkJCQkJCQkJCSAgIAordm9pZCBtZGZfY29tcHV0ZV9lcnJvcl9zaWduYWwoCisJU3BlZXhFY2hvU3RhdGUgKiByZXN0cmljdCBzdCwKKwljb25zdCBzcHhfaW50MTZfdCAqIHJlc3RyaWN0IGluLAorCXNweF9pbnQxNl90ICogcmVzdHJpY3Qgb3V0LAorCWludCBmcmFtZXNpemUKKykKK3sKKwlyZWdpc3RlciBzcHhfd29yZDE2X3QgcHJlZW1waCA9IHN0LT5wcmVlbXBoOworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCBtZW1FID0gc3QtPm1lbUU7CisJcmVnaXN0ZXIgaW50IHNhdHVyYXRlZCA9IHN0LT5zYXR1cmF0ZWQ7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgZSA9IHN0LT5lOworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCAqIHJlc3RyaWN0IGVlID0gc3QtPmUgKyBmcmFtZXNpemU7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgaW5wdXQgPSBzdC0+aW5wdXQ7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgeHggPSBzdC0+eCArIGZyYW1lc2l6ZTsKKwlyZWdpc3RlciBpbnQgaTsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYRUNIT0NBTkNFTExBVElPTikKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwlmb3IgKCBpPTAgOyBpPGZyYW1lc2l6ZSA7ICsraSApCisJeworCQlyZWdpc3RlciBzcHhfd29yZDMyX3QgdG1wX291dDsKKwkJcmVnaXN0ZXIgc3B4X2ludDE2X3QgaW5pID0gaW5baV07CisJCXJlZ2lzdGVyIGludCBmbGc7CisKKyNpZmRlZiBGSVhFRF9QT0lOVAorCisjaWZkZWYgVFdPX1BBVEgKKwkJdG1wX291dCA9IFNVQjMyKEVYVEVORDMyKGlucHV0W2ldKSwgRVhURU5EMzIoZWVbaV0pKTsKKwkJdG1wX291dCA9IGljbGlwaSh0bXBfb3V0LDMyNzY3KTsKKyNlbHNlCisJCXRtcF9vdXQgPSBTVUIzMihFWFRFTkQzMihpbnB1dFtpXSksIEVYVEVORDMyKHlbaV0pKTsKKwkJdG1wX291dCA9IGljbGlwaSh0bXBfb3V0LDMyNzY3KTsKKyNlbmRpZgorCisjZWxzZQorI2lmZGVmIFRXT19QQVRICisJCXRtcF9vdXQgPSBTVUIzMihFWFRFTkQzMihpbnB1dFtpXSksIEVYVEVORDMyKGVlW2ldKSk7CisjZWxzZQorCQl0bXBfb3V0ID0gU1VCMzIoRVhURU5EMzIoaW5wdXRbaV0pLCBFWFRFTkQzMih5W2ldKSk7CisjZW5kaWYKKwkJdG1wX291dCA9IAorCQkJZm11eCggdG1wX291dCA+IDMyNzY3LCAzMjc2NywKKwkJCWZtdXgoIHRtcF9vdXQgPCAtMzI3NjgsIC0zMjc2OCwgdG1wX291dCkpOworI2VuZGlmCisKKwkJdG1wX291dCA9IEFERDMyKHRtcF9vdXQsIEVYVEVORDMyKE1VTFQxNl8xNl9QMTUocHJlZW1waCxtZW1FKSkpOworCQlmbGcgPSBpYWJzKGluaSkgPj0gMzIwMDA7CisJCXRtcF9vdXQgPSBWTVVYKCBmbGcsIDAsIHRtcF9vdXQpOworCQlzYXR1cmF0ZWQgPSBtdXgoIGZsZyAmJiAoc2F0dXJhdGVkID09IDApLCAxLCBzYXR1cmF0ZWQpOworCisJCW91dFtpXSA9IChzcHhfaW50MTZfdCl0bXBfb3V0OworCQltZW1FID0gdG1wX291dDsKKwl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfU1BFRVhFQ0hPQ0FOQ0VMTEFUSU9OKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZiAKKworCXN0LT5tZW1FID0gbWVtRTsKKwlzdC0+c2F0dXJhdGVkID0gc2F0dXJhdGVkOworCW1lbXNldChlLCAwLCBmcmFtZXNpemUgKiBzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisJbWVtY3B5KGVlLCB4eCwgZnJhbWVzaXplICogc2l6ZW9mKHNweF93b3JkMTZfdCkpOworfQorCitpbmxpbmUgaW50IG1kZl9jaGVjaygKKyAgCVNwZWV4RWNob1N0YXRlICogcmVzdHJpY3Qgc3QsCisJc3B4X2ludDE2X3QgKiBvdXQsCisJc3B4X3dvcmQzMl90IFN5eSwgCisJc3B4X3dvcmQzMl90IFN4eCwgCisJc3B4X3dvcmQzMl90IFNlZSwKKwlzcHhfd29yZDMyX3QgU2ZmLAorCXNweF93b3JkMzJfdCBTZGQKKykKK3sKKyAgICByZWdpc3RlciBpbnQgTiA9IHN0LT53aW5kb3dfc2l6ZTsKKwlyZWdpc3RlciBzcHhfd29yZDMyX3QgTjFlOSA9IE4gKiAxZTk7CisJcmVnaXN0ZXIgaW50IHNjcmV3ZWRfdXAgPSBzdC0+c2NyZXdlZF91cDsKKwlyZWdpc3RlciBpbnQgZnJhbWVzaXplID0gc3QtPmZyYW1lX3NpemU7CisKKwlpZiAoIShTeXk+PTAgJiYgU3h4Pj0wICYmIFNlZSA+PSAwKQorI2lmbmRlZiBGSVhFRF9QT0lOVAorCQl8fCAhKFNmZiA8IE4xZTkgJiYgU3l5IDwgTjFlOSAmJiBTeHggPCBOMWU5ICkKKyNlbmRpZgorICAgICAgKQorCXsgICAgCisJCXNjcmV3ZWRfdXAgKz0gNTA7CisJCW1lbXNldChvdXQsIDAsIGZyYW1lc2l6ZSAqIHNpemVvZihzcHhfaW50MTZfdCkpOworCisJfSBlbHNlCisJewlzY3Jld2VkX3VwID0gbXV4KCBTSFIzMihTZmYsIDIpID4gQUREMzIoU2RkLCBTSFIzMihNVUxUMTZfMTYoTiwgMTAwMDApLDYpKSwgc2NyZXdlZF91cCsxLCAwKTsKKwl9CisKKwlzdC0+c2NyZXdlZF91cCA9IHNjcmV3ZWRfdXA7CisKKwlyZXR1cm4gc2NyZXdlZF91cDsKK30KKwordm9pZCBtZGZfc21vb3RoKAorCXNweF93b3JkMzJfdCAqIHJlc3RyaWN0IHBvd2VyLAorCXNweF93b3JkMzJfdCAqIHJlc3RyaWN0IFhmLAorCWludCBmcmFtZXNpemUsCisJaW50IE0KKykKK3sKKyAgICByZWdpc3RlciBzcHhfd29yZDE2X3Qgc3MsIHNzXzEsIHBmLCB4ZmY7CisJcmVnaXN0ZXIgaW50IGo7CisKKyNpZmRlZiBGSVhFRF9QT0lOVAorCXNzPURJVjMyXzE2KDExNDY5LE0pOworCXNzXzEgPSBTVUIxNigzMjc2Nyxzcyk7CisjZWxzZQorCXNzPS4zNS9NOworCXNzXzEgPSAxLXNzOworI2VuZGlmCisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWEVDSE9DQU5DRUxMQVRJT04pCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmICAKKwlmb3IgKCBqPTAgOyBqPGZyYW1lc2l6ZSA7ICsraiApCisJewlyZWdpc3RlciBzcHhfd29yZDMyX3QgcGkgID0gcG93ZXJbal07CisJCXJlZ2lzdGVyIHNweF93b3JkMzJfdCB4ZmkgPSBYZltqXTsKKworCQlwb3dlcltqXSA9IE1VTFQxNl8zMl9RMTUoc3NfMSxwaSkgKyAxICsgTVVMVDE2XzMyX1ExNShzcyx4ZmkpOworCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWEVDSE9DQU5DRUxMQVRJT04pCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmIAorCisJcGYgPSBwb3dlcltmcmFtZXNpemVdOworCXhmZiA9IFhmW2ZyYW1lc2l6ZV07CisJcG93ZXJbZnJhbWVzaXplXSA9IE1VTFQxNl8zMl9RMTUoc3NfMSxwZikgKyAxICsgTVVMVDE2XzMyX1ExNShzcyx4ZmYpOworfQorCit2b2lkIG1kZl9jb21wdXRlX2ZpbHRlcmVkX3NwZWN0cmFfY3Jvc3Njb3JyZWxhdGlvbnMoCisgCVNwZWV4RWNob1N0YXRlICogcmVzdHJpY3Qgc3QsCisJc3B4X3dvcmQzMl90IFN5eSwgCisJc3B4X3dvcmQzMl90IFNlZSwKKwlpbnQgZnJhbWVzaXplCispCit7ICAgCisJcmVnaXN0ZXIgc3B4X2Zsb2F0X3QgUGV5ID0gRkxPQVRfT05FOworCXJlZ2lzdGVyIHNweF9mbG9hdF90IFB5eSA9IEZMT0FUX09ORTsKKwlyZWdpc3RlciBzcHhfd29yZDE2X3Qgc3BlY19hdmVyYWdlID0gc3QtPnNwZWNfYXZlcmFnZTsKKwlyZWdpc3RlciBzcHhfd29yZDMyX3QgKiByZXN0cmljdCBwUmYgPSBzdC0+UmY7CisJcmVnaXN0ZXIgc3B4X3dvcmQzMl90ICogcmVzdHJpY3QgcFlmID0gc3QtPllmOworCXJlZ2lzdGVyIHNweF93b3JkMzJfdCAqIHJlc3RyaWN0IHBFaCA9IHN0LT5FaDsKKwlyZWdpc3RlciBzcHhfd29yZDMyX3QgKiByZXN0cmljdCBwWWggPSBzdC0+WWg7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IGJldGEwID0gc3QtPmJldGEwOworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCBiZXRhX21heCA9IHN0LT5iZXRhX21heDsKKwlyZWdpc3RlciBzcHhfZmxvYXRfdCBhbHBoYSwgYWxwaGFfMTsKKwlyZWdpc3RlciBzcHhfd29yZDMyX3QgdG1wMzIsIHRtcHg7CisJcmVnaXN0ZXIgc3B4X2Zsb2F0X3Qgc1BleSA9IHN0LT5QZXk7CisJcmVnaXN0ZXIgc3B4X2Zsb2F0X3Qgc1B5eSA9IHN0LT5QeXk7CisJcmVnaXN0ZXIgc3B4X2Zsb2F0X3QgdG1wOworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCBsZWFrX2VzdGltYXRlOworCXJlZ2lzdGVyIGludCBqOworCXJlZ2lzdGVyIHNweF9mbG9hdF90ICBFaCwgWWg7CisJcmVnaXN0ZXIgc3B4X3dvcmQzMl90IF9FaGosIF9SZmosIF9ZZmosIF9ZaGo7CisKKyNpZmRlZiBGSVhFRF9QT0lOVAorCXJlZ2lzdGVyIHNweF93b3JkMTZfdCBzcGVjX2F2ZXJhZ2UxID0gU1VCMTYoMzI3Njcsc3BlY19hdmVyYWdlKTsKKyNlbHNlCisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IHNwZWNfYXZlcmFnZTEgPSAxIC0gc3BlY19hdmVyYWdlOworI2VuZGlmCisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWEVDSE9DQU5DRUxMQVRJT04pCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmICAKKwlmb3IgKGo9ZnJhbWVzaXplOyBqPjAgOyAtLWopCisJeworCQlfRWhqID0gcEVoW2pdOworCQlfUmZqID0gcFJmW2pdOworCQlfWWZqID0gcFlmW2pdOworCQlfWWhqID0gcFloW2pdOworCisJCUVoID0gUFNFVURPRkxPQVQoX1JmaiAtIF9FaGopOworCQlZaCA9IFBTRVVET0ZMT0FUKF9ZZmogLSBfWWhqKTsKKworCQlQZXkgPSBGTE9BVF9BREQoUGV5LEZMT0FUX01VTFQoRWgsWWgpKTsKKwkJUHl5ID0gRkxPQVRfQUREKFB5eSxGTE9BVF9NVUxUKFloLFloKSk7CisKKwkJcEVoW2pdID0gTUFDMTZfMzJfUTE1KE1VTFQxNl8zMl9RMTUoc3BlY19hdmVyYWdlMSwgX0VoaiksIHNwZWNfYXZlcmFnZSwgX1Jmaik7CisJCXBZaFtqXSA9IE1BQzE2XzMyX1ExNShNVUxUMTZfMzJfUTE1KHNwZWNfYXZlcmFnZTEsIF9ZaGopLCBzcGVjX2F2ZXJhZ2UsIF9ZZmopOworICAgfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYRUNIT0NBTkNFTExBVElPTikKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYgCisJX0VoaiA9IHBFaFswXTsKKwlfUmZqID0gcFJmWzBdOworCV9ZZmogPSBwWWZbMF07CisJX1loaiA9IHBZaFswXTsKKworCUVoID0gUFNFVURPRkxPQVQoX1JmaiAtIF9FaGopOworCVloID0gUFNFVURPRkxPQVQoX1lmaiAtIF9ZaGopOworCisJUGV5ID0gRkxPQVRfQUREKFBleSxGTE9BVF9NVUxUKEVoLFloKSk7CisJUHl5ID0gRkxPQVRfQUREKFB5eSxGTE9BVF9NVUxUKFloLFloKSk7CisKKwlwRWhbMF0gPSBNQUMxNl8zMl9RMTUoTVVMVDE2XzMyX1ExNShzcGVjX2F2ZXJhZ2UxLCBfRWhqKSwgc3BlY19hdmVyYWdlLCBfUmZqKTsKKwlwWWhbMF0gPSBNQUMxNl8zMl9RMTUoTVVMVDE2XzMyX1ExNShzcGVjX2F2ZXJhZ2UxLCBfWWhqKSwgc3BlY19hdmVyYWdlLCBfWWZqKTsKKworCVB5eSA9IEZMT0FUX1NRUlQoUHl5KTsKKwlQZXkgPSBGTE9BVF9ESVZVKFBleSxQeXkpOworCisJdG1wMzIgPSBNVUxUMTZfMzJfUTE1KGJldGEwLFN5eSk7CisJdG1weCA9IE1VTFQxNl8zMl9RMTUoYmV0YV9tYXgsU2VlKTsKKwl0bXAzMiA9IFZNVVgodG1wMzIgPiB0bXB4LCB0bXB4LCB0bXAzMik7CisJYWxwaGEgPSBGTE9BVF9ESVYzMih0bXAzMiwgU2VlKTsKKwlhbHBoYV8xID0gRkxPQVRfU1VCKEZMT0FUX09ORSwgYWxwaGEpOworICAgCisJc1BleSA9IEZMT0FUX0FERChGTE9BVF9NVUxUKGFscGhhXzEsc1BleSkgLCBGTE9BVF9NVUxUKGFscGhhLFBleSkpOworCXNQeXkgPSBGTE9BVF9BREQoRkxPQVRfTVVMVChhbHBoYV8xLHNQeXkpICwgRkxPQVRfTVVMVChhbHBoYSxQeXkpKTsgICAKKwl0bXAgPSBGTE9BVF9NVUxUKE1JTl9MRUFLLHNQeXkpOworCisjaWZuZGVmIEZJWEVEX1BPSU5UCisJc1B5eSA9IFZNVVgoRkxPQVRfTFQoc1B5eSwgRkxPQVRfT05FKSwgRkxPQVRfT05FLCBzUHl5KTsKKwlzUGV5ID0gVk1VWChGTE9BVF9MVChzUGV5LCB0bXApLCB0bXAsIHNQZXkpOworCXNQZXkgPSBWTVVYKEZMT0FUX0xUKHNQZXksIHNQeXkpLCBzUGV5LCBzUHl5KTsgCisjZWxzZQorCXNQeXkgPSBGTE9BVF9MVChzUHl5LCBGTE9BVF9PTkUpID8gRkxPQVRfT05FIDogc1B5eTsKKwlzUGV5ID0gRkxPQVRfTFQoc1BleSwgdG1wKSA/IHRtcCA6IHNQZXk7CisJc1BleSA9IEZMT0FUX0xUKHNQZXksIHNQeXkpID8gc1BleSA6IHNQeXk7IAorI2VuZGlmCisJCisJbGVha19lc3RpbWF0ZSA9IEZMT0FUX0VYVFJBQ1QxNihGTE9BVF9TSEwoRkxPQVRfRElWVShzUGV5LCBzUHl5KSwxNCkpOworCisJbGVha19lc3RpbWF0ZSA9IFZNVVgoIGxlYWtfZXN0aW1hdGUgPiAxNjM4MywgMzI3NjcsIFNITDE2KGxlYWtfZXN0aW1hdGUsMSkpOworCXN0LT5QZXkgPSBzUGV5OworCXN0LT5QeXkgPSBzUHl5OworCXN0LT5sZWFrX2VzdGltYXRlID0gbGVha19lc3RpbWF0ZTsKK30KKworaW5saW5lIHNweF93b3JkMTZfdCBtZGZfY29tcHV0ZV9SRVIoCisgCXNweF93b3JkMzJfdCBTZWUsCisJc3B4X3dvcmQzMl90IFN5eSwKKwlzcHhfd29yZDMyX3QgU2V5LAorCXNweF93b3JkMzJfdCBTeHgsCisJc3B4X3dvcmQxNl90IGxlYWtlCispCit7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IFJFUjsKKworI2lmZGVmIEZJWEVEX1BPSU5UCisJcmVnaXN0ZXIgc3B4X3dvcmQzMl90IHRtcDMyOworCXJlZ2lzdGVyIHNweF93b3JkMzJfdCB0bXA7CisJc3B4X2Zsb2F0X3QgYm91bmQgPSBQU0VVRE9GTE9BVChTZXkpOworCSAgICAgIAorCXRtcDMyID0gTVVMVDE2XzMyX1ExNShsZWFrZSxTeXkpOworCXRtcDMyID0gQUREMzIoU0hSMzIoU3h4LDEzKSwgQUREMzIodG1wMzIsIFNITDMyKHRtcDMyLDEpKSk7CisgICAKKwlib3VuZCA9IEZMT0FUX0RJVlUoRkxPQVRfTVVMVChib3VuZCwgYm91bmQpLCBQU0VVRE9GTE9BVChBREQzMigxLFN5eSkpKTsKKwl0bXAgICA9IEZMT0FUX0VYVFJBQ1QzMihib3VuZCk7CisJdG1wMzIgPSBpbXV4KCBGTE9BVF9HVChib3VuZCwgUFNFVURPRkxPQVQoU2VlKSksIFNlZSwKKwkJCWltdXgoIHRtcDMyIDwgdG1wLCAgdG1wLCB0bXAzMikpOworCisJdG1wICAgPSBTSFIzMihTZWUsMSk7CisJdG1wMzIgPSBpbXV4KHRtcDMyID4gdG1wLCB0bXAsIHRtcDMyKTsKKwlSRVIgICA9IEZMT0FUX0VYVFJBQ1QxNihGTE9BVF9TSEwoRkxPQVRfRElWMzIodG1wMzIsU2VlKSwxNSkpOworI2Vsc2UKKwlyZWdpc3RlciBzcHhfd29yZDMyX3QgcjA7CisKKwlyMCA9IChTZXkgKiBTZXkpLygxICsgU2VlICogU3l5KTsKKworCVJFUiA9ICguMDAwMSpTeHggKyAzLiogTVVMVDE2XzMyX1ExNShsZWFrZSxTeXkpKSAvIFNlZTsKKwlSRVIgPSBmbXV4KCBSRVIgPCByMCwgcjAsIFJFUik7CisJUkVSID0gZm11eCggUkVSID4gLjUsIC41LCBSRVIpOworI2VuZGlmCisKKwlyZXR1cm4gUkVSOworfQorCit2b2lkIG1kZl9hZGFwdCgKKyAJU3BlZXhFY2hvU3RhdGUgKiByZXN0cmljdCBzdCwKKwlzcHhfd29yZDE2X3QgUkVSLAorCXNweF93b3JkMzJfdCBTeXksCisJc3B4X3dvcmQzMl90IFNlZSwgCisJc3B4X3dvcmQzMl90IFN4eAorKQoreworCXJlZ2lzdGVyIHNweF9mbG9hdF90ICAqIHJlc3RyaWN0IHBvd2VyXzEgPSBzdC0+cG93ZXJfMTsKKwlyZWdpc3RlciBzcHhfd29yZDMyX3QgICogcmVzdHJpY3QgcG93ZXIgPSBzdC0+cG93ZXI7CisJcmVnaXN0ZXIgaW50IGFkYXB0ZWQgPSBzdC0+YWRhcHRlZDsKKwlyZWdpc3RlciBzcHhfd29yZDMyX3Qgc3VtX2FkYXB0ID0gc3QtPnN1bV9hZGFwdDsKKwlyZWdpc3RlciBzcHhfd29yZDE2X3QgbGVha2UgPSBzdC0+bGVha19lc3RpbWF0ZTsKKwlyZWdpc3RlciBpbnQgZnJhbWVzaXplID0gc3QtPmZyYW1lX3NpemU7CisJcmVnaXN0ZXIgaW50IGk7CisJcmVnaXN0ZXIgaW50IE0gPSBzdC0+TTsKKworCWFkYXB0ZWQgPSBtdXgoICFhZGFwdGVkICYmIHN1bV9hZGFwdCA+IFFDT05TVDMyKE0sMTUpICYmIAorCQkJCQlNVUxUMTZfMzJfUTE1KGxlYWtlLFN5eSkgPiBNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC4wM2YsMTUpLFN5eSksIDEsIGFkYXB0ZWQpOworCisJaWYgKCBhZGFwdGVkICkKKwl7CXJlZ2lzdGVyIHNweF93b3JkMzJfdCAqIHJlc3RyaWN0IFlmID0gc3QtPllmOyAKKwkJcmVnaXN0ZXIgc3B4X3dvcmQzMl90ICogcmVzdHJpY3QgUmYgPSBzdC0+UmY7CisJCXJlZ2lzdGVyIHNweF93b3JkMzJfdCByLCBlLCBlMjsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYRUNIT0NBTkNFTExBVElPTikKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYgIAorCQlmb3IgKCBpPTAgOyBpPGZyYW1lc2l6ZSA7ICsraSApCisJCXsJCisJCQlyID0gU0hMMzIoWWZbaV0sMyk7CisJCQlyID0gTVVMVDE2XzMyX1ExNShsZWFrZSxyKTsKKwkJCWUgPSBTSEwzMihSZltpXSwzKSsxOworCisjaWZkZWYgRklYRURfUE9JTlQKKwkJCWUyID0gU0hSMzIoZSwxKTsKKwkJCXIgPSBtdXgoIHIgPiBlMiwgZTIsIHIpOworI2Vsc2UKKwkJCWUyID0gZSAqIC41OworCQkJciA9IGZtdXgoIHIgPiBlMiwgZTIsIHIpOworI2VuZGlmCisKKwkJCXIgPSBNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC43LDE1KSxyKSArIAorCQkJCU1VTFQxNl8zMl9RMTUoUUNPTlNUMTYoLjMsMTUpLChzcHhfd29yZDMyX3QpKE1VTFQxNl8zMl9RMTUoUkVSLGUpKSk7CisKKwkJCXBvd2VyXzFbaV0gPSBGTE9BVF9TSEwoRkxPQVRfRElWMzJfRkxPQVQocixGTE9BVF9NVUwzMlUoZSxwb3dlcltpXSsxMCkpLFdFSUdIVF9TSElGVCsxNik7CisJCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWEVDSE9DQU5DRUxMQVRJT04pCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmIAorCQkKKwkJciA9IFNITDMyKFlmW2ZyYW1lc2l6ZV0sMyk7CisJCXIgPSBNVUxUMTZfMzJfUTE1KGxlYWtlLHIpOworCQllID0gU0hMMzIoUmZbZnJhbWVzaXplXSwzKSsxOworCisjaWZkZWYgRklYRURfUE9JTlQKKwkJZTIgPSBTSFIzMihlLDEpOworCQlyID0gbXV4KCByID4gZTIsIGUyLCByKTsKKyNlbHNlCisJCWUyID0gZSAqIC41OworCQlyID0gZm11eCggciA+IGUyLCBlMiwgcik7CisjZW5kaWYKKworCQlyID0gTVVMVDE2XzMyX1ExNShRQ09OU1QxNiguNywxNSkscikgKyAKKwkJCU1VTFQxNl8zMl9RMTUoUUNPTlNUMTYoLjMsMTUpLChzcHhfd29yZDMyX3QpKE1VTFQxNl8zMl9RMTUoUkVSLGUpKSk7CisKKwkJcG93ZXJfMVtmcmFtZXNpemVdID0gRkxPQVRfU0hMKEZMT0FUX0RJVjMyX0ZMT0FUKHIsRkxPQVRfTVVMMzJVKGUscG93ZXJbZnJhbWVzaXplXSsxMCkpLFdFSUdIVF9TSElGVCsxNik7CisKKwl9IGVsc2UgCisJeworCQlyZWdpc3RlciBzcHhfd29yZDE2X3QgYWRhcHRfcmF0ZT0wOworCQlyZWdpc3RlciBpbnQgTiA9IHN0LT53aW5kb3dfc2l6ZTsKKworCQlpZiAoIFN4eCA+IFNIUjMyKE1VTFQxNl8xNihOLCAxMDAwKSw2KSApIAorCQl7CXJlZ2lzdGVyIHNweF93b3JkMzJfdCB0bXAzMiwgdG1wMzJxOworICAgICAgICAgCisJCQl0bXAzMiA9IE1VTFQxNl8zMl9RMTUoUUNPTlNUMTYoLjI1ZiwgMTUpLCBTeHgpOworI2lmZGVmIEZJWEVEX1BPSU5UCisJCQl0bXAzMnEgPSBTSFIzMihTZWUsMik7CisJCQl0bXAzMiAgPSBtdXgodG1wMzIgPiB0bXAzMnEsIHRtcDMycSwgdG1wMzIpOworI2Vsc2UKKwkJCXRtcDMycSA9IDAuMjUgKiBTZWU7CisJCQl0bXAzMiA9IGZtdXgodG1wMzIgPiB0bXAzMnEsIHRtcDMycSwgdG1wMzIpOworI2VuZGlmCisJCQlhZGFwdF9yYXRlID0gRkxPQVRfRVhUUkFDVDE2KEZMT0FUX1NITChGTE9BVF9ESVYzMih0bXAzMiwgU2VlKSwxNSkpOworCQl9CisgICAgICAKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWEVDSE9DQU5DRUxMQVRJT04pCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmICAJCQorCQlmb3IgKGk9MDtpPGZyYW1lc2l6ZTtpKyspCisJCQlwb3dlcl8xW2ldID0gRkxPQVRfU0hMKEZMT0FUX0RJVjMyKEVYVEVORDMyKGFkYXB0X3JhdGUpLEFERDMyKHBvd2VyW2ldLDEwKSksV0VJR0hUX1NISUZUKzEpOworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYRUNIT0NBTkNFTExBVElPTikKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYgCisJCXBvd2VyXzFbZnJhbWVzaXplXSA9IEZMT0FUX1NITChGTE9BVF9ESVYzMihFWFRFTkQzMihhZGFwdF9yYXRlKSxBREQzMihwb3dlcltmcmFtZXNpemVdLDEwKSksV0VJR0hUX1NISUZUKzEpOworCQlzdW1fYWRhcHQgPSBBREQzMihzdW1fYWRhcHQsYWRhcHRfcmF0ZSk7CisJfQorCQorCXN0LT5zdW1fYWRhcHQgPSBzdW1fYWRhcHQ7CisJc3QtPmFkYXB0ZWQgPSBhZGFwdGVkOworfQorCisjZGVmaW5lIE9WRVJSSURFX0VDSE9fQ0FOQ0VMTEFUSU9OCit2b2lkIHNwZWV4X2VjaG9fY2FuY2VsbGF0aW9uKAorCVNwZWV4RWNob1N0YXRlICogcmVzdHJpY3Qgc3QsIAorCWNvbnN0IHNweF9pbnQxNl90ICogcmVzdHJpY3QgaW4sIAorCWNvbnN0IHNweF9pbnQxNl90ICogcmVzdHJpY3QgZmFyX2VuZCwgCisJc3B4X2ludDE2X3QgKiByZXN0cmljdCBvdXQKKykKK3sgCisgICAJcmVnaXN0ZXIgaW50IGZyYW1lc2l6ZSA9IHN0LT5mcmFtZV9zaXplOworICAgCXJlZ2lzdGVyIHNweF93b3JkMTZfdCAqIHJlc3RyaWN0IHggPSBzdC0+eDsKKwlyZWdpc3RlciBzcHhfd29yZDE2X3QgKiByZXN0cmljdCB4eCA9IHN0LT54ICsgZnJhbWVzaXplOworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCAqIHJlc3RyaWN0IHl5ID0gc3QtPnkgKyBmcmFtZXNpemU7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgZWUgPSBzdC0+ZSArIGZyYW1lc2l6ZTsKKwlyZWdpc3RlciBzcHhfd29yZDMyX3QgU3l5LCBTZWUsIFN4eCwgU2RkLCBTZmY7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IFJFUjsKKwlyZWdpc3RlciBzcHhfd29yZDMyX3QgU2V5OworCXJlZ2lzdGVyIGludCBqOworCXJlZ2lzdGVyIGludCBOLE07CisjaWZkZWYgVFdPX1BBVEgKKwlyZWdpc3RlciBzcHhfd29yZDMyX3QgRGJmOworI2VuZGlmCisKKwlOID0gc3QtPndpbmRvd19zaXplOworCU0gPSBzdC0+TTsKKwlzdC0+Y2FuY2VsX2NvdW50Kys7CisKKwlmaWx0ZXJfZGNfbm90Y2gxNihpbiwgc3QtPm5vdGNoX3JhZGl1cywgc3QtPmlucHV0LCBmcmFtZXNpemUsIHN0LT5ub3RjaF9tZW0pOworCW1kZl9wcmVlbXBoKHN0LCB4eCwgZmFyX2VuZCwgZnJhbWVzaXplKTsKKyAgIAorICAgCXsKKworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCAqIHJlc3RyaWN0IFggPSBzdC0+WDsKKworCWZvciAoIGo9TS0xIDsgaj49MCA7IGotLSApCisJewlyZWdpc3RlciBzcHhfd29yZDE2X3QgKiByZXN0cmljdCBYZGVzID0gJihYWyhqKzEpKk5dKTsKKwkJcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgWHNyYyA9ICYoWFtqKk5dKTsKKworCQltZW1jcHkoWGRlcywgWHNyYywgTiAqIHNpemVvZihzcHhfd29yZDE2X3QpKTsKKwl9CisKKwlzcHhfZmZ0KHN0LT5mZnRfdGFibGUsIHgsIFgpOworCW1lbWNweShzdC0+bGFzdF95LCBzdC0+eCwgTiAqIHNpemVvZihzcHhfd29yZDE2X3QpKTsKKwlTeHggPSBtZGZfaW5uZXJfcHJvZCh4eCwgeHgsIGZyYW1lc2l6ZSk7CisJbWVtY3B5KHgsIHh4LCBmcmFtZXNpemUgKiBzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisJCisjaWZkZWYgVFdPX1BBVEgKKwlzcGVjdHJhbF9tdWxfYWNjdW0oc3QtPlgsIHN0LT5mb3JlZ3JvdW5kLCBzdC0+WSwgTiwgTSk7ICAgCisJc3B4X2lmZnQoc3QtPmZmdF90YWJsZSwgc3QtPlksIHN0LT5lKTsKKwltZGZfc3ViKHh4LCBzdC0+aW5wdXQsIGVlLCBmcmFtZXNpemUpOworCVNmZiA9IG1kZl9pbm5lcl9wcm9kKHh4LCB4eCwgZnJhbWVzaXplKTsKKyNlbmRpZgorICAgCisJbWRmX2FkanVzdF9wcm9wIChzdC0+VywgTiwgTSwgc3QtPnByb3ApOworICAKKwlpZiAoc3QtPnNhdHVyYXRlZCA9PSAwKQorCXsJbWRmX2NvbXB1dGVfd2VpZ2h0X2dyYWRpZW50KHN0LCBYLCBOLCBNKTsKKwl9IGVsc2UgCisJewlzdC0+c2F0dXJhdGVkLS07CisJfQorCX0KKworCW1kZl91cGRhdGVfd2VpZ2h0KHN0LCBOLCBNLCBmcmFtZXNpemUpOworCXNwZWN0cmFsX211bF9hY2N1bShzdC0+WCwgc3QtPlcsIHN0LT5ZLCBOLCBNKTsKKwlzcHhfaWZmdChzdC0+ZmZ0X3RhYmxlLCBzdC0+WSwgc3QtPnkpOworCisjaWZkZWYgVFdPX1BBVEgKKwltZGZfc3ViKHh4LCBlZSwgeXksIGZyYW1lc2l6ZSk7ICAgCisJRGJmID0gMTArbWRmX2lubmVyX3Byb2QoeHgsIHh4LCBmcmFtZXNpemUpOworI2VuZGlmCisKKwltZGZfc3ViKHh4LCBzdC0+aW5wdXQsIHl5LCBmcmFtZXNpemUpOworCVNlZSA9IG1kZl9pbm5lcl9wcm9kKHh4LCB4eCwgZnJhbWVzaXplKTsKKworI2lmbmRlZiBUV09fUEFUSAorCVNmZiA9IFNlZTsKKyNlbHNlCisJU2VlID0gbWRmX3VwZGF0ZV9mb3JlZ3JvdW5kKHN0LERiZixTZmYsU2VlKTsKKyNlbmRpZgorCisJCisJbWRmX2NvbXB1dGVfZXJyb3Jfc2lnbmFsKHN0LCBpbiwgb3V0LCBmcmFtZXNpemUpOworCVNleSA9IG1kZl9pbm5lcl9wcm9kKGVlLCB5eSwgZnJhbWVzaXplKTsKKwlTeXkgPSBtZGZfaW5uZXJfcHJvZCh5eSwgeXksIGZyYW1lc2l6ZSk7CisJU2RkID0gbWRmX2lubmVyX3Byb2Qoc3QtPmlucHV0LCBzdC0+aW5wdXQsIGZyYW1lc2l6ZSk7CisgICAKKwlpZiAoIG1kZl9jaGVjayhzdCxvdXQsU3l5LFN4eCxTZWUsU2ZmLFNkZCkgPj0gNTAgKQorCXsJc3BlZXhfd2FybmluZygiVGhlIGVjaG8gY2FuY2VsbGVyIHN0YXJ0ZWQgYWN0aW5nIGZ1bm55IGFuZCBnb3Qgc2xhcHBlZCAocmVzZXQpLiBJdCBzd2VhcnMgaXQgd2lsbCBiZWhhdmUgbm93LiIpOworCQlzcGVleF9lY2hvX3N0YXRlX3Jlc2V0KHN0KTsKKwkJcmV0dXJuOworCX0KKworCVNlZSA9IE1BWDMyKFNlZSwgU0hSMzIoTVVMVDE2XzE2KE4sIDEwMCksNikpOworCXNweF9mZnQoc3QtPmZmdF90YWJsZSwgc3QtPmUsIHN0LT5FKTsKKwltZW1zZXQoc3QtPnksIDAsIGZyYW1lc2l6ZSAqIHNpemVvZihzcHhfd29yZDE2X3QpKTsKKwlzcHhfZmZ0KHN0LT5mZnRfdGFibGUsIHN0LT55LCBzdC0+WSk7CisJcG93ZXJfc3BlY3RydW0oc3QtPkUsIHN0LT5SZiwgTik7CisJcG93ZXJfc3BlY3RydW0oc3QtPlksIHN0LT5ZZiwgTik7CisJcG93ZXJfc3BlY3RydW0oc3QtPlgsIHN0LT5YZiwgTik7CisKKwltZGZfc21vb3RoKHN0LT5wb3dlcixzdC0+WGYsZnJhbWVzaXplLCBNKTsKKwltZGZfY29tcHV0ZV9maWx0ZXJlZF9zcGVjdHJhX2Nyb3NzY29ycmVsYXRpb25zKHN0LFN5eSxTZWUsZnJhbWVzaXplKTsKKwlSRVIgPSBtZGZfY29tcHV0ZV9SRVIoU2VlLFN5eSxTZXksU3h4LHN0LT5sZWFrX2VzdGltYXRlKTsKKwltZGZfYWRhcHQoc3QsIFJFUiwgU3l5LCBTZWUsIFN4eCk7CisJCisJaWYgKCBzdC0+YWRhcHRlZCApCisJewlyZWdpc3RlciBzcHhfd29yZDE2X3QgKiByZXN0cmljdCBsYXN0X3l5ID0gc3QtPmxhc3RfeSArIGZyYW1lc2l6ZTsKKwkJCisJCW1lbWNweShzdC0+bGFzdF95LCBsYXN0X3l5LCBmcmFtZXNpemUgKiBzaXplb2Yoc3B4X3dvcmQxNl90KSk7CisJCW1kZl9zdWJfaW50KGxhc3RfeXksIGluLCBvdXQsIGZyYW1lc2l6ZSk7CisKKwl9Cit9CisKKworCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC90bXYvbWlzY190bS5oIGIvM3JkcGFydHkvc3BlZXgvdG12L21pc2NfdG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGQxMmVkCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvdG12L21pc2NfdG0uaApAQCAtMCwwICsxLDkyIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9uZyBaaGlxaWFuICovCisvKioKKyAgIEBmaWxlIG1pc2NfdG0uaAorICAgQGF1dGhvciBIb25nIFpoaXFpYW4KKyAgIEBicmllZiBWYXJpb3VzIGNvbXBhdGliaWxpdHkgcm91dGluZXMgZm9yIFNwZWV4IChUcmlNZWRpYSB2ZXJzaW9uKQorKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisjaW5jbHVkZSA8dG1tbC5oPgorCisKKyNpZiBUTV9QUk9GSUxFCitpbnQgX19wcm9maWxlX2JlZ2luOworaW50IF9fcHJvZmlsZV9lbmQ7CisjZW5kaWYKKworI2RlZmluZSBPVkVSUklERV9TUEVFWF9BTExPQwordm9pZCAqc3BlZXhfYWxsb2MgKGludCBzaXplKQoreworCXZvaWQgKnB0cjsKKworCWlmICggdG1tbE1hbGxvYygwLCBzaXplLCAocFZvaWQqKSZwdHIsIHRtbWxNYWxsb2NDYWNoZUFsaWduZWQgfCB0bW1sTWFsbG9jQ2xlYXJlZCkgIT0gVE1fT0sgKQorCXsJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHB0cjsKK30KKworCisjZGVmaW5lIE9WRVJSSURFX1NQRUVYX0FMTE9DX1NDUkFUQ0gKK3ZvaWQgKnNwZWV4X2FsbG9jX3NjcmF0Y2ggKGludCBzaXplKQoreworCXZvaWQgKnB0cjsKKworCWlmICggdG1tbE1hbGxvYygwLCBzaXplLCAocFZvaWQqKSZwdHIsIHRtbWxNYWxsb2NDYWNoZUFsaWduZWQgfCB0bW1sTWFsbG9jQ2xlYXJlZCkgIT0gVE1fT0sgKQorCXsJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHB0cjsKK30KKworCisjZGVmaW5lIE9WRVJSSURFX1NQRUVYX1JFQUxMT0MKK3ZvaWQgKnNwZWV4X3JlYWxsb2MgKHZvaWQgKnB0ciwgaW50IHNpemUpCit7CisJaWYgKCB0bW1sUmVhbGxvYygwLCBzaXplLCAocFZvaWQpcHRyLCAocFZvaWQqKSZwdHIsIHRtbWxNYWxsb2NDYWNoZUFsaWduZWQgfCB0bW1sTWFsbG9jQ2xlYXJlZCkgIT0gVE1fT0sgKQorCXsJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHB0cjsKK30KKworCisjZGVmaW5lIE9WRVJSSURFX1NQRUVYX0ZSRUUKK3ZvaWQgc3BlZXhfZnJlZSAodm9pZCAqcHRyKQoreworCXRtbWxGcmVlKHB0cik7Cit9CisKKworI2RlZmluZSBPVkVSUklERV9TUEVFWF9GUkVFX1NDUkFUQ0gKK3ZvaWQgc3BlZXhfZnJlZV9zY3JhdGNoICh2b2lkICpwdHIpCit7CisJdG1tbEZyZWUocHRyKTsKK30KKwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvdG12L3ByZXByb2Nlc3NfdG0uaCBiLzNyZHBhcnR5L3NwZWV4L3Rtdi9wcmVwcm9jZXNzX3RtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZlMDIxMgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3Rtdi9wcmVwcm9jZXNzX3RtLmgKQEAgLTAsMCArMSwxMTM1IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9uZyBaaGlxaWFuICovCisvKioKKyAgIEBmaWxlIHByZXByb2Nlc3NfdG0uaAorICAgQGF1dGhvciBIb25nIFpoaXFpYW4KKyAgIEBicmllZiBWYXJpb3VzIGNvbXBhdGliaWxpdHkgcm91dGluZXMgZm9yIFNwZWV4IChUcmlNZWRpYSB2ZXJzaW9uKQorKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisjaW5jbHVkZSA8b3BzL2N1c3RvbV9kZWZzLmg+CisjaW5jbHVkZSAicHJvZmlsZV90bS5oIgorCisjaWZkZWYgRklYRURfUE9JTlQKKyNkZWZpbmUgT1ZFUlJJREVfUFJFUFJPQ0VTU19BTkFMWVNJUworc3RhdGljIHZvaWQgcHJlcHJvY2Vzc19hbmFseXNpcyhTcGVleFByZXByb2Nlc3NTdGF0ZSAqIHJlc3RyaWN0IHN0LCBzcHhfaW50MTZfdCAqIHJlc3RyaWN0IHgpCit7CisJcmVnaXN0ZXIgaW50IGksIGosIGZyYW1lc2l6ZSA9IHN0LT5mcmFtZV9zaXplOworCXJlZ2lzdGVyIGludCBOID0gc3QtPnBzX3NpemU7CisJcmVnaXN0ZXIgaW50IE4zID0gMipOIC0gZnJhbWVzaXplOworCXJlZ2lzdGVyIGludCBONCA9IGZyYW1lc2l6ZSAtIE4zOworCXJlZ2lzdGVyIGludCAqIHJlc3RyaWN0IHBzID0gc3QtPnBzOworCXJlZ2lzdGVyIGludCAqIHJlc3RyaWN0IGZyYW1lOworCXJlZ2lzdGVyIGludCAqIHJlc3RyaWN0IGluYnVmOworCXJlZ2lzdGVyIGludCAqIHJlc3RyaWN0IHB0cjsKKwlyZWdpc3RlciBpbnQgbWF4X3ZhbDsKKworCWZyYW1lID0gKGludCopKHN0LT5mcmFtZSk7CisJaW5idWYgPSAoaW50Kikoc3QtPmluYnVmKTsKKwlwdHIgPSAoaW50Kikoc3QtPmZyYW1lK04zKTsKKworCVRNREVCVUdfQUxJR05NRU0oeCk7CisgICAJVE1ERUJVR19BTElHTk1FTShmcmFtZSk7CisJVE1ERUJVR19BTElHTk1FTShpbmJ1Zik7CisKKwlQUkVQUk9DRVNTQU5BWUxTSVNfU1RBUlQoKTsKKworCU4zID4+PSAxOworCWZyYW1lc2l6ZSA+Pj0gMTsKKwltYXhfdmFsID0gMDsKKwkKKwlmb3IgKCBpPTAsaj0wIDsgaTxOMyA7IGkrPTIsais9OCApCisJewlyZWdpc3RlciBpbnQgcjEsIHIyOworCisJCXIxID0gbGQzMngoaW5idWYsaSk7CisJCXIyID0gbGQzMngoaW5idWYsaSsxKTsKKworCQlzdDMyZChqLCAgIGZyYW1lLCByMSk7CisJCXN0MzJkKGorNCwgZnJhbWUsIHIyKTsKKwl9CisKKwlmb3IgKCBpPTAsaj0wIDsgaTxmcmFtZXNpemUgOyBpKz0yLGorPTggKQorCXsJcmVnaXN0ZXIgaW50IHIxLCByMjsKKworCQlyMSA9IGxkMzJ4KHgsIGkpOworCQlyMiA9IGxkMzJ4KHgsIGkrMSk7CisKKwkJc3QzMmQoaiwgIHB0ciwgcjEpOworCQlzdDMyZChqKzQscHRyLCByMik7CisJfQorICAgCisJZm9yICggaT0wLGo9MCxwdHI9KGludCopKHgrTjQpIDsgaTxOMyA7IGkrPTIsais9OCApCisJewlyZWdpc3RlciBpbnQgcjEsIHIyOworCisJCXIxID0gbGQzMngocHRyLCBpKTsKKwkJcjIgPSBsZDMyeChwdHIsIGkrMSk7CisKKwkJc3QzMmQoaiwgIGluYnVmLCByMSk7CisJCXN0MzJkKGorNCxpbmJ1ZiwgcjIpOworCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9QUkVQUk9DRVNTQU5BTFlTSVMpCisjcHJhZ21hIFRDU191bnJvbGw9MgorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisgICBmb3IgKCBpPTAsaj0wLHB0cj0oaW50KilzdC0+d2luZG93IDsgaTxOIDsgKytpLGorPTQgKQorICAgewlyZWdpc3RlciBpbnQgZjEwLCB3MTAsIHIwLCByMTsKKworCQlmMTAgPSBsZDMyeChmcmFtZSwgaSk7CisJCXcxMCA9IGxkMzJ4KHB0ciwgICBpKTsKKworCQlyMCAgPSAoc2V4MTYoZjEwKSAqIHNleDE2KHcxMCkpID4+IDE1OworCQlyMQk9IChhc3JpKDE2LGYxMCkgKiBhc3JpKDE2LHcxMCkpID4+IDE1OworCisJCW1heF92YWwgPSBpbWF4KGlhYnMoc2V4MTYocjApKSwgbWF4X3ZhbCk7CisJCW1heF92YWwgPSBpbWF4KGlhYnMoc2V4MTYocjEpKSwgbWF4X3ZhbCk7CisKKwkJcjAJPSBwYWNrMTZsc2IocjEsIHIwKTsKKwkJc3QzMmQoaiwgZnJhbWUsIHIwKTsKKwl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfUFJFUFJPQ0VTU0FOQUxZU0lTKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorICAgCisJbWF4X3ZhbCA9IDE0IC0gc3B4X2lsb2cyKG1heF92YWwpOworCXN0LT5mcmFtZV9zaGlmdCA9IG1heF92YWw7CisKKwlpZiAoIG1heF92YWwgIT0gMCApCisJeworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1BSRVBST0NFU1NBTkFMWVNJUykKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwkJZm9yICggaT0wLGo9MCA7IGk8TiA7ICsraSxqKz00ICkKKwkJewlyZWdpc3RlciBpbnQgZjEwOworCisJCQlmMTAgPSBsZDMyeChmcmFtZSwgaSk7CisJCQlmMTAgPSBkdWFsYXNsKGYxMCwgbWF4X3ZhbCk7CisJCQlzdDMyZChqLCBmcmFtZSwgZjEwKTsKKworCQl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfUFJFUFJPQ0VTU0FOQUxZU0lTKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorCX0KKworCXNweF9mZnQoc3QtPmZmdF9sb29rdXAsIHN0LT5mcmFtZSwgc3QtPmZ0KTsgICAgIAorCXBvd2VyX3NwZWN0cnVtKHN0LT5mdCwgcHMsIE4gPDwgMSk7CisgICAKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9QUkVQUk9DRVNTQU5BTFlTSVMpCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisJZm9yICggaT0wLHB0cj0oaW50KilzdC0+cHMsbWF4X3ZhbDw8PTEsaj0oKDE8PCgobWF4X3ZhbCkpPj4xKSkgO2k8TiA7ICsraSApCisJewkKKwkJcHNbaV0gPSAocHNbaV0gKyBqKSA+PiBtYXhfdmFsOworCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9QUkVQUk9DRVNTQU5BTFlTSVMpCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisKKwlmaWx0ZXJiYW5rX2NvbXB1dGVfYmFuazMyKHN0LT5iYW5rLCBwcywgcHMrTik7CisKKwlQUkVQUk9DRVNTQU5BWUxTSVNfU1RPUCgpOworfQorCisjZGVmaW5lIF9NVUxUMTZfMzJfUTE1KGEsYixjKSBBREQzMihNVUxUMTZfMTYoKGEpLChiKSksIFNIUihNVUxUMTZfMTYoKGEpLChjKSksMTUpKQorCisjZGVmaW5lIE9WRVJSSURFX1VQREFURV9OT0lTRV9QUk9CCitzdGF0aWMgdm9pZCB1cGRhdGVfbm9pc2VfcHJvYihTcGVleFByZXByb2Nlc3NTdGF0ZSAqIHJlc3RyaWN0IHN0KQoreworCXJlZ2lzdGVyIGludCBpOworCXJlZ2lzdGVyIGludCBtaW5fcmFuZ2UsIG5iX2FkYXB0OworCXJlZ2lzdGVyIGludCBOID0gc3QtPnBzX3NpemU7CisJcmVnaXN0ZXIgaW50ICogcmVzdHJpY3QgU21pbiA9IChpbnQqKXN0LT5TbWluOworCXJlZ2lzdGVyIGludCAqIHJlc3RyaWN0IFN0bXAgPSAoaW50KilzdC0+U3RtcDsKKwlyZWdpc3RlciBpbnQgKiByZXN0cmljdCBTID0gKGludCopc3QtPlM7CisJCisJVVBEQVRFTk9JU0VQUk9CX1NUQVJUKCk7CisKKwl7CisJCXJlZ2lzdGVyIGludCBwc2lfbHNiLCBwc2lfbXNiLCBpcHNfbHNiLCBpcHNfbXNiLCBwc2lpX2xzYiwgcHNpaV9tc2I7CisJCXJlZ2lzdGVyIGludCBwc2lpaV9sc2IsIHBzaWlpX21zYjsKKwkJcmVnaXN0ZXIgaW50IHE4LCBxMDUsIHEyLCBxMTsKKwkJcmVnaXN0ZXIgaW50ICpwcyA9IChpbnQqKXN0LT5wczsKKwkJcmVnaXN0ZXIgaW50IHNpX2xzYiwgc2lfbXNiLCBzaWlfbHNiLCBzaWlfbXNiOworCQorCQlxOAk9IFFDT05TVDE2KC44ZiwxNSk7CisJCXEwNSA9IFFDT05TVDE2KC4wNWYsMTUpOworCQlxMgk9IFFDT05TVDE2KC4yZiwxNSk7CisJCXExCT0gUUNPTlNUMTYoLjFmLDE1KTsKKworCQlpcHNfbHNiCSA9IHBzWzBdOworCQlwc2lfbHNiCSA9IHBzWzFdOworCQlzaV9sc2IJID0gU1swXTsKKwkJaXBzX21zYgkgPSBpcHNfbHNiID4+IDE1OworCQlwc2lfbXNiCSA9IHBzaV9sc2IgPj4gMTU7CisJCXNpX21zYgkgPSBzaV9sc2IgPj4gMTU7CisKKwkJaXBzX2xzYgkgJj0gMHgwMDAwN2ZmZjsKKwkJcHNpX2xzYgkgJj0gMHgwMDAwN2ZmZjsKKwkJc2lfbHNiCSAmPSAweDAwMDA3ZmZmOworCQkKKwkJU1swXSA9IF9NVUxUMTZfMzJfUTE1KHE4LHNpX21zYixzaV9sc2IpICsgIF9NVUxUMTZfMzJfUTE1KHEyLGlwc19tc2IsaXBzX2xzYik7CisKKwkJZm9yICggaT0xIDsgaTxOLTEgOyBpKz0yICkKKwkJeworCQkJcHNpaV9sc2IgPSBwc1tpKzFdOworCQkJc2lfbHNiCSA9IFNbaV07CisKKwkJCXBzaWlfbXNiID0gcHNpaV9sc2IgPj4gMTU7CisJCQlzaV9tc2IJID0gc2lfbHNiID4+IDE1OworCQkJc2lfbHNiCSAmPSAweDAwMDA3ZmZmOworCQkJcHNpaV9sc2IgJj0gMHgwMDAwN2ZmZjsKKworCQkJU1tpXT0gX01VTFQxNl8zMl9RMTUocTgsc2lfbXNiLHNpX2xzYikgKyAKKwkJCQkgIF9NVUxUMTZfMzJfUTE1KHEwNSxpcHNfbXNiLGlwc19sc2IpICsgCisJCQkJICBfTVVMVDE2XzMyX1ExNShxMSxwc2lfbXNiLHBzaV9sc2IpICsgCisJCQkJICBfTVVMVDE2XzMyX1ExNShxMDUscHNpaV9tc2IscHNpaV9sc2IpOworCQkJCisJCQlwc2lpaV9sc2IgPSBwc1tpKzJdOworCQkJc2lpX2xzYgkgPSBTW2krMV07CisKKwkJCXNpaV9tc2IJID0gIHNpaV9sc2IgPj4gMTU7CisJCQlwc2lpaV9tc2I9ICBwc2lpaV9sc2IgPj4gMTU7CisJCQlzaWlfbHNiCSAmPSAweDAwMDA3ZmZmOworCQkJcHNpaWlfbHNiJj0gMHgwMDAwN2ZmZjsKKworCQkJU1tpKzFdPSBfTVVMVDE2XzMyX1ExNShxOCxzaWlfbXNiLHNpaV9sc2IpICsgCisJCQkJCV9NVUxUMTZfMzJfUTE1KHEwNSxwc2lfbXNiLHBzaV9sc2IpICsgCisJCQkJCV9NVUxUMTZfMzJfUTE1KHExLHBzaWlfbXNiLHBzaWlfbHNiKSArIAorCQkJCQlfTVVMVDE2XzMyX1ExNShxMDUscHNpaWlfbXNiLHBzaWlpX2xzYik7CisKKwkJCWlwc19sc2IgPSBwc2lpX2xzYjsKKwkJCWlwc19tc2IgPSBwc2lpX21zYjsKKwkJCXBzaV9sc2IgPSBwc2lpaV9sc2I7CisJCQlwc2lfbXNiID0gcHNpaWlfbXNiOworCQl9CisgICAKKwkJU1tOLTFdID0gTVVMVDE2XzMyX1ExNShxOCxTW04tMV0pICsgTVVMVDE2XzMyX1ExNShxMixwc1tOLTFdKTsKKwl9CisKKwluYl9hZGFwdCA9IHN0LT5uYl9hZGFwdDsKKyAgIAorCWlmICggbmJfYWRhcHQ9PTEgKQorCXsJZm9yICggaT0wIDsgaTxOIDsgKytpICkKKwkJCVNtaW5baV0gPSBTdG1wW2ldID0gMDsKKworCX0KKworCW1pbl9yYW5nZSA9IG11eChuYl9hZGFwdCA8IDEwMCwJCTE1LAorCQkJCW11eChuYl9hZGFwdCA8IDEwMDAsCTUwLAorCQkJCW11eChuYl9hZGFwdCA8IDEwMDAwLAkxNTAsIDMwMCkpKTsKKworCWlmICggc3QtPm1pbl9jb3VudCA+IG1pbl9yYW5nZSApCisJeworCQlzdC0+bWluX2NvdW50ID0gMDsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1VQREFURU5PSVNFUFJPQikKKyNwcmFnbWEgVENTX3Vucm9sbD0yCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwkJZm9yICggaT0wIDsgaTxOIDsgKytpICkKKwkJewlyZWdpc3RlciBpbnQgc2ksIHN0bXBpOworCisJCQlzaQkJPSBTW2ldOworCQkJc3RtcGkJPSBTdG1wW2ldOworCQkJCQorCQkJU21pbltpXSA9IGltaW4oc3RtcGksc2kpOworCQkJU3RtcFtpXSA9IHNpOworCQl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfVVBEQVRFTk9JU0VQUk9CKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorCX0gZWxzZSAKKwl7CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9VUERBVEVOT0lTRVBST0IpCisjcHJhZ21hIFRDU191bnJvbGw9MgorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisJCWZvciAoIGk9MCA7IGk8TiA7ICsraSApCisJCXsJcmVnaXN0ZXIgaW50IHNpLCBzdG1waSwgc21pbmk7CisKKwkJCXNpCQk9IFNbaV07CisJCQlzdG1waQk9IFN0bXBbaV07CisJCQlzbWluaQk9IFNtaW5baV07CisKKwkJCVNtaW5baV0gPSBpbWluKHNtaW5pLHNpKTsKKwkJCVN0bXBbaV0gPSBpbWluKHN0bXBpLHNpKTsgICAgICAKKwkJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1VQREFURU5PSVNFUFJPQikKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKwl9CisKKworCXsKKwkJcmVnaXN0ZXIgaW50IHE0OworCQlyZWdpc3RlciBpbnQgKiByZXN0cmljdCB1cGRhdGVfcHJvYiA9IChpbnQqKXN0LT51cGRhdGVfcHJvYjsKKworCQlxNCA9IFFDT05TVDE2KC40ZiwxNSk7CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9VUERBVEVOT0lTRVBST0IpCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisJCWZvciAoIGk9MCA7IGk8TiA7ICsraSApCisJCXsJcmVnaXN0ZXIgaW50IHNpOworCQkJcmVnaXN0ZXIgaW50IHNtaW5pOworCisJCQlzaSA9IFNbaV07CisJCQlzbWluaSA9IFNtaW5baV07CisJCQl1cGRhdGVfcHJvYltpXSA9IG11eChNVUxUMTZfMzJfUTE1KHE0LHNpKSA+IEFERDMyKHNtaW5pLDIwKSwgMSwgMCk7CisJCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9VUERBVEVOT0lTRVBST0IpCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisJfQorCisJVVBEQVRFTk9JU0VQUk9CX1NUT1AoKTsKK30KKworI2Vsc2UKKworI2RlZmluZSBPVkVSUklERV9QUkVQUk9DRVNTX0FOQUxZU0lTCitzdGF0aWMgdm9pZCBwcmVwcm9jZXNzX2FuYWx5c2lzKFNwZWV4UHJlcHJvY2Vzc1N0YXRlICogcmVzdHJpY3Qgc3QsIHNweF9pbnQxNl90ICogcmVzdHJpY3QgeCkKK3sKKwlyZWdpc3RlciBpbnQgaTsKKwlyZWdpc3RlciBpbnQgZnJhbWVzaXplID0gc3QtPmZyYW1lX3NpemU7CisJcmVnaXN0ZXIgaW50IE4gPSBzdC0+cHNfc2l6ZTsKKwlyZWdpc3RlciBpbnQgTjMgPSAyKk4gLSBmcmFtZXNpemU7CisJcmVnaXN0ZXIgaW50IE40ID0gZnJhbWVzaXplIC0gTjM7CisJcmVnaXN0ZXIgZmxvYXQgKiByZXN0cmljdCBwcyA9IHN0LT5wczsKKwlyZWdpc3RlciBmbG9hdCAqIHJlc3RyaWN0IGZyYW1lID0gc3QtPmZyYW1lOworCXJlZ2lzdGVyIGZsb2F0ICogcmVzdHJpY3QgaW5idWYgPSBzdC0+aW5idWY7CisKKwlQUkVQUk9DRVNTQU5BWUxTSVNfU1RBUlQoKTsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1BSRVBST0NFU1NBTkFMWVNJUykKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwlmb3IgKCBpPTAgOyBpPE4zIDsgKytpICkKKwl7CisJCWZyYW1lW2ldID0gaW5idWZbaV07CisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1BSRVBST0NFU1NBTkFMWVNJUykKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1BSRVBST0NFU1NBTkFMWVNJUykKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKyAgIAlmb3IgKCBpPTAgOyBpPGZyYW1lc2l6ZSA7ICsraSApCisJewlmcmFtZVtOMytpXSA9IHhbaV07CisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1BSRVBST0NFU1NBTkFMWVNJUykKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1BSRVBST0NFU1NBTkFMWVNJUykKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwlmb3IgKCBpPTAseCs9TjQgOyBpPE4zIDsgKytpICkKKwl7CWluYnVmW2ldICA9IHhbaV07CisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1BSRVBST0NFU1NBTkFMWVNJUykKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKworCWluYnVmID0gc3QtPndpbmRvdzsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1BSRVBST0NFU1NBTkFMWVNJUykKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwlmb3IgKCBpPTAgOyBpPDIqTiA7ICsraSApCisJeworCQlmcmFtZVtpXSA9IGZyYW1lW2ldICogaW5idWZbaV07CisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1BSRVBST0NFU1NBTkFMWVNJUykKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKworCXNweF9mZnQoc3QtPmZmdF9sb29rdXAsIGZyYW1lLCBzdC0+ZnQpOyAgICAgICAgIAorCXBvd2VyX3NwZWN0cnVtKHN0LT5mdCwgcHMsIE4gPDwgMSk7CisJZmlsdGVyYmFua19jb21wdXRlX2JhbmszMihzdC0+YmFuaywgcHMsIHBzK04pOworCisJUFJFUFJPQ0VTU0FOQVlMU0lTX1NUT1AoKTsKK30KKworCisjZGVmaW5lIE9WRVJSSURFX1VQREFURV9OT0lTRV9QUk9CCitzdGF0aWMgdm9pZCB1cGRhdGVfbm9pc2VfcHJvYihTcGVleFByZXByb2Nlc3NTdGF0ZSAqIHJlc3RyaWN0IHN0KQoreworICAgCisJcmVnaXN0ZXIgZmxvYXQgKiByZXN0cmljdCBTID0gc3QtPlM7CisgICAJcmVnaXN0ZXIgZmxvYXQgKiByZXN0cmljdCBwcyA9IHN0LT5wczsKKwlyZWdpc3RlciBpbnQgTiA9IHN0LT5wc19zaXplOworICAgIHJlZ2lzdGVyIGludCBtaW5fcmFuZ2U7CisJcmVnaXN0ZXIgaW50IGk7CisJcmVnaXN0ZXIgaW50IG5iX2FkYXB0OworCXJlZ2lzdGVyIGZsb2F0ICogcmVzdHJpY3QgU21pbiA9IHN0LT5TbWluOworCXJlZ2lzdGVyIGZsb2F0ICogcmVzdHJpY3QgU3RtcCA9IHN0LT5TdG1wOworCisJVVBEQVRFTk9JU0VQUk9CX1NUQVJUKCk7CisKKwl7CisJCXJlZ2lzdGVyIGZsb2F0IGlwcywgcHNpOworCisJCWlwcyAgPSBwc1swXTsKKwkJcHNpICA9IHBzWzFdOworCisJCVNbMF0gPSAuOGYgKiBTWzBdICsgLjJmICogaXBzOworCisJCWZvciAoIGk9MSA7IGk8Ti0xIDsgaSs9MiApCisJCXsKKwkJCXJlZ2lzdGVyIGZsb2F0IHBzaWksIHBzaWlpOworCisJCQlwc2lpCT0gcHNbaSsxXTsKKwkJCXBzaWlpCT0gcHNbaSsyXTsKKwkJCVNbaV0JPSAuOGYgKiBTW2ldCSsgLjA1ZiAqIGlwcyArIC4xZiAqIHBzaSAgKyAuMDVmICogcHNpaTsKKwkJCVNbaSsxXQk9IC44ZiAqIFNbaSsxXQkrIC4wNWYgKiBwc2kgKyAuMWYgKiBwc2lpICsgLjA1ZiAqIHBzaWlpOyAKKwkJCWlwcwkJPSBwc2lpOworCQkJcHNpCQk9IHBzaWlpOworCQl9CisKKwkJU1tOLTFdID0gLjhmICogU1tOLTFdICsgLjJmICogcHNbTi0xXTsKKwl9CisKKwluYl9hZGFwdCA9IHN0LT5uYl9hZGFwdDsKKyAgIAorICAgCWlmICggbmJfYWRhcHQ9PTEgKQorCXsJCisJCWZvciAoaT0wO2k8TjtpKyspCisJCQlTbWluW2ldID0gc3QtPlN0bXBbaV0gPSAwOworCX0KKworCW1pbl9yYW5nZSA9IG11eChuYl9hZGFwdCA8IDEwMCwJCTE1LAorCQkJCW11eChuYl9hZGFwdCA8IDEwMDAsCTUwLAorCQkJCW11eChuYl9hZGFwdCA8IDEwMDAwLAkxNTAsIDMwMCkpKTsKKworICAgCisJaWYgKCBzdC0+bWluX2NvdW50ID4gbWluX3JhbmdlICkKKwl7CisJCXN0LT5taW5fY291bnQgPSAwOworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1VQREFURU5PSVNFUFJPQikKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwkJZm9yICggaT0wIDsgaTxOIDsgKytpICkKKwkJeworCQkJcmVnaXN0ZXIgZmxvYXQgc3RtcGksIHNpOworCisJCQlzdG1waQk9IFN0bXBbaV07CisJCQlzaQkJPSBTW2ldOworCisJCQlTbWluW2ldID0gZm1pbihzdG1waSxzaSk7CisJCQlTdG1wW2ldID0gc2k7CisJCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9VUERBVEVOT0lTRVBST0IpCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisKKwl9IGVsc2UgCisJeworCQlyZWdpc3RlciBmbG9hdCAqIHJlc3RyaWN0IFNtaW4gPSBzdC0+U21pbjsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1VQREFURU5PSVNFUFJPQikKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwkJZm9yICggaT0wIDsgaTxOIDsgKytpICkKKwkJeworCQkJcmVnaXN0ZXIgZmxvYXQgc3RtcGksIHNpLCBzbWluaTsKKworCQkJc3RtcGkJPSBTdG1wW2ldOworCQkJc2kJCT0gU1tpXTsKKwkJCXNtaW5pCT0gU21pbltpXTsKKwkJCQorCQkJU21pbltpXSA9IGZtaW4oc21pbmksc2kpOworCQkJU3RtcFtpXSA9IGZtaW4oc3RtcGksc2kpOyAgICAgIAorCQl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfVVBEQVRFTk9JU0VQUk9CKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorCX0KKworCXsKKwkJcmVnaXN0ZXIgaW50ICogcmVzdHJpY3QgdXBkYXRlX3Byb2IgPSAoaW50KilzdC0+dXBkYXRlX3Byb2I7CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9VUERBVEVOT0lTRVBST0IpCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisJCWZvciAoaT0wO2k8TjtpKyspCisJCXsJcmVnaXN0ZXIgZmxvYXQgc2k7CisJCQlyZWdpc3RlciBmbG9hdCBzbWluaTsKKworCQkJc2kJCT0gU1tpXTsKKwkJCXNtaW5pCT0gU21pbltpXTsKKwkJCXVwZGF0ZV9wcm9iW2ldID0gbXV4KCAoLjQgKiBzaSkgPiAoc21pbmkgKyAyMC5mKSwgMSwgMCk7CisJCQkKKwkJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1VQREFURU5PSVNFUFJPQikKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKwl9CisKKwlVUERBVEVOT0lTRVBST0JfU1RPUCgpOworfQorCisKKyNkZWZpbmUgT1ZFUlJJREVfQ09NUFVURV9HQUlOX0ZMT09SCitzdGF0aWMgdm9pZCBjb21wdXRlX2dhaW5fZmxvb3IoCisJaW50IG5vaXNlX3N1cHByZXNzLCAKKwlpbnQgZWZmZWN0aXZlX2VjaG9fc3VwcHJlc3MsIAorCWZsb2F0ICogcmVzdHJpY3Qgbm9pc2UsIAorCWZsb2F0ICogcmVzdHJpY3QgZWNobywgCisJZmxvYXQgKiBnYWluX2Zsb29yLCAKKwlpbnQgbGVuCispCit7CisJcmVnaXN0ZXIgaW50IGk7CisJcmVnaXN0ZXIgZmxvYXQgZWNob19mbG9vcjsKKwlyZWdpc3RlciBmbG9hdCBub2lzZV9mbG9vcjsKKworCUNPTVBVVEVHQUlORkxPT1JfU1RBUlQoKTsKKworCW5vaXNlX2Zsb29yID0gZXhwKC4yMzAyNTg1Zipub2lzZV9zdXBwcmVzcyk7CisJZWNob19mbG9vciA9IGV4cCguMjMwMjU4NWYqZWZmZWN0aXZlX2VjaG9fc3VwcHJlc3MpOworCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfQ09NUFVURUdBSU5GTE9PUikKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwlmb3IgKGk9MDtpPGxlbjtpKyspCisJewlyZWdpc3RlciBmbG9hdCBub2lzZWksIGVjaG9pOworCisJCW5vaXNlaSA9IG5vaXNlW2ldOworCQllY2hvaSAgPSBlY2hvW2ldOworCisJCWdhaW5fZmxvb3JbaV0gPSBGUkFDX1NDQUxJTkcgKiBzcXJ0KG5vaXNlX2Zsb29yICogbm9pc2VpICsJZWNob19mbG9vciAqIGVjaG9pKSAvIHNxcnQoMStub2lzZWkrZWNob2kpOworCisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX0NPTVBVVEVHQUlORkxPT1IpCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisKKwlDT01QVVRFR0FJTkZMT09SX1NUT1AoKTsKK30KKworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgc3B4X3dvcmQzMl90IGh5cGVyZ2VvbV9nYWluKHNweF93b3JkMzJfdCB4eCk7CitzdGF0aWMgaW5saW5lIHNweF93b3JkMTZfdCBxY3VydmUoc3B4X3dvcmQxNl90IHgpOworc3RhdGljIHZvaWQgY29tcHV0ZV9nYWluX2Zsb29yKGludCBub2lzZV9zdXBwcmVzcywgaW50IGVmZmVjdGl2ZV9lY2hvX3N1cHByZXNzLCBzcHhfd29yZDMyX3QgKm5vaXNlLCBzcHhfd29yZDMyX3QgKmVjaG8sIHNweF93b3JkMTZfdCAqZ2Fpbl9mbG9vciwgaW50IGxlbik7Cit2b2lkIHNwZWV4X2VjaG9fZ2V0X3Jlc2lkdWFsKFNwZWV4RWNob1N0YXRlICpzdCwgc3B4X3dvcmQzMl90ICpZb3V0LCBpbnQgbGVuKTsKKworI2lmbmRlZiBGSVhFRF9QT0lOVAorc3RhdGljIHZvaWQgc3BlZXhfY29tcHV0ZV9hZ2MoU3BlZXhQcmVwcm9jZXNzU3RhdGUgKnN0LCBzcHhfd29yZDE2X3QgUGZyYW1lLCBzcHhfd29yZDE2X3QgKmZ0KTsKKyNlbmRpZgorCit2b2lkIHByZXByb2Nlc3NfcmVzaWR1ZV9lY2hvKAorCVNwZWV4UHJlcHJvY2Vzc1N0YXRlICogcmVzdHJpY3Qgc3QsCisJaW50IE4sCisJaW50IE5NCispCit7CisJaWYgKHN0LT5lY2hvX3N0YXRlKQorCXsKKwkJcmVnaXN0ZXIgc3B4X3dvcmQzMl90ICogcmVzdHJpY3Qgcl9lY2hvID0gc3QtPnJlc2lkdWFsX2VjaG87CisJCXJlZ2lzdGVyIHNweF93b3JkMzJfdCAqIHJlc3RyaWN0IGVfbm9pc2UgPSBzdC0+ZWNob19ub2lzZTsKKwkJcmVnaXN0ZXIgaW50IGk7CisKKyNpZm5kZWYgRklYRURfUE9JTlQKKwkJcmVnaXN0ZXIgc3B4X3dvcmQzMl90IHI7CisjZW5kaWYKKworCQlzcGVleF9lY2hvX2dldF9yZXNpZHVhbChzdC0+ZWNob19zdGF0ZSwgcl9lY2hvLCBOKTsKKworI2lmbmRlZiBGSVhFRF9QT0lOVAorCQlyID0gcl9lY2hvWzBdOworCQlpZiAoIShyID49MCAmJiByIDwgTioxZTlmKSApCisJCXsJCisJCQltZW1zZXQocl9lY2hvLCAwLCBOICogc2l6ZW9mKHNweF93b3JkMzJfdCkpOworCQl9CisjZW5kaWYKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYUFJFUFJPQ0VTU1JVTikKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwkJZm9yIChpPTA7aTxOO2krKykKKwkJewlyZWdpc3RlciBzcHhfd29yZDMyX3QgZW5pID0gZV9ub2lzZVtpXTsKKwkJCWVfbm9pc2VbaV0gPSBNQVgzMihNVUxUMTZfMzJfUTE1KFFDT05TVDE2KC42ZiwxNSksZW5pKSwgcl9lY2hvW2ldKTsKKwkJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYUFJFUFJPQ0VTU1JVTikKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKwkJZmlsdGVyYmFua19jb21wdXRlX2JhbmszMihzdC0+YmFuaywgZV9ub2lzZSwgZV9ub2lzZStOKTsKKyAgIAorCX0gZWxzZSAKKwl7CW1lbXNldChzdC0+ZWNob19ub2lzZSwgMCwgKE5NKSAqIHNpemVvZihzcHhfd29yZDMyX3QpKTsKKwl9Cit9CisKK3ZvaWQgcHJlcHJvY2Vzc191cGRhdGVfbm9pc2UoCisJU3BlZXhQcmVwcm9jZXNzU3RhdGUgKiByZXN0cmljdCBzdCwKKwlzcHhfd29yZDMyX3QgKiByZXN0cmljdCBwcywKKwlpbnQgTgorKQoreworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCBiZXRhLCBiZXRhXzE7CisJcmVnaXN0ZXIgaW50ICogcmVzdHJpY3QgdXAgPSBzdC0+dXBkYXRlX3Byb2I7CisJcmVnaXN0ZXIgc3B4X3dvcmQzMl90ICogcmVzdHJpY3Qgbm9pc2UgPSBzdC0+bm9pc2U7CisJcmVnaXN0ZXIgaW50IGk7CisKKwliZXRhID0gTUFYMTYoUUNPTlNUMTYoLjAzLDE1KSxESVYzMl8xNihRMTVfT05FLHN0LT5uYl9hZGFwdCkpOworCWJldGFfMSA9IFExNV9PTkUtYmV0YTsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYUFJFUFJPQ0VTU1JVTikKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwlmb3IgKGk9MDtpPE47aSsrKQorCXsJcmVnaXN0ZXIgc3B4X3dvcmQzMl90IG5pID0gbm9pc2VbaV07CisJCXJlZ2lzdGVyIHNweF93b3JkMzJfdCBwc2kgPSBwc1tpXTsKKworCQlpZiAoICF1cFtpXSB8fCBwc2kgPCBQU0hSMzIobmksIE5PSVNFX1NISUZUKSApCisJCXsJbm9pc2VbaV0gPQlNQVgzMihFWFRFTkQzMigwKSxNVUxUMTZfMzJfUTE1KGJldGFfMSxuaSkgKyAKKwkJCQkJCU1VTFQxNl8zMl9RMTUoYmV0YSxTSEwzMihwc2ksTk9JU0VfU0hJRlQpKSk7CisJCX0KKwl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfU1BFRVhQUkVQUk9DRVNTUlVOKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorCWZpbHRlcmJhbmtfY29tcHV0ZV9iYW5rMzIoc3QtPmJhbmssIG5vaXNlLCBub2lzZStOKTsKK30KKwordm9pZCBwcmVwcm9jZXNzX2NvbXB1dGVfU05SKAorCVNwZWV4UHJlcHJvY2Vzc1N0YXRlICogcmVzdHJpY3Qgc3QsCisJc3B4X3dvcmQzMl90ICogcmVzdHJpY3QgcHMsCisJaW50IE5NCispCit7CisJcmVnaXN0ZXIgc3B4X3dvcmQzMl90ICogcmVzdHJpY3Qgbm9pc2UgPSBzdC0+bm9pc2U7CisJcmVnaXN0ZXIgc3B4X3dvcmQzMl90ICogcmVzdHJpY3QgZWNobyA9IHN0LT5lY2hvX25vaXNlOworCXJlZ2lzdGVyIHNweF93b3JkMzJfdCAqIHJlc3RyaWN0IHJldmVyYiA9IHN0LT5yZXZlcmJfZXN0aW1hdGU7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgcG9zdCA9IHN0LT5wb3N0OworCXJlZ2lzdGVyIHNweF93b3JkMzJfdCAqIHJlc3RyaWN0IG9sZF9wcyA9IHN0LT5vbGRfcHM7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgcHJpb3IgPSBzdC0+cHJpb3I7CisJcmVnaXN0ZXIgaW50IGk7CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWFBSRVBST0NFU1NSVU4pCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisJZm9yICggaT0wIDsgaTxOTSA7IGkrKykKKwl7CisJCXJlZ2lzdGVyIHNweF93b3JkMTZfdCBnYW1tYTsKKwkJcmVnaXN0ZXIgc3B4X3dvcmQzMl90IHRvdF9ub2lzZTsKKwkJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IHBvc3RpOworCQlyZWdpc3RlciBzcHhfd29yZDMyX3Qgb3BzaTsKKwkJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IHByaW9yaTsKKworCQl0b3Rfbm9pc2UgPSBBREQzMihBREQzMihBREQzMihFWFRFTkQzMigxKSwgUFNIUjMyKG5vaXNlW2ldLE5PSVNFX1NISUZUKSksIGVjaG9baV0pICwgcmV2ZXJiW2ldKTsKKyAgICAgIAorCQlwb3N0aSA9IFNVQjE2KERJVjMyXzE2X1E4KHBzW2ldLHRvdF9ub2lzZSksIFFDT05TVDE2KDEuZixTTlJfU0hJRlQpKTsKKwkJcG9zdGkgPSBNSU4xNihwb3N0aSwgUUNPTlNUMTYoMTAwLmYsU05SX1NISUZUKSk7CisJCXBvc3RbaV0gPSBwb3N0aTsKKworCQlvcHNpID0gb2xkX3BzW2ldOworCisJCWdhbW1hID0gUUNPTlNUMTYoLjFmLDE1KStNVUxUMTZfMTZfUTE1KFFDT05TVDE2KC44OWYsMTUpLFNRUjE2X1ExNShESVYzMl8xNl9RMTUob3BzaSxBREQzMihvcHNpLHRvdF9ub2lzZSkpKSk7CisgICAgICAKKwkJcHJpb3JpID0gRVhUUkFDVDE2KFBTSFIzMihBREQzMihNVUxUMTZfMTYoZ2FtbWEsTUFYMTYoMCxwb3N0aSkpLCBNVUxUMTZfMTYoUTE1X09ORS1nYW1tYSxESVYzMl8xNl9ROChvcHNpLHRvdF9ub2lzZSkpKSwgMTUpKTsKKwkJcHJpb3JbaV09TUlOMTYocHJpb3JpLCBRQ09OU1QxNigxMDAuZixTTlJfU0hJRlQpKTsKKwl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfU1BFRVhQUkVQUk9DRVNTUlVOKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorfQorCitzcHhfd29yZDMyX3QgcHJlcHJvY2Vzc19zbW9vdGhfU05SKAorCVNwZWV4UHJlcHJvY2Vzc1N0YXRlICogcmVzdHJpY3Qgc3QsCisJaW50IE4sCisJaW50IE5NCispCit7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgemV0YSA9IHN0LT56ZXRhOworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCAqIHJlc3RyaWN0IHByaW9yID0gc3QtPnByaW9yOworCXJlZ2lzdGVyIHNweF93b3JkMzJfdCBaZnJhbWU7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IGlwcmlvciwgcHJpb3JpOworCXJlZ2lzdGVyIGludCBfTiA9IE4tMTsKKwlyZWdpc3RlciBpbnQgaTsKKworCWlwcmlvciA9IHByaW9yWzBdOworCXByaW9yaSA9IHByaW9yWzFdOworCXpldGFbMF0gPSBQU0hSMzIoQUREMzIoTVVMVDE2XzE2KFFDT05TVDE2KC43ZiwxNSksemV0YVswXSksIE1VTFQxNl8xNihRQ09OU1QxNiguM2YsMTUpLGlwcmlvcikpLDE1KTsKKyAgIAorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYUFJFUFJPQ0VTU1JVTikKKyNwcmFnbWEgVENTX3Vucm9sbD0yCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwlmb3IgKCBpPTEgOyBpPF9OIDsgaSsrKQorCXsJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IHpldGFpID0gemV0YVtpXTsKKwkJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IHByaW9yaWkgPSBwcmlvcltpKzFdOworCisJCXpldGFbaV0gPSBQU0hSMzIoQUREMzIoQUREMzIoQUREMzIoTVVMVDE2XzE2KFFDT05TVDE2KC43ZiwxNSksemV0YWkpLCBNVUxUMTZfMTYoUUNPTlNUMTYoLjE1ZiwxNSkscHJpb3JpKSksCisgICAgICAgICAgICAgICAgICBNVUxUMTZfMTYoUUNPTlNUMTYoLjA3NWYsMTUpLGlwcmlvcikpLCBNVUxUMTZfMTYoUUNPTlNUMTYoLjA3NWYsMTUpLHByaW9yaWkpKSwxNSk7CisKKwkJaXByaW9yID0gcHJpb3JpOworCQlwcmlvcmkgPSBwcmlvcmlpOworCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWFBSRVBST0NFU1NSVU4pCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisKKwlmb3IgKGk9X047IGk8Tk0gOyBpKyspCisJewlyZWdpc3RlciBzcHhfd29yZDE2X3QgemV0YWkgPSB6ZXRhW2ldOworCQkKKwkJcHJpb3JpID0gcHJpb3JbaV07CisJCXpldGFbaV0gPSBQU0hSMzIoQUREMzIoTVVMVDE2XzE2KFFDT05TVDE2KC43ZiwxNSksemV0YWkpLCBNVUxUMTZfMTYoUUNPTlNUMTYoLjNmLDE1KSxwcmlvcmkpKSwxNSk7CisJfQorCisJWmZyYW1lID0gMDsKKyAgIAorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYUFJFUFJPQ0VTU1JVTikKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwlmb3IgKCBpPU4gOyBpPE5NIDsgaSsrICkKKwl7CVpmcmFtZSA9IEFERDMyKFpmcmFtZSwgRVhURU5EMzIoemV0YVtpXSkpOworCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWFBSRVBST0NFU1NSVU4pCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisKKwlyZXR1cm4gWmZyYW1lOworfQorCit2b2lkIHByZXByb2Nlc3NfY29tcHV0ZV9lbWdhaW4oCisJU3BlZXhQcmVwcm9jZXNzU3RhdGUgKiByZXN0cmljdCBzdCwKKwlzcHhfd29yZDMyX3QgKiByZXN0cmljdCBwcywKKwlzcHhfd29yZDE2X3QgUGZyYW1lLAorCWludCBOTQorKQoreworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCAqIHJlc3RyaWN0IHpldGEgPSBzdC0+emV0YTsKKwlyZWdpc3RlciBzcHhfd29yZDE2X3QgKiByZXN0cmljdCBwcmlvciA9IHN0LT5wcmlvcjsKKwlyZWdpc3RlciBzcHhfd29yZDE2X3QgKiByZXN0cmljdCBnYWluID0gc3QtPmdhaW47CisJcmVnaXN0ZXIgc3B4X3dvcmQzMl90ICogcmVzdHJpY3Qgb2xkX3BzID0gc3QtPm9sZF9wczsKKwlyZWdpc3RlciBzcHhfd29yZDE2X3QgKiByZXN0cmljdCBwb3N0ID0gc3QtPnBvc3Q7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgZ2FpbjIgPSBzdC0+Z2FpbjI7CisJcmVnaXN0ZXIgaW50IGk7CisJcmVnaXN0ZXIgaW50IE49c3QtPnBzX3NpemU7CisJCisJZm9yICggaT1OIDsgaTxOTSA7ICsraSApCisJeworCQlyZWdpc3RlciBzcHhfd29yZDMyX3QgdGhldGE7CisJCXJlZ2lzdGVyIHNweF93b3JkMzJfdCBNTTsKKwkJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IHByaW9yX3JhdGlvOworCQlyZWdpc3RlciBzcHhfd29yZDE2X3QgUDE7CisJCXJlZ2lzdGVyIHNweF93b3JkMTZfdCBxOworCisjaWZkZWYgRklYRURfUE9JTlQKKwkJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IHRtcDsKKyNlbmRpZgorCQlyZWdpc3RlciBzcHhfd29yZDE2X3QgcHJpb3JpID0gcHJpb3JbaV07CisJCQorCQlwcmlvcl9yYXRpbyA9IFBESVYzMl8xNihTSEwzMihFWFRFTkQzMihwcmlvcmkpLCAxNSksIEFERDE2KHByaW9yaSwgU0hMMzIoMSxTTlJfU0hJRlQpKSk7CisJCXRoZXRhID0gTVVMVDE2XzMyX1AxNShwcmlvcl9yYXRpbywgUUNPTlNUMzIoMS5mLEVYUElOX1NISUZUKStTSEwzMihFWFRFTkQzMihwb3N0W2ldKSxFWFBJTl9TSElGVC1TTlJfU0hJRlQpKTsKKworCQlNTSA9IGh5cGVyZ2VvbV9nYWluKHRoZXRhKTsKKwkJZ2FpbltpXSA9IEVYVFJBQ1QxNihNSU4zMihRMTVfT05FLCBNVUxUMTZfMzJfUTE1KHByaW9yX3JhdGlvLCBNTSkpKTsKKwkJb2xkX3BzW2ldID0gTVVMVDE2XzMyX1AxNShRQ09OU1QxNiguMmYsMTUpLG9sZF9wc1tpXSkgKyBNVUxUMTZfMzJfUDE1KE1VTFQxNl8xNl9QMTUoUUNPTlNUMTYoLjhmLDE1KSxTUVIxNl9RMTUoZ2FpbltpXSkpLHBzW2ldKTsKKworCQlQMSA9IFFDT05TVDE2KC4xOTlmLDE1KStNVUxUMTZfMTZfUTE1KFFDT05TVDE2KC44ZiwxNSkscWN1cnZlICh6ZXRhW2ldKSk7CisJCXEgPSBRMTVfT05FLU1VTFQxNl8xNl9RMTUoUGZyYW1lLFAxKTsKKworI2lmZGVmIEZJWEVEX1BPSU5UCisJCXRoZXRhID0gTUlOMzIodGhldGEsIEVYVEVORDMyKDMyNzY3KSk7CisJCXRtcCA9IE1VTFQxNl8xNl9RMTUoKFNITDMyKDEsU05SX1NISUZUKStwcmlvcmkpLEVYVFJBQ1QxNihNSU4zMihRMTVPTkUsU0hSMzIoc3B4X2V4cCgtRVhUUkFDVDE2KHRoZXRhKSksMSkpKSk7CisJCXRtcCA9IE1JTjE2KFFDT05TVDE2KDMuLFNOUl9TSElGVCksIHRtcCk7CisJCXRtcCA9IEVYVFJBQ1QxNihQU0hSMzIoTVVMVDE2XzE2KFBESVYzMl8xNihTSEwzMihFWFRFTkQzMihxKSw4KSwoUTE1X09ORS1xKSksdG1wKSw4KSk7CisJCWdhaW4yW2ldPURJVjMyXzE2KFNITDMyKEVYVEVORDMyKDMyNzY3KSxTTlJfU0hJRlQpLCBBREQxNigyNTYsdG1wKSk7CisjZWxzZQorCQlnYWluMltpXT0xLygxLmYgKyAocS8oMS5mLXEpKSooMStwcmlvcmkpKmV4cCgtdGhldGEpKTsKKyNlbmRpZgorCX0KKworCWZpbHRlcmJhbmtfY29tcHV0ZV9wc2QxNihzdC0+YmFuayxnYWluMitOLCBnYWluMik7CisJZmlsdGVyYmFua19jb21wdXRlX3BzZDE2KHN0LT5iYW5rLGdhaW4rTiwgZ2Fpbik7Cit9CisKK3ZvaWQgcHJlcHJvY2Vzc19jb21wdXRlX2xpbmVhcl9nYWluKAorCVNwZWV4UHJlcHJvY2Vzc1N0YXRlICogcmVzdHJpY3Qgc3QsCisJc3B4X3dvcmQzMl90ICogcmVzdHJpY3QgcHMsCQorCWludCBOCispCit7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgZ2Fpbl9mbG9vciA9IHN0LT5nYWluX2Zsb29yOworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCAqIHJlc3RyaWN0IHByaW9yID0gc3QtPnByaW9yOworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCAqIHJlc3RyaWN0IGdhaW4gPSBzdC0+Z2FpbjsKKwlyZWdpc3RlciBzcHhfd29yZDMyX3QgKiByZXN0cmljdCBvbGRfcHMgPSBzdC0+b2xkX3BzOworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCAqIHJlc3RyaWN0IHBvc3QgPSBzdC0+cG9zdDsKKwlyZWdpc3RlciBzcHhfd29yZDE2X3QgKiByZXN0cmljdCBnYWluMiA9IHN0LT5nYWluMjsKKwlyZWdpc3RlciBpbnQgaTsKKworCWZpbHRlcmJhbmtfY29tcHV0ZV9wc2QxNihzdC0+YmFuayxnYWluX2Zsb29yK04sZ2Fpbl9mbG9vcik7CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWFBSRVBST0NFU1NSVU4pCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmICAgCisJZm9yIChpPTA7aTxOO2krKykKKyAgICB7CisgICAgICAgICByZWdpc3RlciBzcHhfd29yZDMyX3QgTU07CisgICAgICAgICByZWdpc3RlciBzcHhfd29yZDMyX3QgdGhldGE7CisgICAgICAgICByZWdpc3RlciBzcHhfd29yZDE2X3QgcHJpb3JfcmF0aW87CisgICAgICAgICByZWdpc3RlciBzcHhfd29yZDE2X3QgdG1wOworICAgICAgICAgcmVnaXN0ZXIgc3B4X3dvcmQxNl90IHA7CisgICAgICAgICByZWdpc3RlciBzcHhfd29yZDE2X3QgZzsKKwkJIHJlZ2lzdGVyIHNweF93b3JkMTZfdCBnZmkgPSBnYWluX2Zsb29yW2ldOworCisJCSBwcmlvcl9yYXRpbyA9IFBESVYzMl8xNihTSEwzMihFWFRFTkQzMihzdC0+cHJpb3JbaV0pLCAxNSksIEFERDE2KHByaW9yW2ldLCBTSEwzMigxLFNOUl9TSElGVCkpKTsKKyAgICAgICAgIHRoZXRhID0gTVVMVDE2XzMyX1AxNShwcmlvcl9yYXRpbywgUUNPTlNUMzIoMS5mLEVYUElOX1NISUZUKStTSEwzMihFWFRFTkQzMihwb3N0W2ldKSxFWFBJTl9TSElGVC1TTlJfU0hJRlQpKTsKKwkJIE1NID0gaHlwZXJnZW9tX2dhaW4odGhldGEpOworCisJCSBnID0gRVhUUkFDVDE2KE1JTjMyKFExNV9PTkUsIE1VTFQxNl8zMl9RMTUocHJpb3JfcmF0aW8sIE1NKSkpOworCQkgcCA9IGdhaW4yW2ldOworICAgICAgICAgCisJCSBnID0gVk1VWCggTVVMVDE2XzE2X1ExNShRQ09OU1QxNiguMzMzZiwxNSksZykgPiBnYWluW2ldLCBNVUxUMTZfMTYoMyxnYWluW2ldKSwgZyk7CisKKyAgICAgICAgIG9sZF9wc1tpXT0gTVVMVDE2XzMyX1AxNShRQ09OU1QxNiguMmYsMTUpLG9sZF9wc1tpXSkgKyAKKwkJCQkJTVVMVDE2XzMyX1AxNShNVUxUMTZfMTZfUDE1KFFDT05TVDE2KC44ZiwxNSksU1FSMTZfUTE1KGcpKSxwc1tpXSk7CisgICAgICAgICAKKwkJIGcgPSBWTVVYKCBnIDwgZ2ZpLCBnZmksIGcgKTsKKyAgICAgICAgIGdhaW5baV0gPSBnOworCisgICAgICAgICB0bXAgPQlNVUxUMTZfMTZfUDE1KHAsc3B4X3NxcnQoU0hMMzIoRVhURU5EMzIoZyksMTUpKSkgKyAKKwkJCQlNVUxUMTZfMTZfUDE1KFNVQjE2KFExNV9PTkUscCksc3B4X3NxcnQoU0hMMzIoRVhURU5EMzIoZ2ZpKSwxNSkpKTsKKworICAgICAgICAgZ2FpbjJbaV09U1FSMTZfUTE1KHRtcCk7CisKKyAgICAgICAgIC8qIFVzZSB0aGlzIGlmIHlvdSB3YW50IGEgbG9nLWRvbWFpbiBNTVNFIGVzdGltYXRvciBpbnN0ZWFkICovCisgICAgICAgICAvKiBnYWluMltpXSA9IHBvdyhnLCBwKSAqIHBvdyhnZmksMS5mLXApOyovCisgICAgfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYUFJFUFJPQ0VTU1JVTikKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKK30KKworCisjaWYgMAordm9pZCBwcmVwcm9jZXNzX2NvbXB1dGVfYmFya19nYWluKAorCVNwZWV4UHJlcHJvY2Vzc1N0YXRlICogcmVzdHJpY3Qgc3QsCisJaW50IE4sCisJaW50IE5NCispCit7CisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgZ2Fpbl9mbG9vciA9IHN0LT5nYWluX2Zsb29yOworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCAqIHJlc3RyaWN0IGdhaW4gPSBzdC0+Z2FpbjsKKwlyZWdpc3RlciBzcHhfd29yZDE2X3QgKiByZXN0cmljdCBnYWluMiA9IHN0LT5nYWluMjsKKwlyZWdpc3RlciBpbnQgaTsKKworICAgIGZvciAoaT1OO2k8Tk07aSsrKQorICAgIHsKKwkJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IHRtcDsKKwkJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IHAgPSBnYWluMltpXTsKKwkJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IGdhaW5pOworCQlyZWdpc3RlciBzcHhfd29yZDE2X3QgZ2ZpID0gZ2Fpbl9mbG9vcltpXTsKKworCQlnYWluaSA9IE1BWDE2KGdhaW5baV0sIGdmaSk7IAorCisJCWdhaW5baV0gPSBnYWluaTsKKworCQl0bXAgPQlNVUxUMTZfMTZfUDE1KHAsc3B4X3NxcnQoU0hMMzIoRVhURU5EMzIoZ2FpbmkpLDE1KSkpICsgCisJCQlNVUxUMTZfMTZfUDE1KFNVQjE2KFExNV9PTkUscCksc3B4X3NxcnQoU0hMMzIoRVhURU5EMzIoZ2ZpKSwxNSkpKTsKKworCQlnYWluMltpXT1TUVIxNl9RMTUodG1wKTsKKyAgICB9CisKKyAgICBmaWx0ZXJiYW5rX2NvbXB1dGVfcHNkMTYoc3QtPmJhbmssZ2FpbjIrTiwgZ2FpbjIpOworfQorI2VuZGlmCisKK3ZvaWQgcHJlcHJvY2Vzc19hcHBseV9nYWluKAorCVNwZWV4UHJlcHJvY2Vzc1N0YXRlICogcmVzdHJpY3Qgc3QsCisJaW50IE4KKykKK3sKKwlyZWdpc3RlciBzcHhfd29yZDE2X3QgKiByZXN0cmljdCBmdCA9IHN0LT5mdDsKKwlyZWdpc3RlciBzcHhfd29yZDE2X3QgKiByZXN0cmljdCBnYWluMiA9IHN0LT5nYWluMjsKKwlyZWdpc3RlciBpbnQgaiwgaTsKKworCWZ0WzBdID0gTVVMVDE2XzE2X1AxNShnYWluMlswXSxmdFswXSk7CisKKwlmb3IgKGk9MSxqPTE7IGk8TiA7IGkrKyxqKz0yKQorCXsKKwkJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IGdhaW4yaSA9IGdhaW4yW2ldOworCQlyZWdpc3RlciBzcHhfd29yZDE2X3QgZnRqID0gZnRbal07CisJCXJlZ2lzdGVyIHNweF93b3JkMTZfdCBmdGpqID0gZnRbaisxXTsKKworCQlmdFtqXSA9IE1VTFQxNl8xNl9QMTUoZ2FpbjJpLGZ0aik7CisJCWZ0W2orMV0gPSBNVUxUMTZfMTZfUDE1KGdhaW4yaSxmdGpqKTsKKwl9CisKKwlmdFsoTjw8MSktMV0gPSBNVUxUMTZfMTZfUDE1KGdhaW4yW04tMV0sZnRbKE48PDEpLTFdKTsKK30KKworI2lmZGVmIEZJWEVEX1BPSU5UCit2b2lkIHByZXByb2Nlc3Nfc2NhbGUoCisJU3BlZXhQcmVwcm9jZXNzU3RhdGUgKiByZXN0cmljdCBzdCwKKwlpbnQgTgorKQoreworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCAqIHJlc3RyaWN0IGZyYW1lID0gc3QtPmZyYW1lOworCXJlZ2lzdGVyIGludCBzaGlmdCA9IHN0LT5mcmFtZV9zaGlmdDsKKwlyZWdpc3RlciBpbnQgaTsKKwlyZWdpc3RlciBpbnQgTjIgPSBOIDw8IDE7CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWFBSRVBST0NFU1NSVU4pCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmICAgIAorCWZvciAoIGk9MCA7IGk8TjIgO2krKykKKwl7CXJlZ2lzdGVyIHNweF93b3JkMTZfdCBmcmFtZWkgPSBmcmFtZVtpXTsKKwkJCisJCWZyYW1lW2ldID0gUFNIUjE2KGZyYW1laSxzaGlmdCk7CisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1NQRUVYUFJFUFJPQ0VTU1JVTikKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKK30KKworI2Vsc2UKKwordm9pZCBwcmVwcm9jZXNzX2FwcGx5X2FnYygKKwlTcGVleFByZXByb2Nlc3NTdGF0ZSAqIHJlc3RyaWN0IHN0LAorCWludCBOCQkJCSAgCispCit7CQkJCSAgCisJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IG1heF9zYW1wbGU9MDsKKwlyZWdpc3RlciBzcHhfd29yZDE2X3QgKiByZXN0cmljdCBmcmFtZSA9IHN0LT5mcmFtZTsKKwlyZWdpc3RlciBpbnQgaTsKKwlyZWdpc3RlciBpbnQgTjIgPSBOIDw8IDE7CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWFBSRVBST0NFU1NSVU4pCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmICAgIAorCWZvciAoaT0wO2k8TjI7aSsrKQorCXsJcmVnaXN0ZXIgc3B4X3dvcmQxNl90IGZyYW1laSA9IFZBQlMoZnJhbWVbaV0pOworCisJCW1heF9zYW1wbGUgPSBWTVVYKCBmcmFtZWkgPiBtYXhfc2FtcGxlLCBmcmFtZWksIG1heF9zYW1wbGUpOworCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWFBSRVBST0NFU1NSVU4pCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmICAgIAorCisJaWYgKCBtYXhfc2FtcGxlID4gMjgwMDAuZiApCisJeworCQlmbG9hdCBkYW1wID0gMjgwMDAuZi9tYXhfc2FtcGxlOworCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfU1BFRVhQUkVQUk9DRVNTUlVOKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTQKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZiAgCisJCWZvciAoIGk9MCA7IGk8IE4yIDsgaSsrICkKKwkJewlmcmFtZVtpXSAqPSBkYW1wOworCQl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfU1BFRVhQUkVQUk9DRVNTUlVOKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZiAgCisJfQorfQorI2VuZGlmCisKKwordm9pZCBwcmVwcm9jZXNzX3VwZGF0ZSgKKwlTcGVleFByZXByb2Nlc3NTdGF0ZSAqIHJlc3RyaWN0IHN0LAorCXNweF9pbnQxNl90ICogcmVzdHJpY3QgeCwKKwlpbnQgTgkKKykKK3sKKwlyZWdpc3RlciBzcHhfd29yZDE2X3QgKiByZXN0cmljdCBmcmFtZSA9IHN0LT5mcmFtZTsKKwlyZWdpc3RlciBzcHhfd29yZDE2X3QgKiByZXN0cmljdCB3aW5kb3cgPSBzdC0+d2luZG93OworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCAqIHJlc3RyaWN0IG91dGJ1ZiA9IHN0LT5vdXRidWY7CisJcmVnaXN0ZXIgaW50IGZyYW1lc2l6ZSA9IHN0LT5mcmFtZV9zaXplOworCXJlZ2lzdGVyIGludCBOMiA9IE4gPDwgMTsKKwlyZWdpc3RlciBpbnQgTjMgPSBOMiAtIGZyYW1lc2l6ZTsKKwlyZWdpc3RlciBpbnQgTjQgPSAoZnJhbWVzaXplKSAtIE4zOworCXJlZ2lzdGVyIGludCBpOworCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfU1BFRVhQUkVQUk9DRVNTUlVOKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTQKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZiAgCisJZm9yICggaT0wIDsgaTxOMiA7IGkrKykKKwl7CXJlZ2lzdGVyIHNweF93b3JkMTZfdCBmaSA9IGZyYW1lW2ldOworCQlyZWdpc3RlciBzcHhfd29yZDE2X3Qgd2kgPSB3aW5kb3dbaV07CisKKwkJZnJhbWVbaV0gPSBNVUxUMTZfMTZfUTE1KGZpLCB3aSk7CisJfQorCWZvciAoaT0wO2k8TjM7aSsrKQorCXsJeFtpXSA9IG91dGJ1ZltpXSArIGZyYW1lW2ldOworCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWFBSRVBST0NFU1NSVU4pCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmIAorCisJZm9yICggaT0wO2k8TjQ7aSsrKQorCXsJeFtOMytpXSA9IGZyYW1lW04zK2ldOworCX0KKwkKKwltZW1jcHkob3V0YnVmLCBmcmFtZStmcmFtZXNpemUsIChOMykgKiBzaXplb2Yoc3B4X3dvcmQxNl90KSk7Cit9CisKKyNkZWZpbmUgT1ZFUlJJREVfU1BFRVhfUFJFUFJPQ0VTU19SVU4KK2ludCBzcGVleF9wcmVwcm9jZXNzX3J1bihTcGVleFByZXByb2Nlc3NTdGF0ZSAqIHJlc3RyaWN0IHN0LCBzcHhfaW50MTZfdCAqIHJlc3RyaWN0IHgpCit7CisJcmVnaXN0ZXIgaW50IGksIE4sIE0sIE5NOworCXJlZ2lzdGVyIHNweF93b3JkMzJfdCAqIHJlc3RyaWN0IHBzPXN0LT5wczsKKwlyZWdpc3RlciBzcHhfd29yZDMyX3QgWmZyYW1lOworCXJlZ2lzdGVyIHNweF93b3JkMTZfdCBQZnJhbWU7CisKKwlzdC0+bmJfYWRhcHQrKzsKKwlzdC0+bWluX2NvdW50Kys7CisJTiA9IHN0LT5wc19zaXplOworCU0gPSBzdC0+bmJhbmRzOworCU5NID0gTiArIE07CisKKwlwcmVwcm9jZXNzX3Jlc2lkdWVfZWNobyhzdCwgTiwgTk0pOworCXByZXByb2Nlc3NfYW5hbHlzaXMoc3QsIHgpOworCXVwZGF0ZV9ub2lzZV9wcm9iKHN0KTsKKwlwcmVwcm9jZXNzX3VwZGF0ZV9ub2lzZShzdCwgcHMsIE4pOworCisJaWYgKCBzdC0+bmJfYWRhcHQgPT0gMSApCisJewltZW1jcHkoc3QtPm9sZF9wcywgcHMsIChOTSkgKiBzaXplb2Yoc3B4X3dvcmQzMl90KSk7CisJfQorCisJcHJlcHJvY2Vzc19jb21wdXRlX1NOUihzdCwgcHMsIE5NKTsKKwlaZnJhbWUgPSBwcmVwcm9jZXNzX3Ntb290aF9TTlIoc3QsIE4sIE5NKTsKKwkKKworCXsKKwlyZWdpc3RlciBzcHhfd29yZDE2X3QgZWZmZWN0aXZlX2VjaG9fc3VwcHJlc3M7CisJCisJUGZyYW1lID0gUUNPTlNUMTYoLjFmLDE1KStNVUxUMTZfMTZfUTE1KFFDT05TVDE2KC44OTlmLDE1KSxxY3VydmUoRElWMzJfMTYoWmZyYW1lLE0pKSk7CisJZWZmZWN0aXZlX2VjaG9fc3VwcHJlc3MgPQlFWFRSQUNUMTYoUFNIUjMyKEFERDMyKE1VTFQxNl8xNihTVUIxNihRMTVfT05FLFBmcmFtZSksIHN0LT5lY2hvX3N1cHByZXNzKSwgCisJCQkJCQkJCU1VTFQxNl8xNihQZnJhbWUsIHN0LT5lY2hvX3N1cHByZXNzX2FjdGl2ZSkpLDE1KSk7CisJY29tcHV0ZV9nYWluX2Zsb29yKHN0LT5ub2lzZV9zdXBwcmVzcywgZWZmZWN0aXZlX2VjaG9fc3VwcHJlc3MsIHN0LT5ub2lzZStOLCBzdC0+ZWNob19ub2lzZStOLCBzdC0+Z2Fpbl9mbG9vcitOLCBNKTsKKyAgICAKKwl9CisKKwlwcmVwcm9jZXNzX2NvbXB1dGVfZW1nYWluKHN0LCBwcywgUGZyYW1lLCBOTSk7CisJcHJlcHJvY2Vzc19jb21wdXRlX2xpbmVhcl9nYWluKHN0LCBwcywgTik7CisKKyAgIAorCWlmICghc3QtPmRlbm9pc2VfZW5hYmxlZCkKKwl7CisJICAgcmVnaXN0ZXIgc3B4X3dvcmQxNl90ICogcmVzdHJpY3QgZ2FpbjIgPSBzdC0+Z2FpbjI7CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWFBSRVBST0NFU1NSVU4pCisjcHJhZ21hIFRDU191bnJvbGw9NAorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmICAKKwkJZm9yICggaT0wIDsgaTxOTSA7IGkrKyApCisJCXsgICBnYWluMltpXSA9IFExNV9PTkU7CisJCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9TUEVFWFBSRVBST0NFU1NSVU4pCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCisJfQorICAgICAKKwlwcmVwcm9jZXNzX2FwcGx5X2dhaW4oc3QsIE4pOworCisjaWZuZGVmIEZJWEVEX1BPSU5UCisJaWYgKHN0LT5hZ2NfZW5hYmxlZCkKKwl7CXNwZWV4X2NvbXB1dGVfYWdjKHN0LCBQZnJhbWUsIHN0LT5mdCk7CisJfQorI2VuZGlmCisKKworICAgc3B4X2lmZnQoc3QtPmZmdF9sb29rdXAsIHN0LT5mdCwgc3QtPmZyYW1lKTsKKworI2lmZGVmIEZJWEVEX1BPSU5UCisJcHJlcHJvY2Vzc19zY2FsZShzdCwgTik7CisjZW5kaWYKKworI2lmbmRlZiBGSVhFRF9QT0lOVAorCWlmICggc3QtPmFnY19lbmFibGVkICkKKwl7CXByZXByb2Nlc3NfYXBwbHlfYWdjKHN0LCBOKTsKKwl9CisjZW5kaWYKKworCXByZXByb2Nlc3NfdXBkYXRlKHN0LCB4LCBOKTsKKworCWlmICggc3QtPnZhZF9lbmFibGVkICkKKwl7CisJCWlmIChQZnJhbWUgPiBzdC0+c3BlZWNoX3Byb2Jfc3RhcnQgfHwgKHN0LT53YXNfc3BlZWNoICYmIFBmcmFtZSA+IHN0LT5zcGVlY2hfcHJvYl9jb250aW51ZSkpCisJCXsJc3QtPndhc19zcGVlY2g9MTsKKwkJCXJldHVybiAxOworCSAgCisJCX0gZWxzZQorCQl7CXN0LT53YXNfc3BlZWNoPTA7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSAKKwl7CXJldHVybiAxOworCX0KK30KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3Rtdi9wcm9maWxlX3RtLmggYi8zcmRwYXJ0eS9zcGVleC90bXYvcHJvZmlsZV90bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlY2FmYjcKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC90bXYvcHJvZmlsZV90bS5oCkBAIC0wLDAgKzEsNDA3IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9uZyBaaGlxaWFuICovCisvKioKKyAgIEBmaWxlIHByb2ZpbGVfdG0uaAorICAgQGF1dGhvciBIb25nIFpoaXFpYW4KKyAgIEBicmllZiBWYXJpb3VzIGNvbXBhdGliaWxpdHkgcm91dGluZXMgZm9yIFNwZWV4IChUcmlNZWRpYSB2ZXJzaW9uKQorKi8KKy8qCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFhpcGgub3JnIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisvKioKKyoJQHJlbWFya3MJVGhpcyBmaWxlIHByb3ZpZGUgc29tZSBjYXBhYmlsaXRpZXMgdG8gbWVhc3VyZSBjbG9jayBjeWNsZXMuCisqCQkJCVVzZSB0aGlzIGlmIHVuYWJsZSB0byBjb21waWxlIHdpdGggVHJpTWVkaWEgcHJvZmlsZSBvcHRpb25zCisqLworCitleHRlcm4gaW50IF9fcHJvZmlsZV9iZWdpbjsKK2V4dGVybiBpbnQgX19wcm9maWxlX2VuZDsKKworI2lmIFRNX1BST0ZJTEUKKyNkZWZpbmUJUFJPRklMRV9TVEFSVCgpCQkJCQkJCQkJCQkJXAorCQl7CQkJCQkJCQkJCQkJCQkJXAorCQkJX19wcm9maWxlX2JlZ2luID0gY3ljbGVzKCk7CQkJCQkJCQlcCisJCX0JCQkJCQkJCQkJCQkJCQlcCisKKyNkZWZpbmUgUFJPRklMRV9TVE9QKCkJCQkJCQkJCQkJCQlcCisJCXsJCQkJCQkJCQkJCQkJCQlcCisJCQlfX3Byb2ZpbGVfZW5kID0gY3ljbGVzKCk7CQkJCQkJCQlcCisJCQlwcmludGYoIiVzXHQlZFxuIiwgX19GVU5DVElPTl9fLCBlbmQgLSBiZWdpbik7CQkJXAorCQl9CQkJCQkJCQkJCQkJCQkJXAorCisjZWxzZQorI2RlZmluZSBQUk9GSUxFX1NUQVJUKCkKKyNkZWZpbmUgUFJPRklMRV9TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9TUFhBVVRPQ09SUgorI2RlZmluZQlfU1BYX0FVVE9DT1JSX1NUQVJUKCkJUFJPRklMRV9TVEFSVCgpCisjZGVmaW5lIF9TUFhfQVVUT0NPUlJfU1RPUCgpCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBfU1BYX0FVVE9DT1JSX1NUQVJUKCkKKyNkZWZpbmUJX1NQWF9BVVRPQ09SUl9TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9JTk5FUlBST0QKKyNkZWZpbmUJSU5ORVJQUk9EX1NUQVJUKCkJUFJPRklMRV9TVEFSVCgpCisjZGVmaW5lIElOTkVSUFJPRF9TVE9QKCkJUFJPRklMRV9TVE9QKCkKKyNlbHNlCisjZGVmaW5lIElOTkVSUFJPRF9TVEFSVCgpCisjZGVmaW5lCUlOTkVSUFJPRF9TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9QSVRDSFhDT1JSCisjZGVmaW5lCVBJVENIWENPUlJfU1RBUlQoKQlQUk9GSUxFX1NUQVJUKCkKKyNkZWZpbmUgUElUQ0hYQ09SUl9TVE9QKCkJUFJPRklMRV9TVE9QKCkKKyNlbHNlCisjZGVmaW5lIFBJVENIWENPUlJfU1RBUlQoKQorI2RlZmluZQlQSVRDSFhDT1JSX1NUT1AoKQorI2VuZGlmCisKKyNpZiBUTV9QUk9GSUxFX0NPTVBVVEVQSVRDSEVSUk9SCisjZGVmaW5lIENPTVBVVEVQSVRDSEVSUk9SX1NUQVJUKCkJUFJPRklMRV9TVEFSVCgpCisjZGVmaW5lIENPTVBVVEVQSVRDSEVSUk9SX1NUT1AoKQlQUk9GSUxFX1NUT1AoKQorI2Vsc2UKKyNkZWZpbmUgQ09NUFVURVBJVENIRVJST1JfU1RBUlQoKQorI2RlZmluZSBDT01QVVRFUElUQ0hFUlJPUl9TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9QSVRDSEdBSU5TRUFSQ0gzVEFQVlEKKyNkZWZpbmUgUElUQ0hHQUlOU0VBUkNIM1RBUFZRX1NUQVJUKCkJUFJPRklMRV9TVEFSVCgpCisjZGVmaW5lIFBJVENIR0FJTlNFQVJDSDNUQVBWUV9TVE9QKCkJUFJPRklMRV9TVE9QKCkKKyNlbHNlCisjZGVmaW5lIFBJVENIR0FJTlNFQVJDSDNUQVBWUV9TVEFSVCgpCisjZGVmaW5lIFBJVENIR0FJTlNFQVJDSDNUQVBWUV9TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9PUEVOTE9PUE5CRVNUUElUQ0gKKyNkZWZpbmUgT1BFTkxPT1BOQkVTVFBJVENIX1NUQVJUKCkJUFJPRklMRV9TVEFSVCgpCisjZGVmaW5lIE9QRU5MT09QTkJFU1RQSVRDSF9TVE9QKCkJUFJPRklMRV9TVE9QKCkKKyNlbHNlCisjZGVmaW5lIE9QRU5MT09QTkJFU1RQSVRDSF9TVEFSVCgpCisjZGVmaW5lIE9QRU5MT09QTkJFU1RQSVRDSF9TVE9QKCkKKyNlbmRpZgorCisKKyNpZiBUTV9QUk9GSUxFX0xTUF9JTlRFUlBPTEFURQorI2RlZmluZQlMU1BJTlRFUlBPTEFURV9TVEFSVCgpCVBST0ZJTEVfU1RBUlQoKQorI2RlZmluZSBMU1BJTlRFUlBPTEFURV9TVE9QKCkJUFJPRklMRV9TVE9QKCkKKyNlbHNlCisjZGVmaW5lIExTUElOVEVSUE9MQVRFX1NUQVJUKCkKKyNkZWZpbmUJTFNQSU5URVJQT0xBVEVfU1RPUCgpCisjZW5kaWYKKworI2lmIFRNX1BST0ZJTEVfQ0hFQlBPTFlFVkEKKyNkZWZpbmUJQ0hFQlBPTFlFVkFfU1RBUlQoKQlQUk9GSUxFX1NUQVJUKCkKKyNkZWZpbmUgQ0hFQlBPTFlFVkFfU1RPUCgpCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBDSEVCUE9MWUVWQV9TVEFSVCgpCisjZGVmaW5lCUNIRUJQT0xZRVZBX1NUT1AoKQorI2VuZGlmCisKKworI2lmIFRNX1BST0ZJTEVfQ09NUFVURVFVQU5UV0VJR0hUUworI2RlZmluZQlDT01QVVRFUVVBTlRXRUlHSFRTX1NUQVJUKCkJUFJPRklMRV9TVEFSVCgpCisjZGVmaW5lIENPTVBVVEVRVUFOVFdFSUdIVFNfU1RPUCgpCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBDT01QVVRFUVVBTlRXRUlHSFRTX1NUQVJUKCkKKyNkZWZpbmUJQ09NUFVURVFVQU5UV0VJR0hUU19TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9MU1BRVUFOVAorI2RlZmluZQlMU1BRVUFOVF9TVEFSVCgpCVBST0ZJTEVfU1RBUlQoKQorI2RlZmluZSBMU1BRVUFOVF9TVE9QKCkJCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBMU1BRVUFOVF9TVEFSVCgpCisjZGVmaW5lCUxTUFFVQU5UX1NUT1AoKQorI2VuZGlmCisKKyNpZiBUTV9QUk9GSUxFX0xTUFdFSUdIVFFVQU5UCisjZGVmaW5lCUxTUFdFSUdIVFFVQU5UX1NUQVJUKCkJCVBST0ZJTEVfU1RBUlQoKQorI2RlZmluZSBMU1BXRUlHSFRRVUFOVF9TVE9QKCkJCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBMU1BXRUlHSFRRVUFOVF9TVEFSVCgpCisjZGVmaW5lCUxTUFdFSUdIVFFVQU5UX1NUT1AoKQorI2VuZGlmCisKKyNpZiBUTV9QUk9GSUxFX0ZJUk1FTTE2CisjZGVmaW5lCUZJUk1FTTE2X1NUQVJUKCkJUFJPRklMRV9TVEFSVCgpCisjZGVmaW5lIEZJUk1FTTE2X1NUT1AoKQkJUFJPRklMRV9TVE9QKCkKKyNlbHNlCisjZGVmaW5lIEZJUk1FTTE2X1NUQVJUKCkKKyNkZWZpbmUJRklSTUVNMTZfU1RPUCgpCisjZW5kaWYKKworI2lmIFRNX1BST0ZJTEVfSUlSTUVNMTYKKyNkZWZpbmUJSUlSTUVNMTZfU1RBUlQoKQlQUk9GSUxFX1NUQVJUKCkKKyNkZWZpbmUgSUlSTUVNMTZfU1RPUCgpCQlQUk9GSUxFX1NUT1AoKQorI2Vsc2UKKyNkZWZpbmUgSUlSTUVNMTZfU1RBUlQoKQorI2RlZmluZQlJSVJNRU0xNl9TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9GSUxURVJNRU0xNgorI2RlZmluZQlGSUxURVJNRU0xNl9TVEFSVCgpCQlQUk9GSUxFX1NUQVJUKCkKKyNkZWZpbmUgRklMVEVSTUVNMTZfU1RPUCgpCQlQUk9GSUxFX1NUT1AoKQorI2Vsc2UKKyNkZWZpbmUgRklMVEVSTUVNMTZfU1RBUlQoKQorI2RlZmluZQlGSUxURVJNRU0xNl9TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9DT01QVVRFUk1TMTYKKyNkZWZpbmUJQ09NUFVURVJNUzE2X1NUQVJUKCkJUFJPRklMRV9TVEFSVCgpCisjZGVmaW5lIENPTVBVVEVSTVMxNl9TVE9QKCkJCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBDT01QVVRFUk1TMTZfU1RBUlQoKQorI2RlZmluZQlDT01QVVRFUk1TMTZfU1RPUCgpCisjZW5kaWYKKwkKKyNpZiBUTV9QUk9GSUxFX05PUk1BTElaRTE2CisjZGVmaW5lCU5PUk1BTElaRTE2X1NUQVJUKCkJCVBST0ZJTEVfU1RBUlQoKQorI2RlZmluZSBOT1JNQUxJWkUxNl9TVE9QKCkJCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBOT1JNQUxJWkUxNl9TVEFSVCgpCisjZGVmaW5lCU5PUk1BTElaRTE2X1NUT1AoKQorI2VuZGlmCisKKyNpZiBUTV9QUk9GSUxFX0JXTFBDCisjZGVmaW5lCUJXTFBDX1NUQVJUKCkJCVBST0ZJTEVfU1RBUlQoKQorI2RlZmluZSBCV0xQQ19TVE9QKCkJCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBCV0xQQ19TVEFSVCgpCisjZGVmaW5lIEJXTFBDX1NUT1AoKQorI2VuZGlmCisKKyNpZiBUTV9QUk9GSUxFX0hJR0hQQVNTCisjZGVmaW5lCUhJR0hQQVNTX1NUQVJUKCkJUFJPRklMRV9TVEFSVCgpCisjZGVmaW5lIEhJR0hQQVNTX1NUT1AoKQkJUFJPRklMRV9TVE9QKCkKKyNlbHNlCisjZGVmaW5lIEhJR0hQQVNTX1NUQVJUKCkKKyNkZWZpbmUgSElHSFBBU1NfU1RPUCgpCisjZW5kaWYKKworI2lmIFRNX1BST0ZJTEVfU0lHTkFMTVVMCisjZGVmaW5lCVNJR05BTE1VTF9TVEFSVCgpCQlQUk9GSUxFX1NUQVJUKCkKKyNkZWZpbmUgU0lHTkFMTVVMX1NUT1AoKQkJUFJPRklMRV9TVE9QKCkKKyNlbHNlCisjZGVmaW5lIFNJR05BTE1VTF9TVEFSVCgpCisjZGVmaW5lIFNJR05BTE1VTF9TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9TSUdOQUxESVYKKyNkZWZpbmUJU0lHTkFMRElWX1NUQVJUKCkJCVBST0ZJTEVfU1RBUlQoKQorI2RlZmluZSBTSUdOQUxESVZfU1RPUCgpCQlQUk9GSUxFX1NUT1AoKQorI2Vsc2UKKyNkZWZpbmUgU0lHTkFMRElWX1NUQVJUKCkKKyNkZWZpbmUgU0lHTkFMRElWX1NUT1AoKQorI2VuZGlmCisKKyNpZiBUTV9QUk9GSUxFX0NPTVBVVEVJTVBVTFNFUkVTUE9OU0UKKyNkZWZpbmUJQ09NUFVURUlNUFVMU0VSRVNQT05TRV9TVEFSVCgpCQlQUk9GSUxFX1NUQVJUKCkKKyNkZWZpbmUgQ09NUFVURUlNUFVMU0VSRVNQT05TRV9TVE9QKCkJCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBDT01QVVRFSU1QVUxTRVJFU1BPTlNFX1NUQVJUKCkKKyNkZWZpbmUgQ09NUFVURUlNUFVMU0VSRVNQT05TRV9TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9DT01QVVRFV0VJR0hURURDT0RFQk9PSworI2RlZmluZQlDT01QVVRFV0VJR0hURURDT0RFQk9PS19TVEFSVCgpCQkJUFJPRklMRV9TVEFSVCgpCisjZGVmaW5lIENPTVBVVEVXRUlHSFRFRENPREVCT09LX1NUT1AoKQkJCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBDT01QVVRFV0VJR0hURURDT0RFQk9PS19TVEFSVCgpCisjZGVmaW5lCUNPTVBVVEVXRUlHSFRFRENPREVCT09LX1NUT1AoKQorI2VuZGlmCisKKyNpZiBUTV9QUk9GSUxFX1RBUkdFVFVQREFURQorI2RlZmluZQlUQVJHRVRVUERBVEVfU1RBUlQoKQkJCVBST0ZJTEVfU1RBUlQoKQorI2RlZmluZSBUQVJHRVRVUERBVEVfU1RPUCgpCQkJCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBUQVJHRVRVUERBVEVfU1RBUlQoKQorI2RlZmluZQlUQVJHRVRVUERBVEVfU1RPUCgpCisjZW5kaWYKKworCisjaWYgVE1fUFJPRklMRV9WUU5CRVNUCisjZGVmaW5lCVZRTkJFU1RfU1RBUlQoKQkJUFJPRklMRV9TVEFSVCgpCisjZGVmaW5lIFZRTkJFU1RfU1RPUCgpCQlQUk9GSUxFX1NUT1AoKQorI2Vsc2UKKyNkZWZpbmUgVlFOQkVTVF9TVEFSVCgpCisjZGVmaW5lCVZRTkJFU1RfU1RPUCgpCisjZW5kaWYKKworI2lmIFRNX1BST0ZJTEVfVlFOQkVTVFNJR04KKyNkZWZpbmUJVlFOQkVTVFNJR05fU1RBUlQoKQkJUFJPRklMRV9TVEFSVCgpCisjZGVmaW5lIFZRTkJFU1RTSUdOX1NUT1AoKQkJUFJPRklMRV9TVE9QKCkKKyNlbHNlCisjZGVmaW5lIFZRTkJFU1RTSUdOX1NUQVJUKCkKKyNkZWZpbmUJVlFOQkVTVFNJR05fU1RPUCgpCisjZW5kaWYKKworI2lmIFRNX1BST0ZJTEVfUFJFUFJPQ0VTU0FOQUxZU0lTCisjZGVmaW5lCVBSRVBST0NFU1NBTkFZTFNJU19TVEFSVCgpCQlQUk9GSUxFX1NUQVJUKCkKKyNkZWZpbmUgUFJFUFJPQ0VTU0FOQVlMU0lTX1NUT1AoKQkJUFJPRklMRV9TVE9QKCkKKyNlbHNlCisjZGVmaW5lIFBSRVBST0NFU1NBTkFZTFNJU19TVEFSVCgpCisjZGVmaW5lCVBSRVBST0NFU1NBTkFZTFNJU19TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9VUERBVEVOT0lTRVBST0IKKyNkZWZpbmUJVVBEQVRFTk9JU0VQUk9CX1NUQVJUKCkJCVBST0ZJTEVfU1RBUlQoKQorI2RlZmluZSBVUERBVEVOT0lTRVBST0JfU1RPUCgpCQlQUk9GSUxFX1NUT1AoKQorI2Vsc2UKKyNkZWZpbmUgVVBEQVRFTk9JU0VQUk9CX1NUQVJUKCkKKyNkZWZpbmUJVVBEQVRFTk9JU0VQUk9CX1NUT1AoKQorI2VuZGlmCisKKyNpZiBUTV9QUk9GSUxFX0NPTVBVVEVHQUlORkxPT1IKKyNkZWZpbmUJQ09NUFVURUdBSU5GTE9PUl9TVEFSVCgpCVBST0ZJTEVfU1RBUlQoKQorI2RlZmluZSBDT01QVVRFR0FJTkZMT09SX1NUT1AoKQkJUFJPRklMRV9TVE9QKCkKKyNlbHNlCisjZGVmaW5lIENPTVBVVEVHQUlORkxPT1JfU1RBUlQoKQorI2RlZmluZQlDT01QVVRFR0FJTkZMT09SX1NUT1AoKQorI2VuZGlmCisKKyNpZiBUTV9QUk9GSUxFX0ZJTFRFUkRDTk9UQ0gxNgorI2RlZmluZSBGSUxURVJEQ05PVENIMTZfU1RBUlQoKQkJUFJPRklMRV9TVEFSVCgpCisjZGVmaW5lIEZJTFRFUkRDTk9UQ0gxNl9TVE9QKCkJCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBGSUxURVJEQ05PVENIMTZfU1RBUlQoKQorI2RlZmluZQlGSUxURVJEQ05PVENIMTZfU1RPUCgpCisjZW5kaWYKKworI2lmIFRNX1BST0ZJTEVfTURGSU5ORVJQUk9ECisjZGVmaW5lIE1ERklOTkVSUFJPRF9TVEFSVCgpCQlQUk9GSUxFX1NUQVJUKCkKKyNkZWZpbmUgTURGSU5ORVJQUk9EX1NUT1AoKQkJCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBNREZJTk5FUlBST0RfU1RBUlQoKQorI2RlZmluZQlNREZJTk5FUlBST0RfU1RPUCgpCisjZW5kaWYKKworI2lmIFRNX1BST0ZJTEVfU1BFQ1RSQUxNVUxBQ0NVTQorI2RlZmluZSBTUEVDVFJBTE1VTEFDQ1VNX1NUQVJUKCkJCVBST0ZJTEVfU1RBUlQoKQorI2RlZmluZSBTUEVDVFJBTE1VTEFDQ1VNX1NUT1AoKQkJCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBTUEVDVFJBTE1VTEFDQ1VNX1NUQVJUKCkKKyNkZWZpbmUJU1BFQ1RSQUxNVUxBQ0NVTV9TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9XRUlHSFRFRFNQRUNUUkFMTVVMQ09OSgorI2RlZmluZSBXRUlHSFRFRFNQRUNUUkFMTVVMQ09OSl9TVEFSVCgpCQlQUk9GSUxFX1NUQVJUKCkKKyNkZWZpbmUgV0VJR0hURURTUEVDVFJBTE1VTENPTkpfU1RPUCgpCQlQUk9GSUxFX1NUT1AoKQorI2Vsc2UKKyNkZWZpbmUgV0VJR0hURURTUEVDVFJBTE1VTENPTkpfU1RBUlQoKQorI2RlZmluZQlXRUlHSFRFRFNQRUNUUkFMTVVMQ09OSl9TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9NREZBREpVU1RQUk9QCisjZGVmaW5lIE1ERkFESlVTVFBST1BfU1RBUlQoKQkJUFJPRklMRV9TVEFSVCgpCisjZGVmaW5lIE1ERkFESlVTVFBST1BfU1RPUCgpCQlQUk9GSUxFX1NUT1AoKQorI2Vsc2UKKyNkZWZpbmUgTURGQURKVVNUUFJPUF9TVEFSVCgpCisjZGVmaW5lCU1ERkFESlVTVFBST1BfU1RPUCgpCisjZW5kaWYKKworI2lmIFRNX1BST0ZJTEVfU1BFRVhFQ0hPR0VUUkVTSURVQUwKKyNkZWZpbmUgU1BFRVhFQ0hPR0VUUkVTSURVQUxfU1RBUlQoKQlQUk9GSUxFX1NUQVJUKCkKKyNkZWZpbmUgU1BFRVhFQ0hPR0VUUkVTSURVQUxfU1RPUCgpCQlQUk9GSUxFX1NUT1AoKQorI2Vsc2UKKyNkZWZpbmUgU1BFRVhFQ0hPR0VUUkVTSURVQUxfU1RBUlQoKQorI2RlZmluZQlTUEVFWEVDSE9HRVRSRVNJRFVBTF9TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9MU1BFTkZPUkNFTUFSR0lOCisjZGVmaW5lIExTUEVORk9SQ0VNQVJHSU5fU1RBUlQoKQlQUk9GSUxFX1NUQVJUKCkKKyNkZWZpbmUgTFNQRU5GT1JDRU1BUkdJTl9TVE9QKCkJCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBMU1BFTkZPUkNFTUFSR0lOX1NUQVJUKCkKKyNkZWZpbmUJTFNQRU5GT1JDRU1BUkdJTl9TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9MU1BUT0xQQworI2RlZmluZSBMU1BUT0xQQ19TVEFSVCgpCVBST0ZJTEVfU1RBUlQoKQorI2RlZmluZSBMU1BUT0xQQ19TVE9QKCkJCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBMU1BUT0xQQ19TVEFSVCgpCisjZGVmaW5lCUxTUFRPTFBDX1NUT1AoKQorI2VuZGlmCisKKyNpZiBUTV9QUk9GSUxFX01BWElNSVpFUkFOR0UKKyNkZWZpbmUgTUFYSU1JWkVSQU5HRV9TVEFSVCgpCVBST0ZJTEVfU1RBUlQoKQorI2RlZmluZSBNQVhJTUlaRVJBTkdFX1NUT1AoKQlQUk9GSUxFX1NUT1AoKQorI2Vsc2UKKyNkZWZpbmUgTUFYSU1JWkVSQU5HRV9TVEFSVCgpCisjZGVmaW5lCU1BWElNSVpFUkFOR0VfU1RPUCgpCisjZW5kaWYKKworI2lmIFRNX1BST0ZJTEVfUkVOT1JNUkFOR0UKKyNkZWZpbmUgUkVOT1JNUkFOR0VfU1RBUlQoKQlQUk9GSUxFX1NUQVJUKCkKKyNkZWZpbmUgUkVOT1JNUkFOR0VfU1RPUCgpCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBSRU5PUk1SQU5HRV9TVEFSVCgpCisjZGVmaW5lCVJFTk9STVJBTkdFX1NUT1AoKQorI2VuZGlmCisKKyNpZiBUTV9QUk9GSUxFX1BPV0VSU1BFQ1RSVU0KKyNkZWZpbmUgUE9XRVJTUEVDVFJVTV9TVEFSVCgpCVBST0ZJTEVfU1RBUlQoKQorI2RlZmluZSBQT1dFUlNQRUNUUlVNX1NUT1AoKQlQUk9GSUxFX1NUT1AoKQorI2Vsc2UKKyNkZWZpbmUgUE9XRVJTUEVDVFJVTV9TVEFSVCgpCisjZGVmaW5lCVBPV0VSU1BFQ1RSVU1fU1RPUCgpCisjZW5kaWYKKworI2lmIFRNX1BST0ZJTEVfUU1GU1lOVEgKKyNkZWZpbmUgUU1GU1lOVEhfU1RBUlQoKQlQUk9GSUxFX1NUQVJUKCkKKyNkZWZpbmUgUU1GU1lOVEhfU1RPUCgpCQlQUk9GSUxFX1NUT1AoKQorI2Vsc2UKKyNkZWZpbmUgUU1GU1lOVEhfU1RBUlQoKQorI2RlZmluZQlRTUZTWU5USF9TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9RTUZERUNPTVAKKyNkZWZpbmUgUU1GREVDT01QX1NUQVJUKCkJUFJPRklMRV9TVEFSVCgpCisjZGVmaW5lIFFNRkRFQ09NUF9TVE9QKCkJUFJPRklMRV9TVE9QKCkKKyNlbHNlCisjZGVmaW5lIFFNRkRFQ09NUF9TVEFSVCgpCisjZGVmaW5lCVFNRkRFQ09NUF9TVE9QKCkKKyNlbmRpZgorCisjaWYgVE1fUFJPRklMRV9GSUxURVJCQU5LQ09NUFVURUJBTkszMgorI2RlZmluZSBGSUxURVJCQU5LQ09NUFVURUJBTkszMl9TVEFSVCgpCVBST0ZJTEVfU1RBUlQoKQorI2RlZmluZSBGSUxURVJCQU5LQ09NUFVURUJBTkszMl9TVE9QKCkJUFJPRklMRV9TVE9QKCkKKyNlbHNlCisjZGVmaW5lIEZJTFRFUkJBTktDT01QVVRFQkFOSzMyX1NUQVJUKCkKKyNkZWZpbmUJRklMVEVSQkFOS0NPTVBVVEVCQU5LMzJfU1RPUCgpCisjZW5kaWYKKworI2lmIFRNX1BST0ZJTEVfRklMVEVSQkFOS0NPTVBVVEVQU0QxNgorI2RlZmluZSBGSUxURVJCQU5LQ09NUFVURVBTRDE2X1NUQVJUKCkJUFJPRklMRV9TVEFSVCgpCisjZGVmaW5lIEZJTFRFUkJBTktDT01QVVRFUFNEMTZfU1RPUCgpCVBST0ZJTEVfU1RPUCgpCisjZWxzZQorI2RlZmluZSBGSUxURVJCQU5LQ09NUFVURVBTRDE2X1NUQVJUKCkKKyNkZWZpbmUJRklMVEVSQkFOS0NPTVBVVEVQU0QxNl9TVE9QKCkKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3Rtdi9xdWFudF9sc3BfdG0uaCBiLzNyZHBhcnR5L3NwZWV4L3Rtdi9xdWFudF9sc3BfdG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjQ5ZmNhCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvdG12L3F1YW50X2xzcF90bS5oCkBAIC0wLDAgKzEsNDQ4IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9uZyBaaGlxaWFuICovCisvKioKKyAgIEBmaWxlIHF1YW50X2xzcF90bS5oCisgICBAYXV0aG9yIEhvbmcgWmhpcWlhbgorICAgQGJyaWVmIFZhcmlvdXMgY29tcGF0aWJpbGl0eSByb3V0aW5lcyBmb3IgU3BlZXggKFRyaU1lZGlhIHZlcnNpb24pCisqLworLyoKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKyNpbmNsdWRlIDxvcHMvY3VzdG9tX2RlZnMuaD4KKyNpbmNsdWRlICJwcm9maWxlX3RtLmgiCisKKyNpZmRlZiBGSVhFRF9QT0lOVAorCisjZGVmaW5lIE9WRVJSSURFX0NPTVBVVEVfUVVBTlRfV0VJR0hUUworc3RhdGljIHZvaWQgY29tcHV0ZV9xdWFudF93ZWlnaHRzKEludDE2ICpxbHNwLCBJbnQxNiAqcXcsIGludCBvcmRlcikKK3sKKwlpbnQJCXFsc3BpLCBxbHNwaWk7CisJaW50CQl3MSwgdzI7CisJaW50CQlpOworCisJVE1ERUJVR19BTElHTk1FTShxbHNwKTsKKwlUTURFQlVHX0FMSUdOTUVNKHF3KTsKKworCUNPTVBVVEVRVUFOVFdFSUdIVFNfU1RBUlQoKTsKKworCS0tb3JkZXI7CisKKwlxbHNwaQk9IChpbnQpcWxzcFswXTsJCisJcWxzcGlpCT0gKGludClxbHNwWzFdOworCXcxCQk9IHFsc3BpOwkKKwl3MgkJPSBxbHNwaWkgLSBxbHNwaTsKKworCXF3WzBdCT0gODE5MjAgLyAoMzAwICsgaW1pbih3MSx3MikpOworCisJZm9yICggaT0xIDsgaTxvcmRlciA7ICsraSApCisJewlxbHNwaQk9IHFsc3BpaTsKKwkJcWxzcGlpCT0gcWxzcFtpKzFdOworCisJCXcxID0gdzI7CisJCXcyID0gcWxzcGlpIC0gcWxzcGk7CisKKwkJcXdbaV0gPSA4MTkyMCAvICgzMDAgKyBpbWluKHcxLHcyKSk7CisJfQorCisJdzEgPSBMU1BfUEkgLSBxbHNwaWk7CisJcXdbaV0gPSA4MTkyMCAvICgzMDAgKyBpbWluKHcxLHcyKSk7CisKKwlDT01QVVRFUVVBTlRXRUlHSFRTX1NUT1AoKTsKK30KKworCisKKyNkZWZpbmUgT1ZFUlJJREVfTFNQX1FVQU5UCitzdGF0aWMgaW50IGxzcF9xdWFudChJbnQxNiAqeCwgY29uc3Qgc2lnbmVkIGNoYXIgKmNkYmssIGludCBuYlZlYywgaW50IG5iRGltKQoreworCXJlZ2lzdGVyIGludCBiZXN0X2Rpc3Q9VkVSWV9MQVJHRTMyOworCXJlZ2lzdGVyIGludCBiZXN0X2lkPTA7CisJcmVnaXN0ZXIgaW50IGksIGo7CisJcmVnaXN0ZXIgaW50IGR0MCwgZHQxLCBkdDIsIGR0MzsKKwlyZWdpc3RlciBpbnQgY2IwLCBjYjEsIGNiMiwgY2IzLCB4eDsKKwlyZWdpc3RlciBpbnQgcHRyX2luYyA9IG5iRGltICogMzsKKwlyZWdpc3RlciBpbnQgZml2ZSA9IDU7CisgICAgY29uc3Qgc2lnbmVkIGNoYXIgKnB0cjsKKworCVRNREVCVUdfQUxJR05NRU0oeCk7CisKKwlMU1BRVUFOVF9TVEFSVCgpOworCisJZm9yICggaT0wLCBwdHI9Y2RiayA7IGk8bmJWZWMgOyBpKz00LCBwdHIgKz0gcHRyX2luYyApCisJewlkdDMgPSBkdDIgPSBkdDEgPSBkdDAgPSAwOworCisJCWZvciAoIGo9MCA7IGogPG5iRGltIDsgaiArPSAyICkKKwkJeworCQkJeHgJICA9ICBsZDMyeCh4LGo+PjEpOworCQkJY2IwCSAgPSAgcGFjazE2bHNiKChpbnQpcHRyWzFdLCAoaW50KXB0clswXSk7CisJCQljYjAJICA9ICBkdWFsYXNsKGNiMCxmaXZlKTsKKwkJCWNiMAkgID0gIGRzcGlkdWFsc3ViKHh4LGNiMCk7CisJCQlkdDAJICArPSBpZmlyMTYoY2IwLGNiMCk7CisKKwkJCWNiMQkgID0JIHBhY2sxNmxzYigoaW50KXB0cltuYkRpbSsxXSwgKGludClwdHJbbmJEaW1dKTsKKwkJCWNiMQkgID0gIGR1YWxhc2woY2IxLGZpdmUpOworCQkJY2IxICAgPSAgZHNwaWR1YWxzdWIoeHgsY2IxKTsKKwkJCWR0MSAgICs9IGlmaXIxNihjYjEsIGNiMSk7CisKKwkJCWNiMgkgID0JIHBhY2sxNmxzYigoaW50KXB0cltuYkRpbSoyKzFdLCAoaW50KXB0cltuYkRpbSoyXSk7CisJCQljYjIJICA9ICBkdWFsYXNsKGNiMixmaXZlKTsKKwkJCWNiMgkgID0gIGRzcGlkdWFsc3ViKHh4LGNiMik7CisJCQlkdDIgICArPSBpZmlyMTYoY2IyLCBjYjIpOworCisJCQljYjMJICA9CSBwYWNrMTZsc2IoKGludClwdHJbbmJEaW0qMysxXSwgKGludClwdHJbbmJEaW0qM10pOworCQkJY2IzCSAgPSAgZHVhbGFzbChjYjMsZml2ZSk7CisJCQljYjMJICA9ICBkc3BpZHVhbHN1Yih4eCxjYjMpOworCQkJZHQzICAgKz0gaWZpcjE2KGNiMywgY2IzKTsKKworCQkJcHRyICs9IDI7CisJCX0KKworCQlpZiAoIGR0MDxiZXN0X2Rpc3QgKQorCQl7CWJlc3RfZGlzdAk9CWR0MDsKKwkJCWJlc3RfaWQJCT0JaTsKKwkJfQorCisJCWlmICggZHQxPGJlc3RfZGlzdCApCisJCXsJYmVzdF9kaXN0CT0JZHQxOworCQkJYmVzdF9pZAkJPQlpKzE7CisJCX0KKwkJCisJCWlmICggZHQyPGJlc3RfZGlzdCApCisJCXsJYmVzdF9kaXN0CT0JZHQyOworCQkJYmVzdF9pZAkJPQlpKzI7CisJCX0KKworCQlpZiAoIGR0MzxiZXN0X2Rpc3QgKQorCQl7CWJlc3RfZGlzdAk9CWR0MzsKKwkJCWJlc3RfaWQJCT0JaSszOworCQl9CisJfQorCisJZm9yICggaj0wLHB0cj1jZGJrK2Jlc3RfaWQqbmJEaW0gOyBqPG5iRGltIDsgais9MiApCisJewl4eAkgID0gIGxkMzJ4KHgsaj4+MSk7CisJCWNiMAkgID0gIHBhY2sxNmxzYigoaW50KXB0cltqKzFdLCAoaW50KXB0cltqXSk7CisJCWNiMAkgID0gIGR1YWxhc2woY2IwLGZpdmUpOworCQlkdDAJICA9ICBkc3BpZHVhbHN1Yih4eCxjYjApOworCQlzdDMyZChqPDwxLCB4LCBkdDApOworIAl9CisKKwlMU1BRVUFOVF9TVE9QKCk7CisJcmV0dXJuIGJlc3RfaWQ7Cit9CisKKworI2RlZmluZSBPVkVSUklERV9MU1BfV0VJR0hUX1FVQU5UCitzdGF0aWMgaW50IGxzcF93ZWlnaHRfcXVhbnQoSW50MTYgKngsIEludDE2ICp3ZWlnaHQsIGNvbnN0IHNpZ25lZCBjaGFyICpjZGJrLCBpbnQgbmJWZWMsIGludCBuYkRpbSkKK3sKKwlyZWdpc3RlciBpbnQgYmVzdF9kaXN0PVZFUllfTEFSR0UzMjsKKwlyZWdpc3RlciBpbnQgYmVzdF9pZD0wOworCXJlZ2lzdGVyIGludCBpLCBqOworCXJlZ2lzdGVyIGludCBkdDEsIGR0MiwgZHQzLCBkdDQ7CisJcmVnaXN0ZXIgaW50IGNiMSwgY2IyLCBjYjMsIGNiNCwgd3QsIHh4OworCXJlZ2lzdGVyIGludCBwdHJfaW5jID0gbmJEaW0gKiAzOworCWNvbnN0IHNpZ25lZCBjaGFyICpwdHI7CisKKwlMU1BXRUlHSFRRVUFOVF9TVEFSVCgpOworCisJZm9yICggaT0wLCBwdHI9Y2RiayA7IGk8bmJWZWMgOyBpKz00LCBwdHIgKz0gcHRyX2luYyApCisJewlkdDQgPSBkdDMgPSBkdDIgPSBkdDEgPSAwOworCQkJCisJCWZvciAoIGo9MCA7IGo8bmJEaW0gOyArK2ogKQorCQl7CXd0CSAgPSAgd2VpZ2h0W2pdOworCQkJeHgJICA9ICB4W2pdOworCisJCQljYjEJICA9ICB4eCAtIChwdHJbMF0JCTw8IDUpOworCQkJY2IyCSAgPSAgeHggLSAocHRyW25iRGltXQk8PCA1KTsKKwkJCWNiMwkgID0gIHh4IC0gKHB0cltuYkRpbSoyXSA8PCA1KTsKKwkJCWNiNAkgID0gIHh4IC0gKHB0cltuYkRpbSozXSA8PCA1KTsKKworCQkJKytwdHI7CisKKwkJCWNiMQkgICo9IGNiMTsKKwkJCWNiMgkgICo9IGNiMjsKKwkJCWNiMwkgICo9IGNiMzsKKwkJCWNiNAkgICo9IGNiNDsKKworCQkJZHQxICs9ICh3dCAqIChjYjEgPj4gMTUpKSArICgod3QgKiAoY2IxICYgMHg3ZmZmKSkgPj4gMTUpOworCQkJZHQyICs9ICh3dCAqIChjYjIgPj4gMTUpKSArICgod3QgKiAoY2IyICYgMHg3ZmZmKSkgPj4gMTUpOworCQkJZHQzICs9ICh3dCAqIChjYjMgPj4gMTUpKSArICgod3QgKiAoY2IzICYgMHg3ZmZmKSkgPj4gMTUpOworCQkJZHQ0ICs9ICh3dCAqIChjYjQgPj4gMTUpKSArICgod3QgKiAoY2I0ICYgMHg3ZmZmKSkgPj4gMTUpOworCisJCX0KKworCQlpZiAoIGR0MTxiZXN0X2Rpc3QgKQorCQl7CWJlc3RfZGlzdAk9CWR0MTsKKwkJCWJlc3RfaWQJCT0JaTsKKwkJfQorCisJCWlmICggZHQyPGJlc3RfZGlzdCApCisJCXsJYmVzdF9kaXN0CT0JZHQyOworCQkJYmVzdF9pZAkJPQlpKzE7CisJCX0KKwkJCisJCWlmICggZHQzPGJlc3RfZGlzdCApCisJCXsJYmVzdF9kaXN0CT0JZHQzOworCQkJYmVzdF9pZAkJPQlpKzI7CisJCX0KKworCQlpZiAoIGR0NDxiZXN0X2Rpc3QgKQorCQl7CWJlc3RfZGlzdAk9CWR0NDsKKwkJCWJlc3RfaWQJCT0JaSszOworCQl9CisJfQorCisJZm9yICggaj0wIDsgajxuYkRpbSA7ICsraiApCisJewl4W2pdID0geFtqXSAtICgoSW50MTYpY2Ria1tiZXN0X2lkKm5iRGltK2pdIDw8IDUpOworCX0KKworCUxTUFdFSUdIVFFVQU5UX1NUT1AoKTsKKworCXJldHVybiBiZXN0X2lkOworfQorCisjaWYgMAorLy8gVE9ETzogdW5yb2xsIGxvb3BzCisjZGVmaW5lIE9WRVJSSURFX0xTUF9RVUFOVF9OQgordm9pZCBsc3BfcXVhbnRfbmIoc3B4X2xzcF90ICpsc3AsIHNweF9sc3BfdCAqcWxzcCwgaW50IG9yZGVyLCBTcGVleEJpdHMgKmJpdHMpCit7CisgICBpbnQgaTsKKyAgIGludCBpZDsKKyAgIHNweF93b3JkMTZfdCBxdWFudF93ZWlnaHRbMTBdOworICAgCisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIHFsc3BbaV09bHNwW2ldOworCisgICBjb21wdXRlX3F1YW50X3dlaWdodHMocWxzcCwgcXVhbnRfd2VpZ2h0LCBvcmRlcik7CisKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgcWxzcFtpXT1TVUIxNihxbHNwW2ldLExTUF9MSU5FQVIoaSkpOworCisjaWZuZGVmIEZJWEVEX1BPSU5UCisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIHFsc3BbaV0gPSBMU1BfU0NBTEUqcWxzcFtpXTsKKyNlbmRpZgorICAgaWQgPSBsc3BfcXVhbnQocWxzcCwgY2Ria19uYiwgTkJfQ0RCS19TSVpFLCBvcmRlcik7CisgICBzcGVleF9iaXRzX3BhY2soYml0cywgaWQsIDYpOworCisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIHFsc3BbaV0qPTI7CisgCisgICBpZCA9IGxzcF93ZWlnaHRfcXVhbnQocWxzcCwgcXVhbnRfd2VpZ2h0LCBjZGJrX25iX2xvdzEsIE5CX0NEQktfU0laRV9MT1cxLCA1KTsKKyAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBpZCwgNik7CisKKyAgIGZvciAoaT0wO2k8NTtpKyspCisgICAgICBxbHNwW2ldKj0yOworCisgICBpZCA9IGxzcF93ZWlnaHRfcXVhbnQocWxzcCwgcXVhbnRfd2VpZ2h0LCBjZGJrX25iX2xvdzIsIE5CX0NEQktfU0laRV9MT1cyLCA1KTsKKyAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBpZCwgNik7CisKKyAgIGlkID0gbHNwX3dlaWdodF9xdWFudChxbHNwKzUsIHF1YW50X3dlaWdodCs1LCBjZGJrX25iX2hpZ2gxLCBOQl9DREJLX1NJWkVfSElHSDEsIDUpOworICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIGlkLCA2KTsKKworICAgZm9yIChpPTU7aTwxMDtpKyspCisgICAgICBxbHNwW2ldKj0yOworCisgICBpZCA9IGxzcF93ZWlnaHRfcXVhbnQocWxzcCs1LCBxdWFudF93ZWlnaHQrNSwgY2Ria19uYl9oaWdoMiwgTkJfQ0RCS19TSVpFX0hJR0gyLCA1KTsKKyAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBpZCwgNik7CisKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldPVBTSFIxNihxbHNwW2ldLDIpOworI2Vsc2UKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgcWxzcFtpXT1xbHNwW2ldICogLjAwMDk3NjU2OworI2VuZGlmCisKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgcWxzcFtpXT1sc3BbaV0tcWxzcFtpXTsKK30KKworCisjZGVmaW5lIE9WRVJSSURFX0xTUF9VTlFVQU5UX05CCit2b2lkIGxzcF91bnF1YW50X25iKHNweF9sc3BfdCAqbHNwLCBpbnQgb3JkZXIsIFNwZWV4Qml0cyAqYml0cykKK3sKKyAgIGludCBpLCBpZDsKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgbHNwW2ldPUxTUF9MSU5FQVIoaSk7CisKKyAgIGlkPXNwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKGJpdHMsIDYpOworICAgZm9yIChpPTA7aTwxMDtpKyspCisgICAgICBsc3BbaV0gPSBBREQzMihsc3BbaV0sIExTUF9ESVZfMjU2KGNkYmtfbmJbaWQqMTAraV0pKTsKKworICAgaWQ9c3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgNik7CisgICBmb3IgKGk9MDtpPDU7aSsrKQorICAgICAgbHNwW2ldID0gQUREMTYobHNwW2ldLCBMU1BfRElWXzUxMihjZGJrX25iX2xvdzFbaWQqNStpXSkpOworCisgICBpZD1zcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCA2KTsKKyAgIGZvciAoaT0wO2k8NTtpKyspCisgICAgICBsc3BbaV0gPSBBREQzMihsc3BbaV0sIExTUF9ESVZfMTAyNChjZGJrX25iX2xvdzJbaWQqNStpXSkpOworCisgICBpZD1zcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCA2KTsKKyAgIGZvciAoaT0wO2k8NTtpKyspCisgICAgICBsc3BbaSs1XSA9IEFERDMyKGxzcFtpKzVdLCBMU1BfRElWXzUxMihjZGJrX25iX2hpZ2gxW2lkKjUraV0pKTsKKyAgIAorICAgaWQ9c3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQoYml0cywgNik7CisgICBmb3IgKGk9MDtpPDU7aSsrKQorICAgICAgbHNwW2krNV0gPSBBREQzMihsc3BbaSs1XSwgTFNQX0RJVl8xMDI0KGNkYmtfbmJfaGlnaDJbaWQqNStpXSkpOworfQorCisjZGVmaW5lIE9WRVJSSURFX0xTUF9RVUFOVF9MQlIKK3ZvaWQgbHNwX3F1YW50X2xicihzcHhfbHNwX3QgKmxzcCwgc3B4X2xzcF90ICpxbHNwLCBpbnQgb3JkZXIsIFNwZWV4Qml0cyAqYml0cykKK3sKKyAgIGludCBpOworICAgaW50IGlkOworICAgc3B4X3dvcmQxNl90IHF1YW50X3dlaWdodFsxMF07CisKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgcWxzcFtpXT1sc3BbaV07CisKKyAgIGNvbXB1dGVfcXVhbnRfd2VpZ2h0cyhxbHNwLCBxdWFudF93ZWlnaHQsIG9yZGVyKTsKKworICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldPVNVQjE2KHFsc3BbaV0sTFNQX0xJTkVBUihpKSk7CisjaWZuZGVmIEZJWEVEX1BPSU5UCisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIHFsc3BbaV09cWxzcFtpXSpMU1BfU0NBTEU7CisjZW5kaWYKKyAgIGlkID0gbHNwX3F1YW50KHFsc3AsIGNkYmtfbmIsIE5CX0NEQktfU0laRSwgb3JkZXIpOworICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIGlkLCA2KTsKKyAgIAorICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldKj0yOworICAgCisgICBpZCA9IGxzcF93ZWlnaHRfcXVhbnQocWxzcCwgcXVhbnRfd2VpZ2h0LCBjZGJrX25iX2xvdzEsIE5CX0NEQktfU0laRV9MT1cxLCA1KTsKKyAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBpZCwgNik7CisKKyAgIGlkID0gbHNwX3dlaWdodF9xdWFudChxbHNwKzUsIHF1YW50X3dlaWdodCs1LCBjZGJrX25iX2hpZ2gxLCBOQl9DREJLX1NJWkVfSElHSDEsIDUpOworICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIGlkLCA2KTsKKworI2lmZGVmIEZJWEVEX1BPSU5UCisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIHFsc3BbaV0gPSBQU0hSMTYocWxzcFtpXSwxKTsKKyNlbHNlCisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIHFsc3BbaV0gPSBxbHNwW2ldKjAuMDAxOTUzMTsKKyNlbmRpZgorCisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIHFsc3BbaV09bHNwW2ldLXFsc3BbaV07Cit9CisKKyNkZWZpbmUgT1ZFUlJJREVfTFNQX1VOUVVBTlRfTEJSCit2b2lkIGxzcF91bnF1YW50X2xicihzcHhfbHNwX3QgKmxzcCwgaW50IG9yZGVyLCBTcGVleEJpdHMgKmJpdHMpCit7CisgICBpbnQgaSwgaWQ7CisgICBmb3IgKGk9MDtpPG9yZGVyO2krKykKKyAgICAgIGxzcFtpXT1MU1BfTElORUFSKGkpOworCisKKyAgIGlkPXNwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKGJpdHMsIDYpOworICAgZm9yIChpPTA7aTwxMDtpKyspCisgICAgICBsc3BbaV0gKz0gTFNQX0RJVl8yNTYoY2Ria19uYltpZCoxMCtpXSk7CisKKyAgIGlkPXNwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKGJpdHMsIDYpOworICAgZm9yIChpPTA7aTw1O2krKykKKyAgICAgIGxzcFtpXSArPSBMU1BfRElWXzUxMihjZGJrX25iX2xvdzFbaWQqNStpXSk7CisKKyAgIGlkPXNwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKGJpdHMsIDYpOworICAgZm9yIChpPTA7aTw1O2krKykKKyAgICAgIGxzcFtpKzVdICs9IExTUF9ESVZfNTEyKGNkYmtfbmJfaGlnaDFbaWQqNStpXSk7CisgICAKK30KKworZXh0ZXJuIGNvbnN0IHNpZ25lZCBjaGFyIGhpZ2hfbHNwX2NkYmtbXTsKK2V4dGVybiBjb25zdCBzaWduZWQgY2hhciBoaWdoX2xzcF9jZGJrMltdOworCisjZGVmaW5lIE9WRVJSSURFX0xTUF9VTlFVQU5UX0hJR0gKK3ZvaWQgbHNwX3VucXVhbnRfaGlnaChzcHhfbHNwX3QgKmxzcCwgaW50IG9yZGVyLCBTcGVleEJpdHMgKmJpdHMpCit7CisKKyAgIGludCBpLCBpZDsKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgbHNwW2ldPUxTUF9MSU5FQVJfSElHSChpKTsKKworCisgICBpZD1zcGVleF9iaXRzX3VucGFja191bnNpZ25lZChiaXRzLCA2KTsKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgbHNwW2ldICs9IExTUF9ESVZfMjU2KGhpZ2hfbHNwX2NkYmtbaWQqb3JkZXIraV0pOworCisKKyAgIGlkPXNwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkKGJpdHMsIDYpOworICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBsc3BbaV0gKz0gTFNQX0RJVl81MTIoaGlnaF9sc3BfY2RiazJbaWQqb3JkZXIraV0pOworfQorCisjZGVmaW5lIE9WRVJSSURFX0xTUF9RVUFOVF9ISUdICit2b2lkIGxzcF9xdWFudF9oaWdoKHNweF9sc3BfdCAqbHNwLCBzcHhfbHNwX3QgKnFsc3AsIGludCBvcmRlciwgU3BlZXhCaXRzICpiaXRzKQoreworICAgaW50IGk7CisgICBpbnQgaWQ7CisgICBzcHhfd29yZDE2X3QgcXVhbnRfd2VpZ2h0WzEwXTsKKworICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldPWxzcFtpXTsKKworICAgY29tcHV0ZV9xdWFudF93ZWlnaHRzKHFsc3AsIHF1YW50X3dlaWdodCwgb3JkZXIpOworCisgICAvKiAgIHF1YW50X3dlaWdodFswXSA9IDEwLyhxbHNwWzFdLXFsc3BbMF0pOworICAgcXVhbnRfd2VpZ2h0W29yZGVyLTFdID0gMTAvKHFsc3Bbb3JkZXItMV0tcWxzcFtvcmRlci0yXSk7CisgICBmb3IgKGk9MTtpPG9yZGVyLTE7aSsrKQorICAgeworICAgICAgdG1wMSA9IDEwLyhxbHNwW2ldLXFsc3BbaS0xXSk7CisgICAgICB0bXAyID0gMTAvKHFsc3BbaSsxXS1xbHNwW2ldKTsKKyAgICAgIHF1YW50X3dlaWdodFtpXSA9IHRtcDEgPiB0bXAyID8gdG1wMSA6IHRtcDI7CisgICAgICB9Ki8KKworICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldPVNVQjE2KHFsc3BbaV0sTFNQX0xJTkVBUl9ISUdIKGkpKTsKKyNpZm5kZWYgRklYRURfUE9JTlQKKyAgIGZvciAoaT0wO2k8b3JkZXI7aSsrKQorICAgICAgcWxzcFtpXSA9IHFsc3BbaV0qTFNQX1NDQUxFOworI2VuZGlmCisgICBpZCA9IGxzcF9xdWFudChxbHNwLCBoaWdoX2xzcF9jZGJrLCA2NCwgb3JkZXIpOworICAgc3BlZXhfYml0c19wYWNrKGJpdHMsIGlkLCA2KTsKKworICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldKj0yOworCisgICBpZCA9IGxzcF93ZWlnaHRfcXVhbnQocWxzcCwgcXVhbnRfd2VpZ2h0LCBoaWdoX2xzcF9jZGJrMiwgNjQsIG9yZGVyKTsKKyAgIHNwZWV4X2JpdHNfcGFjayhiaXRzLCBpZCwgNik7CisKKyNpZmRlZiBGSVhFRF9QT0lOVAorICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldID0gUFNIUjE2KHFsc3BbaV0sMSk7CisjZWxzZQorICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldID0gcWxzcFtpXSowLjAwMTk1MzE7CisjZW5kaWYKKworICAgZm9yIChpPTA7aTxvcmRlcjtpKyspCisgICAgICBxbHNwW2ldPWxzcFtpXS1xbHNwW2ldOworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvdG12L3NwZWV4X2NvbmZpZ190eXBlcy5oIGIvM3JkcGFydHkvc3BlZXgvdG12L3NwZWV4X2NvbmZpZ190eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNjZmNmMKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC90bXYvc3BlZXhfY29uZmlnX3R5cGVzLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfX1NQRUVYX1RZUEVTX0hfXworI2RlZmluZSBfX1NQRUVYX1RZUEVTX0hfXworCisjaWZkZWYgX19UQ1NfXworCisjaW5jbHVkZSA8dG1OeFR5cGVzLmg+CisKKworCit0eXBlZGVmIEludDE2CQkJc3B4X2ludDE2X3Q7Cit0eXBlZGVmIFVJbnQxNgkJCXNweF91aW50MTZfdDsKK3R5cGVkZWYgSW50MzIJCQlzcHhfaW50MzJfdDsKK3R5cGVkZWYgVUludDMyCQkJc3B4X3VpbnQzMl90OworCisjaWZkZWYgRklYRURfUE9JTlQKKyNkZWZpbmUgVk1VWChhLGIsYykJCW11eCgoYSksKGIpLChjKSkKKyNkZWZpbmUgVkFCUyhhKQkJCWlhYnMoKGEpKQorI2RlZmluZSBWTUFYKGEsYikJCWltYXgoKGEpLChiKSkKKyNkZWZpbmUgVk1JTihhLGIpCQlpbWluKChhKSwoYikpCisjZWxzZQorI2RlZmluZSBWTVVYKGEsYixjKQkJZm11eCgoYSksKGIpLChjKSkKKyNkZWZpbmUgVkFCUyhhKQkJCWZhYnMoKGEpKQorI2RlZmluZSBWTUFYKGEsYikJCWZtYXgoKGEpLChiKSkKKyNkZWZpbmUgVk1JTihhLGIpCQlmbWluKChhKSwoYikpCisjZW5kaWYKKworI2VuZGlmCisKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3Rtdi92cV90bS5oIGIvM3JkcGFydHkvc3BlZXgvdG12L3ZxX3RtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwZTg4NgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3Rtdi92cV90bS5oCkBAIC0wLDAgKzEsNDk0IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9uZyBaaGlxaWFuICovCisvKioKKyAgIEBmaWxlIHZxX3RtLmgKKyAgIEBhdXRob3IgSG9uZyBaaGlxaWFuCisgICBAYnJpZWYgVmFyaW91cyBjb21wYXRpYmlsaXR5IHJvdXRpbmVzIGZvciBTcGVleCAoVHJpTWVkaWEgdmVyc2lvbikKKyovCisvKgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIAorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIAorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBYaXBoLm9yZyBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIAorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworI2luY2x1ZGUgPG9wcy9jdXN0b21fZGVmcy5oPgorI2luY2x1ZGUgInByb2ZpbGVfdG0uaCIKKworI2lmZGVmIEZJWEVEX1BPSU5UCisKK2lubGluZSB2b2lkIHZxX25iZXN0X2Rpc3QoaW50IGksIGludCBOLCBpbnQgZGlzdCwgaW50ICp1c2VkLCBpbnQgKm5iZXN0LCBJbnQzMiAqYmVzdF9kaXN0KQoreworCXJlZ2lzdGVyIGludCBrOworCQorCWlmIChpPE4gfHwgZGlzdDxiZXN0X2Rpc3RbTi0xXSkKKwl7CisJCWZvciAoaz1OLTE7IChrID49IDEpICYmIChrID4gKnVzZWQgfHwgZGlzdCA8IGJlc3RfZGlzdFtrLTFdKTsgay0tKQorCQl7CWJlc3RfZGlzdFtrXT1iZXN0X2Rpc3Rbay0xXTsKKwkJCW5iZXN0W2tdID0gbmJlc3Rbay0xXTsKKwkJfQorCQkKKwkJYmVzdF9kaXN0W2tdPWRpc3Q7CisJCW5iZXN0W2tdPWk7CisJCSp1c2VkKys7CisJfQorfQorCit2b2lkIHZxX25iZXN0XzUoSW50MTYgKmluLCBjb25zdCBJbnQxNiAqY29kZWJvb2ssIGludCBlbnRyaWVzLCBJbnQzMiAqRSwgaW50IE4sIGludCAqbmJlc3QsIEludDMyICpiZXN0X2Rpc3QpCit7CisJcmVnaXN0ZXIgaW50CWksIGo7CisJcmVnaXN0ZXIgaW50CWluMTAsIGluMzIsIGluNDsKKwlpbnQgCQkJdXNlZCA9IDA7CisJCisJaW4xMCA9IHBhY2sxNmxzYihpblsxXSxpblswXSk7CQkJLyogTm90ZTogbWVtb3J5IGlzIG5vdCBhbGlnbiBoZXJlICovCisJaW4zMiA9IHBhY2sxNmxzYihpblszXSxpblsyXSk7CisJaW40ID0gc2V4MTYoaW5bNF0pOwkKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1ZRTkJFU1QgPiAwKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTIKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCisJZm9yICggaT0wLGo9MCA7IGk8ZW50cmllcyA7IGkrPTIsais9NSApCisJeworCQlyZWdpc3RlciBpbnQgZGlzdDEsIGRpc3QyOworCQlyZWdpc3RlciBpbnQgY2IxMCwgY2IzMiwgY2I1NCwgY2I3NiwgY2I5OCwgY2I4NywgY2I2NTsKKwkJCisJCWNiMTAgID0gIGxkMzJ4KGNvZGVib29rLGopOworCQljYjMyICA9ICBsZDMyeChjb2RlYm9vayxqKzEpOworCQljYjU0ICA9ICBsZDMyeChjb2RlYm9vayxqKzIpOworCQljYjc2ICA9ICBsZDMyeChjb2RlYm9vayxqKzMpOworCQljYjk4ICA9ICBsZDMyeChjb2RlYm9vayxqKzQpOworCisJCWRpc3QxID0gc2V4MTYoY2I1NCkgKiBpbjQ7CisJCWRpc3QxICs9IGlmaXIxNihpbjEwLGNiMTApICsgaWZpcjE2KGluMzIsY2IzMik7CisJCWRpc3QxID0gKEVbaV0gPj4gMSkgLSBkaXN0MTsKKwkJCisJCWNiNjUgID0gIGZ1bnNoaWZ0MihjYjc2LGNiNTQpOworCQljYjg3ICA9ICBmdW5zaGlmdDIoY2I5OCxjYjc2KTsKKwkJZGlzdDIgPSAgYXNyaSgxNixjYjk4KSAqIGluNDsKKwkJZGlzdDIgKz0gaWZpcjE2KGluMTAsY2I2NSkgKyBpZmlyMTYoaW4zMixjYjg3KTsKKwkJZGlzdDIgPSAoRVtpKzFdID4+IDEpIC0gZGlzdDI7CisKKwkJdnFfbmJlc3RfZGlzdChpLE4sZGlzdDEsJnVzZWQsbmJlc3QsYmVzdF9kaXN0KTsKKwkJdnFfbmJlc3RfZGlzdChpKzEsTixkaXN0MiwmdXNlZCxuYmVzdCxiZXN0X2Rpc3QpOworCX0KKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1ZRTkJFU1QgPiAwKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorfQorCisKK3ZvaWQgdnFfbmJlc3RfOChJbnQxNiAqaW4sIGNvbnN0IEludDE2ICpjb2RlYm9vaywgaW50IGVudHJpZXMsIEludDMyICpFLCBpbnQgTiwgaW50ICpuYmVzdCwgSW50MzIgKmJlc3RfZGlzdCkKK3sKKwlyZWdpc3RlciBpbnQJaSwgajsKKwlyZWdpc3RlciBpbnQJaW4xMCwgaW4zMiwgaW41NCwgaW43NjsKKwlpbnQgCQkJdXNlZCA9IDA7CisJCisJaW4xMCA9IHBhY2sxNmxzYihpblsxXSxpblswXSk7CQkJCS8qIE5vdGU6IG1lbW9yeSBpcyBub3QgYWxpZ24gaGVyZSAqLworCWluMzIgPSBwYWNrMTZsc2IoaW5bM10saW5bMl0pOworCWluNTQgPSBwYWNrMTZsc2IoaW5bNV0saW5bNF0pOwkKKwlpbjc2ID0gcGFjazE2bHNiKGluWzddLGluWzZdKTsJCisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9WUU5CRVNUID4gMCkKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKwlmb3IgKCBpPTAsaj0wIDsgaTxlbnRyaWVzIDsgKytpLGorPTQgKQorCXsKKwkJcmVnaXN0ZXIgaW50IGRpc3Q7CisJCXJlZ2lzdGVyIGludCBjYjEwLCBjYjMyLCBjYjU0LCBjYjc2OworCQkKKwkJY2IxMCAgPSAgbGQzMngoY29kZWJvb2ssaik7CisJCWNiMzIgID0gIGxkMzJ4KGNvZGVib29rLGorMSk7CisJCWNiNTQgID0gIGxkMzJ4KGNvZGVib29rLGorMik7CisJCWNiNzYgID0gIGxkMzJ4KGNvZGVib29rLGorMyk7CisJCQorCQlkaXN0ICA9ICBpZmlyMTYoaW4xMCxjYjEwKSArIGlmaXIxNihpbjMyLGNiMzIpOworCQlkaXN0ICArPSBpZmlyMTYoaW41NCxjYjU0KSArIGlmaXIxNihpbjc2LGNiNzYpOworCQlkaXN0ICA9ICAoRVtpXSA+PiAxKSAtIGRpc3Q7CisJICAKKwkJdnFfbmJlc3RfZGlzdChpLE4sZGlzdCwmdXNlZCxuYmVzdCxiZXN0X2Rpc3QpOworCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9WUU5CRVNUID4gMCkKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKKworfQorCisKK3ZvaWQgdnFfbmJlc3RfMTAoSW50MTYgKmluLCBjb25zdCBJbnQxNiAqY29kZWJvb2ssIGludCBlbnRyaWVzLCBJbnQzMiAqRSwgaW50IE4sIGludCAqbmJlc3QsIEludDMyICpiZXN0X2Rpc3QpCit7CisJcmVnaXN0ZXIgaW50CWksIGo7CisJcmVnaXN0ZXIgaW50CWluMTAsIGluMzIsIGluNTQsIGluNzYsIGluOTg7CisJaW50CQkJIAl1c2VkID0gMDsKKwkKKwlpbjEwID0gcGFjazE2bHNiKGluWzFdLGluWzBdKTsKKwlpbjMyID0gcGFjazE2bHNiKGluWzNdLGluWzJdKTsKKwlpbjU0ID0gcGFjazE2bHNiKGluWzVdLGluWzRdKTsKKwlpbjc2ID0gcGFjazE2bHNiKGluWzddLGluWzZdKTsKKwlpbjk4ID0gcGFjazE2bHNiKGluWzldLGluWzhdKTsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1ZRTkJFU1QgPiAwKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTQKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCWZvciAoIGk9MCxqPTAgOyBpPGVudHJpZXMgOyArK2ksais9NSApCisJeworCQlyZWdpc3RlciBpbnQgZGlzdDsKKwkJcmVnaXN0ZXIgaW50IGNiMTAsIGNiMzIsIGNiNTQsIGNiNzYsIGNiOTg7CisJCQorCQljYjEwICA9ICBsZDMyeChjb2RlYm9vayxqKTsKKwkJY2IzMiAgPSAgbGQzMngoY29kZWJvb2ssaisxKTsKKwkJY2I1NCAgPSAgbGQzMngoY29kZWJvb2ssaisyKTsKKwkJY2I3NiAgPSAgbGQzMngoY29kZWJvb2ssaiszKTsKKwkJY2I5OCAgPSAgbGQzMngoY29kZWJvb2ssais0KTsKKworCQlkaXN0ICA9ICBpZmlyMTYoaW4xMCxjYjEwKSArIGlmaXIxNihpbjMyLGNiMzIpOworCQlkaXN0ICArPSBpZmlyMTYoaW41NCxjYjU0KSArIGlmaXIxNihpbjc2LGNiNzYpOworCQlkaXN0ICArPSBpZmlyMTYoaW45OCxjYjk4KTsKKwkJZGlzdCAgPSAgKEVbaV0gPj4gMSkgLSBkaXN0OworCSAgCisJCXZxX25iZXN0X2Rpc3QoaSxOLGRpc3QsJnVzZWQsbmJlc3QsYmVzdF9kaXN0KTsJICAKKwl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfVlFOQkVTVCA+IDApCisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0wCisjcHJhZ21hIFRDU191bnJvbGw9MAorI2VuZGlmCit9CisKK3ZvaWQgdnFfbmJlc3RfMjAoSW50MTYgKmluLCBjb25zdCBJbnQxNiAqY29kZWJvb2ssIGludCBlbnRyaWVzLCBJbnQzMiAqRSwgaW50IE4sIGludCAqbmJlc3QsIEludDMyICpiZXN0X2Rpc3QpCit7CisJcmVnaXN0ZXIgaW50CWksIGo7CisJcmVnaXN0ZXIgaW50CWluMTAsIGluMzIsIGluNTQsIGluNzYsIGluOTgsIGluXzEwLCBpbl8zMiwgaW5fNTQsIGluXzc2LCBpbl85ODsKKwlpbnQgCQkJdXNlZCA9IDA7CisJCisJaW4xMCAgPSBwYWNrMTZsc2IoaW5bMV0saW5bMF0pOwkJCQkJLyogTm90ZTogbWVtb3J5IGlzIG5vdCBhbGlnbiBoZXJlICovCisJaW4zMiAgPSBwYWNrMTZsc2IoaW5bM10saW5bMl0pOworCWluNTQgID0gcGFjazE2bHNiKGluWzVdLGluWzRdKTsKKwlpbjc2ICA9IHBhY2sxNmxzYihpbls2XSxpbls2XSk7CisJaW45OCAgPSBwYWNrMTZsc2IoaW5bOV0saW5bOF0pOworCWluXzEwID0gcGFjazE2bHNiKGluWzExXSxpblsxMF0pOworCWluXzMyID0gcGFjazE2bHNiKGluWzEzXSxpblsxMl0pOworCWluXzU0ID0gcGFjazE2bHNiKGluWzE1XSxpblsxNF0pOworCWluXzc2ID0gcGFjazE2bHNiKGluWzE3XSxpblsxNl0pOworCWluXzk4ID0gcGFjazE2bHNiKGluWzE5XSxpblsxOF0pOworCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfVlFOQkVTVCA+IDApCisjcHJhZ21hIFRDU191bnJvbGw9MgorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisJZm9yICggaT0wLGo9MCA7IGk8ZW50cmllcyA7ICsraSxqKz0xMCApCisJeworCQlyZWdpc3RlciBpbnQgZGlzdDsKKwkJcmVnaXN0ZXIgaW50IGNiMTAsIGNiMzIsIGNiNTQsIGNiNzYsIGNiOTgsIGNiXzEwLCBjYl8zMiwgY2JfNTQsIGNiXzc2LCBjYl85ODsKKwkJCisJCWNiMTAgICA9ICBsZDMyeChjb2RlYm9vayxqKTsKKwkJY2IzMiAgID0gIGxkMzJ4KGNvZGVib29rLGorMSk7CisJCWNiNTQgICA9ICBsZDMyeChjb2RlYm9vayxqKzIpOworCQljYjc2ICAgPSAgbGQzMngoY29kZWJvb2ssaiszKTsKKwkJY2I5OCAgID0gIGxkMzJ4KGNvZGVib29rLGorNCk7CisJCWNiXzEwICA9ICBsZDMyeChjb2RlYm9vayxqKzUpOworCQljYl8zMiAgPSAgbGQzMngoY29kZWJvb2ssais2KTsKKwkJY2JfNTQgID0gIGxkMzJ4KGNvZGVib29rLGorNyk7CisJCWNiXzc2ICA9ICBsZDMyeChjb2RlYm9vayxqKzgpOworCQljYl85OCAgPSAgbGQzMngoY29kZWJvb2ssais5KTsKKworCQlkaXN0ICAgPSAgaWZpcjE2KGluMTAsY2IxMCkgKyBpZmlyMTYoaW4zMixjYjMyKTsKKwkJZGlzdCAgICs9IGlmaXIxNihpbjU0LGNiNTQpICsgaWZpcjE2KGluNzYsY2I3Nik7CisJCWRpc3QgICArPSBpZmlyMTYoaW45OCxjYjk4KSArIGlmaXIxNihpbl8xMCxjYl8xMCk7CisJCWRpc3QgICArPSBpZmlyMTYoaW5fMzIsY2JfMzIpICsgaWZpcjE2KGluXzU0LGNiXzU0KTsKKwkJZGlzdCAgICs9IGlmaXIxNihpbl83NixjYl83NikgKyBpZmlyMTYoaW5fOTgsY2JfOTgpOworCisJCWRpc3QgICA9ICAoRVtpXSA+PiAxKSAtIGRpc3Q7ICAKKwkJdnFfbmJlc3RfZGlzdChpLE4sZGlzdCwmdXNlZCxuYmVzdCxiZXN0X2Rpc3QpOworCX0KKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9WUU5CRVNUID4gMCkKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKK30KKworCisjZGVmaW5lIE9WRVJSSURFX1ZRX05CRVNUCit2b2lkIHZxX25iZXN0IChJbnQxNiAqaW4sIGNvbnN0IEludDE2ICpjb2RlYm9vaywgaW50IGxlbiwgaW50IGVudHJpZXMsIEludDMyICpFLCBpbnQgTiwgaW50ICpuYmVzdCwgSW50MzIgKmJlc3RfZGlzdCwgY2hhciAqc3RhY2spCit7CisJVE1ERUJVR19BTElHTk1FTShjb2RlYm9vayk7CisKKwlWUU5CRVNUX1NUQVJUKCk7CisJaWYoIGxlbj09NSApCisJCXZxX25iZXN0XzUoaW4sY29kZWJvb2ssZW50cmllcyxFLE4sbmJlc3QsYmVzdF9kaXN0KTsKKwllbHNlIGlmICggbGVuPT04ICkKKwkJdnFfbmJlc3RfOChpbixjb2RlYm9vayxlbnRyaWVzLEUsTixuYmVzdCxiZXN0X2Rpc3QpOworCWVsc2UgaWYgKCBsZW49PTEwICkKKwkJdnFfbmJlc3RfMTAoaW4sY29kZWJvb2ssZW50cmllcyxFLE4sbmJlc3QsYmVzdF9kaXN0KTsKKwllbHNlIGlmICggbGVuPT0yMCApCisJCXZxX25iZXN0XzIwKGluLGNvZGVib29rLGVudHJpZXMsRSxOLG5iZXN0LGJlc3RfZGlzdCk7CisKKyNpZm5kZWYgUkVNQVJLX09OCisJKHZvaWQpc3RhY2s7CisjZW5kaWYKKworCVZRTkJFU1RfU1RPUCgpOworfQorCitpbmxpbmUgdm9pZCB2cV9uYmVzdF9zaWduX2Rpc3QoaW50IGksIGludCBOLCBpbnQgZGlzdCwgaW50IHNpZ24sIGludCBlbnRyaWVzLCBpbnQgKnVzZWQsIGludCAqbmJlc3QsIEludDMyICpiZXN0X2Rpc3QpCit7CisJcmVnaXN0ZXIgaW50IGs7CisKKwlpZiAoaTxOIHx8IGRpc3Q8YmVzdF9kaXN0W04tMV0pCisJewlmb3IgKGs9Ti0xOyAoayA+PSAxKSAmJiAoayA+ICp1c2VkIHx8IGRpc3QgPCBiZXN0X2Rpc3Rbay0xXSk7IGstLSkKKwkJeworCQkJYmVzdF9kaXN0W2tdPWJlc3RfZGlzdFtrLTFdOworCQkJbmJlc3Rba10gPSBuYmVzdFtrLTFdOworCQl9CisJCQorCQlpZiAoIHNpZ24gKSBpICs9IGVudHJpZXM7CisJCWJlc3RfZGlzdFtrXT1kaXN0OworCQkqdXNlZCsrOworCQluYmVzdFtrXSA9IGk7CisJfQorfQkJCQkJCQkJCQkJCisKK3ZvaWQgdnFfbmJlc3Rfc2lnbl81KEludDE2ICppbiwgY29uc3QgSW50MTYgKmNvZGVib29rLCBpbnQgZW50cmllcywgSW50MzIgKkUsIGludCBOLCBpbnQgKm5iZXN0LCBJbnQzMiAqYmVzdF9kaXN0KQoreworCXJlZ2lzdGVyIGludCAJaSwgajsKKwlyZWdpc3RlciBpbnQJaW4xMCwgaW4zMiwgaW40OworCWludAkJCQl1c2VkID0gMDsKKwkKKwlpbjEwID0gbGQzMihpbik7CisJaW4zMiA9IGxkMzJ4KGluLDEpOworCWluNAkgPSBzZXgxNihpbls0XSk7CisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9WUVNJR05OQkVTVCA+IDApCisjcHJhZ21hIFRDU191bnJvbGw9MgorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisKKwlmb3IgKCBpPTAsaj0wIDsgaTxlbnRyaWVzIDsgaSs9MixqKz01ICkKKwl7CisJCXJlZ2lzdGVyIGludCBkaXN0MSwgZGlzdDIsIHNpZ24xLCBzaWduMjsKKwkJcmVnaXN0ZXIgaW50IGNiMTAsIGNiMzIsIGNiNTQsIGNiNzYsIGNiOTgsIGNiODcsIGNiNjU7CisJCQorCQljYjEwICA9ICBsZDMyeChjb2RlYm9vayxqKTsKKwkJY2IzMiAgPSAgbGQzMngoY29kZWJvb2ssaisxKTsKKwkJY2I1NCAgPSAgbGQzMngoY29kZWJvb2ssaisyKTsKKwkJY2I3NiAgPSAgbGQzMngoY29kZWJvb2ssaiszKTsKKwkJY2I5OCAgPSAgbGQzMngoY29kZWJvb2ssais0KTsKKworCQlkaXN0MSA9IHNleDE2KGNiNTQpICogaW40OworCQlkaXN0MSArPSBpZmlyMTYoaW4xMCxjYjEwKSArIGlmaXIxNihpbjMyLGNiMzIpOworCQkKKwkJc2lnbjEgPSBtdXgoZGlzdDE+MCwwLDEpOwkKKwkJZGlzdDEgPSBpZmxpcChkaXN0MT4wLGRpc3QxKTsKKwkJZGlzdDEgPSAgKEVbaV0gPj4gMSkgKyBkaXN0MTsgIAorCQkKKwkJY2I2NSAgPSAgZnVuc2hpZnQyKGNiNzYsY2I1NCk7CisJCWNiODcgID0gIGZ1bnNoaWZ0MihjYjk4LGNiNzYpOworCQlkaXN0MiA9ICBhc3JpKDE2LGNiOTgpICogaW40OworCQlkaXN0MiArPSBpZmlyMTYoaW4xMCxjYjY1KSArIGlmaXIxNihpbjMyLGNiODcpOworCQkKKwkJc2lnbjIgPSBtdXgoZGlzdDI+MCwwLDEpOwkKKwkJZGlzdDIgPSBpZmxpcChkaXN0Mj4wLGRpc3QyKTsKKwkJZGlzdDIgPSAgKEVbaV0gPj4gMSkgKyBkaXN0MjsgIAorCQkKKwkJdnFfbmJlc3Rfc2lnbl9kaXN0KGksTixkaXN0MSxzaWduMSxlbnRyaWVzLCZ1c2VkLG5iZXN0LGJlc3RfZGlzdCk7CisJCXZxX25iZXN0X3NpZ25fZGlzdChpKzEsTixkaXN0MixzaWduMixlbnRyaWVzLCZ1c2VkLG5iZXN0LGJlc3RfZGlzdCk7CisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1ZRU0lHTk5CRVNUID4gMCkKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKK30KKwordm9pZCB2cV9uYmVzdF9zaWduXzgoSW50MTYgKmluLCBjb25zdCBJbnQxNiAqY29kZWJvb2ssIGludCBlbnRyaWVzLCBJbnQzMiAqRSwgaW50IE4sIGludCAqbmJlc3QsIEludDMyICpiZXN0X2Rpc3QpCit7CisJcmVnaXN0ZXIgaW50CWksIGo7CisJcmVnaXN0ZXIgaW50CXNpZ247CisJcmVnaXN0ZXIgaW50CWluMTAsIGluMzIsIGluNTQsIGluNzY7CisJaW50CQkJIAl1c2VkID0gMDsKKworCWluMTAgPSBsZDMyKGluKTsKKwlpbjMyID0gbGQzMngoaW4sMSk7CisJaW41NCA9IGxkMzJ4KGluLDIpOworCWluNzYgPSBsZDMyeChpbiwzKTsKKworI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1ZRU0lHTk5CRVNUID4gMCkKKyNwcmFnbWEgVENTX3Vucm9sbD00CisjcHJhZ21hIFRDU191bnJvbGxleGFjdD0xCisjZW5kaWYKKworCWZvciAoIGk9MCxqPTAgOyBpPGVudHJpZXMgOyArK2ksais9NCApCisJeworCQlyZWdpc3RlciBpbnQgZGlzdDsKKwkJcmVnaXN0ZXIgaW50IGNiMTAsIGNiMzIsIGNiNTQsIGNiNzY7CisJCQorCQljYjEwICA9ICBsZDMyeChjb2RlYm9vayxqKTsKKwkJY2IzMiAgPSAgbGQzMngoY29kZWJvb2ssaisxKTsKKwkJY2I1NCAgPSAgbGQzMngoY29kZWJvb2ssaisyKTsKKwkJY2I3NiAgPSAgbGQzMngoY29kZWJvb2ssaiszKTsKKwkJCisJCWRpc3QgID0gIGlmaXIxNihpbjEwLGNiMTApICsgaWZpcjE2KGluMzIsY2IzMik7CisJCWRpc3QgICs9IGlmaXIxNihpbjU0LGNiNTQpICsgaWZpcjE2KGluNzYsY2I3Nik7CisJCQorCQlzaWduID0gbXV4KGRpc3Q+MCwwLDEpOwkKKwkJZGlzdCA9IGlmbGlwKGRpc3Q+MCxkaXN0KTsKKwkJZGlzdCA9ICAoRVtpXSA+PiAxKSArIGRpc3Q7ICAKKyAgICAgIAorCSAgCXZxX25iZXN0X3NpZ25fZGlzdChpLE4sZGlzdCxzaWduLGVudHJpZXMsJnVzZWQsbmJlc3QsYmVzdF9kaXN0KTsKKwl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfVlFTSUdOTkJFU1QgPiAwKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorfQorCit2b2lkIHZxX25iZXN0X3NpZ25fMTAoSW50MTYgKmluLCBjb25zdCBJbnQxNiAqY29kZWJvb2ssIGludCBlbnRyaWVzLCBJbnQzMiAqRSwgaW50IE4sIGludCAqbmJlc3QsIEludDMyICpiZXN0X2Rpc3QpCit7CisJcmVnaXN0ZXIgaW50CWksIGo7CisJcmVnaXN0ZXIgaW50CXNpZ247CisJcmVnaXN0ZXIgaW50CWluMTAsIGluMzIsIGluNTQsIGluNzYsIGluOTg7CisJaW50CQkJIAl1c2VkID0gMDsKKwkKKwlpbjEwID0gbGQzMihpbik7CisJaW4zMiA9IGxkMzJ4KGluLDEpOworCWluNTQgPSBsZDMyeChpbiwyKTsKKwlpbjc2ID0gbGQzMngoaW4sMyk7CisJaW45OCA9IGxkMzJ4KGluLDQpOworCisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfVlFTSUdOTkJFU1QgPiAwKQorI3ByYWdtYSBUQ1NfdW5yb2xsPTQKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTEKKyNlbmRpZgorCWZvciAoIGk9MCxqPTAgOyBpPGVudHJpZXMgOyArK2ksais9NSApCisJeworCQlyZWdpc3RlciBpbnQgZGlzdDsKKwkJcmVnaXN0ZXIgaW50IGNiMTAsIGNiMzIsIGNiNTQsIGNiNzYsIGNiOTg7CisJCQorCQljYjEwICA9ICBsZDMyeChjb2RlYm9vayxqKTsKKwkJY2IzMiAgPSAgbGQzMngoY29kZWJvb2ssaisxKTsKKwkJY2I1NCAgPSAgbGQzMngoY29kZWJvb2ssaisyKTsKKwkJY2I3NiAgPSAgbGQzMngoY29kZWJvb2ssaiszKTsKKwkJY2I5OCAgPSAgbGQzMngoY29kZWJvb2ssais0KTsKKwkJCisJCWRpc3QgID0gIGlmaXIxNihpbjEwLGNiMTApICsgaWZpcjE2KGluMzIsY2IzMik7CisJCWRpc3QgICs9IGlmaXIxNihpbjU0LGNiNTQpICsgaWZpcjE2KGluNzYsY2I3Nik7CisJCWRpc3QgICs9IGlmaXIxNihpbjk4LGNiOTgpOworCQkKKwkJc2lnbiA9IG11eChkaXN0PjAsMCwxKTsJCisJCWRpc3QgPSBpZmxpcChkaXN0PjAsZGlzdCk7CisJCWRpc3QgPSAgKEVbaV0gPj4gMSkgKyBkaXN0OyAgCisgICAgICAKKwkgIAl2cV9uYmVzdF9zaWduX2Rpc3QoaSxOLGRpc3Qsc2lnbixlbnRyaWVzLCZ1c2VkLG5iZXN0LGJlc3RfZGlzdCk7CisJfQorI2lmIChUTV9VTlJPTEwgJiYgVE1fVU5ST0xMX1ZRU0lHTk5CRVNUID4gMCkKKyNwcmFnbWEgVENTX3Vucm9sbGV4YWN0PTAKKyNwcmFnbWEgVENTX3Vucm9sbD0wCisjZW5kaWYKK30KKwordm9pZCB2cV9uYmVzdF9zaWduXzIwKEludDE2ICppbiwgY29uc3QgSW50MTYgKmNvZGVib29rLCBpbnQgZW50cmllcywgSW50MzIgKkUsIGludCBOLCBpbnQgKm5iZXN0LCBJbnQzMiAqYmVzdF9kaXN0KQoreworCXJlZ2lzdGVyIGludAlpLCBqOworCXJlZ2lzdGVyIGludAlzaWduOworCXJlZ2lzdGVyIGludAlpbjEwLCBpbjMyLCBpbjU0LCBpbjc2LCBpbjk4LCBpbl8xMCwgaW5fMzIsIGluXzU0LCBpbl83NiwgaW5fOTg7CisJaW50CQkJIAl1c2VkID0gMDsKKwkKKwlpbjEwICA9IGxkMzIoaW4pOworCWluMzIgID0gbGQzMngoaW4sMSk7CisJaW41NCAgPSBsZDMyeChpbiwyKTsKKwlpbjc2ICA9IGxkMzJ4KGluLDMpOworCWluOTggID0gbGQzMngoaW4sNCk7CisJaW5fMTAgPSBsZDMyeChpbiw1KTsgCisJaW5fMzIgPSBsZDMyeChpbiw2KTsgCisJaW5fNTQgPSBsZDMyeChpbiw3KTsgCisJaW5fNzYgPSBsZDMyeChpbiw4KTsgCisJaW5fOTggPSBsZDMyeChpbiw5KTsgCisKKyNpZiAoVE1fVU5ST0xMICYmIFRNX1VOUk9MTF9WUVNJR05OQkVTVCA+IDApCisjcHJhZ21hIFRDU191bnJvbGw9MgorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MQorI2VuZGlmCisJZm9yICggaT0wLGo9MCA7IGk8ZW50cmllcyA7ICsraSxqKz0xMCApCisJeworCQlyZWdpc3RlciBpbnQgZGlzdDsKKwkJcmVnaXN0ZXIgaW50IGNiMTAsIGNiMzIsIGNiNTQsIGNiNzYsIGNiOTgsIGNiXzEwLCBjYl8zMiwgY2JfNTQsIGNiXzc2LCBjYl85ODsKKwkJCisJCWNiMTAgICA9ICBsZDMyeChjb2RlYm9vayxqKTsKKwkJY2IzMiAgID0gIGxkMzJ4KGNvZGVib29rLGorMSk7CisJCWNiNTQgICA9ICBsZDMyeChjb2RlYm9vayxqKzIpOworCQljYjc2ICAgPSAgbGQzMngoY29kZWJvb2ssaiszKTsKKwkJY2I5OCAgID0gIGxkMzJ4KGNvZGVib29rLGorNCk7CisJCWNiXzEwICA9ICBsZDMyeChjb2RlYm9vayxqKzUpOworCQljYl8zMiAgPSAgbGQzMngoY29kZWJvb2ssais2KTsKKwkJY2JfNTQgID0gIGxkMzJ4KGNvZGVib29rLGorNyk7CisJCWNiXzc2ICA9ICBsZDMyeChjb2RlYm9vayxqKzgpOworCQljYl85OCAgPSAgbGQzMngoY29kZWJvb2ssais5KTsKKworCQlkaXN0ICAgPSAgaWZpcjE2KGluMTAsY2IxMCkgKyBpZmlyMTYoaW4zMixjYjMyKTsKKwkJZGlzdCAgICs9IGlmaXIxNihpbjU0LGNiNTQpICsgaWZpcjE2KGluNzYsY2I3Nik7CisJCWRpc3QgICArPSBpZmlyMTYoaW45OCxjYjk4KSArIGlmaXIxNihpbl8xMCxjYl8xMCk7CisJCWRpc3QgICArPSBpZmlyMTYoaW5fMzIsY2JfMzIpICsgaWZpcjE2KGluXzU0LGNiXzU0KTsKKwkJZGlzdCAgICs9IGlmaXIxNihpbl83NixjYl83NikgKyBpZmlyMTYoaW5fOTgsY2JfOTgpOworCQkJCQorCQlzaWduID0gbXV4KGRpc3Q+MCwwLDEpOwkKKwkJZGlzdCA9IGlmbGlwKGRpc3Q+MCxkaXN0KTsKKwkJZGlzdCA9ICAoRVtpXSA+PiAxKSArIGRpc3Q7ICAKKyAgICAgIAorCSAgCXZxX25iZXN0X3NpZ25fZGlzdChpLE4sZGlzdCxzaWduLGVudHJpZXMsJnVzZWQsbmJlc3QsYmVzdF9kaXN0KTsKKwl9CisjaWYgKFRNX1VOUk9MTCAmJiBUTV9VTlJPTExfVlFTSUdOTkJFU1QgPiAwKQorI3ByYWdtYSBUQ1NfdW5yb2xsZXhhY3Q9MAorI3ByYWdtYSBUQ1NfdW5yb2xsPTAKKyNlbmRpZgorfQorCisjZGVmaW5lIE9WRVJSSURFX1ZRX05CRVNUX1NJR04KK3ZvaWQgdnFfbmJlc3Rfc2lnbiAoSW50MTYgKmluLCBjb25zdCBJbnQxNiAqY29kZWJvb2ssIGludCBsZW4sIGludCBlbnRyaWVzLCBJbnQzMiAqRSwgaW50IE4sIGludCAqbmJlc3QsIEludDMyICpiZXN0X2Rpc3QsIGNoYXIgKnN0YWNrKQoreworCVRNREVCVUdfQUxJR05NRU0oaW4pOworCVRNREVCVUdfQUxJR05NRU0oY29kZWJvb2spOworCisJVlFOQkVTVFNJR05fU1RBUlQoKTsKKworCWlmKCBsZW49PTUgKQorCQl2cV9uYmVzdF9zaWduXzUoaW4sY29kZWJvb2ssZW50cmllcyxFLE4sbmJlc3QsYmVzdF9kaXN0KTsKKwllbHNlIGlmICggbGVuPT04ICkKKwkJdnFfbmJlc3Rfc2lnbl84KGluLGNvZGVib29rLGVudHJpZXMsRSxOLG5iZXN0LGJlc3RfZGlzdCk7CisJZWxzZSBpZiAoIGxlbj09MTAgKQorCQl2cV9uYmVzdF9zaWduXzEwKGluLGNvZGVib29rLGVudHJpZXMsRSxOLG5iZXN0LGJlc3RfZGlzdCk7CisJZWxzZSBpZiAoIGxlbj09MjAgKQorCQl2cV9uYmVzdF9zaWduXzIwKGluLGNvZGVib29rLGVudHJpZXMsRSxOLG5iZXN0LGJlc3RfZGlzdCk7CisKKyNpZm5kZWYgUkVNQVJLX09OCisJKHZvaWQpc3RhY2s7CisjZW5kaWYKKworCVZRTkJFU1RTSUdOX1NUT1AoKTsKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3dpbjMyL01ha2VmaWxlLmFtIGIvM3JkcGFydHkvc3BlZXgvd2luMzIvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgyM2Y0NgotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsOCBAQAorIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluLiAtKi1NYWtlZmlsZS0qLQ0KKw0KKyMgRGlzYWJsZSBhdXRvbWF0aWMgZGVwZW5kZW5jeSB0cmFja2luZyBpZiB1c2luZyBvdGhlciB0b29scyB0aGFuIGdjYyBhbmQgZ21ha2UNCisjQVVUT01BS0VfT1BUSU9OUyA9IG5vLWRlcGVuZGVuY2llcw0KKw0KK1NVQkRJUlMgPSBsaWJzcGVleCBzcGVleGVuYyBzcGVleGRlYyBWUzIwMDMgVlMyMDA1DQorDQorRVhUUkFfRElTVCA9IHNwZWV4LmlzcyBjb25maWcuaA0KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3dpbjMyL1ZTMjAwMy9NYWtlZmlsZS5hbSBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL1ZTMjAwMy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDY5OGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvd2luMzIvVlMyMDAzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsOCBAQAorIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluLiAtKi1NYWtlZmlsZS0qLQ0KKw0KKyMgRGlzYWJsZSBhdXRvbWF0aWMgZGVwZW5kZW5jeSB0cmFja2luZyBpZiB1c2luZyBvdGhlciB0b29scyB0aGFuIGdjYyBhbmQgZ21ha2UNCisjQVVUT01BS0VfT1BUSU9OUyA9IG5vLWRlcGVuZGVuY2llcw0KKw0KK1NVQkRJUlMgPSBsaWJzcGVleCBzcGVleGVuYyBzcGVleGRlYw0KKw0KK0VYVFJBX0RJU1QgPSANCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDMvbGlic3BlZXgvTWFrZWZpbGUuYW0gYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDMvbGlic3BlZXgvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjZjkxOAotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL1ZTMjAwMy9saWJzcGVleC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDggQEAKKyMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbi4gLSotTWFrZWZpbGUtKi0NCisNCisjIERpc2FibGUgYXV0b21hdGljIGRlcGVuZGVuY3kgdHJhY2tpbmcgaWYgdXNpbmcgb3RoZXIgdG9vbHMgdGhhbiBnY2MgYW5kIGdtYWtlDQorI0FVVE9NQUtFX09QVElPTlMgPSBuby1kZXBlbmRlbmNpZXMNCisNCitFWFRSQV9ESVNUID0gbGlic3BlZXguZGVmIGxpYnNwZWV4LnZjcHJvag0KKw0KKw0KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3dpbjMyL1ZTMjAwMy9saWJzcGVleC9saWJzcGVleC5kZWYgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDMvbGlic3BlZXgvbGlic3BlZXguZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMWUxNDgKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDMvbGlic3BlZXgvbGlic3BlZXguZGVmCkBAIC0wLDAgKzEsMTA4IEBACitMSUJSQVJZIGxpYnNwZWV4CitFWFBPUlRTCisKKworOworOwlzcGVleF9lY2hvLmgKKzsKK3NwZWV4X2VjaG9fc3RhdGVfaW5pdAorc3BlZXhfZWNob19zdGF0ZV9kZXN0cm95CitzcGVleF9lY2hvX2NhbmNlbAorc3BlZXhfZWNob19zdGF0ZV9yZXNldAorCis7Cis7CXNwZWV4X3ByZXByb2Nlc3MuaAorOworc3BlZXhfcHJlcHJvY2Vzc19zdGF0ZV9pbml0CitzcGVleF9wcmVwcm9jZXNzX3N0YXRlX2Rlc3Ryb3kKK3NwZWV4X3ByZXByb2Nlc3MKK3NwZWV4X3ByZXByb2Nlc3NfZXN0aW1hdGVfdXBkYXRlCitzcGVleF9wcmVwcm9jZXNzX2N0bAorCis7Cis7CXNwZWV4X2JpdHMuaAorOworc3BlZXhfYml0c19pbml0CitzcGVleF9iaXRzX2luaXRfYnVmZmVyCitzcGVleF9iaXRzX2Rlc3Ryb3kKK3NwZWV4X2JpdHNfcmVzZXQKK3NwZWV4X2JpdHNfcmV3aW5kCitzcGVleF9iaXRzX3JlYWRfZnJvbQorc3BlZXhfYml0c19yZWFkX3dob2xlX2J5dGVzCitzcGVleF9iaXRzX3dyaXRlCitzcGVleF9iaXRzX3dyaXRlX3dob2xlX2J5dGVzCitzcGVleF9iaXRzX3BhY2sKK3NwZWV4X2JpdHNfdW5wYWNrX3NpZ25lZAorc3BlZXhfYml0c191bnBhY2tfdW5zaWduZWQKK3NwZWV4X2JpdHNfbmJ5dGVzCitzcGVleF9iaXRzX3BlZWtfdW5zaWduZWQKK3NwZWV4X2JpdHNfcGVlaworc3BlZXhfYml0c19hZHZhbmNlCitzcGVleF9iaXRzX3JlbWFpbmluZworc3BlZXhfYml0c19pbnNlcnRfdGVybWluYXRvcgorCis7Cis7CXNwZWV4X2NhbGxiYWNrcy5oCis7CitzcGVleF9pbmJhbmRfaGFuZGxlcgorc3BlZXhfc3RkX21vZGVfcmVxdWVzdF9oYW5kbGVyCitzcGVleF9zdGRfaGlnaF9tb2RlX3JlcXVlc3RfaGFuZGxlcgorc3BlZXhfc3RkX2NoYXJfaGFuZGxlcgorc3BlZXhfZGVmYXVsdF91c2VyX2hhbmRsZXIKK3NwZWV4X3N0ZF9sb3dfbW9kZV9yZXF1ZXN0X2hhbmRsZXIKK3NwZWV4X3N0ZF92YnJfcmVxdWVzdF9oYW5kbGVyCitzcGVleF9zdGRfZW5oX3JlcXVlc3RfaGFuZGxlcgorc3BlZXhfc3RkX3Zicl9xdWFsaXR5X3JlcXVlc3RfaGFuZGxlcgorCis7Cis7CXNwZWV4X2hlYWRlci5oCis7CitzcGVleF9pbml0X2hlYWRlcgorc3BlZXhfaGVhZGVyX3RvX3BhY2tldAorc3BlZXhfcGFja2V0X3RvX2hlYWRlcgorCis7Cis7CXNwZWV4X2ppdHRlci5oCis7CitzcGVleF9qaXR0ZXJfaW5pdAorc3BlZXhfaml0dGVyX2Rlc3Ryb3kKK3NwZWV4X2ppdHRlcl9wdXQKK3NwZWV4X2ppdHRlcl9nZXQKK3NwZWV4X2ppdHRlcl9nZXRfcG9pbnRlcl90aW1lc3RhbXAKKworOworOwlzcGVleF9ub2dsb2JhbHMuaAorOworO3NwZWV4X21vZGVfbmV3Cis7c3BlZXhfbW9kZV9kZXN0cm95CisKKworOworOwlzcGVleF9zdGVyZW8uaAorOworc3BlZXhfZW5jb2RlX3N0ZXJlbworc3BlZXhfZW5jb2RlX3N0ZXJlb19pbnQKK3NwZWV4X2RlY29kZV9zdGVyZW8KK3NwZWV4X2RlY29kZV9zdGVyZW9faW50CitzcGVleF9zdGRfc3RlcmVvX3JlcXVlc3RfaGFuZGxlcgorCis7Cis7CXNwZWV4LmgKKzsKK3NwZWV4X2VuY29kZXJfaW5pdAorc3BlZXhfZW5jb2Rlcl9kZXN0cm95CitzcGVleF9lbmNvZGUKK3NwZWV4X2VuY29kZV9pbnQKK3NwZWV4X2VuY29kZXJfY3RsCitzcGVleF9kZWNvZGVyX2luaXQKK3NwZWV4X2RlY29kZXJfZGVzdHJveQorc3BlZXhfZGVjb2RlCitzcGVleF9kZWNvZGVfaW50CitzcGVleF9kZWNvZGVyX2N0bAorc3BlZXhfbW9kZV9xdWVyeQorc3BlZXhfbGliX2N0bAorc3BlZXhfbGliX2dldF9tb2RlCisKKworCisKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3dpbjMyL1ZTMjAwMy9saWJzcGVleC9saWJzcGVleC52Y3Byb2ogYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDMvbGlic3BlZXgvbGlic3BlZXgudmNwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYTYyMTYKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDMvbGlic3BlZXgvbGlic3BlZXgudmNwcm9qCkBAIC0wLDAgKzEsNDgxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCis8VmlzdWFsU3R1ZGlvUHJvamVjdA0KKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCisJVmVyc2lvbj0iNy4xMCINCisJTmFtZT0ibGlic3BlZXgiDQorCVByb2plY3RHVUlEPSJ7RTk3MkM1MkYtOUU4NS00RDY1LUIxOUMtMDMxRTUxMUU5REI0fSINCisJS2V5d29yZD0iV2luMzJQcm9qIj4NCisJPFBsYXRmb3Jtcz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9IldpbjMyIi8+DQorCTwvUGxhdGZvcm1zPg0KKwk8Q29uZmlndXJhdGlvbnM+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iRGVidWciDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJEZWJ1ZyINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZTsuLlwuLiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfTElCO0hBVkVfQ09ORklHX0g7IFVTRV9BTExPQ0EiDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJUUlVFIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiDQorCQkJCUNvbXBpbGVBcz0iMSIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbGlic3BlZXgubGliIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iUmVsZWFzZSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlJlbGVhc2UiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iVFJVRSI+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIzIg0KKwkJCQlHbG9iYWxPcHRpbWl6YXRpb25zPSJUUlVFIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiINCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJUUlVFIg0KKwkJCQlGYXZvclNpemVPclNwZWVkPSIxIg0KKwkJCQlPcHRpbWl6ZUZvclByb2Nlc3Nvcj0iMiINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZTsuLlwuLiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCO0hBVkVfQ09ORklHX0g7IFVTRV9BTExPQ0EiDQorCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQorCQkJCUV4Y2VwdGlvbkhhbmRsaW5nPSJGQUxTRSINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMSINCisJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQyNDQ7NDMwNTs0MzExOzQxMDA7NDEyNyIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbGlic3BlZXgubGliIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlX1NTRXxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iVFJVRSI+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIzIg0KKwkJCQlHbG9iYWxPcHRpbWl6YXRpb25zPSJUUlVFIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiINCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJUUlVFIg0KKwkJCQlGYXZvclNpemVPclNwZWVkPSIxIg0KKwkJCQlPcHRpbWl6ZUZvclByb2Nlc3Nvcj0iMiINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZTsuLlwuLiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCO0hBVkVfQ09ORklHX0giDQorCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQorCQkJCUV4Y2VwdGlvbkhhbmRsaW5nPSJGQUxTRSINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KKwkJCQlFbmFibGVFbmhhbmNlZEluc3RydWN0aW9uU2V0PSIxIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMSINCisJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQyNDQ7NDMwNTs0MzExOzQxMDA7NDEyNyIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbGlic3BlZXgubGliIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlX1NTRTJ8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IlRSVUUiPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMyINCisJCQkJR2xvYmFsT3B0aW1pemF0aW9ucz0iVFJVRSINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiDQorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iVFJVRSINCisJCQkJRmF2b3JTaXplT3JTcGVlZD0iMSINCisJCQkJT3B0aW1pemVGb3JQcm9jZXNzb3I9IjMiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGU7Li5cLi4iDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0xJQjtIQVZFX0NPTkZJR19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iRkFMU0UiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCisJCQkJRW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldD0iMiINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjEiDQorCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MjQ0OzQzMDU7NDMxMTs0MTAwOzQxMjciLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL2xpYnNwZWV4LmxpYiIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZV9EeW5hbWljfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJUUlVFIj4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjMiDQorCQkJCUdsb2JhbE9wdGltaXphdGlvbnM9IlRSVUUiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIg0KKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9IlRSVUUiDQorCQkJCUZhdm9yU2l6ZU9yU3BlZWQ9IjEiDQorCQkJCU9wdGltaXplRm9yUHJvY2Vzc29yPSIyIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlOy4uXC4uIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19MSUI7SEFWRV9DT05GSUdfSCINCisJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCisJCQkJRXhjZXB0aW9uSGFuZGxpbmc9IkZBTFNFIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIxIg0KKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDI0NDs0MzA1OzQzMTE7NDEwMDs0MTI3Ii8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJzcGVleC5kZWYiDQorCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMiINCisJCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiINCisJCQkJT3B0aW1pemVGb3JXaW5kb3dzOTg9IjEiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwk8L0NvbmZpZ3VyYXRpb25zPg0KKwk8UmVmZXJlbmNlcz4NCisJPC9SZWZlcmVuY2VzPg0KKwk8RmlsZXM+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KKwkJCUZpbHRlcj0iY3BwO2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiDQorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcYml0cy5jIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxjYl9zZWFyY2guYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcZXhjXzEwXzE2X3RhYmxlLmMiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGV4Y18xMF8zMl90YWJsZS5jIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxleGNfMjBfMzJfdGFibGUuYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcZXhjXzVfMjU2X3RhYmxlLmMiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGV4Y181XzY0X3RhYmxlLmMiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGV4Y184XzEyOF90YWJsZS5jIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxmaWx0ZXJzLmMiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGdhaW5fdGFibGUuYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcZ2Fpbl90YWJsZV9sYnIuYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcaGV4Y18xMF8zMl90YWJsZS5jIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxoZXhjX3RhYmxlLmMiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGhpZ2hfbHNwX3RhYmxlcy5jIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxqaXR0ZXIuYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxsaWJzcGVleC5kZWYiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGxwYy5jIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxsc3AuYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcbHNwX3RhYmxlc19uYi5jIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxsdHAuYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcbWF0aF9hcHByb3guYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcbWRmLmMiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XG1lZGZpbHRlci5jIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxtaXNjLmMiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XG1vZGVzLmMiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XG5iX2NlbHAuYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhccHJlcHJvY2Vzcy5jIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxxdWFudF9sc3AuYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcc2JfY2VscC5jIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxzbWFsbGZ0LmMiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XHNwZWV4LmMiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XHNwZWV4X2NhbGxiYWNrcy5jIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxzcGVleF9oZWFkZXIuYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcc3RlcmVvLmMiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XHZici5jIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFx2cS5jIj4NCisJCQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiDQorCQkJVW5pcXVlSWRlbnRpZmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcY2Jfc2VhcmNoLmgiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGNvbmZpZy5oIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxmaWx0ZXJzLmgiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGZpbHRlcnNfc3NlLmgiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGxwYy5oIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxsc3AuaCI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcbHRwLmgiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGx0cF9zc2UuaCI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcbWF0aF9hcHByb3guaCI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcbWlzYy5oIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxtb2Rlcy5oIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxuYl9jZWxwLmgiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XHF1YW50X2xzcC5oIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxzYl9jZWxwLmgiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcc3BlZXhcc3BlZXguaCI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxzcGVleFxzcGVleF9iaXRzLmgiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcc3BlZXhcc3BlZXhfY2FsbGJhY2tzLmgiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcc3BlZXhcc3BlZXhfZWNoby5oIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmNsdWRlXHNwZWV4XHNwZWV4X2hlYWRlci5oIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmNsdWRlXHNwZWV4XHNwZWV4X2ppdHRlci5oIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmNsdWRlXHNwZWV4XHNwZWV4X25vZ2xvYmFscy5oIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmNsdWRlXHNwZWV4XHNwZWV4X3ByZXByb2Nlc3MuaCI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxzcGVleFxzcGVleF9zdGVyZW8uaCI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxzcGVleFxzcGVleF90eXBlcy5oIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxzdGFja19hbGxvYy5oIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFx2YnIuaCI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcdnEuaCI+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQorCQkJRmlsdGVyPSJyYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NjdEQTZBQjYtRjgwMC00YzA4LThCN0EtODNCQjEyMUFBRDAxfSI+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWxlDQorCQkJUmVsYXRpdmVQYXRoPSIuXFJlYWRNZS50eHQiPg0KKwkJPC9GaWxlPg0KKwk8L0ZpbGVzPg0KKwk8R2xvYmFscz4NCisJPC9HbG9iYWxzPg0KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDMvc3BlZXhkZWMvTWFrZWZpbGUuYW0gYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDMvc3BlZXhkZWMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiOTNjMQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL1ZTMjAwMy9zcGVleGRlYy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDggQEAKKyMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbi4gLSotTWFrZWZpbGUtKi0NCisNCisjIERpc2FibGUgYXV0b21hdGljIGRlcGVuZGVuY3kgdHJhY2tpbmcgaWYgdXNpbmcgb3RoZXIgdG9vbHMgdGhhbiBnY2MgYW5kIGdtYWtlDQorI0FVVE9NQUtFX09QVElPTlMgPSBuby1kZXBlbmRlbmNpZXMNCisNCitFWFRSQV9ESVNUID0gc3BlZXhkZWMudmNwcm9qDQorDQorDQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvd2luMzIvVlMyMDAzL3NwZWV4ZGVjL3NwZWV4ZGVjLnZjcHJvaiBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL1ZTMjAwMy9zcGVleGRlYy9zcGVleGRlYy52Y3Byb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM5MGJlNAotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL1ZTMjAwMy9zcGVleGRlYy9zcGVleGRlYy52Y3Byb2oKQEAgLTAsMCArMSwyOTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0DQorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KKwlWZXJzaW9uPSI3LjEwIg0KKwlOYW1lPSJzcGVleGRlYyINCisJUHJvamVjdEdVSUQ9Ins5NjFCODM1OS0xMzkzLTRFRjctQjhFMC02N0I2RkUxQzZEQTh9Ig0KKwlLZXl3b3JkPSJXaW4zMlByb2oiPg0KKwk8UGxhdGZvcm1zPg0KKwkJPFBsYXRmb3JtDQorCQkJTmFtZT0iV2luMzIiLz4NCisJPC9QbGF0Zm9ybXM+DQorCTxDb25maWd1cmF0aW9ucz4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJEZWJ1ZyINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IkRlYnVnIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUNoYXJhY3RlclNldD0iMiI+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGxpYm9nZ1xpbmNsdWRlOy4uXC4uXC4uXGxpYnNwZWV4Oy4uXC4uIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19DT05TT0xFO0hBVkVfQ09ORklHX0giDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJUUlVFIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiDQorCQkJCUNvbXBpbGVBcz0iMSIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9zcGVleGRlYy5leGUiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiINCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikvc3BlZXhlbmMucGRiIg0KKwkJCQlTdWJTeXN0ZW09IjEiDQorCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iUmVsZWFzZSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlJlbGVhc2UiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iVFJVRSI+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIzIg0KKwkJCQlHbG9iYWxPcHRpbWl6YXRpb25zPSJUUlVFIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiINCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJUUlVFIg0KKwkJCQlGYXZvclNpemVPclNwZWVkPSIxIg0KKwkJCQlPcHRpbWl6ZUZvclByb2Nlc3Nvcj0iMiINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxsaWJvZ2dcaW5jbHVkZTsuLlwuLlwuLlxsaWJzcGVleDsuLlwuLiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRTtIQVZFX0NPTkZJR19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iRkFMU0UiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjEiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvc3BlZXhkZWMuZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCisJCQkJU3ViU3lzdGVtPSIxIg0KKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQorCQkJCU9wdGltaXplRm9yV2luZG93czk4PSIxIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZV9TU0V8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IlRSVUUiPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMyINCisJCQkJR2xvYmFsT3B0aW1pemF0aW9ucz0iVFJVRSINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiDQorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iVFJVRSINCisJCQkJRmF2b3JTaXplT3JTcGVlZD0iMSINCisJCQkJT3B0aW1pemVGb3JQcm9jZXNzb3I9IjIiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5cbGlib2dnXGluY2x1ZGU7Li5cLi5cLi5cbGlic3BlZXg7Li5cLi4iDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEU7SEFWRV9DT05GSUdfSCINCisJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCisJCQkJRXhjZXB0aW9uSGFuZGxpbmc9IkZBTFNFIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQorCQkJCUVuYWJsZUVuaGFuY2VkSW5zdHJ1Y3Rpb25TZXQ9IjEiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIxIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL3NwZWV4ZGVjLmV4ZSINCisJCQkJTGlua0luY3JlbWVudGFsPSIxIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQorCQkJCVN1YlN5c3RlbT0iMSINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlPcHRpbWl6ZUZvcldpbmRvd3M5OD0iMSINCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2VfU1NFMnxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iVFJVRSI+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIzIg0KKwkJCQlHbG9iYWxPcHRpbWl6YXRpb25zPSJUUlVFIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiINCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJUUlVFIg0KKwkJCQlGYXZvclNpemVPclNwZWVkPSIxIg0KKwkJCQlPcHRpbWl6ZUZvclByb2Nlc3Nvcj0iMyINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxsaWJvZ2dcaW5jbHVkZTsuLlwuLlwuLlxsaWJzcGVleDsuLlwuLiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRTtIQVZFX0NPTkZJR19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iRkFMU0UiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCisJCQkJRW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldD0iMiINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjEiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvc3BlZXhkZWMuZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCisJCQkJU3ViU3lzdGVtPSIxIg0KKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQorCQkJCU9wdGltaXplRm9yV2luZG93czk4PSIxIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJPC9Db25maWd1cmF0aW9ucz4NCisJPFJlZmVyZW5jZXM+DQorCTwvUmVmZXJlbmNlcz4NCisJPEZpbGVzPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ij4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xnZXRvcHQuYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGdldG9wdDEuYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHNwZWV4ZGVjLmMiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x3YXZfaW8uYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHdhdmVfb3V0LmMiPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IkhlYWRlciBGaWxlcyINCisJCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmw7aW5jO3hzZCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSI+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcZ2V0b3B0X3dpbi5oIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcd2F2X2lvLmgiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x3YXZlX291dC5oIj4NCisJCQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCisJCQlGaWx0ZXI9InJjO2ljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZTtyZXN4Ig0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9Ij4NCisJCTwvRmlsdGVyPg0KKwk8L0ZpbGVzPg0KKwk8R2xvYmFscz4NCisJPC9HbG9iYWxzPg0KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDMvc3BlZXhlbmMvTWFrZWZpbGUuYW0gYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDMvc3BlZXhlbmMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDllMzJkYwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL1ZTMjAwMy9zcGVleGVuYy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDggQEAKKyMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbi4gLSotTWFrZWZpbGUtKi0NCisNCisjIERpc2FibGUgYXV0b21hdGljIGRlcGVuZGVuY3kgdHJhY2tpbmcgaWYgdXNpbmcgb3RoZXIgdG9vbHMgdGhhbiBnY2MgYW5kIGdtYWtlDQorI0FVVE9NQUtFX09QVElPTlMgPSBuby1kZXBlbmRlbmNpZXMNCisNCitFWFRSQV9ESVNUID0gc3BlZXhlbmMudmNwcm9qDQorDQorDQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvd2luMzIvVlMyMDAzL3NwZWV4ZW5jL3NwZWV4ZW5jLnZjcHJvaiBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL1ZTMjAwMy9zcGVleGVuYy9zcGVleGVuYy52Y3Byb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg5M2NjOQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL1ZTMjAwMy9zcGVleGVuYy9zcGVleGVuYy52Y3Byb2oKQEAgLTAsMCArMSwyOTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0DQorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KKwlWZXJzaW9uPSI3LjEwIg0KKwlOYW1lPSJzcGVleGVuYyINCisJUHJvamVjdEdVSUQ9Ins5NjFCODM1OS0xMzkzLTRFRjctQjhFMC02N0I2RkUxQzZEQTh9Ig0KKwlLZXl3b3JkPSJXaW4zMlByb2oiPg0KKwk8UGxhdGZvcm1zPg0KKwkJPFBsYXRmb3JtDQorCQkJTmFtZT0iV2luMzIiLz4NCisJPC9QbGF0Zm9ybXM+DQorCTxDb25maWd1cmF0aW9ucz4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJEZWJ1ZyINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IkRlYnVnIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUNoYXJhY3RlclNldD0iMiI+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGxpYm9nZ1xpbmNsdWRlOy4uXC4uXC4uXGxpYnNwZWV4Oy4uXC4uIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19DT05TT0xFO0hBVkVfQ09ORklHX0giDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJUUlVFIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiDQorCQkJCUNvbXBpbGVBcz0iMSIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9zcGVleGVuYy5leGUiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiINCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikvc3BlZXhlbmMucGRiIg0KKwkJCQlTdWJTeXN0ZW09IjEiDQorCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iUmVsZWFzZSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlJlbGVhc2UiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iVFJVRSI+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIzIg0KKwkJCQlHbG9iYWxPcHRpbWl6YXRpb25zPSJUUlVFIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiINCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJUUlVFIg0KKwkJCQlGYXZvclNpemVPclNwZWVkPSIxIg0KKwkJCQlPcHRpbWl6ZUZvclByb2Nlc3Nvcj0iMiINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxsaWJvZ2dcaW5jbHVkZTsuLlwuLlwuLlxsaWJzcGVleDsuLlwuLiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRTtIQVZFX0NPTkZJR19IOiBVU0VfQUxMT0NBIg0KKwkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iRkFMU0UiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjEiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvc3BlZXhlbmMuZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCisJCQkJU3ViU3lzdGVtPSIxIg0KKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQorCQkJCU9wdGltaXplRm9yV2luZG93czk4PSIxIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZV9TU0V8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IlRSVUUiPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMyINCisJCQkJR2xvYmFsT3B0aW1pemF0aW9ucz0iVFJVRSINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiDQorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iVFJVRSINCisJCQkJRmF2b3JTaXplT3JTcGVlZD0iMSINCisJCQkJT3B0aW1pemVGb3JQcm9jZXNzb3I9IjIiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5cbGlib2dnXGluY2x1ZGU7Li5cLi5cLi5cbGlic3BlZXg7Li5cLi4iDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEU7SEFWRV9DT05GSUdfSCINCisJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCisJCQkJRXhjZXB0aW9uSGFuZGxpbmc9IkZBTFNFIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQorCQkJCUVuYWJsZUVuaGFuY2VkSW5zdHJ1Y3Rpb25TZXQ9IjEiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIxIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL3NwZWV4ZW5jLmV4ZSINCisJCQkJTGlua0luY3JlbWVudGFsPSIxIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQorCQkJCVN1YlN5c3RlbT0iMSINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlPcHRpbWl6ZUZvcldpbmRvd3M5OD0iMSINCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2VfU1NFMnxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iVFJVRSI+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIzIg0KKwkJCQlHbG9iYWxPcHRpbWl6YXRpb25zPSJUUlVFIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiINCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJUUlVFIg0KKwkJCQlGYXZvclNpemVPclNwZWVkPSIxIg0KKwkJCQlPcHRpbWl6ZUZvclByb2Nlc3Nvcj0iMyINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxsaWJvZ2dcaW5jbHVkZTsuLlwuLlwuLlxsaWJzcGVleDsuLlwuLiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRTtIQVZFX0NPTkZJR19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iRkFMU0UiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCisJCQkJRW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldD0iMiINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjEiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvc3BlZXhlbmMuZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCisJCQkJU3ViU3lzdGVtPSIxIg0KKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQorCQkJCU9wdGltaXplRm9yV2luZG93czk4PSIxIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJPC9Db25maWd1cmF0aW9ucz4NCisJPFJlZmVyZW5jZXM+DQorCTwvUmVmZXJlbmNlcz4NCisJPEZpbGVzPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ij4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xnZXRvcHQuYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGdldG9wdDEuYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHNwZWV4ZW5jLmMiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x3YXZfaW8uYyI+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHdhdmVfb3V0LmMiPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IkhlYWRlciBGaWxlcyINCisJCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmw7aW5jO3hzZCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSI+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcZ2V0b3B0X3dpbi5oIj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcd2F2X2lvLmgiPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x3YXZlX291dC5oIj4NCisJCQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCisJCQlGaWx0ZXI9InJjO2ljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZTtyZXN4Ig0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9Ij4NCisJCTwvRmlsdGVyPg0KKwk8L0ZpbGVzPg0KKwk8R2xvYmFscz4NCisJPC9HbG9iYWxzPg0KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDUvTWFrZWZpbGUuYW0gYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDUvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2OThkNwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL1ZTMjAwNS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDggQEAKKyMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbi4gLSotTWFrZWZpbGUtKi0NCisNCisjIERpc2FibGUgYXV0b21hdGljIGRlcGVuZGVuY3kgdHJhY2tpbmcgaWYgdXNpbmcgb3RoZXIgdG9vbHMgdGhhbiBnY2MgYW5kIGdtYWtlDQorI0FVVE9NQUtFX09QVElPTlMgPSBuby1kZXBlbmRlbmNpZXMNCisNCitTVUJESVJTID0gbGlic3BlZXggc3BlZXhlbmMgc3BlZXhkZWMNCisNCitFWFRSQV9ESVNUID0gDQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvd2luMzIvVlMyMDA1L2xpYnNwZWV4L01ha2VmaWxlLmFtIGIvM3JkcGFydHkvc3BlZXgvd2luMzIvVlMyMDA1L2xpYnNwZWV4L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZTQ2NmMKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDUvbGlic3BlZXgvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw4IEBACisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4uIC0qLU1ha2VmaWxlLSotDQorDQorIyBEaXNhYmxlIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nIGlmIHVzaW5nIG90aGVyIHRvb2xzIHRoYW4gZ2NjIGFuZCBnbWFrZQ0KKyNBVVRPTUFLRV9PUFRJT05TID0gbm8tZGVwZW5kZW5jaWVzDQorDQorRVhUUkFfRElTVCA9IGxpYnNwZWV4LnZjcHJvag0KKw0KKw0KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3dpbjMyL1ZTMjAwNS9saWJzcGVleC9saWJzcGVleC52Y3Byb2ogYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDUvbGlic3BlZXgvbGlic3BlZXgudmNwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NTY1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDUvbGlic3BlZXgvbGlic3BlZXgudmNwcm9qCkBAIC0wLDAgKzEsMTY5MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQorPFZpc3VhbFN0dWRpb1Byb2plY3QNCisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQorCVZlcnNpb249IjguMDAiDQorCU5hbWU9ImxpYnNwZWV4Ig0KKwlQcm9qZWN0R1VJRD0ie0U5NzJDNTJGLTlFODUtNEQ2NS1CMTlDLTAzMUU1MTFFOURCNH0iDQorCVJvb3ROYW1lc3BhY2U9ImxpYnNwZWV4Ig0KKwlLZXl3b3JkPSJXaW4zMlByb2oiDQorCT4NCisJPFBsYXRmb3Jtcz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9IldpbjMyIg0KKwkJLz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJLz4NCisJPC9QbGF0Zm9ybXM+DQorCTxUb29sRmlsZXM+DQorCTwvVG9vbEZpbGVzPg0KKwk8Q29uZmlndXJhdGlvbnM+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IkRlYnVnIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlOy4uXC4uIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19MSUI7SEFWRV9DT05GSUdfSCINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCINCisJCQkJQ29tcGlsZUFzPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbGlic3BlZXgubGliIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJSZWxlYXNlIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMyINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiDQorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSINCisJCQkJRmF2b3JTaXplT3JTcGVlZD0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZTsuLlwuLiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCO0hBVkVfQ09ORklHX0giDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIxIg0KKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDI0NDs0MzA1OzQzMTE7NDEwMDs0MTI3Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbGlic3BlZXgubGliIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZV9TU0V8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMyINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiDQorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSINCisJCQkJRmF2b3JTaXplT3JTcGVlZD0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZTsuLlwuLiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCO0hBVkVfQ09ORklHX0giDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCUVuYWJsZUVuaGFuY2VkSW5zdHJ1Y3Rpb25TZXQ9IjEiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIxIg0KKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDI0NDs0MzA1OzQzMTE7NDEwMDs0MTI3Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbGlic3BlZXgubGliIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZV9TU0UyfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjMiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIg0KKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQorCQkJCUZhdm9yU2l6ZU9yU3BlZWQ9IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGU7Li5cLi4iDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0xJQjtIQVZFX0NPTkZJR19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlFbmFibGVFbmhhbmNlZEluc3RydWN0aW9uU2V0PSIyIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMSINCisJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQyNDQ7NDMwNTs0MzExOzQxMDA7NDEyNyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL2xpYnNwZWV4LmxpYiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2VfRHluYW1pY3xXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIzIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiINCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIg0KKwkJCQlGYXZvclNpemVPclNwZWVkPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlOy4uXC4uIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19MSUI7SEFWRV9DT05GSUdfSCINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjEiDQorCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MjQ0OzQzMDU7NDMxMTs0MTAwOzQxMjciDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJzcGVleC5kZWYiDQorCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMiINCisJCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiINCisJCQkJT3B0aW1pemVGb3JXaW5kb3dzOTg9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnX1JUTF9kbGx8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlOy4uXC4uIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19MSUI7SEFWRV9DT05GSUdfSCINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJUnVudGltZUxpYnJhcnk9IjMiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCINCisJCQkJQ29tcGlsZUFzPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbGlic3BlZXgubGliIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZV9SVExfZGxsfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjMiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIg0KKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQorCQkJCUZhdm9yU2l6ZU9yU3BlZWQ9IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGU7Li5cLi4iDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0xJQjtIQVZFX0NPTkZJR19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjIiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMSINCisJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQyNDQ7NDMwNTs0MzExOzQxMDA7NDEyNyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL2xpYnNwZWV4LmxpYiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnX1dNNV9QUENfQVJNfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZTsuLlwuLiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfTElCO0hBVkVfQ09ORklHX0giDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiDQorCQkJCUNvbXBpbGVBcz0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL2xpYnNwZWV4LmxpYiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2VfV001X1BQQ19BUk18V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMyINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiDQorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSINCisJCQkJRmF2b3JTaXplT3JTcGVlZD0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZTsuLlwuLiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCO0hBVkVfQ09ORklHX0giDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMiINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIxIg0KKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDI0NDs0MzA1OzQzMTE7NDEwMDs0MTI3Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbGlic3BlZXgubGliIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlOy4uXC4uIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19MSUI7SEFWRV9DT05GSUdfSCINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlDb21waWxlQXM9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9saWJzcGVleC5saWIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJQ2hhcmFjdGVyU2V0PSIxIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjMiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIg0KKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQorCQkJCUZhdm9yU2l6ZU9yU3BlZWQ9IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGU7Li5cLi4iDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0xJQjtIQVZFX0NPTkZJR19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjEiDQorCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MjQ0OzQzMDU7NDMxMTs0MTAwOzQxMjciDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9saWJzcGVleC5saWIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlX1NTRXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMSINCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIzIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiINCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIg0KKwkJCQlGYXZvclNpemVPclNwZWVkPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlOy4uXC4uIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19MSUI7SEFWRV9DT05GSUdfSCINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIxIg0KKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDI0NDs0MzA1OzQzMTE7NDEwMDs0MTI3Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbGlic3BlZXgubGliIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZV9TU0UyfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJQ2hhcmFjdGVyU2V0PSIxIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjMiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIg0KKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQorCQkJCUZhdm9yU2l6ZU9yU3BlZWQ9IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGU7Li5cLi4iDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0xJQjtIQVZFX0NPTkZJR19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjEiDQorCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MjQ0OzQzMDU7NDMxMTs0MTAwOzQxMjciDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9saWJzcGVleC5saWIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlX0R5bmFtaWN8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjEiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMyINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiDQorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSINCisJCQkJRmF2b3JTaXplT3JTcGVlZD0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZTsuLlwuLiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCO0hBVkVfQ09ORklHX0giDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMSINCisJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQyNDQ7NDMwNTs0MzExOzQxMDA7NDEyNyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9ImxpYnNwZWV4LmRlZiINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlPcHRpbWl6ZUZvcldpbmRvd3M5OD0iMSINCisJCQkJVGFyZ2V0TWFjaGluZT0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnX1JUTF9kbGx8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlOy4uXC4uIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19MSUI7SEFWRV9DT05GSUdfSCINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlDb21waWxlQXM9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9saWJzcGVleC5saWIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlX1JUTF9kbGx8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjEiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMyINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiDQorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSINCisJCQkJRmF2b3JTaXplT3JTcGVlZD0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZTsuLlwuLiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCO0hBVkVfQ09ORklHX0giDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMiINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMSINCisJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQyNDQ7NDMwNTs0MzExOzQxMDA7NDEyNyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL2xpYnNwZWV4LmxpYiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnX1dNNV9QUENfQVJNfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJQ2hhcmFjdGVyU2V0PSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZTsuLlwuLiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfTElCO0hBVkVfQ09ORklHX0g7RklYRURfUE9JTlQ7X1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRTskKFBMQVRGT1JNREVGSU5FUyk7V0lOQ0U7JChBUkNIRkFNKTskKF9BUkNIRkFNXykiDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMyINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCisJCQkJQ29tcGlsZUFzPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbGlic3BlZXgubGliIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZV9XTTVfUFBDX0FSTXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMSINCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIzIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiINCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIg0KKwkJCQlGYXZvclNpemVPclNwZWVkPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlOy4uXC4uIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19MSUI7SEFWRV9DT05GSUdfSDtGSVhFRF9QT0lOVDtfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFOyQoUExBVEZPUk1ERUZJTkVTKTtXSU5DRTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKSINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCisJCQkJQ29tcGlsZUFzPSIxIg0KKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDI0NDs0MzA1OzQzMTE7NDEwMDs0MTI3Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbGlic3BlZXgubGliIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJPC9Db25maWd1cmF0aW9ucz4NCisJPFJlZmVyZW5jZXM+DQorCTwvUmVmZXJlbmNlcz4NCisJPEZpbGVzPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ig0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGJpdHMuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGNiX3NlYXJjaC5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcZXhjXzEwXzE2X3RhYmxlLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxleGNfMTBfMzJfdGFibGUuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGV4Y18yMF8zMl90YWJsZS5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcZXhjXzVfMjU2X3RhYmxlLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxleGNfNV82NF90YWJsZS5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcZXhjXzhfMTI4X3RhYmxlLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxmZnR3cmFwLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxmaWx0ZXJiYW5rLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxmaWx0ZXJzLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxnYWluX3RhYmxlLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxnYWluX3RhYmxlX2xici5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcaGV4Y18xMF8zMl90YWJsZS5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcaGV4Y190YWJsZS5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcaGlnaF9sc3BfdGFibGVzLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxqaXR0ZXIuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGtpc3NfZmZ0LmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxraXNzX2ZmdHIuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cbGlic3BlZXguZGVmIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcbHBjLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxsc3AuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGxzcF90YWJsZXNfbmIuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGx0cC5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcbWF0aF9hcHByb3guYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XG1kZi5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcbWVkZmlsdGVyLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxtaXNjLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxtb2Rlcy5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcbmJfY2VscC5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhccHJlcHJvY2Vzcy5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhccXVhbnRfbHNwLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxzYl9jZWxwLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxzbWFsbGZ0LmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxzcGVleC5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcc3BlZXhfY2FsbGJhY2tzLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxzcGVleF9oZWFkZXIuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XHN0ZXJlby5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcdmJyLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFx2cS5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcd2luZG93LmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiDQorCQkJVW5pcXVlSWRlbnRpZmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcY2Jfc2VhcmNoLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxjb25maWcuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGZmdHdyYXAuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGZpbHRlcnMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGZpbHRlcnNfc3NlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxraXNzX2ZmdC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhca2lzc19mZnRyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxscGMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XGxzcC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcbHRwLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxsdHBfc3NlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxtYXRoX2FwcHJveC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcbWlzYy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcbW9kZXMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XG5iX2NlbHAuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XHBzZXVkb2Zsb2F0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxsaWJzcGVleFxxdWFudF9sc3AuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XHNiX2NlbHAuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcc3BlZXhcc3BlZXguaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcc3BlZXhcc3BlZXhfYml0cy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxzcGVleFxzcGVleF9jYWxsYmFja3MuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcc3BlZXhcc3BlZXhfZWNoby5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxzcGVleFxzcGVleF9oZWFkZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcc3BlZXhcc3BlZXhfaml0dGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmNsdWRlXHNwZWV4XHNwZWV4X25vZ2xvYmFscy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxzcGVleFxzcGVleF9wcmVwcm9jZXNzLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmNsdWRlXHNwZWV4XHNwZWV4X3N0ZXJlby5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxzcGVleFxzcGVleF90eXBlcy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcc3RhY2tfYWxsb2MuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGxpYnNwZWV4XHZici5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cbGlic3BlZXhcdnEuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlJlc291cmNlIEZpbGVzIg0KKwkJCUZpbHRlcj0icmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3giDQorCQkJVW5pcXVlSWRlbnRpZmllcj0iezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX0iDQorCQkJPg0KKwkJPC9GaWx0ZXI+DQorCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLlxSZWFkTWUudHh0Ig0KKwkJCT4NCisJCTwvRmlsZT4NCisJPC9GaWxlcz4NCisJPEdsb2JhbHM+DQorCTwvR2xvYmFscz4NCis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvd2luMzIvVlMyMDA1L3NwZWV4ZGVjL01ha2VmaWxlLmFtIGIvM3JkcGFydHkvc3BlZXgvd2luMzIvVlMyMDA1L3NwZWV4ZGVjL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYjkzYzEKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDUvc3BlZXhkZWMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw4IEBACisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4uIC0qLU1ha2VmaWxlLSotDQorDQorIyBEaXNhYmxlIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nIGlmIHVzaW5nIG90aGVyIHRvb2xzIHRoYW4gZ2NjIGFuZCBnbWFrZQ0KKyNBVVRPTUFLRV9PUFRJT05TID0gbm8tZGVwZW5kZW5jaWVzDQorDQorRVhUUkFfRElTVCA9IHNwZWV4ZGVjLnZjcHJvag0KKw0KKw0KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3dpbjMyL1ZTMjAwNS9zcGVleGRlYy9zcGVleGRlYy52Y3Byb2ogYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDUvc3BlZXhkZWMvc3BlZXhkZWMudmNwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiN2EzZWUKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDUvc3BlZXhkZWMvc3BlZXhkZWMudmNwcm9qCkBAIC0wLDAgKzEsNDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCis8VmlzdWFsU3R1ZGlvUHJvamVjdA0KKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCisJVmVyc2lvbj0iOC4wMCINCisJTmFtZT0ic3BlZXhkZWMiDQorCVByb2plY3RHVUlEPSJ7OTYxQjgzNTktMTM5My00RUY3LUI4RTAtNjdCNkZFMUM2REE4fSINCisJUm9vdE5hbWVzcGFjZT0ic3BlZXhkZWMiDQorCUtleXdvcmQ9IldpbjMyUHJvaiINCisJPg0KKwk8UGxhdGZvcm1zPg0KKwkJPFBsYXRmb3JtDQorCQkJTmFtZT0iV2luMzIiDQorCQkvPg0KKwk8L1BsYXRmb3Jtcz4NCisJPFRvb2xGaWxlcz4NCisJPC9Ub29sRmlsZXM+DQorCTxDb25maWd1cmF0aW9ucz4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iRGVidWciDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5cbGlib2dnXGluY2x1ZGU7Li5cLi5cLi5cbGlic3BlZXg7Li5cLi4iDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0NPTlNPTEU7SEFWRV9DT05GSUdfSCINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCINCisJCQkJQ29tcGlsZUFzPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9zcGVleGRlYy5leGUiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiINCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikvc3BlZXhlbmMucGRiIg0KKwkJCQlTdWJTeXN0ZW09IjEiDQorCQkJCVRhcmdldE1hY2hpbmU9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iUmVsZWFzZSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjMiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIg0KKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQorCQkJCUZhdm9yU2l6ZU9yU3BlZWQ9IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5cbGlib2dnXGluY2x1ZGU7Li5cLi5cLi5cbGlic3BlZXg7Li5cLi4iDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEU7SEFWRV9DT05GSUdfSCINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL3NwZWV4ZGVjLmV4ZSINCisJCQkJTGlua0luY3JlbWVudGFsPSIxIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVN1YlN5c3RlbT0iMSINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlPcHRpbWl6ZUZvcldpbmRvd3M5OD0iMSINCisJCQkJVGFyZ2V0TWFjaGluZT0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZV9TU0V8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMyINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiDQorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSINCisJCQkJRmF2b3JTaXplT3JTcGVlZD0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxsaWJvZ2dcaW5jbHVkZTsuLlwuLlwuLlxsaWJzcGVleDsuLlwuLiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRTtIQVZFX0NPTkZJR19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlFbmFibGVFbmhhbmNlZEluc3RydWN0aW9uU2V0PSIxIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvc3BlZXhkZWMuZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJU3ViU3lzdGVtPSIxIg0KKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQorCQkJCU9wdGltaXplRm9yV2luZG93czk4PSIxIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlX1NTRTJ8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMyINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiDQorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSINCisJCQkJRmF2b3JTaXplT3JTcGVlZD0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxsaWJvZ2dcaW5jbHVkZTsuLlwuLlwuLlxsaWJzcGVleDsuLlwuLiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRTtIQVZFX0NPTkZJR19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KKwkJCQlFbmFibGVFbmhhbmNlZEluc3RydWN0aW9uU2V0PSIyIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvc3BlZXhkZWMuZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJU3ViU3lzdGVtPSIxIg0KKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQorCQkJCU9wdGltaXplRm9yV2luZG93czk4PSIxIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwk8L0NvbmZpZ3VyYXRpb25zPg0KKwk8UmVmZXJlbmNlcz4NCisJPC9SZWZlcmVuY2VzPg0KKwk8RmlsZXM+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KKwkJCUZpbHRlcj0iY3BwO2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiDQorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGdldG9wdC5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGdldG9wdDEuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xza2VsZXRvbi5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHNwZWV4ZGVjLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcd2F2X2lvLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcd2F2ZV9vdXQuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IkhlYWRlciBGaWxlcyINCisJCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmw7aW5jO3hzZCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcZ2V0b3B0X3dpbi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHNrZWxldG9uLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcd2F2X2lvLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcd2F2ZV9vdXQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlJlc291cmNlIEZpbGVzIg0KKwkJCUZpbHRlcj0icmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3giDQorCQkJVW5pcXVlSWRlbnRpZmllcj0iezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX0iDQorCQkJPg0KKwkJPC9GaWx0ZXI+DQorCTwvRmlsZXM+DQorCTxHbG9iYWxzPg0KKwk8L0dsb2JhbHM+DQorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3dpbjMyL1ZTMjAwNS9zcGVleGVuYy9NYWtlZmlsZS5hbSBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL1ZTMjAwNS9zcGVleGVuYy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWUzMmRjCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvd2luMzIvVlMyMDA1L3NwZWV4ZW5jL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsOCBAQAorIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluLiAtKi1NYWtlZmlsZS0qLQ0KKw0KKyMgRGlzYWJsZSBhdXRvbWF0aWMgZGVwZW5kZW5jeSB0cmFja2luZyBpZiB1c2luZyBvdGhlciB0b29scyB0aGFuIGdjYyBhbmQgZ21ha2UNCisjQVVUT01BS0VfT1BUSU9OUyA9IG5vLWRlcGVuZGVuY2llcw0KKw0KK0VYVFJBX0RJU1QgPSBzcGVleGVuYy52Y3Byb2oNCisNCisNCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC93aW4zMi9WUzIwMDUvc3BlZXhlbmMvc3BlZXhlbmMudmNwcm9qIGIvM3JkcGFydHkvc3BlZXgvd2luMzIvVlMyMDA1L3NwZWV4ZW5jL3NwZWV4ZW5jLnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDFkMDk3Ci0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvd2luMzIvVlMyMDA1L3NwZWV4ZW5jL3NwZWV4ZW5jLnZjcHJvagpAQCAtMCwwICsxLDQzMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQorPFZpc3VhbFN0dWRpb1Byb2plY3QNCisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQorCVZlcnNpb249IjguMDAiDQorCU5hbWU9InNwZWV4ZW5jIg0KKwlQcm9qZWN0R1VJRD0ie0NENjA0M0QxLUQ1RTctNDZEMC04NTRGLTAwQkIxQkMzMDhGQ30iDQorCVJvb3ROYW1lc3BhY2U9InNwZWV4ZW5jIg0KKwlLZXl3b3JkPSJXaW4zMlByb2oiDQorCT4NCisJPFBsYXRmb3Jtcz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9IldpbjMyIg0KKwkJLz4NCisJPC9QbGF0Zm9ybXM+DQorCTxUb29sRmlsZXM+DQorCTwvVG9vbEZpbGVzPg0KKwk8Q29uZmlndXJhdGlvbnM+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IkRlYnVnIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGxpYm9nZ1xpbmNsdWRlOy4uXC4uXC4uXGxpYnNwZWV4Oy4uXC4uIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19DT05TT0xFO0hBVkVfQ09ORklHX0giDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiDQorCQkJCUNvbXBpbGVBcz0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvc3BlZXhlbmMuZXhlIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjIiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpL3NwZWV4ZW5jLnBkYiINCisJCQkJU3ViU3lzdGVtPSIxIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlJlbGVhc2UiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIzIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiINCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIg0KKwkJCQlGYXZvclNpemVPclNwZWVkPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGxpYm9nZ1xpbmNsdWRlOy4uXC4uXC4uXGxpYnNwZWV4Oy4uXC4uIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFO0hBVkVfQ09ORklHX0giDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9zcGVleGVuYy5leGUiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KKwkJCQlTdWJTeXN0ZW09IjEiDQorCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMiINCisJCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiINCisJCQkJT3B0aW1pemVGb3JXaW5kb3dzOTg9IjEiDQorCQkJCVRhcmdldE1hY2hpbmU9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2VfU1NFfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjMiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIg0KKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQorCQkJCUZhdm9yU2l6ZU9yU3BlZWQ9IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5cbGlib2dnXGluY2x1ZGU7Li5cLi5cLi5cbGlic3BlZXg7Li5cLi4iDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEU7SEFWRV9DT05GSUdfSCINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJRW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldD0iMSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL3NwZWV4ZW5jLmV4ZSINCisJCQkJTGlua0luY3JlbWVudGFsPSIxIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVN1YlN5c3RlbT0iMSINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlPcHRpbWl6ZUZvcldpbmRvd3M5OD0iMSINCisJCQkJVGFyZ2V0TWFjaGluZT0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZV9TU0UyfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjMiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIg0KKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQorCQkJCUZhdm9yU2l6ZU9yU3BlZWQ9IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5cbGlib2dnXGluY2x1ZGU7Li5cLi5cLi5cbGlic3BlZXg7Li5cLi4iDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEU7SEFWRV9DT05GSUdfSCINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCisJCQkJRW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldD0iMiINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL3NwZWV4ZW5jLmV4ZSINCisJCQkJTGlua0luY3JlbWVudGFsPSIxIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVN1YlN5c3RlbT0iMSINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlPcHRpbWl6ZUZvcldpbmRvd3M5OD0iMSINCisJCQkJVGFyZ2V0TWFjaGluZT0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJPC9Db25maWd1cmF0aW9ucz4NCisJPFJlZmVyZW5jZXM+DQorCTwvUmVmZXJlbmNlcz4NCisJPEZpbGVzPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ig0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xnZXRvcHQuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xnZXRvcHQxLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcc2tlbGV0b24uYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xzcGVleGVuYy5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHdhdl9pby5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHdhdmVfb3V0LmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiDQorCQkJVW5pcXVlSWRlbnRpZmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGdldG9wdF93aW4uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xza2VsZXRvbi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHdhdl9pby5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHdhdmVfb3V0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCisJCQlGaWx0ZXI9InJjO2ljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZTtyZXN4Ig0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9Ig0KKwkJCT4NCisJCTwvRmlsdGVyPg0KKwk8L0ZpbGVzPg0KKwk8R2xvYmFscz4NCisJPC9HbG9iYWxzPg0KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC93aW4zMi9jb25maWcuaCBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NDlmMzMKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9jb25maWcuaApAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgaW5saW5lIF9faW5saW5lCisjZGVmaW5lIHJlc3RyaWN0CisjaW5jbHVkZSAibWlzYy5oIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3dpbjMyL2xpYnNwZWV4L01ha2VmaWxlLmFtIGIvM3JkcGFydHkvc3BlZXgvd2luMzIvbGlic3BlZXgvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQzMGM3OAotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL2xpYnNwZWV4L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNiBAQAorIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluLiAtKi1NYWtlZmlsZS0qLQorCisjIERpc2FibGUgYXV0b21hdGljIGRlcGVuZGVuY3kgdHJhY2tpbmcgaWYgdXNpbmcgb3RoZXIgdG9vbHMgdGhhbiBnY2MgYW5kIGdtYWtlCisjQVVUT01BS0VfT1BUSU9OUyA9IG5vLWRlcGVuZGVuY2llcworCitFWFRSQV9ESVNUID0gbGlic3BlZXguZHNwICBsaWJzcGVleC5kc3cgbGlic3BlZXhfZHluYW1pYy5kc3Agc3BlZXguZGVmCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC93aW4zMi9saWJzcGVleC9saWJzcGVleC5kc3AgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9saWJzcGVleC9saWJzcGVleC5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhOGI1YwotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL2xpYnNwZWV4L2xpYnNwZWV4LmRzcApAQCAtMCwwICsxLDMwMiBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJsaWJzcGVleCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCisjICoqIERPIE5PVCBFRElUICoqDQorDQorIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiIDB4MDEwNA0KKw0KK0NGRz1saWJzcGVleCAtIFdpbjMyIERlYnVnDQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJsaWJzcGVleC5tYWsiLg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAibGlic3BlZXgubWFrIiBDRkc9ImxpYnNwZWV4IC0gV2luMzIgRGVidWciDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgImxpYnNwZWV4IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBTdGF0aWMgTGlicmFyeSIpDQorIU1FU1NBR0UgImxpYnNwZWV4IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiKQ0KKyFNRVNTQUdFIA0KKw0KKyMgQmVnaW4gUHJvamVjdA0KKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQorIyBQUk9QIFNjY19Qcm9qTmFtZSAiUGVyZm9yY2UgUHJvamVjdCINCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiLi5cLi4iDQorQ1BQPWNsLmV4ZQ0KK1JTQz1yYy5leGUNCisNCishSUYgICIkKENGRykiID09ICJsaWJzcGVleCAtIFdpbjMyIFJlbGVhc2UiDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorRjkwPWRmLmV4ZQ0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCisjIEFERCBDUFAgL25vbG9nbyAvR1ggL094IC9PdCAvT2cgL09pIC9PYjIgL0kgIi4uLy4uL2luY2x1ZGUiIC9JICIuLi8iIC9EIGlubGluZT1fX2lubGluZSAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIkhBVkVfQ09ORklHX0giIC9ZWCAvRkQgL2MNCisjIEFERCBCQVNFIFJTQyAvbCAweDgwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDgwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJQjMyPWxpbmsuZXhlIC1saWINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28NCisjIEFERCBMSUIzMiAvbm9sb2dvDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYnNwZWV4IC0gV2luMzIgRGVidWciDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIE91dHB1dF9EaXIgIkRlYnVnIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KK0Y5MD1kZi5leGUNCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL0daIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL1czIC9HWCAvT3ggL090IC9PZyAvT2kgL09iMiAvSSAiLi4vLi4vaW5jbHVkZSIgL0kgIi4uLyIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJIQVZFX0NPTkZJR19IIiAvWVggL0ZEIC9jDQorIyBBREQgQkFTRSBSU0MgL2wgMHg4MDkgL2QgIl9ERUJVRyINCisjIEFERCBSU0MgL2wgMHg4MDkgL2QgIl9ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSUIzMj1saW5rLmV4ZSAtbGliDQorIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvDQorIyBBREQgTElCMzIgL25vbG9nbw0KKw0KKyFFTkRJRiANCisNCisjIEJlZ2luIFRhcmdldA0KKw0KKyMgTmFtZSAibGlic3BlZXggLSBXaW4zMiBSZWxlYXNlIg0KKyMgTmFtZSAibGlic3BlZXggLSBXaW4zMiBEZWJ1ZyINCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0Ig0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcYml0cy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XGNiX3NlYXJjaC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XGV4Y18xMF8xNl90YWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XGV4Y18xMF8zMl90YWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XGV4Y18yMF8zMl90YWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XGV4Y181XzI1Nl90YWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XGV4Y181XzY0X3RhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcZXhjXzhfMTI4X3RhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcZmlsdGVycy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XGdhaW5fdGFibGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxnYWluX3RhYmxlX2xici5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XGhleGNfMTBfMzJfdGFibGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxoZXhjX3RhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcaGlnaF9sc3BfdGFibGVzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcbHBjLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcbHNwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcbHNwX3RhYmxlc19uYi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XGx0cC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XG1hdGhfYXBwcm94LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcbWlzYy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XG1vZGVzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcbmJfY2VscC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XHByZXByb2Nlc3MuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxxdWFudF9sc3AuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxzYl9jZWxwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcc21hbGxmdC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XHNwZWV4LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcc3BlZXhfY2FsbGJhY2tzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcc3BlZXhfaGVhZGVyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcc3RlcmVvLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcdmJyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcdnEuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJoO2hwcDtoeHg7aG07aW5sIg0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcY2Jfc2VhcmNoLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcZmlsdGVycy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XGxwYy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XGxzcC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XGx0cC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XG1pc2MuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxtb2Rlcy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XG5iX2NlbHAuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxxdWFudF9sc3AuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxzYl9jZWxwLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcc21hbGxmdC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XHNwZWV4LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcc3BlZXhfYml0cy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XHNwZWV4X2NhbGxiYWNrcy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XHNwZWV4X2Rlbm9pc2UuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxzcGVleF9oZWFkZXIuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxzcGVleF9zdGVyZW8uaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxzdGFja19hbGxvYy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XHZici5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XHZxLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQorIyBFbmQgVGFyZ2V0DQorIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhLzNyZHBhcnR5L3NwZWV4L3dpbjMyL2xpYnNwZWV4L2xpYnNwZWV4LmRzdyBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL2xpYnNwZWV4L2xpYnNwZWV4LmRzdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmI1NmZlCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvd2luMzIvbGlic3BlZXgvbGlic3BlZXguZHN3CkBAIC0wLDAgKzEsNDEgQEAKK01pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFdvcmtzcGFjZSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyBXQVJOSU5HOiBETyBOT1QgRURJVCBPUiBERUxFVEUgVEhJUyBXT1JLU1BBQ0UgRklMRSENCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImxpYnNwZWV4Ij0uXGxpYnNwZWV4LmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAibGlic3BlZXhfZHluYW1pYyI9LlxsaWJzcGVleF9keW5hbWljLmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitHbG9iYWw6DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTwzPg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC93aW4zMi9saWJzcGVleC9saWJzcGVleF9keW5hbWljLmRzcCBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL2xpYnNwZWV4L2xpYnNwZWV4X2R5bmFtaWMuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMDA5NzIKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9saWJzcGVleC9saWJzcGVleF9keW5hbWljLmRzcApAQCAtMCwwICsxLDMxMSBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJsaWJzcGVleF9keW5hbWljIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KKyMgKiogRE8gTk9UIEVESVQgKioNCisNCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQorDQorQ0ZHPWxpYnNwZWV4X2R5bmFtaWMgLSBXaW4zMiBEZWJ1Zw0KKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAibGlic3BlZXhfZHluYW1pYy5tYWsiLg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAibGlic3BlZXhfZHluYW1pYy5tYWsiIENGRz0ibGlic3BlZXhfZHluYW1pYyAtIFdpbjMyIERlYnVnIg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFICJsaWJzcGVleF9keW5hbWljIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQorIU1FU1NBR0UgImxpYnNwZWV4X2R5bmFtaWMgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQorIU1FU1NBR0UgDQorDQorIyBCZWdpbiBQcm9qZWN0DQorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCisjIFBST1AgU2NjX1Byb2pOYW1lICIiDQorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiINCitDUFA9Y2wuZXhlDQorTVRMPW1pZGwuZXhlDQorUlNDPXJjLmV4ZQ0KKw0KKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYnNwZWV4X2R5bmFtaWMgLSBXaW4zMiBSZWxlYXNlIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgImxpYnNwZWV4X2R5bmFtaWNfX19XaW4zMl9SZWxlYXNlIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgImxpYnNwZWV4X2R5bmFtaWNfX19XaW4zMl9SZWxlYXNlIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJEeW5hbWljX1JlbGVhc2UiDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTElCU1BFRVhfRFlOQU1JQ19FWFBPUlRTIiAvWVggL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9JICIuLi8uLi9pbmNsdWRlIiAvSSAiLi4vIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIkxJQlNQRUVYX0RZTkFNSUNfRVhQT1JUUyIgL0QgIkhBVkVfQ09ORklHX0giIC9ZWCAvRkQgL2MNCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4Ng0KKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4NiAvb3V0OiJSZWxlYXNlL2xpYnNwZWV4LmRsbCINCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAibGlic3BlZXhfZHluYW1pYyAtIFdpbjMyIERlYnVnIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgImxpYnNwZWV4X2R5bmFtaWNfX19XaW4zMl9EZWJ1ZyINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJsaWJzcGVleF9keW5hbWljX19fV2luMzJfRGVidWciDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIE91dHB1dF9EaXIgIkRlYnVnIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJEeW5hbWljX0RlYnVnIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIkxJQlNQRUVYX0RZTkFNSUNfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCisjIEFERCBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0kgIi4uLy4uL2luY2x1ZGUiIC9JICIuLi8iIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTElCU1BFRVhfRFlOQU1JQ19FWFBPUlRTIiAvRCAiSEFWRV9DT05GSUdfSCIgL1lYIC9GRCAvR1ogL2MNCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCisjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiRGVidWcvbGlic3BlZXguZGxsIiAvcGRidHlwZTpzZXB0DQorDQorIUVORElGIA0KKw0KKyMgQmVnaW4gVGFyZ2V0DQorDQorIyBOYW1lICJsaWJzcGVleF9keW5hbWljIC0gV2luMzIgUmVsZWFzZSINCisjIE5hbWUgImxpYnNwZWV4X2R5bmFtaWMgLSBXaW4zMiBEZWJ1ZyINCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxiaXRzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcY2Jfc2VhcmNoLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcZXhjXzEwXzE2X3RhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcZXhjXzEwXzMyX3RhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcZXhjXzIwXzMyX3RhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcZXhjXzVfMjU2X3RhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcZXhjXzVfNjRfdGFibGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxleGNfOF8xMjhfdGFibGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxmaWx0ZXJzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcZ2Fpbl90YWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XGdhaW5fdGFibGVfbGJyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcaGV4Y18xMF8zMl90YWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XGhleGNfdGFibGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxoaWdoX2xzcF90YWJsZXMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxscGMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxsc3AuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxsc3BfdGFibGVzX25iLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcbHRwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcbWF0aF9hcHByb3guYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxtaXNjLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcbW9kZXMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxuYl9jZWxwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhccHJlcHJvY2Vzcy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XHF1YW50X2xzcC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XHNiX2NlbHAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxzbWFsbGZ0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcc3BlZXguYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNwZWV4LmRlZg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxzcGVleF9jYWxsYmFja3MuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxzcGVleF9oZWFkZXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxzdGVyZW8uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFx2YnIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFx2cS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmwiDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxjYl9zZWFyY2guaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxmaWx0ZXJzLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcbHBjLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcbHNwLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcbHRwLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcbWlzYy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XG1vZGVzLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcbmJfY2VscC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XHF1YW50X2xzcC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XHNiX2NlbHAuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxzbWFsbGZ0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcc3BlZXguaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzcGVleFxzcGVleF9iaXRzLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcc3BlZXhfY2FsbGJhY2tzLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcc3BlZXhfZGVub2lzZS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XHNwZWV4X2hlYWRlci5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XHNwZWV4X3N0ZXJlby5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNwZWV4XHN0YWNrX2FsbG9jLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcdmJyLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic3BlZXhcdnEuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCisjIEVuZCBUYXJnZXQNCisjIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvd2luMzIvbGlic3BlZXgvc3BlZXguZGVmIGIvM3JkcGFydHkvc3BlZXgvd2luMzIvbGlic3BlZXgvc3BlZXguZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MDk4YTgKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9saWJzcGVleC9zcGVleC5kZWYKQEAgLTAsMCArMSw3MiBAQAorOworOyBzcGVleC5kZWYKKzsKK0xJQlJBUlkKK05BTUUgbGlic3BlZXguZGxsCitFWFBPUlRTCis7CitzcGVleF9iaXRzX2FkdmFuY2UgQDEKK3NwZWV4X2JpdHNfZGVzdHJveSBAMgorc3BlZXhfYml0c19pbml0IEAzCitzcGVleF9iaXRzX2luaXRfYnVmZmVyIEA0CitzcGVleF9iaXRzX2luc2VydF90ZXJtaW5hdG9yIEA1CitzcGVleF9iaXRzX25ieXRlcyBANgorc3BlZXhfYml0c19wYWNrIEA3CitzcGVleF9iaXRzX3BlZWsgQDgKK3NwZWV4X2JpdHNfcGVla191bnNpZ25lZCBAOQorc3BlZXhfYml0c19yZWFkX2Zyb20gQDEwCitzcGVleF9iaXRzX3JlYWRfd2hvbGVfYnl0ZXMgQDExCitzcGVleF9iaXRzX3JlbWFpbmluZyBAMTIKK3NwZWV4X2JpdHNfcmVzZXQgQDEzCitzcGVleF9iaXRzX3Jld2luZCBAMTQKK3NwZWV4X2JpdHNfdW5wYWNrX3NpZ25lZCBAMTUKK3NwZWV4X2JpdHNfdW5wYWNrX3Vuc2lnbmVkIEAxNgorc3BlZXhfYml0c193cml0ZSBAMTcKK3NwZWV4X2JpdHNfd3JpdGVfd2hvbGVfYnl0ZXMgQDE4CitzcGVleF9kZWNvZGUgQDE5CitzcGVleF9kZWNvZGVfc3RlcmVvIEAyMAorc3BlZXhfZGVjb2Rlcl9jdGwgQDIxCitzcGVleF9kZWNvZGVyX2Rlc3Ryb3kgQDIyCitzcGVleF9kZWNvZGVyX2luaXQgQDIzCitzcGVleF9kZWZhdWx0X3VzZXJfaGFuZGxlciBAMjQKK3NwZWV4X2VuY29kZSBAMjUKK3NwZWV4X2VuY29kZV9zdGVyZW8gQDI2CitzcGVleF9lbmNvZGVyX2N0bCBAMjcKK3NwZWV4X2VuY29kZXJfZGVzdHJveSBAMjgKK3NwZWV4X2VuY29kZXJfaW5pdCBAMjkKK3NwZWV4X2hlYWRlcl90b19wYWNrZXQgQDMwCitzcGVleF9pbmJhbmRfaGFuZGxlciBAMzEKK3NwZWV4X2luaXRfaGVhZGVyIEAzMgorc3BlZXhfbGliX2N0bCBAMzMKK3NwZWV4X21vZGVfcXVlcnkgQDM0CitzcGVleF9wYWNrZXRfdG9faGVhZGVyIEAzNQorc3BlZXhfc3RkX2NoYXJfaGFuZGxlciBAMzYKK3NwZWV4X3N0ZF9lbmhfcmVxdWVzdF9oYW5kbGVyIEAzNworc3BlZXhfc3RkX2hpZ2hfbW9kZV9yZXF1ZXN0X2hhbmRsZXIgQDM4CitzcGVleF9zdGRfbG93X21vZGVfcmVxdWVzdF9oYW5kbGVyIEAzOQorc3BlZXhfc3RkX21vZGVfcmVxdWVzdF9oYW5kbGVyIEA0MAorc3BlZXhfc3RkX3N0ZXJlb19yZXF1ZXN0X2hhbmRsZXIgQDQxCitzcGVleF9zdGRfdmJyX3F1YWxpdHlfcmVxdWVzdF9oYW5kbGVyIEA0Mgorc3BlZXhfc3RkX3Zicl9yZXF1ZXN0X2hhbmRsZXIgQDQzCitzcGVleF9kZWNvZGVfaW50IEA0NAorc3BlZXhfZGVjb2RlX3N0ZXJlb19pbnQgQDQ1CitzcGVleF9lY2hvX2NhbmNlbCBANDYKK3NwZWV4X2VjaG9fc3RhdGVfZGVzdHJveSBANDcKK3NwZWV4X2VjaG9fc3RhdGVfaW5pdCBANDgKK3NwZWV4X2VjaG9fc3RhdGVfcmVzZXQgQDQ5CitzcGVleF9lbmNvZGVfaW50IEA1MAorc3BlZXhfZW5jb2RlX3N0ZXJlb19pbnQgQDUxCitzcGVleF9qaXR0ZXJfZGVzdHJveSBANTIKK3NwZWV4X2ppdHRlcl9nZXQgQDUzCitzcGVleF9qaXR0ZXJfZ2V0X3BvaW50ZXJfdGltZXN0YW1wIEA1NAorc3BlZXhfaml0dGVyX2luaXQgQDU1CitzcGVleF9qaXR0ZXJfcHV0IEA1Ngorc3BlZXhfbGliX2dldF9tb2RlIEA1Nworc3BlZXhfcHJlcHJvY2VzcyBANTgKK3NwZWV4X3ByZXByb2Nlc3NfY3RsIEA1OQorc3BlZXhfcHJlcHJvY2Vzc19lc3RpbWF0ZV91cGRhdGUgQDYwCitzcGVleF9wcmVwcm9jZXNzX3N0YXRlX2Rlc3Ryb3kgQDYxCitzcGVleF9wcmVwcm9jZXNzX3N0YXRlX2luaXQgQDYyCitzcGVleF9uYl9tb2RlIEA2MyBEQVRBCitzcGVleF93Yl9tb2RlIEA2NCBEQVRBCitzcGVleF91d2JfbW9kZSBANjUgREFUQQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvd2luMzIvc3BlZXguaXNzIGIvM3JkcGFydHkvc3BlZXgvd2luMzIvc3BlZXguaXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMmEzOTgKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9zcGVleC5pc3MKQEAgLTAsMCArMSw0NyBAQAorOyBTY3JpcHQgZ2VuZXJhdGVkIGJ5IHRoZSBJbm5vIFNldHVwIFNjcmlwdCBXaXphcmQuDQorOyBTRUUgVEhFIERPQ1VNRU5UQVRJT04gRk9SIERFVEFJTFMgT04gQ1JFQVRJTkcgSU5OTyBTRVRVUCBTQ1JJUFQgRklMRVMhDQorDQorW1NldHVwXQ0KK0FwcE5hbWU9U3BlZXgNCitBcHBWZXJOYW1lPVNwZWV4IFYxLjEuNg0KK0FwcFB1Ymxpc2hlclVSTD1odHRwOi8vd3d3LnNwZWV4Lm9yZw0KK0FwcFN1cHBvcnRVUkw9aHR0cDovL3d3dy5zcGVleC5vcmcNCitBcHBVcGRhdGVzVVJMPWh0dHA6Ly93d3cuc3BlZXgub3JnDQorRGVmYXVsdERpck5hbWU9e3BmfVxTcGVleA0KK0RlZmF1bHRHcm91cE5hbWU9U3BlZXgNCitBbGxvd05vSWNvbnM9eWVzDQorTGljZW5zZUZpbGU9Li5cQ09QWUlORw0KK0luZm9BZnRlckZpbGU9Li5cUkVBRE1FDQorT3V0cHV0RGlyPS4NCitPdXRwdXRCYXNlRmlsZW5hbWU9c3BlZXhfd2luMzJfMS4xLjZfc2V0dXANCis7IHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgaWYgeW91IHdhbnQgeW91ciBpbnN0YWxsYXRpb24gdG8gcnVuIG9uIE5UIDMuNTEgdG9vLg0KKzsgTWluVmVyc2lvbj00LDMuNTENCisNCitbVGFza3NdDQorO05hbWU6ICJkZXNrdG9waWNvbiI7IERlc2NyaXB0aW9uOiAiQ3JlYXRlIGEgJmRlc2t0b3AgaWNvbiI7IEdyb3VwRGVzY3JpcHRpb246ICJBZGRpdGlvbmFsIGljb25zOiI7IE1pblZlcnNpb246IDQsNA0KKw0KK1tEaXJzXQ0KK05hbWU6ICJ7YXBwfSINCitOYW1lOiAie2FwcH1cZG9jIg0KK05hbWU6ICJ7YXBwfVxodG1sIg0KK05hbWU6ICJ7YXBwfVxsaWJzcGVleCINCitOYW1lOiAie2FwcH1cbGlic3BlZXhcaW5jbHVkZSINCisNCitbRmlsZXNdDQorU291cmNlOiAic3BlZXhkZWNcUmVsZWFzZVxzcGVleGRlYy5leGUiOyBEZXN0RGlyOiAie2FwcH0iOyBGbGFnczogaWdub3JldmVyc2lvbg0KK1NvdXJjZTogInNwZWV4ZW5jXFJlbGVhc2Vcc3BlZXhlbmMuZXhlIjsgRGVzdERpcjogInthcHB9IjsgRmxhZ3M6IGlnbm9yZXZlcnNpb24NCitTb3VyY2U6ICJsaWJzcGVleFxSZWxlYXNlXGxpYnNwZWV4LmxpYiI7IERlc3REaXI6ICJ7YXBwfVxsaWJzcGVleCI7IEZsYWdzOiBpZ25vcmV2ZXJzaW9uDQorU291cmNlOiAibGlic3BlZXhcUmVsZWFzZVxsaWJzcGVleC5leHAiOyBEZXN0RGlyOiAie2FwcH1cbGlic3BlZXgiOyBGbGFnczogaWdub3JldmVyc2lvbg0KK1NvdXJjZTogImxpYnNwZWV4XFJlbGVhc2VcbGlic3BlZXguZGxsIjsgRGVzdERpcjogInthcHB9XGxpYnNwZWV4IjsgRmxhZ3M6IGlnbm9yZXZlcnNpb24NCitTb3VyY2U6ICIuLlxpbmNsdWRlXHNwZWV4XHNwZWV4LmgiOyBEZXN0RGlyOiAie2FwcH1cbGlic3BlZXhcaW5jbHVkZSI7IEZsYWdzOiBpZ25vcmV2ZXJzaW9uDQorU291cmNlOiAiLi5caW5jbHVkZVxzcGVleFxzcGVleF9iaXRzLmgiOyBEZXN0RGlyOiAie2FwcH1cbGlic3BlZXhcaW5jbHVkZSI7IEZsYWdzOiBpZ25vcmV2ZXJzaW9uDQorU291cmNlOiAiLi5caW5jbHVkZVxzcGVleFxzcGVleF9jYWxsYmFja3MuaCI7IERlc3REaXI6ICJ7YXBwfVxsaWJzcGVleFxpbmNsdWRlIjsgRmxhZ3M6IGlnbm9yZXZlcnNpb24NCitTb3VyY2U6ICIuLlxpbmNsdWRlXHNwZWV4XHNwZWV4X2VjaG8uaCI7IERlc3REaXI6ICJ7YXBwfVxsaWJzcGVleFxpbmNsdWRlIjsgRmxhZ3M6IGlnbm9yZXZlcnNpb24NCitTb3VyY2U6ICIuLlxpbmNsdWRlXHNwZWV4XHNwZWV4X2hlYWRlci5oIjsgRGVzdERpcjogInthcHB9XGxpYnNwZWV4XGluY2x1ZGUiOyBGbGFnczogaWdub3JldmVyc2lvbg0KK1NvdXJjZTogIi4uXGluY2x1ZGVcc3BlZXhcc3BlZXhfaml0dGVyLmgiOyBEZXN0RGlyOiAie2FwcH1cbGlic3BlZXhcaW5jbHVkZSI7IEZsYWdzOiBpZ25vcmV2ZXJzaW9uDQorU291cmNlOiAiLi5caW5jbHVkZVxzcGVleFxzcGVleF9wcmVwcm9jZXNzLmgiOyBEZXN0RGlyOiAie2FwcH1cbGlic3BlZXhcaW5jbHVkZSI7IEZsYWdzOiBpZ25vcmV2ZXJzaW9uDQorU291cmNlOiAiLi5caW5jbHVkZVxzcGVleFxzcGVleF9zdGVyZW8uaCI7IERlc3REaXI6ICJ7YXBwfVxsaWJzcGVleFxpbmNsdWRlIjsgRmxhZ3M6IGlnbm9yZXZlcnNpb24NCitTb3VyY2U6ICIuLlxkb2NcbWFudWFsLnBkZiI7IERlc3REaXI6ICJ7YXBwfVxkb2MiOyBGbGFnczogaWdub3JldmVyc2lvbg0KKw0KK1tSdW5dDQorDQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvd2luMzIvc3BlZXhkZWMvTWFrZWZpbGUuYW0gYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9zcGVleGRlYy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzQ3OTIyCi0tLSAvZGV2L251bGwKKysrIGIvM3JkcGFydHkvc3BlZXgvd2luMzIvc3BlZXhkZWMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw2IEBACisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4uIC0qLU1ha2VmaWxlLSotCisKKyMgRGlzYWJsZSBhdXRvbWF0aWMgZGVwZW5kZW5jeSB0cmFja2luZyBpZiB1c2luZyBvdGhlciB0b29scyB0aGFuIGdjYyBhbmQgZ21ha2UKKyNBVVRPTUFLRV9PUFRJT05TID0gbm8tZGVwZW5kZW5jaWVzCisKK0VYVFJBX0RJU1QgPSBzcGVleGRlYy5kc3AgIHNwZWV4ZGVjLmRzdwpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvd2luMzIvc3BlZXhkZWMvc3BlZXhkZWMuZHNwIGIvM3JkcGFydHkvc3BlZXgvd2luMzIvc3BlZXhkZWMvc3BlZXhkZWMuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZmNkNDYKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9zcGVleGRlYy9zcGVleGRlYy5kc3AKQEAgLTAsMCArMSwxMzAgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0ic3BlZXhkZWMiIC0gUGFja2FnZSBPd25lcj08ND4NCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyAqKiBETyBOT1QgRURJVCAqKg0KKw0KKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMw0KKw0KK0NGRz1zcGVleGRlYyAtIFdpbjMyIERlYnVnDQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJzcGVleGRlYy5tYWsiLg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAic3BlZXhkZWMubWFrIiBDRkc9InNwZWV4ZGVjIC0gV2luMzIgRGVidWciDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgInNwZWV4ZGVjIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCishTUVTU0FHRSAic3BlZXhkZWMgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCishTUVTU0FHRSANCisNCisjIEJlZ2luIFByb2plY3QNCisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KKyMgUFJPUCBTY2NfUHJvak5hbWUgIiINCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KK0NQUD1jbC5leGUNCitSU0M9cmMuZXhlDQorDQorIUlGICAiJChDRkcpIiA9PSAic3BlZXhkZWMgLSBXaW4zMiBSZWxlYXNlIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgT3V0cHV0X0RpciAiUmVsZWFzZSINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL0dYIC9PMiAvSSAiLi4vLi4vbGlic3BlZXgiIC9JICIuLi8uLi8uLi9vZ2cvaW5jbHVkZSIgL0kgIi4uLy4uL2luY2x1ZGUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCisjIEFERCBCQVNFIFJTQyAvbCAweDgwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDgwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd2lubW0ubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoiTElCQ01ULmxpYiINCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAic3BlZXhkZWMgLSBXaW4zMiBEZWJ1ZyINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgT3V0cHV0X0RpciAiRGVidWciDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MNCisjIEFERCBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLi8uLi9saWJzcGVleCIgL0kgIi4uLy4uLy4uL29nZy9pbmNsdWRlIiAvSSAiLi4vLi4vaW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MNCisjIEFERCBCQVNFIFJTQyAvbCAweDgwOSAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweDgwOSAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd2lubW0ubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCisNCishRU5ESUYgDQorDQorIyBCZWdpbiBUYXJnZXQNCisNCisjIE5hbWUgInNwZWV4ZGVjIC0gV2luMzIgUmVsZWFzZSINCisjIE5hbWUgInNwZWV4ZGVjIC0gV2luMzIgRGVidWciDQorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNyY1xnZXRvcHQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzcmNcZ2V0b3B0MS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNyY1xzcGVleGRlYy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNyY1x3YXZfaW8uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzcmNcd2F2ZV9vdXQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJoO2hwcDtoeHg7aG07aW5sIg0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc3JjXGdldG9wdF93aW4uaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzcmNcd2F2X2lvLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc3JjXHdhdmVfb3V0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQorIyBCZWdpbiBHcm91cCAiUmVzb3VyY2UgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiDQorIyBFbmQgR3JvdXANCisjIEVuZCBUYXJnZXQNCisjIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvM3JkcGFydHkvc3BlZXgvd2luMzIvc3BlZXhkZWMvc3BlZXhkZWMuZHN3IGIvM3JkcGFydHkvc3BlZXgvd2luMzIvc3BlZXhkZWMvc3BlZXhkZWMuZHN3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZjJkMWYKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9zcGVleGRlYy9zcGVleGRlYy5kc3cKQEAgLTAsMCArMSw1OSBAQAorTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gV29ya3NwYWNlIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCisjIFdBUk5JTkc6IERPIE5PVCBFRElUIE9SIERFTEVURSBUSElTIFdPUktTUEFDRSBGSUxFIQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAibGlic3BlZXgiPS4uXGxpYnNwZWV4XGxpYnNwZWV4LmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAib2dnX3N0YXRpYyI9Ii4uXC4uXC4uXE1ZT1YtMS4wXG9nZ1x3aW4zMlxvZ2dfc3RhdGljLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNwZWV4ZGVjIj0uXHNwZWV4ZGVjLmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzcGVleA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIG9nZ19zdGF0aWMNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitHbG9iYWw6DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTwzPg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC93aW4zMi9zcGVleGVuYy9NYWtlZmlsZS5hbSBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL3NwZWV4ZW5jL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNTU4NGYKLS0tIC9kZXYvbnVsbAorKysgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9zcGVleGVuYy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDYgQEAKKyMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbi4gLSotTWFrZWZpbGUtKi0KKworIyBEaXNhYmxlIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nIGlmIHVzaW5nIG90aGVyIHRvb2xzIHRoYW4gZ2NjIGFuZCBnbWFrZQorI0FVVE9NQUtFX09QVElPTlMgPSBuby1kZXBlbmRlbmNpZXMKKworRVhUUkFfRElTVCA9IHNwZWV4ZW5jLmRzcCAgc3BlZXhlbmMuZHN3CmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC93aW4zMi9zcGVleGVuYy9zcGVleGVuYy5kc3AgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9zcGVleGVuYy9zcGVleGVuYy5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5ZGQ4OQotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL3NwZWV4ZW5jL3NwZWV4ZW5jLmRzcApAQCAtMCwwICsxLDEyMiBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJzcGVleGVuYyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCisjICoqIERPIE5PVCBFRElUICoqDQorDQorIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzDQorDQorQ0ZHPXNwZWV4ZW5jIC0gV2luMzIgRGVidWcNCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgInNwZWV4ZW5jLm1hayIuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJzcGVleGVuYy5tYWsiIENGRz0ic3BlZXhlbmMgLSBXaW4zMiBEZWJ1ZyINCishTUVTU0FHRSANCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCishTUVTU0FHRSANCishTUVTU0FHRSAic3BlZXhlbmMgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KKyFNRVNTQUdFICJzcGVleGVuYyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KKyFNRVNTQUdFIA0KKw0KKyMgQmVnaW4gUHJvamVjdA0KKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQorQ1BQPWNsLmV4ZQ0KK1JTQz1yYy5leGUNCisNCishSUYgICIkKENGRykiID09ICJzcGVleGVuYyAtIFdpbjMyIFJlbGVhc2UiDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCisjIEFERCBDUFAgL25vbG9nbyAvR1ggL094IC9PdCAvT2cgL09pIC9PYjIgL0kgIi4uLy4uL2xpYnNwZWV4IiAvSSAiLi4vLi4vLi4vb2dnL2luY2x1ZGUiIC9JICIuLi8uLi9pbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQorIyBBREQgQkFTRSBSU0MgL2wgMHg4MDkgL2QgIk5ERUJVRyINCisjIEFERCBSU0MgL2wgMHg4MDkgL2QgIk5ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoiTElCQ01ULmxpYiINCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAic3BlZXhlbmMgLSBXaW4zMiBEZWJ1ZyINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgT3V0cHV0X0RpciAiRGVidWciDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MNCisjIEFERCBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLi8uLi9saWJzcGVleCIgL0kgIi4uLy4uLy4uL29nZy9pbmNsdWRlIiAvSSAiLi4vLi4vaW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MNCisjIEFERCBCQVNFIFJTQyAvbCAweDgwOSAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweDgwOSAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KKw0KKyFFTkRJRiANCisNCisjIEJlZ2luIFRhcmdldA0KKw0KKyMgTmFtZSAic3BlZXhlbmMgLSBXaW4zMiBSZWxlYXNlIg0KKyMgTmFtZSAic3BlZXhlbmMgLSBXaW4zMiBEZWJ1ZyINCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0Ig0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc3JjXGdldG9wdC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNyY1xnZXRvcHQxLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc3JjXHNwZWV4ZW5jLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc3JjXHdhdl9pby5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmwiDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzcmNcZ2V0b3B0X3dpbi5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNyY1x3YXZfaW8uaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSINCisjIEVuZCBHcm91cA0KKyMgRW5kIFRhcmdldA0KKyMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9zcGVleC93aW4zMi9zcGVleGVuYy9zcGVleGVuYy5kc3cgYi8zcmRwYXJ0eS9zcGVleC93aW4zMi9zcGVleGVuYy9zcGVleGVuYy5kc3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhYTcyZAotLS0gL2Rldi9udWxsCisrKyBiLzNyZHBhcnR5L3NwZWV4L3dpbjMyL3NwZWV4ZW5jL3NwZWV4ZW5jLmRzdwpAQCAtMCwwICsxLDU5IEBACitNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBXb3Jrc3BhY2UgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KKyMgV0FSTklORzogRE8gTk9UIEVESVQgT1IgREVMRVRFIFRISVMgV09SS1NQQUNFIEZJTEUhDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJsaWJzcGVleCI9Li5cbGlic3BlZXhcbGlic3BlZXguZHNwIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJvZ2dfc3RhdGljIj0iLi5cLi5cLi5cTVlPVi0xLjBcb2dnXHdpbjMyXG9nZ19zdGF0aWMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic3BlZXhlbmMiPS5cc3BlZXhlbmMuZHNwIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNwZWV4DQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgb2dnX3N0YXRpYw0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK0dsb2JhbDoNCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDM+DQore3t7DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0K